index.cjs•17.6 MB
"use strict";
var __create = Object.create;
var __defProp = Object.defineProperty;
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
var __getOwnPropNames = Object.getOwnPropertyNames;
var __getProtoOf = Object.getPrototypeOf;
var __hasOwnProp = Object.prototype.hasOwnProperty;
var __esm = (fn, res) => function __init() {
return fn && (res = (0, fn[__getOwnPropNames(fn)[0]])(fn = 0)), res;
};
var __commonJS = (cb, mod) => function __require() {
return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
};
var __export = (target, all3) => {
for (var name in all3)
__defProp(target, name, { get: all3[name], enumerable: true });
};
var __copyProps = (to, from, except, desc) => {
if (from && typeof from === "object" || typeof from === "function") {
for (let key of __getOwnPropNames(from))
if (!__hasOwnProp.call(to, key) && key !== except)
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
}
return to;
};
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
// If the importer is in node compatibility mode or this is not an ESM
// file that has been converted to a CommonJS file using a Babel-
// compatible transform (i.e. "__esModule" has not been set), then set
// "default" to the CommonJS "module.exports" for node compatibility.
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
mod
));
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
// node_modules/zod/lib/index.mjs
function setErrorMap(map2) {
overrideErrorMap = map2;
}
function getErrorMap() {
return overrideErrorMap;
}
function addIssueToContext(ctx, issueData) {
const overrideMap = getErrorMap();
const issue = makeIssue({
issueData,
data: ctx.data,
path: ctx.path,
errorMaps: [
ctx.common.contextualErrorMap,
// contextual error map is first priority
ctx.schemaErrorMap,
// then schema-bound map if available
overrideMap,
// then global override map
overrideMap === errorMap ? void 0 : errorMap
// then global default map
].filter((x) => !!x)
});
ctx.common.issues.push(issue);
}
function __classPrivateFieldGet(receiver, state, kind, f) {
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
}
function __classPrivateFieldSet(receiver, state, value, kind, f) {
if (kind === "m") throw new TypeError("Private method is not writable");
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
return kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value), value;
}
function processCreateParams(params) {
if (!params)
return {};
const { errorMap: errorMap3, invalid_type_error, required_error, description } = params;
if (errorMap3 && (invalid_type_error || required_error)) {
throw new Error(`Can't use "invalid_type_error" or "required_error" in conjunction with custom error map.`);
}
if (errorMap3)
return { errorMap: errorMap3, description };
const customMap = (iss, ctx) => {
var _a2, _b;
const { message } = params;
if (iss.code === "invalid_enum_value") {
return { message: message !== null && message !== void 0 ? message : ctx.defaultError };
}
if (typeof ctx.data === "undefined") {
return { message: (_a2 = message !== null && message !== void 0 ? message : required_error) !== null && _a2 !== void 0 ? _a2 : ctx.defaultError };
}
if (iss.code !== "invalid_type")
return { message: ctx.defaultError };
return { message: (_b = message !== null && message !== void 0 ? message : invalid_type_error) !== null && _b !== void 0 ? _b : ctx.defaultError };
};
return { errorMap: customMap, description };
}
function timeRegexSource(args) {
let regex = `([01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d`;
if (args.precision) {
regex = `${regex}\\.\\d{${args.precision}}`;
} else if (args.precision == null) {
regex = `${regex}(\\.\\d+)?`;
}
return regex;
}
function timeRegex(args) {
return new RegExp(`^${timeRegexSource(args)}$`);
}
function datetimeRegex(args) {
let regex = `${dateRegexSource}T${timeRegexSource(args)}`;
const opts = [];
opts.push(args.local ? `Z?` : `Z`);
if (args.offset)
opts.push(`([+-]\\d{2}:?\\d{2})`);
regex = `${regex}(${opts.join("|")})`;
return new RegExp(`^${regex}$`);
}
function isValidIP(ip, version) {
if ((version === "v4" || !version) && ipv4Regex.test(ip)) {
return true;
}
if ((version === "v6" || !version) && ipv6Regex.test(ip)) {
return true;
}
return false;
}
function isValidJWT(jwt, alg) {
if (!jwtRegex.test(jwt))
return false;
try {
const [header] = jwt.split(".");
const base64 = header.replace(/-/g, "+").replace(/_/g, "/").padEnd(header.length + (4 - header.length % 4) % 4, "=");
const decoded = JSON.parse(atob(base64));
if (typeof decoded !== "object" || decoded === null)
return false;
if (!decoded.typ || !decoded.alg)
return false;
if (alg && decoded.alg !== alg)
return false;
return true;
} catch (_a2) {
return false;
}
}
function isValidCidr(ip, version) {
if ((version === "v4" || !version) && ipv4CidrRegex.test(ip)) {
return true;
}
if ((version === "v6" || !version) && ipv6CidrRegex.test(ip)) {
return true;
}
return false;
}
function floatSafeRemainder(val2, step) {
const valDecCount = (val2.toString().split(".")[1] || "").length;
const stepDecCount = (step.toString().split(".")[1] || "").length;
const decCount = valDecCount > stepDecCount ? valDecCount : stepDecCount;
const valInt = parseInt(val2.toFixed(decCount).replace(".", ""));
const stepInt = parseInt(step.toFixed(decCount).replace(".", ""));
return valInt % stepInt / Math.pow(10, decCount);
}
function deepPartialify(schema) {
if (schema instanceof ZodObject) {
const newShape = {};
for (const key in schema.shape) {
const fieldSchema = schema.shape[key];
newShape[key] = ZodOptional.create(deepPartialify(fieldSchema));
}
return new ZodObject({
...schema._def,
shape: () => newShape
});
} else if (schema instanceof ZodArray) {
return new ZodArray({
...schema._def,
type: deepPartialify(schema.element)
});
} else if (schema instanceof ZodOptional) {
return ZodOptional.create(deepPartialify(schema.unwrap()));
} else if (schema instanceof ZodNullable) {
return ZodNullable.create(deepPartialify(schema.unwrap()));
} else if (schema instanceof ZodTuple) {
return ZodTuple.create(schema.items.map((item) => deepPartialify(item)));
} else {
return schema;
}
}
function mergeValues(a, b) {
const aType = getParsedType(a);
const bType = getParsedType(b);
if (a === b) {
return { valid: true, data: a };
} else if (aType === ZodParsedType.object && bType === ZodParsedType.object) {
const bKeys = util.objectKeys(b);
const sharedKeys = util.objectKeys(a).filter((key) => bKeys.indexOf(key) !== -1);
const newObj = { ...a, ...b };
for (const key of sharedKeys) {
const sharedValue = mergeValues(a[key], b[key]);
if (!sharedValue.valid) {
return { valid: false };
}
newObj[key] = sharedValue.data;
}
return { valid: true, data: newObj };
} else if (aType === ZodParsedType.array && bType === ZodParsedType.array) {
if (a.length !== b.length) {
return { valid: false };
}
const newArray = [];
for (let index2 = 0; index2 < a.length; index2++) {
const itemA = a[index2];
const itemB = b[index2];
const sharedValue = mergeValues(itemA, itemB);
if (!sharedValue.valid) {
return { valid: false };
}
newArray.push(sharedValue.data);
}
return { valid: true, data: newArray };
} else if (aType === ZodParsedType.date && bType === ZodParsedType.date && +a === +b) {
return { valid: true, data: a };
} else {
return { valid: false };
}
}
function createZodEnum(values, params) {
return new ZodEnum({
values,
typeName: ZodFirstPartyTypeKind.ZodEnum,
...processCreateParams(params)
});
}
function cleanParams(params, data2) {
const p = typeof params === "function" ? params(data2) : typeof params === "string" ? { message: params } : params;
const p2 = typeof p === "string" ? { message: p } : p;
return p2;
}
function custom(check, _params = {}, fatal) {
if (check)
return ZodAny.create().superRefine((data2, ctx) => {
var _a2, _b;
const r = check(data2);
if (r instanceof Promise) {
return r.then((r2) => {
var _a3, _b2;
if (!r2) {
const params = cleanParams(_params, data2);
const _fatal = (_b2 = (_a3 = params.fatal) !== null && _a3 !== void 0 ? _a3 : fatal) !== null && _b2 !== void 0 ? _b2 : true;
ctx.addIssue({ code: "custom", ...params, fatal: _fatal });
}
});
}
if (!r) {
const params = cleanParams(_params, data2);
const _fatal = (_b = (_a2 = params.fatal) !== null && _a2 !== void 0 ? _a2 : fatal) !== null && _b !== void 0 ? _b : true;
ctx.addIssue({ code: "custom", ...params, fatal: _fatal });
}
return;
});
return ZodAny.create();
}
var util, objectUtil, ZodParsedType, getParsedType, ZodIssueCode, quotelessJson, ZodError, errorMap, overrideErrorMap, makeIssue, EMPTY_PATH, ParseStatus, INVALID, DIRTY, OK, isAborted, isDirty, isValid, isAsync, errorUtil, _ZodEnum_cache, _ZodNativeEnum_cache, ParseInputLazyPath, handleResult, ZodType, cuidRegex, cuid2Regex, ulidRegex, uuidRegex, nanoidRegex, jwtRegex, durationRegex, emailRegex, _emojiRegex, emojiRegex, ipv4Regex, ipv4CidrRegex, ipv6Regex, ipv6CidrRegex, base64Regex, base64urlRegex, dateRegexSource, dateRegex, ZodString, ZodNumber, ZodBigInt, ZodBoolean, ZodDate, ZodSymbol, ZodUndefined, ZodNull, ZodAny, ZodUnknown, ZodNever, ZodVoid, ZodArray, ZodObject, ZodUnion, getDiscriminator, ZodDiscriminatedUnion, ZodIntersection, ZodTuple, ZodRecord, ZodMap, ZodSet, ZodFunction, ZodLazy, ZodLiteral, ZodEnum, ZodNativeEnum, ZodPromise, ZodEffects, ZodOptional, ZodNullable, ZodDefault, ZodCatch, ZodNaN, BRAND, ZodBranded, ZodPipeline, ZodReadonly, late, ZodFirstPartyTypeKind, instanceOfType, stringType, numberType, nanType, bigIntType, booleanType, dateType, symbolType, undefinedType, nullType, anyType, unknownType, neverType, voidType, arrayType, objectType, strictObjectType, unionType, discriminatedUnionType, intersectionType, tupleType, recordType, mapType, setType, functionType, lazyType, literalType, enumType, nativeEnumType, promiseType, effectsType, optionalType, nullableType, preprocessType, pipelineType, ostring, onumber, oboolean, coerce, NEVER, z;
var init_lib = __esm({
"node_modules/zod/lib/index.mjs"() {
(function(util5) {
util5.assertEqual = (val2) => val2;
function assertIs(_arg) {
}
util5.assertIs = assertIs;
function assertNever(_x) {
throw new Error();
}
util5.assertNever = assertNever;
util5.arrayToEnum = (items) => {
const obj = {};
for (const item of items) {
obj[item] = item;
}
return obj;
};
util5.getValidEnumValues = (obj) => {
const validKeys = util5.objectKeys(obj).filter((k) => typeof obj[obj[k]] !== "number");
const filtered = {};
for (const k of validKeys) {
filtered[k] = obj[k];
}
return util5.objectValues(filtered);
};
util5.objectValues = (obj) => {
return util5.objectKeys(obj).map(function(e) {
return obj[e];
});
};
util5.objectKeys = typeof Object.keys === "function" ? (obj) => Object.keys(obj) : (object) => {
const keys = [];
for (const key in object) {
if (Object.prototype.hasOwnProperty.call(object, key)) {
keys.push(key);
}
}
return keys;
};
util5.find = (arr, checker) => {
for (const item of arr) {
if (checker(item))
return item;
}
return void 0;
};
util5.isInteger = typeof Number.isInteger === "function" ? (val2) => Number.isInteger(val2) : (val2) => typeof val2 === "number" && isFinite(val2) && Math.floor(val2) === val2;
function joinValues(array, separator = " | ") {
return array.map((val2) => typeof val2 === "string" ? `'${val2}'` : val2).join(separator);
}
util5.joinValues = joinValues;
util5.jsonStringifyReplacer = (_, value) => {
if (typeof value === "bigint") {
return value.toString();
}
return value;
};
})(util || (util = {}));
(function(objectUtil3) {
objectUtil3.mergeShapes = (first2, second) => {
return {
...first2,
...second
// second overwrites first
};
};
})(objectUtil || (objectUtil = {}));
ZodParsedType = util.arrayToEnum([
"string",
"nan",
"number",
"integer",
"float",
"boolean",
"date",
"bigint",
"symbol",
"function",
"undefined",
"null",
"array",
"object",
"unknown",
"promise",
"void",
"never",
"map",
"set"
]);
getParsedType = (data2) => {
const t = typeof data2;
switch (t) {
case "undefined":
return ZodParsedType.undefined;
case "string":
return ZodParsedType.string;
case "number":
return isNaN(data2) ? ZodParsedType.nan : ZodParsedType.number;
case "boolean":
return ZodParsedType.boolean;
case "function":
return ZodParsedType.function;
case "bigint":
return ZodParsedType.bigint;
case "symbol":
return ZodParsedType.symbol;
case "object":
if (Array.isArray(data2)) {
return ZodParsedType.array;
}
if (data2 === null) {
return ZodParsedType.null;
}
if (data2.then && typeof data2.then === "function" && data2.catch && typeof data2.catch === "function") {
return ZodParsedType.promise;
}
if (typeof Map !== "undefined" && data2 instanceof Map) {
return ZodParsedType.map;
}
if (typeof Set !== "undefined" && data2 instanceof Set) {
return ZodParsedType.set;
}
if (typeof Date !== "undefined" && data2 instanceof Date) {
return ZodParsedType.date;
}
return ZodParsedType.object;
default:
return ZodParsedType.unknown;
}
};
ZodIssueCode = util.arrayToEnum([
"invalid_type",
"invalid_literal",
"custom",
"invalid_union",
"invalid_union_discriminator",
"invalid_enum_value",
"unrecognized_keys",
"invalid_arguments",
"invalid_return_type",
"invalid_date",
"invalid_string",
"too_small",
"too_big",
"invalid_intersection_types",
"not_multiple_of",
"not_finite"
]);
quotelessJson = (obj) => {
const json = JSON.stringify(obj, null, 2);
return json.replace(/"([^"]+)":/g, "$1:");
};
ZodError = class _ZodError2 extends Error {
get errors() {
return this.issues;
}
constructor(issues) {
super();
this.issues = [];
this.addIssue = (sub) => {
this.issues = [...this.issues, sub];
};
this.addIssues = (subs = []) => {
this.issues = [...this.issues, ...subs];
};
const actualProto = new.target.prototype;
if (Object.setPrototypeOf) {
Object.setPrototypeOf(this, actualProto);
} else {
this.__proto__ = actualProto;
}
this.name = "ZodError";
this.issues = issues;
}
format(_mapper) {
const mapper = _mapper || function(issue) {
return issue.message;
};
const fieldErrors = { _errors: [] };
const processError = (error) => {
for (const issue of error.issues) {
if (issue.code === "invalid_union") {
issue.unionErrors.map(processError);
} else if (issue.code === "invalid_return_type") {
processError(issue.returnTypeError);
} else if (issue.code === "invalid_arguments") {
processError(issue.argumentsError);
} else if (issue.path.length === 0) {
fieldErrors._errors.push(mapper(issue));
} else {
let curr = fieldErrors;
let i = 0;
while (i < issue.path.length) {
const el = issue.path[i];
const terminal = i === issue.path.length - 1;
if (!terminal) {
curr[el] = curr[el] || { _errors: [] };
} else {
curr[el] = curr[el] || { _errors: [] };
curr[el]._errors.push(mapper(issue));
}
curr = curr[el];
i++;
}
}
}
};
processError(this);
return fieldErrors;
}
static assert(value) {
if (!(value instanceof _ZodError2)) {
throw new Error(`Not a ZodError: ${value}`);
}
}
toString() {
return this.message;
}
get message() {
return JSON.stringify(this.issues, util.jsonStringifyReplacer, 2);
}
get isEmpty() {
return this.issues.length === 0;
}
flatten(mapper = (issue) => issue.message) {
const fieldErrors = {};
const formErrors = [];
for (const sub of this.issues) {
if (sub.path.length > 0) {
fieldErrors[sub.path[0]] = fieldErrors[sub.path[0]] || [];
fieldErrors[sub.path[0]].push(mapper(sub));
} else {
formErrors.push(mapper(sub));
}
}
return { formErrors, fieldErrors };
}
get formErrors() {
return this.flatten();
}
};
ZodError.create = (issues) => {
const error = new ZodError(issues);
return error;
};
errorMap = (issue, _ctx) => {
let message;
switch (issue.code) {
case ZodIssueCode.invalid_type:
if (issue.received === ZodParsedType.undefined) {
message = "Required";
} else {
message = `Expected ${issue.expected}, received ${issue.received}`;
}
break;
case ZodIssueCode.invalid_literal:
message = `Invalid literal value, expected ${JSON.stringify(issue.expected, util.jsonStringifyReplacer)}`;
break;
case ZodIssueCode.unrecognized_keys:
message = `Unrecognized key(s) in object: ${util.joinValues(issue.keys, ", ")}`;
break;
case ZodIssueCode.invalid_union:
message = `Invalid input`;
break;
case ZodIssueCode.invalid_union_discriminator:
message = `Invalid discriminator value. Expected ${util.joinValues(issue.options)}`;
break;
case ZodIssueCode.invalid_enum_value:
message = `Invalid enum value. Expected ${util.joinValues(issue.options)}, received '${issue.received}'`;
break;
case ZodIssueCode.invalid_arguments:
message = `Invalid function arguments`;
break;
case ZodIssueCode.invalid_return_type:
message = `Invalid function return type`;
break;
case ZodIssueCode.invalid_date:
message = `Invalid date`;
break;
case ZodIssueCode.invalid_string:
if (typeof issue.validation === "object") {
if ("includes" in issue.validation) {
message = `Invalid input: must include "${issue.validation.includes}"`;
if (typeof issue.validation.position === "number") {
message = `${message} at one or more positions greater than or equal to ${issue.validation.position}`;
}
} else if ("startsWith" in issue.validation) {
message = `Invalid input: must start with "${issue.validation.startsWith}"`;
} else if ("endsWith" in issue.validation) {
message = `Invalid input: must end with "${issue.validation.endsWith}"`;
} else {
util.assertNever(issue.validation);
}
} else if (issue.validation !== "regex") {
message = `Invalid ${issue.validation}`;
} else {
message = "Invalid";
}
break;
case ZodIssueCode.too_small:
if (issue.type === "array")
message = `Array must contain ${issue.exact ? "exactly" : issue.inclusive ? `at least` : `more than`} ${issue.minimum} element(s)`;
else if (issue.type === "string")
message = `String must contain ${issue.exact ? "exactly" : issue.inclusive ? `at least` : `over`} ${issue.minimum} character(s)`;
else if (issue.type === "number")
message = `Number must be ${issue.exact ? `exactly equal to ` : issue.inclusive ? `greater than or equal to ` : `greater than `}${issue.minimum}`;
else if (issue.type === "date")
message = `Date must be ${issue.exact ? `exactly equal to ` : issue.inclusive ? `greater than or equal to ` : `greater than `}${new Date(Number(issue.minimum))}`;
else
message = "Invalid input";
break;
case ZodIssueCode.too_big:
if (issue.type === "array")
message = `Array must contain ${issue.exact ? `exactly` : issue.inclusive ? `at most` : `less than`} ${issue.maximum} element(s)`;
else if (issue.type === "string")
message = `String must contain ${issue.exact ? `exactly` : issue.inclusive ? `at most` : `under`} ${issue.maximum} character(s)`;
else if (issue.type === "number")
message = `Number must be ${issue.exact ? `exactly` : issue.inclusive ? `less than or equal to` : `less than`} ${issue.maximum}`;
else if (issue.type === "bigint")
message = `BigInt must be ${issue.exact ? `exactly` : issue.inclusive ? `less than or equal to` : `less than`} ${issue.maximum}`;
else if (issue.type === "date")
message = `Date must be ${issue.exact ? `exactly` : issue.inclusive ? `smaller than or equal to` : `smaller than`} ${new Date(Number(issue.maximum))}`;
else
message = "Invalid input";
break;
case ZodIssueCode.custom:
message = `Invalid input`;
break;
case ZodIssueCode.invalid_intersection_types:
message = `Intersection results could not be merged`;
break;
case ZodIssueCode.not_multiple_of:
message = `Number must be a multiple of ${issue.multipleOf}`;
break;
case ZodIssueCode.not_finite:
message = "Number must be finite";
break;
default:
message = _ctx.defaultError;
util.assertNever(issue);
}
return { message };
};
overrideErrorMap = errorMap;
makeIssue = (params) => {
const { data: data2, path, errorMaps, issueData } = params;
const fullPath = [...path, ...issueData.path || []];
const fullIssue = {
...issueData,
path: fullPath
};
if (issueData.message !== void 0) {
return {
...issueData,
path: fullPath,
message: issueData.message
};
}
let errorMessage = "";
const maps = errorMaps.filter((m) => !!m).slice().reverse();
for (const map2 of maps) {
errorMessage = map2(fullIssue, { data: data2, defaultError: errorMessage }).message;
}
return {
...issueData,
path: fullPath,
message: errorMessage
};
};
EMPTY_PATH = [];
ParseStatus = class _ParseStatus2 {
constructor() {
this.value = "valid";
}
dirty() {
if (this.value === "valid")
this.value = "dirty";
}
abort() {
if (this.value !== "aborted")
this.value = "aborted";
}
static mergeArray(status, results) {
const arrayValue = [];
for (const s of results) {
if (s.status === "aborted")
return INVALID;
if (s.status === "dirty")
status.dirty();
arrayValue.push(s.value);
}
return { status: status.value, value: arrayValue };
}
static async mergeObjectAsync(status, pairs) {
const syncPairs = [];
for (const pair of pairs) {
const key = await pair.key;
const value = await pair.value;
syncPairs.push({
key,
value
});
}
return _ParseStatus2.mergeObjectSync(status, syncPairs);
}
static mergeObjectSync(status, pairs) {
const finalObject = {};
for (const pair of pairs) {
const { key, value } = pair;
if (key.status === "aborted")
return INVALID;
if (value.status === "aborted")
return INVALID;
if (key.status === "dirty")
status.dirty();
if (value.status === "dirty")
status.dirty();
if (key.value !== "__proto__" && (typeof value.value !== "undefined" || pair.alwaysSet)) {
finalObject[key.value] = value.value;
}
}
return { status: status.value, value: finalObject };
}
};
INVALID = Object.freeze({
status: "aborted"
});
DIRTY = (value) => ({ status: "dirty", value });
OK = (value) => ({ status: "valid", value });
isAborted = (x) => x.status === "aborted";
isDirty = (x) => x.status === "dirty";
isValid = (x) => x.status === "valid";
isAsync = (x) => typeof Promise !== "undefined" && x instanceof Promise;
(function(errorUtil3) {
errorUtil3.errToObj = (message) => typeof message === "string" ? { message } : message || {};
errorUtil3.toString = (message) => typeof message === "string" ? message : message === null || message === void 0 ? void 0 : message.message;
})(errorUtil || (errorUtil = {}));
ParseInputLazyPath = class {
constructor(parent2, value, path, key) {
this._cachedPath = [];
this.parent = parent2;
this.data = value;
this._path = path;
this._key = key;
}
get path() {
if (!this._cachedPath.length) {
if (this._key instanceof Array) {
this._cachedPath.push(...this._path, ...this._key);
} else {
this._cachedPath.push(...this._path, this._key);
}
}
return this._cachedPath;
}
};
handleResult = (ctx, result) => {
if (isValid(result)) {
return { success: true, data: result.value };
} else {
if (!ctx.common.issues.length) {
throw new Error("Validation failed but no issues detected.");
}
return {
success: false,
get error() {
if (this._error)
return this._error;
const error = new ZodError(ctx.common.issues);
this._error = error;
return this._error;
}
};
}
};
ZodType = class {
get description() {
return this._def.description;
}
_getType(input) {
return getParsedType(input.data);
}
_getOrReturnCtx(input, ctx) {
return ctx || {
common: input.parent.common,
data: input.data,
parsedType: getParsedType(input.data),
schemaErrorMap: this._def.errorMap,
path: input.path,
parent: input.parent
};
}
_processInputParams(input) {
return {
status: new ParseStatus(),
ctx: {
common: input.parent.common,
data: input.data,
parsedType: getParsedType(input.data),
schemaErrorMap: this._def.errorMap,
path: input.path,
parent: input.parent
}
};
}
_parseSync(input) {
const result = this._parse(input);
if (isAsync(result)) {
throw new Error("Synchronous parse encountered promise.");
}
return result;
}
_parseAsync(input) {
const result = this._parse(input);
return Promise.resolve(result);
}
parse(data2, params) {
const result = this.safeParse(data2, params);
if (result.success)
return result.data;
throw result.error;
}
safeParse(data2, params) {
var _a2;
const ctx = {
common: {
issues: [],
async: (_a2 = params === null || params === void 0 ? void 0 : params.async) !== null && _a2 !== void 0 ? _a2 : false,
contextualErrorMap: params === null || params === void 0 ? void 0 : params.errorMap
},
path: (params === null || params === void 0 ? void 0 : params.path) || [],
schemaErrorMap: this._def.errorMap,
parent: null,
data: data2,
parsedType: getParsedType(data2)
};
const result = this._parseSync({ data: data2, path: ctx.path, parent: ctx });
return handleResult(ctx, result);
}
"~validate"(data2) {
var _a2, _b;
const ctx = {
common: {
issues: [],
async: !!this["~standard"].async
},
path: [],
schemaErrorMap: this._def.errorMap,
parent: null,
data: data2,
parsedType: getParsedType(data2)
};
if (!this["~standard"].async) {
try {
const result = this._parseSync({ data: data2, path: [], parent: ctx });
return isValid(result) ? {
value: result.value
} : {
issues: ctx.common.issues
};
} catch (err2) {
if ((_b = (_a2 = err2 === null || err2 === void 0 ? void 0 : err2.message) === null || _a2 === void 0 ? void 0 : _a2.toLowerCase()) === null || _b === void 0 ? void 0 : _b.includes("encountered")) {
this["~standard"].async = true;
}
ctx.common = {
issues: [],
async: true
};
}
}
return this._parseAsync({ data: data2, path: [], parent: ctx }).then((result) => isValid(result) ? {
value: result.value
} : {
issues: ctx.common.issues
});
}
async parseAsync(data2, params) {
const result = await this.safeParseAsync(data2, params);
if (result.success)
return result.data;
throw result.error;
}
async safeParseAsync(data2, params) {
const ctx = {
common: {
issues: [],
contextualErrorMap: params === null || params === void 0 ? void 0 : params.errorMap,
async: true
},
path: (params === null || params === void 0 ? void 0 : params.path) || [],
schemaErrorMap: this._def.errorMap,
parent: null,
data: data2,
parsedType: getParsedType(data2)
};
const maybeAsyncResult = this._parse({ data: data2, path: ctx.path, parent: ctx });
const result = await (isAsync(maybeAsyncResult) ? maybeAsyncResult : Promise.resolve(maybeAsyncResult));
return handleResult(ctx, result);
}
refine(check, message) {
const getIssueProperties = (val2) => {
if (typeof message === "string" || typeof message === "undefined") {
return { message };
} else if (typeof message === "function") {
return message(val2);
} else {
return message;
}
};
return this._refinement((val2, ctx) => {
const result = check(val2);
const setError = () => ctx.addIssue({
code: ZodIssueCode.custom,
...getIssueProperties(val2)
});
if (typeof Promise !== "undefined" && result instanceof Promise) {
return result.then((data2) => {
if (!data2) {
setError();
return false;
} else {
return true;
}
});
}
if (!result) {
setError();
return false;
} else {
return true;
}
});
}
refinement(check, refinementData) {
return this._refinement((val2, ctx) => {
if (!check(val2)) {
ctx.addIssue(typeof refinementData === "function" ? refinementData(val2, ctx) : refinementData);
return false;
} else {
return true;
}
});
}
_refinement(refinement) {
return new ZodEffects({
schema: this,
typeName: ZodFirstPartyTypeKind.ZodEffects,
effect: { type: "refinement", refinement }
});
}
superRefine(refinement) {
return this._refinement(refinement);
}
constructor(def) {
this.spa = this.safeParseAsync;
this._def = def;
this.parse = this.parse.bind(this);
this.safeParse = this.safeParse.bind(this);
this.parseAsync = this.parseAsync.bind(this);
this.safeParseAsync = this.safeParseAsync.bind(this);
this.spa = this.spa.bind(this);
this.refine = this.refine.bind(this);
this.refinement = this.refinement.bind(this);
this.superRefine = this.superRefine.bind(this);
this.optional = this.optional.bind(this);
this.nullable = this.nullable.bind(this);
this.nullish = this.nullish.bind(this);
this.array = this.array.bind(this);
this.promise = this.promise.bind(this);
this.or = this.or.bind(this);
this.and = this.and.bind(this);
this.transform = this.transform.bind(this);
this.brand = this.brand.bind(this);
this.default = this.default.bind(this);
this.catch = this.catch.bind(this);
this.describe = this.describe.bind(this);
this.pipe = this.pipe.bind(this);
this.readonly = this.readonly.bind(this);
this.isNullable = this.isNullable.bind(this);
this.isOptional = this.isOptional.bind(this);
this["~standard"] = {
version: 1,
vendor: "zod",
validate: (data2) => this["~validate"](data2)
};
}
optional() {
return ZodOptional.create(this, this._def);
}
nullable() {
return ZodNullable.create(this, this._def);
}
nullish() {
return this.nullable().optional();
}
array() {
return ZodArray.create(this);
}
promise() {
return ZodPromise.create(this, this._def);
}
or(option) {
return ZodUnion.create([this, option], this._def);
}
and(incoming) {
return ZodIntersection.create(this, incoming, this._def);
}
transform(transform) {
return new ZodEffects({
...processCreateParams(this._def),
schema: this,
typeName: ZodFirstPartyTypeKind.ZodEffects,
effect: { type: "transform", transform }
});
}
default(def) {
const defaultValueFunc = typeof def === "function" ? def : () => def;
return new ZodDefault({
...processCreateParams(this._def),
innerType: this,
defaultValue: defaultValueFunc,
typeName: ZodFirstPartyTypeKind.ZodDefault
});
}
brand() {
return new ZodBranded({
typeName: ZodFirstPartyTypeKind.ZodBranded,
type: this,
...processCreateParams(this._def)
});
}
catch(def) {
const catchValueFunc = typeof def === "function" ? def : () => def;
return new ZodCatch({
...processCreateParams(this._def),
innerType: this,
catchValue: catchValueFunc,
typeName: ZodFirstPartyTypeKind.ZodCatch
});
}
describe(description) {
const This = this.constructor;
return new This({
...this._def,
description
});
}
pipe(target) {
return ZodPipeline.create(this, target);
}
readonly() {
return ZodReadonly.create(this);
}
isOptional() {
return this.safeParse(void 0).success;
}
isNullable() {
return this.safeParse(null).success;
}
};
cuidRegex = /^c[^\s-]{8,}$/i;
cuid2Regex = /^[0-9a-z]+$/;
ulidRegex = /^[0-9A-HJKMNP-TV-Z]{26}$/i;
uuidRegex = /^[0-9a-fA-F]{8}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{12}$/i;
nanoidRegex = /^[a-z0-9_-]{21}$/i;
jwtRegex = /^[A-Za-z0-9-_]+\.[A-Za-z0-9-_]+\.[A-Za-z0-9-_]*$/;
durationRegex = /^[-+]?P(?!$)(?:(?:[-+]?\d+Y)|(?:[-+]?\d+[.,]\d+Y$))?(?:(?:[-+]?\d+M)|(?:[-+]?\d+[.,]\d+M$))?(?:(?:[-+]?\d+W)|(?:[-+]?\d+[.,]\d+W$))?(?:(?:[-+]?\d+D)|(?:[-+]?\d+[.,]\d+D$))?(?:T(?=[\d+-])(?:(?:[-+]?\d+H)|(?:[-+]?\d+[.,]\d+H$))?(?:(?:[-+]?\d+M)|(?:[-+]?\d+[.,]\d+M$))?(?:[-+]?\d+(?:[.,]\d+)?S)?)??$/;
emailRegex = /^(?!\.)(?!.*\.\.)([A-Z0-9_'+\-\.]*)[A-Z0-9_+-]@([A-Z0-9][A-Z0-9\-]*\.)+[A-Z]{2,}$/i;
_emojiRegex = `^(\\p{Extended_Pictographic}|\\p{Emoji_Component})+$`;
ipv4Regex = /^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])$/;
ipv4CidrRegex = /^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\/(3[0-2]|[12]?[0-9])$/;
ipv6Regex = /^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))$/;
ipv6CidrRegex = /^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))\/(12[0-8]|1[01][0-9]|[1-9]?[0-9])$/;
base64Regex = /^([0-9a-zA-Z+/]{4})*(([0-9a-zA-Z+/]{2}==)|([0-9a-zA-Z+/]{3}=))?$/;
base64urlRegex = /^([0-9a-zA-Z-_]{4})*(([0-9a-zA-Z-_]{2}(==)?)|([0-9a-zA-Z-_]{3}(=)?))?$/;
dateRegexSource = `((\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-((0[13578]|1[02])-(0[1-9]|[12]\\d|3[01])|(0[469]|11)-(0[1-9]|[12]\\d|30)|(02)-(0[1-9]|1\\d|2[0-8])))`;
dateRegex = new RegExp(`^${dateRegexSource}$`);
ZodString = class _ZodString2 extends ZodType {
_parse(input) {
if (this._def.coerce) {
input.data = String(input.data);
}
const parsedType = this._getType(input);
if (parsedType !== ZodParsedType.string) {
const ctx2 = this._getOrReturnCtx(input);
addIssueToContext(ctx2, {
code: ZodIssueCode.invalid_type,
expected: ZodParsedType.string,
received: ctx2.parsedType
});
return INVALID;
}
const status = new ParseStatus();
let ctx = void 0;
for (const check of this._def.checks) {
if (check.kind === "min") {
if (input.data.length < check.value) {
ctx = this._getOrReturnCtx(input, ctx);
addIssueToContext(ctx, {
code: ZodIssueCode.too_small,
minimum: check.value,
type: "string",
inclusive: true,
exact: false,
message: check.message
});
status.dirty();
}
} else if (check.kind === "max") {
if (input.data.length > check.value) {
ctx = this._getOrReturnCtx(input, ctx);
addIssueToContext(ctx, {
code: ZodIssueCode.too_big,
maximum: check.value,
type: "string",
inclusive: true,
exact: false,
message: check.message
});
status.dirty();
}
} else if (check.kind === "length") {
const tooBig = input.data.length > check.value;
const tooSmall = input.data.length < check.value;
if (tooBig || tooSmall) {
ctx = this._getOrReturnCtx(input, ctx);
if (tooBig) {
addIssueToContext(ctx, {
code: ZodIssueCode.too_big,
maximum: check.value,
type: "string",
inclusive: true,
exact: true,
message: check.message
});
} else if (tooSmall) {
addIssueToContext(ctx, {
code: ZodIssueCode.too_small,
minimum: check.value,
type: "string",
inclusive: true,
exact: true,
message: check.message
});
}
status.dirty();
}
} else if (check.kind === "email") {
if (!emailRegex.test(input.data)) {
ctx = this._getOrReturnCtx(input, ctx);
addIssueToContext(ctx, {
validation: "email",
code: ZodIssueCode.invalid_string,
message: check.message
});
status.dirty();
}
} else if (check.kind === "emoji") {
if (!emojiRegex) {
emojiRegex = new RegExp(_emojiRegex, "u");
}
if (!emojiRegex.test(input.data)) {
ctx = this._getOrReturnCtx(input, ctx);
addIssueToContext(ctx, {
validation: "emoji",
code: ZodIssueCode.invalid_string,
message: check.message
});
status.dirty();
}
} else if (check.kind === "uuid") {
if (!uuidRegex.test(input.data)) {
ctx = this._getOrReturnCtx(input, ctx);
addIssueToContext(ctx, {
validation: "uuid",
code: ZodIssueCode.invalid_string,
message: check.message
});
status.dirty();
}
} else if (check.kind === "nanoid") {
if (!nanoidRegex.test(input.data)) {
ctx = this._getOrReturnCtx(input, ctx);
addIssueToContext(ctx, {
validation: "nanoid",
code: ZodIssueCode.invalid_string,
message: check.message
});
status.dirty();
}
} else if (check.kind === "cuid") {
if (!cuidRegex.test(input.data)) {
ctx = this._getOrReturnCtx(input, ctx);
addIssueToContext(ctx, {
validation: "cuid",
code: ZodIssueCode.invalid_string,
message: check.message
});
status.dirty();
}
} else if (check.kind === "cuid2") {
if (!cuid2Regex.test(input.data)) {
ctx = this._getOrReturnCtx(input, ctx);
addIssueToContext(ctx, {
validation: "cuid2",
code: ZodIssueCode.invalid_string,
message: check.message
});
status.dirty();
}
} else if (check.kind === "ulid") {
if (!ulidRegex.test(input.data)) {
ctx = this._getOrReturnCtx(input, ctx);
addIssueToContext(ctx, {
validation: "ulid",
code: ZodIssueCode.invalid_string,
message: check.message
});
status.dirty();
}
} else if (check.kind === "url") {
try {
new URL(input.data);
} catch (_a2) {
ctx = this._getOrReturnCtx(input, ctx);
addIssueToContext(ctx, {
validation: "url",
code: ZodIssueCode.invalid_string,
message: check.message
});
status.dirty();
}
} else if (check.kind === "regex") {
check.regex.lastIndex = 0;
const testResult = check.regex.test(input.data);
if (!testResult) {
ctx = this._getOrReturnCtx(input, ctx);
addIssueToContext(ctx, {
validation: "regex",
code: ZodIssueCode.invalid_string,
message: check.message
});
status.dirty();
}
} else if (check.kind === "trim") {
input.data = input.data.trim();
} else if (check.kind === "includes") {
if (!input.data.includes(check.value, check.position)) {
ctx = this._getOrReturnCtx(input, ctx);
addIssueToContext(ctx, {
code: ZodIssueCode.invalid_string,
validation: { includes: check.value, position: check.position },
message: check.message
});
status.dirty();
}
} else if (check.kind === "toLowerCase") {
input.data = input.data.toLowerCase();
} else if (check.kind === "toUpperCase") {
input.data = input.data.toUpperCase();
} else if (check.kind === "startsWith") {
if (!input.data.startsWith(check.value)) {
ctx = this._getOrReturnCtx(input, ctx);
addIssueToContext(ctx, {
code: ZodIssueCode.invalid_string,
validation: { startsWith: check.value },
message: check.message
});
status.dirty();
}
} else if (check.kind === "endsWith") {
if (!input.data.endsWith(check.value)) {
ctx = this._getOrReturnCtx(input, ctx);
addIssueToContext(ctx, {
code: ZodIssueCode.invalid_string,
validation: { endsWith: check.value },
message: check.message
});
status.dirty();
}
} else if (check.kind === "datetime") {
const regex = datetimeRegex(check);
if (!regex.test(input.data)) {
ctx = this._getOrReturnCtx(input, ctx);
addIssueToContext(ctx, {
code: ZodIssueCode.invalid_string,
validation: "datetime",
message: check.message
});
status.dirty();
}
} else if (check.kind === "date") {
const regex = dateRegex;
if (!regex.test(input.data)) {
ctx = this._getOrReturnCtx(input, ctx);
addIssueToContext(ctx, {
code: ZodIssueCode.invalid_string,
validation: "date",
message: check.message
});
status.dirty();
}
} else if (check.kind === "time") {
const regex = timeRegex(check);
if (!regex.test(input.data)) {
ctx = this._getOrReturnCtx(input, ctx);
addIssueToContext(ctx, {
code: ZodIssueCode.invalid_string,
validation: "time",
message: check.message
});
status.dirty();
}
} else if (check.kind === "duration") {
if (!durationRegex.test(input.data)) {
ctx = this._getOrReturnCtx(input, ctx);
addIssueToContext(ctx, {
validation: "duration",
code: ZodIssueCode.invalid_string,
message: check.message
});
status.dirty();
}
} else if (check.kind === "ip") {
if (!isValidIP(input.data, check.version)) {
ctx = this._getOrReturnCtx(input, ctx);
addIssueToContext(ctx, {
validation: "ip",
code: ZodIssueCode.invalid_string,
message: check.message
});
status.dirty();
}
} else if (check.kind === "jwt") {
if (!isValidJWT(input.data, check.alg)) {
ctx = this._getOrReturnCtx(input, ctx);
addIssueToContext(ctx, {
validation: "jwt",
code: ZodIssueCode.invalid_string,
message: check.message
});
status.dirty();
}
} else if (check.kind === "cidr") {
if (!isValidCidr(input.data, check.version)) {
ctx = this._getOrReturnCtx(input, ctx);
addIssueToContext(ctx, {
validation: "cidr",
code: ZodIssueCode.invalid_string,
message: check.message
});
status.dirty();
}
} else if (check.kind === "base64") {
if (!base64Regex.test(input.data)) {
ctx = this._getOrReturnCtx(input, ctx);
addIssueToContext(ctx, {
validation: "base64",
code: ZodIssueCode.invalid_string,
message: check.message
});
status.dirty();
}
} else if (check.kind === "base64url") {
if (!base64urlRegex.test(input.data)) {
ctx = this._getOrReturnCtx(input, ctx);
addIssueToContext(ctx, {
validation: "base64url",
code: ZodIssueCode.invalid_string,
message: check.message
});
status.dirty();
}
} else {
util.assertNever(check);
}
}
return { status: status.value, value: input.data };
}
_regex(regex, validation, message) {
return this.refinement((data2) => regex.test(data2), {
validation,
code: ZodIssueCode.invalid_string,
...errorUtil.errToObj(message)
});
}
_addCheck(check) {
return new _ZodString2({
...this._def,
checks: [...this._def.checks, check]
});
}
email(message) {
return this._addCheck({ kind: "email", ...errorUtil.errToObj(message) });
}
url(message) {
return this._addCheck({ kind: "url", ...errorUtil.errToObj(message) });
}
emoji(message) {
return this._addCheck({ kind: "emoji", ...errorUtil.errToObj(message) });
}
uuid(message) {
return this._addCheck({ kind: "uuid", ...errorUtil.errToObj(message) });
}
nanoid(message) {
return this._addCheck({ kind: "nanoid", ...errorUtil.errToObj(message) });
}
cuid(message) {
return this._addCheck({ kind: "cuid", ...errorUtil.errToObj(message) });
}
cuid2(message) {
return this._addCheck({ kind: "cuid2", ...errorUtil.errToObj(message) });
}
ulid(message) {
return this._addCheck({ kind: "ulid", ...errorUtil.errToObj(message) });
}
base64(message) {
return this._addCheck({ kind: "base64", ...errorUtil.errToObj(message) });
}
base64url(message) {
return this._addCheck({
kind: "base64url",
...errorUtil.errToObj(message)
});
}
jwt(options) {
return this._addCheck({ kind: "jwt", ...errorUtil.errToObj(options) });
}
ip(options) {
return this._addCheck({ kind: "ip", ...errorUtil.errToObj(options) });
}
cidr(options) {
return this._addCheck({ kind: "cidr", ...errorUtil.errToObj(options) });
}
datetime(options) {
var _a2, _b;
if (typeof options === "string") {
return this._addCheck({
kind: "datetime",
precision: null,
offset: false,
local: false,
message: options
});
}
return this._addCheck({
kind: "datetime",
precision: typeof (options === null || options === void 0 ? void 0 : options.precision) === "undefined" ? null : options === null || options === void 0 ? void 0 : options.precision,
offset: (_a2 = options === null || options === void 0 ? void 0 : options.offset) !== null && _a2 !== void 0 ? _a2 : false,
local: (_b = options === null || options === void 0 ? void 0 : options.local) !== null && _b !== void 0 ? _b : false,
...errorUtil.errToObj(options === null || options === void 0 ? void 0 : options.message)
});
}
date(message) {
return this._addCheck({ kind: "date", message });
}
time(options) {
if (typeof options === "string") {
return this._addCheck({
kind: "time",
precision: null,
message: options
});
}
return this._addCheck({
kind: "time",
precision: typeof (options === null || options === void 0 ? void 0 : options.precision) === "undefined" ? null : options === null || options === void 0 ? void 0 : options.precision,
...errorUtil.errToObj(options === null || options === void 0 ? void 0 : options.message)
});
}
duration(message) {
return this._addCheck({ kind: "duration", ...errorUtil.errToObj(message) });
}
regex(regex, message) {
return this._addCheck({
kind: "regex",
regex,
...errorUtil.errToObj(message)
});
}
includes(value, options) {
return this._addCheck({
kind: "includes",
value,
position: options === null || options === void 0 ? void 0 : options.position,
...errorUtil.errToObj(options === null || options === void 0 ? void 0 : options.message)
});
}
startsWith(value, message) {
return this._addCheck({
kind: "startsWith",
value,
...errorUtil.errToObj(message)
});
}
endsWith(value, message) {
return this._addCheck({
kind: "endsWith",
value,
...errorUtil.errToObj(message)
});
}
min(minLength, message) {
return this._addCheck({
kind: "min",
value: minLength,
...errorUtil.errToObj(message)
});
}
max(maxLength, message) {
return this._addCheck({
kind: "max",
value: maxLength,
...errorUtil.errToObj(message)
});
}
length(len, message) {
return this._addCheck({
kind: "length",
value: len,
...errorUtil.errToObj(message)
});
}
/**
* Equivalent to `.min(1)`
*/
nonempty(message) {
return this.min(1, errorUtil.errToObj(message));
}
trim() {
return new _ZodString2({
...this._def,
checks: [...this._def.checks, { kind: "trim" }]
});
}
toLowerCase() {
return new _ZodString2({
...this._def,
checks: [...this._def.checks, { kind: "toLowerCase" }]
});
}
toUpperCase() {
return new _ZodString2({
...this._def,
checks: [...this._def.checks, { kind: "toUpperCase" }]
});
}
get isDatetime() {
return !!this._def.checks.find((ch) => ch.kind === "datetime");
}
get isDate() {
return !!this._def.checks.find((ch) => ch.kind === "date");
}
get isTime() {
return !!this._def.checks.find((ch) => ch.kind === "time");
}
get isDuration() {
return !!this._def.checks.find((ch) => ch.kind === "duration");
}
get isEmail() {
return !!this._def.checks.find((ch) => ch.kind === "email");
}
get isURL() {
return !!this._def.checks.find((ch) => ch.kind === "url");
}
get isEmoji() {
return !!this._def.checks.find((ch) => ch.kind === "emoji");
}
get isUUID() {
return !!this._def.checks.find((ch) => ch.kind === "uuid");
}
get isNANOID() {
return !!this._def.checks.find((ch) => ch.kind === "nanoid");
}
get isCUID() {
return !!this._def.checks.find((ch) => ch.kind === "cuid");
}
get isCUID2() {
return !!this._def.checks.find((ch) => ch.kind === "cuid2");
}
get isULID() {
return !!this._def.checks.find((ch) => ch.kind === "ulid");
}
get isIP() {
return !!this._def.checks.find((ch) => ch.kind === "ip");
}
get isCIDR() {
return !!this._def.checks.find((ch) => ch.kind === "cidr");
}
get isBase64() {
return !!this._def.checks.find((ch) => ch.kind === "base64");
}
get isBase64url() {
return !!this._def.checks.find((ch) => ch.kind === "base64url");
}
get minLength() {
let min = null;
for (const ch of this._def.checks) {
if (ch.kind === "min") {
if (min === null || ch.value > min)
min = ch.value;
}
}
return min;
}
get maxLength() {
let max = null;
for (const ch of this._def.checks) {
if (ch.kind === "max") {
if (max === null || ch.value < max)
max = ch.value;
}
}
return max;
}
};
ZodString.create = (params) => {
var _a2;
return new ZodString({
checks: [],
typeName: ZodFirstPartyTypeKind.ZodString,
coerce: (_a2 = params === null || params === void 0 ? void 0 : params.coerce) !== null && _a2 !== void 0 ? _a2 : false,
...processCreateParams(params)
});
};
ZodNumber = class _ZodNumber2 extends ZodType {
constructor() {
super(...arguments);
this.min = this.gte;
this.max = this.lte;
this.step = this.multipleOf;
}
_parse(input) {
if (this._def.coerce) {
input.data = Number(input.data);
}
const parsedType = this._getType(input);
if (parsedType !== ZodParsedType.number) {
const ctx2 = this._getOrReturnCtx(input);
addIssueToContext(ctx2, {
code: ZodIssueCode.invalid_type,
expected: ZodParsedType.number,
received: ctx2.parsedType
});
return INVALID;
}
let ctx = void 0;
const status = new ParseStatus();
for (const check of this._def.checks) {
if (check.kind === "int") {
if (!util.isInteger(input.data)) {
ctx = this._getOrReturnCtx(input, ctx);
addIssueToContext(ctx, {
code: ZodIssueCode.invalid_type,
expected: "integer",
received: "float",
message: check.message
});
status.dirty();
}
} else if (check.kind === "min") {
const tooSmall = check.inclusive ? input.data < check.value : input.data <= check.value;
if (tooSmall) {
ctx = this._getOrReturnCtx(input, ctx);
addIssueToContext(ctx, {
code: ZodIssueCode.too_small,
minimum: check.value,
type: "number",
inclusive: check.inclusive,
exact: false,
message: check.message
});
status.dirty();
}
} else if (check.kind === "max") {
const tooBig = check.inclusive ? input.data > check.value : input.data >= check.value;
if (tooBig) {
ctx = this._getOrReturnCtx(input, ctx);
addIssueToContext(ctx, {
code: ZodIssueCode.too_big,
maximum: check.value,
type: "number",
inclusive: check.inclusive,
exact: false,
message: check.message
});
status.dirty();
}
} else if (check.kind === "multipleOf") {
if (floatSafeRemainder(input.data, check.value) !== 0) {
ctx = this._getOrReturnCtx(input, ctx);
addIssueToContext(ctx, {
code: ZodIssueCode.not_multiple_of,
multipleOf: check.value,
message: check.message
});
status.dirty();
}
} else if (check.kind === "finite") {
if (!Number.isFinite(input.data)) {
ctx = this._getOrReturnCtx(input, ctx);
addIssueToContext(ctx, {
code: ZodIssueCode.not_finite,
message: check.message
});
status.dirty();
}
} else {
util.assertNever(check);
}
}
return { status: status.value, value: input.data };
}
gte(value, message) {
return this.setLimit("min", value, true, errorUtil.toString(message));
}
gt(value, message) {
return this.setLimit("min", value, false, errorUtil.toString(message));
}
lte(value, message) {
return this.setLimit("max", value, true, errorUtil.toString(message));
}
lt(value, message) {
return this.setLimit("max", value, false, errorUtil.toString(message));
}
setLimit(kind, value, inclusive, message) {
return new _ZodNumber2({
...this._def,
checks: [
...this._def.checks,
{
kind,
value,
inclusive,
message: errorUtil.toString(message)
}
]
});
}
_addCheck(check) {
return new _ZodNumber2({
...this._def,
checks: [...this._def.checks, check]
});
}
int(message) {
return this._addCheck({
kind: "int",
message: errorUtil.toString(message)
});
}
positive(message) {
return this._addCheck({
kind: "min",
value: 0,
inclusive: false,
message: errorUtil.toString(message)
});
}
negative(message) {
return this._addCheck({
kind: "max",
value: 0,
inclusive: false,
message: errorUtil.toString(message)
});
}
nonpositive(message) {
return this._addCheck({
kind: "max",
value: 0,
inclusive: true,
message: errorUtil.toString(message)
});
}
nonnegative(message) {
return this._addCheck({
kind: "min",
value: 0,
inclusive: true,
message: errorUtil.toString(message)
});
}
multipleOf(value, message) {
return this._addCheck({
kind: "multipleOf",
value,
message: errorUtil.toString(message)
});
}
finite(message) {
return this._addCheck({
kind: "finite",
message: errorUtil.toString(message)
});
}
safe(message) {
return this._addCheck({
kind: "min",
inclusive: true,
value: Number.MIN_SAFE_INTEGER,
message: errorUtil.toString(message)
})._addCheck({
kind: "max",
inclusive: true,
value: Number.MAX_SAFE_INTEGER,
message: errorUtil.toString(message)
});
}
get minValue() {
let min = null;
for (const ch of this._def.checks) {
if (ch.kind === "min") {
if (min === null || ch.value > min)
min = ch.value;
}
}
return min;
}
get maxValue() {
let max = null;
for (const ch of this._def.checks) {
if (ch.kind === "max") {
if (max === null || ch.value < max)
max = ch.value;
}
}
return max;
}
get isInt() {
return !!this._def.checks.find((ch) => ch.kind === "int" || ch.kind === "multipleOf" && util.isInteger(ch.value));
}
get isFinite() {
let max = null, min = null;
for (const ch of this._def.checks) {
if (ch.kind === "finite" || ch.kind === "int" || ch.kind === "multipleOf") {
return true;
} else if (ch.kind === "min") {
if (min === null || ch.value > min)
min = ch.value;
} else if (ch.kind === "max") {
if (max === null || ch.value < max)
max = ch.value;
}
}
return Number.isFinite(min) && Number.isFinite(max);
}
};
ZodNumber.create = (params) => {
return new ZodNumber({
checks: [],
typeName: ZodFirstPartyTypeKind.ZodNumber,
coerce: (params === null || params === void 0 ? void 0 : params.coerce) || false,
...processCreateParams(params)
});
};
ZodBigInt = class _ZodBigInt2 extends ZodType {
constructor() {
super(...arguments);
this.min = this.gte;
this.max = this.lte;
}
_parse(input) {
if (this._def.coerce) {
try {
input.data = BigInt(input.data);
} catch (_a2) {
return this._getInvalidInput(input);
}
}
const parsedType = this._getType(input);
if (parsedType !== ZodParsedType.bigint) {
return this._getInvalidInput(input);
}
let ctx = void 0;
const status = new ParseStatus();
for (const check of this._def.checks) {
if (check.kind === "min") {
const tooSmall = check.inclusive ? input.data < check.value : input.data <= check.value;
if (tooSmall) {
ctx = this._getOrReturnCtx(input, ctx);
addIssueToContext(ctx, {
code: ZodIssueCode.too_small,
type: "bigint",
minimum: check.value,
inclusive: check.inclusive,
message: check.message
});
status.dirty();
}
} else if (check.kind === "max") {
const tooBig = check.inclusive ? input.data > check.value : input.data >= check.value;
if (tooBig) {
ctx = this._getOrReturnCtx(input, ctx);
addIssueToContext(ctx, {
code: ZodIssueCode.too_big,
type: "bigint",
maximum: check.value,
inclusive: check.inclusive,
message: check.message
});
status.dirty();
}
} else if (check.kind === "multipleOf") {
if (input.data % check.value !== BigInt(0)) {
ctx = this._getOrReturnCtx(input, ctx);
addIssueToContext(ctx, {
code: ZodIssueCode.not_multiple_of,
multipleOf: check.value,
message: check.message
});
status.dirty();
}
} else {
util.assertNever(check);
}
}
return { status: status.value, value: input.data };
}
_getInvalidInput(input) {
const ctx = this._getOrReturnCtx(input);
addIssueToContext(ctx, {
code: ZodIssueCode.invalid_type,
expected: ZodParsedType.bigint,
received: ctx.parsedType
});
return INVALID;
}
gte(value, message) {
return this.setLimit("min", value, true, errorUtil.toString(message));
}
gt(value, message) {
return this.setLimit("min", value, false, errorUtil.toString(message));
}
lte(value, message) {
return this.setLimit("max", value, true, errorUtil.toString(message));
}
lt(value, message) {
return this.setLimit("max", value, false, errorUtil.toString(message));
}
setLimit(kind, value, inclusive, message) {
return new _ZodBigInt2({
...this._def,
checks: [
...this._def.checks,
{
kind,
value,
inclusive,
message: errorUtil.toString(message)
}
]
});
}
_addCheck(check) {
return new _ZodBigInt2({
...this._def,
checks: [...this._def.checks, check]
});
}
positive(message) {
return this._addCheck({
kind: "min",
value: BigInt(0),
inclusive: false,
message: errorUtil.toString(message)
});
}
negative(message) {
return this._addCheck({
kind: "max",
value: BigInt(0),
inclusive: false,
message: errorUtil.toString(message)
});
}
nonpositive(message) {
return this._addCheck({
kind: "max",
value: BigInt(0),
inclusive: true,
message: errorUtil.toString(message)
});
}
nonnegative(message) {
return this._addCheck({
kind: "min",
value: BigInt(0),
inclusive: true,
message: errorUtil.toString(message)
});
}
multipleOf(value, message) {
return this._addCheck({
kind: "multipleOf",
value,
message: errorUtil.toString(message)
});
}
get minValue() {
let min = null;
for (const ch of this._def.checks) {
if (ch.kind === "min") {
if (min === null || ch.value > min)
min = ch.value;
}
}
return min;
}
get maxValue() {
let max = null;
for (const ch of this._def.checks) {
if (ch.kind === "max") {
if (max === null || ch.value < max)
max = ch.value;
}
}
return max;
}
};
ZodBigInt.create = (params) => {
var _a2;
return new ZodBigInt({
checks: [],
typeName: ZodFirstPartyTypeKind.ZodBigInt,
coerce: (_a2 = params === null || params === void 0 ? void 0 : params.coerce) !== null && _a2 !== void 0 ? _a2 : false,
...processCreateParams(params)
});
};
ZodBoolean = class extends ZodType {
_parse(input) {
if (this._def.coerce) {
input.data = Boolean(input.data);
}
const parsedType = this._getType(input);
if (parsedType !== ZodParsedType.boolean) {
const ctx = this._getOrReturnCtx(input);
addIssueToContext(ctx, {
code: ZodIssueCode.invalid_type,
expected: ZodParsedType.boolean,
received: ctx.parsedType
});
return INVALID;
}
return OK(input.data);
}
};
ZodBoolean.create = (params) => {
return new ZodBoolean({
typeName: ZodFirstPartyTypeKind.ZodBoolean,
coerce: (params === null || params === void 0 ? void 0 : params.coerce) || false,
...processCreateParams(params)
});
};
ZodDate = class _ZodDate2 extends ZodType {
_parse(input) {
if (this._def.coerce) {
input.data = new Date(input.data);
}
const parsedType = this._getType(input);
if (parsedType !== ZodParsedType.date) {
const ctx2 = this._getOrReturnCtx(input);
addIssueToContext(ctx2, {
code: ZodIssueCode.invalid_type,
expected: ZodParsedType.date,
received: ctx2.parsedType
});
return INVALID;
}
if (isNaN(input.data.getTime())) {
const ctx2 = this._getOrReturnCtx(input);
addIssueToContext(ctx2, {
code: ZodIssueCode.invalid_date
});
return INVALID;
}
const status = new ParseStatus();
let ctx = void 0;
for (const check of this._def.checks) {
if (check.kind === "min") {
if (input.data.getTime() < check.value) {
ctx = this._getOrReturnCtx(input, ctx);
addIssueToContext(ctx, {
code: ZodIssueCode.too_small,
message: check.message,
inclusive: true,
exact: false,
minimum: check.value,
type: "date"
});
status.dirty();
}
} else if (check.kind === "max") {
if (input.data.getTime() > check.value) {
ctx = this._getOrReturnCtx(input, ctx);
addIssueToContext(ctx, {
code: ZodIssueCode.too_big,
message: check.message,
inclusive: true,
exact: false,
maximum: check.value,
type: "date"
});
status.dirty();
}
} else {
util.assertNever(check);
}
}
return {
status: status.value,
value: new Date(input.data.getTime())
};
}
_addCheck(check) {
return new _ZodDate2({
...this._def,
checks: [...this._def.checks, check]
});
}
min(minDate, message) {
return this._addCheck({
kind: "min",
value: minDate.getTime(),
message: errorUtil.toString(message)
});
}
max(maxDate, message) {
return this._addCheck({
kind: "max",
value: maxDate.getTime(),
message: errorUtil.toString(message)
});
}
get minDate() {
let min = null;
for (const ch of this._def.checks) {
if (ch.kind === "min") {
if (min === null || ch.value > min)
min = ch.value;
}
}
return min != null ? new Date(min) : null;
}
get maxDate() {
let max = null;
for (const ch of this._def.checks) {
if (ch.kind === "max") {
if (max === null || ch.value < max)
max = ch.value;
}
}
return max != null ? new Date(max) : null;
}
};
ZodDate.create = (params) => {
return new ZodDate({
checks: [],
coerce: (params === null || params === void 0 ? void 0 : params.coerce) || false,
typeName: ZodFirstPartyTypeKind.ZodDate,
...processCreateParams(params)
});
};
ZodSymbol = class extends ZodType {
_parse(input) {
const parsedType = this._getType(input);
if (parsedType !== ZodParsedType.symbol) {
const ctx = this._getOrReturnCtx(input);
addIssueToContext(ctx, {
code: ZodIssueCode.invalid_type,
expected: ZodParsedType.symbol,
received: ctx.parsedType
});
return INVALID;
}
return OK(input.data);
}
};
ZodSymbol.create = (params) => {
return new ZodSymbol({
typeName: ZodFirstPartyTypeKind.ZodSymbol,
...processCreateParams(params)
});
};
ZodUndefined = class extends ZodType {
_parse(input) {
const parsedType = this._getType(input);
if (parsedType !== ZodParsedType.undefined) {
const ctx = this._getOrReturnCtx(input);
addIssueToContext(ctx, {
code: ZodIssueCode.invalid_type,
expected: ZodParsedType.undefined,
received: ctx.parsedType
});
return INVALID;
}
return OK(input.data);
}
};
ZodUndefined.create = (params) => {
return new ZodUndefined({
typeName: ZodFirstPartyTypeKind.ZodUndefined,
...processCreateParams(params)
});
};
ZodNull = class extends ZodType {
_parse(input) {
const parsedType = this._getType(input);
if (parsedType !== ZodParsedType.null) {
const ctx = this._getOrReturnCtx(input);
addIssueToContext(ctx, {
code: ZodIssueCode.invalid_type,
expected: ZodParsedType.null,
received: ctx.parsedType
});
return INVALID;
}
return OK(input.data);
}
};
ZodNull.create = (params) => {
return new ZodNull({
typeName: ZodFirstPartyTypeKind.ZodNull,
...processCreateParams(params)
});
};
ZodAny = class extends ZodType {
constructor() {
super(...arguments);
this._any = true;
}
_parse(input) {
return OK(input.data);
}
};
ZodAny.create = (params) => {
return new ZodAny({
typeName: ZodFirstPartyTypeKind.ZodAny,
...processCreateParams(params)
});
};
ZodUnknown = class extends ZodType {
constructor() {
super(...arguments);
this._unknown = true;
}
_parse(input) {
return OK(input.data);
}
};
ZodUnknown.create = (params) => {
return new ZodUnknown({
typeName: ZodFirstPartyTypeKind.ZodUnknown,
...processCreateParams(params)
});
};
ZodNever = class extends ZodType {
_parse(input) {
const ctx = this._getOrReturnCtx(input);
addIssueToContext(ctx, {
code: ZodIssueCode.invalid_type,
expected: ZodParsedType.never,
received: ctx.parsedType
});
return INVALID;
}
};
ZodNever.create = (params) => {
return new ZodNever({
typeName: ZodFirstPartyTypeKind.ZodNever,
...processCreateParams(params)
});
};
ZodVoid = class extends ZodType {
_parse(input) {
const parsedType = this._getType(input);
if (parsedType !== ZodParsedType.undefined) {
const ctx = this._getOrReturnCtx(input);
addIssueToContext(ctx, {
code: ZodIssueCode.invalid_type,
expected: ZodParsedType.void,
received: ctx.parsedType
});
return INVALID;
}
return OK(input.data);
}
};
ZodVoid.create = (params) => {
return new ZodVoid({
typeName: ZodFirstPartyTypeKind.ZodVoid,
...processCreateParams(params)
});
};
ZodArray = class _ZodArray2 extends ZodType {
_parse(input) {
const { ctx, status } = this._processInputParams(input);
const def = this._def;
if (ctx.parsedType !== ZodParsedType.array) {
addIssueToContext(ctx, {
code: ZodIssueCode.invalid_type,
expected: ZodParsedType.array,
received: ctx.parsedType
});
return INVALID;
}
if (def.exactLength !== null) {
const tooBig = ctx.data.length > def.exactLength.value;
const tooSmall = ctx.data.length < def.exactLength.value;
if (tooBig || tooSmall) {
addIssueToContext(ctx, {
code: tooBig ? ZodIssueCode.too_big : ZodIssueCode.too_small,
minimum: tooSmall ? def.exactLength.value : void 0,
maximum: tooBig ? def.exactLength.value : void 0,
type: "array",
inclusive: true,
exact: true,
message: def.exactLength.message
});
status.dirty();
}
}
if (def.minLength !== null) {
if (ctx.data.length < def.minLength.value) {
addIssueToContext(ctx, {
code: ZodIssueCode.too_small,
minimum: def.minLength.value,
type: "array",
inclusive: true,
exact: false,
message: def.minLength.message
});
status.dirty();
}
}
if (def.maxLength !== null) {
if (ctx.data.length > def.maxLength.value) {
addIssueToContext(ctx, {
code: ZodIssueCode.too_big,
maximum: def.maxLength.value,
type: "array",
inclusive: true,
exact: false,
message: def.maxLength.message
});
status.dirty();
}
}
if (ctx.common.async) {
return Promise.all([...ctx.data].map((item, i) => {
return def.type._parseAsync(new ParseInputLazyPath(ctx, item, ctx.path, i));
})).then((result2) => {
return ParseStatus.mergeArray(status, result2);
});
}
const result = [...ctx.data].map((item, i) => {
return def.type._parseSync(new ParseInputLazyPath(ctx, item, ctx.path, i));
});
return ParseStatus.mergeArray(status, result);
}
get element() {
return this._def.type;
}
min(minLength, message) {
return new _ZodArray2({
...this._def,
minLength: { value: minLength, message: errorUtil.toString(message) }
});
}
max(maxLength, message) {
return new _ZodArray2({
...this._def,
maxLength: { value: maxLength, message: errorUtil.toString(message) }
});
}
length(len, message) {
return new _ZodArray2({
...this._def,
exactLength: { value: len, message: errorUtil.toString(message) }
});
}
nonempty(message) {
return this.min(1, message);
}
};
ZodArray.create = (schema, params) => {
return new ZodArray({
type: schema,
minLength: null,
maxLength: null,
exactLength: null,
typeName: ZodFirstPartyTypeKind.ZodArray,
...processCreateParams(params)
});
};
ZodObject = class _ZodObject2 extends ZodType {
constructor() {
super(...arguments);
this._cached = null;
this.nonstrict = this.passthrough;
this.augment = this.extend;
}
_getCached() {
if (this._cached !== null)
return this._cached;
const shape = this._def.shape();
const keys = util.objectKeys(shape);
return this._cached = { shape, keys };
}
_parse(input) {
const parsedType = this._getType(input);
if (parsedType !== ZodParsedType.object) {
const ctx2 = this._getOrReturnCtx(input);
addIssueToContext(ctx2, {
code: ZodIssueCode.invalid_type,
expected: ZodParsedType.object,
received: ctx2.parsedType
});
return INVALID;
}
const { status, ctx } = this._processInputParams(input);
const { shape, keys: shapeKeys } = this._getCached();
const extraKeys = [];
if (!(this._def.catchall instanceof ZodNever && this._def.unknownKeys === "strip")) {
for (const key in ctx.data) {
if (!shapeKeys.includes(key)) {
extraKeys.push(key);
}
}
}
const pairs = [];
for (const key of shapeKeys) {
const keyValidator = shape[key];
const value = ctx.data[key];
pairs.push({
key: { status: "valid", value: key },
value: keyValidator._parse(new ParseInputLazyPath(ctx, value, ctx.path, key)),
alwaysSet: key in ctx.data
});
}
if (this._def.catchall instanceof ZodNever) {
const unknownKeys = this._def.unknownKeys;
if (unknownKeys === "passthrough") {
for (const key of extraKeys) {
pairs.push({
key: { status: "valid", value: key },
value: { status: "valid", value: ctx.data[key] }
});
}
} else if (unknownKeys === "strict") {
if (extraKeys.length > 0) {
addIssueToContext(ctx, {
code: ZodIssueCode.unrecognized_keys,
keys: extraKeys
});
status.dirty();
}
} else if (unknownKeys === "strip") ;
else {
throw new Error(`Internal ZodObject error: invalid unknownKeys value.`);
}
} else {
const catchall = this._def.catchall;
for (const key of extraKeys) {
const value = ctx.data[key];
pairs.push({
key: { status: "valid", value: key },
value: catchall._parse(
new ParseInputLazyPath(ctx, value, ctx.path, key)
//, ctx.child(key), value, getParsedType(value)
),
alwaysSet: key in ctx.data
});
}
}
if (ctx.common.async) {
return Promise.resolve().then(async () => {
const syncPairs = [];
for (const pair of pairs) {
const key = await pair.key;
const value = await pair.value;
syncPairs.push({
key,
value,
alwaysSet: pair.alwaysSet
});
}
return syncPairs;
}).then((syncPairs) => {
return ParseStatus.mergeObjectSync(status, syncPairs);
});
} else {
return ParseStatus.mergeObjectSync(status, pairs);
}
}
get shape() {
return this._def.shape();
}
strict(message) {
errorUtil.errToObj;
return new _ZodObject2({
...this._def,
unknownKeys: "strict",
...message !== void 0 ? {
errorMap: (issue, ctx) => {
var _a2, _b, _c, _d;
const defaultError = (_c = (_b = (_a2 = this._def).errorMap) === null || _b === void 0 ? void 0 : _b.call(_a2, issue, ctx).message) !== null && _c !== void 0 ? _c : ctx.defaultError;
if (issue.code === "unrecognized_keys")
return {
message: (_d = errorUtil.errToObj(message).message) !== null && _d !== void 0 ? _d : defaultError
};
return {
message: defaultError
};
}
} : {}
});
}
strip() {
return new _ZodObject2({
...this._def,
unknownKeys: "strip"
});
}
passthrough() {
return new _ZodObject2({
...this._def,
unknownKeys: "passthrough"
});
}
// const AugmentFactory =
// <Def extends ZodObjectDef>(def: Def) =>
// <Augmentation extends ZodRawShape>(
// augmentation: Augmentation
// ): ZodObject<
// extendShape<ReturnType<Def["shape"]>, Augmentation>,
// Def["unknownKeys"],
// Def["catchall"]
// > => {
// return new ZodObject({
// ...def,
// shape: () => ({
// ...def.shape(),
// ...augmentation,
// }),
// }) as any;
// };
extend(augmentation) {
return new _ZodObject2({
...this._def,
shape: () => ({
...this._def.shape(),
...augmentation
})
});
}
/**
* Prior to zod@1.0.12 there was a bug in the
* inferred type of merged objects. Please
* upgrade if you are experiencing issues.
*/
merge(merging) {
const merged = new _ZodObject2({
unknownKeys: merging._def.unknownKeys,
catchall: merging._def.catchall,
shape: () => ({
...this._def.shape(),
...merging._def.shape()
}),
typeName: ZodFirstPartyTypeKind.ZodObject
});
return merged;
}
// merge<
// Incoming extends AnyZodObject,
// Augmentation extends Incoming["shape"],
// NewOutput extends {
// [k in keyof Augmentation | keyof Output]: k extends keyof Augmentation
// ? Augmentation[k]["_output"]
// : k extends keyof Output
// ? Output[k]
// : never;
// },
// NewInput extends {
// [k in keyof Augmentation | keyof Input]: k extends keyof Augmentation
// ? Augmentation[k]["_input"]
// : k extends keyof Input
// ? Input[k]
// : never;
// }
// >(
// merging: Incoming
// ): ZodObject<
// extendShape<T, ReturnType<Incoming["_def"]["shape"]>>,
// Incoming["_def"]["unknownKeys"],
// Incoming["_def"]["catchall"],
// NewOutput,
// NewInput
// > {
// const merged: any = new ZodObject({
// unknownKeys: merging._def.unknownKeys,
// catchall: merging._def.catchall,
// shape: () =>
// objectUtil.mergeShapes(this._def.shape(), merging._def.shape()),
// typeName: ZodFirstPartyTypeKind.ZodObject,
// }) as any;
// return merged;
// }
setKey(key, schema) {
return this.augment({ [key]: schema });
}
// merge<Incoming extends AnyZodObject>(
// merging: Incoming
// ): //ZodObject<T & Incoming["_shape"], UnknownKeys, Catchall> = (merging) => {
// ZodObject<
// extendShape<T, ReturnType<Incoming["_def"]["shape"]>>,
// Incoming["_def"]["unknownKeys"],
// Incoming["_def"]["catchall"]
// > {
// // const mergedShape = objectUtil.mergeShapes(
// // this._def.shape(),
// // merging._def.shape()
// // );
// const merged: any = new ZodObject({
// unknownKeys: merging._def.unknownKeys,
// catchall: merging._def.catchall,
// shape: () =>
// objectUtil.mergeShapes(this._def.shape(), merging._def.shape()),
// typeName: ZodFirstPartyTypeKind.ZodObject,
// }) as any;
// return merged;
// }
catchall(index2) {
return new _ZodObject2({
...this._def,
catchall: index2
});
}
pick(mask) {
const shape = {};
util.objectKeys(mask).forEach((key) => {
if (mask[key] && this.shape[key]) {
shape[key] = this.shape[key];
}
});
return new _ZodObject2({
...this._def,
shape: () => shape
});
}
omit(mask) {
const shape = {};
util.objectKeys(this.shape).forEach((key) => {
if (!mask[key]) {
shape[key] = this.shape[key];
}
});
return new _ZodObject2({
...this._def,
shape: () => shape
});
}
/**
* @deprecated
*/
deepPartial() {
return deepPartialify(this);
}
partial(mask) {
const newShape = {};
util.objectKeys(this.shape).forEach((key) => {
const fieldSchema = this.shape[key];
if (mask && !mask[key]) {
newShape[key] = fieldSchema;
} else {
newShape[key] = fieldSchema.optional();
}
});
return new _ZodObject2({
...this._def,
shape: () => newShape
});
}
required(mask) {
const newShape = {};
util.objectKeys(this.shape).forEach((key) => {
if (mask && !mask[key]) {
newShape[key] = this.shape[key];
} else {
const fieldSchema = this.shape[key];
let newField = fieldSchema;
while (newField instanceof ZodOptional) {
newField = newField._def.innerType;
}
newShape[key] = newField;
}
});
return new _ZodObject2({
...this._def,
shape: () => newShape
});
}
keyof() {
return createZodEnum(util.objectKeys(this.shape));
}
};
ZodObject.create = (shape, params) => {
return new ZodObject({
shape: () => shape,
unknownKeys: "strip",
catchall: ZodNever.create(),
typeName: ZodFirstPartyTypeKind.ZodObject,
...processCreateParams(params)
});
};
ZodObject.strictCreate = (shape, params) => {
return new ZodObject({
shape: () => shape,
unknownKeys: "strict",
catchall: ZodNever.create(),
typeName: ZodFirstPartyTypeKind.ZodObject,
...processCreateParams(params)
});
};
ZodObject.lazycreate = (shape, params) => {
return new ZodObject({
shape,
unknownKeys: "strip",
catchall: ZodNever.create(),
typeName: ZodFirstPartyTypeKind.ZodObject,
...processCreateParams(params)
});
};
ZodUnion = class extends ZodType {
_parse(input) {
const { ctx } = this._processInputParams(input);
const options = this._def.options;
function handleResults(results) {
for (const result of results) {
if (result.result.status === "valid") {
return result.result;
}
}
for (const result of results) {
if (result.result.status === "dirty") {
ctx.common.issues.push(...result.ctx.common.issues);
return result.result;
}
}
const unionErrors = results.map((result) => new ZodError(result.ctx.common.issues));
addIssueToContext(ctx, {
code: ZodIssueCode.invalid_union,
unionErrors
});
return INVALID;
}
if (ctx.common.async) {
return Promise.all(options.map(async (option) => {
const childCtx = {
...ctx,
common: {
...ctx.common,
issues: []
},
parent: null
};
return {
result: await option._parseAsync({
data: ctx.data,
path: ctx.path,
parent: childCtx
}),
ctx: childCtx
};
})).then(handleResults);
} else {
let dirty = void 0;
const issues = [];
for (const option of options) {
const childCtx = {
...ctx,
common: {
...ctx.common,
issues: []
},
parent: null
};
const result = option._parseSync({
data: ctx.data,
path: ctx.path,
parent: childCtx
});
if (result.status === "valid") {
return result;
} else if (result.status === "dirty" && !dirty) {
dirty = { result, ctx: childCtx };
}
if (childCtx.common.issues.length) {
issues.push(childCtx.common.issues);
}
}
if (dirty) {
ctx.common.issues.push(...dirty.ctx.common.issues);
return dirty.result;
}
const unionErrors = issues.map((issues2) => new ZodError(issues2));
addIssueToContext(ctx, {
code: ZodIssueCode.invalid_union,
unionErrors
});
return INVALID;
}
}
get options() {
return this._def.options;
}
};
ZodUnion.create = (types, params) => {
return new ZodUnion({
options: types,
typeName: ZodFirstPartyTypeKind.ZodUnion,
...processCreateParams(params)
});
};
getDiscriminator = (type) => {
if (type instanceof ZodLazy) {
return getDiscriminator(type.schema);
} else if (type instanceof ZodEffects) {
return getDiscriminator(type.innerType());
} else if (type instanceof ZodLiteral) {
return [type.value];
} else if (type instanceof ZodEnum) {
return type.options;
} else if (type instanceof ZodNativeEnum) {
return util.objectValues(type.enum);
} else if (type instanceof ZodDefault) {
return getDiscriminator(type._def.innerType);
} else if (type instanceof ZodUndefined) {
return [void 0];
} else if (type instanceof ZodNull) {
return [null];
} else if (type instanceof ZodOptional) {
return [void 0, ...getDiscriminator(type.unwrap())];
} else if (type instanceof ZodNullable) {
return [null, ...getDiscriminator(type.unwrap())];
} else if (type instanceof ZodBranded) {
return getDiscriminator(type.unwrap());
} else if (type instanceof ZodReadonly) {
return getDiscriminator(type.unwrap());
} else if (type instanceof ZodCatch) {
return getDiscriminator(type._def.innerType);
} else {
return [];
}
};
ZodDiscriminatedUnion = class _ZodDiscriminatedUnion2 extends ZodType {
_parse(input) {
const { ctx } = this._processInputParams(input);
if (ctx.parsedType !== ZodParsedType.object) {
addIssueToContext(ctx, {
code: ZodIssueCode.invalid_type,
expected: ZodParsedType.object,
received: ctx.parsedType
});
return INVALID;
}
const discriminator = this.discriminator;
const discriminatorValue = ctx.data[discriminator];
const option = this.optionsMap.get(discriminatorValue);
if (!option) {
addIssueToContext(ctx, {
code: ZodIssueCode.invalid_union_discriminator,
options: Array.from(this.optionsMap.keys()),
path: [discriminator]
});
return INVALID;
}
if (ctx.common.async) {
return option._parseAsync({
data: ctx.data,
path: ctx.path,
parent: ctx
});
} else {
return option._parseSync({
data: ctx.data,
path: ctx.path,
parent: ctx
});
}
}
get discriminator() {
return this._def.discriminator;
}
get options() {
return this._def.options;
}
get optionsMap() {
return this._def.optionsMap;
}
/**
* The constructor of the discriminated union schema. Its behaviour is very similar to that of the normal z.union() constructor.
* However, it only allows a union of objects, all of which need to share a discriminator property. This property must
* have a different value for each object in the union.
* @param discriminator the name of the discriminator property
* @param types an array of object schemas
* @param params
*/
static create(discriminator, options, params) {
const optionsMap = /* @__PURE__ */ new Map();
for (const type of options) {
const discriminatorValues = getDiscriminator(type.shape[discriminator]);
if (!discriminatorValues.length) {
throw new Error(`A discriminator value for key \`${discriminator}\` could not be extracted from all schema options`);
}
for (const value of discriminatorValues) {
if (optionsMap.has(value)) {
throw new Error(`Discriminator property ${String(discriminator)} has duplicate value ${String(value)}`);
}
optionsMap.set(value, type);
}
}
return new _ZodDiscriminatedUnion2({
typeName: ZodFirstPartyTypeKind.ZodDiscriminatedUnion,
discriminator,
options,
optionsMap,
...processCreateParams(params)
});
}
};
ZodIntersection = class extends ZodType {
_parse(input) {
const { status, ctx } = this._processInputParams(input);
const handleParsed = (parsedLeft, parsedRight) => {
if (isAborted(parsedLeft) || isAborted(parsedRight)) {
return INVALID;
}
const merged = mergeValues(parsedLeft.value, parsedRight.value);
if (!merged.valid) {
addIssueToContext(ctx, {
code: ZodIssueCode.invalid_intersection_types
});
return INVALID;
}
if (isDirty(parsedLeft) || isDirty(parsedRight)) {
status.dirty();
}
return { status: status.value, value: merged.data };
};
if (ctx.common.async) {
return Promise.all([
this._def.left._parseAsync({
data: ctx.data,
path: ctx.path,
parent: ctx
}),
this._def.right._parseAsync({
data: ctx.data,
path: ctx.path,
parent: ctx
})
]).then(([left, right]) => handleParsed(left, right));
} else {
return handleParsed(this._def.left._parseSync({
data: ctx.data,
path: ctx.path,
parent: ctx
}), this._def.right._parseSync({
data: ctx.data,
path: ctx.path,
parent: ctx
}));
}
}
};
ZodIntersection.create = (left, right, params) => {
return new ZodIntersection({
left,
right,
typeName: ZodFirstPartyTypeKind.ZodIntersection,
...processCreateParams(params)
});
};
ZodTuple = class _ZodTuple2 extends ZodType {
_parse(input) {
const { status, ctx } = this._processInputParams(input);
if (ctx.parsedType !== ZodParsedType.array) {
addIssueToContext(ctx, {
code: ZodIssueCode.invalid_type,
expected: ZodParsedType.array,
received: ctx.parsedType
});
return INVALID;
}
if (ctx.data.length < this._def.items.length) {
addIssueToContext(ctx, {
code: ZodIssueCode.too_small,
minimum: this._def.items.length,
inclusive: true,
exact: false,
type: "array"
});
return INVALID;
}
const rest = this._def.rest;
if (!rest && ctx.data.length > this._def.items.length) {
addIssueToContext(ctx, {
code: ZodIssueCode.too_big,
maximum: this._def.items.length,
inclusive: true,
exact: false,
type: "array"
});
status.dirty();
}
const items = [...ctx.data].map((item, itemIndex) => {
const schema = this._def.items[itemIndex] || this._def.rest;
if (!schema)
return null;
return schema._parse(new ParseInputLazyPath(ctx, item, ctx.path, itemIndex));
}).filter((x) => !!x);
if (ctx.common.async) {
return Promise.all(items).then((results) => {
return ParseStatus.mergeArray(status, results);
});
} else {
return ParseStatus.mergeArray(status, items);
}
}
get items() {
return this._def.items;
}
rest(rest) {
return new _ZodTuple2({
...this._def,
rest
});
}
};
ZodTuple.create = (schemas, params) => {
if (!Array.isArray(schemas)) {
throw new Error("You must pass an array of schemas to z.tuple([ ... ])");
}
return new ZodTuple({
items: schemas,
typeName: ZodFirstPartyTypeKind.ZodTuple,
rest: null,
...processCreateParams(params)
});
};
ZodRecord = class _ZodRecord2 extends ZodType {
get keySchema() {
return this._def.keyType;
}
get valueSchema() {
return this._def.valueType;
}
_parse(input) {
const { status, ctx } = this._processInputParams(input);
if (ctx.parsedType !== ZodParsedType.object) {
addIssueToContext(ctx, {
code: ZodIssueCode.invalid_type,
expected: ZodParsedType.object,
received: ctx.parsedType
});
return INVALID;
}
const pairs = [];
const keyType = this._def.keyType;
const valueType = this._def.valueType;
for (const key in ctx.data) {
pairs.push({
key: keyType._parse(new ParseInputLazyPath(ctx, key, ctx.path, key)),
value: valueType._parse(new ParseInputLazyPath(ctx, ctx.data[key], ctx.path, key)),
alwaysSet: key in ctx.data
});
}
if (ctx.common.async) {
return ParseStatus.mergeObjectAsync(status, pairs);
} else {
return ParseStatus.mergeObjectSync(status, pairs);
}
}
get element() {
return this._def.valueType;
}
static create(first2, second, third) {
if (second instanceof ZodType) {
return new _ZodRecord2({
keyType: first2,
valueType: second,
typeName: ZodFirstPartyTypeKind.ZodRecord,
...processCreateParams(third)
});
}
return new _ZodRecord2({
keyType: ZodString.create(),
valueType: first2,
typeName: ZodFirstPartyTypeKind.ZodRecord,
...processCreateParams(second)
});
}
};
ZodMap = class extends ZodType {
get keySchema() {
return this._def.keyType;
}
get valueSchema() {
return this._def.valueType;
}
_parse(input) {
const { status, ctx } = this._processInputParams(input);
if (ctx.parsedType !== ZodParsedType.map) {
addIssueToContext(ctx, {
code: ZodIssueCode.invalid_type,
expected: ZodParsedType.map,
received: ctx.parsedType
});
return INVALID;
}
const keyType = this._def.keyType;
const valueType = this._def.valueType;
const pairs = [...ctx.data.entries()].map(([key, value], index2) => {
return {
key: keyType._parse(new ParseInputLazyPath(ctx, key, ctx.path, [index2, "key"])),
value: valueType._parse(new ParseInputLazyPath(ctx, value, ctx.path, [index2, "value"]))
};
});
if (ctx.common.async) {
const finalMap = /* @__PURE__ */ new Map();
return Promise.resolve().then(async () => {
for (const pair of pairs) {
const key = await pair.key;
const value = await pair.value;
if (key.status === "aborted" || value.status === "aborted") {
return INVALID;
}
if (key.status === "dirty" || value.status === "dirty") {
status.dirty();
}
finalMap.set(key.value, value.value);
}
return { status: status.value, value: finalMap };
});
} else {
const finalMap = /* @__PURE__ */ new Map();
for (const pair of pairs) {
const key = pair.key;
const value = pair.value;
if (key.status === "aborted" || value.status === "aborted") {
return INVALID;
}
if (key.status === "dirty" || value.status === "dirty") {
status.dirty();
}
finalMap.set(key.value, value.value);
}
return { status: status.value, value: finalMap };
}
}
};
ZodMap.create = (keyType, valueType, params) => {
return new ZodMap({
valueType,
keyType,
typeName: ZodFirstPartyTypeKind.ZodMap,
...processCreateParams(params)
});
};
ZodSet = class _ZodSet2 extends ZodType {
_parse(input) {
const { status, ctx } = this._processInputParams(input);
if (ctx.parsedType !== ZodParsedType.set) {
addIssueToContext(ctx, {
code: ZodIssueCode.invalid_type,
expected: ZodParsedType.set,
received: ctx.parsedType
});
return INVALID;
}
const def = this._def;
if (def.minSize !== null) {
if (ctx.data.size < def.minSize.value) {
addIssueToContext(ctx, {
code: ZodIssueCode.too_small,
minimum: def.minSize.value,
type: "set",
inclusive: true,
exact: false,
message: def.minSize.message
});
status.dirty();
}
}
if (def.maxSize !== null) {
if (ctx.data.size > def.maxSize.value) {
addIssueToContext(ctx, {
code: ZodIssueCode.too_big,
maximum: def.maxSize.value,
type: "set",
inclusive: true,
exact: false,
message: def.maxSize.message
});
status.dirty();
}
}
const valueType = this._def.valueType;
function finalizeSet(elements2) {
const parsedSet = /* @__PURE__ */ new Set();
for (const element of elements2) {
if (element.status === "aborted")
return INVALID;
if (element.status === "dirty")
status.dirty();
parsedSet.add(element.value);
}
return { status: status.value, value: parsedSet };
}
const elements = [...ctx.data.values()].map((item, i) => valueType._parse(new ParseInputLazyPath(ctx, item, ctx.path, i)));
if (ctx.common.async) {
return Promise.all(elements).then((elements2) => finalizeSet(elements2));
} else {
return finalizeSet(elements);
}
}
min(minSize, message) {
return new _ZodSet2({
...this._def,
minSize: { value: minSize, message: errorUtil.toString(message) }
});
}
max(maxSize, message) {
return new _ZodSet2({
...this._def,
maxSize: { value: maxSize, message: errorUtil.toString(message) }
});
}
size(size, message) {
return this.min(size, message).max(size, message);
}
nonempty(message) {
return this.min(1, message);
}
};
ZodSet.create = (valueType, params) => {
return new ZodSet({
valueType,
minSize: null,
maxSize: null,
typeName: ZodFirstPartyTypeKind.ZodSet,
...processCreateParams(params)
});
};
ZodFunction = class _ZodFunction2 extends ZodType {
constructor() {
super(...arguments);
this.validate = this.implement;
}
_parse(input) {
const { ctx } = this._processInputParams(input);
if (ctx.parsedType !== ZodParsedType.function) {
addIssueToContext(ctx, {
code: ZodIssueCode.invalid_type,
expected: ZodParsedType.function,
received: ctx.parsedType
});
return INVALID;
}
function makeArgsIssue(args, error) {
return makeIssue({
data: args,
path: ctx.path,
errorMaps: [
ctx.common.contextualErrorMap,
ctx.schemaErrorMap,
getErrorMap(),
errorMap
].filter((x) => !!x),
issueData: {
code: ZodIssueCode.invalid_arguments,
argumentsError: error
}
});
}
function makeReturnsIssue(returns, error) {
return makeIssue({
data: returns,
path: ctx.path,
errorMaps: [
ctx.common.contextualErrorMap,
ctx.schemaErrorMap,
getErrorMap(),
errorMap
].filter((x) => !!x),
issueData: {
code: ZodIssueCode.invalid_return_type,
returnTypeError: error
}
});
}
const params = { errorMap: ctx.common.contextualErrorMap };
const fn = ctx.data;
if (this._def.returns instanceof ZodPromise) {
const me = this;
return OK(async function(...args) {
const error = new ZodError([]);
const parsedArgs = await me._def.args.parseAsync(args, params).catch((e) => {
error.addIssue(makeArgsIssue(args, e));
throw error;
});
const result = await Reflect.apply(fn, this, parsedArgs);
const parsedReturns = await me._def.returns._def.type.parseAsync(result, params).catch((e) => {
error.addIssue(makeReturnsIssue(result, e));
throw error;
});
return parsedReturns;
});
} else {
const me = this;
return OK(function(...args) {
const parsedArgs = me._def.args.safeParse(args, params);
if (!parsedArgs.success) {
throw new ZodError([makeArgsIssue(args, parsedArgs.error)]);
}
const result = Reflect.apply(fn, this, parsedArgs.data);
const parsedReturns = me._def.returns.safeParse(result, params);
if (!parsedReturns.success) {
throw new ZodError([makeReturnsIssue(result, parsedReturns.error)]);
}
return parsedReturns.data;
});
}
}
parameters() {
return this._def.args;
}
returnType() {
return this._def.returns;
}
args(...items) {
return new _ZodFunction2({
...this._def,
args: ZodTuple.create(items).rest(ZodUnknown.create())
});
}
returns(returnType) {
return new _ZodFunction2({
...this._def,
returns: returnType
});
}
implement(func) {
const validatedFunc = this.parse(func);
return validatedFunc;
}
strictImplement(func) {
const validatedFunc = this.parse(func);
return validatedFunc;
}
static create(args, returns, params) {
return new _ZodFunction2({
args: args ? args : ZodTuple.create([]).rest(ZodUnknown.create()),
returns: returns || ZodUnknown.create(),
typeName: ZodFirstPartyTypeKind.ZodFunction,
...processCreateParams(params)
});
}
};
ZodLazy = class extends ZodType {
get schema() {
return this._def.getter();
}
_parse(input) {
const { ctx } = this._processInputParams(input);
const lazySchema = this._def.getter();
return lazySchema._parse({ data: ctx.data, path: ctx.path, parent: ctx });
}
};
ZodLazy.create = (getter, params) => {
return new ZodLazy({
getter,
typeName: ZodFirstPartyTypeKind.ZodLazy,
...processCreateParams(params)
});
};
ZodLiteral = class extends ZodType {
_parse(input) {
if (input.data !== this._def.value) {
const ctx = this._getOrReturnCtx(input);
addIssueToContext(ctx, {
received: ctx.data,
code: ZodIssueCode.invalid_literal,
expected: this._def.value
});
return INVALID;
}
return { status: "valid", value: input.data };
}
get value() {
return this._def.value;
}
};
ZodLiteral.create = (value, params) => {
return new ZodLiteral({
value,
typeName: ZodFirstPartyTypeKind.ZodLiteral,
...processCreateParams(params)
});
};
ZodEnum = class _ZodEnum2 extends ZodType {
constructor() {
super(...arguments);
_ZodEnum_cache.set(this, void 0);
}
_parse(input) {
if (typeof input.data !== "string") {
const ctx = this._getOrReturnCtx(input);
const expectedValues = this._def.values;
addIssueToContext(ctx, {
expected: util.joinValues(expectedValues),
received: ctx.parsedType,
code: ZodIssueCode.invalid_type
});
return INVALID;
}
if (!__classPrivateFieldGet(this, _ZodEnum_cache, "f")) {
__classPrivateFieldSet(this, _ZodEnum_cache, new Set(this._def.values), "f");
}
if (!__classPrivateFieldGet(this, _ZodEnum_cache, "f").has(input.data)) {
const ctx = this._getOrReturnCtx(input);
const expectedValues = this._def.values;
addIssueToContext(ctx, {
received: ctx.data,
code: ZodIssueCode.invalid_enum_value,
options: expectedValues
});
return INVALID;
}
return OK(input.data);
}
get options() {
return this._def.values;
}
get enum() {
const enumValues = {};
for (const val2 of this._def.values) {
enumValues[val2] = val2;
}
return enumValues;
}
get Values() {
const enumValues = {};
for (const val2 of this._def.values) {
enumValues[val2] = val2;
}
return enumValues;
}
get Enum() {
const enumValues = {};
for (const val2 of this._def.values) {
enumValues[val2] = val2;
}
return enumValues;
}
extract(values, newDef = this._def) {
return _ZodEnum2.create(values, {
...this._def,
...newDef
});
}
exclude(values, newDef = this._def) {
return _ZodEnum2.create(this.options.filter((opt) => !values.includes(opt)), {
...this._def,
...newDef
});
}
};
_ZodEnum_cache = /* @__PURE__ */ new WeakMap();
ZodEnum.create = createZodEnum;
ZodNativeEnum = class extends ZodType {
constructor() {
super(...arguments);
_ZodNativeEnum_cache.set(this, void 0);
}
_parse(input) {
const nativeEnumValues = util.getValidEnumValues(this._def.values);
const ctx = this._getOrReturnCtx(input);
if (ctx.parsedType !== ZodParsedType.string && ctx.parsedType !== ZodParsedType.number) {
const expectedValues = util.objectValues(nativeEnumValues);
addIssueToContext(ctx, {
expected: util.joinValues(expectedValues),
received: ctx.parsedType,
code: ZodIssueCode.invalid_type
});
return INVALID;
}
if (!__classPrivateFieldGet(this, _ZodNativeEnum_cache, "f")) {
__classPrivateFieldSet(this, _ZodNativeEnum_cache, new Set(util.getValidEnumValues(this._def.values)), "f");
}
if (!__classPrivateFieldGet(this, _ZodNativeEnum_cache, "f").has(input.data)) {
const expectedValues = util.objectValues(nativeEnumValues);
addIssueToContext(ctx, {
received: ctx.data,
code: ZodIssueCode.invalid_enum_value,
options: expectedValues
});
return INVALID;
}
return OK(input.data);
}
get enum() {
return this._def.values;
}
};
_ZodNativeEnum_cache = /* @__PURE__ */ new WeakMap();
ZodNativeEnum.create = (values, params) => {
return new ZodNativeEnum({
values,
typeName: ZodFirstPartyTypeKind.ZodNativeEnum,
...processCreateParams(params)
});
};
ZodPromise = class extends ZodType {
unwrap() {
return this._def.type;
}
_parse(input) {
const { ctx } = this._processInputParams(input);
if (ctx.parsedType !== ZodParsedType.promise && ctx.common.async === false) {
addIssueToContext(ctx, {
code: ZodIssueCode.invalid_type,
expected: ZodParsedType.promise,
received: ctx.parsedType
});
return INVALID;
}
const promisified = ctx.parsedType === ZodParsedType.promise ? ctx.data : Promise.resolve(ctx.data);
return OK(promisified.then((data2) => {
return this._def.type.parseAsync(data2, {
path: ctx.path,
errorMap: ctx.common.contextualErrorMap
});
}));
}
};
ZodPromise.create = (schema, params) => {
return new ZodPromise({
type: schema,
typeName: ZodFirstPartyTypeKind.ZodPromise,
...processCreateParams(params)
});
};
ZodEffects = class extends ZodType {
innerType() {
return this._def.schema;
}
sourceType() {
return this._def.schema._def.typeName === ZodFirstPartyTypeKind.ZodEffects ? this._def.schema.sourceType() : this._def.schema;
}
_parse(input) {
const { status, ctx } = this._processInputParams(input);
const effect = this._def.effect || null;
const checkCtx = {
addIssue: (arg) => {
addIssueToContext(ctx, arg);
if (arg.fatal) {
status.abort();
} else {
status.dirty();
}
},
get path() {
return ctx.path;
}
};
checkCtx.addIssue = checkCtx.addIssue.bind(checkCtx);
if (effect.type === "preprocess") {
const processed = effect.transform(ctx.data, checkCtx);
if (ctx.common.async) {
return Promise.resolve(processed).then(async (processed2) => {
if (status.value === "aborted")
return INVALID;
const result = await this._def.schema._parseAsync({
data: processed2,
path: ctx.path,
parent: ctx
});
if (result.status === "aborted")
return INVALID;
if (result.status === "dirty")
return DIRTY(result.value);
if (status.value === "dirty")
return DIRTY(result.value);
return result;
});
} else {
if (status.value === "aborted")
return INVALID;
const result = this._def.schema._parseSync({
data: processed,
path: ctx.path,
parent: ctx
});
if (result.status === "aborted")
return INVALID;
if (result.status === "dirty")
return DIRTY(result.value);
if (status.value === "dirty")
return DIRTY(result.value);
return result;
}
}
if (effect.type === "refinement") {
const executeRefinement = (acc) => {
const result = effect.refinement(acc, checkCtx);
if (ctx.common.async) {
return Promise.resolve(result);
}
if (result instanceof Promise) {
throw new Error("Async refinement encountered during synchronous parse operation. Use .parseAsync instead.");
}
return acc;
};
if (ctx.common.async === false) {
const inner = this._def.schema._parseSync({
data: ctx.data,
path: ctx.path,
parent: ctx
});
if (inner.status === "aborted")
return INVALID;
if (inner.status === "dirty")
status.dirty();
executeRefinement(inner.value);
return { status: status.value, value: inner.value };
} else {
return this._def.schema._parseAsync({ data: ctx.data, path: ctx.path, parent: ctx }).then((inner) => {
if (inner.status === "aborted")
return INVALID;
if (inner.status === "dirty")
status.dirty();
return executeRefinement(inner.value).then(() => {
return { status: status.value, value: inner.value };
});
});
}
}
if (effect.type === "transform") {
if (ctx.common.async === false) {
const base = this._def.schema._parseSync({
data: ctx.data,
path: ctx.path,
parent: ctx
});
if (!isValid(base))
return base;
const result = effect.transform(base.value, checkCtx);
if (result instanceof Promise) {
throw new Error(`Asynchronous transform encountered during synchronous parse operation. Use .parseAsync instead.`);
}
return { status: status.value, value: result };
} else {
return this._def.schema._parseAsync({ data: ctx.data, path: ctx.path, parent: ctx }).then((base) => {
if (!isValid(base))
return base;
return Promise.resolve(effect.transform(base.value, checkCtx)).then((result) => ({ status: status.value, value: result }));
});
}
}
util.assertNever(effect);
}
};
ZodEffects.create = (schema, effect, params) => {
return new ZodEffects({
schema,
typeName: ZodFirstPartyTypeKind.ZodEffects,
effect,
...processCreateParams(params)
});
};
ZodEffects.createWithPreprocess = (preprocess, schema, params) => {
return new ZodEffects({
schema,
effect: { type: "preprocess", transform: preprocess },
typeName: ZodFirstPartyTypeKind.ZodEffects,
...processCreateParams(params)
});
};
ZodOptional = class extends ZodType {
_parse(input) {
const parsedType = this._getType(input);
if (parsedType === ZodParsedType.undefined) {
return OK(void 0);
}
return this._def.innerType._parse(input);
}
unwrap() {
return this._def.innerType;
}
};
ZodOptional.create = (type, params) => {
return new ZodOptional({
innerType: type,
typeName: ZodFirstPartyTypeKind.ZodOptional,
...processCreateParams(params)
});
};
ZodNullable = class extends ZodType {
_parse(input) {
const parsedType = this._getType(input);
if (parsedType === ZodParsedType.null) {
return OK(null);
}
return this._def.innerType._parse(input);
}
unwrap() {
return this._def.innerType;
}
};
ZodNullable.create = (type, params) => {
return new ZodNullable({
innerType: type,
typeName: ZodFirstPartyTypeKind.ZodNullable,
...processCreateParams(params)
});
};
ZodDefault = class extends ZodType {
_parse(input) {
const { ctx } = this._processInputParams(input);
let data2 = ctx.data;
if (ctx.parsedType === ZodParsedType.undefined) {
data2 = this._def.defaultValue();
}
return this._def.innerType._parse({
data: data2,
path: ctx.path,
parent: ctx
});
}
removeDefault() {
return this._def.innerType;
}
};
ZodDefault.create = (type, params) => {
return new ZodDefault({
innerType: type,
typeName: ZodFirstPartyTypeKind.ZodDefault,
defaultValue: typeof params.default === "function" ? params.default : () => params.default,
...processCreateParams(params)
});
};
ZodCatch = class extends ZodType {
_parse(input) {
const { ctx } = this._processInputParams(input);
const newCtx = {
...ctx,
common: {
...ctx.common,
issues: []
}
};
const result = this._def.innerType._parse({
data: newCtx.data,
path: newCtx.path,
parent: {
...newCtx
}
});
if (isAsync(result)) {
return result.then((result2) => {
return {
status: "valid",
value: result2.status === "valid" ? result2.value : this._def.catchValue({
get error() {
return new ZodError(newCtx.common.issues);
},
input: newCtx.data
})
};
});
} else {
return {
status: "valid",
value: result.status === "valid" ? result.value : this._def.catchValue({
get error() {
return new ZodError(newCtx.common.issues);
},
input: newCtx.data
})
};
}
}
removeCatch() {
return this._def.innerType;
}
};
ZodCatch.create = (type, params) => {
return new ZodCatch({
innerType: type,
typeName: ZodFirstPartyTypeKind.ZodCatch,
catchValue: typeof params.catch === "function" ? params.catch : () => params.catch,
...processCreateParams(params)
});
};
ZodNaN = class extends ZodType {
_parse(input) {
const parsedType = this._getType(input);
if (parsedType !== ZodParsedType.nan) {
const ctx = this._getOrReturnCtx(input);
addIssueToContext(ctx, {
code: ZodIssueCode.invalid_type,
expected: ZodParsedType.nan,
received: ctx.parsedType
});
return INVALID;
}
return { status: "valid", value: input.data };
}
};
ZodNaN.create = (params) => {
return new ZodNaN({
typeName: ZodFirstPartyTypeKind.ZodNaN,
...processCreateParams(params)
});
};
BRAND = Symbol("zod_brand");
ZodBranded = class extends ZodType {
_parse(input) {
const { ctx } = this._processInputParams(input);
const data2 = ctx.data;
return this._def.type._parse({
data: data2,
path: ctx.path,
parent: ctx
});
}
unwrap() {
return this._def.type;
}
};
ZodPipeline = class _ZodPipeline2 extends ZodType {
_parse(input) {
const { status, ctx } = this._processInputParams(input);
if (ctx.common.async) {
const handleAsync = async () => {
const inResult = await this._def.in._parseAsync({
data: ctx.data,
path: ctx.path,
parent: ctx
});
if (inResult.status === "aborted")
return INVALID;
if (inResult.status === "dirty") {
status.dirty();
return DIRTY(inResult.value);
} else {
return this._def.out._parseAsync({
data: inResult.value,
path: ctx.path,
parent: ctx
});
}
};
return handleAsync();
} else {
const inResult = this._def.in._parseSync({
data: ctx.data,
path: ctx.path,
parent: ctx
});
if (inResult.status === "aborted")
return INVALID;
if (inResult.status === "dirty") {
status.dirty();
return {
status: "dirty",
value: inResult.value
};
} else {
return this._def.out._parseSync({
data: inResult.value,
path: ctx.path,
parent: ctx
});
}
}
}
static create(a, b) {
return new _ZodPipeline2({
in: a,
out: b,
typeName: ZodFirstPartyTypeKind.ZodPipeline
});
}
};
ZodReadonly = class extends ZodType {
_parse(input) {
const result = this._def.innerType._parse(input);
const freeze = (data2) => {
if (isValid(data2)) {
data2.value = Object.freeze(data2.value);
}
return data2;
};
return isAsync(result) ? result.then((data2) => freeze(data2)) : freeze(result);
}
unwrap() {
return this._def.innerType;
}
};
ZodReadonly.create = (type, params) => {
return new ZodReadonly({
innerType: type,
typeName: ZodFirstPartyTypeKind.ZodReadonly,
...processCreateParams(params)
});
};
late = {
object: ZodObject.lazycreate
};
(function(ZodFirstPartyTypeKind3) {
ZodFirstPartyTypeKind3["ZodString"] = "ZodString";
ZodFirstPartyTypeKind3["ZodNumber"] = "ZodNumber";
ZodFirstPartyTypeKind3["ZodNaN"] = "ZodNaN";
ZodFirstPartyTypeKind3["ZodBigInt"] = "ZodBigInt";
ZodFirstPartyTypeKind3["ZodBoolean"] = "ZodBoolean";
ZodFirstPartyTypeKind3["ZodDate"] = "ZodDate";
ZodFirstPartyTypeKind3["ZodSymbol"] = "ZodSymbol";
ZodFirstPartyTypeKind3["ZodUndefined"] = "ZodUndefined";
ZodFirstPartyTypeKind3["ZodNull"] = "ZodNull";
ZodFirstPartyTypeKind3["ZodAny"] = "ZodAny";
ZodFirstPartyTypeKind3["ZodUnknown"] = "ZodUnknown";
ZodFirstPartyTypeKind3["ZodNever"] = "ZodNever";
ZodFirstPartyTypeKind3["ZodVoid"] = "ZodVoid";
ZodFirstPartyTypeKind3["ZodArray"] = "ZodArray";
ZodFirstPartyTypeKind3["ZodObject"] = "ZodObject";
ZodFirstPartyTypeKind3["ZodUnion"] = "ZodUnion";
ZodFirstPartyTypeKind3["ZodDiscriminatedUnion"] = "ZodDiscriminatedUnion";
ZodFirstPartyTypeKind3["ZodIntersection"] = "ZodIntersection";
ZodFirstPartyTypeKind3["ZodTuple"] = "ZodTuple";
ZodFirstPartyTypeKind3["ZodRecord"] = "ZodRecord";
ZodFirstPartyTypeKind3["ZodMap"] = "ZodMap";
ZodFirstPartyTypeKind3["ZodSet"] = "ZodSet";
ZodFirstPartyTypeKind3["ZodFunction"] = "ZodFunction";
ZodFirstPartyTypeKind3["ZodLazy"] = "ZodLazy";
ZodFirstPartyTypeKind3["ZodLiteral"] = "ZodLiteral";
ZodFirstPartyTypeKind3["ZodEnum"] = "ZodEnum";
ZodFirstPartyTypeKind3["ZodEffects"] = "ZodEffects";
ZodFirstPartyTypeKind3["ZodNativeEnum"] = "ZodNativeEnum";
ZodFirstPartyTypeKind3["ZodOptional"] = "ZodOptional";
ZodFirstPartyTypeKind3["ZodNullable"] = "ZodNullable";
ZodFirstPartyTypeKind3["ZodDefault"] = "ZodDefault";
ZodFirstPartyTypeKind3["ZodCatch"] = "ZodCatch";
ZodFirstPartyTypeKind3["ZodPromise"] = "ZodPromise";
ZodFirstPartyTypeKind3["ZodBranded"] = "ZodBranded";
ZodFirstPartyTypeKind3["ZodPipeline"] = "ZodPipeline";
ZodFirstPartyTypeKind3["ZodReadonly"] = "ZodReadonly";
})(ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {}));
instanceOfType = (cls, params = {
message: `Input not instance of ${cls.name}`
}) => custom((data2) => data2 instanceof cls, params);
stringType = ZodString.create;
numberType = ZodNumber.create;
nanType = ZodNaN.create;
bigIntType = ZodBigInt.create;
booleanType = ZodBoolean.create;
dateType = ZodDate.create;
symbolType = ZodSymbol.create;
undefinedType = ZodUndefined.create;
nullType = ZodNull.create;
anyType = ZodAny.create;
unknownType = ZodUnknown.create;
neverType = ZodNever.create;
voidType = ZodVoid.create;
arrayType = ZodArray.create;
objectType = ZodObject.create;
strictObjectType = ZodObject.strictCreate;
unionType = ZodUnion.create;
discriminatedUnionType = ZodDiscriminatedUnion.create;
intersectionType = ZodIntersection.create;
tupleType = ZodTuple.create;
recordType = ZodRecord.create;
mapType = ZodMap.create;
setType = ZodSet.create;
functionType = ZodFunction.create;
lazyType = ZodLazy.create;
literalType = ZodLiteral.create;
enumType = ZodEnum.create;
nativeEnumType = ZodNativeEnum.create;
promiseType = ZodPromise.create;
effectsType = ZodEffects.create;
optionalType = ZodOptional.create;
nullableType = ZodNullable.create;
preprocessType = ZodEffects.createWithPreprocess;
pipelineType = ZodPipeline.create;
ostring = () => stringType().optional();
onumber = () => numberType().optional();
oboolean = () => booleanType().optional();
coerce = {
string: ((arg) => ZodString.create({ ...arg, coerce: true })),
number: ((arg) => ZodNumber.create({ ...arg, coerce: true })),
boolean: ((arg) => ZodBoolean.create({
...arg,
coerce: true
})),
bigint: ((arg) => ZodBigInt.create({ ...arg, coerce: true })),
date: ((arg) => ZodDate.create({ ...arg, coerce: true }))
};
NEVER = INVALID;
z = /* @__PURE__ */ Object.freeze({
__proto__: null,
defaultErrorMap: errorMap,
setErrorMap,
getErrorMap,
makeIssue,
EMPTY_PATH,
addIssueToContext,
ParseStatus,
INVALID,
DIRTY,
OK,
isAborted,
isDirty,
isValid,
isAsync,
get util() {
return util;
},
get objectUtil() {
return objectUtil;
},
ZodParsedType,
getParsedType,
ZodType,
datetimeRegex,
ZodString,
ZodNumber,
ZodBigInt,
ZodBoolean,
ZodDate,
ZodSymbol,
ZodUndefined,
ZodNull,
ZodAny,
ZodUnknown,
ZodNever,
ZodVoid,
ZodArray,
ZodObject,
ZodUnion,
ZodDiscriminatedUnion,
ZodIntersection,
ZodTuple,
ZodRecord,
ZodMap,
ZodSet,
ZodFunction,
ZodLazy,
ZodLiteral,
ZodEnum,
ZodNativeEnum,
ZodPromise,
ZodEffects,
ZodTransformer: ZodEffects,
ZodOptional,
ZodNullable,
ZodDefault,
ZodCatch,
ZodNaN,
BRAND,
ZodBranded,
ZodPipeline,
ZodReadonly,
custom,
Schema: ZodType,
ZodSchema: ZodType,
late,
get ZodFirstPartyTypeKind() {
return ZodFirstPartyTypeKind;
},
coerce,
any: anyType,
array: arrayType,
bigint: bigIntType,
boolean: booleanType,
date: dateType,
discriminatedUnion: discriminatedUnionType,
effect: effectsType,
"enum": enumType,
"function": functionType,
"instanceof": instanceOfType,
intersection: intersectionType,
lazy: lazyType,
literal: literalType,
map: mapType,
nan: nanType,
nativeEnum: nativeEnumType,
never: neverType,
"null": nullType,
nullable: nullableType,
number: numberType,
object: objectType,
oboolean,
onumber,
optional: optionalType,
ostring,
pipeline: pipelineType,
preprocess: preprocessType,
promise: promiseType,
record: recordType,
set: setType,
strictObject: strictObjectType,
string: stringType,
symbol: symbolType,
transformer: effectsType,
tuple: tupleType,
"undefined": undefinedType,
union: unionType,
unknown: unknownType,
"void": voidType,
NEVER,
ZodIssueCode,
quotelessJson,
ZodError
});
}
});
// node_modules/@modelcontextprotocol/sdk/dist/esm/types.js
var LATEST_PROTOCOL_VERSION, SUPPORTED_PROTOCOL_VERSIONS, JSONRPC_VERSION, ProgressTokenSchema, CursorSchema, RequestMetaSchema, BaseRequestParamsSchema, RequestSchema, BaseNotificationParamsSchema, NotificationSchema, ResultSchema, RequestIdSchema, JSONRPCRequestSchema, isJSONRPCRequest, JSONRPCNotificationSchema, isJSONRPCNotification, JSONRPCResponseSchema, isJSONRPCResponse, ErrorCode, JSONRPCErrorSchema, isJSONRPCError, JSONRPCMessageSchema, EmptyResultSchema, CancelledNotificationSchema, BaseMetadataSchema, ImplementationSchema, ClientCapabilitiesSchema, InitializeRequestSchema, ServerCapabilitiesSchema, InitializeResultSchema, InitializedNotificationSchema, PingRequestSchema, ProgressSchema, ProgressNotificationSchema, PaginatedRequestSchema, PaginatedResultSchema, ResourceContentsSchema, TextResourceContentsSchema, Base64Schema, BlobResourceContentsSchema, ResourceSchema, ResourceTemplateSchema, ListResourcesRequestSchema, ListResourcesResultSchema, ListResourceTemplatesRequestSchema, ListResourceTemplatesResultSchema, ReadResourceRequestSchema, ReadResourceResultSchema, ResourceListChangedNotificationSchema, SubscribeRequestSchema, UnsubscribeRequestSchema, ResourceUpdatedNotificationSchema, PromptArgumentSchema, PromptSchema, ListPromptsRequestSchema, ListPromptsResultSchema, GetPromptRequestSchema, TextContentSchema, ImageContentSchema, AudioContentSchema, EmbeddedResourceSchema, ResourceLinkSchema, ContentBlockSchema, PromptMessageSchema, GetPromptResultSchema, PromptListChangedNotificationSchema, ToolAnnotationsSchema, ToolSchema, ListToolsRequestSchema, ListToolsResultSchema, CallToolResultSchema, CompatibilityCallToolResultSchema, CallToolRequestSchema, ToolListChangedNotificationSchema, LoggingLevelSchema, SetLevelRequestSchema, LoggingMessageNotificationSchema, ModelHintSchema, ModelPreferencesSchema, SamplingMessageSchema, CreateMessageRequestSchema, CreateMessageResultSchema, BooleanSchemaSchema, StringSchemaSchema, NumberSchemaSchema, EnumSchemaSchema, PrimitiveSchemaDefinitionSchema, ElicitRequestSchema, ElicitResultSchema, ResourceTemplateReferenceSchema, PromptReferenceSchema, CompleteRequestSchema, CompleteResultSchema, RootSchema, ListRootsRequestSchema, ListRootsResultSchema, RootsListChangedNotificationSchema, ClientRequestSchema, ClientNotificationSchema, ClientResultSchema, ServerRequestSchema, ServerNotificationSchema, ServerResultSchema, McpError;
var init_types = __esm({
"node_modules/@modelcontextprotocol/sdk/dist/esm/types.js"() {
init_lib();
LATEST_PROTOCOL_VERSION = "2025-06-18";
SUPPORTED_PROTOCOL_VERSIONS = [
LATEST_PROTOCOL_VERSION,
"2025-03-26",
"2024-11-05",
"2024-10-07"
];
JSONRPC_VERSION = "2.0";
ProgressTokenSchema = z.union([z.string(), z.number().int()]);
CursorSchema = z.string();
RequestMetaSchema = z.object({
/**
* If specified, the caller is requesting out-of-band progress notifications for this request (as represented by notifications/progress). The value of this parameter is an opaque token that will be attached to any subsequent notifications. The receiver is not obligated to provide these notifications.
*/
progressToken: z.optional(ProgressTokenSchema)
}).passthrough();
BaseRequestParamsSchema = z.object({
_meta: z.optional(RequestMetaSchema)
}).passthrough();
RequestSchema = z.object({
method: z.string(),
params: z.optional(BaseRequestParamsSchema)
});
BaseNotificationParamsSchema = z.object({
/**
* See [MCP specification](https://github.com/modelcontextprotocol/modelcontextprotocol/blob/47339c03c143bb4ec01a26e721a1b8fe66634ebe/docs/specification/draft/basic/index.mdx#general-fields)
* for notes on _meta usage.
*/
_meta: z.optional(z.object({}).passthrough())
}).passthrough();
NotificationSchema = z.object({
method: z.string(),
params: z.optional(BaseNotificationParamsSchema)
});
ResultSchema = z.object({
/**
* See [MCP specification](https://github.com/modelcontextprotocol/modelcontextprotocol/blob/47339c03c143bb4ec01a26e721a1b8fe66634ebe/docs/specification/draft/basic/index.mdx#general-fields)
* for notes on _meta usage.
*/
_meta: z.optional(z.object({}).passthrough())
}).passthrough();
RequestIdSchema = z.union([z.string(), z.number().int()]);
JSONRPCRequestSchema = z.object({
jsonrpc: z.literal(JSONRPC_VERSION),
id: RequestIdSchema
}).merge(RequestSchema).strict();
isJSONRPCRequest = (value) => JSONRPCRequestSchema.safeParse(value).success;
JSONRPCNotificationSchema = z.object({
jsonrpc: z.literal(JSONRPC_VERSION)
}).merge(NotificationSchema).strict();
isJSONRPCNotification = (value) => JSONRPCNotificationSchema.safeParse(value).success;
JSONRPCResponseSchema = z.object({
jsonrpc: z.literal(JSONRPC_VERSION),
id: RequestIdSchema,
result: ResultSchema
}).strict();
isJSONRPCResponse = (value) => JSONRPCResponseSchema.safeParse(value).success;
(function(ErrorCode3) {
ErrorCode3[ErrorCode3["ConnectionClosed"] = -32e3] = "ConnectionClosed";
ErrorCode3[ErrorCode3["RequestTimeout"] = -32001] = "RequestTimeout";
ErrorCode3[ErrorCode3["ParseError"] = -32700] = "ParseError";
ErrorCode3[ErrorCode3["InvalidRequest"] = -32600] = "InvalidRequest";
ErrorCode3[ErrorCode3["MethodNotFound"] = -32601] = "MethodNotFound";
ErrorCode3[ErrorCode3["InvalidParams"] = -32602] = "InvalidParams";
ErrorCode3[ErrorCode3["InternalError"] = -32603] = "InternalError";
})(ErrorCode || (ErrorCode = {}));
JSONRPCErrorSchema = z.object({
jsonrpc: z.literal(JSONRPC_VERSION),
id: RequestIdSchema,
error: z.object({
/**
* The error type that occurred.
*/
code: z.number().int(),
/**
* A short description of the error. The message SHOULD be limited to a concise single sentence.
*/
message: z.string(),
/**
* Additional information about the error. The value of this member is defined by the sender (e.g. detailed error information, nested errors etc.).
*/
data: z.optional(z.unknown())
})
}).strict();
isJSONRPCError = (value) => JSONRPCErrorSchema.safeParse(value).success;
JSONRPCMessageSchema = z.union([
JSONRPCRequestSchema,
JSONRPCNotificationSchema,
JSONRPCResponseSchema,
JSONRPCErrorSchema
]);
EmptyResultSchema = ResultSchema.strict();
CancelledNotificationSchema = NotificationSchema.extend({
method: z.literal("notifications/cancelled"),
params: BaseNotificationParamsSchema.extend({
/**
* The ID of the request to cancel.
*
* This MUST correspond to the ID of a request previously issued in the same direction.
*/
requestId: RequestIdSchema,
/**
* An optional string describing the reason for the cancellation. This MAY be logged or presented to the user.
*/
reason: z.string().optional()
})
});
BaseMetadataSchema = z.object({
/** Intended for programmatic or logical use, but used as a display name in past specs or fallback */
name: z.string(),
/**
* Intended for UI and end-user contexts — optimized to be human-readable and easily understood,
* even by those unfamiliar with domain-specific terminology.
*
* If not provided, the name should be used for display (except for Tool,
* where `annotations.title` should be given precedence over using `name`,
* if present).
*/
title: z.optional(z.string())
}).passthrough();
ImplementationSchema = BaseMetadataSchema.extend({
version: z.string()
});
ClientCapabilitiesSchema = z.object({
/**
* Experimental, non-standard capabilities that the client supports.
*/
experimental: z.optional(z.object({}).passthrough()),
/**
* Present if the client supports sampling from an LLM.
*/
sampling: z.optional(z.object({}).passthrough()),
/**
* Present if the client supports eliciting user input.
*/
elicitation: z.optional(z.object({}).passthrough()),
/**
* Present if the client supports listing roots.
*/
roots: z.optional(z.object({
/**
* Whether the client supports issuing notifications for changes to the roots list.
*/
listChanged: z.optional(z.boolean())
}).passthrough())
}).passthrough();
InitializeRequestSchema = RequestSchema.extend({
method: z.literal("initialize"),
params: BaseRequestParamsSchema.extend({
/**
* The latest version of the Model Context Protocol that the client supports. The client MAY decide to support older versions as well.
*/
protocolVersion: z.string(),
capabilities: ClientCapabilitiesSchema,
clientInfo: ImplementationSchema
})
});
ServerCapabilitiesSchema = z.object({
/**
* Experimental, non-standard capabilities that the server supports.
*/
experimental: z.optional(z.object({}).passthrough()),
/**
* Present if the server supports sending log messages to the client.
*/
logging: z.optional(z.object({}).passthrough()),
/**
* Present if the server supports sending completions to the client.
*/
completions: z.optional(z.object({}).passthrough()),
/**
* Present if the server offers any prompt templates.
*/
prompts: z.optional(z.object({
/**
* Whether this server supports issuing notifications for changes to the prompt list.
*/
listChanged: z.optional(z.boolean())
}).passthrough()),
/**
* Present if the server offers any resources to read.
*/
resources: z.optional(z.object({
/**
* Whether this server supports clients subscribing to resource updates.
*/
subscribe: z.optional(z.boolean()),
/**
* Whether this server supports issuing notifications for changes to the resource list.
*/
listChanged: z.optional(z.boolean())
}).passthrough()),
/**
* Present if the server offers any tools to call.
*/
tools: z.optional(z.object({
/**
* Whether this server supports issuing notifications for changes to the tool list.
*/
listChanged: z.optional(z.boolean())
}).passthrough())
}).passthrough();
InitializeResultSchema = ResultSchema.extend({
/**
* The version of the Model Context Protocol that the server wants to use. This may not match the version that the client requested. If the client cannot support this version, it MUST disconnect.
*/
protocolVersion: z.string(),
capabilities: ServerCapabilitiesSchema,
serverInfo: ImplementationSchema,
/**
* Instructions describing how to use the server and its features.
*
* This can be used by clients to improve the LLM's understanding of available tools, resources, etc. It can be thought of like a "hint" to the model. For example, this information MAY be added to the system prompt.
*/
instructions: z.optional(z.string())
});
InitializedNotificationSchema = NotificationSchema.extend({
method: z.literal("notifications/initialized")
});
PingRequestSchema = RequestSchema.extend({
method: z.literal("ping")
});
ProgressSchema = z.object({
/**
* The progress thus far. This should increase every time progress is made, even if the total is unknown.
*/
progress: z.number(),
/**
* Total number of items to process (or total progress required), if known.
*/
total: z.optional(z.number()),
/**
* An optional message describing the current progress.
*/
message: z.optional(z.string())
}).passthrough();
ProgressNotificationSchema = NotificationSchema.extend({
method: z.literal("notifications/progress"),
params: BaseNotificationParamsSchema.merge(ProgressSchema).extend({
/**
* The progress token which was given in the initial request, used to associate this notification with the request that is proceeding.
*/
progressToken: ProgressTokenSchema
})
});
PaginatedRequestSchema = RequestSchema.extend({
params: BaseRequestParamsSchema.extend({
/**
* An opaque token representing the current pagination position.
* If provided, the server should return results starting after this cursor.
*/
cursor: z.optional(CursorSchema)
}).optional()
});
PaginatedResultSchema = ResultSchema.extend({
/**
* An opaque token representing the pagination position after the last returned result.
* If present, there may be more results available.
*/
nextCursor: z.optional(CursorSchema)
});
ResourceContentsSchema = z.object({
/**
* The URI of this resource.
*/
uri: z.string(),
/**
* The MIME type of this resource, if known.
*/
mimeType: z.optional(z.string()),
/**
* See [MCP specification](https://github.com/modelcontextprotocol/modelcontextprotocol/blob/47339c03c143bb4ec01a26e721a1b8fe66634ebe/docs/specification/draft/basic/index.mdx#general-fields)
* for notes on _meta usage.
*/
_meta: z.optional(z.object({}).passthrough())
}).passthrough();
TextResourceContentsSchema = ResourceContentsSchema.extend({
/**
* The text of the item. This must only be set if the item can actually be represented as text (not binary data).
*/
text: z.string()
});
Base64Schema = z.string().refine((val2) => {
try {
atob(val2);
return true;
} catch (_a2) {
return false;
}
}, { message: "Invalid Base64 string" });
BlobResourceContentsSchema = ResourceContentsSchema.extend({
/**
* A base64-encoded string representing the binary data of the item.
*/
blob: Base64Schema
});
ResourceSchema = BaseMetadataSchema.extend({
/**
* The URI of this resource.
*/
uri: z.string(),
/**
* A description of what this resource represents.
*
* This can be used by clients to improve the LLM's understanding of available resources. It can be thought of like a "hint" to the model.
*/
description: z.optional(z.string()),
/**
* The MIME type of this resource, if known.
*/
mimeType: z.optional(z.string()),
/**
* See [MCP specification](https://github.com/modelcontextprotocol/modelcontextprotocol/blob/47339c03c143bb4ec01a26e721a1b8fe66634ebe/docs/specification/draft/basic/index.mdx#general-fields)
* for notes on _meta usage.
*/
_meta: z.optional(z.object({}).passthrough())
});
ResourceTemplateSchema = BaseMetadataSchema.extend({
/**
* A URI template (according to RFC 6570) that can be used to construct resource URIs.
*/
uriTemplate: z.string(),
/**
* A description of what this template is for.
*
* This can be used by clients to improve the LLM's understanding of available resources. It can be thought of like a "hint" to the model.
*/
description: z.optional(z.string()),
/**
* The MIME type for all resources that match this template. This should only be included if all resources matching this template have the same type.
*/
mimeType: z.optional(z.string()),
/**
* See [MCP specification](https://github.com/modelcontextprotocol/modelcontextprotocol/blob/47339c03c143bb4ec01a26e721a1b8fe66634ebe/docs/specification/draft/basic/index.mdx#general-fields)
* for notes on _meta usage.
*/
_meta: z.optional(z.object({}).passthrough())
});
ListResourcesRequestSchema = PaginatedRequestSchema.extend({
method: z.literal("resources/list")
});
ListResourcesResultSchema = PaginatedResultSchema.extend({
resources: z.array(ResourceSchema)
});
ListResourceTemplatesRequestSchema = PaginatedRequestSchema.extend({
method: z.literal("resources/templates/list")
});
ListResourceTemplatesResultSchema = PaginatedResultSchema.extend({
resourceTemplates: z.array(ResourceTemplateSchema)
});
ReadResourceRequestSchema = RequestSchema.extend({
method: z.literal("resources/read"),
params: BaseRequestParamsSchema.extend({
/**
* The URI of the resource to read. The URI can use any protocol; it is up to the server how to interpret it.
*/
uri: z.string()
})
});
ReadResourceResultSchema = ResultSchema.extend({
contents: z.array(z.union([TextResourceContentsSchema, BlobResourceContentsSchema]))
});
ResourceListChangedNotificationSchema = NotificationSchema.extend({
method: z.literal("notifications/resources/list_changed")
});
SubscribeRequestSchema = RequestSchema.extend({
method: z.literal("resources/subscribe"),
params: BaseRequestParamsSchema.extend({
/**
* The URI of the resource to subscribe to. The URI can use any protocol; it is up to the server how to interpret it.
*/
uri: z.string()
})
});
UnsubscribeRequestSchema = RequestSchema.extend({
method: z.literal("resources/unsubscribe"),
params: BaseRequestParamsSchema.extend({
/**
* The URI of the resource to unsubscribe from.
*/
uri: z.string()
})
});
ResourceUpdatedNotificationSchema = NotificationSchema.extend({
method: z.literal("notifications/resources/updated"),
params: BaseNotificationParamsSchema.extend({
/**
* The URI of the resource that has been updated. This might be a sub-resource of the one that the client actually subscribed to.
*/
uri: z.string()
})
});
PromptArgumentSchema = z.object({
/**
* The name of the argument.
*/
name: z.string(),
/**
* A human-readable description of the argument.
*/
description: z.optional(z.string()),
/**
* Whether this argument must be provided.
*/
required: z.optional(z.boolean())
}).passthrough();
PromptSchema = BaseMetadataSchema.extend({
/**
* An optional description of what this prompt provides
*/
description: z.optional(z.string()),
/**
* A list of arguments to use for templating the prompt.
*/
arguments: z.optional(z.array(PromptArgumentSchema)),
/**
* See [MCP specification](https://github.com/modelcontextprotocol/modelcontextprotocol/blob/47339c03c143bb4ec01a26e721a1b8fe66634ebe/docs/specification/draft/basic/index.mdx#general-fields)
* for notes on _meta usage.
*/
_meta: z.optional(z.object({}).passthrough())
});
ListPromptsRequestSchema = PaginatedRequestSchema.extend({
method: z.literal("prompts/list")
});
ListPromptsResultSchema = PaginatedResultSchema.extend({
prompts: z.array(PromptSchema)
});
GetPromptRequestSchema = RequestSchema.extend({
method: z.literal("prompts/get"),
params: BaseRequestParamsSchema.extend({
/**
* The name of the prompt or prompt template.
*/
name: z.string(),
/**
* Arguments to use for templating the prompt.
*/
arguments: z.optional(z.record(z.string()))
})
});
TextContentSchema = z.object({
type: z.literal("text"),
/**
* The text content of the message.
*/
text: z.string(),
/**
* See [MCP specification](https://github.com/modelcontextprotocol/modelcontextprotocol/blob/47339c03c143bb4ec01a26e721a1b8fe66634ebe/docs/specification/draft/basic/index.mdx#general-fields)
* for notes on _meta usage.
*/
_meta: z.optional(z.object({}).passthrough())
}).passthrough();
ImageContentSchema = z.object({
type: z.literal("image"),
/**
* The base64-encoded image data.
*/
data: Base64Schema,
/**
* The MIME type of the image. Different providers may support different image types.
*/
mimeType: z.string(),
/**
* See [MCP specification](https://github.com/modelcontextprotocol/modelcontextprotocol/blob/47339c03c143bb4ec01a26e721a1b8fe66634ebe/docs/specification/draft/basic/index.mdx#general-fields)
* for notes on _meta usage.
*/
_meta: z.optional(z.object({}).passthrough())
}).passthrough();
AudioContentSchema = z.object({
type: z.literal("audio"),
/**
* The base64-encoded audio data.
*/
data: Base64Schema,
/**
* The MIME type of the audio. Different providers may support different audio types.
*/
mimeType: z.string(),
/**
* See [MCP specification](https://github.com/modelcontextprotocol/modelcontextprotocol/blob/47339c03c143bb4ec01a26e721a1b8fe66634ebe/docs/specification/draft/basic/index.mdx#general-fields)
* for notes on _meta usage.
*/
_meta: z.optional(z.object({}).passthrough())
}).passthrough();
EmbeddedResourceSchema = z.object({
type: z.literal("resource"),
resource: z.union([TextResourceContentsSchema, BlobResourceContentsSchema]),
/**
* See [MCP specification](https://github.com/modelcontextprotocol/modelcontextprotocol/blob/47339c03c143bb4ec01a26e721a1b8fe66634ebe/docs/specification/draft/basic/index.mdx#general-fields)
* for notes on _meta usage.
*/
_meta: z.optional(z.object({}).passthrough())
}).passthrough();
ResourceLinkSchema = ResourceSchema.extend({
type: z.literal("resource_link")
});
ContentBlockSchema = z.union([
TextContentSchema,
ImageContentSchema,
AudioContentSchema,
ResourceLinkSchema,
EmbeddedResourceSchema
]);
PromptMessageSchema = z.object({
role: z.enum(["user", "assistant"]),
content: ContentBlockSchema
}).passthrough();
GetPromptResultSchema = ResultSchema.extend({
/**
* An optional description for the prompt.
*/
description: z.optional(z.string()),
messages: z.array(PromptMessageSchema)
});
PromptListChangedNotificationSchema = NotificationSchema.extend({
method: z.literal("notifications/prompts/list_changed")
});
ToolAnnotationsSchema = z.object({
/**
* A human-readable title for the tool.
*/
title: z.optional(z.string()),
/**
* If true, the tool does not modify its environment.
*
* Default: false
*/
readOnlyHint: z.optional(z.boolean()),
/**
* If true, the tool may perform destructive updates to its environment.
* If false, the tool performs only additive updates.
*
* (This property is meaningful only when `readOnlyHint == false`)
*
* Default: true
*/
destructiveHint: z.optional(z.boolean()),
/**
* If true, calling the tool repeatedly with the same arguments
* will have no additional effect on the its environment.
*
* (This property is meaningful only when `readOnlyHint == false`)
*
* Default: false
*/
idempotentHint: z.optional(z.boolean()),
/**
* If true, this tool may interact with an "open world" of external
* entities. If false, the tool's domain of interaction is closed.
* For example, the world of a web search tool is open, whereas that
* of a memory tool is not.
*
* Default: true
*/
openWorldHint: z.optional(z.boolean())
}).passthrough();
ToolSchema = BaseMetadataSchema.extend({
/**
* A human-readable description of the tool.
*/
description: z.optional(z.string()),
/**
* A JSON Schema object defining the expected parameters for the tool.
*/
inputSchema: z.object({
type: z.literal("object"),
properties: z.optional(z.object({}).passthrough()),
required: z.optional(z.array(z.string()))
}).passthrough(),
/**
* An optional JSON Schema object defining the structure of the tool's output returned in
* the structuredContent field of a CallToolResult.
*/
outputSchema: z.optional(z.object({
type: z.literal("object"),
properties: z.optional(z.object({}).passthrough()),
required: z.optional(z.array(z.string()))
}).passthrough()),
/**
* Optional additional tool information.
*/
annotations: z.optional(ToolAnnotationsSchema),
/**
* See [MCP specification](https://github.com/modelcontextprotocol/modelcontextprotocol/blob/47339c03c143bb4ec01a26e721a1b8fe66634ebe/docs/specification/draft/basic/index.mdx#general-fields)
* for notes on _meta usage.
*/
_meta: z.optional(z.object({}).passthrough())
});
ListToolsRequestSchema = PaginatedRequestSchema.extend({
method: z.literal("tools/list")
});
ListToolsResultSchema = PaginatedResultSchema.extend({
tools: z.array(ToolSchema)
});
CallToolResultSchema = ResultSchema.extend({
/**
* A list of content objects that represent the result of the tool call.
*
* If the Tool does not define an outputSchema, this field MUST be present in the result.
* For backwards compatibility, this field is always present, but it may be empty.
*/
content: z.array(ContentBlockSchema).default([]),
/**
* An object containing structured tool output.
*
* If the Tool defines an outputSchema, this field MUST be present in the result, and contain a JSON object that matches the schema.
*/
structuredContent: z.object({}).passthrough().optional(),
/**
* Whether the tool call ended in an error.
*
* If not set, this is assumed to be false (the call was successful).
*
* Any errors that originate from the tool SHOULD be reported inside the result
* object, with `isError` set to true, _not_ as an MCP protocol-level error
* response. Otherwise, the LLM would not be able to see that an error occurred
* and self-correct.
*
* However, any errors in _finding_ the tool, an error indicating that the
* server does not support tool calls, or any other exceptional conditions,
* should be reported as an MCP error response.
*/
isError: z.optional(z.boolean())
});
CompatibilityCallToolResultSchema = CallToolResultSchema.or(ResultSchema.extend({
toolResult: z.unknown()
}));
CallToolRequestSchema = RequestSchema.extend({
method: z.literal("tools/call"),
params: BaseRequestParamsSchema.extend({
name: z.string(),
arguments: z.optional(z.record(z.unknown()))
})
});
ToolListChangedNotificationSchema = NotificationSchema.extend({
method: z.literal("notifications/tools/list_changed")
});
LoggingLevelSchema = z.enum([
"debug",
"info",
"notice",
"warning",
"error",
"critical",
"alert",
"emergency"
]);
SetLevelRequestSchema = RequestSchema.extend({
method: z.literal("logging/setLevel"),
params: BaseRequestParamsSchema.extend({
/**
* The level of logging that the client wants to receive from the server. The server should send all logs at this level and higher (i.e., more severe) to the client as notifications/logging/message.
*/
level: LoggingLevelSchema
})
});
LoggingMessageNotificationSchema = NotificationSchema.extend({
method: z.literal("notifications/message"),
params: BaseNotificationParamsSchema.extend({
/**
* The severity of this log message.
*/
level: LoggingLevelSchema,
/**
* An optional name of the logger issuing this message.
*/
logger: z.optional(z.string()),
/**
* The data to be logged, such as a string message or an object. Any JSON serializable type is allowed here.
*/
data: z.unknown()
})
});
ModelHintSchema = z.object({
/**
* A hint for a model name.
*/
name: z.string().optional()
}).passthrough();
ModelPreferencesSchema = z.object({
/**
* Optional hints to use for model selection.
*/
hints: z.optional(z.array(ModelHintSchema)),
/**
* How much to prioritize cost when selecting a model.
*/
costPriority: z.optional(z.number().min(0).max(1)),
/**
* How much to prioritize sampling speed (latency) when selecting a model.
*/
speedPriority: z.optional(z.number().min(0).max(1)),
/**
* How much to prioritize intelligence and capabilities when selecting a model.
*/
intelligencePriority: z.optional(z.number().min(0).max(1))
}).passthrough();
SamplingMessageSchema = z.object({
role: z.enum(["user", "assistant"]),
content: z.union([TextContentSchema, ImageContentSchema, AudioContentSchema])
}).passthrough();
CreateMessageRequestSchema = RequestSchema.extend({
method: z.literal("sampling/createMessage"),
params: BaseRequestParamsSchema.extend({
messages: z.array(SamplingMessageSchema),
/**
* An optional system prompt the server wants to use for sampling. The client MAY modify or omit this prompt.
*/
systemPrompt: z.optional(z.string()),
/**
* A request to include context from one or more MCP servers (including the caller), to be attached to the prompt. The client MAY ignore this request.
*/
includeContext: z.optional(z.enum(["none", "thisServer", "allServers"])),
temperature: z.optional(z.number()),
/**
* The maximum number of tokens to sample, as requested by the server. The client MAY choose to sample fewer tokens than requested.
*/
maxTokens: z.number().int(),
stopSequences: z.optional(z.array(z.string())),
/**
* Optional metadata to pass through to the LLM provider. The format of this metadata is provider-specific.
*/
metadata: z.optional(z.object({}).passthrough()),
/**
* The server's preferences for which model to select.
*/
modelPreferences: z.optional(ModelPreferencesSchema)
})
});
CreateMessageResultSchema = ResultSchema.extend({
/**
* The name of the model that generated the message.
*/
model: z.string(),
/**
* The reason why sampling stopped.
*/
stopReason: z.optional(z.enum(["endTurn", "stopSequence", "maxTokens"]).or(z.string())),
role: z.enum(["user", "assistant"]),
content: z.discriminatedUnion("type", [
TextContentSchema,
ImageContentSchema,
AudioContentSchema
])
});
BooleanSchemaSchema = z.object({
type: z.literal("boolean"),
title: z.optional(z.string()),
description: z.optional(z.string()),
default: z.optional(z.boolean())
}).passthrough();
StringSchemaSchema = z.object({
type: z.literal("string"),
title: z.optional(z.string()),
description: z.optional(z.string()),
minLength: z.optional(z.number()),
maxLength: z.optional(z.number()),
format: z.optional(z.enum(["email", "uri", "date", "date-time"]))
}).passthrough();
NumberSchemaSchema = z.object({
type: z.enum(["number", "integer"]),
title: z.optional(z.string()),
description: z.optional(z.string()),
minimum: z.optional(z.number()),
maximum: z.optional(z.number())
}).passthrough();
EnumSchemaSchema = z.object({
type: z.literal("string"),
title: z.optional(z.string()),
description: z.optional(z.string()),
enum: z.array(z.string()),
enumNames: z.optional(z.array(z.string()))
}).passthrough();
PrimitiveSchemaDefinitionSchema = z.union([
BooleanSchemaSchema,
StringSchemaSchema,
NumberSchemaSchema,
EnumSchemaSchema
]);
ElicitRequestSchema = RequestSchema.extend({
method: z.literal("elicitation/create"),
params: BaseRequestParamsSchema.extend({
/**
* The message to present to the user.
*/
message: z.string(),
/**
* The schema for the requested user input.
*/
requestedSchema: z.object({
type: z.literal("object"),
properties: z.record(z.string(), PrimitiveSchemaDefinitionSchema),
required: z.optional(z.array(z.string()))
}).passthrough()
})
});
ElicitResultSchema = ResultSchema.extend({
/**
* The user's response action.
*/
action: z.enum(["accept", "decline", "cancel"]),
/**
* The collected user input content (only present if action is "accept").
*/
content: z.optional(z.record(z.string(), z.unknown()))
});
ResourceTemplateReferenceSchema = z.object({
type: z.literal("ref/resource"),
/**
* The URI or URI template of the resource.
*/
uri: z.string()
}).passthrough();
PromptReferenceSchema = z.object({
type: z.literal("ref/prompt"),
/**
* The name of the prompt or prompt template
*/
name: z.string()
}).passthrough();
CompleteRequestSchema = RequestSchema.extend({
method: z.literal("completion/complete"),
params: BaseRequestParamsSchema.extend({
ref: z.union([PromptReferenceSchema, ResourceTemplateReferenceSchema]),
/**
* The argument's information
*/
argument: z.object({
/**
* The name of the argument
*/
name: z.string(),
/**
* The value of the argument to use for completion matching.
*/
value: z.string()
}).passthrough(),
context: z.optional(z.object({
/**
* Previously-resolved variables in a URI template or prompt.
*/
arguments: z.optional(z.record(z.string(), z.string()))
}))
})
});
CompleteResultSchema = ResultSchema.extend({
completion: z.object({
/**
* An array of completion values. Must not exceed 100 items.
*/
values: z.array(z.string()).max(100),
/**
* The total number of completion options available. This can exceed the number of values actually sent in the response.
*/
total: z.optional(z.number().int()),
/**
* Indicates whether there are additional completion options beyond those provided in the current response, even if the exact total is unknown.
*/
hasMore: z.optional(z.boolean())
}).passthrough()
});
RootSchema = z.object({
/**
* The URI identifying the root. This *must* start with file:// for now.
*/
uri: z.string().startsWith("file://"),
/**
* An optional name for the root.
*/
name: z.optional(z.string()),
/**
* See [MCP specification](https://github.com/modelcontextprotocol/modelcontextprotocol/blob/47339c03c143bb4ec01a26e721a1b8fe66634ebe/docs/specification/draft/basic/index.mdx#general-fields)
* for notes on _meta usage.
*/
_meta: z.optional(z.object({}).passthrough())
}).passthrough();
ListRootsRequestSchema = RequestSchema.extend({
method: z.literal("roots/list")
});
ListRootsResultSchema = ResultSchema.extend({
roots: z.array(RootSchema)
});
RootsListChangedNotificationSchema = NotificationSchema.extend({
method: z.literal("notifications/roots/list_changed")
});
ClientRequestSchema = z.union([
PingRequestSchema,
InitializeRequestSchema,
CompleteRequestSchema,
SetLevelRequestSchema,
GetPromptRequestSchema,
ListPromptsRequestSchema,
ListResourcesRequestSchema,
ListResourceTemplatesRequestSchema,
ReadResourceRequestSchema,
SubscribeRequestSchema,
UnsubscribeRequestSchema,
CallToolRequestSchema,
ListToolsRequestSchema
]);
ClientNotificationSchema = z.union([
CancelledNotificationSchema,
ProgressNotificationSchema,
InitializedNotificationSchema,
RootsListChangedNotificationSchema
]);
ClientResultSchema = z.union([
EmptyResultSchema,
CreateMessageResultSchema,
ElicitResultSchema,
ListRootsResultSchema
]);
ServerRequestSchema = z.union([
PingRequestSchema,
CreateMessageRequestSchema,
ElicitRequestSchema,
ListRootsRequestSchema
]);
ServerNotificationSchema = z.union([
CancelledNotificationSchema,
ProgressNotificationSchema,
LoggingMessageNotificationSchema,
ResourceUpdatedNotificationSchema,
ResourceListChangedNotificationSchema,
ToolListChangedNotificationSchema,
PromptListChangedNotificationSchema
]);
ServerResultSchema = z.union([
EmptyResultSchema,
InitializeResultSchema,
CompleteResultSchema,
GetPromptResultSchema,
ListPromptsResultSchema,
ListResourcesResultSchema,
ListResourceTemplatesResultSchema,
ReadResourceResultSchema,
CallToolResultSchema,
ListToolsResultSchema
]);
McpError = class extends Error {
constructor(code, message, data2) {
super(`MCP error ${code}: ${message}`);
this.code = code;
this.data = data2;
this.name = "McpError";
}
};
}
});
// node_modules/@modelcontextprotocol/sdk/dist/esm/shared/protocol.js
function mergeCapabilities(base, additional) {
return Object.entries(additional).reduce((acc, [key, value]) => {
if (value && typeof value === "object") {
acc[key] = acc[key] ? { ...acc[key], ...value } : value;
} else {
acc[key] = value;
}
return acc;
}, { ...base });
}
var DEFAULT_REQUEST_TIMEOUT_MSEC, Protocol;
var init_protocol = __esm({
"node_modules/@modelcontextprotocol/sdk/dist/esm/shared/protocol.js"() {
init_types();
DEFAULT_REQUEST_TIMEOUT_MSEC = 6e4;
Protocol = class {
constructor(_options) {
this._options = _options;
this._requestMessageId = 0;
this._requestHandlers = /* @__PURE__ */ new Map();
this._requestHandlerAbortControllers = /* @__PURE__ */ new Map();
this._notificationHandlers = /* @__PURE__ */ new Map();
this._responseHandlers = /* @__PURE__ */ new Map();
this._progressHandlers = /* @__PURE__ */ new Map();
this._timeoutInfo = /* @__PURE__ */ new Map();
this._pendingDebouncedNotifications = /* @__PURE__ */ new Set();
this.setNotificationHandler(CancelledNotificationSchema, (notification) => {
const controller = this._requestHandlerAbortControllers.get(notification.params.requestId);
controller === null || controller === void 0 ? void 0 : controller.abort(notification.params.reason);
});
this.setNotificationHandler(ProgressNotificationSchema, (notification) => {
this._onprogress(notification);
});
this.setRequestHandler(
PingRequestSchema,
// Automatic pong by default.
(_request) => ({})
);
}
_setupTimeout(messageId, timeout, maxTotalTimeout, onTimeout, resetTimeoutOnProgress = false) {
this._timeoutInfo.set(messageId, {
timeoutId: setTimeout(onTimeout, timeout),
startTime: Date.now(),
timeout,
maxTotalTimeout,
resetTimeoutOnProgress,
onTimeout
});
}
_resetTimeout(messageId) {
const info = this._timeoutInfo.get(messageId);
if (!info)
return false;
const totalElapsed = Date.now() - info.startTime;
if (info.maxTotalTimeout && totalElapsed >= info.maxTotalTimeout) {
this._timeoutInfo.delete(messageId);
throw new McpError(ErrorCode.RequestTimeout, "Maximum total timeout exceeded", { maxTotalTimeout: info.maxTotalTimeout, totalElapsed });
}
clearTimeout(info.timeoutId);
info.timeoutId = setTimeout(info.onTimeout, info.timeout);
return true;
}
_cleanupTimeout(messageId) {
const info = this._timeoutInfo.get(messageId);
if (info) {
clearTimeout(info.timeoutId);
this._timeoutInfo.delete(messageId);
}
}
/**
* Attaches to the given transport, starts it, and starts listening for messages.
*
* The Protocol object assumes ownership of the Transport, replacing any callbacks that have already been set, and expects that it is the only user of the Transport instance going forward.
*/
async connect(transport) {
var _a2, _b, _c;
this._transport = transport;
const _onclose = (_a2 = this.transport) === null || _a2 === void 0 ? void 0 : _a2.onclose;
this._transport.onclose = () => {
_onclose === null || _onclose === void 0 ? void 0 : _onclose();
this._onclose();
};
const _onerror = (_b = this.transport) === null || _b === void 0 ? void 0 : _b.onerror;
this._transport.onerror = (error) => {
_onerror === null || _onerror === void 0 ? void 0 : _onerror(error);
this._onerror(error);
};
const _onmessage = (_c = this._transport) === null || _c === void 0 ? void 0 : _c.onmessage;
this._transport.onmessage = (message, extra) => {
_onmessage === null || _onmessage === void 0 ? void 0 : _onmessage(message, extra);
if (isJSONRPCResponse(message) || isJSONRPCError(message)) {
this._onresponse(message);
} else if (isJSONRPCRequest(message)) {
this._onrequest(message, extra);
} else if (isJSONRPCNotification(message)) {
this._onnotification(message);
} else {
this._onerror(new Error(`Unknown message type: ${JSON.stringify(message)}`));
}
};
await this._transport.start();
}
_onclose() {
var _a2;
const responseHandlers = this._responseHandlers;
this._responseHandlers = /* @__PURE__ */ new Map();
this._progressHandlers.clear();
this._pendingDebouncedNotifications.clear();
this._transport = void 0;
(_a2 = this.onclose) === null || _a2 === void 0 ? void 0 : _a2.call(this);
const error = new McpError(ErrorCode.ConnectionClosed, "Connection closed");
for (const handler of responseHandlers.values()) {
handler(error);
}
}
_onerror(error) {
var _a2;
(_a2 = this.onerror) === null || _a2 === void 0 ? void 0 : _a2.call(this, error);
}
_onnotification(notification) {
var _a2;
const handler = (_a2 = this._notificationHandlers.get(notification.method)) !== null && _a2 !== void 0 ? _a2 : this.fallbackNotificationHandler;
if (handler === void 0) {
return;
}
Promise.resolve().then(() => handler(notification)).catch((error) => this._onerror(new Error(`Uncaught error in notification handler: ${error}`)));
}
_onrequest(request, extra) {
var _a2, _b;
const handler = (_a2 = this._requestHandlers.get(request.method)) !== null && _a2 !== void 0 ? _a2 : this.fallbackRequestHandler;
const capturedTransport = this._transport;
if (handler === void 0) {
capturedTransport === null || capturedTransport === void 0 ? void 0 : capturedTransport.send({
jsonrpc: "2.0",
id: request.id,
error: {
code: ErrorCode.MethodNotFound,
message: "Method not found"
}
}).catch((error) => this._onerror(new Error(`Failed to send an error response: ${error}`)));
return;
}
const abortController = new AbortController();
this._requestHandlerAbortControllers.set(request.id, abortController);
const fullExtra = {
signal: abortController.signal,
sessionId: capturedTransport === null || capturedTransport === void 0 ? void 0 : capturedTransport.sessionId,
_meta: (_b = request.params) === null || _b === void 0 ? void 0 : _b._meta,
sendNotification: (notification) => this.notification(notification, { relatedRequestId: request.id }),
sendRequest: (r, resultSchema, options) => this.request(r, resultSchema, { ...options, relatedRequestId: request.id }),
authInfo: extra === null || extra === void 0 ? void 0 : extra.authInfo,
requestId: request.id,
requestInfo: extra === null || extra === void 0 ? void 0 : extra.requestInfo
};
Promise.resolve().then(() => handler(request, fullExtra)).then((result) => {
if (abortController.signal.aborted) {
return;
}
return capturedTransport === null || capturedTransport === void 0 ? void 0 : capturedTransport.send({
result,
jsonrpc: "2.0",
id: request.id
});
}, (error) => {
var _a3;
if (abortController.signal.aborted) {
return;
}
return capturedTransport === null || capturedTransport === void 0 ? void 0 : capturedTransport.send({
jsonrpc: "2.0",
id: request.id,
error: {
code: Number.isSafeInteger(error["code"]) ? error["code"] : ErrorCode.InternalError,
message: (_a3 = error.message) !== null && _a3 !== void 0 ? _a3 : "Internal error"
}
});
}).catch((error) => this._onerror(new Error(`Failed to send response: ${error}`))).finally(() => {
this._requestHandlerAbortControllers.delete(request.id);
});
}
_onprogress(notification) {
const { progressToken, ...params } = notification.params;
const messageId = Number(progressToken);
const handler = this._progressHandlers.get(messageId);
if (!handler) {
this._onerror(new Error(`Received a progress notification for an unknown token: ${JSON.stringify(notification)}`));
return;
}
const responseHandler = this._responseHandlers.get(messageId);
const timeoutInfo = this._timeoutInfo.get(messageId);
if (timeoutInfo && responseHandler && timeoutInfo.resetTimeoutOnProgress) {
try {
this._resetTimeout(messageId);
} catch (error) {
responseHandler(error);
return;
}
}
handler(params);
}
_onresponse(response) {
const messageId = Number(response.id);
const handler = this._responseHandlers.get(messageId);
if (handler === void 0) {
this._onerror(new Error(`Received a response for an unknown message ID: ${JSON.stringify(response)}`));
return;
}
this._responseHandlers.delete(messageId);
this._progressHandlers.delete(messageId);
this._cleanupTimeout(messageId);
if (isJSONRPCResponse(response)) {
handler(response);
} else {
const error = new McpError(response.error.code, response.error.message, response.error.data);
handler(error);
}
}
get transport() {
return this._transport;
}
/**
* Closes the connection.
*/
async close() {
var _a2;
await ((_a2 = this._transport) === null || _a2 === void 0 ? void 0 : _a2.close());
}
/**
* Sends a request and wait for a response.
*
* Do not use this method to emit notifications! Use notification() instead.
*/
request(request, resultSchema, options) {
const { relatedRequestId, resumptionToken, onresumptiontoken } = options !== null && options !== void 0 ? options : {};
return new Promise((resolve, reject) => {
var _a2, _b, _c, _d, _e, _f;
if (!this._transport) {
reject(new Error("Not connected"));
return;
}
if (((_a2 = this._options) === null || _a2 === void 0 ? void 0 : _a2.enforceStrictCapabilities) === true) {
this.assertCapabilityForMethod(request.method);
}
(_b = options === null || options === void 0 ? void 0 : options.signal) === null || _b === void 0 ? void 0 : _b.throwIfAborted();
const messageId = this._requestMessageId++;
const jsonrpcRequest = {
...request,
jsonrpc: "2.0",
id: messageId
};
if (options === null || options === void 0 ? void 0 : options.onprogress) {
this._progressHandlers.set(messageId, options.onprogress);
jsonrpcRequest.params = {
...request.params,
_meta: {
...((_c = request.params) === null || _c === void 0 ? void 0 : _c._meta) || {},
progressToken: messageId
}
};
}
const cancel = (reason) => {
var _a3;
this._responseHandlers.delete(messageId);
this._progressHandlers.delete(messageId);
this._cleanupTimeout(messageId);
(_a3 = this._transport) === null || _a3 === void 0 ? void 0 : _a3.send({
jsonrpc: "2.0",
method: "notifications/cancelled",
params: {
requestId: messageId,
reason: String(reason)
}
}, { relatedRequestId, resumptionToken, onresumptiontoken }).catch((error) => this._onerror(new Error(`Failed to send cancellation: ${error}`)));
reject(reason);
};
this._responseHandlers.set(messageId, (response) => {
var _a3;
if ((_a3 = options === null || options === void 0 ? void 0 : options.signal) === null || _a3 === void 0 ? void 0 : _a3.aborted) {
return;
}
if (response instanceof Error) {
return reject(response);
}
try {
const result = resultSchema.parse(response.result);
resolve(result);
} catch (error) {
reject(error);
}
});
(_d = options === null || options === void 0 ? void 0 : options.signal) === null || _d === void 0 ? void 0 : _d.addEventListener("abort", () => {
var _a3;
cancel((_a3 = options === null || options === void 0 ? void 0 : options.signal) === null || _a3 === void 0 ? void 0 : _a3.reason);
});
const timeout = (_e = options === null || options === void 0 ? void 0 : options.timeout) !== null && _e !== void 0 ? _e : DEFAULT_REQUEST_TIMEOUT_MSEC;
const timeoutHandler = () => cancel(new McpError(ErrorCode.RequestTimeout, "Request timed out", { timeout }));
this._setupTimeout(messageId, timeout, options === null || options === void 0 ? void 0 : options.maxTotalTimeout, timeoutHandler, (_f = options === null || options === void 0 ? void 0 : options.resetTimeoutOnProgress) !== null && _f !== void 0 ? _f : false);
this._transport.send(jsonrpcRequest, { relatedRequestId, resumptionToken, onresumptiontoken }).catch((error) => {
this._cleanupTimeout(messageId);
reject(error);
});
});
}
/**
* Emits a notification, which is a one-way message that does not expect a response.
*/
async notification(notification, options) {
var _a2, _b;
if (!this._transport) {
throw new Error("Not connected");
}
this.assertNotificationCapability(notification.method);
const debouncedMethods = (_b = (_a2 = this._options) === null || _a2 === void 0 ? void 0 : _a2.debouncedNotificationMethods) !== null && _b !== void 0 ? _b : [];
const canDebounce = debouncedMethods.includes(notification.method) && !notification.params && !(options === null || options === void 0 ? void 0 : options.relatedRequestId);
if (canDebounce) {
if (this._pendingDebouncedNotifications.has(notification.method)) {
return;
}
this._pendingDebouncedNotifications.add(notification.method);
Promise.resolve().then(() => {
var _a3;
this._pendingDebouncedNotifications.delete(notification.method);
if (!this._transport) {
return;
}
const jsonrpcNotification2 = {
...notification,
jsonrpc: "2.0"
};
(_a3 = this._transport) === null || _a3 === void 0 ? void 0 : _a3.send(jsonrpcNotification2, options).catch((error) => this._onerror(error));
});
return;
}
const jsonrpcNotification = {
...notification,
jsonrpc: "2.0"
};
await this._transport.send(jsonrpcNotification, options);
}
/**
* Registers a handler to invoke when this protocol object receives a request with the given method.
*
* Note that this will replace any previous request handler for the same method.
*/
setRequestHandler(requestSchema, handler) {
const method = requestSchema.shape.method.value;
this.assertRequestHandlerCapability(method);
this._requestHandlers.set(method, (request, extra) => {
return Promise.resolve(handler(requestSchema.parse(request), extra));
});
}
/**
* Removes the request handler for the given method.
*/
removeRequestHandler(method) {
this._requestHandlers.delete(method);
}
/**
* Asserts that a request handler has not already been set for the given method, in preparation for a new one being automatically installed.
*/
assertCanSetRequestHandler(method) {
if (this._requestHandlers.has(method)) {
throw new Error(`A request handler for ${method} already exists, which would be overridden`);
}
}
/**
* Registers a handler to invoke when this protocol object receives a notification with the given method.
*
* Note that this will replace any previous notification handler for the same method.
*/
setNotificationHandler(notificationSchema, handler) {
this._notificationHandlers.set(notificationSchema.shape.method.value, (notification) => Promise.resolve(handler(notificationSchema.parse(notification))));
}
/**
* Removes the notification handler for the given method.
*/
removeNotificationHandler(method) {
this._notificationHandlers.delete(method);
}
};
}
});
// node_modules/uri-js/dist/es5/uri.all.js
var require_uri_all = __commonJS({
"node_modules/uri-js/dist/es5/uri.all.js"(exports2, module2) {
(function(global2, factory) {
typeof exports2 === "object" && typeof module2 !== "undefined" ? factory(exports2) : typeof define === "function" && define.amd ? define(["exports"], factory) : factory(global2.URI = global2.URI || {});
})(exports2, (function(exports3) {
"use strict";
function merge3() {
for (var _len = arguments.length, sets = Array(_len), _key = 0; _key < _len; _key++) {
sets[_key] = arguments[_key];
}
if (sets.length > 1) {
sets[0] = sets[0].slice(0, -1);
var xl = sets.length - 1;
for (var x = 1; x < xl; ++x) {
sets[x] = sets[x].slice(1, -1);
}
sets[xl] = sets[xl].slice(1);
return sets.join("");
} else {
return sets[0];
}
}
function subexp(str) {
return "(?:" + str + ")";
}
function typeOf(o) {
return o === void 0 ? "undefined" : o === null ? "null" : Object.prototype.toString.call(o).split(" ").pop().split("]").shift().toLowerCase();
}
function toUpperCase(str) {
return str.toUpperCase();
}
function toArray3(obj) {
return obj !== void 0 && obj !== null ? obj instanceof Array ? obj : typeof obj.length !== "number" || obj.split || obj.setInterval || obj.call ? [obj] : Array.prototype.slice.call(obj) : [];
}
function assign(target, source) {
var obj = target;
if (source) {
for (var key in source) {
obj[key] = source[key];
}
}
return obj;
}
function buildExps(isIRI2) {
var ALPHA$$ = "[A-Za-z]", CR$ = "[\\x0D]", DIGIT$$ = "[0-9]", DQUOTE$$ = "[\\x22]", HEXDIG$$2 = merge3(DIGIT$$, "[A-Fa-f]"), LF$$ = "[\\x0A]", SP$$ = "[\\x20]", PCT_ENCODED$2 = subexp(subexp("%[EFef]" + HEXDIG$$2 + "%" + HEXDIG$$2 + HEXDIG$$2 + "%" + HEXDIG$$2 + HEXDIG$$2) + "|" + subexp("%[89A-Fa-f]" + HEXDIG$$2 + "%" + HEXDIG$$2 + HEXDIG$$2) + "|" + subexp("%" + HEXDIG$$2 + HEXDIG$$2)), GEN_DELIMS$$ = "[\\:\\/\\?\\#\\[\\]\\@]", SUB_DELIMS$$ = "[\\!\\$\\&\\'\\(\\)\\*\\+\\,\\;\\=]", RESERVED$$ = merge3(GEN_DELIMS$$, SUB_DELIMS$$), UCSCHAR$$ = isIRI2 ? "[\\xA0-\\u200D\\u2010-\\u2029\\u202F-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF]" : "[]", IPRIVATE$$ = isIRI2 ? "[\\uE000-\\uF8FF]" : "[]", UNRESERVED$$2 = merge3(ALPHA$$, DIGIT$$, "[\\-\\.\\_\\~]", UCSCHAR$$), SCHEME$ = subexp(ALPHA$$ + merge3(ALPHA$$, DIGIT$$, "[\\+\\-\\.]") + "*"), USERINFO$ = subexp(subexp(PCT_ENCODED$2 + "|" + merge3(UNRESERVED$$2, SUB_DELIMS$$, "[\\:]")) + "*"), DEC_OCTET$ = subexp(subexp("25[0-5]") + "|" + subexp("2[0-4]" + DIGIT$$) + "|" + subexp("1" + DIGIT$$ + DIGIT$$) + "|" + subexp("[1-9]" + DIGIT$$) + "|" + DIGIT$$), DEC_OCTET_RELAXED$ = subexp(subexp("25[0-5]") + "|" + subexp("2[0-4]" + DIGIT$$) + "|" + subexp("1" + DIGIT$$ + DIGIT$$) + "|" + subexp("0?[1-9]" + DIGIT$$) + "|0?0?" + DIGIT$$), IPV4ADDRESS$ = subexp(DEC_OCTET_RELAXED$ + "\\." + DEC_OCTET_RELAXED$ + "\\." + DEC_OCTET_RELAXED$ + "\\." + DEC_OCTET_RELAXED$), H16$ = subexp(HEXDIG$$2 + "{1,4}"), LS32$ = subexp(subexp(H16$ + "\\:" + H16$) + "|" + IPV4ADDRESS$), IPV6ADDRESS1$ = subexp(subexp(H16$ + "\\:") + "{6}" + LS32$), IPV6ADDRESS2$ = subexp("\\:\\:" + subexp(H16$ + "\\:") + "{5}" + LS32$), IPV6ADDRESS3$ = subexp(subexp(H16$) + "?\\:\\:" + subexp(H16$ + "\\:") + "{4}" + LS32$), IPV6ADDRESS4$ = subexp(subexp(subexp(H16$ + "\\:") + "{0,1}" + H16$) + "?\\:\\:" + subexp(H16$ + "\\:") + "{3}" + LS32$), IPV6ADDRESS5$ = subexp(subexp(subexp(H16$ + "\\:") + "{0,2}" + H16$) + "?\\:\\:" + subexp(H16$ + "\\:") + "{2}" + LS32$), IPV6ADDRESS6$ = subexp(subexp(subexp(H16$ + "\\:") + "{0,3}" + H16$) + "?\\:\\:" + H16$ + "\\:" + LS32$), IPV6ADDRESS7$ = subexp(subexp(subexp(H16$ + "\\:") + "{0,4}" + H16$) + "?\\:\\:" + LS32$), IPV6ADDRESS8$ = subexp(subexp(subexp(H16$ + "\\:") + "{0,5}" + H16$) + "?\\:\\:" + H16$), IPV6ADDRESS9$ = subexp(subexp(subexp(H16$ + "\\:") + "{0,6}" + H16$) + "?\\:\\:"), IPV6ADDRESS$ = subexp([IPV6ADDRESS1$, IPV6ADDRESS2$, IPV6ADDRESS3$, IPV6ADDRESS4$, IPV6ADDRESS5$, IPV6ADDRESS6$, IPV6ADDRESS7$, IPV6ADDRESS8$, IPV6ADDRESS9$].join("|")), ZONEID$ = subexp(subexp(UNRESERVED$$2 + "|" + PCT_ENCODED$2) + "+"), IPV6ADDRZ$ = subexp(IPV6ADDRESS$ + "\\%25" + ZONEID$), IPV6ADDRZ_RELAXED$ = subexp(IPV6ADDRESS$ + subexp("\\%25|\\%(?!" + HEXDIG$$2 + "{2})") + ZONEID$), IPVFUTURE$ = subexp("[vV]" + HEXDIG$$2 + "+\\." + merge3(UNRESERVED$$2, SUB_DELIMS$$, "[\\:]") + "+"), IP_LITERAL$ = subexp("\\[" + subexp(IPV6ADDRZ_RELAXED$ + "|" + IPV6ADDRESS$ + "|" + IPVFUTURE$) + "\\]"), REG_NAME$ = subexp(subexp(PCT_ENCODED$2 + "|" + merge3(UNRESERVED$$2, SUB_DELIMS$$)) + "*"), HOST$ = subexp(IP_LITERAL$ + "|" + IPV4ADDRESS$ + "(?!" + REG_NAME$ + ")|" + REG_NAME$), PORT$ = subexp(DIGIT$$ + "*"), AUTHORITY$ = subexp(subexp(USERINFO$ + "@") + "?" + HOST$ + subexp("\\:" + PORT$) + "?"), PCHAR$ = subexp(PCT_ENCODED$2 + "|" + merge3(UNRESERVED$$2, SUB_DELIMS$$, "[\\:\\@]")), SEGMENT$ = subexp(PCHAR$ + "*"), SEGMENT_NZ$ = subexp(PCHAR$ + "+"), SEGMENT_NZ_NC$ = subexp(subexp(PCT_ENCODED$2 + "|" + merge3(UNRESERVED$$2, SUB_DELIMS$$, "[\\@]")) + "+"), PATH_ABEMPTY$ = subexp(subexp("\\/" + SEGMENT$) + "*"), PATH_ABSOLUTE$ = subexp("\\/" + subexp(SEGMENT_NZ$ + PATH_ABEMPTY$) + "?"), PATH_NOSCHEME$ = subexp(SEGMENT_NZ_NC$ + PATH_ABEMPTY$), PATH_ROOTLESS$ = subexp(SEGMENT_NZ$ + PATH_ABEMPTY$), PATH_EMPTY$ = "(?!" + PCHAR$ + ")", PATH$ = subexp(PATH_ABEMPTY$ + "|" + PATH_ABSOLUTE$ + "|" + PATH_NOSCHEME$ + "|" + PATH_ROOTLESS$ + "|" + PATH_EMPTY$), QUERY$ = subexp(subexp(PCHAR$ + "|" + merge3("[\\/\\?]", IPRIVATE$$)) + "*"), FRAGMENT$ = subexp(subexp(PCHAR$ + "|[\\/\\?]") + "*"), HIER_PART$ = subexp(subexp("\\/\\/" + AUTHORITY$ + PATH_ABEMPTY$) + "|" + PATH_ABSOLUTE$ + "|" + PATH_ROOTLESS$ + "|" + PATH_EMPTY$), URI$ = subexp(SCHEME$ + "\\:" + HIER_PART$ + subexp("\\?" + QUERY$) + "?" + subexp("\\#" + FRAGMENT$) + "?"), RELATIVE_PART$ = subexp(subexp("\\/\\/" + AUTHORITY$ + PATH_ABEMPTY$) + "|" + PATH_ABSOLUTE$ + "|" + PATH_NOSCHEME$ + "|" + PATH_EMPTY$), RELATIVE$ = subexp(RELATIVE_PART$ + subexp("\\?" + QUERY$) + "?" + subexp("\\#" + FRAGMENT$) + "?"), URI_REFERENCE$ = subexp(URI$ + "|" + RELATIVE$), ABSOLUTE_URI$ = subexp(SCHEME$ + "\\:" + HIER_PART$ + subexp("\\?" + QUERY$) + "?"), GENERIC_REF$ = "^(" + SCHEME$ + ")\\:" + subexp(subexp("\\/\\/(" + subexp("(" + USERINFO$ + ")@") + "?(" + HOST$ + ")" + subexp("\\:(" + PORT$ + ")") + "?)") + "?(" + PATH_ABEMPTY$ + "|" + PATH_ABSOLUTE$ + "|" + PATH_ROOTLESS$ + "|" + PATH_EMPTY$ + ")") + subexp("\\?(" + QUERY$ + ")") + "?" + subexp("\\#(" + FRAGMENT$ + ")") + "?$", RELATIVE_REF$ = "^(){0}" + subexp(subexp("\\/\\/(" + subexp("(" + USERINFO$ + ")@") + "?(" + HOST$ + ")" + subexp("\\:(" + PORT$ + ")") + "?)") + "?(" + PATH_ABEMPTY$ + "|" + PATH_ABSOLUTE$ + "|" + PATH_NOSCHEME$ + "|" + PATH_EMPTY$ + ")") + subexp("\\?(" + QUERY$ + ")") + "?" + subexp("\\#(" + FRAGMENT$ + ")") + "?$", ABSOLUTE_REF$ = "^(" + SCHEME$ + ")\\:" + subexp(subexp("\\/\\/(" + subexp("(" + USERINFO$ + ")@") + "?(" + HOST$ + ")" + subexp("\\:(" + PORT$ + ")") + "?)") + "?(" + PATH_ABEMPTY$ + "|" + PATH_ABSOLUTE$ + "|" + PATH_ROOTLESS$ + "|" + PATH_EMPTY$ + ")") + subexp("\\?(" + QUERY$ + ")") + "?$", SAMEDOC_REF$ = "^" + subexp("\\#(" + FRAGMENT$ + ")") + "?$", AUTHORITY_REF$ = "^" + subexp("(" + USERINFO$ + ")@") + "?(" + HOST$ + ")" + subexp("\\:(" + PORT$ + ")") + "?$";
return {
NOT_SCHEME: new RegExp(merge3("[^]", ALPHA$$, DIGIT$$, "[\\+\\-\\.]"), "g"),
NOT_USERINFO: new RegExp(merge3("[^\\%\\:]", UNRESERVED$$2, SUB_DELIMS$$), "g"),
NOT_HOST: new RegExp(merge3("[^\\%\\[\\]\\:]", UNRESERVED$$2, SUB_DELIMS$$), "g"),
NOT_PATH: new RegExp(merge3("[^\\%\\/\\:\\@]", UNRESERVED$$2, SUB_DELIMS$$), "g"),
NOT_PATH_NOSCHEME: new RegExp(merge3("[^\\%\\/\\@]", UNRESERVED$$2, SUB_DELIMS$$), "g"),
NOT_QUERY: new RegExp(merge3("[^\\%]", UNRESERVED$$2, SUB_DELIMS$$, "[\\:\\@\\/\\?]", IPRIVATE$$), "g"),
NOT_FRAGMENT: new RegExp(merge3("[^\\%]", UNRESERVED$$2, SUB_DELIMS$$, "[\\:\\@\\/\\?]"), "g"),
ESCAPE: new RegExp(merge3("[^]", UNRESERVED$$2, SUB_DELIMS$$), "g"),
UNRESERVED: new RegExp(UNRESERVED$$2, "g"),
OTHER_CHARS: new RegExp(merge3("[^\\%]", UNRESERVED$$2, RESERVED$$), "g"),
PCT_ENCODED: new RegExp(PCT_ENCODED$2, "g"),
IPV4ADDRESS: new RegExp("^(" + IPV4ADDRESS$ + ")$"),
IPV6ADDRESS: new RegExp("^\\[?(" + IPV6ADDRESS$ + ")" + subexp(subexp("\\%25|\\%(?!" + HEXDIG$$2 + "{2})") + "(" + ZONEID$ + ")") + "?\\]?$")
//RFC 6874, with relaxed parsing rules
};
}
var URI_PROTOCOL = buildExps(false);
var IRI_PROTOCOL = buildExps(true);
var slicedToArray = /* @__PURE__ */ (function() {
function sliceIterator(arr, i) {
var _arr = [];
var _n = true;
var _d = false;
var _e = void 0;
try {
for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {
_arr.push(_s.value);
if (i && _arr.length === i) break;
}
} catch (err2) {
_d = true;
_e = err2;
} finally {
try {
if (!_n && _i["return"]) _i["return"]();
} finally {
if (_d) throw _e;
}
}
return _arr;
}
return function(arr, i) {
if (Array.isArray(arr)) {
return arr;
} else if (Symbol.iterator in Object(arr)) {
return sliceIterator(arr, i);
} else {
throw new TypeError("Invalid attempt to destructure non-iterable instance");
}
};
})();
var toConsumableArray = function(arr) {
if (Array.isArray(arr)) {
for (var i = 0, arr2 = Array(arr.length); i < arr.length; i++) arr2[i] = arr[i];
return arr2;
} else {
return Array.from(arr);
}
};
var maxInt = 2147483647;
var base = 36;
var tMin = 1;
var tMax = 26;
var skew = 38;
var damp = 700;
var initialBias = 72;
var initialN = 128;
var delimiter = "-";
var regexPunycode = /^xn--/;
var regexNonASCII = /[^\0-\x7E]/;
var regexSeparators = /[\x2E\u3002\uFF0E\uFF61]/g;
var errors = {
"overflow": "Overflow: input needs wider integers to process",
"not-basic": "Illegal input >= 0x80 (not a basic code point)",
"invalid-input": "Invalid input"
};
var baseMinusTMin = base - tMin;
var floor = Math.floor;
var stringFromCharCode = String.fromCharCode;
function error$1(type) {
throw new RangeError(errors[type]);
}
function map2(array, fn) {
var result = [];
var length = array.length;
while (length--) {
result[length] = fn(array[length]);
}
return result;
}
function mapDomain(string, fn) {
var parts = string.split("@");
var result = "";
if (parts.length > 1) {
result = parts[0] + "@";
string = parts[1];
}
string = string.replace(regexSeparators, ".");
var labels = string.split(".");
var encoded = map2(labels, fn).join(".");
return result + encoded;
}
function ucs2decode(string) {
var output = [];
var counter = 0;
var length = string.length;
while (counter < length) {
var value = string.charCodeAt(counter++);
if (value >= 55296 && value <= 56319 && counter < length) {
var extra = string.charCodeAt(counter++);
if ((extra & 64512) == 56320) {
output.push(((value & 1023) << 10) + (extra & 1023) + 65536);
} else {
output.push(value);
counter--;
}
} else {
output.push(value);
}
}
return output;
}
var ucs2encode = function ucs2encode2(array) {
return String.fromCodePoint.apply(String, toConsumableArray(array));
};
var basicToDigit = function basicToDigit2(codePoint) {
if (codePoint - 48 < 10) {
return codePoint - 22;
}
if (codePoint - 65 < 26) {
return codePoint - 65;
}
if (codePoint - 97 < 26) {
return codePoint - 97;
}
return base;
};
var digitToBasic = function digitToBasic2(digit, flag) {
return digit + 22 + 75 * (digit < 26) - ((flag != 0) << 5);
};
var adapt = function adapt2(delta, numPoints, firstTime) {
var k = 0;
delta = firstTime ? floor(delta / damp) : delta >> 1;
delta += floor(delta / numPoints);
for (
;
/* no initialization */
delta > baseMinusTMin * tMax >> 1;
k += base
) {
delta = floor(delta / baseMinusTMin);
}
return floor(k + (baseMinusTMin + 1) * delta / (delta + skew));
};
var decode = function decode2(input) {
var output = [];
var inputLength = input.length;
var i = 0;
var n = initialN;
var bias = initialBias;
var basic = input.lastIndexOf(delimiter);
if (basic < 0) {
basic = 0;
}
for (var j = 0; j < basic; ++j) {
if (input.charCodeAt(j) >= 128) {
error$1("not-basic");
}
output.push(input.charCodeAt(j));
}
for (var index2 = basic > 0 ? basic + 1 : 0; index2 < inputLength; ) {
var oldi = i;
for (
var w = 1, k = base;
;
/* no condition */
k += base
) {
if (index2 >= inputLength) {
error$1("invalid-input");
}
var digit = basicToDigit(input.charCodeAt(index2++));
if (digit >= base || digit > floor((maxInt - i) / w)) {
error$1("overflow");
}
i += digit * w;
var t = k <= bias ? tMin : k >= bias + tMax ? tMax : k - bias;
if (digit < t) {
break;
}
var baseMinusT = base - t;
if (w > floor(maxInt / baseMinusT)) {
error$1("overflow");
}
w *= baseMinusT;
}
var out = output.length + 1;
bias = adapt(i - oldi, out, oldi == 0);
if (floor(i / out) > maxInt - n) {
error$1("overflow");
}
n += floor(i / out);
i %= out;
output.splice(i++, 0, n);
}
return String.fromCodePoint.apply(String, output);
};
var encode3 = function encode4(input) {
var output = [];
input = ucs2decode(input);
var inputLength = input.length;
var n = initialN;
var delta = 0;
var bias = initialBias;
var _iteratorNormalCompletion = true;
var _didIteratorError = false;
var _iteratorError = void 0;
try {
for (var _iterator = input[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
var _currentValue2 = _step.value;
if (_currentValue2 < 128) {
output.push(stringFromCharCode(_currentValue2));
}
}
} catch (err2) {
_didIteratorError = true;
_iteratorError = err2;
} finally {
try {
if (!_iteratorNormalCompletion && _iterator.return) {
_iterator.return();
}
} finally {
if (_didIteratorError) {
throw _iteratorError;
}
}
}
var basicLength = output.length;
var handledCPCount = basicLength;
if (basicLength) {
output.push(delimiter);
}
while (handledCPCount < inputLength) {
var m = maxInt;
var _iteratorNormalCompletion2 = true;
var _didIteratorError2 = false;
var _iteratorError2 = void 0;
try {
for (var _iterator2 = input[Symbol.iterator](), _step2; !(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done); _iteratorNormalCompletion2 = true) {
var currentValue = _step2.value;
if (currentValue >= n && currentValue < m) {
m = currentValue;
}
}
} catch (err2) {
_didIteratorError2 = true;
_iteratorError2 = err2;
} finally {
try {
if (!_iteratorNormalCompletion2 && _iterator2.return) {
_iterator2.return();
}
} finally {
if (_didIteratorError2) {
throw _iteratorError2;
}
}
}
var handledCPCountPlusOne = handledCPCount + 1;
if (m - n > floor((maxInt - delta) / handledCPCountPlusOne)) {
error$1("overflow");
}
delta += (m - n) * handledCPCountPlusOne;
n = m;
var _iteratorNormalCompletion3 = true;
var _didIteratorError3 = false;
var _iteratorError3 = void 0;
try {
for (var _iterator3 = input[Symbol.iterator](), _step3; !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done); _iteratorNormalCompletion3 = true) {
var _currentValue = _step3.value;
if (_currentValue < n && ++delta > maxInt) {
error$1("overflow");
}
if (_currentValue == n) {
var q = delta;
for (
var k = base;
;
/* no condition */
k += base
) {
var t = k <= bias ? tMin : k >= bias + tMax ? tMax : k - bias;
if (q < t) {
break;
}
var qMinusT = q - t;
var baseMinusT = base - t;
output.push(stringFromCharCode(digitToBasic(t + qMinusT % baseMinusT, 0)));
q = floor(qMinusT / baseMinusT);
}
output.push(stringFromCharCode(digitToBasic(q, 0)));
bias = adapt(delta, handledCPCountPlusOne, handledCPCount == basicLength);
delta = 0;
++handledCPCount;
}
}
} catch (err2) {
_didIteratorError3 = true;
_iteratorError3 = err2;
} finally {
try {
if (!_iteratorNormalCompletion3 && _iterator3.return) {
_iterator3.return();
}
} finally {
if (_didIteratorError3) {
throw _iteratorError3;
}
}
}
++delta;
++n;
}
return output.join("");
};
var toUnicode = function toUnicode2(input) {
return mapDomain(input, function(string) {
return regexPunycode.test(string) ? decode(string.slice(4).toLowerCase()) : string;
});
};
var toASCII = function toASCII2(input) {
return mapDomain(input, function(string) {
return regexNonASCII.test(string) ? "xn--" + encode3(string) : string;
});
};
var punycode = {
/**
* A string representing the current Punycode.js version number.
* @memberOf punycode
* @type String
*/
"version": "2.1.0",
/**
* An object of methods to convert from JavaScript's internal character
* representation (UCS-2) to Unicode code points, and back.
* @see <https://mathiasbynens.be/notes/javascript-encoding>
* @memberOf punycode
* @type Object
*/
"ucs2": {
"decode": ucs2decode,
"encode": ucs2encode
},
"decode": decode,
"encode": encode3,
"toASCII": toASCII,
"toUnicode": toUnicode
};
var SCHEMES = {};
function pctEncChar(chr) {
var c = chr.charCodeAt(0);
var e = void 0;
if (c < 16) e = "%0" + c.toString(16).toUpperCase();
else if (c < 128) e = "%" + c.toString(16).toUpperCase();
else if (c < 2048) e = "%" + (c >> 6 | 192).toString(16).toUpperCase() + "%" + (c & 63 | 128).toString(16).toUpperCase();
else e = "%" + (c >> 12 | 224).toString(16).toUpperCase() + "%" + (c >> 6 & 63 | 128).toString(16).toUpperCase() + "%" + (c & 63 | 128).toString(16).toUpperCase();
return e;
}
function pctDecChars(str) {
var newStr = "";
var i = 0;
var il = str.length;
while (i < il) {
var c = parseInt(str.substr(i + 1, 2), 16);
if (c < 128) {
newStr += String.fromCharCode(c);
i += 3;
} else if (c >= 194 && c < 224) {
if (il - i >= 6) {
var c2 = parseInt(str.substr(i + 4, 2), 16);
newStr += String.fromCharCode((c & 31) << 6 | c2 & 63);
} else {
newStr += str.substr(i, 6);
}
i += 6;
} else if (c >= 224) {
if (il - i >= 9) {
var _c = parseInt(str.substr(i + 4, 2), 16);
var c3 = parseInt(str.substr(i + 7, 2), 16);
newStr += String.fromCharCode((c & 15) << 12 | (_c & 63) << 6 | c3 & 63);
} else {
newStr += str.substr(i, 9);
}
i += 9;
} else {
newStr += str.substr(i, 3);
i += 3;
}
}
return newStr;
}
function _normalizeComponentEncoding(components, protocol) {
function decodeUnreserved2(str) {
var decStr = pctDecChars(str);
return !decStr.match(protocol.UNRESERVED) ? str : decStr;
}
if (components.scheme) components.scheme = String(components.scheme).replace(protocol.PCT_ENCODED, decodeUnreserved2).toLowerCase().replace(protocol.NOT_SCHEME, "");
if (components.userinfo !== void 0) components.userinfo = String(components.userinfo).replace(protocol.PCT_ENCODED, decodeUnreserved2).replace(protocol.NOT_USERINFO, pctEncChar).replace(protocol.PCT_ENCODED, toUpperCase);
if (components.host !== void 0) components.host = String(components.host).replace(protocol.PCT_ENCODED, decodeUnreserved2).toLowerCase().replace(protocol.NOT_HOST, pctEncChar).replace(protocol.PCT_ENCODED, toUpperCase);
if (components.path !== void 0) components.path = String(components.path).replace(protocol.PCT_ENCODED, decodeUnreserved2).replace(components.scheme ? protocol.NOT_PATH : protocol.NOT_PATH_NOSCHEME, pctEncChar).replace(protocol.PCT_ENCODED, toUpperCase);
if (components.query !== void 0) components.query = String(components.query).replace(protocol.PCT_ENCODED, decodeUnreserved2).replace(protocol.NOT_QUERY, pctEncChar).replace(protocol.PCT_ENCODED, toUpperCase);
if (components.fragment !== void 0) components.fragment = String(components.fragment).replace(protocol.PCT_ENCODED, decodeUnreserved2).replace(protocol.NOT_FRAGMENT, pctEncChar).replace(protocol.PCT_ENCODED, toUpperCase);
return components;
}
function _stripLeadingZeros(str) {
return str.replace(/^0*(.*)/, "$1") || "0";
}
function _normalizeIPv4(host, protocol) {
var matches = host.match(protocol.IPV4ADDRESS) || [];
var _matches = slicedToArray(matches, 2), address = _matches[1];
if (address) {
return address.split(".").map(_stripLeadingZeros).join(".");
} else {
return host;
}
}
function _normalizeIPv6(host, protocol) {
var matches = host.match(protocol.IPV6ADDRESS) || [];
var _matches2 = slicedToArray(matches, 3), address = _matches2[1], zone = _matches2[2];
if (address) {
var _address$toLowerCase$ = address.toLowerCase().split("::").reverse(), _address$toLowerCase$2 = slicedToArray(_address$toLowerCase$, 2), last2 = _address$toLowerCase$2[0], first2 = _address$toLowerCase$2[1];
var firstFields = first2 ? first2.split(":").map(_stripLeadingZeros) : [];
var lastFields = last2.split(":").map(_stripLeadingZeros);
var isLastFieldIPv4Address = protocol.IPV4ADDRESS.test(lastFields[lastFields.length - 1]);
var fieldCount = isLastFieldIPv4Address ? 7 : 8;
var lastFieldsStart = lastFields.length - fieldCount;
var fields = Array(fieldCount);
for (var x = 0; x < fieldCount; ++x) {
fields[x] = firstFields[x] || lastFields[lastFieldsStart + x] || "";
}
if (isLastFieldIPv4Address) {
fields[fieldCount - 1] = _normalizeIPv4(fields[fieldCount - 1], protocol);
}
var allZeroFields = fields.reduce(function(acc, field, index2) {
if (!field || field === "0") {
var lastLongest = acc[acc.length - 1];
if (lastLongest && lastLongest.index + lastLongest.length === index2) {
lastLongest.length++;
} else {
acc.push({ index: index2, length: 1 });
}
}
return acc;
}, []);
var longestZeroFields = allZeroFields.sort(function(a, b) {
return b.length - a.length;
})[0];
var newHost = void 0;
if (longestZeroFields && longestZeroFields.length > 1) {
var newFirst = fields.slice(0, longestZeroFields.index);
var newLast = fields.slice(longestZeroFields.index + longestZeroFields.length);
newHost = newFirst.join(":") + "::" + newLast.join(":");
} else {
newHost = fields.join(":");
}
if (zone) {
newHost += "%" + zone;
}
return newHost;
} else {
return host;
}
}
var URI_PARSE = /^(?:([^:\/?#]+):)?(?:\/\/((?:([^\/?#@]*)@)?(\[[^\/?#\]]+\]|[^\/?#:]*)(?:\:(\d*))?))?([^?#]*)(?:\?([^#]*))?(?:#((?:.|\n|\r)*))?/i;
var NO_MATCH_IS_UNDEFINED = "".match(/(){0}/)[1] === void 0;
function parse8(uriString) {
var options = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {};
var components = {};
var protocol = options.iri !== false ? IRI_PROTOCOL : URI_PROTOCOL;
if (options.reference === "suffix") uriString = (options.scheme ? options.scheme + ":" : "") + "//" + uriString;
var matches = uriString.match(URI_PARSE);
if (matches) {
if (NO_MATCH_IS_UNDEFINED) {
components.scheme = matches[1];
components.userinfo = matches[3];
components.host = matches[4];
components.port = parseInt(matches[5], 10);
components.path = matches[6] || "";
components.query = matches[7];
components.fragment = matches[8];
if (isNaN(components.port)) {
components.port = matches[5];
}
} else {
components.scheme = matches[1] || void 0;
components.userinfo = uriString.indexOf("@") !== -1 ? matches[3] : void 0;
components.host = uriString.indexOf("//") !== -1 ? matches[4] : void 0;
components.port = parseInt(matches[5], 10);
components.path = matches[6] || "";
components.query = uriString.indexOf("?") !== -1 ? matches[7] : void 0;
components.fragment = uriString.indexOf("#") !== -1 ? matches[8] : void 0;
if (isNaN(components.port)) {
components.port = uriString.match(/\/\/(?:.|\n)*\:(?:\/|\?|\#|$)/) ? matches[4] : void 0;
}
}
if (components.host) {
components.host = _normalizeIPv6(_normalizeIPv4(components.host, protocol), protocol);
}
if (components.scheme === void 0 && components.userinfo === void 0 && components.host === void 0 && components.port === void 0 && !components.path && components.query === void 0) {
components.reference = "same-document";
} else if (components.scheme === void 0) {
components.reference = "relative";
} else if (components.fragment === void 0) {
components.reference = "absolute";
} else {
components.reference = "uri";
}
if (options.reference && options.reference !== "suffix" && options.reference !== components.reference) {
components.error = components.error || "URI is not a " + options.reference + " reference.";
}
var schemeHandler = SCHEMES[(options.scheme || components.scheme || "").toLowerCase()];
if (!options.unicodeSupport && (!schemeHandler || !schemeHandler.unicodeSupport)) {
if (components.host && (options.domainHost || schemeHandler && schemeHandler.domainHost)) {
try {
components.host = punycode.toASCII(components.host.replace(protocol.PCT_ENCODED, pctDecChars).toLowerCase());
} catch (e) {
components.error = components.error || "Host's domain name can not be converted to ASCII via punycode: " + e;
}
}
_normalizeComponentEncoding(components, URI_PROTOCOL);
} else {
_normalizeComponentEncoding(components, protocol);
}
if (schemeHandler && schemeHandler.parse) {
schemeHandler.parse(components, options);
}
} else {
components.error = components.error || "URI can not be parsed.";
}
return components;
}
function _recomposeAuthority(components, options) {
var protocol = options.iri !== false ? IRI_PROTOCOL : URI_PROTOCOL;
var uriTokens = [];
if (components.userinfo !== void 0) {
uriTokens.push(components.userinfo);
uriTokens.push("@");
}
if (components.host !== void 0) {
uriTokens.push(_normalizeIPv6(_normalizeIPv4(String(components.host), protocol), protocol).replace(protocol.IPV6ADDRESS, function(_, $1, $2) {
return "[" + $1 + ($2 ? "%25" + $2 : "") + "]";
}));
}
if (typeof components.port === "number" || typeof components.port === "string") {
uriTokens.push(":");
uriTokens.push(String(components.port));
}
return uriTokens.length ? uriTokens.join("") : void 0;
}
var RDS1 = /^\.\.?\//;
var RDS2 = /^\/\.(\/|$)/;
var RDS3 = /^\/\.\.(\/|$)/;
var RDS5 = /^\/?(?:.|\n)*?(?=\/|$)/;
function removeDotSegments(input) {
var output = [];
while (input.length) {
if (input.match(RDS1)) {
input = input.replace(RDS1, "");
} else if (input.match(RDS2)) {
input = input.replace(RDS2, "/");
} else if (input.match(RDS3)) {
input = input.replace(RDS3, "/");
output.pop();
} else if (input === "." || input === "..") {
input = "";
} else {
var im = input.match(RDS5);
if (im) {
var s = im[0];
input = input.slice(s.length);
output.push(s);
} else {
throw new Error("Unexpected dot segment condition");
}
}
}
return output.join("");
}
function serialize3(components) {
var options = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {};
var protocol = options.iri ? IRI_PROTOCOL : URI_PROTOCOL;
var uriTokens = [];
var schemeHandler = SCHEMES[(options.scheme || components.scheme || "").toLowerCase()];
if (schemeHandler && schemeHandler.serialize) schemeHandler.serialize(components, options);
if (components.host) {
if (protocol.IPV6ADDRESS.test(components.host)) {
} else if (options.domainHost || schemeHandler && schemeHandler.domainHost) {
try {
components.host = !options.iri ? punycode.toASCII(components.host.replace(protocol.PCT_ENCODED, pctDecChars).toLowerCase()) : punycode.toUnicode(components.host);
} catch (e) {
components.error = components.error || "Host's domain name can not be converted to " + (!options.iri ? "ASCII" : "Unicode") + " via punycode: " + e;
}
}
}
_normalizeComponentEncoding(components, protocol);
if (options.reference !== "suffix" && components.scheme) {
uriTokens.push(components.scheme);
uriTokens.push(":");
}
var authority = _recomposeAuthority(components, options);
if (authority !== void 0) {
if (options.reference !== "suffix") {
uriTokens.push("//");
}
uriTokens.push(authority);
if (components.path && components.path.charAt(0) !== "/") {
uriTokens.push("/");
}
}
if (components.path !== void 0) {
var s = components.path;
if (!options.absolutePath && (!schemeHandler || !schemeHandler.absolutePath)) {
s = removeDotSegments(s);
}
if (authority === void 0) {
s = s.replace(/^\/\//, "/%2F");
}
uriTokens.push(s);
}
if (components.query !== void 0) {
uriTokens.push("?");
uriTokens.push(components.query);
}
if (components.fragment !== void 0) {
uriTokens.push("#");
uriTokens.push(components.fragment);
}
return uriTokens.join("");
}
function resolveComponents(base2, relative) {
var options = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : {};
var skipNormalization = arguments[3];
var target = {};
if (!skipNormalization) {
base2 = parse8(serialize3(base2, options), options);
relative = parse8(serialize3(relative, options), options);
}
options = options || {};
if (!options.tolerant && relative.scheme) {
target.scheme = relative.scheme;
target.userinfo = relative.userinfo;
target.host = relative.host;
target.port = relative.port;
target.path = removeDotSegments(relative.path || "");
target.query = relative.query;
} else {
if (relative.userinfo !== void 0 || relative.host !== void 0 || relative.port !== void 0) {
target.userinfo = relative.userinfo;
target.host = relative.host;
target.port = relative.port;
target.path = removeDotSegments(relative.path || "");
target.query = relative.query;
} else {
if (!relative.path) {
target.path = base2.path;
if (relative.query !== void 0) {
target.query = relative.query;
} else {
target.query = base2.query;
}
} else {
if (relative.path.charAt(0) === "/") {
target.path = removeDotSegments(relative.path);
} else {
if ((base2.userinfo !== void 0 || base2.host !== void 0 || base2.port !== void 0) && !base2.path) {
target.path = "/" + relative.path;
} else if (!base2.path) {
target.path = relative.path;
} else {
target.path = base2.path.slice(0, base2.path.lastIndexOf("/") + 1) + relative.path;
}
target.path = removeDotSegments(target.path);
}
target.query = relative.query;
}
target.userinfo = base2.userinfo;
target.host = base2.host;
target.port = base2.port;
}
target.scheme = base2.scheme;
}
target.fragment = relative.fragment;
return target;
}
function resolve(baseURI, relativeURI, options) {
var schemelessOptions = assign({ scheme: "null" }, options);
return serialize3(resolveComponents(parse8(baseURI, schemelessOptions), parse8(relativeURI, schemelessOptions), schemelessOptions, true), schemelessOptions);
}
function normalize(uri, options) {
if (typeof uri === "string") {
uri = serialize3(parse8(uri, options), options);
} else if (typeOf(uri) === "object") {
uri = parse8(serialize3(uri, options), options);
}
return uri;
}
function equal(uriA, uriB, options) {
if (typeof uriA === "string") {
uriA = serialize3(parse8(uriA, options), options);
} else if (typeOf(uriA) === "object") {
uriA = serialize3(uriA, options);
}
if (typeof uriB === "string") {
uriB = serialize3(parse8(uriB, options), options);
} else if (typeOf(uriB) === "object") {
uriB = serialize3(uriB, options);
}
return uriA === uriB;
}
function escapeComponent(str, options) {
return str && str.toString().replace(!options || !options.iri ? URI_PROTOCOL.ESCAPE : IRI_PROTOCOL.ESCAPE, pctEncChar);
}
function unescapeComponent(str, options) {
return str && str.toString().replace(!options || !options.iri ? URI_PROTOCOL.PCT_ENCODED : IRI_PROTOCOL.PCT_ENCODED, pctDecChars);
}
var handler = {
scheme: "http",
domainHost: true,
parse: function parse9(components, options) {
if (!components.host) {
components.error = components.error || "HTTP URIs must have a host.";
}
return components;
},
serialize: function serialize4(components, options) {
var secure = String(components.scheme).toLowerCase() === "https";
if (components.port === (secure ? 443 : 80) || components.port === "") {
components.port = void 0;
}
if (!components.path) {
components.path = "/";
}
return components;
}
};
var handler$1 = {
scheme: "https",
domainHost: handler.domainHost,
parse: handler.parse,
serialize: handler.serialize
};
function isSecure(wsComponents) {
return typeof wsComponents.secure === "boolean" ? wsComponents.secure : String(wsComponents.scheme).toLowerCase() === "wss";
}
var handler$2 = {
scheme: "ws",
domainHost: true,
parse: function parse9(components, options) {
var wsComponents = components;
wsComponents.secure = isSecure(wsComponents);
wsComponents.resourceName = (wsComponents.path || "/") + (wsComponents.query ? "?" + wsComponents.query : "");
wsComponents.path = void 0;
wsComponents.query = void 0;
return wsComponents;
},
serialize: function serialize4(wsComponents, options) {
if (wsComponents.port === (isSecure(wsComponents) ? 443 : 80) || wsComponents.port === "") {
wsComponents.port = void 0;
}
if (typeof wsComponents.secure === "boolean") {
wsComponents.scheme = wsComponents.secure ? "wss" : "ws";
wsComponents.secure = void 0;
}
if (wsComponents.resourceName) {
var _wsComponents$resourc = wsComponents.resourceName.split("?"), _wsComponents$resourc2 = slicedToArray(_wsComponents$resourc, 2), path = _wsComponents$resourc2[0], query = _wsComponents$resourc2[1];
wsComponents.path = path && path !== "/" ? path : void 0;
wsComponents.query = query;
wsComponents.resourceName = void 0;
}
wsComponents.fragment = void 0;
return wsComponents;
}
};
var handler$3 = {
scheme: "wss",
domainHost: handler$2.domainHost,
parse: handler$2.parse,
serialize: handler$2.serialize
};
var O = {};
var isIRI = true;
var UNRESERVED$$ = "[A-Za-z0-9\\-\\.\\_\\~" + (isIRI ? "\\xA0-\\u200D\\u2010-\\u2029\\u202F-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF" : "") + "]";
var HEXDIG$$ = "[0-9A-Fa-f]";
var PCT_ENCODED$ = subexp(subexp("%[EFef]" + HEXDIG$$ + "%" + HEXDIG$$ + HEXDIG$$ + "%" + HEXDIG$$ + HEXDIG$$) + "|" + subexp("%[89A-Fa-f]" + HEXDIG$$ + "%" + HEXDIG$$ + HEXDIG$$) + "|" + subexp("%" + HEXDIG$$ + HEXDIG$$));
var ATEXT$$ = "[A-Za-z0-9\\!\\$\\%\\'\\*\\+\\-\\^\\_\\`\\{\\|\\}\\~]";
var QTEXT$$ = "[\\!\\$\\%\\'\\(\\)\\*\\+\\,\\-\\.0-9\\<\\>A-Z\\x5E-\\x7E]";
var VCHAR$$ = merge3(QTEXT$$, '[\\"\\\\]');
var SOME_DELIMS$$ = "[\\!\\$\\'\\(\\)\\*\\+\\,\\;\\:\\@]";
var UNRESERVED = new RegExp(UNRESERVED$$, "g");
var PCT_ENCODED = new RegExp(PCT_ENCODED$, "g");
var NOT_LOCAL_PART = new RegExp(merge3("[^]", ATEXT$$, "[\\.]", '[\\"]', VCHAR$$), "g");
var NOT_HFNAME = new RegExp(merge3("[^]", UNRESERVED$$, SOME_DELIMS$$), "g");
var NOT_HFVALUE = NOT_HFNAME;
function decodeUnreserved(str) {
var decStr = pctDecChars(str);
return !decStr.match(UNRESERVED) ? str : decStr;
}
var handler$4 = {
scheme: "mailto",
parse: function parse$$1(components, options) {
var mailtoComponents = components;
var to = mailtoComponents.to = mailtoComponents.path ? mailtoComponents.path.split(",") : [];
mailtoComponents.path = void 0;
if (mailtoComponents.query) {
var unknownHeaders = false;
var headers = {};
var hfields = mailtoComponents.query.split("&");
for (var x = 0, xl = hfields.length; x < xl; ++x) {
var hfield = hfields[x].split("=");
switch (hfield[0]) {
case "to":
var toAddrs = hfield[1].split(",");
for (var _x = 0, _xl = toAddrs.length; _x < _xl; ++_x) {
to.push(toAddrs[_x]);
}
break;
case "subject":
mailtoComponents.subject = unescapeComponent(hfield[1], options);
break;
case "body":
mailtoComponents.body = unescapeComponent(hfield[1], options);
break;
default:
unknownHeaders = true;
headers[unescapeComponent(hfield[0], options)] = unescapeComponent(hfield[1], options);
break;
}
}
if (unknownHeaders) mailtoComponents.headers = headers;
}
mailtoComponents.query = void 0;
for (var _x2 = 0, _xl2 = to.length; _x2 < _xl2; ++_x2) {
var addr = to[_x2].split("@");
addr[0] = unescapeComponent(addr[0]);
if (!options.unicodeSupport) {
try {
addr[1] = punycode.toASCII(unescapeComponent(addr[1], options).toLowerCase());
} catch (e) {
mailtoComponents.error = mailtoComponents.error || "Email address's domain name can not be converted to ASCII via punycode: " + e;
}
} else {
addr[1] = unescapeComponent(addr[1], options).toLowerCase();
}
to[_x2] = addr.join("@");
}
return mailtoComponents;
},
serialize: function serialize$$1(mailtoComponents, options) {
var components = mailtoComponents;
var to = toArray3(mailtoComponents.to);
if (to) {
for (var x = 0, xl = to.length; x < xl; ++x) {
var toAddr = String(to[x]);
var atIdx = toAddr.lastIndexOf("@");
var localPart = toAddr.slice(0, atIdx).replace(PCT_ENCODED, decodeUnreserved).replace(PCT_ENCODED, toUpperCase).replace(NOT_LOCAL_PART, pctEncChar);
var domain = toAddr.slice(atIdx + 1);
try {
domain = !options.iri ? punycode.toASCII(unescapeComponent(domain, options).toLowerCase()) : punycode.toUnicode(domain);
} catch (e) {
components.error = components.error || "Email address's domain name can not be converted to " + (!options.iri ? "ASCII" : "Unicode") + " via punycode: " + e;
}
to[x] = localPart + "@" + domain;
}
components.path = to.join(",");
}
var headers = mailtoComponents.headers = mailtoComponents.headers || {};
if (mailtoComponents.subject) headers["subject"] = mailtoComponents.subject;
if (mailtoComponents.body) headers["body"] = mailtoComponents.body;
var fields = [];
for (var name in headers) {
if (headers[name] !== O[name]) {
fields.push(name.replace(PCT_ENCODED, decodeUnreserved).replace(PCT_ENCODED, toUpperCase).replace(NOT_HFNAME, pctEncChar) + "=" + headers[name].replace(PCT_ENCODED, decodeUnreserved).replace(PCT_ENCODED, toUpperCase).replace(NOT_HFVALUE, pctEncChar));
}
}
if (fields.length) {
components.query = fields.join("&");
}
return components;
}
};
var URN_PARSE = /^([^\:]+)\:(.*)/;
var handler$5 = {
scheme: "urn",
parse: function parse$$1(components, options) {
var matches = components.path && components.path.match(URN_PARSE);
var urnComponents = components;
if (matches) {
var scheme = options.scheme || urnComponents.scheme || "urn";
var nid = matches[1].toLowerCase();
var nss = matches[2];
var urnScheme = scheme + ":" + (options.nid || nid);
var schemeHandler = SCHEMES[urnScheme];
urnComponents.nid = nid;
urnComponents.nss = nss;
urnComponents.path = void 0;
if (schemeHandler) {
urnComponents = schemeHandler.parse(urnComponents, options);
}
} else {
urnComponents.error = urnComponents.error || "URN can not be parsed.";
}
return urnComponents;
},
serialize: function serialize$$1(urnComponents, options) {
var scheme = options.scheme || urnComponents.scheme || "urn";
var nid = urnComponents.nid;
var urnScheme = scheme + ":" + (options.nid || nid);
var schemeHandler = SCHEMES[urnScheme];
if (schemeHandler) {
urnComponents = schemeHandler.serialize(urnComponents, options);
}
var uriComponents = urnComponents;
var nss = urnComponents.nss;
uriComponents.path = (nid || options.nid) + ":" + nss;
return uriComponents;
}
};
var UUID = /^[0-9A-Fa-f]{8}(?:\-[0-9A-Fa-f]{4}){3}\-[0-9A-Fa-f]{12}$/;
var handler$6 = {
scheme: "urn:uuid",
parse: function parse9(urnComponents, options) {
var uuidComponents = urnComponents;
uuidComponents.uuid = uuidComponents.nss;
uuidComponents.nss = void 0;
if (!options.tolerant && (!uuidComponents.uuid || !uuidComponents.uuid.match(UUID))) {
uuidComponents.error = uuidComponents.error || "UUID is not valid.";
}
return uuidComponents;
},
serialize: function serialize4(uuidComponents, options) {
var urnComponents = uuidComponents;
urnComponents.nss = (uuidComponents.uuid || "").toLowerCase();
return urnComponents;
}
};
SCHEMES[handler.scheme] = handler;
SCHEMES[handler$1.scheme] = handler$1;
SCHEMES[handler$2.scheme] = handler$2;
SCHEMES[handler$3.scheme] = handler$3;
SCHEMES[handler$4.scheme] = handler$4;
SCHEMES[handler$5.scheme] = handler$5;
SCHEMES[handler$6.scheme] = handler$6;
exports3.SCHEMES = SCHEMES;
exports3.pctEncChar = pctEncChar;
exports3.pctDecChars = pctDecChars;
exports3.parse = parse8;
exports3.removeDotSegments = removeDotSegments;
exports3.serialize = serialize3;
exports3.resolveComponents = resolveComponents;
exports3.resolve = resolve;
exports3.normalize = normalize;
exports3.equal = equal;
exports3.escapeComponent = escapeComponent;
exports3.unescapeComponent = unescapeComponent;
Object.defineProperty(exports3, "__esModule", { value: true });
}));
}
});
// node_modules/fast-deep-equal/index.js
var require_fast_deep_equal = __commonJS({
"node_modules/fast-deep-equal/index.js"(exports2, module2) {
"use strict";
module2.exports = function equal(a, b) {
if (a === b) return true;
if (a && b && typeof a == "object" && typeof b == "object") {
if (a.constructor !== b.constructor) return false;
var length, i, keys;
if (Array.isArray(a)) {
length = a.length;
if (length != b.length) return false;
for (i = length; i-- !== 0; )
if (!equal(a[i], b[i])) return false;
return true;
}
if (a.constructor === RegExp) return a.source === b.source && a.flags === b.flags;
if (a.valueOf !== Object.prototype.valueOf) return a.valueOf() === b.valueOf();
if (a.toString !== Object.prototype.toString) return a.toString() === b.toString();
keys = Object.keys(a);
length = keys.length;
if (length !== Object.keys(b).length) return false;
for (i = length; i-- !== 0; )
if (!Object.prototype.hasOwnProperty.call(b, keys[i])) return false;
for (i = length; i-- !== 0; ) {
var key = keys[i];
if (!equal(a[key], b[key])) return false;
}
return true;
}
return a !== a && b !== b;
};
}
});
// node_modules/ajv/lib/compile/ucs2length.js
var require_ucs2length = __commonJS({
"node_modules/ajv/lib/compile/ucs2length.js"(exports2, module2) {
"use strict";
module2.exports = function ucs2length(str) {
var length = 0, len = str.length, pos = 0, value;
while (pos < len) {
length++;
value = str.charCodeAt(pos++);
if (value >= 55296 && value <= 56319 && pos < len) {
value = str.charCodeAt(pos);
if ((value & 64512) == 56320) pos++;
}
}
return length;
};
}
});
// node_modules/ajv/lib/compile/util.js
var require_util = __commonJS({
"node_modules/ajv/lib/compile/util.js"(exports2, module2) {
"use strict";
module2.exports = {
copy,
checkDataType,
checkDataTypes,
coerceToTypes,
toHash,
getProperty,
escapeQuotes,
equal: require_fast_deep_equal(),
ucs2length: require_ucs2length(),
varOccurences,
varReplace,
schemaHasRules,
schemaHasRulesExcept,
schemaUnknownRules,
toQuotedString,
getPathExpr,
getPath,
getData,
unescapeFragment,
unescapeJsonPointer,
escapeFragment,
escapeJsonPointer
};
function copy(o, to) {
to = to || {};
for (var key in o) to[key] = o[key];
return to;
}
function checkDataType(dataType, data2, strictNumbers, negate) {
var EQUAL = negate ? " !== " : " === ", AND = negate ? " || " : " && ", OK3 = negate ? "!" : "", NOT = negate ? "" : "!";
switch (dataType) {
case "null":
return data2 + EQUAL + "null";
case "array":
return OK3 + "Array.isArray(" + data2 + ")";
case "object":
return "(" + OK3 + data2 + AND + "typeof " + data2 + EQUAL + '"object"' + AND + NOT + "Array.isArray(" + data2 + "))";
case "integer":
return "(typeof " + data2 + EQUAL + '"number"' + AND + NOT + "(" + data2 + " % 1)" + AND + data2 + EQUAL + data2 + (strictNumbers ? AND + OK3 + "isFinite(" + data2 + ")" : "") + ")";
case "number":
return "(typeof " + data2 + EQUAL + '"' + dataType + '"' + (strictNumbers ? AND + OK3 + "isFinite(" + data2 + ")" : "") + ")";
default:
return "typeof " + data2 + EQUAL + '"' + dataType + '"';
}
}
function checkDataTypes(dataTypes, data2, strictNumbers) {
switch (dataTypes.length) {
case 1:
return checkDataType(dataTypes[0], data2, strictNumbers, true);
default:
var code = "";
var types = toHash(dataTypes);
if (types.array && types.object) {
code = types.null ? "(" : "(!" + data2 + " || ";
code += "typeof " + data2 + ' !== "object")';
delete types.null;
delete types.array;
delete types.object;
}
if (types.number) delete types.integer;
for (var t in types)
code += (code ? " && " : "") + checkDataType(t, data2, strictNumbers, true);
return code;
}
}
var COERCE_TO_TYPES = toHash(["string", "number", "integer", "boolean", "null"]);
function coerceToTypes(optionCoerceTypes, dataTypes) {
if (Array.isArray(dataTypes)) {
var types = [];
for (var i = 0; i < dataTypes.length; i++) {
var t = dataTypes[i];
if (COERCE_TO_TYPES[t]) types[types.length] = t;
else if (optionCoerceTypes === "array" && t === "array") types[types.length] = t;
}
if (types.length) return types;
} else if (COERCE_TO_TYPES[dataTypes]) {
return [dataTypes];
} else if (optionCoerceTypes === "array" && dataTypes === "array") {
return ["array"];
}
}
function toHash(arr) {
var hash = {};
for (var i = 0; i < arr.length; i++) hash[arr[i]] = true;
return hash;
}
var IDENTIFIER = /^[a-z$_][a-z$_0-9]*$/i;
var SINGLE_QUOTE = /'|\\/g;
function getProperty(key) {
return typeof key == "number" ? "[" + key + "]" : IDENTIFIER.test(key) ? "." + key : "['" + escapeQuotes(key) + "']";
}
function escapeQuotes(str) {
return str.replace(SINGLE_QUOTE, "\\$&").replace(/\n/g, "\\n").replace(/\r/g, "\\r").replace(/\f/g, "\\f").replace(/\t/g, "\\t");
}
function varOccurences(str, dataVar) {
dataVar += "[^0-9]";
var matches = str.match(new RegExp(dataVar, "g"));
return matches ? matches.length : 0;
}
function varReplace(str, dataVar, expr) {
dataVar += "([^0-9])";
expr = expr.replace(/\$/g, "$$$$");
return str.replace(new RegExp(dataVar, "g"), expr + "$1");
}
function schemaHasRules(schema, rules) {
if (typeof schema == "boolean") return !schema;
for (var key in schema) if (rules[key]) return true;
}
function schemaHasRulesExcept(schema, rules, exceptKeyword) {
if (typeof schema == "boolean") return !schema && exceptKeyword != "not";
for (var key in schema) if (key != exceptKeyword && rules[key]) return true;
}
function schemaUnknownRules(schema, rules) {
if (typeof schema == "boolean") return;
for (var key in schema) if (!rules[key]) return key;
}
function toQuotedString(str) {
return "'" + escapeQuotes(str) + "'";
}
function getPathExpr(currentPath, expr, jsonPointers, isNumber3) {
var path = jsonPointers ? "'/' + " + expr + (isNumber3 ? "" : ".replace(/~/g, '~0').replace(/\\//g, '~1')") : isNumber3 ? "'[' + " + expr + " + ']'" : "'[\\'' + " + expr + " + '\\']'";
return joinPaths(currentPath, path);
}
function getPath(currentPath, prop2, jsonPointers) {
var path = jsonPointers ? toQuotedString("/" + escapeJsonPointer(prop2)) : toQuotedString(getProperty(prop2));
return joinPaths(currentPath, path);
}
var JSON_POINTER = /^\/(?:[^~]|~0|~1)*$/;
var RELATIVE_JSON_POINTER = /^([0-9]+)(#|\/(?:[^~]|~0|~1)*)?$/;
function getData($data, lvl, paths) {
var up, jsonPointer, data2, matches;
if ($data === "") return "rootData";
if ($data[0] == "/") {
if (!JSON_POINTER.test($data)) throw new Error("Invalid JSON-pointer: " + $data);
jsonPointer = $data;
data2 = "rootData";
} else {
matches = $data.match(RELATIVE_JSON_POINTER);
if (!matches) throw new Error("Invalid JSON-pointer: " + $data);
up = +matches[1];
jsonPointer = matches[2];
if (jsonPointer == "#") {
if (up >= lvl) throw new Error("Cannot access property/index " + up + " levels up, current level is " + lvl);
return paths[lvl - up];
}
if (up > lvl) throw new Error("Cannot access data " + up + " levels up, current level is " + lvl);
data2 = "data" + (lvl - up || "");
if (!jsonPointer) return data2;
}
var expr = data2;
var segments = jsonPointer.split("/");
for (var i = 0; i < segments.length; i++) {
var segment = segments[i];
if (segment) {
data2 += getProperty(unescapeJsonPointer(segment));
expr += " && " + data2;
}
}
return expr;
}
function joinPaths(a, b) {
if (a == '""') return b;
return (a + " + " + b).replace(/([^\\])' \+ '/g, "$1");
}
function unescapeFragment(str) {
return unescapeJsonPointer(decodeURIComponent(str));
}
function escapeFragment(str) {
return encodeURIComponent(escapeJsonPointer(str));
}
function escapeJsonPointer(str) {
return str.replace(/~/g, "~0").replace(/\//g, "~1");
}
function unescapeJsonPointer(str) {
return str.replace(/~1/g, "/").replace(/~0/g, "~");
}
}
});
// node_modules/ajv/lib/compile/schema_obj.js
var require_schema_obj = __commonJS({
"node_modules/ajv/lib/compile/schema_obj.js"(exports2, module2) {
"use strict";
var util5 = require_util();
module2.exports = SchemaObject;
function SchemaObject(obj) {
util5.copy(obj, this);
}
}
});
// node_modules/json-schema-traverse/index.js
var require_json_schema_traverse = __commonJS({
"node_modules/json-schema-traverse/index.js"(exports2, module2) {
"use strict";
var traverse = module2.exports = function(schema, opts, cb) {
if (typeof opts == "function") {
cb = opts;
opts = {};
}
cb = opts.cb || cb;
var pre = typeof cb == "function" ? cb : cb.pre || function() {
};
var post = cb.post || function() {
};
_traverse(opts, pre, post, schema, "", schema);
};
traverse.keywords = {
additionalItems: true,
items: true,
contains: true,
additionalProperties: true,
propertyNames: true,
not: true
};
traverse.arrayKeywords = {
items: true,
allOf: true,
anyOf: true,
oneOf: true
};
traverse.propsKeywords = {
definitions: true,
properties: true,
patternProperties: true,
dependencies: true
};
traverse.skipKeywords = {
default: true,
enum: true,
const: true,
required: true,
maximum: true,
minimum: true,
exclusiveMaximum: true,
exclusiveMinimum: true,
multipleOf: true,
maxLength: true,
minLength: true,
pattern: true,
format: true,
maxItems: true,
minItems: true,
uniqueItems: true,
maxProperties: true,
minProperties: true
};
function _traverse(opts, pre, post, schema, jsonPtr, rootSchema, parentJsonPtr, parentKeyword, parentSchema, keyIndex) {
if (schema && typeof schema == "object" && !Array.isArray(schema)) {
pre(schema, jsonPtr, rootSchema, parentJsonPtr, parentKeyword, parentSchema, keyIndex);
for (var key in schema) {
var sch = schema[key];
if (Array.isArray(sch)) {
if (key in traverse.arrayKeywords) {
for (var i = 0; i < sch.length; i++)
_traverse(opts, pre, post, sch[i], jsonPtr + "/" + key + "/" + i, rootSchema, jsonPtr, key, schema, i);
}
} else if (key in traverse.propsKeywords) {
if (sch && typeof sch == "object") {
for (var prop2 in sch)
_traverse(opts, pre, post, sch[prop2], jsonPtr + "/" + key + "/" + escapeJsonPtr(prop2), rootSchema, jsonPtr, key, schema, prop2);
}
} else if (key in traverse.keywords || opts.allKeys && !(key in traverse.skipKeywords)) {
_traverse(opts, pre, post, sch, jsonPtr + "/" + key, rootSchema, jsonPtr, key, schema);
}
}
post(schema, jsonPtr, rootSchema, parentJsonPtr, parentKeyword, parentSchema, keyIndex);
}
}
function escapeJsonPtr(str) {
return str.replace(/~/g, "~0").replace(/\//g, "~1");
}
}
});
// node_modules/ajv/lib/compile/resolve.js
var require_resolve = __commonJS({
"node_modules/ajv/lib/compile/resolve.js"(exports2, module2) {
"use strict";
var URI = require_uri_all();
var equal = require_fast_deep_equal();
var util5 = require_util();
var SchemaObject = require_schema_obj();
var traverse = require_json_schema_traverse();
module2.exports = resolve;
resolve.normalizeId = normalizeId;
resolve.fullPath = getFullPath;
resolve.url = resolveUrl;
resolve.ids = resolveIds;
resolve.inlineRef = inlineRef;
resolve.schema = resolveSchema;
function resolve(compile4, root2, ref) {
var refVal = this._refs[ref];
if (typeof refVal == "string") {
if (this._refs[refVal]) refVal = this._refs[refVal];
else return resolve.call(this, compile4, root2, refVal);
}
refVal = refVal || this._schemas[ref];
if (refVal instanceof SchemaObject) {
return inlineRef(refVal.schema, this._opts.inlineRefs) ? refVal.schema : refVal.validate || this._compile(refVal);
}
var res = resolveSchema.call(this, root2, ref);
var schema, v, baseId;
if (res) {
schema = res.schema;
root2 = res.root;
baseId = res.baseId;
}
if (schema instanceof SchemaObject) {
v = schema.validate || compile4.call(this, schema.schema, root2, void 0, baseId);
} else if (schema !== void 0) {
v = inlineRef(schema, this._opts.inlineRefs) ? schema : compile4.call(this, schema, root2, void 0, baseId);
}
return v;
}
function resolveSchema(root2, ref) {
var p = URI.parse(ref), refPath = _getFullPath(p), baseId = getFullPath(this._getId(root2.schema));
if (Object.keys(root2.schema).length === 0 || refPath !== baseId) {
var id = normalizeId(refPath);
var refVal = this._refs[id];
if (typeof refVal == "string") {
return resolveRecursive.call(this, root2, refVal, p);
} else if (refVal instanceof SchemaObject) {
if (!refVal.validate) this._compile(refVal);
root2 = refVal;
} else {
refVal = this._schemas[id];
if (refVal instanceof SchemaObject) {
if (!refVal.validate) this._compile(refVal);
if (id == normalizeId(ref))
return { schema: refVal, root: root2, baseId };
root2 = refVal;
} else {
return;
}
}
if (!root2.schema) return;
baseId = getFullPath(this._getId(root2.schema));
}
return getJsonPointer.call(this, p, baseId, root2.schema, root2);
}
function resolveRecursive(root2, ref, parsedRef) {
var res = resolveSchema.call(this, root2, ref);
if (res) {
var schema = res.schema;
var baseId = res.baseId;
root2 = res.root;
var id = this._getId(schema);
if (id) baseId = resolveUrl(baseId, id);
return getJsonPointer.call(this, parsedRef, baseId, schema, root2);
}
}
var PREVENT_SCOPE_CHANGE = util5.toHash(["properties", "patternProperties", "enum", "dependencies", "definitions"]);
function getJsonPointer(parsedRef, baseId, schema, root2) {
parsedRef.fragment = parsedRef.fragment || "";
if (parsedRef.fragment.slice(0, 1) != "/") return;
var parts = parsedRef.fragment.split("/");
for (var i = 1; i < parts.length; i++) {
var part = parts[i];
if (part) {
part = util5.unescapeFragment(part);
schema = schema[part];
if (schema === void 0) break;
var id;
if (!PREVENT_SCOPE_CHANGE[part]) {
id = this._getId(schema);
if (id) baseId = resolveUrl(baseId, id);
if (schema.$ref) {
var $ref = resolveUrl(baseId, schema.$ref);
var res = resolveSchema.call(this, root2, $ref);
if (res) {
schema = res.schema;
root2 = res.root;
baseId = res.baseId;
}
}
}
}
}
if (schema !== void 0 && schema !== root2.schema)
return { schema, root: root2, baseId };
}
var SIMPLE_INLINED = util5.toHash([
"type",
"format",
"pattern",
"maxLength",
"minLength",
"maxProperties",
"minProperties",
"maxItems",
"minItems",
"maximum",
"minimum",
"uniqueItems",
"multipleOf",
"required",
"enum"
]);
function inlineRef(schema, limit) {
if (limit === false) return false;
if (limit === void 0 || limit === true) return checkNoRef(schema);
else if (limit) return countKeys(schema) <= limit;
}
function checkNoRef(schema) {
var item;
if (Array.isArray(schema)) {
for (var i = 0; i < schema.length; i++) {
item = schema[i];
if (typeof item == "object" && !checkNoRef(item)) return false;
}
} else {
for (var key in schema) {
if (key == "$ref") return false;
item = schema[key];
if (typeof item == "object" && !checkNoRef(item)) return false;
}
}
return true;
}
function countKeys(schema) {
var count = 0, item;
if (Array.isArray(schema)) {
for (var i = 0; i < schema.length; i++) {
item = schema[i];
if (typeof item == "object") count += countKeys(item);
if (count == Infinity) return Infinity;
}
} else {
for (var key in schema) {
if (key == "$ref") return Infinity;
if (SIMPLE_INLINED[key]) {
count++;
} else {
item = schema[key];
if (typeof item == "object") count += countKeys(item) + 1;
if (count == Infinity) return Infinity;
}
}
}
return count;
}
function getFullPath(id, normalize) {
if (normalize !== false) id = normalizeId(id);
var p = URI.parse(id);
return _getFullPath(p);
}
function _getFullPath(p) {
return URI.serialize(p).split("#")[0] + "#";
}
var TRAILING_SLASH_HASH = /#\/?$/;
function normalizeId(id) {
return id ? id.replace(TRAILING_SLASH_HASH, "") : "";
}
function resolveUrl(baseId, id) {
id = normalizeId(id);
return URI.resolve(baseId, id);
}
function resolveIds(schema) {
var schemaId = normalizeId(this._getId(schema));
var baseIds = { "": schemaId };
var fullPaths = { "": getFullPath(schemaId, false) };
var localRefs = {};
var self2 = this;
traverse(schema, { allKeys: true }, function(sch, jsonPtr, rootSchema, parentJsonPtr, parentKeyword, parentSchema, keyIndex) {
if (jsonPtr === "") return;
var id = self2._getId(sch);
var baseId = baseIds[parentJsonPtr];
var fullPath = fullPaths[parentJsonPtr] + "/" + parentKeyword;
if (keyIndex !== void 0)
fullPath += "/" + (typeof keyIndex == "number" ? keyIndex : util5.escapeFragment(keyIndex));
if (typeof id == "string") {
id = baseId = normalizeId(baseId ? URI.resolve(baseId, id) : id);
var refVal = self2._refs[id];
if (typeof refVal == "string") refVal = self2._refs[refVal];
if (refVal && refVal.schema) {
if (!equal(sch, refVal.schema))
throw new Error('id "' + id + '" resolves to more than one schema');
} else if (id != normalizeId(fullPath)) {
if (id[0] == "#") {
if (localRefs[id] && !equal(sch, localRefs[id]))
throw new Error('id "' + id + '" resolves to more than one schema');
localRefs[id] = sch;
} else {
self2._refs[id] = fullPath;
}
}
}
baseIds[jsonPtr] = baseId;
fullPaths[jsonPtr] = fullPath;
});
return localRefs;
}
}
});
// node_modules/ajv/lib/compile/error_classes.js
var require_error_classes = __commonJS({
"node_modules/ajv/lib/compile/error_classes.js"(exports2, module2) {
"use strict";
var resolve = require_resolve();
module2.exports = {
Validation: errorSubclass(ValidationError),
MissingRef: errorSubclass(MissingRefError)
};
function ValidationError(errors) {
this.message = "validation failed";
this.errors = errors;
this.ajv = this.validation = true;
}
MissingRefError.message = function(baseId, ref) {
return "can't resolve reference " + ref + " from id " + baseId;
};
function MissingRefError(baseId, ref, message) {
this.message = message || MissingRefError.message(baseId, ref);
this.missingRef = resolve.url(baseId, ref);
this.missingSchema = resolve.normalizeId(resolve.fullPath(this.missingRef));
}
function errorSubclass(Subclass) {
Subclass.prototype = Object.create(Error.prototype);
Subclass.prototype.constructor = Subclass;
return Subclass;
}
}
});
// node_modules/fast-json-stable-stringify/index.js
var require_fast_json_stable_stringify = __commonJS({
"node_modules/fast-json-stable-stringify/index.js"(exports2, module2) {
"use strict";
module2.exports = function(data2, opts) {
if (!opts) opts = {};
if (typeof opts === "function") opts = { cmp: opts };
var cycles = typeof opts.cycles === "boolean" ? opts.cycles : false;
var cmp = opts.cmp && /* @__PURE__ */ (function(f) {
return function(node) {
return function(a, b) {
var aobj = { key: a, value: node[a] };
var bobj = { key: b, value: node[b] };
return f(aobj, bobj);
};
};
})(opts.cmp);
var seen = [];
return (function stringify2(node) {
if (node && node.toJSON && typeof node.toJSON === "function") {
node = node.toJSON();
}
if (node === void 0) return;
if (typeof node == "number") return isFinite(node) ? "" + node : "null";
if (typeof node !== "object") return JSON.stringify(node);
var i, out;
if (Array.isArray(node)) {
out = "[";
for (i = 0; i < node.length; i++) {
if (i) out += ",";
out += stringify2(node[i]) || "null";
}
return out + "]";
}
if (node === null) return "null";
if (seen.indexOf(node) !== -1) {
if (cycles) return JSON.stringify("__cycle__");
throw new TypeError("Converting circular structure to JSON");
}
var seenIndex = seen.push(node) - 1;
var keys = Object.keys(node).sort(cmp && cmp(node));
out = "";
for (i = 0; i < keys.length; i++) {
var key = keys[i];
var value = stringify2(node[key]);
if (!value) continue;
if (out) out += ",";
out += JSON.stringify(key) + ":" + value;
}
seen.splice(seenIndex, 1);
return "{" + out + "}";
})(data2);
};
}
});
// node_modules/ajv/lib/dotjs/validate.js
var require_validate = __commonJS({
"node_modules/ajv/lib/dotjs/validate.js"(exports2, module2) {
"use strict";
module2.exports = function generate_validate(it, $keyword, $ruleType) {
var out = "";
var $async = it.schema.$async === true, $refKeywords = it.util.schemaHasRulesExcept(it.schema, it.RULES.all, "$ref"), $id = it.self._getId(it.schema);
if (it.opts.strictKeywords) {
var $unknownKwd = it.util.schemaUnknownRules(it.schema, it.RULES.keywords);
if ($unknownKwd) {
var $keywordsMsg = "unknown keyword: " + $unknownKwd;
if (it.opts.strictKeywords === "log") it.logger.warn($keywordsMsg);
else throw new Error($keywordsMsg);
}
}
if (it.isTop) {
out += " var validate = ";
if ($async) {
it.async = true;
out += "async ";
}
out += "function(data, dataPath, parentData, parentDataProperty, rootData) { 'use strict'; ";
if ($id && (it.opts.sourceCode || it.opts.processCode)) {
out += " " + ("/*# sourceURL=" + $id + " */") + " ";
}
}
if (typeof it.schema == "boolean" || !($refKeywords || it.schema.$ref)) {
var $keyword = "false schema";
var $lvl = it.level;
var $dataLvl = it.dataLevel;
var $schema = it.schema[$keyword];
var $schemaPath = it.schemaPath + it.util.getProperty($keyword);
var $errSchemaPath = it.errSchemaPath + "/" + $keyword;
var $breakOnError = !it.opts.allErrors;
var $errorKeyword;
var $data = "data" + ($dataLvl || "");
var $valid = "valid" + $lvl;
if (it.schema === false) {
if (it.isTop) {
$breakOnError = true;
} else {
out += " var " + $valid + " = false; ";
}
var $$outStack = $$outStack || [];
$$outStack.push(out);
out = "";
if (it.createErrors !== false) {
out += " { keyword: '" + ($errorKeyword || "false schema") + "' , dataPath: (dataPath || '') + " + it.errorPath + " , schemaPath: " + it.util.toQuotedString($errSchemaPath) + " , params: {} ";
if (it.opts.messages !== false) {
out += " , message: 'boolean schema is false' ";
}
if (it.opts.verbose) {
out += " , schema: false , parentSchema: validate.schema" + it.schemaPath + " , data: " + $data + " ";
}
out += " } ";
} else {
out += " {} ";
}
var __err = out;
out = $$outStack.pop();
if (!it.compositeRule && $breakOnError) {
if (it.async) {
out += " throw new ValidationError([" + __err + "]); ";
} else {
out += " validate.errors = [" + __err + "]; return false; ";
}
} else {
out += " var err = " + __err + "; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ";
}
} else {
if (it.isTop) {
if ($async) {
out += " return data; ";
} else {
out += " validate.errors = null; return true; ";
}
} else {
out += " var " + $valid + " = true; ";
}
}
if (it.isTop) {
out += " }; return validate; ";
}
return out;
}
if (it.isTop) {
var $top = it.isTop, $lvl = it.level = 0, $dataLvl = it.dataLevel = 0, $data = "data";
it.rootId = it.resolve.fullPath(it.self._getId(it.root.schema));
it.baseId = it.baseId || it.rootId;
delete it.isTop;
it.dataPathArr = [""];
if (it.schema.default !== void 0 && it.opts.useDefaults && it.opts.strictDefaults) {
var $defaultMsg = "default is ignored in the schema root";
if (it.opts.strictDefaults === "log") it.logger.warn($defaultMsg);
else throw new Error($defaultMsg);
}
out += " var vErrors = null; ";
out += " var errors = 0; ";
out += " if (rootData === undefined) rootData = data; ";
} else {
var $lvl = it.level, $dataLvl = it.dataLevel, $data = "data" + ($dataLvl || "");
if ($id) it.baseId = it.resolve.url(it.baseId, $id);
if ($async && !it.async) throw new Error("async schema in sync schema");
out += " var errs_" + $lvl + " = errors;";
}
var $valid = "valid" + $lvl, $breakOnError = !it.opts.allErrors, $closingBraces1 = "", $closingBraces2 = "";
var $errorKeyword;
var $typeSchema = it.schema.type, $typeIsArray = Array.isArray($typeSchema);
if ($typeSchema && it.opts.nullable && it.schema.nullable === true) {
if ($typeIsArray) {
if ($typeSchema.indexOf("null") == -1) $typeSchema = $typeSchema.concat("null");
} else if ($typeSchema != "null") {
$typeSchema = [$typeSchema, "null"];
$typeIsArray = true;
}
}
if ($typeIsArray && $typeSchema.length == 1) {
$typeSchema = $typeSchema[0];
$typeIsArray = false;
}
if (it.schema.$ref && $refKeywords) {
if (it.opts.extendRefs == "fail") {
throw new Error('$ref: validation keywords used in schema at path "' + it.errSchemaPath + '" (see option extendRefs)');
} else if (it.opts.extendRefs !== true) {
$refKeywords = false;
it.logger.warn('$ref: keywords ignored in schema at path "' + it.errSchemaPath + '"');
}
}
if (it.schema.$comment && it.opts.$comment) {
out += " " + it.RULES.all.$comment.code(it, "$comment");
}
if ($typeSchema) {
if (it.opts.coerceTypes) {
var $coerceToTypes = it.util.coerceToTypes(it.opts.coerceTypes, $typeSchema);
}
var $rulesGroup = it.RULES.types[$typeSchema];
if ($coerceToTypes || $typeIsArray || $rulesGroup === true || $rulesGroup && !$shouldUseGroup($rulesGroup)) {
var $schemaPath = it.schemaPath + ".type", $errSchemaPath = it.errSchemaPath + "/type";
var $schemaPath = it.schemaPath + ".type", $errSchemaPath = it.errSchemaPath + "/type", $method = $typeIsArray ? "checkDataTypes" : "checkDataType";
out += " if (" + it.util[$method]($typeSchema, $data, it.opts.strictNumbers, true) + ") { ";
if ($coerceToTypes) {
var $dataType = "dataType" + $lvl, $coerced = "coerced" + $lvl;
out += " var " + $dataType + " = typeof " + $data + "; var " + $coerced + " = undefined; ";
if (it.opts.coerceTypes == "array") {
out += " if (" + $dataType + " == 'object' && Array.isArray(" + $data + ") && " + $data + ".length == 1) { " + $data + " = " + $data + "[0]; " + $dataType + " = typeof " + $data + "; if (" + it.util.checkDataType(it.schema.type, $data, it.opts.strictNumbers) + ") " + $coerced + " = " + $data + "; } ";
}
out += " if (" + $coerced + " !== undefined) ; ";
var arr1 = $coerceToTypes;
if (arr1) {
var $type, $i = -1, l1 = arr1.length - 1;
while ($i < l1) {
$type = arr1[$i += 1];
if ($type == "string") {
out += " else if (" + $dataType + " == 'number' || " + $dataType + " == 'boolean') " + $coerced + " = '' + " + $data + "; else if (" + $data + " === null) " + $coerced + " = ''; ";
} else if ($type == "number" || $type == "integer") {
out += " else if (" + $dataType + " == 'boolean' || " + $data + " === null || (" + $dataType + " == 'string' && " + $data + " && " + $data + " == +" + $data + " ";
if ($type == "integer") {
out += " && !(" + $data + " % 1)";
}
out += ")) " + $coerced + " = +" + $data + "; ";
} else if ($type == "boolean") {
out += " else if (" + $data + " === 'false' || " + $data + " === 0 || " + $data + " === null) " + $coerced + " = false; else if (" + $data + " === 'true' || " + $data + " === 1) " + $coerced + " = true; ";
} else if ($type == "null") {
out += " else if (" + $data + " === '' || " + $data + " === 0 || " + $data + " === false) " + $coerced + " = null; ";
} else if (it.opts.coerceTypes == "array" && $type == "array") {
out += " else if (" + $dataType + " == 'string' || " + $dataType + " == 'number' || " + $dataType + " == 'boolean' || " + $data + " == null) " + $coerced + " = [" + $data + "]; ";
}
}
}
out += " else { ";
var $$outStack = $$outStack || [];
$$outStack.push(out);
out = "";
if (it.createErrors !== false) {
out += " { keyword: '" + ($errorKeyword || "type") + "' , dataPath: (dataPath || '') + " + it.errorPath + " , schemaPath: " + it.util.toQuotedString($errSchemaPath) + " , params: { type: '";
if ($typeIsArray) {
out += "" + $typeSchema.join(",");
} else {
out += "" + $typeSchema;
}
out += "' } ";
if (it.opts.messages !== false) {
out += " , message: 'should be ";
if ($typeIsArray) {
out += "" + $typeSchema.join(",");
} else {
out += "" + $typeSchema;
}
out += "' ";
}
if (it.opts.verbose) {
out += " , schema: validate.schema" + $schemaPath + " , parentSchema: validate.schema" + it.schemaPath + " , data: " + $data + " ";
}
out += " } ";
} else {
out += " {} ";
}
var __err = out;
out = $$outStack.pop();
if (!it.compositeRule && $breakOnError) {
if (it.async) {
out += " throw new ValidationError([" + __err + "]); ";
} else {
out += " validate.errors = [" + __err + "]; return false; ";
}
} else {
out += " var err = " + __err + "; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ";
}
out += " } if (" + $coerced + " !== undefined) { ";
var $parentData = $dataLvl ? "data" + ($dataLvl - 1 || "") : "parentData", $parentDataProperty = $dataLvl ? it.dataPathArr[$dataLvl] : "parentDataProperty";
out += " " + $data + " = " + $coerced + "; ";
if (!$dataLvl) {
out += "if (" + $parentData + " !== undefined)";
}
out += " " + $parentData + "[" + $parentDataProperty + "] = " + $coerced + "; } ";
} else {
var $$outStack = $$outStack || [];
$$outStack.push(out);
out = "";
if (it.createErrors !== false) {
out += " { keyword: '" + ($errorKeyword || "type") + "' , dataPath: (dataPath || '') + " + it.errorPath + " , schemaPath: " + it.util.toQuotedString($errSchemaPath) + " , params: { type: '";
if ($typeIsArray) {
out += "" + $typeSchema.join(",");
} else {
out += "" + $typeSchema;
}
out += "' } ";
if (it.opts.messages !== false) {
out += " , message: 'should be ";
if ($typeIsArray) {
out += "" + $typeSchema.join(",");
} else {
out += "" + $typeSchema;
}
out += "' ";
}
if (it.opts.verbose) {
out += " , schema: validate.schema" + $schemaPath + " , parentSchema: validate.schema" + it.schemaPath + " , data: " + $data + " ";
}
out += " } ";
} else {
out += " {} ";
}
var __err = out;
out = $$outStack.pop();
if (!it.compositeRule && $breakOnError) {
if (it.async) {
out += " throw new ValidationError([" + __err + "]); ";
} else {
out += " validate.errors = [" + __err + "]; return false; ";
}
} else {
out += " var err = " + __err + "; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ";
}
}
out += " } ";
}
}
if (it.schema.$ref && !$refKeywords) {
out += " " + it.RULES.all.$ref.code(it, "$ref") + " ";
if ($breakOnError) {
out += " } if (errors === ";
if ($top) {
out += "0";
} else {
out += "errs_" + $lvl;
}
out += ") { ";
$closingBraces2 += "}";
}
} else {
var arr2 = it.RULES;
if (arr2) {
var $rulesGroup, i2 = -1, l2 = arr2.length - 1;
while (i2 < l2) {
$rulesGroup = arr2[i2 += 1];
if ($shouldUseGroup($rulesGroup)) {
if ($rulesGroup.type) {
out += " if (" + it.util.checkDataType($rulesGroup.type, $data, it.opts.strictNumbers) + ") { ";
}
if (it.opts.useDefaults) {
if ($rulesGroup.type == "object" && it.schema.properties) {
var $schema = it.schema.properties, $schemaKeys = Object.keys($schema);
var arr3 = $schemaKeys;
if (arr3) {
var $propertyKey, i3 = -1, l3 = arr3.length - 1;
while (i3 < l3) {
$propertyKey = arr3[i3 += 1];
var $sch = $schema[$propertyKey];
if ($sch.default !== void 0) {
var $passData = $data + it.util.getProperty($propertyKey);
if (it.compositeRule) {
if (it.opts.strictDefaults) {
var $defaultMsg = "default is ignored for: " + $passData;
if (it.opts.strictDefaults === "log") it.logger.warn($defaultMsg);
else throw new Error($defaultMsg);
}
} else {
out += " if (" + $passData + " === undefined ";
if (it.opts.useDefaults == "empty") {
out += " || " + $passData + " === null || " + $passData + " === '' ";
}
out += " ) " + $passData + " = ";
if (it.opts.useDefaults == "shared") {
out += " " + it.useDefault($sch.default) + " ";
} else {
out += " " + JSON.stringify($sch.default) + " ";
}
out += "; ";
}
}
}
}
} else if ($rulesGroup.type == "array" && Array.isArray(it.schema.items)) {
var arr4 = it.schema.items;
if (arr4) {
var $sch, $i = -1, l4 = arr4.length - 1;
while ($i < l4) {
$sch = arr4[$i += 1];
if ($sch.default !== void 0) {
var $passData = $data + "[" + $i + "]";
if (it.compositeRule) {
if (it.opts.strictDefaults) {
var $defaultMsg = "default is ignored for: " + $passData;
if (it.opts.strictDefaults === "log") it.logger.warn($defaultMsg);
else throw new Error($defaultMsg);
}
} else {
out += " if (" + $passData + " === undefined ";
if (it.opts.useDefaults == "empty") {
out += " || " + $passData + " === null || " + $passData + " === '' ";
}
out += " ) " + $passData + " = ";
if (it.opts.useDefaults == "shared") {
out += " " + it.useDefault($sch.default) + " ";
} else {
out += " " + JSON.stringify($sch.default) + " ";
}
out += "; ";
}
}
}
}
}
}
var arr5 = $rulesGroup.rules;
if (arr5) {
var $rule, i5 = -1, l5 = arr5.length - 1;
while (i5 < l5) {
$rule = arr5[i5 += 1];
if ($shouldUseRule($rule)) {
var $code = $rule.code(it, $rule.keyword, $rulesGroup.type);
if ($code) {
out += " " + $code + " ";
if ($breakOnError) {
$closingBraces1 += "}";
}
}
}
}
}
if ($breakOnError) {
out += " " + $closingBraces1 + " ";
$closingBraces1 = "";
}
if ($rulesGroup.type) {
out += " } ";
if ($typeSchema && $typeSchema === $rulesGroup.type && !$coerceToTypes) {
out += " else { ";
var $schemaPath = it.schemaPath + ".type", $errSchemaPath = it.errSchemaPath + "/type";
var $$outStack = $$outStack || [];
$$outStack.push(out);
out = "";
if (it.createErrors !== false) {
out += " { keyword: '" + ($errorKeyword || "type") + "' , dataPath: (dataPath || '') + " + it.errorPath + " , schemaPath: " + it.util.toQuotedString($errSchemaPath) + " , params: { type: '";
if ($typeIsArray) {
out += "" + $typeSchema.join(",");
} else {
out += "" + $typeSchema;
}
out += "' } ";
if (it.opts.messages !== false) {
out += " , message: 'should be ";
if ($typeIsArray) {
out += "" + $typeSchema.join(",");
} else {
out += "" + $typeSchema;
}
out += "' ";
}
if (it.opts.verbose) {
out += " , schema: validate.schema" + $schemaPath + " , parentSchema: validate.schema" + it.schemaPath + " , data: " + $data + " ";
}
out += " } ";
} else {
out += " {} ";
}
var __err = out;
out = $$outStack.pop();
if (!it.compositeRule && $breakOnError) {
if (it.async) {
out += " throw new ValidationError([" + __err + "]); ";
} else {
out += " validate.errors = [" + __err + "]; return false; ";
}
} else {
out += " var err = " + __err + "; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ";
}
out += " } ";
}
}
if ($breakOnError) {
out += " if (errors === ";
if ($top) {
out += "0";
} else {
out += "errs_" + $lvl;
}
out += ") { ";
$closingBraces2 += "}";
}
}
}
}
}
if ($breakOnError) {
out += " " + $closingBraces2 + " ";
}
if ($top) {
if ($async) {
out += " if (errors === 0) return data; ";
out += " else throw new ValidationError(vErrors); ";
} else {
out += " validate.errors = vErrors; ";
out += " return errors === 0; ";
}
out += " }; return validate;";
} else {
out += " var " + $valid + " = errors === errs_" + $lvl + ";";
}
function $shouldUseGroup($rulesGroup2) {
var rules = $rulesGroup2.rules;
for (var i = 0; i < rules.length; i++)
if ($shouldUseRule(rules[i])) return true;
}
function $shouldUseRule($rule2) {
return it.schema[$rule2.keyword] !== void 0 || $rule2.implements && $ruleImplementsSomeKeyword($rule2);
}
function $ruleImplementsSomeKeyword($rule2) {
var impl = $rule2.implements;
for (var i = 0; i < impl.length; i++)
if (it.schema[impl[i]] !== void 0) return true;
}
return out;
};
}
});
// node_modules/ajv/lib/compile/index.js
var require_compile = __commonJS({
"node_modules/ajv/lib/compile/index.js"(exports2, module2) {
"use strict";
var resolve = require_resolve();
var util5 = require_util();
var errorClasses = require_error_classes();
var stableStringify = require_fast_json_stable_stringify();
var validateGenerator = require_validate();
var ucs2length = util5.ucs2length;
var equal = require_fast_deep_equal();
var ValidationError = errorClasses.Validation;
module2.exports = compile4;
function compile4(schema, root2, localRefs, baseId) {
var self2 = this, opts = this._opts, refVal = [void 0], refs = {}, patterns = [], patternsHash = {}, defaults2 = [], defaultsHash = {}, customRules = [];
root2 = root2 || { schema, refVal, refs };
var c = checkCompiling.call(this, schema, root2, baseId);
var compilation = this._compilations[c.index];
if (c.compiling) return compilation.callValidate = callValidate;
var formats = this._formats;
var RULES = this.RULES;
try {
var v = localCompile(schema, root2, localRefs, baseId);
compilation.validate = v;
var cv = compilation.callValidate;
if (cv) {
cv.schema = v.schema;
cv.errors = null;
cv.refs = v.refs;
cv.refVal = v.refVal;
cv.root = v.root;
cv.$async = v.$async;
if (opts.sourceCode) cv.source = v.source;
}
return v;
} finally {
endCompiling.call(this, schema, root2, baseId);
}
function callValidate() {
var validate = compilation.validate;
var result = validate.apply(this, arguments);
callValidate.errors = validate.errors;
return result;
}
function localCompile(_schema, _root, localRefs2, baseId2) {
var isRoot = !_root || _root && _root.schema == _schema;
if (_root.schema != root2.schema)
return compile4.call(self2, _schema, _root, localRefs2, baseId2);
var $async = _schema.$async === true;
var sourceCode = validateGenerator({
isTop: true,
schema: _schema,
isRoot,
baseId: baseId2,
root: _root,
schemaPath: "",
errSchemaPath: "#",
errorPath: '""',
MissingRefError: errorClasses.MissingRef,
RULES,
validate: validateGenerator,
util: util5,
resolve,
resolveRef,
usePattern,
useDefault,
useCustomRule,
opts,
formats,
logger: self2.logger,
self: self2
});
sourceCode = vars(refVal, refValCode) + vars(patterns, patternCode) + vars(defaults2, defaultCode) + vars(customRules, customRuleCode) + sourceCode;
if (opts.processCode) sourceCode = opts.processCode(sourceCode, _schema);
var validate;
try {
var makeValidate = new Function(
"self",
"RULES",
"formats",
"root",
"refVal",
"defaults",
"customRules",
"equal",
"ucs2length",
"ValidationError",
sourceCode
);
validate = makeValidate(
self2,
RULES,
formats,
root2,
refVal,
defaults2,
customRules,
equal,
ucs2length,
ValidationError
);
refVal[0] = validate;
} catch (e) {
self2.logger.error("Error compiling schema, function code:", sourceCode);
throw e;
}
validate.schema = _schema;
validate.errors = null;
validate.refs = refs;
validate.refVal = refVal;
validate.root = isRoot ? validate : _root;
if ($async) validate.$async = true;
if (opts.sourceCode === true) {
validate.source = {
code: sourceCode,
patterns,
defaults: defaults2
};
}
return validate;
}
function resolveRef(baseId2, ref, isRoot) {
ref = resolve.url(baseId2, ref);
var refIndex = refs[ref];
var _refVal, refCode;
if (refIndex !== void 0) {
_refVal = refVal[refIndex];
refCode = "refVal[" + refIndex + "]";
return resolvedRef(_refVal, refCode);
}
if (!isRoot && root2.refs) {
var rootRefId = root2.refs[ref];
if (rootRefId !== void 0) {
_refVal = root2.refVal[rootRefId];
refCode = addLocalRef(ref, _refVal);
return resolvedRef(_refVal, refCode);
}
}
refCode = addLocalRef(ref);
var v2 = resolve.call(self2, localCompile, root2, ref);
if (v2 === void 0) {
var localSchema = localRefs && localRefs[ref];
if (localSchema) {
v2 = resolve.inlineRef(localSchema, opts.inlineRefs) ? localSchema : compile4.call(self2, localSchema, root2, localRefs, baseId2);
}
}
if (v2 === void 0) {
removeLocalRef(ref);
} else {
replaceLocalRef(ref, v2);
return resolvedRef(v2, refCode);
}
}
function addLocalRef(ref, v2) {
var refId = refVal.length;
refVal[refId] = v2;
refs[ref] = refId;
return "refVal" + refId;
}
function removeLocalRef(ref) {
delete refs[ref];
}
function replaceLocalRef(ref, v2) {
var refId = refs[ref];
refVal[refId] = v2;
}
function resolvedRef(refVal2, code) {
return typeof refVal2 == "object" || typeof refVal2 == "boolean" ? { code, schema: refVal2, inline: true } : { code, $async: refVal2 && !!refVal2.$async };
}
function usePattern(regexStr) {
var index2 = patternsHash[regexStr];
if (index2 === void 0) {
index2 = patternsHash[regexStr] = patterns.length;
patterns[index2] = regexStr;
}
return "pattern" + index2;
}
function useDefault(value) {
switch (typeof value) {
case "boolean":
case "number":
return "" + value;
case "string":
return util5.toQuotedString(value);
case "object":
if (value === null) return "null";
var valueStr = stableStringify(value);
var index2 = defaultsHash[valueStr];
if (index2 === void 0) {
index2 = defaultsHash[valueStr] = defaults2.length;
defaults2[index2] = value;
}
return "default" + index2;
}
}
function useCustomRule(rule, schema2, parentSchema, it) {
if (self2._opts.validateSchema !== false) {
var deps = rule.definition.dependencies;
if (deps && !deps.every(function(keyword) {
return Object.prototype.hasOwnProperty.call(parentSchema, keyword);
}))
throw new Error("parent schema must have all required keywords: " + deps.join(","));
var validateSchema = rule.definition.validateSchema;
if (validateSchema) {
var valid = validateSchema(schema2);
if (!valid) {
var message = "keyword schema is invalid: " + self2.errorsText(validateSchema.errors);
if (self2._opts.validateSchema == "log") self2.logger.error(message);
else throw new Error(message);
}
}
}
var compile5 = rule.definition.compile, inline = rule.definition.inline, macro = rule.definition.macro;
var validate;
if (compile5) {
validate = compile5.call(self2, schema2, parentSchema, it);
} else if (macro) {
validate = macro.call(self2, schema2, parentSchema, it);
if (opts.validateSchema !== false) self2.validateSchema(validate, true);
} else if (inline) {
validate = inline.call(self2, it, rule.keyword, schema2, parentSchema);
} else {
validate = rule.definition.validate;
if (!validate) return;
}
if (validate === void 0)
throw new Error('custom keyword "' + rule.keyword + '"failed to compile');
var index2 = customRules.length;
customRules[index2] = validate;
return {
code: "customRule" + index2,
validate
};
}
}
function checkCompiling(schema, root2, baseId) {
var index2 = compIndex.call(this, schema, root2, baseId);
if (index2 >= 0) return { index: index2, compiling: true };
index2 = this._compilations.length;
this._compilations[index2] = {
schema,
root: root2,
baseId
};
return { index: index2, compiling: false };
}
function endCompiling(schema, root2, baseId) {
var i = compIndex.call(this, schema, root2, baseId);
if (i >= 0) this._compilations.splice(i, 1);
}
function compIndex(schema, root2, baseId) {
for (var i = 0; i < this._compilations.length; i++) {
var c = this._compilations[i];
if (c.schema == schema && c.root == root2 && c.baseId == baseId) return i;
}
return -1;
}
function patternCode(i, patterns) {
return "var pattern" + i + " = new RegExp(" + util5.toQuotedString(patterns[i]) + ");";
}
function defaultCode(i) {
return "var default" + i + " = defaults[" + i + "];";
}
function refValCode(i, refVal) {
return refVal[i] === void 0 ? "" : "var refVal" + i + " = refVal[" + i + "];";
}
function customRuleCode(i) {
return "var customRule" + i + " = customRules[" + i + "];";
}
function vars(arr, statement) {
if (!arr.length) return "";
var code = "";
for (var i = 0; i < arr.length; i++)
code += statement(i, arr);
return code;
}
}
});
// node_modules/ajv/lib/cache.js
var require_cache = __commonJS({
"node_modules/ajv/lib/cache.js"(exports2, module2) {
"use strict";
var Cache = module2.exports = function Cache2() {
this._cache = {};
};
Cache.prototype.put = function Cache_put(key, value) {
this._cache[key] = value;
};
Cache.prototype.get = function Cache_get(key) {
return this._cache[key];
};
Cache.prototype.del = function Cache_del(key) {
delete this._cache[key];
};
Cache.prototype.clear = function Cache_clear() {
this._cache = {};
};
}
});
// node_modules/ajv/lib/compile/formats.js
var require_formats = __commonJS({
"node_modules/ajv/lib/compile/formats.js"(exports2, module2) {
"use strict";
var util5 = require_util();
var DATE = /^(\d\d\d\d)-(\d\d)-(\d\d)$/;
var DAYS = [0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
var TIME = /^(\d\d):(\d\d):(\d\d)(\.\d+)?(z|[+-]\d\d(?::?\d\d)?)?$/i;
var HOSTNAME = /^(?=.{1,253}\.?$)[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?(?:\.[a-z0-9](?:[-0-9a-z]{0,61}[0-9a-z])?)*\.?$/i;
var URI = /^(?:[a-z][a-z0-9+\-.]*:)(?:\/?\/(?:(?:[a-z0-9\-._~!$&'()*+,;=:]|%[0-9a-f]{2})*@)?(?:\[(?:(?:(?:(?:[0-9a-f]{1,4}:){6}|::(?:[0-9a-f]{1,4}:){5}|(?:[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){4}|(?:(?:[0-9a-f]{1,4}:){0,1}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){3}|(?:(?:[0-9a-f]{1,4}:){0,2}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){2}|(?:(?:[0-9a-f]{1,4}:){0,3}[0-9a-f]{1,4})?::[0-9a-f]{1,4}:|(?:(?:[0-9a-f]{1,4}:){0,4}[0-9a-f]{1,4})?::)(?:[0-9a-f]{1,4}:[0-9a-f]{1,4}|(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?))|(?:(?:[0-9a-f]{1,4}:){0,5}[0-9a-f]{1,4})?::[0-9a-f]{1,4}|(?:(?:[0-9a-f]{1,4}:){0,6}[0-9a-f]{1,4})?::)|[Vv][0-9a-f]+\.[a-z0-9\-._~!$&'()*+,;=:]+)\]|(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?)|(?:[a-z0-9\-._~!$&'()*+,;=]|%[0-9a-f]{2})*)(?::\d*)?(?:\/(?:[a-z0-9\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})*)*|\/(?:(?:[a-z0-9\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})+(?:\/(?:[a-z0-9\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})*)*)?|(?:[a-z0-9\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})+(?:\/(?:[a-z0-9\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})*)*)(?:\?(?:[a-z0-9\-._~!$&'()*+,;=:@/?]|%[0-9a-f]{2})*)?(?:#(?:[a-z0-9\-._~!$&'()*+,;=:@/?]|%[0-9a-f]{2})*)?$/i;
var URIREF = /^(?:[a-z][a-z0-9+\-.]*:)?(?:\/?\/(?:(?:[a-z0-9\-._~!$&'()*+,;=:]|%[0-9a-f]{2})*@)?(?:\[(?:(?:(?:(?:[0-9a-f]{1,4}:){6}|::(?:[0-9a-f]{1,4}:){5}|(?:[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){4}|(?:(?:[0-9a-f]{1,4}:){0,1}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){3}|(?:(?:[0-9a-f]{1,4}:){0,2}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){2}|(?:(?:[0-9a-f]{1,4}:){0,3}[0-9a-f]{1,4})?::[0-9a-f]{1,4}:|(?:(?:[0-9a-f]{1,4}:){0,4}[0-9a-f]{1,4})?::)(?:[0-9a-f]{1,4}:[0-9a-f]{1,4}|(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?))|(?:(?:[0-9a-f]{1,4}:){0,5}[0-9a-f]{1,4})?::[0-9a-f]{1,4}|(?:(?:[0-9a-f]{1,4}:){0,6}[0-9a-f]{1,4})?::)|[Vv][0-9a-f]+\.[a-z0-9\-._~!$&'()*+,;=:]+)\]|(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?)|(?:[a-z0-9\-._~!$&'"()*+,;=]|%[0-9a-f]{2})*)(?::\d*)?(?:\/(?:[a-z0-9\-._~!$&'"()*+,;=:@]|%[0-9a-f]{2})*)*|\/(?:(?:[a-z0-9\-._~!$&'"()*+,;=:@]|%[0-9a-f]{2})+(?:\/(?:[a-z0-9\-._~!$&'"()*+,;=:@]|%[0-9a-f]{2})*)*)?|(?:[a-z0-9\-._~!$&'"()*+,;=:@]|%[0-9a-f]{2})+(?:\/(?:[a-z0-9\-._~!$&'"()*+,;=:@]|%[0-9a-f]{2})*)*)?(?:\?(?:[a-z0-9\-._~!$&'"()*+,;=:@/?]|%[0-9a-f]{2})*)?(?:#(?:[a-z0-9\-._~!$&'"()*+,;=:@/?]|%[0-9a-f]{2})*)?$/i;
var URITEMPLATE = /^(?:(?:[^\x00-\x20"'<>%\\^`{|}]|%[0-9a-f]{2})|\{[+#./;?&=,!@|]?(?:[a-z0-9_]|%[0-9a-f]{2})+(?::[1-9][0-9]{0,3}|\*)?(?:,(?:[a-z0-9_]|%[0-9a-f]{2})+(?::[1-9][0-9]{0,3}|\*)?)*\})*$/i;
var URL2 = /^(?:(?:http[s\u017F]?|ftp):\/\/)(?:(?:[\0-\x08\x0E-\x1F!-\x9F\xA1-\u167F\u1681-\u1FFF\u200B-\u2027\u202A-\u202E\u2030-\u205E\u2060-\u2FFF\u3001-\uD7FF\uE000-\uFEFE\uFF00-\uFFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])+(?::(?:[\0-\x08\x0E-\x1F!-\x9F\xA1-\u167F\u1681-\u1FFF\u200B-\u2027\u202A-\u202E\u2030-\u205E\u2060-\u2FFF\u3001-\uD7FF\uE000-\uFEFE\uFF00-\uFFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])*)?@)?(?:(?!10(?:\.[0-9]{1,3}){3})(?!127(?:\.[0-9]{1,3}){3})(?!169\.254(?:\.[0-9]{1,3}){2})(?!192\.168(?:\.[0-9]{1,3}){2})(?!172\.(?:1[6-9]|2[0-9]|3[01])(?:\.[0-9]{1,3}){2})(?:[1-9][0-9]?|1[0-9][0-9]|2[01][0-9]|22[0-3])(?:\.(?:1?[0-9]{1,2}|2[0-4][0-9]|25[0-5])){2}(?:\.(?:[1-9][0-9]?|1[0-9][0-9]|2[0-4][0-9]|25[0-4]))|(?:(?:(?:[0-9a-z\xA1-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])+-)*(?:[0-9a-z\xA1-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])+)(?:\.(?:(?:[0-9a-z\xA1-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])+-)*(?:[0-9a-z\xA1-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])+)*(?:\.(?:(?:[a-z\xA1-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]){2,})))(?::[0-9]{2,5})?(?:\/(?:[\0-\x08\x0E-\x1F!-\x9F\xA1-\u167F\u1681-\u1FFF\u200B-\u2027\u202A-\u202E\u2030-\u205E\u2060-\u2FFF\u3001-\uD7FF\uE000-\uFEFE\uFF00-\uFFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])*)?$/i;
var UUID = /^(?:urn:uuid:)?[0-9a-f]{8}-(?:[0-9a-f]{4}-){3}[0-9a-f]{12}$/i;
var JSON_POINTER = /^(?:\/(?:[^~/]|~0|~1)*)*$/;
var JSON_POINTER_URI_FRAGMENT = /^#(?:\/(?:[a-z0-9_\-.!$&'()*+,;:=@]|%[0-9a-f]{2}|~0|~1)*)*$/i;
var RELATIVE_JSON_POINTER = /^(?:0|[1-9][0-9]*)(?:#|(?:\/(?:[^~/]|~0|~1)*)*)$/;
module2.exports = formats;
function formats(mode) {
mode = mode == "full" ? "full" : "fast";
return util5.copy(formats[mode]);
}
formats.fast = {
// date: http://tools.ietf.org/html/rfc3339#section-5.6
date: /^\d\d\d\d-[0-1]\d-[0-3]\d$/,
// date-time: http://tools.ietf.org/html/rfc3339#section-5.6
time: /^(?:[0-2]\d:[0-5]\d:[0-5]\d|23:59:60)(?:\.\d+)?(?:z|[+-]\d\d(?::?\d\d)?)?$/i,
"date-time": /^\d\d\d\d-[0-1]\d-[0-3]\d[t\s](?:[0-2]\d:[0-5]\d:[0-5]\d|23:59:60)(?:\.\d+)?(?:z|[+-]\d\d(?::?\d\d)?)$/i,
// uri: https://github.com/mafintosh/is-my-json-valid/blob/master/formats.js
uri: /^(?:[a-z][a-z0-9+\-.]*:)(?:\/?\/)?[^\s]*$/i,
"uri-reference": /^(?:(?:[a-z][a-z0-9+\-.]*:)?\/?\/)?(?:[^\\\s#][^\s#]*)?(?:#[^\\\s]*)?$/i,
"uri-template": URITEMPLATE,
url: URL2,
// email (sources from jsen validator):
// http://stackoverflow.com/questions/201323/using-a-regular-expression-to-validate-an-email-address#answer-8829363
// http://www.w3.org/TR/html5/forms.html#valid-e-mail-address (search for 'willful violation')
email: /^[a-z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?(?:\.[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?)*$/i,
hostname: HOSTNAME,
// optimized https://www.safaribooksonline.com/library/view/regular-expressions-cookbook/9780596802837/ch07s16.html
ipv4: /^(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?)$/,
// optimized http://stackoverflow.com/questions/53497/regular-expression-that-matches-valid-ipv6-addresses
ipv6: /^\s*(?:(?:(?:[0-9a-f]{1,4}:){7}(?:[0-9a-f]{1,4}|:))|(?:(?:[0-9a-f]{1,4}:){6}(?::[0-9a-f]{1,4}|(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(?:(?:[0-9a-f]{1,4}:){5}(?:(?:(?::[0-9a-f]{1,4}){1,2})|:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(?:(?:[0-9a-f]{1,4}:){4}(?:(?:(?::[0-9a-f]{1,4}){1,3})|(?:(?::[0-9a-f]{1,4})?:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(?:(?:[0-9a-f]{1,4}:){3}(?:(?:(?::[0-9a-f]{1,4}){1,4})|(?:(?::[0-9a-f]{1,4}){0,2}:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(?:(?:[0-9a-f]{1,4}:){2}(?:(?:(?::[0-9a-f]{1,4}){1,5})|(?:(?::[0-9a-f]{1,4}){0,3}:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(?:(?:[0-9a-f]{1,4}:){1}(?:(?:(?::[0-9a-f]{1,4}){1,6})|(?:(?::[0-9a-f]{1,4}){0,4}:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(?::(?:(?:(?::[0-9a-f]{1,4}){1,7})|(?:(?::[0-9a-f]{1,4}){0,5}:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:)))(?:%.+)?\s*$/i,
regex,
// uuid: http://tools.ietf.org/html/rfc4122
uuid: UUID,
// JSON-pointer: https://tools.ietf.org/html/rfc6901
// uri fragment: https://tools.ietf.org/html/rfc3986#appendix-A
"json-pointer": JSON_POINTER,
"json-pointer-uri-fragment": JSON_POINTER_URI_FRAGMENT,
// relative JSON-pointer: http://tools.ietf.org/html/draft-luff-relative-json-pointer-00
"relative-json-pointer": RELATIVE_JSON_POINTER
};
formats.full = {
date,
time,
"date-time": date_time,
uri,
"uri-reference": URIREF,
"uri-template": URITEMPLATE,
url: URL2,
email: /^[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$/i,
hostname: HOSTNAME,
ipv4: /^(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?)$/,
ipv6: /^\s*(?:(?:(?:[0-9a-f]{1,4}:){7}(?:[0-9a-f]{1,4}|:))|(?:(?:[0-9a-f]{1,4}:){6}(?::[0-9a-f]{1,4}|(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(?:(?:[0-9a-f]{1,4}:){5}(?:(?:(?::[0-9a-f]{1,4}){1,2})|:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(?:(?:[0-9a-f]{1,4}:){4}(?:(?:(?::[0-9a-f]{1,4}){1,3})|(?:(?::[0-9a-f]{1,4})?:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(?:(?:[0-9a-f]{1,4}:){3}(?:(?:(?::[0-9a-f]{1,4}){1,4})|(?:(?::[0-9a-f]{1,4}){0,2}:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(?:(?:[0-9a-f]{1,4}:){2}(?:(?:(?::[0-9a-f]{1,4}){1,5})|(?:(?::[0-9a-f]{1,4}){0,3}:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(?:(?:[0-9a-f]{1,4}:){1}(?:(?:(?::[0-9a-f]{1,4}){1,6})|(?:(?::[0-9a-f]{1,4}){0,4}:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(?::(?:(?:(?::[0-9a-f]{1,4}){1,7})|(?:(?::[0-9a-f]{1,4}){0,5}:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:)))(?:%.+)?\s*$/i,
regex,
uuid: UUID,
"json-pointer": JSON_POINTER,
"json-pointer-uri-fragment": JSON_POINTER_URI_FRAGMENT,
"relative-json-pointer": RELATIVE_JSON_POINTER
};
function isLeapYear(year) {
return year % 4 === 0 && (year % 100 !== 0 || year % 400 === 0);
}
function date(str) {
var matches = str.match(DATE);
if (!matches) return false;
var year = +matches[1];
var month = +matches[2];
var day = +matches[3];
return month >= 1 && month <= 12 && day >= 1 && day <= (month == 2 && isLeapYear(year) ? 29 : DAYS[month]);
}
function time(str, full) {
var matches = str.match(TIME);
if (!matches) return false;
var hour = matches[1];
var minute = matches[2];
var second = matches[3];
var timeZone = matches[5];
return (hour <= 23 && minute <= 59 && second <= 59 || hour == 23 && minute == 59 && second == 60) && (!full || timeZone);
}
var DATE_TIME_SEPARATOR = /t|\s/i;
function date_time(str) {
var dateTime = str.split(DATE_TIME_SEPARATOR);
return dateTime.length == 2 && date(dateTime[0]) && time(dateTime[1], true);
}
var NOT_URI_FRAGMENT = /\/|:/;
function uri(str) {
return NOT_URI_FRAGMENT.test(str) && URI.test(str);
}
var Z_ANCHOR = /[^\\]\\Z/;
function regex(str) {
if (Z_ANCHOR.test(str)) return false;
try {
new RegExp(str);
return true;
} catch (e) {
return false;
}
}
}
});
// node_modules/ajv/lib/dotjs/ref.js
var require_ref = __commonJS({
"node_modules/ajv/lib/dotjs/ref.js"(exports2, module2) {
"use strict";
module2.exports = function generate_ref(it, $keyword, $ruleType) {
var out = " ";
var $lvl = it.level;
var $dataLvl = it.dataLevel;
var $schema = it.schema[$keyword];
var $errSchemaPath = it.errSchemaPath + "/" + $keyword;
var $breakOnError = !it.opts.allErrors;
var $data = "data" + ($dataLvl || "");
var $valid = "valid" + $lvl;
var $async, $refCode;
if ($schema == "#" || $schema == "#/") {
if (it.isRoot) {
$async = it.async;
$refCode = "validate";
} else {
$async = it.root.schema.$async === true;
$refCode = "root.refVal[0]";
}
} else {
var $refVal = it.resolveRef(it.baseId, $schema, it.isRoot);
if ($refVal === void 0) {
var $message = it.MissingRefError.message(it.baseId, $schema);
if (it.opts.missingRefs == "fail") {
it.logger.error($message);
var $$outStack = $$outStack || [];
$$outStack.push(out);
out = "";
if (it.createErrors !== false) {
out += " { keyword: '$ref' , dataPath: (dataPath || '') + " + it.errorPath + " , schemaPath: " + it.util.toQuotedString($errSchemaPath) + " , params: { ref: '" + it.util.escapeQuotes($schema) + "' } ";
if (it.opts.messages !== false) {
out += " , message: 'can\\'t resolve reference " + it.util.escapeQuotes($schema) + "' ";
}
if (it.opts.verbose) {
out += " , schema: " + it.util.toQuotedString($schema) + " , parentSchema: validate.schema" + it.schemaPath + " , data: " + $data + " ";
}
out += " } ";
} else {
out += " {} ";
}
var __err = out;
out = $$outStack.pop();
if (!it.compositeRule && $breakOnError) {
if (it.async) {
out += " throw new ValidationError([" + __err + "]); ";
} else {
out += " validate.errors = [" + __err + "]; return false; ";
}
} else {
out += " var err = " + __err + "; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ";
}
if ($breakOnError) {
out += " if (false) { ";
}
} else if (it.opts.missingRefs == "ignore") {
it.logger.warn($message);
if ($breakOnError) {
out += " if (true) { ";
}
} else {
throw new it.MissingRefError(it.baseId, $schema, $message);
}
} else if ($refVal.inline) {
var $it = it.util.copy(it);
$it.level++;
var $nextValid = "valid" + $it.level;
$it.schema = $refVal.schema;
$it.schemaPath = "";
$it.errSchemaPath = $schema;
var $code = it.validate($it).replace(/validate\.schema/g, $refVal.code);
out += " " + $code + " ";
if ($breakOnError) {
out += " if (" + $nextValid + ") { ";
}
} else {
$async = $refVal.$async === true || it.async && $refVal.$async !== false;
$refCode = $refVal.code;
}
}
if ($refCode) {
var $$outStack = $$outStack || [];
$$outStack.push(out);
out = "";
if (it.opts.passContext) {
out += " " + $refCode + ".call(this, ";
} else {
out += " " + $refCode + "( ";
}
out += " " + $data + ", (dataPath || '')";
if (it.errorPath != '""') {
out += " + " + it.errorPath;
}
var $parentData = $dataLvl ? "data" + ($dataLvl - 1 || "") : "parentData", $parentDataProperty = $dataLvl ? it.dataPathArr[$dataLvl] : "parentDataProperty";
out += " , " + $parentData + " , " + $parentDataProperty + ", rootData) ";
var __callValidate = out;
out = $$outStack.pop();
if ($async) {
if (!it.async) throw new Error("async schema referenced by sync schema");
if ($breakOnError) {
out += " var " + $valid + "; ";
}
out += " try { await " + __callValidate + "; ";
if ($breakOnError) {
out += " " + $valid + " = true; ";
}
out += " } catch (e) { if (!(e instanceof ValidationError)) throw e; if (vErrors === null) vErrors = e.errors; else vErrors = vErrors.concat(e.errors); errors = vErrors.length; ";
if ($breakOnError) {
out += " " + $valid + " = false; ";
}
out += " } ";
if ($breakOnError) {
out += " if (" + $valid + ") { ";
}
} else {
out += " if (!" + __callValidate + ") { if (vErrors === null) vErrors = " + $refCode + ".errors; else vErrors = vErrors.concat(" + $refCode + ".errors); errors = vErrors.length; } ";
if ($breakOnError) {
out += " else { ";
}
}
}
return out;
};
}
});
// node_modules/ajv/lib/dotjs/allOf.js
var require_allOf = __commonJS({
"node_modules/ajv/lib/dotjs/allOf.js"(exports2, module2) {
"use strict";
module2.exports = function generate_allOf(it, $keyword, $ruleType) {
var out = " ";
var $schema = it.schema[$keyword];
var $schemaPath = it.schemaPath + it.util.getProperty($keyword);
var $errSchemaPath = it.errSchemaPath + "/" + $keyword;
var $breakOnError = !it.opts.allErrors;
var $it = it.util.copy(it);
var $closingBraces = "";
$it.level++;
var $nextValid = "valid" + $it.level;
var $currentBaseId = $it.baseId, $allSchemasEmpty = true;
var arr1 = $schema;
if (arr1) {
var $sch, $i = -1, l1 = arr1.length - 1;
while ($i < l1) {
$sch = arr1[$i += 1];
if (it.opts.strictKeywords ? typeof $sch == "object" && Object.keys($sch).length > 0 || $sch === false : it.util.schemaHasRules($sch, it.RULES.all)) {
$allSchemasEmpty = false;
$it.schema = $sch;
$it.schemaPath = $schemaPath + "[" + $i + "]";
$it.errSchemaPath = $errSchemaPath + "/" + $i;
out += " " + it.validate($it) + " ";
$it.baseId = $currentBaseId;
if ($breakOnError) {
out += " if (" + $nextValid + ") { ";
$closingBraces += "}";
}
}
}
}
if ($breakOnError) {
if ($allSchemasEmpty) {
out += " if (true) { ";
} else {
out += " " + $closingBraces.slice(0, -1) + " ";
}
}
return out;
};
}
});
// node_modules/ajv/lib/dotjs/anyOf.js
var require_anyOf = __commonJS({
"node_modules/ajv/lib/dotjs/anyOf.js"(exports2, module2) {
"use strict";
module2.exports = function generate_anyOf(it, $keyword, $ruleType) {
var out = " ";
var $lvl = it.level;
var $dataLvl = it.dataLevel;
var $schema = it.schema[$keyword];
var $schemaPath = it.schemaPath + it.util.getProperty($keyword);
var $errSchemaPath = it.errSchemaPath + "/" + $keyword;
var $breakOnError = !it.opts.allErrors;
var $data = "data" + ($dataLvl || "");
var $valid = "valid" + $lvl;
var $errs = "errs__" + $lvl;
var $it = it.util.copy(it);
var $closingBraces = "";
$it.level++;
var $nextValid = "valid" + $it.level;
var $noEmptySchema = $schema.every(function($sch2) {
return it.opts.strictKeywords ? typeof $sch2 == "object" && Object.keys($sch2).length > 0 || $sch2 === false : it.util.schemaHasRules($sch2, it.RULES.all);
});
if ($noEmptySchema) {
var $currentBaseId = $it.baseId;
out += " var " + $errs + " = errors; var " + $valid + " = false; ";
var $wasComposite = it.compositeRule;
it.compositeRule = $it.compositeRule = true;
var arr1 = $schema;
if (arr1) {
var $sch, $i = -1, l1 = arr1.length - 1;
while ($i < l1) {
$sch = arr1[$i += 1];
$it.schema = $sch;
$it.schemaPath = $schemaPath + "[" + $i + "]";
$it.errSchemaPath = $errSchemaPath + "/" + $i;
out += " " + it.validate($it) + " ";
$it.baseId = $currentBaseId;
out += " " + $valid + " = " + $valid + " || " + $nextValid + "; if (!" + $valid + ") { ";
$closingBraces += "}";
}
}
it.compositeRule = $it.compositeRule = $wasComposite;
out += " " + $closingBraces + " if (!" + $valid + ") { var err = ";
if (it.createErrors !== false) {
out += " { keyword: 'anyOf' , dataPath: (dataPath || '') + " + it.errorPath + " , schemaPath: " + it.util.toQuotedString($errSchemaPath) + " , params: {} ";
if (it.opts.messages !== false) {
out += " , message: 'should match some schema in anyOf' ";
}
if (it.opts.verbose) {
out += " , schema: validate.schema" + $schemaPath + " , parentSchema: validate.schema" + it.schemaPath + " , data: " + $data + " ";
}
out += " } ";
} else {
out += " {} ";
}
out += "; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ";
if (!it.compositeRule && $breakOnError) {
if (it.async) {
out += " throw new ValidationError(vErrors); ";
} else {
out += " validate.errors = vErrors; return false; ";
}
}
out += " } else { errors = " + $errs + "; if (vErrors !== null) { if (" + $errs + ") vErrors.length = " + $errs + "; else vErrors = null; } ";
if (it.opts.allErrors) {
out += " } ";
}
} else {
if ($breakOnError) {
out += " if (true) { ";
}
}
return out;
};
}
});
// node_modules/ajv/lib/dotjs/comment.js
var require_comment = __commonJS({
"node_modules/ajv/lib/dotjs/comment.js"(exports2, module2) {
"use strict";
module2.exports = function generate_comment(it, $keyword, $ruleType) {
var out = " ";
var $schema = it.schema[$keyword];
var $errSchemaPath = it.errSchemaPath + "/" + $keyword;
var $breakOnError = !it.opts.allErrors;
var $comment = it.util.toQuotedString($schema);
if (it.opts.$comment === true) {
out += " console.log(" + $comment + ");";
} else if (typeof it.opts.$comment == "function") {
out += " self._opts.$comment(" + $comment + ", " + it.util.toQuotedString($errSchemaPath) + ", validate.root.schema);";
}
return out;
};
}
});
// node_modules/ajv/lib/dotjs/const.js
var require_const = __commonJS({
"node_modules/ajv/lib/dotjs/const.js"(exports2, module2) {
"use strict";
module2.exports = function generate_const(it, $keyword, $ruleType) {
var out = " ";
var $lvl = it.level;
var $dataLvl = it.dataLevel;
var $schema = it.schema[$keyword];
var $schemaPath = it.schemaPath + it.util.getProperty($keyword);
var $errSchemaPath = it.errSchemaPath + "/" + $keyword;
var $breakOnError = !it.opts.allErrors;
var $data = "data" + ($dataLvl || "");
var $valid = "valid" + $lvl;
var $isData = it.opts.$data && $schema && $schema.$data, $schemaValue;
if ($isData) {
out += " var schema" + $lvl + " = " + it.util.getData($schema.$data, $dataLvl, it.dataPathArr) + "; ";
$schemaValue = "schema" + $lvl;
} else {
$schemaValue = $schema;
}
if (!$isData) {
out += " var schema" + $lvl + " = validate.schema" + $schemaPath + ";";
}
out += "var " + $valid + " = equal(" + $data + ", schema" + $lvl + "); if (!" + $valid + ") { ";
var $$outStack = $$outStack || [];
$$outStack.push(out);
out = "";
if (it.createErrors !== false) {
out += " { keyword: 'const' , dataPath: (dataPath || '') + " + it.errorPath + " , schemaPath: " + it.util.toQuotedString($errSchemaPath) + " , params: { allowedValue: schema" + $lvl + " } ";
if (it.opts.messages !== false) {
out += " , message: 'should be equal to constant' ";
}
if (it.opts.verbose) {
out += " , schema: validate.schema" + $schemaPath + " , parentSchema: validate.schema" + it.schemaPath + " , data: " + $data + " ";
}
out += " } ";
} else {
out += " {} ";
}
var __err = out;
out = $$outStack.pop();
if (!it.compositeRule && $breakOnError) {
if (it.async) {
out += " throw new ValidationError([" + __err + "]); ";
} else {
out += " validate.errors = [" + __err + "]; return false; ";
}
} else {
out += " var err = " + __err + "; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ";
}
out += " }";
if ($breakOnError) {
out += " else { ";
}
return out;
};
}
});
// node_modules/ajv/lib/dotjs/contains.js
var require_contains = __commonJS({
"node_modules/ajv/lib/dotjs/contains.js"(exports2, module2) {
"use strict";
module2.exports = function generate_contains(it, $keyword, $ruleType) {
var out = " ";
var $lvl = it.level;
var $dataLvl = it.dataLevel;
var $schema = it.schema[$keyword];
var $schemaPath = it.schemaPath + it.util.getProperty($keyword);
var $errSchemaPath = it.errSchemaPath + "/" + $keyword;
var $breakOnError = !it.opts.allErrors;
var $data = "data" + ($dataLvl || "");
var $valid = "valid" + $lvl;
var $errs = "errs__" + $lvl;
var $it = it.util.copy(it);
var $closingBraces = "";
$it.level++;
var $nextValid = "valid" + $it.level;
var $idx = "i" + $lvl, $dataNxt = $it.dataLevel = it.dataLevel + 1, $nextData = "data" + $dataNxt, $currentBaseId = it.baseId, $nonEmptySchema = it.opts.strictKeywords ? typeof $schema == "object" && Object.keys($schema).length > 0 || $schema === false : it.util.schemaHasRules($schema, it.RULES.all);
out += "var " + $errs + " = errors;var " + $valid + ";";
if ($nonEmptySchema) {
var $wasComposite = it.compositeRule;
it.compositeRule = $it.compositeRule = true;
$it.schema = $schema;
$it.schemaPath = $schemaPath;
$it.errSchemaPath = $errSchemaPath;
out += " var " + $nextValid + " = false; for (var " + $idx + " = 0; " + $idx + " < " + $data + ".length; " + $idx + "++) { ";
$it.errorPath = it.util.getPathExpr(it.errorPath, $idx, it.opts.jsonPointers, true);
var $passData = $data + "[" + $idx + "]";
$it.dataPathArr[$dataNxt] = $idx;
var $code = it.validate($it);
$it.baseId = $currentBaseId;
if (it.util.varOccurences($code, $nextData) < 2) {
out += " " + it.util.varReplace($code, $nextData, $passData) + " ";
} else {
out += " var " + $nextData + " = " + $passData + "; " + $code + " ";
}
out += " if (" + $nextValid + ") break; } ";
it.compositeRule = $it.compositeRule = $wasComposite;
out += " " + $closingBraces + " if (!" + $nextValid + ") {";
} else {
out += " if (" + $data + ".length == 0) {";
}
var $$outStack = $$outStack || [];
$$outStack.push(out);
out = "";
if (it.createErrors !== false) {
out += " { keyword: 'contains' , dataPath: (dataPath || '') + " + it.errorPath + " , schemaPath: " + it.util.toQuotedString($errSchemaPath) + " , params: {} ";
if (it.opts.messages !== false) {
out += " , message: 'should contain a valid item' ";
}
if (it.opts.verbose) {
out += " , schema: validate.schema" + $schemaPath + " , parentSchema: validate.schema" + it.schemaPath + " , data: " + $data + " ";
}
out += " } ";
} else {
out += " {} ";
}
var __err = out;
out = $$outStack.pop();
if (!it.compositeRule && $breakOnError) {
if (it.async) {
out += " throw new ValidationError([" + __err + "]); ";
} else {
out += " validate.errors = [" + __err + "]; return false; ";
}
} else {
out += " var err = " + __err + "; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ";
}
out += " } else { ";
if ($nonEmptySchema) {
out += " errors = " + $errs + "; if (vErrors !== null) { if (" + $errs + ") vErrors.length = " + $errs + "; else vErrors = null; } ";
}
if (it.opts.allErrors) {
out += " } ";
}
return out;
};
}
});
// node_modules/ajv/lib/dotjs/dependencies.js
var require_dependencies = __commonJS({
"node_modules/ajv/lib/dotjs/dependencies.js"(exports2, module2) {
"use strict";
module2.exports = function generate_dependencies(it, $keyword, $ruleType) {
var out = " ";
var $lvl = it.level;
var $dataLvl = it.dataLevel;
var $schema = it.schema[$keyword];
var $schemaPath = it.schemaPath + it.util.getProperty($keyword);
var $errSchemaPath = it.errSchemaPath + "/" + $keyword;
var $breakOnError = !it.opts.allErrors;
var $data = "data" + ($dataLvl || "");
var $errs = "errs__" + $lvl;
var $it = it.util.copy(it);
var $closingBraces = "";
$it.level++;
var $nextValid = "valid" + $it.level;
var $schemaDeps = {}, $propertyDeps = {}, $ownProperties = it.opts.ownProperties;
for ($property in $schema) {
if ($property == "__proto__") continue;
var $sch = $schema[$property];
var $deps = Array.isArray($sch) ? $propertyDeps : $schemaDeps;
$deps[$property] = $sch;
}
out += "var " + $errs + " = errors;";
var $currentErrorPath = it.errorPath;
out += "var missing" + $lvl + ";";
for (var $property in $propertyDeps) {
$deps = $propertyDeps[$property];
if ($deps.length) {
out += " if ( " + $data + it.util.getProperty($property) + " !== undefined ";
if ($ownProperties) {
out += " && Object.prototype.hasOwnProperty.call(" + $data + ", '" + it.util.escapeQuotes($property) + "') ";
}
if ($breakOnError) {
out += " && ( ";
var arr1 = $deps;
if (arr1) {
var $propertyKey, $i = -1, l1 = arr1.length - 1;
while ($i < l1) {
$propertyKey = arr1[$i += 1];
if ($i) {
out += " || ";
}
var $prop = it.util.getProperty($propertyKey), $useData = $data + $prop;
out += " ( ( " + $useData + " === undefined ";
if ($ownProperties) {
out += " || ! Object.prototype.hasOwnProperty.call(" + $data + ", '" + it.util.escapeQuotes($propertyKey) + "') ";
}
out += ") && (missing" + $lvl + " = " + it.util.toQuotedString(it.opts.jsonPointers ? $propertyKey : $prop) + ") ) ";
}
}
out += ")) { ";
var $propertyPath = "missing" + $lvl, $missingProperty = "' + " + $propertyPath + " + '";
if (it.opts._errorDataPathProperty) {
it.errorPath = it.opts.jsonPointers ? it.util.getPathExpr($currentErrorPath, $propertyPath, true) : $currentErrorPath + " + " + $propertyPath;
}
var $$outStack = $$outStack || [];
$$outStack.push(out);
out = "";
if (it.createErrors !== false) {
out += " { keyword: 'dependencies' , dataPath: (dataPath || '') + " + it.errorPath + " , schemaPath: " + it.util.toQuotedString($errSchemaPath) + " , params: { property: '" + it.util.escapeQuotes($property) + "', missingProperty: '" + $missingProperty + "', depsCount: " + $deps.length + ", deps: '" + it.util.escapeQuotes($deps.length == 1 ? $deps[0] : $deps.join(", ")) + "' } ";
if (it.opts.messages !== false) {
out += " , message: 'should have ";
if ($deps.length == 1) {
out += "property " + it.util.escapeQuotes($deps[0]);
} else {
out += "properties " + it.util.escapeQuotes($deps.join(", "));
}
out += " when property " + it.util.escapeQuotes($property) + " is present' ";
}
if (it.opts.verbose) {
out += " , schema: validate.schema" + $schemaPath + " , parentSchema: validate.schema" + it.schemaPath + " , data: " + $data + " ";
}
out += " } ";
} else {
out += " {} ";
}
var __err = out;
out = $$outStack.pop();
if (!it.compositeRule && $breakOnError) {
if (it.async) {
out += " throw new ValidationError([" + __err + "]); ";
} else {
out += " validate.errors = [" + __err + "]; return false; ";
}
} else {
out += " var err = " + __err + "; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ";
}
} else {
out += " ) { ";
var arr2 = $deps;
if (arr2) {
var $propertyKey, i2 = -1, l2 = arr2.length - 1;
while (i2 < l2) {
$propertyKey = arr2[i2 += 1];
var $prop = it.util.getProperty($propertyKey), $missingProperty = it.util.escapeQuotes($propertyKey), $useData = $data + $prop;
if (it.opts._errorDataPathProperty) {
it.errorPath = it.util.getPath($currentErrorPath, $propertyKey, it.opts.jsonPointers);
}
out += " if ( " + $useData + " === undefined ";
if ($ownProperties) {
out += " || ! Object.prototype.hasOwnProperty.call(" + $data + ", '" + it.util.escapeQuotes($propertyKey) + "') ";
}
out += ") { var err = ";
if (it.createErrors !== false) {
out += " { keyword: 'dependencies' , dataPath: (dataPath || '') + " + it.errorPath + " , schemaPath: " + it.util.toQuotedString($errSchemaPath) + " , params: { property: '" + it.util.escapeQuotes($property) + "', missingProperty: '" + $missingProperty + "', depsCount: " + $deps.length + ", deps: '" + it.util.escapeQuotes($deps.length == 1 ? $deps[0] : $deps.join(", ")) + "' } ";
if (it.opts.messages !== false) {
out += " , message: 'should have ";
if ($deps.length == 1) {
out += "property " + it.util.escapeQuotes($deps[0]);
} else {
out += "properties " + it.util.escapeQuotes($deps.join(", "));
}
out += " when property " + it.util.escapeQuotes($property) + " is present' ";
}
if (it.opts.verbose) {
out += " , schema: validate.schema" + $schemaPath + " , parentSchema: validate.schema" + it.schemaPath + " , data: " + $data + " ";
}
out += " } ";
} else {
out += " {} ";
}
out += "; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; } ";
}
}
}
out += " } ";
if ($breakOnError) {
$closingBraces += "}";
out += " else { ";
}
}
}
it.errorPath = $currentErrorPath;
var $currentBaseId = $it.baseId;
for (var $property in $schemaDeps) {
var $sch = $schemaDeps[$property];
if (it.opts.strictKeywords ? typeof $sch == "object" && Object.keys($sch).length > 0 || $sch === false : it.util.schemaHasRules($sch, it.RULES.all)) {
out += " " + $nextValid + " = true; if ( " + $data + it.util.getProperty($property) + " !== undefined ";
if ($ownProperties) {
out += " && Object.prototype.hasOwnProperty.call(" + $data + ", '" + it.util.escapeQuotes($property) + "') ";
}
out += ") { ";
$it.schema = $sch;
$it.schemaPath = $schemaPath + it.util.getProperty($property);
$it.errSchemaPath = $errSchemaPath + "/" + it.util.escapeFragment($property);
out += " " + it.validate($it) + " ";
$it.baseId = $currentBaseId;
out += " } ";
if ($breakOnError) {
out += " if (" + $nextValid + ") { ";
$closingBraces += "}";
}
}
}
if ($breakOnError) {
out += " " + $closingBraces + " if (" + $errs + " == errors) {";
}
return out;
};
}
});
// node_modules/ajv/lib/dotjs/enum.js
var require_enum = __commonJS({
"node_modules/ajv/lib/dotjs/enum.js"(exports2, module2) {
"use strict";
module2.exports = function generate_enum(it, $keyword, $ruleType) {
var out = " ";
var $lvl = it.level;
var $dataLvl = it.dataLevel;
var $schema = it.schema[$keyword];
var $schemaPath = it.schemaPath + it.util.getProperty($keyword);
var $errSchemaPath = it.errSchemaPath + "/" + $keyword;
var $breakOnError = !it.opts.allErrors;
var $data = "data" + ($dataLvl || "");
var $valid = "valid" + $lvl;
var $isData = it.opts.$data && $schema && $schema.$data, $schemaValue;
if ($isData) {
out += " var schema" + $lvl + " = " + it.util.getData($schema.$data, $dataLvl, it.dataPathArr) + "; ";
$schemaValue = "schema" + $lvl;
} else {
$schemaValue = $schema;
}
var $i = "i" + $lvl, $vSchema = "schema" + $lvl;
if (!$isData) {
out += " var " + $vSchema + " = validate.schema" + $schemaPath + ";";
}
out += "var " + $valid + ";";
if ($isData) {
out += " if (schema" + $lvl + " === undefined) " + $valid + " = true; else if (!Array.isArray(schema" + $lvl + ")) " + $valid + " = false; else {";
}
out += "" + $valid + " = false;for (var " + $i + "=0; " + $i + "<" + $vSchema + ".length; " + $i + "++) if (equal(" + $data + ", " + $vSchema + "[" + $i + "])) { " + $valid + " = true; break; }";
if ($isData) {
out += " } ";
}
out += " if (!" + $valid + ") { ";
var $$outStack = $$outStack || [];
$$outStack.push(out);
out = "";
if (it.createErrors !== false) {
out += " { keyword: 'enum' , dataPath: (dataPath || '') + " + it.errorPath + " , schemaPath: " + it.util.toQuotedString($errSchemaPath) + " , params: { allowedValues: schema" + $lvl + " } ";
if (it.opts.messages !== false) {
out += " , message: 'should be equal to one of the allowed values' ";
}
if (it.opts.verbose) {
out += " , schema: validate.schema" + $schemaPath + " , parentSchema: validate.schema" + it.schemaPath + " , data: " + $data + " ";
}
out += " } ";
} else {
out += " {} ";
}
var __err = out;
out = $$outStack.pop();
if (!it.compositeRule && $breakOnError) {
if (it.async) {
out += " throw new ValidationError([" + __err + "]); ";
} else {
out += " validate.errors = [" + __err + "]; return false; ";
}
} else {
out += " var err = " + __err + "; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ";
}
out += " }";
if ($breakOnError) {
out += " else { ";
}
return out;
};
}
});
// node_modules/ajv/lib/dotjs/format.js
var require_format = __commonJS({
"node_modules/ajv/lib/dotjs/format.js"(exports2, module2) {
"use strict";
module2.exports = function generate_format(it, $keyword, $ruleType) {
var out = " ";
var $lvl = it.level;
var $dataLvl = it.dataLevel;
var $schema = it.schema[$keyword];
var $schemaPath = it.schemaPath + it.util.getProperty($keyword);
var $errSchemaPath = it.errSchemaPath + "/" + $keyword;
var $breakOnError = !it.opts.allErrors;
var $data = "data" + ($dataLvl || "");
if (it.opts.format === false) {
if ($breakOnError) {
out += " if (true) { ";
}
return out;
}
var $isData = it.opts.$data && $schema && $schema.$data, $schemaValue;
if ($isData) {
out += " var schema" + $lvl + " = " + it.util.getData($schema.$data, $dataLvl, it.dataPathArr) + "; ";
$schemaValue = "schema" + $lvl;
} else {
$schemaValue = $schema;
}
var $unknownFormats = it.opts.unknownFormats, $allowUnknown = Array.isArray($unknownFormats);
if ($isData) {
var $format = "format" + $lvl, $isObject = "isObject" + $lvl, $formatType = "formatType" + $lvl;
out += " var " + $format + " = formats[" + $schemaValue + "]; var " + $isObject + " = typeof " + $format + " == 'object' && !(" + $format + " instanceof RegExp) && " + $format + ".validate; var " + $formatType + " = " + $isObject + " && " + $format + ".type || 'string'; if (" + $isObject + ") { ";
if (it.async) {
out += " var async" + $lvl + " = " + $format + ".async; ";
}
out += " " + $format + " = " + $format + ".validate; } if ( ";
if ($isData) {
out += " (" + $schemaValue + " !== undefined && typeof " + $schemaValue + " != 'string') || ";
}
out += " (";
if ($unknownFormats != "ignore") {
out += " (" + $schemaValue + " && !" + $format + " ";
if ($allowUnknown) {
out += " && self._opts.unknownFormats.indexOf(" + $schemaValue + ") == -1 ";
}
out += ") || ";
}
out += " (" + $format + " && " + $formatType + " == '" + $ruleType + "' && !(typeof " + $format + " == 'function' ? ";
if (it.async) {
out += " (async" + $lvl + " ? await " + $format + "(" + $data + ") : " + $format + "(" + $data + ")) ";
} else {
out += " " + $format + "(" + $data + ") ";
}
out += " : " + $format + ".test(" + $data + "))))) {";
} else {
var $format = it.formats[$schema];
if (!$format) {
if ($unknownFormats == "ignore") {
it.logger.warn('unknown format "' + $schema + '" ignored in schema at path "' + it.errSchemaPath + '"');
if ($breakOnError) {
out += " if (true) { ";
}
return out;
} else if ($allowUnknown && $unknownFormats.indexOf($schema) >= 0) {
if ($breakOnError) {
out += " if (true) { ";
}
return out;
} else {
throw new Error('unknown format "' + $schema + '" is used in schema at path "' + it.errSchemaPath + '"');
}
}
var $isObject = typeof $format == "object" && !($format instanceof RegExp) && $format.validate;
var $formatType = $isObject && $format.type || "string";
if ($isObject) {
var $async = $format.async === true;
$format = $format.validate;
}
if ($formatType != $ruleType) {
if ($breakOnError) {
out += " if (true) { ";
}
return out;
}
if ($async) {
if (!it.async) throw new Error("async format in sync schema");
var $formatRef = "formats" + it.util.getProperty($schema) + ".validate";
out += " if (!(await " + $formatRef + "(" + $data + "))) { ";
} else {
out += " if (! ";
var $formatRef = "formats" + it.util.getProperty($schema);
if ($isObject) $formatRef += ".validate";
if (typeof $format == "function") {
out += " " + $formatRef + "(" + $data + ") ";
} else {
out += " " + $formatRef + ".test(" + $data + ") ";
}
out += ") { ";
}
}
var $$outStack = $$outStack || [];
$$outStack.push(out);
out = "";
if (it.createErrors !== false) {
out += " { keyword: 'format' , dataPath: (dataPath || '') + " + it.errorPath + " , schemaPath: " + it.util.toQuotedString($errSchemaPath) + " , params: { format: ";
if ($isData) {
out += "" + $schemaValue;
} else {
out += "" + it.util.toQuotedString($schema);
}
out += " } ";
if (it.opts.messages !== false) {
out += ` , message: 'should match format "`;
if ($isData) {
out += "' + " + $schemaValue + " + '";
} else {
out += "" + it.util.escapeQuotes($schema);
}
out += `"' `;
}
if (it.opts.verbose) {
out += " , schema: ";
if ($isData) {
out += "validate.schema" + $schemaPath;
} else {
out += "" + it.util.toQuotedString($schema);
}
out += " , parentSchema: validate.schema" + it.schemaPath + " , data: " + $data + " ";
}
out += " } ";
} else {
out += " {} ";
}
var __err = out;
out = $$outStack.pop();
if (!it.compositeRule && $breakOnError) {
if (it.async) {
out += " throw new ValidationError([" + __err + "]); ";
} else {
out += " validate.errors = [" + __err + "]; return false; ";
}
} else {
out += " var err = " + __err + "; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ";
}
out += " } ";
if ($breakOnError) {
out += " else { ";
}
return out;
};
}
});
// node_modules/ajv/lib/dotjs/if.js
var require_if = __commonJS({
"node_modules/ajv/lib/dotjs/if.js"(exports2, module2) {
"use strict";
module2.exports = function generate_if(it, $keyword, $ruleType) {
var out = " ";
var $lvl = it.level;
var $dataLvl = it.dataLevel;
var $schema = it.schema[$keyword];
var $schemaPath = it.schemaPath + it.util.getProperty($keyword);
var $errSchemaPath = it.errSchemaPath + "/" + $keyword;
var $breakOnError = !it.opts.allErrors;
var $data = "data" + ($dataLvl || "");
var $valid = "valid" + $lvl;
var $errs = "errs__" + $lvl;
var $it = it.util.copy(it);
$it.level++;
var $nextValid = "valid" + $it.level;
var $thenSch = it.schema["then"], $elseSch = it.schema["else"], $thenPresent = $thenSch !== void 0 && (it.opts.strictKeywords ? typeof $thenSch == "object" && Object.keys($thenSch).length > 0 || $thenSch === false : it.util.schemaHasRules($thenSch, it.RULES.all)), $elsePresent = $elseSch !== void 0 && (it.opts.strictKeywords ? typeof $elseSch == "object" && Object.keys($elseSch).length > 0 || $elseSch === false : it.util.schemaHasRules($elseSch, it.RULES.all)), $currentBaseId = $it.baseId;
if ($thenPresent || $elsePresent) {
var $ifClause;
$it.createErrors = false;
$it.schema = $schema;
$it.schemaPath = $schemaPath;
$it.errSchemaPath = $errSchemaPath;
out += " var " + $errs + " = errors; var " + $valid + " = true; ";
var $wasComposite = it.compositeRule;
it.compositeRule = $it.compositeRule = true;
out += " " + it.validate($it) + " ";
$it.baseId = $currentBaseId;
$it.createErrors = true;
out += " errors = " + $errs + "; if (vErrors !== null) { if (" + $errs + ") vErrors.length = " + $errs + "; else vErrors = null; } ";
it.compositeRule = $it.compositeRule = $wasComposite;
if ($thenPresent) {
out += " if (" + $nextValid + ") { ";
$it.schema = it.schema["then"];
$it.schemaPath = it.schemaPath + ".then";
$it.errSchemaPath = it.errSchemaPath + "/then";
out += " " + it.validate($it) + " ";
$it.baseId = $currentBaseId;
out += " " + $valid + " = " + $nextValid + "; ";
if ($thenPresent && $elsePresent) {
$ifClause = "ifClause" + $lvl;
out += " var " + $ifClause + " = 'then'; ";
} else {
$ifClause = "'then'";
}
out += " } ";
if ($elsePresent) {
out += " else { ";
}
} else {
out += " if (!" + $nextValid + ") { ";
}
if ($elsePresent) {
$it.schema = it.schema["else"];
$it.schemaPath = it.schemaPath + ".else";
$it.errSchemaPath = it.errSchemaPath + "/else";
out += " " + it.validate($it) + " ";
$it.baseId = $currentBaseId;
out += " " + $valid + " = " + $nextValid + "; ";
if ($thenPresent && $elsePresent) {
$ifClause = "ifClause" + $lvl;
out += " var " + $ifClause + " = 'else'; ";
} else {
$ifClause = "'else'";
}
out += " } ";
}
out += " if (!" + $valid + ") { var err = ";
if (it.createErrors !== false) {
out += " { keyword: 'if' , dataPath: (dataPath || '') + " + it.errorPath + " , schemaPath: " + it.util.toQuotedString($errSchemaPath) + " , params: { failingKeyword: " + $ifClause + " } ";
if (it.opts.messages !== false) {
out += ` , message: 'should match "' + ` + $ifClause + ` + '" schema' `;
}
if (it.opts.verbose) {
out += " , schema: validate.schema" + $schemaPath + " , parentSchema: validate.schema" + it.schemaPath + " , data: " + $data + " ";
}
out += " } ";
} else {
out += " {} ";
}
out += "; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ";
if (!it.compositeRule && $breakOnError) {
if (it.async) {
out += " throw new ValidationError(vErrors); ";
} else {
out += " validate.errors = vErrors; return false; ";
}
}
out += " } ";
if ($breakOnError) {
out += " else { ";
}
} else {
if ($breakOnError) {
out += " if (true) { ";
}
}
return out;
};
}
});
// node_modules/ajv/lib/dotjs/items.js
var require_items = __commonJS({
"node_modules/ajv/lib/dotjs/items.js"(exports2, module2) {
"use strict";
module2.exports = function generate_items(it, $keyword, $ruleType) {
var out = " ";
var $lvl = it.level;
var $dataLvl = it.dataLevel;
var $schema = it.schema[$keyword];
var $schemaPath = it.schemaPath + it.util.getProperty($keyword);
var $errSchemaPath = it.errSchemaPath + "/" + $keyword;
var $breakOnError = !it.opts.allErrors;
var $data = "data" + ($dataLvl || "");
var $valid = "valid" + $lvl;
var $errs = "errs__" + $lvl;
var $it = it.util.copy(it);
var $closingBraces = "";
$it.level++;
var $nextValid = "valid" + $it.level;
var $idx = "i" + $lvl, $dataNxt = $it.dataLevel = it.dataLevel + 1, $nextData = "data" + $dataNxt, $currentBaseId = it.baseId;
out += "var " + $errs + " = errors;var " + $valid + ";";
if (Array.isArray($schema)) {
var $additionalItems = it.schema.additionalItems;
if ($additionalItems === false) {
out += " " + $valid + " = " + $data + ".length <= " + $schema.length + "; ";
var $currErrSchemaPath = $errSchemaPath;
$errSchemaPath = it.errSchemaPath + "/additionalItems";
out += " if (!" + $valid + ") { ";
var $$outStack = $$outStack || [];
$$outStack.push(out);
out = "";
if (it.createErrors !== false) {
out += " { keyword: 'additionalItems' , dataPath: (dataPath || '') + " + it.errorPath + " , schemaPath: " + it.util.toQuotedString($errSchemaPath) + " , params: { limit: " + $schema.length + " } ";
if (it.opts.messages !== false) {
out += " , message: 'should NOT have more than " + $schema.length + " items' ";
}
if (it.opts.verbose) {
out += " , schema: false , parentSchema: validate.schema" + it.schemaPath + " , data: " + $data + " ";
}
out += " } ";
} else {
out += " {} ";
}
var __err = out;
out = $$outStack.pop();
if (!it.compositeRule && $breakOnError) {
if (it.async) {
out += " throw new ValidationError([" + __err + "]); ";
} else {
out += " validate.errors = [" + __err + "]; return false; ";
}
} else {
out += " var err = " + __err + "; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ";
}
out += " } ";
$errSchemaPath = $currErrSchemaPath;
if ($breakOnError) {
$closingBraces += "}";
out += " else { ";
}
}
var arr1 = $schema;
if (arr1) {
var $sch, $i = -1, l1 = arr1.length - 1;
while ($i < l1) {
$sch = arr1[$i += 1];
if (it.opts.strictKeywords ? typeof $sch == "object" && Object.keys($sch).length > 0 || $sch === false : it.util.schemaHasRules($sch, it.RULES.all)) {
out += " " + $nextValid + " = true; if (" + $data + ".length > " + $i + ") { ";
var $passData = $data + "[" + $i + "]";
$it.schema = $sch;
$it.schemaPath = $schemaPath + "[" + $i + "]";
$it.errSchemaPath = $errSchemaPath + "/" + $i;
$it.errorPath = it.util.getPathExpr(it.errorPath, $i, it.opts.jsonPointers, true);
$it.dataPathArr[$dataNxt] = $i;
var $code = it.validate($it);
$it.baseId = $currentBaseId;
if (it.util.varOccurences($code, $nextData) < 2) {
out += " " + it.util.varReplace($code, $nextData, $passData) + " ";
} else {
out += " var " + $nextData + " = " + $passData + "; " + $code + " ";
}
out += " } ";
if ($breakOnError) {
out += " if (" + $nextValid + ") { ";
$closingBraces += "}";
}
}
}
}
if (typeof $additionalItems == "object" && (it.opts.strictKeywords ? typeof $additionalItems == "object" && Object.keys($additionalItems).length > 0 || $additionalItems === false : it.util.schemaHasRules($additionalItems, it.RULES.all))) {
$it.schema = $additionalItems;
$it.schemaPath = it.schemaPath + ".additionalItems";
$it.errSchemaPath = it.errSchemaPath + "/additionalItems";
out += " " + $nextValid + " = true; if (" + $data + ".length > " + $schema.length + ") { for (var " + $idx + " = " + $schema.length + "; " + $idx + " < " + $data + ".length; " + $idx + "++) { ";
$it.errorPath = it.util.getPathExpr(it.errorPath, $idx, it.opts.jsonPointers, true);
var $passData = $data + "[" + $idx + "]";
$it.dataPathArr[$dataNxt] = $idx;
var $code = it.validate($it);
$it.baseId = $currentBaseId;
if (it.util.varOccurences($code, $nextData) < 2) {
out += " " + it.util.varReplace($code, $nextData, $passData) + " ";
} else {
out += " var " + $nextData + " = " + $passData + "; " + $code + " ";
}
if ($breakOnError) {
out += " if (!" + $nextValid + ") break; ";
}
out += " } } ";
if ($breakOnError) {
out += " if (" + $nextValid + ") { ";
$closingBraces += "}";
}
}
} else if (it.opts.strictKeywords ? typeof $schema == "object" && Object.keys($schema).length > 0 || $schema === false : it.util.schemaHasRules($schema, it.RULES.all)) {
$it.schema = $schema;
$it.schemaPath = $schemaPath;
$it.errSchemaPath = $errSchemaPath;
out += " for (var " + $idx + " = 0; " + $idx + " < " + $data + ".length; " + $idx + "++) { ";
$it.errorPath = it.util.getPathExpr(it.errorPath, $idx, it.opts.jsonPointers, true);
var $passData = $data + "[" + $idx + "]";
$it.dataPathArr[$dataNxt] = $idx;
var $code = it.validate($it);
$it.baseId = $currentBaseId;
if (it.util.varOccurences($code, $nextData) < 2) {
out += " " + it.util.varReplace($code, $nextData, $passData) + " ";
} else {
out += " var " + $nextData + " = " + $passData + "; " + $code + " ";
}
if ($breakOnError) {
out += " if (!" + $nextValid + ") break; ";
}
out += " }";
}
if ($breakOnError) {
out += " " + $closingBraces + " if (" + $errs + " == errors) {";
}
return out;
};
}
});
// node_modules/ajv/lib/dotjs/_limit.js
var require_limit = __commonJS({
"node_modules/ajv/lib/dotjs/_limit.js"(exports2, module2) {
"use strict";
module2.exports = function generate__limit(it, $keyword, $ruleType) {
var out = " ";
var $lvl = it.level;
var $dataLvl = it.dataLevel;
var $schema = it.schema[$keyword];
var $schemaPath = it.schemaPath + it.util.getProperty($keyword);
var $errSchemaPath = it.errSchemaPath + "/" + $keyword;
var $breakOnError = !it.opts.allErrors;
var $errorKeyword;
var $data = "data" + ($dataLvl || "");
var $isData = it.opts.$data && $schema && $schema.$data, $schemaValue;
if ($isData) {
out += " var schema" + $lvl + " = " + it.util.getData($schema.$data, $dataLvl, it.dataPathArr) + "; ";
$schemaValue = "schema" + $lvl;
} else {
$schemaValue = $schema;
}
var $isMax = $keyword == "maximum", $exclusiveKeyword = $isMax ? "exclusiveMaximum" : "exclusiveMinimum", $schemaExcl = it.schema[$exclusiveKeyword], $isDataExcl = it.opts.$data && $schemaExcl && $schemaExcl.$data, $op = $isMax ? "<" : ">", $notOp = $isMax ? ">" : "<", $errorKeyword = void 0;
if (!($isData || typeof $schema == "number" || $schema === void 0)) {
throw new Error($keyword + " must be number");
}
if (!($isDataExcl || $schemaExcl === void 0 || typeof $schemaExcl == "number" || typeof $schemaExcl == "boolean")) {
throw new Error($exclusiveKeyword + " must be number or boolean");
}
if ($isDataExcl) {
var $schemaValueExcl = it.util.getData($schemaExcl.$data, $dataLvl, it.dataPathArr), $exclusive = "exclusive" + $lvl, $exclType = "exclType" + $lvl, $exclIsNumber = "exclIsNumber" + $lvl, $opExpr = "op" + $lvl, $opStr = "' + " + $opExpr + " + '";
out += " var schemaExcl" + $lvl + " = " + $schemaValueExcl + "; ";
$schemaValueExcl = "schemaExcl" + $lvl;
out += " var " + $exclusive + "; var " + $exclType + " = typeof " + $schemaValueExcl + "; if (" + $exclType + " != 'boolean' && " + $exclType + " != 'undefined' && " + $exclType + " != 'number') { ";
var $errorKeyword = $exclusiveKeyword;
var $$outStack = $$outStack || [];
$$outStack.push(out);
out = "";
if (it.createErrors !== false) {
out += " { keyword: '" + ($errorKeyword || "_exclusiveLimit") + "' , dataPath: (dataPath || '') + " + it.errorPath + " , schemaPath: " + it.util.toQuotedString($errSchemaPath) + " , params: {} ";
if (it.opts.messages !== false) {
out += " , message: '" + $exclusiveKeyword + " should be boolean' ";
}
if (it.opts.verbose) {
out += " , schema: validate.schema" + $schemaPath + " , parentSchema: validate.schema" + it.schemaPath + " , data: " + $data + " ";
}
out += " } ";
} else {
out += " {} ";
}
var __err = out;
out = $$outStack.pop();
if (!it.compositeRule && $breakOnError) {
if (it.async) {
out += " throw new ValidationError([" + __err + "]); ";
} else {
out += " validate.errors = [" + __err + "]; return false; ";
}
} else {
out += " var err = " + __err + "; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ";
}
out += " } else if ( ";
if ($isData) {
out += " (" + $schemaValue + " !== undefined && typeof " + $schemaValue + " != 'number') || ";
}
out += " " + $exclType + " == 'number' ? ( (" + $exclusive + " = " + $schemaValue + " === undefined || " + $schemaValueExcl + " " + $op + "= " + $schemaValue + ") ? " + $data + " " + $notOp + "= " + $schemaValueExcl + " : " + $data + " " + $notOp + " " + $schemaValue + " ) : ( (" + $exclusive + " = " + $schemaValueExcl + " === true) ? " + $data + " " + $notOp + "= " + $schemaValue + " : " + $data + " " + $notOp + " " + $schemaValue + " ) || " + $data + " !== " + $data + ") { var op" + $lvl + " = " + $exclusive + " ? '" + $op + "' : '" + $op + "='; ";
if ($schema === void 0) {
$errorKeyword = $exclusiveKeyword;
$errSchemaPath = it.errSchemaPath + "/" + $exclusiveKeyword;
$schemaValue = $schemaValueExcl;
$isData = $isDataExcl;
}
} else {
var $exclIsNumber = typeof $schemaExcl == "number", $opStr = $op;
if ($exclIsNumber && $isData) {
var $opExpr = "'" + $opStr + "'";
out += " if ( ";
if ($isData) {
out += " (" + $schemaValue + " !== undefined && typeof " + $schemaValue + " != 'number') || ";
}
out += " ( " + $schemaValue + " === undefined || " + $schemaExcl + " " + $op + "= " + $schemaValue + " ? " + $data + " " + $notOp + "= " + $schemaExcl + " : " + $data + " " + $notOp + " " + $schemaValue + " ) || " + $data + " !== " + $data + ") { ";
} else {
if ($exclIsNumber && $schema === void 0) {
$exclusive = true;
$errorKeyword = $exclusiveKeyword;
$errSchemaPath = it.errSchemaPath + "/" + $exclusiveKeyword;
$schemaValue = $schemaExcl;
$notOp += "=";
} else {
if ($exclIsNumber) $schemaValue = Math[$isMax ? "min" : "max"]($schemaExcl, $schema);
if ($schemaExcl === ($exclIsNumber ? $schemaValue : true)) {
$exclusive = true;
$errorKeyword = $exclusiveKeyword;
$errSchemaPath = it.errSchemaPath + "/" + $exclusiveKeyword;
$notOp += "=";
} else {
$exclusive = false;
$opStr += "=";
}
}
var $opExpr = "'" + $opStr + "'";
out += " if ( ";
if ($isData) {
out += " (" + $schemaValue + " !== undefined && typeof " + $schemaValue + " != 'number') || ";
}
out += " " + $data + " " + $notOp + " " + $schemaValue + " || " + $data + " !== " + $data + ") { ";
}
}
$errorKeyword = $errorKeyword || $keyword;
var $$outStack = $$outStack || [];
$$outStack.push(out);
out = "";
if (it.createErrors !== false) {
out += " { keyword: '" + ($errorKeyword || "_limit") + "' , dataPath: (dataPath || '') + " + it.errorPath + " , schemaPath: " + it.util.toQuotedString($errSchemaPath) + " , params: { comparison: " + $opExpr + ", limit: " + $schemaValue + ", exclusive: " + $exclusive + " } ";
if (it.opts.messages !== false) {
out += " , message: 'should be " + $opStr + " ";
if ($isData) {
out += "' + " + $schemaValue;
} else {
out += "" + $schemaValue + "'";
}
}
if (it.opts.verbose) {
out += " , schema: ";
if ($isData) {
out += "validate.schema" + $schemaPath;
} else {
out += "" + $schema;
}
out += " , parentSchema: validate.schema" + it.schemaPath + " , data: " + $data + " ";
}
out += " } ";
} else {
out += " {} ";
}
var __err = out;
out = $$outStack.pop();
if (!it.compositeRule && $breakOnError) {
if (it.async) {
out += " throw new ValidationError([" + __err + "]); ";
} else {
out += " validate.errors = [" + __err + "]; return false; ";
}
} else {
out += " var err = " + __err + "; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ";
}
out += " } ";
if ($breakOnError) {
out += " else { ";
}
return out;
};
}
});
// node_modules/ajv/lib/dotjs/_limitItems.js
var require_limitItems = __commonJS({
"node_modules/ajv/lib/dotjs/_limitItems.js"(exports2, module2) {
"use strict";
module2.exports = function generate__limitItems(it, $keyword, $ruleType) {
var out = " ";
var $lvl = it.level;
var $dataLvl = it.dataLevel;
var $schema = it.schema[$keyword];
var $schemaPath = it.schemaPath + it.util.getProperty($keyword);
var $errSchemaPath = it.errSchemaPath + "/" + $keyword;
var $breakOnError = !it.opts.allErrors;
var $errorKeyword;
var $data = "data" + ($dataLvl || "");
var $isData = it.opts.$data && $schema && $schema.$data, $schemaValue;
if ($isData) {
out += " var schema" + $lvl + " = " + it.util.getData($schema.$data, $dataLvl, it.dataPathArr) + "; ";
$schemaValue = "schema" + $lvl;
} else {
$schemaValue = $schema;
}
if (!($isData || typeof $schema == "number")) {
throw new Error($keyword + " must be number");
}
var $op = $keyword == "maxItems" ? ">" : "<";
out += "if ( ";
if ($isData) {
out += " (" + $schemaValue + " !== undefined && typeof " + $schemaValue + " != 'number') || ";
}
out += " " + $data + ".length " + $op + " " + $schemaValue + ") { ";
var $errorKeyword = $keyword;
var $$outStack = $$outStack || [];
$$outStack.push(out);
out = "";
if (it.createErrors !== false) {
out += " { keyword: '" + ($errorKeyword || "_limitItems") + "' , dataPath: (dataPath || '') + " + it.errorPath + " , schemaPath: " + it.util.toQuotedString($errSchemaPath) + " , params: { limit: " + $schemaValue + " } ";
if (it.opts.messages !== false) {
out += " , message: 'should NOT have ";
if ($keyword == "maxItems") {
out += "more";
} else {
out += "fewer";
}
out += " than ";
if ($isData) {
out += "' + " + $schemaValue + " + '";
} else {
out += "" + $schema;
}
out += " items' ";
}
if (it.opts.verbose) {
out += " , schema: ";
if ($isData) {
out += "validate.schema" + $schemaPath;
} else {
out += "" + $schema;
}
out += " , parentSchema: validate.schema" + it.schemaPath + " , data: " + $data + " ";
}
out += " } ";
} else {
out += " {} ";
}
var __err = out;
out = $$outStack.pop();
if (!it.compositeRule && $breakOnError) {
if (it.async) {
out += " throw new ValidationError([" + __err + "]); ";
} else {
out += " validate.errors = [" + __err + "]; return false; ";
}
} else {
out += " var err = " + __err + "; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ";
}
out += "} ";
if ($breakOnError) {
out += " else { ";
}
return out;
};
}
});
// node_modules/ajv/lib/dotjs/_limitLength.js
var require_limitLength = __commonJS({
"node_modules/ajv/lib/dotjs/_limitLength.js"(exports2, module2) {
"use strict";
module2.exports = function generate__limitLength(it, $keyword, $ruleType) {
var out = " ";
var $lvl = it.level;
var $dataLvl = it.dataLevel;
var $schema = it.schema[$keyword];
var $schemaPath = it.schemaPath + it.util.getProperty($keyword);
var $errSchemaPath = it.errSchemaPath + "/" + $keyword;
var $breakOnError = !it.opts.allErrors;
var $errorKeyword;
var $data = "data" + ($dataLvl || "");
var $isData = it.opts.$data && $schema && $schema.$data, $schemaValue;
if ($isData) {
out += " var schema" + $lvl + " = " + it.util.getData($schema.$data, $dataLvl, it.dataPathArr) + "; ";
$schemaValue = "schema" + $lvl;
} else {
$schemaValue = $schema;
}
if (!($isData || typeof $schema == "number")) {
throw new Error($keyword + " must be number");
}
var $op = $keyword == "maxLength" ? ">" : "<";
out += "if ( ";
if ($isData) {
out += " (" + $schemaValue + " !== undefined && typeof " + $schemaValue + " != 'number') || ";
}
if (it.opts.unicode === false) {
out += " " + $data + ".length ";
} else {
out += " ucs2length(" + $data + ") ";
}
out += " " + $op + " " + $schemaValue + ") { ";
var $errorKeyword = $keyword;
var $$outStack = $$outStack || [];
$$outStack.push(out);
out = "";
if (it.createErrors !== false) {
out += " { keyword: '" + ($errorKeyword || "_limitLength") + "' , dataPath: (dataPath || '') + " + it.errorPath + " , schemaPath: " + it.util.toQuotedString($errSchemaPath) + " , params: { limit: " + $schemaValue + " } ";
if (it.opts.messages !== false) {
out += " , message: 'should NOT be ";
if ($keyword == "maxLength") {
out += "longer";
} else {
out += "shorter";
}
out += " than ";
if ($isData) {
out += "' + " + $schemaValue + " + '";
} else {
out += "" + $schema;
}
out += " characters' ";
}
if (it.opts.verbose) {
out += " , schema: ";
if ($isData) {
out += "validate.schema" + $schemaPath;
} else {
out += "" + $schema;
}
out += " , parentSchema: validate.schema" + it.schemaPath + " , data: " + $data + " ";
}
out += " } ";
} else {
out += " {} ";
}
var __err = out;
out = $$outStack.pop();
if (!it.compositeRule && $breakOnError) {
if (it.async) {
out += " throw new ValidationError([" + __err + "]); ";
} else {
out += " validate.errors = [" + __err + "]; return false; ";
}
} else {
out += " var err = " + __err + "; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ";
}
out += "} ";
if ($breakOnError) {
out += " else { ";
}
return out;
};
}
});
// node_modules/ajv/lib/dotjs/_limitProperties.js
var require_limitProperties = __commonJS({
"node_modules/ajv/lib/dotjs/_limitProperties.js"(exports2, module2) {
"use strict";
module2.exports = function generate__limitProperties(it, $keyword, $ruleType) {
var out = " ";
var $lvl = it.level;
var $dataLvl = it.dataLevel;
var $schema = it.schema[$keyword];
var $schemaPath = it.schemaPath + it.util.getProperty($keyword);
var $errSchemaPath = it.errSchemaPath + "/" + $keyword;
var $breakOnError = !it.opts.allErrors;
var $errorKeyword;
var $data = "data" + ($dataLvl || "");
var $isData = it.opts.$data && $schema && $schema.$data, $schemaValue;
if ($isData) {
out += " var schema" + $lvl + " = " + it.util.getData($schema.$data, $dataLvl, it.dataPathArr) + "; ";
$schemaValue = "schema" + $lvl;
} else {
$schemaValue = $schema;
}
if (!($isData || typeof $schema == "number")) {
throw new Error($keyword + " must be number");
}
var $op = $keyword == "maxProperties" ? ">" : "<";
out += "if ( ";
if ($isData) {
out += " (" + $schemaValue + " !== undefined && typeof " + $schemaValue + " != 'number') || ";
}
out += " Object.keys(" + $data + ").length " + $op + " " + $schemaValue + ") { ";
var $errorKeyword = $keyword;
var $$outStack = $$outStack || [];
$$outStack.push(out);
out = "";
if (it.createErrors !== false) {
out += " { keyword: '" + ($errorKeyword || "_limitProperties") + "' , dataPath: (dataPath || '') + " + it.errorPath + " , schemaPath: " + it.util.toQuotedString($errSchemaPath) + " , params: { limit: " + $schemaValue + " } ";
if (it.opts.messages !== false) {
out += " , message: 'should NOT have ";
if ($keyword == "maxProperties") {
out += "more";
} else {
out += "fewer";
}
out += " than ";
if ($isData) {
out += "' + " + $schemaValue + " + '";
} else {
out += "" + $schema;
}
out += " properties' ";
}
if (it.opts.verbose) {
out += " , schema: ";
if ($isData) {
out += "validate.schema" + $schemaPath;
} else {
out += "" + $schema;
}
out += " , parentSchema: validate.schema" + it.schemaPath + " , data: " + $data + " ";
}
out += " } ";
} else {
out += " {} ";
}
var __err = out;
out = $$outStack.pop();
if (!it.compositeRule && $breakOnError) {
if (it.async) {
out += " throw new ValidationError([" + __err + "]); ";
} else {
out += " validate.errors = [" + __err + "]; return false; ";
}
} else {
out += " var err = " + __err + "; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ";
}
out += "} ";
if ($breakOnError) {
out += " else { ";
}
return out;
};
}
});
// node_modules/ajv/lib/dotjs/multipleOf.js
var require_multipleOf = __commonJS({
"node_modules/ajv/lib/dotjs/multipleOf.js"(exports2, module2) {
"use strict";
module2.exports = function generate_multipleOf(it, $keyword, $ruleType) {
var out = " ";
var $lvl = it.level;
var $dataLvl = it.dataLevel;
var $schema = it.schema[$keyword];
var $schemaPath = it.schemaPath + it.util.getProperty($keyword);
var $errSchemaPath = it.errSchemaPath + "/" + $keyword;
var $breakOnError = !it.opts.allErrors;
var $data = "data" + ($dataLvl || "");
var $isData = it.opts.$data && $schema && $schema.$data, $schemaValue;
if ($isData) {
out += " var schema" + $lvl + " = " + it.util.getData($schema.$data, $dataLvl, it.dataPathArr) + "; ";
$schemaValue = "schema" + $lvl;
} else {
$schemaValue = $schema;
}
if (!($isData || typeof $schema == "number")) {
throw new Error($keyword + " must be number");
}
out += "var division" + $lvl + ";if (";
if ($isData) {
out += " " + $schemaValue + " !== undefined && ( typeof " + $schemaValue + " != 'number' || ";
}
out += " (division" + $lvl + " = " + $data + " / " + $schemaValue + ", ";
if (it.opts.multipleOfPrecision) {
out += " Math.abs(Math.round(division" + $lvl + ") - division" + $lvl + ") > 1e-" + it.opts.multipleOfPrecision + " ";
} else {
out += " division" + $lvl + " !== parseInt(division" + $lvl + ") ";
}
out += " ) ";
if ($isData) {
out += " ) ";
}
out += " ) { ";
var $$outStack = $$outStack || [];
$$outStack.push(out);
out = "";
if (it.createErrors !== false) {
out += " { keyword: 'multipleOf' , dataPath: (dataPath || '') + " + it.errorPath + " , schemaPath: " + it.util.toQuotedString($errSchemaPath) + " , params: { multipleOf: " + $schemaValue + " } ";
if (it.opts.messages !== false) {
out += " , message: 'should be multiple of ";
if ($isData) {
out += "' + " + $schemaValue;
} else {
out += "" + $schemaValue + "'";
}
}
if (it.opts.verbose) {
out += " , schema: ";
if ($isData) {
out += "validate.schema" + $schemaPath;
} else {
out += "" + $schema;
}
out += " , parentSchema: validate.schema" + it.schemaPath + " , data: " + $data + " ";
}
out += " } ";
} else {
out += " {} ";
}
var __err = out;
out = $$outStack.pop();
if (!it.compositeRule && $breakOnError) {
if (it.async) {
out += " throw new ValidationError([" + __err + "]); ";
} else {
out += " validate.errors = [" + __err + "]; return false; ";
}
} else {
out += " var err = " + __err + "; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ";
}
out += "} ";
if ($breakOnError) {
out += " else { ";
}
return out;
};
}
});
// node_modules/ajv/lib/dotjs/not.js
var require_not = __commonJS({
"node_modules/ajv/lib/dotjs/not.js"(exports2, module2) {
"use strict";
module2.exports = function generate_not(it, $keyword, $ruleType) {
var out = " ";
var $lvl = it.level;
var $dataLvl = it.dataLevel;
var $schema = it.schema[$keyword];
var $schemaPath = it.schemaPath + it.util.getProperty($keyword);
var $errSchemaPath = it.errSchemaPath + "/" + $keyword;
var $breakOnError = !it.opts.allErrors;
var $data = "data" + ($dataLvl || "");
var $errs = "errs__" + $lvl;
var $it = it.util.copy(it);
$it.level++;
var $nextValid = "valid" + $it.level;
if (it.opts.strictKeywords ? typeof $schema == "object" && Object.keys($schema).length > 0 || $schema === false : it.util.schemaHasRules($schema, it.RULES.all)) {
$it.schema = $schema;
$it.schemaPath = $schemaPath;
$it.errSchemaPath = $errSchemaPath;
out += " var " + $errs + " = errors; ";
var $wasComposite = it.compositeRule;
it.compositeRule = $it.compositeRule = true;
$it.createErrors = false;
var $allErrorsOption;
if ($it.opts.allErrors) {
$allErrorsOption = $it.opts.allErrors;
$it.opts.allErrors = false;
}
out += " " + it.validate($it) + " ";
$it.createErrors = true;
if ($allErrorsOption) $it.opts.allErrors = $allErrorsOption;
it.compositeRule = $it.compositeRule = $wasComposite;
out += " if (" + $nextValid + ") { ";
var $$outStack = $$outStack || [];
$$outStack.push(out);
out = "";
if (it.createErrors !== false) {
out += " { keyword: 'not' , dataPath: (dataPath || '') + " + it.errorPath + " , schemaPath: " + it.util.toQuotedString($errSchemaPath) + " , params: {} ";
if (it.opts.messages !== false) {
out += " , message: 'should NOT be valid' ";
}
if (it.opts.verbose) {
out += " , schema: validate.schema" + $schemaPath + " , parentSchema: validate.schema" + it.schemaPath + " , data: " + $data + " ";
}
out += " } ";
} else {
out += " {} ";
}
var __err = out;
out = $$outStack.pop();
if (!it.compositeRule && $breakOnError) {
if (it.async) {
out += " throw new ValidationError([" + __err + "]); ";
} else {
out += " validate.errors = [" + __err + "]; return false; ";
}
} else {
out += " var err = " + __err + "; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ";
}
out += " } else { errors = " + $errs + "; if (vErrors !== null) { if (" + $errs + ") vErrors.length = " + $errs + "; else vErrors = null; } ";
if (it.opts.allErrors) {
out += " } ";
}
} else {
out += " var err = ";
if (it.createErrors !== false) {
out += " { keyword: 'not' , dataPath: (dataPath || '') + " + it.errorPath + " , schemaPath: " + it.util.toQuotedString($errSchemaPath) + " , params: {} ";
if (it.opts.messages !== false) {
out += " , message: 'should NOT be valid' ";
}
if (it.opts.verbose) {
out += " , schema: validate.schema" + $schemaPath + " , parentSchema: validate.schema" + it.schemaPath + " , data: " + $data + " ";
}
out += " } ";
} else {
out += " {} ";
}
out += "; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ";
if ($breakOnError) {
out += " if (false) { ";
}
}
return out;
};
}
});
// node_modules/ajv/lib/dotjs/oneOf.js
var require_oneOf = __commonJS({
"node_modules/ajv/lib/dotjs/oneOf.js"(exports2, module2) {
"use strict";
module2.exports = function generate_oneOf(it, $keyword, $ruleType) {
var out = " ";
var $lvl = it.level;
var $dataLvl = it.dataLevel;
var $schema = it.schema[$keyword];
var $schemaPath = it.schemaPath + it.util.getProperty($keyword);
var $errSchemaPath = it.errSchemaPath + "/" + $keyword;
var $breakOnError = !it.opts.allErrors;
var $data = "data" + ($dataLvl || "");
var $valid = "valid" + $lvl;
var $errs = "errs__" + $lvl;
var $it = it.util.copy(it);
var $closingBraces = "";
$it.level++;
var $nextValid = "valid" + $it.level;
var $currentBaseId = $it.baseId, $prevValid = "prevValid" + $lvl, $passingSchemas = "passingSchemas" + $lvl;
out += "var " + $errs + " = errors , " + $prevValid + " = false , " + $valid + " = false , " + $passingSchemas + " = null; ";
var $wasComposite = it.compositeRule;
it.compositeRule = $it.compositeRule = true;
var arr1 = $schema;
if (arr1) {
var $sch, $i = -1, l1 = arr1.length - 1;
while ($i < l1) {
$sch = arr1[$i += 1];
if (it.opts.strictKeywords ? typeof $sch == "object" && Object.keys($sch).length > 0 || $sch === false : it.util.schemaHasRules($sch, it.RULES.all)) {
$it.schema = $sch;
$it.schemaPath = $schemaPath + "[" + $i + "]";
$it.errSchemaPath = $errSchemaPath + "/" + $i;
out += " " + it.validate($it) + " ";
$it.baseId = $currentBaseId;
} else {
out += " var " + $nextValid + " = true; ";
}
if ($i) {
out += " if (" + $nextValid + " && " + $prevValid + ") { " + $valid + " = false; " + $passingSchemas + " = [" + $passingSchemas + ", " + $i + "]; } else { ";
$closingBraces += "}";
}
out += " if (" + $nextValid + ") { " + $valid + " = " + $prevValid + " = true; " + $passingSchemas + " = " + $i + "; }";
}
}
it.compositeRule = $it.compositeRule = $wasComposite;
out += "" + $closingBraces + "if (!" + $valid + ") { var err = ";
if (it.createErrors !== false) {
out += " { keyword: 'oneOf' , dataPath: (dataPath || '') + " + it.errorPath + " , schemaPath: " + it.util.toQuotedString($errSchemaPath) + " , params: { passingSchemas: " + $passingSchemas + " } ";
if (it.opts.messages !== false) {
out += " , message: 'should match exactly one schema in oneOf' ";
}
if (it.opts.verbose) {
out += " , schema: validate.schema" + $schemaPath + " , parentSchema: validate.schema" + it.schemaPath + " , data: " + $data + " ";
}
out += " } ";
} else {
out += " {} ";
}
out += "; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ";
if (!it.compositeRule && $breakOnError) {
if (it.async) {
out += " throw new ValidationError(vErrors); ";
} else {
out += " validate.errors = vErrors; return false; ";
}
}
out += "} else { errors = " + $errs + "; if (vErrors !== null) { if (" + $errs + ") vErrors.length = " + $errs + "; else vErrors = null; }";
if (it.opts.allErrors) {
out += " } ";
}
return out;
};
}
});
// node_modules/ajv/lib/dotjs/pattern.js
var require_pattern = __commonJS({
"node_modules/ajv/lib/dotjs/pattern.js"(exports2, module2) {
"use strict";
module2.exports = function generate_pattern(it, $keyword, $ruleType) {
var out = " ";
var $lvl = it.level;
var $dataLvl = it.dataLevel;
var $schema = it.schema[$keyword];
var $schemaPath = it.schemaPath + it.util.getProperty($keyword);
var $errSchemaPath = it.errSchemaPath + "/" + $keyword;
var $breakOnError = !it.opts.allErrors;
var $data = "data" + ($dataLvl || "");
var $isData = it.opts.$data && $schema && $schema.$data, $schemaValue;
if ($isData) {
out += " var schema" + $lvl + " = " + it.util.getData($schema.$data, $dataLvl, it.dataPathArr) + "; ";
$schemaValue = "schema" + $lvl;
} else {
$schemaValue = $schema;
}
var $regexp = $isData ? "(new RegExp(" + $schemaValue + "))" : it.usePattern($schema);
out += "if ( ";
if ($isData) {
out += " (" + $schemaValue + " !== undefined && typeof " + $schemaValue + " != 'string') || ";
}
out += " !" + $regexp + ".test(" + $data + ") ) { ";
var $$outStack = $$outStack || [];
$$outStack.push(out);
out = "";
if (it.createErrors !== false) {
out += " { keyword: 'pattern' , dataPath: (dataPath || '') + " + it.errorPath + " , schemaPath: " + it.util.toQuotedString($errSchemaPath) + " , params: { pattern: ";
if ($isData) {
out += "" + $schemaValue;
} else {
out += "" + it.util.toQuotedString($schema);
}
out += " } ";
if (it.opts.messages !== false) {
out += ` , message: 'should match pattern "`;
if ($isData) {
out += "' + " + $schemaValue + " + '";
} else {
out += "" + it.util.escapeQuotes($schema);
}
out += `"' `;
}
if (it.opts.verbose) {
out += " , schema: ";
if ($isData) {
out += "validate.schema" + $schemaPath;
} else {
out += "" + it.util.toQuotedString($schema);
}
out += " , parentSchema: validate.schema" + it.schemaPath + " , data: " + $data + " ";
}
out += " } ";
} else {
out += " {} ";
}
var __err = out;
out = $$outStack.pop();
if (!it.compositeRule && $breakOnError) {
if (it.async) {
out += " throw new ValidationError([" + __err + "]); ";
} else {
out += " validate.errors = [" + __err + "]; return false; ";
}
} else {
out += " var err = " + __err + "; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ";
}
out += "} ";
if ($breakOnError) {
out += " else { ";
}
return out;
};
}
});
// node_modules/ajv/lib/dotjs/properties.js
var require_properties = __commonJS({
"node_modules/ajv/lib/dotjs/properties.js"(exports2, module2) {
"use strict";
module2.exports = function generate_properties(it, $keyword, $ruleType) {
var out = " ";
var $lvl = it.level;
var $dataLvl = it.dataLevel;
var $schema = it.schema[$keyword];
var $schemaPath = it.schemaPath + it.util.getProperty($keyword);
var $errSchemaPath = it.errSchemaPath + "/" + $keyword;
var $breakOnError = !it.opts.allErrors;
var $data = "data" + ($dataLvl || "");
var $errs = "errs__" + $lvl;
var $it = it.util.copy(it);
var $closingBraces = "";
$it.level++;
var $nextValid = "valid" + $it.level;
var $key = "key" + $lvl, $idx = "idx" + $lvl, $dataNxt = $it.dataLevel = it.dataLevel + 1, $nextData = "data" + $dataNxt, $dataProperties = "dataProperties" + $lvl;
var $schemaKeys = Object.keys($schema || {}).filter(notProto), $pProperties = it.schema.patternProperties || {}, $pPropertyKeys = Object.keys($pProperties).filter(notProto), $aProperties = it.schema.additionalProperties, $someProperties = $schemaKeys.length || $pPropertyKeys.length, $noAdditional = $aProperties === false, $additionalIsSchema = typeof $aProperties == "object" && Object.keys($aProperties).length, $removeAdditional = it.opts.removeAdditional, $checkAdditional = $noAdditional || $additionalIsSchema || $removeAdditional, $ownProperties = it.opts.ownProperties, $currentBaseId = it.baseId;
var $required = it.schema.required;
if ($required && !(it.opts.$data && $required.$data) && $required.length < it.opts.loopRequired) {
var $requiredHash = it.util.toHash($required);
}
function notProto(p) {
return p !== "__proto__";
}
out += "var " + $errs + " = errors;var " + $nextValid + " = true;";
if ($ownProperties) {
out += " var " + $dataProperties + " = undefined;";
}
if ($checkAdditional) {
if ($ownProperties) {
out += " " + $dataProperties + " = " + $dataProperties + " || Object.keys(" + $data + "); for (var " + $idx + "=0; " + $idx + "<" + $dataProperties + ".length; " + $idx + "++) { var " + $key + " = " + $dataProperties + "[" + $idx + "]; ";
} else {
out += " for (var " + $key + " in " + $data + ") { ";
}
if ($someProperties) {
out += " var isAdditional" + $lvl + " = !(false ";
if ($schemaKeys.length) {
if ($schemaKeys.length > 8) {
out += " || validate.schema" + $schemaPath + ".hasOwnProperty(" + $key + ") ";
} else {
var arr1 = $schemaKeys;
if (arr1) {
var $propertyKey, i1 = -1, l1 = arr1.length - 1;
while (i1 < l1) {
$propertyKey = arr1[i1 += 1];
out += " || " + $key + " == " + it.util.toQuotedString($propertyKey) + " ";
}
}
}
}
if ($pPropertyKeys.length) {
var arr2 = $pPropertyKeys;
if (arr2) {
var $pProperty, $i = -1, l2 = arr2.length - 1;
while ($i < l2) {
$pProperty = arr2[$i += 1];
out += " || " + it.usePattern($pProperty) + ".test(" + $key + ") ";
}
}
}
out += " ); if (isAdditional" + $lvl + ") { ";
}
if ($removeAdditional == "all") {
out += " delete " + $data + "[" + $key + "]; ";
} else {
var $currentErrorPath = it.errorPath;
var $additionalProperty = "' + " + $key + " + '";
if (it.opts._errorDataPathProperty) {
it.errorPath = it.util.getPathExpr(it.errorPath, $key, it.opts.jsonPointers);
}
if ($noAdditional) {
if ($removeAdditional) {
out += " delete " + $data + "[" + $key + "]; ";
} else {
out += " " + $nextValid + " = false; ";
var $currErrSchemaPath = $errSchemaPath;
$errSchemaPath = it.errSchemaPath + "/additionalProperties";
var $$outStack = $$outStack || [];
$$outStack.push(out);
out = "";
if (it.createErrors !== false) {
out += " { keyword: 'additionalProperties' , dataPath: (dataPath || '') + " + it.errorPath + " , schemaPath: " + it.util.toQuotedString($errSchemaPath) + " , params: { additionalProperty: '" + $additionalProperty + "' } ";
if (it.opts.messages !== false) {
out += " , message: '";
if (it.opts._errorDataPathProperty) {
out += "is an invalid additional property";
} else {
out += "should NOT have additional properties";
}
out += "' ";
}
if (it.opts.verbose) {
out += " , schema: false , parentSchema: validate.schema" + it.schemaPath + " , data: " + $data + " ";
}
out += " } ";
} else {
out += " {} ";
}
var __err = out;
out = $$outStack.pop();
if (!it.compositeRule && $breakOnError) {
if (it.async) {
out += " throw new ValidationError([" + __err + "]); ";
} else {
out += " validate.errors = [" + __err + "]; return false; ";
}
} else {
out += " var err = " + __err + "; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ";
}
$errSchemaPath = $currErrSchemaPath;
if ($breakOnError) {
out += " break; ";
}
}
} else if ($additionalIsSchema) {
if ($removeAdditional == "failing") {
out += " var " + $errs + " = errors; ";
var $wasComposite = it.compositeRule;
it.compositeRule = $it.compositeRule = true;
$it.schema = $aProperties;
$it.schemaPath = it.schemaPath + ".additionalProperties";
$it.errSchemaPath = it.errSchemaPath + "/additionalProperties";
$it.errorPath = it.opts._errorDataPathProperty ? it.errorPath : it.util.getPathExpr(it.errorPath, $key, it.opts.jsonPointers);
var $passData = $data + "[" + $key + "]";
$it.dataPathArr[$dataNxt] = $key;
var $code = it.validate($it);
$it.baseId = $currentBaseId;
if (it.util.varOccurences($code, $nextData) < 2) {
out += " " + it.util.varReplace($code, $nextData, $passData) + " ";
} else {
out += " var " + $nextData + " = " + $passData + "; " + $code + " ";
}
out += " if (!" + $nextValid + ") { errors = " + $errs + "; if (validate.errors !== null) { if (errors) validate.errors.length = errors; else validate.errors = null; } delete " + $data + "[" + $key + "]; } ";
it.compositeRule = $it.compositeRule = $wasComposite;
} else {
$it.schema = $aProperties;
$it.schemaPath = it.schemaPath + ".additionalProperties";
$it.errSchemaPath = it.errSchemaPath + "/additionalProperties";
$it.errorPath = it.opts._errorDataPathProperty ? it.errorPath : it.util.getPathExpr(it.errorPath, $key, it.opts.jsonPointers);
var $passData = $data + "[" + $key + "]";
$it.dataPathArr[$dataNxt] = $key;
var $code = it.validate($it);
$it.baseId = $currentBaseId;
if (it.util.varOccurences($code, $nextData) < 2) {
out += " " + it.util.varReplace($code, $nextData, $passData) + " ";
} else {
out += " var " + $nextData + " = " + $passData + "; " + $code + " ";
}
if ($breakOnError) {
out += " if (!" + $nextValid + ") break; ";
}
}
}
it.errorPath = $currentErrorPath;
}
if ($someProperties) {
out += " } ";
}
out += " } ";
if ($breakOnError) {
out += " if (" + $nextValid + ") { ";
$closingBraces += "}";
}
}
var $useDefaults = it.opts.useDefaults && !it.compositeRule;
if ($schemaKeys.length) {
var arr3 = $schemaKeys;
if (arr3) {
var $propertyKey, i3 = -1, l3 = arr3.length - 1;
while (i3 < l3) {
$propertyKey = arr3[i3 += 1];
var $sch = $schema[$propertyKey];
if (it.opts.strictKeywords ? typeof $sch == "object" && Object.keys($sch).length > 0 || $sch === false : it.util.schemaHasRules($sch, it.RULES.all)) {
var $prop = it.util.getProperty($propertyKey), $passData = $data + $prop, $hasDefault = $useDefaults && $sch.default !== void 0;
$it.schema = $sch;
$it.schemaPath = $schemaPath + $prop;
$it.errSchemaPath = $errSchemaPath + "/" + it.util.escapeFragment($propertyKey);
$it.errorPath = it.util.getPath(it.errorPath, $propertyKey, it.opts.jsonPointers);
$it.dataPathArr[$dataNxt] = it.util.toQuotedString($propertyKey);
var $code = it.validate($it);
$it.baseId = $currentBaseId;
if (it.util.varOccurences($code, $nextData) < 2) {
$code = it.util.varReplace($code, $nextData, $passData);
var $useData = $passData;
} else {
var $useData = $nextData;
out += " var " + $nextData + " = " + $passData + "; ";
}
if ($hasDefault) {
out += " " + $code + " ";
} else {
if ($requiredHash && $requiredHash[$propertyKey]) {
out += " if ( " + $useData + " === undefined ";
if ($ownProperties) {
out += " || ! Object.prototype.hasOwnProperty.call(" + $data + ", '" + it.util.escapeQuotes($propertyKey) + "') ";
}
out += ") { " + $nextValid + " = false; ";
var $currentErrorPath = it.errorPath, $currErrSchemaPath = $errSchemaPath, $missingProperty = it.util.escapeQuotes($propertyKey);
if (it.opts._errorDataPathProperty) {
it.errorPath = it.util.getPath($currentErrorPath, $propertyKey, it.opts.jsonPointers);
}
$errSchemaPath = it.errSchemaPath + "/required";
var $$outStack = $$outStack || [];
$$outStack.push(out);
out = "";
if (it.createErrors !== false) {
out += " { keyword: 'required' , dataPath: (dataPath || '') + " + it.errorPath + " , schemaPath: " + it.util.toQuotedString($errSchemaPath) + " , params: { missingProperty: '" + $missingProperty + "' } ";
if (it.opts.messages !== false) {
out += " , message: '";
if (it.opts._errorDataPathProperty) {
out += "is a required property";
} else {
out += "should have required property \\'" + $missingProperty + "\\'";
}
out += "' ";
}
if (it.opts.verbose) {
out += " , schema: validate.schema" + $schemaPath + " , parentSchema: validate.schema" + it.schemaPath + " , data: " + $data + " ";
}
out += " } ";
} else {
out += " {} ";
}
var __err = out;
out = $$outStack.pop();
if (!it.compositeRule && $breakOnError) {
if (it.async) {
out += " throw new ValidationError([" + __err + "]); ";
} else {
out += " validate.errors = [" + __err + "]; return false; ";
}
} else {
out += " var err = " + __err + "; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ";
}
$errSchemaPath = $currErrSchemaPath;
it.errorPath = $currentErrorPath;
out += " } else { ";
} else {
if ($breakOnError) {
out += " if ( " + $useData + " === undefined ";
if ($ownProperties) {
out += " || ! Object.prototype.hasOwnProperty.call(" + $data + ", '" + it.util.escapeQuotes($propertyKey) + "') ";
}
out += ") { " + $nextValid + " = true; } else { ";
} else {
out += " if (" + $useData + " !== undefined ";
if ($ownProperties) {
out += " && Object.prototype.hasOwnProperty.call(" + $data + ", '" + it.util.escapeQuotes($propertyKey) + "') ";
}
out += " ) { ";
}
}
out += " " + $code + " } ";
}
}
if ($breakOnError) {
out += " if (" + $nextValid + ") { ";
$closingBraces += "}";
}
}
}
}
if ($pPropertyKeys.length) {
var arr4 = $pPropertyKeys;
if (arr4) {
var $pProperty, i4 = -1, l4 = arr4.length - 1;
while (i4 < l4) {
$pProperty = arr4[i4 += 1];
var $sch = $pProperties[$pProperty];
if (it.opts.strictKeywords ? typeof $sch == "object" && Object.keys($sch).length > 0 || $sch === false : it.util.schemaHasRules($sch, it.RULES.all)) {
$it.schema = $sch;
$it.schemaPath = it.schemaPath + ".patternProperties" + it.util.getProperty($pProperty);
$it.errSchemaPath = it.errSchemaPath + "/patternProperties/" + it.util.escapeFragment($pProperty);
if ($ownProperties) {
out += " " + $dataProperties + " = " + $dataProperties + " || Object.keys(" + $data + "); for (var " + $idx + "=0; " + $idx + "<" + $dataProperties + ".length; " + $idx + "++) { var " + $key + " = " + $dataProperties + "[" + $idx + "]; ";
} else {
out += " for (var " + $key + " in " + $data + ") { ";
}
out += " if (" + it.usePattern($pProperty) + ".test(" + $key + ")) { ";
$it.errorPath = it.util.getPathExpr(it.errorPath, $key, it.opts.jsonPointers);
var $passData = $data + "[" + $key + "]";
$it.dataPathArr[$dataNxt] = $key;
var $code = it.validate($it);
$it.baseId = $currentBaseId;
if (it.util.varOccurences($code, $nextData) < 2) {
out += " " + it.util.varReplace($code, $nextData, $passData) + " ";
} else {
out += " var " + $nextData + " = " + $passData + "; " + $code + " ";
}
if ($breakOnError) {
out += " if (!" + $nextValid + ") break; ";
}
out += " } ";
if ($breakOnError) {
out += " else " + $nextValid + " = true; ";
}
out += " } ";
if ($breakOnError) {
out += " if (" + $nextValid + ") { ";
$closingBraces += "}";
}
}
}
}
}
if ($breakOnError) {
out += " " + $closingBraces + " if (" + $errs + " == errors) {";
}
return out;
};
}
});
// node_modules/ajv/lib/dotjs/propertyNames.js
var require_propertyNames = __commonJS({
"node_modules/ajv/lib/dotjs/propertyNames.js"(exports2, module2) {
"use strict";
module2.exports = function generate_propertyNames(it, $keyword, $ruleType) {
var out = " ";
var $lvl = it.level;
var $dataLvl = it.dataLevel;
var $schema = it.schema[$keyword];
var $schemaPath = it.schemaPath + it.util.getProperty($keyword);
var $errSchemaPath = it.errSchemaPath + "/" + $keyword;
var $breakOnError = !it.opts.allErrors;
var $data = "data" + ($dataLvl || "");
var $errs = "errs__" + $lvl;
var $it = it.util.copy(it);
var $closingBraces = "";
$it.level++;
var $nextValid = "valid" + $it.level;
out += "var " + $errs + " = errors;";
if (it.opts.strictKeywords ? typeof $schema == "object" && Object.keys($schema).length > 0 || $schema === false : it.util.schemaHasRules($schema, it.RULES.all)) {
$it.schema = $schema;
$it.schemaPath = $schemaPath;
$it.errSchemaPath = $errSchemaPath;
var $key = "key" + $lvl, $idx = "idx" + $lvl, $i = "i" + $lvl, $invalidName = "' + " + $key + " + '", $dataNxt = $it.dataLevel = it.dataLevel + 1, $nextData = "data" + $dataNxt, $dataProperties = "dataProperties" + $lvl, $ownProperties = it.opts.ownProperties, $currentBaseId = it.baseId;
if ($ownProperties) {
out += " var " + $dataProperties + " = undefined; ";
}
if ($ownProperties) {
out += " " + $dataProperties + " = " + $dataProperties + " || Object.keys(" + $data + "); for (var " + $idx + "=0; " + $idx + "<" + $dataProperties + ".length; " + $idx + "++) { var " + $key + " = " + $dataProperties + "[" + $idx + "]; ";
} else {
out += " for (var " + $key + " in " + $data + ") { ";
}
out += " var startErrs" + $lvl + " = errors; ";
var $passData = $key;
var $wasComposite = it.compositeRule;
it.compositeRule = $it.compositeRule = true;
var $code = it.validate($it);
$it.baseId = $currentBaseId;
if (it.util.varOccurences($code, $nextData) < 2) {
out += " " + it.util.varReplace($code, $nextData, $passData) + " ";
} else {
out += " var " + $nextData + " = " + $passData + "; " + $code + " ";
}
it.compositeRule = $it.compositeRule = $wasComposite;
out += " if (!" + $nextValid + ") { for (var " + $i + "=startErrs" + $lvl + "; " + $i + "<errors; " + $i + "++) { vErrors[" + $i + "].propertyName = " + $key + "; } var err = ";
if (it.createErrors !== false) {
out += " { keyword: 'propertyNames' , dataPath: (dataPath || '') + " + it.errorPath + " , schemaPath: " + it.util.toQuotedString($errSchemaPath) + " , params: { propertyName: '" + $invalidName + "' } ";
if (it.opts.messages !== false) {
out += " , message: 'property name \\'" + $invalidName + "\\' is invalid' ";
}
if (it.opts.verbose) {
out += " , schema: validate.schema" + $schemaPath + " , parentSchema: validate.schema" + it.schemaPath + " , data: " + $data + " ";
}
out += " } ";
} else {
out += " {} ";
}
out += "; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ";
if (!it.compositeRule && $breakOnError) {
if (it.async) {
out += " throw new ValidationError(vErrors); ";
} else {
out += " validate.errors = vErrors; return false; ";
}
}
if ($breakOnError) {
out += " break; ";
}
out += " } }";
}
if ($breakOnError) {
out += " " + $closingBraces + " if (" + $errs + " == errors) {";
}
return out;
};
}
});
// node_modules/ajv/lib/dotjs/required.js
var require_required = __commonJS({
"node_modules/ajv/lib/dotjs/required.js"(exports2, module2) {
"use strict";
module2.exports = function generate_required(it, $keyword, $ruleType) {
var out = " ";
var $lvl = it.level;
var $dataLvl = it.dataLevel;
var $schema = it.schema[$keyword];
var $schemaPath = it.schemaPath + it.util.getProperty($keyword);
var $errSchemaPath = it.errSchemaPath + "/" + $keyword;
var $breakOnError = !it.opts.allErrors;
var $data = "data" + ($dataLvl || "");
var $valid = "valid" + $lvl;
var $isData = it.opts.$data && $schema && $schema.$data, $schemaValue;
if ($isData) {
out += " var schema" + $lvl + " = " + it.util.getData($schema.$data, $dataLvl, it.dataPathArr) + "; ";
$schemaValue = "schema" + $lvl;
} else {
$schemaValue = $schema;
}
var $vSchema = "schema" + $lvl;
if (!$isData) {
if ($schema.length < it.opts.loopRequired && it.schema.properties && Object.keys(it.schema.properties).length) {
var $required = [];
var arr1 = $schema;
if (arr1) {
var $property, i1 = -1, l1 = arr1.length - 1;
while (i1 < l1) {
$property = arr1[i1 += 1];
var $propertySch = it.schema.properties[$property];
if (!($propertySch && (it.opts.strictKeywords ? typeof $propertySch == "object" && Object.keys($propertySch).length > 0 || $propertySch === false : it.util.schemaHasRules($propertySch, it.RULES.all)))) {
$required[$required.length] = $property;
}
}
}
} else {
var $required = $schema;
}
}
if ($isData || $required.length) {
var $currentErrorPath = it.errorPath, $loopRequired = $isData || $required.length >= it.opts.loopRequired, $ownProperties = it.opts.ownProperties;
if ($breakOnError) {
out += " var missing" + $lvl + "; ";
if ($loopRequired) {
if (!$isData) {
out += " var " + $vSchema + " = validate.schema" + $schemaPath + "; ";
}
var $i = "i" + $lvl, $propertyPath = "schema" + $lvl + "[" + $i + "]", $missingProperty = "' + " + $propertyPath + " + '";
if (it.opts._errorDataPathProperty) {
it.errorPath = it.util.getPathExpr($currentErrorPath, $propertyPath, it.opts.jsonPointers);
}
out += " var " + $valid + " = true; ";
if ($isData) {
out += " if (schema" + $lvl + " === undefined) " + $valid + " = true; else if (!Array.isArray(schema" + $lvl + ")) " + $valid + " = false; else {";
}
out += " for (var " + $i + " = 0; " + $i + " < " + $vSchema + ".length; " + $i + "++) { " + $valid + " = " + $data + "[" + $vSchema + "[" + $i + "]] !== undefined ";
if ($ownProperties) {
out += " && Object.prototype.hasOwnProperty.call(" + $data + ", " + $vSchema + "[" + $i + "]) ";
}
out += "; if (!" + $valid + ") break; } ";
if ($isData) {
out += " } ";
}
out += " if (!" + $valid + ") { ";
var $$outStack = $$outStack || [];
$$outStack.push(out);
out = "";
if (it.createErrors !== false) {
out += " { keyword: 'required' , dataPath: (dataPath || '') + " + it.errorPath + " , schemaPath: " + it.util.toQuotedString($errSchemaPath) + " , params: { missingProperty: '" + $missingProperty + "' } ";
if (it.opts.messages !== false) {
out += " , message: '";
if (it.opts._errorDataPathProperty) {
out += "is a required property";
} else {
out += "should have required property \\'" + $missingProperty + "\\'";
}
out += "' ";
}
if (it.opts.verbose) {
out += " , schema: validate.schema" + $schemaPath + " , parentSchema: validate.schema" + it.schemaPath + " , data: " + $data + " ";
}
out += " } ";
} else {
out += " {} ";
}
var __err = out;
out = $$outStack.pop();
if (!it.compositeRule && $breakOnError) {
if (it.async) {
out += " throw new ValidationError([" + __err + "]); ";
} else {
out += " validate.errors = [" + __err + "]; return false; ";
}
} else {
out += " var err = " + __err + "; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ";
}
out += " } else { ";
} else {
out += " if ( ";
var arr2 = $required;
if (arr2) {
var $propertyKey, $i = -1, l2 = arr2.length - 1;
while ($i < l2) {
$propertyKey = arr2[$i += 1];
if ($i) {
out += " || ";
}
var $prop = it.util.getProperty($propertyKey), $useData = $data + $prop;
out += " ( ( " + $useData + " === undefined ";
if ($ownProperties) {
out += " || ! Object.prototype.hasOwnProperty.call(" + $data + ", '" + it.util.escapeQuotes($propertyKey) + "') ";
}
out += ") && (missing" + $lvl + " = " + it.util.toQuotedString(it.opts.jsonPointers ? $propertyKey : $prop) + ") ) ";
}
}
out += ") { ";
var $propertyPath = "missing" + $lvl, $missingProperty = "' + " + $propertyPath + " + '";
if (it.opts._errorDataPathProperty) {
it.errorPath = it.opts.jsonPointers ? it.util.getPathExpr($currentErrorPath, $propertyPath, true) : $currentErrorPath + " + " + $propertyPath;
}
var $$outStack = $$outStack || [];
$$outStack.push(out);
out = "";
if (it.createErrors !== false) {
out += " { keyword: 'required' , dataPath: (dataPath || '') + " + it.errorPath + " , schemaPath: " + it.util.toQuotedString($errSchemaPath) + " , params: { missingProperty: '" + $missingProperty + "' } ";
if (it.opts.messages !== false) {
out += " , message: '";
if (it.opts._errorDataPathProperty) {
out += "is a required property";
} else {
out += "should have required property \\'" + $missingProperty + "\\'";
}
out += "' ";
}
if (it.opts.verbose) {
out += " , schema: validate.schema" + $schemaPath + " , parentSchema: validate.schema" + it.schemaPath + " , data: " + $data + " ";
}
out += " } ";
} else {
out += " {} ";
}
var __err = out;
out = $$outStack.pop();
if (!it.compositeRule && $breakOnError) {
if (it.async) {
out += " throw new ValidationError([" + __err + "]); ";
} else {
out += " validate.errors = [" + __err + "]; return false; ";
}
} else {
out += " var err = " + __err + "; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ";
}
out += " } else { ";
}
} else {
if ($loopRequired) {
if (!$isData) {
out += " var " + $vSchema + " = validate.schema" + $schemaPath + "; ";
}
var $i = "i" + $lvl, $propertyPath = "schema" + $lvl + "[" + $i + "]", $missingProperty = "' + " + $propertyPath + " + '";
if (it.opts._errorDataPathProperty) {
it.errorPath = it.util.getPathExpr($currentErrorPath, $propertyPath, it.opts.jsonPointers);
}
if ($isData) {
out += " if (" + $vSchema + " && !Array.isArray(" + $vSchema + ")) { var err = ";
if (it.createErrors !== false) {
out += " { keyword: 'required' , dataPath: (dataPath || '') + " + it.errorPath + " , schemaPath: " + it.util.toQuotedString($errSchemaPath) + " , params: { missingProperty: '" + $missingProperty + "' } ";
if (it.opts.messages !== false) {
out += " , message: '";
if (it.opts._errorDataPathProperty) {
out += "is a required property";
} else {
out += "should have required property \\'" + $missingProperty + "\\'";
}
out += "' ";
}
if (it.opts.verbose) {
out += " , schema: validate.schema" + $schemaPath + " , parentSchema: validate.schema" + it.schemaPath + " , data: " + $data + " ";
}
out += " } ";
} else {
out += " {} ";
}
out += "; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; } else if (" + $vSchema + " !== undefined) { ";
}
out += " for (var " + $i + " = 0; " + $i + " < " + $vSchema + ".length; " + $i + "++) { if (" + $data + "[" + $vSchema + "[" + $i + "]] === undefined ";
if ($ownProperties) {
out += " || ! Object.prototype.hasOwnProperty.call(" + $data + ", " + $vSchema + "[" + $i + "]) ";
}
out += ") { var err = ";
if (it.createErrors !== false) {
out += " { keyword: 'required' , dataPath: (dataPath || '') + " + it.errorPath + " , schemaPath: " + it.util.toQuotedString($errSchemaPath) + " , params: { missingProperty: '" + $missingProperty + "' } ";
if (it.opts.messages !== false) {
out += " , message: '";
if (it.opts._errorDataPathProperty) {
out += "is a required property";
} else {
out += "should have required property \\'" + $missingProperty + "\\'";
}
out += "' ";
}
if (it.opts.verbose) {
out += " , schema: validate.schema" + $schemaPath + " , parentSchema: validate.schema" + it.schemaPath + " , data: " + $data + " ";
}
out += " } ";
} else {
out += " {} ";
}
out += "; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; } } ";
if ($isData) {
out += " } ";
}
} else {
var arr3 = $required;
if (arr3) {
var $propertyKey, i3 = -1, l3 = arr3.length - 1;
while (i3 < l3) {
$propertyKey = arr3[i3 += 1];
var $prop = it.util.getProperty($propertyKey), $missingProperty = it.util.escapeQuotes($propertyKey), $useData = $data + $prop;
if (it.opts._errorDataPathProperty) {
it.errorPath = it.util.getPath($currentErrorPath, $propertyKey, it.opts.jsonPointers);
}
out += " if ( " + $useData + " === undefined ";
if ($ownProperties) {
out += " || ! Object.prototype.hasOwnProperty.call(" + $data + ", '" + it.util.escapeQuotes($propertyKey) + "') ";
}
out += ") { var err = ";
if (it.createErrors !== false) {
out += " { keyword: 'required' , dataPath: (dataPath || '') + " + it.errorPath + " , schemaPath: " + it.util.toQuotedString($errSchemaPath) + " , params: { missingProperty: '" + $missingProperty + "' } ";
if (it.opts.messages !== false) {
out += " , message: '";
if (it.opts._errorDataPathProperty) {
out += "is a required property";
} else {
out += "should have required property \\'" + $missingProperty + "\\'";
}
out += "' ";
}
if (it.opts.verbose) {
out += " , schema: validate.schema" + $schemaPath + " , parentSchema: validate.schema" + it.schemaPath + " , data: " + $data + " ";
}
out += " } ";
} else {
out += " {} ";
}
out += "; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; } ";
}
}
}
}
it.errorPath = $currentErrorPath;
} else if ($breakOnError) {
out += " if (true) {";
}
return out;
};
}
});
// node_modules/ajv/lib/dotjs/uniqueItems.js
var require_uniqueItems = __commonJS({
"node_modules/ajv/lib/dotjs/uniqueItems.js"(exports2, module2) {
"use strict";
module2.exports = function generate_uniqueItems(it, $keyword, $ruleType) {
var out = " ";
var $lvl = it.level;
var $dataLvl = it.dataLevel;
var $schema = it.schema[$keyword];
var $schemaPath = it.schemaPath + it.util.getProperty($keyword);
var $errSchemaPath = it.errSchemaPath + "/" + $keyword;
var $breakOnError = !it.opts.allErrors;
var $data = "data" + ($dataLvl || "");
var $valid = "valid" + $lvl;
var $isData = it.opts.$data && $schema && $schema.$data, $schemaValue;
if ($isData) {
out += " var schema" + $lvl + " = " + it.util.getData($schema.$data, $dataLvl, it.dataPathArr) + "; ";
$schemaValue = "schema" + $lvl;
} else {
$schemaValue = $schema;
}
if (($schema || $isData) && it.opts.uniqueItems !== false) {
if ($isData) {
out += " var " + $valid + "; if (" + $schemaValue + " === false || " + $schemaValue + " === undefined) " + $valid + " = true; else if (typeof " + $schemaValue + " != 'boolean') " + $valid + " = false; else { ";
}
out += " var i = " + $data + ".length , " + $valid + " = true , j; if (i > 1) { ";
var $itemType = it.schema.items && it.schema.items.type, $typeIsArray = Array.isArray($itemType);
if (!$itemType || $itemType == "object" || $itemType == "array" || $typeIsArray && ($itemType.indexOf("object") >= 0 || $itemType.indexOf("array") >= 0)) {
out += " outer: for (;i--;) { for (j = i; j--;) { if (equal(" + $data + "[i], " + $data + "[j])) { " + $valid + " = false; break outer; } } } ";
} else {
out += " var itemIndices = {}, item; for (;i--;) { var item = " + $data + "[i]; ";
var $method = "checkDataType" + ($typeIsArray ? "s" : "");
out += " if (" + it.util[$method]($itemType, "item", it.opts.strictNumbers, true) + ") continue; ";
if ($typeIsArray) {
out += ` if (typeof item == 'string') item = '"' + item; `;
}
out += " if (typeof itemIndices[item] == 'number') { " + $valid + " = false; j = itemIndices[item]; break; } itemIndices[item] = i; } ";
}
out += " } ";
if ($isData) {
out += " } ";
}
out += " if (!" + $valid + ") { ";
var $$outStack = $$outStack || [];
$$outStack.push(out);
out = "";
if (it.createErrors !== false) {
out += " { keyword: 'uniqueItems' , dataPath: (dataPath || '') + " + it.errorPath + " , schemaPath: " + it.util.toQuotedString($errSchemaPath) + " , params: { i: i, j: j } ";
if (it.opts.messages !== false) {
out += " , message: 'should NOT have duplicate items (items ## ' + j + ' and ' + i + ' are identical)' ";
}
if (it.opts.verbose) {
out += " , schema: ";
if ($isData) {
out += "validate.schema" + $schemaPath;
} else {
out += "" + $schema;
}
out += " , parentSchema: validate.schema" + it.schemaPath + " , data: " + $data + " ";
}
out += " } ";
} else {
out += " {} ";
}
var __err = out;
out = $$outStack.pop();
if (!it.compositeRule && $breakOnError) {
if (it.async) {
out += " throw new ValidationError([" + __err + "]); ";
} else {
out += " validate.errors = [" + __err + "]; return false; ";
}
} else {
out += " var err = " + __err + "; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ";
}
out += " } ";
if ($breakOnError) {
out += " else { ";
}
} else {
if ($breakOnError) {
out += " if (true) { ";
}
}
return out;
};
}
});
// node_modules/ajv/lib/dotjs/index.js
var require_dotjs = __commonJS({
"node_modules/ajv/lib/dotjs/index.js"(exports2, module2) {
"use strict";
module2.exports = {
"$ref": require_ref(),
allOf: require_allOf(),
anyOf: require_anyOf(),
"$comment": require_comment(),
const: require_const(),
contains: require_contains(),
dependencies: require_dependencies(),
"enum": require_enum(),
format: require_format(),
"if": require_if(),
items: require_items(),
maximum: require_limit(),
minimum: require_limit(),
maxItems: require_limitItems(),
minItems: require_limitItems(),
maxLength: require_limitLength(),
minLength: require_limitLength(),
maxProperties: require_limitProperties(),
minProperties: require_limitProperties(),
multipleOf: require_multipleOf(),
not: require_not(),
oneOf: require_oneOf(),
pattern: require_pattern(),
properties: require_properties(),
propertyNames: require_propertyNames(),
required: require_required(),
uniqueItems: require_uniqueItems(),
validate: require_validate()
};
}
});
// node_modules/ajv/lib/compile/rules.js
var require_rules = __commonJS({
"node_modules/ajv/lib/compile/rules.js"(exports2, module2) {
"use strict";
var ruleModules = require_dotjs();
var toHash = require_util().toHash;
module2.exports = function rules() {
var RULES = [
{
type: "number",
rules: [
{ "maximum": ["exclusiveMaximum"] },
{ "minimum": ["exclusiveMinimum"] },
"multipleOf",
"format"
]
},
{
type: "string",
rules: ["maxLength", "minLength", "pattern", "format"]
},
{
type: "array",
rules: ["maxItems", "minItems", "items", "contains", "uniqueItems"]
},
{
type: "object",
rules: [
"maxProperties",
"minProperties",
"required",
"dependencies",
"propertyNames",
{ "properties": ["additionalProperties", "patternProperties"] }
]
},
{ rules: ["$ref", "const", "enum", "not", "anyOf", "oneOf", "allOf", "if"] }
];
var ALL = ["type", "$comment"];
var KEYWORDS = [
"$schema",
"$id",
"id",
"$data",
"$async",
"title",
"description",
"default",
"definitions",
"examples",
"readOnly",
"writeOnly",
"contentMediaType",
"contentEncoding",
"additionalItems",
"then",
"else"
];
var TYPES = ["number", "integer", "string", "array", "object", "boolean", "null"];
RULES.all = toHash(ALL);
RULES.types = toHash(TYPES);
RULES.forEach(function(group) {
group.rules = group.rules.map(function(keyword) {
var implKeywords;
if (typeof keyword == "object") {
var key = Object.keys(keyword)[0];
implKeywords = keyword[key];
keyword = key;
implKeywords.forEach(function(k) {
ALL.push(k);
RULES.all[k] = true;
});
}
ALL.push(keyword);
var rule = RULES.all[keyword] = {
keyword,
code: ruleModules[keyword],
implements: implKeywords
};
return rule;
});
RULES.all.$comment = {
keyword: "$comment",
code: ruleModules.$comment
};
if (group.type) RULES.types[group.type] = group;
});
RULES.keywords = toHash(ALL.concat(KEYWORDS));
RULES.custom = {};
return RULES;
};
}
});
// node_modules/ajv/lib/data.js
var require_data = __commonJS({
"node_modules/ajv/lib/data.js"(exports2, module2) {
"use strict";
var KEYWORDS = [
"multipleOf",
"maximum",
"exclusiveMaximum",
"minimum",
"exclusiveMinimum",
"maxLength",
"minLength",
"pattern",
"additionalItems",
"maxItems",
"minItems",
"uniqueItems",
"maxProperties",
"minProperties",
"required",
"additionalProperties",
"enum",
"format",
"const"
];
module2.exports = function(metaSchema, keywordsJsonPointers) {
for (var i = 0; i < keywordsJsonPointers.length; i++) {
metaSchema = JSON.parse(JSON.stringify(metaSchema));
var segments = keywordsJsonPointers[i].split("/");
var keywords = metaSchema;
var j;
for (j = 1; j < segments.length; j++)
keywords = keywords[segments[j]];
for (j = 0; j < KEYWORDS.length; j++) {
var key = KEYWORDS[j];
var schema = keywords[key];
if (schema) {
keywords[key] = {
anyOf: [
schema,
{ $ref: "https://raw.githubusercontent.com/ajv-validator/ajv/master/lib/refs/data.json#" }
]
};
}
}
}
return metaSchema;
};
}
});
// node_modules/ajv/lib/compile/async.js
var require_async = __commonJS({
"node_modules/ajv/lib/compile/async.js"(exports2, module2) {
"use strict";
var MissingRefError = require_error_classes().MissingRef;
module2.exports = compileAsync;
function compileAsync(schema, meta, callback) {
var self2 = this;
if (typeof this._opts.loadSchema != "function")
throw new Error("options.loadSchema should be a function");
if (typeof meta == "function") {
callback = meta;
meta = void 0;
}
var p = loadMetaSchemaOf(schema).then(function() {
var schemaObj = self2._addSchema(schema, void 0, meta);
return schemaObj.validate || _compileAsync(schemaObj);
});
if (callback) {
p.then(
function(v) {
callback(null, v);
},
callback
);
}
return p;
function loadMetaSchemaOf(sch) {
var $schema = sch.$schema;
return $schema && !self2.getSchema($schema) ? compileAsync.call(self2, { $ref: $schema }, true) : Promise.resolve();
}
function _compileAsync(schemaObj) {
try {
return self2._compile(schemaObj);
} catch (e) {
if (e instanceof MissingRefError) return loadMissingSchema(e);
throw e;
}
function loadMissingSchema(e) {
var ref = e.missingSchema;
if (added(ref)) throw new Error("Schema " + ref + " is loaded but " + e.missingRef + " cannot be resolved");
var schemaPromise = self2._loadingSchemas[ref];
if (!schemaPromise) {
schemaPromise = self2._loadingSchemas[ref] = self2._opts.loadSchema(ref);
schemaPromise.then(removePromise, removePromise);
}
return schemaPromise.then(function(sch) {
if (!added(ref)) {
return loadMetaSchemaOf(sch).then(function() {
if (!added(ref)) self2.addSchema(sch, ref, void 0, meta);
});
}
}).then(function() {
return _compileAsync(schemaObj);
});
function removePromise() {
delete self2._loadingSchemas[ref];
}
function added(ref2) {
return self2._refs[ref2] || self2._schemas[ref2];
}
}
}
}
}
});
// node_modules/ajv/lib/dotjs/custom.js
var require_custom = __commonJS({
"node_modules/ajv/lib/dotjs/custom.js"(exports2, module2) {
"use strict";
module2.exports = function generate_custom(it, $keyword, $ruleType) {
var out = " ";
var $lvl = it.level;
var $dataLvl = it.dataLevel;
var $schema = it.schema[$keyword];
var $schemaPath = it.schemaPath + it.util.getProperty($keyword);
var $errSchemaPath = it.errSchemaPath + "/" + $keyword;
var $breakOnError = !it.opts.allErrors;
var $errorKeyword;
var $data = "data" + ($dataLvl || "");
var $valid = "valid" + $lvl;
var $errs = "errs__" + $lvl;
var $isData = it.opts.$data && $schema && $schema.$data, $schemaValue;
if ($isData) {
out += " var schema" + $lvl + " = " + it.util.getData($schema.$data, $dataLvl, it.dataPathArr) + "; ";
$schemaValue = "schema" + $lvl;
} else {
$schemaValue = $schema;
}
var $rule = this, $definition = "definition" + $lvl, $rDef = $rule.definition, $closingBraces = "";
var $compile, $inline, $macro, $ruleValidate, $validateCode;
if ($isData && $rDef.$data) {
$validateCode = "keywordValidate" + $lvl;
var $validateSchema = $rDef.validateSchema;
out += " var " + $definition + " = RULES.custom['" + $keyword + "'].definition; var " + $validateCode + " = " + $definition + ".validate;";
} else {
$ruleValidate = it.useCustomRule($rule, $schema, it.schema, it);
if (!$ruleValidate) return;
$schemaValue = "validate.schema" + $schemaPath;
$validateCode = $ruleValidate.code;
$compile = $rDef.compile;
$inline = $rDef.inline;
$macro = $rDef.macro;
}
var $ruleErrs = $validateCode + ".errors", $i = "i" + $lvl, $ruleErr = "ruleErr" + $lvl, $asyncKeyword = $rDef.async;
if ($asyncKeyword && !it.async) throw new Error("async keyword in sync schema");
if (!($inline || $macro)) {
out += "" + $ruleErrs + " = null;";
}
out += "var " + $errs + " = errors;var " + $valid + ";";
if ($isData && $rDef.$data) {
$closingBraces += "}";
out += " if (" + $schemaValue + " === undefined) { " + $valid + " = true; } else { ";
if ($validateSchema) {
$closingBraces += "}";
out += " " + $valid + " = " + $definition + ".validateSchema(" + $schemaValue + "); if (" + $valid + ") { ";
}
}
if ($inline) {
if ($rDef.statements) {
out += " " + $ruleValidate.validate + " ";
} else {
out += " " + $valid + " = " + $ruleValidate.validate + "; ";
}
} else if ($macro) {
var $it = it.util.copy(it);
var $closingBraces = "";
$it.level++;
var $nextValid = "valid" + $it.level;
$it.schema = $ruleValidate.validate;
$it.schemaPath = "";
var $wasComposite = it.compositeRule;
it.compositeRule = $it.compositeRule = true;
var $code = it.validate($it).replace(/validate\.schema/g, $validateCode);
it.compositeRule = $it.compositeRule = $wasComposite;
out += " " + $code;
} else {
var $$outStack = $$outStack || [];
$$outStack.push(out);
out = "";
out += " " + $validateCode + ".call( ";
if (it.opts.passContext) {
out += "this";
} else {
out += "self";
}
if ($compile || $rDef.schema === false) {
out += " , " + $data + " ";
} else {
out += " , " + $schemaValue + " , " + $data + " , validate.schema" + it.schemaPath + " ";
}
out += " , (dataPath || '')";
if (it.errorPath != '""') {
out += " + " + it.errorPath;
}
var $parentData = $dataLvl ? "data" + ($dataLvl - 1 || "") : "parentData", $parentDataProperty = $dataLvl ? it.dataPathArr[$dataLvl] : "parentDataProperty";
out += " , " + $parentData + " , " + $parentDataProperty + " , rootData ) ";
var def_callRuleValidate = out;
out = $$outStack.pop();
if ($rDef.errors === false) {
out += " " + $valid + " = ";
if ($asyncKeyword) {
out += "await ";
}
out += "" + def_callRuleValidate + "; ";
} else {
if ($asyncKeyword) {
$ruleErrs = "customErrors" + $lvl;
out += " var " + $ruleErrs + " = null; try { " + $valid + " = await " + def_callRuleValidate + "; } catch (e) { " + $valid + " = false; if (e instanceof ValidationError) " + $ruleErrs + " = e.errors; else throw e; } ";
} else {
out += " " + $ruleErrs + " = null; " + $valid + " = " + def_callRuleValidate + "; ";
}
}
}
if ($rDef.modifying) {
out += " if (" + $parentData + ") " + $data + " = " + $parentData + "[" + $parentDataProperty + "];";
}
out += "" + $closingBraces;
if ($rDef.valid) {
if ($breakOnError) {
out += " if (true) { ";
}
} else {
out += " if ( ";
if ($rDef.valid === void 0) {
out += " !";
if ($macro) {
out += "" + $nextValid;
} else {
out += "" + $valid;
}
} else {
out += " " + !$rDef.valid + " ";
}
out += ") { ";
$errorKeyword = $rule.keyword;
var $$outStack = $$outStack || [];
$$outStack.push(out);
out = "";
var $$outStack = $$outStack || [];
$$outStack.push(out);
out = "";
if (it.createErrors !== false) {
out += " { keyword: '" + ($errorKeyword || "custom") + "' , dataPath: (dataPath || '') + " + it.errorPath + " , schemaPath: " + it.util.toQuotedString($errSchemaPath) + " , params: { keyword: '" + $rule.keyword + "' } ";
if (it.opts.messages !== false) {
out += ` , message: 'should pass "` + $rule.keyword + `" keyword validation' `;
}
if (it.opts.verbose) {
out += " , schema: validate.schema" + $schemaPath + " , parentSchema: validate.schema" + it.schemaPath + " , data: " + $data + " ";
}
out += " } ";
} else {
out += " {} ";
}
var __err = out;
out = $$outStack.pop();
if (!it.compositeRule && $breakOnError) {
if (it.async) {
out += " throw new ValidationError([" + __err + "]); ";
} else {
out += " validate.errors = [" + __err + "]; return false; ";
}
} else {
out += " var err = " + __err + "; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ";
}
var def_customError = out;
out = $$outStack.pop();
if ($inline) {
if ($rDef.errors) {
if ($rDef.errors != "full") {
out += " for (var " + $i + "=" + $errs + "; " + $i + "<errors; " + $i + "++) { var " + $ruleErr + " = vErrors[" + $i + "]; if (" + $ruleErr + ".dataPath === undefined) " + $ruleErr + ".dataPath = (dataPath || '') + " + it.errorPath + "; if (" + $ruleErr + ".schemaPath === undefined) { " + $ruleErr + '.schemaPath = "' + $errSchemaPath + '"; } ';
if (it.opts.verbose) {
out += " " + $ruleErr + ".schema = " + $schemaValue + "; " + $ruleErr + ".data = " + $data + "; ";
}
out += " } ";
}
} else {
if ($rDef.errors === false) {
out += " " + def_customError + " ";
} else {
out += " if (" + $errs + " == errors) { " + def_customError + " } else { for (var " + $i + "=" + $errs + "; " + $i + "<errors; " + $i + "++) { var " + $ruleErr + " = vErrors[" + $i + "]; if (" + $ruleErr + ".dataPath === undefined) " + $ruleErr + ".dataPath = (dataPath || '') + " + it.errorPath + "; if (" + $ruleErr + ".schemaPath === undefined) { " + $ruleErr + '.schemaPath = "' + $errSchemaPath + '"; } ';
if (it.opts.verbose) {
out += " " + $ruleErr + ".schema = " + $schemaValue + "; " + $ruleErr + ".data = " + $data + "; ";
}
out += " } } ";
}
}
} else if ($macro) {
out += " var err = ";
if (it.createErrors !== false) {
out += " { keyword: '" + ($errorKeyword || "custom") + "' , dataPath: (dataPath || '') + " + it.errorPath + " , schemaPath: " + it.util.toQuotedString($errSchemaPath) + " , params: { keyword: '" + $rule.keyword + "' } ";
if (it.opts.messages !== false) {
out += ` , message: 'should pass "` + $rule.keyword + `" keyword validation' `;
}
if (it.opts.verbose) {
out += " , schema: validate.schema" + $schemaPath + " , parentSchema: validate.schema" + it.schemaPath + " , data: " + $data + " ";
}
out += " } ";
} else {
out += " {} ";
}
out += "; if (vErrors === null) vErrors = [err]; else vErrors.push(err); errors++; ";
if (!it.compositeRule && $breakOnError) {
if (it.async) {
out += " throw new ValidationError(vErrors); ";
} else {
out += " validate.errors = vErrors; return false; ";
}
}
} else {
if ($rDef.errors === false) {
out += " " + def_customError + " ";
} else {
out += " if (Array.isArray(" + $ruleErrs + ")) { if (vErrors === null) vErrors = " + $ruleErrs + "; else vErrors = vErrors.concat(" + $ruleErrs + "); errors = vErrors.length; for (var " + $i + "=" + $errs + "; " + $i + "<errors; " + $i + "++) { var " + $ruleErr + " = vErrors[" + $i + "]; if (" + $ruleErr + ".dataPath === undefined) " + $ruleErr + ".dataPath = (dataPath || '') + " + it.errorPath + "; " + $ruleErr + '.schemaPath = "' + $errSchemaPath + '"; ';
if (it.opts.verbose) {
out += " " + $ruleErr + ".schema = " + $schemaValue + "; " + $ruleErr + ".data = " + $data + "; ";
}
out += " } } else { " + def_customError + " } ";
}
}
out += " } ";
if ($breakOnError) {
out += " else { ";
}
}
return out;
};
}
});
// node_modules/ajv/lib/refs/json-schema-draft-07.json
var require_json_schema_draft_07 = __commonJS({
"node_modules/ajv/lib/refs/json-schema-draft-07.json"(exports2, module2) {
module2.exports = {
$schema: "http://json-schema.org/draft-07/schema#",
$id: "http://json-schema.org/draft-07/schema#",
title: "Core schema meta-schema",
definitions: {
schemaArray: {
type: "array",
minItems: 1,
items: { $ref: "#" }
},
nonNegativeInteger: {
type: "integer",
minimum: 0
},
nonNegativeIntegerDefault0: {
allOf: [
{ $ref: "#/definitions/nonNegativeInteger" },
{ default: 0 }
]
},
simpleTypes: {
enum: [
"array",
"boolean",
"integer",
"null",
"number",
"object",
"string"
]
},
stringArray: {
type: "array",
items: { type: "string" },
uniqueItems: true,
default: []
}
},
type: ["object", "boolean"],
properties: {
$id: {
type: "string",
format: "uri-reference"
},
$schema: {
type: "string",
format: "uri"
},
$ref: {
type: "string",
format: "uri-reference"
},
$comment: {
type: "string"
},
title: {
type: "string"
},
description: {
type: "string"
},
default: true,
readOnly: {
type: "boolean",
default: false
},
examples: {
type: "array",
items: true
},
multipleOf: {
type: "number",
exclusiveMinimum: 0
},
maximum: {
type: "number"
},
exclusiveMaximum: {
type: "number"
},
minimum: {
type: "number"
},
exclusiveMinimum: {
type: "number"
},
maxLength: { $ref: "#/definitions/nonNegativeInteger" },
minLength: { $ref: "#/definitions/nonNegativeIntegerDefault0" },
pattern: {
type: "string",
format: "regex"
},
additionalItems: { $ref: "#" },
items: {
anyOf: [
{ $ref: "#" },
{ $ref: "#/definitions/schemaArray" }
],
default: true
},
maxItems: { $ref: "#/definitions/nonNegativeInteger" },
minItems: { $ref: "#/definitions/nonNegativeIntegerDefault0" },
uniqueItems: {
type: "boolean",
default: false
},
contains: { $ref: "#" },
maxProperties: { $ref: "#/definitions/nonNegativeInteger" },
minProperties: { $ref: "#/definitions/nonNegativeIntegerDefault0" },
required: { $ref: "#/definitions/stringArray" },
additionalProperties: { $ref: "#" },
definitions: {
type: "object",
additionalProperties: { $ref: "#" },
default: {}
},
properties: {
type: "object",
additionalProperties: { $ref: "#" },
default: {}
},
patternProperties: {
type: "object",
additionalProperties: { $ref: "#" },
propertyNames: { format: "regex" },
default: {}
},
dependencies: {
type: "object",
additionalProperties: {
anyOf: [
{ $ref: "#" },
{ $ref: "#/definitions/stringArray" }
]
}
},
propertyNames: { $ref: "#" },
const: true,
enum: {
type: "array",
items: true,
minItems: 1,
uniqueItems: true
},
type: {
anyOf: [
{ $ref: "#/definitions/simpleTypes" },
{
type: "array",
items: { $ref: "#/definitions/simpleTypes" },
minItems: 1,
uniqueItems: true
}
]
},
format: { type: "string" },
contentMediaType: { type: "string" },
contentEncoding: { type: "string" },
if: { $ref: "#" },
then: { $ref: "#" },
else: { $ref: "#" },
allOf: { $ref: "#/definitions/schemaArray" },
anyOf: { $ref: "#/definitions/schemaArray" },
oneOf: { $ref: "#/definitions/schemaArray" },
not: { $ref: "#" }
},
default: true
};
}
});
// node_modules/ajv/lib/definition_schema.js
var require_definition_schema = __commonJS({
"node_modules/ajv/lib/definition_schema.js"(exports2, module2) {
"use strict";
var metaSchema = require_json_schema_draft_07();
module2.exports = {
$id: "https://github.com/ajv-validator/ajv/blob/master/lib/definition_schema.js",
definitions: {
simpleTypes: metaSchema.definitions.simpleTypes
},
type: "object",
dependencies: {
schema: ["validate"],
$data: ["validate"],
statements: ["inline"],
valid: { not: { required: ["macro"] } }
},
properties: {
type: metaSchema.properties.type,
schema: { type: "boolean" },
statements: { type: "boolean" },
dependencies: {
type: "array",
items: { type: "string" }
},
metaSchema: { type: "object" },
modifying: { type: "boolean" },
valid: { type: "boolean" },
$data: { type: "boolean" },
async: { type: "boolean" },
errors: {
anyOf: [
{ type: "boolean" },
{ const: "full" }
]
}
}
};
}
});
// node_modules/ajv/lib/keyword.js
var require_keyword = __commonJS({
"node_modules/ajv/lib/keyword.js"(exports2, module2) {
"use strict";
var IDENTIFIER = /^[a-z_$][a-z0-9_$-]*$/i;
var customRuleCode = require_custom();
var definitionSchema = require_definition_schema();
module2.exports = {
add: addKeyword,
get: getKeyword,
remove: removeKeyword,
validate: validateKeyword
};
function addKeyword(keyword, definition) {
var RULES = this.RULES;
if (RULES.keywords[keyword])
throw new Error("Keyword " + keyword + " is already defined");
if (!IDENTIFIER.test(keyword))
throw new Error("Keyword " + keyword + " is not a valid identifier");
if (definition) {
this.validateKeyword(definition, true);
var dataType = definition.type;
if (Array.isArray(dataType)) {
for (var i = 0; i < dataType.length; i++)
_addRule(keyword, dataType[i], definition);
} else {
_addRule(keyword, dataType, definition);
}
var metaSchema = definition.metaSchema;
if (metaSchema) {
if (definition.$data && this._opts.$data) {
metaSchema = {
anyOf: [
metaSchema,
{ "$ref": "https://raw.githubusercontent.com/ajv-validator/ajv/master/lib/refs/data.json#" }
]
};
}
definition.validateSchema = this.compile(metaSchema, true);
}
}
RULES.keywords[keyword] = RULES.all[keyword] = true;
function _addRule(keyword2, dataType2, definition2) {
var ruleGroup;
for (var i2 = 0; i2 < RULES.length; i2++) {
var rg = RULES[i2];
if (rg.type == dataType2) {
ruleGroup = rg;
break;
}
}
if (!ruleGroup) {
ruleGroup = { type: dataType2, rules: [] };
RULES.push(ruleGroup);
}
var rule = {
keyword: keyword2,
definition: definition2,
custom: true,
code: customRuleCode,
implements: definition2.implements
};
ruleGroup.rules.push(rule);
RULES.custom[keyword2] = rule;
}
return this;
}
function getKeyword(keyword) {
var rule = this.RULES.custom[keyword];
return rule ? rule.definition : this.RULES.keywords[keyword] || false;
}
function removeKeyword(keyword) {
var RULES = this.RULES;
delete RULES.keywords[keyword];
delete RULES.all[keyword];
delete RULES.custom[keyword];
for (var i = 0; i < RULES.length; i++) {
var rules = RULES[i].rules;
for (var j = 0; j < rules.length; j++) {
if (rules[j].keyword == keyword) {
rules.splice(j, 1);
break;
}
}
}
return this;
}
function validateKeyword(definition, throwError) {
validateKeyword.errors = null;
var v = this._validateKeyword = this._validateKeyword || this.compile(definitionSchema, true);
if (v(definition)) return true;
validateKeyword.errors = v.errors;
if (throwError)
throw new Error("custom keyword definition is invalid: " + this.errorsText(v.errors));
else
return false;
}
}
});
// node_modules/ajv/lib/refs/data.json
var require_data2 = __commonJS({
"node_modules/ajv/lib/refs/data.json"(exports2, module2) {
module2.exports = {
$schema: "http://json-schema.org/draft-07/schema#",
$id: "https://raw.githubusercontent.com/ajv-validator/ajv/master/lib/refs/data.json#",
description: "Meta-schema for $data reference (JSON Schema extension proposal)",
type: "object",
required: ["$data"],
properties: {
$data: {
type: "string",
anyOf: [
{ format: "relative-json-pointer" },
{ format: "json-pointer" }
]
}
},
additionalProperties: false
};
}
});
// node_modules/ajv/lib/ajv.js
var require_ajv = __commonJS({
"node_modules/ajv/lib/ajv.js"(exports2, module2) {
"use strict";
var compileSchema = require_compile();
var resolve = require_resolve();
var Cache = require_cache();
var SchemaObject = require_schema_obj();
var stableStringify = require_fast_json_stable_stringify();
var formats = require_formats();
var rules = require_rules();
var $dataMetaSchema = require_data();
var util5 = require_util();
module2.exports = Ajv2;
Ajv2.prototype.validate = validate;
Ajv2.prototype.compile = compile4;
Ajv2.prototype.addSchema = addSchema;
Ajv2.prototype.addMetaSchema = addMetaSchema;
Ajv2.prototype.validateSchema = validateSchema;
Ajv2.prototype.getSchema = getSchema;
Ajv2.prototype.removeSchema = removeSchema;
Ajv2.prototype.addFormat = addFormat2;
Ajv2.prototype.errorsText = errorsText;
Ajv2.prototype._addSchema = _addSchema;
Ajv2.prototype._compile = _compile;
Ajv2.prototype.compileAsync = require_async();
var customKeyword = require_keyword();
Ajv2.prototype.addKeyword = customKeyword.add;
Ajv2.prototype.getKeyword = customKeyword.get;
Ajv2.prototype.removeKeyword = customKeyword.remove;
Ajv2.prototype.validateKeyword = customKeyword.validate;
var errorClasses = require_error_classes();
Ajv2.ValidationError = errorClasses.Validation;
Ajv2.MissingRefError = errorClasses.MissingRef;
Ajv2.$dataMetaSchema = $dataMetaSchema;
var META_SCHEMA_ID = "http://json-schema.org/draft-07/schema";
var META_IGNORE_OPTIONS = ["removeAdditional", "useDefaults", "coerceTypes", "strictDefaults"];
var META_SUPPORT_DATA = ["/properties"];
function Ajv2(opts) {
if (!(this instanceof Ajv2)) return new Ajv2(opts);
opts = this._opts = util5.copy(opts) || {};
setLogger(this);
this._schemas = {};
this._refs = {};
this._fragments = {};
this._formats = formats(opts.format);
this._cache = opts.cache || new Cache();
this._loadingSchemas = {};
this._compilations = [];
this.RULES = rules();
this._getId = chooseGetId(opts);
opts.loopRequired = opts.loopRequired || Infinity;
if (opts.errorDataPath == "property") opts._errorDataPathProperty = true;
if (opts.serialize === void 0) opts.serialize = stableStringify;
this._metaOpts = getMetaSchemaOptions(this);
if (opts.formats) addInitialFormats(this);
if (opts.keywords) addInitialKeywords(this);
addDefaultMetaSchema(this);
if (typeof opts.meta == "object") this.addMetaSchema(opts.meta);
if (opts.nullable) this.addKeyword("nullable", { metaSchema: { type: "boolean" } });
addInitialSchemas(this);
}
function validate(schemaKeyRef, data2) {
var v;
if (typeof schemaKeyRef == "string") {
v = this.getSchema(schemaKeyRef);
if (!v) throw new Error('no schema with key or ref "' + schemaKeyRef + '"');
} else {
var schemaObj = this._addSchema(schemaKeyRef);
v = schemaObj.validate || this._compile(schemaObj);
}
var valid = v(data2);
if (v.$async !== true) this.errors = v.errors;
return valid;
}
function compile4(schema, _meta) {
var schemaObj = this._addSchema(schema, void 0, _meta);
return schemaObj.validate || this._compile(schemaObj);
}
function addSchema(schema, key, _skipValidation, _meta) {
if (Array.isArray(schema)) {
for (var i = 0; i < schema.length; i++) this.addSchema(schema[i], void 0, _skipValidation, _meta);
return this;
}
var id = this._getId(schema);
if (id !== void 0 && typeof id != "string")
throw new Error("schema id must be string");
key = resolve.normalizeId(key || id);
checkUnique(this, key);
this._schemas[key] = this._addSchema(schema, _skipValidation, _meta, true);
return this;
}
function addMetaSchema(schema, key, skipValidation) {
this.addSchema(schema, key, skipValidation, true);
return this;
}
function validateSchema(schema, throwOrLogError) {
var $schema = schema.$schema;
if ($schema !== void 0 && typeof $schema != "string")
throw new Error("$schema must be a string");
$schema = $schema || this._opts.defaultMeta || defaultMeta(this);
if (!$schema) {
this.logger.warn("meta-schema not available");
this.errors = null;
return true;
}
var valid = this.validate($schema, schema);
if (!valid && throwOrLogError) {
var message = "schema is invalid: " + this.errorsText();
if (this._opts.validateSchema == "log") this.logger.error(message);
else throw new Error(message);
}
return valid;
}
function defaultMeta(self2) {
var meta = self2._opts.meta;
self2._opts.defaultMeta = typeof meta == "object" ? self2._getId(meta) || meta : self2.getSchema(META_SCHEMA_ID) ? META_SCHEMA_ID : void 0;
return self2._opts.defaultMeta;
}
function getSchema(keyRef) {
var schemaObj = _getSchemaObj(this, keyRef);
switch (typeof schemaObj) {
case "object":
return schemaObj.validate || this._compile(schemaObj);
case "string":
return this.getSchema(schemaObj);
case "undefined":
return _getSchemaFragment(this, keyRef);
}
}
function _getSchemaFragment(self2, ref) {
var res = resolve.schema.call(self2, { schema: {} }, ref);
if (res) {
var schema = res.schema, root2 = res.root, baseId = res.baseId;
var v = compileSchema.call(self2, schema, root2, void 0, baseId);
self2._fragments[ref] = new SchemaObject({
ref,
fragment: true,
schema,
root: root2,
baseId,
validate: v
});
return v;
}
}
function _getSchemaObj(self2, keyRef) {
keyRef = resolve.normalizeId(keyRef);
return self2._schemas[keyRef] || self2._refs[keyRef] || self2._fragments[keyRef];
}
function removeSchema(schemaKeyRef) {
if (schemaKeyRef instanceof RegExp) {
_removeAllSchemas(this, this._schemas, schemaKeyRef);
_removeAllSchemas(this, this._refs, schemaKeyRef);
return this;
}
switch (typeof schemaKeyRef) {
case "undefined":
_removeAllSchemas(this, this._schemas);
_removeAllSchemas(this, this._refs);
this._cache.clear();
return this;
case "string":
var schemaObj = _getSchemaObj(this, schemaKeyRef);
if (schemaObj) this._cache.del(schemaObj.cacheKey);
delete this._schemas[schemaKeyRef];
delete this._refs[schemaKeyRef];
return this;
case "object":
var serialize3 = this._opts.serialize;
var cacheKey = serialize3 ? serialize3(schemaKeyRef) : schemaKeyRef;
this._cache.del(cacheKey);
var id = this._getId(schemaKeyRef);
if (id) {
id = resolve.normalizeId(id);
delete this._schemas[id];
delete this._refs[id];
}
}
return this;
}
function _removeAllSchemas(self2, schemas, regex) {
for (var keyRef in schemas) {
var schemaObj = schemas[keyRef];
if (!schemaObj.meta && (!regex || regex.test(keyRef))) {
self2._cache.del(schemaObj.cacheKey);
delete schemas[keyRef];
}
}
}
function _addSchema(schema, skipValidation, meta, shouldAddSchema) {
if (typeof schema != "object" && typeof schema != "boolean")
throw new Error("schema should be object or boolean");
var serialize3 = this._opts.serialize;
var cacheKey = serialize3 ? serialize3(schema) : schema;
var cached = this._cache.get(cacheKey);
if (cached) return cached;
shouldAddSchema = shouldAddSchema || this._opts.addUsedSchema !== false;
var id = resolve.normalizeId(this._getId(schema));
if (id && shouldAddSchema) checkUnique(this, id);
var willValidate = this._opts.validateSchema !== false && !skipValidation;
var recursiveMeta;
if (willValidate && !(recursiveMeta = id && id == resolve.normalizeId(schema.$schema)))
this.validateSchema(schema, true);
var localRefs = resolve.ids.call(this, schema);
var schemaObj = new SchemaObject({
id,
schema,
localRefs,
cacheKey,
meta
});
if (id[0] != "#" && shouldAddSchema) this._refs[id] = schemaObj;
this._cache.put(cacheKey, schemaObj);
if (willValidate && recursiveMeta) this.validateSchema(schema, true);
return schemaObj;
}
function _compile(schemaObj, root2) {
if (schemaObj.compiling) {
schemaObj.validate = callValidate;
callValidate.schema = schemaObj.schema;
callValidate.errors = null;
callValidate.root = root2 ? root2 : callValidate;
if (schemaObj.schema.$async === true)
callValidate.$async = true;
return callValidate;
}
schemaObj.compiling = true;
var currentOpts;
if (schemaObj.meta) {
currentOpts = this._opts;
this._opts = this._metaOpts;
}
var v;
try {
v = compileSchema.call(this, schemaObj.schema, root2, schemaObj.localRefs);
} catch (e) {
delete schemaObj.validate;
throw e;
} finally {
schemaObj.compiling = false;
if (schemaObj.meta) this._opts = currentOpts;
}
schemaObj.validate = v;
schemaObj.refs = v.refs;
schemaObj.refVal = v.refVal;
schemaObj.root = v.root;
return v;
function callValidate() {
var _validate = schemaObj.validate;
var result = _validate.apply(this, arguments);
callValidate.errors = _validate.errors;
return result;
}
}
function chooseGetId(opts) {
switch (opts.schemaId) {
case "auto":
return _get$IdOrId;
case "id":
return _getId;
default:
return _get$Id;
}
}
function _getId(schema) {
if (schema.$id) this.logger.warn("schema $id ignored", schema.$id);
return schema.id;
}
function _get$Id(schema) {
if (schema.id) this.logger.warn("schema id ignored", schema.id);
return schema.$id;
}
function _get$IdOrId(schema) {
if (schema.$id && schema.id && schema.$id != schema.id)
throw new Error("schema $id is different from id");
return schema.$id || schema.id;
}
function errorsText(errors, options) {
errors = errors || this.errors;
if (!errors) return "No errors";
options = options || {};
var separator = options.separator === void 0 ? ", " : options.separator;
var dataVar = options.dataVar === void 0 ? "data" : options.dataVar;
var text3 = "";
for (var i = 0; i < errors.length; i++) {
var e = errors[i];
if (e) text3 += dataVar + e.dataPath + " " + e.message + separator;
}
return text3.slice(0, -separator.length);
}
function addFormat2(name, format) {
if (typeof format == "string") format = new RegExp(format);
this._formats[name] = format;
return this;
}
function addDefaultMetaSchema(self2) {
var $dataSchema;
if (self2._opts.$data) {
$dataSchema = require_data2();
self2.addMetaSchema($dataSchema, $dataSchema.$id, true);
}
if (self2._opts.meta === false) return;
var metaSchema = require_json_schema_draft_07();
if (self2._opts.$data) metaSchema = $dataMetaSchema(metaSchema, META_SUPPORT_DATA);
self2.addMetaSchema(metaSchema, META_SCHEMA_ID, true);
self2._refs["http://json-schema.org/schema"] = META_SCHEMA_ID;
}
function addInitialSchemas(self2) {
var optsSchemas = self2._opts.schemas;
if (!optsSchemas) return;
if (Array.isArray(optsSchemas)) self2.addSchema(optsSchemas);
else for (var key in optsSchemas) self2.addSchema(optsSchemas[key], key);
}
function addInitialFormats(self2) {
for (var name in self2._opts.formats) {
var format = self2._opts.formats[name];
self2.addFormat(name, format);
}
}
function addInitialKeywords(self2) {
for (var name in self2._opts.keywords) {
var keyword = self2._opts.keywords[name];
self2.addKeyword(name, keyword);
}
}
function checkUnique(self2, id) {
if (self2._schemas[id] || self2._refs[id])
throw new Error('schema with key or id "' + id + '" already exists');
}
function getMetaSchemaOptions(self2) {
var metaOpts = util5.copy(self2._opts);
for (var i = 0; i < META_IGNORE_OPTIONS.length; i++)
delete metaOpts[META_IGNORE_OPTIONS[i]];
return metaOpts;
}
function setLogger(self2) {
var logger = self2._opts.logger;
if (logger === false) {
self2.logger = { log: noop2, warn: noop2, error: noop2 };
} else {
if (logger === void 0) logger = console;
if (!(typeof logger == "object" && logger.log && logger.warn && logger.error))
throw new Error("logger must implement log, warn and error methods");
self2.logger = logger;
}
}
function noop2() {
}
}
});
// node_modules/@modelcontextprotocol/sdk/dist/esm/server/index.js
var import_ajv, Server;
var init_server = __esm({
"node_modules/@modelcontextprotocol/sdk/dist/esm/server/index.js"() {
init_protocol();
init_types();
import_ajv = __toESM(require_ajv(), 1);
Server = class extends Protocol {
/**
* Initializes this server with the given name and version information.
*/
constructor(_serverInfo, options) {
var _a2;
super(options);
this._serverInfo = _serverInfo;
this._capabilities = (_a2 = options === null || options === void 0 ? void 0 : options.capabilities) !== null && _a2 !== void 0 ? _a2 : {};
this._instructions = options === null || options === void 0 ? void 0 : options.instructions;
this.setRequestHandler(InitializeRequestSchema, (request) => this._oninitialize(request));
this.setNotificationHandler(InitializedNotificationSchema, () => {
var _a3;
return (_a3 = this.oninitialized) === null || _a3 === void 0 ? void 0 : _a3.call(this);
});
}
/**
* Registers new capabilities. This can only be called before connecting to a transport.
*
* The new capabilities will be merged with any existing capabilities previously given (e.g., at initialization).
*/
registerCapabilities(capabilities) {
if (this.transport) {
throw new Error("Cannot register capabilities after connecting to transport");
}
this._capabilities = mergeCapabilities(this._capabilities, capabilities);
}
assertCapabilityForMethod(method) {
var _a2, _b, _c;
switch (method) {
case "sampling/createMessage":
if (!((_a2 = this._clientCapabilities) === null || _a2 === void 0 ? void 0 : _a2.sampling)) {
throw new Error(`Client does not support sampling (required for ${method})`);
}
break;
case "elicitation/create":
if (!((_b = this._clientCapabilities) === null || _b === void 0 ? void 0 : _b.elicitation)) {
throw new Error(`Client does not support elicitation (required for ${method})`);
}
break;
case "roots/list":
if (!((_c = this._clientCapabilities) === null || _c === void 0 ? void 0 : _c.roots)) {
throw new Error(`Client does not support listing roots (required for ${method})`);
}
break;
case "ping":
break;
}
}
assertNotificationCapability(method) {
switch (method) {
case "notifications/message":
if (!this._capabilities.logging) {
throw new Error(`Server does not support logging (required for ${method})`);
}
break;
case "notifications/resources/updated":
case "notifications/resources/list_changed":
if (!this._capabilities.resources) {
throw new Error(`Server does not support notifying about resources (required for ${method})`);
}
break;
case "notifications/tools/list_changed":
if (!this._capabilities.tools) {
throw new Error(`Server does not support notifying of tool list changes (required for ${method})`);
}
break;
case "notifications/prompts/list_changed":
if (!this._capabilities.prompts) {
throw new Error(`Server does not support notifying of prompt list changes (required for ${method})`);
}
break;
case "notifications/cancelled":
break;
case "notifications/progress":
break;
}
}
assertRequestHandlerCapability(method) {
switch (method) {
case "sampling/createMessage":
if (!this._capabilities.sampling) {
throw new Error(`Server does not support sampling (required for ${method})`);
}
break;
case "logging/setLevel":
if (!this._capabilities.logging) {
throw new Error(`Server does not support logging (required for ${method})`);
}
break;
case "prompts/get":
case "prompts/list":
if (!this._capabilities.prompts) {
throw new Error(`Server does not support prompts (required for ${method})`);
}
break;
case "resources/list":
case "resources/templates/list":
case "resources/read":
if (!this._capabilities.resources) {
throw new Error(`Server does not support resources (required for ${method})`);
}
break;
case "tools/call":
case "tools/list":
if (!this._capabilities.tools) {
throw new Error(`Server does not support tools (required for ${method})`);
}
break;
case "ping":
case "initialize":
break;
}
}
async _oninitialize(request) {
const requestedVersion = request.params.protocolVersion;
this._clientCapabilities = request.params.capabilities;
this._clientVersion = request.params.clientInfo;
const protocolVersion = SUPPORTED_PROTOCOL_VERSIONS.includes(requestedVersion) ? requestedVersion : LATEST_PROTOCOL_VERSION;
return {
protocolVersion,
capabilities: this.getCapabilities(),
serverInfo: this._serverInfo,
...this._instructions && { instructions: this._instructions }
};
}
/**
* After initialization has completed, this will be populated with the client's reported capabilities.
*/
getClientCapabilities() {
return this._clientCapabilities;
}
/**
* After initialization has completed, this will be populated with information about the client's name and version.
*/
getClientVersion() {
return this._clientVersion;
}
getCapabilities() {
return this._capabilities;
}
async ping() {
return this.request({ method: "ping" }, EmptyResultSchema);
}
async createMessage(params, options) {
return this.request({ method: "sampling/createMessage", params }, CreateMessageResultSchema, options);
}
async elicitInput(params, options) {
const result = await this.request({ method: "elicitation/create", params }, ElicitResultSchema, options);
if (result.action === "accept" && result.content) {
try {
const ajv = new import_ajv.default();
const validate = ajv.compile(params.requestedSchema);
const isValid3 = validate(result.content);
if (!isValid3) {
throw new McpError(ErrorCode.InvalidParams, `Elicitation response content does not match requested schema: ${ajv.errorsText(validate.errors)}`);
}
} catch (error) {
if (error instanceof McpError) {
throw error;
}
throw new McpError(ErrorCode.InternalError, `Error validating elicitation response: ${error}`);
}
}
return result;
}
async listRoots(params, options) {
return this.request({ method: "roots/list", params }, ListRootsResultSchema, options);
}
async sendLoggingMessage(params) {
return this.notification({ method: "notifications/message", params });
}
async sendResourceUpdated(params) {
return this.notification({
method: "notifications/resources/updated",
params
});
}
async sendResourceListChanged() {
return this.notification({
method: "notifications/resources/list_changed"
});
}
async sendToolListChanged() {
return this.notification({ method: "notifications/tools/list_changed" });
}
async sendPromptListChanged() {
return this.notification({ method: "notifications/prompts/list_changed" });
}
};
}
});
// node_modules/axios/lib/helpers/bind.js
function bind(fn, thisArg) {
return function wrap2() {
return fn.apply(thisArg, arguments);
};
}
var init_bind = __esm({
"node_modules/axios/lib/helpers/bind.js"() {
"use strict";
}
});
// node_modules/axios/lib/utils.js
function isBuffer(val2) {
return val2 !== null && !isUndefined(val2) && val2.constructor !== null && !isUndefined(val2.constructor) && isFunction(val2.constructor.isBuffer) && val2.constructor.isBuffer(val2);
}
function isArrayBufferView(val2) {
let result;
if (typeof ArrayBuffer !== "undefined" && ArrayBuffer.isView) {
result = ArrayBuffer.isView(val2);
} else {
result = val2 && val2.buffer && isArrayBuffer(val2.buffer);
}
return result;
}
function forEach(obj, fn, { allOwnKeys = false } = {}) {
if (obj === null || typeof obj === "undefined") {
return;
}
let i;
let l;
if (typeof obj !== "object") {
obj = [obj];
}
if (isArray(obj)) {
for (i = 0, l = obj.length; i < l; i++) {
fn.call(null, obj[i], i, obj);
}
} else {
const keys = allOwnKeys ? Object.getOwnPropertyNames(obj) : Object.keys(obj);
const len = keys.length;
let key;
for (i = 0; i < len; i++) {
key = keys[i];
fn.call(null, obj[key], key, obj);
}
}
}
function findKey(obj, key) {
key = key.toLowerCase();
const keys = Object.keys(obj);
let i = keys.length;
let _key;
while (i-- > 0) {
_key = keys[i];
if (key === _key.toLowerCase()) {
return _key;
}
}
return null;
}
function merge() {
const { caseless } = isContextDefined(this) && this || {};
const result = {};
const assignValue = (val2, key) => {
const targetKey = caseless && findKey(result, key) || key;
if (isPlainObject(result[targetKey]) && isPlainObject(val2)) {
result[targetKey] = merge(result[targetKey], val2);
} else if (isPlainObject(val2)) {
result[targetKey] = merge({}, val2);
} else if (isArray(val2)) {
result[targetKey] = val2.slice();
} else {
result[targetKey] = val2;
}
};
for (let i = 0, l = arguments.length; i < l; i++) {
arguments[i] && forEach(arguments[i], assignValue);
}
return result;
}
function isSpecCompliantForm(thing) {
return !!(thing && isFunction(thing.append) && thing[Symbol.toStringTag] === "FormData" && thing[Symbol.iterator]);
}
var toString, getPrototypeOf, kindOf, kindOfTest, typeOfTest, isArray, isUndefined, isArrayBuffer, isString, isFunction, isNumber, isObject, isBoolean, isPlainObject, isDate, isFile, isBlob, isFileList, isStream, isFormData, isURLSearchParams, isReadableStream, isRequest, isResponse, isHeaders, trim, _global, isContextDefined, extend, stripBOM, inherits, toFlatObject, endsWith, toArray, isTypedArray, forEachEntry, matchAll, isHTMLForm, toCamelCase, hasOwnProperty, isRegExp, reduceDescriptors, freezeMethods, toObjectSet, noop, toFiniteNumber, toJSONObject, isAsyncFn, isThenable, _setImmediate, asap, utils_default;
var init_utils = __esm({
"node_modules/axios/lib/utils.js"() {
"use strict";
init_bind();
({ toString } = Object.prototype);
({ getPrototypeOf } = Object);
kindOf = /* @__PURE__ */ ((cache) => (thing) => {
const str = toString.call(thing);
return cache[str] || (cache[str] = str.slice(8, -1).toLowerCase());
})(/* @__PURE__ */ Object.create(null));
kindOfTest = (type) => {
type = type.toLowerCase();
return (thing) => kindOf(thing) === type;
};
typeOfTest = (type) => (thing) => typeof thing === type;
({ isArray } = Array);
isUndefined = typeOfTest("undefined");
isArrayBuffer = kindOfTest("ArrayBuffer");
isString = typeOfTest("string");
isFunction = typeOfTest("function");
isNumber = typeOfTest("number");
isObject = (thing) => thing !== null && typeof thing === "object";
isBoolean = (thing) => thing === true || thing === false;
isPlainObject = (val2) => {
if (kindOf(val2) !== "object") {
return false;
}
const prototype3 = getPrototypeOf(val2);
return (prototype3 === null || prototype3 === Object.prototype || Object.getPrototypeOf(prototype3) === null) && !(Symbol.toStringTag in val2) && !(Symbol.iterator in val2);
};
isDate = kindOfTest("Date");
isFile = kindOfTest("File");
isBlob = kindOfTest("Blob");
isFileList = kindOfTest("FileList");
isStream = (val2) => isObject(val2) && isFunction(val2.pipe);
isFormData = (thing) => {
let kind;
return thing && (typeof FormData === "function" && thing instanceof FormData || isFunction(thing.append) && ((kind = kindOf(thing)) === "formdata" || // detect form-data instance
kind === "object" && isFunction(thing.toString) && thing.toString() === "[object FormData]"));
};
isURLSearchParams = kindOfTest("URLSearchParams");
[isReadableStream, isRequest, isResponse, isHeaders] = ["ReadableStream", "Request", "Response", "Headers"].map(kindOfTest);
trim = (str) => str.trim ? str.trim() : str.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, "");
_global = (() => {
if (typeof globalThis !== "undefined") return globalThis;
return typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : global;
})();
isContextDefined = (context) => !isUndefined(context) && context !== _global;
extend = (a, b, thisArg, { allOwnKeys } = {}) => {
forEach(b, (val2, key) => {
if (thisArg && isFunction(val2)) {
a[key] = bind(val2, thisArg);
} else {
a[key] = val2;
}
}, { allOwnKeys });
return a;
};
stripBOM = (content) => {
if (content.charCodeAt(0) === 65279) {
content = content.slice(1);
}
return content;
};
inherits = (constructor, superConstructor, props, descriptors2) => {
constructor.prototype = Object.create(superConstructor.prototype, descriptors2);
constructor.prototype.constructor = constructor;
Object.defineProperty(constructor, "super", {
value: superConstructor.prototype
});
props && Object.assign(constructor.prototype, props);
};
toFlatObject = (sourceObj, destObj, filter5, propFilter) => {
let props;
let i;
let prop2;
const merged = {};
destObj = destObj || {};
if (sourceObj == null) return destObj;
do {
props = Object.getOwnPropertyNames(sourceObj);
i = props.length;
while (i-- > 0) {
prop2 = props[i];
if ((!propFilter || propFilter(prop2, sourceObj, destObj)) && !merged[prop2]) {
destObj[prop2] = sourceObj[prop2];
merged[prop2] = true;
}
}
sourceObj = filter5 !== false && getPrototypeOf(sourceObj);
} while (sourceObj && (!filter5 || filter5(sourceObj, destObj)) && sourceObj !== Object.prototype);
return destObj;
};
endsWith = (str, searchString, position) => {
str = String(str);
if (position === void 0 || position > str.length) {
position = str.length;
}
position -= searchString.length;
const lastIndex = str.indexOf(searchString, position);
return lastIndex !== -1 && lastIndex === position;
};
toArray = (thing) => {
if (!thing) return null;
if (isArray(thing)) return thing;
let i = thing.length;
if (!isNumber(i)) return null;
const arr = new Array(i);
while (i-- > 0) {
arr[i] = thing[i];
}
return arr;
};
isTypedArray = /* @__PURE__ */ ((TypedArray) => {
return (thing) => {
return TypedArray && thing instanceof TypedArray;
};
})(typeof Uint8Array !== "undefined" && getPrototypeOf(Uint8Array));
forEachEntry = (obj, fn) => {
const generator = obj && obj[Symbol.iterator];
const iterator = generator.call(obj);
let result;
while ((result = iterator.next()) && !result.done) {
const pair = result.value;
fn.call(obj, pair[0], pair[1]);
}
};
matchAll = (regExp, str) => {
let matches;
const arr = [];
while ((matches = regExp.exec(str)) !== null) {
arr.push(matches);
}
return arr;
};
isHTMLForm = kindOfTest("HTMLFormElement");
toCamelCase = (str) => {
return str.toLowerCase().replace(
/[-_\s]([a-z\d])(\w*)/g,
function replacer(m, p1, p2) {
return p1.toUpperCase() + p2;
}
);
};
hasOwnProperty = (({ hasOwnProperty: hasOwnProperty2 }) => (obj, prop2) => hasOwnProperty2.call(obj, prop2))(Object.prototype);
isRegExp = kindOfTest("RegExp");
reduceDescriptors = (obj, reducer) => {
const descriptors2 = Object.getOwnPropertyDescriptors(obj);
const reducedDescriptors = {};
forEach(descriptors2, (descriptor, name) => {
let ret;
if ((ret = reducer(descriptor, name, obj)) !== false) {
reducedDescriptors[name] = ret || descriptor;
}
});
Object.defineProperties(obj, reducedDescriptors);
};
freezeMethods = (obj) => {
reduceDescriptors(obj, (descriptor, name) => {
if (isFunction(obj) && ["arguments", "caller", "callee"].indexOf(name) !== -1) {
return false;
}
const value = obj[name];
if (!isFunction(value)) return;
descriptor.enumerable = false;
if ("writable" in descriptor) {
descriptor.writable = false;
return;
}
if (!descriptor.set) {
descriptor.set = () => {
throw Error("Can not rewrite read-only method '" + name + "'");
};
}
});
};
toObjectSet = (arrayOrString, delimiter) => {
const obj = {};
const define2 = (arr) => {
arr.forEach((value) => {
obj[value] = true;
});
};
isArray(arrayOrString) ? define2(arrayOrString) : define2(String(arrayOrString).split(delimiter));
return obj;
};
noop = () => {
};
toFiniteNumber = (value, defaultValue) => {
return value != null && Number.isFinite(value = +value) ? value : defaultValue;
};
toJSONObject = (obj) => {
const stack = new Array(10);
const visit = (source, i) => {
if (isObject(source)) {
if (stack.indexOf(source) >= 0) {
return;
}
if (!("toJSON" in source)) {
stack[i] = source;
const target = isArray(source) ? [] : {};
forEach(source, (value, key) => {
const reducedValue = visit(value, i + 1);
!isUndefined(reducedValue) && (target[key] = reducedValue);
});
stack[i] = void 0;
return target;
}
}
return source;
};
return visit(obj, 0);
};
isAsyncFn = kindOfTest("AsyncFunction");
isThenable = (thing) => thing && (isObject(thing) || isFunction(thing)) && isFunction(thing.then) && isFunction(thing.catch);
_setImmediate = ((setImmediateSupported, postMessageSupported) => {
if (setImmediateSupported) {
return setImmediate;
}
return postMessageSupported ? ((token, callbacks) => {
_global.addEventListener("message", ({ source, data: data2 }) => {
if (source === _global && data2 === token) {
callbacks.length && callbacks.shift()();
}
}, false);
return (cb) => {
callbacks.push(cb);
_global.postMessage(token, "*");
};
})(`axios@${Math.random()}`, []) : (cb) => setTimeout(cb);
})(
typeof setImmediate === "function",
isFunction(_global.postMessage)
);
asap = typeof queueMicrotask !== "undefined" ? queueMicrotask.bind(_global) : typeof process !== "undefined" && process.nextTick || _setImmediate;
utils_default = {
isArray,
isArrayBuffer,
isBuffer,
isFormData,
isArrayBufferView,
isString,
isNumber,
isBoolean,
isObject,
isPlainObject,
isReadableStream,
isRequest,
isResponse,
isHeaders,
isUndefined,
isDate,
isFile,
isBlob,
isRegExp,
isFunction,
isStream,
isURLSearchParams,
isTypedArray,
isFileList,
forEach,
merge,
extend,
trim,
stripBOM,
inherits,
toFlatObject,
kindOf,
kindOfTest,
endsWith,
toArray,
forEachEntry,
matchAll,
isHTMLForm,
hasOwnProperty,
hasOwnProp: hasOwnProperty,
// an alias to avoid ESLint no-prototype-builtins detection
reduceDescriptors,
freezeMethods,
toObjectSet,
toCamelCase,
noop,
toFiniteNumber,
findKey,
global: _global,
isContextDefined,
isSpecCompliantForm,
toJSONObject,
isAsyncFn,
isThenable,
setImmediate: _setImmediate,
asap
};
}
});
// node_modules/axios/lib/core/AxiosError.js
function AxiosError(message, code, config, request, response) {
Error.call(this);
if (Error.captureStackTrace) {
Error.captureStackTrace(this, this.constructor);
} else {
this.stack = new Error().stack;
}
this.message = message;
this.name = "AxiosError";
code && (this.code = code);
config && (this.config = config);
request && (this.request = request);
if (response) {
this.response = response;
this.status = response.status ? response.status : null;
}
}
var prototype, descriptors, AxiosError_default;
var init_AxiosError = __esm({
"node_modules/axios/lib/core/AxiosError.js"() {
"use strict";
init_utils();
utils_default.inherits(AxiosError, Error, {
toJSON: function toJSON() {
return {
// Standard
message: this.message,
name: this.name,
// Microsoft
description: this.description,
number: this.number,
// Mozilla
fileName: this.fileName,
lineNumber: this.lineNumber,
columnNumber: this.columnNumber,
stack: this.stack,
// Axios
config: utils_default.toJSONObject(this.config),
code: this.code,
status: this.status
};
}
});
prototype = AxiosError.prototype;
descriptors = {};
[
"ERR_BAD_OPTION_VALUE",
"ERR_BAD_OPTION",
"ECONNABORTED",
"ETIMEDOUT",
"ERR_NETWORK",
"ERR_FR_TOO_MANY_REDIRECTS",
"ERR_DEPRECATED",
"ERR_BAD_RESPONSE",
"ERR_BAD_REQUEST",
"ERR_CANCELED",
"ERR_NOT_SUPPORT",
"ERR_INVALID_URL"
// eslint-disable-next-line func-names
].forEach((code) => {
descriptors[code] = { value: code };
});
Object.defineProperties(AxiosError, descriptors);
Object.defineProperty(prototype, "isAxiosError", { value: true });
AxiosError.from = (error, code, config, request, response, customProps) => {
const axiosError = Object.create(prototype);
utils_default.toFlatObject(error, axiosError, function filter5(obj) {
return obj !== Error.prototype;
}, (prop2) => {
return prop2 !== "isAxiosError";
});
AxiosError.call(axiosError, error.message, code, config, request, response);
axiosError.cause = error;
axiosError.name = error.name;
customProps && Object.assign(axiosError, customProps);
return axiosError;
};
AxiosError_default = AxiosError;
}
});
// node_modules/delayed-stream/lib/delayed_stream.js
var require_delayed_stream = __commonJS({
"node_modules/delayed-stream/lib/delayed_stream.js"(exports2, module2) {
var Stream = require("stream").Stream;
var util5 = require("util");
module2.exports = DelayedStream;
function DelayedStream() {
this.source = null;
this.dataSize = 0;
this.maxDataSize = 1024 * 1024;
this.pauseStream = true;
this._maxDataSizeExceeded = false;
this._released = false;
this._bufferedEvents = [];
}
util5.inherits(DelayedStream, Stream);
DelayedStream.create = function(source, options) {
var delayedStream = new this();
options = options || {};
for (var option in options) {
delayedStream[option] = options[option];
}
delayedStream.source = source;
var realEmit = source.emit;
source.emit = function() {
delayedStream._handleEmit(arguments);
return realEmit.apply(source, arguments);
};
source.on("error", function() {
});
if (delayedStream.pauseStream) {
source.pause();
}
return delayedStream;
};
Object.defineProperty(DelayedStream.prototype, "readable", {
configurable: true,
enumerable: true,
get: function() {
return this.source.readable;
}
});
DelayedStream.prototype.setEncoding = function() {
return this.source.setEncoding.apply(this.source, arguments);
};
DelayedStream.prototype.resume = function() {
if (!this._released) {
this.release();
}
this.source.resume();
};
DelayedStream.prototype.pause = function() {
this.source.pause();
};
DelayedStream.prototype.release = function() {
this._released = true;
this._bufferedEvents.forEach(function(args) {
this.emit.apply(this, args);
}.bind(this));
this._bufferedEvents = [];
};
DelayedStream.prototype.pipe = function() {
var r = Stream.prototype.pipe.apply(this, arguments);
this.resume();
return r;
};
DelayedStream.prototype._handleEmit = function(args) {
if (this._released) {
this.emit.apply(this, args);
return;
}
if (args[0] === "data") {
this.dataSize += args[1].length;
this._checkIfMaxDataSizeExceeded();
}
this._bufferedEvents.push(args);
};
DelayedStream.prototype._checkIfMaxDataSizeExceeded = function() {
if (this._maxDataSizeExceeded) {
return;
}
if (this.dataSize <= this.maxDataSize) {
return;
}
this._maxDataSizeExceeded = true;
var message = "DelayedStream#maxDataSize of " + this.maxDataSize + " bytes exceeded.";
this.emit("error", new Error(message));
};
}
});
// node_modules/combined-stream/lib/combined_stream.js
var require_combined_stream = __commonJS({
"node_modules/combined-stream/lib/combined_stream.js"(exports2, module2) {
var util5 = require("util");
var Stream = require("stream").Stream;
var DelayedStream = require_delayed_stream();
module2.exports = CombinedStream;
function CombinedStream() {
this.writable = false;
this.readable = true;
this.dataSize = 0;
this.maxDataSize = 2 * 1024 * 1024;
this.pauseStreams = true;
this._released = false;
this._streams = [];
this._currentStream = null;
this._insideLoop = false;
this._pendingNext = false;
}
util5.inherits(CombinedStream, Stream);
CombinedStream.create = function(options) {
var combinedStream = new this();
options = options || {};
for (var option in options) {
combinedStream[option] = options[option];
}
return combinedStream;
};
CombinedStream.isStreamLike = function(stream5) {
return typeof stream5 !== "function" && typeof stream5 !== "string" && typeof stream5 !== "boolean" && typeof stream5 !== "number" && !Buffer.isBuffer(stream5);
};
CombinedStream.prototype.append = function(stream5) {
var isStreamLike = CombinedStream.isStreamLike(stream5);
if (isStreamLike) {
if (!(stream5 instanceof DelayedStream)) {
var newStream = DelayedStream.create(stream5, {
maxDataSize: Infinity,
pauseStream: this.pauseStreams
});
stream5.on("data", this._checkDataSize.bind(this));
stream5 = newStream;
}
this._handleErrors(stream5);
if (this.pauseStreams) {
stream5.pause();
}
}
this._streams.push(stream5);
return this;
};
CombinedStream.prototype.pipe = function(dest, options) {
Stream.prototype.pipe.call(this, dest, options);
this.resume();
return dest;
};
CombinedStream.prototype._getNext = function() {
this._currentStream = null;
if (this._insideLoop) {
this._pendingNext = true;
return;
}
this._insideLoop = true;
try {
do {
this._pendingNext = false;
this._realGetNext();
} while (this._pendingNext);
} finally {
this._insideLoop = false;
}
};
CombinedStream.prototype._realGetNext = function() {
var stream5 = this._streams.shift();
if (typeof stream5 == "undefined") {
this.end();
return;
}
if (typeof stream5 !== "function") {
this._pipeNext(stream5);
return;
}
var getStream = stream5;
getStream(function(stream6) {
var isStreamLike = CombinedStream.isStreamLike(stream6);
if (isStreamLike) {
stream6.on("data", this._checkDataSize.bind(this));
this._handleErrors(stream6);
}
this._pipeNext(stream6);
}.bind(this));
};
CombinedStream.prototype._pipeNext = function(stream5) {
this._currentStream = stream5;
var isStreamLike = CombinedStream.isStreamLike(stream5);
if (isStreamLike) {
stream5.on("end", this._getNext.bind(this));
stream5.pipe(this, { end: false });
return;
}
var value = stream5;
this.write(value);
this._getNext();
};
CombinedStream.prototype._handleErrors = function(stream5) {
var self2 = this;
stream5.on("error", function(err2) {
self2._emitError(err2);
});
};
CombinedStream.prototype.write = function(data2) {
this.emit("data", data2);
};
CombinedStream.prototype.pause = function() {
if (!this.pauseStreams) {
return;
}
if (this.pauseStreams && this._currentStream && typeof this._currentStream.pause == "function") this._currentStream.pause();
this.emit("pause");
};
CombinedStream.prototype.resume = function() {
if (!this._released) {
this._released = true;
this.writable = true;
this._getNext();
}
if (this.pauseStreams && this._currentStream && typeof this._currentStream.resume == "function") this._currentStream.resume();
this.emit("resume");
};
CombinedStream.prototype.end = function() {
this._reset();
this.emit("end");
};
CombinedStream.prototype.destroy = function() {
this._reset();
this.emit("close");
};
CombinedStream.prototype._reset = function() {
this.writable = false;
this._streams = [];
this._currentStream = null;
};
CombinedStream.prototype._checkDataSize = function() {
this._updateDataSize();
if (this.dataSize <= this.maxDataSize) {
return;
}
var message = "DelayedStream#maxDataSize of " + this.maxDataSize + " bytes exceeded.";
this._emitError(new Error(message));
};
CombinedStream.prototype._updateDataSize = function() {
this.dataSize = 0;
var self2 = this;
this._streams.forEach(function(stream5) {
if (!stream5.dataSize) {
return;
}
self2.dataSize += stream5.dataSize;
});
if (this._currentStream && this._currentStream.dataSize) {
this.dataSize += this._currentStream.dataSize;
}
};
CombinedStream.prototype._emitError = function(err2) {
this._reset();
this.emit("error", err2);
};
}
});
// node_modules/mime-db/db.json
var require_db = __commonJS({
"node_modules/mime-db/db.json"(exports2, module2) {
module2.exports = {
"application/1d-interleaved-parityfec": {
source: "iana"
},
"application/3gpdash-qoe-report+xml": {
source: "iana",
charset: "UTF-8",
compressible: true
},
"application/3gpp-ims+xml": {
source: "iana",
compressible: true
},
"application/3gpphal+json": {
source: "iana",
compressible: true
},
"application/3gpphalforms+json": {
source: "iana",
compressible: true
},
"application/a2l": {
source: "iana"
},
"application/ace+cbor": {
source: "iana"
},
"application/activemessage": {
source: "iana"
},
"application/activity+json": {
source: "iana",
compressible: true
},
"application/alto-costmap+json": {
source: "iana",
compressible: true
},
"application/alto-costmapfilter+json": {
source: "iana",
compressible: true
},
"application/alto-directory+json": {
source: "iana",
compressible: true
},
"application/alto-endpointcost+json": {
source: "iana",
compressible: true
},
"application/alto-endpointcostparams+json": {
source: "iana",
compressible: true
},
"application/alto-endpointprop+json": {
source: "iana",
compressible: true
},
"application/alto-endpointpropparams+json": {
source: "iana",
compressible: true
},
"application/alto-error+json": {
source: "iana",
compressible: true
},
"application/alto-networkmap+json": {
source: "iana",
compressible: true
},
"application/alto-networkmapfilter+json": {
source: "iana",
compressible: true
},
"application/alto-updatestreamcontrol+json": {
source: "iana",
compressible: true
},
"application/alto-updatestreamparams+json": {
source: "iana",
compressible: true
},
"application/aml": {
source: "iana"
},
"application/andrew-inset": {
source: "iana",
extensions: ["ez"]
},
"application/applefile": {
source: "iana"
},
"application/applixware": {
source: "apache",
extensions: ["aw"]
},
"application/at+jwt": {
source: "iana"
},
"application/atf": {
source: "iana"
},
"application/atfx": {
source: "iana"
},
"application/atom+xml": {
source: "iana",
compressible: true,
extensions: ["atom"]
},
"application/atomcat+xml": {
source: "iana",
compressible: true,
extensions: ["atomcat"]
},
"application/atomdeleted+xml": {
source: "iana",
compressible: true,
extensions: ["atomdeleted"]
},
"application/atomicmail": {
source: "iana"
},
"application/atomsvc+xml": {
source: "iana",
compressible: true,
extensions: ["atomsvc"]
},
"application/atsc-dwd+xml": {
source: "iana",
compressible: true,
extensions: ["dwd"]
},
"application/atsc-dynamic-event-message": {
source: "iana"
},
"application/atsc-held+xml": {
source: "iana",
compressible: true,
extensions: ["held"]
},
"application/atsc-rdt+json": {
source: "iana",
compressible: true
},
"application/atsc-rsat+xml": {
source: "iana",
compressible: true,
extensions: ["rsat"]
},
"application/atxml": {
source: "iana"
},
"application/auth-policy+xml": {
source: "iana",
compressible: true
},
"application/bacnet-xdd+zip": {
source: "iana",
compressible: false
},
"application/batch-smtp": {
source: "iana"
},
"application/bdoc": {
compressible: false,
extensions: ["bdoc"]
},
"application/beep+xml": {
source: "iana",
charset: "UTF-8",
compressible: true
},
"application/calendar+json": {
source: "iana",
compressible: true
},
"application/calendar+xml": {
source: "iana",
compressible: true,
extensions: ["xcs"]
},
"application/call-completion": {
source: "iana"
},
"application/cals-1840": {
source: "iana"
},
"application/captive+json": {
source: "iana",
compressible: true
},
"application/cbor": {
source: "iana"
},
"application/cbor-seq": {
source: "iana"
},
"application/cccex": {
source: "iana"
},
"application/ccmp+xml": {
source: "iana",
compressible: true
},
"application/ccxml+xml": {
source: "iana",
compressible: true,
extensions: ["ccxml"]
},
"application/cdfx+xml": {
source: "iana",
compressible: true,
extensions: ["cdfx"]
},
"application/cdmi-capability": {
source: "iana",
extensions: ["cdmia"]
},
"application/cdmi-container": {
source: "iana",
extensions: ["cdmic"]
},
"application/cdmi-domain": {
source: "iana",
extensions: ["cdmid"]
},
"application/cdmi-object": {
source: "iana",
extensions: ["cdmio"]
},
"application/cdmi-queue": {
source: "iana",
extensions: ["cdmiq"]
},
"application/cdni": {
source: "iana"
},
"application/cea": {
source: "iana"
},
"application/cea-2018+xml": {
source: "iana",
compressible: true
},
"application/cellml+xml": {
source: "iana",
compressible: true
},
"application/cfw": {
source: "iana"
},
"application/city+json": {
source: "iana",
compressible: true
},
"application/clr": {
source: "iana"
},
"application/clue+xml": {
source: "iana",
compressible: true
},
"application/clue_info+xml": {
source: "iana",
compressible: true
},
"application/cms": {
source: "iana"
},
"application/cnrp+xml": {
source: "iana",
compressible: true
},
"application/coap-group+json": {
source: "iana",
compressible: true
},
"application/coap-payload": {
source: "iana"
},
"application/commonground": {
source: "iana"
},
"application/conference-info+xml": {
source: "iana",
compressible: true
},
"application/cose": {
source: "iana"
},
"application/cose-key": {
source: "iana"
},
"application/cose-key-set": {
source: "iana"
},
"application/cpl+xml": {
source: "iana",
compressible: true,
extensions: ["cpl"]
},
"application/csrattrs": {
source: "iana"
},
"application/csta+xml": {
source: "iana",
compressible: true
},
"application/cstadata+xml": {
source: "iana",
compressible: true
},
"application/csvm+json": {
source: "iana",
compressible: true
},
"application/cu-seeme": {
source: "apache",
extensions: ["cu"]
},
"application/cwt": {
source: "iana"
},
"application/cybercash": {
source: "iana"
},
"application/dart": {
compressible: true
},
"application/dash+xml": {
source: "iana",
compressible: true,
extensions: ["mpd"]
},
"application/dash-patch+xml": {
source: "iana",
compressible: true,
extensions: ["mpp"]
},
"application/dashdelta": {
source: "iana"
},
"application/davmount+xml": {
source: "iana",
compressible: true,
extensions: ["davmount"]
},
"application/dca-rft": {
source: "iana"
},
"application/dcd": {
source: "iana"
},
"application/dec-dx": {
source: "iana"
},
"application/dialog-info+xml": {
source: "iana",
compressible: true
},
"application/dicom": {
source: "iana"
},
"application/dicom+json": {
source: "iana",
compressible: true
},
"application/dicom+xml": {
source: "iana",
compressible: true
},
"application/dii": {
source: "iana"
},
"application/dit": {
source: "iana"
},
"application/dns": {
source: "iana"
},
"application/dns+json": {
source: "iana",
compressible: true
},
"application/dns-message": {
source: "iana"
},
"application/docbook+xml": {
source: "apache",
compressible: true,
extensions: ["dbk"]
},
"application/dots+cbor": {
source: "iana"
},
"application/dskpp+xml": {
source: "iana",
compressible: true
},
"application/dssc+der": {
source: "iana",
extensions: ["dssc"]
},
"application/dssc+xml": {
source: "iana",
compressible: true,
extensions: ["xdssc"]
},
"application/dvcs": {
source: "iana"
},
"application/ecmascript": {
source: "iana",
compressible: true,
extensions: ["es", "ecma"]
},
"application/edi-consent": {
source: "iana"
},
"application/edi-x12": {
source: "iana",
compressible: false
},
"application/edifact": {
source: "iana",
compressible: false
},
"application/efi": {
source: "iana"
},
"application/elm+json": {
source: "iana",
charset: "UTF-8",
compressible: true
},
"application/elm+xml": {
source: "iana",
compressible: true
},
"application/emergencycalldata.cap+xml": {
source: "iana",
charset: "UTF-8",
compressible: true
},
"application/emergencycalldata.comment+xml": {
source: "iana",
compressible: true
},
"application/emergencycalldata.control+xml": {
source: "iana",
compressible: true
},
"application/emergencycalldata.deviceinfo+xml": {
source: "iana",
compressible: true
},
"application/emergencycalldata.ecall.msd": {
source: "iana"
},
"application/emergencycalldata.providerinfo+xml": {
source: "iana",
compressible: true
},
"application/emergencycalldata.serviceinfo+xml": {
source: "iana",
compressible: true
},
"application/emergencycalldata.subscriberinfo+xml": {
source: "iana",
compressible: true
},
"application/emergencycalldata.veds+xml": {
source: "iana",
compressible: true
},
"application/emma+xml": {
source: "iana",
compressible: true,
extensions: ["emma"]
},
"application/emotionml+xml": {
source: "iana",
compressible: true,
extensions: ["emotionml"]
},
"application/encaprtp": {
source: "iana"
},
"application/epp+xml": {
source: "iana",
compressible: true
},
"application/epub+zip": {
source: "iana",
compressible: false,
extensions: ["epub"]
},
"application/eshop": {
source: "iana"
},
"application/exi": {
source: "iana",
extensions: ["exi"]
},
"application/expect-ct-report+json": {
source: "iana",
compressible: true
},
"application/express": {
source: "iana",
extensions: ["exp"]
},
"application/fastinfoset": {
source: "iana"
},
"application/fastsoap": {
source: "iana"
},
"application/fdt+xml": {
source: "iana",
compressible: true,
extensions: ["fdt"]
},
"application/fhir+json": {
source: "iana",
charset: "UTF-8",
compressible: true
},
"application/fhir+xml": {
source: "iana",
charset: "UTF-8",
compressible: true
},
"application/fido.trusted-apps+json": {
compressible: true
},
"application/fits": {
source: "iana"
},
"application/flexfec": {
source: "iana"
},
"application/font-sfnt": {
source: "iana"
},
"application/font-tdpfr": {
source: "iana",
extensions: ["pfr"]
},
"application/font-woff": {
source: "iana",
compressible: false
},
"application/framework-attributes+xml": {
source: "iana",
compressible: true
},
"application/geo+json": {
source: "iana",
compressible: true,
extensions: ["geojson"]
},
"application/geo+json-seq": {
source: "iana"
},
"application/geopackage+sqlite3": {
source: "iana"
},
"application/geoxacml+xml": {
source: "iana",
compressible: true
},
"application/gltf-buffer": {
source: "iana"
},
"application/gml+xml": {
source: "iana",
compressible: true,
extensions: ["gml"]
},
"application/gpx+xml": {
source: "apache",
compressible: true,
extensions: ["gpx"]
},
"application/gxf": {
source: "apache",
extensions: ["gxf"]
},
"application/gzip": {
source: "iana",
compressible: false,
extensions: ["gz"]
},
"application/h224": {
source: "iana"
},
"application/held+xml": {
source: "iana",
compressible: true
},
"application/hjson": {
extensions: ["hjson"]
},
"application/http": {
source: "iana"
},
"application/hyperstudio": {
source: "iana",
extensions: ["stk"]
},
"application/ibe-key-request+xml": {
source: "iana",
compressible: true
},
"application/ibe-pkg-reply+xml": {
source: "iana",
compressible: true
},
"application/ibe-pp-data": {
source: "iana"
},
"application/iges": {
source: "iana"
},
"application/im-iscomposing+xml": {
source: "iana",
charset: "UTF-8",
compressible: true
},
"application/index": {
source: "iana"
},
"application/index.cmd": {
source: "iana"
},
"application/index.obj": {
source: "iana"
},
"application/index.response": {
source: "iana"
},
"application/index.vnd": {
source: "iana"
},
"application/inkml+xml": {
source: "iana",
compressible: true,
extensions: ["ink", "inkml"]
},
"application/iotp": {
source: "iana"
},
"application/ipfix": {
source: "iana",
extensions: ["ipfix"]
},
"application/ipp": {
source: "iana"
},
"application/isup": {
source: "iana"
},
"application/its+xml": {
source: "iana",
compressible: true,
extensions: ["its"]
},
"application/java-archive": {
source: "apache",
compressible: false,
extensions: ["jar", "war", "ear"]
},
"application/java-serialized-object": {
source: "apache",
compressible: false,
extensions: ["ser"]
},
"application/java-vm": {
source: "apache",
compressible: false,
extensions: ["class"]
},
"application/javascript": {
source: "iana",
charset: "UTF-8",
compressible: true,
extensions: ["js", "mjs"]
},
"application/jf2feed+json": {
source: "iana",
compressible: true
},
"application/jose": {
source: "iana"
},
"application/jose+json": {
source: "iana",
compressible: true
},
"application/jrd+json": {
source: "iana",
compressible: true
},
"application/jscalendar+json": {
source: "iana",
compressible: true
},
"application/json": {
source: "iana",
charset: "UTF-8",
compressible: true,
extensions: ["json", "map"]
},
"application/json-patch+json": {
source: "iana",
compressible: true
},
"application/json-seq": {
source: "iana"
},
"application/json5": {
extensions: ["json5"]
},
"application/jsonml+json": {
source: "apache",
compressible: true,
extensions: ["jsonml"]
},
"application/jwk+json": {
source: "iana",
compressible: true
},
"application/jwk-set+json": {
source: "iana",
compressible: true
},
"application/jwt": {
source: "iana"
},
"application/kpml-request+xml": {
source: "iana",
compressible: true
},
"application/kpml-response+xml": {
source: "iana",
compressible: true
},
"application/ld+json": {
source: "iana",
compressible: true,
extensions: ["jsonld"]
},
"application/lgr+xml": {
source: "iana",
compressible: true,
extensions: ["lgr"]
},
"application/link-format": {
source: "iana"
},
"application/load-control+xml": {
source: "iana",
compressible: true
},
"application/lost+xml": {
source: "iana",
compressible: true,
extensions: ["lostxml"]
},
"application/lostsync+xml": {
source: "iana",
compressible: true
},
"application/lpf+zip": {
source: "iana",
compressible: false
},
"application/lxf": {
source: "iana"
},
"application/mac-binhex40": {
source: "iana",
extensions: ["hqx"]
},
"application/mac-compactpro": {
source: "apache",
extensions: ["cpt"]
},
"application/macwriteii": {
source: "iana"
},
"application/mads+xml": {
source: "iana",
compressible: true,
extensions: ["mads"]
},
"application/manifest+json": {
source: "iana",
charset: "UTF-8",
compressible: true,
extensions: ["webmanifest"]
},
"application/marc": {
source: "iana",
extensions: ["mrc"]
},
"application/marcxml+xml": {
source: "iana",
compressible: true,
extensions: ["mrcx"]
},
"application/mathematica": {
source: "iana",
extensions: ["ma", "nb", "mb"]
},
"application/mathml+xml": {
source: "iana",
compressible: true,
extensions: ["mathml"]
},
"application/mathml-content+xml": {
source: "iana",
compressible: true
},
"application/mathml-presentation+xml": {
source: "iana",
compressible: true
},
"application/mbms-associated-procedure-description+xml": {
source: "iana",
compressible: true
},
"application/mbms-deregister+xml": {
source: "iana",
compressible: true
},
"application/mbms-envelope+xml": {
source: "iana",
compressible: true
},
"application/mbms-msk+xml": {
source: "iana",
compressible: true
},
"application/mbms-msk-response+xml": {
source: "iana",
compressible: true
},
"application/mbms-protection-description+xml": {
source: "iana",
compressible: true
},
"application/mbms-reception-report+xml": {
source: "iana",
compressible: true
},
"application/mbms-register+xml": {
source: "iana",
compressible: true
},
"application/mbms-register-response+xml": {
source: "iana",
compressible: true
},
"application/mbms-schedule+xml": {
source: "iana",
compressible: true
},
"application/mbms-user-service-description+xml": {
source: "iana",
compressible: true
},
"application/mbox": {
source: "iana",
extensions: ["mbox"]
},
"application/media-policy-dataset+xml": {
source: "iana",
compressible: true,
extensions: ["mpf"]
},
"application/media_control+xml": {
source: "iana",
compressible: true
},
"application/mediaservercontrol+xml": {
source: "iana",
compressible: true,
extensions: ["mscml"]
},
"application/merge-patch+json": {
source: "iana",
compressible: true
},
"application/metalink+xml": {
source: "apache",
compressible: true,
extensions: ["metalink"]
},
"application/metalink4+xml": {
source: "iana",
compressible: true,
extensions: ["meta4"]
},
"application/mets+xml": {
source: "iana",
compressible: true,
extensions: ["mets"]
},
"application/mf4": {
source: "iana"
},
"application/mikey": {
source: "iana"
},
"application/mipc": {
source: "iana"
},
"application/missing-blocks+cbor-seq": {
source: "iana"
},
"application/mmt-aei+xml": {
source: "iana",
compressible: true,
extensions: ["maei"]
},
"application/mmt-usd+xml": {
source: "iana",
compressible: true,
extensions: ["musd"]
},
"application/mods+xml": {
source: "iana",
compressible: true,
extensions: ["mods"]
},
"application/moss-keys": {
source: "iana"
},
"application/moss-signature": {
source: "iana"
},
"application/mosskey-data": {
source: "iana"
},
"application/mosskey-request": {
source: "iana"
},
"application/mp21": {
source: "iana",
extensions: ["m21", "mp21"]
},
"application/mp4": {
source: "iana",
extensions: ["mp4s", "m4p"]
},
"application/mpeg4-generic": {
source: "iana"
},
"application/mpeg4-iod": {
source: "iana"
},
"application/mpeg4-iod-xmt": {
source: "iana"
},
"application/mrb-consumer+xml": {
source: "iana",
compressible: true
},
"application/mrb-publish+xml": {
source: "iana",
compressible: true
},
"application/msc-ivr+xml": {
source: "iana",
charset: "UTF-8",
compressible: true
},
"application/msc-mixer+xml": {
source: "iana",
charset: "UTF-8",
compressible: true
},
"application/msword": {
source: "iana",
compressible: false,
extensions: ["doc", "dot"]
},
"application/mud+json": {
source: "iana",
compressible: true
},
"application/multipart-core": {
source: "iana"
},
"application/mxf": {
source: "iana",
extensions: ["mxf"]
},
"application/n-quads": {
source: "iana",
extensions: ["nq"]
},
"application/n-triples": {
source: "iana",
extensions: ["nt"]
},
"application/nasdata": {
source: "iana"
},
"application/news-checkgroups": {
source: "iana",
charset: "US-ASCII"
},
"application/news-groupinfo": {
source: "iana",
charset: "US-ASCII"
},
"application/news-transmission": {
source: "iana"
},
"application/nlsml+xml": {
source: "iana",
compressible: true
},
"application/node": {
source: "iana",
extensions: ["cjs"]
},
"application/nss": {
source: "iana"
},
"application/oauth-authz-req+jwt": {
source: "iana"
},
"application/oblivious-dns-message": {
source: "iana"
},
"application/ocsp-request": {
source: "iana"
},
"application/ocsp-response": {
source: "iana"
},
"application/octet-stream": {
source: "iana",
compressible: false,
extensions: ["bin", "dms", "lrf", "mar", "so", "dist", "distz", "pkg", "bpk", "dump", "elc", "deploy", "exe", "dll", "deb", "dmg", "iso", "img", "msi", "msp", "msm", "buffer"]
},
"application/oda": {
source: "iana",
extensions: ["oda"]
},
"application/odm+xml": {
source: "iana",
compressible: true
},
"application/odx": {
source: "iana"
},
"application/oebps-package+xml": {
source: "iana",
compressible: true,
extensions: ["opf"]
},
"application/ogg": {
source: "iana",
compressible: false,
extensions: ["ogx"]
},
"application/omdoc+xml": {
source: "apache",
compressible: true,
extensions: ["omdoc"]
},
"application/onenote": {
source: "apache",
extensions: ["onetoc", "onetoc2", "onetmp", "onepkg"]
},
"application/opc-nodeset+xml": {
source: "iana",
compressible: true
},
"application/oscore": {
source: "iana"
},
"application/oxps": {
source: "iana",
extensions: ["oxps"]
},
"application/p21": {
source: "iana"
},
"application/p21+zip": {
source: "iana",
compressible: false
},
"application/p2p-overlay+xml": {
source: "iana",
compressible: true,
extensions: ["relo"]
},
"application/parityfec": {
source: "iana"
},
"application/passport": {
source: "iana"
},
"application/patch-ops-error+xml": {
source: "iana",
compressible: true,
extensions: ["xer"]
},
"application/pdf": {
source: "iana",
compressible: false,
extensions: ["pdf"]
},
"application/pdx": {
source: "iana"
},
"application/pem-certificate-chain": {
source: "iana"
},
"application/pgp-encrypted": {
source: "iana",
compressible: false,
extensions: ["pgp"]
},
"application/pgp-keys": {
source: "iana",
extensions: ["asc"]
},
"application/pgp-signature": {
source: "iana",
extensions: ["asc", "sig"]
},
"application/pics-rules": {
source: "apache",
extensions: ["prf"]
},
"application/pidf+xml": {
source: "iana",
charset: "UTF-8",
compressible: true
},
"application/pidf-diff+xml": {
source: "iana",
charset: "UTF-8",
compressible: true
},
"application/pkcs10": {
source: "iana",
extensions: ["p10"]
},
"application/pkcs12": {
source: "iana"
},
"application/pkcs7-mime": {
source: "iana",
extensions: ["p7m", "p7c"]
},
"application/pkcs7-signature": {
source: "iana",
extensions: ["p7s"]
},
"application/pkcs8": {
source: "iana",
extensions: ["p8"]
},
"application/pkcs8-encrypted": {
source: "iana"
},
"application/pkix-attr-cert": {
source: "iana",
extensions: ["ac"]
},
"application/pkix-cert": {
source: "iana",
extensions: ["cer"]
},
"application/pkix-crl": {
source: "iana",
extensions: ["crl"]
},
"application/pkix-pkipath": {
source: "iana",
extensions: ["pkipath"]
},
"application/pkixcmp": {
source: "iana",
extensions: ["pki"]
},
"application/pls+xml": {
source: "iana",
compressible: true,
extensions: ["pls"]
},
"application/poc-settings+xml": {
source: "iana",
charset: "UTF-8",
compressible: true
},
"application/postscript": {
source: "iana",
compressible: true,
extensions: ["ai", "eps", "ps"]
},
"application/ppsp-tracker+json": {
source: "iana",
compressible: true
},
"application/problem+json": {
source: "iana",
compressible: true
},
"application/problem+xml": {
source: "iana",
compressible: true
},
"application/provenance+xml": {
source: "iana",
compressible: true,
extensions: ["provx"]
},
"application/prs.alvestrand.titrax-sheet": {
source: "iana"
},
"application/prs.cww": {
source: "iana",
extensions: ["cww"]
},
"application/prs.cyn": {
source: "iana",
charset: "7-BIT"
},
"application/prs.hpub+zip": {
source: "iana",
compressible: false
},
"application/prs.nprend": {
source: "iana"
},
"application/prs.plucker": {
source: "iana"
},
"application/prs.rdf-xml-crypt": {
source: "iana"
},
"application/prs.xsf+xml": {
source: "iana",
compressible: true
},
"application/pskc+xml": {
source: "iana",
compressible: true,
extensions: ["pskcxml"]
},
"application/pvd+json": {
source: "iana",
compressible: true
},
"application/qsig": {
source: "iana"
},
"application/raml+yaml": {
compressible: true,
extensions: ["raml"]
},
"application/raptorfec": {
source: "iana"
},
"application/rdap+json": {
source: "iana",
compressible: true
},
"application/rdf+xml": {
source: "iana",
compressible: true,
extensions: ["rdf", "owl"]
},
"application/reginfo+xml": {
source: "iana",
compressible: true,
extensions: ["rif"]
},
"application/relax-ng-compact-syntax": {
source: "iana",
extensions: ["rnc"]
},
"application/remote-printing": {
source: "iana"
},
"application/reputon+json": {
source: "iana",
compressible: true
},
"application/resource-lists+xml": {
source: "iana",
compressible: true,
extensions: ["rl"]
},
"application/resource-lists-diff+xml": {
source: "iana",
compressible: true,
extensions: ["rld"]
},
"application/rfc+xml": {
source: "iana",
compressible: true
},
"application/riscos": {
source: "iana"
},
"application/rlmi+xml": {
source: "iana",
compressible: true
},
"application/rls-services+xml": {
source: "iana",
compressible: true,
extensions: ["rs"]
},
"application/route-apd+xml": {
source: "iana",
compressible: true,
extensions: ["rapd"]
},
"application/route-s-tsid+xml": {
source: "iana",
compressible: true,
extensions: ["sls"]
},
"application/route-usd+xml": {
source: "iana",
compressible: true,
extensions: ["rusd"]
},
"application/rpki-ghostbusters": {
source: "iana",
extensions: ["gbr"]
},
"application/rpki-manifest": {
source: "iana",
extensions: ["mft"]
},
"application/rpki-publication": {
source: "iana"
},
"application/rpki-roa": {
source: "iana",
extensions: ["roa"]
},
"application/rpki-updown": {
source: "iana"
},
"application/rsd+xml": {
source: "apache",
compressible: true,
extensions: ["rsd"]
},
"application/rss+xml": {
source: "apache",
compressible: true,
extensions: ["rss"]
},
"application/rtf": {
source: "iana",
compressible: true,
extensions: ["rtf"]
},
"application/rtploopback": {
source: "iana"
},
"application/rtx": {
source: "iana"
},
"application/samlassertion+xml": {
source: "iana",
compressible: true
},
"application/samlmetadata+xml": {
source: "iana",
compressible: true
},
"application/sarif+json": {
source: "iana",
compressible: true
},
"application/sarif-external-properties+json": {
source: "iana",
compressible: true
},
"application/sbe": {
source: "iana"
},
"application/sbml+xml": {
source: "iana",
compressible: true,
extensions: ["sbml"]
},
"application/scaip+xml": {
source: "iana",
compressible: true
},
"application/scim+json": {
source: "iana",
compressible: true
},
"application/scvp-cv-request": {
source: "iana",
extensions: ["scq"]
},
"application/scvp-cv-response": {
source: "iana",
extensions: ["scs"]
},
"application/scvp-vp-request": {
source: "iana",
extensions: ["spq"]
},
"application/scvp-vp-response": {
source: "iana",
extensions: ["spp"]
},
"application/sdp": {
source: "iana",
extensions: ["sdp"]
},
"application/secevent+jwt": {
source: "iana"
},
"application/senml+cbor": {
source: "iana"
},
"application/senml+json": {
source: "iana",
compressible: true
},
"application/senml+xml": {
source: "iana",
compressible: true,
extensions: ["senmlx"]
},
"application/senml-etch+cbor": {
source: "iana"
},
"application/senml-etch+json": {
source: "iana",
compressible: true
},
"application/senml-exi": {
source: "iana"
},
"application/sensml+cbor": {
source: "iana"
},
"application/sensml+json": {
source: "iana",
compressible: true
},
"application/sensml+xml": {
source: "iana",
compressible: true,
extensions: ["sensmlx"]
},
"application/sensml-exi": {
source: "iana"
},
"application/sep+xml": {
source: "iana",
compressible: true
},
"application/sep-exi": {
source: "iana"
},
"application/session-info": {
source: "iana"
},
"application/set-payment": {
source: "iana"
},
"application/set-payment-initiation": {
source: "iana",
extensions: ["setpay"]
},
"application/set-registration": {
source: "iana"
},
"application/set-registration-initiation": {
source: "iana",
extensions: ["setreg"]
},
"application/sgml": {
source: "iana"
},
"application/sgml-open-catalog": {
source: "iana"
},
"application/shf+xml": {
source: "iana",
compressible: true,
extensions: ["shf"]
},
"application/sieve": {
source: "iana",
extensions: ["siv", "sieve"]
},
"application/simple-filter+xml": {
source: "iana",
compressible: true
},
"application/simple-message-summary": {
source: "iana"
},
"application/simplesymbolcontainer": {
source: "iana"
},
"application/sipc": {
source: "iana"
},
"application/slate": {
source: "iana"
},
"application/smil": {
source: "iana"
},
"application/smil+xml": {
source: "iana",
compressible: true,
extensions: ["smi", "smil"]
},
"application/smpte336m": {
source: "iana"
},
"application/soap+fastinfoset": {
source: "iana"
},
"application/soap+xml": {
source: "iana",
compressible: true
},
"application/sparql-query": {
source: "iana",
extensions: ["rq"]
},
"application/sparql-results+xml": {
source: "iana",
compressible: true,
extensions: ["srx"]
},
"application/spdx+json": {
source: "iana",
compressible: true
},
"application/spirits-event+xml": {
source: "iana",
compressible: true
},
"application/sql": {
source: "iana"
},
"application/srgs": {
source: "iana",
extensions: ["gram"]
},
"application/srgs+xml": {
source: "iana",
compressible: true,
extensions: ["grxml"]
},
"application/sru+xml": {
source: "iana",
compressible: true,
extensions: ["sru"]
},
"application/ssdl+xml": {
source: "apache",
compressible: true,
extensions: ["ssdl"]
},
"application/ssml+xml": {
source: "iana",
compressible: true,
extensions: ["ssml"]
},
"application/stix+json": {
source: "iana",
compressible: true
},
"application/swid+xml": {
source: "iana",
compressible: true,
extensions: ["swidtag"]
},
"application/tamp-apex-update": {
source: "iana"
},
"application/tamp-apex-update-confirm": {
source: "iana"
},
"application/tamp-community-update": {
source: "iana"
},
"application/tamp-community-update-confirm": {
source: "iana"
},
"application/tamp-error": {
source: "iana"
},
"application/tamp-sequence-adjust": {
source: "iana"
},
"application/tamp-sequence-adjust-confirm": {
source: "iana"
},
"application/tamp-status-query": {
source: "iana"
},
"application/tamp-status-response": {
source: "iana"
},
"application/tamp-update": {
source: "iana"
},
"application/tamp-update-confirm": {
source: "iana"
},
"application/tar": {
compressible: true
},
"application/taxii+json": {
source: "iana",
compressible: true
},
"application/td+json": {
source: "iana",
compressible: true
},
"application/tei+xml": {
source: "iana",
compressible: true,
extensions: ["tei", "teicorpus"]
},
"application/tetra_isi": {
source: "iana"
},
"application/thraud+xml": {
source: "iana",
compressible: true,
extensions: ["tfi"]
},
"application/timestamp-query": {
source: "iana"
},
"application/timestamp-reply": {
source: "iana"
},
"application/timestamped-data": {
source: "iana",
extensions: ["tsd"]
},
"application/tlsrpt+gzip": {
source: "iana"
},
"application/tlsrpt+json": {
source: "iana",
compressible: true
},
"application/tnauthlist": {
source: "iana"
},
"application/token-introspection+jwt": {
source: "iana"
},
"application/toml": {
compressible: true,
extensions: ["toml"]
},
"application/trickle-ice-sdpfrag": {
source: "iana"
},
"application/trig": {
source: "iana",
extensions: ["trig"]
},
"application/ttml+xml": {
source: "iana",
compressible: true,
extensions: ["ttml"]
},
"application/tve-trigger": {
source: "iana"
},
"application/tzif": {
source: "iana"
},
"application/tzif-leap": {
source: "iana"
},
"application/ubjson": {
compressible: false,
extensions: ["ubj"]
},
"application/ulpfec": {
source: "iana"
},
"application/urc-grpsheet+xml": {
source: "iana",
compressible: true
},
"application/urc-ressheet+xml": {
source: "iana",
compressible: true,
extensions: ["rsheet"]
},
"application/urc-targetdesc+xml": {
source: "iana",
compressible: true,
extensions: ["td"]
},
"application/urc-uisocketdesc+xml": {
source: "iana",
compressible: true
},
"application/vcard+json": {
source: "iana",
compressible: true
},
"application/vcard+xml": {
source: "iana",
compressible: true
},
"application/vemmi": {
source: "iana"
},
"application/vividence.scriptfile": {
source: "apache"
},
"application/vnd.1000minds.decision-model+xml": {
source: "iana",
compressible: true,
extensions: ["1km"]
},
"application/vnd.3gpp-prose+xml": {
source: "iana",
compressible: true
},
"application/vnd.3gpp-prose-pc3ch+xml": {
source: "iana",
compressible: true
},
"application/vnd.3gpp-v2x-local-service-information": {
source: "iana"
},
"application/vnd.3gpp.5gnas": {
source: "iana"
},
"application/vnd.3gpp.access-transfer-events+xml": {
source: "iana",
compressible: true
},
"application/vnd.3gpp.bsf+xml": {
source: "iana",
compressible: true
},
"application/vnd.3gpp.gmop+xml": {
source: "iana",
compressible: true
},
"application/vnd.3gpp.gtpc": {
source: "iana"
},
"application/vnd.3gpp.interworking-data": {
source: "iana"
},
"application/vnd.3gpp.lpp": {
source: "iana"
},
"application/vnd.3gpp.mc-signalling-ear": {
source: "iana"
},
"application/vnd.3gpp.mcdata-affiliation-command+xml": {
source: "iana",
compressible: true
},
"application/vnd.3gpp.mcdata-info+xml": {
source: "iana",
compressible: true
},
"application/vnd.3gpp.mcdata-payload": {
source: "iana"
},
"application/vnd.3gpp.mcdata-service-config+xml": {
source: "iana",
compressible: true
},
"application/vnd.3gpp.mcdata-signalling": {
source: "iana"
},
"application/vnd.3gpp.mcdata-ue-config+xml": {
source: "iana",
compressible: true
},
"application/vnd.3gpp.mcdata-user-profile+xml": {
source: "iana",
compressible: true
},
"application/vnd.3gpp.mcptt-affiliation-command+xml": {
source: "iana",
compressible: true
},
"application/vnd.3gpp.mcptt-floor-request+xml": {
source: "iana",
compressible: true
},
"application/vnd.3gpp.mcptt-info+xml": {
source: "iana",
compressible: true
},
"application/vnd.3gpp.mcptt-location-info+xml": {
source: "iana",
compressible: true
},
"application/vnd.3gpp.mcptt-mbms-usage-info+xml": {
source: "iana",
compressible: true
},
"application/vnd.3gpp.mcptt-service-config+xml": {
source: "iana",
compressible: true
},
"application/vnd.3gpp.mcptt-signed+xml": {
source: "iana",
compressible: true
},
"application/vnd.3gpp.mcptt-ue-config+xml": {
source: "iana",
compressible: true
},
"application/vnd.3gpp.mcptt-ue-init-config+xml": {
source: "iana",
compressible: true
},
"application/vnd.3gpp.mcptt-user-profile+xml": {
source: "iana",
compressible: true
},
"application/vnd.3gpp.mcvideo-affiliation-command+xml": {
source: "iana",
compressible: true
},
"application/vnd.3gpp.mcvideo-affiliation-info+xml": {
source: "iana",
compressible: true
},
"application/vnd.3gpp.mcvideo-info+xml": {
source: "iana",
compressible: true
},
"application/vnd.3gpp.mcvideo-location-info+xml": {
source: "iana",
compressible: true
},
"application/vnd.3gpp.mcvideo-mbms-usage-info+xml": {
source: "iana",
compressible: true
},
"application/vnd.3gpp.mcvideo-service-config+xml": {
source: "iana",
compressible: true
},
"application/vnd.3gpp.mcvideo-transmission-request+xml": {
source: "iana",
compressible: true
},
"application/vnd.3gpp.mcvideo-ue-config+xml": {
source: "iana",
compressible: true
},
"application/vnd.3gpp.mcvideo-user-profile+xml": {
source: "iana",
compressible: true
},
"application/vnd.3gpp.mid-call+xml": {
source: "iana",
compressible: true
},
"application/vnd.3gpp.ngap": {
source: "iana"
},
"application/vnd.3gpp.pfcp": {
source: "iana"
},
"application/vnd.3gpp.pic-bw-large": {
source: "iana",
extensions: ["plb"]
},
"application/vnd.3gpp.pic-bw-small": {
source: "iana",
extensions: ["psb"]
},
"application/vnd.3gpp.pic-bw-var": {
source: "iana",
extensions: ["pvb"]
},
"application/vnd.3gpp.s1ap": {
source: "iana"
},
"application/vnd.3gpp.sms": {
source: "iana"
},
"application/vnd.3gpp.sms+xml": {
source: "iana",
compressible: true
},
"application/vnd.3gpp.srvcc-ext+xml": {
source: "iana",
compressible: true
},
"application/vnd.3gpp.srvcc-info+xml": {
source: "iana",
compressible: true
},
"application/vnd.3gpp.state-and-event-info+xml": {
source: "iana",
compressible: true
},
"application/vnd.3gpp.ussd+xml": {
source: "iana",
compressible: true
},
"application/vnd.3gpp2.bcmcsinfo+xml": {
source: "iana",
compressible: true
},
"application/vnd.3gpp2.sms": {
source: "iana"
},
"application/vnd.3gpp2.tcap": {
source: "iana",
extensions: ["tcap"]
},
"application/vnd.3lightssoftware.imagescal": {
source: "iana"
},
"application/vnd.3m.post-it-notes": {
source: "iana",
extensions: ["pwn"]
},
"application/vnd.accpac.simply.aso": {
source: "iana",
extensions: ["aso"]
},
"application/vnd.accpac.simply.imp": {
source: "iana",
extensions: ["imp"]
},
"application/vnd.acucobol": {
source: "iana",
extensions: ["acu"]
},
"application/vnd.acucorp": {
source: "iana",
extensions: ["atc", "acutc"]
},
"application/vnd.adobe.air-application-installer-package+zip": {
source: "apache",
compressible: false,
extensions: ["air"]
},
"application/vnd.adobe.flash.movie": {
source: "iana"
},
"application/vnd.adobe.formscentral.fcdt": {
source: "iana",
extensions: ["fcdt"]
},
"application/vnd.adobe.fxp": {
source: "iana",
extensions: ["fxp", "fxpl"]
},
"application/vnd.adobe.partial-upload": {
source: "iana"
},
"application/vnd.adobe.xdp+xml": {
source: "iana",
compressible: true,
extensions: ["xdp"]
},
"application/vnd.adobe.xfdf": {
source: "iana",
extensions: ["xfdf"]
},
"application/vnd.aether.imp": {
source: "iana"
},
"application/vnd.afpc.afplinedata": {
source: "iana"
},
"application/vnd.afpc.afplinedata-pagedef": {
source: "iana"
},
"application/vnd.afpc.cmoca-cmresource": {
source: "iana"
},
"application/vnd.afpc.foca-charset": {
source: "iana"
},
"application/vnd.afpc.foca-codedfont": {
source: "iana"
},
"application/vnd.afpc.foca-codepage": {
source: "iana"
},
"application/vnd.afpc.modca": {
source: "iana"
},
"application/vnd.afpc.modca-cmtable": {
source: "iana"
},
"application/vnd.afpc.modca-formdef": {
source: "iana"
},
"application/vnd.afpc.modca-mediummap": {
source: "iana"
},
"application/vnd.afpc.modca-objectcontainer": {
source: "iana"
},
"application/vnd.afpc.modca-overlay": {
source: "iana"
},
"application/vnd.afpc.modca-pagesegment": {
source: "iana"
},
"application/vnd.age": {
source: "iana",
extensions: ["age"]
},
"application/vnd.ah-barcode": {
source: "iana"
},
"application/vnd.ahead.space": {
source: "iana",
extensions: ["ahead"]
},
"application/vnd.airzip.filesecure.azf": {
source: "iana",
extensions: ["azf"]
},
"application/vnd.airzip.filesecure.azs": {
source: "iana",
extensions: ["azs"]
},
"application/vnd.amadeus+json": {
source: "iana",
compressible: true
},
"application/vnd.amazon.ebook": {
source: "apache",
extensions: ["azw"]
},
"application/vnd.amazon.mobi8-ebook": {
source: "iana"
},
"application/vnd.americandynamics.acc": {
source: "iana",
extensions: ["acc"]
},
"application/vnd.amiga.ami": {
source: "iana",
extensions: ["ami"]
},
"application/vnd.amundsen.maze+xml": {
source: "iana",
compressible: true
},
"application/vnd.android.ota": {
source: "iana"
},
"application/vnd.android.package-archive": {
source: "apache",
compressible: false,
extensions: ["apk"]
},
"application/vnd.anki": {
source: "iana"
},
"application/vnd.anser-web-certificate-issue-initiation": {
source: "iana",
extensions: ["cii"]
},
"application/vnd.anser-web-funds-transfer-initiation": {
source: "apache",
extensions: ["fti"]
},
"application/vnd.antix.game-component": {
source: "iana",
extensions: ["atx"]
},
"application/vnd.apache.arrow.file": {
source: "iana"
},
"application/vnd.apache.arrow.stream": {
source: "iana"
},
"application/vnd.apache.thrift.binary": {
source: "iana"
},
"application/vnd.apache.thrift.compact": {
source: "iana"
},
"application/vnd.apache.thrift.json": {
source: "iana"
},
"application/vnd.api+json": {
source: "iana",
compressible: true
},
"application/vnd.aplextor.warrp+json": {
source: "iana",
compressible: true
},
"application/vnd.apothekende.reservation+json": {
source: "iana",
compressible: true
},
"application/vnd.apple.installer+xml": {
source: "iana",
compressible: true,
extensions: ["mpkg"]
},
"application/vnd.apple.keynote": {
source: "iana",
extensions: ["key"]
},
"application/vnd.apple.mpegurl": {
source: "iana",
extensions: ["m3u8"]
},
"application/vnd.apple.numbers": {
source: "iana",
extensions: ["numbers"]
},
"application/vnd.apple.pages": {
source: "iana",
extensions: ["pages"]
},
"application/vnd.apple.pkpass": {
compressible: false,
extensions: ["pkpass"]
},
"application/vnd.arastra.swi": {
source: "iana"
},
"application/vnd.aristanetworks.swi": {
source: "iana",
extensions: ["swi"]
},
"application/vnd.artisan+json": {
source: "iana",
compressible: true
},
"application/vnd.artsquare": {
source: "iana"
},
"application/vnd.astraea-software.iota": {
source: "iana",
extensions: ["iota"]
},
"application/vnd.audiograph": {
source: "iana",
extensions: ["aep"]
},
"application/vnd.autopackage": {
source: "iana"
},
"application/vnd.avalon+json": {
source: "iana",
compressible: true
},
"application/vnd.avistar+xml": {
source: "iana",
compressible: true
},
"application/vnd.balsamiq.bmml+xml": {
source: "iana",
compressible: true,
extensions: ["bmml"]
},
"application/vnd.balsamiq.bmpr": {
source: "iana"
},
"application/vnd.banana-accounting": {
source: "iana"
},
"application/vnd.bbf.usp.error": {
source: "iana"
},
"application/vnd.bbf.usp.msg": {
source: "iana"
},
"application/vnd.bbf.usp.msg+json": {
source: "iana",
compressible: true
},
"application/vnd.bekitzur-stech+json": {
source: "iana",
compressible: true
},
"application/vnd.bint.med-content": {
source: "iana"
},
"application/vnd.biopax.rdf+xml": {
source: "iana",
compressible: true
},
"application/vnd.blink-idb-value-wrapper": {
source: "iana"
},
"application/vnd.blueice.multipass": {
source: "iana",
extensions: ["mpm"]
},
"application/vnd.bluetooth.ep.oob": {
source: "iana"
},
"application/vnd.bluetooth.le.oob": {
source: "iana"
},
"application/vnd.bmi": {
source: "iana",
extensions: ["bmi"]
},
"application/vnd.bpf": {
source: "iana"
},
"application/vnd.bpf3": {
source: "iana"
},
"application/vnd.businessobjects": {
source: "iana",
extensions: ["rep"]
},
"application/vnd.byu.uapi+json": {
source: "iana",
compressible: true
},
"application/vnd.cab-jscript": {
source: "iana"
},
"application/vnd.canon-cpdl": {
source: "iana"
},
"application/vnd.canon-lips": {
source: "iana"
},
"application/vnd.capasystems-pg+json": {
source: "iana",
compressible: true
},
"application/vnd.cendio.thinlinc.clientconf": {
source: "iana"
},
"application/vnd.century-systems.tcp_stream": {
source: "iana"
},
"application/vnd.chemdraw+xml": {
source: "iana",
compressible: true,
extensions: ["cdxml"]
},
"application/vnd.chess-pgn": {
source: "iana"
},
"application/vnd.chipnuts.karaoke-mmd": {
source: "iana",
extensions: ["mmd"]
},
"application/vnd.ciedi": {
source: "iana"
},
"application/vnd.cinderella": {
source: "iana",
extensions: ["cdy"]
},
"application/vnd.cirpack.isdn-ext": {
source: "iana"
},
"application/vnd.citationstyles.style+xml": {
source: "iana",
compressible: true,
extensions: ["csl"]
},
"application/vnd.claymore": {
source: "iana",
extensions: ["cla"]
},
"application/vnd.cloanto.rp9": {
source: "iana",
extensions: ["rp9"]
},
"application/vnd.clonk.c4group": {
source: "iana",
extensions: ["c4g", "c4d", "c4f", "c4p", "c4u"]
},
"application/vnd.cluetrust.cartomobile-config": {
source: "iana",
extensions: ["c11amc"]
},
"application/vnd.cluetrust.cartomobile-config-pkg": {
source: "iana",
extensions: ["c11amz"]
},
"application/vnd.coffeescript": {
source: "iana"
},
"application/vnd.collabio.xodocuments.document": {
source: "iana"
},
"application/vnd.collabio.xodocuments.document-template": {
source: "iana"
},
"application/vnd.collabio.xodocuments.presentation": {
source: "iana"
},
"application/vnd.collabio.xodocuments.presentation-template": {
source: "iana"
},
"application/vnd.collabio.xodocuments.spreadsheet": {
source: "iana"
},
"application/vnd.collabio.xodocuments.spreadsheet-template": {
source: "iana"
},
"application/vnd.collection+json": {
source: "iana",
compressible: true
},
"application/vnd.collection.doc+json": {
source: "iana",
compressible: true
},
"application/vnd.collection.next+json": {
source: "iana",
compressible: true
},
"application/vnd.comicbook+zip": {
source: "iana",
compressible: false
},
"application/vnd.comicbook-rar": {
source: "iana"
},
"application/vnd.commerce-battelle": {
source: "iana"
},
"application/vnd.commonspace": {
source: "iana",
extensions: ["csp"]
},
"application/vnd.contact.cmsg": {
source: "iana",
extensions: ["cdbcmsg"]
},
"application/vnd.coreos.ignition+json": {
source: "iana",
compressible: true
},
"application/vnd.cosmocaller": {
source: "iana",
extensions: ["cmc"]
},
"application/vnd.crick.clicker": {
source: "iana",
extensions: ["clkx"]
},
"application/vnd.crick.clicker.keyboard": {
source: "iana",
extensions: ["clkk"]
},
"application/vnd.crick.clicker.palette": {
source: "iana",
extensions: ["clkp"]
},
"application/vnd.crick.clicker.template": {
source: "iana",
extensions: ["clkt"]
},
"application/vnd.crick.clicker.wordbank": {
source: "iana",
extensions: ["clkw"]
},
"application/vnd.criticaltools.wbs+xml": {
source: "iana",
compressible: true,
extensions: ["wbs"]
},
"application/vnd.cryptii.pipe+json": {
source: "iana",
compressible: true
},
"application/vnd.crypto-shade-file": {
source: "iana"
},
"application/vnd.cryptomator.encrypted": {
source: "iana"
},
"application/vnd.cryptomator.vault": {
source: "iana"
},
"application/vnd.ctc-posml": {
source: "iana",
extensions: ["pml"]
},
"application/vnd.ctct.ws+xml": {
source: "iana",
compressible: true
},
"application/vnd.cups-pdf": {
source: "iana"
},
"application/vnd.cups-postscript": {
source: "iana"
},
"application/vnd.cups-ppd": {
source: "iana",
extensions: ["ppd"]
},
"application/vnd.cups-raster": {
source: "iana"
},
"application/vnd.cups-raw": {
source: "iana"
},
"application/vnd.curl": {
source: "iana"
},
"application/vnd.curl.car": {
source: "apache",
extensions: ["car"]
},
"application/vnd.curl.pcurl": {
source: "apache",
extensions: ["pcurl"]
},
"application/vnd.cyan.dean.root+xml": {
source: "iana",
compressible: true
},
"application/vnd.cybank": {
source: "iana"
},
"application/vnd.cyclonedx+json": {
source: "iana",
compressible: true
},
"application/vnd.cyclonedx+xml": {
source: "iana",
compressible: true
},
"application/vnd.d2l.coursepackage1p0+zip": {
source: "iana",
compressible: false
},
"application/vnd.d3m-dataset": {
source: "iana"
},
"application/vnd.d3m-problem": {
source: "iana"
},
"application/vnd.dart": {
source: "iana",
compressible: true,
extensions: ["dart"]
},
"application/vnd.data-vision.rdz": {
source: "iana",
extensions: ["rdz"]
},
"application/vnd.datapackage+json": {
source: "iana",
compressible: true
},
"application/vnd.dataresource+json": {
source: "iana",
compressible: true
},
"application/vnd.dbf": {
source: "iana",
extensions: ["dbf"]
},
"application/vnd.debian.binary-package": {
source: "iana"
},
"application/vnd.dece.data": {
source: "iana",
extensions: ["uvf", "uvvf", "uvd", "uvvd"]
},
"application/vnd.dece.ttml+xml": {
source: "iana",
compressible: true,
extensions: ["uvt", "uvvt"]
},
"application/vnd.dece.unspecified": {
source: "iana",
extensions: ["uvx", "uvvx"]
},
"application/vnd.dece.zip": {
source: "iana",
extensions: ["uvz", "uvvz"]
},
"application/vnd.denovo.fcselayout-link": {
source: "iana",
extensions: ["fe_launch"]
},
"application/vnd.desmume.movie": {
source: "iana"
},
"application/vnd.dir-bi.plate-dl-nosuffix": {
source: "iana"
},
"application/vnd.dm.delegation+xml": {
source: "iana",
compressible: true
},
"application/vnd.dna": {
source: "iana",
extensions: ["dna"]
},
"application/vnd.document+json": {
source: "iana",
compressible: true
},
"application/vnd.dolby.mlp": {
source: "apache",
extensions: ["mlp"]
},
"application/vnd.dolby.mobile.1": {
source: "iana"
},
"application/vnd.dolby.mobile.2": {
source: "iana"
},
"application/vnd.doremir.scorecloud-binary-document": {
source: "iana"
},
"application/vnd.dpgraph": {
source: "iana",
extensions: ["dpg"]
},
"application/vnd.dreamfactory": {
source: "iana",
extensions: ["dfac"]
},
"application/vnd.drive+json": {
source: "iana",
compressible: true
},
"application/vnd.ds-keypoint": {
source: "apache",
extensions: ["kpxx"]
},
"application/vnd.dtg.local": {
source: "iana"
},
"application/vnd.dtg.local.flash": {
source: "iana"
},
"application/vnd.dtg.local.html": {
source: "iana"
},
"application/vnd.dvb.ait": {
source: "iana",
extensions: ["ait"]
},
"application/vnd.dvb.dvbisl+xml": {
source: "iana",
compressible: true
},
"application/vnd.dvb.dvbj": {
source: "iana"
},
"application/vnd.dvb.esgcontainer": {
source: "iana"
},
"application/vnd.dvb.ipdcdftnotifaccess": {
source: "iana"
},
"application/vnd.dvb.ipdcesgaccess": {
source: "iana"
},
"application/vnd.dvb.ipdcesgaccess2": {
source: "iana"
},
"application/vnd.dvb.ipdcesgpdd": {
source: "iana"
},
"application/vnd.dvb.ipdcroaming": {
source: "iana"
},
"application/vnd.dvb.iptv.alfec-base": {
source: "iana"
},
"application/vnd.dvb.iptv.alfec-enhancement": {
source: "iana"
},
"application/vnd.dvb.notif-aggregate-root+xml": {
source: "iana",
compressible: true
},
"application/vnd.dvb.notif-container+xml": {
source: "iana",
compressible: true
},
"application/vnd.dvb.notif-generic+xml": {
source: "iana",
compressible: true
},
"application/vnd.dvb.notif-ia-msglist+xml": {
source: "iana",
compressible: true
},
"application/vnd.dvb.notif-ia-registration-request+xml": {
source: "iana",
compressible: true
},
"application/vnd.dvb.notif-ia-registration-response+xml": {
source: "iana",
compressible: true
},
"application/vnd.dvb.notif-init+xml": {
source: "iana",
compressible: true
},
"application/vnd.dvb.pfr": {
source: "iana"
},
"application/vnd.dvb.service": {
source: "iana",
extensions: ["svc"]
},
"application/vnd.dxr": {
source: "iana"
},
"application/vnd.dynageo": {
source: "iana",
extensions: ["geo"]
},
"application/vnd.dzr": {
source: "iana"
},
"application/vnd.easykaraoke.cdgdownload": {
source: "iana"
},
"application/vnd.ecdis-update": {
source: "iana"
},
"application/vnd.ecip.rlp": {
source: "iana"
},
"application/vnd.eclipse.ditto+json": {
source: "iana",
compressible: true
},
"application/vnd.ecowin.chart": {
source: "iana",
extensions: ["mag"]
},
"application/vnd.ecowin.filerequest": {
source: "iana"
},
"application/vnd.ecowin.fileupdate": {
source: "iana"
},
"application/vnd.ecowin.series": {
source: "iana"
},
"application/vnd.ecowin.seriesrequest": {
source: "iana"
},
"application/vnd.ecowin.seriesupdate": {
source: "iana"
},
"application/vnd.efi.img": {
source: "iana"
},
"application/vnd.efi.iso": {
source: "iana"
},
"application/vnd.emclient.accessrequest+xml": {
source: "iana",
compressible: true
},
"application/vnd.enliven": {
source: "iana",
extensions: ["nml"]
},
"application/vnd.enphase.envoy": {
source: "iana"
},
"application/vnd.eprints.data+xml": {
source: "iana",
compressible: true
},
"application/vnd.epson.esf": {
source: "iana",
extensions: ["esf"]
},
"application/vnd.epson.msf": {
source: "iana",
extensions: ["msf"]
},
"application/vnd.epson.quickanime": {
source: "iana",
extensions: ["qam"]
},
"application/vnd.epson.salt": {
source: "iana",
extensions: ["slt"]
},
"application/vnd.epson.ssf": {
source: "iana",
extensions: ["ssf"]
},
"application/vnd.ericsson.quickcall": {
source: "iana"
},
"application/vnd.espass-espass+zip": {
source: "iana",
compressible: false
},
"application/vnd.eszigno3+xml": {
source: "iana",
compressible: true,
extensions: ["es3", "et3"]
},
"application/vnd.etsi.aoc+xml": {
source: "iana",
compressible: true
},
"application/vnd.etsi.asic-e+zip": {
source: "iana",
compressible: false
},
"application/vnd.etsi.asic-s+zip": {
source: "iana",
compressible: false
},
"application/vnd.etsi.cug+xml": {
source: "iana",
compressible: true
},
"application/vnd.etsi.iptvcommand+xml": {
source: "iana",
compressible: true
},
"application/vnd.etsi.iptvdiscovery+xml": {
source: "iana",
compressible: true
},
"application/vnd.etsi.iptvprofile+xml": {
source: "iana",
compressible: true
},
"application/vnd.etsi.iptvsad-bc+xml": {
source: "iana",
compressible: true
},
"application/vnd.etsi.iptvsad-cod+xml": {
source: "iana",
compressible: true
},
"application/vnd.etsi.iptvsad-npvr+xml": {
source: "iana",
compressible: true
},
"application/vnd.etsi.iptvservice+xml": {
source: "iana",
compressible: true
},
"application/vnd.etsi.iptvsync+xml": {
source: "iana",
compressible: true
},
"application/vnd.etsi.iptvueprofile+xml": {
source: "iana",
compressible: true
},
"application/vnd.etsi.mcid+xml": {
source: "iana",
compressible: true
},
"application/vnd.etsi.mheg5": {
source: "iana"
},
"application/vnd.etsi.overload-control-policy-dataset+xml": {
source: "iana",
compressible: true
},
"application/vnd.etsi.pstn+xml": {
source: "iana",
compressible: true
},
"application/vnd.etsi.sci+xml": {
source: "iana",
compressible: true
},
"application/vnd.etsi.simservs+xml": {
source: "iana",
compressible: true
},
"application/vnd.etsi.timestamp-token": {
source: "iana"
},
"application/vnd.etsi.tsl+xml": {
source: "iana",
compressible: true
},
"application/vnd.etsi.tsl.der": {
source: "iana"
},
"application/vnd.eu.kasparian.car+json": {
source: "iana",
compressible: true
},
"application/vnd.eudora.data": {
source: "iana"
},
"application/vnd.evolv.ecig.profile": {
source: "iana"
},
"application/vnd.evolv.ecig.settings": {
source: "iana"
},
"application/vnd.evolv.ecig.theme": {
source: "iana"
},
"application/vnd.exstream-empower+zip": {
source: "iana",
compressible: false
},
"application/vnd.exstream-package": {
source: "iana"
},
"application/vnd.ezpix-album": {
source: "iana",
extensions: ["ez2"]
},
"application/vnd.ezpix-package": {
source: "iana",
extensions: ["ez3"]
},
"application/vnd.f-secure.mobile": {
source: "iana"
},
"application/vnd.familysearch.gedcom+zip": {
source: "iana",
compressible: false
},
"application/vnd.fastcopy-disk-image": {
source: "iana"
},
"application/vnd.fdf": {
source: "iana",
extensions: ["fdf"]
},
"application/vnd.fdsn.mseed": {
source: "iana",
extensions: ["mseed"]
},
"application/vnd.fdsn.seed": {
source: "iana",
extensions: ["seed", "dataless"]
},
"application/vnd.ffsns": {
source: "iana"
},
"application/vnd.ficlab.flb+zip": {
source: "iana",
compressible: false
},
"application/vnd.filmit.zfc": {
source: "iana"
},
"application/vnd.fints": {
source: "iana"
},
"application/vnd.firemonkeys.cloudcell": {
source: "iana"
},
"application/vnd.flographit": {
source: "iana",
extensions: ["gph"]
},
"application/vnd.fluxtime.clip": {
source: "iana",
extensions: ["ftc"]
},
"application/vnd.font-fontforge-sfd": {
source: "iana"
},
"application/vnd.framemaker": {
source: "iana",
extensions: ["fm", "frame", "maker", "book"]
},
"application/vnd.frogans.fnc": {
source: "iana",
extensions: ["fnc"]
},
"application/vnd.frogans.ltf": {
source: "iana",
extensions: ["ltf"]
},
"application/vnd.fsc.weblaunch": {
source: "iana",
extensions: ["fsc"]
},
"application/vnd.fujifilm.fb.docuworks": {
source: "iana"
},
"application/vnd.fujifilm.fb.docuworks.binder": {
source: "iana"
},
"application/vnd.fujifilm.fb.docuworks.container": {
source: "iana"
},
"application/vnd.fujifilm.fb.jfi+xml": {
source: "iana",
compressible: true
},
"application/vnd.fujitsu.oasys": {
source: "iana",
extensions: ["oas"]
},
"application/vnd.fujitsu.oasys2": {
source: "iana",
extensions: ["oa2"]
},
"application/vnd.fujitsu.oasys3": {
source: "iana",
extensions: ["oa3"]
},
"application/vnd.fujitsu.oasysgp": {
source: "iana",
extensions: ["fg5"]
},
"application/vnd.fujitsu.oasysprs": {
source: "iana",
extensions: ["bh2"]
},
"application/vnd.fujixerox.art-ex": {
source: "iana"
},
"application/vnd.fujixerox.art4": {
source: "iana"
},
"application/vnd.fujixerox.ddd": {
source: "iana",
extensions: ["ddd"]
},
"application/vnd.fujixerox.docuworks": {
source: "iana",
extensions: ["xdw"]
},
"application/vnd.fujixerox.docuworks.binder": {
source: "iana",
extensions: ["xbd"]
},
"application/vnd.fujixerox.docuworks.container": {
source: "iana"
},
"application/vnd.fujixerox.hbpl": {
source: "iana"
},
"application/vnd.fut-misnet": {
source: "iana"
},
"application/vnd.futoin+cbor": {
source: "iana"
},
"application/vnd.futoin+json": {
source: "iana",
compressible: true
},
"application/vnd.fuzzysheet": {
source: "iana",
extensions: ["fzs"]
},
"application/vnd.genomatix.tuxedo": {
source: "iana",
extensions: ["txd"]
},
"application/vnd.gentics.grd+json": {
source: "iana",
compressible: true
},
"application/vnd.geo+json": {
source: "iana",
compressible: true
},
"application/vnd.geocube+xml": {
source: "iana",
compressible: true
},
"application/vnd.geogebra.file": {
source: "iana",
extensions: ["ggb"]
},
"application/vnd.geogebra.slides": {
source: "iana"
},
"application/vnd.geogebra.tool": {
source: "iana",
extensions: ["ggt"]
},
"application/vnd.geometry-explorer": {
source: "iana",
extensions: ["gex", "gre"]
},
"application/vnd.geonext": {
source: "iana",
extensions: ["gxt"]
},
"application/vnd.geoplan": {
source: "iana",
extensions: ["g2w"]
},
"application/vnd.geospace": {
source: "iana",
extensions: ["g3w"]
},
"application/vnd.gerber": {
source: "iana"
},
"application/vnd.globalplatform.card-content-mgt": {
source: "iana"
},
"application/vnd.globalplatform.card-content-mgt-response": {
source: "iana"
},
"application/vnd.gmx": {
source: "iana",
extensions: ["gmx"]
},
"application/vnd.google-apps.document": {
compressible: false,
extensions: ["gdoc"]
},
"application/vnd.google-apps.presentation": {
compressible: false,
extensions: ["gslides"]
},
"application/vnd.google-apps.spreadsheet": {
compressible: false,
extensions: ["gsheet"]
},
"application/vnd.google-earth.kml+xml": {
source: "iana",
compressible: true,
extensions: ["kml"]
},
"application/vnd.google-earth.kmz": {
source: "iana",
compressible: false,
extensions: ["kmz"]
},
"application/vnd.gov.sk.e-form+xml": {
source: "iana",
compressible: true
},
"application/vnd.gov.sk.e-form+zip": {
source: "iana",
compressible: false
},
"application/vnd.gov.sk.xmldatacontainer+xml": {
source: "iana",
compressible: true
},
"application/vnd.grafeq": {
source: "iana",
extensions: ["gqf", "gqs"]
},
"application/vnd.gridmp": {
source: "iana"
},
"application/vnd.groove-account": {
source: "iana",
extensions: ["gac"]
},
"application/vnd.groove-help": {
source: "iana",
extensions: ["ghf"]
},
"application/vnd.groove-identity-message": {
source: "iana",
extensions: ["gim"]
},
"application/vnd.groove-injector": {
source: "iana",
extensions: ["grv"]
},
"application/vnd.groove-tool-message": {
source: "iana",
extensions: ["gtm"]
},
"application/vnd.groove-tool-template": {
source: "iana",
extensions: ["tpl"]
},
"application/vnd.groove-vcard": {
source: "iana",
extensions: ["vcg"]
},
"application/vnd.hal+json": {
source: "iana",
compressible: true
},
"application/vnd.hal+xml": {
source: "iana",
compressible: true,
extensions: ["hal"]
},
"application/vnd.handheld-entertainment+xml": {
source: "iana",
compressible: true,
extensions: ["zmm"]
},
"application/vnd.hbci": {
source: "iana",
extensions: ["hbci"]
},
"application/vnd.hc+json": {
source: "iana",
compressible: true
},
"application/vnd.hcl-bireports": {
source: "iana"
},
"application/vnd.hdt": {
source: "iana"
},
"application/vnd.heroku+json": {
source: "iana",
compressible: true
},
"application/vnd.hhe.lesson-player": {
source: "iana",
extensions: ["les"]
},
"application/vnd.hl7cda+xml": {
source: "iana",
charset: "UTF-8",
compressible: true
},
"application/vnd.hl7v2+xml": {
source: "iana",
charset: "UTF-8",
compressible: true
},
"application/vnd.hp-hpgl": {
source: "iana",
extensions: ["hpgl"]
},
"application/vnd.hp-hpid": {
source: "iana",
extensions: ["hpid"]
},
"application/vnd.hp-hps": {
source: "iana",
extensions: ["hps"]
},
"application/vnd.hp-jlyt": {
source: "iana",
extensions: ["jlt"]
},
"application/vnd.hp-pcl": {
source: "iana",
extensions: ["pcl"]
},
"application/vnd.hp-pclxl": {
source: "iana",
extensions: ["pclxl"]
},
"application/vnd.httphone": {
source: "iana"
},
"application/vnd.hydrostatix.sof-data": {
source: "iana",
extensions: ["sfd-hdstx"]
},
"application/vnd.hyper+json": {
source: "iana",
compressible: true
},
"application/vnd.hyper-item+json": {
source: "iana",
compressible: true
},
"application/vnd.hyperdrive+json": {
source: "iana",
compressible: true
},
"application/vnd.hzn-3d-crossword": {
source: "iana"
},
"application/vnd.ibm.afplinedata": {
source: "iana"
},
"application/vnd.ibm.electronic-media": {
source: "iana"
},
"application/vnd.ibm.minipay": {
source: "iana",
extensions: ["mpy"]
},
"application/vnd.ibm.modcap": {
source: "iana",
extensions: ["afp", "listafp", "list3820"]
},
"application/vnd.ibm.rights-management": {
source: "iana",
extensions: ["irm"]
},
"application/vnd.ibm.secure-container": {
source: "iana",
extensions: ["sc"]
},
"application/vnd.iccprofile": {
source: "iana",
extensions: ["icc", "icm"]
},
"application/vnd.ieee.1905": {
source: "iana"
},
"application/vnd.igloader": {
source: "iana",
extensions: ["igl"]
},
"application/vnd.imagemeter.folder+zip": {
source: "iana",
compressible: false
},
"application/vnd.imagemeter.image+zip": {
source: "iana",
compressible: false
},
"application/vnd.immervision-ivp": {
source: "iana",
extensions: ["ivp"]
},
"application/vnd.immervision-ivu": {
source: "iana",
extensions: ["ivu"]
},
"application/vnd.ims.imsccv1p1": {
source: "iana"
},
"application/vnd.ims.imsccv1p2": {
source: "iana"
},
"application/vnd.ims.imsccv1p3": {
source: "iana"
},
"application/vnd.ims.lis.v2.result+json": {
source: "iana",
compressible: true
},
"application/vnd.ims.lti.v2.toolconsumerprofile+json": {
source: "iana",
compressible: true
},
"application/vnd.ims.lti.v2.toolproxy+json": {
source: "iana",
compressible: true
},
"application/vnd.ims.lti.v2.toolproxy.id+json": {
source: "iana",
compressible: true
},
"application/vnd.ims.lti.v2.toolsettings+json": {
source: "iana",
compressible: true
},
"application/vnd.ims.lti.v2.toolsettings.simple+json": {
source: "iana",
compressible: true
},
"application/vnd.informedcontrol.rms+xml": {
source: "iana",
compressible: true
},
"application/vnd.informix-visionary": {
source: "iana"
},
"application/vnd.infotech.project": {
source: "iana"
},
"application/vnd.infotech.project+xml": {
source: "iana",
compressible: true
},
"application/vnd.innopath.wamp.notification": {
source: "iana"
},
"application/vnd.insors.igm": {
source: "iana",
extensions: ["igm"]
},
"application/vnd.intercon.formnet": {
source: "iana",
extensions: ["xpw", "xpx"]
},
"application/vnd.intergeo": {
source: "iana",
extensions: ["i2g"]
},
"application/vnd.intertrust.digibox": {
source: "iana"
},
"application/vnd.intertrust.nncp": {
source: "iana"
},
"application/vnd.intu.qbo": {
source: "iana",
extensions: ["qbo"]
},
"application/vnd.intu.qfx": {
source: "iana",
extensions: ["qfx"]
},
"application/vnd.iptc.g2.catalogitem+xml": {
source: "iana",
compressible: true
},
"application/vnd.iptc.g2.conceptitem+xml": {
source: "iana",
compressible: true
},
"application/vnd.iptc.g2.knowledgeitem+xml": {
source: "iana",
compressible: true
},
"application/vnd.iptc.g2.newsitem+xml": {
source: "iana",
compressible: true
},
"application/vnd.iptc.g2.newsmessage+xml": {
source: "iana",
compressible: true
},
"application/vnd.iptc.g2.packageitem+xml": {
source: "iana",
compressible: true
},
"application/vnd.iptc.g2.planningitem+xml": {
source: "iana",
compressible: true
},
"application/vnd.ipunplugged.rcprofile": {
source: "iana",
extensions: ["rcprofile"]
},
"application/vnd.irepository.package+xml": {
source: "iana",
compressible: true,
extensions: ["irp"]
},
"application/vnd.is-xpr": {
source: "iana",
extensions: ["xpr"]
},
"application/vnd.isac.fcs": {
source: "iana",
extensions: ["fcs"]
},
"application/vnd.iso11783-10+zip": {
source: "iana",
compressible: false
},
"application/vnd.jam": {
source: "iana",
extensions: ["jam"]
},
"application/vnd.japannet-directory-service": {
source: "iana"
},
"application/vnd.japannet-jpnstore-wakeup": {
source: "iana"
},
"application/vnd.japannet-payment-wakeup": {
source: "iana"
},
"application/vnd.japannet-registration": {
source: "iana"
},
"application/vnd.japannet-registration-wakeup": {
source: "iana"
},
"application/vnd.japannet-setstore-wakeup": {
source: "iana"
},
"application/vnd.japannet-verification": {
source: "iana"
},
"application/vnd.japannet-verification-wakeup": {
source: "iana"
},
"application/vnd.jcp.javame.midlet-rms": {
source: "iana",
extensions: ["rms"]
},
"application/vnd.jisp": {
source: "iana",
extensions: ["jisp"]
},
"application/vnd.joost.joda-archive": {
source: "iana",
extensions: ["joda"]
},
"application/vnd.jsk.isdn-ngn": {
source: "iana"
},
"application/vnd.kahootz": {
source: "iana",
extensions: ["ktz", "ktr"]
},
"application/vnd.kde.karbon": {
source: "iana",
extensions: ["karbon"]
},
"application/vnd.kde.kchart": {
source: "iana",
extensions: ["chrt"]
},
"application/vnd.kde.kformula": {
source: "iana",
extensions: ["kfo"]
},
"application/vnd.kde.kivio": {
source: "iana",
extensions: ["flw"]
},
"application/vnd.kde.kontour": {
source: "iana",
extensions: ["kon"]
},
"application/vnd.kde.kpresenter": {
source: "iana",
extensions: ["kpr", "kpt"]
},
"application/vnd.kde.kspread": {
source: "iana",
extensions: ["ksp"]
},
"application/vnd.kde.kword": {
source: "iana",
extensions: ["kwd", "kwt"]
},
"application/vnd.kenameaapp": {
source: "iana",
extensions: ["htke"]
},
"application/vnd.kidspiration": {
source: "iana",
extensions: ["kia"]
},
"application/vnd.kinar": {
source: "iana",
extensions: ["kne", "knp"]
},
"application/vnd.koan": {
source: "iana",
extensions: ["skp", "skd", "skt", "skm"]
},
"application/vnd.kodak-descriptor": {
source: "iana",
extensions: ["sse"]
},
"application/vnd.las": {
source: "iana"
},
"application/vnd.las.las+json": {
source: "iana",
compressible: true
},
"application/vnd.las.las+xml": {
source: "iana",
compressible: true,
extensions: ["lasxml"]
},
"application/vnd.laszip": {
source: "iana"
},
"application/vnd.leap+json": {
source: "iana",
compressible: true
},
"application/vnd.liberty-request+xml": {
source: "iana",
compressible: true
},
"application/vnd.llamagraphics.life-balance.desktop": {
source: "iana",
extensions: ["lbd"]
},
"application/vnd.llamagraphics.life-balance.exchange+xml": {
source: "iana",
compressible: true,
extensions: ["lbe"]
},
"application/vnd.logipipe.circuit+zip": {
source: "iana",
compressible: false
},
"application/vnd.loom": {
source: "iana"
},
"application/vnd.lotus-1-2-3": {
source: "iana",
extensions: ["123"]
},
"application/vnd.lotus-approach": {
source: "iana",
extensions: ["apr"]
},
"application/vnd.lotus-freelance": {
source: "iana",
extensions: ["pre"]
},
"application/vnd.lotus-notes": {
source: "iana",
extensions: ["nsf"]
},
"application/vnd.lotus-organizer": {
source: "iana",
extensions: ["org"]
},
"application/vnd.lotus-screencam": {
source: "iana",
extensions: ["scm"]
},
"application/vnd.lotus-wordpro": {
source: "iana",
extensions: ["lwp"]
},
"application/vnd.macports.portpkg": {
source: "iana",
extensions: ["portpkg"]
},
"application/vnd.mapbox-vector-tile": {
source: "iana",
extensions: ["mvt"]
},
"application/vnd.marlin.drm.actiontoken+xml": {
source: "iana",
compressible: true
},
"application/vnd.marlin.drm.conftoken+xml": {
source: "iana",
compressible: true
},
"application/vnd.marlin.drm.license+xml": {
source: "iana",
compressible: true
},
"application/vnd.marlin.drm.mdcf": {
source: "iana"
},
"application/vnd.mason+json": {
source: "iana",
compressible: true
},
"application/vnd.maxar.archive.3tz+zip": {
source: "iana",
compressible: false
},
"application/vnd.maxmind.maxmind-db": {
source: "iana"
},
"application/vnd.mcd": {
source: "iana",
extensions: ["mcd"]
},
"application/vnd.medcalcdata": {
source: "iana",
extensions: ["mc1"]
},
"application/vnd.mediastation.cdkey": {
source: "iana",
extensions: ["cdkey"]
},
"application/vnd.meridian-slingshot": {
source: "iana"
},
"application/vnd.mfer": {
source: "iana",
extensions: ["mwf"]
},
"application/vnd.mfmp": {
source: "iana",
extensions: ["mfm"]
},
"application/vnd.micro+json": {
source: "iana",
compressible: true
},
"application/vnd.micrografx.flo": {
source: "iana",
extensions: ["flo"]
},
"application/vnd.micrografx.igx": {
source: "iana",
extensions: ["igx"]
},
"application/vnd.microsoft.portable-executable": {
source: "iana"
},
"application/vnd.microsoft.windows.thumbnail-cache": {
source: "iana"
},
"application/vnd.miele+json": {
source: "iana",
compressible: true
},
"application/vnd.mif": {
source: "iana",
extensions: ["mif"]
},
"application/vnd.minisoft-hp3000-save": {
source: "iana"
},
"application/vnd.mitsubishi.misty-guard.trustweb": {
source: "iana"
},
"application/vnd.mobius.daf": {
source: "iana",
extensions: ["daf"]
},
"application/vnd.mobius.dis": {
source: "iana",
extensions: ["dis"]
},
"application/vnd.mobius.mbk": {
source: "iana",
extensions: ["mbk"]
},
"application/vnd.mobius.mqy": {
source: "iana",
extensions: ["mqy"]
},
"application/vnd.mobius.msl": {
source: "iana",
extensions: ["msl"]
},
"application/vnd.mobius.plc": {
source: "iana",
extensions: ["plc"]
},
"application/vnd.mobius.txf": {
source: "iana",
extensions: ["txf"]
},
"application/vnd.mophun.application": {
source: "iana",
extensions: ["mpn"]
},
"application/vnd.mophun.certificate": {
source: "iana",
extensions: ["mpc"]
},
"application/vnd.motorola.flexsuite": {
source: "iana"
},
"application/vnd.motorola.flexsuite.adsi": {
source: "iana"
},
"application/vnd.motorola.flexsuite.fis": {
source: "iana"
},
"application/vnd.motorola.flexsuite.gotap": {
source: "iana"
},
"application/vnd.motorola.flexsuite.kmr": {
source: "iana"
},
"application/vnd.motorola.flexsuite.ttc": {
source: "iana"
},
"application/vnd.motorola.flexsuite.wem": {
source: "iana"
},
"application/vnd.motorola.iprm": {
source: "iana"
},
"application/vnd.mozilla.xul+xml": {
source: "iana",
compressible: true,
extensions: ["xul"]
},
"application/vnd.ms-3mfdocument": {
source: "iana"
},
"application/vnd.ms-artgalry": {
source: "iana",
extensions: ["cil"]
},
"application/vnd.ms-asf": {
source: "iana"
},
"application/vnd.ms-cab-compressed": {
source: "iana",
extensions: ["cab"]
},
"application/vnd.ms-color.iccprofile": {
source: "apache"
},
"application/vnd.ms-excel": {
source: "iana",
compressible: false,
extensions: ["xls", "xlm", "xla", "xlc", "xlt", "xlw"]
},
"application/vnd.ms-excel.addin.macroenabled.12": {
source: "iana",
extensions: ["xlam"]
},
"application/vnd.ms-excel.sheet.binary.macroenabled.12": {
source: "iana",
extensions: ["xlsb"]
},
"application/vnd.ms-excel.sheet.macroenabled.12": {
source: "iana",
extensions: ["xlsm"]
},
"application/vnd.ms-excel.template.macroenabled.12": {
source: "iana",
extensions: ["xltm"]
},
"application/vnd.ms-fontobject": {
source: "iana",
compressible: true,
extensions: ["eot"]
},
"application/vnd.ms-htmlhelp": {
source: "iana",
extensions: ["chm"]
},
"application/vnd.ms-ims": {
source: "iana",
extensions: ["ims"]
},
"application/vnd.ms-lrm": {
source: "iana",
extensions: ["lrm"]
},
"application/vnd.ms-office.activex+xml": {
source: "iana",
compressible: true
},
"application/vnd.ms-officetheme": {
source: "iana",
extensions: ["thmx"]
},
"application/vnd.ms-opentype": {
source: "apache",
compressible: true
},
"application/vnd.ms-outlook": {
compressible: false,
extensions: ["msg"]
},
"application/vnd.ms-package.obfuscated-opentype": {
source: "apache"
},
"application/vnd.ms-pki.seccat": {
source: "apache",
extensions: ["cat"]
},
"application/vnd.ms-pki.stl": {
source: "apache",
extensions: ["stl"]
},
"application/vnd.ms-playready.initiator+xml": {
source: "iana",
compressible: true
},
"application/vnd.ms-powerpoint": {
source: "iana",
compressible: false,
extensions: ["ppt", "pps", "pot"]
},
"application/vnd.ms-powerpoint.addin.macroenabled.12": {
source: "iana",
extensions: ["ppam"]
},
"application/vnd.ms-powerpoint.presentation.macroenabled.12": {
source: "iana",
extensions: ["pptm"]
},
"application/vnd.ms-powerpoint.slide.macroenabled.12": {
source: "iana",
extensions: ["sldm"]
},
"application/vnd.ms-powerpoint.slideshow.macroenabled.12": {
source: "iana",
extensions: ["ppsm"]
},
"application/vnd.ms-powerpoint.template.macroenabled.12": {
source: "iana",
extensions: ["potm"]
},
"application/vnd.ms-printdevicecapabilities+xml": {
source: "iana",
compressible: true
},
"application/vnd.ms-printing.printticket+xml": {
source: "apache",
compressible: true
},
"application/vnd.ms-printschematicket+xml": {
source: "iana",
compressible: true
},
"application/vnd.ms-project": {
source: "iana",
extensions: ["mpp", "mpt"]
},
"application/vnd.ms-tnef": {
source: "iana"
},
"application/vnd.ms-windows.devicepairing": {
source: "iana"
},
"application/vnd.ms-windows.nwprinting.oob": {
source: "iana"
},
"application/vnd.ms-windows.printerpairing": {
source: "iana"
},
"application/vnd.ms-windows.wsd.oob": {
source: "iana"
},
"application/vnd.ms-wmdrm.lic-chlg-req": {
source: "iana"
},
"application/vnd.ms-wmdrm.lic-resp": {
source: "iana"
},
"application/vnd.ms-wmdrm.meter-chlg-req": {
source: "iana"
},
"application/vnd.ms-wmdrm.meter-resp": {
source: "iana"
},
"application/vnd.ms-word.document.macroenabled.12": {
source: "iana",
extensions: ["docm"]
},
"application/vnd.ms-word.template.macroenabled.12": {
source: "iana",
extensions: ["dotm"]
},
"application/vnd.ms-works": {
source: "iana",
extensions: ["wps", "wks", "wcm", "wdb"]
},
"application/vnd.ms-wpl": {
source: "iana",
extensions: ["wpl"]
},
"application/vnd.ms-xpsdocument": {
source: "iana",
compressible: false,
extensions: ["xps"]
},
"application/vnd.msa-disk-image": {
source: "iana"
},
"application/vnd.mseq": {
source: "iana",
extensions: ["mseq"]
},
"application/vnd.msign": {
source: "iana"
},
"application/vnd.multiad.creator": {
source: "iana"
},
"application/vnd.multiad.creator.cif": {
source: "iana"
},
"application/vnd.music-niff": {
source: "iana"
},
"application/vnd.musician": {
source: "iana",
extensions: ["mus"]
},
"application/vnd.muvee.style": {
source: "iana",
extensions: ["msty"]
},
"application/vnd.mynfc": {
source: "iana",
extensions: ["taglet"]
},
"application/vnd.nacamar.ybrid+json": {
source: "iana",
compressible: true
},
"application/vnd.ncd.control": {
source: "iana"
},
"application/vnd.ncd.reference": {
source: "iana"
},
"application/vnd.nearst.inv+json": {
source: "iana",
compressible: true
},
"application/vnd.nebumind.line": {
source: "iana"
},
"application/vnd.nervana": {
source: "iana"
},
"application/vnd.netfpx": {
source: "iana"
},
"application/vnd.neurolanguage.nlu": {
source: "iana",
extensions: ["nlu"]
},
"application/vnd.nimn": {
source: "iana"
},
"application/vnd.nintendo.nitro.rom": {
source: "iana"
},
"application/vnd.nintendo.snes.rom": {
source: "iana"
},
"application/vnd.nitf": {
source: "iana",
extensions: ["ntf", "nitf"]
},
"application/vnd.noblenet-directory": {
source: "iana",
extensions: ["nnd"]
},
"application/vnd.noblenet-sealer": {
source: "iana",
extensions: ["nns"]
},
"application/vnd.noblenet-web": {
source: "iana",
extensions: ["nnw"]
},
"application/vnd.nokia.catalogs": {
source: "iana"
},
"application/vnd.nokia.conml+wbxml": {
source: "iana"
},
"application/vnd.nokia.conml+xml": {
source: "iana",
compressible: true
},
"application/vnd.nokia.iptv.config+xml": {
source: "iana",
compressible: true
},
"application/vnd.nokia.isds-radio-presets": {
source: "iana"
},
"application/vnd.nokia.landmark+wbxml": {
source: "iana"
},
"application/vnd.nokia.landmark+xml": {
source: "iana",
compressible: true
},
"application/vnd.nokia.landmarkcollection+xml": {
source: "iana",
compressible: true
},
"application/vnd.nokia.n-gage.ac+xml": {
source: "iana",
compressible: true,
extensions: ["ac"]
},
"application/vnd.nokia.n-gage.data": {
source: "iana",
extensions: ["ngdat"]
},
"application/vnd.nokia.n-gage.symbian.install": {
source: "iana",
extensions: ["n-gage"]
},
"application/vnd.nokia.ncd": {
source: "iana"
},
"application/vnd.nokia.pcd+wbxml": {
source: "iana"
},
"application/vnd.nokia.pcd+xml": {
source: "iana",
compressible: true
},
"application/vnd.nokia.radio-preset": {
source: "iana",
extensions: ["rpst"]
},
"application/vnd.nokia.radio-presets": {
source: "iana",
extensions: ["rpss"]
},
"application/vnd.novadigm.edm": {
source: "iana",
extensions: ["edm"]
},
"application/vnd.novadigm.edx": {
source: "iana",
extensions: ["edx"]
},
"application/vnd.novadigm.ext": {
source: "iana",
extensions: ["ext"]
},
"application/vnd.ntt-local.content-share": {
source: "iana"
},
"application/vnd.ntt-local.file-transfer": {
source: "iana"
},
"application/vnd.ntt-local.ogw_remote-access": {
source: "iana"
},
"application/vnd.ntt-local.sip-ta_remote": {
source: "iana"
},
"application/vnd.ntt-local.sip-ta_tcp_stream": {
source: "iana"
},
"application/vnd.oasis.opendocument.chart": {
source: "iana",
extensions: ["odc"]
},
"application/vnd.oasis.opendocument.chart-template": {
source: "iana",
extensions: ["otc"]
},
"application/vnd.oasis.opendocument.database": {
source: "iana",
extensions: ["odb"]
},
"application/vnd.oasis.opendocument.formula": {
source: "iana",
extensions: ["odf"]
},
"application/vnd.oasis.opendocument.formula-template": {
source: "iana",
extensions: ["odft"]
},
"application/vnd.oasis.opendocument.graphics": {
source: "iana",
compressible: false,
extensions: ["odg"]
},
"application/vnd.oasis.opendocument.graphics-template": {
source: "iana",
extensions: ["otg"]
},
"application/vnd.oasis.opendocument.image": {
source: "iana",
extensions: ["odi"]
},
"application/vnd.oasis.opendocument.image-template": {
source: "iana",
extensions: ["oti"]
},
"application/vnd.oasis.opendocument.presentation": {
source: "iana",
compressible: false,
extensions: ["odp"]
},
"application/vnd.oasis.opendocument.presentation-template": {
source: "iana",
extensions: ["otp"]
},
"application/vnd.oasis.opendocument.spreadsheet": {
source: "iana",
compressible: false,
extensions: ["ods"]
},
"application/vnd.oasis.opendocument.spreadsheet-template": {
source: "iana",
extensions: ["ots"]
},
"application/vnd.oasis.opendocument.text": {
source: "iana",
compressible: false,
extensions: ["odt"]
},
"application/vnd.oasis.opendocument.text-master": {
source: "iana",
extensions: ["odm"]
},
"application/vnd.oasis.opendocument.text-template": {
source: "iana",
extensions: ["ott"]
},
"application/vnd.oasis.opendocument.text-web": {
source: "iana",
extensions: ["oth"]
},
"application/vnd.obn": {
source: "iana"
},
"application/vnd.ocf+cbor": {
source: "iana"
},
"application/vnd.oci.image.manifest.v1+json": {
source: "iana",
compressible: true
},
"application/vnd.oftn.l10n+json": {
source: "iana",
compressible: true
},
"application/vnd.oipf.contentaccessdownload+xml": {
source: "iana",
compressible: true
},
"application/vnd.oipf.contentaccessstreaming+xml": {
source: "iana",
compressible: true
},
"application/vnd.oipf.cspg-hexbinary": {
source: "iana"
},
"application/vnd.oipf.dae.svg+xml": {
source: "iana",
compressible: true
},
"application/vnd.oipf.dae.xhtml+xml": {
source: "iana",
compressible: true
},
"application/vnd.oipf.mippvcontrolmessage+xml": {
source: "iana",
compressible: true
},
"application/vnd.oipf.pae.gem": {
source: "iana"
},
"application/vnd.oipf.spdiscovery+xml": {
source: "iana",
compressible: true
},
"application/vnd.oipf.spdlist+xml": {
source: "iana",
compressible: true
},
"application/vnd.oipf.ueprofile+xml": {
source: "iana",
compressible: true
},
"application/vnd.oipf.userprofile+xml": {
source: "iana",
compressible: true
},
"application/vnd.olpc-sugar": {
source: "iana",
extensions: ["xo"]
},
"application/vnd.oma-scws-config": {
source: "iana"
},
"application/vnd.oma-scws-http-request": {
source: "iana"
},
"application/vnd.oma-scws-http-response": {
source: "iana"
},
"application/vnd.oma.bcast.associated-procedure-parameter+xml": {
source: "iana",
compressible: true
},
"application/vnd.oma.bcast.drm-trigger+xml": {
source: "iana",
compressible: true
},
"application/vnd.oma.bcast.imd+xml": {
source: "iana",
compressible: true
},
"application/vnd.oma.bcast.ltkm": {
source: "iana"
},
"application/vnd.oma.bcast.notification+xml": {
source: "iana",
compressible: true
},
"application/vnd.oma.bcast.provisioningtrigger": {
source: "iana"
},
"application/vnd.oma.bcast.sgboot": {
source: "iana"
},
"application/vnd.oma.bcast.sgdd+xml": {
source: "iana",
compressible: true
},
"application/vnd.oma.bcast.sgdu": {
source: "iana"
},
"application/vnd.oma.bcast.simple-symbol-container": {
source: "iana"
},
"application/vnd.oma.bcast.smartcard-trigger+xml": {
source: "iana",
compressible: true
},
"application/vnd.oma.bcast.sprov+xml": {
source: "iana",
compressible: true
},
"application/vnd.oma.bcast.stkm": {
source: "iana"
},
"application/vnd.oma.cab-address-book+xml": {
source: "iana",
compressible: true
},
"application/vnd.oma.cab-feature-handler+xml": {
source: "iana",
compressible: true
},
"application/vnd.oma.cab-pcc+xml": {
source: "iana",
compressible: true
},
"application/vnd.oma.cab-subs-invite+xml": {
source: "iana",
compressible: true
},
"application/vnd.oma.cab-user-prefs+xml": {
source: "iana",
compressible: true
},
"application/vnd.oma.dcd": {
source: "iana"
},
"application/vnd.oma.dcdc": {
source: "iana"
},
"application/vnd.oma.dd2+xml": {
source: "iana",
compressible: true,
extensions: ["dd2"]
},
"application/vnd.oma.drm.risd+xml": {
source: "iana",
compressible: true
},
"application/vnd.oma.group-usage-list+xml": {
source: "iana",
compressible: true
},
"application/vnd.oma.lwm2m+cbor": {
source: "iana"
},
"application/vnd.oma.lwm2m+json": {
source: "iana",
compressible: true
},
"application/vnd.oma.lwm2m+tlv": {
source: "iana"
},
"application/vnd.oma.pal+xml": {
source: "iana",
compressible: true
},
"application/vnd.oma.poc.detailed-progress-report+xml": {
source: "iana",
compressible: true
},
"application/vnd.oma.poc.final-report+xml": {
source: "iana",
compressible: true
},
"application/vnd.oma.poc.groups+xml": {
source: "iana",
compressible: true
},
"application/vnd.oma.poc.invocation-descriptor+xml": {
source: "iana",
compressible: true
},
"application/vnd.oma.poc.optimized-progress-report+xml": {
source: "iana",
compressible: true
},
"application/vnd.oma.push": {
source: "iana"
},
"application/vnd.oma.scidm.messages+xml": {
source: "iana",
compressible: true
},
"application/vnd.oma.xcap-directory+xml": {
source: "iana",
compressible: true
},
"application/vnd.omads-email+xml": {
source: "iana",
charset: "UTF-8",
compressible: true
},
"application/vnd.omads-file+xml": {
source: "iana",
charset: "UTF-8",
compressible: true
},
"application/vnd.omads-folder+xml": {
source: "iana",
charset: "UTF-8",
compressible: true
},
"application/vnd.omaloc-supl-init": {
source: "iana"
},
"application/vnd.onepager": {
source: "iana"
},
"application/vnd.onepagertamp": {
source: "iana"
},
"application/vnd.onepagertamx": {
source: "iana"
},
"application/vnd.onepagertat": {
source: "iana"
},
"application/vnd.onepagertatp": {
source: "iana"
},
"application/vnd.onepagertatx": {
source: "iana"
},
"application/vnd.openblox.game+xml": {
source: "iana",
compressible: true,
extensions: ["obgx"]
},
"application/vnd.openblox.game-binary": {
source: "iana"
},
"application/vnd.openeye.oeb": {
source: "iana"
},
"application/vnd.openofficeorg.extension": {
source: "apache",
extensions: ["oxt"]
},
"application/vnd.openstreetmap.data+xml": {
source: "iana",
compressible: true,
extensions: ["osm"]
},
"application/vnd.opentimestamps.ots": {
source: "iana"
},
"application/vnd.openxmlformats-officedocument.custom-properties+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.customxmlproperties+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.drawing+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.drawingml.chart+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.drawingml.chartshapes+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.drawingml.diagramcolors+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.drawingml.diagramdata+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.drawingml.diagramlayout+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.drawingml.diagramstyle+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.extended-properties+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.presentationml.commentauthors+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.presentationml.comments+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.presentationml.handoutmaster+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.presentationml.notesmaster+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.presentationml.notesslide+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.presentationml.presentation": {
source: "iana",
compressible: false,
extensions: ["pptx"]
},
"application/vnd.openxmlformats-officedocument.presentationml.presentation.main+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.presentationml.presprops+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.presentationml.slide": {
source: "iana",
extensions: ["sldx"]
},
"application/vnd.openxmlformats-officedocument.presentationml.slide+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.presentationml.slidelayout+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.presentationml.slidemaster+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.presentationml.slideshow": {
source: "iana",
extensions: ["ppsx"]
},
"application/vnd.openxmlformats-officedocument.presentationml.slideshow.main+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.presentationml.slideupdateinfo+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.presentationml.tablestyles+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.presentationml.tags+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.presentationml.template": {
source: "iana",
extensions: ["potx"]
},
"application/vnd.openxmlformats-officedocument.presentationml.template.main+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.presentationml.viewprops+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.spreadsheetml.calcchain+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.spreadsheetml.chartsheet+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.spreadsheetml.comments+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.spreadsheetml.connections+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.spreadsheetml.dialogsheet+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.spreadsheetml.externallink+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.spreadsheetml.pivotcachedefinition+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.spreadsheetml.pivotcacherecords+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.spreadsheetml.pivottable+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.spreadsheetml.querytable+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.spreadsheetml.revisionheaders+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.spreadsheetml.revisionlog+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.spreadsheetml.sharedstrings+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet": {
source: "iana",
compressible: false,
extensions: ["xlsx"]
},
"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.spreadsheetml.sheetmetadata+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.spreadsheetml.table+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.spreadsheetml.tablesinglecells+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.spreadsheetml.template": {
source: "iana",
extensions: ["xltx"]
},
"application/vnd.openxmlformats-officedocument.spreadsheetml.template.main+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.spreadsheetml.usernames+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.spreadsheetml.volatiledependencies+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.theme+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.themeoverride+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.vmldrawing": {
source: "iana"
},
"application/vnd.openxmlformats-officedocument.wordprocessingml.comments+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.wordprocessingml.document": {
source: "iana",
compressible: false,
extensions: ["docx"]
},
"application/vnd.openxmlformats-officedocument.wordprocessingml.document.glossary+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.wordprocessingml.document.main+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.wordprocessingml.endnotes+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.wordprocessingml.fonttable+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.wordprocessingml.footer+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.wordprocessingml.footnotes+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.wordprocessingml.numbering+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.wordprocessingml.settings+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.wordprocessingml.styles+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.wordprocessingml.template": {
source: "iana",
extensions: ["dotx"]
},
"application/vnd.openxmlformats-officedocument.wordprocessingml.template.main+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.wordprocessingml.websettings+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-package.core-properties+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-package.digital-signature-xmlsignature+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-package.relationships+xml": {
source: "iana",
compressible: true
},
"application/vnd.oracle.resource+json": {
source: "iana",
compressible: true
},
"application/vnd.orange.indata": {
source: "iana"
},
"application/vnd.osa.netdeploy": {
source: "iana"
},
"application/vnd.osgeo.mapguide.package": {
source: "iana",
extensions: ["mgp"]
},
"application/vnd.osgi.bundle": {
source: "iana"
},
"application/vnd.osgi.dp": {
source: "iana",
extensions: ["dp"]
},
"application/vnd.osgi.subsystem": {
source: "iana",
extensions: ["esa"]
},
"application/vnd.otps.ct-kip+xml": {
source: "iana",
compressible: true
},
"application/vnd.oxli.countgraph": {
source: "iana"
},
"application/vnd.pagerduty+json": {
source: "iana",
compressible: true
},
"application/vnd.palm": {
source: "iana",
extensions: ["pdb", "pqa", "oprc"]
},
"application/vnd.panoply": {
source: "iana"
},
"application/vnd.paos.xml": {
source: "iana"
},
"application/vnd.patentdive": {
source: "iana"
},
"application/vnd.patientecommsdoc": {
source: "iana"
},
"application/vnd.pawaafile": {
source: "iana",
extensions: ["paw"]
},
"application/vnd.pcos": {
source: "iana"
},
"application/vnd.pg.format": {
source: "iana",
extensions: ["str"]
},
"application/vnd.pg.osasli": {
source: "iana",
extensions: ["ei6"]
},
"application/vnd.piaccess.application-licence": {
source: "iana"
},
"application/vnd.picsel": {
source: "iana",
extensions: ["efif"]
},
"application/vnd.pmi.widget": {
source: "iana",
extensions: ["wg"]
},
"application/vnd.poc.group-advertisement+xml": {
source: "iana",
compressible: true
},
"application/vnd.pocketlearn": {
source: "iana",
extensions: ["plf"]
},
"application/vnd.powerbuilder6": {
source: "iana",
extensions: ["pbd"]
},
"application/vnd.powerbuilder6-s": {
source: "iana"
},
"application/vnd.powerbuilder7": {
source: "iana"
},
"application/vnd.powerbuilder7-s": {
source: "iana"
},
"application/vnd.powerbuilder75": {
source: "iana"
},
"application/vnd.powerbuilder75-s": {
source: "iana"
},
"application/vnd.preminet": {
source: "iana"
},
"application/vnd.previewsystems.box": {
source: "iana",
extensions: ["box"]
},
"application/vnd.proteus.magazine": {
source: "iana",
extensions: ["mgz"]
},
"application/vnd.psfs": {
source: "iana"
},
"application/vnd.publishare-delta-tree": {
source: "iana",
extensions: ["qps"]
},
"application/vnd.pvi.ptid1": {
source: "iana",
extensions: ["ptid"]
},
"application/vnd.pwg-multiplexed": {
source: "iana"
},
"application/vnd.pwg-xhtml-print+xml": {
source: "iana",
compressible: true
},
"application/vnd.qualcomm.brew-app-res": {
source: "iana"
},
"application/vnd.quarantainenet": {
source: "iana"
},
"application/vnd.quark.quarkxpress": {
source: "iana",
extensions: ["qxd", "qxt", "qwd", "qwt", "qxl", "qxb"]
},
"application/vnd.quobject-quoxdocument": {
source: "iana"
},
"application/vnd.radisys.moml+xml": {
source: "iana",
compressible: true
},
"application/vnd.radisys.msml+xml": {
source: "iana",
compressible: true
},
"application/vnd.radisys.msml-audit+xml": {
source: "iana",
compressible: true
},
"application/vnd.radisys.msml-audit-conf+xml": {
source: "iana",
compressible: true
},
"application/vnd.radisys.msml-audit-conn+xml": {
source: "iana",
compressible: true
},
"application/vnd.radisys.msml-audit-dialog+xml": {
source: "iana",
compressible: true
},
"application/vnd.radisys.msml-audit-stream+xml": {
source: "iana",
compressible: true
},
"application/vnd.radisys.msml-conf+xml": {
source: "iana",
compressible: true
},
"application/vnd.radisys.msml-dialog+xml": {
source: "iana",
compressible: true
},
"application/vnd.radisys.msml-dialog-base+xml": {
source: "iana",
compressible: true
},
"application/vnd.radisys.msml-dialog-fax-detect+xml": {
source: "iana",
compressible: true
},
"application/vnd.radisys.msml-dialog-fax-sendrecv+xml": {
source: "iana",
compressible: true
},
"application/vnd.radisys.msml-dialog-group+xml": {
source: "iana",
compressible: true
},
"application/vnd.radisys.msml-dialog-speech+xml": {
source: "iana",
compressible: true
},
"application/vnd.radisys.msml-dialog-transform+xml": {
source: "iana",
compressible: true
},
"application/vnd.rainstor.data": {
source: "iana"
},
"application/vnd.rapid": {
source: "iana"
},
"application/vnd.rar": {
source: "iana",
extensions: ["rar"]
},
"application/vnd.realvnc.bed": {
source: "iana",
extensions: ["bed"]
},
"application/vnd.recordare.musicxml": {
source: "iana",
extensions: ["mxl"]
},
"application/vnd.recordare.musicxml+xml": {
source: "iana",
compressible: true,
extensions: ["musicxml"]
},
"application/vnd.renlearn.rlprint": {
source: "iana"
},
"application/vnd.resilient.logic": {
source: "iana"
},
"application/vnd.restful+json": {
source: "iana",
compressible: true
},
"application/vnd.rig.cryptonote": {
source: "iana",
extensions: ["cryptonote"]
},
"application/vnd.rim.cod": {
source: "apache",
extensions: ["cod"]
},
"application/vnd.rn-realmedia": {
source: "apache",
extensions: ["rm"]
},
"application/vnd.rn-realmedia-vbr": {
source: "apache",
extensions: ["rmvb"]
},
"application/vnd.route66.link66+xml": {
source: "iana",
compressible: true,
extensions: ["link66"]
},
"application/vnd.rs-274x": {
source: "iana"
},
"application/vnd.ruckus.download": {
source: "iana"
},
"application/vnd.s3sms": {
source: "iana"
},
"application/vnd.sailingtracker.track": {
source: "iana",
extensions: ["st"]
},
"application/vnd.sar": {
source: "iana"
},
"application/vnd.sbm.cid": {
source: "iana"
},
"application/vnd.sbm.mid2": {
source: "iana"
},
"application/vnd.scribus": {
source: "iana"
},
"application/vnd.sealed.3df": {
source: "iana"
},
"application/vnd.sealed.csf": {
source: "iana"
},
"application/vnd.sealed.doc": {
source: "iana"
},
"application/vnd.sealed.eml": {
source: "iana"
},
"application/vnd.sealed.mht": {
source: "iana"
},
"application/vnd.sealed.net": {
source: "iana"
},
"application/vnd.sealed.ppt": {
source: "iana"
},
"application/vnd.sealed.tiff": {
source: "iana"
},
"application/vnd.sealed.xls": {
source: "iana"
},
"application/vnd.sealedmedia.softseal.html": {
source: "iana"
},
"application/vnd.sealedmedia.softseal.pdf": {
source: "iana"
},
"application/vnd.seemail": {
source: "iana",
extensions: ["see"]
},
"application/vnd.seis+json": {
source: "iana",
compressible: true
},
"application/vnd.sema": {
source: "iana",
extensions: ["sema"]
},
"application/vnd.semd": {
source: "iana",
extensions: ["semd"]
},
"application/vnd.semf": {
source: "iana",
extensions: ["semf"]
},
"application/vnd.shade-save-file": {
source: "iana"
},
"application/vnd.shana.informed.formdata": {
source: "iana",
extensions: ["ifm"]
},
"application/vnd.shana.informed.formtemplate": {
source: "iana",
extensions: ["itp"]
},
"application/vnd.shana.informed.interchange": {
source: "iana",
extensions: ["iif"]
},
"application/vnd.shana.informed.package": {
source: "iana",
extensions: ["ipk"]
},
"application/vnd.shootproof+json": {
source: "iana",
compressible: true
},
"application/vnd.shopkick+json": {
source: "iana",
compressible: true
},
"application/vnd.shp": {
source: "iana"
},
"application/vnd.shx": {
source: "iana"
},
"application/vnd.sigrok.session": {
source: "iana"
},
"application/vnd.simtech-mindmapper": {
source: "iana",
extensions: ["twd", "twds"]
},
"application/vnd.siren+json": {
source: "iana",
compressible: true
},
"application/vnd.smaf": {
source: "iana",
extensions: ["mmf"]
},
"application/vnd.smart.notebook": {
source: "iana"
},
"application/vnd.smart.teacher": {
source: "iana",
extensions: ["teacher"]
},
"application/vnd.snesdev-page-table": {
source: "iana"
},
"application/vnd.software602.filler.form+xml": {
source: "iana",
compressible: true,
extensions: ["fo"]
},
"application/vnd.software602.filler.form-xml-zip": {
source: "iana"
},
"application/vnd.solent.sdkm+xml": {
source: "iana",
compressible: true,
extensions: ["sdkm", "sdkd"]
},
"application/vnd.spotfire.dxp": {
source: "iana",
extensions: ["dxp"]
},
"application/vnd.spotfire.sfs": {
source: "iana",
extensions: ["sfs"]
},
"application/vnd.sqlite3": {
source: "iana"
},
"application/vnd.sss-cod": {
source: "iana"
},
"application/vnd.sss-dtf": {
source: "iana"
},
"application/vnd.sss-ntf": {
source: "iana"
},
"application/vnd.stardivision.calc": {
source: "apache",
extensions: ["sdc"]
},
"application/vnd.stardivision.draw": {
source: "apache",
extensions: ["sda"]
},
"application/vnd.stardivision.impress": {
source: "apache",
extensions: ["sdd"]
},
"application/vnd.stardivision.math": {
source: "apache",
extensions: ["smf"]
},
"application/vnd.stardivision.writer": {
source: "apache",
extensions: ["sdw", "vor"]
},
"application/vnd.stardivision.writer-global": {
source: "apache",
extensions: ["sgl"]
},
"application/vnd.stepmania.package": {
source: "iana",
extensions: ["smzip"]
},
"application/vnd.stepmania.stepchart": {
source: "iana",
extensions: ["sm"]
},
"application/vnd.street-stream": {
source: "iana"
},
"application/vnd.sun.wadl+xml": {
source: "iana",
compressible: true,
extensions: ["wadl"]
},
"application/vnd.sun.xml.calc": {
source: "apache",
extensions: ["sxc"]
},
"application/vnd.sun.xml.calc.template": {
source: "apache",
extensions: ["stc"]
},
"application/vnd.sun.xml.draw": {
source: "apache",
extensions: ["sxd"]
},
"application/vnd.sun.xml.draw.template": {
source: "apache",
extensions: ["std"]
},
"application/vnd.sun.xml.impress": {
source: "apache",
extensions: ["sxi"]
},
"application/vnd.sun.xml.impress.template": {
source: "apache",
extensions: ["sti"]
},
"application/vnd.sun.xml.math": {
source: "apache",
extensions: ["sxm"]
},
"application/vnd.sun.xml.writer": {
source: "apache",
extensions: ["sxw"]
},
"application/vnd.sun.xml.writer.global": {
source: "apache",
extensions: ["sxg"]
},
"application/vnd.sun.xml.writer.template": {
source: "apache",
extensions: ["stw"]
},
"application/vnd.sus-calendar": {
source: "iana",
extensions: ["sus", "susp"]
},
"application/vnd.svd": {
source: "iana",
extensions: ["svd"]
},
"application/vnd.swiftview-ics": {
source: "iana"
},
"application/vnd.sycle+xml": {
source: "iana",
compressible: true
},
"application/vnd.syft+json": {
source: "iana",
compressible: true
},
"application/vnd.symbian.install": {
source: "apache",
extensions: ["sis", "sisx"]
},
"application/vnd.syncml+xml": {
source: "iana",
charset: "UTF-8",
compressible: true,
extensions: ["xsm"]
},
"application/vnd.syncml.dm+wbxml": {
source: "iana",
charset: "UTF-8",
extensions: ["bdm"]
},
"application/vnd.syncml.dm+xml": {
source: "iana",
charset: "UTF-8",
compressible: true,
extensions: ["xdm"]
},
"application/vnd.syncml.dm.notification": {
source: "iana"
},
"application/vnd.syncml.dmddf+wbxml": {
source: "iana"
},
"application/vnd.syncml.dmddf+xml": {
source: "iana",
charset: "UTF-8",
compressible: true,
extensions: ["ddf"]
},
"application/vnd.syncml.dmtnds+wbxml": {
source: "iana"
},
"application/vnd.syncml.dmtnds+xml": {
source: "iana",
charset: "UTF-8",
compressible: true
},
"application/vnd.syncml.ds.notification": {
source: "iana"
},
"application/vnd.tableschema+json": {
source: "iana",
compressible: true
},
"application/vnd.tao.intent-module-archive": {
source: "iana",
extensions: ["tao"]
},
"application/vnd.tcpdump.pcap": {
source: "iana",
extensions: ["pcap", "cap", "dmp"]
},
"application/vnd.think-cell.ppttc+json": {
source: "iana",
compressible: true
},
"application/vnd.tmd.mediaflex.api+xml": {
source: "iana",
compressible: true
},
"application/vnd.tml": {
source: "iana"
},
"application/vnd.tmobile-livetv": {
source: "iana",
extensions: ["tmo"]
},
"application/vnd.tri.onesource": {
source: "iana"
},
"application/vnd.trid.tpt": {
source: "iana",
extensions: ["tpt"]
},
"application/vnd.triscape.mxs": {
source: "iana",
extensions: ["mxs"]
},
"application/vnd.trueapp": {
source: "iana",
extensions: ["tra"]
},
"application/vnd.truedoc": {
source: "iana"
},
"application/vnd.ubisoft.webplayer": {
source: "iana"
},
"application/vnd.ufdl": {
source: "iana",
extensions: ["ufd", "ufdl"]
},
"application/vnd.uiq.theme": {
source: "iana",
extensions: ["utz"]
},
"application/vnd.umajin": {
source: "iana",
extensions: ["umj"]
},
"application/vnd.unity": {
source: "iana",
extensions: ["unityweb"]
},
"application/vnd.uoml+xml": {
source: "iana",
compressible: true,
extensions: ["uoml"]
},
"application/vnd.uplanet.alert": {
source: "iana"
},
"application/vnd.uplanet.alert-wbxml": {
source: "iana"
},
"application/vnd.uplanet.bearer-choice": {
source: "iana"
},
"application/vnd.uplanet.bearer-choice-wbxml": {
source: "iana"
},
"application/vnd.uplanet.cacheop": {
source: "iana"
},
"application/vnd.uplanet.cacheop-wbxml": {
source: "iana"
},
"application/vnd.uplanet.channel": {
source: "iana"
},
"application/vnd.uplanet.channel-wbxml": {
source: "iana"
},
"application/vnd.uplanet.list": {
source: "iana"
},
"application/vnd.uplanet.list-wbxml": {
source: "iana"
},
"application/vnd.uplanet.listcmd": {
source: "iana"
},
"application/vnd.uplanet.listcmd-wbxml": {
source: "iana"
},
"application/vnd.uplanet.signal": {
source: "iana"
},
"application/vnd.uri-map": {
source: "iana"
},
"application/vnd.valve.source.material": {
source: "iana"
},
"application/vnd.vcx": {
source: "iana",
extensions: ["vcx"]
},
"application/vnd.vd-study": {
source: "iana"
},
"application/vnd.vectorworks": {
source: "iana"
},
"application/vnd.vel+json": {
source: "iana",
compressible: true
},
"application/vnd.verimatrix.vcas": {
source: "iana"
},
"application/vnd.veritone.aion+json": {
source: "iana",
compressible: true
},
"application/vnd.veryant.thin": {
source: "iana"
},
"application/vnd.ves.encrypted": {
source: "iana"
},
"application/vnd.vidsoft.vidconference": {
source: "iana"
},
"application/vnd.visio": {
source: "iana",
extensions: ["vsd", "vst", "vss", "vsw"]
},
"application/vnd.visionary": {
source: "iana",
extensions: ["vis"]
},
"application/vnd.vividence.scriptfile": {
source: "iana"
},
"application/vnd.vsf": {
source: "iana",
extensions: ["vsf"]
},
"application/vnd.wap.sic": {
source: "iana"
},
"application/vnd.wap.slc": {
source: "iana"
},
"application/vnd.wap.wbxml": {
source: "iana",
charset: "UTF-8",
extensions: ["wbxml"]
},
"application/vnd.wap.wmlc": {
source: "iana",
extensions: ["wmlc"]
},
"application/vnd.wap.wmlscriptc": {
source: "iana",
extensions: ["wmlsc"]
},
"application/vnd.webturbo": {
source: "iana",
extensions: ["wtb"]
},
"application/vnd.wfa.dpp": {
source: "iana"
},
"application/vnd.wfa.p2p": {
source: "iana"
},
"application/vnd.wfa.wsc": {
source: "iana"
},
"application/vnd.windows.devicepairing": {
source: "iana"
},
"application/vnd.wmc": {
source: "iana"
},
"application/vnd.wmf.bootstrap": {
source: "iana"
},
"application/vnd.wolfram.mathematica": {
source: "iana"
},
"application/vnd.wolfram.mathematica.package": {
source: "iana"
},
"application/vnd.wolfram.player": {
source: "iana",
extensions: ["nbp"]
},
"application/vnd.wordperfect": {
source: "iana",
extensions: ["wpd"]
},
"application/vnd.wqd": {
source: "iana",
extensions: ["wqd"]
},
"application/vnd.wrq-hp3000-labelled": {
source: "iana"
},
"application/vnd.wt.stf": {
source: "iana",
extensions: ["stf"]
},
"application/vnd.wv.csp+wbxml": {
source: "iana"
},
"application/vnd.wv.csp+xml": {
source: "iana",
compressible: true
},
"application/vnd.wv.ssp+xml": {
source: "iana",
compressible: true
},
"application/vnd.xacml+json": {
source: "iana",
compressible: true
},
"application/vnd.xara": {
source: "iana",
extensions: ["xar"]
},
"application/vnd.xfdl": {
source: "iana",
extensions: ["xfdl"]
},
"application/vnd.xfdl.webform": {
source: "iana"
},
"application/vnd.xmi+xml": {
source: "iana",
compressible: true
},
"application/vnd.xmpie.cpkg": {
source: "iana"
},
"application/vnd.xmpie.dpkg": {
source: "iana"
},
"application/vnd.xmpie.plan": {
source: "iana"
},
"application/vnd.xmpie.ppkg": {
source: "iana"
},
"application/vnd.xmpie.xlim": {
source: "iana"
},
"application/vnd.yamaha.hv-dic": {
source: "iana",
extensions: ["hvd"]
},
"application/vnd.yamaha.hv-script": {
source: "iana",
extensions: ["hvs"]
},
"application/vnd.yamaha.hv-voice": {
source: "iana",
extensions: ["hvp"]
},
"application/vnd.yamaha.openscoreformat": {
source: "iana",
extensions: ["osf"]
},
"application/vnd.yamaha.openscoreformat.osfpvg+xml": {
source: "iana",
compressible: true,
extensions: ["osfpvg"]
},
"application/vnd.yamaha.remote-setup": {
source: "iana"
},
"application/vnd.yamaha.smaf-audio": {
source: "iana",
extensions: ["saf"]
},
"application/vnd.yamaha.smaf-phrase": {
source: "iana",
extensions: ["spf"]
},
"application/vnd.yamaha.through-ngn": {
source: "iana"
},
"application/vnd.yamaha.tunnel-udpencap": {
source: "iana"
},
"application/vnd.yaoweme": {
source: "iana"
},
"application/vnd.yellowriver-custom-menu": {
source: "iana",
extensions: ["cmp"]
},
"application/vnd.youtube.yt": {
source: "iana"
},
"application/vnd.zul": {
source: "iana",
extensions: ["zir", "zirz"]
},
"application/vnd.zzazz.deck+xml": {
source: "iana",
compressible: true,
extensions: ["zaz"]
},
"application/voicexml+xml": {
source: "iana",
compressible: true,
extensions: ["vxml"]
},
"application/voucher-cms+json": {
source: "iana",
compressible: true
},
"application/vq-rtcpxr": {
source: "iana"
},
"application/wasm": {
source: "iana",
compressible: true,
extensions: ["wasm"]
},
"application/watcherinfo+xml": {
source: "iana",
compressible: true,
extensions: ["wif"]
},
"application/webpush-options+json": {
source: "iana",
compressible: true
},
"application/whoispp-query": {
source: "iana"
},
"application/whoispp-response": {
source: "iana"
},
"application/widget": {
source: "iana",
extensions: ["wgt"]
},
"application/winhlp": {
source: "apache",
extensions: ["hlp"]
},
"application/wita": {
source: "iana"
},
"application/wordperfect5.1": {
source: "iana"
},
"application/wsdl+xml": {
source: "iana",
compressible: true,
extensions: ["wsdl"]
},
"application/wspolicy+xml": {
source: "iana",
compressible: true,
extensions: ["wspolicy"]
},
"application/x-7z-compressed": {
source: "apache",
compressible: false,
extensions: ["7z"]
},
"application/x-abiword": {
source: "apache",
extensions: ["abw"]
},
"application/x-ace-compressed": {
source: "apache",
extensions: ["ace"]
},
"application/x-amf": {
source: "apache"
},
"application/x-apple-diskimage": {
source: "apache",
extensions: ["dmg"]
},
"application/x-arj": {
compressible: false,
extensions: ["arj"]
},
"application/x-authorware-bin": {
source: "apache",
extensions: ["aab", "x32", "u32", "vox"]
},
"application/x-authorware-map": {
source: "apache",
extensions: ["aam"]
},
"application/x-authorware-seg": {
source: "apache",
extensions: ["aas"]
},
"application/x-bcpio": {
source: "apache",
extensions: ["bcpio"]
},
"application/x-bdoc": {
compressible: false,
extensions: ["bdoc"]
},
"application/x-bittorrent": {
source: "apache",
extensions: ["torrent"]
},
"application/x-blorb": {
source: "apache",
extensions: ["blb", "blorb"]
},
"application/x-bzip": {
source: "apache",
compressible: false,
extensions: ["bz"]
},
"application/x-bzip2": {
source: "apache",
compressible: false,
extensions: ["bz2", "boz"]
},
"application/x-cbr": {
source: "apache",
extensions: ["cbr", "cba", "cbt", "cbz", "cb7"]
},
"application/x-cdlink": {
source: "apache",
extensions: ["vcd"]
},
"application/x-cfs-compressed": {
source: "apache",
extensions: ["cfs"]
},
"application/x-chat": {
source: "apache",
extensions: ["chat"]
},
"application/x-chess-pgn": {
source: "apache",
extensions: ["pgn"]
},
"application/x-chrome-extension": {
extensions: ["crx"]
},
"application/x-cocoa": {
source: "nginx",
extensions: ["cco"]
},
"application/x-compress": {
source: "apache"
},
"application/x-conference": {
source: "apache",
extensions: ["nsc"]
},
"application/x-cpio": {
source: "apache",
extensions: ["cpio"]
},
"application/x-csh": {
source: "apache",
extensions: ["csh"]
},
"application/x-deb": {
compressible: false
},
"application/x-debian-package": {
source: "apache",
extensions: ["deb", "udeb"]
},
"application/x-dgc-compressed": {
source: "apache",
extensions: ["dgc"]
},
"application/x-director": {
source: "apache",
extensions: ["dir", "dcr", "dxr", "cst", "cct", "cxt", "w3d", "fgd", "swa"]
},
"application/x-doom": {
source: "apache",
extensions: ["wad"]
},
"application/x-dtbncx+xml": {
source: "apache",
compressible: true,
extensions: ["ncx"]
},
"application/x-dtbook+xml": {
source: "apache",
compressible: true,
extensions: ["dtb"]
},
"application/x-dtbresource+xml": {
source: "apache",
compressible: true,
extensions: ["res"]
},
"application/x-dvi": {
source: "apache",
compressible: false,
extensions: ["dvi"]
},
"application/x-envoy": {
source: "apache",
extensions: ["evy"]
},
"application/x-eva": {
source: "apache",
extensions: ["eva"]
},
"application/x-font-bdf": {
source: "apache",
extensions: ["bdf"]
},
"application/x-font-dos": {
source: "apache"
},
"application/x-font-framemaker": {
source: "apache"
},
"application/x-font-ghostscript": {
source: "apache",
extensions: ["gsf"]
},
"application/x-font-libgrx": {
source: "apache"
},
"application/x-font-linux-psf": {
source: "apache",
extensions: ["psf"]
},
"application/x-font-pcf": {
source: "apache",
extensions: ["pcf"]
},
"application/x-font-snf": {
source: "apache",
extensions: ["snf"]
},
"application/x-font-speedo": {
source: "apache"
},
"application/x-font-sunos-news": {
source: "apache"
},
"application/x-font-type1": {
source: "apache",
extensions: ["pfa", "pfb", "pfm", "afm"]
},
"application/x-font-vfont": {
source: "apache"
},
"application/x-freearc": {
source: "apache",
extensions: ["arc"]
},
"application/x-futuresplash": {
source: "apache",
extensions: ["spl"]
},
"application/x-gca-compressed": {
source: "apache",
extensions: ["gca"]
},
"application/x-glulx": {
source: "apache",
extensions: ["ulx"]
},
"application/x-gnumeric": {
source: "apache",
extensions: ["gnumeric"]
},
"application/x-gramps-xml": {
source: "apache",
extensions: ["gramps"]
},
"application/x-gtar": {
source: "apache",
extensions: ["gtar"]
},
"application/x-gzip": {
source: "apache"
},
"application/x-hdf": {
source: "apache",
extensions: ["hdf"]
},
"application/x-httpd-php": {
compressible: true,
extensions: ["php"]
},
"application/x-install-instructions": {
source: "apache",
extensions: ["install"]
},
"application/x-iso9660-image": {
source: "apache",
extensions: ["iso"]
},
"application/x-iwork-keynote-sffkey": {
extensions: ["key"]
},
"application/x-iwork-numbers-sffnumbers": {
extensions: ["numbers"]
},
"application/x-iwork-pages-sffpages": {
extensions: ["pages"]
},
"application/x-java-archive-diff": {
source: "nginx",
extensions: ["jardiff"]
},
"application/x-java-jnlp-file": {
source: "apache",
compressible: false,
extensions: ["jnlp"]
},
"application/x-javascript": {
compressible: true
},
"application/x-keepass2": {
extensions: ["kdbx"]
},
"application/x-latex": {
source: "apache",
compressible: false,
extensions: ["latex"]
},
"application/x-lua-bytecode": {
extensions: ["luac"]
},
"application/x-lzh-compressed": {
source: "apache",
extensions: ["lzh", "lha"]
},
"application/x-makeself": {
source: "nginx",
extensions: ["run"]
},
"application/x-mie": {
source: "apache",
extensions: ["mie"]
},
"application/x-mobipocket-ebook": {
source: "apache",
extensions: ["prc", "mobi"]
},
"application/x-mpegurl": {
compressible: false
},
"application/x-ms-application": {
source: "apache",
extensions: ["application"]
},
"application/x-ms-shortcut": {
source: "apache",
extensions: ["lnk"]
},
"application/x-ms-wmd": {
source: "apache",
extensions: ["wmd"]
},
"application/x-ms-wmz": {
source: "apache",
extensions: ["wmz"]
},
"application/x-ms-xbap": {
source: "apache",
extensions: ["xbap"]
},
"application/x-msaccess": {
source: "apache",
extensions: ["mdb"]
},
"application/x-msbinder": {
source: "apache",
extensions: ["obd"]
},
"application/x-mscardfile": {
source: "apache",
extensions: ["crd"]
},
"application/x-msclip": {
source: "apache",
extensions: ["clp"]
},
"application/x-msdos-program": {
extensions: ["exe"]
},
"application/x-msdownload": {
source: "apache",
extensions: ["exe", "dll", "com", "bat", "msi"]
},
"application/x-msmediaview": {
source: "apache",
extensions: ["mvb", "m13", "m14"]
},
"application/x-msmetafile": {
source: "apache",
extensions: ["wmf", "wmz", "emf", "emz"]
},
"application/x-msmoney": {
source: "apache",
extensions: ["mny"]
},
"application/x-mspublisher": {
source: "apache",
extensions: ["pub"]
},
"application/x-msschedule": {
source: "apache",
extensions: ["scd"]
},
"application/x-msterminal": {
source: "apache",
extensions: ["trm"]
},
"application/x-mswrite": {
source: "apache",
extensions: ["wri"]
},
"application/x-netcdf": {
source: "apache",
extensions: ["nc", "cdf"]
},
"application/x-ns-proxy-autoconfig": {
compressible: true,
extensions: ["pac"]
},
"application/x-nzb": {
source: "apache",
extensions: ["nzb"]
},
"application/x-perl": {
source: "nginx",
extensions: ["pl", "pm"]
},
"application/x-pilot": {
source: "nginx",
extensions: ["prc", "pdb"]
},
"application/x-pkcs12": {
source: "apache",
compressible: false,
extensions: ["p12", "pfx"]
},
"application/x-pkcs7-certificates": {
source: "apache",
extensions: ["p7b", "spc"]
},
"application/x-pkcs7-certreqresp": {
source: "apache",
extensions: ["p7r"]
},
"application/x-pki-message": {
source: "iana"
},
"application/x-rar-compressed": {
source: "apache",
compressible: false,
extensions: ["rar"]
},
"application/x-redhat-package-manager": {
source: "nginx",
extensions: ["rpm"]
},
"application/x-research-info-systems": {
source: "apache",
extensions: ["ris"]
},
"application/x-sea": {
source: "nginx",
extensions: ["sea"]
},
"application/x-sh": {
source: "apache",
compressible: true,
extensions: ["sh"]
},
"application/x-shar": {
source: "apache",
extensions: ["shar"]
},
"application/x-shockwave-flash": {
source: "apache",
compressible: false,
extensions: ["swf"]
},
"application/x-silverlight-app": {
source: "apache",
extensions: ["xap"]
},
"application/x-sql": {
source: "apache",
extensions: ["sql"]
},
"application/x-stuffit": {
source: "apache",
compressible: false,
extensions: ["sit"]
},
"application/x-stuffitx": {
source: "apache",
extensions: ["sitx"]
},
"application/x-subrip": {
source: "apache",
extensions: ["srt"]
},
"application/x-sv4cpio": {
source: "apache",
extensions: ["sv4cpio"]
},
"application/x-sv4crc": {
source: "apache",
extensions: ["sv4crc"]
},
"application/x-t3vm-image": {
source: "apache",
extensions: ["t3"]
},
"application/x-tads": {
source: "apache",
extensions: ["gam"]
},
"application/x-tar": {
source: "apache",
compressible: true,
extensions: ["tar"]
},
"application/x-tcl": {
source: "apache",
extensions: ["tcl", "tk"]
},
"application/x-tex": {
source: "apache",
extensions: ["tex"]
},
"application/x-tex-tfm": {
source: "apache",
extensions: ["tfm"]
},
"application/x-texinfo": {
source: "apache",
extensions: ["texinfo", "texi"]
},
"application/x-tgif": {
source: "apache",
extensions: ["obj"]
},
"application/x-ustar": {
source: "apache",
extensions: ["ustar"]
},
"application/x-virtualbox-hdd": {
compressible: true,
extensions: ["hdd"]
},
"application/x-virtualbox-ova": {
compressible: true,
extensions: ["ova"]
},
"application/x-virtualbox-ovf": {
compressible: true,
extensions: ["ovf"]
},
"application/x-virtualbox-vbox": {
compressible: true,
extensions: ["vbox"]
},
"application/x-virtualbox-vbox-extpack": {
compressible: false,
extensions: ["vbox-extpack"]
},
"application/x-virtualbox-vdi": {
compressible: true,
extensions: ["vdi"]
},
"application/x-virtualbox-vhd": {
compressible: true,
extensions: ["vhd"]
},
"application/x-virtualbox-vmdk": {
compressible: true,
extensions: ["vmdk"]
},
"application/x-wais-source": {
source: "apache",
extensions: ["src"]
},
"application/x-web-app-manifest+json": {
compressible: true,
extensions: ["webapp"]
},
"application/x-www-form-urlencoded": {
source: "iana",
compressible: true
},
"application/x-x509-ca-cert": {
source: "iana",
extensions: ["der", "crt", "pem"]
},
"application/x-x509-ca-ra-cert": {
source: "iana"
},
"application/x-x509-next-ca-cert": {
source: "iana"
},
"application/x-xfig": {
source: "apache",
extensions: ["fig"]
},
"application/x-xliff+xml": {
source: "apache",
compressible: true,
extensions: ["xlf"]
},
"application/x-xpinstall": {
source: "apache",
compressible: false,
extensions: ["xpi"]
},
"application/x-xz": {
source: "apache",
extensions: ["xz"]
},
"application/x-zmachine": {
source: "apache",
extensions: ["z1", "z2", "z3", "z4", "z5", "z6", "z7", "z8"]
},
"application/x400-bp": {
source: "iana"
},
"application/xacml+xml": {
source: "iana",
compressible: true
},
"application/xaml+xml": {
source: "apache",
compressible: true,
extensions: ["xaml"]
},
"application/xcap-att+xml": {
source: "iana",
compressible: true,
extensions: ["xav"]
},
"application/xcap-caps+xml": {
source: "iana",
compressible: true,
extensions: ["xca"]
},
"application/xcap-diff+xml": {
source: "iana",
compressible: true,
extensions: ["xdf"]
},
"application/xcap-el+xml": {
source: "iana",
compressible: true,
extensions: ["xel"]
},
"application/xcap-error+xml": {
source: "iana",
compressible: true
},
"application/xcap-ns+xml": {
source: "iana",
compressible: true,
extensions: ["xns"]
},
"application/xcon-conference-info+xml": {
source: "iana",
compressible: true
},
"application/xcon-conference-info-diff+xml": {
source: "iana",
compressible: true
},
"application/xenc+xml": {
source: "iana",
compressible: true,
extensions: ["xenc"]
},
"application/xhtml+xml": {
source: "iana",
compressible: true,
extensions: ["xhtml", "xht"]
},
"application/xhtml-voice+xml": {
source: "apache",
compressible: true
},
"application/xliff+xml": {
source: "iana",
compressible: true,
extensions: ["xlf"]
},
"application/xml": {
source: "iana",
compressible: true,
extensions: ["xml", "xsl", "xsd", "rng"]
},
"application/xml-dtd": {
source: "iana",
compressible: true,
extensions: ["dtd"]
},
"application/xml-external-parsed-entity": {
source: "iana"
},
"application/xml-patch+xml": {
source: "iana",
compressible: true
},
"application/xmpp+xml": {
source: "iana",
compressible: true
},
"application/xop+xml": {
source: "iana",
compressible: true,
extensions: ["xop"]
},
"application/xproc+xml": {
source: "apache",
compressible: true,
extensions: ["xpl"]
},
"application/xslt+xml": {
source: "iana",
compressible: true,
extensions: ["xsl", "xslt"]
},
"application/xspf+xml": {
source: "apache",
compressible: true,
extensions: ["xspf"]
},
"application/xv+xml": {
source: "iana",
compressible: true,
extensions: ["mxml", "xhvml", "xvml", "xvm"]
},
"application/yang": {
source: "iana",
extensions: ["yang"]
},
"application/yang-data+json": {
source: "iana",
compressible: true
},
"application/yang-data+xml": {
source: "iana",
compressible: true
},
"application/yang-patch+json": {
source: "iana",
compressible: true
},
"application/yang-patch+xml": {
source: "iana",
compressible: true
},
"application/yin+xml": {
source: "iana",
compressible: true,
extensions: ["yin"]
},
"application/zip": {
source: "iana",
compressible: false,
extensions: ["zip"]
},
"application/zlib": {
source: "iana"
},
"application/zstd": {
source: "iana"
},
"audio/1d-interleaved-parityfec": {
source: "iana"
},
"audio/32kadpcm": {
source: "iana"
},
"audio/3gpp": {
source: "iana",
compressible: false,
extensions: ["3gpp"]
},
"audio/3gpp2": {
source: "iana"
},
"audio/aac": {
source: "iana"
},
"audio/ac3": {
source: "iana"
},
"audio/adpcm": {
source: "apache",
extensions: ["adp"]
},
"audio/amr": {
source: "iana",
extensions: ["amr"]
},
"audio/amr-wb": {
source: "iana"
},
"audio/amr-wb+": {
source: "iana"
},
"audio/aptx": {
source: "iana"
},
"audio/asc": {
source: "iana"
},
"audio/atrac-advanced-lossless": {
source: "iana"
},
"audio/atrac-x": {
source: "iana"
},
"audio/atrac3": {
source: "iana"
},
"audio/basic": {
source: "iana",
compressible: false,
extensions: ["au", "snd"]
},
"audio/bv16": {
source: "iana"
},
"audio/bv32": {
source: "iana"
},
"audio/clearmode": {
source: "iana"
},
"audio/cn": {
source: "iana"
},
"audio/dat12": {
source: "iana"
},
"audio/dls": {
source: "iana"
},
"audio/dsr-es201108": {
source: "iana"
},
"audio/dsr-es202050": {
source: "iana"
},
"audio/dsr-es202211": {
source: "iana"
},
"audio/dsr-es202212": {
source: "iana"
},
"audio/dv": {
source: "iana"
},
"audio/dvi4": {
source: "iana"
},
"audio/eac3": {
source: "iana"
},
"audio/encaprtp": {
source: "iana"
},
"audio/evrc": {
source: "iana"
},
"audio/evrc-qcp": {
source: "iana"
},
"audio/evrc0": {
source: "iana"
},
"audio/evrc1": {
source: "iana"
},
"audio/evrcb": {
source: "iana"
},
"audio/evrcb0": {
source: "iana"
},
"audio/evrcb1": {
source: "iana"
},
"audio/evrcnw": {
source: "iana"
},
"audio/evrcnw0": {
source: "iana"
},
"audio/evrcnw1": {
source: "iana"
},
"audio/evrcwb": {
source: "iana"
},
"audio/evrcwb0": {
source: "iana"
},
"audio/evrcwb1": {
source: "iana"
},
"audio/evs": {
source: "iana"
},
"audio/flexfec": {
source: "iana"
},
"audio/fwdred": {
source: "iana"
},
"audio/g711-0": {
source: "iana"
},
"audio/g719": {
source: "iana"
},
"audio/g722": {
source: "iana"
},
"audio/g7221": {
source: "iana"
},
"audio/g723": {
source: "iana"
},
"audio/g726-16": {
source: "iana"
},
"audio/g726-24": {
source: "iana"
},
"audio/g726-32": {
source: "iana"
},
"audio/g726-40": {
source: "iana"
},
"audio/g728": {
source: "iana"
},
"audio/g729": {
source: "iana"
},
"audio/g7291": {
source: "iana"
},
"audio/g729d": {
source: "iana"
},
"audio/g729e": {
source: "iana"
},
"audio/gsm": {
source: "iana"
},
"audio/gsm-efr": {
source: "iana"
},
"audio/gsm-hr-08": {
source: "iana"
},
"audio/ilbc": {
source: "iana"
},
"audio/ip-mr_v2.5": {
source: "iana"
},
"audio/isac": {
source: "apache"
},
"audio/l16": {
source: "iana"
},
"audio/l20": {
source: "iana"
},
"audio/l24": {
source: "iana",
compressible: false
},
"audio/l8": {
source: "iana"
},
"audio/lpc": {
source: "iana"
},
"audio/melp": {
source: "iana"
},
"audio/melp1200": {
source: "iana"
},
"audio/melp2400": {
source: "iana"
},
"audio/melp600": {
source: "iana"
},
"audio/mhas": {
source: "iana"
},
"audio/midi": {
source: "apache",
extensions: ["mid", "midi", "kar", "rmi"]
},
"audio/mobile-xmf": {
source: "iana",
extensions: ["mxmf"]
},
"audio/mp3": {
compressible: false,
extensions: ["mp3"]
},
"audio/mp4": {
source: "iana",
compressible: false,
extensions: ["m4a", "mp4a"]
},
"audio/mp4a-latm": {
source: "iana"
},
"audio/mpa": {
source: "iana"
},
"audio/mpa-robust": {
source: "iana"
},
"audio/mpeg": {
source: "iana",
compressible: false,
extensions: ["mpga", "mp2", "mp2a", "mp3", "m2a", "m3a"]
},
"audio/mpeg4-generic": {
source: "iana"
},
"audio/musepack": {
source: "apache"
},
"audio/ogg": {
source: "iana",
compressible: false,
extensions: ["oga", "ogg", "spx", "opus"]
},
"audio/opus": {
source: "iana"
},
"audio/parityfec": {
source: "iana"
},
"audio/pcma": {
source: "iana"
},
"audio/pcma-wb": {
source: "iana"
},
"audio/pcmu": {
source: "iana"
},
"audio/pcmu-wb": {
source: "iana"
},
"audio/prs.sid": {
source: "iana"
},
"audio/qcelp": {
source: "iana"
},
"audio/raptorfec": {
source: "iana"
},
"audio/red": {
source: "iana"
},
"audio/rtp-enc-aescm128": {
source: "iana"
},
"audio/rtp-midi": {
source: "iana"
},
"audio/rtploopback": {
source: "iana"
},
"audio/rtx": {
source: "iana"
},
"audio/s3m": {
source: "apache",
extensions: ["s3m"]
},
"audio/scip": {
source: "iana"
},
"audio/silk": {
source: "apache",
extensions: ["sil"]
},
"audio/smv": {
source: "iana"
},
"audio/smv-qcp": {
source: "iana"
},
"audio/smv0": {
source: "iana"
},
"audio/sofa": {
source: "iana"
},
"audio/sp-midi": {
source: "iana"
},
"audio/speex": {
source: "iana"
},
"audio/t140c": {
source: "iana"
},
"audio/t38": {
source: "iana"
},
"audio/telephone-event": {
source: "iana"
},
"audio/tetra_acelp": {
source: "iana"
},
"audio/tetra_acelp_bb": {
source: "iana"
},
"audio/tone": {
source: "iana"
},
"audio/tsvcis": {
source: "iana"
},
"audio/uemclip": {
source: "iana"
},
"audio/ulpfec": {
source: "iana"
},
"audio/usac": {
source: "iana"
},
"audio/vdvi": {
source: "iana"
},
"audio/vmr-wb": {
source: "iana"
},
"audio/vnd.3gpp.iufp": {
source: "iana"
},
"audio/vnd.4sb": {
source: "iana"
},
"audio/vnd.audiokoz": {
source: "iana"
},
"audio/vnd.celp": {
source: "iana"
},
"audio/vnd.cisco.nse": {
source: "iana"
},
"audio/vnd.cmles.radio-events": {
source: "iana"
},
"audio/vnd.cns.anp1": {
source: "iana"
},
"audio/vnd.cns.inf1": {
source: "iana"
},
"audio/vnd.dece.audio": {
source: "iana",
extensions: ["uva", "uvva"]
},
"audio/vnd.digital-winds": {
source: "iana",
extensions: ["eol"]
},
"audio/vnd.dlna.adts": {
source: "iana"
},
"audio/vnd.dolby.heaac.1": {
source: "iana"
},
"audio/vnd.dolby.heaac.2": {
source: "iana"
},
"audio/vnd.dolby.mlp": {
source: "iana"
},
"audio/vnd.dolby.mps": {
source: "iana"
},
"audio/vnd.dolby.pl2": {
source: "iana"
},
"audio/vnd.dolby.pl2x": {
source: "iana"
},
"audio/vnd.dolby.pl2z": {
source: "iana"
},
"audio/vnd.dolby.pulse.1": {
source: "iana"
},
"audio/vnd.dra": {
source: "iana",
extensions: ["dra"]
},
"audio/vnd.dts": {
source: "iana",
extensions: ["dts"]
},
"audio/vnd.dts.hd": {
source: "iana",
extensions: ["dtshd"]
},
"audio/vnd.dts.uhd": {
source: "iana"
},
"audio/vnd.dvb.file": {
source: "iana"
},
"audio/vnd.everad.plj": {
source: "iana"
},
"audio/vnd.hns.audio": {
source: "iana"
},
"audio/vnd.lucent.voice": {
source: "iana",
extensions: ["lvp"]
},
"audio/vnd.ms-playready.media.pya": {
source: "iana",
extensions: ["pya"]
},
"audio/vnd.nokia.mobile-xmf": {
source: "iana"
},
"audio/vnd.nortel.vbk": {
source: "iana"
},
"audio/vnd.nuera.ecelp4800": {
source: "iana",
extensions: ["ecelp4800"]
},
"audio/vnd.nuera.ecelp7470": {
source: "iana",
extensions: ["ecelp7470"]
},
"audio/vnd.nuera.ecelp9600": {
source: "iana",
extensions: ["ecelp9600"]
},
"audio/vnd.octel.sbc": {
source: "iana"
},
"audio/vnd.presonus.multitrack": {
source: "iana"
},
"audio/vnd.qcelp": {
source: "iana"
},
"audio/vnd.rhetorex.32kadpcm": {
source: "iana"
},
"audio/vnd.rip": {
source: "iana",
extensions: ["rip"]
},
"audio/vnd.rn-realaudio": {
compressible: false
},
"audio/vnd.sealedmedia.softseal.mpeg": {
source: "iana"
},
"audio/vnd.vmx.cvsd": {
source: "iana"
},
"audio/vnd.wave": {
compressible: false
},
"audio/vorbis": {
source: "iana",
compressible: false
},
"audio/vorbis-config": {
source: "iana"
},
"audio/wav": {
compressible: false,
extensions: ["wav"]
},
"audio/wave": {
compressible: false,
extensions: ["wav"]
},
"audio/webm": {
source: "apache",
compressible: false,
extensions: ["weba"]
},
"audio/x-aac": {
source: "apache",
compressible: false,
extensions: ["aac"]
},
"audio/x-aiff": {
source: "apache",
extensions: ["aif", "aiff", "aifc"]
},
"audio/x-caf": {
source: "apache",
compressible: false,
extensions: ["caf"]
},
"audio/x-flac": {
source: "apache",
extensions: ["flac"]
},
"audio/x-m4a": {
source: "nginx",
extensions: ["m4a"]
},
"audio/x-matroska": {
source: "apache",
extensions: ["mka"]
},
"audio/x-mpegurl": {
source: "apache",
extensions: ["m3u"]
},
"audio/x-ms-wax": {
source: "apache",
extensions: ["wax"]
},
"audio/x-ms-wma": {
source: "apache",
extensions: ["wma"]
},
"audio/x-pn-realaudio": {
source: "apache",
extensions: ["ram", "ra"]
},
"audio/x-pn-realaudio-plugin": {
source: "apache",
extensions: ["rmp"]
},
"audio/x-realaudio": {
source: "nginx",
extensions: ["ra"]
},
"audio/x-tta": {
source: "apache"
},
"audio/x-wav": {
source: "apache",
extensions: ["wav"]
},
"audio/xm": {
source: "apache",
extensions: ["xm"]
},
"chemical/x-cdx": {
source: "apache",
extensions: ["cdx"]
},
"chemical/x-cif": {
source: "apache",
extensions: ["cif"]
},
"chemical/x-cmdf": {
source: "apache",
extensions: ["cmdf"]
},
"chemical/x-cml": {
source: "apache",
extensions: ["cml"]
},
"chemical/x-csml": {
source: "apache",
extensions: ["csml"]
},
"chemical/x-pdb": {
source: "apache"
},
"chemical/x-xyz": {
source: "apache",
extensions: ["xyz"]
},
"font/collection": {
source: "iana",
extensions: ["ttc"]
},
"font/otf": {
source: "iana",
compressible: true,
extensions: ["otf"]
},
"font/sfnt": {
source: "iana"
},
"font/ttf": {
source: "iana",
compressible: true,
extensions: ["ttf"]
},
"font/woff": {
source: "iana",
extensions: ["woff"]
},
"font/woff2": {
source: "iana",
extensions: ["woff2"]
},
"image/aces": {
source: "iana",
extensions: ["exr"]
},
"image/apng": {
compressible: false,
extensions: ["apng"]
},
"image/avci": {
source: "iana",
extensions: ["avci"]
},
"image/avcs": {
source: "iana",
extensions: ["avcs"]
},
"image/avif": {
source: "iana",
compressible: false,
extensions: ["avif"]
},
"image/bmp": {
source: "iana",
compressible: true,
extensions: ["bmp"]
},
"image/cgm": {
source: "iana",
extensions: ["cgm"]
},
"image/dicom-rle": {
source: "iana",
extensions: ["drle"]
},
"image/emf": {
source: "iana",
extensions: ["emf"]
},
"image/fits": {
source: "iana",
extensions: ["fits"]
},
"image/g3fax": {
source: "iana",
extensions: ["g3"]
},
"image/gif": {
source: "iana",
compressible: false,
extensions: ["gif"]
},
"image/heic": {
source: "iana",
extensions: ["heic"]
},
"image/heic-sequence": {
source: "iana",
extensions: ["heics"]
},
"image/heif": {
source: "iana",
extensions: ["heif"]
},
"image/heif-sequence": {
source: "iana",
extensions: ["heifs"]
},
"image/hej2k": {
source: "iana",
extensions: ["hej2"]
},
"image/hsj2": {
source: "iana",
extensions: ["hsj2"]
},
"image/ief": {
source: "iana",
extensions: ["ief"]
},
"image/jls": {
source: "iana",
extensions: ["jls"]
},
"image/jp2": {
source: "iana",
compressible: false,
extensions: ["jp2", "jpg2"]
},
"image/jpeg": {
source: "iana",
compressible: false,
extensions: ["jpeg", "jpg", "jpe"]
},
"image/jph": {
source: "iana",
extensions: ["jph"]
},
"image/jphc": {
source: "iana",
extensions: ["jhc"]
},
"image/jpm": {
source: "iana",
compressible: false,
extensions: ["jpm"]
},
"image/jpx": {
source: "iana",
compressible: false,
extensions: ["jpx", "jpf"]
},
"image/jxr": {
source: "iana",
extensions: ["jxr"]
},
"image/jxra": {
source: "iana",
extensions: ["jxra"]
},
"image/jxrs": {
source: "iana",
extensions: ["jxrs"]
},
"image/jxs": {
source: "iana",
extensions: ["jxs"]
},
"image/jxsc": {
source: "iana",
extensions: ["jxsc"]
},
"image/jxsi": {
source: "iana",
extensions: ["jxsi"]
},
"image/jxss": {
source: "iana",
extensions: ["jxss"]
},
"image/ktx": {
source: "iana",
extensions: ["ktx"]
},
"image/ktx2": {
source: "iana",
extensions: ["ktx2"]
},
"image/naplps": {
source: "iana"
},
"image/pjpeg": {
compressible: false
},
"image/png": {
source: "iana",
compressible: false,
extensions: ["png"]
},
"image/prs.btif": {
source: "iana",
extensions: ["btif"]
},
"image/prs.pti": {
source: "iana",
extensions: ["pti"]
},
"image/pwg-raster": {
source: "iana"
},
"image/sgi": {
source: "apache",
extensions: ["sgi"]
},
"image/svg+xml": {
source: "iana",
compressible: true,
extensions: ["svg", "svgz"]
},
"image/t38": {
source: "iana",
extensions: ["t38"]
},
"image/tiff": {
source: "iana",
compressible: false,
extensions: ["tif", "tiff"]
},
"image/tiff-fx": {
source: "iana",
extensions: ["tfx"]
},
"image/vnd.adobe.photoshop": {
source: "iana",
compressible: true,
extensions: ["psd"]
},
"image/vnd.airzip.accelerator.azv": {
source: "iana",
extensions: ["azv"]
},
"image/vnd.cns.inf2": {
source: "iana"
},
"image/vnd.dece.graphic": {
source: "iana",
extensions: ["uvi", "uvvi", "uvg", "uvvg"]
},
"image/vnd.djvu": {
source: "iana",
extensions: ["djvu", "djv"]
},
"image/vnd.dvb.subtitle": {
source: "iana",
extensions: ["sub"]
},
"image/vnd.dwg": {
source: "iana",
extensions: ["dwg"]
},
"image/vnd.dxf": {
source: "iana",
extensions: ["dxf"]
},
"image/vnd.fastbidsheet": {
source: "iana",
extensions: ["fbs"]
},
"image/vnd.fpx": {
source: "iana",
extensions: ["fpx"]
},
"image/vnd.fst": {
source: "iana",
extensions: ["fst"]
},
"image/vnd.fujixerox.edmics-mmr": {
source: "iana",
extensions: ["mmr"]
},
"image/vnd.fujixerox.edmics-rlc": {
source: "iana",
extensions: ["rlc"]
},
"image/vnd.globalgraphics.pgb": {
source: "iana"
},
"image/vnd.microsoft.icon": {
source: "iana",
compressible: true,
extensions: ["ico"]
},
"image/vnd.mix": {
source: "iana"
},
"image/vnd.mozilla.apng": {
source: "iana"
},
"image/vnd.ms-dds": {
compressible: true,
extensions: ["dds"]
},
"image/vnd.ms-modi": {
source: "iana",
extensions: ["mdi"]
},
"image/vnd.ms-photo": {
source: "apache",
extensions: ["wdp"]
},
"image/vnd.net-fpx": {
source: "iana",
extensions: ["npx"]
},
"image/vnd.pco.b16": {
source: "iana",
extensions: ["b16"]
},
"image/vnd.radiance": {
source: "iana"
},
"image/vnd.sealed.png": {
source: "iana"
},
"image/vnd.sealedmedia.softseal.gif": {
source: "iana"
},
"image/vnd.sealedmedia.softseal.jpg": {
source: "iana"
},
"image/vnd.svf": {
source: "iana"
},
"image/vnd.tencent.tap": {
source: "iana",
extensions: ["tap"]
},
"image/vnd.valve.source.texture": {
source: "iana",
extensions: ["vtf"]
},
"image/vnd.wap.wbmp": {
source: "iana",
extensions: ["wbmp"]
},
"image/vnd.xiff": {
source: "iana",
extensions: ["xif"]
},
"image/vnd.zbrush.pcx": {
source: "iana",
extensions: ["pcx"]
},
"image/webp": {
source: "apache",
extensions: ["webp"]
},
"image/wmf": {
source: "iana",
extensions: ["wmf"]
},
"image/x-3ds": {
source: "apache",
extensions: ["3ds"]
},
"image/x-cmu-raster": {
source: "apache",
extensions: ["ras"]
},
"image/x-cmx": {
source: "apache",
extensions: ["cmx"]
},
"image/x-freehand": {
source: "apache",
extensions: ["fh", "fhc", "fh4", "fh5", "fh7"]
},
"image/x-icon": {
source: "apache",
compressible: true,
extensions: ["ico"]
},
"image/x-jng": {
source: "nginx",
extensions: ["jng"]
},
"image/x-mrsid-image": {
source: "apache",
extensions: ["sid"]
},
"image/x-ms-bmp": {
source: "nginx",
compressible: true,
extensions: ["bmp"]
},
"image/x-pcx": {
source: "apache",
extensions: ["pcx"]
},
"image/x-pict": {
source: "apache",
extensions: ["pic", "pct"]
},
"image/x-portable-anymap": {
source: "apache",
extensions: ["pnm"]
},
"image/x-portable-bitmap": {
source: "apache",
extensions: ["pbm"]
},
"image/x-portable-graymap": {
source: "apache",
extensions: ["pgm"]
},
"image/x-portable-pixmap": {
source: "apache",
extensions: ["ppm"]
},
"image/x-rgb": {
source: "apache",
extensions: ["rgb"]
},
"image/x-tga": {
source: "apache",
extensions: ["tga"]
},
"image/x-xbitmap": {
source: "apache",
extensions: ["xbm"]
},
"image/x-xcf": {
compressible: false
},
"image/x-xpixmap": {
source: "apache",
extensions: ["xpm"]
},
"image/x-xwindowdump": {
source: "apache",
extensions: ["xwd"]
},
"message/cpim": {
source: "iana"
},
"message/delivery-status": {
source: "iana"
},
"message/disposition-notification": {
source: "iana",
extensions: [
"disposition-notification"
]
},
"message/external-body": {
source: "iana"
},
"message/feedback-report": {
source: "iana"
},
"message/global": {
source: "iana",
extensions: ["u8msg"]
},
"message/global-delivery-status": {
source: "iana",
extensions: ["u8dsn"]
},
"message/global-disposition-notification": {
source: "iana",
extensions: ["u8mdn"]
},
"message/global-headers": {
source: "iana",
extensions: ["u8hdr"]
},
"message/http": {
source: "iana",
compressible: false
},
"message/imdn+xml": {
source: "iana",
compressible: true
},
"message/news": {
source: "iana"
},
"message/partial": {
source: "iana",
compressible: false
},
"message/rfc822": {
source: "iana",
compressible: true,
extensions: ["eml", "mime"]
},
"message/s-http": {
source: "iana"
},
"message/sip": {
source: "iana"
},
"message/sipfrag": {
source: "iana"
},
"message/tracking-status": {
source: "iana"
},
"message/vnd.si.simp": {
source: "iana"
},
"message/vnd.wfa.wsc": {
source: "iana",
extensions: ["wsc"]
},
"model/3mf": {
source: "iana",
extensions: ["3mf"]
},
"model/e57": {
source: "iana"
},
"model/gltf+json": {
source: "iana",
compressible: true,
extensions: ["gltf"]
},
"model/gltf-binary": {
source: "iana",
compressible: true,
extensions: ["glb"]
},
"model/iges": {
source: "iana",
compressible: false,
extensions: ["igs", "iges"]
},
"model/mesh": {
source: "iana",
compressible: false,
extensions: ["msh", "mesh", "silo"]
},
"model/mtl": {
source: "iana",
extensions: ["mtl"]
},
"model/obj": {
source: "iana",
extensions: ["obj"]
},
"model/step": {
source: "iana"
},
"model/step+xml": {
source: "iana",
compressible: true,
extensions: ["stpx"]
},
"model/step+zip": {
source: "iana",
compressible: false,
extensions: ["stpz"]
},
"model/step-xml+zip": {
source: "iana",
compressible: false,
extensions: ["stpxz"]
},
"model/stl": {
source: "iana",
extensions: ["stl"]
},
"model/vnd.collada+xml": {
source: "iana",
compressible: true,
extensions: ["dae"]
},
"model/vnd.dwf": {
source: "iana",
extensions: ["dwf"]
},
"model/vnd.flatland.3dml": {
source: "iana"
},
"model/vnd.gdl": {
source: "iana",
extensions: ["gdl"]
},
"model/vnd.gs-gdl": {
source: "apache"
},
"model/vnd.gs.gdl": {
source: "iana"
},
"model/vnd.gtw": {
source: "iana",
extensions: ["gtw"]
},
"model/vnd.moml+xml": {
source: "iana",
compressible: true
},
"model/vnd.mts": {
source: "iana",
extensions: ["mts"]
},
"model/vnd.opengex": {
source: "iana",
extensions: ["ogex"]
},
"model/vnd.parasolid.transmit.binary": {
source: "iana",
extensions: ["x_b"]
},
"model/vnd.parasolid.transmit.text": {
source: "iana",
extensions: ["x_t"]
},
"model/vnd.pytha.pyox": {
source: "iana"
},
"model/vnd.rosette.annotated-data-model": {
source: "iana"
},
"model/vnd.sap.vds": {
source: "iana",
extensions: ["vds"]
},
"model/vnd.usdz+zip": {
source: "iana",
compressible: false,
extensions: ["usdz"]
},
"model/vnd.valve.source.compiled-map": {
source: "iana",
extensions: ["bsp"]
},
"model/vnd.vtu": {
source: "iana",
extensions: ["vtu"]
},
"model/vrml": {
source: "iana",
compressible: false,
extensions: ["wrl", "vrml"]
},
"model/x3d+binary": {
source: "apache",
compressible: false,
extensions: ["x3db", "x3dbz"]
},
"model/x3d+fastinfoset": {
source: "iana",
extensions: ["x3db"]
},
"model/x3d+vrml": {
source: "apache",
compressible: false,
extensions: ["x3dv", "x3dvz"]
},
"model/x3d+xml": {
source: "iana",
compressible: true,
extensions: ["x3d", "x3dz"]
},
"model/x3d-vrml": {
source: "iana",
extensions: ["x3dv"]
},
"multipart/alternative": {
source: "iana",
compressible: false
},
"multipart/appledouble": {
source: "iana"
},
"multipart/byteranges": {
source: "iana"
},
"multipart/digest": {
source: "iana"
},
"multipart/encrypted": {
source: "iana",
compressible: false
},
"multipart/form-data": {
source: "iana",
compressible: false
},
"multipart/header-set": {
source: "iana"
},
"multipart/mixed": {
source: "iana"
},
"multipart/multilingual": {
source: "iana"
},
"multipart/parallel": {
source: "iana"
},
"multipart/related": {
source: "iana",
compressible: false
},
"multipart/report": {
source: "iana"
},
"multipart/signed": {
source: "iana",
compressible: false
},
"multipart/vnd.bint.med-plus": {
source: "iana"
},
"multipart/voice-message": {
source: "iana"
},
"multipart/x-mixed-replace": {
source: "iana"
},
"text/1d-interleaved-parityfec": {
source: "iana"
},
"text/cache-manifest": {
source: "iana",
compressible: true,
extensions: ["appcache", "manifest"]
},
"text/calendar": {
source: "iana",
extensions: ["ics", "ifb"]
},
"text/calender": {
compressible: true
},
"text/cmd": {
compressible: true
},
"text/coffeescript": {
extensions: ["coffee", "litcoffee"]
},
"text/cql": {
source: "iana"
},
"text/cql-expression": {
source: "iana"
},
"text/cql-identifier": {
source: "iana"
},
"text/css": {
source: "iana",
charset: "UTF-8",
compressible: true,
extensions: ["css"]
},
"text/csv": {
source: "iana",
compressible: true,
extensions: ["csv"]
},
"text/csv-schema": {
source: "iana"
},
"text/directory": {
source: "iana"
},
"text/dns": {
source: "iana"
},
"text/ecmascript": {
source: "iana"
},
"text/encaprtp": {
source: "iana"
},
"text/enriched": {
source: "iana"
},
"text/fhirpath": {
source: "iana"
},
"text/flexfec": {
source: "iana"
},
"text/fwdred": {
source: "iana"
},
"text/gff3": {
source: "iana"
},
"text/grammar-ref-list": {
source: "iana"
},
"text/html": {
source: "iana",
compressible: true,
extensions: ["html", "htm", "shtml"]
},
"text/jade": {
extensions: ["jade"]
},
"text/javascript": {
source: "iana",
compressible: true
},
"text/jcr-cnd": {
source: "iana"
},
"text/jsx": {
compressible: true,
extensions: ["jsx"]
},
"text/less": {
compressible: true,
extensions: ["less"]
},
"text/markdown": {
source: "iana",
compressible: true,
extensions: ["markdown", "md"]
},
"text/mathml": {
source: "nginx",
extensions: ["mml"]
},
"text/mdx": {
compressible: true,
extensions: ["mdx"]
},
"text/mizar": {
source: "iana"
},
"text/n3": {
source: "iana",
charset: "UTF-8",
compressible: true,
extensions: ["n3"]
},
"text/parameters": {
source: "iana",
charset: "UTF-8"
},
"text/parityfec": {
source: "iana"
},
"text/plain": {
source: "iana",
compressible: true,
extensions: ["txt", "text", "conf", "def", "list", "log", "in", "ini"]
},
"text/provenance-notation": {
source: "iana",
charset: "UTF-8"
},
"text/prs.fallenstein.rst": {
source: "iana"
},
"text/prs.lines.tag": {
source: "iana",
extensions: ["dsc"]
},
"text/prs.prop.logic": {
source: "iana"
},
"text/raptorfec": {
source: "iana"
},
"text/red": {
source: "iana"
},
"text/rfc822-headers": {
source: "iana"
},
"text/richtext": {
source: "iana",
compressible: true,
extensions: ["rtx"]
},
"text/rtf": {
source: "iana",
compressible: true,
extensions: ["rtf"]
},
"text/rtp-enc-aescm128": {
source: "iana"
},
"text/rtploopback": {
source: "iana"
},
"text/rtx": {
source: "iana"
},
"text/sgml": {
source: "iana",
extensions: ["sgml", "sgm"]
},
"text/shaclc": {
source: "iana"
},
"text/shex": {
source: "iana",
extensions: ["shex"]
},
"text/slim": {
extensions: ["slim", "slm"]
},
"text/spdx": {
source: "iana",
extensions: ["spdx"]
},
"text/strings": {
source: "iana"
},
"text/stylus": {
extensions: ["stylus", "styl"]
},
"text/t140": {
source: "iana"
},
"text/tab-separated-values": {
source: "iana",
compressible: true,
extensions: ["tsv"]
},
"text/troff": {
source: "iana",
extensions: ["t", "tr", "roff", "man", "me", "ms"]
},
"text/turtle": {
source: "iana",
charset: "UTF-8",
extensions: ["ttl"]
},
"text/ulpfec": {
source: "iana"
},
"text/uri-list": {
source: "iana",
compressible: true,
extensions: ["uri", "uris", "urls"]
},
"text/vcard": {
source: "iana",
compressible: true,
extensions: ["vcard"]
},
"text/vnd.a": {
source: "iana"
},
"text/vnd.abc": {
source: "iana"
},
"text/vnd.ascii-art": {
source: "iana"
},
"text/vnd.curl": {
source: "iana",
extensions: ["curl"]
},
"text/vnd.curl.dcurl": {
source: "apache",
extensions: ["dcurl"]
},
"text/vnd.curl.mcurl": {
source: "apache",
extensions: ["mcurl"]
},
"text/vnd.curl.scurl": {
source: "apache",
extensions: ["scurl"]
},
"text/vnd.debian.copyright": {
source: "iana",
charset: "UTF-8"
},
"text/vnd.dmclientscript": {
source: "iana"
},
"text/vnd.dvb.subtitle": {
source: "iana",
extensions: ["sub"]
},
"text/vnd.esmertec.theme-descriptor": {
source: "iana",
charset: "UTF-8"
},
"text/vnd.familysearch.gedcom": {
source: "iana",
extensions: ["ged"]
},
"text/vnd.ficlab.flt": {
source: "iana"
},
"text/vnd.fly": {
source: "iana",
extensions: ["fly"]
},
"text/vnd.fmi.flexstor": {
source: "iana",
extensions: ["flx"]
},
"text/vnd.gml": {
source: "iana"
},
"text/vnd.graphviz": {
source: "iana",
extensions: ["gv"]
},
"text/vnd.hans": {
source: "iana"
},
"text/vnd.hgl": {
source: "iana"
},
"text/vnd.in3d.3dml": {
source: "iana",
extensions: ["3dml"]
},
"text/vnd.in3d.spot": {
source: "iana",
extensions: ["spot"]
},
"text/vnd.iptc.newsml": {
source: "iana"
},
"text/vnd.iptc.nitf": {
source: "iana"
},
"text/vnd.latex-z": {
source: "iana"
},
"text/vnd.motorola.reflex": {
source: "iana"
},
"text/vnd.ms-mediapackage": {
source: "iana"
},
"text/vnd.net2phone.commcenter.command": {
source: "iana"
},
"text/vnd.radisys.msml-basic-layout": {
source: "iana"
},
"text/vnd.senx.warpscript": {
source: "iana"
},
"text/vnd.si.uricatalogue": {
source: "iana"
},
"text/vnd.sosi": {
source: "iana"
},
"text/vnd.sun.j2me.app-descriptor": {
source: "iana",
charset: "UTF-8",
extensions: ["jad"]
},
"text/vnd.trolltech.linguist": {
source: "iana",
charset: "UTF-8"
},
"text/vnd.wap.si": {
source: "iana"
},
"text/vnd.wap.sl": {
source: "iana"
},
"text/vnd.wap.wml": {
source: "iana",
extensions: ["wml"]
},
"text/vnd.wap.wmlscript": {
source: "iana",
extensions: ["wmls"]
},
"text/vtt": {
source: "iana",
charset: "UTF-8",
compressible: true,
extensions: ["vtt"]
},
"text/x-asm": {
source: "apache",
extensions: ["s", "asm"]
},
"text/x-c": {
source: "apache",
extensions: ["c", "cc", "cxx", "cpp", "h", "hh", "dic"]
},
"text/x-component": {
source: "nginx",
extensions: ["htc"]
},
"text/x-fortran": {
source: "apache",
extensions: ["f", "for", "f77", "f90"]
},
"text/x-gwt-rpc": {
compressible: true
},
"text/x-handlebars-template": {
extensions: ["hbs"]
},
"text/x-java-source": {
source: "apache",
extensions: ["java"]
},
"text/x-jquery-tmpl": {
compressible: true
},
"text/x-lua": {
extensions: ["lua"]
},
"text/x-markdown": {
compressible: true,
extensions: ["mkd"]
},
"text/x-nfo": {
source: "apache",
extensions: ["nfo"]
},
"text/x-opml": {
source: "apache",
extensions: ["opml"]
},
"text/x-org": {
compressible: true,
extensions: ["org"]
},
"text/x-pascal": {
source: "apache",
extensions: ["p", "pas"]
},
"text/x-processing": {
compressible: true,
extensions: ["pde"]
},
"text/x-sass": {
extensions: ["sass"]
},
"text/x-scss": {
extensions: ["scss"]
},
"text/x-setext": {
source: "apache",
extensions: ["etx"]
},
"text/x-sfv": {
source: "apache",
extensions: ["sfv"]
},
"text/x-suse-ymp": {
compressible: true,
extensions: ["ymp"]
},
"text/x-uuencode": {
source: "apache",
extensions: ["uu"]
},
"text/x-vcalendar": {
source: "apache",
extensions: ["vcs"]
},
"text/x-vcard": {
source: "apache",
extensions: ["vcf"]
},
"text/xml": {
source: "iana",
compressible: true,
extensions: ["xml"]
},
"text/xml-external-parsed-entity": {
source: "iana"
},
"text/yaml": {
compressible: true,
extensions: ["yaml", "yml"]
},
"video/1d-interleaved-parityfec": {
source: "iana"
},
"video/3gpp": {
source: "iana",
extensions: ["3gp", "3gpp"]
},
"video/3gpp-tt": {
source: "iana"
},
"video/3gpp2": {
source: "iana",
extensions: ["3g2"]
},
"video/av1": {
source: "iana"
},
"video/bmpeg": {
source: "iana"
},
"video/bt656": {
source: "iana"
},
"video/celb": {
source: "iana"
},
"video/dv": {
source: "iana"
},
"video/encaprtp": {
source: "iana"
},
"video/ffv1": {
source: "iana"
},
"video/flexfec": {
source: "iana"
},
"video/h261": {
source: "iana",
extensions: ["h261"]
},
"video/h263": {
source: "iana",
extensions: ["h263"]
},
"video/h263-1998": {
source: "iana"
},
"video/h263-2000": {
source: "iana"
},
"video/h264": {
source: "iana",
extensions: ["h264"]
},
"video/h264-rcdo": {
source: "iana"
},
"video/h264-svc": {
source: "iana"
},
"video/h265": {
source: "iana"
},
"video/iso.segment": {
source: "iana",
extensions: ["m4s"]
},
"video/jpeg": {
source: "iana",
extensions: ["jpgv"]
},
"video/jpeg2000": {
source: "iana"
},
"video/jpm": {
source: "apache",
extensions: ["jpm", "jpgm"]
},
"video/jxsv": {
source: "iana"
},
"video/mj2": {
source: "iana",
extensions: ["mj2", "mjp2"]
},
"video/mp1s": {
source: "iana"
},
"video/mp2p": {
source: "iana"
},
"video/mp2t": {
source: "iana",
extensions: ["ts"]
},
"video/mp4": {
source: "iana",
compressible: false,
extensions: ["mp4", "mp4v", "mpg4"]
},
"video/mp4v-es": {
source: "iana"
},
"video/mpeg": {
source: "iana",
compressible: false,
extensions: ["mpeg", "mpg", "mpe", "m1v", "m2v"]
},
"video/mpeg4-generic": {
source: "iana"
},
"video/mpv": {
source: "iana"
},
"video/nv": {
source: "iana"
},
"video/ogg": {
source: "iana",
compressible: false,
extensions: ["ogv"]
},
"video/parityfec": {
source: "iana"
},
"video/pointer": {
source: "iana"
},
"video/quicktime": {
source: "iana",
compressible: false,
extensions: ["qt", "mov"]
},
"video/raptorfec": {
source: "iana"
},
"video/raw": {
source: "iana"
},
"video/rtp-enc-aescm128": {
source: "iana"
},
"video/rtploopback": {
source: "iana"
},
"video/rtx": {
source: "iana"
},
"video/scip": {
source: "iana"
},
"video/smpte291": {
source: "iana"
},
"video/smpte292m": {
source: "iana"
},
"video/ulpfec": {
source: "iana"
},
"video/vc1": {
source: "iana"
},
"video/vc2": {
source: "iana"
},
"video/vnd.cctv": {
source: "iana"
},
"video/vnd.dece.hd": {
source: "iana",
extensions: ["uvh", "uvvh"]
},
"video/vnd.dece.mobile": {
source: "iana",
extensions: ["uvm", "uvvm"]
},
"video/vnd.dece.mp4": {
source: "iana"
},
"video/vnd.dece.pd": {
source: "iana",
extensions: ["uvp", "uvvp"]
},
"video/vnd.dece.sd": {
source: "iana",
extensions: ["uvs", "uvvs"]
},
"video/vnd.dece.video": {
source: "iana",
extensions: ["uvv", "uvvv"]
},
"video/vnd.directv.mpeg": {
source: "iana"
},
"video/vnd.directv.mpeg-tts": {
source: "iana"
},
"video/vnd.dlna.mpeg-tts": {
source: "iana"
},
"video/vnd.dvb.file": {
source: "iana",
extensions: ["dvb"]
},
"video/vnd.fvt": {
source: "iana",
extensions: ["fvt"]
},
"video/vnd.hns.video": {
source: "iana"
},
"video/vnd.iptvforum.1dparityfec-1010": {
source: "iana"
},
"video/vnd.iptvforum.1dparityfec-2005": {
source: "iana"
},
"video/vnd.iptvforum.2dparityfec-1010": {
source: "iana"
},
"video/vnd.iptvforum.2dparityfec-2005": {
source: "iana"
},
"video/vnd.iptvforum.ttsavc": {
source: "iana"
},
"video/vnd.iptvforum.ttsmpeg2": {
source: "iana"
},
"video/vnd.motorola.video": {
source: "iana"
},
"video/vnd.motorola.videop": {
source: "iana"
},
"video/vnd.mpegurl": {
source: "iana",
extensions: ["mxu", "m4u"]
},
"video/vnd.ms-playready.media.pyv": {
source: "iana",
extensions: ["pyv"]
},
"video/vnd.nokia.interleaved-multimedia": {
source: "iana"
},
"video/vnd.nokia.mp4vr": {
source: "iana"
},
"video/vnd.nokia.videovoip": {
source: "iana"
},
"video/vnd.objectvideo": {
source: "iana"
},
"video/vnd.radgamettools.bink": {
source: "iana"
},
"video/vnd.radgamettools.smacker": {
source: "iana"
},
"video/vnd.sealed.mpeg1": {
source: "iana"
},
"video/vnd.sealed.mpeg4": {
source: "iana"
},
"video/vnd.sealed.swf": {
source: "iana"
},
"video/vnd.sealedmedia.softseal.mov": {
source: "iana"
},
"video/vnd.uvvu.mp4": {
source: "iana",
extensions: ["uvu", "uvvu"]
},
"video/vnd.vivo": {
source: "iana",
extensions: ["viv"]
},
"video/vnd.youtube.yt": {
source: "iana"
},
"video/vp8": {
source: "iana"
},
"video/vp9": {
source: "iana"
},
"video/webm": {
source: "apache",
compressible: false,
extensions: ["webm"]
},
"video/x-f4v": {
source: "apache",
extensions: ["f4v"]
},
"video/x-fli": {
source: "apache",
extensions: ["fli"]
},
"video/x-flv": {
source: "apache",
compressible: false,
extensions: ["flv"]
},
"video/x-m4v": {
source: "apache",
extensions: ["m4v"]
},
"video/x-matroska": {
source: "apache",
compressible: false,
extensions: ["mkv", "mk3d", "mks"]
},
"video/x-mng": {
source: "apache",
extensions: ["mng"]
},
"video/x-ms-asf": {
source: "apache",
extensions: ["asf", "asx"]
},
"video/x-ms-vob": {
source: "apache",
extensions: ["vob"]
},
"video/x-ms-wm": {
source: "apache",
extensions: ["wm"]
},
"video/x-ms-wmv": {
source: "apache",
compressible: false,
extensions: ["wmv"]
},
"video/x-ms-wmx": {
source: "apache",
extensions: ["wmx"]
},
"video/x-ms-wvx": {
source: "apache",
extensions: ["wvx"]
},
"video/x-msvideo": {
source: "apache",
extensions: ["avi"]
},
"video/x-sgi-movie": {
source: "apache",
extensions: ["movie"]
},
"video/x-smv": {
source: "apache",
extensions: ["smv"]
},
"x-conference/x-cooltalk": {
source: "apache",
extensions: ["ice"]
},
"x-shader/x-fragment": {
compressible: true
},
"x-shader/x-vertex": {
compressible: true
}
};
}
});
// node_modules/mime-db/index.js
var require_mime_db = __commonJS({
"node_modules/mime-db/index.js"(exports2, module2) {
module2.exports = require_db();
}
});
// node_modules/mime-types/index.js
var require_mime_types = __commonJS({
"node_modules/mime-types/index.js"(exports2) {
"use strict";
var db = require_mime_db();
var extname = require("path").extname;
var EXTRACT_TYPE_REGEXP = /^\s*([^;\s]*)(?:;|\s|$)/;
var TEXT_TYPE_REGEXP = /^text\//i;
exports2.charset = charset;
exports2.charsets = { lookup: charset };
exports2.contentType = contentType;
exports2.extension = extension;
exports2.extensions = /* @__PURE__ */ Object.create(null);
exports2.lookup = lookup;
exports2.types = /* @__PURE__ */ Object.create(null);
populateMaps(exports2.extensions, exports2.types);
function charset(type) {
if (!type || typeof type !== "string") {
return false;
}
var match = EXTRACT_TYPE_REGEXP.exec(type);
var mime = match && db[match[1].toLowerCase()];
if (mime && mime.charset) {
return mime.charset;
}
if (match && TEXT_TYPE_REGEXP.test(match[1])) {
return "UTF-8";
}
return false;
}
function contentType(str) {
if (!str || typeof str !== "string") {
return false;
}
var mime = str.indexOf("/") === -1 ? exports2.lookup(str) : str;
if (!mime) {
return false;
}
if (mime.indexOf("charset") === -1) {
var charset2 = exports2.charset(mime);
if (charset2) mime += "; charset=" + charset2.toLowerCase();
}
return mime;
}
function extension(type) {
if (!type || typeof type !== "string") {
return false;
}
var match = EXTRACT_TYPE_REGEXP.exec(type);
var exts = match && exports2.extensions[match[1].toLowerCase()];
if (!exts || !exts.length) {
return false;
}
return exts[0];
}
function lookup(path) {
if (!path || typeof path !== "string") {
return false;
}
var extension2 = extname("x." + path).toLowerCase().substr(1);
if (!extension2) {
return false;
}
return exports2.types[extension2] || false;
}
function populateMaps(extensions, types) {
var preference = ["nginx", "apache", void 0, "iana"];
Object.keys(db).forEach(function forEachMimeType(type) {
var mime = db[type];
var exts = mime.extensions;
if (!exts || !exts.length) {
return;
}
extensions[type] = exts;
for (var i = 0; i < exts.length; i++) {
var extension2 = exts[i];
if (types[extension2]) {
var from = preference.indexOf(db[types[extension2]].source);
var to = preference.indexOf(mime.source);
if (types[extension2] !== "application/octet-stream" && (from > to || from === to && types[extension2].substr(0, 12) === "application/")) {
continue;
}
}
types[extension2] = type;
}
});
}
}
});
// node_modules/asynckit/lib/defer.js
var require_defer = __commonJS({
"node_modules/asynckit/lib/defer.js"(exports2, module2) {
module2.exports = defer;
function defer(fn) {
var nextTick = typeof setImmediate == "function" ? setImmediate : typeof process == "object" && typeof process.nextTick == "function" ? process.nextTick : null;
if (nextTick) {
nextTick(fn);
} else {
setTimeout(fn, 0);
}
}
}
});
// node_modules/asynckit/lib/async.js
var require_async2 = __commonJS({
"node_modules/asynckit/lib/async.js"(exports2, module2) {
var defer = require_defer();
module2.exports = async;
function async(callback) {
var isAsync3 = false;
defer(function() {
isAsync3 = true;
});
return function async_callback(err2, result) {
if (isAsync3) {
callback(err2, result);
} else {
defer(function nextTick_callback() {
callback(err2, result);
});
}
};
}
}
});
// node_modules/asynckit/lib/abort.js
var require_abort = __commonJS({
"node_modules/asynckit/lib/abort.js"(exports2, module2) {
module2.exports = abort;
function abort(state) {
Object.keys(state.jobs).forEach(clean.bind(state));
state.jobs = {};
}
function clean(key) {
if (typeof this.jobs[key] == "function") {
this.jobs[key]();
}
}
}
});
// node_modules/asynckit/lib/iterate.js
var require_iterate = __commonJS({
"node_modules/asynckit/lib/iterate.js"(exports2, module2) {
var async = require_async2();
var abort = require_abort();
module2.exports = iterate;
function iterate(list, iterator, state, callback) {
var key = state["keyedList"] ? state["keyedList"][state.index] : state.index;
state.jobs[key] = runJob(iterator, key, list[key], function(error, output) {
if (!(key in state.jobs)) {
return;
}
delete state.jobs[key];
if (error) {
abort(state);
} else {
state.results[key] = output;
}
callback(error, state.results);
});
}
function runJob(iterator, key, item, callback) {
var aborter;
if (iterator.length == 2) {
aborter = iterator(item, async(callback));
} else {
aborter = iterator(item, key, async(callback));
}
return aborter;
}
}
});
// node_modules/asynckit/lib/state.js
var require_state = __commonJS({
"node_modules/asynckit/lib/state.js"(exports2, module2) {
module2.exports = state;
function state(list, sortMethod) {
var isNamedList = !Array.isArray(list), initState = {
index: 0,
keyedList: isNamedList || sortMethod ? Object.keys(list) : null,
jobs: {},
results: isNamedList ? {} : [],
size: isNamedList ? Object.keys(list).length : list.length
};
if (sortMethod) {
initState.keyedList.sort(isNamedList ? sortMethod : function(a, b) {
return sortMethod(list[a], list[b]);
});
}
return initState;
}
}
});
// node_modules/asynckit/lib/terminator.js
var require_terminator = __commonJS({
"node_modules/asynckit/lib/terminator.js"(exports2, module2) {
var abort = require_abort();
var async = require_async2();
module2.exports = terminator;
function terminator(callback) {
if (!Object.keys(this.jobs).length) {
return;
}
this.index = this.size;
abort(this);
async(callback)(null, this.results);
}
}
});
// node_modules/asynckit/parallel.js
var require_parallel = __commonJS({
"node_modules/asynckit/parallel.js"(exports2, module2) {
var iterate = require_iterate();
var initState = require_state();
var terminator = require_terminator();
module2.exports = parallel;
function parallel(list, iterator, callback) {
var state = initState(list);
while (state.index < (state["keyedList"] || list).length) {
iterate(list, iterator, state, function(error, result) {
if (error) {
callback(error, result);
return;
}
if (Object.keys(state.jobs).length === 0) {
callback(null, state.results);
return;
}
});
state.index++;
}
return terminator.bind(state, callback);
}
}
});
// node_modules/asynckit/serialOrdered.js
var require_serialOrdered = __commonJS({
"node_modules/asynckit/serialOrdered.js"(exports2, module2) {
var iterate = require_iterate();
var initState = require_state();
var terminator = require_terminator();
module2.exports = serialOrdered;
module2.exports.ascending = ascending;
module2.exports.descending = descending;
function serialOrdered(list, iterator, sortMethod, callback) {
var state = initState(list, sortMethod);
iterate(list, iterator, state, function iteratorHandler(error, result) {
if (error) {
callback(error, result);
return;
}
state.index++;
if (state.index < (state["keyedList"] || list).length) {
iterate(list, iterator, state, iteratorHandler);
return;
}
callback(null, state.results);
});
return terminator.bind(state, callback);
}
function ascending(a, b) {
return a < b ? -1 : a > b ? 1 : 0;
}
function descending(a, b) {
return -1 * ascending(a, b);
}
}
});
// node_modules/asynckit/serial.js
var require_serial = __commonJS({
"node_modules/asynckit/serial.js"(exports2, module2) {
var serialOrdered = require_serialOrdered();
module2.exports = serial;
function serial(list, iterator, callback) {
return serialOrdered(list, iterator, null, callback);
}
}
});
// node_modules/asynckit/index.js
var require_asynckit = __commonJS({
"node_modules/asynckit/index.js"(exports2, module2) {
module2.exports = {
parallel: require_parallel(),
serial: require_serial(),
serialOrdered: require_serialOrdered()
};
}
});
// node_modules/es-object-atoms/index.js
var require_es_object_atoms = __commonJS({
"node_modules/es-object-atoms/index.js"(exports2, module2) {
"use strict";
module2.exports = Object;
}
});
// node_modules/es-errors/index.js
var require_es_errors = __commonJS({
"node_modules/es-errors/index.js"(exports2, module2) {
"use strict";
module2.exports = Error;
}
});
// node_modules/es-errors/eval.js
var require_eval = __commonJS({
"node_modules/es-errors/eval.js"(exports2, module2) {
"use strict";
module2.exports = EvalError;
}
});
// node_modules/es-errors/range.js
var require_range = __commonJS({
"node_modules/es-errors/range.js"(exports2, module2) {
"use strict";
module2.exports = RangeError;
}
});
// node_modules/es-errors/ref.js
var require_ref2 = __commonJS({
"node_modules/es-errors/ref.js"(exports2, module2) {
"use strict";
module2.exports = ReferenceError;
}
});
// node_modules/es-errors/syntax.js
var require_syntax = __commonJS({
"node_modules/es-errors/syntax.js"(exports2, module2) {
"use strict";
module2.exports = SyntaxError;
}
});
// node_modules/es-errors/type.js
var require_type = __commonJS({
"node_modules/es-errors/type.js"(exports2, module2) {
"use strict";
module2.exports = TypeError;
}
});
// node_modules/es-errors/uri.js
var require_uri = __commonJS({
"node_modules/es-errors/uri.js"(exports2, module2) {
"use strict";
module2.exports = URIError;
}
});
// node_modules/math-intrinsics/abs.js
var require_abs = __commonJS({
"node_modules/math-intrinsics/abs.js"(exports2, module2) {
"use strict";
module2.exports = Math.abs;
}
});
// node_modules/math-intrinsics/floor.js
var require_floor = __commonJS({
"node_modules/math-intrinsics/floor.js"(exports2, module2) {
"use strict";
module2.exports = Math.floor;
}
});
// node_modules/math-intrinsics/max.js
var require_max = __commonJS({
"node_modules/math-intrinsics/max.js"(exports2, module2) {
"use strict";
module2.exports = Math.max;
}
});
// node_modules/math-intrinsics/min.js
var require_min = __commonJS({
"node_modules/math-intrinsics/min.js"(exports2, module2) {
"use strict";
module2.exports = Math.min;
}
});
// node_modules/math-intrinsics/pow.js
var require_pow = __commonJS({
"node_modules/math-intrinsics/pow.js"(exports2, module2) {
"use strict";
module2.exports = Math.pow;
}
});
// node_modules/math-intrinsics/round.js
var require_round = __commonJS({
"node_modules/math-intrinsics/round.js"(exports2, module2) {
"use strict";
module2.exports = Math.round;
}
});
// node_modules/math-intrinsics/isNaN.js
var require_isNaN = __commonJS({
"node_modules/math-intrinsics/isNaN.js"(exports2, module2) {
"use strict";
module2.exports = Number.isNaN || function isNaN2(a) {
return a !== a;
};
}
});
// node_modules/math-intrinsics/sign.js
var require_sign = __commonJS({
"node_modules/math-intrinsics/sign.js"(exports2, module2) {
"use strict";
var $isNaN = require_isNaN();
module2.exports = function sign(number) {
if ($isNaN(number) || number === 0) {
return number;
}
return number < 0 ? -1 : 1;
};
}
});
// node_modules/gopd/gOPD.js
var require_gOPD = __commonJS({
"node_modules/gopd/gOPD.js"(exports2, module2) {
"use strict";
module2.exports = Object.getOwnPropertyDescriptor;
}
});
// node_modules/gopd/index.js
var require_gopd = __commonJS({
"node_modules/gopd/index.js"(exports2, module2) {
"use strict";
var $gOPD = require_gOPD();
if ($gOPD) {
try {
$gOPD([], "length");
} catch (e) {
$gOPD = null;
}
}
module2.exports = $gOPD;
}
});
// node_modules/es-define-property/index.js
var require_es_define_property = __commonJS({
"node_modules/es-define-property/index.js"(exports2, module2) {
"use strict";
var $defineProperty = Object.defineProperty || false;
if ($defineProperty) {
try {
$defineProperty({}, "a", { value: 1 });
} catch (e) {
$defineProperty = false;
}
}
module2.exports = $defineProperty;
}
});
// node_modules/has-symbols/shams.js
var require_shams = __commonJS({
"node_modules/has-symbols/shams.js"(exports2, module2) {
"use strict";
module2.exports = function hasSymbols() {
if (typeof Symbol !== "function" || typeof Object.getOwnPropertySymbols !== "function") {
return false;
}
if (typeof Symbol.iterator === "symbol") {
return true;
}
var obj = {};
var sym = Symbol("test");
var symObj = Object(sym);
if (typeof sym === "string") {
return false;
}
if (Object.prototype.toString.call(sym) !== "[object Symbol]") {
return false;
}
if (Object.prototype.toString.call(symObj) !== "[object Symbol]") {
return false;
}
var symVal = 42;
obj[sym] = symVal;
for (var _ in obj) {
return false;
}
if (typeof Object.keys === "function" && Object.keys(obj).length !== 0) {
return false;
}
if (typeof Object.getOwnPropertyNames === "function" && Object.getOwnPropertyNames(obj).length !== 0) {
return false;
}
var syms = Object.getOwnPropertySymbols(obj);
if (syms.length !== 1 || syms[0] !== sym) {
return false;
}
if (!Object.prototype.propertyIsEnumerable.call(obj, sym)) {
return false;
}
if (typeof Object.getOwnPropertyDescriptor === "function") {
var descriptor = (
/** @type {PropertyDescriptor} */
Object.getOwnPropertyDescriptor(obj, sym)
);
if (descriptor.value !== symVal || descriptor.enumerable !== true) {
return false;
}
}
return true;
};
}
});
// node_modules/has-symbols/index.js
var require_has_symbols = __commonJS({
"node_modules/has-symbols/index.js"(exports2, module2) {
"use strict";
var origSymbol = typeof Symbol !== "undefined" && Symbol;
var hasSymbolSham = require_shams();
module2.exports = function hasNativeSymbols() {
if (typeof origSymbol !== "function") {
return false;
}
if (typeof Symbol !== "function") {
return false;
}
if (typeof origSymbol("foo") !== "symbol") {
return false;
}
if (typeof Symbol("bar") !== "symbol") {
return false;
}
return hasSymbolSham();
};
}
});
// node_modules/get-proto/Reflect.getPrototypeOf.js
var require_Reflect_getPrototypeOf = __commonJS({
"node_modules/get-proto/Reflect.getPrototypeOf.js"(exports2, module2) {
"use strict";
module2.exports = typeof Reflect !== "undefined" && Reflect.getPrototypeOf || null;
}
});
// node_modules/get-proto/Object.getPrototypeOf.js
var require_Object_getPrototypeOf = __commonJS({
"node_modules/get-proto/Object.getPrototypeOf.js"(exports2, module2) {
"use strict";
var $Object = require_es_object_atoms();
module2.exports = $Object.getPrototypeOf || null;
}
});
// node_modules/function-bind/implementation.js
var require_implementation = __commonJS({
"node_modules/function-bind/implementation.js"(exports2, module2) {
"use strict";
var ERROR_MESSAGE = "Function.prototype.bind called on incompatible ";
var toStr = Object.prototype.toString;
var max = Math.max;
var funcType = "[object Function]";
var concatty = function concatty2(a, b) {
var arr = [];
for (var i = 0; i < a.length; i += 1) {
arr[i] = a[i];
}
for (var j = 0; j < b.length; j += 1) {
arr[j + a.length] = b[j];
}
return arr;
};
var slicy = function slicy2(arrLike, offset) {
var arr = [];
for (var i = offset || 0, j = 0; i < arrLike.length; i += 1, j += 1) {
arr[j] = arrLike[i];
}
return arr;
};
var joiny = function(arr, joiner) {
var str = "";
for (var i = 0; i < arr.length; i += 1) {
str += arr[i];
if (i + 1 < arr.length) {
str += joiner;
}
}
return str;
};
module2.exports = function bind2(that) {
var target = this;
if (typeof target !== "function" || toStr.apply(target) !== funcType) {
throw new TypeError(ERROR_MESSAGE + target);
}
var args = slicy(arguments, 1);
var bound;
var binder = function() {
if (this instanceof bound) {
var result = target.apply(
this,
concatty(args, arguments)
);
if (Object(result) === result) {
return result;
}
return this;
}
return target.apply(
that,
concatty(args, arguments)
);
};
var boundLength = max(0, target.length - args.length);
var boundArgs = [];
for (var i = 0; i < boundLength; i++) {
boundArgs[i] = "$" + i;
}
bound = Function("binder", "return function (" + joiny(boundArgs, ",") + "){ return binder.apply(this,arguments); }")(binder);
if (target.prototype) {
var Empty = function Empty2() {
};
Empty.prototype = target.prototype;
bound.prototype = new Empty();
Empty.prototype = null;
}
return bound;
};
}
});
// node_modules/function-bind/index.js
var require_function_bind = __commonJS({
"node_modules/function-bind/index.js"(exports2, module2) {
"use strict";
var implementation = require_implementation();
module2.exports = Function.prototype.bind || implementation;
}
});
// node_modules/call-bind-apply-helpers/functionCall.js
var require_functionCall = __commonJS({
"node_modules/call-bind-apply-helpers/functionCall.js"(exports2, module2) {
"use strict";
module2.exports = Function.prototype.call;
}
});
// node_modules/call-bind-apply-helpers/functionApply.js
var require_functionApply = __commonJS({
"node_modules/call-bind-apply-helpers/functionApply.js"(exports2, module2) {
"use strict";
module2.exports = Function.prototype.apply;
}
});
// node_modules/call-bind-apply-helpers/reflectApply.js
var require_reflectApply = __commonJS({
"node_modules/call-bind-apply-helpers/reflectApply.js"(exports2, module2) {
"use strict";
module2.exports = typeof Reflect !== "undefined" && Reflect && Reflect.apply;
}
});
// node_modules/call-bind-apply-helpers/actualApply.js
var require_actualApply = __commonJS({
"node_modules/call-bind-apply-helpers/actualApply.js"(exports2, module2) {
"use strict";
var bind2 = require_function_bind();
var $apply = require_functionApply();
var $call = require_functionCall();
var $reflectApply = require_reflectApply();
module2.exports = $reflectApply || bind2.call($call, $apply);
}
});
// node_modules/call-bind-apply-helpers/index.js
var require_call_bind_apply_helpers = __commonJS({
"node_modules/call-bind-apply-helpers/index.js"(exports2, module2) {
"use strict";
var bind2 = require_function_bind();
var $TypeError = require_type();
var $call = require_functionCall();
var $actualApply = require_actualApply();
module2.exports = function callBindBasic(args) {
if (args.length < 1 || typeof args[0] !== "function") {
throw new $TypeError("a function is required");
}
return $actualApply(bind2, $call, args);
};
}
});
// node_modules/dunder-proto/get.js
var require_get = __commonJS({
"node_modules/dunder-proto/get.js"(exports2, module2) {
"use strict";
var callBind = require_call_bind_apply_helpers();
var gOPD = require_gopd();
var hasProtoAccessor;
try {
hasProtoAccessor = /** @type {{ __proto__?: typeof Array.prototype }} */
[].__proto__ === Array.prototype;
} catch (e) {
if (!e || typeof e !== "object" || !("code" in e) || e.code !== "ERR_PROTO_ACCESS") {
throw e;
}
}
var desc = !!hasProtoAccessor && gOPD && gOPD(
Object.prototype,
/** @type {keyof typeof Object.prototype} */
"__proto__"
);
var $Object = Object;
var $getPrototypeOf = $Object.getPrototypeOf;
module2.exports = desc && typeof desc.get === "function" ? callBind([desc.get]) : typeof $getPrototypeOf === "function" ? (
/** @type {import('./get')} */
function getDunder(value) {
return $getPrototypeOf(value == null ? value : $Object(value));
}
) : false;
}
});
// node_modules/get-proto/index.js
var require_get_proto = __commonJS({
"node_modules/get-proto/index.js"(exports2, module2) {
"use strict";
var reflectGetProto = require_Reflect_getPrototypeOf();
var originalGetProto = require_Object_getPrototypeOf();
var getDunderProto = require_get();
module2.exports = reflectGetProto ? function getProto(O) {
return reflectGetProto(O);
} : originalGetProto ? function getProto(O) {
if (!O || typeof O !== "object" && typeof O !== "function") {
throw new TypeError("getProto: not an object");
}
return originalGetProto(O);
} : getDunderProto ? function getProto(O) {
return getDunderProto(O);
} : null;
}
});
// node_modules/hasown/index.js
var require_hasown = __commonJS({
"node_modules/hasown/index.js"(exports2, module2) {
"use strict";
var call = Function.prototype.call;
var $hasOwn = Object.prototype.hasOwnProperty;
var bind2 = require_function_bind();
module2.exports = bind2.call(call, $hasOwn);
}
});
// node_modules/get-intrinsic/index.js
var require_get_intrinsic = __commonJS({
"node_modules/get-intrinsic/index.js"(exports2, module2) {
"use strict";
var undefined2;
var $Object = require_es_object_atoms();
var $Error = require_es_errors();
var $EvalError = require_eval();
var $RangeError = require_range();
var $ReferenceError = require_ref2();
var $SyntaxError = require_syntax();
var $TypeError = require_type();
var $URIError = require_uri();
var abs = require_abs();
var floor = require_floor();
var max = require_max();
var min = require_min();
var pow = require_pow();
var round = require_round();
var sign = require_sign();
var $Function = Function;
var getEvalledConstructor = function(expressionSyntax) {
try {
return $Function('"use strict"; return (' + expressionSyntax + ").constructor;")();
} catch (e) {
}
};
var $gOPD = require_gopd();
var $defineProperty = require_es_define_property();
var throwTypeError = function() {
throw new $TypeError();
};
var ThrowTypeError = $gOPD ? (function() {
try {
arguments.callee;
return throwTypeError;
} catch (calleeThrows) {
try {
return $gOPD(arguments, "callee").get;
} catch (gOPDthrows) {
return throwTypeError;
}
}
})() : throwTypeError;
var hasSymbols = require_has_symbols()();
var getProto = require_get_proto();
var $ObjectGPO = require_Object_getPrototypeOf();
var $ReflectGPO = require_Reflect_getPrototypeOf();
var $apply = require_functionApply();
var $call = require_functionCall();
var needsEval = {};
var TypedArray = typeof Uint8Array === "undefined" || !getProto ? undefined2 : getProto(Uint8Array);
var INTRINSICS = {
__proto__: null,
"%AggregateError%": typeof AggregateError === "undefined" ? undefined2 : AggregateError,
"%Array%": Array,
"%ArrayBuffer%": typeof ArrayBuffer === "undefined" ? undefined2 : ArrayBuffer,
"%ArrayIteratorPrototype%": hasSymbols && getProto ? getProto([][Symbol.iterator]()) : undefined2,
"%AsyncFromSyncIteratorPrototype%": undefined2,
"%AsyncFunction%": needsEval,
"%AsyncGenerator%": needsEval,
"%AsyncGeneratorFunction%": needsEval,
"%AsyncIteratorPrototype%": needsEval,
"%Atomics%": typeof Atomics === "undefined" ? undefined2 : Atomics,
"%BigInt%": typeof BigInt === "undefined" ? undefined2 : BigInt,
"%BigInt64Array%": typeof BigInt64Array === "undefined" ? undefined2 : BigInt64Array,
"%BigUint64Array%": typeof BigUint64Array === "undefined" ? undefined2 : BigUint64Array,
"%Boolean%": Boolean,
"%DataView%": typeof DataView === "undefined" ? undefined2 : DataView,
"%Date%": Date,
"%decodeURI%": decodeURI,
"%decodeURIComponent%": decodeURIComponent,
"%encodeURI%": encodeURI,
"%encodeURIComponent%": encodeURIComponent,
"%Error%": $Error,
"%eval%": eval,
// eslint-disable-line no-eval
"%EvalError%": $EvalError,
"%Float16Array%": typeof Float16Array === "undefined" ? undefined2 : Float16Array,
"%Float32Array%": typeof Float32Array === "undefined" ? undefined2 : Float32Array,
"%Float64Array%": typeof Float64Array === "undefined" ? undefined2 : Float64Array,
"%FinalizationRegistry%": typeof FinalizationRegistry === "undefined" ? undefined2 : FinalizationRegistry,
"%Function%": $Function,
"%GeneratorFunction%": needsEval,
"%Int8Array%": typeof Int8Array === "undefined" ? undefined2 : Int8Array,
"%Int16Array%": typeof Int16Array === "undefined" ? undefined2 : Int16Array,
"%Int32Array%": typeof Int32Array === "undefined" ? undefined2 : Int32Array,
"%isFinite%": isFinite,
"%isNaN%": isNaN,
"%IteratorPrototype%": hasSymbols && getProto ? getProto(getProto([][Symbol.iterator]())) : undefined2,
"%JSON%": typeof JSON === "object" ? JSON : undefined2,
"%Map%": typeof Map === "undefined" ? undefined2 : Map,
"%MapIteratorPrototype%": typeof Map === "undefined" || !hasSymbols || !getProto ? undefined2 : getProto((/* @__PURE__ */ new Map())[Symbol.iterator]()),
"%Math%": Math,
"%Number%": Number,
"%Object%": $Object,
"%Object.getOwnPropertyDescriptor%": $gOPD,
"%parseFloat%": parseFloat,
"%parseInt%": parseInt,
"%Promise%": typeof Promise === "undefined" ? undefined2 : Promise,
"%Proxy%": typeof Proxy === "undefined" ? undefined2 : Proxy,
"%RangeError%": $RangeError,
"%ReferenceError%": $ReferenceError,
"%Reflect%": typeof Reflect === "undefined" ? undefined2 : Reflect,
"%RegExp%": RegExp,
"%Set%": typeof Set === "undefined" ? undefined2 : Set,
"%SetIteratorPrototype%": typeof Set === "undefined" || !hasSymbols || !getProto ? undefined2 : getProto((/* @__PURE__ */ new Set())[Symbol.iterator]()),
"%SharedArrayBuffer%": typeof SharedArrayBuffer === "undefined" ? undefined2 : SharedArrayBuffer,
"%String%": String,
"%StringIteratorPrototype%": hasSymbols && getProto ? getProto(""[Symbol.iterator]()) : undefined2,
"%Symbol%": hasSymbols ? Symbol : undefined2,
"%SyntaxError%": $SyntaxError,
"%ThrowTypeError%": ThrowTypeError,
"%TypedArray%": TypedArray,
"%TypeError%": $TypeError,
"%Uint8Array%": typeof Uint8Array === "undefined" ? undefined2 : Uint8Array,
"%Uint8ClampedArray%": typeof Uint8ClampedArray === "undefined" ? undefined2 : Uint8ClampedArray,
"%Uint16Array%": typeof Uint16Array === "undefined" ? undefined2 : Uint16Array,
"%Uint32Array%": typeof Uint32Array === "undefined" ? undefined2 : Uint32Array,
"%URIError%": $URIError,
"%WeakMap%": typeof WeakMap === "undefined" ? undefined2 : WeakMap,
"%WeakRef%": typeof WeakRef === "undefined" ? undefined2 : WeakRef,
"%WeakSet%": typeof WeakSet === "undefined" ? undefined2 : WeakSet,
"%Function.prototype.call%": $call,
"%Function.prototype.apply%": $apply,
"%Object.defineProperty%": $defineProperty,
"%Object.getPrototypeOf%": $ObjectGPO,
"%Math.abs%": abs,
"%Math.floor%": floor,
"%Math.max%": max,
"%Math.min%": min,
"%Math.pow%": pow,
"%Math.round%": round,
"%Math.sign%": sign,
"%Reflect.getPrototypeOf%": $ReflectGPO
};
if (getProto) {
try {
null.error;
} catch (e) {
errorProto = getProto(getProto(e));
INTRINSICS["%Error.prototype%"] = errorProto;
}
}
var errorProto;
var doEval = function doEval2(name) {
var value;
if (name === "%AsyncFunction%") {
value = getEvalledConstructor("async function () {}");
} else if (name === "%GeneratorFunction%") {
value = getEvalledConstructor("function* () {}");
} else if (name === "%AsyncGeneratorFunction%") {
value = getEvalledConstructor("async function* () {}");
} else if (name === "%AsyncGenerator%") {
var fn = doEval2("%AsyncGeneratorFunction%");
if (fn) {
value = fn.prototype;
}
} else if (name === "%AsyncIteratorPrototype%") {
var gen = doEval2("%AsyncGenerator%");
if (gen && getProto) {
value = getProto(gen.prototype);
}
}
INTRINSICS[name] = value;
return value;
};
var LEGACY_ALIASES = {
__proto__: null,
"%ArrayBufferPrototype%": ["ArrayBuffer", "prototype"],
"%ArrayPrototype%": ["Array", "prototype"],
"%ArrayProto_entries%": ["Array", "prototype", "entries"],
"%ArrayProto_forEach%": ["Array", "prototype", "forEach"],
"%ArrayProto_keys%": ["Array", "prototype", "keys"],
"%ArrayProto_values%": ["Array", "prototype", "values"],
"%AsyncFunctionPrototype%": ["AsyncFunction", "prototype"],
"%AsyncGenerator%": ["AsyncGeneratorFunction", "prototype"],
"%AsyncGeneratorPrototype%": ["AsyncGeneratorFunction", "prototype", "prototype"],
"%BooleanPrototype%": ["Boolean", "prototype"],
"%DataViewPrototype%": ["DataView", "prototype"],
"%DatePrototype%": ["Date", "prototype"],
"%ErrorPrototype%": ["Error", "prototype"],
"%EvalErrorPrototype%": ["EvalError", "prototype"],
"%Float32ArrayPrototype%": ["Float32Array", "prototype"],
"%Float64ArrayPrototype%": ["Float64Array", "prototype"],
"%FunctionPrototype%": ["Function", "prototype"],
"%Generator%": ["GeneratorFunction", "prototype"],
"%GeneratorPrototype%": ["GeneratorFunction", "prototype", "prototype"],
"%Int8ArrayPrototype%": ["Int8Array", "prototype"],
"%Int16ArrayPrototype%": ["Int16Array", "prototype"],
"%Int32ArrayPrototype%": ["Int32Array", "prototype"],
"%JSONParse%": ["JSON", "parse"],
"%JSONStringify%": ["JSON", "stringify"],
"%MapPrototype%": ["Map", "prototype"],
"%NumberPrototype%": ["Number", "prototype"],
"%ObjectPrototype%": ["Object", "prototype"],
"%ObjProto_toString%": ["Object", "prototype", "toString"],
"%ObjProto_valueOf%": ["Object", "prototype", "valueOf"],
"%PromisePrototype%": ["Promise", "prototype"],
"%PromiseProto_then%": ["Promise", "prototype", "then"],
"%Promise_all%": ["Promise", "all"],
"%Promise_reject%": ["Promise", "reject"],
"%Promise_resolve%": ["Promise", "resolve"],
"%RangeErrorPrototype%": ["RangeError", "prototype"],
"%ReferenceErrorPrototype%": ["ReferenceError", "prototype"],
"%RegExpPrototype%": ["RegExp", "prototype"],
"%SetPrototype%": ["Set", "prototype"],
"%SharedArrayBufferPrototype%": ["SharedArrayBuffer", "prototype"],
"%StringPrototype%": ["String", "prototype"],
"%SymbolPrototype%": ["Symbol", "prototype"],
"%SyntaxErrorPrototype%": ["SyntaxError", "prototype"],
"%TypedArrayPrototype%": ["TypedArray", "prototype"],
"%TypeErrorPrototype%": ["TypeError", "prototype"],
"%Uint8ArrayPrototype%": ["Uint8Array", "prototype"],
"%Uint8ClampedArrayPrototype%": ["Uint8ClampedArray", "prototype"],
"%Uint16ArrayPrototype%": ["Uint16Array", "prototype"],
"%Uint32ArrayPrototype%": ["Uint32Array", "prototype"],
"%URIErrorPrototype%": ["URIError", "prototype"],
"%WeakMapPrototype%": ["WeakMap", "prototype"],
"%WeakSetPrototype%": ["WeakSet", "prototype"]
};
var bind2 = require_function_bind();
var hasOwn2 = require_hasown();
var $concat = bind2.call($call, Array.prototype.concat);
var $spliceApply = bind2.call($apply, Array.prototype.splice);
var $replace = bind2.call($call, String.prototype.replace);
var $strSlice = bind2.call($call, String.prototype.slice);
var $exec = bind2.call($call, RegExp.prototype.exec);
var rePropName = /[^%.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|%$))/g;
var reEscapeChar = /\\(\\)?/g;
var stringToPath = function stringToPath2(string) {
var first2 = $strSlice(string, 0, 1);
var last2 = $strSlice(string, -1);
if (first2 === "%" && last2 !== "%") {
throw new $SyntaxError("invalid intrinsic syntax, expected closing `%`");
} else if (last2 === "%" && first2 !== "%") {
throw new $SyntaxError("invalid intrinsic syntax, expected opening `%`");
}
var result = [];
$replace(string, rePropName, function(match, number, quote, subString) {
result[result.length] = quote ? $replace(subString, reEscapeChar, "$1") : number || match;
});
return result;
};
var getBaseIntrinsic = function getBaseIntrinsic2(name, allowMissing) {
var intrinsicName = name;
var alias;
if (hasOwn2(LEGACY_ALIASES, intrinsicName)) {
alias = LEGACY_ALIASES[intrinsicName];
intrinsicName = "%" + alias[0] + "%";
}
if (hasOwn2(INTRINSICS, intrinsicName)) {
var value = INTRINSICS[intrinsicName];
if (value === needsEval) {
value = doEval(intrinsicName);
}
if (typeof value === "undefined" && !allowMissing) {
throw new $TypeError("intrinsic " + name + " exists, but is not available. Please file an issue!");
}
return {
alias,
name: intrinsicName,
value
};
}
throw new $SyntaxError("intrinsic " + name + " does not exist!");
};
module2.exports = function GetIntrinsic(name, allowMissing) {
if (typeof name !== "string" || name.length === 0) {
throw new $TypeError("intrinsic name must be a non-empty string");
}
if (arguments.length > 1 && typeof allowMissing !== "boolean") {
throw new $TypeError('"allowMissing" argument must be a boolean');
}
if ($exec(/^%?[^%]*%?$/, name) === null) {
throw new $SyntaxError("`%` may not be present anywhere but at the beginning and end of the intrinsic name");
}
var parts = stringToPath(name);
var intrinsicBaseName = parts.length > 0 ? parts[0] : "";
var intrinsic = getBaseIntrinsic("%" + intrinsicBaseName + "%", allowMissing);
var intrinsicRealName = intrinsic.name;
var value = intrinsic.value;
var skipFurtherCaching = false;
var alias = intrinsic.alias;
if (alias) {
intrinsicBaseName = alias[0];
$spliceApply(parts, $concat([0, 1], alias));
}
for (var i = 1, isOwn = true; i < parts.length; i += 1) {
var part = parts[i];
var first2 = $strSlice(part, 0, 1);
var last2 = $strSlice(part, -1);
if ((first2 === '"' || first2 === "'" || first2 === "`" || (last2 === '"' || last2 === "'" || last2 === "`")) && first2 !== last2) {
throw new $SyntaxError("property names with quotes must have matching quotes");
}
if (part === "constructor" || !isOwn) {
skipFurtherCaching = true;
}
intrinsicBaseName += "." + part;
intrinsicRealName = "%" + intrinsicBaseName + "%";
if (hasOwn2(INTRINSICS, intrinsicRealName)) {
value = INTRINSICS[intrinsicRealName];
} else if (value != null) {
if (!(part in value)) {
if (!allowMissing) {
throw new $TypeError("base intrinsic for " + name + " exists, but the property is not available.");
}
return void undefined2;
}
if ($gOPD && i + 1 >= parts.length) {
var desc = $gOPD(value, part);
isOwn = !!desc;
if (isOwn && "get" in desc && !("originalValue" in desc.get)) {
value = desc.get;
} else {
value = value[part];
}
} else {
isOwn = hasOwn2(value, part);
value = value[part];
}
if (isOwn && !skipFurtherCaching) {
INTRINSICS[intrinsicRealName] = value;
}
}
}
return value;
};
}
});
// node_modules/has-tostringtag/shams.js
var require_shams2 = __commonJS({
"node_modules/has-tostringtag/shams.js"(exports2, module2) {
"use strict";
var hasSymbols = require_shams();
module2.exports = function hasToStringTagShams() {
return hasSymbols() && !!Symbol.toStringTag;
};
}
});
// node_modules/es-set-tostringtag/index.js
var require_es_set_tostringtag = __commonJS({
"node_modules/es-set-tostringtag/index.js"(exports2, module2) {
"use strict";
var GetIntrinsic = require_get_intrinsic();
var $defineProperty = GetIntrinsic("%Object.defineProperty%", true);
var hasToStringTag = require_shams2()();
var hasOwn2 = require_hasown();
var $TypeError = require_type();
var toStringTag = hasToStringTag ? Symbol.toStringTag : null;
module2.exports = function setToStringTag(object, value) {
var overrideIfSet = arguments.length > 2 && !!arguments[2] && arguments[2].force;
var nonConfigurable = arguments.length > 2 && !!arguments[2] && arguments[2].nonConfigurable;
if (typeof overrideIfSet !== "undefined" && typeof overrideIfSet !== "boolean" || typeof nonConfigurable !== "undefined" && typeof nonConfigurable !== "boolean") {
throw new $TypeError("if provided, the `overrideIfSet` and `nonConfigurable` options must be booleans");
}
if (toStringTag && (overrideIfSet || !hasOwn2(object, toStringTag))) {
if ($defineProperty) {
$defineProperty(object, toStringTag, {
configurable: !nonConfigurable,
enumerable: false,
value,
writable: false
});
} else {
object[toStringTag] = value;
}
}
};
}
});
// node_modules/form-data/lib/populate.js
var require_populate = __commonJS({
"node_modules/form-data/lib/populate.js"(exports2, module2) {
module2.exports = function(dst, src) {
Object.keys(src).forEach(function(prop2) {
dst[prop2] = dst[prop2] || src[prop2];
});
return dst;
};
}
});
// node_modules/form-data/lib/form_data.js
var require_form_data = __commonJS({
"node_modules/form-data/lib/form_data.js"(exports2, module2) {
var CombinedStream = require_combined_stream();
var util5 = require("util");
var path = require("path");
var http2 = require("http");
var https4 = require("https");
var parseUrl = require("url").parse;
var fs = require("fs");
var Stream = require("stream").Stream;
var mime = require_mime_types();
var asynckit = require_asynckit();
var setToStringTag = require_es_set_tostringtag();
var populate = require_populate();
module2.exports = FormData3;
util5.inherits(FormData3, CombinedStream);
function FormData3(options) {
if (!(this instanceof FormData3)) {
return new FormData3(options);
}
this._overheadLength = 0;
this._valueLength = 0;
this._valuesToMeasure = [];
CombinedStream.call(this);
options = options || {};
for (var option in options) {
this[option] = options[option];
}
}
FormData3.LINE_BREAK = "\r\n";
FormData3.DEFAULT_CONTENT_TYPE = "application/octet-stream";
FormData3.prototype.append = function(field, value, options) {
options = options || {};
if (typeof options == "string") {
options = { filename: options };
}
var append4 = CombinedStream.prototype.append.bind(this);
if (typeof value == "number") {
value = "" + value;
}
if (Array.isArray(value)) {
this._error(new Error("Arrays are not supported."));
return;
}
var header = this._multiPartHeader(field, value, options);
var footer = this._multiPartFooter();
append4(header);
append4(value);
append4(footer);
this._trackLength(header, value, options);
};
FormData3.prototype._trackLength = function(header, value, options) {
var valueLength = 0;
if (options.knownLength != null) {
valueLength += +options.knownLength;
} else if (Buffer.isBuffer(value)) {
valueLength = value.length;
} else if (typeof value === "string") {
valueLength = Buffer.byteLength(value);
}
this._valueLength += valueLength;
this._overheadLength += Buffer.byteLength(header) + FormData3.LINE_BREAK.length;
if (!value || !value.path && !(value.readable && Object.prototype.hasOwnProperty.call(value, "httpVersion")) && !(value instanceof Stream)) {
return;
}
if (!options.knownLength) {
this._valuesToMeasure.push(value);
}
};
FormData3.prototype._lengthRetriever = function(value, callback) {
if (Object.prototype.hasOwnProperty.call(value, "fd")) {
if (value.end != void 0 && value.end != Infinity && value.start != void 0) {
callback(null, value.end + 1 - (value.start ? value.start : 0));
} else {
fs.stat(value.path, function(err2, stat) {
var fileSize;
if (err2) {
callback(err2);
return;
}
fileSize = stat.size - (value.start ? value.start : 0);
callback(null, fileSize);
});
}
} else if (Object.prototype.hasOwnProperty.call(value, "httpVersion")) {
callback(null, +value.headers["content-length"]);
} else if (Object.prototype.hasOwnProperty.call(value, "httpModule")) {
value.on("response", function(response) {
value.pause();
callback(null, +response.headers["content-length"]);
});
value.resume();
} else {
callback("Unknown stream");
}
};
FormData3.prototype._multiPartHeader = function(field, value, options) {
if (typeof options.header == "string") {
return options.header;
}
var contentDisposition = this._getContentDisposition(value, options);
var contentType = this._getContentType(value, options);
var contents2 = "";
var headers = {
// add custom disposition as third element or keep it two elements if not
"Content-Disposition": ["form-data", 'name="' + field + '"'].concat(contentDisposition || []),
// if no content type. allow it to be empty array
"Content-Type": [].concat(contentType || [])
};
if (typeof options.header == "object") {
populate(headers, options.header);
}
var header;
for (var prop2 in headers) {
if (Object.prototype.hasOwnProperty.call(headers, prop2)) {
header = headers[prop2];
if (header == null) {
continue;
}
if (!Array.isArray(header)) {
header = [header];
}
if (header.length) {
contents2 += prop2 + ": " + header.join("; ") + FormData3.LINE_BREAK;
}
}
}
return "--" + this.getBoundary() + FormData3.LINE_BREAK + contents2 + FormData3.LINE_BREAK;
};
FormData3.prototype._getContentDisposition = function(value, options) {
var filename, contentDisposition;
if (typeof options.filepath === "string") {
filename = path.normalize(options.filepath).replace(/\\/g, "/");
} else if (options.filename || value.name || value.path) {
filename = path.basename(options.filename || value.name || value.path);
} else if (value.readable && Object.prototype.hasOwnProperty.call(value, "httpVersion")) {
filename = path.basename(value.client._httpMessage.path || "");
}
if (filename) {
contentDisposition = 'filename="' + filename + '"';
}
return contentDisposition;
};
FormData3.prototype._getContentType = function(value, options) {
var contentType = options.contentType;
if (!contentType && value.name) {
contentType = mime.lookup(value.name);
}
if (!contentType && value.path) {
contentType = mime.lookup(value.path);
}
if (!contentType && value.readable && Object.prototype.hasOwnProperty.call(value, "httpVersion")) {
contentType = value.headers["content-type"];
}
if (!contentType && (options.filepath || options.filename)) {
contentType = mime.lookup(options.filepath || options.filename);
}
if (!contentType && typeof value == "object") {
contentType = FormData3.DEFAULT_CONTENT_TYPE;
}
return contentType;
};
FormData3.prototype._multiPartFooter = function() {
return function(next2) {
var footer = FormData3.LINE_BREAK;
var lastPart = this._streams.length === 0;
if (lastPart) {
footer += this._lastBoundary();
}
next2(footer);
}.bind(this);
};
FormData3.prototype._lastBoundary = function() {
return "--" + this.getBoundary() + "--" + FormData3.LINE_BREAK;
};
FormData3.prototype.getHeaders = function(userHeaders) {
var header;
var formHeaders = {
"content-type": "multipart/form-data; boundary=" + this.getBoundary()
};
for (header in userHeaders) {
if (Object.prototype.hasOwnProperty.call(userHeaders, header)) {
formHeaders[header.toLowerCase()] = userHeaders[header];
}
}
return formHeaders;
};
FormData3.prototype.setBoundary = function(boundary) {
this._boundary = boundary;
};
FormData3.prototype.getBoundary = function() {
if (!this._boundary) {
this._generateBoundary();
}
return this._boundary;
};
FormData3.prototype.getBuffer = function() {
var dataBuffer = new Buffer.alloc(0);
var boundary = this.getBoundary();
for (var i = 0, len = this._streams.length; i < len; i++) {
if (typeof this._streams[i] !== "function") {
if (Buffer.isBuffer(this._streams[i])) {
dataBuffer = Buffer.concat([dataBuffer, this._streams[i]]);
} else {
dataBuffer = Buffer.concat([dataBuffer, Buffer.from(this._streams[i])]);
}
if (typeof this._streams[i] !== "string" || this._streams[i].substring(2, boundary.length + 2) !== boundary) {
dataBuffer = Buffer.concat([dataBuffer, Buffer.from(FormData3.LINE_BREAK)]);
}
}
}
return Buffer.concat([dataBuffer, Buffer.from(this._lastBoundary())]);
};
FormData3.prototype._generateBoundary = function() {
var boundary = "--------------------------";
for (var i = 0; i < 24; i++) {
boundary += Math.floor(Math.random() * 10).toString(16);
}
this._boundary = boundary;
};
FormData3.prototype.getLengthSync = function() {
var knownLength = this._overheadLength + this._valueLength;
if (this._streams.length) {
knownLength += this._lastBoundary().length;
}
if (!this.hasKnownLength()) {
this._error(new Error("Cannot calculate proper length in synchronous way."));
}
return knownLength;
};
FormData3.prototype.hasKnownLength = function() {
var hasKnownLength = true;
if (this._valuesToMeasure.length) {
hasKnownLength = false;
}
return hasKnownLength;
};
FormData3.prototype.getLength = function(cb) {
var knownLength = this._overheadLength + this._valueLength;
if (this._streams.length) {
knownLength += this._lastBoundary().length;
}
if (!this._valuesToMeasure.length) {
process.nextTick(cb.bind(this, null, knownLength));
return;
}
asynckit.parallel(this._valuesToMeasure, this._lengthRetriever, function(err2, values) {
if (err2) {
cb(err2);
return;
}
values.forEach(function(length) {
knownLength += length;
});
cb(null, knownLength);
});
};
FormData3.prototype.submit = function(params, cb) {
var request, options, defaults2 = { method: "post" };
if (typeof params == "string") {
params = parseUrl(params);
options = populate({
port: params.port,
path: params.pathname,
host: params.hostname,
protocol: params.protocol
}, defaults2);
} else {
options = populate(params, defaults2);
if (!options.port) {
options.port = options.protocol == "https:" ? 443 : 80;
}
}
options.headers = this.getHeaders(params.headers);
if (options.protocol == "https:") {
request = https4.request(options);
} else {
request = http2.request(options);
}
this.getLength(function(err2, length) {
if (err2 && err2 !== "Unknown stream") {
this._error(err2);
return;
}
if (length) {
request.setHeader("Content-Length", length);
}
this.pipe(request);
if (cb) {
var onResponse;
var callback = function(error, responce) {
request.removeListener("error", callback);
request.removeListener("response", onResponse);
return cb.call(this, error, responce);
};
onResponse = callback.bind(this, null);
request.on("error", callback);
request.on("response", onResponse);
}
}.bind(this));
return request;
};
FormData3.prototype._error = function(err2) {
if (!this.error) {
this.error = err2;
this.pause();
this.emit("error", err2);
}
};
FormData3.prototype.toString = function() {
return "[object FormData]";
};
setToStringTag(FormData3, "FormData");
}
});
// node_modules/axios/lib/platform/node/classes/FormData.js
var import_form_data, FormData_default;
var init_FormData = __esm({
"node_modules/axios/lib/platform/node/classes/FormData.js"() {
import_form_data = __toESM(require_form_data(), 1);
FormData_default = import_form_data.default;
}
});
// node_modules/axios/lib/helpers/toFormData.js
function isVisitable(thing) {
return utils_default.isPlainObject(thing) || utils_default.isArray(thing);
}
function removeBrackets(key) {
return utils_default.endsWith(key, "[]") ? key.slice(0, -2) : key;
}
function renderKey(path, key, dots) {
if (!path) return key;
return path.concat(key).map(function each2(token, i) {
token = removeBrackets(token);
return !dots && i ? "[" + token + "]" : token;
}).join(dots ? "." : "");
}
function isFlatArray(arr) {
return utils_default.isArray(arr) && !arr.some(isVisitable);
}
function toFormData(obj, formData, options) {
if (!utils_default.isObject(obj)) {
throw new TypeError("target must be an object");
}
formData = formData || new (FormData_default || FormData)();
options = utils_default.toFlatObject(options, {
metaTokens: true,
dots: false,
indexes: false
}, false, function defined(option, source) {
return !utils_default.isUndefined(source[option]);
});
const metaTokens = options.metaTokens;
const visitor = options.visitor || defaultVisitor;
const dots = options.dots;
const indexes = options.indexes;
const _Blob = options.Blob || typeof Blob !== "undefined" && Blob;
const useBlob = _Blob && utils_default.isSpecCompliantForm(formData);
if (!utils_default.isFunction(visitor)) {
throw new TypeError("visitor must be a function");
}
function convertValue(value) {
if (value === null) return "";
if (utils_default.isDate(value)) {
return value.toISOString();
}
if (!useBlob && utils_default.isBlob(value)) {
throw new AxiosError_default("Blob is not supported. Use a Buffer instead.");
}
if (utils_default.isArrayBuffer(value) || utils_default.isTypedArray(value)) {
return useBlob && typeof Blob === "function" ? new Blob([value]) : Buffer.from(value);
}
return value;
}
function defaultVisitor(value, key, path) {
let arr = value;
if (value && !path && typeof value === "object") {
if (utils_default.endsWith(key, "{}")) {
key = metaTokens ? key : key.slice(0, -2);
value = JSON.stringify(value);
} else if (utils_default.isArray(value) && isFlatArray(value) || (utils_default.isFileList(value) || utils_default.endsWith(key, "[]")) && (arr = utils_default.toArray(value))) {
key = removeBrackets(key);
arr.forEach(function each2(el, index2) {
!(utils_default.isUndefined(el) || el === null) && formData.append(
// eslint-disable-next-line no-nested-ternary
indexes === true ? renderKey([key], index2, dots) : indexes === null ? key : key + "[]",
convertValue(el)
);
});
return false;
}
}
if (isVisitable(value)) {
return true;
}
formData.append(renderKey(path, key, dots), convertValue(value));
return false;
}
const stack = [];
const exposedHelpers = Object.assign(predicates, {
defaultVisitor,
convertValue,
isVisitable
});
function build(value, path) {
if (utils_default.isUndefined(value)) return;
if (stack.indexOf(value) !== -1) {
throw Error("Circular reference detected in " + path.join("."));
}
stack.push(value);
utils_default.forEach(value, function each2(el, key) {
const result = !(utils_default.isUndefined(el) || el === null) && visitor.call(
formData,
el,
utils_default.isString(key) ? key.trim() : key,
path,
exposedHelpers
);
if (result === true) {
build(el, path ? path.concat(key) : [key]);
}
});
stack.pop();
}
if (!utils_default.isObject(obj)) {
throw new TypeError("data must be an object");
}
build(obj);
return formData;
}
var predicates, toFormData_default;
var init_toFormData = __esm({
"node_modules/axios/lib/helpers/toFormData.js"() {
"use strict";
init_utils();
init_AxiosError();
init_FormData();
predicates = utils_default.toFlatObject(utils_default, {}, null, function filter(prop2) {
return /^is[A-Z]/.test(prop2);
});
toFormData_default = toFormData;
}
});
// node_modules/axios/lib/helpers/AxiosURLSearchParams.js
function encode(str) {
const charMap = {
"!": "%21",
"'": "%27",
"(": "%28",
")": "%29",
"~": "%7E",
"%20": "+",
"%00": "\0"
};
return encodeURIComponent(str).replace(/[!'()~]|%20|%00/g, function replacer(match) {
return charMap[match];
});
}
function AxiosURLSearchParams(params, options) {
this._pairs = [];
params && toFormData_default(params, this, options);
}
var prototype2, AxiosURLSearchParams_default;
var init_AxiosURLSearchParams = __esm({
"node_modules/axios/lib/helpers/AxiosURLSearchParams.js"() {
"use strict";
init_toFormData();
prototype2 = AxiosURLSearchParams.prototype;
prototype2.append = function append(name, value) {
this._pairs.push([name, value]);
};
prototype2.toString = function toString2(encoder) {
const _encode = encoder ? function(value) {
return encoder.call(this, value, encode);
} : encode;
return this._pairs.map(function each2(pair) {
return _encode(pair[0]) + "=" + _encode(pair[1]);
}, "").join("&");
};
AxiosURLSearchParams_default = AxiosURLSearchParams;
}
});
// node_modules/axios/lib/helpers/buildURL.js
function encode2(val2) {
return encodeURIComponent(val2).replace(/%3A/gi, ":").replace(/%24/g, "$").replace(/%2C/gi, ",").replace(/%20/g, "+").replace(/%5B/gi, "[").replace(/%5D/gi, "]");
}
function buildURL(url2, params, options) {
if (!params) {
return url2;
}
const _encode = options && options.encode || encode2;
if (utils_default.isFunction(options)) {
options = {
serialize: options
};
}
const serializeFn = options && options.serialize;
let serializedParams;
if (serializeFn) {
serializedParams = serializeFn(params, options);
} else {
serializedParams = utils_default.isURLSearchParams(params) ? params.toString() : new AxiosURLSearchParams_default(params, options).toString(_encode);
}
if (serializedParams) {
const hashmarkIndex = url2.indexOf("#");
if (hashmarkIndex !== -1) {
url2 = url2.slice(0, hashmarkIndex);
}
url2 += (url2.indexOf("?") === -1 ? "?" : "&") + serializedParams;
}
return url2;
}
var init_buildURL = __esm({
"node_modules/axios/lib/helpers/buildURL.js"() {
"use strict";
init_utils();
init_AxiosURLSearchParams();
}
});
// node_modules/axios/lib/core/InterceptorManager.js
var InterceptorManager, InterceptorManager_default;
var init_InterceptorManager = __esm({
"node_modules/axios/lib/core/InterceptorManager.js"() {
"use strict";
init_utils();
InterceptorManager = class {
constructor() {
this.handlers = [];
}
/**
* Add a new interceptor to the stack
*
* @param {Function} fulfilled The function to handle `then` for a `Promise`
* @param {Function} rejected The function to handle `reject` for a `Promise`
*
* @return {Number} An ID used to remove interceptor later
*/
use(fulfilled, rejected, options) {
this.handlers.push({
fulfilled,
rejected,
synchronous: options ? options.synchronous : false,
runWhen: options ? options.runWhen : null
});
return this.handlers.length - 1;
}
/**
* Remove an interceptor from the stack
*
* @param {Number} id The ID that was returned by `use`
*
* @returns {Boolean} `true` if the interceptor was removed, `false` otherwise
*/
eject(id) {
if (this.handlers[id]) {
this.handlers[id] = null;
}
}
/**
* Clear all interceptors from the stack
*
* @returns {void}
*/
clear() {
if (this.handlers) {
this.handlers = [];
}
}
/**
* Iterate over all the registered interceptors
*
* This method is particularly useful for skipping over any
* interceptors that may have become `null` calling `eject`.
*
* @param {Function} fn The function to call for each interceptor
*
* @returns {void}
*/
forEach(fn) {
utils_default.forEach(this.handlers, function forEachHandler(h) {
if (h !== null) {
fn(h);
}
});
}
};
InterceptorManager_default = InterceptorManager;
}
});
// node_modules/axios/lib/defaults/transitional.js
var transitional_default;
var init_transitional = __esm({
"node_modules/axios/lib/defaults/transitional.js"() {
"use strict";
transitional_default = {
silentJSONParsing: true,
forcedJSONParsing: true,
clarifyTimeoutError: false
};
}
});
// node_modules/axios/lib/platform/node/classes/URLSearchParams.js
var import_url, URLSearchParams_default;
var init_URLSearchParams = __esm({
"node_modules/axios/lib/platform/node/classes/URLSearchParams.js"() {
"use strict";
import_url = __toESM(require("url"), 1);
URLSearchParams_default = import_url.default.URLSearchParams;
}
});
// node_modules/axios/lib/platform/node/index.js
var import_crypto, ALPHA, DIGIT, ALPHABET, generateString, node_default;
var init_node = __esm({
"node_modules/axios/lib/platform/node/index.js"() {
import_crypto = __toESM(require("crypto"), 1);
init_URLSearchParams();
init_FormData();
ALPHA = "abcdefghijklmnopqrstuvwxyz";
DIGIT = "0123456789";
ALPHABET = {
DIGIT,
ALPHA,
ALPHA_DIGIT: ALPHA + ALPHA.toUpperCase() + DIGIT
};
generateString = (size = 16, alphabet = ALPHABET.ALPHA_DIGIT) => {
let str = "";
const { length } = alphabet;
const randomValues = new Uint32Array(size);
import_crypto.default.randomFillSync(randomValues);
for (let i = 0; i < size; i++) {
str += alphabet[randomValues[i] % length];
}
return str;
};
node_default = {
isNode: true,
classes: {
URLSearchParams: URLSearchParams_default,
FormData: FormData_default,
Blob: typeof Blob !== "undefined" && Blob || null
},
ALPHABET,
generateString,
protocols: ["http", "https", "file", "data"]
};
}
});
// node_modules/axios/lib/platform/common/utils.js
var utils_exports = {};
__export(utils_exports, {
hasBrowserEnv: () => hasBrowserEnv,
hasStandardBrowserEnv: () => hasStandardBrowserEnv,
hasStandardBrowserWebWorkerEnv: () => hasStandardBrowserWebWorkerEnv,
navigator: () => _navigator,
origin: () => origin
});
var hasBrowserEnv, _navigator, hasStandardBrowserEnv, hasStandardBrowserWebWorkerEnv, origin;
var init_utils2 = __esm({
"node_modules/axios/lib/platform/common/utils.js"() {
hasBrowserEnv = typeof window !== "undefined" && typeof document !== "undefined";
_navigator = typeof navigator === "object" && navigator || void 0;
hasStandardBrowserEnv = hasBrowserEnv && (!_navigator || ["ReactNative", "NativeScript", "NS"].indexOf(_navigator.product) < 0);
hasStandardBrowserWebWorkerEnv = (() => {
return typeof WorkerGlobalScope !== "undefined" && // eslint-disable-next-line no-undef
self instanceof WorkerGlobalScope && typeof self.importScripts === "function";
})();
origin = hasBrowserEnv && window.location.href || "http://localhost";
}
});
// node_modules/axios/lib/platform/index.js
var platform_default;
var init_platform = __esm({
"node_modules/axios/lib/platform/index.js"() {
init_node();
init_utils2();
platform_default = {
...utils_exports,
...node_default
};
}
});
// node_modules/axios/lib/helpers/toURLEncodedForm.js
function toURLEncodedForm(data2, options) {
return toFormData_default(data2, new platform_default.classes.URLSearchParams(), Object.assign({
visitor: function(value, key, path, helpers) {
if (platform_default.isNode && utils_default.isBuffer(value)) {
this.append(key, value.toString("base64"));
return false;
}
return helpers.defaultVisitor.apply(this, arguments);
}
}, options));
}
var init_toURLEncodedForm = __esm({
"node_modules/axios/lib/helpers/toURLEncodedForm.js"() {
"use strict";
init_utils();
init_toFormData();
init_platform();
}
});
// node_modules/axios/lib/helpers/formDataToJSON.js
function parsePropPath(name) {
return utils_default.matchAll(/\w+|\[(\w*)]/g, name).map((match) => {
return match[0] === "[]" ? "" : match[1] || match[0];
});
}
function arrayToObject(arr) {
const obj = {};
const keys = Object.keys(arr);
let i;
const len = keys.length;
let key;
for (i = 0; i < len; i++) {
key = keys[i];
obj[key] = arr[key];
}
return obj;
}
function formDataToJSON(formData) {
function buildPath(path, value, target, index2) {
let name = path[index2++];
if (name === "__proto__") return true;
const isNumericKey = Number.isFinite(+name);
const isLast = index2 >= path.length;
name = !name && utils_default.isArray(target) ? target.length : name;
if (isLast) {
if (utils_default.hasOwnProp(target, name)) {
target[name] = [target[name], value];
} else {
target[name] = value;
}
return !isNumericKey;
}
if (!target[name] || !utils_default.isObject(target[name])) {
target[name] = [];
}
const result = buildPath(path, value, target[name], index2);
if (result && utils_default.isArray(target[name])) {
target[name] = arrayToObject(target[name]);
}
return !isNumericKey;
}
if (utils_default.isFormData(formData) && utils_default.isFunction(formData.entries)) {
const obj = {};
utils_default.forEachEntry(formData, (name, value) => {
buildPath(parsePropPath(name), value, obj, 0);
});
return obj;
}
return null;
}
var formDataToJSON_default;
var init_formDataToJSON = __esm({
"node_modules/axios/lib/helpers/formDataToJSON.js"() {
"use strict";
init_utils();
formDataToJSON_default = formDataToJSON;
}
});
// node_modules/axios/lib/defaults/index.js
function stringifySafely(rawValue, parser, encoder) {
if (utils_default.isString(rawValue)) {
try {
(parser || JSON.parse)(rawValue);
return utils_default.trim(rawValue);
} catch (e) {
if (e.name !== "SyntaxError") {
throw e;
}
}
}
return (encoder || JSON.stringify)(rawValue);
}
var defaults, defaults_default;
var init_defaults = __esm({
"node_modules/axios/lib/defaults/index.js"() {
"use strict";
init_utils();
init_AxiosError();
init_transitional();
init_toFormData();
init_toURLEncodedForm();
init_platform();
init_formDataToJSON();
defaults = {
transitional: transitional_default,
adapter: ["xhr", "http", "fetch"],
transformRequest: [function transformRequest(data2, headers) {
const contentType = headers.getContentType() || "";
const hasJSONContentType = contentType.indexOf("application/json") > -1;
const isObjectPayload = utils_default.isObject(data2);
if (isObjectPayload && utils_default.isHTMLForm(data2)) {
data2 = new FormData(data2);
}
const isFormData2 = utils_default.isFormData(data2);
if (isFormData2) {
return hasJSONContentType ? JSON.stringify(formDataToJSON_default(data2)) : data2;
}
if (utils_default.isArrayBuffer(data2) || utils_default.isBuffer(data2) || utils_default.isStream(data2) || utils_default.isFile(data2) || utils_default.isBlob(data2) || utils_default.isReadableStream(data2)) {
return data2;
}
if (utils_default.isArrayBufferView(data2)) {
return data2.buffer;
}
if (utils_default.isURLSearchParams(data2)) {
headers.setContentType("application/x-www-form-urlencoded;charset=utf-8", false);
return data2.toString();
}
let isFileList2;
if (isObjectPayload) {
if (contentType.indexOf("application/x-www-form-urlencoded") > -1) {
return toURLEncodedForm(data2, this.formSerializer).toString();
}
if ((isFileList2 = utils_default.isFileList(data2)) || contentType.indexOf("multipart/form-data") > -1) {
const _FormData = this.env && this.env.FormData;
return toFormData_default(
isFileList2 ? { "files[]": data2 } : data2,
_FormData && new _FormData(),
this.formSerializer
);
}
}
if (isObjectPayload || hasJSONContentType) {
headers.setContentType("application/json", false);
return stringifySafely(data2);
}
return data2;
}],
transformResponse: [function transformResponse(data2) {
const transitional2 = this.transitional || defaults.transitional;
const forcedJSONParsing = transitional2 && transitional2.forcedJSONParsing;
const JSONRequested = this.responseType === "json";
if (utils_default.isResponse(data2) || utils_default.isReadableStream(data2)) {
return data2;
}
if (data2 && utils_default.isString(data2) && (forcedJSONParsing && !this.responseType || JSONRequested)) {
const silentJSONParsing = transitional2 && transitional2.silentJSONParsing;
const strictJSONParsing = !silentJSONParsing && JSONRequested;
try {
return JSON.parse(data2);
} catch (e) {
if (strictJSONParsing) {
if (e.name === "SyntaxError") {
throw AxiosError_default.from(e, AxiosError_default.ERR_BAD_RESPONSE, this, null, this.response);
}
throw e;
}
}
}
return data2;
}],
/**
* A timeout in milliseconds to abort a request. If set to 0 (default) a
* timeout is not created.
*/
timeout: 0,
xsrfCookieName: "XSRF-TOKEN",
xsrfHeaderName: "X-XSRF-TOKEN",
maxContentLength: -1,
maxBodyLength: -1,
env: {
FormData: platform_default.classes.FormData,
Blob: platform_default.classes.Blob
},
validateStatus: function validateStatus(status) {
return status >= 200 && status < 300;
},
headers: {
common: {
"Accept": "application/json, text/plain, */*",
"Content-Type": void 0
}
}
};
utils_default.forEach(["delete", "get", "head", "post", "put", "patch"], (method) => {
defaults.headers[method] = {};
});
defaults_default = defaults;
}
});
// node_modules/axios/lib/helpers/parseHeaders.js
var ignoreDuplicateOf, parseHeaders_default;
var init_parseHeaders = __esm({
"node_modules/axios/lib/helpers/parseHeaders.js"() {
"use strict";
init_utils();
ignoreDuplicateOf = utils_default.toObjectSet([
"age",
"authorization",
"content-length",
"content-type",
"etag",
"expires",
"from",
"host",
"if-modified-since",
"if-unmodified-since",
"last-modified",
"location",
"max-forwards",
"proxy-authorization",
"referer",
"retry-after",
"user-agent"
]);
parseHeaders_default = (rawHeaders) => {
const parsed = {};
let key;
let val2;
let i;
rawHeaders && rawHeaders.split("\n").forEach(function parser(line) {
i = line.indexOf(":");
key = line.substring(0, i).trim().toLowerCase();
val2 = line.substring(i + 1).trim();
if (!key || parsed[key] && ignoreDuplicateOf[key]) {
return;
}
if (key === "set-cookie") {
if (parsed[key]) {
parsed[key].push(val2);
} else {
parsed[key] = [val2];
}
} else {
parsed[key] = parsed[key] ? parsed[key] + ", " + val2 : val2;
}
});
return parsed;
};
}
});
// node_modules/axios/lib/core/AxiosHeaders.js
function normalizeHeader(header) {
return header && String(header).trim().toLowerCase();
}
function normalizeValue(value) {
if (value === false || value == null) {
return value;
}
return utils_default.isArray(value) ? value.map(normalizeValue) : String(value);
}
function parseTokens(str) {
const tokens = /* @__PURE__ */ Object.create(null);
const tokensRE = /([^\s,;=]+)\s*(?:=\s*([^,;]+))?/g;
let match;
while (match = tokensRE.exec(str)) {
tokens[match[1]] = match[2];
}
return tokens;
}
function matchHeaderValue(context, value, header, filter5, isHeaderNameFilter) {
if (utils_default.isFunction(filter5)) {
return filter5.call(this, value, header);
}
if (isHeaderNameFilter) {
value = header;
}
if (!utils_default.isString(value)) return;
if (utils_default.isString(filter5)) {
return value.indexOf(filter5) !== -1;
}
if (utils_default.isRegExp(filter5)) {
return filter5.test(value);
}
}
function formatHeader(header) {
return header.trim().toLowerCase().replace(/([a-z\d])(\w*)/g, (w, char, str) => {
return char.toUpperCase() + str;
});
}
function buildAccessors(obj, header) {
const accessorName = utils_default.toCamelCase(" " + header);
["get", "set", "has"].forEach((methodName) => {
Object.defineProperty(obj, methodName + accessorName, {
value: function(arg1, arg2, arg3) {
return this[methodName].call(this, header, arg1, arg2, arg3);
},
configurable: true
});
});
}
var $internals, isValidHeaderName, AxiosHeaders, AxiosHeaders_default;
var init_AxiosHeaders = __esm({
"node_modules/axios/lib/core/AxiosHeaders.js"() {
"use strict";
init_utils();
init_parseHeaders();
$internals = Symbol("internals");
isValidHeaderName = (str) => /^[-_a-zA-Z0-9^`|~,!#$%&'*+.]+$/.test(str.trim());
AxiosHeaders = class {
constructor(headers) {
headers && this.set(headers);
}
set(header, valueOrRewrite, rewrite) {
const self2 = this;
function setHeader(_value, _header, _rewrite) {
const lHeader = normalizeHeader(_header);
if (!lHeader) {
throw new Error("header name must be a non-empty string");
}
const key = utils_default.findKey(self2, lHeader);
if (!key || self2[key] === void 0 || _rewrite === true || _rewrite === void 0 && self2[key] !== false) {
self2[key || _header] = normalizeValue(_value);
}
}
const setHeaders = (headers, _rewrite) => utils_default.forEach(headers, (_value, _header) => setHeader(_value, _header, _rewrite));
if (utils_default.isPlainObject(header) || header instanceof this.constructor) {
setHeaders(header, valueOrRewrite);
} else if (utils_default.isString(header) && (header = header.trim()) && !isValidHeaderName(header)) {
setHeaders(parseHeaders_default(header), valueOrRewrite);
} else if (utils_default.isHeaders(header)) {
for (const [key, value] of header.entries()) {
setHeader(value, key, rewrite);
}
} else {
header != null && setHeader(valueOrRewrite, header, rewrite);
}
return this;
}
get(header, parser) {
header = normalizeHeader(header);
if (header) {
const key = utils_default.findKey(this, header);
if (key) {
const value = this[key];
if (!parser) {
return value;
}
if (parser === true) {
return parseTokens(value);
}
if (utils_default.isFunction(parser)) {
return parser.call(this, value, key);
}
if (utils_default.isRegExp(parser)) {
return parser.exec(value);
}
throw new TypeError("parser must be boolean|regexp|function");
}
}
}
has(header, matcher) {
header = normalizeHeader(header);
if (header) {
const key = utils_default.findKey(this, header);
return !!(key && this[key] !== void 0 && (!matcher || matchHeaderValue(this, this[key], key, matcher)));
}
return false;
}
delete(header, matcher) {
const self2 = this;
let deleted = false;
function deleteHeader(_header) {
_header = normalizeHeader(_header);
if (_header) {
const key = utils_default.findKey(self2, _header);
if (key && (!matcher || matchHeaderValue(self2, self2[key], key, matcher))) {
delete self2[key];
deleted = true;
}
}
}
if (utils_default.isArray(header)) {
header.forEach(deleteHeader);
} else {
deleteHeader(header);
}
return deleted;
}
clear(matcher) {
const keys = Object.keys(this);
let i = keys.length;
let deleted = false;
while (i--) {
const key = keys[i];
if (!matcher || matchHeaderValue(this, this[key], key, matcher, true)) {
delete this[key];
deleted = true;
}
}
return deleted;
}
normalize(format) {
const self2 = this;
const headers = {};
utils_default.forEach(this, (value, header) => {
const key = utils_default.findKey(headers, header);
if (key) {
self2[key] = normalizeValue(value);
delete self2[header];
return;
}
const normalized = format ? formatHeader(header) : String(header).trim();
if (normalized !== header) {
delete self2[header];
}
self2[normalized] = normalizeValue(value);
headers[normalized] = true;
});
return this;
}
concat(...targets) {
return this.constructor.concat(this, ...targets);
}
toJSON(asStrings) {
const obj = /* @__PURE__ */ Object.create(null);
utils_default.forEach(this, (value, header) => {
value != null && value !== false && (obj[header] = asStrings && utils_default.isArray(value) ? value.join(", ") : value);
});
return obj;
}
[Symbol.iterator]() {
return Object.entries(this.toJSON())[Symbol.iterator]();
}
toString() {
return Object.entries(this.toJSON()).map(([header, value]) => header + ": " + value).join("\n");
}
get [Symbol.toStringTag]() {
return "AxiosHeaders";
}
static from(thing) {
return thing instanceof this ? thing : new this(thing);
}
static concat(first2, ...targets) {
const computed = new this(first2);
targets.forEach((target) => computed.set(target));
return computed;
}
static accessor(header) {
const internals = this[$internals] = this[$internals] = {
accessors: {}
};
const accessors = internals.accessors;
const prototype3 = this.prototype;
function defineAccessor(_header) {
const lHeader = normalizeHeader(_header);
if (!accessors[lHeader]) {
buildAccessors(prototype3, _header);
accessors[lHeader] = true;
}
}
utils_default.isArray(header) ? header.forEach(defineAccessor) : defineAccessor(header);
return this;
}
};
AxiosHeaders.accessor(["Content-Type", "Content-Length", "Accept", "Accept-Encoding", "User-Agent", "Authorization"]);
utils_default.reduceDescriptors(AxiosHeaders.prototype, ({ value }, key) => {
let mapped = key[0].toUpperCase() + key.slice(1);
return {
get: () => value,
set(headerValue) {
this[mapped] = headerValue;
}
};
});
utils_default.freezeMethods(AxiosHeaders);
AxiosHeaders_default = AxiosHeaders;
}
});
// node_modules/axios/lib/core/transformData.js
function transformData(fns, response) {
const config = this || defaults_default;
const context = response || config;
const headers = AxiosHeaders_default.from(context.headers);
let data2 = context.data;
utils_default.forEach(fns, function transform(fn) {
data2 = fn.call(config, data2, headers.normalize(), response ? response.status : void 0);
});
headers.normalize();
return data2;
}
var init_transformData = __esm({
"node_modules/axios/lib/core/transformData.js"() {
"use strict";
init_utils();
init_defaults();
init_AxiosHeaders();
}
});
// node_modules/axios/lib/cancel/isCancel.js
function isCancel(value) {
return !!(value && value.__CANCEL__);
}
var init_isCancel = __esm({
"node_modules/axios/lib/cancel/isCancel.js"() {
"use strict";
}
});
// node_modules/axios/lib/cancel/CanceledError.js
function CanceledError(message, config, request) {
AxiosError_default.call(this, message == null ? "canceled" : message, AxiosError_default.ERR_CANCELED, config, request);
this.name = "CanceledError";
}
var CanceledError_default;
var init_CanceledError = __esm({
"node_modules/axios/lib/cancel/CanceledError.js"() {
"use strict";
init_AxiosError();
init_utils();
utils_default.inherits(CanceledError, AxiosError_default, {
__CANCEL__: true
});
CanceledError_default = CanceledError;
}
});
// node_modules/axios/lib/core/settle.js
function settle(resolve, reject, response) {
const validateStatus2 = response.config.validateStatus;
if (!response.status || !validateStatus2 || validateStatus2(response.status)) {
resolve(response);
} else {
reject(new AxiosError_default(
"Request failed with status code " + response.status,
[AxiosError_default.ERR_BAD_REQUEST, AxiosError_default.ERR_BAD_RESPONSE][Math.floor(response.status / 100) - 4],
response.config,
response.request,
response
));
}
}
var init_settle = __esm({
"node_modules/axios/lib/core/settle.js"() {
"use strict";
init_AxiosError();
}
});
// node_modules/axios/lib/helpers/isAbsoluteURL.js
function isAbsoluteURL(url2) {
return /^([a-z][a-z\d+\-.]*:)?\/\//i.test(url2);
}
var init_isAbsoluteURL = __esm({
"node_modules/axios/lib/helpers/isAbsoluteURL.js"() {
"use strict";
}
});
// node_modules/axios/lib/helpers/combineURLs.js
function combineURLs(baseURL, relativeURL) {
return relativeURL ? baseURL.replace(/\/?\/$/, "") + "/" + relativeURL.replace(/^\/+/, "") : baseURL;
}
var init_combineURLs = __esm({
"node_modules/axios/lib/helpers/combineURLs.js"() {
"use strict";
}
});
// node_modules/axios/lib/core/buildFullPath.js
function buildFullPath(baseURL, requestedURL, allowAbsoluteUrls) {
let isRelativeUrl = !isAbsoluteURL(requestedURL);
if (baseURL && (isRelativeUrl || allowAbsoluteUrls == false)) {
return combineURLs(baseURL, requestedURL);
}
return requestedURL;
}
var init_buildFullPath = __esm({
"node_modules/axios/lib/core/buildFullPath.js"() {
"use strict";
init_isAbsoluteURL();
init_combineURLs();
}
});
// node_modules/proxy-from-env/index.js
var require_proxy_from_env = __commonJS({
"node_modules/proxy-from-env/index.js"(exports2) {
"use strict";
var parseUrl = require("url").parse;
var DEFAULT_PORTS = {
ftp: 21,
gopher: 70,
http: 80,
https: 443,
ws: 80,
wss: 443
};
var stringEndsWith = String.prototype.endsWith || function(s) {
return s.length <= this.length && this.indexOf(s, this.length - s.length) !== -1;
};
function getProxyForUrl(url2) {
var parsedUrl = typeof url2 === "string" ? parseUrl(url2) : url2 || {};
var proto = parsedUrl.protocol;
var hostname = parsedUrl.host;
var port = parsedUrl.port;
if (typeof hostname !== "string" || !hostname || typeof proto !== "string") {
return "";
}
proto = proto.split(":", 1)[0];
hostname = hostname.replace(/:\d*$/, "");
port = parseInt(port) || DEFAULT_PORTS[proto] || 0;
if (!shouldProxy(hostname, port)) {
return "";
}
var proxy = getEnv("npm_config_" + proto + "_proxy") || getEnv(proto + "_proxy") || getEnv("npm_config_proxy") || getEnv("all_proxy");
if (proxy && proxy.indexOf("://") === -1) {
proxy = proto + "://" + proxy;
}
return proxy;
}
function shouldProxy(hostname, port) {
var NO_PROXY = (getEnv("npm_config_no_proxy") || getEnv("no_proxy")).toLowerCase();
if (!NO_PROXY) {
return true;
}
if (NO_PROXY === "*") {
return false;
}
return NO_PROXY.split(/[,\s]/).every(function(proxy) {
if (!proxy) {
return true;
}
var parsedProxy = proxy.match(/^(.+):(\d+)$/);
var parsedProxyHostname = parsedProxy ? parsedProxy[1] : proxy;
var parsedProxyPort = parsedProxy ? parseInt(parsedProxy[2]) : 0;
if (parsedProxyPort && parsedProxyPort !== port) {
return true;
}
if (!/^[.*]/.test(parsedProxyHostname)) {
return hostname !== parsedProxyHostname;
}
if (parsedProxyHostname.charAt(0) === "*") {
parsedProxyHostname = parsedProxyHostname.slice(1);
}
return !stringEndsWith.call(hostname, parsedProxyHostname);
});
}
function getEnv(key) {
return process.env[key.toLowerCase()] || process.env[key.toUpperCase()] || "";
}
exports2.getProxyForUrl = getProxyForUrl;
}
});
// node_modules/ms/index.js
var require_ms = __commonJS({
"node_modules/ms/index.js"(exports2, module2) {
var s = 1e3;
var m = s * 60;
var h = m * 60;
var d = h * 24;
var w = d * 7;
var y = d * 365.25;
module2.exports = function(val2, options) {
options = options || {};
var type = typeof val2;
if (type === "string" && val2.length > 0) {
return parse8(val2);
} else if (type === "number" && isFinite(val2)) {
return options.long ? fmtLong(val2) : fmtShort(val2);
}
throw new Error(
"val is not a non-empty string or a valid number. val=" + JSON.stringify(val2)
);
};
function parse8(str) {
str = String(str);
if (str.length > 100) {
return;
}
var match = /^(-?(?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(
str
);
if (!match) {
return;
}
var n = parseFloat(match[1]);
var type = (match[2] || "ms").toLowerCase();
switch (type) {
case "years":
case "year":
case "yrs":
case "yr":
case "y":
return n * y;
case "weeks":
case "week":
case "w":
return n * w;
case "days":
case "day":
case "d":
return n * d;
case "hours":
case "hour":
case "hrs":
case "hr":
case "h":
return n * h;
case "minutes":
case "minute":
case "mins":
case "min":
case "m":
return n * m;
case "seconds":
case "second":
case "secs":
case "sec":
case "s":
return n * s;
case "milliseconds":
case "millisecond":
case "msecs":
case "msec":
case "ms":
return n;
default:
return void 0;
}
}
function fmtShort(ms) {
var msAbs = Math.abs(ms);
if (msAbs >= d) {
return Math.round(ms / d) + "d";
}
if (msAbs >= h) {
return Math.round(ms / h) + "h";
}
if (msAbs >= m) {
return Math.round(ms / m) + "m";
}
if (msAbs >= s) {
return Math.round(ms / s) + "s";
}
return ms + "ms";
}
function fmtLong(ms) {
var msAbs = Math.abs(ms);
if (msAbs >= d) {
return plural(ms, msAbs, d, "day");
}
if (msAbs >= h) {
return plural(ms, msAbs, h, "hour");
}
if (msAbs >= m) {
return plural(ms, msAbs, m, "minute");
}
if (msAbs >= s) {
return plural(ms, msAbs, s, "second");
}
return ms + " ms";
}
function plural(ms, msAbs, n, name) {
var isPlural = msAbs >= n * 1.5;
return Math.round(ms / n) + " " + name + (isPlural ? "s" : "");
}
}
});
// node_modules/debug/src/common.js
var require_common = __commonJS({
"node_modules/debug/src/common.js"(exports2, module2) {
function setup(env) {
createDebug.debug = createDebug;
createDebug.default = createDebug;
createDebug.coerce = coerce3;
createDebug.disable = disable;
createDebug.enable = enable;
createDebug.enabled = enabled;
createDebug.humanize = require_ms();
createDebug.destroy = destroy;
Object.keys(env).forEach((key) => {
createDebug[key] = env[key];
});
createDebug.names = [];
createDebug.skips = [];
createDebug.formatters = {};
function selectColor(namespace) {
let hash = 0;
for (let i = 0; i < namespace.length; i++) {
hash = (hash << 5) - hash + namespace.charCodeAt(i);
hash |= 0;
}
return createDebug.colors[Math.abs(hash) % createDebug.colors.length];
}
createDebug.selectColor = selectColor;
function createDebug(namespace) {
let prevTime;
let enableOverride = null;
let namespacesCache;
let enabledCache;
function debug(...args) {
if (!debug.enabled) {
return;
}
const self2 = debug;
const curr = Number(/* @__PURE__ */ new Date());
const ms = curr - (prevTime || curr);
self2.diff = ms;
self2.prev = prevTime;
self2.curr = curr;
prevTime = curr;
args[0] = createDebug.coerce(args[0]);
if (typeof args[0] !== "string") {
args.unshift("%O");
}
let index2 = 0;
args[0] = args[0].replace(/%([a-zA-Z%])/g, (match, format) => {
if (match === "%%") {
return "%";
}
index2++;
const formatter = createDebug.formatters[format];
if (typeof formatter === "function") {
const val2 = args[index2];
match = formatter.call(self2, val2);
args.splice(index2, 1);
index2--;
}
return match;
});
createDebug.formatArgs.call(self2, args);
const logFn = self2.log || createDebug.log;
logFn.apply(self2, args);
}
debug.namespace = namespace;
debug.useColors = createDebug.useColors();
debug.color = createDebug.selectColor(namespace);
debug.extend = extend2;
debug.destroy = createDebug.destroy;
Object.defineProperty(debug, "enabled", {
enumerable: true,
configurable: false,
get: () => {
if (enableOverride !== null) {
return enableOverride;
}
if (namespacesCache !== createDebug.namespaces) {
namespacesCache = createDebug.namespaces;
enabledCache = createDebug.enabled(namespace);
}
return enabledCache;
},
set: (v) => {
enableOverride = v;
}
});
if (typeof createDebug.init === "function") {
createDebug.init(debug);
}
return debug;
}
function extend2(namespace, delimiter) {
const newDebug = createDebug(this.namespace + (typeof delimiter === "undefined" ? ":" : delimiter) + namespace);
newDebug.log = this.log;
return newDebug;
}
function enable(namespaces) {
createDebug.save(namespaces);
createDebug.namespaces = namespaces;
createDebug.names = [];
createDebug.skips = [];
const split = (typeof namespaces === "string" ? namespaces : "").trim().replace(" ", ",").split(",").filter(Boolean);
for (const ns of split) {
if (ns[0] === "-") {
createDebug.skips.push(ns.slice(1));
} else {
createDebug.names.push(ns);
}
}
}
function matchesTemplate(search, template) {
let searchIndex = 0;
let templateIndex = 0;
let starIndex = -1;
let matchIndex = 0;
while (searchIndex < search.length) {
if (templateIndex < template.length && (template[templateIndex] === search[searchIndex] || template[templateIndex] === "*")) {
if (template[templateIndex] === "*") {
starIndex = templateIndex;
matchIndex = searchIndex;
templateIndex++;
} else {
searchIndex++;
templateIndex++;
}
} else if (starIndex !== -1) {
templateIndex = starIndex + 1;
matchIndex++;
searchIndex = matchIndex;
} else {
return false;
}
}
while (templateIndex < template.length && template[templateIndex] === "*") {
templateIndex++;
}
return templateIndex === template.length;
}
function disable() {
const namespaces = [
...createDebug.names,
...createDebug.skips.map((namespace) => "-" + namespace)
].join(",");
createDebug.enable("");
return namespaces;
}
function enabled(name) {
for (const skip of createDebug.skips) {
if (matchesTemplate(name, skip)) {
return false;
}
}
for (const ns of createDebug.names) {
if (matchesTemplate(name, ns)) {
return true;
}
}
return false;
}
function coerce3(val2) {
if (val2 instanceof Error) {
return val2.stack || val2.message;
}
return val2;
}
function destroy() {
console.warn("Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.");
}
createDebug.enable(createDebug.load());
return createDebug;
}
module2.exports = setup;
}
});
// node_modules/debug/src/browser.js
var require_browser = __commonJS({
"node_modules/debug/src/browser.js"(exports2, module2) {
exports2.formatArgs = formatArgs;
exports2.save = save;
exports2.load = load2;
exports2.useColors = useColors;
exports2.storage = localstorage();
exports2.destroy = /* @__PURE__ */ (() => {
let warned = false;
return () => {
if (!warned) {
warned = true;
console.warn("Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.");
}
};
})();
exports2.colors = [
"#0000CC",
"#0000FF",
"#0033CC",
"#0033FF",
"#0066CC",
"#0066FF",
"#0099CC",
"#0099FF",
"#00CC00",
"#00CC33",
"#00CC66",
"#00CC99",
"#00CCCC",
"#00CCFF",
"#3300CC",
"#3300FF",
"#3333CC",
"#3333FF",
"#3366CC",
"#3366FF",
"#3399CC",
"#3399FF",
"#33CC00",
"#33CC33",
"#33CC66",
"#33CC99",
"#33CCCC",
"#33CCFF",
"#6600CC",
"#6600FF",
"#6633CC",
"#6633FF",
"#66CC00",
"#66CC33",
"#9900CC",
"#9900FF",
"#9933CC",
"#9933FF",
"#99CC00",
"#99CC33",
"#CC0000",
"#CC0033",
"#CC0066",
"#CC0099",
"#CC00CC",
"#CC00FF",
"#CC3300",
"#CC3333",
"#CC3366",
"#CC3399",
"#CC33CC",
"#CC33FF",
"#CC6600",
"#CC6633",
"#CC9900",
"#CC9933",
"#CCCC00",
"#CCCC33",
"#FF0000",
"#FF0033",
"#FF0066",
"#FF0099",
"#FF00CC",
"#FF00FF",
"#FF3300",
"#FF3333",
"#FF3366",
"#FF3399",
"#FF33CC",
"#FF33FF",
"#FF6600",
"#FF6633",
"#FF9900",
"#FF9933",
"#FFCC00",
"#FFCC33"
];
function useColors() {
if (typeof window !== "undefined" && window.process && (window.process.type === "renderer" || window.process.__nwjs)) {
return true;
}
if (typeof navigator !== "undefined" && navigator.userAgent && navigator.userAgent.toLowerCase().match(/(edge|trident)\/(\d+)/)) {
return false;
}
let m;
return typeof document !== "undefined" && document.documentElement && document.documentElement.style && document.documentElement.style.WebkitAppearance || // Is firebug? http://stackoverflow.com/a/398120/376773
typeof window !== "undefined" && window.console && (window.console.firebug || window.console.exception && window.console.table) || // Is firefox >= v31?
// https://developer.mozilla.org/en-US/docs/Tools/Web_Console#Styling_messages
typeof navigator !== "undefined" && navigator.userAgent && (m = navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/)) && parseInt(m[1], 10) >= 31 || // Double check webkit in userAgent just in case we are in a worker
typeof navigator !== "undefined" && navigator.userAgent && navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/);
}
function formatArgs(args) {
args[0] = (this.useColors ? "%c" : "") + this.namespace + (this.useColors ? " %c" : " ") + args[0] + (this.useColors ? "%c " : " ") + "+" + module2.exports.humanize(this.diff);
if (!this.useColors) {
return;
}
const c = "color: " + this.color;
args.splice(1, 0, c, "color: inherit");
let index2 = 0;
let lastC = 0;
args[0].replace(/%[a-zA-Z%]/g, (match) => {
if (match === "%%") {
return;
}
index2++;
if (match === "%c") {
lastC = index2;
}
});
args.splice(lastC, 0, c);
}
exports2.log = console.debug || console.log || (() => {
});
function save(namespaces) {
try {
if (namespaces) {
exports2.storage.setItem("debug", namespaces);
} else {
exports2.storage.removeItem("debug");
}
} catch (error) {
}
}
function load2() {
let r;
try {
r = exports2.storage.getItem("debug");
} catch (error) {
}
if (!r && typeof process !== "undefined" && "env" in process) {
r = process.env.DEBUG;
}
return r;
}
function localstorage() {
try {
return localStorage;
} catch (error) {
}
}
module2.exports = require_common()(exports2);
var { formatters } = module2.exports;
formatters.j = function(v) {
try {
return JSON.stringify(v);
} catch (error) {
return "[UnexpectedJSONParseError]: " + error.message;
}
};
}
});
// node_modules/debug/src/node.js
var require_node = __commonJS({
"node_modules/debug/src/node.js"(exports2, module2) {
var tty = require("tty");
var util5 = require("util");
exports2.init = init;
exports2.log = log;
exports2.formatArgs = formatArgs;
exports2.save = save;
exports2.load = load2;
exports2.useColors = useColors;
exports2.destroy = util5.deprecate(
() => {
},
"Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`."
);
exports2.colors = [6, 2, 3, 4, 5, 1];
try {
const supportsColor = require("supports-color");
if (supportsColor && (supportsColor.stderr || supportsColor).level >= 2) {
exports2.colors = [
20,
21,
26,
27,
32,
33,
38,
39,
40,
41,
42,
43,
44,
45,
56,
57,
62,
63,
68,
69,
74,
75,
76,
77,
78,
79,
80,
81,
92,
93,
98,
99,
112,
113,
128,
129,
134,
135,
148,
149,
160,
161,
162,
163,
164,
165,
166,
167,
168,
169,
170,
171,
172,
173,
178,
179,
184,
185,
196,
197,
198,
199,
200,
201,
202,
203,
204,
205,
206,
207,
208,
209,
214,
215,
220,
221
];
}
} catch (error) {
}
exports2.inspectOpts = Object.keys(process.env).filter((key) => {
return /^debug_/i.test(key);
}).reduce((obj, key) => {
const prop2 = key.substring(6).toLowerCase().replace(/_([a-z])/g, (_, k) => {
return k.toUpperCase();
});
let val2 = process.env[key];
if (/^(yes|on|true|enabled)$/i.test(val2)) {
val2 = true;
} else if (/^(no|off|false|disabled)$/i.test(val2)) {
val2 = false;
} else if (val2 === "null") {
val2 = null;
} else {
val2 = Number(val2);
}
obj[prop2] = val2;
return obj;
}, {});
function useColors() {
return "colors" in exports2.inspectOpts ? Boolean(exports2.inspectOpts.colors) : tty.isatty(process.stderr.fd);
}
function formatArgs(args) {
const { namespace: name, useColors: useColors2 } = this;
if (useColors2) {
const c = this.color;
const colorCode = "\x1B[3" + (c < 8 ? c : "8;5;" + c);
const prefix = ` ${colorCode};1m${name} \x1B[0m`;
args[0] = prefix + args[0].split("\n").join("\n" + prefix);
args.push(colorCode + "m+" + module2.exports.humanize(this.diff) + "\x1B[0m");
} else {
args[0] = getDate() + name + " " + args[0];
}
}
function getDate() {
if (exports2.inspectOpts.hideDate) {
return "";
}
return (/* @__PURE__ */ new Date()).toISOString() + " ";
}
function log(...args) {
return process.stderr.write(util5.formatWithOptions(exports2.inspectOpts, ...args) + "\n");
}
function save(namespaces) {
if (namespaces) {
process.env.DEBUG = namespaces;
} else {
delete process.env.DEBUG;
}
}
function load2() {
return process.env.DEBUG;
}
function init(debug) {
debug.inspectOpts = {};
const keys = Object.keys(exports2.inspectOpts);
for (let i = 0; i < keys.length; i++) {
debug.inspectOpts[keys[i]] = exports2.inspectOpts[keys[i]];
}
}
module2.exports = require_common()(exports2);
var { formatters } = module2.exports;
formatters.o = function(v) {
this.inspectOpts.colors = this.useColors;
return util5.inspect(v, this.inspectOpts).split("\n").map((str) => str.trim()).join(" ");
};
formatters.O = function(v) {
this.inspectOpts.colors = this.useColors;
return util5.inspect(v, this.inspectOpts);
};
}
});
// node_modules/debug/src/index.js
var require_src = __commonJS({
"node_modules/debug/src/index.js"(exports2, module2) {
if (typeof process === "undefined" || process.type === "renderer" || process.browser === true || process.__nwjs) {
module2.exports = require_browser();
} else {
module2.exports = require_node();
}
}
});
// node_modules/follow-redirects/debug.js
var require_debug = __commonJS({
"node_modules/follow-redirects/debug.js"(exports2, module2) {
var debug;
module2.exports = function() {
if (!debug) {
try {
debug = require_src()("follow-redirects");
} catch (error) {
}
if (typeof debug !== "function") {
debug = function() {
};
}
}
debug.apply(null, arguments);
};
}
});
// node_modules/follow-redirects/index.js
var require_follow_redirects = __commonJS({
"node_modules/follow-redirects/index.js"(exports2, module2) {
var url2 = require("url");
var URL2 = url2.URL;
var http2 = require("http");
var https4 = require("https");
var Writable = require("stream").Writable;
var assert = require("assert");
var debug = require_debug();
(function detectUnsupportedEnvironment() {
var looksLikeNode = typeof process !== "undefined";
var looksLikeBrowser = typeof window !== "undefined" && typeof document !== "undefined";
var looksLikeV8 = isFunction2(Error.captureStackTrace);
if (!looksLikeNode && (looksLikeBrowser || !looksLikeV8)) {
console.warn("The follow-redirects package should be excluded from browser builds.");
}
})();
var useNativeURL = false;
try {
assert(new URL2(""));
} catch (error) {
useNativeURL = error.code === "ERR_INVALID_URL";
}
var preservedUrlFields = [
"auth",
"host",
"hostname",
"href",
"path",
"pathname",
"port",
"protocol",
"query",
"search",
"hash"
];
var events = ["abort", "aborted", "connect", "error", "socket", "timeout"];
var eventHandlers = /* @__PURE__ */ Object.create(null);
events.forEach(function(event) {
eventHandlers[event] = function(arg1, arg2, arg3) {
this._redirectable.emit(event, arg1, arg2, arg3);
};
});
var InvalidUrlError = createErrorType(
"ERR_INVALID_URL",
"Invalid URL",
TypeError
);
var RedirectionError = createErrorType(
"ERR_FR_REDIRECTION_FAILURE",
"Redirected request failed"
);
var TooManyRedirectsError = createErrorType(
"ERR_FR_TOO_MANY_REDIRECTS",
"Maximum number of redirects exceeded",
RedirectionError
);
var MaxBodyLengthExceededError = createErrorType(
"ERR_FR_MAX_BODY_LENGTH_EXCEEDED",
"Request body larger than maxBodyLength limit"
);
var WriteAfterEndError = createErrorType(
"ERR_STREAM_WRITE_AFTER_END",
"write after end"
);
var destroy = Writable.prototype.destroy || noop2;
function RedirectableRequest(options, responseCallback) {
Writable.call(this);
this._sanitizeOptions(options);
this._options = options;
this._ended = false;
this._ending = false;
this._redirectCount = 0;
this._redirects = [];
this._requestBodyLength = 0;
this._requestBodyBuffers = [];
if (responseCallback) {
this.on("response", responseCallback);
}
var self2 = this;
this._onNativeResponse = function(response) {
try {
self2._processResponse(response);
} catch (cause) {
self2.emit("error", cause instanceof RedirectionError ? cause : new RedirectionError({ cause }));
}
};
this._performRequest();
}
RedirectableRequest.prototype = Object.create(Writable.prototype);
RedirectableRequest.prototype.abort = function() {
destroyRequest(this._currentRequest);
this._currentRequest.abort();
this.emit("abort");
};
RedirectableRequest.prototype.destroy = function(error) {
destroyRequest(this._currentRequest, error);
destroy.call(this, error);
return this;
};
RedirectableRequest.prototype.write = function(data2, encoding, callback) {
if (this._ending) {
throw new WriteAfterEndError();
}
if (!isString2(data2) && !isBuffer2(data2)) {
throw new TypeError("data should be a string, Buffer or Uint8Array");
}
if (isFunction2(encoding)) {
callback = encoding;
encoding = null;
}
if (data2.length === 0) {
if (callback) {
callback();
}
return;
}
if (this._requestBodyLength + data2.length <= this._options.maxBodyLength) {
this._requestBodyLength += data2.length;
this._requestBodyBuffers.push({ data: data2, encoding });
this._currentRequest.write(data2, encoding, callback);
} else {
this.emit("error", new MaxBodyLengthExceededError());
this.abort();
}
};
RedirectableRequest.prototype.end = function(data2, encoding, callback) {
if (isFunction2(data2)) {
callback = data2;
data2 = encoding = null;
} else if (isFunction2(encoding)) {
callback = encoding;
encoding = null;
}
if (!data2) {
this._ended = this._ending = true;
this._currentRequest.end(null, null, callback);
} else {
var self2 = this;
var currentRequest = this._currentRequest;
this.write(data2, encoding, function() {
self2._ended = true;
currentRequest.end(null, null, callback);
});
this._ending = true;
}
};
RedirectableRequest.prototype.setHeader = function(name, value) {
this._options.headers[name] = value;
this._currentRequest.setHeader(name, value);
};
RedirectableRequest.prototype.removeHeader = function(name) {
delete this._options.headers[name];
this._currentRequest.removeHeader(name);
};
RedirectableRequest.prototype.setTimeout = function(msecs, callback) {
var self2 = this;
function destroyOnTimeout(socket) {
socket.setTimeout(msecs);
socket.removeListener("timeout", socket.destroy);
socket.addListener("timeout", socket.destroy);
}
function startTimer(socket) {
if (self2._timeout) {
clearTimeout(self2._timeout);
}
self2._timeout = setTimeout(function() {
self2.emit("timeout");
clearTimer();
}, msecs);
destroyOnTimeout(socket);
}
function clearTimer() {
if (self2._timeout) {
clearTimeout(self2._timeout);
self2._timeout = null;
}
self2.removeListener("abort", clearTimer);
self2.removeListener("error", clearTimer);
self2.removeListener("response", clearTimer);
self2.removeListener("close", clearTimer);
if (callback) {
self2.removeListener("timeout", callback);
}
if (!self2.socket) {
self2._currentRequest.removeListener("socket", startTimer);
}
}
if (callback) {
this.on("timeout", callback);
}
if (this.socket) {
startTimer(this.socket);
} else {
this._currentRequest.once("socket", startTimer);
}
this.on("socket", destroyOnTimeout);
this.on("abort", clearTimer);
this.on("error", clearTimer);
this.on("response", clearTimer);
this.on("close", clearTimer);
return this;
};
[
"flushHeaders",
"getHeader",
"setNoDelay",
"setSocketKeepAlive"
].forEach(function(method) {
RedirectableRequest.prototype[method] = function(a, b) {
return this._currentRequest[method](a, b);
};
});
["aborted", "connection", "socket"].forEach(function(property) {
Object.defineProperty(RedirectableRequest.prototype, property, {
get: function() {
return this._currentRequest[property];
}
});
});
RedirectableRequest.prototype._sanitizeOptions = function(options) {
if (!options.headers) {
options.headers = {};
}
if (options.host) {
if (!options.hostname) {
options.hostname = options.host;
}
delete options.host;
}
if (!options.pathname && options.path) {
var searchPos = options.path.indexOf("?");
if (searchPos < 0) {
options.pathname = options.path;
} else {
options.pathname = options.path.substring(0, searchPos);
options.search = options.path.substring(searchPos);
}
}
};
RedirectableRequest.prototype._performRequest = function() {
var protocol = this._options.protocol;
var nativeProtocol = this._options.nativeProtocols[protocol];
if (!nativeProtocol) {
throw new TypeError("Unsupported protocol " + protocol);
}
if (this._options.agents) {
var scheme = protocol.slice(0, -1);
this._options.agent = this._options.agents[scheme];
}
var request = this._currentRequest = nativeProtocol.request(this._options, this._onNativeResponse);
request._redirectable = this;
for (var event of events) {
request.on(event, eventHandlers[event]);
}
this._currentUrl = /^\//.test(this._options.path) ? url2.format(this._options) : (
// When making a request to a proxy, […]
// a client MUST send the target URI in absolute-form […].
this._options.path
);
if (this._isRedirect) {
var i = 0;
var self2 = this;
var buffers = this._requestBodyBuffers;
(function writeNext(error) {
if (request === self2._currentRequest) {
if (error) {
self2.emit("error", error);
} else if (i < buffers.length) {
var buffer = buffers[i++];
if (!request.finished) {
request.write(buffer.data, buffer.encoding, writeNext);
}
} else if (self2._ended) {
request.end();
}
}
})();
}
};
RedirectableRequest.prototype._processResponse = function(response) {
var statusCode = response.statusCode;
if (this._options.trackRedirects) {
this._redirects.push({
url: this._currentUrl,
headers: response.headers,
statusCode
});
}
var location = response.headers.location;
if (!location || this._options.followRedirects === false || statusCode < 300 || statusCode >= 400) {
response.responseUrl = this._currentUrl;
response.redirects = this._redirects;
this.emit("response", response);
this._requestBodyBuffers = [];
return;
}
destroyRequest(this._currentRequest);
response.destroy();
if (++this._redirectCount > this._options.maxRedirects) {
throw new TooManyRedirectsError();
}
var requestHeaders;
var beforeRedirect = this._options.beforeRedirect;
if (beforeRedirect) {
requestHeaders = Object.assign({
// The Host header was set by nativeProtocol.request
Host: response.req.getHeader("host")
}, this._options.headers);
}
var method = this._options.method;
if ((statusCode === 301 || statusCode === 302) && this._options.method === "POST" || // RFC7231§6.4.4: The 303 (See Other) status code indicates that
// the server is redirecting the user agent to a different resource […]
// A user agent can perform a retrieval request targeting that URI
// (a GET or HEAD request if using HTTP) […]
statusCode === 303 && !/^(?:GET|HEAD)$/.test(this._options.method)) {
this._options.method = "GET";
this._requestBodyBuffers = [];
removeMatchingHeaders(/^content-/i, this._options.headers);
}
var currentHostHeader = removeMatchingHeaders(/^host$/i, this._options.headers);
var currentUrlParts = parseUrl(this._currentUrl);
var currentHost = currentHostHeader || currentUrlParts.host;
var currentUrl = /^\w+:/.test(location) ? this._currentUrl : url2.format(Object.assign(currentUrlParts, { host: currentHost }));
var redirectUrl = resolveUrl(location, currentUrl);
debug("redirecting to", redirectUrl.href);
this._isRedirect = true;
spreadUrlObject(redirectUrl, this._options);
if (redirectUrl.protocol !== currentUrlParts.protocol && redirectUrl.protocol !== "https:" || redirectUrl.host !== currentHost && !isSubdomain(redirectUrl.host, currentHost)) {
removeMatchingHeaders(/^(?:(?:proxy-)?authorization|cookie)$/i, this._options.headers);
}
if (isFunction2(beforeRedirect)) {
var responseDetails = {
headers: response.headers,
statusCode
};
var requestDetails = {
url: currentUrl,
method,
headers: requestHeaders
};
beforeRedirect(this._options, responseDetails, requestDetails);
this._sanitizeOptions(this._options);
}
this._performRequest();
};
function wrap2(protocols) {
var exports3 = {
maxRedirects: 21,
maxBodyLength: 10 * 1024 * 1024
};
var nativeProtocols = {};
Object.keys(protocols).forEach(function(scheme) {
var protocol = scheme + ":";
var nativeProtocol = nativeProtocols[protocol] = protocols[scheme];
var wrappedProtocol = exports3[scheme] = Object.create(nativeProtocol);
function request(input, options, callback) {
if (isURL(input)) {
input = spreadUrlObject(input);
} else if (isString2(input)) {
input = spreadUrlObject(parseUrl(input));
} else {
callback = options;
options = validateUrl(input);
input = { protocol };
}
if (isFunction2(options)) {
callback = options;
options = null;
}
options = Object.assign({
maxRedirects: exports3.maxRedirects,
maxBodyLength: exports3.maxBodyLength
}, input, options);
options.nativeProtocols = nativeProtocols;
if (!isString2(options.host) && !isString2(options.hostname)) {
options.hostname = "::1";
}
assert.equal(options.protocol, protocol, "protocol mismatch");
debug("options", options);
return new RedirectableRequest(options, callback);
}
function get2(input, options, callback) {
var wrappedRequest = wrappedProtocol.request(input, options, callback);
wrappedRequest.end();
return wrappedRequest;
}
Object.defineProperties(wrappedProtocol, {
request: { value: request, configurable: true, enumerable: true, writable: true },
get: { value: get2, configurable: true, enumerable: true, writable: true }
});
});
return exports3;
}
function noop2() {
}
function parseUrl(input) {
var parsed;
if (useNativeURL) {
parsed = new URL2(input);
} else {
parsed = validateUrl(url2.parse(input));
if (!isString2(parsed.protocol)) {
throw new InvalidUrlError({ input });
}
}
return parsed;
}
function resolveUrl(relative, base) {
return useNativeURL ? new URL2(relative, base) : parseUrl(url2.resolve(base, relative));
}
function validateUrl(input) {
if (/^\[/.test(input.hostname) && !/^\[[:0-9a-f]+\]$/i.test(input.hostname)) {
throw new InvalidUrlError({ input: input.href || input });
}
if (/^\[/.test(input.host) && !/^\[[:0-9a-f]+\](:\d+)?$/i.test(input.host)) {
throw new InvalidUrlError({ input: input.href || input });
}
return input;
}
function spreadUrlObject(urlObject, target) {
var spread3 = target || {};
for (var key of preservedUrlFields) {
spread3[key] = urlObject[key];
}
if (spread3.hostname.startsWith("[")) {
spread3.hostname = spread3.hostname.slice(1, -1);
}
if (spread3.port !== "") {
spread3.port = Number(spread3.port);
}
spread3.path = spread3.search ? spread3.pathname + spread3.search : spread3.pathname;
return spread3;
}
function removeMatchingHeaders(regex, headers) {
var lastValue;
for (var header in headers) {
if (regex.test(header)) {
lastValue = headers[header];
delete headers[header];
}
}
return lastValue === null || typeof lastValue === "undefined" ? void 0 : String(lastValue).trim();
}
function createErrorType(code, message, baseClass) {
function CustomError(properties) {
if (isFunction2(Error.captureStackTrace)) {
Error.captureStackTrace(this, this.constructor);
}
Object.assign(this, properties || {});
this.code = code;
this.message = this.cause ? message + ": " + this.cause.message : message;
}
CustomError.prototype = new (baseClass || Error)();
Object.defineProperties(CustomError.prototype, {
constructor: {
value: CustomError,
enumerable: false
},
name: {
value: "Error [" + code + "]",
enumerable: false
}
});
return CustomError;
}
function destroyRequest(request, error) {
for (var event of events) {
request.removeListener(event, eventHandlers[event]);
}
request.on("error", noop2);
request.destroy(error);
}
function isSubdomain(subdomain, domain) {
assert(isString2(subdomain) && isString2(domain));
var dot = subdomain.length - domain.length - 1;
return dot > 0 && subdomain[dot] === "." && subdomain.endsWith(domain);
}
function isString2(value) {
return typeof value === "string" || value instanceof String;
}
function isFunction2(value) {
return typeof value === "function";
}
function isBuffer2(value) {
return typeof value === "object" && "length" in value;
}
function isURL(value) {
return URL2 && value instanceof URL2;
}
module2.exports = wrap2({ http: http2, https: https4 });
module2.exports.wrap = wrap2;
}
});
// node_modules/axios/lib/env/data.js
var VERSION;
var init_data = __esm({
"node_modules/axios/lib/env/data.js"() {
VERSION = "1.8.4";
}
});
// node_modules/axios/lib/helpers/parseProtocol.js
function parseProtocol(url2) {
const match = /^([-+\w]{1,25})(:?\/\/|:)/.exec(url2);
return match && match[1] || "";
}
var init_parseProtocol = __esm({
"node_modules/axios/lib/helpers/parseProtocol.js"() {
"use strict";
}
});
// node_modules/axios/lib/helpers/fromDataURI.js
function fromDataURI(uri, asBlob, options) {
const _Blob = options && options.Blob || platform_default.classes.Blob;
const protocol = parseProtocol(uri);
if (asBlob === void 0 && _Blob) {
asBlob = true;
}
if (protocol === "data") {
uri = protocol.length ? uri.slice(protocol.length + 1) : uri;
const match = DATA_URL_PATTERN.exec(uri);
if (!match) {
throw new AxiosError_default("Invalid URL", AxiosError_default.ERR_INVALID_URL);
}
const mime = match[1];
const isBase64 = match[2];
const body = match[3];
const buffer = Buffer.from(decodeURIComponent(body), isBase64 ? "base64" : "utf8");
if (asBlob) {
if (!_Blob) {
throw new AxiosError_default("Blob is not supported", AxiosError_default.ERR_NOT_SUPPORT);
}
return new _Blob([buffer], { type: mime });
}
return buffer;
}
throw new AxiosError_default("Unsupported protocol " + protocol, AxiosError_default.ERR_NOT_SUPPORT);
}
var DATA_URL_PATTERN;
var init_fromDataURI = __esm({
"node_modules/axios/lib/helpers/fromDataURI.js"() {
"use strict";
init_AxiosError();
init_parseProtocol();
init_platform();
DATA_URL_PATTERN = /^(?:([^;]+);)?(?:[^;]+;)?(base64|),([\s\S]*)$/;
}
});
// node_modules/axios/lib/helpers/AxiosTransformStream.js
var import_stream, kInternals, AxiosTransformStream, AxiosTransformStream_default;
var init_AxiosTransformStream = __esm({
"node_modules/axios/lib/helpers/AxiosTransformStream.js"() {
"use strict";
import_stream = __toESM(require("stream"), 1);
init_utils();
kInternals = Symbol("internals");
AxiosTransformStream = class extends import_stream.default.Transform {
constructor(options) {
options = utils_default.toFlatObject(options, {
maxRate: 0,
chunkSize: 64 * 1024,
minChunkSize: 100,
timeWindow: 500,
ticksRate: 2,
samplesCount: 15
}, null, (prop2, source) => {
return !utils_default.isUndefined(source[prop2]);
});
super({
readableHighWaterMark: options.chunkSize
});
const internals = this[kInternals] = {
timeWindow: options.timeWindow,
chunkSize: options.chunkSize,
maxRate: options.maxRate,
minChunkSize: options.minChunkSize,
bytesSeen: 0,
isCaptured: false,
notifiedBytesLoaded: 0,
ts: Date.now(),
bytes: 0,
onReadCallback: null
};
this.on("newListener", (event) => {
if (event === "progress") {
if (!internals.isCaptured) {
internals.isCaptured = true;
}
}
});
}
_read(size) {
const internals = this[kInternals];
if (internals.onReadCallback) {
internals.onReadCallback();
}
return super._read(size);
}
_transform(chunk, encoding, callback) {
const internals = this[kInternals];
const maxRate = internals.maxRate;
const readableHighWaterMark = this.readableHighWaterMark;
const timeWindow = internals.timeWindow;
const divider = 1e3 / timeWindow;
const bytesThreshold = maxRate / divider;
const minChunkSize = internals.minChunkSize !== false ? Math.max(internals.minChunkSize, bytesThreshold * 0.01) : 0;
const pushChunk = (_chunk, _callback) => {
const bytes = Buffer.byteLength(_chunk);
internals.bytesSeen += bytes;
internals.bytes += bytes;
internals.isCaptured && this.emit("progress", internals.bytesSeen);
if (this.push(_chunk)) {
process.nextTick(_callback);
} else {
internals.onReadCallback = () => {
internals.onReadCallback = null;
process.nextTick(_callback);
};
}
};
const transformChunk = (_chunk, _callback) => {
const chunkSize = Buffer.byteLength(_chunk);
let chunkRemainder = null;
let maxChunkSize = readableHighWaterMark;
let bytesLeft;
let passed = 0;
if (maxRate) {
const now = Date.now();
if (!internals.ts || (passed = now - internals.ts) >= timeWindow) {
internals.ts = now;
bytesLeft = bytesThreshold - internals.bytes;
internals.bytes = bytesLeft < 0 ? -bytesLeft : 0;
passed = 0;
}
bytesLeft = bytesThreshold - internals.bytes;
}
if (maxRate) {
if (bytesLeft <= 0) {
return setTimeout(() => {
_callback(null, _chunk);
}, timeWindow - passed);
}
if (bytesLeft < maxChunkSize) {
maxChunkSize = bytesLeft;
}
}
if (maxChunkSize && chunkSize > maxChunkSize && chunkSize - maxChunkSize > minChunkSize) {
chunkRemainder = _chunk.subarray(maxChunkSize);
_chunk = _chunk.subarray(0, maxChunkSize);
}
pushChunk(_chunk, chunkRemainder ? () => {
process.nextTick(_callback, null, chunkRemainder);
} : _callback);
};
transformChunk(chunk, function transformNextChunk(err2, _chunk) {
if (err2) {
return callback(err2);
}
if (_chunk) {
transformChunk(_chunk, transformNextChunk);
} else {
callback(null);
}
});
}
};
AxiosTransformStream_default = AxiosTransformStream;
}
});
// node_modules/axios/lib/helpers/readBlob.js
var asyncIterator, readBlob, readBlob_default;
var init_readBlob = __esm({
"node_modules/axios/lib/helpers/readBlob.js"() {
({ asyncIterator } = Symbol);
readBlob = async function* (blob) {
if (blob.stream) {
yield* blob.stream();
} else if (blob.arrayBuffer) {
yield await blob.arrayBuffer();
} else if (blob[asyncIterator]) {
yield* blob[asyncIterator]();
} else {
yield blob;
}
};
readBlob_default = readBlob;
}
});
// node_modules/axios/lib/helpers/formDataToStream.js
var import_util, import_stream2, BOUNDARY_ALPHABET, textEncoder, CRLF, CRLF_BYTES, CRLF_BYTES_COUNT, FormDataPart, formDataToStream, formDataToStream_default;
var init_formDataToStream = __esm({
"node_modules/axios/lib/helpers/formDataToStream.js"() {
import_util = __toESM(require("util"), 1);
import_stream2 = require("stream");
init_utils();
init_readBlob();
init_platform();
BOUNDARY_ALPHABET = platform_default.ALPHABET.ALPHA_DIGIT + "-_";
textEncoder = typeof TextEncoder === "function" ? new TextEncoder() : new import_util.default.TextEncoder();
CRLF = "\r\n";
CRLF_BYTES = textEncoder.encode(CRLF);
CRLF_BYTES_COUNT = 2;
FormDataPart = class {
constructor(name, value) {
const { escapeName } = this.constructor;
const isStringValue = utils_default.isString(value);
let headers = `Content-Disposition: form-data; name="${escapeName(name)}"${!isStringValue && value.name ? `; filename="${escapeName(value.name)}"` : ""}${CRLF}`;
if (isStringValue) {
value = textEncoder.encode(String(value).replace(/\r?\n|\r\n?/g, CRLF));
} else {
headers += `Content-Type: ${value.type || "application/octet-stream"}${CRLF}`;
}
this.headers = textEncoder.encode(headers + CRLF);
this.contentLength = isStringValue ? value.byteLength : value.size;
this.size = this.headers.byteLength + this.contentLength + CRLF_BYTES_COUNT;
this.name = name;
this.value = value;
}
async *encode() {
yield this.headers;
const { value } = this;
if (utils_default.isTypedArray(value)) {
yield value;
} else {
yield* readBlob_default(value);
}
yield CRLF_BYTES;
}
static escapeName(name) {
return String(name).replace(/[\r\n"]/g, (match) => ({
"\r": "%0D",
"\n": "%0A",
'"': "%22"
})[match]);
}
};
formDataToStream = (form, headersHandler, options) => {
const {
tag = "form-data-boundary",
size = 25,
boundary = tag + "-" + platform_default.generateString(size, BOUNDARY_ALPHABET)
} = options || {};
if (!utils_default.isFormData(form)) {
throw TypeError("FormData instance required");
}
if (boundary.length < 1 || boundary.length > 70) {
throw Error("boundary must be 10-70 characters long");
}
const boundaryBytes = textEncoder.encode("--" + boundary + CRLF);
const footerBytes = textEncoder.encode("--" + boundary + "--" + CRLF + CRLF);
let contentLength = footerBytes.byteLength;
const parts = Array.from(form.entries()).map(([name, value]) => {
const part = new FormDataPart(name, value);
contentLength += part.size;
return part;
});
contentLength += boundaryBytes.byteLength * parts.length;
contentLength = utils_default.toFiniteNumber(contentLength);
const computedHeaders = {
"Content-Type": `multipart/form-data; boundary=${boundary}`
};
if (Number.isFinite(contentLength)) {
computedHeaders["Content-Length"] = contentLength;
}
headersHandler && headersHandler(computedHeaders);
return import_stream2.Readable.from((async function* () {
for (const part of parts) {
yield boundaryBytes;
yield* part.encode();
}
yield footerBytes;
})());
};
formDataToStream_default = formDataToStream;
}
});
// node_modules/axios/lib/helpers/ZlibHeaderTransformStream.js
var import_stream3, ZlibHeaderTransformStream, ZlibHeaderTransformStream_default;
var init_ZlibHeaderTransformStream = __esm({
"node_modules/axios/lib/helpers/ZlibHeaderTransformStream.js"() {
"use strict";
import_stream3 = __toESM(require("stream"), 1);
ZlibHeaderTransformStream = class extends import_stream3.default.Transform {
__transform(chunk, encoding, callback) {
this.push(chunk);
callback();
}
_transform(chunk, encoding, callback) {
if (chunk.length !== 0) {
this._transform = this.__transform;
if (chunk[0] !== 120) {
const header = Buffer.alloc(2);
header[0] = 120;
header[1] = 156;
this.push(header, encoding);
}
}
this.__transform(chunk, encoding, callback);
}
};
ZlibHeaderTransformStream_default = ZlibHeaderTransformStream;
}
});
// node_modules/axios/lib/helpers/callbackify.js
var callbackify, callbackify_default;
var init_callbackify = __esm({
"node_modules/axios/lib/helpers/callbackify.js"() {
init_utils();
callbackify = (fn, reducer) => {
return utils_default.isAsyncFn(fn) ? function(...args) {
const cb = args.pop();
fn.apply(this, args).then((value) => {
try {
reducer ? cb(null, ...reducer(value)) : cb(null, value);
} catch (err2) {
cb(err2);
}
}, cb);
} : fn;
};
callbackify_default = callbackify;
}
});
// node_modules/axios/lib/helpers/speedometer.js
function speedometer(samplesCount, min) {
samplesCount = samplesCount || 10;
const bytes = new Array(samplesCount);
const timestamps = new Array(samplesCount);
let head = 0;
let tail = 0;
let firstSampleTS;
min = min !== void 0 ? min : 1e3;
return function push(chunkLength) {
const now = Date.now();
const startedAt = timestamps[tail];
if (!firstSampleTS) {
firstSampleTS = now;
}
bytes[head] = chunkLength;
timestamps[head] = now;
let i = tail;
let bytesCount = 0;
while (i !== head) {
bytesCount += bytes[i++];
i = i % samplesCount;
}
head = (head + 1) % samplesCount;
if (head === tail) {
tail = (tail + 1) % samplesCount;
}
if (now - firstSampleTS < min) {
return;
}
const passed = startedAt && now - startedAt;
return passed ? Math.round(bytesCount * 1e3 / passed) : void 0;
};
}
var speedometer_default;
var init_speedometer = __esm({
"node_modules/axios/lib/helpers/speedometer.js"() {
"use strict";
speedometer_default = speedometer;
}
});
// node_modules/axios/lib/helpers/throttle.js
function throttle(fn, freq) {
let timestamp = 0;
let threshold = 1e3 / freq;
let lastArgs;
let timer;
const invoke = (args, now = Date.now()) => {
timestamp = now;
lastArgs = null;
if (timer) {
clearTimeout(timer);
timer = null;
}
fn.apply(null, args);
};
const throttled = (...args) => {
const now = Date.now();
const passed = now - timestamp;
if (passed >= threshold) {
invoke(args, now);
} else {
lastArgs = args;
if (!timer) {
timer = setTimeout(() => {
timer = null;
invoke(lastArgs);
}, threshold - passed);
}
}
};
const flush = () => lastArgs && invoke(lastArgs);
return [throttled, flush];
}
var throttle_default;
var init_throttle = __esm({
"node_modules/axios/lib/helpers/throttle.js"() {
throttle_default = throttle;
}
});
// node_modules/axios/lib/helpers/progressEventReducer.js
var progressEventReducer, progressEventDecorator, asyncDecorator;
var init_progressEventReducer = __esm({
"node_modules/axios/lib/helpers/progressEventReducer.js"() {
init_speedometer();
init_throttle();
init_utils();
progressEventReducer = (listener, isDownloadStream, freq = 3) => {
let bytesNotified = 0;
const _speedometer = speedometer_default(50, 250);
return throttle_default((e) => {
const loaded = e.loaded;
const total = e.lengthComputable ? e.total : void 0;
const progressBytes = loaded - bytesNotified;
const rate = _speedometer(progressBytes);
const inRange = loaded <= total;
bytesNotified = loaded;
const data2 = {
loaded,
total,
progress: total ? loaded / total : void 0,
bytes: progressBytes,
rate: rate ? rate : void 0,
estimated: rate && total && inRange ? (total - loaded) / rate : void 0,
event: e,
lengthComputable: total != null,
[isDownloadStream ? "download" : "upload"]: true
};
listener(data2);
}, freq);
};
progressEventDecorator = (total, throttled) => {
const lengthComputable = total != null;
return [(loaded) => throttled[0]({
lengthComputable,
total,
loaded
}), throttled[1]];
};
asyncDecorator = (fn) => (...args) => utils_default.asap(() => fn(...args));
}
});
// node_modules/axios/lib/adapters/http.js
function dispatchBeforeRedirect(options, responseDetails) {
if (options.beforeRedirects.proxy) {
options.beforeRedirects.proxy(options);
}
if (options.beforeRedirects.config) {
options.beforeRedirects.config(options, responseDetails);
}
}
function setProxy(options, configProxy, location) {
let proxy = configProxy;
if (!proxy && proxy !== false) {
const proxyUrl = import_proxy_from_env.default.getProxyForUrl(location);
if (proxyUrl) {
proxy = new URL(proxyUrl);
}
}
if (proxy) {
if (proxy.username) {
proxy.auth = (proxy.username || "") + ":" + (proxy.password || "");
}
if (proxy.auth) {
if (proxy.auth.username || proxy.auth.password) {
proxy.auth = (proxy.auth.username || "") + ":" + (proxy.auth.password || "");
}
const base64 = Buffer.from(proxy.auth, "utf8").toString("base64");
options.headers["Proxy-Authorization"] = "Basic " + base64;
}
options.headers.host = options.hostname + (options.port ? ":" + options.port : "");
const proxyHost = proxy.hostname || proxy.host;
options.hostname = proxyHost;
options.host = proxyHost;
options.port = proxy.port;
options.path = location;
if (proxy.protocol) {
options.protocol = proxy.protocol.includes(":") ? proxy.protocol : `${proxy.protocol}:`;
}
}
options.beforeRedirects.proxy = function beforeRedirect(redirectOptions) {
setProxy(redirectOptions, configProxy, redirectOptions.href);
};
}
var import_proxy_from_env, import_http, import_https, import_util2, import_follow_redirects, import_zlib, import_stream4, import_events, zlibOptions, brotliOptions, isBrotliSupported, httpFollow, httpsFollow, isHttps, supportedProtocols, flushOnFinish, isHttpAdapterSupported, wrapAsync, resolveFamily, buildAddressEntry, http_default;
var init_http = __esm({
"node_modules/axios/lib/adapters/http.js"() {
"use strict";
init_utils();
init_settle();
init_buildFullPath();
init_buildURL();
import_proxy_from_env = __toESM(require_proxy_from_env(), 1);
import_http = __toESM(require("http"), 1);
import_https = __toESM(require("https"), 1);
import_util2 = __toESM(require("util"), 1);
import_follow_redirects = __toESM(require_follow_redirects(), 1);
import_zlib = __toESM(require("zlib"), 1);
init_data();
init_transitional();
init_AxiosError();
init_CanceledError();
init_platform();
init_fromDataURI();
import_stream4 = __toESM(require("stream"), 1);
init_AxiosHeaders();
init_AxiosTransformStream();
import_events = require("events");
init_formDataToStream();
init_readBlob();
init_ZlibHeaderTransformStream();
init_callbackify();
init_progressEventReducer();
zlibOptions = {
flush: import_zlib.default.constants.Z_SYNC_FLUSH,
finishFlush: import_zlib.default.constants.Z_SYNC_FLUSH
};
brotliOptions = {
flush: import_zlib.default.constants.BROTLI_OPERATION_FLUSH,
finishFlush: import_zlib.default.constants.BROTLI_OPERATION_FLUSH
};
isBrotliSupported = utils_default.isFunction(import_zlib.default.createBrotliDecompress);
({ http: httpFollow, https: httpsFollow } = import_follow_redirects.default);
isHttps = /https:?/;
supportedProtocols = platform_default.protocols.map((protocol) => {
return protocol + ":";
});
flushOnFinish = (stream5, [throttled, flush]) => {
stream5.on("end", flush).on("error", flush);
return throttled;
};
isHttpAdapterSupported = typeof process !== "undefined" && utils_default.kindOf(process) === "process";
wrapAsync = (asyncExecutor) => {
return new Promise((resolve, reject) => {
let onDone;
let isDone;
const done = (value, isRejected) => {
if (isDone) return;
isDone = true;
onDone && onDone(value, isRejected);
};
const _resolve = (value) => {
done(value);
resolve(value);
};
const _reject = (reason) => {
done(reason, true);
reject(reason);
};
asyncExecutor(_resolve, _reject, (onDoneHandler) => onDone = onDoneHandler).catch(_reject);
});
};
resolveFamily = ({ address, family }) => {
if (!utils_default.isString(address)) {
throw TypeError("address must be a string");
}
return {
address,
family: family || (address.indexOf(".") < 0 ? 6 : 4)
};
};
buildAddressEntry = (address, family) => resolveFamily(utils_default.isObject(address) ? address : { address, family });
http_default = isHttpAdapterSupported && function httpAdapter(config) {
return wrapAsync(async function dispatchHttpRequest(resolve, reject, onDone) {
let { data: data2, lookup, family } = config;
const { responseType, responseEncoding } = config;
const method = config.method.toUpperCase();
let isDone;
let rejected = false;
let req;
if (lookup) {
const _lookup = callbackify_default(lookup, (value) => utils_default.isArray(value) ? value : [value]);
lookup = (hostname, opt, cb) => {
_lookup(hostname, opt, (err2, arg0, arg1) => {
if (err2) {
return cb(err2);
}
const addresses = utils_default.isArray(arg0) ? arg0.map((addr) => buildAddressEntry(addr)) : [buildAddressEntry(arg0, arg1)];
opt.all ? cb(err2, addresses) : cb(err2, addresses[0].address, addresses[0].family);
});
};
}
const emitter = new import_events.EventEmitter();
const onFinished = () => {
if (config.cancelToken) {
config.cancelToken.unsubscribe(abort);
}
if (config.signal) {
config.signal.removeEventListener("abort", abort);
}
emitter.removeAllListeners();
};
onDone((value, isRejected) => {
isDone = true;
if (isRejected) {
rejected = true;
onFinished();
}
});
function abort(reason) {
emitter.emit("abort", !reason || reason.type ? new CanceledError_default(null, config, req) : reason);
}
emitter.once("abort", reject);
if (config.cancelToken || config.signal) {
config.cancelToken && config.cancelToken.subscribe(abort);
if (config.signal) {
config.signal.aborted ? abort() : config.signal.addEventListener("abort", abort);
}
}
const fullPath = buildFullPath(config.baseURL, config.url, config.allowAbsoluteUrls);
const parsed = new URL(fullPath, platform_default.hasBrowserEnv ? platform_default.origin : void 0);
const protocol = parsed.protocol || supportedProtocols[0];
if (protocol === "data:") {
let convertedData;
if (method !== "GET") {
return settle(resolve, reject, {
status: 405,
statusText: "method not allowed",
headers: {},
config
});
}
try {
convertedData = fromDataURI(config.url, responseType === "blob", {
Blob: config.env && config.env.Blob
});
} catch (err2) {
throw AxiosError_default.from(err2, AxiosError_default.ERR_BAD_REQUEST, config);
}
if (responseType === "text") {
convertedData = convertedData.toString(responseEncoding);
if (!responseEncoding || responseEncoding === "utf8") {
convertedData = utils_default.stripBOM(convertedData);
}
} else if (responseType === "stream") {
convertedData = import_stream4.default.Readable.from(convertedData);
}
return settle(resolve, reject, {
data: convertedData,
status: 200,
statusText: "OK",
headers: new AxiosHeaders_default(),
config
});
}
if (supportedProtocols.indexOf(protocol) === -1) {
return reject(new AxiosError_default(
"Unsupported protocol " + protocol,
AxiosError_default.ERR_BAD_REQUEST,
config
));
}
const headers = AxiosHeaders_default.from(config.headers).normalize();
headers.set("User-Agent", "axios/" + VERSION, false);
const { onUploadProgress, onDownloadProgress } = config;
const maxRate = config.maxRate;
let maxUploadRate = void 0;
let maxDownloadRate = void 0;
if (utils_default.isSpecCompliantForm(data2)) {
const userBoundary = headers.getContentType(/boundary=([-_\w\d]{10,70})/i);
data2 = formDataToStream_default(data2, (formHeaders) => {
headers.set(formHeaders);
}, {
tag: `axios-${VERSION}-boundary`,
boundary: userBoundary && userBoundary[1] || void 0
});
} else if (utils_default.isFormData(data2) && utils_default.isFunction(data2.getHeaders)) {
headers.set(data2.getHeaders());
if (!headers.hasContentLength()) {
try {
const knownLength = await import_util2.default.promisify(data2.getLength).call(data2);
Number.isFinite(knownLength) && knownLength >= 0 && headers.setContentLength(knownLength);
} catch (e) {
}
}
} else if (utils_default.isBlob(data2) || utils_default.isFile(data2)) {
data2.size && headers.setContentType(data2.type || "application/octet-stream");
headers.setContentLength(data2.size || 0);
data2 = import_stream4.default.Readable.from(readBlob_default(data2));
} else if (data2 && !utils_default.isStream(data2)) {
if (Buffer.isBuffer(data2)) {
} else if (utils_default.isArrayBuffer(data2)) {
data2 = Buffer.from(new Uint8Array(data2));
} else if (utils_default.isString(data2)) {
data2 = Buffer.from(data2, "utf-8");
} else {
return reject(new AxiosError_default(
"Data after transformation must be a string, an ArrayBuffer, a Buffer, or a Stream",
AxiosError_default.ERR_BAD_REQUEST,
config
));
}
headers.setContentLength(data2.length, false);
if (config.maxBodyLength > -1 && data2.length > config.maxBodyLength) {
return reject(new AxiosError_default(
"Request body larger than maxBodyLength limit",
AxiosError_default.ERR_BAD_REQUEST,
config
));
}
}
const contentLength = utils_default.toFiniteNumber(headers.getContentLength());
if (utils_default.isArray(maxRate)) {
maxUploadRate = maxRate[0];
maxDownloadRate = maxRate[1];
} else {
maxUploadRate = maxDownloadRate = maxRate;
}
if (data2 && (onUploadProgress || maxUploadRate)) {
if (!utils_default.isStream(data2)) {
data2 = import_stream4.default.Readable.from(data2, { objectMode: false });
}
data2 = import_stream4.default.pipeline([data2, new AxiosTransformStream_default({
maxRate: utils_default.toFiniteNumber(maxUploadRate)
})], utils_default.noop);
onUploadProgress && data2.on("progress", flushOnFinish(
data2,
progressEventDecorator(
contentLength,
progressEventReducer(asyncDecorator(onUploadProgress), false, 3)
)
));
}
let auth = void 0;
if (config.auth) {
const username = config.auth.username || "";
const password = config.auth.password || "";
auth = username + ":" + password;
}
if (!auth && parsed.username) {
const urlUsername = parsed.username;
const urlPassword = parsed.password;
auth = urlUsername + ":" + urlPassword;
}
auth && headers.delete("authorization");
let path;
try {
path = buildURL(
parsed.pathname + parsed.search,
config.params,
config.paramsSerializer
).replace(/^\?/, "");
} catch (err2) {
const customErr = new Error(err2.message);
customErr.config = config;
customErr.url = config.url;
customErr.exists = true;
return reject(customErr);
}
headers.set(
"Accept-Encoding",
"gzip, compress, deflate" + (isBrotliSupported ? ", br" : ""),
false
);
const options = {
path,
method,
headers: headers.toJSON(),
agents: { http: config.httpAgent, https: config.httpsAgent },
auth,
protocol,
family,
beforeRedirect: dispatchBeforeRedirect,
beforeRedirects: {}
};
!utils_default.isUndefined(lookup) && (options.lookup = lookup);
if (config.socketPath) {
options.socketPath = config.socketPath;
} else {
options.hostname = parsed.hostname.startsWith("[") ? parsed.hostname.slice(1, -1) : parsed.hostname;
options.port = parsed.port;
setProxy(options, config.proxy, protocol + "//" + parsed.hostname + (parsed.port ? ":" + parsed.port : "") + options.path);
}
let transport;
const isHttpsRequest = isHttps.test(options.protocol);
options.agent = isHttpsRequest ? config.httpsAgent : config.httpAgent;
if (config.transport) {
transport = config.transport;
} else if (config.maxRedirects === 0) {
transport = isHttpsRequest ? import_https.default : import_http.default;
} else {
if (config.maxRedirects) {
options.maxRedirects = config.maxRedirects;
}
if (config.beforeRedirect) {
options.beforeRedirects.config = config.beforeRedirect;
}
transport = isHttpsRequest ? httpsFollow : httpFollow;
}
if (config.maxBodyLength > -1) {
options.maxBodyLength = config.maxBodyLength;
} else {
options.maxBodyLength = Infinity;
}
if (config.insecureHTTPParser) {
options.insecureHTTPParser = config.insecureHTTPParser;
}
req = transport.request(options, function handleResponse(res) {
if (req.destroyed) return;
const streams = [res];
const responseLength = +res.headers["content-length"];
if (onDownloadProgress || maxDownloadRate) {
const transformStream = new AxiosTransformStream_default({
maxRate: utils_default.toFiniteNumber(maxDownloadRate)
});
onDownloadProgress && transformStream.on("progress", flushOnFinish(
transformStream,
progressEventDecorator(
responseLength,
progressEventReducer(asyncDecorator(onDownloadProgress), true, 3)
)
));
streams.push(transformStream);
}
let responseStream = res;
const lastRequest = res.req || req;
if (config.decompress !== false && res.headers["content-encoding"]) {
if (method === "HEAD" || res.statusCode === 204) {
delete res.headers["content-encoding"];
}
switch ((res.headers["content-encoding"] || "").toLowerCase()) {
/*eslint default-case:0*/
case "gzip":
case "x-gzip":
case "compress":
case "x-compress":
streams.push(import_zlib.default.createUnzip(zlibOptions));
delete res.headers["content-encoding"];
break;
case "deflate":
streams.push(new ZlibHeaderTransformStream_default());
streams.push(import_zlib.default.createUnzip(zlibOptions));
delete res.headers["content-encoding"];
break;
case "br":
if (isBrotliSupported) {
streams.push(import_zlib.default.createBrotliDecompress(brotliOptions));
delete res.headers["content-encoding"];
}
}
}
responseStream = streams.length > 1 ? import_stream4.default.pipeline(streams, utils_default.noop) : streams[0];
const offListeners = import_stream4.default.finished(responseStream, () => {
offListeners();
onFinished();
});
const response = {
status: res.statusCode,
statusText: res.statusMessage,
headers: new AxiosHeaders_default(res.headers),
config,
request: lastRequest
};
if (responseType === "stream") {
response.data = responseStream;
settle(resolve, reject, response);
} else {
const responseBuffer = [];
let totalResponseBytes = 0;
responseStream.on("data", function handleStreamData(chunk) {
responseBuffer.push(chunk);
totalResponseBytes += chunk.length;
if (config.maxContentLength > -1 && totalResponseBytes > config.maxContentLength) {
rejected = true;
responseStream.destroy();
reject(new AxiosError_default(
"maxContentLength size of " + config.maxContentLength + " exceeded",
AxiosError_default.ERR_BAD_RESPONSE,
config,
lastRequest
));
}
});
responseStream.on("aborted", function handlerStreamAborted() {
if (rejected) {
return;
}
const err2 = new AxiosError_default(
"stream has been aborted",
AxiosError_default.ERR_BAD_RESPONSE,
config,
lastRequest
);
responseStream.destroy(err2);
reject(err2);
});
responseStream.on("error", function handleStreamError(err2) {
if (req.destroyed) return;
reject(AxiosError_default.from(err2, null, config, lastRequest));
});
responseStream.on("end", function handleStreamEnd() {
try {
let responseData = responseBuffer.length === 1 ? responseBuffer[0] : Buffer.concat(responseBuffer);
if (responseType !== "arraybuffer") {
responseData = responseData.toString(responseEncoding);
if (!responseEncoding || responseEncoding === "utf8") {
responseData = utils_default.stripBOM(responseData);
}
}
response.data = responseData;
} catch (err2) {
return reject(AxiosError_default.from(err2, null, config, response.request, response));
}
settle(resolve, reject, response);
});
}
emitter.once("abort", (err2) => {
if (!responseStream.destroyed) {
responseStream.emit("error", err2);
responseStream.destroy();
}
});
});
emitter.once("abort", (err2) => {
reject(err2);
req.destroy(err2);
});
req.on("error", function handleRequestError(err2) {
reject(AxiosError_default.from(err2, null, config, req));
});
req.on("socket", function handleRequestSocket(socket) {
socket.setKeepAlive(true, 1e3 * 60);
});
if (config.timeout) {
const timeout = parseInt(config.timeout, 10);
if (Number.isNaN(timeout)) {
reject(new AxiosError_default(
"error trying to parse `config.timeout` to int",
AxiosError_default.ERR_BAD_OPTION_VALUE,
config,
req
));
return;
}
req.setTimeout(timeout, function handleRequestTimeout() {
if (isDone) return;
let timeoutErrorMessage = config.timeout ? "timeout of " + config.timeout + "ms exceeded" : "timeout exceeded";
const transitional2 = config.transitional || transitional_default;
if (config.timeoutErrorMessage) {
timeoutErrorMessage = config.timeoutErrorMessage;
}
reject(new AxiosError_default(
timeoutErrorMessage,
transitional2.clarifyTimeoutError ? AxiosError_default.ETIMEDOUT : AxiosError_default.ECONNABORTED,
config,
req
));
abort();
});
}
if (utils_default.isStream(data2)) {
let ended = false;
let errored = false;
data2.on("end", () => {
ended = true;
});
data2.once("error", (err2) => {
errored = true;
req.destroy(err2);
});
data2.on("close", () => {
if (!ended && !errored) {
abort(new CanceledError_default("Request stream has been aborted", config, req));
}
});
data2.pipe(req);
} else {
req.end(data2);
}
});
};
}
});
// node_modules/axios/lib/helpers/isURLSameOrigin.js
var isURLSameOrigin_default;
var init_isURLSameOrigin = __esm({
"node_modules/axios/lib/helpers/isURLSameOrigin.js"() {
init_platform();
isURLSameOrigin_default = platform_default.hasStandardBrowserEnv ? /* @__PURE__ */ ((origin2, isMSIE) => (url2) => {
url2 = new URL(url2, platform_default.origin);
return origin2.protocol === url2.protocol && origin2.host === url2.host && (isMSIE || origin2.port === url2.port);
})(
new URL(platform_default.origin),
platform_default.navigator && /(msie|trident)/i.test(platform_default.navigator.userAgent)
) : () => true;
}
});
// node_modules/axios/lib/helpers/cookies.js
var cookies_default;
var init_cookies = __esm({
"node_modules/axios/lib/helpers/cookies.js"() {
init_utils();
init_platform();
cookies_default = platform_default.hasStandardBrowserEnv ? (
// Standard browser envs support document.cookie
{
write(name, value, expires, path, domain, secure) {
const cookie = [name + "=" + encodeURIComponent(value)];
utils_default.isNumber(expires) && cookie.push("expires=" + new Date(expires).toGMTString());
utils_default.isString(path) && cookie.push("path=" + path);
utils_default.isString(domain) && cookie.push("domain=" + domain);
secure === true && cookie.push("secure");
document.cookie = cookie.join("; ");
},
read(name) {
const match = document.cookie.match(new RegExp("(^|;\\s*)(" + name + ")=([^;]*)"));
return match ? decodeURIComponent(match[3]) : null;
},
remove(name) {
this.write(name, "", Date.now() - 864e5);
}
}
) : (
// Non-standard browser env (web workers, react-native) lack needed support.
{
write() {
},
read() {
return null;
},
remove() {
}
}
);
}
});
// node_modules/axios/lib/core/mergeConfig.js
function mergeConfig(config1, config2) {
config2 = config2 || {};
const config = {};
function getMergedValue(target, source, prop2, caseless) {
if (utils_default.isPlainObject(target) && utils_default.isPlainObject(source)) {
return utils_default.merge.call({ caseless }, target, source);
} else if (utils_default.isPlainObject(source)) {
return utils_default.merge({}, source);
} else if (utils_default.isArray(source)) {
return source.slice();
}
return source;
}
function mergeDeepProperties(a, b, prop2, caseless) {
if (!utils_default.isUndefined(b)) {
return getMergedValue(a, b, prop2, caseless);
} else if (!utils_default.isUndefined(a)) {
return getMergedValue(void 0, a, prop2, caseless);
}
}
function valueFromConfig2(a, b) {
if (!utils_default.isUndefined(b)) {
return getMergedValue(void 0, b);
}
}
function defaultToConfig2(a, b) {
if (!utils_default.isUndefined(b)) {
return getMergedValue(void 0, b);
} else if (!utils_default.isUndefined(a)) {
return getMergedValue(void 0, a);
}
}
function mergeDirectKeys(a, b, prop2) {
if (prop2 in config2) {
return getMergedValue(a, b);
} else if (prop2 in config1) {
return getMergedValue(void 0, a);
}
}
const mergeMap = {
url: valueFromConfig2,
method: valueFromConfig2,
data: valueFromConfig2,
baseURL: defaultToConfig2,
transformRequest: defaultToConfig2,
transformResponse: defaultToConfig2,
paramsSerializer: defaultToConfig2,
timeout: defaultToConfig2,
timeoutMessage: defaultToConfig2,
withCredentials: defaultToConfig2,
withXSRFToken: defaultToConfig2,
adapter: defaultToConfig2,
responseType: defaultToConfig2,
xsrfCookieName: defaultToConfig2,
xsrfHeaderName: defaultToConfig2,
onUploadProgress: defaultToConfig2,
onDownloadProgress: defaultToConfig2,
decompress: defaultToConfig2,
maxContentLength: defaultToConfig2,
maxBodyLength: defaultToConfig2,
beforeRedirect: defaultToConfig2,
transport: defaultToConfig2,
httpAgent: defaultToConfig2,
httpsAgent: defaultToConfig2,
cancelToken: defaultToConfig2,
socketPath: defaultToConfig2,
responseEncoding: defaultToConfig2,
validateStatus: mergeDirectKeys,
headers: (a, b, prop2) => mergeDeepProperties(headersToObject(a), headersToObject(b), prop2, true)
};
utils_default.forEach(Object.keys(Object.assign({}, config1, config2)), function computeConfigValue(prop2) {
const merge3 = mergeMap[prop2] || mergeDeepProperties;
const configValue = merge3(config1[prop2], config2[prop2], prop2);
utils_default.isUndefined(configValue) && merge3 !== mergeDirectKeys || (config[prop2] = configValue);
});
return config;
}
var headersToObject;
var init_mergeConfig = __esm({
"node_modules/axios/lib/core/mergeConfig.js"() {
"use strict";
init_utils();
init_AxiosHeaders();
headersToObject = (thing) => thing instanceof AxiosHeaders_default ? { ...thing } : thing;
}
});
// node_modules/axios/lib/helpers/resolveConfig.js
var resolveConfig_default;
var init_resolveConfig = __esm({
"node_modules/axios/lib/helpers/resolveConfig.js"() {
init_platform();
init_utils();
init_isURLSameOrigin();
init_cookies();
init_buildFullPath();
init_mergeConfig();
init_AxiosHeaders();
init_buildURL();
resolveConfig_default = (config) => {
const newConfig = mergeConfig({}, config);
let { data: data2, withXSRFToken, xsrfHeaderName, xsrfCookieName, headers, auth } = newConfig;
newConfig.headers = headers = AxiosHeaders_default.from(headers);
newConfig.url = buildURL(buildFullPath(newConfig.baseURL, newConfig.url, newConfig.allowAbsoluteUrls), config.params, config.paramsSerializer);
if (auth) {
headers.set(
"Authorization",
"Basic " + btoa((auth.username || "") + ":" + (auth.password ? unescape(encodeURIComponent(auth.password)) : ""))
);
}
let contentType;
if (utils_default.isFormData(data2)) {
if (platform_default.hasStandardBrowserEnv || platform_default.hasStandardBrowserWebWorkerEnv) {
headers.setContentType(void 0);
} else if ((contentType = headers.getContentType()) !== false) {
const [type, ...tokens] = contentType ? contentType.split(";").map((token) => token.trim()).filter(Boolean) : [];
headers.setContentType([type || "multipart/form-data", ...tokens].join("; "));
}
}
if (platform_default.hasStandardBrowserEnv) {
withXSRFToken && utils_default.isFunction(withXSRFToken) && (withXSRFToken = withXSRFToken(newConfig));
if (withXSRFToken || withXSRFToken !== false && isURLSameOrigin_default(newConfig.url)) {
const xsrfValue = xsrfHeaderName && xsrfCookieName && cookies_default.read(xsrfCookieName);
if (xsrfValue) {
headers.set(xsrfHeaderName, xsrfValue);
}
}
}
return newConfig;
};
}
});
// node_modules/axios/lib/adapters/xhr.js
var isXHRAdapterSupported, xhr_default;
var init_xhr = __esm({
"node_modules/axios/lib/adapters/xhr.js"() {
init_utils();
init_settle();
init_transitional();
init_AxiosError();
init_CanceledError();
init_parseProtocol();
init_platform();
init_AxiosHeaders();
init_progressEventReducer();
init_resolveConfig();
isXHRAdapterSupported = typeof XMLHttpRequest !== "undefined";
xhr_default = isXHRAdapterSupported && function(config) {
return new Promise(function dispatchXhrRequest(resolve, reject) {
const _config = resolveConfig_default(config);
let requestData = _config.data;
const requestHeaders = AxiosHeaders_default.from(_config.headers).normalize();
let { responseType, onUploadProgress, onDownloadProgress } = _config;
let onCanceled;
let uploadThrottled, downloadThrottled;
let flushUpload, flushDownload;
function done() {
flushUpload && flushUpload();
flushDownload && flushDownload();
_config.cancelToken && _config.cancelToken.unsubscribe(onCanceled);
_config.signal && _config.signal.removeEventListener("abort", onCanceled);
}
let request = new XMLHttpRequest();
request.open(_config.method.toUpperCase(), _config.url, true);
request.timeout = _config.timeout;
function onloadend() {
if (!request) {
return;
}
const responseHeaders = AxiosHeaders_default.from(
"getAllResponseHeaders" in request && request.getAllResponseHeaders()
);
const responseData = !responseType || responseType === "text" || responseType === "json" ? request.responseText : request.response;
const response = {
data: responseData,
status: request.status,
statusText: request.statusText,
headers: responseHeaders,
config,
request
};
settle(function _resolve(value) {
resolve(value);
done();
}, function _reject(err2) {
reject(err2);
done();
}, response);
request = null;
}
if ("onloadend" in request) {
request.onloadend = onloadend;
} else {
request.onreadystatechange = function handleLoad() {
if (!request || request.readyState !== 4) {
return;
}
if (request.status === 0 && !(request.responseURL && request.responseURL.indexOf("file:") === 0)) {
return;
}
setTimeout(onloadend);
};
}
request.onabort = function handleAbort() {
if (!request) {
return;
}
reject(new AxiosError_default("Request aborted", AxiosError_default.ECONNABORTED, config, request));
request = null;
};
request.onerror = function handleError() {
reject(new AxiosError_default("Network Error", AxiosError_default.ERR_NETWORK, config, request));
request = null;
};
request.ontimeout = function handleTimeout() {
let timeoutErrorMessage = _config.timeout ? "timeout of " + _config.timeout + "ms exceeded" : "timeout exceeded";
const transitional2 = _config.transitional || transitional_default;
if (_config.timeoutErrorMessage) {
timeoutErrorMessage = _config.timeoutErrorMessage;
}
reject(new AxiosError_default(
timeoutErrorMessage,
transitional2.clarifyTimeoutError ? AxiosError_default.ETIMEDOUT : AxiosError_default.ECONNABORTED,
config,
request
));
request = null;
};
requestData === void 0 && requestHeaders.setContentType(null);
if ("setRequestHeader" in request) {
utils_default.forEach(requestHeaders.toJSON(), function setRequestHeader(val2, key) {
request.setRequestHeader(key, val2);
});
}
if (!utils_default.isUndefined(_config.withCredentials)) {
request.withCredentials = !!_config.withCredentials;
}
if (responseType && responseType !== "json") {
request.responseType = _config.responseType;
}
if (onDownloadProgress) {
[downloadThrottled, flushDownload] = progressEventReducer(onDownloadProgress, true);
request.addEventListener("progress", downloadThrottled);
}
if (onUploadProgress && request.upload) {
[uploadThrottled, flushUpload] = progressEventReducer(onUploadProgress);
request.upload.addEventListener("progress", uploadThrottled);
request.upload.addEventListener("loadend", flushUpload);
}
if (_config.cancelToken || _config.signal) {
onCanceled = (cancel) => {
if (!request) {
return;
}
reject(!cancel || cancel.type ? new CanceledError_default(null, config, request) : cancel);
request.abort();
request = null;
};
_config.cancelToken && _config.cancelToken.subscribe(onCanceled);
if (_config.signal) {
_config.signal.aborted ? onCanceled() : _config.signal.addEventListener("abort", onCanceled);
}
}
const protocol = parseProtocol(_config.url);
if (protocol && platform_default.protocols.indexOf(protocol) === -1) {
reject(new AxiosError_default("Unsupported protocol " + protocol + ":", AxiosError_default.ERR_BAD_REQUEST, config));
return;
}
request.send(requestData || null);
});
};
}
});
// node_modules/axios/lib/helpers/composeSignals.js
var composeSignals, composeSignals_default;
var init_composeSignals = __esm({
"node_modules/axios/lib/helpers/composeSignals.js"() {
init_CanceledError();
init_AxiosError();
init_utils();
composeSignals = (signals, timeout) => {
const { length } = signals = signals ? signals.filter(Boolean) : [];
if (timeout || length) {
let controller = new AbortController();
let aborted;
const onabort = function(reason) {
if (!aborted) {
aborted = true;
unsubscribe();
const err2 = reason instanceof Error ? reason : this.reason;
controller.abort(err2 instanceof AxiosError_default ? err2 : new CanceledError_default(err2 instanceof Error ? err2.message : err2));
}
};
let timer = timeout && setTimeout(() => {
timer = null;
onabort(new AxiosError_default(`timeout ${timeout} of ms exceeded`, AxiosError_default.ETIMEDOUT));
}, timeout);
const unsubscribe = () => {
if (signals) {
timer && clearTimeout(timer);
timer = null;
signals.forEach((signal2) => {
signal2.unsubscribe ? signal2.unsubscribe(onabort) : signal2.removeEventListener("abort", onabort);
});
signals = null;
}
};
signals.forEach((signal2) => signal2.addEventListener("abort", onabort));
const { signal } = controller;
signal.unsubscribe = () => utils_default.asap(unsubscribe);
return signal;
}
};
composeSignals_default = composeSignals;
}
});
// node_modules/axios/lib/helpers/trackStream.js
var streamChunk, readBytes, readStream, trackStream;
var init_trackStream = __esm({
"node_modules/axios/lib/helpers/trackStream.js"() {
streamChunk = function* (chunk, chunkSize) {
let len = chunk.byteLength;
if (!chunkSize || len < chunkSize) {
yield chunk;
return;
}
let pos = 0;
let end2;
while (pos < len) {
end2 = pos + chunkSize;
yield chunk.slice(pos, end2);
pos = end2;
}
};
readBytes = async function* (iterable, chunkSize) {
for await (const chunk of readStream(iterable)) {
yield* streamChunk(chunk, chunkSize);
}
};
readStream = async function* (stream5) {
if (stream5[Symbol.asyncIterator]) {
yield* stream5;
return;
}
const reader = stream5.getReader();
try {
for (; ; ) {
const { done, value } = await reader.read();
if (done) {
break;
}
yield value;
}
} finally {
await reader.cancel();
}
};
trackStream = (stream5, chunkSize, onProgress, onFinish) => {
const iterator = readBytes(stream5, chunkSize);
let bytes = 0;
let done;
let _onFinish = (e) => {
if (!done) {
done = true;
onFinish && onFinish(e);
}
};
return new ReadableStream({
async pull(controller) {
try {
const { done: done2, value } = await iterator.next();
if (done2) {
_onFinish();
controller.close();
return;
}
let len = value.byteLength;
if (onProgress) {
let loadedBytes = bytes += len;
onProgress(loadedBytes);
}
controller.enqueue(new Uint8Array(value));
} catch (err2) {
_onFinish(err2);
throw err2;
}
},
cancel(reason) {
_onFinish(reason);
return iterator.return();
}
}, {
highWaterMark: 2
});
};
}
});
// node_modules/axios/lib/adapters/fetch.js
var isFetchSupported, isReadableStreamSupported, encodeText, test, supportsRequestStream, DEFAULT_CHUNK_SIZE, supportsResponseStream, resolvers, getBodyLength, resolveBodyLength, fetch_default;
var init_fetch = __esm({
"node_modules/axios/lib/adapters/fetch.js"() {
init_platform();
init_utils();
init_AxiosError();
init_composeSignals();
init_trackStream();
init_AxiosHeaders();
init_progressEventReducer();
init_resolveConfig();
init_settle();
isFetchSupported = typeof fetch === "function" && typeof Request === "function" && typeof Response === "function";
isReadableStreamSupported = isFetchSupported && typeof ReadableStream === "function";
encodeText = isFetchSupported && (typeof TextEncoder === "function" ? /* @__PURE__ */ ((encoder) => (str) => encoder.encode(str))(new TextEncoder()) : async (str) => new Uint8Array(await new Response(str).arrayBuffer()));
test = (fn, ...args) => {
try {
return !!fn(...args);
} catch (e) {
return false;
}
};
supportsRequestStream = isReadableStreamSupported && test(() => {
let duplexAccessed = false;
const hasContentType = new Request(platform_default.origin, {
body: new ReadableStream(),
method: "POST",
get duplex() {
duplexAccessed = true;
return "half";
}
}).headers.has("Content-Type");
return duplexAccessed && !hasContentType;
});
DEFAULT_CHUNK_SIZE = 64 * 1024;
supportsResponseStream = isReadableStreamSupported && test(() => utils_default.isReadableStream(new Response("").body));
resolvers = {
stream: supportsResponseStream && ((res) => res.body)
};
isFetchSupported && ((res) => {
["text", "arrayBuffer", "blob", "formData", "stream"].forEach((type) => {
!resolvers[type] && (resolvers[type] = utils_default.isFunction(res[type]) ? (res2) => res2[type]() : (_, config) => {
throw new AxiosError_default(`Response type '${type}' is not supported`, AxiosError_default.ERR_NOT_SUPPORT, config);
});
});
})(new Response());
getBodyLength = async (body) => {
if (body == null) {
return 0;
}
if (utils_default.isBlob(body)) {
return body.size;
}
if (utils_default.isSpecCompliantForm(body)) {
const _request = new Request(platform_default.origin, {
method: "POST",
body
});
return (await _request.arrayBuffer()).byteLength;
}
if (utils_default.isArrayBufferView(body) || utils_default.isArrayBuffer(body)) {
return body.byteLength;
}
if (utils_default.isURLSearchParams(body)) {
body = body + "";
}
if (utils_default.isString(body)) {
return (await encodeText(body)).byteLength;
}
};
resolveBodyLength = async (headers, body) => {
const length = utils_default.toFiniteNumber(headers.getContentLength());
return length == null ? getBodyLength(body) : length;
};
fetch_default = isFetchSupported && (async (config) => {
let {
url: url2,
method,
data: data2,
signal,
cancelToken,
timeout,
onDownloadProgress,
onUploadProgress,
responseType,
headers,
withCredentials = "same-origin",
fetchOptions
} = resolveConfig_default(config);
responseType = responseType ? (responseType + "").toLowerCase() : "text";
let composedSignal = composeSignals_default([signal, cancelToken && cancelToken.toAbortSignal()], timeout);
let request;
const unsubscribe = composedSignal && composedSignal.unsubscribe && (() => {
composedSignal.unsubscribe();
});
let requestContentLength;
try {
if (onUploadProgress && supportsRequestStream && method !== "get" && method !== "head" && (requestContentLength = await resolveBodyLength(headers, data2)) !== 0) {
let _request = new Request(url2, {
method: "POST",
body: data2,
duplex: "half"
});
let contentTypeHeader;
if (utils_default.isFormData(data2) && (contentTypeHeader = _request.headers.get("content-type"))) {
headers.setContentType(contentTypeHeader);
}
if (_request.body) {
const [onProgress, flush] = progressEventDecorator(
requestContentLength,
progressEventReducer(asyncDecorator(onUploadProgress))
);
data2 = trackStream(_request.body, DEFAULT_CHUNK_SIZE, onProgress, flush);
}
}
if (!utils_default.isString(withCredentials)) {
withCredentials = withCredentials ? "include" : "omit";
}
const isCredentialsSupported = "credentials" in Request.prototype;
request = new Request(url2, {
...fetchOptions,
signal: composedSignal,
method: method.toUpperCase(),
headers: headers.normalize().toJSON(),
body: data2,
duplex: "half",
credentials: isCredentialsSupported ? withCredentials : void 0
});
let response = await fetch(request);
const isStreamResponse = supportsResponseStream && (responseType === "stream" || responseType === "response");
if (supportsResponseStream && (onDownloadProgress || isStreamResponse && unsubscribe)) {
const options = {};
["status", "statusText", "headers"].forEach((prop2) => {
options[prop2] = response[prop2];
});
const responseContentLength = utils_default.toFiniteNumber(response.headers.get("content-length"));
const [onProgress, flush] = onDownloadProgress && progressEventDecorator(
responseContentLength,
progressEventReducer(asyncDecorator(onDownloadProgress), true)
) || [];
response = new Response(
trackStream(response.body, DEFAULT_CHUNK_SIZE, onProgress, () => {
flush && flush();
unsubscribe && unsubscribe();
}),
options
);
}
responseType = responseType || "text";
let responseData = await resolvers[utils_default.findKey(resolvers, responseType) || "text"](response, config);
!isStreamResponse && unsubscribe && unsubscribe();
return await new Promise((resolve, reject) => {
settle(resolve, reject, {
data: responseData,
headers: AxiosHeaders_default.from(response.headers),
status: response.status,
statusText: response.statusText,
config,
request
});
});
} catch (err2) {
unsubscribe && unsubscribe();
if (err2 && err2.name === "TypeError" && /fetch/i.test(err2.message)) {
throw Object.assign(
new AxiosError_default("Network Error", AxiosError_default.ERR_NETWORK, config, request),
{
cause: err2.cause || err2
}
);
}
throw AxiosError_default.from(err2, err2 && err2.code, config, request);
}
});
}
});
// node_modules/axios/lib/adapters/adapters.js
var knownAdapters, renderReason, isResolvedHandle, adapters_default;
var init_adapters = __esm({
"node_modules/axios/lib/adapters/adapters.js"() {
init_utils();
init_http();
init_xhr();
init_fetch();
init_AxiosError();
knownAdapters = {
http: http_default,
xhr: xhr_default,
fetch: fetch_default
};
utils_default.forEach(knownAdapters, (fn, value) => {
if (fn) {
try {
Object.defineProperty(fn, "name", { value });
} catch (e) {
}
Object.defineProperty(fn, "adapterName", { value });
}
});
renderReason = (reason) => `- ${reason}`;
isResolvedHandle = (adapter2) => utils_default.isFunction(adapter2) || adapter2 === null || adapter2 === false;
adapters_default = {
getAdapter: (adapters) => {
adapters = utils_default.isArray(adapters) ? adapters : [adapters];
const { length } = adapters;
let nameOrAdapter;
let adapter2;
const rejectedReasons = {};
for (let i = 0; i < length; i++) {
nameOrAdapter = adapters[i];
let id;
adapter2 = nameOrAdapter;
if (!isResolvedHandle(nameOrAdapter)) {
adapter2 = knownAdapters[(id = String(nameOrAdapter)).toLowerCase()];
if (adapter2 === void 0) {
throw new AxiosError_default(`Unknown adapter '${id}'`);
}
}
if (adapter2) {
break;
}
rejectedReasons[id || "#" + i] = adapter2;
}
if (!adapter2) {
const reasons = Object.entries(rejectedReasons).map(
([id, state]) => `adapter ${id} ` + (state === false ? "is not supported by the environment" : "is not available in the build")
);
let s = length ? reasons.length > 1 ? "since :\n" + reasons.map(renderReason).join("\n") : " " + renderReason(reasons[0]) : "as no adapter specified";
throw new AxiosError_default(
`There is no suitable adapter to dispatch the request ` + s,
"ERR_NOT_SUPPORT"
);
}
return adapter2;
},
adapters: knownAdapters
};
}
});
// node_modules/axios/lib/core/dispatchRequest.js
function throwIfCancellationRequested(config) {
if (config.cancelToken) {
config.cancelToken.throwIfRequested();
}
if (config.signal && config.signal.aborted) {
throw new CanceledError_default(null, config);
}
}
function dispatchRequest(config) {
throwIfCancellationRequested(config);
config.headers = AxiosHeaders_default.from(config.headers);
config.data = transformData.call(
config,
config.transformRequest
);
if (["post", "put", "patch"].indexOf(config.method) !== -1) {
config.headers.setContentType("application/x-www-form-urlencoded", false);
}
const adapter2 = adapters_default.getAdapter(config.adapter || defaults_default.adapter);
return adapter2(config).then(function onAdapterResolution(response) {
throwIfCancellationRequested(config);
response.data = transformData.call(
config,
config.transformResponse,
response
);
response.headers = AxiosHeaders_default.from(response.headers);
return response;
}, function onAdapterRejection(reason) {
if (!isCancel(reason)) {
throwIfCancellationRequested(config);
if (reason && reason.response) {
reason.response.data = transformData.call(
config,
config.transformResponse,
reason.response
);
reason.response.headers = AxiosHeaders_default.from(reason.response.headers);
}
}
return Promise.reject(reason);
});
}
var init_dispatchRequest = __esm({
"node_modules/axios/lib/core/dispatchRequest.js"() {
"use strict";
init_transformData();
init_isCancel();
init_defaults();
init_CanceledError();
init_AxiosHeaders();
init_adapters();
}
});
// node_modules/axios/lib/helpers/validator.js
function assertOptions(options, schema, allowUnknown) {
if (typeof options !== "object") {
throw new AxiosError_default("options must be an object", AxiosError_default.ERR_BAD_OPTION_VALUE);
}
const keys = Object.keys(options);
let i = keys.length;
while (i-- > 0) {
const opt = keys[i];
const validator = schema[opt];
if (validator) {
const value = options[opt];
const result = value === void 0 || validator(value, opt, options);
if (result !== true) {
throw new AxiosError_default("option " + opt + " must be " + result, AxiosError_default.ERR_BAD_OPTION_VALUE);
}
continue;
}
if (allowUnknown !== true) {
throw new AxiosError_default("Unknown option " + opt, AxiosError_default.ERR_BAD_OPTION);
}
}
}
var validators, deprecatedWarnings, validator_default;
var init_validator = __esm({
"node_modules/axios/lib/helpers/validator.js"() {
"use strict";
init_data();
init_AxiosError();
validators = {};
["object", "boolean", "number", "function", "string", "symbol"].forEach((type, i) => {
validators[type] = function validator(thing) {
return typeof thing === type || "a" + (i < 1 ? "n " : " ") + type;
};
});
deprecatedWarnings = {};
validators.transitional = function transitional(validator, version, message) {
function formatMessage(opt, desc) {
return "[Axios v" + VERSION + "] Transitional option '" + opt + "'" + desc + (message ? ". " + message : "");
}
return (value, opt, opts) => {
if (validator === false) {
throw new AxiosError_default(
formatMessage(opt, " has been removed" + (version ? " in " + version : "")),
AxiosError_default.ERR_DEPRECATED
);
}
if (version && !deprecatedWarnings[opt]) {
deprecatedWarnings[opt] = true;
console.warn(
formatMessage(
opt,
" has been deprecated since v" + version + " and will be removed in the near future"
)
);
}
return validator ? validator(value, opt, opts) : true;
};
};
validators.spelling = function spelling(correctSpelling) {
return (value, opt) => {
console.warn(`${opt} is likely a misspelling of ${correctSpelling}`);
return true;
};
};
validator_default = {
assertOptions,
validators
};
}
});
// node_modules/axios/lib/core/Axios.js
var validators2, Axios, Axios_default;
var init_Axios = __esm({
"node_modules/axios/lib/core/Axios.js"() {
"use strict";
init_utils();
init_buildURL();
init_InterceptorManager();
init_dispatchRequest();
init_mergeConfig();
init_buildFullPath();
init_validator();
init_AxiosHeaders();
validators2 = validator_default.validators;
Axios = class {
constructor(instanceConfig) {
this.defaults = instanceConfig;
this.interceptors = {
request: new InterceptorManager_default(),
response: new InterceptorManager_default()
};
}
/**
* Dispatch a request
*
* @param {String|Object} configOrUrl The config specific for this request (merged with this.defaults)
* @param {?Object} config
*
* @returns {Promise} The Promise to be fulfilled
*/
async request(configOrUrl, config) {
try {
return await this._request(configOrUrl, config);
} catch (err2) {
if (err2 instanceof Error) {
let dummy = {};
Error.captureStackTrace ? Error.captureStackTrace(dummy) : dummy = new Error();
const stack = dummy.stack ? dummy.stack.replace(/^.+\n/, "") : "";
try {
if (!err2.stack) {
err2.stack = stack;
} else if (stack && !String(err2.stack).endsWith(stack.replace(/^.+\n.+\n/, ""))) {
err2.stack += "\n" + stack;
}
} catch (e) {
}
}
throw err2;
}
}
_request(configOrUrl, config) {
if (typeof configOrUrl === "string") {
config = config || {};
config.url = configOrUrl;
} else {
config = configOrUrl || {};
}
config = mergeConfig(this.defaults, config);
const { transitional: transitional2, paramsSerializer, headers } = config;
if (transitional2 !== void 0) {
validator_default.assertOptions(transitional2, {
silentJSONParsing: validators2.transitional(validators2.boolean),
forcedJSONParsing: validators2.transitional(validators2.boolean),
clarifyTimeoutError: validators2.transitional(validators2.boolean)
}, false);
}
if (paramsSerializer != null) {
if (utils_default.isFunction(paramsSerializer)) {
config.paramsSerializer = {
serialize: paramsSerializer
};
} else {
validator_default.assertOptions(paramsSerializer, {
encode: validators2.function,
serialize: validators2.function
}, true);
}
}
if (config.allowAbsoluteUrls !== void 0) {
} else if (this.defaults.allowAbsoluteUrls !== void 0) {
config.allowAbsoluteUrls = this.defaults.allowAbsoluteUrls;
} else {
config.allowAbsoluteUrls = true;
}
validator_default.assertOptions(config, {
baseUrl: validators2.spelling("baseURL"),
withXsrfToken: validators2.spelling("withXSRFToken")
}, true);
config.method = (config.method || this.defaults.method || "get").toLowerCase();
let contextHeaders = headers && utils_default.merge(
headers.common,
headers[config.method]
);
headers && utils_default.forEach(
["delete", "get", "head", "post", "put", "patch", "common"],
(method) => {
delete headers[method];
}
);
config.headers = AxiosHeaders_default.concat(contextHeaders, headers);
const requestInterceptorChain = [];
let synchronousRequestInterceptors = true;
this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {
if (typeof interceptor.runWhen === "function" && interceptor.runWhen(config) === false) {
return;
}
synchronousRequestInterceptors = synchronousRequestInterceptors && interceptor.synchronous;
requestInterceptorChain.unshift(interceptor.fulfilled, interceptor.rejected);
});
const responseInterceptorChain = [];
this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {
responseInterceptorChain.push(interceptor.fulfilled, interceptor.rejected);
});
let promise;
let i = 0;
let len;
if (!synchronousRequestInterceptors) {
const chain = [dispatchRequest.bind(this), void 0];
chain.unshift.apply(chain, requestInterceptorChain);
chain.push.apply(chain, responseInterceptorChain);
len = chain.length;
promise = Promise.resolve(config);
while (i < len) {
promise = promise.then(chain[i++], chain[i++]);
}
return promise;
}
len = requestInterceptorChain.length;
let newConfig = config;
i = 0;
while (i < len) {
const onFulfilled = requestInterceptorChain[i++];
const onRejected = requestInterceptorChain[i++];
try {
newConfig = onFulfilled(newConfig);
} catch (error) {
onRejected.call(this, error);
break;
}
}
try {
promise = dispatchRequest.call(this, newConfig);
} catch (error) {
return Promise.reject(error);
}
i = 0;
len = responseInterceptorChain.length;
while (i < len) {
promise = promise.then(responseInterceptorChain[i++], responseInterceptorChain[i++]);
}
return promise;
}
getUri(config) {
config = mergeConfig(this.defaults, config);
const fullPath = buildFullPath(config.baseURL, config.url, config.allowAbsoluteUrls);
return buildURL(fullPath, config.params, config.paramsSerializer);
}
};
utils_default.forEach(["delete", "get", "head", "options"], function forEachMethodNoData(method) {
Axios.prototype[method] = function(url2, config) {
return this.request(mergeConfig(config || {}, {
method,
url: url2,
data: (config || {}).data
}));
};
});
utils_default.forEach(["post", "put", "patch"], function forEachMethodWithData(method) {
function generateHTTPMethod(isForm) {
return function httpMethod(url2, data2, config) {
return this.request(mergeConfig(config || {}, {
method,
headers: isForm ? {
"Content-Type": "multipart/form-data"
} : {},
url: url2,
data: data2
}));
};
}
Axios.prototype[method] = generateHTTPMethod();
Axios.prototype[method + "Form"] = generateHTTPMethod(true);
});
Axios_default = Axios;
}
});
// node_modules/axios/lib/cancel/CancelToken.js
var CancelToken, CancelToken_default;
var init_CancelToken = __esm({
"node_modules/axios/lib/cancel/CancelToken.js"() {
"use strict";
init_CanceledError();
CancelToken = class _CancelToken {
constructor(executor) {
if (typeof executor !== "function") {
throw new TypeError("executor must be a function.");
}
let resolvePromise;
this.promise = new Promise(function promiseExecutor(resolve) {
resolvePromise = resolve;
});
const token = this;
this.promise.then((cancel) => {
if (!token._listeners) return;
let i = token._listeners.length;
while (i-- > 0) {
token._listeners[i](cancel);
}
token._listeners = null;
});
this.promise.then = (onfulfilled) => {
let _resolve;
const promise = new Promise((resolve) => {
token.subscribe(resolve);
_resolve = resolve;
}).then(onfulfilled);
promise.cancel = function reject() {
token.unsubscribe(_resolve);
};
return promise;
};
executor(function cancel(message, config, request) {
if (token.reason) {
return;
}
token.reason = new CanceledError_default(message, config, request);
resolvePromise(token.reason);
});
}
/**
* Throws a `CanceledError` if cancellation has been requested.
*/
throwIfRequested() {
if (this.reason) {
throw this.reason;
}
}
/**
* Subscribe to the cancel signal
*/
subscribe(listener) {
if (this.reason) {
listener(this.reason);
return;
}
if (this._listeners) {
this._listeners.push(listener);
} else {
this._listeners = [listener];
}
}
/**
* Unsubscribe from the cancel signal
*/
unsubscribe(listener) {
if (!this._listeners) {
return;
}
const index2 = this._listeners.indexOf(listener);
if (index2 !== -1) {
this._listeners.splice(index2, 1);
}
}
toAbortSignal() {
const controller = new AbortController();
const abort = (err2) => {
controller.abort(err2);
};
this.subscribe(abort);
controller.signal.unsubscribe = () => this.unsubscribe(abort);
return controller.signal;
}
/**
* Returns an object that contains a new `CancelToken` and a function that, when called,
* cancels the `CancelToken`.
*/
static source() {
let cancel;
const token = new _CancelToken(function executor(c) {
cancel = c;
});
return {
token,
cancel
};
}
};
CancelToken_default = CancelToken;
}
});
// node_modules/axios/lib/helpers/spread.js
function spread(callback) {
return function wrap2(arr) {
return callback.apply(null, arr);
};
}
var init_spread = __esm({
"node_modules/axios/lib/helpers/spread.js"() {
"use strict";
}
});
// node_modules/axios/lib/helpers/isAxiosError.js
function isAxiosError(payload) {
return utils_default.isObject(payload) && payload.isAxiosError === true;
}
var init_isAxiosError = __esm({
"node_modules/axios/lib/helpers/isAxiosError.js"() {
"use strict";
init_utils();
}
});
// node_modules/axios/lib/helpers/HttpStatusCode.js
var HttpStatusCode, HttpStatusCode_default;
var init_HttpStatusCode = __esm({
"node_modules/axios/lib/helpers/HttpStatusCode.js"() {
HttpStatusCode = {
Continue: 100,
SwitchingProtocols: 101,
Processing: 102,
EarlyHints: 103,
Ok: 200,
Created: 201,
Accepted: 202,
NonAuthoritativeInformation: 203,
NoContent: 204,
ResetContent: 205,
PartialContent: 206,
MultiStatus: 207,
AlreadyReported: 208,
ImUsed: 226,
MultipleChoices: 300,
MovedPermanently: 301,
Found: 302,
SeeOther: 303,
NotModified: 304,
UseProxy: 305,
Unused: 306,
TemporaryRedirect: 307,
PermanentRedirect: 308,
BadRequest: 400,
Unauthorized: 401,
PaymentRequired: 402,
Forbidden: 403,
NotFound: 404,
MethodNotAllowed: 405,
NotAcceptable: 406,
ProxyAuthenticationRequired: 407,
RequestTimeout: 408,
Conflict: 409,
Gone: 410,
LengthRequired: 411,
PreconditionFailed: 412,
PayloadTooLarge: 413,
UriTooLong: 414,
UnsupportedMediaType: 415,
RangeNotSatisfiable: 416,
ExpectationFailed: 417,
ImATeapot: 418,
MisdirectedRequest: 421,
UnprocessableEntity: 422,
Locked: 423,
FailedDependency: 424,
TooEarly: 425,
UpgradeRequired: 426,
PreconditionRequired: 428,
TooManyRequests: 429,
RequestHeaderFieldsTooLarge: 431,
UnavailableForLegalReasons: 451,
InternalServerError: 500,
NotImplemented: 501,
BadGateway: 502,
ServiceUnavailable: 503,
GatewayTimeout: 504,
HttpVersionNotSupported: 505,
VariantAlsoNegotiates: 506,
InsufficientStorage: 507,
LoopDetected: 508,
NotExtended: 510,
NetworkAuthenticationRequired: 511
};
Object.entries(HttpStatusCode).forEach(([key, value]) => {
HttpStatusCode[value] = key;
});
HttpStatusCode_default = HttpStatusCode;
}
});
// node_modules/axios/lib/axios.js
function createInstance(defaultConfig) {
const context = new Axios_default(defaultConfig);
const instance = bind(Axios_default.prototype.request, context);
utils_default.extend(instance, Axios_default.prototype, context, { allOwnKeys: true });
utils_default.extend(instance, context, null, { allOwnKeys: true });
instance.create = function create(instanceConfig) {
return createInstance(mergeConfig(defaultConfig, instanceConfig));
};
return instance;
}
var axios, axios_default;
var init_axios = __esm({
"node_modules/axios/lib/axios.js"() {
"use strict";
init_utils();
init_bind();
init_Axios();
init_mergeConfig();
init_defaults();
init_formDataToJSON();
init_CanceledError();
init_CancelToken();
init_isCancel();
init_data();
init_toFormData();
init_AxiosError();
init_spread();
init_isAxiosError();
init_AxiosHeaders();
init_adapters();
init_HttpStatusCode();
axios = createInstance(defaults_default);
axios.Axios = Axios_default;
axios.CanceledError = CanceledError_default;
axios.CancelToken = CancelToken_default;
axios.isCancel = isCancel;
axios.VERSION = VERSION;
axios.toFormData = toFormData_default;
axios.AxiosError = AxiosError_default;
axios.Cancel = axios.CanceledError;
axios.all = function all(promises) {
return Promise.all(promises);
};
axios.spread = spread;
axios.isAxiosError = isAxiosError;
axios.mergeConfig = mergeConfig;
axios.AxiosHeaders = AxiosHeaders_default;
axios.formToJSON = (thing) => formDataToJSON_default(utils_default.isHTMLForm(thing) ? new FormData(thing) : thing);
axios.getAdapter = adapters_default.getAdapter;
axios.HttpStatusCode = HttpStatusCode_default;
axios.default = axios;
axios_default = axios;
}
});
// node_modules/axios/index.js
var Axios2, AxiosError2, CanceledError2, isCancel2, CancelToken2, VERSION2, all2, Cancel, isAxiosError2, spread2, toFormData2, AxiosHeaders2, HttpStatusCode2, formToJSON, getAdapter, mergeConfig2;
var init_axios2 = __esm({
"node_modules/axios/index.js"() {
init_axios();
({
Axios: Axios2,
AxiosError: AxiosError2,
CanceledError: CanceledError2,
isCancel: isCancel2,
CancelToken: CancelToken2,
VERSION: VERSION2,
all: all2,
Cancel,
isAxiosError: isAxiosError2,
spread: spread2,
toFormData: toFormData2,
AxiosHeaders: AxiosHeaders2,
HttpStatusCode: HttpStatusCode2,
formToJSON,
getAdapter,
mergeConfig: mergeConfig2
} = axios_default);
}
});
// node_modules/cheerio/dist/esm/options.js
function flattenOptions(options, baseOptions) {
if (!options) {
return baseOptions !== null && baseOptions !== void 0 ? baseOptions : defaultOpts;
}
const opts = {
_useHtmlParser2: !!options.xmlMode,
...baseOptions,
...options
};
if (options.xml) {
opts._useHtmlParser2 = true;
opts.xmlMode = true;
if (options.xml !== true) {
Object.assign(opts, options.xml);
}
} else if (options.xmlMode) {
opts._useHtmlParser2 = true;
}
return opts;
}
var defaultOpts;
var init_options = __esm({
"node_modules/cheerio/dist/esm/options.js"() {
defaultOpts = {
_useHtmlParser2: false
};
}
});
// node_modules/domelementtype/lib/esm/index.js
function isTag(elem) {
return elem.type === ElementType.Tag || elem.type === ElementType.Script || elem.type === ElementType.Style;
}
var ElementType, Root, Text, Directive, Comment, Script, Style, Tag, CDATA, Doctype;
var init_esm = __esm({
"node_modules/domelementtype/lib/esm/index.js"() {
(function(ElementType2) {
ElementType2["Root"] = "root";
ElementType2["Text"] = "text";
ElementType2["Directive"] = "directive";
ElementType2["Comment"] = "comment";
ElementType2["Script"] = "script";
ElementType2["Style"] = "style";
ElementType2["Tag"] = "tag";
ElementType2["CDATA"] = "cdata";
ElementType2["Doctype"] = "doctype";
})(ElementType || (ElementType = {}));
Root = ElementType.Root;
Text = ElementType.Text;
Directive = ElementType.Directive;
Comment = ElementType.Comment;
Script = ElementType.Script;
Style = ElementType.Style;
Tag = ElementType.Tag;
CDATA = ElementType.CDATA;
Doctype = ElementType.Doctype;
}
});
// node_modules/domhandler/lib/esm/node.js
function isTag2(node) {
return isTag(node);
}
function isCDATA(node) {
return node.type === ElementType.CDATA;
}
function isText(node) {
return node.type === ElementType.Text;
}
function isComment(node) {
return node.type === ElementType.Comment;
}
function isDirective(node) {
return node.type === ElementType.Directive;
}
function isDocument(node) {
return node.type === ElementType.Root;
}
function hasChildren(node) {
return Object.prototype.hasOwnProperty.call(node, "children");
}
function cloneNode(node, recursive = false) {
let result;
if (isText(node)) {
result = new Text2(node.data);
} else if (isComment(node)) {
result = new Comment2(node.data);
} else if (isTag2(node)) {
const children2 = recursive ? cloneChildren(node.children) : [];
const clone2 = new Element(node.name, { ...node.attribs }, children2);
children2.forEach((child) => child.parent = clone2);
if (node.namespace != null) {
clone2.namespace = node.namespace;
}
if (node["x-attribsNamespace"]) {
clone2["x-attribsNamespace"] = { ...node["x-attribsNamespace"] };
}
if (node["x-attribsPrefix"]) {
clone2["x-attribsPrefix"] = { ...node["x-attribsPrefix"] };
}
result = clone2;
} else if (isCDATA(node)) {
const children2 = recursive ? cloneChildren(node.children) : [];
const clone2 = new CDATA2(children2);
children2.forEach((child) => child.parent = clone2);
result = clone2;
} else if (isDocument(node)) {
const children2 = recursive ? cloneChildren(node.children) : [];
const clone2 = new Document(children2);
children2.forEach((child) => child.parent = clone2);
if (node["x-mode"]) {
clone2["x-mode"] = node["x-mode"];
}
result = clone2;
} else if (isDirective(node)) {
const instruction = new ProcessingInstruction(node.name, node.data);
if (node["x-name"] != null) {
instruction["x-name"] = node["x-name"];
instruction["x-publicId"] = node["x-publicId"];
instruction["x-systemId"] = node["x-systemId"];
}
result = instruction;
} else {
throw new Error(`Not implemented yet: ${node.type}`);
}
result.startIndex = node.startIndex;
result.endIndex = node.endIndex;
if (node.sourceCodeLocation != null) {
result.sourceCodeLocation = node.sourceCodeLocation;
}
return result;
}
function cloneChildren(childs) {
const children2 = childs.map((child) => cloneNode(child, true));
for (let i = 1; i < children2.length; i++) {
children2[i].prev = children2[i - 1];
children2[i - 1].next = children2[i];
}
return children2;
}
var Node, DataNode, Text2, Comment2, ProcessingInstruction, NodeWithChildren, CDATA2, Document, Element;
var init_node2 = __esm({
"node_modules/domhandler/lib/esm/node.js"() {
init_esm();
Node = class {
constructor() {
this.parent = null;
this.prev = null;
this.next = null;
this.startIndex = null;
this.endIndex = null;
}
// Read-write aliases for properties
/**
* Same as {@link parent}.
* [DOM spec](https://dom.spec.whatwg.org)-compatible alias.
*/
get parentNode() {
return this.parent;
}
set parentNode(parent2) {
this.parent = parent2;
}
/**
* Same as {@link prev}.
* [DOM spec](https://dom.spec.whatwg.org)-compatible alias.
*/
get previousSibling() {
return this.prev;
}
set previousSibling(prev2) {
this.prev = prev2;
}
/**
* Same as {@link next}.
* [DOM spec](https://dom.spec.whatwg.org)-compatible alias.
*/
get nextSibling() {
return this.next;
}
set nextSibling(next2) {
this.next = next2;
}
/**
* Clone this node, and optionally its children.
*
* @param recursive Clone child nodes as well.
* @returns A clone of the node.
*/
cloneNode(recursive = false) {
return cloneNode(this, recursive);
}
};
DataNode = class extends Node {
/**
* @param data The content of the data node
*/
constructor(data2) {
super();
this.data = data2;
}
/**
* Same as {@link data}.
* [DOM spec](https://dom.spec.whatwg.org)-compatible alias.
*/
get nodeValue() {
return this.data;
}
set nodeValue(data2) {
this.data = data2;
}
};
Text2 = class extends DataNode {
constructor() {
super(...arguments);
this.type = ElementType.Text;
}
get nodeType() {
return 3;
}
};
Comment2 = class extends DataNode {
constructor() {
super(...arguments);
this.type = ElementType.Comment;
}
get nodeType() {
return 8;
}
};
ProcessingInstruction = class extends DataNode {
constructor(name, data2) {
super(data2);
this.name = name;
this.type = ElementType.Directive;
}
get nodeType() {
return 1;
}
};
NodeWithChildren = class extends Node {
/**
* @param children Children of the node. Only certain node types can have children.
*/
constructor(children2) {
super();
this.children = children2;
}
// Aliases
/** First child of the node. */
get firstChild() {
var _a2;
return (_a2 = this.children[0]) !== null && _a2 !== void 0 ? _a2 : null;
}
/** Last child of the node. */
get lastChild() {
return this.children.length > 0 ? this.children[this.children.length - 1] : null;
}
/**
* Same as {@link children}.
* [DOM spec](https://dom.spec.whatwg.org)-compatible alias.
*/
get childNodes() {
return this.children;
}
set childNodes(children2) {
this.children = children2;
}
};
CDATA2 = class extends NodeWithChildren {
constructor() {
super(...arguments);
this.type = ElementType.CDATA;
}
get nodeType() {
return 4;
}
};
Document = class extends NodeWithChildren {
constructor() {
super(...arguments);
this.type = ElementType.Root;
}
get nodeType() {
return 9;
}
};
Element = class extends NodeWithChildren {
/**
* @param name Name of the tag, eg. `div`, `span`.
* @param attribs Object mapping attribute names to attribute values.
* @param children Children of the node.
*/
constructor(name, attribs, children2 = [], type = name === "script" ? ElementType.Script : name === "style" ? ElementType.Style : ElementType.Tag) {
super(children2);
this.name = name;
this.attribs = attribs;
this.type = type;
}
get nodeType() {
return 1;
}
// DOM Level 1 aliases
/**
* Same as {@link name}.
* [DOM spec](https://dom.spec.whatwg.org)-compatible alias.
*/
get tagName() {
return this.name;
}
set tagName(name) {
this.name = name;
}
get attributes() {
return Object.keys(this.attribs).map((name) => {
var _a2, _b;
return {
name,
value: this.attribs[name],
namespace: (_a2 = this["x-attribsNamespace"]) === null || _a2 === void 0 ? void 0 : _a2[name],
prefix: (_b = this["x-attribsPrefix"]) === null || _b === void 0 ? void 0 : _b[name]
};
});
}
};
}
});
// node_modules/domhandler/lib/esm/index.js
var defaultOpts2, DomHandler;
var init_esm2 = __esm({
"node_modules/domhandler/lib/esm/index.js"() {
init_esm();
init_node2();
init_node2();
defaultOpts2 = {
withStartIndices: false,
withEndIndices: false,
xmlMode: false
};
DomHandler = class {
/**
* @param callback Called once parsing has completed.
* @param options Settings for the handler.
* @param elementCB Callback whenever a tag is closed.
*/
constructor(callback, options, elementCB) {
this.dom = [];
this.root = new Document(this.dom);
this.done = false;
this.tagStack = [this.root];
this.lastNode = null;
this.parser = null;
if (typeof options === "function") {
elementCB = options;
options = defaultOpts2;
}
if (typeof callback === "object") {
options = callback;
callback = void 0;
}
this.callback = callback !== null && callback !== void 0 ? callback : null;
this.options = options !== null && options !== void 0 ? options : defaultOpts2;
this.elementCB = elementCB !== null && elementCB !== void 0 ? elementCB : null;
}
onparserinit(parser) {
this.parser = parser;
}
// Resets the handler back to starting state
onreset() {
this.dom = [];
this.root = new Document(this.dom);
this.done = false;
this.tagStack = [this.root];
this.lastNode = null;
this.parser = null;
}
// Signals the handler that parsing is done
onend() {
if (this.done)
return;
this.done = true;
this.parser = null;
this.handleCallback(null);
}
onerror(error) {
this.handleCallback(error);
}
onclosetag() {
this.lastNode = null;
const elem = this.tagStack.pop();
if (this.options.withEndIndices) {
elem.endIndex = this.parser.endIndex;
}
if (this.elementCB)
this.elementCB(elem);
}
onopentag(name, attribs) {
const type = this.options.xmlMode ? ElementType.Tag : void 0;
const element = new Element(name, attribs, void 0, type);
this.addNode(element);
this.tagStack.push(element);
}
ontext(data2) {
const { lastNode } = this;
if (lastNode && lastNode.type === ElementType.Text) {
lastNode.data += data2;
if (this.options.withEndIndices) {
lastNode.endIndex = this.parser.endIndex;
}
} else {
const node = new Text2(data2);
this.addNode(node);
this.lastNode = node;
}
}
oncomment(data2) {
if (this.lastNode && this.lastNode.type === ElementType.Comment) {
this.lastNode.data += data2;
return;
}
const node = new Comment2(data2);
this.addNode(node);
this.lastNode = node;
}
oncommentend() {
this.lastNode = null;
}
oncdatastart() {
const text3 = new Text2("");
const node = new CDATA2([text3]);
this.addNode(node);
text3.parent = node;
this.lastNode = text3;
}
oncdataend() {
this.lastNode = null;
}
onprocessinginstruction(name, data2) {
const node = new ProcessingInstruction(name, data2);
this.addNode(node);
}
handleCallback(error) {
if (typeof this.callback === "function") {
this.callback(error, this.dom);
} else if (error) {
throw error;
}
}
addNode(node) {
const parent2 = this.tagStack[this.tagStack.length - 1];
const previousSibling = parent2.children[parent2.children.length - 1];
if (this.options.withStartIndices) {
node.startIndex = this.parser.startIndex;
}
if (this.options.withEndIndices) {
node.endIndex = this.parser.endIndex;
}
parent2.children.push(node);
if (previousSibling) {
node.prev = previousSibling;
previousSibling.next = node;
}
node.parent = parent2;
this.lastNode = null;
}
};
}
});
// node_modules/entities/lib/esm/generated/decode-data-html.js
var decode_data_html_default;
var init_decode_data_html = __esm({
"node_modules/entities/lib/esm/generated/decode-data-html.js"() {
decode_data_html_default = new Uint16Array(
// prettier-ignore
'\u1D41<\xD5\u0131\u028A\u049D\u057B\u05D0\u0675\u06DE\u07A2\u07D6\u080F\u0A4A\u0A91\u0DA1\u0E6D\u0F09\u0F26\u10CA\u1228\u12E1\u1415\u149D\u14C3\u14DF\u1525\0\0\0\0\0\0\u156B\u16CD\u198D\u1C12\u1DDD\u1F7E\u2060\u21B0\u228D\u23C0\u23FB\u2442\u2824\u2912\u2D08\u2E48\u2FCE\u3016\u32BA\u3639\u37AC\u38FE\u3A28\u3A71\u3AE0\u3B2E\u0800EMabcfglmnoprstu\\bfms\x7F\x84\x8B\x90\x95\x98\xA6\xB3\xB9\xC8\xCFlig\u803B\xC6\u40C6P\u803B&\u4026cute\u803B\xC1\u40C1reve;\u4102\u0100iyx}rc\u803B\xC2\u40C2;\u4410r;\uC000\u{1D504}rave\u803B\xC0\u40C0pha;\u4391acr;\u4100d;\u6A53\u0100gp\x9D\xA1on;\u4104f;\uC000\u{1D538}plyFunction;\u6061ing\u803B\xC5\u40C5\u0100cs\xBE\xC3r;\uC000\u{1D49C}ign;\u6254ilde\u803B\xC3\u40C3ml\u803B\xC4\u40C4\u0400aceforsu\xE5\xFB\xFE\u0117\u011C\u0122\u0127\u012A\u0100cr\xEA\xF2kslash;\u6216\u0176\xF6\xF8;\u6AE7ed;\u6306y;\u4411\u0180crt\u0105\u010B\u0114ause;\u6235noullis;\u612Ca;\u4392r;\uC000\u{1D505}pf;\uC000\u{1D539}eve;\u42D8c\xF2\u0113mpeq;\u624E\u0700HOacdefhilorsu\u014D\u0151\u0156\u0180\u019E\u01A2\u01B5\u01B7\u01BA\u01DC\u0215\u0273\u0278\u027Ecy;\u4427PY\u803B\xA9\u40A9\u0180cpy\u015D\u0162\u017Aute;\u4106\u0100;i\u0167\u0168\u62D2talDifferentialD;\u6145leys;\u612D\u0200aeio\u0189\u018E\u0194\u0198ron;\u410Cdil\u803B\xC7\u40C7rc;\u4108nint;\u6230ot;\u410A\u0100dn\u01A7\u01ADilla;\u40B8terDot;\u40B7\xF2\u017Fi;\u43A7rcle\u0200DMPT\u01C7\u01CB\u01D1\u01D6ot;\u6299inus;\u6296lus;\u6295imes;\u6297o\u0100cs\u01E2\u01F8kwiseContourIntegral;\u6232eCurly\u0100DQ\u0203\u020FoubleQuote;\u601Duote;\u6019\u0200lnpu\u021E\u0228\u0247\u0255on\u0100;e\u0225\u0226\u6237;\u6A74\u0180git\u022F\u0236\u023Aruent;\u6261nt;\u622FourIntegral;\u622E\u0100fr\u024C\u024E;\u6102oduct;\u6210nterClockwiseContourIntegral;\u6233oss;\u6A2Fcr;\uC000\u{1D49E}p\u0100;C\u0284\u0285\u62D3ap;\u624D\u0580DJSZacefios\u02A0\u02AC\u02B0\u02B4\u02B8\u02CB\u02D7\u02E1\u02E6\u0333\u048D\u0100;o\u0179\u02A5trahd;\u6911cy;\u4402cy;\u4405cy;\u440F\u0180grs\u02BF\u02C4\u02C7ger;\u6021r;\u61A1hv;\u6AE4\u0100ay\u02D0\u02D5ron;\u410E;\u4414l\u0100;t\u02DD\u02DE\u6207a;\u4394r;\uC000\u{1D507}\u0100af\u02EB\u0327\u0100cm\u02F0\u0322ritical\u0200ADGT\u0300\u0306\u0316\u031Ccute;\u40B4o\u0174\u030B\u030D;\u42D9bleAcute;\u42DDrave;\u4060ilde;\u42DCond;\u62C4ferentialD;\u6146\u0470\u033D\0\0\0\u0342\u0354\0\u0405f;\uC000\u{1D53B}\u0180;DE\u0348\u0349\u034D\u40A8ot;\u60DCqual;\u6250ble\u0300CDLRUV\u0363\u0372\u0382\u03CF\u03E2\u03F8ontourIntegra\xEC\u0239o\u0274\u0379\0\0\u037B\xBB\u0349nArrow;\u61D3\u0100eo\u0387\u03A4ft\u0180ART\u0390\u0396\u03A1rrow;\u61D0ightArrow;\u61D4e\xE5\u02CAng\u0100LR\u03AB\u03C4eft\u0100AR\u03B3\u03B9rrow;\u67F8ightArrow;\u67FAightArrow;\u67F9ight\u0100AT\u03D8\u03DErrow;\u61D2ee;\u62A8p\u0241\u03E9\0\0\u03EFrrow;\u61D1ownArrow;\u61D5erticalBar;\u6225n\u0300ABLRTa\u0412\u042A\u0430\u045E\u047F\u037Crrow\u0180;BU\u041D\u041E\u0422\u6193ar;\u6913pArrow;\u61F5reve;\u4311eft\u02D2\u043A\0\u0446\0\u0450ightVector;\u6950eeVector;\u695Eector\u0100;B\u0459\u045A\u61BDar;\u6956ight\u01D4\u0467\0\u0471eeVector;\u695Fector\u0100;B\u047A\u047B\u61C1ar;\u6957ee\u0100;A\u0486\u0487\u62A4rrow;\u61A7\u0100ct\u0492\u0497r;\uC000\u{1D49F}rok;\u4110\u0800NTacdfglmopqstux\u04BD\u04C0\u04C4\u04CB\u04DE\u04E2\u04E7\u04EE\u04F5\u0521\u052F\u0536\u0552\u055D\u0560\u0565G;\u414AH\u803B\xD0\u40D0cute\u803B\xC9\u40C9\u0180aiy\u04D2\u04D7\u04DCron;\u411Arc\u803B\xCA\u40CA;\u442Dot;\u4116r;\uC000\u{1D508}rave\u803B\xC8\u40C8ement;\u6208\u0100ap\u04FA\u04FEcr;\u4112ty\u0253\u0506\0\0\u0512mallSquare;\u65FBerySmallSquare;\u65AB\u0100gp\u0526\u052Aon;\u4118f;\uC000\u{1D53C}silon;\u4395u\u0100ai\u053C\u0549l\u0100;T\u0542\u0543\u6A75ilde;\u6242librium;\u61CC\u0100ci\u0557\u055Ar;\u6130m;\u6A73a;\u4397ml\u803B\xCB\u40CB\u0100ip\u056A\u056Fsts;\u6203onentialE;\u6147\u0280cfios\u0585\u0588\u058D\u05B2\u05CCy;\u4424r;\uC000\u{1D509}lled\u0253\u0597\0\0\u05A3mallSquare;\u65FCerySmallSquare;\u65AA\u0370\u05BA\0\u05BF\0\0\u05C4f;\uC000\u{1D53D}All;\u6200riertrf;\u6131c\xF2\u05CB\u0600JTabcdfgorst\u05E8\u05EC\u05EF\u05FA\u0600\u0612\u0616\u061B\u061D\u0623\u066C\u0672cy;\u4403\u803B>\u403Emma\u0100;d\u05F7\u05F8\u4393;\u43DCreve;\u411E\u0180eiy\u0607\u060C\u0610dil;\u4122rc;\u411C;\u4413ot;\u4120r;\uC000\u{1D50A};\u62D9pf;\uC000\u{1D53E}eater\u0300EFGLST\u0635\u0644\u064E\u0656\u065B\u0666qual\u0100;L\u063E\u063F\u6265ess;\u62DBullEqual;\u6267reater;\u6AA2ess;\u6277lantEqual;\u6A7Eilde;\u6273cr;\uC000\u{1D4A2};\u626B\u0400Aacfiosu\u0685\u068B\u0696\u069B\u069E\u06AA\u06BE\u06CARDcy;\u442A\u0100ct\u0690\u0694ek;\u42C7;\u405Eirc;\u4124r;\u610ClbertSpace;\u610B\u01F0\u06AF\0\u06B2f;\u610DizontalLine;\u6500\u0100ct\u06C3\u06C5\xF2\u06A9rok;\u4126mp\u0144\u06D0\u06D8ownHum\xF0\u012Fqual;\u624F\u0700EJOacdfgmnostu\u06FA\u06FE\u0703\u0707\u070E\u071A\u071E\u0721\u0728\u0744\u0778\u078B\u078F\u0795cy;\u4415lig;\u4132cy;\u4401cute\u803B\xCD\u40CD\u0100iy\u0713\u0718rc\u803B\xCE\u40CE;\u4418ot;\u4130r;\u6111rave\u803B\xCC\u40CC\u0180;ap\u0720\u072F\u073F\u0100cg\u0734\u0737r;\u412AinaryI;\u6148lie\xF3\u03DD\u01F4\u0749\0\u0762\u0100;e\u074D\u074E\u622C\u0100gr\u0753\u0758ral;\u622Bsection;\u62C2isible\u0100CT\u076C\u0772omma;\u6063imes;\u6062\u0180gpt\u077F\u0783\u0788on;\u412Ef;\uC000\u{1D540}a;\u4399cr;\u6110ilde;\u4128\u01EB\u079A\0\u079Ecy;\u4406l\u803B\xCF\u40CF\u0280cfosu\u07AC\u07B7\u07BC\u07C2\u07D0\u0100iy\u07B1\u07B5rc;\u4134;\u4419r;\uC000\u{1D50D}pf;\uC000\u{1D541}\u01E3\u07C7\0\u07CCr;\uC000\u{1D4A5}rcy;\u4408kcy;\u4404\u0380HJacfos\u07E4\u07E8\u07EC\u07F1\u07FD\u0802\u0808cy;\u4425cy;\u440Cppa;\u439A\u0100ey\u07F6\u07FBdil;\u4136;\u441Ar;\uC000\u{1D50E}pf;\uC000\u{1D542}cr;\uC000\u{1D4A6}\u0580JTaceflmost\u0825\u0829\u082C\u0850\u0863\u09B3\u09B8\u09C7\u09CD\u0A37\u0A47cy;\u4409\u803B<\u403C\u0280cmnpr\u0837\u083C\u0841\u0844\u084Dute;\u4139bda;\u439Bg;\u67EAlacetrf;\u6112r;\u619E\u0180aey\u0857\u085C\u0861ron;\u413Ddil;\u413B;\u441B\u0100fs\u0868\u0970t\u0500ACDFRTUVar\u087E\u08A9\u08B1\u08E0\u08E6\u08FC\u092F\u095B\u0390\u096A\u0100nr\u0883\u088FgleBracket;\u67E8row\u0180;BR\u0899\u089A\u089E\u6190ar;\u61E4ightArrow;\u61C6eiling;\u6308o\u01F5\u08B7\0\u08C3bleBracket;\u67E6n\u01D4\u08C8\0\u08D2eeVector;\u6961ector\u0100;B\u08DB\u08DC\u61C3ar;\u6959loor;\u630Aight\u0100AV\u08EF\u08F5rrow;\u6194ector;\u694E\u0100er\u0901\u0917e\u0180;AV\u0909\u090A\u0910\u62A3rrow;\u61A4ector;\u695Aiangle\u0180;BE\u0924\u0925\u0929\u62B2ar;\u69CFqual;\u62B4p\u0180DTV\u0937\u0942\u094CownVector;\u6951eeVector;\u6960ector\u0100;B\u0956\u0957\u61BFar;\u6958ector\u0100;B\u0965\u0966\u61BCar;\u6952ight\xE1\u039Cs\u0300EFGLST\u097E\u098B\u0995\u099D\u09A2\u09ADqualGreater;\u62DAullEqual;\u6266reater;\u6276ess;\u6AA1lantEqual;\u6A7Dilde;\u6272r;\uC000\u{1D50F}\u0100;e\u09BD\u09BE\u62D8ftarrow;\u61DAidot;\u413F\u0180npw\u09D4\u0A16\u0A1Bg\u0200LRlr\u09DE\u09F7\u0A02\u0A10eft\u0100AR\u09E6\u09ECrrow;\u67F5ightArrow;\u67F7ightArrow;\u67F6eft\u0100ar\u03B3\u0A0Aight\xE1\u03BFight\xE1\u03CAf;\uC000\u{1D543}er\u0100LR\u0A22\u0A2CeftArrow;\u6199ightArrow;\u6198\u0180cht\u0A3E\u0A40\u0A42\xF2\u084C;\u61B0rok;\u4141;\u626A\u0400acefiosu\u0A5A\u0A5D\u0A60\u0A77\u0A7C\u0A85\u0A8B\u0A8Ep;\u6905y;\u441C\u0100dl\u0A65\u0A6FiumSpace;\u605Flintrf;\u6133r;\uC000\u{1D510}nusPlus;\u6213pf;\uC000\u{1D544}c\xF2\u0A76;\u439C\u0480Jacefostu\u0AA3\u0AA7\u0AAD\u0AC0\u0B14\u0B19\u0D91\u0D97\u0D9Ecy;\u440Acute;\u4143\u0180aey\u0AB4\u0AB9\u0ABEron;\u4147dil;\u4145;\u441D\u0180gsw\u0AC7\u0AF0\u0B0Eative\u0180MTV\u0AD3\u0ADF\u0AE8ediumSpace;\u600Bhi\u0100cn\u0AE6\u0AD8\xEB\u0AD9eryThi\xEE\u0AD9ted\u0100GL\u0AF8\u0B06reaterGreate\xF2\u0673essLes\xF3\u0A48Line;\u400Ar;\uC000\u{1D511}\u0200Bnpt\u0B22\u0B28\u0B37\u0B3Areak;\u6060BreakingSpace;\u40A0f;\u6115\u0680;CDEGHLNPRSTV\u0B55\u0B56\u0B6A\u0B7C\u0BA1\u0BEB\u0C04\u0C5E\u0C84\u0CA6\u0CD8\u0D61\u0D85\u6AEC\u0100ou\u0B5B\u0B64ngruent;\u6262pCap;\u626DoubleVerticalBar;\u6226\u0180lqx\u0B83\u0B8A\u0B9Bement;\u6209ual\u0100;T\u0B92\u0B93\u6260ilde;\uC000\u2242\u0338ists;\u6204reater\u0380;EFGLST\u0BB6\u0BB7\u0BBD\u0BC9\u0BD3\u0BD8\u0BE5\u626Fqual;\u6271ullEqual;\uC000\u2267\u0338reater;\uC000\u226B\u0338ess;\u6279lantEqual;\uC000\u2A7E\u0338ilde;\u6275ump\u0144\u0BF2\u0BFDownHump;\uC000\u224E\u0338qual;\uC000\u224F\u0338e\u0100fs\u0C0A\u0C27tTriangle\u0180;BE\u0C1A\u0C1B\u0C21\u62EAar;\uC000\u29CF\u0338qual;\u62ECs\u0300;EGLST\u0C35\u0C36\u0C3C\u0C44\u0C4B\u0C58\u626Equal;\u6270reater;\u6278ess;\uC000\u226A\u0338lantEqual;\uC000\u2A7D\u0338ilde;\u6274ested\u0100GL\u0C68\u0C79reaterGreater;\uC000\u2AA2\u0338essLess;\uC000\u2AA1\u0338recedes\u0180;ES\u0C92\u0C93\u0C9B\u6280qual;\uC000\u2AAF\u0338lantEqual;\u62E0\u0100ei\u0CAB\u0CB9verseElement;\u620CghtTriangle\u0180;BE\u0CCB\u0CCC\u0CD2\u62EBar;\uC000\u29D0\u0338qual;\u62ED\u0100qu\u0CDD\u0D0CuareSu\u0100bp\u0CE8\u0CF9set\u0100;E\u0CF0\u0CF3\uC000\u228F\u0338qual;\u62E2erset\u0100;E\u0D03\u0D06\uC000\u2290\u0338qual;\u62E3\u0180bcp\u0D13\u0D24\u0D4Eset\u0100;E\u0D1B\u0D1E\uC000\u2282\u20D2qual;\u6288ceeds\u0200;EST\u0D32\u0D33\u0D3B\u0D46\u6281qual;\uC000\u2AB0\u0338lantEqual;\u62E1ilde;\uC000\u227F\u0338erset\u0100;E\u0D58\u0D5B\uC000\u2283\u20D2qual;\u6289ilde\u0200;EFT\u0D6E\u0D6F\u0D75\u0D7F\u6241qual;\u6244ullEqual;\u6247ilde;\u6249erticalBar;\u6224cr;\uC000\u{1D4A9}ilde\u803B\xD1\u40D1;\u439D\u0700Eacdfgmoprstuv\u0DBD\u0DC2\u0DC9\u0DD5\u0DDB\u0DE0\u0DE7\u0DFC\u0E02\u0E20\u0E22\u0E32\u0E3F\u0E44lig;\u4152cute\u803B\xD3\u40D3\u0100iy\u0DCE\u0DD3rc\u803B\xD4\u40D4;\u441Eblac;\u4150r;\uC000\u{1D512}rave\u803B\xD2\u40D2\u0180aei\u0DEE\u0DF2\u0DF6cr;\u414Cga;\u43A9cron;\u439Fpf;\uC000\u{1D546}enCurly\u0100DQ\u0E0E\u0E1AoubleQuote;\u601Cuote;\u6018;\u6A54\u0100cl\u0E27\u0E2Cr;\uC000\u{1D4AA}ash\u803B\xD8\u40D8i\u016C\u0E37\u0E3Cde\u803B\xD5\u40D5es;\u6A37ml\u803B\xD6\u40D6er\u0100BP\u0E4B\u0E60\u0100ar\u0E50\u0E53r;\u603Eac\u0100ek\u0E5A\u0E5C;\u63DEet;\u63B4arenthesis;\u63DC\u0480acfhilors\u0E7F\u0E87\u0E8A\u0E8F\u0E92\u0E94\u0E9D\u0EB0\u0EFCrtialD;\u6202y;\u441Fr;\uC000\u{1D513}i;\u43A6;\u43A0usMinus;\u40B1\u0100ip\u0EA2\u0EADncareplan\xE5\u069Df;\u6119\u0200;eio\u0EB9\u0EBA\u0EE0\u0EE4\u6ABBcedes\u0200;EST\u0EC8\u0EC9\u0ECF\u0EDA\u627Aqual;\u6AAFlantEqual;\u627Cilde;\u627Eme;\u6033\u0100dp\u0EE9\u0EEEuct;\u620Fortion\u0100;a\u0225\u0EF9l;\u621D\u0100ci\u0F01\u0F06r;\uC000\u{1D4AB};\u43A8\u0200Ufos\u0F11\u0F16\u0F1B\u0F1FOT\u803B"\u4022r;\uC000\u{1D514}pf;\u611Acr;\uC000\u{1D4AC}\u0600BEacefhiorsu\u0F3E\u0F43\u0F47\u0F60\u0F73\u0FA7\u0FAA\u0FAD\u1096\u10A9\u10B4\u10BEarr;\u6910G\u803B\xAE\u40AE\u0180cnr\u0F4E\u0F53\u0F56ute;\u4154g;\u67EBr\u0100;t\u0F5C\u0F5D\u61A0l;\u6916\u0180aey\u0F67\u0F6C\u0F71ron;\u4158dil;\u4156;\u4420\u0100;v\u0F78\u0F79\u611Cerse\u0100EU\u0F82\u0F99\u0100lq\u0F87\u0F8Eement;\u620Builibrium;\u61CBpEquilibrium;\u696Fr\xBB\u0F79o;\u43A1ght\u0400ACDFTUVa\u0FC1\u0FEB\u0FF3\u1022\u1028\u105B\u1087\u03D8\u0100nr\u0FC6\u0FD2gleBracket;\u67E9row\u0180;BL\u0FDC\u0FDD\u0FE1\u6192ar;\u61E5eftArrow;\u61C4eiling;\u6309o\u01F5\u0FF9\0\u1005bleBracket;\u67E7n\u01D4\u100A\0\u1014eeVector;\u695Dector\u0100;B\u101D\u101E\u61C2ar;\u6955loor;\u630B\u0100er\u102D\u1043e\u0180;AV\u1035\u1036\u103C\u62A2rrow;\u61A6ector;\u695Biangle\u0180;BE\u1050\u1051\u1055\u62B3ar;\u69D0qual;\u62B5p\u0180DTV\u1063\u106E\u1078ownVector;\u694FeeVector;\u695Cector\u0100;B\u1082\u1083\u61BEar;\u6954ector\u0100;B\u1091\u1092\u61C0ar;\u6953\u0100pu\u109B\u109Ef;\u611DndImplies;\u6970ightarrow;\u61DB\u0100ch\u10B9\u10BCr;\u611B;\u61B1leDelayed;\u69F4\u0680HOacfhimoqstu\u10E4\u10F1\u10F7\u10FD\u1119\u111E\u1151\u1156\u1161\u1167\u11B5\u11BB\u11BF\u0100Cc\u10E9\u10EEHcy;\u4429y;\u4428FTcy;\u442Ccute;\u415A\u0280;aeiy\u1108\u1109\u110E\u1113\u1117\u6ABCron;\u4160dil;\u415Erc;\u415C;\u4421r;\uC000\u{1D516}ort\u0200DLRU\u112A\u1134\u113E\u1149ownArrow\xBB\u041EeftArrow\xBB\u089AightArrow\xBB\u0FDDpArrow;\u6191gma;\u43A3allCircle;\u6218pf;\uC000\u{1D54A}\u0272\u116D\0\0\u1170t;\u621Aare\u0200;ISU\u117B\u117C\u1189\u11AF\u65A1ntersection;\u6293u\u0100bp\u118F\u119Eset\u0100;E\u1197\u1198\u628Fqual;\u6291erset\u0100;E\u11A8\u11A9\u6290qual;\u6292nion;\u6294cr;\uC000\u{1D4AE}ar;\u62C6\u0200bcmp\u11C8\u11DB\u1209\u120B\u0100;s\u11CD\u11CE\u62D0et\u0100;E\u11CD\u11D5qual;\u6286\u0100ch\u11E0\u1205eeds\u0200;EST\u11ED\u11EE\u11F4\u11FF\u627Bqual;\u6AB0lantEqual;\u627Dilde;\u627FTh\xE1\u0F8C;\u6211\u0180;es\u1212\u1213\u1223\u62D1rset\u0100;E\u121C\u121D\u6283qual;\u6287et\xBB\u1213\u0580HRSacfhiors\u123E\u1244\u1249\u1255\u125E\u1271\u1276\u129F\u12C2\u12C8\u12D1ORN\u803B\xDE\u40DEADE;\u6122\u0100Hc\u124E\u1252cy;\u440By;\u4426\u0100bu\u125A\u125C;\u4009;\u43A4\u0180aey\u1265\u126A\u126Fron;\u4164dil;\u4162;\u4422r;\uC000\u{1D517}\u0100ei\u127B\u1289\u01F2\u1280\0\u1287efore;\u6234a;\u4398\u0100cn\u128E\u1298kSpace;\uC000\u205F\u200ASpace;\u6009lde\u0200;EFT\u12AB\u12AC\u12B2\u12BC\u623Cqual;\u6243ullEqual;\u6245ilde;\u6248pf;\uC000\u{1D54B}ipleDot;\u60DB\u0100ct\u12D6\u12DBr;\uC000\u{1D4AF}rok;\u4166\u0AE1\u12F7\u130E\u131A\u1326\0\u132C\u1331\0\0\0\0\0\u1338\u133D\u1377\u1385\0\u13FF\u1404\u140A\u1410\u0100cr\u12FB\u1301ute\u803B\xDA\u40DAr\u0100;o\u1307\u1308\u619Fcir;\u6949r\u01E3\u1313\0\u1316y;\u440Eve;\u416C\u0100iy\u131E\u1323rc\u803B\xDB\u40DB;\u4423blac;\u4170r;\uC000\u{1D518}rave\u803B\xD9\u40D9acr;\u416A\u0100di\u1341\u1369er\u0100BP\u1348\u135D\u0100ar\u134D\u1350r;\u405Fac\u0100ek\u1357\u1359;\u63DFet;\u63B5arenthesis;\u63DDon\u0100;P\u1370\u1371\u62C3lus;\u628E\u0100gp\u137B\u137Fon;\u4172f;\uC000\u{1D54C}\u0400ADETadps\u1395\u13AE\u13B8\u13C4\u03E8\u13D2\u13D7\u13F3rrow\u0180;BD\u1150\u13A0\u13A4ar;\u6912ownArrow;\u61C5ownArrow;\u6195quilibrium;\u696Eee\u0100;A\u13CB\u13CC\u62A5rrow;\u61A5own\xE1\u03F3er\u0100LR\u13DE\u13E8eftArrow;\u6196ightArrow;\u6197i\u0100;l\u13F9\u13FA\u43D2on;\u43A5ing;\u416Ecr;\uC000\u{1D4B0}ilde;\u4168ml\u803B\xDC\u40DC\u0480Dbcdefosv\u1427\u142C\u1430\u1433\u143E\u1485\u148A\u1490\u1496ash;\u62ABar;\u6AEBy;\u4412ash\u0100;l\u143B\u143C\u62A9;\u6AE6\u0100er\u1443\u1445;\u62C1\u0180bty\u144C\u1450\u147Aar;\u6016\u0100;i\u144F\u1455cal\u0200BLST\u1461\u1465\u146A\u1474ar;\u6223ine;\u407Ceparator;\u6758ilde;\u6240ThinSpace;\u600Ar;\uC000\u{1D519}pf;\uC000\u{1D54D}cr;\uC000\u{1D4B1}dash;\u62AA\u0280cefos\u14A7\u14AC\u14B1\u14B6\u14BCirc;\u4174dge;\u62C0r;\uC000\u{1D51A}pf;\uC000\u{1D54E}cr;\uC000\u{1D4B2}\u0200fios\u14CB\u14D0\u14D2\u14D8r;\uC000\u{1D51B};\u439Epf;\uC000\u{1D54F}cr;\uC000\u{1D4B3}\u0480AIUacfosu\u14F1\u14F5\u14F9\u14FD\u1504\u150F\u1514\u151A\u1520cy;\u442Fcy;\u4407cy;\u442Ecute\u803B\xDD\u40DD\u0100iy\u1509\u150Drc;\u4176;\u442Br;\uC000\u{1D51C}pf;\uC000\u{1D550}cr;\uC000\u{1D4B4}ml;\u4178\u0400Hacdefos\u1535\u1539\u153F\u154B\u154F\u155D\u1560\u1564cy;\u4416cute;\u4179\u0100ay\u1544\u1549ron;\u417D;\u4417ot;\u417B\u01F2\u1554\0\u155BoWidt\xE8\u0AD9a;\u4396r;\u6128pf;\u6124cr;\uC000\u{1D4B5}\u0BE1\u1583\u158A\u1590\0\u15B0\u15B6\u15BF\0\0\0\0\u15C6\u15DB\u15EB\u165F\u166D\0\u1695\u169B\u16B2\u16B9\0\u16BEcute\u803B\xE1\u40E1reve;\u4103\u0300;Ediuy\u159C\u159D\u15A1\u15A3\u15A8\u15AD\u623E;\uC000\u223E\u0333;\u623Frc\u803B\xE2\u40E2te\u80BB\xB4\u0306;\u4430lig\u803B\xE6\u40E6\u0100;r\xB2\u15BA;\uC000\u{1D51E}rave\u803B\xE0\u40E0\u0100ep\u15CA\u15D6\u0100fp\u15CF\u15D4sym;\u6135\xE8\u15D3ha;\u43B1\u0100ap\u15DFc\u0100cl\u15E4\u15E7r;\u4101g;\u6A3F\u0264\u15F0\0\0\u160A\u0280;adsv\u15FA\u15FB\u15FF\u1601\u1607\u6227nd;\u6A55;\u6A5Clope;\u6A58;\u6A5A\u0380;elmrsz\u1618\u1619\u161B\u161E\u163F\u164F\u1659\u6220;\u69A4e\xBB\u1619sd\u0100;a\u1625\u1626\u6221\u0461\u1630\u1632\u1634\u1636\u1638\u163A\u163C\u163E;\u69A8;\u69A9;\u69AA;\u69AB;\u69AC;\u69AD;\u69AE;\u69AFt\u0100;v\u1645\u1646\u621Fb\u0100;d\u164C\u164D\u62BE;\u699D\u0100pt\u1654\u1657h;\u6222\xBB\xB9arr;\u637C\u0100gp\u1663\u1667on;\u4105f;\uC000\u{1D552}\u0380;Eaeiop\u12C1\u167B\u167D\u1682\u1684\u1687\u168A;\u6A70cir;\u6A6F;\u624Ad;\u624Bs;\u4027rox\u0100;e\u12C1\u1692\xF1\u1683ing\u803B\xE5\u40E5\u0180cty\u16A1\u16A6\u16A8r;\uC000\u{1D4B6};\u402Amp\u0100;e\u12C1\u16AF\xF1\u0288ilde\u803B\xE3\u40E3ml\u803B\xE4\u40E4\u0100ci\u16C2\u16C8onin\xF4\u0272nt;\u6A11\u0800Nabcdefiklnoprsu\u16ED\u16F1\u1730\u173C\u1743\u1748\u1778\u177D\u17E0\u17E6\u1839\u1850\u170D\u193D\u1948\u1970ot;\u6AED\u0100cr\u16F6\u171Ek\u0200ceps\u1700\u1705\u170D\u1713ong;\u624Cpsilon;\u43F6rime;\u6035im\u0100;e\u171A\u171B\u623Dq;\u62CD\u0176\u1722\u1726ee;\u62BDed\u0100;g\u172C\u172D\u6305e\xBB\u172Drk\u0100;t\u135C\u1737brk;\u63B6\u0100oy\u1701\u1741;\u4431quo;\u601E\u0280cmprt\u1753\u175B\u1761\u1764\u1768aus\u0100;e\u010A\u0109ptyv;\u69B0s\xE9\u170Cno\xF5\u0113\u0180ahw\u176F\u1771\u1773;\u43B2;\u6136een;\u626Cr;\uC000\u{1D51F}g\u0380costuvw\u178D\u179D\u17B3\u17C1\u17D5\u17DB\u17DE\u0180aiu\u1794\u1796\u179A\xF0\u0760rc;\u65EFp\xBB\u1371\u0180dpt\u17A4\u17A8\u17ADot;\u6A00lus;\u6A01imes;\u6A02\u0271\u17B9\0\0\u17BEcup;\u6A06ar;\u6605riangle\u0100du\u17CD\u17D2own;\u65BDp;\u65B3plus;\u6A04e\xE5\u1444\xE5\u14ADarow;\u690D\u0180ako\u17ED\u1826\u1835\u0100cn\u17F2\u1823k\u0180lst\u17FA\u05AB\u1802ozenge;\u69EBriangle\u0200;dlr\u1812\u1813\u1818\u181D\u65B4own;\u65BEeft;\u65C2ight;\u65B8k;\u6423\u01B1\u182B\0\u1833\u01B2\u182F\0\u1831;\u6592;\u65914;\u6593ck;\u6588\u0100eo\u183E\u184D\u0100;q\u1843\u1846\uC000=\u20E5uiv;\uC000\u2261\u20E5t;\u6310\u0200ptwx\u1859\u185E\u1867\u186Cf;\uC000\u{1D553}\u0100;t\u13CB\u1863om\xBB\u13CCtie;\u62C8\u0600DHUVbdhmptuv\u1885\u1896\u18AA\u18BB\u18D7\u18DB\u18EC\u18FF\u1905\u190A\u1910\u1921\u0200LRlr\u188E\u1890\u1892\u1894;\u6557;\u6554;\u6556;\u6553\u0280;DUdu\u18A1\u18A2\u18A4\u18A6\u18A8\u6550;\u6566;\u6569;\u6564;\u6567\u0200LRlr\u18B3\u18B5\u18B7\u18B9;\u655D;\u655A;\u655C;\u6559\u0380;HLRhlr\u18CA\u18CB\u18CD\u18CF\u18D1\u18D3\u18D5\u6551;\u656C;\u6563;\u6560;\u656B;\u6562;\u655Fox;\u69C9\u0200LRlr\u18E4\u18E6\u18E8\u18EA;\u6555;\u6552;\u6510;\u650C\u0280;DUdu\u06BD\u18F7\u18F9\u18FB\u18FD;\u6565;\u6568;\u652C;\u6534inus;\u629Flus;\u629Eimes;\u62A0\u0200LRlr\u1919\u191B\u191D\u191F;\u655B;\u6558;\u6518;\u6514\u0380;HLRhlr\u1930\u1931\u1933\u1935\u1937\u1939\u193B\u6502;\u656A;\u6561;\u655E;\u653C;\u6524;\u651C\u0100ev\u0123\u1942bar\u803B\xA6\u40A6\u0200ceio\u1951\u1956\u195A\u1960r;\uC000\u{1D4B7}mi;\u604Fm\u0100;e\u171A\u171Cl\u0180;bh\u1968\u1969\u196B\u405C;\u69C5sub;\u67C8\u016C\u1974\u197El\u0100;e\u1979\u197A\u6022t\xBB\u197Ap\u0180;Ee\u012F\u1985\u1987;\u6AAE\u0100;q\u06DC\u06DB\u0CE1\u19A7\0\u19E8\u1A11\u1A15\u1A32\0\u1A37\u1A50\0\0\u1AB4\0\0\u1AC1\0\0\u1B21\u1B2E\u1B4D\u1B52\0\u1BFD\0\u1C0C\u0180cpr\u19AD\u19B2\u19DDute;\u4107\u0300;abcds\u19BF\u19C0\u19C4\u19CA\u19D5\u19D9\u6229nd;\u6A44rcup;\u6A49\u0100au\u19CF\u19D2p;\u6A4Bp;\u6A47ot;\u6A40;\uC000\u2229\uFE00\u0100eo\u19E2\u19E5t;\u6041\xEE\u0693\u0200aeiu\u19F0\u19FB\u1A01\u1A05\u01F0\u19F5\0\u19F8s;\u6A4Don;\u410Ddil\u803B\xE7\u40E7rc;\u4109ps\u0100;s\u1A0C\u1A0D\u6A4Cm;\u6A50ot;\u410B\u0180dmn\u1A1B\u1A20\u1A26il\u80BB\xB8\u01ADptyv;\u69B2t\u8100\xA2;e\u1A2D\u1A2E\u40A2r\xE4\u01B2r;\uC000\u{1D520}\u0180cei\u1A3D\u1A40\u1A4Dy;\u4447ck\u0100;m\u1A47\u1A48\u6713ark\xBB\u1A48;\u43C7r\u0380;Ecefms\u1A5F\u1A60\u1A62\u1A6B\u1AA4\u1AAA\u1AAE\u65CB;\u69C3\u0180;el\u1A69\u1A6A\u1A6D\u42C6q;\u6257e\u0261\u1A74\0\0\u1A88rrow\u0100lr\u1A7C\u1A81eft;\u61BAight;\u61BB\u0280RSacd\u1A92\u1A94\u1A96\u1A9A\u1A9F\xBB\u0F47;\u64C8st;\u629Birc;\u629Aash;\u629Dnint;\u6A10id;\u6AEFcir;\u69C2ubs\u0100;u\u1ABB\u1ABC\u6663it\xBB\u1ABC\u02EC\u1AC7\u1AD4\u1AFA\0\u1B0Aon\u0100;e\u1ACD\u1ACE\u403A\u0100;q\xC7\xC6\u026D\u1AD9\0\0\u1AE2a\u0100;t\u1ADE\u1ADF\u402C;\u4040\u0180;fl\u1AE8\u1AE9\u1AEB\u6201\xEE\u1160e\u0100mx\u1AF1\u1AF6ent\xBB\u1AE9e\xF3\u024D\u01E7\u1AFE\0\u1B07\u0100;d\u12BB\u1B02ot;\u6A6Dn\xF4\u0246\u0180fry\u1B10\u1B14\u1B17;\uC000\u{1D554}o\xE4\u0254\u8100\xA9;s\u0155\u1B1Dr;\u6117\u0100ao\u1B25\u1B29rr;\u61B5ss;\u6717\u0100cu\u1B32\u1B37r;\uC000\u{1D4B8}\u0100bp\u1B3C\u1B44\u0100;e\u1B41\u1B42\u6ACF;\u6AD1\u0100;e\u1B49\u1B4A\u6AD0;\u6AD2dot;\u62EF\u0380delprvw\u1B60\u1B6C\u1B77\u1B82\u1BAC\u1BD4\u1BF9arr\u0100lr\u1B68\u1B6A;\u6938;\u6935\u0270\u1B72\0\0\u1B75r;\u62DEc;\u62DFarr\u0100;p\u1B7F\u1B80\u61B6;\u693D\u0300;bcdos\u1B8F\u1B90\u1B96\u1BA1\u1BA5\u1BA8\u622Arcap;\u6A48\u0100au\u1B9B\u1B9Ep;\u6A46p;\u6A4Aot;\u628Dr;\u6A45;\uC000\u222A\uFE00\u0200alrv\u1BB5\u1BBF\u1BDE\u1BE3rr\u0100;m\u1BBC\u1BBD\u61B7;\u693Cy\u0180evw\u1BC7\u1BD4\u1BD8q\u0270\u1BCE\0\0\u1BD2re\xE3\u1B73u\xE3\u1B75ee;\u62CEedge;\u62CFen\u803B\xA4\u40A4earrow\u0100lr\u1BEE\u1BF3eft\xBB\u1B80ight\xBB\u1BBDe\xE4\u1BDD\u0100ci\u1C01\u1C07onin\xF4\u01F7nt;\u6231lcty;\u632D\u0980AHabcdefhijlorstuwz\u1C38\u1C3B\u1C3F\u1C5D\u1C69\u1C75\u1C8A\u1C9E\u1CAC\u1CB7\u1CFB\u1CFF\u1D0D\u1D7B\u1D91\u1DAB\u1DBB\u1DC6\u1DCDr\xF2\u0381ar;\u6965\u0200glrs\u1C48\u1C4D\u1C52\u1C54ger;\u6020eth;\u6138\xF2\u1133h\u0100;v\u1C5A\u1C5B\u6010\xBB\u090A\u016B\u1C61\u1C67arow;\u690Fa\xE3\u0315\u0100ay\u1C6E\u1C73ron;\u410F;\u4434\u0180;ao\u0332\u1C7C\u1C84\u0100gr\u02BF\u1C81r;\u61CAtseq;\u6A77\u0180glm\u1C91\u1C94\u1C98\u803B\xB0\u40B0ta;\u43B4ptyv;\u69B1\u0100ir\u1CA3\u1CA8sht;\u697F;\uC000\u{1D521}ar\u0100lr\u1CB3\u1CB5\xBB\u08DC\xBB\u101E\u0280aegsv\u1CC2\u0378\u1CD6\u1CDC\u1CE0m\u0180;os\u0326\u1CCA\u1CD4nd\u0100;s\u0326\u1CD1uit;\u6666amma;\u43DDin;\u62F2\u0180;io\u1CE7\u1CE8\u1CF8\u40F7de\u8100\xF7;o\u1CE7\u1CF0ntimes;\u62C7n\xF8\u1CF7cy;\u4452c\u026F\u1D06\0\0\u1D0Arn;\u631Eop;\u630D\u0280lptuw\u1D18\u1D1D\u1D22\u1D49\u1D55lar;\u4024f;\uC000\u{1D555}\u0280;emps\u030B\u1D2D\u1D37\u1D3D\u1D42q\u0100;d\u0352\u1D33ot;\u6251inus;\u6238lus;\u6214quare;\u62A1blebarwedg\xE5\xFAn\u0180adh\u112E\u1D5D\u1D67ownarrow\xF3\u1C83arpoon\u0100lr\u1D72\u1D76ef\xF4\u1CB4igh\xF4\u1CB6\u0162\u1D7F\u1D85karo\xF7\u0F42\u026F\u1D8A\0\0\u1D8Ern;\u631Fop;\u630C\u0180cot\u1D98\u1DA3\u1DA6\u0100ry\u1D9D\u1DA1;\uC000\u{1D4B9};\u4455l;\u69F6rok;\u4111\u0100dr\u1DB0\u1DB4ot;\u62F1i\u0100;f\u1DBA\u1816\u65BF\u0100ah\u1DC0\u1DC3r\xF2\u0429a\xF2\u0FA6angle;\u69A6\u0100ci\u1DD2\u1DD5y;\u445Fgrarr;\u67FF\u0900Dacdefglmnopqrstux\u1E01\u1E09\u1E19\u1E38\u0578\u1E3C\u1E49\u1E61\u1E7E\u1EA5\u1EAF\u1EBD\u1EE1\u1F2A\u1F37\u1F44\u1F4E\u1F5A\u0100Do\u1E06\u1D34o\xF4\u1C89\u0100cs\u1E0E\u1E14ute\u803B\xE9\u40E9ter;\u6A6E\u0200aioy\u1E22\u1E27\u1E31\u1E36ron;\u411Br\u0100;c\u1E2D\u1E2E\u6256\u803B\xEA\u40EAlon;\u6255;\u444Dot;\u4117\u0100Dr\u1E41\u1E45ot;\u6252;\uC000\u{1D522}\u0180;rs\u1E50\u1E51\u1E57\u6A9Aave\u803B\xE8\u40E8\u0100;d\u1E5C\u1E5D\u6A96ot;\u6A98\u0200;ils\u1E6A\u1E6B\u1E72\u1E74\u6A99nters;\u63E7;\u6113\u0100;d\u1E79\u1E7A\u6A95ot;\u6A97\u0180aps\u1E85\u1E89\u1E97cr;\u4113ty\u0180;sv\u1E92\u1E93\u1E95\u6205et\xBB\u1E93p\u01001;\u1E9D\u1EA4\u0133\u1EA1\u1EA3;\u6004;\u6005\u6003\u0100gs\u1EAA\u1EAC;\u414Bp;\u6002\u0100gp\u1EB4\u1EB8on;\u4119f;\uC000\u{1D556}\u0180als\u1EC4\u1ECE\u1ED2r\u0100;s\u1ECA\u1ECB\u62D5l;\u69E3us;\u6A71i\u0180;lv\u1EDA\u1EDB\u1EDF\u43B5on\xBB\u1EDB;\u43F5\u0200csuv\u1EEA\u1EF3\u1F0B\u1F23\u0100io\u1EEF\u1E31rc\xBB\u1E2E\u0269\u1EF9\0\0\u1EFB\xED\u0548ant\u0100gl\u1F02\u1F06tr\xBB\u1E5Dess\xBB\u1E7A\u0180aei\u1F12\u1F16\u1F1Als;\u403Dst;\u625Fv\u0100;D\u0235\u1F20D;\u6A78parsl;\u69E5\u0100Da\u1F2F\u1F33ot;\u6253rr;\u6971\u0180cdi\u1F3E\u1F41\u1EF8r;\u612Fo\xF4\u0352\u0100ah\u1F49\u1F4B;\u43B7\u803B\xF0\u40F0\u0100mr\u1F53\u1F57l\u803B\xEB\u40EBo;\u60AC\u0180cip\u1F61\u1F64\u1F67l;\u4021s\xF4\u056E\u0100eo\u1F6C\u1F74ctatio\xEE\u0559nential\xE5\u0579\u09E1\u1F92\0\u1F9E\0\u1FA1\u1FA7\0\0\u1FC6\u1FCC\0\u1FD3\0\u1FE6\u1FEA\u2000\0\u2008\u205Allingdotse\xF1\u1E44y;\u4444male;\u6640\u0180ilr\u1FAD\u1FB3\u1FC1lig;\u8000\uFB03\u0269\u1FB9\0\0\u1FBDg;\u8000\uFB00ig;\u8000\uFB04;\uC000\u{1D523}lig;\u8000\uFB01lig;\uC000fj\u0180alt\u1FD9\u1FDC\u1FE1t;\u666Dig;\u8000\uFB02ns;\u65B1of;\u4192\u01F0\u1FEE\0\u1FF3f;\uC000\u{1D557}\u0100ak\u05BF\u1FF7\u0100;v\u1FFC\u1FFD\u62D4;\u6AD9artint;\u6A0D\u0100ao\u200C\u2055\u0100cs\u2011\u2052\u03B1\u201A\u2030\u2038\u2045\u2048\0\u2050\u03B2\u2022\u2025\u2027\u202A\u202C\0\u202E\u803B\xBD\u40BD;\u6153\u803B\xBC\u40BC;\u6155;\u6159;\u615B\u01B3\u2034\0\u2036;\u6154;\u6156\u02B4\u203E\u2041\0\0\u2043\u803B\xBE\u40BE;\u6157;\u615C5;\u6158\u01B6\u204C\0\u204E;\u615A;\u615D8;\u615El;\u6044wn;\u6322cr;\uC000\u{1D4BB}\u0880Eabcdefgijlnorstv\u2082\u2089\u209F\u20A5\u20B0\u20B4\u20F0\u20F5\u20FA\u20FF\u2103\u2112\u2138\u0317\u213E\u2152\u219E\u0100;l\u064D\u2087;\u6A8C\u0180cmp\u2090\u2095\u209Dute;\u41F5ma\u0100;d\u209C\u1CDA\u43B3;\u6A86reve;\u411F\u0100iy\u20AA\u20AErc;\u411D;\u4433ot;\u4121\u0200;lqs\u063E\u0642\u20BD\u20C9\u0180;qs\u063E\u064C\u20C4lan\xF4\u0665\u0200;cdl\u0665\u20D2\u20D5\u20E5c;\u6AA9ot\u0100;o\u20DC\u20DD\u6A80\u0100;l\u20E2\u20E3\u6A82;\u6A84\u0100;e\u20EA\u20ED\uC000\u22DB\uFE00s;\u6A94r;\uC000\u{1D524}\u0100;g\u0673\u061Bmel;\u6137cy;\u4453\u0200;Eaj\u065A\u210C\u210E\u2110;\u6A92;\u6AA5;\u6AA4\u0200Eaes\u211B\u211D\u2129\u2134;\u6269p\u0100;p\u2123\u2124\u6A8Arox\xBB\u2124\u0100;q\u212E\u212F\u6A88\u0100;q\u212E\u211Bim;\u62E7pf;\uC000\u{1D558}\u0100ci\u2143\u2146r;\u610Am\u0180;el\u066B\u214E\u2150;\u6A8E;\u6A90\u8300>;cdlqr\u05EE\u2160\u216A\u216E\u2173\u2179\u0100ci\u2165\u2167;\u6AA7r;\u6A7Aot;\u62D7Par;\u6995uest;\u6A7C\u0280adels\u2184\u216A\u2190\u0656\u219B\u01F0\u2189\0\u218Epro\xF8\u209Er;\u6978q\u0100lq\u063F\u2196les\xF3\u2088i\xED\u066B\u0100en\u21A3\u21ADrtneqq;\uC000\u2269\uFE00\xC5\u21AA\u0500Aabcefkosy\u21C4\u21C7\u21F1\u21F5\u21FA\u2218\u221D\u222F\u2268\u227Dr\xF2\u03A0\u0200ilmr\u21D0\u21D4\u21D7\u21DBrs\xF0\u1484f\xBB\u2024il\xF4\u06A9\u0100dr\u21E0\u21E4cy;\u444A\u0180;cw\u08F4\u21EB\u21EFir;\u6948;\u61ADar;\u610Firc;\u4125\u0180alr\u2201\u220E\u2213rts\u0100;u\u2209\u220A\u6665it\xBB\u220Alip;\u6026con;\u62B9r;\uC000\u{1D525}s\u0100ew\u2223\u2229arow;\u6925arow;\u6926\u0280amopr\u223A\u223E\u2243\u225E\u2263rr;\u61FFtht;\u623Bk\u0100lr\u2249\u2253eftarrow;\u61A9ightarrow;\u61AAf;\uC000\u{1D559}bar;\u6015\u0180clt\u226F\u2274\u2278r;\uC000\u{1D4BD}as\xE8\u21F4rok;\u4127\u0100bp\u2282\u2287ull;\u6043hen\xBB\u1C5B\u0AE1\u22A3\0\u22AA\0\u22B8\u22C5\u22CE\0\u22D5\u22F3\0\0\u22F8\u2322\u2367\u2362\u237F\0\u2386\u23AA\u23B4cute\u803B\xED\u40ED\u0180;iy\u0771\u22B0\u22B5rc\u803B\xEE\u40EE;\u4438\u0100cx\u22BC\u22BFy;\u4435cl\u803B\xA1\u40A1\u0100fr\u039F\u22C9;\uC000\u{1D526}rave\u803B\xEC\u40EC\u0200;ino\u073E\u22DD\u22E9\u22EE\u0100in\u22E2\u22E6nt;\u6A0Ct;\u622Dfin;\u69DCta;\u6129lig;\u4133\u0180aop\u22FE\u231A\u231D\u0180cgt\u2305\u2308\u2317r;\u412B\u0180elp\u071F\u230F\u2313in\xE5\u078Ear\xF4\u0720h;\u4131f;\u62B7ed;\u41B5\u0280;cfot\u04F4\u232C\u2331\u233D\u2341are;\u6105in\u0100;t\u2338\u2339\u621Eie;\u69DDdo\xF4\u2319\u0280;celp\u0757\u234C\u2350\u235B\u2361al;\u62BA\u0100gr\u2355\u2359er\xF3\u1563\xE3\u234Darhk;\u6A17rod;\u6A3C\u0200cgpt\u236F\u2372\u2376\u237By;\u4451on;\u412Ff;\uC000\u{1D55A}a;\u43B9uest\u803B\xBF\u40BF\u0100ci\u238A\u238Fr;\uC000\u{1D4BE}n\u0280;Edsv\u04F4\u239B\u239D\u23A1\u04F3;\u62F9ot;\u62F5\u0100;v\u23A6\u23A7\u62F4;\u62F3\u0100;i\u0777\u23AElde;\u4129\u01EB\u23B8\0\u23BCcy;\u4456l\u803B\xEF\u40EF\u0300cfmosu\u23CC\u23D7\u23DC\u23E1\u23E7\u23F5\u0100iy\u23D1\u23D5rc;\u4135;\u4439r;\uC000\u{1D527}ath;\u4237pf;\uC000\u{1D55B}\u01E3\u23EC\0\u23F1r;\uC000\u{1D4BF}rcy;\u4458kcy;\u4454\u0400acfghjos\u240B\u2416\u2422\u2427\u242D\u2431\u2435\u243Bppa\u0100;v\u2413\u2414\u43BA;\u43F0\u0100ey\u241B\u2420dil;\u4137;\u443Ar;\uC000\u{1D528}reen;\u4138cy;\u4445cy;\u445Cpf;\uC000\u{1D55C}cr;\uC000\u{1D4C0}\u0B80ABEHabcdefghjlmnoprstuv\u2470\u2481\u2486\u248D\u2491\u250E\u253D\u255A\u2580\u264E\u265E\u2665\u2679\u267D\u269A\u26B2\u26D8\u275D\u2768\u278B\u27C0\u2801\u2812\u0180art\u2477\u247A\u247Cr\xF2\u09C6\xF2\u0395ail;\u691Barr;\u690E\u0100;g\u0994\u248B;\u6A8Bar;\u6962\u0963\u24A5\0\u24AA\0\u24B1\0\0\0\0\0\u24B5\u24BA\0\u24C6\u24C8\u24CD\0\u24F9ute;\u413Amptyv;\u69B4ra\xEE\u084Cbda;\u43BBg\u0180;dl\u088E\u24C1\u24C3;\u6991\xE5\u088E;\u6A85uo\u803B\xAB\u40ABr\u0400;bfhlpst\u0899\u24DE\u24E6\u24E9\u24EB\u24EE\u24F1\u24F5\u0100;f\u089D\u24E3s;\u691Fs;\u691D\xEB\u2252p;\u61ABl;\u6939im;\u6973l;\u61A2\u0180;ae\u24FF\u2500\u2504\u6AABil;\u6919\u0100;s\u2509\u250A\u6AAD;\uC000\u2AAD\uFE00\u0180abr\u2515\u2519\u251Drr;\u690Crk;\u6772\u0100ak\u2522\u252Cc\u0100ek\u2528\u252A;\u407B;\u405B\u0100es\u2531\u2533;\u698Bl\u0100du\u2539\u253B;\u698F;\u698D\u0200aeuy\u2546\u254B\u2556\u2558ron;\u413E\u0100di\u2550\u2554il;\u413C\xEC\u08B0\xE2\u2529;\u443B\u0200cqrs\u2563\u2566\u256D\u257Da;\u6936uo\u0100;r\u0E19\u1746\u0100du\u2572\u2577har;\u6967shar;\u694Bh;\u61B2\u0280;fgqs\u258B\u258C\u0989\u25F3\u25FF\u6264t\u0280ahlrt\u2598\u25A4\u25B7\u25C2\u25E8rrow\u0100;t\u0899\u25A1a\xE9\u24F6arpoon\u0100du\u25AF\u25B4own\xBB\u045Ap\xBB\u0966eftarrows;\u61C7ight\u0180ahs\u25CD\u25D6\u25DErrow\u0100;s\u08F4\u08A7arpoon\xF3\u0F98quigarro\xF7\u21F0hreetimes;\u62CB\u0180;qs\u258B\u0993\u25FAlan\xF4\u09AC\u0280;cdgs\u09AC\u260A\u260D\u261D\u2628c;\u6AA8ot\u0100;o\u2614\u2615\u6A7F\u0100;r\u261A\u261B\u6A81;\u6A83\u0100;e\u2622\u2625\uC000\u22DA\uFE00s;\u6A93\u0280adegs\u2633\u2639\u263D\u2649\u264Bppro\xF8\u24C6ot;\u62D6q\u0100gq\u2643\u2645\xF4\u0989gt\xF2\u248C\xF4\u099Bi\xED\u09B2\u0180ilr\u2655\u08E1\u265Asht;\u697C;\uC000\u{1D529}\u0100;E\u099C\u2663;\u6A91\u0161\u2669\u2676r\u0100du\u25B2\u266E\u0100;l\u0965\u2673;\u696Alk;\u6584cy;\u4459\u0280;acht\u0A48\u2688\u268B\u2691\u2696r\xF2\u25C1orne\xF2\u1D08ard;\u696Bri;\u65FA\u0100io\u269F\u26A4dot;\u4140ust\u0100;a\u26AC\u26AD\u63B0che\xBB\u26AD\u0200Eaes\u26BB\u26BD\u26C9\u26D4;\u6268p\u0100;p\u26C3\u26C4\u6A89rox\xBB\u26C4\u0100;q\u26CE\u26CF\u6A87\u0100;q\u26CE\u26BBim;\u62E6\u0400abnoptwz\u26E9\u26F4\u26F7\u271A\u272F\u2741\u2747\u2750\u0100nr\u26EE\u26F1g;\u67ECr;\u61FDr\xEB\u08C1g\u0180lmr\u26FF\u270D\u2714eft\u0100ar\u09E6\u2707ight\xE1\u09F2apsto;\u67FCight\xE1\u09FDparrow\u0100lr\u2725\u2729ef\xF4\u24EDight;\u61AC\u0180afl\u2736\u2739\u273Dr;\u6985;\uC000\u{1D55D}us;\u6A2Dimes;\u6A34\u0161\u274B\u274Fst;\u6217\xE1\u134E\u0180;ef\u2757\u2758\u1800\u65CAnge\xBB\u2758ar\u0100;l\u2764\u2765\u4028t;\u6993\u0280achmt\u2773\u2776\u277C\u2785\u2787r\xF2\u08A8orne\xF2\u1D8Car\u0100;d\u0F98\u2783;\u696D;\u600Eri;\u62BF\u0300achiqt\u2798\u279D\u0A40\u27A2\u27AE\u27BBquo;\u6039r;\uC000\u{1D4C1}m\u0180;eg\u09B2\u27AA\u27AC;\u6A8D;\u6A8F\u0100bu\u252A\u27B3o\u0100;r\u0E1F\u27B9;\u601Arok;\u4142\u8400<;cdhilqr\u082B\u27D2\u2639\u27DC\u27E0\u27E5\u27EA\u27F0\u0100ci\u27D7\u27D9;\u6AA6r;\u6A79re\xE5\u25F2mes;\u62C9arr;\u6976uest;\u6A7B\u0100Pi\u27F5\u27F9ar;\u6996\u0180;ef\u2800\u092D\u181B\u65C3r\u0100du\u2807\u280Dshar;\u694Ahar;\u6966\u0100en\u2817\u2821rtneqq;\uC000\u2268\uFE00\xC5\u281E\u0700Dacdefhilnopsu\u2840\u2845\u2882\u288E\u2893\u28A0\u28A5\u28A8\u28DA\u28E2\u28E4\u0A83\u28F3\u2902Dot;\u623A\u0200clpr\u284E\u2852\u2863\u287Dr\u803B\xAF\u40AF\u0100et\u2857\u2859;\u6642\u0100;e\u285E\u285F\u6720se\xBB\u285F\u0100;s\u103B\u2868to\u0200;dlu\u103B\u2873\u2877\u287Bow\xEE\u048Cef\xF4\u090F\xF0\u13D1ker;\u65AE\u0100oy\u2887\u288Cmma;\u6A29;\u443Cash;\u6014asuredangle\xBB\u1626r;\uC000\u{1D52A}o;\u6127\u0180cdn\u28AF\u28B4\u28C9ro\u803B\xB5\u40B5\u0200;acd\u1464\u28BD\u28C0\u28C4s\xF4\u16A7ir;\u6AF0ot\u80BB\xB7\u01B5us\u0180;bd\u28D2\u1903\u28D3\u6212\u0100;u\u1D3C\u28D8;\u6A2A\u0163\u28DE\u28E1p;\u6ADB\xF2\u2212\xF0\u0A81\u0100dp\u28E9\u28EEels;\u62A7f;\uC000\u{1D55E}\u0100ct\u28F8\u28FDr;\uC000\u{1D4C2}pos\xBB\u159D\u0180;lm\u2909\u290A\u290D\u43BCtimap;\u62B8\u0C00GLRVabcdefghijlmoprstuvw\u2942\u2953\u297E\u2989\u2998\u29DA\u29E9\u2A15\u2A1A\u2A58\u2A5D\u2A83\u2A95\u2AA4\u2AA8\u2B04\u2B07\u2B44\u2B7F\u2BAE\u2C34\u2C67\u2C7C\u2CE9\u0100gt\u2947\u294B;\uC000\u22D9\u0338\u0100;v\u2950\u0BCF\uC000\u226B\u20D2\u0180elt\u295A\u2972\u2976ft\u0100ar\u2961\u2967rrow;\u61CDightarrow;\u61CE;\uC000\u22D8\u0338\u0100;v\u297B\u0C47\uC000\u226A\u20D2ightarrow;\u61CF\u0100Dd\u298E\u2993ash;\u62AFash;\u62AE\u0280bcnpt\u29A3\u29A7\u29AC\u29B1\u29CCla\xBB\u02DEute;\u4144g;\uC000\u2220\u20D2\u0280;Eiop\u0D84\u29BC\u29C0\u29C5\u29C8;\uC000\u2A70\u0338d;\uC000\u224B\u0338s;\u4149ro\xF8\u0D84ur\u0100;a\u29D3\u29D4\u666El\u0100;s\u29D3\u0B38\u01F3\u29DF\0\u29E3p\u80BB\xA0\u0B37mp\u0100;e\u0BF9\u0C00\u0280aeouy\u29F4\u29FE\u2A03\u2A10\u2A13\u01F0\u29F9\0\u29FB;\u6A43on;\u4148dil;\u4146ng\u0100;d\u0D7E\u2A0Aot;\uC000\u2A6D\u0338p;\u6A42;\u443Dash;\u6013\u0380;Aadqsx\u0B92\u2A29\u2A2D\u2A3B\u2A41\u2A45\u2A50rr;\u61D7r\u0100hr\u2A33\u2A36k;\u6924\u0100;o\u13F2\u13F0ot;\uC000\u2250\u0338ui\xF6\u0B63\u0100ei\u2A4A\u2A4Ear;\u6928\xED\u0B98ist\u0100;s\u0BA0\u0B9Fr;\uC000\u{1D52B}\u0200Eest\u0BC5\u2A66\u2A79\u2A7C\u0180;qs\u0BBC\u2A6D\u0BE1\u0180;qs\u0BBC\u0BC5\u2A74lan\xF4\u0BE2i\xED\u0BEA\u0100;r\u0BB6\u2A81\xBB\u0BB7\u0180Aap\u2A8A\u2A8D\u2A91r\xF2\u2971rr;\u61AEar;\u6AF2\u0180;sv\u0F8D\u2A9C\u0F8C\u0100;d\u2AA1\u2AA2\u62FC;\u62FAcy;\u445A\u0380AEadest\u2AB7\u2ABA\u2ABE\u2AC2\u2AC5\u2AF6\u2AF9r\xF2\u2966;\uC000\u2266\u0338rr;\u619Ar;\u6025\u0200;fqs\u0C3B\u2ACE\u2AE3\u2AEFt\u0100ar\u2AD4\u2AD9rro\xF7\u2AC1ightarro\xF7\u2A90\u0180;qs\u0C3B\u2ABA\u2AEAlan\xF4\u0C55\u0100;s\u0C55\u2AF4\xBB\u0C36i\xED\u0C5D\u0100;r\u0C35\u2AFEi\u0100;e\u0C1A\u0C25i\xE4\u0D90\u0100pt\u2B0C\u2B11f;\uC000\u{1D55F}\u8180\xAC;in\u2B19\u2B1A\u2B36\u40ACn\u0200;Edv\u0B89\u2B24\u2B28\u2B2E;\uC000\u22F9\u0338ot;\uC000\u22F5\u0338\u01E1\u0B89\u2B33\u2B35;\u62F7;\u62F6i\u0100;v\u0CB8\u2B3C\u01E1\u0CB8\u2B41\u2B43;\u62FE;\u62FD\u0180aor\u2B4B\u2B63\u2B69r\u0200;ast\u0B7B\u2B55\u2B5A\u2B5Flle\xEC\u0B7Bl;\uC000\u2AFD\u20E5;\uC000\u2202\u0338lint;\u6A14\u0180;ce\u0C92\u2B70\u2B73u\xE5\u0CA5\u0100;c\u0C98\u2B78\u0100;e\u0C92\u2B7D\xF1\u0C98\u0200Aait\u2B88\u2B8B\u2B9D\u2BA7r\xF2\u2988rr\u0180;cw\u2B94\u2B95\u2B99\u619B;\uC000\u2933\u0338;\uC000\u219D\u0338ghtarrow\xBB\u2B95ri\u0100;e\u0CCB\u0CD6\u0380chimpqu\u2BBD\u2BCD\u2BD9\u2B04\u0B78\u2BE4\u2BEF\u0200;cer\u0D32\u2BC6\u0D37\u2BC9u\xE5\u0D45;\uC000\u{1D4C3}ort\u026D\u2B05\0\0\u2BD6ar\xE1\u2B56m\u0100;e\u0D6E\u2BDF\u0100;q\u0D74\u0D73su\u0100bp\u2BEB\u2BED\xE5\u0CF8\xE5\u0D0B\u0180bcp\u2BF6\u2C11\u2C19\u0200;Ees\u2BFF\u2C00\u0D22\u2C04\u6284;\uC000\u2AC5\u0338et\u0100;e\u0D1B\u2C0Bq\u0100;q\u0D23\u2C00c\u0100;e\u0D32\u2C17\xF1\u0D38\u0200;Ees\u2C22\u2C23\u0D5F\u2C27\u6285;\uC000\u2AC6\u0338et\u0100;e\u0D58\u2C2Eq\u0100;q\u0D60\u2C23\u0200gilr\u2C3D\u2C3F\u2C45\u2C47\xEC\u0BD7lde\u803B\xF1\u40F1\xE7\u0C43iangle\u0100lr\u2C52\u2C5Ceft\u0100;e\u0C1A\u2C5A\xF1\u0C26ight\u0100;e\u0CCB\u2C65\xF1\u0CD7\u0100;m\u2C6C\u2C6D\u43BD\u0180;es\u2C74\u2C75\u2C79\u4023ro;\u6116p;\u6007\u0480DHadgilrs\u2C8F\u2C94\u2C99\u2C9E\u2CA3\u2CB0\u2CB6\u2CD3\u2CE3ash;\u62ADarr;\u6904p;\uC000\u224D\u20D2ash;\u62AC\u0100et\u2CA8\u2CAC;\uC000\u2265\u20D2;\uC000>\u20D2nfin;\u69DE\u0180Aet\u2CBD\u2CC1\u2CC5rr;\u6902;\uC000\u2264\u20D2\u0100;r\u2CCA\u2CCD\uC000<\u20D2ie;\uC000\u22B4\u20D2\u0100At\u2CD8\u2CDCrr;\u6903rie;\uC000\u22B5\u20D2im;\uC000\u223C\u20D2\u0180Aan\u2CF0\u2CF4\u2D02rr;\u61D6r\u0100hr\u2CFA\u2CFDk;\u6923\u0100;o\u13E7\u13E5ear;\u6927\u1253\u1A95\0\0\0\0\0\0\0\0\0\0\0\0\0\u2D2D\0\u2D38\u2D48\u2D60\u2D65\u2D72\u2D84\u1B07\0\0\u2D8D\u2DAB\0\u2DC8\u2DCE\0\u2DDC\u2E19\u2E2B\u2E3E\u2E43\u0100cs\u2D31\u1A97ute\u803B\xF3\u40F3\u0100iy\u2D3C\u2D45r\u0100;c\u1A9E\u2D42\u803B\xF4\u40F4;\u443E\u0280abios\u1AA0\u2D52\u2D57\u01C8\u2D5Alac;\u4151v;\u6A38old;\u69BClig;\u4153\u0100cr\u2D69\u2D6Dir;\u69BF;\uC000\u{1D52C}\u036F\u2D79\0\0\u2D7C\0\u2D82n;\u42DBave\u803B\xF2\u40F2;\u69C1\u0100bm\u2D88\u0DF4ar;\u69B5\u0200acit\u2D95\u2D98\u2DA5\u2DA8r\xF2\u1A80\u0100ir\u2D9D\u2DA0r;\u69BEoss;\u69BBn\xE5\u0E52;\u69C0\u0180aei\u2DB1\u2DB5\u2DB9cr;\u414Dga;\u43C9\u0180cdn\u2DC0\u2DC5\u01CDron;\u43BF;\u69B6pf;\uC000\u{1D560}\u0180ael\u2DD4\u2DD7\u01D2r;\u69B7rp;\u69B9\u0380;adiosv\u2DEA\u2DEB\u2DEE\u2E08\u2E0D\u2E10\u2E16\u6228r\xF2\u1A86\u0200;efm\u2DF7\u2DF8\u2E02\u2E05\u6A5Dr\u0100;o\u2DFE\u2DFF\u6134f\xBB\u2DFF\u803B\xAA\u40AA\u803B\xBA\u40BAgof;\u62B6r;\u6A56lope;\u6A57;\u6A5B\u0180clo\u2E1F\u2E21\u2E27\xF2\u2E01ash\u803B\xF8\u40F8l;\u6298i\u016C\u2E2F\u2E34de\u803B\xF5\u40F5es\u0100;a\u01DB\u2E3As;\u6A36ml\u803B\xF6\u40F6bar;\u633D\u0AE1\u2E5E\0\u2E7D\0\u2E80\u2E9D\0\u2EA2\u2EB9\0\0\u2ECB\u0E9C\0\u2F13\0\0\u2F2B\u2FBC\0\u2FC8r\u0200;ast\u0403\u2E67\u2E72\u0E85\u8100\xB6;l\u2E6D\u2E6E\u40B6le\xEC\u0403\u0269\u2E78\0\0\u2E7Bm;\u6AF3;\u6AFDy;\u443Fr\u0280cimpt\u2E8B\u2E8F\u2E93\u1865\u2E97nt;\u4025od;\u402Eil;\u6030enk;\u6031r;\uC000\u{1D52D}\u0180imo\u2EA8\u2EB0\u2EB4\u0100;v\u2EAD\u2EAE\u43C6;\u43D5ma\xF4\u0A76ne;\u660E\u0180;tv\u2EBF\u2EC0\u2EC8\u43C0chfork\xBB\u1FFD;\u43D6\u0100au\u2ECF\u2EDFn\u0100ck\u2ED5\u2EDDk\u0100;h\u21F4\u2EDB;\u610E\xF6\u21F4s\u0480;abcdemst\u2EF3\u2EF4\u1908\u2EF9\u2EFD\u2F04\u2F06\u2F0A\u2F0E\u402Bcir;\u6A23ir;\u6A22\u0100ou\u1D40\u2F02;\u6A25;\u6A72n\u80BB\xB1\u0E9Dim;\u6A26wo;\u6A27\u0180ipu\u2F19\u2F20\u2F25ntint;\u6A15f;\uC000\u{1D561}nd\u803B\xA3\u40A3\u0500;Eaceinosu\u0EC8\u2F3F\u2F41\u2F44\u2F47\u2F81\u2F89\u2F92\u2F7E\u2FB6;\u6AB3p;\u6AB7u\xE5\u0ED9\u0100;c\u0ECE\u2F4C\u0300;acens\u0EC8\u2F59\u2F5F\u2F66\u2F68\u2F7Eppro\xF8\u2F43urlye\xF1\u0ED9\xF1\u0ECE\u0180aes\u2F6F\u2F76\u2F7Approx;\u6AB9qq;\u6AB5im;\u62E8i\xED\u0EDFme\u0100;s\u2F88\u0EAE\u6032\u0180Eas\u2F78\u2F90\u2F7A\xF0\u2F75\u0180dfp\u0EEC\u2F99\u2FAF\u0180als\u2FA0\u2FA5\u2FAAlar;\u632Eine;\u6312urf;\u6313\u0100;t\u0EFB\u2FB4\xEF\u0EFBrel;\u62B0\u0100ci\u2FC0\u2FC5r;\uC000\u{1D4C5};\u43C8ncsp;\u6008\u0300fiopsu\u2FDA\u22E2\u2FDF\u2FE5\u2FEB\u2FF1r;\uC000\u{1D52E}pf;\uC000\u{1D562}rime;\u6057cr;\uC000\u{1D4C6}\u0180aeo\u2FF8\u3009\u3013t\u0100ei\u2FFE\u3005rnion\xF3\u06B0nt;\u6A16st\u0100;e\u3010\u3011\u403F\xF1\u1F19\xF4\u0F14\u0A80ABHabcdefhilmnoprstux\u3040\u3051\u3055\u3059\u30E0\u310E\u312B\u3147\u3162\u3172\u318E\u3206\u3215\u3224\u3229\u3258\u326E\u3272\u3290\u32B0\u32B7\u0180art\u3047\u304A\u304Cr\xF2\u10B3\xF2\u03DDail;\u691Car\xF2\u1C65ar;\u6964\u0380cdenqrt\u3068\u3075\u3078\u307F\u308F\u3094\u30CC\u0100eu\u306D\u3071;\uC000\u223D\u0331te;\u4155i\xE3\u116Emptyv;\u69B3g\u0200;del\u0FD1\u3089\u308B\u308D;\u6992;\u69A5\xE5\u0FD1uo\u803B\xBB\u40BBr\u0580;abcfhlpstw\u0FDC\u30AC\u30AF\u30B7\u30B9\u30BC\u30BE\u30C0\u30C3\u30C7\u30CAp;\u6975\u0100;f\u0FE0\u30B4s;\u6920;\u6933s;\u691E\xEB\u225D\xF0\u272El;\u6945im;\u6974l;\u61A3;\u619D\u0100ai\u30D1\u30D5il;\u691Ao\u0100;n\u30DB\u30DC\u6236al\xF3\u0F1E\u0180abr\u30E7\u30EA\u30EEr\xF2\u17E5rk;\u6773\u0100ak\u30F3\u30FDc\u0100ek\u30F9\u30FB;\u407D;\u405D\u0100es\u3102\u3104;\u698Cl\u0100du\u310A\u310C;\u698E;\u6990\u0200aeuy\u3117\u311C\u3127\u3129ron;\u4159\u0100di\u3121\u3125il;\u4157\xEC\u0FF2\xE2\u30FA;\u4440\u0200clqs\u3134\u3137\u313D\u3144a;\u6937dhar;\u6969uo\u0100;r\u020E\u020Dh;\u61B3\u0180acg\u314E\u315F\u0F44l\u0200;ips\u0F78\u3158\u315B\u109Cn\xE5\u10BBar\xF4\u0FA9t;\u65AD\u0180ilr\u3169\u1023\u316Esht;\u697D;\uC000\u{1D52F}\u0100ao\u3177\u3186r\u0100du\u317D\u317F\xBB\u047B\u0100;l\u1091\u3184;\u696C\u0100;v\u318B\u318C\u43C1;\u43F1\u0180gns\u3195\u31F9\u31FCht\u0300ahlrst\u31A4\u31B0\u31C2\u31D8\u31E4\u31EErrow\u0100;t\u0FDC\u31ADa\xE9\u30C8arpoon\u0100du\u31BB\u31BFow\xEE\u317Ep\xBB\u1092eft\u0100ah\u31CA\u31D0rrow\xF3\u0FEAarpoon\xF3\u0551ightarrows;\u61C9quigarro\xF7\u30CBhreetimes;\u62CCg;\u42DAingdotse\xF1\u1F32\u0180ahm\u320D\u3210\u3213r\xF2\u0FEAa\xF2\u0551;\u600Foust\u0100;a\u321E\u321F\u63B1che\xBB\u321Fmid;\u6AEE\u0200abpt\u3232\u323D\u3240\u3252\u0100nr\u3237\u323Ag;\u67EDr;\u61FEr\xEB\u1003\u0180afl\u3247\u324A\u324Er;\u6986;\uC000\u{1D563}us;\u6A2Eimes;\u6A35\u0100ap\u325D\u3267r\u0100;g\u3263\u3264\u4029t;\u6994olint;\u6A12ar\xF2\u31E3\u0200achq\u327B\u3280\u10BC\u3285quo;\u603Ar;\uC000\u{1D4C7}\u0100bu\u30FB\u328Ao\u0100;r\u0214\u0213\u0180hir\u3297\u329B\u32A0re\xE5\u31F8mes;\u62CAi\u0200;efl\u32AA\u1059\u1821\u32AB\u65B9tri;\u69CEluhar;\u6968;\u611E\u0D61\u32D5\u32DB\u32DF\u332C\u3338\u3371\0\u337A\u33A4\0\0\u33EC\u33F0\0\u3428\u3448\u345A\u34AD\u34B1\u34CA\u34F1\0\u3616\0\0\u3633cute;\u415Bqu\xEF\u27BA\u0500;Eaceinpsy\u11ED\u32F3\u32F5\u32FF\u3302\u330B\u330F\u331F\u3326\u3329;\u6AB4\u01F0\u32FA\0\u32FC;\u6AB8on;\u4161u\xE5\u11FE\u0100;d\u11F3\u3307il;\u415Frc;\u415D\u0180Eas\u3316\u3318\u331B;\u6AB6p;\u6ABAim;\u62E9olint;\u6A13i\xED\u1204;\u4441ot\u0180;be\u3334\u1D47\u3335\u62C5;\u6A66\u0380Aacmstx\u3346\u334A\u3357\u335B\u335E\u3363\u336Drr;\u61D8r\u0100hr\u3350\u3352\xEB\u2228\u0100;o\u0A36\u0A34t\u803B\xA7\u40A7i;\u403Bwar;\u6929m\u0100in\u3369\xF0nu\xF3\xF1t;\u6736r\u0100;o\u3376\u2055\uC000\u{1D530}\u0200acoy\u3382\u3386\u3391\u33A0rp;\u666F\u0100hy\u338B\u338Fcy;\u4449;\u4448rt\u026D\u3399\0\0\u339Ci\xE4\u1464ara\xEC\u2E6F\u803B\xAD\u40AD\u0100gm\u33A8\u33B4ma\u0180;fv\u33B1\u33B2\u33B2\u43C3;\u43C2\u0400;deglnpr\u12AB\u33C5\u33C9\u33CE\u33D6\u33DE\u33E1\u33E6ot;\u6A6A\u0100;q\u12B1\u12B0\u0100;E\u33D3\u33D4\u6A9E;\u6AA0\u0100;E\u33DB\u33DC\u6A9D;\u6A9Fe;\u6246lus;\u6A24arr;\u6972ar\xF2\u113D\u0200aeit\u33F8\u3408\u340F\u3417\u0100ls\u33FD\u3404lsetm\xE9\u336Ahp;\u6A33parsl;\u69E4\u0100dl\u1463\u3414e;\u6323\u0100;e\u341C\u341D\u6AAA\u0100;s\u3422\u3423\u6AAC;\uC000\u2AAC\uFE00\u0180flp\u342E\u3433\u3442tcy;\u444C\u0100;b\u3438\u3439\u402F\u0100;a\u343E\u343F\u69C4r;\u633Ff;\uC000\u{1D564}a\u0100dr\u344D\u0402es\u0100;u\u3454\u3455\u6660it\xBB\u3455\u0180csu\u3460\u3479\u349F\u0100au\u3465\u346Fp\u0100;s\u1188\u346B;\uC000\u2293\uFE00p\u0100;s\u11B4\u3475;\uC000\u2294\uFE00u\u0100bp\u347F\u348F\u0180;es\u1197\u119C\u3486et\u0100;e\u1197\u348D\xF1\u119D\u0180;es\u11A8\u11AD\u3496et\u0100;e\u11A8\u349D\xF1\u11AE\u0180;af\u117B\u34A6\u05B0r\u0165\u34AB\u05B1\xBB\u117Car\xF2\u1148\u0200cemt\u34B9\u34BE\u34C2\u34C5r;\uC000\u{1D4C8}tm\xEE\xF1i\xEC\u3415ar\xE6\u11BE\u0100ar\u34CE\u34D5r\u0100;f\u34D4\u17BF\u6606\u0100an\u34DA\u34EDight\u0100ep\u34E3\u34EApsilo\xEE\u1EE0h\xE9\u2EAFs\xBB\u2852\u0280bcmnp\u34FB\u355E\u1209\u358B\u358E\u0480;Edemnprs\u350E\u350F\u3511\u3515\u351E\u3523\u352C\u3531\u3536\u6282;\u6AC5ot;\u6ABD\u0100;d\u11DA\u351Aot;\u6AC3ult;\u6AC1\u0100Ee\u3528\u352A;\u6ACB;\u628Alus;\u6ABFarr;\u6979\u0180eiu\u353D\u3552\u3555t\u0180;en\u350E\u3545\u354Bq\u0100;q\u11DA\u350Feq\u0100;q\u352B\u3528m;\u6AC7\u0100bp\u355A\u355C;\u6AD5;\u6AD3c\u0300;acens\u11ED\u356C\u3572\u3579\u357B\u3326ppro\xF8\u32FAurlye\xF1\u11FE\xF1\u11F3\u0180aes\u3582\u3588\u331Bppro\xF8\u331Aq\xF1\u3317g;\u666A\u0680123;Edehlmnps\u35A9\u35AC\u35AF\u121C\u35B2\u35B4\u35C0\u35C9\u35D5\u35DA\u35DF\u35E8\u35ED\u803B\xB9\u40B9\u803B\xB2\u40B2\u803B\xB3\u40B3;\u6AC6\u0100os\u35B9\u35BCt;\u6ABEub;\u6AD8\u0100;d\u1222\u35C5ot;\u6AC4s\u0100ou\u35CF\u35D2l;\u67C9b;\u6AD7arr;\u697Bult;\u6AC2\u0100Ee\u35E4\u35E6;\u6ACC;\u628Blus;\u6AC0\u0180eiu\u35F4\u3609\u360Ct\u0180;en\u121C\u35FC\u3602q\u0100;q\u1222\u35B2eq\u0100;q\u35E7\u35E4m;\u6AC8\u0100bp\u3611\u3613;\u6AD4;\u6AD6\u0180Aan\u361C\u3620\u362Drr;\u61D9r\u0100hr\u3626\u3628\xEB\u222E\u0100;o\u0A2B\u0A29war;\u692Alig\u803B\xDF\u40DF\u0BE1\u3651\u365D\u3660\u12CE\u3673\u3679\0\u367E\u36C2\0\0\0\0\0\u36DB\u3703\0\u3709\u376C\0\0\0\u3787\u0272\u3656\0\0\u365Bget;\u6316;\u43C4r\xEB\u0E5F\u0180aey\u3666\u366B\u3670ron;\u4165dil;\u4163;\u4442lrec;\u6315r;\uC000\u{1D531}\u0200eiko\u3686\u369D\u36B5\u36BC\u01F2\u368B\0\u3691e\u01004f\u1284\u1281a\u0180;sv\u3698\u3699\u369B\u43B8ym;\u43D1\u0100cn\u36A2\u36B2k\u0100as\u36A8\u36AEppro\xF8\u12C1im\xBB\u12ACs\xF0\u129E\u0100as\u36BA\u36AE\xF0\u12C1rn\u803B\xFE\u40FE\u01EC\u031F\u36C6\u22E7es\u8180\xD7;bd\u36CF\u36D0\u36D8\u40D7\u0100;a\u190F\u36D5r;\u6A31;\u6A30\u0180eps\u36E1\u36E3\u3700\xE1\u2A4D\u0200;bcf\u0486\u36EC\u36F0\u36F4ot;\u6336ir;\u6AF1\u0100;o\u36F9\u36FC\uC000\u{1D565}rk;\u6ADA\xE1\u3362rime;\u6034\u0180aip\u370F\u3712\u3764d\xE5\u1248\u0380adempst\u3721\u374D\u3740\u3751\u3757\u375C\u375Fngle\u0280;dlqr\u3730\u3731\u3736\u3740\u3742\u65B5own\xBB\u1DBBeft\u0100;e\u2800\u373E\xF1\u092E;\u625Cight\u0100;e\u32AA\u374B\xF1\u105Aot;\u65ECinus;\u6A3Alus;\u6A39b;\u69CDime;\u6A3Bezium;\u63E2\u0180cht\u3772\u377D\u3781\u0100ry\u3777\u377B;\uC000\u{1D4C9};\u4446cy;\u445Brok;\u4167\u0100io\u378B\u378Ex\xF4\u1777head\u0100lr\u3797\u37A0eftarro\xF7\u084Fightarrow\xBB\u0F5D\u0900AHabcdfghlmoprstuw\u37D0\u37D3\u37D7\u37E4\u37F0\u37FC\u380E\u381C\u3823\u3834\u3851\u385D\u386B\u38A9\u38CC\u38D2\u38EA\u38F6r\xF2\u03EDar;\u6963\u0100cr\u37DC\u37E2ute\u803B\xFA\u40FA\xF2\u1150r\u01E3\u37EA\0\u37EDy;\u445Eve;\u416D\u0100iy\u37F5\u37FArc\u803B\xFB\u40FB;\u4443\u0180abh\u3803\u3806\u380Br\xF2\u13ADlac;\u4171a\xF2\u13C3\u0100ir\u3813\u3818sht;\u697E;\uC000\u{1D532}rave\u803B\xF9\u40F9\u0161\u3827\u3831r\u0100lr\u382C\u382E\xBB\u0957\xBB\u1083lk;\u6580\u0100ct\u3839\u384D\u026F\u383F\0\0\u384Arn\u0100;e\u3845\u3846\u631Cr\xBB\u3846op;\u630Fri;\u65F8\u0100al\u3856\u385Acr;\u416B\u80BB\xA8\u0349\u0100gp\u3862\u3866on;\u4173f;\uC000\u{1D566}\u0300adhlsu\u114B\u3878\u387D\u1372\u3891\u38A0own\xE1\u13B3arpoon\u0100lr\u3888\u388Cef\xF4\u382Digh\xF4\u382Fi\u0180;hl\u3899\u389A\u389C\u43C5\xBB\u13FAon\xBB\u389Aparrows;\u61C8\u0180cit\u38B0\u38C4\u38C8\u026F\u38B6\0\0\u38C1rn\u0100;e\u38BC\u38BD\u631Dr\xBB\u38BDop;\u630Eng;\u416Fri;\u65F9cr;\uC000\u{1D4CA}\u0180dir\u38D9\u38DD\u38E2ot;\u62F0lde;\u4169i\u0100;f\u3730\u38E8\xBB\u1813\u0100am\u38EF\u38F2r\xF2\u38A8l\u803B\xFC\u40FCangle;\u69A7\u0780ABDacdeflnoprsz\u391C\u391F\u3929\u392D\u39B5\u39B8\u39BD\u39DF\u39E4\u39E8\u39F3\u39F9\u39FD\u3A01\u3A20r\xF2\u03F7ar\u0100;v\u3926\u3927\u6AE8;\u6AE9as\xE8\u03E1\u0100nr\u3932\u3937grt;\u699C\u0380eknprst\u34E3\u3946\u394B\u3952\u395D\u3964\u3996app\xE1\u2415othin\xE7\u1E96\u0180hir\u34EB\u2EC8\u3959op\xF4\u2FB5\u0100;h\u13B7\u3962\xEF\u318D\u0100iu\u3969\u396Dgm\xE1\u33B3\u0100bp\u3972\u3984setneq\u0100;q\u397D\u3980\uC000\u228A\uFE00;\uC000\u2ACB\uFE00setneq\u0100;q\u398F\u3992\uC000\u228B\uFE00;\uC000\u2ACC\uFE00\u0100hr\u399B\u399Fet\xE1\u369Ciangle\u0100lr\u39AA\u39AFeft\xBB\u0925ight\xBB\u1051y;\u4432ash\xBB\u1036\u0180elr\u39C4\u39D2\u39D7\u0180;be\u2DEA\u39CB\u39CFar;\u62BBq;\u625Alip;\u62EE\u0100bt\u39DC\u1468a\xF2\u1469r;\uC000\u{1D533}tr\xE9\u39AEsu\u0100bp\u39EF\u39F1\xBB\u0D1C\xBB\u0D59pf;\uC000\u{1D567}ro\xF0\u0EFBtr\xE9\u39B4\u0100cu\u3A06\u3A0Br;\uC000\u{1D4CB}\u0100bp\u3A10\u3A18n\u0100Ee\u3980\u3A16\xBB\u397En\u0100Ee\u3992\u3A1E\xBB\u3990igzag;\u699A\u0380cefoprs\u3A36\u3A3B\u3A56\u3A5B\u3A54\u3A61\u3A6Airc;\u4175\u0100di\u3A40\u3A51\u0100bg\u3A45\u3A49ar;\u6A5Fe\u0100;q\u15FA\u3A4F;\u6259erp;\u6118r;\uC000\u{1D534}pf;\uC000\u{1D568}\u0100;e\u1479\u3A66at\xE8\u1479cr;\uC000\u{1D4CC}\u0AE3\u178E\u3A87\0\u3A8B\0\u3A90\u3A9B\0\0\u3A9D\u3AA8\u3AAB\u3AAF\0\0\u3AC3\u3ACE\0\u3AD8\u17DC\u17DFtr\xE9\u17D1r;\uC000\u{1D535}\u0100Aa\u3A94\u3A97r\xF2\u03C3r\xF2\u09F6;\u43BE\u0100Aa\u3AA1\u3AA4r\xF2\u03B8r\xF2\u09EBa\xF0\u2713is;\u62FB\u0180dpt\u17A4\u3AB5\u3ABE\u0100fl\u3ABA\u17A9;\uC000\u{1D569}im\xE5\u17B2\u0100Aa\u3AC7\u3ACAr\xF2\u03CEr\xF2\u0A01\u0100cq\u3AD2\u17B8r;\uC000\u{1D4CD}\u0100pt\u17D6\u3ADCr\xE9\u17D4\u0400acefiosu\u3AF0\u3AFD\u3B08\u3B0C\u3B11\u3B15\u3B1B\u3B21c\u0100uy\u3AF6\u3AFBte\u803B\xFD\u40FD;\u444F\u0100iy\u3B02\u3B06rc;\u4177;\u444Bn\u803B\xA5\u40A5r;\uC000\u{1D536}cy;\u4457pf;\uC000\u{1D56A}cr;\uC000\u{1D4CE}\u0100cm\u3B26\u3B29y;\u444El\u803B\xFF\u40FF\u0500acdefhiosw\u3B42\u3B48\u3B54\u3B58\u3B64\u3B69\u3B6D\u3B74\u3B7A\u3B80cute;\u417A\u0100ay\u3B4D\u3B52ron;\u417E;\u4437ot;\u417C\u0100et\u3B5D\u3B61tr\xE6\u155Fa;\u43B6r;\uC000\u{1D537}cy;\u4436grarr;\u61DDpf;\uC000\u{1D56B}cr;\uC000\u{1D4CF}\u0100jn\u3B85\u3B87;\u600Dj;\u600C'.split("").map((c) => c.charCodeAt(0))
);
}
});
// node_modules/entities/lib/esm/generated/decode-data-xml.js
var decode_data_xml_default;
var init_decode_data_xml = __esm({
"node_modules/entities/lib/esm/generated/decode-data-xml.js"() {
decode_data_xml_default = new Uint16Array(
// prettier-ignore
"\u0200aglq \x1B\u026D\0\0p;\u4026os;\u4027t;\u403Et;\u403Cuot;\u4022".split("").map((c) => c.charCodeAt(0))
);
}
});
// node_modules/entities/lib/esm/decode_codepoint.js
function replaceCodePoint(codePoint) {
var _a2;
if (codePoint >= 55296 && codePoint <= 57343 || codePoint > 1114111) {
return 65533;
}
return (_a2 = decodeMap.get(codePoint)) !== null && _a2 !== void 0 ? _a2 : codePoint;
}
var _a, decodeMap, fromCodePoint;
var init_decode_codepoint = __esm({
"node_modules/entities/lib/esm/decode_codepoint.js"() {
decodeMap = /* @__PURE__ */ new Map([
[0, 65533],
// C1 Unicode control character reference replacements
[128, 8364],
[130, 8218],
[131, 402],
[132, 8222],
[133, 8230],
[134, 8224],
[135, 8225],
[136, 710],
[137, 8240],
[138, 352],
[139, 8249],
[140, 338],
[142, 381],
[145, 8216],
[146, 8217],
[147, 8220],
[148, 8221],
[149, 8226],
[150, 8211],
[151, 8212],
[152, 732],
[153, 8482],
[154, 353],
[155, 8250],
[156, 339],
[158, 382],
[159, 376]
]);
fromCodePoint = // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition, node/no-unsupported-features/es-builtins
(_a = String.fromCodePoint) !== null && _a !== void 0 ? _a : function(codePoint) {
let output = "";
if (codePoint > 65535) {
codePoint -= 65536;
output += String.fromCharCode(codePoint >>> 10 & 1023 | 55296);
codePoint = 56320 | codePoint & 1023;
}
output += String.fromCharCode(codePoint);
return output;
};
}
});
// node_modules/entities/lib/esm/decode.js
function isNumber2(code) {
return code >= CharCodes.ZERO && code <= CharCodes.NINE;
}
function isHexadecimalCharacter(code) {
return code >= CharCodes.UPPER_A && code <= CharCodes.UPPER_F || code >= CharCodes.LOWER_A && code <= CharCodes.LOWER_F;
}
function isAsciiAlphaNumeric(code) {
return code >= CharCodes.UPPER_A && code <= CharCodes.UPPER_Z || code >= CharCodes.LOWER_A && code <= CharCodes.LOWER_Z || isNumber2(code);
}
function isEntityInAttributeInvalidEnd(code) {
return code === CharCodes.EQUALS || isAsciiAlphaNumeric(code);
}
function getDecoder(decodeTree) {
let ret = "";
const decoder = new EntityDecoder(decodeTree, (str) => ret += fromCodePoint(str));
return function decodeWithTrie(str, decodeMode) {
let lastIndex = 0;
let offset = 0;
while ((offset = str.indexOf("&", offset)) >= 0) {
ret += str.slice(lastIndex, offset);
decoder.startEntity(decodeMode);
const len = decoder.write(
str,
// Skip the "&"
offset + 1
);
if (len < 0) {
lastIndex = offset + decoder.end();
break;
}
lastIndex = offset + len;
offset = len === 0 ? lastIndex + 1 : lastIndex;
}
const result = ret + str.slice(lastIndex);
ret = "";
return result;
};
}
function determineBranch(decodeTree, current, nodeIdx, char) {
const branchCount = (current & BinTrieFlags.BRANCH_LENGTH) >> 7;
const jumpOffset = current & BinTrieFlags.JUMP_TABLE;
if (branchCount === 0) {
return jumpOffset !== 0 && char === jumpOffset ? nodeIdx : -1;
}
if (jumpOffset) {
const value = char - jumpOffset;
return value < 0 || value >= branchCount ? -1 : decodeTree[nodeIdx + value] - 1;
}
let lo = nodeIdx;
let hi = lo + branchCount - 1;
while (lo <= hi) {
const mid = lo + hi >>> 1;
const midVal = decodeTree[mid];
if (midVal < char) {
lo = mid + 1;
} else if (midVal > char) {
hi = mid - 1;
} else {
return decodeTree[mid + branchCount];
}
}
return -1;
}
var CharCodes, TO_LOWER_BIT, BinTrieFlags, EntityDecoderState, DecodingMode, EntityDecoder, htmlDecoder, xmlDecoder;
var init_decode = __esm({
"node_modules/entities/lib/esm/decode.js"() {
init_decode_data_html();
init_decode_data_xml();
init_decode_codepoint();
init_decode_codepoint();
(function(CharCodes3) {
CharCodes3[CharCodes3["NUM"] = 35] = "NUM";
CharCodes3[CharCodes3["SEMI"] = 59] = "SEMI";
CharCodes3[CharCodes3["EQUALS"] = 61] = "EQUALS";
CharCodes3[CharCodes3["ZERO"] = 48] = "ZERO";
CharCodes3[CharCodes3["NINE"] = 57] = "NINE";
CharCodes3[CharCodes3["LOWER_A"] = 97] = "LOWER_A";
CharCodes3[CharCodes3["LOWER_F"] = 102] = "LOWER_F";
CharCodes3[CharCodes3["LOWER_X"] = 120] = "LOWER_X";
CharCodes3[CharCodes3["LOWER_Z"] = 122] = "LOWER_Z";
CharCodes3[CharCodes3["UPPER_A"] = 65] = "UPPER_A";
CharCodes3[CharCodes3["UPPER_F"] = 70] = "UPPER_F";
CharCodes3[CharCodes3["UPPER_Z"] = 90] = "UPPER_Z";
})(CharCodes || (CharCodes = {}));
TO_LOWER_BIT = 32;
(function(BinTrieFlags2) {
BinTrieFlags2[BinTrieFlags2["VALUE_LENGTH"] = 49152] = "VALUE_LENGTH";
BinTrieFlags2[BinTrieFlags2["BRANCH_LENGTH"] = 16256] = "BRANCH_LENGTH";
BinTrieFlags2[BinTrieFlags2["JUMP_TABLE"] = 127] = "JUMP_TABLE";
})(BinTrieFlags || (BinTrieFlags = {}));
(function(EntityDecoderState2) {
EntityDecoderState2[EntityDecoderState2["EntityStart"] = 0] = "EntityStart";
EntityDecoderState2[EntityDecoderState2["NumericStart"] = 1] = "NumericStart";
EntityDecoderState2[EntityDecoderState2["NumericDecimal"] = 2] = "NumericDecimal";
EntityDecoderState2[EntityDecoderState2["NumericHex"] = 3] = "NumericHex";
EntityDecoderState2[EntityDecoderState2["NamedEntity"] = 4] = "NamedEntity";
})(EntityDecoderState || (EntityDecoderState = {}));
(function(DecodingMode2) {
DecodingMode2[DecodingMode2["Legacy"] = 0] = "Legacy";
DecodingMode2[DecodingMode2["Strict"] = 1] = "Strict";
DecodingMode2[DecodingMode2["Attribute"] = 2] = "Attribute";
})(DecodingMode || (DecodingMode = {}));
EntityDecoder = class {
constructor(decodeTree, emitCodePoint, errors) {
this.decodeTree = decodeTree;
this.emitCodePoint = emitCodePoint;
this.errors = errors;
this.state = EntityDecoderState.EntityStart;
this.consumed = 1;
this.result = 0;
this.treeIndex = 0;
this.excess = 1;
this.decodeMode = DecodingMode.Strict;
}
/** Resets the instance to make it reusable. */
startEntity(decodeMode) {
this.decodeMode = decodeMode;
this.state = EntityDecoderState.EntityStart;
this.result = 0;
this.treeIndex = 0;
this.excess = 1;
this.consumed = 1;
}
/**
* Write an entity to the decoder. This can be called multiple times with partial entities.
* If the entity is incomplete, the decoder will return -1.
*
* Mirrors the implementation of `getDecoder`, but with the ability to stop decoding if the
* entity is incomplete, and resume when the next string is written.
*
* @param string The string containing the entity (or a continuation of the entity).
* @param offset The offset at which the entity begins. Should be 0 if this is not the first call.
* @returns The number of characters that were consumed, or -1 if the entity is incomplete.
*/
write(str, offset) {
switch (this.state) {
case EntityDecoderState.EntityStart: {
if (str.charCodeAt(offset) === CharCodes.NUM) {
this.state = EntityDecoderState.NumericStart;
this.consumed += 1;
return this.stateNumericStart(str, offset + 1);
}
this.state = EntityDecoderState.NamedEntity;
return this.stateNamedEntity(str, offset);
}
case EntityDecoderState.NumericStart: {
return this.stateNumericStart(str, offset);
}
case EntityDecoderState.NumericDecimal: {
return this.stateNumericDecimal(str, offset);
}
case EntityDecoderState.NumericHex: {
return this.stateNumericHex(str, offset);
}
case EntityDecoderState.NamedEntity: {
return this.stateNamedEntity(str, offset);
}
}
}
/**
* Switches between the numeric decimal and hexadecimal states.
*
* Equivalent to the `Numeric character reference state` in the HTML spec.
*
* @param str The string containing the entity (or a continuation of the entity).
* @param offset The current offset.
* @returns The number of characters that were consumed, or -1 if the entity is incomplete.
*/
stateNumericStart(str, offset) {
if (offset >= str.length) {
return -1;
}
if ((str.charCodeAt(offset) | TO_LOWER_BIT) === CharCodes.LOWER_X) {
this.state = EntityDecoderState.NumericHex;
this.consumed += 1;
return this.stateNumericHex(str, offset + 1);
}
this.state = EntityDecoderState.NumericDecimal;
return this.stateNumericDecimal(str, offset);
}
addToNumericResult(str, start, end2, base) {
if (start !== end2) {
const digitCount = end2 - start;
this.result = this.result * Math.pow(base, digitCount) + parseInt(str.substr(start, digitCount), base);
this.consumed += digitCount;
}
}
/**
* Parses a hexadecimal numeric entity.
*
* Equivalent to the `Hexademical character reference state` in the HTML spec.
*
* @param str The string containing the entity (or a continuation of the entity).
* @param offset The current offset.
* @returns The number of characters that were consumed, or -1 if the entity is incomplete.
*/
stateNumericHex(str, offset) {
const startIdx = offset;
while (offset < str.length) {
const char = str.charCodeAt(offset);
if (isNumber2(char) || isHexadecimalCharacter(char)) {
offset += 1;
} else {
this.addToNumericResult(str, startIdx, offset, 16);
return this.emitNumericEntity(char, 3);
}
}
this.addToNumericResult(str, startIdx, offset, 16);
return -1;
}
/**
* Parses a decimal numeric entity.
*
* Equivalent to the `Decimal character reference state` in the HTML spec.
*
* @param str The string containing the entity (or a continuation of the entity).
* @param offset The current offset.
* @returns The number of characters that were consumed, or -1 if the entity is incomplete.
*/
stateNumericDecimal(str, offset) {
const startIdx = offset;
while (offset < str.length) {
const char = str.charCodeAt(offset);
if (isNumber2(char)) {
offset += 1;
} else {
this.addToNumericResult(str, startIdx, offset, 10);
return this.emitNumericEntity(char, 2);
}
}
this.addToNumericResult(str, startIdx, offset, 10);
return -1;
}
/**
* Validate and emit a numeric entity.
*
* Implements the logic from the `Hexademical character reference start
* state` and `Numeric character reference end state` in the HTML spec.
*
* @param lastCp The last code point of the entity. Used to see if the
* entity was terminated with a semicolon.
* @param expectedLength The minimum number of characters that should be
* consumed. Used to validate that at least one digit
* was consumed.
* @returns The number of characters that were consumed.
*/
emitNumericEntity(lastCp, expectedLength) {
var _a2;
if (this.consumed <= expectedLength) {
(_a2 = this.errors) === null || _a2 === void 0 ? void 0 : _a2.absenceOfDigitsInNumericCharacterReference(this.consumed);
return 0;
}
if (lastCp === CharCodes.SEMI) {
this.consumed += 1;
} else if (this.decodeMode === DecodingMode.Strict) {
return 0;
}
this.emitCodePoint(replaceCodePoint(this.result), this.consumed);
if (this.errors) {
if (lastCp !== CharCodes.SEMI) {
this.errors.missingSemicolonAfterCharacterReference();
}
this.errors.validateNumericCharacterReference(this.result);
}
return this.consumed;
}
/**
* Parses a named entity.
*
* Equivalent to the `Named character reference state` in the HTML spec.
*
* @param str The string containing the entity (or a continuation of the entity).
* @param offset The current offset.
* @returns The number of characters that were consumed, or -1 if the entity is incomplete.
*/
stateNamedEntity(str, offset) {
const { decodeTree } = this;
let current = decodeTree[this.treeIndex];
let valueLength = (current & BinTrieFlags.VALUE_LENGTH) >> 14;
for (; offset < str.length; offset++, this.excess++) {
const char = str.charCodeAt(offset);
this.treeIndex = determineBranch(decodeTree, current, this.treeIndex + Math.max(1, valueLength), char);
if (this.treeIndex < 0) {
return this.result === 0 || // If we are parsing an attribute
this.decodeMode === DecodingMode.Attribute && // We shouldn't have consumed any characters after the entity,
(valueLength === 0 || // And there should be no invalid characters.
isEntityInAttributeInvalidEnd(char)) ? 0 : this.emitNotTerminatedNamedEntity();
}
current = decodeTree[this.treeIndex];
valueLength = (current & BinTrieFlags.VALUE_LENGTH) >> 14;
if (valueLength !== 0) {
if (char === CharCodes.SEMI) {
return this.emitNamedEntityData(this.treeIndex, valueLength, this.consumed + this.excess);
}
if (this.decodeMode !== DecodingMode.Strict) {
this.result = this.treeIndex;
this.consumed += this.excess;
this.excess = 0;
}
}
}
return -1;
}
/**
* Emit a named entity that was not terminated with a semicolon.
*
* @returns The number of characters consumed.
*/
emitNotTerminatedNamedEntity() {
var _a2;
const { result, decodeTree } = this;
const valueLength = (decodeTree[result] & BinTrieFlags.VALUE_LENGTH) >> 14;
this.emitNamedEntityData(result, valueLength, this.consumed);
(_a2 = this.errors) === null || _a2 === void 0 ? void 0 : _a2.missingSemicolonAfterCharacterReference();
return this.consumed;
}
/**
* Emit a named entity.
*
* @param result The index of the entity in the decode tree.
* @param valueLength The number of bytes in the entity.
* @param consumed The number of characters consumed.
*
* @returns The number of characters consumed.
*/
emitNamedEntityData(result, valueLength, consumed) {
const { decodeTree } = this;
this.emitCodePoint(valueLength === 1 ? decodeTree[result] & ~BinTrieFlags.VALUE_LENGTH : decodeTree[result + 1], consumed);
if (valueLength === 3) {
this.emitCodePoint(decodeTree[result + 2], consumed);
}
return consumed;
}
/**
* Signal to the parser that the end of the input was reached.
*
* Remaining data will be emitted and relevant errors will be produced.
*
* @returns The number of characters consumed.
*/
end() {
var _a2;
switch (this.state) {
case EntityDecoderState.NamedEntity: {
return this.result !== 0 && (this.decodeMode !== DecodingMode.Attribute || this.result === this.treeIndex) ? this.emitNotTerminatedNamedEntity() : 0;
}
// Otherwise, emit a numeric entity if we have one.
case EntityDecoderState.NumericDecimal: {
return this.emitNumericEntity(0, 2);
}
case EntityDecoderState.NumericHex: {
return this.emitNumericEntity(0, 3);
}
case EntityDecoderState.NumericStart: {
(_a2 = this.errors) === null || _a2 === void 0 ? void 0 : _a2.absenceOfDigitsInNumericCharacterReference(this.consumed);
return 0;
}
case EntityDecoderState.EntityStart: {
return 0;
}
}
}
};
htmlDecoder = getDecoder(decode_data_html_default);
xmlDecoder = getDecoder(decode_data_xml_default);
}
});
// node_modules/entities/lib/esm/generated/encode-html.js
function restoreDiff(arr) {
for (let i = 1; i < arr.length; i++) {
arr[i][0] += arr[i - 1][0] + 1;
}
return arr;
}
var encode_html_default;
var init_encode_html = __esm({
"node_modules/entities/lib/esm/generated/encode-html.js"() {
encode_html_default = new Map(/* @__PURE__ */ restoreDiff([[9, "	"], [0, "
"], [22, "!"], [0, """], [0, "#"], [0, "$"], [0, "%"], [0, "&"], [0, "'"], [0, "("], [0, ")"], [0, "*"], [0, "+"], [0, ","], [1, "."], [0, "/"], [10, ":"], [0, ";"], [0, { v: "<", n: 8402, o: "<⃒" }], [0, { v: "=", n: 8421, o: "=⃥" }], [0, { v: ">", n: 8402, o: ">⃒" }], [0, "?"], [0, "@"], [26, "["], [0, "\"], [0, "]"], [0, "^"], [0, "_"], [0, "`"], [5, { n: 106, o: "fj" }], [20, "{"], [0, "|"], [0, "}"], [34, " "], [0, "¡"], [0, "¢"], [0, "£"], [0, "¤"], [0, "¥"], [0, "¦"], [0, "§"], [0, "¨"], [0, "©"], [0, "ª"], [0, "«"], [0, "¬"], [0, "­"], [0, "®"], [0, "¯"], [0, "°"], [0, "±"], [0, "²"], [0, "³"], [0, "´"], [0, "µ"], [0, "¶"], [0, "·"], [0, "¸"], [0, "¹"], [0, "º"], [0, "»"], [0, "¼"], [0, "½"], [0, "¾"], [0, "¿"], [0, "À"], [0, "Á"], [0, "Â"], [0, "Ã"], [0, "Ä"], [0, "Å"], [0, "Æ"], [0, "Ç"], [0, "È"], [0, "É"], [0, "Ê"], [0, "Ë"], [0, "Ì"], [0, "Í"], [0, "Î"], [0, "Ï"], [0, "Ð"], [0, "Ñ"], [0, "Ò"], [0, "Ó"], [0, "Ô"], [0, "Õ"], [0, "Ö"], [0, "×"], [0, "Ø"], [0, "Ù"], [0, "Ú"], [0, "Û"], [0, "Ü"], [0, "Ý"], [0, "Þ"], [0, "ß"], [0, "à"], [0, "á"], [0, "â"], [0, "ã"], [0, "ä"], [0, "å"], [0, "æ"], [0, "ç"], [0, "è"], [0, "é"], [0, "ê"], [0, "ë"], [0, "ì"], [0, "í"], [0, "î"], [0, "ï"], [0, "ð"], [0, "ñ"], [0, "ò"], [0, "ó"], [0, "ô"], [0, "õ"], [0, "ö"], [0, "÷"], [0, "ø"], [0, "ù"], [0, "ú"], [0, "û"], [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, "ė"], [0, "Ę"], [0, "ę"], [0, "Ě"], [0, "ě"], [0, "Ĝ"], [0, "ĝ"], [0, "Ğ"], [0, "ğ"], [0, "Ġ"], [0, "ġ"], [0, "Ģ"], [1, "Ĥ"], [0, "ĥ"], [0, "Ħ"], [0, "ħ"], [0, "Ĩ"], [0, "ĩ"], [0, "Ī"], [0, "ī"], [2, "Į"], [0, "į"], [0, "İ"], [0, "ı"], [0, "IJ"], [0, "ij"], [0, "Ĵ"], [0, "ĵ"], [0, "Ķ"], [0, "ķ"], [0, "ĸ"], [0, "Ĺ"], [0, "ĺ"], [0, "Ļ"], [0, "ļ"], [0, "Ľ"], [0, "ľ"], [0, "Ŀ"], [0, "ŀ"], [0, "Ł"], [0, "ł"], [0, "Ń"], [0, "ń"], [0, "Ņ"], [0, "ņ"], [0, "Ň"], [0, "ň"], [0, "ʼn"], [0, "Ŋ"], [0, "ŋ"], [0, "Ō"], [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, "ž"], [19, "ƒ"], [34, "Ƶ"], [63, "ǵ"], [65, "ȷ"], [142, "ˆ"], [0, "ˇ"], [16, "˘"], [0, "˙"], [0, "˚"], [0, "˛"], [0, "˜"], [0, "˝"], [51, "̑"], [127, "Α"], [0, "Β"], [0, "Γ"], [0, "Δ"], [0, "Ε"], [0, "Ζ"], [0, "Η"], [0, "Θ"], [0, "Ι"], [0, "Κ"], [0, "Λ"], [0, "Μ"], [0, "Ν"], [0, "Ξ"], [0, "Ο"], [0, "Π"], [0, "Ρ"], [1, "Σ"], [0, "Τ"], [0, "Υ"], [0, "Φ"], [0, "Χ"], [0, "Ψ"], [0, "Ω"], [7, "α"], [0, "β"], [0, "γ"], [0, "δ"], [0, "ε"], [0, "ζ"], [0, "η"], [0, "θ"], [0, "ι"], [0, "κ"], [0, "λ"], [0, "μ"], [0, "ν"], [0, "ξ"], [0, "ο"], [0, "π"], [0, "ρ"], [0, "ς"], [0, "σ"], [0, "τ"], [0, "υ"], [0, "φ"], [0, "χ"], [0, "ψ"], [0, "ω"], [7, "ϑ"], [0, "ϒ"], [2, "ϕ"], [0, "ϖ"], [5, "Ϝ"], [0, "ϝ"], [18, "ϰ"], [0, "ϱ"], [3, "ϵ"], [0, "϶"], [10, "Ё"], [0, "Ђ"], [0, "Ѓ"], [0, "Є"], [0, "Ѕ"], [0, "І"], [0, "Ї"], [0, "Ј"], [0, "Љ"], [0, "Њ"], [0, "Ћ"], [0, "Ќ"], [1, "Ў"], [0, "Џ"], [0, "А"], [0, "Б"], [0, "В"], [0, "Г"], [0, "Д"], [0, "Е"], [0, "Ж"], [0, "З"], [0, "И"], [0, "Й"], [0, "К"], [0, "Л"], [0, "М"], [0, "Н"], [0, "О"], [0, "П"], [0, "Р"], [0, "С"], [0, "Т"], [0, "У"], [0, "Ф"], [0, "Х"], [0, "Ц"], [0, "Ч"], [0, "Ш"], [0, "Щ"], [0, "Ъ"], [0, "Ы"], [0, "Ь"], [0, "Э"], [0, "Ю"], [0, "Я"], [0, "а"], [0, "б"], [0, "в"], [0, "г"], [0, "д"], [0, "е"], [0, "ж"], [0, "з"], [0, "и"], [0, "й"], [0, "к"], [0, "л"], [0, "м"], [0, "н"], [0, "о"], [0, "п"], [0, "р"], [0, "с"], [0, "т"], [0, "у"], [0, "ф"], [0, "х"], [0, "ц"], [0, "ч"], [0, "ш"], [0, "щ"], [0, "ъ"], [0, "ы"], [0, "ь"], [0, "э"], [0, "ю"], [0, "я"], [1, "ё"], [0, "ђ"], [0, "ѓ"], [0, "є"], [0, "ѕ"], [0, "і"], [0, "ї"], [0, "ј"], [0, "љ"], [0, "њ"], [0, "ћ"], [0, "ќ"], [1, "ў"], [0, "џ"], [7074, " "], [0, " "], [0, " "], [0, " "], [1, " "], [0, " "], [0, " "], [0, " "], [0, "​"], [0, "‌"], [0, "‍"], [0, "‎"], [0, "‏"], [0, "‐"], [2, "–"], [0, "—"], [0, "―"], [0, "‖"], [1, "‘"], [0, "’"], [0, "‚"], [1, "“"], [0, "”"], [0, "„"], [1, "†"], [0, "‡"], [0, "•"], [2, "‥"], [0, "…"], [9, "‰"], [0, "‱"], [0, "′"], [0, "″"], [0, "‴"], [0, "‵"], [3, "‹"], [0, "›"], [3, "‾"], [2, "⁁"], [1, "⁃"], [0, "⁄"], [10, "⁏"], [7, "⁗"], [7, { v: " ", n: 8202, o: "  " }], [0, "⁠"], [0, "⁡"], [0, "⁢"], [0, "⁣"], [72, "€"], [46, "⃛"], [0, "⃜"], [37, "ℂ"], [2, "℅"], [4, "ℊ"], [0, "ℋ"], [0, "ℌ"], [0, "ℍ"], [0, "ℎ"], [0, "ℏ"], [0, "ℐ"], [0, "ℑ"], [0, "ℒ"], [0, "ℓ"], [1, "ℕ"], [0, "№"], [0, "℗"], [0, "℘"], [0, "ℙ"], [0, "ℚ"], [0, "ℛ"], [0, "ℜ"], [0, "ℝ"], [0, "℞"], [3, "™"], [1, "ℤ"], [2, "℧"], [0, "ℨ"], [0, "℩"], [2, "ℬ"], [0, "ℭ"], [1, "ℯ"], [0, "ℰ"], [0, "ℱ"], [1, "ℳ"], [0, "ℴ"], [0, "ℵ"], [0, "ℶ"], [0, "ℷ"], [0, "ℸ"], [12, "ⅅ"], [0, "ⅆ"], [0, "ⅇ"], [0, "ⅈ"], [10, "⅓"], [0, "⅔"], [0, "⅕"], [0, "⅖"], [0, "⅗"], [0, "⅘"], [0, "⅙"], [0, "⅚"], [0, "⅛"], [0, "⅜"], [0, "⅝"], [0, "⅞"], [49, "←"], [0, "↑"], [0, "→"], [0, "↓"], [0, "↔"], [0, "↕"], [0, "↖"], [0, "↗"], [0, "↘"], [0, "↙"], [0, "↚"], [0, "↛"], [1, { v: "↝", n: 824, o: "↝̸" }], [0, "↞"], [0, "↟"], [0, "↠"], [0, "↡"], [0, "↢"], [0, "↣"], [0, "↤"], [0, "↥"], [0, "↦"], [0, "↧"], [1, "↩"], [0, "↪"], [0, "↫"], [0, "↬"], [0, "↭"], [0, "↮"], [1, "↰"], [0, "↱"], [0, "↲"], [0, "↳"], [1, "↵"], [0, "↶"], [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, "⇛"], [1, "⇝"], [6, "⇤"], [0, "⇥"], [15, "⇵"], [7, "⇽"], [0, "⇾"], [0, "⇿"], [0, "∀"], [0, "∁"], [0, { v: "∂", n: 824, o: "∂̸" }], [0, "∃"], [0, "∄"], [0, "∅"], [1, "∇"], [0, "∈"], [0, "∉"], [1, "∋"], [0, "∌"], [2, "∏"], [0, "∐"], [0, "∑"], [0, "−"], [0, "∓"], [0, "∔"], [1, "∖"], [0, "∗"], [0, "∘"], [1, "√"], [2, "∝"], [0, "∞"], [0, "∟"], [0, { v: "∠", n: 8402, o: "∠⃒" }], [0, "∡"], [0, "∢"], [0, "∣"], [0, "∤"], [0, "∥"], [0, "∦"], [0, "∧"], [0, "∨"], [0, { v: "∩", n: 65024, o: "∩︀" }], [0, { v: "∪", n: 65024, o: "∪︀" }], [0, "∫"], [0, "∬"], [0, "∭"], [0, "∮"], [0, "∯"], [0, "∰"], [0, "∱"], [0, "∲"], [0, "∳"], [0, "∴"], [0, "∵"], [0, "∶"], [0, "∷"], [0, "∸"], [1, "∺"], [0, "∻"], [0, { v: "∼", n: 8402, o: "∼⃒" }], [0, { v: "∽", n: 817, o: "∽̱" }], [0, { v: "∾", n: 819, o: "∾̳" }], [0, "∿"], [0, "≀"], [0, "≁"], [0, { v: "≂", n: 824, o: "≂̸" }], [0, "≃"], [0, "≄"], [0, "≅"], [0, "≆"], [0, "≇"], [0, "≈"], [0, "≉"], [0, "≊"], [0, { v: "≋", n: 824, o: "≋̸" }], [0, "≌"], [0, { v: "≍", n: 8402, o: "≍⃒" }], [0, { v: "≎", n: 824, o: "≎̸" }], [0, { v: "≏", n: 824, o: "≏̸" }], [0, { v: "≐", n: 824, o: "≐̸" }], [0, "≑"], [0, "≒"], [0, "≓"], [0, "≔"], [0, "≕"], [0, "≖"], [0, "≗"], [1, "≙"], [0, "≚"], [1, "≜"], [2, "≟"], [0, "≠"], [0, { v: "≡", n: 8421, o: "≡⃥" }], [0, "≢"], [1, { v: "≤", n: 8402, o: "≤⃒" }], [0, { v: "≥", n: 8402, o: "≥⃒" }], [0, { v: "≦", n: 824, o: "≦̸" }], [0, { v: "≧", n: 824, o: "≧̸" }], [0, { v: "≨", n: 65024, o: "≨︀" }], [0, { v: "≩", n: 65024, o: "≩︀" }], [0, { v: "≪", n: new Map(/* @__PURE__ */ restoreDiff([[824, "≪̸"], [7577, "≪⃒"]])) }], [0, { v: "≫", n: new Map(/* @__PURE__ */ restoreDiff([[824, "≫̸"], [7577, "≫⃒"]])) }], [0, "≬"], [0, "≭"], [0, "≮"], [0, "≯"], [0, "≰"], [0, "≱"], [0, "≲"], [0, "≳"], [0, "≴"], [0, "≵"], [0, "≶"], [0, "≷"], [0, "≸"], [0, "≹"], [0, "≺"], [0, "≻"], [0, "≼"], [0, "≽"], [0, "≾"], [0, { v: "≿", n: 824, o: "≿̸" }], [0, "⊀"], [0, "⊁"], [0, { v: "⊂", n: 8402, o: "⊂⃒" }], [0, { v: "⊃", n: 8402, o: "⊃⃒" }], [0, "⊄"], [0, "⊅"], [0, "⊆"], [0, "⊇"], [0, "⊈"], [0, "⊉"], [0, { v: "⊊", n: 65024, o: "⊊︀" }], [0, { v: "⊋", n: 65024, o: "⊋︀" }], [1, "⊍"], [0, "⊎"], [0, { v: "⊏", n: 824, o: "⊏̸" }], [0, { v: "⊐", n: 824, o: "⊐̸" }], [0, "⊑"], [0, "⊒"], [0, { v: "⊓", n: 65024, o: "⊓︀" }], [0, { v: "⊔", n: 65024, o: "⊔︀" }], [0, "⊕"], [0, "⊖"], [0, "⊗"], [0, "⊘"], [0, "⊙"], [0, "⊚"], [0, "⊛"], [1, "⊝"], [0, "⊞"], [0, "⊟"], [0, "⊠"], [0, "⊡"], [0, "⊢"], [0, "⊣"], [0, "⊤"], [0, "⊥"], [1, "⊧"], [0, "⊨"], [0, "⊩"], [0, "⊪"], [0, "⊫"], [0, "⊬"], [0, "⊭"], [0, "⊮"], [0, "⊯"], [0, "⊰"], [1, "⊲"], [0, "⊳"], [0, { v: "⊴", n: 8402, o: "⊴⃒" }], [0, { v: "⊵", n: 8402, o: "⊵⃒" }], [0, "⊶"], [0, "⊷"], [0, "⊸"], [0, "⊹"], [0, "⊺"], [0, "⊻"], [1, "⊽"], [0, "⊾"], [0, "⊿"], [0, "⋀"], [0, "⋁"], [0, "⋂"], [0, "⋃"], [0, "⋄"], [0, "⋅"], [0, "⋆"], [0, "⋇"], [0, "⋈"], [0, "⋉"], [0, "⋊"], [0, "⋋"], [0, "⋌"], [0, "⋍"], [0, "⋎"], [0, "⋏"], [0, "⋐"], [0, "⋑"], [0, "⋒"], [0, "⋓"], [0, "⋔"], [0, "⋕"], [0, "⋖"], [0, "⋗"], [0, { v: "⋘", n: 824, o: "⋘̸" }], [0, { v: "⋙", n: 824, o: "⋙̸" }], [0, { v: "⋚", n: 65024, o: "⋚︀" }], [0, { v: "⋛", n: 65024, o: "⋛︀" }], [2, "⋞"], [0, "⋟"], [0, "⋠"], [0, "⋡"], [0, "⋢"], [0, "⋣"], [2, "⋦"], [0, "⋧"], [0, "⋨"], [0, "⋩"], [0, "⋪"], [0, "⋫"], [0, "⋬"], [0, "⋭"], [0, "⋮"], [0, "⋯"], [0, "⋰"], [0, "⋱"], [0, "⋲"], [0, "⋳"], [0, "⋴"], [0, { v: "⋵", n: 824, o: "⋵̸" }], [0, "⋶"], [0, "⋷"], [1, { v: "⋹", n: 824, o: "⋹̸" }], [0, "⋺"], [0, "⋻"], [0, "⋼"], [0, "⋽"], [0, "⋾"], [6, "⌅"], [0, "⌆"], [1, "⌈"], [0, "⌉"], [0, "⌊"], [0, "⌋"], [0, "⌌"], [0, "⌍"], [0, "⌎"], [0, "⌏"], [0, "⌐"], [1, "⌒"], [0, "⌓"], [1, "⌕"], [0, "⌖"], [5, "⌜"], [0, "⌝"], [0, "⌞"], [0, "⌟"], [2, "⌢"], [0, "⌣"], [9, "⌭"], [0, "⌮"], [7, "⌶"], [6, "⌽"], [1, "⌿"], [60, "⍼"], [51, "⎰"], [0, "⎱"], [2, "⎴"], [0, "⎵"], [0, "⎶"], [37, "⏜"], [0, "⏝"], [0, "⏞"], [0, "⏟"], [2, "⏢"], [4, "⏧"], [59, "␣"], [164, "Ⓢ"], [55, "─"], [1, "│"], [9, "┌"], [3, "┐"], [3, "└"], [3, "┘"], [3, "├"], [7, "┤"], [7, "┬"], [7, "┴"], [7, "┼"], [19, "═"], [0, "║"], [0, "╒"], [0, "╓"], [0, "╔"], [0, "╕"], [0, "╖"], [0, "╗"], [0, "╘"], [0, "╙"], [0, "╚"], [0, "╛"], [0, "╜"], [0, "╝"], [0, "╞"], [0, "╟"], [0, "╠"], [0, "╡"], [0, "╢"], [0, "╣"], [0, "╤"], [0, "╥"], [0, "╦"], [0, "╧"], [0, "╨"], [0, "╩"], [0, "╪"], [0, "╫"], [0, "╬"], [19, "▀"], [3, "▄"], [3, "█"], [8, "░"], [0, "▒"], [0, "▓"], [13, "□"], [8, "▪"], [0, "▫"], [1, "▭"], [0, "▮"], [2, "▱"], [1, "△"], [0, "▴"], [0, "▵"], [2, "▸"], [0, "▹"], [3, "▽"], [0, "▾"], [0, "▿"], [2, "◂"], [0, "◃"], [6, "◊"], [0, "○"], [32, "◬"], [2, "◯"], [8, "◸"], [0, "◹"], [0, "◺"], [0, "◻"], [0, "◼"], [8, "★"], [0, "☆"], [7, "☎"], [49, "♀"], [1, "♂"], [29, "♠"], [2, "♣"], [1, "♥"], [0, "♦"], [3, "♪"], [2, "♭"], [0, "♮"], [0, "♯"], [163, "✓"], [3, "✗"], [8, "✠"], [21, "✶"], [33, "❘"], [25, "❲"], [0, "❳"], [84, "⟈"], [0, "⟉"], [28, "⟦"], [0, "⟧"], [0, "⟨"], [0, "⟩"], [0, "⟪"], [0, "⟫"], [0, "⟬"], [0, "⟭"], [7, "⟵"], [0, "⟶"], [0, "⟷"], [0, "⟸"], [0, "⟹"], [0, "⟺"], [1, "⟼"], [2, "⟿"], [258, "⤂"], [0, "⤃"], [0, "⤄"], [0, "⤅"], [6, "⤌"], [0, "⤍"], [0, "⤎"], [0, "⤏"], [0, "⤐"], [0, "⤑"], [0, "⤒"], [0, "⤓"], [2, "⤖"], [2, "⤙"], [0, "⤚"], [0, "⤛"], [0, "⤜"], [0, "⤝"], [0, "⤞"], [0, "⤟"], [0, "⤠"], [2, "⤣"], [0, "⤤"], [0, "⤥"], [0, "⤦"], [0, "⤧"], [0, "⤨"], [0, "⤩"], [0, "⤪"], [8, { v: "⤳", n: 824, o: "⤳̸" }], [1, "⤵"], [0, "⤶"], [0, "⤷"], [0, "⤸"], [0, "⤹"], [2, "⤼"], [0, "⤽"], [7, "⥅"], [2, "⥈"], [0, "⥉"], [0, "⥊"], [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, "⥶"], [1, "⥸"], [0, "⥹"], [1, "⥻"], [0, "⥼"], [0, "⥽"], [0, "⥾"], [0, "⥿"], [5, "⦅"], [0, "⦆"], [4, "⦋"], [0, "⦌"], [0, "⦍"], [0, "⦎"], [0, "⦏"], [0, "⦐"], [0, "⦑"], [0, "⦒"], [0, "⦓"], [0, "⦔"], [0, "⦕"], [0, "⦖"], [3, "⦚"], [1, "⦜"], [0, "⦝"], [6, "⦤"], [0, "⦥"], [0, "⦦"], [0, "⦧"], [0, "⦨"], [0, "⦩"], [0, "⦪"], [0, "⦫"], [0, "⦬"], [0, "⦭"], [0, "⦮"], [0, "⦯"], [0, "⦰"], [0, "⦱"], [0, "⦲"], [0, "⦳"], [0, "⦴"], [0, "⦵"], [0, "⦶"], [0, "⦷"], [1, "⦹"], [1, "⦻"], [0, "⦼"], [1, "⦾"], [0, "⦿"], [0, "⧀"], [0, "⧁"], [0, "⧂"], [0, "⧃"], [0, "⧄"], [0, "⧅"], [3, "⧉"], [3, "⧍"], [0, "⧎"], [0, { v: "⧏", n: 824, o: "⧏̸" }], [0, { v: "⧐", n: 824, o: "⧐̸" }], [11, "⧜"], [0, "⧝"], [0, "⧞"], [4, "⧣"], [0, "⧤"], [0, "⧥"], [5, "⧫"], [8, "⧴"], [1, "⧶"], [9, "⨀"], [0, "⨁"], [0, "⨂"], [1, "⨄"], [1, "⨆"], [5, "⨌"], [0, "⨍"], [2, "⨐"], [0, "⨑"], [0, "⨒"], [0, "⨓"], [0, "⨔"], [0, "⨕"], [0, "⨖"], [0, "⨗"], [10, "⨢"], [0, "⨣"], [0, "⨤"], [0, "⨥"], [0, "⨦"], [0, "⨧"], [1, "⨩"], [0, "⨪"], [2, "⨭"], [0, "⨮"], [0, "⨯"], [0, "⨰"], [0, "⨱"], [1, "⨳"], [0, "⨴"], [0, "⨵"], [0, "⨶"], [0, "⨷"], [0, "⨸"], [0, "⨹"], [0, "⨺"], [0, "⨻"], [0, "⨼"], [2, "⨿"], [0, "⩀"], [1, "⩂"], [0, "⩃"], [0, "⩄"], [0, "⩅"], [0, "⩆"], [0, "⩇"], [0, "⩈"], [0, "⩉"], [0, "⩊"], [0, "⩋"], [0, "⩌"], [0, "⩍"], [2, "⩐"], [2, "⩓"], [0, "⩔"], [0, "⩕"], [0, "⩖"], [0, "⩗"], [0, "⩘"], [1, "⩚"], [0, "⩛"], [0, "⩜"], [0, "⩝"], [1, "⩟"], [6, "⩦"], [3, "⩪"], [2, { v: "⩭", n: 824, o: "⩭̸" }], [0, "⩮"], [0, "⩯"], [0, { v: "⩰", n: 824, o: "⩰̸" }], [0, "⩱"], [0, "⩲"], [0, "⩳"], [0, "⩴"], [0, "⩵"], [1, "⩷"], [0, "⩸"], [0, "⩹"], [0, "⩺"], [0, "⩻"], [0, "⩼"], [0, { v: "⩽", n: 824, o: "⩽̸" }], [0, { v: "⩾", n: 824, o: "⩾̸" }], [0, "⩿"], [0, "⪀"], [0, "⪁"], [0, "⪂"], [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, "⪞"], [0, "⪟"], [0, "⪠"], [0, { v: "⪡", n: 824, o: "⪡̸" }], [0, { v: "⪢", n: 824, o: "⪢̸" }], [1, "⪤"], [0, "⪥"], [0, "⪦"], [0, "⪧"], [0, "⪨"], [0, "⪩"], [0, "⪪"], [0, "⪫"], [0, { v: "⪬", n: 65024, o: "⪬︀" }], [0, { v: "⪭", n: 65024, o: "⪭︀" }], [0, "⪮"], [0, { v: "⪯", n: 824, o: "⪯̸" }], [0, { v: "⪰", n: 824, o: "⪰̸" }], [2, "⪳"], [0, "⪴"], [0, "⪵"], [0, "⪶"], [0, "⪷"], [0, "⪸"], [0, "⪹"], [0, "⪺"], [0, "⪻"], [0, "⪼"], [0, "⪽"], [0, "⪾"], [0, "⪿"], [0, "⫀"], [0, "⫁"], [0, "⫂"], [0, "⫃"], [0, "⫄"], [0, { v: "⫅", n: 824, o: "⫅̸" }], [0, { v: "⫆", n: 824, o: "⫆̸" }], [0, "⫇"], [0, "⫈"], [2, { v: "⫋", n: 65024, o: "⫋︀" }], [0, { v: "⫌", n: 65024, o: "⫌︀" }], [2, "⫏"], [0, "⫐"], [0, "⫑"], [0, "⫒"], [0, "⫓"], [0, "⫔"], [0, "⫕"], [0, "⫖"], [0, "⫗"], [0, "⫘"], [0, "⫙"], [0, "⫚"], [0, "⫛"], [8, "⫤"], [1, "⫦"], [0, "⫧"], [0, "⫨"], [0, "⫩"], [1, "⫫"], [0, "⫬"], [0, "⫭"], [0, "⫮"], [0, "⫯"], [0, "⫰"], [0, "⫱"], [0, "⫲"], [0, "⫳"], [9, { v: "⫽", n: 8421, o: "⫽⃥" }], [44343, { n: new Map(/* @__PURE__ */ restoreDiff([[56476, "𝒜"], [1, "𝒞"], [0, "𝒟"], [2, "𝒢"], [2, "𝒥"], [0, "𝒦"], [2, "𝒩"], [0, "𝒪"], [0, "𝒫"], [0, "𝒬"], [1, "𝒮"], [0, "𝒯"], [0, "𝒰"], [0, "𝒱"], [0, "𝒲"], [0, "𝒳"], [0, "𝒴"], [0, "𝒵"], [0, "𝒶"], [0, "𝒷"], [0, "𝒸"], [0, "𝒹"], [1, "𝒻"], [1, "𝒽"], [0, "𝒾"], [0, "𝒿"], [0, "𝓀"], [0, "𝓁"], [0, "𝓂"], [0, "𝓃"], [1, "𝓅"], [0, "𝓆"], [0, "𝓇"], [0, "𝓈"], [0, "𝓉"], [0, "𝓊"], [0, "𝓋"], [0, "𝓌"], [0, "𝓍"], [0, "𝓎"], [0, "𝓏"], [52, "𝔄"], [0, "𝔅"], [1, "𝔇"], [0, "𝔈"], [0, "𝔉"], [0, "𝔊"], [2, "𝔍"], [0, "𝔎"], [0, "𝔏"], [0, "𝔐"], [0, "𝔑"], [0, "𝔒"], [0, "𝔓"], [0, "𝔔"], [1, "𝔖"], [0, "𝔗"], [0, "𝔘"], [0, "𝔙"], [0, "𝔚"], [0, "𝔛"], [0, "𝔜"], [1, "𝔞"], [0, "𝔟"], [0, "𝔠"], [0, "𝔡"], [0, "𝔢"], [0, "𝔣"], [0, "𝔤"], [0, "𝔥"], [0, "𝔦"], [0, "𝔧"], [0, "𝔨"], [0, "𝔩"], [0, "𝔪"], [0, "𝔫"], [0, "𝔬"], [0, "𝔭"], [0, "𝔮"], [0, "𝔯"], [0, "𝔰"], [0, "𝔱"], [0, "𝔲"], [0, "𝔳"], [0, "𝔴"], [0, "𝔵"], [0, "𝔶"], [0, "𝔷"], [0, "𝔸"], [0, "𝔹"], [1, "𝔻"], [0, "𝔼"], [0, "𝔽"], [0, "𝔾"], [1, "𝕀"], [0, "𝕁"], [0, "𝕂"], [0, "𝕃"], [0, "𝕄"], [1, "𝕆"], [3, "𝕊"], [0, "𝕋"], [0, "𝕌"], [0, "𝕍"], [0, "𝕎"], [0, "𝕏"], [0, "𝕐"], [1, "𝕒"], [0, "𝕓"], [0, "𝕔"], [0, "𝕕"], [0, "𝕖"], [0, "𝕗"], [0, "𝕘"], [0, "𝕙"], [0, "𝕚"], [0, "𝕛"], [0, "𝕜"], [0, "𝕝"], [0, "𝕞"], [0, "𝕟"], [0, "𝕠"], [0, "𝕡"], [0, "𝕢"], [0, "𝕣"], [0, "𝕤"], [0, "𝕥"], [0, "𝕦"], [0, "𝕧"], [0, "𝕨"], [0, "𝕩"], [0, "𝕪"], [0, "𝕫"]])) }], [8906, "ff"], [0, "fi"], [0, "fl"], [0, "ffi"], [0, "ffl"]]));
}
});
// node_modules/entities/lib/esm/escape.js
function encodeXML(str) {
let ret = "";
let lastIdx = 0;
let match;
while ((match = xmlReplacer.exec(str)) !== null) {
const i = match.index;
const char = str.charCodeAt(i);
const next2 = xmlCodeMap.get(char);
if (next2 !== void 0) {
ret += str.substring(lastIdx, i) + next2;
lastIdx = i + 1;
} else {
ret += `${str.substring(lastIdx, i)}&#x${getCodePoint(str, i).toString(16)};`;
lastIdx = xmlReplacer.lastIndex += Number((char & 64512) === 55296);
}
}
return ret + str.substr(lastIdx);
}
function getEscaper(regex, map2) {
return function escape3(data2) {
let match;
let lastIdx = 0;
let result = "";
while (match = regex.exec(data2)) {
if (lastIdx !== match.index) {
result += data2.substring(lastIdx, match.index);
}
result += map2.get(match[0].charCodeAt(0));
lastIdx = match.index + 1;
}
return result + data2.substring(lastIdx);
};
}
var xmlReplacer, xmlCodeMap, getCodePoint, escapeUTF8, escapeAttribute, escapeText;
var init_escape = __esm({
"node_modules/entities/lib/esm/escape.js"() {
xmlReplacer = /["&'<>$\x80-\uFFFF]/g;
xmlCodeMap = /* @__PURE__ */ new Map([
[34, """],
[38, "&"],
[39, "'"],
[60, "<"],
[62, ">"]
]);
getCodePoint = // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
String.prototype.codePointAt != null ? (str, index2) => str.codePointAt(index2) : (
// http://mathiasbynens.be/notes/javascript-encoding#surrogate-formulae
(c, index2) => (c.charCodeAt(index2) & 64512) === 55296 ? (c.charCodeAt(index2) - 55296) * 1024 + c.charCodeAt(index2 + 1) - 56320 + 65536 : c.charCodeAt(index2)
);
escapeUTF8 = getEscaper(/[&<>'"]/g, xmlCodeMap);
escapeAttribute = getEscaper(/["&\u00A0]/g, /* @__PURE__ */ new Map([
[34, """],
[38, "&"],
[160, " "]
]));
escapeText = getEscaper(/[&<>\u00A0]/g, /* @__PURE__ */ new Map([
[38, "&"],
[60, "<"],
[62, ">"],
[160, " "]
]));
}
});
// node_modules/entities/lib/esm/encode.js
var init_encode = __esm({
"node_modules/entities/lib/esm/encode.js"() {
init_encode_html();
init_escape();
}
});
// node_modules/entities/lib/esm/index.js
var EntityLevel, EncodingMode;
var init_esm3 = __esm({
"node_modules/entities/lib/esm/index.js"() {
init_decode();
init_encode();
init_escape();
init_escape();
init_encode();
init_decode();
(function(EntityLevel2) {
EntityLevel2[EntityLevel2["XML"] = 0] = "XML";
EntityLevel2[EntityLevel2["HTML"] = 1] = "HTML";
})(EntityLevel || (EntityLevel = {}));
(function(EncodingMode2) {
EncodingMode2[EncodingMode2["UTF8"] = 0] = "UTF8";
EncodingMode2[EncodingMode2["ASCII"] = 1] = "ASCII";
EncodingMode2[EncodingMode2["Extensive"] = 2] = "Extensive";
EncodingMode2[EncodingMode2["Attribute"] = 3] = "Attribute";
EncodingMode2[EncodingMode2["Text"] = 4] = "Text";
})(EncodingMode || (EncodingMode = {}));
}
});
// node_modules/dom-serializer/lib/esm/foreignNames.js
var elementNames, attributeNames;
var init_foreignNames = __esm({
"node_modules/dom-serializer/lib/esm/foreignNames.js"() {
elementNames = new Map([
"altGlyph",
"altGlyphDef",
"altGlyphItem",
"animateColor",
"animateMotion",
"animateTransform",
"clipPath",
"feBlend",
"feColorMatrix",
"feComponentTransfer",
"feComposite",
"feConvolveMatrix",
"feDiffuseLighting",
"feDisplacementMap",
"feDistantLight",
"feDropShadow",
"feFlood",
"feFuncA",
"feFuncB",
"feFuncG",
"feFuncR",
"feGaussianBlur",
"feImage",
"feMerge",
"feMergeNode",
"feMorphology",
"feOffset",
"fePointLight",
"feSpecularLighting",
"feSpotLight",
"feTile",
"feTurbulence",
"foreignObject",
"glyphRef",
"linearGradient",
"radialGradient",
"textPath"
].map((val2) => [val2.toLowerCase(), val2]));
attributeNames = new Map([
"definitionURL",
"attributeName",
"attributeType",
"baseFrequency",
"baseProfile",
"calcMode",
"clipPathUnits",
"diffuseConstant",
"edgeMode",
"filterUnits",
"glyphRef",
"gradientTransform",
"gradientUnits",
"kernelMatrix",
"kernelUnitLength",
"keyPoints",
"keySplines",
"keyTimes",
"lengthAdjust",
"limitingConeAngle",
"markerHeight",
"markerUnits",
"markerWidth",
"maskContentUnits",
"maskUnits",
"numOctaves",
"pathLength",
"patternContentUnits",
"patternTransform",
"patternUnits",
"pointsAtX",
"pointsAtY",
"pointsAtZ",
"preserveAlpha",
"preserveAspectRatio",
"primitiveUnits",
"refX",
"refY",
"repeatCount",
"repeatDur",
"requiredExtensions",
"requiredFeatures",
"specularConstant",
"specularExponent",
"spreadMethod",
"startOffset",
"stdDeviation",
"stitchTiles",
"surfaceScale",
"systemLanguage",
"tableValues",
"targetX",
"targetY",
"textLength",
"viewBox",
"viewTarget",
"xChannelSelector",
"yChannelSelector",
"zoomAndPan"
].map((val2) => [val2.toLowerCase(), val2]));
}
});
// node_modules/dom-serializer/lib/esm/index.js
function replaceQuotes(value) {
return value.replace(/"/g, """);
}
function formatAttributes(attributes2, opts) {
var _a2;
if (!attributes2)
return;
const encode3 = ((_a2 = opts.encodeEntities) !== null && _a2 !== void 0 ? _a2 : opts.decodeEntities) === false ? replaceQuotes : opts.xmlMode || opts.encodeEntities !== "utf8" ? encodeXML : escapeAttribute;
return Object.keys(attributes2).map((key) => {
var _a3, _b;
const value = (_a3 = attributes2[key]) !== null && _a3 !== void 0 ? _a3 : "";
if (opts.xmlMode === "foreign") {
key = (_b = attributeNames.get(key)) !== null && _b !== void 0 ? _b : key;
}
if (!opts.emptyAttrs && !opts.xmlMode && value === "") {
return key;
}
return `${key}="${encode3(value)}"`;
}).join(" ");
}
function render(node, options = {}) {
const nodes = "length" in node ? node : [node];
let output = "";
for (let i = 0; i < nodes.length; i++) {
output += renderNode(nodes[i], options);
}
return output;
}
function renderNode(node, options) {
switch (node.type) {
case Root:
return render(node.children, options);
// @ts-expect-error We don't use `Doctype` yet
case Doctype:
case Directive:
return renderDirective(node);
case Comment:
return renderComment(node);
case CDATA:
return renderCdata(node);
case Script:
case Style:
case Tag:
return renderTag(node, options);
case Text:
return renderText(node, options);
}
}
function renderTag(elem, opts) {
var _a2;
if (opts.xmlMode === "foreign") {
elem.name = (_a2 = elementNames.get(elem.name)) !== null && _a2 !== void 0 ? _a2 : elem.name;
if (elem.parent && foreignModeIntegrationPoints.has(elem.parent.name)) {
opts = { ...opts, xmlMode: false };
}
}
if (!opts.xmlMode && foreignElements.has(elem.name)) {
opts = { ...opts, xmlMode: "foreign" };
}
let tag = `<${elem.name}`;
const attribs = formatAttributes(elem.attribs, opts);
if (attribs) {
tag += ` ${attribs}`;
}
if (elem.children.length === 0 && (opts.xmlMode ? (
// In XML mode or foreign mode, and user hasn't explicitly turned off self-closing tags
opts.selfClosingTags !== false
) : (
// User explicitly asked for self-closing tags, even in HTML mode
opts.selfClosingTags && singleTag.has(elem.name)
))) {
if (!opts.xmlMode)
tag += " ";
tag += "/>";
} else {
tag += ">";
if (elem.children.length > 0) {
tag += render(elem.children, opts);
}
if (opts.xmlMode || !singleTag.has(elem.name)) {
tag += `</${elem.name}>`;
}
}
return tag;
}
function renderDirective(elem) {
return `<${elem.data}>`;
}
function renderText(elem, opts) {
var _a2;
let data2 = elem.data || "";
if (((_a2 = opts.encodeEntities) !== null && _a2 !== void 0 ? _a2 : opts.decodeEntities) !== false && !(!opts.xmlMode && elem.parent && unencodedElements.has(elem.parent.name))) {
data2 = opts.xmlMode || opts.encodeEntities !== "utf8" ? encodeXML(data2) : escapeText(data2);
}
return data2;
}
function renderCdata(elem) {
return `<![CDATA[${elem.children[0].data}]]>`;
}
function renderComment(elem) {
return `<!--${elem.data}-->`;
}
var unencodedElements, singleTag, esm_default, foreignModeIntegrationPoints, foreignElements;
var init_esm4 = __esm({
"node_modules/dom-serializer/lib/esm/index.js"() {
init_esm();
init_esm3();
init_foreignNames();
unencodedElements = /* @__PURE__ */ new Set([
"style",
"script",
"xmp",
"iframe",
"noembed",
"noframes",
"plaintext",
"noscript"
]);
singleTag = /* @__PURE__ */ new Set([
"area",
"base",
"basefont",
"br",
"col",
"command",
"embed",
"frame",
"hr",
"img",
"input",
"isindex",
"keygen",
"link",
"meta",
"param",
"source",
"track",
"wbr"
]);
esm_default = render;
foreignModeIntegrationPoints = /* @__PURE__ */ new Set([
"mi",
"mo",
"mn",
"ms",
"mtext",
"annotation-xml",
"foreignObject",
"desc",
"title"
]);
foreignElements = /* @__PURE__ */ new Set(["svg", "math"]);
}
});
// node_modules/domutils/lib/esm/stringify.js
function getOuterHTML(node, options) {
return esm_default(node, options);
}
function getInnerHTML(node, options) {
return hasChildren(node) ? node.children.map((node2) => getOuterHTML(node2, options)).join("") : "";
}
function getText(node) {
if (Array.isArray(node))
return node.map(getText).join("");
if (isTag2(node))
return node.name === "br" ? "\n" : getText(node.children);
if (isCDATA(node))
return getText(node.children);
if (isText(node))
return node.data;
return "";
}
function textContent(node) {
if (Array.isArray(node))
return node.map(textContent).join("");
if (hasChildren(node) && !isComment(node)) {
return textContent(node.children);
}
if (isText(node))
return node.data;
return "";
}
function innerText(node) {
if (Array.isArray(node))
return node.map(innerText).join("");
if (hasChildren(node) && (node.type === ElementType.Tag || isCDATA(node))) {
return innerText(node.children);
}
if (isText(node))
return node.data;
return "";
}
var init_stringify = __esm({
"node_modules/domutils/lib/esm/stringify.js"() {
init_esm2();
init_esm4();
init_esm();
}
});
// node_modules/domutils/lib/esm/traversal.js
function getChildren(elem) {
return hasChildren(elem) ? elem.children : [];
}
function getParent(elem) {
return elem.parent || null;
}
function getSiblings(elem) {
const parent2 = getParent(elem);
if (parent2 != null)
return getChildren(parent2);
const siblings2 = [elem];
let { prev: prev2, next: next2 } = elem;
while (prev2 != null) {
siblings2.unshift(prev2);
({ prev: prev2 } = prev2);
}
while (next2 != null) {
siblings2.push(next2);
({ next: next2 } = next2);
}
return siblings2;
}
function getAttributeValue(elem, name) {
var _a2;
return (_a2 = elem.attribs) === null || _a2 === void 0 ? void 0 : _a2[name];
}
function hasAttrib(elem, name) {
return elem.attribs != null && Object.prototype.hasOwnProperty.call(elem.attribs, name) && elem.attribs[name] != null;
}
function getName(elem) {
return elem.name;
}
function nextElementSibling(elem) {
let { next: next2 } = elem;
while (next2 !== null && !isTag2(next2))
({ next: next2 } = next2);
return next2;
}
function prevElementSibling(elem) {
let { prev: prev2 } = elem;
while (prev2 !== null && !isTag2(prev2))
({ prev: prev2 } = prev2);
return prev2;
}
var init_traversal = __esm({
"node_modules/domutils/lib/esm/traversal.js"() {
init_esm2();
}
});
// node_modules/domutils/lib/esm/manipulation.js
function removeElement(elem) {
if (elem.prev)
elem.prev.next = elem.next;
if (elem.next)
elem.next.prev = elem.prev;
if (elem.parent) {
const childs = elem.parent.children;
const childsIndex = childs.lastIndexOf(elem);
if (childsIndex >= 0) {
childs.splice(childsIndex, 1);
}
}
elem.next = null;
elem.prev = null;
elem.parent = null;
}
function replaceElement(elem, replacement) {
const prev2 = replacement.prev = elem.prev;
if (prev2) {
prev2.next = replacement;
}
const next2 = replacement.next = elem.next;
if (next2) {
next2.prev = replacement;
}
const parent2 = replacement.parent = elem.parent;
if (parent2) {
const childs = parent2.children;
childs[childs.lastIndexOf(elem)] = replacement;
elem.parent = null;
}
}
function appendChild(parent2, child) {
removeElement(child);
child.next = null;
child.parent = parent2;
if (parent2.children.push(child) > 1) {
const sibling = parent2.children[parent2.children.length - 2];
sibling.next = child;
child.prev = sibling;
} else {
child.prev = null;
}
}
function append2(elem, next2) {
removeElement(next2);
const { parent: parent2 } = elem;
const currNext = elem.next;
next2.next = currNext;
next2.prev = elem;
elem.next = next2;
next2.parent = parent2;
if (currNext) {
currNext.prev = next2;
if (parent2) {
const childs = parent2.children;
childs.splice(childs.lastIndexOf(currNext), 0, next2);
}
} else if (parent2) {
parent2.children.push(next2);
}
}
function prependChild(parent2, child) {
removeElement(child);
child.parent = parent2;
child.prev = null;
if (parent2.children.unshift(child) !== 1) {
const sibling = parent2.children[1];
sibling.prev = child;
child.next = sibling;
} else {
child.next = null;
}
}
function prepend(elem, prev2) {
removeElement(prev2);
const { parent: parent2 } = elem;
if (parent2) {
const childs = parent2.children;
childs.splice(childs.indexOf(elem), 0, prev2);
}
if (elem.prev) {
elem.prev.next = prev2;
}
prev2.parent = parent2;
prev2.prev = elem.prev;
prev2.next = elem;
elem.prev = prev2;
}
var init_manipulation = __esm({
"node_modules/domutils/lib/esm/manipulation.js"() {
}
});
// node_modules/domutils/lib/esm/querying.js
function filter2(test2, node, recurse = true, limit = Infinity) {
return find(test2, Array.isArray(node) ? node : [node], recurse, limit);
}
function find(test2, nodes, recurse, limit) {
const result = [];
const nodeStack = [Array.isArray(nodes) ? nodes : [nodes]];
const indexStack = [0];
for (; ; ) {
if (indexStack[0] >= nodeStack[0].length) {
if (indexStack.length === 1) {
return result;
}
nodeStack.shift();
indexStack.shift();
continue;
}
const elem = nodeStack[0][indexStack[0]++];
if (test2(elem)) {
result.push(elem);
if (--limit <= 0)
return result;
}
if (recurse && hasChildren(elem) && elem.children.length > 0) {
indexStack.unshift(0);
nodeStack.unshift(elem.children);
}
}
}
function findOneChild(test2, nodes) {
return nodes.find(test2);
}
function findOne(test2, nodes, recurse = true) {
const searchedNodes = Array.isArray(nodes) ? nodes : [nodes];
for (let i = 0; i < searchedNodes.length; i++) {
const node = searchedNodes[i];
if (isTag2(node) && test2(node)) {
return node;
}
if (recurse && hasChildren(node) && node.children.length > 0) {
const found = findOne(test2, node.children, true);
if (found)
return found;
}
}
return null;
}
function existsOne(test2, nodes) {
return (Array.isArray(nodes) ? nodes : [nodes]).some((node) => isTag2(node) && test2(node) || hasChildren(node) && existsOne(test2, node.children));
}
function findAll(test2, nodes) {
const result = [];
const nodeStack = [Array.isArray(nodes) ? nodes : [nodes]];
const indexStack = [0];
for (; ; ) {
if (indexStack[0] >= nodeStack[0].length) {
if (nodeStack.length === 1) {
return result;
}
nodeStack.shift();
indexStack.shift();
continue;
}
const elem = nodeStack[0][indexStack[0]++];
if (isTag2(elem) && test2(elem))
result.push(elem);
if (hasChildren(elem) && elem.children.length > 0) {
indexStack.unshift(0);
nodeStack.unshift(elem.children);
}
}
}
var init_querying = __esm({
"node_modules/domutils/lib/esm/querying.js"() {
init_esm2();
}
});
// node_modules/domutils/lib/esm/legacy.js
function getAttribCheck(attrib, value) {
if (typeof value === "function") {
return (elem) => isTag2(elem) && value(elem.attribs[attrib]);
}
return (elem) => isTag2(elem) && elem.attribs[attrib] === value;
}
function combineFuncs(a, b) {
return (elem) => a(elem) || b(elem);
}
function compileTest(options) {
const funcs = Object.keys(options).map((key) => {
const value = options[key];
return Object.prototype.hasOwnProperty.call(Checks, key) ? Checks[key](value) : getAttribCheck(key, value);
});
return funcs.length === 0 ? null : funcs.reduce(combineFuncs);
}
function testElement(options, node) {
const test2 = compileTest(options);
return test2 ? test2(node) : true;
}
function getElements(options, nodes, recurse, limit = Infinity) {
const test2 = compileTest(options);
return test2 ? filter2(test2, nodes, recurse, limit) : [];
}
function getElementById(id, nodes, recurse = true) {
if (!Array.isArray(nodes))
nodes = [nodes];
return findOne(getAttribCheck("id", id), nodes, recurse);
}
function getElementsByTagName(tagName, nodes, recurse = true, limit = Infinity) {
return filter2(Checks["tag_name"](tagName), nodes, recurse, limit);
}
function getElementsByClassName(className, nodes, recurse = true, limit = Infinity) {
return filter2(getAttribCheck("class", className), nodes, recurse, limit);
}
function getElementsByTagType(type, nodes, recurse = true, limit = Infinity) {
return filter2(Checks["tag_type"](type), nodes, recurse, limit);
}
var Checks;
var init_legacy = __esm({
"node_modules/domutils/lib/esm/legacy.js"() {
init_esm2();
init_querying();
Checks = {
tag_name(name) {
if (typeof name === "function") {
return (elem) => isTag2(elem) && name(elem.name);
} else if (name === "*") {
return isTag2;
}
return (elem) => isTag2(elem) && elem.name === name;
},
tag_type(type) {
if (typeof type === "function") {
return (elem) => type(elem.type);
}
return (elem) => elem.type === type;
},
tag_contains(data2) {
if (typeof data2 === "function") {
return (elem) => isText(elem) && data2(elem.data);
}
return (elem) => isText(elem) && elem.data === data2;
}
};
}
});
// node_modules/domutils/lib/esm/helpers.js
function removeSubsets(nodes) {
let idx = nodes.length;
while (--idx >= 0) {
const node = nodes[idx];
if (idx > 0 && nodes.lastIndexOf(node, idx - 1) >= 0) {
nodes.splice(idx, 1);
continue;
}
for (let ancestor = node.parent; ancestor; ancestor = ancestor.parent) {
if (nodes.includes(ancestor)) {
nodes.splice(idx, 1);
break;
}
}
}
return nodes;
}
function compareDocumentPosition(nodeA, nodeB) {
const aParents = [];
const bParents = [];
if (nodeA === nodeB) {
return 0;
}
let current = hasChildren(nodeA) ? nodeA : nodeA.parent;
while (current) {
aParents.unshift(current);
current = current.parent;
}
current = hasChildren(nodeB) ? nodeB : nodeB.parent;
while (current) {
bParents.unshift(current);
current = current.parent;
}
const maxIdx = Math.min(aParents.length, bParents.length);
let idx = 0;
while (idx < maxIdx && aParents[idx] === bParents[idx]) {
idx++;
}
if (idx === 0) {
return DocumentPosition.DISCONNECTED;
}
const sharedParent = aParents[idx - 1];
const siblings2 = sharedParent.children;
const aSibling = aParents[idx];
const bSibling = bParents[idx];
if (siblings2.indexOf(aSibling) > siblings2.indexOf(bSibling)) {
if (sharedParent === nodeB) {
return DocumentPosition.FOLLOWING | DocumentPosition.CONTAINED_BY;
}
return DocumentPosition.FOLLOWING;
}
if (sharedParent === nodeA) {
return DocumentPosition.PRECEDING | DocumentPosition.CONTAINS;
}
return DocumentPosition.PRECEDING;
}
function uniqueSort(nodes) {
nodes = nodes.filter((node, i, arr) => !arr.includes(node, i + 1));
nodes.sort((a, b) => {
const relative = compareDocumentPosition(a, b);
if (relative & DocumentPosition.PRECEDING) {
return -1;
} else if (relative & DocumentPosition.FOLLOWING) {
return 1;
}
return 0;
});
return nodes;
}
var DocumentPosition;
var init_helpers = __esm({
"node_modules/domutils/lib/esm/helpers.js"() {
init_esm2();
(function(DocumentPosition2) {
DocumentPosition2[DocumentPosition2["DISCONNECTED"] = 1] = "DISCONNECTED";
DocumentPosition2[DocumentPosition2["PRECEDING"] = 2] = "PRECEDING";
DocumentPosition2[DocumentPosition2["FOLLOWING"] = 4] = "FOLLOWING";
DocumentPosition2[DocumentPosition2["CONTAINS"] = 8] = "CONTAINS";
DocumentPosition2[DocumentPosition2["CONTAINED_BY"] = 16] = "CONTAINED_BY";
})(DocumentPosition || (DocumentPosition = {}));
}
});
// node_modules/domutils/lib/esm/feeds.js
function getFeed(doc) {
const feedRoot = getOneElement(isValidFeed, doc);
return !feedRoot ? null : feedRoot.name === "feed" ? getAtomFeed(feedRoot) : getRssFeed(feedRoot);
}
function getAtomFeed(feedRoot) {
var _a2;
const childs = feedRoot.children;
const feed = {
type: "atom",
items: getElementsByTagName("entry", childs).map((item) => {
var _a3;
const { children: children2 } = item;
const entry2 = { media: getMediaElements(children2) };
addConditionally(entry2, "id", "id", children2);
addConditionally(entry2, "title", "title", children2);
const href2 = (_a3 = getOneElement("link", children2)) === null || _a3 === void 0 ? void 0 : _a3.attribs["href"];
if (href2) {
entry2.link = href2;
}
const description = fetch2("summary", children2) || fetch2("content", children2);
if (description) {
entry2.description = description;
}
const pubDate = fetch2("updated", children2);
if (pubDate) {
entry2.pubDate = new Date(pubDate);
}
return entry2;
})
};
addConditionally(feed, "id", "id", childs);
addConditionally(feed, "title", "title", childs);
const href = (_a2 = getOneElement("link", childs)) === null || _a2 === void 0 ? void 0 : _a2.attribs["href"];
if (href) {
feed.link = href;
}
addConditionally(feed, "description", "subtitle", childs);
const updated = fetch2("updated", childs);
if (updated) {
feed.updated = new Date(updated);
}
addConditionally(feed, "author", "email", childs, true);
return feed;
}
function getRssFeed(feedRoot) {
var _a2, _b;
const childs = (_b = (_a2 = getOneElement("channel", feedRoot.children)) === null || _a2 === void 0 ? void 0 : _a2.children) !== null && _b !== void 0 ? _b : [];
const feed = {
type: feedRoot.name.substr(0, 3),
id: "",
items: getElementsByTagName("item", feedRoot.children).map((item) => {
const { children: children2 } = item;
const entry2 = { media: getMediaElements(children2) };
addConditionally(entry2, "id", "guid", children2);
addConditionally(entry2, "title", "title", children2);
addConditionally(entry2, "link", "link", children2);
addConditionally(entry2, "description", "description", children2);
const pubDate = fetch2("pubDate", children2) || fetch2("dc:date", children2);
if (pubDate)
entry2.pubDate = new Date(pubDate);
return entry2;
})
};
addConditionally(feed, "title", "title", childs);
addConditionally(feed, "link", "link", childs);
addConditionally(feed, "description", "description", childs);
const updated = fetch2("lastBuildDate", childs);
if (updated) {
feed.updated = new Date(updated);
}
addConditionally(feed, "author", "managingEditor", childs, true);
return feed;
}
function getMediaElements(where) {
return getElementsByTagName("media:content", where).map((elem) => {
const { attribs } = elem;
const media = {
medium: attribs["medium"],
isDefault: !!attribs["isDefault"]
};
for (const attrib of MEDIA_KEYS_STRING) {
if (attribs[attrib]) {
media[attrib] = attribs[attrib];
}
}
for (const attrib of MEDIA_KEYS_INT) {
if (attribs[attrib]) {
media[attrib] = parseInt(attribs[attrib], 10);
}
}
if (attribs["expression"]) {
media.expression = attribs["expression"];
}
return media;
});
}
function getOneElement(tagName, node) {
return getElementsByTagName(tagName, node, true, 1)[0];
}
function fetch2(tagName, where, recurse = false) {
return textContent(getElementsByTagName(tagName, where, recurse, 1)).trim();
}
function addConditionally(obj, prop2, tagName, where, recurse = false) {
const val2 = fetch2(tagName, where, recurse);
if (val2)
obj[prop2] = val2;
}
function isValidFeed(value) {
return value === "rss" || value === "feed" || value === "rdf:RDF";
}
var MEDIA_KEYS_STRING, MEDIA_KEYS_INT;
var init_feeds = __esm({
"node_modules/domutils/lib/esm/feeds.js"() {
init_stringify();
init_legacy();
MEDIA_KEYS_STRING = ["url", "type", "lang"];
MEDIA_KEYS_INT = [
"fileSize",
"bitrate",
"framerate",
"samplingrate",
"channels",
"duration",
"height",
"width"
];
}
});
// node_modules/domutils/lib/esm/index.js
var esm_exports2 = {};
__export(esm_exports2, {
DocumentPosition: () => DocumentPosition,
append: () => append2,
appendChild: () => appendChild,
compareDocumentPosition: () => compareDocumentPosition,
existsOne: () => existsOne,
filter: () => filter2,
find: () => find,
findAll: () => findAll,
findOne: () => findOne,
findOneChild: () => findOneChild,
getAttributeValue: () => getAttributeValue,
getChildren: () => getChildren,
getElementById: () => getElementById,
getElements: () => getElements,
getElementsByClassName: () => getElementsByClassName,
getElementsByTagName: () => getElementsByTagName,
getElementsByTagType: () => getElementsByTagType,
getFeed: () => getFeed,
getInnerHTML: () => getInnerHTML,
getName: () => getName,
getOuterHTML: () => getOuterHTML,
getParent: () => getParent,
getSiblings: () => getSiblings,
getText: () => getText,
hasAttrib: () => hasAttrib,
hasChildren: () => hasChildren,
innerText: () => innerText,
isCDATA: () => isCDATA,
isComment: () => isComment,
isDocument: () => isDocument,
isTag: () => isTag2,
isText: () => isText,
nextElementSibling: () => nextElementSibling,
prepend: () => prepend,
prependChild: () => prependChild,
prevElementSibling: () => prevElementSibling,
removeElement: () => removeElement,
removeSubsets: () => removeSubsets,
replaceElement: () => replaceElement,
testElement: () => testElement,
textContent: () => textContent,
uniqueSort: () => uniqueSort
});
var init_esm5 = __esm({
"node_modules/domutils/lib/esm/index.js"() {
init_stringify();
init_traversal();
init_manipulation();
init_querying();
init_legacy();
init_helpers();
init_feeds();
init_esm2();
}
});
// node_modules/cheerio/dist/esm/static.js
var static_exports = {};
__export(static_exports, {
contains: () => contains,
extract: () => extract,
html: () => html,
merge: () => merge2,
parseHTML: () => parseHTML,
root: () => root,
text: () => text,
xml: () => xml
});
function render2(that, dom, options) {
if (!that)
return "";
return that(dom !== null && dom !== void 0 ? dom : that._root.children, null, void 0, options).toString();
}
function isOptions(dom, options) {
return !options && typeof dom === "object" && dom != null && !("length" in dom) && !("type" in dom);
}
function html(dom, options) {
const toRender = isOptions(dom) ? (options = dom, void 0) : dom;
const opts = {
...this === null || this === void 0 ? void 0 : this._options,
...flattenOptions(options)
};
return render2(this, toRender, opts);
}
function xml(dom) {
const options = { ...this._options, xmlMode: true };
return render2(this, dom, options);
}
function text(elements) {
const elems = elements !== null && elements !== void 0 ? elements : this ? this.root() : [];
let ret = "";
for (let i = 0; i < elems.length; i++) {
ret += textContent(elems[i]);
}
return ret;
}
function parseHTML(data2, context, keepScripts = typeof context === "boolean" ? context : false) {
if (!data2 || typeof data2 !== "string") {
return null;
}
if (typeof context === "boolean") {
keepScripts = context;
}
const parsed = this.load(data2, this._options, false);
if (!keepScripts) {
parsed("script").remove();
}
return [...parsed.root()[0].children];
}
function root() {
return this(this._root);
}
function contains(container, contained) {
if (contained === container) {
return false;
}
let next2 = contained;
while (next2 && next2 !== next2.parent) {
next2 = next2.parent;
if (next2 === container) {
return true;
}
}
return false;
}
function extract(map2) {
return this.root().extract(map2);
}
function merge2(arr1, arr2) {
if (!isArrayLike(arr1) || !isArrayLike(arr2)) {
return;
}
let newLength = arr1.length;
const len = +arr2.length;
for (let i = 0; i < len; i++) {
arr1[newLength++] = arr2[i];
}
arr1.length = newLength;
return arr1;
}
function isArrayLike(item) {
if (Array.isArray(item)) {
return true;
}
if (typeof item !== "object" || item === null || !("length" in item) || typeof item.length !== "number" || item.length < 0) {
return false;
}
for (let i = 0; i < item.length; i++) {
if (!(i in item)) {
return false;
}
}
return true;
}
var init_static = __esm({
"node_modules/cheerio/dist/esm/static.js"() {
init_esm5();
init_options();
}
});
// node_modules/cheerio/dist/esm/utils.js
function isCheerio(maybeCheerio) {
return maybeCheerio.cheerio != null;
}
function camelCase(str) {
return str.replace(/[._-](\w|$)/g, (_, x) => x.toUpperCase());
}
function cssCase(str) {
return str.replace(/[A-Z]/g, "-$&").toLowerCase();
}
function domEach(array, fn) {
const len = array.length;
for (let i = 0; i < len; i++)
fn(array[i], i);
return array;
}
function isHtml(str) {
const tagStart = str.indexOf("<");
if (tagStart < 0 || tagStart > str.length - 3)
return false;
const tagChar = str.charCodeAt(tagStart + 1);
return (tagChar >= CharacterCodes.LowerA && tagChar <= CharacterCodes.LowerZ || tagChar >= CharacterCodes.UpperA && tagChar <= CharacterCodes.UpperZ || tagChar === CharacterCodes.Exclamation) && str.includes(">", tagStart + 2);
}
var CharacterCodes;
var init_utils3 = __esm({
"node_modules/cheerio/dist/esm/utils.js"() {
(function(CharacterCodes2) {
CharacterCodes2[CharacterCodes2["LowerA"] = 97] = "LowerA";
CharacterCodes2[CharacterCodes2["LowerZ"] = 122] = "LowerZ";
CharacterCodes2[CharacterCodes2["UpperA"] = 65] = "UpperA";
CharacterCodes2[CharacterCodes2["UpperZ"] = 90] = "UpperZ";
CharacterCodes2[CharacterCodes2["Exclamation"] = 33] = "Exclamation";
})(CharacterCodes || (CharacterCodes = {}));
}
});
// node_modules/cheerio/dist/esm/api/attributes.js
var attributes_exports = {};
__export(attributes_exports, {
addClass: () => addClass,
attr: () => attr,
data: () => data,
hasClass: () => hasClass,
prop: () => prop,
removeAttr: () => removeAttr,
removeClass: () => removeClass,
toggleClass: () => toggleClass,
val: () => val
});
function getAttr(elem, name, xmlMode) {
var _a2;
if (!elem || !isTag2(elem))
return void 0;
(_a2 = elem.attribs) !== null && _a2 !== void 0 ? _a2 : elem.attribs = {};
if (!name) {
return elem.attribs;
}
if (hasOwn.call(elem.attribs, name)) {
return !xmlMode && rboolean.test(name) ? name : elem.attribs[name];
}
if (elem.name === "option" && name === "value") {
return text(elem.children);
}
if (elem.name === "input" && (elem.attribs["type"] === "radio" || elem.attribs["type"] === "checkbox") && name === "value") {
return "on";
}
return void 0;
}
function setAttr(el, name, value) {
if (value === null) {
removeAttribute(el, name);
} else {
el.attribs[name] = `${value}`;
}
}
function attr(name, value) {
if (typeof name === "object" || value !== void 0) {
if (typeof value === "function") {
if (typeof name !== "string") {
{
throw new Error("Bad combination of arguments.");
}
}
return domEach(this, (el, i) => {
if (isTag2(el))
setAttr(el, name, value.call(el, i, el.attribs[name]));
});
}
return domEach(this, (el) => {
if (!isTag2(el))
return;
if (typeof name === "object") {
for (const objName of Object.keys(name)) {
const objValue = name[objName];
setAttr(el, objName, objValue);
}
} else {
setAttr(el, name, value);
}
});
}
return arguments.length > 1 ? this : getAttr(this[0], name, this.options.xmlMode);
}
function getProp(el, name, xmlMode) {
return name in el ? (
// @ts-expect-error TS doesn't like us accessing the value directly here.
el[name]
) : !xmlMode && rboolean.test(name) ? getAttr(el, name, false) !== void 0 : getAttr(el, name, xmlMode);
}
function setProp(el, name, value, xmlMode) {
if (name in el) {
el[name] = value;
} else {
setAttr(el, name, !xmlMode && rboolean.test(name) ? value ? "" : null : `${value}`);
}
}
function prop(name, value) {
var _a2;
if (typeof name === "string" && value === void 0) {
const el = this[0];
if (!el || !isTag2(el))
return void 0;
switch (name) {
case "style": {
const property = this.css();
const keys = Object.keys(property);
for (let i = 0; i < keys.length; i++) {
property[i] = keys[i];
}
property.length = keys.length;
return property;
}
case "tagName":
case "nodeName": {
return el.name.toUpperCase();
}
case "href":
case "src": {
const prop2 = (_a2 = el.attribs) === null || _a2 === void 0 ? void 0 : _a2[name];
if (typeof URL !== "undefined" && (name === "href" && (el.tagName === "a" || el.tagName === "link") || name === "src" && (el.tagName === "img" || el.tagName === "iframe" || el.tagName === "audio" || el.tagName === "video" || el.tagName === "source")) && prop2 !== void 0 && this.options.baseURI) {
return new URL(prop2, this.options.baseURI).href;
}
return prop2;
}
case "innerText": {
return innerText(el);
}
case "textContent": {
return textContent(el);
}
case "outerHTML": {
return this.clone().wrap("<container />").parent().html();
}
case "innerHTML": {
return this.html();
}
default: {
return getProp(el, name, this.options.xmlMode);
}
}
}
if (typeof name === "object" || value !== void 0) {
if (typeof value === "function") {
if (typeof name === "object") {
throw new TypeError("Bad combination of arguments.");
}
return domEach(this, (el, i) => {
if (isTag2(el)) {
setProp(el, name, value.call(el, i, getProp(el, name, this.options.xmlMode)), this.options.xmlMode);
}
});
}
return domEach(this, (el) => {
if (!isTag2(el))
return;
if (typeof name === "object") {
for (const key of Object.keys(name)) {
const val2 = name[key];
setProp(el, key, val2, this.options.xmlMode);
}
} else {
setProp(el, name, value, this.options.xmlMode);
}
});
}
return void 0;
}
function setData(elem, name, value) {
var _a2;
(_a2 = elem.data) !== null && _a2 !== void 0 ? _a2 : elem.data = {};
if (typeof name === "object")
Object.assign(elem.data, name);
else if (typeof name === "string" && value !== void 0) {
elem.data[name] = value;
}
}
function readAllData(el) {
for (const domName of Object.keys(el.attribs)) {
if (!domName.startsWith(dataAttrPrefix)) {
continue;
}
const jsName = camelCase(domName.slice(dataAttrPrefix.length));
if (!hasOwn.call(el.data, jsName)) {
el.data[jsName] = parseDataValue(el.attribs[domName]);
}
}
return el.data;
}
function readData(el, name) {
const domName = dataAttrPrefix + cssCase(name);
const data2 = el.data;
if (hasOwn.call(data2, name)) {
return data2[name];
}
if (hasOwn.call(el.attribs, domName)) {
return data2[name] = parseDataValue(el.attribs[domName]);
}
return void 0;
}
function parseDataValue(value) {
if (value === "null")
return null;
if (value === "true")
return true;
if (value === "false")
return false;
const num = Number(value);
if (value === String(num))
return num;
if (rbrace.test(value)) {
try {
return JSON.parse(value);
} catch {
}
}
return value;
}
function data(name, value) {
var _a2;
const elem = this[0];
if (!elem || !isTag2(elem))
return;
const dataEl = elem;
(_a2 = dataEl.data) !== null && _a2 !== void 0 ? _a2 : dataEl.data = {};
if (name == null) {
return readAllData(dataEl);
}
if (typeof name === "object" || value !== void 0) {
domEach(this, (el) => {
if (isTag2(el)) {
if (typeof name === "object")
setData(el, name);
else
setData(el, name, value);
}
});
return this;
}
return readData(dataEl, name);
}
function val(value) {
const querying = arguments.length === 0;
const element = this[0];
if (!element || !isTag2(element))
return querying ? void 0 : this;
switch (element.name) {
case "textarea": {
return this.text(value);
}
case "select": {
const option = this.find("option:selected");
if (!querying) {
if (this.attr("multiple") == null && typeof value === "object") {
return this;
}
this.find("option").removeAttr("selected");
const values = typeof value === "object" ? value : [value];
for (const val2 of values) {
this.find(`option[value="${val2}"]`).attr("selected", "");
}
return this;
}
return this.attr("multiple") ? option.toArray().map((el) => text(el.children)) : option.attr("value");
}
case "input":
case "option": {
return querying ? this.attr("value") : this.attr("value", value);
}
}
return void 0;
}
function removeAttribute(elem, name) {
if (!elem.attribs || !hasOwn.call(elem.attribs, name))
return;
delete elem.attribs[name];
}
function splitNames(names) {
return names ? names.trim().split(rspace) : [];
}
function removeAttr(name) {
const attrNames = splitNames(name);
for (const attrName of attrNames) {
domEach(this, (elem) => {
if (isTag2(elem))
removeAttribute(elem, attrName);
});
}
return this;
}
function hasClass(className) {
return this.toArray().some((elem) => {
const clazz = isTag2(elem) && elem.attribs["class"];
let idx = -1;
if (clazz && className.length > 0) {
while ((idx = clazz.indexOf(className, idx + 1)) > -1) {
const end2 = idx + className.length;
if ((idx === 0 || rspace.test(clazz[idx - 1])) && (end2 === clazz.length || rspace.test(clazz[end2]))) {
return true;
}
}
}
return false;
});
}
function addClass(value) {
if (typeof value === "function") {
return domEach(this, (el, i) => {
if (isTag2(el)) {
const className = el.attribs["class"] || "";
addClass.call([el], value.call(el, i, className));
}
});
}
if (!value || typeof value !== "string")
return this;
const classNames = value.split(rspace);
const numElements = this.length;
for (let i = 0; i < numElements; i++) {
const el = this[i];
if (!isTag2(el))
continue;
const className = getAttr(el, "class", false);
if (className) {
let setClass = ` ${className} `;
for (const cn of classNames) {
const appendClass = `${cn} `;
if (!setClass.includes(` ${appendClass}`))
setClass += appendClass;
}
setAttr(el, "class", setClass.trim());
} else {
setAttr(el, "class", classNames.join(" ").trim());
}
}
return this;
}
function removeClass(name) {
if (typeof name === "function") {
return domEach(this, (el, i) => {
if (isTag2(el)) {
removeClass.call([el], name.call(el, i, el.attribs["class"] || ""));
}
});
}
const classes = splitNames(name);
const numClasses = classes.length;
const removeAll = arguments.length === 0;
return domEach(this, (el) => {
if (!isTag2(el))
return;
if (removeAll) {
el.attribs["class"] = "";
} else {
const elClasses = splitNames(el.attribs["class"]);
let changed = false;
for (let j = 0; j < numClasses; j++) {
const index2 = elClasses.indexOf(classes[j]);
if (index2 >= 0) {
elClasses.splice(index2, 1);
changed = true;
j--;
}
}
if (changed) {
el.attribs["class"] = elClasses.join(" ");
}
}
});
}
function toggleClass(value, stateVal) {
if (typeof value === "function") {
return domEach(this, (el, i) => {
if (isTag2(el)) {
toggleClass.call([el], value.call(el, i, el.attribs["class"] || "", stateVal), stateVal);
}
});
}
if (!value || typeof value !== "string")
return this;
const classNames = value.split(rspace);
const numClasses = classNames.length;
const state = typeof stateVal === "boolean" ? stateVal ? 1 : -1 : 0;
const numElements = this.length;
for (let i = 0; i < numElements; i++) {
const el = this[i];
if (!isTag2(el))
continue;
const elementClasses = splitNames(el.attribs["class"]);
for (let j = 0; j < numClasses; j++) {
const index2 = elementClasses.indexOf(classNames[j]);
if (state >= 0 && index2 < 0) {
elementClasses.push(classNames[j]);
} else if (state <= 0 && index2 >= 0) {
elementClasses.splice(index2, 1);
}
}
el.attribs["class"] = elementClasses.join(" ");
}
return this;
}
var hasOwn, rspace, dataAttrPrefix, rboolean, rbrace;
var init_attributes = __esm({
"node_modules/cheerio/dist/esm/api/attributes.js"() {
init_static();
init_utils3();
init_esm2();
init_esm5();
hasOwn = Object.prototype.hasOwnProperty;
rspace = /\s+/;
dataAttrPrefix = "data-";
rboolean = /^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i;
rbrace = /^{[^]*}$|^\[[^]*]$/;
}
});
// node_modules/css-what/lib/commonjs/types.js
var require_types = __commonJS({
"node_modules/css-what/lib/commonjs/types.js"(exports2) {
"use strict";
Object.defineProperty(exports2, "__esModule", { value: true });
exports2.AttributeAction = exports2.IgnoreCaseMode = exports2.SelectorType = void 0;
var SelectorType5;
(function(SelectorType6) {
SelectorType6["Attribute"] = "attribute";
SelectorType6["Pseudo"] = "pseudo";
SelectorType6["PseudoElement"] = "pseudo-element";
SelectorType6["Tag"] = "tag";
SelectorType6["Universal"] = "universal";
SelectorType6["Adjacent"] = "adjacent";
SelectorType6["Child"] = "child";
SelectorType6["Descendant"] = "descendant";
SelectorType6["Parent"] = "parent";
SelectorType6["Sibling"] = "sibling";
SelectorType6["ColumnCombinator"] = "column-combinator";
})(SelectorType5 = exports2.SelectorType || (exports2.SelectorType = {}));
exports2.IgnoreCaseMode = {
Unknown: null,
QuirksMode: "quirks",
IgnoreCase: true,
CaseSensitive: false
};
var AttributeAction2;
(function(AttributeAction3) {
AttributeAction3["Any"] = "any";
AttributeAction3["Element"] = "element";
AttributeAction3["End"] = "end";
AttributeAction3["Equals"] = "equals";
AttributeAction3["Exists"] = "exists";
AttributeAction3["Hyphen"] = "hyphen";
AttributeAction3["Not"] = "not";
AttributeAction3["Start"] = "start";
})(AttributeAction2 = exports2.AttributeAction || (exports2.AttributeAction = {}));
}
});
// node_modules/css-what/lib/commonjs/parse.js
var require_parse = __commonJS({
"node_modules/css-what/lib/commonjs/parse.js"(exports2) {
"use strict";
Object.defineProperty(exports2, "__esModule", { value: true });
exports2.parse = exports2.isTraversal = void 0;
var types_1 = require_types();
var reName = /^[^\\#]?(?:\\(?:[\da-f]{1,6}\s?|.)|[\w\-\u00b0-\uFFFF])+/;
var reEscape = /\\([\da-f]{1,6}\s?|(\s)|.)/gi;
var actionTypes = /* @__PURE__ */ new Map([
[126, types_1.AttributeAction.Element],
[94, types_1.AttributeAction.Start],
[36, types_1.AttributeAction.End],
[42, types_1.AttributeAction.Any],
[33, types_1.AttributeAction.Not],
[124, types_1.AttributeAction.Hyphen]
]);
var unpackPseudos = /* @__PURE__ */ new Set([
"has",
"not",
"matches",
"is",
"where",
"host",
"host-context"
]);
function isTraversal3(selector) {
switch (selector.type) {
case types_1.SelectorType.Adjacent:
case types_1.SelectorType.Child:
case types_1.SelectorType.Descendant:
case types_1.SelectorType.Parent:
case types_1.SelectorType.Sibling:
case types_1.SelectorType.ColumnCombinator:
return true;
default:
return false;
}
}
exports2.isTraversal = isTraversal3;
var stripQuotesFromPseudos = /* @__PURE__ */ new Set(["contains", "icontains"]);
function funescape(_, escaped, escapedWhitespace) {
var high = parseInt(escaped, 16) - 65536;
return high !== high || escapedWhitespace ? escaped : high < 0 ? (
// BMP codepoint
String.fromCharCode(high + 65536)
) : (
// Supplemental Plane codepoint (surrogate pair)
String.fromCharCode(high >> 10 | 55296, high & 1023 | 56320)
);
}
function unescapeCSS(str) {
return str.replace(reEscape, funescape);
}
function isQuote2(c) {
return c === 39 || c === 34;
}
function isWhitespace3(c) {
return c === 32 || c === 9 || c === 10 || c === 12 || c === 13;
}
function parse8(selector) {
var subselects2 = [];
var endIndex = parseSelector(subselects2, "".concat(selector), 0);
if (endIndex < selector.length) {
throw new Error("Unmatched selector: ".concat(selector.slice(endIndex)));
}
return subselects2;
}
exports2.parse = parse8;
function parseSelector(subselects2, selector, selectorIndex) {
var tokens = [];
function getName2(offset) {
var match = selector.slice(selectorIndex + offset).match(reName);
if (!match) {
throw new Error("Expected name, found ".concat(selector.slice(selectorIndex)));
}
var name = match[0];
selectorIndex += offset + name.length;
return unescapeCSS(name);
}
function stripWhitespace(offset) {
selectorIndex += offset;
while (selectorIndex < selector.length && isWhitespace3(selector.charCodeAt(selectorIndex))) {
selectorIndex++;
}
}
function readValueWithParenthesis() {
selectorIndex += 1;
var start = selectorIndex;
var counter = 1;
for (; counter > 0 && selectorIndex < selector.length; selectorIndex++) {
if (selector.charCodeAt(selectorIndex) === 40 && !isEscaped(selectorIndex)) {
counter++;
} else if (selector.charCodeAt(selectorIndex) === 41 && !isEscaped(selectorIndex)) {
counter--;
}
}
if (counter) {
throw new Error("Parenthesis not matched");
}
return unescapeCSS(selector.slice(start, selectorIndex - 1));
}
function isEscaped(pos) {
var slashCount = 0;
while (selector.charCodeAt(--pos) === 92)
slashCount++;
return (slashCount & 1) === 1;
}
function ensureNotTraversal() {
if (tokens.length > 0 && isTraversal3(tokens[tokens.length - 1])) {
throw new Error("Did not expect successive traversals.");
}
}
function addTraversal(type) {
if (tokens.length > 0 && tokens[tokens.length - 1].type === types_1.SelectorType.Descendant) {
tokens[tokens.length - 1].type = type;
return;
}
ensureNotTraversal();
tokens.push({ type });
}
function addSpecialAttribute(name, action2) {
tokens.push({
type: types_1.SelectorType.Attribute,
name,
action: action2,
value: getName2(1),
namespace: null,
ignoreCase: "quirks"
});
}
function finalizeSubselector() {
if (tokens.length && tokens[tokens.length - 1].type === types_1.SelectorType.Descendant) {
tokens.pop();
}
if (tokens.length === 0) {
throw new Error("Empty sub-selector");
}
subselects2.push(tokens);
}
stripWhitespace(0);
if (selector.length === selectorIndex) {
return selectorIndex;
}
loop: while (selectorIndex < selector.length) {
var firstChar = selector.charCodeAt(selectorIndex);
switch (firstChar) {
// Whitespace
case 32:
case 9:
case 10:
case 12:
case 13: {
if (tokens.length === 0 || tokens[0].type !== types_1.SelectorType.Descendant) {
ensureNotTraversal();
tokens.push({ type: types_1.SelectorType.Descendant });
}
stripWhitespace(1);
break;
}
// Traversals
case 62: {
addTraversal(types_1.SelectorType.Child);
stripWhitespace(1);
break;
}
case 60: {
addTraversal(types_1.SelectorType.Parent);
stripWhitespace(1);
break;
}
case 126: {
addTraversal(types_1.SelectorType.Sibling);
stripWhitespace(1);
break;
}
case 43: {
addTraversal(types_1.SelectorType.Adjacent);
stripWhitespace(1);
break;
}
// Special attribute selectors: .class, #id
case 46: {
addSpecialAttribute("class", types_1.AttributeAction.Element);
break;
}
case 35: {
addSpecialAttribute("id", types_1.AttributeAction.Equals);
break;
}
case 91: {
stripWhitespace(1);
var name_1 = void 0;
var namespace = null;
if (selector.charCodeAt(selectorIndex) === 124) {
name_1 = getName2(1);
} else if (selector.startsWith("*|", selectorIndex)) {
namespace = "*";
name_1 = getName2(2);
} else {
name_1 = getName2(0);
if (selector.charCodeAt(selectorIndex) === 124 && selector.charCodeAt(selectorIndex + 1) !== 61) {
namespace = name_1;
name_1 = getName2(1);
}
}
stripWhitespace(0);
var action = types_1.AttributeAction.Exists;
var possibleAction = actionTypes.get(selector.charCodeAt(selectorIndex));
if (possibleAction) {
action = possibleAction;
if (selector.charCodeAt(selectorIndex + 1) !== 61) {
throw new Error("Expected `=`");
}
stripWhitespace(2);
} else if (selector.charCodeAt(selectorIndex) === 61) {
action = types_1.AttributeAction.Equals;
stripWhitespace(1);
}
var value = "";
var ignoreCase = null;
if (action !== "exists") {
if (isQuote2(selector.charCodeAt(selectorIndex))) {
var quote = selector.charCodeAt(selectorIndex);
var sectionEnd = selectorIndex + 1;
while (sectionEnd < selector.length && (selector.charCodeAt(sectionEnd) !== quote || isEscaped(sectionEnd))) {
sectionEnd += 1;
}
if (selector.charCodeAt(sectionEnd) !== quote) {
throw new Error("Attribute value didn't end");
}
value = unescapeCSS(selector.slice(selectorIndex + 1, sectionEnd));
selectorIndex = sectionEnd + 1;
} else {
var valueStart = selectorIndex;
while (selectorIndex < selector.length && (!isWhitespace3(selector.charCodeAt(selectorIndex)) && selector.charCodeAt(selectorIndex) !== 93 || isEscaped(selectorIndex))) {
selectorIndex += 1;
}
value = unescapeCSS(selector.slice(valueStart, selectorIndex));
}
stripWhitespace(0);
var forceIgnore = selector.charCodeAt(selectorIndex) | 32;
if (forceIgnore === 115) {
ignoreCase = false;
stripWhitespace(1);
} else if (forceIgnore === 105) {
ignoreCase = true;
stripWhitespace(1);
}
}
if (selector.charCodeAt(selectorIndex) !== 93) {
throw new Error("Attribute selector didn't terminate");
}
selectorIndex += 1;
var attributeSelector = {
type: types_1.SelectorType.Attribute,
name: name_1,
action,
value,
namespace,
ignoreCase
};
tokens.push(attributeSelector);
break;
}
case 58: {
if (selector.charCodeAt(selectorIndex + 1) === 58) {
tokens.push({
type: types_1.SelectorType.PseudoElement,
name: getName2(2).toLowerCase(),
data: selector.charCodeAt(selectorIndex) === 40 ? readValueWithParenthesis() : null
});
continue;
}
var name_2 = getName2(1).toLowerCase();
var data2 = null;
if (selector.charCodeAt(selectorIndex) === 40) {
if (unpackPseudos.has(name_2)) {
if (isQuote2(selector.charCodeAt(selectorIndex + 1))) {
throw new Error("Pseudo-selector ".concat(name_2, " cannot be quoted"));
}
data2 = [];
selectorIndex = parseSelector(data2, selector, selectorIndex + 1);
if (selector.charCodeAt(selectorIndex) !== 41) {
throw new Error("Missing closing parenthesis in :".concat(name_2, " (").concat(selector, ")"));
}
selectorIndex += 1;
} else {
data2 = readValueWithParenthesis();
if (stripQuotesFromPseudos.has(name_2)) {
var quot = data2.charCodeAt(0);
if (quot === data2.charCodeAt(data2.length - 1) && isQuote2(quot)) {
data2 = data2.slice(1, -1);
}
}
data2 = unescapeCSS(data2);
}
}
tokens.push({ type: types_1.SelectorType.Pseudo, name: name_2, data: data2 });
break;
}
case 44: {
finalizeSubselector();
tokens = [];
stripWhitespace(1);
break;
}
default: {
if (selector.startsWith("/*", selectorIndex)) {
var endIndex = selector.indexOf("*/", selectorIndex + 2);
if (endIndex < 0) {
throw new Error("Comment was not terminated");
}
selectorIndex = endIndex + 2;
if (tokens.length === 0) {
stripWhitespace(0);
}
break;
}
var namespace = null;
var name_3 = void 0;
if (firstChar === 42) {
selectorIndex += 1;
name_3 = "*";
} else if (firstChar === 124) {
name_3 = "";
if (selector.charCodeAt(selectorIndex + 1) === 124) {
addTraversal(types_1.SelectorType.ColumnCombinator);
stripWhitespace(2);
break;
}
} else if (reName.test(selector.slice(selectorIndex))) {
name_3 = getName2(0);
} else {
break loop;
}
if (selector.charCodeAt(selectorIndex) === 124 && selector.charCodeAt(selectorIndex + 1) !== 124) {
namespace = name_3;
if (selector.charCodeAt(selectorIndex + 1) === 42) {
name_3 = "*";
selectorIndex += 2;
} else {
name_3 = getName2(1);
}
}
tokens.push(name_3 === "*" ? { type: types_1.SelectorType.Universal, namespace } : { type: types_1.SelectorType.Tag, name: name_3, namespace });
}
}
}
finalizeSubselector();
return selectorIndex;
}
}
});
// node_modules/css-what/lib/commonjs/stringify.js
var require_stringify = __commonJS({
"node_modules/css-what/lib/commonjs/stringify.js"(exports2) {
"use strict";
var __spreadArray = exports2 && exports2.__spreadArray || function(to, from, pack) {
if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
if (ar || !(i in from)) {
if (!ar) ar = Array.prototype.slice.call(from, 0, i);
ar[i] = from[i];
}
}
return to.concat(ar || Array.prototype.slice.call(from));
};
Object.defineProperty(exports2, "__esModule", { value: true });
exports2.stringify = void 0;
var types_1 = require_types();
var attribValChars = ["\\", '"'];
var pseudoValChars = __spreadArray(__spreadArray([], attribValChars, true), ["(", ")"], false);
var charsToEscapeInAttributeValue = new Set(attribValChars.map(function(c) {
return c.charCodeAt(0);
}));
var charsToEscapeInPseudoValue = new Set(pseudoValChars.map(function(c) {
return c.charCodeAt(0);
}));
var charsToEscapeInName = new Set(__spreadArray(__spreadArray([], pseudoValChars, true), [
"~",
"^",
"$",
"*",
"+",
"!",
"|",
":",
"[",
"]",
" ",
"."
], false).map(function(c) {
return c.charCodeAt(0);
}));
function stringify2(selector) {
return selector.map(function(token) {
return token.map(stringifyToken).join("");
}).join(", ");
}
exports2.stringify = stringify2;
function stringifyToken(token, index2, arr) {
switch (token.type) {
// Simple types
case types_1.SelectorType.Child:
return index2 === 0 ? "> " : " > ";
case types_1.SelectorType.Parent:
return index2 === 0 ? "< " : " < ";
case types_1.SelectorType.Sibling:
return index2 === 0 ? "~ " : " ~ ";
case types_1.SelectorType.Adjacent:
return index2 === 0 ? "+ " : " + ";
case types_1.SelectorType.Descendant:
return " ";
case types_1.SelectorType.ColumnCombinator:
return index2 === 0 ? "|| " : " || ";
case types_1.SelectorType.Universal:
return token.namespace === "*" && index2 + 1 < arr.length && "name" in arr[index2 + 1] ? "" : "".concat(getNamespace(token.namespace), "*");
case types_1.SelectorType.Tag:
return getNamespacedName(token);
case types_1.SelectorType.PseudoElement:
return "::".concat(escapeName(token.name, charsToEscapeInName)).concat(token.data === null ? "" : "(".concat(escapeName(token.data, charsToEscapeInPseudoValue), ")"));
case types_1.SelectorType.Pseudo:
return ":".concat(escapeName(token.name, charsToEscapeInName)).concat(token.data === null ? "" : "(".concat(typeof token.data === "string" ? escapeName(token.data, charsToEscapeInPseudoValue) : stringify2(token.data), ")"));
case types_1.SelectorType.Attribute: {
if (token.name === "id" && token.action === types_1.AttributeAction.Equals && token.ignoreCase === "quirks" && !token.namespace) {
return "#".concat(escapeName(token.value, charsToEscapeInName));
}
if (token.name === "class" && token.action === types_1.AttributeAction.Element && token.ignoreCase === "quirks" && !token.namespace) {
return ".".concat(escapeName(token.value, charsToEscapeInName));
}
var name_1 = getNamespacedName(token);
if (token.action === types_1.AttributeAction.Exists) {
return "[".concat(name_1, "]");
}
return "[".concat(name_1).concat(getActionValue(token.action), '="').concat(escapeName(token.value, charsToEscapeInAttributeValue), '"').concat(token.ignoreCase === null ? "" : token.ignoreCase ? " i" : " s", "]");
}
}
}
function getActionValue(action) {
switch (action) {
case types_1.AttributeAction.Equals:
return "";
case types_1.AttributeAction.Element:
return "~";
case types_1.AttributeAction.Start:
return "^";
case types_1.AttributeAction.End:
return "$";
case types_1.AttributeAction.Any:
return "*";
case types_1.AttributeAction.Not:
return "!";
case types_1.AttributeAction.Hyphen:
return "|";
case types_1.AttributeAction.Exists:
throw new Error("Shouldn't be here");
}
}
function getNamespacedName(token) {
return "".concat(getNamespace(token.namespace)).concat(escapeName(token.name, charsToEscapeInName));
}
function getNamespace(namespace) {
return namespace !== null ? "".concat(namespace === "*" ? "*" : escapeName(namespace, charsToEscapeInName), "|") : "";
}
function escapeName(str, charsToEscape) {
var lastIdx = 0;
var ret = "";
for (var i = 0; i < str.length; i++) {
if (charsToEscape.has(str.charCodeAt(i))) {
ret += "".concat(str.slice(lastIdx, i), "\\").concat(str.charAt(i));
lastIdx = i + 1;
}
}
return ret.length > 0 ? ret + str.slice(lastIdx) : str;
}
}
});
// node_modules/css-what/lib/commonjs/index.js
var require_commonjs = __commonJS({
"node_modules/css-what/lib/commonjs/index.js"(exports2) {
"use strict";
var __createBinding = exports2 && exports2.__createBinding || (Object.create ? (function(o, m, k, k2) {
if (k2 === void 0) k2 = k;
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
desc = { enumerable: true, get: function() {
return m[k];
} };
}
Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
if (k2 === void 0) k2 = k;
o[k2] = m[k];
}));
var __exportStar = exports2 && exports2.__exportStar || function(m, exports3) {
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports3, p)) __createBinding(exports3, m, p);
};
Object.defineProperty(exports2, "__esModule", { value: true });
exports2.stringify = exports2.parse = exports2.isTraversal = void 0;
__exportStar(require_types(), exports2);
var parse_1 = require_parse();
Object.defineProperty(exports2, "isTraversal", { enumerable: true, get: function() {
return parse_1.isTraversal;
} });
Object.defineProperty(exports2, "parse", { enumerable: true, get: function() {
return parse_1.parse;
} });
var stringify_1 = require_stringify();
Object.defineProperty(exports2, "stringify", { enumerable: true, get: function() {
return stringify_1.stringify;
} });
}
});
// node_modules/boolbase/index.js
var require_boolbase = __commonJS({
"node_modules/boolbase/index.js"(exports2, module2) {
module2.exports = {
trueFunc: function trueFunc2() {
return true;
},
falseFunc: function falseFunc() {
return false;
}
};
}
});
// node_modules/css-select/lib/esm/sort.js
function isTraversal(token) {
return !procedure.has(token.type);
}
function sortByProcedure(arr) {
const procs = arr.map(getProcedure);
for (let i = 1; i < arr.length; i++) {
const procNew = procs[i];
if (procNew < 0)
continue;
for (let j = i - 1; j >= 0 && procNew < procs[j]; j--) {
const token = arr[j + 1];
arr[j + 1] = arr[j];
arr[j] = token;
procs[j + 1] = procs[j];
procs[j] = procNew;
}
}
}
function getProcedure(token) {
var _a2, _b;
let proc = (_a2 = procedure.get(token.type)) !== null && _a2 !== void 0 ? _a2 : -1;
if (token.type === import_css_what.SelectorType.Attribute) {
proc = (_b = attributes.get(token.action)) !== null && _b !== void 0 ? _b : 4;
if (token.action === import_css_what.AttributeAction.Equals && token.name === "id") {
proc = 9;
}
if (token.ignoreCase) {
proc >>= 1;
}
} else if (token.type === import_css_what.SelectorType.Pseudo) {
if (!token.data) {
proc = 3;
} else if (token.name === "has" || token.name === "contains") {
proc = 0;
} else if (Array.isArray(token.data)) {
proc = Math.min(...token.data.map((d) => Math.min(...d.map(getProcedure))));
if (proc < 0) {
proc = 0;
}
} else {
proc = 2;
}
}
return proc;
}
var import_css_what, procedure, attributes;
var init_sort = __esm({
"node_modules/css-select/lib/esm/sort.js"() {
import_css_what = __toESM(require_commonjs(), 1);
procedure = /* @__PURE__ */ new Map([
[import_css_what.SelectorType.Universal, 50],
[import_css_what.SelectorType.Tag, 30],
[import_css_what.SelectorType.Attribute, 1],
[import_css_what.SelectorType.Pseudo, 0]
]);
attributes = /* @__PURE__ */ new Map([
[import_css_what.AttributeAction.Exists, 10],
[import_css_what.AttributeAction.Equals, 8],
[import_css_what.AttributeAction.Not, 7],
[import_css_what.AttributeAction.Start, 6],
[import_css_what.AttributeAction.End, 6],
[import_css_what.AttributeAction.Any, 5]
]);
}
});
// node_modules/css-select/lib/esm/attributes.js
function escapeRegex(value) {
return value.replace(reChars, "\\$&");
}
function shouldIgnoreCase(selector, options) {
return typeof selector.ignoreCase === "boolean" ? selector.ignoreCase : selector.ignoreCase === "quirks" ? !!options.quirksMode : !options.xmlMode && caseInsensitiveAttributes.has(selector.name);
}
var import_boolbase, reChars, caseInsensitiveAttributes, attributeRules;
var init_attributes2 = __esm({
"node_modules/css-select/lib/esm/attributes.js"() {
import_boolbase = __toESM(require_boolbase(), 1);
reChars = /[-[\]{}()*+?.,\\^$|#\s]/g;
caseInsensitiveAttributes = /* @__PURE__ */ new Set([
"accept",
"accept-charset",
"align",
"alink",
"axis",
"bgcolor",
"charset",
"checked",
"clear",
"codetype",
"color",
"compact",
"declare",
"defer",
"dir",
"direction",
"disabled",
"enctype",
"face",
"frame",
"hreflang",
"http-equiv",
"lang",
"language",
"link",
"media",
"method",
"multiple",
"nohref",
"noresize",
"noshade",
"nowrap",
"readonly",
"rel",
"rev",
"rules",
"scope",
"scrolling",
"selected",
"shape",
"target",
"text",
"type",
"valign",
"valuetype",
"vlink"
]);
attributeRules = {
equals(next2, data2, options) {
const { adapter: adapter2 } = options;
const { name } = data2;
let { value } = data2;
if (shouldIgnoreCase(data2, options)) {
value = value.toLowerCase();
return (elem) => {
const attr2 = adapter2.getAttributeValue(elem, name);
return attr2 != null && attr2.length === value.length && attr2.toLowerCase() === value && next2(elem);
};
}
return (elem) => adapter2.getAttributeValue(elem, name) === value && next2(elem);
},
hyphen(next2, data2, options) {
const { adapter: adapter2 } = options;
const { name } = data2;
let { value } = data2;
const len = value.length;
if (shouldIgnoreCase(data2, options)) {
value = value.toLowerCase();
return function hyphenIC(elem) {
const attr2 = adapter2.getAttributeValue(elem, name);
return attr2 != null && (attr2.length === len || attr2.charAt(len) === "-") && attr2.substr(0, len).toLowerCase() === value && next2(elem);
};
}
return function hyphen(elem) {
const attr2 = adapter2.getAttributeValue(elem, name);
return attr2 != null && (attr2.length === len || attr2.charAt(len) === "-") && attr2.substr(0, len) === value && next2(elem);
};
},
element(next2, data2, options) {
const { adapter: adapter2 } = options;
const { name, value } = data2;
if (/\s/.test(value)) {
return import_boolbase.default.falseFunc;
}
const regex = new RegExp(`(?:^|\\s)${escapeRegex(value)}(?:$|\\s)`, shouldIgnoreCase(data2, options) ? "i" : "");
return function element(elem) {
const attr2 = adapter2.getAttributeValue(elem, name);
return attr2 != null && attr2.length >= value.length && regex.test(attr2) && next2(elem);
};
},
exists(next2, { name }, { adapter: adapter2 }) {
return (elem) => adapter2.hasAttrib(elem, name) && next2(elem);
},
start(next2, data2, options) {
const { adapter: adapter2 } = options;
const { name } = data2;
let { value } = data2;
const len = value.length;
if (len === 0) {
return import_boolbase.default.falseFunc;
}
if (shouldIgnoreCase(data2, options)) {
value = value.toLowerCase();
return (elem) => {
const attr2 = adapter2.getAttributeValue(elem, name);
return attr2 != null && attr2.length >= len && attr2.substr(0, len).toLowerCase() === value && next2(elem);
};
}
return (elem) => {
var _a2;
return !!((_a2 = adapter2.getAttributeValue(elem, name)) === null || _a2 === void 0 ? void 0 : _a2.startsWith(value)) && next2(elem);
};
},
end(next2, data2, options) {
const { adapter: adapter2 } = options;
const { name } = data2;
let { value } = data2;
const len = -value.length;
if (len === 0) {
return import_boolbase.default.falseFunc;
}
if (shouldIgnoreCase(data2, options)) {
value = value.toLowerCase();
return (elem) => {
var _a2;
return ((_a2 = adapter2.getAttributeValue(elem, name)) === null || _a2 === void 0 ? void 0 : _a2.substr(len).toLowerCase()) === value && next2(elem);
};
}
return (elem) => {
var _a2;
return !!((_a2 = adapter2.getAttributeValue(elem, name)) === null || _a2 === void 0 ? void 0 : _a2.endsWith(value)) && next2(elem);
};
},
any(next2, data2, options) {
const { adapter: adapter2 } = options;
const { name, value } = data2;
if (value === "") {
return import_boolbase.default.falseFunc;
}
if (shouldIgnoreCase(data2, options)) {
const regex = new RegExp(escapeRegex(value), "i");
return function anyIC(elem) {
const attr2 = adapter2.getAttributeValue(elem, name);
return attr2 != null && attr2.length >= value.length && regex.test(attr2) && next2(elem);
};
}
return (elem) => {
var _a2;
return !!((_a2 = adapter2.getAttributeValue(elem, name)) === null || _a2 === void 0 ? void 0 : _a2.includes(value)) && next2(elem);
};
},
not(next2, data2, options) {
const { adapter: adapter2 } = options;
const { name } = data2;
let { value } = data2;
if (value === "") {
return (elem) => !!adapter2.getAttributeValue(elem, name) && next2(elem);
} else if (shouldIgnoreCase(data2, options)) {
value = value.toLowerCase();
return (elem) => {
const attr2 = adapter2.getAttributeValue(elem, name);
return (attr2 == null || attr2.length !== value.length || attr2.toLowerCase() !== value) && next2(elem);
};
}
return (elem) => adapter2.getAttributeValue(elem, name) !== value && next2(elem);
}
};
}
});
// node_modules/nth-check/lib/esm/parse.js
function parse(formula) {
formula = formula.trim().toLowerCase();
if (formula === "even") {
return [2, 0];
} else if (formula === "odd") {
return [2, 1];
}
let idx = 0;
let a = 0;
let sign = readSign();
let number = readNumber();
if (idx < formula.length && formula.charAt(idx) === "n") {
idx++;
a = sign * (number !== null && number !== void 0 ? number : 1);
skipWhitespace();
if (idx < formula.length) {
sign = readSign();
skipWhitespace();
number = readNumber();
} else {
sign = number = 0;
}
}
if (number === null || idx < formula.length) {
throw new Error(`n-th rule couldn't be parsed ('${formula}')`);
}
return [a, sign * number];
function readSign() {
if (formula.charAt(idx) === "-") {
idx++;
return -1;
}
if (formula.charAt(idx) === "+") {
idx++;
}
return 1;
}
function readNumber() {
const start = idx;
let value = 0;
while (idx < formula.length && formula.charCodeAt(idx) >= ZERO && formula.charCodeAt(idx) <= NINE) {
value = value * 10 + (formula.charCodeAt(idx) - ZERO);
idx++;
}
return idx === start ? null : value;
}
function skipWhitespace() {
while (idx < formula.length && whitespace.has(formula.charCodeAt(idx))) {
idx++;
}
}
}
var whitespace, ZERO, NINE;
var init_parse = __esm({
"node_modules/nth-check/lib/esm/parse.js"() {
whitespace = /* @__PURE__ */ new Set([9, 10, 12, 13, 32]);
ZERO = "0".charCodeAt(0);
NINE = "9".charCodeAt(0);
}
});
// node_modules/nth-check/lib/esm/compile.js
function compile(parsed) {
const a = parsed[0];
const b = parsed[1] - 1;
if (b < 0 && a <= 0)
return import_boolbase2.default.falseFunc;
if (a === -1)
return (index2) => index2 <= b;
if (a === 0)
return (index2) => index2 === b;
if (a === 1)
return b < 0 ? import_boolbase2.default.trueFunc : (index2) => index2 >= b;
const absA = Math.abs(a);
const bMod = (b % absA + absA) % absA;
return a > 1 ? (index2) => index2 >= b && index2 % absA === bMod : (index2) => index2 <= b && index2 % absA === bMod;
}
var import_boolbase2;
var init_compile = __esm({
"node_modules/nth-check/lib/esm/compile.js"() {
import_boolbase2 = __toESM(require_boolbase(), 1);
}
});
// node_modules/nth-check/lib/esm/index.js
function nthCheck(formula) {
return compile(parse(formula));
}
var init_esm6 = __esm({
"node_modules/nth-check/lib/esm/index.js"() {
init_parse();
init_compile();
}
});
// node_modules/css-select/lib/esm/pseudo-selectors/filters.js
function getChildFunc(next2, adapter2) {
return (elem) => {
const parent2 = adapter2.getParent(elem);
return parent2 != null && adapter2.isTag(parent2) && next2(elem);
};
}
function dynamicStatePseudo(name) {
return function dynamicPseudo(next2, _rule, { adapter: adapter2 }) {
const func = adapter2[name];
if (typeof func !== "function") {
return import_boolbase3.default.falseFunc;
}
return function active(elem) {
return func(elem) && next2(elem);
};
};
}
var import_boolbase3, filters;
var init_filters = __esm({
"node_modules/css-select/lib/esm/pseudo-selectors/filters.js"() {
init_esm6();
import_boolbase3 = __toESM(require_boolbase(), 1);
filters = {
contains(next2, text3, { adapter: adapter2 }) {
return function contains2(elem) {
return next2(elem) && adapter2.getText(elem).includes(text3);
};
},
icontains(next2, text3, { adapter: adapter2 }) {
const itext = text3.toLowerCase();
return function icontains(elem) {
return next2(elem) && adapter2.getText(elem).toLowerCase().includes(itext);
};
},
// Location specific methods
"nth-child"(next2, rule, { adapter: adapter2, equals }) {
const func = nthCheck(rule);
if (func === import_boolbase3.default.falseFunc)
return import_boolbase3.default.falseFunc;
if (func === import_boolbase3.default.trueFunc)
return getChildFunc(next2, adapter2);
return function nthChild(elem) {
const siblings2 = adapter2.getSiblings(elem);
let pos = 0;
for (let i = 0; i < siblings2.length; i++) {
if (equals(elem, siblings2[i]))
break;
if (adapter2.isTag(siblings2[i])) {
pos++;
}
}
return func(pos) && next2(elem);
};
},
"nth-last-child"(next2, rule, { adapter: adapter2, equals }) {
const func = nthCheck(rule);
if (func === import_boolbase3.default.falseFunc)
return import_boolbase3.default.falseFunc;
if (func === import_boolbase3.default.trueFunc)
return getChildFunc(next2, adapter2);
return function nthLastChild(elem) {
const siblings2 = adapter2.getSiblings(elem);
let pos = 0;
for (let i = siblings2.length - 1; i >= 0; i--) {
if (equals(elem, siblings2[i]))
break;
if (adapter2.isTag(siblings2[i])) {
pos++;
}
}
return func(pos) && next2(elem);
};
},
"nth-of-type"(next2, rule, { adapter: adapter2, equals }) {
const func = nthCheck(rule);
if (func === import_boolbase3.default.falseFunc)
return import_boolbase3.default.falseFunc;
if (func === import_boolbase3.default.trueFunc)
return getChildFunc(next2, adapter2);
return function nthOfType(elem) {
const siblings2 = adapter2.getSiblings(elem);
let pos = 0;
for (let i = 0; i < siblings2.length; i++) {
const currentSibling = siblings2[i];
if (equals(elem, currentSibling))
break;
if (adapter2.isTag(currentSibling) && adapter2.getName(currentSibling) === adapter2.getName(elem)) {
pos++;
}
}
return func(pos) && next2(elem);
};
},
"nth-last-of-type"(next2, rule, { adapter: adapter2, equals }) {
const func = nthCheck(rule);
if (func === import_boolbase3.default.falseFunc)
return import_boolbase3.default.falseFunc;
if (func === import_boolbase3.default.trueFunc)
return getChildFunc(next2, adapter2);
return function nthLastOfType(elem) {
const siblings2 = adapter2.getSiblings(elem);
let pos = 0;
for (let i = siblings2.length - 1; i >= 0; i--) {
const currentSibling = siblings2[i];
if (equals(elem, currentSibling))
break;
if (adapter2.isTag(currentSibling) && adapter2.getName(currentSibling) === adapter2.getName(elem)) {
pos++;
}
}
return func(pos) && next2(elem);
};
},
// TODO determine the actual root element
root(next2, _rule, { adapter: adapter2 }) {
return (elem) => {
const parent2 = adapter2.getParent(elem);
return (parent2 == null || !adapter2.isTag(parent2)) && next2(elem);
};
},
scope(next2, rule, options, context) {
const { equals } = options;
if (!context || context.length === 0) {
return filters["root"](next2, rule, options);
}
if (context.length === 1) {
return (elem) => equals(context[0], elem) && next2(elem);
}
return (elem) => context.includes(elem) && next2(elem);
},
hover: dynamicStatePseudo("isHovered"),
visited: dynamicStatePseudo("isVisited"),
active: dynamicStatePseudo("isActive")
};
}
});
// node_modules/css-select/lib/esm/pseudo-selectors/pseudos.js
function verifyPseudoArgs(func, name, subselect, argIndex) {
if (subselect === null) {
if (func.length > argIndex) {
throw new Error(`Pseudo-class :${name} requires an argument`);
}
} else if (func.length === argIndex) {
throw new Error(`Pseudo-class :${name} doesn't have any arguments`);
}
}
var pseudos;
var init_pseudos = __esm({
"node_modules/css-select/lib/esm/pseudo-selectors/pseudos.js"() {
pseudos = {
empty(elem, { adapter: adapter2 }) {
return !adapter2.getChildren(elem).some((elem2) => (
// FIXME: `getText` call is potentially expensive.
adapter2.isTag(elem2) || adapter2.getText(elem2) !== ""
));
},
"first-child"(elem, { adapter: adapter2, equals }) {
if (adapter2.prevElementSibling) {
return adapter2.prevElementSibling(elem) == null;
}
const firstChild = adapter2.getSiblings(elem).find((elem2) => adapter2.isTag(elem2));
return firstChild != null && equals(elem, firstChild);
},
"last-child"(elem, { adapter: adapter2, equals }) {
const siblings2 = adapter2.getSiblings(elem);
for (let i = siblings2.length - 1; i >= 0; i--) {
if (equals(elem, siblings2[i]))
return true;
if (adapter2.isTag(siblings2[i]))
break;
}
return false;
},
"first-of-type"(elem, { adapter: adapter2, equals }) {
const siblings2 = adapter2.getSiblings(elem);
const elemName = adapter2.getName(elem);
for (let i = 0; i < siblings2.length; i++) {
const currentSibling = siblings2[i];
if (equals(elem, currentSibling))
return true;
if (adapter2.isTag(currentSibling) && adapter2.getName(currentSibling) === elemName) {
break;
}
}
return false;
},
"last-of-type"(elem, { adapter: adapter2, equals }) {
const siblings2 = adapter2.getSiblings(elem);
const elemName = adapter2.getName(elem);
for (let i = siblings2.length - 1; i >= 0; i--) {
const currentSibling = siblings2[i];
if (equals(elem, currentSibling))
return true;
if (adapter2.isTag(currentSibling) && adapter2.getName(currentSibling) === elemName) {
break;
}
}
return false;
},
"only-of-type"(elem, { adapter: adapter2, equals }) {
const elemName = adapter2.getName(elem);
return adapter2.getSiblings(elem).every((sibling) => equals(elem, sibling) || !adapter2.isTag(sibling) || adapter2.getName(sibling) !== elemName);
},
"only-child"(elem, { adapter: adapter2, equals }) {
return adapter2.getSiblings(elem).every((sibling) => equals(elem, sibling) || !adapter2.isTag(sibling));
}
};
}
});
// node_modules/css-select/lib/esm/pseudo-selectors/aliases.js
var aliases;
var init_aliases = __esm({
"node_modules/css-select/lib/esm/pseudo-selectors/aliases.js"() {
aliases = {
// Links
"any-link": ":is(a, area, link)[href]",
link: ":any-link:not(:visited)",
// Forms
// https://html.spec.whatwg.org/multipage/scripting.html#disabled-elements
disabled: `:is(
:is(button, input, select, textarea, optgroup, option)[disabled],
optgroup[disabled] > option,
fieldset[disabled]:not(fieldset[disabled] legend:first-of-type *)
)`,
enabled: ":not(:disabled)",
checked: ":is(:is(input[type=radio], input[type=checkbox])[checked], option:selected)",
required: ":is(input, select, textarea)[required]",
optional: ":is(input, select, textarea):not([required])",
// JQuery extensions
// https://html.spec.whatwg.org/multipage/form-elements.html#concept-option-selectedness
selected: "option:is([selected], select:not([multiple]):not(:has(> option[selected])) > :first-of-type)",
checkbox: "[type=checkbox]",
file: "[type=file]",
password: "[type=password]",
radio: "[type=radio]",
reset: "[type=reset]",
image: "[type=image]",
submit: "[type=submit]",
parent: ":not(:empty)",
header: ":is(h1, h2, h3, h4, h5, h6)",
button: ":is(button, input[type=button])",
input: ":is(input, textarea, select, button)",
text: "input:is(:not([type!='']), [type=text])"
};
}
});
// node_modules/css-select/lib/esm/pseudo-selectors/subselects.js
function ensureIsTag(next2, adapter2) {
if (next2 === import_boolbase4.default.falseFunc)
return import_boolbase4.default.falseFunc;
return (elem) => adapter2.isTag(elem) && next2(elem);
}
function getNextSiblings(elem, adapter2) {
const siblings2 = adapter2.getSiblings(elem);
if (siblings2.length <= 1)
return [];
const elemIndex = siblings2.indexOf(elem);
if (elemIndex < 0 || elemIndex === siblings2.length - 1)
return [];
return siblings2.slice(elemIndex + 1).filter(adapter2.isTag);
}
function copyOptions(options) {
return {
xmlMode: !!options.xmlMode,
lowerCaseAttributeNames: !!options.lowerCaseAttributeNames,
lowerCaseTags: !!options.lowerCaseTags,
quirksMode: !!options.quirksMode,
cacheResults: !!options.cacheResults,
pseudos: options.pseudos,
adapter: options.adapter,
equals: options.equals
};
}
var import_boolbase4, PLACEHOLDER_ELEMENT, is, subselects;
var init_subselects = __esm({
"node_modules/css-select/lib/esm/pseudo-selectors/subselects.js"() {
import_boolbase4 = __toESM(require_boolbase(), 1);
init_sort();
PLACEHOLDER_ELEMENT = {};
is = (next2, token, options, context, compileToken2) => {
const func = compileToken2(token, copyOptions(options), context);
return func === import_boolbase4.default.trueFunc ? next2 : func === import_boolbase4.default.falseFunc ? import_boolbase4.default.falseFunc : (elem) => func(elem) && next2(elem);
};
subselects = {
is,
/**
* `:matches` and `:where` are aliases for `:is`.
*/
matches: is,
where: is,
not(next2, token, options, context, compileToken2) {
const func = compileToken2(token, copyOptions(options), context);
return func === import_boolbase4.default.falseFunc ? next2 : func === import_boolbase4.default.trueFunc ? import_boolbase4.default.falseFunc : (elem) => !func(elem) && next2(elem);
},
has(next2, subselect, options, _context, compileToken2) {
const { adapter: adapter2 } = options;
const opts = copyOptions(options);
opts.relativeSelector = true;
const context = subselect.some((s) => s.some(isTraversal)) ? (
// Used as a placeholder. Will be replaced with the actual element.
[PLACEHOLDER_ELEMENT]
) : void 0;
const compiled = compileToken2(subselect, opts, context);
if (compiled === import_boolbase4.default.falseFunc)
return import_boolbase4.default.falseFunc;
const hasElement = ensureIsTag(compiled, adapter2);
if (context && compiled !== import_boolbase4.default.trueFunc) {
const { shouldTestNextSiblings = false } = compiled;
return (elem) => {
if (!next2(elem))
return false;
context[0] = elem;
const childs = adapter2.getChildren(elem);
const nextElements = shouldTestNextSiblings ? [...childs, ...getNextSiblings(elem, adapter2)] : childs;
return adapter2.existsOne(hasElement, nextElements);
};
}
return (elem) => next2(elem) && adapter2.existsOne(hasElement, adapter2.getChildren(elem));
}
};
}
});
// node_modules/css-select/lib/esm/pseudo-selectors/index.js
function compilePseudoSelector(next2, selector, options, context, compileToken2) {
var _a2;
const { name, data: data2 } = selector;
if (Array.isArray(data2)) {
if (!(name in subselects)) {
throw new Error(`Unknown pseudo-class :${name}(${data2})`);
}
return subselects[name](next2, data2, options, context, compileToken2);
}
const userPseudo = (_a2 = options.pseudos) === null || _a2 === void 0 ? void 0 : _a2[name];
const stringPseudo = typeof userPseudo === "string" ? userPseudo : aliases[name];
if (typeof stringPseudo === "string") {
if (data2 != null) {
throw new Error(`Pseudo ${name} doesn't have any arguments`);
}
const alias = (0, import_css_what2.parse)(stringPseudo);
return subselects["is"](next2, alias, options, context, compileToken2);
}
if (typeof userPseudo === "function") {
verifyPseudoArgs(userPseudo, name, data2, 1);
return (elem) => userPseudo(elem, data2) && next2(elem);
}
if (name in filters) {
return filters[name](next2, data2, options, context);
}
if (name in pseudos) {
const pseudo = pseudos[name];
verifyPseudoArgs(pseudo, name, data2, 2);
return (elem) => pseudo(elem, options, data2) && next2(elem);
}
throw new Error(`Unknown pseudo-class :${name}`);
}
var import_css_what2;
var init_pseudo_selectors = __esm({
"node_modules/css-select/lib/esm/pseudo-selectors/index.js"() {
import_css_what2 = __toESM(require_commonjs(), 1);
init_filters();
init_pseudos();
init_aliases();
init_subselects();
}
});
// node_modules/css-select/lib/esm/general.js
function getElementParent(node, adapter2) {
const parent2 = adapter2.getParent(node);
if (parent2 && adapter2.isTag(parent2)) {
return parent2;
}
return null;
}
function compileGeneralSelector(next2, selector, options, context, compileToken2) {
const { adapter: adapter2, equals } = options;
switch (selector.type) {
case import_css_what3.SelectorType.PseudoElement: {
throw new Error("Pseudo-elements are not supported by css-select");
}
case import_css_what3.SelectorType.ColumnCombinator: {
throw new Error("Column combinators are not yet supported by css-select");
}
case import_css_what3.SelectorType.Attribute: {
if (selector.namespace != null) {
throw new Error("Namespaced attributes are not yet supported by css-select");
}
if (!options.xmlMode || options.lowerCaseAttributeNames) {
selector.name = selector.name.toLowerCase();
}
return attributeRules[selector.action](next2, selector, options);
}
case import_css_what3.SelectorType.Pseudo: {
return compilePseudoSelector(next2, selector, options, context, compileToken2);
}
// Tags
case import_css_what3.SelectorType.Tag: {
if (selector.namespace != null) {
throw new Error("Namespaced tag names are not yet supported by css-select");
}
let { name } = selector;
if (!options.xmlMode || options.lowerCaseTags) {
name = name.toLowerCase();
}
return function tag(elem) {
return adapter2.getName(elem) === name && next2(elem);
};
}
// Traversal
case import_css_what3.SelectorType.Descendant: {
if (options.cacheResults === false || typeof WeakSet === "undefined") {
return function descendant(elem) {
let current = elem;
while (current = getElementParent(current, adapter2)) {
if (next2(current)) {
return true;
}
}
return false;
};
}
const isFalseCache = /* @__PURE__ */ new WeakSet();
return function cachedDescendant(elem) {
let current = elem;
while (current = getElementParent(current, adapter2)) {
if (!isFalseCache.has(current)) {
if (adapter2.isTag(current) && next2(current)) {
return true;
}
isFalseCache.add(current);
}
}
return false;
};
}
case "_flexibleDescendant": {
return function flexibleDescendant(elem) {
let current = elem;
do {
if (next2(current))
return true;
} while (current = getElementParent(current, adapter2));
return false;
};
}
case import_css_what3.SelectorType.Parent: {
return function parent2(elem) {
return adapter2.getChildren(elem).some((elem2) => adapter2.isTag(elem2) && next2(elem2));
};
}
case import_css_what3.SelectorType.Child: {
return function child(elem) {
const parent2 = adapter2.getParent(elem);
return parent2 != null && adapter2.isTag(parent2) && next2(parent2);
};
}
case import_css_what3.SelectorType.Sibling: {
return function sibling(elem) {
const siblings2 = adapter2.getSiblings(elem);
for (let i = 0; i < siblings2.length; i++) {
const currentSibling = siblings2[i];
if (equals(elem, currentSibling))
break;
if (adapter2.isTag(currentSibling) && next2(currentSibling)) {
return true;
}
}
return false;
};
}
case import_css_what3.SelectorType.Adjacent: {
if (adapter2.prevElementSibling) {
return function adjacent(elem) {
const previous = adapter2.prevElementSibling(elem);
return previous != null && next2(previous);
};
}
return function adjacent(elem) {
const siblings2 = adapter2.getSiblings(elem);
let lastElement;
for (let i = 0; i < siblings2.length; i++) {
const currentSibling = siblings2[i];
if (equals(elem, currentSibling))
break;
if (adapter2.isTag(currentSibling)) {
lastElement = currentSibling;
}
}
return !!lastElement && next2(lastElement);
};
}
case import_css_what3.SelectorType.Universal: {
if (selector.namespace != null && selector.namespace !== "*") {
throw new Error("Namespaced universal selectors are not yet supported by css-select");
}
return next2;
}
}
}
var import_css_what3;
var init_general = __esm({
"node_modules/css-select/lib/esm/general.js"() {
init_attributes2();
init_pseudo_selectors();
import_css_what3 = __toESM(require_commonjs(), 1);
}
});
// node_modules/css-select/lib/esm/compile.js
function compile2(selector, options, context) {
const next2 = compileUnsafe(selector, options, context);
return ensureIsTag(next2, options.adapter);
}
function compileUnsafe(selector, options, context) {
const token = typeof selector === "string" ? (0, import_css_what4.parse)(selector) : selector;
return compileToken(token, options, context);
}
function includesScopePseudo(t) {
return t.type === import_css_what4.SelectorType.Pseudo && (t.name === "scope" || Array.isArray(t.data) && t.data.some((data2) => data2.some(includesScopePseudo)));
}
function absolutize(token, { adapter: adapter2 }, context) {
const hasContext = !!(context === null || context === void 0 ? void 0 : context.every((e) => {
const parent2 = adapter2.isTag(e) && adapter2.getParent(e);
return e === PLACEHOLDER_ELEMENT || parent2 && adapter2.isTag(parent2);
}));
for (const t of token) {
if (t.length > 0 && isTraversal(t[0]) && t[0].type !== import_css_what4.SelectorType.Descendant) {
} else if (hasContext && !t.some(includesScopePseudo)) {
t.unshift(DESCENDANT_TOKEN);
} else {
continue;
}
t.unshift(SCOPE_TOKEN);
}
}
function compileToken(token, options, context) {
var _a2;
token.forEach(sortByProcedure);
context = (_a2 = options.context) !== null && _a2 !== void 0 ? _a2 : context;
const isArrayContext = Array.isArray(context);
const finalContext = context && (Array.isArray(context) ? context : [context]);
if (options.relativeSelector !== false) {
absolutize(token, options, finalContext);
} else if (token.some((t) => t.length > 0 && isTraversal(t[0]))) {
throw new Error("Relative selectors are not allowed when the `relativeSelector` option is disabled");
}
let shouldTestNextSiblings = false;
const query = token.map((rules) => {
if (rules.length >= 2) {
const [first2, second] = rules;
if (first2.type !== import_css_what4.SelectorType.Pseudo || first2.name !== "scope") {
} else if (isArrayContext && second.type === import_css_what4.SelectorType.Descendant) {
rules[1] = FLEXIBLE_DESCENDANT_TOKEN;
} else if (second.type === import_css_what4.SelectorType.Adjacent || second.type === import_css_what4.SelectorType.Sibling) {
shouldTestNextSiblings = true;
}
}
return compileRules(rules, options, finalContext);
}).reduce(reduceRules, import_boolbase5.default.falseFunc);
query.shouldTestNextSiblings = shouldTestNextSiblings;
return query;
}
function compileRules(rules, options, context) {
var _a2;
return rules.reduce((previous, rule) => previous === import_boolbase5.default.falseFunc ? import_boolbase5.default.falseFunc : compileGeneralSelector(previous, rule, options, context, compileToken), (_a2 = options.rootFunc) !== null && _a2 !== void 0 ? _a2 : import_boolbase5.default.trueFunc);
}
function reduceRules(a, b) {
if (b === import_boolbase5.default.falseFunc || a === import_boolbase5.default.trueFunc) {
return a;
}
if (a === import_boolbase5.default.falseFunc || b === import_boolbase5.default.trueFunc) {
return b;
}
return function combine(elem) {
return a(elem) || b(elem);
};
}
var import_css_what4, import_boolbase5, DESCENDANT_TOKEN, FLEXIBLE_DESCENDANT_TOKEN, SCOPE_TOKEN;
var init_compile2 = __esm({
"node_modules/css-select/lib/esm/compile.js"() {
import_css_what4 = __toESM(require_commonjs(), 1);
import_boolbase5 = __toESM(require_boolbase(), 1);
init_sort();
init_general();
init_subselects();
DESCENDANT_TOKEN = { type: import_css_what4.SelectorType.Descendant };
FLEXIBLE_DESCENDANT_TOKEN = {
type: "_flexibleDescendant"
};
SCOPE_TOKEN = {
type: import_css_what4.SelectorType.Pseudo,
name: "scope",
data: null
};
}
});
// node_modules/css-select/lib/esm/index.js
function convertOptionFormats(options) {
var _a2, _b, _c, _d;
const opts = options !== null && options !== void 0 ? options : defaultOptions;
(_a2 = opts.adapter) !== null && _a2 !== void 0 ? _a2 : opts.adapter = esm_exports2;
(_b = opts.equals) !== null && _b !== void 0 ? _b : opts.equals = (_d = (_c = opts.adapter) === null || _c === void 0 ? void 0 : _c.equals) !== null && _d !== void 0 ? _d : defaultEquals;
return opts;
}
function wrapCompile(func) {
return function addAdapter(selector, options, context) {
const opts = convertOptionFormats(options);
return func(selector, opts, context);
};
}
function getSelectorFunc(searchFunc) {
return function select2(query, elements, options) {
const opts = convertOptionFormats(options);
if (typeof query !== "function") {
query = compileUnsafe(query, opts, elements);
}
const filteredElements = prepareContext(elements, opts.adapter, query.shouldTestNextSiblings);
return searchFunc(query, filteredElements, opts);
};
}
function prepareContext(elems, adapter2, shouldTestNextSiblings = false) {
if (shouldTestNextSiblings) {
elems = appendNextSiblings(elems, adapter2);
}
return Array.isArray(elems) ? adapter2.removeSubsets(elems) : adapter2.getChildren(elems);
}
function appendNextSiblings(elem, adapter2) {
const elems = Array.isArray(elem) ? elem.slice(0) : [elem];
const elemsLength = elems.length;
for (let i = 0; i < elemsLength; i++) {
const nextSiblings = getNextSiblings(elems[i], adapter2);
elems.push(...nextSiblings);
}
return elems;
}
var import_boolbase6, defaultEquals, defaultOptions, compile3, _compileUnsafe, _compileToken, selectAll, selectOne;
var init_esm7 = __esm({
"node_modules/css-select/lib/esm/index.js"() {
init_esm5();
import_boolbase6 = __toESM(require_boolbase(), 1);
init_compile2();
init_subselects();
init_pseudo_selectors();
defaultEquals = (a, b) => a === b;
defaultOptions = {
adapter: esm_exports2,
equals: defaultEquals
};
compile3 = wrapCompile(compile2);
_compileUnsafe = wrapCompile(compileUnsafe);
_compileToken = wrapCompile(compileToken);
selectAll = getSelectorFunc((query, elems, options) => query === import_boolbase6.default.falseFunc || !elems || elems.length === 0 ? [] : options.adapter.findAll(query, elems));
selectOne = getSelectorFunc((query, elems, options) => query === import_boolbase6.default.falseFunc || !elems || elems.length === 0 ? null : options.adapter.findOne(query, elems));
}
});
// node_modules/cheerio-select/lib/esm/positionals.js
function isFilter(s) {
if (s.type !== "pseudo")
return false;
if (filterNames.has(s.name))
return true;
if (s.name === "not" && Array.isArray(s.data)) {
return s.data.some((s2) => s2.some(isFilter));
}
return false;
}
function getLimit(filter5, data2, partLimit) {
const num = data2 != null ? parseInt(data2, 10) : NaN;
switch (filter5) {
case "first":
return 1;
case "nth":
case "eq":
return isFinite(num) ? num >= 0 ? num + 1 : Infinity : 0;
case "lt":
return isFinite(num) ? num >= 0 ? Math.min(num, partLimit) : Infinity : 0;
case "gt":
return isFinite(num) ? Infinity : 0;
case "odd":
return 2 * partLimit;
case "even":
return 2 * partLimit - 1;
case "last":
case "not":
return Infinity;
}
}
var filterNames;
var init_positionals = __esm({
"node_modules/cheerio-select/lib/esm/positionals.js"() {
filterNames = /* @__PURE__ */ new Set([
"first",
"last",
"eq",
"gt",
"nth",
"lt",
"even",
"odd"
]);
}
});
// node_modules/cheerio-select/lib/esm/helpers.js
function getDocumentRoot(node) {
while (node.parent)
node = node.parent;
return node;
}
function groupSelectors(selectors) {
const filteredSelectors = [];
const plainSelectors = [];
for (const selector of selectors) {
if (selector.some(isFilter)) {
filteredSelectors.push(selector);
} else {
plainSelectors.push(selector);
}
}
return [plainSelectors, filteredSelectors];
}
var init_helpers2 = __esm({
"node_modules/cheerio-select/lib/esm/helpers.js"() {
init_positionals();
}
});
// node_modules/cheerio-select/lib/esm/index.js
function is2(element, selector, options = {}) {
return some([element], selector, options);
}
function some(elements, selector, options = {}) {
if (typeof selector === "function")
return elements.some(selector);
const [plain, filtered] = groupSelectors((0, import_css_what5.parse)(selector));
return plain.length > 0 && elements.some(_compileToken(plain, options)) || filtered.some((sel) => filterBySelector(sel, elements, options).length > 0);
}
function filterByPosition(filter5, elems, data2, options) {
const num = typeof data2 === "string" ? parseInt(data2, 10) : NaN;
switch (filter5) {
case "first":
case "lt":
return elems;
case "last":
return elems.length > 0 ? [elems[elems.length - 1]] : elems;
case "nth":
case "eq":
return isFinite(num) && Math.abs(num) < elems.length ? [num < 0 ? elems[elems.length + num] : elems[num]] : [];
case "gt":
return isFinite(num) ? elems.slice(num + 1) : [];
case "even":
return elems.filter((_, i) => i % 2 === 0);
case "odd":
return elems.filter((_, i) => i % 2 === 1);
case "not": {
const filtered = new Set(filterParsed(data2, elems, options));
return elems.filter((e) => !filtered.has(e));
}
}
}
function filter3(selector, elements, options = {}) {
return filterParsed((0, import_css_what5.parse)(selector), elements, options);
}
function filterParsed(selector, elements, options) {
if (elements.length === 0)
return [];
const [plainSelectors, filteredSelectors] = groupSelectors(selector);
let found;
if (plainSelectors.length) {
const filtered = filterElements(elements, plainSelectors, options);
if (filteredSelectors.length === 0) {
return filtered;
}
if (filtered.length) {
found = new Set(filtered);
}
}
for (let i = 0; i < filteredSelectors.length && (found === null || found === void 0 ? void 0 : found.size) !== elements.length; i++) {
const filteredSelector = filteredSelectors[i];
const missing = found ? elements.filter((e) => isTag2(e) && !found.has(e)) : elements;
if (missing.length === 0)
break;
const filtered = filterBySelector(filteredSelector, elements, options);
if (filtered.length) {
if (!found) {
if (i === filteredSelectors.length - 1) {
return filtered;
}
found = new Set(filtered);
} else {
filtered.forEach((el) => found.add(el));
}
}
}
return typeof found !== "undefined" ? found.size === elements.length ? elements : (
// Filter elements to preserve order
elements.filter((el) => found.has(el))
) : [];
}
function filterBySelector(selector, elements, options) {
var _a2;
if (selector.some(import_css_what5.isTraversal)) {
const root2 = (_a2 = options.root) !== null && _a2 !== void 0 ? _a2 : getDocumentRoot(elements[0]);
const opts = { ...options, context: elements, relativeSelector: false };
selector.push(SCOPE_PSEUDO);
return findFilterElements(root2, selector, opts, true, elements.length);
}
return findFilterElements(elements, selector, options, false, elements.length);
}
function select(selector, root2, options = {}, limit = Infinity) {
if (typeof selector === "function") {
return find2(root2, selector);
}
const [plain, filtered] = groupSelectors((0, import_css_what5.parse)(selector));
const results = filtered.map((sel) => findFilterElements(root2, sel, options, true, limit));
if (plain.length) {
results.push(findElements(root2, plain, options, limit));
}
if (results.length === 0) {
return [];
}
if (results.length === 1) {
return results[0];
}
return uniqueSort(results.reduce((a, b) => [...a, ...b]));
}
function findFilterElements(root2, selector, options, queryForSelector, totalLimit) {
const filterIndex = selector.findIndex(isFilter);
const sub = selector.slice(0, filterIndex);
const filter5 = selector[filterIndex];
const partLimit = selector.length - 1 === filterIndex ? totalLimit : Infinity;
const limit = getLimit(filter5.name, filter5.data, partLimit);
if (limit === 0)
return [];
const elemsNoLimit = sub.length === 0 && !Array.isArray(root2) ? getChildren(root2).filter(isTag2) : sub.length === 0 ? (Array.isArray(root2) ? root2 : [root2]).filter(isTag2) : queryForSelector || sub.some(import_css_what5.isTraversal) ? findElements(root2, [sub], options, limit) : filterElements(root2, [sub], options);
const elems = elemsNoLimit.slice(0, limit);
let result = filterByPosition(filter5.name, elems, filter5.data, options);
if (result.length === 0 || selector.length === filterIndex + 1) {
return result;
}
const remainingSelector = selector.slice(filterIndex + 1);
const remainingHasTraversal = remainingSelector.some(import_css_what5.isTraversal);
if (remainingHasTraversal) {
if ((0, import_css_what5.isTraversal)(remainingSelector[0])) {
const { type } = remainingSelector[0];
if (type === import_css_what5.SelectorType.Sibling || type === import_css_what5.SelectorType.Adjacent) {
result = prepareContext(result, esm_exports2, true);
}
remainingSelector.unshift(UNIVERSAL_SELECTOR);
}
options = {
...options,
// Avoid absolutizing the selector
relativeSelector: false,
/*
* Add a custom root func, to make sure traversals don't match elements
* that aren't a part of the considered tree.
*/
rootFunc: (el) => result.includes(el)
};
} else if (options.rootFunc && options.rootFunc !== boolbase7.trueFunc) {
options = { ...options, rootFunc: boolbase7.trueFunc };
}
return remainingSelector.some(isFilter) ? findFilterElements(result, remainingSelector, options, false, totalLimit) : remainingHasTraversal ? (
// Query existing elements to resolve traversal.
findElements(result, [remainingSelector], options, totalLimit)
) : (
// If we don't have any more traversals, simply filter elements.
filterElements(result, [remainingSelector], options)
);
}
function findElements(root2, sel, options, limit) {
const query = _compileToken(sel, options, root2);
return find2(root2, query, limit);
}
function find2(root2, query, limit = Infinity) {
const elems = prepareContext(root2, esm_exports2, query.shouldTestNextSiblings);
return find((node) => isTag2(node) && query(node), elems, true, limit);
}
function filterElements(elements, sel, options) {
const els = (Array.isArray(elements) ? elements : [elements]).filter(isTag2);
if (els.length === 0)
return els;
const query = _compileToken(sel, options);
return query === boolbase7.trueFunc ? els : els.filter(query);
}
var import_css_what5, boolbase7, UNIVERSAL_SELECTOR, SCOPE_PSEUDO;
var init_esm8 = __esm({
"node_modules/cheerio-select/lib/esm/index.js"() {
import_css_what5 = __toESM(require_commonjs(), 1);
init_esm7();
init_esm5();
boolbase7 = __toESM(require_boolbase(), 1);
init_helpers2();
init_positionals();
init_esm7();
UNIVERSAL_SELECTOR = {
type: import_css_what5.SelectorType.Universal,
namespace: null
};
SCOPE_PSEUDO = {
type: import_css_what5.SelectorType.Pseudo,
name: "scope",
data: null
};
}
});
// node_modules/cheerio/dist/esm/api/traversing.js
var traversing_exports = {};
__export(traversing_exports, {
_findBySelector: () => _findBySelector,
add: () => add,
addBack: () => addBack,
children: () => children,
closest: () => closest,
contents: () => contents,
each: () => each,
end: () => end,
eq: () => eq,
filter: () => filter4,
filterArray: () => filterArray,
find: () => find3,
first: () => first,
get: () => get,
has: () => has,
index: () => index,
is: () => is3,
last: () => last,
map: () => map,
next: () => next,
nextAll: () => nextAll,
nextUntil: () => nextUntil,
not: () => not,
parent: () => parent,
parents: () => parents,
parentsUntil: () => parentsUntil,
prev: () => prev,
prevAll: () => prevAll,
prevUntil: () => prevUntil,
siblings: () => siblings,
slice: () => slice,
toArray: () => toArray2
});
function find3(selectorOrHaystack) {
if (!selectorOrHaystack) {
return this._make([]);
}
if (typeof selectorOrHaystack !== "string") {
const haystack = isCheerio(selectorOrHaystack) ? selectorOrHaystack.toArray() : [selectorOrHaystack];
const context = this.toArray();
return this._make(haystack.filter((elem) => context.some((node) => contains(node, elem))));
}
return this._findBySelector(selectorOrHaystack, Number.POSITIVE_INFINITY);
}
function _findBySelector(selector, limit) {
var _a2;
const context = this.toArray();
const elems = reSiblingSelector.test(selector) ? context : this.children().toArray();
const options = {
context,
root: (_a2 = this._root) === null || _a2 === void 0 ? void 0 : _a2[0],
// Pass options that are recognized by `cheerio-select`
xmlMode: this.options.xmlMode,
lowerCaseTags: this.options.lowerCaseTags,
lowerCaseAttributeNames: this.options.lowerCaseAttributeNames,
pseudos: this.options.pseudos,
quirksMode: this.options.quirksMode
};
return this._make(select(selector, elems, options, limit));
}
function _getMatcher(matchMap) {
return function(fn, ...postFns) {
return function(selector) {
var _a2;
let matched = matchMap(fn, this);
if (selector) {
matched = filterArray(matched, selector, this.options.xmlMode, (_a2 = this._root) === null || _a2 === void 0 ? void 0 : _a2[0]);
}
return this._make(
// Post processing is only necessary if there is more than one element.
this.length > 1 && matched.length > 1 ? postFns.reduce((elems, fn2) => fn2(elems), matched) : matched
);
};
};
}
function _matchUntil(nextElem, ...postFns) {
let matches = null;
const innerMatcher = _getMatcher((nextElem2, elems) => {
const matched = [];
domEach(elems, (elem) => {
for (let next2; next2 = nextElem2(elem); elem = next2) {
if (matches === null || matches === void 0 ? void 0 : matches(next2, matched.length))
break;
matched.push(next2);
}
});
return matched;
})(nextElem, ...postFns);
return function(selector, filterSelector) {
matches = typeof selector === "string" ? (elem) => is2(elem, selector, this.options) : selector ? getFilterFn(selector) : null;
const ret = innerMatcher.call(this, filterSelector);
matches = null;
return ret;
};
}
function _removeDuplicates(elems) {
return elems.length > 1 ? Array.from(new Set(elems)) : elems;
}
function closest(selector) {
var _a2;
const set = [];
if (!selector) {
return this._make(set);
}
const selectOpts = {
xmlMode: this.options.xmlMode,
root: (_a2 = this._root) === null || _a2 === void 0 ? void 0 : _a2[0]
};
const selectFn = typeof selector === "string" ? (elem) => is2(elem, selector, selectOpts) : getFilterFn(selector);
domEach(this, (elem) => {
if (elem && !isDocument(elem) && !isTag2(elem)) {
elem = elem.parent;
}
while (elem && isTag2(elem)) {
if (selectFn(elem, 0)) {
if (!set.includes(elem)) {
set.push(elem);
}
break;
}
elem = elem.parent;
}
});
return this._make(set);
}
function contents() {
const elems = this.toArray().reduce((newElems, elem) => hasChildren(elem) ? newElems.concat(elem.children) : newElems, []);
return this._make(elems);
}
function each(fn) {
let i = 0;
const len = this.length;
while (i < len && fn.call(this[i], i, this[i]) !== false)
++i;
return this;
}
function map(fn) {
let elems = [];
for (let i = 0; i < this.length; i++) {
const el = this[i];
const val2 = fn.call(el, i, el);
if (val2 != null) {
elems = elems.concat(val2);
}
}
return this._make(elems);
}
function getFilterFn(match) {
if (typeof match === "function") {
return (el, i) => match.call(el, i, el);
}
if (isCheerio(match)) {
return (el) => Array.prototype.includes.call(match, el);
}
return function(el) {
return match === el;
};
}
function filter4(match) {
var _a2;
return this._make(filterArray(this.toArray(), match, this.options.xmlMode, (_a2 = this._root) === null || _a2 === void 0 ? void 0 : _a2[0]));
}
function filterArray(nodes, match, xmlMode, root2) {
return typeof match === "string" ? filter3(match, nodes, { xmlMode, root: root2 }) : nodes.filter(getFilterFn(match));
}
function is3(selector) {
const nodes = this.toArray();
return typeof selector === "string" ? some(nodes.filter(isTag2), selector, this.options) : selector ? nodes.some(getFilterFn(selector)) : false;
}
function not(match) {
let nodes = this.toArray();
if (typeof match === "string") {
const matches = new Set(filter3(match, nodes, this.options));
nodes = nodes.filter((el) => !matches.has(el));
} else {
const filterFn = getFilterFn(match);
nodes = nodes.filter((el, i) => !filterFn(el, i));
}
return this._make(nodes);
}
function has(selectorOrHaystack) {
return this.filter(typeof selectorOrHaystack === "string" ? (
// Using the `:has` selector here short-circuits searches.
`:has(${selectorOrHaystack})`
) : (_, el) => this._make(el).find(selectorOrHaystack).length > 0);
}
function first() {
return this.length > 1 ? this._make(this[0]) : this;
}
function last() {
return this.length > 0 ? this._make(this[this.length - 1]) : this;
}
function eq(i) {
var _a2;
i = +i;
if (i === 0 && this.length <= 1)
return this;
if (i < 0)
i = this.length + i;
return this._make((_a2 = this[i]) !== null && _a2 !== void 0 ? _a2 : []);
}
function get(i) {
if (i == null) {
return this.toArray();
}
return this[i < 0 ? this.length + i : i];
}
function toArray2() {
return Array.prototype.slice.call(this);
}
function index(selectorOrNeedle) {
let $haystack;
let needle;
if (selectorOrNeedle == null) {
$haystack = this.parent().children();
needle = this[0];
} else if (typeof selectorOrNeedle === "string") {
$haystack = this._make(selectorOrNeedle);
needle = this[0];
} else {
$haystack = this;
needle = isCheerio(selectorOrNeedle) ? selectorOrNeedle[0] : selectorOrNeedle;
}
return Array.prototype.indexOf.call($haystack, needle);
}
function slice(start, end2) {
return this._make(Array.prototype.slice.call(this, start, end2));
}
function end() {
var _a2;
return (_a2 = this.prevObject) !== null && _a2 !== void 0 ? _a2 : this._make([]);
}
function add(other, context) {
const selection = this._make(other, context);
const contents2 = uniqueSort([...this.get(), ...selection.get()]);
return this._make(contents2);
}
function addBack(selector) {
return this.prevObject ? this.add(selector ? this.prevObject.filter(selector) : this.prevObject) : this;
}
var reSiblingSelector, _matcher, _singleMatcher, parent, parents, parentsUntil, next, nextAll, nextUntil, prev, prevAll, prevUntil, siblings, children;
var init_traversing = __esm({
"node_modules/cheerio/dist/esm/api/traversing.js"() {
init_esm2();
init_esm8();
init_utils3();
init_static();
init_esm5();
reSiblingSelector = /^\s*[+~]/;
_matcher = _getMatcher((fn, elems) => {
let ret = [];
for (let i = 0; i < elems.length; i++) {
const value = fn(elems[i]);
if (value.length > 0)
ret = ret.concat(value);
}
return ret;
});
_singleMatcher = _getMatcher((fn, elems) => {
const ret = [];
for (let i = 0; i < elems.length; i++) {
const value = fn(elems[i]);
if (value !== null) {
ret.push(value);
}
}
return ret;
});
parent = _singleMatcher(({ parent: parent2 }) => parent2 && !isDocument(parent2) ? parent2 : null, _removeDuplicates);
parents = _matcher((elem) => {
const matched = [];
while (elem.parent && !isDocument(elem.parent)) {
matched.push(elem.parent);
elem = elem.parent;
}
return matched;
}, uniqueSort, (elems) => elems.reverse());
parentsUntil = _matchUntil(({ parent: parent2 }) => parent2 && !isDocument(parent2) ? parent2 : null, uniqueSort, (elems) => elems.reverse());
next = _singleMatcher((elem) => nextElementSibling(elem));
nextAll = _matcher((elem) => {
const matched = [];
while (elem.next) {
elem = elem.next;
if (isTag2(elem))
matched.push(elem);
}
return matched;
}, _removeDuplicates);
nextUntil = _matchUntil((el) => nextElementSibling(el), _removeDuplicates);
prev = _singleMatcher((elem) => prevElementSibling(elem));
prevAll = _matcher((elem) => {
const matched = [];
while (elem.prev) {
elem = elem.prev;
if (isTag2(elem))
matched.push(elem);
}
return matched;
}, _removeDuplicates);
prevUntil = _matchUntil((el) => prevElementSibling(el), _removeDuplicates);
siblings = _matcher((elem) => getSiblings(elem).filter((el) => isTag2(el) && el !== elem), uniqueSort);
children = _matcher((elem) => getChildren(elem).filter(isTag2), _removeDuplicates);
}
});
// node_modules/cheerio/dist/esm/parse.js
function getParse(parser) {
return function parse8(content, options, isDocument2, context) {
if (typeof Buffer !== "undefined" && Buffer.isBuffer(content)) {
content = content.toString();
}
if (typeof content === "string") {
return parser(content, options, isDocument2, context);
}
const doc = content;
if (!Array.isArray(doc) && isDocument(doc)) {
return doc;
}
const root2 = new Document([]);
update(doc, root2);
return root2;
};
}
function update(newChilds, parent2) {
const arr = Array.isArray(newChilds) ? newChilds : [newChilds];
if (parent2) {
parent2.children = arr;
} else {
parent2 = null;
}
for (let i = 0; i < arr.length; i++) {
const node = arr[i];
if (node.parent && node.parent.children !== arr) {
removeElement(node);
}
if (parent2) {
node.prev = arr[i - 1] || null;
node.next = arr[i + 1] || null;
} else {
node.prev = node.next = null;
}
node.parent = parent2;
}
return parent2;
}
var init_parse2 = __esm({
"node_modules/cheerio/dist/esm/parse.js"() {
init_esm5();
init_esm2();
}
});
// node_modules/cheerio/dist/esm/api/manipulation.js
var manipulation_exports = {};
__export(manipulation_exports, {
_makeDomArray: () => _makeDomArray,
after: () => after,
append: () => append3,
appendTo: () => appendTo,
before: () => before,
clone: () => clone,
empty: () => empty,
html: () => html2,
insertAfter: () => insertAfter,
insertBefore: () => insertBefore,
prepend: () => prepend2,
prependTo: () => prependTo,
remove: () => remove,
replaceWith: () => replaceWith,
text: () => text2,
toString: () => toString3,
unwrap: () => unwrap,
wrap: () => wrap,
wrapAll: () => wrapAll,
wrapInner: () => wrapInner
});
function _makeDomArray(elem, clone2) {
if (elem == null) {
return [];
}
if (typeof elem === "string") {
return this._parse(elem, this.options, false, null).children.slice(0);
}
if ("length" in elem) {
if (elem.length === 1) {
return this._makeDomArray(elem[0], clone2);
}
const result = [];
for (let i = 0; i < elem.length; i++) {
const el = elem[i];
if (typeof el === "object") {
if (el == null) {
continue;
}
if (!("length" in el)) {
result.push(clone2 ? cloneNode(el, true) : el);
continue;
}
}
result.push(...this._makeDomArray(el, clone2));
}
return result;
}
return [clone2 ? cloneNode(elem, true) : elem];
}
function _insert(concatenator) {
return function(...elems) {
const lastIdx = this.length - 1;
return domEach(this, (el, i) => {
if (!hasChildren(el))
return;
const domSrc = typeof elems[0] === "function" ? elems[0].call(el, i, this._render(el.children)) : elems;
const dom = this._makeDomArray(domSrc, i < lastIdx);
concatenator(dom, el.children, el);
});
};
}
function uniqueSplice(array, spliceIdx, spliceCount, newElems, parent2) {
var _a2, _b;
const spliceArgs = [
spliceIdx,
spliceCount,
...newElems
];
const prev2 = spliceIdx === 0 ? null : array[spliceIdx - 1];
const next2 = spliceIdx + spliceCount >= array.length ? null : array[spliceIdx + spliceCount];
for (let idx = 0; idx < newElems.length; ++idx) {
const node = newElems[idx];
const oldParent = node.parent;
if (oldParent) {
const oldSiblings = oldParent.children;
const prevIdx = oldSiblings.indexOf(node);
if (prevIdx > -1) {
oldParent.children.splice(prevIdx, 1);
if (parent2 === oldParent && spliceIdx > prevIdx) {
spliceArgs[0]--;
}
}
}
node.parent = parent2;
if (node.prev) {
node.prev.next = (_a2 = node.next) !== null && _a2 !== void 0 ? _a2 : null;
}
if (node.next) {
node.next.prev = (_b = node.prev) !== null && _b !== void 0 ? _b : null;
}
node.prev = idx === 0 ? prev2 : newElems[idx - 1];
node.next = idx === newElems.length - 1 ? next2 : newElems[idx + 1];
}
if (prev2) {
prev2.next = newElems[0];
}
if (next2) {
next2.prev = newElems[newElems.length - 1];
}
return array.splice(...spliceArgs);
}
function appendTo(target) {
const appendTarget = isCheerio(target) ? target : this._make(target);
appendTarget.append(this);
return this;
}
function prependTo(target) {
const prependTarget = isCheerio(target) ? target : this._make(target);
prependTarget.prepend(this);
return this;
}
function _wrap(insert) {
return function(wrapper) {
const lastIdx = this.length - 1;
const lastParent = this.parents().last();
for (let i = 0; i < this.length; i++) {
const el = this[i];
const wrap2 = typeof wrapper === "function" ? wrapper.call(el, i, el) : typeof wrapper === "string" && !isHtml(wrapper) ? lastParent.find(wrapper).clone() : wrapper;
const [wrapperDom] = this._makeDomArray(wrap2, i < lastIdx);
if (!wrapperDom || !hasChildren(wrapperDom))
continue;
let elInsertLocation = wrapperDom;
let j = 0;
while (j < elInsertLocation.children.length) {
const child = elInsertLocation.children[j];
if (isTag2(child)) {
elInsertLocation = child;
j = 0;
} else {
j++;
}
}
insert(el, elInsertLocation, [wrapperDom]);
}
return this;
};
}
function unwrap(selector) {
this.parent(selector).not("body").each((_, el) => {
this._make(el).replaceWith(el.children);
});
return this;
}
function wrapAll(wrapper) {
const el = this[0];
if (el) {
const wrap2 = this._make(typeof wrapper === "function" ? wrapper.call(el, 0, el) : wrapper).insertBefore(el);
let elInsertLocation;
for (let i = 0; i < wrap2.length; i++) {
if (wrap2[i].type === "tag")
elInsertLocation = wrap2[i];
}
let j = 0;
while (elInsertLocation && j < elInsertLocation.children.length) {
const child = elInsertLocation.children[j];
if (child.type === "tag") {
elInsertLocation = child;
j = 0;
} else {
j++;
}
}
if (elInsertLocation)
this._make(elInsertLocation).append(this);
}
return this;
}
function after(...elems) {
const lastIdx = this.length - 1;
return domEach(this, (el, i) => {
if (!hasChildren(el) || !el.parent) {
return;
}
const siblings2 = el.parent.children;
const index2 = siblings2.indexOf(el);
if (index2 < 0)
return;
const domSrc = typeof elems[0] === "function" ? elems[0].call(el, i, this._render(el.children)) : elems;
const dom = this._makeDomArray(domSrc, i < lastIdx);
uniqueSplice(siblings2, index2 + 1, 0, dom, el.parent);
});
}
function insertAfter(target) {
if (typeof target === "string") {
target = this._make(target);
}
this.remove();
const clones = [];
for (const el of this._makeDomArray(target)) {
const clonedSelf = this.clone().toArray();
const { parent: parent2 } = el;
if (!parent2) {
continue;
}
const siblings2 = parent2.children;
const index2 = siblings2.indexOf(el);
if (index2 < 0)
continue;
uniqueSplice(siblings2, index2 + 1, 0, clonedSelf, parent2);
clones.push(...clonedSelf);
}
return this._make(clones);
}
function before(...elems) {
const lastIdx = this.length - 1;
return domEach(this, (el, i) => {
if (!hasChildren(el) || !el.parent) {
return;
}
const siblings2 = el.parent.children;
const index2 = siblings2.indexOf(el);
if (index2 < 0)
return;
const domSrc = typeof elems[0] === "function" ? elems[0].call(el, i, this._render(el.children)) : elems;
const dom = this._makeDomArray(domSrc, i < lastIdx);
uniqueSplice(siblings2, index2, 0, dom, el.parent);
});
}
function insertBefore(target) {
const targetArr = this._make(target);
this.remove();
const clones = [];
domEach(targetArr, (el) => {
const clonedSelf = this.clone().toArray();
const { parent: parent2 } = el;
if (!parent2) {
return;
}
const siblings2 = parent2.children;
const index2 = siblings2.indexOf(el);
if (index2 < 0)
return;
uniqueSplice(siblings2, index2, 0, clonedSelf, parent2);
clones.push(...clonedSelf);
});
return this._make(clones);
}
function remove(selector) {
const elems = selector ? this.filter(selector) : this;
domEach(elems, (el) => {
removeElement(el);
el.prev = el.next = el.parent = null;
});
return this;
}
function replaceWith(content) {
return domEach(this, (el, i) => {
const { parent: parent2 } = el;
if (!parent2) {
return;
}
const siblings2 = parent2.children;
const cont = typeof content === "function" ? content.call(el, i, el) : content;
const dom = this._makeDomArray(cont);
update(dom, null);
const index2 = siblings2.indexOf(el);
uniqueSplice(siblings2, index2, 1, dom, parent2);
if (!dom.includes(el)) {
el.parent = el.prev = el.next = null;
}
});
}
function empty() {
return domEach(this, (el) => {
if (!hasChildren(el))
return;
for (const child of el.children) {
child.next = child.prev = child.parent = null;
}
el.children.length = 0;
});
}
function html2(str) {
if (str === void 0) {
const el = this[0];
if (!el || !hasChildren(el))
return null;
return this._render(el.children);
}
return domEach(this, (el) => {
if (!hasChildren(el))
return;
for (const child of el.children) {
child.next = child.prev = child.parent = null;
}
const content = isCheerio(str) ? str.toArray() : this._parse(`${str}`, this.options, false, el).children;
update(content, el);
});
}
function toString3() {
return this._render(this);
}
function text2(str) {
if (str === void 0) {
return text(this);
}
if (typeof str === "function") {
return domEach(this, (el, i) => this._make(el).text(str.call(el, i, text([el]))));
}
return domEach(this, (el) => {
if (!hasChildren(el))
return;
for (const child of el.children) {
child.next = child.prev = child.parent = null;
}
const textNode = new Text2(`${str}`);
update(textNode, el);
});
}
function clone() {
const clone2 = Array.prototype.map.call(this.get(), (el) => cloneNode(el, true));
const root2 = new Document(clone2);
for (const node of clone2) {
node.parent = root2;
}
return this._make(clone2);
}
var append3, prepend2, wrap, wrapInner;
var init_manipulation2 = __esm({
"node_modules/cheerio/dist/esm/api/manipulation.js"() {
init_esm2();
init_parse2();
init_static();
init_utils3();
init_esm5();
append3 = _insert((dom, children2, parent2) => {
uniqueSplice(children2, children2.length, 0, dom, parent2);
});
prepend2 = _insert((dom, children2, parent2) => {
uniqueSplice(children2, 0, 0, dom, parent2);
});
wrap = _wrap((el, elInsertLocation, wrapperDom) => {
const { parent: parent2 } = el;
if (!parent2)
return;
const siblings2 = parent2.children;
const index2 = siblings2.indexOf(el);
update([el], elInsertLocation);
uniqueSplice(siblings2, index2, 0, wrapperDom, parent2);
});
wrapInner = _wrap((el, elInsertLocation, wrapperDom) => {
if (!hasChildren(el))
return;
update(el.children, elInsertLocation);
update(wrapperDom, el);
});
}
});
// node_modules/cheerio/dist/esm/api/css.js
var css_exports = {};
__export(css_exports, {
css: () => css
});
function css(prop2, val2) {
if (prop2 != null && val2 != null || // When `prop` is a "plain" object
typeof prop2 === "object" && !Array.isArray(prop2)) {
return domEach(this, (el, i) => {
if (isTag2(el)) {
setCss(el, prop2, val2, i);
}
});
}
if (this.length === 0) {
return void 0;
}
return getCss(this[0], prop2);
}
function setCss(el, prop2, value, idx) {
if (typeof prop2 === "string") {
const styles = getCss(el);
const val2 = typeof value === "function" ? value.call(el, idx, styles[prop2]) : value;
if (val2 === "") {
delete styles[prop2];
} else if (val2 != null) {
styles[prop2] = val2;
}
el.attribs["style"] = stringify(styles);
} else if (typeof prop2 === "object") {
const keys = Object.keys(prop2);
for (let i = 0; i < keys.length; i++) {
const k = keys[i];
setCss(el, k, prop2[k], i);
}
}
}
function getCss(el, prop2) {
if (!el || !isTag2(el))
return;
const styles = parse5(el.attribs["style"]);
if (typeof prop2 === "string") {
return styles[prop2];
}
if (Array.isArray(prop2)) {
const newStyles = {};
for (const item of prop2) {
if (styles[item] != null) {
newStyles[item] = styles[item];
}
}
return newStyles;
}
return styles;
}
function stringify(obj) {
return Object.keys(obj).reduce((str, prop2) => `${str}${str ? " " : ""}${prop2}: ${obj[prop2]};`, "");
}
function parse5(styles) {
styles = (styles || "").trim();
if (!styles)
return {};
const obj = {};
let key;
for (const str of styles.split(";")) {
const n = str.indexOf(":");
if (n < 1 || n === str.length - 1) {
const trimmed = str.trimEnd();
if (trimmed.length > 0 && key !== void 0) {
obj[key] += `;${trimmed}`;
}
} else {
key = str.slice(0, n).trim();
obj[key] = str.slice(n + 1).trim();
}
}
return obj;
}
var init_css = __esm({
"node_modules/cheerio/dist/esm/api/css.js"() {
init_utils3();
init_esm2();
}
});
// node_modules/cheerio/dist/esm/api/forms.js
var forms_exports = {};
__export(forms_exports, {
serialize: () => serialize,
serializeArray: () => serializeArray
});
function serialize() {
const arr = this.serializeArray();
const retArr = arr.map((data2) => `${encodeURIComponent(data2.name)}=${encodeURIComponent(data2.value)}`);
return retArr.join("&").replace(r20, "+");
}
function serializeArray() {
return this.map((_, elem) => {
const $elem = this._make(elem);
if (isTag2(elem) && elem.name === "form") {
return $elem.find(submittableSelector).toArray();
}
return $elem.filter(submittableSelector).toArray();
}).filter(
// Verify elements have a name (`attr.name`) and are not disabled (`:enabled`)
'[name!=""]:enabled:not(:submit, :button, :image, :reset, :file):matches([checked], :not(:checkbox, :radio))'
).map((_, elem) => {
var _a2;
const $elem = this._make(elem);
const name = $elem.attr("name");
const value = (_a2 = $elem.val()) !== null && _a2 !== void 0 ? _a2 : "";
if (Array.isArray(value)) {
return value.map((val2) => (
/*
* We trim replace any line endings (e.g. `\r` or `\r\n` with `\r\n`) to guarantee consistency across platforms
* These can occur inside of `<textarea>'s`
*/
{ name, value: val2.replace(rCRLF, "\r\n") }
));
}
return { name, value: value.replace(rCRLF, "\r\n") };
}).toArray();
}
var submittableSelector, r20, rCRLF;
var init_forms = __esm({
"node_modules/cheerio/dist/esm/api/forms.js"() {
init_esm2();
submittableSelector = "input,select,textarea,keygen";
r20 = /%20/g;
rCRLF = /\r?\n/g;
}
});
// node_modules/cheerio/dist/esm/api/extract.js
var extract_exports = {};
__export(extract_exports, {
extract: () => extract2
});
function getExtractDescr(descr) {
var _a2;
if (typeof descr === "string") {
return { selector: descr, value: "textContent" };
}
return {
selector: descr.selector,
value: (_a2 = descr.value) !== null && _a2 !== void 0 ? _a2 : "textContent"
};
}
function extract2(map2) {
const ret = {};
for (const key in map2) {
const descr = map2[key];
const isArray2 = Array.isArray(descr);
const { selector, value } = getExtractDescr(isArray2 ? descr[0] : descr);
const fn = typeof value === "function" ? value : typeof value === "string" ? (el) => this._make(el).prop(value) : (el) => this._make(el).extract(value);
if (isArray2) {
ret[key] = this._findBySelector(selector, Number.POSITIVE_INFINITY).map((_, el) => fn(el, key, ret)).get();
} else {
const $2 = this._findBySelector(selector, 1);
ret[key] = $2.length > 0 ? fn($2[0], key, ret) : void 0;
}
}
return ret;
}
var init_extract = __esm({
"node_modules/cheerio/dist/esm/api/extract.js"() {
}
});
// node_modules/cheerio/dist/esm/cheerio.js
var Cheerio;
var init_cheerio = __esm({
"node_modules/cheerio/dist/esm/cheerio.js"() {
init_attributes();
init_traversing();
init_manipulation2();
init_css();
init_forms();
init_extract();
Cheerio = class {
/**
* Instance of cheerio. Methods are specified in the modules. Usage of this
* constructor is not recommended. Please use `$.load` instead.
*
* @private
* @param elements - The new selection.
* @param root - Sets the root node.
* @param options - Options for the instance.
*/
constructor(elements, root2, options) {
this.length = 0;
this.options = options;
this._root = root2;
if (elements) {
for (let idx = 0; idx < elements.length; idx++) {
this[idx] = elements[idx];
}
this.length = elements.length;
}
}
};
Cheerio.prototype.cheerio = "[cheerio object]";
Cheerio.prototype.splice = Array.prototype.splice;
Cheerio.prototype[Symbol.iterator] = Array.prototype[Symbol.iterator];
Object.assign(Cheerio.prototype, attributes_exports, traversing_exports, manipulation_exports, css_exports, forms_exports, extract_exports);
}
});
// node_modules/cheerio/dist/esm/load.js
function getLoad(parse8, render3) {
return function load2(content, options, isDocument2 = true) {
if (content == null) {
throw new Error("cheerio.load() expects a string");
}
const internalOpts = flattenOptions(options);
const initialRoot = parse8(content, internalOpts, isDocument2, null);
class LoadedCheerio extends Cheerio {
_make(selector, context) {
const cheerio = initialize(selector, context);
cheerio.prevObject = this;
return cheerio;
}
_parse(content2, options2, isDocument3, context) {
return parse8(content2, options2, isDocument3, context);
}
_render(dom) {
return render3(dom, this.options);
}
}
function initialize(selector, context, root2 = initialRoot, opts) {
if (selector && isCheerio(selector))
return selector;
const options2 = flattenOptions(opts, internalOpts);
const r = typeof root2 === "string" ? [parse8(root2, options2, false, null)] : "length" in root2 ? root2 : [root2];
const rootInstance = isCheerio(r) ? r : new LoadedCheerio(r, null, options2);
rootInstance._root = rootInstance;
if (!selector) {
return new LoadedCheerio(void 0, rootInstance, options2);
}
const elements = typeof selector === "string" && isHtml(selector) ? (
// $(<html>)
parse8(selector, options2, false, null).children
) : isNode(selector) ? (
// $(dom)
[selector]
) : Array.isArray(selector) ? (
// $([dom])
selector
) : void 0;
const instance = new LoadedCheerio(elements, rootInstance, options2);
if (elements) {
return instance;
}
if (typeof selector !== "string") {
throw new TypeError("Unexpected type of selector");
}
let search = selector;
const searchContext = context ? (
// If we don't have a context, maybe we have a root, from loading
typeof context === "string" ? isHtml(context) ? (
// $('li', '<ul>...</ul>')
new LoadedCheerio([parse8(context, options2, false, null)], rootInstance, options2)
) : (
// $('li', 'ul')
(search = `${context} ${search}`, rootInstance)
) : isCheerio(context) ? (
// $('li', $)
context
) : (
// $('li', node), $('li', [nodes])
new LoadedCheerio(Array.isArray(context) ? context : [context], rootInstance, options2)
)
) : rootInstance;
if (!searchContext)
return instance;
return searchContext.find(search);
}
Object.assign(initialize, static_exports, {
load: load2,
// `_root` and `_options` are used in static methods.
_root: initialRoot,
_options: internalOpts,
// Add `fn` for plugins
fn: LoadedCheerio.prototype,
// Add the prototype here to maintain `instanceof` behavior.
prototype: LoadedCheerio.prototype
});
return initialize;
};
}
function isNode(obj) {
return !!obj.name || obj.type === "root" || obj.type === "text" || obj.type === "comment";
}
var init_load = __esm({
"node_modules/cheerio/dist/esm/load.js"() {
init_options();
init_static();
init_cheerio();
init_utils3();
}
});
// node_modules/parse5/dist/common/unicode.js
function isSurrogate(cp) {
return cp >= 55296 && cp <= 57343;
}
function isSurrogatePair(cp) {
return cp >= 56320 && cp <= 57343;
}
function getSurrogatePairCodePoint(cp1, cp2) {
return (cp1 - 55296) * 1024 + 9216 + cp2;
}
function isControlCodePoint(cp) {
return cp !== 32 && cp !== 10 && cp !== 13 && cp !== 9 && cp !== 12 && cp >= 1 && cp <= 31 || cp >= 127 && cp <= 159;
}
function isUndefinedCodePoint(cp) {
return cp >= 64976 && cp <= 65007 || UNDEFINED_CODE_POINTS.has(cp);
}
var UNDEFINED_CODE_POINTS, REPLACEMENT_CHARACTER, CODE_POINTS, SEQUENCES;
var init_unicode = __esm({
"node_modules/parse5/dist/common/unicode.js"() {
UNDEFINED_CODE_POINTS = /* @__PURE__ */ new Set([
65534,
65535,
131070,
131071,
196606,
196607,
262142,
262143,
327678,
327679,
393214,
393215,
458750,
458751,
524286,
524287,
589822,
589823,
655358,
655359,
720894,
720895,
786430,
786431,
851966,
851967,
917502,
917503,
983038,
983039,
1048574,
1048575,
1114110,
1114111
]);
REPLACEMENT_CHARACTER = "\uFFFD";
(function(CODE_POINTS2) {
CODE_POINTS2[CODE_POINTS2["EOF"] = -1] = "EOF";
CODE_POINTS2[CODE_POINTS2["NULL"] = 0] = "NULL";
CODE_POINTS2[CODE_POINTS2["TABULATION"] = 9] = "TABULATION";
CODE_POINTS2[CODE_POINTS2["CARRIAGE_RETURN"] = 13] = "CARRIAGE_RETURN";
CODE_POINTS2[CODE_POINTS2["LINE_FEED"] = 10] = "LINE_FEED";
CODE_POINTS2[CODE_POINTS2["FORM_FEED"] = 12] = "FORM_FEED";
CODE_POINTS2[CODE_POINTS2["SPACE"] = 32] = "SPACE";
CODE_POINTS2[CODE_POINTS2["EXCLAMATION_MARK"] = 33] = "EXCLAMATION_MARK";
CODE_POINTS2[CODE_POINTS2["QUOTATION_MARK"] = 34] = "QUOTATION_MARK";
CODE_POINTS2[CODE_POINTS2["AMPERSAND"] = 38] = "AMPERSAND";
CODE_POINTS2[CODE_POINTS2["APOSTROPHE"] = 39] = "APOSTROPHE";
CODE_POINTS2[CODE_POINTS2["HYPHEN_MINUS"] = 45] = "HYPHEN_MINUS";
CODE_POINTS2[CODE_POINTS2["SOLIDUS"] = 47] = "SOLIDUS";
CODE_POINTS2[CODE_POINTS2["DIGIT_0"] = 48] = "DIGIT_0";
CODE_POINTS2[CODE_POINTS2["DIGIT_9"] = 57] = "DIGIT_9";
CODE_POINTS2[CODE_POINTS2["SEMICOLON"] = 59] = "SEMICOLON";
CODE_POINTS2[CODE_POINTS2["LESS_THAN_SIGN"] = 60] = "LESS_THAN_SIGN";
CODE_POINTS2[CODE_POINTS2["EQUALS_SIGN"] = 61] = "EQUALS_SIGN";
CODE_POINTS2[CODE_POINTS2["GREATER_THAN_SIGN"] = 62] = "GREATER_THAN_SIGN";
CODE_POINTS2[CODE_POINTS2["QUESTION_MARK"] = 63] = "QUESTION_MARK";
CODE_POINTS2[CODE_POINTS2["LATIN_CAPITAL_A"] = 65] = "LATIN_CAPITAL_A";
CODE_POINTS2[CODE_POINTS2["LATIN_CAPITAL_Z"] = 90] = "LATIN_CAPITAL_Z";
CODE_POINTS2[CODE_POINTS2["RIGHT_SQUARE_BRACKET"] = 93] = "RIGHT_SQUARE_BRACKET";
CODE_POINTS2[CODE_POINTS2["GRAVE_ACCENT"] = 96] = "GRAVE_ACCENT";
CODE_POINTS2[CODE_POINTS2["LATIN_SMALL_A"] = 97] = "LATIN_SMALL_A";
CODE_POINTS2[CODE_POINTS2["LATIN_SMALL_Z"] = 122] = "LATIN_SMALL_Z";
})(CODE_POINTS || (CODE_POINTS = {}));
SEQUENCES = {
DASH_DASH: "--",
CDATA_START: "[CDATA[",
DOCTYPE: "doctype",
SCRIPT: "script",
PUBLIC: "public",
SYSTEM: "system"
};
}
});
// node_modules/parse5/dist/common/error-codes.js
var ERR;
var init_error_codes = __esm({
"node_modules/parse5/dist/common/error-codes.js"() {
(function(ERR2) {
ERR2["controlCharacterInInputStream"] = "control-character-in-input-stream";
ERR2["noncharacterInInputStream"] = "noncharacter-in-input-stream";
ERR2["surrogateInInputStream"] = "surrogate-in-input-stream";
ERR2["nonVoidHtmlElementStartTagWithTrailingSolidus"] = "non-void-html-element-start-tag-with-trailing-solidus";
ERR2["endTagWithAttributes"] = "end-tag-with-attributes";
ERR2["endTagWithTrailingSolidus"] = "end-tag-with-trailing-solidus";
ERR2["unexpectedSolidusInTag"] = "unexpected-solidus-in-tag";
ERR2["unexpectedNullCharacter"] = "unexpected-null-character";
ERR2["unexpectedQuestionMarkInsteadOfTagName"] = "unexpected-question-mark-instead-of-tag-name";
ERR2["invalidFirstCharacterOfTagName"] = "invalid-first-character-of-tag-name";
ERR2["unexpectedEqualsSignBeforeAttributeName"] = "unexpected-equals-sign-before-attribute-name";
ERR2["missingEndTagName"] = "missing-end-tag-name";
ERR2["unexpectedCharacterInAttributeName"] = "unexpected-character-in-attribute-name";
ERR2["unknownNamedCharacterReference"] = "unknown-named-character-reference";
ERR2["missingSemicolonAfterCharacterReference"] = "missing-semicolon-after-character-reference";
ERR2["unexpectedCharacterAfterDoctypeSystemIdentifier"] = "unexpected-character-after-doctype-system-identifier";
ERR2["unexpectedCharacterInUnquotedAttributeValue"] = "unexpected-character-in-unquoted-attribute-value";
ERR2["eofBeforeTagName"] = "eof-before-tag-name";
ERR2["eofInTag"] = "eof-in-tag";
ERR2["missingAttributeValue"] = "missing-attribute-value";
ERR2["missingWhitespaceBetweenAttributes"] = "missing-whitespace-between-attributes";
ERR2["missingWhitespaceAfterDoctypePublicKeyword"] = "missing-whitespace-after-doctype-public-keyword";
ERR2["missingWhitespaceBetweenDoctypePublicAndSystemIdentifiers"] = "missing-whitespace-between-doctype-public-and-system-identifiers";
ERR2["missingWhitespaceAfterDoctypeSystemKeyword"] = "missing-whitespace-after-doctype-system-keyword";
ERR2["missingQuoteBeforeDoctypePublicIdentifier"] = "missing-quote-before-doctype-public-identifier";
ERR2["missingQuoteBeforeDoctypeSystemIdentifier"] = "missing-quote-before-doctype-system-identifier";
ERR2["missingDoctypePublicIdentifier"] = "missing-doctype-public-identifier";
ERR2["missingDoctypeSystemIdentifier"] = "missing-doctype-system-identifier";
ERR2["abruptDoctypePublicIdentifier"] = "abrupt-doctype-public-identifier";
ERR2["abruptDoctypeSystemIdentifier"] = "abrupt-doctype-system-identifier";
ERR2["cdataInHtmlContent"] = "cdata-in-html-content";
ERR2["incorrectlyOpenedComment"] = "incorrectly-opened-comment";
ERR2["eofInScriptHtmlCommentLikeText"] = "eof-in-script-html-comment-like-text";
ERR2["eofInDoctype"] = "eof-in-doctype";
ERR2["nestedComment"] = "nested-comment";
ERR2["abruptClosingOfEmptyComment"] = "abrupt-closing-of-empty-comment";
ERR2["eofInComment"] = "eof-in-comment";
ERR2["incorrectlyClosedComment"] = "incorrectly-closed-comment";
ERR2["eofInCdata"] = "eof-in-cdata";
ERR2["absenceOfDigitsInNumericCharacterReference"] = "absence-of-digits-in-numeric-character-reference";
ERR2["nullCharacterReference"] = "null-character-reference";
ERR2["surrogateCharacterReference"] = "surrogate-character-reference";
ERR2["characterReferenceOutsideUnicodeRange"] = "character-reference-outside-unicode-range";
ERR2["controlCharacterReference"] = "control-character-reference";
ERR2["noncharacterCharacterReference"] = "noncharacter-character-reference";
ERR2["missingWhitespaceBeforeDoctypeName"] = "missing-whitespace-before-doctype-name";
ERR2["missingDoctypeName"] = "missing-doctype-name";
ERR2["invalidCharacterSequenceAfterDoctypeName"] = "invalid-character-sequence-after-doctype-name";
ERR2["duplicateAttribute"] = "duplicate-attribute";
ERR2["nonConformingDoctype"] = "non-conforming-doctype";
ERR2["missingDoctype"] = "missing-doctype";
ERR2["misplacedDoctype"] = "misplaced-doctype";
ERR2["endTagWithoutMatchingOpenElement"] = "end-tag-without-matching-open-element";
ERR2["closingOfElementWithOpenChildElements"] = "closing-of-element-with-open-child-elements";
ERR2["disallowedContentInNoscriptInHead"] = "disallowed-content-in-noscript-in-head";
ERR2["openElementsLeftAfterEof"] = "open-elements-left-after-eof";
ERR2["abandonedHeadElementChild"] = "abandoned-head-element-child";
ERR2["misplacedStartTagForHeadElement"] = "misplaced-start-tag-for-head-element";
ERR2["nestedNoscriptInHead"] = "nested-noscript-in-head";
ERR2["eofInElementThatCanContainOnlyText"] = "eof-in-element-that-can-contain-only-text";
})(ERR || (ERR = {}));
}
});
// node_modules/parse5/dist/tokenizer/preprocessor.js
var DEFAULT_BUFFER_WATERLINE, Preprocessor;
var init_preprocessor = __esm({
"node_modules/parse5/dist/tokenizer/preprocessor.js"() {
init_unicode();
init_error_codes();
DEFAULT_BUFFER_WATERLINE = 1 << 16;
Preprocessor = class {
constructor(handler) {
this.handler = handler;
this.html = "";
this.pos = -1;
this.lastGapPos = -2;
this.gapStack = [];
this.skipNextNewLine = false;
this.lastChunkWritten = false;
this.endOfChunkHit = false;
this.bufferWaterline = DEFAULT_BUFFER_WATERLINE;
this.isEol = false;
this.lineStartPos = 0;
this.droppedBufferSize = 0;
this.line = 1;
this.lastErrOffset = -1;
}
/** The column on the current line. If we just saw a gap (eg. a surrogate pair), return the index before. */
get col() {
return this.pos - this.lineStartPos + Number(this.lastGapPos !== this.pos);
}
get offset() {
return this.droppedBufferSize + this.pos;
}
getError(code, cpOffset) {
const { line, col, offset } = this;
const startCol = col + cpOffset;
const startOffset = offset + cpOffset;
return {
code,
startLine: line,
endLine: line,
startCol,
endCol: startCol,
startOffset,
endOffset: startOffset
};
}
_err(code) {
if (this.handler.onParseError && this.lastErrOffset !== this.offset) {
this.lastErrOffset = this.offset;
this.handler.onParseError(this.getError(code, 0));
}
}
_addGap() {
this.gapStack.push(this.lastGapPos);
this.lastGapPos = this.pos;
}
_processSurrogate(cp) {
if (this.pos !== this.html.length - 1) {
const nextCp = this.html.charCodeAt(this.pos + 1);
if (isSurrogatePair(nextCp)) {
this.pos++;
this._addGap();
return getSurrogatePairCodePoint(cp, nextCp);
}
} else if (!this.lastChunkWritten) {
this.endOfChunkHit = true;
return CODE_POINTS.EOF;
}
this._err(ERR.surrogateInInputStream);
return cp;
}
willDropParsedChunk() {
return this.pos > this.bufferWaterline;
}
dropParsedChunk() {
if (this.willDropParsedChunk()) {
this.html = this.html.substring(this.pos);
this.lineStartPos -= this.pos;
this.droppedBufferSize += this.pos;
this.pos = 0;
this.lastGapPos = -2;
this.gapStack.length = 0;
}
}
write(chunk, isLastChunk) {
if (this.html.length > 0) {
this.html += chunk;
} else {
this.html = chunk;
}
this.endOfChunkHit = false;
this.lastChunkWritten = isLastChunk;
}
insertHtmlAtCurrentPos(chunk) {
this.html = this.html.substring(0, this.pos + 1) + chunk + this.html.substring(this.pos + 1);
this.endOfChunkHit = false;
}
startsWith(pattern, caseSensitive) {
if (this.pos + pattern.length > this.html.length) {
this.endOfChunkHit = !this.lastChunkWritten;
return false;
}
if (caseSensitive) {
return this.html.startsWith(pattern, this.pos);
}
for (let i = 0; i < pattern.length; i++) {
const cp = this.html.charCodeAt(this.pos + i) | 32;
if (cp !== pattern.charCodeAt(i)) {
return false;
}
}
return true;
}
peek(offset) {
const pos = this.pos + offset;
if (pos >= this.html.length) {
this.endOfChunkHit = !this.lastChunkWritten;
return CODE_POINTS.EOF;
}
const code = this.html.charCodeAt(pos);
return code === CODE_POINTS.CARRIAGE_RETURN ? CODE_POINTS.LINE_FEED : code;
}
advance() {
this.pos++;
if (this.isEol) {
this.isEol = false;
this.line++;
this.lineStartPos = this.pos;
}
if (this.pos >= this.html.length) {
this.endOfChunkHit = !this.lastChunkWritten;
return CODE_POINTS.EOF;
}
let cp = this.html.charCodeAt(this.pos);
if (cp === CODE_POINTS.CARRIAGE_RETURN) {
this.isEol = true;
this.skipNextNewLine = true;
return CODE_POINTS.LINE_FEED;
}
if (cp === CODE_POINTS.LINE_FEED) {
this.isEol = true;
if (this.skipNextNewLine) {
this.line--;
this.skipNextNewLine = false;
this._addGap();
return this.advance();
}
}
this.skipNextNewLine = false;
if (isSurrogate(cp)) {
cp = this._processSurrogate(cp);
}
const isCommonValidRange = this.handler.onParseError === null || cp > 31 && cp < 127 || cp === CODE_POINTS.LINE_FEED || cp === CODE_POINTS.CARRIAGE_RETURN || cp > 159 && cp < 64976;
if (!isCommonValidRange) {
this._checkForProblematicCharacters(cp);
}
return cp;
}
_checkForProblematicCharacters(cp) {
if (isControlCodePoint(cp)) {
this._err(ERR.controlCharacterInInputStream);
} else if (isUndefinedCodePoint(cp)) {
this._err(ERR.noncharacterInInputStream);
}
}
retreat(count) {
this.pos -= count;
while (this.pos < this.lastGapPos) {
this.lastGapPos = this.gapStack.pop();
this.pos--;
}
this.isEol = false;
}
};
}
});
// node_modules/parse5/dist/common/token.js
function getTokenAttr(token, attrName) {
for (let i = token.attrs.length - 1; i >= 0; i--) {
if (token.attrs[i].name === attrName) {
return token.attrs[i].value;
}
}
return null;
}
var TokenType;
var init_token = __esm({
"node_modules/parse5/dist/common/token.js"() {
(function(TokenType2) {
TokenType2[TokenType2["CHARACTER"] = 0] = "CHARACTER";
TokenType2[TokenType2["NULL_CHARACTER"] = 1] = "NULL_CHARACTER";
TokenType2[TokenType2["WHITESPACE_CHARACTER"] = 2] = "WHITESPACE_CHARACTER";
TokenType2[TokenType2["START_TAG"] = 3] = "START_TAG";
TokenType2[TokenType2["END_TAG"] = 4] = "END_TAG";
TokenType2[TokenType2["COMMENT"] = 5] = "COMMENT";
TokenType2[TokenType2["DOCTYPE"] = 6] = "DOCTYPE";
TokenType2[TokenType2["EOF"] = 7] = "EOF";
TokenType2[TokenType2["HIBERNATION"] = 8] = "HIBERNATION";
})(TokenType || (TokenType = {}));
}
});
// node_modules/parse5/dist/common/html.js
var html_exports = {};
__export(html_exports, {
ATTRS: () => ATTRS,
DOCUMENT_MODE: () => DOCUMENT_MODE,
NS: () => NS,
NUMBERED_HEADERS: () => NUMBERED_HEADERS,
SPECIAL_ELEMENTS: () => SPECIAL_ELEMENTS,
TAG_ID: () => TAG_ID,
TAG_NAMES: () => TAG_NAMES,
getTagID: () => getTagID,
hasUnescapedText: () => hasUnescapedText
});
function getTagID(tagName) {
var _a2;
return (_a2 = TAG_NAME_TO_ID.get(tagName)) !== null && _a2 !== void 0 ? _a2 : TAG_ID.UNKNOWN;
}
function hasUnescapedText(tn, scriptingEnabled) {
return UNESCAPED_TEXT.has(tn) || scriptingEnabled && tn === TAG_NAMES.NOSCRIPT;
}
var NS, ATTRS, DOCUMENT_MODE, TAG_NAMES, TAG_ID, TAG_NAME_TO_ID, $, SPECIAL_ELEMENTS, NUMBERED_HEADERS, UNESCAPED_TEXT;
var init_html = __esm({
"node_modules/parse5/dist/common/html.js"() {
(function(NS2) {
NS2["HTML"] = "http://www.w3.org/1999/xhtml";
NS2["MATHML"] = "http://www.w3.org/1998/Math/MathML";
NS2["SVG"] = "http://www.w3.org/2000/svg";
NS2["XLINK"] = "http://www.w3.org/1999/xlink";
NS2["XML"] = "http://www.w3.org/XML/1998/namespace";
NS2["XMLNS"] = "http://www.w3.org/2000/xmlns/";
})(NS || (NS = {}));
(function(ATTRS2) {
ATTRS2["TYPE"] = "type";
ATTRS2["ACTION"] = "action";
ATTRS2["ENCODING"] = "encoding";
ATTRS2["PROMPT"] = "prompt";
ATTRS2["NAME"] = "name";
ATTRS2["COLOR"] = "color";
ATTRS2["FACE"] = "face";
ATTRS2["SIZE"] = "size";
})(ATTRS || (ATTRS = {}));
(function(DOCUMENT_MODE2) {
DOCUMENT_MODE2["NO_QUIRKS"] = "no-quirks";
DOCUMENT_MODE2["QUIRKS"] = "quirks";
DOCUMENT_MODE2["LIMITED_QUIRKS"] = "limited-quirks";
})(DOCUMENT_MODE || (DOCUMENT_MODE = {}));
(function(TAG_NAMES2) {
TAG_NAMES2["A"] = "a";
TAG_NAMES2["ADDRESS"] = "address";
TAG_NAMES2["ANNOTATION_XML"] = "annotation-xml";
TAG_NAMES2["APPLET"] = "applet";
TAG_NAMES2["AREA"] = "area";
TAG_NAMES2["ARTICLE"] = "article";
TAG_NAMES2["ASIDE"] = "aside";
TAG_NAMES2["B"] = "b";
TAG_NAMES2["BASE"] = "base";
TAG_NAMES2["BASEFONT"] = "basefont";
TAG_NAMES2["BGSOUND"] = "bgsound";
TAG_NAMES2["BIG"] = "big";
TAG_NAMES2["BLOCKQUOTE"] = "blockquote";
TAG_NAMES2["BODY"] = "body";
TAG_NAMES2["BR"] = "br";
TAG_NAMES2["BUTTON"] = "button";
TAG_NAMES2["CAPTION"] = "caption";
TAG_NAMES2["CENTER"] = "center";
TAG_NAMES2["CODE"] = "code";
TAG_NAMES2["COL"] = "col";
TAG_NAMES2["COLGROUP"] = "colgroup";
TAG_NAMES2["DD"] = "dd";
TAG_NAMES2["DESC"] = "desc";
TAG_NAMES2["DETAILS"] = "details";
TAG_NAMES2["DIALOG"] = "dialog";
TAG_NAMES2["DIR"] = "dir";
TAG_NAMES2["DIV"] = "div";
TAG_NAMES2["DL"] = "dl";
TAG_NAMES2["DT"] = "dt";
TAG_NAMES2["EM"] = "em";
TAG_NAMES2["EMBED"] = "embed";
TAG_NAMES2["FIELDSET"] = "fieldset";
TAG_NAMES2["FIGCAPTION"] = "figcaption";
TAG_NAMES2["FIGURE"] = "figure";
TAG_NAMES2["FONT"] = "font";
TAG_NAMES2["FOOTER"] = "footer";
TAG_NAMES2["FOREIGN_OBJECT"] = "foreignObject";
TAG_NAMES2["FORM"] = "form";
TAG_NAMES2["FRAME"] = "frame";
TAG_NAMES2["FRAMESET"] = "frameset";
TAG_NAMES2["H1"] = "h1";
TAG_NAMES2["H2"] = "h2";
TAG_NAMES2["H3"] = "h3";
TAG_NAMES2["H4"] = "h4";
TAG_NAMES2["H5"] = "h5";
TAG_NAMES2["H6"] = "h6";
TAG_NAMES2["HEAD"] = "head";
TAG_NAMES2["HEADER"] = "header";
TAG_NAMES2["HGROUP"] = "hgroup";
TAG_NAMES2["HR"] = "hr";
TAG_NAMES2["HTML"] = "html";
TAG_NAMES2["I"] = "i";
TAG_NAMES2["IMG"] = "img";
TAG_NAMES2["IMAGE"] = "image";
TAG_NAMES2["INPUT"] = "input";
TAG_NAMES2["IFRAME"] = "iframe";
TAG_NAMES2["KEYGEN"] = "keygen";
TAG_NAMES2["LABEL"] = "label";
TAG_NAMES2["LI"] = "li";
TAG_NAMES2["LINK"] = "link";
TAG_NAMES2["LISTING"] = "listing";
TAG_NAMES2["MAIN"] = "main";
TAG_NAMES2["MALIGNMARK"] = "malignmark";
TAG_NAMES2["MARQUEE"] = "marquee";
TAG_NAMES2["MATH"] = "math";
TAG_NAMES2["MENU"] = "menu";
TAG_NAMES2["META"] = "meta";
TAG_NAMES2["MGLYPH"] = "mglyph";
TAG_NAMES2["MI"] = "mi";
TAG_NAMES2["MO"] = "mo";
TAG_NAMES2["MN"] = "mn";
TAG_NAMES2["MS"] = "ms";
TAG_NAMES2["MTEXT"] = "mtext";
TAG_NAMES2["NAV"] = "nav";
TAG_NAMES2["NOBR"] = "nobr";
TAG_NAMES2["NOFRAMES"] = "noframes";
TAG_NAMES2["NOEMBED"] = "noembed";
TAG_NAMES2["NOSCRIPT"] = "noscript";
TAG_NAMES2["OBJECT"] = "object";
TAG_NAMES2["OL"] = "ol";
TAG_NAMES2["OPTGROUP"] = "optgroup";
TAG_NAMES2["OPTION"] = "option";
TAG_NAMES2["P"] = "p";
TAG_NAMES2["PARAM"] = "param";
TAG_NAMES2["PLAINTEXT"] = "plaintext";
TAG_NAMES2["PRE"] = "pre";
TAG_NAMES2["RB"] = "rb";
TAG_NAMES2["RP"] = "rp";
TAG_NAMES2["RT"] = "rt";
TAG_NAMES2["RTC"] = "rtc";
TAG_NAMES2["RUBY"] = "ruby";
TAG_NAMES2["S"] = "s";
TAG_NAMES2["SCRIPT"] = "script";
TAG_NAMES2["SEARCH"] = "search";
TAG_NAMES2["SECTION"] = "section";
TAG_NAMES2["SELECT"] = "select";
TAG_NAMES2["SOURCE"] = "source";
TAG_NAMES2["SMALL"] = "small";
TAG_NAMES2["SPAN"] = "span";
TAG_NAMES2["STRIKE"] = "strike";
TAG_NAMES2["STRONG"] = "strong";
TAG_NAMES2["STYLE"] = "style";
TAG_NAMES2["SUB"] = "sub";
TAG_NAMES2["SUMMARY"] = "summary";
TAG_NAMES2["SUP"] = "sup";
TAG_NAMES2["TABLE"] = "table";
TAG_NAMES2["TBODY"] = "tbody";
TAG_NAMES2["TEMPLATE"] = "template";
TAG_NAMES2["TEXTAREA"] = "textarea";
TAG_NAMES2["TFOOT"] = "tfoot";
TAG_NAMES2["TD"] = "td";
TAG_NAMES2["TH"] = "th";
TAG_NAMES2["THEAD"] = "thead";
TAG_NAMES2["TITLE"] = "title";
TAG_NAMES2["TR"] = "tr";
TAG_NAMES2["TRACK"] = "track";
TAG_NAMES2["TT"] = "tt";
TAG_NAMES2["U"] = "u";
TAG_NAMES2["UL"] = "ul";
TAG_NAMES2["SVG"] = "svg";
TAG_NAMES2["VAR"] = "var";
TAG_NAMES2["WBR"] = "wbr";
TAG_NAMES2["XMP"] = "xmp";
})(TAG_NAMES || (TAG_NAMES = {}));
(function(TAG_ID2) {
TAG_ID2[TAG_ID2["UNKNOWN"] = 0] = "UNKNOWN";
TAG_ID2[TAG_ID2["A"] = 1] = "A";
TAG_ID2[TAG_ID2["ADDRESS"] = 2] = "ADDRESS";
TAG_ID2[TAG_ID2["ANNOTATION_XML"] = 3] = "ANNOTATION_XML";
TAG_ID2[TAG_ID2["APPLET"] = 4] = "APPLET";
TAG_ID2[TAG_ID2["AREA"] = 5] = "AREA";
TAG_ID2[TAG_ID2["ARTICLE"] = 6] = "ARTICLE";
TAG_ID2[TAG_ID2["ASIDE"] = 7] = "ASIDE";
TAG_ID2[TAG_ID2["B"] = 8] = "B";
TAG_ID2[TAG_ID2["BASE"] = 9] = "BASE";
TAG_ID2[TAG_ID2["BASEFONT"] = 10] = "BASEFONT";
TAG_ID2[TAG_ID2["BGSOUND"] = 11] = "BGSOUND";
TAG_ID2[TAG_ID2["BIG"] = 12] = "BIG";
TAG_ID2[TAG_ID2["BLOCKQUOTE"] = 13] = "BLOCKQUOTE";
TAG_ID2[TAG_ID2["BODY"] = 14] = "BODY";
TAG_ID2[TAG_ID2["BR"] = 15] = "BR";
TAG_ID2[TAG_ID2["BUTTON"] = 16] = "BUTTON";
TAG_ID2[TAG_ID2["CAPTION"] = 17] = "CAPTION";
TAG_ID2[TAG_ID2["CENTER"] = 18] = "CENTER";
TAG_ID2[TAG_ID2["CODE"] = 19] = "CODE";
TAG_ID2[TAG_ID2["COL"] = 20] = "COL";
TAG_ID2[TAG_ID2["COLGROUP"] = 21] = "COLGROUP";
TAG_ID2[TAG_ID2["DD"] = 22] = "DD";
TAG_ID2[TAG_ID2["DESC"] = 23] = "DESC";
TAG_ID2[TAG_ID2["DETAILS"] = 24] = "DETAILS";
TAG_ID2[TAG_ID2["DIALOG"] = 25] = "DIALOG";
TAG_ID2[TAG_ID2["DIR"] = 26] = "DIR";
TAG_ID2[TAG_ID2["DIV"] = 27] = "DIV";
TAG_ID2[TAG_ID2["DL"] = 28] = "DL";
TAG_ID2[TAG_ID2["DT"] = 29] = "DT";
TAG_ID2[TAG_ID2["EM"] = 30] = "EM";
TAG_ID2[TAG_ID2["EMBED"] = 31] = "EMBED";
TAG_ID2[TAG_ID2["FIELDSET"] = 32] = "FIELDSET";
TAG_ID2[TAG_ID2["FIGCAPTION"] = 33] = "FIGCAPTION";
TAG_ID2[TAG_ID2["FIGURE"] = 34] = "FIGURE";
TAG_ID2[TAG_ID2["FONT"] = 35] = "FONT";
TAG_ID2[TAG_ID2["FOOTER"] = 36] = "FOOTER";
TAG_ID2[TAG_ID2["FOREIGN_OBJECT"] = 37] = "FOREIGN_OBJECT";
TAG_ID2[TAG_ID2["FORM"] = 38] = "FORM";
TAG_ID2[TAG_ID2["FRAME"] = 39] = "FRAME";
TAG_ID2[TAG_ID2["FRAMESET"] = 40] = "FRAMESET";
TAG_ID2[TAG_ID2["H1"] = 41] = "H1";
TAG_ID2[TAG_ID2["H2"] = 42] = "H2";
TAG_ID2[TAG_ID2["H3"] = 43] = "H3";
TAG_ID2[TAG_ID2["H4"] = 44] = "H4";
TAG_ID2[TAG_ID2["H5"] = 45] = "H5";
TAG_ID2[TAG_ID2["H6"] = 46] = "H6";
TAG_ID2[TAG_ID2["HEAD"] = 47] = "HEAD";
TAG_ID2[TAG_ID2["HEADER"] = 48] = "HEADER";
TAG_ID2[TAG_ID2["HGROUP"] = 49] = "HGROUP";
TAG_ID2[TAG_ID2["HR"] = 50] = "HR";
TAG_ID2[TAG_ID2["HTML"] = 51] = "HTML";
TAG_ID2[TAG_ID2["I"] = 52] = "I";
TAG_ID2[TAG_ID2["IMG"] = 53] = "IMG";
TAG_ID2[TAG_ID2["IMAGE"] = 54] = "IMAGE";
TAG_ID2[TAG_ID2["INPUT"] = 55] = "INPUT";
TAG_ID2[TAG_ID2["IFRAME"] = 56] = "IFRAME";
TAG_ID2[TAG_ID2["KEYGEN"] = 57] = "KEYGEN";
TAG_ID2[TAG_ID2["LABEL"] = 58] = "LABEL";
TAG_ID2[TAG_ID2["LI"] = 59] = "LI";
TAG_ID2[TAG_ID2["LINK"] = 60] = "LINK";
TAG_ID2[TAG_ID2["LISTING"] = 61] = "LISTING";
TAG_ID2[TAG_ID2["MAIN"] = 62] = "MAIN";
TAG_ID2[TAG_ID2["MALIGNMARK"] = 63] = "MALIGNMARK";
TAG_ID2[TAG_ID2["MARQUEE"] = 64] = "MARQUEE";
TAG_ID2[TAG_ID2["MATH"] = 65] = "MATH";
TAG_ID2[TAG_ID2["MENU"] = 66] = "MENU";
TAG_ID2[TAG_ID2["META"] = 67] = "META";
TAG_ID2[TAG_ID2["MGLYPH"] = 68] = "MGLYPH";
TAG_ID2[TAG_ID2["MI"] = 69] = "MI";
TAG_ID2[TAG_ID2["MO"] = 70] = "MO";
TAG_ID2[TAG_ID2["MN"] = 71] = "MN";
TAG_ID2[TAG_ID2["MS"] = 72] = "MS";
TAG_ID2[TAG_ID2["MTEXT"] = 73] = "MTEXT";
TAG_ID2[TAG_ID2["NAV"] = 74] = "NAV";
TAG_ID2[TAG_ID2["NOBR"] = 75] = "NOBR";
TAG_ID2[TAG_ID2["NOFRAMES"] = 76] = "NOFRAMES";
TAG_ID2[TAG_ID2["NOEMBED"] = 77] = "NOEMBED";
TAG_ID2[TAG_ID2["NOSCRIPT"] = 78] = "NOSCRIPT";
TAG_ID2[TAG_ID2["OBJECT"] = 79] = "OBJECT";
TAG_ID2[TAG_ID2["OL"] = 80] = "OL";
TAG_ID2[TAG_ID2["OPTGROUP"] = 81] = "OPTGROUP";
TAG_ID2[TAG_ID2["OPTION"] = 82] = "OPTION";
TAG_ID2[TAG_ID2["P"] = 83] = "P";
TAG_ID2[TAG_ID2["PARAM"] = 84] = "PARAM";
TAG_ID2[TAG_ID2["PLAINTEXT"] = 85] = "PLAINTEXT";
TAG_ID2[TAG_ID2["PRE"] = 86] = "PRE";
TAG_ID2[TAG_ID2["RB"] = 87] = "RB";
TAG_ID2[TAG_ID2["RP"] = 88] = "RP";
TAG_ID2[TAG_ID2["RT"] = 89] = "RT";
TAG_ID2[TAG_ID2["RTC"] = 90] = "RTC";
TAG_ID2[TAG_ID2["RUBY"] = 91] = "RUBY";
TAG_ID2[TAG_ID2["S"] = 92] = "S";
TAG_ID2[TAG_ID2["SCRIPT"] = 93] = "SCRIPT";
TAG_ID2[TAG_ID2["SEARCH"] = 94] = "SEARCH";
TAG_ID2[TAG_ID2["SECTION"] = 95] = "SECTION";
TAG_ID2[TAG_ID2["SELECT"] = 96] = "SELECT";
TAG_ID2[TAG_ID2["SOURCE"] = 97] = "SOURCE";
TAG_ID2[TAG_ID2["SMALL"] = 98] = "SMALL";
TAG_ID2[TAG_ID2["SPAN"] = 99] = "SPAN";
TAG_ID2[TAG_ID2["STRIKE"] = 100] = "STRIKE";
TAG_ID2[TAG_ID2["STRONG"] = 101] = "STRONG";
TAG_ID2[TAG_ID2["STYLE"] = 102] = "STYLE";
TAG_ID2[TAG_ID2["SUB"] = 103] = "SUB";
TAG_ID2[TAG_ID2["SUMMARY"] = 104] = "SUMMARY";
TAG_ID2[TAG_ID2["SUP"] = 105] = "SUP";
TAG_ID2[TAG_ID2["TABLE"] = 106] = "TABLE";
TAG_ID2[TAG_ID2["TBODY"] = 107] = "TBODY";
TAG_ID2[TAG_ID2["TEMPLATE"] = 108] = "TEMPLATE";
TAG_ID2[TAG_ID2["TEXTAREA"] = 109] = "TEXTAREA";
TAG_ID2[TAG_ID2["TFOOT"] = 110] = "TFOOT";
TAG_ID2[TAG_ID2["TD"] = 111] = "TD";
TAG_ID2[TAG_ID2["TH"] = 112] = "TH";
TAG_ID2[TAG_ID2["THEAD"] = 113] = "THEAD";
TAG_ID2[TAG_ID2["TITLE"] = 114] = "TITLE";
TAG_ID2[TAG_ID2["TR"] = 115] = "TR";
TAG_ID2[TAG_ID2["TRACK"] = 116] = "TRACK";
TAG_ID2[TAG_ID2["TT"] = 117] = "TT";
TAG_ID2[TAG_ID2["U"] = 118] = "U";
TAG_ID2[TAG_ID2["UL"] = 119] = "UL";
TAG_ID2[TAG_ID2["SVG"] = 120] = "SVG";
TAG_ID2[TAG_ID2["VAR"] = 121] = "VAR";
TAG_ID2[TAG_ID2["WBR"] = 122] = "WBR";
TAG_ID2[TAG_ID2["XMP"] = 123] = "XMP";
})(TAG_ID || (TAG_ID = {}));
TAG_NAME_TO_ID = /* @__PURE__ */ new Map([
[TAG_NAMES.A, TAG_ID.A],
[TAG_NAMES.ADDRESS, TAG_ID.ADDRESS],
[TAG_NAMES.ANNOTATION_XML, TAG_ID.ANNOTATION_XML],
[TAG_NAMES.APPLET, TAG_ID.APPLET],
[TAG_NAMES.AREA, TAG_ID.AREA],
[TAG_NAMES.ARTICLE, TAG_ID.ARTICLE],
[TAG_NAMES.ASIDE, TAG_ID.ASIDE],
[TAG_NAMES.B, TAG_ID.B],
[TAG_NAMES.BASE, TAG_ID.BASE],
[TAG_NAMES.BASEFONT, TAG_ID.BASEFONT],
[TAG_NAMES.BGSOUND, TAG_ID.BGSOUND],
[TAG_NAMES.BIG, TAG_ID.BIG],
[TAG_NAMES.BLOCKQUOTE, TAG_ID.BLOCKQUOTE],
[TAG_NAMES.BODY, TAG_ID.BODY],
[TAG_NAMES.BR, TAG_ID.BR],
[TAG_NAMES.BUTTON, TAG_ID.BUTTON],
[TAG_NAMES.CAPTION, TAG_ID.CAPTION],
[TAG_NAMES.CENTER, TAG_ID.CENTER],
[TAG_NAMES.CODE, TAG_ID.CODE],
[TAG_NAMES.COL, TAG_ID.COL],
[TAG_NAMES.COLGROUP, TAG_ID.COLGROUP],
[TAG_NAMES.DD, TAG_ID.DD],
[TAG_NAMES.DESC, TAG_ID.DESC],
[TAG_NAMES.DETAILS, TAG_ID.DETAILS],
[TAG_NAMES.DIALOG, TAG_ID.DIALOG],
[TAG_NAMES.DIR, TAG_ID.DIR],
[TAG_NAMES.DIV, TAG_ID.DIV],
[TAG_NAMES.DL, TAG_ID.DL],
[TAG_NAMES.DT, TAG_ID.DT],
[TAG_NAMES.EM, TAG_ID.EM],
[TAG_NAMES.EMBED, TAG_ID.EMBED],
[TAG_NAMES.FIELDSET, TAG_ID.FIELDSET],
[TAG_NAMES.FIGCAPTION, TAG_ID.FIGCAPTION],
[TAG_NAMES.FIGURE, TAG_ID.FIGURE],
[TAG_NAMES.FONT, TAG_ID.FONT],
[TAG_NAMES.FOOTER, TAG_ID.FOOTER],
[TAG_NAMES.FOREIGN_OBJECT, TAG_ID.FOREIGN_OBJECT],
[TAG_NAMES.FORM, TAG_ID.FORM],
[TAG_NAMES.FRAME, TAG_ID.FRAME],
[TAG_NAMES.FRAMESET, TAG_ID.FRAMESET],
[TAG_NAMES.H1, TAG_ID.H1],
[TAG_NAMES.H2, TAG_ID.H2],
[TAG_NAMES.H3, TAG_ID.H3],
[TAG_NAMES.H4, TAG_ID.H4],
[TAG_NAMES.H5, TAG_ID.H5],
[TAG_NAMES.H6, TAG_ID.H6],
[TAG_NAMES.HEAD, TAG_ID.HEAD],
[TAG_NAMES.HEADER, TAG_ID.HEADER],
[TAG_NAMES.HGROUP, TAG_ID.HGROUP],
[TAG_NAMES.HR, TAG_ID.HR],
[TAG_NAMES.HTML, TAG_ID.HTML],
[TAG_NAMES.I, TAG_ID.I],
[TAG_NAMES.IMG, TAG_ID.IMG],
[TAG_NAMES.IMAGE, TAG_ID.IMAGE],
[TAG_NAMES.INPUT, TAG_ID.INPUT],
[TAG_NAMES.IFRAME, TAG_ID.IFRAME],
[TAG_NAMES.KEYGEN, TAG_ID.KEYGEN],
[TAG_NAMES.LABEL, TAG_ID.LABEL],
[TAG_NAMES.LI, TAG_ID.LI],
[TAG_NAMES.LINK, TAG_ID.LINK],
[TAG_NAMES.LISTING, TAG_ID.LISTING],
[TAG_NAMES.MAIN, TAG_ID.MAIN],
[TAG_NAMES.MALIGNMARK, TAG_ID.MALIGNMARK],
[TAG_NAMES.MARQUEE, TAG_ID.MARQUEE],
[TAG_NAMES.MATH, TAG_ID.MATH],
[TAG_NAMES.MENU, TAG_ID.MENU],
[TAG_NAMES.META, TAG_ID.META],
[TAG_NAMES.MGLYPH, TAG_ID.MGLYPH],
[TAG_NAMES.MI, TAG_ID.MI],
[TAG_NAMES.MO, TAG_ID.MO],
[TAG_NAMES.MN, TAG_ID.MN],
[TAG_NAMES.MS, TAG_ID.MS],
[TAG_NAMES.MTEXT, TAG_ID.MTEXT],
[TAG_NAMES.NAV, TAG_ID.NAV],
[TAG_NAMES.NOBR, TAG_ID.NOBR],
[TAG_NAMES.NOFRAMES, TAG_ID.NOFRAMES],
[TAG_NAMES.NOEMBED, TAG_ID.NOEMBED],
[TAG_NAMES.NOSCRIPT, TAG_ID.NOSCRIPT],
[TAG_NAMES.OBJECT, TAG_ID.OBJECT],
[TAG_NAMES.OL, TAG_ID.OL],
[TAG_NAMES.OPTGROUP, TAG_ID.OPTGROUP],
[TAG_NAMES.OPTION, TAG_ID.OPTION],
[TAG_NAMES.P, TAG_ID.P],
[TAG_NAMES.PARAM, TAG_ID.PARAM],
[TAG_NAMES.PLAINTEXT, TAG_ID.PLAINTEXT],
[TAG_NAMES.PRE, TAG_ID.PRE],
[TAG_NAMES.RB, TAG_ID.RB],
[TAG_NAMES.RP, TAG_ID.RP],
[TAG_NAMES.RT, TAG_ID.RT],
[TAG_NAMES.RTC, TAG_ID.RTC],
[TAG_NAMES.RUBY, TAG_ID.RUBY],
[TAG_NAMES.S, TAG_ID.S],
[TAG_NAMES.SCRIPT, TAG_ID.SCRIPT],
[TAG_NAMES.SEARCH, TAG_ID.SEARCH],
[TAG_NAMES.SECTION, TAG_ID.SECTION],
[TAG_NAMES.SELECT, TAG_ID.SELECT],
[TAG_NAMES.SOURCE, TAG_ID.SOURCE],
[TAG_NAMES.SMALL, TAG_ID.SMALL],
[TAG_NAMES.SPAN, TAG_ID.SPAN],
[TAG_NAMES.STRIKE, TAG_ID.STRIKE],
[TAG_NAMES.STRONG, TAG_ID.STRONG],
[TAG_NAMES.STYLE, TAG_ID.STYLE],
[TAG_NAMES.SUB, TAG_ID.SUB],
[TAG_NAMES.SUMMARY, TAG_ID.SUMMARY],
[TAG_NAMES.SUP, TAG_ID.SUP],
[TAG_NAMES.TABLE, TAG_ID.TABLE],
[TAG_NAMES.TBODY, TAG_ID.TBODY],
[TAG_NAMES.TEMPLATE, TAG_ID.TEMPLATE],
[TAG_NAMES.TEXTAREA, TAG_ID.TEXTAREA],
[TAG_NAMES.TFOOT, TAG_ID.TFOOT],
[TAG_NAMES.TD, TAG_ID.TD],
[TAG_NAMES.TH, TAG_ID.TH],
[TAG_NAMES.THEAD, TAG_ID.THEAD],
[TAG_NAMES.TITLE, TAG_ID.TITLE],
[TAG_NAMES.TR, TAG_ID.TR],
[TAG_NAMES.TRACK, TAG_ID.TRACK],
[TAG_NAMES.TT, TAG_ID.TT],
[TAG_NAMES.U, TAG_ID.U],
[TAG_NAMES.UL, TAG_ID.UL],
[TAG_NAMES.SVG, TAG_ID.SVG],
[TAG_NAMES.VAR, TAG_ID.VAR],
[TAG_NAMES.WBR, TAG_ID.WBR],
[TAG_NAMES.XMP, TAG_ID.XMP]
]);
$ = TAG_ID;
SPECIAL_ELEMENTS = {
[NS.HTML]: /* @__PURE__ */ new Set([
$.ADDRESS,
$.APPLET,
$.AREA,
$.ARTICLE,
$.ASIDE,
$.BASE,
$.BASEFONT,
$.BGSOUND,
$.BLOCKQUOTE,
$.BODY,
$.BR,
$.BUTTON,
$.CAPTION,
$.CENTER,
$.COL,
$.COLGROUP,
$.DD,
$.DETAILS,
$.DIR,
$.DIV,
$.DL,
$.DT,
$.EMBED,
$.FIELDSET,
$.FIGCAPTION,
$.FIGURE,
$.FOOTER,
$.FORM,
$.FRAME,
$.FRAMESET,
$.H1,
$.H2,
$.H3,
$.H4,
$.H5,
$.H6,
$.HEAD,
$.HEADER,
$.HGROUP,
$.HR,
$.HTML,
$.IFRAME,
$.IMG,
$.INPUT,
$.LI,
$.LINK,
$.LISTING,
$.MAIN,
$.MARQUEE,
$.MENU,
$.META,
$.NAV,
$.NOEMBED,
$.NOFRAMES,
$.NOSCRIPT,
$.OBJECT,
$.OL,
$.P,
$.PARAM,
$.PLAINTEXT,
$.PRE,
$.SCRIPT,
$.SECTION,
$.SELECT,
$.SOURCE,
$.STYLE,
$.SUMMARY,
$.TABLE,
$.TBODY,
$.TD,
$.TEMPLATE,
$.TEXTAREA,
$.TFOOT,
$.TH,
$.THEAD,
$.TITLE,
$.TR,
$.TRACK,
$.UL,
$.WBR,
$.XMP
]),
[NS.MATHML]: /* @__PURE__ */ new Set([$.MI, $.MO, $.MN, $.MS, $.MTEXT, $.ANNOTATION_XML]),
[NS.SVG]: /* @__PURE__ */ new Set([$.TITLE, $.FOREIGN_OBJECT, $.DESC]),
[NS.XLINK]: /* @__PURE__ */ new Set(),
[NS.XML]: /* @__PURE__ */ new Set(),
[NS.XMLNS]: /* @__PURE__ */ new Set()
};
NUMBERED_HEADERS = /* @__PURE__ */ new Set([$.H1, $.H2, $.H3, $.H4, $.H5, $.H6]);
UNESCAPED_TEXT = /* @__PURE__ */ new Set([
TAG_NAMES.STYLE,
TAG_NAMES.SCRIPT,
TAG_NAMES.XMP,
TAG_NAMES.IFRAME,
TAG_NAMES.NOEMBED,
TAG_NAMES.NOFRAMES,
TAG_NAMES.PLAINTEXT
]);
}
});
// node_modules/parse5/dist/tokenizer/index.js
function isAsciiDigit(cp) {
return cp >= CODE_POINTS.DIGIT_0 && cp <= CODE_POINTS.DIGIT_9;
}
function isAsciiUpper(cp) {
return cp >= CODE_POINTS.LATIN_CAPITAL_A && cp <= CODE_POINTS.LATIN_CAPITAL_Z;
}
function isAsciiLower(cp) {
return cp >= CODE_POINTS.LATIN_SMALL_A && cp <= CODE_POINTS.LATIN_SMALL_Z;
}
function isAsciiLetter(cp) {
return isAsciiLower(cp) || isAsciiUpper(cp);
}
function isAsciiAlphaNumeric2(cp) {
return isAsciiLetter(cp) || isAsciiDigit(cp);
}
function toAsciiLower(cp) {
return cp + 32;
}
function isWhitespace(cp) {
return cp === CODE_POINTS.SPACE || cp === CODE_POINTS.LINE_FEED || cp === CODE_POINTS.TABULATION || cp === CODE_POINTS.FORM_FEED;
}
function isScriptDataDoubleEscapeSequenceEnd(cp) {
return isWhitespace(cp) || cp === CODE_POINTS.SOLIDUS || cp === CODE_POINTS.GREATER_THAN_SIGN;
}
function getErrorForNumericCharacterReference(code) {
if (code === CODE_POINTS.NULL) {
return ERR.nullCharacterReference;
} else if (code > 1114111) {
return ERR.characterReferenceOutsideUnicodeRange;
} else if (isSurrogate(code)) {
return ERR.surrogateCharacterReference;
} else if (isUndefinedCodePoint(code)) {
return ERR.noncharacterCharacterReference;
} else if (isControlCodePoint(code) || code === CODE_POINTS.CARRIAGE_RETURN) {
return ERR.controlCharacterReference;
}
return null;
}
var State, TokenizerMode, Tokenizer;
var init_tokenizer = __esm({
"node_modules/parse5/dist/tokenizer/index.js"() {
init_preprocessor();
init_unicode();
init_token();
init_decode();
init_error_codes();
init_html();
(function(State4) {
State4[State4["DATA"] = 0] = "DATA";
State4[State4["RCDATA"] = 1] = "RCDATA";
State4[State4["RAWTEXT"] = 2] = "RAWTEXT";
State4[State4["SCRIPT_DATA"] = 3] = "SCRIPT_DATA";
State4[State4["PLAINTEXT"] = 4] = "PLAINTEXT";
State4[State4["TAG_OPEN"] = 5] = "TAG_OPEN";
State4[State4["END_TAG_OPEN"] = 6] = "END_TAG_OPEN";
State4[State4["TAG_NAME"] = 7] = "TAG_NAME";
State4[State4["RCDATA_LESS_THAN_SIGN"] = 8] = "RCDATA_LESS_THAN_SIGN";
State4[State4["RCDATA_END_TAG_OPEN"] = 9] = "RCDATA_END_TAG_OPEN";
State4[State4["RCDATA_END_TAG_NAME"] = 10] = "RCDATA_END_TAG_NAME";
State4[State4["RAWTEXT_LESS_THAN_SIGN"] = 11] = "RAWTEXT_LESS_THAN_SIGN";
State4[State4["RAWTEXT_END_TAG_OPEN"] = 12] = "RAWTEXT_END_TAG_OPEN";
State4[State4["RAWTEXT_END_TAG_NAME"] = 13] = "RAWTEXT_END_TAG_NAME";
State4[State4["SCRIPT_DATA_LESS_THAN_SIGN"] = 14] = "SCRIPT_DATA_LESS_THAN_SIGN";
State4[State4["SCRIPT_DATA_END_TAG_OPEN"] = 15] = "SCRIPT_DATA_END_TAG_OPEN";
State4[State4["SCRIPT_DATA_END_TAG_NAME"] = 16] = "SCRIPT_DATA_END_TAG_NAME";
State4[State4["SCRIPT_DATA_ESCAPE_START"] = 17] = "SCRIPT_DATA_ESCAPE_START";
State4[State4["SCRIPT_DATA_ESCAPE_START_DASH"] = 18] = "SCRIPT_DATA_ESCAPE_START_DASH";
State4[State4["SCRIPT_DATA_ESCAPED"] = 19] = "SCRIPT_DATA_ESCAPED";
State4[State4["SCRIPT_DATA_ESCAPED_DASH"] = 20] = "SCRIPT_DATA_ESCAPED_DASH";
State4[State4["SCRIPT_DATA_ESCAPED_DASH_DASH"] = 21] = "SCRIPT_DATA_ESCAPED_DASH_DASH";
State4[State4["SCRIPT_DATA_ESCAPED_LESS_THAN_SIGN"] = 22] = "SCRIPT_DATA_ESCAPED_LESS_THAN_SIGN";
State4[State4["SCRIPT_DATA_ESCAPED_END_TAG_OPEN"] = 23] = "SCRIPT_DATA_ESCAPED_END_TAG_OPEN";
State4[State4["SCRIPT_DATA_ESCAPED_END_TAG_NAME"] = 24] = "SCRIPT_DATA_ESCAPED_END_TAG_NAME";
State4[State4["SCRIPT_DATA_DOUBLE_ESCAPE_START"] = 25] = "SCRIPT_DATA_DOUBLE_ESCAPE_START";
State4[State4["SCRIPT_DATA_DOUBLE_ESCAPED"] = 26] = "SCRIPT_DATA_DOUBLE_ESCAPED";
State4[State4["SCRIPT_DATA_DOUBLE_ESCAPED_DASH"] = 27] = "SCRIPT_DATA_DOUBLE_ESCAPED_DASH";
State4[State4["SCRIPT_DATA_DOUBLE_ESCAPED_DASH_DASH"] = 28] = "SCRIPT_DATA_DOUBLE_ESCAPED_DASH_DASH";
State4[State4["SCRIPT_DATA_DOUBLE_ESCAPED_LESS_THAN_SIGN"] = 29] = "SCRIPT_DATA_DOUBLE_ESCAPED_LESS_THAN_SIGN";
State4[State4["SCRIPT_DATA_DOUBLE_ESCAPE_END"] = 30] = "SCRIPT_DATA_DOUBLE_ESCAPE_END";
State4[State4["BEFORE_ATTRIBUTE_NAME"] = 31] = "BEFORE_ATTRIBUTE_NAME";
State4[State4["ATTRIBUTE_NAME"] = 32] = "ATTRIBUTE_NAME";
State4[State4["AFTER_ATTRIBUTE_NAME"] = 33] = "AFTER_ATTRIBUTE_NAME";
State4[State4["BEFORE_ATTRIBUTE_VALUE"] = 34] = "BEFORE_ATTRIBUTE_VALUE";
State4[State4["ATTRIBUTE_VALUE_DOUBLE_QUOTED"] = 35] = "ATTRIBUTE_VALUE_DOUBLE_QUOTED";
State4[State4["ATTRIBUTE_VALUE_SINGLE_QUOTED"] = 36] = "ATTRIBUTE_VALUE_SINGLE_QUOTED";
State4[State4["ATTRIBUTE_VALUE_UNQUOTED"] = 37] = "ATTRIBUTE_VALUE_UNQUOTED";
State4[State4["AFTER_ATTRIBUTE_VALUE_QUOTED"] = 38] = "AFTER_ATTRIBUTE_VALUE_QUOTED";
State4[State4["SELF_CLOSING_START_TAG"] = 39] = "SELF_CLOSING_START_TAG";
State4[State4["BOGUS_COMMENT"] = 40] = "BOGUS_COMMENT";
State4[State4["MARKUP_DECLARATION_OPEN"] = 41] = "MARKUP_DECLARATION_OPEN";
State4[State4["COMMENT_START"] = 42] = "COMMENT_START";
State4[State4["COMMENT_START_DASH"] = 43] = "COMMENT_START_DASH";
State4[State4["COMMENT"] = 44] = "COMMENT";
State4[State4["COMMENT_LESS_THAN_SIGN"] = 45] = "COMMENT_LESS_THAN_SIGN";
State4[State4["COMMENT_LESS_THAN_SIGN_BANG"] = 46] = "COMMENT_LESS_THAN_SIGN_BANG";
State4[State4["COMMENT_LESS_THAN_SIGN_BANG_DASH"] = 47] = "COMMENT_LESS_THAN_SIGN_BANG_DASH";
State4[State4["COMMENT_LESS_THAN_SIGN_BANG_DASH_DASH"] = 48] = "COMMENT_LESS_THAN_SIGN_BANG_DASH_DASH";
State4[State4["COMMENT_END_DASH"] = 49] = "COMMENT_END_DASH";
State4[State4["COMMENT_END"] = 50] = "COMMENT_END";
State4[State4["COMMENT_END_BANG"] = 51] = "COMMENT_END_BANG";
State4[State4["DOCTYPE"] = 52] = "DOCTYPE";
State4[State4["BEFORE_DOCTYPE_NAME"] = 53] = "BEFORE_DOCTYPE_NAME";
State4[State4["DOCTYPE_NAME"] = 54] = "DOCTYPE_NAME";
State4[State4["AFTER_DOCTYPE_NAME"] = 55] = "AFTER_DOCTYPE_NAME";
State4[State4["AFTER_DOCTYPE_PUBLIC_KEYWORD"] = 56] = "AFTER_DOCTYPE_PUBLIC_KEYWORD";
State4[State4["BEFORE_DOCTYPE_PUBLIC_IDENTIFIER"] = 57] = "BEFORE_DOCTYPE_PUBLIC_IDENTIFIER";
State4[State4["DOCTYPE_PUBLIC_IDENTIFIER_DOUBLE_QUOTED"] = 58] = "DOCTYPE_PUBLIC_IDENTIFIER_DOUBLE_QUOTED";
State4[State4["DOCTYPE_PUBLIC_IDENTIFIER_SINGLE_QUOTED"] = 59] = "DOCTYPE_PUBLIC_IDENTIFIER_SINGLE_QUOTED";
State4[State4["AFTER_DOCTYPE_PUBLIC_IDENTIFIER"] = 60] = "AFTER_DOCTYPE_PUBLIC_IDENTIFIER";
State4[State4["BETWEEN_DOCTYPE_PUBLIC_AND_SYSTEM_IDENTIFIERS"] = 61] = "BETWEEN_DOCTYPE_PUBLIC_AND_SYSTEM_IDENTIFIERS";
State4[State4["AFTER_DOCTYPE_SYSTEM_KEYWORD"] = 62] = "AFTER_DOCTYPE_SYSTEM_KEYWORD";
State4[State4["BEFORE_DOCTYPE_SYSTEM_IDENTIFIER"] = 63] = "BEFORE_DOCTYPE_SYSTEM_IDENTIFIER";
State4[State4["DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED"] = 64] = "DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED";
State4[State4["DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED"] = 65] = "DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED";
State4[State4["AFTER_DOCTYPE_SYSTEM_IDENTIFIER"] = 66] = "AFTER_DOCTYPE_SYSTEM_IDENTIFIER";
State4[State4["BOGUS_DOCTYPE"] = 67] = "BOGUS_DOCTYPE";
State4[State4["CDATA_SECTION"] = 68] = "CDATA_SECTION";
State4[State4["CDATA_SECTION_BRACKET"] = 69] = "CDATA_SECTION_BRACKET";
State4[State4["CDATA_SECTION_END"] = 70] = "CDATA_SECTION_END";
State4[State4["CHARACTER_REFERENCE"] = 71] = "CHARACTER_REFERENCE";
State4[State4["AMBIGUOUS_AMPERSAND"] = 72] = "AMBIGUOUS_AMPERSAND";
})(State || (State = {}));
TokenizerMode = {
DATA: State.DATA,
RCDATA: State.RCDATA,
RAWTEXT: State.RAWTEXT,
SCRIPT_DATA: State.SCRIPT_DATA,
PLAINTEXT: State.PLAINTEXT,
CDATA_SECTION: State.CDATA_SECTION
};
Tokenizer = class {
constructor(options, handler) {
this.options = options;
this.handler = handler;
this.paused = false;
this.inLoop = false;
this.inForeignNode = false;
this.lastStartTagName = "";
this.active = false;
this.state = State.DATA;
this.returnState = State.DATA;
this.entityStartPos = 0;
this.consumedAfterSnapshot = -1;
this.currentCharacterToken = null;
this.currentToken = null;
this.currentAttr = { name: "", value: "" };
this.preprocessor = new Preprocessor(handler);
this.currentLocation = this.getCurrentLocation(-1);
this.entityDecoder = new EntityDecoder(decode_data_html_default, (cp, consumed) => {
this.preprocessor.pos = this.entityStartPos + consumed - 1;
this._flushCodePointConsumedAsCharacterReference(cp);
}, handler.onParseError ? {
missingSemicolonAfterCharacterReference: () => {
this._err(ERR.missingSemicolonAfterCharacterReference, 1);
},
absenceOfDigitsInNumericCharacterReference: (consumed) => {
this._err(ERR.absenceOfDigitsInNumericCharacterReference, this.entityStartPos - this.preprocessor.pos + consumed);
},
validateNumericCharacterReference: (code) => {
const error = getErrorForNumericCharacterReference(code);
if (error)
this._err(error, 1);
}
} : void 0);
}
//Errors
_err(code, cpOffset = 0) {
var _a2, _b;
(_b = (_a2 = this.handler).onParseError) === null || _b === void 0 ? void 0 : _b.call(_a2, this.preprocessor.getError(code, cpOffset));
}
// NOTE: `offset` may never run across line boundaries.
getCurrentLocation(offset) {
if (!this.options.sourceCodeLocationInfo) {
return null;
}
return {
startLine: this.preprocessor.line,
startCol: this.preprocessor.col - offset,
startOffset: this.preprocessor.offset - offset,
endLine: -1,
endCol: -1,
endOffset: -1
};
}
_runParsingLoop() {
if (this.inLoop)
return;
this.inLoop = true;
while (this.active && !this.paused) {
this.consumedAfterSnapshot = 0;
const cp = this._consume();
if (!this._ensureHibernation()) {
this._callState(cp);
}
}
this.inLoop = false;
}
//API
pause() {
this.paused = true;
}
resume(writeCallback) {
if (!this.paused) {
throw new Error("Parser was already resumed");
}
this.paused = false;
if (this.inLoop)
return;
this._runParsingLoop();
if (!this.paused) {
writeCallback === null || writeCallback === void 0 ? void 0 : writeCallback();
}
}
write(chunk, isLastChunk, writeCallback) {
this.active = true;
this.preprocessor.write(chunk, isLastChunk);
this._runParsingLoop();
if (!this.paused) {
writeCallback === null || writeCallback === void 0 ? void 0 : writeCallback();
}
}
insertHtmlAtCurrentPos(chunk) {
this.active = true;
this.preprocessor.insertHtmlAtCurrentPos(chunk);
this._runParsingLoop();
}
//Hibernation
_ensureHibernation() {
if (this.preprocessor.endOfChunkHit) {
this.preprocessor.retreat(this.consumedAfterSnapshot);
this.consumedAfterSnapshot = 0;
this.active = false;
return true;
}
return false;
}
//Consumption
_consume() {
this.consumedAfterSnapshot++;
return this.preprocessor.advance();
}
_advanceBy(count) {
this.consumedAfterSnapshot += count;
for (let i = 0; i < count; i++) {
this.preprocessor.advance();
}
}
_consumeSequenceIfMatch(pattern, caseSensitive) {
if (this.preprocessor.startsWith(pattern, caseSensitive)) {
this._advanceBy(pattern.length - 1);
return true;
}
return false;
}
//Token creation
_createStartTagToken() {
this.currentToken = {
type: TokenType.START_TAG,
tagName: "",
tagID: TAG_ID.UNKNOWN,
selfClosing: false,
ackSelfClosing: false,
attrs: [],
location: this.getCurrentLocation(1)
};
}
_createEndTagToken() {
this.currentToken = {
type: TokenType.END_TAG,
tagName: "",
tagID: TAG_ID.UNKNOWN,
selfClosing: false,
ackSelfClosing: false,
attrs: [],
location: this.getCurrentLocation(2)
};
}
_createCommentToken(offset) {
this.currentToken = {
type: TokenType.COMMENT,
data: "",
location: this.getCurrentLocation(offset)
};
}
_createDoctypeToken(initialName) {
this.currentToken = {
type: TokenType.DOCTYPE,
name: initialName,
forceQuirks: false,
publicId: null,
systemId: null,
location: this.currentLocation
};
}
_createCharacterToken(type, chars) {
this.currentCharacterToken = {
type,
chars,
location: this.currentLocation
};
}
//Tag attributes
_createAttr(attrNameFirstCh) {
this.currentAttr = {
name: attrNameFirstCh,
value: ""
};
this.currentLocation = this.getCurrentLocation(0);
}
_leaveAttrName() {
var _a2;
var _b;
const token = this.currentToken;
if (getTokenAttr(token, this.currentAttr.name) === null) {
token.attrs.push(this.currentAttr);
if (token.location && this.currentLocation) {
const attrLocations = (_a2 = (_b = token.location).attrs) !== null && _a2 !== void 0 ? _a2 : _b.attrs = /* @__PURE__ */ Object.create(null);
attrLocations[this.currentAttr.name] = this.currentLocation;
this._leaveAttrValue();
}
} else {
this._err(ERR.duplicateAttribute);
}
}
_leaveAttrValue() {
if (this.currentLocation) {
this.currentLocation.endLine = this.preprocessor.line;
this.currentLocation.endCol = this.preprocessor.col;
this.currentLocation.endOffset = this.preprocessor.offset;
}
}
//Token emission
prepareToken(ct) {
this._emitCurrentCharacterToken(ct.location);
this.currentToken = null;
if (ct.location) {
ct.location.endLine = this.preprocessor.line;
ct.location.endCol = this.preprocessor.col + 1;
ct.location.endOffset = this.preprocessor.offset + 1;
}
this.currentLocation = this.getCurrentLocation(-1);
}
emitCurrentTagToken() {
const ct = this.currentToken;
this.prepareToken(ct);
ct.tagID = getTagID(ct.tagName);
if (ct.type === TokenType.START_TAG) {
this.lastStartTagName = ct.tagName;
this.handler.onStartTag(ct);
} else {
if (ct.attrs.length > 0) {
this._err(ERR.endTagWithAttributes);
}
if (ct.selfClosing) {
this._err(ERR.endTagWithTrailingSolidus);
}
this.handler.onEndTag(ct);
}
this.preprocessor.dropParsedChunk();
}
emitCurrentComment(ct) {
this.prepareToken(ct);
this.handler.onComment(ct);
this.preprocessor.dropParsedChunk();
}
emitCurrentDoctype(ct) {
this.prepareToken(ct);
this.handler.onDoctype(ct);
this.preprocessor.dropParsedChunk();
}
_emitCurrentCharacterToken(nextLocation) {
if (this.currentCharacterToken) {
if (nextLocation && this.currentCharacterToken.location) {
this.currentCharacterToken.location.endLine = nextLocation.startLine;
this.currentCharacterToken.location.endCol = nextLocation.startCol;
this.currentCharacterToken.location.endOffset = nextLocation.startOffset;
}
switch (this.currentCharacterToken.type) {
case TokenType.CHARACTER: {
this.handler.onCharacter(this.currentCharacterToken);
break;
}
case TokenType.NULL_CHARACTER: {
this.handler.onNullCharacter(this.currentCharacterToken);
break;
}
case TokenType.WHITESPACE_CHARACTER: {
this.handler.onWhitespaceCharacter(this.currentCharacterToken);
break;
}
}
this.currentCharacterToken = null;
}
}
_emitEOFToken() {
const location = this.getCurrentLocation(0);
if (location) {
location.endLine = location.startLine;
location.endCol = location.startCol;
location.endOffset = location.startOffset;
}
this._emitCurrentCharacterToken(location);
this.handler.onEof({ type: TokenType.EOF, location });
this.active = false;
}
//Characters emission
//OPTIMIZATION: The specification uses only one type of character token (one token per character).
//This causes a huge memory overhead and a lot of unnecessary parser loops. parse5 uses 3 groups of characters.
//If we have a sequence of characters that belong to the same group, the parser can process it
//as a single solid character token.
//So, there are 3 types of character tokens in parse5:
//1)TokenType.NULL_CHARACTER - \u0000-character sequences (e.g. '\u0000\u0000\u0000')
//2)TokenType.WHITESPACE_CHARACTER - any whitespace/new-line character sequences (e.g. '\n \r\t \f')
//3)TokenType.CHARACTER - any character sequence which don't belong to groups 1 and 2 (e.g. 'abcdef1234@@#$%^')
_appendCharToCurrentCharacterToken(type, ch) {
if (this.currentCharacterToken) {
if (this.currentCharacterToken.type === type) {
this.currentCharacterToken.chars += ch;
return;
} else {
this.currentLocation = this.getCurrentLocation(0);
this._emitCurrentCharacterToken(this.currentLocation);
this.preprocessor.dropParsedChunk();
}
}
this._createCharacterToken(type, ch);
}
_emitCodePoint(cp) {
const type = isWhitespace(cp) ? TokenType.WHITESPACE_CHARACTER : cp === CODE_POINTS.NULL ? TokenType.NULL_CHARACTER : TokenType.CHARACTER;
this._appendCharToCurrentCharacterToken(type, String.fromCodePoint(cp));
}
//NOTE: used when we emit characters explicitly.
//This is always for non-whitespace and non-null characters, which allows us to avoid additional checks.
_emitChars(ch) {
this._appendCharToCurrentCharacterToken(TokenType.CHARACTER, ch);
}
// Character reference helpers
_startCharacterReference() {
this.returnState = this.state;
this.state = State.CHARACTER_REFERENCE;
this.entityStartPos = this.preprocessor.pos;
this.entityDecoder.startEntity(this._isCharacterReferenceInAttribute() ? DecodingMode.Attribute : DecodingMode.Legacy);
}
_isCharacterReferenceInAttribute() {
return this.returnState === State.ATTRIBUTE_VALUE_DOUBLE_QUOTED || this.returnState === State.ATTRIBUTE_VALUE_SINGLE_QUOTED || this.returnState === State.ATTRIBUTE_VALUE_UNQUOTED;
}
_flushCodePointConsumedAsCharacterReference(cp) {
if (this._isCharacterReferenceInAttribute()) {
this.currentAttr.value += String.fromCodePoint(cp);
} else {
this._emitCodePoint(cp);
}
}
// Calling states this way turns out to be much faster than any other approach.
_callState(cp) {
switch (this.state) {
case State.DATA: {
this._stateData(cp);
break;
}
case State.RCDATA: {
this._stateRcdata(cp);
break;
}
case State.RAWTEXT: {
this._stateRawtext(cp);
break;
}
case State.SCRIPT_DATA: {
this._stateScriptData(cp);
break;
}
case State.PLAINTEXT: {
this._statePlaintext(cp);
break;
}
case State.TAG_OPEN: {
this._stateTagOpen(cp);
break;
}
case State.END_TAG_OPEN: {
this._stateEndTagOpen(cp);
break;
}
case State.TAG_NAME: {
this._stateTagName(cp);
break;
}
case State.RCDATA_LESS_THAN_SIGN: {
this._stateRcdataLessThanSign(cp);
break;
}
case State.RCDATA_END_TAG_OPEN: {
this._stateRcdataEndTagOpen(cp);
break;
}
case State.RCDATA_END_TAG_NAME: {
this._stateRcdataEndTagName(cp);
break;
}
case State.RAWTEXT_LESS_THAN_SIGN: {
this._stateRawtextLessThanSign(cp);
break;
}
case State.RAWTEXT_END_TAG_OPEN: {
this._stateRawtextEndTagOpen(cp);
break;
}
case State.RAWTEXT_END_TAG_NAME: {
this._stateRawtextEndTagName(cp);
break;
}
case State.SCRIPT_DATA_LESS_THAN_SIGN: {
this._stateScriptDataLessThanSign(cp);
break;
}
case State.SCRIPT_DATA_END_TAG_OPEN: {
this._stateScriptDataEndTagOpen(cp);
break;
}
case State.SCRIPT_DATA_END_TAG_NAME: {
this._stateScriptDataEndTagName(cp);
break;
}
case State.SCRIPT_DATA_ESCAPE_START: {
this._stateScriptDataEscapeStart(cp);
break;
}
case State.SCRIPT_DATA_ESCAPE_START_DASH: {
this._stateScriptDataEscapeStartDash(cp);
break;
}
case State.SCRIPT_DATA_ESCAPED: {
this._stateScriptDataEscaped(cp);
break;
}
case State.SCRIPT_DATA_ESCAPED_DASH: {
this._stateScriptDataEscapedDash(cp);
break;
}
case State.SCRIPT_DATA_ESCAPED_DASH_DASH: {
this._stateScriptDataEscapedDashDash(cp);
break;
}
case State.SCRIPT_DATA_ESCAPED_LESS_THAN_SIGN: {
this._stateScriptDataEscapedLessThanSign(cp);
break;
}
case State.SCRIPT_DATA_ESCAPED_END_TAG_OPEN: {
this._stateScriptDataEscapedEndTagOpen(cp);
break;
}
case State.SCRIPT_DATA_ESCAPED_END_TAG_NAME: {
this._stateScriptDataEscapedEndTagName(cp);
break;
}
case State.SCRIPT_DATA_DOUBLE_ESCAPE_START: {
this._stateScriptDataDoubleEscapeStart(cp);
break;
}
case State.SCRIPT_DATA_DOUBLE_ESCAPED: {
this._stateScriptDataDoubleEscaped(cp);
break;
}
case State.SCRIPT_DATA_DOUBLE_ESCAPED_DASH: {
this._stateScriptDataDoubleEscapedDash(cp);
break;
}
case State.SCRIPT_DATA_DOUBLE_ESCAPED_DASH_DASH: {
this._stateScriptDataDoubleEscapedDashDash(cp);
break;
}
case State.SCRIPT_DATA_DOUBLE_ESCAPED_LESS_THAN_SIGN: {
this._stateScriptDataDoubleEscapedLessThanSign(cp);
break;
}
case State.SCRIPT_DATA_DOUBLE_ESCAPE_END: {
this._stateScriptDataDoubleEscapeEnd(cp);
break;
}
case State.BEFORE_ATTRIBUTE_NAME: {
this._stateBeforeAttributeName(cp);
break;
}
case State.ATTRIBUTE_NAME: {
this._stateAttributeName(cp);
break;
}
case State.AFTER_ATTRIBUTE_NAME: {
this._stateAfterAttributeName(cp);
break;
}
case State.BEFORE_ATTRIBUTE_VALUE: {
this._stateBeforeAttributeValue(cp);
break;
}
case State.ATTRIBUTE_VALUE_DOUBLE_QUOTED: {
this._stateAttributeValueDoubleQuoted(cp);
break;
}
case State.ATTRIBUTE_VALUE_SINGLE_QUOTED: {
this._stateAttributeValueSingleQuoted(cp);
break;
}
case State.ATTRIBUTE_VALUE_UNQUOTED: {
this._stateAttributeValueUnquoted(cp);
break;
}
case State.AFTER_ATTRIBUTE_VALUE_QUOTED: {
this._stateAfterAttributeValueQuoted(cp);
break;
}
case State.SELF_CLOSING_START_TAG: {
this._stateSelfClosingStartTag(cp);
break;
}
case State.BOGUS_COMMENT: {
this._stateBogusComment(cp);
break;
}
case State.MARKUP_DECLARATION_OPEN: {
this._stateMarkupDeclarationOpen(cp);
break;
}
case State.COMMENT_START: {
this._stateCommentStart(cp);
break;
}
case State.COMMENT_START_DASH: {
this._stateCommentStartDash(cp);
break;
}
case State.COMMENT: {
this._stateComment(cp);
break;
}
case State.COMMENT_LESS_THAN_SIGN: {
this._stateCommentLessThanSign(cp);
break;
}
case State.COMMENT_LESS_THAN_SIGN_BANG: {
this._stateCommentLessThanSignBang(cp);
break;
}
case State.COMMENT_LESS_THAN_SIGN_BANG_DASH: {
this._stateCommentLessThanSignBangDash(cp);
break;
}
case State.COMMENT_LESS_THAN_SIGN_BANG_DASH_DASH: {
this._stateCommentLessThanSignBangDashDash(cp);
break;
}
case State.COMMENT_END_DASH: {
this._stateCommentEndDash(cp);
break;
}
case State.COMMENT_END: {
this._stateCommentEnd(cp);
break;
}
case State.COMMENT_END_BANG: {
this._stateCommentEndBang(cp);
break;
}
case State.DOCTYPE: {
this._stateDoctype(cp);
break;
}
case State.BEFORE_DOCTYPE_NAME: {
this._stateBeforeDoctypeName(cp);
break;
}
case State.DOCTYPE_NAME: {
this._stateDoctypeName(cp);
break;
}
case State.AFTER_DOCTYPE_NAME: {
this._stateAfterDoctypeName(cp);
break;
}
case State.AFTER_DOCTYPE_PUBLIC_KEYWORD: {
this._stateAfterDoctypePublicKeyword(cp);
break;
}
case State.BEFORE_DOCTYPE_PUBLIC_IDENTIFIER: {
this._stateBeforeDoctypePublicIdentifier(cp);
break;
}
case State.DOCTYPE_PUBLIC_IDENTIFIER_DOUBLE_QUOTED: {
this._stateDoctypePublicIdentifierDoubleQuoted(cp);
break;
}
case State.DOCTYPE_PUBLIC_IDENTIFIER_SINGLE_QUOTED: {
this._stateDoctypePublicIdentifierSingleQuoted(cp);
break;
}
case State.AFTER_DOCTYPE_PUBLIC_IDENTIFIER: {
this._stateAfterDoctypePublicIdentifier(cp);
break;
}
case State.BETWEEN_DOCTYPE_PUBLIC_AND_SYSTEM_IDENTIFIERS: {
this._stateBetweenDoctypePublicAndSystemIdentifiers(cp);
break;
}
case State.AFTER_DOCTYPE_SYSTEM_KEYWORD: {
this._stateAfterDoctypeSystemKeyword(cp);
break;
}
case State.BEFORE_DOCTYPE_SYSTEM_IDENTIFIER: {
this._stateBeforeDoctypeSystemIdentifier(cp);
break;
}
case State.DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED: {
this._stateDoctypeSystemIdentifierDoubleQuoted(cp);
break;
}
case State.DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED: {
this._stateDoctypeSystemIdentifierSingleQuoted(cp);
break;
}
case State.AFTER_DOCTYPE_SYSTEM_IDENTIFIER: {
this._stateAfterDoctypeSystemIdentifier(cp);
break;
}
case State.BOGUS_DOCTYPE: {
this._stateBogusDoctype(cp);
break;
}
case State.CDATA_SECTION: {
this._stateCdataSection(cp);
break;
}
case State.CDATA_SECTION_BRACKET: {
this._stateCdataSectionBracket(cp);
break;
}
case State.CDATA_SECTION_END: {
this._stateCdataSectionEnd(cp);
break;
}
case State.CHARACTER_REFERENCE: {
this._stateCharacterReference();
break;
}
case State.AMBIGUOUS_AMPERSAND: {
this._stateAmbiguousAmpersand(cp);
break;
}
default: {
throw new Error("Unknown state");
}
}
}
// State machine
// Data state
//------------------------------------------------------------------
_stateData(cp) {
switch (cp) {
case CODE_POINTS.LESS_THAN_SIGN: {
this.state = State.TAG_OPEN;
break;
}
case CODE_POINTS.AMPERSAND: {
this._startCharacterReference();
break;
}
case CODE_POINTS.NULL: {
this._err(ERR.unexpectedNullCharacter);
this._emitCodePoint(cp);
break;
}
case CODE_POINTS.EOF: {
this._emitEOFToken();
break;
}
default: {
this._emitCodePoint(cp);
}
}
}
// RCDATA state
//------------------------------------------------------------------
_stateRcdata(cp) {
switch (cp) {
case CODE_POINTS.AMPERSAND: {
this._startCharacterReference();
break;
}
case CODE_POINTS.LESS_THAN_SIGN: {
this.state = State.RCDATA_LESS_THAN_SIGN;
break;
}
case CODE_POINTS.NULL: {
this._err(ERR.unexpectedNullCharacter);
this._emitChars(REPLACEMENT_CHARACTER);
break;
}
case CODE_POINTS.EOF: {
this._emitEOFToken();
break;
}
default: {
this._emitCodePoint(cp);
}
}
}
// RAWTEXT state
//------------------------------------------------------------------
_stateRawtext(cp) {
switch (cp) {
case CODE_POINTS.LESS_THAN_SIGN: {
this.state = State.RAWTEXT_LESS_THAN_SIGN;
break;
}
case CODE_POINTS.NULL: {
this._err(ERR.unexpectedNullCharacter);
this._emitChars(REPLACEMENT_CHARACTER);
break;
}
case CODE_POINTS.EOF: {
this._emitEOFToken();
break;
}
default: {
this._emitCodePoint(cp);
}
}
}
// Script data state
//------------------------------------------------------------------
_stateScriptData(cp) {
switch (cp) {
case CODE_POINTS.LESS_THAN_SIGN: {
this.state = State.SCRIPT_DATA_LESS_THAN_SIGN;
break;
}
case CODE_POINTS.NULL: {
this._err(ERR.unexpectedNullCharacter);
this._emitChars(REPLACEMENT_CHARACTER);
break;
}
case CODE_POINTS.EOF: {
this._emitEOFToken();
break;
}
default: {
this._emitCodePoint(cp);
}
}
}
// PLAINTEXT state
//------------------------------------------------------------------
_statePlaintext(cp) {
switch (cp) {
case CODE_POINTS.NULL: {
this._err(ERR.unexpectedNullCharacter);
this._emitChars(REPLACEMENT_CHARACTER);
break;
}
case CODE_POINTS.EOF: {
this._emitEOFToken();
break;
}
default: {
this._emitCodePoint(cp);
}
}
}
// Tag open state
//------------------------------------------------------------------
_stateTagOpen(cp) {
if (isAsciiLetter(cp)) {
this._createStartTagToken();
this.state = State.TAG_NAME;
this._stateTagName(cp);
} else
switch (cp) {
case CODE_POINTS.EXCLAMATION_MARK: {
this.state = State.MARKUP_DECLARATION_OPEN;
break;
}
case CODE_POINTS.SOLIDUS: {
this.state = State.END_TAG_OPEN;
break;
}
case CODE_POINTS.QUESTION_MARK: {
this._err(ERR.unexpectedQuestionMarkInsteadOfTagName);
this._createCommentToken(1);
this.state = State.BOGUS_COMMENT;
this._stateBogusComment(cp);
break;
}
case CODE_POINTS.EOF: {
this._err(ERR.eofBeforeTagName);
this._emitChars("<");
this._emitEOFToken();
break;
}
default: {
this._err(ERR.invalidFirstCharacterOfTagName);
this._emitChars("<");
this.state = State.DATA;
this._stateData(cp);
}
}
}
// End tag open state
//------------------------------------------------------------------
_stateEndTagOpen(cp) {
if (isAsciiLetter(cp)) {
this._createEndTagToken();
this.state = State.TAG_NAME;
this._stateTagName(cp);
} else
switch (cp) {
case CODE_POINTS.GREATER_THAN_SIGN: {
this._err(ERR.missingEndTagName);
this.state = State.DATA;
break;
}
case CODE_POINTS.EOF: {
this._err(ERR.eofBeforeTagName);
this._emitChars("</");
this._emitEOFToken();
break;
}
default: {
this._err(ERR.invalidFirstCharacterOfTagName);
this._createCommentToken(2);
this.state = State.BOGUS_COMMENT;
this._stateBogusComment(cp);
}
}
}
// Tag name state
//------------------------------------------------------------------
_stateTagName(cp) {
const token = this.currentToken;
switch (cp) {
case CODE_POINTS.SPACE:
case CODE_POINTS.LINE_FEED:
case CODE_POINTS.TABULATION:
case CODE_POINTS.FORM_FEED: {
this.state = State.BEFORE_ATTRIBUTE_NAME;
break;
}
case CODE_POINTS.SOLIDUS: {
this.state = State.SELF_CLOSING_START_TAG;
break;
}
case CODE_POINTS.GREATER_THAN_SIGN: {
this.state = State.DATA;
this.emitCurrentTagToken();
break;
}
case CODE_POINTS.NULL: {
this._err(ERR.unexpectedNullCharacter);
token.tagName += REPLACEMENT_CHARACTER;
break;
}
case CODE_POINTS.EOF: {
this._err(ERR.eofInTag);
this._emitEOFToken();
break;
}
default: {
token.tagName += String.fromCodePoint(isAsciiUpper(cp) ? toAsciiLower(cp) : cp);
}
}
}
// RCDATA less-than sign state
//------------------------------------------------------------------
_stateRcdataLessThanSign(cp) {
if (cp === CODE_POINTS.SOLIDUS) {
this.state = State.RCDATA_END_TAG_OPEN;
} else {
this._emitChars("<");
this.state = State.RCDATA;
this._stateRcdata(cp);
}
}
// RCDATA end tag open state
//------------------------------------------------------------------
_stateRcdataEndTagOpen(cp) {
if (isAsciiLetter(cp)) {
this.state = State.RCDATA_END_TAG_NAME;
this._stateRcdataEndTagName(cp);
} else {
this._emitChars("</");
this.state = State.RCDATA;
this._stateRcdata(cp);
}
}
handleSpecialEndTag(_cp) {
if (!this.preprocessor.startsWith(this.lastStartTagName, false)) {
return !this._ensureHibernation();
}
this._createEndTagToken();
const token = this.currentToken;
token.tagName = this.lastStartTagName;
const cp = this.preprocessor.peek(this.lastStartTagName.length);
switch (cp) {
case CODE_POINTS.SPACE:
case CODE_POINTS.LINE_FEED:
case CODE_POINTS.TABULATION:
case CODE_POINTS.FORM_FEED: {
this._advanceBy(this.lastStartTagName.length);
this.state = State.BEFORE_ATTRIBUTE_NAME;
return false;
}
case CODE_POINTS.SOLIDUS: {
this._advanceBy(this.lastStartTagName.length);
this.state = State.SELF_CLOSING_START_TAG;
return false;
}
case CODE_POINTS.GREATER_THAN_SIGN: {
this._advanceBy(this.lastStartTagName.length);
this.emitCurrentTagToken();
this.state = State.DATA;
return false;
}
default: {
return !this._ensureHibernation();
}
}
}
// RCDATA end tag name state
//------------------------------------------------------------------
_stateRcdataEndTagName(cp) {
if (this.handleSpecialEndTag(cp)) {
this._emitChars("</");
this.state = State.RCDATA;
this._stateRcdata(cp);
}
}
// RAWTEXT less-than sign state
//------------------------------------------------------------------
_stateRawtextLessThanSign(cp) {
if (cp === CODE_POINTS.SOLIDUS) {
this.state = State.RAWTEXT_END_TAG_OPEN;
} else {
this._emitChars("<");
this.state = State.RAWTEXT;
this._stateRawtext(cp);
}
}
// RAWTEXT end tag open state
//------------------------------------------------------------------
_stateRawtextEndTagOpen(cp) {
if (isAsciiLetter(cp)) {
this.state = State.RAWTEXT_END_TAG_NAME;
this._stateRawtextEndTagName(cp);
} else {
this._emitChars("</");
this.state = State.RAWTEXT;
this._stateRawtext(cp);
}
}
// RAWTEXT end tag name state
//------------------------------------------------------------------
_stateRawtextEndTagName(cp) {
if (this.handleSpecialEndTag(cp)) {
this._emitChars("</");
this.state = State.RAWTEXT;
this._stateRawtext(cp);
}
}
// Script data less-than sign state
//------------------------------------------------------------------
_stateScriptDataLessThanSign(cp) {
switch (cp) {
case CODE_POINTS.SOLIDUS: {
this.state = State.SCRIPT_DATA_END_TAG_OPEN;
break;
}
case CODE_POINTS.EXCLAMATION_MARK: {
this.state = State.SCRIPT_DATA_ESCAPE_START;
this._emitChars("<!");
break;
}
default: {
this._emitChars("<");
this.state = State.SCRIPT_DATA;
this._stateScriptData(cp);
}
}
}
// Script data end tag open state
//------------------------------------------------------------------
_stateScriptDataEndTagOpen(cp) {
if (isAsciiLetter(cp)) {
this.state = State.SCRIPT_DATA_END_TAG_NAME;
this._stateScriptDataEndTagName(cp);
} else {
this._emitChars("</");
this.state = State.SCRIPT_DATA;
this._stateScriptData(cp);
}
}
// Script data end tag name state
//------------------------------------------------------------------
_stateScriptDataEndTagName(cp) {
if (this.handleSpecialEndTag(cp)) {
this._emitChars("</");
this.state = State.SCRIPT_DATA;
this._stateScriptData(cp);
}
}
// Script data escape start state
//------------------------------------------------------------------
_stateScriptDataEscapeStart(cp) {
if (cp === CODE_POINTS.HYPHEN_MINUS) {
this.state = State.SCRIPT_DATA_ESCAPE_START_DASH;
this._emitChars("-");
} else {
this.state = State.SCRIPT_DATA;
this._stateScriptData(cp);
}
}
// Script data escape start dash state
//------------------------------------------------------------------
_stateScriptDataEscapeStartDash(cp) {
if (cp === CODE_POINTS.HYPHEN_MINUS) {
this.state = State.SCRIPT_DATA_ESCAPED_DASH_DASH;
this._emitChars("-");
} else {
this.state = State.SCRIPT_DATA;
this._stateScriptData(cp);
}
}
// Script data escaped state
//------------------------------------------------------------------
_stateScriptDataEscaped(cp) {
switch (cp) {
case CODE_POINTS.HYPHEN_MINUS: {
this.state = State.SCRIPT_DATA_ESCAPED_DASH;
this._emitChars("-");
break;
}
case CODE_POINTS.LESS_THAN_SIGN: {
this.state = State.SCRIPT_DATA_ESCAPED_LESS_THAN_SIGN;
break;
}
case CODE_POINTS.NULL: {
this._err(ERR.unexpectedNullCharacter);
this._emitChars(REPLACEMENT_CHARACTER);
break;
}
case CODE_POINTS.EOF: {
this._err(ERR.eofInScriptHtmlCommentLikeText);
this._emitEOFToken();
break;
}
default: {
this._emitCodePoint(cp);
}
}
}
// Script data escaped dash state
//------------------------------------------------------------------
_stateScriptDataEscapedDash(cp) {
switch (cp) {
case CODE_POINTS.HYPHEN_MINUS: {
this.state = State.SCRIPT_DATA_ESCAPED_DASH_DASH;
this._emitChars("-");
break;
}
case CODE_POINTS.LESS_THAN_SIGN: {
this.state = State.SCRIPT_DATA_ESCAPED_LESS_THAN_SIGN;
break;
}
case CODE_POINTS.NULL: {
this._err(ERR.unexpectedNullCharacter);
this.state = State.SCRIPT_DATA_ESCAPED;
this._emitChars(REPLACEMENT_CHARACTER);
break;
}
case CODE_POINTS.EOF: {
this._err(ERR.eofInScriptHtmlCommentLikeText);
this._emitEOFToken();
break;
}
default: {
this.state = State.SCRIPT_DATA_ESCAPED;
this._emitCodePoint(cp);
}
}
}
// Script data escaped dash dash state
//------------------------------------------------------------------
_stateScriptDataEscapedDashDash(cp) {
switch (cp) {
case CODE_POINTS.HYPHEN_MINUS: {
this._emitChars("-");
break;
}
case CODE_POINTS.LESS_THAN_SIGN: {
this.state = State.SCRIPT_DATA_ESCAPED_LESS_THAN_SIGN;
break;
}
case CODE_POINTS.GREATER_THAN_SIGN: {
this.state = State.SCRIPT_DATA;
this._emitChars(">");
break;
}
case CODE_POINTS.NULL: {
this._err(ERR.unexpectedNullCharacter);
this.state = State.SCRIPT_DATA_ESCAPED;
this._emitChars(REPLACEMENT_CHARACTER);
break;
}
case CODE_POINTS.EOF: {
this._err(ERR.eofInScriptHtmlCommentLikeText);
this._emitEOFToken();
break;
}
default: {
this.state = State.SCRIPT_DATA_ESCAPED;
this._emitCodePoint(cp);
}
}
}
// Script data escaped less-than sign state
//------------------------------------------------------------------
_stateScriptDataEscapedLessThanSign(cp) {
if (cp === CODE_POINTS.SOLIDUS) {
this.state = State.SCRIPT_DATA_ESCAPED_END_TAG_OPEN;
} else if (isAsciiLetter(cp)) {
this._emitChars("<");
this.state = State.SCRIPT_DATA_DOUBLE_ESCAPE_START;
this._stateScriptDataDoubleEscapeStart(cp);
} else {
this._emitChars("<");
this.state = State.SCRIPT_DATA_ESCAPED;
this._stateScriptDataEscaped(cp);
}
}
// Script data escaped end tag open state
//------------------------------------------------------------------
_stateScriptDataEscapedEndTagOpen(cp) {
if (isAsciiLetter(cp)) {
this.state = State.SCRIPT_DATA_ESCAPED_END_TAG_NAME;
this._stateScriptDataEscapedEndTagName(cp);
} else {
this._emitChars("</");
this.state = State.SCRIPT_DATA_ESCAPED;
this._stateScriptDataEscaped(cp);
}
}
// Script data escaped end tag name state
//------------------------------------------------------------------
_stateScriptDataEscapedEndTagName(cp) {
if (this.handleSpecialEndTag(cp)) {
this._emitChars("</");
this.state = State.SCRIPT_DATA_ESCAPED;
this._stateScriptDataEscaped(cp);
}
}
// Script data double escape start state
//------------------------------------------------------------------
_stateScriptDataDoubleEscapeStart(cp) {
if (this.preprocessor.startsWith(SEQUENCES.SCRIPT, false) && isScriptDataDoubleEscapeSequenceEnd(this.preprocessor.peek(SEQUENCES.SCRIPT.length))) {
this._emitCodePoint(cp);
for (let i = 0; i < SEQUENCES.SCRIPT.length; i++) {
this._emitCodePoint(this._consume());
}
this.state = State.SCRIPT_DATA_DOUBLE_ESCAPED;
} else if (!this._ensureHibernation()) {
this.state = State.SCRIPT_DATA_ESCAPED;
this._stateScriptDataEscaped(cp);
}
}
// Script data double escaped state
//------------------------------------------------------------------
_stateScriptDataDoubleEscaped(cp) {
switch (cp) {
case CODE_POINTS.HYPHEN_MINUS: {
this.state = State.SCRIPT_DATA_DOUBLE_ESCAPED_DASH;
this._emitChars("-");
break;
}
case CODE_POINTS.LESS_THAN_SIGN: {
this.state = State.SCRIPT_DATA_DOUBLE_ESCAPED_LESS_THAN_SIGN;
this._emitChars("<");
break;
}
case CODE_POINTS.NULL: {
this._err(ERR.unexpectedNullCharacter);
this._emitChars(REPLACEMENT_CHARACTER);
break;
}
case CODE_POINTS.EOF: {
this._err(ERR.eofInScriptHtmlCommentLikeText);
this._emitEOFToken();
break;
}
default: {
this._emitCodePoint(cp);
}
}
}
// Script data double escaped dash state
//------------------------------------------------------------------
_stateScriptDataDoubleEscapedDash(cp) {
switch (cp) {
case CODE_POINTS.HYPHEN_MINUS: {
this.state = State.SCRIPT_DATA_DOUBLE_ESCAPED_DASH_DASH;
this._emitChars("-");
break;
}
case CODE_POINTS.LESS_THAN_SIGN: {
this.state = State.SCRIPT_DATA_DOUBLE_ESCAPED_LESS_THAN_SIGN;
this._emitChars("<");
break;
}
case CODE_POINTS.NULL: {
this._err(ERR.unexpectedNullCharacter);
this.state = State.SCRIPT_DATA_DOUBLE_ESCAPED;
this._emitChars(REPLACEMENT_CHARACTER);
break;
}
case CODE_POINTS.EOF: {
this._err(ERR.eofInScriptHtmlCommentLikeText);
this._emitEOFToken();
break;
}
default: {
this.state = State.SCRIPT_DATA_DOUBLE_ESCAPED;
this._emitCodePoint(cp);
}
}
}
// Script data double escaped dash dash state
//------------------------------------------------------------------
_stateScriptDataDoubleEscapedDashDash(cp) {
switch (cp) {
case CODE_POINTS.HYPHEN_MINUS: {
this._emitChars("-");
break;
}
case CODE_POINTS.LESS_THAN_SIGN: {
this.state = State.SCRIPT_DATA_DOUBLE_ESCAPED_LESS_THAN_SIGN;
this._emitChars("<");
break;
}
case CODE_POINTS.GREATER_THAN_SIGN: {
this.state = State.SCRIPT_DATA;
this._emitChars(">");
break;
}
case CODE_POINTS.NULL: {
this._err(ERR.unexpectedNullCharacter);
this.state = State.SCRIPT_DATA_DOUBLE_ESCAPED;
this._emitChars(REPLACEMENT_CHARACTER);
break;
}
case CODE_POINTS.EOF: {
this._err(ERR.eofInScriptHtmlCommentLikeText);
this._emitEOFToken();
break;
}
default: {
this.state = State.SCRIPT_DATA_DOUBLE_ESCAPED;
this._emitCodePoint(cp);
}
}
}
// Script data double escaped less-than sign state
//------------------------------------------------------------------
_stateScriptDataDoubleEscapedLessThanSign(cp) {
if (cp === CODE_POINTS.SOLIDUS) {
this.state = State.SCRIPT_DATA_DOUBLE_ESCAPE_END;
this._emitChars("/");
} else {
this.state = State.SCRIPT_DATA_DOUBLE_ESCAPED;
this._stateScriptDataDoubleEscaped(cp);
}
}
// Script data double escape end state
//------------------------------------------------------------------
_stateScriptDataDoubleEscapeEnd(cp) {
if (this.preprocessor.startsWith(SEQUENCES.SCRIPT, false) && isScriptDataDoubleEscapeSequenceEnd(this.preprocessor.peek(SEQUENCES.SCRIPT.length))) {
this._emitCodePoint(cp);
for (let i = 0; i < SEQUENCES.SCRIPT.length; i++) {
this._emitCodePoint(this._consume());
}
this.state = State.SCRIPT_DATA_ESCAPED;
} else if (!this._ensureHibernation()) {
this.state = State.SCRIPT_DATA_DOUBLE_ESCAPED;
this._stateScriptDataDoubleEscaped(cp);
}
}
// Before attribute name state
//------------------------------------------------------------------
_stateBeforeAttributeName(cp) {
switch (cp) {
case CODE_POINTS.SPACE:
case CODE_POINTS.LINE_FEED:
case CODE_POINTS.TABULATION:
case CODE_POINTS.FORM_FEED: {
break;
}
case CODE_POINTS.SOLIDUS:
case CODE_POINTS.GREATER_THAN_SIGN:
case CODE_POINTS.EOF: {
this.state = State.AFTER_ATTRIBUTE_NAME;
this._stateAfterAttributeName(cp);
break;
}
case CODE_POINTS.EQUALS_SIGN: {
this._err(ERR.unexpectedEqualsSignBeforeAttributeName);
this._createAttr("=");
this.state = State.ATTRIBUTE_NAME;
break;
}
default: {
this._createAttr("");
this.state = State.ATTRIBUTE_NAME;
this._stateAttributeName(cp);
}
}
}
// Attribute name state
//------------------------------------------------------------------
_stateAttributeName(cp) {
switch (cp) {
case CODE_POINTS.SPACE:
case CODE_POINTS.LINE_FEED:
case CODE_POINTS.TABULATION:
case CODE_POINTS.FORM_FEED:
case CODE_POINTS.SOLIDUS:
case CODE_POINTS.GREATER_THAN_SIGN:
case CODE_POINTS.EOF: {
this._leaveAttrName();
this.state = State.AFTER_ATTRIBUTE_NAME;
this._stateAfterAttributeName(cp);
break;
}
case CODE_POINTS.EQUALS_SIGN: {
this._leaveAttrName();
this.state = State.BEFORE_ATTRIBUTE_VALUE;
break;
}
case CODE_POINTS.QUOTATION_MARK:
case CODE_POINTS.APOSTROPHE:
case CODE_POINTS.LESS_THAN_SIGN: {
this._err(ERR.unexpectedCharacterInAttributeName);
this.currentAttr.name += String.fromCodePoint(cp);
break;
}
case CODE_POINTS.NULL: {
this._err(ERR.unexpectedNullCharacter);
this.currentAttr.name += REPLACEMENT_CHARACTER;
break;
}
default: {
this.currentAttr.name += String.fromCodePoint(isAsciiUpper(cp) ? toAsciiLower(cp) : cp);
}
}
}
// After attribute name state
//------------------------------------------------------------------
_stateAfterAttributeName(cp) {
switch (cp) {
case CODE_POINTS.SPACE:
case CODE_POINTS.LINE_FEED:
case CODE_POINTS.TABULATION:
case CODE_POINTS.FORM_FEED: {
break;
}
case CODE_POINTS.SOLIDUS: {
this.state = State.SELF_CLOSING_START_TAG;
break;
}
case CODE_POINTS.EQUALS_SIGN: {
this.state = State.BEFORE_ATTRIBUTE_VALUE;
break;
}
case CODE_POINTS.GREATER_THAN_SIGN: {
this.state = State.DATA;
this.emitCurrentTagToken();
break;
}
case CODE_POINTS.EOF: {
this._err(ERR.eofInTag);
this._emitEOFToken();
break;
}
default: {
this._createAttr("");
this.state = State.ATTRIBUTE_NAME;
this._stateAttributeName(cp);
}
}
}
// Before attribute value state
//------------------------------------------------------------------
_stateBeforeAttributeValue(cp) {
switch (cp) {
case CODE_POINTS.SPACE:
case CODE_POINTS.LINE_FEED:
case CODE_POINTS.TABULATION:
case CODE_POINTS.FORM_FEED: {
break;
}
case CODE_POINTS.QUOTATION_MARK: {
this.state = State.ATTRIBUTE_VALUE_DOUBLE_QUOTED;
break;
}
case CODE_POINTS.APOSTROPHE: {
this.state = State.ATTRIBUTE_VALUE_SINGLE_QUOTED;
break;
}
case CODE_POINTS.GREATER_THAN_SIGN: {
this._err(ERR.missingAttributeValue);
this.state = State.DATA;
this.emitCurrentTagToken();
break;
}
default: {
this.state = State.ATTRIBUTE_VALUE_UNQUOTED;
this._stateAttributeValueUnquoted(cp);
}
}
}
// Attribute value (double-quoted) state
//------------------------------------------------------------------
_stateAttributeValueDoubleQuoted(cp) {
switch (cp) {
case CODE_POINTS.QUOTATION_MARK: {
this.state = State.AFTER_ATTRIBUTE_VALUE_QUOTED;
break;
}
case CODE_POINTS.AMPERSAND: {
this._startCharacterReference();
break;
}
case CODE_POINTS.NULL: {
this._err(ERR.unexpectedNullCharacter);
this.currentAttr.value += REPLACEMENT_CHARACTER;
break;
}
case CODE_POINTS.EOF: {
this._err(ERR.eofInTag);
this._emitEOFToken();
break;
}
default: {
this.currentAttr.value += String.fromCodePoint(cp);
}
}
}
// Attribute value (single-quoted) state
//------------------------------------------------------------------
_stateAttributeValueSingleQuoted(cp) {
switch (cp) {
case CODE_POINTS.APOSTROPHE: {
this.state = State.AFTER_ATTRIBUTE_VALUE_QUOTED;
break;
}
case CODE_POINTS.AMPERSAND: {
this._startCharacterReference();
break;
}
case CODE_POINTS.NULL: {
this._err(ERR.unexpectedNullCharacter);
this.currentAttr.value += REPLACEMENT_CHARACTER;
break;
}
case CODE_POINTS.EOF: {
this._err(ERR.eofInTag);
this._emitEOFToken();
break;
}
default: {
this.currentAttr.value += String.fromCodePoint(cp);
}
}
}
// Attribute value (unquoted) state
//------------------------------------------------------------------
_stateAttributeValueUnquoted(cp) {
switch (cp) {
case CODE_POINTS.SPACE:
case CODE_POINTS.LINE_FEED:
case CODE_POINTS.TABULATION:
case CODE_POINTS.FORM_FEED: {
this._leaveAttrValue();
this.state = State.BEFORE_ATTRIBUTE_NAME;
break;
}
case CODE_POINTS.AMPERSAND: {
this._startCharacterReference();
break;
}
case CODE_POINTS.GREATER_THAN_SIGN: {
this._leaveAttrValue();
this.state = State.DATA;
this.emitCurrentTagToken();
break;
}
case CODE_POINTS.NULL: {
this._err(ERR.unexpectedNullCharacter);
this.currentAttr.value += REPLACEMENT_CHARACTER;
break;
}
case CODE_POINTS.QUOTATION_MARK:
case CODE_POINTS.APOSTROPHE:
case CODE_POINTS.LESS_THAN_SIGN:
case CODE_POINTS.EQUALS_SIGN:
case CODE_POINTS.GRAVE_ACCENT: {
this._err(ERR.unexpectedCharacterInUnquotedAttributeValue);
this.currentAttr.value += String.fromCodePoint(cp);
break;
}
case CODE_POINTS.EOF: {
this._err(ERR.eofInTag);
this._emitEOFToken();
break;
}
default: {
this.currentAttr.value += String.fromCodePoint(cp);
}
}
}
// After attribute value (quoted) state
//------------------------------------------------------------------
_stateAfterAttributeValueQuoted(cp) {
switch (cp) {
case CODE_POINTS.SPACE:
case CODE_POINTS.LINE_FEED:
case CODE_POINTS.TABULATION:
case CODE_POINTS.FORM_FEED: {
this._leaveAttrValue();
this.state = State.BEFORE_ATTRIBUTE_NAME;
break;
}
case CODE_POINTS.SOLIDUS: {
this._leaveAttrValue();
this.state = State.SELF_CLOSING_START_TAG;
break;
}
case CODE_POINTS.GREATER_THAN_SIGN: {
this._leaveAttrValue();
this.state = State.DATA;
this.emitCurrentTagToken();
break;
}
case CODE_POINTS.EOF: {
this._err(ERR.eofInTag);
this._emitEOFToken();
break;
}
default: {
this._err(ERR.missingWhitespaceBetweenAttributes);
this.state = State.BEFORE_ATTRIBUTE_NAME;
this._stateBeforeAttributeName(cp);
}
}
}
// Self-closing start tag state
//------------------------------------------------------------------
_stateSelfClosingStartTag(cp) {
switch (cp) {
case CODE_POINTS.GREATER_THAN_SIGN: {
const token = this.currentToken;
token.selfClosing = true;
this.state = State.DATA;
this.emitCurrentTagToken();
break;
}
case CODE_POINTS.EOF: {
this._err(ERR.eofInTag);
this._emitEOFToken();
break;
}
default: {
this._err(ERR.unexpectedSolidusInTag);
this.state = State.BEFORE_ATTRIBUTE_NAME;
this._stateBeforeAttributeName(cp);
}
}
}
// Bogus comment state
//------------------------------------------------------------------
_stateBogusComment(cp) {
const token = this.currentToken;
switch (cp) {
case CODE_POINTS.GREATER_THAN_SIGN: {
this.state = State.DATA;
this.emitCurrentComment(token);
break;
}
case CODE_POINTS.EOF: {
this.emitCurrentComment(token);
this._emitEOFToken();
break;
}
case CODE_POINTS.NULL: {
this._err(ERR.unexpectedNullCharacter);
token.data += REPLACEMENT_CHARACTER;
break;
}
default: {
token.data += String.fromCodePoint(cp);
}
}
}
// Markup declaration open state
//------------------------------------------------------------------
_stateMarkupDeclarationOpen(cp) {
if (this._consumeSequenceIfMatch(SEQUENCES.DASH_DASH, true)) {
this._createCommentToken(SEQUENCES.DASH_DASH.length + 1);
this.state = State.COMMENT_START;
} else if (this._consumeSequenceIfMatch(SEQUENCES.DOCTYPE, false)) {
this.currentLocation = this.getCurrentLocation(SEQUENCES.DOCTYPE.length + 1);
this.state = State.DOCTYPE;
} else if (this._consumeSequenceIfMatch(SEQUENCES.CDATA_START, true)) {
if (this.inForeignNode) {
this.state = State.CDATA_SECTION;
} else {
this._err(ERR.cdataInHtmlContent);
this._createCommentToken(SEQUENCES.CDATA_START.length + 1);
this.currentToken.data = "[CDATA[";
this.state = State.BOGUS_COMMENT;
}
} else if (!this._ensureHibernation()) {
this._err(ERR.incorrectlyOpenedComment);
this._createCommentToken(2);
this.state = State.BOGUS_COMMENT;
this._stateBogusComment(cp);
}
}
// Comment start state
//------------------------------------------------------------------
_stateCommentStart(cp) {
switch (cp) {
case CODE_POINTS.HYPHEN_MINUS: {
this.state = State.COMMENT_START_DASH;
break;
}
case CODE_POINTS.GREATER_THAN_SIGN: {
this._err(ERR.abruptClosingOfEmptyComment);
this.state = State.DATA;
const token = this.currentToken;
this.emitCurrentComment(token);
break;
}
default: {
this.state = State.COMMENT;
this._stateComment(cp);
}
}
}
// Comment start dash state
//------------------------------------------------------------------
_stateCommentStartDash(cp) {
const token = this.currentToken;
switch (cp) {
case CODE_POINTS.HYPHEN_MINUS: {
this.state = State.COMMENT_END;
break;
}
case CODE_POINTS.GREATER_THAN_SIGN: {
this._err(ERR.abruptClosingOfEmptyComment);
this.state = State.DATA;
this.emitCurrentComment(token);
break;
}
case CODE_POINTS.EOF: {
this._err(ERR.eofInComment);
this.emitCurrentComment(token);
this._emitEOFToken();
break;
}
default: {
token.data += "-";
this.state = State.COMMENT;
this._stateComment(cp);
}
}
}
// Comment state
//------------------------------------------------------------------
_stateComment(cp) {
const token = this.currentToken;
switch (cp) {
case CODE_POINTS.HYPHEN_MINUS: {
this.state = State.COMMENT_END_DASH;
break;
}
case CODE_POINTS.LESS_THAN_SIGN: {
token.data += "<";
this.state = State.COMMENT_LESS_THAN_SIGN;
break;
}
case CODE_POINTS.NULL: {
this._err(ERR.unexpectedNullCharacter);
token.data += REPLACEMENT_CHARACTER;
break;
}
case CODE_POINTS.EOF: {
this._err(ERR.eofInComment);
this.emitCurrentComment(token);
this._emitEOFToken();
break;
}
default: {
token.data += String.fromCodePoint(cp);
}
}
}
// Comment less-than sign state
//------------------------------------------------------------------
_stateCommentLessThanSign(cp) {
const token = this.currentToken;
switch (cp) {
case CODE_POINTS.EXCLAMATION_MARK: {
token.data += "!";
this.state = State.COMMENT_LESS_THAN_SIGN_BANG;
break;
}
case CODE_POINTS.LESS_THAN_SIGN: {
token.data += "<";
break;
}
default: {
this.state = State.COMMENT;
this._stateComment(cp);
}
}
}
// Comment less-than sign bang state
//------------------------------------------------------------------
_stateCommentLessThanSignBang(cp) {
if (cp === CODE_POINTS.HYPHEN_MINUS) {
this.state = State.COMMENT_LESS_THAN_SIGN_BANG_DASH;
} else {
this.state = State.COMMENT;
this._stateComment(cp);
}
}
// Comment less-than sign bang dash state
//------------------------------------------------------------------
_stateCommentLessThanSignBangDash(cp) {
if (cp === CODE_POINTS.HYPHEN_MINUS) {
this.state = State.COMMENT_LESS_THAN_SIGN_BANG_DASH_DASH;
} else {
this.state = State.COMMENT_END_DASH;
this._stateCommentEndDash(cp);
}
}
// Comment less-than sign bang dash dash state
//------------------------------------------------------------------
_stateCommentLessThanSignBangDashDash(cp) {
if (cp !== CODE_POINTS.GREATER_THAN_SIGN && cp !== CODE_POINTS.EOF) {
this._err(ERR.nestedComment);
}
this.state = State.COMMENT_END;
this._stateCommentEnd(cp);
}
// Comment end dash state
//------------------------------------------------------------------
_stateCommentEndDash(cp) {
const token = this.currentToken;
switch (cp) {
case CODE_POINTS.HYPHEN_MINUS: {
this.state = State.COMMENT_END;
break;
}
case CODE_POINTS.EOF: {
this._err(ERR.eofInComment);
this.emitCurrentComment(token);
this._emitEOFToken();
break;
}
default: {
token.data += "-";
this.state = State.COMMENT;
this._stateComment(cp);
}
}
}
// Comment end state
//------------------------------------------------------------------
_stateCommentEnd(cp) {
const token = this.currentToken;
switch (cp) {
case CODE_POINTS.GREATER_THAN_SIGN: {
this.state = State.DATA;
this.emitCurrentComment(token);
break;
}
case CODE_POINTS.EXCLAMATION_MARK: {
this.state = State.COMMENT_END_BANG;
break;
}
case CODE_POINTS.HYPHEN_MINUS: {
token.data += "-";
break;
}
case CODE_POINTS.EOF: {
this._err(ERR.eofInComment);
this.emitCurrentComment(token);
this._emitEOFToken();
break;
}
default: {
token.data += "--";
this.state = State.COMMENT;
this._stateComment(cp);
}
}
}
// Comment end bang state
//------------------------------------------------------------------
_stateCommentEndBang(cp) {
const token = this.currentToken;
switch (cp) {
case CODE_POINTS.HYPHEN_MINUS: {
token.data += "--!";
this.state = State.COMMENT_END_DASH;
break;
}
case CODE_POINTS.GREATER_THAN_SIGN: {
this._err(ERR.incorrectlyClosedComment);
this.state = State.DATA;
this.emitCurrentComment(token);
break;
}
case CODE_POINTS.EOF: {
this._err(ERR.eofInComment);
this.emitCurrentComment(token);
this._emitEOFToken();
break;
}
default: {
token.data += "--!";
this.state = State.COMMENT;
this._stateComment(cp);
}
}
}
// DOCTYPE state
//------------------------------------------------------------------
_stateDoctype(cp) {
switch (cp) {
case CODE_POINTS.SPACE:
case CODE_POINTS.LINE_FEED:
case CODE_POINTS.TABULATION:
case CODE_POINTS.FORM_FEED: {
this.state = State.BEFORE_DOCTYPE_NAME;
break;
}
case CODE_POINTS.GREATER_THAN_SIGN: {
this.state = State.BEFORE_DOCTYPE_NAME;
this._stateBeforeDoctypeName(cp);
break;
}
case CODE_POINTS.EOF: {
this._err(ERR.eofInDoctype);
this._createDoctypeToken(null);
const token = this.currentToken;
token.forceQuirks = true;
this.emitCurrentDoctype(token);
this._emitEOFToken();
break;
}
default: {
this._err(ERR.missingWhitespaceBeforeDoctypeName);
this.state = State.BEFORE_DOCTYPE_NAME;
this._stateBeforeDoctypeName(cp);
}
}
}
// Before DOCTYPE name state
//------------------------------------------------------------------
_stateBeforeDoctypeName(cp) {
if (isAsciiUpper(cp)) {
this._createDoctypeToken(String.fromCharCode(toAsciiLower(cp)));
this.state = State.DOCTYPE_NAME;
} else
switch (cp) {
case CODE_POINTS.SPACE:
case CODE_POINTS.LINE_FEED:
case CODE_POINTS.TABULATION:
case CODE_POINTS.FORM_FEED: {
break;
}
case CODE_POINTS.NULL: {
this._err(ERR.unexpectedNullCharacter);
this._createDoctypeToken(REPLACEMENT_CHARACTER);
this.state = State.DOCTYPE_NAME;
break;
}
case CODE_POINTS.GREATER_THAN_SIGN: {
this._err(ERR.missingDoctypeName);
this._createDoctypeToken(null);
const token = this.currentToken;
token.forceQuirks = true;
this.emitCurrentDoctype(token);
this.state = State.DATA;
break;
}
case CODE_POINTS.EOF: {
this._err(ERR.eofInDoctype);
this._createDoctypeToken(null);
const token = this.currentToken;
token.forceQuirks = true;
this.emitCurrentDoctype(token);
this._emitEOFToken();
break;
}
default: {
this._createDoctypeToken(String.fromCodePoint(cp));
this.state = State.DOCTYPE_NAME;
}
}
}
// DOCTYPE name state
//------------------------------------------------------------------
_stateDoctypeName(cp) {
const token = this.currentToken;
switch (cp) {
case CODE_POINTS.SPACE:
case CODE_POINTS.LINE_FEED:
case CODE_POINTS.TABULATION:
case CODE_POINTS.FORM_FEED: {
this.state = State.AFTER_DOCTYPE_NAME;
break;
}
case CODE_POINTS.GREATER_THAN_SIGN: {
this.state = State.DATA;
this.emitCurrentDoctype(token);
break;
}
case CODE_POINTS.NULL: {
this._err(ERR.unexpectedNullCharacter);
token.name += REPLACEMENT_CHARACTER;
break;
}
case CODE_POINTS.EOF: {
this._err(ERR.eofInDoctype);
token.forceQuirks = true;
this.emitCurrentDoctype(token);
this._emitEOFToken();
break;
}
default: {
token.name += String.fromCodePoint(isAsciiUpper(cp) ? toAsciiLower(cp) : cp);
}
}
}
// After DOCTYPE name state
//------------------------------------------------------------------
_stateAfterDoctypeName(cp) {
const token = this.currentToken;
switch (cp) {
case CODE_POINTS.SPACE:
case CODE_POINTS.LINE_FEED:
case CODE_POINTS.TABULATION:
case CODE_POINTS.FORM_FEED: {
break;
}
case CODE_POINTS.GREATER_THAN_SIGN: {
this.state = State.DATA;
this.emitCurrentDoctype(token);
break;
}
case CODE_POINTS.EOF: {
this._err(ERR.eofInDoctype);
token.forceQuirks = true;
this.emitCurrentDoctype(token);
this._emitEOFToken();
break;
}
default: {
if (this._consumeSequenceIfMatch(SEQUENCES.PUBLIC, false)) {
this.state = State.AFTER_DOCTYPE_PUBLIC_KEYWORD;
} else if (this._consumeSequenceIfMatch(SEQUENCES.SYSTEM, false)) {
this.state = State.AFTER_DOCTYPE_SYSTEM_KEYWORD;
} else if (!this._ensureHibernation()) {
this._err(ERR.invalidCharacterSequenceAfterDoctypeName);
token.forceQuirks = true;
this.state = State.BOGUS_DOCTYPE;
this._stateBogusDoctype(cp);
}
}
}
}
// After DOCTYPE public keyword state
//------------------------------------------------------------------
_stateAfterDoctypePublicKeyword(cp) {
const token = this.currentToken;
switch (cp) {
case CODE_POINTS.SPACE:
case CODE_POINTS.LINE_FEED:
case CODE_POINTS.TABULATION:
case CODE_POINTS.FORM_FEED: {
this.state = State.BEFORE_DOCTYPE_PUBLIC_IDENTIFIER;
break;
}
case CODE_POINTS.QUOTATION_MARK: {
this._err(ERR.missingWhitespaceAfterDoctypePublicKeyword);
token.publicId = "";
this.state = State.DOCTYPE_PUBLIC_IDENTIFIER_DOUBLE_QUOTED;
break;
}
case CODE_POINTS.APOSTROPHE: {
this._err(ERR.missingWhitespaceAfterDoctypePublicKeyword);
token.publicId = "";
this.state = State.DOCTYPE_PUBLIC_IDENTIFIER_SINGLE_QUOTED;
break;
}
case CODE_POINTS.GREATER_THAN_SIGN: {
this._err(ERR.missingDoctypePublicIdentifier);
token.forceQuirks = true;
this.state = State.DATA;
this.emitCurrentDoctype(token);
break;
}
case CODE_POINTS.EOF: {
this._err(ERR.eofInDoctype);
token.forceQuirks = true;
this.emitCurrentDoctype(token);
this._emitEOFToken();
break;
}
default: {
this._err(ERR.missingQuoteBeforeDoctypePublicIdentifier);
token.forceQuirks = true;
this.state = State.BOGUS_DOCTYPE;
this._stateBogusDoctype(cp);
}
}
}
// Before DOCTYPE public identifier state
//------------------------------------------------------------------
_stateBeforeDoctypePublicIdentifier(cp) {
const token = this.currentToken;
switch (cp) {
case CODE_POINTS.SPACE:
case CODE_POINTS.LINE_FEED:
case CODE_POINTS.TABULATION:
case CODE_POINTS.FORM_FEED: {
break;
}
case CODE_POINTS.QUOTATION_MARK: {
token.publicId = "";
this.state = State.DOCTYPE_PUBLIC_IDENTIFIER_DOUBLE_QUOTED;
break;
}
case CODE_POINTS.APOSTROPHE: {
token.publicId = "";
this.state = State.DOCTYPE_PUBLIC_IDENTIFIER_SINGLE_QUOTED;
break;
}
case CODE_POINTS.GREATER_THAN_SIGN: {
this._err(ERR.missingDoctypePublicIdentifier);
token.forceQuirks = true;
this.state = State.DATA;
this.emitCurrentDoctype(token);
break;
}
case CODE_POINTS.EOF: {
this._err(ERR.eofInDoctype);
token.forceQuirks = true;
this.emitCurrentDoctype(token);
this._emitEOFToken();
break;
}
default: {
this._err(ERR.missingQuoteBeforeDoctypePublicIdentifier);
token.forceQuirks = true;
this.state = State.BOGUS_DOCTYPE;
this._stateBogusDoctype(cp);
}
}
}
// DOCTYPE public identifier (double-quoted) state
//------------------------------------------------------------------
_stateDoctypePublicIdentifierDoubleQuoted(cp) {
const token = this.currentToken;
switch (cp) {
case CODE_POINTS.QUOTATION_MARK: {
this.state = State.AFTER_DOCTYPE_PUBLIC_IDENTIFIER;
break;
}
case CODE_POINTS.NULL: {
this._err(ERR.unexpectedNullCharacter);
token.publicId += REPLACEMENT_CHARACTER;
break;
}
case CODE_POINTS.GREATER_THAN_SIGN: {
this._err(ERR.abruptDoctypePublicIdentifier);
token.forceQuirks = true;
this.emitCurrentDoctype(token);
this.state = State.DATA;
break;
}
case CODE_POINTS.EOF: {
this._err(ERR.eofInDoctype);
token.forceQuirks = true;
this.emitCurrentDoctype(token);
this._emitEOFToken();
break;
}
default: {
token.publicId += String.fromCodePoint(cp);
}
}
}
// DOCTYPE public identifier (single-quoted) state
//------------------------------------------------------------------
_stateDoctypePublicIdentifierSingleQuoted(cp) {
const token = this.currentToken;
switch (cp) {
case CODE_POINTS.APOSTROPHE: {
this.state = State.AFTER_DOCTYPE_PUBLIC_IDENTIFIER;
break;
}
case CODE_POINTS.NULL: {
this._err(ERR.unexpectedNullCharacter);
token.publicId += REPLACEMENT_CHARACTER;
break;
}
case CODE_POINTS.GREATER_THAN_SIGN: {
this._err(ERR.abruptDoctypePublicIdentifier);
token.forceQuirks = true;
this.emitCurrentDoctype(token);
this.state = State.DATA;
break;
}
case CODE_POINTS.EOF: {
this._err(ERR.eofInDoctype);
token.forceQuirks = true;
this.emitCurrentDoctype(token);
this._emitEOFToken();
break;
}
default: {
token.publicId += String.fromCodePoint(cp);
}
}
}
// After DOCTYPE public identifier state
//------------------------------------------------------------------
_stateAfterDoctypePublicIdentifier(cp) {
const token = this.currentToken;
switch (cp) {
case CODE_POINTS.SPACE:
case CODE_POINTS.LINE_FEED:
case CODE_POINTS.TABULATION:
case CODE_POINTS.FORM_FEED: {
this.state = State.BETWEEN_DOCTYPE_PUBLIC_AND_SYSTEM_IDENTIFIERS;
break;
}
case CODE_POINTS.GREATER_THAN_SIGN: {
this.state = State.DATA;
this.emitCurrentDoctype(token);
break;
}
case CODE_POINTS.QUOTATION_MARK: {
this._err(ERR.missingWhitespaceBetweenDoctypePublicAndSystemIdentifiers);
token.systemId = "";
this.state = State.DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED;
break;
}
case CODE_POINTS.APOSTROPHE: {
this._err(ERR.missingWhitespaceBetweenDoctypePublicAndSystemIdentifiers);
token.systemId = "";
this.state = State.DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED;
break;
}
case CODE_POINTS.EOF: {
this._err(ERR.eofInDoctype);
token.forceQuirks = true;
this.emitCurrentDoctype(token);
this._emitEOFToken();
break;
}
default: {
this._err(ERR.missingQuoteBeforeDoctypeSystemIdentifier);
token.forceQuirks = true;
this.state = State.BOGUS_DOCTYPE;
this._stateBogusDoctype(cp);
}
}
}
// Between DOCTYPE public and system identifiers state
//------------------------------------------------------------------
_stateBetweenDoctypePublicAndSystemIdentifiers(cp) {
const token = this.currentToken;
switch (cp) {
case CODE_POINTS.SPACE:
case CODE_POINTS.LINE_FEED:
case CODE_POINTS.TABULATION:
case CODE_POINTS.FORM_FEED: {
break;
}
case CODE_POINTS.GREATER_THAN_SIGN: {
this.emitCurrentDoctype(token);
this.state = State.DATA;
break;
}
case CODE_POINTS.QUOTATION_MARK: {
token.systemId = "";
this.state = State.DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED;
break;
}
case CODE_POINTS.APOSTROPHE: {
token.systemId = "";
this.state = State.DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED;
break;
}
case CODE_POINTS.EOF: {
this._err(ERR.eofInDoctype);
token.forceQuirks = true;
this.emitCurrentDoctype(token);
this._emitEOFToken();
break;
}
default: {
this._err(ERR.missingQuoteBeforeDoctypeSystemIdentifier);
token.forceQuirks = true;
this.state = State.BOGUS_DOCTYPE;
this._stateBogusDoctype(cp);
}
}
}
// After DOCTYPE system keyword state
//------------------------------------------------------------------
_stateAfterDoctypeSystemKeyword(cp) {
const token = this.currentToken;
switch (cp) {
case CODE_POINTS.SPACE:
case CODE_POINTS.LINE_FEED:
case CODE_POINTS.TABULATION:
case CODE_POINTS.FORM_FEED: {
this.state = State.BEFORE_DOCTYPE_SYSTEM_IDENTIFIER;
break;
}
case CODE_POINTS.QUOTATION_MARK: {
this._err(ERR.missingWhitespaceAfterDoctypeSystemKeyword);
token.systemId = "";
this.state = State.DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED;
break;
}
case CODE_POINTS.APOSTROPHE: {
this._err(ERR.missingWhitespaceAfterDoctypeSystemKeyword);
token.systemId = "";
this.state = State.DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED;
break;
}
case CODE_POINTS.GREATER_THAN_SIGN: {
this._err(ERR.missingDoctypeSystemIdentifier);
token.forceQuirks = true;
this.state = State.DATA;
this.emitCurrentDoctype(token);
break;
}
case CODE_POINTS.EOF: {
this._err(ERR.eofInDoctype);
token.forceQuirks = true;
this.emitCurrentDoctype(token);
this._emitEOFToken();
break;
}
default: {
this._err(ERR.missingQuoteBeforeDoctypeSystemIdentifier);
token.forceQuirks = true;
this.state = State.BOGUS_DOCTYPE;
this._stateBogusDoctype(cp);
}
}
}
// Before DOCTYPE system identifier state
//------------------------------------------------------------------
_stateBeforeDoctypeSystemIdentifier(cp) {
const token = this.currentToken;
switch (cp) {
case CODE_POINTS.SPACE:
case CODE_POINTS.LINE_FEED:
case CODE_POINTS.TABULATION:
case CODE_POINTS.FORM_FEED: {
break;
}
case CODE_POINTS.QUOTATION_MARK: {
token.systemId = "";
this.state = State.DOCTYPE_SYSTEM_IDENTIFIER_DOUBLE_QUOTED;
break;
}
case CODE_POINTS.APOSTROPHE: {
token.systemId = "";
this.state = State.DOCTYPE_SYSTEM_IDENTIFIER_SINGLE_QUOTED;
break;
}
case CODE_POINTS.GREATER_THAN_SIGN: {
this._err(ERR.missingDoctypeSystemIdentifier);
token.forceQuirks = true;
this.state = State.DATA;
this.emitCurrentDoctype(token);
break;
}
case CODE_POINTS.EOF: {
this._err(ERR.eofInDoctype);
token.forceQuirks = true;
this.emitCurrentDoctype(token);
this._emitEOFToken();
break;
}
default: {
this._err(ERR.missingQuoteBeforeDoctypeSystemIdentifier);
token.forceQuirks = true;
this.state = State.BOGUS_DOCTYPE;
this._stateBogusDoctype(cp);
}
}
}
// DOCTYPE system identifier (double-quoted) state
//------------------------------------------------------------------
_stateDoctypeSystemIdentifierDoubleQuoted(cp) {
const token = this.currentToken;
switch (cp) {
case CODE_POINTS.QUOTATION_MARK: {
this.state = State.AFTER_DOCTYPE_SYSTEM_IDENTIFIER;
break;
}
case CODE_POINTS.NULL: {
this._err(ERR.unexpectedNullCharacter);
token.systemId += REPLACEMENT_CHARACTER;
break;
}
case CODE_POINTS.GREATER_THAN_SIGN: {
this._err(ERR.abruptDoctypeSystemIdentifier);
token.forceQuirks = true;
this.emitCurrentDoctype(token);
this.state = State.DATA;
break;
}
case CODE_POINTS.EOF: {
this._err(ERR.eofInDoctype);
token.forceQuirks = true;
this.emitCurrentDoctype(token);
this._emitEOFToken();
break;
}
default: {
token.systemId += String.fromCodePoint(cp);
}
}
}
// DOCTYPE system identifier (single-quoted) state
//------------------------------------------------------------------
_stateDoctypeSystemIdentifierSingleQuoted(cp) {
const token = this.currentToken;
switch (cp) {
case CODE_POINTS.APOSTROPHE: {
this.state = State.AFTER_DOCTYPE_SYSTEM_IDENTIFIER;
break;
}
case CODE_POINTS.NULL: {
this._err(ERR.unexpectedNullCharacter);
token.systemId += REPLACEMENT_CHARACTER;
break;
}
case CODE_POINTS.GREATER_THAN_SIGN: {
this._err(ERR.abruptDoctypeSystemIdentifier);
token.forceQuirks = true;
this.emitCurrentDoctype(token);
this.state = State.DATA;
break;
}
case CODE_POINTS.EOF: {
this._err(ERR.eofInDoctype);
token.forceQuirks = true;
this.emitCurrentDoctype(token);
this._emitEOFToken();
break;
}
default: {
token.systemId += String.fromCodePoint(cp);
}
}
}
// After DOCTYPE system identifier state
//------------------------------------------------------------------
_stateAfterDoctypeSystemIdentifier(cp) {
const token = this.currentToken;
switch (cp) {
case CODE_POINTS.SPACE:
case CODE_POINTS.LINE_FEED:
case CODE_POINTS.TABULATION:
case CODE_POINTS.FORM_FEED: {
break;
}
case CODE_POINTS.GREATER_THAN_SIGN: {
this.emitCurrentDoctype(token);
this.state = State.DATA;
break;
}
case CODE_POINTS.EOF: {
this._err(ERR.eofInDoctype);
token.forceQuirks = true;
this.emitCurrentDoctype(token);
this._emitEOFToken();
break;
}
default: {
this._err(ERR.unexpectedCharacterAfterDoctypeSystemIdentifier);
this.state = State.BOGUS_DOCTYPE;
this._stateBogusDoctype(cp);
}
}
}
// Bogus DOCTYPE state
//------------------------------------------------------------------
_stateBogusDoctype(cp) {
const token = this.currentToken;
switch (cp) {
case CODE_POINTS.GREATER_THAN_SIGN: {
this.emitCurrentDoctype(token);
this.state = State.DATA;
break;
}
case CODE_POINTS.NULL: {
this._err(ERR.unexpectedNullCharacter);
break;
}
case CODE_POINTS.EOF: {
this.emitCurrentDoctype(token);
this._emitEOFToken();
break;
}
default:
}
}
// CDATA section state
//------------------------------------------------------------------
_stateCdataSection(cp) {
switch (cp) {
case CODE_POINTS.RIGHT_SQUARE_BRACKET: {
this.state = State.CDATA_SECTION_BRACKET;
break;
}
case CODE_POINTS.EOF: {
this._err(ERR.eofInCdata);
this._emitEOFToken();
break;
}
default: {
this._emitCodePoint(cp);
}
}
}
// CDATA section bracket state
//------------------------------------------------------------------
_stateCdataSectionBracket(cp) {
if (cp === CODE_POINTS.RIGHT_SQUARE_BRACKET) {
this.state = State.CDATA_SECTION_END;
} else {
this._emitChars("]");
this.state = State.CDATA_SECTION;
this._stateCdataSection(cp);
}
}
// CDATA section end state
//------------------------------------------------------------------
_stateCdataSectionEnd(cp) {
switch (cp) {
case CODE_POINTS.GREATER_THAN_SIGN: {
this.state = State.DATA;
break;
}
case CODE_POINTS.RIGHT_SQUARE_BRACKET: {
this._emitChars("]");
break;
}
default: {
this._emitChars("]]");
this.state = State.CDATA_SECTION;
this._stateCdataSection(cp);
}
}
}
// Character reference state
//------------------------------------------------------------------
_stateCharacterReference() {
let length = this.entityDecoder.write(this.preprocessor.html, this.preprocessor.pos);
if (length < 0) {
if (this.preprocessor.lastChunkWritten) {
length = this.entityDecoder.end();
} else {
this.active = false;
this.preprocessor.pos = this.preprocessor.html.length - 1;
this.consumedAfterSnapshot = 0;
this.preprocessor.endOfChunkHit = true;
return;
}
}
if (length === 0) {
this.preprocessor.pos = this.entityStartPos;
this._flushCodePointConsumedAsCharacterReference(CODE_POINTS.AMPERSAND);
this.state = !this._isCharacterReferenceInAttribute() && isAsciiAlphaNumeric2(this.preprocessor.peek(1)) ? State.AMBIGUOUS_AMPERSAND : this.returnState;
} else {
this.state = this.returnState;
}
}
// Ambiguos ampersand state
//------------------------------------------------------------------
_stateAmbiguousAmpersand(cp) {
if (isAsciiAlphaNumeric2(cp)) {
this._flushCodePointConsumedAsCharacterReference(cp);
} else {
if (cp === CODE_POINTS.SEMICOLON) {
this._err(ERR.unknownNamedCharacterReference);
}
this.state = this.returnState;
this._callState(cp);
}
}
};
}
});
// node_modules/parse5/dist/parser/open-element-stack.js
var IMPLICIT_END_TAG_REQUIRED, IMPLICIT_END_TAG_REQUIRED_THOROUGHLY, SCOPING_ELEMENTS_HTML, SCOPING_ELEMENTS_HTML_LIST, SCOPING_ELEMENTS_HTML_BUTTON, SCOPING_ELEMENTS_MATHML, SCOPING_ELEMENTS_SVG, TABLE_ROW_CONTEXT, TABLE_BODY_CONTEXT, TABLE_CONTEXT, TABLE_CELLS, OpenElementStack;
var init_open_element_stack = __esm({
"node_modules/parse5/dist/parser/open-element-stack.js"() {
init_html();
IMPLICIT_END_TAG_REQUIRED = /* @__PURE__ */ new Set([TAG_ID.DD, TAG_ID.DT, TAG_ID.LI, TAG_ID.OPTGROUP, TAG_ID.OPTION, TAG_ID.P, TAG_ID.RB, TAG_ID.RP, TAG_ID.RT, TAG_ID.RTC]);
IMPLICIT_END_TAG_REQUIRED_THOROUGHLY = /* @__PURE__ */ new Set([
...IMPLICIT_END_TAG_REQUIRED,
TAG_ID.CAPTION,
TAG_ID.COLGROUP,
TAG_ID.TBODY,
TAG_ID.TD,
TAG_ID.TFOOT,
TAG_ID.TH,
TAG_ID.THEAD,
TAG_ID.TR
]);
SCOPING_ELEMENTS_HTML = /* @__PURE__ */ new Set([
TAG_ID.APPLET,
TAG_ID.CAPTION,
TAG_ID.HTML,
TAG_ID.MARQUEE,
TAG_ID.OBJECT,
TAG_ID.TABLE,
TAG_ID.TD,
TAG_ID.TEMPLATE,
TAG_ID.TH
]);
SCOPING_ELEMENTS_HTML_LIST = /* @__PURE__ */ new Set([...SCOPING_ELEMENTS_HTML, TAG_ID.OL, TAG_ID.UL]);
SCOPING_ELEMENTS_HTML_BUTTON = /* @__PURE__ */ new Set([...SCOPING_ELEMENTS_HTML, TAG_ID.BUTTON]);
SCOPING_ELEMENTS_MATHML = /* @__PURE__ */ new Set([TAG_ID.ANNOTATION_XML, TAG_ID.MI, TAG_ID.MN, TAG_ID.MO, TAG_ID.MS, TAG_ID.MTEXT]);
SCOPING_ELEMENTS_SVG = /* @__PURE__ */ new Set([TAG_ID.DESC, TAG_ID.FOREIGN_OBJECT, TAG_ID.TITLE]);
TABLE_ROW_CONTEXT = /* @__PURE__ */ new Set([TAG_ID.TR, TAG_ID.TEMPLATE, TAG_ID.HTML]);
TABLE_BODY_CONTEXT = /* @__PURE__ */ new Set([TAG_ID.TBODY, TAG_ID.TFOOT, TAG_ID.THEAD, TAG_ID.TEMPLATE, TAG_ID.HTML]);
TABLE_CONTEXT = /* @__PURE__ */ new Set([TAG_ID.TABLE, TAG_ID.TEMPLATE, TAG_ID.HTML]);
TABLE_CELLS = /* @__PURE__ */ new Set([TAG_ID.TD, TAG_ID.TH]);
OpenElementStack = class {
get currentTmplContentOrNode() {
return this._isInTemplate() ? this.treeAdapter.getTemplateContent(this.current) : this.current;
}
constructor(document2, treeAdapter, handler) {
this.treeAdapter = treeAdapter;
this.handler = handler;
this.items = [];
this.tagIDs = [];
this.stackTop = -1;
this.tmplCount = 0;
this.currentTagId = TAG_ID.UNKNOWN;
this.current = document2;
}
//Index of element
_indexOf(element) {
return this.items.lastIndexOf(element, this.stackTop);
}
//Update current element
_isInTemplate() {
return this.currentTagId === TAG_ID.TEMPLATE && this.treeAdapter.getNamespaceURI(this.current) === NS.HTML;
}
_updateCurrentElement() {
this.current = this.items[this.stackTop];
this.currentTagId = this.tagIDs[this.stackTop];
}
//Mutations
push(element, tagID) {
this.stackTop++;
this.items[this.stackTop] = element;
this.current = element;
this.tagIDs[this.stackTop] = tagID;
this.currentTagId = tagID;
if (this._isInTemplate()) {
this.tmplCount++;
}
this.handler.onItemPush(element, tagID, true);
}
pop() {
const popped = this.current;
if (this.tmplCount > 0 && this._isInTemplate()) {
this.tmplCount--;
}
this.stackTop--;
this._updateCurrentElement();
this.handler.onItemPop(popped, true);
}
replace(oldElement, newElement) {
const idx = this._indexOf(oldElement);
this.items[idx] = newElement;
if (idx === this.stackTop) {
this.current = newElement;
}
}
insertAfter(referenceElement, newElement, newElementID) {
const insertionIdx = this._indexOf(referenceElement) + 1;
this.items.splice(insertionIdx, 0, newElement);
this.tagIDs.splice(insertionIdx, 0, newElementID);
this.stackTop++;
if (insertionIdx === this.stackTop) {
this._updateCurrentElement();
}
this.handler.onItemPush(this.current, this.currentTagId, insertionIdx === this.stackTop);
}
popUntilTagNamePopped(tagName) {
let targetIdx = this.stackTop + 1;
do {
targetIdx = this.tagIDs.lastIndexOf(tagName, targetIdx - 1);
} while (targetIdx > 0 && this.treeAdapter.getNamespaceURI(this.items[targetIdx]) !== NS.HTML);
this.shortenToLength(targetIdx < 0 ? 0 : targetIdx);
}
shortenToLength(idx) {
while (this.stackTop >= idx) {
const popped = this.current;
if (this.tmplCount > 0 && this._isInTemplate()) {
this.tmplCount -= 1;
}
this.stackTop--;
this._updateCurrentElement();
this.handler.onItemPop(popped, this.stackTop < idx);
}
}
popUntilElementPopped(element) {
const idx = this._indexOf(element);
this.shortenToLength(idx < 0 ? 0 : idx);
}
popUntilPopped(tagNames, targetNS) {
const idx = this._indexOfTagNames(tagNames, targetNS);
this.shortenToLength(idx < 0 ? 0 : idx);
}
popUntilNumberedHeaderPopped() {
this.popUntilPopped(NUMBERED_HEADERS, NS.HTML);
}
popUntilTableCellPopped() {
this.popUntilPopped(TABLE_CELLS, NS.HTML);
}
popAllUpToHtmlElement() {
this.tmplCount = 0;
this.shortenToLength(1);
}
_indexOfTagNames(tagNames, namespace) {
for (let i = this.stackTop; i >= 0; i--) {
if (tagNames.has(this.tagIDs[i]) && this.treeAdapter.getNamespaceURI(this.items[i]) === namespace) {
return i;
}
}
return -1;
}
clearBackTo(tagNames, targetNS) {
const idx = this._indexOfTagNames(tagNames, targetNS);
this.shortenToLength(idx + 1);
}
clearBackToTableContext() {
this.clearBackTo(TABLE_CONTEXT, NS.HTML);
}
clearBackToTableBodyContext() {
this.clearBackTo(TABLE_BODY_CONTEXT, NS.HTML);
}
clearBackToTableRowContext() {
this.clearBackTo(TABLE_ROW_CONTEXT, NS.HTML);
}
remove(element) {
const idx = this._indexOf(element);
if (idx >= 0) {
if (idx === this.stackTop) {
this.pop();
} else {
this.items.splice(idx, 1);
this.tagIDs.splice(idx, 1);
this.stackTop--;
this._updateCurrentElement();
this.handler.onItemPop(element, false);
}
}
}
//Search
tryPeekProperlyNestedBodyElement() {
return this.stackTop >= 1 && this.tagIDs[1] === TAG_ID.BODY ? this.items[1] : null;
}
contains(element) {
return this._indexOf(element) > -1;
}
getCommonAncestor(element) {
const elementIdx = this._indexOf(element) - 1;
return elementIdx >= 0 ? this.items[elementIdx] : null;
}
isRootHtmlElementCurrent() {
return this.stackTop === 0 && this.tagIDs[0] === TAG_ID.HTML;
}
//Element in scope
hasInDynamicScope(tagName, htmlScope) {
for (let i = this.stackTop; i >= 0; i--) {
const tn = this.tagIDs[i];
switch (this.treeAdapter.getNamespaceURI(this.items[i])) {
case NS.HTML: {
if (tn === tagName)
return true;
if (htmlScope.has(tn))
return false;
break;
}
case NS.SVG: {
if (SCOPING_ELEMENTS_SVG.has(tn))
return false;
break;
}
case NS.MATHML: {
if (SCOPING_ELEMENTS_MATHML.has(tn))
return false;
break;
}
}
}
return true;
}
hasInScope(tagName) {
return this.hasInDynamicScope(tagName, SCOPING_ELEMENTS_HTML);
}
hasInListItemScope(tagName) {
return this.hasInDynamicScope(tagName, SCOPING_ELEMENTS_HTML_LIST);
}
hasInButtonScope(tagName) {
return this.hasInDynamicScope(tagName, SCOPING_ELEMENTS_HTML_BUTTON);
}
hasNumberedHeaderInScope() {
for (let i = this.stackTop; i >= 0; i--) {
const tn = this.tagIDs[i];
switch (this.treeAdapter.getNamespaceURI(this.items[i])) {
case NS.HTML: {
if (NUMBERED_HEADERS.has(tn))
return true;
if (SCOPING_ELEMENTS_HTML.has(tn))
return false;
break;
}
case NS.SVG: {
if (SCOPING_ELEMENTS_SVG.has(tn))
return false;
break;
}
case NS.MATHML: {
if (SCOPING_ELEMENTS_MATHML.has(tn))
return false;
break;
}
}
}
return true;
}
hasInTableScope(tagName) {
for (let i = this.stackTop; i >= 0; i--) {
if (this.treeAdapter.getNamespaceURI(this.items[i]) !== NS.HTML) {
continue;
}
switch (this.tagIDs[i]) {
case tagName: {
return true;
}
case TAG_ID.TABLE:
case TAG_ID.HTML: {
return false;
}
}
}
return true;
}
hasTableBodyContextInTableScope() {
for (let i = this.stackTop; i >= 0; i--) {
if (this.treeAdapter.getNamespaceURI(this.items[i]) !== NS.HTML) {
continue;
}
switch (this.tagIDs[i]) {
case TAG_ID.TBODY:
case TAG_ID.THEAD:
case TAG_ID.TFOOT: {
return true;
}
case TAG_ID.TABLE:
case TAG_ID.HTML: {
return false;
}
}
}
return true;
}
hasInSelectScope(tagName) {
for (let i = this.stackTop; i >= 0; i--) {
if (this.treeAdapter.getNamespaceURI(this.items[i]) !== NS.HTML) {
continue;
}
switch (this.tagIDs[i]) {
case tagName: {
return true;
}
case TAG_ID.OPTION:
case TAG_ID.OPTGROUP: {
break;
}
default: {
return false;
}
}
}
return true;
}
//Implied end tags
generateImpliedEndTags() {
while (IMPLICIT_END_TAG_REQUIRED.has(this.currentTagId)) {
this.pop();
}
}
generateImpliedEndTagsThoroughly() {
while (IMPLICIT_END_TAG_REQUIRED_THOROUGHLY.has(this.currentTagId)) {
this.pop();
}
}
generateImpliedEndTagsWithExclusion(exclusionId) {
while (this.currentTagId !== exclusionId && IMPLICIT_END_TAG_REQUIRED_THOROUGHLY.has(this.currentTagId)) {
this.pop();
}
}
};
}
});
// node_modules/parse5/dist/parser/formatting-element-list.js
var NOAH_ARK_CAPACITY, EntryType, MARKER, FormattingElementList;
var init_formatting_element_list = __esm({
"node_modules/parse5/dist/parser/formatting-element-list.js"() {
NOAH_ARK_CAPACITY = 3;
(function(EntryType2) {
EntryType2[EntryType2["Marker"] = 0] = "Marker";
EntryType2[EntryType2["Element"] = 1] = "Element";
})(EntryType || (EntryType = {}));
MARKER = { type: EntryType.Marker };
FormattingElementList = class {
constructor(treeAdapter) {
this.treeAdapter = treeAdapter;
this.entries = [];
this.bookmark = null;
}
//Noah Ark's condition
//OPTIMIZATION: at first we try to find possible candidates for exclusion using
//lightweight heuristics without thorough attributes check.
_getNoahArkConditionCandidates(newElement, neAttrs) {
const candidates = [];
const neAttrsLength = neAttrs.length;
const neTagName = this.treeAdapter.getTagName(newElement);
const neNamespaceURI = this.treeAdapter.getNamespaceURI(newElement);
for (let i = 0; i < this.entries.length; i++) {
const entry2 = this.entries[i];
if (entry2.type === EntryType.Marker) {
break;
}
const { element } = entry2;
if (this.treeAdapter.getTagName(element) === neTagName && this.treeAdapter.getNamespaceURI(element) === neNamespaceURI) {
const elementAttrs = this.treeAdapter.getAttrList(element);
if (elementAttrs.length === neAttrsLength) {
candidates.push({ idx: i, attrs: elementAttrs });
}
}
}
return candidates;
}
_ensureNoahArkCondition(newElement) {
if (this.entries.length < NOAH_ARK_CAPACITY)
return;
const neAttrs = this.treeAdapter.getAttrList(newElement);
const candidates = this._getNoahArkConditionCandidates(newElement, neAttrs);
if (candidates.length < NOAH_ARK_CAPACITY)
return;
const neAttrsMap = new Map(neAttrs.map((neAttr) => [neAttr.name, neAttr.value]));
let validCandidates = 0;
for (let i = 0; i < candidates.length; i++) {
const candidate = candidates[i];
if (candidate.attrs.every((cAttr) => neAttrsMap.get(cAttr.name) === cAttr.value)) {
validCandidates += 1;
if (validCandidates >= NOAH_ARK_CAPACITY) {
this.entries.splice(candidate.idx, 1);
}
}
}
}
//Mutations
insertMarker() {
this.entries.unshift(MARKER);
}
pushElement(element, token) {
this._ensureNoahArkCondition(element);
this.entries.unshift({
type: EntryType.Element,
element,
token
});
}
insertElementAfterBookmark(element, token) {
const bookmarkIdx = this.entries.indexOf(this.bookmark);
this.entries.splice(bookmarkIdx, 0, {
type: EntryType.Element,
element,
token
});
}
removeEntry(entry2) {
const entryIndex = this.entries.indexOf(entry2);
if (entryIndex >= 0) {
this.entries.splice(entryIndex, 1);
}
}
/**
* Clears the list of formatting elements up to the last marker.
*
* @see https://html.spec.whatwg.org/multipage/parsing.html#clear-the-list-of-active-formatting-elements-up-to-the-last-marker
*/
clearToLastMarker() {
const markerIdx = this.entries.indexOf(MARKER);
if (markerIdx >= 0) {
this.entries.splice(0, markerIdx + 1);
} else {
this.entries.length = 0;
}
}
//Search
getElementEntryInScopeWithTagName(tagName) {
const entry2 = this.entries.find((entry3) => entry3.type === EntryType.Marker || this.treeAdapter.getTagName(entry3.element) === tagName);
return entry2 && entry2.type === EntryType.Element ? entry2 : null;
}
getElementEntry(element) {
return this.entries.find((entry2) => entry2.type === EntryType.Element && entry2.element === element);
}
};
}
});
// node_modules/parse5/dist/tree-adapters/default.js
var defaultTreeAdapter;
var init_default = __esm({
"node_modules/parse5/dist/tree-adapters/default.js"() {
init_html();
defaultTreeAdapter = {
//Node construction
createDocument() {
return {
nodeName: "#document",
mode: DOCUMENT_MODE.NO_QUIRKS,
childNodes: []
};
},
createDocumentFragment() {
return {
nodeName: "#document-fragment",
childNodes: []
};
},
createElement(tagName, namespaceURI, attrs) {
return {
nodeName: tagName,
tagName,
attrs,
namespaceURI,
childNodes: [],
parentNode: null
};
},
createCommentNode(data2) {
return {
nodeName: "#comment",
data: data2,
parentNode: null
};
},
createTextNode(value) {
return {
nodeName: "#text",
value,
parentNode: null
};
},
//Tree mutation
appendChild(parentNode, newNode) {
parentNode.childNodes.push(newNode);
newNode.parentNode = parentNode;
},
insertBefore(parentNode, newNode, referenceNode) {
const insertionIdx = parentNode.childNodes.indexOf(referenceNode);
parentNode.childNodes.splice(insertionIdx, 0, newNode);
newNode.parentNode = parentNode;
},
setTemplateContent(templateElement, contentElement) {
templateElement.content = contentElement;
},
getTemplateContent(templateElement) {
return templateElement.content;
},
setDocumentType(document2, name, publicId, systemId) {
const doctypeNode = document2.childNodes.find((node) => node.nodeName === "#documentType");
if (doctypeNode) {
doctypeNode.name = name;
doctypeNode.publicId = publicId;
doctypeNode.systemId = systemId;
} else {
const node = {
nodeName: "#documentType",
name,
publicId,
systemId,
parentNode: null
};
defaultTreeAdapter.appendChild(document2, node);
}
},
setDocumentMode(document2, mode) {
document2.mode = mode;
},
getDocumentMode(document2) {
return document2.mode;
},
detachNode(node) {
if (node.parentNode) {
const idx = node.parentNode.childNodes.indexOf(node);
node.parentNode.childNodes.splice(idx, 1);
node.parentNode = null;
}
},
insertText(parentNode, text3) {
if (parentNode.childNodes.length > 0) {
const prevNode = parentNode.childNodes[parentNode.childNodes.length - 1];
if (defaultTreeAdapter.isTextNode(prevNode)) {
prevNode.value += text3;
return;
}
}
defaultTreeAdapter.appendChild(parentNode, defaultTreeAdapter.createTextNode(text3));
},
insertTextBefore(parentNode, text3, referenceNode) {
const prevNode = parentNode.childNodes[parentNode.childNodes.indexOf(referenceNode) - 1];
if (prevNode && defaultTreeAdapter.isTextNode(prevNode)) {
prevNode.value += text3;
} else {
defaultTreeAdapter.insertBefore(parentNode, defaultTreeAdapter.createTextNode(text3), referenceNode);
}
},
adoptAttributes(recipient, attrs) {
const recipientAttrsMap = new Set(recipient.attrs.map((attr2) => attr2.name));
for (let j = 0; j < attrs.length; j++) {
if (!recipientAttrsMap.has(attrs[j].name)) {
recipient.attrs.push(attrs[j]);
}
}
},
//Tree traversing
getFirstChild(node) {
return node.childNodes[0];
},
getChildNodes(node) {
return node.childNodes;
},
getParentNode(node) {
return node.parentNode;
},
getAttrList(element) {
return element.attrs;
},
//Node data
getTagName(element) {
return element.tagName;
},
getNamespaceURI(element) {
return element.namespaceURI;
},
getTextNodeContent(textNode) {
return textNode.value;
},
getCommentNodeContent(commentNode) {
return commentNode.data;
},
getDocumentTypeNodeName(doctypeNode) {
return doctypeNode.name;
},
getDocumentTypeNodePublicId(doctypeNode) {
return doctypeNode.publicId;
},
getDocumentTypeNodeSystemId(doctypeNode) {
return doctypeNode.systemId;
},
//Node types
isTextNode(node) {
return node.nodeName === "#text";
},
isCommentNode(node) {
return node.nodeName === "#comment";
},
isDocumentTypeNode(node) {
return node.nodeName === "#documentType";
},
isElementNode(node) {
return Object.prototype.hasOwnProperty.call(node, "tagName");
},
// Source code location
setNodeSourceCodeLocation(node, location) {
node.sourceCodeLocation = location;
},
getNodeSourceCodeLocation(node) {
return node.sourceCodeLocation;
},
updateNodeSourceCodeLocation(node, endLocation) {
node.sourceCodeLocation = { ...node.sourceCodeLocation, ...endLocation };
}
};
}
});
// node_modules/parse5/dist/common/doctype.js
function hasPrefix(publicId, prefixes) {
return prefixes.some((prefix) => publicId.startsWith(prefix));
}
function isConforming(token) {
return token.name === VALID_DOCTYPE_NAME && token.publicId === null && (token.systemId === null || token.systemId === VALID_SYSTEM_ID);
}
function getDocumentMode(token) {
if (token.name !== VALID_DOCTYPE_NAME) {
return DOCUMENT_MODE.QUIRKS;
}
const { systemId } = token;
if (systemId && systemId.toLowerCase() === QUIRKS_MODE_SYSTEM_ID) {
return DOCUMENT_MODE.QUIRKS;
}
let { publicId } = token;
if (publicId !== null) {
publicId = publicId.toLowerCase();
if (QUIRKS_MODE_PUBLIC_IDS.has(publicId)) {
return DOCUMENT_MODE.QUIRKS;
}
let prefixes = systemId === null ? QUIRKS_MODE_NO_SYSTEM_ID_PUBLIC_ID_PREFIXES : QUIRKS_MODE_PUBLIC_ID_PREFIXES;
if (hasPrefix(publicId, prefixes)) {
return DOCUMENT_MODE.QUIRKS;
}
prefixes = systemId === null ? LIMITED_QUIRKS_PUBLIC_ID_PREFIXES : LIMITED_QUIRKS_WITH_SYSTEM_ID_PUBLIC_ID_PREFIXES;
if (hasPrefix(publicId, prefixes)) {
return DOCUMENT_MODE.LIMITED_QUIRKS;
}
}
return DOCUMENT_MODE.NO_QUIRKS;
}
var VALID_DOCTYPE_NAME, VALID_SYSTEM_ID, QUIRKS_MODE_SYSTEM_ID, QUIRKS_MODE_PUBLIC_ID_PREFIXES, QUIRKS_MODE_NO_SYSTEM_ID_PUBLIC_ID_PREFIXES, QUIRKS_MODE_PUBLIC_IDS, LIMITED_QUIRKS_PUBLIC_ID_PREFIXES, LIMITED_QUIRKS_WITH_SYSTEM_ID_PUBLIC_ID_PREFIXES;
var init_doctype = __esm({
"node_modules/parse5/dist/common/doctype.js"() {
init_html();
VALID_DOCTYPE_NAME = "html";
VALID_SYSTEM_ID = "about:legacy-compat";
QUIRKS_MODE_SYSTEM_ID = "http://www.ibm.com/data/dtd/v11/ibmxhtml1-transitional.dtd";
QUIRKS_MODE_PUBLIC_ID_PREFIXES = [
"+//silmaril//dtd html pro v0r11 19970101//",
"-//as//dtd html 3.0 aswedit + extensions//",
"-//advasoft ltd//dtd html 3.0 aswedit + extensions//",
"-//ietf//dtd html 2.0 level 1//",
"-//ietf//dtd html 2.0 level 2//",
"-//ietf//dtd html 2.0 strict level 1//",
"-//ietf//dtd html 2.0 strict level 2//",
"-//ietf//dtd html 2.0 strict//",
"-//ietf//dtd html 2.0//",
"-//ietf//dtd html 2.1e//",
"-//ietf//dtd html 3.0//",
"-//ietf//dtd html 3.2 final//",
"-//ietf//dtd html 3.2//",
"-//ietf//dtd html 3//",
"-//ietf//dtd html level 0//",
"-//ietf//dtd html level 1//",
"-//ietf//dtd html level 2//",
"-//ietf//dtd html level 3//",
"-//ietf//dtd html strict level 0//",
"-//ietf//dtd html strict level 1//",
"-//ietf//dtd html strict level 2//",
"-//ietf//dtd html strict level 3//",
"-//ietf//dtd html strict//",
"-//ietf//dtd html//",
"-//metrius//dtd metrius presentational//",
"-//microsoft//dtd internet explorer 2.0 html strict//",
"-//microsoft//dtd internet explorer 2.0 html//",
"-//microsoft//dtd internet explorer 2.0 tables//",
"-//microsoft//dtd internet explorer 3.0 html strict//",
"-//microsoft//dtd internet explorer 3.0 html//",
"-//microsoft//dtd internet explorer 3.0 tables//",
"-//netscape comm. corp.//dtd html//",
"-//netscape comm. corp.//dtd strict html//",
"-//o'reilly and associates//dtd html 2.0//",
"-//o'reilly and associates//dtd html extended 1.0//",
"-//o'reilly and associates//dtd html extended relaxed 1.0//",
"-//sq//dtd html 2.0 hotmetal + extensions//",
"-//softquad software//dtd hotmetal pro 6.0::19990601::extensions to html 4.0//",
"-//softquad//dtd hotmetal pro 4.0::19971010::extensions to html 4.0//",
"-//spyglass//dtd html 2.0 extended//",
"-//sun microsystems corp.//dtd hotjava html//",
"-//sun microsystems corp.//dtd hotjava strict html//",
"-//w3c//dtd html 3 1995-03-24//",
"-//w3c//dtd html 3.2 draft//",
"-//w3c//dtd html 3.2 final//",
"-//w3c//dtd html 3.2//",
"-//w3c//dtd html 3.2s draft//",
"-//w3c//dtd html 4.0 frameset//",
"-//w3c//dtd html 4.0 transitional//",
"-//w3c//dtd html experimental 19960712//",
"-//w3c//dtd html experimental 970421//",
"-//w3c//dtd w3 html//",
"-//w3o//dtd w3 html 3.0//",
"-//webtechs//dtd mozilla html 2.0//",
"-//webtechs//dtd mozilla html//"
];
QUIRKS_MODE_NO_SYSTEM_ID_PUBLIC_ID_PREFIXES = [
...QUIRKS_MODE_PUBLIC_ID_PREFIXES,
"-//w3c//dtd html 4.01 frameset//",
"-//w3c//dtd html 4.01 transitional//"
];
QUIRKS_MODE_PUBLIC_IDS = /* @__PURE__ */ new Set([
"-//w3o//dtd w3 html strict 3.0//en//",
"-/w3c/dtd html 4.0 transitional/en",
"html"
]);
LIMITED_QUIRKS_PUBLIC_ID_PREFIXES = ["-//w3c//dtd xhtml 1.0 frameset//", "-//w3c//dtd xhtml 1.0 transitional//"];
LIMITED_QUIRKS_WITH_SYSTEM_ID_PUBLIC_ID_PREFIXES = [
...LIMITED_QUIRKS_PUBLIC_ID_PREFIXES,
"-//w3c//dtd html 4.01 frameset//",
"-//w3c//dtd html 4.01 transitional//"
];
}
});
// node_modules/parse5/dist/common/foreign-content.js
function causesExit(startTagToken) {
const tn = startTagToken.tagID;
const isFontWithAttrs = tn === TAG_ID.FONT && startTagToken.attrs.some(({ name }) => name === ATTRS.COLOR || name === ATTRS.SIZE || name === ATTRS.FACE);
return isFontWithAttrs || EXITS_FOREIGN_CONTENT.has(tn);
}
function adjustTokenMathMLAttrs(token) {
for (let i = 0; i < token.attrs.length; i++) {
if (token.attrs[i].name === DEFINITION_URL_ATTR) {
token.attrs[i].name = ADJUSTED_DEFINITION_URL_ATTR;
break;
}
}
}
function adjustTokenSVGAttrs(token) {
for (let i = 0; i < token.attrs.length; i++) {
const adjustedAttrName = SVG_ATTRS_ADJUSTMENT_MAP.get(token.attrs[i].name);
if (adjustedAttrName != null) {
token.attrs[i].name = adjustedAttrName;
}
}
}
function adjustTokenXMLAttrs(token) {
for (let i = 0; i < token.attrs.length; i++) {
const adjustedAttrEntry = XML_ATTRS_ADJUSTMENT_MAP.get(token.attrs[i].name);
if (adjustedAttrEntry) {
token.attrs[i].prefix = adjustedAttrEntry.prefix;
token.attrs[i].name = adjustedAttrEntry.name;
token.attrs[i].namespace = adjustedAttrEntry.namespace;
}
}
}
function adjustTokenSVGTagName(token) {
const adjustedTagName = SVG_TAG_NAMES_ADJUSTMENT_MAP.get(token.tagName);
if (adjustedTagName != null) {
token.tagName = adjustedTagName;
token.tagID = getTagID(token.tagName);
}
}
function isMathMLTextIntegrationPoint(tn, ns) {
return ns === NS.MATHML && (tn === TAG_ID.MI || tn === TAG_ID.MO || tn === TAG_ID.MN || tn === TAG_ID.MS || tn === TAG_ID.MTEXT);
}
function isHtmlIntegrationPoint(tn, ns, attrs) {
if (ns === NS.MATHML && tn === TAG_ID.ANNOTATION_XML) {
for (let i = 0; i < attrs.length; i++) {
if (attrs[i].name === ATTRS.ENCODING) {
const value = attrs[i].value.toLowerCase();
return value === MIME_TYPES.TEXT_HTML || value === MIME_TYPES.APPLICATION_XML;
}
}
}
return ns === NS.SVG && (tn === TAG_ID.FOREIGN_OBJECT || tn === TAG_ID.DESC || tn === TAG_ID.TITLE);
}
function isIntegrationPoint(tn, ns, attrs, foreignNS) {
return (!foreignNS || foreignNS === NS.HTML) && isHtmlIntegrationPoint(tn, ns, attrs) || (!foreignNS || foreignNS === NS.MATHML) && isMathMLTextIntegrationPoint(tn, ns);
}
var MIME_TYPES, DEFINITION_URL_ATTR, ADJUSTED_DEFINITION_URL_ATTR, SVG_ATTRS_ADJUSTMENT_MAP, XML_ATTRS_ADJUSTMENT_MAP, SVG_TAG_NAMES_ADJUSTMENT_MAP, EXITS_FOREIGN_CONTENT;
var init_foreign_content = __esm({
"node_modules/parse5/dist/common/foreign-content.js"() {
init_html();
MIME_TYPES = {
TEXT_HTML: "text/html",
APPLICATION_XML: "application/xhtml+xml"
};
DEFINITION_URL_ATTR = "definitionurl";
ADJUSTED_DEFINITION_URL_ATTR = "definitionURL";
SVG_ATTRS_ADJUSTMENT_MAP = new Map([
"attributeName",
"attributeType",
"baseFrequency",
"baseProfile",
"calcMode",
"clipPathUnits",
"diffuseConstant",
"edgeMode",
"filterUnits",
"glyphRef",
"gradientTransform",
"gradientUnits",
"kernelMatrix",
"kernelUnitLength",
"keyPoints",
"keySplines",
"keyTimes",
"lengthAdjust",
"limitingConeAngle",
"markerHeight",
"markerUnits",
"markerWidth",
"maskContentUnits",
"maskUnits",
"numOctaves",
"pathLength",
"patternContentUnits",
"patternTransform",
"patternUnits",
"pointsAtX",
"pointsAtY",
"pointsAtZ",
"preserveAlpha",
"preserveAspectRatio",
"primitiveUnits",
"refX",
"refY",
"repeatCount",
"repeatDur",
"requiredExtensions",
"requiredFeatures",
"specularConstant",
"specularExponent",
"spreadMethod",
"startOffset",
"stdDeviation",
"stitchTiles",
"surfaceScale",
"systemLanguage",
"tableValues",
"targetX",
"targetY",
"textLength",
"viewBox",
"viewTarget",
"xChannelSelector",
"yChannelSelector",
"zoomAndPan"
].map((attr2) => [attr2.toLowerCase(), attr2]));
XML_ATTRS_ADJUSTMENT_MAP = /* @__PURE__ */ new Map([
["xlink:actuate", { prefix: "xlink", name: "actuate", namespace: NS.XLINK }],
["xlink:arcrole", { prefix: "xlink", name: "arcrole", namespace: NS.XLINK }],
["xlink:href", { prefix: "xlink", name: "href", namespace: NS.XLINK }],
["xlink:role", { prefix: "xlink", name: "role", namespace: NS.XLINK }],
["xlink:show", { prefix: "xlink", name: "show", namespace: NS.XLINK }],
["xlink:title", { prefix: "xlink", name: "title", namespace: NS.XLINK }],
["xlink:type", { prefix: "xlink", name: "type", namespace: NS.XLINK }],
["xml:lang", { prefix: "xml", name: "lang", namespace: NS.XML }],
["xml:space", { prefix: "xml", name: "space", namespace: NS.XML }],
["xmlns", { prefix: "", name: "xmlns", namespace: NS.XMLNS }],
["xmlns:xlink", { prefix: "xmlns", name: "xlink", namespace: NS.XMLNS }]
]);
SVG_TAG_NAMES_ADJUSTMENT_MAP = new Map([
"altGlyph",
"altGlyphDef",
"altGlyphItem",
"animateColor",
"animateMotion",
"animateTransform",
"clipPath",
"feBlend",
"feColorMatrix",
"feComponentTransfer",
"feComposite",
"feConvolveMatrix",
"feDiffuseLighting",
"feDisplacementMap",
"feDistantLight",
"feFlood",
"feFuncA",
"feFuncB",
"feFuncG",
"feFuncR",
"feGaussianBlur",
"feImage",
"feMerge",
"feMergeNode",
"feMorphology",
"feOffset",
"fePointLight",
"feSpecularLighting",
"feSpotLight",
"feTile",
"feTurbulence",
"foreignObject",
"glyphRef",
"linearGradient",
"radialGradient",
"textPath"
].map((tn) => [tn.toLowerCase(), tn]));
EXITS_FOREIGN_CONTENT = /* @__PURE__ */ new Set([
TAG_ID.B,
TAG_ID.BIG,
TAG_ID.BLOCKQUOTE,
TAG_ID.BODY,
TAG_ID.BR,
TAG_ID.CENTER,
TAG_ID.CODE,
TAG_ID.DD,
TAG_ID.DIV,
TAG_ID.DL,
TAG_ID.DT,
TAG_ID.EM,
TAG_ID.EMBED,
TAG_ID.H1,
TAG_ID.H2,
TAG_ID.H3,
TAG_ID.H4,
TAG_ID.H5,
TAG_ID.H6,
TAG_ID.HEAD,
TAG_ID.HR,
TAG_ID.I,
TAG_ID.IMG,
TAG_ID.LI,
TAG_ID.LISTING,
TAG_ID.MENU,
TAG_ID.META,
TAG_ID.NOBR,
TAG_ID.OL,
TAG_ID.P,
TAG_ID.PRE,
TAG_ID.RUBY,
TAG_ID.S,
TAG_ID.SMALL,
TAG_ID.SPAN,
TAG_ID.STRONG,
TAG_ID.STRIKE,
TAG_ID.SUB,
TAG_ID.SUP,
TAG_ID.TABLE,
TAG_ID.TT,
TAG_ID.U,
TAG_ID.UL,
TAG_ID.VAR
]);
}
});
// node_modules/parse5/dist/parser/index.js
function aaObtainFormattingElementEntry(p, token) {
let formattingElementEntry = p.activeFormattingElements.getElementEntryInScopeWithTagName(token.tagName);
if (formattingElementEntry) {
if (!p.openElements.contains(formattingElementEntry.element)) {
p.activeFormattingElements.removeEntry(formattingElementEntry);
formattingElementEntry = null;
} else if (!p.openElements.hasInScope(token.tagID)) {
formattingElementEntry = null;
}
} else {
genericEndTagInBody(p, token);
}
return formattingElementEntry;
}
function aaObtainFurthestBlock(p, formattingElementEntry) {
let furthestBlock = null;
let idx = p.openElements.stackTop;
for (; idx >= 0; idx--) {
const element = p.openElements.items[idx];
if (element === formattingElementEntry.element) {
break;
}
if (p._isSpecialElement(element, p.openElements.tagIDs[idx])) {
furthestBlock = element;
}
}
if (!furthestBlock) {
p.openElements.shortenToLength(idx < 0 ? 0 : idx);
p.activeFormattingElements.removeEntry(formattingElementEntry);
}
return furthestBlock;
}
function aaInnerLoop(p, furthestBlock, formattingElement) {
let lastElement = furthestBlock;
let nextElement = p.openElements.getCommonAncestor(furthestBlock);
for (let i = 0, element = nextElement; element !== formattingElement; i++, element = nextElement) {
nextElement = p.openElements.getCommonAncestor(element);
const elementEntry = p.activeFormattingElements.getElementEntry(element);
const counterOverflow = elementEntry && i >= AA_INNER_LOOP_ITER;
const shouldRemoveFromOpenElements = !elementEntry || counterOverflow;
if (shouldRemoveFromOpenElements) {
if (counterOverflow) {
p.activeFormattingElements.removeEntry(elementEntry);
}
p.openElements.remove(element);
} else {
element = aaRecreateElementFromEntry(p, elementEntry);
if (lastElement === furthestBlock) {
p.activeFormattingElements.bookmark = elementEntry;
}
p.treeAdapter.detachNode(lastElement);
p.treeAdapter.appendChild(element, lastElement);
lastElement = element;
}
}
return lastElement;
}
function aaRecreateElementFromEntry(p, elementEntry) {
const ns = p.treeAdapter.getNamespaceURI(elementEntry.element);
const newElement = p.treeAdapter.createElement(elementEntry.token.tagName, ns, elementEntry.token.attrs);
p.openElements.replace(elementEntry.element, newElement);
elementEntry.element = newElement;
return newElement;
}
function aaInsertLastNodeInCommonAncestor(p, commonAncestor, lastElement) {
const tn = p.treeAdapter.getTagName(commonAncestor);
const tid = getTagID(tn);
if (p._isElementCausesFosterParenting(tid)) {
p._fosterParentElement(lastElement);
} else {
const ns = p.treeAdapter.getNamespaceURI(commonAncestor);
if (tid === TAG_ID.TEMPLATE && ns === NS.HTML) {
commonAncestor = p.treeAdapter.getTemplateContent(commonAncestor);
}
p.treeAdapter.appendChild(commonAncestor, lastElement);
}
}
function aaReplaceFormattingElement(p, furthestBlock, formattingElementEntry) {
const ns = p.treeAdapter.getNamespaceURI(formattingElementEntry.element);
const { token } = formattingElementEntry;
const newElement = p.treeAdapter.createElement(token.tagName, ns, token.attrs);
p._adoptNodes(furthestBlock, newElement);
p.treeAdapter.appendChild(furthestBlock, newElement);
p.activeFormattingElements.insertElementAfterBookmark(newElement, token);
p.activeFormattingElements.removeEntry(formattingElementEntry);
p.openElements.remove(formattingElementEntry.element);
p.openElements.insertAfter(furthestBlock, newElement, token.tagID);
}
function callAdoptionAgency(p, token) {
for (let i = 0; i < AA_OUTER_LOOP_ITER; i++) {
const formattingElementEntry = aaObtainFormattingElementEntry(p, token);
if (!formattingElementEntry) {
break;
}
const furthestBlock = aaObtainFurthestBlock(p, formattingElementEntry);
if (!furthestBlock) {
break;
}
p.activeFormattingElements.bookmark = formattingElementEntry;
const lastElement = aaInnerLoop(p, furthestBlock, formattingElementEntry.element);
const commonAncestor = p.openElements.getCommonAncestor(formattingElementEntry.element);
p.treeAdapter.detachNode(lastElement);
if (commonAncestor)
aaInsertLastNodeInCommonAncestor(p, commonAncestor, lastElement);
aaReplaceFormattingElement(p, furthestBlock, formattingElementEntry);
}
}
function appendComment(p, token) {
p._appendCommentNode(token, p.openElements.currentTmplContentOrNode);
}
function appendCommentToRootHtmlElement(p, token) {
p._appendCommentNode(token, p.openElements.items[0]);
}
function appendCommentToDocument(p, token) {
p._appendCommentNode(token, p.document);
}
function stopParsing(p, token) {
p.stopped = true;
if (token.location) {
const target = p.fragmentContext ? 0 : 2;
for (let i = p.openElements.stackTop; i >= target; i--) {
p._setEndLocation(p.openElements.items[i], token);
}
if (!p.fragmentContext && p.openElements.stackTop >= 0) {
const htmlElement = p.openElements.items[0];
const htmlLocation = p.treeAdapter.getNodeSourceCodeLocation(htmlElement);
if (htmlLocation && !htmlLocation.endTag) {
p._setEndLocation(htmlElement, token);
if (p.openElements.stackTop >= 1) {
const bodyElement = p.openElements.items[1];
const bodyLocation = p.treeAdapter.getNodeSourceCodeLocation(bodyElement);
if (bodyLocation && !bodyLocation.endTag) {
p._setEndLocation(bodyElement, token);
}
}
}
}
}
}
function doctypeInInitialMode(p, token) {
p._setDocumentType(token);
const mode = token.forceQuirks ? DOCUMENT_MODE.QUIRKS : getDocumentMode(token);
if (!isConforming(token)) {
p._err(token, ERR.nonConformingDoctype);
}
p.treeAdapter.setDocumentMode(p.document, mode);
p.insertionMode = InsertionMode.BEFORE_HTML;
}
function tokenInInitialMode(p, token) {
p._err(token, ERR.missingDoctype, true);
p.treeAdapter.setDocumentMode(p.document, DOCUMENT_MODE.QUIRKS);
p.insertionMode = InsertionMode.BEFORE_HTML;
p._processToken(token);
}
function startTagBeforeHtml(p, token) {
if (token.tagID === TAG_ID.HTML) {
p._insertElement(token, NS.HTML);
p.insertionMode = InsertionMode.BEFORE_HEAD;
} else {
tokenBeforeHtml(p, token);
}
}
function endTagBeforeHtml(p, token) {
const tn = token.tagID;
if (tn === TAG_ID.HTML || tn === TAG_ID.HEAD || tn === TAG_ID.BODY || tn === TAG_ID.BR) {
tokenBeforeHtml(p, token);
}
}
function tokenBeforeHtml(p, token) {
p._insertFakeRootElement();
p.insertionMode = InsertionMode.BEFORE_HEAD;
p._processToken(token);
}
function startTagBeforeHead(p, token) {
switch (token.tagID) {
case TAG_ID.HTML: {
startTagInBody(p, token);
break;
}
case TAG_ID.HEAD: {
p._insertElement(token, NS.HTML);
p.headElement = p.openElements.current;
p.insertionMode = InsertionMode.IN_HEAD;
break;
}
default: {
tokenBeforeHead(p, token);
}
}
}
function endTagBeforeHead(p, token) {
const tn = token.tagID;
if (tn === TAG_ID.HEAD || tn === TAG_ID.BODY || tn === TAG_ID.HTML || tn === TAG_ID.BR) {
tokenBeforeHead(p, token);
} else {
p._err(token, ERR.endTagWithoutMatchingOpenElement);
}
}
function tokenBeforeHead(p, token) {
p._insertFakeElement(TAG_NAMES.HEAD, TAG_ID.HEAD);
p.headElement = p.openElements.current;
p.insertionMode = InsertionMode.IN_HEAD;
p._processToken(token);
}
function startTagInHead(p, token) {
switch (token.tagID) {
case TAG_ID.HTML: {
startTagInBody(p, token);
break;
}
case TAG_ID.BASE:
case TAG_ID.BASEFONT:
case TAG_ID.BGSOUND:
case TAG_ID.LINK:
case TAG_ID.META: {
p._appendElement(token, NS.HTML);
token.ackSelfClosing = true;
break;
}
case TAG_ID.TITLE: {
p._switchToTextParsing(token, TokenizerMode.RCDATA);
break;
}
case TAG_ID.NOSCRIPT: {
if (p.options.scriptingEnabled) {
p._switchToTextParsing(token, TokenizerMode.RAWTEXT);
} else {
p._insertElement(token, NS.HTML);
p.insertionMode = InsertionMode.IN_HEAD_NO_SCRIPT;
}
break;
}
case TAG_ID.NOFRAMES:
case TAG_ID.STYLE: {
p._switchToTextParsing(token, TokenizerMode.RAWTEXT);
break;
}
case TAG_ID.SCRIPT: {
p._switchToTextParsing(token, TokenizerMode.SCRIPT_DATA);
break;
}
case TAG_ID.TEMPLATE: {
p._insertTemplate(token);
p.activeFormattingElements.insertMarker();
p.framesetOk = false;
p.insertionMode = InsertionMode.IN_TEMPLATE;
p.tmplInsertionModeStack.unshift(InsertionMode.IN_TEMPLATE);
break;
}
case TAG_ID.HEAD: {
p._err(token, ERR.misplacedStartTagForHeadElement);
break;
}
default: {
tokenInHead(p, token);
}
}
}
function endTagInHead(p, token) {
switch (token.tagID) {
case TAG_ID.HEAD: {
p.openElements.pop();
p.insertionMode = InsertionMode.AFTER_HEAD;
break;
}
case TAG_ID.BODY:
case TAG_ID.BR:
case TAG_ID.HTML: {
tokenInHead(p, token);
break;
}
case TAG_ID.TEMPLATE: {
templateEndTagInHead(p, token);
break;
}
default: {
p._err(token, ERR.endTagWithoutMatchingOpenElement);
}
}
}
function templateEndTagInHead(p, token) {
if (p.openElements.tmplCount > 0) {
p.openElements.generateImpliedEndTagsThoroughly();
if (p.openElements.currentTagId !== TAG_ID.TEMPLATE) {
p._err(token, ERR.closingOfElementWithOpenChildElements);
}
p.openElements.popUntilTagNamePopped(TAG_ID.TEMPLATE);
p.activeFormattingElements.clearToLastMarker();
p.tmplInsertionModeStack.shift();
p._resetInsertionMode();
} else {
p._err(token, ERR.endTagWithoutMatchingOpenElement);
}
}
function tokenInHead(p, token) {
p.openElements.pop();
p.insertionMode = InsertionMode.AFTER_HEAD;
p._processToken(token);
}
function startTagInHeadNoScript(p, token) {
switch (token.tagID) {
case TAG_ID.HTML: {
startTagInBody(p, token);
break;
}
case TAG_ID.BASEFONT:
case TAG_ID.BGSOUND:
case TAG_ID.HEAD:
case TAG_ID.LINK:
case TAG_ID.META:
case TAG_ID.NOFRAMES:
case TAG_ID.STYLE: {
startTagInHead(p, token);
break;
}
case TAG_ID.NOSCRIPT: {
p._err(token, ERR.nestedNoscriptInHead);
break;
}
default: {
tokenInHeadNoScript(p, token);
}
}
}
function endTagInHeadNoScript(p, token) {
switch (token.tagID) {
case TAG_ID.NOSCRIPT: {
p.openElements.pop();
p.insertionMode = InsertionMode.IN_HEAD;
break;
}
case TAG_ID.BR: {
tokenInHeadNoScript(p, token);
break;
}
default: {
p._err(token, ERR.endTagWithoutMatchingOpenElement);
}
}
}
function tokenInHeadNoScript(p, token) {
const errCode = token.type === TokenType.EOF ? ERR.openElementsLeftAfterEof : ERR.disallowedContentInNoscriptInHead;
p._err(token, errCode);
p.openElements.pop();
p.insertionMode = InsertionMode.IN_HEAD;
p._processToken(token);
}
function startTagAfterHead(p, token) {
switch (token.tagID) {
case TAG_ID.HTML: {
startTagInBody(p, token);
break;
}
case TAG_ID.BODY: {
p._insertElement(token, NS.HTML);
p.framesetOk = false;
p.insertionMode = InsertionMode.IN_BODY;
break;
}
case TAG_ID.FRAMESET: {
p._insertElement(token, NS.HTML);
p.insertionMode = InsertionMode.IN_FRAMESET;
break;
}
case TAG_ID.BASE:
case TAG_ID.BASEFONT:
case TAG_ID.BGSOUND:
case TAG_ID.LINK:
case TAG_ID.META:
case TAG_ID.NOFRAMES:
case TAG_ID.SCRIPT:
case TAG_ID.STYLE:
case TAG_ID.TEMPLATE:
case TAG_ID.TITLE: {
p._err(token, ERR.abandonedHeadElementChild);
p.openElements.push(p.headElement, TAG_ID.HEAD);
startTagInHead(p, token);
p.openElements.remove(p.headElement);
break;
}
case TAG_ID.HEAD: {
p._err(token, ERR.misplacedStartTagForHeadElement);
break;
}
default: {
tokenAfterHead(p, token);
}
}
}
function endTagAfterHead(p, token) {
switch (token.tagID) {
case TAG_ID.BODY:
case TAG_ID.HTML:
case TAG_ID.BR: {
tokenAfterHead(p, token);
break;
}
case TAG_ID.TEMPLATE: {
templateEndTagInHead(p, token);
break;
}
default: {
p._err(token, ERR.endTagWithoutMatchingOpenElement);
}
}
}
function tokenAfterHead(p, token) {
p._insertFakeElement(TAG_NAMES.BODY, TAG_ID.BODY);
p.insertionMode = InsertionMode.IN_BODY;
modeInBody(p, token);
}
function modeInBody(p, token) {
switch (token.type) {
case TokenType.CHARACTER: {
characterInBody(p, token);
break;
}
case TokenType.WHITESPACE_CHARACTER: {
whitespaceCharacterInBody(p, token);
break;
}
case TokenType.COMMENT: {
appendComment(p, token);
break;
}
case TokenType.START_TAG: {
startTagInBody(p, token);
break;
}
case TokenType.END_TAG: {
endTagInBody(p, token);
break;
}
case TokenType.EOF: {
eofInBody(p, token);
break;
}
default:
}
}
function whitespaceCharacterInBody(p, token) {
p._reconstructActiveFormattingElements();
p._insertCharacters(token);
}
function characterInBody(p, token) {
p._reconstructActiveFormattingElements();
p._insertCharacters(token);
p.framesetOk = false;
}
function htmlStartTagInBody(p, token) {
if (p.openElements.tmplCount === 0) {
p.treeAdapter.adoptAttributes(p.openElements.items[0], token.attrs);
}
}
function bodyStartTagInBody(p, token) {
const bodyElement = p.openElements.tryPeekProperlyNestedBodyElement();
if (bodyElement && p.openElements.tmplCount === 0) {
p.framesetOk = false;
p.treeAdapter.adoptAttributes(bodyElement, token.attrs);
}
}
function framesetStartTagInBody(p, token) {
const bodyElement = p.openElements.tryPeekProperlyNestedBodyElement();
if (p.framesetOk && bodyElement) {
p.treeAdapter.detachNode(bodyElement);
p.openElements.popAllUpToHtmlElement();
p._insertElement(token, NS.HTML);
p.insertionMode = InsertionMode.IN_FRAMESET;
}
}
function addressStartTagInBody(p, token) {
if (p.openElements.hasInButtonScope(TAG_ID.P)) {
p._closePElement();
}
p._insertElement(token, NS.HTML);
}
function numberedHeaderStartTagInBody(p, token) {
if (p.openElements.hasInButtonScope(TAG_ID.P)) {
p._closePElement();
}
if (NUMBERED_HEADERS.has(p.openElements.currentTagId)) {
p.openElements.pop();
}
p._insertElement(token, NS.HTML);
}
function preStartTagInBody(p, token) {
if (p.openElements.hasInButtonScope(TAG_ID.P)) {
p._closePElement();
}
p._insertElement(token, NS.HTML);
p.skipNextNewLine = true;
p.framesetOk = false;
}
function formStartTagInBody(p, token) {
const inTemplate = p.openElements.tmplCount > 0;
if (!p.formElement || inTemplate) {
if (p.openElements.hasInButtonScope(TAG_ID.P)) {
p._closePElement();
}
p._insertElement(token, NS.HTML);
if (!inTemplate) {
p.formElement = p.openElements.current;
}
}
}
function listItemStartTagInBody(p, token) {
p.framesetOk = false;
const tn = token.tagID;
for (let i = p.openElements.stackTop; i >= 0; i--) {
const elementId = p.openElements.tagIDs[i];
if (tn === TAG_ID.LI && elementId === TAG_ID.LI || (tn === TAG_ID.DD || tn === TAG_ID.DT) && (elementId === TAG_ID.DD || elementId === TAG_ID.DT)) {
p.openElements.generateImpliedEndTagsWithExclusion(elementId);
p.openElements.popUntilTagNamePopped(elementId);
break;
}
if (elementId !== TAG_ID.ADDRESS && elementId !== TAG_ID.DIV && elementId !== TAG_ID.P && p._isSpecialElement(p.openElements.items[i], elementId)) {
break;
}
}
if (p.openElements.hasInButtonScope(TAG_ID.P)) {
p._closePElement();
}
p._insertElement(token, NS.HTML);
}
function plaintextStartTagInBody(p, token) {
if (p.openElements.hasInButtonScope(TAG_ID.P)) {
p._closePElement();
}
p._insertElement(token, NS.HTML);
p.tokenizer.state = TokenizerMode.PLAINTEXT;
}
function buttonStartTagInBody(p, token) {
if (p.openElements.hasInScope(TAG_ID.BUTTON)) {
p.openElements.generateImpliedEndTags();
p.openElements.popUntilTagNamePopped(TAG_ID.BUTTON);
}
p._reconstructActiveFormattingElements();
p._insertElement(token, NS.HTML);
p.framesetOk = false;
}
function aStartTagInBody(p, token) {
const activeElementEntry = p.activeFormattingElements.getElementEntryInScopeWithTagName(TAG_NAMES.A);
if (activeElementEntry) {
callAdoptionAgency(p, token);
p.openElements.remove(activeElementEntry.element);
p.activeFormattingElements.removeEntry(activeElementEntry);
}
p._reconstructActiveFormattingElements();
p._insertElement(token, NS.HTML);
p.activeFormattingElements.pushElement(p.openElements.current, token);
}
function bStartTagInBody(p, token) {
p._reconstructActiveFormattingElements();
p._insertElement(token, NS.HTML);
p.activeFormattingElements.pushElement(p.openElements.current, token);
}
function nobrStartTagInBody(p, token) {
p._reconstructActiveFormattingElements();
if (p.openElements.hasInScope(TAG_ID.NOBR)) {
callAdoptionAgency(p, token);
p._reconstructActiveFormattingElements();
}
p._insertElement(token, NS.HTML);
p.activeFormattingElements.pushElement(p.openElements.current, token);
}
function appletStartTagInBody(p, token) {
p._reconstructActiveFormattingElements();
p._insertElement(token, NS.HTML);
p.activeFormattingElements.insertMarker();
p.framesetOk = false;
}
function tableStartTagInBody(p, token) {
if (p.treeAdapter.getDocumentMode(p.document) !== DOCUMENT_MODE.QUIRKS && p.openElements.hasInButtonScope(TAG_ID.P)) {
p._closePElement();
}
p._insertElement(token, NS.HTML);
p.framesetOk = false;
p.insertionMode = InsertionMode.IN_TABLE;
}
function areaStartTagInBody(p, token) {
p._reconstructActiveFormattingElements();
p._appendElement(token, NS.HTML);
p.framesetOk = false;
token.ackSelfClosing = true;
}
function isHiddenInput(token) {
const inputType = getTokenAttr(token, ATTRS.TYPE);
return inputType != null && inputType.toLowerCase() === HIDDEN_INPUT_TYPE;
}
function inputStartTagInBody(p, token) {
p._reconstructActiveFormattingElements();
p._appendElement(token, NS.HTML);
if (!isHiddenInput(token)) {
p.framesetOk = false;
}
token.ackSelfClosing = true;
}
function paramStartTagInBody(p, token) {
p._appendElement(token, NS.HTML);
token.ackSelfClosing = true;
}
function hrStartTagInBody(p, token) {
if (p.openElements.hasInButtonScope(TAG_ID.P)) {
p._closePElement();
}
p._appendElement(token, NS.HTML);
p.framesetOk = false;
token.ackSelfClosing = true;
}
function imageStartTagInBody(p, token) {
token.tagName = TAG_NAMES.IMG;
token.tagID = TAG_ID.IMG;
areaStartTagInBody(p, token);
}
function textareaStartTagInBody(p, token) {
p._insertElement(token, NS.HTML);
p.skipNextNewLine = true;
p.tokenizer.state = TokenizerMode.RCDATA;
p.originalInsertionMode = p.insertionMode;
p.framesetOk = false;
p.insertionMode = InsertionMode.TEXT;
}
function xmpStartTagInBody(p, token) {
if (p.openElements.hasInButtonScope(TAG_ID.P)) {
p._closePElement();
}
p._reconstructActiveFormattingElements();
p.framesetOk = false;
p._switchToTextParsing(token, TokenizerMode.RAWTEXT);
}
function iframeStartTagInBody(p, token) {
p.framesetOk = false;
p._switchToTextParsing(token, TokenizerMode.RAWTEXT);
}
function rawTextStartTagInBody(p, token) {
p._switchToTextParsing(token, TokenizerMode.RAWTEXT);
}
function selectStartTagInBody(p, token) {
p._reconstructActiveFormattingElements();
p._insertElement(token, NS.HTML);
p.framesetOk = false;
p.insertionMode = p.insertionMode === InsertionMode.IN_TABLE || p.insertionMode === InsertionMode.IN_CAPTION || p.insertionMode === InsertionMode.IN_TABLE_BODY || p.insertionMode === InsertionMode.IN_ROW || p.insertionMode === InsertionMode.IN_CELL ? InsertionMode.IN_SELECT_IN_TABLE : InsertionMode.IN_SELECT;
}
function optgroupStartTagInBody(p, token) {
if (p.openElements.currentTagId === TAG_ID.OPTION) {
p.openElements.pop();
}
p._reconstructActiveFormattingElements();
p._insertElement(token, NS.HTML);
}
function rbStartTagInBody(p, token) {
if (p.openElements.hasInScope(TAG_ID.RUBY)) {
p.openElements.generateImpliedEndTags();
}
p._insertElement(token, NS.HTML);
}
function rtStartTagInBody(p, token) {
if (p.openElements.hasInScope(TAG_ID.RUBY)) {
p.openElements.generateImpliedEndTagsWithExclusion(TAG_ID.RTC);
}
p._insertElement(token, NS.HTML);
}
function mathStartTagInBody(p, token) {
p._reconstructActiveFormattingElements();
adjustTokenMathMLAttrs(token);
adjustTokenXMLAttrs(token);
if (token.selfClosing) {
p._appendElement(token, NS.MATHML);
} else {
p._insertElement(token, NS.MATHML);
}
token.ackSelfClosing = true;
}
function svgStartTagInBody(p, token) {
p._reconstructActiveFormattingElements();
adjustTokenSVGAttrs(token);
adjustTokenXMLAttrs(token);
if (token.selfClosing) {
p._appendElement(token, NS.SVG);
} else {
p._insertElement(token, NS.SVG);
}
token.ackSelfClosing = true;
}
function genericStartTagInBody(p, token) {
p._reconstructActiveFormattingElements();
p._insertElement(token, NS.HTML);
}
function startTagInBody(p, token) {
switch (token.tagID) {
case TAG_ID.I:
case TAG_ID.S:
case TAG_ID.B:
case TAG_ID.U:
case TAG_ID.EM:
case TAG_ID.TT:
case TAG_ID.BIG:
case TAG_ID.CODE:
case TAG_ID.FONT:
case TAG_ID.SMALL:
case TAG_ID.STRIKE:
case TAG_ID.STRONG: {
bStartTagInBody(p, token);
break;
}
case TAG_ID.A: {
aStartTagInBody(p, token);
break;
}
case TAG_ID.H1:
case TAG_ID.H2:
case TAG_ID.H3:
case TAG_ID.H4:
case TAG_ID.H5:
case TAG_ID.H6: {
numberedHeaderStartTagInBody(p, token);
break;
}
case TAG_ID.P:
case TAG_ID.DL:
case TAG_ID.OL:
case TAG_ID.UL:
case TAG_ID.DIV:
case TAG_ID.DIR:
case TAG_ID.NAV:
case TAG_ID.MAIN:
case TAG_ID.MENU:
case TAG_ID.ASIDE:
case TAG_ID.CENTER:
case TAG_ID.FIGURE:
case TAG_ID.FOOTER:
case TAG_ID.HEADER:
case TAG_ID.HGROUP:
case TAG_ID.DIALOG:
case TAG_ID.DETAILS:
case TAG_ID.ADDRESS:
case TAG_ID.ARTICLE:
case TAG_ID.SEARCH:
case TAG_ID.SECTION:
case TAG_ID.SUMMARY:
case TAG_ID.FIELDSET:
case TAG_ID.BLOCKQUOTE:
case TAG_ID.FIGCAPTION: {
addressStartTagInBody(p, token);
break;
}
case TAG_ID.LI:
case TAG_ID.DD:
case TAG_ID.DT: {
listItemStartTagInBody(p, token);
break;
}
case TAG_ID.BR:
case TAG_ID.IMG:
case TAG_ID.WBR:
case TAG_ID.AREA:
case TAG_ID.EMBED:
case TAG_ID.KEYGEN: {
areaStartTagInBody(p, token);
break;
}
case TAG_ID.HR: {
hrStartTagInBody(p, token);
break;
}
case TAG_ID.RB:
case TAG_ID.RTC: {
rbStartTagInBody(p, token);
break;
}
case TAG_ID.RT:
case TAG_ID.RP: {
rtStartTagInBody(p, token);
break;
}
case TAG_ID.PRE:
case TAG_ID.LISTING: {
preStartTagInBody(p, token);
break;
}
case TAG_ID.XMP: {
xmpStartTagInBody(p, token);
break;
}
case TAG_ID.SVG: {
svgStartTagInBody(p, token);
break;
}
case TAG_ID.HTML: {
htmlStartTagInBody(p, token);
break;
}
case TAG_ID.BASE:
case TAG_ID.LINK:
case TAG_ID.META:
case TAG_ID.STYLE:
case TAG_ID.TITLE:
case TAG_ID.SCRIPT:
case TAG_ID.BGSOUND:
case TAG_ID.BASEFONT:
case TAG_ID.TEMPLATE: {
startTagInHead(p, token);
break;
}
case TAG_ID.BODY: {
bodyStartTagInBody(p, token);
break;
}
case TAG_ID.FORM: {
formStartTagInBody(p, token);
break;
}
case TAG_ID.NOBR: {
nobrStartTagInBody(p, token);
break;
}
case TAG_ID.MATH: {
mathStartTagInBody(p, token);
break;
}
case TAG_ID.TABLE: {
tableStartTagInBody(p, token);
break;
}
case TAG_ID.INPUT: {
inputStartTagInBody(p, token);
break;
}
case TAG_ID.PARAM:
case TAG_ID.TRACK:
case TAG_ID.SOURCE: {
paramStartTagInBody(p, token);
break;
}
case TAG_ID.IMAGE: {
imageStartTagInBody(p, token);
break;
}
case TAG_ID.BUTTON: {
buttonStartTagInBody(p, token);
break;
}
case TAG_ID.APPLET:
case TAG_ID.OBJECT:
case TAG_ID.MARQUEE: {
appletStartTagInBody(p, token);
break;
}
case TAG_ID.IFRAME: {
iframeStartTagInBody(p, token);
break;
}
case TAG_ID.SELECT: {
selectStartTagInBody(p, token);
break;
}
case TAG_ID.OPTION:
case TAG_ID.OPTGROUP: {
optgroupStartTagInBody(p, token);
break;
}
case TAG_ID.NOEMBED:
case TAG_ID.NOFRAMES: {
rawTextStartTagInBody(p, token);
break;
}
case TAG_ID.FRAMESET: {
framesetStartTagInBody(p, token);
break;
}
case TAG_ID.TEXTAREA: {
textareaStartTagInBody(p, token);
break;
}
case TAG_ID.NOSCRIPT: {
if (p.options.scriptingEnabled) {
rawTextStartTagInBody(p, token);
} else {
genericStartTagInBody(p, token);
}
break;
}
case TAG_ID.PLAINTEXT: {
plaintextStartTagInBody(p, token);
break;
}
case TAG_ID.COL:
case TAG_ID.TH:
case TAG_ID.TD:
case TAG_ID.TR:
case TAG_ID.HEAD:
case TAG_ID.FRAME:
case TAG_ID.TBODY:
case TAG_ID.TFOOT:
case TAG_ID.THEAD:
case TAG_ID.CAPTION:
case TAG_ID.COLGROUP: {
break;
}
default: {
genericStartTagInBody(p, token);
}
}
}
function bodyEndTagInBody(p, token) {
if (p.openElements.hasInScope(TAG_ID.BODY)) {
p.insertionMode = InsertionMode.AFTER_BODY;
if (p.options.sourceCodeLocationInfo) {
const bodyElement = p.openElements.tryPeekProperlyNestedBodyElement();
if (bodyElement) {
p._setEndLocation(bodyElement, token);
}
}
}
}
function htmlEndTagInBody(p, token) {
if (p.openElements.hasInScope(TAG_ID.BODY)) {
p.insertionMode = InsertionMode.AFTER_BODY;
endTagAfterBody(p, token);
}
}
function addressEndTagInBody(p, token) {
const tn = token.tagID;
if (p.openElements.hasInScope(tn)) {
p.openElements.generateImpliedEndTags();
p.openElements.popUntilTagNamePopped(tn);
}
}
function formEndTagInBody(p) {
const inTemplate = p.openElements.tmplCount > 0;
const { formElement } = p;
if (!inTemplate) {
p.formElement = null;
}
if ((formElement || inTemplate) && p.openElements.hasInScope(TAG_ID.FORM)) {
p.openElements.generateImpliedEndTags();
if (inTemplate) {
p.openElements.popUntilTagNamePopped(TAG_ID.FORM);
} else if (formElement) {
p.openElements.remove(formElement);
}
}
}
function pEndTagInBody(p) {
if (!p.openElements.hasInButtonScope(TAG_ID.P)) {
p._insertFakeElement(TAG_NAMES.P, TAG_ID.P);
}
p._closePElement();
}
function liEndTagInBody(p) {
if (p.openElements.hasInListItemScope(TAG_ID.LI)) {
p.openElements.generateImpliedEndTagsWithExclusion(TAG_ID.LI);
p.openElements.popUntilTagNamePopped(TAG_ID.LI);
}
}
function ddEndTagInBody(p, token) {
const tn = token.tagID;
if (p.openElements.hasInScope(tn)) {
p.openElements.generateImpliedEndTagsWithExclusion(tn);
p.openElements.popUntilTagNamePopped(tn);
}
}
function numberedHeaderEndTagInBody(p) {
if (p.openElements.hasNumberedHeaderInScope()) {
p.openElements.generateImpliedEndTags();
p.openElements.popUntilNumberedHeaderPopped();
}
}
function appletEndTagInBody(p, token) {
const tn = token.tagID;
if (p.openElements.hasInScope(tn)) {
p.openElements.generateImpliedEndTags();
p.openElements.popUntilTagNamePopped(tn);
p.activeFormattingElements.clearToLastMarker();
}
}
function brEndTagInBody(p) {
p._reconstructActiveFormattingElements();
p._insertFakeElement(TAG_NAMES.BR, TAG_ID.BR);
p.openElements.pop();
p.framesetOk = false;
}
function genericEndTagInBody(p, token) {
const tn = token.tagName;
const tid = token.tagID;
for (let i = p.openElements.stackTop; i > 0; i--) {
const element = p.openElements.items[i];
const elementId = p.openElements.tagIDs[i];
if (tid === elementId && (tid !== TAG_ID.UNKNOWN || p.treeAdapter.getTagName(element) === tn)) {
p.openElements.generateImpliedEndTagsWithExclusion(tid);
if (p.openElements.stackTop >= i)
p.openElements.shortenToLength(i);
break;
}
if (p._isSpecialElement(element, elementId)) {
break;
}
}
}
function endTagInBody(p, token) {
switch (token.tagID) {
case TAG_ID.A:
case TAG_ID.B:
case TAG_ID.I:
case TAG_ID.S:
case TAG_ID.U:
case TAG_ID.EM:
case TAG_ID.TT:
case TAG_ID.BIG:
case TAG_ID.CODE:
case TAG_ID.FONT:
case TAG_ID.NOBR:
case TAG_ID.SMALL:
case TAG_ID.STRIKE:
case TAG_ID.STRONG: {
callAdoptionAgency(p, token);
break;
}
case TAG_ID.P: {
pEndTagInBody(p);
break;
}
case TAG_ID.DL:
case TAG_ID.UL:
case TAG_ID.OL:
case TAG_ID.DIR:
case TAG_ID.DIV:
case TAG_ID.NAV:
case TAG_ID.PRE:
case TAG_ID.MAIN:
case TAG_ID.MENU:
case TAG_ID.ASIDE:
case TAG_ID.BUTTON:
case TAG_ID.CENTER:
case TAG_ID.FIGURE:
case TAG_ID.FOOTER:
case TAG_ID.HEADER:
case TAG_ID.HGROUP:
case TAG_ID.DIALOG:
case TAG_ID.ADDRESS:
case TAG_ID.ARTICLE:
case TAG_ID.DETAILS:
case TAG_ID.SEARCH:
case TAG_ID.SECTION:
case TAG_ID.SUMMARY:
case TAG_ID.LISTING:
case TAG_ID.FIELDSET:
case TAG_ID.BLOCKQUOTE:
case TAG_ID.FIGCAPTION: {
addressEndTagInBody(p, token);
break;
}
case TAG_ID.LI: {
liEndTagInBody(p);
break;
}
case TAG_ID.DD:
case TAG_ID.DT: {
ddEndTagInBody(p, token);
break;
}
case TAG_ID.H1:
case TAG_ID.H2:
case TAG_ID.H3:
case TAG_ID.H4:
case TAG_ID.H5:
case TAG_ID.H6: {
numberedHeaderEndTagInBody(p);
break;
}
case TAG_ID.BR: {
brEndTagInBody(p);
break;
}
case TAG_ID.BODY: {
bodyEndTagInBody(p, token);
break;
}
case TAG_ID.HTML: {
htmlEndTagInBody(p, token);
break;
}
case TAG_ID.FORM: {
formEndTagInBody(p);
break;
}
case TAG_ID.APPLET:
case TAG_ID.OBJECT:
case TAG_ID.MARQUEE: {
appletEndTagInBody(p, token);
break;
}
case TAG_ID.TEMPLATE: {
templateEndTagInHead(p, token);
break;
}
default: {
genericEndTagInBody(p, token);
}
}
}
function eofInBody(p, token) {
if (p.tmplInsertionModeStack.length > 0) {
eofInTemplate(p, token);
} else {
stopParsing(p, token);
}
}
function endTagInText(p, token) {
var _a2;
if (token.tagID === TAG_ID.SCRIPT) {
(_a2 = p.scriptHandler) === null || _a2 === void 0 ? void 0 : _a2.call(p, p.openElements.current);
}
p.openElements.pop();
p.insertionMode = p.originalInsertionMode;
}
function eofInText(p, token) {
p._err(token, ERR.eofInElementThatCanContainOnlyText);
p.openElements.pop();
p.insertionMode = p.originalInsertionMode;
p.onEof(token);
}
function characterInTable(p, token) {
if (TABLE_STRUCTURE_TAGS.has(p.openElements.currentTagId)) {
p.pendingCharacterTokens.length = 0;
p.hasNonWhitespacePendingCharacterToken = false;
p.originalInsertionMode = p.insertionMode;
p.insertionMode = InsertionMode.IN_TABLE_TEXT;
switch (token.type) {
case TokenType.CHARACTER: {
characterInTableText(p, token);
break;
}
case TokenType.WHITESPACE_CHARACTER: {
whitespaceCharacterInTableText(p, token);
break;
}
}
} else {
tokenInTable(p, token);
}
}
function captionStartTagInTable(p, token) {
p.openElements.clearBackToTableContext();
p.activeFormattingElements.insertMarker();
p._insertElement(token, NS.HTML);
p.insertionMode = InsertionMode.IN_CAPTION;
}
function colgroupStartTagInTable(p, token) {
p.openElements.clearBackToTableContext();
p._insertElement(token, NS.HTML);
p.insertionMode = InsertionMode.IN_COLUMN_GROUP;
}
function colStartTagInTable(p, token) {
p.openElements.clearBackToTableContext();
p._insertFakeElement(TAG_NAMES.COLGROUP, TAG_ID.COLGROUP);
p.insertionMode = InsertionMode.IN_COLUMN_GROUP;
startTagInColumnGroup(p, token);
}
function tbodyStartTagInTable(p, token) {
p.openElements.clearBackToTableContext();
p._insertElement(token, NS.HTML);
p.insertionMode = InsertionMode.IN_TABLE_BODY;
}
function tdStartTagInTable(p, token) {
p.openElements.clearBackToTableContext();
p._insertFakeElement(TAG_NAMES.TBODY, TAG_ID.TBODY);
p.insertionMode = InsertionMode.IN_TABLE_BODY;
startTagInTableBody(p, token);
}
function tableStartTagInTable(p, token) {
if (p.openElements.hasInTableScope(TAG_ID.TABLE)) {
p.openElements.popUntilTagNamePopped(TAG_ID.TABLE);
p._resetInsertionMode();
p._processStartTag(token);
}
}
function inputStartTagInTable(p, token) {
if (isHiddenInput(token)) {
p._appendElement(token, NS.HTML);
} else {
tokenInTable(p, token);
}
token.ackSelfClosing = true;
}
function formStartTagInTable(p, token) {
if (!p.formElement && p.openElements.tmplCount === 0) {
p._insertElement(token, NS.HTML);
p.formElement = p.openElements.current;
p.openElements.pop();
}
}
function startTagInTable(p, token) {
switch (token.tagID) {
case TAG_ID.TD:
case TAG_ID.TH:
case TAG_ID.TR: {
tdStartTagInTable(p, token);
break;
}
case TAG_ID.STYLE:
case TAG_ID.SCRIPT:
case TAG_ID.TEMPLATE: {
startTagInHead(p, token);
break;
}
case TAG_ID.COL: {
colStartTagInTable(p, token);
break;
}
case TAG_ID.FORM: {
formStartTagInTable(p, token);
break;
}
case TAG_ID.TABLE: {
tableStartTagInTable(p, token);
break;
}
case TAG_ID.TBODY:
case TAG_ID.TFOOT:
case TAG_ID.THEAD: {
tbodyStartTagInTable(p, token);
break;
}
case TAG_ID.INPUT: {
inputStartTagInTable(p, token);
break;
}
case TAG_ID.CAPTION: {
captionStartTagInTable(p, token);
break;
}
case TAG_ID.COLGROUP: {
colgroupStartTagInTable(p, token);
break;
}
default: {
tokenInTable(p, token);
}
}
}
function endTagInTable(p, token) {
switch (token.tagID) {
case TAG_ID.TABLE: {
if (p.openElements.hasInTableScope(TAG_ID.TABLE)) {
p.openElements.popUntilTagNamePopped(TAG_ID.TABLE);
p._resetInsertionMode();
}
break;
}
case TAG_ID.TEMPLATE: {
templateEndTagInHead(p, token);
break;
}
case TAG_ID.BODY:
case TAG_ID.CAPTION:
case TAG_ID.COL:
case TAG_ID.COLGROUP:
case TAG_ID.HTML:
case TAG_ID.TBODY:
case TAG_ID.TD:
case TAG_ID.TFOOT:
case TAG_ID.TH:
case TAG_ID.THEAD:
case TAG_ID.TR: {
break;
}
default: {
tokenInTable(p, token);
}
}
}
function tokenInTable(p, token) {
const savedFosterParentingState = p.fosterParentingEnabled;
p.fosterParentingEnabled = true;
modeInBody(p, token);
p.fosterParentingEnabled = savedFosterParentingState;
}
function whitespaceCharacterInTableText(p, token) {
p.pendingCharacterTokens.push(token);
}
function characterInTableText(p, token) {
p.pendingCharacterTokens.push(token);
p.hasNonWhitespacePendingCharacterToken = true;
}
function tokenInTableText(p, token) {
let i = 0;
if (p.hasNonWhitespacePendingCharacterToken) {
for (; i < p.pendingCharacterTokens.length; i++) {
tokenInTable(p, p.pendingCharacterTokens[i]);
}
} else {
for (; i < p.pendingCharacterTokens.length; i++) {
p._insertCharacters(p.pendingCharacterTokens[i]);
}
}
p.insertionMode = p.originalInsertionMode;
p._processToken(token);
}
function startTagInCaption(p, token) {
const tn = token.tagID;
if (TABLE_VOID_ELEMENTS.has(tn)) {
if (p.openElements.hasInTableScope(TAG_ID.CAPTION)) {
p.openElements.generateImpliedEndTags();
p.openElements.popUntilTagNamePopped(TAG_ID.CAPTION);
p.activeFormattingElements.clearToLastMarker();
p.insertionMode = InsertionMode.IN_TABLE;
startTagInTable(p, token);
}
} else {
startTagInBody(p, token);
}
}
function endTagInCaption(p, token) {
const tn = token.tagID;
switch (tn) {
case TAG_ID.CAPTION:
case TAG_ID.TABLE: {
if (p.openElements.hasInTableScope(TAG_ID.CAPTION)) {
p.openElements.generateImpliedEndTags();
p.openElements.popUntilTagNamePopped(TAG_ID.CAPTION);
p.activeFormattingElements.clearToLastMarker();
p.insertionMode = InsertionMode.IN_TABLE;
if (tn === TAG_ID.TABLE) {
endTagInTable(p, token);
}
}
break;
}
case TAG_ID.BODY:
case TAG_ID.COL:
case TAG_ID.COLGROUP:
case TAG_ID.HTML:
case TAG_ID.TBODY:
case TAG_ID.TD:
case TAG_ID.TFOOT:
case TAG_ID.TH:
case TAG_ID.THEAD:
case TAG_ID.TR: {
break;
}
default: {
endTagInBody(p, token);
}
}
}
function startTagInColumnGroup(p, token) {
switch (token.tagID) {
case TAG_ID.HTML: {
startTagInBody(p, token);
break;
}
case TAG_ID.COL: {
p._appendElement(token, NS.HTML);
token.ackSelfClosing = true;
break;
}
case TAG_ID.TEMPLATE: {
startTagInHead(p, token);
break;
}
default: {
tokenInColumnGroup(p, token);
}
}
}
function endTagInColumnGroup(p, token) {
switch (token.tagID) {
case TAG_ID.COLGROUP: {
if (p.openElements.currentTagId === TAG_ID.COLGROUP) {
p.openElements.pop();
p.insertionMode = InsertionMode.IN_TABLE;
}
break;
}
case TAG_ID.TEMPLATE: {
templateEndTagInHead(p, token);
break;
}
case TAG_ID.COL: {
break;
}
default: {
tokenInColumnGroup(p, token);
}
}
}
function tokenInColumnGroup(p, token) {
if (p.openElements.currentTagId === TAG_ID.COLGROUP) {
p.openElements.pop();
p.insertionMode = InsertionMode.IN_TABLE;
p._processToken(token);
}
}
function startTagInTableBody(p, token) {
switch (token.tagID) {
case TAG_ID.TR: {
p.openElements.clearBackToTableBodyContext();
p._insertElement(token, NS.HTML);
p.insertionMode = InsertionMode.IN_ROW;
break;
}
case TAG_ID.TH:
case TAG_ID.TD: {
p.openElements.clearBackToTableBodyContext();
p._insertFakeElement(TAG_NAMES.TR, TAG_ID.TR);
p.insertionMode = InsertionMode.IN_ROW;
startTagInRow(p, token);
break;
}
case TAG_ID.CAPTION:
case TAG_ID.COL:
case TAG_ID.COLGROUP:
case TAG_ID.TBODY:
case TAG_ID.TFOOT:
case TAG_ID.THEAD: {
if (p.openElements.hasTableBodyContextInTableScope()) {
p.openElements.clearBackToTableBodyContext();
p.openElements.pop();
p.insertionMode = InsertionMode.IN_TABLE;
startTagInTable(p, token);
}
break;
}
default: {
startTagInTable(p, token);
}
}
}
function endTagInTableBody(p, token) {
const tn = token.tagID;
switch (token.tagID) {
case TAG_ID.TBODY:
case TAG_ID.TFOOT:
case TAG_ID.THEAD: {
if (p.openElements.hasInTableScope(tn)) {
p.openElements.clearBackToTableBodyContext();
p.openElements.pop();
p.insertionMode = InsertionMode.IN_TABLE;
}
break;
}
case TAG_ID.TABLE: {
if (p.openElements.hasTableBodyContextInTableScope()) {
p.openElements.clearBackToTableBodyContext();
p.openElements.pop();
p.insertionMode = InsertionMode.IN_TABLE;
endTagInTable(p, token);
}
break;
}
case TAG_ID.BODY:
case TAG_ID.CAPTION:
case TAG_ID.COL:
case TAG_ID.COLGROUP:
case TAG_ID.HTML:
case TAG_ID.TD:
case TAG_ID.TH:
case TAG_ID.TR: {
break;
}
default: {
endTagInTable(p, token);
}
}
}
function startTagInRow(p, token) {
switch (token.tagID) {
case TAG_ID.TH:
case TAG_ID.TD: {
p.openElements.clearBackToTableRowContext();
p._insertElement(token, NS.HTML);
p.insertionMode = InsertionMode.IN_CELL;
p.activeFormattingElements.insertMarker();
break;
}
case TAG_ID.CAPTION:
case TAG_ID.COL:
case TAG_ID.COLGROUP:
case TAG_ID.TBODY:
case TAG_ID.TFOOT:
case TAG_ID.THEAD:
case TAG_ID.TR: {
if (p.openElements.hasInTableScope(TAG_ID.TR)) {
p.openElements.clearBackToTableRowContext();
p.openElements.pop();
p.insertionMode = InsertionMode.IN_TABLE_BODY;
startTagInTableBody(p, token);
}
break;
}
default: {
startTagInTable(p, token);
}
}
}
function endTagInRow(p, token) {
switch (token.tagID) {
case TAG_ID.TR: {
if (p.openElements.hasInTableScope(TAG_ID.TR)) {
p.openElements.clearBackToTableRowContext();
p.openElements.pop();
p.insertionMode = InsertionMode.IN_TABLE_BODY;
}
break;
}
case TAG_ID.TABLE: {
if (p.openElements.hasInTableScope(TAG_ID.TR)) {
p.openElements.clearBackToTableRowContext();
p.openElements.pop();
p.insertionMode = InsertionMode.IN_TABLE_BODY;
endTagInTableBody(p, token);
}
break;
}
case TAG_ID.TBODY:
case TAG_ID.TFOOT:
case TAG_ID.THEAD: {
if (p.openElements.hasInTableScope(token.tagID) || p.openElements.hasInTableScope(TAG_ID.TR)) {
p.openElements.clearBackToTableRowContext();
p.openElements.pop();
p.insertionMode = InsertionMode.IN_TABLE_BODY;
endTagInTableBody(p, token);
}
break;
}
case TAG_ID.BODY:
case TAG_ID.CAPTION:
case TAG_ID.COL:
case TAG_ID.COLGROUP:
case TAG_ID.HTML:
case TAG_ID.TD:
case TAG_ID.TH: {
break;
}
default: {
endTagInTable(p, token);
}
}
}
function startTagInCell(p, token) {
const tn = token.tagID;
if (TABLE_VOID_ELEMENTS.has(tn)) {
if (p.openElements.hasInTableScope(TAG_ID.TD) || p.openElements.hasInTableScope(TAG_ID.TH)) {
p._closeTableCell();
startTagInRow(p, token);
}
} else {
startTagInBody(p, token);
}
}
function endTagInCell(p, token) {
const tn = token.tagID;
switch (tn) {
case TAG_ID.TD:
case TAG_ID.TH: {
if (p.openElements.hasInTableScope(tn)) {
p.openElements.generateImpliedEndTags();
p.openElements.popUntilTagNamePopped(tn);
p.activeFormattingElements.clearToLastMarker();
p.insertionMode = InsertionMode.IN_ROW;
}
break;
}
case TAG_ID.TABLE:
case TAG_ID.TBODY:
case TAG_ID.TFOOT:
case TAG_ID.THEAD:
case TAG_ID.TR: {
if (p.openElements.hasInTableScope(tn)) {
p._closeTableCell();
endTagInRow(p, token);
}
break;
}
case TAG_ID.BODY:
case TAG_ID.CAPTION:
case TAG_ID.COL:
case TAG_ID.COLGROUP:
case TAG_ID.HTML: {
break;
}
default: {
endTagInBody(p, token);
}
}
}
function startTagInSelect(p, token) {
switch (token.tagID) {
case TAG_ID.HTML: {
startTagInBody(p, token);
break;
}
case TAG_ID.OPTION: {
if (p.openElements.currentTagId === TAG_ID.OPTION) {
p.openElements.pop();
}
p._insertElement(token, NS.HTML);
break;
}
case TAG_ID.OPTGROUP: {
if (p.openElements.currentTagId === TAG_ID.OPTION) {
p.openElements.pop();
}
if (p.openElements.currentTagId === TAG_ID.OPTGROUP) {
p.openElements.pop();
}
p._insertElement(token, NS.HTML);
break;
}
case TAG_ID.HR: {
if (p.openElements.currentTagId === TAG_ID.OPTION) {
p.openElements.pop();
}
if (p.openElements.currentTagId === TAG_ID.OPTGROUP) {
p.openElements.pop();
}
p._appendElement(token, NS.HTML);
token.ackSelfClosing = true;
break;
}
case TAG_ID.INPUT:
case TAG_ID.KEYGEN:
case TAG_ID.TEXTAREA:
case TAG_ID.SELECT: {
if (p.openElements.hasInSelectScope(TAG_ID.SELECT)) {
p.openElements.popUntilTagNamePopped(TAG_ID.SELECT);
p._resetInsertionMode();
if (token.tagID !== TAG_ID.SELECT) {
p._processStartTag(token);
}
}
break;
}
case TAG_ID.SCRIPT:
case TAG_ID.TEMPLATE: {
startTagInHead(p, token);
break;
}
default:
}
}
function endTagInSelect(p, token) {
switch (token.tagID) {
case TAG_ID.OPTGROUP: {
if (p.openElements.stackTop > 0 && p.openElements.currentTagId === TAG_ID.OPTION && p.openElements.tagIDs[p.openElements.stackTop - 1] === TAG_ID.OPTGROUP) {
p.openElements.pop();
}
if (p.openElements.currentTagId === TAG_ID.OPTGROUP) {
p.openElements.pop();
}
break;
}
case TAG_ID.OPTION: {
if (p.openElements.currentTagId === TAG_ID.OPTION) {
p.openElements.pop();
}
break;
}
case TAG_ID.SELECT: {
if (p.openElements.hasInSelectScope(TAG_ID.SELECT)) {
p.openElements.popUntilTagNamePopped(TAG_ID.SELECT);
p._resetInsertionMode();
}
break;
}
case TAG_ID.TEMPLATE: {
templateEndTagInHead(p, token);
break;
}
default:
}
}
function startTagInSelectInTable(p, token) {
const tn = token.tagID;
if (tn === TAG_ID.CAPTION || tn === TAG_ID.TABLE || tn === TAG_ID.TBODY || tn === TAG_ID.TFOOT || tn === TAG_ID.THEAD || tn === TAG_ID.TR || tn === TAG_ID.TD || tn === TAG_ID.TH) {
p.openElements.popUntilTagNamePopped(TAG_ID.SELECT);
p._resetInsertionMode();
p._processStartTag(token);
} else {
startTagInSelect(p, token);
}
}
function endTagInSelectInTable(p, token) {
const tn = token.tagID;
if (tn === TAG_ID.CAPTION || tn === TAG_ID.TABLE || tn === TAG_ID.TBODY || tn === TAG_ID.TFOOT || tn === TAG_ID.THEAD || tn === TAG_ID.TR || tn === TAG_ID.TD || tn === TAG_ID.TH) {
if (p.openElements.hasInTableScope(tn)) {
p.openElements.popUntilTagNamePopped(TAG_ID.SELECT);
p._resetInsertionMode();
p.onEndTag(token);
}
} else {
endTagInSelect(p, token);
}
}
function startTagInTemplate(p, token) {
switch (token.tagID) {
// First, handle tags that can start without a mode change
case TAG_ID.BASE:
case TAG_ID.BASEFONT:
case TAG_ID.BGSOUND:
case TAG_ID.LINK:
case TAG_ID.META:
case TAG_ID.NOFRAMES:
case TAG_ID.SCRIPT:
case TAG_ID.STYLE:
case TAG_ID.TEMPLATE:
case TAG_ID.TITLE: {
startTagInHead(p, token);
break;
}
// Re-process the token in the appropriate mode
case TAG_ID.CAPTION:
case TAG_ID.COLGROUP:
case TAG_ID.TBODY:
case TAG_ID.TFOOT:
case TAG_ID.THEAD: {
p.tmplInsertionModeStack[0] = InsertionMode.IN_TABLE;
p.insertionMode = InsertionMode.IN_TABLE;
startTagInTable(p, token);
break;
}
case TAG_ID.COL: {
p.tmplInsertionModeStack[0] = InsertionMode.IN_COLUMN_GROUP;
p.insertionMode = InsertionMode.IN_COLUMN_GROUP;
startTagInColumnGroup(p, token);
break;
}
case TAG_ID.TR: {
p.tmplInsertionModeStack[0] = InsertionMode.IN_TABLE_BODY;
p.insertionMode = InsertionMode.IN_TABLE_BODY;
startTagInTableBody(p, token);
break;
}
case TAG_ID.TD:
case TAG_ID.TH: {
p.tmplInsertionModeStack[0] = InsertionMode.IN_ROW;
p.insertionMode = InsertionMode.IN_ROW;
startTagInRow(p, token);
break;
}
default: {
p.tmplInsertionModeStack[0] = InsertionMode.IN_BODY;
p.insertionMode = InsertionMode.IN_BODY;
startTagInBody(p, token);
}
}
}
function endTagInTemplate(p, token) {
if (token.tagID === TAG_ID.TEMPLATE) {
templateEndTagInHead(p, token);
}
}
function eofInTemplate(p, token) {
if (p.openElements.tmplCount > 0) {
p.openElements.popUntilTagNamePopped(TAG_ID.TEMPLATE);
p.activeFormattingElements.clearToLastMarker();
p.tmplInsertionModeStack.shift();
p._resetInsertionMode();
p.onEof(token);
} else {
stopParsing(p, token);
}
}
function startTagAfterBody(p, token) {
if (token.tagID === TAG_ID.HTML) {
startTagInBody(p, token);
} else {
tokenAfterBody(p, token);
}
}
function endTagAfterBody(p, token) {
var _a2;
if (token.tagID === TAG_ID.HTML) {
if (!p.fragmentContext) {
p.insertionMode = InsertionMode.AFTER_AFTER_BODY;
}
if (p.options.sourceCodeLocationInfo && p.openElements.tagIDs[0] === TAG_ID.HTML) {
p._setEndLocation(p.openElements.items[0], token);
const bodyElement = p.openElements.items[1];
if (bodyElement && !((_a2 = p.treeAdapter.getNodeSourceCodeLocation(bodyElement)) === null || _a2 === void 0 ? void 0 : _a2.endTag)) {
p._setEndLocation(bodyElement, token);
}
}
} else {
tokenAfterBody(p, token);
}
}
function tokenAfterBody(p, token) {
p.insertionMode = InsertionMode.IN_BODY;
modeInBody(p, token);
}
function startTagInFrameset(p, token) {
switch (token.tagID) {
case TAG_ID.HTML: {
startTagInBody(p, token);
break;
}
case TAG_ID.FRAMESET: {
p._insertElement(token, NS.HTML);
break;
}
case TAG_ID.FRAME: {
p._appendElement(token, NS.HTML);
token.ackSelfClosing = true;
break;
}
case TAG_ID.NOFRAMES: {
startTagInHead(p, token);
break;
}
default:
}
}
function endTagInFrameset(p, token) {
if (token.tagID === TAG_ID.FRAMESET && !p.openElements.isRootHtmlElementCurrent()) {
p.openElements.pop();
if (!p.fragmentContext && p.openElements.currentTagId !== TAG_ID.FRAMESET) {
p.insertionMode = InsertionMode.AFTER_FRAMESET;
}
}
}
function startTagAfterFrameset(p, token) {
switch (token.tagID) {
case TAG_ID.HTML: {
startTagInBody(p, token);
break;
}
case TAG_ID.NOFRAMES: {
startTagInHead(p, token);
break;
}
default:
}
}
function endTagAfterFrameset(p, token) {
if (token.tagID === TAG_ID.HTML) {
p.insertionMode = InsertionMode.AFTER_AFTER_FRAMESET;
}
}
function startTagAfterAfterBody(p, token) {
if (token.tagID === TAG_ID.HTML) {
startTagInBody(p, token);
} else {
tokenAfterAfterBody(p, token);
}
}
function tokenAfterAfterBody(p, token) {
p.insertionMode = InsertionMode.IN_BODY;
modeInBody(p, token);
}
function startTagAfterAfterFrameset(p, token) {
switch (token.tagID) {
case TAG_ID.HTML: {
startTagInBody(p, token);
break;
}
case TAG_ID.NOFRAMES: {
startTagInHead(p, token);
break;
}
default:
}
}
function nullCharacterInForeignContent(p, token) {
token.chars = REPLACEMENT_CHARACTER;
p._insertCharacters(token);
}
function characterInForeignContent(p, token) {
p._insertCharacters(token);
p.framesetOk = false;
}
function popUntilHtmlOrIntegrationPoint(p) {
while (p.treeAdapter.getNamespaceURI(p.openElements.current) !== NS.HTML && !p._isIntegrationPoint(p.openElements.currentTagId, p.openElements.current)) {
p.openElements.pop();
}
}
function startTagInForeignContent(p, token) {
if (causesExit(token)) {
popUntilHtmlOrIntegrationPoint(p);
p._startTagOutsideForeignContent(token);
} else {
const current = p._getAdjustedCurrentElement();
const currentNs = p.treeAdapter.getNamespaceURI(current);
if (currentNs === NS.MATHML) {
adjustTokenMathMLAttrs(token);
} else if (currentNs === NS.SVG) {
adjustTokenSVGTagName(token);
adjustTokenSVGAttrs(token);
}
adjustTokenXMLAttrs(token);
if (token.selfClosing) {
p._appendElement(token, currentNs);
} else {
p._insertElement(token, currentNs);
}
token.ackSelfClosing = true;
}
}
function endTagInForeignContent(p, token) {
if (token.tagID === TAG_ID.P || token.tagID === TAG_ID.BR) {
popUntilHtmlOrIntegrationPoint(p);
p._endTagOutsideForeignContent(token);
return;
}
for (let i = p.openElements.stackTop; i > 0; i--) {
const element = p.openElements.items[i];
if (p.treeAdapter.getNamespaceURI(element) === NS.HTML) {
p._endTagOutsideForeignContent(token);
break;
}
const tagName = p.treeAdapter.getTagName(element);
if (tagName.toLowerCase() === token.tagName) {
token.tagName = tagName;
p.openElements.shortenToLength(i);
break;
}
}
}
var HIDDEN_INPUT_TYPE, AA_OUTER_LOOP_ITER, AA_INNER_LOOP_ITER, InsertionMode, BASE_LOC, TABLE_STRUCTURE_TAGS, defaultParserOptions, Parser, TABLE_VOID_ELEMENTS;
var init_parser = __esm({
"node_modules/parse5/dist/parser/index.js"() {
init_tokenizer();
init_open_element_stack();
init_formatting_element_list();
init_default();
init_doctype();
init_foreign_content();
init_error_codes();
init_unicode();
init_html();
init_token();
HIDDEN_INPUT_TYPE = "hidden";
AA_OUTER_LOOP_ITER = 8;
AA_INNER_LOOP_ITER = 3;
(function(InsertionMode2) {
InsertionMode2[InsertionMode2["INITIAL"] = 0] = "INITIAL";
InsertionMode2[InsertionMode2["BEFORE_HTML"] = 1] = "BEFORE_HTML";
InsertionMode2[InsertionMode2["BEFORE_HEAD"] = 2] = "BEFORE_HEAD";
InsertionMode2[InsertionMode2["IN_HEAD"] = 3] = "IN_HEAD";
InsertionMode2[InsertionMode2["IN_HEAD_NO_SCRIPT"] = 4] = "IN_HEAD_NO_SCRIPT";
InsertionMode2[InsertionMode2["AFTER_HEAD"] = 5] = "AFTER_HEAD";
InsertionMode2[InsertionMode2["IN_BODY"] = 6] = "IN_BODY";
InsertionMode2[InsertionMode2["TEXT"] = 7] = "TEXT";
InsertionMode2[InsertionMode2["IN_TABLE"] = 8] = "IN_TABLE";
InsertionMode2[InsertionMode2["IN_TABLE_TEXT"] = 9] = "IN_TABLE_TEXT";
InsertionMode2[InsertionMode2["IN_CAPTION"] = 10] = "IN_CAPTION";
InsertionMode2[InsertionMode2["IN_COLUMN_GROUP"] = 11] = "IN_COLUMN_GROUP";
InsertionMode2[InsertionMode2["IN_TABLE_BODY"] = 12] = "IN_TABLE_BODY";
InsertionMode2[InsertionMode2["IN_ROW"] = 13] = "IN_ROW";
InsertionMode2[InsertionMode2["IN_CELL"] = 14] = "IN_CELL";
InsertionMode2[InsertionMode2["IN_SELECT"] = 15] = "IN_SELECT";
InsertionMode2[InsertionMode2["IN_SELECT_IN_TABLE"] = 16] = "IN_SELECT_IN_TABLE";
InsertionMode2[InsertionMode2["IN_TEMPLATE"] = 17] = "IN_TEMPLATE";
InsertionMode2[InsertionMode2["AFTER_BODY"] = 18] = "AFTER_BODY";
InsertionMode2[InsertionMode2["IN_FRAMESET"] = 19] = "IN_FRAMESET";
InsertionMode2[InsertionMode2["AFTER_FRAMESET"] = 20] = "AFTER_FRAMESET";
InsertionMode2[InsertionMode2["AFTER_AFTER_BODY"] = 21] = "AFTER_AFTER_BODY";
InsertionMode2[InsertionMode2["AFTER_AFTER_FRAMESET"] = 22] = "AFTER_AFTER_FRAMESET";
})(InsertionMode || (InsertionMode = {}));
BASE_LOC = {
startLine: -1,
startCol: -1,
startOffset: -1,
endLine: -1,
endCol: -1,
endOffset: -1
};
TABLE_STRUCTURE_TAGS = /* @__PURE__ */ new Set([TAG_ID.TABLE, TAG_ID.TBODY, TAG_ID.TFOOT, TAG_ID.THEAD, TAG_ID.TR]);
defaultParserOptions = {
scriptingEnabled: true,
sourceCodeLocationInfo: false,
treeAdapter: defaultTreeAdapter,
onParseError: null
};
Parser = class {
constructor(options, document2, fragmentContext = null, scriptHandler = null) {
this.fragmentContext = fragmentContext;
this.scriptHandler = scriptHandler;
this.currentToken = null;
this.stopped = false;
this.insertionMode = InsertionMode.INITIAL;
this.originalInsertionMode = InsertionMode.INITIAL;
this.headElement = null;
this.formElement = null;
this.currentNotInHTML = false;
this.tmplInsertionModeStack = [];
this.pendingCharacterTokens = [];
this.hasNonWhitespacePendingCharacterToken = false;
this.framesetOk = true;
this.skipNextNewLine = false;
this.fosterParentingEnabled = false;
this.options = {
...defaultParserOptions,
...options
};
this.treeAdapter = this.options.treeAdapter;
this.onParseError = this.options.onParseError;
if (this.onParseError) {
this.options.sourceCodeLocationInfo = true;
}
this.document = document2 !== null && document2 !== void 0 ? document2 : this.treeAdapter.createDocument();
this.tokenizer = new Tokenizer(this.options, this);
this.activeFormattingElements = new FormattingElementList(this.treeAdapter);
this.fragmentContextID = fragmentContext ? getTagID(this.treeAdapter.getTagName(fragmentContext)) : TAG_ID.UNKNOWN;
this._setContextModes(fragmentContext !== null && fragmentContext !== void 0 ? fragmentContext : this.document, this.fragmentContextID);
this.openElements = new OpenElementStack(this.document, this.treeAdapter, this);
}
// API
static parse(html3, options) {
const parser = new this(options);
parser.tokenizer.write(html3, true);
return parser.document;
}
static getFragmentParser(fragmentContext, options) {
const opts = {
...defaultParserOptions,
...options
};
fragmentContext !== null && fragmentContext !== void 0 ? fragmentContext : fragmentContext = opts.treeAdapter.createElement(TAG_NAMES.TEMPLATE, NS.HTML, []);
const documentMock = opts.treeAdapter.createElement("documentmock", NS.HTML, []);
const parser = new this(opts, documentMock, fragmentContext);
if (parser.fragmentContextID === TAG_ID.TEMPLATE) {
parser.tmplInsertionModeStack.unshift(InsertionMode.IN_TEMPLATE);
}
parser._initTokenizerForFragmentParsing();
parser._insertFakeRootElement();
parser._resetInsertionMode();
parser._findFormInFragmentContext();
return parser;
}
getFragment() {
const rootElement = this.treeAdapter.getFirstChild(this.document);
const fragment = this.treeAdapter.createDocumentFragment();
this._adoptNodes(rootElement, fragment);
return fragment;
}
//Errors
/** @internal */
_err(token, code, beforeToken) {
var _a2;
if (!this.onParseError)
return;
const loc = (_a2 = token.location) !== null && _a2 !== void 0 ? _a2 : BASE_LOC;
const err2 = {
code,
startLine: loc.startLine,
startCol: loc.startCol,
startOffset: loc.startOffset,
endLine: beforeToken ? loc.startLine : loc.endLine,
endCol: beforeToken ? loc.startCol : loc.endCol,
endOffset: beforeToken ? loc.startOffset : loc.endOffset
};
this.onParseError(err2);
}
//Stack events
/** @internal */
onItemPush(node, tid, isTop) {
var _a2, _b;
(_b = (_a2 = this.treeAdapter).onItemPush) === null || _b === void 0 ? void 0 : _b.call(_a2, node);
if (isTop && this.openElements.stackTop > 0)
this._setContextModes(node, tid);
}
/** @internal */
onItemPop(node, isTop) {
var _a2, _b;
if (this.options.sourceCodeLocationInfo) {
this._setEndLocation(node, this.currentToken);
}
(_b = (_a2 = this.treeAdapter).onItemPop) === null || _b === void 0 ? void 0 : _b.call(_a2, node, this.openElements.current);
if (isTop) {
let current;
let currentTagId;
if (this.openElements.stackTop === 0 && this.fragmentContext) {
current = this.fragmentContext;
currentTagId = this.fragmentContextID;
} else {
({ current, currentTagId } = this.openElements);
}
this._setContextModes(current, currentTagId);
}
}
_setContextModes(current, tid) {
const isHTML = current === this.document || this.treeAdapter.getNamespaceURI(current) === NS.HTML;
this.currentNotInHTML = !isHTML;
this.tokenizer.inForeignNode = !isHTML && !this._isIntegrationPoint(tid, current);
}
/** @protected */
_switchToTextParsing(currentToken, nextTokenizerState) {
this._insertElement(currentToken, NS.HTML);
this.tokenizer.state = nextTokenizerState;
this.originalInsertionMode = this.insertionMode;
this.insertionMode = InsertionMode.TEXT;
}
switchToPlaintextParsing() {
this.insertionMode = InsertionMode.TEXT;
this.originalInsertionMode = InsertionMode.IN_BODY;
this.tokenizer.state = TokenizerMode.PLAINTEXT;
}
//Fragment parsing
/** @protected */
_getAdjustedCurrentElement() {
return this.openElements.stackTop === 0 && this.fragmentContext ? this.fragmentContext : this.openElements.current;
}
/** @protected */
_findFormInFragmentContext() {
let node = this.fragmentContext;
while (node) {
if (this.treeAdapter.getTagName(node) === TAG_NAMES.FORM) {
this.formElement = node;
break;
}
node = this.treeAdapter.getParentNode(node);
}
}
_initTokenizerForFragmentParsing() {
if (!this.fragmentContext || this.treeAdapter.getNamespaceURI(this.fragmentContext) !== NS.HTML) {
return;
}
switch (this.fragmentContextID) {
case TAG_ID.TITLE:
case TAG_ID.TEXTAREA: {
this.tokenizer.state = TokenizerMode.RCDATA;
break;
}
case TAG_ID.STYLE:
case TAG_ID.XMP:
case TAG_ID.IFRAME:
case TAG_ID.NOEMBED:
case TAG_ID.NOFRAMES:
case TAG_ID.NOSCRIPT: {
this.tokenizer.state = TokenizerMode.RAWTEXT;
break;
}
case TAG_ID.SCRIPT: {
this.tokenizer.state = TokenizerMode.SCRIPT_DATA;
break;
}
case TAG_ID.PLAINTEXT: {
this.tokenizer.state = TokenizerMode.PLAINTEXT;
break;
}
default:
}
}
//Tree mutation
/** @protected */
_setDocumentType(token) {
const name = token.name || "";
const publicId = token.publicId || "";
const systemId = token.systemId || "";
this.treeAdapter.setDocumentType(this.document, name, publicId, systemId);
if (token.location) {
const documentChildren = this.treeAdapter.getChildNodes(this.document);
const docTypeNode = documentChildren.find((node) => this.treeAdapter.isDocumentTypeNode(node));
if (docTypeNode) {
this.treeAdapter.setNodeSourceCodeLocation(docTypeNode, token.location);
}
}
}
/** @protected */
_attachElementToTree(element, location) {
if (this.options.sourceCodeLocationInfo) {
const loc = location && {
...location,
startTag: location
};
this.treeAdapter.setNodeSourceCodeLocation(element, loc);
}
if (this._shouldFosterParentOnInsertion()) {
this._fosterParentElement(element);
} else {
const parent2 = this.openElements.currentTmplContentOrNode;
this.treeAdapter.appendChild(parent2, element);
}
}
/**
* For self-closing tags. Add an element to the tree, but skip adding it
* to the stack.
*/
/** @protected */
_appendElement(token, namespaceURI) {
const element = this.treeAdapter.createElement(token.tagName, namespaceURI, token.attrs);
this._attachElementToTree(element, token.location);
}
/** @protected */
_insertElement(token, namespaceURI) {
const element = this.treeAdapter.createElement(token.tagName, namespaceURI, token.attrs);
this._attachElementToTree(element, token.location);
this.openElements.push(element, token.tagID);
}
/** @protected */
_insertFakeElement(tagName, tagID) {
const element = this.treeAdapter.createElement(tagName, NS.HTML, []);
this._attachElementToTree(element, null);
this.openElements.push(element, tagID);
}
/** @protected */
_insertTemplate(token) {
const tmpl = this.treeAdapter.createElement(token.tagName, NS.HTML, token.attrs);
const content = this.treeAdapter.createDocumentFragment();
this.treeAdapter.setTemplateContent(tmpl, content);
this._attachElementToTree(tmpl, token.location);
this.openElements.push(tmpl, token.tagID);
if (this.options.sourceCodeLocationInfo)
this.treeAdapter.setNodeSourceCodeLocation(content, null);
}
/** @protected */
_insertFakeRootElement() {
const element = this.treeAdapter.createElement(TAG_NAMES.HTML, NS.HTML, []);
if (this.options.sourceCodeLocationInfo)
this.treeAdapter.setNodeSourceCodeLocation(element, null);
this.treeAdapter.appendChild(this.openElements.current, element);
this.openElements.push(element, TAG_ID.HTML);
}
/** @protected */
_appendCommentNode(token, parent2) {
const commentNode = this.treeAdapter.createCommentNode(token.data);
this.treeAdapter.appendChild(parent2, commentNode);
if (this.options.sourceCodeLocationInfo) {
this.treeAdapter.setNodeSourceCodeLocation(commentNode, token.location);
}
}
/** @protected */
_insertCharacters(token) {
let parent2;
let beforeElement;
if (this._shouldFosterParentOnInsertion()) {
({ parent: parent2, beforeElement } = this._findFosterParentingLocation());
if (beforeElement) {
this.treeAdapter.insertTextBefore(parent2, token.chars, beforeElement);
} else {
this.treeAdapter.insertText(parent2, token.chars);
}
} else {
parent2 = this.openElements.currentTmplContentOrNode;
this.treeAdapter.insertText(parent2, token.chars);
}
if (!token.location)
return;
const siblings2 = this.treeAdapter.getChildNodes(parent2);
const textNodeIdx = beforeElement ? siblings2.lastIndexOf(beforeElement) : siblings2.length;
const textNode = siblings2[textNodeIdx - 1];
const tnLoc = this.treeAdapter.getNodeSourceCodeLocation(textNode);
if (tnLoc) {
const { endLine, endCol, endOffset } = token.location;
this.treeAdapter.updateNodeSourceCodeLocation(textNode, { endLine, endCol, endOffset });
} else if (this.options.sourceCodeLocationInfo) {
this.treeAdapter.setNodeSourceCodeLocation(textNode, token.location);
}
}
/** @protected */
_adoptNodes(donor, recipient) {
for (let child = this.treeAdapter.getFirstChild(donor); child; child = this.treeAdapter.getFirstChild(donor)) {
this.treeAdapter.detachNode(child);
this.treeAdapter.appendChild(recipient, child);
}
}
/** @protected */
_setEndLocation(element, closingToken) {
if (this.treeAdapter.getNodeSourceCodeLocation(element) && closingToken.location) {
const ctLoc = closingToken.location;
const tn = this.treeAdapter.getTagName(element);
const endLoc = (
// NOTE: For cases like <p> <p> </p> - First 'p' closes without a closing
// tag and for cases like <td> <p> </td> - 'p' closes without a closing tag.
closingToken.type === TokenType.END_TAG && tn === closingToken.tagName ? {
endTag: { ...ctLoc },
endLine: ctLoc.endLine,
endCol: ctLoc.endCol,
endOffset: ctLoc.endOffset
} : {
endLine: ctLoc.startLine,
endCol: ctLoc.startCol,
endOffset: ctLoc.startOffset
}
);
this.treeAdapter.updateNodeSourceCodeLocation(element, endLoc);
}
}
//Token processing
shouldProcessStartTagTokenInForeignContent(token) {
if (!this.currentNotInHTML)
return false;
let current;
let currentTagId;
if (this.openElements.stackTop === 0 && this.fragmentContext) {
current = this.fragmentContext;
currentTagId = this.fragmentContextID;
} else {
({ current, currentTagId } = this.openElements);
}
if (token.tagID === TAG_ID.SVG && this.treeAdapter.getTagName(current) === TAG_NAMES.ANNOTATION_XML && this.treeAdapter.getNamespaceURI(current) === NS.MATHML) {
return false;
}
return (
// Check that `current` is not an integration point for HTML or MathML elements.
this.tokenizer.inForeignNode || // If it _is_ an integration point, then we might have to check that it is not an HTML
// integration point.
(token.tagID === TAG_ID.MGLYPH || token.tagID === TAG_ID.MALIGNMARK) && !this._isIntegrationPoint(currentTagId, current, NS.HTML)
);
}
/** @protected */
_processToken(token) {
switch (token.type) {
case TokenType.CHARACTER: {
this.onCharacter(token);
break;
}
case TokenType.NULL_CHARACTER: {
this.onNullCharacter(token);
break;
}
case TokenType.COMMENT: {
this.onComment(token);
break;
}
case TokenType.DOCTYPE: {
this.onDoctype(token);
break;
}
case TokenType.START_TAG: {
this._processStartTag(token);
break;
}
case TokenType.END_TAG: {
this.onEndTag(token);
break;
}
case TokenType.EOF: {
this.onEof(token);
break;
}
case TokenType.WHITESPACE_CHARACTER: {
this.onWhitespaceCharacter(token);
break;
}
}
}
//Integration points
/** @protected */
_isIntegrationPoint(tid, element, foreignNS) {
const ns = this.treeAdapter.getNamespaceURI(element);
const attrs = this.treeAdapter.getAttrList(element);
return isIntegrationPoint(tid, ns, attrs, foreignNS);
}
//Active formatting elements reconstruction
/** @protected */
_reconstructActiveFormattingElements() {
const listLength = this.activeFormattingElements.entries.length;
if (listLength) {
const endIndex = this.activeFormattingElements.entries.findIndex((entry2) => entry2.type === EntryType.Marker || this.openElements.contains(entry2.element));
const unopenIdx = endIndex < 0 ? listLength - 1 : endIndex - 1;
for (let i = unopenIdx; i >= 0; i--) {
const entry2 = this.activeFormattingElements.entries[i];
this._insertElement(entry2.token, this.treeAdapter.getNamespaceURI(entry2.element));
entry2.element = this.openElements.current;
}
}
}
//Close elements
/** @protected */
_closeTableCell() {
this.openElements.generateImpliedEndTags();
this.openElements.popUntilTableCellPopped();
this.activeFormattingElements.clearToLastMarker();
this.insertionMode = InsertionMode.IN_ROW;
}
/** @protected */
_closePElement() {
this.openElements.generateImpliedEndTagsWithExclusion(TAG_ID.P);
this.openElements.popUntilTagNamePopped(TAG_ID.P);
}
//Insertion modes
/** @protected */
_resetInsertionMode() {
for (let i = this.openElements.stackTop; i >= 0; i--) {
switch (i === 0 && this.fragmentContext ? this.fragmentContextID : this.openElements.tagIDs[i]) {
case TAG_ID.TR: {
this.insertionMode = InsertionMode.IN_ROW;
return;
}
case TAG_ID.TBODY:
case TAG_ID.THEAD:
case TAG_ID.TFOOT: {
this.insertionMode = InsertionMode.IN_TABLE_BODY;
return;
}
case TAG_ID.CAPTION: {
this.insertionMode = InsertionMode.IN_CAPTION;
return;
}
case TAG_ID.COLGROUP: {
this.insertionMode = InsertionMode.IN_COLUMN_GROUP;
return;
}
case TAG_ID.TABLE: {
this.insertionMode = InsertionMode.IN_TABLE;
return;
}
case TAG_ID.BODY: {
this.insertionMode = InsertionMode.IN_BODY;
return;
}
case TAG_ID.FRAMESET: {
this.insertionMode = InsertionMode.IN_FRAMESET;
return;
}
case TAG_ID.SELECT: {
this._resetInsertionModeForSelect(i);
return;
}
case TAG_ID.TEMPLATE: {
this.insertionMode = this.tmplInsertionModeStack[0];
return;
}
case TAG_ID.HTML: {
this.insertionMode = this.headElement ? InsertionMode.AFTER_HEAD : InsertionMode.BEFORE_HEAD;
return;
}
case TAG_ID.TD:
case TAG_ID.TH: {
if (i > 0) {
this.insertionMode = InsertionMode.IN_CELL;
return;
}
break;
}
case TAG_ID.HEAD: {
if (i > 0) {
this.insertionMode = InsertionMode.IN_HEAD;
return;
}
break;
}
}
}
this.insertionMode = InsertionMode.IN_BODY;
}
/** @protected */
_resetInsertionModeForSelect(selectIdx) {
if (selectIdx > 0) {
for (let i = selectIdx - 1; i > 0; i--) {
const tn = this.openElements.tagIDs[i];
if (tn === TAG_ID.TEMPLATE) {
break;
} else if (tn === TAG_ID.TABLE) {
this.insertionMode = InsertionMode.IN_SELECT_IN_TABLE;
return;
}
}
}
this.insertionMode = InsertionMode.IN_SELECT;
}
//Foster parenting
/** @protected */
_isElementCausesFosterParenting(tn) {
return TABLE_STRUCTURE_TAGS.has(tn);
}
/** @protected */
_shouldFosterParentOnInsertion() {
return this.fosterParentingEnabled && this._isElementCausesFosterParenting(this.openElements.currentTagId);
}
/** @protected */
_findFosterParentingLocation() {
for (let i = this.openElements.stackTop; i >= 0; i--) {
const openElement = this.openElements.items[i];
switch (this.openElements.tagIDs[i]) {
case TAG_ID.TEMPLATE: {
if (this.treeAdapter.getNamespaceURI(openElement) === NS.HTML) {
return { parent: this.treeAdapter.getTemplateContent(openElement), beforeElement: null };
}
break;
}
case TAG_ID.TABLE: {
const parent2 = this.treeAdapter.getParentNode(openElement);
if (parent2) {
return { parent: parent2, beforeElement: openElement };
}
return { parent: this.openElements.items[i - 1], beforeElement: null };
}
default:
}
}
return { parent: this.openElements.items[0], beforeElement: null };
}
/** @protected */
_fosterParentElement(element) {
const location = this._findFosterParentingLocation();
if (location.beforeElement) {
this.treeAdapter.insertBefore(location.parent, element, location.beforeElement);
} else {
this.treeAdapter.appendChild(location.parent, element);
}
}
//Special elements
/** @protected */
_isSpecialElement(element, id) {
const ns = this.treeAdapter.getNamespaceURI(element);
return SPECIAL_ELEMENTS[ns].has(id);
}
/** @internal */
onCharacter(token) {
this.skipNextNewLine = false;
if (this.tokenizer.inForeignNode) {
characterInForeignContent(this, token);
return;
}
switch (this.insertionMode) {
case InsertionMode.INITIAL: {
tokenInInitialMode(this, token);
break;
}
case InsertionMode.BEFORE_HTML: {
tokenBeforeHtml(this, token);
break;
}
case InsertionMode.BEFORE_HEAD: {
tokenBeforeHead(this, token);
break;
}
case InsertionMode.IN_HEAD: {
tokenInHead(this, token);
break;
}
case InsertionMode.IN_HEAD_NO_SCRIPT: {
tokenInHeadNoScript(this, token);
break;
}
case InsertionMode.AFTER_HEAD: {
tokenAfterHead(this, token);
break;
}
case InsertionMode.IN_BODY:
case InsertionMode.IN_CAPTION:
case InsertionMode.IN_CELL:
case InsertionMode.IN_TEMPLATE: {
characterInBody(this, token);
break;
}
case InsertionMode.TEXT:
case InsertionMode.IN_SELECT:
case InsertionMode.IN_SELECT_IN_TABLE: {
this._insertCharacters(token);
break;
}
case InsertionMode.IN_TABLE:
case InsertionMode.IN_TABLE_BODY:
case InsertionMode.IN_ROW: {
characterInTable(this, token);
break;
}
case InsertionMode.IN_TABLE_TEXT: {
characterInTableText(this, token);
break;
}
case InsertionMode.IN_COLUMN_GROUP: {
tokenInColumnGroup(this, token);
break;
}
case InsertionMode.AFTER_BODY: {
tokenAfterBody(this, token);
break;
}
case InsertionMode.AFTER_AFTER_BODY: {
tokenAfterAfterBody(this, token);
break;
}
default:
}
}
/** @internal */
onNullCharacter(token) {
this.skipNextNewLine = false;
if (this.tokenizer.inForeignNode) {
nullCharacterInForeignContent(this, token);
return;
}
switch (this.insertionMode) {
case InsertionMode.INITIAL: {
tokenInInitialMode(this, token);
break;
}
case InsertionMode.BEFORE_HTML: {
tokenBeforeHtml(this, token);
break;
}
case InsertionMode.BEFORE_HEAD: {
tokenBeforeHead(this, token);
break;
}
case InsertionMode.IN_HEAD: {
tokenInHead(this, token);
break;
}
case InsertionMode.IN_HEAD_NO_SCRIPT: {
tokenInHeadNoScript(this, token);
break;
}
case InsertionMode.AFTER_HEAD: {
tokenAfterHead(this, token);
break;
}
case InsertionMode.TEXT: {
this._insertCharacters(token);
break;
}
case InsertionMode.IN_TABLE:
case InsertionMode.IN_TABLE_BODY:
case InsertionMode.IN_ROW: {
characterInTable(this, token);
break;
}
case InsertionMode.IN_COLUMN_GROUP: {
tokenInColumnGroup(this, token);
break;
}
case InsertionMode.AFTER_BODY: {
tokenAfterBody(this, token);
break;
}
case InsertionMode.AFTER_AFTER_BODY: {
tokenAfterAfterBody(this, token);
break;
}
default:
}
}
/** @internal */
onComment(token) {
this.skipNextNewLine = false;
if (this.currentNotInHTML) {
appendComment(this, token);
return;
}
switch (this.insertionMode) {
case InsertionMode.INITIAL:
case InsertionMode.BEFORE_HTML:
case InsertionMode.BEFORE_HEAD:
case InsertionMode.IN_HEAD:
case InsertionMode.IN_HEAD_NO_SCRIPT:
case InsertionMode.AFTER_HEAD:
case InsertionMode.IN_BODY:
case InsertionMode.IN_TABLE:
case InsertionMode.IN_CAPTION:
case InsertionMode.IN_COLUMN_GROUP:
case InsertionMode.IN_TABLE_BODY:
case InsertionMode.IN_ROW:
case InsertionMode.IN_CELL:
case InsertionMode.IN_SELECT:
case InsertionMode.IN_SELECT_IN_TABLE:
case InsertionMode.IN_TEMPLATE:
case InsertionMode.IN_FRAMESET:
case InsertionMode.AFTER_FRAMESET: {
appendComment(this, token);
break;
}
case InsertionMode.IN_TABLE_TEXT: {
tokenInTableText(this, token);
break;
}
case InsertionMode.AFTER_BODY: {
appendCommentToRootHtmlElement(this, token);
break;
}
case InsertionMode.AFTER_AFTER_BODY:
case InsertionMode.AFTER_AFTER_FRAMESET: {
appendCommentToDocument(this, token);
break;
}
default:
}
}
/** @internal */
onDoctype(token) {
this.skipNextNewLine = false;
switch (this.insertionMode) {
case InsertionMode.INITIAL: {
doctypeInInitialMode(this, token);
break;
}
case InsertionMode.BEFORE_HEAD:
case InsertionMode.IN_HEAD:
case InsertionMode.IN_HEAD_NO_SCRIPT:
case InsertionMode.AFTER_HEAD: {
this._err(token, ERR.misplacedDoctype);
break;
}
case InsertionMode.IN_TABLE_TEXT: {
tokenInTableText(this, token);
break;
}
default:
}
}
/** @internal */
onStartTag(token) {
this.skipNextNewLine = false;
this.currentToken = token;
this._processStartTag(token);
if (token.selfClosing && !token.ackSelfClosing) {
this._err(token, ERR.nonVoidHtmlElementStartTagWithTrailingSolidus);
}
}
/**
* Processes a given start tag.
*
* `onStartTag` checks if a self-closing tag was recognized. When a token
* is moved inbetween multiple insertion modes, this check for self-closing
* could lead to false positives. To avoid this, `_processStartTag` is used
* for nested calls.
*
* @param token The token to process.
* @protected
*/
_processStartTag(token) {
if (this.shouldProcessStartTagTokenInForeignContent(token)) {
startTagInForeignContent(this, token);
} else {
this._startTagOutsideForeignContent(token);
}
}
/** @protected */
_startTagOutsideForeignContent(token) {
switch (this.insertionMode) {
case InsertionMode.INITIAL: {
tokenInInitialMode(this, token);
break;
}
case InsertionMode.BEFORE_HTML: {
startTagBeforeHtml(this, token);
break;
}
case InsertionMode.BEFORE_HEAD: {
startTagBeforeHead(this, token);
break;
}
case InsertionMode.IN_HEAD: {
startTagInHead(this, token);
break;
}
case InsertionMode.IN_HEAD_NO_SCRIPT: {
startTagInHeadNoScript(this, token);
break;
}
case InsertionMode.AFTER_HEAD: {
startTagAfterHead(this, token);
break;
}
case InsertionMode.IN_BODY: {
startTagInBody(this, token);
break;
}
case InsertionMode.IN_TABLE: {
startTagInTable(this, token);
break;
}
case InsertionMode.IN_TABLE_TEXT: {
tokenInTableText(this, token);
break;
}
case InsertionMode.IN_CAPTION: {
startTagInCaption(this, token);
break;
}
case InsertionMode.IN_COLUMN_GROUP: {
startTagInColumnGroup(this, token);
break;
}
case InsertionMode.IN_TABLE_BODY: {
startTagInTableBody(this, token);
break;
}
case InsertionMode.IN_ROW: {
startTagInRow(this, token);
break;
}
case InsertionMode.IN_CELL: {
startTagInCell(this, token);
break;
}
case InsertionMode.IN_SELECT: {
startTagInSelect(this, token);
break;
}
case InsertionMode.IN_SELECT_IN_TABLE: {
startTagInSelectInTable(this, token);
break;
}
case InsertionMode.IN_TEMPLATE: {
startTagInTemplate(this, token);
break;
}
case InsertionMode.AFTER_BODY: {
startTagAfterBody(this, token);
break;
}
case InsertionMode.IN_FRAMESET: {
startTagInFrameset(this, token);
break;
}
case InsertionMode.AFTER_FRAMESET: {
startTagAfterFrameset(this, token);
break;
}
case InsertionMode.AFTER_AFTER_BODY: {
startTagAfterAfterBody(this, token);
break;
}
case InsertionMode.AFTER_AFTER_FRAMESET: {
startTagAfterAfterFrameset(this, token);
break;
}
default:
}
}
/** @internal */
onEndTag(token) {
this.skipNextNewLine = false;
this.currentToken = token;
if (this.currentNotInHTML) {
endTagInForeignContent(this, token);
} else {
this._endTagOutsideForeignContent(token);
}
}
/** @protected */
_endTagOutsideForeignContent(token) {
switch (this.insertionMode) {
case InsertionMode.INITIAL: {
tokenInInitialMode(this, token);
break;
}
case InsertionMode.BEFORE_HTML: {
endTagBeforeHtml(this, token);
break;
}
case InsertionMode.BEFORE_HEAD: {
endTagBeforeHead(this, token);
break;
}
case InsertionMode.IN_HEAD: {
endTagInHead(this, token);
break;
}
case InsertionMode.IN_HEAD_NO_SCRIPT: {
endTagInHeadNoScript(this, token);
break;
}
case InsertionMode.AFTER_HEAD: {
endTagAfterHead(this, token);
break;
}
case InsertionMode.IN_BODY: {
endTagInBody(this, token);
break;
}
case InsertionMode.TEXT: {
endTagInText(this, token);
break;
}
case InsertionMode.IN_TABLE: {
endTagInTable(this, token);
break;
}
case InsertionMode.IN_TABLE_TEXT: {
tokenInTableText(this, token);
break;
}
case InsertionMode.IN_CAPTION: {
endTagInCaption(this, token);
break;
}
case InsertionMode.IN_COLUMN_GROUP: {
endTagInColumnGroup(this, token);
break;
}
case InsertionMode.IN_TABLE_BODY: {
endTagInTableBody(this, token);
break;
}
case InsertionMode.IN_ROW: {
endTagInRow(this, token);
break;
}
case InsertionMode.IN_CELL: {
endTagInCell(this, token);
break;
}
case InsertionMode.IN_SELECT: {
endTagInSelect(this, token);
break;
}
case InsertionMode.IN_SELECT_IN_TABLE: {
endTagInSelectInTable(this, token);
break;
}
case InsertionMode.IN_TEMPLATE: {
endTagInTemplate(this, token);
break;
}
case InsertionMode.AFTER_BODY: {
endTagAfterBody(this, token);
break;
}
case InsertionMode.IN_FRAMESET: {
endTagInFrameset(this, token);
break;
}
case InsertionMode.AFTER_FRAMESET: {
endTagAfterFrameset(this, token);
break;
}
case InsertionMode.AFTER_AFTER_BODY: {
tokenAfterAfterBody(this, token);
break;
}
default:
}
}
/** @internal */
onEof(token) {
switch (this.insertionMode) {
case InsertionMode.INITIAL: {
tokenInInitialMode(this, token);
break;
}
case InsertionMode.BEFORE_HTML: {
tokenBeforeHtml(this, token);
break;
}
case InsertionMode.BEFORE_HEAD: {
tokenBeforeHead(this, token);
break;
}
case InsertionMode.IN_HEAD: {
tokenInHead(this, token);
break;
}
case InsertionMode.IN_HEAD_NO_SCRIPT: {
tokenInHeadNoScript(this, token);
break;
}
case InsertionMode.AFTER_HEAD: {
tokenAfterHead(this, token);
break;
}
case InsertionMode.IN_BODY:
case InsertionMode.IN_TABLE:
case InsertionMode.IN_CAPTION:
case InsertionMode.IN_COLUMN_GROUP:
case InsertionMode.IN_TABLE_BODY:
case InsertionMode.IN_ROW:
case InsertionMode.IN_CELL:
case InsertionMode.IN_SELECT:
case InsertionMode.IN_SELECT_IN_TABLE: {
eofInBody(this, token);
break;
}
case InsertionMode.TEXT: {
eofInText(this, token);
break;
}
case InsertionMode.IN_TABLE_TEXT: {
tokenInTableText(this, token);
break;
}
case InsertionMode.IN_TEMPLATE: {
eofInTemplate(this, token);
break;
}
case InsertionMode.AFTER_BODY:
case InsertionMode.IN_FRAMESET:
case InsertionMode.AFTER_FRAMESET:
case InsertionMode.AFTER_AFTER_BODY:
case InsertionMode.AFTER_AFTER_FRAMESET: {
stopParsing(this, token);
break;
}
default:
}
}
/** @internal */
onWhitespaceCharacter(token) {
if (this.skipNextNewLine) {
this.skipNextNewLine = false;
if (token.chars.charCodeAt(0) === CODE_POINTS.LINE_FEED) {
if (token.chars.length === 1) {
return;
}
token.chars = token.chars.substr(1);
}
}
if (this.tokenizer.inForeignNode) {
this._insertCharacters(token);
return;
}
switch (this.insertionMode) {
case InsertionMode.IN_HEAD:
case InsertionMode.IN_HEAD_NO_SCRIPT:
case InsertionMode.AFTER_HEAD:
case InsertionMode.TEXT:
case InsertionMode.IN_COLUMN_GROUP:
case InsertionMode.IN_SELECT:
case InsertionMode.IN_SELECT_IN_TABLE:
case InsertionMode.IN_FRAMESET:
case InsertionMode.AFTER_FRAMESET: {
this._insertCharacters(token);
break;
}
case InsertionMode.IN_BODY:
case InsertionMode.IN_CAPTION:
case InsertionMode.IN_CELL:
case InsertionMode.IN_TEMPLATE:
case InsertionMode.AFTER_BODY:
case InsertionMode.AFTER_AFTER_BODY:
case InsertionMode.AFTER_AFTER_FRAMESET: {
whitespaceCharacterInBody(this, token);
break;
}
case InsertionMode.IN_TABLE:
case InsertionMode.IN_TABLE_BODY:
case InsertionMode.IN_ROW: {
characterInTable(this, token);
break;
}
case InsertionMode.IN_TABLE_TEXT: {
whitespaceCharacterInTableText(this, token);
break;
}
default:
}
}
};
TABLE_VOID_ELEMENTS = /* @__PURE__ */ new Set([TAG_ID.CAPTION, TAG_ID.COL, TAG_ID.COLGROUP, TAG_ID.TBODY, TAG_ID.TD, TAG_ID.TFOOT, TAG_ID.TH, TAG_ID.THEAD, TAG_ID.TR]);
}
});
// node_modules/parse5/dist/serializer/index.js
function isVoidElement(node, options) {
return options.treeAdapter.isElementNode(node) && options.treeAdapter.getNamespaceURI(node) === NS.HTML && VOID_ELEMENTS.has(options.treeAdapter.getTagName(node));
}
function serializeOuter(node, options) {
const opts = { ...defaultOpts3, ...options };
return serializeNode(node, opts);
}
function serializeChildNodes(parentNode, options) {
let html3 = "";
const container = options.treeAdapter.isElementNode(parentNode) && options.treeAdapter.getTagName(parentNode) === TAG_NAMES.TEMPLATE && options.treeAdapter.getNamespaceURI(parentNode) === NS.HTML ? options.treeAdapter.getTemplateContent(parentNode) : parentNode;
const childNodes = options.treeAdapter.getChildNodes(container);
if (childNodes) {
for (const currentNode of childNodes) {
html3 += serializeNode(currentNode, options);
}
}
return html3;
}
function serializeNode(node, options) {
if (options.treeAdapter.isElementNode(node)) {
return serializeElement(node, options);
}
if (options.treeAdapter.isTextNode(node)) {
return serializeTextNode(node, options);
}
if (options.treeAdapter.isCommentNode(node)) {
return serializeCommentNode(node, options);
}
if (options.treeAdapter.isDocumentTypeNode(node)) {
return serializeDocumentTypeNode(node, options);
}
return "";
}
function serializeElement(node, options) {
const tn = options.treeAdapter.getTagName(node);
return `<${tn}${serializeAttributes(node, options)}>${isVoidElement(node, options) ? "" : `${serializeChildNodes(node, options)}</${tn}>`}`;
}
function serializeAttributes(node, { treeAdapter }) {
let html3 = "";
for (const attr2 of treeAdapter.getAttrList(node)) {
html3 += " ";
if (attr2.namespace) {
switch (attr2.namespace) {
case NS.XML: {
html3 += `xml:${attr2.name}`;
break;
}
case NS.XMLNS: {
if (attr2.name !== "xmlns") {
html3 += "xmlns:";
}
html3 += attr2.name;
break;
}
case NS.XLINK: {
html3 += `xlink:${attr2.name}`;
break;
}
default: {
html3 += `${attr2.prefix}:${attr2.name}`;
}
}
} else {
html3 += attr2.name;
}
html3 += `="${escapeAttribute(attr2.value)}"`;
}
return html3;
}
function serializeTextNode(node, options) {
const { treeAdapter } = options;
const content = treeAdapter.getTextNodeContent(node);
const parent2 = treeAdapter.getParentNode(node);
const parentTn = parent2 && treeAdapter.isElementNode(parent2) && treeAdapter.getTagName(parent2);
return parentTn && treeAdapter.getNamespaceURI(parent2) === NS.HTML && hasUnescapedText(parentTn, options.scriptingEnabled) ? content : escapeText(content);
}
function serializeCommentNode(node, { treeAdapter }) {
return `<!--${treeAdapter.getCommentNodeContent(node)}-->`;
}
function serializeDocumentTypeNode(node, { treeAdapter }) {
return `<!DOCTYPE ${treeAdapter.getDocumentTypeNodeName(node)}>`;
}
var VOID_ELEMENTS, defaultOpts3;
var init_serializer = __esm({
"node_modules/parse5/dist/serializer/index.js"() {
init_html();
init_escape();
init_default();
VOID_ELEMENTS = /* @__PURE__ */ new Set([
TAG_NAMES.AREA,
TAG_NAMES.BASE,
TAG_NAMES.BASEFONT,
TAG_NAMES.BGSOUND,
TAG_NAMES.BR,
TAG_NAMES.COL,
TAG_NAMES.EMBED,
TAG_NAMES.FRAME,
TAG_NAMES.HR,
TAG_NAMES.IMG,
TAG_NAMES.INPUT,
TAG_NAMES.KEYGEN,
TAG_NAMES.LINK,
TAG_NAMES.META,
TAG_NAMES.PARAM,
TAG_NAMES.SOURCE,
TAG_NAMES.TRACK,
TAG_NAMES.WBR
]);
defaultOpts3 = { treeAdapter: defaultTreeAdapter, scriptingEnabled: true };
}
});
// node_modules/parse5/dist/index.js
function parse6(html3, options) {
return Parser.parse(html3, options);
}
function parseFragment(fragmentContext, html3, options) {
if (typeof fragmentContext === "string") {
options = html3;
html3 = fragmentContext;
fragmentContext = null;
}
const parser = Parser.getFragmentParser(fragmentContext, options);
parser.tokenizer.write(html3, true);
return parser.getFragment();
}
var init_dist = __esm({
"node_modules/parse5/dist/index.js"() {
init_parser();
init_default();
init_parser();
init_serializer();
init_error_codes();
init_foreign_content();
init_html();
init_token();
init_tokenizer();
}
});
// node_modules/parse5-htmlparser2-tree-adapter/dist/index.js
function enquoteDoctypeId(id) {
const quote = id.includes('"') ? "'" : '"';
return quote + id + quote;
}
function serializeDoctypeContent(name, publicId, systemId) {
let str = "!DOCTYPE ";
if (name) {
str += name;
}
if (publicId) {
str += ` PUBLIC ${enquoteDoctypeId(publicId)}`;
} else if (systemId) {
str += " SYSTEM";
}
if (systemId) {
str += ` ${enquoteDoctypeId(systemId)}`;
}
return str;
}
var adapter;
var init_dist2 = __esm({
"node_modules/parse5-htmlparser2-tree-adapter/dist/index.js"() {
init_dist();
init_esm2();
adapter = {
// Re-exports from domhandler
isCommentNode: isComment,
isElementNode: isTag2,
isTextNode: isText,
//Node construction
createDocument() {
const node = new Document([]);
node["x-mode"] = html_exports.DOCUMENT_MODE.NO_QUIRKS;
return node;
},
createDocumentFragment() {
return new Document([]);
},
createElement(tagName, namespaceURI, attrs) {
const attribs = /* @__PURE__ */ Object.create(null);
const attribsNamespace = /* @__PURE__ */ Object.create(null);
const attribsPrefix = /* @__PURE__ */ Object.create(null);
for (let i = 0; i < attrs.length; i++) {
const attrName = attrs[i].name;
attribs[attrName] = attrs[i].value;
attribsNamespace[attrName] = attrs[i].namespace;
attribsPrefix[attrName] = attrs[i].prefix;
}
const node = new Element(tagName, attribs, []);
node.namespace = namespaceURI;
node["x-attribsNamespace"] = attribsNamespace;
node["x-attribsPrefix"] = attribsPrefix;
return node;
},
createCommentNode(data2) {
return new Comment2(data2);
},
createTextNode(value) {
return new Text2(value);
},
//Tree mutation
appendChild(parentNode, newNode) {
const prev2 = parentNode.children[parentNode.children.length - 1];
if (prev2) {
prev2.next = newNode;
newNode.prev = prev2;
}
parentNode.children.push(newNode);
newNode.parent = parentNode;
},
insertBefore(parentNode, newNode, referenceNode) {
const insertionIdx = parentNode.children.indexOf(referenceNode);
const { prev: prev2 } = referenceNode;
if (prev2) {
prev2.next = newNode;
newNode.prev = prev2;
}
referenceNode.prev = newNode;
newNode.next = referenceNode;
parentNode.children.splice(insertionIdx, 0, newNode);
newNode.parent = parentNode;
},
setTemplateContent(templateElement, contentElement) {
adapter.appendChild(templateElement, contentElement);
},
getTemplateContent(templateElement) {
return templateElement.children[0];
},
setDocumentType(document2, name, publicId, systemId) {
const data2 = serializeDoctypeContent(name, publicId, systemId);
let doctypeNode = document2.children.find((node) => isDirective(node) && node.name === "!doctype");
if (doctypeNode) {
doctypeNode.data = data2 !== null && data2 !== void 0 ? data2 : null;
} else {
doctypeNode = new ProcessingInstruction("!doctype", data2);
adapter.appendChild(document2, doctypeNode);
}
doctypeNode["x-name"] = name;
doctypeNode["x-publicId"] = publicId;
doctypeNode["x-systemId"] = systemId;
},
setDocumentMode(document2, mode) {
document2["x-mode"] = mode;
},
getDocumentMode(document2) {
return document2["x-mode"];
},
detachNode(node) {
if (node.parent) {
const idx = node.parent.children.indexOf(node);
const { prev: prev2, next: next2 } = node;
node.prev = null;
node.next = null;
if (prev2) {
prev2.next = next2;
}
if (next2) {
next2.prev = prev2;
}
node.parent.children.splice(idx, 1);
node.parent = null;
}
},
insertText(parentNode, text3) {
const lastChild = parentNode.children[parentNode.children.length - 1];
if (lastChild && isText(lastChild)) {
lastChild.data += text3;
} else {
adapter.appendChild(parentNode, adapter.createTextNode(text3));
}
},
insertTextBefore(parentNode, text3, referenceNode) {
const prevNode = parentNode.children[parentNode.children.indexOf(referenceNode) - 1];
if (prevNode && isText(prevNode)) {
prevNode.data += text3;
} else {
adapter.insertBefore(parentNode, adapter.createTextNode(text3), referenceNode);
}
},
adoptAttributes(recipient, attrs) {
for (let i = 0; i < attrs.length; i++) {
const attrName = attrs[i].name;
if (recipient.attribs[attrName] === void 0) {
recipient.attribs[attrName] = attrs[i].value;
recipient["x-attribsNamespace"][attrName] = attrs[i].namespace;
recipient["x-attribsPrefix"][attrName] = attrs[i].prefix;
}
}
},
//Tree traversing
getFirstChild(node) {
return node.children[0];
},
getChildNodes(node) {
return node.children;
},
getParentNode(node) {
return node.parent;
},
getAttrList(element) {
return element.attributes;
},
//Node data
getTagName(element) {
return element.name;
},
getNamespaceURI(element) {
return element.namespace;
},
getTextNodeContent(textNode) {
return textNode.data;
},
getCommentNodeContent(commentNode) {
return commentNode.data;
},
getDocumentTypeNodeName(doctypeNode) {
var _a2;
return (_a2 = doctypeNode["x-name"]) !== null && _a2 !== void 0 ? _a2 : "";
},
getDocumentTypeNodePublicId(doctypeNode) {
var _a2;
return (_a2 = doctypeNode["x-publicId"]) !== null && _a2 !== void 0 ? _a2 : "";
},
getDocumentTypeNodeSystemId(doctypeNode) {
var _a2;
return (_a2 = doctypeNode["x-systemId"]) !== null && _a2 !== void 0 ? _a2 : "";
},
//Node types
isDocumentTypeNode(node) {
return isDirective(node) && node.name === "!doctype";
},
// Source code location
setNodeSourceCodeLocation(node, location) {
if (location) {
node.startIndex = location.startOffset;
node.endIndex = location.endOffset;
}
node.sourceCodeLocation = location;
},
getNodeSourceCodeLocation(node) {
return node.sourceCodeLocation;
},
updateNodeSourceCodeLocation(node, endLocation) {
if (endLocation.endOffset != null)
node.endIndex = endLocation.endOffset;
node.sourceCodeLocation = {
...node.sourceCodeLocation,
...endLocation
};
}
};
}
});
// node_modules/cheerio/dist/esm/parsers/parse5-adapter.js
function parseWithParse5(content, options, isDocument2, context) {
var _a2;
(_a2 = options.treeAdapter) !== null && _a2 !== void 0 ? _a2 : options.treeAdapter = adapter;
if (options.scriptingEnabled !== false) {
options.scriptingEnabled = true;
}
return isDocument2 ? parse6(content, options) : parseFragment(context, content, options);
}
function renderWithParse5(dom) {
const nodes = "length" in dom ? dom : [dom];
for (let index2 = 0; index2 < nodes.length; index2 += 1) {
const node = nodes[index2];
if (isDocument(node)) {
Array.prototype.splice.call(nodes, index2, 1, ...node.children);
}
}
let result = "";
for (let index2 = 0; index2 < nodes.length; index2 += 1) {
const node = nodes[index2];
result += serializeOuter(node, renderOpts);
}
return result;
}
var renderOpts;
var init_parse5_adapter = __esm({
"node_modules/cheerio/dist/esm/parsers/parse5-adapter.js"() {
init_esm2();
init_dist();
init_dist2();
renderOpts = { treeAdapter: adapter };
}
});
// node_modules/htmlparser2/lib/esm/Tokenizer.js
function isWhitespace2(c) {
return c === CharCodes2.Space || c === CharCodes2.NewLine || c === CharCodes2.Tab || c === CharCodes2.FormFeed || c === CharCodes2.CarriageReturn;
}
function isEndOfTagSection(c) {
return c === CharCodes2.Slash || c === CharCodes2.Gt || isWhitespace2(c);
}
function isASCIIAlpha(c) {
return c >= CharCodes2.LowerA && c <= CharCodes2.LowerZ || c >= CharCodes2.UpperA && c <= CharCodes2.UpperZ;
}
var CharCodes2, State2, QuoteType, Sequences, Tokenizer2;
var init_Tokenizer = __esm({
"node_modules/htmlparser2/lib/esm/Tokenizer.js"() {
init_decode();
(function(CharCodes3) {
CharCodes3[CharCodes3["Tab"] = 9] = "Tab";
CharCodes3[CharCodes3["NewLine"] = 10] = "NewLine";
CharCodes3[CharCodes3["FormFeed"] = 12] = "FormFeed";
CharCodes3[CharCodes3["CarriageReturn"] = 13] = "CarriageReturn";
CharCodes3[CharCodes3["Space"] = 32] = "Space";
CharCodes3[CharCodes3["ExclamationMark"] = 33] = "ExclamationMark";
CharCodes3[CharCodes3["Number"] = 35] = "Number";
CharCodes3[CharCodes3["Amp"] = 38] = "Amp";
CharCodes3[CharCodes3["SingleQuote"] = 39] = "SingleQuote";
CharCodes3[CharCodes3["DoubleQuote"] = 34] = "DoubleQuote";
CharCodes3[CharCodes3["Dash"] = 45] = "Dash";
CharCodes3[CharCodes3["Slash"] = 47] = "Slash";
CharCodes3[CharCodes3["Zero"] = 48] = "Zero";
CharCodes3[CharCodes3["Nine"] = 57] = "Nine";
CharCodes3[CharCodes3["Semi"] = 59] = "Semi";
CharCodes3[CharCodes3["Lt"] = 60] = "Lt";
CharCodes3[CharCodes3["Eq"] = 61] = "Eq";
CharCodes3[CharCodes3["Gt"] = 62] = "Gt";
CharCodes3[CharCodes3["Questionmark"] = 63] = "Questionmark";
CharCodes3[CharCodes3["UpperA"] = 65] = "UpperA";
CharCodes3[CharCodes3["LowerA"] = 97] = "LowerA";
CharCodes3[CharCodes3["UpperF"] = 70] = "UpperF";
CharCodes3[CharCodes3["LowerF"] = 102] = "LowerF";
CharCodes3[CharCodes3["UpperZ"] = 90] = "UpperZ";
CharCodes3[CharCodes3["LowerZ"] = 122] = "LowerZ";
CharCodes3[CharCodes3["LowerX"] = 120] = "LowerX";
CharCodes3[CharCodes3["OpeningSquareBracket"] = 91] = "OpeningSquareBracket";
})(CharCodes2 || (CharCodes2 = {}));
(function(State4) {
State4[State4["Text"] = 1] = "Text";
State4[State4["BeforeTagName"] = 2] = "BeforeTagName";
State4[State4["InTagName"] = 3] = "InTagName";
State4[State4["InSelfClosingTag"] = 4] = "InSelfClosingTag";
State4[State4["BeforeClosingTagName"] = 5] = "BeforeClosingTagName";
State4[State4["InClosingTagName"] = 6] = "InClosingTagName";
State4[State4["AfterClosingTagName"] = 7] = "AfterClosingTagName";
State4[State4["BeforeAttributeName"] = 8] = "BeforeAttributeName";
State4[State4["InAttributeName"] = 9] = "InAttributeName";
State4[State4["AfterAttributeName"] = 10] = "AfterAttributeName";
State4[State4["BeforeAttributeValue"] = 11] = "BeforeAttributeValue";
State4[State4["InAttributeValueDq"] = 12] = "InAttributeValueDq";
State4[State4["InAttributeValueSq"] = 13] = "InAttributeValueSq";
State4[State4["InAttributeValueNq"] = 14] = "InAttributeValueNq";
State4[State4["BeforeDeclaration"] = 15] = "BeforeDeclaration";
State4[State4["InDeclaration"] = 16] = "InDeclaration";
State4[State4["InProcessingInstruction"] = 17] = "InProcessingInstruction";
State4[State4["BeforeComment"] = 18] = "BeforeComment";
State4[State4["CDATASequence"] = 19] = "CDATASequence";
State4[State4["InSpecialComment"] = 20] = "InSpecialComment";
State4[State4["InCommentLike"] = 21] = "InCommentLike";
State4[State4["BeforeSpecialS"] = 22] = "BeforeSpecialS";
State4[State4["BeforeSpecialT"] = 23] = "BeforeSpecialT";
State4[State4["SpecialStartSequence"] = 24] = "SpecialStartSequence";
State4[State4["InSpecialTag"] = 25] = "InSpecialTag";
State4[State4["InEntity"] = 26] = "InEntity";
})(State2 || (State2 = {}));
(function(QuoteType2) {
QuoteType2[QuoteType2["NoValue"] = 0] = "NoValue";
QuoteType2[QuoteType2["Unquoted"] = 1] = "Unquoted";
QuoteType2[QuoteType2["Single"] = 2] = "Single";
QuoteType2[QuoteType2["Double"] = 3] = "Double";
})(QuoteType || (QuoteType = {}));
Sequences = {
Cdata: new Uint8Array([67, 68, 65, 84, 65, 91]),
// CDATA[
CdataEnd: new Uint8Array([93, 93, 62]),
// ]]>
CommentEnd: new Uint8Array([45, 45, 62]),
// `-->`
ScriptEnd: new Uint8Array([60, 47, 115, 99, 114, 105, 112, 116]),
// `</script`
StyleEnd: new Uint8Array([60, 47, 115, 116, 121, 108, 101]),
// `</style`
TitleEnd: new Uint8Array([60, 47, 116, 105, 116, 108, 101]),
// `</title`
TextareaEnd: new Uint8Array([
60,
47,
116,
101,
120,
116,
97,
114,
101,
97
])
// `</textarea`
};
Tokenizer2 = class {
constructor({ xmlMode = false, decodeEntities = true }, cbs) {
this.cbs = cbs;
this.state = State2.Text;
this.buffer = "";
this.sectionStart = 0;
this.index = 0;
this.entityStart = 0;
this.baseState = State2.Text;
this.isSpecial = false;
this.running = true;
this.offset = 0;
this.currentSequence = void 0;
this.sequenceIndex = 0;
this.xmlMode = xmlMode;
this.decodeEntities = decodeEntities;
this.entityDecoder = new EntityDecoder(xmlMode ? decode_data_xml_default : decode_data_html_default, (cp, consumed) => this.emitCodePoint(cp, consumed));
}
reset() {
this.state = State2.Text;
this.buffer = "";
this.sectionStart = 0;
this.index = 0;
this.baseState = State2.Text;
this.currentSequence = void 0;
this.running = true;
this.offset = 0;
}
write(chunk) {
this.offset += this.buffer.length;
this.buffer = chunk;
this.parse();
}
end() {
if (this.running)
this.finish();
}
pause() {
this.running = false;
}
resume() {
this.running = true;
if (this.index < this.buffer.length + this.offset) {
this.parse();
}
}
stateText(c) {
if (c === CharCodes2.Lt || !this.decodeEntities && this.fastForwardTo(CharCodes2.Lt)) {
if (this.index > this.sectionStart) {
this.cbs.ontext(this.sectionStart, this.index);
}
this.state = State2.BeforeTagName;
this.sectionStart = this.index;
} else if (this.decodeEntities && c === CharCodes2.Amp) {
this.startEntity();
}
}
stateSpecialStartSequence(c) {
const isEnd = this.sequenceIndex === this.currentSequence.length;
const isMatch = isEnd ? (
// If we are at the end of the sequence, make sure the tag name has ended
isEndOfTagSection(c)
) : (
// Otherwise, do a case-insensitive comparison
(c | 32) === this.currentSequence[this.sequenceIndex]
);
if (!isMatch) {
this.isSpecial = false;
} else if (!isEnd) {
this.sequenceIndex++;
return;
}
this.sequenceIndex = 0;
this.state = State2.InTagName;
this.stateInTagName(c);
}
/** Look for an end tag. For <title> tags, also decode entities. */
stateInSpecialTag(c) {
if (this.sequenceIndex === this.currentSequence.length) {
if (c === CharCodes2.Gt || isWhitespace2(c)) {
const endOfText = this.index - this.currentSequence.length;
if (this.sectionStart < endOfText) {
const actualIndex = this.index;
this.index = endOfText;
this.cbs.ontext(this.sectionStart, endOfText);
this.index = actualIndex;
}
this.isSpecial = false;
this.sectionStart = endOfText + 2;
this.stateInClosingTagName(c);
return;
}
this.sequenceIndex = 0;
}
if ((c | 32) === this.currentSequence[this.sequenceIndex]) {
this.sequenceIndex += 1;
} else if (this.sequenceIndex === 0) {
if (this.currentSequence === Sequences.TitleEnd) {
if (this.decodeEntities && c === CharCodes2.Amp) {
this.startEntity();
}
} else if (this.fastForwardTo(CharCodes2.Lt)) {
this.sequenceIndex = 1;
}
} else {
this.sequenceIndex = Number(c === CharCodes2.Lt);
}
}
stateCDATASequence(c) {
if (c === Sequences.Cdata[this.sequenceIndex]) {
if (++this.sequenceIndex === Sequences.Cdata.length) {
this.state = State2.InCommentLike;
this.currentSequence = Sequences.CdataEnd;
this.sequenceIndex = 0;
this.sectionStart = this.index + 1;
}
} else {
this.sequenceIndex = 0;
this.state = State2.InDeclaration;
this.stateInDeclaration(c);
}
}
/**
* When we wait for one specific character, we can speed things up
* by skipping through the buffer until we find it.
*
* @returns Whether the character was found.
*/
fastForwardTo(c) {
while (++this.index < this.buffer.length + this.offset) {
if (this.buffer.charCodeAt(this.index - this.offset) === c) {
return true;
}
}
this.index = this.buffer.length + this.offset - 1;
return false;
}
/**
* Comments and CDATA end with `-->` and `]]>`.
*
* Their common qualities are:
* - Their end sequences have a distinct character they start with.
* - That character is then repeated, so we have to check multiple repeats.
* - All characters but the start character of the sequence can be skipped.
*/
stateInCommentLike(c) {
if (c === this.currentSequence[this.sequenceIndex]) {
if (++this.sequenceIndex === this.currentSequence.length) {
if (this.currentSequence === Sequences.CdataEnd) {
this.cbs.oncdata(this.sectionStart, this.index, 2);
} else {
this.cbs.oncomment(this.sectionStart, this.index, 2);
}
this.sequenceIndex = 0;
this.sectionStart = this.index + 1;
this.state = State2.Text;
}
} else if (this.sequenceIndex === 0) {
if (this.fastForwardTo(this.currentSequence[0])) {
this.sequenceIndex = 1;
}
} else if (c !== this.currentSequence[this.sequenceIndex - 1]) {
this.sequenceIndex = 0;
}
}
/**
* HTML only allows ASCII alpha characters (a-z and A-Z) at the beginning of a tag name.
*
* XML allows a lot more characters here (@see https://www.w3.org/TR/REC-xml/#NT-NameStartChar).
* We allow anything that wouldn't end the tag.
*/
isTagStartChar(c) {
return this.xmlMode ? !isEndOfTagSection(c) : isASCIIAlpha(c);
}
startSpecial(sequence, offset) {
this.isSpecial = true;
this.currentSequence = sequence;
this.sequenceIndex = offset;
this.state = State2.SpecialStartSequence;
}
stateBeforeTagName(c) {
if (c === CharCodes2.ExclamationMark) {
this.state = State2.BeforeDeclaration;
this.sectionStart = this.index + 1;
} else if (c === CharCodes2.Questionmark) {
this.state = State2.InProcessingInstruction;
this.sectionStart = this.index + 1;
} else if (this.isTagStartChar(c)) {
const lower = c | 32;
this.sectionStart = this.index;
if (this.xmlMode) {
this.state = State2.InTagName;
} else if (lower === Sequences.ScriptEnd[2]) {
this.state = State2.BeforeSpecialS;
} else if (lower === Sequences.TitleEnd[2]) {
this.state = State2.BeforeSpecialT;
} else {
this.state = State2.InTagName;
}
} else if (c === CharCodes2.Slash) {
this.state = State2.BeforeClosingTagName;
} else {
this.state = State2.Text;
this.stateText(c);
}
}
stateInTagName(c) {
if (isEndOfTagSection(c)) {
this.cbs.onopentagname(this.sectionStart, this.index);
this.sectionStart = -1;
this.state = State2.BeforeAttributeName;
this.stateBeforeAttributeName(c);
}
}
stateBeforeClosingTagName(c) {
if (isWhitespace2(c)) {
} else if (c === CharCodes2.Gt) {
this.state = State2.Text;
} else {
this.state = this.isTagStartChar(c) ? State2.InClosingTagName : State2.InSpecialComment;
this.sectionStart = this.index;
}
}
stateInClosingTagName(c) {
if (c === CharCodes2.Gt || isWhitespace2(c)) {
this.cbs.onclosetag(this.sectionStart, this.index);
this.sectionStart = -1;
this.state = State2.AfterClosingTagName;
this.stateAfterClosingTagName(c);
}
}
stateAfterClosingTagName(c) {
if (c === CharCodes2.Gt || this.fastForwardTo(CharCodes2.Gt)) {
this.state = State2.Text;
this.sectionStart = this.index + 1;
}
}
stateBeforeAttributeName(c) {
if (c === CharCodes2.Gt) {
this.cbs.onopentagend(this.index);
if (this.isSpecial) {
this.state = State2.InSpecialTag;
this.sequenceIndex = 0;
} else {
this.state = State2.Text;
}
this.sectionStart = this.index + 1;
} else if (c === CharCodes2.Slash) {
this.state = State2.InSelfClosingTag;
} else if (!isWhitespace2(c)) {
this.state = State2.InAttributeName;
this.sectionStart = this.index;
}
}
stateInSelfClosingTag(c) {
if (c === CharCodes2.Gt) {
this.cbs.onselfclosingtag(this.index);
this.state = State2.Text;
this.sectionStart = this.index + 1;
this.isSpecial = false;
} else if (!isWhitespace2(c)) {
this.state = State2.BeforeAttributeName;
this.stateBeforeAttributeName(c);
}
}
stateInAttributeName(c) {
if (c === CharCodes2.Eq || isEndOfTagSection(c)) {
this.cbs.onattribname(this.sectionStart, this.index);
this.sectionStart = this.index;
this.state = State2.AfterAttributeName;
this.stateAfterAttributeName(c);
}
}
stateAfterAttributeName(c) {
if (c === CharCodes2.Eq) {
this.state = State2.BeforeAttributeValue;
} else if (c === CharCodes2.Slash || c === CharCodes2.Gt) {
this.cbs.onattribend(QuoteType.NoValue, this.sectionStart);
this.sectionStart = -1;
this.state = State2.BeforeAttributeName;
this.stateBeforeAttributeName(c);
} else if (!isWhitespace2(c)) {
this.cbs.onattribend(QuoteType.NoValue, this.sectionStart);
this.state = State2.InAttributeName;
this.sectionStart = this.index;
}
}
stateBeforeAttributeValue(c) {
if (c === CharCodes2.DoubleQuote) {
this.state = State2.InAttributeValueDq;
this.sectionStart = this.index + 1;
} else if (c === CharCodes2.SingleQuote) {
this.state = State2.InAttributeValueSq;
this.sectionStart = this.index + 1;
} else if (!isWhitespace2(c)) {
this.sectionStart = this.index;
this.state = State2.InAttributeValueNq;
this.stateInAttributeValueNoQuotes(c);
}
}
handleInAttributeValue(c, quote) {
if (c === quote || !this.decodeEntities && this.fastForwardTo(quote)) {
this.cbs.onattribdata(this.sectionStart, this.index);
this.sectionStart = -1;
this.cbs.onattribend(quote === CharCodes2.DoubleQuote ? QuoteType.Double : QuoteType.Single, this.index + 1);
this.state = State2.BeforeAttributeName;
} else if (this.decodeEntities && c === CharCodes2.Amp) {
this.startEntity();
}
}
stateInAttributeValueDoubleQuotes(c) {
this.handleInAttributeValue(c, CharCodes2.DoubleQuote);
}
stateInAttributeValueSingleQuotes(c) {
this.handleInAttributeValue(c, CharCodes2.SingleQuote);
}
stateInAttributeValueNoQuotes(c) {
if (isWhitespace2(c) || c === CharCodes2.Gt) {
this.cbs.onattribdata(this.sectionStart, this.index);
this.sectionStart = -1;
this.cbs.onattribend(QuoteType.Unquoted, this.index);
this.state = State2.BeforeAttributeName;
this.stateBeforeAttributeName(c);
} else if (this.decodeEntities && c === CharCodes2.Amp) {
this.startEntity();
}
}
stateBeforeDeclaration(c) {
if (c === CharCodes2.OpeningSquareBracket) {
this.state = State2.CDATASequence;
this.sequenceIndex = 0;
} else {
this.state = c === CharCodes2.Dash ? State2.BeforeComment : State2.InDeclaration;
}
}
stateInDeclaration(c) {
if (c === CharCodes2.Gt || this.fastForwardTo(CharCodes2.Gt)) {
this.cbs.ondeclaration(this.sectionStart, this.index);
this.state = State2.Text;
this.sectionStart = this.index + 1;
}
}
stateInProcessingInstruction(c) {
if (c === CharCodes2.Gt || this.fastForwardTo(CharCodes2.Gt)) {
this.cbs.onprocessinginstruction(this.sectionStart, this.index);
this.state = State2.Text;
this.sectionStart = this.index + 1;
}
}
stateBeforeComment(c) {
if (c === CharCodes2.Dash) {
this.state = State2.InCommentLike;
this.currentSequence = Sequences.CommentEnd;
this.sequenceIndex = 2;
this.sectionStart = this.index + 1;
} else {
this.state = State2.InDeclaration;
}
}
stateInSpecialComment(c) {
if (c === CharCodes2.Gt || this.fastForwardTo(CharCodes2.Gt)) {
this.cbs.oncomment(this.sectionStart, this.index, 0);
this.state = State2.Text;
this.sectionStart = this.index + 1;
}
}
stateBeforeSpecialS(c) {
const lower = c | 32;
if (lower === Sequences.ScriptEnd[3]) {
this.startSpecial(Sequences.ScriptEnd, 4);
} else if (lower === Sequences.StyleEnd[3]) {
this.startSpecial(Sequences.StyleEnd, 4);
} else {
this.state = State2.InTagName;
this.stateInTagName(c);
}
}
stateBeforeSpecialT(c) {
const lower = c | 32;
if (lower === Sequences.TitleEnd[3]) {
this.startSpecial(Sequences.TitleEnd, 4);
} else if (lower === Sequences.TextareaEnd[3]) {
this.startSpecial(Sequences.TextareaEnd, 4);
} else {
this.state = State2.InTagName;
this.stateInTagName(c);
}
}
startEntity() {
this.baseState = this.state;
this.state = State2.InEntity;
this.entityStart = this.index;
this.entityDecoder.startEntity(this.xmlMode ? DecodingMode.Strict : this.baseState === State2.Text || this.baseState === State2.InSpecialTag ? DecodingMode.Legacy : DecodingMode.Attribute);
}
stateInEntity() {
const length = this.entityDecoder.write(this.buffer, this.index - this.offset);
if (length >= 0) {
this.state = this.baseState;
if (length === 0) {
this.index = this.entityStart;
}
} else {
this.index = this.offset + this.buffer.length - 1;
}
}
/**
* Remove data that has already been consumed from the buffer.
*/
cleanup() {
if (this.running && this.sectionStart !== this.index) {
if (this.state === State2.Text || this.state === State2.InSpecialTag && this.sequenceIndex === 0) {
this.cbs.ontext(this.sectionStart, this.index);
this.sectionStart = this.index;
} else if (this.state === State2.InAttributeValueDq || this.state === State2.InAttributeValueSq || this.state === State2.InAttributeValueNq) {
this.cbs.onattribdata(this.sectionStart, this.index);
this.sectionStart = this.index;
}
}
}
shouldContinue() {
return this.index < this.buffer.length + this.offset && this.running;
}
/**
* Iterates through the buffer, calling the function corresponding to the current state.
*
* States that are more likely to be hit are higher up, as a performance improvement.
*/
parse() {
while (this.shouldContinue()) {
const c = this.buffer.charCodeAt(this.index - this.offset);
switch (this.state) {
case State2.Text: {
this.stateText(c);
break;
}
case State2.SpecialStartSequence: {
this.stateSpecialStartSequence(c);
break;
}
case State2.InSpecialTag: {
this.stateInSpecialTag(c);
break;
}
case State2.CDATASequence: {
this.stateCDATASequence(c);
break;
}
case State2.InAttributeValueDq: {
this.stateInAttributeValueDoubleQuotes(c);
break;
}
case State2.InAttributeName: {
this.stateInAttributeName(c);
break;
}
case State2.InCommentLike: {
this.stateInCommentLike(c);
break;
}
case State2.InSpecialComment: {
this.stateInSpecialComment(c);
break;
}
case State2.BeforeAttributeName: {
this.stateBeforeAttributeName(c);
break;
}
case State2.InTagName: {
this.stateInTagName(c);
break;
}
case State2.InClosingTagName: {
this.stateInClosingTagName(c);
break;
}
case State2.BeforeTagName: {
this.stateBeforeTagName(c);
break;
}
case State2.AfterAttributeName: {
this.stateAfterAttributeName(c);
break;
}
case State2.InAttributeValueSq: {
this.stateInAttributeValueSingleQuotes(c);
break;
}
case State2.BeforeAttributeValue: {
this.stateBeforeAttributeValue(c);
break;
}
case State2.BeforeClosingTagName: {
this.stateBeforeClosingTagName(c);
break;
}
case State2.AfterClosingTagName: {
this.stateAfterClosingTagName(c);
break;
}
case State2.BeforeSpecialS: {
this.stateBeforeSpecialS(c);
break;
}
case State2.BeforeSpecialT: {
this.stateBeforeSpecialT(c);
break;
}
case State2.InAttributeValueNq: {
this.stateInAttributeValueNoQuotes(c);
break;
}
case State2.InSelfClosingTag: {
this.stateInSelfClosingTag(c);
break;
}
case State2.InDeclaration: {
this.stateInDeclaration(c);
break;
}
case State2.BeforeDeclaration: {
this.stateBeforeDeclaration(c);
break;
}
case State2.BeforeComment: {
this.stateBeforeComment(c);
break;
}
case State2.InProcessingInstruction: {
this.stateInProcessingInstruction(c);
break;
}
case State2.InEntity: {
this.stateInEntity();
break;
}
}
this.index++;
}
this.cleanup();
}
finish() {
if (this.state === State2.InEntity) {
this.entityDecoder.end();
this.state = this.baseState;
}
this.handleTrailingData();
this.cbs.onend();
}
/** Handle any trailing data. */
handleTrailingData() {
const endIndex = this.buffer.length + this.offset;
if (this.sectionStart >= endIndex) {
return;
}
if (this.state === State2.InCommentLike) {
if (this.currentSequence === Sequences.CdataEnd) {
this.cbs.oncdata(this.sectionStart, endIndex, 0);
} else {
this.cbs.oncomment(this.sectionStart, endIndex, 0);
}
} else if (this.state === State2.InTagName || this.state === State2.BeforeAttributeName || this.state === State2.BeforeAttributeValue || this.state === State2.AfterAttributeName || this.state === State2.InAttributeName || this.state === State2.InAttributeValueSq || this.state === State2.InAttributeValueDq || this.state === State2.InAttributeValueNq || this.state === State2.InClosingTagName) {
} else {
this.cbs.ontext(this.sectionStart, endIndex);
}
}
emitCodePoint(cp, consumed) {
if (this.baseState !== State2.Text && this.baseState !== State2.InSpecialTag) {
if (this.sectionStart < this.entityStart) {
this.cbs.onattribdata(this.sectionStart, this.entityStart);
}
this.sectionStart = this.entityStart + consumed;
this.index = this.sectionStart - 1;
this.cbs.onattribentity(cp);
} else {
if (this.sectionStart < this.entityStart) {
this.cbs.ontext(this.sectionStart, this.entityStart);
}
this.sectionStart = this.entityStart + consumed;
this.index = this.sectionStart - 1;
this.cbs.ontextentity(cp, this.sectionStart);
}
}
};
}
});
// node_modules/htmlparser2/lib/esm/Parser.js
var formTags, pTag, tableSectionTags, ddtTags, rtpTags, openImpliesClose, voidElements, foreignContextElements, htmlIntegrationElements, reNameEnd, Parser2;
var init_Parser = __esm({
"node_modules/htmlparser2/lib/esm/Parser.js"() {
init_Tokenizer();
init_decode();
formTags = /* @__PURE__ */ new Set([
"input",
"option",
"optgroup",
"select",
"button",
"datalist",
"textarea"
]);
pTag = /* @__PURE__ */ new Set(["p"]);
tableSectionTags = /* @__PURE__ */ new Set(["thead", "tbody"]);
ddtTags = /* @__PURE__ */ new Set(["dd", "dt"]);
rtpTags = /* @__PURE__ */ new Set(["rt", "rp"]);
openImpliesClose = /* @__PURE__ */ new Map([
["tr", /* @__PURE__ */ new Set(["tr", "th", "td"])],
["th", /* @__PURE__ */ new Set(["th"])],
["td", /* @__PURE__ */ new Set(["thead", "th", "td"])],
["body", /* @__PURE__ */ new Set(["head", "link", "script"])],
["li", /* @__PURE__ */ new Set(["li"])],
["p", pTag],
["h1", pTag],
["h2", pTag],
["h3", pTag],
["h4", pTag],
["h5", pTag],
["h6", pTag],
["select", formTags],
["input", formTags],
["output", formTags],
["button", formTags],
["datalist", formTags],
["textarea", formTags],
["option", /* @__PURE__ */ new Set(["option"])],
["optgroup", /* @__PURE__ */ new Set(["optgroup", "option"])],
["dd", ddtTags],
["dt", ddtTags],
["address", pTag],
["article", pTag],
["aside", pTag],
["blockquote", pTag],
["details", pTag],
["div", pTag],
["dl", pTag],
["fieldset", pTag],
["figcaption", pTag],
["figure", pTag],
["footer", pTag],
["form", pTag],
["header", pTag],
["hr", pTag],
["main", pTag],
["nav", pTag],
["ol", pTag],
["pre", pTag],
["section", pTag],
["table", pTag],
["ul", pTag],
["rt", rtpTags],
["rp", rtpTags],
["tbody", tableSectionTags],
["tfoot", tableSectionTags]
]);
voidElements = /* @__PURE__ */ new Set([
"area",
"base",
"basefont",
"br",
"col",
"command",
"embed",
"frame",
"hr",
"img",
"input",
"isindex",
"keygen",
"link",
"meta",
"param",
"source",
"track",
"wbr"
]);
foreignContextElements = /* @__PURE__ */ new Set(["math", "svg"]);
htmlIntegrationElements = /* @__PURE__ */ new Set([
"mi",
"mo",
"mn",
"ms",
"mtext",
"annotation-xml",
"foreignobject",
"desc",
"title"
]);
reNameEnd = /\s|\//;
Parser2 = class {
constructor(cbs, options = {}) {
var _a2, _b, _c, _d, _e, _f;
this.options = options;
this.startIndex = 0;
this.endIndex = 0;
this.openTagStart = 0;
this.tagname = "";
this.attribname = "";
this.attribvalue = "";
this.attribs = null;
this.stack = [];
this.buffers = [];
this.bufferOffset = 0;
this.writeIndex = 0;
this.ended = false;
this.cbs = cbs !== null && cbs !== void 0 ? cbs : {};
this.htmlMode = !this.options.xmlMode;
this.lowerCaseTagNames = (_a2 = options.lowerCaseTags) !== null && _a2 !== void 0 ? _a2 : this.htmlMode;
this.lowerCaseAttributeNames = (_b = options.lowerCaseAttributeNames) !== null && _b !== void 0 ? _b : this.htmlMode;
this.recognizeSelfClosing = (_c = options.recognizeSelfClosing) !== null && _c !== void 0 ? _c : !this.htmlMode;
this.tokenizer = new ((_d = options.Tokenizer) !== null && _d !== void 0 ? _d : Tokenizer2)(this.options, this);
this.foreignContext = [!this.htmlMode];
(_f = (_e = this.cbs).onparserinit) === null || _f === void 0 ? void 0 : _f.call(_e, this);
}
// Tokenizer event handlers
/** @internal */
ontext(start, endIndex) {
var _a2, _b;
const data2 = this.getSlice(start, endIndex);
this.endIndex = endIndex - 1;
(_b = (_a2 = this.cbs).ontext) === null || _b === void 0 ? void 0 : _b.call(_a2, data2);
this.startIndex = endIndex;
}
/** @internal */
ontextentity(cp, endIndex) {
var _a2, _b;
this.endIndex = endIndex - 1;
(_b = (_a2 = this.cbs).ontext) === null || _b === void 0 ? void 0 : _b.call(_a2, fromCodePoint(cp));
this.startIndex = endIndex;
}
/**
* Checks if the current tag is a void element. Override this if you want
* to specify your own additional void elements.
*/
isVoidElement(name) {
return this.htmlMode && voidElements.has(name);
}
/** @internal */
onopentagname(start, endIndex) {
this.endIndex = endIndex;
let name = this.getSlice(start, endIndex);
if (this.lowerCaseTagNames) {
name = name.toLowerCase();
}
this.emitOpenTag(name);
}
emitOpenTag(name) {
var _a2, _b, _c, _d;
this.openTagStart = this.startIndex;
this.tagname = name;
const impliesClose = this.htmlMode && openImpliesClose.get(name);
if (impliesClose) {
while (this.stack.length > 0 && impliesClose.has(this.stack[0])) {
const element = this.stack.shift();
(_b = (_a2 = this.cbs).onclosetag) === null || _b === void 0 ? void 0 : _b.call(_a2, element, true);
}
}
if (!this.isVoidElement(name)) {
this.stack.unshift(name);
if (this.htmlMode) {
if (foreignContextElements.has(name)) {
this.foreignContext.unshift(true);
} else if (htmlIntegrationElements.has(name)) {
this.foreignContext.unshift(false);
}
}
}
(_d = (_c = this.cbs).onopentagname) === null || _d === void 0 ? void 0 : _d.call(_c, name);
if (this.cbs.onopentag)
this.attribs = {};
}
endOpenTag(isImplied) {
var _a2, _b;
this.startIndex = this.openTagStart;
if (this.attribs) {
(_b = (_a2 = this.cbs).onopentag) === null || _b === void 0 ? void 0 : _b.call(_a2, this.tagname, this.attribs, isImplied);
this.attribs = null;
}
if (this.cbs.onclosetag && this.isVoidElement(this.tagname)) {
this.cbs.onclosetag(this.tagname, true);
}
this.tagname = "";
}
/** @internal */
onopentagend(endIndex) {
this.endIndex = endIndex;
this.endOpenTag(false);
this.startIndex = endIndex + 1;
}
/** @internal */
onclosetag(start, endIndex) {
var _a2, _b, _c, _d, _e, _f, _g, _h;
this.endIndex = endIndex;
let name = this.getSlice(start, endIndex);
if (this.lowerCaseTagNames) {
name = name.toLowerCase();
}
if (this.htmlMode && (foreignContextElements.has(name) || htmlIntegrationElements.has(name))) {
this.foreignContext.shift();
}
if (!this.isVoidElement(name)) {
const pos = this.stack.indexOf(name);
if (pos !== -1) {
for (let index2 = 0; index2 <= pos; index2++) {
const element = this.stack.shift();
(_b = (_a2 = this.cbs).onclosetag) === null || _b === void 0 ? void 0 : _b.call(_a2, element, index2 !== pos);
}
} else if (this.htmlMode && name === "p") {
this.emitOpenTag("p");
this.closeCurrentTag(true);
}
} else if (this.htmlMode && name === "br") {
(_d = (_c = this.cbs).onopentagname) === null || _d === void 0 ? void 0 : _d.call(_c, "br");
(_f = (_e = this.cbs).onopentag) === null || _f === void 0 ? void 0 : _f.call(_e, "br", {}, true);
(_h = (_g = this.cbs).onclosetag) === null || _h === void 0 ? void 0 : _h.call(_g, "br", false);
}
this.startIndex = endIndex + 1;
}
/** @internal */
onselfclosingtag(endIndex) {
this.endIndex = endIndex;
if (this.recognizeSelfClosing || this.foreignContext[0]) {
this.closeCurrentTag(false);
this.startIndex = endIndex + 1;
} else {
this.onopentagend(endIndex);
}
}
closeCurrentTag(isOpenImplied) {
var _a2, _b;
const name = this.tagname;
this.endOpenTag(isOpenImplied);
if (this.stack[0] === name) {
(_b = (_a2 = this.cbs).onclosetag) === null || _b === void 0 ? void 0 : _b.call(_a2, name, !isOpenImplied);
this.stack.shift();
}
}
/** @internal */
onattribname(start, endIndex) {
this.startIndex = start;
const name = this.getSlice(start, endIndex);
this.attribname = this.lowerCaseAttributeNames ? name.toLowerCase() : name;
}
/** @internal */
onattribdata(start, endIndex) {
this.attribvalue += this.getSlice(start, endIndex);
}
/** @internal */
onattribentity(cp) {
this.attribvalue += fromCodePoint(cp);
}
/** @internal */
onattribend(quote, endIndex) {
var _a2, _b;
this.endIndex = endIndex;
(_b = (_a2 = this.cbs).onattribute) === null || _b === void 0 ? void 0 : _b.call(_a2, this.attribname, this.attribvalue, quote === QuoteType.Double ? '"' : quote === QuoteType.Single ? "'" : quote === QuoteType.NoValue ? void 0 : null);
if (this.attribs && !Object.prototype.hasOwnProperty.call(this.attribs, this.attribname)) {
this.attribs[this.attribname] = this.attribvalue;
}
this.attribvalue = "";
}
getInstructionName(value) {
const index2 = value.search(reNameEnd);
let name = index2 < 0 ? value : value.substr(0, index2);
if (this.lowerCaseTagNames) {
name = name.toLowerCase();
}
return name;
}
/** @internal */
ondeclaration(start, endIndex) {
this.endIndex = endIndex;
const value = this.getSlice(start, endIndex);
if (this.cbs.onprocessinginstruction) {
const name = this.getInstructionName(value);
this.cbs.onprocessinginstruction(`!${name}`, `!${value}`);
}
this.startIndex = endIndex + 1;
}
/** @internal */
onprocessinginstruction(start, endIndex) {
this.endIndex = endIndex;
const value = this.getSlice(start, endIndex);
if (this.cbs.onprocessinginstruction) {
const name = this.getInstructionName(value);
this.cbs.onprocessinginstruction(`?${name}`, `?${value}`);
}
this.startIndex = endIndex + 1;
}
/** @internal */
oncomment(start, endIndex, offset) {
var _a2, _b, _c, _d;
this.endIndex = endIndex;
(_b = (_a2 = this.cbs).oncomment) === null || _b === void 0 ? void 0 : _b.call(_a2, this.getSlice(start, endIndex - offset));
(_d = (_c = this.cbs).oncommentend) === null || _d === void 0 ? void 0 : _d.call(_c);
this.startIndex = endIndex + 1;
}
/** @internal */
oncdata(start, endIndex, offset) {
var _a2, _b, _c, _d, _e, _f, _g, _h, _j, _k;
this.endIndex = endIndex;
const value = this.getSlice(start, endIndex - offset);
if (!this.htmlMode || this.options.recognizeCDATA) {
(_b = (_a2 = this.cbs).oncdatastart) === null || _b === void 0 ? void 0 : _b.call(_a2);
(_d = (_c = this.cbs).ontext) === null || _d === void 0 ? void 0 : _d.call(_c, value);
(_f = (_e = this.cbs).oncdataend) === null || _f === void 0 ? void 0 : _f.call(_e);
} else {
(_h = (_g = this.cbs).oncomment) === null || _h === void 0 ? void 0 : _h.call(_g, `[CDATA[${value}]]`);
(_k = (_j = this.cbs).oncommentend) === null || _k === void 0 ? void 0 : _k.call(_j);
}
this.startIndex = endIndex + 1;
}
/** @internal */
onend() {
var _a2, _b;
if (this.cbs.onclosetag) {
this.endIndex = this.startIndex;
for (let index2 = 0; index2 < this.stack.length; index2++) {
this.cbs.onclosetag(this.stack[index2], true);
}
}
(_b = (_a2 = this.cbs).onend) === null || _b === void 0 ? void 0 : _b.call(_a2);
}
/**
* Resets the parser to a blank state, ready to parse a new HTML document
*/
reset() {
var _a2, _b, _c, _d;
(_b = (_a2 = this.cbs).onreset) === null || _b === void 0 ? void 0 : _b.call(_a2);
this.tokenizer.reset();
this.tagname = "";
this.attribname = "";
this.attribs = null;
this.stack.length = 0;
this.startIndex = 0;
this.endIndex = 0;
(_d = (_c = this.cbs).onparserinit) === null || _d === void 0 ? void 0 : _d.call(_c, this);
this.buffers.length = 0;
this.foreignContext.length = 0;
this.foreignContext.unshift(!this.htmlMode);
this.bufferOffset = 0;
this.writeIndex = 0;
this.ended = false;
}
/**
* Resets the parser, then parses a complete document and
* pushes it to the handler.
*
* @param data Document to parse.
*/
parseComplete(data2) {
this.reset();
this.end(data2);
}
getSlice(start, end2) {
while (start - this.bufferOffset >= this.buffers[0].length) {
this.shiftBuffer();
}
let slice2 = this.buffers[0].slice(start - this.bufferOffset, end2 - this.bufferOffset);
while (end2 - this.bufferOffset > this.buffers[0].length) {
this.shiftBuffer();
slice2 += this.buffers[0].slice(0, end2 - this.bufferOffset);
}
return slice2;
}
shiftBuffer() {
this.bufferOffset += this.buffers[0].length;
this.writeIndex--;
this.buffers.shift();
}
/**
* Parses a chunk of data and calls the corresponding callbacks.
*
* @param chunk Chunk to parse.
*/
write(chunk) {
var _a2, _b;
if (this.ended) {
(_b = (_a2 = this.cbs).onerror) === null || _b === void 0 ? void 0 : _b.call(_a2, new Error(".write() after done!"));
return;
}
this.buffers.push(chunk);
if (this.tokenizer.running) {
this.tokenizer.write(chunk);
this.writeIndex++;
}
}
/**
* Parses the end of the buffer and clears the stack, calls onend.
*
* @param chunk Optional final chunk to parse.
*/
end(chunk) {
var _a2, _b;
if (this.ended) {
(_b = (_a2 = this.cbs).onerror) === null || _b === void 0 ? void 0 : _b.call(_a2, new Error(".end() after done!"));
return;
}
if (chunk)
this.write(chunk);
this.ended = true;
this.tokenizer.end();
}
/**
* Pauses parsing. The parser won't emit events until `resume` is called.
*/
pause() {
this.tokenizer.pause();
}
/**
* Resumes parsing after `pause` was called.
*/
resume() {
this.tokenizer.resume();
while (this.tokenizer.running && this.writeIndex < this.buffers.length) {
this.tokenizer.write(this.buffers[this.writeIndex++]);
}
if (this.ended)
this.tokenizer.end();
}
/**
* Alias of `write`, for backwards compatibility.
*
* @param chunk Chunk to parse.
* @deprecated
*/
parseChunk(chunk) {
this.write(chunk);
}
/**
* Alias of `end`, for backwards compatibility.
*
* @param chunk Optional final chunk to parse.
* @deprecated
*/
done(chunk) {
this.end(chunk);
}
};
}
});
// node_modules/htmlparser2/lib/esm/index.js
function parseDocument(data2, options) {
const handler = new DomHandler(void 0, options);
new Parser2(handler, options).end(data2);
return handler.root;
}
var init_esm9 = __esm({
"node_modules/htmlparser2/lib/esm/index.js"() {
init_Parser();
init_Parser();
init_esm2();
init_esm2();
init_Tokenizer();
init_esm();
init_esm5();
init_esm5();
init_esm5();
}
});
// node_modules/cheerio/dist/esm/load-parse.js
var parse7, load;
var init_load_parse = __esm({
"node_modules/cheerio/dist/esm/load-parse.js"() {
init_load();
init_parse2();
init_parse5_adapter();
init_esm4();
init_esm9();
parse7 = getParse((content, options, isDocument2, context) => options._useHtmlParser2 ? parseDocument(content, options) : parseWithParse5(content, options, isDocument2, context));
load = getLoad(parse7, (dom, options) => options._useHtmlParser2 ? esm_default(dom, options) : renderWithParse5(dom));
}
});
// node_modules/parse5-parser-stream/dist/index.js
var init_dist3 = __esm({
"node_modules/parse5-parser-stream/dist/index.js"() {
init_dist();
}
});
// node_modules/safer-buffer/safer.js
var require_safer = __commonJS({
"node_modules/safer-buffer/safer.js"(exports2, module2) {
"use strict";
var buffer = require("buffer");
var Buffer2 = buffer.Buffer;
var safer = {};
var key;
for (key in buffer) {
if (!buffer.hasOwnProperty(key)) continue;
if (key === "SlowBuffer" || key === "Buffer") continue;
safer[key] = buffer[key];
}
var Safer = safer.Buffer = {};
for (key in Buffer2) {
if (!Buffer2.hasOwnProperty(key)) continue;
if (key === "allocUnsafe" || key === "allocUnsafeSlow") continue;
Safer[key] = Buffer2[key];
}
safer.Buffer.prototype = Buffer2.prototype;
if (!Safer.from || Safer.from === Uint8Array.from) {
Safer.from = function(value, encodingOrOffset, length) {
if (typeof value === "number") {
throw new TypeError('The "value" argument must not be of type number. Received type ' + typeof value);
}
if (value && typeof value.length === "undefined") {
throw new TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type " + typeof value);
}
return Buffer2(value, encodingOrOffset, length);
};
}
if (!Safer.alloc) {
Safer.alloc = function(size, fill, encoding) {
if (typeof size !== "number") {
throw new TypeError('The "size" argument must be of type number. Received type ' + typeof size);
}
if (size < 0 || size >= 2 * (1 << 30)) {
throw new RangeError('The value "' + size + '" is invalid for option "size"');
}
var buf = Buffer2(size);
if (!fill || fill.length === 0) {
buf.fill(0);
} else if (typeof encoding === "string") {
buf.fill(fill, encoding);
} else {
buf.fill(fill);
}
return buf;
};
}
if (!safer.kStringMaxLength) {
try {
safer.kStringMaxLength = process.binding("buffer").kStringMaxLength;
} catch (e) {
}
}
if (!safer.constants) {
safer.constants = {
MAX_LENGTH: safer.kMaxLength
};
if (safer.kStringMaxLength) {
safer.constants.MAX_STRING_LENGTH = safer.kStringMaxLength;
}
}
module2.exports = safer;
}
});
// node_modules/iconv-lite/lib/bom-handling.js
var require_bom_handling = __commonJS({
"node_modules/iconv-lite/lib/bom-handling.js"(exports2) {
"use strict";
var BOMChar = "\uFEFF";
exports2.PrependBOM = PrependBOMWrapper;
function PrependBOMWrapper(encoder, options) {
this.encoder = encoder;
this.addBOM = true;
}
PrependBOMWrapper.prototype.write = function(str) {
if (this.addBOM) {
str = BOMChar + str;
this.addBOM = false;
}
return this.encoder.write(str);
};
PrependBOMWrapper.prototype.end = function() {
return this.encoder.end();
};
exports2.StripBOM = StripBOMWrapper;
function StripBOMWrapper(decoder, options) {
this.decoder = decoder;
this.pass = false;
this.options = options || {};
}
StripBOMWrapper.prototype.write = function(buf) {
var res = this.decoder.write(buf);
if (this.pass || !res)
return res;
if (res[0] === BOMChar) {
res = res.slice(1);
if (typeof this.options.stripBOM === "function")
this.options.stripBOM();
}
this.pass = true;
return res;
};
StripBOMWrapper.prototype.end = function() {
return this.decoder.end();
};
}
});
// node_modules/iconv-lite/encodings/internal.js
var require_internal = __commonJS({
"node_modules/iconv-lite/encodings/internal.js"(exports2, module2) {
"use strict";
var Buffer2 = require_safer().Buffer;
module2.exports = {
// Encodings
utf8: { type: "_internal", bomAware: true },
cesu8: { type: "_internal", bomAware: true },
unicode11utf8: "utf8",
ucs2: { type: "_internal", bomAware: true },
utf16le: "ucs2",
binary: { type: "_internal" },
base64: { type: "_internal" },
hex: { type: "_internal" },
// Codec.
_internal: InternalCodec
};
function InternalCodec(codecOptions, iconv2) {
this.enc = codecOptions.encodingName;
this.bomAware = codecOptions.bomAware;
if (this.enc === "base64")
this.encoder = InternalEncoderBase64;
else if (this.enc === "cesu8") {
this.enc = "utf8";
this.encoder = InternalEncoderCesu8;
if (Buffer2.from("eda0bdedb2a9", "hex").toString() !== "\u{1F4A9}") {
this.decoder = InternalDecoderCesu8;
this.defaultCharUnicode = iconv2.defaultCharUnicode;
}
}
}
InternalCodec.prototype.encoder = InternalEncoder;
InternalCodec.prototype.decoder = InternalDecoder;
var StringDecoder = require("string_decoder").StringDecoder;
if (!StringDecoder.prototype.end)
StringDecoder.prototype.end = function() {
};
function InternalDecoder(options, codec) {
this.decoder = new StringDecoder(codec.enc);
}
InternalDecoder.prototype.write = function(buf) {
if (!Buffer2.isBuffer(buf)) {
buf = Buffer2.from(buf);
}
return this.decoder.write(buf);
};
InternalDecoder.prototype.end = function() {
return this.decoder.end();
};
function InternalEncoder(options, codec) {
this.enc = codec.enc;
}
InternalEncoder.prototype.write = function(str) {
return Buffer2.from(str, this.enc);
};
InternalEncoder.prototype.end = function() {
};
function InternalEncoderBase64(options, codec) {
this.prevStr = "";
}
InternalEncoderBase64.prototype.write = function(str) {
str = this.prevStr + str;
var completeQuads = str.length - str.length % 4;
this.prevStr = str.slice(completeQuads);
str = str.slice(0, completeQuads);
return Buffer2.from(str, "base64");
};
InternalEncoderBase64.prototype.end = function() {
return Buffer2.from(this.prevStr, "base64");
};
function InternalEncoderCesu8(options, codec) {
}
InternalEncoderCesu8.prototype.write = function(str) {
var buf = Buffer2.alloc(str.length * 3), bufIdx = 0;
for (var i = 0; i < str.length; i++) {
var charCode = str.charCodeAt(i);
if (charCode < 128)
buf[bufIdx++] = charCode;
else if (charCode < 2048) {
buf[bufIdx++] = 192 + (charCode >>> 6);
buf[bufIdx++] = 128 + (charCode & 63);
} else {
buf[bufIdx++] = 224 + (charCode >>> 12);
buf[bufIdx++] = 128 + (charCode >>> 6 & 63);
buf[bufIdx++] = 128 + (charCode & 63);
}
}
return buf.slice(0, bufIdx);
};
InternalEncoderCesu8.prototype.end = function() {
};
function InternalDecoderCesu8(options, codec) {
this.acc = 0;
this.contBytes = 0;
this.accBytes = 0;
this.defaultCharUnicode = codec.defaultCharUnicode;
}
InternalDecoderCesu8.prototype.write = function(buf) {
var acc = this.acc, contBytes = this.contBytes, accBytes = this.accBytes, res = "";
for (var i = 0; i < buf.length; i++) {
var curByte = buf[i];
if ((curByte & 192) !== 128) {
if (contBytes > 0) {
res += this.defaultCharUnicode;
contBytes = 0;
}
if (curByte < 128) {
res += String.fromCharCode(curByte);
} else if (curByte < 224) {
acc = curByte & 31;
contBytes = 1;
accBytes = 1;
} else if (curByte < 240) {
acc = curByte & 15;
contBytes = 2;
accBytes = 1;
} else {
res += this.defaultCharUnicode;
}
} else {
if (contBytes > 0) {
acc = acc << 6 | curByte & 63;
contBytes--;
accBytes++;
if (contBytes === 0) {
if (accBytes === 2 && acc < 128 && acc > 0)
res += this.defaultCharUnicode;
else if (accBytes === 3 && acc < 2048)
res += this.defaultCharUnicode;
else
res += String.fromCharCode(acc);
}
} else {
res += this.defaultCharUnicode;
}
}
}
this.acc = acc;
this.contBytes = contBytes;
this.accBytes = accBytes;
return res;
};
InternalDecoderCesu8.prototype.end = function() {
var res = 0;
if (this.contBytes > 0)
res += this.defaultCharUnicode;
return res;
};
}
});
// node_modules/iconv-lite/encodings/utf32.js
var require_utf32 = __commonJS({
"node_modules/iconv-lite/encodings/utf32.js"(exports2) {
"use strict";
var Buffer2 = require_safer().Buffer;
exports2._utf32 = Utf32Codec;
function Utf32Codec(codecOptions, iconv2) {
this.iconv = iconv2;
this.bomAware = true;
this.isLE = codecOptions.isLE;
}
exports2.utf32le = { type: "_utf32", isLE: true };
exports2.utf32be = { type: "_utf32", isLE: false };
exports2.ucs4le = "utf32le";
exports2.ucs4be = "utf32be";
Utf32Codec.prototype.encoder = Utf32Encoder;
Utf32Codec.prototype.decoder = Utf32Decoder;
function Utf32Encoder(options, codec) {
this.isLE = codec.isLE;
this.highSurrogate = 0;
}
Utf32Encoder.prototype.write = function(str) {
var src = Buffer2.from(str, "ucs2");
var dst = Buffer2.alloc(src.length * 2);
var write32 = this.isLE ? dst.writeUInt32LE : dst.writeUInt32BE;
var offset = 0;
for (var i = 0; i < src.length; i += 2) {
var code = src.readUInt16LE(i);
var isHighSurrogate = 55296 <= code && code < 56320;
var isLowSurrogate = 56320 <= code && code < 57344;
if (this.highSurrogate) {
if (isHighSurrogate || !isLowSurrogate) {
write32.call(dst, this.highSurrogate, offset);
offset += 4;
} else {
var codepoint = (this.highSurrogate - 55296 << 10 | code - 56320) + 65536;
write32.call(dst, codepoint, offset);
offset += 4;
this.highSurrogate = 0;
continue;
}
}
if (isHighSurrogate)
this.highSurrogate = code;
else {
write32.call(dst, code, offset);
offset += 4;
this.highSurrogate = 0;
}
}
if (offset < dst.length)
dst = dst.slice(0, offset);
return dst;
};
Utf32Encoder.prototype.end = function() {
if (!this.highSurrogate)
return;
var buf = Buffer2.alloc(4);
if (this.isLE)
buf.writeUInt32LE(this.highSurrogate, 0);
else
buf.writeUInt32BE(this.highSurrogate, 0);
this.highSurrogate = 0;
return buf;
};
function Utf32Decoder(options, codec) {
this.isLE = codec.isLE;
this.badChar = codec.iconv.defaultCharUnicode.charCodeAt(0);
this.overflow = [];
}
Utf32Decoder.prototype.write = function(src) {
if (src.length === 0)
return "";
var i = 0;
var codepoint = 0;
var dst = Buffer2.alloc(src.length + 4);
var offset = 0;
var isLE = this.isLE;
var overflow = this.overflow;
var badChar = this.badChar;
if (overflow.length > 0) {
for (; i < src.length && overflow.length < 4; i++)
overflow.push(src[i]);
if (overflow.length === 4) {
if (isLE) {
codepoint = overflow[i] | overflow[i + 1] << 8 | overflow[i + 2] << 16 | overflow[i + 3] << 24;
} else {
codepoint = overflow[i + 3] | overflow[i + 2] << 8 | overflow[i + 1] << 16 | overflow[i] << 24;
}
overflow.length = 0;
offset = _writeCodepoint(dst, offset, codepoint, badChar);
}
}
for (; i < src.length - 3; i += 4) {
if (isLE) {
codepoint = src[i] | src[i + 1] << 8 | src[i + 2] << 16 | src[i + 3] << 24;
} else {
codepoint = src[i + 3] | src[i + 2] << 8 | src[i + 1] << 16 | src[i] << 24;
}
offset = _writeCodepoint(dst, offset, codepoint, badChar);
}
for (; i < src.length; i++) {
overflow.push(src[i]);
}
return dst.slice(0, offset).toString("ucs2");
};
function _writeCodepoint(dst, offset, codepoint, badChar) {
if (codepoint < 0 || codepoint > 1114111) {
codepoint = badChar;
}
if (codepoint >= 65536) {
codepoint -= 65536;
var high = 55296 | codepoint >> 10;
dst[offset++] = high & 255;
dst[offset++] = high >> 8;
var codepoint = 56320 | codepoint & 1023;
}
dst[offset++] = codepoint & 255;
dst[offset++] = codepoint >> 8;
return offset;
}
Utf32Decoder.prototype.end = function() {
this.overflow.length = 0;
};
exports2.utf32 = Utf32AutoCodec;
exports2.ucs4 = "utf32";
function Utf32AutoCodec(options, iconv2) {
this.iconv = iconv2;
}
Utf32AutoCodec.prototype.encoder = Utf32AutoEncoder;
Utf32AutoCodec.prototype.decoder = Utf32AutoDecoder;
function Utf32AutoEncoder(options, codec) {
options = options || {};
if (options.addBOM === void 0)
options.addBOM = true;
this.encoder = codec.iconv.getEncoder(options.defaultEncoding || "utf-32le", options);
}
Utf32AutoEncoder.prototype.write = function(str) {
return this.encoder.write(str);
};
Utf32AutoEncoder.prototype.end = function() {
return this.encoder.end();
};
function Utf32AutoDecoder(options, codec) {
this.decoder = null;
this.initialBufs = [];
this.initialBufsLen = 0;
this.options = options || {};
this.iconv = codec.iconv;
}
Utf32AutoDecoder.prototype.write = function(buf) {
if (!this.decoder) {
this.initialBufs.push(buf);
this.initialBufsLen += buf.length;
if (this.initialBufsLen < 32)
return "";
var encoding = detectEncoding(this.initialBufs, this.options.defaultEncoding);
this.decoder = this.iconv.getDecoder(encoding, this.options);
var resStr = "";
for (var i = 0; i < this.initialBufs.length; i++)
resStr += this.decoder.write(this.initialBufs[i]);
this.initialBufs.length = this.initialBufsLen = 0;
return resStr;
}
return this.decoder.write(buf);
};
Utf32AutoDecoder.prototype.end = function() {
if (!this.decoder) {
var encoding = detectEncoding(this.initialBufs, this.options.defaultEncoding);
this.decoder = this.iconv.getDecoder(encoding, this.options);
var resStr = "";
for (var i = 0; i < this.initialBufs.length; i++)
resStr += this.decoder.write(this.initialBufs[i]);
var trail = this.decoder.end();
if (trail)
resStr += trail;
this.initialBufs.length = this.initialBufsLen = 0;
return resStr;
}
return this.decoder.end();
};
function detectEncoding(bufs, defaultEncoding) {
var b = [];
var charsProcessed = 0;
var invalidLE = 0, invalidBE = 0;
var bmpCharsLE = 0, bmpCharsBE = 0;
outer_loop:
for (var i = 0; i < bufs.length; i++) {
var buf = bufs[i];
for (var j = 0; j < buf.length; j++) {
b.push(buf[j]);
if (b.length === 4) {
if (charsProcessed === 0) {
if (b[0] === 255 && b[1] === 254 && b[2] === 0 && b[3] === 0) {
return "utf-32le";
}
if (b[0] === 0 && b[1] === 0 && b[2] === 254 && b[3] === 255) {
return "utf-32be";
}
}
if (b[0] !== 0 || b[1] > 16) invalidBE++;
if (b[3] !== 0 || b[2] > 16) invalidLE++;
if (b[0] === 0 && b[1] === 0 && (b[2] !== 0 || b[3] !== 0)) bmpCharsBE++;
if ((b[0] !== 0 || b[1] !== 0) && b[2] === 0 && b[3] === 0) bmpCharsLE++;
b.length = 0;
charsProcessed++;
if (charsProcessed >= 100) {
break outer_loop;
}
}
}
}
if (bmpCharsBE - invalidBE > bmpCharsLE - invalidLE) return "utf-32be";
if (bmpCharsBE - invalidBE < bmpCharsLE - invalidLE) return "utf-32le";
return defaultEncoding || "utf-32le";
}
}
});
// node_modules/iconv-lite/encodings/utf16.js
var require_utf16 = __commonJS({
"node_modules/iconv-lite/encodings/utf16.js"(exports2) {
"use strict";
var Buffer2 = require_safer().Buffer;
exports2.utf16be = Utf16BECodec;
function Utf16BECodec() {
}
Utf16BECodec.prototype.encoder = Utf16BEEncoder;
Utf16BECodec.prototype.decoder = Utf16BEDecoder;
Utf16BECodec.prototype.bomAware = true;
function Utf16BEEncoder() {
}
Utf16BEEncoder.prototype.write = function(str) {
var buf = Buffer2.from(str, "ucs2");
for (var i = 0; i < buf.length; i += 2) {
var tmp = buf[i];
buf[i] = buf[i + 1];
buf[i + 1] = tmp;
}
return buf;
};
Utf16BEEncoder.prototype.end = function() {
};
function Utf16BEDecoder() {
this.overflowByte = -1;
}
Utf16BEDecoder.prototype.write = function(buf) {
if (buf.length == 0)
return "";
var buf2 = Buffer2.alloc(buf.length + 1), i = 0, j = 0;
if (this.overflowByte !== -1) {
buf2[0] = buf[0];
buf2[1] = this.overflowByte;
i = 1;
j = 2;
}
for (; i < buf.length - 1; i += 2, j += 2) {
buf2[j] = buf[i + 1];
buf2[j + 1] = buf[i];
}
this.overflowByte = i == buf.length - 1 ? buf[buf.length - 1] : -1;
return buf2.slice(0, j).toString("ucs2");
};
Utf16BEDecoder.prototype.end = function() {
this.overflowByte = -1;
};
exports2.utf16 = Utf16Codec;
function Utf16Codec(codecOptions, iconv2) {
this.iconv = iconv2;
}
Utf16Codec.prototype.encoder = Utf16Encoder;
Utf16Codec.prototype.decoder = Utf16Decoder;
function Utf16Encoder(options, codec) {
options = options || {};
if (options.addBOM === void 0)
options.addBOM = true;
this.encoder = codec.iconv.getEncoder("utf-16le", options);
}
Utf16Encoder.prototype.write = function(str) {
return this.encoder.write(str);
};
Utf16Encoder.prototype.end = function() {
return this.encoder.end();
};
function Utf16Decoder(options, codec) {
this.decoder = null;
this.initialBufs = [];
this.initialBufsLen = 0;
this.options = options || {};
this.iconv = codec.iconv;
}
Utf16Decoder.prototype.write = function(buf) {
if (!this.decoder) {
this.initialBufs.push(buf);
this.initialBufsLen += buf.length;
if (this.initialBufsLen < 16)
return "";
var encoding = detectEncoding(this.initialBufs, this.options.defaultEncoding);
this.decoder = this.iconv.getDecoder(encoding, this.options);
var resStr = "";
for (var i = 0; i < this.initialBufs.length; i++)
resStr += this.decoder.write(this.initialBufs[i]);
this.initialBufs.length = this.initialBufsLen = 0;
return resStr;
}
return this.decoder.write(buf);
};
Utf16Decoder.prototype.end = function() {
if (!this.decoder) {
var encoding = detectEncoding(this.initialBufs, this.options.defaultEncoding);
this.decoder = this.iconv.getDecoder(encoding, this.options);
var resStr = "";
for (var i = 0; i < this.initialBufs.length; i++)
resStr += this.decoder.write(this.initialBufs[i]);
var trail = this.decoder.end();
if (trail)
resStr += trail;
this.initialBufs.length = this.initialBufsLen = 0;
return resStr;
}
return this.decoder.end();
};
function detectEncoding(bufs, defaultEncoding) {
var b = [];
var charsProcessed = 0;
var asciiCharsLE = 0, asciiCharsBE = 0;
outer_loop:
for (var i = 0; i < bufs.length; i++) {
var buf = bufs[i];
for (var j = 0; j < buf.length; j++) {
b.push(buf[j]);
if (b.length === 2) {
if (charsProcessed === 0) {
if (b[0] === 255 && b[1] === 254) return "utf-16le";
if (b[0] === 254 && b[1] === 255) return "utf-16be";
}
if (b[0] === 0 && b[1] !== 0) asciiCharsBE++;
if (b[0] !== 0 && b[1] === 0) asciiCharsLE++;
b.length = 0;
charsProcessed++;
if (charsProcessed >= 100) {
break outer_loop;
}
}
}
}
if (asciiCharsBE > asciiCharsLE) return "utf-16be";
if (asciiCharsBE < asciiCharsLE) return "utf-16le";
return defaultEncoding || "utf-16le";
}
}
});
// node_modules/iconv-lite/encodings/utf7.js
var require_utf7 = __commonJS({
"node_modules/iconv-lite/encodings/utf7.js"(exports2) {
"use strict";
var Buffer2 = require_safer().Buffer;
exports2.utf7 = Utf7Codec;
exports2.unicode11utf7 = "utf7";
function Utf7Codec(codecOptions, iconv2) {
this.iconv = iconv2;
}
Utf7Codec.prototype.encoder = Utf7Encoder;
Utf7Codec.prototype.decoder = Utf7Decoder;
Utf7Codec.prototype.bomAware = true;
var nonDirectChars = /[^A-Za-z0-9'\(\),-\.\/:\? \n\r\t]+/g;
function Utf7Encoder(options, codec) {
this.iconv = codec.iconv;
}
Utf7Encoder.prototype.write = function(str) {
return Buffer2.from(str.replace(nonDirectChars, function(chunk) {
return "+" + (chunk === "+" ? "" : this.iconv.encode(chunk, "utf16-be").toString("base64").replace(/=+$/, "")) + "-";
}.bind(this)));
};
Utf7Encoder.prototype.end = function() {
};
function Utf7Decoder(options, codec) {
this.iconv = codec.iconv;
this.inBase64 = false;
this.base64Accum = "";
}
var base64Regex3 = /[A-Za-z0-9\/+]/;
var base64Chars = [];
for (i = 0; i < 256; i++)
base64Chars[i] = base64Regex3.test(String.fromCharCode(i));
var i;
var plusChar = "+".charCodeAt(0);
var minusChar = "-".charCodeAt(0);
var andChar = "&".charCodeAt(0);
Utf7Decoder.prototype.write = function(buf) {
var res = "", lastI = 0, inBase64 = this.inBase64, base64Accum = this.base64Accum;
for (var i2 = 0; i2 < buf.length; i2++) {
if (!inBase64) {
if (buf[i2] == plusChar) {
res += this.iconv.decode(buf.slice(lastI, i2), "ascii");
lastI = i2 + 1;
inBase64 = true;
}
} else {
if (!base64Chars[buf[i2]]) {
if (i2 == lastI && buf[i2] == minusChar) {
res += "+";
} else {
var b64str = base64Accum + this.iconv.decode(buf.slice(lastI, i2), "ascii");
res += this.iconv.decode(Buffer2.from(b64str, "base64"), "utf16-be");
}
if (buf[i2] != minusChar)
i2--;
lastI = i2 + 1;
inBase64 = false;
base64Accum = "";
}
}
}
if (!inBase64) {
res += this.iconv.decode(buf.slice(lastI), "ascii");
} else {
var b64str = base64Accum + this.iconv.decode(buf.slice(lastI), "ascii");
var canBeDecoded = b64str.length - b64str.length % 8;
base64Accum = b64str.slice(canBeDecoded);
b64str = b64str.slice(0, canBeDecoded);
res += this.iconv.decode(Buffer2.from(b64str, "base64"), "utf16-be");
}
this.inBase64 = inBase64;
this.base64Accum = base64Accum;
return res;
};
Utf7Decoder.prototype.end = function() {
var res = "";
if (this.inBase64 && this.base64Accum.length > 0)
res = this.iconv.decode(Buffer2.from(this.base64Accum, "base64"), "utf16-be");
this.inBase64 = false;
this.base64Accum = "";
return res;
};
exports2.utf7imap = Utf7IMAPCodec;
function Utf7IMAPCodec(codecOptions, iconv2) {
this.iconv = iconv2;
}
Utf7IMAPCodec.prototype.encoder = Utf7IMAPEncoder;
Utf7IMAPCodec.prototype.decoder = Utf7IMAPDecoder;
Utf7IMAPCodec.prototype.bomAware = true;
function Utf7IMAPEncoder(options, codec) {
this.iconv = codec.iconv;
this.inBase64 = false;
this.base64Accum = Buffer2.alloc(6);
this.base64AccumIdx = 0;
}
Utf7IMAPEncoder.prototype.write = function(str) {
var inBase64 = this.inBase64, base64Accum = this.base64Accum, base64AccumIdx = this.base64AccumIdx, buf = Buffer2.alloc(str.length * 5 + 10), bufIdx = 0;
for (var i2 = 0; i2 < str.length; i2++) {
var uChar = str.charCodeAt(i2);
if (32 <= uChar && uChar <= 126) {
if (inBase64) {
if (base64AccumIdx > 0) {
bufIdx += buf.write(base64Accum.slice(0, base64AccumIdx).toString("base64").replace(/\//g, ",").replace(/=+$/, ""), bufIdx);
base64AccumIdx = 0;
}
buf[bufIdx++] = minusChar;
inBase64 = false;
}
if (!inBase64) {
buf[bufIdx++] = uChar;
if (uChar === andChar)
buf[bufIdx++] = minusChar;
}
} else {
if (!inBase64) {
buf[bufIdx++] = andChar;
inBase64 = true;
}
if (inBase64) {
base64Accum[base64AccumIdx++] = uChar >> 8;
base64Accum[base64AccumIdx++] = uChar & 255;
if (base64AccumIdx == base64Accum.length) {
bufIdx += buf.write(base64Accum.toString("base64").replace(/\//g, ","), bufIdx);
base64AccumIdx = 0;
}
}
}
}
this.inBase64 = inBase64;
this.base64AccumIdx = base64AccumIdx;
return buf.slice(0, bufIdx);
};
Utf7IMAPEncoder.prototype.end = function() {
var buf = Buffer2.alloc(10), bufIdx = 0;
if (this.inBase64) {
if (this.base64AccumIdx > 0) {
bufIdx += buf.write(this.base64Accum.slice(0, this.base64AccumIdx).toString("base64").replace(/\//g, ",").replace(/=+$/, ""), bufIdx);
this.base64AccumIdx = 0;
}
buf[bufIdx++] = minusChar;
this.inBase64 = false;
}
return buf.slice(0, bufIdx);
};
function Utf7IMAPDecoder(options, codec) {
this.iconv = codec.iconv;
this.inBase64 = false;
this.base64Accum = "";
}
var base64IMAPChars = base64Chars.slice();
base64IMAPChars[",".charCodeAt(0)] = true;
Utf7IMAPDecoder.prototype.write = function(buf) {
var res = "", lastI = 0, inBase64 = this.inBase64, base64Accum = this.base64Accum;
for (var i2 = 0; i2 < buf.length; i2++) {
if (!inBase64) {
if (buf[i2] == andChar) {
res += this.iconv.decode(buf.slice(lastI, i2), "ascii");
lastI = i2 + 1;
inBase64 = true;
}
} else {
if (!base64IMAPChars[buf[i2]]) {
if (i2 == lastI && buf[i2] == minusChar) {
res += "&";
} else {
var b64str = base64Accum + this.iconv.decode(buf.slice(lastI, i2), "ascii").replace(/,/g, "/");
res += this.iconv.decode(Buffer2.from(b64str, "base64"), "utf16-be");
}
if (buf[i2] != minusChar)
i2--;
lastI = i2 + 1;
inBase64 = false;
base64Accum = "";
}
}
}
if (!inBase64) {
res += this.iconv.decode(buf.slice(lastI), "ascii");
} else {
var b64str = base64Accum + this.iconv.decode(buf.slice(lastI), "ascii").replace(/,/g, "/");
var canBeDecoded = b64str.length - b64str.length % 8;
base64Accum = b64str.slice(canBeDecoded);
b64str = b64str.slice(0, canBeDecoded);
res += this.iconv.decode(Buffer2.from(b64str, "base64"), "utf16-be");
}
this.inBase64 = inBase64;
this.base64Accum = base64Accum;
return res;
};
Utf7IMAPDecoder.prototype.end = function() {
var res = "";
if (this.inBase64 && this.base64Accum.length > 0)
res = this.iconv.decode(Buffer2.from(this.base64Accum, "base64"), "utf16-be");
this.inBase64 = false;
this.base64Accum = "";
return res;
};
}
});
// node_modules/iconv-lite/encodings/sbcs-codec.js
var require_sbcs_codec = __commonJS({
"node_modules/iconv-lite/encodings/sbcs-codec.js"(exports2) {
"use strict";
var Buffer2 = require_safer().Buffer;
exports2._sbcs = SBCSCodec;
function SBCSCodec(codecOptions, iconv2) {
if (!codecOptions)
throw new Error("SBCS codec is called without the data.");
if (!codecOptions.chars || codecOptions.chars.length !== 128 && codecOptions.chars.length !== 256)
throw new Error("Encoding '" + codecOptions.type + "' has incorrect 'chars' (must be of len 128 or 256)");
if (codecOptions.chars.length === 128) {
var asciiString = "";
for (var i = 0; i < 128; i++)
asciiString += String.fromCharCode(i);
codecOptions.chars = asciiString + codecOptions.chars;
}
this.decodeBuf = Buffer2.from(codecOptions.chars, "ucs2");
var encodeBuf = Buffer2.alloc(65536, iconv2.defaultCharSingleByte.charCodeAt(0));
for (var i = 0; i < codecOptions.chars.length; i++)
encodeBuf[codecOptions.chars.charCodeAt(i)] = i;
this.encodeBuf = encodeBuf;
}
SBCSCodec.prototype.encoder = SBCSEncoder;
SBCSCodec.prototype.decoder = SBCSDecoder;
function SBCSEncoder(options, codec) {
this.encodeBuf = codec.encodeBuf;
}
SBCSEncoder.prototype.write = function(str) {
var buf = Buffer2.alloc(str.length);
for (var i = 0; i < str.length; i++)
buf[i] = this.encodeBuf[str.charCodeAt(i)];
return buf;
};
SBCSEncoder.prototype.end = function() {
};
function SBCSDecoder(options, codec) {
this.decodeBuf = codec.decodeBuf;
}
SBCSDecoder.prototype.write = function(buf) {
var decodeBuf = this.decodeBuf;
var newBuf = Buffer2.alloc(buf.length * 2);
var idx1 = 0, idx2 = 0;
for (var i = 0; i < buf.length; i++) {
idx1 = buf[i] * 2;
idx2 = i * 2;
newBuf[idx2] = decodeBuf[idx1];
newBuf[idx2 + 1] = decodeBuf[idx1 + 1];
}
return newBuf.toString("ucs2");
};
SBCSDecoder.prototype.end = function() {
};
}
});
// node_modules/iconv-lite/encodings/sbcs-data.js
var require_sbcs_data = __commonJS({
"node_modules/iconv-lite/encodings/sbcs-data.js"(exports2, module2) {
"use strict";
module2.exports = {
// Not supported by iconv, not sure why.
"10029": "maccenteuro",
"maccenteuro": {
"type": "_sbcs",
"chars": "\xC4\u0100\u0101\xC9\u0104\xD6\xDC\xE1\u0105\u010C\xE4\u010D\u0106\u0107\xE9\u0179\u017A\u010E\xED\u010F\u0112\u0113\u0116\xF3\u0117\xF4\xF6\xF5\xFA\u011A\u011B\xFC\u2020\xB0\u0118\xA3\xA7\u2022\xB6\xDF\xAE\xA9\u2122\u0119\xA8\u2260\u0123\u012E\u012F\u012A\u2264\u2265\u012B\u0136\u2202\u2211\u0142\u013B\u013C\u013D\u013E\u0139\u013A\u0145\u0146\u0143\xAC\u221A\u0144\u0147\u2206\xAB\xBB\u2026\xA0\u0148\u0150\xD5\u0151\u014C\u2013\u2014\u201C\u201D\u2018\u2019\xF7\u25CA\u014D\u0154\u0155\u0158\u2039\u203A\u0159\u0156\u0157\u0160\u201A\u201E\u0161\u015A\u015B\xC1\u0164\u0165\xCD\u017D\u017E\u016A\xD3\xD4\u016B\u016E\xDA\u016F\u0170\u0171\u0172\u0173\xDD\xFD\u0137\u017B\u0141\u017C\u0122\u02C7"
},
"808": "cp808",
"ibm808": "cp808",
"cp808": {
"type": "_sbcs",
"chars": "\u0410\u0411\u0412\u0413\u0414\u0415\u0416\u0417\u0418\u0419\u041A\u041B\u041C\u041D\u041E\u041F\u0420\u0421\u0422\u0423\u0424\u0425\u0426\u0427\u0428\u0429\u042A\u042B\u042C\u042D\u042E\u042F\u0430\u0431\u0432\u0433\u0434\u0435\u0436\u0437\u0438\u0439\u043A\u043B\u043C\u043D\u043E\u043F\u2591\u2592\u2593\u2502\u2524\u2561\u2562\u2556\u2555\u2563\u2551\u2557\u255D\u255C\u255B\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u255E\u255F\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u2567\u2568\u2564\u2565\u2559\u2558\u2552\u2553\u256B\u256A\u2518\u250C\u2588\u2584\u258C\u2590\u2580\u0440\u0441\u0442\u0443\u0444\u0445\u0446\u0447\u0448\u0449\u044A\u044B\u044C\u044D\u044E\u044F\u0401\u0451\u0404\u0454\u0407\u0457\u040E\u045E\xB0\u2219\xB7\u221A\u2116\u20AC\u25A0\xA0"
},
"mik": {
"type": "_sbcs",
"chars": "\u0410\u0411\u0412\u0413\u0414\u0415\u0416\u0417\u0418\u0419\u041A\u041B\u041C\u041D\u041E\u041F\u0420\u0421\u0422\u0423\u0424\u0425\u0426\u0427\u0428\u0429\u042A\u042B\u042C\u042D\u042E\u042F\u0430\u0431\u0432\u0433\u0434\u0435\u0436\u0437\u0438\u0439\u043A\u043B\u043C\u043D\u043E\u043F\u0440\u0441\u0442\u0443\u0444\u0445\u0446\u0447\u0448\u0449\u044A\u044B\u044C\u044D\u044E\u044F\u2514\u2534\u252C\u251C\u2500\u253C\u2563\u2551\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u2510\u2591\u2592\u2593\u2502\u2524\u2116\xA7\u2557\u255D\u2518\u250C\u2588\u2584\u258C\u2590\u2580\u03B1\xDF\u0393\u03C0\u03A3\u03C3\xB5\u03C4\u03A6\u0398\u03A9\u03B4\u221E\u03C6\u03B5\u2229\u2261\xB1\u2265\u2264\u2320\u2321\xF7\u2248\xB0\u2219\xB7\u221A\u207F\xB2\u25A0\xA0"
},
"cp720": {
"type": "_sbcs",
"chars": "\x80\x81\xE9\xE2\x84\xE0\x86\xE7\xEA\xEB\xE8\xEF\xEE\x8D\x8E\x8F\x90\u0651\u0652\xF4\xA4\u0640\xFB\xF9\u0621\u0622\u0623\u0624\xA3\u0625\u0626\u0627\u0628\u0629\u062A\u062B\u062C\u062D\u062E\u062F\u0630\u0631\u0632\u0633\u0634\u0635\xAB\xBB\u2591\u2592\u2593\u2502\u2524\u2561\u2562\u2556\u2555\u2563\u2551\u2557\u255D\u255C\u255B\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u255E\u255F\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u2567\u2568\u2564\u2565\u2559\u2558\u2552\u2553\u256B\u256A\u2518\u250C\u2588\u2584\u258C\u2590\u2580\u0636\u0637\u0638\u0639\u063A\u0641\xB5\u0642\u0643\u0644\u0645\u0646\u0647\u0648\u0649\u064A\u2261\u064B\u064C\u064D\u064E\u064F\u0650\u2248\xB0\u2219\xB7\u221A\u207F\xB2\u25A0\xA0"
},
// Aliases of generated encodings.
"ascii8bit": "ascii",
"usascii": "ascii",
"ansix34": "ascii",
"ansix341968": "ascii",
"ansix341986": "ascii",
"csascii": "ascii",
"cp367": "ascii",
"ibm367": "ascii",
"isoir6": "ascii",
"iso646us": "ascii",
"iso646irv": "ascii",
"us": "ascii",
"latin1": "iso88591",
"latin2": "iso88592",
"latin3": "iso88593",
"latin4": "iso88594",
"latin5": "iso88599",
"latin6": "iso885910",
"latin7": "iso885913",
"latin8": "iso885914",
"latin9": "iso885915",
"latin10": "iso885916",
"csisolatin1": "iso88591",
"csisolatin2": "iso88592",
"csisolatin3": "iso88593",
"csisolatin4": "iso88594",
"csisolatincyrillic": "iso88595",
"csisolatinarabic": "iso88596",
"csisolatingreek": "iso88597",
"csisolatinhebrew": "iso88598",
"csisolatin5": "iso88599",
"csisolatin6": "iso885910",
"l1": "iso88591",
"l2": "iso88592",
"l3": "iso88593",
"l4": "iso88594",
"l5": "iso88599",
"l6": "iso885910",
"l7": "iso885913",
"l8": "iso885914",
"l9": "iso885915",
"l10": "iso885916",
"isoir14": "iso646jp",
"isoir57": "iso646cn",
"isoir100": "iso88591",
"isoir101": "iso88592",
"isoir109": "iso88593",
"isoir110": "iso88594",
"isoir144": "iso88595",
"isoir127": "iso88596",
"isoir126": "iso88597",
"isoir138": "iso88598",
"isoir148": "iso88599",
"isoir157": "iso885910",
"isoir166": "tis620",
"isoir179": "iso885913",
"isoir199": "iso885914",
"isoir203": "iso885915",
"isoir226": "iso885916",
"cp819": "iso88591",
"ibm819": "iso88591",
"cyrillic": "iso88595",
"arabic": "iso88596",
"arabic8": "iso88596",
"ecma114": "iso88596",
"asmo708": "iso88596",
"greek": "iso88597",
"greek8": "iso88597",
"ecma118": "iso88597",
"elot928": "iso88597",
"hebrew": "iso88598",
"hebrew8": "iso88598",
"turkish": "iso88599",
"turkish8": "iso88599",
"thai": "iso885911",
"thai8": "iso885911",
"celtic": "iso885914",
"celtic8": "iso885914",
"isoceltic": "iso885914",
"tis6200": "tis620",
"tis62025291": "tis620",
"tis62025330": "tis620",
"10000": "macroman",
"10006": "macgreek",
"10007": "maccyrillic",
"10079": "maciceland",
"10081": "macturkish",
"cspc8codepage437": "cp437",
"cspc775baltic": "cp775",
"cspc850multilingual": "cp850",
"cspcp852": "cp852",
"cspc862latinhebrew": "cp862",
"cpgr": "cp869",
"msee": "cp1250",
"mscyrl": "cp1251",
"msansi": "cp1252",
"msgreek": "cp1253",
"msturk": "cp1254",
"mshebr": "cp1255",
"msarab": "cp1256",
"winbaltrim": "cp1257",
"cp20866": "koi8r",
"20866": "koi8r",
"ibm878": "koi8r",
"cskoi8r": "koi8r",
"cp21866": "koi8u",
"21866": "koi8u",
"ibm1168": "koi8u",
"strk10482002": "rk1048",
"tcvn5712": "tcvn",
"tcvn57121": "tcvn",
"gb198880": "iso646cn",
"cn": "iso646cn",
"csiso14jisc6220ro": "iso646jp",
"jisc62201969ro": "iso646jp",
"jp": "iso646jp",
"cshproman8": "hproman8",
"r8": "hproman8",
"roman8": "hproman8",
"xroman8": "hproman8",
"ibm1051": "hproman8",
"mac": "macintosh",
"csmacintosh": "macintosh"
};
}
});
// node_modules/iconv-lite/encodings/sbcs-data-generated.js
var require_sbcs_data_generated = __commonJS({
"node_modules/iconv-lite/encodings/sbcs-data-generated.js"(exports2, module2) {
"use strict";
module2.exports = {
"437": "cp437",
"737": "cp737",
"775": "cp775",
"850": "cp850",
"852": "cp852",
"855": "cp855",
"856": "cp856",
"857": "cp857",
"858": "cp858",
"860": "cp860",
"861": "cp861",
"862": "cp862",
"863": "cp863",
"864": "cp864",
"865": "cp865",
"866": "cp866",
"869": "cp869",
"874": "windows874",
"922": "cp922",
"1046": "cp1046",
"1124": "cp1124",
"1125": "cp1125",
"1129": "cp1129",
"1133": "cp1133",
"1161": "cp1161",
"1162": "cp1162",
"1163": "cp1163",
"1250": "windows1250",
"1251": "windows1251",
"1252": "windows1252",
"1253": "windows1253",
"1254": "windows1254",
"1255": "windows1255",
"1256": "windows1256",
"1257": "windows1257",
"1258": "windows1258",
"28591": "iso88591",
"28592": "iso88592",
"28593": "iso88593",
"28594": "iso88594",
"28595": "iso88595",
"28596": "iso88596",
"28597": "iso88597",
"28598": "iso88598",
"28599": "iso88599",
"28600": "iso885910",
"28601": "iso885911",
"28603": "iso885913",
"28604": "iso885914",
"28605": "iso885915",
"28606": "iso885916",
"windows874": {
"type": "_sbcs",
"chars": "\u20AC\uFFFD\uFFFD\uFFFD\uFFFD\u2026\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u2018\u2019\u201C\u201D\u2022\u2013\u2014\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\xA0\u0E01\u0E02\u0E03\u0E04\u0E05\u0E06\u0E07\u0E08\u0E09\u0E0A\u0E0B\u0E0C\u0E0D\u0E0E\u0E0F\u0E10\u0E11\u0E12\u0E13\u0E14\u0E15\u0E16\u0E17\u0E18\u0E19\u0E1A\u0E1B\u0E1C\u0E1D\u0E1E\u0E1F\u0E20\u0E21\u0E22\u0E23\u0E24\u0E25\u0E26\u0E27\u0E28\u0E29\u0E2A\u0E2B\u0E2C\u0E2D\u0E2E\u0E2F\u0E30\u0E31\u0E32\u0E33\u0E34\u0E35\u0E36\u0E37\u0E38\u0E39\u0E3A\uFFFD\uFFFD\uFFFD\uFFFD\u0E3F\u0E40\u0E41\u0E42\u0E43\u0E44\u0E45\u0E46\u0E47\u0E48\u0E49\u0E4A\u0E4B\u0E4C\u0E4D\u0E4E\u0E4F\u0E50\u0E51\u0E52\u0E53\u0E54\u0E55\u0E56\u0E57\u0E58\u0E59\u0E5A\u0E5B\uFFFD\uFFFD\uFFFD\uFFFD"
},
"win874": "windows874",
"cp874": "windows874",
"windows1250": {
"type": "_sbcs",
"chars": "\u20AC\uFFFD\u201A\uFFFD\u201E\u2026\u2020\u2021\uFFFD\u2030\u0160\u2039\u015A\u0164\u017D\u0179\uFFFD\u2018\u2019\u201C\u201D\u2022\u2013\u2014\uFFFD\u2122\u0161\u203A\u015B\u0165\u017E\u017A\xA0\u02C7\u02D8\u0141\xA4\u0104\xA6\xA7\xA8\xA9\u015E\xAB\xAC\xAD\xAE\u017B\xB0\xB1\u02DB\u0142\xB4\xB5\xB6\xB7\xB8\u0105\u015F\xBB\u013D\u02DD\u013E\u017C\u0154\xC1\xC2\u0102\xC4\u0139\u0106\xC7\u010C\xC9\u0118\xCB\u011A\xCD\xCE\u010E\u0110\u0143\u0147\xD3\xD4\u0150\xD6\xD7\u0158\u016E\xDA\u0170\xDC\xDD\u0162\xDF\u0155\xE1\xE2\u0103\xE4\u013A\u0107\xE7\u010D\xE9\u0119\xEB\u011B\xED\xEE\u010F\u0111\u0144\u0148\xF3\xF4\u0151\xF6\xF7\u0159\u016F\xFA\u0171\xFC\xFD\u0163\u02D9"
},
"win1250": "windows1250",
"cp1250": "windows1250",
"windows1251": {
"type": "_sbcs",
"chars": "\u0402\u0403\u201A\u0453\u201E\u2026\u2020\u2021\u20AC\u2030\u0409\u2039\u040A\u040C\u040B\u040F\u0452\u2018\u2019\u201C\u201D\u2022\u2013\u2014\uFFFD\u2122\u0459\u203A\u045A\u045C\u045B\u045F\xA0\u040E\u045E\u0408\xA4\u0490\xA6\xA7\u0401\xA9\u0404\xAB\xAC\xAD\xAE\u0407\xB0\xB1\u0406\u0456\u0491\xB5\xB6\xB7\u0451\u2116\u0454\xBB\u0458\u0405\u0455\u0457\u0410\u0411\u0412\u0413\u0414\u0415\u0416\u0417\u0418\u0419\u041A\u041B\u041C\u041D\u041E\u041F\u0420\u0421\u0422\u0423\u0424\u0425\u0426\u0427\u0428\u0429\u042A\u042B\u042C\u042D\u042E\u042F\u0430\u0431\u0432\u0433\u0434\u0435\u0436\u0437\u0438\u0439\u043A\u043B\u043C\u043D\u043E\u043F\u0440\u0441\u0442\u0443\u0444\u0445\u0446\u0447\u0448\u0449\u044A\u044B\u044C\u044D\u044E\u044F"
},
"win1251": "windows1251",
"cp1251": "windows1251",
"windows1252": {
"type": "_sbcs",
"chars": "\u20AC\uFFFD\u201A\u0192\u201E\u2026\u2020\u2021\u02C6\u2030\u0160\u2039\u0152\uFFFD\u017D\uFFFD\uFFFD\u2018\u2019\u201C\u201D\u2022\u2013\u2014\u02DC\u2122\u0161\u203A\u0153\uFFFD\u017E\u0178\xA0\xA1\xA2\xA3\xA4\xA5\xA6\xA7\xA8\xA9\xAA\xAB\xAC\xAD\xAE\xAF\xB0\xB1\xB2\xB3\xB4\xB5\xB6\xB7\xB8\xB9\xBA\xBB\xBC\xBD\xBE\xBF\xC0\xC1\xC2\xC3\xC4\xC5\xC6\xC7\xC8\xC9\xCA\xCB\xCC\xCD\xCE\xCF\xD0\xD1\xD2\xD3\xD4\xD5\xD6\xD7\xD8\xD9\xDA\xDB\xDC\xDD\xDE\xDF\xE0\xE1\xE2\xE3\xE4\xE5\xE6\xE7\xE8\xE9\xEA\xEB\xEC\xED\xEE\xEF\xF0\xF1\xF2\xF3\xF4\xF5\xF6\xF7\xF8\xF9\xFA\xFB\xFC\xFD\xFE\xFF"
},
"win1252": "windows1252",
"cp1252": "windows1252",
"windows1253": {
"type": "_sbcs",
"chars": "\u20AC\uFFFD\u201A\u0192\u201E\u2026\u2020\u2021\uFFFD\u2030\uFFFD\u2039\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u2018\u2019\u201C\u201D\u2022\u2013\u2014\uFFFD\u2122\uFFFD\u203A\uFFFD\uFFFD\uFFFD\uFFFD\xA0\u0385\u0386\xA3\xA4\xA5\xA6\xA7\xA8\xA9\uFFFD\xAB\xAC\xAD\xAE\u2015\xB0\xB1\xB2\xB3\u0384\xB5\xB6\xB7\u0388\u0389\u038A\xBB\u038C\xBD\u038E\u038F\u0390\u0391\u0392\u0393\u0394\u0395\u0396\u0397\u0398\u0399\u039A\u039B\u039C\u039D\u039E\u039F\u03A0\u03A1\uFFFD\u03A3\u03A4\u03A5\u03A6\u03A7\u03A8\u03A9\u03AA\u03AB\u03AC\u03AD\u03AE\u03AF\u03B0\u03B1\u03B2\u03B3\u03B4\u03B5\u03B6\u03B7\u03B8\u03B9\u03BA\u03BB\u03BC\u03BD\u03BE\u03BF\u03C0\u03C1\u03C2\u03C3\u03C4\u03C5\u03C6\u03C7\u03C8\u03C9\u03CA\u03CB\u03CC\u03CD\u03CE\uFFFD"
},
"win1253": "windows1253",
"cp1253": "windows1253",
"windows1254": {
"type": "_sbcs",
"chars": "\u20AC\uFFFD\u201A\u0192\u201E\u2026\u2020\u2021\u02C6\u2030\u0160\u2039\u0152\uFFFD\uFFFD\uFFFD\uFFFD\u2018\u2019\u201C\u201D\u2022\u2013\u2014\u02DC\u2122\u0161\u203A\u0153\uFFFD\uFFFD\u0178\xA0\xA1\xA2\xA3\xA4\xA5\xA6\xA7\xA8\xA9\xAA\xAB\xAC\xAD\xAE\xAF\xB0\xB1\xB2\xB3\xB4\xB5\xB6\xB7\xB8\xB9\xBA\xBB\xBC\xBD\xBE\xBF\xC0\xC1\xC2\xC3\xC4\xC5\xC6\xC7\xC8\xC9\xCA\xCB\xCC\xCD\xCE\xCF\u011E\xD1\xD2\xD3\xD4\xD5\xD6\xD7\xD8\xD9\xDA\xDB\xDC\u0130\u015E\xDF\xE0\xE1\xE2\xE3\xE4\xE5\xE6\xE7\xE8\xE9\xEA\xEB\xEC\xED\xEE\xEF\u011F\xF1\xF2\xF3\xF4\xF5\xF6\xF7\xF8\xF9\xFA\xFB\xFC\u0131\u015F\xFF"
},
"win1254": "windows1254",
"cp1254": "windows1254",
"windows1255": {
"type": "_sbcs",
"chars": "\u20AC\uFFFD\u201A\u0192\u201E\u2026\u2020\u2021\u02C6\u2030\uFFFD\u2039\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u2018\u2019\u201C\u201D\u2022\u2013\u2014\u02DC\u2122\uFFFD\u203A\uFFFD\uFFFD\uFFFD\uFFFD\xA0\xA1\xA2\xA3\u20AA\xA5\xA6\xA7\xA8\xA9\xD7\xAB\xAC\xAD\xAE\xAF\xB0\xB1\xB2\xB3\xB4\xB5\xB6\xB7\xB8\xB9\xF7\xBB\xBC\xBD\xBE\xBF\u05B0\u05B1\u05B2\u05B3\u05B4\u05B5\u05B6\u05B7\u05B8\u05B9\u05BA\u05BB\u05BC\u05BD\u05BE\u05BF\u05C0\u05C1\u05C2\u05C3\u05F0\u05F1\u05F2\u05F3\u05F4\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u05D0\u05D1\u05D2\u05D3\u05D4\u05D5\u05D6\u05D7\u05D8\u05D9\u05DA\u05DB\u05DC\u05DD\u05DE\u05DF\u05E0\u05E1\u05E2\u05E3\u05E4\u05E5\u05E6\u05E7\u05E8\u05E9\u05EA\uFFFD\uFFFD\u200E\u200F\uFFFD"
},
"win1255": "windows1255",
"cp1255": "windows1255",
"windows1256": {
"type": "_sbcs",
"chars": "\u20AC\u067E\u201A\u0192\u201E\u2026\u2020\u2021\u02C6\u2030\u0679\u2039\u0152\u0686\u0698\u0688\u06AF\u2018\u2019\u201C\u201D\u2022\u2013\u2014\u06A9\u2122\u0691\u203A\u0153\u200C\u200D\u06BA\xA0\u060C\xA2\xA3\xA4\xA5\xA6\xA7\xA8\xA9\u06BE\xAB\xAC\xAD\xAE\xAF\xB0\xB1\xB2\xB3\xB4\xB5\xB6\xB7\xB8\xB9\u061B\xBB\xBC\xBD\xBE\u061F\u06C1\u0621\u0622\u0623\u0624\u0625\u0626\u0627\u0628\u0629\u062A\u062B\u062C\u062D\u062E\u062F\u0630\u0631\u0632\u0633\u0634\u0635\u0636\xD7\u0637\u0638\u0639\u063A\u0640\u0641\u0642\u0643\xE0\u0644\xE2\u0645\u0646\u0647\u0648\xE7\xE8\xE9\xEA\xEB\u0649\u064A\xEE\xEF\u064B\u064C\u064D\u064E\xF4\u064F\u0650\xF7\u0651\xF9\u0652\xFB\xFC\u200E\u200F\u06D2"
},
"win1256": "windows1256",
"cp1256": "windows1256",
"windows1257": {
"type": "_sbcs",
"chars": "\u20AC\uFFFD\u201A\uFFFD\u201E\u2026\u2020\u2021\uFFFD\u2030\uFFFD\u2039\uFFFD\xA8\u02C7\xB8\uFFFD\u2018\u2019\u201C\u201D\u2022\u2013\u2014\uFFFD\u2122\uFFFD\u203A\uFFFD\xAF\u02DB\uFFFD\xA0\uFFFD\xA2\xA3\xA4\uFFFD\xA6\xA7\xD8\xA9\u0156\xAB\xAC\xAD\xAE\xC6\xB0\xB1\xB2\xB3\xB4\xB5\xB6\xB7\xF8\xB9\u0157\xBB\xBC\xBD\xBE\xE6\u0104\u012E\u0100\u0106\xC4\xC5\u0118\u0112\u010C\xC9\u0179\u0116\u0122\u0136\u012A\u013B\u0160\u0143\u0145\xD3\u014C\xD5\xD6\xD7\u0172\u0141\u015A\u016A\xDC\u017B\u017D\xDF\u0105\u012F\u0101\u0107\xE4\xE5\u0119\u0113\u010D\xE9\u017A\u0117\u0123\u0137\u012B\u013C\u0161\u0144\u0146\xF3\u014D\xF5\xF6\xF7\u0173\u0142\u015B\u016B\xFC\u017C\u017E\u02D9"
},
"win1257": "windows1257",
"cp1257": "windows1257",
"windows1258": {
"type": "_sbcs",
"chars": "\u20AC\uFFFD\u201A\u0192\u201E\u2026\u2020\u2021\u02C6\u2030\uFFFD\u2039\u0152\uFFFD\uFFFD\uFFFD\uFFFD\u2018\u2019\u201C\u201D\u2022\u2013\u2014\u02DC\u2122\uFFFD\u203A\u0153\uFFFD\uFFFD\u0178\xA0\xA1\xA2\xA3\xA4\xA5\xA6\xA7\xA8\xA9\xAA\xAB\xAC\xAD\xAE\xAF\xB0\xB1\xB2\xB3\xB4\xB5\xB6\xB7\xB8\xB9\xBA\xBB\xBC\xBD\xBE\xBF\xC0\xC1\xC2\u0102\xC4\xC5\xC6\xC7\xC8\xC9\xCA\xCB\u0300\xCD\xCE\xCF\u0110\xD1\u0309\xD3\xD4\u01A0\xD6\xD7\xD8\xD9\xDA\xDB\xDC\u01AF\u0303\xDF\xE0\xE1\xE2\u0103\xE4\xE5\xE6\xE7\xE8\xE9\xEA\xEB\u0301\xED\xEE\xEF\u0111\xF1\u0323\xF3\xF4\u01A1\xF6\xF7\xF8\xF9\xFA\xFB\xFC\u01B0\u20AB\xFF"
},
"win1258": "windows1258",
"cp1258": "windows1258",
"iso88591": {
"type": "_sbcs",
"chars": "\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8A\x8B\x8C\x8D\x8E\x8F\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9A\x9B\x9C\x9D\x9E\x9F\xA0\xA1\xA2\xA3\xA4\xA5\xA6\xA7\xA8\xA9\xAA\xAB\xAC\xAD\xAE\xAF\xB0\xB1\xB2\xB3\xB4\xB5\xB6\xB7\xB8\xB9\xBA\xBB\xBC\xBD\xBE\xBF\xC0\xC1\xC2\xC3\xC4\xC5\xC6\xC7\xC8\xC9\xCA\xCB\xCC\xCD\xCE\xCF\xD0\xD1\xD2\xD3\xD4\xD5\xD6\xD7\xD8\xD9\xDA\xDB\xDC\xDD\xDE\xDF\xE0\xE1\xE2\xE3\xE4\xE5\xE6\xE7\xE8\xE9\xEA\xEB\xEC\xED\xEE\xEF\xF0\xF1\xF2\xF3\xF4\xF5\xF6\xF7\xF8\xF9\xFA\xFB\xFC\xFD\xFE\xFF"
},
"cp28591": "iso88591",
"iso88592": {
"type": "_sbcs",
"chars": "\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8A\x8B\x8C\x8D\x8E\x8F\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9A\x9B\x9C\x9D\x9E\x9F\xA0\u0104\u02D8\u0141\xA4\u013D\u015A\xA7\xA8\u0160\u015E\u0164\u0179\xAD\u017D\u017B\xB0\u0105\u02DB\u0142\xB4\u013E\u015B\u02C7\xB8\u0161\u015F\u0165\u017A\u02DD\u017E\u017C\u0154\xC1\xC2\u0102\xC4\u0139\u0106\xC7\u010C\xC9\u0118\xCB\u011A\xCD\xCE\u010E\u0110\u0143\u0147\xD3\xD4\u0150\xD6\xD7\u0158\u016E\xDA\u0170\xDC\xDD\u0162\xDF\u0155\xE1\xE2\u0103\xE4\u013A\u0107\xE7\u010D\xE9\u0119\xEB\u011B\xED\xEE\u010F\u0111\u0144\u0148\xF3\xF4\u0151\xF6\xF7\u0159\u016F\xFA\u0171\xFC\xFD\u0163\u02D9"
},
"cp28592": "iso88592",
"iso88593": {
"type": "_sbcs",
"chars": "\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8A\x8B\x8C\x8D\x8E\x8F\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9A\x9B\x9C\x9D\x9E\x9F\xA0\u0126\u02D8\xA3\xA4\uFFFD\u0124\xA7\xA8\u0130\u015E\u011E\u0134\xAD\uFFFD\u017B\xB0\u0127\xB2\xB3\xB4\xB5\u0125\xB7\xB8\u0131\u015F\u011F\u0135\xBD\uFFFD\u017C\xC0\xC1\xC2\uFFFD\xC4\u010A\u0108\xC7\xC8\xC9\xCA\xCB\xCC\xCD\xCE\xCF\uFFFD\xD1\xD2\xD3\xD4\u0120\xD6\xD7\u011C\xD9\xDA\xDB\xDC\u016C\u015C\xDF\xE0\xE1\xE2\uFFFD\xE4\u010B\u0109\xE7\xE8\xE9\xEA\xEB\xEC\xED\xEE\xEF\uFFFD\xF1\xF2\xF3\xF4\u0121\xF6\xF7\u011D\xF9\xFA\xFB\xFC\u016D\u015D\u02D9"
},
"cp28593": "iso88593",
"iso88594": {
"type": "_sbcs",
"chars": "\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8A\x8B\x8C\x8D\x8E\x8F\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9A\x9B\x9C\x9D\x9E\x9F\xA0\u0104\u0138\u0156\xA4\u0128\u013B\xA7\xA8\u0160\u0112\u0122\u0166\xAD\u017D\xAF\xB0\u0105\u02DB\u0157\xB4\u0129\u013C\u02C7\xB8\u0161\u0113\u0123\u0167\u014A\u017E\u014B\u0100\xC1\xC2\xC3\xC4\xC5\xC6\u012E\u010C\xC9\u0118\xCB\u0116\xCD\xCE\u012A\u0110\u0145\u014C\u0136\xD4\xD5\xD6\xD7\xD8\u0172\xDA\xDB\xDC\u0168\u016A\xDF\u0101\xE1\xE2\xE3\xE4\xE5\xE6\u012F\u010D\xE9\u0119\xEB\u0117\xED\xEE\u012B\u0111\u0146\u014D\u0137\xF4\xF5\xF6\xF7\xF8\u0173\xFA\xFB\xFC\u0169\u016B\u02D9"
},
"cp28594": "iso88594",
"iso88595": {
"type": "_sbcs",
"chars": "\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8A\x8B\x8C\x8D\x8E\x8F\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9A\x9B\x9C\x9D\x9E\x9F\xA0\u0401\u0402\u0403\u0404\u0405\u0406\u0407\u0408\u0409\u040A\u040B\u040C\xAD\u040E\u040F\u0410\u0411\u0412\u0413\u0414\u0415\u0416\u0417\u0418\u0419\u041A\u041B\u041C\u041D\u041E\u041F\u0420\u0421\u0422\u0423\u0424\u0425\u0426\u0427\u0428\u0429\u042A\u042B\u042C\u042D\u042E\u042F\u0430\u0431\u0432\u0433\u0434\u0435\u0436\u0437\u0438\u0439\u043A\u043B\u043C\u043D\u043E\u043F\u0440\u0441\u0442\u0443\u0444\u0445\u0446\u0447\u0448\u0449\u044A\u044B\u044C\u044D\u044E\u044F\u2116\u0451\u0452\u0453\u0454\u0455\u0456\u0457\u0458\u0459\u045A\u045B\u045C\xA7\u045E\u045F"
},
"cp28595": "iso88595",
"iso88596": {
"type": "_sbcs",
"chars": "\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8A\x8B\x8C\x8D\x8E\x8F\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9A\x9B\x9C\x9D\x9E\x9F\xA0\uFFFD\uFFFD\uFFFD\xA4\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u060C\xAD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u061B\uFFFD\uFFFD\uFFFD\u061F\uFFFD\u0621\u0622\u0623\u0624\u0625\u0626\u0627\u0628\u0629\u062A\u062B\u062C\u062D\u062E\u062F\u0630\u0631\u0632\u0633\u0634\u0635\u0636\u0637\u0638\u0639\u063A\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u0640\u0641\u0642\u0643\u0644\u0645\u0646\u0647\u0648\u0649\u064A\u064B\u064C\u064D\u064E\u064F\u0650\u0651\u0652\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"
},
"cp28596": "iso88596",
"iso88597": {
"type": "_sbcs",
"chars": "\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8A\x8B\x8C\x8D\x8E\x8F\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9A\x9B\x9C\x9D\x9E\x9F\xA0\u2018\u2019\xA3\u20AC\u20AF\xA6\xA7\xA8\xA9\u037A\xAB\xAC\xAD\uFFFD\u2015\xB0\xB1\xB2\xB3\u0384\u0385\u0386\xB7\u0388\u0389\u038A\xBB\u038C\xBD\u038E\u038F\u0390\u0391\u0392\u0393\u0394\u0395\u0396\u0397\u0398\u0399\u039A\u039B\u039C\u039D\u039E\u039F\u03A0\u03A1\uFFFD\u03A3\u03A4\u03A5\u03A6\u03A7\u03A8\u03A9\u03AA\u03AB\u03AC\u03AD\u03AE\u03AF\u03B0\u03B1\u03B2\u03B3\u03B4\u03B5\u03B6\u03B7\u03B8\u03B9\u03BA\u03BB\u03BC\u03BD\u03BE\u03BF\u03C0\u03C1\u03C2\u03C3\u03C4\u03C5\u03C6\u03C7\u03C8\u03C9\u03CA\u03CB\u03CC\u03CD\u03CE\uFFFD"
},
"cp28597": "iso88597",
"iso88598": {
"type": "_sbcs",
"chars": "\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8A\x8B\x8C\x8D\x8E\x8F\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9A\x9B\x9C\x9D\x9E\x9F\xA0\uFFFD\xA2\xA3\xA4\xA5\xA6\xA7\xA8\xA9\xD7\xAB\xAC\xAD\xAE\xAF\xB0\xB1\xB2\xB3\xB4\xB5\xB6\xB7\xB8\xB9\xF7\xBB\xBC\xBD\xBE\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u2017\u05D0\u05D1\u05D2\u05D3\u05D4\u05D5\u05D6\u05D7\u05D8\u05D9\u05DA\u05DB\u05DC\u05DD\u05DE\u05DF\u05E0\u05E1\u05E2\u05E3\u05E4\u05E5\u05E6\u05E7\u05E8\u05E9\u05EA\uFFFD\uFFFD\u200E\u200F\uFFFD"
},
"cp28598": "iso88598",
"iso88599": {
"type": "_sbcs",
"chars": "\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8A\x8B\x8C\x8D\x8E\x8F\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9A\x9B\x9C\x9D\x9E\x9F\xA0\xA1\xA2\xA3\xA4\xA5\xA6\xA7\xA8\xA9\xAA\xAB\xAC\xAD\xAE\xAF\xB0\xB1\xB2\xB3\xB4\xB5\xB6\xB7\xB8\xB9\xBA\xBB\xBC\xBD\xBE\xBF\xC0\xC1\xC2\xC3\xC4\xC5\xC6\xC7\xC8\xC9\xCA\xCB\xCC\xCD\xCE\xCF\u011E\xD1\xD2\xD3\xD4\xD5\xD6\xD7\xD8\xD9\xDA\xDB\xDC\u0130\u015E\xDF\xE0\xE1\xE2\xE3\xE4\xE5\xE6\xE7\xE8\xE9\xEA\xEB\xEC\xED\xEE\xEF\u011F\xF1\xF2\xF3\xF4\xF5\xF6\xF7\xF8\xF9\xFA\xFB\xFC\u0131\u015F\xFF"
},
"cp28599": "iso88599",
"iso885910": {
"type": "_sbcs",
"chars": "\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8A\x8B\x8C\x8D\x8E\x8F\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9A\x9B\x9C\x9D\x9E\x9F\xA0\u0104\u0112\u0122\u012A\u0128\u0136\xA7\u013B\u0110\u0160\u0166\u017D\xAD\u016A\u014A\xB0\u0105\u0113\u0123\u012B\u0129\u0137\xB7\u013C\u0111\u0161\u0167\u017E\u2015\u016B\u014B\u0100\xC1\xC2\xC3\xC4\xC5\xC6\u012E\u010C\xC9\u0118\xCB\u0116\xCD\xCE\xCF\xD0\u0145\u014C\xD3\xD4\xD5\xD6\u0168\xD8\u0172\xDA\xDB\xDC\xDD\xDE\xDF\u0101\xE1\xE2\xE3\xE4\xE5\xE6\u012F\u010D\xE9\u0119\xEB\u0117\xED\xEE\xEF\xF0\u0146\u014D\xF3\xF4\xF5\xF6\u0169\xF8\u0173\xFA\xFB\xFC\xFD\xFE\u0138"
},
"cp28600": "iso885910",
"iso885911": {
"type": "_sbcs",
"chars": "\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8A\x8B\x8C\x8D\x8E\x8F\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9A\x9B\x9C\x9D\x9E\x9F\xA0\u0E01\u0E02\u0E03\u0E04\u0E05\u0E06\u0E07\u0E08\u0E09\u0E0A\u0E0B\u0E0C\u0E0D\u0E0E\u0E0F\u0E10\u0E11\u0E12\u0E13\u0E14\u0E15\u0E16\u0E17\u0E18\u0E19\u0E1A\u0E1B\u0E1C\u0E1D\u0E1E\u0E1F\u0E20\u0E21\u0E22\u0E23\u0E24\u0E25\u0E26\u0E27\u0E28\u0E29\u0E2A\u0E2B\u0E2C\u0E2D\u0E2E\u0E2F\u0E30\u0E31\u0E32\u0E33\u0E34\u0E35\u0E36\u0E37\u0E38\u0E39\u0E3A\uFFFD\uFFFD\uFFFD\uFFFD\u0E3F\u0E40\u0E41\u0E42\u0E43\u0E44\u0E45\u0E46\u0E47\u0E48\u0E49\u0E4A\u0E4B\u0E4C\u0E4D\u0E4E\u0E4F\u0E50\u0E51\u0E52\u0E53\u0E54\u0E55\u0E56\u0E57\u0E58\u0E59\u0E5A\u0E5B\uFFFD\uFFFD\uFFFD\uFFFD"
},
"cp28601": "iso885911",
"iso885913": {
"type": "_sbcs",
"chars": "\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8A\x8B\x8C\x8D\x8E\x8F\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9A\x9B\x9C\x9D\x9E\x9F\xA0\u201D\xA2\xA3\xA4\u201E\xA6\xA7\xD8\xA9\u0156\xAB\xAC\xAD\xAE\xC6\xB0\xB1\xB2\xB3\u201C\xB5\xB6\xB7\xF8\xB9\u0157\xBB\xBC\xBD\xBE\xE6\u0104\u012E\u0100\u0106\xC4\xC5\u0118\u0112\u010C\xC9\u0179\u0116\u0122\u0136\u012A\u013B\u0160\u0143\u0145\xD3\u014C\xD5\xD6\xD7\u0172\u0141\u015A\u016A\xDC\u017B\u017D\xDF\u0105\u012F\u0101\u0107\xE4\xE5\u0119\u0113\u010D\xE9\u017A\u0117\u0123\u0137\u012B\u013C\u0161\u0144\u0146\xF3\u014D\xF5\xF6\xF7\u0173\u0142\u015B\u016B\xFC\u017C\u017E\u2019"
},
"cp28603": "iso885913",
"iso885914": {
"type": "_sbcs",
"chars": "\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8A\x8B\x8C\x8D\x8E\x8F\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9A\x9B\x9C\x9D\x9E\x9F\xA0\u1E02\u1E03\xA3\u010A\u010B\u1E0A\xA7\u1E80\xA9\u1E82\u1E0B\u1EF2\xAD\xAE\u0178\u1E1E\u1E1F\u0120\u0121\u1E40\u1E41\xB6\u1E56\u1E81\u1E57\u1E83\u1E60\u1EF3\u1E84\u1E85\u1E61\xC0\xC1\xC2\xC3\xC4\xC5\xC6\xC7\xC8\xC9\xCA\xCB\xCC\xCD\xCE\xCF\u0174\xD1\xD2\xD3\xD4\xD5\xD6\u1E6A\xD8\xD9\xDA\xDB\xDC\xDD\u0176\xDF\xE0\xE1\xE2\xE3\xE4\xE5\xE6\xE7\xE8\xE9\xEA\xEB\xEC\xED\xEE\xEF\u0175\xF1\xF2\xF3\xF4\xF5\xF6\u1E6B\xF8\xF9\xFA\xFB\xFC\xFD\u0177\xFF"
},
"cp28604": "iso885914",
"iso885915": {
"type": "_sbcs",
"chars": "\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8A\x8B\x8C\x8D\x8E\x8F\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9A\x9B\x9C\x9D\x9E\x9F\xA0\xA1\xA2\xA3\u20AC\xA5\u0160\xA7\u0161\xA9\xAA\xAB\xAC\xAD\xAE\xAF\xB0\xB1\xB2\xB3\u017D\xB5\xB6\xB7\u017E\xB9\xBA\xBB\u0152\u0153\u0178\xBF\xC0\xC1\xC2\xC3\xC4\xC5\xC6\xC7\xC8\xC9\xCA\xCB\xCC\xCD\xCE\xCF\xD0\xD1\xD2\xD3\xD4\xD5\xD6\xD7\xD8\xD9\xDA\xDB\xDC\xDD\xDE\xDF\xE0\xE1\xE2\xE3\xE4\xE5\xE6\xE7\xE8\xE9\xEA\xEB\xEC\xED\xEE\xEF\xF0\xF1\xF2\xF3\xF4\xF5\xF6\xF7\xF8\xF9\xFA\xFB\xFC\xFD\xFE\xFF"
},
"cp28605": "iso885915",
"iso885916": {
"type": "_sbcs",
"chars": "\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8A\x8B\x8C\x8D\x8E\x8F\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9A\x9B\x9C\x9D\x9E\x9F\xA0\u0104\u0105\u0141\u20AC\u201E\u0160\xA7\u0161\xA9\u0218\xAB\u0179\xAD\u017A\u017B\xB0\xB1\u010C\u0142\u017D\u201D\xB6\xB7\u017E\u010D\u0219\xBB\u0152\u0153\u0178\u017C\xC0\xC1\xC2\u0102\xC4\u0106\xC6\xC7\xC8\xC9\xCA\xCB\xCC\xCD\xCE\xCF\u0110\u0143\xD2\xD3\xD4\u0150\xD6\u015A\u0170\xD9\xDA\xDB\xDC\u0118\u021A\xDF\xE0\xE1\xE2\u0103\xE4\u0107\xE6\xE7\xE8\xE9\xEA\xEB\xEC\xED\xEE\xEF\u0111\u0144\xF2\xF3\xF4\u0151\xF6\u015B\u0171\xF9\xFA\xFB\xFC\u0119\u021B\xFF"
},
"cp28606": "iso885916",
"cp437": {
"type": "_sbcs",
"chars": "\xC7\xFC\xE9\xE2\xE4\xE0\xE5\xE7\xEA\xEB\xE8\xEF\xEE\xEC\xC4\xC5\xC9\xE6\xC6\xF4\xF6\xF2\xFB\xF9\xFF\xD6\xDC\xA2\xA3\xA5\u20A7\u0192\xE1\xED\xF3\xFA\xF1\xD1\xAA\xBA\xBF\u2310\xAC\xBD\xBC\xA1\xAB\xBB\u2591\u2592\u2593\u2502\u2524\u2561\u2562\u2556\u2555\u2563\u2551\u2557\u255D\u255C\u255B\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u255E\u255F\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u2567\u2568\u2564\u2565\u2559\u2558\u2552\u2553\u256B\u256A\u2518\u250C\u2588\u2584\u258C\u2590\u2580\u03B1\xDF\u0393\u03C0\u03A3\u03C3\xB5\u03C4\u03A6\u0398\u03A9\u03B4\u221E\u03C6\u03B5\u2229\u2261\xB1\u2265\u2264\u2320\u2321\xF7\u2248\xB0\u2219\xB7\u221A\u207F\xB2\u25A0\xA0"
},
"ibm437": "cp437",
"csibm437": "cp437",
"cp737": {
"type": "_sbcs",
"chars": "\u0391\u0392\u0393\u0394\u0395\u0396\u0397\u0398\u0399\u039A\u039B\u039C\u039D\u039E\u039F\u03A0\u03A1\u03A3\u03A4\u03A5\u03A6\u03A7\u03A8\u03A9\u03B1\u03B2\u03B3\u03B4\u03B5\u03B6\u03B7\u03B8\u03B9\u03BA\u03BB\u03BC\u03BD\u03BE\u03BF\u03C0\u03C1\u03C3\u03C2\u03C4\u03C5\u03C6\u03C7\u03C8\u2591\u2592\u2593\u2502\u2524\u2561\u2562\u2556\u2555\u2563\u2551\u2557\u255D\u255C\u255B\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u255E\u255F\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u2567\u2568\u2564\u2565\u2559\u2558\u2552\u2553\u256B\u256A\u2518\u250C\u2588\u2584\u258C\u2590\u2580\u03C9\u03AC\u03AD\u03AE\u03CA\u03AF\u03CC\u03CD\u03CB\u03CE\u0386\u0388\u0389\u038A\u038C\u038E\u038F\xB1\u2265\u2264\u03AA\u03AB\xF7\u2248\xB0\u2219\xB7\u221A\u207F\xB2\u25A0\xA0"
},
"ibm737": "cp737",
"csibm737": "cp737",
"cp775": {
"type": "_sbcs",
"chars": "\u0106\xFC\xE9\u0101\xE4\u0123\xE5\u0107\u0142\u0113\u0156\u0157\u012B\u0179\xC4\xC5\xC9\xE6\xC6\u014D\xF6\u0122\xA2\u015A\u015B\xD6\xDC\xF8\xA3\xD8\xD7\xA4\u0100\u012A\xF3\u017B\u017C\u017A\u201D\xA6\xA9\xAE\xAC\xBD\xBC\u0141\xAB\xBB\u2591\u2592\u2593\u2502\u2524\u0104\u010C\u0118\u0116\u2563\u2551\u2557\u255D\u012E\u0160\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u0172\u016A\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u017D\u0105\u010D\u0119\u0117\u012F\u0161\u0173\u016B\u017E\u2518\u250C\u2588\u2584\u258C\u2590\u2580\xD3\xDF\u014C\u0143\xF5\xD5\xB5\u0144\u0136\u0137\u013B\u013C\u0146\u0112\u0145\u2019\xAD\xB1\u201C\xBE\xB6\xA7\xF7\u201E\xB0\u2219\xB7\xB9\xB3\xB2\u25A0\xA0"
},
"ibm775": "cp775",
"csibm775": "cp775",
"cp850": {
"type": "_sbcs",
"chars": "\xC7\xFC\xE9\xE2\xE4\xE0\xE5\xE7\xEA\xEB\xE8\xEF\xEE\xEC\xC4\xC5\xC9\xE6\xC6\xF4\xF6\xF2\xFB\xF9\xFF\xD6\xDC\xF8\xA3\xD8\xD7\u0192\xE1\xED\xF3\xFA\xF1\xD1\xAA\xBA\xBF\xAE\xAC\xBD\xBC\xA1\xAB\xBB\u2591\u2592\u2593\u2502\u2524\xC1\xC2\xC0\xA9\u2563\u2551\u2557\u255D\xA2\xA5\u2510\u2514\u2534\u252C\u251C\u2500\u253C\xE3\xC3\u255A\u2554\u2569\u2566\u2560\u2550\u256C\xA4\xF0\xD0\xCA\xCB\xC8\u0131\xCD\xCE\xCF\u2518\u250C\u2588\u2584\xA6\xCC\u2580\xD3\xDF\xD4\xD2\xF5\xD5\xB5\xFE\xDE\xDA\xDB\xD9\xFD\xDD\xAF\xB4\xAD\xB1\u2017\xBE\xB6\xA7\xF7\xB8\xB0\xA8\xB7\xB9\xB3\xB2\u25A0\xA0"
},
"ibm850": "cp850",
"csibm850": "cp850",
"cp852": {
"type": "_sbcs",
"chars": "\xC7\xFC\xE9\xE2\xE4\u016F\u0107\xE7\u0142\xEB\u0150\u0151\xEE\u0179\xC4\u0106\xC9\u0139\u013A\xF4\xF6\u013D\u013E\u015A\u015B\xD6\xDC\u0164\u0165\u0141\xD7\u010D\xE1\xED\xF3\xFA\u0104\u0105\u017D\u017E\u0118\u0119\xAC\u017A\u010C\u015F\xAB\xBB\u2591\u2592\u2593\u2502\u2524\xC1\xC2\u011A\u015E\u2563\u2551\u2557\u255D\u017B\u017C\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u0102\u0103\u255A\u2554\u2569\u2566\u2560\u2550\u256C\xA4\u0111\u0110\u010E\xCB\u010F\u0147\xCD\xCE\u011B\u2518\u250C\u2588\u2584\u0162\u016E\u2580\xD3\xDF\xD4\u0143\u0144\u0148\u0160\u0161\u0154\xDA\u0155\u0170\xFD\xDD\u0163\xB4\xAD\u02DD\u02DB\u02C7\u02D8\xA7\xF7\xB8\xB0\xA8\u02D9\u0171\u0158\u0159\u25A0\xA0"
},
"ibm852": "cp852",
"csibm852": "cp852",
"cp855": {
"type": "_sbcs",
"chars": "\u0452\u0402\u0453\u0403\u0451\u0401\u0454\u0404\u0455\u0405\u0456\u0406\u0457\u0407\u0458\u0408\u0459\u0409\u045A\u040A\u045B\u040B\u045C\u040C\u045E\u040E\u045F\u040F\u044E\u042E\u044A\u042A\u0430\u0410\u0431\u0411\u0446\u0426\u0434\u0414\u0435\u0415\u0444\u0424\u0433\u0413\xAB\xBB\u2591\u2592\u2593\u2502\u2524\u0445\u0425\u0438\u0418\u2563\u2551\u2557\u255D\u0439\u0419\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u043A\u041A\u255A\u2554\u2569\u2566\u2560\u2550\u256C\xA4\u043B\u041B\u043C\u041C\u043D\u041D\u043E\u041E\u043F\u2518\u250C\u2588\u2584\u041F\u044F\u2580\u042F\u0440\u0420\u0441\u0421\u0442\u0422\u0443\u0423\u0436\u0416\u0432\u0412\u044C\u042C\u2116\xAD\u044B\u042B\u0437\u0417\u0448\u0428\u044D\u042D\u0449\u0429\u0447\u0427\xA7\u25A0\xA0"
},
"ibm855": "cp855",
"csibm855": "cp855",
"cp856": {
"type": "_sbcs",
"chars": "\u05D0\u05D1\u05D2\u05D3\u05D4\u05D5\u05D6\u05D7\u05D8\u05D9\u05DA\u05DB\u05DC\u05DD\u05DE\u05DF\u05E0\u05E1\u05E2\u05E3\u05E4\u05E5\u05E6\u05E7\u05E8\u05E9\u05EA\uFFFD\xA3\uFFFD\xD7\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\xAE\xAC\xBD\xBC\uFFFD\xAB\xBB\u2591\u2592\u2593\u2502\u2524\uFFFD\uFFFD\uFFFD\xA9\u2563\u2551\u2557\u255D\xA2\xA5\u2510\u2514\u2534\u252C\u251C\u2500\u253C\uFFFD\uFFFD\u255A\u2554\u2569\u2566\u2560\u2550\u256C\xA4\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u2518\u250C\u2588\u2584\xA6\uFFFD\u2580\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\xB5\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\xAF\xB4\xAD\xB1\u2017\xBE\xB6\xA7\xF7\xB8\xB0\xA8\xB7\xB9\xB3\xB2\u25A0\xA0"
},
"ibm856": "cp856",
"csibm856": "cp856",
"cp857": {
"type": "_sbcs",
"chars": "\xC7\xFC\xE9\xE2\xE4\xE0\xE5\xE7\xEA\xEB\xE8\xEF\xEE\u0131\xC4\xC5\xC9\xE6\xC6\xF4\xF6\xF2\xFB\xF9\u0130\xD6\xDC\xF8\xA3\xD8\u015E\u015F\xE1\xED\xF3\xFA\xF1\xD1\u011E\u011F\xBF\xAE\xAC\xBD\xBC\xA1\xAB\xBB\u2591\u2592\u2593\u2502\u2524\xC1\xC2\xC0\xA9\u2563\u2551\u2557\u255D\xA2\xA5\u2510\u2514\u2534\u252C\u251C\u2500\u253C\xE3\xC3\u255A\u2554\u2569\u2566\u2560\u2550\u256C\xA4\xBA\xAA\xCA\xCB\xC8\uFFFD\xCD\xCE\xCF\u2518\u250C\u2588\u2584\xA6\xCC\u2580\xD3\xDF\xD4\xD2\xF5\xD5\xB5\uFFFD\xD7\xDA\xDB\xD9\xEC\xFF\xAF\xB4\xAD\xB1\uFFFD\xBE\xB6\xA7\xF7\xB8\xB0\xA8\xB7\xB9\xB3\xB2\u25A0\xA0"
},
"ibm857": "cp857",
"csibm857": "cp857",
"cp858": {
"type": "_sbcs",
"chars": "\xC7\xFC\xE9\xE2\xE4\xE0\xE5\xE7\xEA\xEB\xE8\xEF\xEE\xEC\xC4\xC5\xC9\xE6\xC6\xF4\xF6\xF2\xFB\xF9\xFF\xD6\xDC\xF8\xA3\xD8\xD7\u0192\xE1\xED\xF3\xFA\xF1\xD1\xAA\xBA\xBF\xAE\xAC\xBD\xBC\xA1\xAB\xBB\u2591\u2592\u2593\u2502\u2524\xC1\xC2\xC0\xA9\u2563\u2551\u2557\u255D\xA2\xA5\u2510\u2514\u2534\u252C\u251C\u2500\u253C\xE3\xC3\u255A\u2554\u2569\u2566\u2560\u2550\u256C\xA4\xF0\xD0\xCA\xCB\xC8\u20AC\xCD\xCE\xCF\u2518\u250C\u2588\u2584\xA6\xCC\u2580\xD3\xDF\xD4\xD2\xF5\xD5\xB5\xFE\xDE\xDA\xDB\xD9\xFD\xDD\xAF\xB4\xAD\xB1\u2017\xBE\xB6\xA7\xF7\xB8\xB0\xA8\xB7\xB9\xB3\xB2\u25A0\xA0"
},
"ibm858": "cp858",
"csibm858": "cp858",
"cp860": {
"type": "_sbcs",
"chars": "\xC7\xFC\xE9\xE2\xE3\xE0\xC1\xE7\xEA\xCA\xE8\xCD\xD4\xEC\xC3\xC2\xC9\xC0\xC8\xF4\xF5\xF2\xDA\xF9\xCC\xD5\xDC\xA2\xA3\xD9\u20A7\xD3\xE1\xED\xF3\xFA\xF1\xD1\xAA\xBA\xBF\xD2\xAC\xBD\xBC\xA1\xAB\xBB\u2591\u2592\u2593\u2502\u2524\u2561\u2562\u2556\u2555\u2563\u2551\u2557\u255D\u255C\u255B\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u255E\u255F\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u2567\u2568\u2564\u2565\u2559\u2558\u2552\u2553\u256B\u256A\u2518\u250C\u2588\u2584\u258C\u2590\u2580\u03B1\xDF\u0393\u03C0\u03A3\u03C3\xB5\u03C4\u03A6\u0398\u03A9\u03B4\u221E\u03C6\u03B5\u2229\u2261\xB1\u2265\u2264\u2320\u2321\xF7\u2248\xB0\u2219\xB7\u221A\u207F\xB2\u25A0\xA0"
},
"ibm860": "cp860",
"csibm860": "cp860",
"cp861": {
"type": "_sbcs",
"chars": "\xC7\xFC\xE9\xE2\xE4\xE0\xE5\xE7\xEA\xEB\xE8\xD0\xF0\xDE\xC4\xC5\xC9\xE6\xC6\xF4\xF6\xFE\xFB\xDD\xFD\xD6\xDC\xF8\xA3\xD8\u20A7\u0192\xE1\xED\xF3\xFA\xC1\xCD\xD3\xDA\xBF\u2310\xAC\xBD\xBC\xA1\xAB\xBB\u2591\u2592\u2593\u2502\u2524\u2561\u2562\u2556\u2555\u2563\u2551\u2557\u255D\u255C\u255B\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u255E\u255F\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u2567\u2568\u2564\u2565\u2559\u2558\u2552\u2553\u256B\u256A\u2518\u250C\u2588\u2584\u258C\u2590\u2580\u03B1\xDF\u0393\u03C0\u03A3\u03C3\xB5\u03C4\u03A6\u0398\u03A9\u03B4\u221E\u03C6\u03B5\u2229\u2261\xB1\u2265\u2264\u2320\u2321\xF7\u2248\xB0\u2219\xB7\u221A\u207F\xB2\u25A0\xA0"
},
"ibm861": "cp861",
"csibm861": "cp861",
"cp862": {
"type": "_sbcs",
"chars": "\u05D0\u05D1\u05D2\u05D3\u05D4\u05D5\u05D6\u05D7\u05D8\u05D9\u05DA\u05DB\u05DC\u05DD\u05DE\u05DF\u05E0\u05E1\u05E2\u05E3\u05E4\u05E5\u05E6\u05E7\u05E8\u05E9\u05EA\xA2\xA3\xA5\u20A7\u0192\xE1\xED\xF3\xFA\xF1\xD1\xAA\xBA\xBF\u2310\xAC\xBD\xBC\xA1\xAB\xBB\u2591\u2592\u2593\u2502\u2524\u2561\u2562\u2556\u2555\u2563\u2551\u2557\u255D\u255C\u255B\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u255E\u255F\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u2567\u2568\u2564\u2565\u2559\u2558\u2552\u2553\u256B\u256A\u2518\u250C\u2588\u2584\u258C\u2590\u2580\u03B1\xDF\u0393\u03C0\u03A3\u03C3\xB5\u03C4\u03A6\u0398\u03A9\u03B4\u221E\u03C6\u03B5\u2229\u2261\xB1\u2265\u2264\u2320\u2321\xF7\u2248\xB0\u2219\xB7\u221A\u207F\xB2\u25A0\xA0"
},
"ibm862": "cp862",
"csibm862": "cp862",
"cp863": {
"type": "_sbcs",
"chars": "\xC7\xFC\xE9\xE2\xC2\xE0\xB6\xE7\xEA\xEB\xE8\xEF\xEE\u2017\xC0\xA7\xC9\xC8\xCA\xF4\xCB\xCF\xFB\xF9\xA4\xD4\xDC\xA2\xA3\xD9\xDB\u0192\xA6\xB4\xF3\xFA\xA8\xB8\xB3\xAF\xCE\u2310\xAC\xBD\xBC\xBE\xAB\xBB\u2591\u2592\u2593\u2502\u2524\u2561\u2562\u2556\u2555\u2563\u2551\u2557\u255D\u255C\u255B\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u255E\u255F\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u2567\u2568\u2564\u2565\u2559\u2558\u2552\u2553\u256B\u256A\u2518\u250C\u2588\u2584\u258C\u2590\u2580\u03B1\xDF\u0393\u03C0\u03A3\u03C3\xB5\u03C4\u03A6\u0398\u03A9\u03B4\u221E\u03C6\u03B5\u2229\u2261\xB1\u2265\u2264\u2320\u2321\xF7\u2248\xB0\u2219\xB7\u221A\u207F\xB2\u25A0\xA0"
},
"ibm863": "cp863",
"csibm863": "cp863",
"cp864": {
"type": "_sbcs",
"chars": "\0\x07\b \n\v\f\r\x1B !\"#$\u066A&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\x7F\xB0\xB7\u2219\u221A\u2592\u2500\u2502\u253C\u2524\u252C\u251C\u2534\u2510\u250C\u2514\u2518\u03B2\u221E\u03C6\xB1\xBD\xBC\u2248\xAB\xBB\uFEF7\uFEF8\uFFFD\uFFFD\uFEFB\uFEFC\uFFFD\xA0\xAD\uFE82\xA3\xA4\uFE84\uFFFD\uFFFD\uFE8E\uFE8F\uFE95\uFE99\u060C\uFE9D\uFEA1\uFEA5\u0660\u0661\u0662\u0663\u0664\u0665\u0666\u0667\u0668\u0669\uFED1\u061B\uFEB1\uFEB5\uFEB9\u061F\xA2\uFE80\uFE81\uFE83\uFE85\uFECA\uFE8B\uFE8D\uFE91\uFE93\uFE97\uFE9B\uFE9F\uFEA3\uFEA7\uFEA9\uFEAB\uFEAD\uFEAF\uFEB3\uFEB7\uFEBB\uFEBF\uFEC1\uFEC5\uFECB\uFECF\xA6\xAC\xF7\xD7\uFEC9\u0640\uFED3\uFED7\uFEDB\uFEDF\uFEE3\uFEE7\uFEEB\uFEED\uFEEF\uFEF3\uFEBD\uFECC\uFECE\uFECD\uFEE1\uFE7D\u0651\uFEE5\uFEE9\uFEEC\uFEF0\uFEF2\uFED0\uFED5\uFEF5\uFEF6\uFEDD\uFED9\uFEF1\u25A0\uFFFD"
},
"ibm864": "cp864",
"csibm864": "cp864",
"cp865": {
"type": "_sbcs",
"chars": "\xC7\xFC\xE9\xE2\xE4\xE0\xE5\xE7\xEA\xEB\xE8\xEF\xEE\xEC\xC4\xC5\xC9\xE6\xC6\xF4\xF6\xF2\xFB\xF9\xFF\xD6\xDC\xF8\xA3\xD8\u20A7\u0192\xE1\xED\xF3\xFA\xF1\xD1\xAA\xBA\xBF\u2310\xAC\xBD\xBC\xA1\xAB\xA4\u2591\u2592\u2593\u2502\u2524\u2561\u2562\u2556\u2555\u2563\u2551\u2557\u255D\u255C\u255B\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u255E\u255F\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u2567\u2568\u2564\u2565\u2559\u2558\u2552\u2553\u256B\u256A\u2518\u250C\u2588\u2584\u258C\u2590\u2580\u03B1\xDF\u0393\u03C0\u03A3\u03C3\xB5\u03C4\u03A6\u0398\u03A9\u03B4\u221E\u03C6\u03B5\u2229\u2261\xB1\u2265\u2264\u2320\u2321\xF7\u2248\xB0\u2219\xB7\u221A\u207F\xB2\u25A0\xA0"
},
"ibm865": "cp865",
"csibm865": "cp865",
"cp866": {
"type": "_sbcs",
"chars": "\u0410\u0411\u0412\u0413\u0414\u0415\u0416\u0417\u0418\u0419\u041A\u041B\u041C\u041D\u041E\u041F\u0420\u0421\u0422\u0423\u0424\u0425\u0426\u0427\u0428\u0429\u042A\u042B\u042C\u042D\u042E\u042F\u0430\u0431\u0432\u0433\u0434\u0435\u0436\u0437\u0438\u0439\u043A\u043B\u043C\u043D\u043E\u043F\u2591\u2592\u2593\u2502\u2524\u2561\u2562\u2556\u2555\u2563\u2551\u2557\u255D\u255C\u255B\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u255E\u255F\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u2567\u2568\u2564\u2565\u2559\u2558\u2552\u2553\u256B\u256A\u2518\u250C\u2588\u2584\u258C\u2590\u2580\u0440\u0441\u0442\u0443\u0444\u0445\u0446\u0447\u0448\u0449\u044A\u044B\u044C\u044D\u044E\u044F\u0401\u0451\u0404\u0454\u0407\u0457\u040E\u045E\xB0\u2219\xB7\u221A\u2116\xA4\u25A0\xA0"
},
"ibm866": "cp866",
"csibm866": "cp866",
"cp869": {
"type": "_sbcs",
"chars": "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u0386\uFFFD\xB7\xAC\xA6\u2018\u2019\u0388\u2015\u0389\u038A\u03AA\u038C\uFFFD\uFFFD\u038E\u03AB\xA9\u038F\xB2\xB3\u03AC\xA3\u03AD\u03AE\u03AF\u03CA\u0390\u03CC\u03CD\u0391\u0392\u0393\u0394\u0395\u0396\u0397\xBD\u0398\u0399\xAB\xBB\u2591\u2592\u2593\u2502\u2524\u039A\u039B\u039C\u039D\u2563\u2551\u2557\u255D\u039E\u039F\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u03A0\u03A1\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u03A3\u03A4\u03A5\u03A6\u03A7\u03A8\u03A9\u03B1\u03B2\u03B3\u2518\u250C\u2588\u2584\u03B4\u03B5\u2580\u03B6\u03B7\u03B8\u03B9\u03BA\u03BB\u03BC\u03BD\u03BE\u03BF\u03C0\u03C1\u03C3\u03C2\u03C4\u0384\xAD\xB1\u03C5\u03C6\u03C7\xA7\u03C8\u0385\xB0\xA8\u03C9\u03CB\u03B0\u03CE\u25A0\xA0"
},
"ibm869": "cp869",
"csibm869": "cp869",
"cp922": {
"type": "_sbcs",
"chars": "\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8A\x8B\x8C\x8D\x8E\x8F\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9A\x9B\x9C\x9D\x9E\x9F\xA0\xA1\xA2\xA3\xA4\xA5\xA6\xA7\xA8\xA9\xAA\xAB\xAC\xAD\xAE\u203E\xB0\xB1\xB2\xB3\xB4\xB5\xB6\xB7\xB8\xB9\xBA\xBB\xBC\xBD\xBE\xBF\xC0\xC1\xC2\xC3\xC4\xC5\xC6\xC7\xC8\xC9\xCA\xCB\xCC\xCD\xCE\xCF\u0160\xD1\xD2\xD3\xD4\xD5\xD6\xD7\xD8\xD9\xDA\xDB\xDC\xDD\u017D\xDF\xE0\xE1\xE2\xE3\xE4\xE5\xE6\xE7\xE8\xE9\xEA\xEB\xEC\xED\xEE\xEF\u0161\xF1\xF2\xF3\xF4\xF5\xF6\xF7\xF8\xF9\xFA\xFB\xFC\xFD\u017E\xFF"
},
"ibm922": "cp922",
"csibm922": "cp922",
"cp1046": {
"type": "_sbcs",
"chars": "\uFE88\xD7\xF7\uF8F6\uF8F5\uF8F4\uF8F7\uFE71\x88\u25A0\u2502\u2500\u2510\u250C\u2514\u2518\uFE79\uFE7B\uFE7D\uFE7F\uFE77\uFE8A\uFEF0\uFEF3\uFEF2\uFECE\uFECF\uFED0\uFEF6\uFEF8\uFEFA\uFEFC\xA0\uF8FA\uF8F9\uF8F8\xA4\uF8FB\uFE8B\uFE91\uFE97\uFE9B\uFE9F\uFEA3\u060C\xAD\uFEA7\uFEB3\u0660\u0661\u0662\u0663\u0664\u0665\u0666\u0667\u0668\u0669\uFEB7\u061B\uFEBB\uFEBF\uFECA\u061F\uFECB\u0621\u0622\u0623\u0624\u0625\u0626\u0627\u0628\u0629\u062A\u062B\u062C\u062D\u062E\u062F\u0630\u0631\u0632\u0633\u0634\u0635\u0636\u0637\uFEC7\u0639\u063A\uFECC\uFE82\uFE84\uFE8E\uFED3\u0640\u0641\u0642\u0643\u0644\u0645\u0646\u0647\u0648\u0649\u064A\u064B\u064C\u064D\u064E\u064F\u0650\u0651\u0652\uFED7\uFEDB\uFEDF\uF8FC\uFEF5\uFEF7\uFEF9\uFEFB\uFEE3\uFEE7\uFEEC\uFEE9\uFFFD"
},
"ibm1046": "cp1046",
"csibm1046": "cp1046",
"cp1124": {
"type": "_sbcs",
"chars": "\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8A\x8B\x8C\x8D\x8E\x8F\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9A\x9B\x9C\x9D\x9E\x9F\xA0\u0401\u0402\u0490\u0404\u0405\u0406\u0407\u0408\u0409\u040A\u040B\u040C\xAD\u040E\u040F\u0410\u0411\u0412\u0413\u0414\u0415\u0416\u0417\u0418\u0419\u041A\u041B\u041C\u041D\u041E\u041F\u0420\u0421\u0422\u0423\u0424\u0425\u0426\u0427\u0428\u0429\u042A\u042B\u042C\u042D\u042E\u042F\u0430\u0431\u0432\u0433\u0434\u0435\u0436\u0437\u0438\u0439\u043A\u043B\u043C\u043D\u043E\u043F\u0440\u0441\u0442\u0443\u0444\u0445\u0446\u0447\u0448\u0449\u044A\u044B\u044C\u044D\u044E\u044F\u2116\u0451\u0452\u0491\u0454\u0455\u0456\u0457\u0458\u0459\u045A\u045B\u045C\xA7\u045E\u045F"
},
"ibm1124": "cp1124",
"csibm1124": "cp1124",
"cp1125": {
"type": "_sbcs",
"chars": "\u0410\u0411\u0412\u0413\u0414\u0415\u0416\u0417\u0418\u0419\u041A\u041B\u041C\u041D\u041E\u041F\u0420\u0421\u0422\u0423\u0424\u0425\u0426\u0427\u0428\u0429\u042A\u042B\u042C\u042D\u042E\u042F\u0430\u0431\u0432\u0433\u0434\u0435\u0436\u0437\u0438\u0439\u043A\u043B\u043C\u043D\u043E\u043F\u2591\u2592\u2593\u2502\u2524\u2561\u2562\u2556\u2555\u2563\u2551\u2557\u255D\u255C\u255B\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u255E\u255F\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u2567\u2568\u2564\u2565\u2559\u2558\u2552\u2553\u256B\u256A\u2518\u250C\u2588\u2584\u258C\u2590\u2580\u0440\u0441\u0442\u0443\u0444\u0445\u0446\u0447\u0448\u0449\u044A\u044B\u044C\u044D\u044E\u044F\u0401\u0451\u0490\u0491\u0404\u0454\u0406\u0456\u0407\u0457\xB7\u221A\u2116\xA4\u25A0\xA0"
},
"ibm1125": "cp1125",
"csibm1125": "cp1125",
"cp1129": {
"type": "_sbcs",
"chars": "\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8A\x8B\x8C\x8D\x8E\x8F\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9A\x9B\x9C\x9D\x9E\x9F\xA0\xA1\xA2\xA3\xA4\xA5\xA6\xA7\u0153\xA9\xAA\xAB\xAC\xAD\xAE\xAF\xB0\xB1\xB2\xB3\u0178\xB5\xB6\xB7\u0152\xB9\xBA\xBB\xBC\xBD\xBE\xBF\xC0\xC1\xC2\u0102\xC4\xC5\xC6\xC7\xC8\xC9\xCA\xCB\u0300\xCD\xCE\xCF\u0110\xD1\u0309\xD3\xD4\u01A0\xD6\xD7\xD8\xD9\xDA\xDB\xDC\u01AF\u0303\xDF\xE0\xE1\xE2\u0103\xE4\xE5\xE6\xE7\xE8\xE9\xEA\xEB\u0301\xED\xEE\xEF\u0111\xF1\u0323\xF3\xF4\u01A1\xF6\xF7\xF8\xF9\xFA\xFB\xFC\u01B0\u20AB\xFF"
},
"ibm1129": "cp1129",
"csibm1129": "cp1129",
"cp1133": {
"type": "_sbcs",
"chars": "\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8A\x8B\x8C\x8D\x8E\x8F\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9A\x9B\x9C\x9D\x9E\x9F\xA0\u0E81\u0E82\u0E84\u0E87\u0E88\u0EAA\u0E8A\u0E8D\u0E94\u0E95\u0E96\u0E97\u0E99\u0E9A\u0E9B\u0E9C\u0E9D\u0E9E\u0E9F\u0EA1\u0EA2\u0EA3\u0EA5\u0EA7\u0EAB\u0EAD\u0EAE\uFFFD\uFFFD\uFFFD\u0EAF\u0EB0\u0EB2\u0EB3\u0EB4\u0EB5\u0EB6\u0EB7\u0EB8\u0EB9\u0EBC\u0EB1\u0EBB\u0EBD\uFFFD\uFFFD\uFFFD\u0EC0\u0EC1\u0EC2\u0EC3\u0EC4\u0EC8\u0EC9\u0ECA\u0ECB\u0ECC\u0ECD\u0EC6\uFFFD\u0EDC\u0EDD\u20AD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u0ED0\u0ED1\u0ED2\u0ED3\u0ED4\u0ED5\u0ED6\u0ED7\u0ED8\u0ED9\uFFFD\uFFFD\xA2\xAC\xA6\uFFFD"
},
"ibm1133": "cp1133",
"csibm1133": "cp1133",
"cp1161": {
"type": "_sbcs",
"chars": "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u0E48\u0E01\u0E02\u0E03\u0E04\u0E05\u0E06\u0E07\u0E08\u0E09\u0E0A\u0E0B\u0E0C\u0E0D\u0E0E\u0E0F\u0E10\u0E11\u0E12\u0E13\u0E14\u0E15\u0E16\u0E17\u0E18\u0E19\u0E1A\u0E1B\u0E1C\u0E1D\u0E1E\u0E1F\u0E20\u0E21\u0E22\u0E23\u0E24\u0E25\u0E26\u0E27\u0E28\u0E29\u0E2A\u0E2B\u0E2C\u0E2D\u0E2E\u0E2F\u0E30\u0E31\u0E32\u0E33\u0E34\u0E35\u0E36\u0E37\u0E38\u0E39\u0E3A\u0E49\u0E4A\u0E4B\u20AC\u0E3F\u0E40\u0E41\u0E42\u0E43\u0E44\u0E45\u0E46\u0E47\u0E48\u0E49\u0E4A\u0E4B\u0E4C\u0E4D\u0E4E\u0E4F\u0E50\u0E51\u0E52\u0E53\u0E54\u0E55\u0E56\u0E57\u0E58\u0E59\u0E5A\u0E5B\xA2\xAC\xA6\xA0"
},
"ibm1161": "cp1161",
"csibm1161": "cp1161",
"cp1162": {
"type": "_sbcs",
"chars": "\u20AC\x81\x82\x83\x84\u2026\x86\x87\x88\x89\x8A\x8B\x8C\x8D\x8E\x8F\x90\u2018\u2019\u201C\u201D\u2022\u2013\u2014\x98\x99\x9A\x9B\x9C\x9D\x9E\x9F\xA0\u0E01\u0E02\u0E03\u0E04\u0E05\u0E06\u0E07\u0E08\u0E09\u0E0A\u0E0B\u0E0C\u0E0D\u0E0E\u0E0F\u0E10\u0E11\u0E12\u0E13\u0E14\u0E15\u0E16\u0E17\u0E18\u0E19\u0E1A\u0E1B\u0E1C\u0E1D\u0E1E\u0E1F\u0E20\u0E21\u0E22\u0E23\u0E24\u0E25\u0E26\u0E27\u0E28\u0E29\u0E2A\u0E2B\u0E2C\u0E2D\u0E2E\u0E2F\u0E30\u0E31\u0E32\u0E33\u0E34\u0E35\u0E36\u0E37\u0E38\u0E39\u0E3A\uFFFD\uFFFD\uFFFD\uFFFD\u0E3F\u0E40\u0E41\u0E42\u0E43\u0E44\u0E45\u0E46\u0E47\u0E48\u0E49\u0E4A\u0E4B\u0E4C\u0E4D\u0E4E\u0E4F\u0E50\u0E51\u0E52\u0E53\u0E54\u0E55\u0E56\u0E57\u0E58\u0E59\u0E5A\u0E5B\uFFFD\uFFFD\uFFFD\uFFFD"
},
"ibm1162": "cp1162",
"csibm1162": "cp1162",
"cp1163": {
"type": "_sbcs",
"chars": "\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8A\x8B\x8C\x8D\x8E\x8F\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9A\x9B\x9C\x9D\x9E\x9F\xA0\xA1\xA2\xA3\u20AC\xA5\xA6\xA7\u0153\xA9\xAA\xAB\xAC\xAD\xAE\xAF\xB0\xB1\xB2\xB3\u0178\xB5\xB6\xB7\u0152\xB9\xBA\xBB\xBC\xBD\xBE\xBF\xC0\xC1\xC2\u0102\xC4\xC5\xC6\xC7\xC8\xC9\xCA\xCB\u0300\xCD\xCE\xCF\u0110\xD1\u0309\xD3\xD4\u01A0\xD6\xD7\xD8\xD9\xDA\xDB\xDC\u01AF\u0303\xDF\xE0\xE1\xE2\u0103\xE4\xE5\xE6\xE7\xE8\xE9\xEA\xEB\u0301\xED\xEE\xEF\u0111\xF1\u0323\xF3\xF4\u01A1\xF6\xF7\xF8\xF9\xFA\xFB\xFC\u01B0\u20AB\xFF"
},
"ibm1163": "cp1163",
"csibm1163": "cp1163",
"maccroatian": {
"type": "_sbcs",
"chars": "\xC4\xC5\xC7\xC9\xD1\xD6\xDC\xE1\xE0\xE2\xE4\xE3\xE5\xE7\xE9\xE8\xEA\xEB\xED\xEC\xEE\xEF\xF1\xF3\xF2\xF4\xF6\xF5\xFA\xF9\xFB\xFC\u2020\xB0\xA2\xA3\xA7\u2022\xB6\xDF\xAE\u0160\u2122\xB4\xA8\u2260\u017D\xD8\u221E\xB1\u2264\u2265\u2206\xB5\u2202\u2211\u220F\u0161\u222B\xAA\xBA\u2126\u017E\xF8\xBF\xA1\xAC\u221A\u0192\u2248\u0106\xAB\u010C\u2026\xA0\xC0\xC3\xD5\u0152\u0153\u0110\u2014\u201C\u201D\u2018\u2019\xF7\u25CA\uFFFD\xA9\u2044\xA4\u2039\u203A\xC6\xBB\u2013\xB7\u201A\u201E\u2030\xC2\u0107\xC1\u010D\xC8\xCD\xCE\xCF\xCC\xD3\xD4\u0111\xD2\xDA\xDB\xD9\u0131\u02C6\u02DC\xAF\u03C0\xCB\u02DA\xB8\xCA\xE6\u02C7"
},
"maccyrillic": {
"type": "_sbcs",
"chars": "\u0410\u0411\u0412\u0413\u0414\u0415\u0416\u0417\u0418\u0419\u041A\u041B\u041C\u041D\u041E\u041F\u0420\u0421\u0422\u0423\u0424\u0425\u0426\u0427\u0428\u0429\u042A\u042B\u042C\u042D\u042E\u042F\u2020\xB0\xA2\xA3\xA7\u2022\xB6\u0406\xAE\xA9\u2122\u0402\u0452\u2260\u0403\u0453\u221E\xB1\u2264\u2265\u0456\xB5\u2202\u0408\u0404\u0454\u0407\u0457\u0409\u0459\u040A\u045A\u0458\u0405\xAC\u221A\u0192\u2248\u2206\xAB\xBB\u2026\xA0\u040B\u045B\u040C\u045C\u0455\u2013\u2014\u201C\u201D\u2018\u2019\xF7\u201E\u040E\u045E\u040F\u045F\u2116\u0401\u0451\u044F\u0430\u0431\u0432\u0433\u0434\u0435\u0436\u0437\u0438\u0439\u043A\u043B\u043C\u043D\u043E\u043F\u0440\u0441\u0442\u0443\u0444\u0445\u0446\u0447\u0448\u0449\u044A\u044B\u044C\u044D\u044E\xA4"
},
"macgreek": {
"type": "_sbcs",
"chars": "\xC4\xB9\xB2\xC9\xB3\xD6\xDC\u0385\xE0\xE2\xE4\u0384\xA8\xE7\xE9\xE8\xEA\xEB\xA3\u2122\xEE\xEF\u2022\xBD\u2030\xF4\xF6\xA6\xAD\xF9\xFB\xFC\u2020\u0393\u0394\u0398\u039B\u039E\u03A0\xDF\xAE\xA9\u03A3\u03AA\xA7\u2260\xB0\u0387\u0391\xB1\u2264\u2265\xA5\u0392\u0395\u0396\u0397\u0399\u039A\u039C\u03A6\u03AB\u03A8\u03A9\u03AC\u039D\xAC\u039F\u03A1\u2248\u03A4\xAB\xBB\u2026\xA0\u03A5\u03A7\u0386\u0388\u0153\u2013\u2015\u201C\u201D\u2018\u2019\xF7\u0389\u038A\u038C\u038E\u03AD\u03AE\u03AF\u03CC\u038F\u03CD\u03B1\u03B2\u03C8\u03B4\u03B5\u03C6\u03B3\u03B7\u03B9\u03BE\u03BA\u03BB\u03BC\u03BD\u03BF\u03C0\u03CE\u03C1\u03C3\u03C4\u03B8\u03C9\u03C2\u03C7\u03C5\u03B6\u03CA\u03CB\u0390\u03B0\uFFFD"
},
"maciceland": {
"type": "_sbcs",
"chars": "\xC4\xC5\xC7\xC9\xD1\xD6\xDC\xE1\xE0\xE2\xE4\xE3\xE5\xE7\xE9\xE8\xEA\xEB\xED\xEC\xEE\xEF\xF1\xF3\xF2\xF4\xF6\xF5\xFA\xF9\xFB\xFC\xDD\xB0\xA2\xA3\xA7\u2022\xB6\xDF\xAE\xA9\u2122\xB4\xA8\u2260\xC6\xD8\u221E\xB1\u2264\u2265\xA5\xB5\u2202\u2211\u220F\u03C0\u222B\xAA\xBA\u2126\xE6\xF8\xBF\xA1\xAC\u221A\u0192\u2248\u2206\xAB\xBB\u2026\xA0\xC0\xC3\xD5\u0152\u0153\u2013\u2014\u201C\u201D\u2018\u2019\xF7\u25CA\xFF\u0178\u2044\xA4\xD0\xF0\xDE\xFE\xFD\xB7\u201A\u201E\u2030\xC2\xCA\xC1\xCB\xC8\xCD\xCE\xCF\xCC\xD3\xD4\uFFFD\xD2\xDA\xDB\xD9\u0131\u02C6\u02DC\xAF\u02D8\u02D9\u02DA\xB8\u02DD\u02DB\u02C7"
},
"macroman": {
"type": "_sbcs",
"chars": "\xC4\xC5\xC7\xC9\xD1\xD6\xDC\xE1\xE0\xE2\xE4\xE3\xE5\xE7\xE9\xE8\xEA\xEB\xED\xEC\xEE\xEF\xF1\xF3\xF2\xF4\xF6\xF5\xFA\xF9\xFB\xFC\u2020\xB0\xA2\xA3\xA7\u2022\xB6\xDF\xAE\xA9\u2122\xB4\xA8\u2260\xC6\xD8\u221E\xB1\u2264\u2265\xA5\xB5\u2202\u2211\u220F\u03C0\u222B\xAA\xBA\u2126\xE6\xF8\xBF\xA1\xAC\u221A\u0192\u2248\u2206\xAB\xBB\u2026\xA0\xC0\xC3\xD5\u0152\u0153\u2013\u2014\u201C\u201D\u2018\u2019\xF7\u25CA\xFF\u0178\u2044\xA4\u2039\u203A\uFB01\uFB02\u2021\xB7\u201A\u201E\u2030\xC2\xCA\xC1\xCB\xC8\xCD\xCE\xCF\xCC\xD3\xD4\uFFFD\xD2\xDA\xDB\xD9\u0131\u02C6\u02DC\xAF\u02D8\u02D9\u02DA\xB8\u02DD\u02DB\u02C7"
},
"macromania": {
"type": "_sbcs",
"chars": "\xC4\xC5\xC7\xC9\xD1\xD6\xDC\xE1\xE0\xE2\xE4\xE3\xE5\xE7\xE9\xE8\xEA\xEB\xED\xEC\xEE\xEF\xF1\xF3\xF2\xF4\xF6\xF5\xFA\xF9\xFB\xFC\u2020\xB0\xA2\xA3\xA7\u2022\xB6\xDF\xAE\xA9\u2122\xB4\xA8\u2260\u0102\u015E\u221E\xB1\u2264\u2265\xA5\xB5\u2202\u2211\u220F\u03C0\u222B\xAA\xBA\u2126\u0103\u015F\xBF\xA1\xAC\u221A\u0192\u2248\u2206\xAB\xBB\u2026\xA0\xC0\xC3\xD5\u0152\u0153\u2013\u2014\u201C\u201D\u2018\u2019\xF7\u25CA\xFF\u0178\u2044\xA4\u2039\u203A\u0162\u0163\u2021\xB7\u201A\u201E\u2030\xC2\xCA\xC1\xCB\xC8\xCD\xCE\xCF\xCC\xD3\xD4\uFFFD\xD2\xDA\xDB\xD9\u0131\u02C6\u02DC\xAF\u02D8\u02D9\u02DA\xB8\u02DD\u02DB\u02C7"
},
"macthai": {
"type": "_sbcs",
"chars": "\xAB\xBB\u2026\uF88C\uF88F\uF892\uF895\uF898\uF88B\uF88E\uF891\uF894\uF897\u201C\u201D\uF899\uFFFD\u2022\uF884\uF889\uF885\uF886\uF887\uF888\uF88A\uF88D\uF890\uF893\uF896\u2018\u2019\uFFFD\xA0\u0E01\u0E02\u0E03\u0E04\u0E05\u0E06\u0E07\u0E08\u0E09\u0E0A\u0E0B\u0E0C\u0E0D\u0E0E\u0E0F\u0E10\u0E11\u0E12\u0E13\u0E14\u0E15\u0E16\u0E17\u0E18\u0E19\u0E1A\u0E1B\u0E1C\u0E1D\u0E1E\u0E1F\u0E20\u0E21\u0E22\u0E23\u0E24\u0E25\u0E26\u0E27\u0E28\u0E29\u0E2A\u0E2B\u0E2C\u0E2D\u0E2E\u0E2F\u0E30\u0E31\u0E32\u0E33\u0E34\u0E35\u0E36\u0E37\u0E38\u0E39\u0E3A\uFEFF\u200B\u2013\u2014\u0E3F\u0E40\u0E41\u0E42\u0E43\u0E44\u0E45\u0E46\u0E47\u0E48\u0E49\u0E4A\u0E4B\u0E4C\u0E4D\u2122\u0E4F\u0E50\u0E51\u0E52\u0E53\u0E54\u0E55\u0E56\u0E57\u0E58\u0E59\xAE\xA9\uFFFD\uFFFD\uFFFD\uFFFD"
},
"macturkish": {
"type": "_sbcs",
"chars": "\xC4\xC5\xC7\xC9\xD1\xD6\xDC\xE1\xE0\xE2\xE4\xE3\xE5\xE7\xE9\xE8\xEA\xEB\xED\xEC\xEE\xEF\xF1\xF3\xF2\xF4\xF6\xF5\xFA\xF9\xFB\xFC\u2020\xB0\xA2\xA3\xA7\u2022\xB6\xDF\xAE\xA9\u2122\xB4\xA8\u2260\xC6\xD8\u221E\xB1\u2264\u2265\xA5\xB5\u2202\u2211\u220F\u03C0\u222B\xAA\xBA\u2126\xE6\xF8\xBF\xA1\xAC\u221A\u0192\u2248\u2206\xAB\xBB\u2026\xA0\xC0\xC3\xD5\u0152\u0153\u2013\u2014\u201C\u201D\u2018\u2019\xF7\u25CA\xFF\u0178\u011E\u011F\u0130\u0131\u015E\u015F\u2021\xB7\u201A\u201E\u2030\xC2\xCA\xC1\xCB\xC8\xCD\xCE\xCF\xCC\xD3\xD4\uFFFD\xD2\xDA\xDB\xD9\uFFFD\u02C6\u02DC\xAF\u02D8\u02D9\u02DA\xB8\u02DD\u02DB\u02C7"
},
"macukraine": {
"type": "_sbcs",
"chars": "\u0410\u0411\u0412\u0413\u0414\u0415\u0416\u0417\u0418\u0419\u041A\u041B\u041C\u041D\u041E\u041F\u0420\u0421\u0422\u0423\u0424\u0425\u0426\u0427\u0428\u0429\u042A\u042B\u042C\u042D\u042E\u042F\u2020\xB0\u0490\xA3\xA7\u2022\xB6\u0406\xAE\xA9\u2122\u0402\u0452\u2260\u0403\u0453\u221E\xB1\u2264\u2265\u0456\xB5\u0491\u0408\u0404\u0454\u0407\u0457\u0409\u0459\u040A\u045A\u0458\u0405\xAC\u221A\u0192\u2248\u2206\xAB\xBB\u2026\xA0\u040B\u045B\u040C\u045C\u0455\u2013\u2014\u201C\u201D\u2018\u2019\xF7\u201E\u040E\u045E\u040F\u045F\u2116\u0401\u0451\u044F\u0430\u0431\u0432\u0433\u0434\u0435\u0436\u0437\u0438\u0439\u043A\u043B\u043C\u043D\u043E\u043F\u0440\u0441\u0442\u0443\u0444\u0445\u0446\u0447\u0448\u0449\u044A\u044B\u044C\u044D\u044E\xA4"
},
"koi8r": {
"type": "_sbcs",
"chars": "\u2500\u2502\u250C\u2510\u2514\u2518\u251C\u2524\u252C\u2534\u253C\u2580\u2584\u2588\u258C\u2590\u2591\u2592\u2593\u2320\u25A0\u2219\u221A\u2248\u2264\u2265\xA0\u2321\xB0\xB2\xB7\xF7\u2550\u2551\u2552\u0451\u2553\u2554\u2555\u2556\u2557\u2558\u2559\u255A\u255B\u255C\u255D\u255E\u255F\u2560\u2561\u0401\u2562\u2563\u2564\u2565\u2566\u2567\u2568\u2569\u256A\u256B\u256C\xA9\u044E\u0430\u0431\u0446\u0434\u0435\u0444\u0433\u0445\u0438\u0439\u043A\u043B\u043C\u043D\u043E\u043F\u044F\u0440\u0441\u0442\u0443\u0436\u0432\u044C\u044B\u0437\u0448\u044D\u0449\u0447\u044A\u042E\u0410\u0411\u0426\u0414\u0415\u0424\u0413\u0425\u0418\u0419\u041A\u041B\u041C\u041D\u041E\u041F\u042F\u0420\u0421\u0422\u0423\u0416\u0412\u042C\u042B\u0417\u0428\u042D\u0429\u0427\u042A"
},
"koi8u": {
"type": "_sbcs",
"chars": "\u2500\u2502\u250C\u2510\u2514\u2518\u251C\u2524\u252C\u2534\u253C\u2580\u2584\u2588\u258C\u2590\u2591\u2592\u2593\u2320\u25A0\u2219\u221A\u2248\u2264\u2265\xA0\u2321\xB0\xB2\xB7\xF7\u2550\u2551\u2552\u0451\u0454\u2554\u0456\u0457\u2557\u2558\u2559\u255A\u255B\u0491\u255D\u255E\u255F\u2560\u2561\u0401\u0404\u2563\u0406\u0407\u2566\u2567\u2568\u2569\u256A\u0490\u256C\xA9\u044E\u0430\u0431\u0446\u0434\u0435\u0444\u0433\u0445\u0438\u0439\u043A\u043B\u043C\u043D\u043E\u043F\u044F\u0440\u0441\u0442\u0443\u0436\u0432\u044C\u044B\u0437\u0448\u044D\u0449\u0447\u044A\u042E\u0410\u0411\u0426\u0414\u0415\u0424\u0413\u0425\u0418\u0419\u041A\u041B\u041C\u041D\u041E\u041F\u042F\u0420\u0421\u0422\u0423\u0416\u0412\u042C\u042B\u0417\u0428\u042D\u0429\u0427\u042A"
},
"koi8ru": {
"type": "_sbcs",
"chars": "\u2500\u2502\u250C\u2510\u2514\u2518\u251C\u2524\u252C\u2534\u253C\u2580\u2584\u2588\u258C\u2590\u2591\u2592\u2593\u2320\u25A0\u2219\u221A\u2248\u2264\u2265\xA0\u2321\xB0\xB2\xB7\xF7\u2550\u2551\u2552\u0451\u0454\u2554\u0456\u0457\u2557\u2558\u2559\u255A\u255B\u0491\u045E\u255E\u255F\u2560\u2561\u0401\u0404\u2563\u0406\u0407\u2566\u2567\u2568\u2569\u256A\u0490\u040E\xA9\u044E\u0430\u0431\u0446\u0434\u0435\u0444\u0433\u0445\u0438\u0439\u043A\u043B\u043C\u043D\u043E\u043F\u044F\u0440\u0441\u0442\u0443\u0436\u0432\u044C\u044B\u0437\u0448\u044D\u0449\u0447\u044A\u042E\u0410\u0411\u0426\u0414\u0415\u0424\u0413\u0425\u0418\u0419\u041A\u041B\u041C\u041D\u041E\u041F\u042F\u0420\u0421\u0422\u0423\u0416\u0412\u042C\u042B\u0417\u0428\u042D\u0429\u0427\u042A"
},
"koi8t": {
"type": "_sbcs",
"chars": "\u049B\u0493\u201A\u0492\u201E\u2026\u2020\u2021\uFFFD\u2030\u04B3\u2039\u04B2\u04B7\u04B6\uFFFD\u049A\u2018\u2019\u201C\u201D\u2022\u2013\u2014\uFFFD\u2122\uFFFD\u203A\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u04EF\u04EE\u0451\xA4\u04E3\xA6\xA7\uFFFD\uFFFD\uFFFD\xAB\xAC\xAD\xAE\uFFFD\xB0\xB1\xB2\u0401\uFFFD\u04E2\xB6\xB7\uFFFD\u2116\uFFFD\xBB\uFFFD\uFFFD\uFFFD\xA9\u044E\u0430\u0431\u0446\u0434\u0435\u0444\u0433\u0445\u0438\u0439\u043A\u043B\u043C\u043D\u043E\u043F\u044F\u0440\u0441\u0442\u0443\u0436\u0432\u044C\u044B\u0437\u0448\u044D\u0449\u0447\u044A\u042E\u0410\u0411\u0426\u0414\u0415\u0424\u0413\u0425\u0418\u0419\u041A\u041B\u041C\u041D\u041E\u041F\u042F\u0420\u0421\u0422\u0423\u0416\u0412\u042C\u042B\u0417\u0428\u042D\u0429\u0427\u042A"
},
"armscii8": {
"type": "_sbcs",
"chars": "\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8A\x8B\x8C\x8D\x8E\x8F\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9A\x9B\x9C\x9D\x9E\x9F\xA0\uFFFD\u0587\u0589)(\xBB\xAB\u2014.\u055D,-\u058A\u2026\u055C\u055B\u055E\u0531\u0561\u0532\u0562\u0533\u0563\u0534\u0564\u0535\u0565\u0536\u0566\u0537\u0567\u0538\u0568\u0539\u0569\u053A\u056A\u053B\u056B\u053C\u056C\u053D\u056D\u053E\u056E\u053F\u056F\u0540\u0570\u0541\u0571\u0542\u0572\u0543\u0573\u0544\u0574\u0545\u0575\u0546\u0576\u0547\u0577\u0548\u0578\u0549\u0579\u054A\u057A\u054B\u057B\u054C\u057C\u054D\u057D\u054E\u057E\u054F\u057F\u0550\u0580\u0551\u0581\u0552\u0582\u0553\u0583\u0554\u0584\u0555\u0585\u0556\u0586\u055A\uFFFD"
},
"rk1048": {
"type": "_sbcs",
"chars": "\u0402\u0403\u201A\u0453\u201E\u2026\u2020\u2021\u20AC\u2030\u0409\u2039\u040A\u049A\u04BA\u040F\u0452\u2018\u2019\u201C\u201D\u2022\u2013\u2014\uFFFD\u2122\u0459\u203A\u045A\u049B\u04BB\u045F\xA0\u04B0\u04B1\u04D8\xA4\u04E8\xA6\xA7\u0401\xA9\u0492\xAB\xAC\xAD\xAE\u04AE\xB0\xB1\u0406\u0456\u04E9\xB5\xB6\xB7\u0451\u2116\u0493\xBB\u04D9\u04A2\u04A3\u04AF\u0410\u0411\u0412\u0413\u0414\u0415\u0416\u0417\u0418\u0419\u041A\u041B\u041C\u041D\u041E\u041F\u0420\u0421\u0422\u0423\u0424\u0425\u0426\u0427\u0428\u0429\u042A\u042B\u042C\u042D\u042E\u042F\u0430\u0431\u0432\u0433\u0434\u0435\u0436\u0437\u0438\u0439\u043A\u043B\u043C\u043D\u043E\u043F\u0440\u0441\u0442\u0443\u0444\u0445\u0446\u0447\u0448\u0449\u044A\u044B\u044C\u044D\u044E\u044F"
},
"tcvn": {
"type": "_sbcs",
"chars": "\0\xDA\u1EE4\u1EEA\u1EEC\u1EEE\x07\b \n\v\f\r\u1EE8\u1EF0\u1EF2\u1EF6\u1EF8\xDD\u1EF4\x1B !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\x7F\xC0\u1EA2\xC3\xC1\u1EA0\u1EB6\u1EAC\xC8\u1EBA\u1EBC\xC9\u1EB8\u1EC6\xCC\u1EC8\u0128\xCD\u1ECA\xD2\u1ECE\xD5\xD3\u1ECC\u1ED8\u1EDC\u1EDE\u1EE0\u1EDA\u1EE2\xD9\u1EE6\u0168\xA0\u0102\xC2\xCA\xD4\u01A0\u01AF\u0110\u0103\xE2\xEA\xF4\u01A1\u01B0\u0111\u1EB0\u0300\u0309\u0303\u0301\u0323\xE0\u1EA3\xE3\xE1\u1EA1\u1EB2\u1EB1\u1EB3\u1EB5\u1EAF\u1EB4\u1EAE\u1EA6\u1EA8\u1EAA\u1EA4\u1EC0\u1EB7\u1EA7\u1EA9\u1EAB\u1EA5\u1EAD\xE8\u1EC2\u1EBB\u1EBD\xE9\u1EB9\u1EC1\u1EC3\u1EC5\u1EBF\u1EC7\xEC\u1EC9\u1EC4\u1EBE\u1ED2\u0129\xED\u1ECB\xF2\u1ED4\u1ECF\xF5\xF3\u1ECD\u1ED3\u1ED5\u1ED7\u1ED1\u1ED9\u1EDD\u1EDF\u1EE1\u1EDB\u1EE3\xF9\u1ED6\u1EE7\u0169\xFA\u1EE5\u1EEB\u1EED\u1EEF\u1EE9\u1EF1\u1EF3\u1EF7\u1EF9\xFD\u1EF5\u1ED0"
},
"georgianacademy": {
"type": "_sbcs",
"chars": "\x80\x81\u201A\u0192\u201E\u2026\u2020\u2021\u02C6\u2030\u0160\u2039\u0152\x8D\x8E\x8F\x90\u2018\u2019\u201C\u201D\u2022\u2013\u2014\u02DC\u2122\u0161\u203A\u0153\x9D\x9E\u0178\xA0\xA1\xA2\xA3\xA4\xA5\xA6\xA7\xA8\xA9\xAA\xAB\xAC\xAD\xAE\xAF\xB0\xB1\xB2\xB3\xB4\xB5\xB6\xB7\xB8\xB9\xBA\xBB\xBC\xBD\xBE\xBF\u10D0\u10D1\u10D2\u10D3\u10D4\u10D5\u10D6\u10D7\u10D8\u10D9\u10DA\u10DB\u10DC\u10DD\u10DE\u10DF\u10E0\u10E1\u10E2\u10E3\u10E4\u10E5\u10E6\u10E7\u10E8\u10E9\u10EA\u10EB\u10EC\u10ED\u10EE\u10EF\u10F0\u10F1\u10F2\u10F3\u10F4\u10F5\u10F6\xE7\xE8\xE9\xEA\xEB\xEC\xED\xEE\xEF\xF0\xF1\xF2\xF3\xF4\xF5\xF6\xF7\xF8\xF9\xFA\xFB\xFC\xFD\xFE\xFF"
},
"georgianps": {
"type": "_sbcs",
"chars": "\x80\x81\u201A\u0192\u201E\u2026\u2020\u2021\u02C6\u2030\u0160\u2039\u0152\x8D\x8E\x8F\x90\u2018\u2019\u201C\u201D\u2022\u2013\u2014\u02DC\u2122\u0161\u203A\u0153\x9D\x9E\u0178\xA0\xA1\xA2\xA3\xA4\xA5\xA6\xA7\xA8\xA9\xAA\xAB\xAC\xAD\xAE\xAF\xB0\xB1\xB2\xB3\xB4\xB5\xB6\xB7\xB8\xB9\xBA\xBB\xBC\xBD\xBE\xBF\u10D0\u10D1\u10D2\u10D3\u10D4\u10D5\u10D6\u10F1\u10D7\u10D8\u10D9\u10DA\u10DB\u10DC\u10F2\u10DD\u10DE\u10DF\u10E0\u10E1\u10E2\u10F3\u10E3\u10E4\u10E5\u10E6\u10E7\u10E8\u10E9\u10EA\u10EB\u10EC\u10ED\u10EE\u10F4\u10EF\u10F0\u10F5\xE6\xE7\xE8\xE9\xEA\xEB\xEC\xED\xEE\xEF\xF0\xF1\xF2\xF3\xF4\xF5\xF6\xF7\xF8\xF9\xFA\xFB\xFC\xFD\xFE\xFF"
},
"pt154": {
"type": "_sbcs",
"chars": "\u0496\u0492\u04EE\u0493\u201E\u2026\u04B6\u04AE\u04B2\u04AF\u04A0\u04E2\u04A2\u049A\u04BA\u04B8\u0497\u2018\u2019\u201C\u201D\u2022\u2013\u2014\u04B3\u04B7\u04A1\u04E3\u04A3\u049B\u04BB\u04B9\xA0\u040E\u045E\u0408\u04E8\u0498\u04B0\xA7\u0401\xA9\u04D8\xAB\xAC\u04EF\xAE\u049C\xB0\u04B1\u0406\u0456\u0499\u04E9\xB6\xB7\u0451\u2116\u04D9\xBB\u0458\u04AA\u04AB\u049D\u0410\u0411\u0412\u0413\u0414\u0415\u0416\u0417\u0418\u0419\u041A\u041B\u041C\u041D\u041E\u041F\u0420\u0421\u0422\u0423\u0424\u0425\u0426\u0427\u0428\u0429\u042A\u042B\u042C\u042D\u042E\u042F\u0430\u0431\u0432\u0433\u0434\u0435\u0436\u0437\u0438\u0439\u043A\u043B\u043C\u043D\u043E\u043F\u0440\u0441\u0442\u0443\u0444\u0445\u0446\u0447\u0448\u0449\u044A\u044B\u044C\u044D\u044E\u044F"
},
"viscii": {
"type": "_sbcs",
"chars": "\0\u1EB2\u1EB4\u1EAA\x07\b \n\v\f\r\u1EF6\u1EF8\x1B\u1EF4 !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\x7F\u1EA0\u1EAE\u1EB0\u1EB6\u1EA4\u1EA6\u1EA8\u1EAC\u1EBC\u1EB8\u1EBE\u1EC0\u1EC2\u1EC4\u1EC6\u1ED0\u1ED2\u1ED4\u1ED6\u1ED8\u1EE2\u1EDA\u1EDC\u1EDE\u1ECA\u1ECE\u1ECC\u1EC8\u1EE6\u0168\u1EE4\u1EF2\xD5\u1EAF\u1EB1\u1EB7\u1EA5\u1EA7\u1EA9\u1EAD\u1EBD\u1EB9\u1EBF\u1EC1\u1EC3\u1EC5\u1EC7\u1ED1\u1ED3\u1ED5\u1ED7\u1EE0\u01A0\u1ED9\u1EDD\u1EDF\u1ECB\u1EF0\u1EE8\u1EEA\u1EEC\u01A1\u1EDB\u01AF\xC0\xC1\xC2\xC3\u1EA2\u0102\u1EB3\u1EB5\xC8\xC9\xCA\u1EBA\xCC\xCD\u0128\u1EF3\u0110\u1EE9\xD2\xD3\xD4\u1EA1\u1EF7\u1EEB\u1EED\xD9\xDA\u1EF9\u1EF5\xDD\u1EE1\u01B0\xE0\xE1\xE2\xE3\u1EA3\u0103\u1EEF\u1EAB\xE8\xE9\xEA\u1EBB\xEC\xED\u0129\u1EC9\u0111\u1EF1\xF2\xF3\xF4\xF5\u1ECF\u1ECD\u1EE5\xF9\xFA\u0169\u1EE7\xFD\u1EE3\u1EEE"
},
"iso646cn": {
"type": "_sbcs",
"chars": "\0\x07\b \n\v\f\r\x1B !\"#\xA5%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}\u203E\x7F\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"
},
"iso646jp": {
"type": "_sbcs",
"chars": "\0\x07\b \n\v\f\r\x1B !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\xA5]^_`abcdefghijklmnopqrstuvwxyz{|}\u203E\x7F\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"
},
"hproman8": {
"type": "_sbcs",
"chars": "\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8A\x8B\x8C\x8D\x8E\x8F\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9A\x9B\x9C\x9D\x9E\x9F\xA0\xC0\xC2\xC8\xCA\xCB\xCE\xCF\xB4\u02CB\u02C6\xA8\u02DC\xD9\xDB\u20A4\xAF\xDD\xFD\xB0\xC7\xE7\xD1\xF1\xA1\xBF\xA4\xA3\xA5\xA7\u0192\xA2\xE2\xEA\xF4\xFB\xE1\xE9\xF3\xFA\xE0\xE8\xF2\xF9\xE4\xEB\xF6\xFC\xC5\xEE\xD8\xC6\xE5\xED\xF8\xE6\xC4\xEC\xD6\xDC\xC9\xEF\xDF\xD4\xC1\xC3\xE3\xD0\xF0\xCD\xCC\xD3\xD2\xD5\xF5\u0160\u0161\xDA\u0178\xFF\xDE\xFE\xB7\xB5\xB6\xBE\u2014\xBC\xBD\xAA\xBA\xAB\u25A0\xBB\xB1\uFFFD"
},
"macintosh": {
"type": "_sbcs",
"chars": "\xC4\xC5\xC7\xC9\xD1\xD6\xDC\xE1\xE0\xE2\xE4\xE3\xE5\xE7\xE9\xE8\xEA\xEB\xED\xEC\xEE\xEF\xF1\xF3\xF2\xF4\xF6\xF5\xFA\xF9\xFB\xFC\u2020\xB0\xA2\xA3\xA7\u2022\xB6\xDF\xAE\xA9\u2122\xB4\xA8\u2260\xC6\xD8\u221E\xB1\u2264\u2265\xA5\xB5\u2202\u2211\u220F\u03C0\u222B\xAA\xBA\u2126\xE6\xF8\xBF\xA1\xAC\u221A\u0192\u2248\u2206\xAB\xBB\u2026\xA0\xC0\xC3\xD5\u0152\u0153\u2013\u2014\u201C\u201D\u2018\u2019\xF7\u25CA\xFF\u0178\u2044\xA4\u2039\u203A\uFB01\uFB02\u2021\xB7\u201A\u201E\u2030\xC2\xCA\xC1\xCB\xC8\xCD\xCE\xCF\xCC\xD3\xD4\uFFFD\xD2\xDA\xDB\xD9\u0131\u02C6\u02DC\xAF\u02D8\u02D9\u02DA\xB8\u02DD\u02DB\u02C7"
},
"ascii": {
"type": "_sbcs",
"chars": "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"
},
"tis620": {
"type": "_sbcs",
"chars": "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u0E01\u0E02\u0E03\u0E04\u0E05\u0E06\u0E07\u0E08\u0E09\u0E0A\u0E0B\u0E0C\u0E0D\u0E0E\u0E0F\u0E10\u0E11\u0E12\u0E13\u0E14\u0E15\u0E16\u0E17\u0E18\u0E19\u0E1A\u0E1B\u0E1C\u0E1D\u0E1E\u0E1F\u0E20\u0E21\u0E22\u0E23\u0E24\u0E25\u0E26\u0E27\u0E28\u0E29\u0E2A\u0E2B\u0E2C\u0E2D\u0E2E\u0E2F\u0E30\u0E31\u0E32\u0E33\u0E34\u0E35\u0E36\u0E37\u0E38\u0E39\u0E3A\uFFFD\uFFFD\uFFFD\uFFFD\u0E3F\u0E40\u0E41\u0E42\u0E43\u0E44\u0E45\u0E46\u0E47\u0E48\u0E49\u0E4A\u0E4B\u0E4C\u0E4D\u0E4E\u0E4F\u0E50\u0E51\u0E52\u0E53\u0E54\u0E55\u0E56\u0E57\u0E58\u0E59\u0E5A\u0E5B\uFFFD\uFFFD\uFFFD\uFFFD"
}
};
}
});
// node_modules/iconv-lite/encodings/dbcs-codec.js
var require_dbcs_codec = __commonJS({
"node_modules/iconv-lite/encodings/dbcs-codec.js"(exports2) {
"use strict";
var Buffer2 = require_safer().Buffer;
exports2._dbcs = DBCSCodec;
var UNASSIGNED = -1;
var GB18030_CODE = -2;
var SEQ_START = -10;
var NODE_START = -1e3;
var UNASSIGNED_NODE = new Array(256);
var DEF_CHAR = -1;
for (i = 0; i < 256; i++)
UNASSIGNED_NODE[i] = UNASSIGNED;
var i;
function DBCSCodec(codecOptions, iconv2) {
this.encodingName = codecOptions.encodingName;
if (!codecOptions)
throw new Error("DBCS codec is called without the data.");
if (!codecOptions.table)
throw new Error("Encoding '" + this.encodingName + "' has no data.");
var mappingTable = codecOptions.table();
this.decodeTables = [];
this.decodeTables[0] = UNASSIGNED_NODE.slice(0);
this.decodeTableSeq = [];
for (var i2 = 0; i2 < mappingTable.length; i2++)
this._addDecodeChunk(mappingTable[i2]);
if (typeof codecOptions.gb18030 === "function") {
this.gb18030 = codecOptions.gb18030();
var commonThirdByteNodeIdx = this.decodeTables.length;
this.decodeTables.push(UNASSIGNED_NODE.slice(0));
var commonFourthByteNodeIdx = this.decodeTables.length;
this.decodeTables.push(UNASSIGNED_NODE.slice(0));
var firstByteNode = this.decodeTables[0];
for (var i2 = 129; i2 <= 254; i2++) {
var secondByteNode = this.decodeTables[NODE_START - firstByteNode[i2]];
for (var j = 48; j <= 57; j++) {
if (secondByteNode[j] === UNASSIGNED) {
secondByteNode[j] = NODE_START - commonThirdByteNodeIdx;
} else if (secondByteNode[j] > NODE_START) {
throw new Error("gb18030 decode tables conflict at byte 2");
}
var thirdByteNode = this.decodeTables[NODE_START - secondByteNode[j]];
for (var k = 129; k <= 254; k++) {
if (thirdByteNode[k] === UNASSIGNED) {
thirdByteNode[k] = NODE_START - commonFourthByteNodeIdx;
} else if (thirdByteNode[k] === NODE_START - commonFourthByteNodeIdx) {
continue;
} else if (thirdByteNode[k] > NODE_START) {
throw new Error("gb18030 decode tables conflict at byte 3");
}
var fourthByteNode = this.decodeTables[NODE_START - thirdByteNode[k]];
for (var l = 48; l <= 57; l++) {
if (fourthByteNode[l] === UNASSIGNED)
fourthByteNode[l] = GB18030_CODE;
}
}
}
}
}
this.defaultCharUnicode = iconv2.defaultCharUnicode;
this.encodeTable = [];
this.encodeTableSeq = [];
var skipEncodeChars = {};
if (codecOptions.encodeSkipVals)
for (var i2 = 0; i2 < codecOptions.encodeSkipVals.length; i2++) {
var val2 = codecOptions.encodeSkipVals[i2];
if (typeof val2 === "number")
skipEncodeChars[val2] = true;
else
for (var j = val2.from; j <= val2.to; j++)
skipEncodeChars[j] = true;
}
this._fillEncodeTable(0, 0, skipEncodeChars);
if (codecOptions.encodeAdd) {
for (var uChar in codecOptions.encodeAdd)
if (Object.prototype.hasOwnProperty.call(codecOptions.encodeAdd, uChar))
this._setEncodeChar(uChar.charCodeAt(0), codecOptions.encodeAdd[uChar]);
}
this.defCharSB = this.encodeTable[0][iconv2.defaultCharSingleByte.charCodeAt(0)];
if (this.defCharSB === UNASSIGNED) this.defCharSB = this.encodeTable[0]["?"];
if (this.defCharSB === UNASSIGNED) this.defCharSB = "?".charCodeAt(0);
}
DBCSCodec.prototype.encoder = DBCSEncoder;
DBCSCodec.prototype.decoder = DBCSDecoder;
DBCSCodec.prototype._getDecodeTrieNode = function(addr) {
var bytes = [];
for (; addr > 0; addr >>>= 8)
bytes.push(addr & 255);
if (bytes.length == 0)
bytes.push(0);
var node = this.decodeTables[0];
for (var i2 = bytes.length - 1; i2 > 0; i2--) {
var val2 = node[bytes[i2]];
if (val2 == UNASSIGNED) {
node[bytes[i2]] = NODE_START - this.decodeTables.length;
this.decodeTables.push(node = UNASSIGNED_NODE.slice(0));
} else if (val2 <= NODE_START) {
node = this.decodeTables[NODE_START - val2];
} else
throw new Error("Overwrite byte in " + this.encodingName + ", addr: " + addr.toString(16));
}
return node;
};
DBCSCodec.prototype._addDecodeChunk = function(chunk) {
var curAddr = parseInt(chunk[0], 16);
var writeTable = this._getDecodeTrieNode(curAddr);
curAddr = curAddr & 255;
for (var k = 1; k < chunk.length; k++) {
var part = chunk[k];
if (typeof part === "string") {
for (var l = 0; l < part.length; ) {
var code = part.charCodeAt(l++);
if (55296 <= code && code < 56320) {
var codeTrail = part.charCodeAt(l++);
if (56320 <= codeTrail && codeTrail < 57344)
writeTable[curAddr++] = 65536 + (code - 55296) * 1024 + (codeTrail - 56320);
else
throw new Error("Incorrect surrogate pair in " + this.encodingName + " at chunk " + chunk[0]);
} else if (4080 < code && code <= 4095) {
var len = 4095 - code + 2;
var seq = [];
for (var m = 0; m < len; m++)
seq.push(part.charCodeAt(l++));
writeTable[curAddr++] = SEQ_START - this.decodeTableSeq.length;
this.decodeTableSeq.push(seq);
} else
writeTable[curAddr++] = code;
}
} else if (typeof part === "number") {
var charCode = writeTable[curAddr - 1] + 1;
for (var l = 0; l < part; l++)
writeTable[curAddr++] = charCode++;
} else
throw new Error("Incorrect type '" + typeof part + "' given in " + this.encodingName + " at chunk " + chunk[0]);
}
if (curAddr > 255)
throw new Error("Incorrect chunk in " + this.encodingName + " at addr " + chunk[0] + ": too long" + curAddr);
};
DBCSCodec.prototype._getEncodeBucket = function(uCode) {
var high = uCode >> 8;
if (this.encodeTable[high] === void 0)
this.encodeTable[high] = UNASSIGNED_NODE.slice(0);
return this.encodeTable[high];
};
DBCSCodec.prototype._setEncodeChar = function(uCode, dbcsCode) {
var bucket = this._getEncodeBucket(uCode);
var low = uCode & 255;
if (bucket[low] <= SEQ_START)
this.encodeTableSeq[SEQ_START - bucket[low]][DEF_CHAR] = dbcsCode;
else if (bucket[low] == UNASSIGNED)
bucket[low] = dbcsCode;
};
DBCSCodec.prototype._setEncodeSequence = function(seq, dbcsCode) {
var uCode = seq[0];
var bucket = this._getEncodeBucket(uCode);
var low = uCode & 255;
var node;
if (bucket[low] <= SEQ_START) {
node = this.encodeTableSeq[SEQ_START - bucket[low]];
} else {
node = {};
if (bucket[low] !== UNASSIGNED) node[DEF_CHAR] = bucket[low];
bucket[low] = SEQ_START - this.encodeTableSeq.length;
this.encodeTableSeq.push(node);
}
for (var j = 1; j < seq.length - 1; j++) {
var oldVal = node[uCode];
if (typeof oldVal === "object")
node = oldVal;
else {
node = node[uCode] = {};
if (oldVal !== void 0)
node[DEF_CHAR] = oldVal;
}
}
uCode = seq[seq.length - 1];
node[uCode] = dbcsCode;
};
DBCSCodec.prototype._fillEncodeTable = function(nodeIdx, prefix, skipEncodeChars) {
var node = this.decodeTables[nodeIdx];
var hasValues = false;
var subNodeEmpty = {};
for (var i2 = 0; i2 < 256; i2++) {
var uCode = node[i2];
var mbCode = prefix + i2;
if (skipEncodeChars[mbCode])
continue;
if (uCode >= 0) {
this._setEncodeChar(uCode, mbCode);
hasValues = true;
} else if (uCode <= NODE_START) {
var subNodeIdx = NODE_START - uCode;
if (!subNodeEmpty[subNodeIdx]) {
var newPrefix = mbCode << 8 >>> 0;
if (this._fillEncodeTable(subNodeIdx, newPrefix, skipEncodeChars))
hasValues = true;
else
subNodeEmpty[subNodeIdx] = true;
}
} else if (uCode <= SEQ_START) {
this._setEncodeSequence(this.decodeTableSeq[SEQ_START - uCode], mbCode);
hasValues = true;
}
}
return hasValues;
};
function DBCSEncoder(options, codec) {
this.leadSurrogate = -1;
this.seqObj = void 0;
this.encodeTable = codec.encodeTable;
this.encodeTableSeq = codec.encodeTableSeq;
this.defaultCharSingleByte = codec.defCharSB;
this.gb18030 = codec.gb18030;
}
DBCSEncoder.prototype.write = function(str) {
var newBuf = Buffer2.alloc(str.length * (this.gb18030 ? 4 : 3)), leadSurrogate = this.leadSurrogate, seqObj = this.seqObj, nextChar = -1, i2 = 0, j = 0;
while (true) {
if (nextChar === -1) {
if (i2 == str.length) break;
var uCode = str.charCodeAt(i2++);
} else {
var uCode = nextChar;
nextChar = -1;
}
if (55296 <= uCode && uCode < 57344) {
if (uCode < 56320) {
if (leadSurrogate === -1) {
leadSurrogate = uCode;
continue;
} else {
leadSurrogate = uCode;
uCode = UNASSIGNED;
}
} else {
if (leadSurrogate !== -1) {
uCode = 65536 + (leadSurrogate - 55296) * 1024 + (uCode - 56320);
leadSurrogate = -1;
} else {
uCode = UNASSIGNED;
}
}
} else if (leadSurrogate !== -1) {
nextChar = uCode;
uCode = UNASSIGNED;
leadSurrogate = -1;
}
var dbcsCode = UNASSIGNED;
if (seqObj !== void 0 && uCode != UNASSIGNED) {
var resCode = seqObj[uCode];
if (typeof resCode === "object") {
seqObj = resCode;
continue;
} else if (typeof resCode == "number") {
dbcsCode = resCode;
} else if (resCode == void 0) {
resCode = seqObj[DEF_CHAR];
if (resCode !== void 0) {
dbcsCode = resCode;
nextChar = uCode;
} else {
}
}
seqObj = void 0;
} else if (uCode >= 0) {
var subtable = this.encodeTable[uCode >> 8];
if (subtable !== void 0)
dbcsCode = subtable[uCode & 255];
if (dbcsCode <= SEQ_START) {
seqObj = this.encodeTableSeq[SEQ_START - dbcsCode];
continue;
}
if (dbcsCode == UNASSIGNED && this.gb18030) {
var idx = findIdx(this.gb18030.uChars, uCode);
if (idx != -1) {
var dbcsCode = this.gb18030.gbChars[idx] + (uCode - this.gb18030.uChars[idx]);
newBuf[j++] = 129 + Math.floor(dbcsCode / 12600);
dbcsCode = dbcsCode % 12600;
newBuf[j++] = 48 + Math.floor(dbcsCode / 1260);
dbcsCode = dbcsCode % 1260;
newBuf[j++] = 129 + Math.floor(dbcsCode / 10);
dbcsCode = dbcsCode % 10;
newBuf[j++] = 48 + dbcsCode;
continue;
}
}
}
if (dbcsCode === UNASSIGNED)
dbcsCode = this.defaultCharSingleByte;
if (dbcsCode < 256) {
newBuf[j++] = dbcsCode;
} else if (dbcsCode < 65536) {
newBuf[j++] = dbcsCode >> 8;
newBuf[j++] = dbcsCode & 255;
} else if (dbcsCode < 16777216) {
newBuf[j++] = dbcsCode >> 16;
newBuf[j++] = dbcsCode >> 8 & 255;
newBuf[j++] = dbcsCode & 255;
} else {
newBuf[j++] = dbcsCode >>> 24;
newBuf[j++] = dbcsCode >>> 16 & 255;
newBuf[j++] = dbcsCode >>> 8 & 255;
newBuf[j++] = dbcsCode & 255;
}
}
this.seqObj = seqObj;
this.leadSurrogate = leadSurrogate;
return newBuf.slice(0, j);
};
DBCSEncoder.prototype.end = function() {
if (this.leadSurrogate === -1 && this.seqObj === void 0)
return;
var newBuf = Buffer2.alloc(10), j = 0;
if (this.seqObj) {
var dbcsCode = this.seqObj[DEF_CHAR];
if (dbcsCode !== void 0) {
if (dbcsCode < 256) {
newBuf[j++] = dbcsCode;
} else {
newBuf[j++] = dbcsCode >> 8;
newBuf[j++] = dbcsCode & 255;
}
} else {
}
this.seqObj = void 0;
}
if (this.leadSurrogate !== -1) {
newBuf[j++] = this.defaultCharSingleByte;
this.leadSurrogate = -1;
}
return newBuf.slice(0, j);
};
DBCSEncoder.prototype.findIdx = findIdx;
function DBCSDecoder(options, codec) {
this.nodeIdx = 0;
this.prevBytes = [];
this.decodeTables = codec.decodeTables;
this.decodeTableSeq = codec.decodeTableSeq;
this.defaultCharUnicode = codec.defaultCharUnicode;
this.gb18030 = codec.gb18030;
}
DBCSDecoder.prototype.write = function(buf) {
var newBuf = Buffer2.alloc(buf.length * 2), nodeIdx = this.nodeIdx, prevBytes = this.prevBytes, prevOffset = this.prevBytes.length, seqStart = -this.prevBytes.length, uCode;
for (var i2 = 0, j = 0; i2 < buf.length; i2++) {
var curByte = i2 >= 0 ? buf[i2] : prevBytes[i2 + prevOffset];
var uCode = this.decodeTables[nodeIdx][curByte];
if (uCode >= 0) {
} else if (uCode === UNASSIGNED) {
uCode = this.defaultCharUnicode.charCodeAt(0);
i2 = seqStart;
} else if (uCode === GB18030_CODE) {
if (i2 >= 3) {
var ptr = (buf[i2 - 3] - 129) * 12600 + (buf[i2 - 2] - 48) * 1260 + (buf[i2 - 1] - 129) * 10 + (curByte - 48);
} else {
var ptr = (prevBytes[i2 - 3 + prevOffset] - 129) * 12600 + ((i2 - 2 >= 0 ? buf[i2 - 2] : prevBytes[i2 - 2 + prevOffset]) - 48) * 1260 + ((i2 - 1 >= 0 ? buf[i2 - 1] : prevBytes[i2 - 1 + prevOffset]) - 129) * 10 + (curByte - 48);
}
var idx = findIdx(this.gb18030.gbChars, ptr);
uCode = this.gb18030.uChars[idx] + ptr - this.gb18030.gbChars[idx];
} else if (uCode <= NODE_START) {
nodeIdx = NODE_START - uCode;
continue;
} else if (uCode <= SEQ_START) {
var seq = this.decodeTableSeq[SEQ_START - uCode];
for (var k = 0; k < seq.length - 1; k++) {
uCode = seq[k];
newBuf[j++] = uCode & 255;
newBuf[j++] = uCode >> 8;
}
uCode = seq[seq.length - 1];
} else
throw new Error("iconv-lite internal error: invalid decoding table value " + uCode + " at " + nodeIdx + "/" + curByte);
if (uCode >= 65536) {
uCode -= 65536;
var uCodeLead = 55296 | uCode >> 10;
newBuf[j++] = uCodeLead & 255;
newBuf[j++] = uCodeLead >> 8;
uCode = 56320 | uCode & 1023;
}
newBuf[j++] = uCode & 255;
newBuf[j++] = uCode >> 8;
nodeIdx = 0;
seqStart = i2 + 1;
}
this.nodeIdx = nodeIdx;
this.prevBytes = seqStart >= 0 ? Array.prototype.slice.call(buf, seqStart) : prevBytes.slice(seqStart + prevOffset).concat(Array.prototype.slice.call(buf));
return newBuf.slice(0, j).toString("ucs2");
};
DBCSDecoder.prototype.end = function() {
var ret = "";
while (this.prevBytes.length > 0) {
ret += this.defaultCharUnicode;
var bytesArr = this.prevBytes.slice(1);
this.prevBytes = [];
this.nodeIdx = 0;
if (bytesArr.length > 0)
ret += this.write(bytesArr);
}
this.prevBytes = [];
this.nodeIdx = 0;
return ret;
};
function findIdx(table, val2) {
if (table[0] > val2)
return -1;
var l = 0, r = table.length;
while (l < r - 1) {
var mid = l + (r - l + 1 >> 1);
if (table[mid] <= val2)
l = mid;
else
r = mid;
}
return l;
}
}
});
// node_modules/iconv-lite/encodings/tables/shiftjis.json
var require_shiftjis = __commonJS({
"node_modules/iconv-lite/encodings/tables/shiftjis.json"(exports2, module2) {
module2.exports = [
["0", "\0", 128],
["a1", "\uFF61", 62],
["8140", "\u3000\u3001\u3002\uFF0C\uFF0E\u30FB\uFF1A\uFF1B\uFF1F\uFF01\u309B\u309C\xB4\uFF40\xA8\uFF3E\uFFE3\uFF3F\u30FD\u30FE\u309D\u309E\u3003\u4EDD\u3005\u3006\u3007\u30FC\u2015\u2010\uFF0F\uFF3C\uFF5E\u2225\uFF5C\u2026\u2025\u2018\u2019\u201C\u201D\uFF08\uFF09\u3014\u3015\uFF3B\uFF3D\uFF5B\uFF5D\u3008", 9, "\uFF0B\uFF0D\xB1\xD7"],
["8180", "\xF7\uFF1D\u2260\uFF1C\uFF1E\u2266\u2267\u221E\u2234\u2642\u2640\xB0\u2032\u2033\u2103\uFFE5\uFF04\uFFE0\uFFE1\uFF05\uFF03\uFF06\uFF0A\uFF20\xA7\u2606\u2605\u25CB\u25CF\u25CE\u25C7\u25C6\u25A1\u25A0\u25B3\u25B2\u25BD\u25BC\u203B\u3012\u2192\u2190\u2191\u2193\u3013"],
["81b8", "\u2208\u220B\u2286\u2287\u2282\u2283\u222A\u2229"],
["81c8", "\u2227\u2228\uFFE2\u21D2\u21D4\u2200\u2203"],
["81da", "\u2220\u22A5\u2312\u2202\u2207\u2261\u2252\u226A\u226B\u221A\u223D\u221D\u2235\u222B\u222C"],
["81f0", "\u212B\u2030\u266F\u266D\u266A\u2020\u2021\xB6"],
["81fc", "\u25EF"],
["824f", "\uFF10", 9],
["8260", "\uFF21", 25],
["8281", "\uFF41", 25],
["829f", "\u3041", 82],
["8340", "\u30A1", 62],
["8380", "\u30E0", 22],
["839f", "\u0391", 16, "\u03A3", 6],
["83bf", "\u03B1", 16, "\u03C3", 6],
["8440", "\u0410", 5, "\u0401\u0416", 25],
["8470", "\u0430", 5, "\u0451\u0436", 7],
["8480", "\u043E", 17],
["849f", "\u2500\u2502\u250C\u2510\u2518\u2514\u251C\u252C\u2524\u2534\u253C\u2501\u2503\u250F\u2513\u251B\u2517\u2523\u2533\u252B\u253B\u254B\u2520\u252F\u2528\u2537\u253F\u251D\u2530\u2525\u2538\u2542"],
["8740", "\u2460", 19, "\u2160", 9],
["875f", "\u3349\u3314\u3322\u334D\u3318\u3327\u3303\u3336\u3351\u3357\u330D\u3326\u3323\u332B\u334A\u333B\u339C\u339D\u339E\u338E\u338F\u33C4\u33A1"],
["877e", "\u337B"],
["8780", "\u301D\u301F\u2116\u33CD\u2121\u32A4", 4, "\u3231\u3232\u3239\u337E\u337D\u337C\u2252\u2261\u222B\u222E\u2211\u221A\u22A5\u2220\u221F\u22BF\u2235\u2229\u222A"],
["889f", "\u4E9C\u5516\u5A03\u963F\u54C0\u611B\u6328\u59F6\u9022\u8475\u831C\u7A50\u60AA\u63E1\u6E25\u65ED\u8466\u82A6\u9BF5\u6893\u5727\u65A1\u6271\u5B9B\u59D0\u867B\u98F4\u7D62\u7DBE\u9B8E\u6216\u7C9F\u88B7\u5B89\u5EB5\u6309\u6697\u6848\u95C7\u978D\u674F\u4EE5\u4F0A\u4F4D\u4F9D\u5049\u56F2\u5937\u59D4\u5A01\u5C09\u60DF\u610F\u6170\u6613\u6905\u70BA\u754F\u7570\u79FB\u7DAD\u7DEF\u80C3\u840E\u8863\u8B02\u9055\u907A\u533B\u4E95\u4EA5\u57DF\u80B2\u90C1\u78EF\u4E00\u58F1\u6EA2\u9038\u7A32\u8328\u828B\u9C2F\u5141\u5370\u54BD\u54E1\u56E0\u59FB\u5F15\u98F2\u6DEB\u80E4\u852D"],
["8940", "\u9662\u9670\u96A0\u97FB\u540B\u53F3\u5B87\u70CF\u7FBD\u8FC2\u96E8\u536F\u9D5C\u7ABA\u4E11\u7893\u81FC\u6E26\u5618\u5504\u6B1D\u851A\u9C3B\u59E5\u53A9\u6D66\u74DC\u958F\u5642\u4E91\u904B\u96F2\u834F\u990C\u53E1\u55B6\u5B30\u5F71\u6620\u66F3\u6804\u6C38\u6CF3\u6D29\u745B\u76C8\u7A4E\u9834\u82F1\u885B\u8A60\u92ED\u6DB2\u75AB\u76CA\u99C5\u60A6\u8B01\u8D8A\u95B2\u698E\u53AD\u5186"],
["8980", "\u5712\u5830\u5944\u5BB4\u5EF6\u6028\u63A9\u63F4\u6CBF\u6F14\u708E\u7114\u7159\u71D5\u733F\u7E01\u8276\u82D1\u8597\u9060\u925B\u9D1B\u5869\u65BC\u6C5A\u7525\u51F9\u592E\u5965\u5F80\u5FDC\u62BC\u65FA\u6A2A\u6B27\u6BB4\u738B\u7FC1\u8956\u9D2C\u9D0E\u9EC4\u5CA1\u6C96\u837B\u5104\u5C4B\u61B6\u81C6\u6876\u7261\u4E59\u4FFA\u5378\u6069\u6E29\u7A4F\u97F3\u4E0B\u5316\u4EEE\u4F55\u4F3D\u4FA1\u4F73\u52A0\u53EF\u5609\u590F\u5AC1\u5BB6\u5BE1\u79D1\u6687\u679C\u67B6\u6B4C\u6CB3\u706B\u73C2\u798D\u79BE\u7A3C\u7B87\u82B1\u82DB\u8304\u8377\u83EF\u83D3\u8766\u8AB2\u5629\u8CA8\u8FE6\u904E\u971E\u868A\u4FC4\u5CE8\u6211\u7259\u753B\u81E5\u82BD\u86FE\u8CC0\u96C5\u9913\u99D5\u4ECB\u4F1A\u89E3\u56DE\u584A\u58CA\u5EFB\u5FEB\u602A\u6094\u6062\u61D0\u6212\u62D0\u6539"],
["8a40", "\u9B41\u6666\u68B0\u6D77\u7070\u754C\u7686\u7D75\u82A5\u87F9\u958B\u968E\u8C9D\u51F1\u52BE\u5916\u54B3\u5BB3\u5D16\u6168\u6982\u6DAF\u788D\u84CB\u8857\u8A72\u93A7\u9AB8\u6D6C\u99A8\u86D9\u57A3\u67FF\u86CE\u920E\u5283\u5687\u5404\u5ED3\u62E1\u64B9\u683C\u6838\u6BBB\u7372\u78BA\u7A6B\u899A\u89D2\u8D6B\u8F03\u90ED\u95A3\u9694\u9769\u5B66\u5CB3\u697D\u984D\u984E\u639B\u7B20\u6A2B"],
["8a80", "\u6A7F\u68B6\u9C0D\u6F5F\u5272\u559D\u6070\u62EC\u6D3B\u6E07\u6ED1\u845B\u8910\u8F44\u4E14\u9C39\u53F6\u691B\u6A3A\u9784\u682A\u515C\u7AC3\u84B2\u91DC\u938C\u565B\u9D28\u6822\u8305\u8431\u7CA5\u5208\u82C5\u74E6\u4E7E\u4F83\u51A0\u5BD2\u520A\u52D8\u52E7\u5DFB\u559A\u582A\u59E6\u5B8C\u5B98\u5BDB\u5E72\u5E79\u60A3\u611F\u6163\u61BE\u63DB\u6562\u67D1\u6853\u68FA\u6B3E\u6B53\u6C57\u6F22\u6F97\u6F45\u74B0\u7518\u76E3\u770B\u7AFF\u7BA1\u7C21\u7DE9\u7F36\u7FF0\u809D\u8266\u839E\u89B3\u8ACC\u8CAB\u9084\u9451\u9593\u9591\u95A2\u9665\u97D3\u9928\u8218\u4E38\u542B\u5CB8\u5DCC\u73A9\u764C\u773C\u5CA9\u7FEB\u8D0B\u96C1\u9811\u9854\u9858\u4F01\u4F0E\u5371\u559C\u5668\u57FA\u5947\u5B09\u5BC4\u5C90\u5E0C\u5E7E\u5FCC\u63EE\u673A\u65D7\u65E2\u671F\u68CB\u68C4"],
["8b40", "\u6A5F\u5E30\u6BC5\u6C17\u6C7D\u757F\u7948\u5B63\u7A00\u7D00\u5FBD\u898F\u8A18\u8CB4\u8D77\u8ECC\u8F1D\u98E2\u9A0E\u9B3C\u4E80\u507D\u5100\u5993\u5B9C\u622F\u6280\u64EC\u6B3A\u72A0\u7591\u7947\u7FA9\u87FB\u8ABC\u8B70\u63AC\u83CA\u97A0\u5409\u5403\u55AB\u6854\u6A58\u8A70\u7827\u6775\u9ECD\u5374\u5BA2\u811A\u8650\u9006\u4E18\u4E45\u4EC7\u4F11\u53CA\u5438\u5BAE\u5F13\u6025\u6551"],
["8b80", "\u673D\u6C42\u6C72\u6CE3\u7078\u7403\u7A76\u7AAE\u7B08\u7D1A\u7CFE\u7D66\u65E7\u725B\u53BB\u5C45\u5DE8\u62D2\u62E0\u6319\u6E20\u865A\u8A31\u8DDD\u92F8\u6F01\u79A6\u9B5A\u4EA8\u4EAB\u4EAC\u4F9B\u4FA0\u50D1\u5147\u7AF6\u5171\u51F6\u5354\u5321\u537F\u53EB\u55AC\u5883\u5CE1\u5F37\u5F4A\u602F\u6050\u606D\u631F\u6559\u6A4B\u6CC1\u72C2\u72ED\u77EF\u80F8\u8105\u8208\u854E\u90F7\u93E1\u97FF\u9957\u9A5A\u4EF0\u51DD\u5C2D\u6681\u696D\u5C40\u66F2\u6975\u7389\u6850\u7C81\u50C5\u52E4\u5747\u5DFE\u9326\u65A4\u6B23\u6B3D\u7434\u7981\u79BD\u7B4B\u7DCA\u82B9\u83CC\u887F\u895F\u8B39\u8FD1\u91D1\u541F\u9280\u4E5D\u5036\u53E5\u533A\u72D7\u7396\u77E9\u82E6\u8EAF\u99C6\u99C8\u99D2\u5177\u611A\u865E\u55B0\u7A7A\u5076\u5BD3\u9047\u9685\u4E32\u6ADB\u91E7\u5C51\u5C48"],
["8c40", "\u6398\u7A9F\u6C93\u9774\u8F61\u7AAA\u718A\u9688\u7C82\u6817\u7E70\u6851\u936C\u52F2\u541B\u85AB\u8A13\u7FA4\u8ECD\u90E1\u5366\u8888\u7941\u4FC2\u50BE\u5211\u5144\u5553\u572D\u73EA\u578B\u5951\u5F62\u5F84\u6075\u6176\u6167\u61A9\u63B2\u643A\u656C\u666F\u6842\u6E13\u7566\u7A3D\u7CFB\u7D4C\u7D99\u7E4B\u7F6B\u830E\u834A\u86CD\u8A08\u8A63\u8B66\u8EFD\u981A\u9D8F\u82B8\u8FCE\u9BE8"],
["8c80", "\u5287\u621F\u6483\u6FC0\u9699\u6841\u5091\u6B20\u6C7A\u6F54\u7A74\u7D50\u8840\u8A23\u6708\u4EF6\u5039\u5026\u5065\u517C\u5238\u5263\u55A7\u570F\u5805\u5ACC\u5EFA\u61B2\u61F8\u62F3\u6372\u691C\u6A29\u727D\u72AC\u732E\u7814\u786F\u7D79\u770C\u80A9\u898B\u8B19\u8CE2\u8ED2\u9063\u9375\u967A\u9855\u9A13\u9E78\u5143\u539F\u53B3\u5E7B\u5F26\u6E1B\u6E90\u7384\u73FE\u7D43\u8237\u8A00\u8AFA\u9650\u4E4E\u500B\u53E4\u547C\u56FA\u59D1\u5B64\u5DF1\u5EAB\u5F27\u6238\u6545\u67AF\u6E56\u72D0\u7CCA\u88B4\u80A1\u80E1\u83F0\u864E\u8A87\u8DE8\u9237\u96C7\u9867\u9F13\u4E94\u4E92\u4F0D\u5348\u5449\u543E\u5A2F\u5F8C\u5FA1\u609F\u68A7\u6A8E\u745A\u7881\u8A9E\u8AA4\u8B77\u9190\u4E5E\u9BC9\u4EA4\u4F7C\u4FAF\u5019\u5016\u5149\u516C\u529F\u52B9\u52FE\u539A\u53E3\u5411"],
["8d40", "\u540E\u5589\u5751\u57A2\u597D\u5B54\u5B5D\u5B8F\u5DE5\u5DE7\u5DF7\u5E78\u5E83\u5E9A\u5EB7\u5F18\u6052\u614C\u6297\u62D8\u63A7\u653B\u6602\u6643\u66F4\u676D\u6821\u6897\u69CB\u6C5F\u6D2A\u6D69\u6E2F\u6E9D\u7532\u7687\u786C\u7A3F\u7CE0\u7D05\u7D18\u7D5E\u7DB1\u8015\u8003\u80AF\u80B1\u8154\u818F\u822A\u8352\u884C\u8861\u8B1B\u8CA2\u8CFC\u90CA\u9175\u9271\u783F\u92FC\u95A4\u964D"],
["8d80", "\u9805\u9999\u9AD8\u9D3B\u525B\u52AB\u53F7\u5408\u58D5\u62F7\u6FE0\u8C6A\u8F5F\u9EB9\u514B\u523B\u544A\u56FD\u7A40\u9177\u9D60\u9ED2\u7344\u6F09\u8170\u7511\u5FFD\u60DA\u9AA8\u72DB\u8FBC\u6B64\u9803\u4ECA\u56F0\u5764\u58BE\u5A5A\u6068\u61C7\u660F\u6606\u6839\u68B1\u6DF7\u75D5\u7D3A\u826E\u9B42\u4E9B\u4F50\u53C9\u5506\u5D6F\u5DE6\u5DEE\u67FB\u6C99\u7473\u7802\u8A50\u9396\u88DF\u5750\u5EA7\u632B\u50B5\u50AC\u518D\u6700\u54C9\u585E\u59BB\u5BB0\u5F69\u624D\u63A1\u683D\u6B73\u6E08\u707D\u91C7\u7280\u7815\u7826\u796D\u658E\u7D30\u83DC\u88C1\u8F09\u969B\u5264\u5728\u6750\u7F6A\u8CA1\u51B4\u5742\u962A\u583A\u698A\u80B4\u54B2\u5D0E\u57FC\u7895\u9DFA\u4F5C\u524A\u548B\u643E\u6628\u6714\u67F5\u7A84\u7B56\u7D22\u932F\u685C\u9BAD\u7B39\u5319\u518A\u5237"],
["8e40", "\u5BDF\u62F6\u64AE\u64E6\u672D\u6BBA\u85A9\u96D1\u7690\u9BD6\u634C\u9306\u9BAB\u76BF\u6652\u4E09\u5098\u53C2\u5C71\u60E8\u6492\u6563\u685F\u71E6\u73CA\u7523\u7B97\u7E82\u8695\u8B83\u8CDB\u9178\u9910\u65AC\u66AB\u6B8B\u4ED5\u4ED4\u4F3A\u4F7F\u523A\u53F8\u53F2\u55E3\u56DB\u58EB\u59CB\u59C9\u59FF\u5B50\u5C4D\u5E02\u5E2B\u5FD7\u601D\u6307\u652F\u5B5C\u65AF\u65BD\u65E8\u679D\u6B62"],
["8e80", "\u6B7B\u6C0F\u7345\u7949\u79C1\u7CF8\u7D19\u7D2B\u80A2\u8102\u81F3\u8996\u8A5E\u8A69\u8A66\u8A8C\u8AEE\u8CC7\u8CDC\u96CC\u98FC\u6B6F\u4E8B\u4F3C\u4F8D\u5150\u5B57\u5BFA\u6148\u6301\u6642\u6B21\u6ECB\u6CBB\u723E\u74BD\u75D4\u78C1\u793A\u800C\u8033\u81EA\u8494\u8F9E\u6C50\u9E7F\u5F0F\u8B58\u9D2B\u7AFA\u8EF8\u5B8D\u96EB\u4E03\u53F1\u57F7\u5931\u5AC9\u5BA4\u6089\u6E7F\u6F06\u75BE\u8CEA\u5B9F\u8500\u7BE0\u5072\u67F4\u829D\u5C61\u854A\u7E1E\u820E\u5199\u5C04\u6368\u8D66\u659C\u716E\u793E\u7D17\u8005\u8B1D\u8ECA\u906E\u86C7\u90AA\u501F\u52FA\u5C3A\u6753\u707C\u7235\u914C\u91C8\u932B\u82E5\u5BC2\u5F31\u60F9\u4E3B\u53D6\u5B88\u624B\u6731\u6B8A\u72E9\u73E0\u7A2E\u816B\u8DA3\u9152\u9996\u5112\u53D7\u546A\u5BFF\u6388\u6A39\u7DAC\u9700\u56DA\u53CE\u5468"],
["8f40", "\u5B97\u5C31\u5DDE\u4FEE\u6101\u62FE\u6D32\u79C0\u79CB\u7D42\u7E4D\u7FD2\u81ED\u821F\u8490\u8846\u8972\u8B90\u8E74\u8F2F\u9031\u914B\u916C\u96C6\u919C\u4EC0\u4F4F\u5145\u5341\u5F93\u620E\u67D4\u6C41\u6E0B\u7363\u7E26\u91CD\u9283\u53D4\u5919\u5BBF\u6DD1\u795D\u7E2E\u7C9B\u587E\u719F\u51FA\u8853\u8FF0\u4FCA\u5CFB\u6625\u77AC\u7AE3\u821C\u99FF\u51C6\u5FAA\u65EC\u696F\u6B89\u6DF3"],
["8f80", "\u6E96\u6F64\u76FE\u7D14\u5DE1\u9075\u9187\u9806\u51E6\u521D\u6240\u6691\u66D9\u6E1A\u5EB6\u7DD2\u7F72\u66F8\u85AF\u85F7\u8AF8\u52A9\u53D9\u5973\u5E8F\u5F90\u6055\u92E4\u9664\u50B7\u511F\u52DD\u5320\u5347\u53EC\u54E8\u5546\u5531\u5617\u5968\u59BE\u5A3C\u5BB5\u5C06\u5C0F\u5C11\u5C1A\u5E84\u5E8A\u5EE0\u5F70\u627F\u6284\u62DB\u638C\u6377\u6607\u660C\u662D\u6676\u677E\u68A2\u6A1F\u6A35\u6CBC\u6D88\u6E09\u6E58\u713C\u7126\u7167\u75C7\u7701\u785D\u7901\u7965\u79F0\u7AE0\u7B11\u7CA7\u7D39\u8096\u83D6\u848B\u8549\u885D\u88F3\u8A1F\u8A3C\u8A54\u8A73\u8C61\u8CDE\u91A4\u9266\u937E\u9418\u969C\u9798\u4E0A\u4E08\u4E1E\u4E57\u5197\u5270\u57CE\u5834\u58CC\u5B22\u5E38\u60C5\u64FE\u6761\u6756\u6D44\u72B6\u7573\u7A63\u84B8\u8B72\u91B8\u9320\u5631\u57F4\u98FE"],
["9040", "\u62ED\u690D\u6B96\u71ED\u7E54\u8077\u8272\u89E6\u98DF\u8755\u8FB1\u5C3B\u4F38\u4FE1\u4FB5\u5507\u5A20\u5BDD\u5BE9\u5FC3\u614E\u632F\u65B0\u664B\u68EE\u699B\u6D78\u6DF1\u7533\u75B9\u771F\u795E\u79E6\u7D33\u81E3\u82AF\u85AA\u89AA\u8A3A\u8EAB\u8F9B\u9032\u91DD\u9707\u4EBA\u4EC1\u5203\u5875\u58EC\u5C0B\u751A\u5C3D\u814E\u8A0A\u8FC5\u9663\u976D\u7B25\u8ACF\u9808\u9162\u56F3\u53A8"],
["9080", "\u9017\u5439\u5782\u5E25\u63A8\u6C34\u708A\u7761\u7C8B\u7FE0\u8870\u9042\u9154\u9310\u9318\u968F\u745E\u9AC4\u5D07\u5D69\u6570\u67A2\u8DA8\u96DB\u636E\u6749\u6919\u83C5\u9817\u96C0\u88FE\u6F84\u647A\u5BF8\u4E16\u702C\u755D\u662F\u51C4\u5236\u52E2\u59D3\u5F81\u6027\u6210\u653F\u6574\u661F\u6674\u68F2\u6816\u6B63\u6E05\u7272\u751F\u76DB\u7CBE\u8056\u58F0\u88FD\u897F\u8AA0\u8A93\u8ACB\u901D\u9192\u9752\u9759\u6589\u7A0E\u8106\u96BB\u5E2D\u60DC\u621A\u65A5\u6614\u6790\u77F3\u7A4D\u7C4D\u7E3E\u810A\u8CAC\u8D64\u8DE1\u8E5F\u78A9\u5207\u62D9\u63A5\u6442\u6298\u8A2D\u7A83\u7BC0\u8AAC\u96EA\u7D76\u820C\u8749\u4ED9\u5148\u5343\u5360\u5BA3\u5C02\u5C16\u5DDD\u6226\u6247\u64B0\u6813\u6834\u6CC9\u6D45\u6D17\u67D3\u6F5C\u714E\u717D\u65CB\u7A7F\u7BAD\u7DDA"],
["9140", "\u7E4A\u7FA8\u817A\u821B\u8239\u85A6\u8A6E\u8CCE\u8DF5\u9078\u9077\u92AD\u9291\u9583\u9BAE\u524D\u5584\u6F38\u7136\u5168\u7985\u7E55\u81B3\u7CCE\u564C\u5851\u5CA8\u63AA\u66FE\u66FD\u695A\u72D9\u758F\u758E\u790E\u7956\u79DF\u7C97\u7D20\u7D44\u8607\u8A34\u963B\u9061\u9F20\u50E7\u5275\u53CC\u53E2\u5009\u55AA\u58EE\u594F\u723D\u5B8B\u5C64\u531D\u60E3\u60F3\u635C\u6383\u633F\u63BB"],
["9180", "\u64CD\u65E9\u66F9\u5DE3\u69CD\u69FD\u6F15\u71E5\u4E89\u75E9\u76F8\u7A93\u7CDF\u7DCF\u7D9C\u8061\u8349\u8358\u846C\u84BC\u85FB\u88C5\u8D70\u9001\u906D\u9397\u971C\u9A12\u50CF\u5897\u618E\u81D3\u8535\u8D08\u9020\u4FC3\u5074\u5247\u5373\u606F\u6349\u675F\u6E2C\u8DB3\u901F\u4FD7\u5C5E\u8CCA\u65CF\u7D9A\u5352\u8896\u5176\u63C3\u5B58\u5B6B\u5C0A\u640D\u6751\u905C\u4ED6\u591A\u592A\u6C70\u8A51\u553E\u5815\u59A5\u60F0\u6253\u67C1\u8235\u6955\u9640\u99C4\u9A28\u4F53\u5806\u5BFE\u8010\u5CB1\u5E2F\u5F85\u6020\u614B\u6234\u66FF\u6CF0\u6EDE\u80CE\u817F\u82D4\u888B\u8CB8\u9000\u902E\u968A\u9EDB\u9BDB\u4EE3\u53F0\u5927\u7B2C\u918D\u984C\u9DF9\u6EDD\u7027\u5353\u5544\u5B85\u6258\u629E\u62D3\u6CA2\u6FEF\u7422\u8A17\u9438\u6FC1\u8AFE\u8338\u51E7\u86F8\u53EA"],
["9240", "\u53E9\u4F46\u9054\u8FB0\u596A\u8131\u5DFD\u7AEA\u8FBF\u68DA\u8C37\u72F8\u9C48\u6A3D\u8AB0\u4E39\u5358\u5606\u5766\u62C5\u63A2\u65E6\u6B4E\u6DE1\u6E5B\u70AD\u77ED\u7AEF\u7BAA\u7DBB\u803D\u80C6\u86CB\u8A95\u935B\u56E3\u58C7\u5F3E\u65AD\u6696\u6A80\u6BB5\u7537\u8AC7\u5024\u77E5\u5730\u5F1B\u6065\u667A\u6C60\u75F4\u7A1A\u7F6E\u81F4\u8718\u9045\u99B3\u7BC9\u755C\u7AF9\u7B51\u84C4"],
["9280", "\u9010\u79E9\u7A92\u8336\u5AE1\u7740\u4E2D\u4EF2\u5B99\u5FE0\u62BD\u663C\u67F1\u6CE8\u866B\u8877\u8A3B\u914E\u92F3\u99D0\u6A17\u7026\u732A\u82E7\u8457\u8CAF\u4E01\u5146\u51CB\u558B\u5BF5\u5E16\u5E33\u5E81\u5F14\u5F35\u5F6B\u5FB4\u61F2\u6311\u66A2\u671D\u6F6E\u7252\u753A\u773A\u8074\u8139\u8178\u8776\u8ABF\u8ADC\u8D85\u8DF3\u929A\u9577\u9802\u9CE5\u52C5\u6357\u76F4\u6715\u6C88\u73CD\u8CC3\u93AE\u9673\u6D25\u589C\u690E\u69CC\u8FFD\u939A\u75DB\u901A\u585A\u6802\u63B4\u69FB\u4F43\u6F2C\u67D8\u8FBB\u8526\u7DB4\u9354\u693F\u6F70\u576A\u58F7\u5B2C\u7D2C\u722A\u540A\u91E3\u9DB4\u4EAD\u4F4E\u505C\u5075\u5243\u8C9E\u5448\u5824\u5B9A\u5E1D\u5E95\u5EAD\u5EF7\u5F1F\u608C\u62B5\u633A\u63D0\u68AF\u6C40\u7887\u798E\u7A0B\u7DE0\u8247\u8A02\u8AE6\u8E44\u9013"],
["9340", "\u90B8\u912D\u91D8\u9F0E\u6CE5\u6458\u64E2\u6575\u6EF4\u7684\u7B1B\u9069\u93D1\u6EBA\u54F2\u5FB9\u64A4\u8F4D\u8FED\u9244\u5178\u586B\u5929\u5C55\u5E97\u6DFB\u7E8F\u751C\u8CBC\u8EE2\u985B\u70B9\u4F1D\u6BBF\u6FB1\u7530\u96FB\u514E\u5410\u5835\u5857\u59AC\u5C60\u5F92\u6597\u675C\u6E21\u767B\u83DF\u8CED\u9014\u90FD\u934D\u7825\u783A\u52AA\u5EA6\u571F\u5974\u6012\u5012\u515A\u51AC"],
["9380", "\u51CD\u5200\u5510\u5854\u5858\u5957\u5B95\u5CF6\u5D8B\u60BC\u6295\u642D\u6771\u6843\u68BC\u68DF\u76D7\u6DD8\u6E6F\u6D9B\u706F\u71C8\u5F53\u75D8\u7977\u7B49\u7B54\u7B52\u7CD6\u7D71\u5230\u8463\u8569\u85E4\u8A0E\u8B04\u8C46\u8E0F\u9003\u900F\u9419\u9676\u982D\u9A30\u95D8\u50CD\u52D5\u540C\u5802\u5C0E\u61A7\u649E\u6D1E\u77B3\u7AE5\u80F4\u8404\u9053\u9285\u5CE0\u9D07\u533F\u5F97\u5FB3\u6D9C\u7279\u7763\u79BF\u7BE4\u6BD2\u72EC\u8AAD\u6803\u6A61\u51F8\u7A81\u6934\u5C4A\u9CF6\u82EB\u5BC5\u9149\u701E\u5678\u5C6F\u60C7\u6566\u6C8C\u8C5A\u9041\u9813\u5451\u66C7\u920D\u5948\u90A3\u5185\u4E4D\u51EA\u8599\u8B0E\u7058\u637A\u934B\u6962\u99B4\u7E04\u7577\u5357\u6960\u8EDF\u96E3\u6C5D\u4E8C\u5C3C\u5F10\u8FE9\u5302\u8CD1\u8089\u8679\u5EFF\u65E5\u4E73\u5165"],
["9440", "\u5982\u5C3F\u97EE\u4EFB\u598A\u5FCD\u8A8D\u6FE1\u79B0\u7962\u5BE7\u8471\u732B\u71B1\u5E74\u5FF5\u637B\u649A\u71C3\u7C98\u4E43\u5EFC\u4E4B\u57DC\u56A2\u60A9\u6FC3\u7D0D\u80FD\u8133\u81BF\u8FB2\u8997\u86A4\u5DF4\u628A\u64AD\u8987\u6777\u6CE2\u6D3E\u7436\u7834\u5A46\u7F75\u82AD\u99AC\u4FF3\u5EC3\u62DD\u6392\u6557\u676F\u76C3\u724C\u80CC\u80BA\u8F29\u914D\u500D\u57F9\u5A92\u6885"],
["9480", "\u6973\u7164\u72FD\u8CB7\u58F2\u8CE0\u966A\u9019\u877F\u79E4\u77E7\u8429\u4F2F\u5265\u535A\u62CD\u67CF\u6CCA\u767D\u7B94\u7C95\u8236\u8584\u8FEB\u66DD\u6F20\u7206\u7E1B\u83AB\u99C1\u9EA6\u51FD\u7BB1\u7872\u7BB8\u8087\u7B48\u6AE8\u5E61\u808C\u7551\u7560\u516B\u9262\u6E8C\u767A\u9197\u9AEA\u4F10\u7F70\u629C\u7B4F\u95A5\u9CE9\u567A\u5859\u86E4\u96BC\u4F34\u5224\u534A\u53CD\u53DB\u5E06\u642C\u6591\u677F\u6C3E\u6C4E\u7248\u72AF\u73ED\u7554\u7E41\u822C\u85E9\u8CA9\u7BC4\u91C6\u7169\u9812\u98EF\u633D\u6669\u756A\u76E4\u78D0\u8543\u86EE\u532A\u5351\u5426\u5983\u5E87\u5F7C\u60B2\u6249\u6279\u62AB\u6590\u6BD4\u6CCC\u75B2\u76AE\u7891\u79D8\u7DCB\u7F77\u80A5\u88AB\u8AB9\u8CBB\u907F\u975E\u98DB\u6A0B\u7C38\u5099\u5C3E\u5FAE\u6787\u6BD8\u7435\u7709\u7F8E"],
["9540", "\u9F3B\u67CA\u7A17\u5339\u758B\u9AED\u5F66\u819D\u83F1\u8098\u5F3C\u5FC5\u7562\u7B46\u903C\u6867\u59EB\u5A9B\u7D10\u767E\u8B2C\u4FF5\u5F6A\u6A19\u6C37\u6F02\u74E2\u7968\u8868\u8A55\u8C79\u5EDF\u63CF\u75C5\u79D2\u82D7\u9328\u92F2\u849C\u86ED\u9C2D\u54C1\u5F6C\u658C\u6D5C\u7015\u8CA7\u8CD3\u983B\u654F\u74F6\u4E0D\u4ED8\u57E0\u592B\u5A66\u5BCC\u51A8\u5E03\u5E9C\u6016\u6276\u6577"],
["9580", "\u65A7\u666E\u6D6E\u7236\u7B26\u8150\u819A\u8299\u8B5C\u8CA0\u8CE6\u8D74\u961C\u9644\u4FAE\u64AB\u6B66\u821E\u8461\u856A\u90E8\u5C01\u6953\u98A8\u847A\u8557\u4F0F\u526F\u5FA9\u5E45\u670D\u798F\u8179\u8907\u8986\u6DF5\u5F17\u6255\u6CB8\u4ECF\u7269\u9B92\u5206\u543B\u5674\u58B3\u61A4\u626E\u711A\u596E\u7C89\u7CDE\u7D1B\u96F0\u6587\u805E\u4E19\u4F75\u5175\u5840\u5E63\u5E73\u5F0A\u67C4\u4E26\u853D\u9589\u965B\u7C73\u9801\u50FB\u58C1\u7656\u78A7\u5225\u77A5\u8511\u7B86\u504F\u5909\u7247\u7BC7\u7DE8\u8FBA\u8FD4\u904D\u4FBF\u52C9\u5A29\u5F01\u97AD\u4FDD\u8217\u92EA\u5703\u6355\u6B69\u752B\u88DC\u8F14\u7A42\u52DF\u5893\u6155\u620A\u66AE\u6BCD\u7C3F\u83E9\u5023\u4FF8\u5305\u5446\u5831\u5949\u5B9D\u5CF0\u5CEF\u5D29\u5E96\u62B1\u6367\u653E\u65B9\u670B"],
["9640", "\u6CD5\u6CE1\u70F9\u7832\u7E2B\u80DE\u82B3\u840C\u84EC\u8702\u8912\u8A2A\u8C4A\u90A6\u92D2\u98FD\u9CF3\u9D6C\u4E4F\u4EA1\u508D\u5256\u574A\u59A8\u5E3D\u5FD8\u5FD9\u623F\u66B4\u671B\u67D0\u68D2\u5192\u7D21\u80AA\u81A8\u8B00\u8C8C\u8CBF\u927E\u9632\u5420\u982C\u5317\u50D5\u535C\u58A8\u64B2\u6734\u7267\u7766\u7A46\u91E6\u52C3\u6CA1\u6B86\u5800\u5E4C\u5954\u672C\u7FFB\u51E1\u76C6"],
["9680", "\u6469\u78E8\u9B54\u9EBB\u57CB\u59B9\u6627\u679A\u6BCE\u54E9\u69D9\u5E55\u819C\u6795\u9BAA\u67FE\u9C52\u685D\u4EA6\u4FE3\u53C8\u62B9\u672B\u6CAB\u8FC4\u4FAD\u7E6D\u9EBF\u4E07\u6162\u6E80\u6F2B\u8513\u5473\u672A\u9B45\u5DF3\u7B95\u5CAC\u5BC6\u871C\u6E4A\u84D1\u7A14\u8108\u5999\u7C8D\u6C11\u7720\u52D9\u5922\u7121\u725F\u77DB\u9727\u9D61\u690B\u5A7F\u5A18\u51A5\u540D\u547D\u660E\u76DF\u8FF7\u9298\u9CF4\u59EA\u725D\u6EC5\u514D\u68C9\u7DBF\u7DEC\u9762\u9EBA\u6478\u6A21\u8302\u5984\u5B5F\u6BDB\u731B\u76F2\u7DB2\u8017\u8499\u5132\u6728\u9ED9\u76EE\u6762\u52FF\u9905\u5C24\u623B\u7C7E\u8CB0\u554F\u60B6\u7D0B\u9580\u5301\u4E5F\u51B6\u591C\u723A\u8036\u91CE\u5F25\u77E2\u5384\u5F79\u7D04\u85AC\u8A33\u8E8D\u9756\u67F3\u85AE\u9453\u6109\u6108\u6CB9\u7652"],
["9740", "\u8AED\u8F38\u552F\u4F51\u512A\u52C7\u53CB\u5BA5\u5E7D\u60A0\u6182\u63D6\u6709\u67DA\u6E67\u6D8C\u7336\u7337\u7531\u7950\u88D5\u8A98\u904A\u9091\u90F5\u96C4\u878D\u5915\u4E88\u4F59\u4E0E\u8A89\u8F3F\u9810\u50AD\u5E7C\u5996\u5BB9\u5EB8\u63DA\u63FA\u64C1\u66DC\u694A\u69D8\u6D0B\u6EB6\u7194\u7528\u7AAF\u7F8A\u8000\u8449\u84C9\u8981\u8B21\u8E0A\u9065\u967D\u990A\u617E\u6291\u6B32"],
["9780", "\u6C83\u6D74\u7FCC\u7FFC\u6DC0\u7F85\u87BA\u88F8\u6765\u83B1\u983C\u96F7\u6D1B\u7D61\u843D\u916A\u4E71\u5375\u5D50\u6B04\u6FEB\u85CD\u862D\u89A7\u5229\u540F\u5C65\u674E\u68A8\u7406\u7483\u75E2\u88CF\u88E1\u91CC\u96E2\u9678\u5F8B\u7387\u7ACB\u844E\u63A0\u7565\u5289\u6D41\u6E9C\u7409\u7559\u786B\u7C92\u9686\u7ADC\u9F8D\u4FB6\u616E\u65C5\u865C\u4E86\u4EAE\u50DA\u4E21\u51CC\u5BEE\u6599\u6881\u6DBC\u731F\u7642\u77AD\u7A1C\u7CE7\u826F\u8AD2\u907C\u91CF\u9675\u9818\u529B\u7DD1\u502B\u5398\u6797\u6DCB\u71D0\u7433\u81E8\u8F2A\u96A3\u9C57\u9E9F\u7460\u5841\u6D99\u7D2F\u985E\u4EE4\u4F36\u4F8B\u51B7\u52B1\u5DBA\u601C\u73B2\u793C\u82D3\u9234\u96B7\u96F6\u970A\u9E97\u9F62\u66A6\u6B74\u5217\u52A3\u70C8\u88C2\u5EC9\u604B\u6190\u6F23\u7149\u7C3E\u7DF4\u806F"],
["9840", "\u84EE\u9023\u932C\u5442\u9B6F\u6AD3\u7089\u8CC2\u8DEF\u9732\u52B4\u5A41\u5ECA\u5F04\u6717\u697C\u6994\u6D6A\u6F0F\u7262\u72FC\u7BED\u8001\u807E\u874B\u90CE\u516D\u9E93\u7984\u808B\u9332\u8AD6\u502D\u548C\u8A71\u6B6A\u8CC4\u8107\u60D1\u67A0\u9DF2\u4E99\u4E98\u9C10\u8A6B\u85C1\u8568\u6900\u6E7E\u7897\u8155"],
["989f", "\u5F0C\u4E10\u4E15\u4E2A\u4E31\u4E36\u4E3C\u4E3F\u4E42\u4E56\u4E58\u4E82\u4E85\u8C6B\u4E8A\u8212\u5F0D\u4E8E\u4E9E\u4E9F\u4EA0\u4EA2\u4EB0\u4EB3\u4EB6\u4ECE\u4ECD\u4EC4\u4EC6\u4EC2\u4ED7\u4EDE\u4EED\u4EDF\u4EF7\u4F09\u4F5A\u4F30\u4F5B\u4F5D\u4F57\u4F47\u4F76\u4F88\u4F8F\u4F98\u4F7B\u4F69\u4F70\u4F91\u4F6F\u4F86\u4F96\u5118\u4FD4\u4FDF\u4FCE\u4FD8\u4FDB\u4FD1\u4FDA\u4FD0\u4FE4\u4FE5\u501A\u5028\u5014\u502A\u5025\u5005\u4F1C\u4FF6\u5021\u5029\u502C\u4FFE\u4FEF\u5011\u5006\u5043\u5047\u6703\u5055\u5050\u5048\u505A\u5056\u506C\u5078\u5080\u509A\u5085\u50B4\u50B2"],
["9940", "\u50C9\u50CA\u50B3\u50C2\u50D6\u50DE\u50E5\u50ED\u50E3\u50EE\u50F9\u50F5\u5109\u5101\u5102\u5116\u5115\u5114\u511A\u5121\u513A\u5137\u513C\u513B\u513F\u5140\u5152\u514C\u5154\u5162\u7AF8\u5169\u516A\u516E\u5180\u5182\u56D8\u518C\u5189\u518F\u5191\u5193\u5195\u5196\u51A4\u51A6\u51A2\u51A9\u51AA\u51AB\u51B3\u51B1\u51B2\u51B0\u51B5\u51BD\u51C5\u51C9\u51DB\u51E0\u8655\u51E9\u51ED"],
["9980", "\u51F0\u51F5\u51FE\u5204\u520B\u5214\u520E\u5227\u522A\u522E\u5233\u5239\u524F\u5244\u524B\u524C\u525E\u5254\u526A\u5274\u5269\u5273\u527F\u527D\u528D\u5294\u5292\u5271\u5288\u5291\u8FA8\u8FA7\u52AC\u52AD\u52BC\u52B5\u52C1\u52CD\u52D7\u52DE\u52E3\u52E6\u98ED\u52E0\u52F3\u52F5\u52F8\u52F9\u5306\u5308\u7538\u530D\u5310\u530F\u5315\u531A\u5323\u532F\u5331\u5333\u5338\u5340\u5346\u5345\u4E17\u5349\u534D\u51D6\u535E\u5369\u536E\u5918\u537B\u5377\u5382\u5396\u53A0\u53A6\u53A5\u53AE\u53B0\u53B6\u53C3\u7C12\u96D9\u53DF\u66FC\u71EE\u53EE\u53E8\u53ED\u53FA\u5401\u543D\u5440\u542C\u542D\u543C\u542E\u5436\u5429\u541D\u544E\u548F\u5475\u548E\u545F\u5471\u5477\u5470\u5492\u547B\u5480\u5476\u5484\u5490\u5486\u54C7\u54A2\u54B8\u54A5\u54AC\u54C4\u54C8\u54A8"],
["9a40", "\u54AB\u54C2\u54A4\u54BE\u54BC\u54D8\u54E5\u54E6\u550F\u5514\u54FD\u54EE\u54ED\u54FA\u54E2\u5539\u5540\u5563\u554C\u552E\u555C\u5545\u5556\u5557\u5538\u5533\u555D\u5599\u5580\u54AF\u558A\u559F\u557B\u557E\u5598\u559E\u55AE\u557C\u5583\u55A9\u5587\u55A8\u55DA\u55C5\u55DF\u55C4\u55DC\u55E4\u55D4\u5614\u55F7\u5616\u55FE\u55FD\u561B\u55F9\u564E\u5650\u71DF\u5634\u5636\u5632\u5638"],
["9a80", "\u566B\u5664\u562F\u566C\u566A\u5686\u5680\u568A\u56A0\u5694\u568F\u56A5\u56AE\u56B6\u56B4\u56C2\u56BC\u56C1\u56C3\u56C0\u56C8\u56CE\u56D1\u56D3\u56D7\u56EE\u56F9\u5700\u56FF\u5704\u5709\u5708\u570B\u570D\u5713\u5718\u5716\u55C7\u571C\u5726\u5737\u5738\u574E\u573B\u5740\u574F\u5769\u57C0\u5788\u5761\u577F\u5789\u5793\u57A0\u57B3\u57A4\u57AA\u57B0\u57C3\u57C6\u57D4\u57D2\u57D3\u580A\u57D6\u57E3\u580B\u5819\u581D\u5872\u5821\u5862\u584B\u5870\u6BC0\u5852\u583D\u5879\u5885\u58B9\u589F\u58AB\u58BA\u58DE\u58BB\u58B8\u58AE\u58C5\u58D3\u58D1\u58D7\u58D9\u58D8\u58E5\u58DC\u58E4\u58DF\u58EF\u58FA\u58F9\u58FB\u58FC\u58FD\u5902\u590A\u5910\u591B\u68A6\u5925\u592C\u592D\u5932\u5938\u593E\u7AD2\u5955\u5950\u594E\u595A\u5958\u5962\u5960\u5967\u596C\u5969"],
["9b40", "\u5978\u5981\u599D\u4F5E\u4FAB\u59A3\u59B2\u59C6\u59E8\u59DC\u598D\u59D9\u59DA\u5A25\u5A1F\u5A11\u5A1C\u5A09\u5A1A\u5A40\u5A6C\u5A49\u5A35\u5A36\u5A62\u5A6A\u5A9A\u5ABC\u5ABE\u5ACB\u5AC2\u5ABD\u5AE3\u5AD7\u5AE6\u5AE9\u5AD6\u5AFA\u5AFB\u5B0C\u5B0B\u5B16\u5B32\u5AD0\u5B2A\u5B36\u5B3E\u5B43\u5B45\u5B40\u5B51\u5B55\u5B5A\u5B5B\u5B65\u5B69\u5B70\u5B73\u5B75\u5B78\u6588\u5B7A\u5B80"],
["9b80", "\u5B83\u5BA6\u5BB8\u5BC3\u5BC7\u5BC9\u5BD4\u5BD0\u5BE4\u5BE6\u5BE2\u5BDE\u5BE5\u5BEB\u5BF0\u5BF6\u5BF3\u5C05\u5C07\u5C08\u5C0D\u5C13\u5C20\u5C22\u5C28\u5C38\u5C39\u5C41\u5C46\u5C4E\u5C53\u5C50\u5C4F\u5B71\u5C6C\u5C6E\u4E62\u5C76\u5C79\u5C8C\u5C91\u5C94\u599B\u5CAB\u5CBB\u5CB6\u5CBC\u5CB7\u5CC5\u5CBE\u5CC7\u5CD9\u5CE9\u5CFD\u5CFA\u5CED\u5D8C\u5CEA\u5D0B\u5D15\u5D17\u5D5C\u5D1F\u5D1B\u5D11\u5D14\u5D22\u5D1A\u5D19\u5D18\u5D4C\u5D52\u5D4E\u5D4B\u5D6C\u5D73\u5D76\u5D87\u5D84\u5D82\u5DA2\u5D9D\u5DAC\u5DAE\u5DBD\u5D90\u5DB7\u5DBC\u5DC9\u5DCD\u5DD3\u5DD2\u5DD6\u5DDB\u5DEB\u5DF2\u5DF5\u5E0B\u5E1A\u5E19\u5E11\u5E1B\u5E36\u5E37\u5E44\u5E43\u5E40\u5E4E\u5E57\u5E54\u5E5F\u5E62\u5E64\u5E47\u5E75\u5E76\u5E7A\u9EBC\u5E7F\u5EA0\u5EC1\u5EC2\u5EC8\u5ED0\u5ECF"],
["9c40", "\u5ED6\u5EE3\u5EDD\u5EDA\u5EDB\u5EE2\u5EE1\u5EE8\u5EE9\u5EEC\u5EF1\u5EF3\u5EF0\u5EF4\u5EF8\u5EFE\u5F03\u5F09\u5F5D\u5F5C\u5F0B\u5F11\u5F16\u5F29\u5F2D\u5F38\u5F41\u5F48\u5F4C\u5F4E\u5F2F\u5F51\u5F56\u5F57\u5F59\u5F61\u5F6D\u5F73\u5F77\u5F83\u5F82\u5F7F\u5F8A\u5F88\u5F91\u5F87\u5F9E\u5F99\u5F98\u5FA0\u5FA8\u5FAD\u5FBC\u5FD6\u5FFB\u5FE4\u5FF8\u5FF1\u5FDD\u60B3\u5FFF\u6021\u6060"],
["9c80", "\u6019\u6010\u6029\u600E\u6031\u601B\u6015\u602B\u6026\u600F\u603A\u605A\u6041\u606A\u6077\u605F\u604A\u6046\u604D\u6063\u6043\u6064\u6042\u606C\u606B\u6059\u6081\u608D\u60E7\u6083\u609A\u6084\u609B\u6096\u6097\u6092\u60A7\u608B\u60E1\u60B8\u60E0\u60D3\u60B4\u5FF0\u60BD\u60C6\u60B5\u60D8\u614D\u6115\u6106\u60F6\u60F7\u6100\u60F4\u60FA\u6103\u6121\u60FB\u60F1\u610D\u610E\u6147\u613E\u6128\u6127\u614A\u613F\u613C\u612C\u6134\u613D\u6142\u6144\u6173\u6177\u6158\u6159\u615A\u616B\u6174\u616F\u6165\u6171\u615F\u615D\u6153\u6175\u6199\u6196\u6187\u61AC\u6194\u619A\u618A\u6191\u61AB\u61AE\u61CC\u61CA\u61C9\u61F7\u61C8\u61C3\u61C6\u61BA\u61CB\u7F79\u61CD\u61E6\u61E3\u61F6\u61FA\u61F4\u61FF\u61FD\u61FC\u61FE\u6200\u6208\u6209\u620D\u620C\u6214\u621B"],
["9d40", "\u621E\u6221\u622A\u622E\u6230\u6232\u6233\u6241\u624E\u625E\u6263\u625B\u6260\u6268\u627C\u6282\u6289\u627E\u6292\u6293\u6296\u62D4\u6283\u6294\u62D7\u62D1\u62BB\u62CF\u62FF\u62C6\u64D4\u62C8\u62DC\u62CC\u62CA\u62C2\u62C7\u629B\u62C9\u630C\u62EE\u62F1\u6327\u6302\u6308\u62EF\u62F5\u6350\u633E\u634D\u641C\u634F\u6396\u638E\u6380\u63AB\u6376\u63A3\u638F\u6389\u639F\u63B5\u636B"],
["9d80", "\u6369\u63BE\u63E9\u63C0\u63C6\u63E3\u63C9\u63D2\u63F6\u63C4\u6416\u6434\u6406\u6413\u6426\u6436\u651D\u6417\u6428\u640F\u6467\u646F\u6476\u644E\u652A\u6495\u6493\u64A5\u64A9\u6488\u64BC\u64DA\u64D2\u64C5\u64C7\u64BB\u64D8\u64C2\u64F1\u64E7\u8209\u64E0\u64E1\u62AC\u64E3\u64EF\u652C\u64F6\u64F4\u64F2\u64FA\u6500\u64FD\u6518\u651C\u6505\u6524\u6523\u652B\u6534\u6535\u6537\u6536\u6538\u754B\u6548\u6556\u6555\u654D\u6558\u655E\u655D\u6572\u6578\u6582\u6583\u8B8A\u659B\u659F\u65AB\u65B7\u65C3\u65C6\u65C1\u65C4\u65CC\u65D2\u65DB\u65D9\u65E0\u65E1\u65F1\u6772\u660A\u6603\u65FB\u6773\u6635\u6636\u6634\u661C\u664F\u6644\u6649\u6641\u665E\u665D\u6664\u6667\u6668\u665F\u6662\u6670\u6683\u6688\u668E\u6689\u6684\u6698\u669D\u66C1\u66B9\u66C9\u66BE\u66BC"],
["9e40", "\u66C4\u66B8\u66D6\u66DA\u66E0\u663F\u66E6\u66E9\u66F0\u66F5\u66F7\u670F\u6716\u671E\u6726\u6727\u9738\u672E\u673F\u6736\u6741\u6738\u6737\u6746\u675E\u6760\u6759\u6763\u6764\u6789\u6770\u67A9\u677C\u676A\u678C\u678B\u67A6\u67A1\u6785\u67B7\u67EF\u67B4\u67EC\u67B3\u67E9\u67B8\u67E4\u67DE\u67DD\u67E2\u67EE\u67B9\u67CE\u67C6\u67E7\u6A9C\u681E\u6846\u6829\u6840\u684D\u6832\u684E"],
["9e80", "\u68B3\u682B\u6859\u6863\u6877\u687F\u689F\u688F\u68AD\u6894\u689D\u689B\u6883\u6AAE\u68B9\u6874\u68B5\u68A0\u68BA\u690F\u688D\u687E\u6901\u68CA\u6908\u68D8\u6922\u6926\u68E1\u690C\u68CD\u68D4\u68E7\u68D5\u6936\u6912\u6904\u68D7\u68E3\u6925\u68F9\u68E0\u68EF\u6928\u692A\u691A\u6923\u6921\u68C6\u6979\u6977\u695C\u6978\u696B\u6954\u697E\u696E\u6939\u6974\u693D\u6959\u6930\u6961\u695E\u695D\u6981\u696A\u69B2\u69AE\u69D0\u69BF\u69C1\u69D3\u69BE\u69CE\u5BE8\u69CA\u69DD\u69BB\u69C3\u69A7\u6A2E\u6991\u69A0\u699C\u6995\u69B4\u69DE\u69E8\u6A02\u6A1B\u69FF\u6B0A\u69F9\u69F2\u69E7\u6A05\u69B1\u6A1E\u69ED\u6A14\u69EB\u6A0A\u6A12\u6AC1\u6A23\u6A13\u6A44\u6A0C\u6A72\u6A36\u6A78\u6A47\u6A62\u6A59\u6A66\u6A48\u6A38\u6A22\u6A90\u6A8D\u6AA0\u6A84\u6AA2\u6AA3"],
["9f40", "\u6A97\u8617\u6ABB\u6AC3\u6AC2\u6AB8\u6AB3\u6AAC\u6ADE\u6AD1\u6ADF\u6AAA\u6ADA\u6AEA\u6AFB\u6B05\u8616\u6AFA\u6B12\u6B16\u9B31\u6B1F\u6B38\u6B37\u76DC\u6B39\u98EE\u6B47\u6B43\u6B49\u6B50\u6B59\u6B54\u6B5B\u6B5F\u6B61\u6B78\u6B79\u6B7F\u6B80\u6B84\u6B83\u6B8D\u6B98\u6B95\u6B9E\u6BA4\u6BAA\u6BAB\u6BAF\u6BB2\u6BB1\u6BB3\u6BB7\u6BBC\u6BC6\u6BCB\u6BD3\u6BDF\u6BEC\u6BEB\u6BF3\u6BEF"],
["9f80", "\u9EBE\u6C08\u6C13\u6C14\u6C1B\u6C24\u6C23\u6C5E\u6C55\u6C62\u6C6A\u6C82\u6C8D\u6C9A\u6C81\u6C9B\u6C7E\u6C68\u6C73\u6C92\u6C90\u6CC4\u6CF1\u6CD3\u6CBD\u6CD7\u6CC5\u6CDD\u6CAE\u6CB1\u6CBE\u6CBA\u6CDB\u6CEF\u6CD9\u6CEA\u6D1F\u884D\u6D36\u6D2B\u6D3D\u6D38\u6D19\u6D35\u6D33\u6D12\u6D0C\u6D63\u6D93\u6D64\u6D5A\u6D79\u6D59\u6D8E\u6D95\u6FE4\u6D85\u6DF9\u6E15\u6E0A\u6DB5\u6DC7\u6DE6\u6DB8\u6DC6\u6DEC\u6DDE\u6DCC\u6DE8\u6DD2\u6DC5\u6DFA\u6DD9\u6DE4\u6DD5\u6DEA\u6DEE\u6E2D\u6E6E\u6E2E\u6E19\u6E72\u6E5F\u6E3E\u6E23\u6E6B\u6E2B\u6E76\u6E4D\u6E1F\u6E43\u6E3A\u6E4E\u6E24\u6EFF\u6E1D\u6E38\u6E82\u6EAA\u6E98\u6EC9\u6EB7\u6ED3\u6EBD\u6EAF\u6EC4\u6EB2\u6ED4\u6ED5\u6E8F\u6EA5\u6EC2\u6E9F\u6F41\u6F11\u704C\u6EEC\u6EF8\u6EFE\u6F3F\u6EF2\u6F31\u6EEF\u6F32\u6ECC"],
["e040", "\u6F3E\u6F13\u6EF7\u6F86\u6F7A\u6F78\u6F81\u6F80\u6F6F\u6F5B\u6FF3\u6F6D\u6F82\u6F7C\u6F58\u6F8E\u6F91\u6FC2\u6F66\u6FB3\u6FA3\u6FA1\u6FA4\u6FB9\u6FC6\u6FAA\u6FDF\u6FD5\u6FEC\u6FD4\u6FD8\u6FF1\u6FEE\u6FDB\u7009\u700B\u6FFA\u7011\u7001\u700F\u6FFE\u701B\u701A\u6F74\u701D\u7018\u701F\u7030\u703E\u7032\u7051\u7063\u7099\u7092\u70AF\u70F1\u70AC\u70B8\u70B3\u70AE\u70DF\u70CB\u70DD"],
["e080", "\u70D9\u7109\u70FD\u711C\u7119\u7165\u7155\u7188\u7166\u7162\u714C\u7156\u716C\u718F\u71FB\u7184\u7195\u71A8\u71AC\u71D7\u71B9\u71BE\u71D2\u71C9\u71D4\u71CE\u71E0\u71EC\u71E7\u71F5\u71FC\u71F9\u71FF\u720D\u7210\u721B\u7228\u722D\u722C\u7230\u7232\u723B\u723C\u723F\u7240\u7246\u724B\u7258\u7274\u727E\u7282\u7281\u7287\u7292\u7296\u72A2\u72A7\u72B9\u72B2\u72C3\u72C6\u72C4\u72CE\u72D2\u72E2\u72E0\u72E1\u72F9\u72F7\u500F\u7317\u730A\u731C\u7316\u731D\u7334\u732F\u7329\u7325\u733E\u734E\u734F\u9ED8\u7357\u736A\u7368\u7370\u7378\u7375\u737B\u737A\u73C8\u73B3\u73CE\u73BB\u73C0\u73E5\u73EE\u73DE\u74A2\u7405\u746F\u7425\u73F8\u7432\u743A\u7455\u743F\u745F\u7459\u7441\u745C\u7469\u7470\u7463\u746A\u7476\u747E\u748B\u749E\u74A7\u74CA\u74CF\u74D4\u73F1"],
["e140", "\u74E0\u74E3\u74E7\u74E9\u74EE\u74F2\u74F0\u74F1\u74F8\u74F7\u7504\u7503\u7505\u750C\u750E\u750D\u7515\u7513\u751E\u7526\u752C\u753C\u7544\u754D\u754A\u7549\u755B\u7546\u755A\u7569\u7564\u7567\u756B\u756D\u7578\u7576\u7586\u7587\u7574\u758A\u7589\u7582\u7594\u759A\u759D\u75A5\u75A3\u75C2\u75B3\u75C3\u75B5\u75BD\u75B8\u75BC\u75B1\u75CD\u75CA\u75D2\u75D9\u75E3\u75DE\u75FE\u75FF"],
["e180", "\u75FC\u7601\u75F0\u75FA\u75F2\u75F3\u760B\u760D\u7609\u761F\u7627\u7620\u7621\u7622\u7624\u7634\u7630\u763B\u7647\u7648\u7646\u765C\u7658\u7661\u7662\u7668\u7669\u766A\u7667\u766C\u7670\u7672\u7676\u7678\u767C\u7680\u7683\u7688\u768B\u768E\u7696\u7693\u7699\u769A\u76B0\u76B4\u76B8\u76B9\u76BA\u76C2\u76CD\u76D6\u76D2\u76DE\u76E1\u76E5\u76E7\u76EA\u862F\u76FB\u7708\u7707\u7704\u7729\u7724\u771E\u7725\u7726\u771B\u7737\u7738\u7747\u775A\u7768\u776B\u775B\u7765\u777F\u777E\u7779\u778E\u778B\u7791\u77A0\u779E\u77B0\u77B6\u77B9\u77BF\u77BC\u77BD\u77BB\u77C7\u77CD\u77D7\u77DA\u77DC\u77E3\u77EE\u77FC\u780C\u7812\u7926\u7820\u792A\u7845\u788E\u7874\u7886\u787C\u789A\u788C\u78A3\u78B5\u78AA\u78AF\u78D1\u78C6\u78CB\u78D4\u78BE\u78BC\u78C5\u78CA\u78EC"],
["e240", "\u78E7\u78DA\u78FD\u78F4\u7907\u7912\u7911\u7919\u792C\u792B\u7940\u7960\u7957\u795F\u795A\u7955\u7953\u797A\u797F\u798A\u799D\u79A7\u9F4B\u79AA\u79AE\u79B3\u79B9\u79BA\u79C9\u79D5\u79E7\u79EC\u79E1\u79E3\u7A08\u7A0D\u7A18\u7A19\u7A20\u7A1F\u7980\u7A31\u7A3B\u7A3E\u7A37\u7A43\u7A57\u7A49\u7A61\u7A62\u7A69\u9F9D\u7A70\u7A79\u7A7D\u7A88\u7A97\u7A95\u7A98\u7A96\u7AA9\u7AC8\u7AB0"],
["e280", "\u7AB6\u7AC5\u7AC4\u7ABF\u9083\u7AC7\u7ACA\u7ACD\u7ACF\u7AD5\u7AD3\u7AD9\u7ADA\u7ADD\u7AE1\u7AE2\u7AE6\u7AED\u7AF0\u7B02\u7B0F\u7B0A\u7B06\u7B33\u7B18\u7B19\u7B1E\u7B35\u7B28\u7B36\u7B50\u7B7A\u7B04\u7B4D\u7B0B\u7B4C\u7B45\u7B75\u7B65\u7B74\u7B67\u7B70\u7B71\u7B6C\u7B6E\u7B9D\u7B98\u7B9F\u7B8D\u7B9C\u7B9A\u7B8B\u7B92\u7B8F\u7B5D\u7B99\u7BCB\u7BC1\u7BCC\u7BCF\u7BB4\u7BC6\u7BDD\u7BE9\u7C11\u7C14\u7BE6\u7BE5\u7C60\u7C00\u7C07\u7C13\u7BF3\u7BF7\u7C17\u7C0D\u7BF6\u7C23\u7C27\u7C2A\u7C1F\u7C37\u7C2B\u7C3D\u7C4C\u7C43\u7C54\u7C4F\u7C40\u7C50\u7C58\u7C5F\u7C64\u7C56\u7C65\u7C6C\u7C75\u7C83\u7C90\u7CA4\u7CAD\u7CA2\u7CAB\u7CA1\u7CA8\u7CB3\u7CB2\u7CB1\u7CAE\u7CB9\u7CBD\u7CC0\u7CC5\u7CC2\u7CD8\u7CD2\u7CDC\u7CE2\u9B3B\u7CEF\u7CF2\u7CF4\u7CF6\u7CFA\u7D06"],
["e340", "\u7D02\u7D1C\u7D15\u7D0A\u7D45\u7D4B\u7D2E\u7D32\u7D3F\u7D35\u7D46\u7D73\u7D56\u7D4E\u7D72\u7D68\u7D6E\u7D4F\u7D63\u7D93\u7D89\u7D5B\u7D8F\u7D7D\u7D9B\u7DBA\u7DAE\u7DA3\u7DB5\u7DC7\u7DBD\u7DAB\u7E3D\u7DA2\u7DAF\u7DDC\u7DB8\u7D9F\u7DB0\u7DD8\u7DDD\u7DE4\u7DDE\u7DFB\u7DF2\u7DE1\u7E05\u7E0A\u7E23\u7E21\u7E12\u7E31\u7E1F\u7E09\u7E0B\u7E22\u7E46\u7E66\u7E3B\u7E35\u7E39\u7E43\u7E37"],
["e380", "\u7E32\u7E3A\u7E67\u7E5D\u7E56\u7E5E\u7E59\u7E5A\u7E79\u7E6A\u7E69\u7E7C\u7E7B\u7E83\u7DD5\u7E7D\u8FAE\u7E7F\u7E88\u7E89\u7E8C\u7E92\u7E90\u7E93\u7E94\u7E96\u7E8E\u7E9B\u7E9C\u7F38\u7F3A\u7F45\u7F4C\u7F4D\u7F4E\u7F50\u7F51\u7F55\u7F54\u7F58\u7F5F\u7F60\u7F68\u7F69\u7F67\u7F78\u7F82\u7F86\u7F83\u7F88\u7F87\u7F8C\u7F94\u7F9E\u7F9D\u7F9A\u7FA3\u7FAF\u7FB2\u7FB9\u7FAE\u7FB6\u7FB8\u8B71\u7FC5\u7FC6\u7FCA\u7FD5\u7FD4\u7FE1\u7FE6\u7FE9\u7FF3\u7FF9\u98DC\u8006\u8004\u800B\u8012\u8018\u8019\u801C\u8021\u8028\u803F\u803B\u804A\u8046\u8052\u8058\u805A\u805F\u8062\u8068\u8073\u8072\u8070\u8076\u8079\u807D\u807F\u8084\u8086\u8085\u809B\u8093\u809A\u80AD\u5190\u80AC\u80DB\u80E5\u80D9\u80DD\u80C4\u80DA\u80D6\u8109\u80EF\u80F1\u811B\u8129\u8123\u812F\u814B"],
["e440", "\u968B\u8146\u813E\u8153\u8151\u80FC\u8171\u816E\u8165\u8166\u8174\u8183\u8188\u818A\u8180\u8182\u81A0\u8195\u81A4\u81A3\u815F\u8193\u81A9\u81B0\u81B5\u81BE\u81B8\u81BD\u81C0\u81C2\u81BA\u81C9\u81CD\u81D1\u81D9\u81D8\u81C8\u81DA\u81DF\u81E0\u81E7\u81FA\u81FB\u81FE\u8201\u8202\u8205\u8207\u820A\u820D\u8210\u8216\u8229\u822B\u8238\u8233\u8240\u8259\u8258\u825D\u825A\u825F\u8264"],
["e480", "\u8262\u8268\u826A\u826B\u822E\u8271\u8277\u8278\u827E\u828D\u8292\u82AB\u829F\u82BB\u82AC\u82E1\u82E3\u82DF\u82D2\u82F4\u82F3\u82FA\u8393\u8303\u82FB\u82F9\u82DE\u8306\u82DC\u8309\u82D9\u8335\u8334\u8316\u8332\u8331\u8340\u8339\u8350\u8345\u832F\u832B\u8317\u8318\u8385\u839A\u83AA\u839F\u83A2\u8396\u8323\u838E\u8387\u838A\u837C\u83B5\u8373\u8375\u83A0\u8389\u83A8\u83F4\u8413\u83EB\u83CE\u83FD\u8403\u83D8\u840B\u83C1\u83F7\u8407\u83E0\u83F2\u840D\u8422\u8420\u83BD\u8438\u8506\u83FB\u846D\u842A\u843C\u855A\u8484\u8477\u846B\u84AD\u846E\u8482\u8469\u8446\u842C\u846F\u8479\u8435\u84CA\u8462\u84B9\u84BF\u849F\u84D9\u84CD\u84BB\u84DA\u84D0\u84C1\u84C6\u84D6\u84A1\u8521\u84FF\u84F4\u8517\u8518\u852C\u851F\u8515\u8514\u84FC\u8540\u8563\u8558\u8548"],
["e540", "\u8541\u8602\u854B\u8555\u8580\u85A4\u8588\u8591\u858A\u85A8\u856D\u8594\u859B\u85EA\u8587\u859C\u8577\u857E\u8590\u85C9\u85BA\u85CF\u85B9\u85D0\u85D5\u85DD\u85E5\u85DC\u85F9\u860A\u8613\u860B\u85FE\u85FA\u8606\u8622\u861A\u8630\u863F\u864D\u4E55\u8654\u865F\u8667\u8671\u8693\u86A3\u86A9\u86AA\u868B\u868C\u86B6\u86AF\u86C4\u86C6\u86B0\u86C9\u8823\u86AB\u86D4\u86DE\u86E9\u86EC"],
["e580", "\u86DF\u86DB\u86EF\u8712\u8706\u8708\u8700\u8703\u86FB\u8711\u8709\u870D\u86F9\u870A\u8734\u873F\u8737\u873B\u8725\u8729\u871A\u8760\u875F\u8778\u874C\u874E\u8774\u8757\u8768\u876E\u8759\u8753\u8763\u876A\u8805\u87A2\u879F\u8782\u87AF\u87CB\u87BD\u87C0\u87D0\u96D6\u87AB\u87C4\u87B3\u87C7\u87C6\u87BB\u87EF\u87F2\u87E0\u880F\u880D\u87FE\u87F6\u87F7\u880E\u87D2\u8811\u8816\u8815\u8822\u8821\u8831\u8836\u8839\u8827\u883B\u8844\u8842\u8852\u8859\u885E\u8862\u886B\u8881\u887E\u889E\u8875\u887D\u88B5\u8872\u8882\u8897\u8892\u88AE\u8899\u88A2\u888D\u88A4\u88B0\u88BF\u88B1\u88C3\u88C4\u88D4\u88D8\u88D9\u88DD\u88F9\u8902\u88FC\u88F4\u88E8\u88F2\u8904\u890C\u890A\u8913\u8943\u891E\u8925\u892A\u892B\u8941\u8944\u893B\u8936\u8938\u894C\u891D\u8960\u895E"],
["e640", "\u8966\u8964\u896D\u896A\u896F\u8974\u8977\u897E\u8983\u8988\u898A\u8993\u8998\u89A1\u89A9\u89A6\u89AC\u89AF\u89B2\u89BA\u89BD\u89BF\u89C0\u89DA\u89DC\u89DD\u89E7\u89F4\u89F8\u8A03\u8A16\u8A10\u8A0C\u8A1B\u8A1D\u8A25\u8A36\u8A41\u8A5B\u8A52\u8A46\u8A48\u8A7C\u8A6D\u8A6C\u8A62\u8A85\u8A82\u8A84\u8AA8\u8AA1\u8A91\u8AA5\u8AA6\u8A9A\u8AA3\u8AC4\u8ACD\u8AC2\u8ADA\u8AEB\u8AF3\u8AE7"],
["e680", "\u8AE4\u8AF1\u8B14\u8AE0\u8AE2\u8AF7\u8ADE\u8ADB\u8B0C\u8B07\u8B1A\u8AE1\u8B16\u8B10\u8B17\u8B20\u8B33\u97AB\u8B26\u8B2B\u8B3E\u8B28\u8B41\u8B4C\u8B4F\u8B4E\u8B49\u8B56\u8B5B\u8B5A\u8B6B\u8B5F\u8B6C\u8B6F\u8B74\u8B7D\u8B80\u8B8C\u8B8E\u8B92\u8B93\u8B96\u8B99\u8B9A\u8C3A\u8C41\u8C3F\u8C48\u8C4C\u8C4E\u8C50\u8C55\u8C62\u8C6C\u8C78\u8C7A\u8C82\u8C89\u8C85\u8C8A\u8C8D\u8C8E\u8C94\u8C7C\u8C98\u621D\u8CAD\u8CAA\u8CBD\u8CB2\u8CB3\u8CAE\u8CB6\u8CC8\u8CC1\u8CE4\u8CE3\u8CDA\u8CFD\u8CFA\u8CFB\u8D04\u8D05\u8D0A\u8D07\u8D0F\u8D0D\u8D10\u9F4E\u8D13\u8CCD\u8D14\u8D16\u8D67\u8D6D\u8D71\u8D73\u8D81\u8D99\u8DC2\u8DBE\u8DBA\u8DCF\u8DDA\u8DD6\u8DCC\u8DDB\u8DCB\u8DEA\u8DEB\u8DDF\u8DE3\u8DFC\u8E08\u8E09\u8DFF\u8E1D\u8E1E\u8E10\u8E1F\u8E42\u8E35\u8E30\u8E34\u8E4A"],
["e740", "\u8E47\u8E49\u8E4C\u8E50\u8E48\u8E59\u8E64\u8E60\u8E2A\u8E63\u8E55\u8E76\u8E72\u8E7C\u8E81\u8E87\u8E85\u8E84\u8E8B\u8E8A\u8E93\u8E91\u8E94\u8E99\u8EAA\u8EA1\u8EAC\u8EB0\u8EC6\u8EB1\u8EBE\u8EC5\u8EC8\u8ECB\u8EDB\u8EE3\u8EFC\u8EFB\u8EEB\u8EFE\u8F0A\u8F05\u8F15\u8F12\u8F19\u8F13\u8F1C\u8F1F\u8F1B\u8F0C\u8F26\u8F33\u8F3B\u8F39\u8F45\u8F42\u8F3E\u8F4C\u8F49\u8F46\u8F4E\u8F57\u8F5C"],
["e780", "\u8F62\u8F63\u8F64\u8F9C\u8F9F\u8FA3\u8FAD\u8FAF\u8FB7\u8FDA\u8FE5\u8FE2\u8FEA\u8FEF\u9087\u8FF4\u9005\u8FF9\u8FFA\u9011\u9015\u9021\u900D\u901E\u9016\u900B\u9027\u9036\u9035\u9039\u8FF8\u904F\u9050\u9051\u9052\u900E\u9049\u903E\u9056\u9058\u905E\u9068\u906F\u9076\u96A8\u9072\u9082\u907D\u9081\u9080\u908A\u9089\u908F\u90A8\u90AF\u90B1\u90B5\u90E2\u90E4\u6248\u90DB\u9102\u9112\u9119\u9132\u9130\u914A\u9156\u9158\u9163\u9165\u9169\u9173\u9172\u918B\u9189\u9182\u91A2\u91AB\u91AF\u91AA\u91B5\u91B4\u91BA\u91C0\u91C1\u91C9\u91CB\u91D0\u91D6\u91DF\u91E1\u91DB\u91FC\u91F5\u91F6\u921E\u91FF\u9214\u922C\u9215\u9211\u925E\u9257\u9245\u9249\u9264\u9248\u9295\u923F\u924B\u9250\u929C\u9296\u9293\u929B\u925A\u92CF\u92B9\u92B7\u92E9\u930F\u92FA\u9344\u932E"],
["e840", "\u9319\u9322\u931A\u9323\u933A\u9335\u933B\u935C\u9360\u937C\u936E\u9356\u93B0\u93AC\u93AD\u9394\u93B9\u93D6\u93D7\u93E8\u93E5\u93D8\u93C3\u93DD\u93D0\u93C8\u93E4\u941A\u9414\u9413\u9403\u9407\u9410\u9436\u942B\u9435\u9421\u943A\u9441\u9452\u9444\u945B\u9460\u9462\u945E\u946A\u9229\u9470\u9475\u9477\u947D\u945A\u947C\u947E\u9481\u947F\u9582\u9587\u958A\u9594\u9596\u9598\u9599"],
["e880", "\u95A0\u95A8\u95A7\u95AD\u95BC\u95BB\u95B9\u95BE\u95CA\u6FF6\u95C3\u95CD\u95CC\u95D5\u95D4\u95D6\u95DC\u95E1\u95E5\u95E2\u9621\u9628\u962E\u962F\u9642\u964C\u964F\u964B\u9677\u965C\u965E\u965D\u965F\u9666\u9672\u966C\u968D\u9698\u9695\u9697\u96AA\u96A7\u96B1\u96B2\u96B0\u96B4\u96B6\u96B8\u96B9\u96CE\u96CB\u96C9\u96CD\u894D\u96DC\u970D\u96D5\u96F9\u9704\u9706\u9708\u9713\u970E\u9711\u970F\u9716\u9719\u9724\u972A\u9730\u9739\u973D\u973E\u9744\u9746\u9748\u9742\u9749\u975C\u9760\u9764\u9766\u9768\u52D2\u976B\u9771\u9779\u9785\u977C\u9781\u977A\u9786\u978B\u978F\u9790\u979C\u97A8\u97A6\u97A3\u97B3\u97B4\u97C3\u97C6\u97C8\u97CB\u97DC\u97ED\u9F4F\u97F2\u7ADF\u97F6\u97F5\u980F\u980C\u9838\u9824\u9821\u9837\u983D\u9846\u984F\u984B\u986B\u986F\u9870"],
["e940", "\u9871\u9874\u9873\u98AA\u98AF\u98B1\u98B6\u98C4\u98C3\u98C6\u98E9\u98EB\u9903\u9909\u9912\u9914\u9918\u9921\u991D\u991E\u9924\u9920\u992C\u992E\u993D\u993E\u9942\u9949\u9945\u9950\u994B\u9951\u9952\u994C\u9955\u9997\u9998\u99A5\u99AD\u99AE\u99BC\u99DF\u99DB\u99DD\u99D8\u99D1\u99ED\u99EE\u99F1\u99F2\u99FB\u99F8\u9A01\u9A0F\u9A05\u99E2\u9A19\u9A2B\u9A37\u9A45\u9A42\u9A40\u9A43"],
["e980", "\u9A3E\u9A55\u9A4D\u9A5B\u9A57\u9A5F\u9A62\u9A65\u9A64\u9A69\u9A6B\u9A6A\u9AAD\u9AB0\u9ABC\u9AC0\u9ACF\u9AD1\u9AD3\u9AD4\u9ADE\u9ADF\u9AE2\u9AE3\u9AE6\u9AEF\u9AEB\u9AEE\u9AF4\u9AF1\u9AF7\u9AFB\u9B06\u9B18\u9B1A\u9B1F\u9B22\u9B23\u9B25\u9B27\u9B28\u9B29\u9B2A\u9B2E\u9B2F\u9B32\u9B44\u9B43\u9B4F\u9B4D\u9B4E\u9B51\u9B58\u9B74\u9B93\u9B83\u9B91\u9B96\u9B97\u9B9F\u9BA0\u9BA8\u9BB4\u9BC0\u9BCA\u9BB9\u9BC6\u9BCF\u9BD1\u9BD2\u9BE3\u9BE2\u9BE4\u9BD4\u9BE1\u9C3A\u9BF2\u9BF1\u9BF0\u9C15\u9C14\u9C09\u9C13\u9C0C\u9C06\u9C08\u9C12\u9C0A\u9C04\u9C2E\u9C1B\u9C25\u9C24\u9C21\u9C30\u9C47\u9C32\u9C46\u9C3E\u9C5A\u9C60\u9C67\u9C76\u9C78\u9CE7\u9CEC\u9CF0\u9D09\u9D08\u9CEB\u9D03\u9D06\u9D2A\u9D26\u9DAF\u9D23\u9D1F\u9D44\u9D15\u9D12\u9D41\u9D3F\u9D3E\u9D46\u9D48"],
["ea40", "\u9D5D\u9D5E\u9D64\u9D51\u9D50\u9D59\u9D72\u9D89\u9D87\u9DAB\u9D6F\u9D7A\u9D9A\u9DA4\u9DA9\u9DB2\u9DC4\u9DC1\u9DBB\u9DB8\u9DBA\u9DC6\u9DCF\u9DC2\u9DD9\u9DD3\u9DF8\u9DE6\u9DED\u9DEF\u9DFD\u9E1A\u9E1B\u9E1E\u9E75\u9E79\u9E7D\u9E81\u9E88\u9E8B\u9E8C\u9E92\u9E95\u9E91\u9E9D\u9EA5\u9EA9\u9EB8\u9EAA\u9EAD\u9761\u9ECC\u9ECE\u9ECF\u9ED0\u9ED4\u9EDC\u9EDE\u9EDD\u9EE0\u9EE5\u9EE8\u9EEF"],
["ea80", "\u9EF4\u9EF6\u9EF7\u9EF9\u9EFB\u9EFC\u9EFD\u9F07\u9F08\u76B7\u9F15\u9F21\u9F2C\u9F3E\u9F4A\u9F52\u9F54\u9F63\u9F5F\u9F60\u9F61\u9F66\u9F67\u9F6C\u9F6A\u9F77\u9F72\u9F76\u9F95\u9F9C\u9FA0\u582F\u69C7\u9059\u7464\u51DC\u7199"],
["ed40", "\u7E8A\u891C\u9348\u9288\u84DC\u4FC9\u70BB\u6631\u68C8\u92F9\u66FB\u5F45\u4E28\u4EE1\u4EFC\u4F00\u4F03\u4F39\u4F56\u4F92\u4F8A\u4F9A\u4F94\u4FCD\u5040\u5022\u4FFF\u501E\u5046\u5070\u5042\u5094\u50F4\u50D8\u514A\u5164\u519D\u51BE\u51EC\u5215\u529C\u52A6\u52C0\u52DB\u5300\u5307\u5324\u5372\u5393\u53B2\u53DD\uFA0E\u549C\u548A\u54A9\u54FF\u5586\u5759\u5765\u57AC\u57C8\u57C7\uFA0F"],
["ed80", "\uFA10\u589E\u58B2\u590B\u5953\u595B\u595D\u5963\u59A4\u59BA\u5B56\u5BC0\u752F\u5BD8\u5BEC\u5C1E\u5CA6\u5CBA\u5CF5\u5D27\u5D53\uFA11\u5D42\u5D6D\u5DB8\u5DB9\u5DD0\u5F21\u5F34\u5F67\u5FB7\u5FDE\u605D\u6085\u608A\u60DE\u60D5\u6120\u60F2\u6111\u6137\u6130\u6198\u6213\u62A6\u63F5\u6460\u649D\u64CE\u654E\u6600\u6615\u663B\u6609\u662E\u661E\u6624\u6665\u6657\u6659\uFA12\u6673\u6699\u66A0\u66B2\u66BF\u66FA\u670E\uF929\u6766\u67BB\u6852\u67C0\u6801\u6844\u68CF\uFA13\u6968\uFA14\u6998\u69E2\u6A30\u6A6B\u6A46\u6A73\u6A7E\u6AE2\u6AE4\u6BD6\u6C3F\u6C5C\u6C86\u6C6F\u6CDA\u6D04\u6D87\u6D6F\u6D96\u6DAC\u6DCF\u6DF8\u6DF2\u6DFC\u6E39\u6E5C\u6E27\u6E3C\u6EBF\u6F88\u6FB5\u6FF5\u7005\u7007\u7028\u7085\u70AB\u710F\u7104\u715C\u7146\u7147\uFA15\u71C1\u71FE\u72B1"],
["ee40", "\u72BE\u7324\uFA16\u7377\u73BD\u73C9\u73D6\u73E3\u73D2\u7407\u73F5\u7426\u742A\u7429\u742E\u7462\u7489\u749F\u7501\u756F\u7682\u769C\u769E\u769B\u76A6\uFA17\u7746\u52AF\u7821\u784E\u7864\u787A\u7930\uFA18\uFA19\uFA1A\u7994\uFA1B\u799B\u7AD1\u7AE7\uFA1C\u7AEB\u7B9E\uFA1D\u7D48\u7D5C\u7DB7\u7DA0\u7DD6\u7E52\u7F47\u7FA1\uFA1E\u8301\u8362\u837F\u83C7\u83F6\u8448\u84B4\u8553\u8559"],
["ee80", "\u856B\uFA1F\u85B0\uFA20\uFA21\u8807\u88F5\u8A12\u8A37\u8A79\u8AA7\u8ABE\u8ADF\uFA22\u8AF6\u8B53\u8B7F\u8CF0\u8CF4\u8D12\u8D76\uFA23\u8ECF\uFA24\uFA25\u9067\u90DE\uFA26\u9115\u9127\u91DA\u91D7\u91DE\u91ED\u91EE\u91E4\u91E5\u9206\u9210\u920A\u923A\u9240\u923C\u924E\u9259\u9251\u9239\u9267\u92A7\u9277\u9278\u92E7\u92D7\u92D9\u92D0\uFA27\u92D5\u92E0\u92D3\u9325\u9321\u92FB\uFA28\u931E\u92FF\u931D\u9302\u9370\u9357\u93A4\u93C6\u93DE\u93F8\u9431\u9445\u9448\u9592\uF9DC\uFA29\u969D\u96AF\u9733\u973B\u9743\u974D\u974F\u9751\u9755\u9857\u9865\uFA2A\uFA2B\u9927\uFA2C\u999E\u9A4E\u9AD9\u9ADC\u9B75\u9B72\u9B8F\u9BB1\u9BBB\u9C00\u9D70\u9D6B\uFA2D\u9E19\u9ED1"],
["eeef", "\u2170", 9, "\uFFE2\uFFE4\uFF07\uFF02"],
["f040", "\uE000", 62],
["f080", "\uE03F", 124],
["f140", "\uE0BC", 62],
["f180", "\uE0FB", 124],
["f240", "\uE178", 62],
["f280", "\uE1B7", 124],
["f340", "\uE234", 62],
["f380", "\uE273", 124],
["f440", "\uE2F0", 62],
["f480", "\uE32F", 124],
["f540", "\uE3AC", 62],
["f580", "\uE3EB", 124],
["f640", "\uE468", 62],
["f680", "\uE4A7", 124],
["f740", "\uE524", 62],
["f780", "\uE563", 124],
["f840", "\uE5E0", 62],
["f880", "\uE61F", 124],
["f940", "\uE69C"],
["fa40", "\u2170", 9, "\u2160", 9, "\uFFE2\uFFE4\uFF07\uFF02\u3231\u2116\u2121\u2235\u7E8A\u891C\u9348\u9288\u84DC\u4FC9\u70BB\u6631\u68C8\u92F9\u66FB\u5F45\u4E28\u4EE1\u4EFC\u4F00\u4F03\u4F39\u4F56\u4F92\u4F8A\u4F9A\u4F94\u4FCD\u5040\u5022\u4FFF\u501E\u5046\u5070\u5042\u5094\u50F4\u50D8\u514A"],
["fa80", "\u5164\u519D\u51BE\u51EC\u5215\u529C\u52A6\u52C0\u52DB\u5300\u5307\u5324\u5372\u5393\u53B2\u53DD\uFA0E\u549C\u548A\u54A9\u54FF\u5586\u5759\u5765\u57AC\u57C8\u57C7\uFA0F\uFA10\u589E\u58B2\u590B\u5953\u595B\u595D\u5963\u59A4\u59BA\u5B56\u5BC0\u752F\u5BD8\u5BEC\u5C1E\u5CA6\u5CBA\u5CF5\u5D27\u5D53\uFA11\u5D42\u5D6D\u5DB8\u5DB9\u5DD0\u5F21\u5F34\u5F67\u5FB7\u5FDE\u605D\u6085\u608A\u60DE\u60D5\u6120\u60F2\u6111\u6137\u6130\u6198\u6213\u62A6\u63F5\u6460\u649D\u64CE\u654E\u6600\u6615\u663B\u6609\u662E\u661E\u6624\u6665\u6657\u6659\uFA12\u6673\u6699\u66A0\u66B2\u66BF\u66FA\u670E\uF929\u6766\u67BB\u6852\u67C0\u6801\u6844\u68CF\uFA13\u6968\uFA14\u6998\u69E2\u6A30\u6A6B\u6A46\u6A73\u6A7E\u6AE2\u6AE4\u6BD6\u6C3F\u6C5C\u6C86\u6C6F\u6CDA\u6D04\u6D87\u6D6F"],
["fb40", "\u6D96\u6DAC\u6DCF\u6DF8\u6DF2\u6DFC\u6E39\u6E5C\u6E27\u6E3C\u6EBF\u6F88\u6FB5\u6FF5\u7005\u7007\u7028\u7085\u70AB\u710F\u7104\u715C\u7146\u7147\uFA15\u71C1\u71FE\u72B1\u72BE\u7324\uFA16\u7377\u73BD\u73C9\u73D6\u73E3\u73D2\u7407\u73F5\u7426\u742A\u7429\u742E\u7462\u7489\u749F\u7501\u756F\u7682\u769C\u769E\u769B\u76A6\uFA17\u7746\u52AF\u7821\u784E\u7864\u787A\u7930\uFA18\uFA19"],
["fb80", "\uFA1A\u7994\uFA1B\u799B\u7AD1\u7AE7\uFA1C\u7AEB\u7B9E\uFA1D\u7D48\u7D5C\u7DB7\u7DA0\u7DD6\u7E52\u7F47\u7FA1\uFA1E\u8301\u8362\u837F\u83C7\u83F6\u8448\u84B4\u8553\u8559\u856B\uFA1F\u85B0\uFA20\uFA21\u8807\u88F5\u8A12\u8A37\u8A79\u8AA7\u8ABE\u8ADF\uFA22\u8AF6\u8B53\u8B7F\u8CF0\u8CF4\u8D12\u8D76\uFA23\u8ECF\uFA24\uFA25\u9067\u90DE\uFA26\u9115\u9127\u91DA\u91D7\u91DE\u91ED\u91EE\u91E4\u91E5\u9206\u9210\u920A\u923A\u9240\u923C\u924E\u9259\u9251\u9239\u9267\u92A7\u9277\u9278\u92E7\u92D7\u92D9\u92D0\uFA27\u92D5\u92E0\u92D3\u9325\u9321\u92FB\uFA28\u931E\u92FF\u931D\u9302\u9370\u9357\u93A4\u93C6\u93DE\u93F8\u9431\u9445\u9448\u9592\uF9DC\uFA29\u969D\u96AF\u9733\u973B\u9743\u974D\u974F\u9751\u9755\u9857\u9865\uFA2A\uFA2B\u9927\uFA2C\u999E\u9A4E\u9AD9"],
["fc40", "\u9ADC\u9B75\u9B72\u9B8F\u9BB1\u9BBB\u9C00\u9D70\u9D6B\uFA2D\u9E19\u9ED1"]
];
}
});
// node_modules/iconv-lite/encodings/tables/eucjp.json
var require_eucjp = __commonJS({
"node_modules/iconv-lite/encodings/tables/eucjp.json"(exports2, module2) {
module2.exports = [
["0", "\0", 127],
["8ea1", "\uFF61", 62],
["a1a1", "\u3000\u3001\u3002\uFF0C\uFF0E\u30FB\uFF1A\uFF1B\uFF1F\uFF01\u309B\u309C\xB4\uFF40\xA8\uFF3E\uFFE3\uFF3F\u30FD\u30FE\u309D\u309E\u3003\u4EDD\u3005\u3006\u3007\u30FC\u2015\u2010\uFF0F\uFF3C\uFF5E\u2225\uFF5C\u2026\u2025\u2018\u2019\u201C\u201D\uFF08\uFF09\u3014\u3015\uFF3B\uFF3D\uFF5B\uFF5D\u3008", 9, "\uFF0B\uFF0D\xB1\xD7\xF7\uFF1D\u2260\uFF1C\uFF1E\u2266\u2267\u221E\u2234\u2642\u2640\xB0\u2032\u2033\u2103\uFFE5\uFF04\uFFE0\uFFE1\uFF05\uFF03\uFF06\uFF0A\uFF20\xA7\u2606\u2605\u25CB\u25CF\u25CE\u25C7"],
["a2a1", "\u25C6\u25A1\u25A0\u25B3\u25B2\u25BD\u25BC\u203B\u3012\u2192\u2190\u2191\u2193\u3013"],
["a2ba", "\u2208\u220B\u2286\u2287\u2282\u2283\u222A\u2229"],
["a2ca", "\u2227\u2228\uFFE2\u21D2\u21D4\u2200\u2203"],
["a2dc", "\u2220\u22A5\u2312\u2202\u2207\u2261\u2252\u226A\u226B\u221A\u223D\u221D\u2235\u222B\u222C"],
["a2f2", "\u212B\u2030\u266F\u266D\u266A\u2020\u2021\xB6"],
["a2fe", "\u25EF"],
["a3b0", "\uFF10", 9],
["a3c1", "\uFF21", 25],
["a3e1", "\uFF41", 25],
["a4a1", "\u3041", 82],
["a5a1", "\u30A1", 85],
["a6a1", "\u0391", 16, "\u03A3", 6],
["a6c1", "\u03B1", 16, "\u03C3", 6],
["a7a1", "\u0410", 5, "\u0401\u0416", 25],
["a7d1", "\u0430", 5, "\u0451\u0436", 25],
["a8a1", "\u2500\u2502\u250C\u2510\u2518\u2514\u251C\u252C\u2524\u2534\u253C\u2501\u2503\u250F\u2513\u251B\u2517\u2523\u2533\u252B\u253B\u254B\u2520\u252F\u2528\u2537\u253F\u251D\u2530\u2525\u2538\u2542"],
["ada1", "\u2460", 19, "\u2160", 9],
["adc0", "\u3349\u3314\u3322\u334D\u3318\u3327\u3303\u3336\u3351\u3357\u330D\u3326\u3323\u332B\u334A\u333B\u339C\u339D\u339E\u338E\u338F\u33C4\u33A1"],
["addf", "\u337B\u301D\u301F\u2116\u33CD\u2121\u32A4", 4, "\u3231\u3232\u3239\u337E\u337D\u337C\u2252\u2261\u222B\u222E\u2211\u221A\u22A5\u2220\u221F\u22BF\u2235\u2229\u222A"],
["b0a1", "\u4E9C\u5516\u5A03\u963F\u54C0\u611B\u6328\u59F6\u9022\u8475\u831C\u7A50\u60AA\u63E1\u6E25\u65ED\u8466\u82A6\u9BF5\u6893\u5727\u65A1\u6271\u5B9B\u59D0\u867B\u98F4\u7D62\u7DBE\u9B8E\u6216\u7C9F\u88B7\u5B89\u5EB5\u6309\u6697\u6848\u95C7\u978D\u674F\u4EE5\u4F0A\u4F4D\u4F9D\u5049\u56F2\u5937\u59D4\u5A01\u5C09\u60DF\u610F\u6170\u6613\u6905\u70BA\u754F\u7570\u79FB\u7DAD\u7DEF\u80C3\u840E\u8863\u8B02\u9055\u907A\u533B\u4E95\u4EA5\u57DF\u80B2\u90C1\u78EF\u4E00\u58F1\u6EA2\u9038\u7A32\u8328\u828B\u9C2F\u5141\u5370\u54BD\u54E1\u56E0\u59FB\u5F15\u98F2\u6DEB\u80E4\u852D"],
["b1a1", "\u9662\u9670\u96A0\u97FB\u540B\u53F3\u5B87\u70CF\u7FBD\u8FC2\u96E8\u536F\u9D5C\u7ABA\u4E11\u7893\u81FC\u6E26\u5618\u5504\u6B1D\u851A\u9C3B\u59E5\u53A9\u6D66\u74DC\u958F\u5642\u4E91\u904B\u96F2\u834F\u990C\u53E1\u55B6\u5B30\u5F71\u6620\u66F3\u6804\u6C38\u6CF3\u6D29\u745B\u76C8\u7A4E\u9834\u82F1\u885B\u8A60\u92ED\u6DB2\u75AB\u76CA\u99C5\u60A6\u8B01\u8D8A\u95B2\u698E\u53AD\u5186\u5712\u5830\u5944\u5BB4\u5EF6\u6028\u63A9\u63F4\u6CBF\u6F14\u708E\u7114\u7159\u71D5\u733F\u7E01\u8276\u82D1\u8597\u9060\u925B\u9D1B\u5869\u65BC\u6C5A\u7525\u51F9\u592E\u5965\u5F80\u5FDC"],
["b2a1", "\u62BC\u65FA\u6A2A\u6B27\u6BB4\u738B\u7FC1\u8956\u9D2C\u9D0E\u9EC4\u5CA1\u6C96\u837B\u5104\u5C4B\u61B6\u81C6\u6876\u7261\u4E59\u4FFA\u5378\u6069\u6E29\u7A4F\u97F3\u4E0B\u5316\u4EEE\u4F55\u4F3D\u4FA1\u4F73\u52A0\u53EF\u5609\u590F\u5AC1\u5BB6\u5BE1\u79D1\u6687\u679C\u67B6\u6B4C\u6CB3\u706B\u73C2\u798D\u79BE\u7A3C\u7B87\u82B1\u82DB\u8304\u8377\u83EF\u83D3\u8766\u8AB2\u5629\u8CA8\u8FE6\u904E\u971E\u868A\u4FC4\u5CE8\u6211\u7259\u753B\u81E5\u82BD\u86FE\u8CC0\u96C5\u9913\u99D5\u4ECB\u4F1A\u89E3\u56DE\u584A\u58CA\u5EFB\u5FEB\u602A\u6094\u6062\u61D0\u6212\u62D0\u6539"],
["b3a1", "\u9B41\u6666\u68B0\u6D77\u7070\u754C\u7686\u7D75\u82A5\u87F9\u958B\u968E\u8C9D\u51F1\u52BE\u5916\u54B3\u5BB3\u5D16\u6168\u6982\u6DAF\u788D\u84CB\u8857\u8A72\u93A7\u9AB8\u6D6C\u99A8\u86D9\u57A3\u67FF\u86CE\u920E\u5283\u5687\u5404\u5ED3\u62E1\u64B9\u683C\u6838\u6BBB\u7372\u78BA\u7A6B\u899A\u89D2\u8D6B\u8F03\u90ED\u95A3\u9694\u9769\u5B66\u5CB3\u697D\u984D\u984E\u639B\u7B20\u6A2B\u6A7F\u68B6\u9C0D\u6F5F\u5272\u559D\u6070\u62EC\u6D3B\u6E07\u6ED1\u845B\u8910\u8F44\u4E14\u9C39\u53F6\u691B\u6A3A\u9784\u682A\u515C\u7AC3\u84B2\u91DC\u938C\u565B\u9D28\u6822\u8305\u8431"],
["b4a1", "\u7CA5\u5208\u82C5\u74E6\u4E7E\u4F83\u51A0\u5BD2\u520A\u52D8\u52E7\u5DFB\u559A\u582A\u59E6\u5B8C\u5B98\u5BDB\u5E72\u5E79\u60A3\u611F\u6163\u61BE\u63DB\u6562\u67D1\u6853\u68FA\u6B3E\u6B53\u6C57\u6F22\u6F97\u6F45\u74B0\u7518\u76E3\u770B\u7AFF\u7BA1\u7C21\u7DE9\u7F36\u7FF0\u809D\u8266\u839E\u89B3\u8ACC\u8CAB\u9084\u9451\u9593\u9591\u95A2\u9665\u97D3\u9928\u8218\u4E38\u542B\u5CB8\u5DCC\u73A9\u764C\u773C\u5CA9\u7FEB\u8D0B\u96C1\u9811\u9854\u9858\u4F01\u4F0E\u5371\u559C\u5668\u57FA\u5947\u5B09\u5BC4\u5C90\u5E0C\u5E7E\u5FCC\u63EE\u673A\u65D7\u65E2\u671F\u68CB\u68C4"],
["b5a1", "\u6A5F\u5E30\u6BC5\u6C17\u6C7D\u757F\u7948\u5B63\u7A00\u7D00\u5FBD\u898F\u8A18\u8CB4\u8D77\u8ECC\u8F1D\u98E2\u9A0E\u9B3C\u4E80\u507D\u5100\u5993\u5B9C\u622F\u6280\u64EC\u6B3A\u72A0\u7591\u7947\u7FA9\u87FB\u8ABC\u8B70\u63AC\u83CA\u97A0\u5409\u5403\u55AB\u6854\u6A58\u8A70\u7827\u6775\u9ECD\u5374\u5BA2\u811A\u8650\u9006\u4E18\u4E45\u4EC7\u4F11\u53CA\u5438\u5BAE\u5F13\u6025\u6551\u673D\u6C42\u6C72\u6CE3\u7078\u7403\u7A76\u7AAE\u7B08\u7D1A\u7CFE\u7D66\u65E7\u725B\u53BB\u5C45\u5DE8\u62D2\u62E0\u6319\u6E20\u865A\u8A31\u8DDD\u92F8\u6F01\u79A6\u9B5A\u4EA8\u4EAB\u4EAC"],
["b6a1", "\u4F9B\u4FA0\u50D1\u5147\u7AF6\u5171\u51F6\u5354\u5321\u537F\u53EB\u55AC\u5883\u5CE1\u5F37\u5F4A\u602F\u6050\u606D\u631F\u6559\u6A4B\u6CC1\u72C2\u72ED\u77EF\u80F8\u8105\u8208\u854E\u90F7\u93E1\u97FF\u9957\u9A5A\u4EF0\u51DD\u5C2D\u6681\u696D\u5C40\u66F2\u6975\u7389\u6850\u7C81\u50C5\u52E4\u5747\u5DFE\u9326\u65A4\u6B23\u6B3D\u7434\u7981\u79BD\u7B4B\u7DCA\u82B9\u83CC\u887F\u895F\u8B39\u8FD1\u91D1\u541F\u9280\u4E5D\u5036\u53E5\u533A\u72D7\u7396\u77E9\u82E6\u8EAF\u99C6\u99C8\u99D2\u5177\u611A\u865E\u55B0\u7A7A\u5076\u5BD3\u9047\u9685\u4E32\u6ADB\u91E7\u5C51\u5C48"],
["b7a1", "\u6398\u7A9F\u6C93\u9774\u8F61\u7AAA\u718A\u9688\u7C82\u6817\u7E70\u6851\u936C\u52F2\u541B\u85AB\u8A13\u7FA4\u8ECD\u90E1\u5366\u8888\u7941\u4FC2\u50BE\u5211\u5144\u5553\u572D\u73EA\u578B\u5951\u5F62\u5F84\u6075\u6176\u6167\u61A9\u63B2\u643A\u656C\u666F\u6842\u6E13\u7566\u7A3D\u7CFB\u7D4C\u7D99\u7E4B\u7F6B\u830E\u834A\u86CD\u8A08\u8A63\u8B66\u8EFD\u981A\u9D8F\u82B8\u8FCE\u9BE8\u5287\u621F\u6483\u6FC0\u9699\u6841\u5091\u6B20\u6C7A\u6F54\u7A74\u7D50\u8840\u8A23\u6708\u4EF6\u5039\u5026\u5065\u517C\u5238\u5263\u55A7\u570F\u5805\u5ACC\u5EFA\u61B2\u61F8\u62F3\u6372"],
["b8a1", "\u691C\u6A29\u727D\u72AC\u732E\u7814\u786F\u7D79\u770C\u80A9\u898B\u8B19\u8CE2\u8ED2\u9063\u9375\u967A\u9855\u9A13\u9E78\u5143\u539F\u53B3\u5E7B\u5F26\u6E1B\u6E90\u7384\u73FE\u7D43\u8237\u8A00\u8AFA\u9650\u4E4E\u500B\u53E4\u547C\u56FA\u59D1\u5B64\u5DF1\u5EAB\u5F27\u6238\u6545\u67AF\u6E56\u72D0\u7CCA\u88B4\u80A1\u80E1\u83F0\u864E\u8A87\u8DE8\u9237\u96C7\u9867\u9F13\u4E94\u4E92\u4F0D\u5348\u5449\u543E\u5A2F\u5F8C\u5FA1\u609F\u68A7\u6A8E\u745A\u7881\u8A9E\u8AA4\u8B77\u9190\u4E5E\u9BC9\u4EA4\u4F7C\u4FAF\u5019\u5016\u5149\u516C\u529F\u52B9\u52FE\u539A\u53E3\u5411"],
["b9a1", "\u540E\u5589\u5751\u57A2\u597D\u5B54\u5B5D\u5B8F\u5DE5\u5DE7\u5DF7\u5E78\u5E83\u5E9A\u5EB7\u5F18\u6052\u614C\u6297\u62D8\u63A7\u653B\u6602\u6643\u66F4\u676D\u6821\u6897\u69CB\u6C5F\u6D2A\u6D69\u6E2F\u6E9D\u7532\u7687\u786C\u7A3F\u7CE0\u7D05\u7D18\u7D5E\u7DB1\u8015\u8003\u80AF\u80B1\u8154\u818F\u822A\u8352\u884C\u8861\u8B1B\u8CA2\u8CFC\u90CA\u9175\u9271\u783F\u92FC\u95A4\u964D\u9805\u9999\u9AD8\u9D3B\u525B\u52AB\u53F7\u5408\u58D5\u62F7\u6FE0\u8C6A\u8F5F\u9EB9\u514B\u523B\u544A\u56FD\u7A40\u9177\u9D60\u9ED2\u7344\u6F09\u8170\u7511\u5FFD\u60DA\u9AA8\u72DB\u8FBC"],
["baa1", "\u6B64\u9803\u4ECA\u56F0\u5764\u58BE\u5A5A\u6068\u61C7\u660F\u6606\u6839\u68B1\u6DF7\u75D5\u7D3A\u826E\u9B42\u4E9B\u4F50\u53C9\u5506\u5D6F\u5DE6\u5DEE\u67FB\u6C99\u7473\u7802\u8A50\u9396\u88DF\u5750\u5EA7\u632B\u50B5\u50AC\u518D\u6700\u54C9\u585E\u59BB\u5BB0\u5F69\u624D\u63A1\u683D\u6B73\u6E08\u707D\u91C7\u7280\u7815\u7826\u796D\u658E\u7D30\u83DC\u88C1\u8F09\u969B\u5264\u5728\u6750\u7F6A\u8CA1\u51B4\u5742\u962A\u583A\u698A\u80B4\u54B2\u5D0E\u57FC\u7895\u9DFA\u4F5C\u524A\u548B\u643E\u6628\u6714\u67F5\u7A84\u7B56\u7D22\u932F\u685C\u9BAD\u7B39\u5319\u518A\u5237"],
["bba1", "\u5BDF\u62F6\u64AE\u64E6\u672D\u6BBA\u85A9\u96D1\u7690\u9BD6\u634C\u9306\u9BAB\u76BF\u6652\u4E09\u5098\u53C2\u5C71\u60E8\u6492\u6563\u685F\u71E6\u73CA\u7523\u7B97\u7E82\u8695\u8B83\u8CDB\u9178\u9910\u65AC\u66AB\u6B8B\u4ED5\u4ED4\u4F3A\u4F7F\u523A\u53F8\u53F2\u55E3\u56DB\u58EB\u59CB\u59C9\u59FF\u5B50\u5C4D\u5E02\u5E2B\u5FD7\u601D\u6307\u652F\u5B5C\u65AF\u65BD\u65E8\u679D\u6B62\u6B7B\u6C0F\u7345\u7949\u79C1\u7CF8\u7D19\u7D2B\u80A2\u8102\u81F3\u8996\u8A5E\u8A69\u8A66\u8A8C\u8AEE\u8CC7\u8CDC\u96CC\u98FC\u6B6F\u4E8B\u4F3C\u4F8D\u5150\u5B57\u5BFA\u6148\u6301\u6642"],
["bca1", "\u6B21\u6ECB\u6CBB\u723E\u74BD\u75D4\u78C1\u793A\u800C\u8033\u81EA\u8494\u8F9E\u6C50\u9E7F\u5F0F\u8B58\u9D2B\u7AFA\u8EF8\u5B8D\u96EB\u4E03\u53F1\u57F7\u5931\u5AC9\u5BA4\u6089\u6E7F\u6F06\u75BE\u8CEA\u5B9F\u8500\u7BE0\u5072\u67F4\u829D\u5C61\u854A\u7E1E\u820E\u5199\u5C04\u6368\u8D66\u659C\u716E\u793E\u7D17\u8005\u8B1D\u8ECA\u906E\u86C7\u90AA\u501F\u52FA\u5C3A\u6753\u707C\u7235\u914C\u91C8\u932B\u82E5\u5BC2\u5F31\u60F9\u4E3B\u53D6\u5B88\u624B\u6731\u6B8A\u72E9\u73E0\u7A2E\u816B\u8DA3\u9152\u9996\u5112\u53D7\u546A\u5BFF\u6388\u6A39\u7DAC\u9700\u56DA\u53CE\u5468"],
["bda1", "\u5B97\u5C31\u5DDE\u4FEE\u6101\u62FE\u6D32\u79C0\u79CB\u7D42\u7E4D\u7FD2\u81ED\u821F\u8490\u8846\u8972\u8B90\u8E74\u8F2F\u9031\u914B\u916C\u96C6\u919C\u4EC0\u4F4F\u5145\u5341\u5F93\u620E\u67D4\u6C41\u6E0B\u7363\u7E26\u91CD\u9283\u53D4\u5919\u5BBF\u6DD1\u795D\u7E2E\u7C9B\u587E\u719F\u51FA\u8853\u8FF0\u4FCA\u5CFB\u6625\u77AC\u7AE3\u821C\u99FF\u51C6\u5FAA\u65EC\u696F\u6B89\u6DF3\u6E96\u6F64\u76FE\u7D14\u5DE1\u9075\u9187\u9806\u51E6\u521D\u6240\u6691\u66D9\u6E1A\u5EB6\u7DD2\u7F72\u66F8\u85AF\u85F7\u8AF8\u52A9\u53D9\u5973\u5E8F\u5F90\u6055\u92E4\u9664\u50B7\u511F"],
["bea1", "\u52DD\u5320\u5347\u53EC\u54E8\u5546\u5531\u5617\u5968\u59BE\u5A3C\u5BB5\u5C06\u5C0F\u5C11\u5C1A\u5E84\u5E8A\u5EE0\u5F70\u627F\u6284\u62DB\u638C\u6377\u6607\u660C\u662D\u6676\u677E\u68A2\u6A1F\u6A35\u6CBC\u6D88\u6E09\u6E58\u713C\u7126\u7167\u75C7\u7701\u785D\u7901\u7965\u79F0\u7AE0\u7B11\u7CA7\u7D39\u8096\u83D6\u848B\u8549\u885D\u88F3\u8A1F\u8A3C\u8A54\u8A73\u8C61\u8CDE\u91A4\u9266\u937E\u9418\u969C\u9798\u4E0A\u4E08\u4E1E\u4E57\u5197\u5270\u57CE\u5834\u58CC\u5B22\u5E38\u60C5\u64FE\u6761\u6756\u6D44\u72B6\u7573\u7A63\u84B8\u8B72\u91B8\u9320\u5631\u57F4\u98FE"],
["bfa1", "\u62ED\u690D\u6B96\u71ED\u7E54\u8077\u8272\u89E6\u98DF\u8755\u8FB1\u5C3B\u4F38\u4FE1\u4FB5\u5507\u5A20\u5BDD\u5BE9\u5FC3\u614E\u632F\u65B0\u664B\u68EE\u699B\u6D78\u6DF1\u7533\u75B9\u771F\u795E\u79E6\u7D33\u81E3\u82AF\u85AA\u89AA\u8A3A\u8EAB\u8F9B\u9032\u91DD\u9707\u4EBA\u4EC1\u5203\u5875\u58EC\u5C0B\u751A\u5C3D\u814E\u8A0A\u8FC5\u9663\u976D\u7B25\u8ACF\u9808\u9162\u56F3\u53A8\u9017\u5439\u5782\u5E25\u63A8\u6C34\u708A\u7761\u7C8B\u7FE0\u8870\u9042\u9154\u9310\u9318\u968F\u745E\u9AC4\u5D07\u5D69\u6570\u67A2\u8DA8\u96DB\u636E\u6749\u6919\u83C5\u9817\u96C0\u88FE"],
["c0a1", "\u6F84\u647A\u5BF8\u4E16\u702C\u755D\u662F\u51C4\u5236\u52E2\u59D3\u5F81\u6027\u6210\u653F\u6574\u661F\u6674\u68F2\u6816\u6B63\u6E05\u7272\u751F\u76DB\u7CBE\u8056\u58F0\u88FD\u897F\u8AA0\u8A93\u8ACB\u901D\u9192\u9752\u9759\u6589\u7A0E\u8106\u96BB\u5E2D\u60DC\u621A\u65A5\u6614\u6790\u77F3\u7A4D\u7C4D\u7E3E\u810A\u8CAC\u8D64\u8DE1\u8E5F\u78A9\u5207\u62D9\u63A5\u6442\u6298\u8A2D\u7A83\u7BC0\u8AAC\u96EA\u7D76\u820C\u8749\u4ED9\u5148\u5343\u5360\u5BA3\u5C02\u5C16\u5DDD\u6226\u6247\u64B0\u6813\u6834\u6CC9\u6D45\u6D17\u67D3\u6F5C\u714E\u717D\u65CB\u7A7F\u7BAD\u7DDA"],
["c1a1", "\u7E4A\u7FA8\u817A\u821B\u8239\u85A6\u8A6E\u8CCE\u8DF5\u9078\u9077\u92AD\u9291\u9583\u9BAE\u524D\u5584\u6F38\u7136\u5168\u7985\u7E55\u81B3\u7CCE\u564C\u5851\u5CA8\u63AA\u66FE\u66FD\u695A\u72D9\u758F\u758E\u790E\u7956\u79DF\u7C97\u7D20\u7D44\u8607\u8A34\u963B\u9061\u9F20\u50E7\u5275\u53CC\u53E2\u5009\u55AA\u58EE\u594F\u723D\u5B8B\u5C64\u531D\u60E3\u60F3\u635C\u6383\u633F\u63BB\u64CD\u65E9\u66F9\u5DE3\u69CD\u69FD\u6F15\u71E5\u4E89\u75E9\u76F8\u7A93\u7CDF\u7DCF\u7D9C\u8061\u8349\u8358\u846C\u84BC\u85FB\u88C5\u8D70\u9001\u906D\u9397\u971C\u9A12\u50CF\u5897\u618E"],
["c2a1", "\u81D3\u8535\u8D08\u9020\u4FC3\u5074\u5247\u5373\u606F\u6349\u675F\u6E2C\u8DB3\u901F\u4FD7\u5C5E\u8CCA\u65CF\u7D9A\u5352\u8896\u5176\u63C3\u5B58\u5B6B\u5C0A\u640D\u6751\u905C\u4ED6\u591A\u592A\u6C70\u8A51\u553E\u5815\u59A5\u60F0\u6253\u67C1\u8235\u6955\u9640\u99C4\u9A28\u4F53\u5806\u5BFE\u8010\u5CB1\u5E2F\u5F85\u6020\u614B\u6234\u66FF\u6CF0\u6EDE\u80CE\u817F\u82D4\u888B\u8CB8\u9000\u902E\u968A\u9EDB\u9BDB\u4EE3\u53F0\u5927\u7B2C\u918D\u984C\u9DF9\u6EDD\u7027\u5353\u5544\u5B85\u6258\u629E\u62D3\u6CA2\u6FEF\u7422\u8A17\u9438\u6FC1\u8AFE\u8338\u51E7\u86F8\u53EA"],
["c3a1", "\u53E9\u4F46\u9054\u8FB0\u596A\u8131\u5DFD\u7AEA\u8FBF\u68DA\u8C37\u72F8\u9C48\u6A3D\u8AB0\u4E39\u5358\u5606\u5766\u62C5\u63A2\u65E6\u6B4E\u6DE1\u6E5B\u70AD\u77ED\u7AEF\u7BAA\u7DBB\u803D\u80C6\u86CB\u8A95\u935B\u56E3\u58C7\u5F3E\u65AD\u6696\u6A80\u6BB5\u7537\u8AC7\u5024\u77E5\u5730\u5F1B\u6065\u667A\u6C60\u75F4\u7A1A\u7F6E\u81F4\u8718\u9045\u99B3\u7BC9\u755C\u7AF9\u7B51\u84C4\u9010\u79E9\u7A92\u8336\u5AE1\u7740\u4E2D\u4EF2\u5B99\u5FE0\u62BD\u663C\u67F1\u6CE8\u866B\u8877\u8A3B\u914E\u92F3\u99D0\u6A17\u7026\u732A\u82E7\u8457\u8CAF\u4E01\u5146\u51CB\u558B\u5BF5"],
["c4a1", "\u5E16\u5E33\u5E81\u5F14\u5F35\u5F6B\u5FB4\u61F2\u6311\u66A2\u671D\u6F6E\u7252\u753A\u773A\u8074\u8139\u8178\u8776\u8ABF\u8ADC\u8D85\u8DF3\u929A\u9577\u9802\u9CE5\u52C5\u6357\u76F4\u6715\u6C88\u73CD\u8CC3\u93AE\u9673\u6D25\u589C\u690E\u69CC\u8FFD\u939A\u75DB\u901A\u585A\u6802\u63B4\u69FB\u4F43\u6F2C\u67D8\u8FBB\u8526\u7DB4\u9354\u693F\u6F70\u576A\u58F7\u5B2C\u7D2C\u722A\u540A\u91E3\u9DB4\u4EAD\u4F4E\u505C\u5075\u5243\u8C9E\u5448\u5824\u5B9A\u5E1D\u5E95\u5EAD\u5EF7\u5F1F\u608C\u62B5\u633A\u63D0\u68AF\u6C40\u7887\u798E\u7A0B\u7DE0\u8247\u8A02\u8AE6\u8E44\u9013"],
["c5a1", "\u90B8\u912D\u91D8\u9F0E\u6CE5\u6458\u64E2\u6575\u6EF4\u7684\u7B1B\u9069\u93D1\u6EBA\u54F2\u5FB9\u64A4\u8F4D\u8FED\u9244\u5178\u586B\u5929\u5C55\u5E97\u6DFB\u7E8F\u751C\u8CBC\u8EE2\u985B\u70B9\u4F1D\u6BBF\u6FB1\u7530\u96FB\u514E\u5410\u5835\u5857\u59AC\u5C60\u5F92\u6597\u675C\u6E21\u767B\u83DF\u8CED\u9014\u90FD\u934D\u7825\u783A\u52AA\u5EA6\u571F\u5974\u6012\u5012\u515A\u51AC\u51CD\u5200\u5510\u5854\u5858\u5957\u5B95\u5CF6\u5D8B\u60BC\u6295\u642D\u6771\u6843\u68BC\u68DF\u76D7\u6DD8\u6E6F\u6D9B\u706F\u71C8\u5F53\u75D8\u7977\u7B49\u7B54\u7B52\u7CD6\u7D71\u5230"],
["c6a1", "\u8463\u8569\u85E4\u8A0E\u8B04\u8C46\u8E0F\u9003\u900F\u9419\u9676\u982D\u9A30\u95D8\u50CD\u52D5\u540C\u5802\u5C0E\u61A7\u649E\u6D1E\u77B3\u7AE5\u80F4\u8404\u9053\u9285\u5CE0\u9D07\u533F\u5F97\u5FB3\u6D9C\u7279\u7763\u79BF\u7BE4\u6BD2\u72EC\u8AAD\u6803\u6A61\u51F8\u7A81\u6934\u5C4A\u9CF6\u82EB\u5BC5\u9149\u701E\u5678\u5C6F\u60C7\u6566\u6C8C\u8C5A\u9041\u9813\u5451\u66C7\u920D\u5948\u90A3\u5185\u4E4D\u51EA\u8599\u8B0E\u7058\u637A\u934B\u6962\u99B4\u7E04\u7577\u5357\u6960\u8EDF\u96E3\u6C5D\u4E8C\u5C3C\u5F10\u8FE9\u5302\u8CD1\u8089\u8679\u5EFF\u65E5\u4E73\u5165"],
["c7a1", "\u5982\u5C3F\u97EE\u4EFB\u598A\u5FCD\u8A8D\u6FE1\u79B0\u7962\u5BE7\u8471\u732B\u71B1\u5E74\u5FF5\u637B\u649A\u71C3\u7C98\u4E43\u5EFC\u4E4B\u57DC\u56A2\u60A9\u6FC3\u7D0D\u80FD\u8133\u81BF\u8FB2\u8997\u86A4\u5DF4\u628A\u64AD\u8987\u6777\u6CE2\u6D3E\u7436\u7834\u5A46\u7F75\u82AD\u99AC\u4FF3\u5EC3\u62DD\u6392\u6557\u676F\u76C3\u724C\u80CC\u80BA\u8F29\u914D\u500D\u57F9\u5A92\u6885\u6973\u7164\u72FD\u8CB7\u58F2\u8CE0\u966A\u9019\u877F\u79E4\u77E7\u8429\u4F2F\u5265\u535A\u62CD\u67CF\u6CCA\u767D\u7B94\u7C95\u8236\u8584\u8FEB\u66DD\u6F20\u7206\u7E1B\u83AB\u99C1\u9EA6"],
["c8a1", "\u51FD\u7BB1\u7872\u7BB8\u8087\u7B48\u6AE8\u5E61\u808C\u7551\u7560\u516B\u9262\u6E8C\u767A\u9197\u9AEA\u4F10\u7F70\u629C\u7B4F\u95A5\u9CE9\u567A\u5859\u86E4\u96BC\u4F34\u5224\u534A\u53CD\u53DB\u5E06\u642C\u6591\u677F\u6C3E\u6C4E\u7248\u72AF\u73ED\u7554\u7E41\u822C\u85E9\u8CA9\u7BC4\u91C6\u7169\u9812\u98EF\u633D\u6669\u756A\u76E4\u78D0\u8543\u86EE\u532A\u5351\u5426\u5983\u5E87\u5F7C\u60B2\u6249\u6279\u62AB\u6590\u6BD4\u6CCC\u75B2\u76AE\u7891\u79D8\u7DCB\u7F77\u80A5\u88AB\u8AB9\u8CBB\u907F\u975E\u98DB\u6A0B\u7C38\u5099\u5C3E\u5FAE\u6787\u6BD8\u7435\u7709\u7F8E"],
["c9a1", "\u9F3B\u67CA\u7A17\u5339\u758B\u9AED\u5F66\u819D\u83F1\u8098\u5F3C\u5FC5\u7562\u7B46\u903C\u6867\u59EB\u5A9B\u7D10\u767E\u8B2C\u4FF5\u5F6A\u6A19\u6C37\u6F02\u74E2\u7968\u8868\u8A55\u8C79\u5EDF\u63CF\u75C5\u79D2\u82D7\u9328\u92F2\u849C\u86ED\u9C2D\u54C1\u5F6C\u658C\u6D5C\u7015\u8CA7\u8CD3\u983B\u654F\u74F6\u4E0D\u4ED8\u57E0\u592B\u5A66\u5BCC\u51A8\u5E03\u5E9C\u6016\u6276\u6577\u65A7\u666E\u6D6E\u7236\u7B26\u8150\u819A\u8299\u8B5C\u8CA0\u8CE6\u8D74\u961C\u9644\u4FAE\u64AB\u6B66\u821E\u8461\u856A\u90E8\u5C01\u6953\u98A8\u847A\u8557\u4F0F\u526F\u5FA9\u5E45\u670D"],
["caa1", "\u798F\u8179\u8907\u8986\u6DF5\u5F17\u6255\u6CB8\u4ECF\u7269\u9B92\u5206\u543B\u5674\u58B3\u61A4\u626E\u711A\u596E\u7C89\u7CDE\u7D1B\u96F0\u6587\u805E\u4E19\u4F75\u5175\u5840\u5E63\u5E73\u5F0A\u67C4\u4E26\u853D\u9589\u965B\u7C73\u9801\u50FB\u58C1\u7656\u78A7\u5225\u77A5\u8511\u7B86\u504F\u5909\u7247\u7BC7\u7DE8\u8FBA\u8FD4\u904D\u4FBF\u52C9\u5A29\u5F01\u97AD\u4FDD\u8217\u92EA\u5703\u6355\u6B69\u752B\u88DC\u8F14\u7A42\u52DF\u5893\u6155\u620A\u66AE\u6BCD\u7C3F\u83E9\u5023\u4FF8\u5305\u5446\u5831\u5949\u5B9D\u5CF0\u5CEF\u5D29\u5E96\u62B1\u6367\u653E\u65B9\u670B"],
["cba1", "\u6CD5\u6CE1\u70F9\u7832\u7E2B\u80DE\u82B3\u840C\u84EC\u8702\u8912\u8A2A\u8C4A\u90A6\u92D2\u98FD\u9CF3\u9D6C\u4E4F\u4EA1\u508D\u5256\u574A\u59A8\u5E3D\u5FD8\u5FD9\u623F\u66B4\u671B\u67D0\u68D2\u5192\u7D21\u80AA\u81A8\u8B00\u8C8C\u8CBF\u927E\u9632\u5420\u982C\u5317\u50D5\u535C\u58A8\u64B2\u6734\u7267\u7766\u7A46\u91E6\u52C3\u6CA1\u6B86\u5800\u5E4C\u5954\u672C\u7FFB\u51E1\u76C6\u6469\u78E8\u9B54\u9EBB\u57CB\u59B9\u6627\u679A\u6BCE\u54E9\u69D9\u5E55\u819C\u6795\u9BAA\u67FE\u9C52\u685D\u4EA6\u4FE3\u53C8\u62B9\u672B\u6CAB\u8FC4\u4FAD\u7E6D\u9EBF\u4E07\u6162\u6E80"],
["cca1", "\u6F2B\u8513\u5473\u672A\u9B45\u5DF3\u7B95\u5CAC\u5BC6\u871C\u6E4A\u84D1\u7A14\u8108\u5999\u7C8D\u6C11\u7720\u52D9\u5922\u7121\u725F\u77DB\u9727\u9D61\u690B\u5A7F\u5A18\u51A5\u540D\u547D\u660E\u76DF\u8FF7\u9298\u9CF4\u59EA\u725D\u6EC5\u514D\u68C9\u7DBF\u7DEC\u9762\u9EBA\u6478\u6A21\u8302\u5984\u5B5F\u6BDB\u731B\u76F2\u7DB2\u8017\u8499\u5132\u6728\u9ED9\u76EE\u6762\u52FF\u9905\u5C24\u623B\u7C7E\u8CB0\u554F\u60B6\u7D0B\u9580\u5301\u4E5F\u51B6\u591C\u723A\u8036\u91CE\u5F25\u77E2\u5384\u5F79\u7D04\u85AC\u8A33\u8E8D\u9756\u67F3\u85AE\u9453\u6109\u6108\u6CB9\u7652"],
["cda1", "\u8AED\u8F38\u552F\u4F51\u512A\u52C7\u53CB\u5BA5\u5E7D\u60A0\u6182\u63D6\u6709\u67DA\u6E67\u6D8C\u7336\u7337\u7531\u7950\u88D5\u8A98\u904A\u9091\u90F5\u96C4\u878D\u5915\u4E88\u4F59\u4E0E\u8A89\u8F3F\u9810\u50AD\u5E7C\u5996\u5BB9\u5EB8\u63DA\u63FA\u64C1\u66DC\u694A\u69D8\u6D0B\u6EB6\u7194\u7528\u7AAF\u7F8A\u8000\u8449\u84C9\u8981\u8B21\u8E0A\u9065\u967D\u990A\u617E\u6291\u6B32\u6C83\u6D74\u7FCC\u7FFC\u6DC0\u7F85\u87BA\u88F8\u6765\u83B1\u983C\u96F7\u6D1B\u7D61\u843D\u916A\u4E71\u5375\u5D50\u6B04\u6FEB\u85CD\u862D\u89A7\u5229\u540F\u5C65\u674E\u68A8\u7406\u7483"],
["cea1", "\u75E2\u88CF\u88E1\u91CC\u96E2\u9678\u5F8B\u7387\u7ACB\u844E\u63A0\u7565\u5289\u6D41\u6E9C\u7409\u7559\u786B\u7C92\u9686\u7ADC\u9F8D\u4FB6\u616E\u65C5\u865C\u4E86\u4EAE\u50DA\u4E21\u51CC\u5BEE\u6599\u6881\u6DBC\u731F\u7642\u77AD\u7A1C\u7CE7\u826F\u8AD2\u907C\u91CF\u9675\u9818\u529B\u7DD1\u502B\u5398\u6797\u6DCB\u71D0\u7433\u81E8\u8F2A\u96A3\u9C57\u9E9F\u7460\u5841\u6D99\u7D2F\u985E\u4EE4\u4F36\u4F8B\u51B7\u52B1\u5DBA\u601C\u73B2\u793C\u82D3\u9234\u96B7\u96F6\u970A\u9E97\u9F62\u66A6\u6B74\u5217\u52A3\u70C8\u88C2\u5EC9\u604B\u6190\u6F23\u7149\u7C3E\u7DF4\u806F"],
["cfa1", "\u84EE\u9023\u932C\u5442\u9B6F\u6AD3\u7089\u8CC2\u8DEF\u9732\u52B4\u5A41\u5ECA\u5F04\u6717\u697C\u6994\u6D6A\u6F0F\u7262\u72FC\u7BED\u8001\u807E\u874B\u90CE\u516D\u9E93\u7984\u808B\u9332\u8AD6\u502D\u548C\u8A71\u6B6A\u8CC4\u8107\u60D1\u67A0\u9DF2\u4E99\u4E98\u9C10\u8A6B\u85C1\u8568\u6900\u6E7E\u7897\u8155"],
["d0a1", "\u5F0C\u4E10\u4E15\u4E2A\u4E31\u4E36\u4E3C\u4E3F\u4E42\u4E56\u4E58\u4E82\u4E85\u8C6B\u4E8A\u8212\u5F0D\u4E8E\u4E9E\u4E9F\u4EA0\u4EA2\u4EB0\u4EB3\u4EB6\u4ECE\u4ECD\u4EC4\u4EC6\u4EC2\u4ED7\u4EDE\u4EED\u4EDF\u4EF7\u4F09\u4F5A\u4F30\u4F5B\u4F5D\u4F57\u4F47\u4F76\u4F88\u4F8F\u4F98\u4F7B\u4F69\u4F70\u4F91\u4F6F\u4F86\u4F96\u5118\u4FD4\u4FDF\u4FCE\u4FD8\u4FDB\u4FD1\u4FDA\u4FD0\u4FE4\u4FE5\u501A\u5028\u5014\u502A\u5025\u5005\u4F1C\u4FF6\u5021\u5029\u502C\u4FFE\u4FEF\u5011\u5006\u5043\u5047\u6703\u5055\u5050\u5048\u505A\u5056\u506C\u5078\u5080\u509A\u5085\u50B4\u50B2"],
["d1a1", "\u50C9\u50CA\u50B3\u50C2\u50D6\u50DE\u50E5\u50ED\u50E3\u50EE\u50F9\u50F5\u5109\u5101\u5102\u5116\u5115\u5114\u511A\u5121\u513A\u5137\u513C\u513B\u513F\u5140\u5152\u514C\u5154\u5162\u7AF8\u5169\u516A\u516E\u5180\u5182\u56D8\u518C\u5189\u518F\u5191\u5193\u5195\u5196\u51A4\u51A6\u51A2\u51A9\u51AA\u51AB\u51B3\u51B1\u51B2\u51B0\u51B5\u51BD\u51C5\u51C9\u51DB\u51E0\u8655\u51E9\u51ED\u51F0\u51F5\u51FE\u5204\u520B\u5214\u520E\u5227\u522A\u522E\u5233\u5239\u524F\u5244\u524B\u524C\u525E\u5254\u526A\u5274\u5269\u5273\u527F\u527D\u528D\u5294\u5292\u5271\u5288\u5291\u8FA8"],
["d2a1", "\u8FA7\u52AC\u52AD\u52BC\u52B5\u52C1\u52CD\u52D7\u52DE\u52E3\u52E6\u98ED\u52E0\u52F3\u52F5\u52F8\u52F9\u5306\u5308\u7538\u530D\u5310\u530F\u5315\u531A\u5323\u532F\u5331\u5333\u5338\u5340\u5346\u5345\u4E17\u5349\u534D\u51D6\u535E\u5369\u536E\u5918\u537B\u5377\u5382\u5396\u53A0\u53A6\u53A5\u53AE\u53B0\u53B6\u53C3\u7C12\u96D9\u53DF\u66FC\u71EE\u53EE\u53E8\u53ED\u53FA\u5401\u543D\u5440\u542C\u542D\u543C\u542E\u5436\u5429\u541D\u544E\u548F\u5475\u548E\u545F\u5471\u5477\u5470\u5492\u547B\u5480\u5476\u5484\u5490\u5486\u54C7\u54A2\u54B8\u54A5\u54AC\u54C4\u54C8\u54A8"],
["d3a1", "\u54AB\u54C2\u54A4\u54BE\u54BC\u54D8\u54E5\u54E6\u550F\u5514\u54FD\u54EE\u54ED\u54FA\u54E2\u5539\u5540\u5563\u554C\u552E\u555C\u5545\u5556\u5557\u5538\u5533\u555D\u5599\u5580\u54AF\u558A\u559F\u557B\u557E\u5598\u559E\u55AE\u557C\u5583\u55A9\u5587\u55A8\u55DA\u55C5\u55DF\u55C4\u55DC\u55E4\u55D4\u5614\u55F7\u5616\u55FE\u55FD\u561B\u55F9\u564E\u5650\u71DF\u5634\u5636\u5632\u5638\u566B\u5664\u562F\u566C\u566A\u5686\u5680\u568A\u56A0\u5694\u568F\u56A5\u56AE\u56B6\u56B4\u56C2\u56BC\u56C1\u56C3\u56C0\u56C8\u56CE\u56D1\u56D3\u56D7\u56EE\u56F9\u5700\u56FF\u5704\u5709"],
["d4a1", "\u5708\u570B\u570D\u5713\u5718\u5716\u55C7\u571C\u5726\u5737\u5738\u574E\u573B\u5740\u574F\u5769\u57C0\u5788\u5761\u577F\u5789\u5793\u57A0\u57B3\u57A4\u57AA\u57B0\u57C3\u57C6\u57D4\u57D2\u57D3\u580A\u57D6\u57E3\u580B\u5819\u581D\u5872\u5821\u5862\u584B\u5870\u6BC0\u5852\u583D\u5879\u5885\u58B9\u589F\u58AB\u58BA\u58DE\u58BB\u58B8\u58AE\u58C5\u58D3\u58D1\u58D7\u58D9\u58D8\u58E5\u58DC\u58E4\u58DF\u58EF\u58FA\u58F9\u58FB\u58FC\u58FD\u5902\u590A\u5910\u591B\u68A6\u5925\u592C\u592D\u5932\u5938\u593E\u7AD2\u5955\u5950\u594E\u595A\u5958\u5962\u5960\u5967\u596C\u5969"],
["d5a1", "\u5978\u5981\u599D\u4F5E\u4FAB\u59A3\u59B2\u59C6\u59E8\u59DC\u598D\u59D9\u59DA\u5A25\u5A1F\u5A11\u5A1C\u5A09\u5A1A\u5A40\u5A6C\u5A49\u5A35\u5A36\u5A62\u5A6A\u5A9A\u5ABC\u5ABE\u5ACB\u5AC2\u5ABD\u5AE3\u5AD7\u5AE6\u5AE9\u5AD6\u5AFA\u5AFB\u5B0C\u5B0B\u5B16\u5B32\u5AD0\u5B2A\u5B36\u5B3E\u5B43\u5B45\u5B40\u5B51\u5B55\u5B5A\u5B5B\u5B65\u5B69\u5B70\u5B73\u5B75\u5B78\u6588\u5B7A\u5B80\u5B83\u5BA6\u5BB8\u5BC3\u5BC7\u5BC9\u5BD4\u5BD0\u5BE4\u5BE6\u5BE2\u5BDE\u5BE5\u5BEB\u5BF0\u5BF6\u5BF3\u5C05\u5C07\u5C08\u5C0D\u5C13\u5C20\u5C22\u5C28\u5C38\u5C39\u5C41\u5C46\u5C4E\u5C53"],
["d6a1", "\u5C50\u5C4F\u5B71\u5C6C\u5C6E\u4E62\u5C76\u5C79\u5C8C\u5C91\u5C94\u599B\u5CAB\u5CBB\u5CB6\u5CBC\u5CB7\u5CC5\u5CBE\u5CC7\u5CD9\u5CE9\u5CFD\u5CFA\u5CED\u5D8C\u5CEA\u5D0B\u5D15\u5D17\u5D5C\u5D1F\u5D1B\u5D11\u5D14\u5D22\u5D1A\u5D19\u5D18\u5D4C\u5D52\u5D4E\u5D4B\u5D6C\u5D73\u5D76\u5D87\u5D84\u5D82\u5DA2\u5D9D\u5DAC\u5DAE\u5DBD\u5D90\u5DB7\u5DBC\u5DC9\u5DCD\u5DD3\u5DD2\u5DD6\u5DDB\u5DEB\u5DF2\u5DF5\u5E0B\u5E1A\u5E19\u5E11\u5E1B\u5E36\u5E37\u5E44\u5E43\u5E40\u5E4E\u5E57\u5E54\u5E5F\u5E62\u5E64\u5E47\u5E75\u5E76\u5E7A\u9EBC\u5E7F\u5EA0\u5EC1\u5EC2\u5EC8\u5ED0\u5ECF"],
["d7a1", "\u5ED6\u5EE3\u5EDD\u5EDA\u5EDB\u5EE2\u5EE1\u5EE8\u5EE9\u5EEC\u5EF1\u5EF3\u5EF0\u5EF4\u5EF8\u5EFE\u5F03\u5F09\u5F5D\u5F5C\u5F0B\u5F11\u5F16\u5F29\u5F2D\u5F38\u5F41\u5F48\u5F4C\u5F4E\u5F2F\u5F51\u5F56\u5F57\u5F59\u5F61\u5F6D\u5F73\u5F77\u5F83\u5F82\u5F7F\u5F8A\u5F88\u5F91\u5F87\u5F9E\u5F99\u5F98\u5FA0\u5FA8\u5FAD\u5FBC\u5FD6\u5FFB\u5FE4\u5FF8\u5FF1\u5FDD\u60B3\u5FFF\u6021\u6060\u6019\u6010\u6029\u600E\u6031\u601B\u6015\u602B\u6026\u600F\u603A\u605A\u6041\u606A\u6077\u605F\u604A\u6046\u604D\u6063\u6043\u6064\u6042\u606C\u606B\u6059\u6081\u608D\u60E7\u6083\u609A"],
["d8a1", "\u6084\u609B\u6096\u6097\u6092\u60A7\u608B\u60E1\u60B8\u60E0\u60D3\u60B4\u5FF0\u60BD\u60C6\u60B5\u60D8\u614D\u6115\u6106\u60F6\u60F7\u6100\u60F4\u60FA\u6103\u6121\u60FB\u60F1\u610D\u610E\u6147\u613E\u6128\u6127\u614A\u613F\u613C\u612C\u6134\u613D\u6142\u6144\u6173\u6177\u6158\u6159\u615A\u616B\u6174\u616F\u6165\u6171\u615F\u615D\u6153\u6175\u6199\u6196\u6187\u61AC\u6194\u619A\u618A\u6191\u61AB\u61AE\u61CC\u61CA\u61C9\u61F7\u61C8\u61C3\u61C6\u61BA\u61CB\u7F79\u61CD\u61E6\u61E3\u61F6\u61FA\u61F4\u61FF\u61FD\u61FC\u61FE\u6200\u6208\u6209\u620D\u620C\u6214\u621B"],
["d9a1", "\u621E\u6221\u622A\u622E\u6230\u6232\u6233\u6241\u624E\u625E\u6263\u625B\u6260\u6268\u627C\u6282\u6289\u627E\u6292\u6293\u6296\u62D4\u6283\u6294\u62D7\u62D1\u62BB\u62CF\u62FF\u62C6\u64D4\u62C8\u62DC\u62CC\u62CA\u62C2\u62C7\u629B\u62C9\u630C\u62EE\u62F1\u6327\u6302\u6308\u62EF\u62F5\u6350\u633E\u634D\u641C\u634F\u6396\u638E\u6380\u63AB\u6376\u63A3\u638F\u6389\u639F\u63B5\u636B\u6369\u63BE\u63E9\u63C0\u63C6\u63E3\u63C9\u63D2\u63F6\u63C4\u6416\u6434\u6406\u6413\u6426\u6436\u651D\u6417\u6428\u640F\u6467\u646F\u6476\u644E\u652A\u6495\u6493\u64A5\u64A9\u6488\u64BC"],
["daa1", "\u64DA\u64D2\u64C5\u64C7\u64BB\u64D8\u64C2\u64F1\u64E7\u8209\u64E0\u64E1\u62AC\u64E3\u64EF\u652C\u64F6\u64F4\u64F2\u64FA\u6500\u64FD\u6518\u651C\u6505\u6524\u6523\u652B\u6534\u6535\u6537\u6536\u6538\u754B\u6548\u6556\u6555\u654D\u6558\u655E\u655D\u6572\u6578\u6582\u6583\u8B8A\u659B\u659F\u65AB\u65B7\u65C3\u65C6\u65C1\u65C4\u65CC\u65D2\u65DB\u65D9\u65E0\u65E1\u65F1\u6772\u660A\u6603\u65FB\u6773\u6635\u6636\u6634\u661C\u664F\u6644\u6649\u6641\u665E\u665D\u6664\u6667\u6668\u665F\u6662\u6670\u6683\u6688\u668E\u6689\u6684\u6698\u669D\u66C1\u66B9\u66C9\u66BE\u66BC"],
["dba1", "\u66C4\u66B8\u66D6\u66DA\u66E0\u663F\u66E6\u66E9\u66F0\u66F5\u66F7\u670F\u6716\u671E\u6726\u6727\u9738\u672E\u673F\u6736\u6741\u6738\u6737\u6746\u675E\u6760\u6759\u6763\u6764\u6789\u6770\u67A9\u677C\u676A\u678C\u678B\u67A6\u67A1\u6785\u67B7\u67EF\u67B4\u67EC\u67B3\u67E9\u67B8\u67E4\u67DE\u67DD\u67E2\u67EE\u67B9\u67CE\u67C6\u67E7\u6A9C\u681E\u6846\u6829\u6840\u684D\u6832\u684E\u68B3\u682B\u6859\u6863\u6877\u687F\u689F\u688F\u68AD\u6894\u689D\u689B\u6883\u6AAE\u68B9\u6874\u68B5\u68A0\u68BA\u690F\u688D\u687E\u6901\u68CA\u6908\u68D8\u6922\u6926\u68E1\u690C\u68CD"],
["dca1", "\u68D4\u68E7\u68D5\u6936\u6912\u6904\u68D7\u68E3\u6925\u68F9\u68E0\u68EF\u6928\u692A\u691A\u6923\u6921\u68C6\u6979\u6977\u695C\u6978\u696B\u6954\u697E\u696E\u6939\u6974\u693D\u6959\u6930\u6961\u695E\u695D\u6981\u696A\u69B2\u69AE\u69D0\u69BF\u69C1\u69D3\u69BE\u69CE\u5BE8\u69CA\u69DD\u69BB\u69C3\u69A7\u6A2E\u6991\u69A0\u699C\u6995\u69B4\u69DE\u69E8\u6A02\u6A1B\u69FF\u6B0A\u69F9\u69F2\u69E7\u6A05\u69B1\u6A1E\u69ED\u6A14\u69EB\u6A0A\u6A12\u6AC1\u6A23\u6A13\u6A44\u6A0C\u6A72\u6A36\u6A78\u6A47\u6A62\u6A59\u6A66\u6A48\u6A38\u6A22\u6A90\u6A8D\u6AA0\u6A84\u6AA2\u6AA3"],
["dda1", "\u6A97\u8617\u6ABB\u6AC3\u6AC2\u6AB8\u6AB3\u6AAC\u6ADE\u6AD1\u6ADF\u6AAA\u6ADA\u6AEA\u6AFB\u6B05\u8616\u6AFA\u6B12\u6B16\u9B31\u6B1F\u6B38\u6B37\u76DC\u6B39\u98EE\u6B47\u6B43\u6B49\u6B50\u6B59\u6B54\u6B5B\u6B5F\u6B61\u6B78\u6B79\u6B7F\u6B80\u6B84\u6B83\u6B8D\u6B98\u6B95\u6B9E\u6BA4\u6BAA\u6BAB\u6BAF\u6BB2\u6BB1\u6BB3\u6BB7\u6BBC\u6BC6\u6BCB\u6BD3\u6BDF\u6BEC\u6BEB\u6BF3\u6BEF\u9EBE\u6C08\u6C13\u6C14\u6C1B\u6C24\u6C23\u6C5E\u6C55\u6C62\u6C6A\u6C82\u6C8D\u6C9A\u6C81\u6C9B\u6C7E\u6C68\u6C73\u6C92\u6C90\u6CC4\u6CF1\u6CD3\u6CBD\u6CD7\u6CC5\u6CDD\u6CAE\u6CB1\u6CBE"],
["dea1", "\u6CBA\u6CDB\u6CEF\u6CD9\u6CEA\u6D1F\u884D\u6D36\u6D2B\u6D3D\u6D38\u6D19\u6D35\u6D33\u6D12\u6D0C\u6D63\u6D93\u6D64\u6D5A\u6D79\u6D59\u6D8E\u6D95\u6FE4\u6D85\u6DF9\u6E15\u6E0A\u6DB5\u6DC7\u6DE6\u6DB8\u6DC6\u6DEC\u6DDE\u6DCC\u6DE8\u6DD2\u6DC5\u6DFA\u6DD9\u6DE4\u6DD5\u6DEA\u6DEE\u6E2D\u6E6E\u6E2E\u6E19\u6E72\u6E5F\u6E3E\u6E23\u6E6B\u6E2B\u6E76\u6E4D\u6E1F\u6E43\u6E3A\u6E4E\u6E24\u6EFF\u6E1D\u6E38\u6E82\u6EAA\u6E98\u6EC9\u6EB7\u6ED3\u6EBD\u6EAF\u6EC4\u6EB2\u6ED4\u6ED5\u6E8F\u6EA5\u6EC2\u6E9F\u6F41\u6F11\u704C\u6EEC\u6EF8\u6EFE\u6F3F\u6EF2\u6F31\u6EEF\u6F32\u6ECC"],
["dfa1", "\u6F3E\u6F13\u6EF7\u6F86\u6F7A\u6F78\u6F81\u6F80\u6F6F\u6F5B\u6FF3\u6F6D\u6F82\u6F7C\u6F58\u6F8E\u6F91\u6FC2\u6F66\u6FB3\u6FA3\u6FA1\u6FA4\u6FB9\u6FC6\u6FAA\u6FDF\u6FD5\u6FEC\u6FD4\u6FD8\u6FF1\u6FEE\u6FDB\u7009\u700B\u6FFA\u7011\u7001\u700F\u6FFE\u701B\u701A\u6F74\u701D\u7018\u701F\u7030\u703E\u7032\u7051\u7063\u7099\u7092\u70AF\u70F1\u70AC\u70B8\u70B3\u70AE\u70DF\u70CB\u70DD\u70D9\u7109\u70FD\u711C\u7119\u7165\u7155\u7188\u7166\u7162\u714C\u7156\u716C\u718F\u71FB\u7184\u7195\u71A8\u71AC\u71D7\u71B9\u71BE\u71D2\u71C9\u71D4\u71CE\u71E0\u71EC\u71E7\u71F5\u71FC"],
["e0a1", "\u71F9\u71FF\u720D\u7210\u721B\u7228\u722D\u722C\u7230\u7232\u723B\u723C\u723F\u7240\u7246\u724B\u7258\u7274\u727E\u7282\u7281\u7287\u7292\u7296\u72A2\u72A7\u72B9\u72B2\u72C3\u72C6\u72C4\u72CE\u72D2\u72E2\u72E0\u72E1\u72F9\u72F7\u500F\u7317\u730A\u731C\u7316\u731D\u7334\u732F\u7329\u7325\u733E\u734E\u734F\u9ED8\u7357\u736A\u7368\u7370\u7378\u7375\u737B\u737A\u73C8\u73B3\u73CE\u73BB\u73C0\u73E5\u73EE\u73DE\u74A2\u7405\u746F\u7425\u73F8\u7432\u743A\u7455\u743F\u745F\u7459\u7441\u745C\u7469\u7470\u7463\u746A\u7476\u747E\u748B\u749E\u74A7\u74CA\u74CF\u74D4\u73F1"],
["e1a1", "\u74E0\u74E3\u74E7\u74E9\u74EE\u74F2\u74F0\u74F1\u74F8\u74F7\u7504\u7503\u7505\u750C\u750E\u750D\u7515\u7513\u751E\u7526\u752C\u753C\u7544\u754D\u754A\u7549\u755B\u7546\u755A\u7569\u7564\u7567\u756B\u756D\u7578\u7576\u7586\u7587\u7574\u758A\u7589\u7582\u7594\u759A\u759D\u75A5\u75A3\u75C2\u75B3\u75C3\u75B5\u75BD\u75B8\u75BC\u75B1\u75CD\u75CA\u75D2\u75D9\u75E3\u75DE\u75FE\u75FF\u75FC\u7601\u75F0\u75FA\u75F2\u75F3\u760B\u760D\u7609\u761F\u7627\u7620\u7621\u7622\u7624\u7634\u7630\u763B\u7647\u7648\u7646\u765C\u7658\u7661\u7662\u7668\u7669\u766A\u7667\u766C\u7670"],
["e2a1", "\u7672\u7676\u7678\u767C\u7680\u7683\u7688\u768B\u768E\u7696\u7693\u7699\u769A\u76B0\u76B4\u76B8\u76B9\u76BA\u76C2\u76CD\u76D6\u76D2\u76DE\u76E1\u76E5\u76E7\u76EA\u862F\u76FB\u7708\u7707\u7704\u7729\u7724\u771E\u7725\u7726\u771B\u7737\u7738\u7747\u775A\u7768\u776B\u775B\u7765\u777F\u777E\u7779\u778E\u778B\u7791\u77A0\u779E\u77B0\u77B6\u77B9\u77BF\u77BC\u77BD\u77BB\u77C7\u77CD\u77D7\u77DA\u77DC\u77E3\u77EE\u77FC\u780C\u7812\u7926\u7820\u792A\u7845\u788E\u7874\u7886\u787C\u789A\u788C\u78A3\u78B5\u78AA\u78AF\u78D1\u78C6\u78CB\u78D4\u78BE\u78BC\u78C5\u78CA\u78EC"],
["e3a1", "\u78E7\u78DA\u78FD\u78F4\u7907\u7912\u7911\u7919\u792C\u792B\u7940\u7960\u7957\u795F\u795A\u7955\u7953\u797A\u797F\u798A\u799D\u79A7\u9F4B\u79AA\u79AE\u79B3\u79B9\u79BA\u79C9\u79D5\u79E7\u79EC\u79E1\u79E3\u7A08\u7A0D\u7A18\u7A19\u7A20\u7A1F\u7980\u7A31\u7A3B\u7A3E\u7A37\u7A43\u7A57\u7A49\u7A61\u7A62\u7A69\u9F9D\u7A70\u7A79\u7A7D\u7A88\u7A97\u7A95\u7A98\u7A96\u7AA9\u7AC8\u7AB0\u7AB6\u7AC5\u7AC4\u7ABF\u9083\u7AC7\u7ACA\u7ACD\u7ACF\u7AD5\u7AD3\u7AD9\u7ADA\u7ADD\u7AE1\u7AE2\u7AE6\u7AED\u7AF0\u7B02\u7B0F\u7B0A\u7B06\u7B33\u7B18\u7B19\u7B1E\u7B35\u7B28\u7B36\u7B50"],
["e4a1", "\u7B7A\u7B04\u7B4D\u7B0B\u7B4C\u7B45\u7B75\u7B65\u7B74\u7B67\u7B70\u7B71\u7B6C\u7B6E\u7B9D\u7B98\u7B9F\u7B8D\u7B9C\u7B9A\u7B8B\u7B92\u7B8F\u7B5D\u7B99\u7BCB\u7BC1\u7BCC\u7BCF\u7BB4\u7BC6\u7BDD\u7BE9\u7C11\u7C14\u7BE6\u7BE5\u7C60\u7C00\u7C07\u7C13\u7BF3\u7BF7\u7C17\u7C0D\u7BF6\u7C23\u7C27\u7C2A\u7C1F\u7C37\u7C2B\u7C3D\u7C4C\u7C43\u7C54\u7C4F\u7C40\u7C50\u7C58\u7C5F\u7C64\u7C56\u7C65\u7C6C\u7C75\u7C83\u7C90\u7CA4\u7CAD\u7CA2\u7CAB\u7CA1\u7CA8\u7CB3\u7CB2\u7CB1\u7CAE\u7CB9\u7CBD\u7CC0\u7CC5\u7CC2\u7CD8\u7CD2\u7CDC\u7CE2\u9B3B\u7CEF\u7CF2\u7CF4\u7CF6\u7CFA\u7D06"],
["e5a1", "\u7D02\u7D1C\u7D15\u7D0A\u7D45\u7D4B\u7D2E\u7D32\u7D3F\u7D35\u7D46\u7D73\u7D56\u7D4E\u7D72\u7D68\u7D6E\u7D4F\u7D63\u7D93\u7D89\u7D5B\u7D8F\u7D7D\u7D9B\u7DBA\u7DAE\u7DA3\u7DB5\u7DC7\u7DBD\u7DAB\u7E3D\u7DA2\u7DAF\u7DDC\u7DB8\u7D9F\u7DB0\u7DD8\u7DDD\u7DE4\u7DDE\u7DFB\u7DF2\u7DE1\u7E05\u7E0A\u7E23\u7E21\u7E12\u7E31\u7E1F\u7E09\u7E0B\u7E22\u7E46\u7E66\u7E3B\u7E35\u7E39\u7E43\u7E37\u7E32\u7E3A\u7E67\u7E5D\u7E56\u7E5E\u7E59\u7E5A\u7E79\u7E6A\u7E69\u7E7C\u7E7B\u7E83\u7DD5\u7E7D\u8FAE\u7E7F\u7E88\u7E89\u7E8C\u7E92\u7E90\u7E93\u7E94\u7E96\u7E8E\u7E9B\u7E9C\u7F38\u7F3A"],
["e6a1", "\u7F45\u7F4C\u7F4D\u7F4E\u7F50\u7F51\u7F55\u7F54\u7F58\u7F5F\u7F60\u7F68\u7F69\u7F67\u7F78\u7F82\u7F86\u7F83\u7F88\u7F87\u7F8C\u7F94\u7F9E\u7F9D\u7F9A\u7FA3\u7FAF\u7FB2\u7FB9\u7FAE\u7FB6\u7FB8\u8B71\u7FC5\u7FC6\u7FCA\u7FD5\u7FD4\u7FE1\u7FE6\u7FE9\u7FF3\u7FF9\u98DC\u8006\u8004\u800B\u8012\u8018\u8019\u801C\u8021\u8028\u803F\u803B\u804A\u8046\u8052\u8058\u805A\u805F\u8062\u8068\u8073\u8072\u8070\u8076\u8079\u807D\u807F\u8084\u8086\u8085\u809B\u8093\u809A\u80AD\u5190\u80AC\u80DB\u80E5\u80D9\u80DD\u80C4\u80DA\u80D6\u8109\u80EF\u80F1\u811B\u8129\u8123\u812F\u814B"],
["e7a1", "\u968B\u8146\u813E\u8153\u8151\u80FC\u8171\u816E\u8165\u8166\u8174\u8183\u8188\u818A\u8180\u8182\u81A0\u8195\u81A4\u81A3\u815F\u8193\u81A9\u81B0\u81B5\u81BE\u81B8\u81BD\u81C0\u81C2\u81BA\u81C9\u81CD\u81D1\u81D9\u81D8\u81C8\u81DA\u81DF\u81E0\u81E7\u81FA\u81FB\u81FE\u8201\u8202\u8205\u8207\u820A\u820D\u8210\u8216\u8229\u822B\u8238\u8233\u8240\u8259\u8258\u825D\u825A\u825F\u8264\u8262\u8268\u826A\u826B\u822E\u8271\u8277\u8278\u827E\u828D\u8292\u82AB\u829F\u82BB\u82AC\u82E1\u82E3\u82DF\u82D2\u82F4\u82F3\u82FA\u8393\u8303\u82FB\u82F9\u82DE\u8306\u82DC\u8309\u82D9"],
["e8a1", "\u8335\u8334\u8316\u8332\u8331\u8340\u8339\u8350\u8345\u832F\u832B\u8317\u8318\u8385\u839A\u83AA\u839F\u83A2\u8396\u8323\u838E\u8387\u838A\u837C\u83B5\u8373\u8375\u83A0\u8389\u83A8\u83F4\u8413\u83EB\u83CE\u83FD\u8403\u83D8\u840B\u83C1\u83F7\u8407\u83E0\u83F2\u840D\u8422\u8420\u83BD\u8438\u8506\u83FB\u846D\u842A\u843C\u855A\u8484\u8477\u846B\u84AD\u846E\u8482\u8469\u8446\u842C\u846F\u8479\u8435\u84CA\u8462\u84B9\u84BF\u849F\u84D9\u84CD\u84BB\u84DA\u84D0\u84C1\u84C6\u84D6\u84A1\u8521\u84FF\u84F4\u8517\u8518\u852C\u851F\u8515\u8514\u84FC\u8540\u8563\u8558\u8548"],
["e9a1", "\u8541\u8602\u854B\u8555\u8580\u85A4\u8588\u8591\u858A\u85A8\u856D\u8594\u859B\u85EA\u8587\u859C\u8577\u857E\u8590\u85C9\u85BA\u85CF\u85B9\u85D0\u85D5\u85DD\u85E5\u85DC\u85F9\u860A\u8613\u860B\u85FE\u85FA\u8606\u8622\u861A\u8630\u863F\u864D\u4E55\u8654\u865F\u8667\u8671\u8693\u86A3\u86A9\u86AA\u868B\u868C\u86B6\u86AF\u86C4\u86C6\u86B0\u86C9\u8823\u86AB\u86D4\u86DE\u86E9\u86EC\u86DF\u86DB\u86EF\u8712\u8706\u8708\u8700\u8703\u86FB\u8711\u8709\u870D\u86F9\u870A\u8734\u873F\u8737\u873B\u8725\u8729\u871A\u8760\u875F\u8778\u874C\u874E\u8774\u8757\u8768\u876E\u8759"],
["eaa1", "\u8753\u8763\u876A\u8805\u87A2\u879F\u8782\u87AF\u87CB\u87BD\u87C0\u87D0\u96D6\u87AB\u87C4\u87B3\u87C7\u87C6\u87BB\u87EF\u87F2\u87E0\u880F\u880D\u87FE\u87F6\u87F7\u880E\u87D2\u8811\u8816\u8815\u8822\u8821\u8831\u8836\u8839\u8827\u883B\u8844\u8842\u8852\u8859\u885E\u8862\u886B\u8881\u887E\u889E\u8875\u887D\u88B5\u8872\u8882\u8897\u8892\u88AE\u8899\u88A2\u888D\u88A4\u88B0\u88BF\u88B1\u88C3\u88C4\u88D4\u88D8\u88D9\u88DD\u88F9\u8902\u88FC\u88F4\u88E8\u88F2\u8904\u890C\u890A\u8913\u8943\u891E\u8925\u892A\u892B\u8941\u8944\u893B\u8936\u8938\u894C\u891D\u8960\u895E"],
["eba1", "\u8966\u8964\u896D\u896A\u896F\u8974\u8977\u897E\u8983\u8988\u898A\u8993\u8998\u89A1\u89A9\u89A6\u89AC\u89AF\u89B2\u89BA\u89BD\u89BF\u89C0\u89DA\u89DC\u89DD\u89E7\u89F4\u89F8\u8A03\u8A16\u8A10\u8A0C\u8A1B\u8A1D\u8A25\u8A36\u8A41\u8A5B\u8A52\u8A46\u8A48\u8A7C\u8A6D\u8A6C\u8A62\u8A85\u8A82\u8A84\u8AA8\u8AA1\u8A91\u8AA5\u8AA6\u8A9A\u8AA3\u8AC4\u8ACD\u8AC2\u8ADA\u8AEB\u8AF3\u8AE7\u8AE4\u8AF1\u8B14\u8AE0\u8AE2\u8AF7\u8ADE\u8ADB\u8B0C\u8B07\u8B1A\u8AE1\u8B16\u8B10\u8B17\u8B20\u8B33\u97AB\u8B26\u8B2B\u8B3E\u8B28\u8B41\u8B4C\u8B4F\u8B4E\u8B49\u8B56\u8B5B\u8B5A\u8B6B"],
["eca1", "\u8B5F\u8B6C\u8B6F\u8B74\u8B7D\u8B80\u8B8C\u8B8E\u8B92\u8B93\u8B96\u8B99\u8B9A\u8C3A\u8C41\u8C3F\u8C48\u8C4C\u8C4E\u8C50\u8C55\u8C62\u8C6C\u8C78\u8C7A\u8C82\u8C89\u8C85\u8C8A\u8C8D\u8C8E\u8C94\u8C7C\u8C98\u621D\u8CAD\u8CAA\u8CBD\u8CB2\u8CB3\u8CAE\u8CB6\u8CC8\u8CC1\u8CE4\u8CE3\u8CDA\u8CFD\u8CFA\u8CFB\u8D04\u8D05\u8D0A\u8D07\u8D0F\u8D0D\u8D10\u9F4E\u8D13\u8CCD\u8D14\u8D16\u8D67\u8D6D\u8D71\u8D73\u8D81\u8D99\u8DC2\u8DBE\u8DBA\u8DCF\u8DDA\u8DD6\u8DCC\u8DDB\u8DCB\u8DEA\u8DEB\u8DDF\u8DE3\u8DFC\u8E08\u8E09\u8DFF\u8E1D\u8E1E\u8E10\u8E1F\u8E42\u8E35\u8E30\u8E34\u8E4A"],
["eda1", "\u8E47\u8E49\u8E4C\u8E50\u8E48\u8E59\u8E64\u8E60\u8E2A\u8E63\u8E55\u8E76\u8E72\u8E7C\u8E81\u8E87\u8E85\u8E84\u8E8B\u8E8A\u8E93\u8E91\u8E94\u8E99\u8EAA\u8EA1\u8EAC\u8EB0\u8EC6\u8EB1\u8EBE\u8EC5\u8EC8\u8ECB\u8EDB\u8EE3\u8EFC\u8EFB\u8EEB\u8EFE\u8F0A\u8F05\u8F15\u8F12\u8F19\u8F13\u8F1C\u8F1F\u8F1B\u8F0C\u8F26\u8F33\u8F3B\u8F39\u8F45\u8F42\u8F3E\u8F4C\u8F49\u8F46\u8F4E\u8F57\u8F5C\u8F62\u8F63\u8F64\u8F9C\u8F9F\u8FA3\u8FAD\u8FAF\u8FB7\u8FDA\u8FE5\u8FE2\u8FEA\u8FEF\u9087\u8FF4\u9005\u8FF9\u8FFA\u9011\u9015\u9021\u900D\u901E\u9016\u900B\u9027\u9036\u9035\u9039\u8FF8"],
["eea1", "\u904F\u9050\u9051\u9052\u900E\u9049\u903E\u9056\u9058\u905E\u9068\u906F\u9076\u96A8\u9072\u9082\u907D\u9081\u9080\u908A\u9089\u908F\u90A8\u90AF\u90B1\u90B5\u90E2\u90E4\u6248\u90DB\u9102\u9112\u9119\u9132\u9130\u914A\u9156\u9158\u9163\u9165\u9169\u9173\u9172\u918B\u9189\u9182\u91A2\u91AB\u91AF\u91AA\u91B5\u91B4\u91BA\u91C0\u91C1\u91C9\u91CB\u91D0\u91D6\u91DF\u91E1\u91DB\u91FC\u91F5\u91F6\u921E\u91FF\u9214\u922C\u9215\u9211\u925E\u9257\u9245\u9249\u9264\u9248\u9295\u923F\u924B\u9250\u929C\u9296\u9293\u929B\u925A\u92CF\u92B9\u92B7\u92E9\u930F\u92FA\u9344\u932E"],
["efa1", "\u9319\u9322\u931A\u9323\u933A\u9335\u933B\u935C\u9360\u937C\u936E\u9356\u93B0\u93AC\u93AD\u9394\u93B9\u93D6\u93D7\u93E8\u93E5\u93D8\u93C3\u93DD\u93D0\u93C8\u93E4\u941A\u9414\u9413\u9403\u9407\u9410\u9436\u942B\u9435\u9421\u943A\u9441\u9452\u9444\u945B\u9460\u9462\u945E\u946A\u9229\u9470\u9475\u9477\u947D\u945A\u947C\u947E\u9481\u947F\u9582\u9587\u958A\u9594\u9596\u9598\u9599\u95A0\u95A8\u95A7\u95AD\u95BC\u95BB\u95B9\u95BE\u95CA\u6FF6\u95C3\u95CD\u95CC\u95D5\u95D4\u95D6\u95DC\u95E1\u95E5\u95E2\u9621\u9628\u962E\u962F\u9642\u964C\u964F\u964B\u9677\u965C\u965E"],
["f0a1", "\u965D\u965F\u9666\u9672\u966C\u968D\u9698\u9695\u9697\u96AA\u96A7\u96B1\u96B2\u96B0\u96B4\u96B6\u96B8\u96B9\u96CE\u96CB\u96C9\u96CD\u894D\u96DC\u970D\u96D5\u96F9\u9704\u9706\u9708\u9713\u970E\u9711\u970F\u9716\u9719\u9724\u972A\u9730\u9739\u973D\u973E\u9744\u9746\u9748\u9742\u9749\u975C\u9760\u9764\u9766\u9768\u52D2\u976B\u9771\u9779\u9785\u977C\u9781\u977A\u9786\u978B\u978F\u9790\u979C\u97A8\u97A6\u97A3\u97B3\u97B4\u97C3\u97C6\u97C8\u97CB\u97DC\u97ED\u9F4F\u97F2\u7ADF\u97F6\u97F5\u980F\u980C\u9838\u9824\u9821\u9837\u983D\u9846\u984F\u984B\u986B\u986F\u9870"],
["f1a1", "\u9871\u9874\u9873\u98AA\u98AF\u98B1\u98B6\u98C4\u98C3\u98C6\u98E9\u98EB\u9903\u9909\u9912\u9914\u9918\u9921\u991D\u991E\u9924\u9920\u992C\u992E\u993D\u993E\u9942\u9949\u9945\u9950\u994B\u9951\u9952\u994C\u9955\u9997\u9998\u99A5\u99AD\u99AE\u99BC\u99DF\u99DB\u99DD\u99D8\u99D1\u99ED\u99EE\u99F1\u99F2\u99FB\u99F8\u9A01\u9A0F\u9A05\u99E2\u9A19\u9A2B\u9A37\u9A45\u9A42\u9A40\u9A43\u9A3E\u9A55\u9A4D\u9A5B\u9A57\u9A5F\u9A62\u9A65\u9A64\u9A69\u9A6B\u9A6A\u9AAD\u9AB0\u9ABC\u9AC0\u9ACF\u9AD1\u9AD3\u9AD4\u9ADE\u9ADF\u9AE2\u9AE3\u9AE6\u9AEF\u9AEB\u9AEE\u9AF4\u9AF1\u9AF7"],
["f2a1", "\u9AFB\u9B06\u9B18\u9B1A\u9B1F\u9B22\u9B23\u9B25\u9B27\u9B28\u9B29\u9B2A\u9B2E\u9B2F\u9B32\u9B44\u9B43\u9B4F\u9B4D\u9B4E\u9B51\u9B58\u9B74\u9B93\u9B83\u9B91\u9B96\u9B97\u9B9F\u9BA0\u9BA8\u9BB4\u9BC0\u9BCA\u9BB9\u9BC6\u9BCF\u9BD1\u9BD2\u9BE3\u9BE2\u9BE4\u9BD4\u9BE1\u9C3A\u9BF2\u9BF1\u9BF0\u9C15\u9C14\u9C09\u9C13\u9C0C\u9C06\u9C08\u9C12\u9C0A\u9C04\u9C2E\u9C1B\u9C25\u9C24\u9C21\u9C30\u9C47\u9C32\u9C46\u9C3E\u9C5A\u9C60\u9C67\u9C76\u9C78\u9CE7\u9CEC\u9CF0\u9D09\u9D08\u9CEB\u9D03\u9D06\u9D2A\u9D26\u9DAF\u9D23\u9D1F\u9D44\u9D15\u9D12\u9D41\u9D3F\u9D3E\u9D46\u9D48"],
["f3a1", "\u9D5D\u9D5E\u9D64\u9D51\u9D50\u9D59\u9D72\u9D89\u9D87\u9DAB\u9D6F\u9D7A\u9D9A\u9DA4\u9DA9\u9DB2\u9DC4\u9DC1\u9DBB\u9DB8\u9DBA\u9DC6\u9DCF\u9DC2\u9DD9\u9DD3\u9DF8\u9DE6\u9DED\u9DEF\u9DFD\u9E1A\u9E1B\u9E1E\u9E75\u9E79\u9E7D\u9E81\u9E88\u9E8B\u9E8C\u9E92\u9E95\u9E91\u9E9D\u9EA5\u9EA9\u9EB8\u9EAA\u9EAD\u9761\u9ECC\u9ECE\u9ECF\u9ED0\u9ED4\u9EDC\u9EDE\u9EDD\u9EE0\u9EE5\u9EE8\u9EEF\u9EF4\u9EF6\u9EF7\u9EF9\u9EFB\u9EFC\u9EFD\u9F07\u9F08\u76B7\u9F15\u9F21\u9F2C\u9F3E\u9F4A\u9F52\u9F54\u9F63\u9F5F\u9F60\u9F61\u9F66\u9F67\u9F6C\u9F6A\u9F77\u9F72\u9F76\u9F95\u9F9C\u9FA0"],
["f4a1", "\u582F\u69C7\u9059\u7464\u51DC\u7199"],
["f9a1", "\u7E8A\u891C\u9348\u9288\u84DC\u4FC9\u70BB\u6631\u68C8\u92F9\u66FB\u5F45\u4E28\u4EE1\u4EFC\u4F00\u4F03\u4F39\u4F56\u4F92\u4F8A\u4F9A\u4F94\u4FCD\u5040\u5022\u4FFF\u501E\u5046\u5070\u5042\u5094\u50F4\u50D8\u514A\u5164\u519D\u51BE\u51EC\u5215\u529C\u52A6\u52C0\u52DB\u5300\u5307\u5324\u5372\u5393\u53B2\u53DD\uFA0E\u549C\u548A\u54A9\u54FF\u5586\u5759\u5765\u57AC\u57C8\u57C7\uFA0F\uFA10\u589E\u58B2\u590B\u5953\u595B\u595D\u5963\u59A4\u59BA\u5B56\u5BC0\u752F\u5BD8\u5BEC\u5C1E\u5CA6\u5CBA\u5CF5\u5D27\u5D53\uFA11\u5D42\u5D6D\u5DB8\u5DB9\u5DD0\u5F21\u5F34\u5F67\u5FB7"],
["faa1", "\u5FDE\u605D\u6085\u608A\u60DE\u60D5\u6120\u60F2\u6111\u6137\u6130\u6198\u6213\u62A6\u63F5\u6460\u649D\u64CE\u654E\u6600\u6615\u663B\u6609\u662E\u661E\u6624\u6665\u6657\u6659\uFA12\u6673\u6699\u66A0\u66B2\u66BF\u66FA\u670E\uF929\u6766\u67BB\u6852\u67C0\u6801\u6844\u68CF\uFA13\u6968\uFA14\u6998\u69E2\u6A30\u6A6B\u6A46\u6A73\u6A7E\u6AE2\u6AE4\u6BD6\u6C3F\u6C5C\u6C86\u6C6F\u6CDA\u6D04\u6D87\u6D6F\u6D96\u6DAC\u6DCF\u6DF8\u6DF2\u6DFC\u6E39\u6E5C\u6E27\u6E3C\u6EBF\u6F88\u6FB5\u6FF5\u7005\u7007\u7028\u7085\u70AB\u710F\u7104\u715C\u7146\u7147\uFA15\u71C1\u71FE\u72B1"],
["fba1", "\u72BE\u7324\uFA16\u7377\u73BD\u73C9\u73D6\u73E3\u73D2\u7407\u73F5\u7426\u742A\u7429\u742E\u7462\u7489\u749F\u7501\u756F\u7682\u769C\u769E\u769B\u76A6\uFA17\u7746\u52AF\u7821\u784E\u7864\u787A\u7930\uFA18\uFA19\uFA1A\u7994\uFA1B\u799B\u7AD1\u7AE7\uFA1C\u7AEB\u7B9E\uFA1D\u7D48\u7D5C\u7DB7\u7DA0\u7DD6\u7E52\u7F47\u7FA1\uFA1E\u8301\u8362\u837F\u83C7\u83F6\u8448\u84B4\u8553\u8559\u856B\uFA1F\u85B0\uFA20\uFA21\u8807\u88F5\u8A12\u8A37\u8A79\u8AA7\u8ABE\u8ADF\uFA22\u8AF6\u8B53\u8B7F\u8CF0\u8CF4\u8D12\u8D76\uFA23\u8ECF\uFA24\uFA25\u9067\u90DE\uFA26\u9115\u9127\u91DA"],
["fca1", "\u91D7\u91DE\u91ED\u91EE\u91E4\u91E5\u9206\u9210\u920A\u923A\u9240\u923C\u924E\u9259\u9251\u9239\u9267\u92A7\u9277\u9278\u92E7\u92D7\u92D9\u92D0\uFA27\u92D5\u92E0\u92D3\u9325\u9321\u92FB\uFA28\u931E\u92FF\u931D\u9302\u9370\u9357\u93A4\u93C6\u93DE\u93F8\u9431\u9445\u9448\u9592\uF9DC\uFA29\u969D\u96AF\u9733\u973B\u9743\u974D\u974F\u9751\u9755\u9857\u9865\uFA2A\uFA2B\u9927\uFA2C\u999E\u9A4E\u9AD9\u9ADC\u9B75\u9B72\u9B8F\u9BB1\u9BBB\u9C00\u9D70\u9D6B\uFA2D\u9E19\u9ED1"],
["fcf1", "\u2170", 9, "\uFFE2\uFFE4\uFF07\uFF02"],
["8fa2af", "\u02D8\u02C7\xB8\u02D9\u02DD\xAF\u02DB\u02DA\uFF5E\u0384\u0385"],
["8fa2c2", "\xA1\xA6\xBF"],
["8fa2eb", "\xBA\xAA\xA9\xAE\u2122\xA4\u2116"],
["8fa6e1", "\u0386\u0388\u0389\u038A\u03AA"],
["8fa6e7", "\u038C"],
["8fa6e9", "\u038E\u03AB"],
["8fa6ec", "\u038F"],
["8fa6f1", "\u03AC\u03AD\u03AE\u03AF\u03CA\u0390\u03CC\u03C2\u03CD\u03CB\u03B0\u03CE"],
["8fa7c2", "\u0402", 10, "\u040E\u040F"],
["8fa7f2", "\u0452", 10, "\u045E\u045F"],
["8fa9a1", "\xC6\u0110"],
["8fa9a4", "\u0126"],
["8fa9a6", "\u0132"],
["8fa9a8", "\u0141\u013F"],
["8fa9ab", "\u014A\xD8\u0152"],
["8fa9af", "\u0166\xDE"],
["8fa9c1", "\xE6\u0111\xF0\u0127\u0131\u0133\u0138\u0142\u0140\u0149\u014B\xF8\u0153\xDF\u0167\xFE"],
["8faaa1", "\xC1\xC0\xC4\xC2\u0102\u01CD\u0100\u0104\xC5\xC3\u0106\u0108\u010C\xC7\u010A\u010E\xC9\xC8\xCB\xCA\u011A\u0116\u0112\u0118"],
["8faaba", "\u011C\u011E\u0122\u0120\u0124\xCD\xCC\xCF\xCE\u01CF\u0130\u012A\u012E\u0128\u0134\u0136\u0139\u013D\u013B\u0143\u0147\u0145\xD1\xD3\xD2\xD6\xD4\u01D1\u0150\u014C\xD5\u0154\u0158\u0156\u015A\u015C\u0160\u015E\u0164\u0162\xDA\xD9\xDC\xDB\u016C\u01D3\u0170\u016A\u0172\u016E\u0168\u01D7\u01DB\u01D9\u01D5\u0174\xDD\u0178\u0176\u0179\u017D\u017B"],
["8faba1", "\xE1\xE0\xE4\xE2\u0103\u01CE\u0101\u0105\xE5\xE3\u0107\u0109\u010D\xE7\u010B\u010F\xE9\xE8\xEB\xEA\u011B\u0117\u0113\u0119\u01F5\u011D\u011F"],
["8fabbd", "\u0121\u0125\xED\xEC\xEF\xEE\u01D0"],
["8fabc5", "\u012B\u012F\u0129\u0135\u0137\u013A\u013E\u013C\u0144\u0148\u0146\xF1\xF3\xF2\xF6\xF4\u01D2\u0151\u014D\xF5\u0155\u0159\u0157\u015B\u015D\u0161\u015F\u0165\u0163\xFA\xF9\xFC\xFB\u016D\u01D4\u0171\u016B\u0173\u016F\u0169\u01D8\u01DC\u01DA\u01D6\u0175\xFD\xFF\u0177\u017A\u017E\u017C"],
["8fb0a1", "\u4E02\u4E04\u4E05\u4E0C\u4E12\u4E1F\u4E23\u4E24\u4E28\u4E2B\u4E2E\u4E2F\u4E30\u4E35\u4E40\u4E41\u4E44\u4E47\u4E51\u4E5A\u4E5C\u4E63\u4E68\u4E69\u4E74\u4E75\u4E79\u4E7F\u4E8D\u4E96\u4E97\u4E9D\u4EAF\u4EB9\u4EC3\u4ED0\u4EDA\u4EDB\u4EE0\u4EE1\u4EE2\u4EE8\u4EEF\u4EF1\u4EF3\u4EF5\u4EFD\u4EFE\u4EFF\u4F00\u4F02\u4F03\u4F08\u4F0B\u4F0C\u4F12\u4F15\u4F16\u4F17\u4F19\u4F2E\u4F31\u4F60\u4F33\u4F35\u4F37\u4F39\u4F3B\u4F3E\u4F40\u4F42\u4F48\u4F49\u4F4B\u4F4C\u4F52\u4F54\u4F56\u4F58\u4F5F\u4F63\u4F6A\u4F6C\u4F6E\u4F71\u4F77\u4F78\u4F79\u4F7A\u4F7D\u4F7E\u4F81\u4F82\u4F84"],
["8fb1a1", "\u4F85\u4F89\u4F8A\u4F8C\u4F8E\u4F90\u4F92\u4F93\u4F94\u4F97\u4F99\u4F9A\u4F9E\u4F9F\u4FB2\u4FB7\u4FB9\u4FBB\u4FBC\u4FBD\u4FBE\u4FC0\u4FC1\u4FC5\u4FC6\u4FC8\u4FC9\u4FCB\u4FCC\u4FCD\u4FCF\u4FD2\u4FDC\u4FE0\u4FE2\u4FF0\u4FF2\u4FFC\u4FFD\u4FFF\u5000\u5001\u5004\u5007\u500A\u500C\u500E\u5010\u5013\u5017\u5018\u501B\u501C\u501D\u501E\u5022\u5027\u502E\u5030\u5032\u5033\u5035\u5040\u5041\u5042\u5045\u5046\u504A\u504C\u504E\u5051\u5052\u5053\u5057\u5059\u505F\u5060\u5062\u5063\u5066\u5067\u506A\u506D\u5070\u5071\u503B\u5081\u5083\u5084\u5086\u508A\u508E\u508F\u5090"],
["8fb2a1", "\u5092\u5093\u5094\u5096\u509B\u509C\u509E", 4, "\u50AA\u50AF\u50B0\u50B9\u50BA\u50BD\u50C0\u50C3\u50C4\u50C7\u50CC\u50CE\u50D0\u50D3\u50D4\u50D8\u50DC\u50DD\u50DF\u50E2\u50E4\u50E6\u50E8\u50E9\u50EF\u50F1\u50F6\u50FA\u50FE\u5103\u5106\u5107\u5108\u510B\u510C\u510D\u510E\u50F2\u5110\u5117\u5119\u511B\u511C\u511D\u511E\u5123\u5127\u5128\u512C\u512D\u512F\u5131\u5133\u5134\u5135\u5138\u5139\u5142\u514A\u514F\u5153\u5155\u5157\u5158\u515F\u5164\u5166\u517E\u5183\u5184\u518B\u518E\u5198\u519D\u51A1\u51A3\u51AD\u51B8\u51BA\u51BC\u51BE\u51BF\u51C2"],
["8fb3a1", "\u51C8\u51CF\u51D1\u51D2\u51D3\u51D5\u51D8\u51DE\u51E2\u51E5\u51EE\u51F2\u51F3\u51F4\u51F7\u5201\u5202\u5205\u5212\u5213\u5215\u5216\u5218\u5222\u5228\u5231\u5232\u5235\u523C\u5245\u5249\u5255\u5257\u5258\u525A\u525C\u525F\u5260\u5261\u5266\u526E\u5277\u5278\u5279\u5280\u5282\u5285\u528A\u528C\u5293\u5295\u5296\u5297\u5298\u529A\u529C\u52A4\u52A5\u52A6\u52A7\u52AF\u52B0\u52B6\u52B7\u52B8\u52BA\u52BB\u52BD\u52C0\u52C4\u52C6\u52C8\u52CC\u52CF\u52D1\u52D4\u52D6\u52DB\u52DC\u52E1\u52E5\u52E8\u52E9\u52EA\u52EC\u52F0\u52F1\u52F4\u52F6\u52F7\u5300\u5303\u530A\u530B"],
["8fb4a1", "\u530C\u5311\u5313\u5318\u531B\u531C\u531E\u531F\u5325\u5327\u5328\u5329\u532B\u532C\u532D\u5330\u5332\u5335\u533C\u533D\u533E\u5342\u534C\u534B\u5359\u535B\u5361\u5363\u5365\u536C\u536D\u5372\u5379\u537E\u5383\u5387\u5388\u538E\u5393\u5394\u5399\u539D\u53A1\u53A4\u53AA\u53AB\u53AF\u53B2\u53B4\u53B5\u53B7\u53B8\u53BA\u53BD\u53C0\u53C5\u53CF\u53D2\u53D3\u53D5\u53DA\u53DD\u53DE\u53E0\u53E6\u53E7\u53F5\u5402\u5413\u541A\u5421\u5427\u5428\u542A\u542F\u5431\u5434\u5435\u5443\u5444\u5447\u544D\u544F\u545E\u5462\u5464\u5466\u5467\u5469\u546B\u546D\u546E\u5474\u547F"],
["8fb5a1", "\u5481\u5483\u5485\u5488\u5489\u548D\u5491\u5495\u5496\u549C\u549F\u54A1\u54A6\u54A7\u54A9\u54AA\u54AD\u54AE\u54B1\u54B7\u54B9\u54BA\u54BB\u54BF\u54C6\u54CA\u54CD\u54CE\u54E0\u54EA\u54EC\u54EF\u54F6\u54FC\u54FE\u54FF\u5500\u5501\u5505\u5508\u5509\u550C\u550D\u550E\u5515\u552A\u552B\u5532\u5535\u5536\u553B\u553C\u553D\u5541\u5547\u5549\u554A\u554D\u5550\u5551\u5558\u555A\u555B\u555E\u5560\u5561\u5564\u5566\u557F\u5581\u5582\u5586\u5588\u558E\u558F\u5591\u5592\u5593\u5594\u5597\u55A3\u55A4\u55AD\u55B2\u55BF\u55C1\u55C3\u55C6\u55C9\u55CB\u55CC\u55CE\u55D1\u55D2"],
["8fb6a1", "\u55D3\u55D7\u55D8\u55DB\u55DE\u55E2\u55E9\u55F6\u55FF\u5605\u5608\u560A\u560D", 5, "\u5619\u562C\u5630\u5633\u5635\u5637\u5639\u563B\u563C\u563D\u563F\u5640\u5641\u5643\u5644\u5646\u5649\u564B\u564D\u564F\u5654\u565E\u5660\u5661\u5662\u5663\u5666\u5669\u566D\u566F\u5671\u5672\u5675\u5684\u5685\u5688\u568B\u568C\u5695\u5699\u569A\u569D\u569E\u569F\u56A6\u56A7\u56A8\u56A9\u56AB\u56AC\u56AD\u56B1\u56B3\u56B7\u56BE\u56C5\u56C9\u56CA\u56CB\u56CF\u56D0\u56CC\u56CD\u56D9\u56DC\u56DD\u56DF\u56E1\u56E4", 4, "\u56F1\u56EB\u56ED"],
["8fb7a1", "\u56F6\u56F7\u5701\u5702\u5707\u570A\u570C\u5711\u5715\u571A\u571B\u571D\u5720\u5722\u5723\u5724\u5725\u5729\u572A\u572C\u572E\u572F\u5733\u5734\u573D\u573E\u573F\u5745\u5746\u574C\u574D\u5752\u5762\u5765\u5767\u5768\u576B\u576D", 4, "\u5773\u5774\u5775\u5777\u5779\u577A\u577B\u577C\u577E\u5781\u5783\u578C\u5794\u5797\u5799\u579A\u579C\u579D\u579E\u579F\u57A1\u5795\u57A7\u57A8\u57A9\u57AC\u57B8\u57BD\u57C7\u57C8\u57CC\u57CF\u57D5\u57DD\u57DE\u57E4\u57E6\u57E7\u57E9\u57ED\u57F0\u57F5\u57F6\u57F8\u57FD\u57FE\u57FF\u5803\u5804\u5808\u5809\u57E1"],
["8fb8a1", "\u580C\u580D\u581B\u581E\u581F\u5820\u5826\u5827\u582D\u5832\u5839\u583F\u5849\u584C\u584D\u584F\u5850\u5855\u585F\u5861\u5864\u5867\u5868\u5878\u587C\u587F\u5880\u5881\u5887\u5888\u5889\u588A\u588C\u588D\u588F\u5890\u5894\u5896\u589D\u58A0\u58A1\u58A2\u58A6\u58A9\u58B1\u58B2\u58C4\u58BC\u58C2\u58C8\u58CD\u58CE\u58D0\u58D2\u58D4\u58D6\u58DA\u58DD\u58E1\u58E2\u58E9\u58F3\u5905\u5906\u590B\u590C\u5912\u5913\u5914\u8641\u591D\u5921\u5923\u5924\u5928\u592F\u5930\u5933\u5935\u5936\u593F\u5943\u5946\u5952\u5953\u5959\u595B\u595D\u595E\u595F\u5961\u5963\u596B\u596D"],
["8fb9a1", "\u596F\u5972\u5975\u5976\u5979\u597B\u597C\u598B\u598C\u598E\u5992\u5995\u5997\u599F\u59A4\u59A7\u59AD\u59AE\u59AF\u59B0\u59B3\u59B7\u59BA\u59BC\u59C1\u59C3\u59C4\u59C8\u59CA\u59CD\u59D2\u59DD\u59DE\u59DF\u59E3\u59E4\u59E7\u59EE\u59EF\u59F1\u59F2\u59F4\u59F7\u5A00\u5A04\u5A0C\u5A0D\u5A0E\u5A12\u5A13\u5A1E\u5A23\u5A24\u5A27\u5A28\u5A2A\u5A2D\u5A30\u5A44\u5A45\u5A47\u5A48\u5A4C\u5A50\u5A55\u5A5E\u5A63\u5A65\u5A67\u5A6D\u5A77\u5A7A\u5A7B\u5A7E\u5A8B\u5A90\u5A93\u5A96\u5A99\u5A9C\u5A9E\u5A9F\u5AA0\u5AA2\u5AA7\u5AAC\u5AB1\u5AB2\u5AB3\u5AB5\u5AB8\u5ABA\u5ABB\u5ABF"],
["8fbaa1", "\u5AC4\u5AC6\u5AC8\u5ACF\u5ADA\u5ADC\u5AE0\u5AE5\u5AEA\u5AEE\u5AF5\u5AF6\u5AFD\u5B00\u5B01\u5B08\u5B17\u5B34\u5B19\u5B1B\u5B1D\u5B21\u5B25\u5B2D\u5B38\u5B41\u5B4B\u5B4C\u5B52\u5B56\u5B5E\u5B68\u5B6E\u5B6F\u5B7C\u5B7D\u5B7E\u5B7F\u5B81\u5B84\u5B86\u5B8A\u5B8E\u5B90\u5B91\u5B93\u5B94\u5B96\u5BA8\u5BA9\u5BAC\u5BAD\u5BAF\u5BB1\u5BB2\u5BB7\u5BBA\u5BBC\u5BC0\u5BC1\u5BCD\u5BCF\u5BD6", 4, "\u5BE0\u5BEF\u5BF1\u5BF4\u5BFD\u5C0C\u5C17\u5C1E\u5C1F\u5C23\u5C26\u5C29\u5C2B\u5C2C\u5C2E\u5C30\u5C32\u5C35\u5C36\u5C59\u5C5A\u5C5C\u5C62\u5C63\u5C67\u5C68\u5C69"],
["8fbba1", "\u5C6D\u5C70\u5C74\u5C75\u5C7A\u5C7B\u5C7C\u5C7D\u5C87\u5C88\u5C8A\u5C8F\u5C92\u5C9D\u5C9F\u5CA0\u5CA2\u5CA3\u5CA6\u5CAA\u5CB2\u5CB4\u5CB5\u5CBA\u5CC9\u5CCB\u5CD2\u5CDD\u5CD7\u5CEE\u5CF1\u5CF2\u5CF4\u5D01\u5D06\u5D0D\u5D12\u5D2B\u5D23\u5D24\u5D26\u5D27\u5D31\u5D34\u5D39\u5D3D\u5D3F\u5D42\u5D43\u5D46\u5D48\u5D55\u5D51\u5D59\u5D4A\u5D5F\u5D60\u5D61\u5D62\u5D64\u5D6A\u5D6D\u5D70\u5D79\u5D7A\u5D7E\u5D7F\u5D81\u5D83\u5D88\u5D8A\u5D92\u5D93\u5D94\u5D95\u5D99\u5D9B\u5D9F\u5DA0\u5DA7\u5DAB\u5DB0\u5DB4\u5DB8\u5DB9\u5DC3\u5DC7\u5DCB\u5DD0\u5DCE\u5DD8\u5DD9\u5DE0\u5DE4"],
["8fbca1", "\u5DE9\u5DF8\u5DF9\u5E00\u5E07\u5E0D\u5E12\u5E14\u5E15\u5E18\u5E1F\u5E20\u5E2E\u5E28\u5E32\u5E35\u5E3E\u5E4B\u5E50\u5E49\u5E51\u5E56\u5E58\u5E5B\u5E5C\u5E5E\u5E68\u5E6A", 4, "\u5E70\u5E80\u5E8B\u5E8E\u5EA2\u5EA4\u5EA5\u5EA8\u5EAA\u5EAC\u5EB1\u5EB3\u5EBD\u5EBE\u5EBF\u5EC6\u5ECC\u5ECB\u5ECE\u5ED1\u5ED2\u5ED4\u5ED5\u5EDC\u5EDE\u5EE5\u5EEB\u5F02\u5F06\u5F07\u5F08\u5F0E\u5F19\u5F1C\u5F1D\u5F21\u5F22\u5F23\u5F24\u5F28\u5F2B\u5F2C\u5F2E\u5F30\u5F34\u5F36\u5F3B\u5F3D\u5F3F\u5F40\u5F44\u5F45\u5F47\u5F4D\u5F50\u5F54\u5F58\u5F5B\u5F60\u5F63\u5F64\u5F67"],
["8fbda1", "\u5F6F\u5F72\u5F74\u5F75\u5F78\u5F7A\u5F7D\u5F7E\u5F89\u5F8D\u5F8F\u5F96\u5F9C\u5F9D\u5FA2\u5FA7\u5FAB\u5FA4\u5FAC\u5FAF\u5FB0\u5FB1\u5FB8\u5FC4\u5FC7\u5FC8\u5FC9\u5FCB\u5FD0", 4, "\u5FDE\u5FE1\u5FE2\u5FE8\u5FE9\u5FEA\u5FEC\u5FED\u5FEE\u5FEF\u5FF2\u5FF3\u5FF6\u5FFA\u5FFC\u6007\u600A\u600D\u6013\u6014\u6017\u6018\u601A\u601F\u6024\u602D\u6033\u6035\u6040\u6047\u6048\u6049\u604C\u6051\u6054\u6056\u6057\u605D\u6061\u6067\u6071\u607E\u607F\u6082\u6086\u6088\u608A\u608E\u6091\u6093\u6095\u6098\u609D\u609E\u60A2\u60A4\u60A5\u60A8\u60B0\u60B1\u60B7"],
["8fbea1", "\u60BB\u60BE\u60C2\u60C4\u60C8\u60C9\u60CA\u60CB\u60CE\u60CF\u60D4\u60D5\u60D9\u60DB\u60DD\u60DE\u60E2\u60E5\u60F2\u60F5\u60F8\u60FC\u60FD\u6102\u6107\u610A\u610C\u6110", 4, "\u6116\u6117\u6119\u611C\u611E\u6122\u612A\u612B\u6130\u6131\u6135\u6136\u6137\u6139\u6141\u6145\u6146\u6149\u615E\u6160\u616C\u6172\u6178\u617B\u617C\u617F\u6180\u6181\u6183\u6184\u618B\u618D\u6192\u6193\u6197\u6198\u619C\u619D\u619F\u61A0\u61A5\u61A8\u61AA\u61AD\u61B8\u61B9\u61BC\u61C0\u61C1\u61C2\u61CE\u61CF\u61D5\u61DC\u61DD\u61DE\u61DF\u61E1\u61E2\u61E7\u61E9\u61E5"],
["8fbfa1", "\u61EC\u61ED\u61EF\u6201\u6203\u6204\u6207\u6213\u6215\u621C\u6220\u6222\u6223\u6227\u6229\u622B\u6239\u623D\u6242\u6243\u6244\u6246\u624C\u6250\u6251\u6252\u6254\u6256\u625A\u625C\u6264\u626D\u626F\u6273\u627A\u627D\u628D\u628E\u628F\u6290\u62A6\u62A8\u62B3\u62B6\u62B7\u62BA\u62BE\u62BF\u62C4\u62CE\u62D5\u62D6\u62DA\u62EA\u62F2\u62F4\u62FC\u62FD\u6303\u6304\u630A\u630B\u630D\u6310\u6313\u6316\u6318\u6329\u632A\u632D\u6335\u6336\u6339\u633C\u6341\u6342\u6343\u6344\u6346\u634A\u634B\u634E\u6352\u6353\u6354\u6358\u635B\u6365\u6366\u636C\u636D\u6371\u6374\u6375"],
["8fc0a1", "\u6378\u637C\u637D\u637F\u6382\u6384\u6387\u638A\u6390\u6394\u6395\u6399\u639A\u639E\u63A4\u63A6\u63AD\u63AE\u63AF\u63BD\u63C1\u63C5\u63C8\u63CE\u63D1\u63D3\u63D4\u63D5\u63DC\u63E0\u63E5\u63EA\u63EC\u63F2\u63F3\u63F5\u63F8\u63F9\u6409\u640A\u6410\u6412\u6414\u6418\u641E\u6420\u6422\u6424\u6425\u6429\u642A\u642F\u6430\u6435\u643D\u643F\u644B\u644F\u6451\u6452\u6453\u6454\u645A\u645B\u645C\u645D\u645F\u6460\u6461\u6463\u646D\u6473\u6474\u647B\u647D\u6485\u6487\u648F\u6490\u6491\u6498\u6499\u649B\u649D\u649F\u64A1\u64A3\u64A6\u64A8\u64AC\u64B3\u64BD\u64BE\u64BF"],
["8fc1a1", "\u64C4\u64C9\u64CA\u64CB\u64CC\u64CE\u64D0\u64D1\u64D5\u64D7\u64E4\u64E5\u64E9\u64EA\u64ED\u64F0\u64F5\u64F7\u64FB\u64FF\u6501\u6504\u6508\u6509\u650A\u650F\u6513\u6514\u6516\u6519\u651B\u651E\u651F\u6522\u6526\u6529\u652E\u6531\u653A\u653C\u653D\u6543\u6547\u6549\u6550\u6552\u6554\u655F\u6560\u6567\u656B\u657A\u657D\u6581\u6585\u658A\u6592\u6595\u6598\u659D\u65A0\u65A3\u65A6\u65AE\u65B2\u65B3\u65B4\u65BF\u65C2\u65C8\u65C9\u65CE\u65D0\u65D4\u65D6\u65D8\u65DF\u65F0\u65F2\u65F4\u65F5\u65F9\u65FE\u65FF\u6600\u6604\u6608\u6609\u660D\u6611\u6612\u6615\u6616\u661D"],
["8fc2a1", "\u661E\u6621\u6622\u6623\u6624\u6626\u6629\u662A\u662B\u662C\u662E\u6630\u6631\u6633\u6639\u6637\u6640\u6645\u6646\u664A\u664C\u6651\u664E\u6657\u6658\u6659\u665B\u665C\u6660\u6661\u66FB\u666A\u666B\u666C\u667E\u6673\u6675\u667F\u6677\u6678\u6679\u667B\u6680\u667C\u668B\u668C\u668D\u6690\u6692\u6699\u669A\u669B\u669C\u669F\u66A0\u66A4\u66AD\u66B1\u66B2\u66B5\u66BB\u66BF\u66C0\u66C2\u66C3\u66C8\u66CC\u66CE\u66CF\u66D4\u66DB\u66DF\u66E8\u66EB\u66EC\u66EE\u66FA\u6705\u6707\u670E\u6713\u6719\u671C\u6720\u6722\u6733\u673E\u6745\u6747\u6748\u674C\u6754\u6755\u675D"],
["8fc3a1", "\u6766\u676C\u676E\u6774\u6776\u677B\u6781\u6784\u678E\u678F\u6791\u6793\u6796\u6798\u6799\u679B\u67B0\u67B1\u67B2\u67B5\u67BB\u67BC\u67BD\u67F9\u67C0\u67C2\u67C3\u67C5\u67C8\u67C9\u67D2\u67D7\u67D9\u67DC\u67E1\u67E6\u67F0\u67F2\u67F6\u67F7\u6852\u6814\u6819\u681D\u681F\u6828\u6827\u682C\u682D\u682F\u6830\u6831\u6833\u683B\u683F\u6844\u6845\u684A\u684C\u6855\u6857\u6858\u685B\u686B\u686E", 4, "\u6875\u6879\u687A\u687B\u687C\u6882\u6884\u6886\u6888\u6896\u6898\u689A\u689C\u68A1\u68A3\u68A5\u68A9\u68AA\u68AE\u68B2\u68BB\u68C5\u68C8\u68CC\u68CF"],
["8fc4a1", "\u68D0\u68D1\u68D3\u68D6\u68D9\u68DC\u68DD\u68E5\u68E8\u68EA\u68EB\u68EC\u68ED\u68F0\u68F1\u68F5\u68F6\u68FB\u68FC\u68FD\u6906\u6909\u690A\u6910\u6911\u6913\u6916\u6917\u6931\u6933\u6935\u6938\u693B\u6942\u6945\u6949\u694E\u6957\u695B\u6963\u6964\u6965\u6966\u6968\u6969\u696C\u6970\u6971\u6972\u697A\u697B\u697F\u6980\u698D\u6992\u6996\u6998\u69A1\u69A5\u69A6\u69A8\u69AB\u69AD\u69AF\u69B7\u69B8\u69BA\u69BC\u69C5\u69C8\u69D1\u69D6\u69D7\u69E2\u69E5\u69EE\u69EF\u69F1\u69F3\u69F5\u69FE\u6A00\u6A01\u6A03\u6A0F\u6A11\u6A15\u6A1A\u6A1D\u6A20\u6A24\u6A28\u6A30\u6A32"],
["8fc5a1", "\u6A34\u6A37\u6A3B\u6A3E\u6A3F\u6A45\u6A46\u6A49\u6A4A\u6A4E\u6A50\u6A51\u6A52\u6A55\u6A56\u6A5B\u6A64\u6A67\u6A6A\u6A71\u6A73\u6A7E\u6A81\u6A83\u6A86\u6A87\u6A89\u6A8B\u6A91\u6A9B\u6A9D\u6A9E\u6A9F\u6AA5\u6AAB\u6AAF\u6AB0\u6AB1\u6AB4\u6ABD\u6ABE\u6ABF\u6AC6\u6AC9\u6AC8\u6ACC\u6AD0\u6AD4\u6AD5\u6AD6\u6ADC\u6ADD\u6AE4\u6AE7\u6AEC\u6AF0\u6AF1\u6AF2\u6AFC\u6AFD\u6B02\u6B03\u6B06\u6B07\u6B09\u6B0F\u6B10\u6B11\u6B17\u6B1B\u6B1E\u6B24\u6B28\u6B2B\u6B2C\u6B2F\u6B35\u6B36\u6B3B\u6B3F\u6B46\u6B4A\u6B4D\u6B52\u6B56\u6B58\u6B5D\u6B60\u6B67\u6B6B\u6B6E\u6B70\u6B75\u6B7D"],
["8fc6a1", "\u6B7E\u6B82\u6B85\u6B97\u6B9B\u6B9F\u6BA0\u6BA2\u6BA3\u6BA8\u6BA9\u6BAC\u6BAD\u6BAE\u6BB0\u6BB8\u6BB9\u6BBD\u6BBE\u6BC3\u6BC4\u6BC9\u6BCC\u6BD6\u6BDA\u6BE1\u6BE3\u6BE6\u6BE7\u6BEE\u6BF1\u6BF7\u6BF9\u6BFF\u6C02\u6C04\u6C05\u6C09\u6C0D\u6C0E\u6C10\u6C12\u6C19\u6C1F\u6C26\u6C27\u6C28\u6C2C\u6C2E\u6C33\u6C35\u6C36\u6C3A\u6C3B\u6C3F\u6C4A\u6C4B\u6C4D\u6C4F\u6C52\u6C54\u6C59\u6C5B\u6C5C\u6C6B\u6C6D\u6C6F\u6C74\u6C76\u6C78\u6C79\u6C7B\u6C85\u6C86\u6C87\u6C89\u6C94\u6C95\u6C97\u6C98\u6C9C\u6C9F\u6CB0\u6CB2\u6CB4\u6CC2\u6CC6\u6CCD\u6CCF\u6CD0\u6CD1\u6CD2\u6CD4\u6CD6"],
["8fc7a1", "\u6CDA\u6CDC\u6CE0\u6CE7\u6CE9\u6CEB\u6CEC\u6CEE\u6CF2\u6CF4\u6D04\u6D07\u6D0A\u6D0E\u6D0F\u6D11\u6D13\u6D1A\u6D26\u6D27\u6D28\u6C67\u6D2E\u6D2F\u6D31\u6D39\u6D3C\u6D3F\u6D57\u6D5E\u6D5F\u6D61\u6D65\u6D67\u6D6F\u6D70\u6D7C\u6D82\u6D87\u6D91\u6D92\u6D94\u6D96\u6D97\u6D98\u6DAA\u6DAC\u6DB4\u6DB7\u6DB9\u6DBD\u6DBF\u6DC4\u6DC8\u6DCA\u6DCE\u6DCF\u6DD6\u6DDB\u6DDD\u6DDF\u6DE0\u6DE2\u6DE5\u6DE9\u6DEF\u6DF0\u6DF4\u6DF6\u6DFC\u6E00\u6E04\u6E1E\u6E22\u6E27\u6E32\u6E36\u6E39\u6E3B\u6E3C\u6E44\u6E45\u6E48\u6E49\u6E4B\u6E4F\u6E51\u6E52\u6E53\u6E54\u6E57\u6E5C\u6E5D\u6E5E"],
["8fc8a1", "\u6E62\u6E63\u6E68\u6E73\u6E7B\u6E7D\u6E8D\u6E93\u6E99\u6EA0\u6EA7\u6EAD\u6EAE\u6EB1\u6EB3\u6EBB\u6EBF\u6EC0\u6EC1\u6EC3\u6EC7\u6EC8\u6ECA\u6ECD\u6ECE\u6ECF\u6EEB\u6EED\u6EEE\u6EF9\u6EFB\u6EFD\u6F04\u6F08\u6F0A\u6F0C\u6F0D\u6F16\u6F18\u6F1A\u6F1B\u6F26\u6F29\u6F2A\u6F2F\u6F30\u6F33\u6F36\u6F3B\u6F3C\u6F2D\u6F4F\u6F51\u6F52\u6F53\u6F57\u6F59\u6F5A\u6F5D\u6F5E\u6F61\u6F62\u6F68\u6F6C\u6F7D\u6F7E\u6F83\u6F87\u6F88\u6F8B\u6F8C\u6F8D\u6F90\u6F92\u6F93\u6F94\u6F96\u6F9A\u6F9F\u6FA0\u6FA5\u6FA6\u6FA7\u6FA8\u6FAE\u6FAF\u6FB0\u6FB5\u6FB6\u6FBC\u6FC5\u6FC7\u6FC8\u6FCA"],
["8fc9a1", "\u6FDA\u6FDE\u6FE8\u6FE9\u6FF0\u6FF5\u6FF9\u6FFC\u6FFD\u7000\u7005\u7006\u7007\u700D\u7017\u7020\u7023\u702F\u7034\u7037\u7039\u703C\u7043\u7044\u7048\u7049\u704A\u704B\u7054\u7055\u705D\u705E\u704E\u7064\u7065\u706C\u706E\u7075\u7076\u707E\u7081\u7085\u7086\u7094", 4, "\u709B\u70A4\u70AB\u70B0\u70B1\u70B4\u70B7\u70CA\u70D1\u70D3\u70D4\u70D5\u70D6\u70D8\u70DC\u70E4\u70FA\u7103", 4, "\u710B\u710C\u710F\u711E\u7120\u712B\u712D\u712F\u7130\u7131\u7138\u7141\u7145\u7146\u7147\u714A\u714B\u7150\u7152\u7157\u715A\u715C\u715E\u7160"],
["8fcaa1", "\u7168\u7179\u7180\u7185\u7187\u718C\u7192\u719A\u719B\u71A0\u71A2\u71AF\u71B0\u71B2\u71B3\u71BA\u71BF\u71C0\u71C1\u71C4\u71CB\u71CC\u71D3\u71D6\u71D9\u71DA\u71DC\u71F8\u71FE\u7200\u7207\u7208\u7209\u7213\u7217\u721A\u721D\u721F\u7224\u722B\u722F\u7234\u7238\u7239\u7241\u7242\u7243\u7245\u724E\u724F\u7250\u7253\u7255\u7256\u725A\u725C\u725E\u7260\u7263\u7268\u726B\u726E\u726F\u7271\u7277\u7278\u727B\u727C\u727F\u7284\u7289\u728D\u728E\u7293\u729B\u72A8\u72AD\u72AE\u72B1\u72B4\u72BE\u72C1\u72C7\u72C9\u72CC\u72D5\u72D6\u72D8\u72DF\u72E5\u72F3\u72F4\u72FA\u72FB"],
["8fcba1", "\u72FE\u7302\u7304\u7305\u7307\u730B\u730D\u7312\u7313\u7318\u7319\u731E\u7322\u7324\u7327\u7328\u732C\u7331\u7332\u7335\u733A\u733B\u733D\u7343\u734D\u7350\u7352\u7356\u7358\u735D\u735E\u735F\u7360\u7366\u7367\u7369\u736B\u736C\u736E\u736F\u7371\u7377\u7379\u737C\u7380\u7381\u7383\u7385\u7386\u738E\u7390\u7393\u7395\u7397\u7398\u739C\u739E\u739F\u73A0\u73A2\u73A5\u73A6\u73AA\u73AB\u73AD\u73B5\u73B7\u73B9\u73BC\u73BD\u73BF\u73C5\u73C6\u73C9\u73CB\u73CC\u73CF\u73D2\u73D3\u73D6\u73D9\u73DD\u73E1\u73E3\u73E6\u73E7\u73E9\u73F4\u73F5\u73F7\u73F9\u73FA\u73FB\u73FD"],
["8fcca1", "\u73FF\u7400\u7401\u7404\u7407\u740A\u7411\u741A\u741B\u7424\u7426\u7428", 9, "\u7439\u7440\u7443\u7444\u7446\u7447\u744B\u744D\u7451\u7452\u7457\u745D\u7462\u7466\u7467\u7468\u746B\u746D\u746E\u7471\u7472\u7480\u7481\u7485\u7486\u7487\u7489\u748F\u7490\u7491\u7492\u7498\u7499\u749A\u749C\u749F\u74A0\u74A1\u74A3\u74A6\u74A8\u74A9\u74AA\u74AB\u74AE\u74AF\u74B1\u74B2\u74B5\u74B9\u74BB\u74BF\u74C8\u74C9\u74CC\u74D0\u74D3\u74D8\u74DA\u74DB\u74DE\u74DF\u74E4\u74E8\u74EA\u74EB\u74EF\u74F4\u74FA\u74FB\u74FC\u74FF\u7506"],
["8fcda1", "\u7512\u7516\u7517\u7520\u7521\u7524\u7527\u7529\u752A\u752F\u7536\u7539\u753D\u753E\u753F\u7540\u7543\u7547\u7548\u754E\u7550\u7552\u7557\u755E\u755F\u7561\u756F\u7571\u7579", 5, "\u7581\u7585\u7590\u7592\u7593\u7595\u7599\u759C\u75A2\u75A4\u75B4\u75BA\u75BF\u75C0\u75C1\u75C4\u75C6\u75CC\u75CE\u75CF\u75D7\u75DC\u75DF\u75E0\u75E1\u75E4\u75E7\u75EC\u75EE\u75EF\u75F1\u75F9\u7600\u7602\u7603\u7604\u7607\u7608\u760A\u760C\u760F\u7612\u7613\u7615\u7616\u7619\u761B\u761C\u761D\u761E\u7623\u7625\u7626\u7629\u762D\u7632\u7633\u7635\u7638\u7639"],
["8fcea1", "\u763A\u763C\u764A\u7640\u7641\u7643\u7644\u7645\u7649\u764B\u7655\u7659\u765F\u7664\u7665\u766D\u766E\u766F\u7671\u7674\u7681\u7685\u768C\u768D\u7695\u769B\u769C\u769D\u769F\u76A0\u76A2", 6, "\u76AA\u76AD\u76BD\u76C1\u76C5\u76C9\u76CB\u76CC\u76CE\u76D4\u76D9\u76E0\u76E6\u76E8\u76EC\u76F0\u76F1\u76F6\u76F9\u76FC\u7700\u7706\u770A\u770E\u7712\u7714\u7715\u7717\u7719\u771A\u771C\u7722\u7728\u772D\u772E\u772F\u7734\u7735\u7736\u7739\u773D\u773E\u7742\u7745\u7746\u774A\u774D\u774E\u774F\u7752\u7756\u7757\u775C\u775E\u775F\u7760\u7762"],
["8fcfa1", "\u7764\u7767\u776A\u776C\u7770\u7772\u7773\u7774\u777A\u777D\u7780\u7784\u778C\u778D\u7794\u7795\u7796\u779A\u779F\u77A2\u77A7\u77AA\u77AE\u77AF\u77B1\u77B5\u77BE\u77C3\u77C9\u77D1\u77D2\u77D5\u77D9\u77DE\u77DF\u77E0\u77E4\u77E6\u77EA\u77EC\u77F0\u77F1\u77F4\u77F8\u77FB\u7805\u7806\u7809\u780D\u780E\u7811\u781D\u7821\u7822\u7823\u782D\u782E\u7830\u7835\u7837\u7843\u7844\u7847\u7848\u784C\u784E\u7852\u785C\u785E\u7860\u7861\u7863\u7864\u7868\u786A\u786E\u787A\u787E\u788A\u788F\u7894\u7898\u78A1\u789D\u789E\u789F\u78A4\u78A8\u78AC\u78AD\u78B0\u78B1\u78B2\u78B3"],
["8fd0a1", "\u78BB\u78BD\u78BF\u78C7\u78C8\u78C9\u78CC\u78CE\u78D2\u78D3\u78D5\u78D6\u78E4\u78DB\u78DF\u78E0\u78E1\u78E6\u78EA\u78F2\u78F3\u7900\u78F6\u78F7\u78FA\u78FB\u78FF\u7906\u790C\u7910\u791A\u791C\u791E\u791F\u7920\u7925\u7927\u7929\u792D\u7931\u7934\u7935\u793B\u793D\u793F\u7944\u7945\u7946\u794A\u794B\u794F\u7951\u7954\u7958\u795B\u795C\u7967\u7969\u796B\u7972\u7979\u797B\u797C\u797E\u798B\u798C\u7991\u7993\u7994\u7995\u7996\u7998\u799B\u799C\u79A1\u79A8\u79A9\u79AB\u79AF\u79B1\u79B4\u79B8\u79BB\u79C2\u79C4\u79C7\u79C8\u79CA\u79CF\u79D4\u79D6\u79DA\u79DD\u79DE"],
["8fd1a1", "\u79E0\u79E2\u79E5\u79EA\u79EB\u79ED\u79F1\u79F8\u79FC\u7A02\u7A03\u7A07\u7A09\u7A0A\u7A0C\u7A11\u7A15\u7A1B\u7A1E\u7A21\u7A27\u7A2B\u7A2D\u7A2F\u7A30\u7A34\u7A35\u7A38\u7A39\u7A3A\u7A44\u7A45\u7A47\u7A48\u7A4C\u7A55\u7A56\u7A59\u7A5C\u7A5D\u7A5F\u7A60\u7A65\u7A67\u7A6A\u7A6D\u7A75\u7A78\u7A7E\u7A80\u7A82\u7A85\u7A86\u7A8A\u7A8B\u7A90\u7A91\u7A94\u7A9E\u7AA0\u7AA3\u7AAC\u7AB3\u7AB5\u7AB9\u7ABB\u7ABC\u7AC6\u7AC9\u7ACC\u7ACE\u7AD1\u7ADB\u7AE8\u7AE9\u7AEB\u7AEC\u7AF1\u7AF4\u7AFB\u7AFD\u7AFE\u7B07\u7B14\u7B1F\u7B23\u7B27\u7B29\u7B2A\u7B2B\u7B2D\u7B2E\u7B2F\u7B30"],
["8fd2a1", "\u7B31\u7B34\u7B3D\u7B3F\u7B40\u7B41\u7B47\u7B4E\u7B55\u7B60\u7B64\u7B66\u7B69\u7B6A\u7B6D\u7B6F\u7B72\u7B73\u7B77\u7B84\u7B89\u7B8E\u7B90\u7B91\u7B96\u7B9B\u7B9E\u7BA0\u7BA5\u7BAC\u7BAF\u7BB0\u7BB2\u7BB5\u7BB6\u7BBA\u7BBB\u7BBC\u7BBD\u7BC2\u7BC5\u7BC8\u7BCA\u7BD4\u7BD6\u7BD7\u7BD9\u7BDA\u7BDB\u7BE8\u7BEA\u7BF2\u7BF4\u7BF5\u7BF8\u7BF9\u7BFA\u7BFC\u7BFE\u7C01\u7C02\u7C03\u7C04\u7C06\u7C09\u7C0B\u7C0C\u7C0E\u7C0F\u7C19\u7C1B\u7C20\u7C25\u7C26\u7C28\u7C2C\u7C31\u7C33\u7C34\u7C36\u7C39\u7C3A\u7C46\u7C4A\u7C55\u7C51\u7C52\u7C53\u7C59", 5],
["8fd3a1", "\u7C61\u7C63\u7C67\u7C69\u7C6D\u7C6E\u7C70\u7C72\u7C79\u7C7C\u7C7D\u7C86\u7C87\u7C8F\u7C94\u7C9E\u7CA0\u7CA6\u7CB0\u7CB6\u7CB7\u7CBA\u7CBB\u7CBC\u7CBF\u7CC4\u7CC7\u7CC8\u7CC9\u7CCD\u7CCF\u7CD3\u7CD4\u7CD5\u7CD7\u7CD9\u7CDA\u7CDD\u7CE6\u7CE9\u7CEB\u7CF5\u7D03\u7D07\u7D08\u7D09\u7D0F\u7D11\u7D12\u7D13\u7D16\u7D1D\u7D1E\u7D23\u7D26\u7D2A\u7D2D\u7D31\u7D3C\u7D3D\u7D3E\u7D40\u7D41\u7D47\u7D48\u7D4D\u7D51\u7D53\u7D57\u7D59\u7D5A\u7D5C\u7D5D\u7D65\u7D67\u7D6A\u7D70\u7D78\u7D7A\u7D7B\u7D7F\u7D81\u7D82\u7D83\u7D85\u7D86\u7D88\u7D8B\u7D8C\u7D8D\u7D91\u7D96\u7D97\u7D9D"],
["8fd4a1", "\u7D9E\u7DA6\u7DA7\u7DAA\u7DB3\u7DB6\u7DB7\u7DB9\u7DC2", 4, "\u7DCC\u7DCD\u7DCE\u7DD7\u7DD9\u7E00\u7DE2\u7DE5\u7DE6\u7DEA\u7DEB\u7DED\u7DF1\u7DF5\u7DF6\u7DF9\u7DFA\u7E08\u7E10\u7E11\u7E15\u7E17\u7E1C\u7E1D\u7E20\u7E27\u7E28\u7E2C\u7E2D\u7E2F\u7E33\u7E36\u7E3F\u7E44\u7E45\u7E47\u7E4E\u7E50\u7E52\u7E58\u7E5F\u7E61\u7E62\u7E65\u7E6B\u7E6E\u7E6F\u7E73\u7E78\u7E7E\u7E81\u7E86\u7E87\u7E8A\u7E8D\u7E91\u7E95\u7E98\u7E9A\u7E9D\u7E9E\u7F3C\u7F3B\u7F3D\u7F3E\u7F3F\u7F43\u7F44\u7F47\u7F4F\u7F52\u7F53\u7F5B\u7F5C\u7F5D\u7F61\u7F63\u7F64\u7F65\u7F66\u7F6D"],
["8fd5a1", "\u7F71\u7F7D\u7F7E\u7F7F\u7F80\u7F8B\u7F8D\u7F8F\u7F90\u7F91\u7F96\u7F97\u7F9C\u7FA1\u7FA2\u7FA6\u7FAA\u7FAD\u7FB4\u7FBC\u7FBF\u7FC0\u7FC3\u7FC8\u7FCE\u7FCF\u7FDB\u7FDF\u7FE3\u7FE5\u7FE8\u7FEC\u7FEE\u7FEF\u7FF2\u7FFA\u7FFD\u7FFE\u7FFF\u8007\u8008\u800A\u800D\u800E\u800F\u8011\u8013\u8014\u8016\u801D\u801E\u801F\u8020\u8024\u8026\u802C\u802E\u8030\u8034\u8035\u8037\u8039\u803A\u803C\u803E\u8040\u8044\u8060\u8064\u8066\u806D\u8071\u8075\u8081\u8088\u808E\u809C\u809E\u80A6\u80A7\u80AB\u80B8\u80B9\u80C8\u80CD\u80CF\u80D2\u80D4\u80D5\u80D7\u80D8\u80E0\u80ED\u80EE"],
["8fd6a1", "\u80F0\u80F2\u80F3\u80F6\u80F9\u80FA\u80FE\u8103\u810B\u8116\u8117\u8118\u811C\u811E\u8120\u8124\u8127\u812C\u8130\u8135\u813A\u813C\u8145\u8147\u814A\u814C\u8152\u8157\u8160\u8161\u8167\u8168\u8169\u816D\u816F\u8177\u8181\u8190\u8184\u8185\u8186\u818B\u818E\u8196\u8198\u819B\u819E\u81A2\u81AE\u81B2\u81B4\u81BB\u81CB\u81C3\u81C5\u81CA\u81CE\u81CF\u81D5\u81D7\u81DB\u81DD\u81DE\u81E1\u81E4\u81EB\u81EC\u81F0\u81F1\u81F2\u81F5\u81F6\u81F8\u81F9\u81FD\u81FF\u8200\u8203\u820F\u8213\u8214\u8219\u821A\u821D\u8221\u8222\u8228\u8232\u8234\u823A\u8243\u8244\u8245\u8246"],
["8fd7a1", "\u824B\u824E\u824F\u8251\u8256\u825C\u8260\u8263\u8267\u826D\u8274\u827B\u827D\u827F\u8280\u8281\u8283\u8284\u8287\u8289\u828A\u828E\u8291\u8294\u8296\u8298\u829A\u829B\u82A0\u82A1\u82A3\u82A4\u82A7\u82A8\u82A9\u82AA\u82AE\u82B0\u82B2\u82B4\u82B7\u82BA\u82BC\u82BE\u82BF\u82C6\u82D0\u82D5\u82DA\u82E0\u82E2\u82E4\u82E8\u82EA\u82ED\u82EF\u82F6\u82F7\u82FD\u82FE\u8300\u8301\u8307\u8308\u830A\u830B\u8354\u831B\u831D\u831E\u831F\u8321\u8322\u832C\u832D\u832E\u8330\u8333\u8337\u833A\u833C\u833D\u8342\u8343\u8344\u8347\u834D\u834E\u8351\u8355\u8356\u8357\u8370\u8378"],
["8fd8a1", "\u837D\u837F\u8380\u8382\u8384\u8386\u838D\u8392\u8394\u8395\u8398\u8399\u839B\u839C\u839D\u83A6\u83A7\u83A9\u83AC\u83BE\u83BF\u83C0\u83C7\u83C9\u83CF\u83D0\u83D1\u83D4\u83DD\u8353\u83E8\u83EA\u83F6\u83F8\u83F9\u83FC\u8401\u8406\u840A\u840F\u8411\u8415\u8419\u83AD\u842F\u8439\u8445\u8447\u8448\u844A\u844D\u844F\u8451\u8452\u8456\u8458\u8459\u845A\u845C\u8460\u8464\u8465\u8467\u846A\u8470\u8473\u8474\u8476\u8478\u847C\u847D\u8481\u8485\u8492\u8493\u8495\u849E\u84A6\u84A8\u84A9\u84AA\u84AF\u84B1\u84B4\u84BA\u84BD\u84BE\u84C0\u84C2\u84C7\u84C8\u84CC\u84CF\u84D3"],
["8fd9a1", "\u84DC\u84E7\u84EA\u84EF\u84F0\u84F1\u84F2\u84F7\u8532\u84FA\u84FB\u84FD\u8502\u8503\u8507\u850C\u850E\u8510\u851C\u851E\u8522\u8523\u8524\u8525\u8527\u852A\u852B\u852F\u8533\u8534\u8536\u853F\u8546\u854F", 4, "\u8556\u8559\u855C", 6, "\u8564\u856B\u856F\u8579\u857A\u857B\u857D\u857F\u8581\u8585\u8586\u8589\u858B\u858C\u858F\u8593\u8598\u859D\u859F\u85A0\u85A2\u85A5\u85A7\u85B4\u85B6\u85B7\u85B8\u85BC\u85BD\u85BE\u85BF\u85C2\u85C7\u85CA\u85CB\u85CE\u85AD\u85D8\u85DA\u85DF\u85E0\u85E6\u85E8\u85ED\u85F3\u85F6\u85FC"],
["8fdaa1", "\u85FF\u8600\u8604\u8605\u860D\u860E\u8610\u8611\u8612\u8618\u8619\u861B\u861E\u8621\u8627\u8629\u8636\u8638\u863A\u863C\u863D\u8640\u8642\u8646\u8652\u8653\u8656\u8657\u8658\u8659\u865D\u8660", 4, "\u8669\u866C\u866F\u8675\u8676\u8677\u867A\u868D\u8691\u8696\u8698\u869A\u869C\u86A1\u86A6\u86A7\u86A8\u86AD\u86B1\u86B3\u86B4\u86B5\u86B7\u86B8\u86B9\u86BF\u86C0\u86C1\u86C3\u86C5\u86D1\u86D2\u86D5\u86D7\u86DA\u86DC\u86E0\u86E3\u86E5\u86E7\u8688\u86FA\u86FC\u86FD\u8704\u8705\u8707\u870B\u870E\u870F\u8710\u8713\u8714\u8719\u871E\u871F\u8721\u8723"],
["8fdba1", "\u8728\u872E\u872F\u8731\u8732\u8739\u873A\u873C\u873D\u873E\u8740\u8743\u8745\u874D\u8758\u875D\u8761\u8764\u8765\u876F\u8771\u8772\u877B\u8783", 6, "\u878B\u878C\u8790\u8793\u8795\u8797\u8798\u8799\u879E\u87A0\u87A3\u87A7\u87AC\u87AD\u87AE\u87B1\u87B5\u87BE\u87BF\u87C1\u87C8\u87C9\u87CA\u87CE\u87D5\u87D6\u87D9\u87DA\u87DC\u87DF\u87E2\u87E3\u87E4\u87EA\u87EB\u87ED\u87F1\u87F3\u87F8\u87FA\u87FF\u8801\u8803\u8806\u8809\u880A\u880B\u8810\u8819\u8812\u8813\u8814\u8818\u881A\u881B\u881C\u881E\u881F\u8828\u882D\u882E\u8830\u8832\u8835"],
["8fdca1", "\u883A\u883C\u8841\u8843\u8845\u8848\u8849\u884A\u884B\u884E\u8851\u8855\u8856\u8858\u885A\u885C\u885F\u8860\u8864\u8869\u8871\u8879\u887B\u8880\u8898\u889A\u889B\u889C\u889F\u88A0\u88A8\u88AA\u88BA\u88BD\u88BE\u88C0\u88CA", 4, "\u88D1\u88D2\u88D3\u88DB\u88DE\u88E7\u88EF\u88F0\u88F1\u88F5\u88F7\u8901\u8906\u890D\u890E\u890F\u8915\u8916\u8918\u8919\u891A\u891C\u8920\u8926\u8927\u8928\u8930\u8931\u8932\u8935\u8939\u893A\u893E\u8940\u8942\u8945\u8946\u8949\u894F\u8952\u8957\u895A\u895B\u895C\u8961\u8962\u8963\u896B\u896E\u8970\u8973\u8975\u897A"],
["8fdda1", "\u897B\u897C\u897D\u8989\u898D\u8990\u8994\u8995\u899B\u899C\u899F\u89A0\u89A5\u89B0\u89B4\u89B5\u89B6\u89B7\u89BC\u89D4", 4, "\u89E5\u89E9\u89EB\u89ED\u89F1\u89F3\u89F6\u89F9\u89FD\u89FF\u8A04\u8A05\u8A07\u8A0F\u8A11\u8A12\u8A14\u8A15\u8A1E\u8A20\u8A22\u8A24\u8A26\u8A2B\u8A2C\u8A2F\u8A35\u8A37\u8A3D\u8A3E\u8A40\u8A43\u8A45\u8A47\u8A49\u8A4D\u8A4E\u8A53\u8A56\u8A57\u8A58\u8A5C\u8A5D\u8A61\u8A65\u8A67\u8A75\u8A76\u8A77\u8A79\u8A7A\u8A7B\u8A7E\u8A7F\u8A80\u8A83\u8A86\u8A8B\u8A8F\u8A90\u8A92\u8A96\u8A97\u8A99\u8A9F\u8AA7\u8AA9\u8AAE\u8AAF\u8AB3"],
["8fdea1", "\u8AB6\u8AB7\u8ABB\u8ABE\u8AC3\u8AC6\u8AC8\u8AC9\u8ACA\u8AD1\u8AD3\u8AD4\u8AD5\u8AD7\u8ADD\u8ADF\u8AEC\u8AF0\u8AF4\u8AF5\u8AF6\u8AFC\u8AFF\u8B05\u8B06\u8B0B\u8B11\u8B1C\u8B1E\u8B1F\u8B0A\u8B2D\u8B30\u8B37\u8B3C\u8B42", 4, "\u8B48\u8B52\u8B53\u8B54\u8B59\u8B4D\u8B5E\u8B63\u8B6D\u8B76\u8B78\u8B79\u8B7C\u8B7E\u8B81\u8B84\u8B85\u8B8B\u8B8D\u8B8F\u8B94\u8B95\u8B9C\u8B9E\u8B9F\u8C38\u8C39\u8C3D\u8C3E\u8C45\u8C47\u8C49\u8C4B\u8C4F\u8C51\u8C53\u8C54\u8C57\u8C58\u8C5B\u8C5D\u8C59\u8C63\u8C64\u8C66\u8C68\u8C69\u8C6D\u8C73\u8C75\u8C76\u8C7B\u8C7E\u8C86"],
["8fdfa1", "\u8C87\u8C8B\u8C90\u8C92\u8C93\u8C99\u8C9B\u8C9C\u8CA4\u8CB9\u8CBA\u8CC5\u8CC6\u8CC9\u8CCB\u8CCF\u8CD6\u8CD5\u8CD9\u8CDD\u8CE1\u8CE8\u8CEC\u8CEF\u8CF0\u8CF2\u8CF5\u8CF7\u8CF8\u8CFE\u8CFF\u8D01\u8D03\u8D09\u8D12\u8D17\u8D1B\u8D65\u8D69\u8D6C\u8D6E\u8D7F\u8D82\u8D84\u8D88\u8D8D\u8D90\u8D91\u8D95\u8D9E\u8D9F\u8DA0\u8DA6\u8DAB\u8DAC\u8DAF\u8DB2\u8DB5\u8DB7\u8DB9\u8DBB\u8DC0\u8DC5\u8DC6\u8DC7\u8DC8\u8DCA\u8DCE\u8DD1\u8DD4\u8DD5\u8DD7\u8DD9\u8DE4\u8DE5\u8DE7\u8DEC\u8DF0\u8DBC\u8DF1\u8DF2\u8DF4\u8DFD\u8E01\u8E04\u8E05\u8E06\u8E0B\u8E11\u8E14\u8E16\u8E20\u8E21\u8E22"],
["8fe0a1", "\u8E23\u8E26\u8E27\u8E31\u8E33\u8E36\u8E37\u8E38\u8E39\u8E3D\u8E40\u8E41\u8E4B\u8E4D\u8E4E\u8E4F\u8E54\u8E5B\u8E5C\u8E5D\u8E5E\u8E61\u8E62\u8E69\u8E6C\u8E6D\u8E6F\u8E70\u8E71\u8E79\u8E7A\u8E7B\u8E82\u8E83\u8E89\u8E90\u8E92\u8E95\u8E9A\u8E9B\u8E9D\u8E9E\u8EA2\u8EA7\u8EA9\u8EAD\u8EAE\u8EB3\u8EB5\u8EBA\u8EBB\u8EC0\u8EC1\u8EC3\u8EC4\u8EC7\u8ECF\u8ED1\u8ED4\u8EDC\u8EE8\u8EEE\u8EF0\u8EF1\u8EF7\u8EF9\u8EFA\u8EED\u8F00\u8F02\u8F07\u8F08\u8F0F\u8F10\u8F16\u8F17\u8F18\u8F1E\u8F20\u8F21\u8F23\u8F25\u8F27\u8F28\u8F2C\u8F2D\u8F2E\u8F34\u8F35\u8F36\u8F37\u8F3A\u8F40\u8F41"],
["8fe1a1", "\u8F43\u8F47\u8F4F\u8F51", 4, "\u8F58\u8F5D\u8F5E\u8F65\u8F9D\u8FA0\u8FA1\u8FA4\u8FA5\u8FA6\u8FB5\u8FB6\u8FB8\u8FBE\u8FC0\u8FC1\u8FC6\u8FCA\u8FCB\u8FCD\u8FD0\u8FD2\u8FD3\u8FD5\u8FE0\u8FE3\u8FE4\u8FE8\u8FEE\u8FF1\u8FF5\u8FF6\u8FFB\u8FFE\u9002\u9004\u9008\u900C\u9018\u901B\u9028\u9029\u902F\u902A\u902C\u902D\u9033\u9034\u9037\u903F\u9043\u9044\u904C\u905B\u905D\u9062\u9066\u9067\u906C\u9070\u9074\u9079\u9085\u9088\u908B\u908C\u908E\u9090\u9095\u9097\u9098\u9099\u909B\u90A0\u90A1\u90A2\u90A5\u90B0\u90B2\u90B3\u90B4\u90B6\u90BD\u90CC\u90BE\u90C3"],
["8fe2a1", "\u90C4\u90C5\u90C7\u90C8\u90D5\u90D7\u90D8\u90D9\u90DC\u90DD\u90DF\u90E5\u90D2\u90F6\u90EB\u90EF\u90F0\u90F4\u90FE\u90FF\u9100\u9104\u9105\u9106\u9108\u910D\u9110\u9114\u9116\u9117\u9118\u911A\u911C\u911E\u9120\u9125\u9122\u9123\u9127\u9129\u912E\u912F\u9131\u9134\u9136\u9137\u9139\u913A\u913C\u913D\u9143\u9147\u9148\u914F\u9153\u9157\u9159\u915A\u915B\u9161\u9164\u9167\u916D\u9174\u9179\u917A\u917B\u9181\u9183\u9185\u9186\u918A\u918E\u9191\u9193\u9194\u9195\u9198\u919E\u91A1\u91A6\u91A8\u91AC\u91AD\u91AE\u91B0\u91B1\u91B2\u91B3\u91B6\u91BB\u91BC\u91BD\u91BF"],
["8fe3a1", "\u91C2\u91C3\u91C5\u91D3\u91D4\u91D7\u91D9\u91DA\u91DE\u91E4\u91E5\u91E9\u91EA\u91EC", 5, "\u91F7\u91F9\u91FB\u91FD\u9200\u9201\u9204\u9205\u9206\u9207\u9209\u920A\u920C\u9210\u9212\u9213\u9216\u9218\u921C\u921D\u9223\u9224\u9225\u9226\u9228\u922E\u922F\u9230\u9233\u9235\u9236\u9238\u9239\u923A\u923C\u923E\u9240\u9242\u9243\u9246\u9247\u924A\u924D\u924E\u924F\u9251\u9258\u9259\u925C\u925D\u9260\u9261\u9265\u9267\u9268\u9269\u926E\u926F\u9270\u9275", 4, "\u927B\u927C\u927D\u927F\u9288\u9289\u928A\u928D\u928E\u9292\u9297"],
["8fe4a1", "\u9299\u929F\u92A0\u92A4\u92A5\u92A7\u92A8\u92AB\u92AF\u92B2\u92B6\u92B8\u92BA\u92BB\u92BC\u92BD\u92BF", 4, "\u92C5\u92C6\u92C7\u92C8\u92CB\u92CC\u92CD\u92CE\u92D0\u92D3\u92D5\u92D7\u92D8\u92D9\u92DC\u92DD\u92DF\u92E0\u92E1\u92E3\u92E5\u92E7\u92E8\u92EC\u92EE\u92F0\u92F9\u92FB\u92FF\u9300\u9302\u9308\u930D\u9311\u9314\u9315\u931C\u931D\u931E\u931F\u9321\u9324\u9325\u9327\u9329\u932A\u9333\u9334\u9336\u9337\u9347\u9348\u9349\u9350\u9351\u9352\u9355\u9357\u9358\u935A\u935E\u9364\u9365\u9367\u9369\u936A\u936D\u936F\u9370\u9371\u9373\u9374\u9376"],
["8fe5a1", "\u937A\u937D\u937F\u9380\u9381\u9382\u9388\u938A\u938B\u938D\u938F\u9392\u9395\u9398\u939B\u939E\u93A1\u93A3\u93A4\u93A6\u93A8\u93AB\u93B4\u93B5\u93B6\u93BA\u93A9\u93C1\u93C4\u93C5\u93C6\u93C7\u93C9", 4, "\u93D3\u93D9\u93DC\u93DE\u93DF\u93E2\u93E6\u93E7\u93F9\u93F7\u93F8\u93FA\u93FB\u93FD\u9401\u9402\u9404\u9408\u9409\u940D\u940E\u940F\u9415\u9416\u9417\u941F\u942E\u942F\u9431\u9432\u9433\u9434\u943B\u943F\u943D\u9443\u9445\u9448\u944A\u944C\u9455\u9459\u945C\u945F\u9461\u9463\u9468\u946B\u946D\u946E\u946F\u9471\u9472\u9484\u9483\u9578\u9579"],
["8fe6a1", "\u957E\u9584\u9588\u958C\u958D\u958E\u959D\u959E\u959F\u95A1\u95A6\u95A9\u95AB\u95AC\u95B4\u95B6\u95BA\u95BD\u95BF\u95C6\u95C8\u95C9\u95CB\u95D0\u95D1\u95D2\u95D3\u95D9\u95DA\u95DD\u95DE\u95DF\u95E0\u95E4\u95E6\u961D\u961E\u9622\u9624\u9625\u9626\u962C\u9631\u9633\u9637\u9638\u9639\u963A\u963C\u963D\u9641\u9652\u9654\u9656\u9657\u9658\u9661\u966E\u9674\u967B\u967C\u967E\u967F\u9681\u9682\u9683\u9684\u9689\u9691\u9696\u969A\u969D\u969F\u96A4\u96A5\u96A6\u96A9\u96AE\u96AF\u96B3\u96BA\u96CA\u96D2\u5DB2\u96D8\u96DA\u96DD\u96DE\u96DF\u96E9\u96EF\u96F1\u96FA\u9702"],
["8fe7a1", "\u9703\u9705\u9709\u971A\u971B\u971D\u9721\u9722\u9723\u9728\u9731\u9733\u9741\u9743\u974A\u974E\u974F\u9755\u9757\u9758\u975A\u975B\u9763\u9767\u976A\u976E\u9773\u9776\u9777\u9778\u977B\u977D\u977F\u9780\u9789\u9795\u9796\u9797\u9799\u979A\u979E\u979F\u97A2\u97AC\u97AE\u97B1\u97B2\u97B5\u97B6\u97B8\u97B9\u97BA\u97BC\u97BE\u97BF\u97C1\u97C4\u97C5\u97C7\u97C9\u97CA\u97CC\u97CD\u97CE\u97D0\u97D1\u97D4\u97D7\u97D8\u97D9\u97DD\u97DE\u97E0\u97DB\u97E1\u97E4\u97EF\u97F1\u97F4\u97F7\u97F8\u97FA\u9807\u980A\u9819\u980D\u980E\u9814\u9816\u981C\u981E\u9820\u9823\u9826"],
["8fe8a1", "\u982B\u982E\u982F\u9830\u9832\u9833\u9835\u9825\u983E\u9844\u9847\u984A\u9851\u9852\u9853\u9856\u9857\u9859\u985A\u9862\u9863\u9865\u9866\u986A\u986C\u98AB\u98AD\u98AE\u98B0\u98B4\u98B7\u98B8\u98BA\u98BB\u98BF\u98C2\u98C5\u98C8\u98CC\u98E1\u98E3\u98E5\u98E6\u98E7\u98EA\u98F3\u98F6\u9902\u9907\u9908\u9911\u9915\u9916\u9917\u991A\u991B\u991C\u991F\u9922\u9926\u9927\u992B\u9931", 4, "\u9939\u993A\u993B\u993C\u9940\u9941\u9946\u9947\u9948\u994D\u994E\u9954\u9958\u9959\u995B\u995C\u995E\u995F\u9960\u999B\u999D\u999F\u99A6\u99B0\u99B1\u99B2\u99B5"],
["8fe9a1", "\u99B9\u99BA\u99BD\u99BF\u99C3\u99C9\u99D3\u99D4\u99D9\u99DA\u99DC\u99DE\u99E7\u99EA\u99EB\u99EC\u99F0\u99F4\u99F5\u99F9\u99FD\u99FE\u9A02\u9A03\u9A04\u9A0B\u9A0C\u9A10\u9A11\u9A16\u9A1E\u9A20\u9A22\u9A23\u9A24\u9A27\u9A2D\u9A2E\u9A33\u9A35\u9A36\u9A38\u9A47\u9A41\u9A44\u9A4A\u9A4B\u9A4C\u9A4E\u9A51\u9A54\u9A56\u9A5D\u9AAA\u9AAC\u9AAE\u9AAF\u9AB2\u9AB4\u9AB5\u9AB6\u9AB9\u9ABB\u9ABE\u9ABF\u9AC1\u9AC3\u9AC6\u9AC8\u9ACE\u9AD0\u9AD2\u9AD5\u9AD6\u9AD7\u9ADB\u9ADC\u9AE0\u9AE4\u9AE5\u9AE7\u9AE9\u9AEC\u9AF2\u9AF3\u9AF5\u9AF9\u9AFA\u9AFD\u9AFF", 4],
["8feaa1", "\u9B04\u9B05\u9B08\u9B09\u9B0B\u9B0C\u9B0D\u9B0E\u9B10\u9B12\u9B16\u9B19\u9B1B\u9B1C\u9B20\u9B26\u9B2B\u9B2D\u9B33\u9B34\u9B35\u9B37\u9B39\u9B3A\u9B3D\u9B48\u9B4B\u9B4C\u9B55\u9B56\u9B57\u9B5B\u9B5E\u9B61\u9B63\u9B65\u9B66\u9B68\u9B6A", 4, "\u9B73\u9B75\u9B77\u9B78\u9B79\u9B7F\u9B80\u9B84\u9B85\u9B86\u9B87\u9B89\u9B8A\u9B8B\u9B8D\u9B8F\u9B90\u9B94\u9B9A\u9B9D\u9B9E\u9BA6\u9BA7\u9BA9\u9BAC\u9BB0\u9BB1\u9BB2\u9BB7\u9BB8\u9BBB\u9BBC\u9BBE\u9BBF\u9BC1\u9BC7\u9BC8\u9BCE\u9BD0\u9BD7\u9BD8\u9BDD\u9BDF\u9BE5\u9BE7\u9BEA\u9BEB\u9BEF\u9BF3\u9BF7\u9BF8"],
["8feba1", "\u9BF9\u9BFA\u9BFD\u9BFF\u9C00\u9C02\u9C0B\u9C0F\u9C11\u9C16\u9C18\u9C19\u9C1A\u9C1C\u9C1E\u9C22\u9C23\u9C26", 4, "\u9C31\u9C35\u9C36\u9C37\u9C3D\u9C41\u9C43\u9C44\u9C45\u9C49\u9C4A\u9C4E\u9C4F\u9C50\u9C53\u9C54\u9C56\u9C58\u9C5B\u9C5D\u9C5E\u9C5F\u9C63\u9C69\u9C6A\u9C5C\u9C6B\u9C68\u9C6E\u9C70\u9C72\u9C75\u9C77\u9C7B\u9CE6\u9CF2\u9CF7\u9CF9\u9D0B\u9D02\u9D11\u9D17\u9D18\u9D1C\u9D1D\u9D1E\u9D2F\u9D30\u9D32\u9D33\u9D34\u9D3A\u9D3C\u9D45\u9D3D\u9D42\u9D43\u9D47\u9D4A\u9D53\u9D54\u9D5F\u9D63\u9D62\u9D65\u9D69\u9D6A\u9D6B\u9D70\u9D76\u9D77\u9D7B"],
["8feca1", "\u9D7C\u9D7E\u9D83\u9D84\u9D86\u9D8A\u9D8D\u9D8E\u9D92\u9D93\u9D95\u9D96\u9D97\u9D98\u9DA1\u9DAA\u9DAC\u9DAE\u9DB1\u9DB5\u9DB9\u9DBC\u9DBF\u9DC3\u9DC7\u9DC9\u9DCA\u9DD4\u9DD5\u9DD6\u9DD7\u9DDA\u9DDE\u9DDF\u9DE0\u9DE5\u9DE7\u9DE9\u9DEB\u9DEE\u9DF0\u9DF3\u9DF4\u9DFE\u9E0A\u9E02\u9E07\u9E0E\u9E10\u9E11\u9E12\u9E15\u9E16\u9E19\u9E1C\u9E1D\u9E7A\u9E7B\u9E7C\u9E80\u9E82\u9E83\u9E84\u9E85\u9E87\u9E8E\u9E8F\u9E96\u9E98\u9E9B\u9E9E\u9EA4\u9EA8\u9EAC\u9EAE\u9EAF\u9EB0\u9EB3\u9EB4\u9EB5\u9EC6\u9EC8\u9ECB\u9ED5\u9EDF\u9EE4\u9EE7\u9EEC\u9EED\u9EEE\u9EF0\u9EF1\u9EF2\u9EF5"],
["8feda1", "\u9EF8\u9EFF\u9F02\u9F03\u9F09\u9F0F\u9F10\u9F11\u9F12\u9F14\u9F16\u9F17\u9F19\u9F1A\u9F1B\u9F1F\u9F22\u9F26\u9F2A\u9F2B\u9F2F\u9F31\u9F32\u9F34\u9F37\u9F39\u9F3A\u9F3C\u9F3D\u9F3F\u9F41\u9F43", 4, "\u9F53\u9F55\u9F56\u9F57\u9F58\u9F5A\u9F5D\u9F5E\u9F68\u9F69\u9F6D", 4, "\u9F73\u9F75\u9F7A\u9F7D\u9F8F\u9F90\u9F91\u9F92\u9F94\u9F96\u9F97\u9F9E\u9FA1\u9FA2\u9FA3\u9FA5"]
];
}
});
// node_modules/iconv-lite/encodings/tables/cp936.json
var require_cp936 = __commonJS({
"node_modules/iconv-lite/encodings/tables/cp936.json"(exports2, module2) {
module2.exports = [
["0", "\0", 127, "\u20AC"],
["8140", "\u4E02\u4E04\u4E05\u4E06\u4E0F\u4E12\u4E17\u4E1F\u4E20\u4E21\u4E23\u4E26\u4E29\u4E2E\u4E2F\u4E31\u4E33\u4E35\u4E37\u4E3C\u4E40\u4E41\u4E42\u4E44\u4E46\u4E4A\u4E51\u4E55\u4E57\u4E5A\u4E5B\u4E62\u4E63\u4E64\u4E65\u4E67\u4E68\u4E6A", 5, "\u4E72\u4E74", 9, "\u4E7F", 6, "\u4E87\u4E8A"],
["8180", "\u4E90\u4E96\u4E97\u4E99\u4E9C\u4E9D\u4E9E\u4EA3\u4EAA\u4EAF\u4EB0\u4EB1\u4EB4\u4EB6\u4EB7\u4EB8\u4EB9\u4EBC\u4EBD\u4EBE\u4EC8\u4ECC\u4ECF\u4ED0\u4ED2\u4EDA\u4EDB\u4EDC\u4EE0\u4EE2\u4EE6\u4EE7\u4EE9\u4EED\u4EEE\u4EEF\u4EF1\u4EF4\u4EF8\u4EF9\u4EFA\u4EFC\u4EFE\u4F00\u4F02", 6, "\u4F0B\u4F0C\u4F12", 4, "\u4F1C\u4F1D\u4F21\u4F23\u4F28\u4F29\u4F2C\u4F2D\u4F2E\u4F31\u4F33\u4F35\u4F37\u4F39\u4F3B\u4F3E", 4, "\u4F44\u4F45\u4F47", 5, "\u4F52\u4F54\u4F56\u4F61\u4F62\u4F66\u4F68\u4F6A\u4F6B\u4F6D\u4F6E\u4F71\u4F72\u4F75\u4F77\u4F78\u4F79\u4F7A\u4F7D\u4F80\u4F81\u4F82\u4F85\u4F86\u4F87\u4F8A\u4F8C\u4F8E\u4F90\u4F92\u4F93\u4F95\u4F96\u4F98\u4F99\u4F9A\u4F9C\u4F9E\u4F9F\u4FA1\u4FA2"],
["8240", "\u4FA4\u4FAB\u4FAD\u4FB0", 4, "\u4FB6", 8, "\u4FC0\u4FC1\u4FC2\u4FC6\u4FC7\u4FC8\u4FC9\u4FCB\u4FCC\u4FCD\u4FD2", 4, "\u4FD9\u4FDB\u4FE0\u4FE2\u4FE4\u4FE5\u4FE7\u4FEB\u4FEC\u4FF0\u4FF2\u4FF4\u4FF5\u4FF6\u4FF7\u4FF9\u4FFB\u4FFC\u4FFD\u4FFF", 11],
["8280", "\u500B\u500E\u5010\u5011\u5013\u5015\u5016\u5017\u501B\u501D\u501E\u5020\u5022\u5023\u5024\u5027\u502B\u502F", 10, "\u503B\u503D\u503F\u5040\u5041\u5042\u5044\u5045\u5046\u5049\u504A\u504B\u504D\u5050", 4, "\u5056\u5057\u5058\u5059\u505B\u505D", 7, "\u5066", 5, "\u506D", 8, "\u5078\u5079\u507A\u507C\u507D\u5081\u5082\u5083\u5084\u5086\u5087\u5089\u508A\u508B\u508C\u508E", 20, "\u50A4\u50A6\u50AA\u50AB\u50AD", 4, "\u50B3", 6, "\u50BC"],
["8340", "\u50BD", 17, "\u50D0", 5, "\u50D7\u50D8\u50D9\u50DB", 10, "\u50E8\u50E9\u50EA\u50EB\u50EF\u50F0\u50F1\u50F2\u50F4\u50F6", 4, "\u50FC", 9, "\u5108"],
["8380", "\u5109\u510A\u510C", 5, "\u5113", 13, "\u5122", 28, "\u5142\u5147\u514A\u514C\u514E\u514F\u5150\u5152\u5153\u5157\u5158\u5159\u515B\u515D", 4, "\u5163\u5164\u5166\u5167\u5169\u516A\u516F\u5172\u517A\u517E\u517F\u5183\u5184\u5186\u5187\u518A\u518B\u518E\u518F\u5190\u5191\u5193\u5194\u5198\u519A\u519D\u519E\u519F\u51A1\u51A3\u51A6", 4, "\u51AD\u51AE\u51B4\u51B8\u51B9\u51BA\u51BE\u51BF\u51C1\u51C2\u51C3\u51C5\u51C8\u51CA\u51CD\u51CE\u51D0\u51D2", 5],
["8440", "\u51D8\u51D9\u51DA\u51DC\u51DE\u51DF\u51E2\u51E3\u51E5", 5, "\u51EC\u51EE\u51F1\u51F2\u51F4\u51F7\u51FE\u5204\u5205\u5209\u520B\u520C\u520F\u5210\u5213\u5214\u5215\u521C\u521E\u521F\u5221\u5222\u5223\u5225\u5226\u5227\u522A\u522C\u522F\u5231\u5232\u5234\u5235\u523C\u523E\u5244", 5, "\u524B\u524E\u524F\u5252\u5253\u5255\u5257\u5258"],
["8480", "\u5259\u525A\u525B\u525D\u525F\u5260\u5262\u5263\u5264\u5266\u5268\u526B\u526C\u526D\u526E\u5270\u5271\u5273", 9, "\u527E\u5280\u5283", 4, "\u5289", 6, "\u5291\u5292\u5294", 6, "\u529C\u52A4\u52A5\u52A6\u52A7\u52AE\u52AF\u52B0\u52B4", 9, "\u52C0\u52C1\u52C2\u52C4\u52C5\u52C6\u52C8\u52CA\u52CC\u52CD\u52CE\u52CF\u52D1\u52D3\u52D4\u52D5\u52D7\u52D9", 5, "\u52E0\u52E1\u52E2\u52E3\u52E5", 10, "\u52F1", 7, "\u52FB\u52FC\u52FD\u5301\u5302\u5303\u5304\u5307\u5309\u530A\u530B\u530C\u530E"],
["8540", "\u5311\u5312\u5313\u5314\u5318\u531B\u531C\u531E\u531F\u5322\u5324\u5325\u5327\u5328\u5329\u532B\u532C\u532D\u532F", 9, "\u533C\u533D\u5340\u5342\u5344\u5346\u534B\u534C\u534D\u5350\u5354\u5358\u5359\u535B\u535D\u5365\u5368\u536A\u536C\u536D\u5372\u5376\u5379\u537B\u537C\u537D\u537E\u5380\u5381\u5383\u5387\u5388\u538A\u538E\u538F"],
["8580", "\u5390", 4, "\u5396\u5397\u5399\u539B\u539C\u539E\u53A0\u53A1\u53A4\u53A7\u53AA\u53AB\u53AC\u53AD\u53AF", 6, "\u53B7\u53B8\u53B9\u53BA\u53BC\u53BD\u53BE\u53C0\u53C3", 4, "\u53CE\u53CF\u53D0\u53D2\u53D3\u53D5\u53DA\u53DC\u53DD\u53DE\u53E1\u53E2\u53E7\u53F4\u53FA\u53FE\u53FF\u5400\u5402\u5405\u5407\u540B\u5414\u5418\u5419\u541A\u541C\u5422\u5424\u5425\u542A\u5430\u5433\u5436\u5437\u543A\u543D\u543F\u5441\u5442\u5444\u5445\u5447\u5449\u544C\u544D\u544E\u544F\u5451\u545A\u545D", 4, "\u5463\u5465\u5467\u5469", 7, "\u5474\u5479\u547A\u547E\u547F\u5481\u5483\u5485\u5487\u5488\u5489\u548A\u548D\u5491\u5493\u5497\u5498\u549C\u549E\u549F\u54A0\u54A1"],
["8640", "\u54A2\u54A5\u54AE\u54B0\u54B2\u54B5\u54B6\u54B7\u54B9\u54BA\u54BC\u54BE\u54C3\u54C5\u54CA\u54CB\u54D6\u54D8\u54DB\u54E0", 4, "\u54EB\u54EC\u54EF\u54F0\u54F1\u54F4", 5, "\u54FB\u54FE\u5500\u5502\u5503\u5504\u5505\u5508\u550A", 4, "\u5512\u5513\u5515", 5, "\u551C\u551D\u551E\u551F\u5521\u5525\u5526"],
["8680", "\u5528\u5529\u552B\u552D\u5532\u5534\u5535\u5536\u5538\u5539\u553A\u553B\u553D\u5540\u5542\u5545\u5547\u5548\u554B", 4, "\u5551\u5552\u5553\u5554\u5557", 4, "\u555D\u555E\u555F\u5560\u5562\u5563\u5568\u5569\u556B\u556F", 5, "\u5579\u557A\u557D\u557F\u5585\u5586\u558C\u558D\u558E\u5590\u5592\u5593\u5595\u5596\u5597\u559A\u559B\u559E\u55A0", 6, "\u55A8", 8, "\u55B2\u55B4\u55B6\u55B8\u55BA\u55BC\u55BF", 4, "\u55C6\u55C7\u55C8\u55CA\u55CB\u55CE\u55CF\u55D0\u55D5\u55D7", 4, "\u55DE\u55E0\u55E2\u55E7\u55E9\u55ED\u55EE\u55F0\u55F1\u55F4\u55F6\u55F8", 4, "\u55FF\u5602\u5603\u5604\u5605"],
["8740", "\u5606\u5607\u560A\u560B\u560D\u5610", 7, "\u5619\u561A\u561C\u561D\u5620\u5621\u5622\u5625\u5626\u5628\u5629\u562A\u562B\u562E\u562F\u5630\u5633\u5635\u5637\u5638\u563A\u563C\u563D\u563E\u5640", 11, "\u564F", 4, "\u5655\u5656\u565A\u565B\u565D", 4],
["8780", "\u5663\u5665\u5666\u5667\u566D\u566E\u566F\u5670\u5672\u5673\u5674\u5675\u5677\u5678\u5679\u567A\u567D", 7, "\u5687", 6, "\u5690\u5691\u5692\u5694", 14, "\u56A4", 10, "\u56B0", 6, "\u56B8\u56B9\u56BA\u56BB\u56BD", 12, "\u56CB", 8, "\u56D5\u56D6\u56D8\u56D9\u56DC\u56E3\u56E5", 5, "\u56EC\u56EE\u56EF\u56F2\u56F3\u56F6\u56F7\u56F8\u56FB\u56FC\u5700\u5701\u5702\u5705\u5707\u570B", 6],
["8840", "\u5712", 9, "\u571D\u571E\u5720\u5721\u5722\u5724\u5725\u5726\u5727\u572B\u5731\u5732\u5734", 4, "\u573C\u573D\u573F\u5741\u5743\u5744\u5745\u5746\u5748\u5749\u574B\u5752", 4, "\u5758\u5759\u5762\u5763\u5765\u5767\u576C\u576E\u5770\u5771\u5772\u5774\u5775\u5778\u5779\u577A\u577D\u577E\u577F\u5780"],
["8880", "\u5781\u5787\u5788\u5789\u578A\u578D", 4, "\u5794", 6, "\u579C\u579D\u579E\u579F\u57A5\u57A8\u57AA\u57AC\u57AF\u57B0\u57B1\u57B3\u57B5\u57B6\u57B7\u57B9", 8, "\u57C4", 6, "\u57CC\u57CD\u57D0\u57D1\u57D3\u57D6\u57D7\u57DB\u57DC\u57DE\u57E1\u57E2\u57E3\u57E5", 7, "\u57EE\u57F0\u57F1\u57F2\u57F3\u57F5\u57F6\u57F7\u57FB\u57FC\u57FE\u57FF\u5801\u5803\u5804\u5805\u5808\u5809\u580A\u580C\u580E\u580F\u5810\u5812\u5813\u5814\u5816\u5817\u5818\u581A\u581B\u581C\u581D\u581F\u5822\u5823\u5825", 4, "\u582B", 4, "\u5831\u5832\u5833\u5834\u5836", 7],
["8940", "\u583E", 5, "\u5845", 6, "\u584E\u584F\u5850\u5852\u5853\u5855\u5856\u5857\u5859", 4, "\u585F", 5, "\u5866", 4, "\u586D", 16, "\u587F\u5882\u5884\u5886\u5887\u5888\u588A\u588B\u588C"],
["8980", "\u588D", 4, "\u5894", 4, "\u589B\u589C\u589D\u58A0", 7, "\u58AA", 17, "\u58BD\u58BE\u58BF\u58C0\u58C2\u58C3\u58C4\u58C6", 10, "\u58D2\u58D3\u58D4\u58D6", 13, "\u58E5", 5, "\u58ED\u58EF\u58F1\u58F2\u58F4\u58F5\u58F7\u58F8\u58FA", 7, "\u5903\u5905\u5906\u5908", 4, "\u590E\u5910\u5911\u5912\u5913\u5917\u5918\u591B\u591D\u591E\u5920\u5921\u5922\u5923\u5926\u5928\u592C\u5930\u5932\u5933\u5935\u5936\u593B"],
["8a40", "\u593D\u593E\u593F\u5940\u5943\u5945\u5946\u594A\u594C\u594D\u5950\u5952\u5953\u5959\u595B", 4, "\u5961\u5963\u5964\u5966", 12, "\u5975\u5977\u597A\u597B\u597C\u597E\u597F\u5980\u5985\u5989\u598B\u598C\u598E\u598F\u5990\u5991\u5994\u5995\u5998\u599A\u599B\u599C\u599D\u599F\u59A0\u59A1\u59A2\u59A6"],
["8a80", "\u59A7\u59AC\u59AD\u59B0\u59B1\u59B3", 5, "\u59BA\u59BC\u59BD\u59BF", 6, "\u59C7\u59C8\u59C9\u59CC\u59CD\u59CE\u59CF\u59D5\u59D6\u59D9\u59DB\u59DE", 4, "\u59E4\u59E6\u59E7\u59E9\u59EA\u59EB\u59ED", 11, "\u59FA\u59FC\u59FD\u59FE\u5A00\u5A02\u5A0A\u5A0B\u5A0D\u5A0E\u5A0F\u5A10\u5A12\u5A14\u5A15\u5A16\u5A17\u5A19\u5A1A\u5A1B\u5A1D\u5A1E\u5A21\u5A22\u5A24\u5A26\u5A27\u5A28\u5A2A", 6, "\u5A33\u5A35\u5A37", 4, "\u5A3D\u5A3E\u5A3F\u5A41", 4, "\u5A47\u5A48\u5A4B", 9, "\u5A56\u5A57\u5A58\u5A59\u5A5B", 5],
["8b40", "\u5A61\u5A63\u5A64\u5A65\u5A66\u5A68\u5A69\u5A6B", 8, "\u5A78\u5A79\u5A7B\u5A7C\u5A7D\u5A7E\u5A80", 17, "\u5A93", 6, "\u5A9C", 13, "\u5AAB\u5AAC"],
["8b80", "\u5AAD", 4, "\u5AB4\u5AB6\u5AB7\u5AB9", 4, "\u5ABF\u5AC0\u5AC3", 5, "\u5ACA\u5ACB\u5ACD", 4, "\u5AD3\u5AD5\u5AD7\u5AD9\u5ADA\u5ADB\u5ADD\u5ADE\u5ADF\u5AE2\u5AE4\u5AE5\u5AE7\u5AE8\u5AEA\u5AEC", 4, "\u5AF2", 22, "\u5B0A", 11, "\u5B18", 25, "\u5B33\u5B35\u5B36\u5B38", 7, "\u5B41", 6],
["8c40", "\u5B48", 7, "\u5B52\u5B56\u5B5E\u5B60\u5B61\u5B67\u5B68\u5B6B\u5B6D\u5B6E\u5B6F\u5B72\u5B74\u5B76\u5B77\u5B78\u5B79\u5B7B\u5B7C\u5B7E\u5B7F\u5B82\u5B86\u5B8A\u5B8D\u5B8E\u5B90\u5B91\u5B92\u5B94\u5B96\u5B9F\u5BA7\u5BA8\u5BA9\u5BAC\u5BAD\u5BAE\u5BAF\u5BB1\u5BB2\u5BB7\u5BBA\u5BBB\u5BBC\u5BC0\u5BC1\u5BC3\u5BC8\u5BC9\u5BCA\u5BCB\u5BCD\u5BCE\u5BCF"],
["8c80", "\u5BD1\u5BD4", 8, "\u5BE0\u5BE2\u5BE3\u5BE6\u5BE7\u5BE9", 4, "\u5BEF\u5BF1", 6, "\u5BFD\u5BFE\u5C00\u5C02\u5C03\u5C05\u5C07\u5C08\u5C0B\u5C0C\u5C0D\u5C0E\u5C10\u5C12\u5C13\u5C17\u5C19\u5C1B\u5C1E\u5C1F\u5C20\u5C21\u5C23\u5C26\u5C28\u5C29\u5C2A\u5C2B\u5C2D\u5C2E\u5C2F\u5C30\u5C32\u5C33\u5C35\u5C36\u5C37\u5C43\u5C44\u5C46\u5C47\u5C4C\u5C4D\u5C52\u5C53\u5C54\u5C56\u5C57\u5C58\u5C5A\u5C5B\u5C5C\u5C5D\u5C5F\u5C62\u5C64\u5C67", 6, "\u5C70\u5C72", 6, "\u5C7B\u5C7C\u5C7D\u5C7E\u5C80\u5C83", 4, "\u5C89\u5C8A\u5C8B\u5C8E\u5C8F\u5C92\u5C93\u5C95\u5C9D", 4, "\u5CA4", 4],
["8d40", "\u5CAA\u5CAE\u5CAF\u5CB0\u5CB2\u5CB4\u5CB6\u5CB9\u5CBA\u5CBB\u5CBC\u5CBE\u5CC0\u5CC2\u5CC3\u5CC5", 5, "\u5CCC", 5, "\u5CD3", 5, "\u5CDA", 6, "\u5CE2\u5CE3\u5CE7\u5CE9\u5CEB\u5CEC\u5CEE\u5CEF\u5CF1", 9, "\u5CFC", 4],
["8d80", "\u5D01\u5D04\u5D05\u5D08", 5, "\u5D0F", 4, "\u5D15\u5D17\u5D18\u5D19\u5D1A\u5D1C\u5D1D\u5D1F", 4, "\u5D25\u5D28\u5D2A\u5D2B\u5D2C\u5D2F", 4, "\u5D35", 7, "\u5D3F", 7, "\u5D48\u5D49\u5D4D", 10, "\u5D59\u5D5A\u5D5C\u5D5E", 10, "\u5D6A\u5D6D\u5D6E\u5D70\u5D71\u5D72\u5D73\u5D75", 12, "\u5D83", 21, "\u5D9A\u5D9B\u5D9C\u5D9E\u5D9F\u5DA0"],
["8e40", "\u5DA1", 21, "\u5DB8", 12, "\u5DC6", 6, "\u5DCE", 12, "\u5DDC\u5DDF\u5DE0\u5DE3\u5DE4\u5DEA\u5DEC\u5DED"],
["8e80", "\u5DF0\u5DF5\u5DF6\u5DF8", 4, "\u5DFF\u5E00\u5E04\u5E07\u5E09\u5E0A\u5E0B\u5E0D\u5E0E\u5E12\u5E13\u5E17\u5E1E", 7, "\u5E28", 4, "\u5E2F\u5E30\u5E32", 4, "\u5E39\u5E3A\u5E3E\u5E3F\u5E40\u5E41\u5E43\u5E46", 5, "\u5E4D", 6, "\u5E56", 4, "\u5E5C\u5E5D\u5E5F\u5E60\u5E63", 14, "\u5E75\u5E77\u5E79\u5E7E\u5E81\u5E82\u5E83\u5E85\u5E88\u5E89\u5E8C\u5E8D\u5E8E\u5E92\u5E98\u5E9B\u5E9D\u5EA1\u5EA2\u5EA3\u5EA4\u5EA8", 4, "\u5EAE", 4, "\u5EB4\u5EBA\u5EBB\u5EBC\u5EBD\u5EBF", 6],
["8f40", "\u5EC6\u5EC7\u5EC8\u5ECB", 5, "\u5ED4\u5ED5\u5ED7\u5ED8\u5ED9\u5EDA\u5EDC", 11, "\u5EE9\u5EEB", 8, "\u5EF5\u5EF8\u5EF9\u5EFB\u5EFC\u5EFD\u5F05\u5F06\u5F07\u5F09\u5F0C\u5F0D\u5F0E\u5F10\u5F12\u5F14\u5F16\u5F19\u5F1A\u5F1C\u5F1D\u5F1E\u5F21\u5F22\u5F23\u5F24"],
["8f80", "\u5F28\u5F2B\u5F2C\u5F2E\u5F30\u5F32", 6, "\u5F3B\u5F3D\u5F3E\u5F3F\u5F41", 14, "\u5F51\u5F54\u5F59\u5F5A\u5F5B\u5F5C\u5F5E\u5F5F\u5F60\u5F63\u5F65\u5F67\u5F68\u5F6B\u5F6E\u5F6F\u5F72\u5F74\u5F75\u5F76\u5F78\u5F7A\u5F7D\u5F7E\u5F7F\u5F83\u5F86\u5F8D\u5F8E\u5F8F\u5F91\u5F93\u5F94\u5F96\u5F9A\u5F9B\u5F9D\u5F9E\u5F9F\u5FA0\u5FA2", 5, "\u5FA9\u5FAB\u5FAC\u5FAF", 5, "\u5FB6\u5FB8\u5FB9\u5FBA\u5FBB\u5FBE", 4, "\u5FC7\u5FC8\u5FCA\u5FCB\u5FCE\u5FD3\u5FD4\u5FD5\u5FDA\u5FDB\u5FDC\u5FDE\u5FDF\u5FE2\u5FE3\u5FE5\u5FE6\u5FE8\u5FE9\u5FEC\u5FEF\u5FF0\u5FF2\u5FF3\u5FF4\u5FF6\u5FF7\u5FF9\u5FFA\u5FFC\u6007"],
["9040", "\u6008\u6009\u600B\u600C\u6010\u6011\u6013\u6017\u6018\u601A\u601E\u601F\u6022\u6023\u6024\u602C\u602D\u602E\u6030", 4, "\u6036", 4, "\u603D\u603E\u6040\u6044", 6, "\u604C\u604E\u604F\u6051\u6053\u6054\u6056\u6057\u6058\u605B\u605C\u605E\u605F\u6060\u6061\u6065\u6066\u606E\u6071\u6072\u6074\u6075\u6077\u607E\u6080"],
["9080", "\u6081\u6082\u6085\u6086\u6087\u6088\u608A\u608B\u608E\u608F\u6090\u6091\u6093\u6095\u6097\u6098\u6099\u609C\u609E\u60A1\u60A2\u60A4\u60A5\u60A7\u60A9\u60AA\u60AE\u60B0\u60B3\u60B5\u60B6\u60B7\u60B9\u60BA\u60BD", 7, "\u60C7\u60C8\u60C9\u60CC", 4, "\u60D2\u60D3\u60D4\u60D6\u60D7\u60D9\u60DB\u60DE\u60E1", 4, "\u60EA\u60F1\u60F2\u60F5\u60F7\u60F8\u60FB", 4, "\u6102\u6103\u6104\u6105\u6107\u610A\u610B\u610C\u6110", 4, "\u6116\u6117\u6118\u6119\u611B\u611C\u611D\u611E\u6121\u6122\u6125\u6128\u6129\u612A\u612C", 18, "\u6140", 6],
["9140", "\u6147\u6149\u614B\u614D\u614F\u6150\u6152\u6153\u6154\u6156", 6, "\u615E\u615F\u6160\u6161\u6163\u6164\u6165\u6166\u6169", 6, "\u6171\u6172\u6173\u6174\u6176\u6178", 18, "\u618C\u618D\u618F", 4, "\u6195"],
["9180", "\u6196", 6, "\u619E", 8, "\u61AA\u61AB\u61AD", 9, "\u61B8", 5, "\u61BF\u61C0\u61C1\u61C3", 4, "\u61C9\u61CC", 4, "\u61D3\u61D5", 16, "\u61E7", 13, "\u61F6", 8, "\u6200", 5, "\u6207\u6209\u6213\u6214\u6219\u621C\u621D\u621E\u6220\u6223\u6226\u6227\u6228\u6229\u622B\u622D\u622F\u6230\u6231\u6232\u6235\u6236\u6238", 4, "\u6242\u6244\u6245\u6246\u624A"],
["9240", "\u624F\u6250\u6255\u6256\u6257\u6259\u625A\u625C", 6, "\u6264\u6265\u6268\u6271\u6272\u6274\u6275\u6277\u6278\u627A\u627B\u627D\u6281\u6282\u6283\u6285\u6286\u6287\u6288\u628B", 5, "\u6294\u6299\u629C\u629D\u629E\u62A3\u62A6\u62A7\u62A9\u62AA\u62AD\u62AE\u62AF\u62B0\u62B2\u62B3\u62B4\u62B6\u62B7\u62B8\u62BA\u62BE\u62C0\u62C1"],
["9280", "\u62C3\u62CB\u62CF\u62D1\u62D5\u62DD\u62DE\u62E0\u62E1\u62E4\u62EA\u62EB\u62F0\u62F2\u62F5\u62F8\u62F9\u62FA\u62FB\u6300\u6303\u6304\u6305\u6306\u630A\u630B\u630C\u630D\u630F\u6310\u6312\u6313\u6314\u6315\u6317\u6318\u6319\u631C\u6326\u6327\u6329\u632C\u632D\u632E\u6330\u6331\u6333", 5, "\u633B\u633C\u633E\u633F\u6340\u6341\u6344\u6347\u6348\u634A\u6351\u6352\u6353\u6354\u6356", 7, "\u6360\u6364\u6365\u6366\u6368\u636A\u636B\u636C\u636F\u6370\u6372\u6373\u6374\u6375\u6378\u6379\u637C\u637D\u637E\u637F\u6381\u6383\u6384\u6385\u6386\u638B\u638D\u6391\u6393\u6394\u6395\u6397\u6399", 6, "\u63A1\u63A4\u63A6\u63AB\u63AF\u63B1\u63B2\u63B5\u63B6\u63B9\u63BB\u63BD\u63BF\u63C0"],
["9340", "\u63C1\u63C2\u63C3\u63C5\u63C7\u63C8\u63CA\u63CB\u63CC\u63D1\u63D3\u63D4\u63D5\u63D7", 6, "\u63DF\u63E2\u63E4", 4, "\u63EB\u63EC\u63EE\u63EF\u63F0\u63F1\u63F3\u63F5\u63F7\u63F9\u63FA\u63FB\u63FC\u63FE\u6403\u6404\u6406", 4, "\u640D\u640E\u6411\u6412\u6415", 5, "\u641D\u641F\u6422\u6423\u6424"],
["9380", "\u6425\u6427\u6428\u6429\u642B\u642E", 5, "\u6435", 4, "\u643B\u643C\u643E\u6440\u6442\u6443\u6449\u644B", 6, "\u6453\u6455\u6456\u6457\u6459", 4, "\u645F", 7, "\u6468\u646A\u646B\u646C\u646E", 9, "\u647B", 6, "\u6483\u6486\u6488", 8, "\u6493\u6494\u6497\u6498\u649A\u649B\u649C\u649D\u649F", 4, "\u64A5\u64A6\u64A7\u64A8\u64AA\u64AB\u64AF\u64B1\u64B2\u64B3\u64B4\u64B6\u64B9\u64BB\u64BD\u64BE\u64BF\u64C1\u64C3\u64C4\u64C6", 6, "\u64CF\u64D1\u64D3\u64D4\u64D5\u64D6\u64D9\u64DA"],
["9440", "\u64DB\u64DC\u64DD\u64DF\u64E0\u64E1\u64E3\u64E5\u64E7", 24, "\u6501", 7, "\u650A", 7, "\u6513", 4, "\u6519", 8],
["9480", "\u6522\u6523\u6524\u6526", 4, "\u652C\u652D\u6530\u6531\u6532\u6533\u6537\u653A\u653C\u653D\u6540", 4, "\u6546\u6547\u654A\u654B\u654D\u654E\u6550\u6552\u6553\u6554\u6557\u6558\u655A\u655C\u655F\u6560\u6561\u6564\u6565\u6567\u6568\u6569\u656A\u656D\u656E\u656F\u6571\u6573\u6575\u6576\u6578", 14, "\u6588\u6589\u658A\u658D\u658E\u658F\u6592\u6594\u6595\u6596\u6598\u659A\u659D\u659E\u65A0\u65A2\u65A3\u65A6\u65A8\u65AA\u65AC\u65AE\u65B1", 7, "\u65BA\u65BB\u65BE\u65BF\u65C0\u65C2\u65C7\u65C8\u65C9\u65CA\u65CD\u65D0\u65D1\u65D3\u65D4\u65D5\u65D8", 7, "\u65E1\u65E3\u65E4\u65EA\u65EB"],
["9540", "\u65F2\u65F3\u65F4\u65F5\u65F8\u65F9\u65FB", 4, "\u6601\u6604\u6605\u6607\u6608\u6609\u660B\u660D\u6610\u6611\u6612\u6616\u6617\u6618\u661A\u661B\u661C\u661E\u6621\u6622\u6623\u6624\u6626\u6629\u662A\u662B\u662C\u662E\u6630\u6632\u6633\u6637", 4, "\u663D\u663F\u6640\u6642\u6644", 6, "\u664D\u664E\u6650\u6651\u6658"],
["9580", "\u6659\u665B\u665C\u665D\u665E\u6660\u6662\u6663\u6665\u6667\u6669", 4, "\u6671\u6672\u6673\u6675\u6678\u6679\u667B\u667C\u667D\u667F\u6680\u6681\u6683\u6685\u6686\u6688\u6689\u668A\u668B\u668D\u668E\u668F\u6690\u6692\u6693\u6694\u6695\u6698", 4, "\u669E", 8, "\u66A9", 4, "\u66AF", 4, "\u66B5\u66B6\u66B7\u66B8\u66BA\u66BB\u66BC\u66BD\u66BF", 25, "\u66DA\u66DE", 7, "\u66E7\u66E8\u66EA", 5, "\u66F1\u66F5\u66F6\u66F8\u66FA\u66FB\u66FD\u6701\u6702\u6703"],
["9640", "\u6704\u6705\u6706\u6707\u670C\u670E\u670F\u6711\u6712\u6713\u6716\u6718\u6719\u671A\u671C\u671E\u6720", 5, "\u6727\u6729\u672E\u6730\u6732\u6733\u6736\u6737\u6738\u6739\u673B\u673C\u673E\u673F\u6741\u6744\u6745\u6747\u674A\u674B\u674D\u6752\u6754\u6755\u6757", 4, "\u675D\u6762\u6763\u6764\u6766\u6767\u676B\u676C\u676E\u6771\u6774\u6776"],
["9680", "\u6778\u6779\u677A\u677B\u677D\u6780\u6782\u6783\u6785\u6786\u6788\u678A\u678C\u678D\u678E\u678F\u6791\u6792\u6793\u6794\u6796\u6799\u679B\u679F\u67A0\u67A1\u67A4\u67A6\u67A9\u67AC\u67AE\u67B1\u67B2\u67B4\u67B9", 7, "\u67C2\u67C5", 9, "\u67D5\u67D6\u67D7\u67DB\u67DF\u67E1\u67E3\u67E4\u67E6\u67E7\u67E8\u67EA\u67EB\u67ED\u67EE\u67F2\u67F5", 7, "\u67FE\u6801\u6802\u6803\u6804\u6806\u680D\u6810\u6812\u6814\u6815\u6818", 4, "\u681E\u681F\u6820\u6822", 6, "\u682B", 6, "\u6834\u6835\u6836\u683A\u683B\u683F\u6847\u684B\u684D\u684F\u6852\u6856", 5],
["9740", "\u685C\u685D\u685E\u685F\u686A\u686C", 7, "\u6875\u6878", 8, "\u6882\u6884\u6887", 7, "\u6890\u6891\u6892\u6894\u6895\u6896\u6898", 9, "\u68A3\u68A4\u68A5\u68A9\u68AA\u68AB\u68AC\u68AE\u68B1\u68B2\u68B4\u68B6\u68B7\u68B8"],
["9780", "\u68B9", 6, "\u68C1\u68C3", 5, "\u68CA\u68CC\u68CE\u68CF\u68D0\u68D1\u68D3\u68D4\u68D6\u68D7\u68D9\u68DB", 4, "\u68E1\u68E2\u68E4", 9, "\u68EF\u68F2\u68F3\u68F4\u68F6\u68F7\u68F8\u68FB\u68FD\u68FE\u68FF\u6900\u6902\u6903\u6904\u6906", 4, "\u690C\u690F\u6911\u6913", 11, "\u6921\u6922\u6923\u6925", 7, "\u692E\u692F\u6931\u6932\u6933\u6935\u6936\u6937\u6938\u693A\u693B\u693C\u693E\u6940\u6941\u6943", 16, "\u6955\u6956\u6958\u6959\u695B\u695C\u695F"],
["9840", "\u6961\u6962\u6964\u6965\u6967\u6968\u6969\u696A\u696C\u696D\u696F\u6970\u6972", 4, "\u697A\u697B\u697D\u697E\u697F\u6981\u6983\u6985\u698A\u698B\u698C\u698E", 5, "\u6996\u6997\u6999\u699A\u699D", 9, "\u69A9\u69AA\u69AC\u69AE\u69AF\u69B0\u69B2\u69B3\u69B5\u69B6\u69B8\u69B9\u69BA\u69BC\u69BD"],
["9880", "\u69BE\u69BF\u69C0\u69C2", 7, "\u69CB\u69CD\u69CF\u69D1\u69D2\u69D3\u69D5", 5, "\u69DC\u69DD\u69DE\u69E1", 11, "\u69EE\u69EF\u69F0\u69F1\u69F3", 9, "\u69FE\u6A00", 9, "\u6A0B", 11, "\u6A19", 5, "\u6A20\u6A22", 5, "\u6A29\u6A2B\u6A2C\u6A2D\u6A2E\u6A30\u6A32\u6A33\u6A34\u6A36", 6, "\u6A3F", 4, "\u6A45\u6A46\u6A48", 7, "\u6A51", 6, "\u6A5A"],
["9940", "\u6A5C", 4, "\u6A62\u6A63\u6A64\u6A66", 10, "\u6A72", 6, "\u6A7A\u6A7B\u6A7D\u6A7E\u6A7F\u6A81\u6A82\u6A83\u6A85", 8, "\u6A8F\u6A92", 4, "\u6A98", 7, "\u6AA1", 5],
["9980", "\u6AA7\u6AA8\u6AAA\u6AAD", 114, "\u6B25\u6B26\u6B28", 6],
["9a40", "\u6B2F\u6B30\u6B31\u6B33\u6B34\u6B35\u6B36\u6B38\u6B3B\u6B3C\u6B3D\u6B3F\u6B40\u6B41\u6B42\u6B44\u6B45\u6B48\u6B4A\u6B4B\u6B4D", 11, "\u6B5A", 7, "\u6B68\u6B69\u6B6B", 13, "\u6B7A\u6B7D\u6B7E\u6B7F\u6B80\u6B85\u6B88"],
["9a80", "\u6B8C\u6B8E\u6B8F\u6B90\u6B91\u6B94\u6B95\u6B97\u6B98\u6B99\u6B9C", 4, "\u6BA2", 7, "\u6BAB", 7, "\u6BB6\u6BB8", 6, "\u6BC0\u6BC3\u6BC4\u6BC6", 4, "\u6BCC\u6BCE\u6BD0\u6BD1\u6BD8\u6BDA\u6BDC", 4, "\u6BE2", 7, "\u6BEC\u6BED\u6BEE\u6BF0\u6BF1\u6BF2\u6BF4\u6BF6\u6BF7\u6BF8\u6BFA\u6BFB\u6BFC\u6BFE", 6, "\u6C08", 4, "\u6C0E\u6C12\u6C17\u6C1C\u6C1D\u6C1E\u6C20\u6C23\u6C25\u6C2B\u6C2C\u6C2D\u6C31\u6C33\u6C36\u6C37\u6C39\u6C3A\u6C3B\u6C3C\u6C3E\u6C3F\u6C43\u6C44\u6C45\u6C48\u6C4B", 4, "\u6C51\u6C52\u6C53\u6C56\u6C58"],
["9b40", "\u6C59\u6C5A\u6C62\u6C63\u6C65\u6C66\u6C67\u6C6B", 4, "\u6C71\u6C73\u6C75\u6C77\u6C78\u6C7A\u6C7B\u6C7C\u6C7F\u6C80\u6C84\u6C87\u6C8A\u6C8B\u6C8D\u6C8E\u6C91\u6C92\u6C95\u6C96\u6C97\u6C98\u6C9A\u6C9C\u6C9D\u6C9E\u6CA0\u6CA2\u6CA8\u6CAC\u6CAF\u6CB0\u6CB4\u6CB5\u6CB6\u6CB7\u6CBA\u6CC0\u6CC1\u6CC2\u6CC3\u6CC6\u6CC7\u6CC8\u6CCB\u6CCD\u6CCE\u6CCF\u6CD1\u6CD2\u6CD8"],
["9b80", "\u6CD9\u6CDA\u6CDC\u6CDD\u6CDF\u6CE4\u6CE6\u6CE7\u6CE9\u6CEC\u6CED\u6CF2\u6CF4\u6CF9\u6CFF\u6D00\u6D02\u6D03\u6D05\u6D06\u6D08\u6D09\u6D0A\u6D0D\u6D0F\u6D10\u6D11\u6D13\u6D14\u6D15\u6D16\u6D18\u6D1C\u6D1D\u6D1F", 5, "\u6D26\u6D28\u6D29\u6D2C\u6D2D\u6D2F\u6D30\u6D34\u6D36\u6D37\u6D38\u6D3A\u6D3F\u6D40\u6D42\u6D44\u6D49\u6D4C\u6D50\u6D55\u6D56\u6D57\u6D58\u6D5B\u6D5D\u6D5F\u6D61\u6D62\u6D64\u6D65\u6D67\u6D68\u6D6B\u6D6C\u6D6D\u6D70\u6D71\u6D72\u6D73\u6D75\u6D76\u6D79\u6D7A\u6D7B\u6D7D", 4, "\u6D83\u6D84\u6D86\u6D87\u6D8A\u6D8B\u6D8D\u6D8F\u6D90\u6D92\u6D96", 4, "\u6D9C\u6DA2\u6DA5\u6DAC\u6DAD\u6DB0\u6DB1\u6DB3\u6DB4\u6DB6\u6DB7\u6DB9", 5, "\u6DC1\u6DC2\u6DC3\u6DC8\u6DC9\u6DCA"],
["9c40", "\u6DCD\u6DCE\u6DCF\u6DD0\u6DD2\u6DD3\u6DD4\u6DD5\u6DD7\u6DDA\u6DDB\u6DDC\u6DDF\u6DE2\u6DE3\u6DE5\u6DE7\u6DE8\u6DE9\u6DEA\u6DED\u6DEF\u6DF0\u6DF2\u6DF4\u6DF5\u6DF6\u6DF8\u6DFA\u6DFD", 7, "\u6E06\u6E07\u6E08\u6E09\u6E0B\u6E0F\u6E12\u6E13\u6E15\u6E18\u6E19\u6E1B\u6E1C\u6E1E\u6E1F\u6E22\u6E26\u6E27\u6E28\u6E2A\u6E2C\u6E2E\u6E30\u6E31\u6E33\u6E35"],
["9c80", "\u6E36\u6E37\u6E39\u6E3B", 7, "\u6E45", 7, "\u6E4F\u6E50\u6E51\u6E52\u6E55\u6E57\u6E59\u6E5A\u6E5C\u6E5D\u6E5E\u6E60", 10, "\u6E6C\u6E6D\u6E6F", 14, "\u6E80\u6E81\u6E82\u6E84\u6E87\u6E88\u6E8A", 4, "\u6E91", 6, "\u6E99\u6E9A\u6E9B\u6E9D\u6E9E\u6EA0\u6EA1\u6EA3\u6EA4\u6EA6\u6EA8\u6EA9\u6EAB\u6EAC\u6EAD\u6EAE\u6EB0\u6EB3\u6EB5\u6EB8\u6EB9\u6EBC\u6EBE\u6EBF\u6EC0\u6EC3\u6EC4\u6EC5\u6EC6\u6EC8\u6EC9\u6ECA\u6ECC\u6ECD\u6ECE\u6ED0\u6ED2\u6ED6\u6ED8\u6ED9\u6EDB\u6EDC\u6EDD\u6EE3\u6EE7\u6EEA", 5],
["9d40", "\u6EF0\u6EF1\u6EF2\u6EF3\u6EF5\u6EF6\u6EF7\u6EF8\u6EFA", 7, "\u6F03\u6F04\u6F05\u6F07\u6F08\u6F0A", 4, "\u6F10\u6F11\u6F12\u6F16", 9, "\u6F21\u6F22\u6F23\u6F25\u6F26\u6F27\u6F28\u6F2C\u6F2E\u6F30\u6F32\u6F34\u6F35\u6F37", 6, "\u6F3F\u6F40\u6F41\u6F42"],
["9d80", "\u6F43\u6F44\u6F45\u6F48\u6F49\u6F4A\u6F4C\u6F4E", 9, "\u6F59\u6F5A\u6F5B\u6F5D\u6F5F\u6F60\u6F61\u6F63\u6F64\u6F65\u6F67", 5, "\u6F6F\u6F70\u6F71\u6F73\u6F75\u6F76\u6F77\u6F79\u6F7B\u6F7D", 6, "\u6F85\u6F86\u6F87\u6F8A\u6F8B\u6F8F", 12, "\u6F9D\u6F9E\u6F9F\u6FA0\u6FA2", 4, "\u6FA8", 10, "\u6FB4\u6FB5\u6FB7\u6FB8\u6FBA", 5, "\u6FC1\u6FC3", 5, "\u6FCA", 6, "\u6FD3", 10, "\u6FDF\u6FE2\u6FE3\u6FE4\u6FE5"],
["9e40", "\u6FE6", 7, "\u6FF0", 32, "\u7012", 7, "\u701C", 6, "\u7024", 6],
["9e80", "\u702B", 9, "\u7036\u7037\u7038\u703A", 17, "\u704D\u704E\u7050", 13, "\u705F", 11, "\u706E\u7071\u7072\u7073\u7074\u7077\u7079\u707A\u707B\u707D\u7081\u7082\u7083\u7084\u7086\u7087\u7088\u708B\u708C\u708D\u708F\u7090\u7091\u7093\u7097\u7098\u709A\u709B\u709E", 12, "\u70B0\u70B2\u70B4\u70B5\u70B6\u70BA\u70BE\u70BF\u70C4\u70C5\u70C6\u70C7\u70C9\u70CB", 12, "\u70DA"],
["9f40", "\u70DC\u70DD\u70DE\u70E0\u70E1\u70E2\u70E3\u70E5\u70EA\u70EE\u70F0", 6, "\u70F8\u70FA\u70FB\u70FC\u70FE", 10, "\u710B", 4, "\u7111\u7112\u7114\u7117\u711B", 10, "\u7127", 7, "\u7132\u7133\u7134"],
["9f80", "\u7135\u7137", 13, "\u7146\u7147\u7148\u7149\u714B\u714D\u714F", 12, "\u715D\u715F", 4, "\u7165\u7169", 4, "\u716F\u7170\u7171\u7174\u7175\u7176\u7177\u7179\u717B\u717C\u717E", 5, "\u7185", 4, "\u718B\u718C\u718D\u718E\u7190\u7191\u7192\u7193\u7195\u7196\u7197\u719A", 4, "\u71A1", 6, "\u71A9\u71AA\u71AB\u71AD", 5, "\u71B4\u71B6\u71B7\u71B8\u71BA", 8, "\u71C4", 9, "\u71CF", 4],
["a040", "\u71D6", 9, "\u71E1\u71E2\u71E3\u71E4\u71E6\u71E8", 5, "\u71EF", 9, "\u71FA", 11, "\u7207", 19],
["a080", "\u721B\u721C\u721E", 9, "\u7229\u722B\u722D\u722E\u722F\u7232\u7233\u7234\u723A\u723C\u723E\u7240", 6, "\u7249\u724A\u724B\u724E\u724F\u7250\u7251\u7253\u7254\u7255\u7257\u7258\u725A\u725C\u725E\u7260\u7263\u7264\u7265\u7268\u726A\u726B\u726C\u726D\u7270\u7271\u7273\u7274\u7276\u7277\u7278\u727B\u727C\u727D\u7282\u7283\u7285", 4, "\u728C\u728E\u7290\u7291\u7293", 11, "\u72A0", 11, "\u72AE\u72B1\u72B2\u72B3\u72B5\u72BA", 6, "\u72C5\u72C6\u72C7\u72C9\u72CA\u72CB\u72CC\u72CF\u72D1\u72D3\u72D4\u72D5\u72D6\u72D8\u72DA\u72DB"],
["a1a1", "\u3000\u3001\u3002\xB7\u02C9\u02C7\xA8\u3003\u3005\u2014\uFF5E\u2016\u2026\u2018\u2019\u201C\u201D\u3014\u3015\u3008", 7, "\u3016\u3017\u3010\u3011\xB1\xD7\xF7\u2236\u2227\u2228\u2211\u220F\u222A\u2229\u2208\u2237\u221A\u22A5\u2225\u2220\u2312\u2299\u222B\u222E\u2261\u224C\u2248\u223D\u221D\u2260\u226E\u226F\u2264\u2265\u221E\u2235\u2234\u2642\u2640\xB0\u2032\u2033\u2103\uFF04\xA4\uFFE0\uFFE1\u2030\xA7\u2116\u2606\u2605\u25CB\u25CF\u25CE\u25C7\u25C6\u25A1\u25A0\u25B3\u25B2\u203B\u2192\u2190\u2191\u2193\u3013"],
["a2a1", "\u2170", 9],
["a2b1", "\u2488", 19, "\u2474", 19, "\u2460", 9],
["a2e5", "\u3220", 9],
["a2f1", "\u2160", 11],
["a3a1", "\uFF01\uFF02\uFF03\uFFE5\uFF05", 88, "\uFFE3"],
["a4a1", "\u3041", 82],
["a5a1", "\u30A1", 85],
["a6a1", "\u0391", 16, "\u03A3", 6],
["a6c1", "\u03B1", 16, "\u03C3", 6],
["a6e0", "\uFE35\uFE36\uFE39\uFE3A\uFE3F\uFE40\uFE3D\uFE3E\uFE41\uFE42\uFE43\uFE44"],
["a6ee", "\uFE3B\uFE3C\uFE37\uFE38\uFE31"],
["a6f4", "\uFE33\uFE34"],
["a7a1", "\u0410", 5, "\u0401\u0416", 25],
["a7d1", "\u0430", 5, "\u0451\u0436", 25],
["a840", "\u02CA\u02CB\u02D9\u2013\u2015\u2025\u2035\u2105\u2109\u2196\u2197\u2198\u2199\u2215\u221F\u2223\u2252\u2266\u2267\u22BF\u2550", 35, "\u2581", 6],
["a880", "\u2588", 7, "\u2593\u2594\u2595\u25BC\u25BD\u25E2\u25E3\u25E4\u25E5\u2609\u2295\u3012\u301D\u301E"],
["a8a1", "\u0101\xE1\u01CE\xE0\u0113\xE9\u011B\xE8\u012B\xED\u01D0\xEC\u014D\xF3\u01D2\xF2\u016B\xFA\u01D4\xF9\u01D6\u01D8\u01DA\u01DC\xFC\xEA\u0251"],
["a8bd", "\u0144\u0148"],
["a8c0", "\u0261"],
["a8c5", "\u3105", 36],
["a940", "\u3021", 8, "\u32A3\u338E\u338F\u339C\u339D\u339E\u33A1\u33C4\u33CE\u33D1\u33D2\u33D5\uFE30\uFFE2\uFFE4"],
["a959", "\u2121\u3231"],
["a95c", "\u2010"],
["a960", "\u30FC\u309B\u309C\u30FD\u30FE\u3006\u309D\u309E\uFE49", 9, "\uFE54\uFE55\uFE56\uFE57\uFE59", 8],
["a980", "\uFE62", 4, "\uFE68\uFE69\uFE6A\uFE6B"],
["a996", "\u3007"],
["a9a4", "\u2500", 75],
["aa40", "\u72DC\u72DD\u72DF\u72E2", 5, "\u72EA\u72EB\u72F5\u72F6\u72F9\u72FD\u72FE\u72FF\u7300\u7302\u7304", 5, "\u730B\u730C\u730D\u730F\u7310\u7311\u7312\u7314\u7318\u7319\u731A\u731F\u7320\u7323\u7324\u7326\u7327\u7328\u732D\u732F\u7330\u7332\u7333\u7335\u7336\u733A\u733B\u733C\u733D\u7340", 8],
["aa80", "\u7349\u734A\u734B\u734C\u734E\u734F\u7351\u7353\u7354\u7355\u7356\u7358", 7, "\u7361", 10, "\u736E\u7370\u7371"],
["ab40", "\u7372", 11, "\u737F", 4, "\u7385\u7386\u7388\u738A\u738C\u738D\u738F\u7390\u7392\u7393\u7394\u7395\u7397\u7398\u7399\u739A\u739C\u739D\u739E\u73A0\u73A1\u73A3", 5, "\u73AA\u73AC\u73AD\u73B1\u73B4\u73B5\u73B6\u73B8\u73B9\u73BC\u73BD\u73BE\u73BF\u73C1\u73C3", 4],
["ab80", "\u73CB\u73CC\u73CE\u73D2", 6, "\u73DA\u73DB\u73DC\u73DD\u73DF\u73E1\u73E2\u73E3\u73E4\u73E6\u73E8\u73EA\u73EB\u73EC\u73EE\u73EF\u73F0\u73F1\u73F3", 4],
["ac40", "\u73F8", 10, "\u7404\u7407\u7408\u740B\u740C\u740D\u740E\u7411", 8, "\u741C", 5, "\u7423\u7424\u7427\u7429\u742B\u742D\u742F\u7431\u7432\u7437", 4, "\u743D\u743E\u743F\u7440\u7442", 11],
["ac80", "\u744E", 6, "\u7456\u7458\u745D\u7460", 12, "\u746E\u746F\u7471", 4, "\u7478\u7479\u747A"],
["ad40", "\u747B\u747C\u747D\u747F\u7482\u7484\u7485\u7486\u7488\u7489\u748A\u748C\u748D\u748F\u7491", 10, "\u749D\u749F", 7, "\u74AA", 15, "\u74BB", 12],
["ad80", "\u74C8", 9, "\u74D3", 8, "\u74DD\u74DF\u74E1\u74E5\u74E7", 6, "\u74F0\u74F1\u74F2"],
["ae40", "\u74F3\u74F5\u74F8", 6, "\u7500\u7501\u7502\u7503\u7505", 7, "\u750E\u7510\u7512\u7514\u7515\u7516\u7517\u751B\u751D\u751E\u7520", 4, "\u7526\u7527\u752A\u752E\u7534\u7536\u7539\u753C\u753D\u753F\u7541\u7542\u7543\u7544\u7546\u7547\u7549\u754A\u754D\u7550\u7551\u7552\u7553\u7555\u7556\u7557\u7558"],
["ae80", "\u755D", 7, "\u7567\u7568\u7569\u756B", 6, "\u7573\u7575\u7576\u7577\u757A", 4, "\u7580\u7581\u7582\u7584\u7585\u7587"],
["af40", "\u7588\u7589\u758A\u758C\u758D\u758E\u7590\u7593\u7595\u7598\u759B\u759C\u759E\u75A2\u75A6", 4, "\u75AD\u75B6\u75B7\u75BA\u75BB\u75BF\u75C0\u75C1\u75C6\u75CB\u75CC\u75CE\u75CF\u75D0\u75D1\u75D3\u75D7\u75D9\u75DA\u75DC\u75DD\u75DF\u75E0\u75E1\u75E5\u75E9\u75EC\u75ED\u75EE\u75EF\u75F2\u75F3\u75F5\u75F6\u75F7\u75F8\u75FA\u75FB\u75FD\u75FE\u7602\u7604\u7606\u7607"],
["af80", "\u7608\u7609\u760B\u760D\u760E\u760F\u7611\u7612\u7613\u7614\u7616\u761A\u761C\u761D\u761E\u7621\u7623\u7627\u7628\u762C\u762E\u762F\u7631\u7632\u7636\u7637\u7639\u763A\u763B\u763D\u7641\u7642\u7644"],
["b040", "\u7645", 6, "\u764E", 5, "\u7655\u7657", 4, "\u765D\u765F\u7660\u7661\u7662\u7664", 6, "\u766C\u766D\u766E\u7670", 7, "\u7679\u767A\u767C\u767F\u7680\u7681\u7683\u7685\u7689\u768A\u768C\u768D\u768F\u7690\u7692\u7694\u7695\u7697\u7698\u769A\u769B"],
["b080", "\u769C", 7, "\u76A5", 8, "\u76AF\u76B0\u76B3\u76B5", 9, "\u76C0\u76C1\u76C3\u554A\u963F\u57C3\u6328\u54CE\u5509\u54C0\u7691\u764C\u853C\u77EE\u827E\u788D\u7231\u9698\u978D\u6C28\u5B89\u4FFA\u6309\u6697\u5CB8\u80FA\u6848\u80AE\u6602\u76CE\u51F9\u6556\u71AC\u7FF1\u8884\u50B2\u5965\u61CA\u6FB3\u82AD\u634C\u6252\u53ED\u5427\u7B06\u516B\u75A4\u5DF4\u62D4\u8DCB\u9776\u628A\u8019\u575D\u9738\u7F62\u7238\u767D\u67CF\u767E\u6446\u4F70\u8D25\u62DC\u7A17\u6591\u73ED\u642C\u6273\u822C\u9881\u677F\u7248\u626E\u62CC\u4F34\u74E3\u534A\u529E\u7ECA\u90A6\u5E2E\u6886\u699C\u8180\u7ED1\u68D2\u78C5\u868C\u9551\u508D\u8C24\u82DE\u80DE\u5305\u8912\u5265"],
["b140", "\u76C4\u76C7\u76C9\u76CB\u76CC\u76D3\u76D5\u76D9\u76DA\u76DC\u76DD\u76DE\u76E0", 4, "\u76E6", 7, "\u76F0\u76F3\u76F5\u76F6\u76F7\u76FA\u76FB\u76FD\u76FF\u7700\u7702\u7703\u7705\u7706\u770A\u770C\u770E", 10, "\u771B\u771C\u771D\u771E\u7721\u7723\u7724\u7725\u7727\u772A\u772B"],
["b180", "\u772C\u772E\u7730", 4, "\u7739\u773B\u773D\u773E\u773F\u7742\u7744\u7745\u7746\u7748", 7, "\u7752", 7, "\u775C\u8584\u96F9\u4FDD\u5821\u9971\u5B9D\u62B1\u62A5\u66B4\u8C79\u9C8D\u7206\u676F\u7891\u60B2\u5351\u5317\u8F88\u80CC\u8D1D\u94A1\u500D\u72C8\u5907\u60EB\u7119\u88AB\u5954\u82EF\u672C\u7B28\u5D29\u7EF7\u752D\u6CF5\u8E66\u8FF8\u903C\u9F3B\u6BD4\u9119\u7B14\u5F7C\u78A7\u84D6\u853D\u6BD5\u6BD9\u6BD6\u5E01\u5E87\u75F9\u95ED\u655D\u5F0A\u5FC5\u8F9F\u58C1\u81C2\u907F\u965B\u97AD\u8FB9\u7F16\u8D2C\u6241\u4FBF\u53D8\u535E\u8FA8\u8FA9\u8FAB\u904D\u6807\u5F6A\u8198\u8868\u9CD6\u618B\u522B\u762A\u5F6C\u658C\u6FD2\u6EE8\u5BBE\u6448\u5175\u51B0\u67C4\u4E19\u79C9\u997C\u70B3"],
["b240", "\u775D\u775E\u775F\u7760\u7764\u7767\u7769\u776A\u776D", 11, "\u777A\u777B\u777C\u7781\u7782\u7783\u7786", 5, "\u778F\u7790\u7793", 11, "\u77A1\u77A3\u77A4\u77A6\u77A8\u77AB\u77AD\u77AE\u77AF\u77B1\u77B2\u77B4\u77B6", 4],
["b280", "\u77BC\u77BE\u77C0", 12, "\u77CE", 8, "\u77D8\u77D9\u77DA\u77DD", 4, "\u77E4\u75C5\u5E76\u73BB\u83E0\u64AD\u62E8\u94B5\u6CE2\u535A\u52C3\u640F\u94C2\u7B94\u4F2F\u5E1B\u8236\u8116\u818A\u6E24\u6CCA\u9A73\u6355\u535C\u54FA\u8865\u57E0\u4E0D\u5E03\u6B65\u7C3F\u90E8\u6016\u64E6\u731C\u88C1\u6750\u624D\u8D22\u776C\u8E29\u91C7\u5F69\u83DC\u8521\u9910\u53C2\u8695\u6B8B\u60ED\u60E8\u707F\u82CD\u8231\u4ED3\u6CA7\u85CF\u64CD\u7CD9\u69FD\u66F9\u8349\u5395\u7B56\u4FA7\u518C\u6D4B\u5C42\u8E6D\u63D2\u53C9\u832C\u8336\u67E5\u78B4\u643D\u5BDF\u5C94\u5DEE\u8BE7\u62C6\u67F4\u8C7A\u6400\u63BA\u8749\u998B\u8C17\u7F20\u94F2\u4EA7\u9610\u98A4\u660C\u7316"],
["b340", "\u77E6\u77E8\u77EA\u77EF\u77F0\u77F1\u77F2\u77F4\u77F5\u77F7\u77F9\u77FA\u77FB\u77FC\u7803", 5, "\u780A\u780B\u780E\u780F\u7810\u7813\u7815\u7819\u781B\u781E\u7820\u7821\u7822\u7824\u7828\u782A\u782B\u782E\u782F\u7831\u7832\u7833\u7835\u7836\u783D\u783F\u7841\u7842\u7843\u7844\u7846\u7848\u7849\u784A\u784B\u784D\u784F\u7851\u7853\u7854\u7858\u7859\u785A"],
["b380", "\u785B\u785C\u785E", 11, "\u786F", 7, "\u7878\u7879\u787A\u787B\u787D", 6, "\u573A\u5C1D\u5E38\u957F\u507F\u80A0\u5382\u655E\u7545\u5531\u5021\u8D85\u6284\u949E\u671D\u5632\u6F6E\u5DE2\u5435\u7092\u8F66\u626F\u64A4\u63A3\u5F7B\u6F88\u90F4\u81E3\u8FB0\u5C18\u6668\u5FF1\u6C89\u9648\u8D81\u886C\u6491\u79F0\u57CE\u6A59\u6210\u5448\u4E58\u7A0B\u60E9\u6F84\u8BDA\u627F\u901E\u9A8B\u79E4\u5403\u75F4\u6301\u5319\u6C60\u8FDF\u5F1B\u9A70\u803B\u9F7F\u4F88\u5C3A\u8D64\u7FC5\u65A5\u70BD\u5145\u51B2\u866B\u5D07\u5BA0\u62BD\u916C\u7574\u8E0C\u7A20\u6101\u7B79\u4EC7\u7EF8\u7785\u4E11\u81ED\u521D\u51FA\u6A71\u53A8\u8E87\u9504\u96CF\u6EC1\u9664\u695A"],
["b440", "\u7884\u7885\u7886\u7888\u788A\u788B\u788F\u7890\u7892\u7894\u7895\u7896\u7899\u789D\u789E\u78A0\u78A2\u78A4\u78A6\u78A8", 7, "\u78B5\u78B6\u78B7\u78B8\u78BA\u78BB\u78BC\u78BD\u78BF\u78C0\u78C2\u78C3\u78C4\u78C6\u78C7\u78C8\u78CC\u78CD\u78CE\u78CF\u78D1\u78D2\u78D3\u78D6\u78D7\u78D8\u78DA", 9],
["b480", "\u78E4\u78E5\u78E6\u78E7\u78E9\u78EA\u78EB\u78ED", 4, "\u78F3\u78F5\u78F6\u78F8\u78F9\u78FB", 5, "\u7902\u7903\u7904\u7906", 6, "\u7840\u50A8\u77D7\u6410\u89E6\u5904\u63E3\u5DDD\u7A7F\u693D\u4F20\u8239\u5598\u4E32\u75AE\u7A97\u5E62\u5E8A\u95EF\u521B\u5439\u708A\u6376\u9524\u5782\u6625\u693F\u9187\u5507\u6DF3\u7EAF\u8822\u6233\u7EF0\u75B5\u8328\u78C1\u96CC\u8F9E\u6148\u74F7\u8BCD\u6B64\u523A\u8D50\u6B21\u806A\u8471\u56F1\u5306\u4ECE\u4E1B\u51D1\u7C97\u918B\u7C07\u4FC3\u8E7F\u7BE1\u7A9C\u6467\u5D14\u50AC\u8106\u7601\u7CB9\u6DEC\u7FE0\u6751\u5B58\u5BF8\u78CB\u64AE\u6413\u63AA\u632B\u9519\u642D\u8FBE\u7B54\u7629\u6253\u5927\u5446\u6B79\u50A3\u6234\u5E26\u6B86\u4EE3\u8D37\u888B\u5F85\u902E"],
["b540", "\u790D", 5, "\u7914", 9, "\u791F", 4, "\u7925", 14, "\u7935", 4, "\u793D\u793F\u7942\u7943\u7944\u7945\u7947\u794A", 8, "\u7954\u7955\u7958\u7959\u7961\u7963"],
["b580", "\u7964\u7966\u7969\u796A\u796B\u796C\u796E\u7970", 6, "\u7979\u797B", 4, "\u7982\u7983\u7986\u7987\u7988\u7989\u798B\u798C\u798D\u798E\u7990\u7991\u7992\u6020\u803D\u62C5\u4E39\u5355\u90F8\u63B8\u80C6\u65E6\u6C2E\u4F46\u60EE\u6DE1\u8BDE\u5F39\u86CB\u5F53\u6321\u515A\u8361\u6863\u5200\u6363\u8E48\u5012\u5C9B\u7977\u5BFC\u5230\u7A3B\u60BC\u9053\u76D7\u5FB7\u5F97\u7684\u8E6C\u706F\u767B\u7B49\u77AA\u51F3\u9093\u5824\u4F4E\u6EF4\u8FEA\u654C\u7B1B\u72C4\u6DA4\u7FDF\u5AE1\u62B5\u5E95\u5730\u8482\u7B2C\u5E1D\u5F1F\u9012\u7F14\u98A0\u6382\u6EC7\u7898\u70B9\u5178\u975B\u57AB\u7535\u4F43\u7538\u5E97\u60E6\u5960\u6DC0\u6BBF\u7889\u53FC\u96D5\u51CB\u5201\u6389\u540A\u9493\u8C03\u8DCC\u7239\u789F\u8776\u8FED\u8C0D\u53E0"],
["b640", "\u7993", 6, "\u799B", 11, "\u79A8", 10, "\u79B4", 4, "\u79BC\u79BF\u79C2\u79C4\u79C5\u79C7\u79C8\u79CA\u79CC\u79CE\u79CF\u79D0\u79D3\u79D4\u79D6\u79D7\u79D9", 5, "\u79E0\u79E1\u79E2\u79E5\u79E8\u79EA"],
["b680", "\u79EC\u79EE\u79F1", 6, "\u79F9\u79FA\u79FC\u79FE\u79FF\u7A01\u7A04\u7A05\u7A07\u7A08\u7A09\u7A0A\u7A0C\u7A0F", 4, "\u7A15\u7A16\u7A18\u7A19\u7A1B\u7A1C\u4E01\u76EF\u53EE\u9489\u9876\u9F0E\u952D\u5B9A\u8BA2\u4E22\u4E1C\u51AC\u8463\u61C2\u52A8\u680B\u4F97\u606B\u51BB\u6D1E\u515C\u6296\u6597\u9661\u8C46\u9017\u75D8\u90FD\u7763\u6BD2\u728A\u72EC\u8BFB\u5835\u7779\u8D4C\u675C\u9540\u809A\u5EA6\u6E21\u5992\u7AEF\u77ED\u953B\u6BB5\u65AD\u7F0E\u5806\u5151\u961F\u5BF9\u58A9\u5428\u8E72\u6566\u987F\u56E4\u949D\u76FE\u9041\u6387\u54C6\u591A\u593A\u579B\u8EB2\u6735\u8DFA\u8235\u5241\u60F0\u5815\u86FE\u5CE8\u9E45\u4FC4\u989D\u8BB9\u5A25\u6076\u5384\u627C\u904F\u9102\u997F\u6069\u800C\u513F\u8033\u5C14\u9975\u6D31\u4E8C"],
["b740", "\u7A1D\u7A1F\u7A21\u7A22\u7A24", 14, "\u7A34\u7A35\u7A36\u7A38\u7A3A\u7A3E\u7A40", 5, "\u7A47", 9, "\u7A52", 4, "\u7A58", 16],
["b780", "\u7A69", 6, "\u7A71\u7A72\u7A73\u7A75\u7A7B\u7A7C\u7A7D\u7A7E\u7A82\u7A85\u7A87\u7A89\u7A8A\u7A8B\u7A8C\u7A8E\u7A8F\u7A90\u7A93\u7A94\u7A99\u7A9A\u7A9B\u7A9E\u7AA1\u7AA2\u8D30\u53D1\u7F5A\u7B4F\u4F10\u4E4F\u9600\u6CD5\u73D0\u85E9\u5E06\u756A\u7FFB\u6A0A\u77FE\u9492\u7E41\u51E1\u70E6\u53CD\u8FD4\u8303\u8D29\u72AF\u996D\u6CDB\u574A\u82B3\u65B9\u80AA\u623F\u9632\u59A8\u4EFF\u8BBF\u7EBA\u653E\u83F2\u975E\u5561\u98DE\u80A5\u532A\u8BFD\u5420\u80BA\u5E9F\u6CB8\u8D39\u82AC\u915A\u5429\u6C1B\u5206\u7EB7\u575F\u711A\u6C7E\u7C89\u594B\u4EFD\u5FFF\u6124\u7CAA\u4E30\u5C01\u67AB\u8702\u5CF0\u950B\u98CE\u75AF\u70FD\u9022\u51AF\u7F1D\u8BBD\u5949\u51E4\u4F5B\u5426\u592B\u6577\u80A4\u5B75\u6276\u62C2\u8F90\u5E45\u6C1F\u7B26\u4F0F\u4FD8\u670D"],
["b840", "\u7AA3\u7AA4\u7AA7\u7AA9\u7AAA\u7AAB\u7AAE", 4, "\u7AB4", 10, "\u7AC0", 10, "\u7ACC", 9, "\u7AD7\u7AD8\u7ADA\u7ADB\u7ADC\u7ADD\u7AE1\u7AE2\u7AE4\u7AE7", 5, "\u7AEE\u7AF0\u7AF1\u7AF2\u7AF3"],
["b880", "\u7AF4", 4, "\u7AFB\u7AFC\u7AFE\u7B00\u7B01\u7B02\u7B05\u7B07\u7B09\u7B0C\u7B0D\u7B0E\u7B10\u7B12\u7B13\u7B16\u7B17\u7B18\u7B1A\u7B1C\u7B1D\u7B1F\u7B21\u7B22\u7B23\u7B27\u7B29\u7B2D\u6D6E\u6DAA\u798F\u88B1\u5F17\u752B\u629A\u8F85\u4FEF\u91DC\u65A7\u812F\u8151\u5E9C\u8150\u8D74\u526F\u8986\u8D4B\u590D\u5085\u4ED8\u961C\u7236\u8179\u8D1F\u5BCC\u8BA3\u9644\u5987\u7F1A\u5490\u5676\u560E\u8BE5\u6539\u6982\u9499\u76D6\u6E89\u5E72\u7518\u6746\u67D1\u7AFF\u809D\u8D76\u611F\u79C6\u6562\u8D63\u5188\u521A\u94A2\u7F38\u809B\u7EB2\u5C97\u6E2F\u6760\u7BD9\u768B\u9AD8\u818F\u7F94\u7CD5\u641E\u9550\u7A3F\u544A\u54E5\u6B4C\u6401\u6208\u9E3D\u80F3\u7599\u5272\u9769\u845B\u683C\u86E4\u9601\u9694\u94EC\u4E2A\u5404\u7ED9\u6839\u8DDF\u8015\u66F4\u5E9A\u7FB9"],
["b940", "\u7B2F\u7B30\u7B32\u7B34\u7B35\u7B36\u7B37\u7B39\u7B3B\u7B3D\u7B3F", 5, "\u7B46\u7B48\u7B4A\u7B4D\u7B4E\u7B53\u7B55\u7B57\u7B59\u7B5C\u7B5E\u7B5F\u7B61\u7B63", 10, "\u7B6F\u7B70\u7B73\u7B74\u7B76\u7B78\u7B7A\u7B7C\u7B7D\u7B7F\u7B81\u7B82\u7B83\u7B84\u7B86", 6, "\u7B8E\u7B8F"],
["b980", "\u7B91\u7B92\u7B93\u7B96\u7B98\u7B99\u7B9A\u7B9B\u7B9E\u7B9F\u7BA0\u7BA3\u7BA4\u7BA5\u7BAE\u7BAF\u7BB0\u7BB2\u7BB3\u7BB5\u7BB6\u7BB7\u7BB9", 7, "\u7BC2\u7BC3\u7BC4\u57C2\u803F\u6897\u5DE5\u653B\u529F\u606D\u9F9A\u4F9B\u8EAC\u516C\u5BAB\u5F13\u5DE9\u6C5E\u62F1\u8D21\u5171\u94A9\u52FE\u6C9F\u82DF\u72D7\u57A2\u6784\u8D2D\u591F\u8F9C\u83C7\u5495\u7B8D\u4F30\u6CBD\u5B64\u59D1\u9F13\u53E4\u86CA\u9AA8\u8C37\u80A1\u6545\u987E\u56FA\u96C7\u522E\u74DC\u5250\u5BE1\u6302\u8902\u4E56\u62D0\u602A\u68FA\u5173\u5B98\u51A0\u89C2\u7BA1\u9986\u7F50\u60EF\u704C\u8D2F\u5149\u5E7F\u901B\u7470\u89C4\u572D\u7845\u5F52\u9F9F\u95FA\u8F68\u9B3C\u8BE1\u7678\u6842\u67DC\u8DEA\u8D35\u523D\u8F8A\u6EDA\u68CD\u9505\u90ED\u56FD\u679C\u88F9\u8FC7\u54C8"],
["ba40", "\u7BC5\u7BC8\u7BC9\u7BCA\u7BCB\u7BCD\u7BCE\u7BCF\u7BD0\u7BD2\u7BD4", 4, "\u7BDB\u7BDC\u7BDE\u7BDF\u7BE0\u7BE2\u7BE3\u7BE4\u7BE7\u7BE8\u7BE9\u7BEB\u7BEC\u7BED\u7BEF\u7BF0\u7BF2", 4, "\u7BF8\u7BF9\u7BFA\u7BFB\u7BFD\u7BFF", 7, "\u7C08\u7C09\u7C0A\u7C0D\u7C0E\u7C10", 5, "\u7C17\u7C18\u7C19"],
["ba80", "\u7C1A", 4, "\u7C20", 5, "\u7C28\u7C29\u7C2B", 12, "\u7C39", 5, "\u7C42\u9AB8\u5B69\u6D77\u6C26\u4EA5\u5BB3\u9A87\u9163\u61A8\u90AF\u97E9\u542B\u6DB5\u5BD2\u51FD\u558A\u7F55\u7FF0\u64BC\u634D\u65F1\u61BE\u608D\u710A\u6C57\u6C49\u592F\u676D\u822A\u58D5\u568E\u8C6A\u6BEB\u90DD\u597D\u8017\u53F7\u6D69\u5475\u559D\u8377\u83CF\u6838\u79BE\u548C\u4F55\u5408\u76D2\u8C89\u9602\u6CB3\u6DB8\u8D6B\u8910\u9E64\u8D3A\u563F\u9ED1\u75D5\u5F88\u72E0\u6068\u54FC\u4EA8\u6A2A\u8861\u6052\u8F70\u54C4\u70D8\u8679\u9E3F\u6D2A\u5B8F\u5F18\u7EA2\u5589\u4FAF\u7334\u543C\u539A\u5019\u540E\u547C\u4E4E\u5FFD\u745A\u58F6\u846B\u80E1\u8774\u72D0\u7CCA\u6E56"],
["bb40", "\u7C43", 9, "\u7C4E", 36, "\u7C75", 5, "\u7C7E", 9],
["bb80", "\u7C88\u7C8A", 6, "\u7C93\u7C94\u7C96\u7C99\u7C9A\u7C9B\u7CA0\u7CA1\u7CA3\u7CA6\u7CA7\u7CA8\u7CA9\u7CAB\u7CAC\u7CAD\u7CAF\u7CB0\u7CB4", 4, "\u7CBA\u7CBB\u5F27\u864E\u552C\u62A4\u4E92\u6CAA\u6237\u82B1\u54D7\u534E\u733E\u6ED1\u753B\u5212\u5316\u8BDD\u69D0\u5F8A\u6000\u6DEE\u574F\u6B22\u73AF\u6853\u8FD8\u7F13\u6362\u60A3\u5524\u75EA\u8C62\u7115\u6DA3\u5BA6\u5E7B\u8352\u614C\u9EC4\u78FA\u8757\u7C27\u7687\u51F0\u60F6\u714C\u6643\u5E4C\u604D\u8C0E\u7070\u6325\u8F89\u5FBD\u6062\u86D4\u56DE\u6BC1\u6094\u6167\u5349\u60E0\u6666\u8D3F\u79FD\u4F1A\u70E9\u6C47\u8BB3\u8BF2\u7ED8\u8364\u660F\u5A5A\u9B42\u6D51\u6DF7\u8C41\u6D3B\u4F19\u706B\u83B7\u6216\u60D1\u970D\u8D27\u7978\u51FB\u573E\u57FA\u673A\u7578\u7A3D\u79EF\u7B95"],
["bc40", "\u7CBF\u7CC0\u7CC2\u7CC3\u7CC4\u7CC6\u7CC9\u7CCB\u7CCE", 6, "\u7CD8\u7CDA\u7CDB\u7CDD\u7CDE\u7CE1", 6, "\u7CE9", 5, "\u7CF0", 7, "\u7CF9\u7CFA\u7CFC", 13, "\u7D0B", 5],
["bc80", "\u7D11", 14, "\u7D21\u7D23\u7D24\u7D25\u7D26\u7D28\u7D29\u7D2A\u7D2C\u7D2D\u7D2E\u7D30", 6, "\u808C\u9965\u8FF9\u6FC0\u8BA5\u9E21\u59EC\u7EE9\u7F09\u5409\u6781\u68D8\u8F91\u7C4D\u96C6\u53CA\u6025\u75BE\u6C72\u5373\u5AC9\u7EA7\u6324\u51E0\u810A\u5DF1\u84DF\u6280\u5180\u5B63\u4F0E\u796D\u5242\u60B8\u6D4E\u5BC4\u5BC2\u8BA1\u8BB0\u65E2\u5FCC\u9645\u5993\u7EE7\u7EAA\u5609\u67B7\u5939\u4F73\u5BB6\u52A0\u835A\u988A\u8D3E\u7532\u94BE\u5047\u7A3C\u4EF7\u67B6\u9A7E\u5AC1\u6B7C\u76D1\u575A\u5C16\u7B3A\u95F4\u714E\u517C\u80A9\u8270\u5978\u7F04\u8327\u68C0\u67EC\u78B1\u7877\u62E3\u6361\u7B80\u4FED\u526A\u51CF\u8350\u69DB\u9274\u8DF5\u8D31\u89C1\u952E\u7BAD\u4EF6"],
["bd40", "\u7D37", 54, "\u7D6F", 7],
["bd80", "\u7D78", 32, "\u5065\u8230\u5251\u996F\u6E10\u6E85\u6DA7\u5EFA\u50F5\u59DC\u5C06\u6D46\u6C5F\u7586\u848B\u6868\u5956\u8BB2\u5320\u9171\u964D\u8549\u6912\u7901\u7126\u80F6\u4EA4\u90CA\u6D47\u9A84\u5A07\u56BC\u6405\u94F0\u77EB\u4FA5\u811A\u72E1\u89D2\u997A\u7F34\u7EDE\u527F\u6559\u9175\u8F7F\u8F83\u53EB\u7A96\u63ED\u63A5\u7686\u79F8\u8857\u9636\u622A\u52AB\u8282\u6854\u6770\u6377\u776B\u7AED\u6D01\u7ED3\u89E3\u59D0\u6212\u85C9\u82A5\u754C\u501F\u4ECB\u75A5\u8BEB\u5C4A\u5DFE\u7B4B\u65A4\u91D1\u4ECA\u6D25\u895F\u7D27\u9526\u4EC5\u8C28\u8FDB\u9773\u664B\u7981\u8FD1\u70EC\u6D78"],
["be40", "\u7D99", 12, "\u7DA7", 6, "\u7DAF", 42],
["be80", "\u7DDA", 32, "\u5C3D\u52B2\u8346\u5162\u830E\u775B\u6676\u9CB8\u4EAC\u60CA\u7CBE\u7CB3\u7ECF\u4E95\u8B66\u666F\u9888\u9759\u5883\u656C\u955C\u5F84\u75C9\u9756\u7ADF\u7ADE\u51C0\u70AF\u7A98\u63EA\u7A76\u7EA0\u7396\u97ED\u4E45\u7078\u4E5D\u9152\u53A9\u6551\u65E7\u81FC\u8205\u548E\u5C31\u759A\u97A0\u62D8\u72D9\u75BD\u5C45\u9A79\u83CA\u5C40\u5480\u77E9\u4E3E\u6CAE\u805A\u62D2\u636E\u5DE8\u5177\u8DDD\u8E1E\u952F\u4FF1\u53E5\u60E7\u70AC\u5267\u6350\u9E43\u5A1F\u5026\u7737\u5377\u7EE2\u6485\u652B\u6289\u6398\u5014\u7235\u89C9\u51B3\u8BC0\u7EDD\u5747\u83CC\u94A7\u519B\u541B\u5CFB"],
["bf40", "\u7DFB", 62],
["bf80", "\u7E3A\u7E3C", 4, "\u7E42", 4, "\u7E48", 21, "\u4FCA\u7AE3\u6D5A\u90E1\u9A8F\u5580\u5496\u5361\u54AF\u5F00\u63E9\u6977\u51EF\u6168\u520A\u582A\u52D8\u574E\u780D\u770B\u5EB7\u6177\u7CE0\u625B\u6297\u4EA2\u7095\u8003\u62F7\u70E4\u9760\u5777\u82DB\u67EF\u68F5\u78D5\u9897\u79D1\u58F3\u54B3\u53EF\u6E34\u514B\u523B\u5BA2\u8BFE\u80AF\u5543\u57A6\u6073\u5751\u542D\u7A7A\u6050\u5B54\u63A7\u62A0\u53E3\u6263\u5BC7\u67AF\u54ED\u7A9F\u82E6\u9177\u5E93\u88E4\u5938\u57AE\u630E\u8DE8\u80EF\u5757\u7B77\u4FA9\u5FEB\u5BBD\u6B3E\u5321\u7B50\u72C2\u6846\u77FF\u7736\u65F7\u51B5\u4E8F\u76D4\u5CBF\u7AA5\u8475\u594E\u9B41\u5080"],
["c040", "\u7E5E", 35, "\u7E83", 23, "\u7E9C\u7E9D\u7E9E"],
["c080", "\u7EAE\u7EB4\u7EBB\u7EBC\u7ED6\u7EE4\u7EEC\u7EF9\u7F0A\u7F10\u7F1E\u7F37\u7F39\u7F3B", 6, "\u7F43\u7F46", 9, "\u7F52\u7F53\u9988\u6127\u6E83\u5764\u6606\u6346\u56F0\u62EC\u6269\u5ED3\u9614\u5783\u62C9\u5587\u8721\u814A\u8FA3\u5566\u83B1\u6765\u8D56\u84DD\u5A6A\u680F\u62E6\u7BEE\u9611\u5170\u6F9C\u8C30\u63FD\u89C8\u61D2\u7F06\u70C2\u6EE5\u7405\u6994\u72FC\u5ECA\u90CE\u6717\u6D6A\u635E\u52B3\u7262\u8001\u4F6C\u59E5\u916A\u70D9\u6D9D\u52D2\u4E50\u96F7\u956D\u857E\u78CA\u7D2F\u5121\u5792\u64C2\u808B\u7C7B\u6CEA\u68F1\u695E\u51B7\u5398\u68A8\u7281\u9ECE\u7BF1\u72F8\u79BB\u6F13\u7406\u674E\u91CC\u9CA4\u793C\u8389\u8354\u540F\u6817\u4E3D\u5389\u52B1\u783E\u5386\u5229\u5088\u4F8B\u4FD0"],
["c140", "\u7F56\u7F59\u7F5B\u7F5C\u7F5D\u7F5E\u7F60\u7F63", 4, "\u7F6B\u7F6C\u7F6D\u7F6F\u7F70\u7F73\u7F75\u7F76\u7F77\u7F78\u7F7A\u7F7B\u7F7C\u7F7D\u7F7F\u7F80\u7F82", 7, "\u7F8B\u7F8D\u7F8F", 4, "\u7F95", 4, "\u7F9B\u7F9C\u7FA0\u7FA2\u7FA3\u7FA5\u7FA6\u7FA8", 6, "\u7FB1"],
["c180", "\u7FB3", 4, "\u7FBA\u7FBB\u7FBE\u7FC0\u7FC2\u7FC3\u7FC4\u7FC6\u7FC7\u7FC8\u7FC9\u7FCB\u7FCD\u7FCF", 4, "\u7FD6\u7FD7\u7FD9", 5, "\u7FE2\u7FE3\u75E2\u7ACB\u7C92\u6CA5\u96B6\u529B\u7483\u54E9\u4FE9\u8054\u83B2\u8FDE\u9570\u5EC9\u601C\u6D9F\u5E18\u655B\u8138\u94FE\u604B\u70BC\u7EC3\u7CAE\u51C9\u6881\u7CB1\u826F\u4E24\u8F86\u91CF\u667E\u4EAE\u8C05\u64A9\u804A\u50DA\u7597\u71CE\u5BE5\u8FBD\u6F66\u4E86\u6482\u9563\u5ED6\u6599\u5217\u88C2\u70C8\u52A3\u730E\u7433\u6797\u78F7\u9716\u4E34\u90BB\u9CDE\u6DCB\u51DB\u8D41\u541D\u62CE\u73B2\u83F1\u96F6\u9F84\u94C3\u4F36\u7F9A\u51CC\u7075\u9675\u5CAD\u9886\u53E6\u4EE4\u6E9C\u7409\u69B4\u786B\u998F\u7559\u5218\u7624\u6D41\u67F3\u516D\u9F99\u804B\u5499\u7B3C\u7ABF"],
["c240", "\u7FE4\u7FE7\u7FE8\u7FEA\u7FEB\u7FEC\u7FED\u7FEF\u7FF2\u7FF4", 6, "\u7FFD\u7FFE\u7FFF\u8002\u8007\u8008\u8009\u800A\u800E\u800F\u8011\u8013\u801A\u801B\u801D\u801E\u801F\u8021\u8023\u8024\u802B", 5, "\u8032\u8034\u8039\u803A\u803C\u803E\u8040\u8041\u8044\u8045\u8047\u8048\u8049\u804E\u804F\u8050\u8051\u8053\u8055\u8056\u8057"],
["c280", "\u8059\u805B", 13, "\u806B", 5, "\u8072", 11, "\u9686\u5784\u62E2\u9647\u697C\u5A04\u6402\u7BD3\u6F0F\u964B\u82A6\u5362\u9885\u5E90\u7089\u63B3\u5364\u864F\u9C81\u9E93\u788C\u9732\u8DEF\u8D42\u9E7F\u6F5E\u7984\u5F55\u9646\u622E\u9A74\u5415\u94DD\u4FA3\u65C5\u5C65\u5C61\u7F15\u8651\u6C2F\u5F8B\u7387\u6EE4\u7EFF\u5CE6\u631B\u5B6A\u6EE6\u5375\u4E71\u63A0\u7565\u62A1\u8F6E\u4F26\u4ED1\u6CA6\u7EB6\u8BBA\u841D\u87BA\u7F57\u903B\u9523\u7BA9\u9AA1\u88F8\u843D\u6D1B\u9A86\u7EDC\u5988\u9EBB\u739B\u7801\u8682\u9A6C\u9A82\u561B\u5417\u57CB\u4E70\u9EA6\u5356\u8FC8\u8109\u7792\u9992\u86EE\u6EE1\u8513\u66FC\u6162\u6F2B"],
["c340", "\u807E\u8081\u8082\u8085\u8088\u808A\u808D", 5, "\u8094\u8095\u8097\u8099\u809E\u80A3\u80A6\u80A7\u80A8\u80AC\u80B0\u80B3\u80B5\u80B6\u80B8\u80B9\u80BB\u80C5\u80C7", 4, "\u80CF", 6, "\u80D8\u80DF\u80E0\u80E2\u80E3\u80E6\u80EE\u80F5\u80F7\u80F9\u80FB\u80FE\u80FF\u8100\u8101\u8103\u8104\u8105\u8107\u8108\u810B"],
["c380", "\u810C\u8115\u8117\u8119\u811B\u811C\u811D\u811F", 12, "\u812D\u812E\u8130\u8133\u8134\u8135\u8137\u8139", 4, "\u813F\u8C29\u8292\u832B\u76F2\u6C13\u5FD9\u83BD\u732B\u8305\u951A\u6BDB\u77DB\u94C6\u536F\u8302\u5192\u5E3D\u8C8C\u8D38\u4E48\u73AB\u679A\u6885\u9176\u9709\u7164\u6CA1\u7709\u5A92\u9541\u6BCF\u7F8E\u6627\u5BD0\u59B9\u5A9A\u95E8\u95F7\u4EEC\u840C\u8499\u6AAC\u76DF\u9530\u731B\u68A6\u5B5F\u772F\u919A\u9761\u7CDC\u8FF7\u8C1C\u5F25\u7C73\u79D8\u89C5\u6CCC\u871C\u5BC6\u5E42\u68C9\u7720\u7EF5\u5195\u514D\u52C9\u5A29\u7F05\u9762\u82D7\u63CF\u7784\u85D0\u79D2\u6E3A\u5E99\u5999\u8511\u706D\u6C11\u62BF\u76BF\u654F\u60AF\u95FD\u660E\u879F\u9E23\u94ED\u540D\u547D\u8C2C\u6478"],
["c440", "\u8140", 5, "\u8147\u8149\u814D\u814E\u814F\u8152\u8156\u8157\u8158\u815B", 4, "\u8161\u8162\u8163\u8164\u8166\u8168\u816A\u816B\u816C\u816F\u8172\u8173\u8175\u8176\u8177\u8178\u8181\u8183", 4, "\u8189\u818B\u818C\u818D\u818E\u8190\u8192", 5, "\u8199\u819A\u819E", 4, "\u81A4\u81A5"],
["c480", "\u81A7\u81A9\u81AB", 7, "\u81B4", 5, "\u81BC\u81BD\u81BE\u81BF\u81C4\u81C5\u81C7\u81C8\u81C9\u81CB\u81CD", 6, "\u6479\u8611\u6A21\u819C\u78E8\u6469\u9B54\u62B9\u672B\u83AB\u58A8\u9ED8\u6CAB\u6F20\u5BDE\u964C\u8C0B\u725F\u67D0\u62C7\u7261\u4EA9\u59C6\u6BCD\u5893\u66AE\u5E55\u52DF\u6155\u6728\u76EE\u7766\u7267\u7A46\u62FF\u54EA\u5450\u94A0\u90A3\u5A1C\u7EB3\u6C16\u4E43\u5976\u8010\u5948\u5357\u7537\u96BE\u56CA\u6320\u8111\u607C\u95F9\u6DD6\u5462\u9981\u5185\u5AE9\u80FD\u59AE\u9713\u502A\u6CE5\u5C3C\u62DF\u4F60\u533F\u817B\u9006\u6EBA\u852B\u62C8\u5E74\u78BE\u64B5\u637B\u5FF5\u5A18\u917F\u9E1F\u5C3F\u634F\u8042\u5B7D\u556E\u954A\u954D\u6D85\u60A8\u67E0\u72DE\u51DD\u5B81"],
["c540", "\u81D4", 14, "\u81E4\u81E5\u81E6\u81E8\u81E9\u81EB\u81EE", 4, "\u81F5", 5, "\u81FD\u81FF\u8203\u8207", 4, "\u820E\u820F\u8211\u8213\u8215", 5, "\u821D\u8220\u8224\u8225\u8226\u8227\u8229\u822E\u8232\u823A\u823C\u823D\u823F"],
["c580", "\u8240\u8241\u8242\u8243\u8245\u8246\u8248\u824A\u824C\u824D\u824E\u8250", 7, "\u8259\u825B\u825C\u825D\u825E\u8260", 7, "\u8269\u62E7\u6CDE\u725B\u626D\u94AE\u7EBD\u8113\u6D53\u519C\u5F04\u5974\u52AA\u6012\u5973\u6696\u8650\u759F\u632A\u61E6\u7CEF\u8BFA\u54E6\u6B27\u9E25\u6BB4\u85D5\u5455\u5076\u6CA4\u556A\u8DB4\u722C\u5E15\u6015\u7436\u62CD\u6392\u724C\u5F98\u6E43\u6D3E\u6500\u6F58\u76D8\u78D0\u76FC\u7554\u5224\u53DB\u4E53\u5E9E\u65C1\u802A\u80D6\u629B\u5486\u5228\u70AE\u888D\u8DD1\u6CE1\u5478\u80DA\u57F9\u88F4\u8D54\u966A\u914D\u4F69\u6C9B\u55B7\u76C6\u7830\u62A8\u70F9\u6F8E\u5F6D\u84EC\u68DA\u787C\u7BF7\u81A8\u670B\u9E4F\u6367\u78B0\u576F\u7812\u9739\u6279\u62AB\u5288\u7435\u6BD7"],
["c640", "\u826A\u826B\u826C\u826D\u8271\u8275\u8276\u8277\u8278\u827B\u827C\u8280\u8281\u8283\u8285\u8286\u8287\u8289\u828C\u8290\u8293\u8294\u8295\u8296\u829A\u829B\u829E\u82A0\u82A2\u82A3\u82A7\u82B2\u82B5\u82B6\u82BA\u82BB\u82BC\u82BF\u82C0\u82C2\u82C3\u82C5\u82C6\u82C9\u82D0\u82D6\u82D9\u82DA\u82DD\u82E2\u82E7\u82E8\u82E9\u82EA\u82EC\u82ED\u82EE\u82F0\u82F2\u82F3\u82F5\u82F6\u82F8"],
["c680", "\u82FA\u82FC", 4, "\u830A\u830B\u830D\u8310\u8312\u8313\u8316\u8318\u8319\u831D", 9, "\u8329\u832A\u832E\u8330\u8332\u8337\u833B\u833D\u5564\u813E\u75B2\u76AE\u5339\u75DE\u50FB\u5C41\u8B6C\u7BC7\u504F\u7247\u9A97\u98D8\u6F02\u74E2\u7968\u6487\u77A5\u62FC\u9891\u8D2B\u54C1\u8058\u4E52\u576A\u82F9\u840D\u5E73\u51ED\u74F6\u8BC4\u5C4F\u5761\u6CFC\u9887\u5A46\u7834\u9B44\u8FEB\u7C95\u5256\u6251\u94FA\u4EC6\u8386\u8461\u83E9\u84B2\u57D4\u6734\u5703\u666E\u6D66\u8C31\u66DD\u7011\u671F\u6B3A\u6816\u621A\u59BB\u4E03\u51C4\u6F06\u67D2\u6C8F\u5176\u68CB\u5947\u6B67\u7566\u5D0E\u8110\u9F50\u65D7\u7948\u7941\u9A91\u8D77\u5C82\u4E5E\u4F01\u542F\u5951\u780C\u5668\u6C14\u8FC4\u5F03\u6C7D\u6CE3\u8BAB\u6390"],
["c740", "\u833E\u833F\u8341\u8342\u8344\u8345\u8348\u834A", 4, "\u8353\u8355", 4, "\u835D\u8362\u8370", 6, "\u8379\u837A\u837E", 6, "\u8387\u8388\u838A\u838B\u838C\u838D\u838F\u8390\u8391\u8394\u8395\u8396\u8397\u8399\u839A\u839D\u839F\u83A1", 6, "\u83AC\u83AD\u83AE"],
["c780", "\u83AF\u83B5\u83BB\u83BE\u83BF\u83C2\u83C3\u83C4\u83C6\u83C8\u83C9\u83CB\u83CD\u83CE\u83D0\u83D1\u83D2\u83D3\u83D5\u83D7\u83D9\u83DA\u83DB\u83DE\u83E2\u83E3\u83E4\u83E6\u83E7\u83E8\u83EB\u83EC\u83ED\u6070\u6D3D\u7275\u6266\u948E\u94C5\u5343\u8FC1\u7B7E\u4EDF\u8C26\u4E7E\u9ED4\u94B1\u94B3\u524D\u6F5C\u9063\u6D45\u8C34\u5811\u5D4C\u6B20\u6B49\u67AA\u545B\u8154\u7F8C\u5899\u8537\u5F3A\u62A2\u6A47\u9539\u6572\u6084\u6865\u77A7\u4E54\u4FA8\u5DE7\u9798\u64AC\u7FD8\u5CED\u4FCF\u7A8D\u5207\u8304\u4E14\u602F\u7A83\u94A6\u4FB5\u4EB2\u79E6\u7434\u52E4\u82B9\u64D2\u79BD\u5BDD\u6C81\u9752\u8F7B\u6C22\u503E\u537F\u6E05\u64CE\u6674\u6C30\u60C5\u9877\u8BF7\u5E86\u743C\u7A77\u79CB\u4E18\u90B1\u7403\u6C42\u56DA\u914B\u6CC5\u8D8B\u533A\u86C6\u66F2\u8EAF\u5C48\u9A71\u6E20"],
["c840", "\u83EE\u83EF\u83F3", 4, "\u83FA\u83FB\u83FC\u83FE\u83FF\u8400\u8402\u8405\u8407\u8408\u8409\u840A\u8410\u8412", 5, "\u8419\u841A\u841B\u841E", 5, "\u8429", 7, "\u8432", 5, "\u8439\u843A\u843B\u843E", 7, "\u8447\u8448\u8449"],
["c880", "\u844A", 6, "\u8452", 4, "\u8458\u845D\u845E\u845F\u8460\u8462\u8464", 4, "\u846A\u846E\u846F\u8470\u8472\u8474\u8477\u8479\u847B\u847C\u53D6\u5A36\u9F8B\u8DA3\u53BB\u5708\u98A7\u6743\u919B\u6CC9\u5168\u75CA\u62F3\u72AC\u5238\u529D\u7F3A\u7094\u7638\u5374\u9E4A\u69B7\u786E\u96C0\u88D9\u7FA4\u7136\u71C3\u5189\u67D3\u74E4\u58E4\u6518\u56B7\u8BA9\u9976\u6270\u7ED5\u60F9\u70ED\u58EC\u4EC1\u4EBA\u5FCD\u97E7\u4EFB\u8BA4\u5203\u598A\u7EAB\u6254\u4ECD\u65E5\u620E\u8338\u84C9\u8363\u878D\u7194\u6EB6\u5BB9\u7ED2\u5197\u63C9\u67D4\u8089\u8339\u8815\u5112\u5B7A\u5982\u8FB1\u4E73\u6C5D\u5165\u8925\u8F6F\u962E\u854A\u745E\u9510\u95F0\u6DA6\u82E5\u5F31\u6492\u6D12\u8428\u816E\u9CC3\u585E\u8D5B\u4E09\u53C1"],
["c940", "\u847D", 4, "\u8483\u8484\u8485\u8486\u848A\u848D\u848F", 7, "\u8498\u849A\u849B\u849D\u849E\u849F\u84A0\u84A2", 12, "\u84B0\u84B1\u84B3\u84B5\u84B6\u84B7\u84BB\u84BC\u84BE\u84C0\u84C2\u84C3\u84C5\u84C6\u84C7\u84C8\u84CB\u84CC\u84CE\u84CF\u84D2\u84D4\u84D5\u84D7"],
["c980", "\u84D8", 4, "\u84DE\u84E1\u84E2\u84E4\u84E7", 4, "\u84ED\u84EE\u84EF\u84F1", 10, "\u84FD\u84FE\u8500\u8501\u8502\u4F1E\u6563\u6851\u55D3\u4E27\u6414\u9A9A\u626B\u5AC2\u745F\u8272\u6DA9\u68EE\u50E7\u838E\u7802\u6740\u5239\u6C99\u7EB1\u50BB\u5565\u715E\u7B5B\u6652\u73CA\u82EB\u6749\u5C71\u5220\u717D\u886B\u95EA\u9655\u64C5\u8D61\u81B3\u5584\u6C55\u6247\u7F2E\u5892\u4F24\u5546\u8D4F\u664C\u4E0A\u5C1A\u88F3\u68A2\u634E\u7A0D\u70E7\u828D\u52FA\u97F6\u5C11\u54E8\u90B5\u7ECD\u5962\u8D4A\u86C7\u820C\u820D\u8D66\u6444\u5C04\u6151\u6D89\u793E\u8BBE\u7837\u7533\u547B\u4F38\u8EAB\u6DF1\u5A20\u7EC5\u795E\u6C88\u5BA1\u5A76\u751A\u80BE\u614E\u6E17\u58F0\u751F\u7525\u7272\u5347\u7EF3"],
["ca40", "\u8503", 8, "\u850D\u850E\u850F\u8510\u8512\u8514\u8515\u8516\u8518\u8519\u851B\u851C\u851D\u851E\u8520\u8522", 8, "\u852D", 9, "\u853E", 4, "\u8544\u8545\u8546\u8547\u854B", 10],
["ca80", "\u8557\u8558\u855A\u855B\u855C\u855D\u855F", 4, "\u8565\u8566\u8567\u8569", 8, "\u8573\u8575\u8576\u8577\u8578\u857C\u857D\u857F\u8580\u8581\u7701\u76DB\u5269\u80DC\u5723\u5E08\u5931\u72EE\u65BD\u6E7F\u8BD7\u5C38\u8671\u5341\u77F3\u62FE\u65F6\u4EC0\u98DF\u8680\u5B9E\u8BC6\u53F2\u77E2\u4F7F\u5C4E\u9A76\u59CB\u5F0F\u793A\u58EB\u4E16\u67FF\u4E8B\u62ED\u8A93\u901D\u52BF\u662F\u55DC\u566C\u9002\u4ED5\u4F8D\u91CA\u9970\u6C0F\u5E02\u6043\u5BA4\u89C6\u8BD5\u6536\u624B\u9996\u5B88\u5BFF\u6388\u552E\u53D7\u7626\u517D\u852C\u67A2\u68B3\u6B8A\u6292\u8F93\u53D4\u8212\u6DD1\u758F\u4E66\u8D4E\u5B70\u719F\u85AF\u6691\u66D9\u7F72\u8700\u9ECD\u9F20\u5C5E\u672F\u8FF0\u6811\u675F\u620D\u7AD6\u5885\u5EB6\u6570\u6F31"],
["cb40", "\u8582\u8583\u8586\u8588", 6, "\u8590", 10, "\u859D", 6, "\u85A5\u85A6\u85A7\u85A9\u85AB\u85AC\u85AD\u85B1", 5, "\u85B8\u85BA", 6, "\u85C2", 6, "\u85CA", 4, "\u85D1\u85D2"],
["cb80", "\u85D4\u85D6", 5, "\u85DD", 6, "\u85E5\u85E6\u85E7\u85E8\u85EA", 14, "\u6055\u5237\u800D\u6454\u8870\u7529\u5E05\u6813\u62F4\u971C\u53CC\u723D\u8C01\u6C34\u7761\u7A0E\u542E\u77AC\u987A\u821C\u8BF4\u7855\u6714\u70C1\u65AF\u6495\u5636\u601D\u79C1\u53F8\u4E1D\u6B7B\u8086\u5BFA\u55E3\u56DB\u4F3A\u4F3C\u9972\u5DF3\u677E\u8038\u6002\u9882\u9001\u5B8B\u8BBC\u8BF5\u641C\u8258\u64DE\u55FD\u82CF\u9165\u4FD7\u7D20\u901F\u7C9F\u50F3\u5851\u6EAF\u5BBF\u8BC9\u8083\u9178\u849C\u7B97\u867D\u968B\u968F\u7EE5\u9AD3\u788E\u5C81\u7A57\u9042\u96A7\u795F\u5B59\u635F\u7B0B\u84D1\u68AD\u5506\u7F29\u7410\u7D22\u9501\u6240\u584C\u4ED6\u5B83\u5979\u5854"],
["cc40", "\u85F9\u85FA\u85FC\u85FD\u85FE\u8600", 4, "\u8606", 10, "\u8612\u8613\u8614\u8615\u8617", 15, "\u8628\u862A", 13, "\u8639\u863A\u863B\u863D\u863E\u863F\u8640"],
["cc80", "\u8641", 11, "\u8652\u8653\u8655", 4, "\u865B\u865C\u865D\u865F\u8660\u8661\u8663", 7, "\u736D\u631E\u8E4B\u8E0F\u80CE\u82D4\u62AC\u53F0\u6CF0\u915E\u592A\u6001\u6C70\u574D\u644A\u8D2A\u762B\u6EE9\u575B\u6A80\u75F0\u6F6D\u8C2D\u8C08\u5766\u6BEF\u8892\u78B3\u63A2\u53F9\u70AD\u6C64\u5858\u642A\u5802\u68E0\u819B\u5510\u7CD6\u5018\u8EBA\u6DCC\u8D9F\u70EB\u638F\u6D9B\u6ED4\u7EE6\u8404\u6843\u9003\u6DD8\u9676\u8BA8\u5957\u7279\u85E4\u817E\u75BC\u8A8A\u68AF\u5254\u8E22\u9511\u63D0\u9898\u8E44\u557C\u4F53\u66FF\u568F\u60D5\u6D95\u5243\u5C49\u5929\u6DFB\u586B\u7530\u751C\u606C\u8214\u8146\u6311\u6761\u8FE2\u773A\u8DF3\u8D34\u94C1\u5E16\u5385\u542C\u70C3"],
["cd40", "\u866D\u866F\u8670\u8672", 6, "\u8683", 6, "\u868E", 4, "\u8694\u8696", 5, "\u869E", 4, "\u86A5\u86A6\u86AB\u86AD\u86AE\u86B2\u86B3\u86B7\u86B8\u86B9\u86BB", 4, "\u86C1\u86C2\u86C3\u86C5\u86C8\u86CC\u86CD\u86D2\u86D3\u86D5\u86D6\u86D7\u86DA\u86DC"],
["cd80", "\u86DD\u86E0\u86E1\u86E2\u86E3\u86E5\u86E6\u86E7\u86E8\u86EA\u86EB\u86EC\u86EF\u86F5\u86F6\u86F7\u86FA\u86FB\u86FC\u86FD\u86FF\u8701\u8704\u8705\u8706\u870B\u870C\u870E\u870F\u8710\u8711\u8714\u8716\u6C40\u5EF7\u505C\u4EAD\u5EAD\u633A\u8247\u901A\u6850\u916E\u77B3\u540C\u94DC\u5F64\u7AE5\u6876\u6345\u7B52\u7EDF\u75DB\u5077\u6295\u5934\u900F\u51F8\u79C3\u7A81\u56FE\u5F92\u9014\u6D82\u5C60\u571F\u5410\u5154\u6E4D\u56E2\u63A8\u9893\u817F\u8715\u892A\u9000\u541E\u5C6F\u81C0\u62D6\u6258\u8131\u9E35\u9640\u9A6E\u9A7C\u692D\u59A5\u62D3\u553E\u6316\u54C7\u86D9\u6D3C\u5A03\u74E6\u889C\u6B6A\u5916\u8C4C\u5F2F\u6E7E\u73A9\u987D\u4E38\u70F7\u5B8C\u7897\u633D\u665A\u7696\u60CB\u5B9B\u5A49\u4E07\u8155\u6C6A\u738B\u4EA1\u6789\u7F51\u5F80\u65FA\u671B\u5FD8\u5984\u5A01"],
["ce40", "\u8719\u871B\u871D\u871F\u8720\u8724\u8726\u8727\u8728\u872A\u872B\u872C\u872D\u872F\u8730\u8732\u8733\u8735\u8736\u8738\u8739\u873A\u873C\u873D\u8740", 6, "\u874A\u874B\u874D\u874F\u8750\u8751\u8752\u8754\u8755\u8756\u8758\u875A", 5, "\u8761\u8762\u8766", 7, "\u876F\u8771\u8772\u8773\u8775"],
["ce80", "\u8777\u8778\u8779\u877A\u877F\u8780\u8781\u8784\u8786\u8787\u8789\u878A\u878C\u878E", 4, "\u8794\u8795\u8796\u8798", 6, "\u87A0", 4, "\u5DCD\u5FAE\u5371\u97E6\u8FDD\u6845\u56F4\u552F\u60DF\u4E3A\u6F4D\u7EF4\u82C7\u840E\u59D4\u4F1F\u4F2A\u5C3E\u7EAC\u672A\u851A\u5473\u754F\u80C3\u5582\u9B4F\u4F4D\u6E2D\u8C13\u5C09\u6170\u536B\u761F\u6E29\u868A\u6587\u95FB\u7EB9\u543B\u7A33\u7D0A\u95EE\u55E1\u7FC1\u74EE\u631D\u8717\u6DA1\u7A9D\u6211\u65A1\u5367\u63E1\u6C83\u5DEB\u545C\u94A8\u4E4C\u6C61\u8BEC\u5C4B\u65E0\u829C\u68A7\u543E\u5434\u6BCB\u6B66\u4E94\u6342\u5348\u821E\u4F0D\u4FAE\u575E\u620A\u96FE\u6664\u7269\u52FF\u52A1\u609F\u8BEF\u6614\u7199\u6790\u897F\u7852\u77FD\u6670\u563B\u5438\u9521\u727A"],
["cf40", "\u87A5\u87A6\u87A7\u87A9\u87AA\u87AE\u87B0\u87B1\u87B2\u87B4\u87B6\u87B7\u87B8\u87B9\u87BB\u87BC\u87BE\u87BF\u87C1", 4, "\u87C7\u87C8\u87C9\u87CC", 4, "\u87D4", 6, "\u87DC\u87DD\u87DE\u87DF\u87E1\u87E2\u87E3\u87E4\u87E6\u87E7\u87E8\u87E9\u87EB\u87EC\u87ED\u87EF", 9],
["cf80", "\u87FA\u87FB\u87FC\u87FD\u87FF\u8800\u8801\u8802\u8804", 5, "\u880B", 7, "\u8814\u8817\u8818\u8819\u881A\u881C", 4, "\u8823\u7A00\u606F\u5E0C\u6089\u819D\u5915\u60DC\u7184\u70EF\u6EAA\u6C50\u7280\u6A84\u88AD\u5E2D\u4E60\u5AB3\u559C\u94E3\u6D17\u7CFB\u9699\u620F\u7EC6\u778E\u867E\u5323\u971E\u8F96\u6687\u5CE1\u4FA0\u72ED\u4E0B\u53A6\u590F\u5413\u6380\u9528\u5148\u4ED9\u9C9C\u7EA4\u54B8\u8D24\u8854\u8237\u95F2\u6D8E\u5F26\u5ACC\u663E\u9669\u73B0\u732E\u53BF\u817A\u9985\u7FA1\u5BAA\u9677\u9650\u7EBF\u76F8\u53A2\u9576\u9999\u7BB1\u8944\u6E58\u4E61\u7FD4\u7965\u8BE6\u60F3\u54CD\u4EAB\u9879\u5DF7\u6A61\u50CF\u5411\u8C61\u8427\u785D\u9704\u524A\u54EE\u56A3\u9500\u6D88\u5BB5\u6DC6\u6653"],
["d040", "\u8824", 13, "\u8833", 5, "\u883A\u883B\u883D\u883E\u883F\u8841\u8842\u8843\u8846", 5, "\u884E", 5, "\u8855\u8856\u8858\u885A", 6, "\u8866\u8867\u886A\u886D\u886F\u8871\u8873\u8874\u8875\u8876\u8878\u8879\u887A"],
["d080", "\u887B\u887C\u8880\u8883\u8886\u8887\u8889\u888A\u888C\u888E\u888F\u8890\u8891\u8893\u8894\u8895\u8897", 4, "\u889D", 4, "\u88A3\u88A5", 5, "\u5C0F\u5B5D\u6821\u8096\u5578\u7B11\u6548\u6954\u4E9B\u6B47\u874E\u978B\u534F\u631F\u643A\u90AA\u659C\u80C1\u8C10\u5199\u68B0\u5378\u87F9\u61C8\u6CC4\u6CFB\u8C22\u5C51\u85AA\u82AF\u950C\u6B23\u8F9B\u65B0\u5FFB\u5FC3\u4FE1\u8845\u661F\u8165\u7329\u60FA\u5174\u5211\u578B\u5F62\u90A2\u884C\u9192\u5E78\u674F\u6027\u59D3\u5144\u51F6\u80F8\u5308\u6C79\u96C4\u718A\u4F11\u4FEE\u7F9E\u673D\u55C5\u9508\u79C0\u8896\u7EE3\u589F\u620C\u9700\u865A\u5618\u987B\u5F90\u8BB8\u84C4\u9157\u53D9\u65ED\u5E8F\u755C\u6064\u7D6E\u5A7F\u7EEA\u7EED\u8F69\u55A7\u5BA3\u60AC\u65CB\u7384"],
["d140", "\u88AC\u88AE\u88AF\u88B0\u88B2", 4, "\u88B8\u88B9\u88BA\u88BB\u88BD\u88BE\u88BF\u88C0\u88C3\u88C4\u88C7\u88C8\u88CA\u88CB\u88CC\u88CD\u88CF\u88D0\u88D1\u88D3\u88D6\u88D7\u88DA", 4, "\u88E0\u88E1\u88E6\u88E7\u88E9", 6, "\u88F2\u88F5\u88F6\u88F7\u88FA\u88FB\u88FD\u88FF\u8900\u8901\u8903", 5],
["d180", "\u8909\u890B", 4, "\u8911\u8914", 4, "\u891C", 4, "\u8922\u8923\u8924\u8926\u8927\u8928\u8929\u892C\u892D\u892E\u892F\u8931\u8932\u8933\u8935\u8937\u9009\u7663\u7729\u7EDA\u9774\u859B\u5B66\u7A74\u96EA\u8840\u52CB\u718F\u5FAA\u65EC\u8BE2\u5BFB\u9A6F\u5DE1\u6B89\u6C5B\u8BAD\u8BAF\u900A\u8FC5\u538B\u62BC\u9E26\u9E2D\u5440\u4E2B\u82BD\u7259\u869C\u5D16\u8859\u6DAF\u96C5\u54D1\u4E9A\u8BB6\u7109\u54BD\u9609\u70DF\u6DF9\u76D0\u4E25\u7814\u8712\u5CA9\u5EF6\u8A00\u989C\u960E\u708E\u6CBF\u5944\u63A9\u773C\u884D\u6F14\u8273\u5830\u71D5\u538C\u781A\u96C1\u5501\u5F66\u7130\u5BB4\u8C1A\u9A8C\u6B83\u592E\u9E2F\u79E7\u6768\u626C\u4F6F\u75A1\u7F8A\u6D0B\u9633\u6C27\u4EF0\u75D2\u517B\u6837\u6F3E\u9080\u8170\u5996\u7476"],
["d240", "\u8938", 8, "\u8942\u8943\u8945", 24, "\u8960", 5, "\u8967", 19, "\u897C"],
["d280", "\u897D\u897E\u8980\u8982\u8984\u8985\u8987", 26, "\u6447\u5C27\u9065\u7A91\u8C23\u59DA\u54AC\u8200\u836F\u8981\u8000\u6930\u564E\u8036\u7237\u91CE\u51B6\u4E5F\u9875\u6396\u4E1A\u53F6\u66F3\u814B\u591C\u6DB2\u4E00\u58F9\u533B\u63D6\u94F1\u4F9D\u4F0A\u8863\u9890\u5937\u9057\u79FB\u4EEA\u80F0\u7591\u6C82\u5B9C\u59E8\u5F5D\u6905\u8681\u501A\u5DF2\u4E59\u77E3\u4EE5\u827A\u6291\u6613\u9091\u5C79\u4EBF\u5F79\u81C6\u9038\u8084\u75AB\u4EA6\u88D4\u610F\u6BC5\u5FC6\u4E49\u76CA\u6EA2\u8BE3\u8BAE\u8C0A\u8BD1\u5F02\u7FFC\u7FCC\u7ECE\u8335\u836B\u56E0\u6BB7\u97F3\u9634\u59FB\u541F\u94F6\u6DEB\u5BC5\u996E\u5C39\u5F15\u9690"],
["d340", "\u89A2", 30, "\u89C3\u89CD\u89D3\u89D4\u89D5\u89D7\u89D8\u89D9\u89DB\u89DD\u89DF\u89E0\u89E1\u89E2\u89E4\u89E7\u89E8\u89E9\u89EA\u89EC\u89ED\u89EE\u89F0\u89F1\u89F2\u89F4", 6],
["d380", "\u89FB", 4, "\u8A01", 5, "\u8A08", 21, "\u5370\u82F1\u6A31\u5A74\u9E70\u5E94\u7F28\u83B9\u8424\u8425\u8367\u8747\u8FCE\u8D62\u76C8\u5F71\u9896\u786C\u6620\u54DF\u62E5\u4F63\u81C3\u75C8\u5EB8\u96CD\u8E0A\u86F9\u548F\u6CF3\u6D8C\u6C38\u607F\u52C7\u7528\u5E7D\u4F18\u60A0\u5FE7\u5C24\u7531\u90AE\u94C0\u72B9\u6CB9\u6E38\u9149\u6709\u53CB\u53F3\u4F51\u91C9\u8BF1\u53C8\u5E7C\u8FC2\u6DE4\u4E8E\u76C2\u6986\u865E\u611A\u8206\u4F59\u4FDE\u903E\u9C7C\u6109\u6E1D\u6E14\u9685\u4E88\u5A31\u96E8\u4E0E\u5C7F\u79B9\u5B87\u8BED\u7FBD\u7389\u57DF\u828B\u90C1\u5401\u9047\u55BB\u5CEA\u5FA1\u6108\u6B32\u72F1\u80B2\u8A89"],
["d440", "\u8A1E", 31, "\u8A3F", 8, "\u8A49", 21],
["d480", "\u8A5F", 25, "\u8A7A", 6, "\u6D74\u5BD3\u88D5\u9884\u8C6B\u9A6D\u9E33\u6E0A\u51A4\u5143\u57A3\u8881\u539F\u63F4\u8F95\u56ED\u5458\u5706\u733F\u6E90\u7F18\u8FDC\u82D1\u613F\u6028\u9662\u66F0\u7EA6\u8D8A\u8DC3\u94A5\u5CB3\u7CA4\u6708\u60A6\u9605\u8018\u4E91\u90E7\u5300\u9668\u5141\u8FD0\u8574\u915D\u6655\u97F5\u5B55\u531D\u7838\u6742\u683D\u54C9\u707E\u5BB0\u8F7D\u518D\u5728\u54B1\u6512\u6682\u8D5E\u8D43\u810F\u846C\u906D\u7CDF\u51FF\u85FB\u67A3\u65E9\u6FA1\u86A4\u8E81\u566A\u9020\u7682\u7076\u71E5\u8D23\u62E9\u5219\u6CFD\u8D3C\u600E\u589E\u618E\u66FE\u8D60\u624E\u55B3\u6E23\u672D\u8F67"],
["d540", "\u8A81", 7, "\u8A8B", 7, "\u8A94", 46],
["d580", "\u8AC3", 32, "\u94E1\u95F8\u7728\u6805\u69A8\u548B\u4E4D\u70B8\u8BC8\u6458\u658B\u5B85\u7A84\u503A\u5BE8\u77BB\u6BE1\u8A79\u7C98\u6CBE\u76CF\u65A9\u8F97\u5D2D\u5C55\u8638\u6808\u5360\u6218\u7AD9\u6E5B\u7EFD\u6A1F\u7AE0\u5F70\u6F33\u5F20\u638C\u6DA8\u6756\u4E08\u5E10\u8D26\u4ED7\u80C0\u7634\u969C\u62DB\u662D\u627E\u6CBC\u8D75\u7167\u7F69\u5146\u8087\u53EC\u906E\u6298\u54F2\u86F0\u8F99\u8005\u9517\u8517\u8FD9\u6D59\u73CD\u659F\u771F\u7504\u7827\u81FB\u8D1E\u9488\u4FA6\u6795\u75B9\u8BCA\u9707\u632F\u9547\u9635\u84B8\u6323\u7741\u5F81\u72F0\u4E89\u6014\u6574\u62EF\u6B63\u653F"],
["d640", "\u8AE4", 34, "\u8B08", 27],
["d680", "\u8B24\u8B25\u8B27", 30, "\u5E27\u75C7\u90D1\u8BC1\u829D\u679D\u652F\u5431\u8718\u77E5\u80A2\u8102\u6C41\u4E4B\u7EC7\u804C\u76F4\u690D\u6B96\u6267\u503C\u4F84\u5740\u6307\u6B62\u8DBE\u53EA\u65E8\u7EB8\u5FD7\u631A\u63B7\u81F3\u81F4\u7F6E\u5E1C\u5CD9\u5236\u667A\u79E9\u7A1A\u8D28\u7099\u75D4\u6EDE\u6CBB\u7A92\u4E2D\u76C5\u5FE0\u949F\u8877\u7EC8\u79CD\u80BF\u91CD\u4EF2\u4F17\u821F\u5468\u5DDE\u6D32\u8BCC\u7CA5\u8F74\u8098\u5E1A\u5492\u76B1\u5B99\u663C\u9AA4\u73E0\u682A\u86DB\u6731\u732A\u8BF8\u8BDB\u9010\u7AF9\u70DB\u716E\u62C4\u77A9\u5631\u4E3B\u8457\u67F1\u52A9\u86C0\u8D2E\u94F8\u7B51"],
["d740", "\u8B46", 31, "\u8B67", 4, "\u8B6D", 25],
["d780", "\u8B87", 24, "\u8BAC\u8BB1\u8BBB\u8BC7\u8BD0\u8BEA\u8C09\u8C1E\u4F4F\u6CE8\u795D\u9A7B\u6293\u722A\u62FD\u4E13\u7816\u8F6C\u64B0\u8D5A\u7BC6\u6869\u5E84\u88C5\u5986\u649E\u58EE\u72B6\u690E\u9525\u8FFD\u8D58\u5760\u7F00\u8C06\u51C6\u6349\u62D9\u5353\u684C\u7422\u8301\u914C\u5544\u7740\u707C\u6D4A\u5179\u54A8\u8D44\u59FF\u6ECB\u6DC4\u5B5C\u7D2B\u4ED4\u7C7D\u6ED3\u5B50\u81EA\u6E0D\u5B57\u9B03\u68D5\u8E2A\u5B97\u7EFC\u603B\u7EB5\u90B9\u8D70\u594F\u63CD\u79DF\u8DB3\u5352\u65CF\u7956\u8BC5\u963B\u7EC4\u94BB\u7E82\u5634\u9189\u6700\u7F6A\u5C0A\u9075\u6628\u5DE6\u4F50\u67DE\u505A\u4F5C\u5750\u5EA7"],
["d840", "\u8C38", 8, "\u8C42\u8C43\u8C44\u8C45\u8C48\u8C4A\u8C4B\u8C4D", 7, "\u8C56\u8C57\u8C58\u8C59\u8C5B", 5, "\u8C63", 6, "\u8C6C", 6, "\u8C74\u8C75\u8C76\u8C77\u8C7B", 6, "\u8C83\u8C84\u8C86\u8C87"],
["d880", "\u8C88\u8C8B\u8C8D", 6, "\u8C95\u8C96\u8C97\u8C99", 20, "\u4E8D\u4E0C\u5140\u4E10\u5EFF\u5345\u4E15\u4E98\u4E1E\u9B32\u5B6C\u5669\u4E28\u79BA\u4E3F\u5315\u4E47\u592D\u723B\u536E\u6C10\u56DF\u80E4\u9997\u6BD3\u777E\u9F17\u4E36\u4E9F\u9F10\u4E5C\u4E69\u4E93\u8288\u5B5B\u556C\u560F\u4EC4\u538D\u539D\u53A3\u53A5\u53AE\u9765\u8D5D\u531A\u53F5\u5326\u532E\u533E\u8D5C\u5366\u5363\u5202\u5208\u520E\u522D\u5233\u523F\u5240\u524C\u525E\u5261\u525C\u84AF\u527D\u5282\u5281\u5290\u5293\u5182\u7F54\u4EBB\u4EC3\u4EC9\u4EC2\u4EE8\u4EE1\u4EEB\u4EDE\u4F1B\u4EF3\u4F22\u4F64\u4EF5\u4F25\u4F27\u4F09\u4F2B\u4F5E\u4F67\u6538\u4F5A\u4F5D"],
["d940", "\u8CAE", 62],
["d980", "\u8CED", 32, "\u4F5F\u4F57\u4F32\u4F3D\u4F76\u4F74\u4F91\u4F89\u4F83\u4F8F\u4F7E\u4F7B\u4FAA\u4F7C\u4FAC\u4F94\u4FE6\u4FE8\u4FEA\u4FC5\u4FDA\u4FE3\u4FDC\u4FD1\u4FDF\u4FF8\u5029\u504C\u4FF3\u502C\u500F\u502E\u502D\u4FFE\u501C\u500C\u5025\u5028\u507E\u5043\u5055\u5048\u504E\u506C\u507B\u50A5\u50A7\u50A9\u50BA\u50D6\u5106\u50ED\u50EC\u50E6\u50EE\u5107\u510B\u4EDD\u6C3D\u4F58\u4F65\u4FCE\u9FA0\u6C46\u7C74\u516E\u5DFD\u9EC9\u9998\u5181\u5914\u52F9\u530D\u8A07\u5310\u51EB\u5919\u5155\u4EA0\u5156\u4EB3\u886E\u88A4\u4EB5\u8114\u88D2\u7980\u5B34\u8803\u7FB8\u51AB\u51B1\u51BD\u51BC"],
["da40", "\u8D0E", 14, "\u8D20\u8D51\u8D52\u8D57\u8D5F\u8D65\u8D68\u8D69\u8D6A\u8D6C\u8D6E\u8D6F\u8D71\u8D72\u8D78", 8, "\u8D82\u8D83\u8D86\u8D87\u8D88\u8D89\u8D8C", 4, "\u8D92\u8D93\u8D95", 9, "\u8DA0\u8DA1"],
["da80", "\u8DA2\u8DA4", 12, "\u8DB2\u8DB6\u8DB7\u8DB9\u8DBB\u8DBD\u8DC0\u8DC1\u8DC2\u8DC5\u8DC7\u8DC8\u8DC9\u8DCA\u8DCD\u8DD0\u8DD2\u8DD3\u8DD4\u51C7\u5196\u51A2\u51A5\u8BA0\u8BA6\u8BA7\u8BAA\u8BB4\u8BB5\u8BB7\u8BC2\u8BC3\u8BCB\u8BCF\u8BCE\u8BD2\u8BD3\u8BD4\u8BD6\u8BD8\u8BD9\u8BDC\u8BDF\u8BE0\u8BE4\u8BE8\u8BE9\u8BEE\u8BF0\u8BF3\u8BF6\u8BF9\u8BFC\u8BFF\u8C00\u8C02\u8C04\u8C07\u8C0C\u8C0F\u8C11\u8C12\u8C14\u8C15\u8C16\u8C19\u8C1B\u8C18\u8C1D\u8C1F\u8C20\u8C21\u8C25\u8C27\u8C2A\u8C2B\u8C2E\u8C2F\u8C32\u8C33\u8C35\u8C36\u5369\u537A\u961D\u9622\u9621\u9631\u962A\u963D\u963C\u9642\u9649\u9654\u965F\u9667\u966C\u9672\u9674\u9688\u968D\u9697\u96B0\u9097\u909B\u909D\u9099\u90AC\u90A1\u90B4\u90B3\u90B6\u90BA"],
["db40", "\u8DD5\u8DD8\u8DD9\u8DDC\u8DE0\u8DE1\u8DE2\u8DE5\u8DE6\u8DE7\u8DE9\u8DED\u8DEE\u8DF0\u8DF1\u8DF2\u8DF4\u8DF6\u8DFC\u8DFE", 6, "\u8E06\u8E07\u8E08\u8E0B\u8E0D\u8E0E\u8E10\u8E11\u8E12\u8E13\u8E15", 7, "\u8E20\u8E21\u8E24", 4, "\u8E2B\u8E2D\u8E30\u8E32\u8E33\u8E34\u8E36\u8E37\u8E38\u8E3B\u8E3C\u8E3E"],
["db80", "\u8E3F\u8E43\u8E45\u8E46\u8E4C", 4, "\u8E53", 5, "\u8E5A", 11, "\u8E67\u8E68\u8E6A\u8E6B\u8E6E\u8E71\u90B8\u90B0\u90CF\u90C5\u90BE\u90D0\u90C4\u90C7\u90D3\u90E6\u90E2\u90DC\u90D7\u90DB\u90EB\u90EF\u90FE\u9104\u9122\u911E\u9123\u9131\u912F\u9139\u9143\u9146\u520D\u5942\u52A2\u52AC\u52AD\u52BE\u54FF\u52D0\u52D6\u52F0\u53DF\u71EE\u77CD\u5EF4\u51F5\u51FC\u9B2F\u53B6\u5F01\u755A\u5DEF\u574C\u57A9\u57A1\u587E\u58BC\u58C5\u58D1\u5729\u572C\u572A\u5733\u5739\u572E\u572F\u575C\u573B\u5742\u5769\u5785\u576B\u5786\u577C\u577B\u5768\u576D\u5776\u5773\u57AD\u57A4\u578C\u57B2\u57CF\u57A7\u57B4\u5793\u57A0\u57D5\u57D8\u57DA\u57D9\u57D2\u57B8\u57F4\u57EF\u57F8\u57E4\u57DD"],
["dc40", "\u8E73\u8E75\u8E77", 4, "\u8E7D\u8E7E\u8E80\u8E82\u8E83\u8E84\u8E86\u8E88", 6, "\u8E91\u8E92\u8E93\u8E95", 6, "\u8E9D\u8E9F", 11, "\u8EAD\u8EAE\u8EB0\u8EB1\u8EB3", 6, "\u8EBB", 7],
["dc80", "\u8EC3", 10, "\u8ECF", 21, "\u580B\u580D\u57FD\u57ED\u5800\u581E\u5819\u5844\u5820\u5865\u586C\u5881\u5889\u589A\u5880\u99A8\u9F19\u61FF\u8279\u827D\u827F\u828F\u828A\u82A8\u8284\u828E\u8291\u8297\u8299\u82AB\u82B8\u82BE\u82B0\u82C8\u82CA\u82E3\u8298\u82B7\u82AE\u82CB\u82CC\u82C1\u82A9\u82B4\u82A1\u82AA\u829F\u82C4\u82CE\u82A4\u82E1\u8309\u82F7\u82E4\u830F\u8307\u82DC\u82F4\u82D2\u82D8\u830C\u82FB\u82D3\u8311\u831A\u8306\u8314\u8315\u82E0\u82D5\u831C\u8351\u835B\u835C\u8308\u8392\u833C\u8334\u8331\u839B\u835E\u832F\u834F\u8347\u8343\u835F\u8340\u8317\u8360\u832D\u833A\u8333\u8366\u8365"],
["dd40", "\u8EE5", 62],
["dd80", "\u8F24", 32, "\u8368\u831B\u8369\u836C\u836A\u836D\u836E\u83B0\u8378\u83B3\u83B4\u83A0\u83AA\u8393\u839C\u8385\u837C\u83B6\u83A9\u837D\u83B8\u837B\u8398\u839E\u83A8\u83BA\u83BC\u83C1\u8401\u83E5\u83D8\u5807\u8418\u840B\u83DD\u83FD\u83D6\u841C\u8438\u8411\u8406\u83D4\u83DF\u840F\u8403\u83F8\u83F9\u83EA\u83C5\u83C0\u8426\u83F0\u83E1\u845C\u8451\u845A\u8459\u8473\u8487\u8488\u847A\u8489\u8478\u843C\u8446\u8469\u8476\u848C\u848E\u8431\u846D\u84C1\u84CD\u84D0\u84E6\u84BD\u84D3\u84CA\u84BF\u84BA\u84E0\u84A1\u84B9\u84B4\u8497\u84E5\u84E3\u850C\u750D\u8538\u84F0\u8539\u851F\u853A"],
["de40", "\u8F45", 32, "\u8F6A\u8F80\u8F8C\u8F92\u8F9D\u8FA0\u8FA1\u8FA2\u8FA4\u8FA5\u8FA6\u8FA7\u8FAA\u8FAC\u8FAD\u8FAE\u8FAF\u8FB2\u8FB3\u8FB4\u8FB5\u8FB7\u8FB8\u8FBA\u8FBB\u8FBC\u8FBF\u8FC0\u8FC3\u8FC6"],
["de80", "\u8FC9", 4, "\u8FCF\u8FD2\u8FD6\u8FD7\u8FDA\u8FE0\u8FE1\u8FE3\u8FE7\u8FEC\u8FEF\u8FF1\u8FF2\u8FF4\u8FF5\u8FF6\u8FFA\u8FFB\u8FFC\u8FFE\u8FFF\u9007\u9008\u900C\u900E\u9013\u9015\u9018\u8556\u853B\u84FF\u84FC\u8559\u8548\u8568\u8564\u855E\u857A\u77A2\u8543\u8572\u857B\u85A4\u85A8\u8587\u858F\u8579\u85AE\u859C\u8585\u85B9\u85B7\u85B0\u85D3\u85C1\u85DC\u85FF\u8627\u8605\u8629\u8616\u863C\u5EFE\u5F08\u593C\u5941\u8037\u5955\u595A\u5958\u530F\u5C22\u5C25\u5C2C\u5C34\u624C\u626A\u629F\u62BB\u62CA\u62DA\u62D7\u62EE\u6322\u62F6\u6339\u634B\u6343\u63AD\u63F6\u6371\u637A\u638E\u63B4\u636D\u63AC\u638A\u6369\u63AE\u63BC\u63F2\u63F8\u63E0\u63FF\u63C4\u63DE\u63CE\u6452\u63C6\u63BE\u6445\u6441\u640B\u641B\u6420\u640C\u6426\u6421\u645E\u6484\u646D\u6496"],
["df40", "\u9019\u901C\u9023\u9024\u9025\u9027", 5, "\u9030", 4, "\u9037\u9039\u903A\u903D\u903F\u9040\u9043\u9045\u9046\u9048", 4, "\u904E\u9054\u9055\u9056\u9059\u905A\u905C", 5, "\u9064\u9066\u9067\u9069\u906A\u906B\u906C\u906F", 4, "\u9076", 6, "\u907E\u9081"],
["df80", "\u9084\u9085\u9086\u9087\u9089\u908A\u908C", 4, "\u9092\u9094\u9096\u9098\u909A\u909C\u909E\u909F\u90A0\u90A4\u90A5\u90A7\u90A8\u90A9\u90AB\u90AD\u90B2\u90B7\u90BC\u90BD\u90BF\u90C0\u647A\u64B7\u64B8\u6499\u64BA\u64C0\u64D0\u64D7\u64E4\u64E2\u6509\u6525\u652E\u5F0B\u5FD2\u7519\u5F11\u535F\u53F1\u53FD\u53E9\u53E8\u53FB\u5412\u5416\u5406\u544B\u5452\u5453\u5454\u5456\u5443\u5421\u5457\u5459\u5423\u5432\u5482\u5494\u5477\u5471\u5464\u549A\u549B\u5484\u5476\u5466\u549D\u54D0\u54AD\u54C2\u54B4\u54D2\u54A7\u54A6\u54D3\u54D4\u5472\u54A3\u54D5\u54BB\u54BF\u54CC\u54D9\u54DA\u54DC\u54A9\u54AA\u54A4\u54DD\u54CF\u54DE\u551B\u54E7\u5520\u54FD\u5514\u54F3\u5522\u5523\u550F\u5511\u5527\u552A\u5567\u558F\u55B5\u5549\u556D\u5541\u5555\u553F\u5550\u553C"],
["e040", "\u90C2\u90C3\u90C6\u90C8\u90C9\u90CB\u90CC\u90CD\u90D2\u90D4\u90D5\u90D6\u90D8\u90D9\u90DA\u90DE\u90DF\u90E0\u90E3\u90E4\u90E5\u90E9\u90EA\u90EC\u90EE\u90F0\u90F1\u90F2\u90F3\u90F5\u90F6\u90F7\u90F9\u90FA\u90FB\u90FC\u90FF\u9100\u9101\u9103\u9105", 19, "\u911A\u911B\u911C"],
["e080", "\u911D\u911F\u9120\u9121\u9124", 10, "\u9130\u9132", 6, "\u913A", 8, "\u9144\u5537\u5556\u5575\u5576\u5577\u5533\u5530\u555C\u558B\u55D2\u5583\u55B1\u55B9\u5588\u5581\u559F\u557E\u55D6\u5591\u557B\u55DF\u55BD\u55BE\u5594\u5599\u55EA\u55F7\u55C9\u561F\u55D1\u55EB\u55EC\u55D4\u55E6\u55DD\u55C4\u55EF\u55E5\u55F2\u55F3\u55CC\u55CD\u55E8\u55F5\u55E4\u8F94\u561E\u5608\u560C\u5601\u5624\u5623\u55FE\u5600\u5627\u562D\u5658\u5639\u5657\u562C\u564D\u5662\u5659\u565C\u564C\u5654\u5686\u5664\u5671\u566B\u567B\u567C\u5685\u5693\u56AF\u56D4\u56D7\u56DD\u56E1\u56F5\u56EB\u56F9\u56FF\u5704\u570A\u5709\u571C\u5E0F\u5E19\u5E14\u5E11\u5E31\u5E3B\u5E3C"],
["e140", "\u9145\u9147\u9148\u9151\u9153\u9154\u9155\u9156\u9158\u9159\u915B\u915C\u915F\u9160\u9166\u9167\u9168\u916B\u916D\u9173\u917A\u917B\u917C\u9180", 4, "\u9186\u9188\u918A\u918E\u918F\u9193", 6, "\u919C", 5, "\u91A4", 5, "\u91AB\u91AC\u91B0\u91B1\u91B2\u91B3\u91B6\u91B7\u91B8\u91B9\u91BB"],
["e180", "\u91BC", 10, "\u91C8\u91CB\u91D0\u91D2", 9, "\u91DD", 8, "\u5E37\u5E44\u5E54\u5E5B\u5E5E\u5E61\u5C8C\u5C7A\u5C8D\u5C90\u5C96\u5C88\u5C98\u5C99\u5C91\u5C9A\u5C9C\u5CB5\u5CA2\u5CBD\u5CAC\u5CAB\u5CB1\u5CA3\u5CC1\u5CB7\u5CC4\u5CD2\u5CE4\u5CCB\u5CE5\u5D02\u5D03\u5D27\u5D26\u5D2E\u5D24\u5D1E\u5D06\u5D1B\u5D58\u5D3E\u5D34\u5D3D\u5D6C\u5D5B\u5D6F\u5D5D\u5D6B\u5D4B\u5D4A\u5D69\u5D74\u5D82\u5D99\u5D9D\u8C73\u5DB7\u5DC5\u5F73\u5F77\u5F82\u5F87\u5F89\u5F8C\u5F95\u5F99\u5F9C\u5FA8\u5FAD\u5FB5\u5FBC\u8862\u5F61\u72AD\u72B0\u72B4\u72B7\u72B8\u72C3\u72C1\u72CE\u72CD\u72D2\u72E8\u72EF\u72E9\u72F2\u72F4\u72F7\u7301\u72F3\u7303\u72FA"],
["e240", "\u91E6", 62],
["e280", "\u9225", 32, "\u72FB\u7317\u7313\u7321\u730A\u731E\u731D\u7315\u7322\u7339\u7325\u732C\u7338\u7331\u7350\u734D\u7357\u7360\u736C\u736F\u737E\u821B\u5925\u98E7\u5924\u5902\u9963\u9967", 5, "\u9974\u9977\u997D\u9980\u9984\u9987\u998A\u998D\u9990\u9991\u9993\u9994\u9995\u5E80\u5E91\u5E8B\u5E96\u5EA5\u5EA0\u5EB9\u5EB5\u5EBE\u5EB3\u8D53\u5ED2\u5ED1\u5EDB\u5EE8\u5EEA\u81BA\u5FC4\u5FC9\u5FD6\u5FCF\u6003\u5FEE\u6004\u5FE1\u5FE4\u5FFE\u6005\u6006\u5FEA\u5FED\u5FF8\u6019\u6035\u6026\u601B\u600F\u600D\u6029\u602B\u600A\u603F\u6021\u6078\u6079\u607B\u607A\u6042"],
["e340", "\u9246", 45, "\u9275", 16],
["e380", "\u9286", 7, "\u928F", 24, "\u606A\u607D\u6096\u609A\u60AD\u609D\u6083\u6092\u608C\u609B\u60EC\u60BB\u60B1\u60DD\u60D8\u60C6\u60DA\u60B4\u6120\u6126\u6115\u6123\u60F4\u6100\u610E\u612B\u614A\u6175\u61AC\u6194\u61A7\u61B7\u61D4\u61F5\u5FDD\u96B3\u95E9\u95EB\u95F1\u95F3\u95F5\u95F6\u95FC\u95FE\u9603\u9604\u9606\u9608\u960A\u960B\u960C\u960D\u960F\u9612\u9615\u9616\u9617\u9619\u961A\u4E2C\u723F\u6215\u6C35\u6C54\u6C5C\u6C4A\u6CA3\u6C85\u6C90\u6C94\u6C8C\u6C68\u6C69\u6C74\u6C76\u6C86\u6CA9\u6CD0\u6CD4\u6CAD\u6CF7\u6CF8\u6CF1\u6CD7\u6CB2\u6CE0\u6CD6\u6CFA\u6CEB\u6CEE\u6CB1\u6CD3\u6CEF\u6CFE"],
["e440", "\u92A8", 5, "\u92AF", 24, "\u92C9", 31],
["e480", "\u92E9", 32, "\u6D39\u6D27\u6D0C\u6D43\u6D48\u6D07\u6D04\u6D19\u6D0E\u6D2B\u6D4D\u6D2E\u6D35\u6D1A\u6D4F\u6D52\u6D54\u6D33\u6D91\u6D6F\u6D9E\u6DA0\u6D5E\u6D93\u6D94\u6D5C\u6D60\u6D7C\u6D63\u6E1A\u6DC7\u6DC5\u6DDE\u6E0E\u6DBF\u6DE0\u6E11\u6DE6\u6DDD\u6DD9\u6E16\u6DAB\u6E0C\u6DAE\u6E2B\u6E6E\u6E4E\u6E6B\u6EB2\u6E5F\u6E86\u6E53\u6E54\u6E32\u6E25\u6E44\u6EDF\u6EB1\u6E98\u6EE0\u6F2D\u6EE2\u6EA5\u6EA7\u6EBD\u6EBB\u6EB7\u6ED7\u6EB4\u6ECF\u6E8F\u6EC2\u6E9F\u6F62\u6F46\u6F47\u6F24\u6F15\u6EF9\u6F2F\u6F36\u6F4B\u6F74\u6F2A\u6F09\u6F29\u6F89\u6F8D\u6F8C\u6F78\u6F72\u6F7C\u6F7A\u6FD1"],
["e540", "\u930A", 51, "\u933F", 10],
["e580", "\u934A", 31, "\u936B\u6FC9\u6FA7\u6FB9\u6FB6\u6FC2\u6FE1\u6FEE\u6FDE\u6FE0\u6FEF\u701A\u7023\u701B\u7039\u7035\u704F\u705E\u5B80\u5B84\u5B95\u5B93\u5BA5\u5BB8\u752F\u9A9E\u6434\u5BE4\u5BEE\u8930\u5BF0\u8E47\u8B07\u8FB6\u8FD3\u8FD5\u8FE5\u8FEE\u8FE4\u8FE9\u8FE6\u8FF3\u8FE8\u9005\u9004\u900B\u9026\u9011\u900D\u9016\u9021\u9035\u9036\u902D\u902F\u9044\u9051\u9052\u9050\u9068\u9058\u9062\u905B\u66B9\u9074\u907D\u9082\u9088\u9083\u908B\u5F50\u5F57\u5F56\u5F58\u5C3B\u54AB\u5C50\u5C59\u5B71\u5C63\u5C66\u7FBC\u5F2A\u5F29\u5F2D\u8274\u5F3C\u9B3B\u5C6E\u5981\u5983\u598D\u59A9\u59AA\u59A3"],
["e640", "\u936C", 34, "\u9390", 27],
["e680", "\u93AC", 29, "\u93CB\u93CC\u93CD\u5997\u59CA\u59AB\u599E\u59A4\u59D2\u59B2\u59AF\u59D7\u59BE\u5A05\u5A06\u59DD\u5A08\u59E3\u59D8\u59F9\u5A0C\u5A09\u5A32\u5A34\u5A11\u5A23\u5A13\u5A40\u5A67\u5A4A\u5A55\u5A3C\u5A62\u5A75\u80EC\u5AAA\u5A9B\u5A77\u5A7A\u5ABE\u5AEB\u5AB2\u5AD2\u5AD4\u5AB8\u5AE0\u5AE3\u5AF1\u5AD6\u5AE6\u5AD8\u5ADC\u5B09\u5B17\u5B16\u5B32\u5B37\u5B40\u5C15\u5C1C\u5B5A\u5B65\u5B73\u5B51\u5B53\u5B62\u9A75\u9A77\u9A78\u9A7A\u9A7F\u9A7D\u9A80\u9A81\u9A85\u9A88\u9A8A\u9A90\u9A92\u9A93\u9A96\u9A98\u9A9B\u9A9C\u9A9D\u9A9F\u9AA0\u9AA2\u9AA3\u9AA5\u9AA7\u7E9F\u7EA1\u7EA3\u7EA5\u7EA8\u7EA9"],
["e740", "\u93CE", 7, "\u93D7", 54],
["e780", "\u940E", 32, "\u7EAD\u7EB0\u7EBE\u7EC0\u7EC1\u7EC2\u7EC9\u7ECB\u7ECC\u7ED0\u7ED4\u7ED7\u7EDB\u7EE0\u7EE1\u7EE8\u7EEB\u7EEE\u7EEF\u7EF1\u7EF2\u7F0D\u7EF6\u7EFA\u7EFB\u7EFE\u7F01\u7F02\u7F03\u7F07\u7F08\u7F0B\u7F0C\u7F0F\u7F11\u7F12\u7F17\u7F19\u7F1C\u7F1B\u7F1F\u7F21", 6, "\u7F2A\u7F2B\u7F2C\u7F2D\u7F2F", 4, "\u7F35\u5E7A\u757F\u5DDB\u753E\u9095\u738E\u7391\u73AE\u73A2\u739F\u73CF\u73C2\u73D1\u73B7\u73B3\u73C0\u73C9\u73C8\u73E5\u73D9\u987C\u740A\u73E9\u73E7\u73DE\u73BA\u73F2\u740F\u742A\u745B\u7426\u7425\u7428\u7430\u742E\u742C"],
["e840", "\u942F", 14, "\u943F", 43, "\u946C\u946D\u946E\u946F"],
["e880", "\u9470", 20, "\u9491\u9496\u9498\u94C7\u94CF\u94D3\u94D4\u94DA\u94E6\u94FB\u951C\u9520\u741B\u741A\u7441\u745C\u7457\u7455\u7459\u7477\u746D\u747E\u749C\u748E\u7480\u7481\u7487\u748B\u749E\u74A8\u74A9\u7490\u74A7\u74D2\u74BA\u97EA\u97EB\u97EC\u674C\u6753\u675E\u6748\u6769\u67A5\u6787\u676A\u6773\u6798\u67A7\u6775\u67A8\u679E\u67AD\u678B\u6777\u677C\u67F0\u6809\u67D8\u680A\u67E9\u67B0\u680C\u67D9\u67B5\u67DA\u67B3\u67DD\u6800\u67C3\u67B8\u67E2\u680E\u67C1\u67FD\u6832\u6833\u6860\u6861\u684E\u6862\u6844\u6864\u6883\u681D\u6855\u6866\u6841\u6867\u6840\u683E\u684A\u6849\u6829\u68B5\u688F\u6874\u6877\u6893\u686B\u68C2\u696E\u68FC\u691F\u6920\u68F9"],
["e940", "\u9527\u9533\u953D\u9543\u9548\u954B\u9555\u955A\u9560\u956E\u9574\u9575\u9577", 7, "\u9580", 42],
["e980", "\u95AB", 32, "\u6924\u68F0\u690B\u6901\u6957\u68E3\u6910\u6971\u6939\u6960\u6942\u695D\u6984\u696B\u6980\u6998\u6978\u6934\u69CC\u6987\u6988\u69CE\u6989\u6966\u6963\u6979\u699B\u69A7\u69BB\u69AB\u69AD\u69D4\u69B1\u69C1\u69CA\u69DF\u6995\u69E0\u698D\u69FF\u6A2F\u69ED\u6A17\u6A18\u6A65\u69F2\u6A44\u6A3E\u6AA0\u6A50\u6A5B\u6A35\u6A8E\u6A79\u6A3D\u6A28\u6A58\u6A7C\u6A91\u6A90\u6AA9\u6A97\u6AAB\u7337\u7352\u6B81\u6B82\u6B87\u6B84\u6B92\u6B93\u6B8D\u6B9A\u6B9B\u6BA1\u6BAA\u8F6B\u8F6D\u8F71\u8F72\u8F73\u8F75\u8F76\u8F78\u8F77\u8F79\u8F7A\u8F7C\u8F7E\u8F81\u8F82\u8F84\u8F87\u8F8B"],
["ea40", "\u95CC", 27, "\u95EC\u95FF\u9607\u9613\u9618\u961B\u961E\u9620\u9623", 6, "\u962B\u962C\u962D\u962F\u9630\u9637\u9638\u9639\u963A\u963E\u9641\u9643\u964A\u964E\u964F\u9651\u9652\u9653\u9656\u9657"],
["ea80", "\u9658\u9659\u965A\u965C\u965D\u965E\u9660\u9663\u9665\u9666\u966B\u966D", 4, "\u9673\u9678", 12, "\u9687\u9689\u968A\u8F8D\u8F8E\u8F8F\u8F98\u8F9A\u8ECE\u620B\u6217\u621B\u621F\u6222\u6221\u6225\u6224\u622C\u81E7\u74EF\u74F4\u74FF\u750F\u7511\u7513\u6534\u65EE\u65EF\u65F0\u660A\u6619\u6772\u6603\u6615\u6600\u7085\u66F7\u661D\u6634\u6631\u6636\u6635\u8006\u665F\u6654\u6641\u664F\u6656\u6661\u6657\u6677\u6684\u668C\u66A7\u669D\u66BE\u66DB\u66DC\u66E6\u66E9\u8D32\u8D33\u8D36\u8D3B\u8D3D\u8D40\u8D45\u8D46\u8D48\u8D49\u8D47\u8D4D\u8D55\u8D59\u89C7\u89CA\u89CB\u89CC\u89CE\u89CF\u89D0\u89D1\u726E\u729F\u725D\u7266\u726F\u727E\u727F\u7284\u728B\u728D\u728F\u7292\u6308\u6332\u63B0"],
["eb40", "\u968C\u968E\u9691\u9692\u9693\u9695\u9696\u969A\u969B\u969D", 9, "\u96A8", 7, "\u96B1\u96B2\u96B4\u96B5\u96B7\u96B8\u96BA\u96BB\u96BF\u96C2\u96C3\u96C8\u96CA\u96CB\u96D0\u96D1\u96D3\u96D4\u96D6", 9, "\u96E1", 6, "\u96EB"],
["eb80", "\u96EC\u96ED\u96EE\u96F0\u96F1\u96F2\u96F4\u96F5\u96F8\u96FA\u96FB\u96FC\u96FD\u96FF\u9702\u9703\u9705\u970A\u970B\u970C\u9710\u9711\u9712\u9714\u9715\u9717", 4, "\u971D\u971F\u9720\u643F\u64D8\u8004\u6BEA\u6BF3\u6BFD\u6BF5\u6BF9\u6C05\u6C07\u6C06\u6C0D\u6C15\u6C18\u6C19\u6C1A\u6C21\u6C29\u6C24\u6C2A\u6C32\u6535\u6555\u656B\u724D\u7252\u7256\u7230\u8662\u5216\u809F\u809C\u8093\u80BC\u670A\u80BD\u80B1\u80AB\u80AD\u80B4\u80B7\u80E7\u80E8\u80E9\u80EA\u80DB\u80C2\u80C4\u80D9\u80CD\u80D7\u6710\u80DD\u80EB\u80F1\u80F4\u80ED\u810D\u810E\u80F2\u80FC\u6715\u8112\u8C5A\u8136\u811E\u812C\u8118\u8132\u8148\u814C\u8153\u8174\u8159\u815A\u8171\u8160\u8169\u817C\u817D\u816D\u8167\u584D\u5AB5\u8188\u8182\u8191\u6ED5\u81A3\u81AA\u81CC\u6726\u81CA\u81BB"],
["ec40", "\u9721", 8, "\u972B\u972C\u972E\u972F\u9731\u9733", 4, "\u973A\u973B\u973C\u973D\u973F", 18, "\u9754\u9755\u9757\u9758\u975A\u975C\u975D\u975F\u9763\u9764\u9766\u9767\u9768\u976A", 7],
["ec80", "\u9772\u9775\u9777", 4, "\u977D", 7, "\u9786", 4, "\u978C\u978E\u978F\u9790\u9793\u9795\u9796\u9797\u9799", 4, "\u81C1\u81A6\u6B24\u6B37\u6B39\u6B43\u6B46\u6B59\u98D1\u98D2\u98D3\u98D5\u98D9\u98DA\u6BB3\u5F40\u6BC2\u89F3\u6590\u9F51\u6593\u65BC\u65C6\u65C4\u65C3\u65CC\u65CE\u65D2\u65D6\u7080\u709C\u7096\u709D\u70BB\u70C0\u70B7\u70AB\u70B1\u70E8\u70CA\u7110\u7113\u7116\u712F\u7131\u7173\u715C\u7168\u7145\u7172\u714A\u7178\u717A\u7198\u71B3\u71B5\u71A8\u71A0\u71E0\u71D4\u71E7\u71F9\u721D\u7228\u706C\u7118\u7166\u71B9\u623E\u623D\u6243\u6248\u6249\u793B\u7940\u7946\u7949\u795B\u795C\u7953\u795A\u7962\u7957\u7960\u796F\u7967\u797A\u7985\u798A\u799A\u79A7\u79B3\u5FD1\u5FD0"],
["ed40", "\u979E\u979F\u97A1\u97A2\u97A4", 6, "\u97AC\u97AE\u97B0\u97B1\u97B3\u97B5", 46],
["ed80", "\u97E4\u97E5\u97E8\u97EE", 4, "\u97F4\u97F7", 23, "\u603C\u605D\u605A\u6067\u6041\u6059\u6063\u60AB\u6106\u610D\u615D\u61A9\u619D\u61CB\u61D1\u6206\u8080\u807F\u6C93\u6CF6\u6DFC\u77F6\u77F8\u7800\u7809\u7817\u7818\u7811\u65AB\u782D\u781C\u781D\u7839\u783A\u783B\u781F\u783C\u7825\u782C\u7823\u7829\u784E\u786D\u7856\u7857\u7826\u7850\u7847\u784C\u786A\u789B\u7893\u789A\u7887\u789C\u78A1\u78A3\u78B2\u78B9\u78A5\u78D4\u78D9\u78C9\u78EC\u78F2\u7905\u78F4\u7913\u7924\u791E\u7934\u9F9B\u9EF9\u9EFB\u9EFC\u76F1\u7704\u770D\u76F9\u7707\u7708\u771A\u7722\u7719\u772D\u7726\u7735\u7738\u7750\u7751\u7747\u7743\u775A\u7768"],
["ee40", "\u980F", 62],
["ee80", "\u984E", 32, "\u7762\u7765\u777F\u778D\u777D\u7780\u778C\u7791\u779F\u77A0\u77B0\u77B5\u77BD\u753A\u7540\u754E\u754B\u7548\u755B\u7572\u7579\u7583\u7F58\u7F61\u7F5F\u8A48\u7F68\u7F74\u7F71\u7F79\u7F81\u7F7E\u76CD\u76E5\u8832\u9485\u9486\u9487\u948B\u948A\u948C\u948D\u948F\u9490\u9494\u9497\u9495\u949A\u949B\u949C\u94A3\u94A4\u94AB\u94AA\u94AD\u94AC\u94AF\u94B0\u94B2\u94B4\u94B6", 4, "\u94BC\u94BD\u94BF\u94C4\u94C8", 6, "\u94D0\u94D1\u94D2\u94D5\u94D6\u94D7\u94D9\u94D8\u94DB\u94DE\u94DF\u94E0\u94E2\u94E4\u94E5\u94E7\u94E8\u94EA"],
["ef40", "\u986F", 5, "\u988B\u988E\u9892\u9895\u9899\u98A3\u98A8", 37, "\u98CF\u98D0\u98D4\u98D6\u98D7\u98DB\u98DC\u98DD\u98E0", 4],
["ef80", "\u98E5\u98E6\u98E9", 30, "\u94E9\u94EB\u94EE\u94EF\u94F3\u94F4\u94F5\u94F7\u94F9\u94FC\u94FD\u94FF\u9503\u9502\u9506\u9507\u9509\u950A\u950D\u950E\u950F\u9512", 4, "\u9518\u951B\u951D\u951E\u951F\u9522\u952A\u952B\u9529\u952C\u9531\u9532\u9534\u9536\u9537\u9538\u953C\u953E\u953F\u9542\u9535\u9544\u9545\u9546\u9549\u954C\u954E\u954F\u9552\u9553\u9554\u9556\u9557\u9558\u9559\u955B\u955E\u955F\u955D\u9561\u9562\u9564", 8, "\u956F\u9571\u9572\u9573\u953A\u77E7\u77EC\u96C9\u79D5\u79ED\u79E3\u79EB\u7A06\u5D47\u7A03\u7A02\u7A1E\u7A14"],
["f040", "\u9908", 4, "\u990E\u990F\u9911", 28, "\u992F", 26],
["f080", "\u994A", 9, "\u9956", 12, "\u9964\u9966\u9973\u9978\u9979\u997B\u997E\u9982\u9983\u9989\u7A39\u7A37\u7A51\u9ECF\u99A5\u7A70\u7688\u768E\u7693\u7699\u76A4\u74DE\u74E0\u752C\u9E20\u9E22\u9E28", 4, "\u9E32\u9E31\u9E36\u9E38\u9E37\u9E39\u9E3A\u9E3E\u9E41\u9E42\u9E44\u9E46\u9E47\u9E48\u9E49\u9E4B\u9E4C\u9E4E\u9E51\u9E55\u9E57\u9E5A\u9E5B\u9E5C\u9E5E\u9E63\u9E66", 6, "\u9E71\u9E6D\u9E73\u7592\u7594\u7596\u75A0\u759D\u75AC\u75A3\u75B3\u75B4\u75B8\u75C4\u75B1\u75B0\u75C3\u75C2\u75D6\u75CD\u75E3\u75E8\u75E6\u75E4\u75EB\u75E7\u7603\u75F1\u75FC\u75FF\u7610\u7600\u7605\u760C\u7617\u760A\u7625\u7618\u7615\u7619"],
["f140", "\u998C\u998E\u999A", 10, "\u99A6\u99A7\u99A9", 47],
["f180", "\u99D9", 32, "\u761B\u763C\u7622\u7620\u7640\u762D\u7630\u763F\u7635\u7643\u763E\u7633\u764D\u765E\u7654\u765C\u7656\u766B\u766F\u7FCA\u7AE6\u7A78\u7A79\u7A80\u7A86\u7A88\u7A95\u7AA6\u7AA0\u7AAC\u7AA8\u7AAD\u7AB3\u8864\u8869\u8872\u887D\u887F\u8882\u88A2\u88C6\u88B7\u88BC\u88C9\u88E2\u88CE\u88E3\u88E5\u88F1\u891A\u88FC\u88E8\u88FE\u88F0\u8921\u8919\u8913\u891B\u890A\u8934\u892B\u8936\u8941\u8966\u897B\u758B\u80E5\u76B2\u76B4\u77DC\u8012\u8014\u8016\u801C\u8020\u8022\u8025\u8026\u8027\u8029\u8028\u8031\u800B\u8035\u8043\u8046\u804D\u8052\u8069\u8071\u8983\u9878\u9880\u9883"],
["f240", "\u99FA", 62],
["f280", "\u9A39", 32, "\u9889\u988C\u988D\u988F\u9894\u989A\u989B\u989E\u989F\u98A1\u98A2\u98A5\u98A6\u864D\u8654\u866C\u866E\u867F\u867A\u867C\u867B\u86A8\u868D\u868B\u86AC\u869D\u86A7\u86A3\u86AA\u8693\u86A9\u86B6\u86C4\u86B5\u86CE\u86B0\u86BA\u86B1\u86AF\u86C9\u86CF\u86B4\u86E9\u86F1\u86F2\u86ED\u86F3\u86D0\u8713\u86DE\u86F4\u86DF\u86D8\u86D1\u8703\u8707\u86F8\u8708\u870A\u870D\u8709\u8723\u873B\u871E\u8725\u872E\u871A\u873E\u8748\u8734\u8731\u8729\u8737\u873F\u8782\u8722\u877D\u877E\u877B\u8760\u8770\u874C\u876E\u878B\u8753\u8763\u877C\u8764\u8759\u8765\u8793\u87AF\u87A8\u87D2"],
["f340", "\u9A5A", 17, "\u9A72\u9A83\u9A89\u9A8D\u9A8E\u9A94\u9A95\u9A99\u9AA6\u9AA9", 6, "\u9AB2\u9AB3\u9AB4\u9AB5\u9AB9\u9ABB\u9ABD\u9ABE\u9ABF\u9AC3\u9AC4\u9AC6", 4, "\u9ACD\u9ACE\u9ACF\u9AD0\u9AD2\u9AD4\u9AD5\u9AD6\u9AD7\u9AD9\u9ADA\u9ADB\u9ADC"],
["f380", "\u9ADD\u9ADE\u9AE0\u9AE2\u9AE3\u9AE4\u9AE5\u9AE7\u9AE8\u9AE9\u9AEA\u9AEC\u9AEE\u9AF0", 8, "\u9AFA\u9AFC", 6, "\u9B04\u9B05\u9B06\u87C6\u8788\u8785\u87AD\u8797\u8783\u87AB\u87E5\u87AC\u87B5\u87B3\u87CB\u87D3\u87BD\u87D1\u87C0\u87CA\u87DB\u87EA\u87E0\u87EE\u8816\u8813\u87FE\u880A\u881B\u8821\u8839\u883C\u7F36\u7F42\u7F44\u7F45\u8210\u7AFA\u7AFD\u7B08\u7B03\u7B04\u7B15\u7B0A\u7B2B\u7B0F\u7B47\u7B38\u7B2A\u7B19\u7B2E\u7B31\u7B20\u7B25\u7B24\u7B33\u7B3E\u7B1E\u7B58\u7B5A\u7B45\u7B75\u7B4C\u7B5D\u7B60\u7B6E\u7B7B\u7B62\u7B72\u7B71\u7B90\u7BA6\u7BA7\u7BB8\u7BAC\u7B9D\u7BA8\u7B85\u7BAA\u7B9C\u7BA2\u7BAB\u7BB4\u7BD1\u7BC1\u7BCC\u7BDD\u7BDA\u7BE5\u7BE6\u7BEA\u7C0C\u7BFE\u7BFC\u7C0F\u7C16\u7C0B"],
["f440", "\u9B07\u9B09", 5, "\u9B10\u9B11\u9B12\u9B14", 10, "\u9B20\u9B21\u9B22\u9B24", 10, "\u9B30\u9B31\u9B33", 7, "\u9B3D\u9B3E\u9B3F\u9B40\u9B46\u9B4A\u9B4B\u9B4C\u9B4E\u9B50\u9B52\u9B53\u9B55", 5],
["f480", "\u9B5B", 32, "\u7C1F\u7C2A\u7C26\u7C38\u7C41\u7C40\u81FE\u8201\u8202\u8204\u81EC\u8844\u8221\u8222\u8223\u822D\u822F\u8228\u822B\u8238\u823B\u8233\u8234\u823E\u8244\u8249\u824B\u824F\u825A\u825F\u8268\u887E\u8885\u8888\u88D8\u88DF\u895E\u7F9D\u7F9F\u7FA7\u7FAF\u7FB0\u7FB2\u7C7C\u6549\u7C91\u7C9D\u7C9C\u7C9E\u7CA2\u7CB2\u7CBC\u7CBD\u7CC1\u7CC7\u7CCC\u7CCD\u7CC8\u7CC5\u7CD7\u7CE8\u826E\u66A8\u7FBF\u7FCE\u7FD5\u7FE5\u7FE1\u7FE6\u7FE9\u7FEE\u7FF3\u7CF8\u7D77\u7DA6\u7DAE\u7E47\u7E9B\u9EB8\u9EB4\u8D73\u8D84\u8D94\u8D91\u8DB1\u8D67\u8D6D\u8C47\u8C49\u914A\u9150\u914E\u914F\u9164"],
["f540", "\u9B7C", 62],
["f580", "\u9BBB", 32, "\u9162\u9161\u9170\u9169\u916F\u917D\u917E\u9172\u9174\u9179\u918C\u9185\u9190\u918D\u9191\u91A2\u91A3\u91AA\u91AD\u91AE\u91AF\u91B5\u91B4\u91BA\u8C55\u9E7E\u8DB8\u8DEB\u8E05\u8E59\u8E69\u8DB5\u8DBF\u8DBC\u8DBA\u8DC4\u8DD6\u8DD7\u8DDA\u8DDE\u8DCE\u8DCF\u8DDB\u8DC6\u8DEC\u8DF7\u8DF8\u8DE3\u8DF9\u8DFB\u8DE4\u8E09\u8DFD\u8E14\u8E1D\u8E1F\u8E2C\u8E2E\u8E23\u8E2F\u8E3A\u8E40\u8E39\u8E35\u8E3D\u8E31\u8E49\u8E41\u8E42\u8E51\u8E52\u8E4A\u8E70\u8E76\u8E7C\u8E6F\u8E74\u8E85\u8E8F\u8E94\u8E90\u8E9C\u8E9E\u8C78\u8C82\u8C8A\u8C85\u8C98\u8C94\u659B\u89D6\u89DE\u89DA\u89DC"],
["f640", "\u9BDC", 62],
["f680", "\u9C1B", 32, "\u89E5\u89EB\u89EF\u8A3E\u8B26\u9753\u96E9\u96F3\u96EF\u9706\u9701\u9708\u970F\u970E\u972A\u972D\u9730\u973E\u9F80\u9F83\u9F85", 5, "\u9F8C\u9EFE\u9F0B\u9F0D\u96B9\u96BC\u96BD\u96CE\u96D2\u77BF\u96E0\u928E\u92AE\u92C8\u933E\u936A\u93CA\u938F\u943E\u946B\u9C7F\u9C82\u9C85\u9C86\u9C87\u9C88\u7A23\u9C8B\u9C8E\u9C90\u9C91\u9C92\u9C94\u9C95\u9C9A\u9C9B\u9C9E", 5, "\u9CA5", 4, "\u9CAB\u9CAD\u9CAE\u9CB0", 7, "\u9CBA\u9CBB\u9CBC\u9CBD\u9CC4\u9CC5\u9CC6\u9CC7\u9CCA\u9CCB"],
["f740", "\u9C3C", 62],
["f780", "\u9C7B\u9C7D\u9C7E\u9C80\u9C83\u9C84\u9C89\u9C8A\u9C8C\u9C8F\u9C93\u9C96\u9C97\u9C98\u9C99\u9C9D\u9CAA\u9CAC\u9CAF\u9CB9\u9CBE", 4, "\u9CC8\u9CC9\u9CD1\u9CD2\u9CDA\u9CDB\u9CE0\u9CE1\u9CCC", 4, "\u9CD3\u9CD4\u9CD5\u9CD7\u9CD8\u9CD9\u9CDC\u9CDD\u9CDF\u9CE2\u977C\u9785\u9791\u9792\u9794\u97AF\u97AB\u97A3\u97B2\u97B4\u9AB1\u9AB0\u9AB7\u9E58\u9AB6\u9ABA\u9ABC\u9AC1\u9AC0\u9AC5\u9AC2\u9ACB\u9ACC\u9AD1\u9B45\u9B43\u9B47\u9B49\u9B48\u9B4D\u9B51\u98E8\u990D\u992E\u9955\u9954\u9ADF\u9AE1\u9AE6\u9AEF\u9AEB\u9AFB\u9AED\u9AF9\u9B08\u9B0F\u9B13\u9B1F\u9B23\u9EBD\u9EBE\u7E3B\u9E82\u9E87\u9E88\u9E8B\u9E92\u93D6\u9E9D\u9E9F\u9EDB\u9EDC\u9EDD\u9EE0\u9EDF\u9EE2\u9EE9\u9EE7\u9EE5\u9EEA\u9EEF\u9F22\u9F2C\u9F2F\u9F39\u9F37\u9F3D\u9F3E\u9F44"],
["f840", "\u9CE3", 62],
["f880", "\u9D22", 32],
["f940", "\u9D43", 62],
["f980", "\u9D82", 32],
["fa40", "\u9DA3", 62],
["fa80", "\u9DE2", 32],
["fb40", "\u9E03", 27, "\u9E24\u9E27\u9E2E\u9E30\u9E34\u9E3B\u9E3C\u9E40\u9E4D\u9E50\u9E52\u9E53\u9E54\u9E56\u9E59\u9E5D\u9E5F\u9E60\u9E61\u9E62\u9E65\u9E6E\u9E6F\u9E72\u9E74", 9, "\u9E80"],
["fb80", "\u9E81\u9E83\u9E84\u9E85\u9E86\u9E89\u9E8A\u9E8C", 5, "\u9E94", 8, "\u9E9E\u9EA0", 5, "\u9EA7\u9EA8\u9EA9\u9EAA"],
["fc40", "\u9EAB", 8, "\u9EB5\u9EB6\u9EB7\u9EB9\u9EBA\u9EBC\u9EBF", 4, "\u9EC5\u9EC6\u9EC7\u9EC8\u9ECA\u9ECB\u9ECC\u9ED0\u9ED2\u9ED3\u9ED5\u9ED6\u9ED7\u9ED9\u9EDA\u9EDE\u9EE1\u9EE3\u9EE4\u9EE6\u9EE8\u9EEB\u9EEC\u9EED\u9EEE\u9EF0", 8, "\u9EFA\u9EFD\u9EFF", 6],
["fc80", "\u9F06", 4, "\u9F0C\u9F0F\u9F11\u9F12\u9F14\u9F15\u9F16\u9F18\u9F1A", 5, "\u9F21\u9F23", 8, "\u9F2D\u9F2E\u9F30\u9F31"],
["fd40", "\u9F32", 4, "\u9F38\u9F3A\u9F3C\u9F3F", 4, "\u9F45", 10, "\u9F52", 38],
["fd80", "\u9F79", 5, "\u9F81\u9F82\u9F8D", 11, "\u9F9C\u9F9D\u9F9E\u9FA1", 4, "\uF92C\uF979\uF995\uF9E7\uF9F1"],
["fe40", "\uFA0C\uFA0D\uFA0E\uFA0F\uFA11\uFA13\uFA14\uFA18\uFA1F\uFA20\uFA21\uFA23\uFA24\uFA27\uFA28\uFA29"]
];
}
});
// node_modules/iconv-lite/encodings/tables/gbk-added.json
var require_gbk_added = __commonJS({
"node_modules/iconv-lite/encodings/tables/gbk-added.json"(exports2, module2) {
module2.exports = [
["a140", "\uE4C6", 62],
["a180", "\uE505", 32],
["a240", "\uE526", 62],
["a280", "\uE565", 32],
["a2ab", "\uE766", 5],
["a2e3", "\u20AC\uE76D"],
["a2ef", "\uE76E\uE76F"],
["a2fd", "\uE770\uE771"],
["a340", "\uE586", 62],
["a380", "\uE5C5", 31, "\u3000"],
["a440", "\uE5E6", 62],
["a480", "\uE625", 32],
["a4f4", "\uE772", 10],
["a540", "\uE646", 62],
["a580", "\uE685", 32],
["a5f7", "\uE77D", 7],
["a640", "\uE6A6", 62],
["a680", "\uE6E5", 32],
["a6b9", "\uE785", 7],
["a6d9", "\uE78D", 6],
["a6ec", "\uE794\uE795"],
["a6f3", "\uE796"],
["a6f6", "\uE797", 8],
["a740", "\uE706", 62],
["a780", "\uE745", 32],
["a7c2", "\uE7A0", 14],
["a7f2", "\uE7AF", 12],
["a896", "\uE7BC", 10],
["a8bc", "\u1E3F"],
["a8bf", "\u01F9"],
["a8c1", "\uE7C9\uE7CA\uE7CB\uE7CC"],
["a8ea", "\uE7CD", 20],
["a958", "\uE7E2"],
["a95b", "\uE7E3"],
["a95d", "\uE7E4\uE7E5\uE7E6"],
["a989", "\u303E\u2FF0", 11],
["a997", "\uE7F4", 12],
["a9f0", "\uE801", 14],
["aaa1", "\uE000", 93],
["aba1", "\uE05E", 93],
["aca1", "\uE0BC", 93],
["ada1", "\uE11A", 93],
["aea1", "\uE178", 93],
["afa1", "\uE1D6", 93],
["d7fa", "\uE810", 4],
["f8a1", "\uE234", 93],
["f9a1", "\uE292", 93],
["faa1", "\uE2F0", 93],
["fba1", "\uE34E", 93],
["fca1", "\uE3AC", 93],
["fda1", "\uE40A", 93],
["fe50", "\u2E81\uE816\uE817\uE818\u2E84\u3473\u3447\u2E88\u2E8B\uE81E\u359E\u361A\u360E\u2E8C\u2E97\u396E\u3918\uE826\u39CF\u39DF\u3A73\u39D0\uE82B\uE82C\u3B4E\u3C6E\u3CE0\u2EA7\uE831\uE832\u2EAA\u4056\u415F\u2EAE\u4337\u2EB3\u2EB6\u2EB7\uE83B\u43B1\u43AC\u2EBB\u43DD\u44D6\u4661\u464C\uE843"],
["fe80", "\u4723\u4729\u477C\u478D\u2ECA\u4947\u497A\u497D\u4982\u4983\u4985\u4986\u499F\u499B\u49B7\u49B6\uE854\uE855\u4CA3\u4C9F\u4CA0\u4CA1\u4C77\u4CA2\u4D13", 6, "\u4DAE\uE864\uE468", 93],
["8135f437", "\uE7C7"]
];
}
});
// node_modules/iconv-lite/encodings/tables/gb18030-ranges.json
var require_gb18030_ranges = __commonJS({
"node_modules/iconv-lite/encodings/tables/gb18030-ranges.json"(exports2, module2) {
module2.exports = { uChars: [128, 165, 169, 178, 184, 216, 226, 235, 238, 244, 248, 251, 253, 258, 276, 284, 300, 325, 329, 334, 364, 463, 465, 467, 469, 471, 473, 475, 477, 506, 594, 610, 712, 716, 730, 930, 938, 962, 970, 1026, 1104, 1106, 8209, 8215, 8218, 8222, 8231, 8241, 8244, 8246, 8252, 8365, 8452, 8454, 8458, 8471, 8482, 8556, 8570, 8596, 8602, 8713, 8720, 8722, 8726, 8731, 8737, 8740, 8742, 8748, 8751, 8760, 8766, 8777, 8781, 8787, 8802, 8808, 8816, 8854, 8858, 8870, 8896, 8979, 9322, 9372, 9548, 9588, 9616, 9622, 9634, 9652, 9662, 9672, 9676, 9680, 9702, 9735, 9738, 9793, 9795, 11906, 11909, 11913, 11917, 11928, 11944, 11947, 11951, 11956, 11960, 11964, 11979, 12284, 12292, 12312, 12319, 12330, 12351, 12436, 12447, 12535, 12543, 12586, 12842, 12850, 12964, 13200, 13215, 13218, 13253, 13263, 13267, 13270, 13384, 13428, 13727, 13839, 13851, 14617, 14703, 14801, 14816, 14964, 15183, 15471, 15585, 16471, 16736, 17208, 17325, 17330, 17374, 17623, 17997, 18018, 18212, 18218, 18301, 18318, 18760, 18811, 18814, 18820, 18823, 18844, 18848, 18872, 19576, 19620, 19738, 19887, 40870, 59244, 59336, 59367, 59413, 59417, 59423, 59431, 59437, 59443, 59452, 59460, 59478, 59493, 63789, 63866, 63894, 63976, 63986, 64016, 64018, 64021, 64025, 64034, 64037, 64042, 65074, 65093, 65107, 65112, 65127, 65132, 65375, 65510, 65536], gbChars: [0, 36, 38, 45, 50, 81, 89, 95, 96, 100, 103, 104, 105, 109, 126, 133, 148, 172, 175, 179, 208, 306, 307, 308, 309, 310, 311, 312, 313, 341, 428, 443, 544, 545, 558, 741, 742, 749, 750, 805, 819, 820, 7922, 7924, 7925, 7927, 7934, 7943, 7944, 7945, 7950, 8062, 8148, 8149, 8152, 8164, 8174, 8236, 8240, 8262, 8264, 8374, 8380, 8381, 8384, 8388, 8390, 8392, 8393, 8394, 8396, 8401, 8406, 8416, 8419, 8424, 8437, 8439, 8445, 8482, 8485, 8496, 8521, 8603, 8936, 8946, 9046, 9050, 9063, 9066, 9076, 9092, 9100, 9108, 9111, 9113, 9131, 9162, 9164, 9218, 9219, 11329, 11331, 11334, 11336, 11346, 11361, 11363, 11366, 11370, 11372, 11375, 11389, 11682, 11686, 11687, 11692, 11694, 11714, 11716, 11723, 11725, 11730, 11736, 11982, 11989, 12102, 12336, 12348, 12350, 12384, 12393, 12395, 12397, 12510, 12553, 12851, 12962, 12973, 13738, 13823, 13919, 13933, 14080, 14298, 14585, 14698, 15583, 15847, 16318, 16434, 16438, 16481, 16729, 17102, 17122, 17315, 17320, 17402, 17418, 17859, 17909, 17911, 17915, 17916, 17936, 17939, 17961, 18664, 18703, 18814, 18962, 19043, 33469, 33470, 33471, 33484, 33485, 33490, 33497, 33501, 33505, 33513, 33520, 33536, 33550, 37845, 37921, 37948, 38029, 38038, 38064, 38065, 38066, 38069, 38075, 38076, 38078, 39108, 39109, 39113, 39114, 39115, 39116, 39265, 39394, 189e3] };
}
});
// node_modules/iconv-lite/encodings/tables/cp949.json
var require_cp949 = __commonJS({
"node_modules/iconv-lite/encodings/tables/cp949.json"(exports2, module2) {
module2.exports = [
["0", "\0", 127],
["8141", "\uAC02\uAC03\uAC05\uAC06\uAC0B", 4, "\uAC18\uAC1E\uAC1F\uAC21\uAC22\uAC23\uAC25", 6, "\uAC2E\uAC32\uAC33\uAC34"],
["8161", "\uAC35\uAC36\uAC37\uAC3A\uAC3B\uAC3D\uAC3E\uAC3F\uAC41", 9, "\uAC4C\uAC4E", 5, "\uAC55"],
["8181", "\uAC56\uAC57\uAC59\uAC5A\uAC5B\uAC5D", 18, "\uAC72\uAC73\uAC75\uAC76\uAC79\uAC7B", 4, "\uAC82\uAC87\uAC88\uAC8D\uAC8E\uAC8F\uAC91\uAC92\uAC93\uAC95", 6, "\uAC9E\uACA2", 5, "\uACAB\uACAD\uACAE\uACB1", 6, "\uACBA\uACBE\uACBF\uACC0\uACC2\uACC3\uACC5\uACC6\uACC7\uACC9\uACCA\uACCB\uACCD", 7, "\uACD6\uACD8", 7, "\uACE2\uACE3\uACE5\uACE6\uACE9\uACEB\uACED\uACEE\uACF2\uACF4\uACF7", 4, "\uACFE\uACFF\uAD01\uAD02\uAD03\uAD05\uAD07", 4, "\uAD0E\uAD10\uAD12\uAD13"],
["8241", "\uAD14\uAD15\uAD16\uAD17\uAD19\uAD1A\uAD1B\uAD1D\uAD1E\uAD1F\uAD21", 7, "\uAD2A\uAD2B\uAD2E", 5],
["8261", "\uAD36\uAD37\uAD39\uAD3A\uAD3B\uAD3D", 6, "\uAD46\uAD48\uAD4A", 5, "\uAD51\uAD52\uAD53\uAD55\uAD56\uAD57"],
["8281", "\uAD59", 7, "\uAD62\uAD64", 7, "\uAD6E\uAD6F\uAD71\uAD72\uAD77\uAD78\uAD79\uAD7A\uAD7E\uAD80\uAD83", 4, "\uAD8A\uAD8B\uAD8D\uAD8E\uAD8F\uAD91", 10, "\uAD9E", 5, "\uADA5", 17, "\uADB8", 7, "\uADC2\uADC3\uADC5\uADC6\uADC7\uADC9", 6, "\uADD2\uADD4", 7, "\uADDD\uADDE\uADDF\uADE1\uADE2\uADE3\uADE5", 18],
["8341", "\uADFA\uADFB\uADFD\uADFE\uAE02", 5, "\uAE0A\uAE0C\uAE0E", 5, "\uAE15", 7],
["8361", "\uAE1D", 18, "\uAE32\uAE33\uAE35\uAE36\uAE39\uAE3B\uAE3C"],
["8381", "\uAE3D\uAE3E\uAE3F\uAE42\uAE44\uAE47\uAE48\uAE49\uAE4B\uAE4F\uAE51\uAE52\uAE53\uAE55\uAE57", 4, "\uAE5E\uAE62\uAE63\uAE64\uAE66\uAE67\uAE6A\uAE6B\uAE6D\uAE6E\uAE6F\uAE71", 6, "\uAE7A\uAE7E", 5, "\uAE86", 5, "\uAE8D", 46, "\uAEBF\uAEC1\uAEC2\uAEC3\uAEC5", 6, "\uAECE\uAED2", 5, "\uAEDA\uAEDB\uAEDD", 8],
["8441", "\uAEE6\uAEE7\uAEE9\uAEEA\uAEEC\uAEEE", 5, "\uAEF5\uAEF6\uAEF7\uAEF9\uAEFA\uAEFB\uAEFD", 8],
["8461", "\uAF06\uAF09\uAF0A\uAF0B\uAF0C\uAF0E\uAF0F\uAF11", 18],
["8481", "\uAF24", 7, "\uAF2E\uAF2F\uAF31\uAF33\uAF35", 6, "\uAF3E\uAF40\uAF44\uAF45\uAF46\uAF47\uAF4A", 5, "\uAF51", 10, "\uAF5E", 5, "\uAF66", 18, "\uAF7A", 5, "\uAF81\uAF82\uAF83\uAF85\uAF86\uAF87\uAF89", 6, "\uAF92\uAF93\uAF94\uAF96", 5, "\uAF9D", 26, "\uAFBA\uAFBB\uAFBD\uAFBE"],
["8541", "\uAFBF\uAFC1", 5, "\uAFCA\uAFCC\uAFCF", 4, "\uAFD5", 6, "\uAFDD", 4],
["8561", "\uAFE2", 5, "\uAFEA", 5, "\uAFF2\uAFF3\uAFF5\uAFF6\uAFF7\uAFF9", 6, "\uB002\uB003"],
["8581", "\uB005", 6, "\uB00D\uB00E\uB00F\uB011\uB012\uB013\uB015", 6, "\uB01E", 9, "\uB029", 26, "\uB046\uB047\uB049\uB04B\uB04D\uB04F\uB050\uB051\uB052\uB056\uB058\uB05A\uB05B\uB05C\uB05E", 29, "\uB07E\uB07F\uB081\uB082\uB083\uB085", 6, "\uB08E\uB090\uB092", 5, "\uB09B\uB09D\uB09E\uB0A3\uB0A4"],
["8641", "\uB0A5\uB0A6\uB0A7\uB0AA\uB0B0\uB0B2\uB0B6\uB0B7\uB0B9\uB0BA\uB0BB\uB0BD", 6, "\uB0C6\uB0CA", 5, "\uB0D2"],
["8661", "\uB0D3\uB0D5\uB0D6\uB0D7\uB0D9", 6, "\uB0E1\uB0E2\uB0E3\uB0E4\uB0E6", 10],
["8681", "\uB0F1", 22, "\uB10A\uB10D\uB10E\uB10F\uB111\uB114\uB115\uB116\uB117\uB11A\uB11E", 4, "\uB126\uB127\uB129\uB12A\uB12B\uB12D", 6, "\uB136\uB13A", 5, "\uB142\uB143\uB145\uB146\uB147\uB149", 6, "\uB152\uB153\uB156\uB157\uB159\uB15A\uB15B\uB15D\uB15E\uB15F\uB161", 22, "\uB17A\uB17B\uB17D\uB17E\uB17F\uB181\uB183", 4, "\uB18A\uB18C\uB18E\uB18F\uB190\uB191\uB195\uB196\uB197\uB199\uB19A\uB19B\uB19D"],
["8741", "\uB19E", 9, "\uB1A9", 15],
["8761", "\uB1B9", 18, "\uB1CD\uB1CE\uB1CF\uB1D1\uB1D2\uB1D3\uB1D5"],
["8781", "\uB1D6", 5, "\uB1DE\uB1E0", 7, "\uB1EA\uB1EB\uB1ED\uB1EE\uB1EF\uB1F1", 7, "\uB1FA\uB1FC\uB1FE", 5, "\uB206\uB207\uB209\uB20A\uB20D", 6, "\uB216\uB218\uB21A", 5, "\uB221", 18, "\uB235", 6, "\uB23D", 26, "\uB259\uB25A\uB25B\uB25D\uB25E\uB25F\uB261", 6, "\uB26A", 4],
["8841", "\uB26F", 4, "\uB276", 5, "\uB27D", 6, "\uB286\uB287\uB288\uB28A", 4],
["8861", "\uB28F\uB292\uB293\uB295\uB296\uB297\uB29B", 4, "\uB2A2\uB2A4\uB2A7\uB2A8\uB2A9\uB2AB\uB2AD\uB2AE\uB2AF\uB2B1\uB2B2\uB2B3\uB2B5\uB2B6\uB2B7"],
["8881", "\uB2B8", 15, "\uB2CA\uB2CB\uB2CD\uB2CE\uB2CF\uB2D1\uB2D3", 4, "\uB2DA\uB2DC\uB2DE\uB2DF\uB2E0\uB2E1\uB2E3\uB2E7\uB2E9\uB2EA\uB2F0\uB2F1\uB2F2\uB2F6\uB2FC\uB2FD\uB2FE\uB302\uB303\uB305\uB306\uB307\uB309", 6, "\uB312\uB316", 5, "\uB31D", 54, "\uB357\uB359\uB35A\uB35D\uB360\uB361\uB362\uB363"],
["8941", "\uB366\uB368\uB36A\uB36C\uB36D\uB36F\uB372\uB373\uB375\uB376\uB377\uB379", 6, "\uB382\uB386", 5, "\uB38D"],
["8961", "\uB38E\uB38F\uB391\uB392\uB393\uB395", 10, "\uB3A2", 5, "\uB3A9\uB3AA\uB3AB\uB3AD"],
["8981", "\uB3AE", 21, "\uB3C6\uB3C7\uB3C9\uB3CA\uB3CD\uB3CF\uB3D1\uB3D2\uB3D3\uB3D6\uB3D8\uB3DA\uB3DC\uB3DE\uB3DF\uB3E1\uB3E2\uB3E3\uB3E5\uB3E6\uB3E7\uB3E9", 18, "\uB3FD", 18, "\uB411", 6, "\uB419\uB41A\uB41B\uB41D\uB41E\uB41F\uB421", 6, "\uB42A\uB42C", 7, "\uB435", 15],
["8a41", "\uB445", 10, "\uB452\uB453\uB455\uB456\uB457\uB459", 6, "\uB462\uB464\uB466"],
["8a61", "\uB467", 4, "\uB46D", 18, "\uB481\uB482"],
["8a81", "\uB483", 4, "\uB489", 19, "\uB49E", 5, "\uB4A5\uB4A6\uB4A7\uB4A9\uB4AA\uB4AB\uB4AD", 7, "\uB4B6\uB4B8\uB4BA", 5, "\uB4C1\uB4C2\uB4C3\uB4C5\uB4C6\uB4C7\uB4C9", 6, "\uB4D1\uB4D2\uB4D3\uB4D4\uB4D6", 5, "\uB4DE\uB4DF\uB4E1\uB4E2\uB4E5\uB4E7", 4, "\uB4EE\uB4F0\uB4F2", 5, "\uB4F9", 26, "\uB516\uB517\uB519\uB51A\uB51D"],
["8b41", "\uB51E", 5, "\uB526\uB52B", 4, "\uB532\uB533\uB535\uB536\uB537\uB539", 6, "\uB542\uB546"],
["8b61", "\uB547\uB548\uB549\uB54A\uB54E\uB54F\uB551\uB552\uB553\uB555", 6, "\uB55E\uB562", 8],
["8b81", "\uB56B", 52, "\uB5A2\uB5A3\uB5A5\uB5A6\uB5A7\uB5A9\uB5AC\uB5AD\uB5AE\uB5AF\uB5B2\uB5B6", 4, "\uB5BE\uB5BF\uB5C1\uB5C2\uB5C3\uB5C5", 6, "\uB5CE\uB5D2", 5, "\uB5D9", 18, "\uB5ED", 18],
["8c41", "\uB600", 15, "\uB612\uB613\uB615\uB616\uB617\uB619", 4],
["8c61", "\uB61E", 6, "\uB626", 5, "\uB62D", 6, "\uB635", 5],
["8c81", "\uB63B", 12, "\uB649", 26, "\uB665\uB666\uB667\uB669", 50, "\uB69E\uB69F\uB6A1\uB6A2\uB6A3\uB6A5", 5, "\uB6AD\uB6AE\uB6AF\uB6B0\uB6B2", 16],
["8d41", "\uB6C3", 16, "\uB6D5", 8],
["8d61", "\uB6DE", 17, "\uB6F1\uB6F2\uB6F3\uB6F5\uB6F6\uB6F7\uB6F9\uB6FA"],
["8d81", "\uB6FB", 4, "\uB702\uB703\uB704\uB706", 33, "\uB72A\uB72B\uB72D\uB72E\uB731", 6, "\uB73A\uB73C", 7, "\uB745\uB746\uB747\uB749\uB74A\uB74B\uB74D", 6, "\uB756", 9, "\uB761\uB762\uB763\uB765\uB766\uB767\uB769", 6, "\uB772\uB774\uB776", 5, "\uB77E\uB77F\uB781\uB782\uB783\uB785", 6, "\uB78E\uB793\uB794\uB795\uB79A\uB79B\uB79D\uB79E"],
["8e41", "\uB79F\uB7A1", 6, "\uB7AA\uB7AE", 5, "\uB7B6\uB7B7\uB7B9", 8],
["8e61", "\uB7C2", 4, "\uB7C8\uB7CA", 19],
["8e81", "\uB7DE", 13, "\uB7EE\uB7EF\uB7F1\uB7F2\uB7F3\uB7F5", 6, "\uB7FE\uB802", 4, "\uB80A\uB80B\uB80D\uB80E\uB80F\uB811", 6, "\uB81A\uB81C\uB81E", 5, "\uB826\uB827\uB829\uB82A\uB82B\uB82D", 6, "\uB836\uB83A", 5, "\uB841\uB842\uB843\uB845", 11, "\uB852\uB854", 7, "\uB85E\uB85F\uB861\uB862\uB863\uB865", 6, "\uB86E\uB870\uB872", 5, "\uB879\uB87A\uB87B\uB87D", 7],
["8f41", "\uB885", 7, "\uB88E", 17],
["8f61", "\uB8A0", 7, "\uB8A9", 6, "\uB8B1\uB8B2\uB8B3\uB8B5\uB8B6\uB8B7\uB8B9", 4],
["8f81", "\uB8BE\uB8BF\uB8C2\uB8C4\uB8C6", 5, "\uB8CD\uB8CE\uB8CF\uB8D1\uB8D2\uB8D3\uB8D5", 7, "\uB8DE\uB8E0\uB8E2", 5, "\uB8EA\uB8EB\uB8ED\uB8EE\uB8EF\uB8F1", 6, "\uB8FA\uB8FC\uB8FE", 5, "\uB905", 18, "\uB919", 6, "\uB921", 26, "\uB93E\uB93F\uB941\uB942\uB943\uB945", 6, "\uB94D\uB94E\uB950\uB952", 5],
["9041", "\uB95A\uB95B\uB95D\uB95E\uB95F\uB961", 6, "\uB96A\uB96C\uB96E", 5, "\uB976\uB977\uB979\uB97A\uB97B\uB97D"],
["9061", "\uB97E", 5, "\uB986\uB988\uB98B\uB98C\uB98F", 15],
["9081", "\uB99F", 12, "\uB9AE\uB9AF\uB9B1\uB9B2\uB9B3\uB9B5", 6, "\uB9BE\uB9C0\uB9C2", 5, "\uB9CA\uB9CB\uB9CD\uB9D3", 4, "\uB9DA\uB9DC\uB9DF\uB9E0\uB9E2\uB9E6\uB9E7\uB9E9\uB9EA\uB9EB\uB9ED", 6, "\uB9F6\uB9FB", 4, "\uBA02", 5, "\uBA09", 11, "\uBA16", 33, "\uBA3A\uBA3B\uBA3D\uBA3E\uBA3F\uBA41\uBA43\uBA44\uBA45\uBA46"],
["9141", "\uBA47\uBA4A\uBA4C\uBA4F\uBA50\uBA51\uBA52\uBA56\uBA57\uBA59\uBA5A\uBA5B\uBA5D", 6, "\uBA66\uBA6A", 5],
["9161", "\uBA72\uBA73\uBA75\uBA76\uBA77\uBA79", 9, "\uBA86\uBA88\uBA89\uBA8A\uBA8B\uBA8D", 5],
["9181", "\uBA93", 20, "\uBAAA\uBAAD\uBAAE\uBAAF\uBAB1\uBAB3", 4, "\uBABA\uBABC\uBABE", 5, "\uBAC5\uBAC6\uBAC7\uBAC9", 14, "\uBADA", 33, "\uBAFD\uBAFE\uBAFF\uBB01\uBB02\uBB03\uBB05", 7, "\uBB0E\uBB10\uBB12", 5, "\uBB19\uBB1A\uBB1B\uBB1D\uBB1E\uBB1F\uBB21", 6],
["9241", "\uBB28\uBB2A\uBB2C", 7, "\uBB37\uBB39\uBB3A\uBB3F", 4, "\uBB46\uBB48\uBB4A\uBB4B\uBB4C\uBB4E\uBB51\uBB52"],
["9261", "\uBB53\uBB55\uBB56\uBB57\uBB59", 7, "\uBB62\uBB64", 7, "\uBB6D", 4],
["9281", "\uBB72", 21, "\uBB89\uBB8A\uBB8B\uBB8D\uBB8E\uBB8F\uBB91", 18, "\uBBA5\uBBA6\uBBA7\uBBA9\uBBAA\uBBAB\uBBAD", 6, "\uBBB5\uBBB6\uBBB8", 7, "\uBBC1\uBBC2\uBBC3\uBBC5\uBBC6\uBBC7\uBBC9", 6, "\uBBD1\uBBD2\uBBD4", 35, "\uBBFA\uBBFB\uBBFD\uBBFE\uBC01"],
["9341", "\uBC03", 4, "\uBC0A\uBC0E\uBC10\uBC12\uBC13\uBC19\uBC1A\uBC20\uBC21\uBC22\uBC23\uBC26\uBC28\uBC2A\uBC2B\uBC2C\uBC2E\uBC2F\uBC32\uBC33\uBC35"],
["9361", "\uBC36\uBC37\uBC39", 6, "\uBC42\uBC46\uBC47\uBC48\uBC4A\uBC4B\uBC4E\uBC4F\uBC51", 8],
["9381", "\uBC5A\uBC5B\uBC5C\uBC5E", 37, "\uBC86\uBC87\uBC89\uBC8A\uBC8D\uBC8F", 4, "\uBC96\uBC98\uBC9B", 4, "\uBCA2\uBCA3\uBCA5\uBCA6\uBCA9", 6, "\uBCB2\uBCB6", 5, "\uBCBE\uBCBF\uBCC1\uBCC2\uBCC3\uBCC5", 7, "\uBCCE\uBCD2\uBCD3\uBCD4\uBCD6\uBCD7\uBCD9\uBCDA\uBCDB\uBCDD", 22, "\uBCF7\uBCF9\uBCFA\uBCFB\uBCFD"],
["9441", "\uBCFE", 5, "\uBD06\uBD08\uBD0A", 5, "\uBD11\uBD12\uBD13\uBD15", 8],
["9461", "\uBD1E", 5, "\uBD25", 6, "\uBD2D", 12],
["9481", "\uBD3A", 5, "\uBD41", 6, "\uBD4A\uBD4B\uBD4D\uBD4E\uBD4F\uBD51", 6, "\uBD5A", 9, "\uBD65\uBD66\uBD67\uBD69", 22, "\uBD82\uBD83\uBD85\uBD86\uBD8B", 4, "\uBD92\uBD94\uBD96\uBD97\uBD98\uBD9B\uBD9D", 6, "\uBDA5", 10, "\uBDB1", 6, "\uBDB9", 24],
["9541", "\uBDD2\uBDD3\uBDD6\uBDD7\uBDD9\uBDDA\uBDDB\uBDDD", 11, "\uBDEA", 5, "\uBDF1"],
["9561", "\uBDF2\uBDF3\uBDF5\uBDF6\uBDF7\uBDF9", 6, "\uBE01\uBE02\uBE04\uBE06", 5, "\uBE0E\uBE0F\uBE11\uBE12\uBE13"],
["9581", "\uBE15", 6, "\uBE1E\uBE20", 35, "\uBE46\uBE47\uBE49\uBE4A\uBE4B\uBE4D\uBE4F", 4, "\uBE56\uBE58\uBE5C\uBE5D\uBE5E\uBE5F\uBE62\uBE63\uBE65\uBE66\uBE67\uBE69\uBE6B", 4, "\uBE72\uBE76", 4, "\uBE7E\uBE7F\uBE81\uBE82\uBE83\uBE85", 6, "\uBE8E\uBE92", 5, "\uBE9A", 13, "\uBEA9", 14],
["9641", "\uBEB8", 23, "\uBED2\uBED3"],
["9661", "\uBED5\uBED6\uBED9", 6, "\uBEE1\uBEE2\uBEE6", 5, "\uBEED", 8],
["9681", "\uBEF6", 10, "\uBF02", 5, "\uBF0A", 13, "\uBF1A\uBF1E", 33, "\uBF42\uBF43\uBF45\uBF46\uBF47\uBF49", 6, "\uBF52\uBF53\uBF54\uBF56", 44],
["9741", "\uBF83", 16, "\uBF95", 8],
["9761", "\uBF9E", 17, "\uBFB1", 7],
["9781", "\uBFB9", 11, "\uBFC6", 5, "\uBFCE\uBFCF\uBFD1\uBFD2\uBFD3\uBFD5", 6, "\uBFDD\uBFDE\uBFE0\uBFE2", 89, "\uC03D\uC03E\uC03F"],
["9841", "\uC040", 16, "\uC052", 5, "\uC059\uC05A\uC05B"],
["9861", "\uC05D\uC05E\uC05F\uC061", 6, "\uC06A", 15],
["9881", "\uC07A", 21, "\uC092\uC093\uC095\uC096\uC097\uC099", 6, "\uC0A2\uC0A4\uC0A6", 5, "\uC0AE\uC0B1\uC0B2\uC0B7", 4, "\uC0BE\uC0C2\uC0C3\uC0C4\uC0C6\uC0C7\uC0CA\uC0CB\uC0CD\uC0CE\uC0CF\uC0D1", 6, "\uC0DA\uC0DE", 5, "\uC0E6\uC0E7\uC0E9\uC0EA\uC0EB\uC0ED", 6, "\uC0F6\uC0F8\uC0FA", 5, "\uC101\uC102\uC103\uC105\uC106\uC107\uC109", 6, "\uC111\uC112\uC113\uC114\uC116", 5, "\uC121\uC122\uC125\uC128\uC129\uC12A\uC12B\uC12E"],
["9941", "\uC132\uC133\uC134\uC135\uC137\uC13A\uC13B\uC13D\uC13E\uC13F\uC141", 6, "\uC14A\uC14E", 5, "\uC156\uC157"],
["9961", "\uC159\uC15A\uC15B\uC15D", 6, "\uC166\uC16A", 5, "\uC171\uC172\uC173\uC175\uC176\uC177\uC179\uC17A\uC17B"],
["9981", "\uC17C", 8, "\uC186", 5, "\uC18F\uC191\uC192\uC193\uC195\uC197", 4, "\uC19E\uC1A0\uC1A2\uC1A3\uC1A4\uC1A6\uC1A7\uC1AA\uC1AB\uC1AD\uC1AE\uC1AF\uC1B1", 11, "\uC1BE", 5, "\uC1C5\uC1C6\uC1C7\uC1C9\uC1CA\uC1CB\uC1CD", 6, "\uC1D5\uC1D6\uC1D9", 6, "\uC1E1\uC1E2\uC1E3\uC1E5\uC1E6\uC1E7\uC1E9", 6, "\uC1F2\uC1F4", 7, "\uC1FE\uC1FF\uC201\uC202\uC203\uC205", 6, "\uC20E\uC210\uC212", 5, "\uC21A\uC21B\uC21D\uC21E\uC221\uC222\uC223"],
["9a41", "\uC224\uC225\uC226\uC227\uC22A\uC22C\uC22E\uC230\uC233\uC235", 16],
["9a61", "\uC246\uC247\uC249", 6, "\uC252\uC253\uC255\uC256\uC257\uC259", 6, "\uC261\uC262\uC263\uC264\uC266"],
["9a81", "\uC267", 4, "\uC26E\uC26F\uC271\uC272\uC273\uC275", 6, "\uC27E\uC280\uC282", 5, "\uC28A", 5, "\uC291", 6, "\uC299\uC29A\uC29C\uC29E", 5, "\uC2A6\uC2A7\uC2A9\uC2AA\uC2AB\uC2AE", 5, "\uC2B6\uC2B8\uC2BA", 33, "\uC2DE\uC2DF\uC2E1\uC2E2\uC2E5", 5, "\uC2EE\uC2F0\uC2F2\uC2F3\uC2F4\uC2F5\uC2F7\uC2FA\uC2FD\uC2FE\uC2FF\uC301", 6, "\uC30A\uC30B\uC30E\uC30F"],
["9b41", "\uC310\uC311\uC312\uC316\uC317\uC319\uC31A\uC31B\uC31D", 6, "\uC326\uC327\uC32A", 8],
["9b61", "\uC333", 17, "\uC346", 7],
["9b81", "\uC34E", 25, "\uC36A\uC36B\uC36D\uC36E\uC36F\uC371\uC373", 4, "\uC37A\uC37B\uC37E", 5, "\uC385\uC386\uC387\uC389\uC38A\uC38B\uC38D", 50, "\uC3C1", 22, "\uC3DA"],
["9c41", "\uC3DB\uC3DD\uC3DE\uC3E1\uC3E3", 4, "\uC3EA\uC3EB\uC3EC\uC3EE", 5, "\uC3F6\uC3F7\uC3F9", 5],
["9c61", "\uC3FF", 8, "\uC409", 6, "\uC411", 9],
["9c81", "\uC41B", 8, "\uC425", 6, "\uC42D\uC42E\uC42F\uC431\uC432\uC433\uC435", 6, "\uC43E", 9, "\uC449", 26, "\uC466\uC467\uC469\uC46A\uC46B\uC46D", 6, "\uC476\uC477\uC478\uC47A", 5, "\uC481", 18, "\uC495", 6, "\uC49D", 12],
["9d41", "\uC4AA", 13, "\uC4B9\uC4BA\uC4BB\uC4BD", 8],
["9d61", "\uC4C6", 25],
["9d81", "\uC4E0", 8, "\uC4EA", 5, "\uC4F2\uC4F3\uC4F5\uC4F6\uC4F7\uC4F9\uC4FB\uC4FC\uC4FD\uC4FE\uC502", 9, "\uC50D\uC50E\uC50F\uC511\uC512\uC513\uC515", 6, "\uC51D", 10, "\uC52A\uC52B\uC52D\uC52E\uC52F\uC531", 6, "\uC53A\uC53C\uC53E", 5, "\uC546\uC547\uC54B\uC54F\uC550\uC551\uC552\uC556\uC55A\uC55B\uC55C\uC55F\uC562\uC563\uC565\uC566\uC567\uC569", 6, "\uC572\uC576", 5, "\uC57E\uC57F\uC581\uC582\uC583\uC585\uC586\uC588\uC589\uC58A\uC58B\uC58E\uC590\uC592\uC593\uC594"],
["9e41", "\uC596\uC599\uC59A\uC59B\uC59D\uC59E\uC59F\uC5A1", 7, "\uC5AA", 9, "\uC5B6"],
["9e61", "\uC5B7\uC5BA\uC5BF", 4, "\uC5CB\uC5CD\uC5CF\uC5D2\uC5D3\uC5D5\uC5D6\uC5D7\uC5D9", 6, "\uC5E2\uC5E4\uC5E6\uC5E7"],
["9e81", "\uC5E8\uC5E9\uC5EA\uC5EB\uC5EF\uC5F1\uC5F2\uC5F3\uC5F5\uC5F8\uC5F9\uC5FA\uC5FB\uC602\uC603\uC604\uC609\uC60A\uC60B\uC60D\uC60E\uC60F\uC611", 6, "\uC61A\uC61D", 6, "\uC626\uC627\uC629\uC62A\uC62B\uC62F\uC631\uC632\uC636\uC638\uC63A\uC63C\uC63D\uC63E\uC63F\uC642\uC643\uC645\uC646\uC647\uC649", 6, "\uC652\uC656", 5, "\uC65E\uC65F\uC661", 10, "\uC66D\uC66E\uC670\uC672", 5, "\uC67A\uC67B\uC67D\uC67E\uC67F\uC681", 6, "\uC68A\uC68C\uC68E", 5, "\uC696\uC697\uC699\uC69A\uC69B\uC69D", 6, "\uC6A6"],
["9f41", "\uC6A8\uC6AA", 5, "\uC6B2\uC6B3\uC6B5\uC6B6\uC6B7\uC6BB", 4, "\uC6C2\uC6C4\uC6C6", 5, "\uC6CE"],
["9f61", "\uC6CF\uC6D1\uC6D2\uC6D3\uC6D5", 6, "\uC6DE\uC6DF\uC6E2", 5, "\uC6EA\uC6EB\uC6ED\uC6EE\uC6EF\uC6F1\uC6F2"],
["9f81", "\uC6F3", 4, "\uC6FA\uC6FB\uC6FC\uC6FE", 5, "\uC706\uC707\uC709\uC70A\uC70B\uC70D", 6, "\uC716\uC718\uC71A", 5, "\uC722\uC723\uC725\uC726\uC727\uC729", 6, "\uC732\uC734\uC736\uC738\uC739\uC73A\uC73B\uC73E\uC73F\uC741\uC742\uC743\uC745", 4, "\uC74B\uC74E\uC750\uC759\uC75A\uC75B\uC75D\uC75E\uC75F\uC761", 6, "\uC769\uC76A\uC76C", 7, "\uC776\uC777\uC779\uC77A\uC77B\uC77F\uC780\uC781\uC782\uC786\uC78B\uC78C\uC78D\uC78F\uC792\uC793\uC795\uC799\uC79B", 4, "\uC7A2\uC7A7", 4, "\uC7AE\uC7AF\uC7B1\uC7B2\uC7B3\uC7B5\uC7B6\uC7B7"],
["a041", "\uC7B8\uC7B9\uC7BA\uC7BB\uC7BE\uC7C2", 5, "\uC7CA\uC7CB\uC7CD\uC7CF\uC7D1", 6, "\uC7D9\uC7DA\uC7DB\uC7DC"],
["a061", "\uC7DE", 5, "\uC7E5\uC7E6\uC7E7\uC7E9\uC7EA\uC7EB\uC7ED", 13],
["a081", "\uC7FB", 4, "\uC802\uC803\uC805\uC806\uC807\uC809\uC80B", 4, "\uC812\uC814\uC817", 4, "\uC81E\uC81F\uC821\uC822\uC823\uC825", 6, "\uC82E\uC830\uC832", 5, "\uC839\uC83A\uC83B\uC83D\uC83E\uC83F\uC841", 6, "\uC84A\uC84B\uC84E", 5, "\uC855", 26, "\uC872\uC873\uC875\uC876\uC877\uC879\uC87B", 4, "\uC882\uC884\uC888\uC889\uC88A\uC88E", 5, "\uC895", 7, "\uC89E\uC8A0\uC8A2\uC8A3\uC8A4"],
["a141", "\uC8A5\uC8A6\uC8A7\uC8A9", 18, "\uC8BE\uC8BF\uC8C0\uC8C1"],
["a161", "\uC8C2\uC8C3\uC8C5\uC8C6\uC8C7\uC8C9\uC8CA\uC8CB\uC8CD", 6, "\uC8D6\uC8D8\uC8DA", 5, "\uC8E2\uC8E3\uC8E5"],
["a181", "\uC8E6", 14, "\uC8F6", 5, "\uC8FE\uC8FF\uC901\uC902\uC903\uC907", 4, "\uC90E\u3000\u3001\u3002\xB7\u2025\u2026\xA8\u3003\xAD\u2015\u2225\uFF3C\u223C\u2018\u2019\u201C\u201D\u3014\u3015\u3008", 9, "\xB1\xD7\xF7\u2260\u2264\u2265\u221E\u2234\xB0\u2032\u2033\u2103\u212B\uFFE0\uFFE1\uFFE5\u2642\u2640\u2220\u22A5\u2312\u2202\u2207\u2261\u2252\xA7\u203B\u2606\u2605\u25CB\u25CF\u25CE\u25C7\u25C6\u25A1\u25A0\u25B3\u25B2\u25BD\u25BC\u2192\u2190\u2191\u2193\u2194\u3013\u226A\u226B\u221A\u223D\u221D\u2235\u222B\u222C\u2208\u220B\u2286\u2287\u2282\u2283\u222A\u2229\u2227\u2228\uFFE2"],
["a241", "\uC910\uC912", 5, "\uC919", 18],
["a261", "\uC92D", 6, "\uC935", 18],
["a281", "\uC948", 7, "\uC952\uC953\uC955\uC956\uC957\uC959", 6, "\uC962\uC964", 7, "\uC96D\uC96E\uC96F\u21D2\u21D4\u2200\u2203\xB4\uFF5E\u02C7\u02D8\u02DD\u02DA\u02D9\xB8\u02DB\xA1\xBF\u02D0\u222E\u2211\u220F\xA4\u2109\u2030\u25C1\u25C0\u25B7\u25B6\u2664\u2660\u2661\u2665\u2667\u2663\u2299\u25C8\u25A3\u25D0\u25D1\u2592\u25A4\u25A5\u25A8\u25A7\u25A6\u25A9\u2668\u260F\u260E\u261C\u261E\xB6\u2020\u2021\u2195\u2197\u2199\u2196\u2198\u266D\u2669\u266A\u266C\u327F\u321C\u2116\u33C7\u2122\u33C2\u33D8\u2121\u20AC\xAE"],
["a341", "\uC971\uC972\uC973\uC975", 6, "\uC97D", 10, "\uC98A\uC98B\uC98D\uC98E\uC98F"],
["a361", "\uC991", 6, "\uC99A\uC99C\uC99E", 16],
["a381", "\uC9AF", 16, "\uC9C2\uC9C3\uC9C5\uC9C6\uC9C9\uC9CB", 4, "\uC9D2\uC9D4\uC9D7\uC9D8\uC9DB\uFF01", 58, "\uFFE6\uFF3D", 32, "\uFFE3"],
["a441", "\uC9DE\uC9DF\uC9E1\uC9E3\uC9E5\uC9E6\uC9E8\uC9E9\uC9EA\uC9EB\uC9EE\uC9F2", 5, "\uC9FA\uC9FB\uC9FD\uC9FE\uC9FF\uCA01\uCA02\uCA03\uCA04"],
["a461", "\uCA05\uCA06\uCA07\uCA0A\uCA0E", 5, "\uCA15\uCA16\uCA17\uCA19", 12],
["a481", "\uCA26\uCA27\uCA28\uCA2A", 28, "\u3131", 93],
["a541", "\uCA47", 4, "\uCA4E\uCA4F\uCA51\uCA52\uCA53\uCA55", 6, "\uCA5E\uCA62", 5, "\uCA69\uCA6A"],
["a561", "\uCA6B", 17, "\uCA7E", 5, "\uCA85\uCA86"],
["a581", "\uCA87", 16, "\uCA99", 14, "\u2170", 9],
["a5b0", "\u2160", 9],
["a5c1", "\u0391", 16, "\u03A3", 6],
["a5e1", "\u03B1", 16, "\u03C3", 6],
["a641", "\uCAA8", 19, "\uCABE\uCABF\uCAC1\uCAC2\uCAC3\uCAC5"],
["a661", "\uCAC6", 5, "\uCACE\uCAD0\uCAD2\uCAD4\uCAD5\uCAD6\uCAD7\uCADA", 5, "\uCAE1", 6],
["a681", "\uCAE8\uCAE9\uCAEA\uCAEB\uCAED", 6, "\uCAF5", 18, "\uCB09\uCB0A\u2500\u2502\u250C\u2510\u2518\u2514\u251C\u252C\u2524\u2534\u253C\u2501\u2503\u250F\u2513\u251B\u2517\u2523\u2533\u252B\u253B\u254B\u2520\u252F\u2528\u2537\u253F\u251D\u2530\u2525\u2538\u2542\u2512\u2511\u251A\u2519\u2516\u2515\u250E\u250D\u251E\u251F\u2521\u2522\u2526\u2527\u2529\u252A\u252D\u252E\u2531\u2532\u2535\u2536\u2539\u253A\u253D\u253E\u2540\u2541\u2543", 7],
["a741", "\uCB0B", 4, "\uCB11\uCB12\uCB13\uCB15\uCB16\uCB17\uCB19", 6, "\uCB22", 7],
["a761", "\uCB2A", 22, "\uCB42\uCB43\uCB44"],
["a781", "\uCB45\uCB46\uCB47\uCB4A\uCB4B\uCB4D\uCB4E\uCB4F\uCB51", 6, "\uCB5A\uCB5B\uCB5C\uCB5E", 5, "\uCB65", 7, "\u3395\u3396\u3397\u2113\u3398\u33C4\u33A3\u33A4\u33A5\u33A6\u3399", 9, "\u33CA\u338D\u338E\u338F\u33CF\u3388\u3389\u33C8\u33A7\u33A8\u33B0", 9, "\u3380", 4, "\u33BA", 5, "\u3390", 4, "\u2126\u33C0\u33C1\u338A\u338B\u338C\u33D6\u33C5\u33AD\u33AE\u33AF\u33DB\u33A9\u33AA\u33AB\u33AC\u33DD\u33D0\u33D3\u33C3\u33C9\u33DC\u33C6"],
["a841", "\uCB6D", 10, "\uCB7A", 14],
["a861", "\uCB89", 18, "\uCB9D", 6],
["a881", "\uCBA4", 19, "\uCBB9", 11, "\xC6\xD0\xAA\u0126"],
["a8a6", "\u0132"],
["a8a8", "\u013F\u0141\xD8\u0152\xBA\xDE\u0166\u014A"],
["a8b1", "\u3260", 27, "\u24D0", 25, "\u2460", 14, "\xBD\u2153\u2154\xBC\xBE\u215B\u215C\u215D\u215E"],
["a941", "\uCBC5", 14, "\uCBD5", 10],
["a961", "\uCBE0\uCBE1\uCBE2\uCBE3\uCBE5\uCBE6\uCBE8\uCBEA", 18],
["a981", "\uCBFD", 14, "\uCC0E\uCC0F\uCC11\uCC12\uCC13\uCC15", 6, "\uCC1E\uCC1F\uCC20\uCC23\uCC24\xE6\u0111\xF0\u0127\u0131\u0133\u0138\u0140\u0142\xF8\u0153\xDF\xFE\u0167\u014B\u0149\u3200", 27, "\u249C", 25, "\u2474", 14, "\xB9\xB2\xB3\u2074\u207F\u2081\u2082\u2083\u2084"],
["aa41", "\uCC25\uCC26\uCC2A\uCC2B\uCC2D\uCC2F\uCC31", 6, "\uCC3A\uCC3F", 4, "\uCC46\uCC47\uCC49\uCC4A\uCC4B\uCC4D\uCC4E"],
["aa61", "\uCC4F", 4, "\uCC56\uCC5A", 5, "\uCC61\uCC62\uCC63\uCC65\uCC67\uCC69", 6, "\uCC71\uCC72"],
["aa81", "\uCC73\uCC74\uCC76", 29, "\u3041", 82],
["ab41", "\uCC94\uCC95\uCC96\uCC97\uCC9A\uCC9B\uCC9D\uCC9E\uCC9F\uCCA1", 6, "\uCCAA\uCCAE", 5, "\uCCB6\uCCB7\uCCB9"],
["ab61", "\uCCBA\uCCBB\uCCBD", 6, "\uCCC6\uCCC8\uCCCA", 5, "\uCCD1\uCCD2\uCCD3\uCCD5", 5],
["ab81", "\uCCDB", 8, "\uCCE5", 6, "\uCCED\uCCEE\uCCEF\uCCF1", 12, "\u30A1", 85],
["ac41", "\uCCFE\uCCFF\uCD00\uCD02", 5, "\uCD0A\uCD0B\uCD0D\uCD0E\uCD0F\uCD11", 6, "\uCD1A\uCD1C\uCD1E\uCD1F\uCD20"],
["ac61", "\uCD21\uCD22\uCD23\uCD25\uCD26\uCD27\uCD29\uCD2A\uCD2B\uCD2D", 11, "\uCD3A", 4],
["ac81", "\uCD3F", 28, "\uCD5D\uCD5E\uCD5F\u0410", 5, "\u0401\u0416", 25],
["acd1", "\u0430", 5, "\u0451\u0436", 25],
["ad41", "\uCD61\uCD62\uCD63\uCD65", 6, "\uCD6E\uCD70\uCD72", 5, "\uCD79", 7],
["ad61", "\uCD81", 6, "\uCD89", 10, "\uCD96\uCD97\uCD99\uCD9A\uCD9B\uCD9D\uCD9E\uCD9F"],
["ad81", "\uCDA0\uCDA1\uCDA2\uCDA3\uCDA6\uCDA8\uCDAA", 5, "\uCDB1", 18, "\uCDC5"],
["ae41", "\uCDC6", 5, "\uCDCD\uCDCE\uCDCF\uCDD1", 16],
["ae61", "\uCDE2", 5, "\uCDE9\uCDEA\uCDEB\uCDED\uCDEE\uCDEF\uCDF1", 6, "\uCDFA\uCDFC\uCDFE", 4],
["ae81", "\uCE03\uCE05\uCE06\uCE07\uCE09\uCE0A\uCE0B\uCE0D", 6, "\uCE15\uCE16\uCE17\uCE18\uCE1A", 5, "\uCE22\uCE23\uCE25\uCE26\uCE27\uCE29\uCE2A\uCE2B"],
["af41", "\uCE2C\uCE2D\uCE2E\uCE2F\uCE32\uCE34\uCE36", 19],
["af61", "\uCE4A", 13, "\uCE5A\uCE5B\uCE5D\uCE5E\uCE62", 5, "\uCE6A\uCE6C"],
["af81", "\uCE6E", 5, "\uCE76\uCE77\uCE79\uCE7A\uCE7B\uCE7D", 6, "\uCE86\uCE88\uCE8A", 5, "\uCE92\uCE93\uCE95\uCE96\uCE97\uCE99"],
["b041", "\uCE9A", 5, "\uCEA2\uCEA6", 5, "\uCEAE", 12],
["b061", "\uCEBB", 5, "\uCEC2", 19],
["b081", "\uCED6", 13, "\uCEE6\uCEE7\uCEE9\uCEEA\uCEED", 6, "\uCEF6\uCEFA", 5, "\uAC00\uAC01\uAC04\uAC07\uAC08\uAC09\uAC0A\uAC10", 7, "\uAC19", 4, "\uAC20\uAC24\uAC2C\uAC2D\uAC2F\uAC30\uAC31\uAC38\uAC39\uAC3C\uAC40\uAC4B\uAC4D\uAC54\uAC58\uAC5C\uAC70\uAC71\uAC74\uAC77\uAC78\uAC7A\uAC80\uAC81\uAC83\uAC84\uAC85\uAC86\uAC89\uAC8A\uAC8B\uAC8C\uAC90\uAC94\uAC9C\uAC9D\uAC9F\uACA0\uACA1\uACA8\uACA9\uACAA\uACAC\uACAF\uACB0\uACB8\uACB9\uACBB\uACBC\uACBD\uACC1\uACC4\uACC8\uACCC\uACD5\uACD7\uACE0\uACE1\uACE4\uACE7\uACE8\uACEA\uACEC\uACEF\uACF0\uACF1\uACF3\uACF5\uACF6\uACFC\uACFD\uAD00\uAD04\uAD06"],
["b141", "\uCF02\uCF03\uCF05\uCF06\uCF07\uCF09", 6, "\uCF12\uCF14\uCF16", 5, "\uCF1D\uCF1E\uCF1F\uCF21\uCF22\uCF23"],
["b161", "\uCF25", 6, "\uCF2E\uCF32", 5, "\uCF39", 11],
["b181", "\uCF45", 14, "\uCF56\uCF57\uCF59\uCF5A\uCF5B\uCF5D", 6, "\uCF66\uCF68\uCF6A\uCF6B\uCF6C\uAD0C\uAD0D\uAD0F\uAD11\uAD18\uAD1C\uAD20\uAD29\uAD2C\uAD2D\uAD34\uAD35\uAD38\uAD3C\uAD44\uAD45\uAD47\uAD49\uAD50\uAD54\uAD58\uAD61\uAD63\uAD6C\uAD6D\uAD70\uAD73\uAD74\uAD75\uAD76\uAD7B\uAD7C\uAD7D\uAD7F\uAD81\uAD82\uAD88\uAD89\uAD8C\uAD90\uAD9C\uAD9D\uADA4\uADB7\uADC0\uADC1\uADC4\uADC8\uADD0\uADD1\uADD3\uADDC\uADE0\uADE4\uADF8\uADF9\uADFC\uADFF\uAE00\uAE01\uAE08\uAE09\uAE0B\uAE0D\uAE14\uAE30\uAE31\uAE34\uAE37\uAE38\uAE3A\uAE40\uAE41\uAE43\uAE45\uAE46\uAE4A\uAE4C\uAE4D\uAE4E\uAE50\uAE54\uAE56\uAE5C\uAE5D\uAE5F\uAE60\uAE61\uAE65\uAE68\uAE69\uAE6C\uAE70\uAE78"],
["b241", "\uCF6D\uCF6E\uCF6F\uCF72\uCF73\uCF75\uCF76\uCF77\uCF79", 6, "\uCF81\uCF82\uCF83\uCF84\uCF86", 5, "\uCF8D"],
["b261", "\uCF8E", 18, "\uCFA2", 5, "\uCFA9"],
["b281", "\uCFAA", 5, "\uCFB1", 18, "\uCFC5", 6, "\uAE79\uAE7B\uAE7C\uAE7D\uAE84\uAE85\uAE8C\uAEBC\uAEBD\uAEBE\uAEC0\uAEC4\uAECC\uAECD\uAECF\uAED0\uAED1\uAED8\uAED9\uAEDC\uAEE8\uAEEB\uAEED\uAEF4\uAEF8\uAEFC\uAF07\uAF08\uAF0D\uAF10\uAF2C\uAF2D\uAF30\uAF32\uAF34\uAF3C\uAF3D\uAF3F\uAF41\uAF42\uAF43\uAF48\uAF49\uAF50\uAF5C\uAF5D\uAF64\uAF65\uAF79\uAF80\uAF84\uAF88\uAF90\uAF91\uAF95\uAF9C\uAFB8\uAFB9\uAFBC\uAFC0\uAFC7\uAFC8\uAFC9\uAFCB\uAFCD\uAFCE\uAFD4\uAFDC\uAFE8\uAFE9\uAFF0\uAFF1\uAFF4\uAFF8\uB000\uB001\uB004\uB00C\uB010\uB014\uB01C\uB01D\uB028\uB044\uB045\uB048\uB04A\uB04C\uB04E\uB053\uB054\uB055\uB057\uB059"],
["b341", "\uCFCC", 19, "\uCFE2\uCFE3\uCFE5\uCFE6\uCFE7\uCFE9"],
["b361", "\uCFEA", 5, "\uCFF2\uCFF4\uCFF6", 5, "\uCFFD\uCFFE\uCFFF\uD001\uD002\uD003\uD005", 5],
["b381", "\uD00B", 5, "\uD012", 5, "\uD019", 19, "\uB05D\uB07C\uB07D\uB080\uB084\uB08C\uB08D\uB08F\uB091\uB098\uB099\uB09A\uB09C\uB09F\uB0A0\uB0A1\uB0A2\uB0A8\uB0A9\uB0AB", 4, "\uB0B1\uB0B3\uB0B4\uB0B5\uB0B8\uB0BC\uB0C4\uB0C5\uB0C7\uB0C8\uB0C9\uB0D0\uB0D1\uB0D4\uB0D8\uB0E0\uB0E5\uB108\uB109\uB10B\uB10C\uB110\uB112\uB113\uB118\uB119\uB11B\uB11C\uB11D\uB123\uB124\uB125\uB128\uB12C\uB134\uB135\uB137\uB138\uB139\uB140\uB141\uB144\uB148\uB150\uB151\uB154\uB155\uB158\uB15C\uB160\uB178\uB179\uB17C\uB180\uB182\uB188\uB189\uB18B\uB18D\uB192\uB193\uB194\uB198\uB19C\uB1A8\uB1CC\uB1D0\uB1D4\uB1DC\uB1DD"],
["b441", "\uD02E", 5, "\uD036\uD037\uD039\uD03A\uD03B\uD03D", 6, "\uD046\uD048\uD04A", 5],
["b461", "\uD051\uD052\uD053\uD055\uD056\uD057\uD059", 6, "\uD061", 10, "\uD06E\uD06F"],
["b481", "\uD071\uD072\uD073\uD075", 6, "\uD07E\uD07F\uD080\uD082", 18, "\uB1DF\uB1E8\uB1E9\uB1EC\uB1F0\uB1F9\uB1FB\uB1FD\uB204\uB205\uB208\uB20B\uB20C\uB214\uB215\uB217\uB219\uB220\uB234\uB23C\uB258\uB25C\uB260\uB268\uB269\uB274\uB275\uB27C\uB284\uB285\uB289\uB290\uB291\uB294\uB298\uB299\uB29A\uB2A0\uB2A1\uB2A3\uB2A5\uB2A6\uB2AA\uB2AC\uB2B0\uB2B4\uB2C8\uB2C9\uB2CC\uB2D0\uB2D2\uB2D8\uB2D9\uB2DB\uB2DD\uB2E2\uB2E4\uB2E5\uB2E6\uB2E8\uB2EB", 4, "\uB2F3\uB2F4\uB2F5\uB2F7", 4, "\uB2FF\uB300\uB301\uB304\uB308\uB310\uB311\uB313\uB314\uB315\uB31C\uB354\uB355\uB356\uB358\uB35B\uB35C\uB35E\uB35F\uB364\uB365"],
["b541", "\uD095", 14, "\uD0A6\uD0A7\uD0A9\uD0AA\uD0AB\uD0AD", 5],
["b561", "\uD0B3\uD0B6\uD0B8\uD0BA", 5, "\uD0C2\uD0C3\uD0C5\uD0C6\uD0C7\uD0CA", 5, "\uD0D2\uD0D6", 4],
["b581", "\uD0DB\uD0DE\uD0DF\uD0E1\uD0E2\uD0E3\uD0E5", 6, "\uD0EE\uD0F2", 5, "\uD0F9", 11, "\uB367\uB369\uB36B\uB36E\uB370\uB371\uB374\uB378\uB380\uB381\uB383\uB384\uB385\uB38C\uB390\uB394\uB3A0\uB3A1\uB3A8\uB3AC\uB3C4\uB3C5\uB3C8\uB3CB\uB3CC\uB3CE\uB3D0\uB3D4\uB3D5\uB3D7\uB3D9\uB3DB\uB3DD\uB3E0\uB3E4\uB3E8\uB3FC\uB410\uB418\uB41C\uB420\uB428\uB429\uB42B\uB434\uB450\uB451\uB454\uB458\uB460\uB461\uB463\uB465\uB46C\uB480\uB488\uB49D\uB4A4\uB4A8\uB4AC\uB4B5\uB4B7\uB4B9\uB4C0\uB4C4\uB4C8\uB4D0\uB4D5\uB4DC\uB4DD\uB4E0\uB4E3\uB4E4\uB4E6\uB4EC\uB4ED\uB4EF\uB4F1\uB4F8\uB514\uB515\uB518\uB51B\uB51C\uB524\uB525\uB527\uB528\uB529\uB52A\uB530\uB531\uB534\uB538"],
["b641", "\uD105", 7, "\uD10E", 17],
["b661", "\uD120", 15, "\uD132\uD133\uD135\uD136\uD137\uD139\uD13B\uD13C\uD13D\uD13E"],
["b681", "\uD13F\uD142\uD146", 5, "\uD14E\uD14F\uD151\uD152\uD153\uD155", 6, "\uD15E\uD160\uD162", 5, "\uD169\uD16A\uD16B\uD16D\uB540\uB541\uB543\uB544\uB545\uB54B\uB54C\uB54D\uB550\uB554\uB55C\uB55D\uB55F\uB560\uB561\uB5A0\uB5A1\uB5A4\uB5A8\uB5AA\uB5AB\uB5B0\uB5B1\uB5B3\uB5B4\uB5B5\uB5BB\uB5BC\uB5BD\uB5C0\uB5C4\uB5CC\uB5CD\uB5CF\uB5D0\uB5D1\uB5D8\uB5EC\uB610\uB611\uB614\uB618\uB625\uB62C\uB634\uB648\uB664\uB668\uB69C\uB69D\uB6A0\uB6A4\uB6AB\uB6AC\uB6B1\uB6D4\uB6F0\uB6F4\uB6F8\uB700\uB701\uB705\uB728\uB729\uB72C\uB72F\uB730\uB738\uB739\uB73B\uB744\uB748\uB74C\uB754\uB755\uB760\uB764\uB768\uB770\uB771\uB773\uB775\uB77C\uB77D\uB780\uB784\uB78C\uB78D\uB78F\uB790\uB791\uB792\uB796\uB797"],
["b741", "\uD16E", 13, "\uD17D", 6, "\uD185\uD186\uD187\uD189\uD18A"],
["b761", "\uD18B", 20, "\uD1A2\uD1A3\uD1A5\uD1A6\uD1A7"],
["b781", "\uD1A9", 6, "\uD1B2\uD1B4\uD1B6\uD1B7\uD1B8\uD1B9\uD1BB\uD1BD\uD1BE\uD1BF\uD1C1", 14, "\uB798\uB799\uB79C\uB7A0\uB7A8\uB7A9\uB7AB\uB7AC\uB7AD\uB7B4\uB7B5\uB7B8\uB7C7\uB7C9\uB7EC\uB7ED\uB7F0\uB7F4\uB7FC\uB7FD\uB7FF\uB800\uB801\uB807\uB808\uB809\uB80C\uB810\uB818\uB819\uB81B\uB81D\uB824\uB825\uB828\uB82C\uB834\uB835\uB837\uB838\uB839\uB840\uB844\uB851\uB853\uB85C\uB85D\uB860\uB864\uB86C\uB86D\uB86F\uB871\uB878\uB87C\uB88D\uB8A8\uB8B0\uB8B4\uB8B8\uB8C0\uB8C1\uB8C3\uB8C5\uB8CC\uB8D0\uB8D4\uB8DD\uB8DF\uB8E1\uB8E8\uB8E9\uB8EC\uB8F0\uB8F8\uB8F9\uB8FB\uB8FD\uB904\uB918\uB920\uB93C\uB93D\uB940\uB944\uB94C\uB94F\uB951\uB958\uB959\uB95C\uB960\uB968\uB969"],
["b841", "\uD1D0", 7, "\uD1D9", 17],
["b861", "\uD1EB", 8, "\uD1F5\uD1F6\uD1F7\uD1F9", 13],
["b881", "\uD208\uD20A", 5, "\uD211", 24, "\uB96B\uB96D\uB974\uB975\uB978\uB97C\uB984\uB985\uB987\uB989\uB98A\uB98D\uB98E\uB9AC\uB9AD\uB9B0\uB9B4\uB9BC\uB9BD\uB9BF\uB9C1\uB9C8\uB9C9\uB9CC\uB9CE", 4, "\uB9D8\uB9D9\uB9DB\uB9DD\uB9DE\uB9E1\uB9E3\uB9E4\uB9E5\uB9E8\uB9EC\uB9F4\uB9F5\uB9F7\uB9F8\uB9F9\uB9FA\uBA00\uBA01\uBA08\uBA15\uBA38\uBA39\uBA3C\uBA40\uBA42\uBA48\uBA49\uBA4B\uBA4D\uBA4E\uBA53\uBA54\uBA55\uBA58\uBA5C\uBA64\uBA65\uBA67\uBA68\uBA69\uBA70\uBA71\uBA74\uBA78\uBA83\uBA84\uBA85\uBA87\uBA8C\uBAA8\uBAA9\uBAAB\uBAAC\uBAB0\uBAB2\uBAB8\uBAB9\uBABB\uBABD\uBAC4\uBAC8\uBAD8\uBAD9\uBAFC"],
["b941", "\uD22A\uD22B\uD22E\uD22F\uD231\uD232\uD233\uD235", 6, "\uD23E\uD240\uD242", 5, "\uD249\uD24A\uD24B\uD24C"],
["b961", "\uD24D", 14, "\uD25D", 6, "\uD265\uD266\uD267\uD268"],
["b981", "\uD269", 22, "\uD282\uD283\uD285\uD286\uD287\uD289\uD28A\uD28B\uD28C\uBB00\uBB04\uBB0D\uBB0F\uBB11\uBB18\uBB1C\uBB20\uBB29\uBB2B\uBB34\uBB35\uBB36\uBB38\uBB3B\uBB3C\uBB3D\uBB3E\uBB44\uBB45\uBB47\uBB49\uBB4D\uBB4F\uBB50\uBB54\uBB58\uBB61\uBB63\uBB6C\uBB88\uBB8C\uBB90\uBBA4\uBBA8\uBBAC\uBBB4\uBBB7\uBBC0\uBBC4\uBBC8\uBBD0\uBBD3\uBBF8\uBBF9\uBBFC\uBBFF\uBC00\uBC02\uBC08\uBC09\uBC0B\uBC0C\uBC0D\uBC0F\uBC11\uBC14", 4, "\uBC1B", 4, "\uBC24\uBC25\uBC27\uBC29\uBC2D\uBC30\uBC31\uBC34\uBC38\uBC40\uBC41\uBC43\uBC44\uBC45\uBC49\uBC4C\uBC4D\uBC50\uBC5D\uBC84\uBC85\uBC88\uBC8B\uBC8C\uBC8E\uBC94\uBC95\uBC97"],
["ba41", "\uD28D\uD28E\uD28F\uD292\uD293\uD294\uD296", 5, "\uD29D\uD29E\uD29F\uD2A1\uD2A2\uD2A3\uD2A5", 6, "\uD2AD"],
["ba61", "\uD2AE\uD2AF\uD2B0\uD2B2", 5, "\uD2BA\uD2BB\uD2BD\uD2BE\uD2C1\uD2C3", 4, "\uD2CA\uD2CC", 5],
["ba81", "\uD2D2\uD2D3\uD2D5\uD2D6\uD2D7\uD2D9\uD2DA\uD2DB\uD2DD", 6, "\uD2E6", 9, "\uD2F2\uD2F3\uD2F5\uD2F6\uD2F7\uD2F9\uD2FA\uBC99\uBC9A\uBCA0\uBCA1\uBCA4\uBCA7\uBCA8\uBCB0\uBCB1\uBCB3\uBCB4\uBCB5\uBCBC\uBCBD\uBCC0\uBCC4\uBCCD\uBCCF\uBCD0\uBCD1\uBCD5\uBCD8\uBCDC\uBCF4\uBCF5\uBCF6\uBCF8\uBCFC\uBD04\uBD05\uBD07\uBD09\uBD10\uBD14\uBD24\uBD2C\uBD40\uBD48\uBD49\uBD4C\uBD50\uBD58\uBD59\uBD64\uBD68\uBD80\uBD81\uBD84\uBD87\uBD88\uBD89\uBD8A\uBD90\uBD91\uBD93\uBD95\uBD99\uBD9A\uBD9C\uBDA4\uBDB0\uBDB8\uBDD4\uBDD5\uBDD8\uBDDC\uBDE9\uBDF0\uBDF4\uBDF8\uBE00\uBE03\uBE05\uBE0C\uBE0D\uBE10\uBE14\uBE1C\uBE1D\uBE1F\uBE44\uBE45\uBE48\uBE4C\uBE4E\uBE54\uBE55\uBE57\uBE59\uBE5A\uBE5B\uBE60\uBE61\uBE64"],
["bb41", "\uD2FB", 4, "\uD302\uD304\uD306", 5, "\uD30F\uD311\uD312\uD313\uD315\uD317", 4, "\uD31E\uD322\uD323"],
["bb61", "\uD324\uD326\uD327\uD32A\uD32B\uD32D\uD32E\uD32F\uD331", 6, "\uD33A\uD33E", 5, "\uD346\uD347\uD348\uD349"],
["bb81", "\uD34A", 31, "\uBE68\uBE6A\uBE70\uBE71\uBE73\uBE74\uBE75\uBE7B\uBE7C\uBE7D\uBE80\uBE84\uBE8C\uBE8D\uBE8F\uBE90\uBE91\uBE98\uBE99\uBEA8\uBED0\uBED1\uBED4\uBED7\uBED8\uBEE0\uBEE3\uBEE4\uBEE5\uBEEC\uBF01\uBF08\uBF09\uBF18\uBF19\uBF1B\uBF1C\uBF1D\uBF40\uBF41\uBF44\uBF48\uBF50\uBF51\uBF55\uBF94\uBFB0\uBFC5\uBFCC\uBFCD\uBFD0\uBFD4\uBFDC\uBFDF\uBFE1\uC03C\uC051\uC058\uC05C\uC060\uC068\uC069\uC090\uC091\uC094\uC098\uC0A0\uC0A1\uC0A3\uC0A5\uC0AC\uC0AD\uC0AF\uC0B0\uC0B3\uC0B4\uC0B5\uC0B6\uC0BC\uC0BD\uC0BF\uC0C0\uC0C1\uC0C5\uC0C8\uC0C9\uC0CC\uC0D0\uC0D8\uC0D9\uC0DB\uC0DC\uC0DD\uC0E4"],
["bc41", "\uD36A", 17, "\uD37E\uD37F\uD381\uD382\uD383\uD385\uD386\uD387"],
["bc61", "\uD388\uD389\uD38A\uD38B\uD38E\uD392", 5, "\uD39A\uD39B\uD39D\uD39E\uD39F\uD3A1", 6, "\uD3AA\uD3AC\uD3AE"],
["bc81", "\uD3AF", 4, "\uD3B5\uD3B6\uD3B7\uD3B9\uD3BA\uD3BB\uD3BD", 6, "\uD3C6\uD3C7\uD3CA", 5, "\uD3D1", 5, "\uC0E5\uC0E8\uC0EC\uC0F4\uC0F5\uC0F7\uC0F9\uC100\uC104\uC108\uC110\uC115\uC11C", 4, "\uC123\uC124\uC126\uC127\uC12C\uC12D\uC12F\uC130\uC131\uC136\uC138\uC139\uC13C\uC140\uC148\uC149\uC14B\uC14C\uC14D\uC154\uC155\uC158\uC15C\uC164\uC165\uC167\uC168\uC169\uC170\uC174\uC178\uC185\uC18C\uC18D\uC18E\uC190\uC194\uC196\uC19C\uC19D\uC19F\uC1A1\uC1A5\uC1A8\uC1A9\uC1AC\uC1B0\uC1BD\uC1C4\uC1C8\uC1CC\uC1D4\uC1D7\uC1D8\uC1E0\uC1E4\uC1E8\uC1F0\uC1F1\uC1F3\uC1FC\uC1FD\uC200\uC204\uC20C\uC20D\uC20F\uC211\uC218\uC219\uC21C\uC21F\uC220\uC228\uC229\uC22B\uC22D"],
["bd41", "\uD3D7\uD3D9", 7, "\uD3E2\uD3E4", 7, "\uD3EE\uD3EF\uD3F1\uD3F2\uD3F3\uD3F5\uD3F6\uD3F7"],
["bd61", "\uD3F8\uD3F9\uD3FA\uD3FB\uD3FE\uD400\uD402", 5, "\uD409", 13],
["bd81", "\uD417", 5, "\uD41E", 25, "\uC22F\uC231\uC232\uC234\uC248\uC250\uC251\uC254\uC258\uC260\uC265\uC26C\uC26D\uC270\uC274\uC27C\uC27D\uC27F\uC281\uC288\uC289\uC290\uC298\uC29B\uC29D\uC2A4\uC2A5\uC2A8\uC2AC\uC2AD\uC2B4\uC2B5\uC2B7\uC2B9\uC2DC\uC2DD\uC2E0\uC2E3\uC2E4\uC2EB\uC2EC\uC2ED\uC2EF\uC2F1\uC2F6\uC2F8\uC2F9\uC2FB\uC2FC\uC300\uC308\uC309\uC30C\uC30D\uC313\uC314\uC315\uC318\uC31C\uC324\uC325\uC328\uC329\uC345\uC368\uC369\uC36C\uC370\uC372\uC378\uC379\uC37C\uC37D\uC384\uC388\uC38C\uC3C0\uC3D8\uC3D9\uC3DC\uC3DF\uC3E0\uC3E2\uC3E8\uC3E9\uC3ED\uC3F4\uC3F5\uC3F8\uC408\uC410\uC424\uC42C\uC430"],
["be41", "\uD438", 7, "\uD441\uD442\uD443\uD445", 14],
["be61", "\uD454", 7, "\uD45D\uD45E\uD45F\uD461\uD462\uD463\uD465", 7, "\uD46E\uD470\uD471\uD472"],
["be81", "\uD473", 4, "\uD47A\uD47B\uD47D\uD47E\uD481\uD483", 4, "\uD48A\uD48C\uD48E", 5, "\uD495", 8, "\uC434\uC43C\uC43D\uC448\uC464\uC465\uC468\uC46C\uC474\uC475\uC479\uC480\uC494\uC49C\uC4B8\uC4BC\uC4E9\uC4F0\uC4F1\uC4F4\uC4F8\uC4FA\uC4FF\uC500\uC501\uC50C\uC510\uC514\uC51C\uC528\uC529\uC52C\uC530\uC538\uC539\uC53B\uC53D\uC544\uC545\uC548\uC549\uC54A\uC54C\uC54D\uC54E\uC553\uC554\uC555\uC557\uC558\uC559\uC55D\uC55E\uC560\uC561\uC564\uC568\uC570\uC571\uC573\uC574\uC575\uC57C\uC57D\uC580\uC584\uC587\uC58C\uC58D\uC58F\uC591\uC595\uC597\uC598\uC59C\uC5A0\uC5A9\uC5B4\uC5B5\uC5B8\uC5B9\uC5BB\uC5BC\uC5BD\uC5BE\uC5C4", 6, "\uC5CC\uC5CE"],
["bf41", "\uD49E", 10, "\uD4AA", 14],
["bf61", "\uD4B9", 18, "\uD4CD\uD4CE\uD4CF\uD4D1\uD4D2\uD4D3\uD4D5"],
["bf81", "\uD4D6", 5, "\uD4DD\uD4DE\uD4E0", 7, "\uD4E9\uD4EA\uD4EB\uD4ED\uD4EE\uD4EF\uD4F1", 6, "\uD4F9\uD4FA\uD4FC\uC5D0\uC5D1\uC5D4\uC5D8\uC5E0\uC5E1\uC5E3\uC5E5\uC5EC\uC5ED\uC5EE\uC5F0\uC5F4\uC5F6\uC5F7\uC5FC", 5, "\uC605\uC606\uC607\uC608\uC60C\uC610\uC618\uC619\uC61B\uC61C\uC624\uC625\uC628\uC62C\uC62D\uC62E\uC630\uC633\uC634\uC635\uC637\uC639\uC63B\uC640\uC641\uC644\uC648\uC650\uC651\uC653\uC654\uC655\uC65C\uC65D\uC660\uC66C\uC66F\uC671\uC678\uC679\uC67C\uC680\uC688\uC689\uC68B\uC68D\uC694\uC695\uC698\uC69C\uC6A4\uC6A5\uC6A7\uC6A9\uC6B0\uC6B1\uC6B4\uC6B8\uC6B9\uC6BA\uC6C0\uC6C1\uC6C3\uC6C5\uC6CC\uC6CD\uC6D0\uC6D4\uC6DC\uC6DD\uC6E0\uC6E1\uC6E8"],
["c041", "\uD4FE", 5, "\uD505\uD506\uD507\uD509\uD50A\uD50B\uD50D", 6, "\uD516\uD518", 5],
["c061", "\uD51E", 25],
["c081", "\uD538\uD539\uD53A\uD53B\uD53E\uD53F\uD541\uD542\uD543\uD545", 6, "\uD54E\uD550\uD552", 5, "\uD55A\uD55B\uD55D\uD55E\uD55F\uD561\uD562\uD563\uC6E9\uC6EC\uC6F0\uC6F8\uC6F9\uC6FD\uC704\uC705\uC708\uC70C\uC714\uC715\uC717\uC719\uC720\uC721\uC724\uC728\uC730\uC731\uC733\uC735\uC737\uC73C\uC73D\uC740\uC744\uC74A\uC74C\uC74D\uC74F\uC751", 7, "\uC75C\uC760\uC768\uC76B\uC774\uC775\uC778\uC77C\uC77D\uC77E\uC783\uC784\uC785\uC787\uC788\uC789\uC78A\uC78E\uC790\uC791\uC794\uC796\uC797\uC798\uC79A\uC7A0\uC7A1\uC7A3\uC7A4\uC7A5\uC7A6\uC7AC\uC7AD\uC7B0\uC7B4\uC7BC\uC7BD\uC7BF\uC7C0\uC7C1\uC7C8\uC7C9\uC7CC\uC7CE\uC7D0\uC7D8\uC7DD\uC7E4\uC7E8\uC7EC\uC800\uC801\uC804\uC808\uC80A"],
["c141", "\uD564\uD566\uD567\uD56A\uD56C\uD56E", 5, "\uD576\uD577\uD579\uD57A\uD57B\uD57D", 6, "\uD586\uD58A\uD58B"],
["c161", "\uD58C\uD58D\uD58E\uD58F\uD591", 19, "\uD5A6\uD5A7"],
["c181", "\uD5A8", 31, "\uC810\uC811\uC813\uC815\uC816\uC81C\uC81D\uC820\uC824\uC82C\uC82D\uC82F\uC831\uC838\uC83C\uC840\uC848\uC849\uC84C\uC84D\uC854\uC870\uC871\uC874\uC878\uC87A\uC880\uC881\uC883\uC885\uC886\uC887\uC88B\uC88C\uC88D\uC894\uC89D\uC89F\uC8A1\uC8A8\uC8BC\uC8BD\uC8C4\uC8C8\uC8CC\uC8D4\uC8D5\uC8D7\uC8D9\uC8E0\uC8E1\uC8E4\uC8F5\uC8FC\uC8FD\uC900\uC904\uC905\uC906\uC90C\uC90D\uC90F\uC911\uC918\uC92C\uC934\uC950\uC951\uC954\uC958\uC960\uC961\uC963\uC96C\uC970\uC974\uC97C\uC988\uC989\uC98C\uC990\uC998\uC999\uC99B\uC99D\uC9C0\uC9C1\uC9C4\uC9C7\uC9C8\uC9CA\uC9D0\uC9D1\uC9D3"],
["c241", "\uD5CA\uD5CB\uD5CD\uD5CE\uD5CF\uD5D1\uD5D3", 4, "\uD5DA\uD5DC\uD5DE", 5, "\uD5E6\uD5E7\uD5E9\uD5EA\uD5EB\uD5ED\uD5EE"],
["c261", "\uD5EF", 4, "\uD5F6\uD5F8\uD5FA", 5, "\uD602\uD603\uD605\uD606\uD607\uD609", 6, "\uD612"],
["c281", "\uD616", 5, "\uD61D\uD61E\uD61F\uD621\uD622\uD623\uD625", 7, "\uD62E", 9, "\uD63A\uD63B\uC9D5\uC9D6\uC9D9\uC9DA\uC9DC\uC9DD\uC9E0\uC9E2\uC9E4\uC9E7\uC9EC\uC9ED\uC9EF\uC9F0\uC9F1\uC9F8\uC9F9\uC9FC\uCA00\uCA08\uCA09\uCA0B\uCA0C\uCA0D\uCA14\uCA18\uCA29\uCA4C\uCA4D\uCA50\uCA54\uCA5C\uCA5D\uCA5F\uCA60\uCA61\uCA68\uCA7D\uCA84\uCA98\uCABC\uCABD\uCAC0\uCAC4\uCACC\uCACD\uCACF\uCAD1\uCAD3\uCAD8\uCAD9\uCAE0\uCAEC\uCAF4\uCB08\uCB10\uCB14\uCB18\uCB20\uCB21\uCB41\uCB48\uCB49\uCB4C\uCB50\uCB58\uCB59\uCB5D\uCB64\uCB78\uCB79\uCB9C\uCBB8\uCBD4\uCBE4\uCBE7\uCBE9\uCC0C\uCC0D\uCC10\uCC14\uCC1C\uCC1D\uCC21\uCC22\uCC27\uCC28\uCC29\uCC2C\uCC2E\uCC30\uCC38\uCC39\uCC3B"],
["c341", "\uD63D\uD63E\uD63F\uD641\uD642\uD643\uD644\uD646\uD647\uD64A\uD64C\uD64E\uD64F\uD650\uD652\uD653\uD656\uD657\uD659\uD65A\uD65B\uD65D", 4],
["c361", "\uD662", 4, "\uD668\uD66A", 5, "\uD672\uD673\uD675", 11],
["c381", "\uD681\uD682\uD684\uD686", 5, "\uD68E\uD68F\uD691\uD692\uD693\uD695", 7, "\uD69E\uD6A0\uD6A2", 5, "\uD6A9\uD6AA\uCC3C\uCC3D\uCC3E\uCC44\uCC45\uCC48\uCC4C\uCC54\uCC55\uCC57\uCC58\uCC59\uCC60\uCC64\uCC66\uCC68\uCC70\uCC75\uCC98\uCC99\uCC9C\uCCA0\uCCA8\uCCA9\uCCAB\uCCAC\uCCAD\uCCB4\uCCB5\uCCB8\uCCBC\uCCC4\uCCC5\uCCC7\uCCC9\uCCD0\uCCD4\uCCE4\uCCEC\uCCF0\uCD01\uCD08\uCD09\uCD0C\uCD10\uCD18\uCD19\uCD1B\uCD1D\uCD24\uCD28\uCD2C\uCD39\uCD5C\uCD60\uCD64\uCD6C\uCD6D\uCD6F\uCD71\uCD78\uCD88\uCD94\uCD95\uCD98\uCD9C\uCDA4\uCDA5\uCDA7\uCDA9\uCDB0\uCDC4\uCDCC\uCDD0\uCDE8\uCDEC\uCDF0\uCDF8\uCDF9\uCDFB\uCDFD\uCE04\uCE08\uCE0C\uCE14\uCE19\uCE20\uCE21\uCE24\uCE28\uCE30\uCE31\uCE33\uCE35"],
["c441", "\uD6AB\uD6AD\uD6AE\uD6AF\uD6B1", 7, "\uD6BA\uD6BC", 7, "\uD6C6\uD6C7\uD6C9\uD6CA\uD6CB"],
["c461", "\uD6CD\uD6CE\uD6CF\uD6D0\uD6D2\uD6D3\uD6D5\uD6D6\uD6D8\uD6DA", 5, "\uD6E1\uD6E2\uD6E3\uD6E5\uD6E6\uD6E7\uD6E9", 4],
["c481", "\uD6EE\uD6EF\uD6F1\uD6F2\uD6F3\uD6F4\uD6F6", 5, "\uD6FE\uD6FF\uD701\uD702\uD703\uD705", 11, "\uD712\uD713\uD714\uCE58\uCE59\uCE5C\uCE5F\uCE60\uCE61\uCE68\uCE69\uCE6B\uCE6D\uCE74\uCE75\uCE78\uCE7C\uCE84\uCE85\uCE87\uCE89\uCE90\uCE91\uCE94\uCE98\uCEA0\uCEA1\uCEA3\uCEA4\uCEA5\uCEAC\uCEAD\uCEC1\uCEE4\uCEE5\uCEE8\uCEEB\uCEEC\uCEF4\uCEF5\uCEF7\uCEF8\uCEF9\uCF00\uCF01\uCF04\uCF08\uCF10\uCF11\uCF13\uCF15\uCF1C\uCF20\uCF24\uCF2C\uCF2D\uCF2F\uCF30\uCF31\uCF38\uCF54\uCF55\uCF58\uCF5C\uCF64\uCF65\uCF67\uCF69\uCF70\uCF71\uCF74\uCF78\uCF80\uCF85\uCF8C\uCFA1\uCFA8\uCFB0\uCFC4\uCFE0\uCFE1\uCFE4\uCFE8\uCFF0\uCFF1\uCFF3\uCFF5\uCFFC\uD000\uD004\uD011\uD018\uD02D\uD034\uD035\uD038\uD03C"],
["c541", "\uD715\uD716\uD717\uD71A\uD71B\uD71D\uD71E\uD71F\uD721", 6, "\uD72A\uD72C\uD72E", 5, "\uD736\uD737\uD739"],
["c561", "\uD73A\uD73B\uD73D", 6, "\uD745\uD746\uD748\uD74A", 5, "\uD752\uD753\uD755\uD75A", 4],
["c581", "\uD75F\uD762\uD764\uD766\uD767\uD768\uD76A\uD76B\uD76D\uD76E\uD76F\uD771\uD772\uD773\uD775", 6, "\uD77E\uD77F\uD780\uD782", 5, "\uD78A\uD78B\uD044\uD045\uD047\uD049\uD050\uD054\uD058\uD060\uD06C\uD06D\uD070\uD074\uD07C\uD07D\uD081\uD0A4\uD0A5\uD0A8\uD0AC\uD0B4\uD0B5\uD0B7\uD0B9\uD0C0\uD0C1\uD0C4\uD0C8\uD0C9\uD0D0\uD0D1\uD0D3\uD0D4\uD0D5\uD0DC\uD0DD\uD0E0\uD0E4\uD0EC\uD0ED\uD0EF\uD0F0\uD0F1\uD0F8\uD10D\uD130\uD131\uD134\uD138\uD13A\uD140\uD141\uD143\uD144\uD145\uD14C\uD14D\uD150\uD154\uD15C\uD15D\uD15F\uD161\uD168\uD16C\uD17C\uD184\uD188\uD1A0\uD1A1\uD1A4\uD1A8\uD1B0\uD1B1\uD1B3\uD1B5\uD1BA\uD1BC\uD1C0\uD1D8\uD1F4\uD1F8\uD207\uD209\uD210\uD22C\uD22D\uD230\uD234\uD23C\uD23D\uD23F\uD241\uD248\uD25C"],
["c641", "\uD78D\uD78E\uD78F\uD791", 6, "\uD79A\uD79C\uD79E", 5],
["c6a1", "\uD264\uD280\uD281\uD284\uD288\uD290\uD291\uD295\uD29C\uD2A0\uD2A4\uD2AC\uD2B1\uD2B8\uD2B9\uD2BC\uD2BF\uD2C0\uD2C2\uD2C8\uD2C9\uD2CB\uD2D4\uD2D8\uD2DC\uD2E4\uD2E5\uD2F0\uD2F1\uD2F4\uD2F8\uD300\uD301\uD303\uD305\uD30C\uD30D\uD30E\uD310\uD314\uD316\uD31C\uD31D\uD31F\uD320\uD321\uD325\uD328\uD329\uD32C\uD330\uD338\uD339\uD33B\uD33C\uD33D\uD344\uD345\uD37C\uD37D\uD380\uD384\uD38C\uD38D\uD38F\uD390\uD391\uD398\uD399\uD39C\uD3A0\uD3A8\uD3A9\uD3AB\uD3AD\uD3B4\uD3B8\uD3BC\uD3C4\uD3C5\uD3C8\uD3C9\uD3D0\uD3D8\uD3E1\uD3E3\uD3EC\uD3ED\uD3F0\uD3F4\uD3FC\uD3FD\uD3FF\uD401"],
["c7a1", "\uD408\uD41D\uD440\uD444\uD45C\uD460\uD464\uD46D\uD46F\uD478\uD479\uD47C\uD47F\uD480\uD482\uD488\uD489\uD48B\uD48D\uD494\uD4A9\uD4CC\uD4D0\uD4D4\uD4DC\uD4DF\uD4E8\uD4EC\uD4F0\uD4F8\uD4FB\uD4FD\uD504\uD508\uD50C\uD514\uD515\uD517\uD53C\uD53D\uD540\uD544\uD54C\uD54D\uD54F\uD551\uD558\uD559\uD55C\uD560\uD565\uD568\uD569\uD56B\uD56D\uD574\uD575\uD578\uD57C\uD584\uD585\uD587\uD588\uD589\uD590\uD5A5\uD5C8\uD5C9\uD5CC\uD5D0\uD5D2\uD5D8\uD5D9\uD5DB\uD5DD\uD5E4\uD5E5\uD5E8\uD5EC\uD5F4\uD5F5\uD5F7\uD5F9\uD600\uD601\uD604\uD608\uD610\uD611\uD613\uD614\uD615\uD61C\uD620"],
["c8a1", "\uD624\uD62D\uD638\uD639\uD63C\uD640\uD645\uD648\uD649\uD64B\uD64D\uD651\uD654\uD655\uD658\uD65C\uD667\uD669\uD670\uD671\uD674\uD683\uD685\uD68C\uD68D\uD690\uD694\uD69D\uD69F\uD6A1\uD6A8\uD6AC\uD6B0\uD6B9\uD6BB\uD6C4\uD6C5\uD6C8\uD6CC\uD6D1\uD6D4\uD6D7\uD6D9\uD6E0\uD6E4\uD6E8\uD6F0\uD6F5\uD6FC\uD6FD\uD700\uD704\uD711\uD718\uD719\uD71C\uD720\uD728\uD729\uD72B\uD72D\uD734\uD735\uD738\uD73C\uD744\uD747\uD749\uD750\uD751\uD754\uD756\uD757\uD758\uD759\uD760\uD761\uD763\uD765\uD769\uD76C\uD770\uD774\uD77C\uD77D\uD781\uD788\uD789\uD78C\uD790\uD798\uD799\uD79B\uD79D"],
["caa1", "\u4F3D\u4F73\u5047\u50F9\u52A0\u53EF\u5475\u54E5\u5609\u5AC1\u5BB6\u6687\u67B6\u67B7\u67EF\u6B4C\u73C2\u75C2\u7A3C\u82DB\u8304\u8857\u8888\u8A36\u8CC8\u8DCF\u8EFB\u8FE6\u99D5\u523B\u5374\u5404\u606A\u6164\u6BBC\u73CF\u811A\u89BA\u89D2\u95A3\u4F83\u520A\u58BE\u5978\u59E6\u5E72\u5E79\u61C7\u63C0\u6746\u67EC\u687F\u6F97\u764E\u770B\u78F5\u7A08\u7AFF\u7C21\u809D\u826E\u8271\u8AEB\u9593\u4E6B\u559D\u66F7\u6E34\u78A3\u7AED\u845B\u8910\u874E\u97A8\u52D8\u574E\u582A\u5D4C\u611F\u61BE\u6221\u6562\u67D1\u6A44\u6E1B\u7518\u75B3\u76E3\u77B0\u7D3A\u90AF\u9451\u9452\u9F95"],
["cba1", "\u5323\u5CAC\u7532\u80DB\u9240\u9598\u525B\u5808\u59DC\u5CA1\u5D17\u5EB7\u5F3A\u5F4A\u6177\u6C5F\u757A\u7586\u7CE0\u7D73\u7DB1\u7F8C\u8154\u8221\u8591\u8941\u8B1B\u92FC\u964D\u9C47\u4ECB\u4EF7\u500B\u51F1\u584F\u6137\u613E\u6168\u6539\u69EA\u6F11\u75A5\u7686\u76D6\u7B87\u82A5\u84CB\uF900\u93A7\u958B\u5580\u5BA2\u5751\uF901\u7CB3\u7FB9\u91B5\u5028\u53BB\u5C45\u5DE8\u62D2\u636E\u64DA\u64E7\u6E20\u70AC\u795B\u8DDD\u8E1E\uF902\u907D\u9245\u92F8\u4E7E\u4EF6\u5065\u5DFE\u5EFA\u6106\u6957\u8171\u8654\u8E47\u9375\u9A2B\u4E5E\u5091\u6770\u6840\u5109\u528D\u5292\u6AA2"],
["cca1", "\u77BC\u9210\u9ED4\u52AB\u602F\u8FF2\u5048\u61A9\u63ED\u64CA\u683C\u6A84\u6FC0\u8188\u89A1\u9694\u5805\u727D\u72AC\u7504\u7D79\u7E6D\u80A9\u898B\u8B74\u9063\u9D51\u6289\u6C7A\u6F54\u7D50\u7F3A\u8A23\u517C\u614A\u7B9D\u8B19\u9257\u938C\u4EAC\u4FD3\u501E\u50BE\u5106\u52C1\u52CD\u537F\u5770\u5883\u5E9A\u5F91\u6176\u61AC\u64CE\u656C\u666F\u66BB\u66F4\u6897\u6D87\u7085\u70F1\u749F\u74A5\u74CA\u75D9\u786C\u78EC\u7ADF\u7AF6\u7D45\u7D93\u8015\u803F\u811B\u8396\u8B66\u8F15\u9015\u93E1\u9803\u9838\u9A5A\u9BE8\u4FC2\u5553\u583A\u5951\u5B63\u5C46\u60B8\u6212\u6842\u68B0"],
["cda1", "\u68E8\u6EAA\u754C\u7678\u78CE\u7A3D\u7CFB\u7E6B\u7E7C\u8A08\u8AA1\u8C3F\u968E\u9DC4\u53E4\u53E9\u544A\u5471\u56FA\u59D1\u5B64\u5C3B\u5EAB\u62F7\u6537\u6545\u6572\u66A0\u67AF\u69C1\u6CBD\u75FC\u7690\u777E\u7A3F\u7F94\u8003\u80A1\u818F\u82E6\u82FD\u83F0\u85C1\u8831\u88B4\u8AA5\uF903\u8F9C\u932E\u96C7\u9867\u9AD8\u9F13\u54ED\u659B\u66F2\u688F\u7A40\u8C37\u9D60\u56F0\u5764\u5D11\u6606\u68B1\u68CD\u6EFE\u7428\u889E\u9BE4\u6C68\uF904\u9AA8\u4F9B\u516C\u5171\u529F\u5B54\u5DE5\u6050\u606D\u62F1\u63A7\u653B\u73D9\u7A7A\u86A3\u8CA2\u978F\u4E32\u5BE1\u6208\u679C\u74DC"],
["cea1", "\u79D1\u83D3\u8A87\u8AB2\u8DE8\u904E\u934B\u9846\u5ED3\u69E8\u85FF\u90ED\uF905\u51A0\u5B98\u5BEC\u6163\u68FA\u6B3E\u704C\u742F\u74D8\u7BA1\u7F50\u83C5\u89C0\u8CAB\u95DC\u9928\u522E\u605D\u62EC\u9002\u4F8A\u5149\u5321\u58D9\u5EE3\u66E0\u6D38\u709A\u72C2\u73D6\u7B50\u80F1\u945B\u5366\u639B\u7F6B\u4E56\u5080\u584A\u58DE\u602A\u6127\u62D0\u69D0\u9B41\u5B8F\u7D18\u80B1\u8F5F\u4EA4\u50D1\u54AC\u55AC\u5B0C\u5DA0\u5DE7\u652A\u654E\u6821\u6A4B\u72E1\u768E\u77EF\u7D5E\u7FF9\u81A0\u854E\u86DF\u8F03\u8F4E\u90CA\u9903\u9A55\u9BAB\u4E18\u4E45\u4E5D\u4EC7\u4FF1\u5177\u52FE"],
["cfa1", "\u5340\u53E3\u53E5\u548E\u5614\u5775\u57A2\u5BC7\u5D87\u5ED0\u61FC\u62D8\u6551\u67B8\u67E9\u69CB\u6B50\u6BC6\u6BEC\u6C42\u6E9D\u7078\u72D7\u7396\u7403\u77BF\u77E9\u7A76\u7D7F\u8009\u81FC\u8205\u820A\u82DF\u8862\u8B33\u8CFC\u8EC0\u9011\u90B1\u9264\u92B6\u99D2\u9A45\u9CE9\u9DD7\u9F9C\u570B\u5C40\u83CA\u97A0\u97AB\u9EB4\u541B\u7A98\u7FA4\u88D9\u8ECD\u90E1\u5800\u5C48\u6398\u7A9F\u5BAE\u5F13\u7A79\u7AAE\u828E\u8EAC\u5026\u5238\u52F8\u5377\u5708\u62F3\u6372\u6B0A\u6DC3\u7737\u53A5\u7357\u8568\u8E76\u95D5\u673A\u6AC3\u6F70\u8A6D\u8ECC\u994B\uF906\u6677\u6B78\u8CB4"],
["d0a1", "\u9B3C\uF907\u53EB\u572D\u594E\u63C6\u69FB\u73EA\u7845\u7ABA\u7AC5\u7CFE\u8475\u898F\u8D73\u9035\u95A8\u52FB\u5747\u7547\u7B60\u83CC\u921E\uF908\u6A58\u514B\u524B\u5287\u621F\u68D8\u6975\u9699\u50C5\u52A4\u52E4\u61C3\u65A4\u6839\u69FF\u747E\u7B4B\u82B9\u83EB\u89B2\u8B39\u8FD1\u9949\uF909\u4ECA\u5997\u64D2\u6611\u6A8E\u7434\u7981\u79BD\u82A9\u887E\u887F\u895F\uF90A\u9326\u4F0B\u53CA\u6025\u6271\u6C72\u7D1A\u7D66\u4E98\u5162\u77DC\u80AF\u4F01\u4F0E\u5176\u5180\u55DC\u5668\u573B\u57FA\u57FC\u5914\u5947\u5993\u5BC4\u5C90\u5D0E\u5DF1\u5E7E\u5FCC\u6280\u65D7\u65E3"],
["d1a1", "\u671E\u671F\u675E\u68CB\u68C4\u6A5F\u6B3A\u6C23\u6C7D\u6C82\u6DC7\u7398\u7426\u742A\u7482\u74A3\u7578\u757F\u7881\u78EF\u7941\u7947\u7948\u797A\u7B95\u7D00\u7DBA\u7F88\u8006\u802D\u808C\u8A18\u8B4F\u8C48\u8D77\u9321\u9324\u98E2\u9951\u9A0E\u9A0F\u9A65\u9E92\u7DCA\u4F76\u5409\u62EE\u6854\u91D1\u55AB\u513A\uF90B\uF90C\u5A1C\u61E6\uF90D\u62CF\u62FF\uF90E", 5, "\u90A3\uF914", 4, "\u8AFE\uF919\uF91A\uF91B\uF91C\u6696\uF91D\u7156\uF91E\uF91F\u96E3\uF920\u634F\u637A\u5357\uF921\u678F\u6960\u6E73\uF922\u7537\uF923\uF924\uF925"],
["d2a1", "\u7D0D\uF926\uF927\u8872\u56CA\u5A18\uF928", 4, "\u4E43\uF92D\u5167\u5948\u67F0\u8010\uF92E\u5973\u5E74\u649A\u79CA\u5FF5\u606C\u62C8\u637B\u5BE7\u5BD7\u52AA\uF92F\u5974\u5F29\u6012\uF930\uF931\uF932\u7459\uF933", 5, "\u99D1\uF939", 10, "\u6FC3\uF944\uF945\u81BF\u8FB2\u60F1\uF946\uF947\u8166\uF948\uF949\u5C3F\uF94A", 7, "\u5AE9\u8A25\u677B\u7D10\uF952", 5, "\u80FD\uF958\uF959\u5C3C\u6CE5\u533F\u6EBA\u591A\u8336"],
["d3a1", "\u4E39\u4EB6\u4F46\u55AE\u5718\u58C7\u5F56\u65B7\u65E6\u6A80\u6BB5\u6E4D\u77ED\u7AEF\u7C1E\u7DDE\u86CB\u8892\u9132\u935B\u64BB\u6FBE\u737A\u75B8\u9054\u5556\u574D\u61BA\u64D4\u66C7\u6DE1\u6E5B\u6F6D\u6FB9\u75F0\u8043\u81BD\u8541\u8983\u8AC7\u8B5A\u931F\u6C93\u7553\u7B54\u8E0F\u905D\u5510\u5802\u5858\u5E62\u6207\u649E\u68E0\u7576\u7CD6\u87B3\u9EE8\u4EE3\u5788\u576E\u5927\u5C0D\u5CB1\u5E36\u5F85\u6234\u64E1\u73B3\u81FA\u888B\u8CB8\u968A\u9EDB\u5B85\u5FB7\u60B3\u5012\u5200\u5230\u5716\u5835\u5857\u5C0E\u5C60\u5CF6\u5D8B\u5EA6\u5F92\u60BC\u6311\u6389\u6417\u6843"],
["d4a1", "\u68F9\u6AC2\u6DD8\u6E21\u6ED4\u6FE4\u71FE\u76DC\u7779\u79B1\u7A3B\u8404\u89A9\u8CED\u8DF3\u8E48\u9003\u9014\u9053\u90FD\u934D\u9676\u97DC\u6BD2\u7006\u7258\u72A2\u7368\u7763\u79BF\u7BE4\u7E9B\u8B80\u58A9\u60C7\u6566\u65FD\u66BE\u6C8C\u711E\u71C9\u8C5A\u9813\u4E6D\u7A81\u4EDD\u51AC\u51CD\u52D5\u540C\u61A7\u6771\u6850\u68DF\u6D1E\u6F7C\u75BC\u77B3\u7AE5\u80F4\u8463\u9285\u515C\u6597\u675C\u6793\u75D8\u7AC7\u8373\uF95A\u8C46\u9017\u982D\u5C6F\u81C0\u829A\u9041\u906F\u920D\u5F97\u5D9D\u6A59\u71C8\u767B\u7B49\u85E4\u8B04\u9127\u9A30\u5587\u61F6\uF95B\u7669\u7F85"],
["d5a1", "\u863F\u87BA\u88F8\u908F\uF95C\u6D1B\u70D9\u73DE\u7D61\u843D\uF95D\u916A\u99F1\uF95E\u4E82\u5375\u6B04\u6B12\u703E\u721B\u862D\u9E1E\u524C\u8FA3\u5D50\u64E5\u652C\u6B16\u6FEB\u7C43\u7E9C\u85CD\u8964\u89BD\u62C9\u81D8\u881F\u5ECA\u6717\u6D6A\u72FC\u7405\u746F\u8782\u90DE\u4F86\u5D0D\u5FA0\u840A\u51B7\u63A0\u7565\u4EAE\u5006\u5169\u51C9\u6881\u6A11\u7CAE\u7CB1\u7CE7\u826F\u8AD2\u8F1B\u91CF\u4FB6\u5137\u52F5\u5442\u5EEC\u616E\u623E\u65C5\u6ADA\u6FFE\u792A\u85DC\u8823\u95AD\u9A62\u9A6A\u9E97\u9ECE\u529B\u66C6\u6B77\u701D\u792B\u8F62\u9742\u6190\u6200\u6523\u6F23"],
["d6a1", "\u7149\u7489\u7DF4\u806F\u84EE\u8F26\u9023\u934A\u51BD\u5217\u52A3\u6D0C\u70C8\u88C2\u5EC9\u6582\u6BAE\u6FC2\u7C3E\u7375\u4EE4\u4F36\u56F9\uF95F\u5CBA\u5DBA\u601C\u73B2\u7B2D\u7F9A\u7FCE\u8046\u901E\u9234\u96F6\u9748\u9818\u9F61\u4F8B\u6FA7\u79AE\u91B4\u96B7\u52DE\uF960\u6488\u64C4\u6AD3\u6F5E\u7018\u7210\u76E7\u8001\u8606\u865C\u8DEF\u8F05\u9732\u9B6F\u9DFA\u9E75\u788C\u797F\u7DA0\u83C9\u9304\u9E7F\u9E93\u8AD6\u58DF\u5F04\u6727\u7027\u74CF\u7C60\u807E\u5121\u7028\u7262\u78CA\u8CC2\u8CDA\u8CF4\u96F7\u4E86\u50DA\u5BEE\u5ED6\u6599\u71CE\u7642\u77AD\u804A\u84FC"],
["d7a1", "\u907C\u9B27\u9F8D\u58D8\u5A41\u5C62\u6A13\u6DDA\u6F0F\u763B\u7D2F\u7E37\u851E\u8938\u93E4\u964B\u5289\u65D2\u67F3\u69B4\u6D41\u6E9C\u700F\u7409\u7460\u7559\u7624\u786B\u8B2C\u985E\u516D\u622E\u9678\u4F96\u502B\u5D19\u6DEA\u7DB8\u8F2A\u5F8B\u6144\u6817\uF961\u9686\u52D2\u808B\u51DC\u51CC\u695E\u7A1C\u7DBE\u83F1\u9675\u4FDA\u5229\u5398\u540F\u550E\u5C65\u60A7\u674E\u68A8\u6D6C\u7281\u72F8\u7406\u7483\uF962\u75E2\u7C6C\u7F79\u7FB8\u8389\u88CF\u88E1\u91CC\u91D0\u96E2\u9BC9\u541D\u6F7E\u71D0\u7498\u85FA\u8EAA\u96A3\u9C57\u9E9F\u6797\u6DCB\u7433\u81E8\u9716\u782C"],
["d8a1", "\u7ACB\u7B20\u7C92\u6469\u746A\u75F2\u78BC\u78E8\u99AC\u9B54\u9EBB\u5BDE\u5E55\u6F20\u819C\u83AB\u9088\u4E07\u534D\u5A29\u5DD2\u5F4E\u6162\u633D\u6669\u66FC\u6EFF\u6F2B\u7063\u779E\u842C\u8513\u883B\u8F13\u9945\u9C3B\u551C\u62B9\u672B\u6CAB\u8309\u896A\u977A\u4EA1\u5984\u5FD8\u5FD9\u671B\u7DB2\u7F54\u8292\u832B\u83BD\u8F1E\u9099\u57CB\u59B9\u5A92\u5BD0\u6627\u679A\u6885\u6BCF\u7164\u7F75\u8CB7\u8CE3\u9081\u9B45\u8108\u8C8A\u964C\u9A40\u9EA5\u5B5F\u6C13\u731B\u76F2\u76DF\u840C\u51AA\u8993\u514D\u5195\u52C9\u68C9\u6C94\u7704\u7720\u7DBF\u7DEC\u9762\u9EB5\u6EC5"],
["d9a1", "\u8511\u51A5\u540D\u547D\u660E\u669D\u6927\u6E9F\u76BF\u7791\u8317\u84C2\u879F\u9169\u9298\u9CF4\u8882\u4FAE\u5192\u52DF\u59C6\u5E3D\u6155\u6478\u6479\u66AE\u67D0\u6A21\u6BCD\u6BDB\u725F\u7261\u7441\u7738\u77DB\u8017\u82BC\u8305\u8B00\u8B28\u8C8C\u6728\u6C90\u7267\u76EE\u7766\u7A46\u9DA9\u6B7F\u6C92\u5922\u6726\u8499\u536F\u5893\u5999\u5EDF\u63CF\u6634\u6773\u6E3A\u732B\u7AD7\u82D7\u9328\u52D9\u5DEB\u61AE\u61CB\u620A\u62C7\u64AB\u65E0\u6959\u6B66\u6BCB\u7121\u73F7\u755D\u7E46\u821E\u8302\u856A\u8AA3\u8CBF\u9727\u9D61\u58A8\u9ED8\u5011\u520E\u543B\u554F\u6587"],
["daa1", "\u6C76\u7D0A\u7D0B\u805E\u868A\u9580\u96EF\u52FF\u6C95\u7269\u5473\u5A9A\u5C3E\u5D4B\u5F4C\u5FAE\u672A\u68B6\u6963\u6E3C\u6E44\u7709\u7C73\u7F8E\u8587\u8B0E\u8FF7\u9761\u9EF4\u5CB7\u60B6\u610D\u61AB\u654F\u65FB\u65FC\u6C11\u6CEF\u739F\u73C9\u7DE1\u9594\u5BC6\u871C\u8B10\u525D\u535A\u62CD\u640F\u64B2\u6734\u6A38\u6CCA\u73C0\u749E\u7B94\u7C95\u7E1B\u818A\u8236\u8584\u8FEB\u96F9\u99C1\u4F34\u534A\u53CD\u53DB\u62CC\u642C\u6500\u6591\u69C3\u6CEE\u6F58\u73ED\u7554\u7622\u76E4\u76FC\u78D0\u78FB\u792C\u7D46\u822C\u87E0\u8FD4\u9812\u98EF\u52C3\u62D4\u64A5\u6E24\u6F51"],
["dba1", "\u767C\u8DCB\u91B1\u9262\u9AEE\u9B43\u5023\u508D\u574A\u59A8\u5C28\u5E47\u5F77\u623F\u653E\u65B9\u65C1\u6609\u678B\u699C\u6EC2\u78C5\u7D21\u80AA\u8180\u822B\u82B3\u84A1\u868C\u8A2A\u8B17\u90A6\u9632\u9F90\u500D\u4FF3\uF963\u57F9\u5F98\u62DC\u6392\u676F\u6E43\u7119\u76C3\u80CC\u80DA\u88F4\u88F5\u8919\u8CE0\u8F29\u914D\u966A\u4F2F\u4F70\u5E1B\u67CF\u6822\u767D\u767E\u9B44\u5E61\u6A0A\u7169\u71D4\u756A\uF964\u7E41\u8543\u85E9\u98DC\u4F10\u7B4F\u7F70\u95A5\u51E1\u5E06\u68B5\u6C3E\u6C4E\u6CDB\u72AF\u7BC4\u8303\u6CD5\u743A\u50FB\u5288\u58C1\u64D8\u6A97\u74A7\u7656"],
["dca1", "\u78A7\u8617\u95E2\u9739\uF965\u535E\u5F01\u8B8A\u8FA8\u8FAF\u908A\u5225\u77A5\u9C49\u9F08\u4E19\u5002\u5175\u5C5B\u5E77\u661E\u663A\u67C4\u68C5\u70B3\u7501\u75C5\u79C9\u7ADD\u8F27\u9920\u9A08\u4FDD\u5821\u5831\u5BF6\u666E\u6B65\u6D11\u6E7A\u6F7D\u73E4\u752B\u83E9\u88DC\u8913\u8B5C\u8F14\u4F0F\u50D5\u5310\u535C\u5B93\u5FA9\u670D\u798F\u8179\u832F\u8514\u8907\u8986\u8F39\u8F3B\u99A5\u9C12\u672C\u4E76\u4FF8\u5949\u5C01\u5CEF\u5CF0\u6367\u68D2\u70FD\u71A2\u742B\u7E2B\u84EC\u8702\u9022\u92D2\u9CF3\u4E0D\u4ED8\u4FEF\u5085\u5256\u526F\u5426\u5490\u57E0\u592B\u5A66"],
["dda1", "\u5B5A\u5B75\u5BCC\u5E9C\uF966\u6276\u6577\u65A7\u6D6E\u6EA5\u7236\u7B26\u7C3F\u7F36\u8150\u8151\u819A\u8240\u8299\u83A9\u8A03\u8CA0\u8CE6\u8CFB\u8D74\u8DBA\u90E8\u91DC\u961C\u9644\u99D9\u9CE7\u5317\u5206\u5429\u5674\u58B3\u5954\u596E\u5FFF\u61A4\u626E\u6610\u6C7E\u711A\u76C6\u7C89\u7CDE\u7D1B\u82AC\u8CC1\u96F0\uF967\u4F5B\u5F17\u5F7F\u62C2\u5D29\u670B\u68DA\u787C\u7E43\u9D6C\u4E15\u5099\u5315\u532A\u5351\u5983\u5A62\u5E87\u60B2\u618A\u6249\u6279\u6590\u6787\u69A7\u6BD4\u6BD6\u6BD7\u6BD8\u6CB8\uF968\u7435\u75FA\u7812\u7891\u79D5\u79D8\u7C83\u7DCB\u7FE1\u80A5"],
["dea1", "\u813E\u81C2\u83F2\u871A\u88E8\u8AB9\u8B6C\u8CBB\u9119\u975E\u98DB\u9F3B\u56AC\u5B2A\u5F6C\u658C\u6AB3\u6BAF\u6D5C\u6FF1\u7015\u725D\u73AD\u8CA7\u8CD3\u983B\u6191\u6C37\u8058\u9A01\u4E4D\u4E8B\u4E9B\u4ED5\u4F3A\u4F3C\u4F7F\u4FDF\u50FF\u53F2\u53F8\u5506\u55E3\u56DB\u58EB\u5962\u5A11\u5BEB\u5BFA\u5C04\u5DF3\u5E2B\u5F99\u601D\u6368\u659C\u65AF\u67F6\u67FB\u68AD\u6B7B\u6C99\u6CD7\u6E23\u7009\u7345\u7802\u793E\u7940\u7960\u79C1\u7BE9\u7D17\u7D72\u8086\u820D\u838E\u84D1\u86C7\u88DF\u8A50\u8A5E\u8B1D\u8CDC\u8D66\u8FAD\u90AA\u98FC\u99DF\u9E9D\u524A\uF969\u6714\uF96A"],
["dfa1", "\u5098\u522A\u5C71\u6563\u6C55\u73CA\u7523\u759D\u7B97\u849C\u9178\u9730\u4E77\u6492\u6BBA\u715E\u85A9\u4E09\uF96B\u6749\u68EE\u6E17\u829F\u8518\u886B\u63F7\u6F81\u9212\u98AF\u4E0A\u50B7\u50CF\u511F\u5546\u55AA\u5617\u5B40\u5C19\u5CE0\u5E38\u5E8A\u5EA0\u5EC2\u60F3\u6851\u6A61\u6E58\u723D\u7240\u72C0\u76F8\u7965\u7BB1\u7FD4\u88F3\u89F4\u8A73\u8C61\u8CDE\u971C\u585E\u74BD\u8CFD\u55C7\uF96C\u7A61\u7D22\u8272\u7272\u751F\u7525\uF96D\u7B19\u5885\u58FB\u5DBC\u5E8F\u5EB6\u5F90\u6055\u6292\u637F\u654D\u6691\u66D9\u66F8\u6816\u68F2\u7280\u745E\u7B6E\u7D6E\u7DD6\u7F72"],
["e0a1", "\u80E5\u8212\u85AF\u897F\u8A93\u901D\u92E4\u9ECD\u9F20\u5915\u596D\u5E2D\u60DC\u6614\u6673\u6790\u6C50\u6DC5\u6F5F\u77F3\u78A9\u84C6\u91CB\u932B\u4ED9\u50CA\u5148\u5584\u5B0B\u5BA3\u6247\u657E\u65CB\u6E32\u717D\u7401\u7444\u7487\u74BF\u766C\u79AA\u7DDA\u7E55\u7FA8\u817A\u81B3\u8239\u861A\u87EC\u8A75\u8DE3\u9078\u9291\u9425\u994D\u9BAE\u5368\u5C51\u6954\u6CC4\u6D29\u6E2B\u820C\u859B\u893B\u8A2D\u8AAA\u96EA\u9F67\u5261\u66B9\u6BB2\u7E96\u87FE\u8D0D\u9583\u965D\u651D\u6D89\u71EE\uF96E\u57CE\u59D3\u5BAC\u6027\u60FA\u6210\u661F\u665F\u7329\u73F9\u76DB\u7701\u7B6C"],
["e1a1", "\u8056\u8072\u8165\u8AA0\u9192\u4E16\u52E2\u6B72\u6D17\u7A05\u7B39\u7D30\uF96F\u8CB0\u53EC\u562F\u5851\u5BB5\u5C0F\u5C11\u5DE2\u6240\u6383\u6414\u662D\u68B3\u6CBC\u6D88\u6EAF\u701F\u70A4\u71D2\u7526\u758F\u758E\u7619\u7B11\u7BE0\u7C2B\u7D20\u7D39\u852C\u856D\u8607\u8A34\u900D\u9061\u90B5\u92B7\u97F6\u9A37\u4FD7\u5C6C\u675F\u6D91\u7C9F\u7E8C\u8B16\u8D16\u901F\u5B6B\u5DFD\u640D\u84C0\u905C\u98E1\u7387\u5B8B\u609A\u677E\u6DDE\u8A1F\u8AA6\u9001\u980C\u5237\uF970\u7051\u788E\u9396\u8870\u91D7\u4FEE\u53D7\u55FD\u56DA\u5782\u58FD\u5AC2\u5B88\u5CAB\u5CC0\u5E25\u6101"],
["e2a1", "\u620D\u624B\u6388\u641C\u6536\u6578\u6A39\u6B8A\u6C34\u6D19\u6F31\u71E7\u72E9\u7378\u7407\u74B2\u7626\u7761\u79C0\u7A57\u7AEA\u7CB9\u7D8F\u7DAC\u7E61\u7F9E\u8129\u8331\u8490\u84DA\u85EA\u8896\u8AB0\u8B90\u8F38\u9042\u9083\u916C\u9296\u92B9\u968B\u96A7\u96A8\u96D6\u9700\u9808\u9996\u9AD3\u9B1A\u53D4\u587E\u5919\u5B70\u5BBF\u6DD1\u6F5A\u719F\u7421\u74B9\u8085\u83FD\u5DE1\u5F87\u5FAA\u6042\u65EC\u6812\u696F\u6A53\u6B89\u6D35\u6DF3\u73E3\u76FE\u77AC\u7B4D\u7D14\u8123\u821C\u8340\u84F4\u8563\u8A62\u8AC4\u9187\u931E\u9806\u99B4\u620C\u8853\u8FF0\u9265\u5D07\u5D27"],
["e3a1", "\u5D69\u745F\u819D\u8768\u6FD5\u62FE\u7FD2\u8936\u8972\u4E1E\u4E58\u50E7\u52DD\u5347\u627F\u6607\u7E69\u8805\u965E\u4F8D\u5319\u5636\u59CB\u5AA4\u5C38\u5C4E\u5C4D\u5E02\u5F11\u6043\u65BD\u662F\u6642\u67BE\u67F4\u731C\u77E2\u793A\u7FC5\u8494\u84CD\u8996\u8A66\u8A69\u8AE1\u8C55\u8C7A\u57F4\u5BD4\u5F0F\u606F\u62ED\u690D\u6B96\u6E5C\u7184\u7BD2\u8755\u8B58\u8EFE\u98DF\u98FE\u4F38\u4F81\u4FE1\u547B\u5A20\u5BB8\u613C\u65B0\u6668\u71FC\u7533\u795E\u7D33\u814E\u81E3\u8398\u85AA\u85CE\u8703\u8A0A\u8EAB\u8F9B\uF971\u8FC5\u5931\u5BA4\u5BE6\u6089\u5BE9\u5C0B\u5FC3\u6C81"],
["e4a1", "\uF972\u6DF1\u700B\u751A\u82AF\u8AF6\u4EC0\u5341\uF973\u96D9\u6C0F\u4E9E\u4FC4\u5152\u555E\u5A25\u5CE8\u6211\u7259\u82BD\u83AA\u86FE\u8859\u8A1D\u963F\u96C5\u9913\u9D09\u9D5D\u580A\u5CB3\u5DBD\u5E44\u60E1\u6115\u63E1\u6A02\u6E25\u9102\u9354\u984E\u9C10\u9F77\u5B89\u5CB8\u6309\u664F\u6848\u773C\u96C1\u978D\u9854\u9B9F\u65A1\u8B01\u8ECB\u95BC\u5535\u5CA9\u5DD6\u5EB5\u6697\u764C\u83F4\u95C7\u58D3\u62BC\u72CE\u9D28\u4EF0\u592E\u600F\u663B\u6B83\u79E7\u9D26\u5393\u54C0\u57C3\u5D16\u611B\u66D6\u6DAF\u788D\u827E\u9698\u9744\u5384\u627C\u6396\u6DB2\u7E0A\u814B\u984D"],
["e5a1", "\u6AFB\u7F4C\u9DAF\u9E1A\u4E5F\u503B\u51B6\u591C\u60F9\u63F6\u6930\u723A\u8036\uF974\u91CE\u5F31\uF975\uF976\u7D04\u82E5\u846F\u84BB\u85E5\u8E8D\uF977\u4F6F\uF978\uF979\u58E4\u5B43\u6059\u63DA\u6518\u656D\u6698\uF97A\u694A\u6A23\u6D0B\u7001\u716C\u75D2\u760D\u79B3\u7A70\uF97B\u7F8A\uF97C\u8944\uF97D\u8B93\u91C0\u967D\uF97E\u990A\u5704\u5FA1\u65BC\u6F01\u7600\u79A6\u8A9E\u99AD\u9B5A\u9F6C\u5104\u61B6\u6291\u6A8D\u81C6\u5043\u5830\u5F66\u7109\u8A00\u8AFA\u5B7C\u8616\u4FFA\u513C\u56B4\u5944\u63A9\u6DF9\u5DAA\u696D\u5186\u4E88\u4F59\uF97F\uF980\uF981\u5982\uF982"],
["e6a1", "\uF983\u6B5F\u6C5D\uF984\u74B5\u7916\uF985\u8207\u8245\u8339\u8F3F\u8F5D\uF986\u9918\uF987\uF988\uF989\u4EA6\uF98A\u57DF\u5F79\u6613\uF98B\uF98C\u75AB\u7E79\u8B6F\uF98D\u9006\u9A5B\u56A5\u5827\u59F8\u5A1F\u5BB4\uF98E\u5EF6\uF98F\uF990\u6350\u633B\uF991\u693D\u6C87\u6CBF\u6D8E\u6D93\u6DF5\u6F14\uF992\u70DF\u7136\u7159\uF993\u71C3\u71D5\uF994\u784F\u786F\uF995\u7B75\u7DE3\uF996\u7E2F\uF997\u884D\u8EDF\uF998\uF999\uF99A\u925B\uF99B\u9CF6\uF99C\uF99D\uF99E\u6085\u6D85\uF99F\u71B1\uF9A0\uF9A1\u95B1\u53AD\uF9A2\uF9A3\uF9A4\u67D3\uF9A5\u708E\u7130\u7430\u8276\u82D2"],
["e7a1", "\uF9A6\u95BB\u9AE5\u9E7D\u66C4\uF9A7\u71C1\u8449\uF9A8\uF9A9\u584B\uF9AA\uF9AB\u5DB8\u5F71\uF9AC\u6620\u668E\u6979\u69AE\u6C38\u6CF3\u6E36\u6F41\u6FDA\u701B\u702F\u7150\u71DF\u7370\uF9AD\u745B\uF9AE\u74D4\u76C8\u7A4E\u7E93\uF9AF\uF9B0\u82F1\u8A60\u8FCE\uF9B1\u9348\uF9B2\u9719\uF9B3\uF9B4\u4E42\u502A\uF9B5\u5208\u53E1\u66F3\u6C6D\u6FCA\u730A\u777F\u7A62\u82AE\u85DD\u8602\uF9B6\u88D4\u8A63\u8B7D\u8C6B\uF9B7\u92B3\uF9B8\u9713\u9810\u4E94\u4F0D\u4FC9\u50B2\u5348\u543E\u5433\u55DA\u5862\u58BA\u5967\u5A1B\u5BE4\u609F\uF9B9\u61CA\u6556\u65FF\u6664\u68A7\u6C5A\u6FB3"],
["e8a1", "\u70CF\u71AC\u7352\u7B7D\u8708\u8AA4\u9C32\u9F07\u5C4B\u6C83\u7344\u7389\u923A\u6EAB\u7465\u761F\u7A69\u7E15\u860A\u5140\u58C5\u64C1\u74EE\u7515\u7670\u7FC1\u9095\u96CD\u9954\u6E26\u74E6\u7AA9\u7AAA\u81E5\u86D9\u8778\u8A1B\u5A49\u5B8C\u5B9B\u68A1\u6900\u6D63\u73A9\u7413\u742C\u7897\u7DE9\u7FEB\u8118\u8155\u839E\u8C4C\u962E\u9811\u66F0\u5F80\u65FA\u6789\u6C6A\u738B\u502D\u5A03\u6B6A\u77EE\u5916\u5D6C\u5DCD\u7325\u754F\uF9BA\uF9BB\u50E5\u51F9\u582F\u592D\u5996\u59DA\u5BE5\uF9BC\uF9BD\u5DA2\u62D7\u6416\u6493\u64FE\uF9BE\u66DC\uF9BF\u6A48\uF9C0\u71FF\u7464\uF9C1"],
["e9a1", "\u7A88\u7AAF\u7E47\u7E5E\u8000\u8170\uF9C2\u87EF\u8981\u8B20\u9059\uF9C3\u9080\u9952\u617E\u6B32\u6D74\u7E1F\u8925\u8FB1\u4FD1\u50AD\u5197\u52C7\u57C7\u5889\u5BB9\u5EB8\u6142\u6995\u6D8C\u6E67\u6EB6\u7194\u7462\u7528\u752C\u8073\u8338\u84C9\u8E0A\u9394\u93DE\uF9C4\u4E8E\u4F51\u5076\u512A\u53C8\u53CB\u53F3\u5B87\u5BD3\u5C24\u611A\u6182\u65F4\u725B\u7397\u7440\u76C2\u7950\u7991\u79B9\u7D06\u7FBD\u828B\u85D5\u865E\u8FC2\u9047\u90F5\u91EA\u9685\u96E8\u96E9\u52D6\u5F67\u65ED\u6631\u682F\u715C\u7A36\u90C1\u980A\u4E91\uF9C5\u6A52\u6B9E\u6F90\u7189\u8018\u82B8\u8553"],
["eaa1", "\u904B\u9695\u96F2\u97FB\u851A\u9B31\u4E90\u718A\u96C4\u5143\u539F\u54E1\u5713\u5712\u57A3\u5A9B\u5AC4\u5BC3\u6028\u613F\u63F4\u6C85\u6D39\u6E72\u6E90\u7230\u733F\u7457\u82D1\u8881\u8F45\u9060\uF9C6\u9662\u9858\u9D1B\u6708\u8D8A\u925E\u4F4D\u5049\u50DE\u5371\u570D\u59D4\u5A01\u5C09\u6170\u6690\u6E2D\u7232\u744B\u7DEF\u80C3\u840E\u8466\u853F\u875F\u885B\u8918\u8B02\u9055\u97CB\u9B4F\u4E73\u4F91\u5112\u516A\uF9C7\u552F\u55A9\u5B7A\u5BA5\u5E7C\u5E7D\u5EBE\u60A0\u60DF\u6108\u6109\u63C4\u6538\u6709\uF9C8\u67D4\u67DA\uF9C9\u6961\u6962\u6CB9\u6D27\uF9CA\u6E38\uF9CB"],
["eba1", "\u6FE1\u7336\u7337\uF9CC\u745C\u7531\uF9CD\u7652\uF9CE\uF9CF\u7DAD\u81FE\u8438\u88D5\u8A98\u8ADB\u8AED\u8E30\u8E42\u904A\u903E\u907A\u9149\u91C9\u936E\uF9D0\uF9D1\u5809\uF9D2\u6BD3\u8089\u80B2\uF9D3\uF9D4\u5141\u596B\u5C39\uF9D5\uF9D6\u6F64\u73A7\u80E4\u8D07\uF9D7\u9217\u958F\uF9D8\uF9D9\uF9DA\uF9DB\u807F\u620E\u701C\u7D68\u878D\uF9DC\u57A0\u6069\u6147\u6BB7\u8ABE\u9280\u96B1\u4E59\u541F\u6DEB\u852D\u9670\u97F3\u98EE\u63D6\u6CE3\u9091\u51DD\u61C9\u81BA\u9DF9\u4F9D\u501A\u5100\u5B9C\u610F\u61FF\u64EC\u6905\u6BC5\u7591\u77E3\u7FA9\u8264\u858F\u87FB\u8863\u8ABC"],
["eca1", "\u8B70\u91AB\u4E8C\u4EE5\u4F0A\uF9DD\uF9DE\u5937\u59E8\uF9DF\u5DF2\u5F1B\u5F5B\u6021\uF9E0\uF9E1\uF9E2\uF9E3\u723E\u73E5\uF9E4\u7570\u75CD\uF9E5\u79FB\uF9E6\u800C\u8033\u8084\u82E1\u8351\uF9E7\uF9E8\u8CBD\u8CB3\u9087\uF9E9\uF9EA\u98F4\u990C\uF9EB\uF9EC\u7037\u76CA\u7FCA\u7FCC\u7FFC\u8B1A\u4EBA\u4EC1\u5203\u5370\uF9ED\u54BD\u56E0\u59FB\u5BC5\u5F15\u5FCD\u6E6E\uF9EE\uF9EF\u7D6A\u8335\uF9F0\u8693\u8A8D\uF9F1\u976D\u9777\uF9F2\uF9F3\u4E00\u4F5A\u4F7E\u58F9\u65E5\u6EA2\u9038\u93B0\u99B9\u4EFB\u58EC\u598A\u59D9\u6041\uF9F4\uF9F5\u7A14\uF9F6\u834F\u8CC3\u5165\u5344"],
["eda1", "\uF9F7\uF9F8\uF9F9\u4ECD\u5269\u5B55\u82BF\u4ED4\u523A\u54A8\u59C9\u59FF\u5B50\u5B57\u5B5C\u6063\u6148\u6ECB\u7099\u716E\u7386\u74F7\u75B5\u78C1\u7D2B\u8005\u81EA\u8328\u8517\u85C9\u8AEE\u8CC7\u96CC\u4F5C\u52FA\u56BC\u65AB\u6628\u707C\u70B8\u7235\u7DBD\u828D\u914C\u96C0\u9D72\u5B71\u68E7\u6B98\u6F7A\u76DE\u5C91\u66AB\u6F5B\u7BB4\u7C2A\u8836\u96DC\u4E08\u4ED7\u5320\u5834\u58BB\u58EF\u596C\u5C07\u5E33\u5E84\u5F35\u638C\u66B2\u6756\u6A1F\u6AA3\u6B0C\u6F3F\u7246\uF9FA\u7350\u748B\u7AE0\u7CA7\u8178\u81DF\u81E7\u838A\u846C\u8523\u8594\u85CF\u88DD\u8D13\u91AC\u9577"],
["eea1", "\u969C\u518D\u54C9\u5728\u5BB0\u624D\u6750\u683D\u6893\u6E3D\u6ED3\u707D\u7E21\u88C1\u8CA1\u8F09\u9F4B\u9F4E\u722D\u7B8F\u8ACD\u931A\u4F47\u4F4E\u5132\u5480\u59D0\u5E95\u62B5\u6775\u696E\u6A17\u6CAE\u6E1A\u72D9\u732A\u75BD\u7BB8\u7D35\u82E7\u83F9\u8457\u85F7\u8A5B\u8CAF\u8E87\u9019\u90B8\u96CE\u9F5F\u52E3\u540A\u5AE1\u5BC2\u6458\u6575\u6EF4\u72C4\uF9FB\u7684\u7A4D\u7B1B\u7C4D\u7E3E\u7FDF\u837B\u8B2B\u8CCA\u8D64\u8DE1\u8E5F\u8FEA\u8FF9\u9069\u93D1\u4F43\u4F7A\u50B3\u5168\u5178\u524D\u526A\u5861\u587C\u5960\u5C08\u5C55\u5EDB\u609B\u6230\u6813\u6BBF\u6C08\u6FB1"],
["efa1", "\u714E\u7420\u7530\u7538\u7551\u7672\u7B4C\u7B8B\u7BAD\u7BC6\u7E8F\u8A6E\u8F3E\u8F49\u923F\u9293\u9322\u942B\u96FB\u985A\u986B\u991E\u5207\u622A\u6298\u6D59\u7664\u7ACA\u7BC0\u7D76\u5360\u5CBE\u5E97\u6F38\u70B9\u7C98\u9711\u9B8E\u9EDE\u63A5\u647A\u8776\u4E01\u4E95\u4EAD\u505C\u5075\u5448\u59C3\u5B9A\u5E40\u5EAD\u5EF7\u5F81\u60C5\u633A\u653F\u6574\u65CC\u6676\u6678\u67FE\u6968\u6A89\u6B63\u6C40\u6DC0\u6DE8\u6E1F\u6E5E\u701E\u70A1\u738E\u73FD\u753A\u775B\u7887\u798E\u7A0B\u7A7D\u7CBE\u7D8E\u8247\u8A02\u8AEA\u8C9E\u912D\u914A\u91D8\u9266\u92CC\u9320\u9706\u9756"],
["f0a1", "\u975C\u9802\u9F0E\u5236\u5291\u557C\u5824\u5E1D\u5F1F\u608C\u63D0\u68AF\u6FDF\u796D\u7B2C\u81CD\u85BA\u88FD\u8AF8\u8E44\u918D\u9664\u969B\u973D\u984C\u9F4A\u4FCE\u5146\u51CB\u52A9\u5632\u5F14\u5F6B\u63AA\u64CD\u65E9\u6641\u66FA\u66F9\u671D\u689D\u68D7\u69FD\u6F15\u6F6E\u7167\u71E5\u722A\u74AA\u773A\u7956\u795A\u79DF\u7A20\u7A95\u7C97\u7CDF\u7D44\u7E70\u8087\u85FB\u86A4\u8A54\u8ABF\u8D99\u8E81\u9020\u906D\u91E3\u963B\u96D5\u9CE5\u65CF\u7C07\u8DB3\u93C3\u5B58\u5C0A\u5352\u62D9\u731D\u5027\u5B97\u5F9E\u60B0\u616B\u68D5\u6DD9\u742E\u7A2E\u7D42\u7D9C\u7E31\u816B"],
["f1a1", "\u8E2A\u8E35\u937E\u9418\u4F50\u5750\u5DE6\u5EA7\u632B\u7F6A\u4E3B\u4F4F\u4F8F\u505A\u59DD\u80C4\u546A\u5468\u55FE\u594F\u5B99\u5DDE\u5EDA\u665D\u6731\u67F1\u682A\u6CE8\u6D32\u6E4A\u6F8D\u70B7\u73E0\u7587\u7C4C\u7D02\u7D2C\u7DA2\u821F\u86DB\u8A3B\u8A85\u8D70\u8E8A\u8F33\u9031\u914E\u9152\u9444\u99D0\u7AF9\u7CA5\u4FCA\u5101\u51C6\u57C8\u5BEF\u5CFB\u6659\u6A3D\u6D5A\u6E96\u6FEC\u710C\u756F\u7AE3\u8822\u9021\u9075\u96CB\u99FF\u8301\u4E2D\u4EF2\u8846\u91CD\u537D\u6ADB\u696B\u6C41\u847A\u589E\u618E\u66FE\u62EF\u70DD\u7511\u75C7\u7E52\u84B8\u8B49\u8D08\u4E4B\u53EA"],
["f2a1", "\u54AB\u5730\u5740\u5FD7\u6301\u6307\u646F\u652F\u65E8\u667A\u679D\u67B3\u6B62\u6C60\u6C9A\u6F2C\u77E5\u7825\u7949\u7957\u7D19\u80A2\u8102\u81F3\u829D\u82B7\u8718\u8A8C\uF9FC\u8D04\u8DBE\u9072\u76F4\u7A19\u7A37\u7E54\u8077\u5507\u55D4\u5875\u632F\u6422\u6649\u664B\u686D\u699B\u6B84\u6D25\u6EB1\u73CD\u7468\u74A1\u755B\u75B9\u76E1\u771E\u778B\u79E6\u7E09\u7E1D\u81FB\u852F\u8897\u8A3A\u8CD1\u8EEB\u8FB0\u9032\u93AD\u9663\u9673\u9707\u4F84\u53F1\u59EA\u5AC9\u5E19\u684E\u74C6\u75BE\u79E9\u7A92\u81A3\u86ED\u8CEA\u8DCC\u8FED\u659F\u6715\uF9FD\u57F7\u6F57\u7DDD\u8F2F"],
["f3a1", "\u93F6\u96C6\u5FB5\u61F2\u6F84\u4E14\u4F98\u501F\u53C9\u55DF\u5D6F\u5DEE\u6B21\u6B64\u78CB\u7B9A\uF9FE\u8E49\u8ECA\u906E\u6349\u643E\u7740\u7A84\u932F\u947F\u9F6A\u64B0\u6FAF\u71E6\u74A8\u74DA\u7AC4\u7C12\u7E82\u7CB2\u7E98\u8B9A\u8D0A\u947D\u9910\u994C\u5239\u5BDF\u64E6\u672D\u7D2E\u50ED\u53C3\u5879\u6158\u6159\u61FA\u65AC\u7AD9\u8B92\u8B96\u5009\u5021\u5275\u5531\u5A3C\u5EE0\u5F70\u6134\u655E\u660C\u6636\u66A2\u69CD\u6EC4\u6F32\u7316\u7621\u7A93\u8139\u8259\u83D6\u84BC\u50B5\u57F0\u5BC0\u5BE8\u5F69\u63A1\u7826\u7DB5\u83DC\u8521\u91C7\u91F5\u518A\u67F5\u7B56"],
["f4a1", "\u8CAC\u51C4\u59BB\u60BD\u8655\u501C\uF9FF\u5254\u5C3A\u617D\u621A\u62D3\u64F2\u65A5\u6ECC\u7620\u810A\u8E60\u965F\u96BB\u4EDF\u5343\u5598\u5929\u5DDD\u64C5\u6CC9\u6DFA\u7394\u7A7F\u821B\u85A6\u8CE4\u8E10\u9077\u91E7\u95E1\u9621\u97C6\u51F8\u54F2\u5586\u5FB9\u64A4\u6F88\u7DB4\u8F1F\u8F4D\u9435\u50C9\u5C16\u6CBE\u6DFB\u751B\u77BB\u7C3D\u7C64\u8A79\u8AC2\u581E\u59BE\u5E16\u6377\u7252\u758A\u776B\u8ADC\u8CBC\u8F12\u5EF3\u6674\u6DF8\u807D\u83C1\u8ACB\u9751\u9BD6\uFA00\u5243\u66FF\u6D95\u6EEF\u7DE0\u8AE6\u902E\u905E\u9AD4\u521D\u527F\u54E8\u6194\u6284\u62DB\u68A2"],
["f5a1", "\u6912\u695A\u6A35\u7092\u7126\u785D\u7901\u790E\u79D2\u7A0D\u8096\u8278\u82D5\u8349\u8549\u8C82\u8D85\u9162\u918B\u91AE\u4FC3\u56D1\u71ED\u77D7\u8700\u89F8\u5BF8\u5FD6\u6751\u90A8\u53E2\u585A\u5BF5\u60A4\u6181\u6460\u7E3D\u8070\u8525\u9283\u64AE\u50AC\u5D14\u6700\u589C\u62BD\u63A8\u690E\u6978\u6A1E\u6E6B\u76BA\u79CB\u82BB\u8429\u8ACF\u8DA8\u8FFD\u9112\u914B\u919C\u9310\u9318\u939A\u96DB\u9A36\u9C0D\u4E11\u755C\u795D\u7AFA\u7B51\u7BC9\u7E2E\u84C4\u8E59\u8E74\u8EF8\u9010\u6625\u693F\u7443\u51FA\u672E\u9EDC\u5145\u5FE0\u6C96\u87F2\u885D\u8877\u60B4\u81B5\u8403"],
["f6a1", "\u8D05\u53D6\u5439\u5634\u5A36\u5C31\u708A\u7FE0\u805A\u8106\u81ED\u8DA3\u9189\u9A5F\u9DF2\u5074\u4EC4\u53A0\u60FB\u6E2C\u5C64\u4F88\u5024\u55E4\u5CD9\u5E5F\u6065\u6894\u6CBB\u6DC4\u71BE\u75D4\u75F4\u7661\u7A1A\u7A49\u7DC7\u7DFB\u7F6E\u81F4\u86A9\u8F1C\u96C9\u99B3\u9F52\u5247\u52C5\u98ED\u89AA\u4E03\u67D2\u6F06\u4FB5\u5BE2\u6795\u6C88\u6D78\u741B\u7827\u91DD\u937C\u87C4\u79E4\u7A31\u5FEB\u4ED6\u54A4\u553E\u58AE\u59A5\u60F0\u6253\u62D6\u6736\u6955\u8235\u9640\u99B1\u99DD\u502C\u5353\u5544\u577C\uFA01\u6258\uFA02\u64E2\u666B\u67DD\u6FC1\u6FEF\u7422\u7438\u8A17"],
["f7a1", "\u9438\u5451\u5606\u5766\u5F48\u619A\u6B4E\u7058\u70AD\u7DBB\u8A95\u596A\u812B\u63A2\u7708\u803D\u8CAA\u5854\u642D\u69BB\u5B95\u5E11\u6E6F\uFA03\u8569\u514C\u53F0\u592A\u6020\u614B\u6B86\u6C70\u6CF0\u7B1E\u80CE\u82D4\u8DC6\u90B0\u98B1\uFA04\u64C7\u6FA4\u6491\u6504\u514E\u5410\u571F\u8A0E\u615F\u6876\uFA05\u75DB\u7B52\u7D71\u901A\u5806\u69CC\u817F\u892A\u9000\u9839\u5078\u5957\u59AC\u6295\u900F\u9B2A\u615D\u7279\u95D6\u5761\u5A46\u5DF4\u628A\u64AD\u64FA\u6777\u6CE2\u6D3E\u722C\u7436\u7834\u7F77\u82AD\u8DDB\u9817\u5224\u5742\u677F\u7248\u74E3\u8CA9\u8FA6\u9211"],
["f8a1", "\u962A\u516B\u53ED\u634C\u4F69\u5504\u6096\u6557\u6C9B\u6D7F\u724C\u72FD\u7A17\u8987\u8C9D\u5F6D\u6F8E\u70F9\u81A8\u610E\u4FBF\u504F\u6241\u7247\u7BC7\u7DE8\u7FE9\u904D\u97AD\u9A19\u8CB6\u576A\u5E73\u67B0\u840D\u8A55\u5420\u5B16\u5E63\u5EE2\u5F0A\u6583\u80BA\u853D\u9589\u965B\u4F48\u5305\u530D\u530F\u5486\u54FA\u5703\u5E03\u6016\u629B\u62B1\u6355\uFA06\u6CE1\u6D66\u75B1\u7832\u80DE\u812F\u82DE\u8461\u84B2\u888D\u8912\u900B\u92EA\u98FD\u9B91\u5E45\u66B4\u66DD\u7011\u7206\uFA07\u4FF5\u527D\u5F6A\u6153\u6753\u6A19\u6F02\u74E2\u7968\u8868\u8C79\u98C7\u98C4\u9A43"],
["f9a1", "\u54C1\u7A1F\u6953\u8AF7\u8C4A\u98A8\u99AE\u5F7C\u62AB\u75B2\u76AE\u88AB\u907F\u9642\u5339\u5F3C\u5FC5\u6CCC\u73CC\u7562\u758B\u7B46\u82FE\u999D\u4E4F\u903C\u4E0B\u4F55\u53A6\u590F\u5EC8\u6630\u6CB3\u7455\u8377\u8766\u8CC0\u9050\u971E\u9C15\u58D1\u5B78\u8650\u8B14\u9DB4\u5BD2\u6068\u608D\u65F1\u6C57\u6F22\u6FA3\u701A\u7F55\u7FF0\u9591\u9592\u9650\u97D3\u5272\u8F44\u51FD\u542B\u54B8\u5563\u558A\u6ABB\u6DB5\u7DD8\u8266\u929C\u9677\u9E79\u5408\u54C8\u76D2\u86E4\u95A4\u95D4\u965C\u4EA2\u4F09\u59EE\u5AE6\u5DF7\u6052\u6297\u676D\u6841\u6C86\u6E2F\u7F38\u809B\u822A"],
["faa1", "\uFA08\uFA09\u9805\u4EA5\u5055\u54B3\u5793\u595A\u5B69\u5BB3\u61C8\u6977\u6D77\u7023\u87F9\u89E3\u8A72\u8AE7\u9082\u99ED\u9AB8\u52BE\u6838\u5016\u5E78\u674F\u8347\u884C\u4EAB\u5411\u56AE\u73E6\u9115\u97FF\u9909\u9957\u9999\u5653\u589F\u865B\u8A31\u61B2\u6AF6\u737B\u8ED2\u6B47\u96AA\u9A57\u5955\u7200\u8D6B\u9769\u4FD4\u5CF4\u5F26\u61F8\u665B\u6CEB\u70AB\u7384\u73B9\u73FE\u7729\u774D\u7D43\u7D62\u7E23\u8237\u8852\uFA0A\u8CE2\u9249\u986F\u5B51\u7A74\u8840\u9801\u5ACC\u4FE0\u5354\u593E\u5CFD\u633E\u6D79\u72F9\u8105\u8107\u83A2\u92CF\u9830\u4EA8\u5144\u5211\u578B"],
["fba1", "\u5F62\u6CC2\u6ECE\u7005\u7050\u70AF\u7192\u73E9\u7469\u834A\u87A2\u8861\u9008\u90A2\u93A3\u99A8\u516E\u5F57\u60E0\u6167\u66B3\u8559\u8E4A\u91AF\u978B\u4E4E\u4E92\u547C\u58D5\u58FA\u597D\u5CB5\u5F27\u6236\u6248\u660A\u6667\u6BEB\u6D69\u6DCF\u6E56\u6EF8\u6F94\u6FE0\u6FE9\u705D\u72D0\u7425\u745A\u74E0\u7693\u795C\u7CCA\u7E1E\u80E1\u82A6\u846B\u84BF\u864E\u865F\u8774\u8B77\u8C6A\u93AC\u9800\u9865\u60D1\u6216\u9177\u5A5A\u660F\u6DF7\u6E3E\u743F\u9B42\u5FFD\u60DA\u7B0F\u54C4\u5F18\u6C5E\u6CD3\u6D2A\u70D8\u7D05\u8679\u8A0C\u9D3B\u5316\u548C\u5B05\u6A3A\u706B\u7575"],
["fca1", "\u798D\u79BE\u82B1\u83EF\u8A71\u8B41\u8CA8\u9774\uFA0B\u64F4\u652B\u78BA\u78BB\u7A6B\u4E38\u559A\u5950\u5BA6\u5E7B\u60A3\u63DB\u6B61\u6665\u6853\u6E19\u7165\u74B0\u7D08\u9084\u9A69\u9C25\u6D3B\u6ED1\u733E\u8C41\u95CA\u51F0\u5E4C\u5FA8\u604D\u60F6\u6130\u614C\u6643\u6644\u69A5\u6CC1\u6E5F\u6EC9\u6F62\u714C\u749C\u7687\u7BC1\u7C27\u8352\u8757\u9051\u968D\u9EC3\u532F\u56DE\u5EFB\u5F8A\u6062\u6094\u61F7\u6666\u6703\u6A9C\u6DEE\u6FAE\u7070\u736A\u7E6A\u81BE\u8334\u86D4\u8AA8\u8CC4\u5283\u7372\u5B96\u6A6B\u9404\u54EE\u5686\u5B5D\u6548\u6585\u66C9\u689F\u6D8D\u6DC6"],
["fda1", "\u723B\u80B4\u9175\u9A4D\u4FAF\u5019\u539A\u540E\u543C\u5589\u55C5\u5E3F\u5F8C\u673D\u7166\u73DD\u9005\u52DB\u52F3\u5864\u58CE\u7104\u718F\u71FB\u85B0\u8A13\u6688\u85A8\u55A7\u6684\u714A\u8431\u5349\u5599\u6BC1\u5F59\u5FBD\u63EE\u6689\u7147\u8AF1\u8F1D\u9EBE\u4F11\u643A\u70CB\u7566\u8667\u6064\u8B4E\u9DF8\u5147\u51F6\u5308\u6D36\u80F8\u9ED1\u6615\u6B23\u7098\u75D5\u5403\u5C79\u7D07\u8A16\u6B20\u6B3D\u6B46\u5438\u6070\u6D3D\u7FD5\u8208\u50D6\u51DE\u559C\u566B\u56CD\u59EC\u5B09\u5E0C\u6199\u6198\u6231\u665E\u66E6\u7199\u71B9\u71BA\u72A7\u79A7\u7A00\u7FB2\u8A70"]
];
}
});
// node_modules/iconv-lite/encodings/tables/cp950.json
var require_cp950 = __commonJS({
"node_modules/iconv-lite/encodings/tables/cp950.json"(exports2, module2) {
module2.exports = [
["0", "\0", 127],
["a140", "\u3000\uFF0C\u3001\u3002\uFF0E\u2027\uFF1B\uFF1A\uFF1F\uFF01\uFE30\u2026\u2025\uFE50\uFE51\uFE52\xB7\uFE54\uFE55\uFE56\uFE57\uFF5C\u2013\uFE31\u2014\uFE33\u2574\uFE34\uFE4F\uFF08\uFF09\uFE35\uFE36\uFF5B\uFF5D\uFE37\uFE38\u3014\u3015\uFE39\uFE3A\u3010\u3011\uFE3B\uFE3C\u300A\u300B\uFE3D\uFE3E\u3008\u3009\uFE3F\uFE40\u300C\u300D\uFE41\uFE42\u300E\u300F\uFE43\uFE44\uFE59\uFE5A"],
["a1a1", "\uFE5B\uFE5C\uFE5D\uFE5E\u2018\u2019\u201C\u201D\u301D\u301E\u2035\u2032\uFF03\uFF06\uFF0A\u203B\xA7\u3003\u25CB\u25CF\u25B3\u25B2\u25CE\u2606\u2605\u25C7\u25C6\u25A1\u25A0\u25BD\u25BC\u32A3\u2105\xAF\uFFE3\uFF3F\u02CD\uFE49\uFE4A\uFE4D\uFE4E\uFE4B\uFE4C\uFE5F\uFE60\uFE61\uFF0B\uFF0D\xD7\xF7\xB1\u221A\uFF1C\uFF1E\uFF1D\u2266\u2267\u2260\u221E\u2252\u2261\uFE62", 4, "\uFF5E\u2229\u222A\u22A5\u2220\u221F\u22BF\u33D2\u33D1\u222B\u222E\u2235\u2234\u2640\u2642\u2295\u2299\u2191\u2193\u2190\u2192\u2196\u2197\u2199\u2198\u2225\u2223\uFF0F"],
["a240", "\uFF3C\u2215\uFE68\uFF04\uFFE5\u3012\uFFE0\uFFE1\uFF05\uFF20\u2103\u2109\uFE69\uFE6A\uFE6B\u33D5\u339C\u339D\u339E\u33CE\u33A1\u338E\u338F\u33C4\xB0\u5159\u515B\u515E\u515D\u5161\u5163\u55E7\u74E9\u7CCE\u2581", 7, "\u258F\u258E\u258D\u258C\u258B\u258A\u2589\u253C\u2534\u252C\u2524\u251C\u2594\u2500\u2502\u2595\u250C\u2510\u2514\u2518\u256D"],
["a2a1", "\u256E\u2570\u256F\u2550\u255E\u256A\u2561\u25E2\u25E3\u25E5\u25E4\u2571\u2572\u2573\uFF10", 9, "\u2160", 9, "\u3021", 8, "\u5341\u5344\u5345\uFF21", 25, "\uFF41", 21],
["a340", "\uFF57\uFF58\uFF59\uFF5A\u0391", 16, "\u03A3", 6, "\u03B1", 16, "\u03C3", 6, "\u3105", 10],
["a3a1", "\u3110", 25, "\u02D9\u02C9\u02CA\u02C7\u02CB"],
["a3e1", "\u20AC"],
["a440", "\u4E00\u4E59\u4E01\u4E03\u4E43\u4E5D\u4E86\u4E8C\u4EBA\u513F\u5165\u516B\u51E0\u5200\u5201\u529B\u5315\u5341\u535C\u53C8\u4E09\u4E0B\u4E08\u4E0A\u4E2B\u4E38\u51E1\u4E45\u4E48\u4E5F\u4E5E\u4E8E\u4EA1\u5140\u5203\u52FA\u5343\u53C9\u53E3\u571F\u58EB\u5915\u5927\u5973\u5B50\u5B51\u5B53\u5BF8\u5C0F\u5C22\u5C38\u5C71\u5DDD\u5DE5\u5DF1\u5DF2\u5DF3\u5DFE\u5E72\u5EFE\u5F0B\u5F13\u624D"],
["a4a1", "\u4E11\u4E10\u4E0D\u4E2D\u4E30\u4E39\u4E4B\u5C39\u4E88\u4E91\u4E95\u4E92\u4E94\u4EA2\u4EC1\u4EC0\u4EC3\u4EC6\u4EC7\u4ECD\u4ECA\u4ECB\u4EC4\u5143\u5141\u5167\u516D\u516E\u516C\u5197\u51F6\u5206\u5207\u5208\u52FB\u52FE\u52FF\u5316\u5339\u5348\u5347\u5345\u535E\u5384\u53CB\u53CA\u53CD\u58EC\u5929\u592B\u592A\u592D\u5B54\u5C11\u5C24\u5C3A\u5C6F\u5DF4\u5E7B\u5EFF\u5F14\u5F15\u5FC3\u6208\u6236\u624B\u624E\u652F\u6587\u6597\u65A4\u65B9\u65E5\u66F0\u6708\u6728\u6B20\u6B62\u6B79\u6BCB\u6BD4\u6BDB\u6C0F\u6C34\u706B\u722A\u7236\u723B\u7247\u7259\u725B\u72AC\u738B\u4E19"],
["a540", "\u4E16\u4E15\u4E14\u4E18\u4E3B\u4E4D\u4E4F\u4E4E\u4EE5\u4ED8\u4ED4\u4ED5\u4ED6\u4ED7\u4EE3\u4EE4\u4ED9\u4EDE\u5145\u5144\u5189\u518A\u51AC\u51F9\u51FA\u51F8\u520A\u52A0\u529F\u5305\u5306\u5317\u531D\u4EDF\u534A\u5349\u5361\u5360\u536F\u536E\u53BB\u53EF\u53E4\u53F3\u53EC\u53EE\u53E9\u53E8\u53FC\u53F8\u53F5\u53EB\u53E6\u53EA\u53F2\u53F1\u53F0\u53E5\u53ED\u53FB\u56DB\u56DA\u5916"],
["a5a1", "\u592E\u5931\u5974\u5976\u5B55\u5B83\u5C3C\u5DE8\u5DE7\u5DE6\u5E02\u5E03\u5E73\u5E7C\u5F01\u5F18\u5F17\u5FC5\u620A\u6253\u6254\u6252\u6251\u65A5\u65E6\u672E\u672C\u672A\u672B\u672D\u6B63\u6BCD\u6C11\u6C10\u6C38\u6C41\u6C40\u6C3E\u72AF\u7384\u7389\u74DC\u74E6\u7518\u751F\u7528\u7529\u7530\u7531\u7532\u7533\u758B\u767D\u76AE\u76BF\u76EE\u77DB\u77E2\u77F3\u793A\u79BE\u7A74\u7ACB\u4E1E\u4E1F\u4E52\u4E53\u4E69\u4E99\u4EA4\u4EA6\u4EA5\u4EFF\u4F09\u4F19\u4F0A\u4F15\u4F0D\u4F10\u4F11\u4F0F\u4EF2\u4EF6\u4EFB\u4EF0\u4EF3\u4EFD\u4F01\u4F0B\u5149\u5147\u5146\u5148\u5168"],
["a640", "\u5171\u518D\u51B0\u5217\u5211\u5212\u520E\u5216\u52A3\u5308\u5321\u5320\u5370\u5371\u5409\u540F\u540C\u540A\u5410\u5401\u540B\u5404\u5411\u540D\u5408\u5403\u540E\u5406\u5412\u56E0\u56DE\u56DD\u5733\u5730\u5728\u572D\u572C\u572F\u5729\u5919\u591A\u5937\u5938\u5984\u5978\u5983\u597D\u5979\u5982\u5981\u5B57\u5B58\u5B87\u5B88\u5B85\u5B89\u5BFA\u5C16\u5C79\u5DDE\u5E06\u5E76\u5E74"],
["a6a1", "\u5F0F\u5F1B\u5FD9\u5FD6\u620E\u620C\u620D\u6210\u6263\u625B\u6258\u6536\u65E9\u65E8\u65EC\u65ED\u66F2\u66F3\u6709\u673D\u6734\u6731\u6735\u6B21\u6B64\u6B7B\u6C16\u6C5D\u6C57\u6C59\u6C5F\u6C60\u6C50\u6C55\u6C61\u6C5B\u6C4D\u6C4E\u7070\u725F\u725D\u767E\u7AF9\u7C73\u7CF8\u7F36\u7F8A\u7FBD\u8001\u8003\u800C\u8012\u8033\u807F\u8089\u808B\u808C\u81E3\u81EA\u81F3\u81FC\u820C\u821B\u821F\u826E\u8272\u827E\u866B\u8840\u884C\u8863\u897F\u9621\u4E32\u4EA8\u4F4D\u4F4F\u4F47\u4F57\u4F5E\u4F34\u4F5B\u4F55\u4F30\u4F50\u4F51\u4F3D\u4F3A\u4F38\u4F43\u4F54\u4F3C\u4F46\u4F63"],
["a740", "\u4F5C\u4F60\u4F2F\u4F4E\u4F36\u4F59\u4F5D\u4F48\u4F5A\u514C\u514B\u514D\u5175\u51B6\u51B7\u5225\u5224\u5229\u522A\u5228\u52AB\u52A9\u52AA\u52AC\u5323\u5373\u5375\u541D\u542D\u541E\u543E\u5426\u544E\u5427\u5446\u5443\u5433\u5448\u5442\u541B\u5429\u544A\u5439\u543B\u5438\u542E\u5435\u5436\u5420\u543C\u5440\u5431\u542B\u541F\u542C\u56EA\u56F0\u56E4\u56EB\u574A\u5751\u5740\u574D"],
["a7a1", "\u5747\u574E\u573E\u5750\u574F\u573B\u58EF\u593E\u599D\u5992\u59A8\u599E\u59A3\u5999\u5996\u598D\u59A4\u5993\u598A\u59A5\u5B5D\u5B5C\u5B5A\u5B5B\u5B8C\u5B8B\u5B8F\u5C2C\u5C40\u5C41\u5C3F\u5C3E\u5C90\u5C91\u5C94\u5C8C\u5DEB\u5E0C\u5E8F\u5E87\u5E8A\u5EF7\u5F04\u5F1F\u5F64\u5F62\u5F77\u5F79\u5FD8\u5FCC\u5FD7\u5FCD\u5FF1\u5FEB\u5FF8\u5FEA\u6212\u6211\u6284\u6297\u6296\u6280\u6276\u6289\u626D\u628A\u627C\u627E\u6279\u6273\u6292\u626F\u6298\u626E\u6295\u6293\u6291\u6286\u6539\u653B\u6538\u65F1\u66F4\u675F\u674E\u674F\u6750\u6751\u675C\u6756\u675E\u6749\u6746\u6760"],
["a840", "\u6753\u6757\u6B65\u6BCF\u6C42\u6C5E\u6C99\u6C81\u6C88\u6C89\u6C85\u6C9B\u6C6A\u6C7A\u6C90\u6C70\u6C8C\u6C68\u6C96\u6C92\u6C7D\u6C83\u6C72\u6C7E\u6C74\u6C86\u6C76\u6C8D\u6C94\u6C98\u6C82\u7076\u707C\u707D\u7078\u7262\u7261\u7260\u72C4\u72C2\u7396\u752C\u752B\u7537\u7538\u7682\u76EF\u77E3\u79C1\u79C0\u79BF\u7A76\u7CFB\u7F55\u8096\u8093\u809D\u8098\u809B\u809A\u80B2\u826F\u8292"],
["a8a1", "\u828B\u828D\u898B\u89D2\u8A00\u8C37\u8C46\u8C55\u8C9D\u8D64\u8D70\u8DB3\u8EAB\u8ECA\u8F9B\u8FB0\u8FC2\u8FC6\u8FC5\u8FC4\u5DE1\u9091\u90A2\u90AA\u90A6\u90A3\u9149\u91C6\u91CC\u9632\u962E\u9631\u962A\u962C\u4E26\u4E56\u4E73\u4E8B\u4E9B\u4E9E\u4EAB\u4EAC\u4F6F\u4F9D\u4F8D\u4F73\u4F7F\u4F6C\u4F9B\u4F8B\u4F86\u4F83\u4F70\u4F75\u4F88\u4F69\u4F7B\u4F96\u4F7E\u4F8F\u4F91\u4F7A\u5154\u5152\u5155\u5169\u5177\u5176\u5178\u51BD\u51FD\u523B\u5238\u5237\u523A\u5230\u522E\u5236\u5241\u52BE\u52BB\u5352\u5354\u5353\u5351\u5366\u5377\u5378\u5379\u53D6\u53D4\u53D7\u5473\u5475"],
["a940", "\u5496\u5478\u5495\u5480\u547B\u5477\u5484\u5492\u5486\u547C\u5490\u5471\u5476\u548C\u549A\u5462\u5468\u548B\u547D\u548E\u56FA\u5783\u5777\u576A\u5769\u5761\u5766\u5764\u577C\u591C\u5949\u5947\u5948\u5944\u5954\u59BE\u59BB\u59D4\u59B9\u59AE\u59D1\u59C6\u59D0\u59CD\u59CB\u59D3\u59CA\u59AF\u59B3\u59D2\u59C5\u5B5F\u5B64\u5B63\u5B97\u5B9A\u5B98\u5B9C\u5B99\u5B9B\u5C1A\u5C48\u5C45"],
["a9a1", "\u5C46\u5CB7\u5CA1\u5CB8\u5CA9\u5CAB\u5CB1\u5CB3\u5E18\u5E1A\u5E16\u5E15\u5E1B\u5E11\u5E78\u5E9A\u5E97\u5E9C\u5E95\u5E96\u5EF6\u5F26\u5F27\u5F29\u5F80\u5F81\u5F7F\u5F7C\u5FDD\u5FE0\u5FFD\u5FF5\u5FFF\u600F\u6014\u602F\u6035\u6016\u602A\u6015\u6021\u6027\u6029\u602B\u601B\u6216\u6215\u623F\u623E\u6240\u627F\u62C9\u62CC\u62C4\u62BF\u62C2\u62B9\u62D2\u62DB\u62AB\u62D3\u62D4\u62CB\u62C8\u62A8\u62BD\u62BC\u62D0\u62D9\u62C7\u62CD\u62B5\u62DA\u62B1\u62D8\u62D6\u62D7\u62C6\u62AC\u62CE\u653E\u65A7\u65BC\u65FA\u6614\u6613\u660C\u6606\u6602\u660E\u6600\u660F\u6615\u660A"],
["aa40", "\u6607\u670D\u670B\u676D\u678B\u6795\u6771\u679C\u6773\u6777\u6787\u679D\u6797\u676F\u6770\u677F\u6789\u677E\u6790\u6775\u679A\u6793\u677C\u676A\u6772\u6B23\u6B66\u6B67\u6B7F\u6C13\u6C1B\u6CE3\u6CE8\u6CF3\u6CB1\u6CCC\u6CE5\u6CB3\u6CBD\u6CBE\u6CBC\u6CE2\u6CAB\u6CD5\u6CD3\u6CB8\u6CC4\u6CB9\u6CC1\u6CAE\u6CD7\u6CC5\u6CF1\u6CBF\u6CBB\u6CE1\u6CDB\u6CCA\u6CAC\u6CEF\u6CDC\u6CD6\u6CE0"],
["aaa1", "\u7095\u708E\u7092\u708A\u7099\u722C\u722D\u7238\u7248\u7267\u7269\u72C0\u72CE\u72D9\u72D7\u72D0\u73A9\u73A8\u739F\u73AB\u73A5\u753D\u759D\u7599\u759A\u7684\u76C2\u76F2\u76F4\u77E5\u77FD\u793E\u7940\u7941\u79C9\u79C8\u7A7A\u7A79\u7AFA\u7CFE\u7F54\u7F8C\u7F8B\u8005\u80BA\u80A5\u80A2\u80B1\u80A1\u80AB\u80A9\u80B4\u80AA\u80AF\u81E5\u81FE\u820D\u82B3\u829D\u8299\u82AD\u82BD\u829F\u82B9\u82B1\u82AC\u82A5\u82AF\u82B8\u82A3\u82B0\u82BE\u82B7\u864E\u8671\u521D\u8868\u8ECB\u8FCE\u8FD4\u8FD1\u90B5\u90B8\u90B1\u90B6\u91C7\u91D1\u9577\u9580\u961C\u9640\u963F\u963B\u9644"],
["ab40", "\u9642\u96B9\u96E8\u9752\u975E\u4E9F\u4EAD\u4EAE\u4FE1\u4FB5\u4FAF\u4FBF\u4FE0\u4FD1\u4FCF\u4FDD\u4FC3\u4FB6\u4FD8\u4FDF\u4FCA\u4FD7\u4FAE\u4FD0\u4FC4\u4FC2\u4FDA\u4FCE\u4FDE\u4FB7\u5157\u5192\u5191\u51A0\u524E\u5243\u524A\u524D\u524C\u524B\u5247\u52C7\u52C9\u52C3\u52C1\u530D\u5357\u537B\u539A\u53DB\u54AC\u54C0\u54A8\u54CE\u54C9\u54B8\u54A6\u54B3\u54C7\u54C2\u54BD\u54AA\u54C1"],
["aba1", "\u54C4\u54C8\u54AF\u54AB\u54B1\u54BB\u54A9\u54A7\u54BF\u56FF\u5782\u578B\u57A0\u57A3\u57A2\u57CE\u57AE\u5793\u5955\u5951\u594F\u594E\u5950\u59DC\u59D8\u59FF\u59E3\u59E8\u5A03\u59E5\u59EA\u59DA\u59E6\u5A01\u59FB\u5B69\u5BA3\u5BA6\u5BA4\u5BA2\u5BA5\u5C01\u5C4E\u5C4F\u5C4D\u5C4B\u5CD9\u5CD2\u5DF7\u5E1D\u5E25\u5E1F\u5E7D\u5EA0\u5EA6\u5EFA\u5F08\u5F2D\u5F65\u5F88\u5F85\u5F8A\u5F8B\u5F87\u5F8C\u5F89\u6012\u601D\u6020\u6025\u600E\u6028\u604D\u6070\u6068\u6062\u6046\u6043\u606C\u606B\u606A\u6064\u6241\u62DC\u6316\u6309\u62FC\u62ED\u6301\u62EE\u62FD\u6307\u62F1\u62F7"],
["ac40", "\u62EF\u62EC\u62FE\u62F4\u6311\u6302\u653F\u6545\u65AB\u65BD\u65E2\u6625\u662D\u6620\u6627\u662F\u661F\u6628\u6631\u6624\u66F7\u67FF\u67D3\u67F1\u67D4\u67D0\u67EC\u67B6\u67AF\u67F5\u67E9\u67EF\u67C4\u67D1\u67B4\u67DA\u67E5\u67B8\u67CF\u67DE\u67F3\u67B0\u67D9\u67E2\u67DD\u67D2\u6B6A\u6B83\u6B86\u6BB5\u6BD2\u6BD7\u6C1F\u6CC9\u6D0B\u6D32\u6D2A\u6D41\u6D25\u6D0C\u6D31\u6D1E\u6D17"],
["aca1", "\u6D3B\u6D3D\u6D3E\u6D36\u6D1B\u6CF5\u6D39\u6D27\u6D38\u6D29\u6D2E\u6D35\u6D0E\u6D2B\u70AB\u70BA\u70B3\u70AC\u70AF\u70AD\u70B8\u70AE\u70A4\u7230\u7272\u726F\u7274\u72E9\u72E0\u72E1\u73B7\u73CA\u73BB\u73B2\u73CD\u73C0\u73B3\u751A\u752D\u754F\u754C\u754E\u754B\u75AB\u75A4\u75A5\u75A2\u75A3\u7678\u7686\u7687\u7688\u76C8\u76C6\u76C3\u76C5\u7701\u76F9\u76F8\u7709\u770B\u76FE\u76FC\u7707\u77DC\u7802\u7814\u780C\u780D\u7946\u7949\u7948\u7947\u79B9\u79BA\u79D1\u79D2\u79CB\u7A7F\u7A81\u7AFF\u7AFD\u7C7D\u7D02\u7D05\u7D00\u7D09\u7D07\u7D04\u7D06\u7F38\u7F8E\u7FBF\u8004"],
["ad40", "\u8010\u800D\u8011\u8036\u80D6\u80E5\u80DA\u80C3\u80C4\u80CC\u80E1\u80DB\u80CE\u80DE\u80E4\u80DD\u81F4\u8222\u82E7\u8303\u8305\u82E3\u82DB\u82E6\u8304\u82E5\u8302\u8309\u82D2\u82D7\u82F1\u8301\u82DC\u82D4\u82D1\u82DE\u82D3\u82DF\u82EF\u8306\u8650\u8679\u867B\u867A\u884D\u886B\u8981\u89D4\u8A08\u8A02\u8A03\u8C9E\u8CA0\u8D74\u8D73\u8DB4\u8ECD\u8ECC\u8FF0\u8FE6\u8FE2\u8FEA\u8FE5"],
["ada1", "\u8FED\u8FEB\u8FE4\u8FE8\u90CA\u90CE\u90C1\u90C3\u914B\u914A\u91CD\u9582\u9650\u964B\u964C\u964D\u9762\u9769\u97CB\u97ED\u97F3\u9801\u98A8\u98DB\u98DF\u9996\u9999\u4E58\u4EB3\u500C\u500D\u5023\u4FEF\u5026\u5025\u4FF8\u5029\u5016\u5006\u503C\u501F\u501A\u5012\u5011\u4FFA\u5000\u5014\u5028\u4FF1\u5021\u500B\u5019\u5018\u4FF3\u4FEE\u502D\u502A\u4FFE\u502B\u5009\u517C\u51A4\u51A5\u51A2\u51CD\u51CC\u51C6\u51CB\u5256\u525C\u5254\u525B\u525D\u532A\u537F\u539F\u539D\u53DF\u54E8\u5510\u5501\u5537\u54FC\u54E5\u54F2\u5506\u54FA\u5514\u54E9\u54ED\u54E1\u5509\u54EE\u54EA"],
["ae40", "\u54E6\u5527\u5507\u54FD\u550F\u5703\u5704\u57C2\u57D4\u57CB\u57C3\u5809\u590F\u5957\u5958\u595A\u5A11\u5A18\u5A1C\u5A1F\u5A1B\u5A13\u59EC\u5A20\u5A23\u5A29\u5A25\u5A0C\u5A09\u5B6B\u5C58\u5BB0\u5BB3\u5BB6\u5BB4\u5BAE\u5BB5\u5BB9\u5BB8\u5C04\u5C51\u5C55\u5C50\u5CED\u5CFD\u5CFB\u5CEA\u5CE8\u5CF0\u5CF6\u5D01\u5CF4\u5DEE\u5E2D\u5E2B\u5EAB\u5EAD\u5EA7\u5F31\u5F92\u5F91\u5F90\u6059"],
["aea1", "\u6063\u6065\u6050\u6055\u606D\u6069\u606F\u6084\u609F\u609A\u608D\u6094\u608C\u6085\u6096\u6247\u62F3\u6308\u62FF\u634E\u633E\u632F\u6355\u6342\u6346\u634F\u6349\u633A\u6350\u633D\u632A\u632B\u6328\u634D\u634C\u6548\u6549\u6599\u65C1\u65C5\u6642\u6649\u664F\u6643\u6652\u664C\u6645\u6641\u66F8\u6714\u6715\u6717\u6821\u6838\u6848\u6846\u6853\u6839\u6842\u6854\u6829\u68B3\u6817\u684C\u6851\u683D\u67F4\u6850\u6840\u683C\u6843\u682A\u6845\u6813\u6818\u6841\u6B8A\u6B89\u6BB7\u6C23\u6C27\u6C28\u6C26\u6C24\u6CF0\u6D6A\u6D95\u6D88\u6D87\u6D66\u6D78\u6D77\u6D59\u6D93"],
["af40", "\u6D6C\u6D89\u6D6E\u6D5A\u6D74\u6D69\u6D8C\u6D8A\u6D79\u6D85\u6D65\u6D94\u70CA\u70D8\u70E4\u70D9\u70C8\u70CF\u7239\u7279\u72FC\u72F9\u72FD\u72F8\u72F7\u7386\u73ED\u7409\u73EE\u73E0\u73EA\u73DE\u7554\u755D\u755C\u755A\u7559\u75BE\u75C5\u75C7\u75B2\u75B3\u75BD\u75BC\u75B9\u75C2\u75B8\u768B\u76B0\u76CA\u76CD\u76CE\u7729\u771F\u7720\u7728\u77E9\u7830\u7827\u7838\u781D\u7834\u7837"],
["afa1", "\u7825\u782D\u7820\u781F\u7832\u7955\u7950\u7960\u795F\u7956\u795E\u795D\u7957\u795A\u79E4\u79E3\u79E7\u79DF\u79E6\u79E9\u79D8\u7A84\u7A88\u7AD9\u7B06\u7B11\u7C89\u7D21\u7D17\u7D0B\u7D0A\u7D20\u7D22\u7D14\u7D10\u7D15\u7D1A\u7D1C\u7D0D\u7D19\u7D1B\u7F3A\u7F5F\u7F94\u7FC5\u7FC1\u8006\u8018\u8015\u8019\u8017\u803D\u803F\u80F1\u8102\u80F0\u8105\u80ED\u80F4\u8106\u80F8\u80F3\u8108\u80FD\u810A\u80FC\u80EF\u81ED\u81EC\u8200\u8210\u822A\u822B\u8228\u822C\u82BB\u832B\u8352\u8354\u834A\u8338\u8350\u8349\u8335\u8334\u834F\u8332\u8339\u8336\u8317\u8340\u8331\u8328\u8343"],
["b040", "\u8654\u868A\u86AA\u8693\u86A4\u86A9\u868C\u86A3\u869C\u8870\u8877\u8881\u8882\u887D\u8879\u8A18\u8A10\u8A0E\u8A0C\u8A15\u8A0A\u8A17\u8A13\u8A16\u8A0F\u8A11\u8C48\u8C7A\u8C79\u8CA1\u8CA2\u8D77\u8EAC\u8ED2\u8ED4\u8ECF\u8FB1\u9001\u9006\u8FF7\u9000\u8FFA\u8FF4\u9003\u8FFD\u9005\u8FF8\u9095\u90E1\u90DD\u90E2\u9152\u914D\u914C\u91D8\u91DD\u91D7\u91DC\u91D9\u9583\u9662\u9663\u9661"],
["b0a1", "\u965B\u965D\u9664\u9658\u965E\u96BB\u98E2\u99AC\u9AA8\u9AD8\u9B25\u9B32\u9B3C\u4E7E\u507A\u507D\u505C\u5047\u5043\u504C\u505A\u5049\u5065\u5076\u504E\u5055\u5075\u5074\u5077\u504F\u500F\u506F\u506D\u515C\u5195\u51F0\u526A\u526F\u52D2\u52D9\u52D8\u52D5\u5310\u530F\u5319\u533F\u5340\u533E\u53C3\u66FC\u5546\u556A\u5566\u5544\u555E\u5561\u5543\u554A\u5531\u5556\u554F\u5555\u552F\u5564\u5538\u552E\u555C\u552C\u5563\u5533\u5541\u5557\u5708\u570B\u5709\u57DF\u5805\u580A\u5806\u57E0\u57E4\u57FA\u5802\u5835\u57F7\u57F9\u5920\u5962\u5A36\u5A41\u5A49\u5A66\u5A6A\u5A40"],
["b140", "\u5A3C\u5A62\u5A5A\u5A46\u5A4A\u5B70\u5BC7\u5BC5\u5BC4\u5BC2\u5BBF\u5BC6\u5C09\u5C08\u5C07\u5C60\u5C5C\u5C5D\u5D07\u5D06\u5D0E\u5D1B\u5D16\u5D22\u5D11\u5D29\u5D14\u5D19\u5D24\u5D27\u5D17\u5DE2\u5E38\u5E36\u5E33\u5E37\u5EB7\u5EB8\u5EB6\u5EB5\u5EBE\u5F35\u5F37\u5F57\u5F6C\u5F69\u5F6B\u5F97\u5F99\u5F9E\u5F98\u5FA1\u5FA0\u5F9C\u607F\u60A3\u6089\u60A0\u60A8\u60CB\u60B4\u60E6\u60BD"],
["b1a1", "\u60C5\u60BB\u60B5\u60DC\u60BC\u60D8\u60D5\u60C6\u60DF\u60B8\u60DA\u60C7\u621A\u621B\u6248\u63A0\u63A7\u6372\u6396\u63A2\u63A5\u6377\u6367\u6398\u63AA\u6371\u63A9\u6389\u6383\u639B\u636B\u63A8\u6384\u6388\u6399\u63A1\u63AC\u6392\u638F\u6380\u637B\u6369\u6368\u637A\u655D\u6556\u6551\u6559\u6557\u555F\u654F\u6558\u6555\u6554\u659C\u659B\u65AC\u65CF\u65CB\u65CC\u65CE\u665D\u665A\u6664\u6668\u6666\u665E\u66F9\u52D7\u671B\u6881\u68AF\u68A2\u6893\u68B5\u687F\u6876\u68B1\u68A7\u6897\u68B0\u6883\u68C4\u68AD\u6886\u6885\u6894\u689D\u68A8\u689F\u68A1\u6882\u6B32\u6BBA"],
["b240", "\u6BEB\u6BEC\u6C2B\u6D8E\u6DBC\u6DF3\u6DD9\u6DB2\u6DE1\u6DCC\u6DE4\u6DFB\u6DFA\u6E05\u6DC7\u6DCB\u6DAF\u6DD1\u6DAE\u6DDE\u6DF9\u6DB8\u6DF7\u6DF5\u6DC5\u6DD2\u6E1A\u6DB5\u6DDA\u6DEB\u6DD8\u6DEA\u6DF1\u6DEE\u6DE8\u6DC6\u6DC4\u6DAA\u6DEC\u6DBF\u6DE6\u70F9\u7109\u710A\u70FD\u70EF\u723D\u727D\u7281\u731C\u731B\u7316\u7313\u7319\u7387\u7405\u740A\u7403\u7406\u73FE\u740D\u74E0\u74F6"],
["b2a1", "\u74F7\u751C\u7522\u7565\u7566\u7562\u7570\u758F\u75D4\u75D5\u75B5\u75CA\u75CD\u768E\u76D4\u76D2\u76DB\u7737\u773E\u773C\u7736\u7738\u773A\u786B\u7843\u784E\u7965\u7968\u796D\u79FB\u7A92\u7A95\u7B20\u7B28\u7B1B\u7B2C\u7B26\u7B19\u7B1E\u7B2E\u7C92\u7C97\u7C95\u7D46\u7D43\u7D71\u7D2E\u7D39\u7D3C\u7D40\u7D30\u7D33\u7D44\u7D2F\u7D42\u7D32\u7D31\u7F3D\u7F9E\u7F9A\u7FCC\u7FCE\u7FD2\u801C\u804A\u8046\u812F\u8116\u8123\u812B\u8129\u8130\u8124\u8202\u8235\u8237\u8236\u8239\u838E\u839E\u8398\u8378\u83A2\u8396\u83BD\u83AB\u8392\u838A\u8393\u8389\u83A0\u8377\u837B\u837C"],
["b340", "\u8386\u83A7\u8655\u5F6A\u86C7\u86C0\u86B6\u86C4\u86B5\u86C6\u86CB\u86B1\u86AF\u86C9\u8853\u889E\u8888\u88AB\u8892\u8896\u888D\u888B\u8993\u898F\u8A2A\u8A1D\u8A23\u8A25\u8A31\u8A2D\u8A1F\u8A1B\u8A22\u8C49\u8C5A\u8CA9\u8CAC\u8CAB\u8CA8\u8CAA\u8CA7\u8D67\u8D66\u8DBE\u8DBA\u8EDB\u8EDF\u9019\u900D\u901A\u9017\u9023\u901F\u901D\u9010\u9015\u901E\u9020\u900F\u9022\u9016\u901B\u9014"],
["b3a1", "\u90E8\u90ED\u90FD\u9157\u91CE\u91F5\u91E6\u91E3\u91E7\u91ED\u91E9\u9589\u966A\u9675\u9673\u9678\u9670\u9674\u9676\u9677\u966C\u96C0\u96EA\u96E9\u7AE0\u7ADF\u9802\u9803\u9B5A\u9CE5\u9E75\u9E7F\u9EA5\u9EBB\u50A2\u508D\u5085\u5099\u5091\u5080\u5096\u5098\u509A\u6700\u51F1\u5272\u5274\u5275\u5269\u52DE\u52DD\u52DB\u535A\u53A5\u557B\u5580\u55A7\u557C\u558A\u559D\u5598\u5582\u559C\u55AA\u5594\u5587\u558B\u5583\u55B3\u55AE\u559F\u553E\u55B2\u559A\u55BB\u55AC\u55B1\u557E\u5589\u55AB\u5599\u570D\u582F\u582A\u5834\u5824\u5830\u5831\u5821\u581D\u5820\u58F9\u58FA\u5960"],
["b440", "\u5A77\u5A9A\u5A7F\u5A92\u5A9B\u5AA7\u5B73\u5B71\u5BD2\u5BCC\u5BD3\u5BD0\u5C0A\u5C0B\u5C31\u5D4C\u5D50\u5D34\u5D47\u5DFD\u5E45\u5E3D\u5E40\u5E43\u5E7E\u5ECA\u5EC1\u5EC2\u5EC4\u5F3C\u5F6D\u5FA9\u5FAA\u5FA8\u60D1\u60E1\u60B2\u60B6\u60E0\u611C\u6123\u60FA\u6115\u60F0\u60FB\u60F4\u6168\u60F1\u610E\u60F6\u6109\u6100\u6112\u621F\u6249\u63A3\u638C\u63CF\u63C0\u63E9\u63C9\u63C6\u63CD"],
["b4a1", "\u63D2\u63E3\u63D0\u63E1\u63D6\u63ED\u63EE\u6376\u63F4\u63EA\u63DB\u6452\u63DA\u63F9\u655E\u6566\u6562\u6563\u6591\u6590\u65AF\u666E\u6670\u6674\u6676\u666F\u6691\u667A\u667E\u6677\u66FE\u66FF\u671F\u671D\u68FA\u68D5\u68E0\u68D8\u68D7\u6905\u68DF\u68F5\u68EE\u68E7\u68F9\u68D2\u68F2\u68E3\u68CB\u68CD\u690D\u6912\u690E\u68C9\u68DA\u696E\u68FB\u6B3E\u6B3A\u6B3D\u6B98\u6B96\u6BBC\u6BEF\u6C2E\u6C2F\u6C2C\u6E2F\u6E38\u6E54\u6E21\u6E32\u6E67\u6E4A\u6E20\u6E25\u6E23\u6E1B\u6E5B\u6E58\u6E24\u6E56\u6E6E\u6E2D\u6E26\u6E6F\u6E34\u6E4D\u6E3A\u6E2C\u6E43\u6E1D\u6E3E\u6ECB"],
["b540", "\u6E89\u6E19\u6E4E\u6E63\u6E44\u6E72\u6E69\u6E5F\u7119\u711A\u7126\u7130\u7121\u7136\u716E\u711C\u724C\u7284\u7280\u7336\u7325\u7334\u7329\u743A\u742A\u7433\u7422\u7425\u7435\u7436\u7434\u742F\u741B\u7426\u7428\u7525\u7526\u756B\u756A\u75E2\u75DB\u75E3\u75D9\u75D8\u75DE\u75E0\u767B\u767C\u7696\u7693\u76B4\u76DC\u774F\u77ED\u785D\u786C\u786F\u7A0D\u7A08\u7A0B\u7A05\u7A00\u7A98"],
["b5a1", "\u7A97\u7A96\u7AE5\u7AE3\u7B49\u7B56\u7B46\u7B50\u7B52\u7B54\u7B4D\u7B4B\u7B4F\u7B51\u7C9F\u7CA5\u7D5E\u7D50\u7D68\u7D55\u7D2B\u7D6E\u7D72\u7D61\u7D66\u7D62\u7D70\u7D73\u5584\u7FD4\u7FD5\u800B\u8052\u8085\u8155\u8154\u814B\u8151\u814E\u8139\u8146\u813E\u814C\u8153\u8174\u8212\u821C\u83E9\u8403\u83F8\u840D\u83E0\u83C5\u840B\u83C1\u83EF\u83F1\u83F4\u8457\u840A\u83F0\u840C\u83CC\u83FD\u83F2\u83CA\u8438\u840E\u8404\u83DC\u8407\u83D4\u83DF\u865B\u86DF\u86D9\u86ED\u86D4\u86DB\u86E4\u86D0\u86DE\u8857\u88C1\u88C2\u88B1\u8983\u8996\u8A3B\u8A60\u8A55\u8A5E\u8A3C\u8A41"],
["b640", "\u8A54\u8A5B\u8A50\u8A46\u8A34\u8A3A\u8A36\u8A56\u8C61\u8C82\u8CAF\u8CBC\u8CB3\u8CBD\u8CC1\u8CBB\u8CC0\u8CB4\u8CB7\u8CB6\u8CBF\u8CB8\u8D8A\u8D85\u8D81\u8DCE\u8DDD\u8DCB\u8DDA\u8DD1\u8DCC\u8DDB\u8DC6\u8EFB\u8EF8\u8EFC\u8F9C\u902E\u9035\u9031\u9038\u9032\u9036\u9102\u90F5\u9109\u90FE\u9163\u9165\u91CF\u9214\u9215\u9223\u9209\u921E\u920D\u9210\u9207\u9211\u9594\u958F\u958B\u9591"],
["b6a1", "\u9593\u9592\u958E\u968A\u968E\u968B\u967D\u9685\u9686\u968D\u9672\u9684\u96C1\u96C5\u96C4\u96C6\u96C7\u96EF\u96F2\u97CC\u9805\u9806\u9808\u98E7\u98EA\u98EF\u98E9\u98F2\u98ED\u99AE\u99AD\u9EC3\u9ECD\u9ED1\u4E82\u50AD\u50B5\u50B2\u50B3\u50C5\u50BE\u50AC\u50B7\u50BB\u50AF\u50C7\u527F\u5277\u527D\u52DF\u52E6\u52E4\u52E2\u52E3\u532F\u55DF\u55E8\u55D3\u55E6\u55CE\u55DC\u55C7\u55D1\u55E3\u55E4\u55EF\u55DA\u55E1\u55C5\u55C6\u55E5\u55C9\u5712\u5713\u585E\u5851\u5858\u5857\u585A\u5854\u586B\u584C\u586D\u584A\u5862\u5852\u584B\u5967\u5AC1\u5AC9\u5ACC\u5ABE\u5ABD\u5ABC"],
["b740", "\u5AB3\u5AC2\u5AB2\u5D69\u5D6F\u5E4C\u5E79\u5EC9\u5EC8\u5F12\u5F59\u5FAC\u5FAE\u611A\u610F\u6148\u611F\u60F3\u611B\u60F9\u6101\u6108\u614E\u614C\u6144\u614D\u613E\u6134\u6127\u610D\u6106\u6137\u6221\u6222\u6413\u643E\u641E\u642A\u642D\u643D\u642C\u640F\u641C\u6414\u640D\u6436\u6416\u6417\u6406\u656C\u659F\u65B0\u6697\u6689\u6687\u6688\u6696\u6684\u6698\u668D\u6703\u6994\u696D"],
["b7a1", "\u695A\u6977\u6960\u6954\u6975\u6930\u6982\u694A\u6968\u696B\u695E\u6953\u6979\u6986\u695D\u6963\u695B\u6B47\u6B72\u6BC0\u6BBF\u6BD3\u6BFD\u6EA2\u6EAF\u6ED3\u6EB6\u6EC2\u6E90\u6E9D\u6EC7\u6EC5\u6EA5\u6E98\u6EBC\u6EBA\u6EAB\u6ED1\u6E96\u6E9C\u6EC4\u6ED4\u6EAA\u6EA7\u6EB4\u714E\u7159\u7169\u7164\u7149\u7167\u715C\u716C\u7166\u714C\u7165\u715E\u7146\u7168\u7156\u723A\u7252\u7337\u7345\u733F\u733E\u746F\u745A\u7455\u745F\u745E\u7441\u743F\u7459\u745B\u745C\u7576\u7578\u7600\u75F0\u7601\u75F2\u75F1\u75FA\u75FF\u75F4\u75F3\u76DE\u76DF\u775B\u776B\u7766\u775E\u7763"],
["b840", "\u7779\u776A\u776C\u775C\u7765\u7768\u7762\u77EE\u788E\u78B0\u7897\u7898\u788C\u7889\u787C\u7891\u7893\u787F\u797A\u797F\u7981\u842C\u79BD\u7A1C\u7A1A\u7A20\u7A14\u7A1F\u7A1E\u7A9F\u7AA0\u7B77\u7BC0\u7B60\u7B6E\u7B67\u7CB1\u7CB3\u7CB5\u7D93\u7D79\u7D91\u7D81\u7D8F\u7D5B\u7F6E\u7F69\u7F6A\u7F72\u7FA9\u7FA8\u7FA4\u8056\u8058\u8086\u8084\u8171\u8170\u8178\u8165\u816E\u8173\u816B"],
["b8a1", "\u8179\u817A\u8166\u8205\u8247\u8482\u8477\u843D\u8431\u8475\u8466\u846B\u8449\u846C\u845B\u843C\u8435\u8461\u8463\u8469\u846D\u8446\u865E\u865C\u865F\u86F9\u8713\u8708\u8707\u8700\u86FE\u86FB\u8702\u8703\u8706\u870A\u8859\u88DF\u88D4\u88D9\u88DC\u88D8\u88DD\u88E1\u88CA\u88D5\u88D2\u899C\u89E3\u8A6B\u8A72\u8A73\u8A66\u8A69\u8A70\u8A87\u8A7C\u8A63\u8AA0\u8A71\u8A85\u8A6D\u8A62\u8A6E\u8A6C\u8A79\u8A7B\u8A3E\u8A68\u8C62\u8C8A\u8C89\u8CCA\u8CC7\u8CC8\u8CC4\u8CB2\u8CC3\u8CC2\u8CC5\u8DE1\u8DDF\u8DE8\u8DEF\u8DF3\u8DFA\u8DEA\u8DE4\u8DE6\u8EB2\u8F03\u8F09\u8EFE\u8F0A"],
["b940", "\u8F9F\u8FB2\u904B\u904A\u9053\u9042\u9054\u903C\u9055\u9050\u9047\u904F\u904E\u904D\u9051\u903E\u9041\u9112\u9117\u916C\u916A\u9169\u91C9\u9237\u9257\u9238\u923D\u9240\u923E\u925B\u924B\u9264\u9251\u9234\u9249\u924D\u9245\u9239\u923F\u925A\u9598\u9698\u9694\u9695\u96CD\u96CB\u96C9\u96CA\u96F7\u96FB\u96F9\u96F6\u9756\u9774\u9776\u9810\u9811\u9813\u980A\u9812\u980C\u98FC\u98F4"],
["b9a1", "\u98FD\u98FE\u99B3\u99B1\u99B4\u9AE1\u9CE9\u9E82\u9F0E\u9F13\u9F20\u50E7\u50EE\u50E5\u50D6\u50ED\u50DA\u50D5\u50CF\u50D1\u50F1\u50CE\u50E9\u5162\u51F3\u5283\u5282\u5331\u53AD\u55FE\u5600\u561B\u5617\u55FD\u5614\u5606\u5609\u560D\u560E\u55F7\u5616\u561F\u5608\u5610\u55F6\u5718\u5716\u5875\u587E\u5883\u5893\u588A\u5879\u5885\u587D\u58FD\u5925\u5922\u5924\u596A\u5969\u5AE1\u5AE6\u5AE9\u5AD7\u5AD6\u5AD8\u5AE3\u5B75\u5BDE\u5BE7\u5BE1\u5BE5\u5BE6\u5BE8\u5BE2\u5BE4\u5BDF\u5C0D\u5C62\u5D84\u5D87\u5E5B\u5E63\u5E55\u5E57\u5E54\u5ED3\u5ED6\u5F0A\u5F46\u5F70\u5FB9\u6147"],
["ba40", "\u613F\u614B\u6177\u6162\u6163\u615F\u615A\u6158\u6175\u622A\u6487\u6458\u6454\u64A4\u6478\u645F\u647A\u6451\u6467\u6434\u646D\u647B\u6572\u65A1\u65D7\u65D6\u66A2\u66A8\u669D\u699C\u69A8\u6995\u69C1\u69AE\u69D3\u69CB\u699B\u69B7\u69BB\u69AB\u69B4\u69D0\u69CD\u69AD\u69CC\u69A6\u69C3\u69A3\u6B49\u6B4C\u6C33\u6F33\u6F14\u6EFE\u6F13\u6EF4\u6F29\u6F3E\u6F20\u6F2C\u6F0F\u6F02\u6F22"],
["baa1", "\u6EFF\u6EEF\u6F06\u6F31\u6F38\u6F32\u6F23\u6F15\u6F2B\u6F2F\u6F88\u6F2A\u6EEC\u6F01\u6EF2\u6ECC\u6EF7\u7194\u7199\u717D\u718A\u7184\u7192\u723E\u7292\u7296\u7344\u7350\u7464\u7463\u746A\u7470\u746D\u7504\u7591\u7627\u760D\u760B\u7609\u7613\u76E1\u76E3\u7784\u777D\u777F\u7761\u78C1\u789F\u78A7\u78B3\u78A9\u78A3\u798E\u798F\u798D\u7A2E\u7A31\u7AAA\u7AA9\u7AED\u7AEF\u7BA1\u7B95\u7B8B\u7B75\u7B97\u7B9D\u7B94\u7B8F\u7BB8\u7B87\u7B84\u7CB9\u7CBD\u7CBE\u7DBB\u7DB0\u7D9C\u7DBD\u7DBE\u7DA0\u7DCA\u7DB4\u7DB2\u7DB1\u7DBA\u7DA2\u7DBF\u7DB5\u7DB8\u7DAD\u7DD2\u7DC7\u7DAC"],
["bb40", "\u7F70\u7FE0\u7FE1\u7FDF\u805E\u805A\u8087\u8150\u8180\u818F\u8188\u818A\u817F\u8182\u81E7\u81FA\u8207\u8214\u821E\u824B\u84C9\u84BF\u84C6\u84C4\u8499\u849E\u84B2\u849C\u84CB\u84B8\u84C0\u84D3\u8490\u84BC\u84D1\u84CA\u873F\u871C\u873B\u8722\u8725\u8734\u8718\u8755\u8737\u8729\u88F3\u8902\u88F4\u88F9\u88F8\u88FD\u88E8\u891A\u88EF\u8AA6\u8A8C\u8A9E\u8AA3\u8A8D\u8AA1\u8A93\u8AA4"],
["bba1", "\u8AAA\u8AA5\u8AA8\u8A98\u8A91\u8A9A\u8AA7\u8C6A\u8C8D\u8C8C\u8CD3\u8CD1\u8CD2\u8D6B\u8D99\u8D95\u8DFC\u8F14\u8F12\u8F15\u8F13\u8FA3\u9060\u9058\u905C\u9063\u9059\u905E\u9062\u905D\u905B\u9119\u9118\u911E\u9175\u9178\u9177\u9174\u9278\u9280\u9285\u9298\u9296\u927B\u9293\u929C\u92A8\u927C\u9291\u95A1\u95A8\u95A9\u95A3\u95A5\u95A4\u9699\u969C\u969B\u96CC\u96D2\u9700\u977C\u9785\u97F6\u9817\u9818\u98AF\u98B1\u9903\u9905\u990C\u9909\u99C1\u9AAF\u9AB0\u9AE6\u9B41\u9B42\u9CF4\u9CF6\u9CF3\u9EBC\u9F3B\u9F4A\u5104\u5100\u50FB\u50F5\u50F9\u5102\u5108\u5109\u5105\u51DC"],
["bc40", "\u5287\u5288\u5289\u528D\u528A\u52F0\u53B2\u562E\u563B\u5639\u5632\u563F\u5634\u5629\u5653\u564E\u5657\u5674\u5636\u562F\u5630\u5880\u589F\u589E\u58B3\u589C\u58AE\u58A9\u58A6\u596D\u5B09\u5AFB\u5B0B\u5AF5\u5B0C\u5B08\u5BEE\u5BEC\u5BE9\u5BEB\u5C64\u5C65\u5D9D\u5D94\u5E62\u5E5F\u5E61\u5EE2\u5EDA\u5EDF\u5EDD\u5EE3\u5EE0\u5F48\u5F71\u5FB7\u5FB5\u6176\u6167\u616E\u615D\u6155\u6182"],
["bca1", "\u617C\u6170\u616B\u617E\u61A7\u6190\u61AB\u618E\u61AC\u619A\u61A4\u6194\u61AE\u622E\u6469\u646F\u6479\u649E\u64B2\u6488\u6490\u64B0\u64A5\u6493\u6495\u64A9\u6492\u64AE\u64AD\u64AB\u649A\u64AC\u6499\u64A2\u64B3\u6575\u6577\u6578\u66AE\u66AB\u66B4\u66B1\u6A23\u6A1F\u69E8\u6A01\u6A1E\u6A19\u69FD\u6A21\u6A13\u6A0A\u69F3\u6A02\u6A05\u69ED\u6A11\u6B50\u6B4E\u6BA4\u6BC5\u6BC6\u6F3F\u6F7C\u6F84\u6F51\u6F66\u6F54\u6F86\u6F6D\u6F5B\u6F78\u6F6E\u6F8E\u6F7A\u6F70\u6F64\u6F97\u6F58\u6ED5\u6F6F\u6F60\u6F5F\u719F\u71AC\u71B1\u71A8\u7256\u729B\u734E\u7357\u7469\u748B\u7483"],
["bd40", "\u747E\u7480\u757F\u7620\u7629\u761F\u7624\u7626\u7621\u7622\u769A\u76BA\u76E4\u778E\u7787\u778C\u7791\u778B\u78CB\u78C5\u78BA\u78CA\u78BE\u78D5\u78BC\u78D0\u7A3F\u7A3C\u7A40\u7A3D\u7A37\u7A3B\u7AAF\u7AAE\u7BAD\u7BB1\u7BC4\u7BB4\u7BC6\u7BC7\u7BC1\u7BA0\u7BCC\u7CCA\u7DE0\u7DF4\u7DEF\u7DFB\u7DD8\u7DEC\u7DDD\u7DE8\u7DE3\u7DDA\u7DDE\u7DE9\u7D9E\u7DD9\u7DF2\u7DF9\u7F75\u7F77\u7FAF"],
["bda1", "\u7FE9\u8026\u819B\u819C\u819D\u81A0\u819A\u8198\u8517\u853D\u851A\u84EE\u852C\u852D\u8513\u8511\u8523\u8521\u8514\u84EC\u8525\u84FF\u8506\u8782\u8774\u8776\u8760\u8766\u8778\u8768\u8759\u8757\u874C\u8753\u885B\u885D\u8910\u8907\u8912\u8913\u8915\u890A\u8ABC\u8AD2\u8AC7\u8AC4\u8A95\u8ACB\u8AF8\u8AB2\u8AC9\u8AC2\u8ABF\u8AB0\u8AD6\u8ACD\u8AB6\u8AB9\u8ADB\u8C4C\u8C4E\u8C6C\u8CE0\u8CDE\u8CE6\u8CE4\u8CEC\u8CED\u8CE2\u8CE3\u8CDC\u8CEA\u8CE1\u8D6D\u8D9F\u8DA3\u8E2B\u8E10\u8E1D\u8E22\u8E0F\u8E29\u8E1F\u8E21\u8E1E\u8EBA\u8F1D\u8F1B\u8F1F\u8F29\u8F26\u8F2A\u8F1C\u8F1E"],
["be40", "\u8F25\u9069\u906E\u9068\u906D\u9077\u9130\u912D\u9127\u9131\u9187\u9189\u918B\u9183\u92C5\u92BB\u92B7\u92EA\u92AC\u92E4\u92C1\u92B3\u92BC\u92D2\u92C7\u92F0\u92B2\u95AD\u95B1\u9704\u9706\u9707\u9709\u9760\u978D\u978B\u978F\u9821\u982B\u981C\u98B3\u990A\u9913\u9912\u9918\u99DD\u99D0\u99DF\u99DB\u99D1\u99D5\u99D2\u99D9\u9AB7\u9AEE\u9AEF\u9B27\u9B45\u9B44\u9B77\u9B6F\u9D06\u9D09"],
["bea1", "\u9D03\u9EA9\u9EBE\u9ECE\u58A8\u9F52\u5112\u5118\u5114\u5110\u5115\u5180\u51AA\u51DD\u5291\u5293\u52F3\u5659\u566B\u5679\u5669\u5664\u5678\u566A\u5668\u5665\u5671\u566F\u566C\u5662\u5676\u58C1\u58BE\u58C7\u58C5\u596E\u5B1D\u5B34\u5B78\u5BF0\u5C0E\u5F4A\u61B2\u6191\u61A9\u618A\u61CD\u61B6\u61BE\u61CA\u61C8\u6230\u64C5\u64C1\u64CB\u64BB\u64BC\u64DA\u64C4\u64C7\u64C2\u64CD\u64BF\u64D2\u64D4\u64BE\u6574\u66C6\u66C9\u66B9\u66C4\u66C7\u66B8\u6A3D\u6A38\u6A3A\u6A59\u6A6B\u6A58\u6A39\u6A44\u6A62\u6A61\u6A4B\u6A47\u6A35\u6A5F\u6A48\u6B59\u6B77\u6C05\u6FC2\u6FB1\u6FA1"],
["bf40", "\u6FC3\u6FA4\u6FC1\u6FA7\u6FB3\u6FC0\u6FB9\u6FB6\u6FA6\u6FA0\u6FB4\u71BE\u71C9\u71D0\u71D2\u71C8\u71D5\u71B9\u71CE\u71D9\u71DC\u71C3\u71C4\u7368\u749C\u74A3\u7498\u749F\u749E\u74E2\u750C\u750D\u7634\u7638\u763A\u76E7\u76E5\u77A0\u779E\u779F\u77A5\u78E8\u78DA\u78EC\u78E7\u79A6\u7A4D\u7A4E\u7A46\u7A4C\u7A4B\u7ABA\u7BD9\u7C11\u7BC9\u7BE4\u7BDB\u7BE1\u7BE9\u7BE6\u7CD5\u7CD6\u7E0A"],
["bfa1", "\u7E11\u7E08\u7E1B\u7E23\u7E1E\u7E1D\u7E09\u7E10\u7F79\u7FB2\u7FF0\u7FF1\u7FEE\u8028\u81B3\u81A9\u81A8\u81FB\u8208\u8258\u8259\u854A\u8559\u8548\u8568\u8569\u8543\u8549\u856D\u856A\u855E\u8783\u879F\u879E\u87A2\u878D\u8861\u892A\u8932\u8925\u892B\u8921\u89AA\u89A6\u8AE6\u8AFA\u8AEB\u8AF1\u8B00\u8ADC\u8AE7\u8AEE\u8AFE\u8B01\u8B02\u8AF7\u8AED\u8AF3\u8AF6\u8AFC\u8C6B\u8C6D\u8C93\u8CF4\u8E44\u8E31\u8E34\u8E42\u8E39\u8E35\u8F3B\u8F2F\u8F38\u8F33\u8FA8\u8FA6\u9075\u9074\u9078\u9072\u907C\u907A\u9134\u9192\u9320\u9336\u92F8\u9333\u932F\u9322\u92FC\u932B\u9304\u931A"],
["c040", "\u9310\u9326\u9321\u9315\u932E\u9319\u95BB\u96A7\u96A8\u96AA\u96D5\u970E\u9711\u9716\u970D\u9713\u970F\u975B\u975C\u9766\u9798\u9830\u9838\u983B\u9837\u982D\u9839\u9824\u9910\u9928\u991E\u991B\u9921\u991A\u99ED\u99E2\u99F1\u9AB8\u9ABC\u9AFB\u9AED\u9B28\u9B91\u9D15\u9D23\u9D26\u9D28\u9D12\u9D1B\u9ED8\u9ED4\u9F8D\u9F9C\u512A\u511F\u5121\u5132\u52F5\u568E\u5680\u5690\u5685\u5687"],
["c0a1", "\u568F\u58D5\u58D3\u58D1\u58CE\u5B30\u5B2A\u5B24\u5B7A\u5C37\u5C68\u5DBC\u5DBA\u5DBD\u5DB8\u5E6B\u5F4C\u5FBD\u61C9\u61C2\u61C7\u61E6\u61CB\u6232\u6234\u64CE\u64CA\u64D8\u64E0\u64F0\u64E6\u64EC\u64F1\u64E2\u64ED\u6582\u6583\u66D9\u66D6\u6A80\u6A94\u6A84\u6AA2\u6A9C\u6ADB\u6AA3\u6A7E\u6A97\u6A90\u6AA0\u6B5C\u6BAE\u6BDA\u6C08\u6FD8\u6FF1\u6FDF\u6FE0\u6FDB\u6FE4\u6FEB\u6FEF\u6F80\u6FEC\u6FE1\u6FE9\u6FD5\u6FEE\u6FF0\u71E7\u71DF\u71EE\u71E6\u71E5\u71ED\u71EC\u71F4\u71E0\u7235\u7246\u7370\u7372\u74A9\u74B0\u74A6\u74A8\u7646\u7642\u764C\u76EA\u77B3\u77AA\u77B0\u77AC"],
["c140", "\u77A7\u77AD\u77EF\u78F7\u78FA\u78F4\u78EF\u7901\u79A7\u79AA\u7A57\u7ABF\u7C07\u7C0D\u7BFE\u7BF7\u7C0C\u7BE0\u7CE0\u7CDC\u7CDE\u7CE2\u7CDF\u7CD9\u7CDD\u7E2E\u7E3E\u7E46\u7E37\u7E32\u7E43\u7E2B\u7E3D\u7E31\u7E45\u7E41\u7E34\u7E39\u7E48\u7E35\u7E3F\u7E2F\u7F44\u7FF3\u7FFC\u8071\u8072\u8070\u806F\u8073\u81C6\u81C3\u81BA\u81C2\u81C0\u81BF\u81BD\u81C9\u81BE\u81E8\u8209\u8271\u85AA"],
["c1a1", "\u8584\u857E\u859C\u8591\u8594\u85AF\u859B\u8587\u85A8\u858A\u8667\u87C0\u87D1\u87B3\u87D2\u87C6\u87AB\u87BB\u87BA\u87C8\u87CB\u893B\u8936\u8944\u8938\u893D\u89AC\u8B0E\u8B17\u8B19\u8B1B\u8B0A\u8B20\u8B1D\u8B04\u8B10\u8C41\u8C3F\u8C73\u8CFA\u8CFD\u8CFC\u8CF8\u8CFB\u8DA8\u8E49\u8E4B\u8E48\u8E4A\u8F44\u8F3E\u8F42\u8F45\u8F3F\u907F\u907D\u9084\u9081\u9082\u9080\u9139\u91A3\u919E\u919C\u934D\u9382\u9328\u9375\u934A\u9365\u934B\u9318\u937E\u936C\u935B\u9370\u935A\u9354\u95CA\u95CB\u95CC\u95C8\u95C6\u96B1\u96B8\u96D6\u971C\u971E\u97A0\u97D3\u9846\u98B6\u9935\u9A01"],
["c240", "\u99FF\u9BAE\u9BAB\u9BAA\u9BAD\u9D3B\u9D3F\u9E8B\u9ECF\u9EDE\u9EDC\u9EDD\u9EDB\u9F3E\u9F4B\u53E2\u5695\u56AE\u58D9\u58D8\u5B38\u5F5D\u61E3\u6233\u64F4\u64F2\u64FE\u6506\u64FA\u64FB\u64F7\u65B7\u66DC\u6726\u6AB3\u6AAC\u6AC3\u6ABB\u6AB8\u6AC2\u6AAE\u6AAF\u6B5F\u6B78\u6BAF\u7009\u700B\u6FFE\u7006\u6FFA\u7011\u700F\u71FB\u71FC\u71FE\u71F8\u7377\u7375\u74A7\u74BF\u7515\u7656\u7658"],
["c2a1", "\u7652\u77BD\u77BF\u77BB\u77BC\u790E\u79AE\u7A61\u7A62\u7A60\u7AC4\u7AC5\u7C2B\u7C27\u7C2A\u7C1E\u7C23\u7C21\u7CE7\u7E54\u7E55\u7E5E\u7E5A\u7E61\u7E52\u7E59\u7F48\u7FF9\u7FFB\u8077\u8076\u81CD\u81CF\u820A\u85CF\u85A9\u85CD\u85D0\u85C9\u85B0\u85BA\u85B9\u85A6\u87EF\u87EC\u87F2\u87E0\u8986\u89B2\u89F4\u8B28\u8B39\u8B2C\u8B2B\u8C50\u8D05\u8E59\u8E63\u8E66\u8E64\u8E5F\u8E55\u8EC0\u8F49\u8F4D\u9087\u9083\u9088\u91AB\u91AC\u91D0\u9394\u938A\u9396\u93A2\u93B3\u93AE\u93AC\u93B0\u9398\u939A\u9397\u95D4\u95D6\u95D0\u95D5\u96E2\u96DC\u96D9\u96DB\u96DE\u9724\u97A3\u97A6"],
["c340", "\u97AD\u97F9\u984D\u984F\u984C\u984E\u9853\u98BA\u993E\u993F\u993D\u992E\u99A5\u9A0E\u9AC1\u9B03\u9B06\u9B4F\u9B4E\u9B4D\u9BCA\u9BC9\u9BFD\u9BC8\u9BC0\u9D51\u9D5D\u9D60\u9EE0\u9F15\u9F2C\u5133\u56A5\u58DE\u58DF\u58E2\u5BF5\u9F90\u5EEC\u61F2\u61F7\u61F6\u61F5\u6500\u650F\u66E0\u66DD\u6AE5\u6ADD\u6ADA\u6AD3\u701B\u701F\u7028\u701A\u701D\u7015\u7018\u7206\u720D\u7258\u72A2\u7378"],
["c3a1", "\u737A\u74BD\u74CA\u74E3\u7587\u7586\u765F\u7661\u77C7\u7919\u79B1\u7A6B\u7A69\u7C3E\u7C3F\u7C38\u7C3D\u7C37\u7C40\u7E6B\u7E6D\u7E79\u7E69\u7E6A\u7F85\u7E73\u7FB6\u7FB9\u7FB8\u81D8\u85E9\u85DD\u85EA\u85D5\u85E4\u85E5\u85F7\u87FB\u8805\u880D\u87F9\u87FE\u8960\u895F\u8956\u895E\u8B41\u8B5C\u8B58\u8B49\u8B5A\u8B4E\u8B4F\u8B46\u8B59\u8D08\u8D0A\u8E7C\u8E72\u8E87\u8E76\u8E6C\u8E7A\u8E74\u8F54\u8F4E\u8FAD\u908A\u908B\u91B1\u91AE\u93E1\u93D1\u93DF\u93C3\u93C8\u93DC\u93DD\u93D6\u93E2\u93CD\u93D8\u93E4\u93D7\u93E8\u95DC\u96B4\u96E3\u972A\u9727\u9761\u97DC\u97FB\u985E"],
["c440", "\u9858\u985B\u98BC\u9945\u9949\u9A16\u9A19\u9B0D\u9BE8\u9BE7\u9BD6\u9BDB\u9D89\u9D61\u9D72\u9D6A\u9D6C\u9E92\u9E97\u9E93\u9EB4\u52F8\u56A8\u56B7\u56B6\u56B4\u56BC\u58E4\u5B40\u5B43\u5B7D\u5BF6\u5DC9\u61F8\u61FA\u6518\u6514\u6519\u66E6\u6727\u6AEC\u703E\u7030\u7032\u7210\u737B\u74CF\u7662\u7665\u7926\u792A\u792C\u792B\u7AC7\u7AF6\u7C4C\u7C43\u7C4D\u7CEF\u7CF0\u8FAE\u7E7D\u7E7C"],
["c4a1", "\u7E82\u7F4C\u8000\u81DA\u8266\u85FB\u85F9\u8611\u85FA\u8606\u860B\u8607\u860A\u8814\u8815\u8964\u89BA\u89F8\u8B70\u8B6C\u8B66\u8B6F\u8B5F\u8B6B\u8D0F\u8D0D\u8E89\u8E81\u8E85\u8E82\u91B4\u91CB\u9418\u9403\u93FD\u95E1\u9730\u98C4\u9952\u9951\u99A8\u9A2B\u9A30\u9A37\u9A35\u9C13\u9C0D\u9E79\u9EB5\u9EE8\u9F2F\u9F5F\u9F63\u9F61\u5137\u5138\u56C1\u56C0\u56C2\u5914\u5C6C\u5DCD\u61FC\u61FE\u651D\u651C\u6595\u66E9\u6AFB\u6B04\u6AFA\u6BB2\u704C\u721B\u72A7\u74D6\u74D4\u7669\u77D3\u7C50\u7E8F\u7E8C\u7FBC\u8617\u862D\u861A\u8823\u8822\u8821\u881F\u896A\u896C\u89BD\u8B74"],
["c540", "\u8B77\u8B7D\u8D13\u8E8A\u8E8D\u8E8B\u8F5F\u8FAF\u91BA\u942E\u9433\u9435\u943A\u9438\u9432\u942B\u95E2\u9738\u9739\u9732\u97FF\u9867\u9865\u9957\u9A45\u9A43\u9A40\u9A3E\u9ACF\u9B54\u9B51\u9C2D\u9C25\u9DAF\u9DB4\u9DC2\u9DB8\u9E9D\u9EEF\u9F19\u9F5C\u9F66\u9F67\u513C\u513B\u56C8\u56CA\u56C9\u5B7F\u5DD4\u5DD2\u5F4E\u61FF\u6524\u6B0A\u6B61\u7051\u7058\u7380\u74E4\u758A\u766E\u766C"],
["c5a1", "\u79B3\u7C60\u7C5F\u807E\u807D\u81DF\u8972\u896F\u89FC\u8B80\u8D16\u8D17\u8E91\u8E93\u8F61\u9148\u9444\u9451\u9452\u973D\u973E\u97C3\u97C1\u986B\u9955\u9A55\u9A4D\u9AD2\u9B1A\u9C49\u9C31\u9C3E\u9C3B\u9DD3\u9DD7\u9F34\u9F6C\u9F6A\u9F94\u56CC\u5DD6\u6200\u6523\u652B\u652A\u66EC\u6B10\u74DA\u7ACA\u7C64\u7C63\u7C65\u7E93\u7E96\u7E94\u81E2\u8638\u863F\u8831\u8B8A\u9090\u908F\u9463\u9460\u9464\u9768\u986F\u995C\u9A5A\u9A5B\u9A57\u9AD3\u9AD4\u9AD1\u9C54\u9C57\u9C56\u9DE5\u9E9F\u9EF4\u56D1\u58E9\u652C\u705E\u7671\u7672\u77D7\u7F50\u7F88\u8836\u8839\u8862\u8B93\u8B92"],
["c640", "\u8B96\u8277\u8D1B\u91C0\u946A\u9742\u9748\u9744\u97C6\u9870\u9A5F\u9B22\u9B58\u9C5F\u9DF9\u9DFA\u9E7C\u9E7D\u9F07\u9F77\u9F72\u5EF3\u6B16\u7063\u7C6C\u7C6E\u883B\u89C0\u8EA1\u91C1\u9472\u9470\u9871\u995E\u9AD6\u9B23\u9ECC\u7064\u77DA\u8B9A\u9477\u97C9\u9A62\u9A65\u7E9C\u8B9C\u8EAA\u91C5\u947D\u947E\u947C\u9C77\u9C78\u9EF7\u8C54\u947F\u9E1A\u7228\u9A6A\u9B31\u9E1B\u9E1E\u7C72"],
["c940", "\u4E42\u4E5C\u51F5\u531A\u5382\u4E07\u4E0C\u4E47\u4E8D\u56D7\uFA0C\u5C6E\u5F73\u4E0F\u5187\u4E0E\u4E2E\u4E93\u4EC2\u4EC9\u4EC8\u5198\u52FC\u536C\u53B9\u5720\u5903\u592C\u5C10\u5DFF\u65E1\u6BB3\u6BCC\u6C14\u723F\u4E31\u4E3C\u4EE8\u4EDC\u4EE9\u4EE1\u4EDD\u4EDA\u520C\u531C\u534C\u5722\u5723\u5917\u592F\u5B81\u5B84\u5C12\u5C3B\u5C74\u5C73\u5E04\u5E80\u5E82\u5FC9\u6209\u6250\u6C15"],
["c9a1", "\u6C36\u6C43\u6C3F\u6C3B\u72AE\u72B0\u738A\u79B8\u808A\u961E\u4F0E\u4F18\u4F2C\u4EF5\u4F14\u4EF1\u4F00\u4EF7\u4F08\u4F1D\u4F02\u4F05\u4F22\u4F13\u4F04\u4EF4\u4F12\u51B1\u5213\u5209\u5210\u52A6\u5322\u531F\u534D\u538A\u5407\u56E1\u56DF\u572E\u572A\u5734\u593C\u5980\u597C\u5985\u597B\u597E\u5977\u597F\u5B56\u5C15\u5C25\u5C7C\u5C7A\u5C7B\u5C7E\u5DDF\u5E75\u5E84\u5F02\u5F1A\u5F74\u5FD5\u5FD4\u5FCF\u625C\u625E\u6264\u6261\u6266\u6262\u6259\u6260\u625A\u6265\u65EF\u65EE\u673E\u6739\u6738\u673B\u673A\u673F\u673C\u6733\u6C18\u6C46\u6C52\u6C5C\u6C4F\u6C4A\u6C54\u6C4B"],
["ca40", "\u6C4C\u7071\u725E\u72B4\u72B5\u738E\u752A\u767F\u7A75\u7F51\u8278\u827C\u8280\u827D\u827F\u864D\u897E\u9099\u9097\u9098\u909B\u9094\u9622\u9624\u9620\u9623\u4F56\u4F3B\u4F62\u4F49\u4F53\u4F64\u4F3E\u4F67\u4F52\u4F5F\u4F41\u4F58\u4F2D\u4F33\u4F3F\u4F61\u518F\u51B9\u521C\u521E\u5221\u52AD\u52AE\u5309\u5363\u5372\u538E\u538F\u5430\u5437\u542A\u5454\u5445\u5419\u541C\u5425\u5418"],
["caa1", "\u543D\u544F\u5441\u5428\u5424\u5447\u56EE\u56E7\u56E5\u5741\u5745\u574C\u5749\u574B\u5752\u5906\u5940\u59A6\u5998\u59A0\u5997\u598E\u59A2\u5990\u598F\u59A7\u59A1\u5B8E\u5B92\u5C28\u5C2A\u5C8D\u5C8F\u5C88\u5C8B\u5C89\u5C92\u5C8A\u5C86\u5C93\u5C95\u5DE0\u5E0A\u5E0E\u5E8B\u5E89\u5E8C\u5E88\u5E8D\u5F05\u5F1D\u5F78\u5F76\u5FD2\u5FD1\u5FD0\u5FED\u5FE8\u5FEE\u5FF3\u5FE1\u5FE4\u5FE3\u5FFA\u5FEF\u5FF7\u5FFB\u6000\u5FF4\u623A\u6283\u628C\u628E\u628F\u6294\u6287\u6271\u627B\u627A\u6270\u6281\u6288\u6277\u627D\u6272\u6274\u6537\u65F0\u65F4\u65F3\u65F2\u65F5\u6745\u6747"],
["cb40", "\u6759\u6755\u674C\u6748\u675D\u674D\u675A\u674B\u6BD0\u6C19\u6C1A\u6C78\u6C67\u6C6B\u6C84\u6C8B\u6C8F\u6C71\u6C6F\u6C69\u6C9A\u6C6D\u6C87\u6C95\u6C9C\u6C66\u6C73\u6C65\u6C7B\u6C8E\u7074\u707A\u7263\u72BF\u72BD\u72C3\u72C6\u72C1\u72BA\u72C5\u7395\u7397\u7393\u7394\u7392\u753A\u7539\u7594\u7595\u7681\u793D\u8034\u8095\u8099\u8090\u8092\u809C\u8290\u828F\u8285\u828E\u8291\u8293"],
["cba1", "\u828A\u8283\u8284\u8C78\u8FC9\u8FBF\u909F\u90A1\u90A5\u909E\u90A7\u90A0\u9630\u9628\u962F\u962D\u4E33\u4F98\u4F7C\u4F85\u4F7D\u4F80\u4F87\u4F76\u4F74\u4F89\u4F84\u4F77\u4F4C\u4F97\u4F6A\u4F9A\u4F79\u4F81\u4F78\u4F90\u4F9C\u4F94\u4F9E\u4F92\u4F82\u4F95\u4F6B\u4F6E\u519E\u51BC\u51BE\u5235\u5232\u5233\u5246\u5231\u52BC\u530A\u530B\u533C\u5392\u5394\u5487\u547F\u5481\u5491\u5482\u5488\u546B\u547A\u547E\u5465\u546C\u5474\u5466\u548D\u546F\u5461\u5460\u5498\u5463\u5467\u5464\u56F7\u56F9\u576F\u5772\u576D\u576B\u5771\u5770\u5776\u5780\u5775\u577B\u5773\u5774\u5762"],
["cc40", "\u5768\u577D\u590C\u5945\u59B5\u59BA\u59CF\u59CE\u59B2\u59CC\u59C1\u59B6\u59BC\u59C3\u59D6\u59B1\u59BD\u59C0\u59C8\u59B4\u59C7\u5B62\u5B65\u5B93\u5B95\u5C44\u5C47\u5CAE\u5CA4\u5CA0\u5CB5\u5CAF\u5CA8\u5CAC\u5C9F\u5CA3\u5CAD\u5CA2\u5CAA\u5CA7\u5C9D\u5CA5\u5CB6\u5CB0\u5CA6\u5E17\u5E14\u5E19\u5F28\u5F22\u5F23\u5F24\u5F54\u5F82\u5F7E\u5F7D\u5FDE\u5FE5\u602D\u6026\u6019\u6032\u600B"],
["cca1", "\u6034\u600A\u6017\u6033\u601A\u601E\u602C\u6022\u600D\u6010\u602E\u6013\u6011\u600C\u6009\u601C\u6214\u623D\u62AD\u62B4\u62D1\u62BE\u62AA\u62B6\u62CA\u62AE\u62B3\u62AF\u62BB\u62A9\u62B0\u62B8\u653D\u65A8\u65BB\u6609\u65FC\u6604\u6612\u6608\u65FB\u6603\u660B\u660D\u6605\u65FD\u6611\u6610\u66F6\u670A\u6785\u676C\u678E\u6792\u6776\u677B\u6798\u6786\u6784\u6774\u678D\u678C\u677A\u679F\u6791\u6799\u6783\u677D\u6781\u6778\u6779\u6794\u6B25\u6B80\u6B7E\u6BDE\u6C1D\u6C93\u6CEC\u6CEB\u6CEE\u6CD9\u6CB6\u6CD4\u6CAD\u6CE7\u6CB7\u6CD0\u6CC2\u6CBA\u6CC3\u6CC6\u6CED\u6CF2"],
["cd40", "\u6CD2\u6CDD\u6CB4\u6C8A\u6C9D\u6C80\u6CDE\u6CC0\u6D30\u6CCD\u6CC7\u6CB0\u6CF9\u6CCF\u6CE9\u6CD1\u7094\u7098\u7085\u7093\u7086\u7084\u7091\u7096\u7082\u709A\u7083\u726A\u72D6\u72CB\u72D8\u72C9\u72DC\u72D2\u72D4\u72DA\u72CC\u72D1\u73A4\u73A1\u73AD\u73A6\u73A2\u73A0\u73AC\u739D\u74DD\u74E8\u753F\u7540\u753E\u758C\u7598\u76AF\u76F3\u76F1\u76F0\u76F5\u77F8\u77FC\u77F9\u77FB\u77FA"],
["cda1", "\u77F7\u7942\u793F\u79C5\u7A78\u7A7B\u7AFB\u7C75\u7CFD\u8035\u808F\u80AE\u80A3\u80B8\u80B5\u80AD\u8220\u82A0\u82C0\u82AB\u829A\u8298\u829B\u82B5\u82A7\u82AE\u82BC\u829E\u82BA\u82B4\u82A8\u82A1\u82A9\u82C2\u82A4\u82C3\u82B6\u82A2\u8670\u866F\u866D\u866E\u8C56\u8FD2\u8FCB\u8FD3\u8FCD\u8FD6\u8FD5\u8FD7\u90B2\u90B4\u90AF\u90B3\u90B0\u9639\u963D\u963C\u963A\u9643\u4FCD\u4FC5\u4FD3\u4FB2\u4FC9\u4FCB\u4FC1\u4FD4\u4FDC\u4FD9\u4FBB\u4FB3\u4FDB\u4FC7\u4FD6\u4FBA\u4FC0\u4FB9\u4FEC\u5244\u5249\u52C0\u52C2\u533D\u537C\u5397\u5396\u5399\u5398\u54BA\u54A1\u54AD\u54A5\u54CF"],
["ce40", "\u54C3\u830D\u54B7\u54AE\u54D6\u54B6\u54C5\u54C6\u54A0\u5470\u54BC\u54A2\u54BE\u5472\u54DE\u54B0\u57B5\u579E\u579F\u57A4\u578C\u5797\u579D\u579B\u5794\u5798\u578F\u5799\u57A5\u579A\u5795\u58F4\u590D\u5953\u59E1\u59DE\u59EE\u5A00\u59F1\u59DD\u59FA\u59FD\u59FC\u59F6\u59E4\u59F2\u59F7\u59DB\u59E9\u59F3\u59F5\u59E0\u59FE\u59F4\u59ED\u5BA8\u5C4C\u5CD0\u5CD8\u5CCC\u5CD7\u5CCB\u5CDB"],
["cea1", "\u5CDE\u5CDA\u5CC9\u5CC7\u5CCA\u5CD6\u5CD3\u5CD4\u5CCF\u5CC8\u5CC6\u5CCE\u5CDF\u5CF8\u5DF9\u5E21\u5E22\u5E23\u5E20\u5E24\u5EB0\u5EA4\u5EA2\u5E9B\u5EA3\u5EA5\u5F07\u5F2E\u5F56\u5F86\u6037\u6039\u6054\u6072\u605E\u6045\u6053\u6047\u6049\u605B\u604C\u6040\u6042\u605F\u6024\u6044\u6058\u6066\u606E\u6242\u6243\u62CF\u630D\u630B\u62F5\u630E\u6303\u62EB\u62F9\u630F\u630C\u62F8\u62F6\u6300\u6313\u6314\u62FA\u6315\u62FB\u62F0\u6541\u6543\u65AA\u65BF\u6636\u6621\u6632\u6635\u661C\u6626\u6622\u6633\u662B\u663A\u661D\u6634\u6639\u662E\u670F\u6710\u67C1\u67F2\u67C8\u67BA"],
["cf40", "\u67DC\u67BB\u67F8\u67D8\u67C0\u67B7\u67C5\u67EB\u67E4\u67DF\u67B5\u67CD\u67B3\u67F7\u67F6\u67EE\u67E3\u67C2\u67B9\u67CE\u67E7\u67F0\u67B2\u67FC\u67C6\u67ED\u67CC\u67AE\u67E6\u67DB\u67FA\u67C9\u67CA\u67C3\u67EA\u67CB\u6B28\u6B82\u6B84\u6BB6\u6BD6\u6BD8\u6BE0\u6C20\u6C21\u6D28\u6D34\u6D2D\u6D1F\u6D3C\u6D3F\u6D12\u6D0A\u6CDA\u6D33\u6D04\u6D19\u6D3A\u6D1A\u6D11\u6D00\u6D1D\u6D42"],
["cfa1", "\u6D01\u6D18\u6D37\u6D03\u6D0F\u6D40\u6D07\u6D20\u6D2C\u6D08\u6D22\u6D09\u6D10\u70B7\u709F\u70BE\u70B1\u70B0\u70A1\u70B4\u70B5\u70A9\u7241\u7249\u724A\u726C\u7270\u7273\u726E\u72CA\u72E4\u72E8\u72EB\u72DF\u72EA\u72E6\u72E3\u7385\u73CC\u73C2\u73C8\u73C5\u73B9\u73B6\u73B5\u73B4\u73EB\u73BF\u73C7\u73BE\u73C3\u73C6\u73B8\u73CB\u74EC\u74EE\u752E\u7547\u7548\u75A7\u75AA\u7679\u76C4\u7708\u7703\u7704\u7705\u770A\u76F7\u76FB\u76FA\u77E7\u77E8\u7806\u7811\u7812\u7805\u7810\u780F\u780E\u7809\u7803\u7813\u794A\u794C\u794B\u7945\u7944\u79D5\u79CD\u79CF\u79D6\u79CE\u7A80"],
["d040", "\u7A7E\u7AD1\u7B00\u7B01\u7C7A\u7C78\u7C79\u7C7F\u7C80\u7C81\u7D03\u7D08\u7D01\u7F58\u7F91\u7F8D\u7FBE\u8007\u800E\u800F\u8014\u8037\u80D8\u80C7\u80E0\u80D1\u80C8\u80C2\u80D0\u80C5\u80E3\u80D9\u80DC\u80CA\u80D5\u80C9\u80CF\u80D7\u80E6\u80CD\u81FF\u8221\u8294\u82D9\u82FE\u82F9\u8307\u82E8\u8300\u82D5\u833A\u82EB\u82D6\u82F4\u82EC\u82E1\u82F2\u82F5\u830C\u82FB\u82F6\u82F0\u82EA"],
["d0a1", "\u82E4\u82E0\u82FA\u82F3\u82ED\u8677\u8674\u867C\u8673\u8841\u884E\u8867\u886A\u8869\u89D3\u8A04\u8A07\u8D72\u8FE3\u8FE1\u8FEE\u8FE0\u90F1\u90BD\u90BF\u90D5\u90C5\u90BE\u90C7\u90CB\u90C8\u91D4\u91D3\u9654\u964F\u9651\u9653\u964A\u964E\u501E\u5005\u5007\u5013\u5022\u5030\u501B\u4FF5\u4FF4\u5033\u5037\u502C\u4FF6\u4FF7\u5017\u501C\u5020\u5027\u5035\u502F\u5031\u500E\u515A\u5194\u5193\u51CA\u51C4\u51C5\u51C8\u51CE\u5261\u525A\u5252\u525E\u525F\u5255\u5262\u52CD\u530E\u539E\u5526\u54E2\u5517\u5512\u54E7\u54F3\u54E4\u551A\u54FF\u5504\u5508\u54EB\u5511\u5505\u54F1"],
["d140", "\u550A\u54FB\u54F7\u54F8\u54E0\u550E\u5503\u550B\u5701\u5702\u57CC\u5832\u57D5\u57D2\u57BA\u57C6\u57BD\u57BC\u57B8\u57B6\u57BF\u57C7\u57D0\u57B9\u57C1\u590E\u594A\u5A19\u5A16\u5A2D\u5A2E\u5A15\u5A0F\u5A17\u5A0A\u5A1E\u5A33\u5B6C\u5BA7\u5BAD\u5BAC\u5C03\u5C56\u5C54\u5CEC\u5CFF\u5CEE\u5CF1\u5CF7\u5D00\u5CF9\u5E29\u5E28\u5EA8\u5EAE\u5EAA\u5EAC\u5F33\u5F30\u5F67\u605D\u605A\u6067"],
["d1a1", "\u6041\u60A2\u6088\u6080\u6092\u6081\u609D\u6083\u6095\u609B\u6097\u6087\u609C\u608E\u6219\u6246\u62F2\u6310\u6356\u632C\u6344\u6345\u6336\u6343\u63E4\u6339\u634B\u634A\u633C\u6329\u6341\u6334\u6358\u6354\u6359\u632D\u6347\u6333\u635A\u6351\u6338\u6357\u6340\u6348\u654A\u6546\u65C6\u65C3\u65C4\u65C2\u664A\u665F\u6647\u6651\u6712\u6713\u681F\u681A\u6849\u6832\u6833\u683B\u684B\u684F\u6816\u6831\u681C\u6835\u682B\u682D\u682F\u684E\u6844\u6834\u681D\u6812\u6814\u6826\u6828\u682E\u684D\u683A\u6825\u6820\u6B2C\u6B2F\u6B2D\u6B31\u6B34\u6B6D\u8082\u6B88\u6BE6\u6BE4"],
["d240", "\u6BE8\u6BE3\u6BE2\u6BE7\u6C25\u6D7A\u6D63\u6D64\u6D76\u6D0D\u6D61\u6D92\u6D58\u6D62\u6D6D\u6D6F\u6D91\u6D8D\u6DEF\u6D7F\u6D86\u6D5E\u6D67\u6D60\u6D97\u6D70\u6D7C\u6D5F\u6D82\u6D98\u6D2F\u6D68\u6D8B\u6D7E\u6D80\u6D84\u6D16\u6D83\u6D7B\u6D7D\u6D75\u6D90\u70DC\u70D3\u70D1\u70DD\u70CB\u7F39\u70E2\u70D7\u70D2\u70DE\u70E0\u70D4\u70CD\u70C5\u70C6\u70C7\u70DA\u70CE\u70E1\u7242\u7278"],
["d2a1", "\u7277\u7276\u7300\u72FA\u72F4\u72FE\u72F6\u72F3\u72FB\u7301\u73D3\u73D9\u73E5\u73D6\u73BC\u73E7\u73E3\u73E9\u73DC\u73D2\u73DB\u73D4\u73DD\u73DA\u73D7\u73D8\u73E8\u74DE\u74DF\u74F4\u74F5\u7521\u755B\u755F\u75B0\u75C1\u75BB\u75C4\u75C0\u75BF\u75B6\u75BA\u768A\u76C9\u771D\u771B\u7710\u7713\u7712\u7723\u7711\u7715\u7719\u771A\u7722\u7727\u7823\u782C\u7822\u7835\u782F\u7828\u782E\u782B\u7821\u7829\u7833\u782A\u7831\u7954\u795B\u794F\u795C\u7953\u7952\u7951\u79EB\u79EC\u79E0\u79EE\u79ED\u79EA\u79DC\u79DE\u79DD\u7A86\u7A89\u7A85\u7A8B\u7A8C\u7A8A\u7A87\u7AD8\u7B10"],
["d340", "\u7B04\u7B13\u7B05\u7B0F\u7B08\u7B0A\u7B0E\u7B09\u7B12\u7C84\u7C91\u7C8A\u7C8C\u7C88\u7C8D\u7C85\u7D1E\u7D1D\u7D11\u7D0E\u7D18\u7D16\u7D13\u7D1F\u7D12\u7D0F\u7D0C\u7F5C\u7F61\u7F5E\u7F60\u7F5D\u7F5B\u7F96\u7F92\u7FC3\u7FC2\u7FC0\u8016\u803E\u8039\u80FA\u80F2\u80F9\u80F5\u8101\u80FB\u8100\u8201\u822F\u8225\u8333\u832D\u8344\u8319\u8351\u8325\u8356\u833F\u8341\u8326\u831C\u8322"],
["d3a1", "\u8342\u834E\u831B\u832A\u8308\u833C\u834D\u8316\u8324\u8320\u8337\u832F\u8329\u8347\u8345\u834C\u8353\u831E\u832C\u834B\u8327\u8348\u8653\u8652\u86A2\u86A8\u8696\u868D\u8691\u869E\u8687\u8697\u8686\u868B\u869A\u8685\u86A5\u8699\u86A1\u86A7\u8695\u8698\u868E\u869D\u8690\u8694\u8843\u8844\u886D\u8875\u8876\u8872\u8880\u8871\u887F\u886F\u8883\u887E\u8874\u887C\u8A12\u8C47\u8C57\u8C7B\u8CA4\u8CA3\u8D76\u8D78\u8DB5\u8DB7\u8DB6\u8ED1\u8ED3\u8FFE\u8FF5\u9002\u8FFF\u8FFB\u9004\u8FFC\u8FF6\u90D6\u90E0\u90D9\u90DA\u90E3\u90DF\u90E5\u90D8\u90DB\u90D7\u90DC\u90E4\u9150"],
["d440", "\u914E\u914F\u91D5\u91E2\u91DA\u965C\u965F\u96BC\u98E3\u9ADF\u9B2F\u4E7F\u5070\u506A\u5061\u505E\u5060\u5053\u504B\u505D\u5072\u5048\u504D\u5041\u505B\u504A\u5062\u5015\u5045\u505F\u5069\u506B\u5063\u5064\u5046\u5040\u506E\u5073\u5057\u5051\u51D0\u526B\u526D\u526C\u526E\u52D6\u52D3\u532D\u539C\u5575\u5576\u553C\u554D\u5550\u5534\u552A\u5551\u5562\u5536\u5535\u5530\u5552\u5545"],
["d4a1", "\u550C\u5532\u5565\u554E\u5539\u5548\u552D\u553B\u5540\u554B\u570A\u5707\u57FB\u5814\u57E2\u57F6\u57DC\u57F4\u5800\u57ED\u57FD\u5808\u57F8\u580B\u57F3\u57CF\u5807\u57EE\u57E3\u57F2\u57E5\u57EC\u57E1\u580E\u57FC\u5810\u57E7\u5801\u580C\u57F1\u57E9\u57F0\u580D\u5804\u595C\u5A60\u5A58\u5A55\u5A67\u5A5E\u5A38\u5A35\u5A6D\u5A50\u5A5F\u5A65\u5A6C\u5A53\u5A64\u5A57\u5A43\u5A5D\u5A52\u5A44\u5A5B\u5A48\u5A8E\u5A3E\u5A4D\u5A39\u5A4C\u5A70\u5A69\u5A47\u5A51\u5A56\u5A42\u5A5C\u5B72\u5B6E\u5BC1\u5BC0\u5C59\u5D1E\u5D0B\u5D1D\u5D1A\u5D20\u5D0C\u5D28\u5D0D\u5D26\u5D25\u5D0F"],
["d540", "\u5D30\u5D12\u5D23\u5D1F\u5D2E\u5E3E\u5E34\u5EB1\u5EB4\u5EB9\u5EB2\u5EB3\u5F36\u5F38\u5F9B\u5F96\u5F9F\u608A\u6090\u6086\u60BE\u60B0\u60BA\u60D3\u60D4\u60CF\u60E4\u60D9\u60DD\u60C8\u60B1\u60DB\u60B7\u60CA\u60BF\u60C3\u60CD\u60C0\u6332\u6365\u638A\u6382\u637D\u63BD\u639E\u63AD\u639D\u6397\u63AB\u638E\u636F\u6387\u6390\u636E\u63AF\u6375\u639C\u636D\u63AE\u637C\u63A4\u633B\u639F"],
["d5a1", "\u6378\u6385\u6381\u6391\u638D\u6370\u6553\u65CD\u6665\u6661\u665B\u6659\u665C\u6662\u6718\u6879\u6887\u6890\u689C\u686D\u686E\u68AE\u68AB\u6956\u686F\u68A3\u68AC\u68A9\u6875\u6874\u68B2\u688F\u6877\u6892\u687C\u686B\u6872\u68AA\u6880\u6871\u687E\u689B\u6896\u688B\u68A0\u6889\u68A4\u6878\u687B\u6891\u688C\u688A\u687D\u6B36\u6B33\u6B37\u6B38\u6B91\u6B8F\u6B8D\u6B8E\u6B8C\u6C2A\u6DC0\u6DAB\u6DB4\u6DB3\u6E74\u6DAC\u6DE9\u6DE2\u6DB7\u6DF6\u6DD4\u6E00\u6DC8\u6DE0\u6DDF\u6DD6\u6DBE\u6DE5\u6DDC\u6DDD\u6DDB\u6DF4\u6DCA\u6DBD\u6DED\u6DF0\u6DBA\u6DD5\u6DC2\u6DCF\u6DC9"],
["d640", "\u6DD0\u6DF2\u6DD3\u6DFD\u6DD7\u6DCD\u6DE3\u6DBB\u70FA\u710D\u70F7\u7117\u70F4\u710C\u70F0\u7104\u70F3\u7110\u70FC\u70FF\u7106\u7113\u7100\u70F8\u70F6\u710B\u7102\u710E\u727E\u727B\u727C\u727F\u731D\u7317\u7307\u7311\u7318\u730A\u7308\u72FF\u730F\u731E\u7388\u73F6\u73F8\u73F5\u7404\u7401\u73FD\u7407\u7400\u73FA\u73FC\u73FF\u740C\u740B\u73F4\u7408\u7564\u7563\u75CE\u75D2\u75CF"],
["d6a1", "\u75CB\u75CC\u75D1\u75D0\u768F\u7689\u76D3\u7739\u772F\u772D\u7731\u7732\u7734\u7733\u773D\u7725\u773B\u7735\u7848\u7852\u7849\u784D\u784A\u784C\u7826\u7845\u7850\u7964\u7967\u7969\u796A\u7963\u796B\u7961\u79BB\u79FA\u79F8\u79F6\u79F7\u7A8F\u7A94\u7A90\u7B35\u7B47\u7B34\u7B25\u7B30\u7B22\u7B24\u7B33\u7B18\u7B2A\u7B1D\u7B31\u7B2B\u7B2D\u7B2F\u7B32\u7B38\u7B1A\u7B23\u7C94\u7C98\u7C96\u7CA3\u7D35\u7D3D\u7D38\u7D36\u7D3A\u7D45\u7D2C\u7D29\u7D41\u7D47\u7D3E\u7D3F\u7D4A\u7D3B\u7D28\u7F63\u7F95\u7F9C\u7F9D\u7F9B\u7FCA\u7FCB\u7FCD\u7FD0\u7FD1\u7FC7\u7FCF\u7FC9\u801F"],
["d740", "\u801E\u801B\u8047\u8043\u8048\u8118\u8125\u8119\u811B\u812D\u811F\u812C\u811E\u8121\u8115\u8127\u811D\u8122\u8211\u8238\u8233\u823A\u8234\u8232\u8274\u8390\u83A3\u83A8\u838D\u837A\u8373\u83A4\u8374\u838F\u8381\u8395\u8399\u8375\u8394\u83A9\u837D\u8383\u838C\u839D\u839B\u83AA\u838B\u837E\u83A5\u83AF\u8388\u8397\u83B0\u837F\u83A6\u8387\u83AE\u8376\u839A\u8659\u8656\u86BF\u86B7"],
["d7a1", "\u86C2\u86C1\u86C5\u86BA\u86B0\u86C8\u86B9\u86B3\u86B8\u86CC\u86B4\u86BB\u86BC\u86C3\u86BD\u86BE\u8852\u8889\u8895\u88A8\u88A2\u88AA\u889A\u8891\u88A1\u889F\u8898\u88A7\u8899\u889B\u8897\u88A4\u88AC\u888C\u8893\u888E\u8982\u89D6\u89D9\u89D5\u8A30\u8A27\u8A2C\u8A1E\u8C39\u8C3B\u8C5C\u8C5D\u8C7D\u8CA5\u8D7D\u8D7B\u8D79\u8DBC\u8DC2\u8DB9\u8DBF\u8DC1\u8ED8\u8EDE\u8EDD\u8EDC\u8ED7\u8EE0\u8EE1\u9024\u900B\u9011\u901C\u900C\u9021\u90EF\u90EA\u90F0\u90F4\u90F2\u90F3\u90D4\u90EB\u90EC\u90E9\u9156\u9158\u915A\u9153\u9155\u91EC\u91F4\u91F1\u91F3\u91F8\u91E4\u91F9\u91EA"],
["d840", "\u91EB\u91F7\u91E8\u91EE\u957A\u9586\u9588\u967C\u966D\u966B\u9671\u966F\u96BF\u976A\u9804\u98E5\u9997\u509B\u5095\u5094\u509E\u508B\u50A3\u5083\u508C\u508E\u509D\u5068\u509C\u5092\u5082\u5087\u515F\u51D4\u5312\u5311\u53A4\u53A7\u5591\u55A8\u55A5\u55AD\u5577\u5645\u55A2\u5593\u5588\u558F\u55B5\u5581\u55A3\u5592\u55A4\u557D\u558C\u55A6\u557F\u5595\u55A1\u558E\u570C\u5829\u5837"],
["d8a1", "\u5819\u581E\u5827\u5823\u5828\u57F5\u5848\u5825\u581C\u581B\u5833\u583F\u5836\u582E\u5839\u5838\u582D\u582C\u583B\u5961\u5AAF\u5A94\u5A9F\u5A7A\u5AA2\u5A9E\u5A78\u5AA6\u5A7C\u5AA5\u5AAC\u5A95\u5AAE\u5A37\u5A84\u5A8A\u5A97\u5A83\u5A8B\u5AA9\u5A7B\u5A7D\u5A8C\u5A9C\u5A8F\u5A93\u5A9D\u5BEA\u5BCD\u5BCB\u5BD4\u5BD1\u5BCA\u5BCE\u5C0C\u5C30\u5D37\u5D43\u5D6B\u5D41\u5D4B\u5D3F\u5D35\u5D51\u5D4E\u5D55\u5D33\u5D3A\u5D52\u5D3D\u5D31\u5D59\u5D42\u5D39\u5D49\u5D38\u5D3C\u5D32\u5D36\u5D40\u5D45\u5E44\u5E41\u5F58\u5FA6\u5FA5\u5FAB\u60C9\u60B9\u60CC\u60E2\u60CE\u60C4\u6114"],
["d940", "\u60F2\u610A\u6116\u6105\u60F5\u6113\u60F8\u60FC\u60FE\u60C1\u6103\u6118\u611D\u6110\u60FF\u6104\u610B\u624A\u6394\u63B1\u63B0\u63CE\u63E5\u63E8\u63EF\u63C3\u649D\u63F3\u63CA\u63E0\u63F6\u63D5\u63F2\u63F5\u6461\u63DF\u63BE\u63DD\u63DC\u63C4\u63D8\u63D3\u63C2\u63C7\u63CC\u63CB\u63C8\u63F0\u63D7\u63D9\u6532\u6567\u656A\u6564\u655C\u6568\u6565\u658C\u659D\u659E\u65AE\u65D0\u65D2"],
["d9a1", "\u667C\u666C\u667B\u6680\u6671\u6679\u666A\u6672\u6701\u690C\u68D3\u6904\u68DC\u692A\u68EC\u68EA\u68F1\u690F\u68D6\u68F7\u68EB\u68E4\u68F6\u6913\u6910\u68F3\u68E1\u6907\u68CC\u6908\u6970\u68B4\u6911\u68EF\u68C6\u6914\u68F8\u68D0\u68FD\u68FC\u68E8\u690B\u690A\u6917\u68CE\u68C8\u68DD\u68DE\u68E6\u68F4\u68D1\u6906\u68D4\u68E9\u6915\u6925\u68C7\u6B39\u6B3B\u6B3F\u6B3C\u6B94\u6B97\u6B99\u6B95\u6BBD\u6BF0\u6BF2\u6BF3\u6C30\u6DFC\u6E46\u6E47\u6E1F\u6E49\u6E88\u6E3C\u6E3D\u6E45\u6E62\u6E2B\u6E3F\u6E41\u6E5D\u6E73\u6E1C\u6E33\u6E4B\u6E40\u6E51\u6E3B\u6E03\u6E2E\u6E5E"],
["da40", "\u6E68\u6E5C\u6E61\u6E31\u6E28\u6E60\u6E71\u6E6B\u6E39\u6E22\u6E30\u6E53\u6E65\u6E27\u6E78\u6E64\u6E77\u6E55\u6E79\u6E52\u6E66\u6E35\u6E36\u6E5A\u7120\u711E\u712F\u70FB\u712E\u7131\u7123\u7125\u7122\u7132\u711F\u7128\u713A\u711B\u724B\u725A\u7288\u7289\u7286\u7285\u728B\u7312\u730B\u7330\u7322\u7331\u7333\u7327\u7332\u732D\u7326\u7323\u7335\u730C\u742E\u742C\u7430\u742B\u7416"],
["daa1", "\u741A\u7421\u742D\u7431\u7424\u7423\u741D\u7429\u7420\u7432\u74FB\u752F\u756F\u756C\u75E7\u75DA\u75E1\u75E6\u75DD\u75DF\u75E4\u75D7\u7695\u7692\u76DA\u7746\u7747\u7744\u774D\u7745\u774A\u774E\u774B\u774C\u77DE\u77EC\u7860\u7864\u7865\u785C\u786D\u7871\u786A\u786E\u7870\u7869\u7868\u785E\u7862\u7974\u7973\u7972\u7970\u7A02\u7A0A\u7A03\u7A0C\u7A04\u7A99\u7AE6\u7AE4\u7B4A\u7B3B\u7B44\u7B48\u7B4C\u7B4E\u7B40\u7B58\u7B45\u7CA2\u7C9E\u7CA8\u7CA1\u7D58\u7D6F\u7D63\u7D53\u7D56\u7D67\u7D6A\u7D4F\u7D6D\u7D5C\u7D6B\u7D52\u7D54\u7D69\u7D51\u7D5F\u7D4E\u7F3E\u7F3F\u7F65"],
["db40", "\u7F66\u7FA2\u7FA0\u7FA1\u7FD7\u8051\u804F\u8050\u80FE\u80D4\u8143\u814A\u8152\u814F\u8147\u813D\u814D\u813A\u81E6\u81EE\u81F7\u81F8\u81F9\u8204\u823C\u823D\u823F\u8275\u833B\u83CF\u83F9\u8423\u83C0\u83E8\u8412\u83E7\u83E4\u83FC\u83F6\u8410\u83C6\u83C8\u83EB\u83E3\u83BF\u8401\u83DD\u83E5\u83D8\u83FF\u83E1\u83CB\u83CE\u83D6\u83F5\u83C9\u8409\u840F\u83DE\u8411\u8406\u83C2\u83F3"],
["dba1", "\u83D5\u83FA\u83C7\u83D1\u83EA\u8413\u83C3\u83EC\u83EE\u83C4\u83FB\u83D7\u83E2\u841B\u83DB\u83FE\u86D8\u86E2\u86E6\u86D3\u86E3\u86DA\u86EA\u86DD\u86EB\u86DC\u86EC\u86E9\u86D7\u86E8\u86D1\u8848\u8856\u8855\u88BA\u88D7\u88B9\u88B8\u88C0\u88BE\u88B6\u88BC\u88B7\u88BD\u88B2\u8901\u88C9\u8995\u8998\u8997\u89DD\u89DA\u89DB\u8A4E\u8A4D\u8A39\u8A59\u8A40\u8A57\u8A58\u8A44\u8A45\u8A52\u8A48\u8A51\u8A4A\u8A4C\u8A4F\u8C5F\u8C81\u8C80\u8CBA\u8CBE\u8CB0\u8CB9\u8CB5\u8D84\u8D80\u8D89\u8DD8\u8DD3\u8DCD\u8DC7\u8DD6\u8DDC\u8DCF\u8DD5\u8DD9\u8DC8\u8DD7\u8DC5\u8EEF\u8EF7\u8EFA"],
["dc40", "\u8EF9\u8EE6\u8EEE\u8EE5\u8EF5\u8EE7\u8EE8\u8EF6\u8EEB\u8EF1\u8EEC\u8EF4\u8EE9\u902D\u9034\u902F\u9106\u912C\u9104\u90FF\u90FC\u9108\u90F9\u90FB\u9101\u9100\u9107\u9105\u9103\u9161\u9164\u915F\u9162\u9160\u9201\u920A\u9225\u9203\u921A\u9226\u920F\u920C\u9200\u9212\u91FF\u91FD\u9206\u9204\u9227\u9202\u921C\u9224\u9219\u9217\u9205\u9216\u957B\u958D\u958C\u9590\u9687\u967E\u9688"],
["dca1", "\u9689\u9683\u9680\u96C2\u96C8\u96C3\u96F1\u96F0\u976C\u9770\u976E\u9807\u98A9\u98EB\u9CE6\u9EF9\u4E83\u4E84\u4EB6\u50BD\u50BF\u50C6\u50AE\u50C4\u50CA\u50B4\u50C8\u50C2\u50B0\u50C1\u50BA\u50B1\u50CB\u50C9\u50B6\u50B8\u51D7\u527A\u5278\u527B\u527C\u55C3\u55DB\u55CC\u55D0\u55CB\u55CA\u55DD\u55C0\u55D4\u55C4\u55E9\u55BF\u55D2\u558D\u55CF\u55D5\u55E2\u55D6\u55C8\u55F2\u55CD\u55D9\u55C2\u5714\u5853\u5868\u5864\u584F\u584D\u5849\u586F\u5855\u584E\u585D\u5859\u5865\u585B\u583D\u5863\u5871\u58FC\u5AC7\u5AC4\u5ACB\u5ABA\u5AB8\u5AB1\u5AB5\u5AB0\u5ABF\u5AC8\u5ABB\u5AC6"],
["dd40", "\u5AB7\u5AC0\u5ACA\u5AB4\u5AB6\u5ACD\u5AB9\u5A90\u5BD6\u5BD8\u5BD9\u5C1F\u5C33\u5D71\u5D63\u5D4A\u5D65\u5D72\u5D6C\u5D5E\u5D68\u5D67\u5D62\u5DF0\u5E4F\u5E4E\u5E4A\u5E4D\u5E4B\u5EC5\u5ECC\u5EC6\u5ECB\u5EC7\u5F40\u5FAF\u5FAD\u60F7\u6149\u614A\u612B\u6145\u6136\u6132\u612E\u6146\u612F\u614F\u6129\u6140\u6220\u9168\u6223\u6225\u6224\u63C5\u63F1\u63EB\u6410\u6412\u6409\u6420\u6424"],
["dda1", "\u6433\u6443\u641F\u6415\u6418\u6439\u6437\u6422\u6423\u640C\u6426\u6430\u6428\u6441\u6435\u642F\u640A\u641A\u6440\u6425\u6427\u640B\u63E7\u641B\u642E\u6421\u640E\u656F\u6592\u65D3\u6686\u668C\u6695\u6690\u668B\u668A\u6699\u6694\u6678\u6720\u6966\u695F\u6938\u694E\u6962\u6971\u693F\u6945\u696A\u6939\u6942\u6957\u6959\u697A\u6948\u6949\u6935\u696C\u6933\u693D\u6965\u68F0\u6978\u6934\u6969\u6940\u696F\u6944\u6976\u6958\u6941\u6974\u694C\u693B\u694B\u6937\u695C\u694F\u6951\u6932\u6952\u692F\u697B\u693C\u6B46\u6B45\u6B43\u6B42\u6B48\u6B41\u6B9B\uFA0D\u6BFB\u6BFC"],
["de40", "\u6BF9\u6BF7\u6BF8\u6E9B\u6ED6\u6EC8\u6E8F\u6EC0\u6E9F\u6E93\u6E94\u6EA0\u6EB1\u6EB9\u6EC6\u6ED2\u6EBD\u6EC1\u6E9E\u6EC9\u6EB7\u6EB0\u6ECD\u6EA6\u6ECF\u6EB2\u6EBE\u6EC3\u6EDC\u6ED8\u6E99\u6E92\u6E8E\u6E8D\u6EA4\u6EA1\u6EBF\u6EB3\u6ED0\u6ECA\u6E97\u6EAE\u6EA3\u7147\u7154\u7152\u7163\u7160\u7141\u715D\u7162\u7172\u7178\u716A\u7161\u7142\u7158\u7143\u714B\u7170\u715F\u7150\u7153"],
["dea1", "\u7144\u714D\u715A\u724F\u728D\u728C\u7291\u7290\u728E\u733C\u7342\u733B\u733A\u7340\u734A\u7349\u7444\u744A\u744B\u7452\u7451\u7457\u7440\u744F\u7450\u744E\u7442\u7446\u744D\u7454\u74E1\u74FF\u74FE\u74FD\u751D\u7579\u7577\u6983\u75EF\u760F\u7603\u75F7\u75FE\u75FC\u75F9\u75F8\u7610\u75FB\u75F6\u75ED\u75F5\u75FD\u7699\u76B5\u76DD\u7755\u775F\u7760\u7752\u7756\u775A\u7769\u7767\u7754\u7759\u776D\u77E0\u7887\u789A\u7894\u788F\u7884\u7895\u7885\u7886\u78A1\u7883\u7879\u7899\u7880\u7896\u787B\u797C\u7982\u797D\u7979\u7A11\u7A18\u7A19\u7A12\u7A17\u7A15\u7A22\u7A13"],
["df40", "\u7A1B\u7A10\u7AA3\u7AA2\u7A9E\u7AEB\u7B66\u7B64\u7B6D\u7B74\u7B69\u7B72\u7B65\u7B73\u7B71\u7B70\u7B61\u7B78\u7B76\u7B63\u7CB2\u7CB4\u7CAF\u7D88\u7D86\u7D80\u7D8D\u7D7F\u7D85\u7D7A\u7D8E\u7D7B\u7D83\u7D7C\u7D8C\u7D94\u7D84\u7D7D\u7D92\u7F6D\u7F6B\u7F67\u7F68\u7F6C\u7FA6\u7FA5\u7FA7\u7FDB\u7FDC\u8021\u8164\u8160\u8177\u815C\u8169\u815B\u8162\u8172\u6721\u815E\u8176\u8167\u816F"],
["dfa1", "\u8144\u8161\u821D\u8249\u8244\u8240\u8242\u8245\u84F1\u843F\u8456\u8476\u8479\u848F\u848D\u8465\u8451\u8440\u8486\u8467\u8430\u844D\u847D\u845A\u8459\u8474\u8473\u845D\u8507\u845E\u8437\u843A\u8434\u847A\u8443\u8478\u8432\u8445\u8429\u83D9\u844B\u842F\u8442\u842D\u845F\u8470\u8439\u844E\u844C\u8452\u846F\u84C5\u848E\u843B\u8447\u8436\u8433\u8468\u847E\u8444\u842B\u8460\u8454\u846E\u8450\u870B\u8704\u86F7\u870C\u86FA\u86D6\u86F5\u874D\u86F8\u870E\u8709\u8701\u86F6\u870D\u8705\u88D6\u88CB\u88CD\u88CE\u88DE\u88DB\u88DA\u88CC\u88D0\u8985\u899B\u89DF\u89E5\u89E4"],
["e040", "\u89E1\u89E0\u89E2\u89DC\u89E6\u8A76\u8A86\u8A7F\u8A61\u8A3F\u8A77\u8A82\u8A84\u8A75\u8A83\u8A81\u8A74\u8A7A\u8C3C\u8C4B\u8C4A\u8C65\u8C64\u8C66\u8C86\u8C84\u8C85\u8CCC\u8D68\u8D69\u8D91\u8D8C\u8D8E\u8D8F\u8D8D\u8D93\u8D94\u8D90\u8D92\u8DF0\u8DE0\u8DEC\u8DF1\u8DEE\u8DD0\u8DE9\u8DE3\u8DE2\u8DE7\u8DF2\u8DEB\u8DF4\u8F06\u8EFF\u8F01\u8F00\u8F05\u8F07\u8F08\u8F02\u8F0B\u9052\u903F"],
["e0a1", "\u9044\u9049\u903D\u9110\u910D\u910F\u9111\u9116\u9114\u910B\u910E\u916E\u916F\u9248\u9252\u9230\u923A\u9266\u9233\u9265\u925E\u9283\u922E\u924A\u9246\u926D\u926C\u924F\u9260\u9267\u926F\u9236\u9261\u9270\u9231\u9254\u9263\u9250\u9272\u924E\u9253\u924C\u9256\u9232\u959F\u959C\u959E\u959B\u9692\u9693\u9691\u9697\u96CE\u96FA\u96FD\u96F8\u96F5\u9773\u9777\u9778\u9772\u980F\u980D\u980E\u98AC\u98F6\u98F9\u99AF\u99B2\u99B0\u99B5\u9AAD\u9AAB\u9B5B\u9CEA\u9CED\u9CE7\u9E80\u9EFD\u50E6\u50D4\u50D7\u50E8\u50F3\u50DB\u50EA\u50DD\u50E4\u50D3\u50EC\u50F0\u50EF\u50E3\u50E0"],
["e140", "\u51D8\u5280\u5281\u52E9\u52EB\u5330\u53AC\u5627\u5615\u560C\u5612\u55FC\u560F\u561C\u5601\u5613\u5602\u55FA\u561D\u5604\u55FF\u55F9\u5889\u587C\u5890\u5898\u5886\u5881\u587F\u5874\u588B\u587A\u5887\u5891\u588E\u5876\u5882\u5888\u587B\u5894\u588F\u58FE\u596B\u5ADC\u5AEE\u5AE5\u5AD5\u5AEA\u5ADA\u5AED\u5AEB\u5AF3\u5AE2\u5AE0\u5ADB\u5AEC\u5ADE\u5ADD\u5AD9\u5AE8\u5ADF\u5B77\u5BE0"],
["e1a1", "\u5BE3\u5C63\u5D82\u5D80\u5D7D\u5D86\u5D7A\u5D81\u5D77\u5D8A\u5D89\u5D88\u5D7E\u5D7C\u5D8D\u5D79\u5D7F\u5E58\u5E59\u5E53\u5ED8\u5ED1\u5ED7\u5ECE\u5EDC\u5ED5\u5ED9\u5ED2\u5ED4\u5F44\u5F43\u5F6F\u5FB6\u612C\u6128\u6141\u615E\u6171\u6173\u6152\u6153\u6172\u616C\u6180\u6174\u6154\u617A\u615B\u6165\u613B\u616A\u6161\u6156\u6229\u6227\u622B\u642B\u644D\u645B\u645D\u6474\u6476\u6472\u6473\u647D\u6475\u6466\u64A6\u644E\u6482\u645E\u645C\u644B\u6453\u6460\u6450\u647F\u643F\u646C\u646B\u6459\u6465\u6477\u6573\u65A0\u66A1\u66A0\u669F\u6705\u6704\u6722\u69B1\u69B6\u69C9"],
["e240", "\u69A0\u69CE\u6996\u69B0\u69AC\u69BC\u6991\u6999\u698E\u69A7\u698D\u69A9\u69BE\u69AF\u69BF\u69C4\u69BD\u69A4\u69D4\u69B9\u69CA\u699A\u69CF\u69B3\u6993\u69AA\u69A1\u699E\u69D9\u6997\u6990\u69C2\u69B5\u69A5\u69C6\u6B4A\u6B4D\u6B4B\u6B9E\u6B9F\u6BA0\u6BC3\u6BC4\u6BFE\u6ECE\u6EF5\u6EF1\u6F03\u6F25\u6EF8\u6F37\u6EFB\u6F2E\u6F09\u6F4E\u6F19\u6F1A\u6F27\u6F18\u6F3B\u6F12\u6EED\u6F0A"],
["e2a1", "\u6F36\u6F73\u6EF9\u6EEE\u6F2D\u6F40\u6F30\u6F3C\u6F35\u6EEB\u6F07\u6F0E\u6F43\u6F05\u6EFD\u6EF6\u6F39\u6F1C\u6EFC\u6F3A\u6F1F\u6F0D\u6F1E\u6F08\u6F21\u7187\u7190\u7189\u7180\u7185\u7182\u718F\u717B\u7186\u7181\u7197\u7244\u7253\u7297\u7295\u7293\u7343\u734D\u7351\u734C\u7462\u7473\u7471\u7475\u7472\u7467\u746E\u7500\u7502\u7503\u757D\u7590\u7616\u7608\u760C\u7615\u7611\u760A\u7614\u76B8\u7781\u777C\u7785\u7782\u776E\u7780\u776F\u777E\u7783\u78B2\u78AA\u78B4\u78AD\u78A8\u787E\u78AB\u789E\u78A5\u78A0\u78AC\u78A2\u78A4\u7998\u798A\u798B\u7996\u7995\u7994\u7993"],
["e340", "\u7997\u7988\u7992\u7990\u7A2B\u7A4A\u7A30\u7A2F\u7A28\u7A26\u7AA8\u7AAB\u7AAC\u7AEE\u7B88\u7B9C\u7B8A\u7B91\u7B90\u7B96\u7B8D\u7B8C\u7B9B\u7B8E\u7B85\u7B98\u5284\u7B99\u7BA4\u7B82\u7CBB\u7CBF\u7CBC\u7CBA\u7DA7\u7DB7\u7DC2\u7DA3\u7DAA\u7DC1\u7DC0\u7DC5\u7D9D\u7DCE\u7DC4\u7DC6\u7DCB\u7DCC\u7DAF\u7DB9\u7D96\u7DBC\u7D9F\u7DA6\u7DAE\u7DA9\u7DA1\u7DC9\u7F73\u7FE2\u7FE3\u7FE5\u7FDE"],
["e3a1", "\u8024\u805D\u805C\u8189\u8186\u8183\u8187\u818D\u818C\u818B\u8215\u8497\u84A4\u84A1\u849F\u84BA\u84CE\u84C2\u84AC\u84AE\u84AB\u84B9\u84B4\u84C1\u84CD\u84AA\u849A\u84B1\u84D0\u849D\u84A7\u84BB\u84A2\u8494\u84C7\u84CC\u849B\u84A9\u84AF\u84A8\u84D6\u8498\u84B6\u84CF\u84A0\u84D7\u84D4\u84D2\u84DB\u84B0\u8491\u8661\u8733\u8723\u8728\u876B\u8740\u872E\u871E\u8721\u8719\u871B\u8743\u872C\u8741\u873E\u8746\u8720\u8732\u872A\u872D\u873C\u8712\u873A\u8731\u8735\u8742\u8726\u8727\u8738\u8724\u871A\u8730\u8711\u88F7\u88E7\u88F1\u88F2\u88FA\u88FE\u88EE\u88FC\u88F6\u88FB"],
["e440", "\u88F0\u88EC\u88EB\u899D\u89A1\u899F\u899E\u89E9\u89EB\u89E8\u8AAB\u8A99\u8A8B\u8A92\u8A8F\u8A96\u8C3D\u8C68\u8C69\u8CD5\u8CCF\u8CD7\u8D96\u8E09\u8E02\u8DFF\u8E0D\u8DFD\u8E0A\u8E03\u8E07\u8E06\u8E05\u8DFE\u8E00\u8E04\u8F10\u8F11\u8F0E\u8F0D\u9123\u911C\u9120\u9122\u911F\u911D\u911A\u9124\u9121\u911B\u917A\u9172\u9179\u9173\u92A5\u92A4\u9276\u929B\u927A\u92A0\u9294\u92AA\u928D"],
["e4a1", "\u92A6\u929A\u92AB\u9279\u9297\u927F\u92A3\u92EE\u928E\u9282\u9295\u92A2\u927D\u9288\u92A1\u928A\u9286\u928C\u9299\u92A7\u927E\u9287\u92A9\u929D\u928B\u922D\u969E\u96A1\u96FF\u9758\u977D\u977A\u977E\u9783\u9780\u9782\u977B\u9784\u9781\u977F\u97CE\u97CD\u9816\u98AD\u98AE\u9902\u9900\u9907\u999D\u999C\u99C3\u99B9\u99BB\u99BA\u99C2\u99BD\u99C7\u9AB1\u9AE3\u9AE7\u9B3E\u9B3F\u9B60\u9B61\u9B5F\u9CF1\u9CF2\u9CF5\u9EA7\u50FF\u5103\u5130\u50F8\u5106\u5107\u50F6\u50FE\u510B\u510C\u50FD\u510A\u528B\u528C\u52F1\u52EF\u5648\u5642\u564C\u5635\u5641\u564A\u5649\u5646\u5658"],
["e540", "\u565A\u5640\u5633\u563D\u562C\u563E\u5638\u562A\u563A\u571A\u58AB\u589D\u58B1\u58A0\u58A3\u58AF\u58AC\u58A5\u58A1\u58FF\u5AFF\u5AF4\u5AFD\u5AF7\u5AF6\u5B03\u5AF8\u5B02\u5AF9\u5B01\u5B07\u5B05\u5B0F\u5C67\u5D99\u5D97\u5D9F\u5D92\u5DA2\u5D93\u5D95\u5DA0\u5D9C\u5DA1\u5D9A\u5D9E\u5E69\u5E5D\u5E60\u5E5C\u7DF3\u5EDB\u5EDE\u5EE1\u5F49\u5FB2\u618B\u6183\u6179\u61B1\u61B0\u61A2\u6189"],
["e5a1", "\u619B\u6193\u61AF\u61AD\u619F\u6192\u61AA\u61A1\u618D\u6166\u61B3\u622D\u646E\u6470\u6496\u64A0\u6485\u6497\u649C\u648F\u648B\u648A\u648C\u64A3\u649F\u6468\u64B1\u6498\u6576\u657A\u6579\u657B\u65B2\u65B3\u66B5\u66B0\u66A9\u66B2\u66B7\u66AA\u66AF\u6A00\u6A06\u6A17\u69E5\u69F8\u6A15\u69F1\u69E4\u6A20\u69FF\u69EC\u69E2\u6A1B\u6A1D\u69FE\u6A27\u69F2\u69EE\u6A14\u69F7\u69E7\u6A40\u6A08\u69E6\u69FB\u6A0D\u69FC\u69EB\u6A09\u6A04\u6A18\u6A25\u6A0F\u69F6\u6A26\u6A07\u69F4\u6A16\u6B51\u6BA5\u6BA3\u6BA2\u6BA6\u6C01\u6C00\u6BFF\u6C02\u6F41\u6F26\u6F7E\u6F87\u6FC6\u6F92"],
["e640", "\u6F8D\u6F89\u6F8C\u6F62\u6F4F\u6F85\u6F5A\u6F96\u6F76\u6F6C\u6F82\u6F55\u6F72\u6F52\u6F50\u6F57\u6F94\u6F93\u6F5D\u6F00\u6F61\u6F6B\u6F7D\u6F67\u6F90\u6F53\u6F8B\u6F69\u6F7F\u6F95\u6F63\u6F77\u6F6A\u6F7B\u71B2\u71AF\u719B\u71B0\u71A0\u719A\u71A9\u71B5\u719D\u71A5\u719E\u71A4\u71A1\u71AA\u719C\u71A7\u71B3\u7298\u729A\u7358\u7352\u735E\u735F\u7360\u735D\u735B\u7361\u735A\u7359"],
["e6a1", "\u7362\u7487\u7489\u748A\u7486\u7481\u747D\u7485\u7488\u747C\u7479\u7508\u7507\u757E\u7625\u761E\u7619\u761D\u761C\u7623\u761A\u7628\u761B\u769C\u769D\u769E\u769B\u778D\u778F\u7789\u7788\u78CD\u78BB\u78CF\u78CC\u78D1\u78CE\u78D4\u78C8\u78C3\u78C4\u78C9\u799A\u79A1\u79A0\u799C\u79A2\u799B\u6B76\u7A39\u7AB2\u7AB4\u7AB3\u7BB7\u7BCB\u7BBE\u7BAC\u7BCE\u7BAF\u7BB9\u7BCA\u7BB5\u7CC5\u7CC8\u7CCC\u7CCB\u7DF7\u7DDB\u7DEA\u7DE7\u7DD7\u7DE1\u7E03\u7DFA\u7DE6\u7DF6\u7DF1\u7DF0\u7DEE\u7DDF\u7F76\u7FAC\u7FB0\u7FAD\u7FED\u7FEB\u7FEA\u7FEC\u7FE6\u7FE8\u8064\u8067\u81A3\u819F"],
["e740", "\u819E\u8195\u81A2\u8199\u8197\u8216\u824F\u8253\u8252\u8250\u824E\u8251\u8524\u853B\u850F\u8500\u8529\u850E\u8509\u850D\u851F\u850A\u8527\u851C\u84FB\u852B\u84FA\u8508\u850C\u84F4\u852A\u84F2\u8515\u84F7\u84EB\u84F3\u84FC\u8512\u84EA\u84E9\u8516\u84FE\u8528\u851D\u852E\u8502\u84FD\u851E\u84F6\u8531\u8526\u84E7\u84E8\u84F0\u84EF\u84F9\u8518\u8520\u8530\u850B\u8519\u852F\u8662"],
["e7a1", "\u8756\u8763\u8764\u8777\u87E1\u8773\u8758\u8754\u875B\u8752\u8761\u875A\u8751\u875E\u876D\u876A\u8750\u874E\u875F\u875D\u876F\u876C\u877A\u876E\u875C\u8765\u874F\u877B\u8775\u8762\u8767\u8769\u885A\u8905\u890C\u8914\u890B\u8917\u8918\u8919\u8906\u8916\u8911\u890E\u8909\u89A2\u89A4\u89A3\u89ED\u89F0\u89EC\u8ACF\u8AC6\u8AB8\u8AD3\u8AD1\u8AD4\u8AD5\u8ABB\u8AD7\u8ABE\u8AC0\u8AC5\u8AD8\u8AC3\u8ABA\u8ABD\u8AD9\u8C3E\u8C4D\u8C8F\u8CE5\u8CDF\u8CD9\u8CE8\u8CDA\u8CDD\u8CE7\u8DA0\u8D9C\u8DA1\u8D9B\u8E20\u8E23\u8E25\u8E24\u8E2E\u8E15\u8E1B\u8E16\u8E11\u8E19\u8E26\u8E27"],
["e840", "\u8E14\u8E12\u8E18\u8E13\u8E1C\u8E17\u8E1A\u8F2C\u8F24\u8F18\u8F1A\u8F20\u8F23\u8F16\u8F17\u9073\u9070\u906F\u9067\u906B\u912F\u912B\u9129\u912A\u9132\u9126\u912E\u9185\u9186\u918A\u9181\u9182\u9184\u9180\u92D0\u92C3\u92C4\u92C0\u92D9\u92B6\u92CF\u92F1\u92DF\u92D8\u92E9\u92D7\u92DD\u92CC\u92EF\u92C2\u92E8\u92CA\u92C8\u92CE\u92E6\u92CD\u92D5\u92C9\u92E0\u92DE\u92E7\u92D1\u92D3"],
["e8a1", "\u92B5\u92E1\u92C6\u92B4\u957C\u95AC\u95AB\u95AE\u95B0\u96A4\u96A2\u96D3\u9705\u9708\u9702\u975A\u978A\u978E\u9788\u97D0\u97CF\u981E\u981D\u9826\u9829\u9828\u9820\u981B\u9827\u98B2\u9908\u98FA\u9911\u9914\u9916\u9917\u9915\u99DC\u99CD\u99CF\u99D3\u99D4\u99CE\u99C9\u99D6\u99D8\u99CB\u99D7\u99CC\u9AB3\u9AEC\u9AEB\u9AF3\u9AF2\u9AF1\u9B46\u9B43\u9B67\u9B74\u9B71\u9B66\u9B76\u9B75\u9B70\u9B68\u9B64\u9B6C\u9CFC\u9CFA\u9CFD\u9CFF\u9CF7\u9D07\u9D00\u9CF9\u9CFB\u9D08\u9D05\u9D04\u9E83\u9ED3\u9F0F\u9F10\u511C\u5113\u5117\u511A\u5111\u51DE\u5334\u53E1\u5670\u5660\u566E"],
["e940", "\u5673\u5666\u5663\u566D\u5672\u565E\u5677\u571C\u571B\u58C8\u58BD\u58C9\u58BF\u58BA\u58C2\u58BC\u58C6\u5B17\u5B19\u5B1B\u5B21\u5B14\u5B13\u5B10\u5B16\u5B28\u5B1A\u5B20\u5B1E\u5BEF\u5DAC\u5DB1\u5DA9\u5DA7\u5DB5\u5DB0\u5DAE\u5DAA\u5DA8\u5DB2\u5DAD\u5DAF\u5DB4\u5E67\u5E68\u5E66\u5E6F\u5EE9\u5EE7\u5EE6\u5EE8\u5EE5\u5F4B\u5FBC\u619D\u61A8\u6196\u61C5\u61B4\u61C6\u61C1\u61CC\u61BA"],
["e9a1", "\u61BF\u61B8\u618C\u64D7\u64D6\u64D0\u64CF\u64C9\u64BD\u6489\u64C3\u64DB\u64F3\u64D9\u6533\u657F\u657C\u65A2\u66C8\u66BE\u66C0\u66CA\u66CB\u66CF\u66BD\u66BB\u66BA\u66CC\u6723\u6A34\u6A66\u6A49\u6A67\u6A32\u6A68\u6A3E\u6A5D\u6A6D\u6A76\u6A5B\u6A51\u6A28\u6A5A\u6A3B\u6A3F\u6A41\u6A6A\u6A64\u6A50\u6A4F\u6A54\u6A6F\u6A69\u6A60\u6A3C\u6A5E\u6A56\u6A55\u6A4D\u6A4E\u6A46\u6B55\u6B54\u6B56\u6BA7\u6BAA\u6BAB\u6BC8\u6BC7\u6C04\u6C03\u6C06\u6FAD\u6FCB\u6FA3\u6FC7\u6FBC\u6FCE\u6FC8\u6F5E\u6FC4\u6FBD\u6F9E\u6FCA\u6FA8\u7004\u6FA5\u6FAE\u6FBA\u6FAC\u6FAA\u6FCF\u6FBF\u6FB8"],
["ea40", "\u6FA2\u6FC9\u6FAB\u6FCD\u6FAF\u6FB2\u6FB0\u71C5\u71C2\u71BF\u71B8\u71D6\u71C0\u71C1\u71CB\u71D4\u71CA\u71C7\u71CF\u71BD\u71D8\u71BC\u71C6\u71DA\u71DB\u729D\u729E\u7369\u7366\u7367\u736C\u7365\u736B\u736A\u747F\u749A\u74A0\u7494\u7492\u7495\u74A1\u750B\u7580\u762F\u762D\u7631\u763D\u7633\u763C\u7635\u7632\u7630\u76BB\u76E6\u779A\u779D\u77A1\u779C\u779B\u77A2\u77A3\u7795\u7799"],
["eaa1", "\u7797\u78DD\u78E9\u78E5\u78EA\u78DE\u78E3\u78DB\u78E1\u78E2\u78ED\u78DF\u78E0\u79A4\u7A44\u7A48\u7A47\u7AB6\u7AB8\u7AB5\u7AB1\u7AB7\u7BDE\u7BE3\u7BE7\u7BDD\u7BD5\u7BE5\u7BDA\u7BE8\u7BF9\u7BD4\u7BEA\u7BE2\u7BDC\u7BEB\u7BD8\u7BDF\u7CD2\u7CD4\u7CD7\u7CD0\u7CD1\u7E12\u7E21\u7E17\u7E0C\u7E1F\u7E20\u7E13\u7E0E\u7E1C\u7E15\u7E1A\u7E22\u7E0B\u7E0F\u7E16\u7E0D\u7E14\u7E25\u7E24\u7F43\u7F7B\u7F7C\u7F7A\u7FB1\u7FEF\u802A\u8029\u806C\u81B1\u81A6\u81AE\u81B9\u81B5\u81AB\u81B0\u81AC\u81B4\u81B2\u81B7\u81A7\u81F2\u8255\u8256\u8257\u8556\u8545\u856B\u854D\u8553\u8561\u8558"],
["eb40", "\u8540\u8546\u8564\u8541\u8562\u8544\u8551\u8547\u8563\u853E\u855B\u8571\u854E\u856E\u8575\u8555\u8567\u8560\u858C\u8566\u855D\u8554\u8565\u856C\u8663\u8665\u8664\u879B\u878F\u8797\u8793\u8792\u8788\u8781\u8796\u8798\u8779\u8787\u87A3\u8785\u8790\u8791\u879D\u8784\u8794\u879C\u879A\u8789\u891E\u8926\u8930\u892D\u892E\u8927\u8931\u8922\u8929\u8923\u892F\u892C\u891F\u89F1\u8AE0"],
["eba1", "\u8AE2\u8AF2\u8AF4\u8AF5\u8ADD\u8B14\u8AE4\u8ADF\u8AF0\u8AC8\u8ADE\u8AE1\u8AE8\u8AFF\u8AEF\u8AFB\u8C91\u8C92\u8C90\u8CF5\u8CEE\u8CF1\u8CF0\u8CF3\u8D6C\u8D6E\u8DA5\u8DA7\u8E33\u8E3E\u8E38\u8E40\u8E45\u8E36\u8E3C\u8E3D\u8E41\u8E30\u8E3F\u8EBD\u8F36\u8F2E\u8F35\u8F32\u8F39\u8F37\u8F34\u9076\u9079\u907B\u9086\u90FA\u9133\u9135\u9136\u9193\u9190\u9191\u918D\u918F\u9327\u931E\u9308\u931F\u9306\u930F\u937A\u9338\u933C\u931B\u9323\u9312\u9301\u9346\u932D\u930E\u930D\u92CB\u931D\u92FA\u9325\u9313\u92F9\u92F7\u9334\u9302\u9324\u92FF\u9329\u9339\u9335\u932A\u9314\u930C"],
["ec40", "\u930B\u92FE\u9309\u9300\u92FB\u9316\u95BC\u95CD\u95BE\u95B9\u95BA\u95B6\u95BF\u95B5\u95BD\u96A9\u96D4\u970B\u9712\u9710\u9799\u9797\u9794\u97F0\u97F8\u9835\u982F\u9832\u9924\u991F\u9927\u9929\u999E\u99EE\u99EC\u99E5\u99E4\u99F0\u99E3\u99EA\u99E9\u99E7\u9AB9\u9ABF\u9AB4\u9ABB\u9AF6\u9AFA\u9AF9\u9AF7\u9B33\u9B80\u9B85\u9B87\u9B7C\u9B7E\u9B7B\u9B82\u9B93\u9B92\u9B90\u9B7A\u9B95"],
["eca1", "\u9B7D\u9B88\u9D25\u9D17\u9D20\u9D1E\u9D14\u9D29\u9D1D\u9D18\u9D22\u9D10\u9D19\u9D1F\u9E88\u9E86\u9E87\u9EAE\u9EAD\u9ED5\u9ED6\u9EFA\u9F12\u9F3D\u5126\u5125\u5122\u5124\u5120\u5129\u52F4\u5693\u568C\u568D\u5686\u5684\u5683\u567E\u5682\u567F\u5681\u58D6\u58D4\u58CF\u58D2\u5B2D\u5B25\u5B32\u5B23\u5B2C\u5B27\u5B26\u5B2F\u5B2E\u5B7B\u5BF1\u5BF2\u5DB7\u5E6C\u5E6A\u5FBE\u5FBB\u61C3\u61B5\u61BC\u61E7\u61E0\u61E5\u61E4\u61E8\u61DE\u64EF\u64E9\u64E3\u64EB\u64E4\u64E8\u6581\u6580\u65B6\u65DA\u66D2\u6A8D\u6A96\u6A81\u6AA5\u6A89\u6A9F\u6A9B\u6AA1\u6A9E\u6A87\u6A93\u6A8E"],
["ed40", "\u6A95\u6A83\u6AA8\u6AA4\u6A91\u6A7F\u6AA6\u6A9A\u6A85\u6A8C\u6A92\u6B5B\u6BAD\u6C09\u6FCC\u6FA9\u6FF4\u6FD4\u6FE3\u6FDC\u6FED\u6FE7\u6FE6\u6FDE\u6FF2\u6FDD\u6FE2\u6FE8\u71E1\u71F1\u71E8\u71F2\u71E4\u71F0\u71E2\u7373\u736E\u736F\u7497\u74B2\u74AB\u7490\u74AA\u74AD\u74B1\u74A5\u74AF\u7510\u7511\u7512\u750F\u7584\u7643\u7648\u7649\u7647\u76A4\u76E9\u77B5\u77AB\u77B2\u77B7\u77B6"],
["eda1", "\u77B4\u77B1\u77A8\u77F0\u78F3\u78FD\u7902\u78FB\u78FC\u78F2\u7905\u78F9\u78FE\u7904\u79AB\u79A8\u7A5C\u7A5B\u7A56\u7A58\u7A54\u7A5A\u7ABE\u7AC0\u7AC1\u7C05\u7C0F\u7BF2\u7C00\u7BFF\u7BFB\u7C0E\u7BF4\u7C0B\u7BF3\u7C02\u7C09\u7C03\u7C01\u7BF8\u7BFD\u7C06\u7BF0\u7BF1\u7C10\u7C0A\u7CE8\u7E2D\u7E3C\u7E42\u7E33\u9848\u7E38\u7E2A\u7E49\u7E40\u7E47\u7E29\u7E4C\u7E30\u7E3B\u7E36\u7E44\u7E3A\u7F45\u7F7F\u7F7E\u7F7D\u7FF4\u7FF2\u802C\u81BB\u81C4\u81CC\u81CA\u81C5\u81C7\u81BC\u81E9\u825B\u825A\u825C\u8583\u8580\u858F\u85A7\u8595\u85A0\u858B\u85A3\u857B\u85A4\u859A\u859E"],
["ee40", "\u8577\u857C\u8589\u85A1\u857A\u8578\u8557\u858E\u8596\u8586\u858D\u8599\u859D\u8581\u85A2\u8582\u8588\u8585\u8579\u8576\u8598\u8590\u859F\u8668\u87BE\u87AA\u87AD\u87C5\u87B0\u87AC\u87B9\u87B5\u87BC\u87AE\u87C9\u87C3\u87C2\u87CC\u87B7\u87AF\u87C4\u87CA\u87B4\u87B6\u87BF\u87B8\u87BD\u87DE\u87B2\u8935\u8933\u893C\u893E\u8941\u8952\u8937\u8942\u89AD\u89AF\u89AE\u89F2\u89F3\u8B1E"],
["eea1", "\u8B18\u8B16\u8B11\u8B05\u8B0B\u8B22\u8B0F\u8B12\u8B15\u8B07\u8B0D\u8B08\u8B06\u8B1C\u8B13\u8B1A\u8C4F\u8C70\u8C72\u8C71\u8C6F\u8C95\u8C94\u8CF9\u8D6F\u8E4E\u8E4D\u8E53\u8E50\u8E4C\u8E47\u8F43\u8F40\u9085\u907E\u9138\u919A\u91A2\u919B\u9199\u919F\u91A1\u919D\u91A0\u93A1\u9383\u93AF\u9364\u9356\u9347\u937C\u9358\u935C\u9376\u9349\u9350\u9351\u9360\u936D\u938F\u934C\u936A\u9379\u9357\u9355\u9352\u934F\u9371\u9377\u937B\u9361\u935E\u9363\u9367\u9380\u934E\u9359\u95C7\u95C0\u95C9\u95C3\u95C5\u95B7\u96AE\u96B0\u96AC\u9720\u971F\u9718\u971D\u9719\u979A\u97A1\u979C"],
["ef40", "\u979E\u979D\u97D5\u97D4\u97F1\u9841\u9844\u984A\u9849\u9845\u9843\u9925\u992B\u992C\u992A\u9933\u9932\u992F\u992D\u9931\u9930\u9998\u99A3\u99A1\u9A02\u99FA\u99F4\u99F7\u99F9\u99F8\u99F6\u99FB\u99FD\u99FE\u99FC\u9A03\u9ABE\u9AFE\u9AFD\u9B01\u9AFC\u9B48\u9B9A\u9BA8\u9B9E\u9B9B\u9BA6\u9BA1\u9BA5\u9BA4\u9B86\u9BA2\u9BA0\u9BAF\u9D33\u9D41\u9D67\u9D36\u9D2E\u9D2F\u9D31\u9D38\u9D30"],
["efa1", "\u9D45\u9D42\u9D43\u9D3E\u9D37\u9D40\u9D3D\u7FF5\u9D2D\u9E8A\u9E89\u9E8D\u9EB0\u9EC8\u9EDA\u9EFB\u9EFF\u9F24\u9F23\u9F22\u9F54\u9FA0\u5131\u512D\u512E\u5698\u569C\u5697\u569A\u569D\u5699\u5970\u5B3C\u5C69\u5C6A\u5DC0\u5E6D\u5E6E\u61D8\u61DF\u61ED\u61EE\u61F1\u61EA\u61F0\u61EB\u61D6\u61E9\u64FF\u6504\u64FD\u64F8\u6501\u6503\u64FC\u6594\u65DB\u66DA\u66DB\u66D8\u6AC5\u6AB9\u6ABD\u6AE1\u6AC6\u6ABA\u6AB6\u6AB7\u6AC7\u6AB4\u6AAD\u6B5E\u6BC9\u6C0B\u7007\u700C\u700D\u7001\u7005\u7014\u700E\u6FFF\u7000\u6FFB\u7026\u6FFC\u6FF7\u700A\u7201\u71FF\u71F9\u7203\u71FD\u7376"],
["f040", "\u74B8\u74C0\u74B5\u74C1\u74BE\u74B6\u74BB\u74C2\u7514\u7513\u765C\u7664\u7659\u7650\u7653\u7657\u765A\u76A6\u76BD\u76EC\u77C2\u77BA\u78FF\u790C\u7913\u7914\u7909\u7910\u7912\u7911\u79AD\u79AC\u7A5F\u7C1C\u7C29\u7C19\u7C20\u7C1F\u7C2D\u7C1D\u7C26\u7C28\u7C22\u7C25\u7C30\u7E5C\u7E50\u7E56\u7E63\u7E58\u7E62\u7E5F\u7E51\u7E60\u7E57\u7E53\u7FB5\u7FB3\u7FF7\u7FF8\u8075\u81D1\u81D2"],
["f0a1", "\u81D0\u825F\u825E\u85B4\u85C6\u85C0\u85C3\u85C2\u85B3\u85B5\u85BD\u85C7\u85C4\u85BF\u85CB\u85CE\u85C8\u85C5\u85B1\u85B6\u85D2\u8624\u85B8\u85B7\u85BE\u8669\u87E7\u87E6\u87E2\u87DB\u87EB\u87EA\u87E5\u87DF\u87F3\u87E4\u87D4\u87DC\u87D3\u87ED\u87D8\u87E3\u87A4\u87D7\u87D9\u8801\u87F4\u87E8\u87DD\u8953\u894B\u894F\u894C\u8946\u8950\u8951\u8949\u8B2A\u8B27\u8B23\u8B33\u8B30\u8B35\u8B47\u8B2F\u8B3C\u8B3E\u8B31\u8B25\u8B37\u8B26\u8B36\u8B2E\u8B24\u8B3B\u8B3D\u8B3A\u8C42\u8C75\u8C99\u8C98\u8C97\u8CFE\u8D04\u8D02\u8D00\u8E5C\u8E62\u8E60\u8E57\u8E56\u8E5E\u8E65\u8E67"],
["f140", "\u8E5B\u8E5A\u8E61\u8E5D\u8E69\u8E54\u8F46\u8F47\u8F48\u8F4B\u9128\u913A\u913B\u913E\u91A8\u91A5\u91A7\u91AF\u91AA\u93B5\u938C\u9392\u93B7\u939B\u939D\u9389\u93A7\u938E\u93AA\u939E\u93A6\u9395\u9388\u9399\u939F\u938D\u93B1\u9391\u93B2\u93A4\u93A8\u93B4\u93A3\u93A5\u95D2\u95D3\u95D1\u96B3\u96D7\u96DA\u5DC2\u96DF\u96D8\u96DD\u9723\u9722\u9725\u97AC\u97AE\u97A8\u97AB\u97A4\u97AA"],
["f1a1", "\u97A2\u97A5\u97D7\u97D9\u97D6\u97D8\u97FA\u9850\u9851\u9852\u98B8\u9941\u993C\u993A\u9A0F\u9A0B\u9A09\u9A0D\u9A04\u9A11\u9A0A\u9A05\u9A07\u9A06\u9AC0\u9ADC\u9B08\u9B04\u9B05\u9B29\u9B35\u9B4A\u9B4C\u9B4B\u9BC7\u9BC6\u9BC3\u9BBF\u9BC1\u9BB5\u9BB8\u9BD3\u9BB6\u9BC4\u9BB9\u9BBD\u9D5C\u9D53\u9D4F\u9D4A\u9D5B\u9D4B\u9D59\u9D56\u9D4C\u9D57\u9D52\u9D54\u9D5F\u9D58\u9D5A\u9E8E\u9E8C\u9EDF\u9F01\u9F00\u9F16\u9F25\u9F2B\u9F2A\u9F29\u9F28\u9F4C\u9F55\u5134\u5135\u5296\u52F7\u53B4\u56AB\u56AD\u56A6\u56A7\u56AA\u56AC\u58DA\u58DD\u58DB\u5912\u5B3D\u5B3E\u5B3F\u5DC3\u5E70"],
["f240", "\u5FBF\u61FB\u6507\u6510\u650D\u6509\u650C\u650E\u6584\u65DE\u65DD\u66DE\u6AE7\u6AE0\u6ACC\u6AD1\u6AD9\u6ACB\u6ADF\u6ADC\u6AD0\u6AEB\u6ACF\u6ACD\u6ADE\u6B60\u6BB0\u6C0C\u7019\u7027\u7020\u7016\u702B\u7021\u7022\u7023\u7029\u7017\u7024\u701C\u702A\u720C\u720A\u7207\u7202\u7205\u72A5\u72A6\u72A4\u72A3\u72A1\u74CB\u74C5\u74B7\u74C3\u7516\u7660\u77C9\u77CA\u77C4\u77F1\u791D\u791B"],
["f2a1", "\u7921\u791C\u7917\u791E\u79B0\u7A67\u7A68\u7C33\u7C3C\u7C39\u7C2C\u7C3B\u7CEC\u7CEA\u7E76\u7E75\u7E78\u7E70\u7E77\u7E6F\u7E7A\u7E72\u7E74\u7E68\u7F4B\u7F4A\u7F83\u7F86\u7FB7\u7FFD\u7FFE\u8078\u81D7\u81D5\u8264\u8261\u8263\u85EB\u85F1\u85ED\u85D9\u85E1\u85E8\u85DA\u85D7\u85EC\u85F2\u85F8\u85D8\u85DF\u85E3\u85DC\u85D1\u85F0\u85E6\u85EF\u85DE\u85E2\u8800\u87FA\u8803\u87F6\u87F7\u8809\u880C\u880B\u8806\u87FC\u8808\u87FF\u880A\u8802\u8962\u895A\u895B\u8957\u8961\u895C\u8958\u895D\u8959\u8988\u89B7\u89B6\u89F6\u8B50\u8B48\u8B4A\u8B40\u8B53\u8B56\u8B54\u8B4B\u8B55"],
["f340", "\u8B51\u8B42\u8B52\u8B57\u8C43\u8C77\u8C76\u8C9A\u8D06\u8D07\u8D09\u8DAC\u8DAA\u8DAD\u8DAB\u8E6D\u8E78\u8E73\u8E6A\u8E6F\u8E7B\u8EC2\u8F52\u8F51\u8F4F\u8F50\u8F53\u8FB4\u9140\u913F\u91B0\u91AD\u93DE\u93C7\u93CF\u93C2\u93DA\u93D0\u93F9\u93EC\u93CC\u93D9\u93A9\u93E6\u93CA\u93D4\u93EE\u93E3\u93D5\u93C4\u93CE\u93C0\u93D2\u93E7\u957D\u95DA\u95DB\u96E1\u9729\u972B\u972C\u9728\u9726"],
["f3a1", "\u97B3\u97B7\u97B6\u97DD\u97DE\u97DF\u985C\u9859\u985D\u9857\u98BF\u98BD\u98BB\u98BE\u9948\u9947\u9943\u99A6\u99A7\u9A1A\u9A15\u9A25\u9A1D\u9A24\u9A1B\u9A22\u9A20\u9A27\u9A23\u9A1E\u9A1C\u9A14\u9AC2\u9B0B\u9B0A\u9B0E\u9B0C\u9B37\u9BEA\u9BEB\u9BE0\u9BDE\u9BE4\u9BE6\u9BE2\u9BF0\u9BD4\u9BD7\u9BEC\u9BDC\u9BD9\u9BE5\u9BD5\u9BE1\u9BDA\u9D77\u9D81\u9D8A\u9D84\u9D88\u9D71\u9D80\u9D78\u9D86\u9D8B\u9D8C\u9D7D\u9D6B\u9D74\u9D75\u9D70\u9D69\u9D85\u9D73\u9D7B\u9D82\u9D6F\u9D79\u9D7F\u9D87\u9D68\u9E94\u9E91\u9EC0\u9EFC\u9F2D\u9F40\u9F41\u9F4D\u9F56\u9F57\u9F58\u5337\u56B2"],
["f440", "\u56B5\u56B3\u58E3\u5B45\u5DC6\u5DC7\u5EEE\u5EEF\u5FC0\u5FC1\u61F9\u6517\u6516\u6515\u6513\u65DF\u66E8\u66E3\u66E4\u6AF3\u6AF0\u6AEA\u6AE8\u6AF9\u6AF1\u6AEE\u6AEF\u703C\u7035\u702F\u7037\u7034\u7031\u7042\u7038\u703F\u703A\u7039\u7040\u703B\u7033\u7041\u7213\u7214\u72A8\u737D\u737C\u74BA\u76AB\u76AA\u76BE\u76ED\u77CC\u77CE\u77CF\u77CD\u77F2\u7925\u7923\u7927\u7928\u7924\u7929"],
["f4a1", "\u79B2\u7A6E\u7A6C\u7A6D\u7AF7\u7C49\u7C48\u7C4A\u7C47\u7C45\u7CEE\u7E7B\u7E7E\u7E81\u7E80\u7FBA\u7FFF\u8079\u81DB\u81D9\u820B\u8268\u8269\u8622\u85FF\u8601\u85FE\u861B\u8600\u85F6\u8604\u8609\u8605\u860C\u85FD\u8819\u8810\u8811\u8817\u8813\u8816\u8963\u8966\u89B9\u89F7\u8B60\u8B6A\u8B5D\u8B68\u8B63\u8B65\u8B67\u8B6D\u8DAE\u8E86\u8E88\u8E84\u8F59\u8F56\u8F57\u8F55\u8F58\u8F5A\u908D\u9143\u9141\u91B7\u91B5\u91B2\u91B3\u940B\u9413\u93FB\u9420\u940F\u9414\u93FE\u9415\u9410\u9428\u9419\u940D\u93F5\u9400\u93F7\u9407\u940E\u9416\u9412\u93FA\u9409\u93F8\u940A\u93FF"],
["f540", "\u93FC\u940C\u93F6\u9411\u9406\u95DE\u95E0\u95DF\u972E\u972F\u97B9\u97BB\u97FD\u97FE\u9860\u9862\u9863\u985F\u98C1\u98C2\u9950\u994E\u9959\u994C\u994B\u9953\u9A32\u9A34\u9A31\u9A2C\u9A2A\u9A36\u9A29\u9A2E\u9A38\u9A2D\u9AC7\u9ACA\u9AC6\u9B10\u9B12\u9B11\u9C0B\u9C08\u9BF7\u9C05\u9C12\u9BF8\u9C40\u9C07\u9C0E\u9C06\u9C17\u9C14\u9C09\u9D9F\u9D99\u9DA4\u9D9D\u9D92\u9D98\u9D90\u9D9B"],
["f5a1", "\u9DA0\u9D94\u9D9C\u9DAA\u9D97\u9DA1\u9D9A\u9DA2\u9DA8\u9D9E\u9DA3\u9DBF\u9DA9\u9D96\u9DA6\u9DA7\u9E99\u9E9B\u9E9A\u9EE5\u9EE4\u9EE7\u9EE6\u9F30\u9F2E\u9F5B\u9F60\u9F5E\u9F5D\u9F59\u9F91\u513A\u5139\u5298\u5297\u56C3\u56BD\u56BE\u5B48\u5B47\u5DCB\u5DCF\u5EF1\u61FD\u651B\u6B02\u6AFC\u6B03\u6AF8\u6B00\u7043\u7044\u704A\u7048\u7049\u7045\u7046\u721D\u721A\u7219\u737E\u7517\u766A\u77D0\u792D\u7931\u792F\u7C54\u7C53\u7CF2\u7E8A\u7E87\u7E88\u7E8B\u7E86\u7E8D\u7F4D\u7FBB\u8030\u81DD\u8618\u862A\u8626\u861F\u8623\u861C\u8619\u8627\u862E\u8621\u8620\u8629\u861E\u8625"],
["f640", "\u8829\u881D\u881B\u8820\u8824\u881C\u882B\u884A\u896D\u8969\u896E\u896B\u89FA\u8B79\u8B78\u8B45\u8B7A\u8B7B\u8D10\u8D14\u8DAF\u8E8E\u8E8C\u8F5E\u8F5B\u8F5D\u9146\u9144\u9145\u91B9\u943F\u943B\u9436\u9429\u943D\u943C\u9430\u9439\u942A\u9437\u942C\u9440\u9431\u95E5\u95E4\u95E3\u9735\u973A\u97BF\u97E1\u9864\u98C9\u98C6\u98C0\u9958\u9956\u9A39\u9A3D\u9A46\u9A44\u9A42\u9A41\u9A3A"],
["f6a1", "\u9A3F\u9ACD\u9B15\u9B17\u9B18\u9B16\u9B3A\u9B52\u9C2B\u9C1D\u9C1C\u9C2C\u9C23\u9C28\u9C29\u9C24\u9C21\u9DB7\u9DB6\u9DBC\u9DC1\u9DC7\u9DCA\u9DCF\u9DBE\u9DC5\u9DC3\u9DBB\u9DB5\u9DCE\u9DB9\u9DBA\u9DAC\u9DC8\u9DB1\u9DAD\u9DCC\u9DB3\u9DCD\u9DB2\u9E7A\u9E9C\u9EEB\u9EEE\u9EED\u9F1B\u9F18\u9F1A\u9F31\u9F4E\u9F65\u9F64\u9F92\u4EB9\u56C6\u56C5\u56CB\u5971\u5B4B\u5B4C\u5DD5\u5DD1\u5EF2\u6521\u6520\u6526\u6522\u6B0B\u6B08\u6B09\u6C0D\u7055\u7056\u7057\u7052\u721E\u721F\u72A9\u737F\u74D8\u74D5\u74D9\u74D7\u766D\u76AD\u7935\u79B4\u7A70\u7A71\u7C57\u7C5C\u7C59\u7C5B\u7C5A"],
["f740", "\u7CF4\u7CF1\u7E91\u7F4F\u7F87\u81DE\u826B\u8634\u8635\u8633\u862C\u8632\u8636\u882C\u8828\u8826\u882A\u8825\u8971\u89BF\u89BE\u89FB\u8B7E\u8B84\u8B82\u8B86\u8B85\u8B7F\u8D15\u8E95\u8E94\u8E9A\u8E92\u8E90\u8E96\u8E97\u8F60\u8F62\u9147\u944C\u9450\u944A\u944B\u944F\u9447\u9445\u9448\u9449\u9446\u973F\u97E3\u986A\u9869\u98CB\u9954\u995B\u9A4E\u9A53\u9A54\u9A4C\u9A4F\u9A48\u9A4A"],
["f7a1", "\u9A49\u9A52\u9A50\u9AD0\u9B19\u9B2B\u9B3B\u9B56\u9B55\u9C46\u9C48\u9C3F\u9C44\u9C39\u9C33\u9C41\u9C3C\u9C37\u9C34\u9C32\u9C3D\u9C36\u9DDB\u9DD2\u9DDE\u9DDA\u9DCB\u9DD0\u9DDC\u9DD1\u9DDF\u9DE9\u9DD9\u9DD8\u9DD6\u9DF5\u9DD5\u9DDD\u9EB6\u9EF0\u9F35\u9F33\u9F32\u9F42\u9F6B\u9F95\u9FA2\u513D\u5299\u58E8\u58E7\u5972\u5B4D\u5DD8\u882F\u5F4F\u6201\u6203\u6204\u6529\u6525\u6596\u66EB\u6B11\u6B12\u6B0F\u6BCA\u705B\u705A\u7222\u7382\u7381\u7383\u7670\u77D4\u7C67\u7C66\u7E95\u826C\u863A\u8640\u8639\u863C\u8631\u863B\u863E\u8830\u8832\u882E\u8833\u8976\u8974\u8973\u89FE"],
["f840", "\u8B8C\u8B8E\u8B8B\u8B88\u8C45\u8D19\u8E98\u8F64\u8F63\u91BC\u9462\u9455\u945D\u9457\u945E\u97C4\u97C5\u9800\u9A56\u9A59\u9B1E\u9B1F\u9B20\u9C52\u9C58\u9C50\u9C4A\u9C4D\u9C4B\u9C55\u9C59\u9C4C\u9C4E\u9DFB\u9DF7\u9DEF\u9DE3\u9DEB\u9DF8\u9DE4\u9DF6\u9DE1\u9DEE\u9DE6\u9DF2\u9DF0\u9DE2\u9DEC\u9DF4\u9DF3\u9DE8\u9DED\u9EC2\u9ED0\u9EF2\u9EF3\u9F06\u9F1C\u9F38\u9F37\u9F36\u9F43\u9F4F"],
["f8a1", "\u9F71\u9F70\u9F6E\u9F6F\u56D3\u56CD\u5B4E\u5C6D\u652D\u66ED\u66EE\u6B13\u705F\u7061\u705D\u7060\u7223\u74DB\u74E5\u77D5\u7938\u79B7\u79B6\u7C6A\u7E97\u7F89\u826D\u8643\u8838\u8837\u8835\u884B\u8B94\u8B95\u8E9E\u8E9F\u8EA0\u8E9D\u91BE\u91BD\u91C2\u946B\u9468\u9469\u96E5\u9746\u9743\u9747\u97C7\u97E5\u9A5E\u9AD5\u9B59\u9C63\u9C67\u9C66\u9C62\u9C5E\u9C60\u9E02\u9DFE\u9E07\u9E03\u9E06\u9E05\u9E00\u9E01\u9E09\u9DFF\u9DFD\u9E04\u9EA0\u9F1E\u9F46\u9F74\u9F75\u9F76\u56D4\u652E\u65B8\u6B18\u6B19\u6B17\u6B1A\u7062\u7226\u72AA\u77D8\u77D9\u7939\u7C69\u7C6B\u7CF6\u7E9A"],
["f940", "\u7E98\u7E9B\u7E99\u81E0\u81E1\u8646\u8647\u8648\u8979\u897A\u897C\u897B\u89FF\u8B98\u8B99\u8EA5\u8EA4\u8EA3\u946E\u946D\u946F\u9471\u9473\u9749\u9872\u995F\u9C68\u9C6E\u9C6D\u9E0B\u9E0D\u9E10\u9E0F\u9E12\u9E11\u9EA1\u9EF5\u9F09\u9F47\u9F78\u9F7B\u9F7A\u9F79\u571E\u7066\u7C6F\u883C\u8DB2\u8EA6\u91C3\u9474\u9478\u9476\u9475\u9A60\u9C74\u9C73\u9C71\u9C75\u9E14\u9E13\u9EF6\u9F0A"],
["f9a1", "\u9FA4\u7068\u7065\u7CF7\u866A\u883E\u883D\u883F\u8B9E\u8C9C\u8EA9\u8EC9\u974B\u9873\u9874\u98CC\u9961\u99AB\u9A64\u9A66\u9A67\u9B24\u9E15\u9E17\u9F48\u6207\u6B1E\u7227\u864C\u8EA8\u9482\u9480\u9481\u9A69\u9A68\u9B2E\u9E19\u7229\u864B\u8B9F\u9483\u9C79\u9EB7\u7675\u9A6B\u9C7A\u9E1D\u7069\u706A\u9EA4\u9F7E\u9F49\u9F98\u7881\u92B9\u88CF\u58BB\u6052\u7CA7\u5AFA\u2554\u2566\u2557\u2560\u256C\u2563\u255A\u2569\u255D\u2552\u2564\u2555\u255E\u256A\u2561\u2558\u2567\u255B\u2553\u2565\u2556\u255F\u256B\u2562\u2559\u2568\u255C\u2551\u2550\u256D\u256E\u2570\u256F\u2593"]
];
}
});
// node_modules/iconv-lite/encodings/tables/big5-added.json
var require_big5_added = __commonJS({
"node_modules/iconv-lite/encodings/tables/big5-added.json"(exports2, module2) {
module2.exports = [
["8740", "\u43F0\u4C32\u4603\u45A6\u4578\u{27267}\u4D77\u45B3\u{27CB1}\u4CE2\u{27CC5}\u3B95\u4736\u4744\u4C47\u4C40\u{242BF}\u{23617}\u{27352}\u{26E8B}\u{270D2}\u4C57\u{2A351}\u474F\u45DA\u4C85\u{27C6C}\u4D07\u4AA4\u46A1\u{26B23}\u7225\u{25A54}\u{21A63}\u{23E06}\u{23F61}\u664D\u56FB"],
["8767", "\u7D95\u591D\u{28BB9}\u3DF4\u9734\u{27BEF}\u5BDB\u{21D5E}\u5AA4\u3625\u{29EB0}\u5AD1\u5BB7\u5CFC\u676E\u8593\u{29945}\u7461\u749D\u3875\u{21D53}\u{2369E}\u{26021}\u3EEC"],
["87a1", "\u{258DE}\u3AF5\u7AFC\u9F97\u{24161}\u{2890D}\u{231EA}\u{20A8A}\u{2325E}\u430A\u8484\u9F96\u942F\u4930\u8613\u5896\u974A\u9218\u79D0\u7A32\u6660\u6A29\u889D\u744C\u7BC5\u6782\u7A2C\u524F\u9046\u34E6\u73C4\u{25DB9}\u74C6\u9FC7\u57B3\u492F\u544C\u4131\u{2368E}\u5818\u7A72\u{27B65}\u8B8F\u46AE\u{26E88}\u4181\u{25D99}\u7BAE\u{224BC}\u9FC8\u{224C1}\u{224C9}\u{224CC}\u9FC9\u8504\u{235BB}\u40B4\u9FCA\u44E1\u{2ADFF}\u62C1\u706E\u9FCB"],
["8840", "\u31C0", 4, "\u{2010C}\u31C5\u{200D1}\u{200CD}\u31C6\u31C7\u{200CB}\u{21FE8}\u31C8\u{200CA}\u31C9\u31CA\u31CB\u31CC\u{2010E}\u31CD\u31CE\u0100\xC1\u01CD\xC0\u0112\xC9\u011A\xC8\u014C\xD3\u01D1\xD2\u0FFF\xCA\u0304\u1EBE\u0FFF\xCA\u030C\u1EC0\xCA\u0101\xE1\u01CE\xE0\u0251\u0113\xE9\u011B\xE8\u012B\xED\u01D0\xEC\u014D\xF3\u01D2\xF2\u016B\xFA\u01D4\xF9\u01D6\u01D8\u01DA"],
["88a1", "\u01DC\xFC\u0FFF\xEA\u0304\u1EBF\u0FFF\xEA\u030C\u1EC1\xEA\u0261\u23DA\u23DB"],
["8940", "\u{2A3A9}\u{21145}"],
["8943", "\u650A"],
["8946", "\u4E3D\u6EDD\u9D4E\u91DF"],
["894c", "\u{27735}\u6491\u4F1A\u4F28\u4FA8\u5156\u5174\u519C\u51E4\u52A1\u52A8\u533B\u534E\u53D1\u53D8\u56E2\u58F0\u5904\u5907\u5932\u5934\u5B66\u5B9E\u5B9F\u5C9A\u5E86\u603B\u6589\u67FE\u6804\u6865\u6D4E\u70BC\u7535\u7EA4\u7EAC\u7EBA\u7EC7\u7ECF\u7EDF\u7F06\u7F37\u827A\u82CF\u836F\u89C6\u8BBE\u8BE2\u8F66\u8F67\u8F6E"],
["89a1", "\u7411\u7CFC\u7DCD\u6946\u7AC9\u5227"],
["89ab", "\u918C\u78B8\u915E\u80BC"],
["89b0", "\u8D0B\u80F6\u{209E7}"],
["89b5", "\u809F\u9EC7\u4CCD\u9DC9\u9E0C\u4C3E\u{29DF6}\u{2700E}\u9E0A\u{2A133}\u35C1"],
["89c1", "\u6E9A\u823E\u7519"],
["89c5", "\u4911\u9A6C\u9A8F\u9F99\u7987\u{2846C}\u{21DCA}\u{205D0}\u{22AE6}\u4E24\u4E81\u4E80\u4E87\u4EBF\u4EEB\u4F37\u344C\u4FBD\u3E48\u5003\u5088\u347D\u3493\u34A5\u5186\u5905\u51DB\u51FC\u5205\u4E89\u5279\u5290\u5327\u35C7\u53A9\u3551\u53B0\u3553\u53C2\u5423\u356D\u3572\u3681\u5493\u54A3\u54B4\u54B9\u54D0\u54EF\u5518\u5523\u5528\u3598\u553F\u35A5\u35BF\u55D7\u35C5"],
["8a40", "\u{27D84}\u5525"],
["8a43", "\u{20C42}\u{20D15}\u{2512B}\u5590\u{22CC6}\u39EC\u{20341}\u8E46\u{24DB8}\u{294E5}\u4053\u{280BE}\u777A\u{22C38}\u3A34\u47D5\u{2815D}\u{269F2}\u{24DEA}\u64DD\u{20D7C}\u{20FB4}\u{20CD5}\u{210F4}\u648D\u8E7E\u{20E96}\u{20C0B}\u{20F64}\u{22CA9}\u{28256}\u{244D3}"],
["8a64", "\u{20D46}\u{29A4D}\u{280E9}\u47F4\u{24EA7}\u{22CC2}\u9AB2\u3A67\u{295F4}\u3FED\u3506\u{252C7}\u{297D4}\u{278C8}\u{22D44}\u9D6E\u9815"],
["8a76", "\u43D9\u{260A5}\u64B4\u54E3\u{22D4C}\u{22BCA}\u{21077}\u39FB\u{2106F}"],
["8aa1", "\u{266DA}\u{26716}\u{279A0}\u64EA\u{25052}\u{20C43}\u8E68\u{221A1}\u{28B4C}\u{20731}"],
["8aac", "\u480B\u{201A9}\u3FFA\u5873\u{22D8D}"],
["8ab2", "\u{245C8}\u{204FC}\u{26097}\u{20F4C}\u{20D96}\u5579\u40BB\u43BA"],
["8abb", "\u4AB4\u{22A66}\u{2109D}\u81AA\u98F5\u{20D9C}\u6379\u39FE\u{22775}\u8DC0\u56A1\u647C\u3E43"],
["8ac9", "\u{2A601}\u{20E09}\u{22ACF}\u{22CC9}"],
["8ace", "\u{210C8}\u{239C2}\u3992\u3A06\u{2829B}\u3578\u{25E49}\u{220C7}\u5652\u{20F31}\u{22CB2}\u{29720}\u34BC\u6C3D\u{24E3B}"],
["8adf", "\u{27574}\u{22E8B}\u{22208}\u{2A65B}\u{28CCD}\u{20E7A}\u{20C34}\u{2681C}\u7F93\u{210CF}\u{22803}\u{22939}\u35FB\u{251E3}\u{20E8C}\u{20F8D}\u{20EAA}\u3F93\u{20F30}\u{20D47}\u{2114F}\u{20E4C}"],
["8af6", "\u{20EAB}\u{20BA9}\u{20D48}\u{210C0}\u{2113D}\u3FF9\u{22696}\u6432\u{20FAD}"],
["8b40", "\u{233F4}\u{27639}\u{22BCE}\u{20D7E}\u{20D7F}\u{22C51}\u{22C55}\u3A18\u{20E98}\u{210C7}\u{20F2E}\u{2A632}\u{26B50}\u{28CD2}\u{28D99}\u{28CCA}\u95AA\u54CC\u82C4\u55B9"],
["8b55", "\u{29EC3}\u9C26\u9AB6\u{2775E}\u{22DEE}\u7140\u816D\u80EC\u5C1C\u{26572}\u8134\u3797\u535F\u{280BD}\u91B6\u{20EFA}\u{20E0F}\u{20E77}\u{20EFB}\u35DD\u{24DEB}\u3609\u{20CD6}\u56AF\u{227B5}\u{210C9}\u{20E10}\u{20E78}\u{21078}\u{21148}\u{28207}\u{21455}\u{20E79}\u{24E50}\u{22DA4}\u5A54\u{2101D}\u{2101E}\u{210F5}\u{210F6}\u579C\u{20E11}"],
["8ba1", "\u{27694}\u{282CD}\u{20FB5}\u{20E7B}\u{2517E}\u3703\u{20FB6}\u{21180}\u{252D8}\u{2A2BD}\u{249DA}\u{2183A}\u{24177}\u{2827C}\u5899\u5268\u361A\u{2573D}\u7BB2\u5B68\u4800\u4B2C\u9F27\u49E7\u9C1F\u9B8D\u{25B74}\u{2313D}\u55FB\u35F2\u5689\u4E28\u5902\u{21BC1}\u{2F878}\u9751\u{20086}\u4E5B\u4EBB\u353E\u5C23\u5F51\u5FC4\u38FA\u624C\u6535\u6B7A\u6C35\u6C3A\u706C\u722B\u4E2C\u72AD\u{248E9}\u7F52\u793B\u7CF9\u7F53\u{2626A}\u34C1"],
["8bde", "\u{2634B}\u8002\u8080\u{26612}\u{26951}\u535D\u8864\u89C1\u{278B2}\u8BA0\u8D1D\u9485\u9578\u957F\u95E8\u{28E0F}\u97E6\u9875\u98CE\u98DE\u9963\u{29810}\u9C7C\u9E1F\u9EC4\u6B6F\uF907\u4E37\u{20087}\u961D\u6237\u94A2"],
["8c40", "\u503B\u6DFE\u{29C73}\u9FA6\u3DC9\u888F\u{2414E}\u7077\u5CF5\u4B20\u{251CD}\u3559\u{25D30}\u6122\u{28A32}\u8FA7\u91F6\u7191\u6719\u73BA\u{23281}\u{2A107}\u3C8B\u{21980}\u4B10\u78E4\u7402\u51AE\u{2870F}\u4009\u6A63\u{2A2BA}\u4223\u860F\u{20A6F}\u7A2A\u{29947}\u{28AEA}\u9755\u704D\u5324\u{2207E}\u93F4\u76D9\u{289E3}\u9FA7\u77DD\u4EA3\u4FF0\u50BC\u4E2F\u4F17\u9FA8\u5434\u7D8B\u5892\u58D0\u{21DB6}\u5E92\u5E99\u5FC2\u{22712}\u658B"],
["8ca1", "\u{233F9}\u6919\u6A43\u{23C63}\u6CFF"],
["8ca7", "\u7200\u{24505}\u738C\u3EDB\u{24A13}\u5B15\u74B9\u8B83\u{25CA4}\u{25695}\u7A93\u7BEC\u7CC3\u7E6C\u82F8\u8597\u9FA9\u8890\u9FAA\u8EB9\u9FAB\u8FCF\u855F\u99E0\u9221\u9FAC\u{28DB9}\u{2143F}\u4071\u42A2\u5A1A"],
["8cc9", "\u9868\u676B\u4276\u573D"],
["8cce", "\u85D6\u{2497B}\u82BF\u{2710D}\u4C81\u{26D74}\u5D7B\u{26B15}\u{26FBE}\u9FAD\u9FAE\u5B96\u9FAF\u66E7\u7E5B\u6E57\u79CA\u3D88\u44C3\u{23256}\u{22796}\u439A\u4536"],
["8ce6", "\u5CD5\u{23B1A}\u8AF9\u5C78\u3D12\u{23551}\u5D78\u9FB2\u7157\u4558\u{240EC}\u{21E23}\u4C77\u3978\u344A\u{201A4}\u{26C41}\u8ACC\u4FB4\u{20239}\u59BF\u816C\u9856\u{298FA}\u5F3B"],
["8d40", "\u{20B9F}"],
["8d42", "\u{221C1}\u{2896D}\u4102\u46BB\u{29079}\u3F07\u9FB3\u{2A1B5}\u40F8\u37D6\u46F7\u{26C46}\u417C\u{286B2}\u{273FF}\u456D\u38D4\u{2549A}\u4561\u451B\u4D89\u4C7B\u4D76\u45EA\u3FC8\u{24B0F}\u3661\u44DE\u44BD\u41ED\u5D3E\u5D48\u5D56\u3DFC\u380F\u5DA4\u5DB9\u3820\u3838\u5E42\u5EBD\u5F25\u5F83\u3908\u3914\u393F\u394D\u60D7\u613D\u5CE5\u3989\u61B7\u61B9\u61CF\u39B8\u622C\u6290\u62E5\u6318\u39F8\u56B1"],
["8da1", "\u3A03\u63E2\u63FB\u6407\u645A\u3A4B\u64C0\u5D15\u5621\u9F9F\u3A97\u6586\u3ABD\u65FF\u6653\u3AF2\u6692\u3B22\u6716\u3B42\u67A4\u6800\u3B58\u684A\u6884\u3B72\u3B71\u3B7B\u6909\u6943\u725C\u6964\u699F\u6985\u3BBC\u69D6\u3BDD\u6A65\u6A74\u6A71\u6A82\u3BEC\u6A99\u3BF2\u6AAB\u6AB5\u6AD4\u6AF6\u6B81\u6BC1\u6BEA\u6C75\u6CAA\u3CCB\u6D02\u6D06\u6D26\u6D81\u3CEF\u6DA4\u6DB1\u6E15\u6E18\u6E29\u6E86\u{289C0}\u6EBB\u6EE2\u6EDA\u9F7F\u6EE8\u6EE9\u6F24\u6F34\u3D46\u{23F41}\u6F81\u6FBE\u3D6A\u3D75\u71B7\u5C99\u3D8A\u702C\u3D91\u7050\u7054\u706F\u707F\u7089\u{20325}\u43C1\u35F1\u{20ED8}"],
["8e40", "\u{23ED7}\u57BE\u{26ED3}\u713E\u{257E0}\u364E\u69A2\u{28BE9}\u5B74\u7A49\u{258E1}\u{294D9}\u7A65\u7A7D\u{259AC}\u7ABB\u7AB0\u7AC2\u7AC3\u71D1\u{2648D}\u41CA\u7ADA\u7ADD\u7AEA\u41EF\u54B2\u{25C01}\u7B0B\u7B55\u7B29\u{2530E}\u{25CFE}\u7BA2\u7B6F\u839C\u{25BB4}\u{26C7F}\u7BD0\u8421\u7B92\u7BB8\u{25D20}\u3DAD\u{25C65}\u8492\u7BFA\u7C06\u7C35\u{25CC1}\u7C44\u7C83\u{24882}\u7CA6\u667D\u{24578}\u7CC9\u7CC7\u7CE6\u7C74\u7CF3\u7CF5\u7CCE"],
["8ea1", "\u7E67\u451D\u{26E44}\u7D5D\u{26ED6}\u748D\u7D89\u7DAB\u7135\u7DB3\u7DD2\u{24057}\u{26029}\u7DE4\u3D13\u7DF5\u{217F9}\u7DE5\u{2836D}\u7E1D\u{26121}\u{2615A}\u7E6E\u7E92\u432B\u946C\u7E27\u7F40\u7F41\u7F47\u7936\u{262D0}\u99E1\u7F97\u{26351}\u7FA3\u{21661}\u{20068}\u455C\u{23766}\u4503\u{2833A}\u7FFA\u{26489}\u8005\u8008\u801D\u8028\u802F\u{2A087}\u{26CC3}\u803B\u803C\u8061\u{22714}\u4989\u{26626}\u{23DE3}\u{266E8}\u6725\u80A7\u{28A48}\u8107\u811A\u58B0\u{226F6}\u6C7F\u{26498}\u{24FB8}\u64E7\u{2148A}\u8218\u{2185E}\u6A53\u{24A65}\u{24A95}\u447A\u8229\u{20B0D}\u{26A52}\u{23D7E}\u4FF9\u{214FD}\u84E2\u8362\u{26B0A}\u{249A7}\u{23530}\u{21773}\u{23DF8}\u82AA\u691B\u{2F994}\u41DB"],
["8f40", "\u854B\u82D0\u831A\u{20E16}\u{217B4}\u36C1\u{2317D}\u{2355A}\u827B\u82E2\u8318\u{23E8B}\u{26DA3}\u{26B05}\u{26B97}\u{235CE}\u3DBF\u831D\u55EC\u8385\u450B\u{26DA5}\u83AC\u83C1\u83D3\u347E\u{26ED4}\u6A57\u855A\u3496\u{26E42}\u{22EEF}\u8458\u{25BE4}\u8471\u3DD3\u44E4\u6AA7\u844A\u{23CB5}\u7958\u84A8\u{26B96}\u{26E77}\u{26E43}\u84DE\u840F\u8391\u44A0\u8493\u84E4\u{25C91}\u4240\u{25CC0}\u4543\u8534\u5AF2\u{26E99}\u4527\u8573\u4516\u67BF\u8616"],
["8fa1", "\u{28625}\u{2863B}\u85C1\u{27088}\u8602\u{21582}\u{270CD}\u{2F9B2}\u456A\u8628\u3648\u{218A2}\u53F7\u{2739A}\u867E\u8771\u{2A0F8}\u87EE\u{22C27}\u87B1\u87DA\u880F\u5661\u866C\u6856\u460F\u8845\u8846\u{275E0}\u{23DB9}\u{275E4}\u885E\u889C\u465B\u88B4\u88B5\u63C1\u88C5\u7777\u{2770F}\u8987\u898A\u89A6\u89A9\u89A7\u89BC\u{28A25}\u89E7\u{27924}\u{27ABD}\u8A9C\u7793\u91FE\u8A90\u{27A59}\u7AE9\u{27B3A}\u{23F8F}\u4713\u{27B38}\u717C\u8B0C\u8B1F\u{25430}\u{25565}\u8B3F\u8B4C\u8B4D\u8AA9\u{24A7A}\u8B90\u8B9B\u8AAF\u{216DF}\u4615\u884F\u8C9B\u{27D54}\u{27D8F}\u{2F9D4}\u3725\u{27D53}\u8CD6\u{27D98}\u{27DBD}\u8D12\u8D03\u{21910}\u8CDB\u705C\u8D11\u{24CC9}\u3ED0\u8D77"],
["9040", "\u8DA9\u{28002}\u{21014}\u{2498A}\u3B7C\u{281BC}\u{2710C}\u7AE7\u8EAD\u8EB6\u8EC3\u92D4\u8F19\u8F2D\u{28365}\u{28412}\u8FA5\u9303\u{2A29F}\u{20A50}\u8FB3\u492A\u{289DE}\u{2853D}\u{23DBB}\u5EF8\u{23262}\u8FF9\u{2A014}\u{286BC}\u{28501}\u{22325}\u3980\u{26ED7}\u9037\u{2853C}\u{27ABE}\u9061\u{2856C}\u{2860B}\u90A8\u{28713}\u90C4\u{286E6}\u90AE\u90FD\u9167\u3AF0\u91A9\u91C4\u7CAC\u{28933}\u{21E89}\u920E\u6C9F\u9241\u9262\u{255B9}\u92B9\u{28AC6}\u{23C9B}\u{28B0C}\u{255DB}"],
["90a1", "\u{20D31}\u932C\u936B\u{28AE1}\u{28BEB}\u708F\u5AC3\u{28AE2}\u{28AE5}\u4965\u9244\u{28BEC}\u{28C39}\u{28BFF}\u9373\u945B\u8EBC\u9585\u95A6\u9426\u95A0\u6FF6\u42B9\u{2267A}\u{286D8}\u{2127C}\u{23E2E}\u49DF\u6C1C\u967B\u9696\u416C\u96A3\u{26ED5}\u61DA\u96B6\u78F5\u{28AE0}\u96BD\u53CC\u49A1\u{26CB8}\u{20274}\u{26410}\u{290AF}\u{290E5}\u{24AD1}\u{21915}\u{2330A}\u9731\u8642\u9736\u4A0F\u453D\u4585\u{24AE9}\u7075\u5B41\u971B\u975C\u{291D5}\u9757\u5B4A\u{291EB}\u975F\u9425\u50D0\u{230B7}\u{230BC}\u9789\u979F\u97B1\u97BE\u97C0\u97D2\u97E0\u{2546C}\u97EE\u741C\u{29433}\u97FF\u97F5\u{2941D}\u{2797A}\u4AD1\u9834\u9833\u984B\u9866\u3B0E\u{27175}\u3D51\u{20630}\u{2415C}"],
["9140", "\u{25706}\u98CA\u98B7\u98C8\u98C7\u4AFF\u{26D27}\u{216D3}\u55B0\u98E1\u98E6\u98EC\u9378\u9939\u{24A29}\u4B72\u{29857}\u{29905}\u99F5\u9A0C\u9A3B\u9A10\u9A58\u{25725}\u36C4\u{290B1}\u{29BD5}\u9AE0\u9AE2\u{29B05}\u9AF4\u4C0E\u9B14\u9B2D\u{28600}\u5034\u9B34\u{269A8}\u38C3\u{2307D}\u9B50\u9B40\u{29D3E}\u5A45\u{21863}\u9B8E\u{2424B}\u9C02\u9BFF\u9C0C\u{29E68}\u9DD4\u{29FB7}\u{2A192}\u{2A1AB}\u{2A0E1}\u{2A123}\u{2A1DF}\u9D7E\u9D83\u{2A134}\u9E0E\u6888"],
["91a1", "\u9DC4\u{2215B}\u{2A193}\u{2A220}\u{2193B}\u{2A233}\u9D39\u{2A0B9}\u{2A2B4}\u9E90\u9E95\u9E9E\u9EA2\u4D34\u9EAA\u9EAF\u{24364}\u9EC1\u3B60\u39E5\u3D1D\u4F32\u37BE\u{28C2B}\u9F02\u9F08\u4B96\u9424\u{26DA2}\u9F17\u9F16\u9F39\u569F\u568A\u9F45\u99B8\u{2908B}\u97F2\u847F\u9F62\u9F69\u7ADC\u9F8E\u7216\u4BBE\u{24975}\u{249BB}\u7177\u{249F8}\u{24348}\u{24A51}\u739E\u{28BDA}\u{218FA}\u799F\u{2897E}\u{28E36}\u9369\u93F3\u{28A44}\u92EC\u9381\u93CB\u{2896C}\u{244B9}\u7217\u3EEB\u7772\u7A43\u70D0\u{24473}\u{243F8}\u717E\u{217EF}\u70A3\u{218BE}\u{23599}\u3EC7\u{21885}\u{2542F}\u{217F8}\u3722\u{216FB}\u{21839}\u36E1\u{21774}\u{218D1}\u{25F4B}\u3723\u{216C0}\u575B\u{24A25}\u{213FE}\u{212A8}"],
["9240", "\u{213C6}\u{214B6}\u8503\u{236A6}\u8503\u8455\u{24994}\u{27165}\u{23E31}\u{2555C}\u{23EFB}\u{27052}\u44F4\u{236EE}\u{2999D}\u{26F26}\u67F9\u3733\u3C15\u3DE7\u586C\u{21922}\u6810\u4057\u{2373F}\u{240E1}\u{2408B}\u{2410F}\u{26C21}\u54CB\u569E\u{266B1}\u5692\u{20FDF}\u{20BA8}\u{20E0D}\u93C6\u{28B13}\u939C\u4EF8\u512B\u3819\u{24436}\u4EBC\u{20465}\u{2037F}\u4F4B\u4F8A\u{25651}\u5A68\u{201AB}\u{203CB}\u3999\u{2030A}\u{20414}\u3435\u4F29\u{202C0}\u{28EB3}\u{20275}\u8ADA\u{2020C}\u4E98"],
["92a1", "\u50CD\u510D\u4FA2\u4F03\u{24A0E}\u{23E8A}\u4F42\u502E\u506C\u5081\u4FCC\u4FE5\u5058\u50FC\u5159\u515B\u515D\u515E\u6E76\u{23595}\u{23E39}\u{23EBF}\u6D72\u{21884}\u{23E89}\u51A8\u51C3\u{205E0}\u44DD\u{204A3}\u{20492}\u{20491}\u8D7A\u{28A9C}\u{2070E}\u5259\u52A4\u{20873}\u52E1\u936E\u467A\u718C\u{2438C}\u{20C20}\u{249AC}\u{210E4}\u69D1\u{20E1D}\u7479\u3EDE\u7499\u7414\u7456\u7398\u4B8E\u{24ABC}\u{2408D}\u53D0\u3584\u720F\u{240C9}\u55B4\u{20345}\u54CD\u{20BC6}\u571D\u925D\u96F4\u9366\u57DD\u578D\u577F\u363E\u58CB\u5A99\u{28A46}\u{216FA}\u{2176F}\u{21710}\u5A2C\u59B8\u928F\u5A7E\u5ACF\u5A12\u{25946}\u{219F3}\u{21861}\u{24295}\u36F5\u6D05\u7443\u5A21\u{25E83}"],
["9340", "\u5A81\u{28BD7}\u{20413}\u93E0\u748C\u{21303}\u7105\u4972\u9408\u{289FB}\u93BD\u37A0\u5C1E\u5C9E\u5E5E\u5E48\u{21996}\u{2197C}\u{23AEE}\u5ECD\u5B4F\u{21903}\u{21904}\u3701\u{218A0}\u36DD\u{216FE}\u36D3\u812A\u{28A47}\u{21DBA}\u{23472}\u{289A8}\u5F0C\u5F0E\u{21927}\u{217AB}\u5A6B\u{2173B}\u5B44\u8614\u{275FD}\u8860\u607E\u{22860}\u{2262B}\u5FDB\u3EB8\u{225AF}\u{225BE}\u{29088}\u{26F73}\u61C0\u{2003E}\u{20046}\u{2261B}\u6199\u6198\u6075\u{22C9B}\u{22D07}\u{246D4}\u{2914D}"],
["93a1", "\u6471\u{24665}\u{22B6A}\u3A29\u{22B22}\u{23450}\u{298EA}\u{22E78}\u6337\u{2A45B}\u64B6\u6331\u63D1\u{249E3}\u{22D67}\u62A4\u{22CA1}\u643B\u656B\u6972\u3BF4\u{2308E}\u{232AD}\u{24989}\u{232AB}\u550D\u{232E0}\u{218D9}\u{2943F}\u66CE\u{23289}\u{231B3}\u3AE0\u4190\u{25584}\u{28B22}\u{2558F}\u{216FC}\u{2555B}\u{25425}\u78EE\u{23103}\u{2182A}\u{23234}\u3464\u{2320F}\u{23182}\u{242C9}\u668E\u{26D24}\u666B\u4B93\u6630\u{27870}\u{21DEB}\u6663\u{232D2}\u{232E1}\u661E\u{25872}\u38D1\u{2383A}\u{237BC}\u3B99\u{237A2}\u{233FE}\u74D0\u3B96\u678F\u{2462A}\u68B6\u681E\u3BC4\u6ABE\u3863\u{237D5}\u{24487}\u6A33\u6A52\u6AC9\u6B05\u{21912}\u6511\u6898\u6A4C\u3BD7\u6A7A\u6B57\u{23FC0}\u{23C9A}\u93A0\u92F2\u{28BEA}\u{28ACB}"],
["9440", "\u9289\u{2801E}\u{289DC}\u9467\u6DA5\u6F0B\u{249EC}\u6D67\u{23F7F}\u3D8F\u6E04\u{2403C}\u5A3D\u6E0A\u5847\u6D24\u7842\u713B\u{2431A}\u{24276}\u70F1\u7250\u7287\u7294\u{2478F}\u{24725}\u5179\u{24AA4}\u{205EB}\u747A\u{23EF8}\u{2365F}\u{24A4A}\u{24917}\u{25FE1}\u3F06\u3EB1\u{24ADF}\u{28C23}\u{23F35}\u60A7\u3EF3\u74CC\u743C\u9387\u7437\u449F\u{26DEA}\u4551\u7583\u3F63\u{24CD9}\u{24D06}\u3F58\u7555\u7673\u{2A5C6}\u3B19\u7468\u{28ACC}\u{249AB}\u{2498E}\u3AFB"],
["94a1", "\u3DCD\u{24A4E}\u3EFF\u{249C5}\u{248F3}\u91FA\u5732\u9342\u{28AE3}\u{21864}\u50DF\u{25221}\u{251E7}\u7778\u{23232}\u770E\u770F\u777B\u{24697}\u{23781}\u3A5E\u{248F0}\u7438\u749B\u3EBF\u{24ABA}\u{24AC7}\u40C8\u{24A96}\u{261AE}\u9307\u{25581}\u781E\u788D\u7888\u78D2\u73D0\u7959\u{27741}\u{256E3}\u410E\u799B\u8496\u79A5\u6A2D\u{23EFA}\u7A3A\u79F4\u416E\u{216E6}\u4132\u9235\u79F1\u{20D4C}\u{2498C}\u{20299}\u{23DBA}\u{2176E}\u3597\u556B\u3570\u36AA\u{201D4}\u{20C0D}\u7AE2\u5A59\u{226F5}\u{25AAF}\u{25A9C}\u5A0D\u{2025B}\u78F0\u5A2A\u{25BC6}\u7AFE\u41F9\u7C5D\u7C6D\u4211\u{25BB3}\u{25EBC}\u{25EA6}\u7CCD\u{249F9}\u{217B0}\u7C8E\u7C7C\u7CAE\u6AB2\u7DDC\u7E07\u7DD3\u7F4E\u{26261}"],
["9540", "\u{2615C}\u{27B48}\u7D97\u{25E82}\u426A\u{26B75}\u{20916}\u67D6\u{2004E}\u{235CF}\u57C4\u{26412}\u{263F8}\u{24962}\u7FDD\u7B27\u{2082C}\u{25AE9}\u{25D43}\u7B0C\u{25E0E}\u99E6\u8645\u9A63\u6A1C\u{2343F}\u39E2\u{249F7}\u{265AD}\u9A1F\u{265A0}\u8480\u{27127}\u{26CD1}\u44EA\u8137\u4402\u80C6\u8109\u8142\u{267B4}\u98C3\u{26A42}\u8262\u8265\u{26A51}\u8453\u{26DA7}\u8610\u{2721B}\u5A86\u417F\u{21840}\u5B2B\u{218A1}\u5AE4\u{218D8}\u86A0\u{2F9BC}\u{23D8F}\u882D\u{27422}\u5A02"],
["95a1", "\u886E\u4F45\u8887\u88BF\u88E6\u8965\u894D\u{25683}\u8954\u{27785}\u{27784}\u{28BF5}\u{28BD9}\u{28B9C}\u{289F9}\u3EAD\u84A3\u46F5\u46CF\u37F2\u8A3D\u8A1C\u{29448}\u5F4D\u922B\u{24284}\u65D4\u7129\u70C4\u{21845}\u9D6D\u8C9F\u8CE9\u{27DDC}\u599A\u77C3\u59F0\u436E\u36D4\u8E2A\u8EA7\u{24C09}\u8F30\u8F4A\u42F4\u6C58\u6FBB\u{22321}\u489B\u6F79\u6E8B\u{217DA}\u9BE9\u36B5\u{2492F}\u90BB\u9097\u5571\u4906\u91BB\u9404\u{28A4B}\u4062\u{28AFC}\u9427\u{28C1D}\u{28C3B}\u84E5\u8A2B\u9599\u95A7\u9597\u9596\u{28D34}\u7445\u3EC2\u{248FF}\u{24A42}\u{243EA}\u3EE7\u{23225}\u968F\u{28EE7}\u{28E66}\u{28E65}\u3ECC\u{249ED}\u{24A78}\u{23FEE}\u7412\u746B\u3EFC\u9741\u{290B0}"],
["9640", "\u6847\u4A1D\u{29093}\u{257DF}\u975D\u9368\u{28989}\u{28C26}\u{28B2F}\u{263BE}\u92BA\u5B11\u8B69\u493C\u73F9\u{2421B}\u979B\u9771\u9938\u{20F26}\u5DC1\u{28BC5}\u{24AB2}\u981F\u{294DA}\u92F6\u{295D7}\u91E5\u44C0\u{28B50}\u{24A67}\u{28B64}\u98DC\u{28A45}\u3F00\u922A\u4925\u8414\u993B\u994D\u{27B06}\u3DFD\u999B\u4B6F\u99AA\u9A5C\u{28B65}\u{258C8}\u6A8F\u9A21\u5AFE\u9A2F\u{298F1}\u4B90\u{29948}\u99BC\u4BBD\u4B97\u937D\u5872\u{21302}\u5822\u{249B8}"],
["96a1", "\u{214E8}\u7844\u{2271F}\u{23DB8}\u68C5\u3D7D\u9458\u3927\u6150\u{22781}\u{2296B}\u6107\u9C4F\u9C53\u9C7B\u9C35\u9C10\u9B7F\u9BCF\u{29E2D}\u9B9F\u{2A1F5}\u{2A0FE}\u9D21\u4CAE\u{24104}\u9E18\u4CB0\u9D0C\u{2A1B4}\u{2A0ED}\u{2A0F3}\u{2992F}\u9DA5\u84BD\u{26E12}\u{26FDF}\u{26B82}\u85FC\u4533\u{26DA4}\u{26E84}\u{26DF0}\u8420\u85EE\u{26E00}\u{237D7}\u{26064}\u79E2\u{2359C}\u{23640}\u492D\u{249DE}\u3D62\u93DB\u92BE\u9348\u{202BF}\u78B9\u9277\u944D\u4FE4\u3440\u9064\u{2555D}\u783D\u7854\u78B6\u784B\u{21757}\u{231C9}\u{24941}\u369A\u4F72\u6FDA\u6FD9\u701E\u701E\u5414\u{241B5}\u57BB\u58F3\u578A\u9D16\u57D7\u7134\u34AF\u{241AC}\u71EB\u{26C40}\u{24F97}\u5B28\u{217B5}\u{28A49}"],
["9740", "\u610C\u5ACE\u5A0B\u42BC\u{24488}\u372C\u4B7B\u{289FC}\u93BB\u93B8\u{218D6}\u{20F1D}\u8472\u{26CC0}\u{21413}\u{242FA}\u{22C26}\u{243C1}\u5994\u{23DB7}\u{26741}\u7DA8\u{2615B}\u{260A4}\u{249B9}\u{2498B}\u{289FA}\u92E5\u73E2\u3EE9\u74B4\u{28B63}\u{2189F}\u3EE1\u{24AB3}\u6AD8\u73F3\u73FB\u3ED6\u{24A3E}\u{24A94}\u{217D9}\u{24A66}\u{203A7}\u{21424}\u{249E5}\u7448\u{24916}\u70A5\u{24976}\u9284\u73E6\u935F\u{204FE}\u9331\u{28ACE}\u{28A16}\u9386\u{28BE7}\u{255D5}\u4935\u{28A82}\u716B"],
["97a1", "\u{24943}\u{20CFF}\u56A4\u{2061A}\u{20BEB}\u{20CB8}\u5502\u79C4\u{217FA}\u7DFE\u{216C2}\u{24A50}\u{21852}\u452E\u9401\u370A\u{28AC0}\u{249AD}\u59B0\u{218BF}\u{21883}\u{27484}\u5AA1\u36E2\u{23D5B}\u36B0\u925F\u5A79\u{28A81}\u{21862}\u9374\u3CCD\u{20AB4}\u4A96\u398A\u50F4\u3D69\u3D4C\u{2139C}\u7175\u42FB\u{28218}\u6E0F\u{290E4}\u44EB\u6D57\u{27E4F}\u7067\u6CAF\u3CD6\u{23FED}\u{23E2D}\u6E02\u6F0C\u3D6F\u{203F5}\u7551\u36BC\u34C8\u4680\u3EDA\u4871\u59C4\u926E\u493E\u8F41\u{28C1C}\u{26BC0}\u5812\u57C8\u36D6\u{21452}\u70FE\u{24362}\u{24A71}\u{22FE3}\u{212B0}\u{223BD}\u68B9\u6967\u{21398}\u{234E5}\u{27BF4}\u{236DF}\u{28A83}\u{237D6}\u{233FA}\u{24C9F}\u6A1A\u{236AD}\u{26CB7}\u843E\u44DF\u44CE"],
["9840", "\u{26D26}\u{26D51}\u{26C82}\u{26FDE}\u6F17\u{27109}\u833D\u{2173A}\u83ED\u{26C80}\u{27053}\u{217DB}\u5989\u5A82\u{217B3}\u5A61\u5A71\u{21905}\u{241FC}\u372D\u59EF\u{2173C}\u36C7\u718E\u9390\u669A\u{242A5}\u5A6E\u5A2B\u{24293}\u6A2B\u{23EF9}\u{27736}\u{2445B}\u{242CA}\u711D\u{24259}\u{289E1}\u4FB0\u{26D28}\u5CC2\u{244CE}\u{27E4D}\u{243BD}\u6A0C\u{24256}\u{21304}\u70A6\u7133\u{243E9}\u3DA5\u6CDF\u{2F825}\u{24A4F}\u7E65\u59EB\u5D2F\u3DF3\u5F5C\u{24A5D}\u{217DF}\u7DA4\u8426"],
["98a1", "\u5485\u{23AFA}\u{23300}\u{20214}\u577E\u{208D5}\u{20619}\u3FE5\u{21F9E}\u{2A2B6}\u7003\u{2915B}\u5D70\u738F\u7CD3\u{28A59}\u{29420}\u4FC8\u7FE7\u72CD\u7310\u{27AF4}\u7338\u7339\u{256F6}\u7341\u7348\u3EA9\u{27B18}\u906C\u71F5\u{248F2}\u73E1\u81F6\u3ECA\u770C\u3ED1\u6CA2\u56FD\u7419\u741E\u741F\u3EE2\u3EF0\u3EF4\u3EFA\u74D3\u3F0E\u3F53\u7542\u756D\u7572\u758D\u3F7C\u75C8\u75DC\u3FC0\u764D\u3FD7\u7674\u3FDC\u767A\u{24F5C}\u7188\u5623\u8980\u5869\u401D\u7743\u4039\u6761\u4045\u35DB\u7798\u406A\u406F\u5C5E\u77BE\u77CB\u58F2\u7818\u70B9\u781C\u40A8\u7839\u7847\u7851\u7866\u8448\u{25535}\u7933\u6803\u7932\u4103"],
["9940", "\u4109\u7991\u7999\u8FBB\u7A06\u8FBC\u4167\u7A91\u41B2\u7ABC\u8279\u41C4\u7ACF\u7ADB\u41CF\u4E21\u7B62\u7B6C\u7B7B\u7C12\u7C1B\u4260\u427A\u7C7B\u7C9C\u428C\u7CB8\u4294\u7CED\u8F93\u70C0\u{20CCF}\u7DCF\u7DD4\u7DD0\u7DFD\u7FAE\u7FB4\u729F\u4397\u8020\u8025\u7B39\u802E\u8031\u8054\u3DCC\u57B4\u70A0\u80B7\u80E9\u43ED\u810C\u732A\u810E\u8112\u7560\u8114\u4401\u3B39\u8156\u8159\u815A"],
["99a1", "\u4413\u583A\u817C\u8184\u4425\u8193\u442D\u81A5\u57EF\u81C1\u81E4\u8254\u448F\u82A6\u8276\u82CA\u82D8\u82FF\u44B0\u8357\u9669\u698A\u8405\u70F5\u8464\u60E3\u8488\u4504\u84BE\u84E1\u84F8\u8510\u8538\u8552\u453B\u856F\u8570\u85E0\u4577\u8672\u8692\u86B2\u86EF\u9645\u878B\u4606\u4617\u88AE\u88FF\u8924\u8947\u8991\u{27967}\u8A29\u8A38\u8A94\u8AB4\u8C51\u8CD4\u8CF2\u8D1C\u4798\u585F\u8DC3\u47ED\u4EEE\u8E3A\u55D8\u5754\u8E71\u55F5\u8EB0\u4837\u8ECE\u8EE2\u8EE4\u8EED\u8EF2\u8FB7\u8FC1\u8FCA\u8FCC\u9033\u99C4\u48AD\u98E0\u9213\u491E\u9228\u9258\u926B\u92B1\u92AE\u92BF"],
["9a40", "\u92E3\u92EB\u92F3\u92F4\u92FD\u9343\u9384\u93AD\u4945\u4951\u9EBF\u9417\u5301\u941D\u942D\u943E\u496A\u9454\u9479\u952D\u95A2\u49A7\u95F4\u9633\u49E5\u67A0\u4A24\u9740\u4A35\u97B2\u97C2\u5654\u4AE4\u60E8\u98B9\u4B19\u98F1\u5844\u990E\u9919\u51B4\u991C\u9937\u9942\u995D\u9962\u4B70\u99C5\u4B9D\u9A3C\u9B0F\u7A83\u9B69\u9B81\u9BDD\u9BF1\u9BF4\u4C6D\u9C20\u376F\u{21BC2}\u9D49\u9C3A"],
["9aa1", "\u9EFE\u5650\u9D93\u9DBD\u9DC0\u9DFC\u94F6\u8FB6\u9E7B\u9EAC\u9EB1\u9EBD\u9EC6\u94DC\u9EE2\u9EF1\u9EF8\u7AC8\u9F44\u{20094}\u{202B7}\u{203A0}\u691A\u94C3\u59AC\u{204D7}\u5840\u94C1\u37B9\u{205D5}\u{20615}\u{20676}\u{216BA}\u5757\u7173\u{20AC2}\u{20ACD}\u{20BBF}\u546A\u{2F83B}\u{20BCB}\u549E\u{20BFB}\u{20C3B}\u{20C53}\u{20C65}\u{20C7C}\u60E7\u{20C8D}\u567A\u{20CB5}\u{20CDD}\u{20CED}\u{20D6F}\u{20DB2}\u{20DC8}\u6955\u9C2F\u87A5\u{20E04}\u{20E0E}\u{20ED7}\u{20F90}\u{20F2D}\u{20E73}\u5C20\u{20FBC}\u5E0B\u{2105C}\u{2104F}\u{21076}\u671E\u{2107B}\u{21088}\u{21096}\u3647\u{210BF}\u{210D3}\u{2112F}\u{2113B}\u5364\u84AD\u{212E3}\u{21375}\u{21336}\u8B81\u{21577}\u{21619}\u{217C3}\u{217C7}\u4E78\u70BB\u{2182D}\u{2196A}"],
["9b40", "\u{21A2D}\u{21A45}\u{21C2A}\u{21C70}\u{21CAC}\u{21EC8}\u62C3\u{21ED5}\u{21F15}\u7198\u6855\u{22045}\u69E9\u36C8\u{2227C}\u{223D7}\u{223FA}\u{2272A}\u{22871}\u{2294F}\u82FD\u{22967}\u{22993}\u{22AD5}\u89A5\u{22AE8}\u8FA0\u{22B0E}\u97B8\u{22B3F}\u9847\u9ABD\u{22C4C}"],
["9b62", "\u{22C88}\u{22CB7}\u{25BE8}\u{22D08}\u{22D12}\u{22DB7}\u{22D95}\u{22E42}\u{22F74}\u{22FCC}\u{23033}\u{23066}\u{2331F}\u{233DE}\u5FB1\u6648\u66BF\u{27A79}\u{23567}\u{235F3}\u7201\u{249BA}\u77D7\u{2361A}\u{23716}\u7E87\u{20346}\u58B5\u670E"],
["9ba1", "\u6918\u{23AA7}\u{27657}\u{25FE2}\u{23E11}\u{23EB9}\u{275FE}\u{2209A}\u48D0\u4AB8\u{24119}\u{28A9A}\u{242EE}\u{2430D}\u{2403B}\u{24334}\u{24396}\u{24A45}\u{205CA}\u51D2\u{20611}\u599F\u{21EA8}\u3BBE\u{23CFF}\u{24404}\u{244D6}\u5788\u{24674}\u399B\u{2472F}\u{285E8}\u{299C9}\u3762\u{221C3}\u8B5E\u{28B4E}\u99D6\u{24812}\u{248FB}\u{24A15}\u7209\u{24AC0}\u{20C78}\u5965\u{24EA5}\u{24F86}\u{20779}\u8EDA\u{2502C}\u528F\u573F\u7171\u{25299}\u{25419}\u{23F4A}\u{24AA7}\u55BC\u{25446}\u{2546E}\u{26B52}\u91D4\u3473\u{2553F}\u{27632}\u{2555E}\u4718\u{25562}\u{25566}\u{257C7}\u{2493F}\u{2585D}\u5066\u34FB\u{233CC}\u60DE\u{25903}\u477C\u{28948}\u{25AAE}\u{25B89}\u{25C06}\u{21D90}\u57A1\u7151\u6FB6\u{26102}\u{27C12}\u9056\u{261B2}\u{24F9A}\u8B62\u{26402}\u{2644A}"],
["9c40", "\u5D5B\u{26BF7}\u8F36\u{26484}\u{2191C}\u8AEA\u{249F6}\u{26488}\u{23FEF}\u{26512}\u4BC0\u{265BF}\u{266B5}\u{2271B}\u9465\u{257E1}\u6195\u5A27\u{2F8CD}\u4FBB\u56B9\u{24521}\u{266FC}\u4E6A\u{24934}\u9656\u6D8F\u{26CBD}\u3618\u8977\u{26799}\u{2686E}\u{26411}\u{2685E}\u71DF\u{268C7}\u7B42\u{290C0}\u{20A11}\u{26926}\u9104\u{26939}\u7A45\u9DF0\u{269FA}\u9A26\u{26A2D}\u365F\u{26469}\u{20021}\u7983\u{26A34}\u{26B5B}\u5D2C\u{23519}\u83CF\u{26B9D}\u46D0\u{26CA4}\u753B\u8865\u{26DAE}\u58B6"],
["9ca1", "\u371C\u{2258D}\u{2704B}\u{271CD}\u3C54\u{27280}\u{27285}\u9281\u{2217A}\u{2728B}\u9330\u{272E6}\u{249D0}\u6C39\u949F\u{27450}\u{20EF8}\u8827\u88F5\u{22926}\u{28473}\u{217B1}\u6EB8\u{24A2A}\u{21820}\u39A4\u36B9\u5C10\u79E3\u453F\u66B6\u{29CAD}\u{298A4}\u8943\u{277CC}\u{27858}\u56D6\u40DF\u{2160A}\u39A1\u{2372F}\u{280E8}\u{213C5}\u71AD\u8366\u{279DD}\u{291A8}\u5A67\u4CB7\u{270AF}\u{289AB}\u{279FD}\u{27A0A}\u{27B0B}\u{27D66}\u{2417A}\u7B43\u797E\u{28009}\u6FB5\u{2A2DF}\u6A03\u{28318}\u53A2\u{26E07}\u93BF\u6836\u975D\u{2816F}\u{28023}\u{269B5}\u{213ED}\u{2322F}\u{28048}\u5D85\u{28C30}\u{28083}\u5715\u9823\u{28949}\u5DAB\u{24988}\u65BE\u69D5\u53D2\u{24AA5}\u{23F81}\u3C11\u6736\u{28090}\u{280F4}\u{2812E}\u{21FA1}\u{2814F}"],
["9d40", "\u{28189}\u{281AF}\u{2821A}\u{28306}\u{2832F}\u{2838A}\u35CA\u{28468}\u{286AA}\u48FA\u63E6\u{28956}\u7808\u9255\u{289B8}\u43F2\u{289E7}\u43DF\u{289E8}\u{28B46}\u{28BD4}\u59F8\u{28C09}\u8F0B\u{28FC5}\u{290EC}\u7B51\u{29110}\u{2913C}\u3DF7\u{2915E}\u{24ACA}\u8FD0\u728F\u568B\u{294E7}\u{295E9}\u{295B0}\u{295B8}\u{29732}\u{298D1}\u{29949}\u{2996A}\u{299C3}\u{29A28}\u{29B0E}\u{29D5A}\u{29D9B}\u7E9F\u{29EF8}\u{29F23}\u4CA4\u9547\u{2A293}\u71A2\u{2A2FF}\u4D91\u9012\u{2A5CB}\u4D9C\u{20C9C}\u8FBE\u55C1"],
["9da1", "\u8FBA\u{224B0}\u8FB9\u{24A93}\u4509\u7E7F\u6F56\u6AB1\u4EEA\u34E4\u{28B2C}\u{2789D}\u373A\u8E80\u{217F5}\u{28024}\u{28B6C}\u{28B99}\u{27A3E}\u{266AF}\u3DEB\u{27655}\u{23CB7}\u{25635}\u{25956}\u4E9A\u{25E81}\u{26258}\u56BF\u{20E6D}\u8E0E\u5B6D\u{23E88}\u{24C9E}\u63DE\u62D0\u{217F6}\u{2187B}\u6530\u562D\u{25C4A}\u541A\u{25311}\u3DC6\u{29D98}\u4C7D\u5622\u561E\u7F49\u{25ED8}\u5975\u{23D40}\u8770\u4E1C\u{20FEA}\u{20D49}\u{236BA}\u8117\u9D5E\u8D18\u763B\u9C45\u764E\u77B9\u9345\u5432\u8148\u82F7\u5625\u8132\u8418\u80BD\u55EA\u7962\u5643\u5416\u{20E9D}\u35CE\u5605\u55F1\u66F1\u{282E2}\u362D\u7534\u55F0\u55BA\u5497\u5572\u{20C41}\u{20C96}\u5ED0\u{25148}\u{20E76}\u{22C62}"],
["9e40", "\u{20EA2}\u9EAB\u7D5A\u55DE\u{21075}\u629D\u976D\u5494\u8CCD\u71F6\u9176\u63FC\u63B9\u63FE\u5569\u{22B43}\u9C72\u{22EB3}\u519A\u34DF\u{20DA7}\u51A7\u544D\u551E\u5513\u7666\u8E2D\u{2688A}\u75B1\u80B6\u8804\u8786\u88C7\u81B6\u841C\u{210C1}\u44EC\u7304\u{24706}\u5B90\u830B\u{26893}\u567B\u{226F4}\u{27D2F}\u{241A3}\u{27D73}\u{26ED0}\u{272B6}\u9170\u{211D9}\u9208\u{23CFC}\u{2A6A9}\u{20EAC}\u{20EF9}\u7266\u{21CA2}\u474E\u{24FC2}\u{27FF9}\u{20FEB}\u40FA"],
["9ea1", "\u9C5D\u651F\u{22DA0}\u48F3\u{247E0}\u{29D7C}\u{20FEC}\u{20E0A}\u6062\u{275A3}\u{20FED}"],
["9ead", "\u{26048}\u{21187}\u71A3\u7E8E\u9D50\u4E1A\u4E04\u3577\u5B0D\u6CB2\u5367\u36AC\u39DC\u537D\u36A5\u{24618}\u589A\u{24B6E}\u822D\u544B\u57AA\u{25A95}\u{20979}"],
["9ec5", "\u3A52\u{22465}\u7374\u{29EAC}\u4D09\u9BED\u{23CFE}\u{29F30}\u4C5B\u{24FA9}\u{2959E}\u{29FDE}\u845C\u{23DB6}\u{272B2}\u{267B3}\u{23720}\u632E\u7D25\u{23EF7}\u{23E2C}\u3A2A\u9008\u52CC\u3E74\u367A\u45E9\u{2048E}\u7640\u5AF0\u{20EB6}\u787A\u{27F2E}\u58A7\u40BF\u567C\u9B8B\u5D74\u7654\u{2A434}\u9E85\u4CE1\u75F9\u37FB\u6119\u{230DA}\u{243F2}"],
["9ef5", "\u565D\u{212A9}\u57A7\u{24963}\u{29E06}\u5234\u{270AE}\u35AD\u6C4A\u9D7C"],
["9f40", "\u7C56\u9B39\u57DE\u{2176C}\u5C53\u64D3\u{294D0}\u{26335}\u{27164}\u86AD\u{20D28}\u{26D22}\u{24AE2}\u{20D71}"],
["9f4f", "\u51FE\u{21F0F}\u5D8E\u9703\u{21DD1}\u9E81\u904C\u7B1F\u9B02\u5CD1\u7BA3\u6268\u6335\u9AFF\u7BCF\u9B2A\u7C7E\u9B2E\u7C42\u7C86\u9C15\u7BFC\u9B09\u9F17\u9C1B\u{2493E}\u9F5A\u5573\u5BC3\u4FFD\u9E98\u4FF2\u5260\u3E06\u52D1\u5767\u5056\u59B7\u5E12\u97C8\u9DAB\u8F5C\u5469\u97B4\u9940\u97BA\u532C\u6130"],
["9fa1", "\u692C\u53DA\u9C0A\u9D02\u4C3B\u9641\u6980\u50A6\u7546\u{2176D}\u99DA\u5273"],
["9fae", "\u9159\u9681\u915C"],
["9fb2", "\u9151\u{28E97}\u637F\u{26D23}\u6ACA\u5611\u918E\u757A\u6285\u{203FC}\u734F\u7C70\u{25C21}\u{23CFD}"],
["9fc1", "\u{24919}\u76D6\u9B9D\u4E2A\u{20CD4}\u83BE\u8842"],
["9fc9", "\u5C4A\u69C0\u50ED\u577A\u521F\u5DF5\u4ECE\u6C31\u{201F2}\u4F39\u549C\u54DA\u529A\u8D82\u35FE\u5F0C\u35F3"],
["9fdb", "\u6B52\u917C\u9FA5\u9B97\u982E\u98B4\u9ABA\u9EA8\u9E84\u717A\u7B14"],
["9fe7", "\u6BFA\u8818\u7F78"],
["9feb", "\u5620\u{2A64A}\u8E77\u9F53"],
["9ff0", "\u8DD4\u8E4F\u9E1C\u8E01\u6282\u{2837D}\u8E28\u8E75\u7AD3\u{24A77}\u7A3E\u78D8\u6CEA\u8A67\u7607"],
["a040", "\u{28A5A}\u9F26\u6CCE\u87D6\u75C3\u{2A2B2}\u7853\u{2F840}\u8D0C\u72E2\u7371\u8B2D\u7302\u74F1\u8CEB\u{24ABB}\u862F\u5FBA\u88A0\u44B7"],
["a055", "\u{2183B}\u{26E05}"],
["a058", "\u8A7E\u{2251B}"],
["a05b", "\u60FD\u7667\u9AD7\u9D44\u936E\u9B8F\u87F5"],
["a063", "\u880F\u8CF7\u732C\u9721\u9BB0\u35D6\u72B2\u4C07\u7C51\u994A\u{26159}\u6159\u4C04\u9E96\u617D"],
["a073", "\u575F\u616F\u62A6\u6239\u62CE\u3A5C\u61E2\u53AA\u{233F5}\u6364\u6802\u35D2"],
["a0a1", "\u5D57\u{28BC2}\u8FDA\u{28E39}"],
["a0a6", "\u50D9\u{21D46}\u7906\u5332\u9638\u{20F3B}\u4065"],
["a0ae", "\u77FE"],
["a0b0", "\u7CC2\u{25F1A}\u7CDA\u7A2D\u8066\u8063\u7D4D\u7505\u74F2\u8994\u821A\u670C\u8062\u{27486}\u805B\u74F0\u8103\u7724\u8989\u{267CC}\u7553\u{26ED1}\u87A9\u87CE\u81C8\u878C\u8A49\u8CAD\u8B43\u772B\u74F8\u84DA\u3635\u69B2\u8DA6"],
["a0d4", "\u89A9\u7468\u6DB9\u87C1\u{24011}\u74E7\u3DDB\u7176\u60A4\u619C\u3CD1\u7162\u6077"],
["a0e2", "\u7F71\u{28B2D}\u7250\u60E9\u4B7E\u5220\u3C18\u{23CC7}\u{25ED7}\u{27656}\u{25531}\u{21944}\u{212FE}\u{29903}\u{26DDC}\u{270AD}\u5CC1\u{261AD}\u{28A0F}\u{23677}\u{200EE}\u{26846}\u{24F0E}\u4562\u5B1F\u{2634C}\u9F50\u9EA6\u{2626B}"],
["a3c0", "\u2400", 31, "\u2421"],
["c6a1", "\u2460", 9, "\u2474", 9, "\u2170", 9, "\u4E36\u4E3F\u4E85\u4EA0\u5182\u5196\u51AB\u52F9\u5338\u5369\u53B6\u590A\u5B80\u5DDB\u2F33\u5E7F\u5EF4\u5F50\u5F61\u6534\u65E0\u7592\u7676\u8FB5\u96B6\xA8\u02C6\u30FD\u30FE\u309D\u309E\u3003\u4EDD\u3005\u3006\u3007\u30FC\uFF3B\uFF3D\u273D\u3041", 23],
["c740", "\u3059", 58, "\u30A1\u30A2\u30A3\u30A4"],
["c7a1", "\u30A5", 81, "\u0410", 5, "\u0401\u0416", 4],
["c840", "\u041B", 26, "\u0451\u0436", 25, "\u21E7\u21B8\u21B9\u31CF\u{200CC}\u4E5A\u{2008A}\u5202\u4491"],
["c8a1", "\u9FB0\u5188\u9FB1\u{27607}"],
["c8cd", "\uFFE2\uFFE4\uFF07\uFF02\u3231\u2116\u2121\u309B\u309C\u2E80\u2E84\u2E86\u2E87\u2E88\u2E8A\u2E8C\u2E8D\u2E95\u2E9C\u2E9D\u2EA5\u2EA7\u2EAA\u2EAC\u2EAE\u2EB6\u2EBC\u2EBE\u2EC6\u2ECA\u2ECC\u2ECD\u2ECF\u2ED6\u2ED7\u2EDE\u2EE3"],
["c8f5", "\u0283\u0250\u025B\u0254\u0275\u0153\xF8\u014B\u028A\u026A"],
["f9fe", "\uFFED"],
["fa40", "\u{20547}\u92DB\u{205DF}\u{23FC5}\u854C\u42B5\u73EF\u51B5\u3649\u{24942}\u{289E4}\u9344\u{219DB}\u82EE\u{23CC8}\u783C\u6744\u62DF\u{24933}\u{289AA}\u{202A0}\u{26BB3}\u{21305}\u4FAB\u{224ED}\u5008\u{26D29}\u{27A84}\u{23600}\u{24AB1}\u{22513}\u5029\u{2037E}\u5FA4\u{20380}\u{20347}\u6EDB\u{2041F}\u507D\u5101\u347A\u510E\u986C\u3743\u8416\u{249A4}\u{20487}\u5160\u{233B4}\u516A\u{20BFF}\u{220FC}\u{202E5}\u{22530}\u{2058E}\u{23233}\u{21983}\u5B82\u877D\u{205B3}\u{23C99}\u51B2\u51B8"],
["faa1", "\u9D34\u51C9\u51CF\u51D1\u3CDC\u51D3\u{24AA6}\u51B3\u51E2\u5342\u51ED\u83CD\u693E\u{2372D}\u5F7B\u520B\u5226\u523C\u52B5\u5257\u5294\u52B9\u52C5\u7C15\u8542\u52E0\u860D\u{26B13}\u5305\u{28ADE}\u5549\u6ED9\u{23F80}\u{20954}\u{23FEC}\u5333\u5344\u{20BE2}\u6CCB\u{21726}\u681B\u73D5\u604A\u3EAA\u38CC\u{216E8}\u71DD\u44A2\u536D\u5374\u{286AB}\u537E\u537F\u{21596}\u{21613}\u77E6\u5393\u{28A9B}\u53A0\u53AB\u53AE\u73A7\u{25772}\u3F59\u739C\u53C1\u53C5\u6C49\u4E49\u57FE\u53D9\u3AAB\u{20B8F}\u53E0\u{23FEB}\u{22DA3}\u53F6\u{20C77}\u5413\u7079\u552B\u6657\u6D5B\u546D\u{26B53}\u{20D74}\u555D\u548F\u54A4\u47A6\u{2170D}\u{20EDD}\u3DB4\u{20D4D}"],
["fb40", "\u{289BC}\u{22698}\u5547\u4CED\u542F\u7417\u5586\u55A9\u5605\u{218D7}\u{2403A}\u4552\u{24435}\u66B3\u{210B4}\u5637\u66CD\u{2328A}\u66A4\u66AD\u564D\u564F\u78F1\u56F1\u9787\u53FE\u5700\u56EF\u56ED\u{28B66}\u3623\u{2124F}\u5746\u{241A5}\u6C6E\u708B\u5742\u36B1\u{26C7E}\u57E6\u{21416}\u5803\u{21454}\u{24363}\u5826\u{24BF5}\u585C\u58AA\u3561\u58E0\u58DC\u{2123C}\u58FB\u5BFF\u5743\u{2A150}\u{24278}\u93D3\u35A1\u591F\u68A6\u36C3\u6E59"],
["fba1", "\u{2163E}\u5A24\u5553\u{21692}\u8505\u59C9\u{20D4E}\u{26C81}\u{26D2A}\u{217DC}\u59D9\u{217FB}\u{217B2}\u{26DA6}\u6D71\u{21828}\u{216D5}\u59F9\u{26E45}\u5AAB\u5A63\u36E6\u{249A9}\u5A77\u3708\u5A96\u7465\u5AD3\u{26FA1}\u{22554}\u3D85\u{21911}\u3732\u{216B8}\u5E83\u52D0\u5B76\u6588\u5B7C\u{27A0E}\u4004\u485D\u{20204}\u5BD5\u6160\u{21A34}\u{259CC}\u{205A5}\u5BF3\u5B9D\u4D10\u5C05\u{21B44}\u5C13\u73CE\u5C14\u{21CA5}\u{26B28}\u5C49\u48DD\u5C85\u5CE9\u5CEF\u5D8B\u{21DF9}\u{21E37}\u5D10\u5D18\u5D46\u{21EA4}\u5CBA\u5DD7\u82FC\u382D\u{24901}\u{22049}\u{22173}\u8287\u3836\u3BC2\u5E2E\u6A8A\u5E75\u5E7A\u{244BC}\u{20CD3}\u53A6\u4EB7\u5ED0\u53A8\u{21771}\u5E09\u5EF4\u{28482}"],
["fc40", "\u5EF9\u5EFB\u38A0\u5EFC\u683E\u941B\u5F0D\u{201C1}\u{2F894}\u3ADE\u48AE\u{2133A}\u5F3A\u{26888}\u{223D0}\u5F58\u{22471}\u5F63\u97BD\u{26E6E}\u5F72\u9340\u{28A36}\u5FA7\u5DB6\u3D5F\u{25250}\u{21F6A}\u{270F8}\u{22668}\u91D6\u{2029E}\u{28A29}\u6031\u6685\u{21877}\u3963\u3DC7\u3639\u5790\u{227B4}\u7971\u3E40\u609E\u60A4\u60B3\u{24982}\u{2498F}\u{27A53}\u74A4\u50E1\u5AA0\u6164\u8424\u6142\u{2F8A6}\u{26ED2}\u6181\u51F4\u{20656}\u6187\u5BAA\u{23FB7}"],
["fca1", "\u{2285F}\u61D3\u{28B9D}\u{2995D}\u61D0\u3932\u{22980}\u{228C1}\u6023\u615C\u651E\u638B\u{20118}\u62C5\u{21770}\u62D5\u{22E0D}\u636C\u{249DF}\u3A17\u6438\u63F8\u{2138E}\u{217FC}\u6490\u6F8A\u{22E36}\u9814\u{2408C}\u{2571D}\u64E1\u64E5\u947B\u3A66\u643A\u3A57\u654D\u6F16\u{24A28}\u{24A23}\u6585\u656D\u655F\u{2307E}\u65B5\u{24940}\u4B37\u65D1\u40D8\u{21829}\u65E0\u65E3\u5FDF\u{23400}\u6618\u{231F7}\u{231F8}\u6644\u{231A4}\u{231A5}\u664B\u{20E75}\u6667\u{251E6}\u6673\u6674\u{21E3D}\u{23231}\u{285F4}\u{231C8}\u{25313}\u77C5\u{228F7}\u99A4\u6702\u{2439C}\u{24A21}\u3B2B\u69FA\u{237C2}\u675E\u6767\u6762\u{241CD}\u{290ED}\u67D7\u44E9\u6822\u6E50\u923C\u6801\u{233E6}\u{26DA0}\u685D"],
["fd40", "\u{2346F}\u69E1\u6A0B\u{28ADF}\u6973\u68C3\u{235CD}\u6901\u6900\u3D32\u3A01\u{2363C}\u3B80\u67AC\u6961\u{28A4A}\u42FC\u6936\u6998\u3BA1\u{203C9}\u8363\u5090\u69F9\u{23659}\u{2212A}\u6A45\u{23703}\u6A9D\u3BF3\u67B1\u6AC8\u{2919C}\u3C0D\u6B1D\u{20923}\u60DE\u6B35\u6B74\u{227CD}\u6EB5\u{23ADB}\u{203B5}\u{21958}\u3740\u5421\u{23B5A}\u6BE1\u{23EFC}\u6BDC\u6C37\u{2248B}\u{248F1}\u{26B51}\u6C5A\u8226\u6C79\u{23DBC}\u44C5\u{23DBD}\u{241A4}\u{2490C}\u{24900}"],
["fda1", "\u{23CC9}\u36E5\u3CEB\u{20D32}\u9B83\u{231F9}\u{22491}\u7F8F\u6837\u{26D25}\u{26DA1}\u{26DEB}\u6D96\u6D5C\u6E7C\u6F04\u{2497F}\u{24085}\u{26E72}\u8533\u{26F74}\u51C7\u6C9C\u6E1D\u842E\u{28B21}\u6E2F\u{23E2F}\u7453\u{23F82}\u79CC\u6E4F\u5A91\u{2304B}\u6FF8\u370D\u6F9D\u{23E30}\u6EFA\u{21497}\u{2403D}\u4555\u93F0\u6F44\u6F5C\u3D4E\u6F74\u{29170}\u3D3B\u6F9F\u{24144}\u6FD3\u{24091}\u{24155}\u{24039}\u{23FF0}\u{23FB4}\u{2413F}\u51DF\u{24156}\u{24157}\u{24140}\u{261DD}\u704B\u707E\u70A7\u7081\u70CC\u70D5\u70D6\u70DF\u4104\u3DE8\u71B4\u7196\u{24277}\u712B\u7145\u5A88\u714A\u716E\u5C9C\u{24365}\u714F\u9362\u{242C1}\u712C\u{2445A}\u{24A27}\u{24A22}\u71BA\u{28BE8}\u70BD\u720E"],
["fe40", "\u9442\u7215\u5911\u9443\u7224\u9341\u{25605}\u722E\u7240\u{24974}\u68BD\u7255\u7257\u3E55\u{23044}\u680D\u6F3D\u7282\u732A\u732B\u{24823}\u{2882B}\u48ED\u{28804}\u7328\u732E\u73CF\u73AA\u{20C3A}\u{26A2E}\u73C9\u7449\u{241E2}\u{216E7}\u{24A24}\u6623\u36C5\u{249B7}\u{2498D}\u{249FB}\u73F7\u7415\u6903\u{24A26}\u7439\u{205C3}\u3ED7\u745C\u{228AD}\u7460\u{28EB2}\u7447\u73E4\u7476\u83B9\u746C\u3730\u7474\u93F1\u6A2C\u7482\u4953\u{24A8C}"],
["fea1", "\u{2415F}\u{24A79}\u{28B8F}\u5B46\u{28C03}\u{2189E}\u74C8\u{21988}\u750E\u74E9\u751E\u{28ED9}\u{21A4B}\u5BD7\u{28EAC}\u9385\u754D\u754A\u7567\u756E\u{24F82}\u3F04\u{24D13}\u758E\u745D\u759E\u75B4\u7602\u762C\u7651\u764F\u766F\u7676\u{263F5}\u7690\u81EF\u37F8\u{26911}\u{2690E}\u76A1\u76A5\u76B7\u76CC\u{26F9F}\u8462\u{2509D}\u{2517D}\u{21E1C}\u771E\u7726\u7740\u64AF\u{25220}\u7758\u{232AC}\u77AF\u{28964}\u{28968}\u{216C1}\u77F4\u7809\u{21376}\u{24A12}\u68CA\u78AF\u78C7\u78D3\u96A5\u792E\u{255E0}\u78D7\u7934\u78B1\u{2760C}\u8FB8\u8884\u{28B2B}\u{26083}\u{2261C}\u7986\u8900\u6902\u7980\u{25857}\u799D\u{27B39}\u793C\u79A9\u6E2A\u{27126}\u3EA8\u79C6\u{2910D}\u79D4"]
];
}
});
// node_modules/iconv-lite/encodings/dbcs-data.js
var require_dbcs_data = __commonJS({
"node_modules/iconv-lite/encodings/dbcs-data.js"(exports2, module2) {
"use strict";
module2.exports = {
// == Japanese/ShiftJIS ====================================================
// All japanese encodings are based on JIS X set of standards:
// JIS X 0201 - Single-byte encoding of ASCII + ¥ + Kana chars at 0xA1-0xDF.
// JIS X 0208 - Main set of 6879 characters, placed in 94x94 plane, to be encoded by 2 bytes.
// Has several variations in 1978, 1983, 1990 and 1997.
// JIS X 0212 - Supplementary plane of 6067 chars in 94x94 plane. 1990. Effectively dead.
// JIS X 0213 - Extension and modern replacement of 0208 and 0212. Total chars: 11233.
// 2 planes, first is superset of 0208, second - revised 0212.
// Introduced in 2000, revised 2004. Some characters are in Unicode Plane 2 (0x2xxxx)
// Byte encodings are:
// * Shift_JIS: Compatible with 0201, uses not defined chars in top half as lead bytes for double-byte
// encoding of 0208. Lead byte ranges: 0x81-0x9F, 0xE0-0xEF; Trail byte ranges: 0x40-0x7E, 0x80-0x9E, 0x9F-0xFC.
// Windows CP932 is a superset of Shift_JIS. Some companies added more chars, notably KDDI.
// * EUC-JP: Up to 3 bytes per character. Used mostly on *nixes.
// 0x00-0x7F - lower part of 0201
// 0x8E, 0xA1-0xDF - upper part of 0201
// (0xA1-0xFE)x2 - 0208 plane (94x94).
// 0x8F, (0xA1-0xFE)x2 - 0212 plane (94x94).
// * JIS X 208: 7-bit, direct encoding of 0208. Byte ranges: 0x21-0x7E (94 values). Uncommon.
// Used as-is in ISO2022 family.
// * ISO2022-JP: Stateful encoding, with escape sequences to switch between ASCII,
// 0201-1976 Roman, 0208-1978, 0208-1983.
// * ISO2022-JP-1: Adds esc seq for 0212-1990.
// * ISO2022-JP-2: Adds esc seq for GB2313-1980, KSX1001-1992, ISO8859-1, ISO8859-7.
// * ISO2022-JP-3: Adds esc seq for 0201-1976 Kana set, 0213-2000 Planes 1, 2.
// * ISO2022-JP-2004: Adds 0213-2004 Plane 1.
//
// After JIS X 0213 appeared, Shift_JIS-2004, EUC-JISX0213 and ISO2022-JP-2004 followed, with just changing the planes.
//
// Overall, it seems that it's a mess :( http://www8.plala.or.jp/tkubota1/unicode-symbols-map2.html
"shiftjis": {
type: "_dbcs",
table: function() {
return require_shiftjis();
},
encodeAdd: { "\xA5": 92, "\u203E": 126 },
encodeSkipVals: [{ from: 60736, to: 63808 }]
},
"csshiftjis": "shiftjis",
"mskanji": "shiftjis",
"sjis": "shiftjis",
"windows31j": "shiftjis",
"ms31j": "shiftjis",
"xsjis": "shiftjis",
"windows932": "shiftjis",
"ms932": "shiftjis",
"932": "shiftjis",
"cp932": "shiftjis",
"eucjp": {
type: "_dbcs",
table: function() {
return require_eucjp();
},
encodeAdd: { "\xA5": 92, "\u203E": 126 }
},
// TODO: KDDI extension to Shift_JIS
// TODO: IBM CCSID 942 = CP932, but F0-F9 custom chars and other char changes.
// TODO: IBM CCSID 943 = Shift_JIS = CP932 with original Shift_JIS lower 128 chars.
// == Chinese/GBK ==========================================================
// http://en.wikipedia.org/wiki/GBK
// We mostly implement W3C recommendation: https://www.w3.org/TR/encoding/#gbk-encoder
// Oldest GB2312 (1981, ~7600 chars) is a subset of CP936
"gb2312": "cp936",
"gb231280": "cp936",
"gb23121980": "cp936",
"csgb2312": "cp936",
"csiso58gb231280": "cp936",
"euccn": "cp936",
// Microsoft's CP936 is a subset and approximation of GBK.
"windows936": "cp936",
"ms936": "cp936",
"936": "cp936",
"cp936": {
type: "_dbcs",
table: function() {
return require_cp936();
}
},
// GBK (~22000 chars) is an extension of CP936 that added user-mapped chars and some other.
"gbk": {
type: "_dbcs",
table: function() {
return require_cp936().concat(require_gbk_added());
}
},
"xgbk": "gbk",
"isoir58": "gbk",
// GB18030 is an algorithmic extension of GBK.
// Main source: https://www.w3.org/TR/encoding/#gbk-encoder
// http://icu-project.org/docs/papers/gb18030.html
// http://source.icu-project.org/repos/icu/data/trunk/charset/data/xml/gb-18030-2000.xml
// http://www.khngai.com/chinese/charmap/tblgbk.php?page=0
"gb18030": {
type: "_dbcs",
table: function() {
return require_cp936().concat(require_gbk_added());
},
gb18030: function() {
return require_gb18030_ranges();
},
encodeSkipVals: [128],
encodeAdd: { "\u20AC": 41699 }
},
"chinese": "gb18030",
// == Korean ===============================================================
// EUC-KR, KS_C_5601 and KS X 1001 are exactly the same.
"windows949": "cp949",
"ms949": "cp949",
"949": "cp949",
"cp949": {
type: "_dbcs",
table: function() {
return require_cp949();
}
},
"cseuckr": "cp949",
"csksc56011987": "cp949",
"euckr": "cp949",
"isoir149": "cp949",
"korean": "cp949",
"ksc56011987": "cp949",
"ksc56011989": "cp949",
"ksc5601": "cp949",
// == Big5/Taiwan/Hong Kong ================================================
// There are lots of tables for Big5 and cp950. Please see the following links for history:
// http://moztw.org/docs/big5/ http://www.haible.de/bruno/charsets/conversion-tables/Big5.html
// Variations, in roughly number of defined chars:
// * Windows CP 950: Microsoft variant of Big5. Canonical: http://www.unicode.org/Public/MAPPINGS/VENDORS/MICSFT/WINDOWS/CP950.TXT
// * Windows CP 951: Microsoft variant of Big5-HKSCS-2001. Seems to be never public. http://me.abelcheung.org/articles/research/what-is-cp951/
// * Big5-2003 (Taiwan standard) almost superset of cp950.
// * Unicode-at-on (UAO) / Mozilla 1.8. Falling out of use on the Web. Not supported by other browsers.
// * Big5-HKSCS (-2001, -2004, -2008). Hong Kong standard.
// many unicode code points moved from PUA to Supplementary plane (U+2XXXX) over the years.
// Plus, it has 4 combining sequences.
// Seems that Mozilla refused to support it for 10 yrs. https://bugzilla.mozilla.org/show_bug.cgi?id=162431 https://bugzilla.mozilla.org/show_bug.cgi?id=310299
// because big5-hkscs is the only encoding to include astral characters in non-algorithmic way.
// Implementations are not consistent within browsers; sometimes labeled as just big5.
// MS Internet Explorer switches from big5 to big5-hkscs when a patch applied.
// Great discussion & recap of what's going on https://bugzilla.mozilla.org/show_bug.cgi?id=912470#c31
// In the encoder, it might make sense to support encoding old PUA mappings to Big5 bytes seq-s.
// Official spec: http://www.ogcio.gov.hk/en/business/tech_promotion/ccli/terms/doc/2003cmp_2008.txt
// http://www.ogcio.gov.hk/tc/business/tech_promotion/ccli/terms/doc/hkscs-2008-big5-iso.txt
//
// Current understanding of how to deal with Big5(-HKSCS) is in the Encoding Standard, http://encoding.spec.whatwg.org/#big5-encoder
// Unicode mapping (http://www.unicode.org/Public/MAPPINGS/OBSOLETE/EASTASIA/OTHER/BIG5.TXT) is said to be wrong.
"windows950": "cp950",
"ms950": "cp950",
"950": "cp950",
"cp950": {
type: "_dbcs",
table: function() {
return require_cp950();
}
},
// Big5 has many variations and is an extension of cp950. We use Encoding Standard's as a consensus.
"big5": "big5hkscs",
"big5hkscs": {
type: "_dbcs",
table: function() {
return require_cp950().concat(require_big5_added());
},
encodeSkipVals: [
// Although Encoding Standard says we should avoid encoding to HKSCS area (See Step 1 of
// https://encoding.spec.whatwg.org/#index-big5-pointer), we still do it to increase compatibility with ICU.
// But if a single unicode point can be encoded both as HKSCS and regular Big5, we prefer the latter.
36457,
36463,
36478,
36523,
36532,
36557,
36560,
36695,
36713,
36718,
36811,
36862,
36973,
36986,
37060,
37084,
37105,
37311,
37551,
37552,
37553,
37554,
37585,
37959,
38090,
38361,
38652,
39285,
39798,
39800,
39803,
39878,
39902,
39916,
39926,
40002,
40019,
40034,
40040,
40043,
40055,
40124,
40125,
40144,
40279,
40282,
40388,
40431,
40443,
40617,
40687,
40701,
40800,
40907,
41079,
41180,
41183,
36812,
37576,
38468,
38637,
// Step 2 of https://encoding.spec.whatwg.org/#index-big5-pointer: Use last pointer for U+2550, U+255E, U+2561, U+256A, U+5341, or U+5345
41636,
41637,
41639,
41638,
41676,
41678
]
},
"cnbig5": "big5hkscs",
"csbig5": "big5hkscs",
"xxbig5": "big5hkscs"
};
}
});
// node_modules/iconv-lite/encodings/index.js
var require_encodings = __commonJS({
"node_modules/iconv-lite/encodings/index.js"(exports2, module2) {
"use strict";
var modules = [
require_internal(),
require_utf32(),
require_utf16(),
require_utf7(),
require_sbcs_codec(),
require_sbcs_data(),
require_sbcs_data_generated(),
require_dbcs_codec(),
require_dbcs_data()
];
for (i = 0; i < modules.length; i++) {
module2 = modules[i];
for (enc in module2)
if (Object.prototype.hasOwnProperty.call(module2, enc))
exports2[enc] = module2[enc];
}
var module2;
var enc;
var i;
}
});
// node_modules/iconv-lite/lib/streams.js
var require_streams = __commonJS({
"node_modules/iconv-lite/lib/streams.js"(exports2, module2) {
"use strict";
var Buffer2 = require_safer().Buffer;
module2.exports = function(stream_module) {
var Transform2 = stream_module.Transform;
function IconvLiteEncoderStream(conv, options) {
this.conv = conv;
options = options || {};
options.decodeStrings = false;
Transform2.call(this, options);
}
IconvLiteEncoderStream.prototype = Object.create(Transform2.prototype, {
constructor: { value: IconvLiteEncoderStream }
});
IconvLiteEncoderStream.prototype._transform = function(chunk, encoding, done) {
if (typeof chunk != "string")
return done(new Error("Iconv encoding stream needs strings as its input."));
try {
var res = this.conv.write(chunk);
if (res && res.length) this.push(res);
done();
} catch (e) {
done(e);
}
};
IconvLiteEncoderStream.prototype._flush = function(done) {
try {
var res = this.conv.end();
if (res && res.length) this.push(res);
done();
} catch (e) {
done(e);
}
};
IconvLiteEncoderStream.prototype.collect = function(cb) {
var chunks = [];
this.on("error", cb);
this.on("data", function(chunk) {
chunks.push(chunk);
});
this.on("end", function() {
cb(null, Buffer2.concat(chunks));
});
return this;
};
function IconvLiteDecoderStream(conv, options) {
this.conv = conv;
options = options || {};
options.encoding = this.encoding = "utf8";
Transform2.call(this, options);
}
IconvLiteDecoderStream.prototype = Object.create(Transform2.prototype, {
constructor: { value: IconvLiteDecoderStream }
});
IconvLiteDecoderStream.prototype._transform = function(chunk, encoding, done) {
if (!Buffer2.isBuffer(chunk) && !(chunk instanceof Uint8Array))
return done(new Error("Iconv decoding stream needs buffers as its input."));
try {
var res = this.conv.write(chunk);
if (res && res.length) this.push(res, this.encoding);
done();
} catch (e) {
done(e);
}
};
IconvLiteDecoderStream.prototype._flush = function(done) {
try {
var res = this.conv.end();
if (res && res.length) this.push(res, this.encoding);
done();
} catch (e) {
done(e);
}
};
IconvLiteDecoderStream.prototype.collect = function(cb) {
var res = "";
this.on("error", cb);
this.on("data", function(chunk) {
res += chunk;
});
this.on("end", function() {
cb(null, res);
});
return this;
};
return {
IconvLiteEncoderStream,
IconvLiteDecoderStream
};
};
}
});
// node_modules/iconv-lite/lib/index.js
var require_lib = __commonJS({
"node_modules/iconv-lite/lib/index.js"(exports2, module2) {
"use strict";
var Buffer2 = require_safer().Buffer;
var bomHandling = require_bom_handling();
var iconv2 = module2.exports;
iconv2.encodings = null;
iconv2.defaultCharUnicode = "\uFFFD";
iconv2.defaultCharSingleByte = "?";
iconv2.encode = function encode3(str, encoding, options) {
str = "" + (str || "");
var encoder = iconv2.getEncoder(encoding, options);
var res = encoder.write(str);
var trail = encoder.end();
return trail && trail.length > 0 ? Buffer2.concat([res, trail]) : res;
};
iconv2.decode = function decode(buf, encoding, options) {
if (typeof buf === "string") {
if (!iconv2.skipDecodeWarning) {
console.error("Iconv-lite warning: decode()-ing strings is deprecated. Refer to https://github.com/ashtuchkin/iconv-lite/wiki/Use-Buffers-when-decoding");
iconv2.skipDecodeWarning = true;
}
buf = Buffer2.from("" + (buf || ""), "binary");
}
var decoder = iconv2.getDecoder(encoding, options);
var res = decoder.write(buf);
var trail = decoder.end();
return trail ? res + trail : res;
};
iconv2.encodingExists = function encodingExists(enc) {
try {
iconv2.getCodec(enc);
return true;
} catch (e) {
return false;
}
};
iconv2.toEncoding = iconv2.encode;
iconv2.fromEncoding = iconv2.decode;
iconv2._codecDataCache = {};
iconv2.getCodec = function getCodec(encoding) {
if (!iconv2.encodings)
iconv2.encodings = require_encodings();
var enc = iconv2._canonicalizeEncoding(encoding);
var codecOptions = {};
while (true) {
var codec = iconv2._codecDataCache[enc];
if (codec)
return codec;
var codecDef = iconv2.encodings[enc];
switch (typeof codecDef) {
case "string":
enc = codecDef;
break;
case "object":
for (var key in codecDef)
codecOptions[key] = codecDef[key];
if (!codecOptions.encodingName)
codecOptions.encodingName = enc;
enc = codecDef.type;
break;
case "function":
if (!codecOptions.encodingName)
codecOptions.encodingName = enc;
codec = new codecDef(codecOptions, iconv2);
iconv2._codecDataCache[codecOptions.encodingName] = codec;
return codec;
default:
throw new Error("Encoding not recognized: '" + encoding + "' (searched as: '" + enc + "')");
}
}
};
iconv2._canonicalizeEncoding = function(encoding) {
return ("" + encoding).toLowerCase().replace(/:\d{4}$|[^0-9a-z]/g, "");
};
iconv2.getEncoder = function getEncoder(encoding, options) {
var codec = iconv2.getCodec(encoding), encoder = new codec.encoder(options, codec);
if (codec.bomAware && options && options.addBOM)
encoder = new bomHandling.PrependBOM(encoder, options);
return encoder;
};
iconv2.getDecoder = function getDecoder2(encoding, options) {
var codec = iconv2.getCodec(encoding), decoder = new codec.decoder(options, codec);
if (codec.bomAware && !(options && options.stripBOM === false))
decoder = new bomHandling.StripBOM(decoder, options);
return decoder;
};
iconv2.enableStreamingAPI = function enableStreamingAPI(stream_module2) {
if (iconv2.supportsStreams)
return;
var streams = require_streams()(stream_module2);
iconv2.IconvLiteEncoderStream = streams.IconvLiteEncoderStream;
iconv2.IconvLiteDecoderStream = streams.IconvLiteDecoderStream;
iconv2.encodeStream = function encodeStream(encoding, options) {
return new iconv2.IconvLiteEncoderStream(iconv2.getEncoder(encoding, options), options);
};
iconv2.decodeStream = function decodeStream(encoding, options) {
return new iconv2.IconvLiteDecoderStream(iconv2.getDecoder(encoding, options), options);
};
iconv2.supportsStreams = true;
};
var stream_module;
try {
stream_module = require("stream");
} catch (e) {
}
if (stream_module && stream_module.Transform) {
iconv2.enableStreamingAPI(stream_module);
} else {
iconv2.encodeStream = iconv2.decodeStream = function() {
throw new Error("iconv-lite Streaming API is not enabled. Use iconv.enableStreamingAPI(require('stream')); to enable it.");
};
}
if (false) {
console.error("iconv-lite warning: js files use non-utf8 encoding. See https://github.com/ashtuchkin/iconv-lite/wiki/Javascript-source-file-encodings for more info.");
}
}
});
// node_modules/whatwg-encoding/lib/supported-names.json
var require_supported_names = __commonJS({
"node_modules/whatwg-encoding/lib/supported-names.json"(exports2, module2) {
module2.exports = [
"UTF-8",
"IBM866",
"ISO-8859-2",
"ISO-8859-3",
"ISO-8859-4",
"ISO-8859-5",
"ISO-8859-6",
"ISO-8859-7",
"ISO-8859-8",
"ISO-8859-10",
"ISO-8859-13",
"ISO-8859-14",
"ISO-8859-15",
"ISO-8859-16",
"KOI8-R",
"KOI8-U",
"macintosh",
"windows-874",
"windows-1250",
"windows-1251",
"windows-1252",
"windows-1253",
"windows-1254",
"windows-1255",
"windows-1256",
"windows-1257",
"windows-1258",
"GBK",
"gb18030",
"Big5",
"EUC-JP",
"Shift_JIS",
"EUC-KR",
"UTF-16BE",
"UTF-16LE",
"x-user-defined"
];
}
});
// node_modules/whatwg-encoding/lib/labels-to-names.json
var require_labels_to_names = __commonJS({
"node_modules/whatwg-encoding/lib/labels-to-names.json"(exports2, module2) {
module2.exports = {
"866": "IBM866",
"unicode-1-1-utf-8": "UTF-8",
unicode11utf8: "UTF-8",
unicode20utf8: "UTF-8",
"utf-8": "UTF-8",
utf8: "UTF-8",
"x-unicode20utf8": "UTF-8",
cp866: "IBM866",
csibm866: "IBM866",
ibm866: "IBM866",
csisolatin2: "ISO-8859-2",
"iso-8859-2": "ISO-8859-2",
"iso-ir-101": "ISO-8859-2",
"iso8859-2": "ISO-8859-2",
iso88592: "ISO-8859-2",
"iso_8859-2": "ISO-8859-2",
"iso_8859-2:1987": "ISO-8859-2",
l2: "ISO-8859-2",
latin2: "ISO-8859-2",
csisolatin3: "ISO-8859-3",
"iso-8859-3": "ISO-8859-3",
"iso-ir-109": "ISO-8859-3",
"iso8859-3": "ISO-8859-3",
iso88593: "ISO-8859-3",
"iso_8859-3": "ISO-8859-3",
"iso_8859-3:1988": "ISO-8859-3",
l3: "ISO-8859-3",
latin3: "ISO-8859-3",
csisolatin4: "ISO-8859-4",
"iso-8859-4": "ISO-8859-4",
"iso-ir-110": "ISO-8859-4",
"iso8859-4": "ISO-8859-4",
iso88594: "ISO-8859-4",
"iso_8859-4": "ISO-8859-4",
"iso_8859-4:1988": "ISO-8859-4",
l4: "ISO-8859-4",
latin4: "ISO-8859-4",
csisolatincyrillic: "ISO-8859-5",
cyrillic: "ISO-8859-5",
"iso-8859-5": "ISO-8859-5",
"iso-ir-144": "ISO-8859-5",
"iso8859-5": "ISO-8859-5",
iso88595: "ISO-8859-5",
"iso_8859-5": "ISO-8859-5",
"iso_8859-5:1988": "ISO-8859-5",
arabic: "ISO-8859-6",
"asmo-708": "ISO-8859-6",
csiso88596e: "ISO-8859-6",
csiso88596i: "ISO-8859-6",
csisolatinarabic: "ISO-8859-6",
"ecma-114": "ISO-8859-6",
"iso-8859-6": "ISO-8859-6",
"iso-8859-6-e": "ISO-8859-6",
"iso-8859-6-i": "ISO-8859-6",
"iso-ir-127": "ISO-8859-6",
"iso8859-6": "ISO-8859-6",
iso88596: "ISO-8859-6",
"iso_8859-6": "ISO-8859-6",
"iso_8859-6:1987": "ISO-8859-6",
csisolatingreek: "ISO-8859-7",
"ecma-118": "ISO-8859-7",
elot_928: "ISO-8859-7",
greek: "ISO-8859-7",
greek8: "ISO-8859-7",
"iso-8859-7": "ISO-8859-7",
"iso-ir-126": "ISO-8859-7",
"iso8859-7": "ISO-8859-7",
iso88597: "ISO-8859-7",
"iso_8859-7": "ISO-8859-7",
"iso_8859-7:1987": "ISO-8859-7",
sun_eu_greek: "ISO-8859-7",
csiso88598e: "ISO-8859-8",
csisolatinhebrew: "ISO-8859-8",
hebrew: "ISO-8859-8",
"iso-8859-8": "ISO-8859-8",
"iso-8859-8-e": "ISO-8859-8",
"iso-ir-138": "ISO-8859-8",
"iso8859-8": "ISO-8859-8",
iso88598: "ISO-8859-8",
"iso_8859-8": "ISO-8859-8",
"iso_8859-8:1988": "ISO-8859-8",
visual: "ISO-8859-8",
csisolatin6: "ISO-8859-10",
"iso-8859-10": "ISO-8859-10",
"iso-ir-157": "ISO-8859-10",
"iso8859-10": "ISO-8859-10",
iso885910: "ISO-8859-10",
l6: "ISO-8859-10",
latin6: "ISO-8859-10",
"iso-8859-13": "ISO-8859-13",
"iso8859-13": "ISO-8859-13",
iso885913: "ISO-8859-13",
"iso-8859-14": "ISO-8859-14",
"iso8859-14": "ISO-8859-14",
iso885914: "ISO-8859-14",
csisolatin9: "ISO-8859-15",
"iso-8859-15": "ISO-8859-15",
"iso8859-15": "ISO-8859-15",
iso885915: "ISO-8859-15",
"iso_8859-15": "ISO-8859-15",
l9: "ISO-8859-15",
"iso-8859-16": "ISO-8859-16",
cskoi8r: "KOI8-R",
koi: "KOI8-R",
koi8: "KOI8-R",
"koi8-r": "KOI8-R",
koi8_r: "KOI8-R",
"koi8-ru": "KOI8-U",
"koi8-u": "KOI8-U",
csmacintosh: "macintosh",
mac: "macintosh",
macintosh: "macintosh",
"x-mac-roman": "macintosh",
"dos-874": "windows-874",
"iso-8859-11": "windows-874",
"iso8859-11": "windows-874",
iso885911: "windows-874",
"tis-620": "windows-874",
"windows-874": "windows-874",
cp1250: "windows-1250",
"windows-1250": "windows-1250",
"x-cp1250": "windows-1250",
cp1251: "windows-1251",
"windows-1251": "windows-1251",
"x-cp1251": "windows-1251",
"ansi_x3.4-1968": "windows-1252",
ascii: "windows-1252",
cp1252: "windows-1252",
cp819: "windows-1252",
csisolatin1: "windows-1252",
ibm819: "windows-1252",
"iso-8859-1": "windows-1252",
"iso-ir-100": "windows-1252",
"iso8859-1": "windows-1252",
iso88591: "windows-1252",
"iso_8859-1": "windows-1252",
"iso_8859-1:1987": "windows-1252",
l1: "windows-1252",
latin1: "windows-1252",
"us-ascii": "windows-1252",
"windows-1252": "windows-1252",
"x-cp1252": "windows-1252",
cp1253: "windows-1253",
"windows-1253": "windows-1253",
"x-cp1253": "windows-1253",
cp1254: "windows-1254",
csisolatin5: "windows-1254",
"iso-8859-9": "windows-1254",
"iso-ir-148": "windows-1254",
"iso8859-9": "windows-1254",
iso88599: "windows-1254",
"iso_8859-9": "windows-1254",
"iso_8859-9:1989": "windows-1254",
l5: "windows-1254",
latin5: "windows-1254",
"windows-1254": "windows-1254",
"x-cp1254": "windows-1254",
cp1255: "windows-1255",
"windows-1255": "windows-1255",
"x-cp1255": "windows-1255",
cp1256: "windows-1256",
"windows-1256": "windows-1256",
"x-cp1256": "windows-1256",
cp1257: "windows-1257",
"windows-1257": "windows-1257",
"x-cp1257": "windows-1257",
cp1258: "windows-1258",
"windows-1258": "windows-1258",
"x-cp1258": "windows-1258",
chinese: "GBK",
csgb2312: "GBK",
csiso58gb231280: "GBK",
gb2312: "GBK",
gb_2312: "GBK",
"gb_2312-80": "GBK",
gbk: "GBK",
"iso-ir-58": "GBK",
"x-gbk": "GBK",
gb18030: "gb18030",
big5: "Big5",
"big5-hkscs": "Big5",
"cn-big5": "Big5",
csbig5: "Big5",
"x-x-big5": "Big5",
cseucpkdfmtjapanese: "EUC-JP",
"euc-jp": "EUC-JP",
"x-euc-jp": "EUC-JP",
csshiftjis: "Shift_JIS",
ms932: "Shift_JIS",
ms_kanji: "Shift_JIS",
"shift-jis": "Shift_JIS",
shift_jis: "Shift_JIS",
sjis: "Shift_JIS",
"windows-31j": "Shift_JIS",
"x-sjis": "Shift_JIS",
cseuckr: "EUC-KR",
csksc56011987: "EUC-KR",
"euc-kr": "EUC-KR",
"iso-ir-149": "EUC-KR",
korean: "EUC-KR",
"ks_c_5601-1987": "EUC-KR",
"ks_c_5601-1989": "EUC-KR",
ksc5601: "EUC-KR",
ksc_5601: "EUC-KR",
"windows-949": "EUC-KR",
unicodefffe: "UTF-16BE",
"utf-16be": "UTF-16BE",
csunicode: "UTF-16LE",
"iso-10646-ucs-2": "UTF-16LE",
"ucs-2": "UTF-16LE",
unicode: "UTF-16LE",
unicodefeff: "UTF-16LE",
"utf-16": "UTF-16LE",
"utf-16le": "UTF-16LE",
"x-user-defined": "x-user-defined"
};
}
});
// node_modules/whatwg-encoding/lib/whatwg-encoding.js
var require_whatwg_encoding = __commonJS({
"node_modules/whatwg-encoding/lib/whatwg-encoding.js"(exports2) {
"use strict";
var iconvLite = require_lib();
var supportedNames = require_supported_names();
var labelsToNames = require_labels_to_names();
var supportedNamesSet = new Set(supportedNames);
exports2.labelToName = (label) => {
label = String(label).trim().toLowerCase();
return labelsToNames[label] || null;
};
exports2.decode = (uint8Array, fallbackEncodingName) => {
let encoding = fallbackEncodingName;
if (!exports2.isSupported(encoding)) {
throw new RangeError(`"${encoding}" is not a supported encoding name`);
}
const bomEncoding = exports2.getBOMEncoding(uint8Array);
if (bomEncoding !== null) {
encoding = bomEncoding;
}
if (encoding === "x-user-defined") {
let result = "";
for (const byte of uint8Array) {
if (byte <= 127) {
result += String.fromCodePoint(byte);
} else {
result += String.fromCodePoint(63360 + byte - 128);
}
}
return result;
}
return iconvLite.decode(uint8Array, encoding);
};
exports2.getBOMEncoding = (uint8Array) => {
if (uint8Array[0] === 254 && uint8Array[1] === 255) {
return "UTF-16BE";
} else if (uint8Array[0] === 255 && uint8Array[1] === 254) {
return "UTF-16LE";
} else if (uint8Array[0] === 239 && uint8Array[1] === 187 && uint8Array[2] === 191) {
return "UTF-8";
}
return null;
};
exports2.isSupported = (name) => {
return supportedNamesSet.has(String(name));
};
}
});
// node_modules/encoding-sniffer/dist/esm/sniffer.js
function toUint8Array(str) {
var arr = new Uint8Array(str.length);
for (var i = 0; i < str.length; i++) {
arr[i] = str.charCodeAt(i);
}
return arr;
}
function isAsciiAlpha(c) {
return c >= Chars.UpperA && c <= Chars.UpperZ || c >= Chars.LowerA && c <= Chars.LowerZ;
}
function isQuote(c) {
return c === Chars.DQUOTE || c === Chars.SQUOTE;
}
var import_whatwg_encoding, State3, ResultType, AttribType, Chars, SPACE_CHARACTERS, END_OF_UNQUOTED_ATTRIBUTE_VALUE, STRINGS, Sniffer;
var init_sniffer = __esm({
"node_modules/encoding-sniffer/dist/esm/sniffer.js"() {
import_whatwg_encoding = __toESM(require_whatwg_encoding(), 1);
(function(State4) {
State4[State4["Begin"] = 0] = "Begin";
State4[State4["BOM16BE"] = 1] = "BOM16BE";
State4[State4["BOM16LE"] = 2] = "BOM16LE";
State4[State4["BOM8"] = 3] = "BOM8";
State4[State4["UTF16LE_XML_PREFIX"] = 4] = "UTF16LE_XML_PREFIX";
State4[State4["BeginLT"] = 5] = "BeginLT";
State4[State4["UTF16BE_XML_PREFIX"] = 6] = "UTF16BE_XML_PREFIX";
State4[State4["BeforeTag"] = 7] = "BeforeTag";
State4[State4["BeforeTagName"] = 8] = "BeforeTagName";
State4[State4["BeforeCloseTagName"] = 9] = "BeforeCloseTagName";
State4[State4["CommentStart"] = 10] = "CommentStart";
State4[State4["CommentEnd"] = 11] = "CommentEnd";
State4[State4["TagNameMeta"] = 12] = "TagNameMeta";
State4[State4["TagNameOther"] = 13] = "TagNameOther";
State4[State4["XMLDeclaration"] = 14] = "XMLDeclaration";
State4[State4["XMLDeclarationBeforeEncoding"] = 15] = "XMLDeclarationBeforeEncoding";
State4[State4["XMLDeclarationAfterEncoding"] = 16] = "XMLDeclarationAfterEncoding";
State4[State4["XMLDeclarationBeforeValue"] = 17] = "XMLDeclarationBeforeValue";
State4[State4["XMLDeclarationValue"] = 18] = "XMLDeclarationValue";
State4[State4["WeirdTag"] = 19] = "WeirdTag";
State4[State4["BeforeAttribute"] = 20] = "BeforeAttribute";
State4[State4["MetaAttribHttpEquiv"] = 21] = "MetaAttribHttpEquiv";
State4[State4["MetaAttribHttpEquivValue"] = 22] = "MetaAttribHttpEquivValue";
State4[State4["MetaAttribC"] = 23] = "MetaAttribC";
State4[State4["MetaAttribContent"] = 24] = "MetaAttribContent";
State4[State4["MetaAttribCharset"] = 25] = "MetaAttribCharset";
State4[State4["MetaAttribAfterName"] = 26] = "MetaAttribAfterName";
State4[State4["MetaContentValueQuotedBeforeEncoding"] = 27] = "MetaContentValueQuotedBeforeEncoding";
State4[State4["MetaContentValueQuotedAfterEncoding"] = 28] = "MetaContentValueQuotedAfterEncoding";
State4[State4["MetaContentValueQuotedBeforeValue"] = 29] = "MetaContentValueQuotedBeforeValue";
State4[State4["MetaContentValueQuotedValueQuoted"] = 30] = "MetaContentValueQuotedValueQuoted";
State4[State4["MetaContentValueQuotedValueUnquoted"] = 31] = "MetaContentValueQuotedValueUnquoted";
State4[State4["MetaContentValueUnquotedBeforeEncoding"] = 32] = "MetaContentValueUnquotedBeforeEncoding";
State4[State4["MetaContentValueUnquotedBeforeValue"] = 33] = "MetaContentValueUnquotedBeforeValue";
State4[State4["MetaContentValueUnquotedValueQuoted"] = 34] = "MetaContentValueUnquotedValueQuoted";
State4[State4["MetaContentValueUnquotedValueUnquoted"] = 35] = "MetaContentValueUnquotedValueUnquoted";
State4[State4["AnyAttribName"] = 36] = "AnyAttribName";
State4[State4["AfterAttributeName"] = 37] = "AfterAttributeName";
State4[State4["BeforeAttributeValue"] = 38] = "BeforeAttributeValue";
State4[State4["AttributeValueQuoted"] = 39] = "AttributeValueQuoted";
State4[State4["AttributeValueUnquoted"] = 40] = "AttributeValueUnquoted";
})(State3 || (State3 = {}));
(function(ResultType2) {
ResultType2[ResultType2["BOM"] = 0] = "BOM";
ResultType2[ResultType2["PASSED"] = 1] = "PASSED";
ResultType2[ResultType2["XML_PREFIX"] = 2] = "XML_PREFIX";
ResultType2[ResultType2["META_TAG"] = 3] = "META_TAG";
ResultType2[ResultType2["XML_ENCODING"] = 4] = "XML_ENCODING";
ResultType2[ResultType2["DEFAULT"] = 5] = "DEFAULT";
})(ResultType || (ResultType = {}));
(function(AttribType2) {
AttribType2[AttribType2["None"] = 0] = "None";
AttribType2[AttribType2["HttpEquiv"] = 1] = "HttpEquiv";
AttribType2[AttribType2["Content"] = 2] = "Content";
AttribType2[AttribType2["Charset"] = 3] = "Charset";
})(AttribType || (AttribType = {}));
(function(Chars2) {
Chars2[Chars2["NIL"] = 0] = "NIL";
Chars2[Chars2["TAB"] = 9] = "TAB";
Chars2[Chars2["LF"] = 10] = "LF";
Chars2[Chars2["CR"] = 13] = "CR";
Chars2[Chars2["SPACE"] = 32] = "SPACE";
Chars2[Chars2["EXCLAMATION"] = 33] = "EXCLAMATION";
Chars2[Chars2["DQUOTE"] = 34] = "DQUOTE";
Chars2[Chars2["SQUOTE"] = 39] = "SQUOTE";
Chars2[Chars2["DASH"] = 45] = "DASH";
Chars2[Chars2["SLASH"] = 47] = "SLASH";
Chars2[Chars2["SEMICOLON"] = 59] = "SEMICOLON";
Chars2[Chars2["LT"] = 60] = "LT";
Chars2[Chars2["EQUALS"] = 61] = "EQUALS";
Chars2[Chars2["GT"] = 62] = "GT";
Chars2[Chars2["QUESTION"] = 63] = "QUESTION";
Chars2[Chars2["UpperA"] = 65] = "UpperA";
Chars2[Chars2["UpperZ"] = 90] = "UpperZ";
Chars2[Chars2["LowerA"] = 97] = "LowerA";
Chars2[Chars2["LowerZ"] = 122] = "LowerZ";
})(Chars || (Chars = {}));
SPACE_CHARACTERS = /* @__PURE__ */ new Set([Chars.SPACE, Chars.LF, Chars.CR, Chars.TAB]);
END_OF_UNQUOTED_ATTRIBUTE_VALUE = /* @__PURE__ */ new Set([
Chars.SPACE,
Chars.LF,
Chars.CR,
Chars.TAB,
Chars.GT
]);
STRINGS = {
UTF8_BOM: new Uint8Array([239, 187, 191]),
UTF16LE_BOM: new Uint8Array([255, 254]),
UTF16BE_BOM: new Uint8Array([254, 255]),
UTF16LE_XML_PREFIX: new Uint8Array([60, 0, 63, 0, 120, 0]),
UTF16BE_XML_PREFIX: new Uint8Array([0, 60, 0, 63, 0, 120]),
XML_DECLARATION: toUint8Array("<?xml"),
ENCODING: toUint8Array("encoding"),
META: toUint8Array("meta"),
HTTP_EQUIV: toUint8Array("http-equiv"),
CONTENT: toUint8Array("content"),
CONTENT_TYPE: toUint8Array("content-type"),
CHARSET: toUint8Array("charset"),
COMMENT_START: toUint8Array("<!--"),
COMMENT_END: toUint8Array("-->")
};
Sniffer = /** @class */
(function() {
function Sniffer2(_a2) {
var _b = _a2 === void 0 ? {} : _a2, _c = _b.maxBytes, maxBytes = _c === void 0 ? 1024 : _c, userEncoding = _b.userEncoding, transportLayerEncodingLabel = _b.transportLayerEncodingLabel, defaultEncoding = _b.defaultEncoding;
this.offset = 0;
this.state = State3.Begin;
this.sectionIndex = 0;
this.attribType = AttribType.None;
this.gotPragma = null;
this.needsPragma = null;
this.inMetaTag = false;
this.encoding = "windows-1252";
this.resultType = ResultType.DEFAULT;
this.quoteCharacter = 0;
this.attributeValue = [];
this.maxBytes = maxBytes;
if (userEncoding) {
this.setResult(userEncoding, ResultType.PASSED);
}
if (transportLayerEncodingLabel) {
this.setResult(transportLayerEncodingLabel, ResultType.PASSED);
}
if (defaultEncoding) {
this.setResult(defaultEncoding, ResultType.DEFAULT);
}
}
Sniffer2.prototype.setResult = function(label, type) {
if (this.resultType === ResultType.DEFAULT || this.resultType > type) {
var encoding = (0, import_whatwg_encoding.labelToName)(label);
if (encoding) {
this.encoding = // Check if we are in a meta tag and the encoding is `x-user-defined`
type === ResultType.META_TAG && encoding === "x-user-defined" ? "windows-1252" : (
// Check if we are in a meta tag or xml declaration, and the encoding is UTF-16
(type === ResultType.META_TAG || type === ResultType.XML_ENCODING) && (encoding === "UTF-16LE" || encoding === "UTF-16BE") ? "UTF-8" : encoding
);
this.resultType = type;
}
}
};
Sniffer2.prototype.stateBegin = function(c) {
switch (c) {
case STRINGS.UTF16BE_BOM[0]: {
this.state = State3.BOM16BE;
break;
}
case STRINGS.UTF16LE_BOM[0]: {
this.state = State3.BOM16LE;
break;
}
case STRINGS.UTF8_BOM[0]: {
this.sectionIndex = 1;
this.state = State3.BOM8;
break;
}
case Chars.NIL: {
this.state = State3.UTF16BE_XML_PREFIX;
this.sectionIndex = 1;
break;
}
case Chars.LT: {
this.state = State3.BeginLT;
break;
}
default: {
this.state = State3.BeforeTag;
}
}
};
Sniffer2.prototype.stateBeginLT = function(c) {
if (c === Chars.NIL) {
this.state = State3.UTF16LE_XML_PREFIX;
this.sectionIndex = 2;
} else if (c === Chars.QUESTION) {
this.state = State3.XMLDeclaration;
this.sectionIndex = 2;
} else {
this.state = State3.BeforeTagName;
this.stateBeforeTagName(c);
}
};
Sniffer2.prototype.stateUTF16BE_XML_PREFIX = function(c) {
if (this.advanceSection(STRINGS.UTF16BE_XML_PREFIX, c)) {
if (this.sectionIndex === STRINGS.UTF16BE_XML_PREFIX.length) {
this.setResult("utf-16be", ResultType.XML_PREFIX);
}
} else {
this.state = State3.BeforeTag;
this.stateBeforeTag(c);
}
};
Sniffer2.prototype.stateUTF16LE_XML_PREFIX = function(c) {
if (this.advanceSection(STRINGS.UTF16LE_XML_PREFIX, c)) {
if (this.sectionIndex === STRINGS.UTF16LE_XML_PREFIX.length) {
this.setResult("utf-16le", ResultType.XML_PREFIX);
}
} else {
this.state = State3.BeforeTag;
this.stateBeforeTag(c);
}
};
Sniffer2.prototype.stateBOM16LE = function(c) {
if (c === STRINGS.UTF16LE_BOM[1]) {
this.setResult("utf-16le", ResultType.BOM);
} else {
this.state = State3.BeforeTag;
this.stateBeforeTag(c);
}
};
Sniffer2.prototype.stateBOM16BE = function(c) {
if (c === STRINGS.UTF16BE_BOM[1]) {
this.setResult("utf-16be", ResultType.BOM);
} else {
this.state = State3.BeforeTag;
this.stateBeforeTag(c);
}
};
Sniffer2.prototype.stateBOM8 = function(c) {
if (this.advanceSection(STRINGS.UTF8_BOM, c) && this.sectionIndex === STRINGS.UTF8_BOM.length) {
this.setResult("utf-8", ResultType.BOM);
}
};
Sniffer2.prototype.stateBeforeTag = function(c) {
if (c === Chars.LT) {
this.state = State3.BeforeTagName;
this.inMetaTag = false;
}
};
Sniffer2.prototype.stateBeforeTagName = function(c) {
if (isAsciiAlpha(c)) {
if ((c | 32) === STRINGS.META[0]) {
this.sectionIndex = 1;
this.state = State3.TagNameMeta;
} else {
this.state = State3.TagNameOther;
}
} else
switch (c) {
case Chars.SLASH: {
this.state = State3.BeforeCloseTagName;
break;
}
case Chars.EXCLAMATION: {
this.state = State3.CommentStart;
this.sectionIndex = 2;
break;
}
case Chars.QUESTION: {
this.state = State3.WeirdTag;
break;
}
default: {
this.state = State3.BeforeTag;
this.stateBeforeTag(c);
}
}
};
Sniffer2.prototype.stateBeforeCloseTagName = function(c) {
this.state = isAsciiAlpha(c) ? (
// Switch to `TagNameOther`; the HTML spec allows attributes here as well.
State3.TagNameOther
) : State3.WeirdTag;
};
Sniffer2.prototype.stateCommentStart = function(c) {
if (this.advanceSection(STRINGS.COMMENT_START, c)) {
if (this.sectionIndex === STRINGS.COMMENT_START.length) {
this.state = State3.CommentEnd;
this.sectionIndex = 2;
}
} else {
this.state = State3.WeirdTag;
this.stateWeirdTag(c);
}
};
Sniffer2.prototype.stateCommentEnd = function(c) {
if (this.advanceSection(STRINGS.COMMENT_END, c)) {
if (this.sectionIndex === STRINGS.COMMENT_END.length) {
this.state = State3.BeforeTag;
}
} else if (c === Chars.DASH) {
this.sectionIndex = 2;
}
};
Sniffer2.prototype.stateWeirdTag = function(c) {
if (c === Chars.GT) {
this.state = State3.BeforeTag;
}
};
Sniffer2.prototype.advanceSectionIC = function(section, c) {
return this.advanceSection(section, c | 32);
};
Sniffer2.prototype.advanceSection = function(section, c) {
if (section[this.sectionIndex] === c) {
this.sectionIndex++;
return true;
}
this.sectionIndex = 0;
return false;
};
Sniffer2.prototype.stateTagNameMeta = function(c) {
if (this.sectionIndex < STRINGS.META.length) {
if (this.advanceSectionIC(STRINGS.META, c)) {
return;
}
} else if (SPACE_CHARACTERS.has(c)) {
this.inMetaTag = true;
this.gotPragma = null;
this.needsPragma = null;
this.state = State3.BeforeAttribute;
return;
}
this.state = State3.TagNameOther;
this.stateTagNameOther(c);
};
Sniffer2.prototype.stateTagNameOther = function(c) {
if (SPACE_CHARACTERS.has(c)) {
this.state = State3.BeforeAttribute;
} else if (c === Chars.GT) {
this.state = State3.BeforeTag;
}
};
Sniffer2.prototype.stateBeforeAttribute = function(c) {
if (SPACE_CHARACTERS.has(c))
return;
if (this.inMetaTag) {
var lower = c | 32;
if (lower === STRINGS.HTTP_EQUIV[0]) {
this.sectionIndex = 1;
this.state = State3.MetaAttribHttpEquiv;
return;
} else if (lower === STRINGS.CHARSET[0]) {
this.sectionIndex = 1;
this.state = State3.MetaAttribC;
return;
}
}
this.state = c === Chars.SLASH || c === Chars.GT ? State3.BeforeTag : State3.AnyAttribName;
};
Sniffer2.prototype.handleMetaAttrib = function(c, section, type) {
if (this.advanceSectionIC(section, c)) {
if (this.sectionIndex === section.length) {
this.attribType = type;
this.state = State3.MetaAttribAfterName;
}
} else {
this.state = State3.AnyAttribName;
this.stateAnyAttribName(c);
}
};
Sniffer2.prototype.stateMetaAttribHttpEquiv = function(c) {
this.handleMetaAttrib(c, STRINGS.HTTP_EQUIV, AttribType.HttpEquiv);
};
Sniffer2.prototype.stateMetaAttribC = function(c) {
var lower = c | 32;
if (lower === STRINGS.CHARSET[1]) {
this.sectionIndex = 2;
this.state = State3.MetaAttribCharset;
} else if (lower === STRINGS.CONTENT[1]) {
this.sectionIndex = 2;
this.state = State3.MetaAttribContent;
} else {
this.state = State3.AnyAttribName;
this.stateAnyAttribName(c);
}
};
Sniffer2.prototype.stateMetaAttribCharset = function(c) {
this.handleMetaAttrib(c, STRINGS.CHARSET, AttribType.Charset);
};
Sniffer2.prototype.stateMetaAttribContent = function(c) {
this.handleMetaAttrib(c, STRINGS.CONTENT, AttribType.Content);
};
Sniffer2.prototype.stateMetaAttribAfterName = function(c) {
if (SPACE_CHARACTERS.has(c) || c === Chars.EQUALS) {
this.state = State3.AfterAttributeName;
this.stateAfterAttributeName(c);
} else {
this.state = State3.AnyAttribName;
this.stateAnyAttribName(c);
}
};
Sniffer2.prototype.stateAnyAttribName = function(c) {
if (SPACE_CHARACTERS.has(c)) {
this.attribType = AttribType.None;
this.state = State3.AfterAttributeName;
} else if (c === Chars.SLASH || c === Chars.GT) {
this.state = State3.BeforeTag;
} else if (c === Chars.EQUALS) {
this.state = State3.BeforeAttributeValue;
}
};
Sniffer2.prototype.stateAfterAttributeName = function(c) {
if (SPACE_CHARACTERS.has(c))
return;
if (c === Chars.EQUALS) {
this.state = State3.BeforeAttributeValue;
} else {
this.state = State3.BeforeAttribute;
this.stateBeforeAttribute(c);
}
};
Sniffer2.prototype.stateBeforeAttributeValue = function(c) {
if (SPACE_CHARACTERS.has(c))
return;
this.attributeValue.length = 0;
this.sectionIndex = 0;
if (isQuote(c)) {
this.quoteCharacter = c;
this.state = this.attribType === AttribType.Content ? State3.MetaContentValueQuotedBeforeEncoding : this.attribType === AttribType.HttpEquiv ? State3.MetaAttribHttpEquivValue : State3.AttributeValueQuoted;
} else if (this.attribType === AttribType.Content) {
this.state = State3.MetaContentValueUnquotedBeforeEncoding;
this.stateMetaContentValueUnquotedBeforeEncoding(c);
} else if (this.attribType === AttribType.HttpEquiv) {
this.quoteCharacter = 0;
this.sectionIndex = 0;
this.state = State3.MetaAttribHttpEquivValue;
this.stateMetaAttribHttpEquivValue(c);
} else {
this.state = State3.AttributeValueUnquoted;
this.stateAttributeValueUnquoted(c);
}
};
Sniffer2.prototype.stateMetaAttribHttpEquivValue = function(c) {
if (this.sectionIndex === STRINGS.CONTENT_TYPE.length) {
if (this.quoteCharacter === 0 ? END_OF_UNQUOTED_ATTRIBUTE_VALUE.has(c) : c === this.quoteCharacter) {
if (this.needsPragma !== null) {
this.setResult(this.needsPragma, ResultType.META_TAG);
} else if (this.gotPragma === null) {
this.gotPragma = true;
}
this.state = State3.BeforeAttribute;
return;
}
} else if (this.advanceSectionIC(STRINGS.CONTENT_TYPE, c)) {
return;
}
this.gotPragma = false;
if (this.quoteCharacter === 0) {
this.state = State3.AttributeValueUnquoted;
this.stateAttributeValueUnquoted(c);
} else {
this.state = State3.AttributeValueQuoted;
this.stateAttributeValueQuoted(c);
}
};
Sniffer2.prototype.handleMetaContentValue = function() {
if (this.attributeValue.length === 0)
return;
var encoding = String.fromCharCode.apply(String, this.attributeValue);
if (this.gotPragma) {
this.setResult(encoding, ResultType.META_TAG);
} else if (this.needsPragma === null) {
this.needsPragma = encoding;
}
this.attributeValue.length = 0;
};
Sniffer2.prototype.handleAttributeValue = function() {
if (this.attribType === AttribType.Charset) {
this.setResult(String.fromCharCode.apply(String, this.attributeValue), ResultType.META_TAG);
}
};
Sniffer2.prototype.stateAttributeValueUnquoted = function(c) {
if (SPACE_CHARACTERS.has(c)) {
this.handleAttributeValue();
this.state = State3.BeforeAttribute;
} else if (c === Chars.SLASH || c === Chars.GT) {
this.handleAttributeValue();
this.state = State3.BeforeTag;
} else if (this.attribType === AttribType.Charset) {
this.attributeValue.push(c | 32);
}
};
Sniffer2.prototype.findMetaContentEncoding = function(c) {
if (this.advanceSectionIC(STRINGS.CHARSET, c)) {
if (this.sectionIndex === STRINGS.CHARSET.length) {
return true;
}
} else {
this.sectionIndex = Number(c === STRINGS.CHARSET[0]);
}
return false;
};
Sniffer2.prototype.stateMetaContentValueUnquotedBeforeEncoding = function(c) {
if (END_OF_UNQUOTED_ATTRIBUTE_VALUE.has(c)) {
this.stateAttributeValueUnquoted(c);
} else if (this.sectionIndex === STRINGS.CHARSET.length) {
if (c === Chars.EQUALS) {
this.state = State3.MetaContentValueUnquotedBeforeValue;
}
} else {
this.findMetaContentEncoding(c);
}
};
Sniffer2.prototype.stateMetaContentValueUnquotedBeforeValue = function(c) {
if (isQuote(c)) {
this.quoteCharacter = c;
this.state = State3.MetaContentValueUnquotedValueQuoted;
} else if (END_OF_UNQUOTED_ATTRIBUTE_VALUE.has(c)) {
this.stateAttributeValueUnquoted(c);
} else {
this.state = State3.MetaContentValueUnquotedValueUnquoted;
this.stateMetaContentValueUnquotedValueUnquoted(c);
}
};
Sniffer2.prototype.stateMetaContentValueUnquotedValueQuoted = function(c) {
if (END_OF_UNQUOTED_ATTRIBUTE_VALUE.has(c)) {
this.stateAttributeValueUnquoted(c);
} else if (c === this.quoteCharacter) {
this.handleMetaContentValue();
this.state = State3.AttributeValueUnquoted;
} else {
this.attributeValue.push(c | 32);
}
};
Sniffer2.prototype.stateMetaContentValueUnquotedValueUnquoted = function(c) {
if (END_OF_UNQUOTED_ATTRIBUTE_VALUE.has(c) || c === Chars.SEMICOLON) {
this.handleMetaContentValue();
this.state = State3.AttributeValueUnquoted;
this.stateAttributeValueUnquoted(c);
} else {
this.attributeValue.push(c | 32);
}
};
Sniffer2.prototype.stateMetaContentValueQuotedValueUnquoted = function(c) {
if (isQuote(c) || SPACE_CHARACTERS.has(c) || c === Chars.SEMICOLON) {
this.handleMetaContentValue();
this.state = State3.AttributeValueQuoted;
this.stateAttributeValueQuoted(c);
} else {
this.attributeValue.push(c | 32);
}
};
Sniffer2.prototype.stateMetaContentValueQuotedValueQuoted = function(c) {
if (isQuote(c)) {
if (c !== this.quoteCharacter) {
this.handleMetaContentValue();
}
this.state = State3.AttributeValueQuoted;
this.stateAttributeValueQuoted(c);
} else {
this.attributeValue.push(c | 32);
}
};
Sniffer2.prototype.stateMetaContentValueQuotedBeforeEncoding = function(c) {
if (c === this.quoteCharacter) {
this.stateAttributeValueQuoted(c);
} else if (this.findMetaContentEncoding(c)) {
this.state = State3.MetaContentValueQuotedAfterEncoding;
}
};
Sniffer2.prototype.stateMetaContentValueQuotedAfterEncoding = function(c) {
if (c === Chars.EQUALS) {
this.state = State3.MetaContentValueQuotedBeforeValue;
} else if (!SPACE_CHARACTERS.has(c)) {
this.state = State3.MetaContentValueQuotedBeforeEncoding;
this.stateMetaContentValueQuotedBeforeEncoding(c);
}
};
Sniffer2.prototype.stateMetaContentValueQuotedBeforeValue = function(c) {
if (c === this.quoteCharacter) {
this.stateAttributeValueQuoted(c);
} else if (isQuote(c)) {
this.state = State3.MetaContentValueQuotedValueQuoted;
} else if (!SPACE_CHARACTERS.has(c)) {
this.state = State3.MetaContentValueQuotedValueUnquoted;
this.stateMetaContentValueQuotedValueUnquoted(c);
}
};
Sniffer2.prototype.stateAttributeValueQuoted = function(c) {
if (c === this.quoteCharacter) {
this.handleAttributeValue();
this.state = State3.BeforeAttribute;
} else if (this.attribType === AttribType.Charset) {
this.attributeValue.push(c | 32);
}
};
Sniffer2.prototype.stateXMLDeclaration = function(c) {
if (this.advanceSection(STRINGS.XML_DECLARATION, c)) {
if (this.sectionIndex === STRINGS.XML_DECLARATION.length) {
this.sectionIndex = 0;
this.state = State3.XMLDeclarationBeforeEncoding;
}
} else {
this.state = State3.WeirdTag;
}
};
Sniffer2.prototype.stateXMLDeclarationBeforeEncoding = function(c) {
if (this.advanceSection(STRINGS.ENCODING, c)) {
if (this.sectionIndex === STRINGS.ENCODING.length) {
this.state = State3.XMLDeclarationAfterEncoding;
}
} else if (c === Chars.GT) {
this.state = State3.BeforeTag;
} else {
this.sectionIndex = Number(c === STRINGS.ENCODING[0]);
}
};
Sniffer2.prototype.stateXMLDeclarationAfterEncoding = function(c) {
if (c === Chars.EQUALS) {
this.state = State3.XMLDeclarationBeforeValue;
} else if (c > Chars.SPACE) {
this.state = State3.WeirdTag;
this.stateWeirdTag(c);
}
};
Sniffer2.prototype.stateXMLDeclarationBeforeValue = function(c) {
if (isQuote(c)) {
this.attributeValue.length = 0;
this.state = State3.XMLDeclarationValue;
} else if (c > Chars.SPACE) {
this.state = State3.WeirdTag;
this.stateWeirdTag(c);
}
};
Sniffer2.prototype.stateXMLDeclarationValue = function(c) {
if (isQuote(c)) {
this.setResult(String.fromCharCode.apply(String, this.attributeValue), ResultType.XML_ENCODING);
this.state = State3.WeirdTag;
} else if (c === Chars.GT) {
this.state = State3.BeforeTag;
} else if (c <= Chars.SPACE) {
this.state = State3.WeirdTag;
} else {
this.attributeValue.push(c | 32);
}
};
Sniffer2.prototype.write = function(buffer) {
var index2 = 0;
for (; index2 < buffer.length && this.offset + index2 < this.maxBytes; index2++) {
var c = buffer[index2];
switch (this.state) {
case State3.Begin: {
this.stateBegin(c);
break;
}
case State3.BOM16BE: {
this.stateBOM16BE(c);
break;
}
case State3.BOM16LE: {
this.stateBOM16LE(c);
break;
}
case State3.BOM8: {
this.stateBOM8(c);
break;
}
case State3.UTF16LE_XML_PREFIX: {
this.stateUTF16LE_XML_PREFIX(c);
break;
}
case State3.BeginLT: {
this.stateBeginLT(c);
break;
}
case State3.UTF16BE_XML_PREFIX: {
this.stateUTF16BE_XML_PREFIX(c);
break;
}
case State3.BeforeTag: {
var idx = buffer.indexOf(Chars.LT, index2);
if (idx < 0) {
index2 = buffer.length;
} else {
index2 = idx;
this.stateBeforeTag(Chars.LT);
}
break;
}
case State3.BeforeTagName: {
this.stateBeforeTagName(c);
break;
}
case State3.BeforeCloseTagName: {
this.stateBeforeCloseTagName(c);
break;
}
case State3.CommentStart: {
this.stateCommentStart(c);
break;
}
case State3.CommentEnd: {
this.stateCommentEnd(c);
break;
}
case State3.TagNameMeta: {
this.stateTagNameMeta(c);
break;
}
case State3.TagNameOther: {
this.stateTagNameOther(c);
break;
}
case State3.XMLDeclaration: {
this.stateXMLDeclaration(c);
break;
}
case State3.XMLDeclarationBeforeEncoding: {
this.stateXMLDeclarationBeforeEncoding(c);
break;
}
case State3.XMLDeclarationAfterEncoding: {
this.stateXMLDeclarationAfterEncoding(c);
break;
}
case State3.XMLDeclarationBeforeValue: {
this.stateXMLDeclarationBeforeValue(c);
break;
}
case State3.XMLDeclarationValue: {
this.stateXMLDeclarationValue(c);
break;
}
case State3.WeirdTag: {
this.stateWeirdTag(c);
break;
}
case State3.BeforeAttribute: {
this.stateBeforeAttribute(c);
break;
}
case State3.MetaAttribHttpEquiv: {
this.stateMetaAttribHttpEquiv(c);
break;
}
case State3.MetaAttribHttpEquivValue: {
this.stateMetaAttribHttpEquivValue(c);
break;
}
case State3.MetaAttribC: {
this.stateMetaAttribC(c);
break;
}
case State3.MetaAttribContent: {
this.stateMetaAttribContent(c);
break;
}
case State3.MetaAttribCharset: {
this.stateMetaAttribCharset(c);
break;
}
case State3.MetaAttribAfterName: {
this.stateMetaAttribAfterName(c);
break;
}
case State3.MetaContentValueQuotedBeforeEncoding: {
this.stateMetaContentValueQuotedBeforeEncoding(c);
break;
}
case State3.MetaContentValueQuotedAfterEncoding: {
this.stateMetaContentValueQuotedAfterEncoding(c);
break;
}
case State3.MetaContentValueQuotedBeforeValue: {
this.stateMetaContentValueQuotedBeforeValue(c);
break;
}
case State3.MetaContentValueQuotedValueQuoted: {
this.stateMetaContentValueQuotedValueQuoted(c);
break;
}
case State3.MetaContentValueQuotedValueUnquoted: {
this.stateMetaContentValueQuotedValueUnquoted(c);
break;
}
case State3.MetaContentValueUnquotedBeforeEncoding: {
this.stateMetaContentValueUnquotedBeforeEncoding(c);
break;
}
case State3.MetaContentValueUnquotedBeforeValue: {
this.stateMetaContentValueUnquotedBeforeValue(c);
break;
}
case State3.MetaContentValueUnquotedValueQuoted: {
this.stateMetaContentValueUnquotedValueQuoted(c);
break;
}
case State3.MetaContentValueUnquotedValueUnquoted: {
this.stateMetaContentValueUnquotedValueUnquoted(c);
break;
}
case State3.AnyAttribName: {
this.stateAnyAttribName(c);
break;
}
case State3.AfterAttributeName: {
this.stateAfterAttributeName(c);
break;
}
case State3.BeforeAttributeValue: {
this.stateBeforeAttributeValue(c);
break;
}
case State3.AttributeValueQuoted: {
this.stateAttributeValueQuoted(c);
break;
}
default: {
this.stateAttributeValueUnquoted(c);
}
}
}
this.offset += index2;
};
return Sniffer2;
})();
}
});
// node_modules/encoding-sniffer/dist/esm/index.js
var import_node_stream, import_iconv_lite, __extends, DecodeStream;
var init_esm10 = __esm({
"node_modules/encoding-sniffer/dist/esm/index.js"() {
import_node_stream = require("node:stream");
import_iconv_lite = __toESM(require_lib(), 1);
init_sniffer();
init_sniffer();
__extends = /* @__PURE__ */ (function() {
var extendStatics = function(d, b) {
extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function(d2, b2) {
d2.__proto__ = b2;
} || function(d2, b2) {
for (var p in b2) if (Object.prototype.hasOwnProperty.call(b2, p)) d2[p] = b2[p];
};
return extendStatics(d, b);
};
return function(d, b) {
if (typeof b !== "function" && b !== null)
throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
extendStatics(d, b);
function __() {
this.constructor = d;
}
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
};
})();
DecodeStream = /** @class */
(function(_super) {
__extends(DecodeStream2, _super);
function DecodeStream2(options) {
var _a2;
var _this = _super.call(this, { decodeStrings: false, encoding: "utf-8" }) || this;
_this.buffers = [];
_this.iconv = null;
_this.readBytes = 0;
_this.sniffer = new Sniffer(options);
_this.maxBytes = (_a2 = options === null || options === void 0 ? void 0 : options.maxBytes) !== null && _a2 !== void 0 ? _a2 : 1024;
return _this;
}
DecodeStream2.prototype._transform = function(chunk, _encoding, callback) {
if (this.readBytes < this.maxBytes) {
this.sniffer.write(chunk);
this.readBytes += chunk.length;
if (this.readBytes < this.maxBytes) {
this.buffers.push(chunk);
callback();
return;
}
}
this.getIconvStream().write(chunk, callback);
};
DecodeStream2.prototype.getIconvStream = function() {
var _this = this;
if (this.iconv) {
return this.iconv;
}
var stream5 = import_iconv_lite.default.decodeStream(this.sniffer.encoding);
stream5.on("data", function(chunk) {
return _this.push(chunk, "utf-8");
});
stream5.on("end", function() {
return _this.push(null);
});
this.iconv = stream5;
for (var _i = 0, _a2 = this.buffers; _i < _a2.length; _i++) {
var buffer = _a2[_i];
stream5.write(buffer);
}
this.buffers.length = 0;
return stream5;
};
DecodeStream2.prototype._flush = function(callback) {
this.getIconvStream().end(callback);
};
return DecodeStream2;
})(import_node_stream.Transform);
}
});
// node_modules/undici/lib/core/symbols.js
var require_symbols = __commonJS({
"node_modules/undici/lib/core/symbols.js"(exports2, module2) {
module2.exports = {
kClose: Symbol("close"),
kDestroy: Symbol("destroy"),
kDispatch: Symbol("dispatch"),
kUrl: Symbol("url"),
kWriting: Symbol("writing"),
kResuming: Symbol("resuming"),
kQueue: Symbol("queue"),
kConnect: Symbol("connect"),
kConnecting: Symbol("connecting"),
kKeepAliveDefaultTimeout: Symbol("default keep alive timeout"),
kKeepAliveMaxTimeout: Symbol("max keep alive timeout"),
kKeepAliveTimeoutThreshold: Symbol("keep alive timeout threshold"),
kKeepAliveTimeoutValue: Symbol("keep alive timeout"),
kKeepAlive: Symbol("keep alive"),
kHeadersTimeout: Symbol("headers timeout"),
kBodyTimeout: Symbol("body timeout"),
kServerName: Symbol("server name"),
kLocalAddress: Symbol("local address"),
kHost: Symbol("host"),
kNoRef: Symbol("no ref"),
kBodyUsed: Symbol("used"),
kBody: Symbol("abstracted request body"),
kRunning: Symbol("running"),
kBlocking: Symbol("blocking"),
kPending: Symbol("pending"),
kSize: Symbol("size"),
kBusy: Symbol("busy"),
kQueued: Symbol("queued"),
kFree: Symbol("free"),
kConnected: Symbol("connected"),
kClosed: Symbol("closed"),
kNeedDrain: Symbol("need drain"),
kReset: Symbol("reset"),
kDestroyed: Symbol.for("nodejs.stream.destroyed"),
kResume: Symbol("resume"),
kOnError: Symbol("on error"),
kMaxHeadersSize: Symbol("max headers size"),
kRunningIdx: Symbol("running index"),
kPendingIdx: Symbol("pending index"),
kError: Symbol("error"),
kClients: Symbol("clients"),
kClient: Symbol("client"),
kParser: Symbol("parser"),
kOnDestroyed: Symbol("destroy callbacks"),
kPipelining: Symbol("pipelining"),
kSocket: Symbol("socket"),
kHostHeader: Symbol("host header"),
kConnector: Symbol("connector"),
kStrictContentLength: Symbol("strict content length"),
kMaxRedirections: Symbol("maxRedirections"),
kMaxRequests: Symbol("maxRequestsPerClient"),
kProxy: Symbol("proxy agent options"),
kCounter: Symbol("socket request counter"),
kInterceptors: Symbol("dispatch interceptors"),
kMaxResponseSize: Symbol("max response size"),
kHTTP2Session: Symbol("http2Session"),
kHTTP2SessionState: Symbol("http2Session state"),
kRetryHandlerDefaultRetry: Symbol("retry agent default retry"),
kConstruct: Symbol("constructable"),
kListeners: Symbol("listeners"),
kHTTPContext: Symbol("http context"),
kMaxConcurrentStreams: Symbol("max concurrent streams"),
kNoProxyAgent: Symbol("no proxy agent"),
kHttpProxyAgent: Symbol("http proxy agent"),
kHttpsProxyAgent: Symbol("https proxy agent")
};
}
});
// node_modules/undici/lib/core/errors.js
var require_errors = __commonJS({
"node_modules/undici/lib/core/errors.js"(exports2, module2) {
"use strict";
var UndiciError = class extends Error {
constructor(message) {
super(message);
this.name = "UndiciError";
this.code = "UND_ERR";
}
};
var ConnectTimeoutError = class extends UndiciError {
constructor(message) {
super(message);
this.name = "ConnectTimeoutError";
this.message = message || "Connect Timeout Error";
this.code = "UND_ERR_CONNECT_TIMEOUT";
}
};
var HeadersTimeoutError = class extends UndiciError {
constructor(message) {
super(message);
this.name = "HeadersTimeoutError";
this.message = message || "Headers Timeout Error";
this.code = "UND_ERR_HEADERS_TIMEOUT";
}
};
var HeadersOverflowError = class extends UndiciError {
constructor(message) {
super(message);
this.name = "HeadersOverflowError";
this.message = message || "Headers Overflow Error";
this.code = "UND_ERR_HEADERS_OVERFLOW";
}
};
var BodyTimeoutError = class extends UndiciError {
constructor(message) {
super(message);
this.name = "BodyTimeoutError";
this.message = message || "Body Timeout Error";
this.code = "UND_ERR_BODY_TIMEOUT";
}
};
var ResponseStatusCodeError = class extends UndiciError {
constructor(message, statusCode, headers, body) {
super(message);
this.name = "ResponseStatusCodeError";
this.message = message || "Response Status Code Error";
this.code = "UND_ERR_RESPONSE_STATUS_CODE";
this.body = body;
this.status = statusCode;
this.statusCode = statusCode;
this.headers = headers;
}
};
var InvalidArgumentError = class extends UndiciError {
constructor(message) {
super(message);
this.name = "InvalidArgumentError";
this.message = message || "Invalid Argument Error";
this.code = "UND_ERR_INVALID_ARG";
}
};
var InvalidReturnValueError = class extends UndiciError {
constructor(message) {
super(message);
this.name = "InvalidReturnValueError";
this.message = message || "Invalid Return Value Error";
this.code = "UND_ERR_INVALID_RETURN_VALUE";
}
};
var AbortError = class extends UndiciError {
constructor(message) {
super(message);
this.name = "AbortError";
this.message = message || "The operation was aborted";
}
};
var RequestAbortedError = class extends AbortError {
constructor(message) {
super(message);
this.name = "AbortError";
this.message = message || "Request aborted";
this.code = "UND_ERR_ABORTED";
}
};
var InformationalError = class extends UndiciError {
constructor(message) {
super(message);
this.name = "InformationalError";
this.message = message || "Request information";
this.code = "UND_ERR_INFO";
}
};
var RequestContentLengthMismatchError = class extends UndiciError {
constructor(message) {
super(message);
this.name = "RequestContentLengthMismatchError";
this.message = message || "Request body length does not match content-length header";
this.code = "UND_ERR_REQ_CONTENT_LENGTH_MISMATCH";
}
};
var ResponseContentLengthMismatchError = class extends UndiciError {
constructor(message) {
super(message);
this.name = "ResponseContentLengthMismatchError";
this.message = message || "Response body length does not match content-length header";
this.code = "UND_ERR_RES_CONTENT_LENGTH_MISMATCH";
}
};
var ClientDestroyedError = class extends UndiciError {
constructor(message) {
super(message);
this.name = "ClientDestroyedError";
this.message = message || "The client is destroyed";
this.code = "UND_ERR_DESTROYED";
}
};
var ClientClosedError = class extends UndiciError {
constructor(message) {
super(message);
this.name = "ClientClosedError";
this.message = message || "The client is closed";
this.code = "UND_ERR_CLOSED";
}
};
var SocketError = class extends UndiciError {
constructor(message, socket) {
super(message);
this.name = "SocketError";
this.message = message || "Socket error";
this.code = "UND_ERR_SOCKET";
this.socket = socket;
}
};
var NotSupportedError = class extends UndiciError {
constructor(message) {
super(message);
this.name = "NotSupportedError";
this.message = message || "Not supported error";
this.code = "UND_ERR_NOT_SUPPORTED";
}
};
var BalancedPoolMissingUpstreamError = class extends UndiciError {
constructor(message) {
super(message);
this.name = "MissingUpstreamError";
this.message = message || "No upstream has been added to the BalancedPool";
this.code = "UND_ERR_BPL_MISSING_UPSTREAM";
}
};
var HTTPParserError = class extends Error {
constructor(message, code, data2) {
super(message);
this.name = "HTTPParserError";
this.code = code ? `HPE_${code}` : void 0;
this.data = data2 ? data2.toString() : void 0;
}
};
var ResponseExceededMaxSizeError = class extends UndiciError {
constructor(message) {
super(message);
this.name = "ResponseExceededMaxSizeError";
this.message = message || "Response content exceeded max size";
this.code = "UND_ERR_RES_EXCEEDED_MAX_SIZE";
}
};
var RequestRetryError = class extends UndiciError {
constructor(message, code, { headers, data: data2 }) {
super(message);
this.name = "RequestRetryError";
this.message = message || "Request retry error";
this.code = "UND_ERR_REQ_RETRY";
this.statusCode = code;
this.data = data2;
this.headers = headers;
}
};
var ResponseError = class extends UndiciError {
constructor(message, code, { headers, data: data2 }) {
super(message);
this.name = "ResponseError";
this.message = message || "Response error";
this.code = "UND_ERR_RESPONSE";
this.statusCode = code;
this.data = data2;
this.headers = headers;
}
};
var SecureProxyConnectionError = class extends UndiciError {
constructor(cause, message, options) {
super(message, { cause, ...options ?? {} });
this.name = "SecureProxyConnectionError";
this.message = message || "Secure Proxy Connection failed";
this.code = "UND_ERR_PRX_TLS";
this.cause = cause;
}
};
module2.exports = {
AbortError,
HTTPParserError,
UndiciError,
HeadersTimeoutError,
HeadersOverflowError,
BodyTimeoutError,
RequestContentLengthMismatchError,
ConnectTimeoutError,
ResponseStatusCodeError,
InvalidArgumentError,
InvalidReturnValueError,
RequestAbortedError,
ClientDestroyedError,
ClientClosedError,
InformationalError,
SocketError,
NotSupportedError,
ResponseContentLengthMismatchError,
BalancedPoolMissingUpstreamError,
ResponseExceededMaxSizeError,
RequestRetryError,
ResponseError,
SecureProxyConnectionError
};
}
});
// node_modules/undici/lib/core/constants.js
var require_constants = __commonJS({
"node_modules/undici/lib/core/constants.js"(exports2, module2) {
"use strict";
var headerNameLowerCasedRecord = {};
var wellknownHeaderNames = [
"Accept",
"Accept-Encoding",
"Accept-Language",
"Accept-Ranges",
"Access-Control-Allow-Credentials",
"Access-Control-Allow-Headers",
"Access-Control-Allow-Methods",
"Access-Control-Allow-Origin",
"Access-Control-Expose-Headers",
"Access-Control-Max-Age",
"Access-Control-Request-Headers",
"Access-Control-Request-Method",
"Age",
"Allow",
"Alt-Svc",
"Alt-Used",
"Authorization",
"Cache-Control",
"Clear-Site-Data",
"Connection",
"Content-Disposition",
"Content-Encoding",
"Content-Language",
"Content-Length",
"Content-Location",
"Content-Range",
"Content-Security-Policy",
"Content-Security-Policy-Report-Only",
"Content-Type",
"Cookie",
"Cross-Origin-Embedder-Policy",
"Cross-Origin-Opener-Policy",
"Cross-Origin-Resource-Policy",
"Date",
"Device-Memory",
"Downlink",
"ECT",
"ETag",
"Expect",
"Expect-CT",
"Expires",
"Forwarded",
"From",
"Host",
"If-Match",
"If-Modified-Since",
"If-None-Match",
"If-Range",
"If-Unmodified-Since",
"Keep-Alive",
"Last-Modified",
"Link",
"Location",
"Max-Forwards",
"Origin",
"Permissions-Policy",
"Pragma",
"Proxy-Authenticate",
"Proxy-Authorization",
"RTT",
"Range",
"Referer",
"Referrer-Policy",
"Refresh",
"Retry-After",
"Sec-WebSocket-Accept",
"Sec-WebSocket-Extensions",
"Sec-WebSocket-Key",
"Sec-WebSocket-Protocol",
"Sec-WebSocket-Version",
"Server",
"Server-Timing",
"Service-Worker-Allowed",
"Service-Worker-Navigation-Preload",
"Set-Cookie",
"SourceMap",
"Strict-Transport-Security",
"Supports-Loading-Mode",
"TE",
"Timing-Allow-Origin",
"Trailer",
"Transfer-Encoding",
"Upgrade",
"Upgrade-Insecure-Requests",
"User-Agent",
"Vary",
"Via",
"WWW-Authenticate",
"X-Content-Type-Options",
"X-DNS-Prefetch-Control",
"X-Frame-Options",
"X-Permitted-Cross-Domain-Policies",
"X-Powered-By",
"X-Requested-With",
"X-XSS-Protection"
];
for (let i = 0; i < wellknownHeaderNames.length; ++i) {
const key = wellknownHeaderNames[i];
const lowerCasedKey = key.toLowerCase();
headerNameLowerCasedRecord[key] = headerNameLowerCasedRecord[lowerCasedKey] = lowerCasedKey;
}
Object.setPrototypeOf(headerNameLowerCasedRecord, null);
module2.exports = {
wellknownHeaderNames,
headerNameLowerCasedRecord
};
}
});
// node_modules/undici/lib/core/tree.js
var require_tree = __commonJS({
"node_modules/undici/lib/core/tree.js"(exports2, module2) {
"use strict";
var {
wellknownHeaderNames,
headerNameLowerCasedRecord
} = require_constants();
var TstNode = class _TstNode {
/** @type {any} */
value = null;
/** @type {null | TstNode} */
left = null;
/** @type {null | TstNode} */
middle = null;
/** @type {null | TstNode} */
right = null;
/** @type {number} */
code;
/**
* @param {string} key
* @param {any} value
* @param {number} index
*/
constructor(key, value, index2) {
if (index2 === void 0 || index2 >= key.length) {
throw new TypeError("Unreachable");
}
const code = this.code = key.charCodeAt(index2);
if (code > 127) {
throw new TypeError("key must be ascii string");
}
if (key.length !== ++index2) {
this.middle = new _TstNode(key, value, index2);
} else {
this.value = value;
}
}
/**
* @param {string} key
* @param {any} value
*/
add(key, value) {
const length = key.length;
if (length === 0) {
throw new TypeError("Unreachable");
}
let index2 = 0;
let node = this;
while (true) {
const code = key.charCodeAt(index2);
if (code > 127) {
throw new TypeError("key must be ascii string");
}
if (node.code === code) {
if (length === ++index2) {
node.value = value;
break;
} else if (node.middle !== null) {
node = node.middle;
} else {
node.middle = new _TstNode(key, value, index2);
break;
}
} else if (node.code < code) {
if (node.left !== null) {
node = node.left;
} else {
node.left = new _TstNode(key, value, index2);
break;
}
} else if (node.right !== null) {
node = node.right;
} else {
node.right = new _TstNode(key, value, index2);
break;
}
}
}
/**
* @param {Uint8Array} key
* @return {TstNode | null}
*/
search(key) {
const keylength = key.length;
let index2 = 0;
let node = this;
while (node !== null && index2 < keylength) {
let code = key[index2];
if (code <= 90 && code >= 65) {
code |= 32;
}
while (node !== null) {
if (code === node.code) {
if (keylength === ++index2) {
return node;
}
node = node.middle;
break;
}
node = node.code < code ? node.left : node.right;
}
}
return null;
}
};
var TernarySearchTree = class {
/** @type {TstNode | null} */
node = null;
/**
* @param {string} key
* @param {any} value
* */
insert(key, value) {
if (this.node === null) {
this.node = new TstNode(key, value, 0);
} else {
this.node.add(key, value);
}
}
/**
* @param {Uint8Array} key
* @return {any}
*/
lookup(key) {
return this.node?.search(key)?.value ?? null;
}
};
var tree = new TernarySearchTree();
for (let i = 0; i < wellknownHeaderNames.length; ++i) {
const key = headerNameLowerCasedRecord[wellknownHeaderNames[i]];
tree.insert(key, key);
}
module2.exports = {
TernarySearchTree,
tree
};
}
});
// node_modules/undici/lib/core/util.js
var require_util2 = __commonJS({
"node_modules/undici/lib/core/util.js"(exports2, module2) {
"use strict";
var assert = require("node:assert");
var { kDestroyed, kBodyUsed, kListeners, kBody } = require_symbols();
var { IncomingMessage } = require("node:http");
var stream5 = require("node:stream");
var net = require("node:net");
var { Blob: Blob2 } = require("node:buffer");
var nodeUtil = require("node:util");
var { stringify: stringify2 } = require("node:querystring");
var { EventEmitter: EE } = require("node:events");
var { InvalidArgumentError } = require_errors();
var { headerNameLowerCasedRecord } = require_constants();
var { tree } = require_tree();
var [nodeMajor, nodeMinor] = process.versions.node.split(".").map((v) => Number(v));
var BodyAsyncIterable = class {
constructor(body) {
this[kBody] = body;
this[kBodyUsed] = false;
}
async *[Symbol.asyncIterator]() {
assert(!this[kBodyUsed], "disturbed");
this[kBodyUsed] = true;
yield* this[kBody];
}
};
function wrapRequestBody(body) {
if (isStream2(body)) {
if (bodyLength(body) === 0) {
body.on("data", function() {
assert(false);
});
}
if (typeof body.readableDidRead !== "boolean") {
body[kBodyUsed] = false;
EE.prototype.on.call(body, "data", function() {
this[kBodyUsed] = true;
});
}
return body;
} else if (body && typeof body.pipeTo === "function") {
return new BodyAsyncIterable(body);
} else if (body && typeof body !== "string" && !ArrayBuffer.isView(body) && isIterable(body)) {
return new BodyAsyncIterable(body);
} else {
return body;
}
}
function nop() {
}
function isStream2(obj) {
return obj && typeof obj === "object" && typeof obj.pipe === "function" && typeof obj.on === "function";
}
function isBlobLike(object) {
if (object === null) {
return false;
} else if (object instanceof Blob2) {
return true;
} else if (typeof object !== "object") {
return false;
} else {
const sTag = object[Symbol.toStringTag];
return (sTag === "Blob" || sTag === "File") && ("stream" in object && typeof object.stream === "function" || "arrayBuffer" in object && typeof object.arrayBuffer === "function");
}
}
function buildURL2(url2, queryParams) {
if (url2.includes("?") || url2.includes("#")) {
throw new Error('Query params cannot be passed when url already contains "?" or "#".');
}
const stringified = stringify2(queryParams);
if (stringified) {
url2 += "?" + stringified;
}
return url2;
}
function isValidPort(port) {
const value = parseInt(port, 10);
return value === Number(port) && value >= 0 && value <= 65535;
}
function isHttpOrHttpsPrefixed(value) {
return value != null && value[0] === "h" && value[1] === "t" && value[2] === "t" && value[3] === "p" && (value[4] === ":" || value[4] === "s" && value[5] === ":");
}
function parseURL(url2) {
if (typeof url2 === "string") {
url2 = new URL(url2);
if (!isHttpOrHttpsPrefixed(url2.origin || url2.protocol)) {
throw new InvalidArgumentError("Invalid URL protocol: the URL must start with `http:` or `https:`.");
}
return url2;
}
if (!url2 || typeof url2 !== "object") {
throw new InvalidArgumentError("Invalid URL: The URL argument must be a non-null object.");
}
if (!(url2 instanceof URL)) {
if (url2.port != null && url2.port !== "" && isValidPort(url2.port) === false) {
throw new InvalidArgumentError("Invalid URL: port must be a valid integer or a string representation of an integer.");
}
if (url2.path != null && typeof url2.path !== "string") {
throw new InvalidArgumentError("Invalid URL path: the path must be a string or null/undefined.");
}
if (url2.pathname != null && typeof url2.pathname !== "string") {
throw new InvalidArgumentError("Invalid URL pathname: the pathname must be a string or null/undefined.");
}
if (url2.hostname != null && typeof url2.hostname !== "string") {
throw new InvalidArgumentError("Invalid URL hostname: the hostname must be a string or null/undefined.");
}
if (url2.origin != null && typeof url2.origin !== "string") {
throw new InvalidArgumentError("Invalid URL origin: the origin must be a string or null/undefined.");
}
if (!isHttpOrHttpsPrefixed(url2.origin || url2.protocol)) {
throw new InvalidArgumentError("Invalid URL protocol: the URL must start with `http:` or `https:`.");
}
const port = url2.port != null ? url2.port : url2.protocol === "https:" ? 443 : 80;
let origin2 = url2.origin != null ? url2.origin : `${url2.protocol || ""}//${url2.hostname || ""}:${port}`;
let path = url2.path != null ? url2.path : `${url2.pathname || ""}${url2.search || ""}`;
if (origin2[origin2.length - 1] === "/") {
origin2 = origin2.slice(0, origin2.length - 1);
}
if (path && path[0] !== "/") {
path = `/${path}`;
}
return new URL(`${origin2}${path}`);
}
if (!isHttpOrHttpsPrefixed(url2.origin || url2.protocol)) {
throw new InvalidArgumentError("Invalid URL protocol: the URL must start with `http:` or `https:`.");
}
return url2;
}
function parseOrigin(url2) {
url2 = parseURL(url2);
if (url2.pathname !== "/" || url2.search || url2.hash) {
throw new InvalidArgumentError("invalid url");
}
return url2;
}
function getHostname(host) {
if (host[0] === "[") {
const idx2 = host.indexOf("]");
assert(idx2 !== -1);
return host.substring(1, idx2);
}
const idx = host.indexOf(":");
if (idx === -1) return host;
return host.substring(0, idx);
}
function getServerName(host) {
if (!host) {
return null;
}
assert(typeof host === "string");
const servername = getHostname(host);
if (net.isIP(servername)) {
return "";
}
return servername;
}
function deepClone(obj) {
return JSON.parse(JSON.stringify(obj));
}
function isAsyncIterable(obj) {
return !!(obj != null && typeof obj[Symbol.asyncIterator] === "function");
}
function isIterable(obj) {
return !!(obj != null && (typeof obj[Symbol.iterator] === "function" || typeof obj[Symbol.asyncIterator] === "function"));
}
function bodyLength(body) {
if (body == null) {
return 0;
} else if (isStream2(body)) {
const state = body._readableState;
return state && state.objectMode === false && state.ended === true && Number.isFinite(state.length) ? state.length : null;
} else if (isBlobLike(body)) {
return body.size != null ? body.size : null;
} else if (isBuffer2(body)) {
return body.byteLength;
}
return null;
}
function isDestroyed(body) {
return body && !!(body.destroyed || body[kDestroyed] || stream5.isDestroyed?.(body));
}
function destroy(stream6, err2) {
if (stream6 == null || !isStream2(stream6) || isDestroyed(stream6)) {
return;
}
if (typeof stream6.destroy === "function") {
if (Object.getPrototypeOf(stream6).constructor === IncomingMessage) {
stream6.socket = null;
}
stream6.destroy(err2);
} else if (err2) {
queueMicrotask(() => {
stream6.emit("error", err2);
});
}
if (stream6.destroyed !== true) {
stream6[kDestroyed] = true;
}
}
var KEEPALIVE_TIMEOUT_EXPR = /timeout=(\d+)/;
function parseKeepAliveTimeout(val2) {
const m = val2.toString().match(KEEPALIVE_TIMEOUT_EXPR);
return m ? parseInt(m[1], 10) * 1e3 : null;
}
function headerNameToString(value) {
return typeof value === "string" ? headerNameLowerCasedRecord[value] ?? value.toLowerCase() : tree.lookup(value) ?? value.toString("latin1").toLowerCase();
}
function bufferToLowerCasedHeaderName(value) {
return tree.lookup(value) ?? value.toString("latin1").toLowerCase();
}
function parseHeaders(headers, obj) {
if (obj === void 0) obj = {};
for (let i = 0; i < headers.length; i += 2) {
const key = headerNameToString(headers[i]);
let val2 = obj[key];
if (val2) {
if (typeof val2 === "string") {
val2 = [val2];
obj[key] = val2;
}
val2.push(headers[i + 1].toString("utf8"));
} else {
const headersValue = headers[i + 1];
if (typeof headersValue === "string") {
obj[key] = headersValue;
} else {
obj[key] = Array.isArray(headersValue) ? headersValue.map((x) => x.toString("utf8")) : headersValue.toString("utf8");
}
}
}
if ("content-length" in obj && "content-disposition" in obj) {
obj["content-disposition"] = Buffer.from(obj["content-disposition"]).toString("latin1");
}
return obj;
}
function parseRawHeaders(headers) {
const len = headers.length;
const ret = new Array(len);
let hasContentLength = false;
let contentDispositionIdx = -1;
let key;
let val2;
let kLen = 0;
for (let n = 0; n < headers.length; n += 2) {
key = headers[n];
val2 = headers[n + 1];
typeof key !== "string" && (key = key.toString());
typeof val2 !== "string" && (val2 = val2.toString("utf8"));
kLen = key.length;
if (kLen === 14 && key[7] === "-" && (key === "content-length" || key.toLowerCase() === "content-length")) {
hasContentLength = true;
} else if (kLen === 19 && key[7] === "-" && (key === "content-disposition" || key.toLowerCase() === "content-disposition")) {
contentDispositionIdx = n + 1;
}
ret[n] = key;
ret[n + 1] = val2;
}
if (hasContentLength && contentDispositionIdx !== -1) {
ret[contentDispositionIdx] = Buffer.from(ret[contentDispositionIdx]).toString("latin1");
}
return ret;
}
function isBuffer2(buffer) {
return buffer instanceof Uint8Array || Buffer.isBuffer(buffer);
}
function validateHandler(handler, method, upgrade) {
if (!handler || typeof handler !== "object") {
throw new InvalidArgumentError("handler must be an object");
}
if (typeof handler.onConnect !== "function") {
throw new InvalidArgumentError("invalid onConnect method");
}
if (typeof handler.onError !== "function") {
throw new InvalidArgumentError("invalid onError method");
}
if (typeof handler.onBodySent !== "function" && handler.onBodySent !== void 0) {
throw new InvalidArgumentError("invalid onBodySent method");
}
if (upgrade || method === "CONNECT") {
if (typeof handler.onUpgrade !== "function") {
throw new InvalidArgumentError("invalid onUpgrade method");
}
} else {
if (typeof handler.onHeaders !== "function") {
throw new InvalidArgumentError("invalid onHeaders method");
}
if (typeof handler.onData !== "function") {
throw new InvalidArgumentError("invalid onData method");
}
if (typeof handler.onComplete !== "function") {
throw new InvalidArgumentError("invalid onComplete method");
}
}
}
function isDisturbed(body) {
return !!(body && (stream5.isDisturbed(body) || body[kBodyUsed]));
}
function isErrored(body) {
return !!(body && stream5.isErrored(body));
}
function isReadable(body) {
return !!(body && stream5.isReadable(body));
}
function getSocketInfo(socket) {
return {
localAddress: socket.localAddress,
localPort: socket.localPort,
remoteAddress: socket.remoteAddress,
remotePort: socket.remotePort,
remoteFamily: socket.remoteFamily,
timeout: socket.timeout,
bytesWritten: socket.bytesWritten,
bytesRead: socket.bytesRead
};
}
function ReadableStreamFrom(iterable) {
let iterator;
return new ReadableStream(
{
async start() {
iterator = iterable[Symbol.asyncIterator]();
},
async pull(controller) {
const { done, value } = await iterator.next();
if (done) {
queueMicrotask(() => {
controller.close();
controller.byobRequest?.respond(0);
});
} else {
const buf = Buffer.isBuffer(value) ? value : Buffer.from(value);
if (buf.byteLength) {
controller.enqueue(new Uint8Array(buf));
}
}
return controller.desiredSize > 0;
},
async cancel(reason) {
await iterator.return();
},
type: "bytes"
}
);
}
function isFormDataLike(object) {
return object && typeof object === "object" && typeof object.append === "function" && typeof object.delete === "function" && typeof object.get === "function" && typeof object.getAll === "function" && typeof object.has === "function" && typeof object.set === "function" && object[Symbol.toStringTag] === "FormData";
}
function addAbortListener(signal, listener) {
if ("addEventListener" in signal) {
signal.addEventListener("abort", listener, { once: true });
return () => signal.removeEventListener("abort", listener);
}
signal.addListener("abort", listener);
return () => signal.removeListener("abort", listener);
}
var hasToWellFormed = typeof String.prototype.toWellFormed === "function";
var hasIsWellFormed = typeof String.prototype.isWellFormed === "function";
function toUSVString(val2) {
return hasToWellFormed ? `${val2}`.toWellFormed() : nodeUtil.toUSVString(val2);
}
function isUSVString(val2) {
return hasIsWellFormed ? `${val2}`.isWellFormed() : toUSVString(val2) === `${val2}`;
}
function isTokenCharCode(c) {
switch (c) {
case 34:
case 40:
case 41:
case 44:
case 47:
case 58:
case 59:
case 60:
case 61:
case 62:
case 63:
case 64:
case 91:
case 92:
case 93:
case 123:
case 125:
return false;
default:
return c >= 33 && c <= 126;
}
}
function isValidHTTPToken(characters) {
if (characters.length === 0) {
return false;
}
for (let i = 0; i < characters.length; ++i) {
if (!isTokenCharCode(characters.charCodeAt(i))) {
return false;
}
}
return true;
}
var headerCharRegex = /[^\t\x20-\x7e\x80-\xff]/;
function isValidHeaderValue(characters) {
return !headerCharRegex.test(characters);
}
function parseRangeHeader(range) {
if (range == null || range === "") return { start: 0, end: null, size: null };
const m = range ? range.match(/^bytes (\d+)-(\d+)\/(\d+)?$/) : null;
return m ? {
start: parseInt(m[1]),
end: m[2] ? parseInt(m[2]) : null,
size: m[3] ? parseInt(m[3]) : null
} : null;
}
function addListener(obj, name, listener) {
const listeners = obj[kListeners] ??= [];
listeners.push([name, listener]);
obj.on(name, listener);
return obj;
}
function removeAllListeners(obj) {
for (const [name, listener] of obj[kListeners] ?? []) {
obj.removeListener(name, listener);
}
obj[kListeners] = null;
}
function errorRequest(client, request, err2) {
try {
request.onError(err2);
assert(request.aborted);
} catch (err3) {
client.emit("error", err3);
}
}
var kEnumerableProperty = /* @__PURE__ */ Object.create(null);
kEnumerableProperty.enumerable = true;
var normalizedMethodRecordsBase = {
delete: "DELETE",
DELETE: "DELETE",
get: "GET",
GET: "GET",
head: "HEAD",
HEAD: "HEAD",
options: "OPTIONS",
OPTIONS: "OPTIONS",
post: "POST",
POST: "POST",
put: "PUT",
PUT: "PUT"
};
var normalizedMethodRecords = {
...normalizedMethodRecordsBase,
patch: "patch",
PATCH: "PATCH"
};
Object.setPrototypeOf(normalizedMethodRecordsBase, null);
Object.setPrototypeOf(normalizedMethodRecords, null);
module2.exports = {
kEnumerableProperty,
nop,
isDisturbed,
isErrored,
isReadable,
toUSVString,
isUSVString,
isBlobLike,
parseOrigin,
parseURL,
getServerName,
isStream: isStream2,
isIterable,
isAsyncIterable,
isDestroyed,
headerNameToString,
bufferToLowerCasedHeaderName,
addListener,
removeAllListeners,
errorRequest,
parseRawHeaders,
parseHeaders,
parseKeepAliveTimeout,
destroy,
bodyLength,
deepClone,
ReadableStreamFrom,
isBuffer: isBuffer2,
validateHandler,
getSocketInfo,
isFormDataLike,
buildURL: buildURL2,
addAbortListener,
isValidHTTPToken,
isValidHeaderValue,
isTokenCharCode,
parseRangeHeader,
normalizedMethodRecordsBase,
normalizedMethodRecords,
isValidPort,
isHttpOrHttpsPrefixed,
nodeMajor,
nodeMinor,
safeHTTPMethods: ["GET", "HEAD", "OPTIONS", "TRACE"],
wrapRequestBody
};
}
});
// node_modules/undici/lib/core/diagnostics.js
var require_diagnostics = __commonJS({
"node_modules/undici/lib/core/diagnostics.js"(exports2, module2) {
"use strict";
var diagnosticsChannel = require("node:diagnostics_channel");
var util5 = require("node:util");
var undiciDebugLog = util5.debuglog("undici");
var fetchDebuglog = util5.debuglog("fetch");
var websocketDebuglog = util5.debuglog("websocket");
var isClientSet = false;
var channels = {
// Client
beforeConnect: diagnosticsChannel.channel("undici:client:beforeConnect"),
connected: diagnosticsChannel.channel("undici:client:connected"),
connectError: diagnosticsChannel.channel("undici:client:connectError"),
sendHeaders: diagnosticsChannel.channel("undici:client:sendHeaders"),
// Request
create: diagnosticsChannel.channel("undici:request:create"),
bodySent: diagnosticsChannel.channel("undici:request:bodySent"),
headers: diagnosticsChannel.channel("undici:request:headers"),
trailers: diagnosticsChannel.channel("undici:request:trailers"),
error: diagnosticsChannel.channel("undici:request:error"),
// WebSocket
open: diagnosticsChannel.channel("undici:websocket:open"),
close: diagnosticsChannel.channel("undici:websocket:close"),
socketError: diagnosticsChannel.channel("undici:websocket:socket_error"),
ping: diagnosticsChannel.channel("undici:websocket:ping"),
pong: diagnosticsChannel.channel("undici:websocket:pong")
};
if (undiciDebugLog.enabled || fetchDebuglog.enabled) {
const debuglog = fetchDebuglog.enabled ? fetchDebuglog : undiciDebugLog;
diagnosticsChannel.channel("undici:client:beforeConnect").subscribe((evt) => {
const {
connectParams: { version, protocol, port, host }
} = evt;
debuglog(
"connecting to %s using %s%s",
`${host}${port ? `:${port}` : ""}`,
protocol,
version
);
});
diagnosticsChannel.channel("undici:client:connected").subscribe((evt) => {
const {
connectParams: { version, protocol, port, host }
} = evt;
debuglog(
"connected to %s using %s%s",
`${host}${port ? `:${port}` : ""}`,
protocol,
version
);
});
diagnosticsChannel.channel("undici:client:connectError").subscribe((evt) => {
const {
connectParams: { version, protocol, port, host },
error
} = evt;
debuglog(
"connection to %s using %s%s errored - %s",
`${host}${port ? `:${port}` : ""}`,
protocol,
version,
error.message
);
});
diagnosticsChannel.channel("undici:client:sendHeaders").subscribe((evt) => {
const {
request: { method, path, origin: origin2 }
} = evt;
debuglog("sending request to %s %s/%s", method, origin2, path);
});
diagnosticsChannel.channel("undici:request:headers").subscribe((evt) => {
const {
request: { method, path, origin: origin2 },
response: { statusCode }
} = evt;
debuglog(
"received response to %s %s/%s - HTTP %d",
method,
origin2,
path,
statusCode
);
});
diagnosticsChannel.channel("undici:request:trailers").subscribe((evt) => {
const {
request: { method, path, origin: origin2 }
} = evt;
debuglog("trailers received from %s %s/%s", method, origin2, path);
});
diagnosticsChannel.channel("undici:request:error").subscribe((evt) => {
const {
request: { method, path, origin: origin2 },
error
} = evt;
debuglog(
"request to %s %s/%s errored - %s",
method,
origin2,
path,
error.message
);
});
isClientSet = true;
}
if (websocketDebuglog.enabled) {
if (!isClientSet) {
const debuglog = undiciDebugLog.enabled ? undiciDebugLog : websocketDebuglog;
diagnosticsChannel.channel("undici:client:beforeConnect").subscribe((evt) => {
const {
connectParams: { version, protocol, port, host }
} = evt;
debuglog(
"connecting to %s%s using %s%s",
host,
port ? `:${port}` : "",
protocol,
version
);
});
diagnosticsChannel.channel("undici:client:connected").subscribe((evt) => {
const {
connectParams: { version, protocol, port, host }
} = evt;
debuglog(
"connected to %s%s using %s%s",
host,
port ? `:${port}` : "",
protocol,
version
);
});
diagnosticsChannel.channel("undici:client:connectError").subscribe((evt) => {
const {
connectParams: { version, protocol, port, host },
error
} = evt;
debuglog(
"connection to %s%s using %s%s errored - %s",
host,
port ? `:${port}` : "",
protocol,
version,
error.message
);
});
diagnosticsChannel.channel("undici:client:sendHeaders").subscribe((evt) => {
const {
request: { method, path, origin: origin2 }
} = evt;
debuglog("sending request to %s %s/%s", method, origin2, path);
});
}
diagnosticsChannel.channel("undici:websocket:open").subscribe((evt) => {
const {
address: { address, port }
} = evt;
websocketDebuglog("connection opened %s%s", address, port ? `:${port}` : "");
});
diagnosticsChannel.channel("undici:websocket:close").subscribe((evt) => {
const { websocket, code, reason } = evt;
websocketDebuglog(
"closed connection to %s - %s %s",
websocket.url,
code,
reason
);
});
diagnosticsChannel.channel("undici:websocket:socket_error").subscribe((err2) => {
websocketDebuglog("connection errored - %s", err2.message);
});
diagnosticsChannel.channel("undici:websocket:ping").subscribe((evt) => {
websocketDebuglog("ping received");
});
diagnosticsChannel.channel("undici:websocket:pong").subscribe((evt) => {
websocketDebuglog("pong received");
});
}
module2.exports = {
channels
};
}
});
// node_modules/undici/lib/core/request.js
var require_request = __commonJS({
"node_modules/undici/lib/core/request.js"(exports2, module2) {
"use strict";
var {
InvalidArgumentError,
NotSupportedError
} = require_errors();
var assert = require("node:assert");
var {
isValidHTTPToken,
isValidHeaderValue,
isStream: isStream2,
destroy,
isBuffer: isBuffer2,
isFormDataLike,
isIterable,
isBlobLike,
buildURL: buildURL2,
validateHandler,
getServerName,
normalizedMethodRecords
} = require_util2();
var { channels } = require_diagnostics();
var { headerNameLowerCasedRecord } = require_constants();
var invalidPathRegex = /[^\u0021-\u00ff]/;
var kHandler = Symbol("handler");
var Request2 = class {
constructor(origin2, {
path,
method,
body,
headers,
query,
idempotent,
blocking,
upgrade,
headersTimeout,
bodyTimeout,
reset,
throwOnError,
expectContinue,
servername
}, handler) {
if (typeof path !== "string") {
throw new InvalidArgumentError("path must be a string");
} else if (path[0] !== "/" && !(path.startsWith("http://") || path.startsWith("https://")) && method !== "CONNECT") {
throw new InvalidArgumentError("path must be an absolute URL or start with a slash");
} else if (invalidPathRegex.test(path)) {
throw new InvalidArgumentError("invalid request path");
}
if (typeof method !== "string") {
throw new InvalidArgumentError("method must be a string");
} else if (normalizedMethodRecords[method] === void 0 && !isValidHTTPToken(method)) {
throw new InvalidArgumentError("invalid request method");
}
if (upgrade && typeof upgrade !== "string") {
throw new InvalidArgumentError("upgrade must be a string");
}
if (headersTimeout != null && (!Number.isFinite(headersTimeout) || headersTimeout < 0)) {
throw new InvalidArgumentError("invalid headersTimeout");
}
if (bodyTimeout != null && (!Number.isFinite(bodyTimeout) || bodyTimeout < 0)) {
throw new InvalidArgumentError("invalid bodyTimeout");
}
if (reset != null && typeof reset !== "boolean") {
throw new InvalidArgumentError("invalid reset");
}
if (expectContinue != null && typeof expectContinue !== "boolean") {
throw new InvalidArgumentError("invalid expectContinue");
}
this.headersTimeout = headersTimeout;
this.bodyTimeout = bodyTimeout;
this.throwOnError = throwOnError === true;
this.method = method;
this.abort = null;
if (body == null) {
this.body = null;
} else if (isStream2(body)) {
this.body = body;
const rState = this.body._readableState;
if (!rState || !rState.autoDestroy) {
this.endHandler = function autoDestroy() {
destroy(this);
};
this.body.on("end", this.endHandler);
}
this.errorHandler = (err2) => {
if (this.abort) {
this.abort(err2);
} else {
this.error = err2;
}
};
this.body.on("error", this.errorHandler);
} else if (isBuffer2(body)) {
this.body = body.byteLength ? body : null;
} else if (ArrayBuffer.isView(body)) {
this.body = body.buffer.byteLength ? Buffer.from(body.buffer, body.byteOffset, body.byteLength) : null;
} else if (body instanceof ArrayBuffer) {
this.body = body.byteLength ? Buffer.from(body) : null;
} else if (typeof body === "string") {
this.body = body.length ? Buffer.from(body) : null;
} else if (isFormDataLike(body) || isIterable(body) || isBlobLike(body)) {
this.body = body;
} else {
throw new InvalidArgumentError("body must be a string, a Buffer, a Readable stream, an iterable, or an async iterable");
}
this.completed = false;
this.aborted = false;
this.upgrade = upgrade || null;
this.path = query ? buildURL2(path, query) : path;
this.origin = origin2;
this.idempotent = idempotent == null ? method === "HEAD" || method === "GET" : idempotent;
this.blocking = blocking == null ? false : blocking;
this.reset = reset == null ? null : reset;
this.host = null;
this.contentLength = null;
this.contentType = null;
this.headers = [];
this.expectContinue = expectContinue != null ? expectContinue : false;
if (Array.isArray(headers)) {
if (headers.length % 2 !== 0) {
throw new InvalidArgumentError("headers array must be even");
}
for (let i = 0; i < headers.length; i += 2) {
processHeader(this, headers[i], headers[i + 1]);
}
} else if (headers && typeof headers === "object") {
if (headers[Symbol.iterator]) {
for (const header of headers) {
if (!Array.isArray(header) || header.length !== 2) {
throw new InvalidArgumentError("headers must be in key-value pair format");
}
processHeader(this, header[0], header[1]);
}
} else {
const keys = Object.keys(headers);
for (let i = 0; i < keys.length; ++i) {
processHeader(this, keys[i], headers[keys[i]]);
}
}
} else if (headers != null) {
throw new InvalidArgumentError("headers must be an object or an array");
}
validateHandler(handler, method, upgrade);
this.servername = servername || getServerName(this.host);
this[kHandler] = handler;
if (channels.create.hasSubscribers) {
channels.create.publish({ request: this });
}
}
onBodySent(chunk) {
if (this[kHandler].onBodySent) {
try {
return this[kHandler].onBodySent(chunk);
} catch (err2) {
this.abort(err2);
}
}
}
onRequestSent() {
if (channels.bodySent.hasSubscribers) {
channels.bodySent.publish({ request: this });
}
if (this[kHandler].onRequestSent) {
try {
return this[kHandler].onRequestSent();
} catch (err2) {
this.abort(err2);
}
}
}
onConnect(abort) {
assert(!this.aborted);
assert(!this.completed);
if (this.error) {
abort(this.error);
} else {
this.abort = abort;
return this[kHandler].onConnect(abort);
}
}
onResponseStarted() {
return this[kHandler].onResponseStarted?.();
}
onHeaders(statusCode, headers, resume, statusText) {
assert(!this.aborted);
assert(!this.completed);
if (channels.headers.hasSubscribers) {
channels.headers.publish({ request: this, response: { statusCode, headers, statusText } });
}
try {
return this[kHandler].onHeaders(statusCode, headers, resume, statusText);
} catch (err2) {
this.abort(err2);
}
}
onData(chunk) {
assert(!this.aborted);
assert(!this.completed);
try {
return this[kHandler].onData(chunk);
} catch (err2) {
this.abort(err2);
return false;
}
}
onUpgrade(statusCode, headers, socket) {
assert(!this.aborted);
assert(!this.completed);
return this[kHandler].onUpgrade(statusCode, headers, socket);
}
onComplete(trailers) {
this.onFinally();
assert(!this.aborted);
this.completed = true;
if (channels.trailers.hasSubscribers) {
channels.trailers.publish({ request: this, trailers });
}
try {
return this[kHandler].onComplete(trailers);
} catch (err2) {
this.onError(err2);
}
}
onError(error) {
this.onFinally();
if (channels.error.hasSubscribers) {
channels.error.publish({ request: this, error });
}
if (this.aborted) {
return;
}
this.aborted = true;
return this[kHandler].onError(error);
}
onFinally() {
if (this.errorHandler) {
this.body.off("error", this.errorHandler);
this.errorHandler = null;
}
if (this.endHandler) {
this.body.off("end", this.endHandler);
this.endHandler = null;
}
}
addHeader(key, value) {
processHeader(this, key, value);
return this;
}
};
function processHeader(request, key, val2) {
if (val2 && (typeof val2 === "object" && !Array.isArray(val2))) {
throw new InvalidArgumentError(`invalid ${key} header`);
} else if (val2 === void 0) {
return;
}
let headerName = headerNameLowerCasedRecord[key];
if (headerName === void 0) {
headerName = key.toLowerCase();
if (headerNameLowerCasedRecord[headerName] === void 0 && !isValidHTTPToken(headerName)) {
throw new InvalidArgumentError("invalid header key");
}
}
if (Array.isArray(val2)) {
const arr = [];
for (let i = 0; i < val2.length; i++) {
if (typeof val2[i] === "string") {
if (!isValidHeaderValue(val2[i])) {
throw new InvalidArgumentError(`invalid ${key} header`);
}
arr.push(val2[i]);
} else if (val2[i] === null) {
arr.push("");
} else if (typeof val2[i] === "object") {
throw new InvalidArgumentError(`invalid ${key} header`);
} else {
arr.push(`${val2[i]}`);
}
}
val2 = arr;
} else if (typeof val2 === "string") {
if (!isValidHeaderValue(val2)) {
throw new InvalidArgumentError(`invalid ${key} header`);
}
} else if (val2 === null) {
val2 = "";
} else {
val2 = `${val2}`;
}
if (request.host === null && headerName === "host") {
if (typeof val2 !== "string") {
throw new InvalidArgumentError("invalid host header");
}
request.host = val2;
} else if (request.contentLength === null && headerName === "content-length") {
request.contentLength = parseInt(val2, 10);
if (!Number.isFinite(request.contentLength)) {
throw new InvalidArgumentError("invalid content-length header");
}
} else if (request.contentType === null && headerName === "content-type") {
request.contentType = val2;
request.headers.push(key, val2);
} else if (headerName === "transfer-encoding" || headerName === "keep-alive" || headerName === "upgrade") {
throw new InvalidArgumentError(`invalid ${headerName} header`);
} else if (headerName === "connection") {
const value = typeof val2 === "string" ? val2.toLowerCase() : null;
if (value !== "close" && value !== "keep-alive") {
throw new InvalidArgumentError("invalid connection header");
}
if (value === "close") {
request.reset = true;
}
} else if (headerName === "expect") {
throw new NotSupportedError("expect header not supported");
} else {
request.headers.push(key, val2);
}
}
module2.exports = Request2;
}
});
// node_modules/undici/lib/dispatcher/dispatcher.js
var require_dispatcher = __commonJS({
"node_modules/undici/lib/dispatcher/dispatcher.js"(exports2, module2) {
"use strict";
var EventEmitter2 = require("node:events");
var Dispatcher = class extends EventEmitter2 {
dispatch() {
throw new Error("not implemented");
}
close() {
throw new Error("not implemented");
}
destroy() {
throw new Error("not implemented");
}
compose(...args) {
const interceptors = Array.isArray(args[0]) ? args[0] : args;
let dispatch = this.dispatch.bind(this);
for (const interceptor of interceptors) {
if (interceptor == null) {
continue;
}
if (typeof interceptor !== "function") {
throw new TypeError(`invalid interceptor, expected function received ${typeof interceptor}`);
}
dispatch = interceptor(dispatch);
if (dispatch == null || typeof dispatch !== "function" || dispatch.length !== 2) {
throw new TypeError("invalid interceptor");
}
}
return new ComposedDispatcher(this, dispatch);
}
};
var ComposedDispatcher = class extends Dispatcher {
#dispatcher = null;
#dispatch = null;
constructor(dispatcher, dispatch) {
super();
this.#dispatcher = dispatcher;
this.#dispatch = dispatch;
}
dispatch(...args) {
this.#dispatch(...args);
}
close(...args) {
return this.#dispatcher.close(...args);
}
destroy(...args) {
return this.#dispatcher.destroy(...args);
}
};
module2.exports = Dispatcher;
}
});
// node_modules/undici/lib/dispatcher/dispatcher-base.js
var require_dispatcher_base = __commonJS({
"node_modules/undici/lib/dispatcher/dispatcher-base.js"(exports2, module2) {
"use strict";
var Dispatcher = require_dispatcher();
var {
ClientDestroyedError,
ClientClosedError,
InvalidArgumentError
} = require_errors();
var { kDestroy, kClose, kClosed, kDestroyed, kDispatch, kInterceptors } = require_symbols();
var kOnDestroyed = Symbol("onDestroyed");
var kOnClosed = Symbol("onClosed");
var kInterceptedDispatch = Symbol("Intercepted Dispatch");
var DispatcherBase = class extends Dispatcher {
constructor() {
super();
this[kDestroyed] = false;
this[kOnDestroyed] = null;
this[kClosed] = false;
this[kOnClosed] = [];
}
get destroyed() {
return this[kDestroyed];
}
get closed() {
return this[kClosed];
}
get interceptors() {
return this[kInterceptors];
}
set interceptors(newInterceptors) {
if (newInterceptors) {
for (let i = newInterceptors.length - 1; i >= 0; i--) {
const interceptor = this[kInterceptors][i];
if (typeof interceptor !== "function") {
throw new InvalidArgumentError("interceptor must be an function");
}
}
}
this[kInterceptors] = newInterceptors;
}
close(callback) {
if (callback === void 0) {
return new Promise((resolve, reject) => {
this.close((err2, data2) => {
return err2 ? reject(err2) : resolve(data2);
});
});
}
if (typeof callback !== "function") {
throw new InvalidArgumentError("invalid callback");
}
if (this[kDestroyed]) {
queueMicrotask(() => callback(new ClientDestroyedError(), null));
return;
}
if (this[kClosed]) {
if (this[kOnClosed]) {
this[kOnClosed].push(callback);
} else {
queueMicrotask(() => callback(null, null));
}
return;
}
this[kClosed] = true;
this[kOnClosed].push(callback);
const onClosed = () => {
const callbacks = this[kOnClosed];
this[kOnClosed] = null;
for (let i = 0; i < callbacks.length; i++) {
callbacks[i](null, null);
}
};
this[kClose]().then(() => this.destroy()).then(() => {
queueMicrotask(onClosed);
});
}
destroy(err2, callback) {
if (typeof err2 === "function") {
callback = err2;
err2 = null;
}
if (callback === void 0) {
return new Promise((resolve, reject) => {
this.destroy(err2, (err3, data2) => {
return err3 ? (
/* istanbul ignore next: should never error */
reject(err3)
) : resolve(data2);
});
});
}
if (typeof callback !== "function") {
throw new InvalidArgumentError("invalid callback");
}
if (this[kDestroyed]) {
if (this[kOnDestroyed]) {
this[kOnDestroyed].push(callback);
} else {
queueMicrotask(() => callback(null, null));
}
return;
}
if (!err2) {
err2 = new ClientDestroyedError();
}
this[kDestroyed] = true;
this[kOnDestroyed] = this[kOnDestroyed] || [];
this[kOnDestroyed].push(callback);
const onDestroyed = () => {
const callbacks = this[kOnDestroyed];
this[kOnDestroyed] = null;
for (let i = 0; i < callbacks.length; i++) {
callbacks[i](null, null);
}
};
this[kDestroy](err2).then(() => {
queueMicrotask(onDestroyed);
});
}
[kInterceptedDispatch](opts, handler) {
if (!this[kInterceptors] || this[kInterceptors].length === 0) {
this[kInterceptedDispatch] = this[kDispatch];
return this[kDispatch](opts, handler);
}
let dispatch = this[kDispatch].bind(this);
for (let i = this[kInterceptors].length - 1; i >= 0; i--) {
dispatch = this[kInterceptors][i](dispatch);
}
this[kInterceptedDispatch] = dispatch;
return dispatch(opts, handler);
}
dispatch(opts, handler) {
if (!handler || typeof handler !== "object") {
throw new InvalidArgumentError("handler must be an object");
}
try {
if (!opts || typeof opts !== "object") {
throw new InvalidArgumentError("opts must be an object.");
}
if (this[kDestroyed] || this[kOnDestroyed]) {
throw new ClientDestroyedError();
}
if (this[kClosed]) {
throw new ClientClosedError();
}
return this[kInterceptedDispatch](opts, handler);
} catch (err2) {
if (typeof handler.onError !== "function") {
throw new InvalidArgumentError("invalid onError method");
}
handler.onError(err2);
return false;
}
}
};
module2.exports = DispatcherBase;
}
});
// node_modules/undici/lib/util/timers.js
var require_timers = __commonJS({
"node_modules/undici/lib/util/timers.js"(exports2, module2) {
"use strict";
var fastNow = 0;
var RESOLUTION_MS = 1e3;
var TICK_MS = (RESOLUTION_MS >> 1) - 1;
var fastNowTimeout;
var kFastTimer = Symbol("kFastTimer");
var fastTimers = [];
var NOT_IN_LIST = -2;
var TO_BE_CLEARED = -1;
var PENDING = 0;
var ACTIVE = 1;
function onTick() {
fastNow += TICK_MS;
let idx = 0;
let len = fastTimers.length;
while (idx < len) {
const timer = fastTimers[idx];
if (timer._state === PENDING) {
timer._idleStart = fastNow - TICK_MS;
timer._state = ACTIVE;
} else if (timer._state === ACTIVE && fastNow >= timer._idleStart + timer._idleTimeout) {
timer._state = TO_BE_CLEARED;
timer._idleStart = -1;
timer._onTimeout(timer._timerArg);
}
if (timer._state === TO_BE_CLEARED) {
timer._state = NOT_IN_LIST;
if (--len !== 0) {
fastTimers[idx] = fastTimers[len];
}
} else {
++idx;
}
}
fastTimers.length = len;
if (fastTimers.length !== 0) {
refreshTimeout();
}
}
function refreshTimeout() {
if (fastNowTimeout) {
fastNowTimeout.refresh();
} else {
clearTimeout(fastNowTimeout);
fastNowTimeout = setTimeout(onTick, TICK_MS);
if (fastNowTimeout.unref) {
fastNowTimeout.unref();
}
}
}
var FastTimer = class {
[kFastTimer] = true;
/**
* The state of the timer, which can be one of the following:
* - NOT_IN_LIST (-2)
* - TO_BE_CLEARED (-1)
* - PENDING (0)
* - ACTIVE (1)
*
* @type {-2|-1|0|1}
* @private
*/
_state = NOT_IN_LIST;
/**
* The number of milliseconds to wait before calling the callback.
*
* @type {number}
* @private
*/
_idleTimeout = -1;
/**
* The time in milliseconds when the timer was started. This value is used to
* calculate when the timer should expire.
*
* @type {number}
* @default -1
* @private
*/
_idleStart = -1;
/**
* The function to be executed when the timer expires.
* @type {Function}
* @private
*/
_onTimeout;
/**
* The argument to be passed to the callback when the timer expires.
*
* @type {*}
* @private
*/
_timerArg;
/**
* @constructor
* @param {Function} callback A function to be executed after the timer
* expires.
* @param {number} delay The time, in milliseconds that the timer should wait
* before the specified function or code is executed.
* @param {*} arg
*/
constructor(callback, delay, arg) {
this._onTimeout = callback;
this._idleTimeout = delay;
this._timerArg = arg;
this.refresh();
}
/**
* Sets the timer's start time to the current time, and reschedules the timer
* to call its callback at the previously specified duration adjusted to the
* current time.
* Using this on a timer that has already called its callback will reactivate
* the timer.
*
* @returns {void}
*/
refresh() {
if (this._state === NOT_IN_LIST) {
fastTimers.push(this);
}
if (!fastNowTimeout || fastTimers.length === 1) {
refreshTimeout();
}
this._state = PENDING;
}
/**
* The `clear` method cancels the timer, preventing it from executing.
*
* @returns {void}
* @private
*/
clear() {
this._state = TO_BE_CLEARED;
this._idleStart = -1;
}
};
module2.exports = {
/**
* The setTimeout() method sets a timer which executes a function once the
* timer expires.
* @param {Function} callback A function to be executed after the timer
* expires.
* @param {number} delay The time, in milliseconds that the timer should
* wait before the specified function or code is executed.
* @param {*} [arg] An optional argument to be passed to the callback function
* when the timer expires.
* @returns {NodeJS.Timeout|FastTimer}
*/
setTimeout(callback, delay, arg) {
return delay <= RESOLUTION_MS ? setTimeout(callback, delay, arg) : new FastTimer(callback, delay, arg);
},
/**
* The clearTimeout method cancels an instantiated Timer previously created
* by calling setTimeout.
*
* @param {NodeJS.Timeout|FastTimer} timeout
*/
clearTimeout(timeout) {
if (timeout[kFastTimer]) {
timeout.clear();
} else {
clearTimeout(timeout);
}
},
/**
* The setFastTimeout() method sets a fastTimer which executes a function once
* the timer expires.
* @param {Function} callback A function to be executed after the timer
* expires.
* @param {number} delay The time, in milliseconds that the timer should
* wait before the specified function or code is executed.
* @param {*} [arg] An optional argument to be passed to the callback function
* when the timer expires.
* @returns {FastTimer}
*/
setFastTimeout(callback, delay, arg) {
return new FastTimer(callback, delay, arg);
},
/**
* The clearTimeout method cancels an instantiated FastTimer previously
* created by calling setFastTimeout.
*
* @param {FastTimer} timeout
*/
clearFastTimeout(timeout) {
timeout.clear();
},
/**
* The now method returns the value of the internal fast timer clock.
*
* @returns {number}
*/
now() {
return fastNow;
},
/**
* Trigger the onTick function to process the fastTimers array.
* Exported for testing purposes only.
* Marking as deprecated to discourage any use outside of testing.
* @deprecated
* @param {number} [delay=0] The delay in milliseconds to add to the now value.
*/
tick(delay = 0) {
fastNow += delay - RESOLUTION_MS + 1;
onTick();
onTick();
},
/**
* Reset FastTimers.
* Exported for testing purposes only.
* Marking as deprecated to discourage any use outside of testing.
* @deprecated
*/
reset() {
fastNow = 0;
fastTimers.length = 0;
clearTimeout(fastNowTimeout);
fastNowTimeout = null;
},
/**
* Exporting for testing purposes only.
* Marking as deprecated to discourage any use outside of testing.
* @deprecated
*/
kFastTimer
};
}
});
// node_modules/undici/lib/core/connect.js
var require_connect = __commonJS({
"node_modules/undici/lib/core/connect.js"(exports2, module2) {
"use strict";
var net = require("node:net");
var assert = require("node:assert");
var util5 = require_util2();
var { InvalidArgumentError, ConnectTimeoutError } = require_errors();
var timers = require_timers();
function noop2() {
}
var tls;
var SessionCache;
if (global.FinalizationRegistry && !(process.env.NODE_V8_COVERAGE || process.env.UNDICI_NO_FG)) {
SessionCache = class WeakSessionCache {
constructor(maxCachedSessions) {
this._maxCachedSessions = maxCachedSessions;
this._sessionCache = /* @__PURE__ */ new Map();
this._sessionRegistry = new global.FinalizationRegistry((key) => {
if (this._sessionCache.size < this._maxCachedSessions) {
return;
}
const ref = this._sessionCache.get(key);
if (ref !== void 0 && ref.deref() === void 0) {
this._sessionCache.delete(key);
}
});
}
get(sessionKey) {
const ref = this._sessionCache.get(sessionKey);
return ref ? ref.deref() : null;
}
set(sessionKey, session) {
if (this._maxCachedSessions === 0) {
return;
}
this._sessionCache.set(sessionKey, new WeakRef(session));
this._sessionRegistry.register(session, sessionKey);
}
};
} else {
SessionCache = class SimpleSessionCache {
constructor(maxCachedSessions) {
this._maxCachedSessions = maxCachedSessions;
this._sessionCache = /* @__PURE__ */ new Map();
}
get(sessionKey) {
return this._sessionCache.get(sessionKey);
}
set(sessionKey, session) {
if (this._maxCachedSessions === 0) {
return;
}
if (this._sessionCache.size >= this._maxCachedSessions) {
const { value: oldestKey } = this._sessionCache.keys().next();
this._sessionCache.delete(oldestKey);
}
this._sessionCache.set(sessionKey, session);
}
};
}
function buildConnector({ allowH2, maxCachedSessions, socketPath, timeout, session: customSession, ...opts }) {
if (maxCachedSessions != null && (!Number.isInteger(maxCachedSessions) || maxCachedSessions < 0)) {
throw new InvalidArgumentError("maxCachedSessions must be a positive integer or zero");
}
const options = { path: socketPath, ...opts };
const sessionCache = new SessionCache(maxCachedSessions == null ? 100 : maxCachedSessions);
timeout = timeout == null ? 1e4 : timeout;
allowH2 = allowH2 != null ? allowH2 : false;
return function connect({ hostname, host, protocol, port, servername, localAddress, httpSocket }, callback) {
let socket;
if (protocol === "https:") {
if (!tls) {
tls = require("node:tls");
}
servername = servername || options.servername || util5.getServerName(host) || null;
const sessionKey = servername || hostname;
assert(sessionKey);
const session = customSession || sessionCache.get(sessionKey) || null;
port = port || 443;
socket = tls.connect({
highWaterMark: 16384,
// TLS in node can't have bigger HWM anyway...
...options,
servername,
session,
localAddress,
// TODO(HTTP/2): Add support for h2c
ALPNProtocols: allowH2 ? ["http/1.1", "h2"] : ["http/1.1"],
socket: httpSocket,
// upgrade socket connection
port,
host: hostname
});
socket.on("session", function(session2) {
sessionCache.set(sessionKey, session2);
});
} else {
assert(!httpSocket, "httpSocket can only be sent on TLS update");
port = port || 80;
socket = net.connect({
highWaterMark: 64 * 1024,
// Same as nodejs fs streams.
...options,
localAddress,
port,
host: hostname
});
}
if (options.keepAlive == null || options.keepAlive) {
const keepAliveInitialDelay = options.keepAliveInitialDelay === void 0 ? 6e4 : options.keepAliveInitialDelay;
socket.setKeepAlive(true, keepAliveInitialDelay);
}
const clearConnectTimeout = setupConnectTimeout(new WeakRef(socket), { timeout, hostname, port });
socket.setNoDelay(true).once(protocol === "https:" ? "secureConnect" : "connect", function() {
queueMicrotask(clearConnectTimeout);
if (callback) {
const cb = callback;
callback = null;
cb(null, this);
}
}).on("error", function(err2) {
queueMicrotask(clearConnectTimeout);
if (callback) {
const cb = callback;
callback = null;
cb(err2);
}
});
return socket;
};
}
var setupConnectTimeout = process.platform === "win32" ? (socketWeakRef, opts) => {
if (!opts.timeout) {
return noop2;
}
let s1 = null;
let s2 = null;
const fastTimer = timers.setFastTimeout(() => {
s1 = setImmediate(() => {
s2 = setImmediate(() => onConnectTimeout(socketWeakRef.deref(), opts));
});
}, opts.timeout);
return () => {
timers.clearFastTimeout(fastTimer);
clearImmediate(s1);
clearImmediate(s2);
};
} : (socketWeakRef, opts) => {
if (!opts.timeout) {
return noop2;
}
let s1 = null;
const fastTimer = timers.setFastTimeout(() => {
s1 = setImmediate(() => {
onConnectTimeout(socketWeakRef.deref(), opts);
});
}, opts.timeout);
return () => {
timers.clearFastTimeout(fastTimer);
clearImmediate(s1);
};
};
function onConnectTimeout(socket, opts) {
if (socket == null) {
return;
}
let message = "Connect Timeout Error";
if (Array.isArray(socket.autoSelectFamilyAttemptedAddresses)) {
message += ` (attempted addresses: ${socket.autoSelectFamilyAttemptedAddresses.join(", ")},`;
} else {
message += ` (attempted address: ${opts.hostname}:${opts.port},`;
}
message += ` timeout: ${opts.timeout}ms)`;
util5.destroy(socket, new ConnectTimeoutError(message));
}
module2.exports = buildConnector;
}
});
// node_modules/undici/lib/llhttp/utils.js
var require_utils = __commonJS({
"node_modules/undici/lib/llhttp/utils.js"(exports2) {
"use strict";
Object.defineProperty(exports2, "__esModule", { value: true });
exports2.enumToMap = void 0;
function enumToMap(obj) {
const res = {};
Object.keys(obj).forEach((key) => {
const value = obj[key];
if (typeof value === "number") {
res[key] = value;
}
});
return res;
}
exports2.enumToMap = enumToMap;
}
});
// node_modules/undici/lib/llhttp/constants.js
var require_constants2 = __commonJS({
"node_modules/undici/lib/llhttp/constants.js"(exports2) {
"use strict";
Object.defineProperty(exports2, "__esModule", { value: true });
exports2.SPECIAL_HEADERS = exports2.HEADER_STATE = exports2.MINOR = exports2.MAJOR = exports2.CONNECTION_TOKEN_CHARS = exports2.HEADER_CHARS = exports2.TOKEN = exports2.STRICT_TOKEN = exports2.HEX = exports2.URL_CHAR = exports2.STRICT_URL_CHAR = exports2.USERINFO_CHARS = exports2.MARK = exports2.ALPHANUM = exports2.NUM = exports2.HEX_MAP = exports2.NUM_MAP = exports2.ALPHA = exports2.FINISH = exports2.H_METHOD_MAP = exports2.METHOD_MAP = exports2.METHODS_RTSP = exports2.METHODS_ICE = exports2.METHODS_HTTP = exports2.METHODS = exports2.LENIENT_FLAGS = exports2.FLAGS = exports2.TYPE = exports2.ERROR = void 0;
var utils_1 = require_utils();
var ERROR;
(function(ERROR2) {
ERROR2[ERROR2["OK"] = 0] = "OK";
ERROR2[ERROR2["INTERNAL"] = 1] = "INTERNAL";
ERROR2[ERROR2["STRICT"] = 2] = "STRICT";
ERROR2[ERROR2["LF_EXPECTED"] = 3] = "LF_EXPECTED";
ERROR2[ERROR2["UNEXPECTED_CONTENT_LENGTH"] = 4] = "UNEXPECTED_CONTENT_LENGTH";
ERROR2[ERROR2["CLOSED_CONNECTION"] = 5] = "CLOSED_CONNECTION";
ERROR2[ERROR2["INVALID_METHOD"] = 6] = "INVALID_METHOD";
ERROR2[ERROR2["INVALID_URL"] = 7] = "INVALID_URL";
ERROR2[ERROR2["INVALID_CONSTANT"] = 8] = "INVALID_CONSTANT";
ERROR2[ERROR2["INVALID_VERSION"] = 9] = "INVALID_VERSION";
ERROR2[ERROR2["INVALID_HEADER_TOKEN"] = 10] = "INVALID_HEADER_TOKEN";
ERROR2[ERROR2["INVALID_CONTENT_LENGTH"] = 11] = "INVALID_CONTENT_LENGTH";
ERROR2[ERROR2["INVALID_CHUNK_SIZE"] = 12] = "INVALID_CHUNK_SIZE";
ERROR2[ERROR2["INVALID_STATUS"] = 13] = "INVALID_STATUS";
ERROR2[ERROR2["INVALID_EOF_STATE"] = 14] = "INVALID_EOF_STATE";
ERROR2[ERROR2["INVALID_TRANSFER_ENCODING"] = 15] = "INVALID_TRANSFER_ENCODING";
ERROR2[ERROR2["CB_MESSAGE_BEGIN"] = 16] = "CB_MESSAGE_BEGIN";
ERROR2[ERROR2["CB_HEADERS_COMPLETE"] = 17] = "CB_HEADERS_COMPLETE";
ERROR2[ERROR2["CB_MESSAGE_COMPLETE"] = 18] = "CB_MESSAGE_COMPLETE";
ERROR2[ERROR2["CB_CHUNK_HEADER"] = 19] = "CB_CHUNK_HEADER";
ERROR2[ERROR2["CB_CHUNK_COMPLETE"] = 20] = "CB_CHUNK_COMPLETE";
ERROR2[ERROR2["PAUSED"] = 21] = "PAUSED";
ERROR2[ERROR2["PAUSED_UPGRADE"] = 22] = "PAUSED_UPGRADE";
ERROR2[ERROR2["PAUSED_H2_UPGRADE"] = 23] = "PAUSED_H2_UPGRADE";
ERROR2[ERROR2["USER"] = 24] = "USER";
})(ERROR = exports2.ERROR || (exports2.ERROR = {}));
var TYPE;
(function(TYPE2) {
TYPE2[TYPE2["BOTH"] = 0] = "BOTH";
TYPE2[TYPE2["REQUEST"] = 1] = "REQUEST";
TYPE2[TYPE2["RESPONSE"] = 2] = "RESPONSE";
})(TYPE = exports2.TYPE || (exports2.TYPE = {}));
var FLAGS;
(function(FLAGS2) {
FLAGS2[FLAGS2["CONNECTION_KEEP_ALIVE"] = 1] = "CONNECTION_KEEP_ALIVE";
FLAGS2[FLAGS2["CONNECTION_CLOSE"] = 2] = "CONNECTION_CLOSE";
FLAGS2[FLAGS2["CONNECTION_UPGRADE"] = 4] = "CONNECTION_UPGRADE";
FLAGS2[FLAGS2["CHUNKED"] = 8] = "CHUNKED";
FLAGS2[FLAGS2["UPGRADE"] = 16] = "UPGRADE";
FLAGS2[FLAGS2["CONTENT_LENGTH"] = 32] = "CONTENT_LENGTH";
FLAGS2[FLAGS2["SKIPBODY"] = 64] = "SKIPBODY";
FLAGS2[FLAGS2["TRAILING"] = 128] = "TRAILING";
FLAGS2[FLAGS2["TRANSFER_ENCODING"] = 512] = "TRANSFER_ENCODING";
})(FLAGS = exports2.FLAGS || (exports2.FLAGS = {}));
var LENIENT_FLAGS;
(function(LENIENT_FLAGS2) {
LENIENT_FLAGS2[LENIENT_FLAGS2["HEADERS"] = 1] = "HEADERS";
LENIENT_FLAGS2[LENIENT_FLAGS2["CHUNKED_LENGTH"] = 2] = "CHUNKED_LENGTH";
LENIENT_FLAGS2[LENIENT_FLAGS2["KEEP_ALIVE"] = 4] = "KEEP_ALIVE";
})(LENIENT_FLAGS = exports2.LENIENT_FLAGS || (exports2.LENIENT_FLAGS = {}));
var METHODS;
(function(METHODS2) {
METHODS2[METHODS2["DELETE"] = 0] = "DELETE";
METHODS2[METHODS2["GET"] = 1] = "GET";
METHODS2[METHODS2["HEAD"] = 2] = "HEAD";
METHODS2[METHODS2["POST"] = 3] = "POST";
METHODS2[METHODS2["PUT"] = 4] = "PUT";
METHODS2[METHODS2["CONNECT"] = 5] = "CONNECT";
METHODS2[METHODS2["OPTIONS"] = 6] = "OPTIONS";
METHODS2[METHODS2["TRACE"] = 7] = "TRACE";
METHODS2[METHODS2["COPY"] = 8] = "COPY";
METHODS2[METHODS2["LOCK"] = 9] = "LOCK";
METHODS2[METHODS2["MKCOL"] = 10] = "MKCOL";
METHODS2[METHODS2["MOVE"] = 11] = "MOVE";
METHODS2[METHODS2["PROPFIND"] = 12] = "PROPFIND";
METHODS2[METHODS2["PROPPATCH"] = 13] = "PROPPATCH";
METHODS2[METHODS2["SEARCH"] = 14] = "SEARCH";
METHODS2[METHODS2["UNLOCK"] = 15] = "UNLOCK";
METHODS2[METHODS2["BIND"] = 16] = "BIND";
METHODS2[METHODS2["REBIND"] = 17] = "REBIND";
METHODS2[METHODS2["UNBIND"] = 18] = "UNBIND";
METHODS2[METHODS2["ACL"] = 19] = "ACL";
METHODS2[METHODS2["REPORT"] = 20] = "REPORT";
METHODS2[METHODS2["MKACTIVITY"] = 21] = "MKACTIVITY";
METHODS2[METHODS2["CHECKOUT"] = 22] = "CHECKOUT";
METHODS2[METHODS2["MERGE"] = 23] = "MERGE";
METHODS2[METHODS2["M-SEARCH"] = 24] = "M-SEARCH";
METHODS2[METHODS2["NOTIFY"] = 25] = "NOTIFY";
METHODS2[METHODS2["SUBSCRIBE"] = 26] = "SUBSCRIBE";
METHODS2[METHODS2["UNSUBSCRIBE"] = 27] = "UNSUBSCRIBE";
METHODS2[METHODS2["PATCH"] = 28] = "PATCH";
METHODS2[METHODS2["PURGE"] = 29] = "PURGE";
METHODS2[METHODS2["MKCALENDAR"] = 30] = "MKCALENDAR";
METHODS2[METHODS2["LINK"] = 31] = "LINK";
METHODS2[METHODS2["UNLINK"] = 32] = "UNLINK";
METHODS2[METHODS2["SOURCE"] = 33] = "SOURCE";
METHODS2[METHODS2["PRI"] = 34] = "PRI";
METHODS2[METHODS2["DESCRIBE"] = 35] = "DESCRIBE";
METHODS2[METHODS2["ANNOUNCE"] = 36] = "ANNOUNCE";
METHODS2[METHODS2["SETUP"] = 37] = "SETUP";
METHODS2[METHODS2["PLAY"] = 38] = "PLAY";
METHODS2[METHODS2["PAUSE"] = 39] = "PAUSE";
METHODS2[METHODS2["TEARDOWN"] = 40] = "TEARDOWN";
METHODS2[METHODS2["GET_PARAMETER"] = 41] = "GET_PARAMETER";
METHODS2[METHODS2["SET_PARAMETER"] = 42] = "SET_PARAMETER";
METHODS2[METHODS2["REDIRECT"] = 43] = "REDIRECT";
METHODS2[METHODS2["RECORD"] = 44] = "RECORD";
METHODS2[METHODS2["FLUSH"] = 45] = "FLUSH";
})(METHODS = exports2.METHODS || (exports2.METHODS = {}));
exports2.METHODS_HTTP = [
METHODS.DELETE,
METHODS.GET,
METHODS.HEAD,
METHODS.POST,
METHODS.PUT,
METHODS.CONNECT,
METHODS.OPTIONS,
METHODS.TRACE,
METHODS.COPY,
METHODS.LOCK,
METHODS.MKCOL,
METHODS.MOVE,
METHODS.PROPFIND,
METHODS.PROPPATCH,
METHODS.SEARCH,
METHODS.UNLOCK,
METHODS.BIND,
METHODS.REBIND,
METHODS.UNBIND,
METHODS.ACL,
METHODS.REPORT,
METHODS.MKACTIVITY,
METHODS.CHECKOUT,
METHODS.MERGE,
METHODS["M-SEARCH"],
METHODS.NOTIFY,
METHODS.SUBSCRIBE,
METHODS.UNSUBSCRIBE,
METHODS.PATCH,
METHODS.PURGE,
METHODS.MKCALENDAR,
METHODS.LINK,
METHODS.UNLINK,
METHODS.PRI,
// TODO(indutny): should we allow it with HTTP?
METHODS.SOURCE
];
exports2.METHODS_ICE = [
METHODS.SOURCE
];
exports2.METHODS_RTSP = [
METHODS.OPTIONS,
METHODS.DESCRIBE,
METHODS.ANNOUNCE,
METHODS.SETUP,
METHODS.PLAY,
METHODS.PAUSE,
METHODS.TEARDOWN,
METHODS.GET_PARAMETER,
METHODS.SET_PARAMETER,
METHODS.REDIRECT,
METHODS.RECORD,
METHODS.FLUSH,
// For AirPlay
METHODS.GET,
METHODS.POST
];
exports2.METHOD_MAP = utils_1.enumToMap(METHODS);
exports2.H_METHOD_MAP = {};
Object.keys(exports2.METHOD_MAP).forEach((key) => {
if (/^H/.test(key)) {
exports2.H_METHOD_MAP[key] = exports2.METHOD_MAP[key];
}
});
var FINISH;
(function(FINISH2) {
FINISH2[FINISH2["SAFE"] = 0] = "SAFE";
FINISH2[FINISH2["SAFE_WITH_CB"] = 1] = "SAFE_WITH_CB";
FINISH2[FINISH2["UNSAFE"] = 2] = "UNSAFE";
})(FINISH = exports2.FINISH || (exports2.FINISH = {}));
exports2.ALPHA = [];
for (let i = "A".charCodeAt(0); i <= "Z".charCodeAt(0); i++) {
exports2.ALPHA.push(String.fromCharCode(i));
exports2.ALPHA.push(String.fromCharCode(i + 32));
}
exports2.NUM_MAP = {
0: 0,
1: 1,
2: 2,
3: 3,
4: 4,
5: 5,
6: 6,
7: 7,
8: 8,
9: 9
};
exports2.HEX_MAP = {
0: 0,
1: 1,
2: 2,
3: 3,
4: 4,
5: 5,
6: 6,
7: 7,
8: 8,
9: 9,
A: 10,
B: 11,
C: 12,
D: 13,
E: 14,
F: 15,
a: 10,
b: 11,
c: 12,
d: 13,
e: 14,
f: 15
};
exports2.NUM = [
"0",
"1",
"2",
"3",
"4",
"5",
"6",
"7",
"8",
"9"
];
exports2.ALPHANUM = exports2.ALPHA.concat(exports2.NUM);
exports2.MARK = ["-", "_", ".", "!", "~", "*", "'", "(", ")"];
exports2.USERINFO_CHARS = exports2.ALPHANUM.concat(exports2.MARK).concat(["%", ";", ":", "&", "=", "+", "$", ","]);
exports2.STRICT_URL_CHAR = [
"!",
'"',
"$",
"%",
"&",
"'",
"(",
")",
"*",
"+",
",",
"-",
".",
"/",
":",
";",
"<",
"=",
">",
"@",
"[",
"\\",
"]",
"^",
"_",
"`",
"{",
"|",
"}",
"~"
].concat(exports2.ALPHANUM);
exports2.URL_CHAR = exports2.STRICT_URL_CHAR.concat([" ", "\f"]);
for (let i = 128; i <= 255; i++) {
exports2.URL_CHAR.push(i);
}
exports2.HEX = exports2.NUM.concat(["a", "b", "c", "d", "e", "f", "A", "B", "C", "D", "E", "F"]);
exports2.STRICT_TOKEN = [
"!",
"#",
"$",
"%",
"&",
"'",
"*",
"+",
"-",
".",
"^",
"_",
"`",
"|",
"~"
].concat(exports2.ALPHANUM);
exports2.TOKEN = exports2.STRICT_TOKEN.concat([" "]);
exports2.HEADER_CHARS = [" "];
for (let i = 32; i <= 255; i++) {
if (i !== 127) {
exports2.HEADER_CHARS.push(i);
}
}
exports2.CONNECTION_TOKEN_CHARS = exports2.HEADER_CHARS.filter((c) => c !== 44);
exports2.MAJOR = exports2.NUM_MAP;
exports2.MINOR = exports2.MAJOR;
var HEADER_STATE;
(function(HEADER_STATE2) {
HEADER_STATE2[HEADER_STATE2["GENERAL"] = 0] = "GENERAL";
HEADER_STATE2[HEADER_STATE2["CONNECTION"] = 1] = "CONNECTION";
HEADER_STATE2[HEADER_STATE2["CONTENT_LENGTH"] = 2] = "CONTENT_LENGTH";
HEADER_STATE2[HEADER_STATE2["TRANSFER_ENCODING"] = 3] = "TRANSFER_ENCODING";
HEADER_STATE2[HEADER_STATE2["UPGRADE"] = 4] = "UPGRADE";
HEADER_STATE2[HEADER_STATE2["CONNECTION_KEEP_ALIVE"] = 5] = "CONNECTION_KEEP_ALIVE";
HEADER_STATE2[HEADER_STATE2["CONNECTION_CLOSE"] = 6] = "CONNECTION_CLOSE";
HEADER_STATE2[HEADER_STATE2["CONNECTION_UPGRADE"] = 7] = "CONNECTION_UPGRADE";
HEADER_STATE2[HEADER_STATE2["TRANSFER_ENCODING_CHUNKED"] = 8] = "TRANSFER_ENCODING_CHUNKED";
})(HEADER_STATE = exports2.HEADER_STATE || (exports2.HEADER_STATE = {}));
exports2.SPECIAL_HEADERS = {
"connection": HEADER_STATE.CONNECTION,
"content-length": HEADER_STATE.CONTENT_LENGTH,
"proxy-connection": HEADER_STATE.CONNECTION,
"transfer-encoding": HEADER_STATE.TRANSFER_ENCODING,
"upgrade": HEADER_STATE.UPGRADE
};
}
});
// node_modules/undici/lib/llhttp/llhttp-wasm.js
var require_llhttp_wasm = __commonJS({
"node_modules/undici/lib/llhttp/llhttp-wasm.js"(exports2, module2) {
"use strict";
var { Buffer: Buffer2 } = require("node:buffer");
module2.exports = Buffer2.from("AGFzbQEAAAABJwdgAX8Bf2ADf39/AX9gAX8AYAJ/fwBgBH9/f38Bf2AAAGADf39/AALLAQgDZW52GHdhc21fb25faGVhZGVyc19jb21wbGV0ZQAEA2VudhV3YXNtX29uX21lc3NhZ2VfYmVnaW4AAANlbnYLd2FzbV9vbl91cmwAAQNlbnYOd2FzbV9vbl9zdGF0dXMAAQNlbnYUd2FzbV9vbl9oZWFkZXJfZmllbGQAAQNlbnYUd2FzbV9vbl9oZWFkZXJfdmFsdWUAAQNlbnYMd2FzbV9vbl9ib2R5AAEDZW52GHdhc21fb25fbWVzc2FnZV9jb21wbGV0ZQAAAy0sBQYAAAIAAAAAAAACAQIAAgICAAADAAAAAAMDAwMBAQEBAQEBAQEAAAIAAAAEBQFwARISBQMBAAIGCAF/AUGA1AQLB9EFIgZtZW1vcnkCAAtfaW5pdGlhbGl6ZQAIGV9faW5kaXJlY3RfZnVuY3Rpb25fdGFibGUBAAtsbGh0dHBfaW5pdAAJGGxsaHR0cF9zaG91bGRfa2VlcF9hbGl2ZQAvDGxsaHR0cF9hbGxvYwALBm1hbGxvYwAxC2xsaHR0cF9mcmVlAAwEZnJlZQAMD2xsaHR0cF9nZXRfdHlwZQANFWxsaHR0cF9nZXRfaHR0cF9tYWpvcgAOFWxsaHR0cF9nZXRfaHR0cF9taW5vcgAPEWxsaHR0cF9nZXRfbWV0aG9kABAWbGxodHRwX2dldF9zdGF0dXNfY29kZQAREmxsaHR0cF9nZXRfdXBncmFkZQASDGxsaHR0cF9yZXNldAATDmxsaHR0cF9leGVjdXRlABQUbGxodHRwX3NldHRpbmdzX2luaXQAFQ1sbGh0dHBfZmluaXNoABYMbGxodHRwX3BhdXNlABcNbGxodHRwX3Jlc3VtZQAYG2xsaHR0cF9yZXN1bWVfYWZ0ZXJfdXBncmFkZQAZEGxsaHR0cF9nZXRfZXJybm8AGhdsbGh0dHBfZ2V0X2Vycm9yX3JlYXNvbgAbF2xsaHR0cF9zZXRfZXJyb3JfcmVhc29uABwUbGxodHRwX2dldF9lcnJvcl9wb3MAHRFsbGh0dHBfZXJybm9fbmFtZQAeEmxsaHR0cF9tZXRob2RfbmFtZQAfEmxsaHR0cF9zdGF0dXNfbmFtZQAgGmxsaHR0cF9zZXRfbGVuaWVudF9oZWFkZXJzACEhbGxodHRwX3NldF9sZW5pZW50X2NodW5rZWRfbGVuZ3RoACIdbGxodHRwX3NldF9sZW5pZW50X2tlZXBfYWxpdmUAIyRsbGh0dHBfc2V0X2xlbmllbnRfdHJhbnNmZXJfZW5jb2RpbmcAJBhsbGh0dHBfbWVzc2FnZV9uZWVkc19lb2YALgkXAQBBAQsRAQIDBAUKBgcrLSwqKSglJyYK07MCLBYAQYjQACgCAARAAAtBiNAAQQE2AgALFAAgABAwIAAgAjYCOCAAIAE6ACgLFAAgACAALwEyIAAtAC4gABAvEAALHgEBf0HAABAyIgEQMCABQYAINgI4IAEgADoAKCABC48MAQd/AkAgAEUNACAAQQhrIgEgAEEEaygCACIAQXhxIgRqIQUCQCAAQQFxDQAgAEEDcUUNASABIAEoAgAiAGsiAUGc0AAoAgBJDQEgACAEaiEEAkACQEGg0AAoAgAgAUcEQCAAQf8BTQRAIABBA3YhAyABKAIIIgAgASgCDCICRgRAQYzQAEGM0AAoAgBBfiADd3E2AgAMBQsgAiAANgIIIAAgAjYCDAwECyABKAIYIQYgASABKAIMIgBHBEAgACABKAIIIgI2AgggAiAANgIMDAMLIAFBFGoiAygCACICRQRAIAEoAhAiAkUNAiABQRBqIQMLA0AgAyEHIAIiAEEUaiIDKAIAIgINACAAQRBqIQMgACgCECICDQALIAdBADYCAAwCCyAFKAIEIgBBA3FBA0cNAiAFIABBfnE2AgRBlNAAIAQ2AgAgBSAENgIAIAEgBEEBcjYCBAwDC0EAIQALIAZFDQACQCABKAIcIgJBAnRBvNIAaiIDKAIAIAFGBEAgAyAANgIAIAANAUGQ0ABBkNAAKAIAQX4gAndxNgIADAILIAZBEEEUIAYoAhAgAUYbaiAANgIAIABFDQELIAAgBjYCGCABKAIQIgIEQCAAIAI2AhAgAiAANgIYCyABQRRqKAIAIgJFDQAgAEEUaiACNgIAIAIgADYCGAsgASAFTw0AIAUoAgQiAEEBcUUNAAJAAkACQAJAIABBAnFFBEBBpNAAKAIAIAVGBEBBpNAAIAE2AgBBmNAAQZjQACgCACAEaiIANgIAIAEgAEEBcjYCBCABQaDQACgCAEcNBkGU0ABBADYCAEGg0ABBADYCAAwGC0Gg0AAoAgAgBUYEQEGg0AAgATYCAEGU0ABBlNAAKAIAIARqIgA2AgAgASAAQQFyNgIEIAAgAWogADYCAAwGCyAAQXhxIARqIQQgAEH/AU0EQCAAQQN2IQMgBSgCCCIAIAUoAgwiAkYEQEGM0ABBjNAAKAIAQX4gA3dxNgIADAULIAIgADYCCCAAIAI2AgwMBAsgBSgCGCEGIAUgBSgCDCIARwRAQZzQACgCABogACAFKAIIIgI2AgggAiAANgIMDAMLIAVBFGoiAygCACICRQRAIAUoAhAiAkUNAiAFQRBqIQMLA0AgAyEHIAIiAEEUaiIDKAIAIgINACAAQRBqIQMgACgCECICDQALIAdBADYCAAwCCyAFIABBfnE2AgQgASAEaiAENgIAIAEgBEEBcjYCBAwDC0EAIQALIAZFDQACQCAFKAIcIgJBAnRBvNIAaiIDKAIAIAVGBEAgAyAANgIAIAANAUGQ0ABBkNAAKAIAQX4gAndxNgIADAILIAZBEEEUIAYoAhAgBUYbaiAANgIAIABFDQELIAAgBjYCGCAFKAIQIgIEQCAAIAI2AhAgAiAANgIYCyAFQRRqKAIAIgJFDQAgAEEUaiACNgIAIAIgADYCGAsgASAEaiAENgIAIAEgBEEBcjYCBCABQaDQACgCAEcNAEGU0AAgBDYCAAwBCyAEQf8BTQRAIARBeHFBtNAAaiEAAn9BjNAAKAIAIgJBASAEQQN2dCIDcUUEQEGM0AAgAiADcjYCACAADAELIAAoAggLIgIgATYCDCAAIAE2AgggASAANgIMIAEgAjYCCAwBC0EfIQIgBEH///8HTQRAIARBJiAEQQh2ZyIAa3ZBAXEgAEEBdGtBPmohAgsgASACNgIcIAFCADcCECACQQJ0QbzSAGohAAJAQZDQACgCACIDQQEgAnQiB3FFBEAgACABNgIAQZDQACADIAdyNgIAIAEgADYCGCABIAE2AgggASABNgIMDAELIARBGSACQQF2a0EAIAJBH0cbdCECIAAoAgAhAAJAA0AgACIDKAIEQXhxIARGDQEgAkEddiEAIAJBAXQhAiADIABBBHFqQRBqIgcoAgAiAA0ACyAHIAE2AgAgASADNgIYIAEgATYCDCABIAE2AggMAQsgAygCCCIAIAE2AgwgAyABNgIIIAFBADYCGCABIAM2AgwgASAANgIIC0Gs0ABBrNAAKAIAQQFrIgBBfyAAGzYCAAsLBwAgAC0AKAsHACAALQAqCwcAIAAtACsLBwAgAC0AKQsHACAALwEyCwcAIAAtAC4LQAEEfyAAKAIYIQEgAC0ALSECIAAtACghAyAAKAI4IQQgABAwIAAgBDYCOCAAIAM6ACggACACOgAtIAAgATYCGAu74gECB38DfiABIAJqIQQCQCAAIgIoAgwiAA0AIAIoAgQEQCACIAE2AgQLIwBBEGsiCCQAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACfwJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAIAIoAhwiA0EBaw7dAdoBAdkBAgMEBQYHCAkKCwwNDtgBDxDXARES1gETFBUWFxgZGhvgAd8BHB0e1QEfICEiIyQl1AEmJygpKiss0wHSAS0u0QHQAS8wMTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRtsBR0hJSs8BzgFLzQFMzAFNTk9QUVJTVFVWV1hZWltcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9fn+AAYEBggGDAYQBhQGGAYcBiAGJAYoBiwGMAY0BjgGPAZABkQGSAZMBlAGVAZYBlwGYAZkBmgGbAZwBnQGeAZ8BoAGhAaIBowGkAaUBpgGnAagBqQGqAasBrAGtAa4BrwGwAbEBsgGzAbQBtQG2AbcBywHKAbgByQG5AcgBugG7AbwBvQG+Ab8BwAHBAcIBwwHEAcUBxgEA3AELQQAMxgELQQ4MxQELQQ0MxAELQQ8MwwELQRAMwgELQRMMwQELQRQMwAELQRUMvwELQRYMvgELQRgMvQELQRkMvAELQRoMuwELQRsMugELQRwMuQELQR0MuAELQQgMtwELQR4MtgELQSAMtQELQR8MtAELQQcMswELQSEMsgELQSIMsQELQSMMsAELQSQMrwELQRIMrgELQREMrQELQSUMrAELQSYMqwELQScMqgELQSgMqQELQcMBDKgBC0EqDKcBC0ErDKYBC0EsDKUBC0EtDKQBC0EuDKMBC0EvDKIBC0HEAQyhAQtBMAygAQtBNAyfAQtBDAyeAQtBMQydAQtBMgycAQtBMwybAQtBOQyaAQtBNQyZAQtBxQEMmAELQQsMlwELQToMlgELQTYMlQELQQoMlAELQTcMkwELQTgMkgELQTwMkQELQTsMkAELQT0MjwELQQkMjgELQSkMjQELQT4MjAELQT8MiwELQcAADIoBC0HBAAyJAQtBwgAMiAELQcMADIcBC0HEAAyGAQtBxQAMhQELQcYADIQBC0EXDIMBC0HHAAyCAQtByAAMgQELQckADIABC0HKAAx/C0HLAAx+C0HNAAx9C0HMAAx8C0HOAAx7C0HPAAx6C0HQAAx5C0HRAAx4C0HSAAx3C0HTAAx2C0HUAAx1C0HWAAx0C0HVAAxzC0EGDHILQdcADHELQQUMcAtB2AAMbwtBBAxuC0HZAAxtC0HaAAxsC0HbAAxrC0HcAAxqC0EDDGkLQd0ADGgLQd4ADGcLQd8ADGYLQeEADGULQeAADGQLQeIADGMLQeMADGILQQIMYQtB5AAMYAtB5QAMXwtB5gAMXgtB5wAMXQtB6AAMXAtB6QAMWwtB6gAMWgtB6wAMWQtB7AAMWAtB7QAMVwtB7gAMVgtB7wAMVQtB8AAMVAtB8QAMUwtB8gAMUgtB8wAMUQtB9AAMUAtB9QAMTwtB9gAMTgtB9wAMTQtB+AAMTAtB+QAMSwtB+gAMSgtB+wAMSQtB/AAMSAtB/QAMRwtB/gAMRgtB/wAMRQtBgAEMRAtBgQEMQwtBggEMQgtBgwEMQQtBhAEMQAtBhQEMPwtBhgEMPgtBhwEMPQtBiAEMPAtBiQEMOwtBigEMOgtBiwEMOQtBjAEMOAtBjQEMNwtBjgEMNgtBjwEMNQtBkAEMNAtBkQEMMwtBkgEMMgtBkwEMMQtBlAEMMAtBlQEMLwtBlgEMLgtBlwEMLQtBmAEMLAtBmQEMKwtBmgEMKgtBmwEMKQtBnAEMKAtBnQEMJwtBngEMJgtBnwEMJQtBoAEMJAtBoQEMIwtBogEMIgtBowEMIQtBpAEMIAtBpQEMHwtBpgEMHgtBpwEMHQtBqAEMHAtBqQEMGwtBqgEMGgtBqwEMGQtBrAEMGAtBrQEMFwtBrgEMFgtBAQwVC0GvAQwUC0GwAQwTC0GxAQwSC0GzAQwRC0GyAQwQC0G0AQwPC0G1AQwOC0G2AQwNC0G3AQwMC0G4AQwLC0G5AQwKC0G6AQwJC0G7AQwIC0HGAQwHC0G8AQwGC0G9AQwFC0G+AQwEC0G/AQwDC0HAAQwCC0HCAQwBC0HBAQshAwNAAkACQAJAAkACQAJAAkACQAJAIAICfwJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJ/AkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAgAgJ/AkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACfwJAAkACfwJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACfwJAAkACQAJAAn8CQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQCADDsYBAAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHyAhIyUmKCorLC8wMTIzNDU2Nzk6Ozw9lANAQkRFRklLTk9QUVJTVFVWWFpbXF1eX2BhYmNkZWZnaGpsb3Bxc3V2eHl6e3x/gAGBAYIBgwGEAYUBhgGHAYgBiQGKAYsBjAGNAY4BjwGQAZEBkgGTAZQBlQGWAZcBmAGZAZoBmwGcAZ0BngGfAaABoQGiAaMBpAGlAaYBpwGoAakBqgGrAawBrQGuAa8BsAGxAbIBswG0AbUBtgG3AbgBuQG6AbsBvAG9Ab4BvwHAAcEBwgHDAcQBxQHGAccByAHJAcsBzAHNAc4BzwGKA4kDiAOHA4QDgwOAA/sC+gL5AvgC9wL0AvMC8gLLAsECsALZAQsgASAERw3wAkHdASEDDLMDCyABIARHDcgBQcMBIQMMsgMLIAEgBEcNe0H3ACEDDLEDCyABIARHDXBB7wAhAwywAwsgASAERw1pQeoAIQMMrwMLIAEgBEcNZUHoACEDDK4DCyABIARHDWJB5gAhAwytAwsgASAERw0aQRghAwysAwsgASAERw0VQRIhAwyrAwsgASAERw1CQcUAIQMMqgMLIAEgBEcNNEE/IQMMqQMLIAEgBEcNMkE8IQMMqAMLIAEgBEcNK0ExIQMMpwMLIAItAC5BAUYNnwMMwQILQQAhAAJAAkACQCACLQAqRQ0AIAItACtFDQAgAi8BMCIDQQJxRQ0BDAILIAIvATAiA0EBcUUNAQtBASEAIAItAChBAUYNACACLwEyIgVB5ABrQeQASQ0AIAVBzAFGDQAgBUGwAkYNACADQcAAcQ0AQQAhACADQYgEcUGABEYNACADQShxQQBHIQALIAJBADsBMCACQQA6AC8gAEUN3wIgAkIANwMgDOACC0EAIQACQCACKAI4IgNFDQAgAygCLCIDRQ0AIAIgAxEAACEACyAARQ3MASAAQRVHDd0CIAJBBDYCHCACIAE2AhQgAkGwGDYCECACQRU2AgxBACEDDKQDCyABIARGBEBBBiEDDKQDCyABQQFqIQFBACEAAkAgAigCOCIDRQ0AIAMoAlQiA0UNACACIAMRAAAhAAsgAA3ZAgwcCyACQgA3AyBBEiEDDIkDCyABIARHDRZBHSEDDKEDCyABIARHBEAgAUEBaiEBQRAhAwyIAwtBByEDDKADCyACIAIpAyAiCiAEIAFrrSILfSIMQgAgCiAMWhs3AyAgCiALWA3UAkEIIQMMnwMLIAEgBEcEQCACQQk2AgggAiABNgIEQRQhAwyGAwtBCSEDDJ4DCyACKQMgQgBSDccBIAIgAi8BMEGAAXI7ATAMQgsgASAERw0/QdAAIQMMnAMLIAEgBEYEQEELIQMMnAMLIAFBAWohAUEAIQACQCACKAI4IgNFDQAgAygCUCIDRQ0AIAIgAxEAACEACyAADc8CDMYBC0EAIQACQCACKAI4IgNFDQAgAygCSCIDRQ0AIAIgAxEAACEACyAARQ3GASAAQRVHDc0CIAJBCzYCHCACIAE2AhQgAkGCGTYCECACQRU2AgxBACEDDJoDC0EAIQACQCACKAI4IgNFDQAgAygCSCIDRQ0AIAIgAxEAACEACyAARQ0MIABBFUcNygIgAkEaNgIcIAIgATYCFCACQYIZNgIQIAJBFTYCDEEAIQMMmQMLQQAhAAJAIAIoAjgiA0UNACADKAJMIgNFDQAgAiADEQAAIQALIABFDcQBIABBFUcNxwIgAkELNgIcIAIgATYCFCACQZEXNgIQIAJBFTYCDEEAIQMMmAMLIAEgBEYEQEEPIQMMmAMLIAEtAAAiAEE7Rg0HIABBDUcNxAIgAUEBaiEBDMMBC0EAIQACQCACKAI4IgNFDQAgAygCTCIDRQ0AIAIgAxEAACEACyAARQ3DASAAQRVHDcICIAJBDzYCHCACIAE2AhQgAkGRFzYCECACQRU2AgxBACEDDJYDCwNAIAEtAABB8DVqLQAAIgBBAUcEQCAAQQJHDcECIAIoAgQhAEEAIQMgAkEANgIEIAIgACABQQFqIgEQLSIADcICDMUBCyAEIAFBAWoiAUcNAAtBEiEDDJUDC0EAIQACQCACKAI4IgNFDQAgAygCTCIDRQ0AIAIgAxEAACEACyAARQ3FASAAQRVHDb0CIAJBGzYCHCACIAE2AhQgAkGRFzYCECACQRU2AgxBACEDDJQDCyABIARGBEBBFiEDDJQDCyACQQo2AgggAiABNgIEQQAhAAJAIAIoAjgiA0UNACADKAJIIgNFDQAgAiADEQAAIQALIABFDcIBIABBFUcNuQIgAkEVNgIcIAIgATYCFCACQYIZNgIQIAJBFTYCDEEAIQMMkwMLIAEgBEcEQANAIAEtAABB8DdqLQAAIgBBAkcEQAJAIABBAWsOBMQCvQIAvgK9AgsgAUEBaiEBQQghAwz8AgsgBCABQQFqIgFHDQALQRUhAwyTAwtBFSEDDJIDCwNAIAEtAABB8DlqLQAAIgBBAkcEQCAAQQFrDgTFArcCwwK4ArcCCyAEIAFBAWoiAUcNAAtBGCEDDJEDCyABIARHBEAgAkELNgIIIAIgATYCBEEHIQMM+AILQRkhAwyQAwsgAUEBaiEBDAILIAEgBEYEQEEaIQMMjwMLAkAgAS0AAEENaw4UtQG/Ab8BvwG/Ab8BvwG/Ab8BvwG/Ab8BvwG/Ab8BvwG/Ab8BvwEAvwELQQAhAyACQQA2AhwgAkGvCzYCECACQQI2AgwgAiABQQFqNgIUDI4DCyABIARGBEBBGyEDDI4DCyABLQAAIgBBO0cEQCAAQQ1HDbECIAFBAWohAQy6AQsgAUEBaiEBC0EiIQMM8wILIAEgBEYEQEEcIQMMjAMLQgAhCgJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAgAS0AAEEwaw43wQLAAgABAgMEBQYH0AHQAdAB0AHQAdAB0AEICQoLDA3QAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdABDg8QERIT0AELQgIhCgzAAgtCAyEKDL8CC0IEIQoMvgILQgUhCgy9AgtCBiEKDLwCC0IHIQoMuwILQgghCgy6AgtCCSEKDLkCC0IKIQoMuAILQgshCgy3AgtCDCEKDLYCC0INIQoMtQILQg4hCgy0AgtCDyEKDLMCC0IKIQoMsgILQgshCgyxAgtCDCEKDLACC0INIQoMrwILQg4hCgyuAgtCDyEKDK0CC0IAIQoCQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAIAEtAABBMGsON8ACvwIAAQIDBAUGB74CvgK+Ar4CvgK+Ar4CCAkKCwwNvgK+Ar4CvgK+Ar4CvgK+Ar4CvgK+Ar4CvgK+Ar4CvgK+Ar4CvgK+Ar4CvgK+Ar4CvgK+Ag4PEBESE74CC0ICIQoMvwILQgMhCgy+AgtCBCEKDL0CC0IFIQoMvAILQgYhCgy7AgtCByEKDLoCC0IIIQoMuQILQgkhCgy4AgtCCiEKDLcCC0ILIQoMtgILQgwhCgy1AgtCDSEKDLQCC0IOIQoMswILQg8hCgyyAgtCCiEKDLECC0ILIQoMsAILQgwhCgyvAgtCDSEKDK4CC0IOIQoMrQILQg8hCgysAgsgAiACKQMgIgogBCABa60iC30iDEIAIAogDFobNwMgIAogC1gNpwJBHyEDDIkDCyABIARHBEAgAkEJNgIIIAIgATYCBEElIQMM8AILQSAhAwyIAwtBASEFIAIvATAiA0EIcUUEQCACKQMgQgBSIQULAkAgAi0ALgRAQQEhACACLQApQQVGDQEgA0HAAHFFIAVxRQ0BC0EAIQAgA0HAAHENAEECIQAgA0EIcQ0AIANBgARxBEACQCACLQAoQQFHDQAgAi0ALUEKcQ0AQQUhAAwCC0EEIQAMAQsgA0EgcUUEQAJAIAItAChBAUYNACACLwEyIgBB5ABrQeQASQ0AIABBzAFGDQAgAEGwAkYNAEEEIQAgA0EocUUNAiADQYgEcUGABEYNAgtBACEADAELQQBBAyACKQMgUBshAAsgAEEBaw4FvgIAsAEBpAKhAgtBESEDDO0CCyACQQE6AC8MhAMLIAEgBEcNnQJBJCEDDIQDCyABIARHDRxBxgAhAwyDAwtBACEAAkAgAigCOCIDRQ0AIAMoAkQiA0UNACACIAMRAAAhAAsgAEUNJyAAQRVHDZgCIAJB0AA2AhwgAiABNgIUIAJBkRg2AhAgAkEVNgIMQQAhAwyCAwsgASAERgRAQSghAwyCAwtBACEDIAJBADYCBCACQQw2AgggAiABIAEQKiIARQ2UAiACQSc2AhwgAiABNgIUIAIgADYCDAyBAwsgASAERgRAQSkhAwyBAwsgAS0AACIAQSBGDRMgAEEJRw2VAiABQQFqIQEMFAsgASAERwRAIAFBAWohAQwWC0EqIQMM/wILIAEgBEYEQEErIQMM/wILIAEtAAAiAEEJRyAAQSBHcQ2QAiACLQAsQQhHDd0CIAJBADoALAzdAgsgASAERgRAQSwhAwz+AgsgAS0AAEEKRw2OAiABQQFqIQEMsAELIAEgBEcNigJBLyEDDPwCCwNAIAEtAAAiAEEgRwRAIABBCmsOBIQCiAKIAoQChgILIAQgAUEBaiIBRw0AC0ExIQMM+wILQTIhAyABIARGDfoCIAIoAgAiACAEIAFraiEHIAEgAGtBA2ohBgJAA0AgAEHwO2otAAAgAS0AACIFQSByIAUgBUHBAGtB/wFxQRpJG0H/AXFHDQEgAEEDRgRAQQYhAQziAgsgAEEBaiEAIAQgAUEBaiIBRw0ACyACIAc2AgAM+wILIAJBADYCAAyGAgtBMyEDIAQgASIARg35AiAEIAFrIAIoAgAiAWohByAAIAFrQQhqIQYCQANAIAFB9DtqLQAAIAAtAAAiBUEgciAFIAVBwQBrQf8BcUEaSRtB/wFxRw0BIAFBCEYEQEEFIQEM4QILIAFBAWohASAEIABBAWoiAEcNAAsgAiAHNgIADPoCCyACQQA2AgAgACEBDIUCC0E0IQMgBCABIgBGDfgCIAQgAWsgAigCACIBaiEHIAAgAWtBBWohBgJAA0AgAUHQwgBqLQAAIAAtAAAiBUEgciAFIAVBwQBrQf8BcUEaSRtB/wFxRw0BIAFBBUYEQEEHIQEM4AILIAFBAWohASAEIABBAWoiAEcNAAsgAiAHNgIADPkCCyACQQA2AgAgACEBDIQCCyABIARHBEADQCABLQAAQYA+ai0AACIAQQFHBEAgAEECRg0JDIECCyAEIAFBAWoiAUcNAAtBMCEDDPgCC0EwIQMM9wILIAEgBEcEQANAIAEtAAAiAEEgRwRAIABBCmsOBP8B/gH+Af8B/gELIAQgAUEBaiIBRw0AC0E4IQMM9wILQTghAwz2AgsDQCABLQAAIgBBIEcgAEEJR3EN9gEgBCABQQFqIgFHDQALQTwhAwz1AgsDQCABLQAAIgBBIEcEQAJAIABBCmsOBPkBBAT5AQALIABBLEYN9QEMAwsgBCABQQFqIgFHDQALQT8hAwz0AgtBwAAhAyABIARGDfMCIAIoAgAiACAEIAFraiEFIAEgAGtBBmohBgJAA0AgAEGAQGstAAAgAS0AAEEgckcNASAAQQZGDdsCIABBAWohACAEIAFBAWoiAUcNAAsgAiAFNgIADPQCCyACQQA2AgALQTYhAwzZAgsgASAERgRAQcEAIQMM8gILIAJBDDYCCCACIAE2AgQgAi0ALEEBaw4E+wHuAewB6wHUAgsgAUEBaiEBDPoBCyABIARHBEADQAJAIAEtAAAiAEEgciAAIABBwQBrQf8BcUEaSRtB/wFxIgBBCUYNACAAQSBGDQACQAJAAkACQCAAQeMAaw4TAAMDAwMDAwMBAwMDAwMDAwMDAgMLIAFBAWohAUExIQMM3AILIAFBAWohAUEyIQMM2wILIAFBAWohAUEzIQMM2gILDP4BCyAEIAFBAWoiAUcNAAtBNSEDDPACC0E1IQMM7wILIAEgBEcEQANAIAEtAABBgDxqLQAAQQFHDfcBIAQgAUEBaiIBRw0AC0E9IQMM7wILQT0hAwzuAgtBACEAAkAgAigCOCIDRQ0AIAMoAkAiA0UNACACIAMRAAAhAAsgAEUNASAAQRVHDeYBIAJBwgA2AhwgAiABNgIUIAJB4xg2AhAgAkEVNgIMQQAhAwztAgsgAUEBaiEBC0E8IQMM0gILIAEgBEYEQEHCACEDDOsCCwJAA0ACQCABLQAAQQlrDhgAAswCzALRAswCzALMAswCzALMAswCzALMAswCzALMAswCzALMAswCzALMAgDMAgsgBCABQQFqIgFHDQALQcIAIQMM6wILIAFBAWohASACLQAtQQFxRQ3+AQtBLCEDDNACCyABIARHDd4BQcQAIQMM6AILA0AgAS0AAEGQwABqLQAAQQFHDZwBIAQgAUEBaiIBRw0AC0HFACEDDOcCCyABLQAAIgBBIEYN/gEgAEE6Rw3AAiACKAIEIQBBACEDIAJBADYCBCACIAAgARApIgAN3gEM3QELQccAIQMgBCABIgBGDeUCIAQgAWsgAigCACIBaiEHIAAgAWtBBWohBgNAIAFBkMIAai0AACAALQAAIgVBIHIgBSAFQcEAa0H/AXFBGkkbQf8BcUcNvwIgAUEFRg3CAiABQQFqIQEgBCAAQQFqIgBHDQALIAIgBzYCAAzlAgtByAAhAyAEIAEiAEYN5AIgBCABayACKAIAIgFqIQcgACABa0EJaiEGA0AgAUGWwgBqLQAAIAAtAAAiBUEgciAFIAVBwQBrQf8BcUEaSRtB/wFxRw2+AkECIAFBCUYNwgIaIAFBAWohASAEIABBAWoiAEcNAAsgAiAHNgIADOQCCyABIARGBEBByQAhAwzkAgsCQAJAIAEtAAAiAEEgciAAIABBwQBrQf8BcUEaSRtB/wFxQe4Aaw4HAL8CvwK/Ar8CvwIBvwILIAFBAWohAUE+IQMMywILIAFBAWohAUE/IQMMygILQcoAIQMgBCABIgBGDeICIAQgAWsgAigCACIBaiEGIAAgAWtBAWohBwNAIAFBoMIAai0AACAALQAAIgVBIHIgBSAFQcEAa0H/AXFBGkkbQf8BcUcNvAIgAUEBRg2+AiABQQFqIQEgBCAAQQFqIgBHDQALIAIgBjYCAAziAgtBywAhAyAEIAEiAEYN4QIgBCABayACKAIAIgFqIQcgACABa0EOaiEGA0AgAUGiwgBqLQAAIAAtAAAiBUEgciAFIAVBwQBrQf8BcUEaSRtB/wFxRw27AiABQQ5GDb4CIAFBAWohASAEIABBAWoiAEcNAAsgAiAHNgIADOECC0HMACEDIAQgASIARg3gAiAEIAFrIAIoAgAiAWohByAAIAFrQQ9qIQYDQCABQcDCAGotAAAgAC0AACIFQSByIAUgBUHBAGtB/wFxQRpJG0H/AXFHDboCQQMgAUEPRg2+AhogAUEBaiEBIAQgAEEBaiIARw0ACyACIAc2AgAM4AILQc0AIQMgBCABIgBGDd8CIAQgAWsgAigCACIBaiEHIAAgAWtBBWohBgNAIAFB0MIAai0AACAALQAAIgVBIHIgBSAFQcEAa0H/AXFBGkkbQf8BcUcNuQJBBCABQQVGDb0CGiABQQFqIQEgBCAAQQFqIgBHDQALIAIgBzYCAAzfAgsgASAERgRAQc4AIQMM3wILAkACQAJAAkAgAS0AACIAQSByIAAgAEHBAGtB/wFxQRpJG0H/AXFB4wBrDhMAvAK8ArwCvAK8ArwCvAK8ArwCvAK8ArwCAbwCvAK8AgIDvAILIAFBAWohAUHBACEDDMgCCyABQQFqIQFBwgAhAwzHAgsgAUEBaiEBQcMAIQMMxgILIAFBAWohAUHEACEDDMUCCyABIARHBEAgAkENNgIIIAIgATYCBEHFACEDDMUCC0HPACEDDN0CCwJAAkAgAS0AAEEKaw4EAZABkAEAkAELIAFBAWohAQtBKCEDDMMCCyABIARGBEBB0QAhAwzcAgsgAS0AAEEgRw0AIAFBAWohASACLQAtQQFxRQ3QAQtBFyEDDMECCyABIARHDcsBQdIAIQMM2QILQdMAIQMgASAERg3YAiACKAIAIgAgBCABa2ohBiABIABrQQFqIQUDQCABLQAAIABB1sIAai0AAEcNxwEgAEEBRg3KASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBjYCAAzYAgsgASAERgRAQdUAIQMM2AILIAEtAABBCkcNwgEgAUEBaiEBDMoBCyABIARGBEBB1gAhAwzXAgsCQAJAIAEtAABBCmsOBADDAcMBAcMBCyABQQFqIQEMygELIAFBAWohAUHKACEDDL0CC0EAIQACQCACKAI4IgNFDQAgAygCPCIDRQ0AIAIgAxEAACEACyAADb8BQc0AIQMMvAILIAItAClBIkYNzwIMiQELIAQgASIFRgRAQdsAIQMM1AILQQAhAEEBIQFBASEGQQAhAwJAAn8CQAJAAkACQAJAAkACQCAFLQAAQTBrDgrFAcQBAAECAwQFBgjDAQtBAgwGC0EDDAULQQQMBAtBBQwDC0EGDAILQQcMAQtBCAshA0EAIQFBACEGDL0BC0EJIQNBASEAQQAhAUEAIQYMvAELIAEgBEYEQEHdACEDDNMCCyABLQAAQS5HDbgBIAFBAWohAQyIAQsgASAERw22AUHfACEDDNECCyABIARHBEAgAkEONgIIIAIgATYCBEHQACEDDLgCC0HgACEDDNACC0HhACEDIAEgBEYNzwIgAigCACIAIAQgAWtqIQUgASAAa0EDaiEGA0AgAS0AACAAQeLCAGotAABHDbEBIABBA0YNswEgAEEBaiEAIAQgAUEBaiIBRw0ACyACIAU2AgAMzwILQeIAIQMgASAERg3OAiACKAIAIgAgBCABa2ohBSABIABrQQJqIQYDQCABLQAAIABB5sIAai0AAEcNsAEgAEECRg2vASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAzOAgtB4wAhAyABIARGDc0CIAIoAgAiACAEIAFraiEFIAEgAGtBA2ohBgNAIAEtAAAgAEHpwgBqLQAARw2vASAAQQNGDa0BIABBAWohACAEIAFBAWoiAUcNAAsgAiAFNgIADM0CCyABIARGBEBB5QAhAwzNAgsgAUEBaiEBQQAhAAJAIAIoAjgiA0UNACADKAIwIgNFDQAgAiADEQAAIQALIAANqgFB1gAhAwyzAgsgASAERwRAA0AgAS0AACIAQSBHBEACQAJAAkAgAEHIAGsOCwABswGzAbMBswGzAbMBswGzAQKzAQsgAUEBaiEBQdIAIQMMtwILIAFBAWohAUHTACEDDLYCCyABQQFqIQFB1AAhAwy1AgsgBCABQQFqIgFHDQALQeQAIQMMzAILQeQAIQMMywILA0AgAS0AAEHwwgBqLQAAIgBBAUcEQCAAQQJrDgOnAaYBpQGkAQsgBCABQQFqIgFHDQALQeYAIQMMygILIAFBAWogASAERw0CGkHnACEDDMkCCwNAIAEtAABB8MQAai0AACIAQQFHBEACQCAAQQJrDgSiAaEBoAEAnwELQdcAIQMMsQILIAQgAUEBaiIBRw0AC0HoACEDDMgCCyABIARGBEBB6QAhAwzIAgsCQCABLQAAIgBBCmsOGrcBmwGbAbQBmwGbAZsBmwGbAZsBmwGbAZsBmwGbAZsBmwGbAZsBmwGbAZsBpAGbAZsBAJkBCyABQQFqCyEBQQYhAwytAgsDQCABLQAAQfDGAGotAABBAUcNfSAEIAFBAWoiAUcNAAtB6gAhAwzFAgsgAUEBaiABIARHDQIaQesAIQMMxAILIAEgBEYEQEHsACEDDMQCCyABQQFqDAELIAEgBEYEQEHtACEDDMMCCyABQQFqCyEBQQQhAwyoAgsgASAERgRAQe4AIQMMwQILAkACQAJAIAEtAABB8MgAai0AAEEBaw4HkAGPAY4BAHwBAo0BCyABQQFqIQEMCwsgAUEBagyTAQtBACEDIAJBADYCHCACQZsSNgIQIAJBBzYCDCACIAFBAWo2AhQMwAILAkADQCABLQAAQfDIAGotAAAiAEEERwRAAkACQCAAQQFrDgeUAZMBkgGNAQAEAY0BC0HaACEDDKoCCyABQQFqIQFB3AAhAwypAgsgBCABQQFqIgFHDQALQe8AIQMMwAILIAFBAWoMkQELIAQgASIARgRAQfAAIQMMvwILIAAtAABBL0cNASAAQQFqIQEMBwsgBCABIgBGBEBB8QAhAwy+AgsgAC0AACIBQS9GBEAgAEEBaiEBQd0AIQMMpQILIAFBCmsiA0EWSw0AIAAhAUEBIAN0QYmAgAJxDfkBC0EAIQMgAkEANgIcIAIgADYCFCACQYwcNgIQIAJBBzYCDAy8AgsgASAERwRAIAFBAWohAUHeACEDDKMCC0HyACEDDLsCCyABIARGBEBB9AAhAwy7AgsCQCABLQAAQfDMAGotAABBAWsOA/cBcwCCAQtB4QAhAwyhAgsgASAERwRAA0AgAS0AAEHwygBqLQAAIgBBA0cEQAJAIABBAWsOAvkBAIUBC0HfACEDDKMCCyAEIAFBAWoiAUcNAAtB8wAhAwy6AgtB8wAhAwy5AgsgASAERwRAIAJBDzYCCCACIAE2AgRB4AAhAwygAgtB9QAhAwy4AgsgASAERgRAQfYAIQMMuAILIAJBDzYCCCACIAE2AgQLQQMhAwydAgsDQCABLQAAQSBHDY4CIAQgAUEBaiIBRw0AC0H3ACEDDLUCCyABIARGBEBB+AAhAwy1AgsgAS0AAEEgRw16IAFBAWohAQxbC0EAIQACQCACKAI4IgNFDQAgAygCOCIDRQ0AIAIgAxEAACEACyAADXgMgAILIAEgBEYEQEH6ACEDDLMCCyABLQAAQcwARw10IAFBAWohAUETDHYLQfsAIQMgASAERg2xAiACKAIAIgAgBCABa2ohBSABIABrQQVqIQYDQCABLQAAIABB8M4Aai0AAEcNcyAAQQVGDXUgAEEBaiEAIAQgAUEBaiIBRw0ACyACIAU2AgAMsQILIAEgBEYEQEH8ACEDDLECCwJAAkAgAS0AAEHDAGsODAB0dHR0dHR0dHR0AXQLIAFBAWohAUHmACEDDJgCCyABQQFqIQFB5wAhAwyXAgtB/QAhAyABIARGDa8CIAIoAgAiACAEIAFraiEFIAEgAGtBAmohBgJAA0AgAS0AACAAQe3PAGotAABHDXIgAEECRg0BIABBAWohACAEIAFBAWoiAUcNAAsgAiAFNgIADLACCyACQQA2AgAgBkEBaiEBQRAMcwtB/gAhAyABIARGDa4CIAIoAgAiACAEIAFraiEFIAEgAGtBBWohBgJAA0AgAS0AACAAQfbOAGotAABHDXEgAEEFRg0BIABBAWohACAEIAFBAWoiAUcNAAsgAiAFNgIADK8CCyACQQA2AgAgBkEBaiEBQRYMcgtB/wAhAyABIARGDa0CIAIoAgAiACAEIAFraiEFIAEgAGtBA2ohBgJAA0AgAS0AACAAQfzOAGotAABHDXAgAEEDRg0BIABBAWohACAEIAFBAWoiAUcNAAsgAiAFNgIADK4CCyACQQA2AgAgBkEBaiEBQQUMcQsgASAERgRAQYABIQMMrQILIAEtAABB2QBHDW4gAUEBaiEBQQgMcAsgASAERgRAQYEBIQMMrAILAkACQCABLQAAQc4Aaw4DAG8BbwsgAUEBaiEBQesAIQMMkwILIAFBAWohAUHsACEDDJICCyABIARGBEBBggEhAwyrAgsCQAJAIAEtAABByABrDggAbm5ubm5uAW4LIAFBAWohAUHqACEDDJICCyABQQFqIQFB7QAhAwyRAgtBgwEhAyABIARGDakCIAIoAgAiACAEIAFraiEFIAEgAGtBAmohBgJAA0AgAS0AACAAQYDPAGotAABHDWwgAEECRg0BIABBAWohACAEIAFBAWoiAUcNAAsgAiAFNgIADKoCCyACQQA2AgAgBkEBaiEBQQAMbQtBhAEhAyABIARGDagCIAIoAgAiACAEIAFraiEFIAEgAGtBBGohBgJAA0AgAS0AACAAQYPPAGotAABHDWsgAEEERg0BIABBAWohACAEIAFBAWoiAUcNAAsgAiAFNgIADKkCCyACQQA2AgAgBkEBaiEBQSMMbAsgASAERgRAQYUBIQMMqAILAkACQCABLQAAQcwAaw4IAGtra2trawFrCyABQQFqIQFB7wAhAwyPAgsgAUEBaiEBQfAAIQMMjgILIAEgBEYEQEGGASEDDKcCCyABLQAAQcUARw1oIAFBAWohAQxgC0GHASEDIAEgBEYNpQIgAigCACIAIAQgAWtqIQUgASAAa0EDaiEGAkADQCABLQAAIABBiM8Aai0AAEcNaCAAQQNGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyACIAU2AgAMpgILIAJBADYCACAGQQFqIQFBLQxpC0GIASEDIAEgBEYNpAIgAigCACIAIAQgAWtqIQUgASAAa0EIaiEGAkADQCABLQAAIABB0M8Aai0AAEcNZyAAQQhGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyACIAU2AgAMpQILIAJBADYCACAGQQFqIQFBKQxoCyABIARGBEBBiQEhAwykAgtBASABLQAAQd8ARw1nGiABQQFqIQEMXgtBigEhAyABIARGDaICIAIoAgAiACAEIAFraiEFIAEgAGtBAWohBgNAIAEtAAAgAEGMzwBqLQAARw1kIABBAUYN+gEgAEEBaiEAIAQgAUEBaiIBRw0ACyACIAU2AgAMogILQYsBIQMgASAERg2hAiACKAIAIgAgBCABa2ohBSABIABrQQJqIQYCQANAIAEtAAAgAEGOzwBqLQAARw1kIABBAkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAyiAgsgAkEANgIAIAZBAWohAUECDGULQYwBIQMgASAERg2gAiACKAIAIgAgBCABa2ohBSABIABrQQFqIQYCQANAIAEtAAAgAEHwzwBqLQAARw1jIABBAUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAyhAgsgAkEANgIAIAZBAWohAUEfDGQLQY0BIQMgASAERg2fAiACKAIAIgAgBCABa2ohBSABIABrQQFqIQYCQANAIAEtAAAgAEHyzwBqLQAARw1iIABBAUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAygAgsgAkEANgIAIAZBAWohAUEJDGMLIAEgBEYEQEGOASEDDJ8CCwJAAkAgAS0AAEHJAGsOBwBiYmJiYgFiCyABQQFqIQFB+AAhAwyGAgsgAUEBaiEBQfkAIQMMhQILQY8BIQMgASAERg2dAiACKAIAIgAgBCABa2ohBSABIABrQQVqIQYCQANAIAEtAAAgAEGRzwBqLQAARw1gIABBBUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAyeAgsgAkEANgIAIAZBAWohAUEYDGELQZABIQMgASAERg2cAiACKAIAIgAgBCABa2ohBSABIABrQQJqIQYCQANAIAEtAAAgAEGXzwBqLQAARw1fIABBAkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAydAgsgAkEANgIAIAZBAWohAUEXDGALQZEBIQMgASAERg2bAiACKAIAIgAgBCABa2ohBSABIABrQQZqIQYCQANAIAEtAAAgAEGazwBqLQAARw1eIABBBkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAycAgsgAkEANgIAIAZBAWohAUEVDF8LQZIBIQMgASAERg2aAiACKAIAIgAgBCABa2ohBSABIABrQQVqIQYCQANAIAEtAAAgAEGhzwBqLQAARw1dIABBBUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAybAgsgAkEANgIAIAZBAWohAUEeDF4LIAEgBEYEQEGTASEDDJoCCyABLQAAQcwARw1bIAFBAWohAUEKDF0LIAEgBEYEQEGUASEDDJkCCwJAAkAgAS0AAEHBAGsODwBcXFxcXFxcXFxcXFxcAVwLIAFBAWohAUH+ACEDDIACCyABQQFqIQFB/wAhAwz/AQsgASAERgRAQZUBIQMMmAILAkACQCABLQAAQcEAaw4DAFsBWwsgAUEBaiEBQf0AIQMM/wELIAFBAWohAUGAASEDDP4BC0GWASEDIAEgBEYNlgIgAigCACIAIAQgAWtqIQUgASAAa0EBaiEGAkADQCABLQAAIABBp88Aai0AAEcNWSAAQQFGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyACIAU2AgAMlwILIAJBADYCACAGQQFqIQFBCwxaCyABIARGBEBBlwEhAwyWAgsCQAJAAkACQCABLQAAQS1rDiMAW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1sBW1tbW1sCW1tbA1sLIAFBAWohAUH7ACEDDP8BCyABQQFqIQFB/AAhAwz+AQsgAUEBaiEBQYEBIQMM/QELIAFBAWohAUGCASEDDPwBC0GYASEDIAEgBEYNlAIgAigCACIAIAQgAWtqIQUgASAAa0EEaiEGAkADQCABLQAAIABBqc8Aai0AAEcNVyAAQQRGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyACIAU2AgAMlQILIAJBADYCACAGQQFqIQFBGQxYC0GZASEDIAEgBEYNkwIgAigCACIAIAQgAWtqIQUgASAAa0EFaiEGAkADQCABLQAAIABBrs8Aai0AAEcNViAAQQVGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyACIAU2AgAMlAILIAJBADYCACAGQQFqIQFBBgxXC0GaASEDIAEgBEYNkgIgAigCACIAIAQgAWtqIQUgASAAa0EBaiEGAkADQCABLQAAIABBtM8Aai0AAEcNVSAAQQFGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyACIAU2AgAMkwILIAJBADYCACAGQQFqIQFBHAxWC0GbASEDIAEgBEYNkQIgAigCACIAIAQgAWtqIQUgASAAa0EBaiEGAkADQCABLQAAIABBts8Aai0AAEcNVCAAQQFGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyACIAU2AgAMkgILIAJBADYCACAGQQFqIQFBJwxVCyABIARGBEBBnAEhAwyRAgsCQAJAIAEtAABB1ABrDgIAAVQLIAFBAWohAUGGASEDDPgBCyABQQFqIQFBhwEhAwz3AQtBnQEhAyABIARGDY8CIAIoAgAiACAEIAFraiEFIAEgAGtBAWohBgJAA0AgAS0AACAAQbjPAGotAABHDVIgAEEBRg0BIABBAWohACAEIAFBAWoiAUcNAAsgAiAFNgIADJACCyACQQA2AgAgBkEBaiEBQSYMUwtBngEhAyABIARGDY4CIAIoAgAiACAEIAFraiEFIAEgAGtBAWohBgJAA0AgAS0AACAAQbrPAGotAABHDVEgAEEBRg0BIABBAWohACAEIAFBAWoiAUcNAAsgAiAFNgIADI8CCyACQQA2AgAgBkEBaiEBQQMMUgtBnwEhAyABIARGDY0CIAIoAgAiACAEIAFraiEFIAEgAGtBAmohBgJAA0AgAS0AACAAQe3PAGotAABHDVAgAEECRg0BIABBAWohACAEIAFBAWoiAUcNAAsgAiAFNgIADI4CCyACQQA2AgAgBkEBaiEBQQwMUQtBoAEhAyABIARGDYwCIAIoAgAiACAEIAFraiEFIAEgAGtBA2ohBgJAA0AgAS0AACAAQbzPAGotAABHDU8gAEEDRg0BIABBAWohACAEIAFBAWoiAUcNAAsgAiAFNgIADI0CCyACQQA2AgAgBkEBaiEBQQ0MUAsgASAERgRAQaEBIQMMjAILAkACQCABLQAAQcYAaw4LAE9PT09PT09PTwFPCyABQQFqIQFBiwEhAwzzAQsgAUEBaiEBQYwBIQMM8gELIAEgBEYEQEGiASEDDIsCCyABLQAAQdAARw1MIAFBAWohAQxGCyABIARGBEBBowEhAwyKAgsCQAJAIAEtAABByQBrDgcBTU1NTU0ATQsgAUEBaiEBQY4BIQMM8QELIAFBAWohAUEiDE0LQaQBIQMgASAERg2IAiACKAIAIgAgBCABa2ohBSABIABrQQFqIQYCQANAIAEtAAAgAEHAzwBqLQAARw1LIABBAUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAyJAgsgAkEANgIAIAZBAWohAUEdDEwLIAEgBEYEQEGlASEDDIgCCwJAAkAgAS0AAEHSAGsOAwBLAUsLIAFBAWohAUGQASEDDO8BCyABQQFqIQFBBAxLCyABIARGBEBBpgEhAwyHAgsCQAJAAkACQAJAIAEtAABBwQBrDhUATU1NTU1NTU1NTQFNTQJNTQNNTQRNCyABQQFqIQFBiAEhAwzxAQsgAUEBaiEBQYkBIQMM8AELIAFBAWohAUGKASEDDO8BCyABQQFqIQFBjwEhAwzuAQsgAUEBaiEBQZEBIQMM7QELQacBIQMgASAERg2FAiACKAIAIgAgBCABa2ohBSABIABrQQJqIQYCQANAIAEtAAAgAEHtzwBqLQAARw1IIABBAkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAyGAgsgAkEANgIAIAZBAWohAUERDEkLQagBIQMgASAERg2EAiACKAIAIgAgBCABa2ohBSABIABrQQJqIQYCQANAIAEtAAAgAEHCzwBqLQAARw1HIABBAkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAyFAgsgAkEANgIAIAZBAWohAUEsDEgLQakBIQMgASAERg2DAiACKAIAIgAgBCABa2ohBSABIABrQQRqIQYCQANAIAEtAAAgAEHFzwBqLQAARw1GIABBBEYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAyEAgsgAkEANgIAIAZBAWohAUErDEcLQaoBIQMgASAERg2CAiACKAIAIgAgBCABa2ohBSABIABrQQJqIQYCQANAIAEtAAAgAEHKzwBqLQAARw1FIABBAkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAyDAgsgAkEANgIAIAZBAWohAUEUDEYLIAEgBEYEQEGrASEDDIICCwJAAkACQAJAIAEtAABBwgBrDg8AAQJHR0dHR0dHR0dHRwNHCyABQQFqIQFBkwEhAwzrAQsgAUEBaiEBQZQBIQMM6gELIAFBAWohAUGVASEDDOkBCyABQQFqIQFBlgEhAwzoAQsgASAERgRAQawBIQMMgQILIAEtAABBxQBHDUIgAUEBaiEBDD0LQa0BIQMgASAERg3/ASACKAIAIgAgBCABa2ohBSABIABrQQJqIQYCQANAIAEtAAAgAEHNzwBqLQAARw1CIABBAkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAyAAgsgAkEANgIAIAZBAWohAUEODEMLIAEgBEYEQEGuASEDDP8BCyABLQAAQdAARw1AIAFBAWohAUElDEILQa8BIQMgASAERg39ASACKAIAIgAgBCABa2ohBSABIABrQQhqIQYCQANAIAEtAAAgAEHQzwBqLQAARw1AIABBCEYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAz+AQsgAkEANgIAIAZBAWohAUEqDEELIAEgBEYEQEGwASEDDP0BCwJAAkAgAS0AAEHVAGsOCwBAQEBAQEBAQEABQAsgAUEBaiEBQZoBIQMM5AELIAFBAWohAUGbASEDDOMBCyABIARGBEBBsQEhAwz8AQsCQAJAIAEtAABBwQBrDhQAPz8/Pz8/Pz8/Pz8/Pz8/Pz8/AT8LIAFBAWohAUGZASEDDOMBCyABQQFqIQFBnAEhAwziAQtBsgEhAyABIARGDfoBIAIoAgAiACAEIAFraiEFIAEgAGtBA2ohBgJAA0AgAS0AACAAQdnPAGotAABHDT0gAEEDRg0BIABBAWohACAEIAFBAWoiAUcNAAsgAiAFNgIADPsBCyACQQA2AgAgBkEBaiEBQSEMPgtBswEhAyABIARGDfkBIAIoAgAiACAEIAFraiEFIAEgAGtBBmohBgJAA0AgAS0AACAAQd3PAGotAABHDTwgAEEGRg0BIABBAWohACAEIAFBAWoiAUcNAAsgAiAFNgIADPoBCyACQQA2AgAgBkEBaiEBQRoMPQsgASAERgRAQbQBIQMM+QELAkACQAJAIAEtAABBxQBrDhEAPT09PT09PT09AT09PT09Aj0LIAFBAWohAUGdASEDDOEBCyABQQFqIQFBngEhAwzgAQsgAUEBaiEBQZ8BIQMM3wELQbUBIQMgASAERg33ASACKAIAIgAgBCABa2ohBSABIABrQQVqIQYCQANAIAEtAAAgAEHkzwBqLQAARw06IABBBUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAz4AQsgAkEANgIAIAZBAWohAUEoDDsLQbYBIQMgASAERg32ASACKAIAIgAgBCABa2ohBSABIABrQQJqIQYCQANAIAEtAAAgAEHqzwBqLQAARw05IABBAkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAz3AQsgAkEANgIAIAZBAWohAUEHDDoLIAEgBEYEQEG3ASEDDPYBCwJAAkAgAS0AAEHFAGsODgA5OTk5OTk5OTk5OTkBOQsgAUEBaiEBQaEBIQMM3QELIAFBAWohAUGiASEDDNwBC0G4ASEDIAEgBEYN9AEgAigCACIAIAQgAWtqIQUgASAAa0ECaiEGAkADQCABLQAAIABB7c8Aai0AAEcNNyAAQQJGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyACIAU2AgAM9QELIAJBADYCACAGQQFqIQFBEgw4C0G5ASEDIAEgBEYN8wEgAigCACIAIAQgAWtqIQUgASAAa0EBaiEGAkADQCABLQAAIABB8M8Aai0AAEcNNiAAQQFGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyACIAU2AgAM9AELIAJBADYCACAGQQFqIQFBIAw3C0G6ASEDIAEgBEYN8gEgAigCACIAIAQgAWtqIQUgASAAa0EBaiEGAkADQCABLQAAIABB8s8Aai0AAEcNNSAAQQFGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyACIAU2AgAM8wELIAJBADYCACAGQQFqIQFBDww2CyABIARGBEBBuwEhAwzyAQsCQAJAIAEtAABByQBrDgcANTU1NTUBNQsgAUEBaiEBQaUBIQMM2QELIAFBAWohAUGmASEDDNgBC0G8ASEDIAEgBEYN8AEgAigCACIAIAQgAWtqIQUgASAAa0EHaiEGAkADQCABLQAAIABB9M8Aai0AAEcNMyAAQQdGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyACIAU2AgAM8QELIAJBADYCACAGQQFqIQFBGww0CyABIARGBEBBvQEhAwzwAQsCQAJAAkAgAS0AAEHCAGsOEgA0NDQ0NDQ0NDQBNDQ0NDQ0AjQLIAFBAWohAUGkASEDDNgBCyABQQFqIQFBpwEhAwzXAQsgAUEBaiEBQagBIQMM1gELIAEgBEYEQEG+ASEDDO8BCyABLQAAQc4ARw0wIAFBAWohAQwsCyABIARGBEBBvwEhAwzuAQsCQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQCABLQAAQcEAaw4VAAECAz8EBQY/Pz8HCAkKCz8MDQ4PPwsgAUEBaiEBQegAIQMM4wELIAFBAWohAUHpACEDDOIBCyABQQFqIQFB7gAhAwzhAQsgAUEBaiEBQfIAIQMM4AELIAFBAWohAUHzACEDDN8BCyABQQFqIQFB9gAhAwzeAQsgAUEBaiEBQfcAIQMM3QELIAFBAWohAUH6ACEDDNwBCyABQQFqIQFBgwEhAwzbAQsgAUEBaiEBQYQBIQMM2gELIAFBAWohAUGFASEDDNkBCyABQQFqIQFBkgEhAwzYAQsgAUEBaiEBQZgBIQMM1wELIAFBAWohAUGgASEDDNYBCyABQQFqIQFBowEhAwzVAQsgAUEBaiEBQaoBIQMM1AELIAEgBEcEQCACQRA2AgggAiABNgIEQasBIQMM1AELQcABIQMM7AELQQAhAAJAIAIoAjgiA0UNACADKAI0IgNFDQAgAiADEQAAIQALIABFDV4gAEEVRw0HIAJB0QA2AhwgAiABNgIUIAJBsBc2AhAgAkEVNgIMQQAhAwzrAQsgAUEBaiABIARHDQgaQcIBIQMM6gELA0ACQCABLQAAQQprDgQIAAALAAsgBCABQQFqIgFHDQALQcMBIQMM6QELIAEgBEcEQCACQRE2AgggAiABNgIEQQEhAwzQAQtBxAEhAwzoAQsgASAERgRAQcUBIQMM6AELAkACQCABLQAAQQprDgQBKCgAKAsgAUEBagwJCyABQQFqDAULIAEgBEYEQEHGASEDDOcBCwJAAkAgAS0AAEEKaw4XAQsLAQsLCwsLCwsLCwsLCwsLCwsLCwALCyABQQFqIQELQbABIQMMzQELIAEgBEYEQEHIASEDDOYBCyABLQAAQSBHDQkgAkEAOwEyIAFBAWohAUGzASEDDMwBCwNAIAEhAAJAIAEgBEcEQCABLQAAQTBrQf8BcSIDQQpJDQEMJwtBxwEhAwzmAQsCQCACLwEyIgFBmTNLDQAgAiABQQpsIgU7ATIgBUH+/wNxIANB//8Dc0sNACAAQQFqIQEgAiADIAVqIgM7ATIgA0H//wNxQegHSQ0BCwtBACEDIAJBADYCHCACQcEJNgIQIAJBDTYCDCACIABBAWo2AhQM5AELIAJBADYCHCACIAE2AhQgAkHwDDYCECACQRs2AgxBACEDDOMBCyACKAIEIQAgAkEANgIEIAIgACABECYiAA0BIAFBAWoLIQFBrQEhAwzIAQsgAkHBATYCHCACIAA2AgwgAiABQQFqNgIUQQAhAwzgAQsgAigCBCEAIAJBADYCBCACIAAgARAmIgANASABQQFqCyEBQa4BIQMMxQELIAJBwgE2AhwgAiAANgIMIAIgAUEBajYCFEEAIQMM3QELIAJBADYCHCACIAE2AhQgAkGXCzYCECACQQ02AgxBACEDDNwBCyACQQA2AhwgAiABNgIUIAJB4xA2AhAgAkEJNgIMQQAhAwzbAQsgAkECOgAoDKwBC0EAIQMgAkEANgIcIAJBrws2AhAgAkECNgIMIAIgAUEBajYCFAzZAQtBAiEDDL8BC0ENIQMMvgELQSYhAwy9AQtBFSEDDLwBC0EWIQMMuwELQRghAwy6AQtBHCEDDLkBC0EdIQMMuAELQSAhAwy3AQtBISEDDLYBC0EjIQMMtQELQcYAIQMMtAELQS4hAwyzAQtBPSEDDLIBC0HLACEDDLEBC0HOACEDDLABC0HYACEDDK8BC0HZACEDDK4BC0HbACEDDK0BC0HxACEDDKwBC0H0ACEDDKsBC0GNASEDDKoBC0GXASEDDKkBC0GpASEDDKgBC0GvASEDDKcBC0GxASEDDKYBCyACQQA2AgALQQAhAyACQQA2AhwgAiABNgIUIAJB8Rs2AhAgAkEGNgIMDL0BCyACQQA2AgAgBkEBaiEBQSQLOgApIAIoAgQhACACQQA2AgQgAiAAIAEQJyIARQRAQeUAIQMMowELIAJB+QA2AhwgAiABNgIUIAIgADYCDEEAIQMMuwELIABBFUcEQCACQQA2AhwgAiABNgIUIAJBzA42AhAgAkEgNgIMQQAhAwy7AQsgAkH4ADYCHCACIAE2AhQgAkHKGDYCECACQRU2AgxBACEDDLoBCyACQQA2AhwgAiABNgIUIAJBjhs2AhAgAkEGNgIMQQAhAwy5AQsgAkEANgIcIAIgATYCFCACQf4RNgIQIAJBBzYCDEEAIQMMuAELIAJBADYCHCACIAE2AhQgAkGMHDYCECACQQc2AgxBACEDDLcBCyACQQA2AhwgAiABNgIUIAJBww82AhAgAkEHNgIMQQAhAwy2AQsgAkEANgIcIAIgATYCFCACQcMPNgIQIAJBBzYCDEEAIQMMtQELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0RIAJB5QA2AhwgAiABNgIUIAIgADYCDEEAIQMMtAELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0gIAJB0wA2AhwgAiABNgIUIAIgADYCDEEAIQMMswELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0iIAJB0gA2AhwgAiABNgIUIAIgADYCDEEAIQMMsgELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0OIAJB5QA2AhwgAiABNgIUIAIgADYCDEEAIQMMsQELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0dIAJB0wA2AhwgAiABNgIUIAIgADYCDEEAIQMMsAELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0fIAJB0gA2AhwgAiABNgIUIAIgADYCDEEAIQMMrwELIABBP0cNASABQQFqCyEBQQUhAwyUAQtBACEDIAJBADYCHCACIAE2AhQgAkH9EjYCECACQQc2AgwMrAELIAJBADYCHCACIAE2AhQgAkHcCDYCECACQQc2AgxBACEDDKsBCyACKAIEIQAgAkEANgIEIAIgACABECUiAEUNByACQeUANgIcIAIgATYCFCACIAA2AgxBACEDDKoBCyACKAIEIQAgAkEANgIEIAIgACABECUiAEUNFiACQdMANgIcIAIgATYCFCACIAA2AgxBACEDDKkBCyACKAIEIQAgAkEANgIEIAIgACABECUiAEUNGCACQdIANgIcIAIgATYCFCACIAA2AgxBACEDDKgBCyACQQA2AhwgAiABNgIUIAJBxgo2AhAgAkEHNgIMQQAhAwynAQsgAigCBCEAIAJBADYCBCACIAAgARAlIgBFDQMgAkHlADYCHCACIAE2AhQgAiAANgIMQQAhAwymAQsgAigCBCEAIAJBADYCBCACIAAgARAlIgBFDRIgAkHTADYCHCACIAE2AhQgAiAANgIMQQAhAwylAQsgAigCBCEAIAJBADYCBCACIAAgARAlIgBFDRQgAkHSADYCHCACIAE2AhQgAiAANgIMQQAhAwykAQsgAigCBCEAIAJBADYCBCACIAAgARAlIgBFDQAgAkHlADYCHCACIAE2AhQgAiAANgIMQQAhAwyjAQtB1QAhAwyJAQsgAEEVRwRAIAJBADYCHCACIAE2AhQgAkG5DTYCECACQRo2AgxBACEDDKIBCyACQeQANgIcIAIgATYCFCACQeMXNgIQIAJBFTYCDEEAIQMMoQELIAJBADYCACAGQQFqIQEgAi0AKSIAQSNrQQtJDQQCQCAAQQZLDQBBASAAdEHKAHFFDQAMBQtBACEDIAJBADYCHCACIAE2AhQgAkH3CTYCECACQQg2AgwMoAELIAJBADYCACAGQQFqIQEgAi0AKUEhRg0DIAJBADYCHCACIAE2AhQgAkGbCjYCECACQQg2AgxBACEDDJ8BCyACQQA2AgALQQAhAyACQQA2AhwgAiABNgIUIAJBkDM2AhAgAkEINgIMDJ0BCyACQQA2AgAgBkEBaiEBIAItAClBI0kNACACQQA2AhwgAiABNgIUIAJB0wk2AhAgAkEINgIMQQAhAwycAQtB0QAhAwyCAQsgAS0AAEEwayIAQf8BcUEKSQRAIAIgADoAKiABQQFqIQFBzwAhAwyCAQsgAigCBCEAIAJBADYCBCACIAAgARAoIgBFDYYBIAJB3gA2AhwgAiABNgIUIAIgADYCDEEAIQMMmgELIAIoAgQhACACQQA2AgQgAiAAIAEQKCIARQ2GASACQdwANgIcIAIgATYCFCACIAA2AgxBACEDDJkBCyACKAIEIQAgAkEANgIEIAIgACAFECgiAEUEQCAFIQEMhwELIAJB2gA2AhwgAiAFNgIUIAIgADYCDAyYAQtBACEBQQEhAwsgAiADOgArIAVBAWohAwJAAkACQCACLQAtQRBxDQACQAJAAkAgAi0AKg4DAQACBAsgBkUNAwwCCyAADQEMAgsgAUUNAQsgAigCBCEAIAJBADYCBCACIAAgAxAoIgBFBEAgAyEBDAILIAJB2AA2AhwgAiADNgIUIAIgADYCDEEAIQMMmAELIAIoAgQhACACQQA2AgQgAiAAIAMQKCIARQRAIAMhAQyHAQsgAkHZADYCHCACIAM2AhQgAiAANgIMQQAhAwyXAQtBzAAhAwx9CyAAQRVHBEAgAkEANgIcIAIgATYCFCACQZQNNgIQIAJBITYCDEEAIQMMlgELIAJB1wA2AhwgAiABNgIUIAJByRc2AhAgAkEVNgIMQQAhAwyVAQtBACEDIAJBADYCHCACIAE2AhQgAkGAETYCECACQQk2AgwMlAELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0AIAJB0wA2AhwgAiABNgIUIAIgADYCDEEAIQMMkwELQckAIQMMeQsgAkEANgIcIAIgATYCFCACQcEoNgIQIAJBBzYCDCACQQA2AgBBACEDDJEBCyACKAIEIQBBACEDIAJBADYCBCACIAAgARAlIgBFDQAgAkHSADYCHCACIAE2AhQgAiAANgIMDJABC0HIACEDDHYLIAJBADYCACAFIQELIAJBgBI7ASogAUEBaiEBQQAhAAJAIAIoAjgiA0UNACADKAIwIgNFDQAgAiADEQAAIQALIAANAQtBxwAhAwxzCyAAQRVGBEAgAkHRADYCHCACIAE2AhQgAkHjFzYCECACQRU2AgxBACEDDIwBC0EAIQMgAkEANgIcIAIgATYCFCACQbkNNgIQIAJBGjYCDAyLAQtBACEDIAJBADYCHCACIAE2AhQgAkGgGTYCECACQR42AgwMigELIAEtAABBOkYEQCACKAIEIQBBACEDIAJBADYCBCACIAAgARApIgBFDQEgAkHDADYCHCACIAA2AgwgAiABQQFqNgIUDIoBC0EAIQMgAkEANgIcIAIgATYCFCACQbERNgIQIAJBCjYCDAyJAQsgAUEBaiEBQTshAwxvCyACQcMANgIcIAIgADYCDCACIAFBAWo2AhQMhwELQQAhAyACQQA2AhwgAiABNgIUIAJB8A42AhAgAkEcNgIMDIYBCyACIAIvATBBEHI7ATAMZgsCQCACLwEwIgBBCHFFDQAgAi0AKEEBRw0AIAItAC1BCHFFDQMLIAIgAEH3+wNxQYAEcjsBMAwECyABIARHBEACQANAIAEtAABBMGsiAEH/AXFBCk8EQEE1IQMMbgsgAikDICIKQpmz5syZs+bMGVYNASACIApCCn4iCjcDICAKIACtQv8BgyILQn+FVg0BIAIgCiALfDcDICAEIAFBAWoiAUcNAAtBOSEDDIUBCyACKAIEIQBBACEDIAJBADYCBCACIAAgAUEBaiIBECoiAA0MDHcLQTkhAwyDAQsgAi0AMEEgcQ0GQcUBIQMMaQtBACEDIAJBADYCBCACIAEgARAqIgBFDQQgAkE6NgIcIAIgADYCDCACIAFBAWo2AhQMgQELIAItAChBAUcNACACLQAtQQhxRQ0BC0E3IQMMZgsgAigCBCEAQQAhAyACQQA2AgQgAiAAIAEQKiIABEAgAkE7NgIcIAIgADYCDCACIAFBAWo2AhQMfwsgAUEBaiEBDG4LIAJBCDoALAwECyABQQFqIQEMbQtBACEDIAJBADYCHCACIAE2AhQgAkHkEjYCECACQQQ2AgwMewsgAigCBCEAQQAhAyACQQA2AgQgAiAAIAEQKiIARQ1sIAJBNzYCHCACIAE2AhQgAiAANgIMDHoLIAIgAi8BMEEgcjsBMAtBMCEDDF8LIAJBNjYCHCACIAE2AhQgAiAANgIMDHcLIABBLEcNASABQQFqIQBBASEBAkACQAJAAkACQCACLQAsQQVrDgQDAQIEAAsgACEBDAQLQQIhAQwBC0EEIQELIAJBAToALCACIAIvATAgAXI7ATAgACEBDAELIAIgAi8BMEEIcjsBMCAAIQELQTkhAwxcCyACQQA6ACwLQTQhAwxaCyABIARGBEBBLSEDDHMLAkACQANAAkAgAS0AAEEKaw4EAgAAAwALIAQgAUEBaiIBRw0AC0EtIQMMdAsgAigCBCEAQQAhAyACQQA2AgQgAiAAIAEQKiIARQ0CIAJBLDYCHCACIAE2AhQgAiAANgIMDHMLIAIoAgQhAEEAIQMgAkEANgIEIAIgACABECoiAEUEQCABQQFqIQEMAgsgAkEsNgIcIAIgADYCDCACIAFBAWo2AhQMcgsgAS0AAEENRgRAIAIoAgQhAEEAIQMgAkEANgIEIAIgACABECoiAEUEQCABQQFqIQEMAgsgAkEsNgIcIAIgADYCDCACIAFBAWo2AhQMcgsgAi0ALUEBcQRAQcQBIQMMWQsgAigCBCEAQQAhAyACQQA2AgQgAiAAIAEQKiIADQEMZQtBLyEDDFcLIAJBLjYCHCACIAE2AhQgAiAANgIMDG8LQQAhAyACQQA2AhwgAiABNgIUIAJB8BQ2AhAgAkEDNgIMDG4LQQEhAwJAAkACQAJAIAItACxBBWsOBAMBAgAECyACIAIvATBBCHI7ATAMAwtBAiEDDAELQQQhAwsgAkEBOgAsIAIgAi8BMCADcjsBMAtBKiEDDFMLQQAhAyACQQA2AhwgAiABNgIUIAJB4Q82AhAgAkEKNgIMDGsLQQEhAwJAAkACQAJAAkACQCACLQAsQQJrDgcFBAQDAQIABAsgAiACLwEwQQhyOwEwDAMLQQIhAwwBC0EEIQMLIAJBAToALCACIAIvATAgA3I7ATALQSshAwxSC0EAIQMgAkEANgIcIAIgATYCFCACQasSNgIQIAJBCzYCDAxqC0EAIQMgAkEANgIcIAIgATYCFCACQf0NNgIQIAJBHTYCDAxpCyABIARHBEADQCABLQAAQSBHDUggBCABQQFqIgFHDQALQSUhAwxpC0ElIQMMaAsgAi0ALUEBcQRAQcMBIQMMTwsgAigCBCEAQQAhAyACQQA2AgQgAiAAIAEQKSIABEAgAkEmNgIcIAIgADYCDCACIAFBAWo2AhQMaAsgAUEBaiEBDFwLIAFBAWohASACLwEwIgBBgAFxBEBBACEAAkAgAigCOCIDRQ0AIAMoAlQiA0UNACACIAMRAAAhAAsgAEUNBiAAQRVHDR8gAkEFNgIcIAIgATYCFCACQfkXNgIQIAJBFTYCDEEAIQMMZwsCQCAAQaAEcUGgBEcNACACLQAtQQJxDQBBACEDIAJBADYCHCACIAE2AhQgAkGWEzYCECACQQQ2AgwMZwsgAgJ/IAIvATBBFHFBFEYEQEEBIAItAChBAUYNARogAi8BMkHlAEYMAQsgAi0AKUEFRgs6AC5BACEAAkAgAigCOCIDRQ0AIAMoAiQiA0UNACACIAMRAAAhAAsCQAJAAkACQAJAIAAOFgIBAAQEBAQEBAQEBAQEBAQEBAQEBAMECyACQQE6AC4LIAIgAi8BMEHAAHI7ATALQSchAwxPCyACQSM2AhwgAiABNgIUIAJBpRY2AhAgAkEVNgIMQQAhAwxnC0EAIQMgAkEANgIcIAIgATYCFCACQdULNgIQIAJBETYCDAxmC0EAIQACQCACKAI4IgNFDQAgAygCLCIDRQ0AIAIgAxEAACEACyAADQELQQ4hAwxLCyAAQRVGBEAgAkECNgIcIAIgATYCFCACQbAYNgIQIAJBFTYCDEEAIQMMZAtBACEDIAJBADYCHCACIAE2AhQgAkGnDjYCECACQRI2AgwMYwtBACEDIAJBADYCHCACIAE2AhQgAkGqHDYCECACQQ82AgwMYgsgAigCBCEAQQAhAyACQQA2AgQgAiAAIAEgCqdqIgEQKyIARQ0AIAJBBTYCHCACIAE2AhQgAiAANgIMDGELQQ8hAwxHC0EAIQMgAkEANgIcIAIgATYCFCACQc0TNgIQIAJBDDYCDAxfC0IBIQoLIAFBAWohAQJAIAIpAyAiC0L//////////w9YBEAgAiALQgSGIAqENwMgDAELQQAhAyACQQA2AhwgAiABNgIUIAJBrQk2AhAgAkEMNgIMDF4LQSQhAwxEC0EAIQMgAkEANgIcIAIgATYCFCACQc0TNgIQIAJBDDYCDAxcCyACKAIEIQBBACEDIAJBADYCBCACIAAgARAsIgBFBEAgAUEBaiEBDFILIAJBFzYCHCACIAA2AgwgAiABQQFqNgIUDFsLIAIoAgQhAEEAIQMgAkEANgIEAkAgAiAAIAEQLCIARQRAIAFBAWohAQwBCyACQRY2AhwgAiAANgIMIAIgAUEBajYCFAxbC0EfIQMMQQtBACEDIAJBADYCHCACIAE2AhQgAkGaDzYCECACQSI2AgwMWQsgAigCBCEAQQAhAyACQQA2AgQgAiAAIAEQLSIARQRAIAFBAWohAQxQCyACQRQ2AhwgAiAANgIMIAIgAUEBajYCFAxYCyACKAIEIQBBACEDIAJBADYCBAJAIAIgACABEC0iAEUEQCABQQFqIQEMAQsgAkETNgIcIAIgADYCDCACIAFBAWo2AhQMWAtBHiEDDD4LQQAhAyACQQA2AhwgAiABNgIUIAJBxgw2AhAgAkEjNgIMDFYLIAIoAgQhAEEAIQMgAkEANgIEIAIgACABEC0iAEUEQCABQQFqIQEMTgsgAkERNgIcIAIgADYCDCACIAFBAWo2AhQMVQsgAkEQNgIcIAIgATYCFCACIAA2AgwMVAtBACEDIAJBADYCHCACIAE2AhQgAkHGDDYCECACQSM2AgwMUwtBACEDIAJBADYCHCACIAE2AhQgAkHAFTYCECACQQI2AgwMUgsgAigCBCEAQQAhAyACQQA2AgQCQCACIAAgARAtIgBFBEAgAUEBaiEBDAELIAJBDjYCHCACIAA2AgwgAiABQQFqNgIUDFILQRshAww4C0EAIQMgAkEANgIcIAIgATYCFCACQcYMNgIQIAJBIzYCDAxQCyACKAIEIQBBACEDIAJBADYCBAJAIAIgACABECwiAEUEQCABQQFqIQEMAQsgAkENNgIcIAIgADYCDCACIAFBAWo2AhQMUAtBGiEDDDYLQQAhAyACQQA2AhwgAiABNgIUIAJBmg82AhAgAkEiNgIMDE4LIAIoAgQhAEEAIQMgAkEANgIEAkAgAiAAIAEQLCIARQRAIAFBAWohAQwBCyACQQw2AhwgAiAANgIMIAIgAUEBajYCFAxOC0EZIQMMNAtBACEDIAJBADYCHCACIAE2AhQgAkGaDzYCECACQSI2AgwMTAsgAEEVRwRAQQAhAyACQQA2AhwgAiABNgIUIAJBgww2AhAgAkETNgIMDEwLIAJBCjYCHCACIAE2AhQgAkHkFjYCECACQRU2AgxBACEDDEsLIAIoAgQhAEEAIQMgAkEANgIEIAIgACABIAqnaiIBECsiAARAIAJBBzYCHCACIAE2AhQgAiAANgIMDEsLQRMhAwwxCyAAQRVHBEBBACEDIAJBADYCHCACIAE2AhQgAkHaDTYCECACQRQ2AgwMSgsgAkEeNgIcIAIgATYCFCACQfkXNgIQIAJBFTYCDEEAIQMMSQtBACEAAkAgAigCOCIDRQ0AIAMoAiwiA0UNACACIAMRAAAhAAsgAEUNQSAAQRVGBEAgAkEDNgIcIAIgATYCFCACQbAYNgIQIAJBFTYCDEEAIQMMSQtBACEDIAJBADYCHCACIAE2AhQgAkGnDjYCECACQRI2AgwMSAtBACEDIAJBADYCHCACIAE2AhQgAkHaDTYCECACQRQ2AgwMRwtBACEDIAJBADYCHCACIAE2AhQgAkGnDjYCECACQRI2AgwMRgsgAkEAOgAvIAItAC1BBHFFDT8LIAJBADoALyACQQE6ADRBACEDDCsLQQAhAyACQQA2AhwgAkHkETYCECACQQc2AgwgAiABQQFqNgIUDEMLAkADQAJAIAEtAABBCmsOBAACAgACCyAEIAFBAWoiAUcNAAtB3QEhAwxDCwJAAkAgAi0ANEEBRw0AQQAhAAJAIAIoAjgiA0UNACADKAJYIgNFDQAgAiADEQAAIQALIABFDQAgAEEVRw0BIAJB3AE2AhwgAiABNgIUIAJB1RY2AhAgAkEVNgIMQQAhAwxEC0HBASEDDCoLIAJBADYCHCACIAE2AhQgAkHpCzYCECACQR82AgxBACEDDEILAkACQCACLQAoQQFrDgIEAQALQcABIQMMKQtBuQEhAwwoCyACQQI6AC9BACEAAkAgAigCOCIDRQ0AIAMoAgAiA0UNACACIAMRAAAhAAsgAEUEQEHCASEDDCgLIABBFUcEQCACQQA2AhwgAiABNgIUIAJBpAw2AhAgAkEQNgIMQQAhAwxBCyACQdsBNgIcIAIgATYCFCACQfoWNgIQIAJBFTYCDEEAIQMMQAsgASAERgRAQdoBIQMMQAsgAS0AAEHIAEYNASACQQE6ACgLQawBIQMMJQtBvwEhAwwkCyABIARHBEAgAkEQNgIIIAIgATYCBEG+ASEDDCQLQdkBIQMMPAsgASAERgRAQdgBIQMMPAsgAS0AAEHIAEcNBCABQQFqIQFBvQEhAwwiCyABIARGBEBB1wEhAww7CwJAAkAgAS0AAEHFAGsOEAAFBQUFBQUFBQUFBQUFBQEFCyABQQFqIQFBuwEhAwwiCyABQQFqIQFBvAEhAwwhC0HWASEDIAEgBEYNOSACKAIAIgAgBCABa2ohBSABIABrQQJqIQYCQANAIAEtAAAgAEGD0ABqLQAARw0DIABBAkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAw6CyACKAIEIQAgAkIANwMAIAIgACAGQQFqIgEQJyIARQRAQcYBIQMMIQsgAkHVATYCHCACIAE2AhQgAiAANgIMQQAhAww5C0HUASEDIAEgBEYNOCACKAIAIgAgBCABa2ohBSABIABrQQFqIQYCQANAIAEtAAAgAEGB0ABqLQAARw0CIABBAUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAw5CyACQYEEOwEoIAIoAgQhACACQgA3AwAgAiAAIAZBAWoiARAnIgANAwwCCyACQQA2AgALQQAhAyACQQA2AhwgAiABNgIUIAJB2Bs2AhAgAkEINgIMDDYLQboBIQMMHAsgAkHTATYCHCACIAE2AhQgAiAANgIMQQAhAww0C0EAIQACQCACKAI4IgNFDQAgAygCOCIDRQ0AIAIgAxEAACEACyAARQ0AIABBFUYNASACQQA2AhwgAiABNgIUIAJBzA42AhAgAkEgNgIMQQAhAwwzC0HkACEDDBkLIAJB+AA2AhwgAiABNgIUIAJByhg2AhAgAkEVNgIMQQAhAwwxC0HSASEDIAQgASIARg0wIAQgAWsgAigCACIBaiEFIAAgAWtBBGohBgJAA0AgAC0AACABQfzPAGotAABHDQEgAUEERg0DIAFBAWohASAEIABBAWoiAEcNAAsgAiAFNgIADDELIAJBADYCHCACIAA2AhQgAkGQMzYCECACQQg2AgwgAkEANgIAQQAhAwwwCyABIARHBEAgAkEONgIIIAIgATYCBEG3ASEDDBcLQdEBIQMMLwsgAkEANgIAIAZBAWohAQtBuAEhAwwUCyABIARGBEBB0AEhAwwtCyABLQAAQTBrIgBB/wFxQQpJBEAgAiAAOgAqIAFBAWohAUG2ASEDDBQLIAIoAgQhACACQQA2AgQgAiAAIAEQKCIARQ0UIAJBzwE2AhwgAiABNgIUIAIgADYCDEEAIQMMLAsgASAERgRAQc4BIQMMLAsCQCABLQAAQS5GBEAgAUEBaiEBDAELIAIoAgQhACACQQA2AgQgAiAAIAEQKCIARQ0VIAJBzQE2AhwgAiABNgIUIAIgADYCDEEAIQMMLAtBtQEhAwwSCyAEIAEiBUYEQEHMASEDDCsLQQAhAEEBIQFBASEGQQAhAwJAAkACQAJAAkACfwJAAkACQAJAAkACQAJAIAUtAABBMGsOCgoJAAECAwQFBggLC0ECDAYLQQMMBQtBBAwEC0EFDAMLQQYMAgtBBwwBC0EICyEDQQAhAUEAIQYMAgtBCSEDQQEhAEEAIQFBACEGDAELQQAhAUEBIQMLIAIgAzoAKyAFQQFqIQMCQAJAIAItAC1BEHENAAJAAkACQCACLQAqDgMBAAIECyAGRQ0DDAILIAANAQwCCyABRQ0BCyACKAIEIQAgAkEANgIEIAIgACADECgiAEUEQCADIQEMAwsgAkHJATYCHCACIAM2AhQgAiAANgIMQQAhAwwtCyACKAIEIQAgAkEANgIEIAIgACADECgiAEUEQCADIQEMGAsgAkHKATYCHCACIAM2AhQgAiAANgIMQQAhAwwsCyACKAIEIQAgAkEANgIEIAIgACAFECgiAEUEQCAFIQEMFgsgAkHLATYCHCACIAU2AhQgAiAANgIMDCsLQbQBIQMMEQtBACEAAkAgAigCOCIDRQ0AIAMoAjwiA0UNACACIAMRAAAhAAsCQCAABEAgAEEVRg0BIAJBADYCHCACIAE2AhQgAkGUDTYCECACQSE2AgxBACEDDCsLQbIBIQMMEQsgAkHIATYCHCACIAE2AhQgAkHJFzYCECACQRU2AgxBACEDDCkLIAJBADYCACAGQQFqIQFB9QAhAwwPCyACLQApQQVGBEBB4wAhAwwPC0HiACEDDA4LIAAhASACQQA2AgALIAJBADoALEEJIQMMDAsgAkEANgIAIAdBAWohAUHAACEDDAsLQQELOgAsIAJBADYCACAGQQFqIQELQSkhAwwIC0E4IQMMBwsCQCABIARHBEADQCABLQAAQYA+ai0AACIAQQFHBEAgAEECRw0DIAFBAWohAQwFCyAEIAFBAWoiAUcNAAtBPiEDDCELQT4hAwwgCwsgAkEAOgAsDAELQQshAwwEC0E6IQMMAwsgAUEBaiEBQS0hAwwCCyACIAE6ACwgAkEANgIAIAZBAWohAUEMIQMMAQsgAkEANgIAIAZBAWohAUEKIQMMAAsAC0EAIQMgAkEANgIcIAIgATYCFCACQc0QNgIQIAJBCTYCDAwXC0EAIQMgAkEANgIcIAIgATYCFCACQekKNgIQIAJBCTYCDAwWC0EAIQMgAkEANgIcIAIgATYCFCACQbcQNgIQIAJBCTYCDAwVC0EAIQMgAkEANgIcIAIgATYCFCACQZwRNgIQIAJBCTYCDAwUC0EAIQMgAkEANgIcIAIgATYCFCACQc0QNgIQIAJBCTYCDAwTC0EAIQMgAkEANgIcIAIgATYCFCACQekKNgIQIAJBCTYCDAwSC0EAIQMgAkEANgIcIAIgATYCFCACQbcQNgIQIAJBCTYCDAwRC0EAIQMgAkEANgIcIAIgATYCFCACQZwRNgIQIAJBCTYCDAwQC0EAIQMgAkEANgIcIAIgATYCFCACQZcVNgIQIAJBDzYCDAwPC0EAIQMgAkEANgIcIAIgATYCFCACQZcVNgIQIAJBDzYCDAwOC0EAIQMgAkEANgIcIAIgATYCFCACQcASNgIQIAJBCzYCDAwNC0EAIQMgAkEANgIcIAIgATYCFCACQZUJNgIQIAJBCzYCDAwMC0EAIQMgAkEANgIcIAIgATYCFCACQeEPNgIQIAJBCjYCDAwLC0EAIQMgAkEANgIcIAIgATYCFCACQfsPNgIQIAJBCjYCDAwKC0EAIQMgAkEANgIcIAIgATYCFCACQfEZNgIQIAJBAjYCDAwJC0EAIQMgAkEANgIcIAIgATYCFCACQcQUNgIQIAJBAjYCDAwIC0EAIQMgAkEANgIcIAIgATYCFCACQfIVNgIQIAJBAjYCDAwHCyACQQI2AhwgAiABNgIUIAJBnBo2AhAgAkEWNgIMQQAhAwwGC0EBIQMMBQtB1AAhAyABIARGDQQgCEEIaiEJIAIoAgAhBQJAAkAgASAERwRAIAVB2MIAaiEHIAQgBWogAWshACAFQX9zQQpqIgUgAWohBgNAIAEtAAAgBy0AAEcEQEECIQcMAwsgBUUEQEEAIQcgBiEBDAMLIAVBAWshBSAHQQFqIQcgBCABQQFqIgFHDQALIAAhBSAEIQELIAlBATYCACACIAU2AgAMAQsgAkEANgIAIAkgBzYCAAsgCSABNgIEIAgoAgwhACAIKAIIDgMBBAIACwALIAJBADYCHCACQbUaNgIQIAJBFzYCDCACIABBAWo2AhRBACEDDAILIAJBADYCHCACIAA2AhQgAkHKGjYCECACQQk2AgxBACEDDAELIAEgBEYEQEEiIQMMAQsgAkEJNgIIIAIgATYCBEEhIQMLIAhBEGokACADRQRAIAIoAgwhAAwBCyACIAM2AhxBACEAIAIoAgQiAUUNACACIAEgBCACKAIIEQEAIgFFDQAgAiAENgIUIAIgATYCDCABIQALIAALvgIBAn8gAEEAOgAAIABB3ABqIgFBAWtBADoAACAAQQA6AAIgAEEAOgABIAFBA2tBADoAACABQQJrQQA6AAAgAEEAOgADIAFBBGtBADoAAEEAIABrQQNxIgEgAGoiAEEANgIAQdwAIAFrQXxxIgIgAGoiAUEEa0EANgIAAkAgAkEJSQ0AIABBADYCCCAAQQA2AgQgAUEIa0EANgIAIAFBDGtBADYCACACQRlJDQAgAEEANgIYIABBADYCFCAAQQA2AhAgAEEANgIMIAFBEGtBADYCACABQRRrQQA2AgAgAUEYa0EANgIAIAFBHGtBADYCACACIABBBHFBGHIiAmsiAUEgSQ0AIAAgAmohAANAIABCADcDGCAAQgA3AxAgAEIANwMIIABCADcDACAAQSBqIQAgAUEgayIBQR9LDQALCwtWAQF/AkAgACgCDA0AAkACQAJAAkAgAC0ALw4DAQADAgsgACgCOCIBRQ0AIAEoAiwiAUUNACAAIAERAAAiAQ0DC0EADwsACyAAQcMWNgIQQQ4hAQsgAQsaACAAKAIMRQRAIABB0Rs2AhAgAEEVNgIMCwsUACAAKAIMQRVGBEAgAEEANgIMCwsUACAAKAIMQRZGBEAgAEEANgIMCwsHACAAKAIMCwcAIAAoAhALCQAgACABNgIQCwcAIAAoAhQLFwAgAEEkTwRAAAsgAEECdEGgM2ooAgALFwAgAEEuTwRAAAsgAEECdEGwNGooAgALvwkBAX9B6yghAQJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAIABB5ABrDvQDY2IAAWFhYWFhYQIDBAVhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhBgcICQoLDA0OD2FhYWFhEGFhYWFhYWFhYWFhEWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYRITFBUWFxgZGhthYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhHB0eHyAhIiMkJSYnKCkqKywtLi8wMTIzNDU2YTc4OTphYWFhYWFhYTthYWE8YWFhYT0+P2FhYWFhYWFhQGFhQWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYUJDREVGR0hJSktMTU5PUFFSU2FhYWFhYWFhVFVWV1hZWlthXF1hYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFeYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhX2BhC0HhJw8LQaQhDwtByywPC0H+MQ8LQcAkDwtBqyQPC0GNKA8LQeImDwtBgDAPC0G5Lw8LQdckDwtB7x8PC0HhHw8LQfofDwtB8iAPC0GoLw8LQa4yDwtBiDAPC0HsJw8LQYIiDwtBjh0PC0HQLg8LQcojDwtBxTIPC0HfHA8LQdIcDwtBxCAPC0HXIA8LQaIfDwtB7S4PC0GrMA8LQdQlDwtBzC4PC0H6Lg8LQfwrDwtB0jAPC0HxHQ8LQbsgDwtB9ysPC0GQMQ8LQdcxDwtBoi0PC0HUJw8LQeArDwtBnywPC0HrMQ8LQdUfDwtByjEPC0HeJQ8LQdQeDwtB9BwPC0GnMg8LQbEdDwtBoB0PC0G5MQ8LQbwwDwtBkiEPC0GzJg8LQeksDwtBrB4PC0HUKw8LQfcmDwtBgCYPC0GwIQ8LQf4eDwtBjSMPC0GJLQ8LQfciDwtBoDEPC0GuHw8LQcYlDwtB6B4PC0GTIg8LQcIvDwtBwx0PC0GLLA8LQeEdDwtBjS8PC0HqIQ8LQbQtDwtB0i8PC0HfMg8LQdIyDwtB8DAPC0GpIg8LQfkjDwtBmR4PC0G1LA8LQZswDwtBkjIPC0G2Kw8LQcIiDwtB+DIPC0GeJQ8LQdAiDwtBuh4PC0GBHg8LAAtB1iEhAQsgAQsWACAAIAAtAC1B/gFxIAFBAEdyOgAtCxkAIAAgAC0ALUH9AXEgAUEAR0EBdHI6AC0LGQAgACAALQAtQfsBcSABQQBHQQJ0cjoALQsZACAAIAAtAC1B9wFxIAFBAEdBA3RyOgAtCz4BAn8CQCAAKAI4IgNFDQAgAygCBCIDRQ0AIAAgASACIAFrIAMRAQAiBEF/Rw0AIABBxhE2AhBBGCEECyAECz4BAn8CQCAAKAI4IgNFDQAgAygCCCIDRQ0AIAAgASACIAFrIAMRAQAiBEF/Rw0AIABB9go2AhBBGCEECyAECz4BAn8CQCAAKAI4IgNFDQAgAygCDCIDRQ0AIAAgASACIAFrIAMRAQAiBEF/Rw0AIABB7Ro2AhBBGCEECyAECz4BAn8CQCAAKAI4IgNFDQAgAygCECIDRQ0AIAAgASACIAFrIAMRAQAiBEF/Rw0AIABBlRA2AhBBGCEECyAECz4BAn8CQCAAKAI4IgNFDQAgAygCFCIDRQ0AIAAgASACIAFrIAMRAQAiBEF/Rw0AIABBqhs2AhBBGCEECyAECz4BAn8CQCAAKAI4IgNFDQAgAygCGCIDRQ0AIAAgASACIAFrIAMRAQAiBEF/Rw0AIABB7RM2AhBBGCEECyAECz4BAn8CQCAAKAI4IgNFDQAgAygCKCIDRQ0AIAAgASACIAFrIAMRAQAiBEF/Rw0AIABB9gg2AhBBGCEECyAECz4BAn8CQCAAKAI4IgNFDQAgAygCHCIDRQ0AIAAgASACIAFrIAMRAQAiBEF/Rw0AIABBwhk2AhBBGCEECyAECz4BAn8CQCAAKAI4IgNFDQAgAygCICIDRQ0AIAAgASACIAFrIAMRAQAiBEF/Rw0AIABBlBQ2AhBBGCEECyAEC1kBAn8CQCAALQAoQQFGDQAgAC8BMiIBQeQAa0HkAEkNACABQcwBRg0AIAFBsAJGDQAgAC8BMCIAQcAAcQ0AQQEhAiAAQYgEcUGABEYNACAAQShxRSECCyACC4wBAQJ/AkACQAJAIAAtACpFDQAgAC0AK0UNACAALwEwIgFBAnFFDQEMAgsgAC8BMCIBQQFxRQ0BC0EBIQIgAC0AKEEBRg0AIAAvATIiAEHkAGtB5ABJDQAgAEHMAUYNACAAQbACRg0AIAFBwABxDQBBACECIAFBiARxQYAERg0AIAFBKHFBAEchAgsgAgtXACAAQRhqQgA3AwAgAEIANwMAIABBOGpCADcDACAAQTBqQgA3AwAgAEEoakIANwMAIABBIGpCADcDACAAQRBqQgA3AwAgAEEIakIANwMAIABB3QE2AhwLBgAgABAyC5otAQt/IwBBEGsiCiQAQaTQACgCACIJRQRAQeTTACgCACIFRQRAQfDTAEJ/NwIAQejTAEKAgISAgIDAADcCAEHk0wAgCkEIakFwcUHYqtWqBXMiBTYCAEH40wBBADYCAEHI0wBBADYCAAtBzNMAQYDUBDYCAEGc0ABBgNQENgIAQbDQACAFNgIAQazQAEF/NgIAQdDTAEGArAM2AgADQCABQcjQAGogAUG80ABqIgI2AgAgAiABQbTQAGoiAzYCACABQcDQAGogAzYCACABQdDQAGogAUHE0ABqIgM2AgAgAyACNgIAIAFB2NAAaiABQczQAGoiAjYCACACIAM2AgAgAUHU0ABqIAI2AgAgAUEgaiIBQYACRw0AC0GM1ARBwasDNgIAQajQAEH00wAoAgA2AgBBmNAAQcCrAzYCAEGk0ABBiNQENgIAQcz/B0E4NgIAQYjUBCEJCwJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAIABB7AFNBEBBjNAAKAIAIgZBECAAQRNqQXBxIABBC0kbIgRBA3YiAHYiAUEDcQRAAkAgAUEBcSAAckEBcyICQQN0IgBBtNAAaiIBIABBvNAAaigCACIAKAIIIgNGBEBBjNAAIAZBfiACd3E2AgAMAQsgASADNgIIIAMgATYCDAsgAEEIaiEBIAAgAkEDdCICQQNyNgIEIAAgAmoiACAAKAIEQQFyNgIEDBELQZTQACgCACIIIARPDQEgAQRAAkBBAiAAdCICQQAgAmtyIAEgAHRxaCIAQQN0IgJBtNAAaiIBIAJBvNAAaigCACICKAIIIgNGBEBBjNAAIAZBfiAAd3EiBjYCAAwBCyABIAM2AgggAyABNgIMCyACIARBA3I2AgQgAEEDdCIAIARrIQUgACACaiAFNgIAIAIgBGoiBCAFQQFyNgIEIAgEQCAIQXhxQbTQAGohAEGg0AAoAgAhAwJ/QQEgCEEDdnQiASAGcUUEQEGM0AAgASAGcjYCACAADAELIAAoAggLIgEgAzYCDCAAIAM2AgggAyAANgIMIAMgATYCCAsgAkEIaiEBQaDQACAENgIAQZTQACAFNgIADBELQZDQACgCACILRQ0BIAtoQQJ0QbzSAGooAgAiACgCBEF4cSAEayEFIAAhAgNAAkAgAigCECIBRQRAIAJBFGooAgAiAUUNAQsgASgCBEF4cSAEayIDIAVJIQIgAyAFIAIbIQUgASAAIAIbIQAgASECDAELCyAAKAIYIQkgACgCDCIDIABHBEBBnNAAKAIAGiADIAAoAggiATYCCCABIAM2AgwMEAsgAEEUaiICKAIAIgFFBEAgACgCECIBRQ0DIABBEGohAgsDQCACIQcgASIDQRRqIgIoAgAiAQ0AIANBEGohAiADKAIQIgENAAsgB0EANgIADA8LQX8hBCAAQb9/Sw0AIABBE2oiAUFwcSEEQZDQACgCACIIRQ0AQQAgBGshBQJAAkACQAJ/QQAgBEGAAkkNABpBHyAEQf///wdLDQAaIARBJiABQQh2ZyIAa3ZBAXEgAEEBdGtBPmoLIgZBAnRBvNIAaigCACICRQRAQQAhAUEAIQMMAQtBACEBIARBGSAGQQF2a0EAIAZBH0cbdCEAQQAhAwNAAkAgAigCBEF4cSAEayIHIAVPDQAgAiEDIAciBQ0AQQAhBSACIQEMAwsgASACQRRqKAIAIgcgByACIABBHXZBBHFqQRBqKAIAIgJGGyABIAcbIQEgAEEBdCEAIAINAAsLIAEgA3JFBEBBACEDQQIgBnQiAEEAIABrciAIcSIARQ0DIABoQQJ0QbzSAGooAgAhAQsgAUUNAQsDQCABKAIEQXhxIARrIgIgBUkhACACIAUgABshBSABIAMgABshAyABKAIQIgAEfyAABSABQRRqKAIACyIBDQALCyADRQ0AIAVBlNAAKAIAIARrTw0AIAMoAhghByADIAMoAgwiAEcEQEGc0AAoAgAaIAAgAygCCCIBNgIIIAEgADYCDAwOCyADQRRqIgIoAgAiAUUEQCADKAIQIgFFDQMgA0EQaiECCwNAIAIhBiABIgBBFGoiAigCACIBDQAgAEEQaiECIAAoAhAiAQ0ACyAGQQA2AgAMDQtBlNAAKAIAIgMgBE8EQEGg0AAoAgAhAQJAIAMgBGsiAkEQTwRAIAEgBGoiACACQQFyNgIEIAEgA2ogAjYCACABIARBA3I2AgQMAQsgASADQQNyNgIEIAEgA2oiACAAKAIEQQFyNgIEQQAhAEEAIQILQZTQACACNgIAQaDQACAANgIAIAFBCGohAQwPC0GY0AAoAgAiAyAESwRAIAQgCWoiACADIARrIgFBAXI2AgRBpNAAIAA2AgBBmNAAIAE2AgAgCSAEQQNyNgIEIAlBCGohAQwPC0EAIQEgBAJ/QeTTACgCAARAQezTACgCAAwBC0Hw0wBCfzcCAEHo0wBCgICEgICAwAA3AgBB5NMAIApBDGpBcHFB2KrVqgVzNgIAQfjTAEEANgIAQcjTAEEANgIAQYCABAsiACAEQccAaiIFaiIGQQAgAGsiB3EiAk8EQEH80wBBMDYCAAwPCwJAQcTTACgCACIBRQ0AQbzTACgCACIIIAJqIQAgACABTSAAIAhLcQ0AQQAhAUH80wBBMDYCAAwPC0HI0wAtAABBBHENBAJAAkAgCQRAQczTACEBA0AgASgCACIAIAlNBEAgACABKAIEaiAJSw0DCyABKAIIIgENAAsLQQAQMyIAQX9GDQUgAiEGQejTACgCACIBQQFrIgMgAHEEQCACIABrIAAgA2pBACABa3FqIQYLIAQgBk8NBSAGQf7///8HSw0FQcTTACgCACIDBEBBvNMAKAIAIgcgBmohASABIAdNDQYgASADSw0GCyAGEDMiASAARw0BDAcLIAYgA2sgB3EiBkH+////B0sNBCAGEDMhACAAIAEoAgAgASgCBGpGDQMgACEBCwJAIAYgBEHIAGpPDQAgAUF/Rg0AQezTACgCACIAIAUgBmtqQQAgAGtxIgBB/v///wdLBEAgASEADAcLIAAQM0F/RwRAIAAgBmohBiABIQAMBwtBACAGaxAzGgwECyABIgBBf0cNBQwDC0EAIQMMDAtBACEADAoLIABBf0cNAgtByNMAQcjTACgCAEEEcjYCAAsgAkH+////B0sNASACEDMhAEEAEDMhASAAQX9GDQEgAUF/Rg0BIAAgAU8NASABIABrIgYgBEE4ak0NAQtBvNMAQbzTACgCACAGaiIBNgIAQcDTACgCACABSQRAQcDTACABNgIACwJAAkACQEGk0AAoAgAiAgRAQczTACEBA0AgACABKAIAIgMgASgCBCIFakYNAiABKAIIIgENAAsMAgtBnNAAKAIAIgFBAEcgACABT3FFBEBBnNAAIAA2AgALQQAhAUHQ0wAgBjYCAEHM0wAgADYCAEGs0ABBfzYCAEGw0ABB5NMAKAIANgIAQdjTAEEANgIAA0AgAUHI0ABqIAFBvNAAaiICNgIAIAIgAUG00ABqIgM2AgAgAUHA0ABqIAM2AgAgAUHQ0ABqIAFBxNAAaiIDNgIAIAMgAjYCACABQdjQAGogAUHM0ABqIgI2AgAgAiADNgIAIAFB1NAAaiACNgIAIAFBIGoiAUGAAkcNAAtBeCAAa0EPcSIBIABqIgIgBkE4ayIDIAFrIgFBAXI2AgRBqNAAQfTTACgCADYCAEGY0AAgATYCAEGk0AAgAjYCACAAIANqQTg2AgQMAgsgACACTQ0AIAIgA0kNACABKAIMQQhxDQBBeCACa0EPcSIAIAJqIgNBmNAAKAIAIAZqIgcgAGsiAEEBcjYCBCABIAUgBmo2AgRBqNAAQfTTACgCADYCAEGY0AAgADYCAEGk0AAgAzYCACACIAdqQTg2AgQMAQsgAEGc0AAoAgBJBEBBnNAAIAA2AgALIAAgBmohA0HM0wAhAQJAAkACQANAIAMgASgCAEcEQCABKAIIIgENAQwCCwsgAS0ADEEIcUUNAQtBzNMAIQEDQCABKAIAIgMgAk0EQCADIAEoAgRqIgUgAksNAwsgASgCCCEBDAALAAsgASAANgIAIAEgASgCBCAGajYCBCAAQXggAGtBD3FqIgkgBEEDcjYCBCADQXggA2tBD3FqIgYgBCAJaiIEayEBIAIgBkYEQEGk0AAgBDYCAEGY0ABBmNAAKAIAIAFqIgA2AgAgBCAAQQFyNgIEDAgLQaDQACgCACAGRgRAQaDQACAENgIAQZTQAEGU0AAoAgAgAWoiADYCACAEIABBAXI2AgQgACAEaiAANgIADAgLIAYoAgQiBUEDcUEBRw0GIAVBeHEhCCAFQf8BTQRAIAVBA3YhAyAGKAIIIgAgBigCDCICRgRAQYzQAEGM0AAoAgBBfiADd3E2AgAMBwsgAiAANgIIIAAgAjYCDAwGCyAGKAIYIQcgBiAGKAIMIgBHBEAgACAGKAIIIgI2AgggAiAANgIMDAULIAZBFGoiAigCACIFRQRAIAYoAhAiBUUNBCAGQRBqIQILA0AgAiEDIAUiAEEUaiICKAIAIgUNACAAQRBqIQIgACgCECIFDQALIANBADYCAAwEC0F4IABrQQ9xIgEgAGoiByAGQThrIgMgAWsiAUEBcjYCBCAAIANqQTg2AgQgAiAFQTcgBWtBD3FqQT9rIgMgAyACQRBqSRsiA0EjNgIEQajQAEH00wAoAgA2AgBBmNAAIAE2AgBBpNAAIAc2AgAgA0EQakHU0wApAgA3AgAgA0HM0wApAgA3AghB1NMAIANBCGo2AgBB0NMAIAY2AgBBzNMAIAA2AgBB2NMAQQA2AgAgA0EkaiEBA0AgAUEHNgIAIAUgAUEEaiIBSw0ACyACIANGDQAgAyADKAIEQX5xNgIEIAMgAyACayIFNgIAIAIgBUEBcjYCBCAFQf8BTQRAIAVBeHFBtNAAaiEAAn9BjNAAKAIAIgFBASAFQQN2dCIDcUUEQEGM0AAgASADcjYCACAADAELIAAoAggLIgEgAjYCDCAAIAI2AgggAiAANgIMIAIgATYCCAwBC0EfIQEgBUH///8HTQRAIAVBJiAFQQh2ZyIAa3ZBAXEgAEEBdGtBPmohAQsgAiABNgIcIAJCADcCECABQQJ0QbzSAGohAEGQ0AAoAgAiA0EBIAF0IgZxRQRAIAAgAjYCAEGQ0AAgAyAGcjYCACACIAA2AhggAiACNgIIIAIgAjYCDAwBCyAFQRkgAUEBdmtBACABQR9HG3QhASAAKAIAIQMCQANAIAMiACgCBEF4cSAFRg0BIAFBHXYhAyABQQF0IQEgACADQQRxakEQaiIGKAIAIgMNAAsgBiACNgIAIAIgADYCGCACIAI2AgwgAiACNgIIDAELIAAoAggiASACNgIMIAAgAjYCCCACQQA2AhggAiAANgIMIAIgATYCCAtBmNAAKAIAIgEgBE0NAEGk0AAoAgAiACAEaiICIAEgBGsiAUEBcjYCBEGY0AAgATYCAEGk0AAgAjYCACAAIARBA3I2AgQgAEEIaiEBDAgLQQAhAUH80wBBMDYCAAwHC0EAIQALIAdFDQACQCAGKAIcIgJBAnRBvNIAaiIDKAIAIAZGBEAgAyAANgIAIAANAUGQ0ABBkNAAKAIAQX4gAndxNgIADAILIAdBEEEUIAcoAhAgBkYbaiAANgIAIABFDQELIAAgBzYCGCAGKAIQIgIEQCAAIAI2AhAgAiAANgIYCyAGQRRqKAIAIgJFDQAgAEEUaiACNgIAIAIgADYCGAsgASAIaiEBIAYgCGoiBigCBCEFCyAGIAVBfnE2AgQgASAEaiABNgIAIAQgAUEBcjYCBCABQf8BTQRAIAFBeHFBtNAAaiEAAn9BjNAAKAIAIgJBASABQQN2dCIBcUUEQEGM0AAgASACcjYCACAADAELIAAoAggLIgEgBDYCDCAAIAQ2AgggBCAANgIMIAQgATYCCAwBC0EfIQUgAUH///8HTQRAIAFBJiABQQh2ZyIAa3ZBAXEgAEEBdGtBPmohBQsgBCAFNgIcIARCADcCECAFQQJ0QbzSAGohAEGQ0AAoAgAiAkEBIAV0IgNxRQRAIAAgBDYCAEGQ0AAgAiADcjYCACAEIAA2AhggBCAENgIIIAQgBDYCDAwBCyABQRkgBUEBdmtBACAFQR9HG3QhBSAAKAIAIQACQANAIAAiAigCBEF4cSABRg0BIAVBHXYhACAFQQF0IQUgAiAAQQRxakEQaiIDKAIAIgANAAsgAyAENgIAIAQgAjYCGCAEIAQ2AgwgBCAENgIIDAELIAIoAggiACAENgIMIAIgBDYCCCAEQQA2AhggBCACNgIMIAQgADYCCAsgCUEIaiEBDAILAkAgB0UNAAJAIAMoAhwiAUECdEG80gBqIgIoAgAgA0YEQCACIAA2AgAgAA0BQZDQACAIQX4gAXdxIgg2AgAMAgsgB0EQQRQgBygCECADRhtqIAA2AgAgAEUNAQsgACAHNgIYIAMoAhAiAQRAIAAgATYCECABIAA2AhgLIANBFGooAgAiAUUNACAAQRRqIAE2AgAgASAANgIYCwJAIAVBD00EQCADIAQgBWoiAEEDcjYCBCAAIANqIgAgACgCBEEBcjYCBAwBCyADIARqIgIgBUEBcjYCBCADIARBA3I2AgQgAiAFaiAFNgIAIAVB/wFNBEAgBUF4cUG00ABqIQACf0GM0AAoAgAiAUEBIAVBA3Z0IgVxRQRAQYzQACABIAVyNgIAIAAMAQsgACgCCAsiASACNgIMIAAgAjYCCCACIAA2AgwgAiABNgIIDAELQR8hASAFQf///wdNBEAgBUEmIAVBCHZnIgBrdkEBcSAAQQF0a0E+aiEBCyACIAE2AhwgAkIANwIQIAFBAnRBvNIAaiEAQQEgAXQiBCAIcUUEQCAAIAI2AgBBkNAAIAQgCHI2AgAgAiAANgIYIAIgAjYCCCACIAI2AgwMAQsgBUEZIAFBAXZrQQAgAUEfRxt0IQEgACgCACEEAkADQCAEIgAoAgRBeHEgBUYNASABQR12IQQgAUEBdCEBIAAgBEEEcWpBEGoiBigCACIEDQALIAYgAjYCACACIAA2AhggAiACNgIMIAIgAjYCCAwBCyAAKAIIIgEgAjYCDCAAIAI2AgggAkEANgIYIAIgADYCDCACIAE2AggLIANBCGohAQwBCwJAIAlFDQACQCAAKAIcIgFBAnRBvNIAaiICKAIAIABGBEAgAiADNgIAIAMNAUGQ0AAgC0F+IAF3cTYCAAwCCyAJQRBBFCAJKAIQIABGG2ogAzYCACADRQ0BCyADIAk2AhggACgCECIBBEAgAyABNgIQIAEgAzYCGAsgAEEUaigCACIBRQ0AIANBFGogATYCACABIAM2AhgLAkAgBUEPTQRAIAAgBCAFaiIBQQNyNgIEIAAgAWoiASABKAIEQQFyNgIEDAELIAAgBGoiByAFQQFyNgIEIAAgBEEDcjYCBCAFIAdqIAU2AgAgCARAIAhBeHFBtNAAaiEBQaDQACgCACEDAn9BASAIQQN2dCICIAZxRQRAQYzQACACIAZyNgIAIAEMAQsgASgCCAsiAiADNgIMIAEgAzYCCCADIAE2AgwgAyACNgIIC0Gg0AAgBzYCAEGU0AAgBTYCAAsgAEEIaiEBCyAKQRBqJAAgAQtDACAARQRAPwBBEHQPCwJAIABB//8DcQ0AIABBAEgNACAAQRB2QAAiAEF/RgRAQfzTAEEwNgIAQX8PCyAAQRB0DwsACwvcPyIAQYAICwkBAAAAAgAAAAMAQZQICwUEAAAABQBBpAgLCQYAAAAHAAAACABB3AgLii1JbnZhbGlkIGNoYXIgaW4gdXJsIHF1ZXJ5AFNwYW4gY2FsbGJhY2sgZXJyb3IgaW4gb25fYm9keQBDb250ZW50LUxlbmd0aCBvdmVyZmxvdwBDaHVuayBzaXplIG92ZXJmbG93AFJlc3BvbnNlIG92ZXJmbG93AEludmFsaWQgbWV0aG9kIGZvciBIVFRQL3gueCByZXF1ZXN0AEludmFsaWQgbWV0aG9kIGZvciBSVFNQL3gueCByZXF1ZXN0AEV4cGVjdGVkIFNPVVJDRSBtZXRob2QgZm9yIElDRS94LnggcmVxdWVzdABJbnZhbGlkIGNoYXIgaW4gdXJsIGZyYWdtZW50IHN0YXJ0AEV4cGVjdGVkIGRvdABTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX3N0YXR1cwBJbnZhbGlkIHJlc3BvbnNlIHN0YXR1cwBJbnZhbGlkIGNoYXJhY3RlciBpbiBjaHVuayBleHRlbnNpb25zAFVzZXIgY2FsbGJhY2sgZXJyb3IAYG9uX3Jlc2V0YCBjYWxsYmFjayBlcnJvcgBgb25fY2h1bmtfaGVhZGVyYCBjYWxsYmFjayBlcnJvcgBgb25fbWVzc2FnZV9iZWdpbmAgY2FsbGJhY2sgZXJyb3IAYG9uX2NodW5rX2V4dGVuc2lvbl92YWx1ZWAgY2FsbGJhY2sgZXJyb3IAYG9uX3N0YXR1c19jb21wbGV0ZWAgY2FsbGJhY2sgZXJyb3IAYG9uX3ZlcnNpb25fY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl91cmxfY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl9jaHVua19jb21wbGV0ZWAgY2FsbGJhY2sgZXJyb3IAYG9uX2hlYWRlcl92YWx1ZV9jb21wbGV0ZWAgY2FsbGJhY2sgZXJyb3IAYG9uX21lc3NhZ2VfY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl9tZXRob2RfY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl9oZWFkZXJfZmllbGRfY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl9jaHVua19leHRlbnNpb25fbmFtZWAgY2FsbGJhY2sgZXJyb3IAVW5leHBlY3RlZCBjaGFyIGluIHVybCBzZXJ2ZXIASW52YWxpZCBoZWFkZXIgdmFsdWUgY2hhcgBJbnZhbGlkIGhlYWRlciBmaWVsZCBjaGFyAFNwYW4gY2FsbGJhY2sgZXJyb3IgaW4gb25fdmVyc2lvbgBJbnZhbGlkIG1pbm9yIHZlcnNpb24ASW52YWxpZCBtYWpvciB2ZXJzaW9uAEV4cGVjdGVkIHNwYWNlIGFmdGVyIHZlcnNpb24ARXhwZWN0ZWQgQ1JMRiBhZnRlciB2ZXJzaW9uAEludmFsaWQgSFRUUCB2ZXJzaW9uAEludmFsaWQgaGVhZGVyIHRva2VuAFNwYW4gY2FsbGJhY2sgZXJyb3IgaW4gb25fdXJsAEludmFsaWQgY2hhcmFjdGVycyBpbiB1cmwAVW5leHBlY3RlZCBzdGFydCBjaGFyIGluIHVybABEb3VibGUgQCBpbiB1cmwARW1wdHkgQ29udGVudC1MZW5ndGgASW52YWxpZCBjaGFyYWN0ZXIgaW4gQ29udGVudC1MZW5ndGgARHVwbGljYXRlIENvbnRlbnQtTGVuZ3RoAEludmFsaWQgY2hhciBpbiB1cmwgcGF0aABDb250ZW50LUxlbmd0aCBjYW4ndCBiZSBwcmVzZW50IHdpdGggVHJhbnNmZXItRW5jb2RpbmcASW52YWxpZCBjaGFyYWN0ZXIgaW4gY2h1bmsgc2l6ZQBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX2hlYWRlcl92YWx1ZQBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX2NodW5rX2V4dGVuc2lvbl92YWx1ZQBJbnZhbGlkIGNoYXJhY3RlciBpbiBjaHVuayBleHRlbnNpb25zIHZhbHVlAE1pc3NpbmcgZXhwZWN0ZWQgTEYgYWZ0ZXIgaGVhZGVyIHZhbHVlAEludmFsaWQgYFRyYW5zZmVyLUVuY29kaW5nYCBoZWFkZXIgdmFsdWUASW52YWxpZCBjaGFyYWN0ZXIgaW4gY2h1bmsgZXh0ZW5zaW9ucyBxdW90ZSB2YWx1ZQBJbnZhbGlkIGNoYXJhY3RlciBpbiBjaHVuayBleHRlbnNpb25zIHF1b3RlZCB2YWx1ZQBQYXVzZWQgYnkgb25faGVhZGVyc19jb21wbGV0ZQBJbnZhbGlkIEVPRiBzdGF0ZQBvbl9yZXNldCBwYXVzZQBvbl9jaHVua19oZWFkZXIgcGF1c2UAb25fbWVzc2FnZV9iZWdpbiBwYXVzZQBvbl9jaHVua19leHRlbnNpb25fdmFsdWUgcGF1c2UAb25fc3RhdHVzX2NvbXBsZXRlIHBhdXNlAG9uX3ZlcnNpb25fY29tcGxldGUgcGF1c2UAb25fdXJsX2NvbXBsZXRlIHBhdXNlAG9uX2NodW5rX2NvbXBsZXRlIHBhdXNlAG9uX2hlYWRlcl92YWx1ZV9jb21wbGV0ZSBwYXVzZQBvbl9tZXNzYWdlX2NvbXBsZXRlIHBhdXNlAG9uX21ldGhvZF9jb21wbGV0ZSBwYXVzZQBvbl9oZWFkZXJfZmllbGRfY29tcGxldGUgcGF1c2UAb25fY2h1bmtfZXh0ZW5zaW9uX25hbWUgcGF1c2UAVW5leHBlY3RlZCBzcGFjZSBhZnRlciBzdGFydCBsaW5lAFNwYW4gY2FsbGJhY2sgZXJyb3IgaW4gb25fY2h1bmtfZXh0ZW5zaW9uX25hbWUASW52YWxpZCBjaGFyYWN0ZXIgaW4gY2h1bmsgZXh0ZW5zaW9ucyBuYW1lAFBhdXNlIG9uIENPTk5FQ1QvVXBncmFkZQBQYXVzZSBvbiBQUkkvVXBncmFkZQBFeHBlY3RlZCBIVFRQLzIgQ29ubmVjdGlvbiBQcmVmYWNlAFNwYW4gY2FsbGJhY2sgZXJyb3IgaW4gb25fbWV0aG9kAEV4cGVjdGVkIHNwYWNlIGFmdGVyIG1ldGhvZABTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX2hlYWRlcl9maWVsZABQYXVzZWQASW52YWxpZCB3b3JkIGVuY291bnRlcmVkAEludmFsaWQgbWV0aG9kIGVuY291bnRlcmVkAFVuZXhwZWN0ZWQgY2hhciBpbiB1cmwgc2NoZW1hAFJlcXVlc3QgaGFzIGludmFsaWQgYFRyYW5zZmVyLUVuY29kaW5nYABTV0lUQ0hfUFJPWFkAVVNFX1BST1hZAE1LQUNUSVZJVFkAVU5QUk9DRVNTQUJMRV9FTlRJVFkAQ09QWQBNT1ZFRF9QRVJNQU5FTlRMWQBUT09fRUFSTFkATk9USUZZAEZBSUxFRF9ERVBFTkRFTkNZAEJBRF9HQVRFV0FZAFBMQVkAUFVUAENIRUNLT1VUAEdBVEVXQVlfVElNRU9VVABSRVFVRVNUX1RJTUVPVVQATkVUV09SS19DT05ORUNUX1RJTUVPVVQAQ09OTkVDVElPTl9USU1FT1VUAExPR0lOX1RJTUVPVVQATkVUV09SS19SRUFEX1RJTUVPVVQAUE9TVABNSVNESVJFQ1RFRF9SRVFVRVNUAENMSUVOVF9DTE9TRURfUkVRVUVTVABDTElFTlRfQ0xPU0VEX0xPQURfQkFMQU5DRURfUkVRVUVTVABCQURfUkVRVUVTVABIVFRQX1JFUVVFU1RfU0VOVF9UT19IVFRQU19QT1JUAFJFUE9SVABJTV9BX1RFQVBPVABSRVNFVF9DT05URU5UAE5PX0NPTlRFTlQAUEFSVElBTF9DT05URU5UAEhQRV9JTlZBTElEX0NPTlNUQU5UAEhQRV9DQl9SRVNFVABHRVQASFBFX1NUUklDVABDT05GTElDVABURU1QT1JBUllfUkVESVJFQ1QAUEVSTUFORU5UX1JFRElSRUNUAENPTk5FQ1QATVVMVElfU1RBVFVTAEhQRV9JTlZBTElEX1NUQVRVUwBUT09fTUFOWV9SRVFVRVNUUwBFQVJMWV9ISU5UUwBVTkFWQUlMQUJMRV9GT1JfTEVHQUxfUkVBU09OUwBPUFRJT05TAFNXSVRDSElOR19QUk9UT0NPTFMAVkFSSUFOVF9BTFNPX05FR09USUFURVMATVVMVElQTEVfQ0hPSUNFUwBJTlRFUk5BTF9TRVJWRVJfRVJST1IAV0VCX1NFUlZFUl9VTktOT1dOX0VSUk9SAFJBSUxHVU5fRVJST1IASURFTlRJVFlfUFJPVklERVJfQVVUSEVOVElDQVRJT05fRVJST1IAU1NMX0NFUlRJRklDQVRFX0VSUk9SAElOVkFMSURfWF9GT1JXQVJERURfRk9SAFNFVF9QQVJBTUVURVIAR0VUX1BBUkFNRVRFUgBIUEVfVVNFUgBTRUVfT1RIRVIASFBFX0NCX0NIVU5LX0hFQURFUgBNS0NBTEVOREFSAFNFVFVQAFdFQl9TRVJWRVJfSVNfRE9XTgBURUFSRE9XTgBIUEVfQ0xPU0VEX0NPTk5FQ1RJT04ASEVVUklTVElDX0VYUElSQVRJT04ARElTQ09OTkVDVEVEX09QRVJBVElPTgBOT05fQVVUSE9SSVRBVElWRV9JTkZPUk1BVElPTgBIUEVfSU5WQUxJRF9WRVJTSU9OAEhQRV9DQl9NRVNTQUdFX0JFR0lOAFNJVEVfSVNfRlJPWkVOAEhQRV9JTlZBTElEX0hFQURFUl9UT0tFTgBJTlZBTElEX1RPS0VOAEZPUkJJRERFTgBFTkhBTkNFX1lPVVJfQ0FMTQBIUEVfSU5WQUxJRF9VUkwAQkxPQ0tFRF9CWV9QQVJFTlRBTF9DT05UUk9MAE1LQ09MAEFDTABIUEVfSU5URVJOQUwAUkVRVUVTVF9IRUFERVJfRklFTERTX1RPT19MQVJHRV9VTk9GRklDSUFMAEhQRV9PSwBVTkxJTksAVU5MT0NLAFBSSQBSRVRSWV9XSVRIAEhQRV9JTlZBTElEX0NPTlRFTlRfTEVOR1RIAEhQRV9VTkVYUEVDVEVEX0NPTlRFTlRfTEVOR1RIAEZMVVNIAFBST1BQQVRDSABNLVNFQVJDSABVUklfVE9PX0xPTkcAUFJPQ0VTU0lORwBNSVNDRUxMQU5FT1VTX1BFUlNJU1RFTlRfV0FSTklORwBNSVNDRUxMQU5FT1VTX1dBUk5JTkcASFBFX0lOVkFMSURfVFJBTlNGRVJfRU5DT0RJTkcARXhwZWN0ZWQgQ1JMRgBIUEVfSU5WQUxJRF9DSFVOS19TSVpFAE1PVkUAQ09OVElOVUUASFBFX0NCX1NUQVRVU19DT01QTEVURQBIUEVfQ0JfSEVBREVSU19DT01QTEVURQBIUEVfQ0JfVkVSU0lPTl9DT01QTEVURQBIUEVfQ0JfVVJMX0NPTVBMRVRFAEhQRV9DQl9DSFVOS19DT01QTEVURQBIUEVfQ0JfSEVBREVSX1ZBTFVFX0NPTVBMRVRFAEhQRV9DQl9DSFVOS19FWFRFTlNJT05fVkFMVUVfQ09NUExFVEUASFBFX0NCX0NIVU5LX0VYVEVOU0lPTl9OQU1FX0NPTVBMRVRFAEhQRV9DQl9NRVNTQUdFX0NPTVBMRVRFAEhQRV9DQl9NRVRIT0RfQ09NUExFVEUASFBFX0NCX0hFQURFUl9GSUVMRF9DT01QTEVURQBERUxFVEUASFBFX0lOVkFMSURfRU9GX1NUQVRFAElOVkFMSURfU1NMX0NFUlRJRklDQVRFAFBBVVNFAE5PX1JFU1BPTlNFAFVOU1VQUE9SVEVEX01FRElBX1RZUEUAR09ORQBOT1RfQUNDRVBUQUJMRQBTRVJWSUNFX1VOQVZBSUxBQkxFAFJBTkdFX05PVF9TQVRJU0ZJQUJMRQBPUklHSU5fSVNfVU5SRUFDSEFCTEUAUkVTUE9OU0VfSVNfU1RBTEUAUFVSR0UATUVSR0UAUkVRVUVTVF9IRUFERVJfRklFTERTX1RPT19MQVJHRQBSRVFVRVNUX0hFQURFUl9UT09fTEFSR0UAUEFZTE9BRF9UT09fTEFSR0UASU5TVUZGSUNJRU5UX1NUT1JBR0UASFBFX1BBVVNFRF9VUEdSQURFAEhQRV9QQVVTRURfSDJfVVBHUkFERQBTT1VSQ0UAQU5OT1VOQ0UAVFJBQ0UASFBFX1VORVhQRUNURURfU1BBQ0UAREVTQ1JJQkUAVU5TVUJTQ1JJQkUAUkVDT1JEAEhQRV9JTlZBTElEX01FVEhPRABOT1RfRk9VTkQAUFJPUEZJTkQAVU5CSU5EAFJFQklORABVTkFVVEhPUklaRUQATUVUSE9EX05PVF9BTExPV0VEAEhUVFBfVkVSU0lPTl9OT1RfU1VQUE9SVEVEAEFMUkVBRFlfUkVQT1JURUQAQUNDRVBURUQATk9UX0lNUExFTUVOVEVEAExPT1BfREVURUNURUQASFBFX0NSX0VYUEVDVEVEAEhQRV9MRl9FWFBFQ1RFRABDUkVBVEVEAElNX1VTRUQASFBFX1BBVVNFRABUSU1FT1VUX09DQ1VSRUQAUEFZTUVOVF9SRVFVSVJFRABQUkVDT05ESVRJT05fUkVRVUlSRUQAUFJPWFlfQVVUSEVOVElDQVRJT05fUkVRVUlSRUQATkVUV09SS19BVVRIRU5USUNBVElPTl9SRVFVSVJFRABMRU5HVEhfUkVRVUlSRUQAU1NMX0NFUlRJRklDQVRFX1JFUVVJUkVEAFVQR1JBREVfUkVRVUlSRUQAUEFHRV9FWFBJUkVEAFBSRUNPTkRJVElPTl9GQUlMRUQARVhQRUNUQVRJT05fRkFJTEVEAFJFVkFMSURBVElPTl9GQUlMRUQAU1NMX0hBTkRTSEFLRV9GQUlMRUQATE9DS0VEAFRSQU5TRk9STUFUSU9OX0FQUExJRUQATk9UX01PRElGSUVEAE5PVF9FWFRFTkRFRABCQU5EV0lEVEhfTElNSVRfRVhDRUVERUQAU0lURV9JU19PVkVSTE9BREVEAEhFQUQARXhwZWN0ZWQgSFRUUC8AAF4TAAAmEwAAMBAAAPAXAACdEwAAFRIAADkXAADwEgAAChAAAHUSAACtEgAAghMAAE8UAAB/EAAAoBUAACMUAACJEgAAixQAAE0VAADUEQAAzxQAABAYAADJFgAA3BYAAMERAADgFwAAuxQAAHQUAAB8FQAA5RQAAAgXAAAfEAAAZRUAAKMUAAAoFQAAAhUAAJkVAAAsEAAAixkAAE8PAADUDgAAahAAAM4QAAACFwAAiQ4AAG4TAAAcEwAAZhQAAFYXAADBEwAAzRMAAGwTAABoFwAAZhcAAF8XAAAiEwAAzg8AAGkOAADYDgAAYxYAAMsTAACqDgAAKBcAACYXAADFEwAAXRYAAOgRAABnEwAAZRMAAPIWAABzEwAAHRcAAPkWAADzEQAAzw4AAM4VAAAMEgAAsxEAAKURAABhEAAAMhcAALsTAEH5NQsBAQBBkDYL4AEBAQIBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQBB/TcLAQEAQZE4C14CAwICAgICAAACAgACAgACAgICAgICAgICAAQAAAAAAAICAgICAgICAgICAgICAgICAgICAgICAgICAAAAAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAAgACAEH9OQsBAQBBkToLXgIAAgICAgIAAAICAAICAAICAgICAgICAgIAAwAEAAAAAgICAgICAgICAgICAgICAgICAgICAgICAgIAAAACAgICAgICAgICAgICAgICAgICAgICAgICAgICAgACAAIAQfA7Cw1sb3NlZWVwLWFsaXZlAEGJPAsBAQBBoDwL4AEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQBBiT4LAQEAQaA+C+cBAQEBAQEBAQEBAQEBAgEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQFjaHVua2VkAEGwwAALXwEBAAEBAQEBAAABAQABAQABAQEBAQEBAQEBAAAAAAAAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAAAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQABAEGQwgALIWVjdGlvbmVudC1sZW5ndGhvbnJveHktY29ubmVjdGlvbgBBwMIACy1yYW5zZmVyLWVuY29kaW5ncGdyYWRlDQoNCg0KU00NCg0KVFRQL0NFL1RTUC8AQfnCAAsFAQIAAQMAQZDDAAvgAQQBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAEH5xAALBQECAAEDAEGQxQAL4AEEAQEFAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQBB+cYACwQBAAABAEGRxwAL3wEBAQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAEH6yAALBAEAAAIAQZDJAAtfAwQAAAQEBAQEBAQEBAQEBQQEBAQEBAQEBAQEBAAEAAYHBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQABAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAAAAQAQfrKAAsEAQAAAQBBkMsACwEBAEGqywALQQIAAAAAAAADAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwAAAAAAAAMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAEH6zAALBAEAAAEAQZDNAAsBAQBBms0ACwYCAAAAAAIAQbHNAAs6AwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAAAAAAAADAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwBB8M4AC5YBTk9VTkNFRUNLT1VUTkVDVEVURUNSSUJFTFVTSEVURUFEU0VBUkNIUkdFQ1RJVklUWUxFTkRBUlZFT1RJRllQVElPTlNDSFNFQVlTVEFUQ0hHRU9SRElSRUNUT1JUUkNIUEFSQU1FVEVSVVJDRUJTQ1JJQkVBUkRPV05BQ0VJTkROS0NLVUJTQ1JJQkVIVFRQL0FEVFAv", "base64");
}
});
// node_modules/undici/lib/llhttp/llhttp_simd-wasm.js
var require_llhttp_simd_wasm = __commonJS({
"node_modules/undici/lib/llhttp/llhttp_simd-wasm.js"(exports2, module2) {
"use strict";
var { Buffer: Buffer2 } = require("node:buffer");
module2.exports = Buffer2.from("AGFzbQEAAAABJwdgAX8Bf2ADf39/AX9gAX8AYAJ/fwBgBH9/f38Bf2AAAGADf39/AALLAQgDZW52GHdhc21fb25faGVhZGVyc19jb21wbGV0ZQAEA2VudhV3YXNtX29uX21lc3NhZ2VfYmVnaW4AAANlbnYLd2FzbV9vbl91cmwAAQNlbnYOd2FzbV9vbl9zdGF0dXMAAQNlbnYUd2FzbV9vbl9oZWFkZXJfZmllbGQAAQNlbnYUd2FzbV9vbl9oZWFkZXJfdmFsdWUAAQNlbnYMd2FzbV9vbl9ib2R5AAEDZW52GHdhc21fb25fbWVzc2FnZV9jb21wbGV0ZQAAAy0sBQYAAAIAAAAAAAACAQIAAgICAAADAAAAAAMDAwMBAQEBAQEBAQEAAAIAAAAEBQFwARISBQMBAAIGCAF/AUGA1AQLB9EFIgZtZW1vcnkCAAtfaW5pdGlhbGl6ZQAIGV9faW5kaXJlY3RfZnVuY3Rpb25fdGFibGUBAAtsbGh0dHBfaW5pdAAJGGxsaHR0cF9zaG91bGRfa2VlcF9hbGl2ZQAvDGxsaHR0cF9hbGxvYwALBm1hbGxvYwAxC2xsaHR0cF9mcmVlAAwEZnJlZQAMD2xsaHR0cF9nZXRfdHlwZQANFWxsaHR0cF9nZXRfaHR0cF9tYWpvcgAOFWxsaHR0cF9nZXRfaHR0cF9taW5vcgAPEWxsaHR0cF9nZXRfbWV0aG9kABAWbGxodHRwX2dldF9zdGF0dXNfY29kZQAREmxsaHR0cF9nZXRfdXBncmFkZQASDGxsaHR0cF9yZXNldAATDmxsaHR0cF9leGVjdXRlABQUbGxodHRwX3NldHRpbmdzX2luaXQAFQ1sbGh0dHBfZmluaXNoABYMbGxodHRwX3BhdXNlABcNbGxodHRwX3Jlc3VtZQAYG2xsaHR0cF9yZXN1bWVfYWZ0ZXJfdXBncmFkZQAZEGxsaHR0cF9nZXRfZXJybm8AGhdsbGh0dHBfZ2V0X2Vycm9yX3JlYXNvbgAbF2xsaHR0cF9zZXRfZXJyb3JfcmVhc29uABwUbGxodHRwX2dldF9lcnJvcl9wb3MAHRFsbGh0dHBfZXJybm9fbmFtZQAeEmxsaHR0cF9tZXRob2RfbmFtZQAfEmxsaHR0cF9zdGF0dXNfbmFtZQAgGmxsaHR0cF9zZXRfbGVuaWVudF9oZWFkZXJzACEhbGxodHRwX3NldF9sZW5pZW50X2NodW5rZWRfbGVuZ3RoACIdbGxodHRwX3NldF9sZW5pZW50X2tlZXBfYWxpdmUAIyRsbGh0dHBfc2V0X2xlbmllbnRfdHJhbnNmZXJfZW5jb2RpbmcAJBhsbGh0dHBfbWVzc2FnZV9uZWVkc19lb2YALgkXAQBBAQsRAQIDBAUKBgcrLSwqKSglJyYK77MCLBYAQYjQACgCAARAAAtBiNAAQQE2AgALFAAgABAwIAAgAjYCOCAAIAE6ACgLFAAgACAALwEyIAAtAC4gABAvEAALHgEBf0HAABAyIgEQMCABQYAINgI4IAEgADoAKCABC48MAQd/AkAgAEUNACAAQQhrIgEgAEEEaygCACIAQXhxIgRqIQUCQCAAQQFxDQAgAEEDcUUNASABIAEoAgAiAGsiAUGc0AAoAgBJDQEgACAEaiEEAkACQEGg0AAoAgAgAUcEQCAAQf8BTQRAIABBA3YhAyABKAIIIgAgASgCDCICRgRAQYzQAEGM0AAoAgBBfiADd3E2AgAMBQsgAiAANgIIIAAgAjYCDAwECyABKAIYIQYgASABKAIMIgBHBEAgACABKAIIIgI2AgggAiAANgIMDAMLIAFBFGoiAygCACICRQRAIAEoAhAiAkUNAiABQRBqIQMLA0AgAyEHIAIiAEEUaiIDKAIAIgINACAAQRBqIQMgACgCECICDQALIAdBADYCAAwCCyAFKAIEIgBBA3FBA0cNAiAFIABBfnE2AgRBlNAAIAQ2AgAgBSAENgIAIAEgBEEBcjYCBAwDC0EAIQALIAZFDQACQCABKAIcIgJBAnRBvNIAaiIDKAIAIAFGBEAgAyAANgIAIAANAUGQ0ABBkNAAKAIAQX4gAndxNgIADAILIAZBEEEUIAYoAhAgAUYbaiAANgIAIABFDQELIAAgBjYCGCABKAIQIgIEQCAAIAI2AhAgAiAANgIYCyABQRRqKAIAIgJFDQAgAEEUaiACNgIAIAIgADYCGAsgASAFTw0AIAUoAgQiAEEBcUUNAAJAAkACQAJAIABBAnFFBEBBpNAAKAIAIAVGBEBBpNAAIAE2AgBBmNAAQZjQACgCACAEaiIANgIAIAEgAEEBcjYCBCABQaDQACgCAEcNBkGU0ABBADYCAEGg0ABBADYCAAwGC0Gg0AAoAgAgBUYEQEGg0AAgATYCAEGU0ABBlNAAKAIAIARqIgA2AgAgASAAQQFyNgIEIAAgAWogADYCAAwGCyAAQXhxIARqIQQgAEH/AU0EQCAAQQN2IQMgBSgCCCIAIAUoAgwiAkYEQEGM0ABBjNAAKAIAQX4gA3dxNgIADAULIAIgADYCCCAAIAI2AgwMBAsgBSgCGCEGIAUgBSgCDCIARwRAQZzQACgCABogACAFKAIIIgI2AgggAiAANgIMDAMLIAVBFGoiAygCACICRQRAIAUoAhAiAkUNAiAFQRBqIQMLA0AgAyEHIAIiAEEUaiIDKAIAIgINACAAQRBqIQMgACgCECICDQALIAdBADYCAAwCCyAFIABBfnE2AgQgASAEaiAENgIAIAEgBEEBcjYCBAwDC0EAIQALIAZFDQACQCAFKAIcIgJBAnRBvNIAaiIDKAIAIAVGBEAgAyAANgIAIAANAUGQ0ABBkNAAKAIAQX4gAndxNgIADAILIAZBEEEUIAYoAhAgBUYbaiAANgIAIABFDQELIAAgBjYCGCAFKAIQIgIEQCAAIAI2AhAgAiAANgIYCyAFQRRqKAIAIgJFDQAgAEEUaiACNgIAIAIgADYCGAsgASAEaiAENgIAIAEgBEEBcjYCBCABQaDQACgCAEcNAEGU0AAgBDYCAAwBCyAEQf8BTQRAIARBeHFBtNAAaiEAAn9BjNAAKAIAIgJBASAEQQN2dCIDcUUEQEGM0AAgAiADcjYCACAADAELIAAoAggLIgIgATYCDCAAIAE2AgggASAANgIMIAEgAjYCCAwBC0EfIQIgBEH///8HTQRAIARBJiAEQQh2ZyIAa3ZBAXEgAEEBdGtBPmohAgsgASACNgIcIAFCADcCECACQQJ0QbzSAGohAAJAQZDQACgCACIDQQEgAnQiB3FFBEAgACABNgIAQZDQACADIAdyNgIAIAEgADYCGCABIAE2AgggASABNgIMDAELIARBGSACQQF2a0EAIAJBH0cbdCECIAAoAgAhAAJAA0AgACIDKAIEQXhxIARGDQEgAkEddiEAIAJBAXQhAiADIABBBHFqQRBqIgcoAgAiAA0ACyAHIAE2AgAgASADNgIYIAEgATYCDCABIAE2AggMAQsgAygCCCIAIAE2AgwgAyABNgIIIAFBADYCGCABIAM2AgwgASAANgIIC0Gs0ABBrNAAKAIAQQFrIgBBfyAAGzYCAAsLBwAgAC0AKAsHACAALQAqCwcAIAAtACsLBwAgAC0AKQsHACAALwEyCwcAIAAtAC4LQAEEfyAAKAIYIQEgAC0ALSECIAAtACghAyAAKAI4IQQgABAwIAAgBDYCOCAAIAM6ACggACACOgAtIAAgATYCGAu74gECB38DfiABIAJqIQQCQCAAIgIoAgwiAA0AIAIoAgQEQCACIAE2AgQLIwBBEGsiCCQAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACfwJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAIAIoAhwiA0EBaw7dAdoBAdkBAgMEBQYHCAkKCwwNDtgBDxDXARES1gETFBUWFxgZGhvgAd8BHB0e1QEfICEiIyQl1AEmJygpKiss0wHSAS0u0QHQAS8wMTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRtsBR0hJSs8BzgFLzQFMzAFNTk9QUVJTVFVWV1hZWltcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9fn+AAYEBggGDAYQBhQGGAYcBiAGJAYoBiwGMAY0BjgGPAZABkQGSAZMBlAGVAZYBlwGYAZkBmgGbAZwBnQGeAZ8BoAGhAaIBowGkAaUBpgGnAagBqQGqAasBrAGtAa4BrwGwAbEBsgGzAbQBtQG2AbcBywHKAbgByQG5AcgBugG7AbwBvQG+Ab8BwAHBAcIBwwHEAcUBxgEA3AELQQAMxgELQQ4MxQELQQ0MxAELQQ8MwwELQRAMwgELQRMMwQELQRQMwAELQRUMvwELQRYMvgELQRgMvQELQRkMvAELQRoMuwELQRsMugELQRwMuQELQR0MuAELQQgMtwELQR4MtgELQSAMtQELQR8MtAELQQcMswELQSEMsgELQSIMsQELQSMMsAELQSQMrwELQRIMrgELQREMrQELQSUMrAELQSYMqwELQScMqgELQSgMqQELQcMBDKgBC0EqDKcBC0ErDKYBC0EsDKUBC0EtDKQBC0EuDKMBC0EvDKIBC0HEAQyhAQtBMAygAQtBNAyfAQtBDAyeAQtBMQydAQtBMgycAQtBMwybAQtBOQyaAQtBNQyZAQtBxQEMmAELQQsMlwELQToMlgELQTYMlQELQQoMlAELQTcMkwELQTgMkgELQTwMkQELQTsMkAELQT0MjwELQQkMjgELQSkMjQELQT4MjAELQT8MiwELQcAADIoBC0HBAAyJAQtBwgAMiAELQcMADIcBC0HEAAyGAQtBxQAMhQELQcYADIQBC0EXDIMBC0HHAAyCAQtByAAMgQELQckADIABC0HKAAx/C0HLAAx+C0HNAAx9C0HMAAx8C0HOAAx7C0HPAAx6C0HQAAx5C0HRAAx4C0HSAAx3C0HTAAx2C0HUAAx1C0HWAAx0C0HVAAxzC0EGDHILQdcADHELQQUMcAtB2AAMbwtBBAxuC0HZAAxtC0HaAAxsC0HbAAxrC0HcAAxqC0EDDGkLQd0ADGgLQd4ADGcLQd8ADGYLQeEADGULQeAADGQLQeIADGMLQeMADGILQQIMYQtB5AAMYAtB5QAMXwtB5gAMXgtB5wAMXQtB6AAMXAtB6QAMWwtB6gAMWgtB6wAMWQtB7AAMWAtB7QAMVwtB7gAMVgtB7wAMVQtB8AAMVAtB8QAMUwtB8gAMUgtB8wAMUQtB9AAMUAtB9QAMTwtB9gAMTgtB9wAMTQtB+AAMTAtB+QAMSwtB+gAMSgtB+wAMSQtB/AAMSAtB/QAMRwtB/gAMRgtB/wAMRQtBgAEMRAtBgQEMQwtBggEMQgtBgwEMQQtBhAEMQAtBhQEMPwtBhgEMPgtBhwEMPQtBiAEMPAtBiQEMOwtBigEMOgtBiwEMOQtBjAEMOAtBjQEMNwtBjgEMNgtBjwEMNQtBkAEMNAtBkQEMMwtBkgEMMgtBkwEMMQtBlAEMMAtBlQEMLwtBlgEMLgtBlwEMLQtBmAEMLAtBmQEMKwtBmgEMKgtBmwEMKQtBnAEMKAtBnQEMJwtBngEMJgtBnwEMJQtBoAEMJAtBoQEMIwtBogEMIgtBowEMIQtBpAEMIAtBpQEMHwtBpgEMHgtBpwEMHQtBqAEMHAtBqQEMGwtBqgEMGgtBqwEMGQtBrAEMGAtBrQEMFwtBrgEMFgtBAQwVC0GvAQwUC0GwAQwTC0GxAQwSC0GzAQwRC0GyAQwQC0G0AQwPC0G1AQwOC0G2AQwNC0G3AQwMC0G4AQwLC0G5AQwKC0G6AQwJC0G7AQwIC0HGAQwHC0G8AQwGC0G9AQwFC0G+AQwEC0G/AQwDC0HAAQwCC0HCAQwBC0HBAQshAwNAAkACQAJAAkACQAJAAkACQAJAIAICfwJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJ/AkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAgAgJ/AkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACfwJAAkACfwJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACfwJAAkACQAJAAn8CQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQCADDsYBAAECAwQFBgcICQoLDA0ODxAREhMUFRYXGBkaGxwdHyAhIyUmKCorLC8wMTIzNDU2Nzk6Ozw9lANAQkRFRklLTk9QUVJTVFVWWFpbXF1eX2BhYmNkZWZnaGpsb3Bxc3V2eHl6e3x/gAGBAYIBgwGEAYUBhgGHAYgBiQGKAYsBjAGNAY4BjwGQAZEBkgGTAZQBlQGWAZcBmAGZAZoBmwGcAZ0BngGfAaABoQGiAaMBpAGlAaYBpwGoAakBqgGrAawBrQGuAa8BsAGxAbIBswG0AbUBtgG3AbgBuQG6AbsBvAG9Ab4BvwHAAcEBwgHDAcQBxQHGAccByAHJAcsBzAHNAc4BzwGKA4kDiAOHA4QDgwOAA/sC+gL5AvgC9wL0AvMC8gLLAsECsALZAQsgASAERw3wAkHdASEDDLMDCyABIARHDcgBQcMBIQMMsgMLIAEgBEcNe0H3ACEDDLEDCyABIARHDXBB7wAhAwywAwsgASAERw1pQeoAIQMMrwMLIAEgBEcNZUHoACEDDK4DCyABIARHDWJB5gAhAwytAwsgASAERw0aQRghAwysAwsgASAERw0VQRIhAwyrAwsgASAERw1CQcUAIQMMqgMLIAEgBEcNNEE/IQMMqQMLIAEgBEcNMkE8IQMMqAMLIAEgBEcNK0ExIQMMpwMLIAItAC5BAUYNnwMMwQILQQAhAAJAAkACQCACLQAqRQ0AIAItACtFDQAgAi8BMCIDQQJxRQ0BDAILIAIvATAiA0EBcUUNAQtBASEAIAItAChBAUYNACACLwEyIgVB5ABrQeQASQ0AIAVBzAFGDQAgBUGwAkYNACADQcAAcQ0AQQAhACADQYgEcUGABEYNACADQShxQQBHIQALIAJBADsBMCACQQA6AC8gAEUN3wIgAkIANwMgDOACC0EAIQACQCACKAI4IgNFDQAgAygCLCIDRQ0AIAIgAxEAACEACyAARQ3MASAAQRVHDd0CIAJBBDYCHCACIAE2AhQgAkGwGDYCECACQRU2AgxBACEDDKQDCyABIARGBEBBBiEDDKQDCyABQQFqIQFBACEAAkAgAigCOCIDRQ0AIAMoAlQiA0UNACACIAMRAAAhAAsgAA3ZAgwcCyACQgA3AyBBEiEDDIkDCyABIARHDRZBHSEDDKEDCyABIARHBEAgAUEBaiEBQRAhAwyIAwtBByEDDKADCyACIAIpAyAiCiAEIAFrrSILfSIMQgAgCiAMWhs3AyAgCiALWA3UAkEIIQMMnwMLIAEgBEcEQCACQQk2AgggAiABNgIEQRQhAwyGAwtBCSEDDJ4DCyACKQMgQgBSDccBIAIgAi8BMEGAAXI7ATAMQgsgASAERw0/QdAAIQMMnAMLIAEgBEYEQEELIQMMnAMLIAFBAWohAUEAIQACQCACKAI4IgNFDQAgAygCUCIDRQ0AIAIgAxEAACEACyAADc8CDMYBC0EAIQACQCACKAI4IgNFDQAgAygCSCIDRQ0AIAIgAxEAACEACyAARQ3GASAAQRVHDc0CIAJBCzYCHCACIAE2AhQgAkGCGTYCECACQRU2AgxBACEDDJoDC0EAIQACQCACKAI4IgNFDQAgAygCSCIDRQ0AIAIgAxEAACEACyAARQ0MIABBFUcNygIgAkEaNgIcIAIgATYCFCACQYIZNgIQIAJBFTYCDEEAIQMMmQMLQQAhAAJAIAIoAjgiA0UNACADKAJMIgNFDQAgAiADEQAAIQALIABFDcQBIABBFUcNxwIgAkELNgIcIAIgATYCFCACQZEXNgIQIAJBFTYCDEEAIQMMmAMLIAEgBEYEQEEPIQMMmAMLIAEtAAAiAEE7Rg0HIABBDUcNxAIgAUEBaiEBDMMBC0EAIQACQCACKAI4IgNFDQAgAygCTCIDRQ0AIAIgAxEAACEACyAARQ3DASAAQRVHDcICIAJBDzYCHCACIAE2AhQgAkGRFzYCECACQRU2AgxBACEDDJYDCwNAIAEtAABB8DVqLQAAIgBBAUcEQCAAQQJHDcECIAIoAgQhAEEAIQMgAkEANgIEIAIgACABQQFqIgEQLSIADcICDMUBCyAEIAFBAWoiAUcNAAtBEiEDDJUDC0EAIQACQCACKAI4IgNFDQAgAygCTCIDRQ0AIAIgAxEAACEACyAARQ3FASAAQRVHDb0CIAJBGzYCHCACIAE2AhQgAkGRFzYCECACQRU2AgxBACEDDJQDCyABIARGBEBBFiEDDJQDCyACQQo2AgggAiABNgIEQQAhAAJAIAIoAjgiA0UNACADKAJIIgNFDQAgAiADEQAAIQALIABFDcIBIABBFUcNuQIgAkEVNgIcIAIgATYCFCACQYIZNgIQIAJBFTYCDEEAIQMMkwMLIAEgBEcEQANAIAEtAABB8DdqLQAAIgBBAkcEQAJAIABBAWsOBMQCvQIAvgK9AgsgAUEBaiEBQQghAwz8AgsgBCABQQFqIgFHDQALQRUhAwyTAwtBFSEDDJIDCwNAIAEtAABB8DlqLQAAIgBBAkcEQCAAQQFrDgTFArcCwwK4ArcCCyAEIAFBAWoiAUcNAAtBGCEDDJEDCyABIARHBEAgAkELNgIIIAIgATYCBEEHIQMM+AILQRkhAwyQAwsgAUEBaiEBDAILIAEgBEYEQEEaIQMMjwMLAkAgAS0AAEENaw4UtQG/Ab8BvwG/Ab8BvwG/Ab8BvwG/Ab8BvwG/Ab8BvwG/Ab8BvwEAvwELQQAhAyACQQA2AhwgAkGvCzYCECACQQI2AgwgAiABQQFqNgIUDI4DCyABIARGBEBBGyEDDI4DCyABLQAAIgBBO0cEQCAAQQ1HDbECIAFBAWohAQy6AQsgAUEBaiEBC0EiIQMM8wILIAEgBEYEQEEcIQMMjAMLQgAhCgJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAgAS0AAEEwaw43wQLAAgABAgMEBQYH0AHQAdAB0AHQAdAB0AEICQoLDA3QAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdAB0AHQAdABDg8QERIT0AELQgIhCgzAAgtCAyEKDL8CC0IEIQoMvgILQgUhCgy9AgtCBiEKDLwCC0IHIQoMuwILQgghCgy6AgtCCSEKDLkCC0IKIQoMuAILQgshCgy3AgtCDCEKDLYCC0INIQoMtQILQg4hCgy0AgtCDyEKDLMCC0IKIQoMsgILQgshCgyxAgtCDCEKDLACC0INIQoMrwILQg4hCgyuAgtCDyEKDK0CC0IAIQoCQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAIAEtAABBMGsON8ACvwIAAQIDBAUGB74CvgK+Ar4CvgK+Ar4CCAkKCwwNvgK+Ar4CvgK+Ar4CvgK+Ar4CvgK+Ar4CvgK+Ar4CvgK+Ar4CvgK+Ar4CvgK+Ar4CvgK+Ag4PEBESE74CC0ICIQoMvwILQgMhCgy+AgtCBCEKDL0CC0IFIQoMvAILQgYhCgy7AgtCByEKDLoCC0IIIQoMuQILQgkhCgy4AgtCCiEKDLcCC0ILIQoMtgILQgwhCgy1AgtCDSEKDLQCC0IOIQoMswILQg8hCgyyAgtCCiEKDLECC0ILIQoMsAILQgwhCgyvAgtCDSEKDK4CC0IOIQoMrQILQg8hCgysAgsgAiACKQMgIgogBCABa60iC30iDEIAIAogDFobNwMgIAogC1gNpwJBHyEDDIkDCyABIARHBEAgAkEJNgIIIAIgATYCBEElIQMM8AILQSAhAwyIAwtBASEFIAIvATAiA0EIcUUEQCACKQMgQgBSIQULAkAgAi0ALgRAQQEhACACLQApQQVGDQEgA0HAAHFFIAVxRQ0BC0EAIQAgA0HAAHENAEECIQAgA0EIcQ0AIANBgARxBEACQCACLQAoQQFHDQAgAi0ALUEKcQ0AQQUhAAwCC0EEIQAMAQsgA0EgcUUEQAJAIAItAChBAUYNACACLwEyIgBB5ABrQeQASQ0AIABBzAFGDQAgAEGwAkYNAEEEIQAgA0EocUUNAiADQYgEcUGABEYNAgtBACEADAELQQBBAyACKQMgUBshAAsgAEEBaw4FvgIAsAEBpAKhAgtBESEDDO0CCyACQQE6AC8MhAMLIAEgBEcNnQJBJCEDDIQDCyABIARHDRxBxgAhAwyDAwtBACEAAkAgAigCOCIDRQ0AIAMoAkQiA0UNACACIAMRAAAhAAsgAEUNJyAAQRVHDZgCIAJB0AA2AhwgAiABNgIUIAJBkRg2AhAgAkEVNgIMQQAhAwyCAwsgASAERgRAQSghAwyCAwtBACEDIAJBADYCBCACQQw2AgggAiABIAEQKiIARQ2UAiACQSc2AhwgAiABNgIUIAIgADYCDAyBAwsgASAERgRAQSkhAwyBAwsgAS0AACIAQSBGDRMgAEEJRw2VAiABQQFqIQEMFAsgASAERwRAIAFBAWohAQwWC0EqIQMM/wILIAEgBEYEQEErIQMM/wILIAEtAAAiAEEJRyAAQSBHcQ2QAiACLQAsQQhHDd0CIAJBADoALAzdAgsgASAERgRAQSwhAwz+AgsgAS0AAEEKRw2OAiABQQFqIQEMsAELIAEgBEcNigJBLyEDDPwCCwNAIAEtAAAiAEEgRwRAIABBCmsOBIQCiAKIAoQChgILIAQgAUEBaiIBRw0AC0ExIQMM+wILQTIhAyABIARGDfoCIAIoAgAiACAEIAFraiEHIAEgAGtBA2ohBgJAA0AgAEHwO2otAAAgAS0AACIFQSByIAUgBUHBAGtB/wFxQRpJG0H/AXFHDQEgAEEDRgRAQQYhAQziAgsgAEEBaiEAIAQgAUEBaiIBRw0ACyACIAc2AgAM+wILIAJBADYCAAyGAgtBMyEDIAQgASIARg35AiAEIAFrIAIoAgAiAWohByAAIAFrQQhqIQYCQANAIAFB9DtqLQAAIAAtAAAiBUEgciAFIAVBwQBrQf8BcUEaSRtB/wFxRw0BIAFBCEYEQEEFIQEM4QILIAFBAWohASAEIABBAWoiAEcNAAsgAiAHNgIADPoCCyACQQA2AgAgACEBDIUCC0E0IQMgBCABIgBGDfgCIAQgAWsgAigCACIBaiEHIAAgAWtBBWohBgJAA0AgAUHQwgBqLQAAIAAtAAAiBUEgciAFIAVBwQBrQf8BcUEaSRtB/wFxRw0BIAFBBUYEQEEHIQEM4AILIAFBAWohASAEIABBAWoiAEcNAAsgAiAHNgIADPkCCyACQQA2AgAgACEBDIQCCyABIARHBEADQCABLQAAQYA+ai0AACIAQQFHBEAgAEECRg0JDIECCyAEIAFBAWoiAUcNAAtBMCEDDPgCC0EwIQMM9wILIAEgBEcEQANAIAEtAAAiAEEgRwRAIABBCmsOBP8B/gH+Af8B/gELIAQgAUEBaiIBRw0AC0E4IQMM9wILQTghAwz2AgsDQCABLQAAIgBBIEcgAEEJR3EN9gEgBCABQQFqIgFHDQALQTwhAwz1AgsDQCABLQAAIgBBIEcEQAJAIABBCmsOBPkBBAT5AQALIABBLEYN9QEMAwsgBCABQQFqIgFHDQALQT8hAwz0AgtBwAAhAyABIARGDfMCIAIoAgAiACAEIAFraiEFIAEgAGtBBmohBgJAA0AgAEGAQGstAAAgAS0AAEEgckcNASAAQQZGDdsCIABBAWohACAEIAFBAWoiAUcNAAsgAiAFNgIADPQCCyACQQA2AgALQTYhAwzZAgsgASAERgRAQcEAIQMM8gILIAJBDDYCCCACIAE2AgQgAi0ALEEBaw4E+wHuAewB6wHUAgsgAUEBaiEBDPoBCyABIARHBEADQAJAIAEtAAAiAEEgciAAIABBwQBrQf8BcUEaSRtB/wFxIgBBCUYNACAAQSBGDQACQAJAAkACQCAAQeMAaw4TAAMDAwMDAwMBAwMDAwMDAwMDAgMLIAFBAWohAUExIQMM3AILIAFBAWohAUEyIQMM2wILIAFBAWohAUEzIQMM2gILDP4BCyAEIAFBAWoiAUcNAAtBNSEDDPACC0E1IQMM7wILIAEgBEcEQANAIAEtAABBgDxqLQAAQQFHDfcBIAQgAUEBaiIBRw0AC0E9IQMM7wILQT0hAwzuAgtBACEAAkAgAigCOCIDRQ0AIAMoAkAiA0UNACACIAMRAAAhAAsgAEUNASAAQRVHDeYBIAJBwgA2AhwgAiABNgIUIAJB4xg2AhAgAkEVNgIMQQAhAwztAgsgAUEBaiEBC0E8IQMM0gILIAEgBEYEQEHCACEDDOsCCwJAA0ACQCABLQAAQQlrDhgAAswCzALRAswCzALMAswCzALMAswCzALMAswCzALMAswCzALMAswCzALMAgDMAgsgBCABQQFqIgFHDQALQcIAIQMM6wILIAFBAWohASACLQAtQQFxRQ3+AQtBLCEDDNACCyABIARHDd4BQcQAIQMM6AILA0AgAS0AAEGQwABqLQAAQQFHDZwBIAQgAUEBaiIBRw0AC0HFACEDDOcCCyABLQAAIgBBIEYN/gEgAEE6Rw3AAiACKAIEIQBBACEDIAJBADYCBCACIAAgARApIgAN3gEM3QELQccAIQMgBCABIgBGDeUCIAQgAWsgAigCACIBaiEHIAAgAWtBBWohBgNAIAFBkMIAai0AACAALQAAIgVBIHIgBSAFQcEAa0H/AXFBGkkbQf8BcUcNvwIgAUEFRg3CAiABQQFqIQEgBCAAQQFqIgBHDQALIAIgBzYCAAzlAgtByAAhAyAEIAEiAEYN5AIgBCABayACKAIAIgFqIQcgACABa0EJaiEGA0AgAUGWwgBqLQAAIAAtAAAiBUEgciAFIAVBwQBrQf8BcUEaSRtB/wFxRw2+AkECIAFBCUYNwgIaIAFBAWohASAEIABBAWoiAEcNAAsgAiAHNgIADOQCCyABIARGBEBByQAhAwzkAgsCQAJAIAEtAAAiAEEgciAAIABBwQBrQf8BcUEaSRtB/wFxQe4Aaw4HAL8CvwK/Ar8CvwIBvwILIAFBAWohAUE+IQMMywILIAFBAWohAUE/IQMMygILQcoAIQMgBCABIgBGDeICIAQgAWsgAigCACIBaiEGIAAgAWtBAWohBwNAIAFBoMIAai0AACAALQAAIgVBIHIgBSAFQcEAa0H/AXFBGkkbQf8BcUcNvAIgAUEBRg2+AiABQQFqIQEgBCAAQQFqIgBHDQALIAIgBjYCAAziAgtBywAhAyAEIAEiAEYN4QIgBCABayACKAIAIgFqIQcgACABa0EOaiEGA0AgAUGiwgBqLQAAIAAtAAAiBUEgciAFIAVBwQBrQf8BcUEaSRtB/wFxRw27AiABQQ5GDb4CIAFBAWohASAEIABBAWoiAEcNAAsgAiAHNgIADOECC0HMACEDIAQgASIARg3gAiAEIAFrIAIoAgAiAWohByAAIAFrQQ9qIQYDQCABQcDCAGotAAAgAC0AACIFQSByIAUgBUHBAGtB/wFxQRpJG0H/AXFHDboCQQMgAUEPRg2+AhogAUEBaiEBIAQgAEEBaiIARw0ACyACIAc2AgAM4AILQc0AIQMgBCABIgBGDd8CIAQgAWsgAigCACIBaiEHIAAgAWtBBWohBgNAIAFB0MIAai0AACAALQAAIgVBIHIgBSAFQcEAa0H/AXFBGkkbQf8BcUcNuQJBBCABQQVGDb0CGiABQQFqIQEgBCAAQQFqIgBHDQALIAIgBzYCAAzfAgsgASAERgRAQc4AIQMM3wILAkACQAJAAkAgAS0AACIAQSByIAAgAEHBAGtB/wFxQRpJG0H/AXFB4wBrDhMAvAK8ArwCvAK8ArwCvAK8ArwCvAK8ArwCAbwCvAK8AgIDvAILIAFBAWohAUHBACEDDMgCCyABQQFqIQFBwgAhAwzHAgsgAUEBaiEBQcMAIQMMxgILIAFBAWohAUHEACEDDMUCCyABIARHBEAgAkENNgIIIAIgATYCBEHFACEDDMUCC0HPACEDDN0CCwJAAkAgAS0AAEEKaw4EAZABkAEAkAELIAFBAWohAQtBKCEDDMMCCyABIARGBEBB0QAhAwzcAgsgAS0AAEEgRw0AIAFBAWohASACLQAtQQFxRQ3QAQtBFyEDDMECCyABIARHDcsBQdIAIQMM2QILQdMAIQMgASAERg3YAiACKAIAIgAgBCABa2ohBiABIABrQQFqIQUDQCABLQAAIABB1sIAai0AAEcNxwEgAEEBRg3KASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBjYCAAzYAgsgASAERgRAQdUAIQMM2AILIAEtAABBCkcNwgEgAUEBaiEBDMoBCyABIARGBEBB1gAhAwzXAgsCQAJAIAEtAABBCmsOBADDAcMBAcMBCyABQQFqIQEMygELIAFBAWohAUHKACEDDL0CC0EAIQACQCACKAI4IgNFDQAgAygCPCIDRQ0AIAIgAxEAACEACyAADb8BQc0AIQMMvAILIAItAClBIkYNzwIMiQELIAQgASIFRgRAQdsAIQMM1AILQQAhAEEBIQFBASEGQQAhAwJAAn8CQAJAAkACQAJAAkACQCAFLQAAQTBrDgrFAcQBAAECAwQFBgjDAQtBAgwGC0EDDAULQQQMBAtBBQwDC0EGDAILQQcMAQtBCAshA0EAIQFBACEGDL0BC0EJIQNBASEAQQAhAUEAIQYMvAELIAEgBEYEQEHdACEDDNMCCyABLQAAQS5HDbgBIAFBAWohAQyIAQsgASAERw22AUHfACEDDNECCyABIARHBEAgAkEONgIIIAIgATYCBEHQACEDDLgCC0HgACEDDNACC0HhACEDIAEgBEYNzwIgAigCACIAIAQgAWtqIQUgASAAa0EDaiEGA0AgAS0AACAAQeLCAGotAABHDbEBIABBA0YNswEgAEEBaiEAIAQgAUEBaiIBRw0ACyACIAU2AgAMzwILQeIAIQMgASAERg3OAiACKAIAIgAgBCABa2ohBSABIABrQQJqIQYDQCABLQAAIABB5sIAai0AAEcNsAEgAEECRg2vASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAzOAgtB4wAhAyABIARGDc0CIAIoAgAiACAEIAFraiEFIAEgAGtBA2ohBgNAIAEtAAAgAEHpwgBqLQAARw2vASAAQQNGDa0BIABBAWohACAEIAFBAWoiAUcNAAsgAiAFNgIADM0CCyABIARGBEBB5QAhAwzNAgsgAUEBaiEBQQAhAAJAIAIoAjgiA0UNACADKAIwIgNFDQAgAiADEQAAIQALIAANqgFB1gAhAwyzAgsgASAERwRAA0AgAS0AACIAQSBHBEACQAJAAkAgAEHIAGsOCwABswGzAbMBswGzAbMBswGzAQKzAQsgAUEBaiEBQdIAIQMMtwILIAFBAWohAUHTACEDDLYCCyABQQFqIQFB1AAhAwy1AgsgBCABQQFqIgFHDQALQeQAIQMMzAILQeQAIQMMywILA0AgAS0AAEHwwgBqLQAAIgBBAUcEQCAAQQJrDgOnAaYBpQGkAQsgBCABQQFqIgFHDQALQeYAIQMMygILIAFBAWogASAERw0CGkHnACEDDMkCCwNAIAEtAABB8MQAai0AACIAQQFHBEACQCAAQQJrDgSiAaEBoAEAnwELQdcAIQMMsQILIAQgAUEBaiIBRw0AC0HoACEDDMgCCyABIARGBEBB6QAhAwzIAgsCQCABLQAAIgBBCmsOGrcBmwGbAbQBmwGbAZsBmwGbAZsBmwGbAZsBmwGbAZsBmwGbAZsBmwGbAZsBpAGbAZsBAJkBCyABQQFqCyEBQQYhAwytAgsDQCABLQAAQfDGAGotAABBAUcNfSAEIAFBAWoiAUcNAAtB6gAhAwzFAgsgAUEBaiABIARHDQIaQesAIQMMxAILIAEgBEYEQEHsACEDDMQCCyABQQFqDAELIAEgBEYEQEHtACEDDMMCCyABQQFqCyEBQQQhAwyoAgsgASAERgRAQe4AIQMMwQILAkACQAJAIAEtAABB8MgAai0AAEEBaw4HkAGPAY4BAHwBAo0BCyABQQFqIQEMCwsgAUEBagyTAQtBACEDIAJBADYCHCACQZsSNgIQIAJBBzYCDCACIAFBAWo2AhQMwAILAkADQCABLQAAQfDIAGotAAAiAEEERwRAAkACQCAAQQFrDgeUAZMBkgGNAQAEAY0BC0HaACEDDKoCCyABQQFqIQFB3AAhAwypAgsgBCABQQFqIgFHDQALQe8AIQMMwAILIAFBAWoMkQELIAQgASIARgRAQfAAIQMMvwILIAAtAABBL0cNASAAQQFqIQEMBwsgBCABIgBGBEBB8QAhAwy+AgsgAC0AACIBQS9GBEAgAEEBaiEBQd0AIQMMpQILIAFBCmsiA0EWSw0AIAAhAUEBIAN0QYmAgAJxDfkBC0EAIQMgAkEANgIcIAIgADYCFCACQYwcNgIQIAJBBzYCDAy8AgsgASAERwRAIAFBAWohAUHeACEDDKMCC0HyACEDDLsCCyABIARGBEBB9AAhAwy7AgsCQCABLQAAQfDMAGotAABBAWsOA/cBcwCCAQtB4QAhAwyhAgsgASAERwRAA0AgAS0AAEHwygBqLQAAIgBBA0cEQAJAIABBAWsOAvkBAIUBC0HfACEDDKMCCyAEIAFBAWoiAUcNAAtB8wAhAwy6AgtB8wAhAwy5AgsgASAERwRAIAJBDzYCCCACIAE2AgRB4AAhAwygAgtB9QAhAwy4AgsgASAERgRAQfYAIQMMuAILIAJBDzYCCCACIAE2AgQLQQMhAwydAgsDQCABLQAAQSBHDY4CIAQgAUEBaiIBRw0AC0H3ACEDDLUCCyABIARGBEBB+AAhAwy1AgsgAS0AAEEgRw16IAFBAWohAQxbC0EAIQACQCACKAI4IgNFDQAgAygCOCIDRQ0AIAIgAxEAACEACyAADXgMgAILIAEgBEYEQEH6ACEDDLMCCyABLQAAQcwARw10IAFBAWohAUETDHYLQfsAIQMgASAERg2xAiACKAIAIgAgBCABa2ohBSABIABrQQVqIQYDQCABLQAAIABB8M4Aai0AAEcNcyAAQQVGDXUgAEEBaiEAIAQgAUEBaiIBRw0ACyACIAU2AgAMsQILIAEgBEYEQEH8ACEDDLECCwJAAkAgAS0AAEHDAGsODAB0dHR0dHR0dHR0AXQLIAFBAWohAUHmACEDDJgCCyABQQFqIQFB5wAhAwyXAgtB/QAhAyABIARGDa8CIAIoAgAiACAEIAFraiEFIAEgAGtBAmohBgJAA0AgAS0AACAAQe3PAGotAABHDXIgAEECRg0BIABBAWohACAEIAFBAWoiAUcNAAsgAiAFNgIADLACCyACQQA2AgAgBkEBaiEBQRAMcwtB/gAhAyABIARGDa4CIAIoAgAiACAEIAFraiEFIAEgAGtBBWohBgJAA0AgAS0AACAAQfbOAGotAABHDXEgAEEFRg0BIABBAWohACAEIAFBAWoiAUcNAAsgAiAFNgIADK8CCyACQQA2AgAgBkEBaiEBQRYMcgtB/wAhAyABIARGDa0CIAIoAgAiACAEIAFraiEFIAEgAGtBA2ohBgJAA0AgAS0AACAAQfzOAGotAABHDXAgAEEDRg0BIABBAWohACAEIAFBAWoiAUcNAAsgAiAFNgIADK4CCyACQQA2AgAgBkEBaiEBQQUMcQsgASAERgRAQYABIQMMrQILIAEtAABB2QBHDW4gAUEBaiEBQQgMcAsgASAERgRAQYEBIQMMrAILAkACQCABLQAAQc4Aaw4DAG8BbwsgAUEBaiEBQesAIQMMkwILIAFBAWohAUHsACEDDJICCyABIARGBEBBggEhAwyrAgsCQAJAIAEtAABByABrDggAbm5ubm5uAW4LIAFBAWohAUHqACEDDJICCyABQQFqIQFB7QAhAwyRAgtBgwEhAyABIARGDakCIAIoAgAiACAEIAFraiEFIAEgAGtBAmohBgJAA0AgAS0AACAAQYDPAGotAABHDWwgAEECRg0BIABBAWohACAEIAFBAWoiAUcNAAsgAiAFNgIADKoCCyACQQA2AgAgBkEBaiEBQQAMbQtBhAEhAyABIARGDagCIAIoAgAiACAEIAFraiEFIAEgAGtBBGohBgJAA0AgAS0AACAAQYPPAGotAABHDWsgAEEERg0BIABBAWohACAEIAFBAWoiAUcNAAsgAiAFNgIADKkCCyACQQA2AgAgBkEBaiEBQSMMbAsgASAERgRAQYUBIQMMqAILAkACQCABLQAAQcwAaw4IAGtra2trawFrCyABQQFqIQFB7wAhAwyPAgsgAUEBaiEBQfAAIQMMjgILIAEgBEYEQEGGASEDDKcCCyABLQAAQcUARw1oIAFBAWohAQxgC0GHASEDIAEgBEYNpQIgAigCACIAIAQgAWtqIQUgASAAa0EDaiEGAkADQCABLQAAIABBiM8Aai0AAEcNaCAAQQNGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyACIAU2AgAMpgILIAJBADYCACAGQQFqIQFBLQxpC0GIASEDIAEgBEYNpAIgAigCACIAIAQgAWtqIQUgASAAa0EIaiEGAkADQCABLQAAIABB0M8Aai0AAEcNZyAAQQhGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyACIAU2AgAMpQILIAJBADYCACAGQQFqIQFBKQxoCyABIARGBEBBiQEhAwykAgtBASABLQAAQd8ARw1nGiABQQFqIQEMXgtBigEhAyABIARGDaICIAIoAgAiACAEIAFraiEFIAEgAGtBAWohBgNAIAEtAAAgAEGMzwBqLQAARw1kIABBAUYN+gEgAEEBaiEAIAQgAUEBaiIBRw0ACyACIAU2AgAMogILQYsBIQMgASAERg2hAiACKAIAIgAgBCABa2ohBSABIABrQQJqIQYCQANAIAEtAAAgAEGOzwBqLQAARw1kIABBAkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAyiAgsgAkEANgIAIAZBAWohAUECDGULQYwBIQMgASAERg2gAiACKAIAIgAgBCABa2ohBSABIABrQQFqIQYCQANAIAEtAAAgAEHwzwBqLQAARw1jIABBAUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAyhAgsgAkEANgIAIAZBAWohAUEfDGQLQY0BIQMgASAERg2fAiACKAIAIgAgBCABa2ohBSABIABrQQFqIQYCQANAIAEtAAAgAEHyzwBqLQAARw1iIABBAUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAygAgsgAkEANgIAIAZBAWohAUEJDGMLIAEgBEYEQEGOASEDDJ8CCwJAAkAgAS0AAEHJAGsOBwBiYmJiYgFiCyABQQFqIQFB+AAhAwyGAgsgAUEBaiEBQfkAIQMMhQILQY8BIQMgASAERg2dAiACKAIAIgAgBCABa2ohBSABIABrQQVqIQYCQANAIAEtAAAgAEGRzwBqLQAARw1gIABBBUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAyeAgsgAkEANgIAIAZBAWohAUEYDGELQZABIQMgASAERg2cAiACKAIAIgAgBCABa2ohBSABIABrQQJqIQYCQANAIAEtAAAgAEGXzwBqLQAARw1fIABBAkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAydAgsgAkEANgIAIAZBAWohAUEXDGALQZEBIQMgASAERg2bAiACKAIAIgAgBCABa2ohBSABIABrQQZqIQYCQANAIAEtAAAgAEGazwBqLQAARw1eIABBBkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAycAgsgAkEANgIAIAZBAWohAUEVDF8LQZIBIQMgASAERg2aAiACKAIAIgAgBCABa2ohBSABIABrQQVqIQYCQANAIAEtAAAgAEGhzwBqLQAARw1dIABBBUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAybAgsgAkEANgIAIAZBAWohAUEeDF4LIAEgBEYEQEGTASEDDJoCCyABLQAAQcwARw1bIAFBAWohAUEKDF0LIAEgBEYEQEGUASEDDJkCCwJAAkAgAS0AAEHBAGsODwBcXFxcXFxcXFxcXFxcAVwLIAFBAWohAUH+ACEDDIACCyABQQFqIQFB/wAhAwz/AQsgASAERgRAQZUBIQMMmAILAkACQCABLQAAQcEAaw4DAFsBWwsgAUEBaiEBQf0AIQMM/wELIAFBAWohAUGAASEDDP4BC0GWASEDIAEgBEYNlgIgAigCACIAIAQgAWtqIQUgASAAa0EBaiEGAkADQCABLQAAIABBp88Aai0AAEcNWSAAQQFGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyACIAU2AgAMlwILIAJBADYCACAGQQFqIQFBCwxaCyABIARGBEBBlwEhAwyWAgsCQAJAAkACQCABLQAAQS1rDiMAW1tbW1tbW1tbW1tbW1tbW1tbW1tbW1sBW1tbW1sCW1tbA1sLIAFBAWohAUH7ACEDDP8BCyABQQFqIQFB/AAhAwz+AQsgAUEBaiEBQYEBIQMM/QELIAFBAWohAUGCASEDDPwBC0GYASEDIAEgBEYNlAIgAigCACIAIAQgAWtqIQUgASAAa0EEaiEGAkADQCABLQAAIABBqc8Aai0AAEcNVyAAQQRGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyACIAU2AgAMlQILIAJBADYCACAGQQFqIQFBGQxYC0GZASEDIAEgBEYNkwIgAigCACIAIAQgAWtqIQUgASAAa0EFaiEGAkADQCABLQAAIABBrs8Aai0AAEcNViAAQQVGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyACIAU2AgAMlAILIAJBADYCACAGQQFqIQFBBgxXC0GaASEDIAEgBEYNkgIgAigCACIAIAQgAWtqIQUgASAAa0EBaiEGAkADQCABLQAAIABBtM8Aai0AAEcNVSAAQQFGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyACIAU2AgAMkwILIAJBADYCACAGQQFqIQFBHAxWC0GbASEDIAEgBEYNkQIgAigCACIAIAQgAWtqIQUgASAAa0EBaiEGAkADQCABLQAAIABBts8Aai0AAEcNVCAAQQFGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyACIAU2AgAMkgILIAJBADYCACAGQQFqIQFBJwxVCyABIARGBEBBnAEhAwyRAgsCQAJAIAEtAABB1ABrDgIAAVQLIAFBAWohAUGGASEDDPgBCyABQQFqIQFBhwEhAwz3AQtBnQEhAyABIARGDY8CIAIoAgAiACAEIAFraiEFIAEgAGtBAWohBgJAA0AgAS0AACAAQbjPAGotAABHDVIgAEEBRg0BIABBAWohACAEIAFBAWoiAUcNAAsgAiAFNgIADJACCyACQQA2AgAgBkEBaiEBQSYMUwtBngEhAyABIARGDY4CIAIoAgAiACAEIAFraiEFIAEgAGtBAWohBgJAA0AgAS0AACAAQbrPAGotAABHDVEgAEEBRg0BIABBAWohACAEIAFBAWoiAUcNAAsgAiAFNgIADI8CCyACQQA2AgAgBkEBaiEBQQMMUgtBnwEhAyABIARGDY0CIAIoAgAiACAEIAFraiEFIAEgAGtBAmohBgJAA0AgAS0AACAAQe3PAGotAABHDVAgAEECRg0BIABBAWohACAEIAFBAWoiAUcNAAsgAiAFNgIADI4CCyACQQA2AgAgBkEBaiEBQQwMUQtBoAEhAyABIARGDYwCIAIoAgAiACAEIAFraiEFIAEgAGtBA2ohBgJAA0AgAS0AACAAQbzPAGotAABHDU8gAEEDRg0BIABBAWohACAEIAFBAWoiAUcNAAsgAiAFNgIADI0CCyACQQA2AgAgBkEBaiEBQQ0MUAsgASAERgRAQaEBIQMMjAILAkACQCABLQAAQcYAaw4LAE9PT09PT09PTwFPCyABQQFqIQFBiwEhAwzzAQsgAUEBaiEBQYwBIQMM8gELIAEgBEYEQEGiASEDDIsCCyABLQAAQdAARw1MIAFBAWohAQxGCyABIARGBEBBowEhAwyKAgsCQAJAIAEtAABByQBrDgcBTU1NTU0ATQsgAUEBaiEBQY4BIQMM8QELIAFBAWohAUEiDE0LQaQBIQMgASAERg2IAiACKAIAIgAgBCABa2ohBSABIABrQQFqIQYCQANAIAEtAAAgAEHAzwBqLQAARw1LIABBAUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAyJAgsgAkEANgIAIAZBAWohAUEdDEwLIAEgBEYEQEGlASEDDIgCCwJAAkAgAS0AAEHSAGsOAwBLAUsLIAFBAWohAUGQASEDDO8BCyABQQFqIQFBBAxLCyABIARGBEBBpgEhAwyHAgsCQAJAAkACQAJAIAEtAABBwQBrDhUATU1NTU1NTU1NTQFNTQJNTQNNTQRNCyABQQFqIQFBiAEhAwzxAQsgAUEBaiEBQYkBIQMM8AELIAFBAWohAUGKASEDDO8BCyABQQFqIQFBjwEhAwzuAQsgAUEBaiEBQZEBIQMM7QELQacBIQMgASAERg2FAiACKAIAIgAgBCABa2ohBSABIABrQQJqIQYCQANAIAEtAAAgAEHtzwBqLQAARw1IIABBAkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAyGAgsgAkEANgIAIAZBAWohAUERDEkLQagBIQMgASAERg2EAiACKAIAIgAgBCABa2ohBSABIABrQQJqIQYCQANAIAEtAAAgAEHCzwBqLQAARw1HIABBAkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAyFAgsgAkEANgIAIAZBAWohAUEsDEgLQakBIQMgASAERg2DAiACKAIAIgAgBCABa2ohBSABIABrQQRqIQYCQANAIAEtAAAgAEHFzwBqLQAARw1GIABBBEYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAyEAgsgAkEANgIAIAZBAWohAUErDEcLQaoBIQMgASAERg2CAiACKAIAIgAgBCABa2ohBSABIABrQQJqIQYCQANAIAEtAAAgAEHKzwBqLQAARw1FIABBAkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAyDAgsgAkEANgIAIAZBAWohAUEUDEYLIAEgBEYEQEGrASEDDIICCwJAAkACQAJAIAEtAABBwgBrDg8AAQJHR0dHR0dHR0dHRwNHCyABQQFqIQFBkwEhAwzrAQsgAUEBaiEBQZQBIQMM6gELIAFBAWohAUGVASEDDOkBCyABQQFqIQFBlgEhAwzoAQsgASAERgRAQawBIQMMgQILIAEtAABBxQBHDUIgAUEBaiEBDD0LQa0BIQMgASAERg3/ASACKAIAIgAgBCABa2ohBSABIABrQQJqIQYCQANAIAEtAAAgAEHNzwBqLQAARw1CIABBAkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAyAAgsgAkEANgIAIAZBAWohAUEODEMLIAEgBEYEQEGuASEDDP8BCyABLQAAQdAARw1AIAFBAWohAUElDEILQa8BIQMgASAERg39ASACKAIAIgAgBCABa2ohBSABIABrQQhqIQYCQANAIAEtAAAgAEHQzwBqLQAARw1AIABBCEYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAz+AQsgAkEANgIAIAZBAWohAUEqDEELIAEgBEYEQEGwASEDDP0BCwJAAkAgAS0AAEHVAGsOCwBAQEBAQEBAQEABQAsgAUEBaiEBQZoBIQMM5AELIAFBAWohAUGbASEDDOMBCyABIARGBEBBsQEhAwz8AQsCQAJAIAEtAABBwQBrDhQAPz8/Pz8/Pz8/Pz8/Pz8/Pz8/AT8LIAFBAWohAUGZASEDDOMBCyABQQFqIQFBnAEhAwziAQtBsgEhAyABIARGDfoBIAIoAgAiACAEIAFraiEFIAEgAGtBA2ohBgJAA0AgAS0AACAAQdnPAGotAABHDT0gAEEDRg0BIABBAWohACAEIAFBAWoiAUcNAAsgAiAFNgIADPsBCyACQQA2AgAgBkEBaiEBQSEMPgtBswEhAyABIARGDfkBIAIoAgAiACAEIAFraiEFIAEgAGtBBmohBgJAA0AgAS0AACAAQd3PAGotAABHDTwgAEEGRg0BIABBAWohACAEIAFBAWoiAUcNAAsgAiAFNgIADPoBCyACQQA2AgAgBkEBaiEBQRoMPQsgASAERgRAQbQBIQMM+QELAkACQAJAIAEtAABBxQBrDhEAPT09PT09PT09AT09PT09Aj0LIAFBAWohAUGdASEDDOEBCyABQQFqIQFBngEhAwzgAQsgAUEBaiEBQZ8BIQMM3wELQbUBIQMgASAERg33ASACKAIAIgAgBCABa2ohBSABIABrQQVqIQYCQANAIAEtAAAgAEHkzwBqLQAARw06IABBBUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAz4AQsgAkEANgIAIAZBAWohAUEoDDsLQbYBIQMgASAERg32ASACKAIAIgAgBCABa2ohBSABIABrQQJqIQYCQANAIAEtAAAgAEHqzwBqLQAARw05IABBAkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAz3AQsgAkEANgIAIAZBAWohAUEHDDoLIAEgBEYEQEG3ASEDDPYBCwJAAkAgAS0AAEHFAGsODgA5OTk5OTk5OTk5OTkBOQsgAUEBaiEBQaEBIQMM3QELIAFBAWohAUGiASEDDNwBC0G4ASEDIAEgBEYN9AEgAigCACIAIAQgAWtqIQUgASAAa0ECaiEGAkADQCABLQAAIABB7c8Aai0AAEcNNyAAQQJGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyACIAU2AgAM9QELIAJBADYCACAGQQFqIQFBEgw4C0G5ASEDIAEgBEYN8wEgAigCACIAIAQgAWtqIQUgASAAa0EBaiEGAkADQCABLQAAIABB8M8Aai0AAEcNNiAAQQFGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyACIAU2AgAM9AELIAJBADYCACAGQQFqIQFBIAw3C0G6ASEDIAEgBEYN8gEgAigCACIAIAQgAWtqIQUgASAAa0EBaiEGAkADQCABLQAAIABB8s8Aai0AAEcNNSAAQQFGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyACIAU2AgAM8wELIAJBADYCACAGQQFqIQFBDww2CyABIARGBEBBuwEhAwzyAQsCQAJAIAEtAABByQBrDgcANTU1NTUBNQsgAUEBaiEBQaUBIQMM2QELIAFBAWohAUGmASEDDNgBC0G8ASEDIAEgBEYN8AEgAigCACIAIAQgAWtqIQUgASAAa0EHaiEGAkADQCABLQAAIABB9M8Aai0AAEcNMyAAQQdGDQEgAEEBaiEAIAQgAUEBaiIBRw0ACyACIAU2AgAM8QELIAJBADYCACAGQQFqIQFBGww0CyABIARGBEBBvQEhAwzwAQsCQAJAAkAgAS0AAEHCAGsOEgA0NDQ0NDQ0NDQBNDQ0NDQ0AjQLIAFBAWohAUGkASEDDNgBCyABQQFqIQFBpwEhAwzXAQsgAUEBaiEBQagBIQMM1gELIAEgBEYEQEG+ASEDDO8BCyABLQAAQc4ARw0wIAFBAWohAQwsCyABIARGBEBBvwEhAwzuAQsCQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQCABLQAAQcEAaw4VAAECAz8EBQY/Pz8HCAkKCz8MDQ4PPwsgAUEBaiEBQegAIQMM4wELIAFBAWohAUHpACEDDOIBCyABQQFqIQFB7gAhAwzhAQsgAUEBaiEBQfIAIQMM4AELIAFBAWohAUHzACEDDN8BCyABQQFqIQFB9gAhAwzeAQsgAUEBaiEBQfcAIQMM3QELIAFBAWohAUH6ACEDDNwBCyABQQFqIQFBgwEhAwzbAQsgAUEBaiEBQYQBIQMM2gELIAFBAWohAUGFASEDDNkBCyABQQFqIQFBkgEhAwzYAQsgAUEBaiEBQZgBIQMM1wELIAFBAWohAUGgASEDDNYBCyABQQFqIQFBowEhAwzVAQsgAUEBaiEBQaoBIQMM1AELIAEgBEcEQCACQRA2AgggAiABNgIEQasBIQMM1AELQcABIQMM7AELQQAhAAJAIAIoAjgiA0UNACADKAI0IgNFDQAgAiADEQAAIQALIABFDV4gAEEVRw0HIAJB0QA2AhwgAiABNgIUIAJBsBc2AhAgAkEVNgIMQQAhAwzrAQsgAUEBaiABIARHDQgaQcIBIQMM6gELA0ACQCABLQAAQQprDgQIAAALAAsgBCABQQFqIgFHDQALQcMBIQMM6QELIAEgBEcEQCACQRE2AgggAiABNgIEQQEhAwzQAQtBxAEhAwzoAQsgASAERgRAQcUBIQMM6AELAkACQCABLQAAQQprDgQBKCgAKAsgAUEBagwJCyABQQFqDAULIAEgBEYEQEHGASEDDOcBCwJAAkAgAS0AAEEKaw4XAQsLAQsLCwsLCwsLCwsLCwsLCwsLCwALCyABQQFqIQELQbABIQMMzQELIAEgBEYEQEHIASEDDOYBCyABLQAAQSBHDQkgAkEAOwEyIAFBAWohAUGzASEDDMwBCwNAIAEhAAJAIAEgBEcEQCABLQAAQTBrQf8BcSIDQQpJDQEMJwtBxwEhAwzmAQsCQCACLwEyIgFBmTNLDQAgAiABQQpsIgU7ATIgBUH+/wNxIANB//8Dc0sNACAAQQFqIQEgAiADIAVqIgM7ATIgA0H//wNxQegHSQ0BCwtBACEDIAJBADYCHCACQcEJNgIQIAJBDTYCDCACIABBAWo2AhQM5AELIAJBADYCHCACIAE2AhQgAkHwDDYCECACQRs2AgxBACEDDOMBCyACKAIEIQAgAkEANgIEIAIgACABECYiAA0BIAFBAWoLIQFBrQEhAwzIAQsgAkHBATYCHCACIAA2AgwgAiABQQFqNgIUQQAhAwzgAQsgAigCBCEAIAJBADYCBCACIAAgARAmIgANASABQQFqCyEBQa4BIQMMxQELIAJBwgE2AhwgAiAANgIMIAIgAUEBajYCFEEAIQMM3QELIAJBADYCHCACIAE2AhQgAkGXCzYCECACQQ02AgxBACEDDNwBCyACQQA2AhwgAiABNgIUIAJB4xA2AhAgAkEJNgIMQQAhAwzbAQsgAkECOgAoDKwBC0EAIQMgAkEANgIcIAJBrws2AhAgAkECNgIMIAIgAUEBajYCFAzZAQtBAiEDDL8BC0ENIQMMvgELQSYhAwy9AQtBFSEDDLwBC0EWIQMMuwELQRghAwy6AQtBHCEDDLkBC0EdIQMMuAELQSAhAwy3AQtBISEDDLYBC0EjIQMMtQELQcYAIQMMtAELQS4hAwyzAQtBPSEDDLIBC0HLACEDDLEBC0HOACEDDLABC0HYACEDDK8BC0HZACEDDK4BC0HbACEDDK0BC0HxACEDDKwBC0H0ACEDDKsBC0GNASEDDKoBC0GXASEDDKkBC0GpASEDDKgBC0GvASEDDKcBC0GxASEDDKYBCyACQQA2AgALQQAhAyACQQA2AhwgAiABNgIUIAJB8Rs2AhAgAkEGNgIMDL0BCyACQQA2AgAgBkEBaiEBQSQLOgApIAIoAgQhACACQQA2AgQgAiAAIAEQJyIARQRAQeUAIQMMowELIAJB+QA2AhwgAiABNgIUIAIgADYCDEEAIQMMuwELIABBFUcEQCACQQA2AhwgAiABNgIUIAJBzA42AhAgAkEgNgIMQQAhAwy7AQsgAkH4ADYCHCACIAE2AhQgAkHKGDYCECACQRU2AgxBACEDDLoBCyACQQA2AhwgAiABNgIUIAJBjhs2AhAgAkEGNgIMQQAhAwy5AQsgAkEANgIcIAIgATYCFCACQf4RNgIQIAJBBzYCDEEAIQMMuAELIAJBADYCHCACIAE2AhQgAkGMHDYCECACQQc2AgxBACEDDLcBCyACQQA2AhwgAiABNgIUIAJBww82AhAgAkEHNgIMQQAhAwy2AQsgAkEANgIcIAIgATYCFCACQcMPNgIQIAJBBzYCDEEAIQMMtQELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0RIAJB5QA2AhwgAiABNgIUIAIgADYCDEEAIQMMtAELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0gIAJB0wA2AhwgAiABNgIUIAIgADYCDEEAIQMMswELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0iIAJB0gA2AhwgAiABNgIUIAIgADYCDEEAIQMMsgELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0OIAJB5QA2AhwgAiABNgIUIAIgADYCDEEAIQMMsQELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0dIAJB0wA2AhwgAiABNgIUIAIgADYCDEEAIQMMsAELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0fIAJB0gA2AhwgAiABNgIUIAIgADYCDEEAIQMMrwELIABBP0cNASABQQFqCyEBQQUhAwyUAQtBACEDIAJBADYCHCACIAE2AhQgAkH9EjYCECACQQc2AgwMrAELIAJBADYCHCACIAE2AhQgAkHcCDYCECACQQc2AgxBACEDDKsBCyACKAIEIQAgAkEANgIEIAIgACABECUiAEUNByACQeUANgIcIAIgATYCFCACIAA2AgxBACEDDKoBCyACKAIEIQAgAkEANgIEIAIgACABECUiAEUNFiACQdMANgIcIAIgATYCFCACIAA2AgxBACEDDKkBCyACKAIEIQAgAkEANgIEIAIgACABECUiAEUNGCACQdIANgIcIAIgATYCFCACIAA2AgxBACEDDKgBCyACQQA2AhwgAiABNgIUIAJBxgo2AhAgAkEHNgIMQQAhAwynAQsgAigCBCEAIAJBADYCBCACIAAgARAlIgBFDQMgAkHlADYCHCACIAE2AhQgAiAANgIMQQAhAwymAQsgAigCBCEAIAJBADYCBCACIAAgARAlIgBFDRIgAkHTADYCHCACIAE2AhQgAiAANgIMQQAhAwylAQsgAigCBCEAIAJBADYCBCACIAAgARAlIgBFDRQgAkHSADYCHCACIAE2AhQgAiAANgIMQQAhAwykAQsgAigCBCEAIAJBADYCBCACIAAgARAlIgBFDQAgAkHlADYCHCACIAE2AhQgAiAANgIMQQAhAwyjAQtB1QAhAwyJAQsgAEEVRwRAIAJBADYCHCACIAE2AhQgAkG5DTYCECACQRo2AgxBACEDDKIBCyACQeQANgIcIAIgATYCFCACQeMXNgIQIAJBFTYCDEEAIQMMoQELIAJBADYCACAGQQFqIQEgAi0AKSIAQSNrQQtJDQQCQCAAQQZLDQBBASAAdEHKAHFFDQAMBQtBACEDIAJBADYCHCACIAE2AhQgAkH3CTYCECACQQg2AgwMoAELIAJBADYCACAGQQFqIQEgAi0AKUEhRg0DIAJBADYCHCACIAE2AhQgAkGbCjYCECACQQg2AgxBACEDDJ8BCyACQQA2AgALQQAhAyACQQA2AhwgAiABNgIUIAJBkDM2AhAgAkEINgIMDJ0BCyACQQA2AgAgBkEBaiEBIAItAClBI0kNACACQQA2AhwgAiABNgIUIAJB0wk2AhAgAkEINgIMQQAhAwycAQtB0QAhAwyCAQsgAS0AAEEwayIAQf8BcUEKSQRAIAIgADoAKiABQQFqIQFBzwAhAwyCAQsgAigCBCEAIAJBADYCBCACIAAgARAoIgBFDYYBIAJB3gA2AhwgAiABNgIUIAIgADYCDEEAIQMMmgELIAIoAgQhACACQQA2AgQgAiAAIAEQKCIARQ2GASACQdwANgIcIAIgATYCFCACIAA2AgxBACEDDJkBCyACKAIEIQAgAkEANgIEIAIgACAFECgiAEUEQCAFIQEMhwELIAJB2gA2AhwgAiAFNgIUIAIgADYCDAyYAQtBACEBQQEhAwsgAiADOgArIAVBAWohAwJAAkACQCACLQAtQRBxDQACQAJAAkAgAi0AKg4DAQACBAsgBkUNAwwCCyAADQEMAgsgAUUNAQsgAigCBCEAIAJBADYCBCACIAAgAxAoIgBFBEAgAyEBDAILIAJB2AA2AhwgAiADNgIUIAIgADYCDEEAIQMMmAELIAIoAgQhACACQQA2AgQgAiAAIAMQKCIARQRAIAMhAQyHAQsgAkHZADYCHCACIAM2AhQgAiAANgIMQQAhAwyXAQtBzAAhAwx9CyAAQRVHBEAgAkEANgIcIAIgATYCFCACQZQNNgIQIAJBITYCDEEAIQMMlgELIAJB1wA2AhwgAiABNgIUIAJByRc2AhAgAkEVNgIMQQAhAwyVAQtBACEDIAJBADYCHCACIAE2AhQgAkGAETYCECACQQk2AgwMlAELIAIoAgQhACACQQA2AgQgAiAAIAEQJSIARQ0AIAJB0wA2AhwgAiABNgIUIAIgADYCDEEAIQMMkwELQckAIQMMeQsgAkEANgIcIAIgATYCFCACQcEoNgIQIAJBBzYCDCACQQA2AgBBACEDDJEBCyACKAIEIQBBACEDIAJBADYCBCACIAAgARAlIgBFDQAgAkHSADYCHCACIAE2AhQgAiAANgIMDJABC0HIACEDDHYLIAJBADYCACAFIQELIAJBgBI7ASogAUEBaiEBQQAhAAJAIAIoAjgiA0UNACADKAIwIgNFDQAgAiADEQAAIQALIAANAQtBxwAhAwxzCyAAQRVGBEAgAkHRADYCHCACIAE2AhQgAkHjFzYCECACQRU2AgxBACEDDIwBC0EAIQMgAkEANgIcIAIgATYCFCACQbkNNgIQIAJBGjYCDAyLAQtBACEDIAJBADYCHCACIAE2AhQgAkGgGTYCECACQR42AgwMigELIAEtAABBOkYEQCACKAIEIQBBACEDIAJBADYCBCACIAAgARApIgBFDQEgAkHDADYCHCACIAA2AgwgAiABQQFqNgIUDIoBC0EAIQMgAkEANgIcIAIgATYCFCACQbERNgIQIAJBCjYCDAyJAQsgAUEBaiEBQTshAwxvCyACQcMANgIcIAIgADYCDCACIAFBAWo2AhQMhwELQQAhAyACQQA2AhwgAiABNgIUIAJB8A42AhAgAkEcNgIMDIYBCyACIAIvATBBEHI7ATAMZgsCQCACLwEwIgBBCHFFDQAgAi0AKEEBRw0AIAItAC1BCHFFDQMLIAIgAEH3+wNxQYAEcjsBMAwECyABIARHBEACQANAIAEtAABBMGsiAEH/AXFBCk8EQEE1IQMMbgsgAikDICIKQpmz5syZs+bMGVYNASACIApCCn4iCjcDICAKIACtQv8BgyILQn+FVg0BIAIgCiALfDcDICAEIAFBAWoiAUcNAAtBOSEDDIUBCyACKAIEIQBBACEDIAJBADYCBCACIAAgAUEBaiIBECoiAA0MDHcLQTkhAwyDAQsgAi0AMEEgcQ0GQcUBIQMMaQtBACEDIAJBADYCBCACIAEgARAqIgBFDQQgAkE6NgIcIAIgADYCDCACIAFBAWo2AhQMgQELIAItAChBAUcNACACLQAtQQhxRQ0BC0E3IQMMZgsgAigCBCEAQQAhAyACQQA2AgQgAiAAIAEQKiIABEAgAkE7NgIcIAIgADYCDCACIAFBAWo2AhQMfwsgAUEBaiEBDG4LIAJBCDoALAwECyABQQFqIQEMbQtBACEDIAJBADYCHCACIAE2AhQgAkHkEjYCECACQQQ2AgwMewsgAigCBCEAQQAhAyACQQA2AgQgAiAAIAEQKiIARQ1sIAJBNzYCHCACIAE2AhQgAiAANgIMDHoLIAIgAi8BMEEgcjsBMAtBMCEDDF8LIAJBNjYCHCACIAE2AhQgAiAANgIMDHcLIABBLEcNASABQQFqIQBBASEBAkACQAJAAkACQCACLQAsQQVrDgQDAQIEAAsgACEBDAQLQQIhAQwBC0EEIQELIAJBAToALCACIAIvATAgAXI7ATAgACEBDAELIAIgAi8BMEEIcjsBMCAAIQELQTkhAwxcCyACQQA6ACwLQTQhAwxaCyABIARGBEBBLSEDDHMLAkACQANAAkAgAS0AAEEKaw4EAgAAAwALIAQgAUEBaiIBRw0AC0EtIQMMdAsgAigCBCEAQQAhAyACQQA2AgQgAiAAIAEQKiIARQ0CIAJBLDYCHCACIAE2AhQgAiAANgIMDHMLIAIoAgQhAEEAIQMgAkEANgIEIAIgACABECoiAEUEQCABQQFqIQEMAgsgAkEsNgIcIAIgADYCDCACIAFBAWo2AhQMcgsgAS0AAEENRgRAIAIoAgQhAEEAIQMgAkEANgIEIAIgACABECoiAEUEQCABQQFqIQEMAgsgAkEsNgIcIAIgADYCDCACIAFBAWo2AhQMcgsgAi0ALUEBcQRAQcQBIQMMWQsgAigCBCEAQQAhAyACQQA2AgQgAiAAIAEQKiIADQEMZQtBLyEDDFcLIAJBLjYCHCACIAE2AhQgAiAANgIMDG8LQQAhAyACQQA2AhwgAiABNgIUIAJB8BQ2AhAgAkEDNgIMDG4LQQEhAwJAAkACQAJAIAItACxBBWsOBAMBAgAECyACIAIvATBBCHI7ATAMAwtBAiEDDAELQQQhAwsgAkEBOgAsIAIgAi8BMCADcjsBMAtBKiEDDFMLQQAhAyACQQA2AhwgAiABNgIUIAJB4Q82AhAgAkEKNgIMDGsLQQEhAwJAAkACQAJAAkACQCACLQAsQQJrDgcFBAQDAQIABAsgAiACLwEwQQhyOwEwDAMLQQIhAwwBC0EEIQMLIAJBAToALCACIAIvATAgA3I7ATALQSshAwxSC0EAIQMgAkEANgIcIAIgATYCFCACQasSNgIQIAJBCzYCDAxqC0EAIQMgAkEANgIcIAIgATYCFCACQf0NNgIQIAJBHTYCDAxpCyABIARHBEADQCABLQAAQSBHDUggBCABQQFqIgFHDQALQSUhAwxpC0ElIQMMaAsgAi0ALUEBcQRAQcMBIQMMTwsgAigCBCEAQQAhAyACQQA2AgQgAiAAIAEQKSIABEAgAkEmNgIcIAIgADYCDCACIAFBAWo2AhQMaAsgAUEBaiEBDFwLIAFBAWohASACLwEwIgBBgAFxBEBBACEAAkAgAigCOCIDRQ0AIAMoAlQiA0UNACACIAMRAAAhAAsgAEUNBiAAQRVHDR8gAkEFNgIcIAIgATYCFCACQfkXNgIQIAJBFTYCDEEAIQMMZwsCQCAAQaAEcUGgBEcNACACLQAtQQJxDQBBACEDIAJBADYCHCACIAE2AhQgAkGWEzYCECACQQQ2AgwMZwsgAgJ/IAIvATBBFHFBFEYEQEEBIAItAChBAUYNARogAi8BMkHlAEYMAQsgAi0AKUEFRgs6AC5BACEAAkAgAigCOCIDRQ0AIAMoAiQiA0UNACACIAMRAAAhAAsCQAJAAkACQAJAIAAOFgIBAAQEBAQEBAQEBAQEBAQEBAQEBAMECyACQQE6AC4LIAIgAi8BMEHAAHI7ATALQSchAwxPCyACQSM2AhwgAiABNgIUIAJBpRY2AhAgAkEVNgIMQQAhAwxnC0EAIQMgAkEANgIcIAIgATYCFCACQdULNgIQIAJBETYCDAxmC0EAIQACQCACKAI4IgNFDQAgAygCLCIDRQ0AIAIgAxEAACEACyAADQELQQ4hAwxLCyAAQRVGBEAgAkECNgIcIAIgATYCFCACQbAYNgIQIAJBFTYCDEEAIQMMZAtBACEDIAJBADYCHCACIAE2AhQgAkGnDjYCECACQRI2AgwMYwtBACEDIAJBADYCHCACIAE2AhQgAkGqHDYCECACQQ82AgwMYgsgAigCBCEAQQAhAyACQQA2AgQgAiAAIAEgCqdqIgEQKyIARQ0AIAJBBTYCHCACIAE2AhQgAiAANgIMDGELQQ8hAwxHC0EAIQMgAkEANgIcIAIgATYCFCACQc0TNgIQIAJBDDYCDAxfC0IBIQoLIAFBAWohAQJAIAIpAyAiC0L//////////w9YBEAgAiALQgSGIAqENwMgDAELQQAhAyACQQA2AhwgAiABNgIUIAJBrQk2AhAgAkEMNgIMDF4LQSQhAwxEC0EAIQMgAkEANgIcIAIgATYCFCACQc0TNgIQIAJBDDYCDAxcCyACKAIEIQBBACEDIAJBADYCBCACIAAgARAsIgBFBEAgAUEBaiEBDFILIAJBFzYCHCACIAA2AgwgAiABQQFqNgIUDFsLIAIoAgQhAEEAIQMgAkEANgIEAkAgAiAAIAEQLCIARQRAIAFBAWohAQwBCyACQRY2AhwgAiAANgIMIAIgAUEBajYCFAxbC0EfIQMMQQtBACEDIAJBADYCHCACIAE2AhQgAkGaDzYCECACQSI2AgwMWQsgAigCBCEAQQAhAyACQQA2AgQgAiAAIAEQLSIARQRAIAFBAWohAQxQCyACQRQ2AhwgAiAANgIMIAIgAUEBajYCFAxYCyACKAIEIQBBACEDIAJBADYCBAJAIAIgACABEC0iAEUEQCABQQFqIQEMAQsgAkETNgIcIAIgADYCDCACIAFBAWo2AhQMWAtBHiEDDD4LQQAhAyACQQA2AhwgAiABNgIUIAJBxgw2AhAgAkEjNgIMDFYLIAIoAgQhAEEAIQMgAkEANgIEIAIgACABEC0iAEUEQCABQQFqIQEMTgsgAkERNgIcIAIgADYCDCACIAFBAWo2AhQMVQsgAkEQNgIcIAIgATYCFCACIAA2AgwMVAtBACEDIAJBADYCHCACIAE2AhQgAkHGDDYCECACQSM2AgwMUwtBACEDIAJBADYCHCACIAE2AhQgAkHAFTYCECACQQI2AgwMUgsgAigCBCEAQQAhAyACQQA2AgQCQCACIAAgARAtIgBFBEAgAUEBaiEBDAELIAJBDjYCHCACIAA2AgwgAiABQQFqNgIUDFILQRshAww4C0EAIQMgAkEANgIcIAIgATYCFCACQcYMNgIQIAJBIzYCDAxQCyACKAIEIQBBACEDIAJBADYCBAJAIAIgACABECwiAEUEQCABQQFqIQEMAQsgAkENNgIcIAIgADYCDCACIAFBAWo2AhQMUAtBGiEDDDYLQQAhAyACQQA2AhwgAiABNgIUIAJBmg82AhAgAkEiNgIMDE4LIAIoAgQhAEEAIQMgAkEANgIEAkAgAiAAIAEQLCIARQRAIAFBAWohAQwBCyACQQw2AhwgAiAANgIMIAIgAUEBajYCFAxOC0EZIQMMNAtBACEDIAJBADYCHCACIAE2AhQgAkGaDzYCECACQSI2AgwMTAsgAEEVRwRAQQAhAyACQQA2AhwgAiABNgIUIAJBgww2AhAgAkETNgIMDEwLIAJBCjYCHCACIAE2AhQgAkHkFjYCECACQRU2AgxBACEDDEsLIAIoAgQhAEEAIQMgAkEANgIEIAIgACABIAqnaiIBECsiAARAIAJBBzYCHCACIAE2AhQgAiAANgIMDEsLQRMhAwwxCyAAQRVHBEBBACEDIAJBADYCHCACIAE2AhQgAkHaDTYCECACQRQ2AgwMSgsgAkEeNgIcIAIgATYCFCACQfkXNgIQIAJBFTYCDEEAIQMMSQtBACEAAkAgAigCOCIDRQ0AIAMoAiwiA0UNACACIAMRAAAhAAsgAEUNQSAAQRVGBEAgAkEDNgIcIAIgATYCFCACQbAYNgIQIAJBFTYCDEEAIQMMSQtBACEDIAJBADYCHCACIAE2AhQgAkGnDjYCECACQRI2AgwMSAtBACEDIAJBADYCHCACIAE2AhQgAkHaDTYCECACQRQ2AgwMRwtBACEDIAJBADYCHCACIAE2AhQgAkGnDjYCECACQRI2AgwMRgsgAkEAOgAvIAItAC1BBHFFDT8LIAJBADoALyACQQE6ADRBACEDDCsLQQAhAyACQQA2AhwgAkHkETYCECACQQc2AgwgAiABQQFqNgIUDEMLAkADQAJAIAEtAABBCmsOBAACAgACCyAEIAFBAWoiAUcNAAtB3QEhAwxDCwJAAkAgAi0ANEEBRw0AQQAhAAJAIAIoAjgiA0UNACADKAJYIgNFDQAgAiADEQAAIQALIABFDQAgAEEVRw0BIAJB3AE2AhwgAiABNgIUIAJB1RY2AhAgAkEVNgIMQQAhAwxEC0HBASEDDCoLIAJBADYCHCACIAE2AhQgAkHpCzYCECACQR82AgxBACEDDEILAkACQCACLQAoQQFrDgIEAQALQcABIQMMKQtBuQEhAwwoCyACQQI6AC9BACEAAkAgAigCOCIDRQ0AIAMoAgAiA0UNACACIAMRAAAhAAsgAEUEQEHCASEDDCgLIABBFUcEQCACQQA2AhwgAiABNgIUIAJBpAw2AhAgAkEQNgIMQQAhAwxBCyACQdsBNgIcIAIgATYCFCACQfoWNgIQIAJBFTYCDEEAIQMMQAsgASAERgRAQdoBIQMMQAsgAS0AAEHIAEYNASACQQE6ACgLQawBIQMMJQtBvwEhAwwkCyABIARHBEAgAkEQNgIIIAIgATYCBEG+ASEDDCQLQdkBIQMMPAsgASAERgRAQdgBIQMMPAsgAS0AAEHIAEcNBCABQQFqIQFBvQEhAwwiCyABIARGBEBB1wEhAww7CwJAAkAgAS0AAEHFAGsOEAAFBQUFBQUFBQUFBQUFBQEFCyABQQFqIQFBuwEhAwwiCyABQQFqIQFBvAEhAwwhC0HWASEDIAEgBEYNOSACKAIAIgAgBCABa2ohBSABIABrQQJqIQYCQANAIAEtAAAgAEGD0ABqLQAARw0DIABBAkYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAw6CyACKAIEIQAgAkIANwMAIAIgACAGQQFqIgEQJyIARQRAQcYBIQMMIQsgAkHVATYCHCACIAE2AhQgAiAANgIMQQAhAww5C0HUASEDIAEgBEYNOCACKAIAIgAgBCABa2ohBSABIABrQQFqIQYCQANAIAEtAAAgAEGB0ABqLQAARw0CIABBAUYNASAAQQFqIQAgBCABQQFqIgFHDQALIAIgBTYCAAw5CyACQYEEOwEoIAIoAgQhACACQgA3AwAgAiAAIAZBAWoiARAnIgANAwwCCyACQQA2AgALQQAhAyACQQA2AhwgAiABNgIUIAJB2Bs2AhAgAkEINgIMDDYLQboBIQMMHAsgAkHTATYCHCACIAE2AhQgAiAANgIMQQAhAww0C0EAIQACQCACKAI4IgNFDQAgAygCOCIDRQ0AIAIgAxEAACEACyAARQ0AIABBFUYNASACQQA2AhwgAiABNgIUIAJBzA42AhAgAkEgNgIMQQAhAwwzC0HkACEDDBkLIAJB+AA2AhwgAiABNgIUIAJByhg2AhAgAkEVNgIMQQAhAwwxC0HSASEDIAQgASIARg0wIAQgAWsgAigCACIBaiEFIAAgAWtBBGohBgJAA0AgAC0AACABQfzPAGotAABHDQEgAUEERg0DIAFBAWohASAEIABBAWoiAEcNAAsgAiAFNgIADDELIAJBADYCHCACIAA2AhQgAkGQMzYCECACQQg2AgwgAkEANgIAQQAhAwwwCyABIARHBEAgAkEONgIIIAIgATYCBEG3ASEDDBcLQdEBIQMMLwsgAkEANgIAIAZBAWohAQtBuAEhAwwUCyABIARGBEBB0AEhAwwtCyABLQAAQTBrIgBB/wFxQQpJBEAgAiAAOgAqIAFBAWohAUG2ASEDDBQLIAIoAgQhACACQQA2AgQgAiAAIAEQKCIARQ0UIAJBzwE2AhwgAiABNgIUIAIgADYCDEEAIQMMLAsgASAERgRAQc4BIQMMLAsCQCABLQAAQS5GBEAgAUEBaiEBDAELIAIoAgQhACACQQA2AgQgAiAAIAEQKCIARQ0VIAJBzQE2AhwgAiABNgIUIAIgADYCDEEAIQMMLAtBtQEhAwwSCyAEIAEiBUYEQEHMASEDDCsLQQAhAEEBIQFBASEGQQAhAwJAAkACQAJAAkACfwJAAkACQAJAAkACQAJAIAUtAABBMGsOCgoJAAECAwQFBggLC0ECDAYLQQMMBQtBBAwEC0EFDAMLQQYMAgtBBwwBC0EICyEDQQAhAUEAIQYMAgtBCSEDQQEhAEEAIQFBACEGDAELQQAhAUEBIQMLIAIgAzoAKyAFQQFqIQMCQAJAIAItAC1BEHENAAJAAkACQCACLQAqDgMBAAIECyAGRQ0DDAILIAANAQwCCyABRQ0BCyACKAIEIQAgAkEANgIEIAIgACADECgiAEUEQCADIQEMAwsgAkHJATYCHCACIAM2AhQgAiAANgIMQQAhAwwtCyACKAIEIQAgAkEANgIEIAIgACADECgiAEUEQCADIQEMGAsgAkHKATYCHCACIAM2AhQgAiAANgIMQQAhAwwsCyACKAIEIQAgAkEANgIEIAIgACAFECgiAEUEQCAFIQEMFgsgAkHLATYCHCACIAU2AhQgAiAANgIMDCsLQbQBIQMMEQtBACEAAkAgAigCOCIDRQ0AIAMoAjwiA0UNACACIAMRAAAhAAsCQCAABEAgAEEVRg0BIAJBADYCHCACIAE2AhQgAkGUDTYCECACQSE2AgxBACEDDCsLQbIBIQMMEQsgAkHIATYCHCACIAE2AhQgAkHJFzYCECACQRU2AgxBACEDDCkLIAJBADYCACAGQQFqIQFB9QAhAwwPCyACLQApQQVGBEBB4wAhAwwPC0HiACEDDA4LIAAhASACQQA2AgALIAJBADoALEEJIQMMDAsgAkEANgIAIAdBAWohAUHAACEDDAsLQQELOgAsIAJBADYCACAGQQFqIQELQSkhAwwIC0E4IQMMBwsCQCABIARHBEADQCABLQAAQYA+ai0AACIAQQFHBEAgAEECRw0DIAFBAWohAQwFCyAEIAFBAWoiAUcNAAtBPiEDDCELQT4hAwwgCwsgAkEAOgAsDAELQQshAwwEC0E6IQMMAwsgAUEBaiEBQS0hAwwCCyACIAE6ACwgAkEANgIAIAZBAWohAUEMIQMMAQsgAkEANgIAIAZBAWohAUEKIQMMAAsAC0EAIQMgAkEANgIcIAIgATYCFCACQc0QNgIQIAJBCTYCDAwXC0EAIQMgAkEANgIcIAIgATYCFCACQekKNgIQIAJBCTYCDAwWC0EAIQMgAkEANgIcIAIgATYCFCACQbcQNgIQIAJBCTYCDAwVC0EAIQMgAkEANgIcIAIgATYCFCACQZwRNgIQIAJBCTYCDAwUC0EAIQMgAkEANgIcIAIgATYCFCACQc0QNgIQIAJBCTYCDAwTC0EAIQMgAkEANgIcIAIgATYCFCACQekKNgIQIAJBCTYCDAwSC0EAIQMgAkEANgIcIAIgATYCFCACQbcQNgIQIAJBCTYCDAwRC0EAIQMgAkEANgIcIAIgATYCFCACQZwRNgIQIAJBCTYCDAwQC0EAIQMgAkEANgIcIAIgATYCFCACQZcVNgIQIAJBDzYCDAwPC0EAIQMgAkEANgIcIAIgATYCFCACQZcVNgIQIAJBDzYCDAwOC0EAIQMgAkEANgIcIAIgATYCFCACQcASNgIQIAJBCzYCDAwNC0EAIQMgAkEANgIcIAIgATYCFCACQZUJNgIQIAJBCzYCDAwMC0EAIQMgAkEANgIcIAIgATYCFCACQeEPNgIQIAJBCjYCDAwLC0EAIQMgAkEANgIcIAIgATYCFCACQfsPNgIQIAJBCjYCDAwKC0EAIQMgAkEANgIcIAIgATYCFCACQfEZNgIQIAJBAjYCDAwJC0EAIQMgAkEANgIcIAIgATYCFCACQcQUNgIQIAJBAjYCDAwIC0EAIQMgAkEANgIcIAIgATYCFCACQfIVNgIQIAJBAjYCDAwHCyACQQI2AhwgAiABNgIUIAJBnBo2AhAgAkEWNgIMQQAhAwwGC0EBIQMMBQtB1AAhAyABIARGDQQgCEEIaiEJIAIoAgAhBQJAAkAgASAERwRAIAVB2MIAaiEHIAQgBWogAWshACAFQX9zQQpqIgUgAWohBgNAIAEtAAAgBy0AAEcEQEECIQcMAwsgBUUEQEEAIQcgBiEBDAMLIAVBAWshBSAHQQFqIQcgBCABQQFqIgFHDQALIAAhBSAEIQELIAlBATYCACACIAU2AgAMAQsgAkEANgIAIAkgBzYCAAsgCSABNgIEIAgoAgwhACAIKAIIDgMBBAIACwALIAJBADYCHCACQbUaNgIQIAJBFzYCDCACIABBAWo2AhRBACEDDAILIAJBADYCHCACIAA2AhQgAkHKGjYCECACQQk2AgxBACEDDAELIAEgBEYEQEEiIQMMAQsgAkEJNgIIIAIgATYCBEEhIQMLIAhBEGokACADRQRAIAIoAgwhAAwBCyACIAM2AhxBACEAIAIoAgQiAUUNACACIAEgBCACKAIIEQEAIgFFDQAgAiAENgIUIAIgATYCDCABIQALIAALvgIBAn8gAEEAOgAAIABB3ABqIgFBAWtBADoAACAAQQA6AAIgAEEAOgABIAFBA2tBADoAACABQQJrQQA6AAAgAEEAOgADIAFBBGtBADoAAEEAIABrQQNxIgEgAGoiAEEANgIAQdwAIAFrQXxxIgIgAGoiAUEEa0EANgIAAkAgAkEJSQ0AIABBADYCCCAAQQA2AgQgAUEIa0EANgIAIAFBDGtBADYCACACQRlJDQAgAEEANgIYIABBADYCFCAAQQA2AhAgAEEANgIMIAFBEGtBADYCACABQRRrQQA2AgAgAUEYa0EANgIAIAFBHGtBADYCACACIABBBHFBGHIiAmsiAUEgSQ0AIAAgAmohAANAIABCADcDGCAAQgA3AxAgAEIANwMIIABCADcDACAAQSBqIQAgAUEgayIBQR9LDQALCwtWAQF/AkAgACgCDA0AAkACQAJAAkAgAC0ALw4DAQADAgsgACgCOCIBRQ0AIAEoAiwiAUUNACAAIAERAAAiAQ0DC0EADwsACyAAQcMWNgIQQQ4hAQsgAQsaACAAKAIMRQRAIABB0Rs2AhAgAEEVNgIMCwsUACAAKAIMQRVGBEAgAEEANgIMCwsUACAAKAIMQRZGBEAgAEEANgIMCwsHACAAKAIMCwcAIAAoAhALCQAgACABNgIQCwcAIAAoAhQLFwAgAEEkTwRAAAsgAEECdEGgM2ooAgALFwAgAEEuTwRAAAsgAEECdEGwNGooAgALvwkBAX9B6yghAQJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAIABB5ABrDvQDY2IAAWFhYWFhYQIDBAVhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhBgcICQoLDA0OD2FhYWFhEGFhYWFhYWFhYWFhEWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYRITFBUWFxgZGhthYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhHB0eHyAhIiMkJSYnKCkqKywtLi8wMTIzNDU2YTc4OTphYWFhYWFhYTthYWE8YWFhYT0+P2FhYWFhYWFhQGFhQWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYUJDREVGR0hJSktMTU5PUFFSU2FhYWFhYWFhVFVWV1hZWlthXF1hYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFeYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhX2BhC0HhJw8LQaQhDwtByywPC0H+MQ8LQcAkDwtBqyQPC0GNKA8LQeImDwtBgDAPC0G5Lw8LQdckDwtB7x8PC0HhHw8LQfofDwtB8iAPC0GoLw8LQa4yDwtBiDAPC0HsJw8LQYIiDwtBjh0PC0HQLg8LQcojDwtBxTIPC0HfHA8LQdIcDwtBxCAPC0HXIA8LQaIfDwtB7S4PC0GrMA8LQdQlDwtBzC4PC0H6Lg8LQfwrDwtB0jAPC0HxHQ8LQbsgDwtB9ysPC0GQMQ8LQdcxDwtBoi0PC0HUJw8LQeArDwtBnywPC0HrMQ8LQdUfDwtByjEPC0HeJQ8LQdQeDwtB9BwPC0GnMg8LQbEdDwtBoB0PC0G5MQ8LQbwwDwtBkiEPC0GzJg8LQeksDwtBrB4PC0HUKw8LQfcmDwtBgCYPC0GwIQ8LQf4eDwtBjSMPC0GJLQ8LQfciDwtBoDEPC0GuHw8LQcYlDwtB6B4PC0GTIg8LQcIvDwtBwx0PC0GLLA8LQeEdDwtBjS8PC0HqIQ8LQbQtDwtB0i8PC0HfMg8LQdIyDwtB8DAPC0GpIg8LQfkjDwtBmR4PC0G1LA8LQZswDwtBkjIPC0G2Kw8LQcIiDwtB+DIPC0GeJQ8LQdAiDwtBuh4PC0GBHg8LAAtB1iEhAQsgAQsWACAAIAAtAC1B/gFxIAFBAEdyOgAtCxkAIAAgAC0ALUH9AXEgAUEAR0EBdHI6AC0LGQAgACAALQAtQfsBcSABQQBHQQJ0cjoALQsZACAAIAAtAC1B9wFxIAFBAEdBA3RyOgAtCz4BAn8CQCAAKAI4IgNFDQAgAygCBCIDRQ0AIAAgASACIAFrIAMRAQAiBEF/Rw0AIABBxhE2AhBBGCEECyAECz4BAn8CQCAAKAI4IgNFDQAgAygCCCIDRQ0AIAAgASACIAFrIAMRAQAiBEF/Rw0AIABB9go2AhBBGCEECyAECz4BAn8CQCAAKAI4IgNFDQAgAygCDCIDRQ0AIAAgASACIAFrIAMRAQAiBEF/Rw0AIABB7Ro2AhBBGCEECyAECz4BAn8CQCAAKAI4IgNFDQAgAygCECIDRQ0AIAAgASACIAFrIAMRAQAiBEF/Rw0AIABBlRA2AhBBGCEECyAECz4BAn8CQCAAKAI4IgNFDQAgAygCFCIDRQ0AIAAgASACIAFrIAMRAQAiBEF/Rw0AIABBqhs2AhBBGCEECyAECz4BAn8CQCAAKAI4IgNFDQAgAygCGCIDRQ0AIAAgASACIAFrIAMRAQAiBEF/Rw0AIABB7RM2AhBBGCEECyAECz4BAn8CQCAAKAI4IgNFDQAgAygCKCIDRQ0AIAAgASACIAFrIAMRAQAiBEF/Rw0AIABB9gg2AhBBGCEECyAECz4BAn8CQCAAKAI4IgNFDQAgAygCHCIDRQ0AIAAgASACIAFrIAMRAQAiBEF/Rw0AIABBwhk2AhBBGCEECyAECz4BAn8CQCAAKAI4IgNFDQAgAygCICIDRQ0AIAAgASACIAFrIAMRAQAiBEF/Rw0AIABBlBQ2AhBBGCEECyAEC1kBAn8CQCAALQAoQQFGDQAgAC8BMiIBQeQAa0HkAEkNACABQcwBRg0AIAFBsAJGDQAgAC8BMCIAQcAAcQ0AQQEhAiAAQYgEcUGABEYNACAAQShxRSECCyACC4wBAQJ/AkACQAJAIAAtACpFDQAgAC0AK0UNACAALwEwIgFBAnFFDQEMAgsgAC8BMCIBQQFxRQ0BC0EBIQIgAC0AKEEBRg0AIAAvATIiAEHkAGtB5ABJDQAgAEHMAUYNACAAQbACRg0AIAFBwABxDQBBACECIAFBiARxQYAERg0AIAFBKHFBAEchAgsgAgtzACAAQRBq/QwAAAAAAAAAAAAAAAAAAAAA/QsDACAA/QwAAAAAAAAAAAAAAAAAAAAA/QsDACAAQTBq/QwAAAAAAAAAAAAAAAAAAAAA/QsDACAAQSBq/QwAAAAAAAAAAAAAAAAAAAAA/QsDACAAQd0BNgIcCwYAIAAQMguaLQELfyMAQRBrIgokAEGk0AAoAgAiCUUEQEHk0wAoAgAiBUUEQEHw0wBCfzcCAEHo0wBCgICEgICAwAA3AgBB5NMAIApBCGpBcHFB2KrVqgVzIgU2AgBB+NMAQQA2AgBByNMAQQA2AgALQczTAEGA1AQ2AgBBnNAAQYDUBDYCAEGw0AAgBTYCAEGs0ABBfzYCAEHQ0wBBgKwDNgIAA0AgAUHI0ABqIAFBvNAAaiICNgIAIAIgAUG00ABqIgM2AgAgAUHA0ABqIAM2AgAgAUHQ0ABqIAFBxNAAaiIDNgIAIAMgAjYCACABQdjQAGogAUHM0ABqIgI2AgAgAiADNgIAIAFB1NAAaiACNgIAIAFBIGoiAUGAAkcNAAtBjNQEQcGrAzYCAEGo0ABB9NMAKAIANgIAQZjQAEHAqwM2AgBBpNAAQYjUBDYCAEHM/wdBODYCAEGI1AQhCQsCQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQCAAQewBTQRAQYzQACgCACIGQRAgAEETakFwcSAAQQtJGyIEQQN2IgB2IgFBA3EEQAJAIAFBAXEgAHJBAXMiAkEDdCIAQbTQAGoiASAAQbzQAGooAgAiACgCCCIDRgRAQYzQACAGQX4gAndxNgIADAELIAEgAzYCCCADIAE2AgwLIABBCGohASAAIAJBA3QiAkEDcjYCBCAAIAJqIgAgACgCBEEBcjYCBAwRC0GU0AAoAgAiCCAETw0BIAEEQAJAQQIgAHQiAkEAIAJrciABIAB0cWgiAEEDdCICQbTQAGoiASACQbzQAGooAgAiAigCCCIDRgRAQYzQACAGQX4gAHdxIgY2AgAMAQsgASADNgIIIAMgATYCDAsgAiAEQQNyNgIEIABBA3QiACAEayEFIAAgAmogBTYCACACIARqIgQgBUEBcjYCBCAIBEAgCEF4cUG00ABqIQBBoNAAKAIAIQMCf0EBIAhBA3Z0IgEgBnFFBEBBjNAAIAEgBnI2AgAgAAwBCyAAKAIICyIBIAM2AgwgACADNgIIIAMgADYCDCADIAE2AggLIAJBCGohAUGg0AAgBDYCAEGU0AAgBTYCAAwRC0GQ0AAoAgAiC0UNASALaEECdEG80gBqKAIAIgAoAgRBeHEgBGshBSAAIQIDQAJAIAIoAhAiAUUEQCACQRRqKAIAIgFFDQELIAEoAgRBeHEgBGsiAyAFSSECIAMgBSACGyEFIAEgACACGyEAIAEhAgwBCwsgACgCGCEJIAAoAgwiAyAARwRAQZzQACgCABogAyAAKAIIIgE2AgggASADNgIMDBALIABBFGoiAigCACIBRQRAIAAoAhAiAUUNAyAAQRBqIQILA0AgAiEHIAEiA0EUaiICKAIAIgENACADQRBqIQIgAygCECIBDQALIAdBADYCAAwPC0F/IQQgAEG/f0sNACAAQRNqIgFBcHEhBEGQ0AAoAgAiCEUNAEEAIARrIQUCQAJAAkACf0EAIARBgAJJDQAaQR8gBEH///8HSw0AGiAEQSYgAUEIdmciAGt2QQFxIABBAXRrQT5qCyIGQQJ0QbzSAGooAgAiAkUEQEEAIQFBACEDDAELQQAhASAEQRkgBkEBdmtBACAGQR9HG3QhAEEAIQMDQAJAIAIoAgRBeHEgBGsiByAFTw0AIAIhAyAHIgUNAEEAIQUgAiEBDAMLIAEgAkEUaigCACIHIAcgAiAAQR12QQRxakEQaigCACICRhsgASAHGyEBIABBAXQhACACDQALCyABIANyRQRAQQAhA0ECIAZ0IgBBACAAa3IgCHEiAEUNAyAAaEECdEG80gBqKAIAIQELIAFFDQELA0AgASgCBEF4cSAEayICIAVJIQAgAiAFIAAbIQUgASADIAAbIQMgASgCECIABH8gAAUgAUEUaigCAAsiAQ0ACwsgA0UNACAFQZTQACgCACAEa08NACADKAIYIQcgAyADKAIMIgBHBEBBnNAAKAIAGiAAIAMoAggiATYCCCABIAA2AgwMDgsgA0EUaiICKAIAIgFFBEAgAygCECIBRQ0DIANBEGohAgsDQCACIQYgASIAQRRqIgIoAgAiAQ0AIABBEGohAiAAKAIQIgENAAsgBkEANgIADA0LQZTQACgCACIDIARPBEBBoNAAKAIAIQECQCADIARrIgJBEE8EQCABIARqIgAgAkEBcjYCBCABIANqIAI2AgAgASAEQQNyNgIEDAELIAEgA0EDcjYCBCABIANqIgAgACgCBEEBcjYCBEEAIQBBACECC0GU0AAgAjYCAEGg0AAgADYCACABQQhqIQEMDwtBmNAAKAIAIgMgBEsEQCAEIAlqIgAgAyAEayIBQQFyNgIEQaTQACAANgIAQZjQACABNgIAIAkgBEEDcjYCBCAJQQhqIQEMDwtBACEBIAQCf0Hk0wAoAgAEQEHs0wAoAgAMAQtB8NMAQn83AgBB6NMAQoCAhICAgMAANwIAQeTTACAKQQxqQXBxQdiq1aoFczYCAEH40wBBADYCAEHI0wBBADYCAEGAgAQLIgAgBEHHAGoiBWoiBkEAIABrIgdxIgJPBEBB/NMAQTA2AgAMDwsCQEHE0wAoAgAiAUUNAEG80wAoAgAiCCACaiEAIAAgAU0gACAIS3ENAEEAIQFB/NMAQTA2AgAMDwtByNMALQAAQQRxDQQCQAJAIAkEQEHM0wAhAQNAIAEoAgAiACAJTQRAIAAgASgCBGogCUsNAwsgASgCCCIBDQALC0EAEDMiAEF/Rg0FIAIhBkHo0wAoAgAiAUEBayIDIABxBEAgAiAAayAAIANqQQAgAWtxaiEGCyAEIAZPDQUgBkH+////B0sNBUHE0wAoAgAiAwRAQbzTACgCACIHIAZqIQEgASAHTQ0GIAEgA0sNBgsgBhAzIgEgAEcNAQwHCyAGIANrIAdxIgZB/v///wdLDQQgBhAzIQAgACABKAIAIAEoAgRqRg0DIAAhAQsCQCAGIARByABqTw0AIAFBf0YNAEHs0wAoAgAiACAFIAZrakEAIABrcSIAQf7///8HSwRAIAEhAAwHCyAAEDNBf0cEQCAAIAZqIQYgASEADAcLQQAgBmsQMxoMBAsgASIAQX9HDQUMAwtBACEDDAwLQQAhAAwKCyAAQX9HDQILQcjTAEHI0wAoAgBBBHI2AgALIAJB/v///wdLDQEgAhAzIQBBABAzIQEgAEF/Rg0BIAFBf0YNASAAIAFPDQEgASAAayIGIARBOGpNDQELQbzTAEG80wAoAgAgBmoiATYCAEHA0wAoAgAgAUkEQEHA0wAgATYCAAsCQAJAAkBBpNAAKAIAIgIEQEHM0wAhAQNAIAAgASgCACIDIAEoAgQiBWpGDQIgASgCCCIBDQALDAILQZzQACgCACIBQQBHIAAgAU9xRQRAQZzQACAANgIAC0EAIQFB0NMAIAY2AgBBzNMAIAA2AgBBrNAAQX82AgBBsNAAQeTTACgCADYCAEHY0wBBADYCAANAIAFByNAAaiABQbzQAGoiAjYCACACIAFBtNAAaiIDNgIAIAFBwNAAaiADNgIAIAFB0NAAaiABQcTQAGoiAzYCACADIAI2AgAgAUHY0ABqIAFBzNAAaiICNgIAIAIgAzYCACABQdTQAGogAjYCACABQSBqIgFBgAJHDQALQXggAGtBD3EiASAAaiICIAZBOGsiAyABayIBQQFyNgIEQajQAEH00wAoAgA2AgBBmNAAIAE2AgBBpNAAIAI2AgAgACADakE4NgIEDAILIAAgAk0NACACIANJDQAgASgCDEEIcQ0AQXggAmtBD3EiACACaiIDQZjQACgCACAGaiIHIABrIgBBAXI2AgQgASAFIAZqNgIEQajQAEH00wAoAgA2AgBBmNAAIAA2AgBBpNAAIAM2AgAgAiAHakE4NgIEDAELIABBnNAAKAIASQRAQZzQACAANgIACyAAIAZqIQNBzNMAIQECQAJAAkADQCADIAEoAgBHBEAgASgCCCIBDQEMAgsLIAEtAAxBCHFFDQELQczTACEBA0AgASgCACIDIAJNBEAgAyABKAIEaiIFIAJLDQMLIAEoAgghAQwACwALIAEgADYCACABIAEoAgQgBmo2AgQgAEF4IABrQQ9xaiIJIARBA3I2AgQgA0F4IANrQQ9xaiIGIAQgCWoiBGshASACIAZGBEBBpNAAIAQ2AgBBmNAAQZjQACgCACABaiIANgIAIAQgAEEBcjYCBAwIC0Gg0AAoAgAgBkYEQEGg0AAgBDYCAEGU0ABBlNAAKAIAIAFqIgA2AgAgBCAAQQFyNgIEIAAgBGogADYCAAwICyAGKAIEIgVBA3FBAUcNBiAFQXhxIQggBUH/AU0EQCAFQQN2IQMgBigCCCIAIAYoAgwiAkYEQEGM0ABBjNAAKAIAQX4gA3dxNgIADAcLIAIgADYCCCAAIAI2AgwMBgsgBigCGCEHIAYgBigCDCIARwRAIAAgBigCCCICNgIIIAIgADYCDAwFCyAGQRRqIgIoAgAiBUUEQCAGKAIQIgVFDQQgBkEQaiECCwNAIAIhAyAFIgBBFGoiAigCACIFDQAgAEEQaiECIAAoAhAiBQ0ACyADQQA2AgAMBAtBeCAAa0EPcSIBIABqIgcgBkE4ayIDIAFrIgFBAXI2AgQgACADakE4NgIEIAIgBUE3IAVrQQ9xakE/ayIDIAMgAkEQakkbIgNBIzYCBEGo0ABB9NMAKAIANgIAQZjQACABNgIAQaTQACAHNgIAIANBEGpB1NMAKQIANwIAIANBzNMAKQIANwIIQdTTACADQQhqNgIAQdDTACAGNgIAQczTACAANgIAQdjTAEEANgIAIANBJGohAQNAIAFBBzYCACAFIAFBBGoiAUsNAAsgAiADRg0AIAMgAygCBEF+cTYCBCADIAMgAmsiBTYCACACIAVBAXI2AgQgBUH/AU0EQCAFQXhxQbTQAGohAAJ/QYzQACgCACIBQQEgBUEDdnQiA3FFBEBBjNAAIAEgA3I2AgAgAAwBCyAAKAIICyIBIAI2AgwgACACNgIIIAIgADYCDCACIAE2AggMAQtBHyEBIAVB////B00EQCAFQSYgBUEIdmciAGt2QQFxIABBAXRrQT5qIQELIAIgATYCHCACQgA3AhAgAUECdEG80gBqIQBBkNAAKAIAIgNBASABdCIGcUUEQCAAIAI2AgBBkNAAIAMgBnI2AgAgAiAANgIYIAIgAjYCCCACIAI2AgwMAQsgBUEZIAFBAXZrQQAgAUEfRxt0IQEgACgCACEDAkADQCADIgAoAgRBeHEgBUYNASABQR12IQMgAUEBdCEBIAAgA0EEcWpBEGoiBigCACIDDQALIAYgAjYCACACIAA2AhggAiACNgIMIAIgAjYCCAwBCyAAKAIIIgEgAjYCDCAAIAI2AgggAkEANgIYIAIgADYCDCACIAE2AggLQZjQACgCACIBIARNDQBBpNAAKAIAIgAgBGoiAiABIARrIgFBAXI2AgRBmNAAIAE2AgBBpNAAIAI2AgAgACAEQQNyNgIEIABBCGohAQwIC0EAIQFB/NMAQTA2AgAMBwtBACEACyAHRQ0AAkAgBigCHCICQQJ0QbzSAGoiAygCACAGRgRAIAMgADYCACAADQFBkNAAQZDQACgCAEF+IAJ3cTYCAAwCCyAHQRBBFCAHKAIQIAZGG2ogADYCACAARQ0BCyAAIAc2AhggBigCECICBEAgACACNgIQIAIgADYCGAsgBkEUaigCACICRQ0AIABBFGogAjYCACACIAA2AhgLIAEgCGohASAGIAhqIgYoAgQhBQsgBiAFQX5xNgIEIAEgBGogATYCACAEIAFBAXI2AgQgAUH/AU0EQCABQXhxQbTQAGohAAJ/QYzQACgCACICQQEgAUEDdnQiAXFFBEBBjNAAIAEgAnI2AgAgAAwBCyAAKAIICyIBIAQ2AgwgACAENgIIIAQgADYCDCAEIAE2AggMAQtBHyEFIAFB////B00EQCABQSYgAUEIdmciAGt2QQFxIABBAXRrQT5qIQULIAQgBTYCHCAEQgA3AhAgBUECdEG80gBqIQBBkNAAKAIAIgJBASAFdCIDcUUEQCAAIAQ2AgBBkNAAIAIgA3I2AgAgBCAANgIYIAQgBDYCCCAEIAQ2AgwMAQsgAUEZIAVBAXZrQQAgBUEfRxt0IQUgACgCACEAAkADQCAAIgIoAgRBeHEgAUYNASAFQR12IQAgBUEBdCEFIAIgAEEEcWpBEGoiAygCACIADQALIAMgBDYCACAEIAI2AhggBCAENgIMIAQgBDYCCAwBCyACKAIIIgAgBDYCDCACIAQ2AgggBEEANgIYIAQgAjYCDCAEIAA2AggLIAlBCGohAQwCCwJAIAdFDQACQCADKAIcIgFBAnRBvNIAaiICKAIAIANGBEAgAiAANgIAIAANAUGQ0AAgCEF+IAF3cSIINgIADAILIAdBEEEUIAcoAhAgA0YbaiAANgIAIABFDQELIAAgBzYCGCADKAIQIgEEQCAAIAE2AhAgASAANgIYCyADQRRqKAIAIgFFDQAgAEEUaiABNgIAIAEgADYCGAsCQCAFQQ9NBEAgAyAEIAVqIgBBA3I2AgQgACADaiIAIAAoAgRBAXI2AgQMAQsgAyAEaiICIAVBAXI2AgQgAyAEQQNyNgIEIAIgBWogBTYCACAFQf8BTQRAIAVBeHFBtNAAaiEAAn9BjNAAKAIAIgFBASAFQQN2dCIFcUUEQEGM0AAgASAFcjYCACAADAELIAAoAggLIgEgAjYCDCAAIAI2AgggAiAANgIMIAIgATYCCAwBC0EfIQEgBUH///8HTQRAIAVBJiAFQQh2ZyIAa3ZBAXEgAEEBdGtBPmohAQsgAiABNgIcIAJCADcCECABQQJ0QbzSAGohAEEBIAF0IgQgCHFFBEAgACACNgIAQZDQACAEIAhyNgIAIAIgADYCGCACIAI2AgggAiACNgIMDAELIAVBGSABQQF2a0EAIAFBH0cbdCEBIAAoAgAhBAJAA0AgBCIAKAIEQXhxIAVGDQEgAUEddiEEIAFBAXQhASAAIARBBHFqQRBqIgYoAgAiBA0ACyAGIAI2AgAgAiAANgIYIAIgAjYCDCACIAI2AggMAQsgACgCCCIBIAI2AgwgACACNgIIIAJBADYCGCACIAA2AgwgAiABNgIICyADQQhqIQEMAQsCQCAJRQ0AAkAgACgCHCIBQQJ0QbzSAGoiAigCACAARgRAIAIgAzYCACADDQFBkNAAIAtBfiABd3E2AgAMAgsgCUEQQRQgCSgCECAARhtqIAM2AgAgA0UNAQsgAyAJNgIYIAAoAhAiAQRAIAMgATYCECABIAM2AhgLIABBFGooAgAiAUUNACADQRRqIAE2AgAgASADNgIYCwJAIAVBD00EQCAAIAQgBWoiAUEDcjYCBCAAIAFqIgEgASgCBEEBcjYCBAwBCyAAIARqIgcgBUEBcjYCBCAAIARBA3I2AgQgBSAHaiAFNgIAIAgEQCAIQXhxQbTQAGohAUGg0AAoAgAhAwJ/QQEgCEEDdnQiAiAGcUUEQEGM0AAgAiAGcjYCACABDAELIAEoAggLIgIgAzYCDCABIAM2AgggAyABNgIMIAMgAjYCCAtBoNAAIAc2AgBBlNAAIAU2AgALIABBCGohAQsgCkEQaiQAIAELQwAgAEUEQD8AQRB0DwsCQCAAQf//A3ENACAAQQBIDQAgAEEQdkAAIgBBf0YEQEH80wBBMDYCAEF/DwsgAEEQdA8LAAsL3D8iAEGACAsJAQAAAAIAAAADAEGUCAsFBAAAAAUAQaQICwkGAAAABwAAAAgAQdwIC4otSW52YWxpZCBjaGFyIGluIHVybCBxdWVyeQBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX2JvZHkAQ29udGVudC1MZW5ndGggb3ZlcmZsb3cAQ2h1bmsgc2l6ZSBvdmVyZmxvdwBSZXNwb25zZSBvdmVyZmxvdwBJbnZhbGlkIG1ldGhvZCBmb3IgSFRUUC94LnggcmVxdWVzdABJbnZhbGlkIG1ldGhvZCBmb3IgUlRTUC94LnggcmVxdWVzdABFeHBlY3RlZCBTT1VSQ0UgbWV0aG9kIGZvciBJQ0UveC54IHJlcXVlc3QASW52YWxpZCBjaGFyIGluIHVybCBmcmFnbWVudCBzdGFydABFeHBlY3RlZCBkb3QAU3BhbiBjYWxsYmFjayBlcnJvciBpbiBvbl9zdGF0dXMASW52YWxpZCByZXNwb25zZSBzdGF0dXMASW52YWxpZCBjaGFyYWN0ZXIgaW4gY2h1bmsgZXh0ZW5zaW9ucwBVc2VyIGNhbGxiYWNrIGVycm9yAGBvbl9yZXNldGAgY2FsbGJhY2sgZXJyb3IAYG9uX2NodW5rX2hlYWRlcmAgY2FsbGJhY2sgZXJyb3IAYG9uX21lc3NhZ2VfYmVnaW5gIGNhbGxiYWNrIGVycm9yAGBvbl9jaHVua19leHRlbnNpb25fdmFsdWVgIGNhbGxiYWNrIGVycm9yAGBvbl9zdGF0dXNfY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl92ZXJzaW9uX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25fdXJsX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25fY2h1bmtfY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl9oZWFkZXJfdmFsdWVfY29tcGxldGVgIGNhbGxiYWNrIGVycm9yAGBvbl9tZXNzYWdlX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25fbWV0aG9kX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25faGVhZGVyX2ZpZWxkX2NvbXBsZXRlYCBjYWxsYmFjayBlcnJvcgBgb25fY2h1bmtfZXh0ZW5zaW9uX25hbWVgIGNhbGxiYWNrIGVycm9yAFVuZXhwZWN0ZWQgY2hhciBpbiB1cmwgc2VydmVyAEludmFsaWQgaGVhZGVyIHZhbHVlIGNoYXIASW52YWxpZCBoZWFkZXIgZmllbGQgY2hhcgBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX3ZlcnNpb24ASW52YWxpZCBtaW5vciB2ZXJzaW9uAEludmFsaWQgbWFqb3IgdmVyc2lvbgBFeHBlY3RlZCBzcGFjZSBhZnRlciB2ZXJzaW9uAEV4cGVjdGVkIENSTEYgYWZ0ZXIgdmVyc2lvbgBJbnZhbGlkIEhUVFAgdmVyc2lvbgBJbnZhbGlkIGhlYWRlciB0b2tlbgBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX3VybABJbnZhbGlkIGNoYXJhY3RlcnMgaW4gdXJsAFVuZXhwZWN0ZWQgc3RhcnQgY2hhciBpbiB1cmwARG91YmxlIEAgaW4gdXJsAEVtcHR5IENvbnRlbnQtTGVuZ3RoAEludmFsaWQgY2hhcmFjdGVyIGluIENvbnRlbnQtTGVuZ3RoAER1cGxpY2F0ZSBDb250ZW50LUxlbmd0aABJbnZhbGlkIGNoYXIgaW4gdXJsIHBhdGgAQ29udGVudC1MZW5ndGggY2FuJ3QgYmUgcHJlc2VudCB3aXRoIFRyYW5zZmVyLUVuY29kaW5nAEludmFsaWQgY2hhcmFjdGVyIGluIGNodW5rIHNpemUAU3BhbiBjYWxsYmFjayBlcnJvciBpbiBvbl9oZWFkZXJfdmFsdWUAU3BhbiBjYWxsYmFjayBlcnJvciBpbiBvbl9jaHVua19leHRlbnNpb25fdmFsdWUASW52YWxpZCBjaGFyYWN0ZXIgaW4gY2h1bmsgZXh0ZW5zaW9ucyB2YWx1ZQBNaXNzaW5nIGV4cGVjdGVkIExGIGFmdGVyIGhlYWRlciB2YWx1ZQBJbnZhbGlkIGBUcmFuc2Zlci1FbmNvZGluZ2AgaGVhZGVyIHZhbHVlAEludmFsaWQgY2hhcmFjdGVyIGluIGNodW5rIGV4dGVuc2lvbnMgcXVvdGUgdmFsdWUASW52YWxpZCBjaGFyYWN0ZXIgaW4gY2h1bmsgZXh0ZW5zaW9ucyBxdW90ZWQgdmFsdWUAUGF1c2VkIGJ5IG9uX2hlYWRlcnNfY29tcGxldGUASW52YWxpZCBFT0Ygc3RhdGUAb25fcmVzZXQgcGF1c2UAb25fY2h1bmtfaGVhZGVyIHBhdXNlAG9uX21lc3NhZ2VfYmVnaW4gcGF1c2UAb25fY2h1bmtfZXh0ZW5zaW9uX3ZhbHVlIHBhdXNlAG9uX3N0YXR1c19jb21wbGV0ZSBwYXVzZQBvbl92ZXJzaW9uX2NvbXBsZXRlIHBhdXNlAG9uX3VybF9jb21wbGV0ZSBwYXVzZQBvbl9jaHVua19jb21wbGV0ZSBwYXVzZQBvbl9oZWFkZXJfdmFsdWVfY29tcGxldGUgcGF1c2UAb25fbWVzc2FnZV9jb21wbGV0ZSBwYXVzZQBvbl9tZXRob2RfY29tcGxldGUgcGF1c2UAb25faGVhZGVyX2ZpZWxkX2NvbXBsZXRlIHBhdXNlAG9uX2NodW5rX2V4dGVuc2lvbl9uYW1lIHBhdXNlAFVuZXhwZWN0ZWQgc3BhY2UgYWZ0ZXIgc3RhcnQgbGluZQBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX2NodW5rX2V4dGVuc2lvbl9uYW1lAEludmFsaWQgY2hhcmFjdGVyIGluIGNodW5rIGV4dGVuc2lvbnMgbmFtZQBQYXVzZSBvbiBDT05ORUNUL1VwZ3JhZGUAUGF1c2Ugb24gUFJJL1VwZ3JhZGUARXhwZWN0ZWQgSFRUUC8yIENvbm5lY3Rpb24gUHJlZmFjZQBTcGFuIGNhbGxiYWNrIGVycm9yIGluIG9uX21ldGhvZABFeHBlY3RlZCBzcGFjZSBhZnRlciBtZXRob2QAU3BhbiBjYWxsYmFjayBlcnJvciBpbiBvbl9oZWFkZXJfZmllbGQAUGF1c2VkAEludmFsaWQgd29yZCBlbmNvdW50ZXJlZABJbnZhbGlkIG1ldGhvZCBlbmNvdW50ZXJlZABVbmV4cGVjdGVkIGNoYXIgaW4gdXJsIHNjaGVtYQBSZXF1ZXN0IGhhcyBpbnZhbGlkIGBUcmFuc2Zlci1FbmNvZGluZ2AAU1dJVENIX1BST1hZAFVTRV9QUk9YWQBNS0FDVElWSVRZAFVOUFJPQ0VTU0FCTEVfRU5USVRZAENPUFkATU9WRURfUEVSTUFORU5UTFkAVE9PX0VBUkxZAE5PVElGWQBGQUlMRURfREVQRU5ERU5DWQBCQURfR0FURVdBWQBQTEFZAFBVVABDSEVDS09VVABHQVRFV0FZX1RJTUVPVVQAUkVRVUVTVF9USU1FT1VUAE5FVFdPUktfQ09OTkVDVF9USU1FT1VUAENPTk5FQ1RJT05fVElNRU9VVABMT0dJTl9USU1FT1VUAE5FVFdPUktfUkVBRF9USU1FT1VUAFBPU1QATUlTRElSRUNURURfUkVRVUVTVABDTElFTlRfQ0xPU0VEX1JFUVVFU1QAQ0xJRU5UX0NMT1NFRF9MT0FEX0JBTEFOQ0VEX1JFUVVFU1QAQkFEX1JFUVVFU1QASFRUUF9SRVFVRVNUX1NFTlRfVE9fSFRUUFNfUE9SVABSRVBPUlQASU1fQV9URUFQT1QAUkVTRVRfQ09OVEVOVABOT19DT05URU5UAFBBUlRJQUxfQ09OVEVOVABIUEVfSU5WQUxJRF9DT05TVEFOVABIUEVfQ0JfUkVTRVQAR0VUAEhQRV9TVFJJQ1QAQ09ORkxJQ1QAVEVNUE9SQVJZX1JFRElSRUNUAFBFUk1BTkVOVF9SRURJUkVDVABDT05ORUNUAE1VTFRJX1NUQVRVUwBIUEVfSU5WQUxJRF9TVEFUVVMAVE9PX01BTllfUkVRVUVTVFMARUFSTFlfSElOVFMAVU5BVkFJTEFCTEVfRk9SX0xFR0FMX1JFQVNPTlMAT1BUSU9OUwBTV0lUQ0hJTkdfUFJPVE9DT0xTAFZBUklBTlRfQUxTT19ORUdPVElBVEVTAE1VTFRJUExFX0NIT0lDRVMASU5URVJOQUxfU0VSVkVSX0VSUk9SAFdFQl9TRVJWRVJfVU5LTk9XTl9FUlJPUgBSQUlMR1VOX0VSUk9SAElERU5USVRZX1BST1ZJREVSX0FVVEhFTlRJQ0FUSU9OX0VSUk9SAFNTTF9DRVJUSUZJQ0FURV9FUlJPUgBJTlZBTElEX1hfRk9SV0FSREVEX0ZPUgBTRVRfUEFSQU1FVEVSAEdFVF9QQVJBTUVURVIASFBFX1VTRVIAU0VFX09USEVSAEhQRV9DQl9DSFVOS19IRUFERVIATUtDQUxFTkRBUgBTRVRVUABXRUJfU0VSVkVSX0lTX0RPV04AVEVBUkRPV04ASFBFX0NMT1NFRF9DT05ORUNUSU9OAEhFVVJJU1RJQ19FWFBJUkFUSU9OAERJU0NPTk5FQ1RFRF9PUEVSQVRJT04ATk9OX0FVVEhPUklUQVRJVkVfSU5GT1JNQVRJT04ASFBFX0lOVkFMSURfVkVSU0lPTgBIUEVfQ0JfTUVTU0FHRV9CRUdJTgBTSVRFX0lTX0ZST1pFTgBIUEVfSU5WQUxJRF9IRUFERVJfVE9LRU4ASU5WQUxJRF9UT0tFTgBGT1JCSURERU4ARU5IQU5DRV9ZT1VSX0NBTE0ASFBFX0lOVkFMSURfVVJMAEJMT0NLRURfQllfUEFSRU5UQUxfQ09OVFJPTABNS0NPTABBQ0wASFBFX0lOVEVSTkFMAFJFUVVFU1RfSEVBREVSX0ZJRUxEU19UT09fTEFSR0VfVU5PRkZJQ0lBTABIUEVfT0sAVU5MSU5LAFVOTE9DSwBQUkkAUkVUUllfV0lUSABIUEVfSU5WQUxJRF9DT05URU5UX0xFTkdUSABIUEVfVU5FWFBFQ1RFRF9DT05URU5UX0xFTkdUSABGTFVTSABQUk9QUEFUQ0gATS1TRUFSQ0gAVVJJX1RPT19MT05HAFBST0NFU1NJTkcATUlTQ0VMTEFORU9VU19QRVJTSVNURU5UX1dBUk5JTkcATUlTQ0VMTEFORU9VU19XQVJOSU5HAEhQRV9JTlZBTElEX1RSQU5TRkVSX0VOQ09ESU5HAEV4cGVjdGVkIENSTEYASFBFX0lOVkFMSURfQ0hVTktfU0laRQBNT1ZFAENPTlRJTlVFAEhQRV9DQl9TVEFUVVNfQ09NUExFVEUASFBFX0NCX0hFQURFUlNfQ09NUExFVEUASFBFX0NCX1ZFUlNJT05fQ09NUExFVEUASFBFX0NCX1VSTF9DT01QTEVURQBIUEVfQ0JfQ0hVTktfQ09NUExFVEUASFBFX0NCX0hFQURFUl9WQUxVRV9DT01QTEVURQBIUEVfQ0JfQ0hVTktfRVhURU5TSU9OX1ZBTFVFX0NPTVBMRVRFAEhQRV9DQl9DSFVOS19FWFRFTlNJT05fTkFNRV9DT01QTEVURQBIUEVfQ0JfTUVTU0FHRV9DT01QTEVURQBIUEVfQ0JfTUVUSE9EX0NPTVBMRVRFAEhQRV9DQl9IRUFERVJfRklFTERfQ09NUExFVEUAREVMRVRFAEhQRV9JTlZBTElEX0VPRl9TVEFURQBJTlZBTElEX1NTTF9DRVJUSUZJQ0FURQBQQVVTRQBOT19SRVNQT05TRQBVTlNVUFBPUlRFRF9NRURJQV9UWVBFAEdPTkUATk9UX0FDQ0VQVEFCTEUAU0VSVklDRV9VTkFWQUlMQUJMRQBSQU5HRV9OT1RfU0FUSVNGSUFCTEUAT1JJR0lOX0lTX1VOUkVBQ0hBQkxFAFJFU1BPTlNFX0lTX1NUQUxFAFBVUkdFAE1FUkdFAFJFUVVFU1RfSEVBREVSX0ZJRUxEU19UT09fTEFSR0UAUkVRVUVTVF9IRUFERVJfVE9PX0xBUkdFAFBBWUxPQURfVE9PX0xBUkdFAElOU1VGRklDSUVOVF9TVE9SQUdFAEhQRV9QQVVTRURfVVBHUkFERQBIUEVfUEFVU0VEX0gyX1VQR1JBREUAU09VUkNFAEFOTk9VTkNFAFRSQUNFAEhQRV9VTkVYUEVDVEVEX1NQQUNFAERFU0NSSUJFAFVOU1VCU0NSSUJFAFJFQ09SRABIUEVfSU5WQUxJRF9NRVRIT0QATk9UX0ZPVU5EAFBST1BGSU5EAFVOQklORABSRUJJTkQAVU5BVVRIT1JJWkVEAE1FVEhPRF9OT1RfQUxMT1dFRABIVFRQX1ZFUlNJT05fTk9UX1NVUFBPUlRFRABBTFJFQURZX1JFUE9SVEVEAEFDQ0VQVEVEAE5PVF9JTVBMRU1FTlRFRABMT09QX0RFVEVDVEVEAEhQRV9DUl9FWFBFQ1RFRABIUEVfTEZfRVhQRUNURUQAQ1JFQVRFRABJTV9VU0VEAEhQRV9QQVVTRUQAVElNRU9VVF9PQ0NVUkVEAFBBWU1FTlRfUkVRVUlSRUQAUFJFQ09ORElUSU9OX1JFUVVJUkVEAFBST1hZX0FVVEhFTlRJQ0FUSU9OX1JFUVVJUkVEAE5FVFdPUktfQVVUSEVOVElDQVRJT05fUkVRVUlSRUQATEVOR1RIX1JFUVVJUkVEAFNTTF9DRVJUSUZJQ0FURV9SRVFVSVJFRABVUEdSQURFX1JFUVVJUkVEAFBBR0VfRVhQSVJFRABQUkVDT05ESVRJT05fRkFJTEVEAEVYUEVDVEFUSU9OX0ZBSUxFRABSRVZBTElEQVRJT05fRkFJTEVEAFNTTF9IQU5EU0hBS0VfRkFJTEVEAExPQ0tFRABUUkFOU0ZPUk1BVElPTl9BUFBMSUVEAE5PVF9NT0RJRklFRABOT1RfRVhURU5ERUQAQkFORFdJRFRIX0xJTUlUX0VYQ0VFREVEAFNJVEVfSVNfT1ZFUkxPQURFRABIRUFEAEV4cGVjdGVkIEhUVFAvAABeEwAAJhMAADAQAADwFwAAnRMAABUSAAA5FwAA8BIAAAoQAAB1EgAArRIAAIITAABPFAAAfxAAAKAVAAAjFAAAiRIAAIsUAABNFQAA1BEAAM8UAAAQGAAAyRYAANwWAADBEQAA4BcAALsUAAB0FAAAfBUAAOUUAAAIFwAAHxAAAGUVAACjFAAAKBUAAAIVAACZFQAALBAAAIsZAABPDwAA1A4AAGoQAADOEAAAAhcAAIkOAABuEwAAHBMAAGYUAABWFwAAwRMAAM0TAABsEwAAaBcAAGYXAABfFwAAIhMAAM4PAABpDgAA2A4AAGMWAADLEwAAqg4AACgXAAAmFwAAxRMAAF0WAADoEQAAZxMAAGUTAADyFgAAcxMAAB0XAAD5FgAA8xEAAM8OAADOFQAADBIAALMRAAClEQAAYRAAADIXAAC7EwBB+TULAQEAQZA2C+ABAQECAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAQf03CwEBAEGROAteAgMCAgICAgAAAgIAAgIAAgICAgICAgICAgAEAAAAAAACAgICAgICAgICAgICAgICAgICAgICAgICAgAAAAICAgICAgICAgICAgICAgICAgICAgICAgICAgICAAIAAgBB/TkLAQEAQZE6C14CAAICAgICAAACAgACAgACAgICAgICAgICAAMABAAAAAICAgICAgICAgICAgICAgICAgICAgICAgICAAAAAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAAgACAEHwOwsNbG9zZWVlcC1hbGl2ZQBBiTwLAQEAQaA8C+ABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAQYk+CwEBAEGgPgvnAQEBAQEBAQEBAQEBAQIBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBY2h1bmtlZABBsMAAC18BAQABAQEBAQAAAQEAAQEAAQEBAQEBAQEBAQAAAAAAAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQAAAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEAAQBBkMIACyFlY3Rpb25lbnQtbGVuZ3Rob25yb3h5LWNvbm5lY3Rpb24AQcDCAAstcmFuc2Zlci1lbmNvZGluZ3BncmFkZQ0KDQoNClNNDQoNClRUUC9DRS9UU1AvAEH5wgALBQECAAEDAEGQwwAL4AEEAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQBB+cQACwUBAgABAwBBkMUAC+ABBAEBBQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAQfnGAAsEAQAAAQBBkccAC98BAQEAAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQBB+sgACwQBAAACAEGQyQALXwMEAAAEBAQEBAQEBAQEBAUEBAQEBAQEBAQEBAQABAAGBwQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAAEAAQABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQAAAAEAEH6ygALBAEAAAEAQZDLAAsBAQBBqssAC0ECAAAAAAAAAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAAAAAAAADAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwBB+swACwQBAAABAEGQzQALAQEAQZrNAAsGAgAAAAACAEGxzQALOgMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAAAAAAAAAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAQfDOAAuWAU5PVU5DRUVDS09VVE5FQ1RFVEVDUklCRUxVU0hFVEVBRFNFQVJDSFJHRUNUSVZJVFlMRU5EQVJWRU9USUZZUFRJT05TQ0hTRUFZU1RBVENIR0VPUkRJUkVDVE9SVFJDSFBBUkFNRVRFUlVSQ0VCU0NSSUJFQVJET1dOQUNFSU5ETktDS1VCU0NSSUJFSFRUUC9BRFRQLw==", "base64");
}
});
// node_modules/undici/lib/web/fetch/constants.js
var require_constants3 = __commonJS({
"node_modules/undici/lib/web/fetch/constants.js"(exports2, module2) {
"use strict";
var corsSafeListedMethods = (
/** @type {const} */
["GET", "HEAD", "POST"]
);
var corsSafeListedMethodsSet = new Set(corsSafeListedMethods);
var nullBodyStatus = (
/** @type {const} */
[101, 204, 205, 304]
);
var redirectStatus = (
/** @type {const} */
[301, 302, 303, 307, 308]
);
var redirectStatusSet = new Set(redirectStatus);
var badPorts = (
/** @type {const} */
[
"1",
"7",
"9",
"11",
"13",
"15",
"17",
"19",
"20",
"21",
"22",
"23",
"25",
"37",
"42",
"43",
"53",
"69",
"77",
"79",
"87",
"95",
"101",
"102",
"103",
"104",
"109",
"110",
"111",
"113",
"115",
"117",
"119",
"123",
"135",
"137",
"139",
"143",
"161",
"179",
"389",
"427",
"465",
"512",
"513",
"514",
"515",
"526",
"530",
"531",
"532",
"540",
"548",
"554",
"556",
"563",
"587",
"601",
"636",
"989",
"990",
"993",
"995",
"1719",
"1720",
"1723",
"2049",
"3659",
"4045",
"4190",
"5060",
"5061",
"6000",
"6566",
"6665",
"6666",
"6667",
"6668",
"6669",
"6679",
"6697",
"10080"
]
);
var badPortsSet = new Set(badPorts);
var referrerPolicy = (
/** @type {const} */
[
"",
"no-referrer",
"no-referrer-when-downgrade",
"same-origin",
"origin",
"strict-origin",
"origin-when-cross-origin",
"strict-origin-when-cross-origin",
"unsafe-url"
]
);
var referrerPolicySet = new Set(referrerPolicy);
var requestRedirect = (
/** @type {const} */
["follow", "manual", "error"]
);
var safeMethods = (
/** @type {const} */
["GET", "HEAD", "OPTIONS", "TRACE"]
);
var safeMethodsSet = new Set(safeMethods);
var requestMode = (
/** @type {const} */
["navigate", "same-origin", "no-cors", "cors"]
);
var requestCredentials = (
/** @type {const} */
["omit", "same-origin", "include"]
);
var requestCache = (
/** @type {const} */
[
"default",
"no-store",
"reload",
"no-cache",
"force-cache",
"only-if-cached"
]
);
var requestBodyHeader = (
/** @type {const} */
[
"content-encoding",
"content-language",
"content-location",
"content-type",
// See https://github.com/nodejs/undici/issues/2021
// 'Content-Length' is a forbidden header name, which is typically
// removed in the Headers implementation. However, undici doesn't
// filter out headers, so we add it here.
"content-length"
]
);
var requestDuplex = (
/** @type {const} */
[
"half"
]
);
var forbiddenMethods = (
/** @type {const} */
["CONNECT", "TRACE", "TRACK"]
);
var forbiddenMethodsSet = new Set(forbiddenMethods);
var subresource = (
/** @type {const} */
[
"audio",
"audioworklet",
"font",
"image",
"manifest",
"paintworklet",
"script",
"style",
"track",
"video",
"xslt",
""
]
);
var subresourceSet = new Set(subresource);
module2.exports = {
subresource,
forbiddenMethods,
requestBodyHeader,
referrerPolicy,
requestRedirect,
requestMode,
requestCredentials,
requestCache,
redirectStatus,
corsSafeListedMethods,
nullBodyStatus,
safeMethods,
badPorts,
requestDuplex,
subresourceSet,
badPortsSet,
redirectStatusSet,
corsSafeListedMethodsSet,
safeMethodsSet,
forbiddenMethodsSet,
referrerPolicySet
};
}
});
// node_modules/undici/lib/web/fetch/global.js
var require_global = __commonJS({
"node_modules/undici/lib/web/fetch/global.js"(exports2, module2) {
"use strict";
var globalOrigin = Symbol.for("undici.globalOrigin.1");
function getGlobalOrigin() {
return globalThis[globalOrigin];
}
function setGlobalOrigin(newOrigin) {
if (newOrigin === void 0) {
Object.defineProperty(globalThis, globalOrigin, {
value: void 0,
writable: true,
enumerable: false,
configurable: false
});
return;
}
const parsedURL = new URL(newOrigin);
if (parsedURL.protocol !== "http:" && parsedURL.protocol !== "https:") {
throw new TypeError(`Only http & https urls are allowed, received ${parsedURL.protocol}`);
}
Object.defineProperty(globalThis, globalOrigin, {
value: parsedURL,
writable: true,
enumerable: false,
configurable: false
});
}
module2.exports = {
getGlobalOrigin,
setGlobalOrigin
};
}
});
// node_modules/undici/lib/web/fetch/data-url.js
var require_data_url = __commonJS({
"node_modules/undici/lib/web/fetch/data-url.js"(exports2, module2) {
"use strict";
var assert = require("node:assert");
var encoder = new TextEncoder();
var HTTP_TOKEN_CODEPOINTS = /^[!#$%&'*+\-.^_|~A-Za-z0-9]+$/;
var HTTP_WHITESPACE_REGEX = /[\u000A\u000D\u0009\u0020]/;
var ASCII_WHITESPACE_REPLACE_REGEX = /[\u0009\u000A\u000C\u000D\u0020]/g;
var HTTP_QUOTED_STRING_TOKENS = /^[\u0009\u0020-\u007E\u0080-\u00FF]+$/;
function dataURLProcessor(dataURL) {
assert(dataURL.protocol === "data:");
let input = URLSerializer(dataURL, true);
input = input.slice(5);
const position = { position: 0 };
let mimeType = collectASequenceOfCodePointsFast(
",",
input,
position
);
const mimeTypeLength = mimeType.length;
mimeType = removeASCIIWhitespace(mimeType, true, true);
if (position.position >= input.length) {
return "failure";
}
position.position++;
const encodedBody = input.slice(mimeTypeLength + 1);
let body = stringPercentDecode(encodedBody);
if (/;(\u0020){0,}base64$/i.test(mimeType)) {
const stringBody = isomorphicDecode(body);
body = forgivingBase64(stringBody);
if (body === "failure") {
return "failure";
}
mimeType = mimeType.slice(0, -6);
mimeType = mimeType.replace(/(\u0020)+$/, "");
mimeType = mimeType.slice(0, -1);
}
if (mimeType.startsWith(";")) {
mimeType = "text/plain" + mimeType;
}
let mimeTypeRecord = parseMIMEType(mimeType);
if (mimeTypeRecord === "failure") {
mimeTypeRecord = parseMIMEType("text/plain;charset=US-ASCII");
}
return { mimeType: mimeTypeRecord, body };
}
function URLSerializer(url2, excludeFragment = false) {
if (!excludeFragment) {
return url2.href;
}
const href = url2.href;
const hashLength = url2.hash.length;
const serialized = hashLength === 0 ? href : href.substring(0, href.length - hashLength);
if (!hashLength && href.endsWith("#")) {
return serialized.slice(0, -1);
}
return serialized;
}
function collectASequenceOfCodePoints(condition, input, position) {
let result = "";
while (position.position < input.length && condition(input[position.position])) {
result += input[position.position];
position.position++;
}
return result;
}
function collectASequenceOfCodePointsFast(char, input, position) {
const idx = input.indexOf(char, position.position);
const start = position.position;
if (idx === -1) {
position.position = input.length;
return input.slice(start);
}
position.position = idx;
return input.slice(start, position.position);
}
function stringPercentDecode(input) {
const bytes = encoder.encode(input);
return percentDecode(bytes);
}
function isHexCharByte(byte) {
return byte >= 48 && byte <= 57 || byte >= 65 && byte <= 70 || byte >= 97 && byte <= 102;
}
function hexByteToNumber(byte) {
return (
// 0-9
byte >= 48 && byte <= 57 ? byte - 48 : (byte & 223) - 55
);
}
function percentDecode(input) {
const length = input.length;
const output = new Uint8Array(length);
let j = 0;
for (let i = 0; i < length; ++i) {
const byte = input[i];
if (byte !== 37) {
output[j++] = byte;
} else if (byte === 37 && !(isHexCharByte(input[i + 1]) && isHexCharByte(input[i + 2]))) {
output[j++] = 37;
} else {
output[j++] = hexByteToNumber(input[i + 1]) << 4 | hexByteToNumber(input[i + 2]);
i += 2;
}
}
return length === j ? output : output.subarray(0, j);
}
function parseMIMEType(input) {
input = removeHTTPWhitespace(input, true, true);
const position = { position: 0 };
const type = collectASequenceOfCodePointsFast(
"/",
input,
position
);
if (type.length === 0 || !HTTP_TOKEN_CODEPOINTS.test(type)) {
return "failure";
}
if (position.position > input.length) {
return "failure";
}
position.position++;
let subtype = collectASequenceOfCodePointsFast(
";",
input,
position
);
subtype = removeHTTPWhitespace(subtype, false, true);
if (subtype.length === 0 || !HTTP_TOKEN_CODEPOINTS.test(subtype)) {
return "failure";
}
const typeLowercase = type.toLowerCase();
const subtypeLowercase = subtype.toLowerCase();
const mimeType = {
type: typeLowercase,
subtype: subtypeLowercase,
/** @type {Map<string, string>} */
parameters: /* @__PURE__ */ new Map(),
// https://mimesniff.spec.whatwg.org/#mime-type-essence
essence: `${typeLowercase}/${subtypeLowercase}`
};
while (position.position < input.length) {
position.position++;
collectASequenceOfCodePoints(
// https://fetch.spec.whatwg.org/#http-whitespace
(char) => HTTP_WHITESPACE_REGEX.test(char),
input,
position
);
let parameterName = collectASequenceOfCodePoints(
(char) => char !== ";" && char !== "=",
input,
position
);
parameterName = parameterName.toLowerCase();
if (position.position < input.length) {
if (input[position.position] === ";") {
continue;
}
position.position++;
}
if (position.position > input.length) {
break;
}
let parameterValue = null;
if (input[position.position] === '"') {
parameterValue = collectAnHTTPQuotedString(input, position, true);
collectASequenceOfCodePointsFast(
";",
input,
position
);
} else {
parameterValue = collectASequenceOfCodePointsFast(
";",
input,
position
);
parameterValue = removeHTTPWhitespace(parameterValue, false, true);
if (parameterValue.length === 0) {
continue;
}
}
if (parameterName.length !== 0 && HTTP_TOKEN_CODEPOINTS.test(parameterName) && (parameterValue.length === 0 || HTTP_QUOTED_STRING_TOKENS.test(parameterValue)) && !mimeType.parameters.has(parameterName)) {
mimeType.parameters.set(parameterName, parameterValue);
}
}
return mimeType;
}
function forgivingBase64(data2) {
data2 = data2.replace(ASCII_WHITESPACE_REPLACE_REGEX, "");
let dataLength = data2.length;
if (dataLength % 4 === 0) {
if (data2.charCodeAt(dataLength - 1) === 61) {
--dataLength;
if (data2.charCodeAt(dataLength - 1) === 61) {
--dataLength;
}
}
}
if (dataLength % 4 === 1) {
return "failure";
}
if (/[^+/0-9A-Za-z]/.test(data2.length === dataLength ? data2 : data2.substring(0, dataLength))) {
return "failure";
}
const buffer = Buffer.from(data2, "base64");
return new Uint8Array(buffer.buffer, buffer.byteOffset, buffer.byteLength);
}
function collectAnHTTPQuotedString(input, position, extractValue) {
const positionStart = position.position;
let value = "";
assert(input[position.position] === '"');
position.position++;
while (true) {
value += collectASequenceOfCodePoints(
(char) => char !== '"' && char !== "\\",
input,
position
);
if (position.position >= input.length) {
break;
}
const quoteOrBackslash = input[position.position];
position.position++;
if (quoteOrBackslash === "\\") {
if (position.position >= input.length) {
value += "\\";
break;
}
value += input[position.position];
position.position++;
} else {
assert(quoteOrBackslash === '"');
break;
}
}
if (extractValue) {
return value;
}
return input.slice(positionStart, position.position);
}
function serializeAMimeType(mimeType) {
assert(mimeType !== "failure");
const { parameters, essence } = mimeType;
let serialization = essence;
for (let [name, value] of parameters.entries()) {
serialization += ";";
serialization += name;
serialization += "=";
if (!HTTP_TOKEN_CODEPOINTS.test(value)) {
value = value.replace(/(\\|")/g, "\\$1");
value = '"' + value;
value += '"';
}
serialization += value;
}
return serialization;
}
function isHTTPWhiteSpace(char) {
return char === 13 || char === 10 || char === 9 || char === 32;
}
function removeHTTPWhitespace(str, leading = true, trailing = true) {
return removeChars(str, leading, trailing, isHTTPWhiteSpace);
}
function isASCIIWhitespace(char) {
return char === 13 || char === 10 || char === 9 || char === 12 || char === 32;
}
function removeASCIIWhitespace(str, leading = true, trailing = true) {
return removeChars(str, leading, trailing, isASCIIWhitespace);
}
function removeChars(str, leading, trailing, predicate) {
let lead = 0;
let trail = str.length - 1;
if (leading) {
while (lead < str.length && predicate(str.charCodeAt(lead))) lead++;
}
if (trailing) {
while (trail > 0 && predicate(str.charCodeAt(trail))) trail--;
}
return lead === 0 && trail === str.length - 1 ? str : str.slice(lead, trail + 1);
}
function isomorphicDecode(input) {
const length = input.length;
if ((2 << 15) - 1 > length) {
return String.fromCharCode.apply(null, input);
}
let result = "";
let i = 0;
let addition = (2 << 15) - 1;
while (i < length) {
if (i + addition > length) {
addition = length - i;
}
result += String.fromCharCode.apply(null, input.subarray(i, i += addition));
}
return result;
}
function minimizeSupportedMimeType(mimeType) {
switch (mimeType.essence) {
case "application/ecmascript":
case "application/javascript":
case "application/x-ecmascript":
case "application/x-javascript":
case "text/ecmascript":
case "text/javascript":
case "text/javascript1.0":
case "text/javascript1.1":
case "text/javascript1.2":
case "text/javascript1.3":
case "text/javascript1.4":
case "text/javascript1.5":
case "text/jscript":
case "text/livescript":
case "text/x-ecmascript":
case "text/x-javascript":
return "text/javascript";
case "application/json":
case "text/json":
return "application/json";
case "image/svg+xml":
return "image/svg+xml";
case "text/xml":
case "application/xml":
return "application/xml";
}
if (mimeType.subtype.endsWith("+json")) {
return "application/json";
}
if (mimeType.subtype.endsWith("+xml")) {
return "application/xml";
}
return "";
}
module2.exports = {
dataURLProcessor,
URLSerializer,
collectASequenceOfCodePoints,
collectASequenceOfCodePointsFast,
stringPercentDecode,
parseMIMEType,
collectAnHTTPQuotedString,
serializeAMimeType,
removeChars,
removeHTTPWhitespace,
minimizeSupportedMimeType,
HTTP_TOKEN_CODEPOINTS,
isomorphicDecode
};
}
});
// node_modules/undici/lib/web/fetch/webidl.js
var require_webidl = __commonJS({
"node_modules/undici/lib/web/fetch/webidl.js"(exports2, module2) {
"use strict";
var { types, inspect } = require("node:util");
var { markAsUncloneable } = require("node:worker_threads");
var { toUSVString } = require_util2();
var webidl = {};
webidl.converters = {};
webidl.util = {};
webidl.errors = {};
webidl.errors.exception = function(message) {
return new TypeError(`${message.header}: ${message.message}`);
};
webidl.errors.conversionFailed = function(context) {
const plural = context.types.length === 1 ? "" : " one of";
const message = `${context.argument} could not be converted to${plural}: ${context.types.join(", ")}.`;
return webidl.errors.exception({
header: context.prefix,
message
});
};
webidl.errors.invalidArgument = function(context) {
return webidl.errors.exception({
header: context.prefix,
message: `"${context.value}" is an invalid ${context.type}.`
});
};
webidl.brandCheck = function(V, I, opts) {
if (opts?.strict !== false) {
if (!(V instanceof I)) {
const err2 = new TypeError("Illegal invocation");
err2.code = "ERR_INVALID_THIS";
throw err2;
}
} else {
if (V?.[Symbol.toStringTag] !== I.prototype[Symbol.toStringTag]) {
const err2 = new TypeError("Illegal invocation");
err2.code = "ERR_INVALID_THIS";
throw err2;
}
}
};
webidl.argumentLengthCheck = function({ length }, min, ctx) {
if (length < min) {
throw webidl.errors.exception({
message: `${min} argument${min !== 1 ? "s" : ""} required, but${length ? " only" : ""} ${length} found.`,
header: ctx
});
}
};
webidl.illegalConstructor = function() {
throw webidl.errors.exception({
header: "TypeError",
message: "Illegal constructor"
});
};
webidl.util.Type = function(V) {
switch (typeof V) {
case "undefined":
return "Undefined";
case "boolean":
return "Boolean";
case "string":
return "String";
case "symbol":
return "Symbol";
case "number":
return "Number";
case "bigint":
return "BigInt";
case "function":
case "object": {
if (V === null) {
return "Null";
}
return "Object";
}
}
};
webidl.util.markAsUncloneable = markAsUncloneable || (() => {
});
webidl.util.ConvertToInt = function(V, bitLength, signedness, opts) {
let upperBound;
let lowerBound;
if (bitLength === 64) {
upperBound = Math.pow(2, 53) - 1;
if (signedness === "unsigned") {
lowerBound = 0;
} else {
lowerBound = Math.pow(-2, 53) + 1;
}
} else if (signedness === "unsigned") {
lowerBound = 0;
upperBound = Math.pow(2, bitLength) - 1;
} else {
lowerBound = Math.pow(-2, bitLength) - 1;
upperBound = Math.pow(2, bitLength - 1) - 1;
}
let x = Number(V);
if (x === 0) {
x = 0;
}
if (opts?.enforceRange === true) {
if (Number.isNaN(x) || x === Number.POSITIVE_INFINITY || x === Number.NEGATIVE_INFINITY) {
throw webidl.errors.exception({
header: "Integer conversion",
message: `Could not convert ${webidl.util.Stringify(V)} to an integer.`
});
}
x = webidl.util.IntegerPart(x);
if (x < lowerBound || x > upperBound) {
throw webidl.errors.exception({
header: "Integer conversion",
message: `Value must be between ${lowerBound}-${upperBound}, got ${x}.`
});
}
return x;
}
if (!Number.isNaN(x) && opts?.clamp === true) {
x = Math.min(Math.max(x, lowerBound), upperBound);
if (Math.floor(x) % 2 === 0) {
x = Math.floor(x);
} else {
x = Math.ceil(x);
}
return x;
}
if (Number.isNaN(x) || x === 0 && Object.is(0, x) || x === Number.POSITIVE_INFINITY || x === Number.NEGATIVE_INFINITY) {
return 0;
}
x = webidl.util.IntegerPart(x);
x = x % Math.pow(2, bitLength);
if (signedness === "signed" && x >= Math.pow(2, bitLength) - 1) {
return x - Math.pow(2, bitLength);
}
return x;
};
webidl.util.IntegerPart = function(n) {
const r = Math.floor(Math.abs(n));
if (n < 0) {
return -1 * r;
}
return r;
};
webidl.util.Stringify = function(V) {
const type = webidl.util.Type(V);
switch (type) {
case "Symbol":
return `Symbol(${V.description})`;
case "Object":
return inspect(V);
case "String":
return `"${V}"`;
default:
return `${V}`;
}
};
webidl.sequenceConverter = function(converter) {
return (V, prefix, argument, Iterable) => {
if (webidl.util.Type(V) !== "Object") {
throw webidl.errors.exception({
header: prefix,
message: `${argument} (${webidl.util.Stringify(V)}) is not iterable.`
});
}
const method = typeof Iterable === "function" ? Iterable() : V?.[Symbol.iterator]?.();
const seq = [];
let index2 = 0;
if (method === void 0 || typeof method.next !== "function") {
throw webidl.errors.exception({
header: prefix,
message: `${argument} is not iterable.`
});
}
while (true) {
const { done, value } = method.next();
if (done) {
break;
}
seq.push(converter(value, prefix, `${argument}[${index2++}]`));
}
return seq;
};
};
webidl.recordConverter = function(keyConverter, valueConverter) {
return (O, prefix, argument) => {
if (webidl.util.Type(O) !== "Object") {
throw webidl.errors.exception({
header: prefix,
message: `${argument} ("${webidl.util.Type(O)}") is not an Object.`
});
}
const result = {};
if (!types.isProxy(O)) {
const keys2 = [...Object.getOwnPropertyNames(O), ...Object.getOwnPropertySymbols(O)];
for (const key of keys2) {
const typedKey = keyConverter(key, prefix, argument);
const typedValue = valueConverter(O[key], prefix, argument);
result[typedKey] = typedValue;
}
return result;
}
const keys = Reflect.ownKeys(O);
for (const key of keys) {
const desc = Reflect.getOwnPropertyDescriptor(O, key);
if (desc?.enumerable) {
const typedKey = keyConverter(key, prefix, argument);
const typedValue = valueConverter(O[key], prefix, argument);
result[typedKey] = typedValue;
}
}
return result;
};
};
webidl.interfaceConverter = function(i) {
return (V, prefix, argument, opts) => {
if (opts?.strict !== false && !(V instanceof i)) {
throw webidl.errors.exception({
header: prefix,
message: `Expected ${argument} ("${webidl.util.Stringify(V)}") to be an instance of ${i.name}.`
});
}
return V;
};
};
webidl.dictionaryConverter = function(converters) {
return (dictionary, prefix, argument) => {
const type = webidl.util.Type(dictionary);
const dict = {};
if (type === "Null" || type === "Undefined") {
return dict;
} else if (type !== "Object") {
throw webidl.errors.exception({
header: prefix,
message: `Expected ${dictionary} to be one of: Null, Undefined, Object.`
});
}
for (const options of converters) {
const { key, defaultValue, required, converter } = options;
if (required === true) {
if (!Object.hasOwn(dictionary, key)) {
throw webidl.errors.exception({
header: prefix,
message: `Missing required key "${key}".`
});
}
}
let value = dictionary[key];
const hasDefault = Object.hasOwn(options, "defaultValue");
if (hasDefault && value !== null) {
value ??= defaultValue();
}
if (required || hasDefault || value !== void 0) {
value = converter(value, prefix, `${argument}.${key}`);
if (options.allowedValues && !options.allowedValues.includes(value)) {
throw webidl.errors.exception({
header: prefix,
message: `${value} is not an accepted type. Expected one of ${options.allowedValues.join(", ")}.`
});
}
dict[key] = value;
}
}
return dict;
};
};
webidl.nullableConverter = function(converter) {
return (V, prefix, argument) => {
if (V === null) {
return V;
}
return converter(V, prefix, argument);
};
};
webidl.converters.DOMString = function(V, prefix, argument, opts) {
if (V === null && opts?.legacyNullToEmptyString) {
return "";
}
if (typeof V === "symbol") {
throw webidl.errors.exception({
header: prefix,
message: `${argument} is a symbol, which cannot be converted to a DOMString.`
});
}
return String(V);
};
webidl.converters.ByteString = function(V, prefix, argument) {
const x = webidl.converters.DOMString(V, prefix, argument);
for (let index2 = 0; index2 < x.length; index2++) {
if (x.charCodeAt(index2) > 255) {
throw new TypeError(
`Cannot convert argument to a ByteString because the character at index ${index2} has a value of ${x.charCodeAt(index2)} which is greater than 255.`
);
}
}
return x;
};
webidl.converters.USVString = toUSVString;
webidl.converters.boolean = function(V) {
const x = Boolean(V);
return x;
};
webidl.converters.any = function(V) {
return V;
};
webidl.converters["long long"] = function(V, prefix, argument) {
const x = webidl.util.ConvertToInt(V, 64, "signed", void 0, prefix, argument);
return x;
};
webidl.converters["unsigned long long"] = function(V, prefix, argument) {
const x = webidl.util.ConvertToInt(V, 64, "unsigned", void 0, prefix, argument);
return x;
};
webidl.converters["unsigned long"] = function(V, prefix, argument) {
const x = webidl.util.ConvertToInt(V, 32, "unsigned", void 0, prefix, argument);
return x;
};
webidl.converters["unsigned short"] = function(V, prefix, argument, opts) {
const x = webidl.util.ConvertToInt(V, 16, "unsigned", opts, prefix, argument);
return x;
};
webidl.converters.ArrayBuffer = function(V, prefix, argument, opts) {
if (webidl.util.Type(V) !== "Object" || !types.isAnyArrayBuffer(V)) {
throw webidl.errors.conversionFailed({
prefix,
argument: `${argument} ("${webidl.util.Stringify(V)}")`,
types: ["ArrayBuffer"]
});
}
if (opts?.allowShared === false && types.isSharedArrayBuffer(V)) {
throw webidl.errors.exception({
header: "ArrayBuffer",
message: "SharedArrayBuffer is not allowed."
});
}
if (V.resizable || V.growable) {
throw webidl.errors.exception({
header: "ArrayBuffer",
message: "Received a resizable ArrayBuffer."
});
}
return V;
};
webidl.converters.TypedArray = function(V, T, prefix, name, opts) {
if (webidl.util.Type(V) !== "Object" || !types.isTypedArray(V) || V.constructor.name !== T.name) {
throw webidl.errors.conversionFailed({
prefix,
argument: `${name} ("${webidl.util.Stringify(V)}")`,
types: [T.name]
});
}
if (opts?.allowShared === false && types.isSharedArrayBuffer(V.buffer)) {
throw webidl.errors.exception({
header: "ArrayBuffer",
message: "SharedArrayBuffer is not allowed."
});
}
if (V.buffer.resizable || V.buffer.growable) {
throw webidl.errors.exception({
header: "ArrayBuffer",
message: "Received a resizable ArrayBuffer."
});
}
return V;
};
webidl.converters.DataView = function(V, prefix, name, opts) {
if (webidl.util.Type(V) !== "Object" || !types.isDataView(V)) {
throw webidl.errors.exception({
header: prefix,
message: `${name} is not a DataView.`
});
}
if (opts?.allowShared === false && types.isSharedArrayBuffer(V.buffer)) {
throw webidl.errors.exception({
header: "ArrayBuffer",
message: "SharedArrayBuffer is not allowed."
});
}
if (V.buffer.resizable || V.buffer.growable) {
throw webidl.errors.exception({
header: "ArrayBuffer",
message: "Received a resizable ArrayBuffer."
});
}
return V;
};
webidl.converters.BufferSource = function(V, prefix, name, opts) {
if (types.isAnyArrayBuffer(V)) {
return webidl.converters.ArrayBuffer(V, prefix, name, { ...opts, allowShared: false });
}
if (types.isTypedArray(V)) {
return webidl.converters.TypedArray(V, V.constructor, prefix, name, { ...opts, allowShared: false });
}
if (types.isDataView(V)) {
return webidl.converters.DataView(V, prefix, name, { ...opts, allowShared: false });
}
throw webidl.errors.conversionFailed({
prefix,
argument: `${name} ("${webidl.util.Stringify(V)}")`,
types: ["BufferSource"]
});
};
webidl.converters["sequence<ByteString>"] = webidl.sequenceConverter(
webidl.converters.ByteString
);
webidl.converters["sequence<sequence<ByteString>>"] = webidl.sequenceConverter(
webidl.converters["sequence<ByteString>"]
);
webidl.converters["record<ByteString, ByteString>"] = webidl.recordConverter(
webidl.converters.ByteString,
webidl.converters.ByteString
);
module2.exports = {
webidl
};
}
});
// node_modules/undici/lib/web/fetch/util.js
var require_util3 = __commonJS({
"node_modules/undici/lib/web/fetch/util.js"(exports2, module2) {
"use strict";
var { Transform: Transform2 } = require("node:stream");
var zlib2 = require("node:zlib");
var { redirectStatusSet, referrerPolicySet: referrerPolicyTokens, badPortsSet } = require_constants3();
var { getGlobalOrigin } = require_global();
var { collectASequenceOfCodePoints, collectAnHTTPQuotedString, removeChars, parseMIMEType } = require_data_url();
var { performance: performance2 } = require("node:perf_hooks");
var { isBlobLike, ReadableStreamFrom, isValidHTTPToken, normalizedMethodRecordsBase } = require_util2();
var assert = require("node:assert");
var { isUint8Array } = require("node:util/types");
var { webidl } = require_webidl();
var supportedHashes = [];
var crypto4;
try {
crypto4 = require("node:crypto");
const possibleRelevantHashes = ["sha256", "sha384", "sha512"];
supportedHashes = crypto4.getHashes().filter((hash) => possibleRelevantHashes.includes(hash));
} catch {
}
function responseURL(response) {
const urlList = response.urlList;
const length = urlList.length;
return length === 0 ? null : urlList[length - 1].toString();
}
function responseLocationURL(response, requestFragment) {
if (!redirectStatusSet.has(response.status)) {
return null;
}
let location = response.headersList.get("location", true);
if (location !== null && isValidHeaderValue(location)) {
if (!isValidEncodedURL(location)) {
location = normalizeBinaryStringToUtf8(location);
}
location = new URL(location, responseURL(response));
}
if (location && !location.hash) {
location.hash = requestFragment;
}
return location;
}
function isValidEncodedURL(url2) {
for (let i = 0; i < url2.length; ++i) {
const code = url2.charCodeAt(i);
if (code > 126 || // Non-US-ASCII + DEL
code < 32) {
return false;
}
}
return true;
}
function normalizeBinaryStringToUtf8(value) {
return Buffer.from(value, "binary").toString("utf8");
}
function requestCurrentURL(request) {
return request.urlList[request.urlList.length - 1];
}
function requestBadPort(request) {
const url2 = requestCurrentURL(request);
if (urlIsHttpHttpsScheme(url2) && badPortsSet.has(url2.port)) {
return "blocked";
}
return "allowed";
}
function isErrorLike(object) {
return object instanceof Error || (object?.constructor?.name === "Error" || object?.constructor?.name === "DOMException");
}
function isValidReasonPhrase(statusText) {
for (let i = 0; i < statusText.length; ++i) {
const c = statusText.charCodeAt(i);
if (!(c === 9 || // HTAB
c >= 32 && c <= 126 || // SP / VCHAR
c >= 128 && c <= 255)) {
return false;
}
}
return true;
}
var isValidHeaderName2 = isValidHTTPToken;
function isValidHeaderValue(potentialValue) {
return (potentialValue[0] === " " || potentialValue[0] === " " || potentialValue[potentialValue.length - 1] === " " || potentialValue[potentialValue.length - 1] === " " || potentialValue.includes("\n") || potentialValue.includes("\r") || potentialValue.includes("\0")) === false;
}
function setRequestReferrerPolicyOnRedirect(request, actualResponse) {
const { headersList } = actualResponse;
const policyHeader = (headersList.get("referrer-policy", true) ?? "").split(",");
let policy = "";
if (policyHeader.length > 0) {
for (let i = policyHeader.length; i !== 0; i--) {
const token = policyHeader[i - 1].trim();
if (referrerPolicyTokens.has(token)) {
policy = token;
break;
}
}
}
if (policy !== "") {
request.referrerPolicy = policy;
}
}
function crossOriginResourcePolicyCheck() {
return "allowed";
}
function corsCheck() {
return "success";
}
function TAOCheck() {
return "success";
}
function appendFetchMetadata(httpRequest) {
let header = null;
header = httpRequest.mode;
httpRequest.headersList.set("sec-fetch-mode", header, true);
}
function appendRequestOriginHeader(request) {
let serializedOrigin = request.origin;
if (serializedOrigin === "client" || serializedOrigin === void 0) {
return;
}
if (request.responseTainting === "cors" || request.mode === "websocket") {
request.headersList.append("origin", serializedOrigin, true);
} else if (request.method !== "GET" && request.method !== "HEAD") {
switch (request.referrerPolicy) {
case "no-referrer":
serializedOrigin = null;
break;
case "no-referrer-when-downgrade":
case "strict-origin":
case "strict-origin-when-cross-origin":
if (request.origin && urlHasHttpsScheme(request.origin) && !urlHasHttpsScheme(requestCurrentURL(request))) {
serializedOrigin = null;
}
break;
case "same-origin":
if (!sameOrigin(request, requestCurrentURL(request))) {
serializedOrigin = null;
}
break;
default:
}
request.headersList.append("origin", serializedOrigin, true);
}
}
function coarsenTime(timestamp, crossOriginIsolatedCapability) {
return timestamp;
}
function clampAndCoarsenConnectionTimingInfo(connectionTimingInfo, defaultStartTime, crossOriginIsolatedCapability) {
if (!connectionTimingInfo?.startTime || connectionTimingInfo.startTime < defaultStartTime) {
return {
domainLookupStartTime: defaultStartTime,
domainLookupEndTime: defaultStartTime,
connectionStartTime: defaultStartTime,
connectionEndTime: defaultStartTime,
secureConnectionStartTime: defaultStartTime,
ALPNNegotiatedProtocol: connectionTimingInfo?.ALPNNegotiatedProtocol
};
}
return {
domainLookupStartTime: coarsenTime(connectionTimingInfo.domainLookupStartTime, crossOriginIsolatedCapability),
domainLookupEndTime: coarsenTime(connectionTimingInfo.domainLookupEndTime, crossOriginIsolatedCapability),
connectionStartTime: coarsenTime(connectionTimingInfo.connectionStartTime, crossOriginIsolatedCapability),
connectionEndTime: coarsenTime(connectionTimingInfo.connectionEndTime, crossOriginIsolatedCapability),
secureConnectionStartTime: coarsenTime(connectionTimingInfo.secureConnectionStartTime, crossOriginIsolatedCapability),
ALPNNegotiatedProtocol: connectionTimingInfo.ALPNNegotiatedProtocol
};
}
function coarsenedSharedCurrentTime(crossOriginIsolatedCapability) {
return coarsenTime(performance2.now(), crossOriginIsolatedCapability);
}
function createOpaqueTimingInfo(timingInfo) {
return {
startTime: timingInfo.startTime ?? 0,
redirectStartTime: 0,
redirectEndTime: 0,
postRedirectStartTime: timingInfo.startTime ?? 0,
finalServiceWorkerStartTime: 0,
finalNetworkResponseStartTime: 0,
finalNetworkRequestStartTime: 0,
endTime: 0,
encodedBodySize: 0,
decodedBodySize: 0,
finalConnectionTimingInfo: null
};
}
function makePolicyContainer() {
return {
referrerPolicy: "strict-origin-when-cross-origin"
};
}
function clonePolicyContainer(policyContainer) {
return {
referrerPolicy: policyContainer.referrerPolicy
};
}
function determineRequestsReferrer(request) {
const policy = request.referrerPolicy;
assert(policy);
let referrerSource = null;
if (request.referrer === "client") {
const globalOrigin = getGlobalOrigin();
if (!globalOrigin || globalOrigin.origin === "null") {
return "no-referrer";
}
referrerSource = new URL(globalOrigin);
} else if (request.referrer instanceof URL) {
referrerSource = request.referrer;
}
let referrerURL = stripURLForReferrer(referrerSource);
const referrerOrigin = stripURLForReferrer(referrerSource, true);
if (referrerURL.toString().length > 4096) {
referrerURL = referrerOrigin;
}
const areSameOrigin = sameOrigin(request, referrerURL);
const isNonPotentiallyTrustWorthy = isURLPotentiallyTrustworthy(referrerURL) && !isURLPotentiallyTrustworthy(request.url);
switch (policy) {
case "origin":
return referrerOrigin != null ? referrerOrigin : stripURLForReferrer(referrerSource, true);
case "unsafe-url":
return referrerURL;
case "same-origin":
return areSameOrigin ? referrerOrigin : "no-referrer";
case "origin-when-cross-origin":
return areSameOrigin ? referrerURL : referrerOrigin;
case "strict-origin-when-cross-origin": {
const currentURL = requestCurrentURL(request);
if (sameOrigin(referrerURL, currentURL)) {
return referrerURL;
}
if (isURLPotentiallyTrustworthy(referrerURL) && !isURLPotentiallyTrustworthy(currentURL)) {
return "no-referrer";
}
return referrerOrigin;
}
case "strict-origin":
// eslint-disable-line
/**
* 1. If referrerURL is a potentially trustworthy URL and
* request’s current URL is not a potentially trustworthy URL,
* then return no referrer.
* 2. Return referrerOrigin
*/
case "no-referrer-when-downgrade":
// eslint-disable-line
/**
* 1. If referrerURL is a potentially trustworthy URL and
* request’s current URL is not a potentially trustworthy URL,
* then return no referrer.
* 2. Return referrerOrigin
*/
default:
return isNonPotentiallyTrustWorthy ? "no-referrer" : referrerOrigin;
}
}
function stripURLForReferrer(url2, originOnly) {
assert(url2 instanceof URL);
url2 = new URL(url2);
if (url2.protocol === "file:" || url2.protocol === "about:" || url2.protocol === "blank:") {
return "no-referrer";
}
url2.username = "";
url2.password = "";
url2.hash = "";
if (originOnly) {
url2.pathname = "";
url2.search = "";
}
return url2;
}
function isURLPotentiallyTrustworthy(url2) {
if (!(url2 instanceof URL)) {
return false;
}
if (url2.href === "about:blank" || url2.href === "about:srcdoc") {
return true;
}
if (url2.protocol === "data:") return true;
if (url2.protocol === "file:") return true;
return isOriginPotentiallyTrustworthy(url2.origin);
function isOriginPotentiallyTrustworthy(origin2) {
if (origin2 == null || origin2 === "null") return false;
const originAsURL = new URL(origin2);
if (originAsURL.protocol === "https:" || originAsURL.protocol === "wss:") {
return true;
}
if (/^127(?:\.[0-9]+){0,2}\.[0-9]+$|^\[(?:0*:)*?:?0*1\]$/.test(originAsURL.hostname) || (originAsURL.hostname === "localhost" || originAsURL.hostname.includes("localhost.")) || originAsURL.hostname.endsWith(".localhost")) {
return true;
}
return false;
}
}
function bytesMatch(bytes, metadataList) {
if (crypto4 === void 0) {
return true;
}
const parsedMetadata = parseMetadata(metadataList);
if (parsedMetadata === "no metadata") {
return true;
}
if (parsedMetadata.length === 0) {
return true;
}
const strongest = getStrongestMetadata(parsedMetadata);
const metadata = filterMetadataListByAlgorithm(parsedMetadata, strongest);
for (const item of metadata) {
const algorithm = item.algo;
const expectedValue = item.hash;
let actualValue = crypto4.createHash(algorithm).update(bytes).digest("base64");
if (actualValue[actualValue.length - 1] === "=") {
if (actualValue[actualValue.length - 2] === "=") {
actualValue = actualValue.slice(0, -2);
} else {
actualValue = actualValue.slice(0, -1);
}
}
if (compareBase64Mixed(actualValue, expectedValue)) {
return true;
}
}
return false;
}
var parseHashWithOptions = /(?<algo>sha256|sha384|sha512)-((?<hash>[A-Za-z0-9+/]+|[A-Za-z0-9_-]+)={0,2}(?:\s|$)( +[!-~]*)?)?/i;
function parseMetadata(metadata) {
const result = [];
let empty2 = true;
for (const token of metadata.split(" ")) {
empty2 = false;
const parsedToken = parseHashWithOptions.exec(token);
if (parsedToken === null || parsedToken.groups === void 0 || parsedToken.groups.algo === void 0) {
continue;
}
const algorithm = parsedToken.groups.algo.toLowerCase();
if (supportedHashes.includes(algorithm)) {
result.push(parsedToken.groups);
}
}
if (empty2 === true) {
return "no metadata";
}
return result;
}
function getStrongestMetadata(metadataList) {
let algorithm = metadataList[0].algo;
if (algorithm[3] === "5") {
return algorithm;
}
for (let i = 1; i < metadataList.length; ++i) {
const metadata = metadataList[i];
if (metadata.algo[3] === "5") {
algorithm = "sha512";
break;
} else if (algorithm[3] === "3") {
continue;
} else if (metadata.algo[3] === "3") {
algorithm = "sha384";
}
}
return algorithm;
}
function filterMetadataListByAlgorithm(metadataList, algorithm) {
if (metadataList.length === 1) {
return metadataList;
}
let pos = 0;
for (let i = 0; i < metadataList.length; ++i) {
if (metadataList[i].algo === algorithm) {
metadataList[pos++] = metadataList[i];
}
}
metadataList.length = pos;
return metadataList;
}
function compareBase64Mixed(actualValue, expectedValue) {
if (actualValue.length !== expectedValue.length) {
return false;
}
for (let i = 0; i < actualValue.length; ++i) {
if (actualValue[i] !== expectedValue[i]) {
if (actualValue[i] === "+" && expectedValue[i] === "-" || actualValue[i] === "/" && expectedValue[i] === "_") {
continue;
}
return false;
}
}
return true;
}
function tryUpgradeRequestToAPotentiallyTrustworthyURL(request) {
}
function sameOrigin(A, B) {
if (A.origin === B.origin && A.origin === "null") {
return true;
}
if (A.protocol === B.protocol && A.hostname === B.hostname && A.port === B.port) {
return true;
}
return false;
}
function createDeferredPromise() {
let res;
let rej;
const promise = new Promise((resolve, reject) => {
res = resolve;
rej = reject;
});
return { promise, resolve: res, reject: rej };
}
function isAborted3(fetchParams) {
return fetchParams.controller.state === "aborted";
}
function isCancelled(fetchParams) {
return fetchParams.controller.state === "aborted" || fetchParams.controller.state === "terminated";
}
function normalizeMethod(method) {
return normalizedMethodRecordsBase[method.toLowerCase()] ?? method;
}
function serializeJavascriptValueToJSONString(value) {
const result = JSON.stringify(value);
if (result === void 0) {
throw new TypeError("Value is not JSON serializable");
}
assert(typeof result === "string");
return result;
}
var esIteratorPrototype = Object.getPrototypeOf(Object.getPrototypeOf([][Symbol.iterator]()));
function createIterator(name, kInternalIterator, keyIndex = 0, valueIndex = 1) {
class FastIterableIterator {
/** @type {any} */
#target;
/** @type {'key' | 'value' | 'key+value'} */
#kind;
/** @type {number} */
#index;
/**
* @see https://webidl.spec.whatwg.org/#dfn-default-iterator-object
* @param {unknown} target
* @param {'key' | 'value' | 'key+value'} kind
*/
constructor(target, kind) {
this.#target = target;
this.#kind = kind;
this.#index = 0;
}
next() {
if (typeof this !== "object" || this === null || !(#target in this)) {
throw new TypeError(
`'next' called on an object that does not implement interface ${name} Iterator.`
);
}
const index2 = this.#index;
const values = this.#target[kInternalIterator];
const len = values.length;
if (index2 >= len) {
return {
value: void 0,
done: true
};
}
const { [keyIndex]: key, [valueIndex]: value } = values[index2];
this.#index = index2 + 1;
let result;
switch (this.#kind) {
case "key":
result = key;
break;
case "value":
result = value;
break;
case "key+value":
result = [key, value];
break;
}
return {
value: result,
done: false
};
}
}
delete FastIterableIterator.prototype.constructor;
Object.setPrototypeOf(FastIterableIterator.prototype, esIteratorPrototype);
Object.defineProperties(FastIterableIterator.prototype, {
[Symbol.toStringTag]: {
writable: false,
enumerable: false,
configurable: true,
value: `${name} Iterator`
},
next: { writable: true, enumerable: true, configurable: true }
});
return function(target, kind) {
return new FastIterableIterator(target, kind);
};
}
function iteratorMixin(name, object, kInternalIterator, keyIndex = 0, valueIndex = 1) {
const makeIterator = createIterator(name, kInternalIterator, keyIndex, valueIndex);
const properties = {
keys: {
writable: true,
enumerable: true,
configurable: true,
value: function keys() {
webidl.brandCheck(this, object);
return makeIterator(this, "key");
}
},
values: {
writable: true,
enumerable: true,
configurable: true,
value: function values() {
webidl.brandCheck(this, object);
return makeIterator(this, "value");
}
},
entries: {
writable: true,
enumerable: true,
configurable: true,
value: function entries() {
webidl.brandCheck(this, object);
return makeIterator(this, "key+value");
}
},
forEach: {
writable: true,
enumerable: true,
configurable: true,
value: function forEach2(callbackfn, thisArg = globalThis) {
webidl.brandCheck(this, object);
webidl.argumentLengthCheck(arguments, 1, `${name}.forEach`);
if (typeof callbackfn !== "function") {
throw new TypeError(
`Failed to execute 'forEach' on '${name}': parameter 1 is not of type 'Function'.`
);
}
for (const { 0: key, 1: value } of makeIterator(this, "key+value")) {
callbackfn.call(thisArg, value, key, this);
}
}
}
};
return Object.defineProperties(object.prototype, {
...properties,
[Symbol.iterator]: {
writable: true,
enumerable: false,
configurable: true,
value: properties.entries.value
}
});
}
async function fullyReadBody(body, processBody, processBodyError) {
const successSteps = processBody;
const errorSteps = processBodyError;
let reader;
try {
reader = body.stream.getReader();
} catch (e) {
errorSteps(e);
return;
}
try {
successSteps(await readAllBytes(reader));
} catch (e) {
errorSteps(e);
}
}
function isReadableStreamLike(stream5) {
return stream5 instanceof ReadableStream || stream5[Symbol.toStringTag] === "ReadableStream" && typeof stream5.tee === "function";
}
function readableStreamClose(controller) {
try {
controller.close();
controller.byobRequest?.respond(0);
} catch (err2) {
if (!err2.message.includes("Controller is already closed") && !err2.message.includes("ReadableStream is already closed")) {
throw err2;
}
}
}
var invalidIsomorphicEncodeValueRegex = /[^\x00-\xFF]/;
function isomorphicEncode(input) {
assert(!invalidIsomorphicEncodeValueRegex.test(input));
return input;
}
async function readAllBytes(reader) {
const bytes = [];
let byteLength = 0;
while (true) {
const { done, value: chunk } = await reader.read();
if (done) {
return Buffer.concat(bytes, byteLength);
}
if (!isUint8Array(chunk)) {
throw new TypeError("Received non-Uint8Array chunk");
}
bytes.push(chunk);
byteLength += chunk.length;
}
}
function urlIsLocal(url2) {
assert("protocol" in url2);
const protocol = url2.protocol;
return protocol === "about:" || protocol === "blob:" || protocol === "data:";
}
function urlHasHttpsScheme(url2) {
return typeof url2 === "string" && url2[5] === ":" && url2[0] === "h" && url2[1] === "t" && url2[2] === "t" && url2[3] === "p" && url2[4] === "s" || url2.protocol === "https:";
}
function urlIsHttpHttpsScheme(url2) {
assert("protocol" in url2);
const protocol = url2.protocol;
return protocol === "http:" || protocol === "https:";
}
function simpleRangeHeaderValue(value, allowWhitespace) {
const data2 = value;
if (!data2.startsWith("bytes")) {
return "failure";
}
const position = { position: 5 };
if (allowWhitespace) {
collectASequenceOfCodePoints(
(char) => char === " " || char === " ",
data2,
position
);
}
if (data2.charCodeAt(position.position) !== 61) {
return "failure";
}
position.position++;
if (allowWhitespace) {
collectASequenceOfCodePoints(
(char) => char === " " || char === " ",
data2,
position
);
}
const rangeStart = collectASequenceOfCodePoints(
(char) => {
const code = char.charCodeAt(0);
return code >= 48 && code <= 57;
},
data2,
position
);
const rangeStartValue = rangeStart.length ? Number(rangeStart) : null;
if (allowWhitespace) {
collectASequenceOfCodePoints(
(char) => char === " " || char === " ",
data2,
position
);
}
if (data2.charCodeAt(position.position) !== 45) {
return "failure";
}
position.position++;
if (allowWhitespace) {
collectASequenceOfCodePoints(
(char) => char === " " || char === " ",
data2,
position
);
}
const rangeEnd = collectASequenceOfCodePoints(
(char) => {
const code = char.charCodeAt(0);
return code >= 48 && code <= 57;
},
data2,
position
);
const rangeEndValue = rangeEnd.length ? Number(rangeEnd) : null;
if (position.position < data2.length) {
return "failure";
}
if (rangeEndValue === null && rangeStartValue === null) {
return "failure";
}
if (rangeStartValue > rangeEndValue) {
return "failure";
}
return { rangeStartValue, rangeEndValue };
}
function buildContentRange(rangeStart, rangeEnd, fullLength) {
let contentRange = "bytes ";
contentRange += isomorphicEncode(`${rangeStart}`);
contentRange += "-";
contentRange += isomorphicEncode(`${rangeEnd}`);
contentRange += "/";
contentRange += isomorphicEncode(`${fullLength}`);
return contentRange;
}
var InflateStream = class extends Transform2 {
#zlibOptions;
/** @param {zlib.ZlibOptions} [zlibOptions] */
constructor(zlibOptions2) {
super();
this.#zlibOptions = zlibOptions2;
}
_transform(chunk, encoding, callback) {
if (!this._inflateStream) {
if (chunk.length === 0) {
callback();
return;
}
this._inflateStream = (chunk[0] & 15) === 8 ? zlib2.createInflate(this.#zlibOptions) : zlib2.createInflateRaw(this.#zlibOptions);
this._inflateStream.on("data", this.push.bind(this));
this._inflateStream.on("end", () => this.push(null));
this._inflateStream.on("error", (err2) => this.destroy(err2));
}
this._inflateStream.write(chunk, encoding, callback);
}
_final(callback) {
if (this._inflateStream) {
this._inflateStream.end();
this._inflateStream = null;
}
callback();
}
};
function createInflate(zlibOptions2) {
return new InflateStream(zlibOptions2);
}
function extractMimeType(headers) {
let charset = null;
let essence = null;
let mimeType = null;
const values = getDecodeSplit("content-type", headers);
if (values === null) {
return "failure";
}
for (const value of values) {
const temporaryMimeType = parseMIMEType(value);
if (temporaryMimeType === "failure" || temporaryMimeType.essence === "*/*") {
continue;
}
mimeType = temporaryMimeType;
if (mimeType.essence !== essence) {
charset = null;
if (mimeType.parameters.has("charset")) {
charset = mimeType.parameters.get("charset");
}
essence = mimeType.essence;
} else if (!mimeType.parameters.has("charset") && charset !== null) {
mimeType.parameters.set("charset", charset);
}
}
if (mimeType == null) {
return "failure";
}
return mimeType;
}
function gettingDecodingSplitting(value) {
const input = value;
const position = { position: 0 };
const values = [];
let temporaryValue = "";
while (position.position < input.length) {
temporaryValue += collectASequenceOfCodePoints(
(char) => char !== '"' && char !== ",",
input,
position
);
if (position.position < input.length) {
if (input.charCodeAt(position.position) === 34) {
temporaryValue += collectAnHTTPQuotedString(
input,
position
);
if (position.position < input.length) {
continue;
}
} else {
assert(input.charCodeAt(position.position) === 44);
position.position++;
}
}
temporaryValue = removeChars(temporaryValue, true, true, (char) => char === 9 || char === 32);
values.push(temporaryValue);
temporaryValue = "";
}
return values;
}
function getDecodeSplit(name, list) {
const value = list.get(name, true);
if (value === null) {
return null;
}
return gettingDecodingSplitting(value);
}
var textDecoder = new TextDecoder();
function utf8DecodeBytes(buffer) {
if (buffer.length === 0) {
return "";
}
if (buffer[0] === 239 && buffer[1] === 187 && buffer[2] === 191) {
buffer = buffer.subarray(3);
}
const output = textDecoder.decode(buffer);
return output;
}
var EnvironmentSettingsObjectBase = class {
get baseUrl() {
return getGlobalOrigin();
}
get origin() {
return this.baseUrl?.origin;
}
policyContainer = makePolicyContainer();
};
var EnvironmentSettingsObject = class {
settingsObject = new EnvironmentSettingsObjectBase();
};
var environmentSettingsObject = new EnvironmentSettingsObject();
module2.exports = {
isAborted: isAborted3,
isCancelled,
isValidEncodedURL,
createDeferredPromise,
ReadableStreamFrom,
tryUpgradeRequestToAPotentiallyTrustworthyURL,
clampAndCoarsenConnectionTimingInfo,
coarsenedSharedCurrentTime,
determineRequestsReferrer,
makePolicyContainer,
clonePolicyContainer,
appendFetchMetadata,
appendRequestOriginHeader,
TAOCheck,
corsCheck,
crossOriginResourcePolicyCheck,
createOpaqueTimingInfo,
setRequestReferrerPolicyOnRedirect,
isValidHTTPToken,
requestBadPort,
requestCurrentURL,
responseURL,
responseLocationURL,
isBlobLike,
isURLPotentiallyTrustworthy,
isValidReasonPhrase,
sameOrigin,
normalizeMethod,
serializeJavascriptValueToJSONString,
iteratorMixin,
createIterator,
isValidHeaderName: isValidHeaderName2,
isValidHeaderValue,
isErrorLike,
fullyReadBody,
bytesMatch,
isReadableStreamLike,
readableStreamClose,
isomorphicEncode,
urlIsLocal,
urlHasHttpsScheme,
urlIsHttpHttpsScheme,
readAllBytes,
simpleRangeHeaderValue,
buildContentRange,
parseMetadata,
createInflate,
extractMimeType,
getDecodeSplit,
utf8DecodeBytes,
environmentSettingsObject
};
}
});
// node_modules/undici/lib/web/fetch/symbols.js
var require_symbols2 = __commonJS({
"node_modules/undici/lib/web/fetch/symbols.js"(exports2, module2) {
"use strict";
module2.exports = {
kUrl: Symbol("url"),
kHeaders: Symbol("headers"),
kSignal: Symbol("signal"),
kState: Symbol("state"),
kDispatcher: Symbol("dispatcher")
};
}
});
// node_modules/undici/lib/web/fetch/file.js
var require_file = __commonJS({
"node_modules/undici/lib/web/fetch/file.js"(exports2, module2) {
"use strict";
var { Blob: Blob2, File } = require("node:buffer");
var { kState } = require_symbols2();
var { webidl } = require_webidl();
var FileLike = class _FileLike {
constructor(blobLike, fileName, options = {}) {
const n = fileName;
const t = options.type;
const d = options.lastModified ?? Date.now();
this[kState] = {
blobLike,
name: n,
type: t,
lastModified: d
};
}
stream(...args) {
webidl.brandCheck(this, _FileLike);
return this[kState].blobLike.stream(...args);
}
arrayBuffer(...args) {
webidl.brandCheck(this, _FileLike);
return this[kState].blobLike.arrayBuffer(...args);
}
slice(...args) {
webidl.brandCheck(this, _FileLike);
return this[kState].blobLike.slice(...args);
}
text(...args) {
webidl.brandCheck(this, _FileLike);
return this[kState].blobLike.text(...args);
}
get size() {
webidl.brandCheck(this, _FileLike);
return this[kState].blobLike.size;
}
get type() {
webidl.brandCheck(this, _FileLike);
return this[kState].blobLike.type;
}
get name() {
webidl.brandCheck(this, _FileLike);
return this[kState].name;
}
get lastModified() {
webidl.brandCheck(this, _FileLike);
return this[kState].lastModified;
}
get [Symbol.toStringTag]() {
return "File";
}
};
webidl.converters.Blob = webidl.interfaceConverter(Blob2);
function isFileLike(object) {
return object instanceof File || object && (typeof object.stream === "function" || typeof object.arrayBuffer === "function") && object[Symbol.toStringTag] === "File";
}
module2.exports = { FileLike, isFileLike };
}
});
// node_modules/undici/lib/web/fetch/formdata.js
var require_formdata = __commonJS({
"node_modules/undici/lib/web/fetch/formdata.js"(exports2, module2) {
"use strict";
var { isBlobLike, iteratorMixin } = require_util3();
var { kState } = require_symbols2();
var { kEnumerableProperty } = require_util2();
var { FileLike, isFileLike } = require_file();
var { webidl } = require_webidl();
var { File: NativeFile } = require("node:buffer");
var nodeUtil = require("node:util");
var File = globalThis.File ?? NativeFile;
var FormData3 = class _FormData {
constructor(form) {
webidl.util.markAsUncloneable(this);
if (form !== void 0) {
throw webidl.errors.conversionFailed({
prefix: "FormData constructor",
argument: "Argument 1",
types: ["undefined"]
});
}
this[kState] = [];
}
append(name, value, filename = void 0) {
webidl.brandCheck(this, _FormData);
const prefix = "FormData.append";
webidl.argumentLengthCheck(arguments, 2, prefix);
if (arguments.length === 3 && !isBlobLike(value)) {
throw new TypeError(
"Failed to execute 'append' on 'FormData': parameter 2 is not of type 'Blob'"
);
}
name = webidl.converters.USVString(name, prefix, "name");
value = isBlobLike(value) ? webidl.converters.Blob(value, prefix, "value", { strict: false }) : webidl.converters.USVString(value, prefix, "value");
filename = arguments.length === 3 ? webidl.converters.USVString(filename, prefix, "filename") : void 0;
const entry2 = makeEntry(name, value, filename);
this[kState].push(entry2);
}
delete(name) {
webidl.brandCheck(this, _FormData);
const prefix = "FormData.delete";
webidl.argumentLengthCheck(arguments, 1, prefix);
name = webidl.converters.USVString(name, prefix, "name");
this[kState] = this[kState].filter((entry2) => entry2.name !== name);
}
get(name) {
webidl.brandCheck(this, _FormData);
const prefix = "FormData.get";
webidl.argumentLengthCheck(arguments, 1, prefix);
name = webidl.converters.USVString(name, prefix, "name");
const idx = this[kState].findIndex((entry2) => entry2.name === name);
if (idx === -1) {
return null;
}
return this[kState][idx].value;
}
getAll(name) {
webidl.brandCheck(this, _FormData);
const prefix = "FormData.getAll";
webidl.argumentLengthCheck(arguments, 1, prefix);
name = webidl.converters.USVString(name, prefix, "name");
return this[kState].filter((entry2) => entry2.name === name).map((entry2) => entry2.value);
}
has(name) {
webidl.brandCheck(this, _FormData);
const prefix = "FormData.has";
webidl.argumentLengthCheck(arguments, 1, prefix);
name = webidl.converters.USVString(name, prefix, "name");
return this[kState].findIndex((entry2) => entry2.name === name) !== -1;
}
set(name, value, filename = void 0) {
webidl.brandCheck(this, _FormData);
const prefix = "FormData.set";
webidl.argumentLengthCheck(arguments, 2, prefix);
if (arguments.length === 3 && !isBlobLike(value)) {
throw new TypeError(
"Failed to execute 'set' on 'FormData': parameter 2 is not of type 'Blob'"
);
}
name = webidl.converters.USVString(name, prefix, "name");
value = isBlobLike(value) ? webidl.converters.Blob(value, prefix, "name", { strict: false }) : webidl.converters.USVString(value, prefix, "name");
filename = arguments.length === 3 ? webidl.converters.USVString(filename, prefix, "name") : void 0;
const entry2 = makeEntry(name, value, filename);
const idx = this[kState].findIndex((entry3) => entry3.name === name);
if (idx !== -1) {
this[kState] = [
...this[kState].slice(0, idx),
entry2,
...this[kState].slice(idx + 1).filter((entry3) => entry3.name !== name)
];
} else {
this[kState].push(entry2);
}
}
[nodeUtil.inspect.custom](depth, options) {
const state = this[kState].reduce((a, b) => {
if (a[b.name]) {
if (Array.isArray(a[b.name])) {
a[b.name].push(b.value);
} else {
a[b.name] = [a[b.name], b.value];
}
} else {
a[b.name] = b.value;
}
return a;
}, { __proto__: null });
options.depth ??= depth;
options.colors ??= true;
const output = nodeUtil.formatWithOptions(options, state);
return `FormData ${output.slice(output.indexOf("]") + 2)}`;
}
};
iteratorMixin("FormData", FormData3, kState, "name", "value");
Object.defineProperties(FormData3.prototype, {
append: kEnumerableProperty,
delete: kEnumerableProperty,
get: kEnumerableProperty,
getAll: kEnumerableProperty,
has: kEnumerableProperty,
set: kEnumerableProperty,
[Symbol.toStringTag]: {
value: "FormData",
configurable: true
}
});
function makeEntry(name, value, filename) {
if (typeof value === "string") {
} else {
if (!isFileLike(value)) {
value = value instanceof Blob ? new File([value], "blob", { type: value.type }) : new FileLike(value, "blob", { type: value.type });
}
if (filename !== void 0) {
const options = {
type: value.type,
lastModified: value.lastModified
};
value = value instanceof NativeFile ? new File([value], filename, options) : new FileLike(value, filename, options);
}
}
return { name, value };
}
module2.exports = { FormData: FormData3, makeEntry };
}
});
// node_modules/undici/lib/web/fetch/formdata-parser.js
var require_formdata_parser = __commonJS({
"node_modules/undici/lib/web/fetch/formdata-parser.js"(exports2, module2) {
"use strict";
var { isUSVString, bufferToLowerCasedHeaderName } = require_util2();
var { utf8DecodeBytes } = require_util3();
var { HTTP_TOKEN_CODEPOINTS, isomorphicDecode } = require_data_url();
var { isFileLike } = require_file();
var { makeEntry } = require_formdata();
var assert = require("node:assert");
var { File: NodeFile } = require("node:buffer");
var File = globalThis.File ?? NodeFile;
var formDataNameBuffer = Buffer.from('form-data; name="');
var filenameBuffer = Buffer.from("; filename");
var dd = Buffer.from("--");
var ddcrlf = Buffer.from("--\r\n");
function isAsciiString(chars) {
for (let i = 0; i < chars.length; ++i) {
if ((chars.charCodeAt(i) & ~127) !== 0) {
return false;
}
}
return true;
}
function validateBoundary(boundary) {
const length = boundary.length;
if (length < 27 || length > 70) {
return false;
}
for (let i = 0; i < length; ++i) {
const cp = boundary.charCodeAt(i);
if (!(cp >= 48 && cp <= 57 || cp >= 65 && cp <= 90 || cp >= 97 && cp <= 122 || cp === 39 || cp === 45 || cp === 95)) {
return false;
}
}
return true;
}
function multipartFormDataParser(input, mimeType) {
assert(mimeType !== "failure" && mimeType.essence === "multipart/form-data");
const boundaryString = mimeType.parameters.get("boundary");
if (boundaryString === void 0) {
return "failure";
}
const boundary = Buffer.from(`--${boundaryString}`, "utf8");
const entryList = [];
const position = { position: 0 };
while (input[position.position] === 13 && input[position.position + 1] === 10) {
position.position += 2;
}
let trailing = input.length;
while (input[trailing - 1] === 10 && input[trailing - 2] === 13) {
trailing -= 2;
}
if (trailing !== input.length) {
input = input.subarray(0, trailing);
}
while (true) {
if (input.subarray(position.position, position.position + boundary.length).equals(boundary)) {
position.position += boundary.length;
} else {
return "failure";
}
if (position.position === input.length - 2 && bufferStartsWith(input, dd, position) || position.position === input.length - 4 && bufferStartsWith(input, ddcrlf, position)) {
return entryList;
}
if (input[position.position] !== 13 || input[position.position + 1] !== 10) {
return "failure";
}
position.position += 2;
const result = parseMultipartFormDataHeaders(input, position);
if (result === "failure") {
return "failure";
}
let { name, filename, contentType, encoding } = result;
position.position += 2;
let body;
{
const boundaryIndex = input.indexOf(boundary.subarray(2), position.position);
if (boundaryIndex === -1) {
return "failure";
}
body = input.subarray(position.position, boundaryIndex - 4);
position.position += body.length;
if (encoding === "base64") {
body = Buffer.from(body.toString(), "base64");
}
}
if (input[position.position] !== 13 || input[position.position + 1] !== 10) {
return "failure";
} else {
position.position += 2;
}
let value;
if (filename !== null) {
contentType ??= "text/plain";
if (!isAsciiString(contentType)) {
contentType = "";
}
value = new File([body], filename, { type: contentType });
} else {
value = utf8DecodeBytes(Buffer.from(body));
}
assert(isUSVString(name));
assert(typeof value === "string" && isUSVString(value) || isFileLike(value));
entryList.push(makeEntry(name, value, filename));
}
}
function parseMultipartFormDataHeaders(input, position) {
let name = null;
let filename = null;
let contentType = null;
let encoding = null;
while (true) {
if (input[position.position] === 13 && input[position.position + 1] === 10) {
if (name === null) {
return "failure";
}
return { name, filename, contentType, encoding };
}
let headerName = collectASequenceOfBytes(
(char) => char !== 10 && char !== 13 && char !== 58,
input,
position
);
headerName = removeChars(headerName, true, true, (char) => char === 9 || char === 32);
if (!HTTP_TOKEN_CODEPOINTS.test(headerName.toString())) {
return "failure";
}
if (input[position.position] !== 58) {
return "failure";
}
position.position++;
collectASequenceOfBytes(
(char) => char === 32 || char === 9,
input,
position
);
switch (bufferToLowerCasedHeaderName(headerName)) {
case "content-disposition": {
name = filename = null;
if (!bufferStartsWith(input, formDataNameBuffer, position)) {
return "failure";
}
position.position += 17;
name = parseMultipartFormDataName(input, position);
if (name === null) {
return "failure";
}
if (bufferStartsWith(input, filenameBuffer, position)) {
let check = position.position + filenameBuffer.length;
if (input[check] === 42) {
position.position += 1;
check += 1;
}
if (input[check] !== 61 || input[check + 1] !== 34) {
return "failure";
}
position.position += 12;
filename = parseMultipartFormDataName(input, position);
if (filename === null) {
return "failure";
}
}
break;
}
case "content-type": {
let headerValue = collectASequenceOfBytes(
(char) => char !== 10 && char !== 13,
input,
position
);
headerValue = removeChars(headerValue, false, true, (char) => char === 9 || char === 32);
contentType = isomorphicDecode(headerValue);
break;
}
case "content-transfer-encoding": {
let headerValue = collectASequenceOfBytes(
(char) => char !== 10 && char !== 13,
input,
position
);
headerValue = removeChars(headerValue, false, true, (char) => char === 9 || char === 32);
encoding = isomorphicDecode(headerValue);
break;
}
default: {
collectASequenceOfBytes(
(char) => char !== 10 && char !== 13,
input,
position
);
}
}
if (input[position.position] !== 13 && input[position.position + 1] !== 10) {
return "failure";
} else {
position.position += 2;
}
}
}
function parseMultipartFormDataName(input, position) {
assert(input[position.position - 1] === 34);
let name = collectASequenceOfBytes(
(char) => char !== 10 && char !== 13 && char !== 34,
input,
position
);
if (input[position.position] !== 34) {
return null;
} else {
position.position++;
}
name = new TextDecoder().decode(name).replace(/%0A/ig, "\n").replace(/%0D/ig, "\r").replace(/%22/g, '"');
return name;
}
function collectASequenceOfBytes(condition, input, position) {
let start = position.position;
while (start < input.length && condition(input[start])) {
++start;
}
return input.subarray(position.position, position.position = start);
}
function removeChars(buf, leading, trailing, predicate) {
let lead = 0;
let trail = buf.length - 1;
if (leading) {
while (lead < buf.length && predicate(buf[lead])) lead++;
}
if (trailing) {
while (trail > 0 && predicate(buf[trail])) trail--;
}
return lead === 0 && trail === buf.length - 1 ? buf : buf.subarray(lead, trail + 1);
}
function bufferStartsWith(buffer, start, position) {
if (buffer.length < start.length) {
return false;
}
for (let i = 0; i < start.length; i++) {
if (start[i] !== buffer[position.position + i]) {
return false;
}
}
return true;
}
module2.exports = {
multipartFormDataParser,
validateBoundary
};
}
});
// node_modules/undici/lib/web/fetch/body.js
var require_body = __commonJS({
"node_modules/undici/lib/web/fetch/body.js"(exports2, module2) {
"use strict";
var util5 = require_util2();
var {
ReadableStreamFrom,
isBlobLike,
isReadableStreamLike,
readableStreamClose,
createDeferredPromise,
fullyReadBody,
extractMimeType,
utf8DecodeBytes
} = require_util3();
var { FormData: FormData3 } = require_formdata();
var { kState } = require_symbols2();
var { webidl } = require_webidl();
var { Blob: Blob2 } = require("node:buffer");
var assert = require("node:assert");
var { isErrored, isDisturbed } = require("node:stream");
var { isArrayBuffer: isArrayBuffer2 } = require("node:util/types");
var { serializeAMimeType } = require_data_url();
var { multipartFormDataParser } = require_formdata_parser();
var random;
try {
const crypto4 = require("node:crypto");
random = (max) => crypto4.randomInt(0, max);
} catch {
random = (max) => Math.floor(Math.random(max));
}
var textEncoder2 = new TextEncoder();
function noop2() {
}
var hasFinalizationRegistry = globalThis.FinalizationRegistry && process.version.indexOf("v18") !== 0;
var streamRegistry;
if (hasFinalizationRegistry) {
streamRegistry = new FinalizationRegistry((weakRef) => {
const stream5 = weakRef.deref();
if (stream5 && !stream5.locked && !isDisturbed(stream5) && !isErrored(stream5)) {
stream5.cancel("Response object has been garbage collected").catch(noop2);
}
});
}
function extractBody(object, keepalive = false) {
let stream5 = null;
if (object instanceof ReadableStream) {
stream5 = object;
} else if (isBlobLike(object)) {
stream5 = object.stream();
} else {
stream5 = new ReadableStream({
async pull(controller) {
const buffer = typeof source === "string" ? textEncoder2.encode(source) : source;
if (buffer.byteLength) {
controller.enqueue(buffer);
}
queueMicrotask(() => readableStreamClose(controller));
},
start() {
},
type: "bytes"
});
}
assert(isReadableStreamLike(stream5));
let action = null;
let source = null;
let length = null;
let type = null;
if (typeof object === "string") {
source = object;
type = "text/plain;charset=UTF-8";
} else if (object instanceof URLSearchParams) {
source = object.toString();
type = "application/x-www-form-urlencoded;charset=UTF-8";
} else if (isArrayBuffer2(object)) {
source = new Uint8Array(object.slice());
} else if (ArrayBuffer.isView(object)) {
source = new Uint8Array(object.buffer.slice(object.byteOffset, object.byteOffset + object.byteLength));
} else if (util5.isFormDataLike(object)) {
const boundary = `----formdata-undici-0${`${random(1e11)}`.padStart(11, "0")}`;
const prefix = `--${boundary}\r
Content-Disposition: form-data`;
const escape3 = (str) => str.replace(/\n/g, "%0A").replace(/\r/g, "%0D").replace(/"/g, "%22");
const normalizeLinefeeds = (value) => value.replace(/\r?\n|\r/g, "\r\n");
const blobParts = [];
const rn = new Uint8Array([13, 10]);
length = 0;
let hasUnknownSizeValue = false;
for (const [name, value] of object) {
if (typeof value === "string") {
const chunk2 = textEncoder2.encode(prefix + `; name="${escape3(normalizeLinefeeds(name))}"\r
\r
${normalizeLinefeeds(value)}\r
`);
blobParts.push(chunk2);
length += chunk2.byteLength;
} else {
const chunk2 = textEncoder2.encode(`${prefix}; name="${escape3(normalizeLinefeeds(name))}"` + (value.name ? `; filename="${escape3(value.name)}"` : "") + `\r
Content-Type: ${value.type || "application/octet-stream"}\r
\r
`);
blobParts.push(chunk2, value, rn);
if (typeof value.size === "number") {
length += chunk2.byteLength + value.size + rn.byteLength;
} else {
hasUnknownSizeValue = true;
}
}
}
const chunk = textEncoder2.encode(`--${boundary}--`);
blobParts.push(chunk);
length += chunk.byteLength;
if (hasUnknownSizeValue) {
length = null;
}
source = object;
action = async function* () {
for (const part of blobParts) {
if (part.stream) {
yield* part.stream();
} else {
yield part;
}
}
};
type = `multipart/form-data; boundary=${boundary}`;
} else if (isBlobLike(object)) {
source = object;
length = object.size;
if (object.type) {
type = object.type;
}
} else if (typeof object[Symbol.asyncIterator] === "function") {
if (keepalive) {
throw new TypeError("keepalive");
}
if (util5.isDisturbed(object) || object.locked) {
throw new TypeError(
"Response body object should not be disturbed or locked"
);
}
stream5 = object instanceof ReadableStream ? object : ReadableStreamFrom(object);
}
if (typeof source === "string" || util5.isBuffer(source)) {
length = Buffer.byteLength(source);
}
if (action != null) {
let iterator;
stream5 = new ReadableStream({
async start() {
iterator = action(object)[Symbol.asyncIterator]();
},
async pull(controller) {
const { value, done } = await iterator.next();
if (done) {
queueMicrotask(() => {
controller.close();
controller.byobRequest?.respond(0);
});
} else {
if (!isErrored(stream5)) {
const buffer = new Uint8Array(value);
if (buffer.byteLength) {
controller.enqueue(buffer);
}
}
}
return controller.desiredSize > 0;
},
async cancel(reason) {
await iterator.return();
},
type: "bytes"
});
}
const body = { stream: stream5, source, length };
return [body, type];
}
function safelyExtractBody(object, keepalive = false) {
if (object instanceof ReadableStream) {
assert(!util5.isDisturbed(object), "The body has already been consumed.");
assert(!object.locked, "The stream is locked.");
}
return extractBody(object, keepalive);
}
function cloneBody(instance, body) {
const [out1, out2] = body.stream.tee();
if (hasFinalizationRegistry) {
streamRegistry.register(instance, new WeakRef(out1));
}
body.stream = out1;
return {
stream: out2,
length: body.length,
source: body.source
};
}
function throwIfAborted(state) {
if (state.aborted) {
throw new DOMException("The operation was aborted.", "AbortError");
}
}
function bodyMixinMethods(instance) {
const methods = {
blob() {
return consumeBody(this, (bytes) => {
let mimeType = bodyMimeType(this);
if (mimeType === null) {
mimeType = "";
} else if (mimeType) {
mimeType = serializeAMimeType(mimeType);
}
return new Blob2([bytes], { type: mimeType });
}, instance);
},
arrayBuffer() {
return consumeBody(this, (bytes) => {
return new Uint8Array(bytes).buffer;
}, instance);
},
text() {
return consumeBody(this, utf8DecodeBytes, instance);
},
json() {
return consumeBody(this, parseJSONFromBytes, instance);
},
formData() {
return consumeBody(this, (value) => {
const mimeType = bodyMimeType(this);
if (mimeType !== null) {
switch (mimeType.essence) {
case "multipart/form-data": {
const parsed = multipartFormDataParser(value, mimeType);
if (parsed === "failure") {
throw new TypeError("Failed to parse body as FormData.");
}
const fd = new FormData3();
fd[kState] = parsed;
return fd;
}
case "application/x-www-form-urlencoded": {
const entries = new URLSearchParams(value.toString());
const fd = new FormData3();
for (const [name, value2] of entries) {
fd.append(name, value2);
}
return fd;
}
}
}
throw new TypeError(
'Content-Type was not one of "multipart/form-data" or "application/x-www-form-urlencoded".'
);
}, instance);
},
bytes() {
return consumeBody(this, (bytes) => {
return new Uint8Array(bytes);
}, instance);
}
};
return methods;
}
function mixinBody(prototype3) {
Object.assign(prototype3.prototype, bodyMixinMethods(prototype3));
}
async function consumeBody(object, convertBytesToJSValue, instance) {
webidl.brandCheck(object, instance);
if (bodyUnusable(object)) {
throw new TypeError("Body is unusable: Body has already been read");
}
throwIfAborted(object[kState]);
const promise = createDeferredPromise();
const errorSteps = (error) => promise.reject(error);
const successSteps = (data2) => {
try {
promise.resolve(convertBytesToJSValue(data2));
} catch (e) {
errorSteps(e);
}
};
if (object[kState].body == null) {
successSteps(Buffer.allocUnsafe(0));
return promise.promise;
}
await fullyReadBody(object[kState].body, successSteps, errorSteps);
return promise.promise;
}
function bodyUnusable(object) {
const body = object[kState].body;
return body != null && (body.stream.locked || util5.isDisturbed(body.stream));
}
function parseJSONFromBytes(bytes) {
return JSON.parse(utf8DecodeBytes(bytes));
}
function bodyMimeType(requestOrResponse) {
const headers = requestOrResponse[kState].headersList;
const mimeType = extractMimeType(headers);
if (mimeType === "failure") {
return null;
}
return mimeType;
}
module2.exports = {
extractBody,
safelyExtractBody,
cloneBody,
mixinBody,
streamRegistry,
hasFinalizationRegistry,
bodyUnusable
};
}
});
// node_modules/undici/lib/dispatcher/client-h1.js
var require_client_h1 = __commonJS({
"node_modules/undici/lib/dispatcher/client-h1.js"(exports2, module2) {
"use strict";
var assert = require("node:assert");
var util5 = require_util2();
var { channels } = require_diagnostics();
var timers = require_timers();
var {
RequestContentLengthMismatchError,
ResponseContentLengthMismatchError,
RequestAbortedError,
HeadersTimeoutError,
HeadersOverflowError,
SocketError,
InformationalError,
BodyTimeoutError,
HTTPParserError,
ResponseExceededMaxSizeError
} = require_errors();
var {
kUrl,
kReset,
kClient,
kParser,
kBlocking,
kRunning,
kPending,
kSize,
kWriting,
kQueue,
kNoRef,
kKeepAliveDefaultTimeout,
kHostHeader,
kPendingIdx,
kRunningIdx,
kError,
kPipelining,
kSocket,
kKeepAliveTimeoutValue,
kMaxHeadersSize,
kKeepAliveMaxTimeout,
kKeepAliveTimeoutThreshold,
kHeadersTimeout,
kBodyTimeout,
kStrictContentLength,
kMaxRequests,
kCounter,
kMaxResponseSize,
kOnError,
kResume,
kHTTPContext
} = require_symbols();
var constants = require_constants2();
var EMPTY_BUF = Buffer.alloc(0);
var FastBuffer = Buffer[Symbol.species];
var addListener = util5.addListener;
var removeAllListeners = util5.removeAllListeners;
var extractBody;
async function lazyllhttp() {
const llhttpWasmData = process.env.JEST_WORKER_ID ? require_llhttp_wasm() : void 0;
let mod;
try {
mod = await WebAssembly.compile(require_llhttp_simd_wasm());
} catch (e) {
mod = await WebAssembly.compile(llhttpWasmData || require_llhttp_wasm());
}
return await WebAssembly.instantiate(mod, {
env: {
/* eslint-disable camelcase */
wasm_on_url: (p, at, len) => {
return 0;
},
wasm_on_status: (p, at, len) => {
assert(currentParser.ptr === p);
const start = at - currentBufferPtr + currentBufferRef.byteOffset;
return currentParser.onStatus(new FastBuffer(currentBufferRef.buffer, start, len)) || 0;
},
wasm_on_message_begin: (p) => {
assert(currentParser.ptr === p);
return currentParser.onMessageBegin() || 0;
},
wasm_on_header_field: (p, at, len) => {
assert(currentParser.ptr === p);
const start = at - currentBufferPtr + currentBufferRef.byteOffset;
return currentParser.onHeaderField(new FastBuffer(currentBufferRef.buffer, start, len)) || 0;
},
wasm_on_header_value: (p, at, len) => {
assert(currentParser.ptr === p);
const start = at - currentBufferPtr + currentBufferRef.byteOffset;
return currentParser.onHeaderValue(new FastBuffer(currentBufferRef.buffer, start, len)) || 0;
},
wasm_on_headers_complete: (p, statusCode, upgrade, shouldKeepAlive) => {
assert(currentParser.ptr === p);
return currentParser.onHeadersComplete(statusCode, Boolean(upgrade), Boolean(shouldKeepAlive)) || 0;
},
wasm_on_body: (p, at, len) => {
assert(currentParser.ptr === p);
const start = at - currentBufferPtr + currentBufferRef.byteOffset;
return currentParser.onBody(new FastBuffer(currentBufferRef.buffer, start, len)) || 0;
},
wasm_on_message_complete: (p) => {
assert(currentParser.ptr === p);
return currentParser.onMessageComplete() || 0;
}
/* eslint-enable camelcase */
}
});
}
var llhttpInstance = null;
var llhttpPromise = lazyllhttp();
llhttpPromise.catch();
var currentParser = null;
var currentBufferRef = null;
var currentBufferSize = 0;
var currentBufferPtr = null;
var USE_NATIVE_TIMER = 0;
var USE_FAST_TIMER = 1;
var TIMEOUT_HEADERS = 2 | USE_FAST_TIMER;
var TIMEOUT_BODY = 4 | USE_FAST_TIMER;
var TIMEOUT_KEEP_ALIVE = 8 | USE_NATIVE_TIMER;
var Parser3 = class {
constructor(client, socket, { exports: exports3 }) {
assert(Number.isFinite(client[kMaxHeadersSize]) && client[kMaxHeadersSize] > 0);
this.llhttp = exports3;
this.ptr = this.llhttp.llhttp_alloc(constants.TYPE.RESPONSE);
this.client = client;
this.socket = socket;
this.timeout = null;
this.timeoutValue = null;
this.timeoutType = null;
this.statusCode = null;
this.statusText = "";
this.upgrade = false;
this.headers = [];
this.headersSize = 0;
this.headersMaxSize = client[kMaxHeadersSize];
this.shouldKeepAlive = false;
this.paused = false;
this.resume = this.resume.bind(this);
this.bytesRead = 0;
this.keepAlive = "";
this.contentLength = "";
this.connection = "";
this.maxResponseSize = client[kMaxResponseSize];
}
setTimeout(delay, type) {
if (delay !== this.timeoutValue || type & USE_FAST_TIMER ^ this.timeoutType & USE_FAST_TIMER) {
if (this.timeout) {
timers.clearTimeout(this.timeout);
this.timeout = null;
}
if (delay) {
if (type & USE_FAST_TIMER) {
this.timeout = timers.setFastTimeout(onParserTimeout, delay, new WeakRef(this));
} else {
this.timeout = setTimeout(onParserTimeout, delay, new WeakRef(this));
this.timeout.unref();
}
}
this.timeoutValue = delay;
} else if (this.timeout) {
if (this.timeout.refresh) {
this.timeout.refresh();
}
}
this.timeoutType = type;
}
resume() {
if (this.socket.destroyed || !this.paused) {
return;
}
assert(this.ptr != null);
assert(currentParser == null);
this.llhttp.llhttp_resume(this.ptr);
assert(this.timeoutType === TIMEOUT_BODY);
if (this.timeout) {
if (this.timeout.refresh) {
this.timeout.refresh();
}
}
this.paused = false;
this.execute(this.socket.read() || EMPTY_BUF);
this.readMore();
}
readMore() {
while (!this.paused && this.ptr) {
const chunk = this.socket.read();
if (chunk === null) {
break;
}
this.execute(chunk);
}
}
execute(data2) {
assert(this.ptr != null);
assert(currentParser == null);
assert(!this.paused);
const { socket, llhttp } = this;
if (data2.length > currentBufferSize) {
if (currentBufferPtr) {
llhttp.free(currentBufferPtr);
}
currentBufferSize = Math.ceil(data2.length / 4096) * 4096;
currentBufferPtr = llhttp.malloc(currentBufferSize);
}
new Uint8Array(llhttp.memory.buffer, currentBufferPtr, currentBufferSize).set(data2);
try {
let ret;
try {
currentBufferRef = data2;
currentParser = this;
ret = llhttp.llhttp_execute(this.ptr, currentBufferPtr, data2.length);
} catch (err2) {
throw err2;
} finally {
currentParser = null;
currentBufferRef = null;
}
const offset = llhttp.llhttp_get_error_pos(this.ptr) - currentBufferPtr;
if (ret === constants.ERROR.PAUSED_UPGRADE) {
this.onUpgrade(data2.slice(offset));
} else if (ret === constants.ERROR.PAUSED) {
this.paused = true;
socket.unshift(data2.slice(offset));
} else if (ret !== constants.ERROR.OK) {
const ptr = llhttp.llhttp_get_error_reason(this.ptr);
let message = "";
if (ptr) {
const len = new Uint8Array(llhttp.memory.buffer, ptr).indexOf(0);
message = "Response does not match the HTTP/1.1 protocol (" + Buffer.from(llhttp.memory.buffer, ptr, len).toString() + ")";
}
throw new HTTPParserError(message, constants.ERROR[ret], data2.slice(offset));
}
} catch (err2) {
util5.destroy(socket, err2);
}
}
destroy() {
assert(this.ptr != null);
assert(currentParser == null);
this.llhttp.llhttp_free(this.ptr);
this.ptr = null;
this.timeout && timers.clearTimeout(this.timeout);
this.timeout = null;
this.timeoutValue = null;
this.timeoutType = null;
this.paused = false;
}
onStatus(buf) {
this.statusText = buf.toString();
}
onMessageBegin() {
const { socket, client } = this;
if (socket.destroyed) {
return -1;
}
const request = client[kQueue][client[kRunningIdx]];
if (!request) {
return -1;
}
request.onResponseStarted();
}
onHeaderField(buf) {
const len = this.headers.length;
if ((len & 1) === 0) {
this.headers.push(buf);
} else {
this.headers[len - 1] = Buffer.concat([this.headers[len - 1], buf]);
}
this.trackHeader(buf.length);
}
onHeaderValue(buf) {
let len = this.headers.length;
if ((len & 1) === 1) {
this.headers.push(buf);
len += 1;
} else {
this.headers[len - 1] = Buffer.concat([this.headers[len - 1], buf]);
}
const key = this.headers[len - 2];
if (key.length === 10) {
const headerName = util5.bufferToLowerCasedHeaderName(key);
if (headerName === "keep-alive") {
this.keepAlive += buf.toString();
} else if (headerName === "connection") {
this.connection += buf.toString();
}
} else if (key.length === 14 && util5.bufferToLowerCasedHeaderName(key) === "content-length") {
this.contentLength += buf.toString();
}
this.trackHeader(buf.length);
}
trackHeader(len) {
this.headersSize += len;
if (this.headersSize >= this.headersMaxSize) {
util5.destroy(this.socket, new HeadersOverflowError());
}
}
onUpgrade(head) {
const { upgrade, client, socket, headers, statusCode } = this;
assert(upgrade);
assert(client[kSocket] === socket);
assert(!socket.destroyed);
assert(!this.paused);
assert((headers.length & 1) === 0);
const request = client[kQueue][client[kRunningIdx]];
assert(request);
assert(request.upgrade || request.method === "CONNECT");
this.statusCode = null;
this.statusText = "";
this.shouldKeepAlive = null;
this.headers = [];
this.headersSize = 0;
socket.unshift(head);
socket[kParser].destroy();
socket[kParser] = null;
socket[kClient] = null;
socket[kError] = null;
removeAllListeners(socket);
client[kSocket] = null;
client[kHTTPContext] = null;
client[kQueue][client[kRunningIdx]++] = null;
client.emit("disconnect", client[kUrl], [client], new InformationalError("upgrade"));
try {
request.onUpgrade(statusCode, headers, socket);
} catch (err2) {
util5.destroy(socket, err2);
}
client[kResume]();
}
onHeadersComplete(statusCode, upgrade, shouldKeepAlive) {
const { client, socket, headers, statusText } = this;
if (socket.destroyed) {
return -1;
}
const request = client[kQueue][client[kRunningIdx]];
if (!request) {
return -1;
}
assert(!this.upgrade);
assert(this.statusCode < 200);
if (statusCode === 100) {
util5.destroy(socket, new SocketError("bad response", util5.getSocketInfo(socket)));
return -1;
}
if (upgrade && !request.upgrade) {
util5.destroy(socket, new SocketError("bad upgrade", util5.getSocketInfo(socket)));
return -1;
}
assert(this.timeoutType === TIMEOUT_HEADERS);
this.statusCode = statusCode;
this.shouldKeepAlive = shouldKeepAlive || // Override llhttp value which does not allow keepAlive for HEAD.
request.method === "HEAD" && !socket[kReset] && this.connection.toLowerCase() === "keep-alive";
if (this.statusCode >= 200) {
const bodyTimeout = request.bodyTimeout != null ? request.bodyTimeout : client[kBodyTimeout];
this.setTimeout(bodyTimeout, TIMEOUT_BODY);
} else if (this.timeout) {
if (this.timeout.refresh) {
this.timeout.refresh();
}
}
if (request.method === "CONNECT") {
assert(client[kRunning] === 1);
this.upgrade = true;
return 2;
}
if (upgrade) {
assert(client[kRunning] === 1);
this.upgrade = true;
return 2;
}
assert((this.headers.length & 1) === 0);
this.headers = [];
this.headersSize = 0;
if (this.shouldKeepAlive && client[kPipelining]) {
const keepAliveTimeout = this.keepAlive ? util5.parseKeepAliveTimeout(this.keepAlive) : null;
if (keepAliveTimeout != null) {
const timeout = Math.min(
keepAliveTimeout - client[kKeepAliveTimeoutThreshold],
client[kKeepAliveMaxTimeout]
);
if (timeout <= 0) {
socket[kReset] = true;
} else {
client[kKeepAliveTimeoutValue] = timeout;
}
} else {
client[kKeepAliveTimeoutValue] = client[kKeepAliveDefaultTimeout];
}
} else {
socket[kReset] = true;
}
const pause = request.onHeaders(statusCode, headers, this.resume, statusText) === false;
if (request.aborted) {
return -1;
}
if (request.method === "HEAD") {
return 1;
}
if (statusCode < 200) {
return 1;
}
if (socket[kBlocking]) {
socket[kBlocking] = false;
client[kResume]();
}
return pause ? constants.ERROR.PAUSED : 0;
}
onBody(buf) {
const { client, socket, statusCode, maxResponseSize } = this;
if (socket.destroyed) {
return -1;
}
const request = client[kQueue][client[kRunningIdx]];
assert(request);
assert(this.timeoutType === TIMEOUT_BODY);
if (this.timeout) {
if (this.timeout.refresh) {
this.timeout.refresh();
}
}
assert(statusCode >= 200);
if (maxResponseSize > -1 && this.bytesRead + buf.length > maxResponseSize) {
util5.destroy(socket, new ResponseExceededMaxSizeError());
return -1;
}
this.bytesRead += buf.length;
if (request.onData(buf) === false) {
return constants.ERROR.PAUSED;
}
}
onMessageComplete() {
const { client, socket, statusCode, upgrade, headers, contentLength, bytesRead, shouldKeepAlive } = this;
if (socket.destroyed && (!statusCode || shouldKeepAlive)) {
return -1;
}
if (upgrade) {
return;
}
assert(statusCode >= 100);
assert((this.headers.length & 1) === 0);
const request = client[kQueue][client[kRunningIdx]];
assert(request);
this.statusCode = null;
this.statusText = "";
this.bytesRead = 0;
this.contentLength = "";
this.keepAlive = "";
this.connection = "";
this.headers = [];
this.headersSize = 0;
if (statusCode < 200) {
return;
}
if (request.method !== "HEAD" && contentLength && bytesRead !== parseInt(contentLength, 10)) {
util5.destroy(socket, new ResponseContentLengthMismatchError());
return -1;
}
request.onComplete(headers);
client[kQueue][client[kRunningIdx]++] = null;
if (socket[kWriting]) {
assert(client[kRunning] === 0);
util5.destroy(socket, new InformationalError("reset"));
return constants.ERROR.PAUSED;
} else if (!shouldKeepAlive) {
util5.destroy(socket, new InformationalError("reset"));
return constants.ERROR.PAUSED;
} else if (socket[kReset] && client[kRunning] === 0) {
util5.destroy(socket, new InformationalError("reset"));
return constants.ERROR.PAUSED;
} else if (client[kPipelining] == null || client[kPipelining] === 1) {
setImmediate(() => client[kResume]());
} else {
client[kResume]();
}
}
};
function onParserTimeout(parser) {
const { socket, timeoutType, client, paused } = parser.deref();
if (timeoutType === TIMEOUT_HEADERS) {
if (!socket[kWriting] || socket.writableNeedDrain || client[kRunning] > 1) {
assert(!paused, "cannot be paused while waiting for headers");
util5.destroy(socket, new HeadersTimeoutError());
}
} else if (timeoutType === TIMEOUT_BODY) {
if (!paused) {
util5.destroy(socket, new BodyTimeoutError());
}
} else if (timeoutType === TIMEOUT_KEEP_ALIVE) {
assert(client[kRunning] === 0 && client[kKeepAliveTimeoutValue]);
util5.destroy(socket, new InformationalError("socket idle timeout"));
}
}
async function connectH1(client, socket) {
client[kSocket] = socket;
if (!llhttpInstance) {
llhttpInstance = await llhttpPromise;
llhttpPromise = null;
}
socket[kNoRef] = false;
socket[kWriting] = false;
socket[kReset] = false;
socket[kBlocking] = false;
socket[kParser] = new Parser3(client, socket, llhttpInstance);
addListener(socket, "error", function(err2) {
assert(err2.code !== "ERR_TLS_CERT_ALTNAME_INVALID");
const parser = this[kParser];
if (err2.code === "ECONNRESET" && parser.statusCode && !parser.shouldKeepAlive) {
parser.onMessageComplete();
return;
}
this[kError] = err2;
this[kClient][kOnError](err2);
});
addListener(socket, "readable", function() {
const parser = this[kParser];
if (parser) {
parser.readMore();
}
});
addListener(socket, "end", function() {
const parser = this[kParser];
if (parser.statusCode && !parser.shouldKeepAlive) {
parser.onMessageComplete();
return;
}
util5.destroy(this, new SocketError("other side closed", util5.getSocketInfo(this)));
});
addListener(socket, "close", function() {
const client2 = this[kClient];
const parser = this[kParser];
if (parser) {
if (!this[kError] && parser.statusCode && !parser.shouldKeepAlive) {
parser.onMessageComplete();
}
this[kParser].destroy();
this[kParser] = null;
}
const err2 = this[kError] || new SocketError("closed", util5.getSocketInfo(this));
client2[kSocket] = null;
client2[kHTTPContext] = null;
if (client2.destroyed) {
assert(client2[kPending] === 0);
const requests = client2[kQueue].splice(client2[kRunningIdx]);
for (let i = 0; i < requests.length; i++) {
const request = requests[i];
util5.errorRequest(client2, request, err2);
}
} else if (client2[kRunning] > 0 && err2.code !== "UND_ERR_INFO") {
const request = client2[kQueue][client2[kRunningIdx]];
client2[kQueue][client2[kRunningIdx]++] = null;
util5.errorRequest(client2, request, err2);
}
client2[kPendingIdx] = client2[kRunningIdx];
assert(client2[kRunning] === 0);
client2.emit("disconnect", client2[kUrl], [client2], err2);
client2[kResume]();
});
let closed = false;
socket.on("close", () => {
closed = true;
});
return {
version: "h1",
defaultPipelining: 1,
write(...args) {
return writeH1(client, ...args);
},
resume() {
resumeH1(client);
},
destroy(err2, callback) {
if (closed) {
queueMicrotask(callback);
} else {
socket.destroy(err2).on("close", callback);
}
},
get destroyed() {
return socket.destroyed;
},
busy(request) {
if (socket[kWriting] || socket[kReset] || socket[kBlocking]) {
return true;
}
if (request) {
if (client[kRunning] > 0 && !request.idempotent) {
return true;
}
if (client[kRunning] > 0 && (request.upgrade || request.method === "CONNECT")) {
return true;
}
if (client[kRunning] > 0 && util5.bodyLength(request.body) !== 0 && (util5.isStream(request.body) || util5.isAsyncIterable(request.body) || util5.isFormDataLike(request.body))) {
return true;
}
}
return false;
}
};
}
function resumeH1(client) {
const socket = client[kSocket];
if (socket && !socket.destroyed) {
if (client[kSize] === 0) {
if (!socket[kNoRef] && socket.unref) {
socket.unref();
socket[kNoRef] = true;
}
} else if (socket[kNoRef] && socket.ref) {
socket.ref();
socket[kNoRef] = false;
}
if (client[kSize] === 0) {
if (socket[kParser].timeoutType !== TIMEOUT_KEEP_ALIVE) {
socket[kParser].setTimeout(client[kKeepAliveTimeoutValue], TIMEOUT_KEEP_ALIVE);
}
} else if (client[kRunning] > 0 && socket[kParser].statusCode < 200) {
if (socket[kParser].timeoutType !== TIMEOUT_HEADERS) {
const request = client[kQueue][client[kRunningIdx]];
const headersTimeout = request.headersTimeout != null ? request.headersTimeout : client[kHeadersTimeout];
socket[kParser].setTimeout(headersTimeout, TIMEOUT_HEADERS);
}
}
}
}
function shouldSendContentLength(method) {
return method !== "GET" && method !== "HEAD" && method !== "OPTIONS" && method !== "TRACE" && method !== "CONNECT";
}
function writeH1(client, request) {
const { method, path, host, upgrade, blocking, reset } = request;
let { body, headers, contentLength } = request;
const expectsPayload = method === "PUT" || method === "POST" || method === "PATCH" || method === "QUERY" || method === "PROPFIND" || method === "PROPPATCH";
if (util5.isFormDataLike(body)) {
if (!extractBody) {
extractBody = require_body().extractBody;
}
const [bodyStream, contentType] = extractBody(body);
if (request.contentType == null) {
headers.push("content-type", contentType);
}
body = bodyStream.stream;
contentLength = bodyStream.length;
} else if (util5.isBlobLike(body) && request.contentType == null && body.type) {
headers.push("content-type", body.type);
}
if (body && typeof body.read === "function") {
body.read(0);
}
const bodyLength = util5.bodyLength(body);
contentLength = bodyLength ?? contentLength;
if (contentLength === null) {
contentLength = request.contentLength;
}
if (contentLength === 0 && !expectsPayload) {
contentLength = null;
}
if (shouldSendContentLength(method) && contentLength > 0 && request.contentLength !== null && request.contentLength !== contentLength) {
if (client[kStrictContentLength]) {
util5.errorRequest(client, request, new RequestContentLengthMismatchError());
return false;
}
process.emitWarning(new RequestContentLengthMismatchError());
}
const socket = client[kSocket];
const abort = (err2) => {
if (request.aborted || request.completed) {
return;
}
util5.errorRequest(client, request, err2 || new RequestAbortedError());
util5.destroy(body);
util5.destroy(socket, new InformationalError("aborted"));
};
try {
request.onConnect(abort);
} catch (err2) {
util5.errorRequest(client, request, err2);
}
if (request.aborted) {
return false;
}
if (method === "HEAD") {
socket[kReset] = true;
}
if (upgrade || method === "CONNECT") {
socket[kReset] = true;
}
if (reset != null) {
socket[kReset] = reset;
}
if (client[kMaxRequests] && socket[kCounter]++ >= client[kMaxRequests]) {
socket[kReset] = true;
}
if (blocking) {
socket[kBlocking] = true;
}
let header = `${method} ${path} HTTP/1.1\r
`;
if (typeof host === "string") {
header += `host: ${host}\r
`;
} else {
header += client[kHostHeader];
}
if (upgrade) {
header += `connection: upgrade\r
upgrade: ${upgrade}\r
`;
} else if (client[kPipelining] && !socket[kReset]) {
header += "connection: keep-alive\r\n";
} else {
header += "connection: close\r\n";
}
if (Array.isArray(headers)) {
for (let n = 0; n < headers.length; n += 2) {
const key = headers[n + 0];
const val2 = headers[n + 1];
if (Array.isArray(val2)) {
for (let i = 0; i < val2.length; i++) {
header += `${key}: ${val2[i]}\r
`;
}
} else {
header += `${key}: ${val2}\r
`;
}
}
}
if (channels.sendHeaders.hasSubscribers) {
channels.sendHeaders.publish({ request, headers: header, socket });
}
if (!body || bodyLength === 0) {
writeBuffer(abort, null, client, request, socket, contentLength, header, expectsPayload);
} else if (util5.isBuffer(body)) {
writeBuffer(abort, body, client, request, socket, contentLength, header, expectsPayload);
} else if (util5.isBlobLike(body)) {
if (typeof body.stream === "function") {
writeIterable(abort, body.stream(), client, request, socket, contentLength, header, expectsPayload);
} else {
writeBlob(abort, body, client, request, socket, contentLength, header, expectsPayload);
}
} else if (util5.isStream(body)) {
writeStream(abort, body, client, request, socket, contentLength, header, expectsPayload);
} else if (util5.isIterable(body)) {
writeIterable(abort, body, client, request, socket, contentLength, header, expectsPayload);
} else {
assert(false);
}
return true;
}
function writeStream(abort, body, client, request, socket, contentLength, header, expectsPayload) {
assert(contentLength !== 0 || client[kRunning] === 0, "stream body cannot be pipelined");
let finished = false;
const writer = new AsyncWriter({ abort, socket, request, contentLength, client, expectsPayload, header });
const onData = function(chunk) {
if (finished) {
return;
}
try {
if (!writer.write(chunk) && this.pause) {
this.pause();
}
} catch (err2) {
util5.destroy(this, err2);
}
};
const onDrain = function() {
if (finished) {
return;
}
if (body.resume) {
body.resume();
}
};
const onClose = function() {
queueMicrotask(() => {
body.removeListener("error", onFinished);
});
if (!finished) {
const err2 = new RequestAbortedError();
queueMicrotask(() => onFinished(err2));
}
};
const onFinished = function(err2) {
if (finished) {
return;
}
finished = true;
assert(socket.destroyed || socket[kWriting] && client[kRunning] <= 1);
socket.off("drain", onDrain).off("error", onFinished);
body.removeListener("data", onData).removeListener("end", onFinished).removeListener("close", onClose);
if (!err2) {
try {
writer.end();
} catch (er) {
err2 = er;
}
}
writer.destroy(err2);
if (err2 && (err2.code !== "UND_ERR_INFO" || err2.message !== "reset")) {
util5.destroy(body, err2);
} else {
util5.destroy(body);
}
};
body.on("data", onData).on("end", onFinished).on("error", onFinished).on("close", onClose);
if (body.resume) {
body.resume();
}
socket.on("drain", onDrain).on("error", onFinished);
if (body.errorEmitted ?? body.errored) {
setImmediate(() => onFinished(body.errored));
} else if (body.endEmitted ?? body.readableEnded) {
setImmediate(() => onFinished(null));
}
if (body.closeEmitted ?? body.closed) {
setImmediate(onClose);
}
}
function writeBuffer(abort, body, client, request, socket, contentLength, header, expectsPayload) {
try {
if (!body) {
if (contentLength === 0) {
socket.write(`${header}content-length: 0\r
\r
`, "latin1");
} else {
assert(contentLength === null, "no body must not have content length");
socket.write(`${header}\r
`, "latin1");
}
} else if (util5.isBuffer(body)) {
assert(contentLength === body.byteLength, "buffer body must have content length");
socket.cork();
socket.write(`${header}content-length: ${contentLength}\r
\r
`, "latin1");
socket.write(body);
socket.uncork();
request.onBodySent(body);
if (!expectsPayload && request.reset !== false) {
socket[kReset] = true;
}
}
request.onRequestSent();
client[kResume]();
} catch (err2) {
abort(err2);
}
}
async function writeBlob(abort, body, client, request, socket, contentLength, header, expectsPayload) {
assert(contentLength === body.size, "blob body must have content length");
try {
if (contentLength != null && contentLength !== body.size) {
throw new RequestContentLengthMismatchError();
}
const buffer = Buffer.from(await body.arrayBuffer());
socket.cork();
socket.write(`${header}content-length: ${contentLength}\r
\r
`, "latin1");
socket.write(buffer);
socket.uncork();
request.onBodySent(buffer);
request.onRequestSent();
if (!expectsPayload && request.reset !== false) {
socket[kReset] = true;
}
client[kResume]();
} catch (err2) {
abort(err2);
}
}
async function writeIterable(abort, body, client, request, socket, contentLength, header, expectsPayload) {
assert(contentLength !== 0 || client[kRunning] === 0, "iterator body cannot be pipelined");
let callback = null;
function onDrain() {
if (callback) {
const cb = callback;
callback = null;
cb();
}
}
const waitForDrain = () => new Promise((resolve, reject) => {
assert(callback === null);
if (socket[kError]) {
reject(socket[kError]);
} else {
callback = resolve;
}
});
socket.on("close", onDrain).on("drain", onDrain);
const writer = new AsyncWriter({ abort, socket, request, contentLength, client, expectsPayload, header });
try {
for await (const chunk of body) {
if (socket[kError]) {
throw socket[kError];
}
if (!writer.write(chunk)) {
await waitForDrain();
}
}
writer.end();
} catch (err2) {
writer.destroy(err2);
} finally {
socket.off("close", onDrain).off("drain", onDrain);
}
}
var AsyncWriter = class {
constructor({ abort, socket, request, contentLength, client, expectsPayload, header }) {
this.socket = socket;
this.request = request;
this.contentLength = contentLength;
this.client = client;
this.bytesWritten = 0;
this.expectsPayload = expectsPayload;
this.header = header;
this.abort = abort;
socket[kWriting] = true;
}
write(chunk) {
const { socket, request, contentLength, client, bytesWritten, expectsPayload, header } = this;
if (socket[kError]) {
throw socket[kError];
}
if (socket.destroyed) {
return false;
}
const len = Buffer.byteLength(chunk);
if (!len) {
return true;
}
if (contentLength !== null && bytesWritten + len > contentLength) {
if (client[kStrictContentLength]) {
throw new RequestContentLengthMismatchError();
}
process.emitWarning(new RequestContentLengthMismatchError());
}
socket.cork();
if (bytesWritten === 0) {
if (!expectsPayload && request.reset !== false) {
socket[kReset] = true;
}
if (contentLength === null) {
socket.write(`${header}transfer-encoding: chunked\r
`, "latin1");
} else {
socket.write(`${header}content-length: ${contentLength}\r
\r
`, "latin1");
}
}
if (contentLength === null) {
socket.write(`\r
${len.toString(16)}\r
`, "latin1");
}
this.bytesWritten += len;
const ret = socket.write(chunk);
socket.uncork();
request.onBodySent(chunk);
if (!ret) {
if (socket[kParser].timeout && socket[kParser].timeoutType === TIMEOUT_HEADERS) {
if (socket[kParser].timeout.refresh) {
socket[kParser].timeout.refresh();
}
}
}
return ret;
}
end() {
const { socket, contentLength, client, bytesWritten, expectsPayload, header, request } = this;
request.onRequestSent();
socket[kWriting] = false;
if (socket[kError]) {
throw socket[kError];
}
if (socket.destroyed) {
return;
}
if (bytesWritten === 0) {
if (expectsPayload) {
socket.write(`${header}content-length: 0\r
\r
`, "latin1");
} else {
socket.write(`${header}\r
`, "latin1");
}
} else if (contentLength === null) {
socket.write("\r\n0\r\n\r\n", "latin1");
}
if (contentLength !== null && bytesWritten !== contentLength) {
if (client[kStrictContentLength]) {
throw new RequestContentLengthMismatchError();
} else {
process.emitWarning(new RequestContentLengthMismatchError());
}
}
if (socket[kParser].timeout && socket[kParser].timeoutType === TIMEOUT_HEADERS) {
if (socket[kParser].timeout.refresh) {
socket[kParser].timeout.refresh();
}
}
client[kResume]();
}
destroy(err2) {
const { socket, client, abort } = this;
socket[kWriting] = false;
if (err2) {
assert(client[kRunning] <= 1, "pipeline should only contain this request");
abort(err2);
}
}
};
module2.exports = connectH1;
}
});
// node_modules/undici/lib/dispatcher/client-h2.js
var require_client_h2 = __commonJS({
"node_modules/undici/lib/dispatcher/client-h2.js"(exports2, module2) {
"use strict";
var assert = require("node:assert");
var { pipeline } = require("node:stream");
var util5 = require_util2();
var {
RequestContentLengthMismatchError,
RequestAbortedError,
SocketError,
InformationalError
} = require_errors();
var {
kUrl,
kReset,
kClient,
kRunning,
kPending,
kQueue,
kPendingIdx,
kRunningIdx,
kError,
kSocket,
kStrictContentLength,
kOnError,
kMaxConcurrentStreams,
kHTTP2Session,
kResume,
kSize,
kHTTPContext
} = require_symbols();
var kOpenStreams = Symbol("open streams");
var extractBody;
var h2ExperimentalWarned = false;
var http2;
try {
http2 = require("node:http2");
} catch {
http2 = { constants: {} };
}
var {
constants: {
HTTP2_HEADER_AUTHORITY,
HTTP2_HEADER_METHOD,
HTTP2_HEADER_PATH,
HTTP2_HEADER_SCHEME,
HTTP2_HEADER_CONTENT_LENGTH,
HTTP2_HEADER_EXPECT,
HTTP2_HEADER_STATUS
}
} = http2;
function parseH2Headers(headers) {
const result = [];
for (const [name, value] of Object.entries(headers)) {
if (Array.isArray(value)) {
for (const subvalue of value) {
result.push(Buffer.from(name), Buffer.from(subvalue));
}
} else {
result.push(Buffer.from(name), Buffer.from(value));
}
}
return result;
}
async function connectH2(client, socket) {
client[kSocket] = socket;
if (!h2ExperimentalWarned) {
h2ExperimentalWarned = true;
process.emitWarning("H2 support is experimental, expect them to change at any time.", {
code: "UNDICI-H2"
});
}
const session = http2.connect(client[kUrl], {
createConnection: () => socket,
peerMaxConcurrentStreams: client[kMaxConcurrentStreams]
});
session[kOpenStreams] = 0;
session[kClient] = client;
session[kSocket] = socket;
util5.addListener(session, "error", onHttp2SessionError);
util5.addListener(session, "frameError", onHttp2FrameError);
util5.addListener(session, "end", onHttp2SessionEnd);
util5.addListener(session, "goaway", onHTTP2GoAway);
util5.addListener(session, "close", function() {
const { [kClient]: client2 } = this;
const { [kSocket]: socket2 } = client2;
const err2 = this[kSocket][kError] || this[kError] || new SocketError("closed", util5.getSocketInfo(socket2));
client2[kHTTP2Session] = null;
if (client2.destroyed) {
assert(client2[kPending] === 0);
const requests = client2[kQueue].splice(client2[kRunningIdx]);
for (let i = 0; i < requests.length; i++) {
const request = requests[i];
util5.errorRequest(client2, request, err2);
}
}
});
session.unref();
client[kHTTP2Session] = session;
socket[kHTTP2Session] = session;
util5.addListener(socket, "error", function(err2) {
assert(err2.code !== "ERR_TLS_CERT_ALTNAME_INVALID");
this[kError] = err2;
this[kClient][kOnError](err2);
});
util5.addListener(socket, "end", function() {
util5.destroy(this, new SocketError("other side closed", util5.getSocketInfo(this)));
});
util5.addListener(socket, "close", function() {
const err2 = this[kError] || new SocketError("closed", util5.getSocketInfo(this));
client[kSocket] = null;
if (this[kHTTP2Session] != null) {
this[kHTTP2Session].destroy(err2);
}
client[kPendingIdx] = client[kRunningIdx];
assert(client[kRunning] === 0);
client.emit("disconnect", client[kUrl], [client], err2);
client[kResume]();
});
let closed = false;
socket.on("close", () => {
closed = true;
});
return {
version: "h2",
defaultPipelining: Infinity,
write(...args) {
return writeH2(client, ...args);
},
resume() {
resumeH2(client);
},
destroy(err2, callback) {
if (closed) {
queueMicrotask(callback);
} else {
socket.destroy(err2).on("close", callback);
}
},
get destroyed() {
return socket.destroyed;
},
busy() {
return false;
}
};
}
function resumeH2(client) {
const socket = client[kSocket];
if (socket?.destroyed === false) {
if (client[kSize] === 0 && client[kMaxConcurrentStreams] === 0) {
socket.unref();
client[kHTTP2Session].unref();
} else {
socket.ref();
client[kHTTP2Session].ref();
}
}
}
function onHttp2SessionError(err2) {
assert(err2.code !== "ERR_TLS_CERT_ALTNAME_INVALID");
this[kSocket][kError] = err2;
this[kClient][kOnError](err2);
}
function onHttp2FrameError(type, code, id) {
if (id === 0) {
const err2 = new InformationalError(`HTTP/2: "frameError" received - type ${type}, code ${code}`);
this[kSocket][kError] = err2;
this[kClient][kOnError](err2);
}
}
function onHttp2SessionEnd() {
const err2 = new SocketError("other side closed", util5.getSocketInfo(this[kSocket]));
this.destroy(err2);
util5.destroy(this[kSocket], err2);
}
function onHTTP2GoAway(code) {
const err2 = this[kError] || new SocketError(`HTTP/2: "GOAWAY" frame received with code ${code}`, util5.getSocketInfo(this));
const client = this[kClient];
client[kSocket] = null;
client[kHTTPContext] = null;
if (this[kHTTP2Session] != null) {
this[kHTTP2Session].destroy(err2);
this[kHTTP2Session] = null;
}
util5.destroy(this[kSocket], err2);
if (client[kRunningIdx] < client[kQueue].length) {
const request = client[kQueue][client[kRunningIdx]];
client[kQueue][client[kRunningIdx]++] = null;
util5.errorRequest(client, request, err2);
client[kPendingIdx] = client[kRunningIdx];
}
assert(client[kRunning] === 0);
client.emit("disconnect", client[kUrl], [client], err2);
client[kResume]();
}
function shouldSendContentLength(method) {
return method !== "GET" && method !== "HEAD" && method !== "OPTIONS" && method !== "TRACE" && method !== "CONNECT";
}
function writeH2(client, request) {
const session = client[kHTTP2Session];
const { method, path, host, upgrade, expectContinue, signal, headers: reqHeaders } = request;
let { body } = request;
if (upgrade) {
util5.errorRequest(client, request, new Error("Upgrade not supported for H2"));
return false;
}
const headers = {};
for (let n = 0; n < reqHeaders.length; n += 2) {
const key = reqHeaders[n + 0];
const val2 = reqHeaders[n + 1];
if (Array.isArray(val2)) {
for (let i = 0; i < val2.length; i++) {
if (headers[key]) {
headers[key] += `,${val2[i]}`;
} else {
headers[key] = val2[i];
}
}
} else {
headers[key] = val2;
}
}
let stream5;
const { hostname, port } = client[kUrl];
headers[HTTP2_HEADER_AUTHORITY] = host || `${hostname}${port ? `:${port}` : ""}`;
headers[HTTP2_HEADER_METHOD] = method;
const abort = (err2) => {
if (request.aborted || request.completed) {
return;
}
err2 = err2 || new RequestAbortedError();
util5.errorRequest(client, request, err2);
if (stream5 != null) {
util5.destroy(stream5, err2);
}
util5.destroy(body, err2);
client[kQueue][client[kRunningIdx]++] = null;
client[kResume]();
};
try {
request.onConnect(abort);
} catch (err2) {
util5.errorRequest(client, request, err2);
}
if (request.aborted) {
return false;
}
if (method === "CONNECT") {
session.ref();
stream5 = session.request(headers, { endStream: false, signal });
if (stream5.id && !stream5.pending) {
request.onUpgrade(null, null, stream5);
++session[kOpenStreams];
client[kQueue][client[kRunningIdx]++] = null;
} else {
stream5.once("ready", () => {
request.onUpgrade(null, null, stream5);
++session[kOpenStreams];
client[kQueue][client[kRunningIdx]++] = null;
});
}
stream5.once("close", () => {
session[kOpenStreams] -= 1;
if (session[kOpenStreams] === 0) session.unref();
});
return true;
}
headers[HTTP2_HEADER_PATH] = path;
headers[HTTP2_HEADER_SCHEME] = "https";
const expectsPayload = method === "PUT" || method === "POST" || method === "PATCH";
if (body && typeof body.read === "function") {
body.read(0);
}
let contentLength = util5.bodyLength(body);
if (util5.isFormDataLike(body)) {
extractBody ??= require_body().extractBody;
const [bodyStream, contentType] = extractBody(body);
headers["content-type"] = contentType;
body = bodyStream.stream;
contentLength = bodyStream.length;
}
if (contentLength == null) {
contentLength = request.contentLength;
}
if (contentLength === 0 || !expectsPayload) {
contentLength = null;
}
if (shouldSendContentLength(method) && contentLength > 0 && request.contentLength != null && request.contentLength !== contentLength) {
if (client[kStrictContentLength]) {
util5.errorRequest(client, request, new RequestContentLengthMismatchError());
return false;
}
process.emitWarning(new RequestContentLengthMismatchError());
}
if (contentLength != null) {
assert(body, "no body must not have content length");
headers[HTTP2_HEADER_CONTENT_LENGTH] = `${contentLength}`;
}
session.ref();
const shouldEndStream = method === "GET" || method === "HEAD" || body === null;
if (expectContinue) {
headers[HTTP2_HEADER_EXPECT] = "100-continue";
stream5 = session.request(headers, { endStream: shouldEndStream, signal });
stream5.once("continue", writeBodyH2);
} else {
stream5 = session.request(headers, {
endStream: shouldEndStream,
signal
});
writeBodyH2();
}
++session[kOpenStreams];
stream5.once("response", (headers2) => {
const { [HTTP2_HEADER_STATUS]: statusCode, ...realHeaders } = headers2;
request.onResponseStarted();
if (request.aborted) {
const err2 = new RequestAbortedError();
util5.errorRequest(client, request, err2);
util5.destroy(stream5, err2);
return;
}
if (request.onHeaders(Number(statusCode), parseH2Headers(realHeaders), stream5.resume.bind(stream5), "") === false) {
stream5.pause();
}
stream5.on("data", (chunk) => {
if (request.onData(chunk) === false) {
stream5.pause();
}
});
});
stream5.once("end", () => {
if (stream5.state?.state == null || stream5.state.state < 6) {
request.onComplete([]);
}
if (session[kOpenStreams] === 0) {
session.unref();
}
abort(new InformationalError("HTTP/2: stream half-closed (remote)"));
client[kQueue][client[kRunningIdx]++] = null;
client[kPendingIdx] = client[kRunningIdx];
client[kResume]();
});
stream5.once("close", () => {
session[kOpenStreams] -= 1;
if (session[kOpenStreams] === 0) {
session.unref();
}
});
stream5.once("error", function(err2) {
abort(err2);
});
stream5.once("frameError", (type, code) => {
abort(new InformationalError(`HTTP/2: "frameError" received - type ${type}, code ${code}`));
});
return true;
function writeBodyH2() {
if (!body || contentLength === 0) {
writeBuffer(
abort,
stream5,
null,
client,
request,
client[kSocket],
contentLength,
expectsPayload
);
} else if (util5.isBuffer(body)) {
writeBuffer(
abort,
stream5,
body,
client,
request,
client[kSocket],
contentLength,
expectsPayload
);
} else if (util5.isBlobLike(body)) {
if (typeof body.stream === "function") {
writeIterable(
abort,
stream5,
body.stream(),
client,
request,
client[kSocket],
contentLength,
expectsPayload
);
} else {
writeBlob(
abort,
stream5,
body,
client,
request,
client[kSocket],
contentLength,
expectsPayload
);
}
} else if (util5.isStream(body)) {
writeStream(
abort,
client[kSocket],
expectsPayload,
stream5,
body,
client,
request,
contentLength
);
} else if (util5.isIterable(body)) {
writeIterable(
abort,
stream5,
body,
client,
request,
client[kSocket],
contentLength,
expectsPayload
);
} else {
assert(false);
}
}
}
function writeBuffer(abort, h2stream, body, client, request, socket, contentLength, expectsPayload) {
try {
if (body != null && util5.isBuffer(body)) {
assert(contentLength === body.byteLength, "buffer body must have content length");
h2stream.cork();
h2stream.write(body);
h2stream.uncork();
h2stream.end();
request.onBodySent(body);
}
if (!expectsPayload) {
socket[kReset] = true;
}
request.onRequestSent();
client[kResume]();
} catch (error) {
abort(error);
}
}
function writeStream(abort, socket, expectsPayload, h2stream, body, client, request, contentLength) {
assert(contentLength !== 0 || client[kRunning] === 0, "stream body cannot be pipelined");
const pipe = pipeline(
body,
h2stream,
(err2) => {
if (err2) {
util5.destroy(pipe, err2);
abort(err2);
} else {
util5.removeAllListeners(pipe);
request.onRequestSent();
if (!expectsPayload) {
socket[kReset] = true;
}
client[kResume]();
}
}
);
util5.addListener(pipe, "data", onPipeData);
function onPipeData(chunk) {
request.onBodySent(chunk);
}
}
async function writeBlob(abort, h2stream, body, client, request, socket, contentLength, expectsPayload) {
assert(contentLength === body.size, "blob body must have content length");
try {
if (contentLength != null && contentLength !== body.size) {
throw new RequestContentLengthMismatchError();
}
const buffer = Buffer.from(await body.arrayBuffer());
h2stream.cork();
h2stream.write(buffer);
h2stream.uncork();
h2stream.end();
request.onBodySent(buffer);
request.onRequestSent();
if (!expectsPayload) {
socket[kReset] = true;
}
client[kResume]();
} catch (err2) {
abort(err2);
}
}
async function writeIterable(abort, h2stream, body, client, request, socket, contentLength, expectsPayload) {
assert(contentLength !== 0 || client[kRunning] === 0, "iterator body cannot be pipelined");
let callback = null;
function onDrain() {
if (callback) {
const cb = callback;
callback = null;
cb();
}
}
const waitForDrain = () => new Promise((resolve, reject) => {
assert(callback === null);
if (socket[kError]) {
reject(socket[kError]);
} else {
callback = resolve;
}
});
h2stream.on("close", onDrain).on("drain", onDrain);
try {
for await (const chunk of body) {
if (socket[kError]) {
throw socket[kError];
}
const res = h2stream.write(chunk);
request.onBodySent(chunk);
if (!res) {
await waitForDrain();
}
}
h2stream.end();
request.onRequestSent();
if (!expectsPayload) {
socket[kReset] = true;
}
client[kResume]();
} catch (err2) {
abort(err2);
} finally {
h2stream.off("close", onDrain).off("drain", onDrain);
}
}
module2.exports = connectH2;
}
});
// node_modules/undici/lib/handler/redirect-handler.js
var require_redirect_handler = __commonJS({
"node_modules/undici/lib/handler/redirect-handler.js"(exports2, module2) {
"use strict";
var util5 = require_util2();
var { kBodyUsed } = require_symbols();
var assert = require("node:assert");
var { InvalidArgumentError } = require_errors();
var EE = require("node:events");
var redirectableStatusCodes = [300, 301, 302, 303, 307, 308];
var kBody = Symbol("body");
var BodyAsyncIterable = class {
constructor(body) {
this[kBody] = body;
this[kBodyUsed] = false;
}
async *[Symbol.asyncIterator]() {
assert(!this[kBodyUsed], "disturbed");
this[kBodyUsed] = true;
yield* this[kBody];
}
};
var RedirectHandler = class {
constructor(dispatch, maxRedirections, opts, handler) {
if (maxRedirections != null && (!Number.isInteger(maxRedirections) || maxRedirections < 0)) {
throw new InvalidArgumentError("maxRedirections must be a positive number");
}
util5.validateHandler(handler, opts.method, opts.upgrade);
this.dispatch = dispatch;
this.location = null;
this.abort = null;
this.opts = { ...opts, maxRedirections: 0 };
this.maxRedirections = maxRedirections;
this.handler = handler;
this.history = [];
this.redirectionLimitReached = false;
if (util5.isStream(this.opts.body)) {
if (util5.bodyLength(this.opts.body) === 0) {
this.opts.body.on("data", function() {
assert(false);
});
}
if (typeof this.opts.body.readableDidRead !== "boolean") {
this.opts.body[kBodyUsed] = false;
EE.prototype.on.call(this.opts.body, "data", function() {
this[kBodyUsed] = true;
});
}
} else if (this.opts.body && typeof this.opts.body.pipeTo === "function") {
this.opts.body = new BodyAsyncIterable(this.opts.body);
} else if (this.opts.body && typeof this.opts.body !== "string" && !ArrayBuffer.isView(this.opts.body) && util5.isIterable(this.opts.body)) {
this.opts.body = new BodyAsyncIterable(this.opts.body);
}
}
onConnect(abort) {
this.abort = abort;
this.handler.onConnect(abort, { history: this.history });
}
onUpgrade(statusCode, headers, socket) {
this.handler.onUpgrade(statusCode, headers, socket);
}
onError(error) {
this.handler.onError(error);
}
onHeaders(statusCode, headers, resume, statusText) {
this.location = this.history.length >= this.maxRedirections || util5.isDisturbed(this.opts.body) ? null : parseLocation(statusCode, headers);
if (this.opts.throwOnMaxRedirect && this.history.length >= this.maxRedirections) {
if (this.request) {
this.request.abort(new Error("max redirects"));
}
this.redirectionLimitReached = true;
this.abort(new Error("max redirects"));
return;
}
if (this.opts.origin) {
this.history.push(new URL(this.opts.path, this.opts.origin));
}
if (!this.location) {
return this.handler.onHeaders(statusCode, headers, resume, statusText);
}
const { origin: origin2, pathname, search } = util5.parseURL(new URL(this.location, this.opts.origin && new URL(this.opts.path, this.opts.origin)));
const path = search ? `${pathname}${search}` : pathname;
this.opts.headers = cleanRequestHeaders(this.opts.headers, statusCode === 303, this.opts.origin !== origin2);
this.opts.path = path;
this.opts.origin = origin2;
this.opts.maxRedirections = 0;
this.opts.query = null;
if (statusCode === 303 && this.opts.method !== "HEAD") {
this.opts.method = "GET";
this.opts.body = null;
}
}
onData(chunk) {
if (this.location) {
} else {
return this.handler.onData(chunk);
}
}
onComplete(trailers) {
if (this.location) {
this.location = null;
this.abort = null;
this.dispatch(this.opts, this);
} else {
this.handler.onComplete(trailers);
}
}
onBodySent(chunk) {
if (this.handler.onBodySent) {
this.handler.onBodySent(chunk);
}
}
};
function parseLocation(statusCode, headers) {
if (redirectableStatusCodes.indexOf(statusCode) === -1) {
return null;
}
for (let i = 0; i < headers.length; i += 2) {
if (headers[i].length === 8 && util5.headerNameToString(headers[i]) === "location") {
return headers[i + 1];
}
}
}
function shouldRemoveHeader(header, removeContent, unknownOrigin) {
if (header.length === 4) {
return util5.headerNameToString(header) === "host";
}
if (removeContent && util5.headerNameToString(header).startsWith("content-")) {
return true;
}
if (unknownOrigin && (header.length === 13 || header.length === 6 || header.length === 19)) {
const name = util5.headerNameToString(header);
return name === "authorization" || name === "cookie" || name === "proxy-authorization";
}
return false;
}
function cleanRequestHeaders(headers, removeContent, unknownOrigin) {
const ret = [];
if (Array.isArray(headers)) {
for (let i = 0; i < headers.length; i += 2) {
if (!shouldRemoveHeader(headers[i], removeContent, unknownOrigin)) {
ret.push(headers[i], headers[i + 1]);
}
}
} else if (headers && typeof headers === "object") {
for (const key of Object.keys(headers)) {
if (!shouldRemoveHeader(key, removeContent, unknownOrigin)) {
ret.push(key, headers[key]);
}
}
} else {
assert(headers == null, "headers must be an object or an array");
}
return ret;
}
module2.exports = RedirectHandler;
}
});
// node_modules/undici/lib/interceptor/redirect-interceptor.js
var require_redirect_interceptor = __commonJS({
"node_modules/undici/lib/interceptor/redirect-interceptor.js"(exports2, module2) {
"use strict";
var RedirectHandler = require_redirect_handler();
function createRedirectInterceptor({ maxRedirections: defaultMaxRedirections }) {
return (dispatch) => {
return function Intercept(opts, handler) {
const { maxRedirections = defaultMaxRedirections } = opts;
if (!maxRedirections) {
return dispatch(opts, handler);
}
const redirectHandler = new RedirectHandler(dispatch, maxRedirections, opts, handler);
opts = { ...opts, maxRedirections: 0 };
return dispatch(opts, redirectHandler);
};
};
}
module2.exports = createRedirectInterceptor;
}
});
// node_modules/undici/lib/dispatcher/client.js
var require_client = __commonJS({
"node_modules/undici/lib/dispatcher/client.js"(exports2, module2) {
"use strict";
var assert = require("node:assert");
var net = require("node:net");
var http2 = require("node:http");
var util5 = require_util2();
var { channels } = require_diagnostics();
var Request2 = require_request();
var DispatcherBase = require_dispatcher_base();
var {
InvalidArgumentError,
InformationalError,
ClientDestroyedError
} = require_errors();
var buildConnector = require_connect();
var {
kUrl,
kServerName,
kClient,
kBusy,
kConnect,
kResuming,
kRunning,
kPending,
kSize,
kQueue,
kConnected,
kConnecting,
kNeedDrain,
kKeepAliveDefaultTimeout,
kHostHeader,
kPendingIdx,
kRunningIdx,
kError,
kPipelining,
kKeepAliveTimeoutValue,
kMaxHeadersSize,
kKeepAliveMaxTimeout,
kKeepAliveTimeoutThreshold,
kHeadersTimeout,
kBodyTimeout,
kStrictContentLength,
kConnector,
kMaxRedirections,
kMaxRequests,
kCounter,
kClose,
kDestroy,
kDispatch,
kInterceptors,
kLocalAddress,
kMaxResponseSize,
kOnError,
kHTTPContext,
kMaxConcurrentStreams,
kResume
} = require_symbols();
var connectH1 = require_client_h1();
var connectH2 = require_client_h2();
var deprecatedInterceptorWarned = false;
var kClosedResolve = Symbol("kClosedResolve");
var noop2 = () => {
};
function getPipelining(client) {
return client[kPipelining] ?? client[kHTTPContext]?.defaultPipelining ?? 1;
}
var Client = class extends DispatcherBase {
/**
*
* @param {string|URL} url
* @param {import('../../types/client.js').Client.Options} options
*/
constructor(url2, {
interceptors,
maxHeaderSize,
headersTimeout,
socketTimeout,
requestTimeout,
connectTimeout,
bodyTimeout,
idleTimeout,
keepAlive,
keepAliveTimeout,
maxKeepAliveTimeout,
keepAliveMaxTimeout,
keepAliveTimeoutThreshold,
socketPath,
pipelining,
tls,
strictContentLength,
maxCachedSessions,
maxRedirections,
connect: connect2,
maxRequestsPerClient,
localAddress,
maxResponseSize,
autoSelectFamily,
autoSelectFamilyAttemptTimeout,
// h2
maxConcurrentStreams,
allowH2
} = {}) {
super();
if (keepAlive !== void 0) {
throw new InvalidArgumentError("unsupported keepAlive, use pipelining=0 instead");
}
if (socketTimeout !== void 0) {
throw new InvalidArgumentError("unsupported socketTimeout, use headersTimeout & bodyTimeout instead");
}
if (requestTimeout !== void 0) {
throw new InvalidArgumentError("unsupported requestTimeout, use headersTimeout & bodyTimeout instead");
}
if (idleTimeout !== void 0) {
throw new InvalidArgumentError("unsupported idleTimeout, use keepAliveTimeout instead");
}
if (maxKeepAliveTimeout !== void 0) {
throw new InvalidArgumentError("unsupported maxKeepAliveTimeout, use keepAliveMaxTimeout instead");
}
if (maxHeaderSize != null && !Number.isFinite(maxHeaderSize)) {
throw new InvalidArgumentError("invalid maxHeaderSize");
}
if (socketPath != null && typeof socketPath !== "string") {
throw new InvalidArgumentError("invalid socketPath");
}
if (connectTimeout != null && (!Number.isFinite(connectTimeout) || connectTimeout < 0)) {
throw new InvalidArgumentError("invalid connectTimeout");
}
if (keepAliveTimeout != null && (!Number.isFinite(keepAliveTimeout) || keepAliveTimeout <= 0)) {
throw new InvalidArgumentError("invalid keepAliveTimeout");
}
if (keepAliveMaxTimeout != null && (!Number.isFinite(keepAliveMaxTimeout) || keepAliveMaxTimeout <= 0)) {
throw new InvalidArgumentError("invalid keepAliveMaxTimeout");
}
if (keepAliveTimeoutThreshold != null && !Number.isFinite(keepAliveTimeoutThreshold)) {
throw new InvalidArgumentError("invalid keepAliveTimeoutThreshold");
}
if (headersTimeout != null && (!Number.isInteger(headersTimeout) || headersTimeout < 0)) {
throw new InvalidArgumentError("headersTimeout must be a positive integer or zero");
}
if (bodyTimeout != null && (!Number.isInteger(bodyTimeout) || bodyTimeout < 0)) {
throw new InvalidArgumentError("bodyTimeout must be a positive integer or zero");
}
if (connect2 != null && typeof connect2 !== "function" && typeof connect2 !== "object") {
throw new InvalidArgumentError("connect must be a function or an object");
}
if (maxRedirections != null && (!Number.isInteger(maxRedirections) || maxRedirections < 0)) {
throw new InvalidArgumentError("maxRedirections must be a positive number");
}
if (maxRequestsPerClient != null && (!Number.isInteger(maxRequestsPerClient) || maxRequestsPerClient < 0)) {
throw new InvalidArgumentError("maxRequestsPerClient must be a positive number");
}
if (localAddress != null && (typeof localAddress !== "string" || net.isIP(localAddress) === 0)) {
throw new InvalidArgumentError("localAddress must be valid string IP address");
}
if (maxResponseSize != null && (!Number.isInteger(maxResponseSize) || maxResponseSize < -1)) {
throw new InvalidArgumentError("maxResponseSize must be a positive number");
}
if (autoSelectFamilyAttemptTimeout != null && (!Number.isInteger(autoSelectFamilyAttemptTimeout) || autoSelectFamilyAttemptTimeout < -1)) {
throw new InvalidArgumentError("autoSelectFamilyAttemptTimeout must be a positive number");
}
if (allowH2 != null && typeof allowH2 !== "boolean") {
throw new InvalidArgumentError("allowH2 must be a valid boolean value");
}
if (maxConcurrentStreams != null && (typeof maxConcurrentStreams !== "number" || maxConcurrentStreams < 1)) {
throw new InvalidArgumentError("maxConcurrentStreams must be a positive integer, greater than 0");
}
if (typeof connect2 !== "function") {
connect2 = buildConnector({
...tls,
maxCachedSessions,
allowH2,
socketPath,
timeout: connectTimeout,
...autoSelectFamily ? { autoSelectFamily, autoSelectFamilyAttemptTimeout } : void 0,
...connect2
});
}
if (interceptors?.Client && Array.isArray(interceptors.Client)) {
this[kInterceptors] = interceptors.Client;
if (!deprecatedInterceptorWarned) {
deprecatedInterceptorWarned = true;
process.emitWarning("Client.Options#interceptor is deprecated. Use Dispatcher#compose instead.", {
code: "UNDICI-CLIENT-INTERCEPTOR-DEPRECATED"
});
}
} else {
this[kInterceptors] = [createRedirectInterceptor({ maxRedirections })];
}
this[kUrl] = util5.parseOrigin(url2);
this[kConnector] = connect2;
this[kPipelining] = pipelining != null ? pipelining : 1;
this[kMaxHeadersSize] = maxHeaderSize || http2.maxHeaderSize;
this[kKeepAliveDefaultTimeout] = keepAliveTimeout == null ? 4e3 : keepAliveTimeout;
this[kKeepAliveMaxTimeout] = keepAliveMaxTimeout == null ? 6e5 : keepAliveMaxTimeout;
this[kKeepAliveTimeoutThreshold] = keepAliveTimeoutThreshold == null ? 2e3 : keepAliveTimeoutThreshold;
this[kKeepAliveTimeoutValue] = this[kKeepAliveDefaultTimeout];
this[kServerName] = null;
this[kLocalAddress] = localAddress != null ? localAddress : null;
this[kResuming] = 0;
this[kNeedDrain] = 0;
this[kHostHeader] = `host: ${this[kUrl].hostname}${this[kUrl].port ? `:${this[kUrl].port}` : ""}\r
`;
this[kBodyTimeout] = bodyTimeout != null ? bodyTimeout : 3e5;
this[kHeadersTimeout] = headersTimeout != null ? headersTimeout : 3e5;
this[kStrictContentLength] = strictContentLength == null ? true : strictContentLength;
this[kMaxRedirections] = maxRedirections;
this[kMaxRequests] = maxRequestsPerClient;
this[kClosedResolve] = null;
this[kMaxResponseSize] = maxResponseSize > -1 ? maxResponseSize : -1;
this[kMaxConcurrentStreams] = maxConcurrentStreams != null ? maxConcurrentStreams : 100;
this[kHTTPContext] = null;
this[kQueue] = [];
this[kRunningIdx] = 0;
this[kPendingIdx] = 0;
this[kResume] = (sync) => resume(this, sync);
this[kOnError] = (err2) => onError(this, err2);
}
get pipelining() {
return this[kPipelining];
}
set pipelining(value) {
this[kPipelining] = value;
this[kResume](true);
}
get [kPending]() {
return this[kQueue].length - this[kPendingIdx];
}
get [kRunning]() {
return this[kPendingIdx] - this[kRunningIdx];
}
get [kSize]() {
return this[kQueue].length - this[kRunningIdx];
}
get [kConnected]() {
return !!this[kHTTPContext] && !this[kConnecting] && !this[kHTTPContext].destroyed;
}
get [kBusy]() {
return Boolean(
this[kHTTPContext]?.busy(null) || this[kSize] >= (getPipelining(this) || 1) || this[kPending] > 0
);
}
/* istanbul ignore: only used for test */
[kConnect](cb) {
connect(this);
this.once("connect", cb);
}
[kDispatch](opts, handler) {
const origin2 = opts.origin || this[kUrl].origin;
const request = new Request2(origin2, opts, handler);
this[kQueue].push(request);
if (this[kResuming]) {
} else if (util5.bodyLength(request.body) == null && util5.isIterable(request.body)) {
this[kResuming] = 1;
queueMicrotask(() => resume(this));
} else {
this[kResume](true);
}
if (this[kResuming] && this[kNeedDrain] !== 2 && this[kBusy]) {
this[kNeedDrain] = 2;
}
return this[kNeedDrain] < 2;
}
async [kClose]() {
return new Promise((resolve) => {
if (this[kSize]) {
this[kClosedResolve] = resolve;
} else {
resolve(null);
}
});
}
async [kDestroy](err2) {
return new Promise((resolve) => {
const requests = this[kQueue].splice(this[kPendingIdx]);
for (let i = 0; i < requests.length; i++) {
const request = requests[i];
util5.errorRequest(this, request, err2);
}
const callback = () => {
if (this[kClosedResolve]) {
this[kClosedResolve]();
this[kClosedResolve] = null;
}
resolve(null);
};
if (this[kHTTPContext]) {
this[kHTTPContext].destroy(err2, callback);
this[kHTTPContext] = null;
} else {
queueMicrotask(callback);
}
this[kResume]();
});
}
};
var createRedirectInterceptor = require_redirect_interceptor();
function onError(client, err2) {
if (client[kRunning] === 0 && err2.code !== "UND_ERR_INFO" && err2.code !== "UND_ERR_SOCKET") {
assert(client[kPendingIdx] === client[kRunningIdx]);
const requests = client[kQueue].splice(client[kRunningIdx]);
for (let i = 0; i < requests.length; i++) {
const request = requests[i];
util5.errorRequest(client, request, err2);
}
assert(client[kSize] === 0);
}
}
async function connect(client) {
assert(!client[kConnecting]);
assert(!client[kHTTPContext]);
let { host, hostname, protocol, port } = client[kUrl];
if (hostname[0] === "[") {
const idx = hostname.indexOf("]");
assert(idx !== -1);
const ip = hostname.substring(1, idx);
assert(net.isIP(ip));
hostname = ip;
}
client[kConnecting] = true;
if (channels.beforeConnect.hasSubscribers) {
channels.beforeConnect.publish({
connectParams: {
host,
hostname,
protocol,
port,
version: client[kHTTPContext]?.version,
servername: client[kServerName],
localAddress: client[kLocalAddress]
},
connector: client[kConnector]
});
}
try {
const socket = await new Promise((resolve, reject) => {
client[kConnector]({
host,
hostname,
protocol,
port,
servername: client[kServerName],
localAddress: client[kLocalAddress]
}, (err2, socket2) => {
if (err2) {
reject(err2);
} else {
resolve(socket2);
}
});
});
if (client.destroyed) {
util5.destroy(socket.on("error", noop2), new ClientDestroyedError());
return;
}
assert(socket);
try {
client[kHTTPContext] = socket.alpnProtocol === "h2" ? await connectH2(client, socket) : await connectH1(client, socket);
} catch (err2) {
socket.destroy().on("error", noop2);
throw err2;
}
client[kConnecting] = false;
socket[kCounter] = 0;
socket[kMaxRequests] = client[kMaxRequests];
socket[kClient] = client;
socket[kError] = null;
if (channels.connected.hasSubscribers) {
channels.connected.publish({
connectParams: {
host,
hostname,
protocol,
port,
version: client[kHTTPContext]?.version,
servername: client[kServerName],
localAddress: client[kLocalAddress]
},
connector: client[kConnector],
socket
});
}
client.emit("connect", client[kUrl], [client]);
} catch (err2) {
if (client.destroyed) {
return;
}
client[kConnecting] = false;
if (channels.connectError.hasSubscribers) {
channels.connectError.publish({
connectParams: {
host,
hostname,
protocol,
port,
version: client[kHTTPContext]?.version,
servername: client[kServerName],
localAddress: client[kLocalAddress]
},
connector: client[kConnector],
error: err2
});
}
if (err2.code === "ERR_TLS_CERT_ALTNAME_INVALID") {
assert(client[kRunning] === 0);
while (client[kPending] > 0 && client[kQueue][client[kPendingIdx]].servername === client[kServerName]) {
const request = client[kQueue][client[kPendingIdx]++];
util5.errorRequest(client, request, err2);
}
} else {
onError(client, err2);
}
client.emit("connectionError", client[kUrl], [client], err2);
}
client[kResume]();
}
function emitDrain(client) {
client[kNeedDrain] = 0;
client.emit("drain", client[kUrl], [client]);
}
function resume(client, sync) {
if (client[kResuming] === 2) {
return;
}
client[kResuming] = 2;
_resume(client, sync);
client[kResuming] = 0;
if (client[kRunningIdx] > 256) {
client[kQueue].splice(0, client[kRunningIdx]);
client[kPendingIdx] -= client[kRunningIdx];
client[kRunningIdx] = 0;
}
}
function _resume(client, sync) {
while (true) {
if (client.destroyed) {
assert(client[kPending] === 0);
return;
}
if (client[kClosedResolve] && !client[kSize]) {
client[kClosedResolve]();
client[kClosedResolve] = null;
return;
}
if (client[kHTTPContext]) {
client[kHTTPContext].resume();
}
if (client[kBusy]) {
client[kNeedDrain] = 2;
} else if (client[kNeedDrain] === 2) {
if (sync) {
client[kNeedDrain] = 1;
queueMicrotask(() => emitDrain(client));
} else {
emitDrain(client);
}
continue;
}
if (client[kPending] === 0) {
return;
}
if (client[kRunning] >= (getPipelining(client) || 1)) {
return;
}
const request = client[kQueue][client[kPendingIdx]];
if (client[kUrl].protocol === "https:" && client[kServerName] !== request.servername) {
if (client[kRunning] > 0) {
return;
}
client[kServerName] = request.servername;
client[kHTTPContext]?.destroy(new InformationalError("servername changed"), () => {
client[kHTTPContext] = null;
resume(client);
});
}
if (client[kConnecting]) {
return;
}
if (!client[kHTTPContext]) {
connect(client);
return;
}
if (client[kHTTPContext].destroyed) {
return;
}
if (client[kHTTPContext].busy(request)) {
return;
}
if (!request.aborted && client[kHTTPContext].write(request)) {
client[kPendingIdx]++;
} else {
client[kQueue].splice(client[kPendingIdx], 1);
}
}
}
module2.exports = Client;
}
});
// node_modules/undici/lib/dispatcher/fixed-queue.js
var require_fixed_queue = __commonJS({
"node_modules/undici/lib/dispatcher/fixed-queue.js"(exports2, module2) {
"use strict";
var kSize = 2048;
var kMask = kSize - 1;
var FixedCircularBuffer = class {
constructor() {
this.bottom = 0;
this.top = 0;
this.list = new Array(kSize);
this.next = null;
}
isEmpty() {
return this.top === this.bottom;
}
isFull() {
return (this.top + 1 & kMask) === this.bottom;
}
push(data2) {
this.list[this.top] = data2;
this.top = this.top + 1 & kMask;
}
shift() {
const nextItem = this.list[this.bottom];
if (nextItem === void 0)
return null;
this.list[this.bottom] = void 0;
this.bottom = this.bottom + 1 & kMask;
return nextItem;
}
};
module2.exports = class FixedQueue {
constructor() {
this.head = this.tail = new FixedCircularBuffer();
}
isEmpty() {
return this.head.isEmpty();
}
push(data2) {
if (this.head.isFull()) {
this.head = this.head.next = new FixedCircularBuffer();
}
this.head.push(data2);
}
shift() {
const tail = this.tail;
const next2 = tail.shift();
if (tail.isEmpty() && tail.next !== null) {
this.tail = tail.next;
}
return next2;
}
};
}
});
// node_modules/undici/lib/dispatcher/pool-stats.js
var require_pool_stats = __commonJS({
"node_modules/undici/lib/dispatcher/pool-stats.js"(exports2, module2) {
var { kFree, kConnected, kPending, kQueued, kRunning, kSize } = require_symbols();
var kPool = Symbol("pool");
var PoolStats = class {
constructor(pool) {
this[kPool] = pool;
}
get connected() {
return this[kPool][kConnected];
}
get free() {
return this[kPool][kFree];
}
get pending() {
return this[kPool][kPending];
}
get queued() {
return this[kPool][kQueued];
}
get running() {
return this[kPool][kRunning];
}
get size() {
return this[kPool][kSize];
}
};
module2.exports = PoolStats;
}
});
// node_modules/undici/lib/dispatcher/pool-base.js
var require_pool_base = __commonJS({
"node_modules/undici/lib/dispatcher/pool-base.js"(exports2, module2) {
"use strict";
var DispatcherBase = require_dispatcher_base();
var FixedQueue = require_fixed_queue();
var { kConnected, kSize, kRunning, kPending, kQueued, kBusy, kFree, kUrl, kClose, kDestroy, kDispatch } = require_symbols();
var PoolStats = require_pool_stats();
var kClients = Symbol("clients");
var kNeedDrain = Symbol("needDrain");
var kQueue = Symbol("queue");
var kClosedResolve = Symbol("closed resolve");
var kOnDrain = Symbol("onDrain");
var kOnConnect = Symbol("onConnect");
var kOnDisconnect = Symbol("onDisconnect");
var kOnConnectionError = Symbol("onConnectionError");
var kGetDispatcher = Symbol("get dispatcher");
var kAddClient = Symbol("add client");
var kRemoveClient = Symbol("remove client");
var kStats = Symbol("stats");
var PoolBase = class extends DispatcherBase {
constructor() {
super();
this[kQueue] = new FixedQueue();
this[kClients] = [];
this[kQueued] = 0;
const pool = this;
this[kOnDrain] = function onDrain(origin2, targets) {
const queue = pool[kQueue];
let needDrain = false;
while (!needDrain) {
const item = queue.shift();
if (!item) {
break;
}
pool[kQueued]--;
needDrain = !this.dispatch(item.opts, item.handler);
}
this[kNeedDrain] = needDrain;
if (!this[kNeedDrain] && pool[kNeedDrain]) {
pool[kNeedDrain] = false;
pool.emit("drain", origin2, [pool, ...targets]);
}
if (pool[kClosedResolve] && queue.isEmpty()) {
Promise.all(pool[kClients].map((c) => c.close())).then(pool[kClosedResolve]);
}
};
this[kOnConnect] = (origin2, targets) => {
pool.emit("connect", origin2, [pool, ...targets]);
};
this[kOnDisconnect] = (origin2, targets, err2) => {
pool.emit("disconnect", origin2, [pool, ...targets], err2);
};
this[kOnConnectionError] = (origin2, targets, err2) => {
pool.emit("connectionError", origin2, [pool, ...targets], err2);
};
this[kStats] = new PoolStats(this);
}
get [kBusy]() {
return this[kNeedDrain];
}
get [kConnected]() {
return this[kClients].filter((client) => client[kConnected]).length;
}
get [kFree]() {
return this[kClients].filter((client) => client[kConnected] && !client[kNeedDrain]).length;
}
get [kPending]() {
let ret = this[kQueued];
for (const { [kPending]: pending } of this[kClients]) {
ret += pending;
}
return ret;
}
get [kRunning]() {
let ret = 0;
for (const { [kRunning]: running } of this[kClients]) {
ret += running;
}
return ret;
}
get [kSize]() {
let ret = this[kQueued];
for (const { [kSize]: size } of this[kClients]) {
ret += size;
}
return ret;
}
get stats() {
return this[kStats];
}
async [kClose]() {
if (this[kQueue].isEmpty()) {
await Promise.all(this[kClients].map((c) => c.close()));
} else {
await new Promise((resolve) => {
this[kClosedResolve] = resolve;
});
}
}
async [kDestroy](err2) {
while (true) {
const item = this[kQueue].shift();
if (!item) {
break;
}
item.handler.onError(err2);
}
await Promise.all(this[kClients].map((c) => c.destroy(err2)));
}
[kDispatch](opts, handler) {
const dispatcher = this[kGetDispatcher]();
if (!dispatcher) {
this[kNeedDrain] = true;
this[kQueue].push({ opts, handler });
this[kQueued]++;
} else if (!dispatcher.dispatch(opts, handler)) {
dispatcher[kNeedDrain] = true;
this[kNeedDrain] = !this[kGetDispatcher]();
}
return !this[kNeedDrain];
}
[kAddClient](client) {
client.on("drain", this[kOnDrain]).on("connect", this[kOnConnect]).on("disconnect", this[kOnDisconnect]).on("connectionError", this[kOnConnectionError]);
this[kClients].push(client);
if (this[kNeedDrain]) {
queueMicrotask(() => {
if (this[kNeedDrain]) {
this[kOnDrain](client[kUrl], [this, client]);
}
});
}
return this;
}
[kRemoveClient](client) {
client.close(() => {
const idx = this[kClients].indexOf(client);
if (idx !== -1) {
this[kClients].splice(idx, 1);
}
});
this[kNeedDrain] = this[kClients].some((dispatcher) => !dispatcher[kNeedDrain] && dispatcher.closed !== true && dispatcher.destroyed !== true);
}
};
module2.exports = {
PoolBase,
kClients,
kNeedDrain,
kAddClient,
kRemoveClient,
kGetDispatcher
};
}
});
// node_modules/undici/lib/dispatcher/pool.js
var require_pool = __commonJS({
"node_modules/undici/lib/dispatcher/pool.js"(exports2, module2) {
"use strict";
var {
PoolBase,
kClients,
kNeedDrain,
kAddClient,
kGetDispatcher
} = require_pool_base();
var Client = require_client();
var {
InvalidArgumentError
} = require_errors();
var util5 = require_util2();
var { kUrl, kInterceptors } = require_symbols();
var buildConnector = require_connect();
var kOptions = Symbol("options");
var kConnections = Symbol("connections");
var kFactory = Symbol("factory");
function defaultFactory(origin2, opts) {
return new Client(origin2, opts);
}
var Pool = class extends PoolBase {
constructor(origin2, {
connections,
factory = defaultFactory,
connect,
connectTimeout,
tls,
maxCachedSessions,
socketPath,
autoSelectFamily,
autoSelectFamilyAttemptTimeout,
allowH2,
...options
} = {}) {
super();
if (connections != null && (!Number.isFinite(connections) || connections < 0)) {
throw new InvalidArgumentError("invalid connections");
}
if (typeof factory !== "function") {
throw new InvalidArgumentError("factory must be a function.");
}
if (connect != null && typeof connect !== "function" && typeof connect !== "object") {
throw new InvalidArgumentError("connect must be a function or an object");
}
if (typeof connect !== "function") {
connect = buildConnector({
...tls,
maxCachedSessions,
allowH2,
socketPath,
timeout: connectTimeout,
...autoSelectFamily ? { autoSelectFamily, autoSelectFamilyAttemptTimeout } : void 0,
...connect
});
}
this[kInterceptors] = options.interceptors?.Pool && Array.isArray(options.interceptors.Pool) ? options.interceptors.Pool : [];
this[kConnections] = connections || null;
this[kUrl] = util5.parseOrigin(origin2);
this[kOptions] = { ...util5.deepClone(options), connect, allowH2 };
this[kOptions].interceptors = options.interceptors ? { ...options.interceptors } : void 0;
this[kFactory] = factory;
this.on("connectionError", (origin3, targets, error) => {
for (const target of targets) {
const idx = this[kClients].indexOf(target);
if (idx !== -1) {
this[kClients].splice(idx, 1);
}
}
});
}
[kGetDispatcher]() {
for (const client of this[kClients]) {
if (!client[kNeedDrain]) {
return client;
}
}
if (!this[kConnections] || this[kClients].length < this[kConnections]) {
const dispatcher = this[kFactory](this[kUrl], this[kOptions]);
this[kAddClient](dispatcher);
return dispatcher;
}
}
};
module2.exports = Pool;
}
});
// node_modules/undici/lib/dispatcher/balanced-pool.js
var require_balanced_pool = __commonJS({
"node_modules/undici/lib/dispatcher/balanced-pool.js"(exports2, module2) {
"use strict";
var {
BalancedPoolMissingUpstreamError,
InvalidArgumentError
} = require_errors();
var {
PoolBase,
kClients,
kNeedDrain,
kAddClient,
kRemoveClient,
kGetDispatcher
} = require_pool_base();
var Pool = require_pool();
var { kUrl, kInterceptors } = require_symbols();
var { parseOrigin } = require_util2();
var kFactory = Symbol("factory");
var kOptions = Symbol("options");
var kGreatestCommonDivisor = Symbol("kGreatestCommonDivisor");
var kCurrentWeight = Symbol("kCurrentWeight");
var kIndex = Symbol("kIndex");
var kWeight = Symbol("kWeight");
var kMaxWeightPerServer = Symbol("kMaxWeightPerServer");
var kErrorPenalty = Symbol("kErrorPenalty");
function getGreatestCommonDivisor(a, b) {
if (a === 0) return b;
while (b !== 0) {
const t = b;
b = a % b;
a = t;
}
return a;
}
function defaultFactory(origin2, opts) {
return new Pool(origin2, opts);
}
var BalancedPool = class extends PoolBase {
constructor(upstreams = [], { factory = defaultFactory, ...opts } = {}) {
super();
this[kOptions] = opts;
this[kIndex] = -1;
this[kCurrentWeight] = 0;
this[kMaxWeightPerServer] = this[kOptions].maxWeightPerServer || 100;
this[kErrorPenalty] = this[kOptions].errorPenalty || 15;
if (!Array.isArray(upstreams)) {
upstreams = [upstreams];
}
if (typeof factory !== "function") {
throw new InvalidArgumentError("factory must be a function.");
}
this[kInterceptors] = opts.interceptors?.BalancedPool && Array.isArray(opts.interceptors.BalancedPool) ? opts.interceptors.BalancedPool : [];
this[kFactory] = factory;
for (const upstream of upstreams) {
this.addUpstream(upstream);
}
this._updateBalancedPoolStats();
}
addUpstream(upstream) {
const upstreamOrigin = parseOrigin(upstream).origin;
if (this[kClients].find((pool2) => pool2[kUrl].origin === upstreamOrigin && pool2.closed !== true && pool2.destroyed !== true)) {
return this;
}
const pool = this[kFactory](upstreamOrigin, Object.assign({}, this[kOptions]));
this[kAddClient](pool);
pool.on("connect", () => {
pool[kWeight] = Math.min(this[kMaxWeightPerServer], pool[kWeight] + this[kErrorPenalty]);
});
pool.on("connectionError", () => {
pool[kWeight] = Math.max(1, pool[kWeight] - this[kErrorPenalty]);
this._updateBalancedPoolStats();
});
pool.on("disconnect", (...args) => {
const err2 = args[2];
if (err2 && err2.code === "UND_ERR_SOCKET") {
pool[kWeight] = Math.max(1, pool[kWeight] - this[kErrorPenalty]);
this._updateBalancedPoolStats();
}
});
for (const client of this[kClients]) {
client[kWeight] = this[kMaxWeightPerServer];
}
this._updateBalancedPoolStats();
return this;
}
_updateBalancedPoolStats() {
let result = 0;
for (let i = 0; i < this[kClients].length; i++) {
result = getGreatestCommonDivisor(this[kClients][i][kWeight], result);
}
this[kGreatestCommonDivisor] = result;
}
removeUpstream(upstream) {
const upstreamOrigin = parseOrigin(upstream).origin;
const pool = this[kClients].find((pool2) => pool2[kUrl].origin === upstreamOrigin && pool2.closed !== true && pool2.destroyed !== true);
if (pool) {
this[kRemoveClient](pool);
}
return this;
}
get upstreams() {
return this[kClients].filter((dispatcher) => dispatcher.closed !== true && dispatcher.destroyed !== true).map((p) => p[kUrl].origin);
}
[kGetDispatcher]() {
if (this[kClients].length === 0) {
throw new BalancedPoolMissingUpstreamError();
}
const dispatcher = this[kClients].find((dispatcher2) => !dispatcher2[kNeedDrain] && dispatcher2.closed !== true && dispatcher2.destroyed !== true);
if (!dispatcher) {
return;
}
const allClientsBusy = this[kClients].map((pool) => pool[kNeedDrain]).reduce((a, b) => a && b, true);
if (allClientsBusy) {
return;
}
let counter = 0;
let maxWeightIndex = this[kClients].findIndex((pool) => !pool[kNeedDrain]);
while (counter++ < this[kClients].length) {
this[kIndex] = (this[kIndex] + 1) % this[kClients].length;
const pool = this[kClients][this[kIndex]];
if (pool[kWeight] > this[kClients][maxWeightIndex][kWeight] && !pool[kNeedDrain]) {
maxWeightIndex = this[kIndex];
}
if (this[kIndex] === 0) {
this[kCurrentWeight] = this[kCurrentWeight] - this[kGreatestCommonDivisor];
if (this[kCurrentWeight] <= 0) {
this[kCurrentWeight] = this[kMaxWeightPerServer];
}
}
if (pool[kWeight] >= this[kCurrentWeight] && !pool[kNeedDrain]) {
return pool;
}
}
this[kCurrentWeight] = this[kClients][maxWeightIndex][kWeight];
this[kIndex] = maxWeightIndex;
return this[kClients][maxWeightIndex];
}
};
module2.exports = BalancedPool;
}
});
// node_modules/undici/lib/dispatcher/agent.js
var require_agent = __commonJS({
"node_modules/undici/lib/dispatcher/agent.js"(exports2, module2) {
"use strict";
var { InvalidArgumentError } = require_errors();
var { kClients, kRunning, kClose, kDestroy, kDispatch, kInterceptors } = require_symbols();
var DispatcherBase = require_dispatcher_base();
var Pool = require_pool();
var Client = require_client();
var util5 = require_util2();
var createRedirectInterceptor = require_redirect_interceptor();
var kOnConnect = Symbol("onConnect");
var kOnDisconnect = Symbol("onDisconnect");
var kOnConnectionError = Symbol("onConnectionError");
var kMaxRedirections = Symbol("maxRedirections");
var kOnDrain = Symbol("onDrain");
var kFactory = Symbol("factory");
var kOptions = Symbol("options");
function defaultFactory(origin2, opts) {
return opts && opts.connections === 1 ? new Client(origin2, opts) : new Pool(origin2, opts);
}
var Agent = class extends DispatcherBase {
constructor({ factory = defaultFactory, maxRedirections = 0, connect, ...options } = {}) {
super();
if (typeof factory !== "function") {
throw new InvalidArgumentError("factory must be a function.");
}
if (connect != null && typeof connect !== "function" && typeof connect !== "object") {
throw new InvalidArgumentError("connect must be a function or an object");
}
if (!Number.isInteger(maxRedirections) || maxRedirections < 0) {
throw new InvalidArgumentError("maxRedirections must be a positive number");
}
if (connect && typeof connect !== "function") {
connect = { ...connect };
}
this[kInterceptors] = options.interceptors?.Agent && Array.isArray(options.interceptors.Agent) ? options.interceptors.Agent : [createRedirectInterceptor({ maxRedirections })];
this[kOptions] = { ...util5.deepClone(options), connect };
this[kOptions].interceptors = options.interceptors ? { ...options.interceptors } : void 0;
this[kMaxRedirections] = maxRedirections;
this[kFactory] = factory;
this[kClients] = /* @__PURE__ */ new Map();
this[kOnDrain] = (origin2, targets) => {
this.emit("drain", origin2, [this, ...targets]);
};
this[kOnConnect] = (origin2, targets) => {
this.emit("connect", origin2, [this, ...targets]);
};
this[kOnDisconnect] = (origin2, targets, err2) => {
this.emit("disconnect", origin2, [this, ...targets], err2);
};
this[kOnConnectionError] = (origin2, targets, err2) => {
this.emit("connectionError", origin2, [this, ...targets], err2);
};
}
get [kRunning]() {
let ret = 0;
for (const client of this[kClients].values()) {
ret += client[kRunning];
}
return ret;
}
[kDispatch](opts, handler) {
let key;
if (opts.origin && (typeof opts.origin === "string" || opts.origin instanceof URL)) {
key = String(opts.origin);
} else {
throw new InvalidArgumentError("opts.origin must be a non-empty string or URL.");
}
let dispatcher = this[kClients].get(key);
if (!dispatcher) {
dispatcher = this[kFactory](opts.origin, this[kOptions]).on("drain", this[kOnDrain]).on("connect", this[kOnConnect]).on("disconnect", this[kOnDisconnect]).on("connectionError", this[kOnConnectionError]);
this[kClients].set(key, dispatcher);
}
return dispatcher.dispatch(opts, handler);
}
async [kClose]() {
const closePromises = [];
for (const client of this[kClients].values()) {
closePromises.push(client.close());
}
this[kClients].clear();
await Promise.all(closePromises);
}
async [kDestroy](err2) {
const destroyPromises = [];
for (const client of this[kClients].values()) {
destroyPromises.push(client.destroy(err2));
}
this[kClients].clear();
await Promise.all(destroyPromises);
}
};
module2.exports = Agent;
}
});
// node_modules/undici/lib/dispatcher/proxy-agent.js
var require_proxy_agent = __commonJS({
"node_modules/undici/lib/dispatcher/proxy-agent.js"(exports2, module2) {
"use strict";
var { kProxy, kClose, kDestroy, kInterceptors } = require_symbols();
var { URL: URL2 } = require("node:url");
var Agent = require_agent();
var Pool = require_pool();
var DispatcherBase = require_dispatcher_base();
var { InvalidArgumentError, RequestAbortedError, SecureProxyConnectionError } = require_errors();
var buildConnector = require_connect();
var kAgent = Symbol("proxy agent");
var kClient = Symbol("proxy client");
var kProxyHeaders = Symbol("proxy headers");
var kRequestTls = Symbol("request tls settings");
var kProxyTls = Symbol("proxy tls settings");
var kConnectEndpoint = Symbol("connect endpoint function");
function defaultProtocolPort(protocol) {
return protocol === "https:" ? 443 : 80;
}
function defaultFactory(origin2, opts) {
return new Pool(origin2, opts);
}
var noop2 = () => {
};
var ProxyAgent = class extends DispatcherBase {
constructor(opts) {
super();
if (!opts || typeof opts === "object" && !(opts instanceof URL2) && !opts.uri) {
throw new InvalidArgumentError("Proxy uri is mandatory");
}
const { clientFactory = defaultFactory } = opts;
if (typeof clientFactory !== "function") {
throw new InvalidArgumentError("Proxy opts.clientFactory must be a function.");
}
const url2 = this.#getUrl(opts);
const { href, origin: origin2, port, protocol, username, password, hostname: proxyHostname } = url2;
this[kProxy] = { uri: href, protocol };
this[kInterceptors] = opts.interceptors?.ProxyAgent && Array.isArray(opts.interceptors.ProxyAgent) ? opts.interceptors.ProxyAgent : [];
this[kRequestTls] = opts.requestTls;
this[kProxyTls] = opts.proxyTls;
this[kProxyHeaders] = opts.headers || {};
if (opts.auth && opts.token) {
throw new InvalidArgumentError("opts.auth cannot be used in combination with opts.token");
} else if (opts.auth) {
this[kProxyHeaders]["proxy-authorization"] = `Basic ${opts.auth}`;
} else if (opts.token) {
this[kProxyHeaders]["proxy-authorization"] = opts.token;
} else if (username && password) {
this[kProxyHeaders]["proxy-authorization"] = `Basic ${Buffer.from(`${decodeURIComponent(username)}:${decodeURIComponent(password)}`).toString("base64")}`;
}
const connect = buildConnector({ ...opts.proxyTls });
this[kConnectEndpoint] = buildConnector({ ...opts.requestTls });
this[kClient] = clientFactory(url2, { connect });
this[kAgent] = new Agent({
...opts,
connect: async (opts2, callback) => {
let requestedPath = opts2.host;
if (!opts2.port) {
requestedPath += `:${defaultProtocolPort(opts2.protocol)}`;
}
try {
const { socket, statusCode } = await this[kClient].connect({
origin: origin2,
port,
path: requestedPath,
signal: opts2.signal,
headers: {
...this[kProxyHeaders],
host: opts2.host
},
servername: this[kProxyTls]?.servername || proxyHostname
});
if (statusCode !== 200) {
socket.on("error", noop2).destroy();
callback(new RequestAbortedError(`Proxy response (${statusCode}) !== 200 when HTTP Tunneling`));
}
if (opts2.protocol !== "https:") {
callback(null, socket);
return;
}
let servername;
if (this[kRequestTls]) {
servername = this[kRequestTls].servername;
} else {
servername = opts2.servername;
}
this[kConnectEndpoint]({ ...opts2, servername, httpSocket: socket }, callback);
} catch (err2) {
if (err2.code === "ERR_TLS_CERT_ALTNAME_INVALID") {
callback(new SecureProxyConnectionError(err2));
} else {
callback(err2);
}
}
}
});
}
dispatch(opts, handler) {
const headers = buildHeaders(opts.headers);
throwIfProxyAuthIsSent(headers);
if (headers && !("host" in headers) && !("Host" in headers)) {
const { host } = new URL2(opts.origin);
headers.host = host;
}
return this[kAgent].dispatch(
{
...opts,
headers
},
handler
);
}
/**
* @param {import('../types/proxy-agent').ProxyAgent.Options | string | URL} opts
* @returns {URL}
*/
#getUrl(opts) {
if (typeof opts === "string") {
return new URL2(opts);
} else if (opts instanceof URL2) {
return opts;
} else {
return new URL2(opts.uri);
}
}
async [kClose]() {
await this[kAgent].close();
await this[kClient].close();
}
async [kDestroy]() {
await this[kAgent].destroy();
await this[kClient].destroy();
}
};
function buildHeaders(headers) {
if (Array.isArray(headers)) {
const headersPair = {};
for (let i = 0; i < headers.length; i += 2) {
headersPair[headers[i]] = headers[i + 1];
}
return headersPair;
}
return headers;
}
function throwIfProxyAuthIsSent(headers) {
const existProxyAuth = headers && Object.keys(headers).find((key) => key.toLowerCase() === "proxy-authorization");
if (existProxyAuth) {
throw new InvalidArgumentError("Proxy-Authorization should be sent in ProxyAgent constructor");
}
}
module2.exports = ProxyAgent;
}
});
// node_modules/undici/lib/dispatcher/env-http-proxy-agent.js
var require_env_http_proxy_agent = __commonJS({
"node_modules/undici/lib/dispatcher/env-http-proxy-agent.js"(exports2, module2) {
"use strict";
var DispatcherBase = require_dispatcher_base();
var { kClose, kDestroy, kClosed, kDestroyed, kDispatch, kNoProxyAgent, kHttpProxyAgent, kHttpsProxyAgent } = require_symbols();
var ProxyAgent = require_proxy_agent();
var Agent = require_agent();
var DEFAULT_PORTS = {
"http:": 80,
"https:": 443
};
var experimentalWarned = false;
var EnvHttpProxyAgent = class extends DispatcherBase {
#noProxyValue = null;
#noProxyEntries = null;
#opts = null;
constructor(opts = {}) {
super();
this.#opts = opts;
if (!experimentalWarned) {
experimentalWarned = true;
process.emitWarning("EnvHttpProxyAgent is experimental, expect them to change at any time.", {
code: "UNDICI-EHPA"
});
}
const { httpProxy, httpsProxy, noProxy, ...agentOpts } = opts;
this[kNoProxyAgent] = new Agent(agentOpts);
const HTTP_PROXY = httpProxy ?? process.env.http_proxy ?? process.env.HTTP_PROXY;
if (HTTP_PROXY) {
this[kHttpProxyAgent] = new ProxyAgent({ ...agentOpts, uri: HTTP_PROXY });
} else {
this[kHttpProxyAgent] = this[kNoProxyAgent];
}
const HTTPS_PROXY = httpsProxy ?? process.env.https_proxy ?? process.env.HTTPS_PROXY;
if (HTTPS_PROXY) {
this[kHttpsProxyAgent] = new ProxyAgent({ ...agentOpts, uri: HTTPS_PROXY });
} else {
this[kHttpsProxyAgent] = this[kHttpProxyAgent];
}
this.#parseNoProxy();
}
[kDispatch](opts, handler) {
const url2 = new URL(opts.origin);
const agent = this.#getProxyAgentForUrl(url2);
return agent.dispatch(opts, handler);
}
async [kClose]() {
await this[kNoProxyAgent].close();
if (!this[kHttpProxyAgent][kClosed]) {
await this[kHttpProxyAgent].close();
}
if (!this[kHttpsProxyAgent][kClosed]) {
await this[kHttpsProxyAgent].close();
}
}
async [kDestroy](err2) {
await this[kNoProxyAgent].destroy(err2);
if (!this[kHttpProxyAgent][kDestroyed]) {
await this[kHttpProxyAgent].destroy(err2);
}
if (!this[kHttpsProxyAgent][kDestroyed]) {
await this[kHttpsProxyAgent].destroy(err2);
}
}
#getProxyAgentForUrl(url2) {
let { protocol, host: hostname, port } = url2;
hostname = hostname.replace(/:\d*$/, "").toLowerCase();
port = Number.parseInt(port, 10) || DEFAULT_PORTS[protocol] || 0;
if (!this.#shouldProxy(hostname, port)) {
return this[kNoProxyAgent];
}
if (protocol === "https:") {
return this[kHttpsProxyAgent];
}
return this[kHttpProxyAgent];
}
#shouldProxy(hostname, port) {
if (this.#noProxyChanged) {
this.#parseNoProxy();
}
if (this.#noProxyEntries.length === 0) {
return true;
}
if (this.#noProxyValue === "*") {
return false;
}
for (let i = 0; i < this.#noProxyEntries.length; i++) {
const entry2 = this.#noProxyEntries[i];
if (entry2.port && entry2.port !== port) {
continue;
}
if (!/^[.*]/.test(entry2.hostname)) {
if (hostname === entry2.hostname) {
return false;
}
} else {
if (hostname.endsWith(entry2.hostname.replace(/^\*/, ""))) {
return false;
}
}
}
return true;
}
#parseNoProxy() {
const noProxyValue = this.#opts.noProxy ?? this.#noProxyEnv;
const noProxySplit = noProxyValue.split(/[,\s]/);
const noProxyEntries = [];
for (let i = 0; i < noProxySplit.length; i++) {
const entry2 = noProxySplit[i];
if (!entry2) {
continue;
}
const parsed = entry2.match(/^(.+):(\d+)$/);
noProxyEntries.push({
hostname: (parsed ? parsed[1] : entry2).toLowerCase(),
port: parsed ? Number.parseInt(parsed[2], 10) : 0
});
}
this.#noProxyValue = noProxyValue;
this.#noProxyEntries = noProxyEntries;
}
get #noProxyChanged() {
if (this.#opts.noProxy !== void 0) {
return false;
}
return this.#noProxyValue !== this.#noProxyEnv;
}
get #noProxyEnv() {
return process.env.no_proxy ?? process.env.NO_PROXY ?? "";
}
};
module2.exports = EnvHttpProxyAgent;
}
});
// node_modules/undici/lib/handler/retry-handler.js
var require_retry_handler = __commonJS({
"node_modules/undici/lib/handler/retry-handler.js"(exports2, module2) {
"use strict";
var assert = require("node:assert");
var { kRetryHandlerDefaultRetry } = require_symbols();
var { RequestRetryError } = require_errors();
var {
isDisturbed,
parseHeaders,
parseRangeHeader,
wrapRequestBody
} = require_util2();
function calculateRetryAfterHeader(retryAfter) {
const current = Date.now();
return new Date(retryAfter).getTime() - current;
}
var RetryHandler = class _RetryHandler {
constructor(opts, handlers) {
const { retryOptions, ...dispatchOpts } = opts;
const {
// Retry scoped
retry: retryFn,
maxRetries,
maxTimeout,
minTimeout,
timeoutFactor,
// Response scoped
methods,
errorCodes,
retryAfter,
statusCodes
} = retryOptions ?? {};
this.dispatch = handlers.dispatch;
this.handler = handlers.handler;
this.opts = { ...dispatchOpts, body: wrapRequestBody(opts.body) };
this.abort = null;
this.aborted = false;
this.retryOpts = {
retry: retryFn ?? _RetryHandler[kRetryHandlerDefaultRetry],
retryAfter: retryAfter ?? true,
maxTimeout: maxTimeout ?? 30 * 1e3,
// 30s,
minTimeout: minTimeout ?? 500,
// .5s
timeoutFactor: timeoutFactor ?? 2,
maxRetries: maxRetries ?? 5,
// What errors we should retry
methods: methods ?? ["GET", "HEAD", "OPTIONS", "PUT", "DELETE", "TRACE"],
// Indicates which errors to retry
statusCodes: statusCodes ?? [500, 502, 503, 504, 429],
// List of errors to retry
errorCodes: errorCodes ?? [
"ECONNRESET",
"ECONNREFUSED",
"ENOTFOUND",
"ENETDOWN",
"ENETUNREACH",
"EHOSTDOWN",
"EHOSTUNREACH",
"EPIPE",
"UND_ERR_SOCKET"
]
};
this.retryCount = 0;
this.retryCountCheckpoint = 0;
this.start = 0;
this.end = null;
this.etag = null;
this.resume = null;
this.handler.onConnect((reason) => {
this.aborted = true;
if (this.abort) {
this.abort(reason);
} else {
this.reason = reason;
}
});
}
onRequestSent() {
if (this.handler.onRequestSent) {
this.handler.onRequestSent();
}
}
onUpgrade(statusCode, headers, socket) {
if (this.handler.onUpgrade) {
this.handler.onUpgrade(statusCode, headers, socket);
}
}
onConnect(abort) {
if (this.aborted) {
abort(this.reason);
} else {
this.abort = abort;
}
}
onBodySent(chunk) {
if (this.handler.onBodySent) return this.handler.onBodySent(chunk);
}
static [kRetryHandlerDefaultRetry](err2, { state, opts }, cb) {
const { statusCode, code, headers } = err2;
const { method, retryOptions } = opts;
const {
maxRetries,
minTimeout,
maxTimeout,
timeoutFactor,
statusCodes,
errorCodes,
methods
} = retryOptions;
const { counter } = state;
if (code && code !== "UND_ERR_REQ_RETRY" && !errorCodes.includes(code)) {
cb(err2);
return;
}
if (Array.isArray(methods) && !methods.includes(method)) {
cb(err2);
return;
}
if (statusCode != null && Array.isArray(statusCodes) && !statusCodes.includes(statusCode)) {
cb(err2);
return;
}
if (counter > maxRetries) {
cb(err2);
return;
}
let retryAfterHeader = headers?.["retry-after"];
if (retryAfterHeader) {
retryAfterHeader = Number(retryAfterHeader);
retryAfterHeader = Number.isNaN(retryAfterHeader) ? calculateRetryAfterHeader(retryAfterHeader) : retryAfterHeader * 1e3;
}
const retryTimeout = retryAfterHeader > 0 ? Math.min(retryAfterHeader, maxTimeout) : Math.min(minTimeout * timeoutFactor ** (counter - 1), maxTimeout);
setTimeout(() => cb(null), retryTimeout);
}
onHeaders(statusCode, rawHeaders, resume, statusMessage) {
const headers = parseHeaders(rawHeaders);
this.retryCount += 1;
if (statusCode >= 300) {
if (this.retryOpts.statusCodes.includes(statusCode) === false) {
return this.handler.onHeaders(
statusCode,
rawHeaders,
resume,
statusMessage
);
} else {
this.abort(
new RequestRetryError("Request failed", statusCode, {
headers,
data: {
count: this.retryCount
}
})
);
return false;
}
}
if (this.resume != null) {
this.resume = null;
if (statusCode !== 206 && (this.start > 0 || statusCode !== 200)) {
this.abort(
new RequestRetryError("server does not support the range header and the payload was partially consumed", statusCode, {
headers,
data: { count: this.retryCount }
})
);
return false;
}
const contentRange = parseRangeHeader(headers["content-range"]);
if (!contentRange) {
this.abort(
new RequestRetryError("Content-Range mismatch", statusCode, {
headers,
data: { count: this.retryCount }
})
);
return false;
}
if (this.etag != null && this.etag !== headers.etag) {
this.abort(
new RequestRetryError("ETag mismatch", statusCode, {
headers,
data: { count: this.retryCount }
})
);
return false;
}
const { start, size, end: end2 = size - 1 } = contentRange;
assert(this.start === start, "content-range mismatch");
assert(this.end == null || this.end === end2, "content-range mismatch");
this.resume = resume;
return true;
}
if (this.end == null) {
if (statusCode === 206) {
const range = parseRangeHeader(headers["content-range"]);
if (range == null) {
return this.handler.onHeaders(
statusCode,
rawHeaders,
resume,
statusMessage
);
}
const { start, size, end: end2 = size - 1 } = range;
assert(
start != null && Number.isFinite(start),
"content-range mismatch"
);
assert(end2 != null && Number.isFinite(end2), "invalid content-length");
this.start = start;
this.end = end2;
}
if (this.end == null) {
const contentLength = headers["content-length"];
this.end = contentLength != null ? Number(contentLength) - 1 : null;
}
assert(Number.isFinite(this.start));
assert(
this.end == null || Number.isFinite(this.end),
"invalid content-length"
);
this.resume = resume;
this.etag = headers.etag != null ? headers.etag : null;
if (this.etag != null && this.etag.startsWith("W/")) {
this.etag = null;
}
return this.handler.onHeaders(
statusCode,
rawHeaders,
resume,
statusMessage
);
}
const err2 = new RequestRetryError("Request failed", statusCode, {
headers,
data: { count: this.retryCount }
});
this.abort(err2);
return false;
}
onData(chunk) {
this.start += chunk.length;
return this.handler.onData(chunk);
}
onComplete(rawTrailers) {
this.retryCount = 0;
return this.handler.onComplete(rawTrailers);
}
onError(err2) {
if (this.aborted || isDisturbed(this.opts.body)) {
return this.handler.onError(err2);
}
if (this.retryCount - this.retryCountCheckpoint > 0) {
this.retryCount = this.retryCountCheckpoint + (this.retryCount - this.retryCountCheckpoint);
} else {
this.retryCount += 1;
}
this.retryOpts.retry(
err2,
{
state: { counter: this.retryCount },
opts: { retryOptions: this.retryOpts, ...this.opts }
},
onRetry.bind(this)
);
function onRetry(err3) {
if (err3 != null || this.aborted || isDisturbed(this.opts.body)) {
return this.handler.onError(err3);
}
if (this.start !== 0) {
const headers = { range: `bytes=${this.start}-${this.end ?? ""}` };
if (this.etag != null) {
headers["if-match"] = this.etag;
}
this.opts = {
...this.opts,
headers: {
...this.opts.headers,
...headers
}
};
}
try {
this.retryCountCheckpoint = this.retryCount;
this.dispatch(this.opts, this);
} catch (err4) {
this.handler.onError(err4);
}
}
}
};
module2.exports = RetryHandler;
}
});
// node_modules/undici/lib/dispatcher/retry-agent.js
var require_retry_agent = __commonJS({
"node_modules/undici/lib/dispatcher/retry-agent.js"(exports2, module2) {
"use strict";
var Dispatcher = require_dispatcher();
var RetryHandler = require_retry_handler();
var RetryAgent = class extends Dispatcher {
#agent = null;
#options = null;
constructor(agent, options = {}) {
super(options);
this.#agent = agent;
this.#options = options;
}
dispatch(opts, handler) {
const retry = new RetryHandler({
...opts,
retryOptions: this.#options
}, {
dispatch: this.#agent.dispatch.bind(this.#agent),
handler
});
return this.#agent.dispatch(opts, retry);
}
close() {
return this.#agent.close();
}
destroy() {
return this.#agent.destroy();
}
};
module2.exports = RetryAgent;
}
});
// node_modules/undici/lib/api/readable.js
var require_readable = __commonJS({
"node_modules/undici/lib/api/readable.js"(exports2, module2) {
"use strict";
var assert = require("node:assert");
var { Readable: Readable2 } = require("node:stream");
var { RequestAbortedError, NotSupportedError, InvalidArgumentError, AbortError } = require_errors();
var util5 = require_util2();
var { ReadableStreamFrom } = require_util2();
var kConsume = Symbol("kConsume");
var kReading = Symbol("kReading");
var kBody = Symbol("kBody");
var kAbort = Symbol("kAbort");
var kContentType = Symbol("kContentType");
var kContentLength = Symbol("kContentLength");
var noop2 = () => {
};
var BodyReadable = class extends Readable2 {
constructor({
resume,
abort,
contentType = "",
contentLength,
highWaterMark = 64 * 1024
// Same as nodejs fs streams.
}) {
super({
autoDestroy: true,
read: resume,
highWaterMark
});
this._readableState.dataEmitted = false;
this[kAbort] = abort;
this[kConsume] = null;
this[kBody] = null;
this[kContentType] = contentType;
this[kContentLength] = contentLength;
this[kReading] = false;
}
destroy(err2) {
if (!err2 && !this._readableState.endEmitted) {
err2 = new RequestAbortedError();
}
if (err2) {
this[kAbort]();
}
return super.destroy(err2);
}
_destroy(err2, callback) {
if (!this[kReading]) {
setImmediate(() => {
callback(err2);
});
} else {
callback(err2);
}
}
on(ev, ...args) {
if (ev === "data" || ev === "readable") {
this[kReading] = true;
}
return super.on(ev, ...args);
}
addListener(ev, ...args) {
return this.on(ev, ...args);
}
off(ev, ...args) {
const ret = super.off(ev, ...args);
if (ev === "data" || ev === "readable") {
this[kReading] = this.listenerCount("data") > 0 || this.listenerCount("readable") > 0;
}
return ret;
}
removeListener(ev, ...args) {
return this.off(ev, ...args);
}
push(chunk) {
if (this[kConsume] && chunk !== null) {
consumePush(this[kConsume], chunk);
return this[kReading] ? super.push(chunk) : true;
}
return super.push(chunk);
}
// https://fetch.spec.whatwg.org/#dom-body-text
async text() {
return consume(this, "text");
}
// https://fetch.spec.whatwg.org/#dom-body-json
async json() {
return consume(this, "json");
}
// https://fetch.spec.whatwg.org/#dom-body-blob
async blob() {
return consume(this, "blob");
}
// https://fetch.spec.whatwg.org/#dom-body-bytes
async bytes() {
return consume(this, "bytes");
}
// https://fetch.spec.whatwg.org/#dom-body-arraybuffer
async arrayBuffer() {
return consume(this, "arrayBuffer");
}
// https://fetch.spec.whatwg.org/#dom-body-formdata
async formData() {
throw new NotSupportedError();
}
// https://fetch.spec.whatwg.org/#dom-body-bodyused
get bodyUsed() {
return util5.isDisturbed(this);
}
// https://fetch.spec.whatwg.org/#dom-body-body
get body() {
if (!this[kBody]) {
this[kBody] = ReadableStreamFrom(this);
if (this[kConsume]) {
this[kBody].getReader();
assert(this[kBody].locked);
}
}
return this[kBody];
}
async dump(opts) {
let limit = Number.isFinite(opts?.limit) ? opts.limit : 128 * 1024;
const signal = opts?.signal;
if (signal != null && (typeof signal !== "object" || !("aborted" in signal))) {
throw new InvalidArgumentError("signal must be an AbortSignal");
}
signal?.throwIfAborted();
if (this._readableState.closeEmitted) {
return null;
}
return await new Promise((resolve, reject) => {
if (this[kContentLength] > limit) {
this.destroy(new AbortError());
}
const onAbort = () => {
this.destroy(signal.reason ?? new AbortError());
};
signal?.addEventListener("abort", onAbort);
this.on("close", function() {
signal?.removeEventListener("abort", onAbort);
if (signal?.aborted) {
reject(signal.reason ?? new AbortError());
} else {
resolve(null);
}
}).on("error", noop2).on("data", function(chunk) {
limit -= chunk.length;
if (limit <= 0) {
this.destroy();
}
}).resume();
});
}
};
function isLocked(self2) {
return self2[kBody] && self2[kBody].locked === true || self2[kConsume];
}
function isUnusable(self2) {
return util5.isDisturbed(self2) || isLocked(self2);
}
async function consume(stream5, type) {
assert(!stream5[kConsume]);
return new Promise((resolve, reject) => {
if (isUnusable(stream5)) {
const rState = stream5._readableState;
if (rState.destroyed && rState.closeEmitted === false) {
stream5.on("error", (err2) => {
reject(err2);
}).on("close", () => {
reject(new TypeError("unusable"));
});
} else {
reject(rState.errored ?? new TypeError("unusable"));
}
} else {
queueMicrotask(() => {
stream5[kConsume] = {
type,
stream: stream5,
resolve,
reject,
length: 0,
body: []
};
stream5.on("error", function(err2) {
consumeFinish(this[kConsume], err2);
}).on("close", function() {
if (this[kConsume].body !== null) {
consumeFinish(this[kConsume], new RequestAbortedError());
}
});
consumeStart(stream5[kConsume]);
});
}
});
}
function consumeStart(consume2) {
if (consume2.body === null) {
return;
}
const { _readableState: state } = consume2.stream;
if (state.bufferIndex) {
const start = state.bufferIndex;
const end2 = state.buffer.length;
for (let n = start; n < end2; n++) {
consumePush(consume2, state.buffer[n]);
}
} else {
for (const chunk of state.buffer) {
consumePush(consume2, chunk);
}
}
if (state.endEmitted) {
consumeEnd(this[kConsume]);
} else {
consume2.stream.on("end", function() {
consumeEnd(this[kConsume]);
});
}
consume2.stream.resume();
while (consume2.stream.read() != null) {
}
}
function chunksDecode(chunks, length) {
if (chunks.length === 0 || length === 0) {
return "";
}
const buffer = chunks.length === 1 ? chunks[0] : Buffer.concat(chunks, length);
const bufferLength = buffer.length;
const start = bufferLength > 2 && buffer[0] === 239 && buffer[1] === 187 && buffer[2] === 191 ? 3 : 0;
return buffer.utf8Slice(start, bufferLength);
}
function chunksConcat(chunks, length) {
if (chunks.length === 0 || length === 0) {
return new Uint8Array(0);
}
if (chunks.length === 1) {
return new Uint8Array(chunks[0]);
}
const buffer = new Uint8Array(Buffer.allocUnsafeSlow(length).buffer);
let offset = 0;
for (let i = 0; i < chunks.length; ++i) {
const chunk = chunks[i];
buffer.set(chunk, offset);
offset += chunk.length;
}
return buffer;
}
function consumeEnd(consume2) {
const { type, body, resolve, stream: stream5, length } = consume2;
try {
if (type === "text") {
resolve(chunksDecode(body, length));
} else if (type === "json") {
resolve(JSON.parse(chunksDecode(body, length)));
} else if (type === "arrayBuffer") {
resolve(chunksConcat(body, length).buffer);
} else if (type === "blob") {
resolve(new Blob(body, { type: stream5[kContentType] }));
} else if (type === "bytes") {
resolve(chunksConcat(body, length));
}
consumeFinish(consume2);
} catch (err2) {
stream5.destroy(err2);
}
}
function consumePush(consume2, chunk) {
consume2.length += chunk.length;
consume2.body.push(chunk);
}
function consumeFinish(consume2, err2) {
if (consume2.body === null) {
return;
}
if (err2) {
consume2.reject(err2);
} else {
consume2.resolve();
}
consume2.type = null;
consume2.stream = null;
consume2.resolve = null;
consume2.reject = null;
consume2.length = 0;
consume2.body = null;
}
module2.exports = { Readable: BodyReadable, chunksDecode };
}
});
// node_modules/undici/lib/api/util.js
var require_util4 = __commonJS({
"node_modules/undici/lib/api/util.js"(exports2, module2) {
var assert = require("node:assert");
var {
ResponseStatusCodeError
} = require_errors();
var { chunksDecode } = require_readable();
var CHUNK_LIMIT = 128 * 1024;
async function getResolveErrorBodyCallback({ callback, body, contentType, statusCode, statusMessage, headers }) {
assert(body);
let chunks = [];
let length = 0;
try {
for await (const chunk of body) {
chunks.push(chunk);
length += chunk.length;
if (length > CHUNK_LIMIT) {
chunks = [];
length = 0;
break;
}
}
} catch {
chunks = [];
length = 0;
}
const message = `Response status code ${statusCode}${statusMessage ? `: ${statusMessage}` : ""}`;
if (statusCode === 204 || !contentType || !length) {
queueMicrotask(() => callback(new ResponseStatusCodeError(message, statusCode, headers)));
return;
}
const stackTraceLimit = Error.stackTraceLimit;
Error.stackTraceLimit = 0;
let payload;
try {
if (isContentTypeApplicationJson(contentType)) {
payload = JSON.parse(chunksDecode(chunks, length));
} else if (isContentTypeText(contentType)) {
payload = chunksDecode(chunks, length);
}
} catch {
} finally {
Error.stackTraceLimit = stackTraceLimit;
}
queueMicrotask(() => callback(new ResponseStatusCodeError(message, statusCode, headers, payload)));
}
var isContentTypeApplicationJson = (contentType) => {
return contentType.length > 15 && contentType[11] === "/" && contentType[0] === "a" && contentType[1] === "p" && contentType[2] === "p" && contentType[3] === "l" && contentType[4] === "i" && contentType[5] === "c" && contentType[6] === "a" && contentType[7] === "t" && contentType[8] === "i" && contentType[9] === "o" && contentType[10] === "n" && contentType[12] === "j" && contentType[13] === "s" && contentType[14] === "o" && contentType[15] === "n";
};
var isContentTypeText = (contentType) => {
return contentType.length > 4 && contentType[4] === "/" && contentType[0] === "t" && contentType[1] === "e" && contentType[2] === "x" && contentType[3] === "t";
};
module2.exports = {
getResolveErrorBodyCallback,
isContentTypeApplicationJson,
isContentTypeText
};
}
});
// node_modules/undici/lib/api/api-request.js
var require_api_request = __commonJS({
"node_modules/undici/lib/api/api-request.js"(exports2, module2) {
"use strict";
var assert = require("node:assert");
var { Readable: Readable2 } = require_readable();
var { InvalidArgumentError, RequestAbortedError } = require_errors();
var util5 = require_util2();
var { getResolveErrorBodyCallback } = require_util4();
var { AsyncResource } = require("node:async_hooks");
var RequestHandler = class extends AsyncResource {
constructor(opts, callback) {
if (!opts || typeof opts !== "object") {
throw new InvalidArgumentError("invalid opts");
}
const { signal, method, opaque, body, onInfo, responseHeaders, throwOnError, highWaterMark } = opts;
try {
if (typeof callback !== "function") {
throw new InvalidArgumentError("invalid callback");
}
if (highWaterMark && (typeof highWaterMark !== "number" || highWaterMark < 0)) {
throw new InvalidArgumentError("invalid highWaterMark");
}
if (signal && typeof signal.on !== "function" && typeof signal.addEventListener !== "function") {
throw new InvalidArgumentError("signal must be an EventEmitter or EventTarget");
}
if (method === "CONNECT") {
throw new InvalidArgumentError("invalid method");
}
if (onInfo && typeof onInfo !== "function") {
throw new InvalidArgumentError("invalid onInfo callback");
}
super("UNDICI_REQUEST");
} catch (err2) {
if (util5.isStream(body)) {
util5.destroy(body.on("error", util5.nop), err2);
}
throw err2;
}
this.method = method;
this.responseHeaders = responseHeaders || null;
this.opaque = opaque || null;
this.callback = callback;
this.res = null;
this.abort = null;
this.body = body;
this.trailers = {};
this.context = null;
this.onInfo = onInfo || null;
this.throwOnError = throwOnError;
this.highWaterMark = highWaterMark;
this.signal = signal;
this.reason = null;
this.removeAbortListener = null;
if (util5.isStream(body)) {
body.on("error", (err2) => {
this.onError(err2);
});
}
if (this.signal) {
if (this.signal.aborted) {
this.reason = this.signal.reason ?? new RequestAbortedError();
} else {
this.removeAbortListener = util5.addAbortListener(this.signal, () => {
this.reason = this.signal.reason ?? new RequestAbortedError();
if (this.res) {
util5.destroy(this.res.on("error", util5.nop), this.reason);
} else if (this.abort) {
this.abort(this.reason);
}
if (this.removeAbortListener) {
this.res?.off("close", this.removeAbortListener);
this.removeAbortListener();
this.removeAbortListener = null;
}
});
}
}
}
onConnect(abort, context) {
if (this.reason) {
abort(this.reason);
return;
}
assert(this.callback);
this.abort = abort;
this.context = context;
}
onHeaders(statusCode, rawHeaders, resume, statusMessage) {
const { callback, opaque, abort, context, responseHeaders, highWaterMark } = this;
const headers = responseHeaders === "raw" ? util5.parseRawHeaders(rawHeaders) : util5.parseHeaders(rawHeaders);
if (statusCode < 200) {
if (this.onInfo) {
this.onInfo({ statusCode, headers });
}
return;
}
const parsedHeaders = responseHeaders === "raw" ? util5.parseHeaders(rawHeaders) : headers;
const contentType = parsedHeaders["content-type"];
const contentLength = parsedHeaders["content-length"];
const res = new Readable2({
resume,
abort,
contentType,
contentLength: this.method !== "HEAD" && contentLength ? Number(contentLength) : null,
highWaterMark
});
if (this.removeAbortListener) {
res.on("close", this.removeAbortListener);
}
this.callback = null;
this.res = res;
if (callback !== null) {
if (this.throwOnError && statusCode >= 400) {
this.runInAsyncScope(
getResolveErrorBodyCallback,
null,
{ callback, body: res, contentType, statusCode, statusMessage, headers }
);
} else {
this.runInAsyncScope(callback, null, null, {
statusCode,
headers,
trailers: this.trailers,
opaque,
body: res,
context
});
}
}
}
onData(chunk) {
return this.res.push(chunk);
}
onComplete(trailers) {
util5.parseHeaders(trailers, this.trailers);
this.res.push(null);
}
onError(err2) {
const { res, callback, body, opaque } = this;
if (callback) {
this.callback = null;
queueMicrotask(() => {
this.runInAsyncScope(callback, null, err2, { opaque });
});
}
if (res) {
this.res = null;
queueMicrotask(() => {
util5.destroy(res, err2);
});
}
if (body) {
this.body = null;
util5.destroy(body, err2);
}
if (this.removeAbortListener) {
res?.off("close", this.removeAbortListener);
this.removeAbortListener();
this.removeAbortListener = null;
}
}
};
function request(opts, callback) {
if (callback === void 0) {
return new Promise((resolve, reject) => {
request.call(this, opts, (err2, data2) => {
return err2 ? reject(err2) : resolve(data2);
});
});
}
try {
this.dispatch(opts, new RequestHandler(opts, callback));
} catch (err2) {
if (typeof callback !== "function") {
throw err2;
}
const opaque = opts?.opaque;
queueMicrotask(() => callback(err2, { opaque }));
}
}
module2.exports = request;
module2.exports.RequestHandler = RequestHandler;
}
});
// node_modules/undici/lib/api/abort-signal.js
var require_abort_signal = __commonJS({
"node_modules/undici/lib/api/abort-signal.js"(exports2, module2) {
var { addAbortListener } = require_util2();
var { RequestAbortedError } = require_errors();
var kListener = Symbol("kListener");
var kSignal = Symbol("kSignal");
function abort(self2) {
if (self2.abort) {
self2.abort(self2[kSignal]?.reason);
} else {
self2.reason = self2[kSignal]?.reason ?? new RequestAbortedError();
}
removeSignal(self2);
}
function addSignal(self2, signal) {
self2.reason = null;
self2[kSignal] = null;
self2[kListener] = null;
if (!signal) {
return;
}
if (signal.aborted) {
abort(self2);
return;
}
self2[kSignal] = signal;
self2[kListener] = () => {
abort(self2);
};
addAbortListener(self2[kSignal], self2[kListener]);
}
function removeSignal(self2) {
if (!self2[kSignal]) {
return;
}
if ("removeEventListener" in self2[kSignal]) {
self2[kSignal].removeEventListener("abort", self2[kListener]);
} else {
self2[kSignal].removeListener("abort", self2[kListener]);
}
self2[kSignal] = null;
self2[kListener] = null;
}
module2.exports = {
addSignal,
removeSignal
};
}
});
// node_modules/undici/lib/api/api-stream.js
var require_api_stream = __commonJS({
"node_modules/undici/lib/api/api-stream.js"(exports2, module2) {
"use strict";
var assert = require("node:assert");
var { finished, PassThrough } = require("node:stream");
var { InvalidArgumentError, InvalidReturnValueError } = require_errors();
var util5 = require_util2();
var { getResolveErrorBodyCallback } = require_util4();
var { AsyncResource } = require("node:async_hooks");
var { addSignal, removeSignal } = require_abort_signal();
var StreamHandler = class extends AsyncResource {
constructor(opts, factory, callback) {
if (!opts || typeof opts !== "object") {
throw new InvalidArgumentError("invalid opts");
}
const { signal, method, opaque, body, onInfo, responseHeaders, throwOnError } = opts;
try {
if (typeof callback !== "function") {
throw new InvalidArgumentError("invalid callback");
}
if (typeof factory !== "function") {
throw new InvalidArgumentError("invalid factory");
}
if (signal && typeof signal.on !== "function" && typeof signal.addEventListener !== "function") {
throw new InvalidArgumentError("signal must be an EventEmitter or EventTarget");
}
if (method === "CONNECT") {
throw new InvalidArgumentError("invalid method");
}
if (onInfo && typeof onInfo !== "function") {
throw new InvalidArgumentError("invalid onInfo callback");
}
super("UNDICI_STREAM");
} catch (err2) {
if (util5.isStream(body)) {
util5.destroy(body.on("error", util5.nop), err2);
}
throw err2;
}
this.responseHeaders = responseHeaders || null;
this.opaque = opaque || null;
this.factory = factory;
this.callback = callback;
this.res = null;
this.abort = null;
this.context = null;
this.trailers = null;
this.body = body;
this.onInfo = onInfo || null;
this.throwOnError = throwOnError || false;
if (util5.isStream(body)) {
body.on("error", (err2) => {
this.onError(err2);
});
}
addSignal(this, signal);
}
onConnect(abort, context) {
if (this.reason) {
abort(this.reason);
return;
}
assert(this.callback);
this.abort = abort;
this.context = context;
}
onHeaders(statusCode, rawHeaders, resume, statusMessage) {
const { factory, opaque, context, callback, responseHeaders } = this;
const headers = responseHeaders === "raw" ? util5.parseRawHeaders(rawHeaders) : util5.parseHeaders(rawHeaders);
if (statusCode < 200) {
if (this.onInfo) {
this.onInfo({ statusCode, headers });
}
return;
}
this.factory = null;
let res;
if (this.throwOnError && statusCode >= 400) {
const parsedHeaders = responseHeaders === "raw" ? util5.parseHeaders(rawHeaders) : headers;
const contentType = parsedHeaders["content-type"];
res = new PassThrough();
this.callback = null;
this.runInAsyncScope(
getResolveErrorBodyCallback,
null,
{ callback, body: res, contentType, statusCode, statusMessage, headers }
);
} else {
if (factory === null) {
return;
}
res = this.runInAsyncScope(factory, null, {
statusCode,
headers,
opaque,
context
});
if (!res || typeof res.write !== "function" || typeof res.end !== "function" || typeof res.on !== "function") {
throw new InvalidReturnValueError("expected Writable");
}
finished(res, { readable: false }, (err2) => {
const { callback: callback2, res: res2, opaque: opaque2, trailers, abort } = this;
this.res = null;
if (err2 || !res2.readable) {
util5.destroy(res2, err2);
}
this.callback = null;
this.runInAsyncScope(callback2, null, err2 || null, { opaque: opaque2, trailers });
if (err2) {
abort();
}
});
}
res.on("drain", resume);
this.res = res;
const needDrain = res.writableNeedDrain !== void 0 ? res.writableNeedDrain : res._writableState?.needDrain;
return needDrain !== true;
}
onData(chunk) {
const { res } = this;
return res ? res.write(chunk) : true;
}
onComplete(trailers) {
const { res } = this;
removeSignal(this);
if (!res) {
return;
}
this.trailers = util5.parseHeaders(trailers);
res.end();
}
onError(err2) {
const { res, callback, opaque, body } = this;
removeSignal(this);
this.factory = null;
if (res) {
this.res = null;
util5.destroy(res, err2);
} else if (callback) {
this.callback = null;
queueMicrotask(() => {
this.runInAsyncScope(callback, null, err2, { opaque });
});
}
if (body) {
this.body = null;
util5.destroy(body, err2);
}
}
};
function stream5(opts, factory, callback) {
if (callback === void 0) {
return new Promise((resolve, reject) => {
stream5.call(this, opts, factory, (err2, data2) => {
return err2 ? reject(err2) : resolve(data2);
});
});
}
try {
this.dispatch(opts, new StreamHandler(opts, factory, callback));
} catch (err2) {
if (typeof callback !== "function") {
throw err2;
}
const opaque = opts?.opaque;
queueMicrotask(() => callback(err2, { opaque }));
}
}
module2.exports = stream5;
}
});
// node_modules/undici/lib/api/api-pipeline.js
var require_api_pipeline = __commonJS({
"node_modules/undici/lib/api/api-pipeline.js"(exports2, module2) {
"use strict";
var {
Readable: Readable2,
Duplex,
PassThrough
} = require("node:stream");
var {
InvalidArgumentError,
InvalidReturnValueError,
RequestAbortedError
} = require_errors();
var util5 = require_util2();
var { AsyncResource } = require("node:async_hooks");
var { addSignal, removeSignal } = require_abort_signal();
var assert = require("node:assert");
var kResume = Symbol("resume");
var PipelineRequest = class extends Readable2 {
constructor() {
super({ autoDestroy: true });
this[kResume] = null;
}
_read() {
const { [kResume]: resume } = this;
if (resume) {
this[kResume] = null;
resume();
}
}
_destroy(err2, callback) {
this._read();
callback(err2);
}
};
var PipelineResponse = class extends Readable2 {
constructor(resume) {
super({ autoDestroy: true });
this[kResume] = resume;
}
_read() {
this[kResume]();
}
_destroy(err2, callback) {
if (!err2 && !this._readableState.endEmitted) {
err2 = new RequestAbortedError();
}
callback(err2);
}
};
var PipelineHandler = class extends AsyncResource {
constructor(opts, handler) {
if (!opts || typeof opts !== "object") {
throw new InvalidArgumentError("invalid opts");
}
if (typeof handler !== "function") {
throw new InvalidArgumentError("invalid handler");
}
const { signal, method, opaque, onInfo, responseHeaders } = opts;
if (signal && typeof signal.on !== "function" && typeof signal.addEventListener !== "function") {
throw new InvalidArgumentError("signal must be an EventEmitter or EventTarget");
}
if (method === "CONNECT") {
throw new InvalidArgumentError("invalid method");
}
if (onInfo && typeof onInfo !== "function") {
throw new InvalidArgumentError("invalid onInfo callback");
}
super("UNDICI_PIPELINE");
this.opaque = opaque || null;
this.responseHeaders = responseHeaders || null;
this.handler = handler;
this.abort = null;
this.context = null;
this.onInfo = onInfo || null;
this.req = new PipelineRequest().on("error", util5.nop);
this.ret = new Duplex({
readableObjectMode: opts.objectMode,
autoDestroy: true,
read: () => {
const { body } = this;
if (body?.resume) {
body.resume();
}
},
write: (chunk, encoding, callback) => {
const { req } = this;
if (req.push(chunk, encoding) || req._readableState.destroyed) {
callback();
} else {
req[kResume] = callback;
}
},
destroy: (err2, callback) => {
const { body, req, res, ret, abort } = this;
if (!err2 && !ret._readableState.endEmitted) {
err2 = new RequestAbortedError();
}
if (abort && err2) {
abort();
}
util5.destroy(body, err2);
util5.destroy(req, err2);
util5.destroy(res, err2);
removeSignal(this);
callback(err2);
}
}).on("prefinish", () => {
const { req } = this;
req.push(null);
});
this.res = null;
addSignal(this, signal);
}
onConnect(abort, context) {
const { ret, res } = this;
if (this.reason) {
abort(this.reason);
return;
}
assert(!res, "pipeline cannot be retried");
assert(!ret.destroyed);
this.abort = abort;
this.context = context;
}
onHeaders(statusCode, rawHeaders, resume) {
const { opaque, handler, context } = this;
if (statusCode < 200) {
if (this.onInfo) {
const headers = this.responseHeaders === "raw" ? util5.parseRawHeaders(rawHeaders) : util5.parseHeaders(rawHeaders);
this.onInfo({ statusCode, headers });
}
return;
}
this.res = new PipelineResponse(resume);
let body;
try {
this.handler = null;
const headers = this.responseHeaders === "raw" ? util5.parseRawHeaders(rawHeaders) : util5.parseHeaders(rawHeaders);
body = this.runInAsyncScope(handler, null, {
statusCode,
headers,
opaque,
body: this.res,
context
});
} catch (err2) {
this.res.on("error", util5.nop);
throw err2;
}
if (!body || typeof body.on !== "function") {
throw new InvalidReturnValueError("expected Readable");
}
body.on("data", (chunk) => {
const { ret, body: body2 } = this;
if (!ret.push(chunk) && body2.pause) {
body2.pause();
}
}).on("error", (err2) => {
const { ret } = this;
util5.destroy(ret, err2);
}).on("end", () => {
const { ret } = this;
ret.push(null);
}).on("close", () => {
const { ret } = this;
if (!ret._readableState.ended) {
util5.destroy(ret, new RequestAbortedError());
}
});
this.body = body;
}
onData(chunk) {
const { res } = this;
return res.push(chunk);
}
onComplete(trailers) {
const { res } = this;
res.push(null);
}
onError(err2) {
const { ret } = this;
this.handler = null;
util5.destroy(ret, err2);
}
};
function pipeline(opts, handler) {
try {
const pipelineHandler = new PipelineHandler(opts, handler);
this.dispatch({ ...opts, body: pipelineHandler.req }, pipelineHandler);
return pipelineHandler.ret;
} catch (err2) {
return new PassThrough().destroy(err2);
}
}
module2.exports = pipeline;
}
});
// node_modules/undici/lib/api/api-upgrade.js
var require_api_upgrade = __commonJS({
"node_modules/undici/lib/api/api-upgrade.js"(exports2, module2) {
"use strict";
var { InvalidArgumentError, SocketError } = require_errors();
var { AsyncResource } = require("node:async_hooks");
var util5 = require_util2();
var { addSignal, removeSignal } = require_abort_signal();
var assert = require("node:assert");
var UpgradeHandler = class extends AsyncResource {
constructor(opts, callback) {
if (!opts || typeof opts !== "object") {
throw new InvalidArgumentError("invalid opts");
}
if (typeof callback !== "function") {
throw new InvalidArgumentError("invalid callback");
}
const { signal, opaque, responseHeaders } = opts;
if (signal && typeof signal.on !== "function" && typeof signal.addEventListener !== "function") {
throw new InvalidArgumentError("signal must be an EventEmitter or EventTarget");
}
super("UNDICI_UPGRADE");
this.responseHeaders = responseHeaders || null;
this.opaque = opaque || null;
this.callback = callback;
this.abort = null;
this.context = null;
addSignal(this, signal);
}
onConnect(abort, context) {
if (this.reason) {
abort(this.reason);
return;
}
assert(this.callback);
this.abort = abort;
this.context = null;
}
onHeaders() {
throw new SocketError("bad upgrade", null);
}
onUpgrade(statusCode, rawHeaders, socket) {
assert(statusCode === 101);
const { callback, opaque, context } = this;
removeSignal(this);
this.callback = null;
const headers = this.responseHeaders === "raw" ? util5.parseRawHeaders(rawHeaders) : util5.parseHeaders(rawHeaders);
this.runInAsyncScope(callback, null, null, {
headers,
socket,
opaque,
context
});
}
onError(err2) {
const { callback, opaque } = this;
removeSignal(this);
if (callback) {
this.callback = null;
queueMicrotask(() => {
this.runInAsyncScope(callback, null, err2, { opaque });
});
}
}
};
function upgrade(opts, callback) {
if (callback === void 0) {
return new Promise((resolve, reject) => {
upgrade.call(this, opts, (err2, data2) => {
return err2 ? reject(err2) : resolve(data2);
});
});
}
try {
const upgradeHandler = new UpgradeHandler(opts, callback);
this.dispatch({
...opts,
method: opts.method || "GET",
upgrade: opts.protocol || "Websocket"
}, upgradeHandler);
} catch (err2) {
if (typeof callback !== "function") {
throw err2;
}
const opaque = opts?.opaque;
queueMicrotask(() => callback(err2, { opaque }));
}
}
module2.exports = upgrade;
}
});
// node_modules/undici/lib/api/api-connect.js
var require_api_connect = __commonJS({
"node_modules/undici/lib/api/api-connect.js"(exports2, module2) {
"use strict";
var assert = require("node:assert");
var { AsyncResource } = require("node:async_hooks");
var { InvalidArgumentError, SocketError } = require_errors();
var util5 = require_util2();
var { addSignal, removeSignal } = require_abort_signal();
var ConnectHandler = class extends AsyncResource {
constructor(opts, callback) {
if (!opts || typeof opts !== "object") {
throw new InvalidArgumentError("invalid opts");
}
if (typeof callback !== "function") {
throw new InvalidArgumentError("invalid callback");
}
const { signal, opaque, responseHeaders } = opts;
if (signal && typeof signal.on !== "function" && typeof signal.addEventListener !== "function") {
throw new InvalidArgumentError("signal must be an EventEmitter or EventTarget");
}
super("UNDICI_CONNECT");
this.opaque = opaque || null;
this.responseHeaders = responseHeaders || null;
this.callback = callback;
this.abort = null;
addSignal(this, signal);
}
onConnect(abort, context) {
if (this.reason) {
abort(this.reason);
return;
}
assert(this.callback);
this.abort = abort;
this.context = context;
}
onHeaders() {
throw new SocketError("bad connect", null);
}
onUpgrade(statusCode, rawHeaders, socket) {
const { callback, opaque, context } = this;
removeSignal(this);
this.callback = null;
let headers = rawHeaders;
if (headers != null) {
headers = this.responseHeaders === "raw" ? util5.parseRawHeaders(rawHeaders) : util5.parseHeaders(rawHeaders);
}
this.runInAsyncScope(callback, null, null, {
statusCode,
headers,
socket,
opaque,
context
});
}
onError(err2) {
const { callback, opaque } = this;
removeSignal(this);
if (callback) {
this.callback = null;
queueMicrotask(() => {
this.runInAsyncScope(callback, null, err2, { opaque });
});
}
}
};
function connect(opts, callback) {
if (callback === void 0) {
return new Promise((resolve, reject) => {
connect.call(this, opts, (err2, data2) => {
return err2 ? reject(err2) : resolve(data2);
});
});
}
try {
const connectHandler = new ConnectHandler(opts, callback);
this.dispatch({ ...opts, method: "CONNECT" }, connectHandler);
} catch (err2) {
if (typeof callback !== "function") {
throw err2;
}
const opaque = opts?.opaque;
queueMicrotask(() => callback(err2, { opaque }));
}
}
module2.exports = connect;
}
});
// node_modules/undici/lib/api/index.js
var require_api = __commonJS({
"node_modules/undici/lib/api/index.js"(exports2, module2) {
"use strict";
module2.exports.request = require_api_request();
module2.exports.stream = require_api_stream();
module2.exports.pipeline = require_api_pipeline();
module2.exports.upgrade = require_api_upgrade();
module2.exports.connect = require_api_connect();
}
});
// node_modules/undici/lib/mock/mock-errors.js
var require_mock_errors = __commonJS({
"node_modules/undici/lib/mock/mock-errors.js"(exports2, module2) {
"use strict";
var { UndiciError } = require_errors();
var MockNotMatchedError = class _MockNotMatchedError extends UndiciError {
constructor(message) {
super(message);
Error.captureStackTrace(this, _MockNotMatchedError);
this.name = "MockNotMatchedError";
this.message = message || "The request does not match any registered mock dispatches";
this.code = "UND_MOCK_ERR_MOCK_NOT_MATCHED";
}
};
module2.exports = {
MockNotMatchedError
};
}
});
// node_modules/undici/lib/mock/mock-symbols.js
var require_mock_symbols = __commonJS({
"node_modules/undici/lib/mock/mock-symbols.js"(exports2, module2) {
"use strict";
module2.exports = {
kAgent: Symbol("agent"),
kOptions: Symbol("options"),
kFactory: Symbol("factory"),
kDispatches: Symbol("dispatches"),
kDispatchKey: Symbol("dispatch key"),
kDefaultHeaders: Symbol("default headers"),
kDefaultTrailers: Symbol("default trailers"),
kContentLength: Symbol("content length"),
kMockAgent: Symbol("mock agent"),
kMockAgentSet: Symbol("mock agent set"),
kMockAgentGet: Symbol("mock agent get"),
kMockDispatch: Symbol("mock dispatch"),
kClose: Symbol("close"),
kOriginalClose: Symbol("original agent close"),
kOrigin: Symbol("origin"),
kIsMockActive: Symbol("is mock active"),
kNetConnect: Symbol("net connect"),
kGetNetConnect: Symbol("get net connect"),
kConnected: Symbol("connected")
};
}
});
// node_modules/undici/lib/mock/mock-utils.js
var require_mock_utils = __commonJS({
"node_modules/undici/lib/mock/mock-utils.js"(exports2, module2) {
"use strict";
var { MockNotMatchedError } = require_mock_errors();
var {
kDispatches,
kMockAgent,
kOriginalDispatch,
kOrigin,
kGetNetConnect
} = require_mock_symbols();
var { buildURL: buildURL2 } = require_util2();
var { STATUS_CODES } = require("node:http");
var {
types: {
isPromise
}
} = require("node:util");
function matchValue(match, value) {
if (typeof match === "string") {
return match === value;
}
if (match instanceof RegExp) {
return match.test(value);
}
if (typeof match === "function") {
return match(value) === true;
}
return false;
}
function lowerCaseEntries(headers) {
return Object.fromEntries(
Object.entries(headers).map(([headerName, headerValue]) => {
return [headerName.toLocaleLowerCase(), headerValue];
})
);
}
function getHeaderByName(headers, key) {
if (Array.isArray(headers)) {
for (let i = 0; i < headers.length; i += 2) {
if (headers[i].toLocaleLowerCase() === key.toLocaleLowerCase()) {
return headers[i + 1];
}
}
return void 0;
} else if (typeof headers.get === "function") {
return headers.get(key);
} else {
return lowerCaseEntries(headers)[key.toLocaleLowerCase()];
}
}
function buildHeadersFromArray(headers) {
const clone2 = headers.slice();
const entries = [];
for (let index2 = 0; index2 < clone2.length; index2 += 2) {
entries.push([clone2[index2], clone2[index2 + 1]]);
}
return Object.fromEntries(entries);
}
function matchHeaders(mockDispatch2, headers) {
if (typeof mockDispatch2.headers === "function") {
if (Array.isArray(headers)) {
headers = buildHeadersFromArray(headers);
}
return mockDispatch2.headers(headers ? lowerCaseEntries(headers) : {});
}
if (typeof mockDispatch2.headers === "undefined") {
return true;
}
if (typeof headers !== "object" || typeof mockDispatch2.headers !== "object") {
return false;
}
for (const [matchHeaderName, matchHeaderValue2] of Object.entries(mockDispatch2.headers)) {
const headerValue = getHeaderByName(headers, matchHeaderName);
if (!matchValue(matchHeaderValue2, headerValue)) {
return false;
}
}
return true;
}
function safeUrl(path) {
if (typeof path !== "string") {
return path;
}
const pathSegments = path.split("?");
if (pathSegments.length !== 2) {
return path;
}
const qp = new URLSearchParams(pathSegments.pop());
qp.sort();
return [...pathSegments, qp.toString()].join("?");
}
function matchKey(mockDispatch2, { path, method, body, headers }) {
const pathMatch = matchValue(mockDispatch2.path, path);
const methodMatch = matchValue(mockDispatch2.method, method);
const bodyMatch = typeof mockDispatch2.body !== "undefined" ? matchValue(mockDispatch2.body, body) : true;
const headersMatch = matchHeaders(mockDispatch2, headers);
return pathMatch && methodMatch && bodyMatch && headersMatch;
}
function getResponseData(data2) {
if (Buffer.isBuffer(data2)) {
return data2;
} else if (data2 instanceof Uint8Array) {
return data2;
} else if (data2 instanceof ArrayBuffer) {
return data2;
} else if (typeof data2 === "object") {
return JSON.stringify(data2);
} else {
return data2.toString();
}
}
function getMockDispatch(mockDispatches, key) {
const basePath = key.query ? buildURL2(key.path, key.query) : key.path;
const resolvedPath = typeof basePath === "string" ? safeUrl(basePath) : basePath;
let matchedMockDispatches = mockDispatches.filter(({ consumed }) => !consumed).filter(({ path }) => matchValue(safeUrl(path), resolvedPath));
if (matchedMockDispatches.length === 0) {
throw new MockNotMatchedError(`Mock dispatch not matched for path '${resolvedPath}'`);
}
matchedMockDispatches = matchedMockDispatches.filter(({ method }) => matchValue(method, key.method));
if (matchedMockDispatches.length === 0) {
throw new MockNotMatchedError(`Mock dispatch not matched for method '${key.method}' on path '${resolvedPath}'`);
}
matchedMockDispatches = matchedMockDispatches.filter(({ body }) => typeof body !== "undefined" ? matchValue(body, key.body) : true);
if (matchedMockDispatches.length === 0) {
throw new MockNotMatchedError(`Mock dispatch not matched for body '${key.body}' on path '${resolvedPath}'`);
}
matchedMockDispatches = matchedMockDispatches.filter((mockDispatch2) => matchHeaders(mockDispatch2, key.headers));
if (matchedMockDispatches.length === 0) {
const headers = typeof key.headers === "object" ? JSON.stringify(key.headers) : key.headers;
throw new MockNotMatchedError(`Mock dispatch not matched for headers '${headers}' on path '${resolvedPath}'`);
}
return matchedMockDispatches[0];
}
function addMockDispatch(mockDispatches, key, data2) {
const baseData = { timesInvoked: 0, times: 1, persist: false, consumed: false };
const replyData = typeof data2 === "function" ? { callback: data2 } : { ...data2 };
const newMockDispatch = { ...baseData, ...key, pending: true, data: { error: null, ...replyData } };
mockDispatches.push(newMockDispatch);
return newMockDispatch;
}
function deleteMockDispatch(mockDispatches, key) {
const index2 = mockDispatches.findIndex((dispatch) => {
if (!dispatch.consumed) {
return false;
}
return matchKey(dispatch, key);
});
if (index2 !== -1) {
mockDispatches.splice(index2, 1);
}
}
function buildKey(opts) {
const { path, method, body, headers, query } = opts;
return {
path,
method,
body,
headers,
query
};
}
function generateKeyValues(data2) {
const keys = Object.keys(data2);
const result = [];
for (let i = 0; i < keys.length; ++i) {
const key = keys[i];
const value = data2[key];
const name = Buffer.from(`${key}`);
if (Array.isArray(value)) {
for (let j = 0; j < value.length; ++j) {
result.push(name, Buffer.from(`${value[j]}`));
}
} else {
result.push(name, Buffer.from(`${value}`));
}
}
return result;
}
function getStatusText(statusCode) {
return STATUS_CODES[statusCode] || "unknown";
}
async function getResponse(body) {
const buffers = [];
for await (const data2 of body) {
buffers.push(data2);
}
return Buffer.concat(buffers).toString("utf8");
}
function mockDispatch(opts, handler) {
const key = buildKey(opts);
const mockDispatch2 = getMockDispatch(this[kDispatches], key);
mockDispatch2.timesInvoked++;
if (mockDispatch2.data.callback) {
mockDispatch2.data = { ...mockDispatch2.data, ...mockDispatch2.data.callback(opts) };
}
const { data: { statusCode, data: data2, headers, trailers, error }, delay, persist } = mockDispatch2;
const { timesInvoked, times } = mockDispatch2;
mockDispatch2.consumed = !persist && timesInvoked >= times;
mockDispatch2.pending = timesInvoked < times;
if (error !== null) {
deleteMockDispatch(this[kDispatches], key);
handler.onError(error);
return true;
}
if (typeof delay === "number" && delay > 0) {
setTimeout(() => {
handleReply(this[kDispatches]);
}, delay);
} else {
handleReply(this[kDispatches]);
}
function handleReply(mockDispatches, _data = data2) {
const optsHeaders = Array.isArray(opts.headers) ? buildHeadersFromArray(opts.headers) : opts.headers;
const body = typeof _data === "function" ? _data({ ...opts, headers: optsHeaders }) : _data;
if (isPromise(body)) {
body.then((newData) => handleReply(mockDispatches, newData));
return;
}
const responseData = getResponseData(body);
const responseHeaders = generateKeyValues(headers);
const responseTrailers = generateKeyValues(trailers);
handler.onConnect?.((err2) => handler.onError(err2), null);
handler.onHeaders?.(statusCode, responseHeaders, resume, getStatusText(statusCode));
handler.onData?.(Buffer.from(responseData));
handler.onComplete?.(responseTrailers);
deleteMockDispatch(mockDispatches, key);
}
function resume() {
}
return true;
}
function buildMockDispatch() {
const agent = this[kMockAgent];
const origin2 = this[kOrigin];
const originalDispatch = this[kOriginalDispatch];
return function dispatch(opts, handler) {
if (agent.isMockActive) {
try {
mockDispatch.call(this, opts, handler);
} catch (error) {
if (error instanceof MockNotMatchedError) {
const netConnect = agent[kGetNetConnect]();
if (netConnect === false) {
throw new MockNotMatchedError(`${error.message}: subsequent request to origin ${origin2} was not allowed (net.connect disabled)`);
}
if (checkNetConnect(netConnect, origin2)) {
originalDispatch.call(this, opts, handler);
} else {
throw new MockNotMatchedError(`${error.message}: subsequent request to origin ${origin2} was not allowed (net.connect is not enabled for this origin)`);
}
} else {
throw error;
}
}
} else {
originalDispatch.call(this, opts, handler);
}
};
}
function checkNetConnect(netConnect, origin2) {
const url2 = new URL(origin2);
if (netConnect === true) {
return true;
} else if (Array.isArray(netConnect) && netConnect.some((matcher) => matchValue(matcher, url2.host))) {
return true;
}
return false;
}
function buildMockOptions(opts) {
if (opts) {
const { agent, ...mockOptions } = opts;
return mockOptions;
}
}
module2.exports = {
getResponseData,
getMockDispatch,
addMockDispatch,
deleteMockDispatch,
buildKey,
generateKeyValues,
matchValue,
getResponse,
getStatusText,
mockDispatch,
buildMockDispatch,
checkNetConnect,
buildMockOptions,
getHeaderByName,
buildHeadersFromArray
};
}
});
// node_modules/undici/lib/mock/mock-interceptor.js
var require_mock_interceptor = __commonJS({
"node_modules/undici/lib/mock/mock-interceptor.js"(exports2, module2) {
"use strict";
var { getResponseData, buildKey, addMockDispatch } = require_mock_utils();
var {
kDispatches,
kDispatchKey,
kDefaultHeaders,
kDefaultTrailers,
kContentLength,
kMockDispatch
} = require_mock_symbols();
var { InvalidArgumentError } = require_errors();
var { buildURL: buildURL2 } = require_util2();
var MockScope = class {
constructor(mockDispatch) {
this[kMockDispatch] = mockDispatch;
}
/**
* Delay a reply by a set amount in ms.
*/
delay(waitInMs) {
if (typeof waitInMs !== "number" || !Number.isInteger(waitInMs) || waitInMs <= 0) {
throw new InvalidArgumentError("waitInMs must be a valid integer > 0");
}
this[kMockDispatch].delay = waitInMs;
return this;
}
/**
* For a defined reply, never mark as consumed.
*/
persist() {
this[kMockDispatch].persist = true;
return this;
}
/**
* Allow one to define a reply for a set amount of matching requests.
*/
times(repeatTimes) {
if (typeof repeatTimes !== "number" || !Number.isInteger(repeatTimes) || repeatTimes <= 0) {
throw new InvalidArgumentError("repeatTimes must be a valid integer > 0");
}
this[kMockDispatch].times = repeatTimes;
return this;
}
};
var MockInterceptor = class {
constructor(opts, mockDispatches) {
if (typeof opts !== "object") {
throw new InvalidArgumentError("opts must be an object");
}
if (typeof opts.path === "undefined") {
throw new InvalidArgumentError("opts.path must be defined");
}
if (typeof opts.method === "undefined") {
opts.method = "GET";
}
if (typeof opts.path === "string") {
if (opts.query) {
opts.path = buildURL2(opts.path, opts.query);
} else {
const parsedURL = new URL(opts.path, "data://");
opts.path = parsedURL.pathname + parsedURL.search;
}
}
if (typeof opts.method === "string") {
opts.method = opts.method.toUpperCase();
}
this[kDispatchKey] = buildKey(opts);
this[kDispatches] = mockDispatches;
this[kDefaultHeaders] = {};
this[kDefaultTrailers] = {};
this[kContentLength] = false;
}
createMockScopeDispatchData({ statusCode, data: data2, responseOptions }) {
const responseData = getResponseData(data2);
const contentLength = this[kContentLength] ? { "content-length": responseData.length } : {};
const headers = { ...this[kDefaultHeaders], ...contentLength, ...responseOptions.headers };
const trailers = { ...this[kDefaultTrailers], ...responseOptions.trailers };
return { statusCode, data: data2, headers, trailers };
}
validateReplyParameters(replyParameters) {
if (typeof replyParameters.statusCode === "undefined") {
throw new InvalidArgumentError("statusCode must be defined");
}
if (typeof replyParameters.responseOptions !== "object" || replyParameters.responseOptions === null) {
throw new InvalidArgumentError("responseOptions must be an object");
}
}
/**
* Mock an undici request with a defined reply.
*/
reply(replyOptionsCallbackOrStatusCode) {
if (typeof replyOptionsCallbackOrStatusCode === "function") {
const wrappedDefaultsCallback = (opts) => {
const resolvedData = replyOptionsCallbackOrStatusCode(opts);
if (typeof resolvedData !== "object" || resolvedData === null) {
throw new InvalidArgumentError("reply options callback must return an object");
}
const replyParameters2 = { data: "", responseOptions: {}, ...resolvedData };
this.validateReplyParameters(replyParameters2);
return {
...this.createMockScopeDispatchData(replyParameters2)
};
};
const newMockDispatch2 = addMockDispatch(this[kDispatches], this[kDispatchKey], wrappedDefaultsCallback);
return new MockScope(newMockDispatch2);
}
const replyParameters = {
statusCode: replyOptionsCallbackOrStatusCode,
data: arguments[1] === void 0 ? "" : arguments[1],
responseOptions: arguments[2] === void 0 ? {} : arguments[2]
};
this.validateReplyParameters(replyParameters);
const dispatchData = this.createMockScopeDispatchData(replyParameters);
const newMockDispatch = addMockDispatch(this[kDispatches], this[kDispatchKey], dispatchData);
return new MockScope(newMockDispatch);
}
/**
* Mock an undici request with a defined error.
*/
replyWithError(error) {
if (typeof error === "undefined") {
throw new InvalidArgumentError("error must be defined");
}
const newMockDispatch = addMockDispatch(this[kDispatches], this[kDispatchKey], { error });
return new MockScope(newMockDispatch);
}
/**
* Set default reply headers on the interceptor for subsequent replies
*/
defaultReplyHeaders(headers) {
if (typeof headers === "undefined") {
throw new InvalidArgumentError("headers must be defined");
}
this[kDefaultHeaders] = headers;
return this;
}
/**
* Set default reply trailers on the interceptor for subsequent replies
*/
defaultReplyTrailers(trailers) {
if (typeof trailers === "undefined") {
throw new InvalidArgumentError("trailers must be defined");
}
this[kDefaultTrailers] = trailers;
return this;
}
/**
* Set reply content length header for replies on the interceptor
*/
replyContentLength() {
this[kContentLength] = true;
return this;
}
};
module2.exports.MockInterceptor = MockInterceptor;
module2.exports.MockScope = MockScope;
}
});
// node_modules/undici/lib/mock/mock-client.js
var require_mock_client = __commonJS({
"node_modules/undici/lib/mock/mock-client.js"(exports2, module2) {
"use strict";
var { promisify } = require("node:util");
var Client = require_client();
var { buildMockDispatch } = require_mock_utils();
var {
kDispatches,
kMockAgent,
kClose,
kOriginalClose,
kOrigin,
kOriginalDispatch,
kConnected
} = require_mock_symbols();
var { MockInterceptor } = require_mock_interceptor();
var Symbols = require_symbols();
var { InvalidArgumentError } = require_errors();
var MockClient = class extends Client {
constructor(origin2, opts) {
super(origin2, opts);
if (!opts || !opts.agent || typeof opts.agent.dispatch !== "function") {
throw new InvalidArgumentError("Argument opts.agent must implement Agent");
}
this[kMockAgent] = opts.agent;
this[kOrigin] = origin2;
this[kDispatches] = [];
this[kConnected] = 1;
this[kOriginalDispatch] = this.dispatch;
this[kOriginalClose] = this.close.bind(this);
this.dispatch = buildMockDispatch.call(this);
this.close = this[kClose];
}
get [Symbols.kConnected]() {
return this[kConnected];
}
/**
* Sets up the base interceptor for mocking replies from undici.
*/
intercept(opts) {
return new MockInterceptor(opts, this[kDispatches]);
}
async [kClose]() {
await promisify(this[kOriginalClose])();
this[kConnected] = 0;
this[kMockAgent][Symbols.kClients].delete(this[kOrigin]);
}
};
module2.exports = MockClient;
}
});
// node_modules/undici/lib/mock/mock-pool.js
var require_mock_pool = __commonJS({
"node_modules/undici/lib/mock/mock-pool.js"(exports2, module2) {
"use strict";
var { promisify } = require("node:util");
var Pool = require_pool();
var { buildMockDispatch } = require_mock_utils();
var {
kDispatches,
kMockAgent,
kClose,
kOriginalClose,
kOrigin,
kOriginalDispatch,
kConnected
} = require_mock_symbols();
var { MockInterceptor } = require_mock_interceptor();
var Symbols = require_symbols();
var { InvalidArgumentError } = require_errors();
var MockPool = class extends Pool {
constructor(origin2, opts) {
super(origin2, opts);
if (!opts || !opts.agent || typeof opts.agent.dispatch !== "function") {
throw new InvalidArgumentError("Argument opts.agent must implement Agent");
}
this[kMockAgent] = opts.agent;
this[kOrigin] = origin2;
this[kDispatches] = [];
this[kConnected] = 1;
this[kOriginalDispatch] = this.dispatch;
this[kOriginalClose] = this.close.bind(this);
this.dispatch = buildMockDispatch.call(this);
this.close = this[kClose];
}
get [Symbols.kConnected]() {
return this[kConnected];
}
/**
* Sets up the base interceptor for mocking replies from undici.
*/
intercept(opts) {
return new MockInterceptor(opts, this[kDispatches]);
}
async [kClose]() {
await promisify(this[kOriginalClose])();
this[kConnected] = 0;
this[kMockAgent][Symbols.kClients].delete(this[kOrigin]);
}
};
module2.exports = MockPool;
}
});
// node_modules/undici/lib/mock/pluralizer.js
var require_pluralizer = __commonJS({
"node_modules/undici/lib/mock/pluralizer.js"(exports2, module2) {
"use strict";
var singulars = {
pronoun: "it",
is: "is",
was: "was",
this: "this"
};
var plurals = {
pronoun: "they",
is: "are",
was: "were",
this: "these"
};
module2.exports = class Pluralizer {
constructor(singular, plural) {
this.singular = singular;
this.plural = plural;
}
pluralize(count) {
const one = count === 1;
const keys = one ? singulars : plurals;
const noun = one ? this.singular : this.plural;
return { ...keys, count, noun };
}
};
}
});
// node_modules/undici/lib/mock/pending-interceptors-formatter.js
var require_pending_interceptors_formatter = __commonJS({
"node_modules/undici/lib/mock/pending-interceptors-formatter.js"(exports2, module2) {
"use strict";
var { Transform: Transform2 } = require("node:stream");
var { Console } = require("node:console");
var PERSISTENT = process.versions.icu ? "\u2705" : "Y ";
var NOT_PERSISTENT = process.versions.icu ? "\u274C" : "N ";
module2.exports = class PendingInterceptorsFormatter {
constructor({ disableColors } = {}) {
this.transform = new Transform2({
transform(chunk, _enc, cb) {
cb(null, chunk);
}
});
this.logger = new Console({
stdout: this.transform,
inspectOptions: {
colors: !disableColors && !process.env.CI
}
});
}
format(pendingInterceptors) {
const withPrettyHeaders = pendingInterceptors.map(
({ method, path, data: { statusCode }, persist, times, timesInvoked, origin: origin2 }) => ({
Method: method,
Origin: origin2,
Path: path,
"Status code": statusCode,
Persistent: persist ? PERSISTENT : NOT_PERSISTENT,
Invocations: timesInvoked,
Remaining: persist ? Infinity : times - timesInvoked
})
);
this.logger.table(withPrettyHeaders);
return this.transform.read().toString();
}
};
}
});
// node_modules/undici/lib/mock/mock-agent.js
var require_mock_agent = __commonJS({
"node_modules/undici/lib/mock/mock-agent.js"(exports2, module2) {
"use strict";
var { kClients } = require_symbols();
var Agent = require_agent();
var {
kAgent,
kMockAgentSet,
kMockAgentGet,
kDispatches,
kIsMockActive,
kNetConnect,
kGetNetConnect,
kOptions,
kFactory
} = require_mock_symbols();
var MockClient = require_mock_client();
var MockPool = require_mock_pool();
var { matchValue, buildMockOptions } = require_mock_utils();
var { InvalidArgumentError, UndiciError } = require_errors();
var Dispatcher = require_dispatcher();
var Pluralizer = require_pluralizer();
var PendingInterceptorsFormatter = require_pending_interceptors_formatter();
var MockAgent = class extends Dispatcher {
constructor(opts) {
super(opts);
this[kNetConnect] = true;
this[kIsMockActive] = true;
if (opts?.agent && typeof opts.agent.dispatch !== "function") {
throw new InvalidArgumentError("Argument opts.agent must implement Agent");
}
const agent = opts?.agent ? opts.agent : new Agent(opts);
this[kAgent] = agent;
this[kClients] = agent[kClients];
this[kOptions] = buildMockOptions(opts);
}
get(origin2) {
let dispatcher = this[kMockAgentGet](origin2);
if (!dispatcher) {
dispatcher = this[kFactory](origin2);
this[kMockAgentSet](origin2, dispatcher);
}
return dispatcher;
}
dispatch(opts, handler) {
this.get(opts.origin);
return this[kAgent].dispatch(opts, handler);
}
async close() {
await this[kAgent].close();
this[kClients].clear();
}
deactivate() {
this[kIsMockActive] = false;
}
activate() {
this[kIsMockActive] = true;
}
enableNetConnect(matcher) {
if (typeof matcher === "string" || typeof matcher === "function" || matcher instanceof RegExp) {
if (Array.isArray(this[kNetConnect])) {
this[kNetConnect].push(matcher);
} else {
this[kNetConnect] = [matcher];
}
} else if (typeof matcher === "undefined") {
this[kNetConnect] = true;
} else {
throw new InvalidArgumentError("Unsupported matcher. Must be one of String|Function|RegExp.");
}
}
disableNetConnect() {
this[kNetConnect] = false;
}
// This is required to bypass issues caused by using global symbols - see:
// https://github.com/nodejs/undici/issues/1447
get isMockActive() {
return this[kIsMockActive];
}
[kMockAgentSet](origin2, dispatcher) {
this[kClients].set(origin2, dispatcher);
}
[kFactory](origin2) {
const mockOptions = Object.assign({ agent: this }, this[kOptions]);
return this[kOptions] && this[kOptions].connections === 1 ? new MockClient(origin2, mockOptions) : new MockPool(origin2, mockOptions);
}
[kMockAgentGet](origin2) {
const client = this[kClients].get(origin2);
if (client) {
return client;
}
if (typeof origin2 !== "string") {
const dispatcher = this[kFactory]("http://localhost:9999");
this[kMockAgentSet](origin2, dispatcher);
return dispatcher;
}
for (const [keyMatcher, nonExplicitDispatcher] of Array.from(this[kClients])) {
if (nonExplicitDispatcher && typeof keyMatcher !== "string" && matchValue(keyMatcher, origin2)) {
const dispatcher = this[kFactory](origin2);
this[kMockAgentSet](origin2, dispatcher);
dispatcher[kDispatches] = nonExplicitDispatcher[kDispatches];
return dispatcher;
}
}
}
[kGetNetConnect]() {
return this[kNetConnect];
}
pendingInterceptors() {
const mockAgentClients = this[kClients];
return Array.from(mockAgentClients.entries()).flatMap(([origin2, scope]) => scope[kDispatches].map((dispatch) => ({ ...dispatch, origin: origin2 }))).filter(({ pending }) => pending);
}
assertNoPendingInterceptors({ pendingInterceptorsFormatter = new PendingInterceptorsFormatter() } = {}) {
const pending = this.pendingInterceptors();
if (pending.length === 0) {
return;
}
const pluralizer = new Pluralizer("interceptor", "interceptors").pluralize(pending.length);
throw new UndiciError(`
${pluralizer.count} ${pluralizer.noun} ${pluralizer.is} pending:
${pendingInterceptorsFormatter.format(pending)}
`.trim());
}
};
module2.exports = MockAgent;
}
});
// node_modules/undici/lib/global.js
var require_global2 = __commonJS({
"node_modules/undici/lib/global.js"(exports2, module2) {
"use strict";
var globalDispatcher = Symbol.for("undici.globalDispatcher.1");
var { InvalidArgumentError } = require_errors();
var Agent = require_agent();
if (getGlobalDispatcher() === void 0) {
setGlobalDispatcher(new Agent());
}
function setGlobalDispatcher(agent) {
if (!agent || typeof agent.dispatch !== "function") {
throw new InvalidArgumentError("Argument agent must implement Agent");
}
Object.defineProperty(globalThis, globalDispatcher, {
value: agent,
writable: true,
enumerable: false,
configurable: false
});
}
function getGlobalDispatcher() {
return globalThis[globalDispatcher];
}
module2.exports = {
setGlobalDispatcher,
getGlobalDispatcher
};
}
});
// node_modules/undici/lib/handler/decorator-handler.js
var require_decorator_handler = __commonJS({
"node_modules/undici/lib/handler/decorator-handler.js"(exports2, module2) {
"use strict";
module2.exports = class DecoratorHandler {
#handler;
constructor(handler) {
if (typeof handler !== "object" || handler === null) {
throw new TypeError("handler must be an object");
}
this.#handler = handler;
}
onConnect(...args) {
return this.#handler.onConnect?.(...args);
}
onError(...args) {
return this.#handler.onError?.(...args);
}
onUpgrade(...args) {
return this.#handler.onUpgrade?.(...args);
}
onResponseStarted(...args) {
return this.#handler.onResponseStarted?.(...args);
}
onHeaders(...args) {
return this.#handler.onHeaders?.(...args);
}
onData(...args) {
return this.#handler.onData?.(...args);
}
onComplete(...args) {
return this.#handler.onComplete?.(...args);
}
onBodySent(...args) {
return this.#handler.onBodySent?.(...args);
}
};
}
});
// node_modules/undici/lib/interceptor/redirect.js
var require_redirect = __commonJS({
"node_modules/undici/lib/interceptor/redirect.js"(exports2, module2) {
"use strict";
var RedirectHandler = require_redirect_handler();
module2.exports = (opts) => {
const globalMaxRedirections = opts?.maxRedirections;
return (dispatch) => {
return function redirectInterceptor(opts2, handler) {
const { maxRedirections = globalMaxRedirections, ...baseOpts } = opts2;
if (!maxRedirections) {
return dispatch(opts2, handler);
}
const redirectHandler = new RedirectHandler(
dispatch,
maxRedirections,
opts2,
handler
);
return dispatch(baseOpts, redirectHandler);
};
};
};
}
});
// node_modules/undici/lib/interceptor/retry.js
var require_retry = __commonJS({
"node_modules/undici/lib/interceptor/retry.js"(exports2, module2) {
"use strict";
var RetryHandler = require_retry_handler();
module2.exports = (globalOpts) => {
return (dispatch) => {
return function retryInterceptor(opts, handler) {
return dispatch(
opts,
new RetryHandler(
{ ...opts, retryOptions: { ...globalOpts, ...opts.retryOptions } },
{
handler,
dispatch
}
)
);
};
};
};
}
});
// node_modules/undici/lib/interceptor/dump.js
var require_dump = __commonJS({
"node_modules/undici/lib/interceptor/dump.js"(exports2, module2) {
"use strict";
var util5 = require_util2();
var { InvalidArgumentError, RequestAbortedError } = require_errors();
var DecoratorHandler = require_decorator_handler();
var DumpHandler = class extends DecoratorHandler {
#maxSize = 1024 * 1024;
#abort = null;
#dumped = false;
#aborted = false;
#size = 0;
#reason = null;
#handler = null;
constructor({ maxSize }, handler) {
super(handler);
if (maxSize != null && (!Number.isFinite(maxSize) || maxSize < 1)) {
throw new InvalidArgumentError("maxSize must be a number greater than 0");
}
this.#maxSize = maxSize ?? this.#maxSize;
this.#handler = handler;
}
onConnect(abort) {
this.#abort = abort;
this.#handler.onConnect(this.#customAbort.bind(this));
}
#customAbort(reason) {
this.#aborted = true;
this.#reason = reason;
}
// TODO: will require adjustment after new hooks are out
onHeaders(statusCode, rawHeaders, resume, statusMessage) {
const headers = util5.parseHeaders(rawHeaders);
const contentLength = headers["content-length"];
if (contentLength != null && contentLength > this.#maxSize) {
throw new RequestAbortedError(
`Response size (${contentLength}) larger than maxSize (${this.#maxSize})`
);
}
if (this.#aborted) {
return true;
}
return this.#handler.onHeaders(
statusCode,
rawHeaders,
resume,
statusMessage
);
}
onError(err2) {
if (this.#dumped) {
return;
}
err2 = this.#reason ?? err2;
this.#handler.onError(err2);
}
onData(chunk) {
this.#size = this.#size + chunk.length;
if (this.#size >= this.#maxSize) {
this.#dumped = true;
if (this.#aborted) {
this.#handler.onError(this.#reason);
} else {
this.#handler.onComplete([]);
}
}
return true;
}
onComplete(trailers) {
if (this.#dumped) {
return;
}
if (this.#aborted) {
this.#handler.onError(this.reason);
return;
}
this.#handler.onComplete(trailers);
}
};
function createDumpInterceptor({ maxSize: defaultMaxSize } = {
maxSize: 1024 * 1024
}) {
return (dispatch) => {
return function Intercept(opts, handler) {
const { dumpMaxSize = defaultMaxSize } = opts;
const dumpHandler = new DumpHandler(
{ maxSize: dumpMaxSize },
handler
);
return dispatch(opts, dumpHandler);
};
};
}
module2.exports = createDumpInterceptor;
}
});
// node_modules/undici/lib/interceptor/dns.js
var require_dns = __commonJS({
"node_modules/undici/lib/interceptor/dns.js"(exports2, module2) {
"use strict";
var { isIP } = require("node:net");
var { lookup } = require("node:dns");
var DecoratorHandler = require_decorator_handler();
var { InvalidArgumentError, InformationalError } = require_errors();
var maxInt = Math.pow(2, 31) - 1;
var DNSInstance = class {
#maxTTL = 0;
#maxItems = 0;
#records = /* @__PURE__ */ new Map();
dualStack = true;
affinity = null;
lookup = null;
pick = null;
constructor(opts) {
this.#maxTTL = opts.maxTTL;
this.#maxItems = opts.maxItems;
this.dualStack = opts.dualStack;
this.affinity = opts.affinity;
this.lookup = opts.lookup ?? this.#defaultLookup;
this.pick = opts.pick ?? this.#defaultPick;
}
get full() {
return this.#records.size === this.#maxItems;
}
runLookup(origin2, opts, cb) {
const ips = this.#records.get(origin2.hostname);
if (ips == null && this.full) {
cb(null, origin2.origin);
return;
}
const newOpts = {
affinity: this.affinity,
dualStack: this.dualStack,
lookup: this.lookup,
pick: this.pick,
...opts.dns,
maxTTL: this.#maxTTL,
maxItems: this.#maxItems
};
if (ips == null) {
this.lookup(origin2, newOpts, (err2, addresses) => {
if (err2 || addresses == null || addresses.length === 0) {
cb(err2 ?? new InformationalError("No DNS entries found"));
return;
}
this.setRecords(origin2, addresses);
const records = this.#records.get(origin2.hostname);
const ip = this.pick(
origin2,
records,
newOpts.affinity
);
let port;
if (typeof ip.port === "number") {
port = `:${ip.port}`;
} else if (origin2.port !== "") {
port = `:${origin2.port}`;
} else {
port = "";
}
cb(
null,
`${origin2.protocol}//${ip.family === 6 ? `[${ip.address}]` : ip.address}${port}`
);
});
} else {
const ip = this.pick(
origin2,
ips,
newOpts.affinity
);
if (ip == null) {
this.#records.delete(origin2.hostname);
this.runLookup(origin2, opts, cb);
return;
}
let port;
if (typeof ip.port === "number") {
port = `:${ip.port}`;
} else if (origin2.port !== "") {
port = `:${origin2.port}`;
} else {
port = "";
}
cb(
null,
`${origin2.protocol}//${ip.family === 6 ? `[${ip.address}]` : ip.address}${port}`
);
}
}
#defaultLookup(origin2, opts, cb) {
lookup(
origin2.hostname,
{
all: true,
family: this.dualStack === false ? this.affinity : 0,
order: "ipv4first"
},
(err2, addresses) => {
if (err2) {
return cb(err2);
}
const results = /* @__PURE__ */ new Map();
for (const addr of addresses) {
results.set(`${addr.address}:${addr.family}`, addr);
}
cb(null, results.values());
}
);
}
#defaultPick(origin2, hostnameRecords, affinity) {
let ip = null;
const { records, offset } = hostnameRecords;
let family;
if (this.dualStack) {
if (affinity == null) {
if (offset == null || offset === maxInt) {
hostnameRecords.offset = 0;
affinity = 4;
} else {
hostnameRecords.offset++;
affinity = (hostnameRecords.offset & 1) === 1 ? 6 : 4;
}
}
if (records[affinity] != null && records[affinity].ips.length > 0) {
family = records[affinity];
} else {
family = records[affinity === 4 ? 6 : 4];
}
} else {
family = records[affinity];
}
if (family == null || family.ips.length === 0) {
return ip;
}
if (family.offset == null || family.offset === maxInt) {
family.offset = 0;
} else {
family.offset++;
}
const position = family.offset % family.ips.length;
ip = family.ips[position] ?? null;
if (ip == null) {
return ip;
}
if (Date.now() - ip.timestamp > ip.ttl) {
family.ips.splice(position, 1);
return this.pick(origin2, hostnameRecords, affinity);
}
return ip;
}
setRecords(origin2, addresses) {
const timestamp = Date.now();
const records = { records: { 4: null, 6: null } };
for (const record of addresses) {
record.timestamp = timestamp;
if (typeof record.ttl === "number") {
record.ttl = Math.min(record.ttl, this.#maxTTL);
} else {
record.ttl = this.#maxTTL;
}
const familyRecords = records.records[record.family] ?? { ips: [] };
familyRecords.ips.push(record);
records.records[record.family] = familyRecords;
}
this.#records.set(origin2.hostname, records);
}
getHandler(meta, opts) {
return new DNSDispatchHandler(this, meta, opts);
}
};
var DNSDispatchHandler = class extends DecoratorHandler {
#state = null;
#opts = null;
#dispatch = null;
#handler = null;
#origin = null;
constructor(state, { origin: origin2, handler, dispatch }, opts) {
super(handler);
this.#origin = origin2;
this.#handler = handler;
this.#opts = { ...opts };
this.#state = state;
this.#dispatch = dispatch;
}
onError(err2) {
switch (err2.code) {
case "ETIMEDOUT":
case "ECONNREFUSED": {
if (this.#state.dualStack) {
this.#state.runLookup(this.#origin, this.#opts, (err3, newOrigin) => {
if (err3) {
return this.#handler.onError(err3);
}
const dispatchOpts = {
...this.#opts,
origin: newOrigin
};
this.#dispatch(dispatchOpts, this);
});
return;
}
this.#handler.onError(err2);
return;
}
case "ENOTFOUND":
this.#state.deleteRecord(this.#origin);
// eslint-disable-next-line no-fallthrough
default:
this.#handler.onError(err2);
break;
}
}
};
module2.exports = (interceptorOpts) => {
if (interceptorOpts?.maxTTL != null && (typeof interceptorOpts?.maxTTL !== "number" || interceptorOpts?.maxTTL < 0)) {
throw new InvalidArgumentError("Invalid maxTTL. Must be a positive number");
}
if (interceptorOpts?.maxItems != null && (typeof interceptorOpts?.maxItems !== "number" || interceptorOpts?.maxItems < 1)) {
throw new InvalidArgumentError(
"Invalid maxItems. Must be a positive number and greater than zero"
);
}
if (interceptorOpts?.affinity != null && interceptorOpts?.affinity !== 4 && interceptorOpts?.affinity !== 6) {
throw new InvalidArgumentError("Invalid affinity. Must be either 4 or 6");
}
if (interceptorOpts?.dualStack != null && typeof interceptorOpts?.dualStack !== "boolean") {
throw new InvalidArgumentError("Invalid dualStack. Must be a boolean");
}
if (interceptorOpts?.lookup != null && typeof interceptorOpts?.lookup !== "function") {
throw new InvalidArgumentError("Invalid lookup. Must be a function");
}
if (interceptorOpts?.pick != null && typeof interceptorOpts?.pick !== "function") {
throw new InvalidArgumentError("Invalid pick. Must be a function");
}
const dualStack = interceptorOpts?.dualStack ?? true;
let affinity;
if (dualStack) {
affinity = interceptorOpts?.affinity ?? null;
} else {
affinity = interceptorOpts?.affinity ?? 4;
}
const opts = {
maxTTL: interceptorOpts?.maxTTL ?? 1e4,
// Expressed in ms
lookup: interceptorOpts?.lookup ?? null,
pick: interceptorOpts?.pick ?? null,
dualStack,
affinity,
maxItems: interceptorOpts?.maxItems ?? Infinity
};
const instance = new DNSInstance(opts);
return (dispatch) => {
return function dnsInterceptor(origDispatchOpts, handler) {
const origin2 = origDispatchOpts.origin.constructor === URL ? origDispatchOpts.origin : new URL(origDispatchOpts.origin);
if (isIP(origin2.hostname) !== 0) {
return dispatch(origDispatchOpts, handler);
}
instance.runLookup(origin2, origDispatchOpts, (err2, newOrigin) => {
if (err2) {
return handler.onError(err2);
}
let dispatchOpts = null;
dispatchOpts = {
...origDispatchOpts,
servername: origin2.hostname,
// For SNI on TLS
origin: newOrigin,
headers: {
host: origin2.hostname,
...origDispatchOpts.headers
}
};
dispatch(
dispatchOpts,
instance.getHandler({ origin: origin2, dispatch, handler }, origDispatchOpts)
);
});
return true;
};
};
};
}
});
// node_modules/undici/lib/web/fetch/headers.js
var require_headers = __commonJS({
"node_modules/undici/lib/web/fetch/headers.js"(exports2, module2) {
"use strict";
var { kConstruct } = require_symbols();
var { kEnumerableProperty } = require_util2();
var {
iteratorMixin,
isValidHeaderName: isValidHeaderName2,
isValidHeaderValue
} = require_util3();
var { webidl } = require_webidl();
var assert = require("node:assert");
var util5 = require("node:util");
var kHeadersMap = Symbol("headers map");
var kHeadersSortedMap = Symbol("headers map sorted");
function isHTTPWhiteSpaceCharCode(code) {
return code === 10 || code === 13 || code === 9 || code === 32;
}
function headerValueNormalize(potentialValue) {
let i = 0;
let j = potentialValue.length;
while (j > i && isHTTPWhiteSpaceCharCode(potentialValue.charCodeAt(j - 1))) --j;
while (j > i && isHTTPWhiteSpaceCharCode(potentialValue.charCodeAt(i))) ++i;
return i === 0 && j === potentialValue.length ? potentialValue : potentialValue.substring(i, j);
}
function fill(headers, object) {
if (Array.isArray(object)) {
for (let i = 0; i < object.length; ++i) {
const header = object[i];
if (header.length !== 2) {
throw webidl.errors.exception({
header: "Headers constructor",
message: `expected name/value pair to be length 2, found ${header.length}.`
});
}
appendHeader(headers, header[0], header[1]);
}
} else if (typeof object === "object" && object !== null) {
const keys = Object.keys(object);
for (let i = 0; i < keys.length; ++i) {
appendHeader(headers, keys[i], object[keys[i]]);
}
} else {
throw webidl.errors.conversionFailed({
prefix: "Headers constructor",
argument: "Argument 1",
types: ["sequence<sequence<ByteString>>", "record<ByteString, ByteString>"]
});
}
}
function appendHeader(headers, name, value) {
value = headerValueNormalize(value);
if (!isValidHeaderName2(name)) {
throw webidl.errors.invalidArgument({
prefix: "Headers.append",
value: name,
type: "header name"
});
} else if (!isValidHeaderValue(value)) {
throw webidl.errors.invalidArgument({
prefix: "Headers.append",
value,
type: "header value"
});
}
if (getHeadersGuard(headers) === "immutable") {
throw new TypeError("immutable");
}
return getHeadersList(headers).append(name, value, false);
}
function compareHeaderName(a, b) {
return a[0] < b[0] ? -1 : 1;
}
var HeadersList = class _HeadersList {
/** @type {[string, string][]|null} */
cookies = null;
constructor(init) {
if (init instanceof _HeadersList) {
this[kHeadersMap] = new Map(init[kHeadersMap]);
this[kHeadersSortedMap] = init[kHeadersSortedMap];
this.cookies = init.cookies === null ? null : [...init.cookies];
} else {
this[kHeadersMap] = new Map(init);
this[kHeadersSortedMap] = null;
}
}
/**
* @see https://fetch.spec.whatwg.org/#header-list-contains
* @param {string} name
* @param {boolean} isLowerCase
*/
contains(name, isLowerCase) {
return this[kHeadersMap].has(isLowerCase ? name : name.toLowerCase());
}
clear() {
this[kHeadersMap].clear();
this[kHeadersSortedMap] = null;
this.cookies = null;
}
/**
* @see https://fetch.spec.whatwg.org/#concept-header-list-append
* @param {string} name
* @param {string} value
* @param {boolean} isLowerCase
*/
append(name, value, isLowerCase) {
this[kHeadersSortedMap] = null;
const lowercaseName = isLowerCase ? name : name.toLowerCase();
const exists = this[kHeadersMap].get(lowercaseName);
if (exists) {
const delimiter = lowercaseName === "cookie" ? "; " : ", ";
this[kHeadersMap].set(lowercaseName, {
name: exists.name,
value: `${exists.value}${delimiter}${value}`
});
} else {
this[kHeadersMap].set(lowercaseName, { name, value });
}
if (lowercaseName === "set-cookie") {
(this.cookies ??= []).push(value);
}
}
/**
* @see https://fetch.spec.whatwg.org/#concept-header-list-set
* @param {string} name
* @param {string} value
* @param {boolean} isLowerCase
*/
set(name, value, isLowerCase) {
this[kHeadersSortedMap] = null;
const lowercaseName = isLowerCase ? name : name.toLowerCase();
if (lowercaseName === "set-cookie") {
this.cookies = [value];
}
this[kHeadersMap].set(lowercaseName, { name, value });
}
/**
* @see https://fetch.spec.whatwg.org/#concept-header-list-delete
* @param {string} name
* @param {boolean} isLowerCase
*/
delete(name, isLowerCase) {
this[kHeadersSortedMap] = null;
if (!isLowerCase) name = name.toLowerCase();
if (name === "set-cookie") {
this.cookies = null;
}
this[kHeadersMap].delete(name);
}
/**
* @see https://fetch.spec.whatwg.org/#concept-header-list-get
* @param {string} name
* @param {boolean} isLowerCase
* @returns {string | null}
*/
get(name, isLowerCase) {
return this[kHeadersMap].get(isLowerCase ? name : name.toLowerCase())?.value ?? null;
}
*[Symbol.iterator]() {
for (const { 0: name, 1: { value } } of this[kHeadersMap]) {
yield [name, value];
}
}
get entries() {
const headers = {};
if (this[kHeadersMap].size !== 0) {
for (const { name, value } of this[kHeadersMap].values()) {
headers[name] = value;
}
}
return headers;
}
rawValues() {
return this[kHeadersMap].values();
}
get entriesList() {
const headers = [];
if (this[kHeadersMap].size !== 0) {
for (const { 0: lowerName, 1: { name, value } } of this[kHeadersMap]) {
if (lowerName === "set-cookie") {
for (const cookie of this.cookies) {
headers.push([name, cookie]);
}
} else {
headers.push([name, value]);
}
}
}
return headers;
}
// https://fetch.spec.whatwg.org/#convert-header-names-to-a-sorted-lowercase-set
toSortedArray() {
const size = this[kHeadersMap].size;
const array = new Array(size);
if (size <= 32) {
if (size === 0) {
return array;
}
const iterator = this[kHeadersMap][Symbol.iterator]();
const firstValue = iterator.next().value;
array[0] = [firstValue[0], firstValue[1].value];
assert(firstValue[1].value !== null);
for (let i = 1, j = 0, right = 0, left = 0, pivot = 0, x, value; i < size; ++i) {
value = iterator.next().value;
x = array[i] = [value[0], value[1].value];
assert(x[1] !== null);
left = 0;
right = i;
while (left < right) {
pivot = left + (right - left >> 1);
if (array[pivot][0] <= x[0]) {
left = pivot + 1;
} else {
right = pivot;
}
}
if (i !== pivot) {
j = i;
while (j > left) {
array[j] = array[--j];
}
array[left] = x;
}
}
if (!iterator.next().done) {
throw new TypeError("Unreachable");
}
return array;
} else {
let i = 0;
for (const { 0: name, 1: { value } } of this[kHeadersMap]) {
array[i++] = [name, value];
assert(value !== null);
}
return array.sort(compareHeaderName);
}
}
};
var Headers = class _Headers {
#guard;
#headersList;
constructor(init = void 0) {
webidl.util.markAsUncloneable(this);
if (init === kConstruct) {
return;
}
this.#headersList = new HeadersList();
this.#guard = "none";
if (init !== void 0) {
init = webidl.converters.HeadersInit(init, "Headers contructor", "init");
fill(this, init);
}
}
// https://fetch.spec.whatwg.org/#dom-headers-append
append(name, value) {
webidl.brandCheck(this, _Headers);
webidl.argumentLengthCheck(arguments, 2, "Headers.append");
const prefix = "Headers.append";
name = webidl.converters.ByteString(name, prefix, "name");
value = webidl.converters.ByteString(value, prefix, "value");
return appendHeader(this, name, value);
}
// https://fetch.spec.whatwg.org/#dom-headers-delete
delete(name) {
webidl.brandCheck(this, _Headers);
webidl.argumentLengthCheck(arguments, 1, "Headers.delete");
const prefix = "Headers.delete";
name = webidl.converters.ByteString(name, prefix, "name");
if (!isValidHeaderName2(name)) {
throw webidl.errors.invalidArgument({
prefix: "Headers.delete",
value: name,
type: "header name"
});
}
if (this.#guard === "immutable") {
throw new TypeError("immutable");
}
if (!this.#headersList.contains(name, false)) {
return;
}
this.#headersList.delete(name, false);
}
// https://fetch.spec.whatwg.org/#dom-headers-get
get(name) {
webidl.brandCheck(this, _Headers);
webidl.argumentLengthCheck(arguments, 1, "Headers.get");
const prefix = "Headers.get";
name = webidl.converters.ByteString(name, prefix, "name");
if (!isValidHeaderName2(name)) {
throw webidl.errors.invalidArgument({
prefix,
value: name,
type: "header name"
});
}
return this.#headersList.get(name, false);
}
// https://fetch.spec.whatwg.org/#dom-headers-has
has(name) {
webidl.brandCheck(this, _Headers);
webidl.argumentLengthCheck(arguments, 1, "Headers.has");
const prefix = "Headers.has";
name = webidl.converters.ByteString(name, prefix, "name");
if (!isValidHeaderName2(name)) {
throw webidl.errors.invalidArgument({
prefix,
value: name,
type: "header name"
});
}
return this.#headersList.contains(name, false);
}
// https://fetch.spec.whatwg.org/#dom-headers-set
set(name, value) {
webidl.brandCheck(this, _Headers);
webidl.argumentLengthCheck(arguments, 2, "Headers.set");
const prefix = "Headers.set";
name = webidl.converters.ByteString(name, prefix, "name");
value = webidl.converters.ByteString(value, prefix, "value");
value = headerValueNormalize(value);
if (!isValidHeaderName2(name)) {
throw webidl.errors.invalidArgument({
prefix,
value: name,
type: "header name"
});
} else if (!isValidHeaderValue(value)) {
throw webidl.errors.invalidArgument({
prefix,
value,
type: "header value"
});
}
if (this.#guard === "immutable") {
throw new TypeError("immutable");
}
this.#headersList.set(name, value, false);
}
// https://fetch.spec.whatwg.org/#dom-headers-getsetcookie
getSetCookie() {
webidl.brandCheck(this, _Headers);
const list = this.#headersList.cookies;
if (list) {
return [...list];
}
return [];
}
// https://fetch.spec.whatwg.org/#concept-header-list-sort-and-combine
get [kHeadersSortedMap]() {
if (this.#headersList[kHeadersSortedMap]) {
return this.#headersList[kHeadersSortedMap];
}
const headers = [];
const names = this.#headersList.toSortedArray();
const cookies = this.#headersList.cookies;
if (cookies === null || cookies.length === 1) {
return this.#headersList[kHeadersSortedMap] = names;
}
for (let i = 0; i < names.length; ++i) {
const { 0: name, 1: value } = names[i];
if (name === "set-cookie") {
for (let j = 0; j < cookies.length; ++j) {
headers.push([name, cookies[j]]);
}
} else {
headers.push([name, value]);
}
}
return this.#headersList[kHeadersSortedMap] = headers;
}
[util5.inspect.custom](depth, options) {
options.depth ??= depth;
return `Headers ${util5.formatWithOptions(options, this.#headersList.entries)}`;
}
static getHeadersGuard(o) {
return o.#guard;
}
static setHeadersGuard(o, guard) {
o.#guard = guard;
}
static getHeadersList(o) {
return o.#headersList;
}
static setHeadersList(o, list) {
o.#headersList = list;
}
};
var { getHeadersGuard, setHeadersGuard, getHeadersList, setHeadersList } = Headers;
Reflect.deleteProperty(Headers, "getHeadersGuard");
Reflect.deleteProperty(Headers, "setHeadersGuard");
Reflect.deleteProperty(Headers, "getHeadersList");
Reflect.deleteProperty(Headers, "setHeadersList");
iteratorMixin("Headers", Headers, kHeadersSortedMap, 0, 1);
Object.defineProperties(Headers.prototype, {
append: kEnumerableProperty,
delete: kEnumerableProperty,
get: kEnumerableProperty,
has: kEnumerableProperty,
set: kEnumerableProperty,
getSetCookie: kEnumerableProperty,
[Symbol.toStringTag]: {
value: "Headers",
configurable: true
},
[util5.inspect.custom]: {
enumerable: false
}
});
webidl.converters.HeadersInit = function(V, prefix, argument) {
if (webidl.util.Type(V) === "Object") {
const iterator = Reflect.get(V, Symbol.iterator);
if (!util5.types.isProxy(V) && iterator === Headers.prototype.entries) {
try {
return getHeadersList(V).entriesList;
} catch {
}
}
if (typeof iterator === "function") {
return webidl.converters["sequence<sequence<ByteString>>"](V, prefix, argument, iterator.bind(V));
}
return webidl.converters["record<ByteString, ByteString>"](V, prefix, argument);
}
throw webidl.errors.conversionFailed({
prefix: "Headers constructor",
argument: "Argument 1",
types: ["sequence<sequence<ByteString>>", "record<ByteString, ByteString>"]
});
};
module2.exports = {
fill,
// for test.
compareHeaderName,
Headers,
HeadersList,
getHeadersGuard,
setHeadersGuard,
setHeadersList,
getHeadersList
};
}
});
// node_modules/undici/lib/web/fetch/response.js
var require_response = __commonJS({
"node_modules/undici/lib/web/fetch/response.js"(exports2, module2) {
"use strict";
var { Headers, HeadersList, fill, getHeadersGuard, setHeadersGuard, setHeadersList } = require_headers();
var { extractBody, cloneBody, mixinBody, hasFinalizationRegistry, streamRegistry, bodyUnusable } = require_body();
var util5 = require_util2();
var nodeUtil = require("node:util");
var { kEnumerableProperty } = util5;
var {
isValidReasonPhrase,
isCancelled,
isAborted: isAborted3,
isBlobLike,
serializeJavascriptValueToJSONString,
isErrorLike,
isomorphicEncode,
environmentSettingsObject: relevantRealm
} = require_util3();
var {
redirectStatusSet,
nullBodyStatus
} = require_constants3();
var { kState, kHeaders } = require_symbols2();
var { webidl } = require_webidl();
var { FormData: FormData3 } = require_formdata();
var { URLSerializer } = require_data_url();
var { kConstruct } = require_symbols();
var assert = require("node:assert");
var { types } = require("node:util");
var textEncoder2 = new TextEncoder("utf-8");
var Response3 = class _Response {
// Creates network error Response.
static error() {
const responseObject = fromInnerResponse(makeNetworkError(), "immutable");
return responseObject;
}
// https://fetch.spec.whatwg.org/#dom-response-json
static json(data2, init = {}) {
webidl.argumentLengthCheck(arguments, 1, "Response.json");
if (init !== null) {
init = webidl.converters.ResponseInit(init);
}
const bytes = textEncoder2.encode(
serializeJavascriptValueToJSONString(data2)
);
const body = extractBody(bytes);
const responseObject = fromInnerResponse(makeResponse({}), "response");
initializeResponse(responseObject, init, { body: body[0], type: "application/json" });
return responseObject;
}
// Creates a redirect Response that redirects to url with status status.
static redirect(url2, status = 302) {
webidl.argumentLengthCheck(arguments, 1, "Response.redirect");
url2 = webidl.converters.USVString(url2);
status = webidl.converters["unsigned short"](status);
let parsedURL;
try {
parsedURL = new URL(url2, relevantRealm.settingsObject.baseUrl);
} catch (err2) {
throw new TypeError(`Failed to parse URL from ${url2}`, { cause: err2 });
}
if (!redirectStatusSet.has(status)) {
throw new RangeError(`Invalid status code ${status}`);
}
const responseObject = fromInnerResponse(makeResponse({}), "immutable");
responseObject[kState].status = status;
const value = isomorphicEncode(URLSerializer(parsedURL));
responseObject[kState].headersList.append("location", value, true);
return responseObject;
}
// https://fetch.spec.whatwg.org/#dom-response
constructor(body = null, init = {}) {
webidl.util.markAsUncloneable(this);
if (body === kConstruct) {
return;
}
if (body !== null) {
body = webidl.converters.BodyInit(body);
}
init = webidl.converters.ResponseInit(init);
this[kState] = makeResponse({});
this[kHeaders] = new Headers(kConstruct);
setHeadersGuard(this[kHeaders], "response");
setHeadersList(this[kHeaders], this[kState].headersList);
let bodyWithType = null;
if (body != null) {
const [extractedBody, type] = extractBody(body);
bodyWithType = { body: extractedBody, type };
}
initializeResponse(this, init, bodyWithType);
}
// Returns response’s type, e.g., "cors".
get type() {
webidl.brandCheck(this, _Response);
return this[kState].type;
}
// Returns response’s URL, if it has one; otherwise the empty string.
get url() {
webidl.brandCheck(this, _Response);
const urlList = this[kState].urlList;
const url2 = urlList[urlList.length - 1] ?? null;
if (url2 === null) {
return "";
}
return URLSerializer(url2, true);
}
// Returns whether response was obtained through a redirect.
get redirected() {
webidl.brandCheck(this, _Response);
return this[kState].urlList.length > 1;
}
// Returns response’s status.
get status() {
webidl.brandCheck(this, _Response);
return this[kState].status;
}
// Returns whether response’s status is an ok status.
get ok() {
webidl.brandCheck(this, _Response);
return this[kState].status >= 200 && this[kState].status <= 299;
}
// Returns response’s status message.
get statusText() {
webidl.brandCheck(this, _Response);
return this[kState].statusText;
}
// Returns response’s headers as Headers.
get headers() {
webidl.brandCheck(this, _Response);
return this[kHeaders];
}
get body() {
webidl.brandCheck(this, _Response);
return this[kState].body ? this[kState].body.stream : null;
}
get bodyUsed() {
webidl.brandCheck(this, _Response);
return !!this[kState].body && util5.isDisturbed(this[kState].body.stream);
}
// Returns a clone of response.
clone() {
webidl.brandCheck(this, _Response);
if (bodyUnusable(this)) {
throw webidl.errors.exception({
header: "Response.clone",
message: "Body has already been consumed."
});
}
const clonedResponse = cloneResponse(this[kState]);
return fromInnerResponse(clonedResponse, getHeadersGuard(this[kHeaders]));
}
[nodeUtil.inspect.custom](depth, options) {
if (options.depth === null) {
options.depth = 2;
}
options.colors ??= true;
const properties = {
status: this.status,
statusText: this.statusText,
headers: this.headers,
body: this.body,
bodyUsed: this.bodyUsed,
ok: this.ok,
redirected: this.redirected,
type: this.type,
url: this.url
};
return `Response ${nodeUtil.formatWithOptions(options, properties)}`;
}
};
mixinBody(Response3);
Object.defineProperties(Response3.prototype, {
type: kEnumerableProperty,
url: kEnumerableProperty,
status: kEnumerableProperty,
ok: kEnumerableProperty,
redirected: kEnumerableProperty,
statusText: kEnumerableProperty,
headers: kEnumerableProperty,
clone: kEnumerableProperty,
body: kEnumerableProperty,
bodyUsed: kEnumerableProperty,
[Symbol.toStringTag]: {
value: "Response",
configurable: true
}
});
Object.defineProperties(Response3, {
json: kEnumerableProperty,
redirect: kEnumerableProperty,
error: kEnumerableProperty
});
function cloneResponse(response) {
if (response.internalResponse) {
return filterResponse(
cloneResponse(response.internalResponse),
response.type
);
}
const newResponse = makeResponse({ ...response, body: null });
if (response.body != null) {
newResponse.body = cloneBody(newResponse, response.body);
}
return newResponse;
}
function makeResponse(init) {
return {
aborted: false,
rangeRequested: false,
timingAllowPassed: false,
requestIncludesCredentials: false,
type: "default",
status: 200,
timingInfo: null,
cacheState: "",
statusText: "",
...init,
headersList: init?.headersList ? new HeadersList(init?.headersList) : new HeadersList(),
urlList: init?.urlList ? [...init.urlList] : []
};
}
function makeNetworkError(reason) {
const isError = isErrorLike(reason);
return makeResponse({
type: "error",
status: 0,
error: isError ? reason : new Error(reason ? String(reason) : reason),
aborted: reason && reason.name === "AbortError"
});
}
function isNetworkError(response) {
return (
// A network error is a response whose type is "error",
response.type === "error" && // status is 0
response.status === 0
);
}
function makeFilteredResponse(response, state) {
state = {
internalResponse: response,
...state
};
return new Proxy(response, {
get(target, p) {
return p in state ? state[p] : target[p];
},
set(target, p, value) {
assert(!(p in state));
target[p] = value;
return true;
}
});
}
function filterResponse(response, type) {
if (type === "basic") {
return makeFilteredResponse(response, {
type: "basic",
headersList: response.headersList
});
} else if (type === "cors") {
return makeFilteredResponse(response, {
type: "cors",
headersList: response.headersList
});
} else if (type === "opaque") {
return makeFilteredResponse(response, {
type: "opaque",
urlList: Object.freeze([]),
status: 0,
statusText: "",
body: null
});
} else if (type === "opaqueredirect") {
return makeFilteredResponse(response, {
type: "opaqueredirect",
status: 0,
statusText: "",
headersList: [],
body: null
});
} else {
assert(false);
}
}
function makeAppropriateNetworkError(fetchParams, err2 = null) {
assert(isCancelled(fetchParams));
return isAborted3(fetchParams) ? makeNetworkError(Object.assign(new DOMException("The operation was aborted.", "AbortError"), { cause: err2 })) : makeNetworkError(Object.assign(new DOMException("Request was cancelled."), { cause: err2 }));
}
function initializeResponse(response, init, body) {
if (init.status !== null && (init.status < 200 || init.status > 599)) {
throw new RangeError('init["status"] must be in the range of 200 to 599, inclusive.');
}
if ("statusText" in init && init.statusText != null) {
if (!isValidReasonPhrase(String(init.statusText))) {
throw new TypeError("Invalid statusText");
}
}
if ("status" in init && init.status != null) {
response[kState].status = init.status;
}
if ("statusText" in init && init.statusText != null) {
response[kState].statusText = init.statusText;
}
if ("headers" in init && init.headers != null) {
fill(response[kHeaders], init.headers);
}
if (body) {
if (nullBodyStatus.includes(response.status)) {
throw webidl.errors.exception({
header: "Response constructor",
message: `Invalid response status code ${response.status}`
});
}
response[kState].body = body.body;
if (body.type != null && !response[kState].headersList.contains("content-type", true)) {
response[kState].headersList.append("content-type", body.type, true);
}
}
}
function fromInnerResponse(innerResponse, guard) {
const response = new Response3(kConstruct);
response[kState] = innerResponse;
response[kHeaders] = new Headers(kConstruct);
setHeadersList(response[kHeaders], innerResponse.headersList);
setHeadersGuard(response[kHeaders], guard);
if (hasFinalizationRegistry && innerResponse.body?.stream) {
streamRegistry.register(response, new WeakRef(innerResponse.body.stream));
}
return response;
}
webidl.converters.ReadableStream = webidl.interfaceConverter(
ReadableStream
);
webidl.converters.FormData = webidl.interfaceConverter(
FormData3
);
webidl.converters.URLSearchParams = webidl.interfaceConverter(
URLSearchParams
);
webidl.converters.XMLHttpRequestBodyInit = function(V, prefix, name) {
if (typeof V === "string") {
return webidl.converters.USVString(V, prefix, name);
}
if (isBlobLike(V)) {
return webidl.converters.Blob(V, prefix, name, { strict: false });
}
if (ArrayBuffer.isView(V) || types.isArrayBuffer(V)) {
return webidl.converters.BufferSource(V, prefix, name);
}
if (util5.isFormDataLike(V)) {
return webidl.converters.FormData(V, prefix, name, { strict: false });
}
if (V instanceof URLSearchParams) {
return webidl.converters.URLSearchParams(V, prefix, name);
}
return webidl.converters.DOMString(V, prefix, name);
};
webidl.converters.BodyInit = function(V, prefix, argument) {
if (V instanceof ReadableStream) {
return webidl.converters.ReadableStream(V, prefix, argument);
}
if (V?.[Symbol.asyncIterator]) {
return V;
}
return webidl.converters.XMLHttpRequestBodyInit(V, prefix, argument);
};
webidl.converters.ResponseInit = webidl.dictionaryConverter([
{
key: "status",
converter: webidl.converters["unsigned short"],
defaultValue: () => 200
},
{
key: "statusText",
converter: webidl.converters.ByteString,
defaultValue: () => ""
},
{
key: "headers",
converter: webidl.converters.HeadersInit
}
]);
module2.exports = {
isNetworkError,
makeNetworkError,
makeResponse,
makeAppropriateNetworkError,
filterResponse,
Response: Response3,
cloneResponse,
fromInnerResponse
};
}
});
// node_modules/undici/lib/web/fetch/dispatcher-weakref.js
var require_dispatcher_weakref = __commonJS({
"node_modules/undici/lib/web/fetch/dispatcher-weakref.js"(exports2, module2) {
"use strict";
var { kConnected, kSize } = require_symbols();
var CompatWeakRef = class {
constructor(value) {
this.value = value;
}
deref() {
return this.value[kConnected] === 0 && this.value[kSize] === 0 ? void 0 : this.value;
}
};
var CompatFinalizer = class {
constructor(finalizer) {
this.finalizer = finalizer;
}
register(dispatcher, key) {
if (dispatcher.on) {
dispatcher.on("disconnect", () => {
if (dispatcher[kConnected] === 0 && dispatcher[kSize] === 0) {
this.finalizer(key);
}
});
}
}
unregister(key) {
}
};
module2.exports = function() {
if (process.env.NODE_V8_COVERAGE && process.version.startsWith("v18")) {
process._rawDebug("Using compatibility WeakRef and FinalizationRegistry");
return {
WeakRef: CompatWeakRef,
FinalizationRegistry: CompatFinalizer
};
}
return { WeakRef, FinalizationRegistry };
};
}
});
// node_modules/undici/lib/web/fetch/request.js
var require_request2 = __commonJS({
"node_modules/undici/lib/web/fetch/request.js"(exports2, module2) {
"use strict";
var { extractBody, mixinBody, cloneBody, bodyUnusable } = require_body();
var { Headers, fill: fillHeaders, HeadersList, setHeadersGuard, getHeadersGuard, setHeadersList, getHeadersList } = require_headers();
var { FinalizationRegistry: FinalizationRegistry2 } = require_dispatcher_weakref()();
var util5 = require_util2();
var nodeUtil = require("node:util");
var {
isValidHTTPToken,
sameOrigin,
environmentSettingsObject
} = require_util3();
var {
forbiddenMethodsSet,
corsSafeListedMethodsSet,
referrerPolicy,
requestRedirect,
requestMode,
requestCredentials,
requestCache,
requestDuplex
} = require_constants3();
var { kEnumerableProperty, normalizedMethodRecordsBase, normalizedMethodRecords } = util5;
var { kHeaders, kSignal, kState, kDispatcher } = require_symbols2();
var { webidl } = require_webidl();
var { URLSerializer } = require_data_url();
var { kConstruct } = require_symbols();
var assert = require("node:assert");
var { getMaxListeners, setMaxListeners, getEventListeners, defaultMaxListeners } = require("node:events");
var kAbortController = Symbol("abortController");
var requestFinalizer = new FinalizationRegistry2(({ signal, abort }) => {
signal.removeEventListener("abort", abort);
});
var dependentControllerMap = /* @__PURE__ */ new WeakMap();
function buildAbort(acRef) {
return abort;
function abort() {
const ac = acRef.deref();
if (ac !== void 0) {
requestFinalizer.unregister(abort);
this.removeEventListener("abort", abort);
ac.abort(this.reason);
const controllerList = dependentControllerMap.get(ac.signal);
if (controllerList !== void 0) {
if (controllerList.size !== 0) {
for (const ref of controllerList) {
const ctrl = ref.deref();
if (ctrl !== void 0) {
ctrl.abort(this.reason);
}
}
controllerList.clear();
}
dependentControllerMap.delete(ac.signal);
}
}
}
}
var patchMethodWarning = false;
var Request2 = class _Request {
// https://fetch.spec.whatwg.org/#dom-request
constructor(input, init = {}) {
webidl.util.markAsUncloneable(this);
if (input === kConstruct) {
return;
}
const prefix = "Request constructor";
webidl.argumentLengthCheck(arguments, 1, prefix);
input = webidl.converters.RequestInfo(input, prefix, "input");
init = webidl.converters.RequestInit(init, prefix, "init");
let request = null;
let fallbackMode = null;
const baseUrl = environmentSettingsObject.settingsObject.baseUrl;
let signal = null;
if (typeof input === "string") {
this[kDispatcher] = init.dispatcher;
let parsedURL;
try {
parsedURL = new URL(input, baseUrl);
} catch (err2) {
throw new TypeError("Failed to parse URL from " + input, { cause: err2 });
}
if (parsedURL.username || parsedURL.password) {
throw new TypeError(
"Request cannot be constructed from a URL that includes credentials: " + input
);
}
request = makeRequest({ urlList: [parsedURL] });
fallbackMode = "cors";
} else {
this[kDispatcher] = init.dispatcher || input[kDispatcher];
assert(input instanceof _Request);
request = input[kState];
signal = input[kSignal];
}
const origin2 = environmentSettingsObject.settingsObject.origin;
let window2 = "client";
if (request.window?.constructor?.name === "EnvironmentSettingsObject" && sameOrigin(request.window, origin2)) {
window2 = request.window;
}
if (init.window != null) {
throw new TypeError(`'window' option '${window2}' must be null`);
}
if ("window" in init) {
window2 = "no-window";
}
request = makeRequest({
// URL request’s URL.
// undici implementation note: this is set as the first item in request's urlList in makeRequest
// method request’s method.
method: request.method,
// header list A copy of request’s header list.
// undici implementation note: headersList is cloned in makeRequest
headersList: request.headersList,
// unsafe-request flag Set.
unsafeRequest: request.unsafeRequest,
// client This’s relevant settings object.
client: environmentSettingsObject.settingsObject,
// window window.
window: window2,
// priority request’s priority.
priority: request.priority,
// origin request’s origin. The propagation of the origin is only significant for navigation requests
// being handled by a service worker. In this scenario a request can have an origin that is different
// from the current client.
origin: request.origin,
// referrer request’s referrer.
referrer: request.referrer,
// referrer policy request’s referrer policy.
referrerPolicy: request.referrerPolicy,
// mode request’s mode.
mode: request.mode,
// credentials mode request’s credentials mode.
credentials: request.credentials,
// cache mode request’s cache mode.
cache: request.cache,
// redirect mode request’s redirect mode.
redirect: request.redirect,
// integrity metadata request’s integrity metadata.
integrity: request.integrity,
// keepalive request’s keepalive.
keepalive: request.keepalive,
// reload-navigation flag request’s reload-navigation flag.
reloadNavigation: request.reloadNavigation,
// history-navigation flag request’s history-navigation flag.
historyNavigation: request.historyNavigation,
// URL list A clone of request’s URL list.
urlList: [...request.urlList]
});
const initHasKey = Object.keys(init).length !== 0;
if (initHasKey) {
if (request.mode === "navigate") {
request.mode = "same-origin";
}
request.reloadNavigation = false;
request.historyNavigation = false;
request.origin = "client";
request.referrer = "client";
request.referrerPolicy = "";
request.url = request.urlList[request.urlList.length - 1];
request.urlList = [request.url];
}
if (init.referrer !== void 0) {
const referrer = init.referrer;
if (referrer === "") {
request.referrer = "no-referrer";
} else {
let parsedReferrer;
try {
parsedReferrer = new URL(referrer, baseUrl);
} catch (err2) {
throw new TypeError(`Referrer "${referrer}" is not a valid URL.`, { cause: err2 });
}
if (parsedReferrer.protocol === "about:" && parsedReferrer.hostname === "client" || origin2 && !sameOrigin(parsedReferrer, environmentSettingsObject.settingsObject.baseUrl)) {
request.referrer = "client";
} else {
request.referrer = parsedReferrer;
}
}
}
if (init.referrerPolicy !== void 0) {
request.referrerPolicy = init.referrerPolicy;
}
let mode;
if (init.mode !== void 0) {
mode = init.mode;
} else {
mode = fallbackMode;
}
if (mode === "navigate") {
throw webidl.errors.exception({
header: "Request constructor",
message: "invalid request mode navigate."
});
}
if (mode != null) {
request.mode = mode;
}
if (init.credentials !== void 0) {
request.credentials = init.credentials;
}
if (init.cache !== void 0) {
request.cache = init.cache;
}
if (request.cache === "only-if-cached" && request.mode !== "same-origin") {
throw new TypeError(
"'only-if-cached' can be set only with 'same-origin' mode"
);
}
if (init.redirect !== void 0) {
request.redirect = init.redirect;
}
if (init.integrity != null) {
request.integrity = String(init.integrity);
}
if (init.keepalive !== void 0) {
request.keepalive = Boolean(init.keepalive);
}
if (init.method !== void 0) {
let method = init.method;
const mayBeNormalized = normalizedMethodRecords[method];
if (mayBeNormalized !== void 0) {
request.method = mayBeNormalized;
} else {
if (!isValidHTTPToken(method)) {
throw new TypeError(`'${method}' is not a valid HTTP method.`);
}
const upperCase = method.toUpperCase();
if (forbiddenMethodsSet.has(upperCase)) {
throw new TypeError(`'${method}' HTTP method is unsupported.`);
}
method = normalizedMethodRecordsBase[upperCase] ?? method;
request.method = method;
}
if (!patchMethodWarning && request.method === "patch") {
process.emitWarning("Using `patch` is highly likely to result in a `405 Method Not Allowed`. `PATCH` is much more likely to succeed.", {
code: "UNDICI-FETCH-patch"
});
patchMethodWarning = true;
}
}
if (init.signal !== void 0) {
signal = init.signal;
}
this[kState] = request;
const ac = new AbortController();
this[kSignal] = ac.signal;
if (signal != null) {
if (!signal || typeof signal.aborted !== "boolean" || typeof signal.addEventListener !== "function") {
throw new TypeError(
"Failed to construct 'Request': member signal is not of type AbortSignal."
);
}
if (signal.aborted) {
ac.abort(signal.reason);
} else {
this[kAbortController] = ac;
const acRef = new WeakRef(ac);
const abort = buildAbort(acRef);
try {
if (typeof getMaxListeners === "function" && getMaxListeners(signal) === defaultMaxListeners) {
setMaxListeners(1500, signal);
} else if (getEventListeners(signal, "abort").length >= defaultMaxListeners) {
setMaxListeners(1500, signal);
}
} catch {
}
util5.addAbortListener(signal, abort);
requestFinalizer.register(ac, { signal, abort }, abort);
}
}
this[kHeaders] = new Headers(kConstruct);
setHeadersList(this[kHeaders], request.headersList);
setHeadersGuard(this[kHeaders], "request");
if (mode === "no-cors") {
if (!corsSafeListedMethodsSet.has(request.method)) {
throw new TypeError(
`'${request.method} is unsupported in no-cors mode.`
);
}
setHeadersGuard(this[kHeaders], "request-no-cors");
}
if (initHasKey) {
const headersList = getHeadersList(this[kHeaders]);
const headers = init.headers !== void 0 ? init.headers : new HeadersList(headersList);
headersList.clear();
if (headers instanceof HeadersList) {
for (const { name, value } of headers.rawValues()) {
headersList.append(name, value, false);
}
headersList.cookies = headers.cookies;
} else {
fillHeaders(this[kHeaders], headers);
}
}
const inputBody = input instanceof _Request ? input[kState].body : null;
if ((init.body != null || inputBody != null) && (request.method === "GET" || request.method === "HEAD")) {
throw new TypeError("Request with GET/HEAD method cannot have body.");
}
let initBody = null;
if (init.body != null) {
const [extractedBody, contentType] = extractBody(
init.body,
request.keepalive
);
initBody = extractedBody;
if (contentType && !getHeadersList(this[kHeaders]).contains("content-type", true)) {
this[kHeaders].append("content-type", contentType);
}
}
const inputOrInitBody = initBody ?? inputBody;
if (inputOrInitBody != null && inputOrInitBody.source == null) {
if (initBody != null && init.duplex == null) {
throw new TypeError("RequestInit: duplex option is required when sending a body.");
}
if (request.mode !== "same-origin" && request.mode !== "cors") {
throw new TypeError(
'If request is made from ReadableStream, mode should be "same-origin" or "cors"'
);
}
request.useCORSPreflightFlag = true;
}
let finalBody = inputOrInitBody;
if (initBody == null && inputBody != null) {
if (bodyUnusable(input)) {
throw new TypeError(
"Cannot construct a Request with a Request object that has already been used."
);
}
const identityTransform = new TransformStream();
inputBody.stream.pipeThrough(identityTransform);
finalBody = {
source: inputBody.source,
length: inputBody.length,
stream: identityTransform.readable
};
}
this[kState].body = finalBody;
}
// Returns request’s HTTP method, which is "GET" by default.
get method() {
webidl.brandCheck(this, _Request);
return this[kState].method;
}
// Returns the URL of request as a string.
get url() {
webidl.brandCheck(this, _Request);
return URLSerializer(this[kState].url);
}
// Returns a Headers object consisting of the headers associated with request.
// Note that headers added in the network layer by the user agent will not
// be accounted for in this object, e.g., the "Host" header.
get headers() {
webidl.brandCheck(this, _Request);
return this[kHeaders];
}
// Returns the kind of resource requested by request, e.g., "document"
// or "script".
get destination() {
webidl.brandCheck(this, _Request);
return this[kState].destination;
}
// Returns the referrer of request. Its value can be a same-origin URL if
// explicitly set in init, the empty string to indicate no referrer, and
// "about:client" when defaulting to the global’s default. This is used
// during fetching to determine the value of the `Referer` header of the
// request being made.
get referrer() {
webidl.brandCheck(this, _Request);
if (this[kState].referrer === "no-referrer") {
return "";
}
if (this[kState].referrer === "client") {
return "about:client";
}
return this[kState].referrer.toString();
}
// Returns the referrer policy associated with request.
// This is used during fetching to compute the value of the request’s
// referrer.
get referrerPolicy() {
webidl.brandCheck(this, _Request);
return this[kState].referrerPolicy;
}
// Returns the mode associated with request, which is a string indicating
// whether the request will use CORS, or will be restricted to same-origin
// URLs.
get mode() {
webidl.brandCheck(this, _Request);
return this[kState].mode;
}
// Returns the credentials mode associated with request,
// which is a string indicating whether credentials will be sent with the
// request always, never, or only when sent to a same-origin URL.
get credentials() {
return this[kState].credentials;
}
// Returns the cache mode associated with request,
// which is a string indicating how the request will
// interact with the browser’s cache when fetching.
get cache() {
webidl.brandCheck(this, _Request);
return this[kState].cache;
}
// Returns the redirect mode associated with request,
// which is a string indicating how redirects for the
// request will be handled during fetching. A request
// will follow redirects by default.
get redirect() {
webidl.brandCheck(this, _Request);
return this[kState].redirect;
}
// Returns request’s subresource integrity metadata, which is a
// cryptographic hash of the resource being fetched. Its value
// consists of multiple hashes separated by whitespace. [SRI]
get integrity() {
webidl.brandCheck(this, _Request);
return this[kState].integrity;
}
// Returns a boolean indicating whether or not request can outlive the
// global in which it was created.
get keepalive() {
webidl.brandCheck(this, _Request);
return this[kState].keepalive;
}
// Returns a boolean indicating whether or not request is for a reload
// navigation.
get isReloadNavigation() {
webidl.brandCheck(this, _Request);
return this[kState].reloadNavigation;
}
// Returns a boolean indicating whether or not request is for a history
// navigation (a.k.a. back-forward navigation).
get isHistoryNavigation() {
webidl.brandCheck(this, _Request);
return this[kState].historyNavigation;
}
// Returns the signal associated with request, which is an AbortSignal
// object indicating whether or not request has been aborted, and its
// abort event handler.
get signal() {
webidl.brandCheck(this, _Request);
return this[kSignal];
}
get body() {
webidl.brandCheck(this, _Request);
return this[kState].body ? this[kState].body.stream : null;
}
get bodyUsed() {
webidl.brandCheck(this, _Request);
return !!this[kState].body && util5.isDisturbed(this[kState].body.stream);
}
get duplex() {
webidl.brandCheck(this, _Request);
return "half";
}
// Returns a clone of request.
clone() {
webidl.brandCheck(this, _Request);
if (bodyUnusable(this)) {
throw new TypeError("unusable");
}
const clonedRequest = cloneRequest(this[kState]);
const ac = new AbortController();
if (this.signal.aborted) {
ac.abort(this.signal.reason);
} else {
let list = dependentControllerMap.get(this.signal);
if (list === void 0) {
list = /* @__PURE__ */ new Set();
dependentControllerMap.set(this.signal, list);
}
const acRef = new WeakRef(ac);
list.add(acRef);
util5.addAbortListener(
ac.signal,
buildAbort(acRef)
);
}
return fromInnerRequest(clonedRequest, ac.signal, getHeadersGuard(this[kHeaders]));
}
[nodeUtil.inspect.custom](depth, options) {
if (options.depth === null) {
options.depth = 2;
}
options.colors ??= true;
const properties = {
method: this.method,
url: this.url,
headers: this.headers,
destination: this.destination,
referrer: this.referrer,
referrerPolicy: this.referrerPolicy,
mode: this.mode,
credentials: this.credentials,
cache: this.cache,
redirect: this.redirect,
integrity: this.integrity,
keepalive: this.keepalive,
isReloadNavigation: this.isReloadNavigation,
isHistoryNavigation: this.isHistoryNavigation,
signal: this.signal
};
return `Request ${nodeUtil.formatWithOptions(options, properties)}`;
}
};
mixinBody(Request2);
function makeRequest(init) {
return {
method: init.method ?? "GET",
localURLsOnly: init.localURLsOnly ?? false,
unsafeRequest: init.unsafeRequest ?? false,
body: init.body ?? null,
client: init.client ?? null,
reservedClient: init.reservedClient ?? null,
replacesClientId: init.replacesClientId ?? "",
window: init.window ?? "client",
keepalive: init.keepalive ?? false,
serviceWorkers: init.serviceWorkers ?? "all",
initiator: init.initiator ?? "",
destination: init.destination ?? "",
priority: init.priority ?? null,
origin: init.origin ?? "client",
policyContainer: init.policyContainer ?? "client",
referrer: init.referrer ?? "client",
referrerPolicy: init.referrerPolicy ?? "",
mode: init.mode ?? "no-cors",
useCORSPreflightFlag: init.useCORSPreflightFlag ?? false,
credentials: init.credentials ?? "same-origin",
useCredentials: init.useCredentials ?? false,
cache: init.cache ?? "default",
redirect: init.redirect ?? "follow",
integrity: init.integrity ?? "",
cryptoGraphicsNonceMetadata: init.cryptoGraphicsNonceMetadata ?? "",
parserMetadata: init.parserMetadata ?? "",
reloadNavigation: init.reloadNavigation ?? false,
historyNavigation: init.historyNavigation ?? false,
userActivation: init.userActivation ?? false,
taintedOrigin: init.taintedOrigin ?? false,
redirectCount: init.redirectCount ?? 0,
responseTainting: init.responseTainting ?? "basic",
preventNoCacheCacheControlHeaderModification: init.preventNoCacheCacheControlHeaderModification ?? false,
done: init.done ?? false,
timingAllowFailed: init.timingAllowFailed ?? false,
urlList: init.urlList,
url: init.urlList[0],
headersList: init.headersList ? new HeadersList(init.headersList) : new HeadersList()
};
}
function cloneRequest(request) {
const newRequest = makeRequest({ ...request, body: null });
if (request.body != null) {
newRequest.body = cloneBody(newRequest, request.body);
}
return newRequest;
}
function fromInnerRequest(innerRequest, signal, guard) {
const request = new Request2(kConstruct);
request[kState] = innerRequest;
request[kSignal] = signal;
request[kHeaders] = new Headers(kConstruct);
setHeadersList(request[kHeaders], innerRequest.headersList);
setHeadersGuard(request[kHeaders], guard);
return request;
}
Object.defineProperties(Request2.prototype, {
method: kEnumerableProperty,
url: kEnumerableProperty,
headers: kEnumerableProperty,
redirect: kEnumerableProperty,
clone: kEnumerableProperty,
signal: kEnumerableProperty,
duplex: kEnumerableProperty,
destination: kEnumerableProperty,
body: kEnumerableProperty,
bodyUsed: kEnumerableProperty,
isHistoryNavigation: kEnumerableProperty,
isReloadNavigation: kEnumerableProperty,
keepalive: kEnumerableProperty,
integrity: kEnumerableProperty,
cache: kEnumerableProperty,
credentials: kEnumerableProperty,
attribute: kEnumerableProperty,
referrerPolicy: kEnumerableProperty,
referrer: kEnumerableProperty,
mode: kEnumerableProperty,
[Symbol.toStringTag]: {
value: "Request",
configurable: true
}
});
webidl.converters.Request = webidl.interfaceConverter(
Request2
);
webidl.converters.RequestInfo = function(V, prefix, argument) {
if (typeof V === "string") {
return webidl.converters.USVString(V, prefix, argument);
}
if (V instanceof Request2) {
return webidl.converters.Request(V, prefix, argument);
}
return webidl.converters.USVString(V, prefix, argument);
};
webidl.converters.AbortSignal = webidl.interfaceConverter(
AbortSignal
);
webidl.converters.RequestInit = webidl.dictionaryConverter([
{
key: "method",
converter: webidl.converters.ByteString
},
{
key: "headers",
converter: webidl.converters.HeadersInit
},
{
key: "body",
converter: webidl.nullableConverter(
webidl.converters.BodyInit
)
},
{
key: "referrer",
converter: webidl.converters.USVString
},
{
key: "referrerPolicy",
converter: webidl.converters.DOMString,
// https://w3c.github.io/webappsec-referrer-policy/#referrer-policy
allowedValues: referrerPolicy
},
{
key: "mode",
converter: webidl.converters.DOMString,
// https://fetch.spec.whatwg.org/#concept-request-mode
allowedValues: requestMode
},
{
key: "credentials",
converter: webidl.converters.DOMString,
// https://fetch.spec.whatwg.org/#requestcredentials
allowedValues: requestCredentials
},
{
key: "cache",
converter: webidl.converters.DOMString,
// https://fetch.spec.whatwg.org/#requestcache
allowedValues: requestCache
},
{
key: "redirect",
converter: webidl.converters.DOMString,
// https://fetch.spec.whatwg.org/#requestredirect
allowedValues: requestRedirect
},
{
key: "integrity",
converter: webidl.converters.DOMString
},
{
key: "keepalive",
converter: webidl.converters.boolean
},
{
key: "signal",
converter: webidl.nullableConverter(
(signal) => webidl.converters.AbortSignal(
signal,
"RequestInit",
"signal",
{ strict: false }
)
)
},
{
key: "window",
converter: webidl.converters.any
},
{
key: "duplex",
converter: webidl.converters.DOMString,
allowedValues: requestDuplex
},
{
key: "dispatcher",
// undici specific option
converter: webidl.converters.any
}
]);
module2.exports = { Request: Request2, makeRequest, fromInnerRequest, cloneRequest };
}
});
// node_modules/undici/lib/web/fetch/index.js
var require_fetch = __commonJS({
"node_modules/undici/lib/web/fetch/index.js"(exports2, module2) {
"use strict";
var {
makeNetworkError,
makeAppropriateNetworkError,
filterResponse,
makeResponse,
fromInnerResponse
} = require_response();
var { HeadersList } = require_headers();
var { Request: Request2, cloneRequest } = require_request2();
var zlib2 = require("node:zlib");
var {
bytesMatch,
makePolicyContainer,
clonePolicyContainer,
requestBadPort,
TAOCheck,
appendRequestOriginHeader,
responseLocationURL,
requestCurrentURL,
setRequestReferrerPolicyOnRedirect,
tryUpgradeRequestToAPotentiallyTrustworthyURL,
createOpaqueTimingInfo,
appendFetchMetadata,
corsCheck,
crossOriginResourcePolicyCheck,
determineRequestsReferrer,
coarsenedSharedCurrentTime,
createDeferredPromise,
isBlobLike,
sameOrigin,
isCancelled,
isAborted: isAborted3,
isErrorLike,
fullyReadBody,
readableStreamClose,
isomorphicEncode,
urlIsLocal,
urlIsHttpHttpsScheme,
urlHasHttpsScheme,
clampAndCoarsenConnectionTimingInfo,
simpleRangeHeaderValue,
buildContentRange,
createInflate,
extractMimeType
} = require_util3();
var { kState, kDispatcher } = require_symbols2();
var assert = require("node:assert");
var { safelyExtractBody, extractBody } = require_body();
var {
redirectStatusSet,
nullBodyStatus,
safeMethodsSet,
requestBodyHeader,
subresourceSet
} = require_constants3();
var EE = require("node:events");
var { Readable: Readable2, pipeline, finished } = require("node:stream");
var { addAbortListener, isErrored, isReadable, bufferToLowerCasedHeaderName } = require_util2();
var { dataURLProcessor, serializeAMimeType, minimizeSupportedMimeType } = require_data_url();
var { getGlobalDispatcher } = require_global2();
var { webidl } = require_webidl();
var { STATUS_CODES } = require("node:http");
var GET_OR_HEAD = ["GET", "HEAD"];
var defaultUserAgent = typeof __UNDICI_IS_NODE__ !== "undefined" || typeof esbuildDetection !== "undefined" ? "node" : "undici";
var resolveObjectURL;
var Fetch = class extends EE {
constructor(dispatcher) {
super();
this.dispatcher = dispatcher;
this.connection = null;
this.dump = false;
this.state = "ongoing";
}
terminate(reason) {
if (this.state !== "ongoing") {
return;
}
this.state = "terminated";
this.connection?.destroy(reason);
this.emit("terminated", reason);
}
// https://fetch.spec.whatwg.org/#fetch-controller-abort
abort(error) {
if (this.state !== "ongoing") {
return;
}
this.state = "aborted";
if (!error) {
error = new DOMException("The operation was aborted.", "AbortError");
}
this.serializedAbortReason = error;
this.connection?.destroy(error);
this.emit("terminated", error);
}
};
function handleFetchDone(response) {
finalizeAndReportTiming(response, "fetch");
}
function fetch3(input, init = void 0) {
webidl.argumentLengthCheck(arguments, 1, "globalThis.fetch");
let p = createDeferredPromise();
let requestObject;
try {
requestObject = new Request2(input, init);
} catch (e) {
p.reject(e);
return p.promise;
}
const request = requestObject[kState];
if (requestObject.signal.aborted) {
abortFetch(p, request, null, requestObject.signal.reason);
return p.promise;
}
const globalObject = request.client.globalObject;
if (globalObject?.constructor?.name === "ServiceWorkerGlobalScope") {
request.serviceWorkers = "none";
}
let responseObject = null;
let locallyAborted = false;
let controller = null;
addAbortListener(
requestObject.signal,
() => {
locallyAborted = true;
assert(controller != null);
controller.abort(requestObject.signal.reason);
const realResponse = responseObject?.deref();
abortFetch(p, request, realResponse, requestObject.signal.reason);
}
);
const processResponse = (response) => {
if (locallyAborted) {
return;
}
if (response.aborted) {
abortFetch(p, request, responseObject, controller.serializedAbortReason);
return;
}
if (response.type === "error") {
p.reject(new TypeError("fetch failed", { cause: response.error }));
return;
}
responseObject = new WeakRef(fromInnerResponse(response, "immutable"));
p.resolve(responseObject.deref());
p = null;
};
controller = fetching({
request,
processResponseEndOfBody: handleFetchDone,
processResponse,
dispatcher: requestObject[kDispatcher]
// undici
});
return p.promise;
}
function finalizeAndReportTiming(response, initiatorType = "other") {
if (response.type === "error" && response.aborted) {
return;
}
if (!response.urlList?.length) {
return;
}
const originalURL = response.urlList[0];
let timingInfo = response.timingInfo;
let cacheState = response.cacheState;
if (!urlIsHttpHttpsScheme(originalURL)) {
return;
}
if (timingInfo === null) {
return;
}
if (!response.timingAllowPassed) {
timingInfo = createOpaqueTimingInfo({
startTime: timingInfo.startTime
});
cacheState = "";
}
timingInfo.endTime = coarsenedSharedCurrentTime();
response.timingInfo = timingInfo;
markResourceTiming(
timingInfo,
originalURL.href,
initiatorType,
globalThis,
cacheState
);
}
var markResourceTiming = performance.markResourceTiming;
function abortFetch(p, request, responseObject, error) {
if (p) {
p.reject(error);
}
if (request.body != null && isReadable(request.body?.stream)) {
request.body.stream.cancel(error).catch((err2) => {
if (err2.code === "ERR_INVALID_STATE") {
return;
}
throw err2;
});
}
if (responseObject == null) {
return;
}
const response = responseObject[kState];
if (response.body != null && isReadable(response.body?.stream)) {
response.body.stream.cancel(error).catch((err2) => {
if (err2.code === "ERR_INVALID_STATE") {
return;
}
throw err2;
});
}
}
function fetching({
request,
processRequestBodyChunkLength,
processRequestEndOfBody,
processResponse,
processResponseEndOfBody,
processResponseConsumeBody,
useParallelQueue = false,
dispatcher = getGlobalDispatcher()
// undici
}) {
assert(dispatcher);
let taskDestination = null;
let crossOriginIsolatedCapability = false;
if (request.client != null) {
taskDestination = request.client.globalObject;
crossOriginIsolatedCapability = request.client.crossOriginIsolatedCapability;
}
const currentTime = coarsenedSharedCurrentTime(crossOriginIsolatedCapability);
const timingInfo = createOpaqueTimingInfo({
startTime: currentTime
});
const fetchParams = {
controller: new Fetch(dispatcher),
request,
timingInfo,
processRequestBodyChunkLength,
processRequestEndOfBody,
processResponse,
processResponseConsumeBody,
processResponseEndOfBody,
taskDestination,
crossOriginIsolatedCapability
};
assert(!request.body || request.body.stream);
if (request.window === "client") {
request.window = request.client?.globalObject?.constructor?.name === "Window" ? request.client : "no-window";
}
if (request.origin === "client") {
request.origin = request.client.origin;
}
if (request.policyContainer === "client") {
if (request.client != null) {
request.policyContainer = clonePolicyContainer(
request.client.policyContainer
);
} else {
request.policyContainer = makePolicyContainer();
}
}
if (!request.headersList.contains("accept", true)) {
const value = "*/*";
request.headersList.append("accept", value, true);
}
if (!request.headersList.contains("accept-language", true)) {
request.headersList.append("accept-language", "*", true);
}
if (request.priority === null) {
}
if (subresourceSet.has(request.destination)) {
}
mainFetch(fetchParams).catch((err2) => {
fetchParams.controller.terminate(err2);
});
return fetchParams.controller;
}
async function mainFetch(fetchParams, recursive = false) {
const request = fetchParams.request;
let response = null;
if (request.localURLsOnly && !urlIsLocal(requestCurrentURL(request))) {
response = makeNetworkError("local URLs only");
}
tryUpgradeRequestToAPotentiallyTrustworthyURL(request);
if (requestBadPort(request) === "blocked") {
response = makeNetworkError("bad port");
}
if (request.referrerPolicy === "") {
request.referrerPolicy = request.policyContainer.referrerPolicy;
}
if (request.referrer !== "no-referrer") {
request.referrer = determineRequestsReferrer(request);
}
if (response === null) {
response = await (async () => {
const currentURL = requestCurrentURL(request);
if (
// - request’s current URL’s origin is same origin with request’s origin,
// and request’s response tainting is "basic"
sameOrigin(currentURL, request.url) && request.responseTainting === "basic" || // request’s current URL’s scheme is "data"
currentURL.protocol === "data:" || // - request’s mode is "navigate" or "websocket"
(request.mode === "navigate" || request.mode === "websocket")
) {
request.responseTainting = "basic";
return await schemeFetch(fetchParams);
}
if (request.mode === "same-origin") {
return makeNetworkError('request mode cannot be "same-origin"');
}
if (request.mode === "no-cors") {
if (request.redirect !== "follow") {
return makeNetworkError(
'redirect mode cannot be "follow" for "no-cors" request'
);
}
request.responseTainting = "opaque";
return await schemeFetch(fetchParams);
}
if (!urlIsHttpHttpsScheme(requestCurrentURL(request))) {
return makeNetworkError("URL scheme must be a HTTP(S) scheme");
}
request.responseTainting = "cors";
return await httpFetch(fetchParams);
})();
}
if (recursive) {
return response;
}
if (response.status !== 0 && !response.internalResponse) {
if (request.responseTainting === "cors") {
}
if (request.responseTainting === "basic") {
response = filterResponse(response, "basic");
} else if (request.responseTainting === "cors") {
response = filterResponse(response, "cors");
} else if (request.responseTainting === "opaque") {
response = filterResponse(response, "opaque");
} else {
assert(false);
}
}
let internalResponse = response.status === 0 ? response : response.internalResponse;
if (internalResponse.urlList.length === 0) {
internalResponse.urlList.push(...request.urlList);
}
if (!request.timingAllowFailed) {
response.timingAllowPassed = true;
}
if (response.type === "opaque" && internalResponse.status === 206 && internalResponse.rangeRequested && !request.headers.contains("range", true)) {
response = internalResponse = makeNetworkError();
}
if (response.status !== 0 && (request.method === "HEAD" || request.method === "CONNECT" || nullBodyStatus.includes(internalResponse.status))) {
internalResponse.body = null;
fetchParams.controller.dump = true;
}
if (request.integrity) {
const processBodyError = (reason) => fetchFinale(fetchParams, makeNetworkError(reason));
if (request.responseTainting === "opaque" || response.body == null) {
processBodyError(response.error);
return;
}
const processBody = (bytes) => {
if (!bytesMatch(bytes, request.integrity)) {
processBodyError("integrity mismatch");
return;
}
response.body = safelyExtractBody(bytes)[0];
fetchFinale(fetchParams, response);
};
await fullyReadBody(response.body, processBody, processBodyError);
} else {
fetchFinale(fetchParams, response);
}
}
function schemeFetch(fetchParams) {
if (isCancelled(fetchParams) && fetchParams.request.redirectCount === 0) {
return Promise.resolve(makeAppropriateNetworkError(fetchParams));
}
const { request } = fetchParams;
const { protocol: scheme } = requestCurrentURL(request);
switch (scheme) {
case "about:": {
return Promise.resolve(makeNetworkError("about scheme is not supported"));
}
case "blob:": {
if (!resolveObjectURL) {
resolveObjectURL = require("node:buffer").resolveObjectURL;
}
const blobURLEntry = requestCurrentURL(request);
if (blobURLEntry.search.length !== 0) {
return Promise.resolve(makeNetworkError("NetworkError when attempting to fetch resource."));
}
const blob = resolveObjectURL(blobURLEntry.toString());
if (request.method !== "GET" || !isBlobLike(blob)) {
return Promise.resolve(makeNetworkError("invalid method"));
}
const response = makeResponse();
const fullLength = blob.size;
const serializedFullLength = isomorphicEncode(`${fullLength}`);
const type = blob.type;
if (!request.headersList.contains("range", true)) {
const bodyWithType = extractBody(blob);
response.statusText = "OK";
response.body = bodyWithType[0];
response.headersList.set("content-length", serializedFullLength, true);
response.headersList.set("content-type", type, true);
} else {
response.rangeRequested = true;
const rangeHeader = request.headersList.get("range", true);
const rangeValue = simpleRangeHeaderValue(rangeHeader, true);
if (rangeValue === "failure") {
return Promise.resolve(makeNetworkError("failed to fetch the data URL"));
}
let { rangeStartValue: rangeStart, rangeEndValue: rangeEnd } = rangeValue;
if (rangeStart === null) {
rangeStart = fullLength - rangeEnd;
rangeEnd = rangeStart + rangeEnd - 1;
} else {
if (rangeStart >= fullLength) {
return Promise.resolve(makeNetworkError("Range start is greater than the blob's size."));
}
if (rangeEnd === null || rangeEnd >= fullLength) {
rangeEnd = fullLength - 1;
}
}
const slicedBlob = blob.slice(rangeStart, rangeEnd, type);
const slicedBodyWithType = extractBody(slicedBlob);
response.body = slicedBodyWithType[0];
const serializedSlicedLength = isomorphicEncode(`${slicedBlob.size}`);
const contentRange = buildContentRange(rangeStart, rangeEnd, fullLength);
response.status = 206;
response.statusText = "Partial Content";
response.headersList.set("content-length", serializedSlicedLength, true);
response.headersList.set("content-type", type, true);
response.headersList.set("content-range", contentRange, true);
}
return Promise.resolve(response);
}
case "data:": {
const currentURL = requestCurrentURL(request);
const dataURLStruct = dataURLProcessor(currentURL);
if (dataURLStruct === "failure") {
return Promise.resolve(makeNetworkError("failed to fetch the data URL"));
}
const mimeType = serializeAMimeType(dataURLStruct.mimeType);
return Promise.resolve(makeResponse({
statusText: "OK",
headersList: [
["content-type", { name: "Content-Type", value: mimeType }]
],
body: safelyExtractBody(dataURLStruct.body)[0]
}));
}
case "file:": {
return Promise.resolve(makeNetworkError("not implemented... yet..."));
}
case "http:":
case "https:": {
return httpFetch(fetchParams).catch((err2) => makeNetworkError(err2));
}
default: {
return Promise.resolve(makeNetworkError("unknown scheme"));
}
}
}
function finalizeResponse(fetchParams, response) {
fetchParams.request.done = true;
if (fetchParams.processResponseDone != null) {
queueMicrotask(() => fetchParams.processResponseDone(response));
}
}
function fetchFinale(fetchParams, response) {
let timingInfo = fetchParams.timingInfo;
const processResponseEndOfBody = () => {
const unsafeEndTime = Date.now();
if (fetchParams.request.destination === "document") {
fetchParams.controller.fullTimingInfo = timingInfo;
}
fetchParams.controller.reportTimingSteps = () => {
if (fetchParams.request.url.protocol !== "https:") {
return;
}
timingInfo.endTime = unsafeEndTime;
let cacheState = response.cacheState;
const bodyInfo = response.bodyInfo;
if (!response.timingAllowPassed) {
timingInfo = createOpaqueTimingInfo(timingInfo);
cacheState = "";
}
let responseStatus = 0;
if (fetchParams.request.mode !== "navigator" || !response.hasCrossOriginRedirects) {
responseStatus = response.status;
const mimeType = extractMimeType(response.headersList);
if (mimeType !== "failure") {
bodyInfo.contentType = minimizeSupportedMimeType(mimeType);
}
}
if (fetchParams.request.initiatorType != null) {
markResourceTiming(timingInfo, fetchParams.request.url.href, fetchParams.request.initiatorType, globalThis, cacheState, bodyInfo, responseStatus);
}
};
const processResponseEndOfBodyTask = () => {
fetchParams.request.done = true;
if (fetchParams.processResponseEndOfBody != null) {
queueMicrotask(() => fetchParams.processResponseEndOfBody(response));
}
if (fetchParams.request.initiatorType != null) {
fetchParams.controller.reportTimingSteps();
}
};
queueMicrotask(() => processResponseEndOfBodyTask());
};
if (fetchParams.processResponse != null) {
queueMicrotask(() => {
fetchParams.processResponse(response);
fetchParams.processResponse = null;
});
}
const internalResponse = response.type === "error" ? response : response.internalResponse ?? response;
if (internalResponse.body == null) {
processResponseEndOfBody();
} else {
finished(internalResponse.body.stream, () => {
processResponseEndOfBody();
});
}
}
async function httpFetch(fetchParams) {
const request = fetchParams.request;
let response = null;
let actualResponse = null;
const timingInfo = fetchParams.timingInfo;
if (request.serviceWorkers === "all") {
}
if (response === null) {
if (request.redirect === "follow") {
request.serviceWorkers = "none";
}
actualResponse = response = await httpNetworkOrCacheFetch(fetchParams);
if (request.responseTainting === "cors" && corsCheck(request, response) === "failure") {
return makeNetworkError("cors failure");
}
if (TAOCheck(request, response) === "failure") {
request.timingAllowFailed = true;
}
}
if ((request.responseTainting === "opaque" || response.type === "opaque") && crossOriginResourcePolicyCheck(
request.origin,
request.client,
request.destination,
actualResponse
) === "blocked") {
return makeNetworkError("blocked");
}
if (redirectStatusSet.has(actualResponse.status)) {
if (request.redirect !== "manual") {
fetchParams.controller.connection.destroy(void 0, false);
}
if (request.redirect === "error") {
response = makeNetworkError("unexpected redirect");
} else if (request.redirect === "manual") {
response = actualResponse;
} else if (request.redirect === "follow") {
response = await httpRedirectFetch(fetchParams, response);
} else {
assert(false);
}
}
response.timingInfo = timingInfo;
return response;
}
function httpRedirectFetch(fetchParams, response) {
const request = fetchParams.request;
const actualResponse = response.internalResponse ? response.internalResponse : response;
let locationURL;
try {
locationURL = responseLocationURL(
actualResponse,
requestCurrentURL(request).hash
);
if (locationURL == null) {
return response;
}
} catch (err2) {
return Promise.resolve(makeNetworkError(err2));
}
if (!urlIsHttpHttpsScheme(locationURL)) {
return Promise.resolve(makeNetworkError("URL scheme must be a HTTP(S) scheme"));
}
if (request.redirectCount === 20) {
return Promise.resolve(makeNetworkError("redirect count exceeded"));
}
request.redirectCount += 1;
if (request.mode === "cors" && (locationURL.username || locationURL.password) && !sameOrigin(request, locationURL)) {
return Promise.resolve(makeNetworkError('cross origin not allowed for request mode "cors"'));
}
if (request.responseTainting === "cors" && (locationURL.username || locationURL.password)) {
return Promise.resolve(makeNetworkError(
'URL cannot contain credentials for request mode "cors"'
));
}
if (actualResponse.status !== 303 && request.body != null && request.body.source == null) {
return Promise.resolve(makeNetworkError());
}
if ([301, 302].includes(actualResponse.status) && request.method === "POST" || actualResponse.status === 303 && !GET_OR_HEAD.includes(request.method)) {
request.method = "GET";
request.body = null;
for (const headerName of requestBodyHeader) {
request.headersList.delete(headerName);
}
}
if (!sameOrigin(requestCurrentURL(request), locationURL)) {
request.headersList.delete("authorization", true);
request.headersList.delete("proxy-authorization", true);
request.headersList.delete("cookie", true);
request.headersList.delete("host", true);
}
if (request.body != null) {
assert(request.body.source != null);
request.body = safelyExtractBody(request.body.source)[0];
}
const timingInfo = fetchParams.timingInfo;
timingInfo.redirectEndTime = timingInfo.postRedirectStartTime = coarsenedSharedCurrentTime(fetchParams.crossOriginIsolatedCapability);
if (timingInfo.redirectStartTime === 0) {
timingInfo.redirectStartTime = timingInfo.startTime;
}
request.urlList.push(locationURL);
setRequestReferrerPolicyOnRedirect(request, actualResponse);
return mainFetch(fetchParams, true);
}
async function httpNetworkOrCacheFetch(fetchParams, isAuthenticationFetch = false, isNewConnectionFetch = false) {
const request = fetchParams.request;
let httpFetchParams = null;
let httpRequest = null;
let response = null;
const httpCache = null;
const revalidatingFlag = false;
if (request.window === "no-window" && request.redirect === "error") {
httpFetchParams = fetchParams;
httpRequest = request;
} else {
httpRequest = cloneRequest(request);
httpFetchParams = { ...fetchParams };
httpFetchParams.request = httpRequest;
}
const includeCredentials = request.credentials === "include" || request.credentials === "same-origin" && request.responseTainting === "basic";
const contentLength = httpRequest.body ? httpRequest.body.length : null;
let contentLengthHeaderValue = null;
if (httpRequest.body == null && ["POST", "PUT"].includes(httpRequest.method)) {
contentLengthHeaderValue = "0";
}
if (contentLength != null) {
contentLengthHeaderValue = isomorphicEncode(`${contentLength}`);
}
if (contentLengthHeaderValue != null) {
httpRequest.headersList.append("content-length", contentLengthHeaderValue, true);
}
if (contentLength != null && httpRequest.keepalive) {
}
if (httpRequest.referrer instanceof URL) {
httpRequest.headersList.append("referer", isomorphicEncode(httpRequest.referrer.href), true);
}
appendRequestOriginHeader(httpRequest);
appendFetchMetadata(httpRequest);
if (!httpRequest.headersList.contains("user-agent", true)) {
httpRequest.headersList.append("user-agent", defaultUserAgent);
}
if (httpRequest.cache === "default" && (httpRequest.headersList.contains("if-modified-since", true) || httpRequest.headersList.contains("if-none-match", true) || httpRequest.headersList.contains("if-unmodified-since", true) || httpRequest.headersList.contains("if-match", true) || httpRequest.headersList.contains("if-range", true))) {
httpRequest.cache = "no-store";
}
if (httpRequest.cache === "no-cache" && !httpRequest.preventNoCacheCacheControlHeaderModification && !httpRequest.headersList.contains("cache-control", true)) {
httpRequest.headersList.append("cache-control", "max-age=0", true);
}
if (httpRequest.cache === "no-store" || httpRequest.cache === "reload") {
if (!httpRequest.headersList.contains("pragma", true)) {
httpRequest.headersList.append("pragma", "no-cache", true);
}
if (!httpRequest.headersList.contains("cache-control", true)) {
httpRequest.headersList.append("cache-control", "no-cache", true);
}
}
if (httpRequest.headersList.contains("range", true)) {
httpRequest.headersList.append("accept-encoding", "identity", true);
}
if (!httpRequest.headersList.contains("accept-encoding", true)) {
if (urlHasHttpsScheme(requestCurrentURL(httpRequest))) {
httpRequest.headersList.append("accept-encoding", "br, gzip, deflate", true);
} else {
httpRequest.headersList.append("accept-encoding", "gzip, deflate", true);
}
}
httpRequest.headersList.delete("host", true);
if (includeCredentials) {
}
if (httpCache == null) {
httpRequest.cache = "no-store";
}
if (httpRequest.cache !== "no-store" && httpRequest.cache !== "reload") {
}
if (response == null) {
if (httpRequest.cache === "only-if-cached") {
return makeNetworkError("only if cached");
}
const forwardResponse = await httpNetworkFetch(
httpFetchParams,
includeCredentials,
isNewConnectionFetch
);
if (!safeMethodsSet.has(httpRequest.method) && forwardResponse.status >= 200 && forwardResponse.status <= 399) {
}
if (revalidatingFlag && forwardResponse.status === 304) {
}
if (response == null) {
response = forwardResponse;
}
}
response.urlList = [...httpRequest.urlList];
if (httpRequest.headersList.contains("range", true)) {
response.rangeRequested = true;
}
response.requestIncludesCredentials = includeCredentials;
if (response.status === 407) {
if (request.window === "no-window") {
return makeNetworkError();
}
if (isCancelled(fetchParams)) {
return makeAppropriateNetworkError(fetchParams);
}
return makeNetworkError("proxy authentication required");
}
if (
// response’s status is 421
response.status === 421 && // isNewConnectionFetch is false
!isNewConnectionFetch && // request’s body is null, or request’s body is non-null and request’s body’s source is non-null
(request.body == null || request.body.source != null)
) {
if (isCancelled(fetchParams)) {
return makeAppropriateNetworkError(fetchParams);
}
fetchParams.controller.connection.destroy();
response = await httpNetworkOrCacheFetch(
fetchParams,
isAuthenticationFetch,
true
);
}
if (isAuthenticationFetch) {
}
return response;
}
async function httpNetworkFetch(fetchParams, includeCredentials = false, forceNewConnection = false) {
assert(!fetchParams.controller.connection || fetchParams.controller.connection.destroyed);
fetchParams.controller.connection = {
abort: null,
destroyed: false,
destroy(err2, abort = true) {
if (!this.destroyed) {
this.destroyed = true;
if (abort) {
this.abort?.(err2 ?? new DOMException("The operation was aborted.", "AbortError"));
}
}
}
};
const request = fetchParams.request;
let response = null;
const timingInfo = fetchParams.timingInfo;
const httpCache = null;
if (httpCache == null) {
request.cache = "no-store";
}
const newConnection = forceNewConnection ? "yes" : "no";
if (request.mode === "websocket") {
} else {
}
let requestBody = null;
if (request.body == null && fetchParams.processRequestEndOfBody) {
queueMicrotask(() => fetchParams.processRequestEndOfBody());
} else if (request.body != null) {
const processBodyChunk = async function* (bytes) {
if (isCancelled(fetchParams)) {
return;
}
yield bytes;
fetchParams.processRequestBodyChunkLength?.(bytes.byteLength);
};
const processEndOfBody = () => {
if (isCancelled(fetchParams)) {
return;
}
if (fetchParams.processRequestEndOfBody) {
fetchParams.processRequestEndOfBody();
}
};
const processBodyError = (e) => {
if (isCancelled(fetchParams)) {
return;
}
if (e.name === "AbortError") {
fetchParams.controller.abort();
} else {
fetchParams.controller.terminate(e);
}
};
requestBody = (async function* () {
try {
for await (const bytes of request.body.stream) {
yield* processBodyChunk(bytes);
}
processEndOfBody();
} catch (err2) {
processBodyError(err2);
}
})();
}
try {
const { body, status, statusText, headersList, socket } = await dispatch({ body: requestBody });
if (socket) {
response = makeResponse({ status, statusText, headersList, socket });
} else {
const iterator = body[Symbol.asyncIterator]();
fetchParams.controller.next = () => iterator.next();
response = makeResponse({ status, statusText, headersList });
}
} catch (err2) {
if (err2.name === "AbortError") {
fetchParams.controller.connection.destroy();
return makeAppropriateNetworkError(fetchParams, err2);
}
return makeNetworkError(err2);
}
const pullAlgorithm = async () => {
await fetchParams.controller.resume();
};
const cancelAlgorithm = (reason) => {
if (!isCancelled(fetchParams)) {
fetchParams.controller.abort(reason);
}
};
const stream5 = new ReadableStream(
{
async start(controller) {
fetchParams.controller.controller = controller;
},
async pull(controller) {
await pullAlgorithm(controller);
},
async cancel(reason) {
await cancelAlgorithm(reason);
},
type: "bytes"
}
);
response.body = { stream: stream5, source: null, length: null };
fetchParams.controller.onAborted = onAborted;
fetchParams.controller.on("terminated", onAborted);
fetchParams.controller.resume = async () => {
while (true) {
let bytes;
let isFailure;
try {
const { done, value } = await fetchParams.controller.next();
if (isAborted3(fetchParams)) {
break;
}
bytes = done ? void 0 : value;
} catch (err2) {
if (fetchParams.controller.ended && !timingInfo.encodedBodySize) {
bytes = void 0;
} else {
bytes = err2;
isFailure = true;
}
}
if (bytes === void 0) {
readableStreamClose(fetchParams.controller.controller);
finalizeResponse(fetchParams, response);
return;
}
timingInfo.decodedBodySize += bytes?.byteLength ?? 0;
if (isFailure) {
fetchParams.controller.terminate(bytes);
return;
}
const buffer = new Uint8Array(bytes);
if (buffer.byteLength) {
fetchParams.controller.controller.enqueue(buffer);
}
if (isErrored(stream5)) {
fetchParams.controller.terminate();
return;
}
if (fetchParams.controller.controller.desiredSize <= 0) {
return;
}
}
};
function onAborted(reason) {
if (isAborted3(fetchParams)) {
response.aborted = true;
if (isReadable(stream5)) {
fetchParams.controller.controller.error(
fetchParams.controller.serializedAbortReason
);
}
} else {
if (isReadable(stream5)) {
fetchParams.controller.controller.error(new TypeError("terminated", {
cause: isErrorLike(reason) ? reason : void 0
}));
}
}
fetchParams.controller.connection.destroy();
}
return response;
function dispatch({ body }) {
const url2 = requestCurrentURL(request);
const agent = fetchParams.controller.dispatcher;
return new Promise((resolve, reject) => agent.dispatch(
{
path: url2.pathname + url2.search,
origin: url2.origin,
method: request.method,
body: agent.isMockActive ? request.body && (request.body.source || request.body.stream) : body,
headers: request.headersList.entries,
maxRedirections: 0,
upgrade: request.mode === "websocket" ? "websocket" : void 0
},
{
body: null,
abort: null,
onConnect(abort) {
const { connection } = fetchParams.controller;
timingInfo.finalConnectionTimingInfo = clampAndCoarsenConnectionTimingInfo(void 0, timingInfo.postRedirectStartTime, fetchParams.crossOriginIsolatedCapability);
if (connection.destroyed) {
abort(new DOMException("The operation was aborted.", "AbortError"));
} else {
fetchParams.controller.on("terminated", abort);
this.abort = connection.abort = abort;
}
timingInfo.finalNetworkRequestStartTime = coarsenedSharedCurrentTime(fetchParams.crossOriginIsolatedCapability);
},
onResponseStarted() {
timingInfo.finalNetworkResponseStartTime = coarsenedSharedCurrentTime(fetchParams.crossOriginIsolatedCapability);
},
onHeaders(status, rawHeaders, resume, statusText) {
if (status < 200) {
return;
}
let codings = [];
let location = "";
const headersList = new HeadersList();
for (let i = 0; i < rawHeaders.length; i += 2) {
headersList.append(bufferToLowerCasedHeaderName(rawHeaders[i]), rawHeaders[i + 1].toString("latin1"), true);
}
const contentEncoding = headersList.get("content-encoding", true);
if (contentEncoding) {
codings = contentEncoding.toLowerCase().split(",").map((x) => x.trim());
}
location = headersList.get("location", true);
this.body = new Readable2({ read: resume });
const decoders = [];
const willFollow = location && request.redirect === "follow" && redirectStatusSet.has(status);
if (codings.length !== 0 && request.method !== "HEAD" && request.method !== "CONNECT" && !nullBodyStatus.includes(status) && !willFollow) {
for (let i = codings.length - 1; i >= 0; --i) {
const coding = codings[i];
if (coding === "x-gzip" || coding === "gzip") {
decoders.push(zlib2.createGunzip({
// Be less strict when decoding compressed responses, since sometimes
// servers send slightly invalid responses that are still accepted
// by common browsers.
// Always using Z_SYNC_FLUSH is what cURL does.
flush: zlib2.constants.Z_SYNC_FLUSH,
finishFlush: zlib2.constants.Z_SYNC_FLUSH
}));
} else if (coding === "deflate") {
decoders.push(createInflate({
flush: zlib2.constants.Z_SYNC_FLUSH,
finishFlush: zlib2.constants.Z_SYNC_FLUSH
}));
} else if (coding === "br") {
decoders.push(zlib2.createBrotliDecompress({
flush: zlib2.constants.BROTLI_OPERATION_FLUSH,
finishFlush: zlib2.constants.BROTLI_OPERATION_FLUSH
}));
} else {
decoders.length = 0;
break;
}
}
}
const onError = this.onError.bind(this);
resolve({
status,
statusText,
headersList,
body: decoders.length ? pipeline(this.body, ...decoders, (err2) => {
if (err2) {
this.onError(err2);
}
}).on("error", onError) : this.body.on("error", onError)
});
return true;
},
onData(chunk) {
if (fetchParams.controller.dump) {
return;
}
const bytes = chunk;
timingInfo.encodedBodySize += bytes.byteLength;
return this.body.push(bytes);
},
onComplete() {
if (this.abort) {
fetchParams.controller.off("terminated", this.abort);
}
if (fetchParams.controller.onAborted) {
fetchParams.controller.off("terminated", fetchParams.controller.onAborted);
}
fetchParams.controller.ended = true;
this.body.push(null);
},
onError(error) {
if (this.abort) {
fetchParams.controller.off("terminated", this.abort);
}
this.body?.destroy(error);
fetchParams.controller.terminate(error);
reject(error);
},
onUpgrade(status, rawHeaders, socket) {
if (status !== 101) {
return;
}
const headersList = new HeadersList();
for (let i = 0; i < rawHeaders.length; i += 2) {
headersList.append(bufferToLowerCasedHeaderName(rawHeaders[i]), rawHeaders[i + 1].toString("latin1"), true);
}
resolve({
status,
statusText: STATUS_CODES[status],
headersList,
socket
});
return true;
}
}
));
}
}
module2.exports = {
fetch: fetch3,
Fetch,
fetching,
finalizeAndReportTiming
};
}
});
// node_modules/undici/lib/web/fileapi/symbols.js
var require_symbols3 = __commonJS({
"node_modules/undici/lib/web/fileapi/symbols.js"(exports2, module2) {
"use strict";
module2.exports = {
kState: Symbol("FileReader state"),
kResult: Symbol("FileReader result"),
kError: Symbol("FileReader error"),
kLastProgressEventFired: Symbol("FileReader last progress event fired timestamp"),
kEvents: Symbol("FileReader events"),
kAborted: Symbol("FileReader aborted")
};
}
});
// node_modules/undici/lib/web/fileapi/progressevent.js
var require_progressevent = __commonJS({
"node_modules/undici/lib/web/fileapi/progressevent.js"(exports2, module2) {
"use strict";
var { webidl } = require_webidl();
var kState = Symbol("ProgressEvent state");
var ProgressEvent = class _ProgressEvent extends Event {
constructor(type, eventInitDict = {}) {
type = webidl.converters.DOMString(type, "ProgressEvent constructor", "type");
eventInitDict = webidl.converters.ProgressEventInit(eventInitDict ?? {});
super(type, eventInitDict);
this[kState] = {
lengthComputable: eventInitDict.lengthComputable,
loaded: eventInitDict.loaded,
total: eventInitDict.total
};
}
get lengthComputable() {
webidl.brandCheck(this, _ProgressEvent);
return this[kState].lengthComputable;
}
get loaded() {
webidl.brandCheck(this, _ProgressEvent);
return this[kState].loaded;
}
get total() {
webidl.brandCheck(this, _ProgressEvent);
return this[kState].total;
}
};
webidl.converters.ProgressEventInit = webidl.dictionaryConverter([
{
key: "lengthComputable",
converter: webidl.converters.boolean,
defaultValue: () => false
},
{
key: "loaded",
converter: webidl.converters["unsigned long long"],
defaultValue: () => 0
},
{
key: "total",
converter: webidl.converters["unsigned long long"],
defaultValue: () => 0
},
{
key: "bubbles",
converter: webidl.converters.boolean,
defaultValue: () => false
},
{
key: "cancelable",
converter: webidl.converters.boolean,
defaultValue: () => false
},
{
key: "composed",
converter: webidl.converters.boolean,
defaultValue: () => false
}
]);
module2.exports = {
ProgressEvent
};
}
});
// node_modules/undici/lib/web/fileapi/encoding.js
var require_encoding = __commonJS({
"node_modules/undici/lib/web/fileapi/encoding.js"(exports2, module2) {
"use strict";
function getEncoding2(label) {
if (!label) {
return "failure";
}
switch (label.trim().toLowerCase()) {
case "unicode-1-1-utf-8":
case "unicode11utf8":
case "unicode20utf8":
case "utf-8":
case "utf8":
case "x-unicode20utf8":
return "UTF-8";
case "866":
case "cp866":
case "csibm866":
case "ibm866":
return "IBM866";
case "csisolatin2":
case "iso-8859-2":
case "iso-ir-101":
case "iso8859-2":
case "iso88592":
case "iso_8859-2":
case "iso_8859-2:1987":
case "l2":
case "latin2":
return "ISO-8859-2";
case "csisolatin3":
case "iso-8859-3":
case "iso-ir-109":
case "iso8859-3":
case "iso88593":
case "iso_8859-3":
case "iso_8859-3:1988":
case "l3":
case "latin3":
return "ISO-8859-3";
case "csisolatin4":
case "iso-8859-4":
case "iso-ir-110":
case "iso8859-4":
case "iso88594":
case "iso_8859-4":
case "iso_8859-4:1988":
case "l4":
case "latin4":
return "ISO-8859-4";
case "csisolatincyrillic":
case "cyrillic":
case "iso-8859-5":
case "iso-ir-144":
case "iso8859-5":
case "iso88595":
case "iso_8859-5":
case "iso_8859-5:1988":
return "ISO-8859-5";
case "arabic":
case "asmo-708":
case "csiso88596e":
case "csiso88596i":
case "csisolatinarabic":
case "ecma-114":
case "iso-8859-6":
case "iso-8859-6-e":
case "iso-8859-6-i":
case "iso-ir-127":
case "iso8859-6":
case "iso88596":
case "iso_8859-6":
case "iso_8859-6:1987":
return "ISO-8859-6";
case "csisolatingreek":
case "ecma-118":
case "elot_928":
case "greek":
case "greek8":
case "iso-8859-7":
case "iso-ir-126":
case "iso8859-7":
case "iso88597":
case "iso_8859-7":
case "iso_8859-7:1987":
case "sun_eu_greek":
return "ISO-8859-7";
case "csiso88598e":
case "csisolatinhebrew":
case "hebrew":
case "iso-8859-8":
case "iso-8859-8-e":
case "iso-ir-138":
case "iso8859-8":
case "iso88598":
case "iso_8859-8":
case "iso_8859-8:1988":
case "visual":
return "ISO-8859-8";
case "csiso88598i":
case "iso-8859-8-i":
case "logical":
return "ISO-8859-8-I";
case "csisolatin6":
case "iso-8859-10":
case "iso-ir-157":
case "iso8859-10":
case "iso885910":
case "l6":
case "latin6":
return "ISO-8859-10";
case "iso-8859-13":
case "iso8859-13":
case "iso885913":
return "ISO-8859-13";
case "iso-8859-14":
case "iso8859-14":
case "iso885914":
return "ISO-8859-14";
case "csisolatin9":
case "iso-8859-15":
case "iso8859-15":
case "iso885915":
case "iso_8859-15":
case "l9":
return "ISO-8859-15";
case "iso-8859-16":
return "ISO-8859-16";
case "cskoi8r":
case "koi":
case "koi8":
case "koi8-r":
case "koi8_r":
return "KOI8-R";
case "koi8-ru":
case "koi8-u":
return "KOI8-U";
case "csmacintosh":
case "mac":
case "macintosh":
case "x-mac-roman":
return "macintosh";
case "iso-8859-11":
case "iso8859-11":
case "iso885911":
case "tis-620":
case "windows-874":
return "windows-874";
case "cp1250":
case "windows-1250":
case "x-cp1250":
return "windows-1250";
case "cp1251":
case "windows-1251":
case "x-cp1251":
return "windows-1251";
case "ansi_x3.4-1968":
case "ascii":
case "cp1252":
case "cp819":
case "csisolatin1":
case "ibm819":
case "iso-8859-1":
case "iso-ir-100":
case "iso8859-1":
case "iso88591":
case "iso_8859-1":
case "iso_8859-1:1987":
case "l1":
case "latin1":
case "us-ascii":
case "windows-1252":
case "x-cp1252":
return "windows-1252";
case "cp1253":
case "windows-1253":
case "x-cp1253":
return "windows-1253";
case "cp1254":
case "csisolatin5":
case "iso-8859-9":
case "iso-ir-148":
case "iso8859-9":
case "iso88599":
case "iso_8859-9":
case "iso_8859-9:1989":
case "l5":
case "latin5":
case "windows-1254":
case "x-cp1254":
return "windows-1254";
case "cp1255":
case "windows-1255":
case "x-cp1255":
return "windows-1255";
case "cp1256":
case "windows-1256":
case "x-cp1256":
return "windows-1256";
case "cp1257":
case "windows-1257":
case "x-cp1257":
return "windows-1257";
case "cp1258":
case "windows-1258":
case "x-cp1258":
return "windows-1258";
case "x-mac-cyrillic":
case "x-mac-ukrainian":
return "x-mac-cyrillic";
case "chinese":
case "csgb2312":
case "csiso58gb231280":
case "gb2312":
case "gb_2312":
case "gb_2312-80":
case "gbk":
case "iso-ir-58":
case "x-gbk":
return "GBK";
case "gb18030":
return "gb18030";
case "big5":
case "big5-hkscs":
case "cn-big5":
case "csbig5":
case "x-x-big5":
return "Big5";
case "cseucpkdfmtjapanese":
case "euc-jp":
case "x-euc-jp":
return "EUC-JP";
case "csiso2022jp":
case "iso-2022-jp":
return "ISO-2022-JP";
case "csshiftjis":
case "ms932":
case "ms_kanji":
case "shift-jis":
case "shift_jis":
case "sjis":
case "windows-31j":
case "x-sjis":
return "Shift_JIS";
case "cseuckr":
case "csksc56011987":
case "euc-kr":
case "iso-ir-149":
case "korean":
case "ks_c_5601-1987":
case "ks_c_5601-1989":
case "ksc5601":
case "ksc_5601":
case "windows-949":
return "EUC-KR";
case "csiso2022kr":
case "hz-gb-2312":
case "iso-2022-cn":
case "iso-2022-cn-ext":
case "iso-2022-kr":
case "replacement":
return "replacement";
case "unicodefffe":
case "utf-16be":
return "UTF-16BE";
case "csunicode":
case "iso-10646-ucs-2":
case "ucs-2":
case "unicode":
case "unicodefeff":
case "utf-16":
case "utf-16le":
return "UTF-16LE";
case "x-user-defined":
return "x-user-defined";
default:
return "failure";
}
}
module2.exports = {
getEncoding: getEncoding2
};
}
});
// node_modules/undici/lib/web/fileapi/util.js
var require_util5 = __commonJS({
"node_modules/undici/lib/web/fileapi/util.js"(exports2, module2) {
"use strict";
var {
kState,
kError,
kResult,
kAborted,
kLastProgressEventFired
} = require_symbols3();
var { ProgressEvent } = require_progressevent();
var { getEncoding: getEncoding2 } = require_encoding();
var { serializeAMimeType, parseMIMEType } = require_data_url();
var { types } = require("node:util");
var { StringDecoder } = require("string_decoder");
var { btoa: btoa2 } = require("node:buffer");
var staticPropertyDescriptors = {
enumerable: true,
writable: false,
configurable: false
};
function readOperation(fr, blob, type, encodingName) {
if (fr[kState] === "loading") {
throw new DOMException("Invalid state", "InvalidStateError");
}
fr[kState] = "loading";
fr[kResult] = null;
fr[kError] = null;
const stream5 = blob.stream();
const reader = stream5.getReader();
const bytes = [];
let chunkPromise = reader.read();
let isFirstChunk = true;
(async () => {
while (!fr[kAborted]) {
try {
const { done, value } = await chunkPromise;
if (isFirstChunk && !fr[kAborted]) {
queueMicrotask(() => {
fireAProgressEvent("loadstart", fr);
});
}
isFirstChunk = false;
if (!done && types.isUint8Array(value)) {
bytes.push(value);
if ((fr[kLastProgressEventFired] === void 0 || Date.now() - fr[kLastProgressEventFired] >= 50) && !fr[kAborted]) {
fr[kLastProgressEventFired] = Date.now();
queueMicrotask(() => {
fireAProgressEvent("progress", fr);
});
}
chunkPromise = reader.read();
} else if (done) {
queueMicrotask(() => {
fr[kState] = "done";
try {
const result = packageData(bytes, type, blob.type, encodingName);
if (fr[kAborted]) {
return;
}
fr[kResult] = result;
fireAProgressEvent("load", fr);
} catch (error) {
fr[kError] = error;
fireAProgressEvent("error", fr);
}
if (fr[kState] !== "loading") {
fireAProgressEvent("loadend", fr);
}
});
break;
}
} catch (error) {
if (fr[kAborted]) {
return;
}
queueMicrotask(() => {
fr[kState] = "done";
fr[kError] = error;
fireAProgressEvent("error", fr);
if (fr[kState] !== "loading") {
fireAProgressEvent("loadend", fr);
}
});
break;
}
}
})();
}
function fireAProgressEvent(e, reader) {
const event = new ProgressEvent(e, {
bubbles: false,
cancelable: false
});
reader.dispatchEvent(event);
}
function packageData(bytes, type, mimeType, encodingName) {
switch (type) {
case "DataURL": {
let dataURL = "data:";
const parsed = parseMIMEType(mimeType || "application/octet-stream");
if (parsed !== "failure") {
dataURL += serializeAMimeType(parsed);
}
dataURL += ";base64,";
const decoder = new StringDecoder("latin1");
for (const chunk of bytes) {
dataURL += btoa2(decoder.write(chunk));
}
dataURL += btoa2(decoder.end());
return dataURL;
}
case "Text": {
let encoding = "failure";
if (encodingName) {
encoding = getEncoding2(encodingName);
}
if (encoding === "failure" && mimeType) {
const type2 = parseMIMEType(mimeType);
if (type2 !== "failure") {
encoding = getEncoding2(type2.parameters.get("charset"));
}
}
if (encoding === "failure") {
encoding = "UTF-8";
}
return decode(bytes, encoding);
}
case "ArrayBuffer": {
const sequence = combineByteSequences(bytes);
return sequence.buffer;
}
case "BinaryString": {
let binaryString = "";
const decoder = new StringDecoder("latin1");
for (const chunk of bytes) {
binaryString += decoder.write(chunk);
}
binaryString += decoder.end();
return binaryString;
}
}
}
function decode(ioQueue, encoding) {
const bytes = combineByteSequences(ioQueue);
const BOMEncoding = BOMSniffing(bytes);
let slice2 = 0;
if (BOMEncoding !== null) {
encoding = BOMEncoding;
slice2 = BOMEncoding === "UTF-8" ? 3 : 2;
}
const sliced = bytes.slice(slice2);
return new TextDecoder(encoding).decode(sliced);
}
function BOMSniffing(ioQueue) {
const [a, b, c] = ioQueue;
if (a === 239 && b === 187 && c === 191) {
return "UTF-8";
} else if (a === 254 && b === 255) {
return "UTF-16BE";
} else if (a === 255 && b === 254) {
return "UTF-16LE";
}
return null;
}
function combineByteSequences(sequences) {
const size = sequences.reduce((a, b) => {
return a + b.byteLength;
}, 0);
let offset = 0;
return sequences.reduce((a, b) => {
a.set(b, offset);
offset += b.byteLength;
return a;
}, new Uint8Array(size));
}
module2.exports = {
staticPropertyDescriptors,
readOperation,
fireAProgressEvent
};
}
});
// node_modules/undici/lib/web/fileapi/filereader.js
var require_filereader = __commonJS({
"node_modules/undici/lib/web/fileapi/filereader.js"(exports2, module2) {
"use strict";
var {
staticPropertyDescriptors,
readOperation,
fireAProgressEvent
} = require_util5();
var {
kState,
kError,
kResult,
kEvents,
kAborted
} = require_symbols3();
var { webidl } = require_webidl();
var { kEnumerableProperty } = require_util2();
var FileReader = class _FileReader extends EventTarget {
constructor() {
super();
this[kState] = "empty";
this[kResult] = null;
this[kError] = null;
this[kEvents] = {
loadend: null,
error: null,
abort: null,
load: null,
progress: null,
loadstart: null
};
}
/**
* @see https://w3c.github.io/FileAPI/#dfn-readAsArrayBuffer
* @param {import('buffer').Blob} blob
*/
readAsArrayBuffer(blob) {
webidl.brandCheck(this, _FileReader);
webidl.argumentLengthCheck(arguments, 1, "FileReader.readAsArrayBuffer");
blob = webidl.converters.Blob(blob, { strict: false });
readOperation(this, blob, "ArrayBuffer");
}
/**
* @see https://w3c.github.io/FileAPI/#readAsBinaryString
* @param {import('buffer').Blob} blob
*/
readAsBinaryString(blob) {
webidl.brandCheck(this, _FileReader);
webidl.argumentLengthCheck(arguments, 1, "FileReader.readAsBinaryString");
blob = webidl.converters.Blob(blob, { strict: false });
readOperation(this, blob, "BinaryString");
}
/**
* @see https://w3c.github.io/FileAPI/#readAsDataText
* @param {import('buffer').Blob} blob
* @param {string?} encoding
*/
readAsText(blob, encoding = void 0) {
webidl.brandCheck(this, _FileReader);
webidl.argumentLengthCheck(arguments, 1, "FileReader.readAsText");
blob = webidl.converters.Blob(blob, { strict: false });
if (encoding !== void 0) {
encoding = webidl.converters.DOMString(encoding, "FileReader.readAsText", "encoding");
}
readOperation(this, blob, "Text", encoding);
}
/**
* @see https://w3c.github.io/FileAPI/#dfn-readAsDataURL
* @param {import('buffer').Blob} blob
*/
readAsDataURL(blob) {
webidl.brandCheck(this, _FileReader);
webidl.argumentLengthCheck(arguments, 1, "FileReader.readAsDataURL");
blob = webidl.converters.Blob(blob, { strict: false });
readOperation(this, blob, "DataURL");
}
/**
* @see https://w3c.github.io/FileAPI/#dfn-abort
*/
abort() {
if (this[kState] === "empty" || this[kState] === "done") {
this[kResult] = null;
return;
}
if (this[kState] === "loading") {
this[kState] = "done";
this[kResult] = null;
}
this[kAborted] = true;
fireAProgressEvent("abort", this);
if (this[kState] !== "loading") {
fireAProgressEvent("loadend", this);
}
}
/**
* @see https://w3c.github.io/FileAPI/#dom-filereader-readystate
*/
get readyState() {
webidl.brandCheck(this, _FileReader);
switch (this[kState]) {
case "empty":
return this.EMPTY;
case "loading":
return this.LOADING;
case "done":
return this.DONE;
}
}
/**
* @see https://w3c.github.io/FileAPI/#dom-filereader-result
*/
get result() {
webidl.brandCheck(this, _FileReader);
return this[kResult];
}
/**
* @see https://w3c.github.io/FileAPI/#dom-filereader-error
*/
get error() {
webidl.brandCheck(this, _FileReader);
return this[kError];
}
get onloadend() {
webidl.brandCheck(this, _FileReader);
return this[kEvents].loadend;
}
set onloadend(fn) {
webidl.brandCheck(this, _FileReader);
if (this[kEvents].loadend) {
this.removeEventListener("loadend", this[kEvents].loadend);
}
if (typeof fn === "function") {
this[kEvents].loadend = fn;
this.addEventListener("loadend", fn);
} else {
this[kEvents].loadend = null;
}
}
get onerror() {
webidl.brandCheck(this, _FileReader);
return this[kEvents].error;
}
set onerror(fn) {
webidl.brandCheck(this, _FileReader);
if (this[kEvents].error) {
this.removeEventListener("error", this[kEvents].error);
}
if (typeof fn === "function") {
this[kEvents].error = fn;
this.addEventListener("error", fn);
} else {
this[kEvents].error = null;
}
}
get onloadstart() {
webidl.brandCheck(this, _FileReader);
return this[kEvents].loadstart;
}
set onloadstart(fn) {
webidl.brandCheck(this, _FileReader);
if (this[kEvents].loadstart) {
this.removeEventListener("loadstart", this[kEvents].loadstart);
}
if (typeof fn === "function") {
this[kEvents].loadstart = fn;
this.addEventListener("loadstart", fn);
} else {
this[kEvents].loadstart = null;
}
}
get onprogress() {
webidl.brandCheck(this, _FileReader);
return this[kEvents].progress;
}
set onprogress(fn) {
webidl.brandCheck(this, _FileReader);
if (this[kEvents].progress) {
this.removeEventListener("progress", this[kEvents].progress);
}
if (typeof fn === "function") {
this[kEvents].progress = fn;
this.addEventListener("progress", fn);
} else {
this[kEvents].progress = null;
}
}
get onload() {
webidl.brandCheck(this, _FileReader);
return this[kEvents].load;
}
set onload(fn) {
webidl.brandCheck(this, _FileReader);
if (this[kEvents].load) {
this.removeEventListener("load", this[kEvents].load);
}
if (typeof fn === "function") {
this[kEvents].load = fn;
this.addEventListener("load", fn);
} else {
this[kEvents].load = null;
}
}
get onabort() {
webidl.brandCheck(this, _FileReader);
return this[kEvents].abort;
}
set onabort(fn) {
webidl.brandCheck(this, _FileReader);
if (this[kEvents].abort) {
this.removeEventListener("abort", this[kEvents].abort);
}
if (typeof fn === "function") {
this[kEvents].abort = fn;
this.addEventListener("abort", fn);
} else {
this[kEvents].abort = null;
}
}
};
FileReader.EMPTY = FileReader.prototype.EMPTY = 0;
FileReader.LOADING = FileReader.prototype.LOADING = 1;
FileReader.DONE = FileReader.prototype.DONE = 2;
Object.defineProperties(FileReader.prototype, {
EMPTY: staticPropertyDescriptors,
LOADING: staticPropertyDescriptors,
DONE: staticPropertyDescriptors,
readAsArrayBuffer: kEnumerableProperty,
readAsBinaryString: kEnumerableProperty,
readAsText: kEnumerableProperty,
readAsDataURL: kEnumerableProperty,
abort: kEnumerableProperty,
readyState: kEnumerableProperty,
result: kEnumerableProperty,
error: kEnumerableProperty,
onloadstart: kEnumerableProperty,
onprogress: kEnumerableProperty,
onload: kEnumerableProperty,
onabort: kEnumerableProperty,
onerror: kEnumerableProperty,
onloadend: kEnumerableProperty,
[Symbol.toStringTag]: {
value: "FileReader",
writable: false,
enumerable: false,
configurable: true
}
});
Object.defineProperties(FileReader, {
EMPTY: staticPropertyDescriptors,
LOADING: staticPropertyDescriptors,
DONE: staticPropertyDescriptors
});
module2.exports = {
FileReader
};
}
});
// node_modules/undici/lib/web/cache/symbols.js
var require_symbols4 = __commonJS({
"node_modules/undici/lib/web/cache/symbols.js"(exports2, module2) {
"use strict";
module2.exports = {
kConstruct: require_symbols().kConstruct
};
}
});
// node_modules/undici/lib/web/cache/util.js
var require_util6 = __commonJS({
"node_modules/undici/lib/web/cache/util.js"(exports2, module2) {
"use strict";
var assert = require("node:assert");
var { URLSerializer } = require_data_url();
var { isValidHeaderName: isValidHeaderName2 } = require_util3();
function urlEquals(A, B, excludeFragment = false) {
const serializedA = URLSerializer(A, excludeFragment);
const serializedB = URLSerializer(B, excludeFragment);
return serializedA === serializedB;
}
function getFieldValues(header) {
assert(header !== null);
const values = [];
for (let value of header.split(",")) {
value = value.trim();
if (isValidHeaderName2(value)) {
values.push(value);
}
}
return values;
}
module2.exports = {
urlEquals,
getFieldValues
};
}
});
// node_modules/undici/lib/web/cache/cache.js
var require_cache2 = __commonJS({
"node_modules/undici/lib/web/cache/cache.js"(exports2, module2) {
"use strict";
var { kConstruct } = require_symbols4();
var { urlEquals, getFieldValues } = require_util6();
var { kEnumerableProperty, isDisturbed } = require_util2();
var { webidl } = require_webidl();
var { Response: Response3, cloneResponse, fromInnerResponse } = require_response();
var { Request: Request2, fromInnerRequest } = require_request2();
var { kState } = require_symbols2();
var { fetching } = require_fetch();
var { urlIsHttpHttpsScheme, createDeferredPromise, readAllBytes } = require_util3();
var assert = require("node:assert");
var Cache = class _Cache {
/**
* @see https://w3c.github.io/ServiceWorker/#dfn-relevant-request-response-list
* @type {requestResponseList}
*/
#relevantRequestResponseList;
constructor() {
if (arguments[0] !== kConstruct) {
webidl.illegalConstructor();
}
webidl.util.markAsUncloneable(this);
this.#relevantRequestResponseList = arguments[1];
}
async match(request, options = {}) {
webidl.brandCheck(this, _Cache);
const prefix = "Cache.match";
webidl.argumentLengthCheck(arguments, 1, prefix);
request = webidl.converters.RequestInfo(request, prefix, "request");
options = webidl.converters.CacheQueryOptions(options, prefix, "options");
const p = this.#internalMatchAll(request, options, 1);
if (p.length === 0) {
return;
}
return p[0];
}
async matchAll(request = void 0, options = {}) {
webidl.brandCheck(this, _Cache);
const prefix = "Cache.matchAll";
if (request !== void 0) request = webidl.converters.RequestInfo(request, prefix, "request");
options = webidl.converters.CacheQueryOptions(options, prefix, "options");
return this.#internalMatchAll(request, options);
}
async add(request) {
webidl.brandCheck(this, _Cache);
const prefix = "Cache.add";
webidl.argumentLengthCheck(arguments, 1, prefix);
request = webidl.converters.RequestInfo(request, prefix, "request");
const requests = [request];
const responseArrayPromise = this.addAll(requests);
return await responseArrayPromise;
}
async addAll(requests) {
webidl.brandCheck(this, _Cache);
const prefix = "Cache.addAll";
webidl.argumentLengthCheck(arguments, 1, prefix);
const responsePromises = [];
const requestList = [];
for (let request of requests) {
if (request === void 0) {
throw webidl.errors.conversionFailed({
prefix,
argument: "Argument 1",
types: ["undefined is not allowed"]
});
}
request = webidl.converters.RequestInfo(request);
if (typeof request === "string") {
continue;
}
const r = request[kState];
if (!urlIsHttpHttpsScheme(r.url) || r.method !== "GET") {
throw webidl.errors.exception({
header: prefix,
message: "Expected http/s scheme when method is not GET."
});
}
}
const fetchControllers = [];
for (const request of requests) {
const r = new Request2(request)[kState];
if (!urlIsHttpHttpsScheme(r.url)) {
throw webidl.errors.exception({
header: prefix,
message: "Expected http/s scheme."
});
}
r.initiator = "fetch";
r.destination = "subresource";
requestList.push(r);
const responsePromise = createDeferredPromise();
fetchControllers.push(fetching({
request: r,
processResponse(response) {
if (response.type === "error" || response.status === 206 || response.status < 200 || response.status > 299) {
responsePromise.reject(webidl.errors.exception({
header: "Cache.addAll",
message: "Received an invalid status code or the request failed."
}));
} else if (response.headersList.contains("vary")) {
const fieldValues = getFieldValues(response.headersList.get("vary"));
for (const fieldValue of fieldValues) {
if (fieldValue === "*") {
responsePromise.reject(webidl.errors.exception({
header: "Cache.addAll",
message: "invalid vary field value"
}));
for (const controller of fetchControllers) {
controller.abort();
}
return;
}
}
}
},
processResponseEndOfBody(response) {
if (response.aborted) {
responsePromise.reject(new DOMException("aborted", "AbortError"));
return;
}
responsePromise.resolve(response);
}
}));
responsePromises.push(responsePromise.promise);
}
const p = Promise.all(responsePromises);
const responses = await p;
const operations = [];
let index2 = 0;
for (const response of responses) {
const operation = {
type: "put",
// 7.3.2
request: requestList[index2],
// 7.3.3
response
// 7.3.4
};
operations.push(operation);
index2++;
}
const cacheJobPromise = createDeferredPromise();
let errorData = null;
try {
this.#batchCacheOperations(operations);
} catch (e) {
errorData = e;
}
queueMicrotask(() => {
if (errorData === null) {
cacheJobPromise.resolve(void 0);
} else {
cacheJobPromise.reject(errorData);
}
});
return cacheJobPromise.promise;
}
async put(request, response) {
webidl.brandCheck(this, _Cache);
const prefix = "Cache.put";
webidl.argumentLengthCheck(arguments, 2, prefix);
request = webidl.converters.RequestInfo(request, prefix, "request");
response = webidl.converters.Response(response, prefix, "response");
let innerRequest = null;
if (request instanceof Request2) {
innerRequest = request[kState];
} else {
innerRequest = new Request2(request)[kState];
}
if (!urlIsHttpHttpsScheme(innerRequest.url) || innerRequest.method !== "GET") {
throw webidl.errors.exception({
header: prefix,
message: "Expected an http/s scheme when method is not GET"
});
}
const innerResponse = response[kState];
if (innerResponse.status === 206) {
throw webidl.errors.exception({
header: prefix,
message: "Got 206 status"
});
}
if (innerResponse.headersList.contains("vary")) {
const fieldValues = getFieldValues(innerResponse.headersList.get("vary"));
for (const fieldValue of fieldValues) {
if (fieldValue === "*") {
throw webidl.errors.exception({
header: prefix,
message: "Got * vary field value"
});
}
}
}
if (innerResponse.body && (isDisturbed(innerResponse.body.stream) || innerResponse.body.stream.locked)) {
throw webidl.errors.exception({
header: prefix,
message: "Response body is locked or disturbed"
});
}
const clonedResponse = cloneResponse(innerResponse);
const bodyReadPromise = createDeferredPromise();
if (innerResponse.body != null) {
const stream5 = innerResponse.body.stream;
const reader = stream5.getReader();
readAllBytes(reader).then(bodyReadPromise.resolve, bodyReadPromise.reject);
} else {
bodyReadPromise.resolve(void 0);
}
const operations = [];
const operation = {
type: "put",
// 14.
request: innerRequest,
// 15.
response: clonedResponse
// 16.
};
operations.push(operation);
const bytes = await bodyReadPromise.promise;
if (clonedResponse.body != null) {
clonedResponse.body.source = bytes;
}
const cacheJobPromise = createDeferredPromise();
let errorData = null;
try {
this.#batchCacheOperations(operations);
} catch (e) {
errorData = e;
}
queueMicrotask(() => {
if (errorData === null) {
cacheJobPromise.resolve();
} else {
cacheJobPromise.reject(errorData);
}
});
return cacheJobPromise.promise;
}
async delete(request, options = {}) {
webidl.brandCheck(this, _Cache);
const prefix = "Cache.delete";
webidl.argumentLengthCheck(arguments, 1, prefix);
request = webidl.converters.RequestInfo(request, prefix, "request");
options = webidl.converters.CacheQueryOptions(options, prefix, "options");
let r = null;
if (request instanceof Request2) {
r = request[kState];
if (r.method !== "GET" && !options.ignoreMethod) {
return false;
}
} else {
assert(typeof request === "string");
r = new Request2(request)[kState];
}
const operations = [];
const operation = {
type: "delete",
request: r,
options
};
operations.push(operation);
const cacheJobPromise = createDeferredPromise();
let errorData = null;
let requestResponses;
try {
requestResponses = this.#batchCacheOperations(operations);
} catch (e) {
errorData = e;
}
queueMicrotask(() => {
if (errorData === null) {
cacheJobPromise.resolve(!!requestResponses?.length);
} else {
cacheJobPromise.reject(errorData);
}
});
return cacheJobPromise.promise;
}
/**
* @see https://w3c.github.io/ServiceWorker/#dom-cache-keys
* @param {any} request
* @param {import('../../types/cache').CacheQueryOptions} options
* @returns {Promise<readonly Request[]>}
*/
async keys(request = void 0, options = {}) {
webidl.brandCheck(this, _Cache);
const prefix = "Cache.keys";
if (request !== void 0) request = webidl.converters.RequestInfo(request, prefix, "request");
options = webidl.converters.CacheQueryOptions(options, prefix, "options");
let r = null;
if (request !== void 0) {
if (request instanceof Request2) {
r = request[kState];
if (r.method !== "GET" && !options.ignoreMethod) {
return [];
}
} else if (typeof request === "string") {
r = new Request2(request)[kState];
}
}
const promise = createDeferredPromise();
const requests = [];
if (request === void 0) {
for (const requestResponse of this.#relevantRequestResponseList) {
requests.push(requestResponse[0]);
}
} else {
const requestResponses = this.#queryCache(r, options);
for (const requestResponse of requestResponses) {
requests.push(requestResponse[0]);
}
}
queueMicrotask(() => {
const requestList = [];
for (const request2 of requests) {
const requestObject = fromInnerRequest(
request2,
new AbortController().signal,
"immutable"
);
requestList.push(requestObject);
}
promise.resolve(Object.freeze(requestList));
});
return promise.promise;
}
/**
* @see https://w3c.github.io/ServiceWorker/#batch-cache-operations-algorithm
* @param {CacheBatchOperation[]} operations
* @returns {requestResponseList}
*/
#batchCacheOperations(operations) {
const cache = this.#relevantRequestResponseList;
const backupCache = [...cache];
const addedItems = [];
const resultList = [];
try {
for (const operation of operations) {
if (operation.type !== "delete" && operation.type !== "put") {
throw webidl.errors.exception({
header: "Cache.#batchCacheOperations",
message: 'operation type does not match "delete" or "put"'
});
}
if (operation.type === "delete" && operation.response != null) {
throw webidl.errors.exception({
header: "Cache.#batchCacheOperations",
message: "delete operation should not have an associated response"
});
}
if (this.#queryCache(operation.request, operation.options, addedItems).length) {
throw new DOMException("???", "InvalidStateError");
}
let requestResponses;
if (operation.type === "delete") {
requestResponses = this.#queryCache(operation.request, operation.options);
if (requestResponses.length === 0) {
return [];
}
for (const requestResponse of requestResponses) {
const idx = cache.indexOf(requestResponse);
assert(idx !== -1);
cache.splice(idx, 1);
}
} else if (operation.type === "put") {
if (operation.response == null) {
throw webidl.errors.exception({
header: "Cache.#batchCacheOperations",
message: "put operation should have an associated response"
});
}
const r = operation.request;
if (!urlIsHttpHttpsScheme(r.url)) {
throw webidl.errors.exception({
header: "Cache.#batchCacheOperations",
message: "expected http or https scheme"
});
}
if (r.method !== "GET") {
throw webidl.errors.exception({
header: "Cache.#batchCacheOperations",
message: "not get method"
});
}
if (operation.options != null) {
throw webidl.errors.exception({
header: "Cache.#batchCacheOperations",
message: "options must not be defined"
});
}
requestResponses = this.#queryCache(operation.request);
for (const requestResponse of requestResponses) {
const idx = cache.indexOf(requestResponse);
assert(idx !== -1);
cache.splice(idx, 1);
}
cache.push([operation.request, operation.response]);
addedItems.push([operation.request, operation.response]);
}
resultList.push([operation.request, operation.response]);
}
return resultList;
} catch (e) {
this.#relevantRequestResponseList.length = 0;
this.#relevantRequestResponseList = backupCache;
throw e;
}
}
/**
* @see https://w3c.github.io/ServiceWorker/#query-cache
* @param {any} requestQuery
* @param {import('../../types/cache').CacheQueryOptions} options
* @param {requestResponseList} targetStorage
* @returns {requestResponseList}
*/
#queryCache(requestQuery, options, targetStorage) {
const resultList = [];
const storage = targetStorage ?? this.#relevantRequestResponseList;
for (const requestResponse of storage) {
const [cachedRequest, cachedResponse] = requestResponse;
if (this.#requestMatchesCachedItem(requestQuery, cachedRequest, cachedResponse, options)) {
resultList.push(requestResponse);
}
}
return resultList;
}
/**
* @see https://w3c.github.io/ServiceWorker/#request-matches-cached-item-algorithm
* @param {any} requestQuery
* @param {any} request
* @param {any | null} response
* @param {import('../../types/cache').CacheQueryOptions | undefined} options
* @returns {boolean}
*/
#requestMatchesCachedItem(requestQuery, request, response = null, options) {
const queryURL = new URL(requestQuery.url);
const cachedURL = new URL(request.url);
if (options?.ignoreSearch) {
cachedURL.search = "";
queryURL.search = "";
}
if (!urlEquals(queryURL, cachedURL, true)) {
return false;
}
if (response == null || options?.ignoreVary || !response.headersList.contains("vary")) {
return true;
}
const fieldValues = getFieldValues(response.headersList.get("vary"));
for (const fieldValue of fieldValues) {
if (fieldValue === "*") {
return false;
}
const requestValue = request.headersList.get(fieldValue);
const queryValue = requestQuery.headersList.get(fieldValue);
if (requestValue !== queryValue) {
return false;
}
}
return true;
}
#internalMatchAll(request, options, maxResponses = Infinity) {
let r = null;
if (request !== void 0) {
if (request instanceof Request2) {
r = request[kState];
if (r.method !== "GET" && !options.ignoreMethod) {
return [];
}
} else if (typeof request === "string") {
r = new Request2(request)[kState];
}
}
const responses = [];
if (request === void 0) {
for (const requestResponse of this.#relevantRequestResponseList) {
responses.push(requestResponse[1]);
}
} else {
const requestResponses = this.#queryCache(r, options);
for (const requestResponse of requestResponses) {
responses.push(requestResponse[1]);
}
}
const responseList = [];
for (const response of responses) {
const responseObject = fromInnerResponse(response, "immutable");
responseList.push(responseObject.clone());
if (responseList.length >= maxResponses) {
break;
}
}
return Object.freeze(responseList);
}
};
Object.defineProperties(Cache.prototype, {
[Symbol.toStringTag]: {
value: "Cache",
configurable: true
},
match: kEnumerableProperty,
matchAll: kEnumerableProperty,
add: kEnumerableProperty,
addAll: kEnumerableProperty,
put: kEnumerableProperty,
delete: kEnumerableProperty,
keys: kEnumerableProperty
});
var cacheQueryOptionConverters = [
{
key: "ignoreSearch",
converter: webidl.converters.boolean,
defaultValue: () => false
},
{
key: "ignoreMethod",
converter: webidl.converters.boolean,
defaultValue: () => false
},
{
key: "ignoreVary",
converter: webidl.converters.boolean,
defaultValue: () => false
}
];
webidl.converters.CacheQueryOptions = webidl.dictionaryConverter(cacheQueryOptionConverters);
webidl.converters.MultiCacheQueryOptions = webidl.dictionaryConverter([
...cacheQueryOptionConverters,
{
key: "cacheName",
converter: webidl.converters.DOMString
}
]);
webidl.converters.Response = webidl.interfaceConverter(Response3);
webidl.converters["sequence<RequestInfo>"] = webidl.sequenceConverter(
webidl.converters.RequestInfo
);
module2.exports = {
Cache
};
}
});
// node_modules/undici/lib/web/cache/cachestorage.js
var require_cachestorage = __commonJS({
"node_modules/undici/lib/web/cache/cachestorage.js"(exports2, module2) {
"use strict";
var { kConstruct } = require_symbols4();
var { Cache } = require_cache2();
var { webidl } = require_webidl();
var { kEnumerableProperty } = require_util2();
var CacheStorage = class _CacheStorage {
/**
* @see https://w3c.github.io/ServiceWorker/#dfn-relevant-name-to-cache-map
* @type {Map<string, import('./cache').requestResponseList}
*/
#caches = /* @__PURE__ */ new Map();
constructor() {
if (arguments[0] !== kConstruct) {
webidl.illegalConstructor();
}
webidl.util.markAsUncloneable(this);
}
async match(request, options = {}) {
webidl.brandCheck(this, _CacheStorage);
webidl.argumentLengthCheck(arguments, 1, "CacheStorage.match");
request = webidl.converters.RequestInfo(request);
options = webidl.converters.MultiCacheQueryOptions(options);
if (options.cacheName != null) {
if (this.#caches.has(options.cacheName)) {
const cacheList = this.#caches.get(options.cacheName);
const cache = new Cache(kConstruct, cacheList);
return await cache.match(request, options);
}
} else {
for (const cacheList of this.#caches.values()) {
const cache = new Cache(kConstruct, cacheList);
const response = await cache.match(request, options);
if (response !== void 0) {
return response;
}
}
}
}
/**
* @see https://w3c.github.io/ServiceWorker/#cache-storage-has
* @param {string} cacheName
* @returns {Promise<boolean>}
*/
async has(cacheName) {
webidl.brandCheck(this, _CacheStorage);
const prefix = "CacheStorage.has";
webidl.argumentLengthCheck(arguments, 1, prefix);
cacheName = webidl.converters.DOMString(cacheName, prefix, "cacheName");
return this.#caches.has(cacheName);
}
/**
* @see https://w3c.github.io/ServiceWorker/#dom-cachestorage-open
* @param {string} cacheName
* @returns {Promise<Cache>}
*/
async open(cacheName) {
webidl.brandCheck(this, _CacheStorage);
const prefix = "CacheStorage.open";
webidl.argumentLengthCheck(arguments, 1, prefix);
cacheName = webidl.converters.DOMString(cacheName, prefix, "cacheName");
if (this.#caches.has(cacheName)) {
const cache2 = this.#caches.get(cacheName);
return new Cache(kConstruct, cache2);
}
const cache = [];
this.#caches.set(cacheName, cache);
return new Cache(kConstruct, cache);
}
/**
* @see https://w3c.github.io/ServiceWorker/#cache-storage-delete
* @param {string} cacheName
* @returns {Promise<boolean>}
*/
async delete(cacheName) {
webidl.brandCheck(this, _CacheStorage);
const prefix = "CacheStorage.delete";
webidl.argumentLengthCheck(arguments, 1, prefix);
cacheName = webidl.converters.DOMString(cacheName, prefix, "cacheName");
return this.#caches.delete(cacheName);
}
/**
* @see https://w3c.github.io/ServiceWorker/#cache-storage-keys
* @returns {Promise<string[]>}
*/
async keys() {
webidl.brandCheck(this, _CacheStorage);
const keys = this.#caches.keys();
return [...keys];
}
};
Object.defineProperties(CacheStorage.prototype, {
[Symbol.toStringTag]: {
value: "CacheStorage",
configurable: true
},
match: kEnumerableProperty,
has: kEnumerableProperty,
open: kEnumerableProperty,
delete: kEnumerableProperty,
keys: kEnumerableProperty
});
module2.exports = {
CacheStorage
};
}
});
// node_modules/undici/lib/web/cookies/constants.js
var require_constants4 = __commonJS({
"node_modules/undici/lib/web/cookies/constants.js"(exports2, module2) {
"use strict";
var maxAttributeValueSize = 1024;
var maxNameValuePairSize = 4096;
module2.exports = {
maxAttributeValueSize,
maxNameValuePairSize
};
}
});
// node_modules/undici/lib/web/cookies/util.js
var require_util7 = __commonJS({
"node_modules/undici/lib/web/cookies/util.js"(exports2, module2) {
"use strict";
function isCTLExcludingHtab(value) {
for (let i = 0; i < value.length; ++i) {
const code = value.charCodeAt(i);
if (code >= 0 && code <= 8 || code >= 10 && code <= 31 || code === 127) {
return true;
}
}
return false;
}
function validateCookieName(name) {
for (let i = 0; i < name.length; ++i) {
const code = name.charCodeAt(i);
if (code < 33 || // exclude CTLs (0-31), SP and HT
code > 126 || // exclude non-ascii and DEL
code === 34 || // "
code === 40 || // (
code === 41 || // )
code === 60 || // <
code === 62 || // >
code === 64 || // @
code === 44 || // ,
code === 59 || // ;
code === 58 || // :
code === 92 || // \
code === 47 || // /
code === 91 || // [
code === 93 || // ]
code === 63 || // ?
code === 61 || // =
code === 123 || // {
code === 125) {
throw new Error("Invalid cookie name");
}
}
}
function validateCookieValue(value) {
let len = value.length;
let i = 0;
if (value[0] === '"') {
if (len === 1 || value[len - 1] !== '"') {
throw new Error("Invalid cookie value");
}
--len;
++i;
}
while (i < len) {
const code = value.charCodeAt(i++);
if (code < 33 || // exclude CTLs (0-31)
code > 126 || // non-ascii and DEL (127)
code === 34 || // "
code === 44 || // ,
code === 59 || // ;
code === 92) {
throw new Error("Invalid cookie value");
}
}
}
function validateCookiePath(path) {
for (let i = 0; i < path.length; ++i) {
const code = path.charCodeAt(i);
if (code < 32 || // exclude CTLs (0-31)
code === 127 || // DEL
code === 59) {
throw new Error("Invalid cookie path");
}
}
}
function validateCookieDomain(domain) {
if (domain.startsWith("-") || domain.endsWith(".") || domain.endsWith("-")) {
throw new Error("Invalid cookie domain");
}
}
var IMFDays = [
"Sun",
"Mon",
"Tue",
"Wed",
"Thu",
"Fri",
"Sat"
];
var IMFMonths = [
"Jan",
"Feb",
"Mar",
"Apr",
"May",
"Jun",
"Jul",
"Aug",
"Sep",
"Oct",
"Nov",
"Dec"
];
var IMFPaddedNumbers = Array(61).fill(0).map((_, i) => i.toString().padStart(2, "0"));
function toIMFDate(date) {
if (typeof date === "number") {
date = new Date(date);
}
return `${IMFDays[date.getUTCDay()]}, ${IMFPaddedNumbers[date.getUTCDate()]} ${IMFMonths[date.getUTCMonth()]} ${date.getUTCFullYear()} ${IMFPaddedNumbers[date.getUTCHours()]}:${IMFPaddedNumbers[date.getUTCMinutes()]}:${IMFPaddedNumbers[date.getUTCSeconds()]} GMT`;
}
function validateCookieMaxAge(maxAge) {
if (maxAge < 0) {
throw new Error("Invalid cookie max-age");
}
}
function stringify2(cookie) {
if (cookie.name.length === 0) {
return null;
}
validateCookieName(cookie.name);
validateCookieValue(cookie.value);
const out = [`${cookie.name}=${cookie.value}`];
if (cookie.name.startsWith("__Secure-")) {
cookie.secure = true;
}
if (cookie.name.startsWith("__Host-")) {
cookie.secure = true;
cookie.domain = null;
cookie.path = "/";
}
if (cookie.secure) {
out.push("Secure");
}
if (cookie.httpOnly) {
out.push("HttpOnly");
}
if (typeof cookie.maxAge === "number") {
validateCookieMaxAge(cookie.maxAge);
out.push(`Max-Age=${cookie.maxAge}`);
}
if (cookie.domain) {
validateCookieDomain(cookie.domain);
out.push(`Domain=${cookie.domain}`);
}
if (cookie.path) {
validateCookiePath(cookie.path);
out.push(`Path=${cookie.path}`);
}
if (cookie.expires && cookie.expires.toString() !== "Invalid Date") {
out.push(`Expires=${toIMFDate(cookie.expires)}`);
}
if (cookie.sameSite) {
out.push(`SameSite=${cookie.sameSite}`);
}
for (const part of cookie.unparsed) {
if (!part.includes("=")) {
throw new Error("Invalid unparsed");
}
const [key, ...value] = part.split("=");
out.push(`${key.trim()}=${value.join("=")}`);
}
return out.join("; ");
}
module2.exports = {
isCTLExcludingHtab,
validateCookieName,
validateCookiePath,
validateCookieValue,
toIMFDate,
stringify: stringify2
};
}
});
// node_modules/undici/lib/web/cookies/parse.js
var require_parse2 = __commonJS({
"node_modules/undici/lib/web/cookies/parse.js"(exports2, module2) {
"use strict";
var { maxNameValuePairSize, maxAttributeValueSize } = require_constants4();
var { isCTLExcludingHtab } = require_util7();
var { collectASequenceOfCodePointsFast } = require_data_url();
var assert = require("node:assert");
function parseSetCookie(header) {
if (isCTLExcludingHtab(header)) {
return null;
}
let nameValuePair = "";
let unparsedAttributes = "";
let name = "";
let value = "";
if (header.includes(";")) {
const position = { position: 0 };
nameValuePair = collectASequenceOfCodePointsFast(";", header, position);
unparsedAttributes = header.slice(position.position);
} else {
nameValuePair = header;
}
if (!nameValuePair.includes("=")) {
value = nameValuePair;
} else {
const position = { position: 0 };
name = collectASequenceOfCodePointsFast(
"=",
nameValuePair,
position
);
value = nameValuePair.slice(position.position + 1);
}
name = name.trim();
value = value.trim();
if (name.length + value.length > maxNameValuePairSize) {
return null;
}
return {
name,
value,
...parseUnparsedAttributes(unparsedAttributes)
};
}
function parseUnparsedAttributes(unparsedAttributes, cookieAttributeList = {}) {
if (unparsedAttributes.length === 0) {
return cookieAttributeList;
}
assert(unparsedAttributes[0] === ";");
unparsedAttributes = unparsedAttributes.slice(1);
let cookieAv = "";
if (unparsedAttributes.includes(";")) {
cookieAv = collectASequenceOfCodePointsFast(
";",
unparsedAttributes,
{ position: 0 }
);
unparsedAttributes = unparsedAttributes.slice(cookieAv.length);
} else {
cookieAv = unparsedAttributes;
unparsedAttributes = "";
}
let attributeName = "";
let attributeValue = "";
if (cookieAv.includes("=")) {
const position = { position: 0 };
attributeName = collectASequenceOfCodePointsFast(
"=",
cookieAv,
position
);
attributeValue = cookieAv.slice(position.position + 1);
} else {
attributeName = cookieAv;
}
attributeName = attributeName.trim();
attributeValue = attributeValue.trim();
if (attributeValue.length > maxAttributeValueSize) {
return parseUnparsedAttributes(unparsedAttributes, cookieAttributeList);
}
const attributeNameLowercase = attributeName.toLowerCase();
if (attributeNameLowercase === "expires") {
const expiryTime = new Date(attributeValue);
cookieAttributeList.expires = expiryTime;
} else if (attributeNameLowercase === "max-age") {
const charCode = attributeValue.charCodeAt(0);
if ((charCode < 48 || charCode > 57) && attributeValue[0] !== "-") {
return parseUnparsedAttributes(unparsedAttributes, cookieAttributeList);
}
if (!/^\d+$/.test(attributeValue)) {
return parseUnparsedAttributes(unparsedAttributes, cookieAttributeList);
}
const deltaSeconds = Number(attributeValue);
cookieAttributeList.maxAge = deltaSeconds;
} else if (attributeNameLowercase === "domain") {
let cookieDomain = attributeValue;
if (cookieDomain[0] === ".") {
cookieDomain = cookieDomain.slice(1);
}
cookieDomain = cookieDomain.toLowerCase();
cookieAttributeList.domain = cookieDomain;
} else if (attributeNameLowercase === "path") {
let cookiePath = "";
if (attributeValue.length === 0 || attributeValue[0] !== "/") {
cookiePath = "/";
} else {
cookiePath = attributeValue;
}
cookieAttributeList.path = cookiePath;
} else if (attributeNameLowercase === "secure") {
cookieAttributeList.secure = true;
} else if (attributeNameLowercase === "httponly") {
cookieAttributeList.httpOnly = true;
} else if (attributeNameLowercase === "samesite") {
let enforcement = "Default";
const attributeValueLowercase = attributeValue.toLowerCase();
if (attributeValueLowercase.includes("none")) {
enforcement = "None";
}
if (attributeValueLowercase.includes("strict")) {
enforcement = "Strict";
}
if (attributeValueLowercase.includes("lax")) {
enforcement = "Lax";
}
cookieAttributeList.sameSite = enforcement;
} else {
cookieAttributeList.unparsed ??= [];
cookieAttributeList.unparsed.push(`${attributeName}=${attributeValue}`);
}
return parseUnparsedAttributes(unparsedAttributes, cookieAttributeList);
}
module2.exports = {
parseSetCookie,
parseUnparsedAttributes
};
}
});
// node_modules/undici/lib/web/cookies/index.js
var require_cookies = __commonJS({
"node_modules/undici/lib/web/cookies/index.js"(exports2, module2) {
"use strict";
var { parseSetCookie } = require_parse2();
var { stringify: stringify2 } = require_util7();
var { webidl } = require_webidl();
var { Headers } = require_headers();
function getCookies(headers) {
webidl.argumentLengthCheck(arguments, 1, "getCookies");
webidl.brandCheck(headers, Headers, { strict: false });
const cookie = headers.get("cookie");
const out = {};
if (!cookie) {
return out;
}
for (const piece of cookie.split(";")) {
const [name, ...value] = piece.split("=");
out[name.trim()] = value.join("=");
}
return out;
}
function deleteCookie(headers, name, attributes2) {
webidl.brandCheck(headers, Headers, { strict: false });
const prefix = "deleteCookie";
webidl.argumentLengthCheck(arguments, 2, prefix);
name = webidl.converters.DOMString(name, prefix, "name");
attributes2 = webidl.converters.DeleteCookieAttributes(attributes2);
setCookie(headers, {
name,
value: "",
expires: /* @__PURE__ */ new Date(0),
...attributes2
});
}
function getSetCookies(headers) {
webidl.argumentLengthCheck(arguments, 1, "getSetCookies");
webidl.brandCheck(headers, Headers, { strict: false });
const cookies = headers.getSetCookie();
if (!cookies) {
return [];
}
return cookies.map((pair) => parseSetCookie(pair));
}
function setCookie(headers, cookie) {
webidl.argumentLengthCheck(arguments, 2, "setCookie");
webidl.brandCheck(headers, Headers, { strict: false });
cookie = webidl.converters.Cookie(cookie);
const str = stringify2(cookie);
if (str) {
headers.append("Set-Cookie", str);
}
}
webidl.converters.DeleteCookieAttributes = webidl.dictionaryConverter([
{
converter: webidl.nullableConverter(webidl.converters.DOMString),
key: "path",
defaultValue: () => null
},
{
converter: webidl.nullableConverter(webidl.converters.DOMString),
key: "domain",
defaultValue: () => null
}
]);
webidl.converters.Cookie = webidl.dictionaryConverter([
{
converter: webidl.converters.DOMString,
key: "name"
},
{
converter: webidl.converters.DOMString,
key: "value"
},
{
converter: webidl.nullableConverter((value) => {
if (typeof value === "number") {
return webidl.converters["unsigned long long"](value);
}
return new Date(value);
}),
key: "expires",
defaultValue: () => null
},
{
converter: webidl.nullableConverter(webidl.converters["long long"]),
key: "maxAge",
defaultValue: () => null
},
{
converter: webidl.nullableConverter(webidl.converters.DOMString),
key: "domain",
defaultValue: () => null
},
{
converter: webidl.nullableConverter(webidl.converters.DOMString),
key: "path",
defaultValue: () => null
},
{
converter: webidl.nullableConverter(webidl.converters.boolean),
key: "secure",
defaultValue: () => null
},
{
converter: webidl.nullableConverter(webidl.converters.boolean),
key: "httpOnly",
defaultValue: () => null
},
{
converter: webidl.converters.USVString,
key: "sameSite",
allowedValues: ["Strict", "Lax", "None"]
},
{
converter: webidl.sequenceConverter(webidl.converters.DOMString),
key: "unparsed",
defaultValue: () => new Array(0)
}
]);
module2.exports = {
getCookies,
deleteCookie,
getSetCookies,
setCookie
};
}
});
// node_modules/undici/lib/web/websocket/events.js
var require_events = __commonJS({
"node_modules/undici/lib/web/websocket/events.js"(exports2, module2) {
"use strict";
var { webidl } = require_webidl();
var { kEnumerableProperty } = require_util2();
var { kConstruct } = require_symbols();
var { MessagePort } = require("node:worker_threads");
var MessageEvent = class _MessageEvent extends Event {
#eventInit;
constructor(type, eventInitDict = {}) {
if (type === kConstruct) {
super(arguments[1], arguments[2]);
webidl.util.markAsUncloneable(this);
return;
}
const prefix = "MessageEvent constructor";
webidl.argumentLengthCheck(arguments, 1, prefix);
type = webidl.converters.DOMString(type, prefix, "type");
eventInitDict = webidl.converters.MessageEventInit(eventInitDict, prefix, "eventInitDict");
super(type, eventInitDict);
this.#eventInit = eventInitDict;
webidl.util.markAsUncloneable(this);
}
get data() {
webidl.brandCheck(this, _MessageEvent);
return this.#eventInit.data;
}
get origin() {
webidl.brandCheck(this, _MessageEvent);
return this.#eventInit.origin;
}
get lastEventId() {
webidl.brandCheck(this, _MessageEvent);
return this.#eventInit.lastEventId;
}
get source() {
webidl.brandCheck(this, _MessageEvent);
return this.#eventInit.source;
}
get ports() {
webidl.brandCheck(this, _MessageEvent);
if (!Object.isFrozen(this.#eventInit.ports)) {
Object.freeze(this.#eventInit.ports);
}
return this.#eventInit.ports;
}
initMessageEvent(type, bubbles = false, cancelable = false, data2 = null, origin2 = "", lastEventId = "", source = null, ports = []) {
webidl.brandCheck(this, _MessageEvent);
webidl.argumentLengthCheck(arguments, 1, "MessageEvent.initMessageEvent");
return new _MessageEvent(type, {
bubbles,
cancelable,
data: data2,
origin: origin2,
lastEventId,
source,
ports
});
}
static createFastMessageEvent(type, init) {
const messageEvent = new _MessageEvent(kConstruct, type, init);
messageEvent.#eventInit = init;
messageEvent.#eventInit.data ??= null;
messageEvent.#eventInit.origin ??= "";
messageEvent.#eventInit.lastEventId ??= "";
messageEvent.#eventInit.source ??= null;
messageEvent.#eventInit.ports ??= [];
return messageEvent;
}
};
var { createFastMessageEvent } = MessageEvent;
delete MessageEvent.createFastMessageEvent;
var CloseEvent = class _CloseEvent extends Event {
#eventInit;
constructor(type, eventInitDict = {}) {
const prefix = "CloseEvent constructor";
webidl.argumentLengthCheck(arguments, 1, prefix);
type = webidl.converters.DOMString(type, prefix, "type");
eventInitDict = webidl.converters.CloseEventInit(eventInitDict);
super(type, eventInitDict);
this.#eventInit = eventInitDict;
webidl.util.markAsUncloneable(this);
}
get wasClean() {
webidl.brandCheck(this, _CloseEvent);
return this.#eventInit.wasClean;
}
get code() {
webidl.brandCheck(this, _CloseEvent);
return this.#eventInit.code;
}
get reason() {
webidl.brandCheck(this, _CloseEvent);
return this.#eventInit.reason;
}
};
var ErrorEvent = class _ErrorEvent extends Event {
#eventInit;
constructor(type, eventInitDict) {
const prefix = "ErrorEvent constructor";
webidl.argumentLengthCheck(arguments, 1, prefix);
super(type, eventInitDict);
webidl.util.markAsUncloneable(this);
type = webidl.converters.DOMString(type, prefix, "type");
eventInitDict = webidl.converters.ErrorEventInit(eventInitDict ?? {});
this.#eventInit = eventInitDict;
}
get message() {
webidl.brandCheck(this, _ErrorEvent);
return this.#eventInit.message;
}
get filename() {
webidl.brandCheck(this, _ErrorEvent);
return this.#eventInit.filename;
}
get lineno() {
webidl.brandCheck(this, _ErrorEvent);
return this.#eventInit.lineno;
}
get colno() {
webidl.brandCheck(this, _ErrorEvent);
return this.#eventInit.colno;
}
get error() {
webidl.brandCheck(this, _ErrorEvent);
return this.#eventInit.error;
}
};
Object.defineProperties(MessageEvent.prototype, {
[Symbol.toStringTag]: {
value: "MessageEvent",
configurable: true
},
data: kEnumerableProperty,
origin: kEnumerableProperty,
lastEventId: kEnumerableProperty,
source: kEnumerableProperty,
ports: kEnumerableProperty,
initMessageEvent: kEnumerableProperty
});
Object.defineProperties(CloseEvent.prototype, {
[Symbol.toStringTag]: {
value: "CloseEvent",
configurable: true
},
reason: kEnumerableProperty,
code: kEnumerableProperty,
wasClean: kEnumerableProperty
});
Object.defineProperties(ErrorEvent.prototype, {
[Symbol.toStringTag]: {
value: "ErrorEvent",
configurable: true
},
message: kEnumerableProperty,
filename: kEnumerableProperty,
lineno: kEnumerableProperty,
colno: kEnumerableProperty,
error: kEnumerableProperty
});
webidl.converters.MessagePort = webidl.interfaceConverter(MessagePort);
webidl.converters["sequence<MessagePort>"] = webidl.sequenceConverter(
webidl.converters.MessagePort
);
var eventInit = [
{
key: "bubbles",
converter: webidl.converters.boolean,
defaultValue: () => false
},
{
key: "cancelable",
converter: webidl.converters.boolean,
defaultValue: () => false
},
{
key: "composed",
converter: webidl.converters.boolean,
defaultValue: () => false
}
];
webidl.converters.MessageEventInit = webidl.dictionaryConverter([
...eventInit,
{
key: "data",
converter: webidl.converters.any,
defaultValue: () => null
},
{
key: "origin",
converter: webidl.converters.USVString,
defaultValue: () => ""
},
{
key: "lastEventId",
converter: webidl.converters.DOMString,
defaultValue: () => ""
},
{
key: "source",
// Node doesn't implement WindowProxy or ServiceWorker, so the only
// valid value for source is a MessagePort.
converter: webidl.nullableConverter(webidl.converters.MessagePort),
defaultValue: () => null
},
{
key: "ports",
converter: webidl.converters["sequence<MessagePort>"],
defaultValue: () => new Array(0)
}
]);
webidl.converters.CloseEventInit = webidl.dictionaryConverter([
...eventInit,
{
key: "wasClean",
converter: webidl.converters.boolean,
defaultValue: () => false
},
{
key: "code",
converter: webidl.converters["unsigned short"],
defaultValue: () => 0
},
{
key: "reason",
converter: webidl.converters.USVString,
defaultValue: () => ""
}
]);
webidl.converters.ErrorEventInit = webidl.dictionaryConverter([
...eventInit,
{
key: "message",
converter: webidl.converters.DOMString,
defaultValue: () => ""
},
{
key: "filename",
converter: webidl.converters.USVString,
defaultValue: () => ""
},
{
key: "lineno",
converter: webidl.converters["unsigned long"],
defaultValue: () => 0
},
{
key: "colno",
converter: webidl.converters["unsigned long"],
defaultValue: () => 0
},
{
key: "error",
converter: webidl.converters.any
}
]);
module2.exports = {
MessageEvent,
CloseEvent,
ErrorEvent,
createFastMessageEvent
};
}
});
// node_modules/undici/lib/web/websocket/constants.js
var require_constants5 = __commonJS({
"node_modules/undici/lib/web/websocket/constants.js"(exports2, module2) {
"use strict";
var uid = "258EAFA5-E914-47DA-95CA-C5AB0DC85B11";
var staticPropertyDescriptors = {
enumerable: true,
writable: false,
configurable: false
};
var states = {
CONNECTING: 0,
OPEN: 1,
CLOSING: 2,
CLOSED: 3
};
var sentCloseFrameState = {
NOT_SENT: 0,
PROCESSING: 1,
SENT: 2
};
var opcodes = {
CONTINUATION: 0,
TEXT: 1,
BINARY: 2,
CLOSE: 8,
PING: 9,
PONG: 10
};
var maxUnsigned16Bit = 2 ** 16 - 1;
var parserStates = {
INFO: 0,
PAYLOADLENGTH_16: 2,
PAYLOADLENGTH_64: 3,
READ_DATA: 4
};
var emptyBuffer = Buffer.allocUnsafe(0);
var sendHints = {
string: 1,
typedArray: 2,
arrayBuffer: 3,
blob: 4
};
module2.exports = {
uid,
sentCloseFrameState,
staticPropertyDescriptors,
states,
opcodes,
maxUnsigned16Bit,
parserStates,
emptyBuffer,
sendHints
};
}
});
// node_modules/undici/lib/web/websocket/symbols.js
var require_symbols5 = __commonJS({
"node_modules/undici/lib/web/websocket/symbols.js"(exports2, module2) {
"use strict";
module2.exports = {
kWebSocketURL: Symbol("url"),
kReadyState: Symbol("ready state"),
kController: Symbol("controller"),
kResponse: Symbol("response"),
kBinaryType: Symbol("binary type"),
kSentClose: Symbol("sent close"),
kReceivedClose: Symbol("received close"),
kByteParser: Symbol("byte parser")
};
}
});
// node_modules/undici/lib/web/websocket/util.js
var require_util8 = __commonJS({
"node_modules/undici/lib/web/websocket/util.js"(exports2, module2) {
"use strict";
var { kReadyState, kController, kResponse, kBinaryType, kWebSocketURL } = require_symbols5();
var { states, opcodes } = require_constants5();
var { ErrorEvent, createFastMessageEvent } = require_events();
var { isUtf8 } = require("node:buffer");
var { collectASequenceOfCodePointsFast, removeHTTPWhitespace } = require_data_url();
function isConnecting(ws) {
return ws[kReadyState] === states.CONNECTING;
}
function isEstablished(ws) {
return ws[kReadyState] === states.OPEN;
}
function isClosing(ws) {
return ws[kReadyState] === states.CLOSING;
}
function isClosed(ws) {
return ws[kReadyState] === states.CLOSED;
}
function fireEvent(e, target, eventFactory = (type, init) => new Event(type, init), eventInitDict = {}) {
const event = eventFactory(e, eventInitDict);
target.dispatchEvent(event);
}
function websocketMessageReceived(ws, type, data2) {
if (ws[kReadyState] !== states.OPEN) {
return;
}
let dataForEvent;
if (type === opcodes.TEXT) {
try {
dataForEvent = utf8Decode(data2);
} catch {
failWebsocketConnection(ws, "Received invalid UTF-8 in text frame.");
return;
}
} else if (type === opcodes.BINARY) {
if (ws[kBinaryType] === "blob") {
dataForEvent = new Blob([data2]);
} else {
dataForEvent = toArrayBuffer(data2);
}
}
fireEvent("message", ws, createFastMessageEvent, {
origin: ws[kWebSocketURL].origin,
data: dataForEvent
});
}
function toArrayBuffer(buffer) {
if (buffer.byteLength === buffer.buffer.byteLength) {
return buffer.buffer;
}
return buffer.buffer.slice(buffer.byteOffset, buffer.byteOffset + buffer.byteLength);
}
function isValidSubprotocol(protocol) {
if (protocol.length === 0) {
return false;
}
for (let i = 0; i < protocol.length; ++i) {
const code = protocol.charCodeAt(i);
if (code < 33 || // CTL, contains SP (0x20) and HT (0x09)
code > 126 || code === 34 || // "
code === 40 || // (
code === 41 || // )
code === 44 || // ,
code === 47 || // /
code === 58 || // :
code === 59 || // ;
code === 60 || // <
code === 61 || // =
code === 62 || // >
code === 63 || // ?
code === 64 || // @
code === 91 || // [
code === 92 || // \
code === 93 || // ]
code === 123 || // {
code === 125) {
return false;
}
}
return true;
}
function isValidStatusCode(code) {
if (code >= 1e3 && code < 1015) {
return code !== 1004 && // reserved
code !== 1005 && // "MUST NOT be set as a status code"
code !== 1006;
}
return code >= 3e3 && code <= 4999;
}
function failWebsocketConnection(ws, reason) {
const { [kController]: controller, [kResponse]: response } = ws;
controller.abort();
if (response?.socket && !response.socket.destroyed) {
response.socket.destroy();
}
if (reason) {
fireEvent("error", ws, (type, init) => new ErrorEvent(type, init), {
error: new Error(reason),
message: reason
});
}
}
function isControlFrame(opcode) {
return opcode === opcodes.CLOSE || opcode === opcodes.PING || opcode === opcodes.PONG;
}
function isContinuationFrame(opcode) {
return opcode === opcodes.CONTINUATION;
}
function isTextBinaryFrame(opcode) {
return opcode === opcodes.TEXT || opcode === opcodes.BINARY;
}
function isValidOpcode(opcode) {
return isTextBinaryFrame(opcode) || isContinuationFrame(opcode) || isControlFrame(opcode);
}
function parseExtensions(extensions) {
const position = { position: 0 };
const extensionList = /* @__PURE__ */ new Map();
while (position.position < extensions.length) {
const pair = collectASequenceOfCodePointsFast(";", extensions, position);
const [name, value = ""] = pair.split("=");
extensionList.set(
removeHTTPWhitespace(name, true, false),
removeHTTPWhitespace(value, false, true)
);
position.position++;
}
return extensionList;
}
function isValidClientWindowBits(value) {
for (let i = 0; i < value.length; i++) {
const byte = value.charCodeAt(i);
if (byte < 48 || byte > 57) {
return false;
}
}
return true;
}
var hasIntl = typeof process.versions.icu === "string";
var fatalDecoder = hasIntl ? new TextDecoder("utf-8", { fatal: true }) : void 0;
var utf8Decode = hasIntl ? fatalDecoder.decode.bind(fatalDecoder) : function(buffer) {
if (isUtf8(buffer)) {
return buffer.toString("utf-8");
}
throw new TypeError("Invalid utf-8 received.");
};
module2.exports = {
isConnecting,
isEstablished,
isClosing,
isClosed,
fireEvent,
isValidSubprotocol,
isValidStatusCode,
failWebsocketConnection,
websocketMessageReceived,
utf8Decode,
isControlFrame,
isContinuationFrame,
isTextBinaryFrame,
isValidOpcode,
parseExtensions,
isValidClientWindowBits
};
}
});
// node_modules/undici/lib/web/websocket/frame.js
var require_frame = __commonJS({
"node_modules/undici/lib/web/websocket/frame.js"(exports2, module2) {
"use strict";
var { maxUnsigned16Bit } = require_constants5();
var BUFFER_SIZE = 16386;
var crypto4;
var buffer = null;
var bufIdx = BUFFER_SIZE;
try {
crypto4 = require("node:crypto");
} catch {
crypto4 = {
// not full compatibility, but minimum.
randomFillSync: function randomFillSync(buffer2, _offset, _size) {
for (let i = 0; i < buffer2.length; ++i) {
buffer2[i] = Math.random() * 255 | 0;
}
return buffer2;
}
};
}
function generateMask() {
if (bufIdx === BUFFER_SIZE) {
bufIdx = 0;
crypto4.randomFillSync(buffer ??= Buffer.allocUnsafe(BUFFER_SIZE), 0, BUFFER_SIZE);
}
return [buffer[bufIdx++], buffer[bufIdx++], buffer[bufIdx++], buffer[bufIdx++]];
}
var WebsocketFrameSend = class {
/**
* @param {Buffer|undefined} data
*/
constructor(data2) {
this.frameData = data2;
}
createFrame(opcode) {
const frameData = this.frameData;
const maskKey = generateMask();
const bodyLength = frameData?.byteLength ?? 0;
let payloadLength = bodyLength;
let offset = 6;
if (bodyLength > maxUnsigned16Bit) {
offset += 8;
payloadLength = 127;
} else if (bodyLength > 125) {
offset += 2;
payloadLength = 126;
}
const buffer2 = Buffer.allocUnsafe(bodyLength + offset);
buffer2[0] = buffer2[1] = 0;
buffer2[0] |= 128;
buffer2[0] = (buffer2[0] & 240) + opcode;
buffer2[offset - 4] = maskKey[0];
buffer2[offset - 3] = maskKey[1];
buffer2[offset - 2] = maskKey[2];
buffer2[offset - 1] = maskKey[3];
buffer2[1] = payloadLength;
if (payloadLength === 126) {
buffer2.writeUInt16BE(bodyLength, 2);
} else if (payloadLength === 127) {
buffer2[2] = buffer2[3] = 0;
buffer2.writeUIntBE(bodyLength, 4, 6);
}
buffer2[1] |= 128;
for (let i = 0; i < bodyLength; ++i) {
buffer2[offset + i] = frameData[i] ^ maskKey[i & 3];
}
return buffer2;
}
};
module2.exports = {
WebsocketFrameSend
};
}
});
// node_modules/undici/lib/web/websocket/connection.js
var require_connection = __commonJS({
"node_modules/undici/lib/web/websocket/connection.js"(exports2, module2) {
"use strict";
var { uid, states, sentCloseFrameState, emptyBuffer, opcodes } = require_constants5();
var {
kReadyState,
kSentClose,
kByteParser,
kReceivedClose,
kResponse
} = require_symbols5();
var { fireEvent, failWebsocketConnection, isClosing, isClosed, isEstablished, parseExtensions } = require_util8();
var { channels } = require_diagnostics();
var { CloseEvent } = require_events();
var { makeRequest } = require_request2();
var { fetching } = require_fetch();
var { Headers, getHeadersList } = require_headers();
var { getDecodeSplit } = require_util3();
var { WebsocketFrameSend } = require_frame();
var crypto4;
try {
crypto4 = require("node:crypto");
} catch {
}
function establishWebSocketConnection(url2, protocols, client, ws, onEstablish, options) {
const requestURL = url2;
requestURL.protocol = url2.protocol === "ws:" ? "http:" : "https:";
const request = makeRequest({
urlList: [requestURL],
client,
serviceWorkers: "none",
referrer: "no-referrer",
mode: "websocket",
credentials: "include",
cache: "no-store",
redirect: "error"
});
if (options.headers) {
const headersList = getHeadersList(new Headers(options.headers));
request.headersList = headersList;
}
const keyValue = crypto4.randomBytes(16).toString("base64");
request.headersList.append("sec-websocket-key", keyValue);
request.headersList.append("sec-websocket-version", "13");
for (const protocol of protocols) {
request.headersList.append("sec-websocket-protocol", protocol);
}
const permessageDeflate = "permessage-deflate; client_max_window_bits";
request.headersList.append("sec-websocket-extensions", permessageDeflate);
const controller = fetching({
request,
useParallelQueue: true,
dispatcher: options.dispatcher,
processResponse(response) {
if (response.type === "error" || response.status !== 101) {
failWebsocketConnection(ws, "Received network error or non-101 status code.");
return;
}
if (protocols.length !== 0 && !response.headersList.get("Sec-WebSocket-Protocol")) {
failWebsocketConnection(ws, "Server did not respond with sent protocols.");
return;
}
if (response.headersList.get("Upgrade")?.toLowerCase() !== "websocket") {
failWebsocketConnection(ws, 'Server did not set Upgrade header to "websocket".');
return;
}
if (response.headersList.get("Connection")?.toLowerCase() !== "upgrade") {
failWebsocketConnection(ws, 'Server did not set Connection header to "upgrade".');
return;
}
const secWSAccept = response.headersList.get("Sec-WebSocket-Accept");
const digest = crypto4.createHash("sha1").update(keyValue + uid).digest("base64");
if (secWSAccept !== digest) {
failWebsocketConnection(ws, "Incorrect hash received in Sec-WebSocket-Accept header.");
return;
}
const secExtension = response.headersList.get("Sec-WebSocket-Extensions");
let extensions;
if (secExtension !== null) {
extensions = parseExtensions(secExtension);
if (!extensions.has("permessage-deflate")) {
failWebsocketConnection(ws, "Sec-WebSocket-Extensions header does not match.");
return;
}
}
const secProtocol = response.headersList.get("Sec-WebSocket-Protocol");
if (secProtocol !== null) {
const requestProtocols = getDecodeSplit("sec-websocket-protocol", request.headersList);
if (!requestProtocols.includes(secProtocol)) {
failWebsocketConnection(ws, "Protocol was not set in the opening handshake.");
return;
}
}
response.socket.on("data", onSocketData);
response.socket.on("close", onSocketClose);
response.socket.on("error", onSocketError);
if (channels.open.hasSubscribers) {
channels.open.publish({
address: response.socket.address(),
protocol: secProtocol,
extensions: secExtension
});
}
onEstablish(response, extensions);
}
});
return controller;
}
function closeWebSocketConnection(ws, code, reason, reasonByteLength) {
if (isClosing(ws) || isClosed(ws)) {
} else if (!isEstablished(ws)) {
failWebsocketConnection(ws, "Connection was closed before it was established.");
ws[kReadyState] = states.CLOSING;
} else if (ws[kSentClose] === sentCloseFrameState.NOT_SENT) {
ws[kSentClose] = sentCloseFrameState.PROCESSING;
const frame = new WebsocketFrameSend();
if (code !== void 0 && reason === void 0) {
frame.frameData = Buffer.allocUnsafe(2);
frame.frameData.writeUInt16BE(code, 0);
} else if (code !== void 0 && reason !== void 0) {
frame.frameData = Buffer.allocUnsafe(2 + reasonByteLength);
frame.frameData.writeUInt16BE(code, 0);
frame.frameData.write(reason, 2, "utf-8");
} else {
frame.frameData = emptyBuffer;
}
const socket = ws[kResponse].socket;
socket.write(frame.createFrame(opcodes.CLOSE));
ws[kSentClose] = sentCloseFrameState.SENT;
ws[kReadyState] = states.CLOSING;
} else {
ws[kReadyState] = states.CLOSING;
}
}
function onSocketData(chunk) {
if (!this.ws[kByteParser].write(chunk)) {
this.pause();
}
}
function onSocketClose() {
const { ws } = this;
const { [kResponse]: response } = ws;
response.socket.off("data", onSocketData);
response.socket.off("close", onSocketClose);
response.socket.off("error", onSocketError);
const wasClean = ws[kSentClose] === sentCloseFrameState.SENT && ws[kReceivedClose];
let code = 1005;
let reason = "";
const result = ws[kByteParser].closingInfo;
if (result && !result.error) {
code = result.code ?? 1005;
reason = result.reason;
} else if (!ws[kReceivedClose]) {
code = 1006;
}
ws[kReadyState] = states.CLOSED;
fireEvent("close", ws, (type, init) => new CloseEvent(type, init), {
wasClean,
code,
reason
});
if (channels.close.hasSubscribers) {
channels.close.publish({
websocket: ws,
code,
reason
});
}
}
function onSocketError(error) {
const { ws } = this;
ws[kReadyState] = states.CLOSING;
if (channels.socketError.hasSubscribers) {
channels.socketError.publish(error);
}
this.destroy();
}
module2.exports = {
establishWebSocketConnection,
closeWebSocketConnection
};
}
});
// node_modules/undici/lib/web/websocket/permessage-deflate.js
var require_permessage_deflate = __commonJS({
"node_modules/undici/lib/web/websocket/permessage-deflate.js"(exports2, module2) {
"use strict";
var { createInflateRaw, Z_DEFAULT_WINDOWBITS } = require("node:zlib");
var { isValidClientWindowBits } = require_util8();
var tail = Buffer.from([0, 0, 255, 255]);
var kBuffer = Symbol("kBuffer");
var kLength = Symbol("kLength");
var PerMessageDeflate = class {
/** @type {import('node:zlib').InflateRaw} */
#inflate;
#options = {};
constructor(extensions) {
this.#options.serverNoContextTakeover = extensions.has("server_no_context_takeover");
this.#options.serverMaxWindowBits = extensions.get("server_max_window_bits");
}
decompress(chunk, fin, callback) {
if (!this.#inflate) {
let windowBits = Z_DEFAULT_WINDOWBITS;
if (this.#options.serverMaxWindowBits) {
if (!isValidClientWindowBits(this.#options.serverMaxWindowBits)) {
callback(new Error("Invalid server_max_window_bits"));
return;
}
windowBits = Number.parseInt(this.#options.serverMaxWindowBits);
}
this.#inflate = createInflateRaw({ windowBits });
this.#inflate[kBuffer] = [];
this.#inflate[kLength] = 0;
this.#inflate.on("data", (data2) => {
this.#inflate[kBuffer].push(data2);
this.#inflate[kLength] += data2.length;
});
this.#inflate.on("error", (err2) => {
this.#inflate = null;
callback(err2);
});
}
this.#inflate.write(chunk);
if (fin) {
this.#inflate.write(tail);
}
this.#inflate.flush(() => {
const full = Buffer.concat(this.#inflate[kBuffer], this.#inflate[kLength]);
this.#inflate[kBuffer].length = 0;
this.#inflate[kLength] = 0;
callback(null, full);
});
}
};
module2.exports = { PerMessageDeflate };
}
});
// node_modules/undici/lib/web/websocket/receiver.js
var require_receiver = __commonJS({
"node_modules/undici/lib/web/websocket/receiver.js"(exports2, module2) {
"use strict";
var { Writable } = require("node:stream");
var assert = require("node:assert");
var { parserStates, opcodes, states, emptyBuffer, sentCloseFrameState } = require_constants5();
var { kReadyState, kSentClose, kResponse, kReceivedClose } = require_symbols5();
var { channels } = require_diagnostics();
var {
isValidStatusCode,
isValidOpcode,
failWebsocketConnection,
websocketMessageReceived,
utf8Decode,
isControlFrame,
isTextBinaryFrame,
isContinuationFrame
} = require_util8();
var { WebsocketFrameSend } = require_frame();
var { closeWebSocketConnection } = require_connection();
var { PerMessageDeflate } = require_permessage_deflate();
var ByteParser = class extends Writable {
#buffers = [];
#byteOffset = 0;
#loop = false;
#state = parserStates.INFO;
#info = {};
#fragments = [];
/** @type {Map<string, PerMessageDeflate>} */
#extensions;
constructor(ws, extensions) {
super();
this.ws = ws;
this.#extensions = extensions == null ? /* @__PURE__ */ new Map() : extensions;
if (this.#extensions.has("permessage-deflate")) {
this.#extensions.set("permessage-deflate", new PerMessageDeflate(extensions));
}
}
/**
* @param {Buffer} chunk
* @param {() => void} callback
*/
_write(chunk, _, callback) {
this.#buffers.push(chunk);
this.#byteOffset += chunk.length;
this.#loop = true;
this.run(callback);
}
/**
* Runs whenever a new chunk is received.
* Callback is called whenever there are no more chunks buffering,
* or not enough bytes are buffered to parse.
*/
run(callback) {
while (this.#loop) {
if (this.#state === parserStates.INFO) {
if (this.#byteOffset < 2) {
return callback();
}
const buffer = this.consume(2);
const fin = (buffer[0] & 128) !== 0;
const opcode = buffer[0] & 15;
const masked = (buffer[1] & 128) === 128;
const fragmented = !fin && opcode !== opcodes.CONTINUATION;
const payloadLength = buffer[1] & 127;
const rsv1 = buffer[0] & 64;
const rsv2 = buffer[0] & 32;
const rsv3 = buffer[0] & 16;
if (!isValidOpcode(opcode)) {
failWebsocketConnection(this.ws, "Invalid opcode received");
return callback();
}
if (masked) {
failWebsocketConnection(this.ws, "Frame cannot be masked");
return callback();
}
if (rsv1 !== 0 && !this.#extensions.has("permessage-deflate")) {
failWebsocketConnection(this.ws, "Expected RSV1 to be clear.");
return;
}
if (rsv2 !== 0 || rsv3 !== 0) {
failWebsocketConnection(this.ws, "RSV1, RSV2, RSV3 must be clear");
return;
}
if (fragmented && !isTextBinaryFrame(opcode)) {
failWebsocketConnection(this.ws, "Invalid frame type was fragmented.");
return;
}
if (isTextBinaryFrame(opcode) && this.#fragments.length > 0) {
failWebsocketConnection(this.ws, "Expected continuation frame");
return;
}
if (this.#info.fragmented && fragmented) {
failWebsocketConnection(this.ws, "Fragmented frame exceeded 125 bytes.");
return;
}
if ((payloadLength > 125 || fragmented) && isControlFrame(opcode)) {
failWebsocketConnection(this.ws, "Control frame either too large or fragmented");
return;
}
if (isContinuationFrame(opcode) && this.#fragments.length === 0 && !this.#info.compressed) {
failWebsocketConnection(this.ws, "Unexpected continuation frame");
return;
}
if (payloadLength <= 125) {
this.#info.payloadLength = payloadLength;
this.#state = parserStates.READ_DATA;
} else if (payloadLength === 126) {
this.#state = parserStates.PAYLOADLENGTH_16;
} else if (payloadLength === 127) {
this.#state = parserStates.PAYLOADLENGTH_64;
}
if (isTextBinaryFrame(opcode)) {
this.#info.binaryType = opcode;
this.#info.compressed = rsv1 !== 0;
}
this.#info.opcode = opcode;
this.#info.masked = masked;
this.#info.fin = fin;
this.#info.fragmented = fragmented;
} else if (this.#state === parserStates.PAYLOADLENGTH_16) {
if (this.#byteOffset < 2) {
return callback();
}
const buffer = this.consume(2);
this.#info.payloadLength = buffer.readUInt16BE(0);
this.#state = parserStates.READ_DATA;
} else if (this.#state === parserStates.PAYLOADLENGTH_64) {
if (this.#byteOffset < 8) {
return callback();
}
const buffer = this.consume(8);
const upper = buffer.readUInt32BE(0);
if (upper > 2 ** 31 - 1) {
failWebsocketConnection(this.ws, "Received payload length > 2^31 bytes.");
return;
}
const lower = buffer.readUInt32BE(4);
this.#info.payloadLength = (upper << 8) + lower;
this.#state = parserStates.READ_DATA;
} else if (this.#state === parserStates.READ_DATA) {
if (this.#byteOffset < this.#info.payloadLength) {
return callback();
}
const body = this.consume(this.#info.payloadLength);
if (isControlFrame(this.#info.opcode)) {
this.#loop = this.parseControlFrame(body);
this.#state = parserStates.INFO;
} else {
if (!this.#info.compressed) {
this.#fragments.push(body);
if (!this.#info.fragmented && this.#info.fin) {
const fullMessage = Buffer.concat(this.#fragments);
websocketMessageReceived(this.ws, this.#info.binaryType, fullMessage);
this.#fragments.length = 0;
}
this.#state = parserStates.INFO;
} else {
this.#extensions.get("permessage-deflate").decompress(body, this.#info.fin, (error, data2) => {
if (error) {
closeWebSocketConnection(this.ws, 1007, error.message, error.message.length);
return;
}
this.#fragments.push(data2);
if (!this.#info.fin) {
this.#state = parserStates.INFO;
this.#loop = true;
this.run(callback);
return;
}
websocketMessageReceived(this.ws, this.#info.binaryType, Buffer.concat(this.#fragments));
this.#loop = true;
this.#state = parserStates.INFO;
this.#fragments.length = 0;
this.run(callback);
});
this.#loop = false;
break;
}
}
}
}
}
/**
* Take n bytes from the buffered Buffers
* @param {number} n
* @returns {Buffer}
*/
consume(n) {
if (n > this.#byteOffset) {
throw new Error("Called consume() before buffers satiated.");
} else if (n === 0) {
return emptyBuffer;
}
if (this.#buffers[0].length === n) {
this.#byteOffset -= this.#buffers[0].length;
return this.#buffers.shift();
}
const buffer = Buffer.allocUnsafe(n);
let offset = 0;
while (offset !== n) {
const next2 = this.#buffers[0];
const { length } = next2;
if (length + offset === n) {
buffer.set(this.#buffers.shift(), offset);
break;
} else if (length + offset > n) {
buffer.set(next2.subarray(0, n - offset), offset);
this.#buffers[0] = next2.subarray(n - offset);
break;
} else {
buffer.set(this.#buffers.shift(), offset);
offset += next2.length;
}
}
this.#byteOffset -= n;
return buffer;
}
parseCloseBody(data2) {
assert(data2.length !== 1);
let code;
if (data2.length >= 2) {
code = data2.readUInt16BE(0);
}
if (code !== void 0 && !isValidStatusCode(code)) {
return { code: 1002, reason: "Invalid status code", error: true };
}
let reason = data2.subarray(2);
if (reason[0] === 239 && reason[1] === 187 && reason[2] === 191) {
reason = reason.subarray(3);
}
try {
reason = utf8Decode(reason);
} catch {
return { code: 1007, reason: "Invalid UTF-8", error: true };
}
return { code, reason, error: false };
}
/**
* Parses control frames.
* @param {Buffer} body
*/
parseControlFrame(body) {
const { opcode, payloadLength } = this.#info;
if (opcode === opcodes.CLOSE) {
if (payloadLength === 1) {
failWebsocketConnection(this.ws, "Received close frame with a 1-byte body.");
return false;
}
this.#info.closeInfo = this.parseCloseBody(body);
if (this.#info.closeInfo.error) {
const { code, reason } = this.#info.closeInfo;
closeWebSocketConnection(this.ws, code, reason, reason.length);
failWebsocketConnection(this.ws, reason);
return false;
}
if (this.ws[kSentClose] !== sentCloseFrameState.SENT) {
let body2 = emptyBuffer;
if (this.#info.closeInfo.code) {
body2 = Buffer.allocUnsafe(2);
body2.writeUInt16BE(this.#info.closeInfo.code, 0);
}
const closeFrame = new WebsocketFrameSend(body2);
this.ws[kResponse].socket.write(
closeFrame.createFrame(opcodes.CLOSE),
(err2) => {
if (!err2) {
this.ws[kSentClose] = sentCloseFrameState.SENT;
}
}
);
}
this.ws[kReadyState] = states.CLOSING;
this.ws[kReceivedClose] = true;
return false;
} else if (opcode === opcodes.PING) {
if (!this.ws[kReceivedClose]) {
const frame = new WebsocketFrameSend(body);
this.ws[kResponse].socket.write(frame.createFrame(opcodes.PONG));
if (channels.ping.hasSubscribers) {
channels.ping.publish({
payload: body
});
}
}
} else if (opcode === opcodes.PONG) {
if (channels.pong.hasSubscribers) {
channels.pong.publish({
payload: body
});
}
}
return true;
}
get closingInfo() {
return this.#info.closeInfo;
}
};
module2.exports = {
ByteParser
};
}
});
// node_modules/undici/lib/web/websocket/sender.js
var require_sender = __commonJS({
"node_modules/undici/lib/web/websocket/sender.js"(exports2, module2) {
"use strict";
var { WebsocketFrameSend } = require_frame();
var { opcodes, sendHints } = require_constants5();
var FixedQueue = require_fixed_queue();
var FastBuffer = Buffer[Symbol.species];
var SendQueue = class {
/**
* @type {FixedQueue}
*/
#queue = new FixedQueue();
/**
* @type {boolean}
*/
#running = false;
/** @type {import('node:net').Socket} */
#socket;
constructor(socket) {
this.#socket = socket;
}
add(item, cb, hint) {
if (hint !== sendHints.blob) {
const frame = createFrame(item, hint);
if (!this.#running) {
this.#socket.write(frame, cb);
} else {
const node2 = {
promise: null,
callback: cb,
frame
};
this.#queue.push(node2);
}
return;
}
const node = {
promise: item.arrayBuffer().then((ab) => {
node.promise = null;
node.frame = createFrame(ab, hint);
}),
callback: cb,
frame: null
};
this.#queue.push(node);
if (!this.#running) {
this.#run();
}
}
async #run() {
this.#running = true;
const queue = this.#queue;
while (!queue.isEmpty()) {
const node = queue.shift();
if (node.promise !== null) {
await node.promise;
}
this.#socket.write(node.frame, node.callback);
node.callback = node.frame = null;
}
this.#running = false;
}
};
function createFrame(data2, hint) {
return new WebsocketFrameSend(toBuffer(data2, hint)).createFrame(hint === sendHints.string ? opcodes.TEXT : opcodes.BINARY);
}
function toBuffer(data2, hint) {
switch (hint) {
case sendHints.string:
return Buffer.from(data2);
case sendHints.arrayBuffer:
case sendHints.blob:
return new FastBuffer(data2);
case sendHints.typedArray:
return new FastBuffer(data2.buffer, data2.byteOffset, data2.byteLength);
}
}
module2.exports = { SendQueue };
}
});
// node_modules/undici/lib/web/websocket/websocket.js
var require_websocket = __commonJS({
"node_modules/undici/lib/web/websocket/websocket.js"(exports2, module2) {
"use strict";
var { webidl } = require_webidl();
var { URLSerializer } = require_data_url();
var { environmentSettingsObject } = require_util3();
var { staticPropertyDescriptors, states, sentCloseFrameState, sendHints } = require_constants5();
var {
kWebSocketURL,
kReadyState,
kController,
kBinaryType,
kResponse,
kSentClose,
kByteParser
} = require_symbols5();
var {
isConnecting,
isEstablished,
isClosing,
isValidSubprotocol,
fireEvent
} = require_util8();
var { establishWebSocketConnection, closeWebSocketConnection } = require_connection();
var { ByteParser } = require_receiver();
var { kEnumerableProperty, isBlobLike } = require_util2();
var { getGlobalDispatcher } = require_global2();
var { types } = require("node:util");
var { ErrorEvent, CloseEvent } = require_events();
var { SendQueue } = require_sender();
var WebSocket = class _WebSocket extends EventTarget {
#events = {
open: null,
error: null,
close: null,
message: null
};
#bufferedAmount = 0;
#protocol = "";
#extensions = "";
/** @type {SendQueue} */
#sendQueue;
/**
* @param {string} url
* @param {string|string[]} protocols
*/
constructor(url2, protocols = []) {
super();
webidl.util.markAsUncloneable(this);
const prefix = "WebSocket constructor";
webidl.argumentLengthCheck(arguments, 1, prefix);
const options = webidl.converters["DOMString or sequence<DOMString> or WebSocketInit"](protocols, prefix, "options");
url2 = webidl.converters.USVString(url2, prefix, "url");
protocols = options.protocols;
const baseURL = environmentSettingsObject.settingsObject.baseUrl;
let urlRecord;
try {
urlRecord = new URL(url2, baseURL);
} catch (e) {
throw new DOMException(e, "SyntaxError");
}
if (urlRecord.protocol === "http:") {
urlRecord.protocol = "ws:";
} else if (urlRecord.protocol === "https:") {
urlRecord.protocol = "wss:";
}
if (urlRecord.protocol !== "ws:" && urlRecord.protocol !== "wss:") {
throw new DOMException(
`Expected a ws: or wss: protocol, got ${urlRecord.protocol}`,
"SyntaxError"
);
}
if (urlRecord.hash || urlRecord.href.endsWith("#")) {
throw new DOMException("Got fragment", "SyntaxError");
}
if (typeof protocols === "string") {
protocols = [protocols];
}
if (protocols.length !== new Set(protocols.map((p) => p.toLowerCase())).size) {
throw new DOMException("Invalid Sec-WebSocket-Protocol value", "SyntaxError");
}
if (protocols.length > 0 && !protocols.every((p) => isValidSubprotocol(p))) {
throw new DOMException("Invalid Sec-WebSocket-Protocol value", "SyntaxError");
}
this[kWebSocketURL] = new URL(urlRecord.href);
const client = environmentSettingsObject.settingsObject;
this[kController] = establishWebSocketConnection(
urlRecord,
protocols,
client,
this,
(response, extensions) => this.#onConnectionEstablished(response, extensions),
options
);
this[kReadyState] = _WebSocket.CONNECTING;
this[kSentClose] = sentCloseFrameState.NOT_SENT;
this[kBinaryType] = "blob";
}
/**
* @see https://websockets.spec.whatwg.org/#dom-websocket-close
* @param {number|undefined} code
* @param {string|undefined} reason
*/
close(code = void 0, reason = void 0) {
webidl.brandCheck(this, _WebSocket);
const prefix = "WebSocket.close";
if (code !== void 0) {
code = webidl.converters["unsigned short"](code, prefix, "code", { clamp: true });
}
if (reason !== void 0) {
reason = webidl.converters.USVString(reason, prefix, "reason");
}
if (code !== void 0) {
if (code !== 1e3 && (code < 3e3 || code > 4999)) {
throw new DOMException("invalid code", "InvalidAccessError");
}
}
let reasonByteLength = 0;
if (reason !== void 0) {
reasonByteLength = Buffer.byteLength(reason);
if (reasonByteLength > 123) {
throw new DOMException(
`Reason must be less than 123 bytes; received ${reasonByteLength}`,
"SyntaxError"
);
}
}
closeWebSocketConnection(this, code, reason, reasonByteLength);
}
/**
* @see https://websockets.spec.whatwg.org/#dom-websocket-send
* @param {NodeJS.TypedArray|ArrayBuffer|Blob|string} data
*/
send(data2) {
webidl.brandCheck(this, _WebSocket);
const prefix = "WebSocket.send";
webidl.argumentLengthCheck(arguments, 1, prefix);
data2 = webidl.converters.WebSocketSendData(data2, prefix, "data");
if (isConnecting(this)) {
throw new DOMException("Sent before connected.", "InvalidStateError");
}
if (!isEstablished(this) || isClosing(this)) {
return;
}
if (typeof data2 === "string") {
const length = Buffer.byteLength(data2);
this.#bufferedAmount += length;
this.#sendQueue.add(data2, () => {
this.#bufferedAmount -= length;
}, sendHints.string);
} else if (types.isArrayBuffer(data2)) {
this.#bufferedAmount += data2.byteLength;
this.#sendQueue.add(data2, () => {
this.#bufferedAmount -= data2.byteLength;
}, sendHints.arrayBuffer);
} else if (ArrayBuffer.isView(data2)) {
this.#bufferedAmount += data2.byteLength;
this.#sendQueue.add(data2, () => {
this.#bufferedAmount -= data2.byteLength;
}, sendHints.typedArray);
} else if (isBlobLike(data2)) {
this.#bufferedAmount += data2.size;
this.#sendQueue.add(data2, () => {
this.#bufferedAmount -= data2.size;
}, sendHints.blob);
}
}
get readyState() {
webidl.brandCheck(this, _WebSocket);
return this[kReadyState];
}
get bufferedAmount() {
webidl.brandCheck(this, _WebSocket);
return this.#bufferedAmount;
}
get url() {
webidl.brandCheck(this, _WebSocket);
return URLSerializer(this[kWebSocketURL]);
}
get extensions() {
webidl.brandCheck(this, _WebSocket);
return this.#extensions;
}
get protocol() {
webidl.brandCheck(this, _WebSocket);
return this.#protocol;
}
get onopen() {
webidl.brandCheck(this, _WebSocket);
return this.#events.open;
}
set onopen(fn) {
webidl.brandCheck(this, _WebSocket);
if (this.#events.open) {
this.removeEventListener("open", this.#events.open);
}
if (typeof fn === "function") {
this.#events.open = fn;
this.addEventListener("open", fn);
} else {
this.#events.open = null;
}
}
get onerror() {
webidl.brandCheck(this, _WebSocket);
return this.#events.error;
}
set onerror(fn) {
webidl.brandCheck(this, _WebSocket);
if (this.#events.error) {
this.removeEventListener("error", this.#events.error);
}
if (typeof fn === "function") {
this.#events.error = fn;
this.addEventListener("error", fn);
} else {
this.#events.error = null;
}
}
get onclose() {
webidl.brandCheck(this, _WebSocket);
return this.#events.close;
}
set onclose(fn) {
webidl.brandCheck(this, _WebSocket);
if (this.#events.close) {
this.removeEventListener("close", this.#events.close);
}
if (typeof fn === "function") {
this.#events.close = fn;
this.addEventListener("close", fn);
} else {
this.#events.close = null;
}
}
get onmessage() {
webidl.brandCheck(this, _WebSocket);
return this.#events.message;
}
set onmessage(fn) {
webidl.brandCheck(this, _WebSocket);
if (this.#events.message) {
this.removeEventListener("message", this.#events.message);
}
if (typeof fn === "function") {
this.#events.message = fn;
this.addEventListener("message", fn);
} else {
this.#events.message = null;
}
}
get binaryType() {
webidl.brandCheck(this, _WebSocket);
return this[kBinaryType];
}
set binaryType(type) {
webidl.brandCheck(this, _WebSocket);
if (type !== "blob" && type !== "arraybuffer") {
this[kBinaryType] = "blob";
} else {
this[kBinaryType] = type;
}
}
/**
* @see https://websockets.spec.whatwg.org/#feedback-from-the-protocol
*/
#onConnectionEstablished(response, parsedExtensions) {
this[kResponse] = response;
const parser = new ByteParser(this, parsedExtensions);
parser.on("drain", onParserDrain);
parser.on("error", onParserError.bind(this));
response.socket.ws = this;
this[kByteParser] = parser;
this.#sendQueue = new SendQueue(response.socket);
this[kReadyState] = states.OPEN;
const extensions = response.headersList.get("sec-websocket-extensions");
if (extensions !== null) {
this.#extensions = extensions;
}
const protocol = response.headersList.get("sec-websocket-protocol");
if (protocol !== null) {
this.#protocol = protocol;
}
fireEvent("open", this);
}
};
WebSocket.CONNECTING = WebSocket.prototype.CONNECTING = states.CONNECTING;
WebSocket.OPEN = WebSocket.prototype.OPEN = states.OPEN;
WebSocket.CLOSING = WebSocket.prototype.CLOSING = states.CLOSING;
WebSocket.CLOSED = WebSocket.prototype.CLOSED = states.CLOSED;
Object.defineProperties(WebSocket.prototype, {
CONNECTING: staticPropertyDescriptors,
OPEN: staticPropertyDescriptors,
CLOSING: staticPropertyDescriptors,
CLOSED: staticPropertyDescriptors,
url: kEnumerableProperty,
readyState: kEnumerableProperty,
bufferedAmount: kEnumerableProperty,
onopen: kEnumerableProperty,
onerror: kEnumerableProperty,
onclose: kEnumerableProperty,
close: kEnumerableProperty,
onmessage: kEnumerableProperty,
binaryType: kEnumerableProperty,
send: kEnumerableProperty,
extensions: kEnumerableProperty,
protocol: kEnumerableProperty,
[Symbol.toStringTag]: {
value: "WebSocket",
writable: false,
enumerable: false,
configurable: true
}
});
Object.defineProperties(WebSocket, {
CONNECTING: staticPropertyDescriptors,
OPEN: staticPropertyDescriptors,
CLOSING: staticPropertyDescriptors,
CLOSED: staticPropertyDescriptors
});
webidl.converters["sequence<DOMString>"] = webidl.sequenceConverter(
webidl.converters.DOMString
);
webidl.converters["DOMString or sequence<DOMString>"] = function(V, prefix, argument) {
if (webidl.util.Type(V) === "Object" && Symbol.iterator in V) {
return webidl.converters["sequence<DOMString>"](V);
}
return webidl.converters.DOMString(V, prefix, argument);
};
webidl.converters.WebSocketInit = webidl.dictionaryConverter([
{
key: "protocols",
converter: webidl.converters["DOMString or sequence<DOMString>"],
defaultValue: () => new Array(0)
},
{
key: "dispatcher",
converter: webidl.converters.any,
defaultValue: () => getGlobalDispatcher()
},
{
key: "headers",
converter: webidl.nullableConverter(webidl.converters.HeadersInit)
}
]);
webidl.converters["DOMString or sequence<DOMString> or WebSocketInit"] = function(V) {
if (webidl.util.Type(V) === "Object" && !(Symbol.iterator in V)) {
return webidl.converters.WebSocketInit(V);
}
return { protocols: webidl.converters["DOMString or sequence<DOMString>"](V) };
};
webidl.converters.WebSocketSendData = function(V) {
if (webidl.util.Type(V) === "Object") {
if (isBlobLike(V)) {
return webidl.converters.Blob(V, { strict: false });
}
if (ArrayBuffer.isView(V) || types.isArrayBuffer(V)) {
return webidl.converters.BufferSource(V);
}
}
return webidl.converters.USVString(V);
};
function onParserDrain() {
this.ws[kResponse].socket.resume();
}
function onParserError(err2) {
let message;
let code;
if (err2 instanceof CloseEvent) {
message = err2.reason;
code = err2.code;
} else {
message = err2.message;
}
fireEvent("error", this, () => new ErrorEvent("error", { error: err2, message }));
closeWebSocketConnection(this, code);
}
module2.exports = {
WebSocket
};
}
});
// node_modules/undici/lib/web/eventsource/util.js
var require_util9 = __commonJS({
"node_modules/undici/lib/web/eventsource/util.js"(exports2, module2) {
"use strict";
function isValidLastEventId(value) {
return value.indexOf("\0") === -1;
}
function isASCIINumber(value) {
if (value.length === 0) return false;
for (let i = 0; i < value.length; i++) {
if (value.charCodeAt(i) < 48 || value.charCodeAt(i) > 57) return false;
}
return true;
}
function delay(ms) {
return new Promise((resolve) => {
setTimeout(resolve, ms).unref();
});
}
module2.exports = {
isValidLastEventId,
isASCIINumber,
delay
};
}
});
// node_modules/undici/lib/web/eventsource/eventsource-stream.js
var require_eventsource_stream = __commonJS({
"node_modules/undici/lib/web/eventsource/eventsource-stream.js"(exports2, module2) {
"use strict";
var { Transform: Transform2 } = require("node:stream");
var { isASCIINumber, isValidLastEventId } = require_util9();
var BOM = [239, 187, 191];
var LF = 10;
var CR = 13;
var COLON = 58;
var SPACE = 32;
var EventSourceStream = class extends Transform2 {
/**
* @type {eventSourceSettings}
*/
state = null;
/**
* Leading byte-order-mark check.
* @type {boolean}
*/
checkBOM = true;
/**
* @type {boolean}
*/
crlfCheck = false;
/**
* @type {boolean}
*/
eventEndCheck = false;
/**
* @type {Buffer}
*/
buffer = null;
pos = 0;
event = {
data: void 0,
event: void 0,
id: void 0,
retry: void 0
};
/**
* @param {object} options
* @param {eventSourceSettings} options.eventSourceSettings
* @param {Function} [options.push]
*/
constructor(options = {}) {
options.readableObjectMode = true;
super(options);
this.state = options.eventSourceSettings || {};
if (options.push) {
this.push = options.push;
}
}
/**
* @param {Buffer} chunk
* @param {string} _encoding
* @param {Function} callback
* @returns {void}
*/
_transform(chunk, _encoding, callback) {
if (chunk.length === 0) {
callback();
return;
}
if (this.buffer) {
this.buffer = Buffer.concat([this.buffer, chunk]);
} else {
this.buffer = chunk;
}
if (this.checkBOM) {
switch (this.buffer.length) {
case 1:
if (this.buffer[0] === BOM[0]) {
callback();
return;
}
this.checkBOM = false;
callback();
return;
case 2:
if (this.buffer[0] === BOM[0] && this.buffer[1] === BOM[1]) {
callback();
return;
}
this.checkBOM = false;
break;
case 3:
if (this.buffer[0] === BOM[0] && this.buffer[1] === BOM[1] && this.buffer[2] === BOM[2]) {
this.buffer = Buffer.alloc(0);
this.checkBOM = false;
callback();
return;
}
this.checkBOM = false;
break;
default:
if (this.buffer[0] === BOM[0] && this.buffer[1] === BOM[1] && this.buffer[2] === BOM[2]) {
this.buffer = this.buffer.subarray(3);
}
this.checkBOM = false;
break;
}
}
while (this.pos < this.buffer.length) {
if (this.eventEndCheck) {
if (this.crlfCheck) {
if (this.buffer[this.pos] === LF) {
this.buffer = this.buffer.subarray(this.pos + 1);
this.pos = 0;
this.crlfCheck = false;
continue;
}
this.crlfCheck = false;
}
if (this.buffer[this.pos] === LF || this.buffer[this.pos] === CR) {
if (this.buffer[this.pos] === CR) {
this.crlfCheck = true;
}
this.buffer = this.buffer.subarray(this.pos + 1);
this.pos = 0;
if (this.event.data !== void 0 || this.event.event || this.event.id || this.event.retry) {
this.processEvent(this.event);
}
this.clearEvent();
continue;
}
this.eventEndCheck = false;
continue;
}
if (this.buffer[this.pos] === LF || this.buffer[this.pos] === CR) {
if (this.buffer[this.pos] === CR) {
this.crlfCheck = true;
}
this.parseLine(this.buffer.subarray(0, this.pos), this.event);
this.buffer = this.buffer.subarray(this.pos + 1);
this.pos = 0;
this.eventEndCheck = true;
continue;
}
this.pos++;
}
callback();
}
/**
* @param {Buffer} line
* @param {EventStreamEvent} event
*/
parseLine(line, event) {
if (line.length === 0) {
return;
}
const colonPosition = line.indexOf(COLON);
if (colonPosition === 0) {
return;
}
let field = "";
let value = "";
if (colonPosition !== -1) {
field = line.subarray(0, colonPosition).toString("utf8");
let valueStart = colonPosition + 1;
if (line[valueStart] === SPACE) {
++valueStart;
}
value = line.subarray(valueStart).toString("utf8");
} else {
field = line.toString("utf8");
value = "";
}
switch (field) {
case "data":
if (event[field] === void 0) {
event[field] = value;
} else {
event[field] += `
${value}`;
}
break;
case "retry":
if (isASCIINumber(value)) {
event[field] = value;
}
break;
case "id":
if (isValidLastEventId(value)) {
event[field] = value;
}
break;
case "event":
if (value.length > 0) {
event[field] = value;
}
break;
}
}
/**
* @param {EventSourceStreamEvent} event
*/
processEvent(event) {
if (event.retry && isASCIINumber(event.retry)) {
this.state.reconnectionTime = parseInt(event.retry, 10);
}
if (event.id && isValidLastEventId(event.id)) {
this.state.lastEventId = event.id;
}
if (event.data !== void 0) {
this.push({
type: event.event || "message",
options: {
data: event.data,
lastEventId: this.state.lastEventId,
origin: this.state.origin
}
});
}
}
clearEvent() {
this.event = {
data: void 0,
event: void 0,
id: void 0,
retry: void 0
};
}
};
module2.exports = {
EventSourceStream
};
}
});
// node_modules/undici/lib/web/eventsource/eventsource.js
var require_eventsource = __commonJS({
"node_modules/undici/lib/web/eventsource/eventsource.js"(exports2, module2) {
"use strict";
var { pipeline } = require("node:stream");
var { fetching } = require_fetch();
var { makeRequest } = require_request2();
var { webidl } = require_webidl();
var { EventSourceStream } = require_eventsource_stream();
var { parseMIMEType } = require_data_url();
var { createFastMessageEvent } = require_events();
var { isNetworkError } = require_response();
var { delay } = require_util9();
var { kEnumerableProperty } = require_util2();
var { environmentSettingsObject } = require_util3();
var experimentalWarned = false;
var defaultReconnectionTime = 3e3;
var CONNECTING = 0;
var OPEN = 1;
var CLOSED = 2;
var ANONYMOUS = "anonymous";
var USE_CREDENTIALS = "use-credentials";
var EventSource = class _EventSource extends EventTarget {
#events = {
open: null,
error: null,
message: null
};
#url = null;
#withCredentials = false;
#readyState = CONNECTING;
#request = null;
#controller = null;
#dispatcher;
/**
* @type {import('./eventsource-stream').eventSourceSettings}
*/
#state;
/**
* Creates a new EventSource object.
* @param {string} url
* @param {EventSourceInit} [eventSourceInitDict]
* @see https://html.spec.whatwg.org/multipage/server-sent-events.html#the-eventsource-interface
*/
constructor(url2, eventSourceInitDict = {}) {
super();
webidl.util.markAsUncloneable(this);
const prefix = "EventSource constructor";
webidl.argumentLengthCheck(arguments, 1, prefix);
if (!experimentalWarned) {
experimentalWarned = true;
process.emitWarning("EventSource is experimental, expect them to change at any time.", {
code: "UNDICI-ES"
});
}
url2 = webidl.converters.USVString(url2, prefix, "url");
eventSourceInitDict = webidl.converters.EventSourceInitDict(eventSourceInitDict, prefix, "eventSourceInitDict");
this.#dispatcher = eventSourceInitDict.dispatcher;
this.#state = {
lastEventId: "",
reconnectionTime: defaultReconnectionTime
};
const settings = environmentSettingsObject;
let urlRecord;
try {
urlRecord = new URL(url2, settings.settingsObject.baseUrl);
this.#state.origin = urlRecord.origin;
} catch (e) {
throw new DOMException(e, "SyntaxError");
}
this.#url = urlRecord.href;
let corsAttributeState = ANONYMOUS;
if (eventSourceInitDict.withCredentials) {
corsAttributeState = USE_CREDENTIALS;
this.#withCredentials = true;
}
const initRequest = {
redirect: "follow",
keepalive: true,
// @see https://html.spec.whatwg.org/multipage/urls-and-fetching.html#cors-settings-attributes
mode: "cors",
credentials: corsAttributeState === "anonymous" ? "same-origin" : "omit",
referrer: "no-referrer"
};
initRequest.client = environmentSettingsObject.settingsObject;
initRequest.headersList = [["accept", { name: "accept", value: "text/event-stream" }]];
initRequest.cache = "no-store";
initRequest.initiator = "other";
initRequest.urlList = [new URL(this.#url)];
this.#request = makeRequest(initRequest);
this.#connect();
}
/**
* Returns the state of this EventSource object's connection. It can have the
* values described below.
* @returns {0|1|2}
* @readonly
*/
get readyState() {
return this.#readyState;
}
/**
* Returns the URL providing the event stream.
* @readonly
* @returns {string}
*/
get url() {
return this.#url;
}
/**
* Returns a boolean indicating whether the EventSource object was
* instantiated with CORS credentials set (true), or not (false, the default).
*/
get withCredentials() {
return this.#withCredentials;
}
#connect() {
if (this.#readyState === CLOSED) return;
this.#readyState = CONNECTING;
const fetchParams = {
request: this.#request,
dispatcher: this.#dispatcher
};
const processEventSourceEndOfBody = (response) => {
if (isNetworkError(response)) {
this.dispatchEvent(new Event("error"));
this.close();
}
this.#reconnect();
};
fetchParams.processResponseEndOfBody = processEventSourceEndOfBody;
fetchParams.processResponse = (response) => {
if (isNetworkError(response)) {
if (response.aborted) {
this.close();
this.dispatchEvent(new Event("error"));
return;
} else {
this.#reconnect();
return;
}
}
const contentType = response.headersList.get("content-type", true);
const mimeType = contentType !== null ? parseMIMEType(contentType) : "failure";
const contentTypeValid = mimeType !== "failure" && mimeType.essence === "text/event-stream";
if (response.status !== 200 || contentTypeValid === false) {
this.close();
this.dispatchEvent(new Event("error"));
return;
}
this.#readyState = OPEN;
this.dispatchEvent(new Event("open"));
this.#state.origin = response.urlList[response.urlList.length - 1].origin;
const eventSourceStream = new EventSourceStream({
eventSourceSettings: this.#state,
push: (event) => {
this.dispatchEvent(createFastMessageEvent(
event.type,
event.options
));
}
});
pipeline(
response.body.stream,
eventSourceStream,
(error) => {
if (error?.aborted === false) {
this.close();
this.dispatchEvent(new Event("error"));
}
}
);
};
this.#controller = fetching(fetchParams);
}
/**
* @see https://html.spec.whatwg.org/multipage/server-sent-events.html#sse-processing-model
* @returns {Promise<void>}
*/
async #reconnect() {
if (this.#readyState === CLOSED) return;
this.#readyState = CONNECTING;
this.dispatchEvent(new Event("error"));
await delay(this.#state.reconnectionTime);
if (this.#readyState !== CONNECTING) return;
if (this.#state.lastEventId.length) {
this.#request.headersList.set("last-event-id", this.#state.lastEventId, true);
}
this.#connect();
}
/**
* Closes the connection, if any, and sets the readyState attribute to
* CLOSED.
*/
close() {
webidl.brandCheck(this, _EventSource);
if (this.#readyState === CLOSED) return;
this.#readyState = CLOSED;
this.#controller.abort();
this.#request = null;
}
get onopen() {
return this.#events.open;
}
set onopen(fn) {
if (this.#events.open) {
this.removeEventListener("open", this.#events.open);
}
if (typeof fn === "function") {
this.#events.open = fn;
this.addEventListener("open", fn);
} else {
this.#events.open = null;
}
}
get onmessage() {
return this.#events.message;
}
set onmessage(fn) {
if (this.#events.message) {
this.removeEventListener("message", this.#events.message);
}
if (typeof fn === "function") {
this.#events.message = fn;
this.addEventListener("message", fn);
} else {
this.#events.message = null;
}
}
get onerror() {
return this.#events.error;
}
set onerror(fn) {
if (this.#events.error) {
this.removeEventListener("error", this.#events.error);
}
if (typeof fn === "function") {
this.#events.error = fn;
this.addEventListener("error", fn);
} else {
this.#events.error = null;
}
}
};
var constantsPropertyDescriptors = {
CONNECTING: {
__proto__: null,
configurable: false,
enumerable: true,
value: CONNECTING,
writable: false
},
OPEN: {
__proto__: null,
configurable: false,
enumerable: true,
value: OPEN,
writable: false
},
CLOSED: {
__proto__: null,
configurable: false,
enumerable: true,
value: CLOSED,
writable: false
}
};
Object.defineProperties(EventSource, constantsPropertyDescriptors);
Object.defineProperties(EventSource.prototype, constantsPropertyDescriptors);
Object.defineProperties(EventSource.prototype, {
close: kEnumerableProperty,
onerror: kEnumerableProperty,
onmessage: kEnumerableProperty,
onopen: kEnumerableProperty,
readyState: kEnumerableProperty,
url: kEnumerableProperty,
withCredentials: kEnumerableProperty
});
webidl.converters.EventSourceInitDict = webidl.dictionaryConverter([
{
key: "withCredentials",
converter: webidl.converters.boolean,
defaultValue: () => false
},
{
key: "dispatcher",
// undici only
converter: webidl.converters.any
}
]);
module2.exports = {
EventSource,
defaultReconnectionTime
};
}
});
// node_modules/undici/index.js
var require_undici = __commonJS({
"node_modules/undici/index.js"(exports2, module2) {
"use strict";
var Client = require_client();
var Dispatcher = require_dispatcher();
var Pool = require_pool();
var BalancedPool = require_balanced_pool();
var Agent = require_agent();
var ProxyAgent = require_proxy_agent();
var EnvHttpProxyAgent = require_env_http_proxy_agent();
var RetryAgent = require_retry_agent();
var errors = require_errors();
var util5 = require_util2();
var { InvalidArgumentError } = errors;
var api = require_api();
var buildConnector = require_connect();
var MockClient = require_mock_client();
var MockAgent = require_mock_agent();
var MockPool = require_mock_pool();
var mockErrors = require_mock_errors();
var RetryHandler = require_retry_handler();
var { getGlobalDispatcher, setGlobalDispatcher } = require_global2();
var DecoratorHandler = require_decorator_handler();
var RedirectHandler = require_redirect_handler();
var createRedirectInterceptor = require_redirect_interceptor();
Object.assign(Dispatcher.prototype, api);
module2.exports.Dispatcher = Dispatcher;
module2.exports.Client = Client;
module2.exports.Pool = Pool;
module2.exports.BalancedPool = BalancedPool;
module2.exports.Agent = Agent;
module2.exports.ProxyAgent = ProxyAgent;
module2.exports.EnvHttpProxyAgent = EnvHttpProxyAgent;
module2.exports.RetryAgent = RetryAgent;
module2.exports.RetryHandler = RetryHandler;
module2.exports.DecoratorHandler = DecoratorHandler;
module2.exports.RedirectHandler = RedirectHandler;
module2.exports.createRedirectInterceptor = createRedirectInterceptor;
module2.exports.interceptors = {
redirect: require_redirect(),
retry: require_retry(),
dump: require_dump(),
dns: require_dns()
};
module2.exports.buildConnector = buildConnector;
module2.exports.errors = errors;
module2.exports.util = {
parseHeaders: util5.parseHeaders,
headerNameToString: util5.headerNameToString
};
function makeDispatcher(fn) {
return (url2, opts, handler) => {
if (typeof opts === "function") {
handler = opts;
opts = null;
}
if (!url2 || typeof url2 !== "string" && typeof url2 !== "object" && !(url2 instanceof URL)) {
throw new InvalidArgumentError("invalid url");
}
if (opts != null && typeof opts !== "object") {
throw new InvalidArgumentError("invalid opts");
}
if (opts && opts.path != null) {
if (typeof opts.path !== "string") {
throw new InvalidArgumentError("invalid opts.path");
}
let path = opts.path;
if (!opts.path.startsWith("/")) {
path = `/${path}`;
}
url2 = new URL(util5.parseOrigin(url2).origin + path);
} else {
if (!opts) {
opts = typeof url2 === "object" ? url2 : {};
}
url2 = util5.parseURL(url2);
}
const { agent, dispatcher = getGlobalDispatcher() } = opts;
if (agent) {
throw new InvalidArgumentError("unsupported opts.agent. Did you mean opts.client?");
}
return fn.call(dispatcher, {
...opts,
origin: url2.origin,
path: url2.search ? `${url2.pathname}${url2.search}` : url2.pathname,
method: opts.method || (opts.body ? "PUT" : "GET")
}, handler);
};
}
module2.exports.setGlobalDispatcher = setGlobalDispatcher;
module2.exports.getGlobalDispatcher = getGlobalDispatcher;
var fetchImpl = require_fetch().fetch;
module2.exports.fetch = async function fetch3(init, options = void 0) {
try {
return await fetchImpl(init, options);
} catch (err2) {
if (err2 && typeof err2 === "object") {
Error.captureStackTrace(err2);
}
throw err2;
}
};
module2.exports.Headers = require_headers().Headers;
module2.exports.Response = require_response().Response;
module2.exports.Request = require_request2().Request;
module2.exports.FormData = require_formdata().FormData;
module2.exports.File = globalThis.File ?? require("node:buffer").File;
module2.exports.FileReader = require_filereader().FileReader;
var { setGlobalOrigin, getGlobalOrigin } = require_global();
module2.exports.setGlobalOrigin = setGlobalOrigin;
module2.exports.getGlobalOrigin = getGlobalOrigin;
var { CacheStorage } = require_cachestorage();
var { kConstruct } = require_symbols4();
module2.exports.caches = new CacheStorage(kConstruct);
var { deleteCookie, getCookies, getSetCookies, setCookie } = require_cookies();
module2.exports.deleteCookie = deleteCookie;
module2.exports.getCookies = getCookies;
module2.exports.getSetCookies = getSetCookies;
module2.exports.setCookie = setCookie;
var { parseMIMEType, serializeAMimeType } = require_data_url();
module2.exports.parseMIMEType = parseMIMEType;
module2.exports.serializeAMimeType = serializeAMimeType;
var { CloseEvent, ErrorEvent, MessageEvent } = require_events();
module2.exports.WebSocket = require_websocket().WebSocket;
module2.exports.CloseEvent = CloseEvent;
module2.exports.ErrorEvent = ErrorEvent;
module2.exports.MessageEvent = MessageEvent;
module2.exports.request = makeDispatcher(api.request);
module2.exports.stream = makeDispatcher(api.stream);
module2.exports.pipeline = makeDispatcher(api.pipeline);
module2.exports.connect = makeDispatcher(api.connect);
module2.exports.upgrade = makeDispatcher(api.upgrade);
module2.exports.MockClient = MockClient;
module2.exports.MockPool = MockPool;
module2.exports.MockAgent = MockAgent;
module2.exports.mockErrors = mockErrors;
var { EventSource } = require_eventsource();
module2.exports.EventSource = EventSource;
}
});
// node_modules/whatwg-mimetype/lib/utils.js
var require_utils2 = __commonJS({
"node_modules/whatwg-mimetype/lib/utils.js"(exports2) {
"use strict";
exports2.removeLeadingAndTrailingHTTPWhitespace = (string) => {
return string.replace(/^[ \t\n\r]+/u, "").replace(/[ \t\n\r]+$/u, "");
};
exports2.removeTrailingHTTPWhitespace = (string) => {
return string.replace(/[ \t\n\r]+$/u, "");
};
exports2.isHTTPWhitespaceChar = (char) => {
return char === " " || char === " " || char === "\n" || char === "\r";
};
exports2.solelyContainsHTTPTokenCodePoints = (string) => {
return /^[-!#$%&'*+.^_`|~A-Za-z0-9]*$/u.test(string);
};
exports2.soleyContainsHTTPQuotedStringTokenCodePoints = (string) => {
return /^[\t\u0020-\u007E\u0080-\u00FF]*$/u.test(string);
};
exports2.asciiLowercase = (string) => {
return string.replace(/[A-Z]/ug, (l) => l.toLowerCase());
};
exports2.collectAnHTTPQuotedString = (input, position) => {
let value = "";
position++;
while (true) {
while (position < input.length && input[position] !== '"' && input[position] !== "\\") {
value += input[position];
++position;
}
if (position >= input.length) {
break;
}
const quoteOrBackslash = input[position];
++position;
if (quoteOrBackslash === "\\") {
if (position >= input.length) {
value += "\\";
break;
}
value += input[position];
++position;
} else {
break;
}
}
return [value, position];
};
}
});
// node_modules/whatwg-mimetype/lib/mime-type-parameters.js
var require_mime_type_parameters = __commonJS({
"node_modules/whatwg-mimetype/lib/mime-type-parameters.js"(exports2, module2) {
"use strict";
var {
asciiLowercase,
solelyContainsHTTPTokenCodePoints,
soleyContainsHTTPQuotedStringTokenCodePoints
} = require_utils2();
module2.exports = class MIMETypeParameters {
constructor(map2) {
this._map = map2;
}
get size() {
return this._map.size;
}
get(name) {
name = asciiLowercase(String(name));
return this._map.get(name);
}
has(name) {
name = asciiLowercase(String(name));
return this._map.has(name);
}
set(name, value) {
name = asciiLowercase(String(name));
value = String(value);
if (!solelyContainsHTTPTokenCodePoints(name)) {
throw new Error(`Invalid MIME type parameter name "${name}": only HTTP token code points are valid.`);
}
if (!soleyContainsHTTPQuotedStringTokenCodePoints(value)) {
throw new Error(`Invalid MIME type parameter value "${value}": only HTTP quoted-string token code points are valid.`);
}
return this._map.set(name, value);
}
clear() {
this._map.clear();
}
delete(name) {
name = asciiLowercase(String(name));
return this._map.delete(name);
}
forEach(callbackFn, thisArg) {
this._map.forEach(callbackFn, thisArg);
}
keys() {
return this._map.keys();
}
values() {
return this._map.values();
}
entries() {
return this._map.entries();
}
[Symbol.iterator]() {
return this._map[Symbol.iterator]();
}
};
}
});
// node_modules/whatwg-mimetype/lib/parser.js
var require_parser = __commonJS({
"node_modules/whatwg-mimetype/lib/parser.js"(exports2, module2) {
"use strict";
var {
removeLeadingAndTrailingHTTPWhitespace,
removeTrailingHTTPWhitespace,
isHTTPWhitespaceChar,
solelyContainsHTTPTokenCodePoints,
soleyContainsHTTPQuotedStringTokenCodePoints,
asciiLowercase,
collectAnHTTPQuotedString
} = require_utils2();
module2.exports = (input) => {
input = removeLeadingAndTrailingHTTPWhitespace(input);
let position = 0;
let type = "";
while (position < input.length && input[position] !== "/") {
type += input[position];
++position;
}
if (type.length === 0 || !solelyContainsHTTPTokenCodePoints(type)) {
return null;
}
if (position >= input.length) {
return null;
}
++position;
let subtype = "";
while (position < input.length && input[position] !== ";") {
subtype += input[position];
++position;
}
subtype = removeTrailingHTTPWhitespace(subtype);
if (subtype.length === 0 || !solelyContainsHTTPTokenCodePoints(subtype)) {
return null;
}
const mimeType = {
type: asciiLowercase(type),
subtype: asciiLowercase(subtype),
parameters: /* @__PURE__ */ new Map()
};
while (position < input.length) {
++position;
while (isHTTPWhitespaceChar(input[position])) {
++position;
}
let parameterName = "";
while (position < input.length && input[position] !== ";" && input[position] !== "=") {
parameterName += input[position];
++position;
}
parameterName = asciiLowercase(parameterName);
if (position < input.length) {
if (input[position] === ";") {
continue;
}
++position;
}
let parameterValue = null;
if (input[position] === '"') {
[parameterValue, position] = collectAnHTTPQuotedString(input, position);
while (position < input.length && input[position] !== ";") {
++position;
}
} else {
parameterValue = "";
while (position < input.length && input[position] !== ";") {
parameterValue += input[position];
++position;
}
parameterValue = removeTrailingHTTPWhitespace(parameterValue);
if (parameterValue === "") {
continue;
}
}
if (parameterName.length > 0 && solelyContainsHTTPTokenCodePoints(parameterName) && soleyContainsHTTPQuotedStringTokenCodePoints(parameterValue) && !mimeType.parameters.has(parameterName)) {
mimeType.parameters.set(parameterName, parameterValue);
}
}
return mimeType;
};
}
});
// node_modules/whatwg-mimetype/lib/serializer.js
var require_serializer = __commonJS({
"node_modules/whatwg-mimetype/lib/serializer.js"(exports2, module2) {
"use strict";
var { solelyContainsHTTPTokenCodePoints } = require_utils2();
module2.exports = (mimeType) => {
let serialization = `${mimeType.type}/${mimeType.subtype}`;
if (mimeType.parameters.size === 0) {
return serialization;
}
for (let [name, value] of mimeType.parameters) {
serialization += ";";
serialization += name;
serialization += "=";
if (!solelyContainsHTTPTokenCodePoints(value) || value.length === 0) {
value = value.replace(/(["\\])/ug, "\\$1");
value = `"${value}"`;
}
serialization += value;
}
return serialization;
};
}
});
// node_modules/whatwg-mimetype/lib/mime-type.js
var require_mime_type = __commonJS({
"node_modules/whatwg-mimetype/lib/mime-type.js"(exports2, module2) {
"use strict";
var MIMETypeParameters = require_mime_type_parameters();
var parse8 = require_parser();
var serialize3 = require_serializer();
var {
asciiLowercase,
solelyContainsHTTPTokenCodePoints
} = require_utils2();
module2.exports = class MIMEType {
constructor(string) {
string = String(string);
const result = parse8(string);
if (result === null) {
throw new Error(`Could not parse MIME type string "${string}"`);
}
this._type = result.type;
this._subtype = result.subtype;
this._parameters = new MIMETypeParameters(result.parameters);
}
static parse(string) {
try {
return new this(string);
} catch (e) {
return null;
}
}
get essence() {
return `${this.type}/${this.subtype}`;
}
get type() {
return this._type;
}
set type(value) {
value = asciiLowercase(String(value));
if (value.length === 0) {
throw new Error("Invalid type: must be a non-empty string");
}
if (!solelyContainsHTTPTokenCodePoints(value)) {
throw new Error(`Invalid type ${value}: must contain only HTTP token code points`);
}
this._type = value;
}
get subtype() {
return this._subtype;
}
set subtype(value) {
value = asciiLowercase(String(value));
if (value.length === 0) {
throw new Error("Invalid subtype: must be a non-empty string");
}
if (!solelyContainsHTTPTokenCodePoints(value)) {
throw new Error(`Invalid subtype ${value}: must contain only HTTP token code points`);
}
this._subtype = value;
}
get parameters() {
return this._parameters;
}
toString() {
return serialize3(this);
}
isJavaScript({ prohibitParameters = false } = {}) {
switch (this._type) {
case "text": {
switch (this._subtype) {
case "ecmascript":
case "javascript":
case "javascript1.0":
case "javascript1.1":
case "javascript1.2":
case "javascript1.3":
case "javascript1.4":
case "javascript1.5":
case "jscript":
case "livescript":
case "x-ecmascript":
case "x-javascript": {
return !prohibitParameters || this._parameters.size === 0;
}
default: {
return false;
}
}
}
case "application": {
switch (this._subtype) {
case "ecmascript":
case "javascript":
case "x-ecmascript":
case "x-javascript": {
return !prohibitParameters || this._parameters.size === 0;
}
default: {
return false;
}
}
}
default: {
return false;
}
}
}
isXML() {
return this._subtype === "xml" && (this._type === "text" || this._type === "application") || this._subtype.endsWith("+xml");
}
isHTML() {
return this._subtype === "html" && this._type === "text";
}
};
}
});
// node_modules/cheerio/dist/esm/index.js
var undici, import_whatwg_mimetype;
var init_esm11 = __esm({
"node_modules/cheerio/dist/esm/index.js"() {
init_load_parse();
init_static();
init_dist2();
init_esm9();
init_dist3();
init_esm10();
undici = __toESM(require_undici(), 1);
import_whatwg_mimetype = __toESM(require_mime_type(), 1);
init_options();
init_load_parse();
}
});
// src/utils/search.js
function getRandomUserAgent() {
return USER_AGENTS[Math.floor(Math.random() * USER_AGENTS.length)];
}
function getCacheKey(query, page) {
return `${query}-${page}`;
}
function clearOldCache() {
const now = Date.now();
for (const [key, value] of resultsCache.entries()) {
if (now - value.timestamp > CACHE_DURATION) {
resultsCache.delete(key);
}
}
}
function extractDirectUrl(duckduckgoUrl) {
try {
if (duckduckgoUrl.startsWith("//")) {
duckduckgoUrl = "https:" + duckduckgoUrl;
} else if (duckduckgoUrl.startsWith("/")) {
duckduckgoUrl = "https://duckduckgo.com" + duckduckgoUrl;
}
const url2 = new URL(duckduckgoUrl);
if (url2.hostname === "duckduckgo.com" && url2.pathname === "/l/") {
const uddg = url2.searchParams.get("uddg");
if (uddg) {
return decodeURIComponent(uddg);
}
}
if (url2.hostname === "duckduckgo.com" && url2.pathname === "/y.js") {
const u3 = url2.searchParams.get("u3");
if (u3) {
try {
const decodedU3 = decodeURIComponent(u3);
const u3Url = new URL(decodedU3);
const clickUrl = u3Url.searchParams.get("ld");
if (clickUrl) {
return decodeURIComponent(clickUrl);
}
return decodedU3;
} catch {
return duckduckgoUrl;
}
}
}
return duckduckgoUrl;
} catch {
const urlMatch = duckduckgoUrl.match(/https?:\/\/[^\s<>"]+/);
if (urlMatch) {
return urlMatch[0];
}
return duckduckgoUrl;
}
}
function getFaviconUrl(url2) {
try {
const urlObj = new URL(url2);
return `https://www.google.com/s2/favicons?domain=${urlObj.hostname}&sz=32`;
} catch {
return "";
}
}
async function searchDuckDuckGo(query, page = 1, numResults = 10) {
try {
clearOldCache();
const startIndex = (page - 1) * RESULTS_PER_PAGE;
const cacheKey = getCacheKey(query, page);
const cachedResults = resultsCache.get(cacheKey);
if (cachedResults && Date.now() - cachedResults.timestamp < CACHE_DURATION) {
return cachedResults.results.slice(0, numResults);
}
const userAgent = getRandomUserAgent();
const response = await axios_default.get(
`https://duckduckgo.com/html/?q=${encodeURIComponent(query)}&s=${startIndex}`,
{
headers: {
"User-Agent": userAgent
},
httpsAgent
}
);
if (response.status !== 200) {
throw new Error("Failed to fetch search results");
}
const html3 = response.data;
const $2 = load(html3);
const results = [];
$2(".result").each((i, result) => {
const $result = $2(result);
const titleEl = $result.find(".result__title a");
const linkEl = $result.find(".result__url");
const snippetEl = $result.find(".result__snippet");
const title = titleEl.text()?.trim();
const rawLink = titleEl.attr("href");
const description = snippetEl.text()?.trim();
const displayUrl = linkEl.text()?.trim();
const directLink = extractDirectUrl(rawLink || "");
const favicon = getFaviconUrl(directLink);
if (title && directLink) {
results.push({
title,
url: directLink,
snippet: description || "",
favicon,
displayUrl: displayUrl || ""
});
}
});
const paginatedResults = results.slice(0, numResults);
resultsCache.set(cacheKey, {
results: paginatedResults,
timestamp: Date.now()
});
if (resultsCache.size > MAX_CACHE_PAGES) {
const oldestKey = Array.from(resultsCache.keys())[0];
resultsCache.delete(oldestKey);
}
return paginatedResults;
} catch (error) {
console.error("Error searching DuckDuckGo:", error.message);
throw error;
}
}
async function fetchUrlContent(url2, options = {}) {
try {
const {
extractMainContent = true,
includeLinks = true,
includeImages = true,
excludeTags = ["script", "style", "noscript", "iframe", "svg", "nav", "footer", "header", "aside"]
} = options;
const userAgent = getRandomUserAgent();
const response = await axios_default.get(url2, {
headers: {
"User-Agent": userAgent
},
timeout: 1e4,
// 10 second timeout
httpsAgent
});
if (response.status !== 200) {
throw new Error(`Failed to fetch URL: ${url2}`);
}
const contentType = response.headers["content-type"] || "";
if (contentType.includes("text/html")) {
const $2 = load(response.data);
excludeTags.forEach((tag) => {
$2(tag).remove();
});
const unwantedSelectors = [
'[id*="ad"]',
'[class*="ad"]',
'[id*="banner"]',
'[class*="banner"]',
'[id*="popup"]',
'[class*="popup"]',
'[class*="cookie"]',
'[id*="cookie"]',
'[class*="newsletter"]',
'[id*="newsletter"]',
'[class*="social"]',
'[id*="social"]',
'[class*="share"]',
'[id*="share"]'
];
unwantedSelectors.forEach((selector) => {
try {
$2(selector).remove();
} catch (e) {
}
});
if (!includeLinks) {
$2("a").each((i, link) => {
$2(link).replaceWith($2(link).text());
});
}
if (!includeImages) {
$2("img").remove();
} else {
$2("img").each((i, img) => {
const alt = $2(img).attr("alt");
if (alt) {
$2(img).replaceWith(`[Image: ${alt}]`);
} else {
$2(img).remove();
}
});
}
if (extractMainContent) {
const contentSelectors = [
"article",
"main",
'[role="main"]',
".post-content",
".article-content",
".content",
"#content",
".post",
".article",
".entry-content",
".page-content",
".post-body",
".post-text",
".story-body"
];
for (const selector of contentSelectors) {
const mainContent = $2(selector).first();
if (mainContent.length > 0) {
return cleanText(mainContent.text());
}
}
}
return cleanText($2("body").text());
}
return response.data.toString();
} catch (error) {
console.error("Error fetching URL content:", error.message);
throw error;
}
}
function cleanText(text3) {
return text3.replace(/\s+/g, " ").replace(/\n\s*\n/g, "\n\n").replace(/^\s+|\s+$/g, "").trim();
}
async function extractUrlMetadata(url2) {
try {
const userAgent = getRandomUserAgent();
const response = await axios_default.get(url2, {
headers: {
"User-Agent": userAgent
},
httpsAgent
});
if (response.status !== 200) {
throw new Error(`Failed to fetch URL: ${url2}`);
}
const $2 = load(response.data);
const title = $2("title").text() || "";
const description = $2('meta[name="description"]').attr("content") || $2('meta[property="og:description"]').attr("content") || "";
const ogImage = $2('meta[property="og:image"]').attr("content") || "";
const favicon = $2('link[rel="icon"]').attr("href") || $2('link[rel="shortcut icon"]').attr("href") || "";
const resolvedFavicon = favicon ? new URL(favicon, url2).href : getFaviconUrl(url2);
const resolvedOgImage = ogImage ? new URL(ogImage, url2).href : "";
return {
title,
description,
ogImage: resolvedOgImage,
favicon: resolvedFavicon,
url: url2
};
} catch (error) {
console.error("Error extracting URL metadata:", error.message);
throw error;
}
}
var import_https2, RESULTS_PER_PAGE, MAX_CACHE_PAGES, USER_AGENTS, resultsCache, CACHE_DURATION, httpsAgent;
var init_search = __esm({
"src/utils/search.js"() {
init_axios2();
init_esm11();
import_https2 = __toESM(require("https"), 1);
RESULTS_PER_PAGE = 10;
MAX_CACHE_PAGES = 5;
USER_AGENTS = [
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36",
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) Edge/120.0.0.0",
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.2.1 Safari/605.1.15",
"Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:122.0) Gecko/20100101 Firefox/122.0",
"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36"
];
resultsCache = /* @__PURE__ */ new Map();
CACHE_DURATION = 5 * 60 * 1e3;
httpsAgent = new import_https2.default.Agent({
rejectUnauthorized: true,
// Keep security enabled
keepAlive: true,
timeout: 1e4,
// Provide fallback for certificate issues while maintaining security
secureProtocol: "TLSv1_2_method"
});
}
});
// src/tools/searchTool.js
async function searchToolHandler(params) {
const { query, page = 1, numResults = 10 } = params;
console.log(`Searching for: ${query} (page ${page}, ${numResults} results)`);
const results = await searchDuckDuckGo(query, page, numResults);
console.log(`Found ${results.length} results`);
const formattedResults = results.map(
(result, index2) => `${index2 + 1}. [${result.title}](${result.url})
${result.snippet}`
).join("\n\n");
return {
content: [
{
type: "text",
text: formattedResults || "No results found."
}
]
};
}
var searchToolDefinition;
var init_searchTool = __esm({
"src/tools/searchTool.js"() {
init_search();
searchToolDefinition = {
name: "web-search",
title: "Web Search",
description: "Search the web using DuckDuckGo and return comprehensive results with titles, URLs, and snippets",
inputSchema: {
type: "object",
properties: {
query: {
type: "string",
description: "The search query to find relevant web pages"
},
page: {
type: "integer",
description: "Page number for pagination (default: 1)",
default: 1,
minimum: 1
},
numResults: {
type: "integer",
description: "Number of results to return per page (default: 10, max: 20)",
default: 10,
minimum: 1,
maximum: 20
}
},
required: ["query"]
}
};
}
});
// src/tools/fetchUrlTool.js
async function fetchUrlToolHandler(params) {
const {
url: url2,
maxLength = 1e4,
extractMainContent = true,
includeLinks = true,
includeImages = true,
excludeTags = ["script", "style", "noscript", "iframe", "svg", "nav", "footer", "header", "aside"]
} = params;
console.log(`Fetching content from URL: ${url2} (maxLength: ${maxLength})`);
try {
const content = await fetchUrlContent(url2, {
extractMainContent,
includeLinks,
includeImages,
excludeTags
});
const truncatedContent = content.length > maxLength ? content.substring(0, maxLength) + "... [Content truncated due to length]" : content;
const metadata = `
---
Extraction settings:
- URL: ${url2}
- Main content extraction: ${extractMainContent ? "Enabled" : "Disabled"}
- Links included: ${includeLinks ? "Yes" : "No"}
- Images included: ${includeImages ? "Yes (as alt text)" : "No"}
- Content length: ${content.length} characters${content.length > maxLength ? ` (truncated to ${maxLength})` : ""}
---
`;
return {
content: [
{
type: "text",
text: truncatedContent + metadata
}
]
};
} catch (error) {
console.error(`Error fetching URL ${url2}:`, error);
return {
isError: true,
content: [
{
type: "text",
text: `Error fetching URL: ${error.message}`
}
]
};
}
}
var fetchUrlToolDefinition;
var init_fetchUrlTool = __esm({
"src/tools/fetchUrlTool.js"() {
init_search();
fetchUrlToolDefinition = {
name: "fetch-url",
title: "Fetch URL Content",
description: "Fetch and extract the main content from any URL, with customizable extraction options for text, links, and images",
inputSchema: {
type: "object",
properties: {
url: {
type: "string",
description: "The URL to fetch content from (must be a valid HTTP/HTTPS URL)"
},
maxLength: {
type: "integer",
description: "Maximum length of content to return in characters (default: 10000)",
default: 1e4,
minimum: 1e3,
maximum: 5e4
},
extractMainContent: {
type: "boolean",
description: "Whether to attempt to extract main content only, filtering out navigation and ads (default: true)",
default: true
},
includeLinks: {
type: "boolean",
description: "Whether to include link text in the extracted content (default: true)",
default: true
},
includeImages: {
type: "boolean",
description: "Whether to include image alt text in the extracted content (default: true)",
default: true
},
excludeTags: {
type: "array",
description: "HTML tags to exclude from extraction (default: script, style, etc.)",
items: {
type: "string"
}
}
},
required: ["url"]
}
};
}
});
// src/tools/metadataTool.js
async function metadataToolHandler(params) {
const { url: url2 } = params;
console.log(`Extracting metadata from URL: ${url2}`);
const metadata = await extractUrlMetadata(url2);
const formattedMetadata = `
## URL Metadata for ${url2}
**Title:** ${metadata.title}
**Description:** ${metadata.description}
**Image:** ${metadata.ogImage || "None"}
**Favicon:** ${metadata.favicon || "None"}
`.trim();
return {
content: [
{
type: "text",
text: formattedMetadata
}
]
};
}
var metadataToolDefinition;
var init_metadataTool = __esm({
"src/tools/metadataTool.js"() {
init_search();
metadataToolDefinition = {
name: "url-metadata",
title: "URL Metadata Extractor",
description: "Extract metadata from a URL including title, description, Open Graph data, and favicon information",
inputSchema: {
type: "object",
properties: {
url: {
type: "string",
description: "The URL to extract metadata from (must be a valid HTTP/HTTPS URL)"
}
},
required: ["url"]
}
};
}
});
// node_modules/uuid/dist/esm-node/rng.js
function rng() {
if (poolPtr > rnds8Pool.length - 16) {
import_crypto2.default.randomFillSync(rnds8Pool);
poolPtr = 0;
}
return rnds8Pool.slice(poolPtr, poolPtr += 16);
}
var import_crypto2, rnds8Pool, poolPtr;
var init_rng = __esm({
"node_modules/uuid/dist/esm-node/rng.js"() {
import_crypto2 = __toESM(require("crypto"));
rnds8Pool = new Uint8Array(256);
poolPtr = rnds8Pool.length;
}
});
// node_modules/uuid/dist/esm-node/stringify.js
function unsafeStringify(arr, offset = 0) {
return byteToHex[arr[offset + 0]] + byteToHex[arr[offset + 1]] + byteToHex[arr[offset + 2]] + byteToHex[arr[offset + 3]] + "-" + byteToHex[arr[offset + 4]] + byteToHex[arr[offset + 5]] + "-" + byteToHex[arr[offset + 6]] + byteToHex[arr[offset + 7]] + "-" + byteToHex[arr[offset + 8]] + byteToHex[arr[offset + 9]] + "-" + byteToHex[arr[offset + 10]] + byteToHex[arr[offset + 11]] + byteToHex[arr[offset + 12]] + byteToHex[arr[offset + 13]] + byteToHex[arr[offset + 14]] + byteToHex[arr[offset + 15]];
}
var byteToHex;
var init_stringify2 = __esm({
"node_modules/uuid/dist/esm-node/stringify.js"() {
byteToHex = [];
for (let i = 0; i < 256; ++i) {
byteToHex.push((i + 256).toString(16).slice(1));
}
}
});
// node_modules/uuid/dist/esm-node/native.js
var import_crypto3, native_default;
var init_native = __esm({
"node_modules/uuid/dist/esm-node/native.js"() {
import_crypto3 = __toESM(require("crypto"));
native_default = {
randomUUID: import_crypto3.default.randomUUID
};
}
});
// node_modules/uuid/dist/esm-node/v4.js
function v4(options, buf, offset) {
if (native_default.randomUUID && !buf && !options) {
return native_default.randomUUID();
}
options = options || {};
const rnds = options.random || (options.rng || rng)();
rnds[6] = rnds[6] & 15 | 64;
rnds[8] = rnds[8] & 63 | 128;
if (buf) {
offset = offset || 0;
for (let i = 0; i < 16; ++i) {
buf[offset + i] = rnds[i];
}
return buf;
}
return unsafeStringify(rnds);
}
var v4_default;
var init_v4 = __esm({
"node_modules/uuid/dist/esm-node/v4.js"() {
init_native();
init_rng();
init_stringify2();
v4_default = v4;
}
});
// node_modules/uuid/dist/esm-node/index.js
var init_esm_node = __esm({
"node_modules/uuid/dist/esm-node/index.js"() {
init_v4();
}
});
// src/utils/search_felo.js
function getRandomUserAgent2() {
return USER_AGENTS2[Math.floor(Math.random() * USER_AGENTS2.length)];
}
function getCacheKey2(query) {
return `felo-${query}`;
}
function clearOldCache2() {
const now = Date.now();
for (const [key, value] of resultsCache2.entries()) {
if (now - value.timestamp > CACHE_DURATION2) {
resultsCache2.delete(key);
}
}
}
async function searchFelo(prompt, stream5 = false, raw = false) {
clearOldCache2();
if (!stream5) {
const cacheKey = getCacheKey2(prompt);
const cachedResults = resultsCache2.get(cacheKey);
if (cachedResults && Date.now() - cachedResults.timestamp < CACHE_DURATION2) {
return cachedResults.results;
}
}
const payload = {
query: prompt,
search_uuid: v4_default().replace(/-/g, ""),
// Remove dashes like in reference
lang: "",
agent_lang: "en",
search_options: {
langcode: "en-US",
search_image: true,
search_video: true
},
search_video: true,
model: "",
contexts_from: "google",
auto_routing: true
};
feloSession.defaults.headers["user-agent"] = getRandomUserAgent2();
async function* streamFunction() {
try {
const response = await feloSession.post("https://api.felo.ai/search/threads", payload, {
responseType: "stream"
});
if (response.status !== 200) {
throw new Error(`Failed to generate response - (${response.status}, ${response.statusText}) - ${response.data}`);
}
let streamingText = "";
let buffer = "";
for await (const chunk of response.data) {
buffer += chunk.toString();
const lines = buffer.split("\n");
buffer = lines.pop() || "";
for (const line of lines) {
if (line.startsWith("data:")) {
try {
const dataStr = line.substring(5).trim();
if (dataStr) {
const data2 = JSON.parse(dataStr);
if (data2.type === "answer" && "text" in data2.data) {
const newText = data2.data.text;
if (newText.length > streamingText.length) {
const delta = newText.substring(streamingText.length);
streamingText = newText;
if (raw) {
yield { text: delta };
} else {
yield new Response2(delta).toString();
}
}
}
}
} catch (error) {
console.debug("JSON parse error:", error.message);
}
}
}
}
if (streamingText) {
resultsCache2.set(getCacheKey2(prompt), {
results: streamingText,
timestamp: Date.now()
});
}
} catch (error) {
console.error("Error searching Felo:", error.message);
if (error.response) {
const status = error.response.status;
const statusText = error.response.statusText;
const data2 = error.response.data;
throw new Error(`Felo API error: ${status} ${statusText} - ${data2}`);
}
throw new Error(`Failed to search Felo: ${error.message}`);
}
}
if (stream5) {
return streamFunction();
}
let fullResponse = "";
try {
for await (const chunk of streamFunction()) {
if (raw) {
fullResponse += chunk.text;
} else {
fullResponse += chunk;
}
}
return fullResponse;
} catch (error) {
console.error("Error in non-streaming Felo search:", error.message);
throw error;
}
}
var import_https3, USER_AGENTS2, resultsCache2, CACHE_DURATION2, httpsAgent2, feloSession, Response2;
var init_search_felo = __esm({
"src/utils/search_felo.js"() {
init_axios2();
init_esm_node();
import_https3 = __toESM(require("https"), 1);
USER_AGENTS2 = [
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36",
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) Edge/120.0.0.0",
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.2.1 Safari/605.1.15",
"Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:122.0) Gecko/20100101 Firefox/122.0",
"Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36"
];
resultsCache2 = /* @__PURE__ */ new Map();
CACHE_DURATION2 = 5 * 60 * 1e3;
httpsAgent2 = new import_https3.default.Agent({
rejectUnauthorized: true,
// Keep security enabled
keepAlive: true,
timeout: 3e4,
// Provide fallback for certificate issues while maintaining security
secureProtocol: "TLSv1_2_method"
});
feloSession = axios_default.create({
timeout: 3e4,
httpsAgent: httpsAgent2,
headers: {
"accept": "*/*",
"accept-encoding": "gzip, deflate, br, zstd",
"accept-language": "en-US,en;q=0.9,en-IN;q=0.8",
"content-type": "application/json",
"dnt": "1",
"origin": "https://felo.ai",
"referer": "https://felo.ai/",
"sec-ch-ua": '"Not)A;Brand";v="99", "Microsoft Edge";v="127", "Chromium";v="127"',
"sec-ch-ua-mobile": "?0",
"sec-ch-ua-platform": '"Windows"',
"sec-fetch-dest": "empty",
"sec-fetch-mode": "cors",
"sec-fetch-site": "same-site",
"user-agent": getRandomUserAgent2()
}
});
Response2 = class {
/**
* Create a new Response
* @param {string} text - The text content of the response
*/
constructor(text3) {
this.text = text3;
}
/**
* String representation of the response
* @returns {string} The text content
*/
toString() {
return this.text;
}
};
}
});
// src/tools/feloTool.js
async function feloToolHandler(params) {
const { query, stream: stream5 = false } = params;
console.log(`Searching Felo AI for: "${query}" (stream: ${stream5})`);
try {
if (stream5) {
let fullResponse = "";
const chunks = [];
for await (const chunk of await searchFelo(query, true)) {
chunks.push(chunk);
fullResponse += chunk;
}
return {
content: [
{
type: "text",
text: fullResponse || "No results found."
}
]
};
} else {
const response = await searchFelo(query, false);
return {
content: [
{
type: "text",
text: response || "No results found."
}
]
};
}
} catch (error) {
console.error(`Error in Felo search: ${error.message}`);
return {
isError: true,
content: [
{
type: "text",
text: `Error searching Felo: ${error.message}`
}
]
};
}
}
var feloToolDefinition;
var init_feloTool = __esm({
"src/tools/feloTool.js"() {
init_search_felo();
feloToolDefinition = {
name: "felo-search",
title: "Felo AI Advanced Search",
description: "Advanced AI-powered web search for technical intelligence. Retrieves up-to-date information including software releases, security advisories, migration guides, benchmarks, developer documentation, and community insights. Supports both standard and streaming responses.",
inputSchema: {
type: "object",
properties: {
query: {
type: "string",
description: "A detailed search query or prompt describing the technical information needed. Supports natural language and keyword-based queries for precise results."
},
stream: {
type: "boolean",
description: "Enable streaming mode to receive incremental, real-time search results as they are discovered. Useful for monitoring live updates or large result sets. Default is false (returns full result at once).",
default: false
}
},
required: ["query"]
},
annotations: {
readOnlyHint: true,
openWorldHint: false
}
};
}
});
// src/index.ts
var src_exports = {};
__export(src_exports, {
default: () => createServer
});
function createServer({ config } = {}) {
console.log("Creating MCP server with latest SDK...");
const availableTools = [
searchToolDefinition,
fetchUrlToolDefinition,
metadataToolDefinition,
feloToolDefinition
];
console.log("Available tools:", availableTools.map((t) => t.name));
const server = new Server({
name: "ddg-search-mcp",
version: "1.1.2"
}, {
capabilities: {
tools: {
listChanged: true
}
}
});
server.setRequestHandler(ListToolsRequestSchema, async () => {
console.log("Tools list requested, returning:", availableTools.length, "tools");
return {
tools: availableTools
};
});
server.setRequestHandler(CallToolRequestSchema, async (request) => {
try {
const { name, arguments: args } = request.params;
console.log(`Tool call received: ${name} with args:`, args);
switch (name) {
case "web-search":
return await searchToolHandler(args);
case "fetch-url":
return await fetchUrlToolHandler(args);
case "url-metadata":
return await metadataToolHandler(args);
case "felo-search":
return await feloToolHandler(args);
default:
throw new Error(`Tool not found: ${name}`);
}
} catch (error) {
console.error(`Error handling ${request.params.name} tool call:`, error);
return {
isError: true,
content: [
{
type: "text",
text: `Error executing tool '${request.params.name}': ${error.message}`
}
]
};
}
});
console.log("MCP server created successfully");
return server;
}
var init_src = __esm({
"src/index.ts"() {
init_server();
init_types();
init_searchTool();
init_fetchUrlTool();
init_metadataTool();
init_feloTool();
}
});
// bootstrap:virtual:bootstrap
var __create2 = Object.create;
var __defProp2 = Object.defineProperty;
var __getOwnPropDesc2 = Object.getOwnPropertyDescriptor;
var __getOwnPropNames2 = Object.getOwnPropertyNames;
var __getProtoOf2 = Object.getPrototypeOf;
var __hasOwnProp2 = Object.prototype.hasOwnProperty;
var __commonJS2 = (cb, mod) => function __require() {
return mod || (0, cb[__getOwnPropNames2(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
};
var __copyProps2 = (to, from, except, desc) => {
if (from && typeof from === "object" || typeof from === "function") {
for (let key of __getOwnPropNames2(from))
if (!__hasOwnProp2.call(to, key) && key !== except)
__defProp2(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc2(from, key)) || desc.enumerable });
}
return to;
};
var __toESM2 = (mod, isNodeMode, target) => (target = mod != null ? __create2(__getProtoOf2(mod)) : {}, __copyProps2(
// If the importer is in node compatibility mode or this is not an ESM
// file that has been converted to a CommonJS file using a Babel-
// compatible transform (i.e. "__esModule" has not been set), then set
// "default" to the CommonJS "module.exports" for node compatibility.
isNodeMode || !mod || !mod.__esModule ? __defProp2(target, "default", { value: mod, enumerable: true }) : target,
mod
));
var require_bytes = __commonJS2({
"node_modules/bytes/index.js"(exports2, module2) {
"use strict";
module2.exports = bytes;
module2.exports.format = format;
module2.exports.parse = parse8;
var formatThousandsRegExp = /\B(?=(\d{3})+(?!\d))/g;
var formatDecimalsRegExp = /(?:\.0*|(\.[^0]+)0+)$/;
var map2 = {
b: 1,
kb: 1 << 10,
mb: 1 << 20,
gb: 1 << 30,
tb: Math.pow(1024, 4),
pb: Math.pow(1024, 5)
};
var parseRegExp = /^((-|\+)?(\d+(?:\.\d+)?)) *(kb|mb|gb|tb|pb)$/i;
function bytes(value, options) {
if (typeof value === "string") {
return parse8(value);
}
if (typeof value === "number") {
return format(value, options);
}
return null;
}
function format(value, options) {
if (!Number.isFinite(value)) {
return null;
}
var mag = Math.abs(value);
var thousandsSeparator = options && options.thousandsSeparator || "";
var unitSeparator = options && options.unitSeparator || "";
var decimalPlaces = options && options.decimalPlaces !== void 0 ? options.decimalPlaces : 2;
var fixedDecimals = Boolean(options && options.fixedDecimals);
var unit = options && options.unit || "";
if (!unit || !map2[unit.toLowerCase()]) {
if (mag >= map2.pb) {
unit = "PB";
} else if (mag >= map2.tb) {
unit = "TB";
} else if (mag >= map2.gb) {
unit = "GB";
} else if (mag >= map2.mb) {
unit = "MB";
} else if (mag >= map2.kb) {
unit = "KB";
} else {
unit = "B";
}
}
var val2 = value / map2[unit.toLowerCase()];
var str = val2.toFixed(decimalPlaces);
if (!fixedDecimals) {
str = str.replace(formatDecimalsRegExp, "$1");
}
if (thousandsSeparator) {
str = str.split(".").map(function(s, i) {
return i === 0 ? s.replace(formatThousandsRegExp, thousandsSeparator) : s;
}).join(".");
}
return str + unitSeparator + unit;
}
function parse8(val2) {
if (typeof val2 === "number" && !isNaN(val2)) {
return val2;
}
if (typeof val2 !== "string") {
return null;
}
var results = parseRegExp.exec(val2);
var floatValue;
var unit = "b";
if (!results) {
floatValue = parseInt(val2, 10);
unit = "b";
} else {
floatValue = parseFloat(results[1]);
unit = results[4].toLowerCase();
}
if (isNaN(floatValue)) {
return null;
}
return Math.floor(map2[unit] * floatValue);
}
}
});
var require_depd = __commonJS2({
"node_modules/depd/index.js"(exports2, module2) {
var relative = require("path").relative;
module2.exports = depd;
var basePath = process.cwd();
function containsNamespace(str, namespace) {
var vals = str.split(/[ ,]+/);
var ns = String(namespace).toLowerCase();
for (var i = 0; i < vals.length; i++) {
var val2 = vals[i];
if (val2 && (val2 === "*" || val2.toLowerCase() === ns)) {
return true;
}
}
return false;
}
function convertDataDescriptorToAccessor(obj, prop2, message) {
var descriptor = Object.getOwnPropertyDescriptor(obj, prop2);
var value = descriptor.value;
descriptor.get = function getter() {
return value;
};
if (descriptor.writable) {
descriptor.set = function setter(val2) {
return value = val2;
};
}
delete descriptor.value;
delete descriptor.writable;
Object.defineProperty(obj, prop2, descriptor);
return descriptor;
}
function createArgumentsString(arity) {
var str = "";
for (var i = 0; i < arity; i++) {
str += ", arg" + i;
}
return str.substr(2);
}
function createStackString(stack) {
var str = this.name + ": " + this.namespace;
if (this.message) {
str += " deprecated " + this.message;
}
for (var i = 0; i < stack.length; i++) {
str += "\n at " + stack[i].toString();
}
return str;
}
function depd(namespace) {
if (!namespace) {
throw new TypeError("argument namespace is required");
}
var stack = getStack();
var site = callSiteLocation(stack[1]);
var file = site[0];
function deprecate(message) {
log.call(deprecate, message);
}
deprecate._file = file;
deprecate._ignored = isignored(namespace);
deprecate._namespace = namespace;
deprecate._traced = istraced(namespace);
deprecate._warned = /* @__PURE__ */ Object.create(null);
deprecate.function = wrapfunction;
deprecate.property = wrapproperty;
return deprecate;
}
function eehaslisteners(emitter, type) {
var count = typeof emitter.listenerCount !== "function" ? emitter.listeners(type).length : emitter.listenerCount(type);
return count > 0;
}
function isignored(namespace) {
if (process.noDeprecation) {
return true;
}
var str = process.env.NO_DEPRECATION || "";
return containsNamespace(str, namespace);
}
function istraced(namespace) {
if (process.traceDeprecation) {
return true;
}
var str = process.env.TRACE_DEPRECATION || "";
return containsNamespace(str, namespace);
}
function log(message, site) {
var haslisteners = eehaslisteners(process, "deprecation");
if (!haslisteners && this._ignored) {
return;
}
var caller;
var callFile;
var callSite;
var depSite;
var i = 0;
var seen = false;
var stack = getStack();
var file = this._file;
if (site) {
depSite = site;
callSite = callSiteLocation(stack[1]);
callSite.name = depSite.name;
file = callSite[0];
} else {
i = 2;
depSite = callSiteLocation(stack[i]);
callSite = depSite;
}
for (; i < stack.length; i++) {
caller = callSiteLocation(stack[i]);
callFile = caller[0];
if (callFile === file) {
seen = true;
} else if (callFile === this._file) {
file = this._file;
} else if (seen) {
break;
}
}
var key = caller ? depSite.join(":") + "__" + caller.join(":") : void 0;
if (key !== void 0 && key in this._warned) {
return;
}
this._warned[key] = true;
var msg = message;
if (!msg) {
msg = callSite === depSite || !callSite.name ? defaultMessage(depSite) : defaultMessage(callSite);
}
if (haslisteners) {
var err2 = DeprecationError(this._namespace, msg, stack.slice(i));
process.emit("deprecation", err2);
return;
}
var format = process.stderr.isTTY ? formatColor : formatPlain;
var output = format.call(this, msg, caller, stack.slice(i));
process.stderr.write(output + "\n", "utf8");
}
function callSiteLocation(callSite) {
var file = callSite.getFileName() || "<anonymous>";
var line = callSite.getLineNumber();
var colm = callSite.getColumnNumber();
if (callSite.isEval()) {
file = callSite.getEvalOrigin() + ", " + file;
}
var site = [file, line, colm];
site.callSite = callSite;
site.name = callSite.getFunctionName();
return site;
}
function defaultMessage(site) {
var callSite = site.callSite;
var funcName = site.name;
if (!funcName) {
funcName = "<anonymous@" + formatLocation(site) + ">";
}
var context = callSite.getThis();
var typeName = context && callSite.getTypeName();
if (typeName === "Object") {
typeName = void 0;
}
if (typeName === "Function") {
typeName = context.name || typeName;
}
return typeName && callSite.getMethodName() ? typeName + "." + funcName : funcName;
}
function formatPlain(msg, caller, stack) {
var timestamp = (/* @__PURE__ */ new Date()).toUTCString();
var formatted = timestamp + " " + this._namespace + " deprecated " + msg;
if (this._traced) {
for (var i = 0; i < stack.length; i++) {
formatted += "\n at " + stack[i].toString();
}
return formatted;
}
if (caller) {
formatted += " at " + formatLocation(caller);
}
return formatted;
}
function formatColor(msg, caller, stack) {
var formatted = "\x1B[36;1m" + this._namespace + "\x1B[22;39m \x1B[33;1mdeprecated\x1B[22;39m \x1B[0m" + msg + "\x1B[39m";
if (this._traced) {
for (var i = 0; i < stack.length; i++) {
formatted += "\n \x1B[36mat " + stack[i].toString() + "\x1B[39m";
}
return formatted;
}
if (caller) {
formatted += " \x1B[36m" + formatLocation(caller) + "\x1B[39m";
}
return formatted;
}
function formatLocation(callSite) {
return relative(basePath, callSite[0]) + ":" + callSite[1] + ":" + callSite[2];
}
function getStack() {
var limit = Error.stackTraceLimit;
var obj = {};
var prep = Error.prepareStackTrace;
Error.prepareStackTrace = prepareObjectStackTrace;
Error.stackTraceLimit = Math.max(10, limit);
Error.captureStackTrace(obj);
var stack = obj.stack.slice(1);
Error.prepareStackTrace = prep;
Error.stackTraceLimit = limit;
return stack;
}
function prepareObjectStackTrace(obj, stack) {
return stack;
}
function wrapfunction(fn, message) {
if (typeof fn !== "function") {
throw new TypeError("argument fn must be a function");
}
var args = createArgumentsString(fn.length);
var stack = getStack();
var site = callSiteLocation(stack[1]);
site.name = fn.name;
var deprecatedfn = new Function(
"fn",
"log",
"deprecate",
"message",
"site",
'"use strict"\nreturn function (' + args + ") {log.call(deprecate, message, site)\nreturn fn.apply(this, arguments)\n}"
)(fn, log, this, message, site);
return deprecatedfn;
}
function wrapproperty(obj, prop2, message) {
if (!obj || typeof obj !== "object" && typeof obj !== "function") {
throw new TypeError("argument obj must be object");
}
var descriptor = Object.getOwnPropertyDescriptor(obj, prop2);
if (!descriptor) {
throw new TypeError("must call property on owner object");
}
if (!descriptor.configurable) {
throw new TypeError("property must be configurable");
}
var deprecate = this;
var stack = getStack();
var site = callSiteLocation(stack[1]);
site.name = prop2;
if ("value" in descriptor) {
descriptor = convertDataDescriptorToAccessor(obj, prop2, message);
}
var get2 = descriptor.get;
var set = descriptor.set;
if (typeof get2 === "function") {
descriptor.get = function getter() {
log.call(deprecate, message, site);
return get2.apply(this, arguments);
};
}
if (typeof set === "function") {
descriptor.set = function setter() {
log.call(deprecate, message, site);
return set.apply(this, arguments);
};
}
Object.defineProperty(obj, prop2, descriptor);
}
function DeprecationError(namespace, message, stack) {
var error = new Error();
var stackString;
Object.defineProperty(error, "constructor", {
value: DeprecationError
});
Object.defineProperty(error, "message", {
configurable: true,
enumerable: false,
value: message,
writable: true
});
Object.defineProperty(error, "name", {
enumerable: false,
configurable: true,
value: "DeprecationError",
writable: true
});
Object.defineProperty(error, "namespace", {
configurable: true,
enumerable: false,
value: namespace,
writable: true
});
Object.defineProperty(error, "stack", {
configurable: true,
enumerable: false,
get: function() {
if (stackString !== void 0) {
return stackString;
}
return stackString = createStackString.call(this, stack);
},
set: function setter(val2) {
stackString = val2;
}
});
return error;
}
}
});
var require_setprototypeof = __commonJS2({
"node_modules/setprototypeof/index.js"(exports2, module2) {
"use strict";
module2.exports = Object.setPrototypeOf || ({ __proto__: [] } instanceof Array ? setProtoOf : mixinProperties);
function setProtoOf(obj, proto) {
obj.__proto__ = proto;
return obj;
}
function mixinProperties(obj, proto) {
for (var prop2 in proto) {
if (!Object.prototype.hasOwnProperty.call(obj, prop2)) {
obj[prop2] = proto[prop2];
}
}
return obj;
}
}
});
var require_codes = __commonJS2({
"node_modules/statuses/codes.json"(exports2, module2) {
module2.exports = {
"100": "Continue",
"101": "Switching Protocols",
"102": "Processing",
"103": "Early Hints",
"200": "OK",
"201": "Created",
"202": "Accepted",
"203": "Non-Authoritative Information",
"204": "No Content",
"205": "Reset Content",
"206": "Partial Content",
"207": "Multi-Status",
"208": "Already Reported",
"226": "IM Used",
"300": "Multiple Choices",
"301": "Moved Permanently",
"302": "Found",
"303": "See Other",
"304": "Not Modified",
"305": "Use Proxy",
"307": "Temporary Redirect",
"308": "Permanent Redirect",
"400": "Bad Request",
"401": "Unauthorized",
"402": "Payment Required",
"403": "Forbidden",
"404": "Not Found",
"405": "Method Not Allowed",
"406": "Not Acceptable",
"407": "Proxy Authentication Required",
"408": "Request Timeout",
"409": "Conflict",
"410": "Gone",
"411": "Length Required",
"412": "Precondition Failed",
"413": "Payload Too Large",
"414": "URI Too Long",
"415": "Unsupported Media Type",
"416": "Range Not Satisfiable",
"417": "Expectation Failed",
"418": "I'm a Teapot",
"421": "Misdirected Request",
"422": "Unprocessable Entity",
"423": "Locked",
"424": "Failed Dependency",
"425": "Too Early",
"426": "Upgrade Required",
"428": "Precondition Required",
"429": "Too Many Requests",
"431": "Request Header Fields Too Large",
"451": "Unavailable For Legal Reasons",
"500": "Internal Server Error",
"501": "Not Implemented",
"502": "Bad Gateway",
"503": "Service Unavailable",
"504": "Gateway Timeout",
"505": "HTTP Version Not Supported",
"506": "Variant Also Negotiates",
"507": "Insufficient Storage",
"508": "Loop Detected",
"509": "Bandwidth Limit Exceeded",
"510": "Not Extended",
"511": "Network Authentication Required"
};
}
});
var require_statuses = __commonJS2({
"node_modules/statuses/index.js"(exports2, module2) {
"use strict";
var codes = require_codes();
module2.exports = status;
status.message = codes;
status.code = createMessageToStatusCodeMap(codes);
status.codes = createStatusCodeList(codes);
status.redirect = {
300: true,
301: true,
302: true,
303: true,
305: true,
307: true,
308: true
};
status.empty = {
204: true,
205: true,
304: true
};
status.retry = {
502: true,
503: true,
504: true
};
function createMessageToStatusCodeMap(codes2) {
var map2 = {};
Object.keys(codes2).forEach(function forEachCode(code) {
var message = codes2[code];
var status2 = Number(code);
map2[message.toLowerCase()] = status2;
});
return map2;
}
function createStatusCodeList(codes2) {
return Object.keys(codes2).map(function mapCode(code) {
return Number(code);
});
}
function getStatusCode(message) {
var msg = message.toLowerCase();
if (!Object.prototype.hasOwnProperty.call(status.code, msg)) {
throw new Error('invalid status message: "' + message + '"');
}
return status.code[msg];
}
function getStatusMessage(code) {
if (!Object.prototype.hasOwnProperty.call(status.message, code)) {
throw new Error("invalid status code: " + code);
}
return status.message[code];
}
function status(code) {
if (typeof code === "number") {
return getStatusMessage(code);
}
if (typeof code !== "string") {
throw new TypeError("code must be a number or string");
}
var n = parseInt(code, 10);
if (!isNaN(n)) {
return getStatusMessage(n);
}
return getStatusCode(code);
}
}
});
var require_inherits_browser = __commonJS2({
"node_modules/inherits/inherits_browser.js"(exports2, module2) {
if (typeof Object.create === "function") {
module2.exports = function inherits2(ctor, superCtor) {
if (superCtor) {
ctor.super_ = superCtor;
ctor.prototype = Object.create(superCtor.prototype, {
constructor: {
value: ctor,
enumerable: false,
writable: true,
configurable: true
}
});
}
};
} else {
module2.exports = function inherits2(ctor, superCtor) {
if (superCtor) {
ctor.super_ = superCtor;
var TempCtor = function() {
};
TempCtor.prototype = superCtor.prototype;
ctor.prototype = new TempCtor();
ctor.prototype.constructor = ctor;
}
};
}
}
});
var require_inherits = __commonJS2({
"node_modules/inherits/inherits.js"(exports2, module2) {
try {
util22 = require("util");
if (typeof util22.inherits !== "function") throw "";
module2.exports = util22.inherits;
} catch (e) {
module2.exports = require_inherits_browser();
}
var util22;
}
});
var require_toidentifier = __commonJS2({
"node_modules/toidentifier/index.js"(exports2, module2) {
"use strict";
module2.exports = toIdentifier;
function toIdentifier(str) {
return str.split(" ").map(function(token) {
return token.slice(0, 1).toUpperCase() + token.slice(1);
}).join("").replace(/[^ _0-9a-z]/gi, "");
}
}
});
var require_http_errors = __commonJS2({
"node_modules/http-errors/index.js"(exports2, module2) {
"use strict";
var deprecate = require_depd()("http-errors");
var setPrototypeOf = require_setprototypeof();
var statuses = require_statuses();
var inherits2 = require_inherits();
var toIdentifier = require_toidentifier();
module2.exports = createError;
module2.exports.HttpError = createHttpErrorConstructor();
module2.exports.isHttpError = createIsHttpErrorFunction(module2.exports.HttpError);
populateConstructorExports(module2.exports, statuses.codes, module2.exports.HttpError);
function codeClass(status) {
return Number(String(status).charAt(0) + "00");
}
function createError() {
var err2;
var msg;
var status = 500;
var props = {};
for (var i = 0; i < arguments.length; i++) {
var arg = arguments[i];
var type = typeof arg;
if (type === "object" && arg instanceof Error) {
err2 = arg;
status = err2.status || err2.statusCode || status;
} else if (type === "number" && i === 0) {
status = arg;
} else if (type === "string") {
msg = arg;
} else if (type === "object") {
props = arg;
} else {
throw new TypeError("argument #" + (i + 1) + " unsupported type " + type);
}
}
if (typeof status === "number" && (status < 400 || status >= 600)) {
deprecate("non-error status code; use only 4xx or 5xx status codes");
}
if (typeof status !== "number" || !statuses.message[status] && (status < 400 || status >= 600)) {
status = 500;
}
var HttpError = createError[status] || createError[codeClass(status)];
if (!err2) {
err2 = HttpError ? new HttpError(msg) : new Error(msg || statuses.message[status]);
Error.captureStackTrace(err2, createError);
}
if (!HttpError || !(err2 instanceof HttpError) || err2.status !== status) {
err2.expose = status < 500;
err2.status = err2.statusCode = status;
}
for (var key in props) {
if (key !== "status" && key !== "statusCode") {
err2[key] = props[key];
}
}
return err2;
}
function createHttpErrorConstructor() {
function HttpError() {
throw new TypeError("cannot construct abstract class");
}
inherits2(HttpError, Error);
return HttpError;
}
function createClientErrorConstructor(HttpError, name, code) {
var className = toClassName(name);
function ClientError(message) {
var msg = message != null ? message : statuses.message[code];
var err2 = new Error(msg);
Error.captureStackTrace(err2, ClientError);
setPrototypeOf(err2, ClientError.prototype);
Object.defineProperty(err2, "message", {
enumerable: true,
configurable: true,
value: msg,
writable: true
});
Object.defineProperty(err2, "name", {
enumerable: false,
configurable: true,
value: className,
writable: true
});
return err2;
}
inherits2(ClientError, HttpError);
nameFunc(ClientError, className);
ClientError.prototype.status = code;
ClientError.prototype.statusCode = code;
ClientError.prototype.expose = true;
return ClientError;
}
function createIsHttpErrorFunction(HttpError) {
return function isHttpError(val2) {
if (!val2 || typeof val2 !== "object") {
return false;
}
if (val2 instanceof HttpError) {
return true;
}
return val2 instanceof Error && typeof val2.expose === "boolean" && typeof val2.statusCode === "number" && val2.status === val2.statusCode;
};
}
function createServerErrorConstructor(HttpError, name, code) {
var className = toClassName(name);
function ServerError(message) {
var msg = message != null ? message : statuses.message[code];
var err2 = new Error(msg);
Error.captureStackTrace(err2, ServerError);
setPrototypeOf(err2, ServerError.prototype);
Object.defineProperty(err2, "message", {
enumerable: true,
configurable: true,
value: msg,
writable: true
});
Object.defineProperty(err2, "name", {
enumerable: false,
configurable: true,
value: className,
writable: true
});
return err2;
}
inherits2(ServerError, HttpError);
nameFunc(ServerError, className);
ServerError.prototype.status = code;
ServerError.prototype.statusCode = code;
ServerError.prototype.expose = false;
return ServerError;
}
function nameFunc(func, name) {
var desc = Object.getOwnPropertyDescriptor(func, "name");
if (desc && desc.configurable) {
desc.value = name;
Object.defineProperty(func, "name", desc);
}
}
function populateConstructorExports(exports3, codes, HttpError) {
codes.forEach(function forEachCode(code) {
var CodeError;
var name = toIdentifier(statuses.message[code]);
switch (codeClass(code)) {
case 400:
CodeError = createClientErrorConstructor(HttpError, name, code);
break;
case 500:
CodeError = createServerErrorConstructor(HttpError, name, code);
break;
}
if (CodeError) {
exports3[code] = CodeError;
exports3[name] = CodeError;
}
});
}
function toClassName(name) {
return name.substr(-5) !== "Error" ? name + "Error" : name;
}
}
});
var require_safer2 = __commonJS2({
"node_modules/safer-buffer/safer.js"(exports2, module2) {
"use strict";
var buffer = require("buffer");
var Buffer2 = buffer.Buffer;
var safer = {};
var key;
for (key in buffer) {
if (!buffer.hasOwnProperty(key)) continue;
if (key === "SlowBuffer" || key === "Buffer") continue;
safer[key] = buffer[key];
}
var Safer = safer.Buffer = {};
for (key in Buffer2) {
if (!Buffer2.hasOwnProperty(key)) continue;
if (key === "allocUnsafe" || key === "allocUnsafeSlow") continue;
Safer[key] = Buffer2[key];
}
safer.Buffer.prototype = Buffer2.prototype;
if (!Safer.from || Safer.from === Uint8Array.from) {
Safer.from = function(value, encodingOrOffset, length) {
if (typeof value === "number") {
throw new TypeError('The "value" argument must not be of type number. Received type ' + typeof value);
}
if (value && typeof value.length === "undefined") {
throw new TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type " + typeof value);
}
return Buffer2(value, encodingOrOffset, length);
};
}
if (!Safer.alloc) {
Safer.alloc = function(size, fill, encoding) {
if (typeof size !== "number") {
throw new TypeError('The "size" argument must be of type number. Received type ' + typeof size);
}
if (size < 0 || size >= 2 * (1 << 30)) {
throw new RangeError('The value "' + size + '" is invalid for option "size"');
}
var buf = Buffer2(size);
if (!fill || fill.length === 0) {
buf.fill(0);
} else if (typeof encoding === "string") {
buf.fill(fill, encoding);
} else {
buf.fill(fill);
}
return buf;
};
}
if (!safer.kStringMaxLength) {
try {
safer.kStringMaxLength = process.binding("buffer").kStringMaxLength;
} catch (e) {
}
}
if (!safer.constants) {
safer.constants = {
MAX_LENGTH: safer.kMaxLength
};
if (safer.kStringMaxLength) {
safer.constants.MAX_STRING_LENGTH = safer.kStringMaxLength;
}
}
module2.exports = safer;
}
});
var require_bom_handling2 = __commonJS2({
"node_modules/raw-body/node_modules/iconv-lite/lib/bom-handling.js"(exports2) {
"use strict";
var BOMChar = "\uFEFF";
exports2.PrependBOM = PrependBOMWrapper;
function PrependBOMWrapper(encoder, options) {
this.encoder = encoder;
this.addBOM = true;
}
PrependBOMWrapper.prototype.write = function(str) {
if (this.addBOM) {
str = BOMChar + str;
this.addBOM = false;
}
return this.encoder.write(str);
};
PrependBOMWrapper.prototype.end = function() {
return this.encoder.end();
};
exports2.StripBOM = StripBOMWrapper;
function StripBOMWrapper(decoder, options) {
this.decoder = decoder;
this.pass = false;
this.options = options || {};
}
StripBOMWrapper.prototype.write = function(buf) {
var res = this.decoder.write(buf);
if (this.pass || !res)
return res;
if (res[0] === BOMChar) {
res = res.slice(1);
if (typeof this.options.stripBOM === "function")
this.options.stripBOM();
}
this.pass = true;
return res;
};
StripBOMWrapper.prototype.end = function() {
return this.decoder.end();
};
}
});
var require_internal2 = __commonJS2({
"node_modules/raw-body/node_modules/iconv-lite/encodings/internal.js"(exports2, module2) {
"use strict";
var Buffer2 = require_safer2().Buffer;
module2.exports = {
// Encodings
utf8: { type: "_internal", bomAware: true },
cesu8: { type: "_internal", bomAware: true },
unicode11utf8: "utf8",
ucs2: { type: "_internal", bomAware: true },
utf16le: "ucs2",
binary: { type: "_internal" },
base64: { type: "_internal" },
hex: { type: "_internal" },
// Codec.
_internal: InternalCodec
};
function InternalCodec(codecOptions, iconv2) {
this.enc = codecOptions.encodingName;
this.bomAware = codecOptions.bomAware;
if (this.enc === "base64")
this.encoder = InternalEncoderBase64;
else if (this.enc === "cesu8") {
this.enc = "utf8";
this.encoder = InternalEncoderCesu8;
if (Buffer2.from("eda0bdedb2a9", "hex").toString() !== "\u{1F4A9}") {
this.decoder = InternalDecoderCesu8;
this.defaultCharUnicode = iconv2.defaultCharUnicode;
}
}
}
InternalCodec.prototype.encoder = InternalEncoder;
InternalCodec.prototype.decoder = InternalDecoder;
var StringDecoder = require("string_decoder").StringDecoder;
if (!StringDecoder.prototype.end)
StringDecoder.prototype.end = function() {
};
function InternalDecoder(options, codec) {
this.decoder = new StringDecoder(codec.enc);
}
InternalDecoder.prototype.write = function(buf) {
if (!Buffer2.isBuffer(buf)) {
buf = Buffer2.from(buf);
}
return this.decoder.write(buf);
};
InternalDecoder.prototype.end = function() {
return this.decoder.end();
};
function InternalEncoder(options, codec) {
this.enc = codec.enc;
}
InternalEncoder.prototype.write = function(str) {
return Buffer2.from(str, this.enc);
};
InternalEncoder.prototype.end = function() {
};
function InternalEncoderBase64(options, codec) {
this.prevStr = "";
}
InternalEncoderBase64.prototype.write = function(str) {
str = this.prevStr + str;
var completeQuads = str.length - str.length % 4;
this.prevStr = str.slice(completeQuads);
str = str.slice(0, completeQuads);
return Buffer2.from(str, "base64");
};
InternalEncoderBase64.prototype.end = function() {
return Buffer2.from(this.prevStr, "base64");
};
function InternalEncoderCesu8(options, codec) {
}
InternalEncoderCesu8.prototype.write = function(str) {
var buf = Buffer2.alloc(str.length * 3), bufIdx = 0;
for (var i = 0; i < str.length; i++) {
var charCode = str.charCodeAt(i);
if (charCode < 128)
buf[bufIdx++] = charCode;
else if (charCode < 2048) {
buf[bufIdx++] = 192 + (charCode >>> 6);
buf[bufIdx++] = 128 + (charCode & 63);
} else {
buf[bufIdx++] = 224 + (charCode >>> 12);
buf[bufIdx++] = 128 + (charCode >>> 6 & 63);
buf[bufIdx++] = 128 + (charCode & 63);
}
}
return buf.slice(0, bufIdx);
};
InternalEncoderCesu8.prototype.end = function() {
};
function InternalDecoderCesu8(options, codec) {
this.acc = 0;
this.contBytes = 0;
this.accBytes = 0;
this.defaultCharUnicode = codec.defaultCharUnicode;
}
InternalDecoderCesu8.prototype.write = function(buf) {
var acc = this.acc, contBytes = this.contBytes, accBytes = this.accBytes, res = "";
for (var i = 0; i < buf.length; i++) {
var curByte = buf[i];
if ((curByte & 192) !== 128) {
if (contBytes > 0) {
res += this.defaultCharUnicode;
contBytes = 0;
}
if (curByte < 128) {
res += String.fromCharCode(curByte);
} else if (curByte < 224) {
acc = curByte & 31;
contBytes = 1;
accBytes = 1;
} else if (curByte < 240) {
acc = curByte & 15;
contBytes = 2;
accBytes = 1;
} else {
res += this.defaultCharUnicode;
}
} else {
if (contBytes > 0) {
acc = acc << 6 | curByte & 63;
contBytes--;
accBytes++;
if (contBytes === 0) {
if (accBytes === 2 && acc < 128 && acc > 0)
res += this.defaultCharUnicode;
else if (accBytes === 3 && acc < 2048)
res += this.defaultCharUnicode;
else
res += String.fromCharCode(acc);
}
} else {
res += this.defaultCharUnicode;
}
}
}
this.acc = acc;
this.contBytes = contBytes;
this.accBytes = accBytes;
return res;
};
InternalDecoderCesu8.prototype.end = function() {
var res = 0;
if (this.contBytes > 0)
res += this.defaultCharUnicode;
return res;
};
}
});
var require_utf322 = __commonJS2({
"node_modules/raw-body/node_modules/iconv-lite/encodings/utf32.js"(exports2) {
"use strict";
var Buffer2 = require_safer2().Buffer;
exports2._utf32 = Utf32Codec;
function Utf32Codec(codecOptions, iconv2) {
this.iconv = iconv2;
this.bomAware = true;
this.isLE = codecOptions.isLE;
}
exports2.utf32le = { type: "_utf32", isLE: true };
exports2.utf32be = { type: "_utf32", isLE: false };
exports2.ucs4le = "utf32le";
exports2.ucs4be = "utf32be";
Utf32Codec.prototype.encoder = Utf32Encoder;
Utf32Codec.prototype.decoder = Utf32Decoder;
function Utf32Encoder(options, codec) {
this.isLE = codec.isLE;
this.highSurrogate = 0;
}
Utf32Encoder.prototype.write = function(str) {
var src = Buffer2.from(str, "ucs2");
var dst = Buffer2.alloc(src.length * 2);
var write32 = this.isLE ? dst.writeUInt32LE : dst.writeUInt32BE;
var offset = 0;
for (var i = 0; i < src.length; i += 2) {
var code = src.readUInt16LE(i);
var isHighSurrogate = 55296 <= code && code < 56320;
var isLowSurrogate = 56320 <= code && code < 57344;
if (this.highSurrogate) {
if (isHighSurrogate || !isLowSurrogate) {
write32.call(dst, this.highSurrogate, offset);
offset += 4;
} else {
var codepoint = (this.highSurrogate - 55296 << 10 | code - 56320) + 65536;
write32.call(dst, codepoint, offset);
offset += 4;
this.highSurrogate = 0;
continue;
}
}
if (isHighSurrogate)
this.highSurrogate = code;
else {
write32.call(dst, code, offset);
offset += 4;
this.highSurrogate = 0;
}
}
if (offset < dst.length)
dst = dst.slice(0, offset);
return dst;
};
Utf32Encoder.prototype.end = function() {
if (!this.highSurrogate)
return;
var buf = Buffer2.alloc(4);
if (this.isLE)
buf.writeUInt32LE(this.highSurrogate, 0);
else
buf.writeUInt32BE(this.highSurrogate, 0);
this.highSurrogate = 0;
return buf;
};
function Utf32Decoder(options, codec) {
this.isLE = codec.isLE;
this.badChar = codec.iconv.defaultCharUnicode.charCodeAt(0);
this.overflow = [];
}
Utf32Decoder.prototype.write = function(src) {
if (src.length === 0)
return "";
var i = 0;
var codepoint = 0;
var dst = Buffer2.alloc(src.length + 4);
var offset = 0;
var isLE = this.isLE;
var overflow = this.overflow;
var badChar = this.badChar;
if (overflow.length > 0) {
for (; i < src.length && overflow.length < 4; i++)
overflow.push(src[i]);
if (overflow.length === 4) {
if (isLE) {
codepoint = overflow[i] | overflow[i + 1] << 8 | overflow[i + 2] << 16 | overflow[i + 3] << 24;
} else {
codepoint = overflow[i + 3] | overflow[i + 2] << 8 | overflow[i + 1] << 16 | overflow[i] << 24;
}
overflow.length = 0;
offset = _writeCodepoint(dst, offset, codepoint, badChar);
}
}
for (; i < src.length - 3; i += 4) {
if (isLE) {
codepoint = src[i] | src[i + 1] << 8 | src[i + 2] << 16 | src[i + 3] << 24;
} else {
codepoint = src[i + 3] | src[i + 2] << 8 | src[i + 1] << 16 | src[i] << 24;
}
offset = _writeCodepoint(dst, offset, codepoint, badChar);
}
for (; i < src.length; i++) {
overflow.push(src[i]);
}
return dst.slice(0, offset).toString("ucs2");
};
function _writeCodepoint(dst, offset, codepoint, badChar) {
if (codepoint < 0 || codepoint > 1114111) {
codepoint = badChar;
}
if (codepoint >= 65536) {
codepoint -= 65536;
var high = 55296 | codepoint >> 10;
dst[offset++] = high & 255;
dst[offset++] = high >> 8;
var codepoint = 56320 | codepoint & 1023;
}
dst[offset++] = codepoint & 255;
dst[offset++] = codepoint >> 8;
return offset;
}
Utf32Decoder.prototype.end = function() {
this.overflow.length = 0;
};
exports2.utf32 = Utf32AutoCodec;
exports2.ucs4 = "utf32";
function Utf32AutoCodec(options, iconv2) {
this.iconv = iconv2;
}
Utf32AutoCodec.prototype.encoder = Utf32AutoEncoder;
Utf32AutoCodec.prototype.decoder = Utf32AutoDecoder;
function Utf32AutoEncoder(options, codec) {
options = options || {};
if (options.addBOM === void 0)
options.addBOM = true;
this.encoder = codec.iconv.getEncoder(options.defaultEncoding || "utf-32le", options);
}
Utf32AutoEncoder.prototype.write = function(str) {
return this.encoder.write(str);
};
Utf32AutoEncoder.prototype.end = function() {
return this.encoder.end();
};
function Utf32AutoDecoder(options, codec) {
this.decoder = null;
this.initialBufs = [];
this.initialBufsLen = 0;
this.options = options || {};
this.iconv = codec.iconv;
}
Utf32AutoDecoder.prototype.write = function(buf) {
if (!this.decoder) {
this.initialBufs.push(buf);
this.initialBufsLen += buf.length;
if (this.initialBufsLen < 32)
return "";
var encoding = detectEncoding(this.initialBufs, this.options.defaultEncoding);
this.decoder = this.iconv.getDecoder(encoding, this.options);
var resStr = "";
for (var i = 0; i < this.initialBufs.length; i++)
resStr += this.decoder.write(this.initialBufs[i]);
this.initialBufs.length = this.initialBufsLen = 0;
return resStr;
}
return this.decoder.write(buf);
};
Utf32AutoDecoder.prototype.end = function() {
if (!this.decoder) {
var encoding = detectEncoding(this.initialBufs, this.options.defaultEncoding);
this.decoder = this.iconv.getDecoder(encoding, this.options);
var resStr = "";
for (var i = 0; i < this.initialBufs.length; i++)
resStr += this.decoder.write(this.initialBufs[i]);
var trail = this.decoder.end();
if (trail)
resStr += trail;
this.initialBufs.length = this.initialBufsLen = 0;
return resStr;
}
return this.decoder.end();
};
function detectEncoding(bufs, defaultEncoding) {
var b = [];
var charsProcessed = 0;
var invalidLE = 0, invalidBE = 0;
var bmpCharsLE = 0, bmpCharsBE = 0;
outer_loop:
for (var i = 0; i < bufs.length; i++) {
var buf = bufs[i];
for (var j = 0; j < buf.length; j++) {
b.push(buf[j]);
if (b.length === 4) {
if (charsProcessed === 0) {
if (b[0] === 255 && b[1] === 254 && b[2] === 0 && b[3] === 0) {
return "utf-32le";
}
if (b[0] === 0 && b[1] === 0 && b[2] === 254 && b[3] === 255) {
return "utf-32be";
}
}
if (b[0] !== 0 || b[1] > 16) invalidBE++;
if (b[3] !== 0 || b[2] > 16) invalidLE++;
if (b[0] === 0 && b[1] === 0 && (b[2] !== 0 || b[3] !== 0)) bmpCharsBE++;
if ((b[0] !== 0 || b[1] !== 0) && b[2] === 0 && b[3] === 0) bmpCharsLE++;
b.length = 0;
charsProcessed++;
if (charsProcessed >= 100) {
break outer_loop;
}
}
}
}
if (bmpCharsBE - invalidBE > bmpCharsLE - invalidLE) return "utf-32be";
if (bmpCharsBE - invalidBE < bmpCharsLE - invalidLE) return "utf-32le";
return defaultEncoding || "utf-32le";
}
}
});
var require_utf162 = __commonJS2({
"node_modules/raw-body/node_modules/iconv-lite/encodings/utf16.js"(exports2) {
"use strict";
var Buffer2 = require_safer2().Buffer;
exports2.utf16be = Utf16BECodec;
function Utf16BECodec() {
}
Utf16BECodec.prototype.encoder = Utf16BEEncoder;
Utf16BECodec.prototype.decoder = Utf16BEDecoder;
Utf16BECodec.prototype.bomAware = true;
function Utf16BEEncoder() {
}
Utf16BEEncoder.prototype.write = function(str) {
var buf = Buffer2.from(str, "ucs2");
for (var i = 0; i < buf.length; i += 2) {
var tmp = buf[i];
buf[i] = buf[i + 1];
buf[i + 1] = tmp;
}
return buf;
};
Utf16BEEncoder.prototype.end = function() {
};
function Utf16BEDecoder() {
this.overflowByte = -1;
}
Utf16BEDecoder.prototype.write = function(buf) {
if (buf.length == 0)
return "";
var buf2 = Buffer2.alloc(buf.length + 1), i = 0, j = 0;
if (this.overflowByte !== -1) {
buf2[0] = buf[0];
buf2[1] = this.overflowByte;
i = 1;
j = 2;
}
for (; i < buf.length - 1; i += 2, j += 2) {
buf2[j] = buf[i + 1];
buf2[j + 1] = buf[i];
}
this.overflowByte = i == buf.length - 1 ? buf[buf.length - 1] : -1;
return buf2.slice(0, j).toString("ucs2");
};
Utf16BEDecoder.prototype.end = function() {
this.overflowByte = -1;
};
exports2.utf16 = Utf16Codec;
function Utf16Codec(codecOptions, iconv2) {
this.iconv = iconv2;
}
Utf16Codec.prototype.encoder = Utf16Encoder;
Utf16Codec.prototype.decoder = Utf16Decoder;
function Utf16Encoder(options, codec) {
options = options || {};
if (options.addBOM === void 0)
options.addBOM = true;
this.encoder = codec.iconv.getEncoder("utf-16le", options);
}
Utf16Encoder.prototype.write = function(str) {
return this.encoder.write(str);
};
Utf16Encoder.prototype.end = function() {
return this.encoder.end();
};
function Utf16Decoder(options, codec) {
this.decoder = null;
this.initialBufs = [];
this.initialBufsLen = 0;
this.options = options || {};
this.iconv = codec.iconv;
}
Utf16Decoder.prototype.write = function(buf) {
if (!this.decoder) {
this.initialBufs.push(buf);
this.initialBufsLen += buf.length;
if (this.initialBufsLen < 16)
return "";
var encoding = detectEncoding(this.initialBufs, this.options.defaultEncoding);
this.decoder = this.iconv.getDecoder(encoding, this.options);
var resStr = "";
for (var i = 0; i < this.initialBufs.length; i++)
resStr += this.decoder.write(this.initialBufs[i]);
this.initialBufs.length = this.initialBufsLen = 0;
return resStr;
}
return this.decoder.write(buf);
};
Utf16Decoder.prototype.end = function() {
if (!this.decoder) {
var encoding = detectEncoding(this.initialBufs, this.options.defaultEncoding);
this.decoder = this.iconv.getDecoder(encoding, this.options);
var resStr = "";
for (var i = 0; i < this.initialBufs.length; i++)
resStr += this.decoder.write(this.initialBufs[i]);
var trail = this.decoder.end();
if (trail)
resStr += trail;
this.initialBufs.length = this.initialBufsLen = 0;
return resStr;
}
return this.decoder.end();
};
function detectEncoding(bufs, defaultEncoding) {
var b = [];
var charsProcessed = 0;
var asciiCharsLE = 0, asciiCharsBE = 0;
outer_loop:
for (var i = 0; i < bufs.length; i++) {
var buf = bufs[i];
for (var j = 0; j < buf.length; j++) {
b.push(buf[j]);
if (b.length === 2) {
if (charsProcessed === 0) {
if (b[0] === 255 && b[1] === 254) return "utf-16le";
if (b[0] === 254 && b[1] === 255) return "utf-16be";
}
if (b[0] === 0 && b[1] !== 0) asciiCharsBE++;
if (b[0] !== 0 && b[1] === 0) asciiCharsLE++;
b.length = 0;
charsProcessed++;
if (charsProcessed >= 100) {
break outer_loop;
}
}
}
}
if (asciiCharsBE > asciiCharsLE) return "utf-16be";
if (asciiCharsBE < asciiCharsLE) return "utf-16le";
return defaultEncoding || "utf-16le";
}
}
});
var require_utf72 = __commonJS2({
"node_modules/raw-body/node_modules/iconv-lite/encodings/utf7.js"(exports2) {
"use strict";
var Buffer2 = require_safer2().Buffer;
exports2.utf7 = Utf7Codec;
exports2.unicode11utf7 = "utf7";
function Utf7Codec(codecOptions, iconv2) {
this.iconv = iconv2;
}
Utf7Codec.prototype.encoder = Utf7Encoder;
Utf7Codec.prototype.decoder = Utf7Decoder;
Utf7Codec.prototype.bomAware = true;
var nonDirectChars = /[^A-Za-z0-9'\(\),-\.\/:\? \n\r\t]+/g;
function Utf7Encoder(options, codec) {
this.iconv = codec.iconv;
}
Utf7Encoder.prototype.write = function(str) {
return Buffer2.from(str.replace(nonDirectChars, function(chunk) {
return "+" + (chunk === "+" ? "" : this.iconv.encode(chunk, "utf16-be").toString("base64").replace(/=+$/, "")) + "-";
}.bind(this)));
};
Utf7Encoder.prototype.end = function() {
};
function Utf7Decoder(options, codec) {
this.iconv = codec.iconv;
this.inBase64 = false;
this.base64Accum = "";
}
var base64Regex22 = /[A-Za-z0-9\/+]/;
var base64Chars = [];
for (i = 0; i < 256; i++)
base64Chars[i] = base64Regex22.test(String.fromCharCode(i));
var i;
var plusChar = "+".charCodeAt(0);
var minusChar = "-".charCodeAt(0);
var andChar = "&".charCodeAt(0);
Utf7Decoder.prototype.write = function(buf) {
var res = "", lastI = 0, inBase64 = this.inBase64, base64Accum = this.base64Accum;
for (var i2 = 0; i2 < buf.length; i2++) {
if (!inBase64) {
if (buf[i2] == plusChar) {
res += this.iconv.decode(buf.slice(lastI, i2), "ascii");
lastI = i2 + 1;
inBase64 = true;
}
} else {
if (!base64Chars[buf[i2]]) {
if (i2 == lastI && buf[i2] == minusChar) {
res += "+";
} else {
var b64str = base64Accum + this.iconv.decode(buf.slice(lastI, i2), "ascii");
res += this.iconv.decode(Buffer2.from(b64str, "base64"), "utf16-be");
}
if (buf[i2] != minusChar)
i2--;
lastI = i2 + 1;
inBase64 = false;
base64Accum = "";
}
}
}
if (!inBase64) {
res += this.iconv.decode(buf.slice(lastI), "ascii");
} else {
var b64str = base64Accum + this.iconv.decode(buf.slice(lastI), "ascii");
var canBeDecoded = b64str.length - b64str.length % 8;
base64Accum = b64str.slice(canBeDecoded);
b64str = b64str.slice(0, canBeDecoded);
res += this.iconv.decode(Buffer2.from(b64str, "base64"), "utf16-be");
}
this.inBase64 = inBase64;
this.base64Accum = base64Accum;
return res;
};
Utf7Decoder.prototype.end = function() {
var res = "";
if (this.inBase64 && this.base64Accum.length > 0)
res = this.iconv.decode(Buffer2.from(this.base64Accum, "base64"), "utf16-be");
this.inBase64 = false;
this.base64Accum = "";
return res;
};
exports2.utf7imap = Utf7IMAPCodec;
function Utf7IMAPCodec(codecOptions, iconv2) {
this.iconv = iconv2;
}
Utf7IMAPCodec.prototype.encoder = Utf7IMAPEncoder;
Utf7IMAPCodec.prototype.decoder = Utf7IMAPDecoder;
Utf7IMAPCodec.prototype.bomAware = true;
function Utf7IMAPEncoder(options, codec) {
this.iconv = codec.iconv;
this.inBase64 = false;
this.base64Accum = Buffer2.alloc(6);
this.base64AccumIdx = 0;
}
Utf7IMAPEncoder.prototype.write = function(str) {
var inBase64 = this.inBase64, base64Accum = this.base64Accum, base64AccumIdx = this.base64AccumIdx, buf = Buffer2.alloc(str.length * 5 + 10), bufIdx = 0;
for (var i2 = 0; i2 < str.length; i2++) {
var uChar = str.charCodeAt(i2);
if (32 <= uChar && uChar <= 126) {
if (inBase64) {
if (base64AccumIdx > 0) {
bufIdx += buf.write(base64Accum.slice(0, base64AccumIdx).toString("base64").replace(/\//g, ",").replace(/=+$/, ""), bufIdx);
base64AccumIdx = 0;
}
buf[bufIdx++] = minusChar;
inBase64 = false;
}
if (!inBase64) {
buf[bufIdx++] = uChar;
if (uChar === andChar)
buf[bufIdx++] = minusChar;
}
} else {
if (!inBase64) {
buf[bufIdx++] = andChar;
inBase64 = true;
}
if (inBase64) {
base64Accum[base64AccumIdx++] = uChar >> 8;
base64Accum[base64AccumIdx++] = uChar & 255;
if (base64AccumIdx == base64Accum.length) {
bufIdx += buf.write(base64Accum.toString("base64").replace(/\//g, ","), bufIdx);
base64AccumIdx = 0;
}
}
}
}
this.inBase64 = inBase64;
this.base64AccumIdx = base64AccumIdx;
return buf.slice(0, bufIdx);
};
Utf7IMAPEncoder.prototype.end = function() {
var buf = Buffer2.alloc(10), bufIdx = 0;
if (this.inBase64) {
if (this.base64AccumIdx > 0) {
bufIdx += buf.write(this.base64Accum.slice(0, this.base64AccumIdx).toString("base64").replace(/\//g, ",").replace(/=+$/, ""), bufIdx);
this.base64AccumIdx = 0;
}
buf[bufIdx++] = minusChar;
this.inBase64 = false;
}
return buf.slice(0, bufIdx);
};
function Utf7IMAPDecoder(options, codec) {
this.iconv = codec.iconv;
this.inBase64 = false;
this.base64Accum = "";
}
var base64IMAPChars = base64Chars.slice();
base64IMAPChars[",".charCodeAt(0)] = true;
Utf7IMAPDecoder.prototype.write = function(buf) {
var res = "", lastI = 0, inBase64 = this.inBase64, base64Accum = this.base64Accum;
for (var i2 = 0; i2 < buf.length; i2++) {
if (!inBase64) {
if (buf[i2] == andChar) {
res += this.iconv.decode(buf.slice(lastI, i2), "ascii");
lastI = i2 + 1;
inBase64 = true;
}
} else {
if (!base64IMAPChars[buf[i2]]) {
if (i2 == lastI && buf[i2] == minusChar) {
res += "&";
} else {
var b64str = base64Accum + this.iconv.decode(buf.slice(lastI, i2), "ascii").replace(/,/g, "/");
res += this.iconv.decode(Buffer2.from(b64str, "base64"), "utf16-be");
}
if (buf[i2] != minusChar)
i2--;
lastI = i2 + 1;
inBase64 = false;
base64Accum = "";
}
}
}
if (!inBase64) {
res += this.iconv.decode(buf.slice(lastI), "ascii");
} else {
var b64str = base64Accum + this.iconv.decode(buf.slice(lastI), "ascii").replace(/,/g, "/");
var canBeDecoded = b64str.length - b64str.length % 8;
base64Accum = b64str.slice(canBeDecoded);
b64str = b64str.slice(0, canBeDecoded);
res += this.iconv.decode(Buffer2.from(b64str, "base64"), "utf16-be");
}
this.inBase64 = inBase64;
this.base64Accum = base64Accum;
return res;
};
Utf7IMAPDecoder.prototype.end = function() {
var res = "";
if (this.inBase64 && this.base64Accum.length > 0)
res = this.iconv.decode(Buffer2.from(this.base64Accum, "base64"), "utf16-be");
this.inBase64 = false;
this.base64Accum = "";
return res;
};
}
});
var require_sbcs_codec2 = __commonJS2({
"node_modules/raw-body/node_modules/iconv-lite/encodings/sbcs-codec.js"(exports2) {
"use strict";
var Buffer2 = require_safer2().Buffer;
exports2._sbcs = SBCSCodec;
function SBCSCodec(codecOptions, iconv2) {
if (!codecOptions)
throw new Error("SBCS codec is called without the data.");
if (!codecOptions.chars || codecOptions.chars.length !== 128 && codecOptions.chars.length !== 256)
throw new Error("Encoding '" + codecOptions.type + "' has incorrect 'chars' (must be of len 128 or 256)");
if (codecOptions.chars.length === 128) {
var asciiString = "";
for (var i = 0; i < 128; i++)
asciiString += String.fromCharCode(i);
codecOptions.chars = asciiString + codecOptions.chars;
}
this.decodeBuf = Buffer2.from(codecOptions.chars, "ucs2");
var encodeBuf = Buffer2.alloc(65536, iconv2.defaultCharSingleByte.charCodeAt(0));
for (var i = 0; i < codecOptions.chars.length; i++)
encodeBuf[codecOptions.chars.charCodeAt(i)] = i;
this.encodeBuf = encodeBuf;
}
SBCSCodec.prototype.encoder = SBCSEncoder;
SBCSCodec.prototype.decoder = SBCSDecoder;
function SBCSEncoder(options, codec) {
this.encodeBuf = codec.encodeBuf;
}
SBCSEncoder.prototype.write = function(str) {
var buf = Buffer2.alloc(str.length);
for (var i = 0; i < str.length; i++)
buf[i] = this.encodeBuf[str.charCodeAt(i)];
return buf;
};
SBCSEncoder.prototype.end = function() {
};
function SBCSDecoder(options, codec) {
this.decodeBuf = codec.decodeBuf;
}
SBCSDecoder.prototype.write = function(buf) {
var decodeBuf = this.decodeBuf;
var newBuf = Buffer2.alloc(buf.length * 2);
var idx1 = 0, idx2 = 0;
for (var i = 0; i < buf.length; i++) {
idx1 = buf[i] * 2;
idx2 = i * 2;
newBuf[idx2] = decodeBuf[idx1];
newBuf[idx2 + 1] = decodeBuf[idx1 + 1];
}
return newBuf.toString("ucs2");
};
SBCSDecoder.prototype.end = function() {
};
}
});
var require_sbcs_data2 = __commonJS2({
"node_modules/raw-body/node_modules/iconv-lite/encodings/sbcs-data.js"(exports2, module2) {
"use strict";
module2.exports = {
// Not supported by iconv, not sure why.
"10029": "maccenteuro",
"maccenteuro": {
"type": "_sbcs",
"chars": "\xC4\u0100\u0101\xC9\u0104\xD6\xDC\xE1\u0105\u010C\xE4\u010D\u0106\u0107\xE9\u0179\u017A\u010E\xED\u010F\u0112\u0113\u0116\xF3\u0117\xF4\xF6\xF5\xFA\u011A\u011B\xFC\u2020\xB0\u0118\xA3\xA7\u2022\xB6\xDF\xAE\xA9\u2122\u0119\xA8\u2260\u0123\u012E\u012F\u012A\u2264\u2265\u012B\u0136\u2202\u2211\u0142\u013B\u013C\u013D\u013E\u0139\u013A\u0145\u0146\u0143\xAC\u221A\u0144\u0147\u2206\xAB\xBB\u2026\xA0\u0148\u0150\xD5\u0151\u014C\u2013\u2014\u201C\u201D\u2018\u2019\xF7\u25CA\u014D\u0154\u0155\u0158\u2039\u203A\u0159\u0156\u0157\u0160\u201A\u201E\u0161\u015A\u015B\xC1\u0164\u0165\xCD\u017D\u017E\u016A\xD3\xD4\u016B\u016E\xDA\u016F\u0170\u0171\u0172\u0173\xDD\xFD\u0137\u017B\u0141\u017C\u0122\u02C7"
},
"808": "cp808",
"ibm808": "cp808",
"cp808": {
"type": "_sbcs",
"chars": "\u0410\u0411\u0412\u0413\u0414\u0415\u0416\u0417\u0418\u0419\u041A\u041B\u041C\u041D\u041E\u041F\u0420\u0421\u0422\u0423\u0424\u0425\u0426\u0427\u0428\u0429\u042A\u042B\u042C\u042D\u042E\u042F\u0430\u0431\u0432\u0433\u0434\u0435\u0436\u0437\u0438\u0439\u043A\u043B\u043C\u043D\u043E\u043F\u2591\u2592\u2593\u2502\u2524\u2561\u2562\u2556\u2555\u2563\u2551\u2557\u255D\u255C\u255B\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u255E\u255F\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u2567\u2568\u2564\u2565\u2559\u2558\u2552\u2553\u256B\u256A\u2518\u250C\u2588\u2584\u258C\u2590\u2580\u0440\u0441\u0442\u0443\u0444\u0445\u0446\u0447\u0448\u0449\u044A\u044B\u044C\u044D\u044E\u044F\u0401\u0451\u0404\u0454\u0407\u0457\u040E\u045E\xB0\u2219\xB7\u221A\u2116\u20AC\u25A0\xA0"
},
"mik": {
"type": "_sbcs",
"chars": "\u0410\u0411\u0412\u0413\u0414\u0415\u0416\u0417\u0418\u0419\u041A\u041B\u041C\u041D\u041E\u041F\u0420\u0421\u0422\u0423\u0424\u0425\u0426\u0427\u0428\u0429\u042A\u042B\u042C\u042D\u042E\u042F\u0430\u0431\u0432\u0433\u0434\u0435\u0436\u0437\u0438\u0439\u043A\u043B\u043C\u043D\u043E\u043F\u0440\u0441\u0442\u0443\u0444\u0445\u0446\u0447\u0448\u0449\u044A\u044B\u044C\u044D\u044E\u044F\u2514\u2534\u252C\u251C\u2500\u253C\u2563\u2551\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u2510\u2591\u2592\u2593\u2502\u2524\u2116\xA7\u2557\u255D\u2518\u250C\u2588\u2584\u258C\u2590\u2580\u03B1\xDF\u0393\u03C0\u03A3\u03C3\xB5\u03C4\u03A6\u0398\u03A9\u03B4\u221E\u03C6\u03B5\u2229\u2261\xB1\u2265\u2264\u2320\u2321\xF7\u2248\xB0\u2219\xB7\u221A\u207F\xB2\u25A0\xA0"
},
"cp720": {
"type": "_sbcs",
"chars": "\x80\x81\xE9\xE2\x84\xE0\x86\xE7\xEA\xEB\xE8\xEF\xEE\x8D\x8E\x8F\x90\u0651\u0652\xF4\xA4\u0640\xFB\xF9\u0621\u0622\u0623\u0624\xA3\u0625\u0626\u0627\u0628\u0629\u062A\u062B\u062C\u062D\u062E\u062F\u0630\u0631\u0632\u0633\u0634\u0635\xAB\xBB\u2591\u2592\u2593\u2502\u2524\u2561\u2562\u2556\u2555\u2563\u2551\u2557\u255D\u255C\u255B\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u255E\u255F\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u2567\u2568\u2564\u2565\u2559\u2558\u2552\u2553\u256B\u256A\u2518\u250C\u2588\u2584\u258C\u2590\u2580\u0636\u0637\u0638\u0639\u063A\u0641\xB5\u0642\u0643\u0644\u0645\u0646\u0647\u0648\u0649\u064A\u2261\u064B\u064C\u064D\u064E\u064F\u0650\u2248\xB0\u2219\xB7\u221A\u207F\xB2\u25A0\xA0"
},
// Aliases of generated encodings.
"ascii8bit": "ascii",
"usascii": "ascii",
"ansix34": "ascii",
"ansix341968": "ascii",
"ansix341986": "ascii",
"csascii": "ascii",
"cp367": "ascii",
"ibm367": "ascii",
"isoir6": "ascii",
"iso646us": "ascii",
"iso646irv": "ascii",
"us": "ascii",
"latin1": "iso88591",
"latin2": "iso88592",
"latin3": "iso88593",
"latin4": "iso88594",
"latin5": "iso88599",
"latin6": "iso885910",
"latin7": "iso885913",
"latin8": "iso885914",
"latin9": "iso885915",
"latin10": "iso885916",
"csisolatin1": "iso88591",
"csisolatin2": "iso88592",
"csisolatin3": "iso88593",
"csisolatin4": "iso88594",
"csisolatincyrillic": "iso88595",
"csisolatinarabic": "iso88596",
"csisolatingreek": "iso88597",
"csisolatinhebrew": "iso88598",
"csisolatin5": "iso88599",
"csisolatin6": "iso885910",
"l1": "iso88591",
"l2": "iso88592",
"l3": "iso88593",
"l4": "iso88594",
"l5": "iso88599",
"l6": "iso885910",
"l7": "iso885913",
"l8": "iso885914",
"l9": "iso885915",
"l10": "iso885916",
"isoir14": "iso646jp",
"isoir57": "iso646cn",
"isoir100": "iso88591",
"isoir101": "iso88592",
"isoir109": "iso88593",
"isoir110": "iso88594",
"isoir144": "iso88595",
"isoir127": "iso88596",
"isoir126": "iso88597",
"isoir138": "iso88598",
"isoir148": "iso88599",
"isoir157": "iso885910",
"isoir166": "tis620",
"isoir179": "iso885913",
"isoir199": "iso885914",
"isoir203": "iso885915",
"isoir226": "iso885916",
"cp819": "iso88591",
"ibm819": "iso88591",
"cyrillic": "iso88595",
"arabic": "iso88596",
"arabic8": "iso88596",
"ecma114": "iso88596",
"asmo708": "iso88596",
"greek": "iso88597",
"greek8": "iso88597",
"ecma118": "iso88597",
"elot928": "iso88597",
"hebrew": "iso88598",
"hebrew8": "iso88598",
"turkish": "iso88599",
"turkish8": "iso88599",
"thai": "iso885911",
"thai8": "iso885911",
"celtic": "iso885914",
"celtic8": "iso885914",
"isoceltic": "iso885914",
"tis6200": "tis620",
"tis62025291": "tis620",
"tis62025330": "tis620",
"10000": "macroman",
"10006": "macgreek",
"10007": "maccyrillic",
"10079": "maciceland",
"10081": "macturkish",
"cspc8codepage437": "cp437",
"cspc775baltic": "cp775",
"cspc850multilingual": "cp850",
"cspcp852": "cp852",
"cspc862latinhebrew": "cp862",
"cpgr": "cp869",
"msee": "cp1250",
"mscyrl": "cp1251",
"msansi": "cp1252",
"msgreek": "cp1253",
"msturk": "cp1254",
"mshebr": "cp1255",
"msarab": "cp1256",
"winbaltrim": "cp1257",
"cp20866": "koi8r",
"20866": "koi8r",
"ibm878": "koi8r",
"cskoi8r": "koi8r",
"cp21866": "koi8u",
"21866": "koi8u",
"ibm1168": "koi8u",
"strk10482002": "rk1048",
"tcvn5712": "tcvn",
"tcvn57121": "tcvn",
"gb198880": "iso646cn",
"cn": "iso646cn",
"csiso14jisc6220ro": "iso646jp",
"jisc62201969ro": "iso646jp",
"jp": "iso646jp",
"cshproman8": "hproman8",
"r8": "hproman8",
"roman8": "hproman8",
"xroman8": "hproman8",
"ibm1051": "hproman8",
"mac": "macintosh",
"csmacintosh": "macintosh"
};
}
});
var require_sbcs_data_generated2 = __commonJS2({
"node_modules/raw-body/node_modules/iconv-lite/encodings/sbcs-data-generated.js"(exports2, module2) {
"use strict";
module2.exports = {
"437": "cp437",
"737": "cp737",
"775": "cp775",
"850": "cp850",
"852": "cp852",
"855": "cp855",
"856": "cp856",
"857": "cp857",
"858": "cp858",
"860": "cp860",
"861": "cp861",
"862": "cp862",
"863": "cp863",
"864": "cp864",
"865": "cp865",
"866": "cp866",
"869": "cp869",
"874": "windows874",
"922": "cp922",
"1046": "cp1046",
"1124": "cp1124",
"1125": "cp1125",
"1129": "cp1129",
"1133": "cp1133",
"1161": "cp1161",
"1162": "cp1162",
"1163": "cp1163",
"1250": "windows1250",
"1251": "windows1251",
"1252": "windows1252",
"1253": "windows1253",
"1254": "windows1254",
"1255": "windows1255",
"1256": "windows1256",
"1257": "windows1257",
"1258": "windows1258",
"28591": "iso88591",
"28592": "iso88592",
"28593": "iso88593",
"28594": "iso88594",
"28595": "iso88595",
"28596": "iso88596",
"28597": "iso88597",
"28598": "iso88598",
"28599": "iso88599",
"28600": "iso885910",
"28601": "iso885911",
"28603": "iso885913",
"28604": "iso885914",
"28605": "iso885915",
"28606": "iso885916",
"windows874": {
"type": "_sbcs",
"chars": "\u20AC\uFFFD\uFFFD\uFFFD\uFFFD\u2026\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u2018\u2019\u201C\u201D\u2022\u2013\u2014\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\xA0\u0E01\u0E02\u0E03\u0E04\u0E05\u0E06\u0E07\u0E08\u0E09\u0E0A\u0E0B\u0E0C\u0E0D\u0E0E\u0E0F\u0E10\u0E11\u0E12\u0E13\u0E14\u0E15\u0E16\u0E17\u0E18\u0E19\u0E1A\u0E1B\u0E1C\u0E1D\u0E1E\u0E1F\u0E20\u0E21\u0E22\u0E23\u0E24\u0E25\u0E26\u0E27\u0E28\u0E29\u0E2A\u0E2B\u0E2C\u0E2D\u0E2E\u0E2F\u0E30\u0E31\u0E32\u0E33\u0E34\u0E35\u0E36\u0E37\u0E38\u0E39\u0E3A\uFFFD\uFFFD\uFFFD\uFFFD\u0E3F\u0E40\u0E41\u0E42\u0E43\u0E44\u0E45\u0E46\u0E47\u0E48\u0E49\u0E4A\u0E4B\u0E4C\u0E4D\u0E4E\u0E4F\u0E50\u0E51\u0E52\u0E53\u0E54\u0E55\u0E56\u0E57\u0E58\u0E59\u0E5A\u0E5B\uFFFD\uFFFD\uFFFD\uFFFD"
},
"win874": "windows874",
"cp874": "windows874",
"windows1250": {
"type": "_sbcs",
"chars": "\u20AC\uFFFD\u201A\uFFFD\u201E\u2026\u2020\u2021\uFFFD\u2030\u0160\u2039\u015A\u0164\u017D\u0179\uFFFD\u2018\u2019\u201C\u201D\u2022\u2013\u2014\uFFFD\u2122\u0161\u203A\u015B\u0165\u017E\u017A\xA0\u02C7\u02D8\u0141\xA4\u0104\xA6\xA7\xA8\xA9\u015E\xAB\xAC\xAD\xAE\u017B\xB0\xB1\u02DB\u0142\xB4\xB5\xB6\xB7\xB8\u0105\u015F\xBB\u013D\u02DD\u013E\u017C\u0154\xC1\xC2\u0102\xC4\u0139\u0106\xC7\u010C\xC9\u0118\xCB\u011A\xCD\xCE\u010E\u0110\u0143\u0147\xD3\xD4\u0150\xD6\xD7\u0158\u016E\xDA\u0170\xDC\xDD\u0162\xDF\u0155\xE1\xE2\u0103\xE4\u013A\u0107\xE7\u010D\xE9\u0119\xEB\u011B\xED\xEE\u010F\u0111\u0144\u0148\xF3\xF4\u0151\xF6\xF7\u0159\u016F\xFA\u0171\xFC\xFD\u0163\u02D9"
},
"win1250": "windows1250",
"cp1250": "windows1250",
"windows1251": {
"type": "_sbcs",
"chars": "\u0402\u0403\u201A\u0453\u201E\u2026\u2020\u2021\u20AC\u2030\u0409\u2039\u040A\u040C\u040B\u040F\u0452\u2018\u2019\u201C\u201D\u2022\u2013\u2014\uFFFD\u2122\u0459\u203A\u045A\u045C\u045B\u045F\xA0\u040E\u045E\u0408\xA4\u0490\xA6\xA7\u0401\xA9\u0404\xAB\xAC\xAD\xAE\u0407\xB0\xB1\u0406\u0456\u0491\xB5\xB6\xB7\u0451\u2116\u0454\xBB\u0458\u0405\u0455\u0457\u0410\u0411\u0412\u0413\u0414\u0415\u0416\u0417\u0418\u0419\u041A\u041B\u041C\u041D\u041E\u041F\u0420\u0421\u0422\u0423\u0424\u0425\u0426\u0427\u0428\u0429\u042A\u042B\u042C\u042D\u042E\u042F\u0430\u0431\u0432\u0433\u0434\u0435\u0436\u0437\u0438\u0439\u043A\u043B\u043C\u043D\u043E\u043F\u0440\u0441\u0442\u0443\u0444\u0445\u0446\u0447\u0448\u0449\u044A\u044B\u044C\u044D\u044E\u044F"
},
"win1251": "windows1251",
"cp1251": "windows1251",
"windows1252": {
"type": "_sbcs",
"chars": "\u20AC\uFFFD\u201A\u0192\u201E\u2026\u2020\u2021\u02C6\u2030\u0160\u2039\u0152\uFFFD\u017D\uFFFD\uFFFD\u2018\u2019\u201C\u201D\u2022\u2013\u2014\u02DC\u2122\u0161\u203A\u0153\uFFFD\u017E\u0178\xA0\xA1\xA2\xA3\xA4\xA5\xA6\xA7\xA8\xA9\xAA\xAB\xAC\xAD\xAE\xAF\xB0\xB1\xB2\xB3\xB4\xB5\xB6\xB7\xB8\xB9\xBA\xBB\xBC\xBD\xBE\xBF\xC0\xC1\xC2\xC3\xC4\xC5\xC6\xC7\xC8\xC9\xCA\xCB\xCC\xCD\xCE\xCF\xD0\xD1\xD2\xD3\xD4\xD5\xD6\xD7\xD8\xD9\xDA\xDB\xDC\xDD\xDE\xDF\xE0\xE1\xE2\xE3\xE4\xE5\xE6\xE7\xE8\xE9\xEA\xEB\xEC\xED\xEE\xEF\xF0\xF1\xF2\xF3\xF4\xF5\xF6\xF7\xF8\xF9\xFA\xFB\xFC\xFD\xFE\xFF"
},
"win1252": "windows1252",
"cp1252": "windows1252",
"windows1253": {
"type": "_sbcs",
"chars": "\u20AC\uFFFD\u201A\u0192\u201E\u2026\u2020\u2021\uFFFD\u2030\uFFFD\u2039\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u2018\u2019\u201C\u201D\u2022\u2013\u2014\uFFFD\u2122\uFFFD\u203A\uFFFD\uFFFD\uFFFD\uFFFD\xA0\u0385\u0386\xA3\xA4\xA5\xA6\xA7\xA8\xA9\uFFFD\xAB\xAC\xAD\xAE\u2015\xB0\xB1\xB2\xB3\u0384\xB5\xB6\xB7\u0388\u0389\u038A\xBB\u038C\xBD\u038E\u038F\u0390\u0391\u0392\u0393\u0394\u0395\u0396\u0397\u0398\u0399\u039A\u039B\u039C\u039D\u039E\u039F\u03A0\u03A1\uFFFD\u03A3\u03A4\u03A5\u03A6\u03A7\u03A8\u03A9\u03AA\u03AB\u03AC\u03AD\u03AE\u03AF\u03B0\u03B1\u03B2\u03B3\u03B4\u03B5\u03B6\u03B7\u03B8\u03B9\u03BA\u03BB\u03BC\u03BD\u03BE\u03BF\u03C0\u03C1\u03C2\u03C3\u03C4\u03C5\u03C6\u03C7\u03C8\u03C9\u03CA\u03CB\u03CC\u03CD\u03CE\uFFFD"
},
"win1253": "windows1253",
"cp1253": "windows1253",
"windows1254": {
"type": "_sbcs",
"chars": "\u20AC\uFFFD\u201A\u0192\u201E\u2026\u2020\u2021\u02C6\u2030\u0160\u2039\u0152\uFFFD\uFFFD\uFFFD\uFFFD\u2018\u2019\u201C\u201D\u2022\u2013\u2014\u02DC\u2122\u0161\u203A\u0153\uFFFD\uFFFD\u0178\xA0\xA1\xA2\xA3\xA4\xA5\xA6\xA7\xA8\xA9\xAA\xAB\xAC\xAD\xAE\xAF\xB0\xB1\xB2\xB3\xB4\xB5\xB6\xB7\xB8\xB9\xBA\xBB\xBC\xBD\xBE\xBF\xC0\xC1\xC2\xC3\xC4\xC5\xC6\xC7\xC8\xC9\xCA\xCB\xCC\xCD\xCE\xCF\u011E\xD1\xD2\xD3\xD4\xD5\xD6\xD7\xD8\xD9\xDA\xDB\xDC\u0130\u015E\xDF\xE0\xE1\xE2\xE3\xE4\xE5\xE6\xE7\xE8\xE9\xEA\xEB\xEC\xED\xEE\xEF\u011F\xF1\xF2\xF3\xF4\xF5\xF6\xF7\xF8\xF9\xFA\xFB\xFC\u0131\u015F\xFF"
},
"win1254": "windows1254",
"cp1254": "windows1254",
"windows1255": {
"type": "_sbcs",
"chars": "\u20AC\uFFFD\u201A\u0192\u201E\u2026\u2020\u2021\u02C6\u2030\uFFFD\u2039\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u2018\u2019\u201C\u201D\u2022\u2013\u2014\u02DC\u2122\uFFFD\u203A\uFFFD\uFFFD\uFFFD\uFFFD\xA0\xA1\xA2\xA3\u20AA\xA5\xA6\xA7\xA8\xA9\xD7\xAB\xAC\xAD\xAE\xAF\xB0\xB1\xB2\xB3\xB4\xB5\xB6\xB7\xB8\xB9\xF7\xBB\xBC\xBD\xBE\xBF\u05B0\u05B1\u05B2\u05B3\u05B4\u05B5\u05B6\u05B7\u05B8\u05B9\u05BA\u05BB\u05BC\u05BD\u05BE\u05BF\u05C0\u05C1\u05C2\u05C3\u05F0\u05F1\u05F2\u05F3\u05F4\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u05D0\u05D1\u05D2\u05D3\u05D4\u05D5\u05D6\u05D7\u05D8\u05D9\u05DA\u05DB\u05DC\u05DD\u05DE\u05DF\u05E0\u05E1\u05E2\u05E3\u05E4\u05E5\u05E6\u05E7\u05E8\u05E9\u05EA\uFFFD\uFFFD\u200E\u200F\uFFFD"
},
"win1255": "windows1255",
"cp1255": "windows1255",
"windows1256": {
"type": "_sbcs",
"chars": "\u20AC\u067E\u201A\u0192\u201E\u2026\u2020\u2021\u02C6\u2030\u0679\u2039\u0152\u0686\u0698\u0688\u06AF\u2018\u2019\u201C\u201D\u2022\u2013\u2014\u06A9\u2122\u0691\u203A\u0153\u200C\u200D\u06BA\xA0\u060C\xA2\xA3\xA4\xA5\xA6\xA7\xA8\xA9\u06BE\xAB\xAC\xAD\xAE\xAF\xB0\xB1\xB2\xB3\xB4\xB5\xB6\xB7\xB8\xB9\u061B\xBB\xBC\xBD\xBE\u061F\u06C1\u0621\u0622\u0623\u0624\u0625\u0626\u0627\u0628\u0629\u062A\u062B\u062C\u062D\u062E\u062F\u0630\u0631\u0632\u0633\u0634\u0635\u0636\xD7\u0637\u0638\u0639\u063A\u0640\u0641\u0642\u0643\xE0\u0644\xE2\u0645\u0646\u0647\u0648\xE7\xE8\xE9\xEA\xEB\u0649\u064A\xEE\xEF\u064B\u064C\u064D\u064E\xF4\u064F\u0650\xF7\u0651\xF9\u0652\xFB\xFC\u200E\u200F\u06D2"
},
"win1256": "windows1256",
"cp1256": "windows1256",
"windows1257": {
"type": "_sbcs",
"chars": "\u20AC\uFFFD\u201A\uFFFD\u201E\u2026\u2020\u2021\uFFFD\u2030\uFFFD\u2039\uFFFD\xA8\u02C7\xB8\uFFFD\u2018\u2019\u201C\u201D\u2022\u2013\u2014\uFFFD\u2122\uFFFD\u203A\uFFFD\xAF\u02DB\uFFFD\xA0\uFFFD\xA2\xA3\xA4\uFFFD\xA6\xA7\xD8\xA9\u0156\xAB\xAC\xAD\xAE\xC6\xB0\xB1\xB2\xB3\xB4\xB5\xB6\xB7\xF8\xB9\u0157\xBB\xBC\xBD\xBE\xE6\u0104\u012E\u0100\u0106\xC4\xC5\u0118\u0112\u010C\xC9\u0179\u0116\u0122\u0136\u012A\u013B\u0160\u0143\u0145\xD3\u014C\xD5\xD6\xD7\u0172\u0141\u015A\u016A\xDC\u017B\u017D\xDF\u0105\u012F\u0101\u0107\xE4\xE5\u0119\u0113\u010D\xE9\u017A\u0117\u0123\u0137\u012B\u013C\u0161\u0144\u0146\xF3\u014D\xF5\xF6\xF7\u0173\u0142\u015B\u016B\xFC\u017C\u017E\u02D9"
},
"win1257": "windows1257",
"cp1257": "windows1257",
"windows1258": {
"type": "_sbcs",
"chars": "\u20AC\uFFFD\u201A\u0192\u201E\u2026\u2020\u2021\u02C6\u2030\uFFFD\u2039\u0152\uFFFD\uFFFD\uFFFD\uFFFD\u2018\u2019\u201C\u201D\u2022\u2013\u2014\u02DC\u2122\uFFFD\u203A\u0153\uFFFD\uFFFD\u0178\xA0\xA1\xA2\xA3\xA4\xA5\xA6\xA7\xA8\xA9\xAA\xAB\xAC\xAD\xAE\xAF\xB0\xB1\xB2\xB3\xB4\xB5\xB6\xB7\xB8\xB9\xBA\xBB\xBC\xBD\xBE\xBF\xC0\xC1\xC2\u0102\xC4\xC5\xC6\xC7\xC8\xC9\xCA\xCB\u0300\xCD\xCE\xCF\u0110\xD1\u0309\xD3\xD4\u01A0\xD6\xD7\xD8\xD9\xDA\xDB\xDC\u01AF\u0303\xDF\xE0\xE1\xE2\u0103\xE4\xE5\xE6\xE7\xE8\xE9\xEA\xEB\u0301\xED\xEE\xEF\u0111\xF1\u0323\xF3\xF4\u01A1\xF6\xF7\xF8\xF9\xFA\xFB\xFC\u01B0\u20AB\xFF"
},
"win1258": "windows1258",
"cp1258": "windows1258",
"iso88591": {
"type": "_sbcs",
"chars": "\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8A\x8B\x8C\x8D\x8E\x8F\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9A\x9B\x9C\x9D\x9E\x9F\xA0\xA1\xA2\xA3\xA4\xA5\xA6\xA7\xA8\xA9\xAA\xAB\xAC\xAD\xAE\xAF\xB0\xB1\xB2\xB3\xB4\xB5\xB6\xB7\xB8\xB9\xBA\xBB\xBC\xBD\xBE\xBF\xC0\xC1\xC2\xC3\xC4\xC5\xC6\xC7\xC8\xC9\xCA\xCB\xCC\xCD\xCE\xCF\xD0\xD1\xD2\xD3\xD4\xD5\xD6\xD7\xD8\xD9\xDA\xDB\xDC\xDD\xDE\xDF\xE0\xE1\xE2\xE3\xE4\xE5\xE6\xE7\xE8\xE9\xEA\xEB\xEC\xED\xEE\xEF\xF0\xF1\xF2\xF3\xF4\xF5\xF6\xF7\xF8\xF9\xFA\xFB\xFC\xFD\xFE\xFF"
},
"cp28591": "iso88591",
"iso88592": {
"type": "_sbcs",
"chars": "\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8A\x8B\x8C\x8D\x8E\x8F\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9A\x9B\x9C\x9D\x9E\x9F\xA0\u0104\u02D8\u0141\xA4\u013D\u015A\xA7\xA8\u0160\u015E\u0164\u0179\xAD\u017D\u017B\xB0\u0105\u02DB\u0142\xB4\u013E\u015B\u02C7\xB8\u0161\u015F\u0165\u017A\u02DD\u017E\u017C\u0154\xC1\xC2\u0102\xC4\u0139\u0106\xC7\u010C\xC9\u0118\xCB\u011A\xCD\xCE\u010E\u0110\u0143\u0147\xD3\xD4\u0150\xD6\xD7\u0158\u016E\xDA\u0170\xDC\xDD\u0162\xDF\u0155\xE1\xE2\u0103\xE4\u013A\u0107\xE7\u010D\xE9\u0119\xEB\u011B\xED\xEE\u010F\u0111\u0144\u0148\xF3\xF4\u0151\xF6\xF7\u0159\u016F\xFA\u0171\xFC\xFD\u0163\u02D9"
},
"cp28592": "iso88592",
"iso88593": {
"type": "_sbcs",
"chars": "\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8A\x8B\x8C\x8D\x8E\x8F\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9A\x9B\x9C\x9D\x9E\x9F\xA0\u0126\u02D8\xA3\xA4\uFFFD\u0124\xA7\xA8\u0130\u015E\u011E\u0134\xAD\uFFFD\u017B\xB0\u0127\xB2\xB3\xB4\xB5\u0125\xB7\xB8\u0131\u015F\u011F\u0135\xBD\uFFFD\u017C\xC0\xC1\xC2\uFFFD\xC4\u010A\u0108\xC7\xC8\xC9\xCA\xCB\xCC\xCD\xCE\xCF\uFFFD\xD1\xD2\xD3\xD4\u0120\xD6\xD7\u011C\xD9\xDA\xDB\xDC\u016C\u015C\xDF\xE0\xE1\xE2\uFFFD\xE4\u010B\u0109\xE7\xE8\xE9\xEA\xEB\xEC\xED\xEE\xEF\uFFFD\xF1\xF2\xF3\xF4\u0121\xF6\xF7\u011D\xF9\xFA\xFB\xFC\u016D\u015D\u02D9"
},
"cp28593": "iso88593",
"iso88594": {
"type": "_sbcs",
"chars": "\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8A\x8B\x8C\x8D\x8E\x8F\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9A\x9B\x9C\x9D\x9E\x9F\xA0\u0104\u0138\u0156\xA4\u0128\u013B\xA7\xA8\u0160\u0112\u0122\u0166\xAD\u017D\xAF\xB0\u0105\u02DB\u0157\xB4\u0129\u013C\u02C7\xB8\u0161\u0113\u0123\u0167\u014A\u017E\u014B\u0100\xC1\xC2\xC3\xC4\xC5\xC6\u012E\u010C\xC9\u0118\xCB\u0116\xCD\xCE\u012A\u0110\u0145\u014C\u0136\xD4\xD5\xD6\xD7\xD8\u0172\xDA\xDB\xDC\u0168\u016A\xDF\u0101\xE1\xE2\xE3\xE4\xE5\xE6\u012F\u010D\xE9\u0119\xEB\u0117\xED\xEE\u012B\u0111\u0146\u014D\u0137\xF4\xF5\xF6\xF7\xF8\u0173\xFA\xFB\xFC\u0169\u016B\u02D9"
},
"cp28594": "iso88594",
"iso88595": {
"type": "_sbcs",
"chars": "\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8A\x8B\x8C\x8D\x8E\x8F\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9A\x9B\x9C\x9D\x9E\x9F\xA0\u0401\u0402\u0403\u0404\u0405\u0406\u0407\u0408\u0409\u040A\u040B\u040C\xAD\u040E\u040F\u0410\u0411\u0412\u0413\u0414\u0415\u0416\u0417\u0418\u0419\u041A\u041B\u041C\u041D\u041E\u041F\u0420\u0421\u0422\u0423\u0424\u0425\u0426\u0427\u0428\u0429\u042A\u042B\u042C\u042D\u042E\u042F\u0430\u0431\u0432\u0433\u0434\u0435\u0436\u0437\u0438\u0439\u043A\u043B\u043C\u043D\u043E\u043F\u0440\u0441\u0442\u0443\u0444\u0445\u0446\u0447\u0448\u0449\u044A\u044B\u044C\u044D\u044E\u044F\u2116\u0451\u0452\u0453\u0454\u0455\u0456\u0457\u0458\u0459\u045A\u045B\u045C\xA7\u045E\u045F"
},
"cp28595": "iso88595",
"iso88596": {
"type": "_sbcs",
"chars": "\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8A\x8B\x8C\x8D\x8E\x8F\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9A\x9B\x9C\x9D\x9E\x9F\xA0\uFFFD\uFFFD\uFFFD\xA4\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u060C\xAD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u061B\uFFFD\uFFFD\uFFFD\u061F\uFFFD\u0621\u0622\u0623\u0624\u0625\u0626\u0627\u0628\u0629\u062A\u062B\u062C\u062D\u062E\u062F\u0630\u0631\u0632\u0633\u0634\u0635\u0636\u0637\u0638\u0639\u063A\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u0640\u0641\u0642\u0643\u0644\u0645\u0646\u0647\u0648\u0649\u064A\u064B\u064C\u064D\u064E\u064F\u0650\u0651\u0652\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"
},
"cp28596": "iso88596",
"iso88597": {
"type": "_sbcs",
"chars": "\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8A\x8B\x8C\x8D\x8E\x8F\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9A\x9B\x9C\x9D\x9E\x9F\xA0\u2018\u2019\xA3\u20AC\u20AF\xA6\xA7\xA8\xA9\u037A\xAB\xAC\xAD\uFFFD\u2015\xB0\xB1\xB2\xB3\u0384\u0385\u0386\xB7\u0388\u0389\u038A\xBB\u038C\xBD\u038E\u038F\u0390\u0391\u0392\u0393\u0394\u0395\u0396\u0397\u0398\u0399\u039A\u039B\u039C\u039D\u039E\u039F\u03A0\u03A1\uFFFD\u03A3\u03A4\u03A5\u03A6\u03A7\u03A8\u03A9\u03AA\u03AB\u03AC\u03AD\u03AE\u03AF\u03B0\u03B1\u03B2\u03B3\u03B4\u03B5\u03B6\u03B7\u03B8\u03B9\u03BA\u03BB\u03BC\u03BD\u03BE\u03BF\u03C0\u03C1\u03C2\u03C3\u03C4\u03C5\u03C6\u03C7\u03C8\u03C9\u03CA\u03CB\u03CC\u03CD\u03CE\uFFFD"
},
"cp28597": "iso88597",
"iso88598": {
"type": "_sbcs",
"chars": "\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8A\x8B\x8C\x8D\x8E\x8F\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9A\x9B\x9C\x9D\x9E\x9F\xA0\uFFFD\xA2\xA3\xA4\xA5\xA6\xA7\xA8\xA9\xD7\xAB\xAC\xAD\xAE\xAF\xB0\xB1\xB2\xB3\xB4\xB5\xB6\xB7\xB8\xB9\xF7\xBB\xBC\xBD\xBE\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u2017\u05D0\u05D1\u05D2\u05D3\u05D4\u05D5\u05D6\u05D7\u05D8\u05D9\u05DA\u05DB\u05DC\u05DD\u05DE\u05DF\u05E0\u05E1\u05E2\u05E3\u05E4\u05E5\u05E6\u05E7\u05E8\u05E9\u05EA\uFFFD\uFFFD\u200E\u200F\uFFFD"
},
"cp28598": "iso88598",
"iso88599": {
"type": "_sbcs",
"chars": "\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8A\x8B\x8C\x8D\x8E\x8F\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9A\x9B\x9C\x9D\x9E\x9F\xA0\xA1\xA2\xA3\xA4\xA5\xA6\xA7\xA8\xA9\xAA\xAB\xAC\xAD\xAE\xAF\xB0\xB1\xB2\xB3\xB4\xB5\xB6\xB7\xB8\xB9\xBA\xBB\xBC\xBD\xBE\xBF\xC0\xC1\xC2\xC3\xC4\xC5\xC6\xC7\xC8\xC9\xCA\xCB\xCC\xCD\xCE\xCF\u011E\xD1\xD2\xD3\xD4\xD5\xD6\xD7\xD8\xD9\xDA\xDB\xDC\u0130\u015E\xDF\xE0\xE1\xE2\xE3\xE4\xE5\xE6\xE7\xE8\xE9\xEA\xEB\xEC\xED\xEE\xEF\u011F\xF1\xF2\xF3\xF4\xF5\xF6\xF7\xF8\xF9\xFA\xFB\xFC\u0131\u015F\xFF"
},
"cp28599": "iso88599",
"iso885910": {
"type": "_sbcs",
"chars": "\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8A\x8B\x8C\x8D\x8E\x8F\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9A\x9B\x9C\x9D\x9E\x9F\xA0\u0104\u0112\u0122\u012A\u0128\u0136\xA7\u013B\u0110\u0160\u0166\u017D\xAD\u016A\u014A\xB0\u0105\u0113\u0123\u012B\u0129\u0137\xB7\u013C\u0111\u0161\u0167\u017E\u2015\u016B\u014B\u0100\xC1\xC2\xC3\xC4\xC5\xC6\u012E\u010C\xC9\u0118\xCB\u0116\xCD\xCE\xCF\xD0\u0145\u014C\xD3\xD4\xD5\xD6\u0168\xD8\u0172\xDA\xDB\xDC\xDD\xDE\xDF\u0101\xE1\xE2\xE3\xE4\xE5\xE6\u012F\u010D\xE9\u0119\xEB\u0117\xED\xEE\xEF\xF0\u0146\u014D\xF3\xF4\xF5\xF6\u0169\xF8\u0173\xFA\xFB\xFC\xFD\xFE\u0138"
},
"cp28600": "iso885910",
"iso885911": {
"type": "_sbcs",
"chars": "\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8A\x8B\x8C\x8D\x8E\x8F\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9A\x9B\x9C\x9D\x9E\x9F\xA0\u0E01\u0E02\u0E03\u0E04\u0E05\u0E06\u0E07\u0E08\u0E09\u0E0A\u0E0B\u0E0C\u0E0D\u0E0E\u0E0F\u0E10\u0E11\u0E12\u0E13\u0E14\u0E15\u0E16\u0E17\u0E18\u0E19\u0E1A\u0E1B\u0E1C\u0E1D\u0E1E\u0E1F\u0E20\u0E21\u0E22\u0E23\u0E24\u0E25\u0E26\u0E27\u0E28\u0E29\u0E2A\u0E2B\u0E2C\u0E2D\u0E2E\u0E2F\u0E30\u0E31\u0E32\u0E33\u0E34\u0E35\u0E36\u0E37\u0E38\u0E39\u0E3A\uFFFD\uFFFD\uFFFD\uFFFD\u0E3F\u0E40\u0E41\u0E42\u0E43\u0E44\u0E45\u0E46\u0E47\u0E48\u0E49\u0E4A\u0E4B\u0E4C\u0E4D\u0E4E\u0E4F\u0E50\u0E51\u0E52\u0E53\u0E54\u0E55\u0E56\u0E57\u0E58\u0E59\u0E5A\u0E5B\uFFFD\uFFFD\uFFFD\uFFFD"
},
"cp28601": "iso885911",
"iso885913": {
"type": "_sbcs",
"chars": "\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8A\x8B\x8C\x8D\x8E\x8F\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9A\x9B\x9C\x9D\x9E\x9F\xA0\u201D\xA2\xA3\xA4\u201E\xA6\xA7\xD8\xA9\u0156\xAB\xAC\xAD\xAE\xC6\xB0\xB1\xB2\xB3\u201C\xB5\xB6\xB7\xF8\xB9\u0157\xBB\xBC\xBD\xBE\xE6\u0104\u012E\u0100\u0106\xC4\xC5\u0118\u0112\u010C\xC9\u0179\u0116\u0122\u0136\u012A\u013B\u0160\u0143\u0145\xD3\u014C\xD5\xD6\xD7\u0172\u0141\u015A\u016A\xDC\u017B\u017D\xDF\u0105\u012F\u0101\u0107\xE4\xE5\u0119\u0113\u010D\xE9\u017A\u0117\u0123\u0137\u012B\u013C\u0161\u0144\u0146\xF3\u014D\xF5\xF6\xF7\u0173\u0142\u015B\u016B\xFC\u017C\u017E\u2019"
},
"cp28603": "iso885913",
"iso885914": {
"type": "_sbcs",
"chars": "\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8A\x8B\x8C\x8D\x8E\x8F\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9A\x9B\x9C\x9D\x9E\x9F\xA0\u1E02\u1E03\xA3\u010A\u010B\u1E0A\xA7\u1E80\xA9\u1E82\u1E0B\u1EF2\xAD\xAE\u0178\u1E1E\u1E1F\u0120\u0121\u1E40\u1E41\xB6\u1E56\u1E81\u1E57\u1E83\u1E60\u1EF3\u1E84\u1E85\u1E61\xC0\xC1\xC2\xC3\xC4\xC5\xC6\xC7\xC8\xC9\xCA\xCB\xCC\xCD\xCE\xCF\u0174\xD1\xD2\xD3\xD4\xD5\xD6\u1E6A\xD8\xD9\xDA\xDB\xDC\xDD\u0176\xDF\xE0\xE1\xE2\xE3\xE4\xE5\xE6\xE7\xE8\xE9\xEA\xEB\xEC\xED\xEE\xEF\u0175\xF1\xF2\xF3\xF4\xF5\xF6\u1E6B\xF8\xF9\xFA\xFB\xFC\xFD\u0177\xFF"
},
"cp28604": "iso885914",
"iso885915": {
"type": "_sbcs",
"chars": "\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8A\x8B\x8C\x8D\x8E\x8F\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9A\x9B\x9C\x9D\x9E\x9F\xA0\xA1\xA2\xA3\u20AC\xA5\u0160\xA7\u0161\xA9\xAA\xAB\xAC\xAD\xAE\xAF\xB0\xB1\xB2\xB3\u017D\xB5\xB6\xB7\u017E\xB9\xBA\xBB\u0152\u0153\u0178\xBF\xC0\xC1\xC2\xC3\xC4\xC5\xC6\xC7\xC8\xC9\xCA\xCB\xCC\xCD\xCE\xCF\xD0\xD1\xD2\xD3\xD4\xD5\xD6\xD7\xD8\xD9\xDA\xDB\xDC\xDD\xDE\xDF\xE0\xE1\xE2\xE3\xE4\xE5\xE6\xE7\xE8\xE9\xEA\xEB\xEC\xED\xEE\xEF\xF0\xF1\xF2\xF3\xF4\xF5\xF6\xF7\xF8\xF9\xFA\xFB\xFC\xFD\xFE\xFF"
},
"cp28605": "iso885915",
"iso885916": {
"type": "_sbcs",
"chars": "\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8A\x8B\x8C\x8D\x8E\x8F\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9A\x9B\x9C\x9D\x9E\x9F\xA0\u0104\u0105\u0141\u20AC\u201E\u0160\xA7\u0161\xA9\u0218\xAB\u0179\xAD\u017A\u017B\xB0\xB1\u010C\u0142\u017D\u201D\xB6\xB7\u017E\u010D\u0219\xBB\u0152\u0153\u0178\u017C\xC0\xC1\xC2\u0102\xC4\u0106\xC6\xC7\xC8\xC9\xCA\xCB\xCC\xCD\xCE\xCF\u0110\u0143\xD2\xD3\xD4\u0150\xD6\u015A\u0170\xD9\xDA\xDB\xDC\u0118\u021A\xDF\xE0\xE1\xE2\u0103\xE4\u0107\xE6\xE7\xE8\xE9\xEA\xEB\xEC\xED\xEE\xEF\u0111\u0144\xF2\xF3\xF4\u0151\xF6\u015B\u0171\xF9\xFA\xFB\xFC\u0119\u021B\xFF"
},
"cp28606": "iso885916",
"cp437": {
"type": "_sbcs",
"chars": "\xC7\xFC\xE9\xE2\xE4\xE0\xE5\xE7\xEA\xEB\xE8\xEF\xEE\xEC\xC4\xC5\xC9\xE6\xC6\xF4\xF6\xF2\xFB\xF9\xFF\xD6\xDC\xA2\xA3\xA5\u20A7\u0192\xE1\xED\xF3\xFA\xF1\xD1\xAA\xBA\xBF\u2310\xAC\xBD\xBC\xA1\xAB\xBB\u2591\u2592\u2593\u2502\u2524\u2561\u2562\u2556\u2555\u2563\u2551\u2557\u255D\u255C\u255B\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u255E\u255F\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u2567\u2568\u2564\u2565\u2559\u2558\u2552\u2553\u256B\u256A\u2518\u250C\u2588\u2584\u258C\u2590\u2580\u03B1\xDF\u0393\u03C0\u03A3\u03C3\xB5\u03C4\u03A6\u0398\u03A9\u03B4\u221E\u03C6\u03B5\u2229\u2261\xB1\u2265\u2264\u2320\u2321\xF7\u2248\xB0\u2219\xB7\u221A\u207F\xB2\u25A0\xA0"
},
"ibm437": "cp437",
"csibm437": "cp437",
"cp737": {
"type": "_sbcs",
"chars": "\u0391\u0392\u0393\u0394\u0395\u0396\u0397\u0398\u0399\u039A\u039B\u039C\u039D\u039E\u039F\u03A0\u03A1\u03A3\u03A4\u03A5\u03A6\u03A7\u03A8\u03A9\u03B1\u03B2\u03B3\u03B4\u03B5\u03B6\u03B7\u03B8\u03B9\u03BA\u03BB\u03BC\u03BD\u03BE\u03BF\u03C0\u03C1\u03C3\u03C2\u03C4\u03C5\u03C6\u03C7\u03C8\u2591\u2592\u2593\u2502\u2524\u2561\u2562\u2556\u2555\u2563\u2551\u2557\u255D\u255C\u255B\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u255E\u255F\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u2567\u2568\u2564\u2565\u2559\u2558\u2552\u2553\u256B\u256A\u2518\u250C\u2588\u2584\u258C\u2590\u2580\u03C9\u03AC\u03AD\u03AE\u03CA\u03AF\u03CC\u03CD\u03CB\u03CE\u0386\u0388\u0389\u038A\u038C\u038E\u038F\xB1\u2265\u2264\u03AA\u03AB\xF7\u2248\xB0\u2219\xB7\u221A\u207F\xB2\u25A0\xA0"
},
"ibm737": "cp737",
"csibm737": "cp737",
"cp775": {
"type": "_sbcs",
"chars": "\u0106\xFC\xE9\u0101\xE4\u0123\xE5\u0107\u0142\u0113\u0156\u0157\u012B\u0179\xC4\xC5\xC9\xE6\xC6\u014D\xF6\u0122\xA2\u015A\u015B\xD6\xDC\xF8\xA3\xD8\xD7\xA4\u0100\u012A\xF3\u017B\u017C\u017A\u201D\xA6\xA9\xAE\xAC\xBD\xBC\u0141\xAB\xBB\u2591\u2592\u2593\u2502\u2524\u0104\u010C\u0118\u0116\u2563\u2551\u2557\u255D\u012E\u0160\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u0172\u016A\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u017D\u0105\u010D\u0119\u0117\u012F\u0161\u0173\u016B\u017E\u2518\u250C\u2588\u2584\u258C\u2590\u2580\xD3\xDF\u014C\u0143\xF5\xD5\xB5\u0144\u0136\u0137\u013B\u013C\u0146\u0112\u0145\u2019\xAD\xB1\u201C\xBE\xB6\xA7\xF7\u201E\xB0\u2219\xB7\xB9\xB3\xB2\u25A0\xA0"
},
"ibm775": "cp775",
"csibm775": "cp775",
"cp850": {
"type": "_sbcs",
"chars": "\xC7\xFC\xE9\xE2\xE4\xE0\xE5\xE7\xEA\xEB\xE8\xEF\xEE\xEC\xC4\xC5\xC9\xE6\xC6\xF4\xF6\xF2\xFB\xF9\xFF\xD6\xDC\xF8\xA3\xD8\xD7\u0192\xE1\xED\xF3\xFA\xF1\xD1\xAA\xBA\xBF\xAE\xAC\xBD\xBC\xA1\xAB\xBB\u2591\u2592\u2593\u2502\u2524\xC1\xC2\xC0\xA9\u2563\u2551\u2557\u255D\xA2\xA5\u2510\u2514\u2534\u252C\u251C\u2500\u253C\xE3\xC3\u255A\u2554\u2569\u2566\u2560\u2550\u256C\xA4\xF0\xD0\xCA\xCB\xC8\u0131\xCD\xCE\xCF\u2518\u250C\u2588\u2584\xA6\xCC\u2580\xD3\xDF\xD4\xD2\xF5\xD5\xB5\xFE\xDE\xDA\xDB\xD9\xFD\xDD\xAF\xB4\xAD\xB1\u2017\xBE\xB6\xA7\xF7\xB8\xB0\xA8\xB7\xB9\xB3\xB2\u25A0\xA0"
},
"ibm850": "cp850",
"csibm850": "cp850",
"cp852": {
"type": "_sbcs",
"chars": "\xC7\xFC\xE9\xE2\xE4\u016F\u0107\xE7\u0142\xEB\u0150\u0151\xEE\u0179\xC4\u0106\xC9\u0139\u013A\xF4\xF6\u013D\u013E\u015A\u015B\xD6\xDC\u0164\u0165\u0141\xD7\u010D\xE1\xED\xF3\xFA\u0104\u0105\u017D\u017E\u0118\u0119\xAC\u017A\u010C\u015F\xAB\xBB\u2591\u2592\u2593\u2502\u2524\xC1\xC2\u011A\u015E\u2563\u2551\u2557\u255D\u017B\u017C\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u0102\u0103\u255A\u2554\u2569\u2566\u2560\u2550\u256C\xA4\u0111\u0110\u010E\xCB\u010F\u0147\xCD\xCE\u011B\u2518\u250C\u2588\u2584\u0162\u016E\u2580\xD3\xDF\xD4\u0143\u0144\u0148\u0160\u0161\u0154\xDA\u0155\u0170\xFD\xDD\u0163\xB4\xAD\u02DD\u02DB\u02C7\u02D8\xA7\xF7\xB8\xB0\xA8\u02D9\u0171\u0158\u0159\u25A0\xA0"
},
"ibm852": "cp852",
"csibm852": "cp852",
"cp855": {
"type": "_sbcs",
"chars": "\u0452\u0402\u0453\u0403\u0451\u0401\u0454\u0404\u0455\u0405\u0456\u0406\u0457\u0407\u0458\u0408\u0459\u0409\u045A\u040A\u045B\u040B\u045C\u040C\u045E\u040E\u045F\u040F\u044E\u042E\u044A\u042A\u0430\u0410\u0431\u0411\u0446\u0426\u0434\u0414\u0435\u0415\u0444\u0424\u0433\u0413\xAB\xBB\u2591\u2592\u2593\u2502\u2524\u0445\u0425\u0438\u0418\u2563\u2551\u2557\u255D\u0439\u0419\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u043A\u041A\u255A\u2554\u2569\u2566\u2560\u2550\u256C\xA4\u043B\u041B\u043C\u041C\u043D\u041D\u043E\u041E\u043F\u2518\u250C\u2588\u2584\u041F\u044F\u2580\u042F\u0440\u0420\u0441\u0421\u0442\u0422\u0443\u0423\u0436\u0416\u0432\u0412\u044C\u042C\u2116\xAD\u044B\u042B\u0437\u0417\u0448\u0428\u044D\u042D\u0449\u0429\u0447\u0427\xA7\u25A0\xA0"
},
"ibm855": "cp855",
"csibm855": "cp855",
"cp856": {
"type": "_sbcs",
"chars": "\u05D0\u05D1\u05D2\u05D3\u05D4\u05D5\u05D6\u05D7\u05D8\u05D9\u05DA\u05DB\u05DC\u05DD\u05DE\u05DF\u05E0\u05E1\u05E2\u05E3\u05E4\u05E5\u05E6\u05E7\u05E8\u05E9\u05EA\uFFFD\xA3\uFFFD\xD7\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\xAE\xAC\xBD\xBC\uFFFD\xAB\xBB\u2591\u2592\u2593\u2502\u2524\uFFFD\uFFFD\uFFFD\xA9\u2563\u2551\u2557\u255D\xA2\xA5\u2510\u2514\u2534\u252C\u251C\u2500\u253C\uFFFD\uFFFD\u255A\u2554\u2569\u2566\u2560\u2550\u256C\xA4\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u2518\u250C\u2588\u2584\xA6\uFFFD\u2580\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\xB5\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\xAF\xB4\xAD\xB1\u2017\xBE\xB6\xA7\xF7\xB8\xB0\xA8\xB7\xB9\xB3\xB2\u25A0\xA0"
},
"ibm856": "cp856",
"csibm856": "cp856",
"cp857": {
"type": "_sbcs",
"chars": "\xC7\xFC\xE9\xE2\xE4\xE0\xE5\xE7\xEA\xEB\xE8\xEF\xEE\u0131\xC4\xC5\xC9\xE6\xC6\xF4\xF6\xF2\xFB\xF9\u0130\xD6\xDC\xF8\xA3\xD8\u015E\u015F\xE1\xED\xF3\xFA\xF1\xD1\u011E\u011F\xBF\xAE\xAC\xBD\xBC\xA1\xAB\xBB\u2591\u2592\u2593\u2502\u2524\xC1\xC2\xC0\xA9\u2563\u2551\u2557\u255D\xA2\xA5\u2510\u2514\u2534\u252C\u251C\u2500\u253C\xE3\xC3\u255A\u2554\u2569\u2566\u2560\u2550\u256C\xA4\xBA\xAA\xCA\xCB\xC8\uFFFD\xCD\xCE\xCF\u2518\u250C\u2588\u2584\xA6\xCC\u2580\xD3\xDF\xD4\xD2\xF5\xD5\xB5\uFFFD\xD7\xDA\xDB\xD9\xEC\xFF\xAF\xB4\xAD\xB1\uFFFD\xBE\xB6\xA7\xF7\xB8\xB0\xA8\xB7\xB9\xB3\xB2\u25A0\xA0"
},
"ibm857": "cp857",
"csibm857": "cp857",
"cp858": {
"type": "_sbcs",
"chars": "\xC7\xFC\xE9\xE2\xE4\xE0\xE5\xE7\xEA\xEB\xE8\xEF\xEE\xEC\xC4\xC5\xC9\xE6\xC6\xF4\xF6\xF2\xFB\xF9\xFF\xD6\xDC\xF8\xA3\xD8\xD7\u0192\xE1\xED\xF3\xFA\xF1\xD1\xAA\xBA\xBF\xAE\xAC\xBD\xBC\xA1\xAB\xBB\u2591\u2592\u2593\u2502\u2524\xC1\xC2\xC0\xA9\u2563\u2551\u2557\u255D\xA2\xA5\u2510\u2514\u2534\u252C\u251C\u2500\u253C\xE3\xC3\u255A\u2554\u2569\u2566\u2560\u2550\u256C\xA4\xF0\xD0\xCA\xCB\xC8\u20AC\xCD\xCE\xCF\u2518\u250C\u2588\u2584\xA6\xCC\u2580\xD3\xDF\xD4\xD2\xF5\xD5\xB5\xFE\xDE\xDA\xDB\xD9\xFD\xDD\xAF\xB4\xAD\xB1\u2017\xBE\xB6\xA7\xF7\xB8\xB0\xA8\xB7\xB9\xB3\xB2\u25A0\xA0"
},
"ibm858": "cp858",
"csibm858": "cp858",
"cp860": {
"type": "_sbcs",
"chars": "\xC7\xFC\xE9\xE2\xE3\xE0\xC1\xE7\xEA\xCA\xE8\xCD\xD4\xEC\xC3\xC2\xC9\xC0\xC8\xF4\xF5\xF2\xDA\xF9\xCC\xD5\xDC\xA2\xA3\xD9\u20A7\xD3\xE1\xED\xF3\xFA\xF1\xD1\xAA\xBA\xBF\xD2\xAC\xBD\xBC\xA1\xAB\xBB\u2591\u2592\u2593\u2502\u2524\u2561\u2562\u2556\u2555\u2563\u2551\u2557\u255D\u255C\u255B\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u255E\u255F\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u2567\u2568\u2564\u2565\u2559\u2558\u2552\u2553\u256B\u256A\u2518\u250C\u2588\u2584\u258C\u2590\u2580\u03B1\xDF\u0393\u03C0\u03A3\u03C3\xB5\u03C4\u03A6\u0398\u03A9\u03B4\u221E\u03C6\u03B5\u2229\u2261\xB1\u2265\u2264\u2320\u2321\xF7\u2248\xB0\u2219\xB7\u221A\u207F\xB2\u25A0\xA0"
},
"ibm860": "cp860",
"csibm860": "cp860",
"cp861": {
"type": "_sbcs",
"chars": "\xC7\xFC\xE9\xE2\xE4\xE0\xE5\xE7\xEA\xEB\xE8\xD0\xF0\xDE\xC4\xC5\xC9\xE6\xC6\xF4\xF6\xFE\xFB\xDD\xFD\xD6\xDC\xF8\xA3\xD8\u20A7\u0192\xE1\xED\xF3\xFA\xC1\xCD\xD3\xDA\xBF\u2310\xAC\xBD\xBC\xA1\xAB\xBB\u2591\u2592\u2593\u2502\u2524\u2561\u2562\u2556\u2555\u2563\u2551\u2557\u255D\u255C\u255B\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u255E\u255F\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u2567\u2568\u2564\u2565\u2559\u2558\u2552\u2553\u256B\u256A\u2518\u250C\u2588\u2584\u258C\u2590\u2580\u03B1\xDF\u0393\u03C0\u03A3\u03C3\xB5\u03C4\u03A6\u0398\u03A9\u03B4\u221E\u03C6\u03B5\u2229\u2261\xB1\u2265\u2264\u2320\u2321\xF7\u2248\xB0\u2219\xB7\u221A\u207F\xB2\u25A0\xA0"
},
"ibm861": "cp861",
"csibm861": "cp861",
"cp862": {
"type": "_sbcs",
"chars": "\u05D0\u05D1\u05D2\u05D3\u05D4\u05D5\u05D6\u05D7\u05D8\u05D9\u05DA\u05DB\u05DC\u05DD\u05DE\u05DF\u05E0\u05E1\u05E2\u05E3\u05E4\u05E5\u05E6\u05E7\u05E8\u05E9\u05EA\xA2\xA3\xA5\u20A7\u0192\xE1\xED\xF3\xFA\xF1\xD1\xAA\xBA\xBF\u2310\xAC\xBD\xBC\xA1\xAB\xBB\u2591\u2592\u2593\u2502\u2524\u2561\u2562\u2556\u2555\u2563\u2551\u2557\u255D\u255C\u255B\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u255E\u255F\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u2567\u2568\u2564\u2565\u2559\u2558\u2552\u2553\u256B\u256A\u2518\u250C\u2588\u2584\u258C\u2590\u2580\u03B1\xDF\u0393\u03C0\u03A3\u03C3\xB5\u03C4\u03A6\u0398\u03A9\u03B4\u221E\u03C6\u03B5\u2229\u2261\xB1\u2265\u2264\u2320\u2321\xF7\u2248\xB0\u2219\xB7\u221A\u207F\xB2\u25A0\xA0"
},
"ibm862": "cp862",
"csibm862": "cp862",
"cp863": {
"type": "_sbcs",
"chars": "\xC7\xFC\xE9\xE2\xC2\xE0\xB6\xE7\xEA\xEB\xE8\xEF\xEE\u2017\xC0\xA7\xC9\xC8\xCA\xF4\xCB\xCF\xFB\xF9\xA4\xD4\xDC\xA2\xA3\xD9\xDB\u0192\xA6\xB4\xF3\xFA\xA8\xB8\xB3\xAF\xCE\u2310\xAC\xBD\xBC\xBE\xAB\xBB\u2591\u2592\u2593\u2502\u2524\u2561\u2562\u2556\u2555\u2563\u2551\u2557\u255D\u255C\u255B\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u255E\u255F\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u2567\u2568\u2564\u2565\u2559\u2558\u2552\u2553\u256B\u256A\u2518\u250C\u2588\u2584\u258C\u2590\u2580\u03B1\xDF\u0393\u03C0\u03A3\u03C3\xB5\u03C4\u03A6\u0398\u03A9\u03B4\u221E\u03C6\u03B5\u2229\u2261\xB1\u2265\u2264\u2320\u2321\xF7\u2248\xB0\u2219\xB7\u221A\u207F\xB2\u25A0\xA0"
},
"ibm863": "cp863",
"csibm863": "cp863",
"cp864": {
"type": "_sbcs",
"chars": "\0\x07\b \n\v\f\r\x1B !\"#$\u066A&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\x7F\xB0\xB7\u2219\u221A\u2592\u2500\u2502\u253C\u2524\u252C\u251C\u2534\u2510\u250C\u2514\u2518\u03B2\u221E\u03C6\xB1\xBD\xBC\u2248\xAB\xBB\uFEF7\uFEF8\uFFFD\uFFFD\uFEFB\uFEFC\uFFFD\xA0\xAD\uFE82\xA3\xA4\uFE84\uFFFD\uFFFD\uFE8E\uFE8F\uFE95\uFE99\u060C\uFE9D\uFEA1\uFEA5\u0660\u0661\u0662\u0663\u0664\u0665\u0666\u0667\u0668\u0669\uFED1\u061B\uFEB1\uFEB5\uFEB9\u061F\xA2\uFE80\uFE81\uFE83\uFE85\uFECA\uFE8B\uFE8D\uFE91\uFE93\uFE97\uFE9B\uFE9F\uFEA3\uFEA7\uFEA9\uFEAB\uFEAD\uFEAF\uFEB3\uFEB7\uFEBB\uFEBF\uFEC1\uFEC5\uFECB\uFECF\xA6\xAC\xF7\xD7\uFEC9\u0640\uFED3\uFED7\uFEDB\uFEDF\uFEE3\uFEE7\uFEEB\uFEED\uFEEF\uFEF3\uFEBD\uFECC\uFECE\uFECD\uFEE1\uFE7D\u0651\uFEE5\uFEE9\uFEEC\uFEF0\uFEF2\uFED0\uFED5\uFEF5\uFEF6\uFEDD\uFED9\uFEF1\u25A0\uFFFD"
},
"ibm864": "cp864",
"csibm864": "cp864",
"cp865": {
"type": "_sbcs",
"chars": "\xC7\xFC\xE9\xE2\xE4\xE0\xE5\xE7\xEA\xEB\xE8\xEF\xEE\xEC\xC4\xC5\xC9\xE6\xC6\xF4\xF6\xF2\xFB\xF9\xFF\xD6\xDC\xF8\xA3\xD8\u20A7\u0192\xE1\xED\xF3\xFA\xF1\xD1\xAA\xBA\xBF\u2310\xAC\xBD\xBC\xA1\xAB\xA4\u2591\u2592\u2593\u2502\u2524\u2561\u2562\u2556\u2555\u2563\u2551\u2557\u255D\u255C\u255B\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u255E\u255F\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u2567\u2568\u2564\u2565\u2559\u2558\u2552\u2553\u256B\u256A\u2518\u250C\u2588\u2584\u258C\u2590\u2580\u03B1\xDF\u0393\u03C0\u03A3\u03C3\xB5\u03C4\u03A6\u0398\u03A9\u03B4\u221E\u03C6\u03B5\u2229\u2261\xB1\u2265\u2264\u2320\u2321\xF7\u2248\xB0\u2219\xB7\u221A\u207F\xB2\u25A0\xA0"
},
"ibm865": "cp865",
"csibm865": "cp865",
"cp866": {
"type": "_sbcs",
"chars": "\u0410\u0411\u0412\u0413\u0414\u0415\u0416\u0417\u0418\u0419\u041A\u041B\u041C\u041D\u041E\u041F\u0420\u0421\u0422\u0423\u0424\u0425\u0426\u0427\u0428\u0429\u042A\u042B\u042C\u042D\u042E\u042F\u0430\u0431\u0432\u0433\u0434\u0435\u0436\u0437\u0438\u0439\u043A\u043B\u043C\u043D\u043E\u043F\u2591\u2592\u2593\u2502\u2524\u2561\u2562\u2556\u2555\u2563\u2551\u2557\u255D\u255C\u255B\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u255E\u255F\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u2567\u2568\u2564\u2565\u2559\u2558\u2552\u2553\u256B\u256A\u2518\u250C\u2588\u2584\u258C\u2590\u2580\u0440\u0441\u0442\u0443\u0444\u0445\u0446\u0447\u0448\u0449\u044A\u044B\u044C\u044D\u044E\u044F\u0401\u0451\u0404\u0454\u0407\u0457\u040E\u045E\xB0\u2219\xB7\u221A\u2116\xA4\u25A0\xA0"
},
"ibm866": "cp866",
"csibm866": "cp866",
"cp869": {
"type": "_sbcs",
"chars": "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u0386\uFFFD\xB7\xAC\xA6\u2018\u2019\u0388\u2015\u0389\u038A\u03AA\u038C\uFFFD\uFFFD\u038E\u03AB\xA9\u038F\xB2\xB3\u03AC\xA3\u03AD\u03AE\u03AF\u03CA\u0390\u03CC\u03CD\u0391\u0392\u0393\u0394\u0395\u0396\u0397\xBD\u0398\u0399\xAB\xBB\u2591\u2592\u2593\u2502\u2524\u039A\u039B\u039C\u039D\u2563\u2551\u2557\u255D\u039E\u039F\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u03A0\u03A1\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u03A3\u03A4\u03A5\u03A6\u03A7\u03A8\u03A9\u03B1\u03B2\u03B3\u2518\u250C\u2588\u2584\u03B4\u03B5\u2580\u03B6\u03B7\u03B8\u03B9\u03BA\u03BB\u03BC\u03BD\u03BE\u03BF\u03C0\u03C1\u03C3\u03C2\u03C4\u0384\xAD\xB1\u03C5\u03C6\u03C7\xA7\u03C8\u0385\xB0\xA8\u03C9\u03CB\u03B0\u03CE\u25A0\xA0"
},
"ibm869": "cp869",
"csibm869": "cp869",
"cp922": {
"type": "_sbcs",
"chars": "\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8A\x8B\x8C\x8D\x8E\x8F\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9A\x9B\x9C\x9D\x9E\x9F\xA0\xA1\xA2\xA3\xA4\xA5\xA6\xA7\xA8\xA9\xAA\xAB\xAC\xAD\xAE\u203E\xB0\xB1\xB2\xB3\xB4\xB5\xB6\xB7\xB8\xB9\xBA\xBB\xBC\xBD\xBE\xBF\xC0\xC1\xC2\xC3\xC4\xC5\xC6\xC7\xC8\xC9\xCA\xCB\xCC\xCD\xCE\xCF\u0160\xD1\xD2\xD3\xD4\xD5\xD6\xD7\xD8\xD9\xDA\xDB\xDC\xDD\u017D\xDF\xE0\xE1\xE2\xE3\xE4\xE5\xE6\xE7\xE8\xE9\xEA\xEB\xEC\xED\xEE\xEF\u0161\xF1\xF2\xF3\xF4\xF5\xF6\xF7\xF8\xF9\xFA\xFB\xFC\xFD\u017E\xFF"
},
"ibm922": "cp922",
"csibm922": "cp922",
"cp1046": {
"type": "_sbcs",
"chars": "\uFE88\xD7\xF7\uF8F6\uF8F5\uF8F4\uF8F7\uFE71\x88\u25A0\u2502\u2500\u2510\u250C\u2514\u2518\uFE79\uFE7B\uFE7D\uFE7F\uFE77\uFE8A\uFEF0\uFEF3\uFEF2\uFECE\uFECF\uFED0\uFEF6\uFEF8\uFEFA\uFEFC\xA0\uF8FA\uF8F9\uF8F8\xA4\uF8FB\uFE8B\uFE91\uFE97\uFE9B\uFE9F\uFEA3\u060C\xAD\uFEA7\uFEB3\u0660\u0661\u0662\u0663\u0664\u0665\u0666\u0667\u0668\u0669\uFEB7\u061B\uFEBB\uFEBF\uFECA\u061F\uFECB\u0621\u0622\u0623\u0624\u0625\u0626\u0627\u0628\u0629\u062A\u062B\u062C\u062D\u062E\u062F\u0630\u0631\u0632\u0633\u0634\u0635\u0636\u0637\uFEC7\u0639\u063A\uFECC\uFE82\uFE84\uFE8E\uFED3\u0640\u0641\u0642\u0643\u0644\u0645\u0646\u0647\u0648\u0649\u064A\u064B\u064C\u064D\u064E\u064F\u0650\u0651\u0652\uFED7\uFEDB\uFEDF\uF8FC\uFEF5\uFEF7\uFEF9\uFEFB\uFEE3\uFEE7\uFEEC\uFEE9\uFFFD"
},
"ibm1046": "cp1046",
"csibm1046": "cp1046",
"cp1124": {
"type": "_sbcs",
"chars": "\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8A\x8B\x8C\x8D\x8E\x8F\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9A\x9B\x9C\x9D\x9E\x9F\xA0\u0401\u0402\u0490\u0404\u0405\u0406\u0407\u0408\u0409\u040A\u040B\u040C\xAD\u040E\u040F\u0410\u0411\u0412\u0413\u0414\u0415\u0416\u0417\u0418\u0419\u041A\u041B\u041C\u041D\u041E\u041F\u0420\u0421\u0422\u0423\u0424\u0425\u0426\u0427\u0428\u0429\u042A\u042B\u042C\u042D\u042E\u042F\u0430\u0431\u0432\u0433\u0434\u0435\u0436\u0437\u0438\u0439\u043A\u043B\u043C\u043D\u043E\u043F\u0440\u0441\u0442\u0443\u0444\u0445\u0446\u0447\u0448\u0449\u044A\u044B\u044C\u044D\u044E\u044F\u2116\u0451\u0452\u0491\u0454\u0455\u0456\u0457\u0458\u0459\u045A\u045B\u045C\xA7\u045E\u045F"
},
"ibm1124": "cp1124",
"csibm1124": "cp1124",
"cp1125": {
"type": "_sbcs",
"chars": "\u0410\u0411\u0412\u0413\u0414\u0415\u0416\u0417\u0418\u0419\u041A\u041B\u041C\u041D\u041E\u041F\u0420\u0421\u0422\u0423\u0424\u0425\u0426\u0427\u0428\u0429\u042A\u042B\u042C\u042D\u042E\u042F\u0430\u0431\u0432\u0433\u0434\u0435\u0436\u0437\u0438\u0439\u043A\u043B\u043C\u043D\u043E\u043F\u2591\u2592\u2593\u2502\u2524\u2561\u2562\u2556\u2555\u2563\u2551\u2557\u255D\u255C\u255B\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u255E\u255F\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u2567\u2568\u2564\u2565\u2559\u2558\u2552\u2553\u256B\u256A\u2518\u250C\u2588\u2584\u258C\u2590\u2580\u0440\u0441\u0442\u0443\u0444\u0445\u0446\u0447\u0448\u0449\u044A\u044B\u044C\u044D\u044E\u044F\u0401\u0451\u0490\u0491\u0404\u0454\u0406\u0456\u0407\u0457\xB7\u221A\u2116\xA4\u25A0\xA0"
},
"ibm1125": "cp1125",
"csibm1125": "cp1125",
"cp1129": {
"type": "_sbcs",
"chars": "\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8A\x8B\x8C\x8D\x8E\x8F\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9A\x9B\x9C\x9D\x9E\x9F\xA0\xA1\xA2\xA3\xA4\xA5\xA6\xA7\u0153\xA9\xAA\xAB\xAC\xAD\xAE\xAF\xB0\xB1\xB2\xB3\u0178\xB5\xB6\xB7\u0152\xB9\xBA\xBB\xBC\xBD\xBE\xBF\xC0\xC1\xC2\u0102\xC4\xC5\xC6\xC7\xC8\xC9\xCA\xCB\u0300\xCD\xCE\xCF\u0110\xD1\u0309\xD3\xD4\u01A0\xD6\xD7\xD8\xD9\xDA\xDB\xDC\u01AF\u0303\xDF\xE0\xE1\xE2\u0103\xE4\xE5\xE6\xE7\xE8\xE9\xEA\xEB\u0301\xED\xEE\xEF\u0111\xF1\u0323\xF3\xF4\u01A1\xF6\xF7\xF8\xF9\xFA\xFB\xFC\u01B0\u20AB\xFF"
},
"ibm1129": "cp1129",
"csibm1129": "cp1129",
"cp1133": {
"type": "_sbcs",
"chars": "\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8A\x8B\x8C\x8D\x8E\x8F\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9A\x9B\x9C\x9D\x9E\x9F\xA0\u0E81\u0E82\u0E84\u0E87\u0E88\u0EAA\u0E8A\u0E8D\u0E94\u0E95\u0E96\u0E97\u0E99\u0E9A\u0E9B\u0E9C\u0E9D\u0E9E\u0E9F\u0EA1\u0EA2\u0EA3\u0EA5\u0EA7\u0EAB\u0EAD\u0EAE\uFFFD\uFFFD\uFFFD\u0EAF\u0EB0\u0EB2\u0EB3\u0EB4\u0EB5\u0EB6\u0EB7\u0EB8\u0EB9\u0EBC\u0EB1\u0EBB\u0EBD\uFFFD\uFFFD\uFFFD\u0EC0\u0EC1\u0EC2\u0EC3\u0EC4\u0EC8\u0EC9\u0ECA\u0ECB\u0ECC\u0ECD\u0EC6\uFFFD\u0EDC\u0EDD\u20AD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u0ED0\u0ED1\u0ED2\u0ED3\u0ED4\u0ED5\u0ED6\u0ED7\u0ED8\u0ED9\uFFFD\uFFFD\xA2\xAC\xA6\uFFFD"
},
"ibm1133": "cp1133",
"csibm1133": "cp1133",
"cp1161": {
"type": "_sbcs",
"chars": "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u0E48\u0E01\u0E02\u0E03\u0E04\u0E05\u0E06\u0E07\u0E08\u0E09\u0E0A\u0E0B\u0E0C\u0E0D\u0E0E\u0E0F\u0E10\u0E11\u0E12\u0E13\u0E14\u0E15\u0E16\u0E17\u0E18\u0E19\u0E1A\u0E1B\u0E1C\u0E1D\u0E1E\u0E1F\u0E20\u0E21\u0E22\u0E23\u0E24\u0E25\u0E26\u0E27\u0E28\u0E29\u0E2A\u0E2B\u0E2C\u0E2D\u0E2E\u0E2F\u0E30\u0E31\u0E32\u0E33\u0E34\u0E35\u0E36\u0E37\u0E38\u0E39\u0E3A\u0E49\u0E4A\u0E4B\u20AC\u0E3F\u0E40\u0E41\u0E42\u0E43\u0E44\u0E45\u0E46\u0E47\u0E48\u0E49\u0E4A\u0E4B\u0E4C\u0E4D\u0E4E\u0E4F\u0E50\u0E51\u0E52\u0E53\u0E54\u0E55\u0E56\u0E57\u0E58\u0E59\u0E5A\u0E5B\xA2\xAC\xA6\xA0"
},
"ibm1161": "cp1161",
"csibm1161": "cp1161",
"cp1162": {
"type": "_sbcs",
"chars": "\u20AC\x81\x82\x83\x84\u2026\x86\x87\x88\x89\x8A\x8B\x8C\x8D\x8E\x8F\x90\u2018\u2019\u201C\u201D\u2022\u2013\u2014\x98\x99\x9A\x9B\x9C\x9D\x9E\x9F\xA0\u0E01\u0E02\u0E03\u0E04\u0E05\u0E06\u0E07\u0E08\u0E09\u0E0A\u0E0B\u0E0C\u0E0D\u0E0E\u0E0F\u0E10\u0E11\u0E12\u0E13\u0E14\u0E15\u0E16\u0E17\u0E18\u0E19\u0E1A\u0E1B\u0E1C\u0E1D\u0E1E\u0E1F\u0E20\u0E21\u0E22\u0E23\u0E24\u0E25\u0E26\u0E27\u0E28\u0E29\u0E2A\u0E2B\u0E2C\u0E2D\u0E2E\u0E2F\u0E30\u0E31\u0E32\u0E33\u0E34\u0E35\u0E36\u0E37\u0E38\u0E39\u0E3A\uFFFD\uFFFD\uFFFD\uFFFD\u0E3F\u0E40\u0E41\u0E42\u0E43\u0E44\u0E45\u0E46\u0E47\u0E48\u0E49\u0E4A\u0E4B\u0E4C\u0E4D\u0E4E\u0E4F\u0E50\u0E51\u0E52\u0E53\u0E54\u0E55\u0E56\u0E57\u0E58\u0E59\u0E5A\u0E5B\uFFFD\uFFFD\uFFFD\uFFFD"
},
"ibm1162": "cp1162",
"csibm1162": "cp1162",
"cp1163": {
"type": "_sbcs",
"chars": "\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8A\x8B\x8C\x8D\x8E\x8F\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9A\x9B\x9C\x9D\x9E\x9F\xA0\xA1\xA2\xA3\u20AC\xA5\xA6\xA7\u0153\xA9\xAA\xAB\xAC\xAD\xAE\xAF\xB0\xB1\xB2\xB3\u0178\xB5\xB6\xB7\u0152\xB9\xBA\xBB\xBC\xBD\xBE\xBF\xC0\xC1\xC2\u0102\xC4\xC5\xC6\xC7\xC8\xC9\xCA\xCB\u0300\xCD\xCE\xCF\u0110\xD1\u0309\xD3\xD4\u01A0\xD6\xD7\xD8\xD9\xDA\xDB\xDC\u01AF\u0303\xDF\xE0\xE1\xE2\u0103\xE4\xE5\xE6\xE7\xE8\xE9\xEA\xEB\u0301\xED\xEE\xEF\u0111\xF1\u0323\xF3\xF4\u01A1\xF6\xF7\xF8\xF9\xFA\xFB\xFC\u01B0\u20AB\xFF"
},
"ibm1163": "cp1163",
"csibm1163": "cp1163",
"maccroatian": {
"type": "_sbcs",
"chars": "\xC4\xC5\xC7\xC9\xD1\xD6\xDC\xE1\xE0\xE2\xE4\xE3\xE5\xE7\xE9\xE8\xEA\xEB\xED\xEC\xEE\xEF\xF1\xF3\xF2\xF4\xF6\xF5\xFA\xF9\xFB\xFC\u2020\xB0\xA2\xA3\xA7\u2022\xB6\xDF\xAE\u0160\u2122\xB4\xA8\u2260\u017D\xD8\u221E\xB1\u2264\u2265\u2206\xB5\u2202\u2211\u220F\u0161\u222B\xAA\xBA\u2126\u017E\xF8\xBF\xA1\xAC\u221A\u0192\u2248\u0106\xAB\u010C\u2026\xA0\xC0\xC3\xD5\u0152\u0153\u0110\u2014\u201C\u201D\u2018\u2019\xF7\u25CA\uFFFD\xA9\u2044\xA4\u2039\u203A\xC6\xBB\u2013\xB7\u201A\u201E\u2030\xC2\u0107\xC1\u010D\xC8\xCD\xCE\xCF\xCC\xD3\xD4\u0111\xD2\xDA\xDB\xD9\u0131\u02C6\u02DC\xAF\u03C0\xCB\u02DA\xB8\xCA\xE6\u02C7"
},
"maccyrillic": {
"type": "_sbcs",
"chars": "\u0410\u0411\u0412\u0413\u0414\u0415\u0416\u0417\u0418\u0419\u041A\u041B\u041C\u041D\u041E\u041F\u0420\u0421\u0422\u0423\u0424\u0425\u0426\u0427\u0428\u0429\u042A\u042B\u042C\u042D\u042E\u042F\u2020\xB0\xA2\xA3\xA7\u2022\xB6\u0406\xAE\xA9\u2122\u0402\u0452\u2260\u0403\u0453\u221E\xB1\u2264\u2265\u0456\xB5\u2202\u0408\u0404\u0454\u0407\u0457\u0409\u0459\u040A\u045A\u0458\u0405\xAC\u221A\u0192\u2248\u2206\xAB\xBB\u2026\xA0\u040B\u045B\u040C\u045C\u0455\u2013\u2014\u201C\u201D\u2018\u2019\xF7\u201E\u040E\u045E\u040F\u045F\u2116\u0401\u0451\u044F\u0430\u0431\u0432\u0433\u0434\u0435\u0436\u0437\u0438\u0439\u043A\u043B\u043C\u043D\u043E\u043F\u0440\u0441\u0442\u0443\u0444\u0445\u0446\u0447\u0448\u0449\u044A\u044B\u044C\u044D\u044E\xA4"
},
"macgreek": {
"type": "_sbcs",
"chars": "\xC4\xB9\xB2\xC9\xB3\xD6\xDC\u0385\xE0\xE2\xE4\u0384\xA8\xE7\xE9\xE8\xEA\xEB\xA3\u2122\xEE\xEF\u2022\xBD\u2030\xF4\xF6\xA6\xAD\xF9\xFB\xFC\u2020\u0393\u0394\u0398\u039B\u039E\u03A0\xDF\xAE\xA9\u03A3\u03AA\xA7\u2260\xB0\u0387\u0391\xB1\u2264\u2265\xA5\u0392\u0395\u0396\u0397\u0399\u039A\u039C\u03A6\u03AB\u03A8\u03A9\u03AC\u039D\xAC\u039F\u03A1\u2248\u03A4\xAB\xBB\u2026\xA0\u03A5\u03A7\u0386\u0388\u0153\u2013\u2015\u201C\u201D\u2018\u2019\xF7\u0389\u038A\u038C\u038E\u03AD\u03AE\u03AF\u03CC\u038F\u03CD\u03B1\u03B2\u03C8\u03B4\u03B5\u03C6\u03B3\u03B7\u03B9\u03BE\u03BA\u03BB\u03BC\u03BD\u03BF\u03C0\u03CE\u03C1\u03C3\u03C4\u03B8\u03C9\u03C2\u03C7\u03C5\u03B6\u03CA\u03CB\u0390\u03B0\uFFFD"
},
"maciceland": {
"type": "_sbcs",
"chars": "\xC4\xC5\xC7\xC9\xD1\xD6\xDC\xE1\xE0\xE2\xE4\xE3\xE5\xE7\xE9\xE8\xEA\xEB\xED\xEC\xEE\xEF\xF1\xF3\xF2\xF4\xF6\xF5\xFA\xF9\xFB\xFC\xDD\xB0\xA2\xA3\xA7\u2022\xB6\xDF\xAE\xA9\u2122\xB4\xA8\u2260\xC6\xD8\u221E\xB1\u2264\u2265\xA5\xB5\u2202\u2211\u220F\u03C0\u222B\xAA\xBA\u2126\xE6\xF8\xBF\xA1\xAC\u221A\u0192\u2248\u2206\xAB\xBB\u2026\xA0\xC0\xC3\xD5\u0152\u0153\u2013\u2014\u201C\u201D\u2018\u2019\xF7\u25CA\xFF\u0178\u2044\xA4\xD0\xF0\xDE\xFE\xFD\xB7\u201A\u201E\u2030\xC2\xCA\xC1\xCB\xC8\xCD\xCE\xCF\xCC\xD3\xD4\uFFFD\xD2\xDA\xDB\xD9\u0131\u02C6\u02DC\xAF\u02D8\u02D9\u02DA\xB8\u02DD\u02DB\u02C7"
},
"macroman": {
"type": "_sbcs",
"chars": "\xC4\xC5\xC7\xC9\xD1\xD6\xDC\xE1\xE0\xE2\xE4\xE3\xE5\xE7\xE9\xE8\xEA\xEB\xED\xEC\xEE\xEF\xF1\xF3\xF2\xF4\xF6\xF5\xFA\xF9\xFB\xFC\u2020\xB0\xA2\xA3\xA7\u2022\xB6\xDF\xAE\xA9\u2122\xB4\xA8\u2260\xC6\xD8\u221E\xB1\u2264\u2265\xA5\xB5\u2202\u2211\u220F\u03C0\u222B\xAA\xBA\u2126\xE6\xF8\xBF\xA1\xAC\u221A\u0192\u2248\u2206\xAB\xBB\u2026\xA0\xC0\xC3\xD5\u0152\u0153\u2013\u2014\u201C\u201D\u2018\u2019\xF7\u25CA\xFF\u0178\u2044\xA4\u2039\u203A\uFB01\uFB02\u2021\xB7\u201A\u201E\u2030\xC2\xCA\xC1\xCB\xC8\xCD\xCE\xCF\xCC\xD3\xD4\uFFFD\xD2\xDA\xDB\xD9\u0131\u02C6\u02DC\xAF\u02D8\u02D9\u02DA\xB8\u02DD\u02DB\u02C7"
},
"macromania": {
"type": "_sbcs",
"chars": "\xC4\xC5\xC7\xC9\xD1\xD6\xDC\xE1\xE0\xE2\xE4\xE3\xE5\xE7\xE9\xE8\xEA\xEB\xED\xEC\xEE\xEF\xF1\xF3\xF2\xF4\xF6\xF5\xFA\xF9\xFB\xFC\u2020\xB0\xA2\xA3\xA7\u2022\xB6\xDF\xAE\xA9\u2122\xB4\xA8\u2260\u0102\u015E\u221E\xB1\u2264\u2265\xA5\xB5\u2202\u2211\u220F\u03C0\u222B\xAA\xBA\u2126\u0103\u015F\xBF\xA1\xAC\u221A\u0192\u2248\u2206\xAB\xBB\u2026\xA0\xC0\xC3\xD5\u0152\u0153\u2013\u2014\u201C\u201D\u2018\u2019\xF7\u25CA\xFF\u0178\u2044\xA4\u2039\u203A\u0162\u0163\u2021\xB7\u201A\u201E\u2030\xC2\xCA\xC1\xCB\xC8\xCD\xCE\xCF\xCC\xD3\xD4\uFFFD\xD2\xDA\xDB\xD9\u0131\u02C6\u02DC\xAF\u02D8\u02D9\u02DA\xB8\u02DD\u02DB\u02C7"
},
"macthai": {
"type": "_sbcs",
"chars": "\xAB\xBB\u2026\uF88C\uF88F\uF892\uF895\uF898\uF88B\uF88E\uF891\uF894\uF897\u201C\u201D\uF899\uFFFD\u2022\uF884\uF889\uF885\uF886\uF887\uF888\uF88A\uF88D\uF890\uF893\uF896\u2018\u2019\uFFFD\xA0\u0E01\u0E02\u0E03\u0E04\u0E05\u0E06\u0E07\u0E08\u0E09\u0E0A\u0E0B\u0E0C\u0E0D\u0E0E\u0E0F\u0E10\u0E11\u0E12\u0E13\u0E14\u0E15\u0E16\u0E17\u0E18\u0E19\u0E1A\u0E1B\u0E1C\u0E1D\u0E1E\u0E1F\u0E20\u0E21\u0E22\u0E23\u0E24\u0E25\u0E26\u0E27\u0E28\u0E29\u0E2A\u0E2B\u0E2C\u0E2D\u0E2E\u0E2F\u0E30\u0E31\u0E32\u0E33\u0E34\u0E35\u0E36\u0E37\u0E38\u0E39\u0E3A\uFEFF\u200B\u2013\u2014\u0E3F\u0E40\u0E41\u0E42\u0E43\u0E44\u0E45\u0E46\u0E47\u0E48\u0E49\u0E4A\u0E4B\u0E4C\u0E4D\u2122\u0E4F\u0E50\u0E51\u0E52\u0E53\u0E54\u0E55\u0E56\u0E57\u0E58\u0E59\xAE\xA9\uFFFD\uFFFD\uFFFD\uFFFD"
},
"macturkish": {
"type": "_sbcs",
"chars": "\xC4\xC5\xC7\xC9\xD1\xD6\xDC\xE1\xE0\xE2\xE4\xE3\xE5\xE7\xE9\xE8\xEA\xEB\xED\xEC\xEE\xEF\xF1\xF3\xF2\xF4\xF6\xF5\xFA\xF9\xFB\xFC\u2020\xB0\xA2\xA3\xA7\u2022\xB6\xDF\xAE\xA9\u2122\xB4\xA8\u2260\xC6\xD8\u221E\xB1\u2264\u2265\xA5\xB5\u2202\u2211\u220F\u03C0\u222B\xAA\xBA\u2126\xE6\xF8\xBF\xA1\xAC\u221A\u0192\u2248\u2206\xAB\xBB\u2026\xA0\xC0\xC3\xD5\u0152\u0153\u2013\u2014\u201C\u201D\u2018\u2019\xF7\u25CA\xFF\u0178\u011E\u011F\u0130\u0131\u015E\u015F\u2021\xB7\u201A\u201E\u2030\xC2\xCA\xC1\xCB\xC8\xCD\xCE\xCF\xCC\xD3\xD4\uFFFD\xD2\xDA\xDB\xD9\uFFFD\u02C6\u02DC\xAF\u02D8\u02D9\u02DA\xB8\u02DD\u02DB\u02C7"
},
"macukraine": {
"type": "_sbcs",
"chars": "\u0410\u0411\u0412\u0413\u0414\u0415\u0416\u0417\u0418\u0419\u041A\u041B\u041C\u041D\u041E\u041F\u0420\u0421\u0422\u0423\u0424\u0425\u0426\u0427\u0428\u0429\u042A\u042B\u042C\u042D\u042E\u042F\u2020\xB0\u0490\xA3\xA7\u2022\xB6\u0406\xAE\xA9\u2122\u0402\u0452\u2260\u0403\u0453\u221E\xB1\u2264\u2265\u0456\xB5\u0491\u0408\u0404\u0454\u0407\u0457\u0409\u0459\u040A\u045A\u0458\u0405\xAC\u221A\u0192\u2248\u2206\xAB\xBB\u2026\xA0\u040B\u045B\u040C\u045C\u0455\u2013\u2014\u201C\u201D\u2018\u2019\xF7\u201E\u040E\u045E\u040F\u045F\u2116\u0401\u0451\u044F\u0430\u0431\u0432\u0433\u0434\u0435\u0436\u0437\u0438\u0439\u043A\u043B\u043C\u043D\u043E\u043F\u0440\u0441\u0442\u0443\u0444\u0445\u0446\u0447\u0448\u0449\u044A\u044B\u044C\u044D\u044E\xA4"
},
"koi8r": {
"type": "_sbcs",
"chars": "\u2500\u2502\u250C\u2510\u2514\u2518\u251C\u2524\u252C\u2534\u253C\u2580\u2584\u2588\u258C\u2590\u2591\u2592\u2593\u2320\u25A0\u2219\u221A\u2248\u2264\u2265\xA0\u2321\xB0\xB2\xB7\xF7\u2550\u2551\u2552\u0451\u2553\u2554\u2555\u2556\u2557\u2558\u2559\u255A\u255B\u255C\u255D\u255E\u255F\u2560\u2561\u0401\u2562\u2563\u2564\u2565\u2566\u2567\u2568\u2569\u256A\u256B\u256C\xA9\u044E\u0430\u0431\u0446\u0434\u0435\u0444\u0433\u0445\u0438\u0439\u043A\u043B\u043C\u043D\u043E\u043F\u044F\u0440\u0441\u0442\u0443\u0436\u0432\u044C\u044B\u0437\u0448\u044D\u0449\u0447\u044A\u042E\u0410\u0411\u0426\u0414\u0415\u0424\u0413\u0425\u0418\u0419\u041A\u041B\u041C\u041D\u041E\u041F\u042F\u0420\u0421\u0422\u0423\u0416\u0412\u042C\u042B\u0417\u0428\u042D\u0429\u0427\u042A"
},
"koi8u": {
"type": "_sbcs",
"chars": "\u2500\u2502\u250C\u2510\u2514\u2518\u251C\u2524\u252C\u2534\u253C\u2580\u2584\u2588\u258C\u2590\u2591\u2592\u2593\u2320\u25A0\u2219\u221A\u2248\u2264\u2265\xA0\u2321\xB0\xB2\xB7\xF7\u2550\u2551\u2552\u0451\u0454\u2554\u0456\u0457\u2557\u2558\u2559\u255A\u255B\u0491\u255D\u255E\u255F\u2560\u2561\u0401\u0404\u2563\u0406\u0407\u2566\u2567\u2568\u2569\u256A\u0490\u256C\xA9\u044E\u0430\u0431\u0446\u0434\u0435\u0444\u0433\u0445\u0438\u0439\u043A\u043B\u043C\u043D\u043E\u043F\u044F\u0440\u0441\u0442\u0443\u0436\u0432\u044C\u044B\u0437\u0448\u044D\u0449\u0447\u044A\u042E\u0410\u0411\u0426\u0414\u0415\u0424\u0413\u0425\u0418\u0419\u041A\u041B\u041C\u041D\u041E\u041F\u042F\u0420\u0421\u0422\u0423\u0416\u0412\u042C\u042B\u0417\u0428\u042D\u0429\u0427\u042A"
},
"koi8ru": {
"type": "_sbcs",
"chars": "\u2500\u2502\u250C\u2510\u2514\u2518\u251C\u2524\u252C\u2534\u253C\u2580\u2584\u2588\u258C\u2590\u2591\u2592\u2593\u2320\u25A0\u2219\u221A\u2248\u2264\u2265\xA0\u2321\xB0\xB2\xB7\xF7\u2550\u2551\u2552\u0451\u0454\u2554\u0456\u0457\u2557\u2558\u2559\u255A\u255B\u0491\u045E\u255E\u255F\u2560\u2561\u0401\u0404\u2563\u0406\u0407\u2566\u2567\u2568\u2569\u256A\u0490\u040E\xA9\u044E\u0430\u0431\u0446\u0434\u0435\u0444\u0433\u0445\u0438\u0439\u043A\u043B\u043C\u043D\u043E\u043F\u044F\u0440\u0441\u0442\u0443\u0436\u0432\u044C\u044B\u0437\u0448\u044D\u0449\u0447\u044A\u042E\u0410\u0411\u0426\u0414\u0415\u0424\u0413\u0425\u0418\u0419\u041A\u041B\u041C\u041D\u041E\u041F\u042F\u0420\u0421\u0422\u0423\u0416\u0412\u042C\u042B\u0417\u0428\u042D\u0429\u0427\u042A"
},
"koi8t": {
"type": "_sbcs",
"chars": "\u049B\u0493\u201A\u0492\u201E\u2026\u2020\u2021\uFFFD\u2030\u04B3\u2039\u04B2\u04B7\u04B6\uFFFD\u049A\u2018\u2019\u201C\u201D\u2022\u2013\u2014\uFFFD\u2122\uFFFD\u203A\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u04EF\u04EE\u0451\xA4\u04E3\xA6\xA7\uFFFD\uFFFD\uFFFD\xAB\xAC\xAD\xAE\uFFFD\xB0\xB1\xB2\u0401\uFFFD\u04E2\xB6\xB7\uFFFD\u2116\uFFFD\xBB\uFFFD\uFFFD\uFFFD\xA9\u044E\u0430\u0431\u0446\u0434\u0435\u0444\u0433\u0445\u0438\u0439\u043A\u043B\u043C\u043D\u043E\u043F\u044F\u0440\u0441\u0442\u0443\u0436\u0432\u044C\u044B\u0437\u0448\u044D\u0449\u0447\u044A\u042E\u0410\u0411\u0426\u0414\u0415\u0424\u0413\u0425\u0418\u0419\u041A\u041B\u041C\u041D\u041E\u041F\u042F\u0420\u0421\u0422\u0423\u0416\u0412\u042C\u042B\u0417\u0428\u042D\u0429\u0427\u042A"
},
"armscii8": {
"type": "_sbcs",
"chars": "\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8A\x8B\x8C\x8D\x8E\x8F\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9A\x9B\x9C\x9D\x9E\x9F\xA0\uFFFD\u0587\u0589)(\xBB\xAB\u2014.\u055D,-\u058A\u2026\u055C\u055B\u055E\u0531\u0561\u0532\u0562\u0533\u0563\u0534\u0564\u0535\u0565\u0536\u0566\u0537\u0567\u0538\u0568\u0539\u0569\u053A\u056A\u053B\u056B\u053C\u056C\u053D\u056D\u053E\u056E\u053F\u056F\u0540\u0570\u0541\u0571\u0542\u0572\u0543\u0573\u0544\u0574\u0545\u0575\u0546\u0576\u0547\u0577\u0548\u0578\u0549\u0579\u054A\u057A\u054B\u057B\u054C\u057C\u054D\u057D\u054E\u057E\u054F\u057F\u0550\u0580\u0551\u0581\u0552\u0582\u0553\u0583\u0554\u0584\u0555\u0585\u0556\u0586\u055A\uFFFD"
},
"rk1048": {
"type": "_sbcs",
"chars": "\u0402\u0403\u201A\u0453\u201E\u2026\u2020\u2021\u20AC\u2030\u0409\u2039\u040A\u049A\u04BA\u040F\u0452\u2018\u2019\u201C\u201D\u2022\u2013\u2014\uFFFD\u2122\u0459\u203A\u045A\u049B\u04BB\u045F\xA0\u04B0\u04B1\u04D8\xA4\u04E8\xA6\xA7\u0401\xA9\u0492\xAB\xAC\xAD\xAE\u04AE\xB0\xB1\u0406\u0456\u04E9\xB5\xB6\xB7\u0451\u2116\u0493\xBB\u04D9\u04A2\u04A3\u04AF\u0410\u0411\u0412\u0413\u0414\u0415\u0416\u0417\u0418\u0419\u041A\u041B\u041C\u041D\u041E\u041F\u0420\u0421\u0422\u0423\u0424\u0425\u0426\u0427\u0428\u0429\u042A\u042B\u042C\u042D\u042E\u042F\u0430\u0431\u0432\u0433\u0434\u0435\u0436\u0437\u0438\u0439\u043A\u043B\u043C\u043D\u043E\u043F\u0440\u0441\u0442\u0443\u0444\u0445\u0446\u0447\u0448\u0449\u044A\u044B\u044C\u044D\u044E\u044F"
},
"tcvn": {
"type": "_sbcs",
"chars": "\0\xDA\u1EE4\u1EEA\u1EEC\u1EEE\x07\b \n\v\f\r\u1EE8\u1EF0\u1EF2\u1EF6\u1EF8\xDD\u1EF4\x1B !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\x7F\xC0\u1EA2\xC3\xC1\u1EA0\u1EB6\u1EAC\xC8\u1EBA\u1EBC\xC9\u1EB8\u1EC6\xCC\u1EC8\u0128\xCD\u1ECA\xD2\u1ECE\xD5\xD3\u1ECC\u1ED8\u1EDC\u1EDE\u1EE0\u1EDA\u1EE2\xD9\u1EE6\u0168\xA0\u0102\xC2\xCA\xD4\u01A0\u01AF\u0110\u0103\xE2\xEA\xF4\u01A1\u01B0\u0111\u1EB0\u0300\u0309\u0303\u0301\u0323\xE0\u1EA3\xE3\xE1\u1EA1\u1EB2\u1EB1\u1EB3\u1EB5\u1EAF\u1EB4\u1EAE\u1EA6\u1EA8\u1EAA\u1EA4\u1EC0\u1EB7\u1EA7\u1EA9\u1EAB\u1EA5\u1EAD\xE8\u1EC2\u1EBB\u1EBD\xE9\u1EB9\u1EC1\u1EC3\u1EC5\u1EBF\u1EC7\xEC\u1EC9\u1EC4\u1EBE\u1ED2\u0129\xED\u1ECB\xF2\u1ED4\u1ECF\xF5\xF3\u1ECD\u1ED3\u1ED5\u1ED7\u1ED1\u1ED9\u1EDD\u1EDF\u1EE1\u1EDB\u1EE3\xF9\u1ED6\u1EE7\u0169\xFA\u1EE5\u1EEB\u1EED\u1EEF\u1EE9\u1EF1\u1EF3\u1EF7\u1EF9\xFD\u1EF5\u1ED0"
},
"georgianacademy": {
"type": "_sbcs",
"chars": "\x80\x81\u201A\u0192\u201E\u2026\u2020\u2021\u02C6\u2030\u0160\u2039\u0152\x8D\x8E\x8F\x90\u2018\u2019\u201C\u201D\u2022\u2013\u2014\u02DC\u2122\u0161\u203A\u0153\x9D\x9E\u0178\xA0\xA1\xA2\xA3\xA4\xA5\xA6\xA7\xA8\xA9\xAA\xAB\xAC\xAD\xAE\xAF\xB0\xB1\xB2\xB3\xB4\xB5\xB6\xB7\xB8\xB9\xBA\xBB\xBC\xBD\xBE\xBF\u10D0\u10D1\u10D2\u10D3\u10D4\u10D5\u10D6\u10D7\u10D8\u10D9\u10DA\u10DB\u10DC\u10DD\u10DE\u10DF\u10E0\u10E1\u10E2\u10E3\u10E4\u10E5\u10E6\u10E7\u10E8\u10E9\u10EA\u10EB\u10EC\u10ED\u10EE\u10EF\u10F0\u10F1\u10F2\u10F3\u10F4\u10F5\u10F6\xE7\xE8\xE9\xEA\xEB\xEC\xED\xEE\xEF\xF0\xF1\xF2\xF3\xF4\xF5\xF6\xF7\xF8\xF9\xFA\xFB\xFC\xFD\xFE\xFF"
},
"georgianps": {
"type": "_sbcs",
"chars": "\x80\x81\u201A\u0192\u201E\u2026\u2020\u2021\u02C6\u2030\u0160\u2039\u0152\x8D\x8E\x8F\x90\u2018\u2019\u201C\u201D\u2022\u2013\u2014\u02DC\u2122\u0161\u203A\u0153\x9D\x9E\u0178\xA0\xA1\xA2\xA3\xA4\xA5\xA6\xA7\xA8\xA9\xAA\xAB\xAC\xAD\xAE\xAF\xB0\xB1\xB2\xB3\xB4\xB5\xB6\xB7\xB8\xB9\xBA\xBB\xBC\xBD\xBE\xBF\u10D0\u10D1\u10D2\u10D3\u10D4\u10D5\u10D6\u10F1\u10D7\u10D8\u10D9\u10DA\u10DB\u10DC\u10F2\u10DD\u10DE\u10DF\u10E0\u10E1\u10E2\u10F3\u10E3\u10E4\u10E5\u10E6\u10E7\u10E8\u10E9\u10EA\u10EB\u10EC\u10ED\u10EE\u10F4\u10EF\u10F0\u10F5\xE6\xE7\xE8\xE9\xEA\xEB\xEC\xED\xEE\xEF\xF0\xF1\xF2\xF3\xF4\xF5\xF6\xF7\xF8\xF9\xFA\xFB\xFC\xFD\xFE\xFF"
},
"pt154": {
"type": "_sbcs",
"chars": "\u0496\u0492\u04EE\u0493\u201E\u2026\u04B6\u04AE\u04B2\u04AF\u04A0\u04E2\u04A2\u049A\u04BA\u04B8\u0497\u2018\u2019\u201C\u201D\u2022\u2013\u2014\u04B3\u04B7\u04A1\u04E3\u04A3\u049B\u04BB\u04B9\xA0\u040E\u045E\u0408\u04E8\u0498\u04B0\xA7\u0401\xA9\u04D8\xAB\xAC\u04EF\xAE\u049C\xB0\u04B1\u0406\u0456\u0499\u04E9\xB6\xB7\u0451\u2116\u04D9\xBB\u0458\u04AA\u04AB\u049D\u0410\u0411\u0412\u0413\u0414\u0415\u0416\u0417\u0418\u0419\u041A\u041B\u041C\u041D\u041E\u041F\u0420\u0421\u0422\u0423\u0424\u0425\u0426\u0427\u0428\u0429\u042A\u042B\u042C\u042D\u042E\u042F\u0430\u0431\u0432\u0433\u0434\u0435\u0436\u0437\u0438\u0439\u043A\u043B\u043C\u043D\u043E\u043F\u0440\u0441\u0442\u0443\u0444\u0445\u0446\u0447\u0448\u0449\u044A\u044B\u044C\u044D\u044E\u044F"
},
"viscii": {
"type": "_sbcs",
"chars": "\0\u1EB2\u1EB4\u1EAA\x07\b \n\v\f\r\u1EF6\u1EF8\x1B\u1EF4 !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\x7F\u1EA0\u1EAE\u1EB0\u1EB6\u1EA4\u1EA6\u1EA8\u1EAC\u1EBC\u1EB8\u1EBE\u1EC0\u1EC2\u1EC4\u1EC6\u1ED0\u1ED2\u1ED4\u1ED6\u1ED8\u1EE2\u1EDA\u1EDC\u1EDE\u1ECA\u1ECE\u1ECC\u1EC8\u1EE6\u0168\u1EE4\u1EF2\xD5\u1EAF\u1EB1\u1EB7\u1EA5\u1EA7\u1EA9\u1EAD\u1EBD\u1EB9\u1EBF\u1EC1\u1EC3\u1EC5\u1EC7\u1ED1\u1ED3\u1ED5\u1ED7\u1EE0\u01A0\u1ED9\u1EDD\u1EDF\u1ECB\u1EF0\u1EE8\u1EEA\u1EEC\u01A1\u1EDB\u01AF\xC0\xC1\xC2\xC3\u1EA2\u0102\u1EB3\u1EB5\xC8\xC9\xCA\u1EBA\xCC\xCD\u0128\u1EF3\u0110\u1EE9\xD2\xD3\xD4\u1EA1\u1EF7\u1EEB\u1EED\xD9\xDA\u1EF9\u1EF5\xDD\u1EE1\u01B0\xE0\xE1\xE2\xE3\u1EA3\u0103\u1EEF\u1EAB\xE8\xE9\xEA\u1EBB\xEC\xED\u0129\u1EC9\u0111\u1EF1\xF2\xF3\xF4\xF5\u1ECF\u1ECD\u1EE5\xF9\xFA\u0169\u1EE7\xFD\u1EE3\u1EEE"
},
"iso646cn": {
"type": "_sbcs",
"chars": "\0\x07\b \n\v\f\r\x1B !\"#\xA5%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}\u203E\x7F\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"
},
"iso646jp": {
"type": "_sbcs",
"chars": "\0\x07\b \n\v\f\r\x1B !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\xA5]^_`abcdefghijklmnopqrstuvwxyz{|}\u203E\x7F\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"
},
"hproman8": {
"type": "_sbcs",
"chars": "\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8A\x8B\x8C\x8D\x8E\x8F\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9A\x9B\x9C\x9D\x9E\x9F\xA0\xC0\xC2\xC8\xCA\xCB\xCE\xCF\xB4\u02CB\u02C6\xA8\u02DC\xD9\xDB\u20A4\xAF\xDD\xFD\xB0\xC7\xE7\xD1\xF1\xA1\xBF\xA4\xA3\xA5\xA7\u0192\xA2\xE2\xEA\xF4\xFB\xE1\xE9\xF3\xFA\xE0\xE8\xF2\xF9\xE4\xEB\xF6\xFC\xC5\xEE\xD8\xC6\xE5\xED\xF8\xE6\xC4\xEC\xD6\xDC\xC9\xEF\xDF\xD4\xC1\xC3\xE3\xD0\xF0\xCD\xCC\xD3\xD2\xD5\xF5\u0160\u0161\xDA\u0178\xFF\xDE\xFE\xB7\xB5\xB6\xBE\u2014\xBC\xBD\xAA\xBA\xAB\u25A0\xBB\xB1\uFFFD"
},
"macintosh": {
"type": "_sbcs",
"chars": "\xC4\xC5\xC7\xC9\xD1\xD6\xDC\xE1\xE0\xE2\xE4\xE3\xE5\xE7\xE9\xE8\xEA\xEB\xED\xEC\xEE\xEF\xF1\xF3\xF2\xF4\xF6\xF5\xFA\xF9\xFB\xFC\u2020\xB0\xA2\xA3\xA7\u2022\xB6\xDF\xAE\xA9\u2122\xB4\xA8\u2260\xC6\xD8\u221E\xB1\u2264\u2265\xA5\xB5\u2202\u2211\u220F\u03C0\u222B\xAA\xBA\u2126\xE6\xF8\xBF\xA1\xAC\u221A\u0192\u2248\u2206\xAB\xBB\u2026\xA0\xC0\xC3\xD5\u0152\u0153\u2013\u2014\u201C\u201D\u2018\u2019\xF7\u25CA\xFF\u0178\u2044\xA4\u2039\u203A\uFB01\uFB02\u2021\xB7\u201A\u201E\u2030\xC2\xCA\xC1\xCB\xC8\xCD\xCE\xCF\xCC\xD3\xD4\uFFFD\xD2\xDA\xDB\xD9\u0131\u02C6\u02DC\xAF\u02D8\u02D9\u02DA\xB8\u02DD\u02DB\u02C7"
},
"ascii": {
"type": "_sbcs",
"chars": "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"
},
"tis620": {
"type": "_sbcs",
"chars": "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u0E01\u0E02\u0E03\u0E04\u0E05\u0E06\u0E07\u0E08\u0E09\u0E0A\u0E0B\u0E0C\u0E0D\u0E0E\u0E0F\u0E10\u0E11\u0E12\u0E13\u0E14\u0E15\u0E16\u0E17\u0E18\u0E19\u0E1A\u0E1B\u0E1C\u0E1D\u0E1E\u0E1F\u0E20\u0E21\u0E22\u0E23\u0E24\u0E25\u0E26\u0E27\u0E28\u0E29\u0E2A\u0E2B\u0E2C\u0E2D\u0E2E\u0E2F\u0E30\u0E31\u0E32\u0E33\u0E34\u0E35\u0E36\u0E37\u0E38\u0E39\u0E3A\uFFFD\uFFFD\uFFFD\uFFFD\u0E3F\u0E40\u0E41\u0E42\u0E43\u0E44\u0E45\u0E46\u0E47\u0E48\u0E49\u0E4A\u0E4B\u0E4C\u0E4D\u0E4E\u0E4F\u0E50\u0E51\u0E52\u0E53\u0E54\u0E55\u0E56\u0E57\u0E58\u0E59\u0E5A\u0E5B\uFFFD\uFFFD\uFFFD\uFFFD"
}
};
}
});
var require_dbcs_codec2 = __commonJS2({
"node_modules/raw-body/node_modules/iconv-lite/encodings/dbcs-codec.js"(exports2) {
"use strict";
var Buffer2 = require_safer2().Buffer;
exports2._dbcs = DBCSCodec;
var UNASSIGNED = -1;
var GB18030_CODE = -2;
var SEQ_START = -10;
var NODE_START = -1e3;
var UNASSIGNED_NODE = new Array(256);
var DEF_CHAR = -1;
for (i = 0; i < 256; i++)
UNASSIGNED_NODE[i] = UNASSIGNED;
var i;
function DBCSCodec(codecOptions, iconv2) {
this.encodingName = codecOptions.encodingName;
if (!codecOptions)
throw new Error("DBCS codec is called without the data.");
if (!codecOptions.table)
throw new Error("Encoding '" + this.encodingName + "' has no data.");
var mappingTable = codecOptions.table();
this.decodeTables = [];
this.decodeTables[0] = UNASSIGNED_NODE.slice(0);
this.decodeTableSeq = [];
for (var i2 = 0; i2 < mappingTable.length; i2++)
this._addDecodeChunk(mappingTable[i2]);
if (typeof codecOptions.gb18030 === "function") {
this.gb18030 = codecOptions.gb18030();
var commonThirdByteNodeIdx = this.decodeTables.length;
this.decodeTables.push(UNASSIGNED_NODE.slice(0));
var commonFourthByteNodeIdx = this.decodeTables.length;
this.decodeTables.push(UNASSIGNED_NODE.slice(0));
var firstByteNode = this.decodeTables[0];
for (var i2 = 129; i2 <= 254; i2++) {
var secondByteNode = this.decodeTables[NODE_START - firstByteNode[i2]];
for (var j = 48; j <= 57; j++) {
if (secondByteNode[j] === UNASSIGNED) {
secondByteNode[j] = NODE_START - commonThirdByteNodeIdx;
} else if (secondByteNode[j] > NODE_START) {
throw new Error("gb18030 decode tables conflict at byte 2");
}
var thirdByteNode = this.decodeTables[NODE_START - secondByteNode[j]];
for (var k = 129; k <= 254; k++) {
if (thirdByteNode[k] === UNASSIGNED) {
thirdByteNode[k] = NODE_START - commonFourthByteNodeIdx;
} else if (thirdByteNode[k] === NODE_START - commonFourthByteNodeIdx) {
continue;
} else if (thirdByteNode[k] > NODE_START) {
throw new Error("gb18030 decode tables conflict at byte 3");
}
var fourthByteNode = this.decodeTables[NODE_START - thirdByteNode[k]];
for (var l = 48; l <= 57; l++) {
if (fourthByteNode[l] === UNASSIGNED)
fourthByteNode[l] = GB18030_CODE;
}
}
}
}
}
this.defaultCharUnicode = iconv2.defaultCharUnicode;
this.encodeTable = [];
this.encodeTableSeq = [];
var skipEncodeChars = {};
if (codecOptions.encodeSkipVals)
for (var i2 = 0; i2 < codecOptions.encodeSkipVals.length; i2++) {
var val2 = codecOptions.encodeSkipVals[i2];
if (typeof val2 === "number")
skipEncodeChars[val2] = true;
else
for (var j = val2.from; j <= val2.to; j++)
skipEncodeChars[j] = true;
}
this._fillEncodeTable(0, 0, skipEncodeChars);
if (codecOptions.encodeAdd) {
for (var uChar in codecOptions.encodeAdd)
if (Object.prototype.hasOwnProperty.call(codecOptions.encodeAdd, uChar))
this._setEncodeChar(uChar.charCodeAt(0), codecOptions.encodeAdd[uChar]);
}
this.defCharSB = this.encodeTable[0][iconv2.defaultCharSingleByte.charCodeAt(0)];
if (this.defCharSB === UNASSIGNED) this.defCharSB = this.encodeTable[0]["?"];
if (this.defCharSB === UNASSIGNED) this.defCharSB = "?".charCodeAt(0);
}
DBCSCodec.prototype.encoder = DBCSEncoder;
DBCSCodec.prototype.decoder = DBCSDecoder;
DBCSCodec.prototype._getDecodeTrieNode = function(addr) {
var bytes = [];
for (; addr > 0; addr >>>= 8)
bytes.push(addr & 255);
if (bytes.length == 0)
bytes.push(0);
var node = this.decodeTables[0];
for (var i2 = bytes.length - 1; i2 > 0; i2--) {
var val2 = node[bytes[i2]];
if (val2 == UNASSIGNED) {
node[bytes[i2]] = NODE_START - this.decodeTables.length;
this.decodeTables.push(node = UNASSIGNED_NODE.slice(0));
} else if (val2 <= NODE_START) {
node = this.decodeTables[NODE_START - val2];
} else
throw new Error("Overwrite byte in " + this.encodingName + ", addr: " + addr.toString(16));
}
return node;
};
DBCSCodec.prototype._addDecodeChunk = function(chunk) {
var curAddr = parseInt(chunk[0], 16);
var writeTable = this._getDecodeTrieNode(curAddr);
curAddr = curAddr & 255;
for (var k = 1; k < chunk.length; k++) {
var part = chunk[k];
if (typeof part === "string") {
for (var l = 0; l < part.length; ) {
var code = part.charCodeAt(l++);
if (55296 <= code && code < 56320) {
var codeTrail = part.charCodeAt(l++);
if (56320 <= codeTrail && codeTrail < 57344)
writeTable[curAddr++] = 65536 + (code - 55296) * 1024 + (codeTrail - 56320);
else
throw new Error("Incorrect surrogate pair in " + this.encodingName + " at chunk " + chunk[0]);
} else if (4080 < code && code <= 4095) {
var len = 4095 - code + 2;
var seq = [];
for (var m = 0; m < len; m++)
seq.push(part.charCodeAt(l++));
writeTable[curAddr++] = SEQ_START - this.decodeTableSeq.length;
this.decodeTableSeq.push(seq);
} else
writeTable[curAddr++] = code;
}
} else if (typeof part === "number") {
var charCode = writeTable[curAddr - 1] + 1;
for (var l = 0; l < part; l++)
writeTable[curAddr++] = charCode++;
} else
throw new Error("Incorrect type '" + typeof part + "' given in " + this.encodingName + " at chunk " + chunk[0]);
}
if (curAddr > 255)
throw new Error("Incorrect chunk in " + this.encodingName + " at addr " + chunk[0] + ": too long" + curAddr);
};
DBCSCodec.prototype._getEncodeBucket = function(uCode) {
var high = uCode >> 8;
if (this.encodeTable[high] === void 0)
this.encodeTable[high] = UNASSIGNED_NODE.slice(0);
return this.encodeTable[high];
};
DBCSCodec.prototype._setEncodeChar = function(uCode, dbcsCode) {
var bucket = this._getEncodeBucket(uCode);
var low = uCode & 255;
if (bucket[low] <= SEQ_START)
this.encodeTableSeq[SEQ_START - bucket[low]][DEF_CHAR] = dbcsCode;
else if (bucket[low] == UNASSIGNED)
bucket[low] = dbcsCode;
};
DBCSCodec.prototype._setEncodeSequence = function(seq, dbcsCode) {
var uCode = seq[0];
var bucket = this._getEncodeBucket(uCode);
var low = uCode & 255;
var node;
if (bucket[low] <= SEQ_START) {
node = this.encodeTableSeq[SEQ_START - bucket[low]];
} else {
node = {};
if (bucket[low] !== UNASSIGNED) node[DEF_CHAR] = bucket[low];
bucket[low] = SEQ_START - this.encodeTableSeq.length;
this.encodeTableSeq.push(node);
}
for (var j = 1; j < seq.length - 1; j++) {
var oldVal = node[uCode];
if (typeof oldVal === "object")
node = oldVal;
else {
node = node[uCode] = {};
if (oldVal !== void 0)
node[DEF_CHAR] = oldVal;
}
}
uCode = seq[seq.length - 1];
node[uCode] = dbcsCode;
};
DBCSCodec.prototype._fillEncodeTable = function(nodeIdx, prefix, skipEncodeChars) {
var node = this.decodeTables[nodeIdx];
var hasValues = false;
var subNodeEmpty = {};
for (var i2 = 0; i2 < 256; i2++) {
var uCode = node[i2];
var mbCode = prefix + i2;
if (skipEncodeChars[mbCode])
continue;
if (uCode >= 0) {
this._setEncodeChar(uCode, mbCode);
hasValues = true;
} else if (uCode <= NODE_START) {
var subNodeIdx = NODE_START - uCode;
if (!subNodeEmpty[subNodeIdx]) {
var newPrefix = mbCode << 8 >>> 0;
if (this._fillEncodeTable(subNodeIdx, newPrefix, skipEncodeChars))
hasValues = true;
else
subNodeEmpty[subNodeIdx] = true;
}
} else if (uCode <= SEQ_START) {
this._setEncodeSequence(this.decodeTableSeq[SEQ_START - uCode], mbCode);
hasValues = true;
}
}
return hasValues;
};
function DBCSEncoder(options, codec) {
this.leadSurrogate = -1;
this.seqObj = void 0;
this.encodeTable = codec.encodeTable;
this.encodeTableSeq = codec.encodeTableSeq;
this.defaultCharSingleByte = codec.defCharSB;
this.gb18030 = codec.gb18030;
}
DBCSEncoder.prototype.write = function(str) {
var newBuf = Buffer2.alloc(str.length * (this.gb18030 ? 4 : 3)), leadSurrogate = this.leadSurrogate, seqObj = this.seqObj, nextChar = -1, i2 = 0, j = 0;
while (true) {
if (nextChar === -1) {
if (i2 == str.length) break;
var uCode = str.charCodeAt(i2++);
} else {
var uCode = nextChar;
nextChar = -1;
}
if (55296 <= uCode && uCode < 57344) {
if (uCode < 56320) {
if (leadSurrogate === -1) {
leadSurrogate = uCode;
continue;
} else {
leadSurrogate = uCode;
uCode = UNASSIGNED;
}
} else {
if (leadSurrogate !== -1) {
uCode = 65536 + (leadSurrogate - 55296) * 1024 + (uCode - 56320);
leadSurrogate = -1;
} else {
uCode = UNASSIGNED;
}
}
} else if (leadSurrogate !== -1) {
nextChar = uCode;
uCode = UNASSIGNED;
leadSurrogate = -1;
}
var dbcsCode = UNASSIGNED;
if (seqObj !== void 0 && uCode != UNASSIGNED) {
var resCode = seqObj[uCode];
if (typeof resCode === "object") {
seqObj = resCode;
continue;
} else if (typeof resCode == "number") {
dbcsCode = resCode;
} else if (resCode == void 0) {
resCode = seqObj[DEF_CHAR];
if (resCode !== void 0) {
dbcsCode = resCode;
nextChar = uCode;
} else {
}
}
seqObj = void 0;
} else if (uCode >= 0) {
var subtable = this.encodeTable[uCode >> 8];
if (subtable !== void 0)
dbcsCode = subtable[uCode & 255];
if (dbcsCode <= SEQ_START) {
seqObj = this.encodeTableSeq[SEQ_START - dbcsCode];
continue;
}
if (dbcsCode == UNASSIGNED && this.gb18030) {
var idx = findIdx(this.gb18030.uChars, uCode);
if (idx != -1) {
var dbcsCode = this.gb18030.gbChars[idx] + (uCode - this.gb18030.uChars[idx]);
newBuf[j++] = 129 + Math.floor(dbcsCode / 12600);
dbcsCode = dbcsCode % 12600;
newBuf[j++] = 48 + Math.floor(dbcsCode / 1260);
dbcsCode = dbcsCode % 1260;
newBuf[j++] = 129 + Math.floor(dbcsCode / 10);
dbcsCode = dbcsCode % 10;
newBuf[j++] = 48 + dbcsCode;
continue;
}
}
}
if (dbcsCode === UNASSIGNED)
dbcsCode = this.defaultCharSingleByte;
if (dbcsCode < 256) {
newBuf[j++] = dbcsCode;
} else if (dbcsCode < 65536) {
newBuf[j++] = dbcsCode >> 8;
newBuf[j++] = dbcsCode & 255;
} else if (dbcsCode < 16777216) {
newBuf[j++] = dbcsCode >> 16;
newBuf[j++] = dbcsCode >> 8 & 255;
newBuf[j++] = dbcsCode & 255;
} else {
newBuf[j++] = dbcsCode >>> 24;
newBuf[j++] = dbcsCode >>> 16 & 255;
newBuf[j++] = dbcsCode >>> 8 & 255;
newBuf[j++] = dbcsCode & 255;
}
}
this.seqObj = seqObj;
this.leadSurrogate = leadSurrogate;
return newBuf.slice(0, j);
};
DBCSEncoder.prototype.end = function() {
if (this.leadSurrogate === -1 && this.seqObj === void 0)
return;
var newBuf = Buffer2.alloc(10), j = 0;
if (this.seqObj) {
var dbcsCode = this.seqObj[DEF_CHAR];
if (dbcsCode !== void 0) {
if (dbcsCode < 256) {
newBuf[j++] = dbcsCode;
} else {
newBuf[j++] = dbcsCode >> 8;
newBuf[j++] = dbcsCode & 255;
}
} else {
}
this.seqObj = void 0;
}
if (this.leadSurrogate !== -1) {
newBuf[j++] = this.defaultCharSingleByte;
this.leadSurrogate = -1;
}
return newBuf.slice(0, j);
};
DBCSEncoder.prototype.findIdx = findIdx;
function DBCSDecoder(options, codec) {
this.nodeIdx = 0;
this.prevBytes = [];
this.decodeTables = codec.decodeTables;
this.decodeTableSeq = codec.decodeTableSeq;
this.defaultCharUnicode = codec.defaultCharUnicode;
this.gb18030 = codec.gb18030;
}
DBCSDecoder.prototype.write = function(buf) {
var newBuf = Buffer2.alloc(buf.length * 2), nodeIdx = this.nodeIdx, prevBytes = this.prevBytes, prevOffset = this.prevBytes.length, seqStart = -this.prevBytes.length, uCode;
for (var i2 = 0, j = 0; i2 < buf.length; i2++) {
var curByte = i2 >= 0 ? buf[i2] : prevBytes[i2 + prevOffset];
var uCode = this.decodeTables[nodeIdx][curByte];
if (uCode >= 0) {
} else if (uCode === UNASSIGNED) {
uCode = this.defaultCharUnicode.charCodeAt(0);
i2 = seqStart;
} else if (uCode === GB18030_CODE) {
if (i2 >= 3) {
var ptr = (buf[i2 - 3] - 129) * 12600 + (buf[i2 - 2] - 48) * 1260 + (buf[i2 - 1] - 129) * 10 + (curByte - 48);
} else {
var ptr = (prevBytes[i2 - 3 + prevOffset] - 129) * 12600 + ((i2 - 2 >= 0 ? buf[i2 - 2] : prevBytes[i2 - 2 + prevOffset]) - 48) * 1260 + ((i2 - 1 >= 0 ? buf[i2 - 1] : prevBytes[i2 - 1 + prevOffset]) - 129) * 10 + (curByte - 48);
}
var idx = findIdx(this.gb18030.gbChars, ptr);
uCode = this.gb18030.uChars[idx] + ptr - this.gb18030.gbChars[idx];
} else if (uCode <= NODE_START) {
nodeIdx = NODE_START - uCode;
continue;
} else if (uCode <= SEQ_START) {
var seq = this.decodeTableSeq[SEQ_START - uCode];
for (var k = 0; k < seq.length - 1; k++) {
uCode = seq[k];
newBuf[j++] = uCode & 255;
newBuf[j++] = uCode >> 8;
}
uCode = seq[seq.length - 1];
} else
throw new Error("iconv-lite internal error: invalid decoding table value " + uCode + " at " + nodeIdx + "/" + curByte);
if (uCode >= 65536) {
uCode -= 65536;
var uCodeLead = 55296 | uCode >> 10;
newBuf[j++] = uCodeLead & 255;
newBuf[j++] = uCodeLead >> 8;
uCode = 56320 | uCode & 1023;
}
newBuf[j++] = uCode & 255;
newBuf[j++] = uCode >> 8;
nodeIdx = 0;
seqStart = i2 + 1;
}
this.nodeIdx = nodeIdx;
this.prevBytes = seqStart >= 0 ? Array.prototype.slice.call(buf, seqStart) : prevBytes.slice(seqStart + prevOffset).concat(Array.prototype.slice.call(buf));
return newBuf.slice(0, j).toString("ucs2");
};
DBCSDecoder.prototype.end = function() {
var ret = "";
while (this.prevBytes.length > 0) {
ret += this.defaultCharUnicode;
var bytesArr = this.prevBytes.slice(1);
this.prevBytes = [];
this.nodeIdx = 0;
if (bytesArr.length > 0)
ret += this.write(bytesArr);
}
this.prevBytes = [];
this.nodeIdx = 0;
return ret;
};
function findIdx(table, val2) {
if (table[0] > val2)
return -1;
var l = 0, r = table.length;
while (l < r - 1) {
var mid = l + (r - l + 1 >> 1);
if (table[mid] <= val2)
l = mid;
else
r = mid;
}
return l;
}
}
});
var require_shiftjis2 = __commonJS2({
"node_modules/raw-body/node_modules/iconv-lite/encodings/tables/shiftjis.json"(exports2, module2) {
module2.exports = [
["0", "\0", 128],
["a1", "\uFF61", 62],
["8140", "\u3000\u3001\u3002\uFF0C\uFF0E\u30FB\uFF1A\uFF1B\uFF1F\uFF01\u309B\u309C\xB4\uFF40\xA8\uFF3E\uFFE3\uFF3F\u30FD\u30FE\u309D\u309E\u3003\u4EDD\u3005\u3006\u3007\u30FC\u2015\u2010\uFF0F\uFF3C\uFF5E\u2225\uFF5C\u2026\u2025\u2018\u2019\u201C\u201D\uFF08\uFF09\u3014\u3015\uFF3B\uFF3D\uFF5B\uFF5D\u3008", 9, "\uFF0B\uFF0D\xB1\xD7"],
["8180", "\xF7\uFF1D\u2260\uFF1C\uFF1E\u2266\u2267\u221E\u2234\u2642\u2640\xB0\u2032\u2033\u2103\uFFE5\uFF04\uFFE0\uFFE1\uFF05\uFF03\uFF06\uFF0A\uFF20\xA7\u2606\u2605\u25CB\u25CF\u25CE\u25C7\u25C6\u25A1\u25A0\u25B3\u25B2\u25BD\u25BC\u203B\u3012\u2192\u2190\u2191\u2193\u3013"],
["81b8", "\u2208\u220B\u2286\u2287\u2282\u2283\u222A\u2229"],
["81c8", "\u2227\u2228\uFFE2\u21D2\u21D4\u2200\u2203"],
["81da", "\u2220\u22A5\u2312\u2202\u2207\u2261\u2252\u226A\u226B\u221A\u223D\u221D\u2235\u222B\u222C"],
["81f0", "\u212B\u2030\u266F\u266D\u266A\u2020\u2021\xB6"],
["81fc", "\u25EF"],
["824f", "\uFF10", 9],
["8260", "\uFF21", 25],
["8281", "\uFF41", 25],
["829f", "\u3041", 82],
["8340", "\u30A1", 62],
["8380", "\u30E0", 22],
["839f", "\u0391", 16, "\u03A3", 6],
["83bf", "\u03B1", 16, "\u03C3", 6],
["8440", "\u0410", 5, "\u0401\u0416", 25],
["8470", "\u0430", 5, "\u0451\u0436", 7],
["8480", "\u043E", 17],
["849f", "\u2500\u2502\u250C\u2510\u2518\u2514\u251C\u252C\u2524\u2534\u253C\u2501\u2503\u250F\u2513\u251B\u2517\u2523\u2533\u252B\u253B\u254B\u2520\u252F\u2528\u2537\u253F\u251D\u2530\u2525\u2538\u2542"],
["8740", "\u2460", 19, "\u2160", 9],
["875f", "\u3349\u3314\u3322\u334D\u3318\u3327\u3303\u3336\u3351\u3357\u330D\u3326\u3323\u332B\u334A\u333B\u339C\u339D\u339E\u338E\u338F\u33C4\u33A1"],
["877e", "\u337B"],
["8780", "\u301D\u301F\u2116\u33CD\u2121\u32A4", 4, "\u3231\u3232\u3239\u337E\u337D\u337C\u2252\u2261\u222B\u222E\u2211\u221A\u22A5\u2220\u221F\u22BF\u2235\u2229\u222A"],
["889f", "\u4E9C\u5516\u5A03\u963F\u54C0\u611B\u6328\u59F6\u9022\u8475\u831C\u7A50\u60AA\u63E1\u6E25\u65ED\u8466\u82A6\u9BF5\u6893\u5727\u65A1\u6271\u5B9B\u59D0\u867B\u98F4\u7D62\u7DBE\u9B8E\u6216\u7C9F\u88B7\u5B89\u5EB5\u6309\u6697\u6848\u95C7\u978D\u674F\u4EE5\u4F0A\u4F4D\u4F9D\u5049\u56F2\u5937\u59D4\u5A01\u5C09\u60DF\u610F\u6170\u6613\u6905\u70BA\u754F\u7570\u79FB\u7DAD\u7DEF\u80C3\u840E\u8863\u8B02\u9055\u907A\u533B\u4E95\u4EA5\u57DF\u80B2\u90C1\u78EF\u4E00\u58F1\u6EA2\u9038\u7A32\u8328\u828B\u9C2F\u5141\u5370\u54BD\u54E1\u56E0\u59FB\u5F15\u98F2\u6DEB\u80E4\u852D"],
["8940", "\u9662\u9670\u96A0\u97FB\u540B\u53F3\u5B87\u70CF\u7FBD\u8FC2\u96E8\u536F\u9D5C\u7ABA\u4E11\u7893\u81FC\u6E26\u5618\u5504\u6B1D\u851A\u9C3B\u59E5\u53A9\u6D66\u74DC\u958F\u5642\u4E91\u904B\u96F2\u834F\u990C\u53E1\u55B6\u5B30\u5F71\u6620\u66F3\u6804\u6C38\u6CF3\u6D29\u745B\u76C8\u7A4E\u9834\u82F1\u885B\u8A60\u92ED\u6DB2\u75AB\u76CA\u99C5\u60A6\u8B01\u8D8A\u95B2\u698E\u53AD\u5186"],
["8980", "\u5712\u5830\u5944\u5BB4\u5EF6\u6028\u63A9\u63F4\u6CBF\u6F14\u708E\u7114\u7159\u71D5\u733F\u7E01\u8276\u82D1\u8597\u9060\u925B\u9D1B\u5869\u65BC\u6C5A\u7525\u51F9\u592E\u5965\u5F80\u5FDC\u62BC\u65FA\u6A2A\u6B27\u6BB4\u738B\u7FC1\u8956\u9D2C\u9D0E\u9EC4\u5CA1\u6C96\u837B\u5104\u5C4B\u61B6\u81C6\u6876\u7261\u4E59\u4FFA\u5378\u6069\u6E29\u7A4F\u97F3\u4E0B\u5316\u4EEE\u4F55\u4F3D\u4FA1\u4F73\u52A0\u53EF\u5609\u590F\u5AC1\u5BB6\u5BE1\u79D1\u6687\u679C\u67B6\u6B4C\u6CB3\u706B\u73C2\u798D\u79BE\u7A3C\u7B87\u82B1\u82DB\u8304\u8377\u83EF\u83D3\u8766\u8AB2\u5629\u8CA8\u8FE6\u904E\u971E\u868A\u4FC4\u5CE8\u6211\u7259\u753B\u81E5\u82BD\u86FE\u8CC0\u96C5\u9913\u99D5\u4ECB\u4F1A\u89E3\u56DE\u584A\u58CA\u5EFB\u5FEB\u602A\u6094\u6062\u61D0\u6212\u62D0\u6539"],
["8a40", "\u9B41\u6666\u68B0\u6D77\u7070\u754C\u7686\u7D75\u82A5\u87F9\u958B\u968E\u8C9D\u51F1\u52BE\u5916\u54B3\u5BB3\u5D16\u6168\u6982\u6DAF\u788D\u84CB\u8857\u8A72\u93A7\u9AB8\u6D6C\u99A8\u86D9\u57A3\u67FF\u86CE\u920E\u5283\u5687\u5404\u5ED3\u62E1\u64B9\u683C\u6838\u6BBB\u7372\u78BA\u7A6B\u899A\u89D2\u8D6B\u8F03\u90ED\u95A3\u9694\u9769\u5B66\u5CB3\u697D\u984D\u984E\u639B\u7B20\u6A2B"],
["8a80", "\u6A7F\u68B6\u9C0D\u6F5F\u5272\u559D\u6070\u62EC\u6D3B\u6E07\u6ED1\u845B\u8910\u8F44\u4E14\u9C39\u53F6\u691B\u6A3A\u9784\u682A\u515C\u7AC3\u84B2\u91DC\u938C\u565B\u9D28\u6822\u8305\u8431\u7CA5\u5208\u82C5\u74E6\u4E7E\u4F83\u51A0\u5BD2\u520A\u52D8\u52E7\u5DFB\u559A\u582A\u59E6\u5B8C\u5B98\u5BDB\u5E72\u5E79\u60A3\u611F\u6163\u61BE\u63DB\u6562\u67D1\u6853\u68FA\u6B3E\u6B53\u6C57\u6F22\u6F97\u6F45\u74B0\u7518\u76E3\u770B\u7AFF\u7BA1\u7C21\u7DE9\u7F36\u7FF0\u809D\u8266\u839E\u89B3\u8ACC\u8CAB\u9084\u9451\u9593\u9591\u95A2\u9665\u97D3\u9928\u8218\u4E38\u542B\u5CB8\u5DCC\u73A9\u764C\u773C\u5CA9\u7FEB\u8D0B\u96C1\u9811\u9854\u9858\u4F01\u4F0E\u5371\u559C\u5668\u57FA\u5947\u5B09\u5BC4\u5C90\u5E0C\u5E7E\u5FCC\u63EE\u673A\u65D7\u65E2\u671F\u68CB\u68C4"],
["8b40", "\u6A5F\u5E30\u6BC5\u6C17\u6C7D\u757F\u7948\u5B63\u7A00\u7D00\u5FBD\u898F\u8A18\u8CB4\u8D77\u8ECC\u8F1D\u98E2\u9A0E\u9B3C\u4E80\u507D\u5100\u5993\u5B9C\u622F\u6280\u64EC\u6B3A\u72A0\u7591\u7947\u7FA9\u87FB\u8ABC\u8B70\u63AC\u83CA\u97A0\u5409\u5403\u55AB\u6854\u6A58\u8A70\u7827\u6775\u9ECD\u5374\u5BA2\u811A\u8650\u9006\u4E18\u4E45\u4EC7\u4F11\u53CA\u5438\u5BAE\u5F13\u6025\u6551"],
["8b80", "\u673D\u6C42\u6C72\u6CE3\u7078\u7403\u7A76\u7AAE\u7B08\u7D1A\u7CFE\u7D66\u65E7\u725B\u53BB\u5C45\u5DE8\u62D2\u62E0\u6319\u6E20\u865A\u8A31\u8DDD\u92F8\u6F01\u79A6\u9B5A\u4EA8\u4EAB\u4EAC\u4F9B\u4FA0\u50D1\u5147\u7AF6\u5171\u51F6\u5354\u5321\u537F\u53EB\u55AC\u5883\u5CE1\u5F37\u5F4A\u602F\u6050\u606D\u631F\u6559\u6A4B\u6CC1\u72C2\u72ED\u77EF\u80F8\u8105\u8208\u854E\u90F7\u93E1\u97FF\u9957\u9A5A\u4EF0\u51DD\u5C2D\u6681\u696D\u5C40\u66F2\u6975\u7389\u6850\u7C81\u50C5\u52E4\u5747\u5DFE\u9326\u65A4\u6B23\u6B3D\u7434\u7981\u79BD\u7B4B\u7DCA\u82B9\u83CC\u887F\u895F\u8B39\u8FD1\u91D1\u541F\u9280\u4E5D\u5036\u53E5\u533A\u72D7\u7396\u77E9\u82E6\u8EAF\u99C6\u99C8\u99D2\u5177\u611A\u865E\u55B0\u7A7A\u5076\u5BD3\u9047\u9685\u4E32\u6ADB\u91E7\u5C51\u5C48"],
["8c40", "\u6398\u7A9F\u6C93\u9774\u8F61\u7AAA\u718A\u9688\u7C82\u6817\u7E70\u6851\u936C\u52F2\u541B\u85AB\u8A13\u7FA4\u8ECD\u90E1\u5366\u8888\u7941\u4FC2\u50BE\u5211\u5144\u5553\u572D\u73EA\u578B\u5951\u5F62\u5F84\u6075\u6176\u6167\u61A9\u63B2\u643A\u656C\u666F\u6842\u6E13\u7566\u7A3D\u7CFB\u7D4C\u7D99\u7E4B\u7F6B\u830E\u834A\u86CD\u8A08\u8A63\u8B66\u8EFD\u981A\u9D8F\u82B8\u8FCE\u9BE8"],
["8c80", "\u5287\u621F\u6483\u6FC0\u9699\u6841\u5091\u6B20\u6C7A\u6F54\u7A74\u7D50\u8840\u8A23\u6708\u4EF6\u5039\u5026\u5065\u517C\u5238\u5263\u55A7\u570F\u5805\u5ACC\u5EFA\u61B2\u61F8\u62F3\u6372\u691C\u6A29\u727D\u72AC\u732E\u7814\u786F\u7D79\u770C\u80A9\u898B\u8B19\u8CE2\u8ED2\u9063\u9375\u967A\u9855\u9A13\u9E78\u5143\u539F\u53B3\u5E7B\u5F26\u6E1B\u6E90\u7384\u73FE\u7D43\u8237\u8A00\u8AFA\u9650\u4E4E\u500B\u53E4\u547C\u56FA\u59D1\u5B64\u5DF1\u5EAB\u5F27\u6238\u6545\u67AF\u6E56\u72D0\u7CCA\u88B4\u80A1\u80E1\u83F0\u864E\u8A87\u8DE8\u9237\u96C7\u9867\u9F13\u4E94\u4E92\u4F0D\u5348\u5449\u543E\u5A2F\u5F8C\u5FA1\u609F\u68A7\u6A8E\u745A\u7881\u8A9E\u8AA4\u8B77\u9190\u4E5E\u9BC9\u4EA4\u4F7C\u4FAF\u5019\u5016\u5149\u516C\u529F\u52B9\u52FE\u539A\u53E3\u5411"],
["8d40", "\u540E\u5589\u5751\u57A2\u597D\u5B54\u5B5D\u5B8F\u5DE5\u5DE7\u5DF7\u5E78\u5E83\u5E9A\u5EB7\u5F18\u6052\u614C\u6297\u62D8\u63A7\u653B\u6602\u6643\u66F4\u676D\u6821\u6897\u69CB\u6C5F\u6D2A\u6D69\u6E2F\u6E9D\u7532\u7687\u786C\u7A3F\u7CE0\u7D05\u7D18\u7D5E\u7DB1\u8015\u8003\u80AF\u80B1\u8154\u818F\u822A\u8352\u884C\u8861\u8B1B\u8CA2\u8CFC\u90CA\u9175\u9271\u783F\u92FC\u95A4\u964D"],
["8d80", "\u9805\u9999\u9AD8\u9D3B\u525B\u52AB\u53F7\u5408\u58D5\u62F7\u6FE0\u8C6A\u8F5F\u9EB9\u514B\u523B\u544A\u56FD\u7A40\u9177\u9D60\u9ED2\u7344\u6F09\u8170\u7511\u5FFD\u60DA\u9AA8\u72DB\u8FBC\u6B64\u9803\u4ECA\u56F0\u5764\u58BE\u5A5A\u6068\u61C7\u660F\u6606\u6839\u68B1\u6DF7\u75D5\u7D3A\u826E\u9B42\u4E9B\u4F50\u53C9\u5506\u5D6F\u5DE6\u5DEE\u67FB\u6C99\u7473\u7802\u8A50\u9396\u88DF\u5750\u5EA7\u632B\u50B5\u50AC\u518D\u6700\u54C9\u585E\u59BB\u5BB0\u5F69\u624D\u63A1\u683D\u6B73\u6E08\u707D\u91C7\u7280\u7815\u7826\u796D\u658E\u7D30\u83DC\u88C1\u8F09\u969B\u5264\u5728\u6750\u7F6A\u8CA1\u51B4\u5742\u962A\u583A\u698A\u80B4\u54B2\u5D0E\u57FC\u7895\u9DFA\u4F5C\u524A\u548B\u643E\u6628\u6714\u67F5\u7A84\u7B56\u7D22\u932F\u685C\u9BAD\u7B39\u5319\u518A\u5237"],
["8e40", "\u5BDF\u62F6\u64AE\u64E6\u672D\u6BBA\u85A9\u96D1\u7690\u9BD6\u634C\u9306\u9BAB\u76BF\u6652\u4E09\u5098\u53C2\u5C71\u60E8\u6492\u6563\u685F\u71E6\u73CA\u7523\u7B97\u7E82\u8695\u8B83\u8CDB\u9178\u9910\u65AC\u66AB\u6B8B\u4ED5\u4ED4\u4F3A\u4F7F\u523A\u53F8\u53F2\u55E3\u56DB\u58EB\u59CB\u59C9\u59FF\u5B50\u5C4D\u5E02\u5E2B\u5FD7\u601D\u6307\u652F\u5B5C\u65AF\u65BD\u65E8\u679D\u6B62"],
["8e80", "\u6B7B\u6C0F\u7345\u7949\u79C1\u7CF8\u7D19\u7D2B\u80A2\u8102\u81F3\u8996\u8A5E\u8A69\u8A66\u8A8C\u8AEE\u8CC7\u8CDC\u96CC\u98FC\u6B6F\u4E8B\u4F3C\u4F8D\u5150\u5B57\u5BFA\u6148\u6301\u6642\u6B21\u6ECB\u6CBB\u723E\u74BD\u75D4\u78C1\u793A\u800C\u8033\u81EA\u8494\u8F9E\u6C50\u9E7F\u5F0F\u8B58\u9D2B\u7AFA\u8EF8\u5B8D\u96EB\u4E03\u53F1\u57F7\u5931\u5AC9\u5BA4\u6089\u6E7F\u6F06\u75BE\u8CEA\u5B9F\u8500\u7BE0\u5072\u67F4\u829D\u5C61\u854A\u7E1E\u820E\u5199\u5C04\u6368\u8D66\u659C\u716E\u793E\u7D17\u8005\u8B1D\u8ECA\u906E\u86C7\u90AA\u501F\u52FA\u5C3A\u6753\u707C\u7235\u914C\u91C8\u932B\u82E5\u5BC2\u5F31\u60F9\u4E3B\u53D6\u5B88\u624B\u6731\u6B8A\u72E9\u73E0\u7A2E\u816B\u8DA3\u9152\u9996\u5112\u53D7\u546A\u5BFF\u6388\u6A39\u7DAC\u9700\u56DA\u53CE\u5468"],
["8f40", "\u5B97\u5C31\u5DDE\u4FEE\u6101\u62FE\u6D32\u79C0\u79CB\u7D42\u7E4D\u7FD2\u81ED\u821F\u8490\u8846\u8972\u8B90\u8E74\u8F2F\u9031\u914B\u916C\u96C6\u919C\u4EC0\u4F4F\u5145\u5341\u5F93\u620E\u67D4\u6C41\u6E0B\u7363\u7E26\u91CD\u9283\u53D4\u5919\u5BBF\u6DD1\u795D\u7E2E\u7C9B\u587E\u719F\u51FA\u8853\u8FF0\u4FCA\u5CFB\u6625\u77AC\u7AE3\u821C\u99FF\u51C6\u5FAA\u65EC\u696F\u6B89\u6DF3"],
["8f80", "\u6E96\u6F64\u76FE\u7D14\u5DE1\u9075\u9187\u9806\u51E6\u521D\u6240\u6691\u66D9\u6E1A\u5EB6\u7DD2\u7F72\u66F8\u85AF\u85F7\u8AF8\u52A9\u53D9\u5973\u5E8F\u5F90\u6055\u92E4\u9664\u50B7\u511F\u52DD\u5320\u5347\u53EC\u54E8\u5546\u5531\u5617\u5968\u59BE\u5A3C\u5BB5\u5C06\u5C0F\u5C11\u5C1A\u5E84\u5E8A\u5EE0\u5F70\u627F\u6284\u62DB\u638C\u6377\u6607\u660C\u662D\u6676\u677E\u68A2\u6A1F\u6A35\u6CBC\u6D88\u6E09\u6E58\u713C\u7126\u7167\u75C7\u7701\u785D\u7901\u7965\u79F0\u7AE0\u7B11\u7CA7\u7D39\u8096\u83D6\u848B\u8549\u885D\u88F3\u8A1F\u8A3C\u8A54\u8A73\u8C61\u8CDE\u91A4\u9266\u937E\u9418\u969C\u9798\u4E0A\u4E08\u4E1E\u4E57\u5197\u5270\u57CE\u5834\u58CC\u5B22\u5E38\u60C5\u64FE\u6761\u6756\u6D44\u72B6\u7573\u7A63\u84B8\u8B72\u91B8\u9320\u5631\u57F4\u98FE"],
["9040", "\u62ED\u690D\u6B96\u71ED\u7E54\u8077\u8272\u89E6\u98DF\u8755\u8FB1\u5C3B\u4F38\u4FE1\u4FB5\u5507\u5A20\u5BDD\u5BE9\u5FC3\u614E\u632F\u65B0\u664B\u68EE\u699B\u6D78\u6DF1\u7533\u75B9\u771F\u795E\u79E6\u7D33\u81E3\u82AF\u85AA\u89AA\u8A3A\u8EAB\u8F9B\u9032\u91DD\u9707\u4EBA\u4EC1\u5203\u5875\u58EC\u5C0B\u751A\u5C3D\u814E\u8A0A\u8FC5\u9663\u976D\u7B25\u8ACF\u9808\u9162\u56F3\u53A8"],
["9080", "\u9017\u5439\u5782\u5E25\u63A8\u6C34\u708A\u7761\u7C8B\u7FE0\u8870\u9042\u9154\u9310\u9318\u968F\u745E\u9AC4\u5D07\u5D69\u6570\u67A2\u8DA8\u96DB\u636E\u6749\u6919\u83C5\u9817\u96C0\u88FE\u6F84\u647A\u5BF8\u4E16\u702C\u755D\u662F\u51C4\u5236\u52E2\u59D3\u5F81\u6027\u6210\u653F\u6574\u661F\u6674\u68F2\u6816\u6B63\u6E05\u7272\u751F\u76DB\u7CBE\u8056\u58F0\u88FD\u897F\u8AA0\u8A93\u8ACB\u901D\u9192\u9752\u9759\u6589\u7A0E\u8106\u96BB\u5E2D\u60DC\u621A\u65A5\u6614\u6790\u77F3\u7A4D\u7C4D\u7E3E\u810A\u8CAC\u8D64\u8DE1\u8E5F\u78A9\u5207\u62D9\u63A5\u6442\u6298\u8A2D\u7A83\u7BC0\u8AAC\u96EA\u7D76\u820C\u8749\u4ED9\u5148\u5343\u5360\u5BA3\u5C02\u5C16\u5DDD\u6226\u6247\u64B0\u6813\u6834\u6CC9\u6D45\u6D17\u67D3\u6F5C\u714E\u717D\u65CB\u7A7F\u7BAD\u7DDA"],
["9140", "\u7E4A\u7FA8\u817A\u821B\u8239\u85A6\u8A6E\u8CCE\u8DF5\u9078\u9077\u92AD\u9291\u9583\u9BAE\u524D\u5584\u6F38\u7136\u5168\u7985\u7E55\u81B3\u7CCE\u564C\u5851\u5CA8\u63AA\u66FE\u66FD\u695A\u72D9\u758F\u758E\u790E\u7956\u79DF\u7C97\u7D20\u7D44\u8607\u8A34\u963B\u9061\u9F20\u50E7\u5275\u53CC\u53E2\u5009\u55AA\u58EE\u594F\u723D\u5B8B\u5C64\u531D\u60E3\u60F3\u635C\u6383\u633F\u63BB"],
["9180", "\u64CD\u65E9\u66F9\u5DE3\u69CD\u69FD\u6F15\u71E5\u4E89\u75E9\u76F8\u7A93\u7CDF\u7DCF\u7D9C\u8061\u8349\u8358\u846C\u84BC\u85FB\u88C5\u8D70\u9001\u906D\u9397\u971C\u9A12\u50CF\u5897\u618E\u81D3\u8535\u8D08\u9020\u4FC3\u5074\u5247\u5373\u606F\u6349\u675F\u6E2C\u8DB3\u901F\u4FD7\u5C5E\u8CCA\u65CF\u7D9A\u5352\u8896\u5176\u63C3\u5B58\u5B6B\u5C0A\u640D\u6751\u905C\u4ED6\u591A\u592A\u6C70\u8A51\u553E\u5815\u59A5\u60F0\u6253\u67C1\u8235\u6955\u9640\u99C4\u9A28\u4F53\u5806\u5BFE\u8010\u5CB1\u5E2F\u5F85\u6020\u614B\u6234\u66FF\u6CF0\u6EDE\u80CE\u817F\u82D4\u888B\u8CB8\u9000\u902E\u968A\u9EDB\u9BDB\u4EE3\u53F0\u5927\u7B2C\u918D\u984C\u9DF9\u6EDD\u7027\u5353\u5544\u5B85\u6258\u629E\u62D3\u6CA2\u6FEF\u7422\u8A17\u9438\u6FC1\u8AFE\u8338\u51E7\u86F8\u53EA"],
["9240", "\u53E9\u4F46\u9054\u8FB0\u596A\u8131\u5DFD\u7AEA\u8FBF\u68DA\u8C37\u72F8\u9C48\u6A3D\u8AB0\u4E39\u5358\u5606\u5766\u62C5\u63A2\u65E6\u6B4E\u6DE1\u6E5B\u70AD\u77ED\u7AEF\u7BAA\u7DBB\u803D\u80C6\u86CB\u8A95\u935B\u56E3\u58C7\u5F3E\u65AD\u6696\u6A80\u6BB5\u7537\u8AC7\u5024\u77E5\u5730\u5F1B\u6065\u667A\u6C60\u75F4\u7A1A\u7F6E\u81F4\u8718\u9045\u99B3\u7BC9\u755C\u7AF9\u7B51\u84C4"],
["9280", "\u9010\u79E9\u7A92\u8336\u5AE1\u7740\u4E2D\u4EF2\u5B99\u5FE0\u62BD\u663C\u67F1\u6CE8\u866B\u8877\u8A3B\u914E\u92F3\u99D0\u6A17\u7026\u732A\u82E7\u8457\u8CAF\u4E01\u5146\u51CB\u558B\u5BF5\u5E16\u5E33\u5E81\u5F14\u5F35\u5F6B\u5FB4\u61F2\u6311\u66A2\u671D\u6F6E\u7252\u753A\u773A\u8074\u8139\u8178\u8776\u8ABF\u8ADC\u8D85\u8DF3\u929A\u9577\u9802\u9CE5\u52C5\u6357\u76F4\u6715\u6C88\u73CD\u8CC3\u93AE\u9673\u6D25\u589C\u690E\u69CC\u8FFD\u939A\u75DB\u901A\u585A\u6802\u63B4\u69FB\u4F43\u6F2C\u67D8\u8FBB\u8526\u7DB4\u9354\u693F\u6F70\u576A\u58F7\u5B2C\u7D2C\u722A\u540A\u91E3\u9DB4\u4EAD\u4F4E\u505C\u5075\u5243\u8C9E\u5448\u5824\u5B9A\u5E1D\u5E95\u5EAD\u5EF7\u5F1F\u608C\u62B5\u633A\u63D0\u68AF\u6C40\u7887\u798E\u7A0B\u7DE0\u8247\u8A02\u8AE6\u8E44\u9013"],
["9340", "\u90B8\u912D\u91D8\u9F0E\u6CE5\u6458\u64E2\u6575\u6EF4\u7684\u7B1B\u9069\u93D1\u6EBA\u54F2\u5FB9\u64A4\u8F4D\u8FED\u9244\u5178\u586B\u5929\u5C55\u5E97\u6DFB\u7E8F\u751C\u8CBC\u8EE2\u985B\u70B9\u4F1D\u6BBF\u6FB1\u7530\u96FB\u514E\u5410\u5835\u5857\u59AC\u5C60\u5F92\u6597\u675C\u6E21\u767B\u83DF\u8CED\u9014\u90FD\u934D\u7825\u783A\u52AA\u5EA6\u571F\u5974\u6012\u5012\u515A\u51AC"],
["9380", "\u51CD\u5200\u5510\u5854\u5858\u5957\u5B95\u5CF6\u5D8B\u60BC\u6295\u642D\u6771\u6843\u68BC\u68DF\u76D7\u6DD8\u6E6F\u6D9B\u706F\u71C8\u5F53\u75D8\u7977\u7B49\u7B54\u7B52\u7CD6\u7D71\u5230\u8463\u8569\u85E4\u8A0E\u8B04\u8C46\u8E0F\u9003\u900F\u9419\u9676\u982D\u9A30\u95D8\u50CD\u52D5\u540C\u5802\u5C0E\u61A7\u649E\u6D1E\u77B3\u7AE5\u80F4\u8404\u9053\u9285\u5CE0\u9D07\u533F\u5F97\u5FB3\u6D9C\u7279\u7763\u79BF\u7BE4\u6BD2\u72EC\u8AAD\u6803\u6A61\u51F8\u7A81\u6934\u5C4A\u9CF6\u82EB\u5BC5\u9149\u701E\u5678\u5C6F\u60C7\u6566\u6C8C\u8C5A\u9041\u9813\u5451\u66C7\u920D\u5948\u90A3\u5185\u4E4D\u51EA\u8599\u8B0E\u7058\u637A\u934B\u6962\u99B4\u7E04\u7577\u5357\u6960\u8EDF\u96E3\u6C5D\u4E8C\u5C3C\u5F10\u8FE9\u5302\u8CD1\u8089\u8679\u5EFF\u65E5\u4E73\u5165"],
["9440", "\u5982\u5C3F\u97EE\u4EFB\u598A\u5FCD\u8A8D\u6FE1\u79B0\u7962\u5BE7\u8471\u732B\u71B1\u5E74\u5FF5\u637B\u649A\u71C3\u7C98\u4E43\u5EFC\u4E4B\u57DC\u56A2\u60A9\u6FC3\u7D0D\u80FD\u8133\u81BF\u8FB2\u8997\u86A4\u5DF4\u628A\u64AD\u8987\u6777\u6CE2\u6D3E\u7436\u7834\u5A46\u7F75\u82AD\u99AC\u4FF3\u5EC3\u62DD\u6392\u6557\u676F\u76C3\u724C\u80CC\u80BA\u8F29\u914D\u500D\u57F9\u5A92\u6885"],
["9480", "\u6973\u7164\u72FD\u8CB7\u58F2\u8CE0\u966A\u9019\u877F\u79E4\u77E7\u8429\u4F2F\u5265\u535A\u62CD\u67CF\u6CCA\u767D\u7B94\u7C95\u8236\u8584\u8FEB\u66DD\u6F20\u7206\u7E1B\u83AB\u99C1\u9EA6\u51FD\u7BB1\u7872\u7BB8\u8087\u7B48\u6AE8\u5E61\u808C\u7551\u7560\u516B\u9262\u6E8C\u767A\u9197\u9AEA\u4F10\u7F70\u629C\u7B4F\u95A5\u9CE9\u567A\u5859\u86E4\u96BC\u4F34\u5224\u534A\u53CD\u53DB\u5E06\u642C\u6591\u677F\u6C3E\u6C4E\u7248\u72AF\u73ED\u7554\u7E41\u822C\u85E9\u8CA9\u7BC4\u91C6\u7169\u9812\u98EF\u633D\u6669\u756A\u76E4\u78D0\u8543\u86EE\u532A\u5351\u5426\u5983\u5E87\u5F7C\u60B2\u6249\u6279\u62AB\u6590\u6BD4\u6CCC\u75B2\u76AE\u7891\u79D8\u7DCB\u7F77\u80A5\u88AB\u8AB9\u8CBB\u907F\u975E\u98DB\u6A0B\u7C38\u5099\u5C3E\u5FAE\u6787\u6BD8\u7435\u7709\u7F8E"],
["9540", "\u9F3B\u67CA\u7A17\u5339\u758B\u9AED\u5F66\u819D\u83F1\u8098\u5F3C\u5FC5\u7562\u7B46\u903C\u6867\u59EB\u5A9B\u7D10\u767E\u8B2C\u4FF5\u5F6A\u6A19\u6C37\u6F02\u74E2\u7968\u8868\u8A55\u8C79\u5EDF\u63CF\u75C5\u79D2\u82D7\u9328\u92F2\u849C\u86ED\u9C2D\u54C1\u5F6C\u658C\u6D5C\u7015\u8CA7\u8CD3\u983B\u654F\u74F6\u4E0D\u4ED8\u57E0\u592B\u5A66\u5BCC\u51A8\u5E03\u5E9C\u6016\u6276\u6577"],
["9580", "\u65A7\u666E\u6D6E\u7236\u7B26\u8150\u819A\u8299\u8B5C\u8CA0\u8CE6\u8D74\u961C\u9644\u4FAE\u64AB\u6B66\u821E\u8461\u856A\u90E8\u5C01\u6953\u98A8\u847A\u8557\u4F0F\u526F\u5FA9\u5E45\u670D\u798F\u8179\u8907\u8986\u6DF5\u5F17\u6255\u6CB8\u4ECF\u7269\u9B92\u5206\u543B\u5674\u58B3\u61A4\u626E\u711A\u596E\u7C89\u7CDE\u7D1B\u96F0\u6587\u805E\u4E19\u4F75\u5175\u5840\u5E63\u5E73\u5F0A\u67C4\u4E26\u853D\u9589\u965B\u7C73\u9801\u50FB\u58C1\u7656\u78A7\u5225\u77A5\u8511\u7B86\u504F\u5909\u7247\u7BC7\u7DE8\u8FBA\u8FD4\u904D\u4FBF\u52C9\u5A29\u5F01\u97AD\u4FDD\u8217\u92EA\u5703\u6355\u6B69\u752B\u88DC\u8F14\u7A42\u52DF\u5893\u6155\u620A\u66AE\u6BCD\u7C3F\u83E9\u5023\u4FF8\u5305\u5446\u5831\u5949\u5B9D\u5CF0\u5CEF\u5D29\u5E96\u62B1\u6367\u653E\u65B9\u670B"],
["9640", "\u6CD5\u6CE1\u70F9\u7832\u7E2B\u80DE\u82B3\u840C\u84EC\u8702\u8912\u8A2A\u8C4A\u90A6\u92D2\u98FD\u9CF3\u9D6C\u4E4F\u4EA1\u508D\u5256\u574A\u59A8\u5E3D\u5FD8\u5FD9\u623F\u66B4\u671B\u67D0\u68D2\u5192\u7D21\u80AA\u81A8\u8B00\u8C8C\u8CBF\u927E\u9632\u5420\u982C\u5317\u50D5\u535C\u58A8\u64B2\u6734\u7267\u7766\u7A46\u91E6\u52C3\u6CA1\u6B86\u5800\u5E4C\u5954\u672C\u7FFB\u51E1\u76C6"],
["9680", "\u6469\u78E8\u9B54\u9EBB\u57CB\u59B9\u6627\u679A\u6BCE\u54E9\u69D9\u5E55\u819C\u6795\u9BAA\u67FE\u9C52\u685D\u4EA6\u4FE3\u53C8\u62B9\u672B\u6CAB\u8FC4\u4FAD\u7E6D\u9EBF\u4E07\u6162\u6E80\u6F2B\u8513\u5473\u672A\u9B45\u5DF3\u7B95\u5CAC\u5BC6\u871C\u6E4A\u84D1\u7A14\u8108\u5999\u7C8D\u6C11\u7720\u52D9\u5922\u7121\u725F\u77DB\u9727\u9D61\u690B\u5A7F\u5A18\u51A5\u540D\u547D\u660E\u76DF\u8FF7\u9298\u9CF4\u59EA\u725D\u6EC5\u514D\u68C9\u7DBF\u7DEC\u9762\u9EBA\u6478\u6A21\u8302\u5984\u5B5F\u6BDB\u731B\u76F2\u7DB2\u8017\u8499\u5132\u6728\u9ED9\u76EE\u6762\u52FF\u9905\u5C24\u623B\u7C7E\u8CB0\u554F\u60B6\u7D0B\u9580\u5301\u4E5F\u51B6\u591C\u723A\u8036\u91CE\u5F25\u77E2\u5384\u5F79\u7D04\u85AC\u8A33\u8E8D\u9756\u67F3\u85AE\u9453\u6109\u6108\u6CB9\u7652"],
["9740", "\u8AED\u8F38\u552F\u4F51\u512A\u52C7\u53CB\u5BA5\u5E7D\u60A0\u6182\u63D6\u6709\u67DA\u6E67\u6D8C\u7336\u7337\u7531\u7950\u88D5\u8A98\u904A\u9091\u90F5\u96C4\u878D\u5915\u4E88\u4F59\u4E0E\u8A89\u8F3F\u9810\u50AD\u5E7C\u5996\u5BB9\u5EB8\u63DA\u63FA\u64C1\u66DC\u694A\u69D8\u6D0B\u6EB6\u7194\u7528\u7AAF\u7F8A\u8000\u8449\u84C9\u8981\u8B21\u8E0A\u9065\u967D\u990A\u617E\u6291\u6B32"],
["9780", "\u6C83\u6D74\u7FCC\u7FFC\u6DC0\u7F85\u87BA\u88F8\u6765\u83B1\u983C\u96F7\u6D1B\u7D61\u843D\u916A\u4E71\u5375\u5D50\u6B04\u6FEB\u85CD\u862D\u89A7\u5229\u540F\u5C65\u674E\u68A8\u7406\u7483\u75E2\u88CF\u88E1\u91CC\u96E2\u9678\u5F8B\u7387\u7ACB\u844E\u63A0\u7565\u5289\u6D41\u6E9C\u7409\u7559\u786B\u7C92\u9686\u7ADC\u9F8D\u4FB6\u616E\u65C5\u865C\u4E86\u4EAE\u50DA\u4E21\u51CC\u5BEE\u6599\u6881\u6DBC\u731F\u7642\u77AD\u7A1C\u7CE7\u826F\u8AD2\u907C\u91CF\u9675\u9818\u529B\u7DD1\u502B\u5398\u6797\u6DCB\u71D0\u7433\u81E8\u8F2A\u96A3\u9C57\u9E9F\u7460\u5841\u6D99\u7D2F\u985E\u4EE4\u4F36\u4F8B\u51B7\u52B1\u5DBA\u601C\u73B2\u793C\u82D3\u9234\u96B7\u96F6\u970A\u9E97\u9F62\u66A6\u6B74\u5217\u52A3\u70C8\u88C2\u5EC9\u604B\u6190\u6F23\u7149\u7C3E\u7DF4\u806F"],
["9840", "\u84EE\u9023\u932C\u5442\u9B6F\u6AD3\u7089\u8CC2\u8DEF\u9732\u52B4\u5A41\u5ECA\u5F04\u6717\u697C\u6994\u6D6A\u6F0F\u7262\u72FC\u7BED\u8001\u807E\u874B\u90CE\u516D\u9E93\u7984\u808B\u9332\u8AD6\u502D\u548C\u8A71\u6B6A\u8CC4\u8107\u60D1\u67A0\u9DF2\u4E99\u4E98\u9C10\u8A6B\u85C1\u8568\u6900\u6E7E\u7897\u8155"],
["989f", "\u5F0C\u4E10\u4E15\u4E2A\u4E31\u4E36\u4E3C\u4E3F\u4E42\u4E56\u4E58\u4E82\u4E85\u8C6B\u4E8A\u8212\u5F0D\u4E8E\u4E9E\u4E9F\u4EA0\u4EA2\u4EB0\u4EB3\u4EB6\u4ECE\u4ECD\u4EC4\u4EC6\u4EC2\u4ED7\u4EDE\u4EED\u4EDF\u4EF7\u4F09\u4F5A\u4F30\u4F5B\u4F5D\u4F57\u4F47\u4F76\u4F88\u4F8F\u4F98\u4F7B\u4F69\u4F70\u4F91\u4F6F\u4F86\u4F96\u5118\u4FD4\u4FDF\u4FCE\u4FD8\u4FDB\u4FD1\u4FDA\u4FD0\u4FE4\u4FE5\u501A\u5028\u5014\u502A\u5025\u5005\u4F1C\u4FF6\u5021\u5029\u502C\u4FFE\u4FEF\u5011\u5006\u5043\u5047\u6703\u5055\u5050\u5048\u505A\u5056\u506C\u5078\u5080\u509A\u5085\u50B4\u50B2"],
["9940", "\u50C9\u50CA\u50B3\u50C2\u50D6\u50DE\u50E5\u50ED\u50E3\u50EE\u50F9\u50F5\u5109\u5101\u5102\u5116\u5115\u5114\u511A\u5121\u513A\u5137\u513C\u513B\u513F\u5140\u5152\u514C\u5154\u5162\u7AF8\u5169\u516A\u516E\u5180\u5182\u56D8\u518C\u5189\u518F\u5191\u5193\u5195\u5196\u51A4\u51A6\u51A2\u51A9\u51AA\u51AB\u51B3\u51B1\u51B2\u51B0\u51B5\u51BD\u51C5\u51C9\u51DB\u51E0\u8655\u51E9\u51ED"],
["9980", "\u51F0\u51F5\u51FE\u5204\u520B\u5214\u520E\u5227\u522A\u522E\u5233\u5239\u524F\u5244\u524B\u524C\u525E\u5254\u526A\u5274\u5269\u5273\u527F\u527D\u528D\u5294\u5292\u5271\u5288\u5291\u8FA8\u8FA7\u52AC\u52AD\u52BC\u52B5\u52C1\u52CD\u52D7\u52DE\u52E3\u52E6\u98ED\u52E0\u52F3\u52F5\u52F8\u52F9\u5306\u5308\u7538\u530D\u5310\u530F\u5315\u531A\u5323\u532F\u5331\u5333\u5338\u5340\u5346\u5345\u4E17\u5349\u534D\u51D6\u535E\u5369\u536E\u5918\u537B\u5377\u5382\u5396\u53A0\u53A6\u53A5\u53AE\u53B0\u53B6\u53C3\u7C12\u96D9\u53DF\u66FC\u71EE\u53EE\u53E8\u53ED\u53FA\u5401\u543D\u5440\u542C\u542D\u543C\u542E\u5436\u5429\u541D\u544E\u548F\u5475\u548E\u545F\u5471\u5477\u5470\u5492\u547B\u5480\u5476\u5484\u5490\u5486\u54C7\u54A2\u54B8\u54A5\u54AC\u54C4\u54C8\u54A8"],
["9a40", "\u54AB\u54C2\u54A4\u54BE\u54BC\u54D8\u54E5\u54E6\u550F\u5514\u54FD\u54EE\u54ED\u54FA\u54E2\u5539\u5540\u5563\u554C\u552E\u555C\u5545\u5556\u5557\u5538\u5533\u555D\u5599\u5580\u54AF\u558A\u559F\u557B\u557E\u5598\u559E\u55AE\u557C\u5583\u55A9\u5587\u55A8\u55DA\u55C5\u55DF\u55C4\u55DC\u55E4\u55D4\u5614\u55F7\u5616\u55FE\u55FD\u561B\u55F9\u564E\u5650\u71DF\u5634\u5636\u5632\u5638"],
["9a80", "\u566B\u5664\u562F\u566C\u566A\u5686\u5680\u568A\u56A0\u5694\u568F\u56A5\u56AE\u56B6\u56B4\u56C2\u56BC\u56C1\u56C3\u56C0\u56C8\u56CE\u56D1\u56D3\u56D7\u56EE\u56F9\u5700\u56FF\u5704\u5709\u5708\u570B\u570D\u5713\u5718\u5716\u55C7\u571C\u5726\u5737\u5738\u574E\u573B\u5740\u574F\u5769\u57C0\u5788\u5761\u577F\u5789\u5793\u57A0\u57B3\u57A4\u57AA\u57B0\u57C3\u57C6\u57D4\u57D2\u57D3\u580A\u57D6\u57E3\u580B\u5819\u581D\u5872\u5821\u5862\u584B\u5870\u6BC0\u5852\u583D\u5879\u5885\u58B9\u589F\u58AB\u58BA\u58DE\u58BB\u58B8\u58AE\u58C5\u58D3\u58D1\u58D7\u58D9\u58D8\u58E5\u58DC\u58E4\u58DF\u58EF\u58FA\u58F9\u58FB\u58FC\u58FD\u5902\u590A\u5910\u591B\u68A6\u5925\u592C\u592D\u5932\u5938\u593E\u7AD2\u5955\u5950\u594E\u595A\u5958\u5962\u5960\u5967\u596C\u5969"],
["9b40", "\u5978\u5981\u599D\u4F5E\u4FAB\u59A3\u59B2\u59C6\u59E8\u59DC\u598D\u59D9\u59DA\u5A25\u5A1F\u5A11\u5A1C\u5A09\u5A1A\u5A40\u5A6C\u5A49\u5A35\u5A36\u5A62\u5A6A\u5A9A\u5ABC\u5ABE\u5ACB\u5AC2\u5ABD\u5AE3\u5AD7\u5AE6\u5AE9\u5AD6\u5AFA\u5AFB\u5B0C\u5B0B\u5B16\u5B32\u5AD0\u5B2A\u5B36\u5B3E\u5B43\u5B45\u5B40\u5B51\u5B55\u5B5A\u5B5B\u5B65\u5B69\u5B70\u5B73\u5B75\u5B78\u6588\u5B7A\u5B80"],
["9b80", "\u5B83\u5BA6\u5BB8\u5BC3\u5BC7\u5BC9\u5BD4\u5BD0\u5BE4\u5BE6\u5BE2\u5BDE\u5BE5\u5BEB\u5BF0\u5BF6\u5BF3\u5C05\u5C07\u5C08\u5C0D\u5C13\u5C20\u5C22\u5C28\u5C38\u5C39\u5C41\u5C46\u5C4E\u5C53\u5C50\u5C4F\u5B71\u5C6C\u5C6E\u4E62\u5C76\u5C79\u5C8C\u5C91\u5C94\u599B\u5CAB\u5CBB\u5CB6\u5CBC\u5CB7\u5CC5\u5CBE\u5CC7\u5CD9\u5CE9\u5CFD\u5CFA\u5CED\u5D8C\u5CEA\u5D0B\u5D15\u5D17\u5D5C\u5D1F\u5D1B\u5D11\u5D14\u5D22\u5D1A\u5D19\u5D18\u5D4C\u5D52\u5D4E\u5D4B\u5D6C\u5D73\u5D76\u5D87\u5D84\u5D82\u5DA2\u5D9D\u5DAC\u5DAE\u5DBD\u5D90\u5DB7\u5DBC\u5DC9\u5DCD\u5DD3\u5DD2\u5DD6\u5DDB\u5DEB\u5DF2\u5DF5\u5E0B\u5E1A\u5E19\u5E11\u5E1B\u5E36\u5E37\u5E44\u5E43\u5E40\u5E4E\u5E57\u5E54\u5E5F\u5E62\u5E64\u5E47\u5E75\u5E76\u5E7A\u9EBC\u5E7F\u5EA0\u5EC1\u5EC2\u5EC8\u5ED0\u5ECF"],
["9c40", "\u5ED6\u5EE3\u5EDD\u5EDA\u5EDB\u5EE2\u5EE1\u5EE8\u5EE9\u5EEC\u5EF1\u5EF3\u5EF0\u5EF4\u5EF8\u5EFE\u5F03\u5F09\u5F5D\u5F5C\u5F0B\u5F11\u5F16\u5F29\u5F2D\u5F38\u5F41\u5F48\u5F4C\u5F4E\u5F2F\u5F51\u5F56\u5F57\u5F59\u5F61\u5F6D\u5F73\u5F77\u5F83\u5F82\u5F7F\u5F8A\u5F88\u5F91\u5F87\u5F9E\u5F99\u5F98\u5FA0\u5FA8\u5FAD\u5FBC\u5FD6\u5FFB\u5FE4\u5FF8\u5FF1\u5FDD\u60B3\u5FFF\u6021\u6060"],
["9c80", "\u6019\u6010\u6029\u600E\u6031\u601B\u6015\u602B\u6026\u600F\u603A\u605A\u6041\u606A\u6077\u605F\u604A\u6046\u604D\u6063\u6043\u6064\u6042\u606C\u606B\u6059\u6081\u608D\u60E7\u6083\u609A\u6084\u609B\u6096\u6097\u6092\u60A7\u608B\u60E1\u60B8\u60E0\u60D3\u60B4\u5FF0\u60BD\u60C6\u60B5\u60D8\u614D\u6115\u6106\u60F6\u60F7\u6100\u60F4\u60FA\u6103\u6121\u60FB\u60F1\u610D\u610E\u6147\u613E\u6128\u6127\u614A\u613F\u613C\u612C\u6134\u613D\u6142\u6144\u6173\u6177\u6158\u6159\u615A\u616B\u6174\u616F\u6165\u6171\u615F\u615D\u6153\u6175\u6199\u6196\u6187\u61AC\u6194\u619A\u618A\u6191\u61AB\u61AE\u61CC\u61CA\u61C9\u61F7\u61C8\u61C3\u61C6\u61BA\u61CB\u7F79\u61CD\u61E6\u61E3\u61F6\u61FA\u61F4\u61FF\u61FD\u61FC\u61FE\u6200\u6208\u6209\u620D\u620C\u6214\u621B"],
["9d40", "\u621E\u6221\u622A\u622E\u6230\u6232\u6233\u6241\u624E\u625E\u6263\u625B\u6260\u6268\u627C\u6282\u6289\u627E\u6292\u6293\u6296\u62D4\u6283\u6294\u62D7\u62D1\u62BB\u62CF\u62FF\u62C6\u64D4\u62C8\u62DC\u62CC\u62CA\u62C2\u62C7\u629B\u62C9\u630C\u62EE\u62F1\u6327\u6302\u6308\u62EF\u62F5\u6350\u633E\u634D\u641C\u634F\u6396\u638E\u6380\u63AB\u6376\u63A3\u638F\u6389\u639F\u63B5\u636B"],
["9d80", "\u6369\u63BE\u63E9\u63C0\u63C6\u63E3\u63C9\u63D2\u63F6\u63C4\u6416\u6434\u6406\u6413\u6426\u6436\u651D\u6417\u6428\u640F\u6467\u646F\u6476\u644E\u652A\u6495\u6493\u64A5\u64A9\u6488\u64BC\u64DA\u64D2\u64C5\u64C7\u64BB\u64D8\u64C2\u64F1\u64E7\u8209\u64E0\u64E1\u62AC\u64E3\u64EF\u652C\u64F6\u64F4\u64F2\u64FA\u6500\u64FD\u6518\u651C\u6505\u6524\u6523\u652B\u6534\u6535\u6537\u6536\u6538\u754B\u6548\u6556\u6555\u654D\u6558\u655E\u655D\u6572\u6578\u6582\u6583\u8B8A\u659B\u659F\u65AB\u65B7\u65C3\u65C6\u65C1\u65C4\u65CC\u65D2\u65DB\u65D9\u65E0\u65E1\u65F1\u6772\u660A\u6603\u65FB\u6773\u6635\u6636\u6634\u661C\u664F\u6644\u6649\u6641\u665E\u665D\u6664\u6667\u6668\u665F\u6662\u6670\u6683\u6688\u668E\u6689\u6684\u6698\u669D\u66C1\u66B9\u66C9\u66BE\u66BC"],
["9e40", "\u66C4\u66B8\u66D6\u66DA\u66E0\u663F\u66E6\u66E9\u66F0\u66F5\u66F7\u670F\u6716\u671E\u6726\u6727\u9738\u672E\u673F\u6736\u6741\u6738\u6737\u6746\u675E\u6760\u6759\u6763\u6764\u6789\u6770\u67A9\u677C\u676A\u678C\u678B\u67A6\u67A1\u6785\u67B7\u67EF\u67B4\u67EC\u67B3\u67E9\u67B8\u67E4\u67DE\u67DD\u67E2\u67EE\u67B9\u67CE\u67C6\u67E7\u6A9C\u681E\u6846\u6829\u6840\u684D\u6832\u684E"],
["9e80", "\u68B3\u682B\u6859\u6863\u6877\u687F\u689F\u688F\u68AD\u6894\u689D\u689B\u6883\u6AAE\u68B9\u6874\u68B5\u68A0\u68BA\u690F\u688D\u687E\u6901\u68CA\u6908\u68D8\u6922\u6926\u68E1\u690C\u68CD\u68D4\u68E7\u68D5\u6936\u6912\u6904\u68D7\u68E3\u6925\u68F9\u68E0\u68EF\u6928\u692A\u691A\u6923\u6921\u68C6\u6979\u6977\u695C\u6978\u696B\u6954\u697E\u696E\u6939\u6974\u693D\u6959\u6930\u6961\u695E\u695D\u6981\u696A\u69B2\u69AE\u69D0\u69BF\u69C1\u69D3\u69BE\u69CE\u5BE8\u69CA\u69DD\u69BB\u69C3\u69A7\u6A2E\u6991\u69A0\u699C\u6995\u69B4\u69DE\u69E8\u6A02\u6A1B\u69FF\u6B0A\u69F9\u69F2\u69E7\u6A05\u69B1\u6A1E\u69ED\u6A14\u69EB\u6A0A\u6A12\u6AC1\u6A23\u6A13\u6A44\u6A0C\u6A72\u6A36\u6A78\u6A47\u6A62\u6A59\u6A66\u6A48\u6A38\u6A22\u6A90\u6A8D\u6AA0\u6A84\u6AA2\u6AA3"],
["9f40", "\u6A97\u8617\u6ABB\u6AC3\u6AC2\u6AB8\u6AB3\u6AAC\u6ADE\u6AD1\u6ADF\u6AAA\u6ADA\u6AEA\u6AFB\u6B05\u8616\u6AFA\u6B12\u6B16\u9B31\u6B1F\u6B38\u6B37\u76DC\u6B39\u98EE\u6B47\u6B43\u6B49\u6B50\u6B59\u6B54\u6B5B\u6B5F\u6B61\u6B78\u6B79\u6B7F\u6B80\u6B84\u6B83\u6B8D\u6B98\u6B95\u6B9E\u6BA4\u6BAA\u6BAB\u6BAF\u6BB2\u6BB1\u6BB3\u6BB7\u6BBC\u6BC6\u6BCB\u6BD3\u6BDF\u6BEC\u6BEB\u6BF3\u6BEF"],
["9f80", "\u9EBE\u6C08\u6C13\u6C14\u6C1B\u6C24\u6C23\u6C5E\u6C55\u6C62\u6C6A\u6C82\u6C8D\u6C9A\u6C81\u6C9B\u6C7E\u6C68\u6C73\u6C92\u6C90\u6CC4\u6CF1\u6CD3\u6CBD\u6CD7\u6CC5\u6CDD\u6CAE\u6CB1\u6CBE\u6CBA\u6CDB\u6CEF\u6CD9\u6CEA\u6D1F\u884D\u6D36\u6D2B\u6D3D\u6D38\u6D19\u6D35\u6D33\u6D12\u6D0C\u6D63\u6D93\u6D64\u6D5A\u6D79\u6D59\u6D8E\u6D95\u6FE4\u6D85\u6DF9\u6E15\u6E0A\u6DB5\u6DC7\u6DE6\u6DB8\u6DC6\u6DEC\u6DDE\u6DCC\u6DE8\u6DD2\u6DC5\u6DFA\u6DD9\u6DE4\u6DD5\u6DEA\u6DEE\u6E2D\u6E6E\u6E2E\u6E19\u6E72\u6E5F\u6E3E\u6E23\u6E6B\u6E2B\u6E76\u6E4D\u6E1F\u6E43\u6E3A\u6E4E\u6E24\u6EFF\u6E1D\u6E38\u6E82\u6EAA\u6E98\u6EC9\u6EB7\u6ED3\u6EBD\u6EAF\u6EC4\u6EB2\u6ED4\u6ED5\u6E8F\u6EA5\u6EC2\u6E9F\u6F41\u6F11\u704C\u6EEC\u6EF8\u6EFE\u6F3F\u6EF2\u6F31\u6EEF\u6F32\u6ECC"],
["e040", "\u6F3E\u6F13\u6EF7\u6F86\u6F7A\u6F78\u6F81\u6F80\u6F6F\u6F5B\u6FF3\u6F6D\u6F82\u6F7C\u6F58\u6F8E\u6F91\u6FC2\u6F66\u6FB3\u6FA3\u6FA1\u6FA4\u6FB9\u6FC6\u6FAA\u6FDF\u6FD5\u6FEC\u6FD4\u6FD8\u6FF1\u6FEE\u6FDB\u7009\u700B\u6FFA\u7011\u7001\u700F\u6FFE\u701B\u701A\u6F74\u701D\u7018\u701F\u7030\u703E\u7032\u7051\u7063\u7099\u7092\u70AF\u70F1\u70AC\u70B8\u70B3\u70AE\u70DF\u70CB\u70DD"],
["e080", "\u70D9\u7109\u70FD\u711C\u7119\u7165\u7155\u7188\u7166\u7162\u714C\u7156\u716C\u718F\u71FB\u7184\u7195\u71A8\u71AC\u71D7\u71B9\u71BE\u71D2\u71C9\u71D4\u71CE\u71E0\u71EC\u71E7\u71F5\u71FC\u71F9\u71FF\u720D\u7210\u721B\u7228\u722D\u722C\u7230\u7232\u723B\u723C\u723F\u7240\u7246\u724B\u7258\u7274\u727E\u7282\u7281\u7287\u7292\u7296\u72A2\u72A7\u72B9\u72B2\u72C3\u72C6\u72C4\u72CE\u72D2\u72E2\u72E0\u72E1\u72F9\u72F7\u500F\u7317\u730A\u731C\u7316\u731D\u7334\u732F\u7329\u7325\u733E\u734E\u734F\u9ED8\u7357\u736A\u7368\u7370\u7378\u7375\u737B\u737A\u73C8\u73B3\u73CE\u73BB\u73C0\u73E5\u73EE\u73DE\u74A2\u7405\u746F\u7425\u73F8\u7432\u743A\u7455\u743F\u745F\u7459\u7441\u745C\u7469\u7470\u7463\u746A\u7476\u747E\u748B\u749E\u74A7\u74CA\u74CF\u74D4\u73F1"],
["e140", "\u74E0\u74E3\u74E7\u74E9\u74EE\u74F2\u74F0\u74F1\u74F8\u74F7\u7504\u7503\u7505\u750C\u750E\u750D\u7515\u7513\u751E\u7526\u752C\u753C\u7544\u754D\u754A\u7549\u755B\u7546\u755A\u7569\u7564\u7567\u756B\u756D\u7578\u7576\u7586\u7587\u7574\u758A\u7589\u7582\u7594\u759A\u759D\u75A5\u75A3\u75C2\u75B3\u75C3\u75B5\u75BD\u75B8\u75BC\u75B1\u75CD\u75CA\u75D2\u75D9\u75E3\u75DE\u75FE\u75FF"],
["e180", "\u75FC\u7601\u75F0\u75FA\u75F2\u75F3\u760B\u760D\u7609\u761F\u7627\u7620\u7621\u7622\u7624\u7634\u7630\u763B\u7647\u7648\u7646\u765C\u7658\u7661\u7662\u7668\u7669\u766A\u7667\u766C\u7670\u7672\u7676\u7678\u767C\u7680\u7683\u7688\u768B\u768E\u7696\u7693\u7699\u769A\u76B0\u76B4\u76B8\u76B9\u76BA\u76C2\u76CD\u76D6\u76D2\u76DE\u76E1\u76E5\u76E7\u76EA\u862F\u76FB\u7708\u7707\u7704\u7729\u7724\u771E\u7725\u7726\u771B\u7737\u7738\u7747\u775A\u7768\u776B\u775B\u7765\u777F\u777E\u7779\u778E\u778B\u7791\u77A0\u779E\u77B0\u77B6\u77B9\u77BF\u77BC\u77BD\u77BB\u77C7\u77CD\u77D7\u77DA\u77DC\u77E3\u77EE\u77FC\u780C\u7812\u7926\u7820\u792A\u7845\u788E\u7874\u7886\u787C\u789A\u788C\u78A3\u78B5\u78AA\u78AF\u78D1\u78C6\u78CB\u78D4\u78BE\u78BC\u78C5\u78CA\u78EC"],
["e240", "\u78E7\u78DA\u78FD\u78F4\u7907\u7912\u7911\u7919\u792C\u792B\u7940\u7960\u7957\u795F\u795A\u7955\u7953\u797A\u797F\u798A\u799D\u79A7\u9F4B\u79AA\u79AE\u79B3\u79B9\u79BA\u79C9\u79D5\u79E7\u79EC\u79E1\u79E3\u7A08\u7A0D\u7A18\u7A19\u7A20\u7A1F\u7980\u7A31\u7A3B\u7A3E\u7A37\u7A43\u7A57\u7A49\u7A61\u7A62\u7A69\u9F9D\u7A70\u7A79\u7A7D\u7A88\u7A97\u7A95\u7A98\u7A96\u7AA9\u7AC8\u7AB0"],
["e280", "\u7AB6\u7AC5\u7AC4\u7ABF\u9083\u7AC7\u7ACA\u7ACD\u7ACF\u7AD5\u7AD3\u7AD9\u7ADA\u7ADD\u7AE1\u7AE2\u7AE6\u7AED\u7AF0\u7B02\u7B0F\u7B0A\u7B06\u7B33\u7B18\u7B19\u7B1E\u7B35\u7B28\u7B36\u7B50\u7B7A\u7B04\u7B4D\u7B0B\u7B4C\u7B45\u7B75\u7B65\u7B74\u7B67\u7B70\u7B71\u7B6C\u7B6E\u7B9D\u7B98\u7B9F\u7B8D\u7B9C\u7B9A\u7B8B\u7B92\u7B8F\u7B5D\u7B99\u7BCB\u7BC1\u7BCC\u7BCF\u7BB4\u7BC6\u7BDD\u7BE9\u7C11\u7C14\u7BE6\u7BE5\u7C60\u7C00\u7C07\u7C13\u7BF3\u7BF7\u7C17\u7C0D\u7BF6\u7C23\u7C27\u7C2A\u7C1F\u7C37\u7C2B\u7C3D\u7C4C\u7C43\u7C54\u7C4F\u7C40\u7C50\u7C58\u7C5F\u7C64\u7C56\u7C65\u7C6C\u7C75\u7C83\u7C90\u7CA4\u7CAD\u7CA2\u7CAB\u7CA1\u7CA8\u7CB3\u7CB2\u7CB1\u7CAE\u7CB9\u7CBD\u7CC0\u7CC5\u7CC2\u7CD8\u7CD2\u7CDC\u7CE2\u9B3B\u7CEF\u7CF2\u7CF4\u7CF6\u7CFA\u7D06"],
["e340", "\u7D02\u7D1C\u7D15\u7D0A\u7D45\u7D4B\u7D2E\u7D32\u7D3F\u7D35\u7D46\u7D73\u7D56\u7D4E\u7D72\u7D68\u7D6E\u7D4F\u7D63\u7D93\u7D89\u7D5B\u7D8F\u7D7D\u7D9B\u7DBA\u7DAE\u7DA3\u7DB5\u7DC7\u7DBD\u7DAB\u7E3D\u7DA2\u7DAF\u7DDC\u7DB8\u7D9F\u7DB0\u7DD8\u7DDD\u7DE4\u7DDE\u7DFB\u7DF2\u7DE1\u7E05\u7E0A\u7E23\u7E21\u7E12\u7E31\u7E1F\u7E09\u7E0B\u7E22\u7E46\u7E66\u7E3B\u7E35\u7E39\u7E43\u7E37"],
["e380", "\u7E32\u7E3A\u7E67\u7E5D\u7E56\u7E5E\u7E59\u7E5A\u7E79\u7E6A\u7E69\u7E7C\u7E7B\u7E83\u7DD5\u7E7D\u8FAE\u7E7F\u7E88\u7E89\u7E8C\u7E92\u7E90\u7E93\u7E94\u7E96\u7E8E\u7E9B\u7E9C\u7F38\u7F3A\u7F45\u7F4C\u7F4D\u7F4E\u7F50\u7F51\u7F55\u7F54\u7F58\u7F5F\u7F60\u7F68\u7F69\u7F67\u7F78\u7F82\u7F86\u7F83\u7F88\u7F87\u7F8C\u7F94\u7F9E\u7F9D\u7F9A\u7FA3\u7FAF\u7FB2\u7FB9\u7FAE\u7FB6\u7FB8\u8B71\u7FC5\u7FC6\u7FCA\u7FD5\u7FD4\u7FE1\u7FE6\u7FE9\u7FF3\u7FF9\u98DC\u8006\u8004\u800B\u8012\u8018\u8019\u801C\u8021\u8028\u803F\u803B\u804A\u8046\u8052\u8058\u805A\u805F\u8062\u8068\u8073\u8072\u8070\u8076\u8079\u807D\u807F\u8084\u8086\u8085\u809B\u8093\u809A\u80AD\u5190\u80AC\u80DB\u80E5\u80D9\u80DD\u80C4\u80DA\u80D6\u8109\u80EF\u80F1\u811B\u8129\u8123\u812F\u814B"],
["e440", "\u968B\u8146\u813E\u8153\u8151\u80FC\u8171\u816E\u8165\u8166\u8174\u8183\u8188\u818A\u8180\u8182\u81A0\u8195\u81A4\u81A3\u815F\u8193\u81A9\u81B0\u81B5\u81BE\u81B8\u81BD\u81C0\u81C2\u81BA\u81C9\u81CD\u81D1\u81D9\u81D8\u81C8\u81DA\u81DF\u81E0\u81E7\u81FA\u81FB\u81FE\u8201\u8202\u8205\u8207\u820A\u820D\u8210\u8216\u8229\u822B\u8238\u8233\u8240\u8259\u8258\u825D\u825A\u825F\u8264"],
["e480", "\u8262\u8268\u826A\u826B\u822E\u8271\u8277\u8278\u827E\u828D\u8292\u82AB\u829F\u82BB\u82AC\u82E1\u82E3\u82DF\u82D2\u82F4\u82F3\u82FA\u8393\u8303\u82FB\u82F9\u82DE\u8306\u82DC\u8309\u82D9\u8335\u8334\u8316\u8332\u8331\u8340\u8339\u8350\u8345\u832F\u832B\u8317\u8318\u8385\u839A\u83AA\u839F\u83A2\u8396\u8323\u838E\u8387\u838A\u837C\u83B5\u8373\u8375\u83A0\u8389\u83A8\u83F4\u8413\u83EB\u83CE\u83FD\u8403\u83D8\u840B\u83C1\u83F7\u8407\u83E0\u83F2\u840D\u8422\u8420\u83BD\u8438\u8506\u83FB\u846D\u842A\u843C\u855A\u8484\u8477\u846B\u84AD\u846E\u8482\u8469\u8446\u842C\u846F\u8479\u8435\u84CA\u8462\u84B9\u84BF\u849F\u84D9\u84CD\u84BB\u84DA\u84D0\u84C1\u84C6\u84D6\u84A1\u8521\u84FF\u84F4\u8517\u8518\u852C\u851F\u8515\u8514\u84FC\u8540\u8563\u8558\u8548"],
["e540", "\u8541\u8602\u854B\u8555\u8580\u85A4\u8588\u8591\u858A\u85A8\u856D\u8594\u859B\u85EA\u8587\u859C\u8577\u857E\u8590\u85C9\u85BA\u85CF\u85B9\u85D0\u85D5\u85DD\u85E5\u85DC\u85F9\u860A\u8613\u860B\u85FE\u85FA\u8606\u8622\u861A\u8630\u863F\u864D\u4E55\u8654\u865F\u8667\u8671\u8693\u86A3\u86A9\u86AA\u868B\u868C\u86B6\u86AF\u86C4\u86C6\u86B0\u86C9\u8823\u86AB\u86D4\u86DE\u86E9\u86EC"],
["e580", "\u86DF\u86DB\u86EF\u8712\u8706\u8708\u8700\u8703\u86FB\u8711\u8709\u870D\u86F9\u870A\u8734\u873F\u8737\u873B\u8725\u8729\u871A\u8760\u875F\u8778\u874C\u874E\u8774\u8757\u8768\u876E\u8759\u8753\u8763\u876A\u8805\u87A2\u879F\u8782\u87AF\u87CB\u87BD\u87C0\u87D0\u96D6\u87AB\u87C4\u87B3\u87C7\u87C6\u87BB\u87EF\u87F2\u87E0\u880F\u880D\u87FE\u87F6\u87F7\u880E\u87D2\u8811\u8816\u8815\u8822\u8821\u8831\u8836\u8839\u8827\u883B\u8844\u8842\u8852\u8859\u885E\u8862\u886B\u8881\u887E\u889E\u8875\u887D\u88B5\u8872\u8882\u8897\u8892\u88AE\u8899\u88A2\u888D\u88A4\u88B0\u88BF\u88B1\u88C3\u88C4\u88D4\u88D8\u88D9\u88DD\u88F9\u8902\u88FC\u88F4\u88E8\u88F2\u8904\u890C\u890A\u8913\u8943\u891E\u8925\u892A\u892B\u8941\u8944\u893B\u8936\u8938\u894C\u891D\u8960\u895E"],
["e640", "\u8966\u8964\u896D\u896A\u896F\u8974\u8977\u897E\u8983\u8988\u898A\u8993\u8998\u89A1\u89A9\u89A6\u89AC\u89AF\u89B2\u89BA\u89BD\u89BF\u89C0\u89DA\u89DC\u89DD\u89E7\u89F4\u89F8\u8A03\u8A16\u8A10\u8A0C\u8A1B\u8A1D\u8A25\u8A36\u8A41\u8A5B\u8A52\u8A46\u8A48\u8A7C\u8A6D\u8A6C\u8A62\u8A85\u8A82\u8A84\u8AA8\u8AA1\u8A91\u8AA5\u8AA6\u8A9A\u8AA3\u8AC4\u8ACD\u8AC2\u8ADA\u8AEB\u8AF3\u8AE7"],
["e680", "\u8AE4\u8AF1\u8B14\u8AE0\u8AE2\u8AF7\u8ADE\u8ADB\u8B0C\u8B07\u8B1A\u8AE1\u8B16\u8B10\u8B17\u8B20\u8B33\u97AB\u8B26\u8B2B\u8B3E\u8B28\u8B41\u8B4C\u8B4F\u8B4E\u8B49\u8B56\u8B5B\u8B5A\u8B6B\u8B5F\u8B6C\u8B6F\u8B74\u8B7D\u8B80\u8B8C\u8B8E\u8B92\u8B93\u8B96\u8B99\u8B9A\u8C3A\u8C41\u8C3F\u8C48\u8C4C\u8C4E\u8C50\u8C55\u8C62\u8C6C\u8C78\u8C7A\u8C82\u8C89\u8C85\u8C8A\u8C8D\u8C8E\u8C94\u8C7C\u8C98\u621D\u8CAD\u8CAA\u8CBD\u8CB2\u8CB3\u8CAE\u8CB6\u8CC8\u8CC1\u8CE4\u8CE3\u8CDA\u8CFD\u8CFA\u8CFB\u8D04\u8D05\u8D0A\u8D07\u8D0F\u8D0D\u8D10\u9F4E\u8D13\u8CCD\u8D14\u8D16\u8D67\u8D6D\u8D71\u8D73\u8D81\u8D99\u8DC2\u8DBE\u8DBA\u8DCF\u8DDA\u8DD6\u8DCC\u8DDB\u8DCB\u8DEA\u8DEB\u8DDF\u8DE3\u8DFC\u8E08\u8E09\u8DFF\u8E1D\u8E1E\u8E10\u8E1F\u8E42\u8E35\u8E30\u8E34\u8E4A"],
["e740", "\u8E47\u8E49\u8E4C\u8E50\u8E48\u8E59\u8E64\u8E60\u8E2A\u8E63\u8E55\u8E76\u8E72\u8E7C\u8E81\u8E87\u8E85\u8E84\u8E8B\u8E8A\u8E93\u8E91\u8E94\u8E99\u8EAA\u8EA1\u8EAC\u8EB0\u8EC6\u8EB1\u8EBE\u8EC5\u8EC8\u8ECB\u8EDB\u8EE3\u8EFC\u8EFB\u8EEB\u8EFE\u8F0A\u8F05\u8F15\u8F12\u8F19\u8F13\u8F1C\u8F1F\u8F1B\u8F0C\u8F26\u8F33\u8F3B\u8F39\u8F45\u8F42\u8F3E\u8F4C\u8F49\u8F46\u8F4E\u8F57\u8F5C"],
["e780", "\u8F62\u8F63\u8F64\u8F9C\u8F9F\u8FA3\u8FAD\u8FAF\u8FB7\u8FDA\u8FE5\u8FE2\u8FEA\u8FEF\u9087\u8FF4\u9005\u8FF9\u8FFA\u9011\u9015\u9021\u900D\u901E\u9016\u900B\u9027\u9036\u9035\u9039\u8FF8\u904F\u9050\u9051\u9052\u900E\u9049\u903E\u9056\u9058\u905E\u9068\u906F\u9076\u96A8\u9072\u9082\u907D\u9081\u9080\u908A\u9089\u908F\u90A8\u90AF\u90B1\u90B5\u90E2\u90E4\u6248\u90DB\u9102\u9112\u9119\u9132\u9130\u914A\u9156\u9158\u9163\u9165\u9169\u9173\u9172\u918B\u9189\u9182\u91A2\u91AB\u91AF\u91AA\u91B5\u91B4\u91BA\u91C0\u91C1\u91C9\u91CB\u91D0\u91D6\u91DF\u91E1\u91DB\u91FC\u91F5\u91F6\u921E\u91FF\u9214\u922C\u9215\u9211\u925E\u9257\u9245\u9249\u9264\u9248\u9295\u923F\u924B\u9250\u929C\u9296\u9293\u929B\u925A\u92CF\u92B9\u92B7\u92E9\u930F\u92FA\u9344\u932E"],
["e840", "\u9319\u9322\u931A\u9323\u933A\u9335\u933B\u935C\u9360\u937C\u936E\u9356\u93B0\u93AC\u93AD\u9394\u93B9\u93D6\u93D7\u93E8\u93E5\u93D8\u93C3\u93DD\u93D0\u93C8\u93E4\u941A\u9414\u9413\u9403\u9407\u9410\u9436\u942B\u9435\u9421\u943A\u9441\u9452\u9444\u945B\u9460\u9462\u945E\u946A\u9229\u9470\u9475\u9477\u947D\u945A\u947C\u947E\u9481\u947F\u9582\u9587\u958A\u9594\u9596\u9598\u9599"],
["e880", "\u95A0\u95A8\u95A7\u95AD\u95BC\u95BB\u95B9\u95BE\u95CA\u6FF6\u95C3\u95CD\u95CC\u95D5\u95D4\u95D6\u95DC\u95E1\u95E5\u95E2\u9621\u9628\u962E\u962F\u9642\u964C\u964F\u964B\u9677\u965C\u965E\u965D\u965F\u9666\u9672\u966C\u968D\u9698\u9695\u9697\u96AA\u96A7\u96B1\u96B2\u96B0\u96B4\u96B6\u96B8\u96B9\u96CE\u96CB\u96C9\u96CD\u894D\u96DC\u970D\u96D5\u96F9\u9704\u9706\u9708\u9713\u970E\u9711\u970F\u9716\u9719\u9724\u972A\u9730\u9739\u973D\u973E\u9744\u9746\u9748\u9742\u9749\u975C\u9760\u9764\u9766\u9768\u52D2\u976B\u9771\u9779\u9785\u977C\u9781\u977A\u9786\u978B\u978F\u9790\u979C\u97A8\u97A6\u97A3\u97B3\u97B4\u97C3\u97C6\u97C8\u97CB\u97DC\u97ED\u9F4F\u97F2\u7ADF\u97F6\u97F5\u980F\u980C\u9838\u9824\u9821\u9837\u983D\u9846\u984F\u984B\u986B\u986F\u9870"],
["e940", "\u9871\u9874\u9873\u98AA\u98AF\u98B1\u98B6\u98C4\u98C3\u98C6\u98E9\u98EB\u9903\u9909\u9912\u9914\u9918\u9921\u991D\u991E\u9924\u9920\u992C\u992E\u993D\u993E\u9942\u9949\u9945\u9950\u994B\u9951\u9952\u994C\u9955\u9997\u9998\u99A5\u99AD\u99AE\u99BC\u99DF\u99DB\u99DD\u99D8\u99D1\u99ED\u99EE\u99F1\u99F2\u99FB\u99F8\u9A01\u9A0F\u9A05\u99E2\u9A19\u9A2B\u9A37\u9A45\u9A42\u9A40\u9A43"],
["e980", "\u9A3E\u9A55\u9A4D\u9A5B\u9A57\u9A5F\u9A62\u9A65\u9A64\u9A69\u9A6B\u9A6A\u9AAD\u9AB0\u9ABC\u9AC0\u9ACF\u9AD1\u9AD3\u9AD4\u9ADE\u9ADF\u9AE2\u9AE3\u9AE6\u9AEF\u9AEB\u9AEE\u9AF4\u9AF1\u9AF7\u9AFB\u9B06\u9B18\u9B1A\u9B1F\u9B22\u9B23\u9B25\u9B27\u9B28\u9B29\u9B2A\u9B2E\u9B2F\u9B32\u9B44\u9B43\u9B4F\u9B4D\u9B4E\u9B51\u9B58\u9B74\u9B93\u9B83\u9B91\u9B96\u9B97\u9B9F\u9BA0\u9BA8\u9BB4\u9BC0\u9BCA\u9BB9\u9BC6\u9BCF\u9BD1\u9BD2\u9BE3\u9BE2\u9BE4\u9BD4\u9BE1\u9C3A\u9BF2\u9BF1\u9BF0\u9C15\u9C14\u9C09\u9C13\u9C0C\u9C06\u9C08\u9C12\u9C0A\u9C04\u9C2E\u9C1B\u9C25\u9C24\u9C21\u9C30\u9C47\u9C32\u9C46\u9C3E\u9C5A\u9C60\u9C67\u9C76\u9C78\u9CE7\u9CEC\u9CF0\u9D09\u9D08\u9CEB\u9D03\u9D06\u9D2A\u9D26\u9DAF\u9D23\u9D1F\u9D44\u9D15\u9D12\u9D41\u9D3F\u9D3E\u9D46\u9D48"],
["ea40", "\u9D5D\u9D5E\u9D64\u9D51\u9D50\u9D59\u9D72\u9D89\u9D87\u9DAB\u9D6F\u9D7A\u9D9A\u9DA4\u9DA9\u9DB2\u9DC4\u9DC1\u9DBB\u9DB8\u9DBA\u9DC6\u9DCF\u9DC2\u9DD9\u9DD3\u9DF8\u9DE6\u9DED\u9DEF\u9DFD\u9E1A\u9E1B\u9E1E\u9E75\u9E79\u9E7D\u9E81\u9E88\u9E8B\u9E8C\u9E92\u9E95\u9E91\u9E9D\u9EA5\u9EA9\u9EB8\u9EAA\u9EAD\u9761\u9ECC\u9ECE\u9ECF\u9ED0\u9ED4\u9EDC\u9EDE\u9EDD\u9EE0\u9EE5\u9EE8\u9EEF"],
["ea80", "\u9EF4\u9EF6\u9EF7\u9EF9\u9EFB\u9EFC\u9EFD\u9F07\u9F08\u76B7\u9F15\u9F21\u9F2C\u9F3E\u9F4A\u9F52\u9F54\u9F63\u9F5F\u9F60\u9F61\u9F66\u9F67\u9F6C\u9F6A\u9F77\u9F72\u9F76\u9F95\u9F9C\u9FA0\u582F\u69C7\u9059\u7464\u51DC\u7199"],
["ed40", "\u7E8A\u891C\u9348\u9288\u84DC\u4FC9\u70BB\u6631\u68C8\u92F9\u66FB\u5F45\u4E28\u4EE1\u4EFC\u4F00\u4F03\u4F39\u4F56\u4F92\u4F8A\u4F9A\u4F94\u4FCD\u5040\u5022\u4FFF\u501E\u5046\u5070\u5042\u5094\u50F4\u50D8\u514A\u5164\u519D\u51BE\u51EC\u5215\u529C\u52A6\u52C0\u52DB\u5300\u5307\u5324\u5372\u5393\u53B2\u53DD\uFA0E\u549C\u548A\u54A9\u54FF\u5586\u5759\u5765\u57AC\u57C8\u57C7\uFA0F"],
["ed80", "\uFA10\u589E\u58B2\u590B\u5953\u595B\u595D\u5963\u59A4\u59BA\u5B56\u5BC0\u752F\u5BD8\u5BEC\u5C1E\u5CA6\u5CBA\u5CF5\u5D27\u5D53\uFA11\u5D42\u5D6D\u5DB8\u5DB9\u5DD0\u5F21\u5F34\u5F67\u5FB7\u5FDE\u605D\u6085\u608A\u60DE\u60D5\u6120\u60F2\u6111\u6137\u6130\u6198\u6213\u62A6\u63F5\u6460\u649D\u64CE\u654E\u6600\u6615\u663B\u6609\u662E\u661E\u6624\u6665\u6657\u6659\uFA12\u6673\u6699\u66A0\u66B2\u66BF\u66FA\u670E\uF929\u6766\u67BB\u6852\u67C0\u6801\u6844\u68CF\uFA13\u6968\uFA14\u6998\u69E2\u6A30\u6A6B\u6A46\u6A73\u6A7E\u6AE2\u6AE4\u6BD6\u6C3F\u6C5C\u6C86\u6C6F\u6CDA\u6D04\u6D87\u6D6F\u6D96\u6DAC\u6DCF\u6DF8\u6DF2\u6DFC\u6E39\u6E5C\u6E27\u6E3C\u6EBF\u6F88\u6FB5\u6FF5\u7005\u7007\u7028\u7085\u70AB\u710F\u7104\u715C\u7146\u7147\uFA15\u71C1\u71FE\u72B1"],
["ee40", "\u72BE\u7324\uFA16\u7377\u73BD\u73C9\u73D6\u73E3\u73D2\u7407\u73F5\u7426\u742A\u7429\u742E\u7462\u7489\u749F\u7501\u756F\u7682\u769C\u769E\u769B\u76A6\uFA17\u7746\u52AF\u7821\u784E\u7864\u787A\u7930\uFA18\uFA19\uFA1A\u7994\uFA1B\u799B\u7AD1\u7AE7\uFA1C\u7AEB\u7B9E\uFA1D\u7D48\u7D5C\u7DB7\u7DA0\u7DD6\u7E52\u7F47\u7FA1\uFA1E\u8301\u8362\u837F\u83C7\u83F6\u8448\u84B4\u8553\u8559"],
["ee80", "\u856B\uFA1F\u85B0\uFA20\uFA21\u8807\u88F5\u8A12\u8A37\u8A79\u8AA7\u8ABE\u8ADF\uFA22\u8AF6\u8B53\u8B7F\u8CF0\u8CF4\u8D12\u8D76\uFA23\u8ECF\uFA24\uFA25\u9067\u90DE\uFA26\u9115\u9127\u91DA\u91D7\u91DE\u91ED\u91EE\u91E4\u91E5\u9206\u9210\u920A\u923A\u9240\u923C\u924E\u9259\u9251\u9239\u9267\u92A7\u9277\u9278\u92E7\u92D7\u92D9\u92D0\uFA27\u92D5\u92E0\u92D3\u9325\u9321\u92FB\uFA28\u931E\u92FF\u931D\u9302\u9370\u9357\u93A4\u93C6\u93DE\u93F8\u9431\u9445\u9448\u9592\uF9DC\uFA29\u969D\u96AF\u9733\u973B\u9743\u974D\u974F\u9751\u9755\u9857\u9865\uFA2A\uFA2B\u9927\uFA2C\u999E\u9A4E\u9AD9\u9ADC\u9B75\u9B72\u9B8F\u9BB1\u9BBB\u9C00\u9D70\u9D6B\uFA2D\u9E19\u9ED1"],
["eeef", "\u2170", 9, "\uFFE2\uFFE4\uFF07\uFF02"],
["f040", "\uE000", 62],
["f080", "\uE03F", 124],
["f140", "\uE0BC", 62],
["f180", "\uE0FB", 124],
["f240", "\uE178", 62],
["f280", "\uE1B7", 124],
["f340", "\uE234", 62],
["f380", "\uE273", 124],
["f440", "\uE2F0", 62],
["f480", "\uE32F", 124],
["f540", "\uE3AC", 62],
["f580", "\uE3EB", 124],
["f640", "\uE468", 62],
["f680", "\uE4A7", 124],
["f740", "\uE524", 62],
["f780", "\uE563", 124],
["f840", "\uE5E0", 62],
["f880", "\uE61F", 124],
["f940", "\uE69C"],
["fa40", "\u2170", 9, "\u2160", 9, "\uFFE2\uFFE4\uFF07\uFF02\u3231\u2116\u2121\u2235\u7E8A\u891C\u9348\u9288\u84DC\u4FC9\u70BB\u6631\u68C8\u92F9\u66FB\u5F45\u4E28\u4EE1\u4EFC\u4F00\u4F03\u4F39\u4F56\u4F92\u4F8A\u4F9A\u4F94\u4FCD\u5040\u5022\u4FFF\u501E\u5046\u5070\u5042\u5094\u50F4\u50D8\u514A"],
["fa80", "\u5164\u519D\u51BE\u51EC\u5215\u529C\u52A6\u52C0\u52DB\u5300\u5307\u5324\u5372\u5393\u53B2\u53DD\uFA0E\u549C\u548A\u54A9\u54FF\u5586\u5759\u5765\u57AC\u57C8\u57C7\uFA0F\uFA10\u589E\u58B2\u590B\u5953\u595B\u595D\u5963\u59A4\u59BA\u5B56\u5BC0\u752F\u5BD8\u5BEC\u5C1E\u5CA6\u5CBA\u5CF5\u5D27\u5D53\uFA11\u5D42\u5D6D\u5DB8\u5DB9\u5DD0\u5F21\u5F34\u5F67\u5FB7\u5FDE\u605D\u6085\u608A\u60DE\u60D5\u6120\u60F2\u6111\u6137\u6130\u6198\u6213\u62A6\u63F5\u6460\u649D\u64CE\u654E\u6600\u6615\u663B\u6609\u662E\u661E\u6624\u6665\u6657\u6659\uFA12\u6673\u6699\u66A0\u66B2\u66BF\u66FA\u670E\uF929\u6766\u67BB\u6852\u67C0\u6801\u6844\u68CF\uFA13\u6968\uFA14\u6998\u69E2\u6A30\u6A6B\u6A46\u6A73\u6A7E\u6AE2\u6AE4\u6BD6\u6C3F\u6C5C\u6C86\u6C6F\u6CDA\u6D04\u6D87\u6D6F"],
["fb40", "\u6D96\u6DAC\u6DCF\u6DF8\u6DF2\u6DFC\u6E39\u6E5C\u6E27\u6E3C\u6EBF\u6F88\u6FB5\u6FF5\u7005\u7007\u7028\u7085\u70AB\u710F\u7104\u715C\u7146\u7147\uFA15\u71C1\u71FE\u72B1\u72BE\u7324\uFA16\u7377\u73BD\u73C9\u73D6\u73E3\u73D2\u7407\u73F5\u7426\u742A\u7429\u742E\u7462\u7489\u749F\u7501\u756F\u7682\u769C\u769E\u769B\u76A6\uFA17\u7746\u52AF\u7821\u784E\u7864\u787A\u7930\uFA18\uFA19"],
["fb80", "\uFA1A\u7994\uFA1B\u799B\u7AD1\u7AE7\uFA1C\u7AEB\u7B9E\uFA1D\u7D48\u7D5C\u7DB7\u7DA0\u7DD6\u7E52\u7F47\u7FA1\uFA1E\u8301\u8362\u837F\u83C7\u83F6\u8448\u84B4\u8553\u8559\u856B\uFA1F\u85B0\uFA20\uFA21\u8807\u88F5\u8A12\u8A37\u8A79\u8AA7\u8ABE\u8ADF\uFA22\u8AF6\u8B53\u8B7F\u8CF0\u8CF4\u8D12\u8D76\uFA23\u8ECF\uFA24\uFA25\u9067\u90DE\uFA26\u9115\u9127\u91DA\u91D7\u91DE\u91ED\u91EE\u91E4\u91E5\u9206\u9210\u920A\u923A\u9240\u923C\u924E\u9259\u9251\u9239\u9267\u92A7\u9277\u9278\u92E7\u92D7\u92D9\u92D0\uFA27\u92D5\u92E0\u92D3\u9325\u9321\u92FB\uFA28\u931E\u92FF\u931D\u9302\u9370\u9357\u93A4\u93C6\u93DE\u93F8\u9431\u9445\u9448\u9592\uF9DC\uFA29\u969D\u96AF\u9733\u973B\u9743\u974D\u974F\u9751\u9755\u9857\u9865\uFA2A\uFA2B\u9927\uFA2C\u999E\u9A4E\u9AD9"],
["fc40", "\u9ADC\u9B75\u9B72\u9B8F\u9BB1\u9BBB\u9C00\u9D70\u9D6B\uFA2D\u9E19\u9ED1"]
];
}
});
var require_eucjp2 = __commonJS2({
"node_modules/raw-body/node_modules/iconv-lite/encodings/tables/eucjp.json"(exports2, module2) {
module2.exports = [
["0", "\0", 127],
["8ea1", "\uFF61", 62],
["a1a1", "\u3000\u3001\u3002\uFF0C\uFF0E\u30FB\uFF1A\uFF1B\uFF1F\uFF01\u309B\u309C\xB4\uFF40\xA8\uFF3E\uFFE3\uFF3F\u30FD\u30FE\u309D\u309E\u3003\u4EDD\u3005\u3006\u3007\u30FC\u2015\u2010\uFF0F\uFF3C\uFF5E\u2225\uFF5C\u2026\u2025\u2018\u2019\u201C\u201D\uFF08\uFF09\u3014\u3015\uFF3B\uFF3D\uFF5B\uFF5D\u3008", 9, "\uFF0B\uFF0D\xB1\xD7\xF7\uFF1D\u2260\uFF1C\uFF1E\u2266\u2267\u221E\u2234\u2642\u2640\xB0\u2032\u2033\u2103\uFFE5\uFF04\uFFE0\uFFE1\uFF05\uFF03\uFF06\uFF0A\uFF20\xA7\u2606\u2605\u25CB\u25CF\u25CE\u25C7"],
["a2a1", "\u25C6\u25A1\u25A0\u25B3\u25B2\u25BD\u25BC\u203B\u3012\u2192\u2190\u2191\u2193\u3013"],
["a2ba", "\u2208\u220B\u2286\u2287\u2282\u2283\u222A\u2229"],
["a2ca", "\u2227\u2228\uFFE2\u21D2\u21D4\u2200\u2203"],
["a2dc", "\u2220\u22A5\u2312\u2202\u2207\u2261\u2252\u226A\u226B\u221A\u223D\u221D\u2235\u222B\u222C"],
["a2f2", "\u212B\u2030\u266F\u266D\u266A\u2020\u2021\xB6"],
["a2fe", "\u25EF"],
["a3b0", "\uFF10", 9],
["a3c1", "\uFF21", 25],
["a3e1", "\uFF41", 25],
["a4a1", "\u3041", 82],
["a5a1", "\u30A1", 85],
["a6a1", "\u0391", 16, "\u03A3", 6],
["a6c1", "\u03B1", 16, "\u03C3", 6],
["a7a1", "\u0410", 5, "\u0401\u0416", 25],
["a7d1", "\u0430", 5, "\u0451\u0436", 25],
["a8a1", "\u2500\u2502\u250C\u2510\u2518\u2514\u251C\u252C\u2524\u2534\u253C\u2501\u2503\u250F\u2513\u251B\u2517\u2523\u2533\u252B\u253B\u254B\u2520\u252F\u2528\u2537\u253F\u251D\u2530\u2525\u2538\u2542"],
["ada1", "\u2460", 19, "\u2160", 9],
["adc0", "\u3349\u3314\u3322\u334D\u3318\u3327\u3303\u3336\u3351\u3357\u330D\u3326\u3323\u332B\u334A\u333B\u339C\u339D\u339E\u338E\u338F\u33C4\u33A1"],
["addf", "\u337B\u301D\u301F\u2116\u33CD\u2121\u32A4", 4, "\u3231\u3232\u3239\u337E\u337D\u337C\u2252\u2261\u222B\u222E\u2211\u221A\u22A5\u2220\u221F\u22BF\u2235\u2229\u222A"],
["b0a1", "\u4E9C\u5516\u5A03\u963F\u54C0\u611B\u6328\u59F6\u9022\u8475\u831C\u7A50\u60AA\u63E1\u6E25\u65ED\u8466\u82A6\u9BF5\u6893\u5727\u65A1\u6271\u5B9B\u59D0\u867B\u98F4\u7D62\u7DBE\u9B8E\u6216\u7C9F\u88B7\u5B89\u5EB5\u6309\u6697\u6848\u95C7\u978D\u674F\u4EE5\u4F0A\u4F4D\u4F9D\u5049\u56F2\u5937\u59D4\u5A01\u5C09\u60DF\u610F\u6170\u6613\u6905\u70BA\u754F\u7570\u79FB\u7DAD\u7DEF\u80C3\u840E\u8863\u8B02\u9055\u907A\u533B\u4E95\u4EA5\u57DF\u80B2\u90C1\u78EF\u4E00\u58F1\u6EA2\u9038\u7A32\u8328\u828B\u9C2F\u5141\u5370\u54BD\u54E1\u56E0\u59FB\u5F15\u98F2\u6DEB\u80E4\u852D"],
["b1a1", "\u9662\u9670\u96A0\u97FB\u540B\u53F3\u5B87\u70CF\u7FBD\u8FC2\u96E8\u536F\u9D5C\u7ABA\u4E11\u7893\u81FC\u6E26\u5618\u5504\u6B1D\u851A\u9C3B\u59E5\u53A9\u6D66\u74DC\u958F\u5642\u4E91\u904B\u96F2\u834F\u990C\u53E1\u55B6\u5B30\u5F71\u6620\u66F3\u6804\u6C38\u6CF3\u6D29\u745B\u76C8\u7A4E\u9834\u82F1\u885B\u8A60\u92ED\u6DB2\u75AB\u76CA\u99C5\u60A6\u8B01\u8D8A\u95B2\u698E\u53AD\u5186\u5712\u5830\u5944\u5BB4\u5EF6\u6028\u63A9\u63F4\u6CBF\u6F14\u708E\u7114\u7159\u71D5\u733F\u7E01\u8276\u82D1\u8597\u9060\u925B\u9D1B\u5869\u65BC\u6C5A\u7525\u51F9\u592E\u5965\u5F80\u5FDC"],
["b2a1", "\u62BC\u65FA\u6A2A\u6B27\u6BB4\u738B\u7FC1\u8956\u9D2C\u9D0E\u9EC4\u5CA1\u6C96\u837B\u5104\u5C4B\u61B6\u81C6\u6876\u7261\u4E59\u4FFA\u5378\u6069\u6E29\u7A4F\u97F3\u4E0B\u5316\u4EEE\u4F55\u4F3D\u4FA1\u4F73\u52A0\u53EF\u5609\u590F\u5AC1\u5BB6\u5BE1\u79D1\u6687\u679C\u67B6\u6B4C\u6CB3\u706B\u73C2\u798D\u79BE\u7A3C\u7B87\u82B1\u82DB\u8304\u8377\u83EF\u83D3\u8766\u8AB2\u5629\u8CA8\u8FE6\u904E\u971E\u868A\u4FC4\u5CE8\u6211\u7259\u753B\u81E5\u82BD\u86FE\u8CC0\u96C5\u9913\u99D5\u4ECB\u4F1A\u89E3\u56DE\u584A\u58CA\u5EFB\u5FEB\u602A\u6094\u6062\u61D0\u6212\u62D0\u6539"],
["b3a1", "\u9B41\u6666\u68B0\u6D77\u7070\u754C\u7686\u7D75\u82A5\u87F9\u958B\u968E\u8C9D\u51F1\u52BE\u5916\u54B3\u5BB3\u5D16\u6168\u6982\u6DAF\u788D\u84CB\u8857\u8A72\u93A7\u9AB8\u6D6C\u99A8\u86D9\u57A3\u67FF\u86CE\u920E\u5283\u5687\u5404\u5ED3\u62E1\u64B9\u683C\u6838\u6BBB\u7372\u78BA\u7A6B\u899A\u89D2\u8D6B\u8F03\u90ED\u95A3\u9694\u9769\u5B66\u5CB3\u697D\u984D\u984E\u639B\u7B20\u6A2B\u6A7F\u68B6\u9C0D\u6F5F\u5272\u559D\u6070\u62EC\u6D3B\u6E07\u6ED1\u845B\u8910\u8F44\u4E14\u9C39\u53F6\u691B\u6A3A\u9784\u682A\u515C\u7AC3\u84B2\u91DC\u938C\u565B\u9D28\u6822\u8305\u8431"],
["b4a1", "\u7CA5\u5208\u82C5\u74E6\u4E7E\u4F83\u51A0\u5BD2\u520A\u52D8\u52E7\u5DFB\u559A\u582A\u59E6\u5B8C\u5B98\u5BDB\u5E72\u5E79\u60A3\u611F\u6163\u61BE\u63DB\u6562\u67D1\u6853\u68FA\u6B3E\u6B53\u6C57\u6F22\u6F97\u6F45\u74B0\u7518\u76E3\u770B\u7AFF\u7BA1\u7C21\u7DE9\u7F36\u7FF0\u809D\u8266\u839E\u89B3\u8ACC\u8CAB\u9084\u9451\u9593\u9591\u95A2\u9665\u97D3\u9928\u8218\u4E38\u542B\u5CB8\u5DCC\u73A9\u764C\u773C\u5CA9\u7FEB\u8D0B\u96C1\u9811\u9854\u9858\u4F01\u4F0E\u5371\u559C\u5668\u57FA\u5947\u5B09\u5BC4\u5C90\u5E0C\u5E7E\u5FCC\u63EE\u673A\u65D7\u65E2\u671F\u68CB\u68C4"],
["b5a1", "\u6A5F\u5E30\u6BC5\u6C17\u6C7D\u757F\u7948\u5B63\u7A00\u7D00\u5FBD\u898F\u8A18\u8CB4\u8D77\u8ECC\u8F1D\u98E2\u9A0E\u9B3C\u4E80\u507D\u5100\u5993\u5B9C\u622F\u6280\u64EC\u6B3A\u72A0\u7591\u7947\u7FA9\u87FB\u8ABC\u8B70\u63AC\u83CA\u97A0\u5409\u5403\u55AB\u6854\u6A58\u8A70\u7827\u6775\u9ECD\u5374\u5BA2\u811A\u8650\u9006\u4E18\u4E45\u4EC7\u4F11\u53CA\u5438\u5BAE\u5F13\u6025\u6551\u673D\u6C42\u6C72\u6CE3\u7078\u7403\u7A76\u7AAE\u7B08\u7D1A\u7CFE\u7D66\u65E7\u725B\u53BB\u5C45\u5DE8\u62D2\u62E0\u6319\u6E20\u865A\u8A31\u8DDD\u92F8\u6F01\u79A6\u9B5A\u4EA8\u4EAB\u4EAC"],
["b6a1", "\u4F9B\u4FA0\u50D1\u5147\u7AF6\u5171\u51F6\u5354\u5321\u537F\u53EB\u55AC\u5883\u5CE1\u5F37\u5F4A\u602F\u6050\u606D\u631F\u6559\u6A4B\u6CC1\u72C2\u72ED\u77EF\u80F8\u8105\u8208\u854E\u90F7\u93E1\u97FF\u9957\u9A5A\u4EF0\u51DD\u5C2D\u6681\u696D\u5C40\u66F2\u6975\u7389\u6850\u7C81\u50C5\u52E4\u5747\u5DFE\u9326\u65A4\u6B23\u6B3D\u7434\u7981\u79BD\u7B4B\u7DCA\u82B9\u83CC\u887F\u895F\u8B39\u8FD1\u91D1\u541F\u9280\u4E5D\u5036\u53E5\u533A\u72D7\u7396\u77E9\u82E6\u8EAF\u99C6\u99C8\u99D2\u5177\u611A\u865E\u55B0\u7A7A\u5076\u5BD3\u9047\u9685\u4E32\u6ADB\u91E7\u5C51\u5C48"],
["b7a1", "\u6398\u7A9F\u6C93\u9774\u8F61\u7AAA\u718A\u9688\u7C82\u6817\u7E70\u6851\u936C\u52F2\u541B\u85AB\u8A13\u7FA4\u8ECD\u90E1\u5366\u8888\u7941\u4FC2\u50BE\u5211\u5144\u5553\u572D\u73EA\u578B\u5951\u5F62\u5F84\u6075\u6176\u6167\u61A9\u63B2\u643A\u656C\u666F\u6842\u6E13\u7566\u7A3D\u7CFB\u7D4C\u7D99\u7E4B\u7F6B\u830E\u834A\u86CD\u8A08\u8A63\u8B66\u8EFD\u981A\u9D8F\u82B8\u8FCE\u9BE8\u5287\u621F\u6483\u6FC0\u9699\u6841\u5091\u6B20\u6C7A\u6F54\u7A74\u7D50\u8840\u8A23\u6708\u4EF6\u5039\u5026\u5065\u517C\u5238\u5263\u55A7\u570F\u5805\u5ACC\u5EFA\u61B2\u61F8\u62F3\u6372"],
["b8a1", "\u691C\u6A29\u727D\u72AC\u732E\u7814\u786F\u7D79\u770C\u80A9\u898B\u8B19\u8CE2\u8ED2\u9063\u9375\u967A\u9855\u9A13\u9E78\u5143\u539F\u53B3\u5E7B\u5F26\u6E1B\u6E90\u7384\u73FE\u7D43\u8237\u8A00\u8AFA\u9650\u4E4E\u500B\u53E4\u547C\u56FA\u59D1\u5B64\u5DF1\u5EAB\u5F27\u6238\u6545\u67AF\u6E56\u72D0\u7CCA\u88B4\u80A1\u80E1\u83F0\u864E\u8A87\u8DE8\u9237\u96C7\u9867\u9F13\u4E94\u4E92\u4F0D\u5348\u5449\u543E\u5A2F\u5F8C\u5FA1\u609F\u68A7\u6A8E\u745A\u7881\u8A9E\u8AA4\u8B77\u9190\u4E5E\u9BC9\u4EA4\u4F7C\u4FAF\u5019\u5016\u5149\u516C\u529F\u52B9\u52FE\u539A\u53E3\u5411"],
["b9a1", "\u540E\u5589\u5751\u57A2\u597D\u5B54\u5B5D\u5B8F\u5DE5\u5DE7\u5DF7\u5E78\u5E83\u5E9A\u5EB7\u5F18\u6052\u614C\u6297\u62D8\u63A7\u653B\u6602\u6643\u66F4\u676D\u6821\u6897\u69CB\u6C5F\u6D2A\u6D69\u6E2F\u6E9D\u7532\u7687\u786C\u7A3F\u7CE0\u7D05\u7D18\u7D5E\u7DB1\u8015\u8003\u80AF\u80B1\u8154\u818F\u822A\u8352\u884C\u8861\u8B1B\u8CA2\u8CFC\u90CA\u9175\u9271\u783F\u92FC\u95A4\u964D\u9805\u9999\u9AD8\u9D3B\u525B\u52AB\u53F7\u5408\u58D5\u62F7\u6FE0\u8C6A\u8F5F\u9EB9\u514B\u523B\u544A\u56FD\u7A40\u9177\u9D60\u9ED2\u7344\u6F09\u8170\u7511\u5FFD\u60DA\u9AA8\u72DB\u8FBC"],
["baa1", "\u6B64\u9803\u4ECA\u56F0\u5764\u58BE\u5A5A\u6068\u61C7\u660F\u6606\u6839\u68B1\u6DF7\u75D5\u7D3A\u826E\u9B42\u4E9B\u4F50\u53C9\u5506\u5D6F\u5DE6\u5DEE\u67FB\u6C99\u7473\u7802\u8A50\u9396\u88DF\u5750\u5EA7\u632B\u50B5\u50AC\u518D\u6700\u54C9\u585E\u59BB\u5BB0\u5F69\u624D\u63A1\u683D\u6B73\u6E08\u707D\u91C7\u7280\u7815\u7826\u796D\u658E\u7D30\u83DC\u88C1\u8F09\u969B\u5264\u5728\u6750\u7F6A\u8CA1\u51B4\u5742\u962A\u583A\u698A\u80B4\u54B2\u5D0E\u57FC\u7895\u9DFA\u4F5C\u524A\u548B\u643E\u6628\u6714\u67F5\u7A84\u7B56\u7D22\u932F\u685C\u9BAD\u7B39\u5319\u518A\u5237"],
["bba1", "\u5BDF\u62F6\u64AE\u64E6\u672D\u6BBA\u85A9\u96D1\u7690\u9BD6\u634C\u9306\u9BAB\u76BF\u6652\u4E09\u5098\u53C2\u5C71\u60E8\u6492\u6563\u685F\u71E6\u73CA\u7523\u7B97\u7E82\u8695\u8B83\u8CDB\u9178\u9910\u65AC\u66AB\u6B8B\u4ED5\u4ED4\u4F3A\u4F7F\u523A\u53F8\u53F2\u55E3\u56DB\u58EB\u59CB\u59C9\u59FF\u5B50\u5C4D\u5E02\u5E2B\u5FD7\u601D\u6307\u652F\u5B5C\u65AF\u65BD\u65E8\u679D\u6B62\u6B7B\u6C0F\u7345\u7949\u79C1\u7CF8\u7D19\u7D2B\u80A2\u8102\u81F3\u8996\u8A5E\u8A69\u8A66\u8A8C\u8AEE\u8CC7\u8CDC\u96CC\u98FC\u6B6F\u4E8B\u4F3C\u4F8D\u5150\u5B57\u5BFA\u6148\u6301\u6642"],
["bca1", "\u6B21\u6ECB\u6CBB\u723E\u74BD\u75D4\u78C1\u793A\u800C\u8033\u81EA\u8494\u8F9E\u6C50\u9E7F\u5F0F\u8B58\u9D2B\u7AFA\u8EF8\u5B8D\u96EB\u4E03\u53F1\u57F7\u5931\u5AC9\u5BA4\u6089\u6E7F\u6F06\u75BE\u8CEA\u5B9F\u8500\u7BE0\u5072\u67F4\u829D\u5C61\u854A\u7E1E\u820E\u5199\u5C04\u6368\u8D66\u659C\u716E\u793E\u7D17\u8005\u8B1D\u8ECA\u906E\u86C7\u90AA\u501F\u52FA\u5C3A\u6753\u707C\u7235\u914C\u91C8\u932B\u82E5\u5BC2\u5F31\u60F9\u4E3B\u53D6\u5B88\u624B\u6731\u6B8A\u72E9\u73E0\u7A2E\u816B\u8DA3\u9152\u9996\u5112\u53D7\u546A\u5BFF\u6388\u6A39\u7DAC\u9700\u56DA\u53CE\u5468"],
["bda1", "\u5B97\u5C31\u5DDE\u4FEE\u6101\u62FE\u6D32\u79C0\u79CB\u7D42\u7E4D\u7FD2\u81ED\u821F\u8490\u8846\u8972\u8B90\u8E74\u8F2F\u9031\u914B\u916C\u96C6\u919C\u4EC0\u4F4F\u5145\u5341\u5F93\u620E\u67D4\u6C41\u6E0B\u7363\u7E26\u91CD\u9283\u53D4\u5919\u5BBF\u6DD1\u795D\u7E2E\u7C9B\u587E\u719F\u51FA\u8853\u8FF0\u4FCA\u5CFB\u6625\u77AC\u7AE3\u821C\u99FF\u51C6\u5FAA\u65EC\u696F\u6B89\u6DF3\u6E96\u6F64\u76FE\u7D14\u5DE1\u9075\u9187\u9806\u51E6\u521D\u6240\u6691\u66D9\u6E1A\u5EB6\u7DD2\u7F72\u66F8\u85AF\u85F7\u8AF8\u52A9\u53D9\u5973\u5E8F\u5F90\u6055\u92E4\u9664\u50B7\u511F"],
["bea1", "\u52DD\u5320\u5347\u53EC\u54E8\u5546\u5531\u5617\u5968\u59BE\u5A3C\u5BB5\u5C06\u5C0F\u5C11\u5C1A\u5E84\u5E8A\u5EE0\u5F70\u627F\u6284\u62DB\u638C\u6377\u6607\u660C\u662D\u6676\u677E\u68A2\u6A1F\u6A35\u6CBC\u6D88\u6E09\u6E58\u713C\u7126\u7167\u75C7\u7701\u785D\u7901\u7965\u79F0\u7AE0\u7B11\u7CA7\u7D39\u8096\u83D6\u848B\u8549\u885D\u88F3\u8A1F\u8A3C\u8A54\u8A73\u8C61\u8CDE\u91A4\u9266\u937E\u9418\u969C\u9798\u4E0A\u4E08\u4E1E\u4E57\u5197\u5270\u57CE\u5834\u58CC\u5B22\u5E38\u60C5\u64FE\u6761\u6756\u6D44\u72B6\u7573\u7A63\u84B8\u8B72\u91B8\u9320\u5631\u57F4\u98FE"],
["bfa1", "\u62ED\u690D\u6B96\u71ED\u7E54\u8077\u8272\u89E6\u98DF\u8755\u8FB1\u5C3B\u4F38\u4FE1\u4FB5\u5507\u5A20\u5BDD\u5BE9\u5FC3\u614E\u632F\u65B0\u664B\u68EE\u699B\u6D78\u6DF1\u7533\u75B9\u771F\u795E\u79E6\u7D33\u81E3\u82AF\u85AA\u89AA\u8A3A\u8EAB\u8F9B\u9032\u91DD\u9707\u4EBA\u4EC1\u5203\u5875\u58EC\u5C0B\u751A\u5C3D\u814E\u8A0A\u8FC5\u9663\u976D\u7B25\u8ACF\u9808\u9162\u56F3\u53A8\u9017\u5439\u5782\u5E25\u63A8\u6C34\u708A\u7761\u7C8B\u7FE0\u8870\u9042\u9154\u9310\u9318\u968F\u745E\u9AC4\u5D07\u5D69\u6570\u67A2\u8DA8\u96DB\u636E\u6749\u6919\u83C5\u9817\u96C0\u88FE"],
["c0a1", "\u6F84\u647A\u5BF8\u4E16\u702C\u755D\u662F\u51C4\u5236\u52E2\u59D3\u5F81\u6027\u6210\u653F\u6574\u661F\u6674\u68F2\u6816\u6B63\u6E05\u7272\u751F\u76DB\u7CBE\u8056\u58F0\u88FD\u897F\u8AA0\u8A93\u8ACB\u901D\u9192\u9752\u9759\u6589\u7A0E\u8106\u96BB\u5E2D\u60DC\u621A\u65A5\u6614\u6790\u77F3\u7A4D\u7C4D\u7E3E\u810A\u8CAC\u8D64\u8DE1\u8E5F\u78A9\u5207\u62D9\u63A5\u6442\u6298\u8A2D\u7A83\u7BC0\u8AAC\u96EA\u7D76\u820C\u8749\u4ED9\u5148\u5343\u5360\u5BA3\u5C02\u5C16\u5DDD\u6226\u6247\u64B0\u6813\u6834\u6CC9\u6D45\u6D17\u67D3\u6F5C\u714E\u717D\u65CB\u7A7F\u7BAD\u7DDA"],
["c1a1", "\u7E4A\u7FA8\u817A\u821B\u8239\u85A6\u8A6E\u8CCE\u8DF5\u9078\u9077\u92AD\u9291\u9583\u9BAE\u524D\u5584\u6F38\u7136\u5168\u7985\u7E55\u81B3\u7CCE\u564C\u5851\u5CA8\u63AA\u66FE\u66FD\u695A\u72D9\u758F\u758E\u790E\u7956\u79DF\u7C97\u7D20\u7D44\u8607\u8A34\u963B\u9061\u9F20\u50E7\u5275\u53CC\u53E2\u5009\u55AA\u58EE\u594F\u723D\u5B8B\u5C64\u531D\u60E3\u60F3\u635C\u6383\u633F\u63BB\u64CD\u65E9\u66F9\u5DE3\u69CD\u69FD\u6F15\u71E5\u4E89\u75E9\u76F8\u7A93\u7CDF\u7DCF\u7D9C\u8061\u8349\u8358\u846C\u84BC\u85FB\u88C5\u8D70\u9001\u906D\u9397\u971C\u9A12\u50CF\u5897\u618E"],
["c2a1", "\u81D3\u8535\u8D08\u9020\u4FC3\u5074\u5247\u5373\u606F\u6349\u675F\u6E2C\u8DB3\u901F\u4FD7\u5C5E\u8CCA\u65CF\u7D9A\u5352\u8896\u5176\u63C3\u5B58\u5B6B\u5C0A\u640D\u6751\u905C\u4ED6\u591A\u592A\u6C70\u8A51\u553E\u5815\u59A5\u60F0\u6253\u67C1\u8235\u6955\u9640\u99C4\u9A28\u4F53\u5806\u5BFE\u8010\u5CB1\u5E2F\u5F85\u6020\u614B\u6234\u66FF\u6CF0\u6EDE\u80CE\u817F\u82D4\u888B\u8CB8\u9000\u902E\u968A\u9EDB\u9BDB\u4EE3\u53F0\u5927\u7B2C\u918D\u984C\u9DF9\u6EDD\u7027\u5353\u5544\u5B85\u6258\u629E\u62D3\u6CA2\u6FEF\u7422\u8A17\u9438\u6FC1\u8AFE\u8338\u51E7\u86F8\u53EA"],
["c3a1", "\u53E9\u4F46\u9054\u8FB0\u596A\u8131\u5DFD\u7AEA\u8FBF\u68DA\u8C37\u72F8\u9C48\u6A3D\u8AB0\u4E39\u5358\u5606\u5766\u62C5\u63A2\u65E6\u6B4E\u6DE1\u6E5B\u70AD\u77ED\u7AEF\u7BAA\u7DBB\u803D\u80C6\u86CB\u8A95\u935B\u56E3\u58C7\u5F3E\u65AD\u6696\u6A80\u6BB5\u7537\u8AC7\u5024\u77E5\u5730\u5F1B\u6065\u667A\u6C60\u75F4\u7A1A\u7F6E\u81F4\u8718\u9045\u99B3\u7BC9\u755C\u7AF9\u7B51\u84C4\u9010\u79E9\u7A92\u8336\u5AE1\u7740\u4E2D\u4EF2\u5B99\u5FE0\u62BD\u663C\u67F1\u6CE8\u866B\u8877\u8A3B\u914E\u92F3\u99D0\u6A17\u7026\u732A\u82E7\u8457\u8CAF\u4E01\u5146\u51CB\u558B\u5BF5"],
["c4a1", "\u5E16\u5E33\u5E81\u5F14\u5F35\u5F6B\u5FB4\u61F2\u6311\u66A2\u671D\u6F6E\u7252\u753A\u773A\u8074\u8139\u8178\u8776\u8ABF\u8ADC\u8D85\u8DF3\u929A\u9577\u9802\u9CE5\u52C5\u6357\u76F4\u6715\u6C88\u73CD\u8CC3\u93AE\u9673\u6D25\u589C\u690E\u69CC\u8FFD\u939A\u75DB\u901A\u585A\u6802\u63B4\u69FB\u4F43\u6F2C\u67D8\u8FBB\u8526\u7DB4\u9354\u693F\u6F70\u576A\u58F7\u5B2C\u7D2C\u722A\u540A\u91E3\u9DB4\u4EAD\u4F4E\u505C\u5075\u5243\u8C9E\u5448\u5824\u5B9A\u5E1D\u5E95\u5EAD\u5EF7\u5F1F\u608C\u62B5\u633A\u63D0\u68AF\u6C40\u7887\u798E\u7A0B\u7DE0\u8247\u8A02\u8AE6\u8E44\u9013"],
["c5a1", "\u90B8\u912D\u91D8\u9F0E\u6CE5\u6458\u64E2\u6575\u6EF4\u7684\u7B1B\u9069\u93D1\u6EBA\u54F2\u5FB9\u64A4\u8F4D\u8FED\u9244\u5178\u586B\u5929\u5C55\u5E97\u6DFB\u7E8F\u751C\u8CBC\u8EE2\u985B\u70B9\u4F1D\u6BBF\u6FB1\u7530\u96FB\u514E\u5410\u5835\u5857\u59AC\u5C60\u5F92\u6597\u675C\u6E21\u767B\u83DF\u8CED\u9014\u90FD\u934D\u7825\u783A\u52AA\u5EA6\u571F\u5974\u6012\u5012\u515A\u51AC\u51CD\u5200\u5510\u5854\u5858\u5957\u5B95\u5CF6\u5D8B\u60BC\u6295\u642D\u6771\u6843\u68BC\u68DF\u76D7\u6DD8\u6E6F\u6D9B\u706F\u71C8\u5F53\u75D8\u7977\u7B49\u7B54\u7B52\u7CD6\u7D71\u5230"],
["c6a1", "\u8463\u8569\u85E4\u8A0E\u8B04\u8C46\u8E0F\u9003\u900F\u9419\u9676\u982D\u9A30\u95D8\u50CD\u52D5\u540C\u5802\u5C0E\u61A7\u649E\u6D1E\u77B3\u7AE5\u80F4\u8404\u9053\u9285\u5CE0\u9D07\u533F\u5F97\u5FB3\u6D9C\u7279\u7763\u79BF\u7BE4\u6BD2\u72EC\u8AAD\u6803\u6A61\u51F8\u7A81\u6934\u5C4A\u9CF6\u82EB\u5BC5\u9149\u701E\u5678\u5C6F\u60C7\u6566\u6C8C\u8C5A\u9041\u9813\u5451\u66C7\u920D\u5948\u90A3\u5185\u4E4D\u51EA\u8599\u8B0E\u7058\u637A\u934B\u6962\u99B4\u7E04\u7577\u5357\u6960\u8EDF\u96E3\u6C5D\u4E8C\u5C3C\u5F10\u8FE9\u5302\u8CD1\u8089\u8679\u5EFF\u65E5\u4E73\u5165"],
["c7a1", "\u5982\u5C3F\u97EE\u4EFB\u598A\u5FCD\u8A8D\u6FE1\u79B0\u7962\u5BE7\u8471\u732B\u71B1\u5E74\u5FF5\u637B\u649A\u71C3\u7C98\u4E43\u5EFC\u4E4B\u57DC\u56A2\u60A9\u6FC3\u7D0D\u80FD\u8133\u81BF\u8FB2\u8997\u86A4\u5DF4\u628A\u64AD\u8987\u6777\u6CE2\u6D3E\u7436\u7834\u5A46\u7F75\u82AD\u99AC\u4FF3\u5EC3\u62DD\u6392\u6557\u676F\u76C3\u724C\u80CC\u80BA\u8F29\u914D\u500D\u57F9\u5A92\u6885\u6973\u7164\u72FD\u8CB7\u58F2\u8CE0\u966A\u9019\u877F\u79E4\u77E7\u8429\u4F2F\u5265\u535A\u62CD\u67CF\u6CCA\u767D\u7B94\u7C95\u8236\u8584\u8FEB\u66DD\u6F20\u7206\u7E1B\u83AB\u99C1\u9EA6"],
["c8a1", "\u51FD\u7BB1\u7872\u7BB8\u8087\u7B48\u6AE8\u5E61\u808C\u7551\u7560\u516B\u9262\u6E8C\u767A\u9197\u9AEA\u4F10\u7F70\u629C\u7B4F\u95A5\u9CE9\u567A\u5859\u86E4\u96BC\u4F34\u5224\u534A\u53CD\u53DB\u5E06\u642C\u6591\u677F\u6C3E\u6C4E\u7248\u72AF\u73ED\u7554\u7E41\u822C\u85E9\u8CA9\u7BC4\u91C6\u7169\u9812\u98EF\u633D\u6669\u756A\u76E4\u78D0\u8543\u86EE\u532A\u5351\u5426\u5983\u5E87\u5F7C\u60B2\u6249\u6279\u62AB\u6590\u6BD4\u6CCC\u75B2\u76AE\u7891\u79D8\u7DCB\u7F77\u80A5\u88AB\u8AB9\u8CBB\u907F\u975E\u98DB\u6A0B\u7C38\u5099\u5C3E\u5FAE\u6787\u6BD8\u7435\u7709\u7F8E"],
["c9a1", "\u9F3B\u67CA\u7A17\u5339\u758B\u9AED\u5F66\u819D\u83F1\u8098\u5F3C\u5FC5\u7562\u7B46\u903C\u6867\u59EB\u5A9B\u7D10\u767E\u8B2C\u4FF5\u5F6A\u6A19\u6C37\u6F02\u74E2\u7968\u8868\u8A55\u8C79\u5EDF\u63CF\u75C5\u79D2\u82D7\u9328\u92F2\u849C\u86ED\u9C2D\u54C1\u5F6C\u658C\u6D5C\u7015\u8CA7\u8CD3\u983B\u654F\u74F6\u4E0D\u4ED8\u57E0\u592B\u5A66\u5BCC\u51A8\u5E03\u5E9C\u6016\u6276\u6577\u65A7\u666E\u6D6E\u7236\u7B26\u8150\u819A\u8299\u8B5C\u8CA0\u8CE6\u8D74\u961C\u9644\u4FAE\u64AB\u6B66\u821E\u8461\u856A\u90E8\u5C01\u6953\u98A8\u847A\u8557\u4F0F\u526F\u5FA9\u5E45\u670D"],
["caa1", "\u798F\u8179\u8907\u8986\u6DF5\u5F17\u6255\u6CB8\u4ECF\u7269\u9B92\u5206\u543B\u5674\u58B3\u61A4\u626E\u711A\u596E\u7C89\u7CDE\u7D1B\u96F0\u6587\u805E\u4E19\u4F75\u5175\u5840\u5E63\u5E73\u5F0A\u67C4\u4E26\u853D\u9589\u965B\u7C73\u9801\u50FB\u58C1\u7656\u78A7\u5225\u77A5\u8511\u7B86\u504F\u5909\u7247\u7BC7\u7DE8\u8FBA\u8FD4\u904D\u4FBF\u52C9\u5A29\u5F01\u97AD\u4FDD\u8217\u92EA\u5703\u6355\u6B69\u752B\u88DC\u8F14\u7A42\u52DF\u5893\u6155\u620A\u66AE\u6BCD\u7C3F\u83E9\u5023\u4FF8\u5305\u5446\u5831\u5949\u5B9D\u5CF0\u5CEF\u5D29\u5E96\u62B1\u6367\u653E\u65B9\u670B"],
["cba1", "\u6CD5\u6CE1\u70F9\u7832\u7E2B\u80DE\u82B3\u840C\u84EC\u8702\u8912\u8A2A\u8C4A\u90A6\u92D2\u98FD\u9CF3\u9D6C\u4E4F\u4EA1\u508D\u5256\u574A\u59A8\u5E3D\u5FD8\u5FD9\u623F\u66B4\u671B\u67D0\u68D2\u5192\u7D21\u80AA\u81A8\u8B00\u8C8C\u8CBF\u927E\u9632\u5420\u982C\u5317\u50D5\u535C\u58A8\u64B2\u6734\u7267\u7766\u7A46\u91E6\u52C3\u6CA1\u6B86\u5800\u5E4C\u5954\u672C\u7FFB\u51E1\u76C6\u6469\u78E8\u9B54\u9EBB\u57CB\u59B9\u6627\u679A\u6BCE\u54E9\u69D9\u5E55\u819C\u6795\u9BAA\u67FE\u9C52\u685D\u4EA6\u4FE3\u53C8\u62B9\u672B\u6CAB\u8FC4\u4FAD\u7E6D\u9EBF\u4E07\u6162\u6E80"],
["cca1", "\u6F2B\u8513\u5473\u672A\u9B45\u5DF3\u7B95\u5CAC\u5BC6\u871C\u6E4A\u84D1\u7A14\u8108\u5999\u7C8D\u6C11\u7720\u52D9\u5922\u7121\u725F\u77DB\u9727\u9D61\u690B\u5A7F\u5A18\u51A5\u540D\u547D\u660E\u76DF\u8FF7\u9298\u9CF4\u59EA\u725D\u6EC5\u514D\u68C9\u7DBF\u7DEC\u9762\u9EBA\u6478\u6A21\u8302\u5984\u5B5F\u6BDB\u731B\u76F2\u7DB2\u8017\u8499\u5132\u6728\u9ED9\u76EE\u6762\u52FF\u9905\u5C24\u623B\u7C7E\u8CB0\u554F\u60B6\u7D0B\u9580\u5301\u4E5F\u51B6\u591C\u723A\u8036\u91CE\u5F25\u77E2\u5384\u5F79\u7D04\u85AC\u8A33\u8E8D\u9756\u67F3\u85AE\u9453\u6109\u6108\u6CB9\u7652"],
["cda1", "\u8AED\u8F38\u552F\u4F51\u512A\u52C7\u53CB\u5BA5\u5E7D\u60A0\u6182\u63D6\u6709\u67DA\u6E67\u6D8C\u7336\u7337\u7531\u7950\u88D5\u8A98\u904A\u9091\u90F5\u96C4\u878D\u5915\u4E88\u4F59\u4E0E\u8A89\u8F3F\u9810\u50AD\u5E7C\u5996\u5BB9\u5EB8\u63DA\u63FA\u64C1\u66DC\u694A\u69D8\u6D0B\u6EB6\u7194\u7528\u7AAF\u7F8A\u8000\u8449\u84C9\u8981\u8B21\u8E0A\u9065\u967D\u990A\u617E\u6291\u6B32\u6C83\u6D74\u7FCC\u7FFC\u6DC0\u7F85\u87BA\u88F8\u6765\u83B1\u983C\u96F7\u6D1B\u7D61\u843D\u916A\u4E71\u5375\u5D50\u6B04\u6FEB\u85CD\u862D\u89A7\u5229\u540F\u5C65\u674E\u68A8\u7406\u7483"],
["cea1", "\u75E2\u88CF\u88E1\u91CC\u96E2\u9678\u5F8B\u7387\u7ACB\u844E\u63A0\u7565\u5289\u6D41\u6E9C\u7409\u7559\u786B\u7C92\u9686\u7ADC\u9F8D\u4FB6\u616E\u65C5\u865C\u4E86\u4EAE\u50DA\u4E21\u51CC\u5BEE\u6599\u6881\u6DBC\u731F\u7642\u77AD\u7A1C\u7CE7\u826F\u8AD2\u907C\u91CF\u9675\u9818\u529B\u7DD1\u502B\u5398\u6797\u6DCB\u71D0\u7433\u81E8\u8F2A\u96A3\u9C57\u9E9F\u7460\u5841\u6D99\u7D2F\u985E\u4EE4\u4F36\u4F8B\u51B7\u52B1\u5DBA\u601C\u73B2\u793C\u82D3\u9234\u96B7\u96F6\u970A\u9E97\u9F62\u66A6\u6B74\u5217\u52A3\u70C8\u88C2\u5EC9\u604B\u6190\u6F23\u7149\u7C3E\u7DF4\u806F"],
["cfa1", "\u84EE\u9023\u932C\u5442\u9B6F\u6AD3\u7089\u8CC2\u8DEF\u9732\u52B4\u5A41\u5ECA\u5F04\u6717\u697C\u6994\u6D6A\u6F0F\u7262\u72FC\u7BED\u8001\u807E\u874B\u90CE\u516D\u9E93\u7984\u808B\u9332\u8AD6\u502D\u548C\u8A71\u6B6A\u8CC4\u8107\u60D1\u67A0\u9DF2\u4E99\u4E98\u9C10\u8A6B\u85C1\u8568\u6900\u6E7E\u7897\u8155"],
["d0a1", "\u5F0C\u4E10\u4E15\u4E2A\u4E31\u4E36\u4E3C\u4E3F\u4E42\u4E56\u4E58\u4E82\u4E85\u8C6B\u4E8A\u8212\u5F0D\u4E8E\u4E9E\u4E9F\u4EA0\u4EA2\u4EB0\u4EB3\u4EB6\u4ECE\u4ECD\u4EC4\u4EC6\u4EC2\u4ED7\u4EDE\u4EED\u4EDF\u4EF7\u4F09\u4F5A\u4F30\u4F5B\u4F5D\u4F57\u4F47\u4F76\u4F88\u4F8F\u4F98\u4F7B\u4F69\u4F70\u4F91\u4F6F\u4F86\u4F96\u5118\u4FD4\u4FDF\u4FCE\u4FD8\u4FDB\u4FD1\u4FDA\u4FD0\u4FE4\u4FE5\u501A\u5028\u5014\u502A\u5025\u5005\u4F1C\u4FF6\u5021\u5029\u502C\u4FFE\u4FEF\u5011\u5006\u5043\u5047\u6703\u5055\u5050\u5048\u505A\u5056\u506C\u5078\u5080\u509A\u5085\u50B4\u50B2"],
["d1a1", "\u50C9\u50CA\u50B3\u50C2\u50D6\u50DE\u50E5\u50ED\u50E3\u50EE\u50F9\u50F5\u5109\u5101\u5102\u5116\u5115\u5114\u511A\u5121\u513A\u5137\u513C\u513B\u513F\u5140\u5152\u514C\u5154\u5162\u7AF8\u5169\u516A\u516E\u5180\u5182\u56D8\u518C\u5189\u518F\u5191\u5193\u5195\u5196\u51A4\u51A6\u51A2\u51A9\u51AA\u51AB\u51B3\u51B1\u51B2\u51B0\u51B5\u51BD\u51C5\u51C9\u51DB\u51E0\u8655\u51E9\u51ED\u51F0\u51F5\u51FE\u5204\u520B\u5214\u520E\u5227\u522A\u522E\u5233\u5239\u524F\u5244\u524B\u524C\u525E\u5254\u526A\u5274\u5269\u5273\u527F\u527D\u528D\u5294\u5292\u5271\u5288\u5291\u8FA8"],
["d2a1", "\u8FA7\u52AC\u52AD\u52BC\u52B5\u52C1\u52CD\u52D7\u52DE\u52E3\u52E6\u98ED\u52E0\u52F3\u52F5\u52F8\u52F9\u5306\u5308\u7538\u530D\u5310\u530F\u5315\u531A\u5323\u532F\u5331\u5333\u5338\u5340\u5346\u5345\u4E17\u5349\u534D\u51D6\u535E\u5369\u536E\u5918\u537B\u5377\u5382\u5396\u53A0\u53A6\u53A5\u53AE\u53B0\u53B6\u53C3\u7C12\u96D9\u53DF\u66FC\u71EE\u53EE\u53E8\u53ED\u53FA\u5401\u543D\u5440\u542C\u542D\u543C\u542E\u5436\u5429\u541D\u544E\u548F\u5475\u548E\u545F\u5471\u5477\u5470\u5492\u547B\u5480\u5476\u5484\u5490\u5486\u54C7\u54A2\u54B8\u54A5\u54AC\u54C4\u54C8\u54A8"],
["d3a1", "\u54AB\u54C2\u54A4\u54BE\u54BC\u54D8\u54E5\u54E6\u550F\u5514\u54FD\u54EE\u54ED\u54FA\u54E2\u5539\u5540\u5563\u554C\u552E\u555C\u5545\u5556\u5557\u5538\u5533\u555D\u5599\u5580\u54AF\u558A\u559F\u557B\u557E\u5598\u559E\u55AE\u557C\u5583\u55A9\u5587\u55A8\u55DA\u55C5\u55DF\u55C4\u55DC\u55E4\u55D4\u5614\u55F7\u5616\u55FE\u55FD\u561B\u55F9\u564E\u5650\u71DF\u5634\u5636\u5632\u5638\u566B\u5664\u562F\u566C\u566A\u5686\u5680\u568A\u56A0\u5694\u568F\u56A5\u56AE\u56B6\u56B4\u56C2\u56BC\u56C1\u56C3\u56C0\u56C8\u56CE\u56D1\u56D3\u56D7\u56EE\u56F9\u5700\u56FF\u5704\u5709"],
["d4a1", "\u5708\u570B\u570D\u5713\u5718\u5716\u55C7\u571C\u5726\u5737\u5738\u574E\u573B\u5740\u574F\u5769\u57C0\u5788\u5761\u577F\u5789\u5793\u57A0\u57B3\u57A4\u57AA\u57B0\u57C3\u57C6\u57D4\u57D2\u57D3\u580A\u57D6\u57E3\u580B\u5819\u581D\u5872\u5821\u5862\u584B\u5870\u6BC0\u5852\u583D\u5879\u5885\u58B9\u589F\u58AB\u58BA\u58DE\u58BB\u58B8\u58AE\u58C5\u58D3\u58D1\u58D7\u58D9\u58D8\u58E5\u58DC\u58E4\u58DF\u58EF\u58FA\u58F9\u58FB\u58FC\u58FD\u5902\u590A\u5910\u591B\u68A6\u5925\u592C\u592D\u5932\u5938\u593E\u7AD2\u5955\u5950\u594E\u595A\u5958\u5962\u5960\u5967\u596C\u5969"],
["d5a1", "\u5978\u5981\u599D\u4F5E\u4FAB\u59A3\u59B2\u59C6\u59E8\u59DC\u598D\u59D9\u59DA\u5A25\u5A1F\u5A11\u5A1C\u5A09\u5A1A\u5A40\u5A6C\u5A49\u5A35\u5A36\u5A62\u5A6A\u5A9A\u5ABC\u5ABE\u5ACB\u5AC2\u5ABD\u5AE3\u5AD7\u5AE6\u5AE9\u5AD6\u5AFA\u5AFB\u5B0C\u5B0B\u5B16\u5B32\u5AD0\u5B2A\u5B36\u5B3E\u5B43\u5B45\u5B40\u5B51\u5B55\u5B5A\u5B5B\u5B65\u5B69\u5B70\u5B73\u5B75\u5B78\u6588\u5B7A\u5B80\u5B83\u5BA6\u5BB8\u5BC3\u5BC7\u5BC9\u5BD4\u5BD0\u5BE4\u5BE6\u5BE2\u5BDE\u5BE5\u5BEB\u5BF0\u5BF6\u5BF3\u5C05\u5C07\u5C08\u5C0D\u5C13\u5C20\u5C22\u5C28\u5C38\u5C39\u5C41\u5C46\u5C4E\u5C53"],
["d6a1", "\u5C50\u5C4F\u5B71\u5C6C\u5C6E\u4E62\u5C76\u5C79\u5C8C\u5C91\u5C94\u599B\u5CAB\u5CBB\u5CB6\u5CBC\u5CB7\u5CC5\u5CBE\u5CC7\u5CD9\u5CE9\u5CFD\u5CFA\u5CED\u5D8C\u5CEA\u5D0B\u5D15\u5D17\u5D5C\u5D1F\u5D1B\u5D11\u5D14\u5D22\u5D1A\u5D19\u5D18\u5D4C\u5D52\u5D4E\u5D4B\u5D6C\u5D73\u5D76\u5D87\u5D84\u5D82\u5DA2\u5D9D\u5DAC\u5DAE\u5DBD\u5D90\u5DB7\u5DBC\u5DC9\u5DCD\u5DD3\u5DD2\u5DD6\u5DDB\u5DEB\u5DF2\u5DF5\u5E0B\u5E1A\u5E19\u5E11\u5E1B\u5E36\u5E37\u5E44\u5E43\u5E40\u5E4E\u5E57\u5E54\u5E5F\u5E62\u5E64\u5E47\u5E75\u5E76\u5E7A\u9EBC\u5E7F\u5EA0\u5EC1\u5EC2\u5EC8\u5ED0\u5ECF"],
["d7a1", "\u5ED6\u5EE3\u5EDD\u5EDA\u5EDB\u5EE2\u5EE1\u5EE8\u5EE9\u5EEC\u5EF1\u5EF3\u5EF0\u5EF4\u5EF8\u5EFE\u5F03\u5F09\u5F5D\u5F5C\u5F0B\u5F11\u5F16\u5F29\u5F2D\u5F38\u5F41\u5F48\u5F4C\u5F4E\u5F2F\u5F51\u5F56\u5F57\u5F59\u5F61\u5F6D\u5F73\u5F77\u5F83\u5F82\u5F7F\u5F8A\u5F88\u5F91\u5F87\u5F9E\u5F99\u5F98\u5FA0\u5FA8\u5FAD\u5FBC\u5FD6\u5FFB\u5FE4\u5FF8\u5FF1\u5FDD\u60B3\u5FFF\u6021\u6060\u6019\u6010\u6029\u600E\u6031\u601B\u6015\u602B\u6026\u600F\u603A\u605A\u6041\u606A\u6077\u605F\u604A\u6046\u604D\u6063\u6043\u6064\u6042\u606C\u606B\u6059\u6081\u608D\u60E7\u6083\u609A"],
["d8a1", "\u6084\u609B\u6096\u6097\u6092\u60A7\u608B\u60E1\u60B8\u60E0\u60D3\u60B4\u5FF0\u60BD\u60C6\u60B5\u60D8\u614D\u6115\u6106\u60F6\u60F7\u6100\u60F4\u60FA\u6103\u6121\u60FB\u60F1\u610D\u610E\u6147\u613E\u6128\u6127\u614A\u613F\u613C\u612C\u6134\u613D\u6142\u6144\u6173\u6177\u6158\u6159\u615A\u616B\u6174\u616F\u6165\u6171\u615F\u615D\u6153\u6175\u6199\u6196\u6187\u61AC\u6194\u619A\u618A\u6191\u61AB\u61AE\u61CC\u61CA\u61C9\u61F7\u61C8\u61C3\u61C6\u61BA\u61CB\u7F79\u61CD\u61E6\u61E3\u61F6\u61FA\u61F4\u61FF\u61FD\u61FC\u61FE\u6200\u6208\u6209\u620D\u620C\u6214\u621B"],
["d9a1", "\u621E\u6221\u622A\u622E\u6230\u6232\u6233\u6241\u624E\u625E\u6263\u625B\u6260\u6268\u627C\u6282\u6289\u627E\u6292\u6293\u6296\u62D4\u6283\u6294\u62D7\u62D1\u62BB\u62CF\u62FF\u62C6\u64D4\u62C8\u62DC\u62CC\u62CA\u62C2\u62C7\u629B\u62C9\u630C\u62EE\u62F1\u6327\u6302\u6308\u62EF\u62F5\u6350\u633E\u634D\u641C\u634F\u6396\u638E\u6380\u63AB\u6376\u63A3\u638F\u6389\u639F\u63B5\u636B\u6369\u63BE\u63E9\u63C0\u63C6\u63E3\u63C9\u63D2\u63F6\u63C4\u6416\u6434\u6406\u6413\u6426\u6436\u651D\u6417\u6428\u640F\u6467\u646F\u6476\u644E\u652A\u6495\u6493\u64A5\u64A9\u6488\u64BC"],
["daa1", "\u64DA\u64D2\u64C5\u64C7\u64BB\u64D8\u64C2\u64F1\u64E7\u8209\u64E0\u64E1\u62AC\u64E3\u64EF\u652C\u64F6\u64F4\u64F2\u64FA\u6500\u64FD\u6518\u651C\u6505\u6524\u6523\u652B\u6534\u6535\u6537\u6536\u6538\u754B\u6548\u6556\u6555\u654D\u6558\u655E\u655D\u6572\u6578\u6582\u6583\u8B8A\u659B\u659F\u65AB\u65B7\u65C3\u65C6\u65C1\u65C4\u65CC\u65D2\u65DB\u65D9\u65E0\u65E1\u65F1\u6772\u660A\u6603\u65FB\u6773\u6635\u6636\u6634\u661C\u664F\u6644\u6649\u6641\u665E\u665D\u6664\u6667\u6668\u665F\u6662\u6670\u6683\u6688\u668E\u6689\u6684\u6698\u669D\u66C1\u66B9\u66C9\u66BE\u66BC"],
["dba1", "\u66C4\u66B8\u66D6\u66DA\u66E0\u663F\u66E6\u66E9\u66F0\u66F5\u66F7\u670F\u6716\u671E\u6726\u6727\u9738\u672E\u673F\u6736\u6741\u6738\u6737\u6746\u675E\u6760\u6759\u6763\u6764\u6789\u6770\u67A9\u677C\u676A\u678C\u678B\u67A6\u67A1\u6785\u67B7\u67EF\u67B4\u67EC\u67B3\u67E9\u67B8\u67E4\u67DE\u67DD\u67E2\u67EE\u67B9\u67CE\u67C6\u67E7\u6A9C\u681E\u6846\u6829\u6840\u684D\u6832\u684E\u68B3\u682B\u6859\u6863\u6877\u687F\u689F\u688F\u68AD\u6894\u689D\u689B\u6883\u6AAE\u68B9\u6874\u68B5\u68A0\u68BA\u690F\u688D\u687E\u6901\u68CA\u6908\u68D8\u6922\u6926\u68E1\u690C\u68CD"],
["dca1", "\u68D4\u68E7\u68D5\u6936\u6912\u6904\u68D7\u68E3\u6925\u68F9\u68E0\u68EF\u6928\u692A\u691A\u6923\u6921\u68C6\u6979\u6977\u695C\u6978\u696B\u6954\u697E\u696E\u6939\u6974\u693D\u6959\u6930\u6961\u695E\u695D\u6981\u696A\u69B2\u69AE\u69D0\u69BF\u69C1\u69D3\u69BE\u69CE\u5BE8\u69CA\u69DD\u69BB\u69C3\u69A7\u6A2E\u6991\u69A0\u699C\u6995\u69B4\u69DE\u69E8\u6A02\u6A1B\u69FF\u6B0A\u69F9\u69F2\u69E7\u6A05\u69B1\u6A1E\u69ED\u6A14\u69EB\u6A0A\u6A12\u6AC1\u6A23\u6A13\u6A44\u6A0C\u6A72\u6A36\u6A78\u6A47\u6A62\u6A59\u6A66\u6A48\u6A38\u6A22\u6A90\u6A8D\u6AA0\u6A84\u6AA2\u6AA3"],
["dda1", "\u6A97\u8617\u6ABB\u6AC3\u6AC2\u6AB8\u6AB3\u6AAC\u6ADE\u6AD1\u6ADF\u6AAA\u6ADA\u6AEA\u6AFB\u6B05\u8616\u6AFA\u6B12\u6B16\u9B31\u6B1F\u6B38\u6B37\u76DC\u6B39\u98EE\u6B47\u6B43\u6B49\u6B50\u6B59\u6B54\u6B5B\u6B5F\u6B61\u6B78\u6B79\u6B7F\u6B80\u6B84\u6B83\u6B8D\u6B98\u6B95\u6B9E\u6BA4\u6BAA\u6BAB\u6BAF\u6BB2\u6BB1\u6BB3\u6BB7\u6BBC\u6BC6\u6BCB\u6BD3\u6BDF\u6BEC\u6BEB\u6BF3\u6BEF\u9EBE\u6C08\u6C13\u6C14\u6C1B\u6C24\u6C23\u6C5E\u6C55\u6C62\u6C6A\u6C82\u6C8D\u6C9A\u6C81\u6C9B\u6C7E\u6C68\u6C73\u6C92\u6C90\u6CC4\u6CF1\u6CD3\u6CBD\u6CD7\u6CC5\u6CDD\u6CAE\u6CB1\u6CBE"],
["dea1", "\u6CBA\u6CDB\u6CEF\u6CD9\u6CEA\u6D1F\u884D\u6D36\u6D2B\u6D3D\u6D38\u6D19\u6D35\u6D33\u6D12\u6D0C\u6D63\u6D93\u6D64\u6D5A\u6D79\u6D59\u6D8E\u6D95\u6FE4\u6D85\u6DF9\u6E15\u6E0A\u6DB5\u6DC7\u6DE6\u6DB8\u6DC6\u6DEC\u6DDE\u6DCC\u6DE8\u6DD2\u6DC5\u6DFA\u6DD9\u6DE4\u6DD5\u6DEA\u6DEE\u6E2D\u6E6E\u6E2E\u6E19\u6E72\u6E5F\u6E3E\u6E23\u6E6B\u6E2B\u6E76\u6E4D\u6E1F\u6E43\u6E3A\u6E4E\u6E24\u6EFF\u6E1D\u6E38\u6E82\u6EAA\u6E98\u6EC9\u6EB7\u6ED3\u6EBD\u6EAF\u6EC4\u6EB2\u6ED4\u6ED5\u6E8F\u6EA5\u6EC2\u6E9F\u6F41\u6F11\u704C\u6EEC\u6EF8\u6EFE\u6F3F\u6EF2\u6F31\u6EEF\u6F32\u6ECC"],
["dfa1", "\u6F3E\u6F13\u6EF7\u6F86\u6F7A\u6F78\u6F81\u6F80\u6F6F\u6F5B\u6FF3\u6F6D\u6F82\u6F7C\u6F58\u6F8E\u6F91\u6FC2\u6F66\u6FB3\u6FA3\u6FA1\u6FA4\u6FB9\u6FC6\u6FAA\u6FDF\u6FD5\u6FEC\u6FD4\u6FD8\u6FF1\u6FEE\u6FDB\u7009\u700B\u6FFA\u7011\u7001\u700F\u6FFE\u701B\u701A\u6F74\u701D\u7018\u701F\u7030\u703E\u7032\u7051\u7063\u7099\u7092\u70AF\u70F1\u70AC\u70B8\u70B3\u70AE\u70DF\u70CB\u70DD\u70D9\u7109\u70FD\u711C\u7119\u7165\u7155\u7188\u7166\u7162\u714C\u7156\u716C\u718F\u71FB\u7184\u7195\u71A8\u71AC\u71D7\u71B9\u71BE\u71D2\u71C9\u71D4\u71CE\u71E0\u71EC\u71E7\u71F5\u71FC"],
["e0a1", "\u71F9\u71FF\u720D\u7210\u721B\u7228\u722D\u722C\u7230\u7232\u723B\u723C\u723F\u7240\u7246\u724B\u7258\u7274\u727E\u7282\u7281\u7287\u7292\u7296\u72A2\u72A7\u72B9\u72B2\u72C3\u72C6\u72C4\u72CE\u72D2\u72E2\u72E0\u72E1\u72F9\u72F7\u500F\u7317\u730A\u731C\u7316\u731D\u7334\u732F\u7329\u7325\u733E\u734E\u734F\u9ED8\u7357\u736A\u7368\u7370\u7378\u7375\u737B\u737A\u73C8\u73B3\u73CE\u73BB\u73C0\u73E5\u73EE\u73DE\u74A2\u7405\u746F\u7425\u73F8\u7432\u743A\u7455\u743F\u745F\u7459\u7441\u745C\u7469\u7470\u7463\u746A\u7476\u747E\u748B\u749E\u74A7\u74CA\u74CF\u74D4\u73F1"],
["e1a1", "\u74E0\u74E3\u74E7\u74E9\u74EE\u74F2\u74F0\u74F1\u74F8\u74F7\u7504\u7503\u7505\u750C\u750E\u750D\u7515\u7513\u751E\u7526\u752C\u753C\u7544\u754D\u754A\u7549\u755B\u7546\u755A\u7569\u7564\u7567\u756B\u756D\u7578\u7576\u7586\u7587\u7574\u758A\u7589\u7582\u7594\u759A\u759D\u75A5\u75A3\u75C2\u75B3\u75C3\u75B5\u75BD\u75B8\u75BC\u75B1\u75CD\u75CA\u75D2\u75D9\u75E3\u75DE\u75FE\u75FF\u75FC\u7601\u75F0\u75FA\u75F2\u75F3\u760B\u760D\u7609\u761F\u7627\u7620\u7621\u7622\u7624\u7634\u7630\u763B\u7647\u7648\u7646\u765C\u7658\u7661\u7662\u7668\u7669\u766A\u7667\u766C\u7670"],
["e2a1", "\u7672\u7676\u7678\u767C\u7680\u7683\u7688\u768B\u768E\u7696\u7693\u7699\u769A\u76B0\u76B4\u76B8\u76B9\u76BA\u76C2\u76CD\u76D6\u76D2\u76DE\u76E1\u76E5\u76E7\u76EA\u862F\u76FB\u7708\u7707\u7704\u7729\u7724\u771E\u7725\u7726\u771B\u7737\u7738\u7747\u775A\u7768\u776B\u775B\u7765\u777F\u777E\u7779\u778E\u778B\u7791\u77A0\u779E\u77B0\u77B6\u77B9\u77BF\u77BC\u77BD\u77BB\u77C7\u77CD\u77D7\u77DA\u77DC\u77E3\u77EE\u77FC\u780C\u7812\u7926\u7820\u792A\u7845\u788E\u7874\u7886\u787C\u789A\u788C\u78A3\u78B5\u78AA\u78AF\u78D1\u78C6\u78CB\u78D4\u78BE\u78BC\u78C5\u78CA\u78EC"],
["e3a1", "\u78E7\u78DA\u78FD\u78F4\u7907\u7912\u7911\u7919\u792C\u792B\u7940\u7960\u7957\u795F\u795A\u7955\u7953\u797A\u797F\u798A\u799D\u79A7\u9F4B\u79AA\u79AE\u79B3\u79B9\u79BA\u79C9\u79D5\u79E7\u79EC\u79E1\u79E3\u7A08\u7A0D\u7A18\u7A19\u7A20\u7A1F\u7980\u7A31\u7A3B\u7A3E\u7A37\u7A43\u7A57\u7A49\u7A61\u7A62\u7A69\u9F9D\u7A70\u7A79\u7A7D\u7A88\u7A97\u7A95\u7A98\u7A96\u7AA9\u7AC8\u7AB0\u7AB6\u7AC5\u7AC4\u7ABF\u9083\u7AC7\u7ACA\u7ACD\u7ACF\u7AD5\u7AD3\u7AD9\u7ADA\u7ADD\u7AE1\u7AE2\u7AE6\u7AED\u7AF0\u7B02\u7B0F\u7B0A\u7B06\u7B33\u7B18\u7B19\u7B1E\u7B35\u7B28\u7B36\u7B50"],
["e4a1", "\u7B7A\u7B04\u7B4D\u7B0B\u7B4C\u7B45\u7B75\u7B65\u7B74\u7B67\u7B70\u7B71\u7B6C\u7B6E\u7B9D\u7B98\u7B9F\u7B8D\u7B9C\u7B9A\u7B8B\u7B92\u7B8F\u7B5D\u7B99\u7BCB\u7BC1\u7BCC\u7BCF\u7BB4\u7BC6\u7BDD\u7BE9\u7C11\u7C14\u7BE6\u7BE5\u7C60\u7C00\u7C07\u7C13\u7BF3\u7BF7\u7C17\u7C0D\u7BF6\u7C23\u7C27\u7C2A\u7C1F\u7C37\u7C2B\u7C3D\u7C4C\u7C43\u7C54\u7C4F\u7C40\u7C50\u7C58\u7C5F\u7C64\u7C56\u7C65\u7C6C\u7C75\u7C83\u7C90\u7CA4\u7CAD\u7CA2\u7CAB\u7CA1\u7CA8\u7CB3\u7CB2\u7CB1\u7CAE\u7CB9\u7CBD\u7CC0\u7CC5\u7CC2\u7CD8\u7CD2\u7CDC\u7CE2\u9B3B\u7CEF\u7CF2\u7CF4\u7CF6\u7CFA\u7D06"],
["e5a1", "\u7D02\u7D1C\u7D15\u7D0A\u7D45\u7D4B\u7D2E\u7D32\u7D3F\u7D35\u7D46\u7D73\u7D56\u7D4E\u7D72\u7D68\u7D6E\u7D4F\u7D63\u7D93\u7D89\u7D5B\u7D8F\u7D7D\u7D9B\u7DBA\u7DAE\u7DA3\u7DB5\u7DC7\u7DBD\u7DAB\u7E3D\u7DA2\u7DAF\u7DDC\u7DB8\u7D9F\u7DB0\u7DD8\u7DDD\u7DE4\u7DDE\u7DFB\u7DF2\u7DE1\u7E05\u7E0A\u7E23\u7E21\u7E12\u7E31\u7E1F\u7E09\u7E0B\u7E22\u7E46\u7E66\u7E3B\u7E35\u7E39\u7E43\u7E37\u7E32\u7E3A\u7E67\u7E5D\u7E56\u7E5E\u7E59\u7E5A\u7E79\u7E6A\u7E69\u7E7C\u7E7B\u7E83\u7DD5\u7E7D\u8FAE\u7E7F\u7E88\u7E89\u7E8C\u7E92\u7E90\u7E93\u7E94\u7E96\u7E8E\u7E9B\u7E9C\u7F38\u7F3A"],
["e6a1", "\u7F45\u7F4C\u7F4D\u7F4E\u7F50\u7F51\u7F55\u7F54\u7F58\u7F5F\u7F60\u7F68\u7F69\u7F67\u7F78\u7F82\u7F86\u7F83\u7F88\u7F87\u7F8C\u7F94\u7F9E\u7F9D\u7F9A\u7FA3\u7FAF\u7FB2\u7FB9\u7FAE\u7FB6\u7FB8\u8B71\u7FC5\u7FC6\u7FCA\u7FD5\u7FD4\u7FE1\u7FE6\u7FE9\u7FF3\u7FF9\u98DC\u8006\u8004\u800B\u8012\u8018\u8019\u801C\u8021\u8028\u803F\u803B\u804A\u8046\u8052\u8058\u805A\u805F\u8062\u8068\u8073\u8072\u8070\u8076\u8079\u807D\u807F\u8084\u8086\u8085\u809B\u8093\u809A\u80AD\u5190\u80AC\u80DB\u80E5\u80D9\u80DD\u80C4\u80DA\u80D6\u8109\u80EF\u80F1\u811B\u8129\u8123\u812F\u814B"],
["e7a1", "\u968B\u8146\u813E\u8153\u8151\u80FC\u8171\u816E\u8165\u8166\u8174\u8183\u8188\u818A\u8180\u8182\u81A0\u8195\u81A4\u81A3\u815F\u8193\u81A9\u81B0\u81B5\u81BE\u81B8\u81BD\u81C0\u81C2\u81BA\u81C9\u81CD\u81D1\u81D9\u81D8\u81C8\u81DA\u81DF\u81E0\u81E7\u81FA\u81FB\u81FE\u8201\u8202\u8205\u8207\u820A\u820D\u8210\u8216\u8229\u822B\u8238\u8233\u8240\u8259\u8258\u825D\u825A\u825F\u8264\u8262\u8268\u826A\u826B\u822E\u8271\u8277\u8278\u827E\u828D\u8292\u82AB\u829F\u82BB\u82AC\u82E1\u82E3\u82DF\u82D2\u82F4\u82F3\u82FA\u8393\u8303\u82FB\u82F9\u82DE\u8306\u82DC\u8309\u82D9"],
["e8a1", "\u8335\u8334\u8316\u8332\u8331\u8340\u8339\u8350\u8345\u832F\u832B\u8317\u8318\u8385\u839A\u83AA\u839F\u83A2\u8396\u8323\u838E\u8387\u838A\u837C\u83B5\u8373\u8375\u83A0\u8389\u83A8\u83F4\u8413\u83EB\u83CE\u83FD\u8403\u83D8\u840B\u83C1\u83F7\u8407\u83E0\u83F2\u840D\u8422\u8420\u83BD\u8438\u8506\u83FB\u846D\u842A\u843C\u855A\u8484\u8477\u846B\u84AD\u846E\u8482\u8469\u8446\u842C\u846F\u8479\u8435\u84CA\u8462\u84B9\u84BF\u849F\u84D9\u84CD\u84BB\u84DA\u84D0\u84C1\u84C6\u84D6\u84A1\u8521\u84FF\u84F4\u8517\u8518\u852C\u851F\u8515\u8514\u84FC\u8540\u8563\u8558\u8548"],
["e9a1", "\u8541\u8602\u854B\u8555\u8580\u85A4\u8588\u8591\u858A\u85A8\u856D\u8594\u859B\u85EA\u8587\u859C\u8577\u857E\u8590\u85C9\u85BA\u85CF\u85B9\u85D0\u85D5\u85DD\u85E5\u85DC\u85F9\u860A\u8613\u860B\u85FE\u85FA\u8606\u8622\u861A\u8630\u863F\u864D\u4E55\u8654\u865F\u8667\u8671\u8693\u86A3\u86A9\u86AA\u868B\u868C\u86B6\u86AF\u86C4\u86C6\u86B0\u86C9\u8823\u86AB\u86D4\u86DE\u86E9\u86EC\u86DF\u86DB\u86EF\u8712\u8706\u8708\u8700\u8703\u86FB\u8711\u8709\u870D\u86F9\u870A\u8734\u873F\u8737\u873B\u8725\u8729\u871A\u8760\u875F\u8778\u874C\u874E\u8774\u8757\u8768\u876E\u8759"],
["eaa1", "\u8753\u8763\u876A\u8805\u87A2\u879F\u8782\u87AF\u87CB\u87BD\u87C0\u87D0\u96D6\u87AB\u87C4\u87B3\u87C7\u87C6\u87BB\u87EF\u87F2\u87E0\u880F\u880D\u87FE\u87F6\u87F7\u880E\u87D2\u8811\u8816\u8815\u8822\u8821\u8831\u8836\u8839\u8827\u883B\u8844\u8842\u8852\u8859\u885E\u8862\u886B\u8881\u887E\u889E\u8875\u887D\u88B5\u8872\u8882\u8897\u8892\u88AE\u8899\u88A2\u888D\u88A4\u88B0\u88BF\u88B1\u88C3\u88C4\u88D4\u88D8\u88D9\u88DD\u88F9\u8902\u88FC\u88F4\u88E8\u88F2\u8904\u890C\u890A\u8913\u8943\u891E\u8925\u892A\u892B\u8941\u8944\u893B\u8936\u8938\u894C\u891D\u8960\u895E"],
["eba1", "\u8966\u8964\u896D\u896A\u896F\u8974\u8977\u897E\u8983\u8988\u898A\u8993\u8998\u89A1\u89A9\u89A6\u89AC\u89AF\u89B2\u89BA\u89BD\u89BF\u89C0\u89DA\u89DC\u89DD\u89E7\u89F4\u89F8\u8A03\u8A16\u8A10\u8A0C\u8A1B\u8A1D\u8A25\u8A36\u8A41\u8A5B\u8A52\u8A46\u8A48\u8A7C\u8A6D\u8A6C\u8A62\u8A85\u8A82\u8A84\u8AA8\u8AA1\u8A91\u8AA5\u8AA6\u8A9A\u8AA3\u8AC4\u8ACD\u8AC2\u8ADA\u8AEB\u8AF3\u8AE7\u8AE4\u8AF1\u8B14\u8AE0\u8AE2\u8AF7\u8ADE\u8ADB\u8B0C\u8B07\u8B1A\u8AE1\u8B16\u8B10\u8B17\u8B20\u8B33\u97AB\u8B26\u8B2B\u8B3E\u8B28\u8B41\u8B4C\u8B4F\u8B4E\u8B49\u8B56\u8B5B\u8B5A\u8B6B"],
["eca1", "\u8B5F\u8B6C\u8B6F\u8B74\u8B7D\u8B80\u8B8C\u8B8E\u8B92\u8B93\u8B96\u8B99\u8B9A\u8C3A\u8C41\u8C3F\u8C48\u8C4C\u8C4E\u8C50\u8C55\u8C62\u8C6C\u8C78\u8C7A\u8C82\u8C89\u8C85\u8C8A\u8C8D\u8C8E\u8C94\u8C7C\u8C98\u621D\u8CAD\u8CAA\u8CBD\u8CB2\u8CB3\u8CAE\u8CB6\u8CC8\u8CC1\u8CE4\u8CE3\u8CDA\u8CFD\u8CFA\u8CFB\u8D04\u8D05\u8D0A\u8D07\u8D0F\u8D0D\u8D10\u9F4E\u8D13\u8CCD\u8D14\u8D16\u8D67\u8D6D\u8D71\u8D73\u8D81\u8D99\u8DC2\u8DBE\u8DBA\u8DCF\u8DDA\u8DD6\u8DCC\u8DDB\u8DCB\u8DEA\u8DEB\u8DDF\u8DE3\u8DFC\u8E08\u8E09\u8DFF\u8E1D\u8E1E\u8E10\u8E1F\u8E42\u8E35\u8E30\u8E34\u8E4A"],
["eda1", "\u8E47\u8E49\u8E4C\u8E50\u8E48\u8E59\u8E64\u8E60\u8E2A\u8E63\u8E55\u8E76\u8E72\u8E7C\u8E81\u8E87\u8E85\u8E84\u8E8B\u8E8A\u8E93\u8E91\u8E94\u8E99\u8EAA\u8EA1\u8EAC\u8EB0\u8EC6\u8EB1\u8EBE\u8EC5\u8EC8\u8ECB\u8EDB\u8EE3\u8EFC\u8EFB\u8EEB\u8EFE\u8F0A\u8F05\u8F15\u8F12\u8F19\u8F13\u8F1C\u8F1F\u8F1B\u8F0C\u8F26\u8F33\u8F3B\u8F39\u8F45\u8F42\u8F3E\u8F4C\u8F49\u8F46\u8F4E\u8F57\u8F5C\u8F62\u8F63\u8F64\u8F9C\u8F9F\u8FA3\u8FAD\u8FAF\u8FB7\u8FDA\u8FE5\u8FE2\u8FEA\u8FEF\u9087\u8FF4\u9005\u8FF9\u8FFA\u9011\u9015\u9021\u900D\u901E\u9016\u900B\u9027\u9036\u9035\u9039\u8FF8"],
["eea1", "\u904F\u9050\u9051\u9052\u900E\u9049\u903E\u9056\u9058\u905E\u9068\u906F\u9076\u96A8\u9072\u9082\u907D\u9081\u9080\u908A\u9089\u908F\u90A8\u90AF\u90B1\u90B5\u90E2\u90E4\u6248\u90DB\u9102\u9112\u9119\u9132\u9130\u914A\u9156\u9158\u9163\u9165\u9169\u9173\u9172\u918B\u9189\u9182\u91A2\u91AB\u91AF\u91AA\u91B5\u91B4\u91BA\u91C0\u91C1\u91C9\u91CB\u91D0\u91D6\u91DF\u91E1\u91DB\u91FC\u91F5\u91F6\u921E\u91FF\u9214\u922C\u9215\u9211\u925E\u9257\u9245\u9249\u9264\u9248\u9295\u923F\u924B\u9250\u929C\u9296\u9293\u929B\u925A\u92CF\u92B9\u92B7\u92E9\u930F\u92FA\u9344\u932E"],
["efa1", "\u9319\u9322\u931A\u9323\u933A\u9335\u933B\u935C\u9360\u937C\u936E\u9356\u93B0\u93AC\u93AD\u9394\u93B9\u93D6\u93D7\u93E8\u93E5\u93D8\u93C3\u93DD\u93D0\u93C8\u93E4\u941A\u9414\u9413\u9403\u9407\u9410\u9436\u942B\u9435\u9421\u943A\u9441\u9452\u9444\u945B\u9460\u9462\u945E\u946A\u9229\u9470\u9475\u9477\u947D\u945A\u947C\u947E\u9481\u947F\u9582\u9587\u958A\u9594\u9596\u9598\u9599\u95A0\u95A8\u95A7\u95AD\u95BC\u95BB\u95B9\u95BE\u95CA\u6FF6\u95C3\u95CD\u95CC\u95D5\u95D4\u95D6\u95DC\u95E1\u95E5\u95E2\u9621\u9628\u962E\u962F\u9642\u964C\u964F\u964B\u9677\u965C\u965E"],
["f0a1", "\u965D\u965F\u9666\u9672\u966C\u968D\u9698\u9695\u9697\u96AA\u96A7\u96B1\u96B2\u96B0\u96B4\u96B6\u96B8\u96B9\u96CE\u96CB\u96C9\u96CD\u894D\u96DC\u970D\u96D5\u96F9\u9704\u9706\u9708\u9713\u970E\u9711\u970F\u9716\u9719\u9724\u972A\u9730\u9739\u973D\u973E\u9744\u9746\u9748\u9742\u9749\u975C\u9760\u9764\u9766\u9768\u52D2\u976B\u9771\u9779\u9785\u977C\u9781\u977A\u9786\u978B\u978F\u9790\u979C\u97A8\u97A6\u97A3\u97B3\u97B4\u97C3\u97C6\u97C8\u97CB\u97DC\u97ED\u9F4F\u97F2\u7ADF\u97F6\u97F5\u980F\u980C\u9838\u9824\u9821\u9837\u983D\u9846\u984F\u984B\u986B\u986F\u9870"],
["f1a1", "\u9871\u9874\u9873\u98AA\u98AF\u98B1\u98B6\u98C4\u98C3\u98C6\u98E9\u98EB\u9903\u9909\u9912\u9914\u9918\u9921\u991D\u991E\u9924\u9920\u992C\u992E\u993D\u993E\u9942\u9949\u9945\u9950\u994B\u9951\u9952\u994C\u9955\u9997\u9998\u99A5\u99AD\u99AE\u99BC\u99DF\u99DB\u99DD\u99D8\u99D1\u99ED\u99EE\u99F1\u99F2\u99FB\u99F8\u9A01\u9A0F\u9A05\u99E2\u9A19\u9A2B\u9A37\u9A45\u9A42\u9A40\u9A43\u9A3E\u9A55\u9A4D\u9A5B\u9A57\u9A5F\u9A62\u9A65\u9A64\u9A69\u9A6B\u9A6A\u9AAD\u9AB0\u9ABC\u9AC0\u9ACF\u9AD1\u9AD3\u9AD4\u9ADE\u9ADF\u9AE2\u9AE3\u9AE6\u9AEF\u9AEB\u9AEE\u9AF4\u9AF1\u9AF7"],
["f2a1", "\u9AFB\u9B06\u9B18\u9B1A\u9B1F\u9B22\u9B23\u9B25\u9B27\u9B28\u9B29\u9B2A\u9B2E\u9B2F\u9B32\u9B44\u9B43\u9B4F\u9B4D\u9B4E\u9B51\u9B58\u9B74\u9B93\u9B83\u9B91\u9B96\u9B97\u9B9F\u9BA0\u9BA8\u9BB4\u9BC0\u9BCA\u9BB9\u9BC6\u9BCF\u9BD1\u9BD2\u9BE3\u9BE2\u9BE4\u9BD4\u9BE1\u9C3A\u9BF2\u9BF1\u9BF0\u9C15\u9C14\u9C09\u9C13\u9C0C\u9C06\u9C08\u9C12\u9C0A\u9C04\u9C2E\u9C1B\u9C25\u9C24\u9C21\u9C30\u9C47\u9C32\u9C46\u9C3E\u9C5A\u9C60\u9C67\u9C76\u9C78\u9CE7\u9CEC\u9CF0\u9D09\u9D08\u9CEB\u9D03\u9D06\u9D2A\u9D26\u9DAF\u9D23\u9D1F\u9D44\u9D15\u9D12\u9D41\u9D3F\u9D3E\u9D46\u9D48"],
["f3a1", "\u9D5D\u9D5E\u9D64\u9D51\u9D50\u9D59\u9D72\u9D89\u9D87\u9DAB\u9D6F\u9D7A\u9D9A\u9DA4\u9DA9\u9DB2\u9DC4\u9DC1\u9DBB\u9DB8\u9DBA\u9DC6\u9DCF\u9DC2\u9DD9\u9DD3\u9DF8\u9DE6\u9DED\u9DEF\u9DFD\u9E1A\u9E1B\u9E1E\u9E75\u9E79\u9E7D\u9E81\u9E88\u9E8B\u9E8C\u9E92\u9E95\u9E91\u9E9D\u9EA5\u9EA9\u9EB8\u9EAA\u9EAD\u9761\u9ECC\u9ECE\u9ECF\u9ED0\u9ED4\u9EDC\u9EDE\u9EDD\u9EE0\u9EE5\u9EE8\u9EEF\u9EF4\u9EF6\u9EF7\u9EF9\u9EFB\u9EFC\u9EFD\u9F07\u9F08\u76B7\u9F15\u9F21\u9F2C\u9F3E\u9F4A\u9F52\u9F54\u9F63\u9F5F\u9F60\u9F61\u9F66\u9F67\u9F6C\u9F6A\u9F77\u9F72\u9F76\u9F95\u9F9C\u9FA0"],
["f4a1", "\u582F\u69C7\u9059\u7464\u51DC\u7199"],
["f9a1", "\u7E8A\u891C\u9348\u9288\u84DC\u4FC9\u70BB\u6631\u68C8\u92F9\u66FB\u5F45\u4E28\u4EE1\u4EFC\u4F00\u4F03\u4F39\u4F56\u4F92\u4F8A\u4F9A\u4F94\u4FCD\u5040\u5022\u4FFF\u501E\u5046\u5070\u5042\u5094\u50F4\u50D8\u514A\u5164\u519D\u51BE\u51EC\u5215\u529C\u52A6\u52C0\u52DB\u5300\u5307\u5324\u5372\u5393\u53B2\u53DD\uFA0E\u549C\u548A\u54A9\u54FF\u5586\u5759\u5765\u57AC\u57C8\u57C7\uFA0F\uFA10\u589E\u58B2\u590B\u5953\u595B\u595D\u5963\u59A4\u59BA\u5B56\u5BC0\u752F\u5BD8\u5BEC\u5C1E\u5CA6\u5CBA\u5CF5\u5D27\u5D53\uFA11\u5D42\u5D6D\u5DB8\u5DB9\u5DD0\u5F21\u5F34\u5F67\u5FB7"],
["faa1", "\u5FDE\u605D\u6085\u608A\u60DE\u60D5\u6120\u60F2\u6111\u6137\u6130\u6198\u6213\u62A6\u63F5\u6460\u649D\u64CE\u654E\u6600\u6615\u663B\u6609\u662E\u661E\u6624\u6665\u6657\u6659\uFA12\u6673\u6699\u66A0\u66B2\u66BF\u66FA\u670E\uF929\u6766\u67BB\u6852\u67C0\u6801\u6844\u68CF\uFA13\u6968\uFA14\u6998\u69E2\u6A30\u6A6B\u6A46\u6A73\u6A7E\u6AE2\u6AE4\u6BD6\u6C3F\u6C5C\u6C86\u6C6F\u6CDA\u6D04\u6D87\u6D6F\u6D96\u6DAC\u6DCF\u6DF8\u6DF2\u6DFC\u6E39\u6E5C\u6E27\u6E3C\u6EBF\u6F88\u6FB5\u6FF5\u7005\u7007\u7028\u7085\u70AB\u710F\u7104\u715C\u7146\u7147\uFA15\u71C1\u71FE\u72B1"],
["fba1", "\u72BE\u7324\uFA16\u7377\u73BD\u73C9\u73D6\u73E3\u73D2\u7407\u73F5\u7426\u742A\u7429\u742E\u7462\u7489\u749F\u7501\u756F\u7682\u769C\u769E\u769B\u76A6\uFA17\u7746\u52AF\u7821\u784E\u7864\u787A\u7930\uFA18\uFA19\uFA1A\u7994\uFA1B\u799B\u7AD1\u7AE7\uFA1C\u7AEB\u7B9E\uFA1D\u7D48\u7D5C\u7DB7\u7DA0\u7DD6\u7E52\u7F47\u7FA1\uFA1E\u8301\u8362\u837F\u83C7\u83F6\u8448\u84B4\u8553\u8559\u856B\uFA1F\u85B0\uFA20\uFA21\u8807\u88F5\u8A12\u8A37\u8A79\u8AA7\u8ABE\u8ADF\uFA22\u8AF6\u8B53\u8B7F\u8CF0\u8CF4\u8D12\u8D76\uFA23\u8ECF\uFA24\uFA25\u9067\u90DE\uFA26\u9115\u9127\u91DA"],
["fca1", "\u91D7\u91DE\u91ED\u91EE\u91E4\u91E5\u9206\u9210\u920A\u923A\u9240\u923C\u924E\u9259\u9251\u9239\u9267\u92A7\u9277\u9278\u92E7\u92D7\u92D9\u92D0\uFA27\u92D5\u92E0\u92D3\u9325\u9321\u92FB\uFA28\u931E\u92FF\u931D\u9302\u9370\u9357\u93A4\u93C6\u93DE\u93F8\u9431\u9445\u9448\u9592\uF9DC\uFA29\u969D\u96AF\u9733\u973B\u9743\u974D\u974F\u9751\u9755\u9857\u9865\uFA2A\uFA2B\u9927\uFA2C\u999E\u9A4E\u9AD9\u9ADC\u9B75\u9B72\u9B8F\u9BB1\u9BBB\u9C00\u9D70\u9D6B\uFA2D\u9E19\u9ED1"],
["fcf1", "\u2170", 9, "\uFFE2\uFFE4\uFF07\uFF02"],
["8fa2af", "\u02D8\u02C7\xB8\u02D9\u02DD\xAF\u02DB\u02DA\uFF5E\u0384\u0385"],
["8fa2c2", "\xA1\xA6\xBF"],
["8fa2eb", "\xBA\xAA\xA9\xAE\u2122\xA4\u2116"],
["8fa6e1", "\u0386\u0388\u0389\u038A\u03AA"],
["8fa6e7", "\u038C"],
["8fa6e9", "\u038E\u03AB"],
["8fa6ec", "\u038F"],
["8fa6f1", "\u03AC\u03AD\u03AE\u03AF\u03CA\u0390\u03CC\u03C2\u03CD\u03CB\u03B0\u03CE"],
["8fa7c2", "\u0402", 10, "\u040E\u040F"],
["8fa7f2", "\u0452", 10, "\u045E\u045F"],
["8fa9a1", "\xC6\u0110"],
["8fa9a4", "\u0126"],
["8fa9a6", "\u0132"],
["8fa9a8", "\u0141\u013F"],
["8fa9ab", "\u014A\xD8\u0152"],
["8fa9af", "\u0166\xDE"],
["8fa9c1", "\xE6\u0111\xF0\u0127\u0131\u0133\u0138\u0142\u0140\u0149\u014B\xF8\u0153\xDF\u0167\xFE"],
["8faaa1", "\xC1\xC0\xC4\xC2\u0102\u01CD\u0100\u0104\xC5\xC3\u0106\u0108\u010C\xC7\u010A\u010E\xC9\xC8\xCB\xCA\u011A\u0116\u0112\u0118"],
["8faaba", "\u011C\u011E\u0122\u0120\u0124\xCD\xCC\xCF\xCE\u01CF\u0130\u012A\u012E\u0128\u0134\u0136\u0139\u013D\u013B\u0143\u0147\u0145\xD1\xD3\xD2\xD6\xD4\u01D1\u0150\u014C\xD5\u0154\u0158\u0156\u015A\u015C\u0160\u015E\u0164\u0162\xDA\xD9\xDC\xDB\u016C\u01D3\u0170\u016A\u0172\u016E\u0168\u01D7\u01DB\u01D9\u01D5\u0174\xDD\u0178\u0176\u0179\u017D\u017B"],
["8faba1", "\xE1\xE0\xE4\xE2\u0103\u01CE\u0101\u0105\xE5\xE3\u0107\u0109\u010D\xE7\u010B\u010F\xE9\xE8\xEB\xEA\u011B\u0117\u0113\u0119\u01F5\u011D\u011F"],
["8fabbd", "\u0121\u0125\xED\xEC\xEF\xEE\u01D0"],
["8fabc5", "\u012B\u012F\u0129\u0135\u0137\u013A\u013E\u013C\u0144\u0148\u0146\xF1\xF3\xF2\xF6\xF4\u01D2\u0151\u014D\xF5\u0155\u0159\u0157\u015B\u015D\u0161\u015F\u0165\u0163\xFA\xF9\xFC\xFB\u016D\u01D4\u0171\u016B\u0173\u016F\u0169\u01D8\u01DC\u01DA\u01D6\u0175\xFD\xFF\u0177\u017A\u017E\u017C"],
["8fb0a1", "\u4E02\u4E04\u4E05\u4E0C\u4E12\u4E1F\u4E23\u4E24\u4E28\u4E2B\u4E2E\u4E2F\u4E30\u4E35\u4E40\u4E41\u4E44\u4E47\u4E51\u4E5A\u4E5C\u4E63\u4E68\u4E69\u4E74\u4E75\u4E79\u4E7F\u4E8D\u4E96\u4E97\u4E9D\u4EAF\u4EB9\u4EC3\u4ED0\u4EDA\u4EDB\u4EE0\u4EE1\u4EE2\u4EE8\u4EEF\u4EF1\u4EF3\u4EF5\u4EFD\u4EFE\u4EFF\u4F00\u4F02\u4F03\u4F08\u4F0B\u4F0C\u4F12\u4F15\u4F16\u4F17\u4F19\u4F2E\u4F31\u4F60\u4F33\u4F35\u4F37\u4F39\u4F3B\u4F3E\u4F40\u4F42\u4F48\u4F49\u4F4B\u4F4C\u4F52\u4F54\u4F56\u4F58\u4F5F\u4F63\u4F6A\u4F6C\u4F6E\u4F71\u4F77\u4F78\u4F79\u4F7A\u4F7D\u4F7E\u4F81\u4F82\u4F84"],
["8fb1a1", "\u4F85\u4F89\u4F8A\u4F8C\u4F8E\u4F90\u4F92\u4F93\u4F94\u4F97\u4F99\u4F9A\u4F9E\u4F9F\u4FB2\u4FB7\u4FB9\u4FBB\u4FBC\u4FBD\u4FBE\u4FC0\u4FC1\u4FC5\u4FC6\u4FC8\u4FC9\u4FCB\u4FCC\u4FCD\u4FCF\u4FD2\u4FDC\u4FE0\u4FE2\u4FF0\u4FF2\u4FFC\u4FFD\u4FFF\u5000\u5001\u5004\u5007\u500A\u500C\u500E\u5010\u5013\u5017\u5018\u501B\u501C\u501D\u501E\u5022\u5027\u502E\u5030\u5032\u5033\u5035\u5040\u5041\u5042\u5045\u5046\u504A\u504C\u504E\u5051\u5052\u5053\u5057\u5059\u505F\u5060\u5062\u5063\u5066\u5067\u506A\u506D\u5070\u5071\u503B\u5081\u5083\u5084\u5086\u508A\u508E\u508F\u5090"],
["8fb2a1", "\u5092\u5093\u5094\u5096\u509B\u509C\u509E", 4, "\u50AA\u50AF\u50B0\u50B9\u50BA\u50BD\u50C0\u50C3\u50C4\u50C7\u50CC\u50CE\u50D0\u50D3\u50D4\u50D8\u50DC\u50DD\u50DF\u50E2\u50E4\u50E6\u50E8\u50E9\u50EF\u50F1\u50F6\u50FA\u50FE\u5103\u5106\u5107\u5108\u510B\u510C\u510D\u510E\u50F2\u5110\u5117\u5119\u511B\u511C\u511D\u511E\u5123\u5127\u5128\u512C\u512D\u512F\u5131\u5133\u5134\u5135\u5138\u5139\u5142\u514A\u514F\u5153\u5155\u5157\u5158\u515F\u5164\u5166\u517E\u5183\u5184\u518B\u518E\u5198\u519D\u51A1\u51A3\u51AD\u51B8\u51BA\u51BC\u51BE\u51BF\u51C2"],
["8fb3a1", "\u51C8\u51CF\u51D1\u51D2\u51D3\u51D5\u51D8\u51DE\u51E2\u51E5\u51EE\u51F2\u51F3\u51F4\u51F7\u5201\u5202\u5205\u5212\u5213\u5215\u5216\u5218\u5222\u5228\u5231\u5232\u5235\u523C\u5245\u5249\u5255\u5257\u5258\u525A\u525C\u525F\u5260\u5261\u5266\u526E\u5277\u5278\u5279\u5280\u5282\u5285\u528A\u528C\u5293\u5295\u5296\u5297\u5298\u529A\u529C\u52A4\u52A5\u52A6\u52A7\u52AF\u52B0\u52B6\u52B7\u52B8\u52BA\u52BB\u52BD\u52C0\u52C4\u52C6\u52C8\u52CC\u52CF\u52D1\u52D4\u52D6\u52DB\u52DC\u52E1\u52E5\u52E8\u52E9\u52EA\u52EC\u52F0\u52F1\u52F4\u52F6\u52F7\u5300\u5303\u530A\u530B"],
["8fb4a1", "\u530C\u5311\u5313\u5318\u531B\u531C\u531E\u531F\u5325\u5327\u5328\u5329\u532B\u532C\u532D\u5330\u5332\u5335\u533C\u533D\u533E\u5342\u534C\u534B\u5359\u535B\u5361\u5363\u5365\u536C\u536D\u5372\u5379\u537E\u5383\u5387\u5388\u538E\u5393\u5394\u5399\u539D\u53A1\u53A4\u53AA\u53AB\u53AF\u53B2\u53B4\u53B5\u53B7\u53B8\u53BA\u53BD\u53C0\u53C5\u53CF\u53D2\u53D3\u53D5\u53DA\u53DD\u53DE\u53E0\u53E6\u53E7\u53F5\u5402\u5413\u541A\u5421\u5427\u5428\u542A\u542F\u5431\u5434\u5435\u5443\u5444\u5447\u544D\u544F\u545E\u5462\u5464\u5466\u5467\u5469\u546B\u546D\u546E\u5474\u547F"],
["8fb5a1", "\u5481\u5483\u5485\u5488\u5489\u548D\u5491\u5495\u5496\u549C\u549F\u54A1\u54A6\u54A7\u54A9\u54AA\u54AD\u54AE\u54B1\u54B7\u54B9\u54BA\u54BB\u54BF\u54C6\u54CA\u54CD\u54CE\u54E0\u54EA\u54EC\u54EF\u54F6\u54FC\u54FE\u54FF\u5500\u5501\u5505\u5508\u5509\u550C\u550D\u550E\u5515\u552A\u552B\u5532\u5535\u5536\u553B\u553C\u553D\u5541\u5547\u5549\u554A\u554D\u5550\u5551\u5558\u555A\u555B\u555E\u5560\u5561\u5564\u5566\u557F\u5581\u5582\u5586\u5588\u558E\u558F\u5591\u5592\u5593\u5594\u5597\u55A3\u55A4\u55AD\u55B2\u55BF\u55C1\u55C3\u55C6\u55C9\u55CB\u55CC\u55CE\u55D1\u55D2"],
["8fb6a1", "\u55D3\u55D7\u55D8\u55DB\u55DE\u55E2\u55E9\u55F6\u55FF\u5605\u5608\u560A\u560D", 5, "\u5619\u562C\u5630\u5633\u5635\u5637\u5639\u563B\u563C\u563D\u563F\u5640\u5641\u5643\u5644\u5646\u5649\u564B\u564D\u564F\u5654\u565E\u5660\u5661\u5662\u5663\u5666\u5669\u566D\u566F\u5671\u5672\u5675\u5684\u5685\u5688\u568B\u568C\u5695\u5699\u569A\u569D\u569E\u569F\u56A6\u56A7\u56A8\u56A9\u56AB\u56AC\u56AD\u56B1\u56B3\u56B7\u56BE\u56C5\u56C9\u56CA\u56CB\u56CF\u56D0\u56CC\u56CD\u56D9\u56DC\u56DD\u56DF\u56E1\u56E4", 4, "\u56F1\u56EB\u56ED"],
["8fb7a1", "\u56F6\u56F7\u5701\u5702\u5707\u570A\u570C\u5711\u5715\u571A\u571B\u571D\u5720\u5722\u5723\u5724\u5725\u5729\u572A\u572C\u572E\u572F\u5733\u5734\u573D\u573E\u573F\u5745\u5746\u574C\u574D\u5752\u5762\u5765\u5767\u5768\u576B\u576D", 4, "\u5773\u5774\u5775\u5777\u5779\u577A\u577B\u577C\u577E\u5781\u5783\u578C\u5794\u5797\u5799\u579A\u579C\u579D\u579E\u579F\u57A1\u5795\u57A7\u57A8\u57A9\u57AC\u57B8\u57BD\u57C7\u57C8\u57CC\u57CF\u57D5\u57DD\u57DE\u57E4\u57E6\u57E7\u57E9\u57ED\u57F0\u57F5\u57F6\u57F8\u57FD\u57FE\u57FF\u5803\u5804\u5808\u5809\u57E1"],
["8fb8a1", "\u580C\u580D\u581B\u581E\u581F\u5820\u5826\u5827\u582D\u5832\u5839\u583F\u5849\u584C\u584D\u584F\u5850\u5855\u585F\u5861\u5864\u5867\u5868\u5878\u587C\u587F\u5880\u5881\u5887\u5888\u5889\u588A\u588C\u588D\u588F\u5890\u5894\u5896\u589D\u58A0\u58A1\u58A2\u58A6\u58A9\u58B1\u58B2\u58C4\u58BC\u58C2\u58C8\u58CD\u58CE\u58D0\u58D2\u58D4\u58D6\u58DA\u58DD\u58E1\u58E2\u58E9\u58F3\u5905\u5906\u590B\u590C\u5912\u5913\u5914\u8641\u591D\u5921\u5923\u5924\u5928\u592F\u5930\u5933\u5935\u5936\u593F\u5943\u5946\u5952\u5953\u5959\u595B\u595D\u595E\u595F\u5961\u5963\u596B\u596D"],
["8fb9a1", "\u596F\u5972\u5975\u5976\u5979\u597B\u597C\u598B\u598C\u598E\u5992\u5995\u5997\u599F\u59A4\u59A7\u59AD\u59AE\u59AF\u59B0\u59B3\u59B7\u59BA\u59BC\u59C1\u59C3\u59C4\u59C8\u59CA\u59CD\u59D2\u59DD\u59DE\u59DF\u59E3\u59E4\u59E7\u59EE\u59EF\u59F1\u59F2\u59F4\u59F7\u5A00\u5A04\u5A0C\u5A0D\u5A0E\u5A12\u5A13\u5A1E\u5A23\u5A24\u5A27\u5A28\u5A2A\u5A2D\u5A30\u5A44\u5A45\u5A47\u5A48\u5A4C\u5A50\u5A55\u5A5E\u5A63\u5A65\u5A67\u5A6D\u5A77\u5A7A\u5A7B\u5A7E\u5A8B\u5A90\u5A93\u5A96\u5A99\u5A9C\u5A9E\u5A9F\u5AA0\u5AA2\u5AA7\u5AAC\u5AB1\u5AB2\u5AB3\u5AB5\u5AB8\u5ABA\u5ABB\u5ABF"],
["8fbaa1", "\u5AC4\u5AC6\u5AC8\u5ACF\u5ADA\u5ADC\u5AE0\u5AE5\u5AEA\u5AEE\u5AF5\u5AF6\u5AFD\u5B00\u5B01\u5B08\u5B17\u5B34\u5B19\u5B1B\u5B1D\u5B21\u5B25\u5B2D\u5B38\u5B41\u5B4B\u5B4C\u5B52\u5B56\u5B5E\u5B68\u5B6E\u5B6F\u5B7C\u5B7D\u5B7E\u5B7F\u5B81\u5B84\u5B86\u5B8A\u5B8E\u5B90\u5B91\u5B93\u5B94\u5B96\u5BA8\u5BA9\u5BAC\u5BAD\u5BAF\u5BB1\u5BB2\u5BB7\u5BBA\u5BBC\u5BC0\u5BC1\u5BCD\u5BCF\u5BD6", 4, "\u5BE0\u5BEF\u5BF1\u5BF4\u5BFD\u5C0C\u5C17\u5C1E\u5C1F\u5C23\u5C26\u5C29\u5C2B\u5C2C\u5C2E\u5C30\u5C32\u5C35\u5C36\u5C59\u5C5A\u5C5C\u5C62\u5C63\u5C67\u5C68\u5C69"],
["8fbba1", "\u5C6D\u5C70\u5C74\u5C75\u5C7A\u5C7B\u5C7C\u5C7D\u5C87\u5C88\u5C8A\u5C8F\u5C92\u5C9D\u5C9F\u5CA0\u5CA2\u5CA3\u5CA6\u5CAA\u5CB2\u5CB4\u5CB5\u5CBA\u5CC9\u5CCB\u5CD2\u5CDD\u5CD7\u5CEE\u5CF1\u5CF2\u5CF4\u5D01\u5D06\u5D0D\u5D12\u5D2B\u5D23\u5D24\u5D26\u5D27\u5D31\u5D34\u5D39\u5D3D\u5D3F\u5D42\u5D43\u5D46\u5D48\u5D55\u5D51\u5D59\u5D4A\u5D5F\u5D60\u5D61\u5D62\u5D64\u5D6A\u5D6D\u5D70\u5D79\u5D7A\u5D7E\u5D7F\u5D81\u5D83\u5D88\u5D8A\u5D92\u5D93\u5D94\u5D95\u5D99\u5D9B\u5D9F\u5DA0\u5DA7\u5DAB\u5DB0\u5DB4\u5DB8\u5DB9\u5DC3\u5DC7\u5DCB\u5DD0\u5DCE\u5DD8\u5DD9\u5DE0\u5DE4"],
["8fbca1", "\u5DE9\u5DF8\u5DF9\u5E00\u5E07\u5E0D\u5E12\u5E14\u5E15\u5E18\u5E1F\u5E20\u5E2E\u5E28\u5E32\u5E35\u5E3E\u5E4B\u5E50\u5E49\u5E51\u5E56\u5E58\u5E5B\u5E5C\u5E5E\u5E68\u5E6A", 4, "\u5E70\u5E80\u5E8B\u5E8E\u5EA2\u5EA4\u5EA5\u5EA8\u5EAA\u5EAC\u5EB1\u5EB3\u5EBD\u5EBE\u5EBF\u5EC6\u5ECC\u5ECB\u5ECE\u5ED1\u5ED2\u5ED4\u5ED5\u5EDC\u5EDE\u5EE5\u5EEB\u5F02\u5F06\u5F07\u5F08\u5F0E\u5F19\u5F1C\u5F1D\u5F21\u5F22\u5F23\u5F24\u5F28\u5F2B\u5F2C\u5F2E\u5F30\u5F34\u5F36\u5F3B\u5F3D\u5F3F\u5F40\u5F44\u5F45\u5F47\u5F4D\u5F50\u5F54\u5F58\u5F5B\u5F60\u5F63\u5F64\u5F67"],
["8fbda1", "\u5F6F\u5F72\u5F74\u5F75\u5F78\u5F7A\u5F7D\u5F7E\u5F89\u5F8D\u5F8F\u5F96\u5F9C\u5F9D\u5FA2\u5FA7\u5FAB\u5FA4\u5FAC\u5FAF\u5FB0\u5FB1\u5FB8\u5FC4\u5FC7\u5FC8\u5FC9\u5FCB\u5FD0", 4, "\u5FDE\u5FE1\u5FE2\u5FE8\u5FE9\u5FEA\u5FEC\u5FED\u5FEE\u5FEF\u5FF2\u5FF3\u5FF6\u5FFA\u5FFC\u6007\u600A\u600D\u6013\u6014\u6017\u6018\u601A\u601F\u6024\u602D\u6033\u6035\u6040\u6047\u6048\u6049\u604C\u6051\u6054\u6056\u6057\u605D\u6061\u6067\u6071\u607E\u607F\u6082\u6086\u6088\u608A\u608E\u6091\u6093\u6095\u6098\u609D\u609E\u60A2\u60A4\u60A5\u60A8\u60B0\u60B1\u60B7"],
["8fbea1", "\u60BB\u60BE\u60C2\u60C4\u60C8\u60C9\u60CA\u60CB\u60CE\u60CF\u60D4\u60D5\u60D9\u60DB\u60DD\u60DE\u60E2\u60E5\u60F2\u60F5\u60F8\u60FC\u60FD\u6102\u6107\u610A\u610C\u6110", 4, "\u6116\u6117\u6119\u611C\u611E\u6122\u612A\u612B\u6130\u6131\u6135\u6136\u6137\u6139\u6141\u6145\u6146\u6149\u615E\u6160\u616C\u6172\u6178\u617B\u617C\u617F\u6180\u6181\u6183\u6184\u618B\u618D\u6192\u6193\u6197\u6198\u619C\u619D\u619F\u61A0\u61A5\u61A8\u61AA\u61AD\u61B8\u61B9\u61BC\u61C0\u61C1\u61C2\u61CE\u61CF\u61D5\u61DC\u61DD\u61DE\u61DF\u61E1\u61E2\u61E7\u61E9\u61E5"],
["8fbfa1", "\u61EC\u61ED\u61EF\u6201\u6203\u6204\u6207\u6213\u6215\u621C\u6220\u6222\u6223\u6227\u6229\u622B\u6239\u623D\u6242\u6243\u6244\u6246\u624C\u6250\u6251\u6252\u6254\u6256\u625A\u625C\u6264\u626D\u626F\u6273\u627A\u627D\u628D\u628E\u628F\u6290\u62A6\u62A8\u62B3\u62B6\u62B7\u62BA\u62BE\u62BF\u62C4\u62CE\u62D5\u62D6\u62DA\u62EA\u62F2\u62F4\u62FC\u62FD\u6303\u6304\u630A\u630B\u630D\u6310\u6313\u6316\u6318\u6329\u632A\u632D\u6335\u6336\u6339\u633C\u6341\u6342\u6343\u6344\u6346\u634A\u634B\u634E\u6352\u6353\u6354\u6358\u635B\u6365\u6366\u636C\u636D\u6371\u6374\u6375"],
["8fc0a1", "\u6378\u637C\u637D\u637F\u6382\u6384\u6387\u638A\u6390\u6394\u6395\u6399\u639A\u639E\u63A4\u63A6\u63AD\u63AE\u63AF\u63BD\u63C1\u63C5\u63C8\u63CE\u63D1\u63D3\u63D4\u63D5\u63DC\u63E0\u63E5\u63EA\u63EC\u63F2\u63F3\u63F5\u63F8\u63F9\u6409\u640A\u6410\u6412\u6414\u6418\u641E\u6420\u6422\u6424\u6425\u6429\u642A\u642F\u6430\u6435\u643D\u643F\u644B\u644F\u6451\u6452\u6453\u6454\u645A\u645B\u645C\u645D\u645F\u6460\u6461\u6463\u646D\u6473\u6474\u647B\u647D\u6485\u6487\u648F\u6490\u6491\u6498\u6499\u649B\u649D\u649F\u64A1\u64A3\u64A6\u64A8\u64AC\u64B3\u64BD\u64BE\u64BF"],
["8fc1a1", "\u64C4\u64C9\u64CA\u64CB\u64CC\u64CE\u64D0\u64D1\u64D5\u64D7\u64E4\u64E5\u64E9\u64EA\u64ED\u64F0\u64F5\u64F7\u64FB\u64FF\u6501\u6504\u6508\u6509\u650A\u650F\u6513\u6514\u6516\u6519\u651B\u651E\u651F\u6522\u6526\u6529\u652E\u6531\u653A\u653C\u653D\u6543\u6547\u6549\u6550\u6552\u6554\u655F\u6560\u6567\u656B\u657A\u657D\u6581\u6585\u658A\u6592\u6595\u6598\u659D\u65A0\u65A3\u65A6\u65AE\u65B2\u65B3\u65B4\u65BF\u65C2\u65C8\u65C9\u65CE\u65D0\u65D4\u65D6\u65D8\u65DF\u65F0\u65F2\u65F4\u65F5\u65F9\u65FE\u65FF\u6600\u6604\u6608\u6609\u660D\u6611\u6612\u6615\u6616\u661D"],
["8fc2a1", "\u661E\u6621\u6622\u6623\u6624\u6626\u6629\u662A\u662B\u662C\u662E\u6630\u6631\u6633\u6639\u6637\u6640\u6645\u6646\u664A\u664C\u6651\u664E\u6657\u6658\u6659\u665B\u665C\u6660\u6661\u66FB\u666A\u666B\u666C\u667E\u6673\u6675\u667F\u6677\u6678\u6679\u667B\u6680\u667C\u668B\u668C\u668D\u6690\u6692\u6699\u669A\u669B\u669C\u669F\u66A0\u66A4\u66AD\u66B1\u66B2\u66B5\u66BB\u66BF\u66C0\u66C2\u66C3\u66C8\u66CC\u66CE\u66CF\u66D4\u66DB\u66DF\u66E8\u66EB\u66EC\u66EE\u66FA\u6705\u6707\u670E\u6713\u6719\u671C\u6720\u6722\u6733\u673E\u6745\u6747\u6748\u674C\u6754\u6755\u675D"],
["8fc3a1", "\u6766\u676C\u676E\u6774\u6776\u677B\u6781\u6784\u678E\u678F\u6791\u6793\u6796\u6798\u6799\u679B\u67B0\u67B1\u67B2\u67B5\u67BB\u67BC\u67BD\u67F9\u67C0\u67C2\u67C3\u67C5\u67C8\u67C9\u67D2\u67D7\u67D9\u67DC\u67E1\u67E6\u67F0\u67F2\u67F6\u67F7\u6852\u6814\u6819\u681D\u681F\u6828\u6827\u682C\u682D\u682F\u6830\u6831\u6833\u683B\u683F\u6844\u6845\u684A\u684C\u6855\u6857\u6858\u685B\u686B\u686E", 4, "\u6875\u6879\u687A\u687B\u687C\u6882\u6884\u6886\u6888\u6896\u6898\u689A\u689C\u68A1\u68A3\u68A5\u68A9\u68AA\u68AE\u68B2\u68BB\u68C5\u68C8\u68CC\u68CF"],
["8fc4a1", "\u68D0\u68D1\u68D3\u68D6\u68D9\u68DC\u68DD\u68E5\u68E8\u68EA\u68EB\u68EC\u68ED\u68F0\u68F1\u68F5\u68F6\u68FB\u68FC\u68FD\u6906\u6909\u690A\u6910\u6911\u6913\u6916\u6917\u6931\u6933\u6935\u6938\u693B\u6942\u6945\u6949\u694E\u6957\u695B\u6963\u6964\u6965\u6966\u6968\u6969\u696C\u6970\u6971\u6972\u697A\u697B\u697F\u6980\u698D\u6992\u6996\u6998\u69A1\u69A5\u69A6\u69A8\u69AB\u69AD\u69AF\u69B7\u69B8\u69BA\u69BC\u69C5\u69C8\u69D1\u69D6\u69D7\u69E2\u69E5\u69EE\u69EF\u69F1\u69F3\u69F5\u69FE\u6A00\u6A01\u6A03\u6A0F\u6A11\u6A15\u6A1A\u6A1D\u6A20\u6A24\u6A28\u6A30\u6A32"],
["8fc5a1", "\u6A34\u6A37\u6A3B\u6A3E\u6A3F\u6A45\u6A46\u6A49\u6A4A\u6A4E\u6A50\u6A51\u6A52\u6A55\u6A56\u6A5B\u6A64\u6A67\u6A6A\u6A71\u6A73\u6A7E\u6A81\u6A83\u6A86\u6A87\u6A89\u6A8B\u6A91\u6A9B\u6A9D\u6A9E\u6A9F\u6AA5\u6AAB\u6AAF\u6AB0\u6AB1\u6AB4\u6ABD\u6ABE\u6ABF\u6AC6\u6AC9\u6AC8\u6ACC\u6AD0\u6AD4\u6AD5\u6AD6\u6ADC\u6ADD\u6AE4\u6AE7\u6AEC\u6AF0\u6AF1\u6AF2\u6AFC\u6AFD\u6B02\u6B03\u6B06\u6B07\u6B09\u6B0F\u6B10\u6B11\u6B17\u6B1B\u6B1E\u6B24\u6B28\u6B2B\u6B2C\u6B2F\u6B35\u6B36\u6B3B\u6B3F\u6B46\u6B4A\u6B4D\u6B52\u6B56\u6B58\u6B5D\u6B60\u6B67\u6B6B\u6B6E\u6B70\u6B75\u6B7D"],
["8fc6a1", "\u6B7E\u6B82\u6B85\u6B97\u6B9B\u6B9F\u6BA0\u6BA2\u6BA3\u6BA8\u6BA9\u6BAC\u6BAD\u6BAE\u6BB0\u6BB8\u6BB9\u6BBD\u6BBE\u6BC3\u6BC4\u6BC9\u6BCC\u6BD6\u6BDA\u6BE1\u6BE3\u6BE6\u6BE7\u6BEE\u6BF1\u6BF7\u6BF9\u6BFF\u6C02\u6C04\u6C05\u6C09\u6C0D\u6C0E\u6C10\u6C12\u6C19\u6C1F\u6C26\u6C27\u6C28\u6C2C\u6C2E\u6C33\u6C35\u6C36\u6C3A\u6C3B\u6C3F\u6C4A\u6C4B\u6C4D\u6C4F\u6C52\u6C54\u6C59\u6C5B\u6C5C\u6C6B\u6C6D\u6C6F\u6C74\u6C76\u6C78\u6C79\u6C7B\u6C85\u6C86\u6C87\u6C89\u6C94\u6C95\u6C97\u6C98\u6C9C\u6C9F\u6CB0\u6CB2\u6CB4\u6CC2\u6CC6\u6CCD\u6CCF\u6CD0\u6CD1\u6CD2\u6CD4\u6CD6"],
["8fc7a1", "\u6CDA\u6CDC\u6CE0\u6CE7\u6CE9\u6CEB\u6CEC\u6CEE\u6CF2\u6CF4\u6D04\u6D07\u6D0A\u6D0E\u6D0F\u6D11\u6D13\u6D1A\u6D26\u6D27\u6D28\u6C67\u6D2E\u6D2F\u6D31\u6D39\u6D3C\u6D3F\u6D57\u6D5E\u6D5F\u6D61\u6D65\u6D67\u6D6F\u6D70\u6D7C\u6D82\u6D87\u6D91\u6D92\u6D94\u6D96\u6D97\u6D98\u6DAA\u6DAC\u6DB4\u6DB7\u6DB9\u6DBD\u6DBF\u6DC4\u6DC8\u6DCA\u6DCE\u6DCF\u6DD6\u6DDB\u6DDD\u6DDF\u6DE0\u6DE2\u6DE5\u6DE9\u6DEF\u6DF0\u6DF4\u6DF6\u6DFC\u6E00\u6E04\u6E1E\u6E22\u6E27\u6E32\u6E36\u6E39\u6E3B\u6E3C\u6E44\u6E45\u6E48\u6E49\u6E4B\u6E4F\u6E51\u6E52\u6E53\u6E54\u6E57\u6E5C\u6E5D\u6E5E"],
["8fc8a1", "\u6E62\u6E63\u6E68\u6E73\u6E7B\u6E7D\u6E8D\u6E93\u6E99\u6EA0\u6EA7\u6EAD\u6EAE\u6EB1\u6EB3\u6EBB\u6EBF\u6EC0\u6EC1\u6EC3\u6EC7\u6EC8\u6ECA\u6ECD\u6ECE\u6ECF\u6EEB\u6EED\u6EEE\u6EF9\u6EFB\u6EFD\u6F04\u6F08\u6F0A\u6F0C\u6F0D\u6F16\u6F18\u6F1A\u6F1B\u6F26\u6F29\u6F2A\u6F2F\u6F30\u6F33\u6F36\u6F3B\u6F3C\u6F2D\u6F4F\u6F51\u6F52\u6F53\u6F57\u6F59\u6F5A\u6F5D\u6F5E\u6F61\u6F62\u6F68\u6F6C\u6F7D\u6F7E\u6F83\u6F87\u6F88\u6F8B\u6F8C\u6F8D\u6F90\u6F92\u6F93\u6F94\u6F96\u6F9A\u6F9F\u6FA0\u6FA5\u6FA6\u6FA7\u6FA8\u6FAE\u6FAF\u6FB0\u6FB5\u6FB6\u6FBC\u6FC5\u6FC7\u6FC8\u6FCA"],
["8fc9a1", "\u6FDA\u6FDE\u6FE8\u6FE9\u6FF0\u6FF5\u6FF9\u6FFC\u6FFD\u7000\u7005\u7006\u7007\u700D\u7017\u7020\u7023\u702F\u7034\u7037\u7039\u703C\u7043\u7044\u7048\u7049\u704A\u704B\u7054\u7055\u705D\u705E\u704E\u7064\u7065\u706C\u706E\u7075\u7076\u707E\u7081\u7085\u7086\u7094", 4, "\u709B\u70A4\u70AB\u70B0\u70B1\u70B4\u70B7\u70CA\u70D1\u70D3\u70D4\u70D5\u70D6\u70D8\u70DC\u70E4\u70FA\u7103", 4, "\u710B\u710C\u710F\u711E\u7120\u712B\u712D\u712F\u7130\u7131\u7138\u7141\u7145\u7146\u7147\u714A\u714B\u7150\u7152\u7157\u715A\u715C\u715E\u7160"],
["8fcaa1", "\u7168\u7179\u7180\u7185\u7187\u718C\u7192\u719A\u719B\u71A0\u71A2\u71AF\u71B0\u71B2\u71B3\u71BA\u71BF\u71C0\u71C1\u71C4\u71CB\u71CC\u71D3\u71D6\u71D9\u71DA\u71DC\u71F8\u71FE\u7200\u7207\u7208\u7209\u7213\u7217\u721A\u721D\u721F\u7224\u722B\u722F\u7234\u7238\u7239\u7241\u7242\u7243\u7245\u724E\u724F\u7250\u7253\u7255\u7256\u725A\u725C\u725E\u7260\u7263\u7268\u726B\u726E\u726F\u7271\u7277\u7278\u727B\u727C\u727F\u7284\u7289\u728D\u728E\u7293\u729B\u72A8\u72AD\u72AE\u72B1\u72B4\u72BE\u72C1\u72C7\u72C9\u72CC\u72D5\u72D6\u72D8\u72DF\u72E5\u72F3\u72F4\u72FA\u72FB"],
["8fcba1", "\u72FE\u7302\u7304\u7305\u7307\u730B\u730D\u7312\u7313\u7318\u7319\u731E\u7322\u7324\u7327\u7328\u732C\u7331\u7332\u7335\u733A\u733B\u733D\u7343\u734D\u7350\u7352\u7356\u7358\u735D\u735E\u735F\u7360\u7366\u7367\u7369\u736B\u736C\u736E\u736F\u7371\u7377\u7379\u737C\u7380\u7381\u7383\u7385\u7386\u738E\u7390\u7393\u7395\u7397\u7398\u739C\u739E\u739F\u73A0\u73A2\u73A5\u73A6\u73AA\u73AB\u73AD\u73B5\u73B7\u73B9\u73BC\u73BD\u73BF\u73C5\u73C6\u73C9\u73CB\u73CC\u73CF\u73D2\u73D3\u73D6\u73D9\u73DD\u73E1\u73E3\u73E6\u73E7\u73E9\u73F4\u73F5\u73F7\u73F9\u73FA\u73FB\u73FD"],
["8fcca1", "\u73FF\u7400\u7401\u7404\u7407\u740A\u7411\u741A\u741B\u7424\u7426\u7428", 9, "\u7439\u7440\u7443\u7444\u7446\u7447\u744B\u744D\u7451\u7452\u7457\u745D\u7462\u7466\u7467\u7468\u746B\u746D\u746E\u7471\u7472\u7480\u7481\u7485\u7486\u7487\u7489\u748F\u7490\u7491\u7492\u7498\u7499\u749A\u749C\u749F\u74A0\u74A1\u74A3\u74A6\u74A8\u74A9\u74AA\u74AB\u74AE\u74AF\u74B1\u74B2\u74B5\u74B9\u74BB\u74BF\u74C8\u74C9\u74CC\u74D0\u74D3\u74D8\u74DA\u74DB\u74DE\u74DF\u74E4\u74E8\u74EA\u74EB\u74EF\u74F4\u74FA\u74FB\u74FC\u74FF\u7506"],
["8fcda1", "\u7512\u7516\u7517\u7520\u7521\u7524\u7527\u7529\u752A\u752F\u7536\u7539\u753D\u753E\u753F\u7540\u7543\u7547\u7548\u754E\u7550\u7552\u7557\u755E\u755F\u7561\u756F\u7571\u7579", 5, "\u7581\u7585\u7590\u7592\u7593\u7595\u7599\u759C\u75A2\u75A4\u75B4\u75BA\u75BF\u75C0\u75C1\u75C4\u75C6\u75CC\u75CE\u75CF\u75D7\u75DC\u75DF\u75E0\u75E1\u75E4\u75E7\u75EC\u75EE\u75EF\u75F1\u75F9\u7600\u7602\u7603\u7604\u7607\u7608\u760A\u760C\u760F\u7612\u7613\u7615\u7616\u7619\u761B\u761C\u761D\u761E\u7623\u7625\u7626\u7629\u762D\u7632\u7633\u7635\u7638\u7639"],
["8fcea1", "\u763A\u763C\u764A\u7640\u7641\u7643\u7644\u7645\u7649\u764B\u7655\u7659\u765F\u7664\u7665\u766D\u766E\u766F\u7671\u7674\u7681\u7685\u768C\u768D\u7695\u769B\u769C\u769D\u769F\u76A0\u76A2", 6, "\u76AA\u76AD\u76BD\u76C1\u76C5\u76C9\u76CB\u76CC\u76CE\u76D4\u76D9\u76E0\u76E6\u76E8\u76EC\u76F0\u76F1\u76F6\u76F9\u76FC\u7700\u7706\u770A\u770E\u7712\u7714\u7715\u7717\u7719\u771A\u771C\u7722\u7728\u772D\u772E\u772F\u7734\u7735\u7736\u7739\u773D\u773E\u7742\u7745\u7746\u774A\u774D\u774E\u774F\u7752\u7756\u7757\u775C\u775E\u775F\u7760\u7762"],
["8fcfa1", "\u7764\u7767\u776A\u776C\u7770\u7772\u7773\u7774\u777A\u777D\u7780\u7784\u778C\u778D\u7794\u7795\u7796\u779A\u779F\u77A2\u77A7\u77AA\u77AE\u77AF\u77B1\u77B5\u77BE\u77C3\u77C9\u77D1\u77D2\u77D5\u77D9\u77DE\u77DF\u77E0\u77E4\u77E6\u77EA\u77EC\u77F0\u77F1\u77F4\u77F8\u77FB\u7805\u7806\u7809\u780D\u780E\u7811\u781D\u7821\u7822\u7823\u782D\u782E\u7830\u7835\u7837\u7843\u7844\u7847\u7848\u784C\u784E\u7852\u785C\u785E\u7860\u7861\u7863\u7864\u7868\u786A\u786E\u787A\u787E\u788A\u788F\u7894\u7898\u78A1\u789D\u789E\u789F\u78A4\u78A8\u78AC\u78AD\u78B0\u78B1\u78B2\u78B3"],
["8fd0a1", "\u78BB\u78BD\u78BF\u78C7\u78C8\u78C9\u78CC\u78CE\u78D2\u78D3\u78D5\u78D6\u78E4\u78DB\u78DF\u78E0\u78E1\u78E6\u78EA\u78F2\u78F3\u7900\u78F6\u78F7\u78FA\u78FB\u78FF\u7906\u790C\u7910\u791A\u791C\u791E\u791F\u7920\u7925\u7927\u7929\u792D\u7931\u7934\u7935\u793B\u793D\u793F\u7944\u7945\u7946\u794A\u794B\u794F\u7951\u7954\u7958\u795B\u795C\u7967\u7969\u796B\u7972\u7979\u797B\u797C\u797E\u798B\u798C\u7991\u7993\u7994\u7995\u7996\u7998\u799B\u799C\u79A1\u79A8\u79A9\u79AB\u79AF\u79B1\u79B4\u79B8\u79BB\u79C2\u79C4\u79C7\u79C8\u79CA\u79CF\u79D4\u79D6\u79DA\u79DD\u79DE"],
["8fd1a1", "\u79E0\u79E2\u79E5\u79EA\u79EB\u79ED\u79F1\u79F8\u79FC\u7A02\u7A03\u7A07\u7A09\u7A0A\u7A0C\u7A11\u7A15\u7A1B\u7A1E\u7A21\u7A27\u7A2B\u7A2D\u7A2F\u7A30\u7A34\u7A35\u7A38\u7A39\u7A3A\u7A44\u7A45\u7A47\u7A48\u7A4C\u7A55\u7A56\u7A59\u7A5C\u7A5D\u7A5F\u7A60\u7A65\u7A67\u7A6A\u7A6D\u7A75\u7A78\u7A7E\u7A80\u7A82\u7A85\u7A86\u7A8A\u7A8B\u7A90\u7A91\u7A94\u7A9E\u7AA0\u7AA3\u7AAC\u7AB3\u7AB5\u7AB9\u7ABB\u7ABC\u7AC6\u7AC9\u7ACC\u7ACE\u7AD1\u7ADB\u7AE8\u7AE9\u7AEB\u7AEC\u7AF1\u7AF4\u7AFB\u7AFD\u7AFE\u7B07\u7B14\u7B1F\u7B23\u7B27\u7B29\u7B2A\u7B2B\u7B2D\u7B2E\u7B2F\u7B30"],
["8fd2a1", "\u7B31\u7B34\u7B3D\u7B3F\u7B40\u7B41\u7B47\u7B4E\u7B55\u7B60\u7B64\u7B66\u7B69\u7B6A\u7B6D\u7B6F\u7B72\u7B73\u7B77\u7B84\u7B89\u7B8E\u7B90\u7B91\u7B96\u7B9B\u7B9E\u7BA0\u7BA5\u7BAC\u7BAF\u7BB0\u7BB2\u7BB5\u7BB6\u7BBA\u7BBB\u7BBC\u7BBD\u7BC2\u7BC5\u7BC8\u7BCA\u7BD4\u7BD6\u7BD7\u7BD9\u7BDA\u7BDB\u7BE8\u7BEA\u7BF2\u7BF4\u7BF5\u7BF8\u7BF9\u7BFA\u7BFC\u7BFE\u7C01\u7C02\u7C03\u7C04\u7C06\u7C09\u7C0B\u7C0C\u7C0E\u7C0F\u7C19\u7C1B\u7C20\u7C25\u7C26\u7C28\u7C2C\u7C31\u7C33\u7C34\u7C36\u7C39\u7C3A\u7C46\u7C4A\u7C55\u7C51\u7C52\u7C53\u7C59", 5],
["8fd3a1", "\u7C61\u7C63\u7C67\u7C69\u7C6D\u7C6E\u7C70\u7C72\u7C79\u7C7C\u7C7D\u7C86\u7C87\u7C8F\u7C94\u7C9E\u7CA0\u7CA6\u7CB0\u7CB6\u7CB7\u7CBA\u7CBB\u7CBC\u7CBF\u7CC4\u7CC7\u7CC8\u7CC9\u7CCD\u7CCF\u7CD3\u7CD4\u7CD5\u7CD7\u7CD9\u7CDA\u7CDD\u7CE6\u7CE9\u7CEB\u7CF5\u7D03\u7D07\u7D08\u7D09\u7D0F\u7D11\u7D12\u7D13\u7D16\u7D1D\u7D1E\u7D23\u7D26\u7D2A\u7D2D\u7D31\u7D3C\u7D3D\u7D3E\u7D40\u7D41\u7D47\u7D48\u7D4D\u7D51\u7D53\u7D57\u7D59\u7D5A\u7D5C\u7D5D\u7D65\u7D67\u7D6A\u7D70\u7D78\u7D7A\u7D7B\u7D7F\u7D81\u7D82\u7D83\u7D85\u7D86\u7D88\u7D8B\u7D8C\u7D8D\u7D91\u7D96\u7D97\u7D9D"],
["8fd4a1", "\u7D9E\u7DA6\u7DA7\u7DAA\u7DB3\u7DB6\u7DB7\u7DB9\u7DC2", 4, "\u7DCC\u7DCD\u7DCE\u7DD7\u7DD9\u7E00\u7DE2\u7DE5\u7DE6\u7DEA\u7DEB\u7DED\u7DF1\u7DF5\u7DF6\u7DF9\u7DFA\u7E08\u7E10\u7E11\u7E15\u7E17\u7E1C\u7E1D\u7E20\u7E27\u7E28\u7E2C\u7E2D\u7E2F\u7E33\u7E36\u7E3F\u7E44\u7E45\u7E47\u7E4E\u7E50\u7E52\u7E58\u7E5F\u7E61\u7E62\u7E65\u7E6B\u7E6E\u7E6F\u7E73\u7E78\u7E7E\u7E81\u7E86\u7E87\u7E8A\u7E8D\u7E91\u7E95\u7E98\u7E9A\u7E9D\u7E9E\u7F3C\u7F3B\u7F3D\u7F3E\u7F3F\u7F43\u7F44\u7F47\u7F4F\u7F52\u7F53\u7F5B\u7F5C\u7F5D\u7F61\u7F63\u7F64\u7F65\u7F66\u7F6D"],
["8fd5a1", "\u7F71\u7F7D\u7F7E\u7F7F\u7F80\u7F8B\u7F8D\u7F8F\u7F90\u7F91\u7F96\u7F97\u7F9C\u7FA1\u7FA2\u7FA6\u7FAA\u7FAD\u7FB4\u7FBC\u7FBF\u7FC0\u7FC3\u7FC8\u7FCE\u7FCF\u7FDB\u7FDF\u7FE3\u7FE5\u7FE8\u7FEC\u7FEE\u7FEF\u7FF2\u7FFA\u7FFD\u7FFE\u7FFF\u8007\u8008\u800A\u800D\u800E\u800F\u8011\u8013\u8014\u8016\u801D\u801E\u801F\u8020\u8024\u8026\u802C\u802E\u8030\u8034\u8035\u8037\u8039\u803A\u803C\u803E\u8040\u8044\u8060\u8064\u8066\u806D\u8071\u8075\u8081\u8088\u808E\u809C\u809E\u80A6\u80A7\u80AB\u80B8\u80B9\u80C8\u80CD\u80CF\u80D2\u80D4\u80D5\u80D7\u80D8\u80E0\u80ED\u80EE"],
["8fd6a1", "\u80F0\u80F2\u80F3\u80F6\u80F9\u80FA\u80FE\u8103\u810B\u8116\u8117\u8118\u811C\u811E\u8120\u8124\u8127\u812C\u8130\u8135\u813A\u813C\u8145\u8147\u814A\u814C\u8152\u8157\u8160\u8161\u8167\u8168\u8169\u816D\u816F\u8177\u8181\u8190\u8184\u8185\u8186\u818B\u818E\u8196\u8198\u819B\u819E\u81A2\u81AE\u81B2\u81B4\u81BB\u81CB\u81C3\u81C5\u81CA\u81CE\u81CF\u81D5\u81D7\u81DB\u81DD\u81DE\u81E1\u81E4\u81EB\u81EC\u81F0\u81F1\u81F2\u81F5\u81F6\u81F8\u81F9\u81FD\u81FF\u8200\u8203\u820F\u8213\u8214\u8219\u821A\u821D\u8221\u8222\u8228\u8232\u8234\u823A\u8243\u8244\u8245\u8246"],
["8fd7a1", "\u824B\u824E\u824F\u8251\u8256\u825C\u8260\u8263\u8267\u826D\u8274\u827B\u827D\u827F\u8280\u8281\u8283\u8284\u8287\u8289\u828A\u828E\u8291\u8294\u8296\u8298\u829A\u829B\u82A0\u82A1\u82A3\u82A4\u82A7\u82A8\u82A9\u82AA\u82AE\u82B0\u82B2\u82B4\u82B7\u82BA\u82BC\u82BE\u82BF\u82C6\u82D0\u82D5\u82DA\u82E0\u82E2\u82E4\u82E8\u82EA\u82ED\u82EF\u82F6\u82F7\u82FD\u82FE\u8300\u8301\u8307\u8308\u830A\u830B\u8354\u831B\u831D\u831E\u831F\u8321\u8322\u832C\u832D\u832E\u8330\u8333\u8337\u833A\u833C\u833D\u8342\u8343\u8344\u8347\u834D\u834E\u8351\u8355\u8356\u8357\u8370\u8378"],
["8fd8a1", "\u837D\u837F\u8380\u8382\u8384\u8386\u838D\u8392\u8394\u8395\u8398\u8399\u839B\u839C\u839D\u83A6\u83A7\u83A9\u83AC\u83BE\u83BF\u83C0\u83C7\u83C9\u83CF\u83D0\u83D1\u83D4\u83DD\u8353\u83E8\u83EA\u83F6\u83F8\u83F9\u83FC\u8401\u8406\u840A\u840F\u8411\u8415\u8419\u83AD\u842F\u8439\u8445\u8447\u8448\u844A\u844D\u844F\u8451\u8452\u8456\u8458\u8459\u845A\u845C\u8460\u8464\u8465\u8467\u846A\u8470\u8473\u8474\u8476\u8478\u847C\u847D\u8481\u8485\u8492\u8493\u8495\u849E\u84A6\u84A8\u84A9\u84AA\u84AF\u84B1\u84B4\u84BA\u84BD\u84BE\u84C0\u84C2\u84C7\u84C8\u84CC\u84CF\u84D3"],
["8fd9a1", "\u84DC\u84E7\u84EA\u84EF\u84F0\u84F1\u84F2\u84F7\u8532\u84FA\u84FB\u84FD\u8502\u8503\u8507\u850C\u850E\u8510\u851C\u851E\u8522\u8523\u8524\u8525\u8527\u852A\u852B\u852F\u8533\u8534\u8536\u853F\u8546\u854F", 4, "\u8556\u8559\u855C", 6, "\u8564\u856B\u856F\u8579\u857A\u857B\u857D\u857F\u8581\u8585\u8586\u8589\u858B\u858C\u858F\u8593\u8598\u859D\u859F\u85A0\u85A2\u85A5\u85A7\u85B4\u85B6\u85B7\u85B8\u85BC\u85BD\u85BE\u85BF\u85C2\u85C7\u85CA\u85CB\u85CE\u85AD\u85D8\u85DA\u85DF\u85E0\u85E6\u85E8\u85ED\u85F3\u85F6\u85FC"],
["8fdaa1", "\u85FF\u8600\u8604\u8605\u860D\u860E\u8610\u8611\u8612\u8618\u8619\u861B\u861E\u8621\u8627\u8629\u8636\u8638\u863A\u863C\u863D\u8640\u8642\u8646\u8652\u8653\u8656\u8657\u8658\u8659\u865D\u8660", 4, "\u8669\u866C\u866F\u8675\u8676\u8677\u867A\u868D\u8691\u8696\u8698\u869A\u869C\u86A1\u86A6\u86A7\u86A8\u86AD\u86B1\u86B3\u86B4\u86B5\u86B7\u86B8\u86B9\u86BF\u86C0\u86C1\u86C3\u86C5\u86D1\u86D2\u86D5\u86D7\u86DA\u86DC\u86E0\u86E3\u86E5\u86E7\u8688\u86FA\u86FC\u86FD\u8704\u8705\u8707\u870B\u870E\u870F\u8710\u8713\u8714\u8719\u871E\u871F\u8721\u8723"],
["8fdba1", "\u8728\u872E\u872F\u8731\u8732\u8739\u873A\u873C\u873D\u873E\u8740\u8743\u8745\u874D\u8758\u875D\u8761\u8764\u8765\u876F\u8771\u8772\u877B\u8783", 6, "\u878B\u878C\u8790\u8793\u8795\u8797\u8798\u8799\u879E\u87A0\u87A3\u87A7\u87AC\u87AD\u87AE\u87B1\u87B5\u87BE\u87BF\u87C1\u87C8\u87C9\u87CA\u87CE\u87D5\u87D6\u87D9\u87DA\u87DC\u87DF\u87E2\u87E3\u87E4\u87EA\u87EB\u87ED\u87F1\u87F3\u87F8\u87FA\u87FF\u8801\u8803\u8806\u8809\u880A\u880B\u8810\u8819\u8812\u8813\u8814\u8818\u881A\u881B\u881C\u881E\u881F\u8828\u882D\u882E\u8830\u8832\u8835"],
["8fdca1", "\u883A\u883C\u8841\u8843\u8845\u8848\u8849\u884A\u884B\u884E\u8851\u8855\u8856\u8858\u885A\u885C\u885F\u8860\u8864\u8869\u8871\u8879\u887B\u8880\u8898\u889A\u889B\u889C\u889F\u88A0\u88A8\u88AA\u88BA\u88BD\u88BE\u88C0\u88CA", 4, "\u88D1\u88D2\u88D3\u88DB\u88DE\u88E7\u88EF\u88F0\u88F1\u88F5\u88F7\u8901\u8906\u890D\u890E\u890F\u8915\u8916\u8918\u8919\u891A\u891C\u8920\u8926\u8927\u8928\u8930\u8931\u8932\u8935\u8939\u893A\u893E\u8940\u8942\u8945\u8946\u8949\u894F\u8952\u8957\u895A\u895B\u895C\u8961\u8962\u8963\u896B\u896E\u8970\u8973\u8975\u897A"],
["8fdda1", "\u897B\u897C\u897D\u8989\u898D\u8990\u8994\u8995\u899B\u899C\u899F\u89A0\u89A5\u89B0\u89B4\u89B5\u89B6\u89B7\u89BC\u89D4", 4, "\u89E5\u89E9\u89EB\u89ED\u89F1\u89F3\u89F6\u89F9\u89FD\u89FF\u8A04\u8A05\u8A07\u8A0F\u8A11\u8A12\u8A14\u8A15\u8A1E\u8A20\u8A22\u8A24\u8A26\u8A2B\u8A2C\u8A2F\u8A35\u8A37\u8A3D\u8A3E\u8A40\u8A43\u8A45\u8A47\u8A49\u8A4D\u8A4E\u8A53\u8A56\u8A57\u8A58\u8A5C\u8A5D\u8A61\u8A65\u8A67\u8A75\u8A76\u8A77\u8A79\u8A7A\u8A7B\u8A7E\u8A7F\u8A80\u8A83\u8A86\u8A8B\u8A8F\u8A90\u8A92\u8A96\u8A97\u8A99\u8A9F\u8AA7\u8AA9\u8AAE\u8AAF\u8AB3"],
["8fdea1", "\u8AB6\u8AB7\u8ABB\u8ABE\u8AC3\u8AC6\u8AC8\u8AC9\u8ACA\u8AD1\u8AD3\u8AD4\u8AD5\u8AD7\u8ADD\u8ADF\u8AEC\u8AF0\u8AF4\u8AF5\u8AF6\u8AFC\u8AFF\u8B05\u8B06\u8B0B\u8B11\u8B1C\u8B1E\u8B1F\u8B0A\u8B2D\u8B30\u8B37\u8B3C\u8B42", 4, "\u8B48\u8B52\u8B53\u8B54\u8B59\u8B4D\u8B5E\u8B63\u8B6D\u8B76\u8B78\u8B79\u8B7C\u8B7E\u8B81\u8B84\u8B85\u8B8B\u8B8D\u8B8F\u8B94\u8B95\u8B9C\u8B9E\u8B9F\u8C38\u8C39\u8C3D\u8C3E\u8C45\u8C47\u8C49\u8C4B\u8C4F\u8C51\u8C53\u8C54\u8C57\u8C58\u8C5B\u8C5D\u8C59\u8C63\u8C64\u8C66\u8C68\u8C69\u8C6D\u8C73\u8C75\u8C76\u8C7B\u8C7E\u8C86"],
["8fdfa1", "\u8C87\u8C8B\u8C90\u8C92\u8C93\u8C99\u8C9B\u8C9C\u8CA4\u8CB9\u8CBA\u8CC5\u8CC6\u8CC9\u8CCB\u8CCF\u8CD6\u8CD5\u8CD9\u8CDD\u8CE1\u8CE8\u8CEC\u8CEF\u8CF0\u8CF2\u8CF5\u8CF7\u8CF8\u8CFE\u8CFF\u8D01\u8D03\u8D09\u8D12\u8D17\u8D1B\u8D65\u8D69\u8D6C\u8D6E\u8D7F\u8D82\u8D84\u8D88\u8D8D\u8D90\u8D91\u8D95\u8D9E\u8D9F\u8DA0\u8DA6\u8DAB\u8DAC\u8DAF\u8DB2\u8DB5\u8DB7\u8DB9\u8DBB\u8DC0\u8DC5\u8DC6\u8DC7\u8DC8\u8DCA\u8DCE\u8DD1\u8DD4\u8DD5\u8DD7\u8DD9\u8DE4\u8DE5\u8DE7\u8DEC\u8DF0\u8DBC\u8DF1\u8DF2\u8DF4\u8DFD\u8E01\u8E04\u8E05\u8E06\u8E0B\u8E11\u8E14\u8E16\u8E20\u8E21\u8E22"],
["8fe0a1", "\u8E23\u8E26\u8E27\u8E31\u8E33\u8E36\u8E37\u8E38\u8E39\u8E3D\u8E40\u8E41\u8E4B\u8E4D\u8E4E\u8E4F\u8E54\u8E5B\u8E5C\u8E5D\u8E5E\u8E61\u8E62\u8E69\u8E6C\u8E6D\u8E6F\u8E70\u8E71\u8E79\u8E7A\u8E7B\u8E82\u8E83\u8E89\u8E90\u8E92\u8E95\u8E9A\u8E9B\u8E9D\u8E9E\u8EA2\u8EA7\u8EA9\u8EAD\u8EAE\u8EB3\u8EB5\u8EBA\u8EBB\u8EC0\u8EC1\u8EC3\u8EC4\u8EC7\u8ECF\u8ED1\u8ED4\u8EDC\u8EE8\u8EEE\u8EF0\u8EF1\u8EF7\u8EF9\u8EFA\u8EED\u8F00\u8F02\u8F07\u8F08\u8F0F\u8F10\u8F16\u8F17\u8F18\u8F1E\u8F20\u8F21\u8F23\u8F25\u8F27\u8F28\u8F2C\u8F2D\u8F2E\u8F34\u8F35\u8F36\u8F37\u8F3A\u8F40\u8F41"],
["8fe1a1", "\u8F43\u8F47\u8F4F\u8F51", 4, "\u8F58\u8F5D\u8F5E\u8F65\u8F9D\u8FA0\u8FA1\u8FA4\u8FA5\u8FA6\u8FB5\u8FB6\u8FB8\u8FBE\u8FC0\u8FC1\u8FC6\u8FCA\u8FCB\u8FCD\u8FD0\u8FD2\u8FD3\u8FD5\u8FE0\u8FE3\u8FE4\u8FE8\u8FEE\u8FF1\u8FF5\u8FF6\u8FFB\u8FFE\u9002\u9004\u9008\u900C\u9018\u901B\u9028\u9029\u902F\u902A\u902C\u902D\u9033\u9034\u9037\u903F\u9043\u9044\u904C\u905B\u905D\u9062\u9066\u9067\u906C\u9070\u9074\u9079\u9085\u9088\u908B\u908C\u908E\u9090\u9095\u9097\u9098\u9099\u909B\u90A0\u90A1\u90A2\u90A5\u90B0\u90B2\u90B3\u90B4\u90B6\u90BD\u90CC\u90BE\u90C3"],
["8fe2a1", "\u90C4\u90C5\u90C7\u90C8\u90D5\u90D7\u90D8\u90D9\u90DC\u90DD\u90DF\u90E5\u90D2\u90F6\u90EB\u90EF\u90F0\u90F4\u90FE\u90FF\u9100\u9104\u9105\u9106\u9108\u910D\u9110\u9114\u9116\u9117\u9118\u911A\u911C\u911E\u9120\u9125\u9122\u9123\u9127\u9129\u912E\u912F\u9131\u9134\u9136\u9137\u9139\u913A\u913C\u913D\u9143\u9147\u9148\u914F\u9153\u9157\u9159\u915A\u915B\u9161\u9164\u9167\u916D\u9174\u9179\u917A\u917B\u9181\u9183\u9185\u9186\u918A\u918E\u9191\u9193\u9194\u9195\u9198\u919E\u91A1\u91A6\u91A8\u91AC\u91AD\u91AE\u91B0\u91B1\u91B2\u91B3\u91B6\u91BB\u91BC\u91BD\u91BF"],
["8fe3a1", "\u91C2\u91C3\u91C5\u91D3\u91D4\u91D7\u91D9\u91DA\u91DE\u91E4\u91E5\u91E9\u91EA\u91EC", 5, "\u91F7\u91F9\u91FB\u91FD\u9200\u9201\u9204\u9205\u9206\u9207\u9209\u920A\u920C\u9210\u9212\u9213\u9216\u9218\u921C\u921D\u9223\u9224\u9225\u9226\u9228\u922E\u922F\u9230\u9233\u9235\u9236\u9238\u9239\u923A\u923C\u923E\u9240\u9242\u9243\u9246\u9247\u924A\u924D\u924E\u924F\u9251\u9258\u9259\u925C\u925D\u9260\u9261\u9265\u9267\u9268\u9269\u926E\u926F\u9270\u9275", 4, "\u927B\u927C\u927D\u927F\u9288\u9289\u928A\u928D\u928E\u9292\u9297"],
["8fe4a1", "\u9299\u929F\u92A0\u92A4\u92A5\u92A7\u92A8\u92AB\u92AF\u92B2\u92B6\u92B8\u92BA\u92BB\u92BC\u92BD\u92BF", 4, "\u92C5\u92C6\u92C7\u92C8\u92CB\u92CC\u92CD\u92CE\u92D0\u92D3\u92D5\u92D7\u92D8\u92D9\u92DC\u92DD\u92DF\u92E0\u92E1\u92E3\u92E5\u92E7\u92E8\u92EC\u92EE\u92F0\u92F9\u92FB\u92FF\u9300\u9302\u9308\u930D\u9311\u9314\u9315\u931C\u931D\u931E\u931F\u9321\u9324\u9325\u9327\u9329\u932A\u9333\u9334\u9336\u9337\u9347\u9348\u9349\u9350\u9351\u9352\u9355\u9357\u9358\u935A\u935E\u9364\u9365\u9367\u9369\u936A\u936D\u936F\u9370\u9371\u9373\u9374\u9376"],
["8fe5a1", "\u937A\u937D\u937F\u9380\u9381\u9382\u9388\u938A\u938B\u938D\u938F\u9392\u9395\u9398\u939B\u939E\u93A1\u93A3\u93A4\u93A6\u93A8\u93AB\u93B4\u93B5\u93B6\u93BA\u93A9\u93C1\u93C4\u93C5\u93C6\u93C7\u93C9", 4, "\u93D3\u93D9\u93DC\u93DE\u93DF\u93E2\u93E6\u93E7\u93F9\u93F7\u93F8\u93FA\u93FB\u93FD\u9401\u9402\u9404\u9408\u9409\u940D\u940E\u940F\u9415\u9416\u9417\u941F\u942E\u942F\u9431\u9432\u9433\u9434\u943B\u943F\u943D\u9443\u9445\u9448\u944A\u944C\u9455\u9459\u945C\u945F\u9461\u9463\u9468\u946B\u946D\u946E\u946F\u9471\u9472\u9484\u9483\u9578\u9579"],
["8fe6a1", "\u957E\u9584\u9588\u958C\u958D\u958E\u959D\u959E\u959F\u95A1\u95A6\u95A9\u95AB\u95AC\u95B4\u95B6\u95BA\u95BD\u95BF\u95C6\u95C8\u95C9\u95CB\u95D0\u95D1\u95D2\u95D3\u95D9\u95DA\u95DD\u95DE\u95DF\u95E0\u95E4\u95E6\u961D\u961E\u9622\u9624\u9625\u9626\u962C\u9631\u9633\u9637\u9638\u9639\u963A\u963C\u963D\u9641\u9652\u9654\u9656\u9657\u9658\u9661\u966E\u9674\u967B\u967C\u967E\u967F\u9681\u9682\u9683\u9684\u9689\u9691\u9696\u969A\u969D\u969F\u96A4\u96A5\u96A6\u96A9\u96AE\u96AF\u96B3\u96BA\u96CA\u96D2\u5DB2\u96D8\u96DA\u96DD\u96DE\u96DF\u96E9\u96EF\u96F1\u96FA\u9702"],
["8fe7a1", "\u9703\u9705\u9709\u971A\u971B\u971D\u9721\u9722\u9723\u9728\u9731\u9733\u9741\u9743\u974A\u974E\u974F\u9755\u9757\u9758\u975A\u975B\u9763\u9767\u976A\u976E\u9773\u9776\u9777\u9778\u977B\u977D\u977F\u9780\u9789\u9795\u9796\u9797\u9799\u979A\u979E\u979F\u97A2\u97AC\u97AE\u97B1\u97B2\u97B5\u97B6\u97B8\u97B9\u97BA\u97BC\u97BE\u97BF\u97C1\u97C4\u97C5\u97C7\u97C9\u97CA\u97CC\u97CD\u97CE\u97D0\u97D1\u97D4\u97D7\u97D8\u97D9\u97DD\u97DE\u97E0\u97DB\u97E1\u97E4\u97EF\u97F1\u97F4\u97F7\u97F8\u97FA\u9807\u980A\u9819\u980D\u980E\u9814\u9816\u981C\u981E\u9820\u9823\u9826"],
["8fe8a1", "\u982B\u982E\u982F\u9830\u9832\u9833\u9835\u9825\u983E\u9844\u9847\u984A\u9851\u9852\u9853\u9856\u9857\u9859\u985A\u9862\u9863\u9865\u9866\u986A\u986C\u98AB\u98AD\u98AE\u98B0\u98B4\u98B7\u98B8\u98BA\u98BB\u98BF\u98C2\u98C5\u98C8\u98CC\u98E1\u98E3\u98E5\u98E6\u98E7\u98EA\u98F3\u98F6\u9902\u9907\u9908\u9911\u9915\u9916\u9917\u991A\u991B\u991C\u991F\u9922\u9926\u9927\u992B\u9931", 4, "\u9939\u993A\u993B\u993C\u9940\u9941\u9946\u9947\u9948\u994D\u994E\u9954\u9958\u9959\u995B\u995C\u995E\u995F\u9960\u999B\u999D\u999F\u99A6\u99B0\u99B1\u99B2\u99B5"],
["8fe9a1", "\u99B9\u99BA\u99BD\u99BF\u99C3\u99C9\u99D3\u99D4\u99D9\u99DA\u99DC\u99DE\u99E7\u99EA\u99EB\u99EC\u99F0\u99F4\u99F5\u99F9\u99FD\u99FE\u9A02\u9A03\u9A04\u9A0B\u9A0C\u9A10\u9A11\u9A16\u9A1E\u9A20\u9A22\u9A23\u9A24\u9A27\u9A2D\u9A2E\u9A33\u9A35\u9A36\u9A38\u9A47\u9A41\u9A44\u9A4A\u9A4B\u9A4C\u9A4E\u9A51\u9A54\u9A56\u9A5D\u9AAA\u9AAC\u9AAE\u9AAF\u9AB2\u9AB4\u9AB5\u9AB6\u9AB9\u9ABB\u9ABE\u9ABF\u9AC1\u9AC3\u9AC6\u9AC8\u9ACE\u9AD0\u9AD2\u9AD5\u9AD6\u9AD7\u9ADB\u9ADC\u9AE0\u9AE4\u9AE5\u9AE7\u9AE9\u9AEC\u9AF2\u9AF3\u9AF5\u9AF9\u9AFA\u9AFD\u9AFF", 4],
["8feaa1", "\u9B04\u9B05\u9B08\u9B09\u9B0B\u9B0C\u9B0D\u9B0E\u9B10\u9B12\u9B16\u9B19\u9B1B\u9B1C\u9B20\u9B26\u9B2B\u9B2D\u9B33\u9B34\u9B35\u9B37\u9B39\u9B3A\u9B3D\u9B48\u9B4B\u9B4C\u9B55\u9B56\u9B57\u9B5B\u9B5E\u9B61\u9B63\u9B65\u9B66\u9B68\u9B6A", 4, "\u9B73\u9B75\u9B77\u9B78\u9B79\u9B7F\u9B80\u9B84\u9B85\u9B86\u9B87\u9B89\u9B8A\u9B8B\u9B8D\u9B8F\u9B90\u9B94\u9B9A\u9B9D\u9B9E\u9BA6\u9BA7\u9BA9\u9BAC\u9BB0\u9BB1\u9BB2\u9BB7\u9BB8\u9BBB\u9BBC\u9BBE\u9BBF\u9BC1\u9BC7\u9BC8\u9BCE\u9BD0\u9BD7\u9BD8\u9BDD\u9BDF\u9BE5\u9BE7\u9BEA\u9BEB\u9BEF\u9BF3\u9BF7\u9BF8"],
["8feba1", "\u9BF9\u9BFA\u9BFD\u9BFF\u9C00\u9C02\u9C0B\u9C0F\u9C11\u9C16\u9C18\u9C19\u9C1A\u9C1C\u9C1E\u9C22\u9C23\u9C26", 4, "\u9C31\u9C35\u9C36\u9C37\u9C3D\u9C41\u9C43\u9C44\u9C45\u9C49\u9C4A\u9C4E\u9C4F\u9C50\u9C53\u9C54\u9C56\u9C58\u9C5B\u9C5D\u9C5E\u9C5F\u9C63\u9C69\u9C6A\u9C5C\u9C6B\u9C68\u9C6E\u9C70\u9C72\u9C75\u9C77\u9C7B\u9CE6\u9CF2\u9CF7\u9CF9\u9D0B\u9D02\u9D11\u9D17\u9D18\u9D1C\u9D1D\u9D1E\u9D2F\u9D30\u9D32\u9D33\u9D34\u9D3A\u9D3C\u9D45\u9D3D\u9D42\u9D43\u9D47\u9D4A\u9D53\u9D54\u9D5F\u9D63\u9D62\u9D65\u9D69\u9D6A\u9D6B\u9D70\u9D76\u9D77\u9D7B"],
["8feca1", "\u9D7C\u9D7E\u9D83\u9D84\u9D86\u9D8A\u9D8D\u9D8E\u9D92\u9D93\u9D95\u9D96\u9D97\u9D98\u9DA1\u9DAA\u9DAC\u9DAE\u9DB1\u9DB5\u9DB9\u9DBC\u9DBF\u9DC3\u9DC7\u9DC9\u9DCA\u9DD4\u9DD5\u9DD6\u9DD7\u9DDA\u9DDE\u9DDF\u9DE0\u9DE5\u9DE7\u9DE9\u9DEB\u9DEE\u9DF0\u9DF3\u9DF4\u9DFE\u9E0A\u9E02\u9E07\u9E0E\u9E10\u9E11\u9E12\u9E15\u9E16\u9E19\u9E1C\u9E1D\u9E7A\u9E7B\u9E7C\u9E80\u9E82\u9E83\u9E84\u9E85\u9E87\u9E8E\u9E8F\u9E96\u9E98\u9E9B\u9E9E\u9EA4\u9EA8\u9EAC\u9EAE\u9EAF\u9EB0\u9EB3\u9EB4\u9EB5\u9EC6\u9EC8\u9ECB\u9ED5\u9EDF\u9EE4\u9EE7\u9EEC\u9EED\u9EEE\u9EF0\u9EF1\u9EF2\u9EF5"],
["8feda1", "\u9EF8\u9EFF\u9F02\u9F03\u9F09\u9F0F\u9F10\u9F11\u9F12\u9F14\u9F16\u9F17\u9F19\u9F1A\u9F1B\u9F1F\u9F22\u9F26\u9F2A\u9F2B\u9F2F\u9F31\u9F32\u9F34\u9F37\u9F39\u9F3A\u9F3C\u9F3D\u9F3F\u9F41\u9F43", 4, "\u9F53\u9F55\u9F56\u9F57\u9F58\u9F5A\u9F5D\u9F5E\u9F68\u9F69\u9F6D", 4, "\u9F73\u9F75\u9F7A\u9F7D\u9F8F\u9F90\u9F91\u9F92\u9F94\u9F96\u9F97\u9F9E\u9FA1\u9FA2\u9FA3\u9FA5"]
];
}
});
var require_cp9362 = __commonJS2({
"node_modules/raw-body/node_modules/iconv-lite/encodings/tables/cp936.json"(exports2, module2) {
module2.exports = [
["0", "\0", 127, "\u20AC"],
["8140", "\u4E02\u4E04\u4E05\u4E06\u4E0F\u4E12\u4E17\u4E1F\u4E20\u4E21\u4E23\u4E26\u4E29\u4E2E\u4E2F\u4E31\u4E33\u4E35\u4E37\u4E3C\u4E40\u4E41\u4E42\u4E44\u4E46\u4E4A\u4E51\u4E55\u4E57\u4E5A\u4E5B\u4E62\u4E63\u4E64\u4E65\u4E67\u4E68\u4E6A", 5, "\u4E72\u4E74", 9, "\u4E7F", 6, "\u4E87\u4E8A"],
["8180", "\u4E90\u4E96\u4E97\u4E99\u4E9C\u4E9D\u4E9E\u4EA3\u4EAA\u4EAF\u4EB0\u4EB1\u4EB4\u4EB6\u4EB7\u4EB8\u4EB9\u4EBC\u4EBD\u4EBE\u4EC8\u4ECC\u4ECF\u4ED0\u4ED2\u4EDA\u4EDB\u4EDC\u4EE0\u4EE2\u4EE6\u4EE7\u4EE9\u4EED\u4EEE\u4EEF\u4EF1\u4EF4\u4EF8\u4EF9\u4EFA\u4EFC\u4EFE\u4F00\u4F02", 6, "\u4F0B\u4F0C\u4F12", 4, "\u4F1C\u4F1D\u4F21\u4F23\u4F28\u4F29\u4F2C\u4F2D\u4F2E\u4F31\u4F33\u4F35\u4F37\u4F39\u4F3B\u4F3E", 4, "\u4F44\u4F45\u4F47", 5, "\u4F52\u4F54\u4F56\u4F61\u4F62\u4F66\u4F68\u4F6A\u4F6B\u4F6D\u4F6E\u4F71\u4F72\u4F75\u4F77\u4F78\u4F79\u4F7A\u4F7D\u4F80\u4F81\u4F82\u4F85\u4F86\u4F87\u4F8A\u4F8C\u4F8E\u4F90\u4F92\u4F93\u4F95\u4F96\u4F98\u4F99\u4F9A\u4F9C\u4F9E\u4F9F\u4FA1\u4FA2"],
["8240", "\u4FA4\u4FAB\u4FAD\u4FB0", 4, "\u4FB6", 8, "\u4FC0\u4FC1\u4FC2\u4FC6\u4FC7\u4FC8\u4FC9\u4FCB\u4FCC\u4FCD\u4FD2", 4, "\u4FD9\u4FDB\u4FE0\u4FE2\u4FE4\u4FE5\u4FE7\u4FEB\u4FEC\u4FF0\u4FF2\u4FF4\u4FF5\u4FF6\u4FF7\u4FF9\u4FFB\u4FFC\u4FFD\u4FFF", 11],
["8280", "\u500B\u500E\u5010\u5011\u5013\u5015\u5016\u5017\u501B\u501D\u501E\u5020\u5022\u5023\u5024\u5027\u502B\u502F", 10, "\u503B\u503D\u503F\u5040\u5041\u5042\u5044\u5045\u5046\u5049\u504A\u504B\u504D\u5050", 4, "\u5056\u5057\u5058\u5059\u505B\u505D", 7, "\u5066", 5, "\u506D", 8, "\u5078\u5079\u507A\u507C\u507D\u5081\u5082\u5083\u5084\u5086\u5087\u5089\u508A\u508B\u508C\u508E", 20, "\u50A4\u50A6\u50AA\u50AB\u50AD", 4, "\u50B3", 6, "\u50BC"],
["8340", "\u50BD", 17, "\u50D0", 5, "\u50D7\u50D8\u50D9\u50DB", 10, "\u50E8\u50E9\u50EA\u50EB\u50EF\u50F0\u50F1\u50F2\u50F4\u50F6", 4, "\u50FC", 9, "\u5108"],
["8380", "\u5109\u510A\u510C", 5, "\u5113", 13, "\u5122", 28, "\u5142\u5147\u514A\u514C\u514E\u514F\u5150\u5152\u5153\u5157\u5158\u5159\u515B\u515D", 4, "\u5163\u5164\u5166\u5167\u5169\u516A\u516F\u5172\u517A\u517E\u517F\u5183\u5184\u5186\u5187\u518A\u518B\u518E\u518F\u5190\u5191\u5193\u5194\u5198\u519A\u519D\u519E\u519F\u51A1\u51A3\u51A6", 4, "\u51AD\u51AE\u51B4\u51B8\u51B9\u51BA\u51BE\u51BF\u51C1\u51C2\u51C3\u51C5\u51C8\u51CA\u51CD\u51CE\u51D0\u51D2", 5],
["8440", "\u51D8\u51D9\u51DA\u51DC\u51DE\u51DF\u51E2\u51E3\u51E5", 5, "\u51EC\u51EE\u51F1\u51F2\u51F4\u51F7\u51FE\u5204\u5205\u5209\u520B\u520C\u520F\u5210\u5213\u5214\u5215\u521C\u521E\u521F\u5221\u5222\u5223\u5225\u5226\u5227\u522A\u522C\u522F\u5231\u5232\u5234\u5235\u523C\u523E\u5244", 5, "\u524B\u524E\u524F\u5252\u5253\u5255\u5257\u5258"],
["8480", "\u5259\u525A\u525B\u525D\u525F\u5260\u5262\u5263\u5264\u5266\u5268\u526B\u526C\u526D\u526E\u5270\u5271\u5273", 9, "\u527E\u5280\u5283", 4, "\u5289", 6, "\u5291\u5292\u5294", 6, "\u529C\u52A4\u52A5\u52A6\u52A7\u52AE\u52AF\u52B0\u52B4", 9, "\u52C0\u52C1\u52C2\u52C4\u52C5\u52C6\u52C8\u52CA\u52CC\u52CD\u52CE\u52CF\u52D1\u52D3\u52D4\u52D5\u52D7\u52D9", 5, "\u52E0\u52E1\u52E2\u52E3\u52E5", 10, "\u52F1", 7, "\u52FB\u52FC\u52FD\u5301\u5302\u5303\u5304\u5307\u5309\u530A\u530B\u530C\u530E"],
["8540", "\u5311\u5312\u5313\u5314\u5318\u531B\u531C\u531E\u531F\u5322\u5324\u5325\u5327\u5328\u5329\u532B\u532C\u532D\u532F", 9, "\u533C\u533D\u5340\u5342\u5344\u5346\u534B\u534C\u534D\u5350\u5354\u5358\u5359\u535B\u535D\u5365\u5368\u536A\u536C\u536D\u5372\u5376\u5379\u537B\u537C\u537D\u537E\u5380\u5381\u5383\u5387\u5388\u538A\u538E\u538F"],
["8580", "\u5390", 4, "\u5396\u5397\u5399\u539B\u539C\u539E\u53A0\u53A1\u53A4\u53A7\u53AA\u53AB\u53AC\u53AD\u53AF", 6, "\u53B7\u53B8\u53B9\u53BA\u53BC\u53BD\u53BE\u53C0\u53C3", 4, "\u53CE\u53CF\u53D0\u53D2\u53D3\u53D5\u53DA\u53DC\u53DD\u53DE\u53E1\u53E2\u53E7\u53F4\u53FA\u53FE\u53FF\u5400\u5402\u5405\u5407\u540B\u5414\u5418\u5419\u541A\u541C\u5422\u5424\u5425\u542A\u5430\u5433\u5436\u5437\u543A\u543D\u543F\u5441\u5442\u5444\u5445\u5447\u5449\u544C\u544D\u544E\u544F\u5451\u545A\u545D", 4, "\u5463\u5465\u5467\u5469", 7, "\u5474\u5479\u547A\u547E\u547F\u5481\u5483\u5485\u5487\u5488\u5489\u548A\u548D\u5491\u5493\u5497\u5498\u549C\u549E\u549F\u54A0\u54A1"],
["8640", "\u54A2\u54A5\u54AE\u54B0\u54B2\u54B5\u54B6\u54B7\u54B9\u54BA\u54BC\u54BE\u54C3\u54C5\u54CA\u54CB\u54D6\u54D8\u54DB\u54E0", 4, "\u54EB\u54EC\u54EF\u54F0\u54F1\u54F4", 5, "\u54FB\u54FE\u5500\u5502\u5503\u5504\u5505\u5508\u550A", 4, "\u5512\u5513\u5515", 5, "\u551C\u551D\u551E\u551F\u5521\u5525\u5526"],
["8680", "\u5528\u5529\u552B\u552D\u5532\u5534\u5535\u5536\u5538\u5539\u553A\u553B\u553D\u5540\u5542\u5545\u5547\u5548\u554B", 4, "\u5551\u5552\u5553\u5554\u5557", 4, "\u555D\u555E\u555F\u5560\u5562\u5563\u5568\u5569\u556B\u556F", 5, "\u5579\u557A\u557D\u557F\u5585\u5586\u558C\u558D\u558E\u5590\u5592\u5593\u5595\u5596\u5597\u559A\u559B\u559E\u55A0", 6, "\u55A8", 8, "\u55B2\u55B4\u55B6\u55B8\u55BA\u55BC\u55BF", 4, "\u55C6\u55C7\u55C8\u55CA\u55CB\u55CE\u55CF\u55D0\u55D5\u55D7", 4, "\u55DE\u55E0\u55E2\u55E7\u55E9\u55ED\u55EE\u55F0\u55F1\u55F4\u55F6\u55F8", 4, "\u55FF\u5602\u5603\u5604\u5605"],
["8740", "\u5606\u5607\u560A\u560B\u560D\u5610", 7, "\u5619\u561A\u561C\u561D\u5620\u5621\u5622\u5625\u5626\u5628\u5629\u562A\u562B\u562E\u562F\u5630\u5633\u5635\u5637\u5638\u563A\u563C\u563D\u563E\u5640", 11, "\u564F", 4, "\u5655\u5656\u565A\u565B\u565D", 4],
["8780", "\u5663\u5665\u5666\u5667\u566D\u566E\u566F\u5670\u5672\u5673\u5674\u5675\u5677\u5678\u5679\u567A\u567D", 7, "\u5687", 6, "\u5690\u5691\u5692\u5694", 14, "\u56A4", 10, "\u56B0", 6, "\u56B8\u56B9\u56BA\u56BB\u56BD", 12, "\u56CB", 8, "\u56D5\u56D6\u56D8\u56D9\u56DC\u56E3\u56E5", 5, "\u56EC\u56EE\u56EF\u56F2\u56F3\u56F6\u56F7\u56F8\u56FB\u56FC\u5700\u5701\u5702\u5705\u5707\u570B", 6],
["8840", "\u5712", 9, "\u571D\u571E\u5720\u5721\u5722\u5724\u5725\u5726\u5727\u572B\u5731\u5732\u5734", 4, "\u573C\u573D\u573F\u5741\u5743\u5744\u5745\u5746\u5748\u5749\u574B\u5752", 4, "\u5758\u5759\u5762\u5763\u5765\u5767\u576C\u576E\u5770\u5771\u5772\u5774\u5775\u5778\u5779\u577A\u577D\u577E\u577F\u5780"],
["8880", "\u5781\u5787\u5788\u5789\u578A\u578D", 4, "\u5794", 6, "\u579C\u579D\u579E\u579F\u57A5\u57A8\u57AA\u57AC\u57AF\u57B0\u57B1\u57B3\u57B5\u57B6\u57B7\u57B9", 8, "\u57C4", 6, "\u57CC\u57CD\u57D0\u57D1\u57D3\u57D6\u57D7\u57DB\u57DC\u57DE\u57E1\u57E2\u57E3\u57E5", 7, "\u57EE\u57F0\u57F1\u57F2\u57F3\u57F5\u57F6\u57F7\u57FB\u57FC\u57FE\u57FF\u5801\u5803\u5804\u5805\u5808\u5809\u580A\u580C\u580E\u580F\u5810\u5812\u5813\u5814\u5816\u5817\u5818\u581A\u581B\u581C\u581D\u581F\u5822\u5823\u5825", 4, "\u582B", 4, "\u5831\u5832\u5833\u5834\u5836", 7],
["8940", "\u583E", 5, "\u5845", 6, "\u584E\u584F\u5850\u5852\u5853\u5855\u5856\u5857\u5859", 4, "\u585F", 5, "\u5866", 4, "\u586D", 16, "\u587F\u5882\u5884\u5886\u5887\u5888\u588A\u588B\u588C"],
["8980", "\u588D", 4, "\u5894", 4, "\u589B\u589C\u589D\u58A0", 7, "\u58AA", 17, "\u58BD\u58BE\u58BF\u58C0\u58C2\u58C3\u58C4\u58C6", 10, "\u58D2\u58D3\u58D4\u58D6", 13, "\u58E5", 5, "\u58ED\u58EF\u58F1\u58F2\u58F4\u58F5\u58F7\u58F8\u58FA", 7, "\u5903\u5905\u5906\u5908", 4, "\u590E\u5910\u5911\u5912\u5913\u5917\u5918\u591B\u591D\u591E\u5920\u5921\u5922\u5923\u5926\u5928\u592C\u5930\u5932\u5933\u5935\u5936\u593B"],
["8a40", "\u593D\u593E\u593F\u5940\u5943\u5945\u5946\u594A\u594C\u594D\u5950\u5952\u5953\u5959\u595B", 4, "\u5961\u5963\u5964\u5966", 12, "\u5975\u5977\u597A\u597B\u597C\u597E\u597F\u5980\u5985\u5989\u598B\u598C\u598E\u598F\u5990\u5991\u5994\u5995\u5998\u599A\u599B\u599C\u599D\u599F\u59A0\u59A1\u59A2\u59A6"],
["8a80", "\u59A7\u59AC\u59AD\u59B0\u59B1\u59B3", 5, "\u59BA\u59BC\u59BD\u59BF", 6, "\u59C7\u59C8\u59C9\u59CC\u59CD\u59CE\u59CF\u59D5\u59D6\u59D9\u59DB\u59DE", 4, "\u59E4\u59E6\u59E7\u59E9\u59EA\u59EB\u59ED", 11, "\u59FA\u59FC\u59FD\u59FE\u5A00\u5A02\u5A0A\u5A0B\u5A0D\u5A0E\u5A0F\u5A10\u5A12\u5A14\u5A15\u5A16\u5A17\u5A19\u5A1A\u5A1B\u5A1D\u5A1E\u5A21\u5A22\u5A24\u5A26\u5A27\u5A28\u5A2A", 6, "\u5A33\u5A35\u5A37", 4, "\u5A3D\u5A3E\u5A3F\u5A41", 4, "\u5A47\u5A48\u5A4B", 9, "\u5A56\u5A57\u5A58\u5A59\u5A5B", 5],
["8b40", "\u5A61\u5A63\u5A64\u5A65\u5A66\u5A68\u5A69\u5A6B", 8, "\u5A78\u5A79\u5A7B\u5A7C\u5A7D\u5A7E\u5A80", 17, "\u5A93", 6, "\u5A9C", 13, "\u5AAB\u5AAC"],
["8b80", "\u5AAD", 4, "\u5AB4\u5AB6\u5AB7\u5AB9", 4, "\u5ABF\u5AC0\u5AC3", 5, "\u5ACA\u5ACB\u5ACD", 4, "\u5AD3\u5AD5\u5AD7\u5AD9\u5ADA\u5ADB\u5ADD\u5ADE\u5ADF\u5AE2\u5AE4\u5AE5\u5AE7\u5AE8\u5AEA\u5AEC", 4, "\u5AF2", 22, "\u5B0A", 11, "\u5B18", 25, "\u5B33\u5B35\u5B36\u5B38", 7, "\u5B41", 6],
["8c40", "\u5B48", 7, "\u5B52\u5B56\u5B5E\u5B60\u5B61\u5B67\u5B68\u5B6B\u5B6D\u5B6E\u5B6F\u5B72\u5B74\u5B76\u5B77\u5B78\u5B79\u5B7B\u5B7C\u5B7E\u5B7F\u5B82\u5B86\u5B8A\u5B8D\u5B8E\u5B90\u5B91\u5B92\u5B94\u5B96\u5B9F\u5BA7\u5BA8\u5BA9\u5BAC\u5BAD\u5BAE\u5BAF\u5BB1\u5BB2\u5BB7\u5BBA\u5BBB\u5BBC\u5BC0\u5BC1\u5BC3\u5BC8\u5BC9\u5BCA\u5BCB\u5BCD\u5BCE\u5BCF"],
["8c80", "\u5BD1\u5BD4", 8, "\u5BE0\u5BE2\u5BE3\u5BE6\u5BE7\u5BE9", 4, "\u5BEF\u5BF1", 6, "\u5BFD\u5BFE\u5C00\u5C02\u5C03\u5C05\u5C07\u5C08\u5C0B\u5C0C\u5C0D\u5C0E\u5C10\u5C12\u5C13\u5C17\u5C19\u5C1B\u5C1E\u5C1F\u5C20\u5C21\u5C23\u5C26\u5C28\u5C29\u5C2A\u5C2B\u5C2D\u5C2E\u5C2F\u5C30\u5C32\u5C33\u5C35\u5C36\u5C37\u5C43\u5C44\u5C46\u5C47\u5C4C\u5C4D\u5C52\u5C53\u5C54\u5C56\u5C57\u5C58\u5C5A\u5C5B\u5C5C\u5C5D\u5C5F\u5C62\u5C64\u5C67", 6, "\u5C70\u5C72", 6, "\u5C7B\u5C7C\u5C7D\u5C7E\u5C80\u5C83", 4, "\u5C89\u5C8A\u5C8B\u5C8E\u5C8F\u5C92\u5C93\u5C95\u5C9D", 4, "\u5CA4", 4],
["8d40", "\u5CAA\u5CAE\u5CAF\u5CB0\u5CB2\u5CB4\u5CB6\u5CB9\u5CBA\u5CBB\u5CBC\u5CBE\u5CC0\u5CC2\u5CC3\u5CC5", 5, "\u5CCC", 5, "\u5CD3", 5, "\u5CDA", 6, "\u5CE2\u5CE3\u5CE7\u5CE9\u5CEB\u5CEC\u5CEE\u5CEF\u5CF1", 9, "\u5CFC", 4],
["8d80", "\u5D01\u5D04\u5D05\u5D08", 5, "\u5D0F", 4, "\u5D15\u5D17\u5D18\u5D19\u5D1A\u5D1C\u5D1D\u5D1F", 4, "\u5D25\u5D28\u5D2A\u5D2B\u5D2C\u5D2F", 4, "\u5D35", 7, "\u5D3F", 7, "\u5D48\u5D49\u5D4D", 10, "\u5D59\u5D5A\u5D5C\u5D5E", 10, "\u5D6A\u5D6D\u5D6E\u5D70\u5D71\u5D72\u5D73\u5D75", 12, "\u5D83", 21, "\u5D9A\u5D9B\u5D9C\u5D9E\u5D9F\u5DA0"],
["8e40", "\u5DA1", 21, "\u5DB8", 12, "\u5DC6", 6, "\u5DCE", 12, "\u5DDC\u5DDF\u5DE0\u5DE3\u5DE4\u5DEA\u5DEC\u5DED"],
["8e80", "\u5DF0\u5DF5\u5DF6\u5DF8", 4, "\u5DFF\u5E00\u5E04\u5E07\u5E09\u5E0A\u5E0B\u5E0D\u5E0E\u5E12\u5E13\u5E17\u5E1E", 7, "\u5E28", 4, "\u5E2F\u5E30\u5E32", 4, "\u5E39\u5E3A\u5E3E\u5E3F\u5E40\u5E41\u5E43\u5E46", 5, "\u5E4D", 6, "\u5E56", 4, "\u5E5C\u5E5D\u5E5F\u5E60\u5E63", 14, "\u5E75\u5E77\u5E79\u5E7E\u5E81\u5E82\u5E83\u5E85\u5E88\u5E89\u5E8C\u5E8D\u5E8E\u5E92\u5E98\u5E9B\u5E9D\u5EA1\u5EA2\u5EA3\u5EA4\u5EA8", 4, "\u5EAE", 4, "\u5EB4\u5EBA\u5EBB\u5EBC\u5EBD\u5EBF", 6],
["8f40", "\u5EC6\u5EC7\u5EC8\u5ECB", 5, "\u5ED4\u5ED5\u5ED7\u5ED8\u5ED9\u5EDA\u5EDC", 11, "\u5EE9\u5EEB", 8, "\u5EF5\u5EF8\u5EF9\u5EFB\u5EFC\u5EFD\u5F05\u5F06\u5F07\u5F09\u5F0C\u5F0D\u5F0E\u5F10\u5F12\u5F14\u5F16\u5F19\u5F1A\u5F1C\u5F1D\u5F1E\u5F21\u5F22\u5F23\u5F24"],
["8f80", "\u5F28\u5F2B\u5F2C\u5F2E\u5F30\u5F32", 6, "\u5F3B\u5F3D\u5F3E\u5F3F\u5F41", 14, "\u5F51\u5F54\u5F59\u5F5A\u5F5B\u5F5C\u5F5E\u5F5F\u5F60\u5F63\u5F65\u5F67\u5F68\u5F6B\u5F6E\u5F6F\u5F72\u5F74\u5F75\u5F76\u5F78\u5F7A\u5F7D\u5F7E\u5F7F\u5F83\u5F86\u5F8D\u5F8E\u5F8F\u5F91\u5F93\u5F94\u5F96\u5F9A\u5F9B\u5F9D\u5F9E\u5F9F\u5FA0\u5FA2", 5, "\u5FA9\u5FAB\u5FAC\u5FAF", 5, "\u5FB6\u5FB8\u5FB9\u5FBA\u5FBB\u5FBE", 4, "\u5FC7\u5FC8\u5FCA\u5FCB\u5FCE\u5FD3\u5FD4\u5FD5\u5FDA\u5FDB\u5FDC\u5FDE\u5FDF\u5FE2\u5FE3\u5FE5\u5FE6\u5FE8\u5FE9\u5FEC\u5FEF\u5FF0\u5FF2\u5FF3\u5FF4\u5FF6\u5FF7\u5FF9\u5FFA\u5FFC\u6007"],
["9040", "\u6008\u6009\u600B\u600C\u6010\u6011\u6013\u6017\u6018\u601A\u601E\u601F\u6022\u6023\u6024\u602C\u602D\u602E\u6030", 4, "\u6036", 4, "\u603D\u603E\u6040\u6044", 6, "\u604C\u604E\u604F\u6051\u6053\u6054\u6056\u6057\u6058\u605B\u605C\u605E\u605F\u6060\u6061\u6065\u6066\u606E\u6071\u6072\u6074\u6075\u6077\u607E\u6080"],
["9080", "\u6081\u6082\u6085\u6086\u6087\u6088\u608A\u608B\u608E\u608F\u6090\u6091\u6093\u6095\u6097\u6098\u6099\u609C\u609E\u60A1\u60A2\u60A4\u60A5\u60A7\u60A9\u60AA\u60AE\u60B0\u60B3\u60B5\u60B6\u60B7\u60B9\u60BA\u60BD", 7, "\u60C7\u60C8\u60C9\u60CC", 4, "\u60D2\u60D3\u60D4\u60D6\u60D7\u60D9\u60DB\u60DE\u60E1", 4, "\u60EA\u60F1\u60F2\u60F5\u60F7\u60F8\u60FB", 4, "\u6102\u6103\u6104\u6105\u6107\u610A\u610B\u610C\u6110", 4, "\u6116\u6117\u6118\u6119\u611B\u611C\u611D\u611E\u6121\u6122\u6125\u6128\u6129\u612A\u612C", 18, "\u6140", 6],
["9140", "\u6147\u6149\u614B\u614D\u614F\u6150\u6152\u6153\u6154\u6156", 6, "\u615E\u615F\u6160\u6161\u6163\u6164\u6165\u6166\u6169", 6, "\u6171\u6172\u6173\u6174\u6176\u6178", 18, "\u618C\u618D\u618F", 4, "\u6195"],
["9180", "\u6196", 6, "\u619E", 8, "\u61AA\u61AB\u61AD", 9, "\u61B8", 5, "\u61BF\u61C0\u61C1\u61C3", 4, "\u61C9\u61CC", 4, "\u61D3\u61D5", 16, "\u61E7", 13, "\u61F6", 8, "\u6200", 5, "\u6207\u6209\u6213\u6214\u6219\u621C\u621D\u621E\u6220\u6223\u6226\u6227\u6228\u6229\u622B\u622D\u622F\u6230\u6231\u6232\u6235\u6236\u6238", 4, "\u6242\u6244\u6245\u6246\u624A"],
["9240", "\u624F\u6250\u6255\u6256\u6257\u6259\u625A\u625C", 6, "\u6264\u6265\u6268\u6271\u6272\u6274\u6275\u6277\u6278\u627A\u627B\u627D\u6281\u6282\u6283\u6285\u6286\u6287\u6288\u628B", 5, "\u6294\u6299\u629C\u629D\u629E\u62A3\u62A6\u62A7\u62A9\u62AA\u62AD\u62AE\u62AF\u62B0\u62B2\u62B3\u62B4\u62B6\u62B7\u62B8\u62BA\u62BE\u62C0\u62C1"],
["9280", "\u62C3\u62CB\u62CF\u62D1\u62D5\u62DD\u62DE\u62E0\u62E1\u62E4\u62EA\u62EB\u62F0\u62F2\u62F5\u62F8\u62F9\u62FA\u62FB\u6300\u6303\u6304\u6305\u6306\u630A\u630B\u630C\u630D\u630F\u6310\u6312\u6313\u6314\u6315\u6317\u6318\u6319\u631C\u6326\u6327\u6329\u632C\u632D\u632E\u6330\u6331\u6333", 5, "\u633B\u633C\u633E\u633F\u6340\u6341\u6344\u6347\u6348\u634A\u6351\u6352\u6353\u6354\u6356", 7, "\u6360\u6364\u6365\u6366\u6368\u636A\u636B\u636C\u636F\u6370\u6372\u6373\u6374\u6375\u6378\u6379\u637C\u637D\u637E\u637F\u6381\u6383\u6384\u6385\u6386\u638B\u638D\u6391\u6393\u6394\u6395\u6397\u6399", 6, "\u63A1\u63A4\u63A6\u63AB\u63AF\u63B1\u63B2\u63B5\u63B6\u63B9\u63BB\u63BD\u63BF\u63C0"],
["9340", "\u63C1\u63C2\u63C3\u63C5\u63C7\u63C8\u63CA\u63CB\u63CC\u63D1\u63D3\u63D4\u63D5\u63D7", 6, "\u63DF\u63E2\u63E4", 4, "\u63EB\u63EC\u63EE\u63EF\u63F0\u63F1\u63F3\u63F5\u63F7\u63F9\u63FA\u63FB\u63FC\u63FE\u6403\u6404\u6406", 4, "\u640D\u640E\u6411\u6412\u6415", 5, "\u641D\u641F\u6422\u6423\u6424"],
["9380", "\u6425\u6427\u6428\u6429\u642B\u642E", 5, "\u6435", 4, "\u643B\u643C\u643E\u6440\u6442\u6443\u6449\u644B", 6, "\u6453\u6455\u6456\u6457\u6459", 4, "\u645F", 7, "\u6468\u646A\u646B\u646C\u646E", 9, "\u647B", 6, "\u6483\u6486\u6488", 8, "\u6493\u6494\u6497\u6498\u649A\u649B\u649C\u649D\u649F", 4, "\u64A5\u64A6\u64A7\u64A8\u64AA\u64AB\u64AF\u64B1\u64B2\u64B3\u64B4\u64B6\u64B9\u64BB\u64BD\u64BE\u64BF\u64C1\u64C3\u64C4\u64C6", 6, "\u64CF\u64D1\u64D3\u64D4\u64D5\u64D6\u64D9\u64DA"],
["9440", "\u64DB\u64DC\u64DD\u64DF\u64E0\u64E1\u64E3\u64E5\u64E7", 24, "\u6501", 7, "\u650A", 7, "\u6513", 4, "\u6519", 8],
["9480", "\u6522\u6523\u6524\u6526", 4, "\u652C\u652D\u6530\u6531\u6532\u6533\u6537\u653A\u653C\u653D\u6540", 4, "\u6546\u6547\u654A\u654B\u654D\u654E\u6550\u6552\u6553\u6554\u6557\u6558\u655A\u655C\u655F\u6560\u6561\u6564\u6565\u6567\u6568\u6569\u656A\u656D\u656E\u656F\u6571\u6573\u6575\u6576\u6578", 14, "\u6588\u6589\u658A\u658D\u658E\u658F\u6592\u6594\u6595\u6596\u6598\u659A\u659D\u659E\u65A0\u65A2\u65A3\u65A6\u65A8\u65AA\u65AC\u65AE\u65B1", 7, "\u65BA\u65BB\u65BE\u65BF\u65C0\u65C2\u65C7\u65C8\u65C9\u65CA\u65CD\u65D0\u65D1\u65D3\u65D4\u65D5\u65D8", 7, "\u65E1\u65E3\u65E4\u65EA\u65EB"],
["9540", "\u65F2\u65F3\u65F4\u65F5\u65F8\u65F9\u65FB", 4, "\u6601\u6604\u6605\u6607\u6608\u6609\u660B\u660D\u6610\u6611\u6612\u6616\u6617\u6618\u661A\u661B\u661C\u661E\u6621\u6622\u6623\u6624\u6626\u6629\u662A\u662B\u662C\u662E\u6630\u6632\u6633\u6637", 4, "\u663D\u663F\u6640\u6642\u6644", 6, "\u664D\u664E\u6650\u6651\u6658"],
["9580", "\u6659\u665B\u665C\u665D\u665E\u6660\u6662\u6663\u6665\u6667\u6669", 4, "\u6671\u6672\u6673\u6675\u6678\u6679\u667B\u667C\u667D\u667F\u6680\u6681\u6683\u6685\u6686\u6688\u6689\u668A\u668B\u668D\u668E\u668F\u6690\u6692\u6693\u6694\u6695\u6698", 4, "\u669E", 8, "\u66A9", 4, "\u66AF", 4, "\u66B5\u66B6\u66B7\u66B8\u66BA\u66BB\u66BC\u66BD\u66BF", 25, "\u66DA\u66DE", 7, "\u66E7\u66E8\u66EA", 5, "\u66F1\u66F5\u66F6\u66F8\u66FA\u66FB\u66FD\u6701\u6702\u6703"],
["9640", "\u6704\u6705\u6706\u6707\u670C\u670E\u670F\u6711\u6712\u6713\u6716\u6718\u6719\u671A\u671C\u671E\u6720", 5, "\u6727\u6729\u672E\u6730\u6732\u6733\u6736\u6737\u6738\u6739\u673B\u673C\u673E\u673F\u6741\u6744\u6745\u6747\u674A\u674B\u674D\u6752\u6754\u6755\u6757", 4, "\u675D\u6762\u6763\u6764\u6766\u6767\u676B\u676C\u676E\u6771\u6774\u6776"],
["9680", "\u6778\u6779\u677A\u677B\u677D\u6780\u6782\u6783\u6785\u6786\u6788\u678A\u678C\u678D\u678E\u678F\u6791\u6792\u6793\u6794\u6796\u6799\u679B\u679F\u67A0\u67A1\u67A4\u67A6\u67A9\u67AC\u67AE\u67B1\u67B2\u67B4\u67B9", 7, "\u67C2\u67C5", 9, "\u67D5\u67D6\u67D7\u67DB\u67DF\u67E1\u67E3\u67E4\u67E6\u67E7\u67E8\u67EA\u67EB\u67ED\u67EE\u67F2\u67F5", 7, "\u67FE\u6801\u6802\u6803\u6804\u6806\u680D\u6810\u6812\u6814\u6815\u6818", 4, "\u681E\u681F\u6820\u6822", 6, "\u682B", 6, "\u6834\u6835\u6836\u683A\u683B\u683F\u6847\u684B\u684D\u684F\u6852\u6856", 5],
["9740", "\u685C\u685D\u685E\u685F\u686A\u686C", 7, "\u6875\u6878", 8, "\u6882\u6884\u6887", 7, "\u6890\u6891\u6892\u6894\u6895\u6896\u6898", 9, "\u68A3\u68A4\u68A5\u68A9\u68AA\u68AB\u68AC\u68AE\u68B1\u68B2\u68B4\u68B6\u68B7\u68B8"],
["9780", "\u68B9", 6, "\u68C1\u68C3", 5, "\u68CA\u68CC\u68CE\u68CF\u68D0\u68D1\u68D3\u68D4\u68D6\u68D7\u68D9\u68DB", 4, "\u68E1\u68E2\u68E4", 9, "\u68EF\u68F2\u68F3\u68F4\u68F6\u68F7\u68F8\u68FB\u68FD\u68FE\u68FF\u6900\u6902\u6903\u6904\u6906", 4, "\u690C\u690F\u6911\u6913", 11, "\u6921\u6922\u6923\u6925", 7, "\u692E\u692F\u6931\u6932\u6933\u6935\u6936\u6937\u6938\u693A\u693B\u693C\u693E\u6940\u6941\u6943", 16, "\u6955\u6956\u6958\u6959\u695B\u695C\u695F"],
["9840", "\u6961\u6962\u6964\u6965\u6967\u6968\u6969\u696A\u696C\u696D\u696F\u6970\u6972", 4, "\u697A\u697B\u697D\u697E\u697F\u6981\u6983\u6985\u698A\u698B\u698C\u698E", 5, "\u6996\u6997\u6999\u699A\u699D", 9, "\u69A9\u69AA\u69AC\u69AE\u69AF\u69B0\u69B2\u69B3\u69B5\u69B6\u69B8\u69B9\u69BA\u69BC\u69BD"],
["9880", "\u69BE\u69BF\u69C0\u69C2", 7, "\u69CB\u69CD\u69CF\u69D1\u69D2\u69D3\u69D5", 5, "\u69DC\u69DD\u69DE\u69E1", 11, "\u69EE\u69EF\u69F0\u69F1\u69F3", 9, "\u69FE\u6A00", 9, "\u6A0B", 11, "\u6A19", 5, "\u6A20\u6A22", 5, "\u6A29\u6A2B\u6A2C\u6A2D\u6A2E\u6A30\u6A32\u6A33\u6A34\u6A36", 6, "\u6A3F", 4, "\u6A45\u6A46\u6A48", 7, "\u6A51", 6, "\u6A5A"],
["9940", "\u6A5C", 4, "\u6A62\u6A63\u6A64\u6A66", 10, "\u6A72", 6, "\u6A7A\u6A7B\u6A7D\u6A7E\u6A7F\u6A81\u6A82\u6A83\u6A85", 8, "\u6A8F\u6A92", 4, "\u6A98", 7, "\u6AA1", 5],
["9980", "\u6AA7\u6AA8\u6AAA\u6AAD", 114, "\u6B25\u6B26\u6B28", 6],
["9a40", "\u6B2F\u6B30\u6B31\u6B33\u6B34\u6B35\u6B36\u6B38\u6B3B\u6B3C\u6B3D\u6B3F\u6B40\u6B41\u6B42\u6B44\u6B45\u6B48\u6B4A\u6B4B\u6B4D", 11, "\u6B5A", 7, "\u6B68\u6B69\u6B6B", 13, "\u6B7A\u6B7D\u6B7E\u6B7F\u6B80\u6B85\u6B88"],
["9a80", "\u6B8C\u6B8E\u6B8F\u6B90\u6B91\u6B94\u6B95\u6B97\u6B98\u6B99\u6B9C", 4, "\u6BA2", 7, "\u6BAB", 7, "\u6BB6\u6BB8", 6, "\u6BC0\u6BC3\u6BC4\u6BC6", 4, "\u6BCC\u6BCE\u6BD0\u6BD1\u6BD8\u6BDA\u6BDC", 4, "\u6BE2", 7, "\u6BEC\u6BED\u6BEE\u6BF0\u6BF1\u6BF2\u6BF4\u6BF6\u6BF7\u6BF8\u6BFA\u6BFB\u6BFC\u6BFE", 6, "\u6C08", 4, "\u6C0E\u6C12\u6C17\u6C1C\u6C1D\u6C1E\u6C20\u6C23\u6C25\u6C2B\u6C2C\u6C2D\u6C31\u6C33\u6C36\u6C37\u6C39\u6C3A\u6C3B\u6C3C\u6C3E\u6C3F\u6C43\u6C44\u6C45\u6C48\u6C4B", 4, "\u6C51\u6C52\u6C53\u6C56\u6C58"],
["9b40", "\u6C59\u6C5A\u6C62\u6C63\u6C65\u6C66\u6C67\u6C6B", 4, "\u6C71\u6C73\u6C75\u6C77\u6C78\u6C7A\u6C7B\u6C7C\u6C7F\u6C80\u6C84\u6C87\u6C8A\u6C8B\u6C8D\u6C8E\u6C91\u6C92\u6C95\u6C96\u6C97\u6C98\u6C9A\u6C9C\u6C9D\u6C9E\u6CA0\u6CA2\u6CA8\u6CAC\u6CAF\u6CB0\u6CB4\u6CB5\u6CB6\u6CB7\u6CBA\u6CC0\u6CC1\u6CC2\u6CC3\u6CC6\u6CC7\u6CC8\u6CCB\u6CCD\u6CCE\u6CCF\u6CD1\u6CD2\u6CD8"],
["9b80", "\u6CD9\u6CDA\u6CDC\u6CDD\u6CDF\u6CE4\u6CE6\u6CE7\u6CE9\u6CEC\u6CED\u6CF2\u6CF4\u6CF9\u6CFF\u6D00\u6D02\u6D03\u6D05\u6D06\u6D08\u6D09\u6D0A\u6D0D\u6D0F\u6D10\u6D11\u6D13\u6D14\u6D15\u6D16\u6D18\u6D1C\u6D1D\u6D1F", 5, "\u6D26\u6D28\u6D29\u6D2C\u6D2D\u6D2F\u6D30\u6D34\u6D36\u6D37\u6D38\u6D3A\u6D3F\u6D40\u6D42\u6D44\u6D49\u6D4C\u6D50\u6D55\u6D56\u6D57\u6D58\u6D5B\u6D5D\u6D5F\u6D61\u6D62\u6D64\u6D65\u6D67\u6D68\u6D6B\u6D6C\u6D6D\u6D70\u6D71\u6D72\u6D73\u6D75\u6D76\u6D79\u6D7A\u6D7B\u6D7D", 4, "\u6D83\u6D84\u6D86\u6D87\u6D8A\u6D8B\u6D8D\u6D8F\u6D90\u6D92\u6D96", 4, "\u6D9C\u6DA2\u6DA5\u6DAC\u6DAD\u6DB0\u6DB1\u6DB3\u6DB4\u6DB6\u6DB7\u6DB9", 5, "\u6DC1\u6DC2\u6DC3\u6DC8\u6DC9\u6DCA"],
["9c40", "\u6DCD\u6DCE\u6DCF\u6DD0\u6DD2\u6DD3\u6DD4\u6DD5\u6DD7\u6DDA\u6DDB\u6DDC\u6DDF\u6DE2\u6DE3\u6DE5\u6DE7\u6DE8\u6DE9\u6DEA\u6DED\u6DEF\u6DF0\u6DF2\u6DF4\u6DF5\u6DF6\u6DF8\u6DFA\u6DFD", 7, "\u6E06\u6E07\u6E08\u6E09\u6E0B\u6E0F\u6E12\u6E13\u6E15\u6E18\u6E19\u6E1B\u6E1C\u6E1E\u6E1F\u6E22\u6E26\u6E27\u6E28\u6E2A\u6E2C\u6E2E\u6E30\u6E31\u6E33\u6E35"],
["9c80", "\u6E36\u6E37\u6E39\u6E3B", 7, "\u6E45", 7, "\u6E4F\u6E50\u6E51\u6E52\u6E55\u6E57\u6E59\u6E5A\u6E5C\u6E5D\u6E5E\u6E60", 10, "\u6E6C\u6E6D\u6E6F", 14, "\u6E80\u6E81\u6E82\u6E84\u6E87\u6E88\u6E8A", 4, "\u6E91", 6, "\u6E99\u6E9A\u6E9B\u6E9D\u6E9E\u6EA0\u6EA1\u6EA3\u6EA4\u6EA6\u6EA8\u6EA9\u6EAB\u6EAC\u6EAD\u6EAE\u6EB0\u6EB3\u6EB5\u6EB8\u6EB9\u6EBC\u6EBE\u6EBF\u6EC0\u6EC3\u6EC4\u6EC5\u6EC6\u6EC8\u6EC9\u6ECA\u6ECC\u6ECD\u6ECE\u6ED0\u6ED2\u6ED6\u6ED8\u6ED9\u6EDB\u6EDC\u6EDD\u6EE3\u6EE7\u6EEA", 5],
["9d40", "\u6EF0\u6EF1\u6EF2\u6EF3\u6EF5\u6EF6\u6EF7\u6EF8\u6EFA", 7, "\u6F03\u6F04\u6F05\u6F07\u6F08\u6F0A", 4, "\u6F10\u6F11\u6F12\u6F16", 9, "\u6F21\u6F22\u6F23\u6F25\u6F26\u6F27\u6F28\u6F2C\u6F2E\u6F30\u6F32\u6F34\u6F35\u6F37", 6, "\u6F3F\u6F40\u6F41\u6F42"],
["9d80", "\u6F43\u6F44\u6F45\u6F48\u6F49\u6F4A\u6F4C\u6F4E", 9, "\u6F59\u6F5A\u6F5B\u6F5D\u6F5F\u6F60\u6F61\u6F63\u6F64\u6F65\u6F67", 5, "\u6F6F\u6F70\u6F71\u6F73\u6F75\u6F76\u6F77\u6F79\u6F7B\u6F7D", 6, "\u6F85\u6F86\u6F87\u6F8A\u6F8B\u6F8F", 12, "\u6F9D\u6F9E\u6F9F\u6FA0\u6FA2", 4, "\u6FA8", 10, "\u6FB4\u6FB5\u6FB7\u6FB8\u6FBA", 5, "\u6FC1\u6FC3", 5, "\u6FCA", 6, "\u6FD3", 10, "\u6FDF\u6FE2\u6FE3\u6FE4\u6FE5"],
["9e40", "\u6FE6", 7, "\u6FF0", 32, "\u7012", 7, "\u701C", 6, "\u7024", 6],
["9e80", "\u702B", 9, "\u7036\u7037\u7038\u703A", 17, "\u704D\u704E\u7050", 13, "\u705F", 11, "\u706E\u7071\u7072\u7073\u7074\u7077\u7079\u707A\u707B\u707D\u7081\u7082\u7083\u7084\u7086\u7087\u7088\u708B\u708C\u708D\u708F\u7090\u7091\u7093\u7097\u7098\u709A\u709B\u709E", 12, "\u70B0\u70B2\u70B4\u70B5\u70B6\u70BA\u70BE\u70BF\u70C4\u70C5\u70C6\u70C7\u70C9\u70CB", 12, "\u70DA"],
["9f40", "\u70DC\u70DD\u70DE\u70E0\u70E1\u70E2\u70E3\u70E5\u70EA\u70EE\u70F0", 6, "\u70F8\u70FA\u70FB\u70FC\u70FE", 10, "\u710B", 4, "\u7111\u7112\u7114\u7117\u711B", 10, "\u7127", 7, "\u7132\u7133\u7134"],
["9f80", "\u7135\u7137", 13, "\u7146\u7147\u7148\u7149\u714B\u714D\u714F", 12, "\u715D\u715F", 4, "\u7165\u7169", 4, "\u716F\u7170\u7171\u7174\u7175\u7176\u7177\u7179\u717B\u717C\u717E", 5, "\u7185", 4, "\u718B\u718C\u718D\u718E\u7190\u7191\u7192\u7193\u7195\u7196\u7197\u719A", 4, "\u71A1", 6, "\u71A9\u71AA\u71AB\u71AD", 5, "\u71B4\u71B6\u71B7\u71B8\u71BA", 8, "\u71C4", 9, "\u71CF", 4],
["a040", "\u71D6", 9, "\u71E1\u71E2\u71E3\u71E4\u71E6\u71E8", 5, "\u71EF", 9, "\u71FA", 11, "\u7207", 19],
["a080", "\u721B\u721C\u721E", 9, "\u7229\u722B\u722D\u722E\u722F\u7232\u7233\u7234\u723A\u723C\u723E\u7240", 6, "\u7249\u724A\u724B\u724E\u724F\u7250\u7251\u7253\u7254\u7255\u7257\u7258\u725A\u725C\u725E\u7260\u7263\u7264\u7265\u7268\u726A\u726B\u726C\u726D\u7270\u7271\u7273\u7274\u7276\u7277\u7278\u727B\u727C\u727D\u7282\u7283\u7285", 4, "\u728C\u728E\u7290\u7291\u7293", 11, "\u72A0", 11, "\u72AE\u72B1\u72B2\u72B3\u72B5\u72BA", 6, "\u72C5\u72C6\u72C7\u72C9\u72CA\u72CB\u72CC\u72CF\u72D1\u72D3\u72D4\u72D5\u72D6\u72D8\u72DA\u72DB"],
["a1a1", "\u3000\u3001\u3002\xB7\u02C9\u02C7\xA8\u3003\u3005\u2014\uFF5E\u2016\u2026\u2018\u2019\u201C\u201D\u3014\u3015\u3008", 7, "\u3016\u3017\u3010\u3011\xB1\xD7\xF7\u2236\u2227\u2228\u2211\u220F\u222A\u2229\u2208\u2237\u221A\u22A5\u2225\u2220\u2312\u2299\u222B\u222E\u2261\u224C\u2248\u223D\u221D\u2260\u226E\u226F\u2264\u2265\u221E\u2235\u2234\u2642\u2640\xB0\u2032\u2033\u2103\uFF04\xA4\uFFE0\uFFE1\u2030\xA7\u2116\u2606\u2605\u25CB\u25CF\u25CE\u25C7\u25C6\u25A1\u25A0\u25B3\u25B2\u203B\u2192\u2190\u2191\u2193\u3013"],
["a2a1", "\u2170", 9],
["a2b1", "\u2488", 19, "\u2474", 19, "\u2460", 9],
["a2e5", "\u3220", 9],
["a2f1", "\u2160", 11],
["a3a1", "\uFF01\uFF02\uFF03\uFFE5\uFF05", 88, "\uFFE3"],
["a4a1", "\u3041", 82],
["a5a1", "\u30A1", 85],
["a6a1", "\u0391", 16, "\u03A3", 6],
["a6c1", "\u03B1", 16, "\u03C3", 6],
["a6e0", "\uFE35\uFE36\uFE39\uFE3A\uFE3F\uFE40\uFE3D\uFE3E\uFE41\uFE42\uFE43\uFE44"],
["a6ee", "\uFE3B\uFE3C\uFE37\uFE38\uFE31"],
["a6f4", "\uFE33\uFE34"],
["a7a1", "\u0410", 5, "\u0401\u0416", 25],
["a7d1", "\u0430", 5, "\u0451\u0436", 25],
["a840", "\u02CA\u02CB\u02D9\u2013\u2015\u2025\u2035\u2105\u2109\u2196\u2197\u2198\u2199\u2215\u221F\u2223\u2252\u2266\u2267\u22BF\u2550", 35, "\u2581", 6],
["a880", "\u2588", 7, "\u2593\u2594\u2595\u25BC\u25BD\u25E2\u25E3\u25E4\u25E5\u2609\u2295\u3012\u301D\u301E"],
["a8a1", "\u0101\xE1\u01CE\xE0\u0113\xE9\u011B\xE8\u012B\xED\u01D0\xEC\u014D\xF3\u01D2\xF2\u016B\xFA\u01D4\xF9\u01D6\u01D8\u01DA\u01DC\xFC\xEA\u0251"],
["a8bd", "\u0144\u0148"],
["a8c0", "\u0261"],
["a8c5", "\u3105", 36],
["a940", "\u3021", 8, "\u32A3\u338E\u338F\u339C\u339D\u339E\u33A1\u33C4\u33CE\u33D1\u33D2\u33D5\uFE30\uFFE2\uFFE4"],
["a959", "\u2121\u3231"],
["a95c", "\u2010"],
["a960", "\u30FC\u309B\u309C\u30FD\u30FE\u3006\u309D\u309E\uFE49", 9, "\uFE54\uFE55\uFE56\uFE57\uFE59", 8],
["a980", "\uFE62", 4, "\uFE68\uFE69\uFE6A\uFE6B"],
["a996", "\u3007"],
["a9a4", "\u2500", 75],
["aa40", "\u72DC\u72DD\u72DF\u72E2", 5, "\u72EA\u72EB\u72F5\u72F6\u72F9\u72FD\u72FE\u72FF\u7300\u7302\u7304", 5, "\u730B\u730C\u730D\u730F\u7310\u7311\u7312\u7314\u7318\u7319\u731A\u731F\u7320\u7323\u7324\u7326\u7327\u7328\u732D\u732F\u7330\u7332\u7333\u7335\u7336\u733A\u733B\u733C\u733D\u7340", 8],
["aa80", "\u7349\u734A\u734B\u734C\u734E\u734F\u7351\u7353\u7354\u7355\u7356\u7358", 7, "\u7361", 10, "\u736E\u7370\u7371"],
["ab40", "\u7372", 11, "\u737F", 4, "\u7385\u7386\u7388\u738A\u738C\u738D\u738F\u7390\u7392\u7393\u7394\u7395\u7397\u7398\u7399\u739A\u739C\u739D\u739E\u73A0\u73A1\u73A3", 5, "\u73AA\u73AC\u73AD\u73B1\u73B4\u73B5\u73B6\u73B8\u73B9\u73BC\u73BD\u73BE\u73BF\u73C1\u73C3", 4],
["ab80", "\u73CB\u73CC\u73CE\u73D2", 6, "\u73DA\u73DB\u73DC\u73DD\u73DF\u73E1\u73E2\u73E3\u73E4\u73E6\u73E8\u73EA\u73EB\u73EC\u73EE\u73EF\u73F0\u73F1\u73F3", 4],
["ac40", "\u73F8", 10, "\u7404\u7407\u7408\u740B\u740C\u740D\u740E\u7411", 8, "\u741C", 5, "\u7423\u7424\u7427\u7429\u742B\u742D\u742F\u7431\u7432\u7437", 4, "\u743D\u743E\u743F\u7440\u7442", 11],
["ac80", "\u744E", 6, "\u7456\u7458\u745D\u7460", 12, "\u746E\u746F\u7471", 4, "\u7478\u7479\u747A"],
["ad40", "\u747B\u747C\u747D\u747F\u7482\u7484\u7485\u7486\u7488\u7489\u748A\u748C\u748D\u748F\u7491", 10, "\u749D\u749F", 7, "\u74AA", 15, "\u74BB", 12],
["ad80", "\u74C8", 9, "\u74D3", 8, "\u74DD\u74DF\u74E1\u74E5\u74E7", 6, "\u74F0\u74F1\u74F2"],
["ae40", "\u74F3\u74F5\u74F8", 6, "\u7500\u7501\u7502\u7503\u7505", 7, "\u750E\u7510\u7512\u7514\u7515\u7516\u7517\u751B\u751D\u751E\u7520", 4, "\u7526\u7527\u752A\u752E\u7534\u7536\u7539\u753C\u753D\u753F\u7541\u7542\u7543\u7544\u7546\u7547\u7549\u754A\u754D\u7550\u7551\u7552\u7553\u7555\u7556\u7557\u7558"],
["ae80", "\u755D", 7, "\u7567\u7568\u7569\u756B", 6, "\u7573\u7575\u7576\u7577\u757A", 4, "\u7580\u7581\u7582\u7584\u7585\u7587"],
["af40", "\u7588\u7589\u758A\u758C\u758D\u758E\u7590\u7593\u7595\u7598\u759B\u759C\u759E\u75A2\u75A6", 4, "\u75AD\u75B6\u75B7\u75BA\u75BB\u75BF\u75C0\u75C1\u75C6\u75CB\u75CC\u75CE\u75CF\u75D0\u75D1\u75D3\u75D7\u75D9\u75DA\u75DC\u75DD\u75DF\u75E0\u75E1\u75E5\u75E9\u75EC\u75ED\u75EE\u75EF\u75F2\u75F3\u75F5\u75F6\u75F7\u75F8\u75FA\u75FB\u75FD\u75FE\u7602\u7604\u7606\u7607"],
["af80", "\u7608\u7609\u760B\u760D\u760E\u760F\u7611\u7612\u7613\u7614\u7616\u761A\u761C\u761D\u761E\u7621\u7623\u7627\u7628\u762C\u762E\u762F\u7631\u7632\u7636\u7637\u7639\u763A\u763B\u763D\u7641\u7642\u7644"],
["b040", "\u7645", 6, "\u764E", 5, "\u7655\u7657", 4, "\u765D\u765F\u7660\u7661\u7662\u7664", 6, "\u766C\u766D\u766E\u7670", 7, "\u7679\u767A\u767C\u767F\u7680\u7681\u7683\u7685\u7689\u768A\u768C\u768D\u768F\u7690\u7692\u7694\u7695\u7697\u7698\u769A\u769B"],
["b080", "\u769C", 7, "\u76A5", 8, "\u76AF\u76B0\u76B3\u76B5", 9, "\u76C0\u76C1\u76C3\u554A\u963F\u57C3\u6328\u54CE\u5509\u54C0\u7691\u764C\u853C\u77EE\u827E\u788D\u7231\u9698\u978D\u6C28\u5B89\u4FFA\u6309\u6697\u5CB8\u80FA\u6848\u80AE\u6602\u76CE\u51F9\u6556\u71AC\u7FF1\u8884\u50B2\u5965\u61CA\u6FB3\u82AD\u634C\u6252\u53ED\u5427\u7B06\u516B\u75A4\u5DF4\u62D4\u8DCB\u9776\u628A\u8019\u575D\u9738\u7F62\u7238\u767D\u67CF\u767E\u6446\u4F70\u8D25\u62DC\u7A17\u6591\u73ED\u642C\u6273\u822C\u9881\u677F\u7248\u626E\u62CC\u4F34\u74E3\u534A\u529E\u7ECA\u90A6\u5E2E\u6886\u699C\u8180\u7ED1\u68D2\u78C5\u868C\u9551\u508D\u8C24\u82DE\u80DE\u5305\u8912\u5265"],
["b140", "\u76C4\u76C7\u76C9\u76CB\u76CC\u76D3\u76D5\u76D9\u76DA\u76DC\u76DD\u76DE\u76E0", 4, "\u76E6", 7, "\u76F0\u76F3\u76F5\u76F6\u76F7\u76FA\u76FB\u76FD\u76FF\u7700\u7702\u7703\u7705\u7706\u770A\u770C\u770E", 10, "\u771B\u771C\u771D\u771E\u7721\u7723\u7724\u7725\u7727\u772A\u772B"],
["b180", "\u772C\u772E\u7730", 4, "\u7739\u773B\u773D\u773E\u773F\u7742\u7744\u7745\u7746\u7748", 7, "\u7752", 7, "\u775C\u8584\u96F9\u4FDD\u5821\u9971\u5B9D\u62B1\u62A5\u66B4\u8C79\u9C8D\u7206\u676F\u7891\u60B2\u5351\u5317\u8F88\u80CC\u8D1D\u94A1\u500D\u72C8\u5907\u60EB\u7119\u88AB\u5954\u82EF\u672C\u7B28\u5D29\u7EF7\u752D\u6CF5\u8E66\u8FF8\u903C\u9F3B\u6BD4\u9119\u7B14\u5F7C\u78A7\u84D6\u853D\u6BD5\u6BD9\u6BD6\u5E01\u5E87\u75F9\u95ED\u655D\u5F0A\u5FC5\u8F9F\u58C1\u81C2\u907F\u965B\u97AD\u8FB9\u7F16\u8D2C\u6241\u4FBF\u53D8\u535E\u8FA8\u8FA9\u8FAB\u904D\u6807\u5F6A\u8198\u8868\u9CD6\u618B\u522B\u762A\u5F6C\u658C\u6FD2\u6EE8\u5BBE\u6448\u5175\u51B0\u67C4\u4E19\u79C9\u997C\u70B3"],
["b240", "\u775D\u775E\u775F\u7760\u7764\u7767\u7769\u776A\u776D", 11, "\u777A\u777B\u777C\u7781\u7782\u7783\u7786", 5, "\u778F\u7790\u7793", 11, "\u77A1\u77A3\u77A4\u77A6\u77A8\u77AB\u77AD\u77AE\u77AF\u77B1\u77B2\u77B4\u77B6", 4],
["b280", "\u77BC\u77BE\u77C0", 12, "\u77CE", 8, "\u77D8\u77D9\u77DA\u77DD", 4, "\u77E4\u75C5\u5E76\u73BB\u83E0\u64AD\u62E8\u94B5\u6CE2\u535A\u52C3\u640F\u94C2\u7B94\u4F2F\u5E1B\u8236\u8116\u818A\u6E24\u6CCA\u9A73\u6355\u535C\u54FA\u8865\u57E0\u4E0D\u5E03\u6B65\u7C3F\u90E8\u6016\u64E6\u731C\u88C1\u6750\u624D\u8D22\u776C\u8E29\u91C7\u5F69\u83DC\u8521\u9910\u53C2\u8695\u6B8B\u60ED\u60E8\u707F\u82CD\u8231\u4ED3\u6CA7\u85CF\u64CD\u7CD9\u69FD\u66F9\u8349\u5395\u7B56\u4FA7\u518C\u6D4B\u5C42\u8E6D\u63D2\u53C9\u832C\u8336\u67E5\u78B4\u643D\u5BDF\u5C94\u5DEE\u8BE7\u62C6\u67F4\u8C7A\u6400\u63BA\u8749\u998B\u8C17\u7F20\u94F2\u4EA7\u9610\u98A4\u660C\u7316"],
["b340", "\u77E6\u77E8\u77EA\u77EF\u77F0\u77F1\u77F2\u77F4\u77F5\u77F7\u77F9\u77FA\u77FB\u77FC\u7803", 5, "\u780A\u780B\u780E\u780F\u7810\u7813\u7815\u7819\u781B\u781E\u7820\u7821\u7822\u7824\u7828\u782A\u782B\u782E\u782F\u7831\u7832\u7833\u7835\u7836\u783D\u783F\u7841\u7842\u7843\u7844\u7846\u7848\u7849\u784A\u784B\u784D\u784F\u7851\u7853\u7854\u7858\u7859\u785A"],
["b380", "\u785B\u785C\u785E", 11, "\u786F", 7, "\u7878\u7879\u787A\u787B\u787D", 6, "\u573A\u5C1D\u5E38\u957F\u507F\u80A0\u5382\u655E\u7545\u5531\u5021\u8D85\u6284\u949E\u671D\u5632\u6F6E\u5DE2\u5435\u7092\u8F66\u626F\u64A4\u63A3\u5F7B\u6F88\u90F4\u81E3\u8FB0\u5C18\u6668\u5FF1\u6C89\u9648\u8D81\u886C\u6491\u79F0\u57CE\u6A59\u6210\u5448\u4E58\u7A0B\u60E9\u6F84\u8BDA\u627F\u901E\u9A8B\u79E4\u5403\u75F4\u6301\u5319\u6C60\u8FDF\u5F1B\u9A70\u803B\u9F7F\u4F88\u5C3A\u8D64\u7FC5\u65A5\u70BD\u5145\u51B2\u866B\u5D07\u5BA0\u62BD\u916C\u7574\u8E0C\u7A20\u6101\u7B79\u4EC7\u7EF8\u7785\u4E11\u81ED\u521D\u51FA\u6A71\u53A8\u8E87\u9504\u96CF\u6EC1\u9664\u695A"],
["b440", "\u7884\u7885\u7886\u7888\u788A\u788B\u788F\u7890\u7892\u7894\u7895\u7896\u7899\u789D\u789E\u78A0\u78A2\u78A4\u78A6\u78A8", 7, "\u78B5\u78B6\u78B7\u78B8\u78BA\u78BB\u78BC\u78BD\u78BF\u78C0\u78C2\u78C3\u78C4\u78C6\u78C7\u78C8\u78CC\u78CD\u78CE\u78CF\u78D1\u78D2\u78D3\u78D6\u78D7\u78D8\u78DA", 9],
["b480", "\u78E4\u78E5\u78E6\u78E7\u78E9\u78EA\u78EB\u78ED", 4, "\u78F3\u78F5\u78F6\u78F8\u78F9\u78FB", 5, "\u7902\u7903\u7904\u7906", 6, "\u7840\u50A8\u77D7\u6410\u89E6\u5904\u63E3\u5DDD\u7A7F\u693D\u4F20\u8239\u5598\u4E32\u75AE\u7A97\u5E62\u5E8A\u95EF\u521B\u5439\u708A\u6376\u9524\u5782\u6625\u693F\u9187\u5507\u6DF3\u7EAF\u8822\u6233\u7EF0\u75B5\u8328\u78C1\u96CC\u8F9E\u6148\u74F7\u8BCD\u6B64\u523A\u8D50\u6B21\u806A\u8471\u56F1\u5306\u4ECE\u4E1B\u51D1\u7C97\u918B\u7C07\u4FC3\u8E7F\u7BE1\u7A9C\u6467\u5D14\u50AC\u8106\u7601\u7CB9\u6DEC\u7FE0\u6751\u5B58\u5BF8\u78CB\u64AE\u6413\u63AA\u632B\u9519\u642D\u8FBE\u7B54\u7629\u6253\u5927\u5446\u6B79\u50A3\u6234\u5E26\u6B86\u4EE3\u8D37\u888B\u5F85\u902E"],
["b540", "\u790D", 5, "\u7914", 9, "\u791F", 4, "\u7925", 14, "\u7935", 4, "\u793D\u793F\u7942\u7943\u7944\u7945\u7947\u794A", 8, "\u7954\u7955\u7958\u7959\u7961\u7963"],
["b580", "\u7964\u7966\u7969\u796A\u796B\u796C\u796E\u7970", 6, "\u7979\u797B", 4, "\u7982\u7983\u7986\u7987\u7988\u7989\u798B\u798C\u798D\u798E\u7990\u7991\u7992\u6020\u803D\u62C5\u4E39\u5355\u90F8\u63B8\u80C6\u65E6\u6C2E\u4F46\u60EE\u6DE1\u8BDE\u5F39\u86CB\u5F53\u6321\u515A\u8361\u6863\u5200\u6363\u8E48\u5012\u5C9B\u7977\u5BFC\u5230\u7A3B\u60BC\u9053\u76D7\u5FB7\u5F97\u7684\u8E6C\u706F\u767B\u7B49\u77AA\u51F3\u9093\u5824\u4F4E\u6EF4\u8FEA\u654C\u7B1B\u72C4\u6DA4\u7FDF\u5AE1\u62B5\u5E95\u5730\u8482\u7B2C\u5E1D\u5F1F\u9012\u7F14\u98A0\u6382\u6EC7\u7898\u70B9\u5178\u975B\u57AB\u7535\u4F43\u7538\u5E97\u60E6\u5960\u6DC0\u6BBF\u7889\u53FC\u96D5\u51CB\u5201\u6389\u540A\u9493\u8C03\u8DCC\u7239\u789F\u8776\u8FED\u8C0D\u53E0"],
["b640", "\u7993", 6, "\u799B", 11, "\u79A8", 10, "\u79B4", 4, "\u79BC\u79BF\u79C2\u79C4\u79C5\u79C7\u79C8\u79CA\u79CC\u79CE\u79CF\u79D0\u79D3\u79D4\u79D6\u79D7\u79D9", 5, "\u79E0\u79E1\u79E2\u79E5\u79E8\u79EA"],
["b680", "\u79EC\u79EE\u79F1", 6, "\u79F9\u79FA\u79FC\u79FE\u79FF\u7A01\u7A04\u7A05\u7A07\u7A08\u7A09\u7A0A\u7A0C\u7A0F", 4, "\u7A15\u7A16\u7A18\u7A19\u7A1B\u7A1C\u4E01\u76EF\u53EE\u9489\u9876\u9F0E\u952D\u5B9A\u8BA2\u4E22\u4E1C\u51AC\u8463\u61C2\u52A8\u680B\u4F97\u606B\u51BB\u6D1E\u515C\u6296\u6597\u9661\u8C46\u9017\u75D8\u90FD\u7763\u6BD2\u728A\u72EC\u8BFB\u5835\u7779\u8D4C\u675C\u9540\u809A\u5EA6\u6E21\u5992\u7AEF\u77ED\u953B\u6BB5\u65AD\u7F0E\u5806\u5151\u961F\u5BF9\u58A9\u5428\u8E72\u6566\u987F\u56E4\u949D\u76FE\u9041\u6387\u54C6\u591A\u593A\u579B\u8EB2\u6735\u8DFA\u8235\u5241\u60F0\u5815\u86FE\u5CE8\u9E45\u4FC4\u989D\u8BB9\u5A25\u6076\u5384\u627C\u904F\u9102\u997F\u6069\u800C\u513F\u8033\u5C14\u9975\u6D31\u4E8C"],
["b740", "\u7A1D\u7A1F\u7A21\u7A22\u7A24", 14, "\u7A34\u7A35\u7A36\u7A38\u7A3A\u7A3E\u7A40", 5, "\u7A47", 9, "\u7A52", 4, "\u7A58", 16],
["b780", "\u7A69", 6, "\u7A71\u7A72\u7A73\u7A75\u7A7B\u7A7C\u7A7D\u7A7E\u7A82\u7A85\u7A87\u7A89\u7A8A\u7A8B\u7A8C\u7A8E\u7A8F\u7A90\u7A93\u7A94\u7A99\u7A9A\u7A9B\u7A9E\u7AA1\u7AA2\u8D30\u53D1\u7F5A\u7B4F\u4F10\u4E4F\u9600\u6CD5\u73D0\u85E9\u5E06\u756A\u7FFB\u6A0A\u77FE\u9492\u7E41\u51E1\u70E6\u53CD\u8FD4\u8303\u8D29\u72AF\u996D\u6CDB\u574A\u82B3\u65B9\u80AA\u623F\u9632\u59A8\u4EFF\u8BBF\u7EBA\u653E\u83F2\u975E\u5561\u98DE\u80A5\u532A\u8BFD\u5420\u80BA\u5E9F\u6CB8\u8D39\u82AC\u915A\u5429\u6C1B\u5206\u7EB7\u575F\u711A\u6C7E\u7C89\u594B\u4EFD\u5FFF\u6124\u7CAA\u4E30\u5C01\u67AB\u8702\u5CF0\u950B\u98CE\u75AF\u70FD\u9022\u51AF\u7F1D\u8BBD\u5949\u51E4\u4F5B\u5426\u592B\u6577\u80A4\u5B75\u6276\u62C2\u8F90\u5E45\u6C1F\u7B26\u4F0F\u4FD8\u670D"],
["b840", "\u7AA3\u7AA4\u7AA7\u7AA9\u7AAA\u7AAB\u7AAE", 4, "\u7AB4", 10, "\u7AC0", 10, "\u7ACC", 9, "\u7AD7\u7AD8\u7ADA\u7ADB\u7ADC\u7ADD\u7AE1\u7AE2\u7AE4\u7AE7", 5, "\u7AEE\u7AF0\u7AF1\u7AF2\u7AF3"],
["b880", "\u7AF4", 4, "\u7AFB\u7AFC\u7AFE\u7B00\u7B01\u7B02\u7B05\u7B07\u7B09\u7B0C\u7B0D\u7B0E\u7B10\u7B12\u7B13\u7B16\u7B17\u7B18\u7B1A\u7B1C\u7B1D\u7B1F\u7B21\u7B22\u7B23\u7B27\u7B29\u7B2D\u6D6E\u6DAA\u798F\u88B1\u5F17\u752B\u629A\u8F85\u4FEF\u91DC\u65A7\u812F\u8151\u5E9C\u8150\u8D74\u526F\u8986\u8D4B\u590D\u5085\u4ED8\u961C\u7236\u8179\u8D1F\u5BCC\u8BA3\u9644\u5987\u7F1A\u5490\u5676\u560E\u8BE5\u6539\u6982\u9499\u76D6\u6E89\u5E72\u7518\u6746\u67D1\u7AFF\u809D\u8D76\u611F\u79C6\u6562\u8D63\u5188\u521A\u94A2\u7F38\u809B\u7EB2\u5C97\u6E2F\u6760\u7BD9\u768B\u9AD8\u818F\u7F94\u7CD5\u641E\u9550\u7A3F\u544A\u54E5\u6B4C\u6401\u6208\u9E3D\u80F3\u7599\u5272\u9769\u845B\u683C\u86E4\u9601\u9694\u94EC\u4E2A\u5404\u7ED9\u6839\u8DDF\u8015\u66F4\u5E9A\u7FB9"],
["b940", "\u7B2F\u7B30\u7B32\u7B34\u7B35\u7B36\u7B37\u7B39\u7B3B\u7B3D\u7B3F", 5, "\u7B46\u7B48\u7B4A\u7B4D\u7B4E\u7B53\u7B55\u7B57\u7B59\u7B5C\u7B5E\u7B5F\u7B61\u7B63", 10, "\u7B6F\u7B70\u7B73\u7B74\u7B76\u7B78\u7B7A\u7B7C\u7B7D\u7B7F\u7B81\u7B82\u7B83\u7B84\u7B86", 6, "\u7B8E\u7B8F"],
["b980", "\u7B91\u7B92\u7B93\u7B96\u7B98\u7B99\u7B9A\u7B9B\u7B9E\u7B9F\u7BA0\u7BA3\u7BA4\u7BA5\u7BAE\u7BAF\u7BB0\u7BB2\u7BB3\u7BB5\u7BB6\u7BB7\u7BB9", 7, "\u7BC2\u7BC3\u7BC4\u57C2\u803F\u6897\u5DE5\u653B\u529F\u606D\u9F9A\u4F9B\u8EAC\u516C\u5BAB\u5F13\u5DE9\u6C5E\u62F1\u8D21\u5171\u94A9\u52FE\u6C9F\u82DF\u72D7\u57A2\u6784\u8D2D\u591F\u8F9C\u83C7\u5495\u7B8D\u4F30\u6CBD\u5B64\u59D1\u9F13\u53E4\u86CA\u9AA8\u8C37\u80A1\u6545\u987E\u56FA\u96C7\u522E\u74DC\u5250\u5BE1\u6302\u8902\u4E56\u62D0\u602A\u68FA\u5173\u5B98\u51A0\u89C2\u7BA1\u9986\u7F50\u60EF\u704C\u8D2F\u5149\u5E7F\u901B\u7470\u89C4\u572D\u7845\u5F52\u9F9F\u95FA\u8F68\u9B3C\u8BE1\u7678\u6842\u67DC\u8DEA\u8D35\u523D\u8F8A\u6EDA\u68CD\u9505\u90ED\u56FD\u679C\u88F9\u8FC7\u54C8"],
["ba40", "\u7BC5\u7BC8\u7BC9\u7BCA\u7BCB\u7BCD\u7BCE\u7BCF\u7BD0\u7BD2\u7BD4", 4, "\u7BDB\u7BDC\u7BDE\u7BDF\u7BE0\u7BE2\u7BE3\u7BE4\u7BE7\u7BE8\u7BE9\u7BEB\u7BEC\u7BED\u7BEF\u7BF0\u7BF2", 4, "\u7BF8\u7BF9\u7BFA\u7BFB\u7BFD\u7BFF", 7, "\u7C08\u7C09\u7C0A\u7C0D\u7C0E\u7C10", 5, "\u7C17\u7C18\u7C19"],
["ba80", "\u7C1A", 4, "\u7C20", 5, "\u7C28\u7C29\u7C2B", 12, "\u7C39", 5, "\u7C42\u9AB8\u5B69\u6D77\u6C26\u4EA5\u5BB3\u9A87\u9163\u61A8\u90AF\u97E9\u542B\u6DB5\u5BD2\u51FD\u558A\u7F55\u7FF0\u64BC\u634D\u65F1\u61BE\u608D\u710A\u6C57\u6C49\u592F\u676D\u822A\u58D5\u568E\u8C6A\u6BEB\u90DD\u597D\u8017\u53F7\u6D69\u5475\u559D\u8377\u83CF\u6838\u79BE\u548C\u4F55\u5408\u76D2\u8C89\u9602\u6CB3\u6DB8\u8D6B\u8910\u9E64\u8D3A\u563F\u9ED1\u75D5\u5F88\u72E0\u6068\u54FC\u4EA8\u6A2A\u8861\u6052\u8F70\u54C4\u70D8\u8679\u9E3F\u6D2A\u5B8F\u5F18\u7EA2\u5589\u4FAF\u7334\u543C\u539A\u5019\u540E\u547C\u4E4E\u5FFD\u745A\u58F6\u846B\u80E1\u8774\u72D0\u7CCA\u6E56"],
["bb40", "\u7C43", 9, "\u7C4E", 36, "\u7C75", 5, "\u7C7E", 9],
["bb80", "\u7C88\u7C8A", 6, "\u7C93\u7C94\u7C96\u7C99\u7C9A\u7C9B\u7CA0\u7CA1\u7CA3\u7CA6\u7CA7\u7CA8\u7CA9\u7CAB\u7CAC\u7CAD\u7CAF\u7CB0\u7CB4", 4, "\u7CBA\u7CBB\u5F27\u864E\u552C\u62A4\u4E92\u6CAA\u6237\u82B1\u54D7\u534E\u733E\u6ED1\u753B\u5212\u5316\u8BDD\u69D0\u5F8A\u6000\u6DEE\u574F\u6B22\u73AF\u6853\u8FD8\u7F13\u6362\u60A3\u5524\u75EA\u8C62\u7115\u6DA3\u5BA6\u5E7B\u8352\u614C\u9EC4\u78FA\u8757\u7C27\u7687\u51F0\u60F6\u714C\u6643\u5E4C\u604D\u8C0E\u7070\u6325\u8F89\u5FBD\u6062\u86D4\u56DE\u6BC1\u6094\u6167\u5349\u60E0\u6666\u8D3F\u79FD\u4F1A\u70E9\u6C47\u8BB3\u8BF2\u7ED8\u8364\u660F\u5A5A\u9B42\u6D51\u6DF7\u8C41\u6D3B\u4F19\u706B\u83B7\u6216\u60D1\u970D\u8D27\u7978\u51FB\u573E\u57FA\u673A\u7578\u7A3D\u79EF\u7B95"],
["bc40", "\u7CBF\u7CC0\u7CC2\u7CC3\u7CC4\u7CC6\u7CC9\u7CCB\u7CCE", 6, "\u7CD8\u7CDA\u7CDB\u7CDD\u7CDE\u7CE1", 6, "\u7CE9", 5, "\u7CF0", 7, "\u7CF9\u7CFA\u7CFC", 13, "\u7D0B", 5],
["bc80", "\u7D11", 14, "\u7D21\u7D23\u7D24\u7D25\u7D26\u7D28\u7D29\u7D2A\u7D2C\u7D2D\u7D2E\u7D30", 6, "\u808C\u9965\u8FF9\u6FC0\u8BA5\u9E21\u59EC\u7EE9\u7F09\u5409\u6781\u68D8\u8F91\u7C4D\u96C6\u53CA\u6025\u75BE\u6C72\u5373\u5AC9\u7EA7\u6324\u51E0\u810A\u5DF1\u84DF\u6280\u5180\u5B63\u4F0E\u796D\u5242\u60B8\u6D4E\u5BC4\u5BC2\u8BA1\u8BB0\u65E2\u5FCC\u9645\u5993\u7EE7\u7EAA\u5609\u67B7\u5939\u4F73\u5BB6\u52A0\u835A\u988A\u8D3E\u7532\u94BE\u5047\u7A3C\u4EF7\u67B6\u9A7E\u5AC1\u6B7C\u76D1\u575A\u5C16\u7B3A\u95F4\u714E\u517C\u80A9\u8270\u5978\u7F04\u8327\u68C0\u67EC\u78B1\u7877\u62E3\u6361\u7B80\u4FED\u526A\u51CF\u8350\u69DB\u9274\u8DF5\u8D31\u89C1\u952E\u7BAD\u4EF6"],
["bd40", "\u7D37", 54, "\u7D6F", 7],
["bd80", "\u7D78", 32, "\u5065\u8230\u5251\u996F\u6E10\u6E85\u6DA7\u5EFA\u50F5\u59DC\u5C06\u6D46\u6C5F\u7586\u848B\u6868\u5956\u8BB2\u5320\u9171\u964D\u8549\u6912\u7901\u7126\u80F6\u4EA4\u90CA\u6D47\u9A84\u5A07\u56BC\u6405\u94F0\u77EB\u4FA5\u811A\u72E1\u89D2\u997A\u7F34\u7EDE\u527F\u6559\u9175\u8F7F\u8F83\u53EB\u7A96\u63ED\u63A5\u7686\u79F8\u8857\u9636\u622A\u52AB\u8282\u6854\u6770\u6377\u776B\u7AED\u6D01\u7ED3\u89E3\u59D0\u6212\u85C9\u82A5\u754C\u501F\u4ECB\u75A5\u8BEB\u5C4A\u5DFE\u7B4B\u65A4\u91D1\u4ECA\u6D25\u895F\u7D27\u9526\u4EC5\u8C28\u8FDB\u9773\u664B\u7981\u8FD1\u70EC\u6D78"],
["be40", "\u7D99", 12, "\u7DA7", 6, "\u7DAF", 42],
["be80", "\u7DDA", 32, "\u5C3D\u52B2\u8346\u5162\u830E\u775B\u6676\u9CB8\u4EAC\u60CA\u7CBE\u7CB3\u7ECF\u4E95\u8B66\u666F\u9888\u9759\u5883\u656C\u955C\u5F84\u75C9\u9756\u7ADF\u7ADE\u51C0\u70AF\u7A98\u63EA\u7A76\u7EA0\u7396\u97ED\u4E45\u7078\u4E5D\u9152\u53A9\u6551\u65E7\u81FC\u8205\u548E\u5C31\u759A\u97A0\u62D8\u72D9\u75BD\u5C45\u9A79\u83CA\u5C40\u5480\u77E9\u4E3E\u6CAE\u805A\u62D2\u636E\u5DE8\u5177\u8DDD\u8E1E\u952F\u4FF1\u53E5\u60E7\u70AC\u5267\u6350\u9E43\u5A1F\u5026\u7737\u5377\u7EE2\u6485\u652B\u6289\u6398\u5014\u7235\u89C9\u51B3\u8BC0\u7EDD\u5747\u83CC\u94A7\u519B\u541B\u5CFB"],
["bf40", "\u7DFB", 62],
["bf80", "\u7E3A\u7E3C", 4, "\u7E42", 4, "\u7E48", 21, "\u4FCA\u7AE3\u6D5A\u90E1\u9A8F\u5580\u5496\u5361\u54AF\u5F00\u63E9\u6977\u51EF\u6168\u520A\u582A\u52D8\u574E\u780D\u770B\u5EB7\u6177\u7CE0\u625B\u6297\u4EA2\u7095\u8003\u62F7\u70E4\u9760\u5777\u82DB\u67EF\u68F5\u78D5\u9897\u79D1\u58F3\u54B3\u53EF\u6E34\u514B\u523B\u5BA2\u8BFE\u80AF\u5543\u57A6\u6073\u5751\u542D\u7A7A\u6050\u5B54\u63A7\u62A0\u53E3\u6263\u5BC7\u67AF\u54ED\u7A9F\u82E6\u9177\u5E93\u88E4\u5938\u57AE\u630E\u8DE8\u80EF\u5757\u7B77\u4FA9\u5FEB\u5BBD\u6B3E\u5321\u7B50\u72C2\u6846\u77FF\u7736\u65F7\u51B5\u4E8F\u76D4\u5CBF\u7AA5\u8475\u594E\u9B41\u5080"],
["c040", "\u7E5E", 35, "\u7E83", 23, "\u7E9C\u7E9D\u7E9E"],
["c080", "\u7EAE\u7EB4\u7EBB\u7EBC\u7ED6\u7EE4\u7EEC\u7EF9\u7F0A\u7F10\u7F1E\u7F37\u7F39\u7F3B", 6, "\u7F43\u7F46", 9, "\u7F52\u7F53\u9988\u6127\u6E83\u5764\u6606\u6346\u56F0\u62EC\u6269\u5ED3\u9614\u5783\u62C9\u5587\u8721\u814A\u8FA3\u5566\u83B1\u6765\u8D56\u84DD\u5A6A\u680F\u62E6\u7BEE\u9611\u5170\u6F9C\u8C30\u63FD\u89C8\u61D2\u7F06\u70C2\u6EE5\u7405\u6994\u72FC\u5ECA\u90CE\u6717\u6D6A\u635E\u52B3\u7262\u8001\u4F6C\u59E5\u916A\u70D9\u6D9D\u52D2\u4E50\u96F7\u956D\u857E\u78CA\u7D2F\u5121\u5792\u64C2\u808B\u7C7B\u6CEA\u68F1\u695E\u51B7\u5398\u68A8\u7281\u9ECE\u7BF1\u72F8\u79BB\u6F13\u7406\u674E\u91CC\u9CA4\u793C\u8389\u8354\u540F\u6817\u4E3D\u5389\u52B1\u783E\u5386\u5229\u5088\u4F8B\u4FD0"],
["c140", "\u7F56\u7F59\u7F5B\u7F5C\u7F5D\u7F5E\u7F60\u7F63", 4, "\u7F6B\u7F6C\u7F6D\u7F6F\u7F70\u7F73\u7F75\u7F76\u7F77\u7F78\u7F7A\u7F7B\u7F7C\u7F7D\u7F7F\u7F80\u7F82", 7, "\u7F8B\u7F8D\u7F8F", 4, "\u7F95", 4, "\u7F9B\u7F9C\u7FA0\u7FA2\u7FA3\u7FA5\u7FA6\u7FA8", 6, "\u7FB1"],
["c180", "\u7FB3", 4, "\u7FBA\u7FBB\u7FBE\u7FC0\u7FC2\u7FC3\u7FC4\u7FC6\u7FC7\u7FC8\u7FC9\u7FCB\u7FCD\u7FCF", 4, "\u7FD6\u7FD7\u7FD9", 5, "\u7FE2\u7FE3\u75E2\u7ACB\u7C92\u6CA5\u96B6\u529B\u7483\u54E9\u4FE9\u8054\u83B2\u8FDE\u9570\u5EC9\u601C\u6D9F\u5E18\u655B\u8138\u94FE\u604B\u70BC\u7EC3\u7CAE\u51C9\u6881\u7CB1\u826F\u4E24\u8F86\u91CF\u667E\u4EAE\u8C05\u64A9\u804A\u50DA\u7597\u71CE\u5BE5\u8FBD\u6F66\u4E86\u6482\u9563\u5ED6\u6599\u5217\u88C2\u70C8\u52A3\u730E\u7433\u6797\u78F7\u9716\u4E34\u90BB\u9CDE\u6DCB\u51DB\u8D41\u541D\u62CE\u73B2\u83F1\u96F6\u9F84\u94C3\u4F36\u7F9A\u51CC\u7075\u9675\u5CAD\u9886\u53E6\u4EE4\u6E9C\u7409\u69B4\u786B\u998F\u7559\u5218\u7624\u6D41\u67F3\u516D\u9F99\u804B\u5499\u7B3C\u7ABF"],
["c240", "\u7FE4\u7FE7\u7FE8\u7FEA\u7FEB\u7FEC\u7FED\u7FEF\u7FF2\u7FF4", 6, "\u7FFD\u7FFE\u7FFF\u8002\u8007\u8008\u8009\u800A\u800E\u800F\u8011\u8013\u801A\u801B\u801D\u801E\u801F\u8021\u8023\u8024\u802B", 5, "\u8032\u8034\u8039\u803A\u803C\u803E\u8040\u8041\u8044\u8045\u8047\u8048\u8049\u804E\u804F\u8050\u8051\u8053\u8055\u8056\u8057"],
["c280", "\u8059\u805B", 13, "\u806B", 5, "\u8072", 11, "\u9686\u5784\u62E2\u9647\u697C\u5A04\u6402\u7BD3\u6F0F\u964B\u82A6\u5362\u9885\u5E90\u7089\u63B3\u5364\u864F\u9C81\u9E93\u788C\u9732\u8DEF\u8D42\u9E7F\u6F5E\u7984\u5F55\u9646\u622E\u9A74\u5415\u94DD\u4FA3\u65C5\u5C65\u5C61\u7F15\u8651\u6C2F\u5F8B\u7387\u6EE4\u7EFF\u5CE6\u631B\u5B6A\u6EE6\u5375\u4E71\u63A0\u7565\u62A1\u8F6E\u4F26\u4ED1\u6CA6\u7EB6\u8BBA\u841D\u87BA\u7F57\u903B\u9523\u7BA9\u9AA1\u88F8\u843D\u6D1B\u9A86\u7EDC\u5988\u9EBB\u739B\u7801\u8682\u9A6C\u9A82\u561B\u5417\u57CB\u4E70\u9EA6\u5356\u8FC8\u8109\u7792\u9992\u86EE\u6EE1\u8513\u66FC\u6162\u6F2B"],
["c340", "\u807E\u8081\u8082\u8085\u8088\u808A\u808D", 5, "\u8094\u8095\u8097\u8099\u809E\u80A3\u80A6\u80A7\u80A8\u80AC\u80B0\u80B3\u80B5\u80B6\u80B8\u80B9\u80BB\u80C5\u80C7", 4, "\u80CF", 6, "\u80D8\u80DF\u80E0\u80E2\u80E3\u80E6\u80EE\u80F5\u80F7\u80F9\u80FB\u80FE\u80FF\u8100\u8101\u8103\u8104\u8105\u8107\u8108\u810B"],
["c380", "\u810C\u8115\u8117\u8119\u811B\u811C\u811D\u811F", 12, "\u812D\u812E\u8130\u8133\u8134\u8135\u8137\u8139", 4, "\u813F\u8C29\u8292\u832B\u76F2\u6C13\u5FD9\u83BD\u732B\u8305\u951A\u6BDB\u77DB\u94C6\u536F\u8302\u5192\u5E3D\u8C8C\u8D38\u4E48\u73AB\u679A\u6885\u9176\u9709\u7164\u6CA1\u7709\u5A92\u9541\u6BCF\u7F8E\u6627\u5BD0\u59B9\u5A9A\u95E8\u95F7\u4EEC\u840C\u8499\u6AAC\u76DF\u9530\u731B\u68A6\u5B5F\u772F\u919A\u9761\u7CDC\u8FF7\u8C1C\u5F25\u7C73\u79D8\u89C5\u6CCC\u871C\u5BC6\u5E42\u68C9\u7720\u7EF5\u5195\u514D\u52C9\u5A29\u7F05\u9762\u82D7\u63CF\u7784\u85D0\u79D2\u6E3A\u5E99\u5999\u8511\u706D\u6C11\u62BF\u76BF\u654F\u60AF\u95FD\u660E\u879F\u9E23\u94ED\u540D\u547D\u8C2C\u6478"],
["c440", "\u8140", 5, "\u8147\u8149\u814D\u814E\u814F\u8152\u8156\u8157\u8158\u815B", 4, "\u8161\u8162\u8163\u8164\u8166\u8168\u816A\u816B\u816C\u816F\u8172\u8173\u8175\u8176\u8177\u8178\u8181\u8183", 4, "\u8189\u818B\u818C\u818D\u818E\u8190\u8192", 5, "\u8199\u819A\u819E", 4, "\u81A4\u81A5"],
["c480", "\u81A7\u81A9\u81AB", 7, "\u81B4", 5, "\u81BC\u81BD\u81BE\u81BF\u81C4\u81C5\u81C7\u81C8\u81C9\u81CB\u81CD", 6, "\u6479\u8611\u6A21\u819C\u78E8\u6469\u9B54\u62B9\u672B\u83AB\u58A8\u9ED8\u6CAB\u6F20\u5BDE\u964C\u8C0B\u725F\u67D0\u62C7\u7261\u4EA9\u59C6\u6BCD\u5893\u66AE\u5E55\u52DF\u6155\u6728\u76EE\u7766\u7267\u7A46\u62FF\u54EA\u5450\u94A0\u90A3\u5A1C\u7EB3\u6C16\u4E43\u5976\u8010\u5948\u5357\u7537\u96BE\u56CA\u6320\u8111\u607C\u95F9\u6DD6\u5462\u9981\u5185\u5AE9\u80FD\u59AE\u9713\u502A\u6CE5\u5C3C\u62DF\u4F60\u533F\u817B\u9006\u6EBA\u852B\u62C8\u5E74\u78BE\u64B5\u637B\u5FF5\u5A18\u917F\u9E1F\u5C3F\u634F\u8042\u5B7D\u556E\u954A\u954D\u6D85\u60A8\u67E0\u72DE\u51DD\u5B81"],
["c540", "\u81D4", 14, "\u81E4\u81E5\u81E6\u81E8\u81E9\u81EB\u81EE", 4, "\u81F5", 5, "\u81FD\u81FF\u8203\u8207", 4, "\u820E\u820F\u8211\u8213\u8215", 5, "\u821D\u8220\u8224\u8225\u8226\u8227\u8229\u822E\u8232\u823A\u823C\u823D\u823F"],
["c580", "\u8240\u8241\u8242\u8243\u8245\u8246\u8248\u824A\u824C\u824D\u824E\u8250", 7, "\u8259\u825B\u825C\u825D\u825E\u8260", 7, "\u8269\u62E7\u6CDE\u725B\u626D\u94AE\u7EBD\u8113\u6D53\u519C\u5F04\u5974\u52AA\u6012\u5973\u6696\u8650\u759F\u632A\u61E6\u7CEF\u8BFA\u54E6\u6B27\u9E25\u6BB4\u85D5\u5455\u5076\u6CA4\u556A\u8DB4\u722C\u5E15\u6015\u7436\u62CD\u6392\u724C\u5F98\u6E43\u6D3E\u6500\u6F58\u76D8\u78D0\u76FC\u7554\u5224\u53DB\u4E53\u5E9E\u65C1\u802A\u80D6\u629B\u5486\u5228\u70AE\u888D\u8DD1\u6CE1\u5478\u80DA\u57F9\u88F4\u8D54\u966A\u914D\u4F69\u6C9B\u55B7\u76C6\u7830\u62A8\u70F9\u6F8E\u5F6D\u84EC\u68DA\u787C\u7BF7\u81A8\u670B\u9E4F\u6367\u78B0\u576F\u7812\u9739\u6279\u62AB\u5288\u7435\u6BD7"],
["c640", "\u826A\u826B\u826C\u826D\u8271\u8275\u8276\u8277\u8278\u827B\u827C\u8280\u8281\u8283\u8285\u8286\u8287\u8289\u828C\u8290\u8293\u8294\u8295\u8296\u829A\u829B\u829E\u82A0\u82A2\u82A3\u82A7\u82B2\u82B5\u82B6\u82BA\u82BB\u82BC\u82BF\u82C0\u82C2\u82C3\u82C5\u82C6\u82C9\u82D0\u82D6\u82D9\u82DA\u82DD\u82E2\u82E7\u82E8\u82E9\u82EA\u82EC\u82ED\u82EE\u82F0\u82F2\u82F3\u82F5\u82F6\u82F8"],
["c680", "\u82FA\u82FC", 4, "\u830A\u830B\u830D\u8310\u8312\u8313\u8316\u8318\u8319\u831D", 9, "\u8329\u832A\u832E\u8330\u8332\u8337\u833B\u833D\u5564\u813E\u75B2\u76AE\u5339\u75DE\u50FB\u5C41\u8B6C\u7BC7\u504F\u7247\u9A97\u98D8\u6F02\u74E2\u7968\u6487\u77A5\u62FC\u9891\u8D2B\u54C1\u8058\u4E52\u576A\u82F9\u840D\u5E73\u51ED\u74F6\u8BC4\u5C4F\u5761\u6CFC\u9887\u5A46\u7834\u9B44\u8FEB\u7C95\u5256\u6251\u94FA\u4EC6\u8386\u8461\u83E9\u84B2\u57D4\u6734\u5703\u666E\u6D66\u8C31\u66DD\u7011\u671F\u6B3A\u6816\u621A\u59BB\u4E03\u51C4\u6F06\u67D2\u6C8F\u5176\u68CB\u5947\u6B67\u7566\u5D0E\u8110\u9F50\u65D7\u7948\u7941\u9A91\u8D77\u5C82\u4E5E\u4F01\u542F\u5951\u780C\u5668\u6C14\u8FC4\u5F03\u6C7D\u6CE3\u8BAB\u6390"],
["c740", "\u833E\u833F\u8341\u8342\u8344\u8345\u8348\u834A", 4, "\u8353\u8355", 4, "\u835D\u8362\u8370", 6, "\u8379\u837A\u837E", 6, "\u8387\u8388\u838A\u838B\u838C\u838D\u838F\u8390\u8391\u8394\u8395\u8396\u8397\u8399\u839A\u839D\u839F\u83A1", 6, "\u83AC\u83AD\u83AE"],
["c780", "\u83AF\u83B5\u83BB\u83BE\u83BF\u83C2\u83C3\u83C4\u83C6\u83C8\u83C9\u83CB\u83CD\u83CE\u83D0\u83D1\u83D2\u83D3\u83D5\u83D7\u83D9\u83DA\u83DB\u83DE\u83E2\u83E3\u83E4\u83E6\u83E7\u83E8\u83EB\u83EC\u83ED\u6070\u6D3D\u7275\u6266\u948E\u94C5\u5343\u8FC1\u7B7E\u4EDF\u8C26\u4E7E\u9ED4\u94B1\u94B3\u524D\u6F5C\u9063\u6D45\u8C34\u5811\u5D4C\u6B20\u6B49\u67AA\u545B\u8154\u7F8C\u5899\u8537\u5F3A\u62A2\u6A47\u9539\u6572\u6084\u6865\u77A7\u4E54\u4FA8\u5DE7\u9798\u64AC\u7FD8\u5CED\u4FCF\u7A8D\u5207\u8304\u4E14\u602F\u7A83\u94A6\u4FB5\u4EB2\u79E6\u7434\u52E4\u82B9\u64D2\u79BD\u5BDD\u6C81\u9752\u8F7B\u6C22\u503E\u537F\u6E05\u64CE\u6674\u6C30\u60C5\u9877\u8BF7\u5E86\u743C\u7A77\u79CB\u4E18\u90B1\u7403\u6C42\u56DA\u914B\u6CC5\u8D8B\u533A\u86C6\u66F2\u8EAF\u5C48\u9A71\u6E20"],
["c840", "\u83EE\u83EF\u83F3", 4, "\u83FA\u83FB\u83FC\u83FE\u83FF\u8400\u8402\u8405\u8407\u8408\u8409\u840A\u8410\u8412", 5, "\u8419\u841A\u841B\u841E", 5, "\u8429", 7, "\u8432", 5, "\u8439\u843A\u843B\u843E", 7, "\u8447\u8448\u8449"],
["c880", "\u844A", 6, "\u8452", 4, "\u8458\u845D\u845E\u845F\u8460\u8462\u8464", 4, "\u846A\u846E\u846F\u8470\u8472\u8474\u8477\u8479\u847B\u847C\u53D6\u5A36\u9F8B\u8DA3\u53BB\u5708\u98A7\u6743\u919B\u6CC9\u5168\u75CA\u62F3\u72AC\u5238\u529D\u7F3A\u7094\u7638\u5374\u9E4A\u69B7\u786E\u96C0\u88D9\u7FA4\u7136\u71C3\u5189\u67D3\u74E4\u58E4\u6518\u56B7\u8BA9\u9976\u6270\u7ED5\u60F9\u70ED\u58EC\u4EC1\u4EBA\u5FCD\u97E7\u4EFB\u8BA4\u5203\u598A\u7EAB\u6254\u4ECD\u65E5\u620E\u8338\u84C9\u8363\u878D\u7194\u6EB6\u5BB9\u7ED2\u5197\u63C9\u67D4\u8089\u8339\u8815\u5112\u5B7A\u5982\u8FB1\u4E73\u6C5D\u5165\u8925\u8F6F\u962E\u854A\u745E\u9510\u95F0\u6DA6\u82E5\u5F31\u6492\u6D12\u8428\u816E\u9CC3\u585E\u8D5B\u4E09\u53C1"],
["c940", "\u847D", 4, "\u8483\u8484\u8485\u8486\u848A\u848D\u848F", 7, "\u8498\u849A\u849B\u849D\u849E\u849F\u84A0\u84A2", 12, "\u84B0\u84B1\u84B3\u84B5\u84B6\u84B7\u84BB\u84BC\u84BE\u84C0\u84C2\u84C3\u84C5\u84C6\u84C7\u84C8\u84CB\u84CC\u84CE\u84CF\u84D2\u84D4\u84D5\u84D7"],
["c980", "\u84D8", 4, "\u84DE\u84E1\u84E2\u84E4\u84E7", 4, "\u84ED\u84EE\u84EF\u84F1", 10, "\u84FD\u84FE\u8500\u8501\u8502\u4F1E\u6563\u6851\u55D3\u4E27\u6414\u9A9A\u626B\u5AC2\u745F\u8272\u6DA9\u68EE\u50E7\u838E\u7802\u6740\u5239\u6C99\u7EB1\u50BB\u5565\u715E\u7B5B\u6652\u73CA\u82EB\u6749\u5C71\u5220\u717D\u886B\u95EA\u9655\u64C5\u8D61\u81B3\u5584\u6C55\u6247\u7F2E\u5892\u4F24\u5546\u8D4F\u664C\u4E0A\u5C1A\u88F3\u68A2\u634E\u7A0D\u70E7\u828D\u52FA\u97F6\u5C11\u54E8\u90B5\u7ECD\u5962\u8D4A\u86C7\u820C\u820D\u8D66\u6444\u5C04\u6151\u6D89\u793E\u8BBE\u7837\u7533\u547B\u4F38\u8EAB\u6DF1\u5A20\u7EC5\u795E\u6C88\u5BA1\u5A76\u751A\u80BE\u614E\u6E17\u58F0\u751F\u7525\u7272\u5347\u7EF3"],
["ca40", "\u8503", 8, "\u850D\u850E\u850F\u8510\u8512\u8514\u8515\u8516\u8518\u8519\u851B\u851C\u851D\u851E\u8520\u8522", 8, "\u852D", 9, "\u853E", 4, "\u8544\u8545\u8546\u8547\u854B", 10],
["ca80", "\u8557\u8558\u855A\u855B\u855C\u855D\u855F", 4, "\u8565\u8566\u8567\u8569", 8, "\u8573\u8575\u8576\u8577\u8578\u857C\u857D\u857F\u8580\u8581\u7701\u76DB\u5269\u80DC\u5723\u5E08\u5931\u72EE\u65BD\u6E7F\u8BD7\u5C38\u8671\u5341\u77F3\u62FE\u65F6\u4EC0\u98DF\u8680\u5B9E\u8BC6\u53F2\u77E2\u4F7F\u5C4E\u9A76\u59CB\u5F0F\u793A\u58EB\u4E16\u67FF\u4E8B\u62ED\u8A93\u901D\u52BF\u662F\u55DC\u566C\u9002\u4ED5\u4F8D\u91CA\u9970\u6C0F\u5E02\u6043\u5BA4\u89C6\u8BD5\u6536\u624B\u9996\u5B88\u5BFF\u6388\u552E\u53D7\u7626\u517D\u852C\u67A2\u68B3\u6B8A\u6292\u8F93\u53D4\u8212\u6DD1\u758F\u4E66\u8D4E\u5B70\u719F\u85AF\u6691\u66D9\u7F72\u8700\u9ECD\u9F20\u5C5E\u672F\u8FF0\u6811\u675F\u620D\u7AD6\u5885\u5EB6\u6570\u6F31"],
["cb40", "\u8582\u8583\u8586\u8588", 6, "\u8590", 10, "\u859D", 6, "\u85A5\u85A6\u85A7\u85A9\u85AB\u85AC\u85AD\u85B1", 5, "\u85B8\u85BA", 6, "\u85C2", 6, "\u85CA", 4, "\u85D1\u85D2"],
["cb80", "\u85D4\u85D6", 5, "\u85DD", 6, "\u85E5\u85E6\u85E7\u85E8\u85EA", 14, "\u6055\u5237\u800D\u6454\u8870\u7529\u5E05\u6813\u62F4\u971C\u53CC\u723D\u8C01\u6C34\u7761\u7A0E\u542E\u77AC\u987A\u821C\u8BF4\u7855\u6714\u70C1\u65AF\u6495\u5636\u601D\u79C1\u53F8\u4E1D\u6B7B\u8086\u5BFA\u55E3\u56DB\u4F3A\u4F3C\u9972\u5DF3\u677E\u8038\u6002\u9882\u9001\u5B8B\u8BBC\u8BF5\u641C\u8258\u64DE\u55FD\u82CF\u9165\u4FD7\u7D20\u901F\u7C9F\u50F3\u5851\u6EAF\u5BBF\u8BC9\u8083\u9178\u849C\u7B97\u867D\u968B\u968F\u7EE5\u9AD3\u788E\u5C81\u7A57\u9042\u96A7\u795F\u5B59\u635F\u7B0B\u84D1\u68AD\u5506\u7F29\u7410\u7D22\u9501\u6240\u584C\u4ED6\u5B83\u5979\u5854"],
["cc40", "\u85F9\u85FA\u85FC\u85FD\u85FE\u8600", 4, "\u8606", 10, "\u8612\u8613\u8614\u8615\u8617", 15, "\u8628\u862A", 13, "\u8639\u863A\u863B\u863D\u863E\u863F\u8640"],
["cc80", "\u8641", 11, "\u8652\u8653\u8655", 4, "\u865B\u865C\u865D\u865F\u8660\u8661\u8663", 7, "\u736D\u631E\u8E4B\u8E0F\u80CE\u82D4\u62AC\u53F0\u6CF0\u915E\u592A\u6001\u6C70\u574D\u644A\u8D2A\u762B\u6EE9\u575B\u6A80\u75F0\u6F6D\u8C2D\u8C08\u5766\u6BEF\u8892\u78B3\u63A2\u53F9\u70AD\u6C64\u5858\u642A\u5802\u68E0\u819B\u5510\u7CD6\u5018\u8EBA\u6DCC\u8D9F\u70EB\u638F\u6D9B\u6ED4\u7EE6\u8404\u6843\u9003\u6DD8\u9676\u8BA8\u5957\u7279\u85E4\u817E\u75BC\u8A8A\u68AF\u5254\u8E22\u9511\u63D0\u9898\u8E44\u557C\u4F53\u66FF\u568F\u60D5\u6D95\u5243\u5C49\u5929\u6DFB\u586B\u7530\u751C\u606C\u8214\u8146\u6311\u6761\u8FE2\u773A\u8DF3\u8D34\u94C1\u5E16\u5385\u542C\u70C3"],
["cd40", "\u866D\u866F\u8670\u8672", 6, "\u8683", 6, "\u868E", 4, "\u8694\u8696", 5, "\u869E", 4, "\u86A5\u86A6\u86AB\u86AD\u86AE\u86B2\u86B3\u86B7\u86B8\u86B9\u86BB", 4, "\u86C1\u86C2\u86C3\u86C5\u86C8\u86CC\u86CD\u86D2\u86D3\u86D5\u86D6\u86D7\u86DA\u86DC"],
["cd80", "\u86DD\u86E0\u86E1\u86E2\u86E3\u86E5\u86E6\u86E7\u86E8\u86EA\u86EB\u86EC\u86EF\u86F5\u86F6\u86F7\u86FA\u86FB\u86FC\u86FD\u86FF\u8701\u8704\u8705\u8706\u870B\u870C\u870E\u870F\u8710\u8711\u8714\u8716\u6C40\u5EF7\u505C\u4EAD\u5EAD\u633A\u8247\u901A\u6850\u916E\u77B3\u540C\u94DC\u5F64\u7AE5\u6876\u6345\u7B52\u7EDF\u75DB\u5077\u6295\u5934\u900F\u51F8\u79C3\u7A81\u56FE\u5F92\u9014\u6D82\u5C60\u571F\u5410\u5154\u6E4D\u56E2\u63A8\u9893\u817F\u8715\u892A\u9000\u541E\u5C6F\u81C0\u62D6\u6258\u8131\u9E35\u9640\u9A6E\u9A7C\u692D\u59A5\u62D3\u553E\u6316\u54C7\u86D9\u6D3C\u5A03\u74E6\u889C\u6B6A\u5916\u8C4C\u5F2F\u6E7E\u73A9\u987D\u4E38\u70F7\u5B8C\u7897\u633D\u665A\u7696\u60CB\u5B9B\u5A49\u4E07\u8155\u6C6A\u738B\u4EA1\u6789\u7F51\u5F80\u65FA\u671B\u5FD8\u5984\u5A01"],
["ce40", "\u8719\u871B\u871D\u871F\u8720\u8724\u8726\u8727\u8728\u872A\u872B\u872C\u872D\u872F\u8730\u8732\u8733\u8735\u8736\u8738\u8739\u873A\u873C\u873D\u8740", 6, "\u874A\u874B\u874D\u874F\u8750\u8751\u8752\u8754\u8755\u8756\u8758\u875A", 5, "\u8761\u8762\u8766", 7, "\u876F\u8771\u8772\u8773\u8775"],
["ce80", "\u8777\u8778\u8779\u877A\u877F\u8780\u8781\u8784\u8786\u8787\u8789\u878A\u878C\u878E", 4, "\u8794\u8795\u8796\u8798", 6, "\u87A0", 4, "\u5DCD\u5FAE\u5371\u97E6\u8FDD\u6845\u56F4\u552F\u60DF\u4E3A\u6F4D\u7EF4\u82C7\u840E\u59D4\u4F1F\u4F2A\u5C3E\u7EAC\u672A\u851A\u5473\u754F\u80C3\u5582\u9B4F\u4F4D\u6E2D\u8C13\u5C09\u6170\u536B\u761F\u6E29\u868A\u6587\u95FB\u7EB9\u543B\u7A33\u7D0A\u95EE\u55E1\u7FC1\u74EE\u631D\u8717\u6DA1\u7A9D\u6211\u65A1\u5367\u63E1\u6C83\u5DEB\u545C\u94A8\u4E4C\u6C61\u8BEC\u5C4B\u65E0\u829C\u68A7\u543E\u5434\u6BCB\u6B66\u4E94\u6342\u5348\u821E\u4F0D\u4FAE\u575E\u620A\u96FE\u6664\u7269\u52FF\u52A1\u609F\u8BEF\u6614\u7199\u6790\u897F\u7852\u77FD\u6670\u563B\u5438\u9521\u727A"],
["cf40", "\u87A5\u87A6\u87A7\u87A9\u87AA\u87AE\u87B0\u87B1\u87B2\u87B4\u87B6\u87B7\u87B8\u87B9\u87BB\u87BC\u87BE\u87BF\u87C1", 4, "\u87C7\u87C8\u87C9\u87CC", 4, "\u87D4", 6, "\u87DC\u87DD\u87DE\u87DF\u87E1\u87E2\u87E3\u87E4\u87E6\u87E7\u87E8\u87E9\u87EB\u87EC\u87ED\u87EF", 9],
["cf80", "\u87FA\u87FB\u87FC\u87FD\u87FF\u8800\u8801\u8802\u8804", 5, "\u880B", 7, "\u8814\u8817\u8818\u8819\u881A\u881C", 4, "\u8823\u7A00\u606F\u5E0C\u6089\u819D\u5915\u60DC\u7184\u70EF\u6EAA\u6C50\u7280\u6A84\u88AD\u5E2D\u4E60\u5AB3\u559C\u94E3\u6D17\u7CFB\u9699\u620F\u7EC6\u778E\u867E\u5323\u971E\u8F96\u6687\u5CE1\u4FA0\u72ED\u4E0B\u53A6\u590F\u5413\u6380\u9528\u5148\u4ED9\u9C9C\u7EA4\u54B8\u8D24\u8854\u8237\u95F2\u6D8E\u5F26\u5ACC\u663E\u9669\u73B0\u732E\u53BF\u817A\u9985\u7FA1\u5BAA\u9677\u9650\u7EBF\u76F8\u53A2\u9576\u9999\u7BB1\u8944\u6E58\u4E61\u7FD4\u7965\u8BE6\u60F3\u54CD\u4EAB\u9879\u5DF7\u6A61\u50CF\u5411\u8C61\u8427\u785D\u9704\u524A\u54EE\u56A3\u9500\u6D88\u5BB5\u6DC6\u6653"],
["d040", "\u8824", 13, "\u8833", 5, "\u883A\u883B\u883D\u883E\u883F\u8841\u8842\u8843\u8846", 5, "\u884E", 5, "\u8855\u8856\u8858\u885A", 6, "\u8866\u8867\u886A\u886D\u886F\u8871\u8873\u8874\u8875\u8876\u8878\u8879\u887A"],
["d080", "\u887B\u887C\u8880\u8883\u8886\u8887\u8889\u888A\u888C\u888E\u888F\u8890\u8891\u8893\u8894\u8895\u8897", 4, "\u889D", 4, "\u88A3\u88A5", 5, "\u5C0F\u5B5D\u6821\u8096\u5578\u7B11\u6548\u6954\u4E9B\u6B47\u874E\u978B\u534F\u631F\u643A\u90AA\u659C\u80C1\u8C10\u5199\u68B0\u5378\u87F9\u61C8\u6CC4\u6CFB\u8C22\u5C51\u85AA\u82AF\u950C\u6B23\u8F9B\u65B0\u5FFB\u5FC3\u4FE1\u8845\u661F\u8165\u7329\u60FA\u5174\u5211\u578B\u5F62\u90A2\u884C\u9192\u5E78\u674F\u6027\u59D3\u5144\u51F6\u80F8\u5308\u6C79\u96C4\u718A\u4F11\u4FEE\u7F9E\u673D\u55C5\u9508\u79C0\u8896\u7EE3\u589F\u620C\u9700\u865A\u5618\u987B\u5F90\u8BB8\u84C4\u9157\u53D9\u65ED\u5E8F\u755C\u6064\u7D6E\u5A7F\u7EEA\u7EED\u8F69\u55A7\u5BA3\u60AC\u65CB\u7384"],
["d140", "\u88AC\u88AE\u88AF\u88B0\u88B2", 4, "\u88B8\u88B9\u88BA\u88BB\u88BD\u88BE\u88BF\u88C0\u88C3\u88C4\u88C7\u88C8\u88CA\u88CB\u88CC\u88CD\u88CF\u88D0\u88D1\u88D3\u88D6\u88D7\u88DA", 4, "\u88E0\u88E1\u88E6\u88E7\u88E9", 6, "\u88F2\u88F5\u88F6\u88F7\u88FA\u88FB\u88FD\u88FF\u8900\u8901\u8903", 5],
["d180", "\u8909\u890B", 4, "\u8911\u8914", 4, "\u891C", 4, "\u8922\u8923\u8924\u8926\u8927\u8928\u8929\u892C\u892D\u892E\u892F\u8931\u8932\u8933\u8935\u8937\u9009\u7663\u7729\u7EDA\u9774\u859B\u5B66\u7A74\u96EA\u8840\u52CB\u718F\u5FAA\u65EC\u8BE2\u5BFB\u9A6F\u5DE1\u6B89\u6C5B\u8BAD\u8BAF\u900A\u8FC5\u538B\u62BC\u9E26\u9E2D\u5440\u4E2B\u82BD\u7259\u869C\u5D16\u8859\u6DAF\u96C5\u54D1\u4E9A\u8BB6\u7109\u54BD\u9609\u70DF\u6DF9\u76D0\u4E25\u7814\u8712\u5CA9\u5EF6\u8A00\u989C\u960E\u708E\u6CBF\u5944\u63A9\u773C\u884D\u6F14\u8273\u5830\u71D5\u538C\u781A\u96C1\u5501\u5F66\u7130\u5BB4\u8C1A\u9A8C\u6B83\u592E\u9E2F\u79E7\u6768\u626C\u4F6F\u75A1\u7F8A\u6D0B\u9633\u6C27\u4EF0\u75D2\u517B\u6837\u6F3E\u9080\u8170\u5996\u7476"],
["d240", "\u8938", 8, "\u8942\u8943\u8945", 24, "\u8960", 5, "\u8967", 19, "\u897C"],
["d280", "\u897D\u897E\u8980\u8982\u8984\u8985\u8987", 26, "\u6447\u5C27\u9065\u7A91\u8C23\u59DA\u54AC\u8200\u836F\u8981\u8000\u6930\u564E\u8036\u7237\u91CE\u51B6\u4E5F\u9875\u6396\u4E1A\u53F6\u66F3\u814B\u591C\u6DB2\u4E00\u58F9\u533B\u63D6\u94F1\u4F9D\u4F0A\u8863\u9890\u5937\u9057\u79FB\u4EEA\u80F0\u7591\u6C82\u5B9C\u59E8\u5F5D\u6905\u8681\u501A\u5DF2\u4E59\u77E3\u4EE5\u827A\u6291\u6613\u9091\u5C79\u4EBF\u5F79\u81C6\u9038\u8084\u75AB\u4EA6\u88D4\u610F\u6BC5\u5FC6\u4E49\u76CA\u6EA2\u8BE3\u8BAE\u8C0A\u8BD1\u5F02\u7FFC\u7FCC\u7ECE\u8335\u836B\u56E0\u6BB7\u97F3\u9634\u59FB\u541F\u94F6\u6DEB\u5BC5\u996E\u5C39\u5F15\u9690"],
["d340", "\u89A2", 30, "\u89C3\u89CD\u89D3\u89D4\u89D5\u89D7\u89D8\u89D9\u89DB\u89DD\u89DF\u89E0\u89E1\u89E2\u89E4\u89E7\u89E8\u89E9\u89EA\u89EC\u89ED\u89EE\u89F0\u89F1\u89F2\u89F4", 6],
["d380", "\u89FB", 4, "\u8A01", 5, "\u8A08", 21, "\u5370\u82F1\u6A31\u5A74\u9E70\u5E94\u7F28\u83B9\u8424\u8425\u8367\u8747\u8FCE\u8D62\u76C8\u5F71\u9896\u786C\u6620\u54DF\u62E5\u4F63\u81C3\u75C8\u5EB8\u96CD\u8E0A\u86F9\u548F\u6CF3\u6D8C\u6C38\u607F\u52C7\u7528\u5E7D\u4F18\u60A0\u5FE7\u5C24\u7531\u90AE\u94C0\u72B9\u6CB9\u6E38\u9149\u6709\u53CB\u53F3\u4F51\u91C9\u8BF1\u53C8\u5E7C\u8FC2\u6DE4\u4E8E\u76C2\u6986\u865E\u611A\u8206\u4F59\u4FDE\u903E\u9C7C\u6109\u6E1D\u6E14\u9685\u4E88\u5A31\u96E8\u4E0E\u5C7F\u79B9\u5B87\u8BED\u7FBD\u7389\u57DF\u828B\u90C1\u5401\u9047\u55BB\u5CEA\u5FA1\u6108\u6B32\u72F1\u80B2\u8A89"],
["d440", "\u8A1E", 31, "\u8A3F", 8, "\u8A49", 21],
["d480", "\u8A5F", 25, "\u8A7A", 6, "\u6D74\u5BD3\u88D5\u9884\u8C6B\u9A6D\u9E33\u6E0A\u51A4\u5143\u57A3\u8881\u539F\u63F4\u8F95\u56ED\u5458\u5706\u733F\u6E90\u7F18\u8FDC\u82D1\u613F\u6028\u9662\u66F0\u7EA6\u8D8A\u8DC3\u94A5\u5CB3\u7CA4\u6708\u60A6\u9605\u8018\u4E91\u90E7\u5300\u9668\u5141\u8FD0\u8574\u915D\u6655\u97F5\u5B55\u531D\u7838\u6742\u683D\u54C9\u707E\u5BB0\u8F7D\u518D\u5728\u54B1\u6512\u6682\u8D5E\u8D43\u810F\u846C\u906D\u7CDF\u51FF\u85FB\u67A3\u65E9\u6FA1\u86A4\u8E81\u566A\u9020\u7682\u7076\u71E5\u8D23\u62E9\u5219\u6CFD\u8D3C\u600E\u589E\u618E\u66FE\u8D60\u624E\u55B3\u6E23\u672D\u8F67"],
["d540", "\u8A81", 7, "\u8A8B", 7, "\u8A94", 46],
["d580", "\u8AC3", 32, "\u94E1\u95F8\u7728\u6805\u69A8\u548B\u4E4D\u70B8\u8BC8\u6458\u658B\u5B85\u7A84\u503A\u5BE8\u77BB\u6BE1\u8A79\u7C98\u6CBE\u76CF\u65A9\u8F97\u5D2D\u5C55\u8638\u6808\u5360\u6218\u7AD9\u6E5B\u7EFD\u6A1F\u7AE0\u5F70\u6F33\u5F20\u638C\u6DA8\u6756\u4E08\u5E10\u8D26\u4ED7\u80C0\u7634\u969C\u62DB\u662D\u627E\u6CBC\u8D75\u7167\u7F69\u5146\u8087\u53EC\u906E\u6298\u54F2\u86F0\u8F99\u8005\u9517\u8517\u8FD9\u6D59\u73CD\u659F\u771F\u7504\u7827\u81FB\u8D1E\u9488\u4FA6\u6795\u75B9\u8BCA\u9707\u632F\u9547\u9635\u84B8\u6323\u7741\u5F81\u72F0\u4E89\u6014\u6574\u62EF\u6B63\u653F"],
["d640", "\u8AE4", 34, "\u8B08", 27],
["d680", "\u8B24\u8B25\u8B27", 30, "\u5E27\u75C7\u90D1\u8BC1\u829D\u679D\u652F\u5431\u8718\u77E5\u80A2\u8102\u6C41\u4E4B\u7EC7\u804C\u76F4\u690D\u6B96\u6267\u503C\u4F84\u5740\u6307\u6B62\u8DBE\u53EA\u65E8\u7EB8\u5FD7\u631A\u63B7\u81F3\u81F4\u7F6E\u5E1C\u5CD9\u5236\u667A\u79E9\u7A1A\u8D28\u7099\u75D4\u6EDE\u6CBB\u7A92\u4E2D\u76C5\u5FE0\u949F\u8877\u7EC8\u79CD\u80BF\u91CD\u4EF2\u4F17\u821F\u5468\u5DDE\u6D32\u8BCC\u7CA5\u8F74\u8098\u5E1A\u5492\u76B1\u5B99\u663C\u9AA4\u73E0\u682A\u86DB\u6731\u732A\u8BF8\u8BDB\u9010\u7AF9\u70DB\u716E\u62C4\u77A9\u5631\u4E3B\u8457\u67F1\u52A9\u86C0\u8D2E\u94F8\u7B51"],
["d740", "\u8B46", 31, "\u8B67", 4, "\u8B6D", 25],
["d780", "\u8B87", 24, "\u8BAC\u8BB1\u8BBB\u8BC7\u8BD0\u8BEA\u8C09\u8C1E\u4F4F\u6CE8\u795D\u9A7B\u6293\u722A\u62FD\u4E13\u7816\u8F6C\u64B0\u8D5A\u7BC6\u6869\u5E84\u88C5\u5986\u649E\u58EE\u72B6\u690E\u9525\u8FFD\u8D58\u5760\u7F00\u8C06\u51C6\u6349\u62D9\u5353\u684C\u7422\u8301\u914C\u5544\u7740\u707C\u6D4A\u5179\u54A8\u8D44\u59FF\u6ECB\u6DC4\u5B5C\u7D2B\u4ED4\u7C7D\u6ED3\u5B50\u81EA\u6E0D\u5B57\u9B03\u68D5\u8E2A\u5B97\u7EFC\u603B\u7EB5\u90B9\u8D70\u594F\u63CD\u79DF\u8DB3\u5352\u65CF\u7956\u8BC5\u963B\u7EC4\u94BB\u7E82\u5634\u9189\u6700\u7F6A\u5C0A\u9075\u6628\u5DE6\u4F50\u67DE\u505A\u4F5C\u5750\u5EA7"],
["d840", "\u8C38", 8, "\u8C42\u8C43\u8C44\u8C45\u8C48\u8C4A\u8C4B\u8C4D", 7, "\u8C56\u8C57\u8C58\u8C59\u8C5B", 5, "\u8C63", 6, "\u8C6C", 6, "\u8C74\u8C75\u8C76\u8C77\u8C7B", 6, "\u8C83\u8C84\u8C86\u8C87"],
["d880", "\u8C88\u8C8B\u8C8D", 6, "\u8C95\u8C96\u8C97\u8C99", 20, "\u4E8D\u4E0C\u5140\u4E10\u5EFF\u5345\u4E15\u4E98\u4E1E\u9B32\u5B6C\u5669\u4E28\u79BA\u4E3F\u5315\u4E47\u592D\u723B\u536E\u6C10\u56DF\u80E4\u9997\u6BD3\u777E\u9F17\u4E36\u4E9F\u9F10\u4E5C\u4E69\u4E93\u8288\u5B5B\u556C\u560F\u4EC4\u538D\u539D\u53A3\u53A5\u53AE\u9765\u8D5D\u531A\u53F5\u5326\u532E\u533E\u8D5C\u5366\u5363\u5202\u5208\u520E\u522D\u5233\u523F\u5240\u524C\u525E\u5261\u525C\u84AF\u527D\u5282\u5281\u5290\u5293\u5182\u7F54\u4EBB\u4EC3\u4EC9\u4EC2\u4EE8\u4EE1\u4EEB\u4EDE\u4F1B\u4EF3\u4F22\u4F64\u4EF5\u4F25\u4F27\u4F09\u4F2B\u4F5E\u4F67\u6538\u4F5A\u4F5D"],
["d940", "\u8CAE", 62],
["d980", "\u8CED", 32, "\u4F5F\u4F57\u4F32\u4F3D\u4F76\u4F74\u4F91\u4F89\u4F83\u4F8F\u4F7E\u4F7B\u4FAA\u4F7C\u4FAC\u4F94\u4FE6\u4FE8\u4FEA\u4FC5\u4FDA\u4FE3\u4FDC\u4FD1\u4FDF\u4FF8\u5029\u504C\u4FF3\u502C\u500F\u502E\u502D\u4FFE\u501C\u500C\u5025\u5028\u507E\u5043\u5055\u5048\u504E\u506C\u507B\u50A5\u50A7\u50A9\u50BA\u50D6\u5106\u50ED\u50EC\u50E6\u50EE\u5107\u510B\u4EDD\u6C3D\u4F58\u4F65\u4FCE\u9FA0\u6C46\u7C74\u516E\u5DFD\u9EC9\u9998\u5181\u5914\u52F9\u530D\u8A07\u5310\u51EB\u5919\u5155\u4EA0\u5156\u4EB3\u886E\u88A4\u4EB5\u8114\u88D2\u7980\u5B34\u8803\u7FB8\u51AB\u51B1\u51BD\u51BC"],
["da40", "\u8D0E", 14, "\u8D20\u8D51\u8D52\u8D57\u8D5F\u8D65\u8D68\u8D69\u8D6A\u8D6C\u8D6E\u8D6F\u8D71\u8D72\u8D78", 8, "\u8D82\u8D83\u8D86\u8D87\u8D88\u8D89\u8D8C", 4, "\u8D92\u8D93\u8D95", 9, "\u8DA0\u8DA1"],
["da80", "\u8DA2\u8DA4", 12, "\u8DB2\u8DB6\u8DB7\u8DB9\u8DBB\u8DBD\u8DC0\u8DC1\u8DC2\u8DC5\u8DC7\u8DC8\u8DC9\u8DCA\u8DCD\u8DD0\u8DD2\u8DD3\u8DD4\u51C7\u5196\u51A2\u51A5\u8BA0\u8BA6\u8BA7\u8BAA\u8BB4\u8BB5\u8BB7\u8BC2\u8BC3\u8BCB\u8BCF\u8BCE\u8BD2\u8BD3\u8BD4\u8BD6\u8BD8\u8BD9\u8BDC\u8BDF\u8BE0\u8BE4\u8BE8\u8BE9\u8BEE\u8BF0\u8BF3\u8BF6\u8BF9\u8BFC\u8BFF\u8C00\u8C02\u8C04\u8C07\u8C0C\u8C0F\u8C11\u8C12\u8C14\u8C15\u8C16\u8C19\u8C1B\u8C18\u8C1D\u8C1F\u8C20\u8C21\u8C25\u8C27\u8C2A\u8C2B\u8C2E\u8C2F\u8C32\u8C33\u8C35\u8C36\u5369\u537A\u961D\u9622\u9621\u9631\u962A\u963D\u963C\u9642\u9649\u9654\u965F\u9667\u966C\u9672\u9674\u9688\u968D\u9697\u96B0\u9097\u909B\u909D\u9099\u90AC\u90A1\u90B4\u90B3\u90B6\u90BA"],
["db40", "\u8DD5\u8DD8\u8DD9\u8DDC\u8DE0\u8DE1\u8DE2\u8DE5\u8DE6\u8DE7\u8DE9\u8DED\u8DEE\u8DF0\u8DF1\u8DF2\u8DF4\u8DF6\u8DFC\u8DFE", 6, "\u8E06\u8E07\u8E08\u8E0B\u8E0D\u8E0E\u8E10\u8E11\u8E12\u8E13\u8E15", 7, "\u8E20\u8E21\u8E24", 4, "\u8E2B\u8E2D\u8E30\u8E32\u8E33\u8E34\u8E36\u8E37\u8E38\u8E3B\u8E3C\u8E3E"],
["db80", "\u8E3F\u8E43\u8E45\u8E46\u8E4C", 4, "\u8E53", 5, "\u8E5A", 11, "\u8E67\u8E68\u8E6A\u8E6B\u8E6E\u8E71\u90B8\u90B0\u90CF\u90C5\u90BE\u90D0\u90C4\u90C7\u90D3\u90E6\u90E2\u90DC\u90D7\u90DB\u90EB\u90EF\u90FE\u9104\u9122\u911E\u9123\u9131\u912F\u9139\u9143\u9146\u520D\u5942\u52A2\u52AC\u52AD\u52BE\u54FF\u52D0\u52D6\u52F0\u53DF\u71EE\u77CD\u5EF4\u51F5\u51FC\u9B2F\u53B6\u5F01\u755A\u5DEF\u574C\u57A9\u57A1\u587E\u58BC\u58C5\u58D1\u5729\u572C\u572A\u5733\u5739\u572E\u572F\u575C\u573B\u5742\u5769\u5785\u576B\u5786\u577C\u577B\u5768\u576D\u5776\u5773\u57AD\u57A4\u578C\u57B2\u57CF\u57A7\u57B4\u5793\u57A0\u57D5\u57D8\u57DA\u57D9\u57D2\u57B8\u57F4\u57EF\u57F8\u57E4\u57DD"],
["dc40", "\u8E73\u8E75\u8E77", 4, "\u8E7D\u8E7E\u8E80\u8E82\u8E83\u8E84\u8E86\u8E88", 6, "\u8E91\u8E92\u8E93\u8E95", 6, "\u8E9D\u8E9F", 11, "\u8EAD\u8EAE\u8EB0\u8EB1\u8EB3", 6, "\u8EBB", 7],
["dc80", "\u8EC3", 10, "\u8ECF", 21, "\u580B\u580D\u57FD\u57ED\u5800\u581E\u5819\u5844\u5820\u5865\u586C\u5881\u5889\u589A\u5880\u99A8\u9F19\u61FF\u8279\u827D\u827F\u828F\u828A\u82A8\u8284\u828E\u8291\u8297\u8299\u82AB\u82B8\u82BE\u82B0\u82C8\u82CA\u82E3\u8298\u82B7\u82AE\u82CB\u82CC\u82C1\u82A9\u82B4\u82A1\u82AA\u829F\u82C4\u82CE\u82A4\u82E1\u8309\u82F7\u82E4\u830F\u8307\u82DC\u82F4\u82D2\u82D8\u830C\u82FB\u82D3\u8311\u831A\u8306\u8314\u8315\u82E0\u82D5\u831C\u8351\u835B\u835C\u8308\u8392\u833C\u8334\u8331\u839B\u835E\u832F\u834F\u8347\u8343\u835F\u8340\u8317\u8360\u832D\u833A\u8333\u8366\u8365"],
["dd40", "\u8EE5", 62],
["dd80", "\u8F24", 32, "\u8368\u831B\u8369\u836C\u836A\u836D\u836E\u83B0\u8378\u83B3\u83B4\u83A0\u83AA\u8393\u839C\u8385\u837C\u83B6\u83A9\u837D\u83B8\u837B\u8398\u839E\u83A8\u83BA\u83BC\u83C1\u8401\u83E5\u83D8\u5807\u8418\u840B\u83DD\u83FD\u83D6\u841C\u8438\u8411\u8406\u83D4\u83DF\u840F\u8403\u83F8\u83F9\u83EA\u83C5\u83C0\u8426\u83F0\u83E1\u845C\u8451\u845A\u8459\u8473\u8487\u8488\u847A\u8489\u8478\u843C\u8446\u8469\u8476\u848C\u848E\u8431\u846D\u84C1\u84CD\u84D0\u84E6\u84BD\u84D3\u84CA\u84BF\u84BA\u84E0\u84A1\u84B9\u84B4\u8497\u84E5\u84E3\u850C\u750D\u8538\u84F0\u8539\u851F\u853A"],
["de40", "\u8F45", 32, "\u8F6A\u8F80\u8F8C\u8F92\u8F9D\u8FA0\u8FA1\u8FA2\u8FA4\u8FA5\u8FA6\u8FA7\u8FAA\u8FAC\u8FAD\u8FAE\u8FAF\u8FB2\u8FB3\u8FB4\u8FB5\u8FB7\u8FB8\u8FBA\u8FBB\u8FBC\u8FBF\u8FC0\u8FC3\u8FC6"],
["de80", "\u8FC9", 4, "\u8FCF\u8FD2\u8FD6\u8FD7\u8FDA\u8FE0\u8FE1\u8FE3\u8FE7\u8FEC\u8FEF\u8FF1\u8FF2\u8FF4\u8FF5\u8FF6\u8FFA\u8FFB\u8FFC\u8FFE\u8FFF\u9007\u9008\u900C\u900E\u9013\u9015\u9018\u8556\u853B\u84FF\u84FC\u8559\u8548\u8568\u8564\u855E\u857A\u77A2\u8543\u8572\u857B\u85A4\u85A8\u8587\u858F\u8579\u85AE\u859C\u8585\u85B9\u85B7\u85B0\u85D3\u85C1\u85DC\u85FF\u8627\u8605\u8629\u8616\u863C\u5EFE\u5F08\u593C\u5941\u8037\u5955\u595A\u5958\u530F\u5C22\u5C25\u5C2C\u5C34\u624C\u626A\u629F\u62BB\u62CA\u62DA\u62D7\u62EE\u6322\u62F6\u6339\u634B\u6343\u63AD\u63F6\u6371\u637A\u638E\u63B4\u636D\u63AC\u638A\u6369\u63AE\u63BC\u63F2\u63F8\u63E0\u63FF\u63C4\u63DE\u63CE\u6452\u63C6\u63BE\u6445\u6441\u640B\u641B\u6420\u640C\u6426\u6421\u645E\u6484\u646D\u6496"],
["df40", "\u9019\u901C\u9023\u9024\u9025\u9027", 5, "\u9030", 4, "\u9037\u9039\u903A\u903D\u903F\u9040\u9043\u9045\u9046\u9048", 4, "\u904E\u9054\u9055\u9056\u9059\u905A\u905C", 5, "\u9064\u9066\u9067\u9069\u906A\u906B\u906C\u906F", 4, "\u9076", 6, "\u907E\u9081"],
["df80", "\u9084\u9085\u9086\u9087\u9089\u908A\u908C", 4, "\u9092\u9094\u9096\u9098\u909A\u909C\u909E\u909F\u90A0\u90A4\u90A5\u90A7\u90A8\u90A9\u90AB\u90AD\u90B2\u90B7\u90BC\u90BD\u90BF\u90C0\u647A\u64B7\u64B8\u6499\u64BA\u64C0\u64D0\u64D7\u64E4\u64E2\u6509\u6525\u652E\u5F0B\u5FD2\u7519\u5F11\u535F\u53F1\u53FD\u53E9\u53E8\u53FB\u5412\u5416\u5406\u544B\u5452\u5453\u5454\u5456\u5443\u5421\u5457\u5459\u5423\u5432\u5482\u5494\u5477\u5471\u5464\u549A\u549B\u5484\u5476\u5466\u549D\u54D0\u54AD\u54C2\u54B4\u54D2\u54A7\u54A6\u54D3\u54D4\u5472\u54A3\u54D5\u54BB\u54BF\u54CC\u54D9\u54DA\u54DC\u54A9\u54AA\u54A4\u54DD\u54CF\u54DE\u551B\u54E7\u5520\u54FD\u5514\u54F3\u5522\u5523\u550F\u5511\u5527\u552A\u5567\u558F\u55B5\u5549\u556D\u5541\u5555\u553F\u5550\u553C"],
["e040", "\u90C2\u90C3\u90C6\u90C8\u90C9\u90CB\u90CC\u90CD\u90D2\u90D4\u90D5\u90D6\u90D8\u90D9\u90DA\u90DE\u90DF\u90E0\u90E3\u90E4\u90E5\u90E9\u90EA\u90EC\u90EE\u90F0\u90F1\u90F2\u90F3\u90F5\u90F6\u90F7\u90F9\u90FA\u90FB\u90FC\u90FF\u9100\u9101\u9103\u9105", 19, "\u911A\u911B\u911C"],
["e080", "\u911D\u911F\u9120\u9121\u9124", 10, "\u9130\u9132", 6, "\u913A", 8, "\u9144\u5537\u5556\u5575\u5576\u5577\u5533\u5530\u555C\u558B\u55D2\u5583\u55B1\u55B9\u5588\u5581\u559F\u557E\u55D6\u5591\u557B\u55DF\u55BD\u55BE\u5594\u5599\u55EA\u55F7\u55C9\u561F\u55D1\u55EB\u55EC\u55D4\u55E6\u55DD\u55C4\u55EF\u55E5\u55F2\u55F3\u55CC\u55CD\u55E8\u55F5\u55E4\u8F94\u561E\u5608\u560C\u5601\u5624\u5623\u55FE\u5600\u5627\u562D\u5658\u5639\u5657\u562C\u564D\u5662\u5659\u565C\u564C\u5654\u5686\u5664\u5671\u566B\u567B\u567C\u5685\u5693\u56AF\u56D4\u56D7\u56DD\u56E1\u56F5\u56EB\u56F9\u56FF\u5704\u570A\u5709\u571C\u5E0F\u5E19\u5E14\u5E11\u5E31\u5E3B\u5E3C"],
["e140", "\u9145\u9147\u9148\u9151\u9153\u9154\u9155\u9156\u9158\u9159\u915B\u915C\u915F\u9160\u9166\u9167\u9168\u916B\u916D\u9173\u917A\u917B\u917C\u9180", 4, "\u9186\u9188\u918A\u918E\u918F\u9193", 6, "\u919C", 5, "\u91A4", 5, "\u91AB\u91AC\u91B0\u91B1\u91B2\u91B3\u91B6\u91B7\u91B8\u91B9\u91BB"],
["e180", "\u91BC", 10, "\u91C8\u91CB\u91D0\u91D2", 9, "\u91DD", 8, "\u5E37\u5E44\u5E54\u5E5B\u5E5E\u5E61\u5C8C\u5C7A\u5C8D\u5C90\u5C96\u5C88\u5C98\u5C99\u5C91\u5C9A\u5C9C\u5CB5\u5CA2\u5CBD\u5CAC\u5CAB\u5CB1\u5CA3\u5CC1\u5CB7\u5CC4\u5CD2\u5CE4\u5CCB\u5CE5\u5D02\u5D03\u5D27\u5D26\u5D2E\u5D24\u5D1E\u5D06\u5D1B\u5D58\u5D3E\u5D34\u5D3D\u5D6C\u5D5B\u5D6F\u5D5D\u5D6B\u5D4B\u5D4A\u5D69\u5D74\u5D82\u5D99\u5D9D\u8C73\u5DB7\u5DC5\u5F73\u5F77\u5F82\u5F87\u5F89\u5F8C\u5F95\u5F99\u5F9C\u5FA8\u5FAD\u5FB5\u5FBC\u8862\u5F61\u72AD\u72B0\u72B4\u72B7\u72B8\u72C3\u72C1\u72CE\u72CD\u72D2\u72E8\u72EF\u72E9\u72F2\u72F4\u72F7\u7301\u72F3\u7303\u72FA"],
["e240", "\u91E6", 62],
["e280", "\u9225", 32, "\u72FB\u7317\u7313\u7321\u730A\u731E\u731D\u7315\u7322\u7339\u7325\u732C\u7338\u7331\u7350\u734D\u7357\u7360\u736C\u736F\u737E\u821B\u5925\u98E7\u5924\u5902\u9963\u9967", 5, "\u9974\u9977\u997D\u9980\u9984\u9987\u998A\u998D\u9990\u9991\u9993\u9994\u9995\u5E80\u5E91\u5E8B\u5E96\u5EA5\u5EA0\u5EB9\u5EB5\u5EBE\u5EB3\u8D53\u5ED2\u5ED1\u5EDB\u5EE8\u5EEA\u81BA\u5FC4\u5FC9\u5FD6\u5FCF\u6003\u5FEE\u6004\u5FE1\u5FE4\u5FFE\u6005\u6006\u5FEA\u5FED\u5FF8\u6019\u6035\u6026\u601B\u600F\u600D\u6029\u602B\u600A\u603F\u6021\u6078\u6079\u607B\u607A\u6042"],
["e340", "\u9246", 45, "\u9275", 16],
["e380", "\u9286", 7, "\u928F", 24, "\u606A\u607D\u6096\u609A\u60AD\u609D\u6083\u6092\u608C\u609B\u60EC\u60BB\u60B1\u60DD\u60D8\u60C6\u60DA\u60B4\u6120\u6126\u6115\u6123\u60F4\u6100\u610E\u612B\u614A\u6175\u61AC\u6194\u61A7\u61B7\u61D4\u61F5\u5FDD\u96B3\u95E9\u95EB\u95F1\u95F3\u95F5\u95F6\u95FC\u95FE\u9603\u9604\u9606\u9608\u960A\u960B\u960C\u960D\u960F\u9612\u9615\u9616\u9617\u9619\u961A\u4E2C\u723F\u6215\u6C35\u6C54\u6C5C\u6C4A\u6CA3\u6C85\u6C90\u6C94\u6C8C\u6C68\u6C69\u6C74\u6C76\u6C86\u6CA9\u6CD0\u6CD4\u6CAD\u6CF7\u6CF8\u6CF1\u6CD7\u6CB2\u6CE0\u6CD6\u6CFA\u6CEB\u6CEE\u6CB1\u6CD3\u6CEF\u6CFE"],
["e440", "\u92A8", 5, "\u92AF", 24, "\u92C9", 31],
["e480", "\u92E9", 32, "\u6D39\u6D27\u6D0C\u6D43\u6D48\u6D07\u6D04\u6D19\u6D0E\u6D2B\u6D4D\u6D2E\u6D35\u6D1A\u6D4F\u6D52\u6D54\u6D33\u6D91\u6D6F\u6D9E\u6DA0\u6D5E\u6D93\u6D94\u6D5C\u6D60\u6D7C\u6D63\u6E1A\u6DC7\u6DC5\u6DDE\u6E0E\u6DBF\u6DE0\u6E11\u6DE6\u6DDD\u6DD9\u6E16\u6DAB\u6E0C\u6DAE\u6E2B\u6E6E\u6E4E\u6E6B\u6EB2\u6E5F\u6E86\u6E53\u6E54\u6E32\u6E25\u6E44\u6EDF\u6EB1\u6E98\u6EE0\u6F2D\u6EE2\u6EA5\u6EA7\u6EBD\u6EBB\u6EB7\u6ED7\u6EB4\u6ECF\u6E8F\u6EC2\u6E9F\u6F62\u6F46\u6F47\u6F24\u6F15\u6EF9\u6F2F\u6F36\u6F4B\u6F74\u6F2A\u6F09\u6F29\u6F89\u6F8D\u6F8C\u6F78\u6F72\u6F7C\u6F7A\u6FD1"],
["e540", "\u930A", 51, "\u933F", 10],
["e580", "\u934A", 31, "\u936B\u6FC9\u6FA7\u6FB9\u6FB6\u6FC2\u6FE1\u6FEE\u6FDE\u6FE0\u6FEF\u701A\u7023\u701B\u7039\u7035\u704F\u705E\u5B80\u5B84\u5B95\u5B93\u5BA5\u5BB8\u752F\u9A9E\u6434\u5BE4\u5BEE\u8930\u5BF0\u8E47\u8B07\u8FB6\u8FD3\u8FD5\u8FE5\u8FEE\u8FE4\u8FE9\u8FE6\u8FF3\u8FE8\u9005\u9004\u900B\u9026\u9011\u900D\u9016\u9021\u9035\u9036\u902D\u902F\u9044\u9051\u9052\u9050\u9068\u9058\u9062\u905B\u66B9\u9074\u907D\u9082\u9088\u9083\u908B\u5F50\u5F57\u5F56\u5F58\u5C3B\u54AB\u5C50\u5C59\u5B71\u5C63\u5C66\u7FBC\u5F2A\u5F29\u5F2D\u8274\u5F3C\u9B3B\u5C6E\u5981\u5983\u598D\u59A9\u59AA\u59A3"],
["e640", "\u936C", 34, "\u9390", 27],
["e680", "\u93AC", 29, "\u93CB\u93CC\u93CD\u5997\u59CA\u59AB\u599E\u59A4\u59D2\u59B2\u59AF\u59D7\u59BE\u5A05\u5A06\u59DD\u5A08\u59E3\u59D8\u59F9\u5A0C\u5A09\u5A32\u5A34\u5A11\u5A23\u5A13\u5A40\u5A67\u5A4A\u5A55\u5A3C\u5A62\u5A75\u80EC\u5AAA\u5A9B\u5A77\u5A7A\u5ABE\u5AEB\u5AB2\u5AD2\u5AD4\u5AB8\u5AE0\u5AE3\u5AF1\u5AD6\u5AE6\u5AD8\u5ADC\u5B09\u5B17\u5B16\u5B32\u5B37\u5B40\u5C15\u5C1C\u5B5A\u5B65\u5B73\u5B51\u5B53\u5B62\u9A75\u9A77\u9A78\u9A7A\u9A7F\u9A7D\u9A80\u9A81\u9A85\u9A88\u9A8A\u9A90\u9A92\u9A93\u9A96\u9A98\u9A9B\u9A9C\u9A9D\u9A9F\u9AA0\u9AA2\u9AA3\u9AA5\u9AA7\u7E9F\u7EA1\u7EA3\u7EA5\u7EA8\u7EA9"],
["e740", "\u93CE", 7, "\u93D7", 54],
["e780", "\u940E", 32, "\u7EAD\u7EB0\u7EBE\u7EC0\u7EC1\u7EC2\u7EC9\u7ECB\u7ECC\u7ED0\u7ED4\u7ED7\u7EDB\u7EE0\u7EE1\u7EE8\u7EEB\u7EEE\u7EEF\u7EF1\u7EF2\u7F0D\u7EF6\u7EFA\u7EFB\u7EFE\u7F01\u7F02\u7F03\u7F07\u7F08\u7F0B\u7F0C\u7F0F\u7F11\u7F12\u7F17\u7F19\u7F1C\u7F1B\u7F1F\u7F21", 6, "\u7F2A\u7F2B\u7F2C\u7F2D\u7F2F", 4, "\u7F35\u5E7A\u757F\u5DDB\u753E\u9095\u738E\u7391\u73AE\u73A2\u739F\u73CF\u73C2\u73D1\u73B7\u73B3\u73C0\u73C9\u73C8\u73E5\u73D9\u987C\u740A\u73E9\u73E7\u73DE\u73BA\u73F2\u740F\u742A\u745B\u7426\u7425\u7428\u7430\u742E\u742C"],
["e840", "\u942F", 14, "\u943F", 43, "\u946C\u946D\u946E\u946F"],
["e880", "\u9470", 20, "\u9491\u9496\u9498\u94C7\u94CF\u94D3\u94D4\u94DA\u94E6\u94FB\u951C\u9520\u741B\u741A\u7441\u745C\u7457\u7455\u7459\u7477\u746D\u747E\u749C\u748E\u7480\u7481\u7487\u748B\u749E\u74A8\u74A9\u7490\u74A7\u74D2\u74BA\u97EA\u97EB\u97EC\u674C\u6753\u675E\u6748\u6769\u67A5\u6787\u676A\u6773\u6798\u67A7\u6775\u67A8\u679E\u67AD\u678B\u6777\u677C\u67F0\u6809\u67D8\u680A\u67E9\u67B0\u680C\u67D9\u67B5\u67DA\u67B3\u67DD\u6800\u67C3\u67B8\u67E2\u680E\u67C1\u67FD\u6832\u6833\u6860\u6861\u684E\u6862\u6844\u6864\u6883\u681D\u6855\u6866\u6841\u6867\u6840\u683E\u684A\u6849\u6829\u68B5\u688F\u6874\u6877\u6893\u686B\u68C2\u696E\u68FC\u691F\u6920\u68F9"],
["e940", "\u9527\u9533\u953D\u9543\u9548\u954B\u9555\u955A\u9560\u956E\u9574\u9575\u9577", 7, "\u9580", 42],
["e980", "\u95AB", 32, "\u6924\u68F0\u690B\u6901\u6957\u68E3\u6910\u6971\u6939\u6960\u6942\u695D\u6984\u696B\u6980\u6998\u6978\u6934\u69CC\u6987\u6988\u69CE\u6989\u6966\u6963\u6979\u699B\u69A7\u69BB\u69AB\u69AD\u69D4\u69B1\u69C1\u69CA\u69DF\u6995\u69E0\u698D\u69FF\u6A2F\u69ED\u6A17\u6A18\u6A65\u69F2\u6A44\u6A3E\u6AA0\u6A50\u6A5B\u6A35\u6A8E\u6A79\u6A3D\u6A28\u6A58\u6A7C\u6A91\u6A90\u6AA9\u6A97\u6AAB\u7337\u7352\u6B81\u6B82\u6B87\u6B84\u6B92\u6B93\u6B8D\u6B9A\u6B9B\u6BA1\u6BAA\u8F6B\u8F6D\u8F71\u8F72\u8F73\u8F75\u8F76\u8F78\u8F77\u8F79\u8F7A\u8F7C\u8F7E\u8F81\u8F82\u8F84\u8F87\u8F8B"],
["ea40", "\u95CC", 27, "\u95EC\u95FF\u9607\u9613\u9618\u961B\u961E\u9620\u9623", 6, "\u962B\u962C\u962D\u962F\u9630\u9637\u9638\u9639\u963A\u963E\u9641\u9643\u964A\u964E\u964F\u9651\u9652\u9653\u9656\u9657"],
["ea80", "\u9658\u9659\u965A\u965C\u965D\u965E\u9660\u9663\u9665\u9666\u966B\u966D", 4, "\u9673\u9678", 12, "\u9687\u9689\u968A\u8F8D\u8F8E\u8F8F\u8F98\u8F9A\u8ECE\u620B\u6217\u621B\u621F\u6222\u6221\u6225\u6224\u622C\u81E7\u74EF\u74F4\u74FF\u750F\u7511\u7513\u6534\u65EE\u65EF\u65F0\u660A\u6619\u6772\u6603\u6615\u6600\u7085\u66F7\u661D\u6634\u6631\u6636\u6635\u8006\u665F\u6654\u6641\u664F\u6656\u6661\u6657\u6677\u6684\u668C\u66A7\u669D\u66BE\u66DB\u66DC\u66E6\u66E9\u8D32\u8D33\u8D36\u8D3B\u8D3D\u8D40\u8D45\u8D46\u8D48\u8D49\u8D47\u8D4D\u8D55\u8D59\u89C7\u89CA\u89CB\u89CC\u89CE\u89CF\u89D0\u89D1\u726E\u729F\u725D\u7266\u726F\u727E\u727F\u7284\u728B\u728D\u728F\u7292\u6308\u6332\u63B0"],
["eb40", "\u968C\u968E\u9691\u9692\u9693\u9695\u9696\u969A\u969B\u969D", 9, "\u96A8", 7, "\u96B1\u96B2\u96B4\u96B5\u96B7\u96B8\u96BA\u96BB\u96BF\u96C2\u96C3\u96C8\u96CA\u96CB\u96D0\u96D1\u96D3\u96D4\u96D6", 9, "\u96E1", 6, "\u96EB"],
["eb80", "\u96EC\u96ED\u96EE\u96F0\u96F1\u96F2\u96F4\u96F5\u96F8\u96FA\u96FB\u96FC\u96FD\u96FF\u9702\u9703\u9705\u970A\u970B\u970C\u9710\u9711\u9712\u9714\u9715\u9717", 4, "\u971D\u971F\u9720\u643F\u64D8\u8004\u6BEA\u6BF3\u6BFD\u6BF5\u6BF9\u6C05\u6C07\u6C06\u6C0D\u6C15\u6C18\u6C19\u6C1A\u6C21\u6C29\u6C24\u6C2A\u6C32\u6535\u6555\u656B\u724D\u7252\u7256\u7230\u8662\u5216\u809F\u809C\u8093\u80BC\u670A\u80BD\u80B1\u80AB\u80AD\u80B4\u80B7\u80E7\u80E8\u80E9\u80EA\u80DB\u80C2\u80C4\u80D9\u80CD\u80D7\u6710\u80DD\u80EB\u80F1\u80F4\u80ED\u810D\u810E\u80F2\u80FC\u6715\u8112\u8C5A\u8136\u811E\u812C\u8118\u8132\u8148\u814C\u8153\u8174\u8159\u815A\u8171\u8160\u8169\u817C\u817D\u816D\u8167\u584D\u5AB5\u8188\u8182\u8191\u6ED5\u81A3\u81AA\u81CC\u6726\u81CA\u81BB"],
["ec40", "\u9721", 8, "\u972B\u972C\u972E\u972F\u9731\u9733", 4, "\u973A\u973B\u973C\u973D\u973F", 18, "\u9754\u9755\u9757\u9758\u975A\u975C\u975D\u975F\u9763\u9764\u9766\u9767\u9768\u976A", 7],
["ec80", "\u9772\u9775\u9777", 4, "\u977D", 7, "\u9786", 4, "\u978C\u978E\u978F\u9790\u9793\u9795\u9796\u9797\u9799", 4, "\u81C1\u81A6\u6B24\u6B37\u6B39\u6B43\u6B46\u6B59\u98D1\u98D2\u98D3\u98D5\u98D9\u98DA\u6BB3\u5F40\u6BC2\u89F3\u6590\u9F51\u6593\u65BC\u65C6\u65C4\u65C3\u65CC\u65CE\u65D2\u65D6\u7080\u709C\u7096\u709D\u70BB\u70C0\u70B7\u70AB\u70B1\u70E8\u70CA\u7110\u7113\u7116\u712F\u7131\u7173\u715C\u7168\u7145\u7172\u714A\u7178\u717A\u7198\u71B3\u71B5\u71A8\u71A0\u71E0\u71D4\u71E7\u71F9\u721D\u7228\u706C\u7118\u7166\u71B9\u623E\u623D\u6243\u6248\u6249\u793B\u7940\u7946\u7949\u795B\u795C\u7953\u795A\u7962\u7957\u7960\u796F\u7967\u797A\u7985\u798A\u799A\u79A7\u79B3\u5FD1\u5FD0"],
["ed40", "\u979E\u979F\u97A1\u97A2\u97A4", 6, "\u97AC\u97AE\u97B0\u97B1\u97B3\u97B5", 46],
["ed80", "\u97E4\u97E5\u97E8\u97EE", 4, "\u97F4\u97F7", 23, "\u603C\u605D\u605A\u6067\u6041\u6059\u6063\u60AB\u6106\u610D\u615D\u61A9\u619D\u61CB\u61D1\u6206\u8080\u807F\u6C93\u6CF6\u6DFC\u77F6\u77F8\u7800\u7809\u7817\u7818\u7811\u65AB\u782D\u781C\u781D\u7839\u783A\u783B\u781F\u783C\u7825\u782C\u7823\u7829\u784E\u786D\u7856\u7857\u7826\u7850\u7847\u784C\u786A\u789B\u7893\u789A\u7887\u789C\u78A1\u78A3\u78B2\u78B9\u78A5\u78D4\u78D9\u78C9\u78EC\u78F2\u7905\u78F4\u7913\u7924\u791E\u7934\u9F9B\u9EF9\u9EFB\u9EFC\u76F1\u7704\u770D\u76F9\u7707\u7708\u771A\u7722\u7719\u772D\u7726\u7735\u7738\u7750\u7751\u7747\u7743\u775A\u7768"],
["ee40", "\u980F", 62],
["ee80", "\u984E", 32, "\u7762\u7765\u777F\u778D\u777D\u7780\u778C\u7791\u779F\u77A0\u77B0\u77B5\u77BD\u753A\u7540\u754E\u754B\u7548\u755B\u7572\u7579\u7583\u7F58\u7F61\u7F5F\u8A48\u7F68\u7F74\u7F71\u7F79\u7F81\u7F7E\u76CD\u76E5\u8832\u9485\u9486\u9487\u948B\u948A\u948C\u948D\u948F\u9490\u9494\u9497\u9495\u949A\u949B\u949C\u94A3\u94A4\u94AB\u94AA\u94AD\u94AC\u94AF\u94B0\u94B2\u94B4\u94B6", 4, "\u94BC\u94BD\u94BF\u94C4\u94C8", 6, "\u94D0\u94D1\u94D2\u94D5\u94D6\u94D7\u94D9\u94D8\u94DB\u94DE\u94DF\u94E0\u94E2\u94E4\u94E5\u94E7\u94E8\u94EA"],
["ef40", "\u986F", 5, "\u988B\u988E\u9892\u9895\u9899\u98A3\u98A8", 37, "\u98CF\u98D0\u98D4\u98D6\u98D7\u98DB\u98DC\u98DD\u98E0", 4],
["ef80", "\u98E5\u98E6\u98E9", 30, "\u94E9\u94EB\u94EE\u94EF\u94F3\u94F4\u94F5\u94F7\u94F9\u94FC\u94FD\u94FF\u9503\u9502\u9506\u9507\u9509\u950A\u950D\u950E\u950F\u9512", 4, "\u9518\u951B\u951D\u951E\u951F\u9522\u952A\u952B\u9529\u952C\u9531\u9532\u9534\u9536\u9537\u9538\u953C\u953E\u953F\u9542\u9535\u9544\u9545\u9546\u9549\u954C\u954E\u954F\u9552\u9553\u9554\u9556\u9557\u9558\u9559\u955B\u955E\u955F\u955D\u9561\u9562\u9564", 8, "\u956F\u9571\u9572\u9573\u953A\u77E7\u77EC\u96C9\u79D5\u79ED\u79E3\u79EB\u7A06\u5D47\u7A03\u7A02\u7A1E\u7A14"],
["f040", "\u9908", 4, "\u990E\u990F\u9911", 28, "\u992F", 26],
["f080", "\u994A", 9, "\u9956", 12, "\u9964\u9966\u9973\u9978\u9979\u997B\u997E\u9982\u9983\u9989\u7A39\u7A37\u7A51\u9ECF\u99A5\u7A70\u7688\u768E\u7693\u7699\u76A4\u74DE\u74E0\u752C\u9E20\u9E22\u9E28", 4, "\u9E32\u9E31\u9E36\u9E38\u9E37\u9E39\u9E3A\u9E3E\u9E41\u9E42\u9E44\u9E46\u9E47\u9E48\u9E49\u9E4B\u9E4C\u9E4E\u9E51\u9E55\u9E57\u9E5A\u9E5B\u9E5C\u9E5E\u9E63\u9E66", 6, "\u9E71\u9E6D\u9E73\u7592\u7594\u7596\u75A0\u759D\u75AC\u75A3\u75B3\u75B4\u75B8\u75C4\u75B1\u75B0\u75C3\u75C2\u75D6\u75CD\u75E3\u75E8\u75E6\u75E4\u75EB\u75E7\u7603\u75F1\u75FC\u75FF\u7610\u7600\u7605\u760C\u7617\u760A\u7625\u7618\u7615\u7619"],
["f140", "\u998C\u998E\u999A", 10, "\u99A6\u99A7\u99A9", 47],
["f180", "\u99D9", 32, "\u761B\u763C\u7622\u7620\u7640\u762D\u7630\u763F\u7635\u7643\u763E\u7633\u764D\u765E\u7654\u765C\u7656\u766B\u766F\u7FCA\u7AE6\u7A78\u7A79\u7A80\u7A86\u7A88\u7A95\u7AA6\u7AA0\u7AAC\u7AA8\u7AAD\u7AB3\u8864\u8869\u8872\u887D\u887F\u8882\u88A2\u88C6\u88B7\u88BC\u88C9\u88E2\u88CE\u88E3\u88E5\u88F1\u891A\u88FC\u88E8\u88FE\u88F0\u8921\u8919\u8913\u891B\u890A\u8934\u892B\u8936\u8941\u8966\u897B\u758B\u80E5\u76B2\u76B4\u77DC\u8012\u8014\u8016\u801C\u8020\u8022\u8025\u8026\u8027\u8029\u8028\u8031\u800B\u8035\u8043\u8046\u804D\u8052\u8069\u8071\u8983\u9878\u9880\u9883"],
["f240", "\u99FA", 62],
["f280", "\u9A39", 32, "\u9889\u988C\u988D\u988F\u9894\u989A\u989B\u989E\u989F\u98A1\u98A2\u98A5\u98A6\u864D\u8654\u866C\u866E\u867F\u867A\u867C\u867B\u86A8\u868D\u868B\u86AC\u869D\u86A7\u86A3\u86AA\u8693\u86A9\u86B6\u86C4\u86B5\u86CE\u86B0\u86BA\u86B1\u86AF\u86C9\u86CF\u86B4\u86E9\u86F1\u86F2\u86ED\u86F3\u86D0\u8713\u86DE\u86F4\u86DF\u86D8\u86D1\u8703\u8707\u86F8\u8708\u870A\u870D\u8709\u8723\u873B\u871E\u8725\u872E\u871A\u873E\u8748\u8734\u8731\u8729\u8737\u873F\u8782\u8722\u877D\u877E\u877B\u8760\u8770\u874C\u876E\u878B\u8753\u8763\u877C\u8764\u8759\u8765\u8793\u87AF\u87A8\u87D2"],
["f340", "\u9A5A", 17, "\u9A72\u9A83\u9A89\u9A8D\u9A8E\u9A94\u9A95\u9A99\u9AA6\u9AA9", 6, "\u9AB2\u9AB3\u9AB4\u9AB5\u9AB9\u9ABB\u9ABD\u9ABE\u9ABF\u9AC3\u9AC4\u9AC6", 4, "\u9ACD\u9ACE\u9ACF\u9AD0\u9AD2\u9AD4\u9AD5\u9AD6\u9AD7\u9AD9\u9ADA\u9ADB\u9ADC"],
["f380", "\u9ADD\u9ADE\u9AE0\u9AE2\u9AE3\u9AE4\u9AE5\u9AE7\u9AE8\u9AE9\u9AEA\u9AEC\u9AEE\u9AF0", 8, "\u9AFA\u9AFC", 6, "\u9B04\u9B05\u9B06\u87C6\u8788\u8785\u87AD\u8797\u8783\u87AB\u87E5\u87AC\u87B5\u87B3\u87CB\u87D3\u87BD\u87D1\u87C0\u87CA\u87DB\u87EA\u87E0\u87EE\u8816\u8813\u87FE\u880A\u881B\u8821\u8839\u883C\u7F36\u7F42\u7F44\u7F45\u8210\u7AFA\u7AFD\u7B08\u7B03\u7B04\u7B15\u7B0A\u7B2B\u7B0F\u7B47\u7B38\u7B2A\u7B19\u7B2E\u7B31\u7B20\u7B25\u7B24\u7B33\u7B3E\u7B1E\u7B58\u7B5A\u7B45\u7B75\u7B4C\u7B5D\u7B60\u7B6E\u7B7B\u7B62\u7B72\u7B71\u7B90\u7BA6\u7BA7\u7BB8\u7BAC\u7B9D\u7BA8\u7B85\u7BAA\u7B9C\u7BA2\u7BAB\u7BB4\u7BD1\u7BC1\u7BCC\u7BDD\u7BDA\u7BE5\u7BE6\u7BEA\u7C0C\u7BFE\u7BFC\u7C0F\u7C16\u7C0B"],
["f440", "\u9B07\u9B09", 5, "\u9B10\u9B11\u9B12\u9B14", 10, "\u9B20\u9B21\u9B22\u9B24", 10, "\u9B30\u9B31\u9B33", 7, "\u9B3D\u9B3E\u9B3F\u9B40\u9B46\u9B4A\u9B4B\u9B4C\u9B4E\u9B50\u9B52\u9B53\u9B55", 5],
["f480", "\u9B5B", 32, "\u7C1F\u7C2A\u7C26\u7C38\u7C41\u7C40\u81FE\u8201\u8202\u8204\u81EC\u8844\u8221\u8222\u8223\u822D\u822F\u8228\u822B\u8238\u823B\u8233\u8234\u823E\u8244\u8249\u824B\u824F\u825A\u825F\u8268\u887E\u8885\u8888\u88D8\u88DF\u895E\u7F9D\u7F9F\u7FA7\u7FAF\u7FB0\u7FB2\u7C7C\u6549\u7C91\u7C9D\u7C9C\u7C9E\u7CA2\u7CB2\u7CBC\u7CBD\u7CC1\u7CC7\u7CCC\u7CCD\u7CC8\u7CC5\u7CD7\u7CE8\u826E\u66A8\u7FBF\u7FCE\u7FD5\u7FE5\u7FE1\u7FE6\u7FE9\u7FEE\u7FF3\u7CF8\u7D77\u7DA6\u7DAE\u7E47\u7E9B\u9EB8\u9EB4\u8D73\u8D84\u8D94\u8D91\u8DB1\u8D67\u8D6D\u8C47\u8C49\u914A\u9150\u914E\u914F\u9164"],
["f540", "\u9B7C", 62],
["f580", "\u9BBB", 32, "\u9162\u9161\u9170\u9169\u916F\u917D\u917E\u9172\u9174\u9179\u918C\u9185\u9190\u918D\u9191\u91A2\u91A3\u91AA\u91AD\u91AE\u91AF\u91B5\u91B4\u91BA\u8C55\u9E7E\u8DB8\u8DEB\u8E05\u8E59\u8E69\u8DB5\u8DBF\u8DBC\u8DBA\u8DC4\u8DD6\u8DD7\u8DDA\u8DDE\u8DCE\u8DCF\u8DDB\u8DC6\u8DEC\u8DF7\u8DF8\u8DE3\u8DF9\u8DFB\u8DE4\u8E09\u8DFD\u8E14\u8E1D\u8E1F\u8E2C\u8E2E\u8E23\u8E2F\u8E3A\u8E40\u8E39\u8E35\u8E3D\u8E31\u8E49\u8E41\u8E42\u8E51\u8E52\u8E4A\u8E70\u8E76\u8E7C\u8E6F\u8E74\u8E85\u8E8F\u8E94\u8E90\u8E9C\u8E9E\u8C78\u8C82\u8C8A\u8C85\u8C98\u8C94\u659B\u89D6\u89DE\u89DA\u89DC"],
["f640", "\u9BDC", 62],
["f680", "\u9C1B", 32, "\u89E5\u89EB\u89EF\u8A3E\u8B26\u9753\u96E9\u96F3\u96EF\u9706\u9701\u9708\u970F\u970E\u972A\u972D\u9730\u973E\u9F80\u9F83\u9F85", 5, "\u9F8C\u9EFE\u9F0B\u9F0D\u96B9\u96BC\u96BD\u96CE\u96D2\u77BF\u96E0\u928E\u92AE\u92C8\u933E\u936A\u93CA\u938F\u943E\u946B\u9C7F\u9C82\u9C85\u9C86\u9C87\u9C88\u7A23\u9C8B\u9C8E\u9C90\u9C91\u9C92\u9C94\u9C95\u9C9A\u9C9B\u9C9E", 5, "\u9CA5", 4, "\u9CAB\u9CAD\u9CAE\u9CB0", 7, "\u9CBA\u9CBB\u9CBC\u9CBD\u9CC4\u9CC5\u9CC6\u9CC7\u9CCA\u9CCB"],
["f740", "\u9C3C", 62],
["f780", "\u9C7B\u9C7D\u9C7E\u9C80\u9C83\u9C84\u9C89\u9C8A\u9C8C\u9C8F\u9C93\u9C96\u9C97\u9C98\u9C99\u9C9D\u9CAA\u9CAC\u9CAF\u9CB9\u9CBE", 4, "\u9CC8\u9CC9\u9CD1\u9CD2\u9CDA\u9CDB\u9CE0\u9CE1\u9CCC", 4, "\u9CD3\u9CD4\u9CD5\u9CD7\u9CD8\u9CD9\u9CDC\u9CDD\u9CDF\u9CE2\u977C\u9785\u9791\u9792\u9794\u97AF\u97AB\u97A3\u97B2\u97B4\u9AB1\u9AB0\u9AB7\u9E58\u9AB6\u9ABA\u9ABC\u9AC1\u9AC0\u9AC5\u9AC2\u9ACB\u9ACC\u9AD1\u9B45\u9B43\u9B47\u9B49\u9B48\u9B4D\u9B51\u98E8\u990D\u992E\u9955\u9954\u9ADF\u9AE1\u9AE6\u9AEF\u9AEB\u9AFB\u9AED\u9AF9\u9B08\u9B0F\u9B13\u9B1F\u9B23\u9EBD\u9EBE\u7E3B\u9E82\u9E87\u9E88\u9E8B\u9E92\u93D6\u9E9D\u9E9F\u9EDB\u9EDC\u9EDD\u9EE0\u9EDF\u9EE2\u9EE9\u9EE7\u9EE5\u9EEA\u9EEF\u9F22\u9F2C\u9F2F\u9F39\u9F37\u9F3D\u9F3E\u9F44"],
["f840", "\u9CE3", 62],
["f880", "\u9D22", 32],
["f940", "\u9D43", 62],
["f980", "\u9D82", 32],
["fa40", "\u9DA3", 62],
["fa80", "\u9DE2", 32],
["fb40", "\u9E03", 27, "\u9E24\u9E27\u9E2E\u9E30\u9E34\u9E3B\u9E3C\u9E40\u9E4D\u9E50\u9E52\u9E53\u9E54\u9E56\u9E59\u9E5D\u9E5F\u9E60\u9E61\u9E62\u9E65\u9E6E\u9E6F\u9E72\u9E74", 9, "\u9E80"],
["fb80", "\u9E81\u9E83\u9E84\u9E85\u9E86\u9E89\u9E8A\u9E8C", 5, "\u9E94", 8, "\u9E9E\u9EA0", 5, "\u9EA7\u9EA8\u9EA9\u9EAA"],
["fc40", "\u9EAB", 8, "\u9EB5\u9EB6\u9EB7\u9EB9\u9EBA\u9EBC\u9EBF", 4, "\u9EC5\u9EC6\u9EC7\u9EC8\u9ECA\u9ECB\u9ECC\u9ED0\u9ED2\u9ED3\u9ED5\u9ED6\u9ED7\u9ED9\u9EDA\u9EDE\u9EE1\u9EE3\u9EE4\u9EE6\u9EE8\u9EEB\u9EEC\u9EED\u9EEE\u9EF0", 8, "\u9EFA\u9EFD\u9EFF", 6],
["fc80", "\u9F06", 4, "\u9F0C\u9F0F\u9F11\u9F12\u9F14\u9F15\u9F16\u9F18\u9F1A", 5, "\u9F21\u9F23", 8, "\u9F2D\u9F2E\u9F30\u9F31"],
["fd40", "\u9F32", 4, "\u9F38\u9F3A\u9F3C\u9F3F", 4, "\u9F45", 10, "\u9F52", 38],
["fd80", "\u9F79", 5, "\u9F81\u9F82\u9F8D", 11, "\u9F9C\u9F9D\u9F9E\u9FA1", 4, "\uF92C\uF979\uF995\uF9E7\uF9F1"],
["fe40", "\uFA0C\uFA0D\uFA0E\uFA0F\uFA11\uFA13\uFA14\uFA18\uFA1F\uFA20\uFA21\uFA23\uFA24\uFA27\uFA28\uFA29"]
];
}
});
var require_gbk_added2 = __commonJS2({
"node_modules/raw-body/node_modules/iconv-lite/encodings/tables/gbk-added.json"(exports2, module2) {
module2.exports = [
["a140", "\uE4C6", 62],
["a180", "\uE505", 32],
["a240", "\uE526", 62],
["a280", "\uE565", 32],
["a2ab", "\uE766", 5],
["a2e3", "\u20AC\uE76D"],
["a2ef", "\uE76E\uE76F"],
["a2fd", "\uE770\uE771"],
["a340", "\uE586", 62],
["a380", "\uE5C5", 31, "\u3000"],
["a440", "\uE5E6", 62],
["a480", "\uE625", 32],
["a4f4", "\uE772", 10],
["a540", "\uE646", 62],
["a580", "\uE685", 32],
["a5f7", "\uE77D", 7],
["a640", "\uE6A6", 62],
["a680", "\uE6E5", 32],
["a6b9", "\uE785", 7],
["a6d9", "\uE78D", 6],
["a6ec", "\uE794\uE795"],
["a6f3", "\uE796"],
["a6f6", "\uE797", 8],
["a740", "\uE706", 62],
["a780", "\uE745", 32],
["a7c2", "\uE7A0", 14],
["a7f2", "\uE7AF", 12],
["a896", "\uE7BC", 10],
["a8bc", "\u1E3F"],
["a8bf", "\u01F9"],
["a8c1", "\uE7C9\uE7CA\uE7CB\uE7CC"],
["a8ea", "\uE7CD", 20],
["a958", "\uE7E2"],
["a95b", "\uE7E3"],
["a95d", "\uE7E4\uE7E5\uE7E6"],
["a989", "\u303E\u2FF0", 11],
["a997", "\uE7F4", 12],
["a9f0", "\uE801", 14],
["aaa1", "\uE000", 93],
["aba1", "\uE05E", 93],
["aca1", "\uE0BC", 93],
["ada1", "\uE11A", 93],
["aea1", "\uE178", 93],
["afa1", "\uE1D6", 93],
["d7fa", "\uE810", 4],
["f8a1", "\uE234", 93],
["f9a1", "\uE292", 93],
["faa1", "\uE2F0", 93],
["fba1", "\uE34E", 93],
["fca1", "\uE3AC", 93],
["fda1", "\uE40A", 93],
["fe50", "\u2E81\uE816\uE817\uE818\u2E84\u3473\u3447\u2E88\u2E8B\uE81E\u359E\u361A\u360E\u2E8C\u2E97\u396E\u3918\uE826\u39CF\u39DF\u3A73\u39D0\uE82B\uE82C\u3B4E\u3C6E\u3CE0\u2EA7\uE831\uE832\u2EAA\u4056\u415F\u2EAE\u4337\u2EB3\u2EB6\u2EB7\uE83B\u43B1\u43AC\u2EBB\u43DD\u44D6\u4661\u464C\uE843"],
["fe80", "\u4723\u4729\u477C\u478D\u2ECA\u4947\u497A\u497D\u4982\u4983\u4985\u4986\u499F\u499B\u49B7\u49B6\uE854\uE855\u4CA3\u4C9F\u4CA0\u4CA1\u4C77\u4CA2\u4D13", 6, "\u4DAE\uE864\uE468", 93],
["8135f437", "\uE7C7"]
];
}
});
var require_gb18030_ranges2 = __commonJS2({
"node_modules/raw-body/node_modules/iconv-lite/encodings/tables/gb18030-ranges.json"(exports2, module2) {
module2.exports = { uChars: [128, 165, 169, 178, 184, 216, 226, 235, 238, 244, 248, 251, 253, 258, 276, 284, 300, 325, 329, 334, 364, 463, 465, 467, 469, 471, 473, 475, 477, 506, 594, 610, 712, 716, 730, 930, 938, 962, 970, 1026, 1104, 1106, 8209, 8215, 8218, 8222, 8231, 8241, 8244, 8246, 8252, 8365, 8452, 8454, 8458, 8471, 8482, 8556, 8570, 8596, 8602, 8713, 8720, 8722, 8726, 8731, 8737, 8740, 8742, 8748, 8751, 8760, 8766, 8777, 8781, 8787, 8802, 8808, 8816, 8854, 8858, 8870, 8896, 8979, 9322, 9372, 9548, 9588, 9616, 9622, 9634, 9652, 9662, 9672, 9676, 9680, 9702, 9735, 9738, 9793, 9795, 11906, 11909, 11913, 11917, 11928, 11944, 11947, 11951, 11956, 11960, 11964, 11979, 12284, 12292, 12312, 12319, 12330, 12351, 12436, 12447, 12535, 12543, 12586, 12842, 12850, 12964, 13200, 13215, 13218, 13253, 13263, 13267, 13270, 13384, 13428, 13727, 13839, 13851, 14617, 14703, 14801, 14816, 14964, 15183, 15471, 15585, 16471, 16736, 17208, 17325, 17330, 17374, 17623, 17997, 18018, 18212, 18218, 18301, 18318, 18760, 18811, 18814, 18820, 18823, 18844, 18848, 18872, 19576, 19620, 19738, 19887, 40870, 59244, 59336, 59367, 59413, 59417, 59423, 59431, 59437, 59443, 59452, 59460, 59478, 59493, 63789, 63866, 63894, 63976, 63986, 64016, 64018, 64021, 64025, 64034, 64037, 64042, 65074, 65093, 65107, 65112, 65127, 65132, 65375, 65510, 65536], gbChars: [0, 36, 38, 45, 50, 81, 89, 95, 96, 100, 103, 104, 105, 109, 126, 133, 148, 172, 175, 179, 208, 306, 307, 308, 309, 310, 311, 312, 313, 341, 428, 443, 544, 545, 558, 741, 742, 749, 750, 805, 819, 820, 7922, 7924, 7925, 7927, 7934, 7943, 7944, 7945, 7950, 8062, 8148, 8149, 8152, 8164, 8174, 8236, 8240, 8262, 8264, 8374, 8380, 8381, 8384, 8388, 8390, 8392, 8393, 8394, 8396, 8401, 8406, 8416, 8419, 8424, 8437, 8439, 8445, 8482, 8485, 8496, 8521, 8603, 8936, 8946, 9046, 9050, 9063, 9066, 9076, 9092, 9100, 9108, 9111, 9113, 9131, 9162, 9164, 9218, 9219, 11329, 11331, 11334, 11336, 11346, 11361, 11363, 11366, 11370, 11372, 11375, 11389, 11682, 11686, 11687, 11692, 11694, 11714, 11716, 11723, 11725, 11730, 11736, 11982, 11989, 12102, 12336, 12348, 12350, 12384, 12393, 12395, 12397, 12510, 12553, 12851, 12962, 12973, 13738, 13823, 13919, 13933, 14080, 14298, 14585, 14698, 15583, 15847, 16318, 16434, 16438, 16481, 16729, 17102, 17122, 17315, 17320, 17402, 17418, 17859, 17909, 17911, 17915, 17916, 17936, 17939, 17961, 18664, 18703, 18814, 18962, 19043, 33469, 33470, 33471, 33484, 33485, 33490, 33497, 33501, 33505, 33513, 33520, 33536, 33550, 37845, 37921, 37948, 38029, 38038, 38064, 38065, 38066, 38069, 38075, 38076, 38078, 39108, 39109, 39113, 39114, 39115, 39116, 39265, 39394, 189e3] };
}
});
var require_cp9492 = __commonJS2({
"node_modules/raw-body/node_modules/iconv-lite/encodings/tables/cp949.json"(exports2, module2) {
module2.exports = [
["0", "\0", 127],
["8141", "\uAC02\uAC03\uAC05\uAC06\uAC0B", 4, "\uAC18\uAC1E\uAC1F\uAC21\uAC22\uAC23\uAC25", 6, "\uAC2E\uAC32\uAC33\uAC34"],
["8161", "\uAC35\uAC36\uAC37\uAC3A\uAC3B\uAC3D\uAC3E\uAC3F\uAC41", 9, "\uAC4C\uAC4E", 5, "\uAC55"],
["8181", "\uAC56\uAC57\uAC59\uAC5A\uAC5B\uAC5D", 18, "\uAC72\uAC73\uAC75\uAC76\uAC79\uAC7B", 4, "\uAC82\uAC87\uAC88\uAC8D\uAC8E\uAC8F\uAC91\uAC92\uAC93\uAC95", 6, "\uAC9E\uACA2", 5, "\uACAB\uACAD\uACAE\uACB1", 6, "\uACBA\uACBE\uACBF\uACC0\uACC2\uACC3\uACC5\uACC6\uACC7\uACC9\uACCA\uACCB\uACCD", 7, "\uACD6\uACD8", 7, "\uACE2\uACE3\uACE5\uACE6\uACE9\uACEB\uACED\uACEE\uACF2\uACF4\uACF7", 4, "\uACFE\uACFF\uAD01\uAD02\uAD03\uAD05\uAD07", 4, "\uAD0E\uAD10\uAD12\uAD13"],
["8241", "\uAD14\uAD15\uAD16\uAD17\uAD19\uAD1A\uAD1B\uAD1D\uAD1E\uAD1F\uAD21", 7, "\uAD2A\uAD2B\uAD2E", 5],
["8261", "\uAD36\uAD37\uAD39\uAD3A\uAD3B\uAD3D", 6, "\uAD46\uAD48\uAD4A", 5, "\uAD51\uAD52\uAD53\uAD55\uAD56\uAD57"],
["8281", "\uAD59", 7, "\uAD62\uAD64", 7, "\uAD6E\uAD6F\uAD71\uAD72\uAD77\uAD78\uAD79\uAD7A\uAD7E\uAD80\uAD83", 4, "\uAD8A\uAD8B\uAD8D\uAD8E\uAD8F\uAD91", 10, "\uAD9E", 5, "\uADA5", 17, "\uADB8", 7, "\uADC2\uADC3\uADC5\uADC6\uADC7\uADC9", 6, "\uADD2\uADD4", 7, "\uADDD\uADDE\uADDF\uADE1\uADE2\uADE3\uADE5", 18],
["8341", "\uADFA\uADFB\uADFD\uADFE\uAE02", 5, "\uAE0A\uAE0C\uAE0E", 5, "\uAE15", 7],
["8361", "\uAE1D", 18, "\uAE32\uAE33\uAE35\uAE36\uAE39\uAE3B\uAE3C"],
["8381", "\uAE3D\uAE3E\uAE3F\uAE42\uAE44\uAE47\uAE48\uAE49\uAE4B\uAE4F\uAE51\uAE52\uAE53\uAE55\uAE57", 4, "\uAE5E\uAE62\uAE63\uAE64\uAE66\uAE67\uAE6A\uAE6B\uAE6D\uAE6E\uAE6F\uAE71", 6, "\uAE7A\uAE7E", 5, "\uAE86", 5, "\uAE8D", 46, "\uAEBF\uAEC1\uAEC2\uAEC3\uAEC5", 6, "\uAECE\uAED2", 5, "\uAEDA\uAEDB\uAEDD", 8],
["8441", "\uAEE6\uAEE7\uAEE9\uAEEA\uAEEC\uAEEE", 5, "\uAEF5\uAEF6\uAEF7\uAEF9\uAEFA\uAEFB\uAEFD", 8],
["8461", "\uAF06\uAF09\uAF0A\uAF0B\uAF0C\uAF0E\uAF0F\uAF11", 18],
["8481", "\uAF24", 7, "\uAF2E\uAF2F\uAF31\uAF33\uAF35", 6, "\uAF3E\uAF40\uAF44\uAF45\uAF46\uAF47\uAF4A", 5, "\uAF51", 10, "\uAF5E", 5, "\uAF66", 18, "\uAF7A", 5, "\uAF81\uAF82\uAF83\uAF85\uAF86\uAF87\uAF89", 6, "\uAF92\uAF93\uAF94\uAF96", 5, "\uAF9D", 26, "\uAFBA\uAFBB\uAFBD\uAFBE"],
["8541", "\uAFBF\uAFC1", 5, "\uAFCA\uAFCC\uAFCF", 4, "\uAFD5", 6, "\uAFDD", 4],
["8561", "\uAFE2", 5, "\uAFEA", 5, "\uAFF2\uAFF3\uAFF5\uAFF6\uAFF7\uAFF9", 6, "\uB002\uB003"],
["8581", "\uB005", 6, "\uB00D\uB00E\uB00F\uB011\uB012\uB013\uB015", 6, "\uB01E", 9, "\uB029", 26, "\uB046\uB047\uB049\uB04B\uB04D\uB04F\uB050\uB051\uB052\uB056\uB058\uB05A\uB05B\uB05C\uB05E", 29, "\uB07E\uB07F\uB081\uB082\uB083\uB085", 6, "\uB08E\uB090\uB092", 5, "\uB09B\uB09D\uB09E\uB0A3\uB0A4"],
["8641", "\uB0A5\uB0A6\uB0A7\uB0AA\uB0B0\uB0B2\uB0B6\uB0B7\uB0B9\uB0BA\uB0BB\uB0BD", 6, "\uB0C6\uB0CA", 5, "\uB0D2"],
["8661", "\uB0D3\uB0D5\uB0D6\uB0D7\uB0D9", 6, "\uB0E1\uB0E2\uB0E3\uB0E4\uB0E6", 10],
["8681", "\uB0F1", 22, "\uB10A\uB10D\uB10E\uB10F\uB111\uB114\uB115\uB116\uB117\uB11A\uB11E", 4, "\uB126\uB127\uB129\uB12A\uB12B\uB12D", 6, "\uB136\uB13A", 5, "\uB142\uB143\uB145\uB146\uB147\uB149", 6, "\uB152\uB153\uB156\uB157\uB159\uB15A\uB15B\uB15D\uB15E\uB15F\uB161", 22, "\uB17A\uB17B\uB17D\uB17E\uB17F\uB181\uB183", 4, "\uB18A\uB18C\uB18E\uB18F\uB190\uB191\uB195\uB196\uB197\uB199\uB19A\uB19B\uB19D"],
["8741", "\uB19E", 9, "\uB1A9", 15],
["8761", "\uB1B9", 18, "\uB1CD\uB1CE\uB1CF\uB1D1\uB1D2\uB1D3\uB1D5"],
["8781", "\uB1D6", 5, "\uB1DE\uB1E0", 7, "\uB1EA\uB1EB\uB1ED\uB1EE\uB1EF\uB1F1", 7, "\uB1FA\uB1FC\uB1FE", 5, "\uB206\uB207\uB209\uB20A\uB20D", 6, "\uB216\uB218\uB21A", 5, "\uB221", 18, "\uB235", 6, "\uB23D", 26, "\uB259\uB25A\uB25B\uB25D\uB25E\uB25F\uB261", 6, "\uB26A", 4],
["8841", "\uB26F", 4, "\uB276", 5, "\uB27D", 6, "\uB286\uB287\uB288\uB28A", 4],
["8861", "\uB28F\uB292\uB293\uB295\uB296\uB297\uB29B", 4, "\uB2A2\uB2A4\uB2A7\uB2A8\uB2A9\uB2AB\uB2AD\uB2AE\uB2AF\uB2B1\uB2B2\uB2B3\uB2B5\uB2B6\uB2B7"],
["8881", "\uB2B8", 15, "\uB2CA\uB2CB\uB2CD\uB2CE\uB2CF\uB2D1\uB2D3", 4, "\uB2DA\uB2DC\uB2DE\uB2DF\uB2E0\uB2E1\uB2E3\uB2E7\uB2E9\uB2EA\uB2F0\uB2F1\uB2F2\uB2F6\uB2FC\uB2FD\uB2FE\uB302\uB303\uB305\uB306\uB307\uB309", 6, "\uB312\uB316", 5, "\uB31D", 54, "\uB357\uB359\uB35A\uB35D\uB360\uB361\uB362\uB363"],
["8941", "\uB366\uB368\uB36A\uB36C\uB36D\uB36F\uB372\uB373\uB375\uB376\uB377\uB379", 6, "\uB382\uB386", 5, "\uB38D"],
["8961", "\uB38E\uB38F\uB391\uB392\uB393\uB395", 10, "\uB3A2", 5, "\uB3A9\uB3AA\uB3AB\uB3AD"],
["8981", "\uB3AE", 21, "\uB3C6\uB3C7\uB3C9\uB3CA\uB3CD\uB3CF\uB3D1\uB3D2\uB3D3\uB3D6\uB3D8\uB3DA\uB3DC\uB3DE\uB3DF\uB3E1\uB3E2\uB3E3\uB3E5\uB3E6\uB3E7\uB3E9", 18, "\uB3FD", 18, "\uB411", 6, "\uB419\uB41A\uB41B\uB41D\uB41E\uB41F\uB421", 6, "\uB42A\uB42C", 7, "\uB435", 15],
["8a41", "\uB445", 10, "\uB452\uB453\uB455\uB456\uB457\uB459", 6, "\uB462\uB464\uB466"],
["8a61", "\uB467", 4, "\uB46D", 18, "\uB481\uB482"],
["8a81", "\uB483", 4, "\uB489", 19, "\uB49E", 5, "\uB4A5\uB4A6\uB4A7\uB4A9\uB4AA\uB4AB\uB4AD", 7, "\uB4B6\uB4B8\uB4BA", 5, "\uB4C1\uB4C2\uB4C3\uB4C5\uB4C6\uB4C7\uB4C9", 6, "\uB4D1\uB4D2\uB4D3\uB4D4\uB4D6", 5, "\uB4DE\uB4DF\uB4E1\uB4E2\uB4E5\uB4E7", 4, "\uB4EE\uB4F0\uB4F2", 5, "\uB4F9", 26, "\uB516\uB517\uB519\uB51A\uB51D"],
["8b41", "\uB51E", 5, "\uB526\uB52B", 4, "\uB532\uB533\uB535\uB536\uB537\uB539", 6, "\uB542\uB546"],
["8b61", "\uB547\uB548\uB549\uB54A\uB54E\uB54F\uB551\uB552\uB553\uB555", 6, "\uB55E\uB562", 8],
["8b81", "\uB56B", 52, "\uB5A2\uB5A3\uB5A5\uB5A6\uB5A7\uB5A9\uB5AC\uB5AD\uB5AE\uB5AF\uB5B2\uB5B6", 4, "\uB5BE\uB5BF\uB5C1\uB5C2\uB5C3\uB5C5", 6, "\uB5CE\uB5D2", 5, "\uB5D9", 18, "\uB5ED", 18],
["8c41", "\uB600", 15, "\uB612\uB613\uB615\uB616\uB617\uB619", 4],
["8c61", "\uB61E", 6, "\uB626", 5, "\uB62D", 6, "\uB635", 5],
["8c81", "\uB63B", 12, "\uB649", 26, "\uB665\uB666\uB667\uB669", 50, "\uB69E\uB69F\uB6A1\uB6A2\uB6A3\uB6A5", 5, "\uB6AD\uB6AE\uB6AF\uB6B0\uB6B2", 16],
["8d41", "\uB6C3", 16, "\uB6D5", 8],
["8d61", "\uB6DE", 17, "\uB6F1\uB6F2\uB6F3\uB6F5\uB6F6\uB6F7\uB6F9\uB6FA"],
["8d81", "\uB6FB", 4, "\uB702\uB703\uB704\uB706", 33, "\uB72A\uB72B\uB72D\uB72E\uB731", 6, "\uB73A\uB73C", 7, "\uB745\uB746\uB747\uB749\uB74A\uB74B\uB74D", 6, "\uB756", 9, "\uB761\uB762\uB763\uB765\uB766\uB767\uB769", 6, "\uB772\uB774\uB776", 5, "\uB77E\uB77F\uB781\uB782\uB783\uB785", 6, "\uB78E\uB793\uB794\uB795\uB79A\uB79B\uB79D\uB79E"],
["8e41", "\uB79F\uB7A1", 6, "\uB7AA\uB7AE", 5, "\uB7B6\uB7B7\uB7B9", 8],
["8e61", "\uB7C2", 4, "\uB7C8\uB7CA", 19],
["8e81", "\uB7DE", 13, "\uB7EE\uB7EF\uB7F1\uB7F2\uB7F3\uB7F5", 6, "\uB7FE\uB802", 4, "\uB80A\uB80B\uB80D\uB80E\uB80F\uB811", 6, "\uB81A\uB81C\uB81E", 5, "\uB826\uB827\uB829\uB82A\uB82B\uB82D", 6, "\uB836\uB83A", 5, "\uB841\uB842\uB843\uB845", 11, "\uB852\uB854", 7, "\uB85E\uB85F\uB861\uB862\uB863\uB865", 6, "\uB86E\uB870\uB872", 5, "\uB879\uB87A\uB87B\uB87D", 7],
["8f41", "\uB885", 7, "\uB88E", 17],
["8f61", "\uB8A0", 7, "\uB8A9", 6, "\uB8B1\uB8B2\uB8B3\uB8B5\uB8B6\uB8B7\uB8B9", 4],
["8f81", "\uB8BE\uB8BF\uB8C2\uB8C4\uB8C6", 5, "\uB8CD\uB8CE\uB8CF\uB8D1\uB8D2\uB8D3\uB8D5", 7, "\uB8DE\uB8E0\uB8E2", 5, "\uB8EA\uB8EB\uB8ED\uB8EE\uB8EF\uB8F1", 6, "\uB8FA\uB8FC\uB8FE", 5, "\uB905", 18, "\uB919", 6, "\uB921", 26, "\uB93E\uB93F\uB941\uB942\uB943\uB945", 6, "\uB94D\uB94E\uB950\uB952", 5],
["9041", "\uB95A\uB95B\uB95D\uB95E\uB95F\uB961", 6, "\uB96A\uB96C\uB96E", 5, "\uB976\uB977\uB979\uB97A\uB97B\uB97D"],
["9061", "\uB97E", 5, "\uB986\uB988\uB98B\uB98C\uB98F", 15],
["9081", "\uB99F", 12, "\uB9AE\uB9AF\uB9B1\uB9B2\uB9B3\uB9B5", 6, "\uB9BE\uB9C0\uB9C2", 5, "\uB9CA\uB9CB\uB9CD\uB9D3", 4, "\uB9DA\uB9DC\uB9DF\uB9E0\uB9E2\uB9E6\uB9E7\uB9E9\uB9EA\uB9EB\uB9ED", 6, "\uB9F6\uB9FB", 4, "\uBA02", 5, "\uBA09", 11, "\uBA16", 33, "\uBA3A\uBA3B\uBA3D\uBA3E\uBA3F\uBA41\uBA43\uBA44\uBA45\uBA46"],
["9141", "\uBA47\uBA4A\uBA4C\uBA4F\uBA50\uBA51\uBA52\uBA56\uBA57\uBA59\uBA5A\uBA5B\uBA5D", 6, "\uBA66\uBA6A", 5],
["9161", "\uBA72\uBA73\uBA75\uBA76\uBA77\uBA79", 9, "\uBA86\uBA88\uBA89\uBA8A\uBA8B\uBA8D", 5],
["9181", "\uBA93", 20, "\uBAAA\uBAAD\uBAAE\uBAAF\uBAB1\uBAB3", 4, "\uBABA\uBABC\uBABE", 5, "\uBAC5\uBAC6\uBAC7\uBAC9", 14, "\uBADA", 33, "\uBAFD\uBAFE\uBAFF\uBB01\uBB02\uBB03\uBB05", 7, "\uBB0E\uBB10\uBB12", 5, "\uBB19\uBB1A\uBB1B\uBB1D\uBB1E\uBB1F\uBB21", 6],
["9241", "\uBB28\uBB2A\uBB2C", 7, "\uBB37\uBB39\uBB3A\uBB3F", 4, "\uBB46\uBB48\uBB4A\uBB4B\uBB4C\uBB4E\uBB51\uBB52"],
["9261", "\uBB53\uBB55\uBB56\uBB57\uBB59", 7, "\uBB62\uBB64", 7, "\uBB6D", 4],
["9281", "\uBB72", 21, "\uBB89\uBB8A\uBB8B\uBB8D\uBB8E\uBB8F\uBB91", 18, "\uBBA5\uBBA6\uBBA7\uBBA9\uBBAA\uBBAB\uBBAD", 6, "\uBBB5\uBBB6\uBBB8", 7, "\uBBC1\uBBC2\uBBC3\uBBC5\uBBC6\uBBC7\uBBC9", 6, "\uBBD1\uBBD2\uBBD4", 35, "\uBBFA\uBBFB\uBBFD\uBBFE\uBC01"],
["9341", "\uBC03", 4, "\uBC0A\uBC0E\uBC10\uBC12\uBC13\uBC19\uBC1A\uBC20\uBC21\uBC22\uBC23\uBC26\uBC28\uBC2A\uBC2B\uBC2C\uBC2E\uBC2F\uBC32\uBC33\uBC35"],
["9361", "\uBC36\uBC37\uBC39", 6, "\uBC42\uBC46\uBC47\uBC48\uBC4A\uBC4B\uBC4E\uBC4F\uBC51", 8],
["9381", "\uBC5A\uBC5B\uBC5C\uBC5E", 37, "\uBC86\uBC87\uBC89\uBC8A\uBC8D\uBC8F", 4, "\uBC96\uBC98\uBC9B", 4, "\uBCA2\uBCA3\uBCA5\uBCA6\uBCA9", 6, "\uBCB2\uBCB6", 5, "\uBCBE\uBCBF\uBCC1\uBCC2\uBCC3\uBCC5", 7, "\uBCCE\uBCD2\uBCD3\uBCD4\uBCD6\uBCD7\uBCD9\uBCDA\uBCDB\uBCDD", 22, "\uBCF7\uBCF9\uBCFA\uBCFB\uBCFD"],
["9441", "\uBCFE", 5, "\uBD06\uBD08\uBD0A", 5, "\uBD11\uBD12\uBD13\uBD15", 8],
["9461", "\uBD1E", 5, "\uBD25", 6, "\uBD2D", 12],
["9481", "\uBD3A", 5, "\uBD41", 6, "\uBD4A\uBD4B\uBD4D\uBD4E\uBD4F\uBD51", 6, "\uBD5A", 9, "\uBD65\uBD66\uBD67\uBD69", 22, "\uBD82\uBD83\uBD85\uBD86\uBD8B", 4, "\uBD92\uBD94\uBD96\uBD97\uBD98\uBD9B\uBD9D", 6, "\uBDA5", 10, "\uBDB1", 6, "\uBDB9", 24],
["9541", "\uBDD2\uBDD3\uBDD6\uBDD7\uBDD9\uBDDA\uBDDB\uBDDD", 11, "\uBDEA", 5, "\uBDF1"],
["9561", "\uBDF2\uBDF3\uBDF5\uBDF6\uBDF7\uBDF9", 6, "\uBE01\uBE02\uBE04\uBE06", 5, "\uBE0E\uBE0F\uBE11\uBE12\uBE13"],
["9581", "\uBE15", 6, "\uBE1E\uBE20", 35, "\uBE46\uBE47\uBE49\uBE4A\uBE4B\uBE4D\uBE4F", 4, "\uBE56\uBE58\uBE5C\uBE5D\uBE5E\uBE5F\uBE62\uBE63\uBE65\uBE66\uBE67\uBE69\uBE6B", 4, "\uBE72\uBE76", 4, "\uBE7E\uBE7F\uBE81\uBE82\uBE83\uBE85", 6, "\uBE8E\uBE92", 5, "\uBE9A", 13, "\uBEA9", 14],
["9641", "\uBEB8", 23, "\uBED2\uBED3"],
["9661", "\uBED5\uBED6\uBED9", 6, "\uBEE1\uBEE2\uBEE6", 5, "\uBEED", 8],
["9681", "\uBEF6", 10, "\uBF02", 5, "\uBF0A", 13, "\uBF1A\uBF1E", 33, "\uBF42\uBF43\uBF45\uBF46\uBF47\uBF49", 6, "\uBF52\uBF53\uBF54\uBF56", 44],
["9741", "\uBF83", 16, "\uBF95", 8],
["9761", "\uBF9E", 17, "\uBFB1", 7],
["9781", "\uBFB9", 11, "\uBFC6", 5, "\uBFCE\uBFCF\uBFD1\uBFD2\uBFD3\uBFD5", 6, "\uBFDD\uBFDE\uBFE0\uBFE2", 89, "\uC03D\uC03E\uC03F"],
["9841", "\uC040", 16, "\uC052", 5, "\uC059\uC05A\uC05B"],
["9861", "\uC05D\uC05E\uC05F\uC061", 6, "\uC06A", 15],
["9881", "\uC07A", 21, "\uC092\uC093\uC095\uC096\uC097\uC099", 6, "\uC0A2\uC0A4\uC0A6", 5, "\uC0AE\uC0B1\uC0B2\uC0B7", 4, "\uC0BE\uC0C2\uC0C3\uC0C4\uC0C6\uC0C7\uC0CA\uC0CB\uC0CD\uC0CE\uC0CF\uC0D1", 6, "\uC0DA\uC0DE", 5, "\uC0E6\uC0E7\uC0E9\uC0EA\uC0EB\uC0ED", 6, "\uC0F6\uC0F8\uC0FA", 5, "\uC101\uC102\uC103\uC105\uC106\uC107\uC109", 6, "\uC111\uC112\uC113\uC114\uC116", 5, "\uC121\uC122\uC125\uC128\uC129\uC12A\uC12B\uC12E"],
["9941", "\uC132\uC133\uC134\uC135\uC137\uC13A\uC13B\uC13D\uC13E\uC13F\uC141", 6, "\uC14A\uC14E", 5, "\uC156\uC157"],
["9961", "\uC159\uC15A\uC15B\uC15D", 6, "\uC166\uC16A", 5, "\uC171\uC172\uC173\uC175\uC176\uC177\uC179\uC17A\uC17B"],
["9981", "\uC17C", 8, "\uC186", 5, "\uC18F\uC191\uC192\uC193\uC195\uC197", 4, "\uC19E\uC1A0\uC1A2\uC1A3\uC1A4\uC1A6\uC1A7\uC1AA\uC1AB\uC1AD\uC1AE\uC1AF\uC1B1", 11, "\uC1BE", 5, "\uC1C5\uC1C6\uC1C7\uC1C9\uC1CA\uC1CB\uC1CD", 6, "\uC1D5\uC1D6\uC1D9", 6, "\uC1E1\uC1E2\uC1E3\uC1E5\uC1E6\uC1E7\uC1E9", 6, "\uC1F2\uC1F4", 7, "\uC1FE\uC1FF\uC201\uC202\uC203\uC205", 6, "\uC20E\uC210\uC212", 5, "\uC21A\uC21B\uC21D\uC21E\uC221\uC222\uC223"],
["9a41", "\uC224\uC225\uC226\uC227\uC22A\uC22C\uC22E\uC230\uC233\uC235", 16],
["9a61", "\uC246\uC247\uC249", 6, "\uC252\uC253\uC255\uC256\uC257\uC259", 6, "\uC261\uC262\uC263\uC264\uC266"],
["9a81", "\uC267", 4, "\uC26E\uC26F\uC271\uC272\uC273\uC275", 6, "\uC27E\uC280\uC282", 5, "\uC28A", 5, "\uC291", 6, "\uC299\uC29A\uC29C\uC29E", 5, "\uC2A6\uC2A7\uC2A9\uC2AA\uC2AB\uC2AE", 5, "\uC2B6\uC2B8\uC2BA", 33, "\uC2DE\uC2DF\uC2E1\uC2E2\uC2E5", 5, "\uC2EE\uC2F0\uC2F2\uC2F3\uC2F4\uC2F5\uC2F7\uC2FA\uC2FD\uC2FE\uC2FF\uC301", 6, "\uC30A\uC30B\uC30E\uC30F"],
["9b41", "\uC310\uC311\uC312\uC316\uC317\uC319\uC31A\uC31B\uC31D", 6, "\uC326\uC327\uC32A", 8],
["9b61", "\uC333", 17, "\uC346", 7],
["9b81", "\uC34E", 25, "\uC36A\uC36B\uC36D\uC36E\uC36F\uC371\uC373", 4, "\uC37A\uC37B\uC37E", 5, "\uC385\uC386\uC387\uC389\uC38A\uC38B\uC38D", 50, "\uC3C1", 22, "\uC3DA"],
["9c41", "\uC3DB\uC3DD\uC3DE\uC3E1\uC3E3", 4, "\uC3EA\uC3EB\uC3EC\uC3EE", 5, "\uC3F6\uC3F7\uC3F9", 5],
["9c61", "\uC3FF", 8, "\uC409", 6, "\uC411", 9],
["9c81", "\uC41B", 8, "\uC425", 6, "\uC42D\uC42E\uC42F\uC431\uC432\uC433\uC435", 6, "\uC43E", 9, "\uC449", 26, "\uC466\uC467\uC469\uC46A\uC46B\uC46D", 6, "\uC476\uC477\uC478\uC47A", 5, "\uC481", 18, "\uC495", 6, "\uC49D", 12],
["9d41", "\uC4AA", 13, "\uC4B9\uC4BA\uC4BB\uC4BD", 8],
["9d61", "\uC4C6", 25],
["9d81", "\uC4E0", 8, "\uC4EA", 5, "\uC4F2\uC4F3\uC4F5\uC4F6\uC4F7\uC4F9\uC4FB\uC4FC\uC4FD\uC4FE\uC502", 9, "\uC50D\uC50E\uC50F\uC511\uC512\uC513\uC515", 6, "\uC51D", 10, "\uC52A\uC52B\uC52D\uC52E\uC52F\uC531", 6, "\uC53A\uC53C\uC53E", 5, "\uC546\uC547\uC54B\uC54F\uC550\uC551\uC552\uC556\uC55A\uC55B\uC55C\uC55F\uC562\uC563\uC565\uC566\uC567\uC569", 6, "\uC572\uC576", 5, "\uC57E\uC57F\uC581\uC582\uC583\uC585\uC586\uC588\uC589\uC58A\uC58B\uC58E\uC590\uC592\uC593\uC594"],
["9e41", "\uC596\uC599\uC59A\uC59B\uC59D\uC59E\uC59F\uC5A1", 7, "\uC5AA", 9, "\uC5B6"],
["9e61", "\uC5B7\uC5BA\uC5BF", 4, "\uC5CB\uC5CD\uC5CF\uC5D2\uC5D3\uC5D5\uC5D6\uC5D7\uC5D9", 6, "\uC5E2\uC5E4\uC5E6\uC5E7"],
["9e81", "\uC5E8\uC5E9\uC5EA\uC5EB\uC5EF\uC5F1\uC5F2\uC5F3\uC5F5\uC5F8\uC5F9\uC5FA\uC5FB\uC602\uC603\uC604\uC609\uC60A\uC60B\uC60D\uC60E\uC60F\uC611", 6, "\uC61A\uC61D", 6, "\uC626\uC627\uC629\uC62A\uC62B\uC62F\uC631\uC632\uC636\uC638\uC63A\uC63C\uC63D\uC63E\uC63F\uC642\uC643\uC645\uC646\uC647\uC649", 6, "\uC652\uC656", 5, "\uC65E\uC65F\uC661", 10, "\uC66D\uC66E\uC670\uC672", 5, "\uC67A\uC67B\uC67D\uC67E\uC67F\uC681", 6, "\uC68A\uC68C\uC68E", 5, "\uC696\uC697\uC699\uC69A\uC69B\uC69D", 6, "\uC6A6"],
["9f41", "\uC6A8\uC6AA", 5, "\uC6B2\uC6B3\uC6B5\uC6B6\uC6B7\uC6BB", 4, "\uC6C2\uC6C4\uC6C6", 5, "\uC6CE"],
["9f61", "\uC6CF\uC6D1\uC6D2\uC6D3\uC6D5", 6, "\uC6DE\uC6DF\uC6E2", 5, "\uC6EA\uC6EB\uC6ED\uC6EE\uC6EF\uC6F1\uC6F2"],
["9f81", "\uC6F3", 4, "\uC6FA\uC6FB\uC6FC\uC6FE", 5, "\uC706\uC707\uC709\uC70A\uC70B\uC70D", 6, "\uC716\uC718\uC71A", 5, "\uC722\uC723\uC725\uC726\uC727\uC729", 6, "\uC732\uC734\uC736\uC738\uC739\uC73A\uC73B\uC73E\uC73F\uC741\uC742\uC743\uC745", 4, "\uC74B\uC74E\uC750\uC759\uC75A\uC75B\uC75D\uC75E\uC75F\uC761", 6, "\uC769\uC76A\uC76C", 7, "\uC776\uC777\uC779\uC77A\uC77B\uC77F\uC780\uC781\uC782\uC786\uC78B\uC78C\uC78D\uC78F\uC792\uC793\uC795\uC799\uC79B", 4, "\uC7A2\uC7A7", 4, "\uC7AE\uC7AF\uC7B1\uC7B2\uC7B3\uC7B5\uC7B6\uC7B7"],
["a041", "\uC7B8\uC7B9\uC7BA\uC7BB\uC7BE\uC7C2", 5, "\uC7CA\uC7CB\uC7CD\uC7CF\uC7D1", 6, "\uC7D9\uC7DA\uC7DB\uC7DC"],
["a061", "\uC7DE", 5, "\uC7E5\uC7E6\uC7E7\uC7E9\uC7EA\uC7EB\uC7ED", 13],
["a081", "\uC7FB", 4, "\uC802\uC803\uC805\uC806\uC807\uC809\uC80B", 4, "\uC812\uC814\uC817", 4, "\uC81E\uC81F\uC821\uC822\uC823\uC825", 6, "\uC82E\uC830\uC832", 5, "\uC839\uC83A\uC83B\uC83D\uC83E\uC83F\uC841", 6, "\uC84A\uC84B\uC84E", 5, "\uC855", 26, "\uC872\uC873\uC875\uC876\uC877\uC879\uC87B", 4, "\uC882\uC884\uC888\uC889\uC88A\uC88E", 5, "\uC895", 7, "\uC89E\uC8A0\uC8A2\uC8A3\uC8A4"],
["a141", "\uC8A5\uC8A6\uC8A7\uC8A9", 18, "\uC8BE\uC8BF\uC8C0\uC8C1"],
["a161", "\uC8C2\uC8C3\uC8C5\uC8C6\uC8C7\uC8C9\uC8CA\uC8CB\uC8CD", 6, "\uC8D6\uC8D8\uC8DA", 5, "\uC8E2\uC8E3\uC8E5"],
["a181", "\uC8E6", 14, "\uC8F6", 5, "\uC8FE\uC8FF\uC901\uC902\uC903\uC907", 4, "\uC90E\u3000\u3001\u3002\xB7\u2025\u2026\xA8\u3003\xAD\u2015\u2225\uFF3C\u223C\u2018\u2019\u201C\u201D\u3014\u3015\u3008", 9, "\xB1\xD7\xF7\u2260\u2264\u2265\u221E\u2234\xB0\u2032\u2033\u2103\u212B\uFFE0\uFFE1\uFFE5\u2642\u2640\u2220\u22A5\u2312\u2202\u2207\u2261\u2252\xA7\u203B\u2606\u2605\u25CB\u25CF\u25CE\u25C7\u25C6\u25A1\u25A0\u25B3\u25B2\u25BD\u25BC\u2192\u2190\u2191\u2193\u2194\u3013\u226A\u226B\u221A\u223D\u221D\u2235\u222B\u222C\u2208\u220B\u2286\u2287\u2282\u2283\u222A\u2229\u2227\u2228\uFFE2"],
["a241", "\uC910\uC912", 5, "\uC919", 18],
["a261", "\uC92D", 6, "\uC935", 18],
["a281", "\uC948", 7, "\uC952\uC953\uC955\uC956\uC957\uC959", 6, "\uC962\uC964", 7, "\uC96D\uC96E\uC96F\u21D2\u21D4\u2200\u2203\xB4\uFF5E\u02C7\u02D8\u02DD\u02DA\u02D9\xB8\u02DB\xA1\xBF\u02D0\u222E\u2211\u220F\xA4\u2109\u2030\u25C1\u25C0\u25B7\u25B6\u2664\u2660\u2661\u2665\u2667\u2663\u2299\u25C8\u25A3\u25D0\u25D1\u2592\u25A4\u25A5\u25A8\u25A7\u25A6\u25A9\u2668\u260F\u260E\u261C\u261E\xB6\u2020\u2021\u2195\u2197\u2199\u2196\u2198\u266D\u2669\u266A\u266C\u327F\u321C\u2116\u33C7\u2122\u33C2\u33D8\u2121\u20AC\xAE"],
["a341", "\uC971\uC972\uC973\uC975", 6, "\uC97D", 10, "\uC98A\uC98B\uC98D\uC98E\uC98F"],
["a361", "\uC991", 6, "\uC99A\uC99C\uC99E", 16],
["a381", "\uC9AF", 16, "\uC9C2\uC9C3\uC9C5\uC9C6\uC9C9\uC9CB", 4, "\uC9D2\uC9D4\uC9D7\uC9D8\uC9DB\uFF01", 58, "\uFFE6\uFF3D", 32, "\uFFE3"],
["a441", "\uC9DE\uC9DF\uC9E1\uC9E3\uC9E5\uC9E6\uC9E8\uC9E9\uC9EA\uC9EB\uC9EE\uC9F2", 5, "\uC9FA\uC9FB\uC9FD\uC9FE\uC9FF\uCA01\uCA02\uCA03\uCA04"],
["a461", "\uCA05\uCA06\uCA07\uCA0A\uCA0E", 5, "\uCA15\uCA16\uCA17\uCA19", 12],
["a481", "\uCA26\uCA27\uCA28\uCA2A", 28, "\u3131", 93],
["a541", "\uCA47", 4, "\uCA4E\uCA4F\uCA51\uCA52\uCA53\uCA55", 6, "\uCA5E\uCA62", 5, "\uCA69\uCA6A"],
["a561", "\uCA6B", 17, "\uCA7E", 5, "\uCA85\uCA86"],
["a581", "\uCA87", 16, "\uCA99", 14, "\u2170", 9],
["a5b0", "\u2160", 9],
["a5c1", "\u0391", 16, "\u03A3", 6],
["a5e1", "\u03B1", 16, "\u03C3", 6],
["a641", "\uCAA8", 19, "\uCABE\uCABF\uCAC1\uCAC2\uCAC3\uCAC5"],
["a661", "\uCAC6", 5, "\uCACE\uCAD0\uCAD2\uCAD4\uCAD5\uCAD6\uCAD7\uCADA", 5, "\uCAE1", 6],
["a681", "\uCAE8\uCAE9\uCAEA\uCAEB\uCAED", 6, "\uCAF5", 18, "\uCB09\uCB0A\u2500\u2502\u250C\u2510\u2518\u2514\u251C\u252C\u2524\u2534\u253C\u2501\u2503\u250F\u2513\u251B\u2517\u2523\u2533\u252B\u253B\u254B\u2520\u252F\u2528\u2537\u253F\u251D\u2530\u2525\u2538\u2542\u2512\u2511\u251A\u2519\u2516\u2515\u250E\u250D\u251E\u251F\u2521\u2522\u2526\u2527\u2529\u252A\u252D\u252E\u2531\u2532\u2535\u2536\u2539\u253A\u253D\u253E\u2540\u2541\u2543", 7],
["a741", "\uCB0B", 4, "\uCB11\uCB12\uCB13\uCB15\uCB16\uCB17\uCB19", 6, "\uCB22", 7],
["a761", "\uCB2A", 22, "\uCB42\uCB43\uCB44"],
["a781", "\uCB45\uCB46\uCB47\uCB4A\uCB4B\uCB4D\uCB4E\uCB4F\uCB51", 6, "\uCB5A\uCB5B\uCB5C\uCB5E", 5, "\uCB65", 7, "\u3395\u3396\u3397\u2113\u3398\u33C4\u33A3\u33A4\u33A5\u33A6\u3399", 9, "\u33CA\u338D\u338E\u338F\u33CF\u3388\u3389\u33C8\u33A7\u33A8\u33B0", 9, "\u3380", 4, "\u33BA", 5, "\u3390", 4, "\u2126\u33C0\u33C1\u338A\u338B\u338C\u33D6\u33C5\u33AD\u33AE\u33AF\u33DB\u33A9\u33AA\u33AB\u33AC\u33DD\u33D0\u33D3\u33C3\u33C9\u33DC\u33C6"],
["a841", "\uCB6D", 10, "\uCB7A", 14],
["a861", "\uCB89", 18, "\uCB9D", 6],
["a881", "\uCBA4", 19, "\uCBB9", 11, "\xC6\xD0\xAA\u0126"],
["a8a6", "\u0132"],
["a8a8", "\u013F\u0141\xD8\u0152\xBA\xDE\u0166\u014A"],
["a8b1", "\u3260", 27, "\u24D0", 25, "\u2460", 14, "\xBD\u2153\u2154\xBC\xBE\u215B\u215C\u215D\u215E"],
["a941", "\uCBC5", 14, "\uCBD5", 10],
["a961", "\uCBE0\uCBE1\uCBE2\uCBE3\uCBE5\uCBE6\uCBE8\uCBEA", 18],
["a981", "\uCBFD", 14, "\uCC0E\uCC0F\uCC11\uCC12\uCC13\uCC15", 6, "\uCC1E\uCC1F\uCC20\uCC23\uCC24\xE6\u0111\xF0\u0127\u0131\u0133\u0138\u0140\u0142\xF8\u0153\xDF\xFE\u0167\u014B\u0149\u3200", 27, "\u249C", 25, "\u2474", 14, "\xB9\xB2\xB3\u2074\u207F\u2081\u2082\u2083\u2084"],
["aa41", "\uCC25\uCC26\uCC2A\uCC2B\uCC2D\uCC2F\uCC31", 6, "\uCC3A\uCC3F", 4, "\uCC46\uCC47\uCC49\uCC4A\uCC4B\uCC4D\uCC4E"],
["aa61", "\uCC4F", 4, "\uCC56\uCC5A", 5, "\uCC61\uCC62\uCC63\uCC65\uCC67\uCC69", 6, "\uCC71\uCC72"],
["aa81", "\uCC73\uCC74\uCC76", 29, "\u3041", 82],
["ab41", "\uCC94\uCC95\uCC96\uCC97\uCC9A\uCC9B\uCC9D\uCC9E\uCC9F\uCCA1", 6, "\uCCAA\uCCAE", 5, "\uCCB6\uCCB7\uCCB9"],
["ab61", "\uCCBA\uCCBB\uCCBD", 6, "\uCCC6\uCCC8\uCCCA", 5, "\uCCD1\uCCD2\uCCD3\uCCD5", 5],
["ab81", "\uCCDB", 8, "\uCCE5", 6, "\uCCED\uCCEE\uCCEF\uCCF1", 12, "\u30A1", 85],
["ac41", "\uCCFE\uCCFF\uCD00\uCD02", 5, "\uCD0A\uCD0B\uCD0D\uCD0E\uCD0F\uCD11", 6, "\uCD1A\uCD1C\uCD1E\uCD1F\uCD20"],
["ac61", "\uCD21\uCD22\uCD23\uCD25\uCD26\uCD27\uCD29\uCD2A\uCD2B\uCD2D", 11, "\uCD3A", 4],
["ac81", "\uCD3F", 28, "\uCD5D\uCD5E\uCD5F\u0410", 5, "\u0401\u0416", 25],
["acd1", "\u0430", 5, "\u0451\u0436", 25],
["ad41", "\uCD61\uCD62\uCD63\uCD65", 6, "\uCD6E\uCD70\uCD72", 5, "\uCD79", 7],
["ad61", "\uCD81", 6, "\uCD89", 10, "\uCD96\uCD97\uCD99\uCD9A\uCD9B\uCD9D\uCD9E\uCD9F"],
["ad81", "\uCDA0\uCDA1\uCDA2\uCDA3\uCDA6\uCDA8\uCDAA", 5, "\uCDB1", 18, "\uCDC5"],
["ae41", "\uCDC6", 5, "\uCDCD\uCDCE\uCDCF\uCDD1", 16],
["ae61", "\uCDE2", 5, "\uCDE9\uCDEA\uCDEB\uCDED\uCDEE\uCDEF\uCDF1", 6, "\uCDFA\uCDFC\uCDFE", 4],
["ae81", "\uCE03\uCE05\uCE06\uCE07\uCE09\uCE0A\uCE0B\uCE0D", 6, "\uCE15\uCE16\uCE17\uCE18\uCE1A", 5, "\uCE22\uCE23\uCE25\uCE26\uCE27\uCE29\uCE2A\uCE2B"],
["af41", "\uCE2C\uCE2D\uCE2E\uCE2F\uCE32\uCE34\uCE36", 19],
["af61", "\uCE4A", 13, "\uCE5A\uCE5B\uCE5D\uCE5E\uCE62", 5, "\uCE6A\uCE6C"],
["af81", "\uCE6E", 5, "\uCE76\uCE77\uCE79\uCE7A\uCE7B\uCE7D", 6, "\uCE86\uCE88\uCE8A", 5, "\uCE92\uCE93\uCE95\uCE96\uCE97\uCE99"],
["b041", "\uCE9A", 5, "\uCEA2\uCEA6", 5, "\uCEAE", 12],
["b061", "\uCEBB", 5, "\uCEC2", 19],
["b081", "\uCED6", 13, "\uCEE6\uCEE7\uCEE9\uCEEA\uCEED", 6, "\uCEF6\uCEFA", 5, "\uAC00\uAC01\uAC04\uAC07\uAC08\uAC09\uAC0A\uAC10", 7, "\uAC19", 4, "\uAC20\uAC24\uAC2C\uAC2D\uAC2F\uAC30\uAC31\uAC38\uAC39\uAC3C\uAC40\uAC4B\uAC4D\uAC54\uAC58\uAC5C\uAC70\uAC71\uAC74\uAC77\uAC78\uAC7A\uAC80\uAC81\uAC83\uAC84\uAC85\uAC86\uAC89\uAC8A\uAC8B\uAC8C\uAC90\uAC94\uAC9C\uAC9D\uAC9F\uACA0\uACA1\uACA8\uACA9\uACAA\uACAC\uACAF\uACB0\uACB8\uACB9\uACBB\uACBC\uACBD\uACC1\uACC4\uACC8\uACCC\uACD5\uACD7\uACE0\uACE1\uACE4\uACE7\uACE8\uACEA\uACEC\uACEF\uACF0\uACF1\uACF3\uACF5\uACF6\uACFC\uACFD\uAD00\uAD04\uAD06"],
["b141", "\uCF02\uCF03\uCF05\uCF06\uCF07\uCF09", 6, "\uCF12\uCF14\uCF16", 5, "\uCF1D\uCF1E\uCF1F\uCF21\uCF22\uCF23"],
["b161", "\uCF25", 6, "\uCF2E\uCF32", 5, "\uCF39", 11],
["b181", "\uCF45", 14, "\uCF56\uCF57\uCF59\uCF5A\uCF5B\uCF5D", 6, "\uCF66\uCF68\uCF6A\uCF6B\uCF6C\uAD0C\uAD0D\uAD0F\uAD11\uAD18\uAD1C\uAD20\uAD29\uAD2C\uAD2D\uAD34\uAD35\uAD38\uAD3C\uAD44\uAD45\uAD47\uAD49\uAD50\uAD54\uAD58\uAD61\uAD63\uAD6C\uAD6D\uAD70\uAD73\uAD74\uAD75\uAD76\uAD7B\uAD7C\uAD7D\uAD7F\uAD81\uAD82\uAD88\uAD89\uAD8C\uAD90\uAD9C\uAD9D\uADA4\uADB7\uADC0\uADC1\uADC4\uADC8\uADD0\uADD1\uADD3\uADDC\uADE0\uADE4\uADF8\uADF9\uADFC\uADFF\uAE00\uAE01\uAE08\uAE09\uAE0B\uAE0D\uAE14\uAE30\uAE31\uAE34\uAE37\uAE38\uAE3A\uAE40\uAE41\uAE43\uAE45\uAE46\uAE4A\uAE4C\uAE4D\uAE4E\uAE50\uAE54\uAE56\uAE5C\uAE5D\uAE5F\uAE60\uAE61\uAE65\uAE68\uAE69\uAE6C\uAE70\uAE78"],
["b241", "\uCF6D\uCF6E\uCF6F\uCF72\uCF73\uCF75\uCF76\uCF77\uCF79", 6, "\uCF81\uCF82\uCF83\uCF84\uCF86", 5, "\uCF8D"],
["b261", "\uCF8E", 18, "\uCFA2", 5, "\uCFA9"],
["b281", "\uCFAA", 5, "\uCFB1", 18, "\uCFC5", 6, "\uAE79\uAE7B\uAE7C\uAE7D\uAE84\uAE85\uAE8C\uAEBC\uAEBD\uAEBE\uAEC0\uAEC4\uAECC\uAECD\uAECF\uAED0\uAED1\uAED8\uAED9\uAEDC\uAEE8\uAEEB\uAEED\uAEF4\uAEF8\uAEFC\uAF07\uAF08\uAF0D\uAF10\uAF2C\uAF2D\uAF30\uAF32\uAF34\uAF3C\uAF3D\uAF3F\uAF41\uAF42\uAF43\uAF48\uAF49\uAF50\uAF5C\uAF5D\uAF64\uAF65\uAF79\uAF80\uAF84\uAF88\uAF90\uAF91\uAF95\uAF9C\uAFB8\uAFB9\uAFBC\uAFC0\uAFC7\uAFC8\uAFC9\uAFCB\uAFCD\uAFCE\uAFD4\uAFDC\uAFE8\uAFE9\uAFF0\uAFF1\uAFF4\uAFF8\uB000\uB001\uB004\uB00C\uB010\uB014\uB01C\uB01D\uB028\uB044\uB045\uB048\uB04A\uB04C\uB04E\uB053\uB054\uB055\uB057\uB059"],
["b341", "\uCFCC", 19, "\uCFE2\uCFE3\uCFE5\uCFE6\uCFE7\uCFE9"],
["b361", "\uCFEA", 5, "\uCFF2\uCFF4\uCFF6", 5, "\uCFFD\uCFFE\uCFFF\uD001\uD002\uD003\uD005", 5],
["b381", "\uD00B", 5, "\uD012", 5, "\uD019", 19, "\uB05D\uB07C\uB07D\uB080\uB084\uB08C\uB08D\uB08F\uB091\uB098\uB099\uB09A\uB09C\uB09F\uB0A0\uB0A1\uB0A2\uB0A8\uB0A9\uB0AB", 4, "\uB0B1\uB0B3\uB0B4\uB0B5\uB0B8\uB0BC\uB0C4\uB0C5\uB0C7\uB0C8\uB0C9\uB0D0\uB0D1\uB0D4\uB0D8\uB0E0\uB0E5\uB108\uB109\uB10B\uB10C\uB110\uB112\uB113\uB118\uB119\uB11B\uB11C\uB11D\uB123\uB124\uB125\uB128\uB12C\uB134\uB135\uB137\uB138\uB139\uB140\uB141\uB144\uB148\uB150\uB151\uB154\uB155\uB158\uB15C\uB160\uB178\uB179\uB17C\uB180\uB182\uB188\uB189\uB18B\uB18D\uB192\uB193\uB194\uB198\uB19C\uB1A8\uB1CC\uB1D0\uB1D4\uB1DC\uB1DD"],
["b441", "\uD02E", 5, "\uD036\uD037\uD039\uD03A\uD03B\uD03D", 6, "\uD046\uD048\uD04A", 5],
["b461", "\uD051\uD052\uD053\uD055\uD056\uD057\uD059", 6, "\uD061", 10, "\uD06E\uD06F"],
["b481", "\uD071\uD072\uD073\uD075", 6, "\uD07E\uD07F\uD080\uD082", 18, "\uB1DF\uB1E8\uB1E9\uB1EC\uB1F0\uB1F9\uB1FB\uB1FD\uB204\uB205\uB208\uB20B\uB20C\uB214\uB215\uB217\uB219\uB220\uB234\uB23C\uB258\uB25C\uB260\uB268\uB269\uB274\uB275\uB27C\uB284\uB285\uB289\uB290\uB291\uB294\uB298\uB299\uB29A\uB2A0\uB2A1\uB2A3\uB2A5\uB2A6\uB2AA\uB2AC\uB2B0\uB2B4\uB2C8\uB2C9\uB2CC\uB2D0\uB2D2\uB2D8\uB2D9\uB2DB\uB2DD\uB2E2\uB2E4\uB2E5\uB2E6\uB2E8\uB2EB", 4, "\uB2F3\uB2F4\uB2F5\uB2F7", 4, "\uB2FF\uB300\uB301\uB304\uB308\uB310\uB311\uB313\uB314\uB315\uB31C\uB354\uB355\uB356\uB358\uB35B\uB35C\uB35E\uB35F\uB364\uB365"],
["b541", "\uD095", 14, "\uD0A6\uD0A7\uD0A9\uD0AA\uD0AB\uD0AD", 5],
["b561", "\uD0B3\uD0B6\uD0B8\uD0BA", 5, "\uD0C2\uD0C3\uD0C5\uD0C6\uD0C7\uD0CA", 5, "\uD0D2\uD0D6", 4],
["b581", "\uD0DB\uD0DE\uD0DF\uD0E1\uD0E2\uD0E3\uD0E5", 6, "\uD0EE\uD0F2", 5, "\uD0F9", 11, "\uB367\uB369\uB36B\uB36E\uB370\uB371\uB374\uB378\uB380\uB381\uB383\uB384\uB385\uB38C\uB390\uB394\uB3A0\uB3A1\uB3A8\uB3AC\uB3C4\uB3C5\uB3C8\uB3CB\uB3CC\uB3CE\uB3D0\uB3D4\uB3D5\uB3D7\uB3D9\uB3DB\uB3DD\uB3E0\uB3E4\uB3E8\uB3FC\uB410\uB418\uB41C\uB420\uB428\uB429\uB42B\uB434\uB450\uB451\uB454\uB458\uB460\uB461\uB463\uB465\uB46C\uB480\uB488\uB49D\uB4A4\uB4A8\uB4AC\uB4B5\uB4B7\uB4B9\uB4C0\uB4C4\uB4C8\uB4D0\uB4D5\uB4DC\uB4DD\uB4E0\uB4E3\uB4E4\uB4E6\uB4EC\uB4ED\uB4EF\uB4F1\uB4F8\uB514\uB515\uB518\uB51B\uB51C\uB524\uB525\uB527\uB528\uB529\uB52A\uB530\uB531\uB534\uB538"],
["b641", "\uD105", 7, "\uD10E", 17],
["b661", "\uD120", 15, "\uD132\uD133\uD135\uD136\uD137\uD139\uD13B\uD13C\uD13D\uD13E"],
["b681", "\uD13F\uD142\uD146", 5, "\uD14E\uD14F\uD151\uD152\uD153\uD155", 6, "\uD15E\uD160\uD162", 5, "\uD169\uD16A\uD16B\uD16D\uB540\uB541\uB543\uB544\uB545\uB54B\uB54C\uB54D\uB550\uB554\uB55C\uB55D\uB55F\uB560\uB561\uB5A0\uB5A1\uB5A4\uB5A8\uB5AA\uB5AB\uB5B0\uB5B1\uB5B3\uB5B4\uB5B5\uB5BB\uB5BC\uB5BD\uB5C0\uB5C4\uB5CC\uB5CD\uB5CF\uB5D0\uB5D1\uB5D8\uB5EC\uB610\uB611\uB614\uB618\uB625\uB62C\uB634\uB648\uB664\uB668\uB69C\uB69D\uB6A0\uB6A4\uB6AB\uB6AC\uB6B1\uB6D4\uB6F0\uB6F4\uB6F8\uB700\uB701\uB705\uB728\uB729\uB72C\uB72F\uB730\uB738\uB739\uB73B\uB744\uB748\uB74C\uB754\uB755\uB760\uB764\uB768\uB770\uB771\uB773\uB775\uB77C\uB77D\uB780\uB784\uB78C\uB78D\uB78F\uB790\uB791\uB792\uB796\uB797"],
["b741", "\uD16E", 13, "\uD17D", 6, "\uD185\uD186\uD187\uD189\uD18A"],
["b761", "\uD18B", 20, "\uD1A2\uD1A3\uD1A5\uD1A6\uD1A7"],
["b781", "\uD1A9", 6, "\uD1B2\uD1B4\uD1B6\uD1B7\uD1B8\uD1B9\uD1BB\uD1BD\uD1BE\uD1BF\uD1C1", 14, "\uB798\uB799\uB79C\uB7A0\uB7A8\uB7A9\uB7AB\uB7AC\uB7AD\uB7B4\uB7B5\uB7B8\uB7C7\uB7C9\uB7EC\uB7ED\uB7F0\uB7F4\uB7FC\uB7FD\uB7FF\uB800\uB801\uB807\uB808\uB809\uB80C\uB810\uB818\uB819\uB81B\uB81D\uB824\uB825\uB828\uB82C\uB834\uB835\uB837\uB838\uB839\uB840\uB844\uB851\uB853\uB85C\uB85D\uB860\uB864\uB86C\uB86D\uB86F\uB871\uB878\uB87C\uB88D\uB8A8\uB8B0\uB8B4\uB8B8\uB8C0\uB8C1\uB8C3\uB8C5\uB8CC\uB8D0\uB8D4\uB8DD\uB8DF\uB8E1\uB8E8\uB8E9\uB8EC\uB8F0\uB8F8\uB8F9\uB8FB\uB8FD\uB904\uB918\uB920\uB93C\uB93D\uB940\uB944\uB94C\uB94F\uB951\uB958\uB959\uB95C\uB960\uB968\uB969"],
["b841", "\uD1D0", 7, "\uD1D9", 17],
["b861", "\uD1EB", 8, "\uD1F5\uD1F6\uD1F7\uD1F9", 13],
["b881", "\uD208\uD20A", 5, "\uD211", 24, "\uB96B\uB96D\uB974\uB975\uB978\uB97C\uB984\uB985\uB987\uB989\uB98A\uB98D\uB98E\uB9AC\uB9AD\uB9B0\uB9B4\uB9BC\uB9BD\uB9BF\uB9C1\uB9C8\uB9C9\uB9CC\uB9CE", 4, "\uB9D8\uB9D9\uB9DB\uB9DD\uB9DE\uB9E1\uB9E3\uB9E4\uB9E5\uB9E8\uB9EC\uB9F4\uB9F5\uB9F7\uB9F8\uB9F9\uB9FA\uBA00\uBA01\uBA08\uBA15\uBA38\uBA39\uBA3C\uBA40\uBA42\uBA48\uBA49\uBA4B\uBA4D\uBA4E\uBA53\uBA54\uBA55\uBA58\uBA5C\uBA64\uBA65\uBA67\uBA68\uBA69\uBA70\uBA71\uBA74\uBA78\uBA83\uBA84\uBA85\uBA87\uBA8C\uBAA8\uBAA9\uBAAB\uBAAC\uBAB0\uBAB2\uBAB8\uBAB9\uBABB\uBABD\uBAC4\uBAC8\uBAD8\uBAD9\uBAFC"],
["b941", "\uD22A\uD22B\uD22E\uD22F\uD231\uD232\uD233\uD235", 6, "\uD23E\uD240\uD242", 5, "\uD249\uD24A\uD24B\uD24C"],
["b961", "\uD24D", 14, "\uD25D", 6, "\uD265\uD266\uD267\uD268"],
["b981", "\uD269", 22, "\uD282\uD283\uD285\uD286\uD287\uD289\uD28A\uD28B\uD28C\uBB00\uBB04\uBB0D\uBB0F\uBB11\uBB18\uBB1C\uBB20\uBB29\uBB2B\uBB34\uBB35\uBB36\uBB38\uBB3B\uBB3C\uBB3D\uBB3E\uBB44\uBB45\uBB47\uBB49\uBB4D\uBB4F\uBB50\uBB54\uBB58\uBB61\uBB63\uBB6C\uBB88\uBB8C\uBB90\uBBA4\uBBA8\uBBAC\uBBB4\uBBB7\uBBC0\uBBC4\uBBC8\uBBD0\uBBD3\uBBF8\uBBF9\uBBFC\uBBFF\uBC00\uBC02\uBC08\uBC09\uBC0B\uBC0C\uBC0D\uBC0F\uBC11\uBC14", 4, "\uBC1B", 4, "\uBC24\uBC25\uBC27\uBC29\uBC2D\uBC30\uBC31\uBC34\uBC38\uBC40\uBC41\uBC43\uBC44\uBC45\uBC49\uBC4C\uBC4D\uBC50\uBC5D\uBC84\uBC85\uBC88\uBC8B\uBC8C\uBC8E\uBC94\uBC95\uBC97"],
["ba41", "\uD28D\uD28E\uD28F\uD292\uD293\uD294\uD296", 5, "\uD29D\uD29E\uD29F\uD2A1\uD2A2\uD2A3\uD2A5", 6, "\uD2AD"],
["ba61", "\uD2AE\uD2AF\uD2B0\uD2B2", 5, "\uD2BA\uD2BB\uD2BD\uD2BE\uD2C1\uD2C3", 4, "\uD2CA\uD2CC", 5],
["ba81", "\uD2D2\uD2D3\uD2D5\uD2D6\uD2D7\uD2D9\uD2DA\uD2DB\uD2DD", 6, "\uD2E6", 9, "\uD2F2\uD2F3\uD2F5\uD2F6\uD2F7\uD2F9\uD2FA\uBC99\uBC9A\uBCA0\uBCA1\uBCA4\uBCA7\uBCA8\uBCB0\uBCB1\uBCB3\uBCB4\uBCB5\uBCBC\uBCBD\uBCC0\uBCC4\uBCCD\uBCCF\uBCD0\uBCD1\uBCD5\uBCD8\uBCDC\uBCF4\uBCF5\uBCF6\uBCF8\uBCFC\uBD04\uBD05\uBD07\uBD09\uBD10\uBD14\uBD24\uBD2C\uBD40\uBD48\uBD49\uBD4C\uBD50\uBD58\uBD59\uBD64\uBD68\uBD80\uBD81\uBD84\uBD87\uBD88\uBD89\uBD8A\uBD90\uBD91\uBD93\uBD95\uBD99\uBD9A\uBD9C\uBDA4\uBDB0\uBDB8\uBDD4\uBDD5\uBDD8\uBDDC\uBDE9\uBDF0\uBDF4\uBDF8\uBE00\uBE03\uBE05\uBE0C\uBE0D\uBE10\uBE14\uBE1C\uBE1D\uBE1F\uBE44\uBE45\uBE48\uBE4C\uBE4E\uBE54\uBE55\uBE57\uBE59\uBE5A\uBE5B\uBE60\uBE61\uBE64"],
["bb41", "\uD2FB", 4, "\uD302\uD304\uD306", 5, "\uD30F\uD311\uD312\uD313\uD315\uD317", 4, "\uD31E\uD322\uD323"],
["bb61", "\uD324\uD326\uD327\uD32A\uD32B\uD32D\uD32E\uD32F\uD331", 6, "\uD33A\uD33E", 5, "\uD346\uD347\uD348\uD349"],
["bb81", "\uD34A", 31, "\uBE68\uBE6A\uBE70\uBE71\uBE73\uBE74\uBE75\uBE7B\uBE7C\uBE7D\uBE80\uBE84\uBE8C\uBE8D\uBE8F\uBE90\uBE91\uBE98\uBE99\uBEA8\uBED0\uBED1\uBED4\uBED7\uBED8\uBEE0\uBEE3\uBEE4\uBEE5\uBEEC\uBF01\uBF08\uBF09\uBF18\uBF19\uBF1B\uBF1C\uBF1D\uBF40\uBF41\uBF44\uBF48\uBF50\uBF51\uBF55\uBF94\uBFB0\uBFC5\uBFCC\uBFCD\uBFD0\uBFD4\uBFDC\uBFDF\uBFE1\uC03C\uC051\uC058\uC05C\uC060\uC068\uC069\uC090\uC091\uC094\uC098\uC0A0\uC0A1\uC0A3\uC0A5\uC0AC\uC0AD\uC0AF\uC0B0\uC0B3\uC0B4\uC0B5\uC0B6\uC0BC\uC0BD\uC0BF\uC0C0\uC0C1\uC0C5\uC0C8\uC0C9\uC0CC\uC0D0\uC0D8\uC0D9\uC0DB\uC0DC\uC0DD\uC0E4"],
["bc41", "\uD36A", 17, "\uD37E\uD37F\uD381\uD382\uD383\uD385\uD386\uD387"],
["bc61", "\uD388\uD389\uD38A\uD38B\uD38E\uD392", 5, "\uD39A\uD39B\uD39D\uD39E\uD39F\uD3A1", 6, "\uD3AA\uD3AC\uD3AE"],
["bc81", "\uD3AF", 4, "\uD3B5\uD3B6\uD3B7\uD3B9\uD3BA\uD3BB\uD3BD", 6, "\uD3C6\uD3C7\uD3CA", 5, "\uD3D1", 5, "\uC0E5\uC0E8\uC0EC\uC0F4\uC0F5\uC0F7\uC0F9\uC100\uC104\uC108\uC110\uC115\uC11C", 4, "\uC123\uC124\uC126\uC127\uC12C\uC12D\uC12F\uC130\uC131\uC136\uC138\uC139\uC13C\uC140\uC148\uC149\uC14B\uC14C\uC14D\uC154\uC155\uC158\uC15C\uC164\uC165\uC167\uC168\uC169\uC170\uC174\uC178\uC185\uC18C\uC18D\uC18E\uC190\uC194\uC196\uC19C\uC19D\uC19F\uC1A1\uC1A5\uC1A8\uC1A9\uC1AC\uC1B0\uC1BD\uC1C4\uC1C8\uC1CC\uC1D4\uC1D7\uC1D8\uC1E0\uC1E4\uC1E8\uC1F0\uC1F1\uC1F3\uC1FC\uC1FD\uC200\uC204\uC20C\uC20D\uC20F\uC211\uC218\uC219\uC21C\uC21F\uC220\uC228\uC229\uC22B\uC22D"],
["bd41", "\uD3D7\uD3D9", 7, "\uD3E2\uD3E4", 7, "\uD3EE\uD3EF\uD3F1\uD3F2\uD3F3\uD3F5\uD3F6\uD3F7"],
["bd61", "\uD3F8\uD3F9\uD3FA\uD3FB\uD3FE\uD400\uD402", 5, "\uD409", 13],
["bd81", "\uD417", 5, "\uD41E", 25, "\uC22F\uC231\uC232\uC234\uC248\uC250\uC251\uC254\uC258\uC260\uC265\uC26C\uC26D\uC270\uC274\uC27C\uC27D\uC27F\uC281\uC288\uC289\uC290\uC298\uC29B\uC29D\uC2A4\uC2A5\uC2A8\uC2AC\uC2AD\uC2B4\uC2B5\uC2B7\uC2B9\uC2DC\uC2DD\uC2E0\uC2E3\uC2E4\uC2EB\uC2EC\uC2ED\uC2EF\uC2F1\uC2F6\uC2F8\uC2F9\uC2FB\uC2FC\uC300\uC308\uC309\uC30C\uC30D\uC313\uC314\uC315\uC318\uC31C\uC324\uC325\uC328\uC329\uC345\uC368\uC369\uC36C\uC370\uC372\uC378\uC379\uC37C\uC37D\uC384\uC388\uC38C\uC3C0\uC3D8\uC3D9\uC3DC\uC3DF\uC3E0\uC3E2\uC3E8\uC3E9\uC3ED\uC3F4\uC3F5\uC3F8\uC408\uC410\uC424\uC42C\uC430"],
["be41", "\uD438", 7, "\uD441\uD442\uD443\uD445", 14],
["be61", "\uD454", 7, "\uD45D\uD45E\uD45F\uD461\uD462\uD463\uD465", 7, "\uD46E\uD470\uD471\uD472"],
["be81", "\uD473", 4, "\uD47A\uD47B\uD47D\uD47E\uD481\uD483", 4, "\uD48A\uD48C\uD48E", 5, "\uD495", 8, "\uC434\uC43C\uC43D\uC448\uC464\uC465\uC468\uC46C\uC474\uC475\uC479\uC480\uC494\uC49C\uC4B8\uC4BC\uC4E9\uC4F0\uC4F1\uC4F4\uC4F8\uC4FA\uC4FF\uC500\uC501\uC50C\uC510\uC514\uC51C\uC528\uC529\uC52C\uC530\uC538\uC539\uC53B\uC53D\uC544\uC545\uC548\uC549\uC54A\uC54C\uC54D\uC54E\uC553\uC554\uC555\uC557\uC558\uC559\uC55D\uC55E\uC560\uC561\uC564\uC568\uC570\uC571\uC573\uC574\uC575\uC57C\uC57D\uC580\uC584\uC587\uC58C\uC58D\uC58F\uC591\uC595\uC597\uC598\uC59C\uC5A0\uC5A9\uC5B4\uC5B5\uC5B8\uC5B9\uC5BB\uC5BC\uC5BD\uC5BE\uC5C4", 6, "\uC5CC\uC5CE"],
["bf41", "\uD49E", 10, "\uD4AA", 14],
["bf61", "\uD4B9", 18, "\uD4CD\uD4CE\uD4CF\uD4D1\uD4D2\uD4D3\uD4D5"],
["bf81", "\uD4D6", 5, "\uD4DD\uD4DE\uD4E0", 7, "\uD4E9\uD4EA\uD4EB\uD4ED\uD4EE\uD4EF\uD4F1", 6, "\uD4F9\uD4FA\uD4FC\uC5D0\uC5D1\uC5D4\uC5D8\uC5E0\uC5E1\uC5E3\uC5E5\uC5EC\uC5ED\uC5EE\uC5F0\uC5F4\uC5F6\uC5F7\uC5FC", 5, "\uC605\uC606\uC607\uC608\uC60C\uC610\uC618\uC619\uC61B\uC61C\uC624\uC625\uC628\uC62C\uC62D\uC62E\uC630\uC633\uC634\uC635\uC637\uC639\uC63B\uC640\uC641\uC644\uC648\uC650\uC651\uC653\uC654\uC655\uC65C\uC65D\uC660\uC66C\uC66F\uC671\uC678\uC679\uC67C\uC680\uC688\uC689\uC68B\uC68D\uC694\uC695\uC698\uC69C\uC6A4\uC6A5\uC6A7\uC6A9\uC6B0\uC6B1\uC6B4\uC6B8\uC6B9\uC6BA\uC6C0\uC6C1\uC6C3\uC6C5\uC6CC\uC6CD\uC6D0\uC6D4\uC6DC\uC6DD\uC6E0\uC6E1\uC6E8"],
["c041", "\uD4FE", 5, "\uD505\uD506\uD507\uD509\uD50A\uD50B\uD50D", 6, "\uD516\uD518", 5],
["c061", "\uD51E", 25],
["c081", "\uD538\uD539\uD53A\uD53B\uD53E\uD53F\uD541\uD542\uD543\uD545", 6, "\uD54E\uD550\uD552", 5, "\uD55A\uD55B\uD55D\uD55E\uD55F\uD561\uD562\uD563\uC6E9\uC6EC\uC6F0\uC6F8\uC6F9\uC6FD\uC704\uC705\uC708\uC70C\uC714\uC715\uC717\uC719\uC720\uC721\uC724\uC728\uC730\uC731\uC733\uC735\uC737\uC73C\uC73D\uC740\uC744\uC74A\uC74C\uC74D\uC74F\uC751", 7, "\uC75C\uC760\uC768\uC76B\uC774\uC775\uC778\uC77C\uC77D\uC77E\uC783\uC784\uC785\uC787\uC788\uC789\uC78A\uC78E\uC790\uC791\uC794\uC796\uC797\uC798\uC79A\uC7A0\uC7A1\uC7A3\uC7A4\uC7A5\uC7A6\uC7AC\uC7AD\uC7B0\uC7B4\uC7BC\uC7BD\uC7BF\uC7C0\uC7C1\uC7C8\uC7C9\uC7CC\uC7CE\uC7D0\uC7D8\uC7DD\uC7E4\uC7E8\uC7EC\uC800\uC801\uC804\uC808\uC80A"],
["c141", "\uD564\uD566\uD567\uD56A\uD56C\uD56E", 5, "\uD576\uD577\uD579\uD57A\uD57B\uD57D", 6, "\uD586\uD58A\uD58B"],
["c161", "\uD58C\uD58D\uD58E\uD58F\uD591", 19, "\uD5A6\uD5A7"],
["c181", "\uD5A8", 31, "\uC810\uC811\uC813\uC815\uC816\uC81C\uC81D\uC820\uC824\uC82C\uC82D\uC82F\uC831\uC838\uC83C\uC840\uC848\uC849\uC84C\uC84D\uC854\uC870\uC871\uC874\uC878\uC87A\uC880\uC881\uC883\uC885\uC886\uC887\uC88B\uC88C\uC88D\uC894\uC89D\uC89F\uC8A1\uC8A8\uC8BC\uC8BD\uC8C4\uC8C8\uC8CC\uC8D4\uC8D5\uC8D7\uC8D9\uC8E0\uC8E1\uC8E4\uC8F5\uC8FC\uC8FD\uC900\uC904\uC905\uC906\uC90C\uC90D\uC90F\uC911\uC918\uC92C\uC934\uC950\uC951\uC954\uC958\uC960\uC961\uC963\uC96C\uC970\uC974\uC97C\uC988\uC989\uC98C\uC990\uC998\uC999\uC99B\uC99D\uC9C0\uC9C1\uC9C4\uC9C7\uC9C8\uC9CA\uC9D0\uC9D1\uC9D3"],
["c241", "\uD5CA\uD5CB\uD5CD\uD5CE\uD5CF\uD5D1\uD5D3", 4, "\uD5DA\uD5DC\uD5DE", 5, "\uD5E6\uD5E7\uD5E9\uD5EA\uD5EB\uD5ED\uD5EE"],
["c261", "\uD5EF", 4, "\uD5F6\uD5F8\uD5FA", 5, "\uD602\uD603\uD605\uD606\uD607\uD609", 6, "\uD612"],
["c281", "\uD616", 5, "\uD61D\uD61E\uD61F\uD621\uD622\uD623\uD625", 7, "\uD62E", 9, "\uD63A\uD63B\uC9D5\uC9D6\uC9D9\uC9DA\uC9DC\uC9DD\uC9E0\uC9E2\uC9E4\uC9E7\uC9EC\uC9ED\uC9EF\uC9F0\uC9F1\uC9F8\uC9F9\uC9FC\uCA00\uCA08\uCA09\uCA0B\uCA0C\uCA0D\uCA14\uCA18\uCA29\uCA4C\uCA4D\uCA50\uCA54\uCA5C\uCA5D\uCA5F\uCA60\uCA61\uCA68\uCA7D\uCA84\uCA98\uCABC\uCABD\uCAC0\uCAC4\uCACC\uCACD\uCACF\uCAD1\uCAD3\uCAD8\uCAD9\uCAE0\uCAEC\uCAF4\uCB08\uCB10\uCB14\uCB18\uCB20\uCB21\uCB41\uCB48\uCB49\uCB4C\uCB50\uCB58\uCB59\uCB5D\uCB64\uCB78\uCB79\uCB9C\uCBB8\uCBD4\uCBE4\uCBE7\uCBE9\uCC0C\uCC0D\uCC10\uCC14\uCC1C\uCC1D\uCC21\uCC22\uCC27\uCC28\uCC29\uCC2C\uCC2E\uCC30\uCC38\uCC39\uCC3B"],
["c341", "\uD63D\uD63E\uD63F\uD641\uD642\uD643\uD644\uD646\uD647\uD64A\uD64C\uD64E\uD64F\uD650\uD652\uD653\uD656\uD657\uD659\uD65A\uD65B\uD65D", 4],
["c361", "\uD662", 4, "\uD668\uD66A", 5, "\uD672\uD673\uD675", 11],
["c381", "\uD681\uD682\uD684\uD686", 5, "\uD68E\uD68F\uD691\uD692\uD693\uD695", 7, "\uD69E\uD6A0\uD6A2", 5, "\uD6A9\uD6AA\uCC3C\uCC3D\uCC3E\uCC44\uCC45\uCC48\uCC4C\uCC54\uCC55\uCC57\uCC58\uCC59\uCC60\uCC64\uCC66\uCC68\uCC70\uCC75\uCC98\uCC99\uCC9C\uCCA0\uCCA8\uCCA9\uCCAB\uCCAC\uCCAD\uCCB4\uCCB5\uCCB8\uCCBC\uCCC4\uCCC5\uCCC7\uCCC9\uCCD0\uCCD4\uCCE4\uCCEC\uCCF0\uCD01\uCD08\uCD09\uCD0C\uCD10\uCD18\uCD19\uCD1B\uCD1D\uCD24\uCD28\uCD2C\uCD39\uCD5C\uCD60\uCD64\uCD6C\uCD6D\uCD6F\uCD71\uCD78\uCD88\uCD94\uCD95\uCD98\uCD9C\uCDA4\uCDA5\uCDA7\uCDA9\uCDB0\uCDC4\uCDCC\uCDD0\uCDE8\uCDEC\uCDF0\uCDF8\uCDF9\uCDFB\uCDFD\uCE04\uCE08\uCE0C\uCE14\uCE19\uCE20\uCE21\uCE24\uCE28\uCE30\uCE31\uCE33\uCE35"],
["c441", "\uD6AB\uD6AD\uD6AE\uD6AF\uD6B1", 7, "\uD6BA\uD6BC", 7, "\uD6C6\uD6C7\uD6C9\uD6CA\uD6CB"],
["c461", "\uD6CD\uD6CE\uD6CF\uD6D0\uD6D2\uD6D3\uD6D5\uD6D6\uD6D8\uD6DA", 5, "\uD6E1\uD6E2\uD6E3\uD6E5\uD6E6\uD6E7\uD6E9", 4],
["c481", "\uD6EE\uD6EF\uD6F1\uD6F2\uD6F3\uD6F4\uD6F6", 5, "\uD6FE\uD6FF\uD701\uD702\uD703\uD705", 11, "\uD712\uD713\uD714\uCE58\uCE59\uCE5C\uCE5F\uCE60\uCE61\uCE68\uCE69\uCE6B\uCE6D\uCE74\uCE75\uCE78\uCE7C\uCE84\uCE85\uCE87\uCE89\uCE90\uCE91\uCE94\uCE98\uCEA0\uCEA1\uCEA3\uCEA4\uCEA5\uCEAC\uCEAD\uCEC1\uCEE4\uCEE5\uCEE8\uCEEB\uCEEC\uCEF4\uCEF5\uCEF7\uCEF8\uCEF9\uCF00\uCF01\uCF04\uCF08\uCF10\uCF11\uCF13\uCF15\uCF1C\uCF20\uCF24\uCF2C\uCF2D\uCF2F\uCF30\uCF31\uCF38\uCF54\uCF55\uCF58\uCF5C\uCF64\uCF65\uCF67\uCF69\uCF70\uCF71\uCF74\uCF78\uCF80\uCF85\uCF8C\uCFA1\uCFA8\uCFB0\uCFC4\uCFE0\uCFE1\uCFE4\uCFE8\uCFF0\uCFF1\uCFF3\uCFF5\uCFFC\uD000\uD004\uD011\uD018\uD02D\uD034\uD035\uD038\uD03C"],
["c541", "\uD715\uD716\uD717\uD71A\uD71B\uD71D\uD71E\uD71F\uD721", 6, "\uD72A\uD72C\uD72E", 5, "\uD736\uD737\uD739"],
["c561", "\uD73A\uD73B\uD73D", 6, "\uD745\uD746\uD748\uD74A", 5, "\uD752\uD753\uD755\uD75A", 4],
["c581", "\uD75F\uD762\uD764\uD766\uD767\uD768\uD76A\uD76B\uD76D\uD76E\uD76F\uD771\uD772\uD773\uD775", 6, "\uD77E\uD77F\uD780\uD782", 5, "\uD78A\uD78B\uD044\uD045\uD047\uD049\uD050\uD054\uD058\uD060\uD06C\uD06D\uD070\uD074\uD07C\uD07D\uD081\uD0A4\uD0A5\uD0A8\uD0AC\uD0B4\uD0B5\uD0B7\uD0B9\uD0C0\uD0C1\uD0C4\uD0C8\uD0C9\uD0D0\uD0D1\uD0D3\uD0D4\uD0D5\uD0DC\uD0DD\uD0E0\uD0E4\uD0EC\uD0ED\uD0EF\uD0F0\uD0F1\uD0F8\uD10D\uD130\uD131\uD134\uD138\uD13A\uD140\uD141\uD143\uD144\uD145\uD14C\uD14D\uD150\uD154\uD15C\uD15D\uD15F\uD161\uD168\uD16C\uD17C\uD184\uD188\uD1A0\uD1A1\uD1A4\uD1A8\uD1B0\uD1B1\uD1B3\uD1B5\uD1BA\uD1BC\uD1C0\uD1D8\uD1F4\uD1F8\uD207\uD209\uD210\uD22C\uD22D\uD230\uD234\uD23C\uD23D\uD23F\uD241\uD248\uD25C"],
["c641", "\uD78D\uD78E\uD78F\uD791", 6, "\uD79A\uD79C\uD79E", 5],
["c6a1", "\uD264\uD280\uD281\uD284\uD288\uD290\uD291\uD295\uD29C\uD2A0\uD2A4\uD2AC\uD2B1\uD2B8\uD2B9\uD2BC\uD2BF\uD2C0\uD2C2\uD2C8\uD2C9\uD2CB\uD2D4\uD2D8\uD2DC\uD2E4\uD2E5\uD2F0\uD2F1\uD2F4\uD2F8\uD300\uD301\uD303\uD305\uD30C\uD30D\uD30E\uD310\uD314\uD316\uD31C\uD31D\uD31F\uD320\uD321\uD325\uD328\uD329\uD32C\uD330\uD338\uD339\uD33B\uD33C\uD33D\uD344\uD345\uD37C\uD37D\uD380\uD384\uD38C\uD38D\uD38F\uD390\uD391\uD398\uD399\uD39C\uD3A0\uD3A8\uD3A9\uD3AB\uD3AD\uD3B4\uD3B8\uD3BC\uD3C4\uD3C5\uD3C8\uD3C9\uD3D0\uD3D8\uD3E1\uD3E3\uD3EC\uD3ED\uD3F0\uD3F4\uD3FC\uD3FD\uD3FF\uD401"],
["c7a1", "\uD408\uD41D\uD440\uD444\uD45C\uD460\uD464\uD46D\uD46F\uD478\uD479\uD47C\uD47F\uD480\uD482\uD488\uD489\uD48B\uD48D\uD494\uD4A9\uD4CC\uD4D0\uD4D4\uD4DC\uD4DF\uD4E8\uD4EC\uD4F0\uD4F8\uD4FB\uD4FD\uD504\uD508\uD50C\uD514\uD515\uD517\uD53C\uD53D\uD540\uD544\uD54C\uD54D\uD54F\uD551\uD558\uD559\uD55C\uD560\uD565\uD568\uD569\uD56B\uD56D\uD574\uD575\uD578\uD57C\uD584\uD585\uD587\uD588\uD589\uD590\uD5A5\uD5C8\uD5C9\uD5CC\uD5D0\uD5D2\uD5D8\uD5D9\uD5DB\uD5DD\uD5E4\uD5E5\uD5E8\uD5EC\uD5F4\uD5F5\uD5F7\uD5F9\uD600\uD601\uD604\uD608\uD610\uD611\uD613\uD614\uD615\uD61C\uD620"],
["c8a1", "\uD624\uD62D\uD638\uD639\uD63C\uD640\uD645\uD648\uD649\uD64B\uD64D\uD651\uD654\uD655\uD658\uD65C\uD667\uD669\uD670\uD671\uD674\uD683\uD685\uD68C\uD68D\uD690\uD694\uD69D\uD69F\uD6A1\uD6A8\uD6AC\uD6B0\uD6B9\uD6BB\uD6C4\uD6C5\uD6C8\uD6CC\uD6D1\uD6D4\uD6D7\uD6D9\uD6E0\uD6E4\uD6E8\uD6F0\uD6F5\uD6FC\uD6FD\uD700\uD704\uD711\uD718\uD719\uD71C\uD720\uD728\uD729\uD72B\uD72D\uD734\uD735\uD738\uD73C\uD744\uD747\uD749\uD750\uD751\uD754\uD756\uD757\uD758\uD759\uD760\uD761\uD763\uD765\uD769\uD76C\uD770\uD774\uD77C\uD77D\uD781\uD788\uD789\uD78C\uD790\uD798\uD799\uD79B\uD79D"],
["caa1", "\u4F3D\u4F73\u5047\u50F9\u52A0\u53EF\u5475\u54E5\u5609\u5AC1\u5BB6\u6687\u67B6\u67B7\u67EF\u6B4C\u73C2\u75C2\u7A3C\u82DB\u8304\u8857\u8888\u8A36\u8CC8\u8DCF\u8EFB\u8FE6\u99D5\u523B\u5374\u5404\u606A\u6164\u6BBC\u73CF\u811A\u89BA\u89D2\u95A3\u4F83\u520A\u58BE\u5978\u59E6\u5E72\u5E79\u61C7\u63C0\u6746\u67EC\u687F\u6F97\u764E\u770B\u78F5\u7A08\u7AFF\u7C21\u809D\u826E\u8271\u8AEB\u9593\u4E6B\u559D\u66F7\u6E34\u78A3\u7AED\u845B\u8910\u874E\u97A8\u52D8\u574E\u582A\u5D4C\u611F\u61BE\u6221\u6562\u67D1\u6A44\u6E1B\u7518\u75B3\u76E3\u77B0\u7D3A\u90AF\u9451\u9452\u9F95"],
["cba1", "\u5323\u5CAC\u7532\u80DB\u9240\u9598\u525B\u5808\u59DC\u5CA1\u5D17\u5EB7\u5F3A\u5F4A\u6177\u6C5F\u757A\u7586\u7CE0\u7D73\u7DB1\u7F8C\u8154\u8221\u8591\u8941\u8B1B\u92FC\u964D\u9C47\u4ECB\u4EF7\u500B\u51F1\u584F\u6137\u613E\u6168\u6539\u69EA\u6F11\u75A5\u7686\u76D6\u7B87\u82A5\u84CB\uF900\u93A7\u958B\u5580\u5BA2\u5751\uF901\u7CB3\u7FB9\u91B5\u5028\u53BB\u5C45\u5DE8\u62D2\u636E\u64DA\u64E7\u6E20\u70AC\u795B\u8DDD\u8E1E\uF902\u907D\u9245\u92F8\u4E7E\u4EF6\u5065\u5DFE\u5EFA\u6106\u6957\u8171\u8654\u8E47\u9375\u9A2B\u4E5E\u5091\u6770\u6840\u5109\u528D\u5292\u6AA2"],
["cca1", "\u77BC\u9210\u9ED4\u52AB\u602F\u8FF2\u5048\u61A9\u63ED\u64CA\u683C\u6A84\u6FC0\u8188\u89A1\u9694\u5805\u727D\u72AC\u7504\u7D79\u7E6D\u80A9\u898B\u8B74\u9063\u9D51\u6289\u6C7A\u6F54\u7D50\u7F3A\u8A23\u517C\u614A\u7B9D\u8B19\u9257\u938C\u4EAC\u4FD3\u501E\u50BE\u5106\u52C1\u52CD\u537F\u5770\u5883\u5E9A\u5F91\u6176\u61AC\u64CE\u656C\u666F\u66BB\u66F4\u6897\u6D87\u7085\u70F1\u749F\u74A5\u74CA\u75D9\u786C\u78EC\u7ADF\u7AF6\u7D45\u7D93\u8015\u803F\u811B\u8396\u8B66\u8F15\u9015\u93E1\u9803\u9838\u9A5A\u9BE8\u4FC2\u5553\u583A\u5951\u5B63\u5C46\u60B8\u6212\u6842\u68B0"],
["cda1", "\u68E8\u6EAA\u754C\u7678\u78CE\u7A3D\u7CFB\u7E6B\u7E7C\u8A08\u8AA1\u8C3F\u968E\u9DC4\u53E4\u53E9\u544A\u5471\u56FA\u59D1\u5B64\u5C3B\u5EAB\u62F7\u6537\u6545\u6572\u66A0\u67AF\u69C1\u6CBD\u75FC\u7690\u777E\u7A3F\u7F94\u8003\u80A1\u818F\u82E6\u82FD\u83F0\u85C1\u8831\u88B4\u8AA5\uF903\u8F9C\u932E\u96C7\u9867\u9AD8\u9F13\u54ED\u659B\u66F2\u688F\u7A40\u8C37\u9D60\u56F0\u5764\u5D11\u6606\u68B1\u68CD\u6EFE\u7428\u889E\u9BE4\u6C68\uF904\u9AA8\u4F9B\u516C\u5171\u529F\u5B54\u5DE5\u6050\u606D\u62F1\u63A7\u653B\u73D9\u7A7A\u86A3\u8CA2\u978F\u4E32\u5BE1\u6208\u679C\u74DC"],
["cea1", "\u79D1\u83D3\u8A87\u8AB2\u8DE8\u904E\u934B\u9846\u5ED3\u69E8\u85FF\u90ED\uF905\u51A0\u5B98\u5BEC\u6163\u68FA\u6B3E\u704C\u742F\u74D8\u7BA1\u7F50\u83C5\u89C0\u8CAB\u95DC\u9928\u522E\u605D\u62EC\u9002\u4F8A\u5149\u5321\u58D9\u5EE3\u66E0\u6D38\u709A\u72C2\u73D6\u7B50\u80F1\u945B\u5366\u639B\u7F6B\u4E56\u5080\u584A\u58DE\u602A\u6127\u62D0\u69D0\u9B41\u5B8F\u7D18\u80B1\u8F5F\u4EA4\u50D1\u54AC\u55AC\u5B0C\u5DA0\u5DE7\u652A\u654E\u6821\u6A4B\u72E1\u768E\u77EF\u7D5E\u7FF9\u81A0\u854E\u86DF\u8F03\u8F4E\u90CA\u9903\u9A55\u9BAB\u4E18\u4E45\u4E5D\u4EC7\u4FF1\u5177\u52FE"],
["cfa1", "\u5340\u53E3\u53E5\u548E\u5614\u5775\u57A2\u5BC7\u5D87\u5ED0\u61FC\u62D8\u6551\u67B8\u67E9\u69CB\u6B50\u6BC6\u6BEC\u6C42\u6E9D\u7078\u72D7\u7396\u7403\u77BF\u77E9\u7A76\u7D7F\u8009\u81FC\u8205\u820A\u82DF\u8862\u8B33\u8CFC\u8EC0\u9011\u90B1\u9264\u92B6\u99D2\u9A45\u9CE9\u9DD7\u9F9C\u570B\u5C40\u83CA\u97A0\u97AB\u9EB4\u541B\u7A98\u7FA4\u88D9\u8ECD\u90E1\u5800\u5C48\u6398\u7A9F\u5BAE\u5F13\u7A79\u7AAE\u828E\u8EAC\u5026\u5238\u52F8\u5377\u5708\u62F3\u6372\u6B0A\u6DC3\u7737\u53A5\u7357\u8568\u8E76\u95D5\u673A\u6AC3\u6F70\u8A6D\u8ECC\u994B\uF906\u6677\u6B78\u8CB4"],
["d0a1", "\u9B3C\uF907\u53EB\u572D\u594E\u63C6\u69FB\u73EA\u7845\u7ABA\u7AC5\u7CFE\u8475\u898F\u8D73\u9035\u95A8\u52FB\u5747\u7547\u7B60\u83CC\u921E\uF908\u6A58\u514B\u524B\u5287\u621F\u68D8\u6975\u9699\u50C5\u52A4\u52E4\u61C3\u65A4\u6839\u69FF\u747E\u7B4B\u82B9\u83EB\u89B2\u8B39\u8FD1\u9949\uF909\u4ECA\u5997\u64D2\u6611\u6A8E\u7434\u7981\u79BD\u82A9\u887E\u887F\u895F\uF90A\u9326\u4F0B\u53CA\u6025\u6271\u6C72\u7D1A\u7D66\u4E98\u5162\u77DC\u80AF\u4F01\u4F0E\u5176\u5180\u55DC\u5668\u573B\u57FA\u57FC\u5914\u5947\u5993\u5BC4\u5C90\u5D0E\u5DF1\u5E7E\u5FCC\u6280\u65D7\u65E3"],
["d1a1", "\u671E\u671F\u675E\u68CB\u68C4\u6A5F\u6B3A\u6C23\u6C7D\u6C82\u6DC7\u7398\u7426\u742A\u7482\u74A3\u7578\u757F\u7881\u78EF\u7941\u7947\u7948\u797A\u7B95\u7D00\u7DBA\u7F88\u8006\u802D\u808C\u8A18\u8B4F\u8C48\u8D77\u9321\u9324\u98E2\u9951\u9A0E\u9A0F\u9A65\u9E92\u7DCA\u4F76\u5409\u62EE\u6854\u91D1\u55AB\u513A\uF90B\uF90C\u5A1C\u61E6\uF90D\u62CF\u62FF\uF90E", 5, "\u90A3\uF914", 4, "\u8AFE\uF919\uF91A\uF91B\uF91C\u6696\uF91D\u7156\uF91E\uF91F\u96E3\uF920\u634F\u637A\u5357\uF921\u678F\u6960\u6E73\uF922\u7537\uF923\uF924\uF925"],
["d2a1", "\u7D0D\uF926\uF927\u8872\u56CA\u5A18\uF928", 4, "\u4E43\uF92D\u5167\u5948\u67F0\u8010\uF92E\u5973\u5E74\u649A\u79CA\u5FF5\u606C\u62C8\u637B\u5BE7\u5BD7\u52AA\uF92F\u5974\u5F29\u6012\uF930\uF931\uF932\u7459\uF933", 5, "\u99D1\uF939", 10, "\u6FC3\uF944\uF945\u81BF\u8FB2\u60F1\uF946\uF947\u8166\uF948\uF949\u5C3F\uF94A", 7, "\u5AE9\u8A25\u677B\u7D10\uF952", 5, "\u80FD\uF958\uF959\u5C3C\u6CE5\u533F\u6EBA\u591A\u8336"],
["d3a1", "\u4E39\u4EB6\u4F46\u55AE\u5718\u58C7\u5F56\u65B7\u65E6\u6A80\u6BB5\u6E4D\u77ED\u7AEF\u7C1E\u7DDE\u86CB\u8892\u9132\u935B\u64BB\u6FBE\u737A\u75B8\u9054\u5556\u574D\u61BA\u64D4\u66C7\u6DE1\u6E5B\u6F6D\u6FB9\u75F0\u8043\u81BD\u8541\u8983\u8AC7\u8B5A\u931F\u6C93\u7553\u7B54\u8E0F\u905D\u5510\u5802\u5858\u5E62\u6207\u649E\u68E0\u7576\u7CD6\u87B3\u9EE8\u4EE3\u5788\u576E\u5927\u5C0D\u5CB1\u5E36\u5F85\u6234\u64E1\u73B3\u81FA\u888B\u8CB8\u968A\u9EDB\u5B85\u5FB7\u60B3\u5012\u5200\u5230\u5716\u5835\u5857\u5C0E\u5C60\u5CF6\u5D8B\u5EA6\u5F92\u60BC\u6311\u6389\u6417\u6843"],
["d4a1", "\u68F9\u6AC2\u6DD8\u6E21\u6ED4\u6FE4\u71FE\u76DC\u7779\u79B1\u7A3B\u8404\u89A9\u8CED\u8DF3\u8E48\u9003\u9014\u9053\u90FD\u934D\u9676\u97DC\u6BD2\u7006\u7258\u72A2\u7368\u7763\u79BF\u7BE4\u7E9B\u8B80\u58A9\u60C7\u6566\u65FD\u66BE\u6C8C\u711E\u71C9\u8C5A\u9813\u4E6D\u7A81\u4EDD\u51AC\u51CD\u52D5\u540C\u61A7\u6771\u6850\u68DF\u6D1E\u6F7C\u75BC\u77B3\u7AE5\u80F4\u8463\u9285\u515C\u6597\u675C\u6793\u75D8\u7AC7\u8373\uF95A\u8C46\u9017\u982D\u5C6F\u81C0\u829A\u9041\u906F\u920D\u5F97\u5D9D\u6A59\u71C8\u767B\u7B49\u85E4\u8B04\u9127\u9A30\u5587\u61F6\uF95B\u7669\u7F85"],
["d5a1", "\u863F\u87BA\u88F8\u908F\uF95C\u6D1B\u70D9\u73DE\u7D61\u843D\uF95D\u916A\u99F1\uF95E\u4E82\u5375\u6B04\u6B12\u703E\u721B\u862D\u9E1E\u524C\u8FA3\u5D50\u64E5\u652C\u6B16\u6FEB\u7C43\u7E9C\u85CD\u8964\u89BD\u62C9\u81D8\u881F\u5ECA\u6717\u6D6A\u72FC\u7405\u746F\u8782\u90DE\u4F86\u5D0D\u5FA0\u840A\u51B7\u63A0\u7565\u4EAE\u5006\u5169\u51C9\u6881\u6A11\u7CAE\u7CB1\u7CE7\u826F\u8AD2\u8F1B\u91CF\u4FB6\u5137\u52F5\u5442\u5EEC\u616E\u623E\u65C5\u6ADA\u6FFE\u792A\u85DC\u8823\u95AD\u9A62\u9A6A\u9E97\u9ECE\u529B\u66C6\u6B77\u701D\u792B\u8F62\u9742\u6190\u6200\u6523\u6F23"],
["d6a1", "\u7149\u7489\u7DF4\u806F\u84EE\u8F26\u9023\u934A\u51BD\u5217\u52A3\u6D0C\u70C8\u88C2\u5EC9\u6582\u6BAE\u6FC2\u7C3E\u7375\u4EE4\u4F36\u56F9\uF95F\u5CBA\u5DBA\u601C\u73B2\u7B2D\u7F9A\u7FCE\u8046\u901E\u9234\u96F6\u9748\u9818\u9F61\u4F8B\u6FA7\u79AE\u91B4\u96B7\u52DE\uF960\u6488\u64C4\u6AD3\u6F5E\u7018\u7210\u76E7\u8001\u8606\u865C\u8DEF\u8F05\u9732\u9B6F\u9DFA\u9E75\u788C\u797F\u7DA0\u83C9\u9304\u9E7F\u9E93\u8AD6\u58DF\u5F04\u6727\u7027\u74CF\u7C60\u807E\u5121\u7028\u7262\u78CA\u8CC2\u8CDA\u8CF4\u96F7\u4E86\u50DA\u5BEE\u5ED6\u6599\u71CE\u7642\u77AD\u804A\u84FC"],
["d7a1", "\u907C\u9B27\u9F8D\u58D8\u5A41\u5C62\u6A13\u6DDA\u6F0F\u763B\u7D2F\u7E37\u851E\u8938\u93E4\u964B\u5289\u65D2\u67F3\u69B4\u6D41\u6E9C\u700F\u7409\u7460\u7559\u7624\u786B\u8B2C\u985E\u516D\u622E\u9678\u4F96\u502B\u5D19\u6DEA\u7DB8\u8F2A\u5F8B\u6144\u6817\uF961\u9686\u52D2\u808B\u51DC\u51CC\u695E\u7A1C\u7DBE\u83F1\u9675\u4FDA\u5229\u5398\u540F\u550E\u5C65\u60A7\u674E\u68A8\u6D6C\u7281\u72F8\u7406\u7483\uF962\u75E2\u7C6C\u7F79\u7FB8\u8389\u88CF\u88E1\u91CC\u91D0\u96E2\u9BC9\u541D\u6F7E\u71D0\u7498\u85FA\u8EAA\u96A3\u9C57\u9E9F\u6797\u6DCB\u7433\u81E8\u9716\u782C"],
["d8a1", "\u7ACB\u7B20\u7C92\u6469\u746A\u75F2\u78BC\u78E8\u99AC\u9B54\u9EBB\u5BDE\u5E55\u6F20\u819C\u83AB\u9088\u4E07\u534D\u5A29\u5DD2\u5F4E\u6162\u633D\u6669\u66FC\u6EFF\u6F2B\u7063\u779E\u842C\u8513\u883B\u8F13\u9945\u9C3B\u551C\u62B9\u672B\u6CAB\u8309\u896A\u977A\u4EA1\u5984\u5FD8\u5FD9\u671B\u7DB2\u7F54\u8292\u832B\u83BD\u8F1E\u9099\u57CB\u59B9\u5A92\u5BD0\u6627\u679A\u6885\u6BCF\u7164\u7F75\u8CB7\u8CE3\u9081\u9B45\u8108\u8C8A\u964C\u9A40\u9EA5\u5B5F\u6C13\u731B\u76F2\u76DF\u840C\u51AA\u8993\u514D\u5195\u52C9\u68C9\u6C94\u7704\u7720\u7DBF\u7DEC\u9762\u9EB5\u6EC5"],
["d9a1", "\u8511\u51A5\u540D\u547D\u660E\u669D\u6927\u6E9F\u76BF\u7791\u8317\u84C2\u879F\u9169\u9298\u9CF4\u8882\u4FAE\u5192\u52DF\u59C6\u5E3D\u6155\u6478\u6479\u66AE\u67D0\u6A21\u6BCD\u6BDB\u725F\u7261\u7441\u7738\u77DB\u8017\u82BC\u8305\u8B00\u8B28\u8C8C\u6728\u6C90\u7267\u76EE\u7766\u7A46\u9DA9\u6B7F\u6C92\u5922\u6726\u8499\u536F\u5893\u5999\u5EDF\u63CF\u6634\u6773\u6E3A\u732B\u7AD7\u82D7\u9328\u52D9\u5DEB\u61AE\u61CB\u620A\u62C7\u64AB\u65E0\u6959\u6B66\u6BCB\u7121\u73F7\u755D\u7E46\u821E\u8302\u856A\u8AA3\u8CBF\u9727\u9D61\u58A8\u9ED8\u5011\u520E\u543B\u554F\u6587"],
["daa1", "\u6C76\u7D0A\u7D0B\u805E\u868A\u9580\u96EF\u52FF\u6C95\u7269\u5473\u5A9A\u5C3E\u5D4B\u5F4C\u5FAE\u672A\u68B6\u6963\u6E3C\u6E44\u7709\u7C73\u7F8E\u8587\u8B0E\u8FF7\u9761\u9EF4\u5CB7\u60B6\u610D\u61AB\u654F\u65FB\u65FC\u6C11\u6CEF\u739F\u73C9\u7DE1\u9594\u5BC6\u871C\u8B10\u525D\u535A\u62CD\u640F\u64B2\u6734\u6A38\u6CCA\u73C0\u749E\u7B94\u7C95\u7E1B\u818A\u8236\u8584\u8FEB\u96F9\u99C1\u4F34\u534A\u53CD\u53DB\u62CC\u642C\u6500\u6591\u69C3\u6CEE\u6F58\u73ED\u7554\u7622\u76E4\u76FC\u78D0\u78FB\u792C\u7D46\u822C\u87E0\u8FD4\u9812\u98EF\u52C3\u62D4\u64A5\u6E24\u6F51"],
["dba1", "\u767C\u8DCB\u91B1\u9262\u9AEE\u9B43\u5023\u508D\u574A\u59A8\u5C28\u5E47\u5F77\u623F\u653E\u65B9\u65C1\u6609\u678B\u699C\u6EC2\u78C5\u7D21\u80AA\u8180\u822B\u82B3\u84A1\u868C\u8A2A\u8B17\u90A6\u9632\u9F90\u500D\u4FF3\uF963\u57F9\u5F98\u62DC\u6392\u676F\u6E43\u7119\u76C3\u80CC\u80DA\u88F4\u88F5\u8919\u8CE0\u8F29\u914D\u966A\u4F2F\u4F70\u5E1B\u67CF\u6822\u767D\u767E\u9B44\u5E61\u6A0A\u7169\u71D4\u756A\uF964\u7E41\u8543\u85E9\u98DC\u4F10\u7B4F\u7F70\u95A5\u51E1\u5E06\u68B5\u6C3E\u6C4E\u6CDB\u72AF\u7BC4\u8303\u6CD5\u743A\u50FB\u5288\u58C1\u64D8\u6A97\u74A7\u7656"],
["dca1", "\u78A7\u8617\u95E2\u9739\uF965\u535E\u5F01\u8B8A\u8FA8\u8FAF\u908A\u5225\u77A5\u9C49\u9F08\u4E19\u5002\u5175\u5C5B\u5E77\u661E\u663A\u67C4\u68C5\u70B3\u7501\u75C5\u79C9\u7ADD\u8F27\u9920\u9A08\u4FDD\u5821\u5831\u5BF6\u666E\u6B65\u6D11\u6E7A\u6F7D\u73E4\u752B\u83E9\u88DC\u8913\u8B5C\u8F14\u4F0F\u50D5\u5310\u535C\u5B93\u5FA9\u670D\u798F\u8179\u832F\u8514\u8907\u8986\u8F39\u8F3B\u99A5\u9C12\u672C\u4E76\u4FF8\u5949\u5C01\u5CEF\u5CF0\u6367\u68D2\u70FD\u71A2\u742B\u7E2B\u84EC\u8702\u9022\u92D2\u9CF3\u4E0D\u4ED8\u4FEF\u5085\u5256\u526F\u5426\u5490\u57E0\u592B\u5A66"],
["dda1", "\u5B5A\u5B75\u5BCC\u5E9C\uF966\u6276\u6577\u65A7\u6D6E\u6EA5\u7236\u7B26\u7C3F\u7F36\u8150\u8151\u819A\u8240\u8299\u83A9\u8A03\u8CA0\u8CE6\u8CFB\u8D74\u8DBA\u90E8\u91DC\u961C\u9644\u99D9\u9CE7\u5317\u5206\u5429\u5674\u58B3\u5954\u596E\u5FFF\u61A4\u626E\u6610\u6C7E\u711A\u76C6\u7C89\u7CDE\u7D1B\u82AC\u8CC1\u96F0\uF967\u4F5B\u5F17\u5F7F\u62C2\u5D29\u670B\u68DA\u787C\u7E43\u9D6C\u4E15\u5099\u5315\u532A\u5351\u5983\u5A62\u5E87\u60B2\u618A\u6249\u6279\u6590\u6787\u69A7\u6BD4\u6BD6\u6BD7\u6BD8\u6CB8\uF968\u7435\u75FA\u7812\u7891\u79D5\u79D8\u7C83\u7DCB\u7FE1\u80A5"],
["dea1", "\u813E\u81C2\u83F2\u871A\u88E8\u8AB9\u8B6C\u8CBB\u9119\u975E\u98DB\u9F3B\u56AC\u5B2A\u5F6C\u658C\u6AB3\u6BAF\u6D5C\u6FF1\u7015\u725D\u73AD\u8CA7\u8CD3\u983B\u6191\u6C37\u8058\u9A01\u4E4D\u4E8B\u4E9B\u4ED5\u4F3A\u4F3C\u4F7F\u4FDF\u50FF\u53F2\u53F8\u5506\u55E3\u56DB\u58EB\u5962\u5A11\u5BEB\u5BFA\u5C04\u5DF3\u5E2B\u5F99\u601D\u6368\u659C\u65AF\u67F6\u67FB\u68AD\u6B7B\u6C99\u6CD7\u6E23\u7009\u7345\u7802\u793E\u7940\u7960\u79C1\u7BE9\u7D17\u7D72\u8086\u820D\u838E\u84D1\u86C7\u88DF\u8A50\u8A5E\u8B1D\u8CDC\u8D66\u8FAD\u90AA\u98FC\u99DF\u9E9D\u524A\uF969\u6714\uF96A"],
["dfa1", "\u5098\u522A\u5C71\u6563\u6C55\u73CA\u7523\u759D\u7B97\u849C\u9178\u9730\u4E77\u6492\u6BBA\u715E\u85A9\u4E09\uF96B\u6749\u68EE\u6E17\u829F\u8518\u886B\u63F7\u6F81\u9212\u98AF\u4E0A\u50B7\u50CF\u511F\u5546\u55AA\u5617\u5B40\u5C19\u5CE0\u5E38\u5E8A\u5EA0\u5EC2\u60F3\u6851\u6A61\u6E58\u723D\u7240\u72C0\u76F8\u7965\u7BB1\u7FD4\u88F3\u89F4\u8A73\u8C61\u8CDE\u971C\u585E\u74BD\u8CFD\u55C7\uF96C\u7A61\u7D22\u8272\u7272\u751F\u7525\uF96D\u7B19\u5885\u58FB\u5DBC\u5E8F\u5EB6\u5F90\u6055\u6292\u637F\u654D\u6691\u66D9\u66F8\u6816\u68F2\u7280\u745E\u7B6E\u7D6E\u7DD6\u7F72"],
["e0a1", "\u80E5\u8212\u85AF\u897F\u8A93\u901D\u92E4\u9ECD\u9F20\u5915\u596D\u5E2D\u60DC\u6614\u6673\u6790\u6C50\u6DC5\u6F5F\u77F3\u78A9\u84C6\u91CB\u932B\u4ED9\u50CA\u5148\u5584\u5B0B\u5BA3\u6247\u657E\u65CB\u6E32\u717D\u7401\u7444\u7487\u74BF\u766C\u79AA\u7DDA\u7E55\u7FA8\u817A\u81B3\u8239\u861A\u87EC\u8A75\u8DE3\u9078\u9291\u9425\u994D\u9BAE\u5368\u5C51\u6954\u6CC4\u6D29\u6E2B\u820C\u859B\u893B\u8A2D\u8AAA\u96EA\u9F67\u5261\u66B9\u6BB2\u7E96\u87FE\u8D0D\u9583\u965D\u651D\u6D89\u71EE\uF96E\u57CE\u59D3\u5BAC\u6027\u60FA\u6210\u661F\u665F\u7329\u73F9\u76DB\u7701\u7B6C"],
["e1a1", "\u8056\u8072\u8165\u8AA0\u9192\u4E16\u52E2\u6B72\u6D17\u7A05\u7B39\u7D30\uF96F\u8CB0\u53EC\u562F\u5851\u5BB5\u5C0F\u5C11\u5DE2\u6240\u6383\u6414\u662D\u68B3\u6CBC\u6D88\u6EAF\u701F\u70A4\u71D2\u7526\u758F\u758E\u7619\u7B11\u7BE0\u7C2B\u7D20\u7D39\u852C\u856D\u8607\u8A34\u900D\u9061\u90B5\u92B7\u97F6\u9A37\u4FD7\u5C6C\u675F\u6D91\u7C9F\u7E8C\u8B16\u8D16\u901F\u5B6B\u5DFD\u640D\u84C0\u905C\u98E1\u7387\u5B8B\u609A\u677E\u6DDE\u8A1F\u8AA6\u9001\u980C\u5237\uF970\u7051\u788E\u9396\u8870\u91D7\u4FEE\u53D7\u55FD\u56DA\u5782\u58FD\u5AC2\u5B88\u5CAB\u5CC0\u5E25\u6101"],
["e2a1", "\u620D\u624B\u6388\u641C\u6536\u6578\u6A39\u6B8A\u6C34\u6D19\u6F31\u71E7\u72E9\u7378\u7407\u74B2\u7626\u7761\u79C0\u7A57\u7AEA\u7CB9\u7D8F\u7DAC\u7E61\u7F9E\u8129\u8331\u8490\u84DA\u85EA\u8896\u8AB0\u8B90\u8F38\u9042\u9083\u916C\u9296\u92B9\u968B\u96A7\u96A8\u96D6\u9700\u9808\u9996\u9AD3\u9B1A\u53D4\u587E\u5919\u5B70\u5BBF\u6DD1\u6F5A\u719F\u7421\u74B9\u8085\u83FD\u5DE1\u5F87\u5FAA\u6042\u65EC\u6812\u696F\u6A53\u6B89\u6D35\u6DF3\u73E3\u76FE\u77AC\u7B4D\u7D14\u8123\u821C\u8340\u84F4\u8563\u8A62\u8AC4\u9187\u931E\u9806\u99B4\u620C\u8853\u8FF0\u9265\u5D07\u5D27"],
["e3a1", "\u5D69\u745F\u819D\u8768\u6FD5\u62FE\u7FD2\u8936\u8972\u4E1E\u4E58\u50E7\u52DD\u5347\u627F\u6607\u7E69\u8805\u965E\u4F8D\u5319\u5636\u59CB\u5AA4\u5C38\u5C4E\u5C4D\u5E02\u5F11\u6043\u65BD\u662F\u6642\u67BE\u67F4\u731C\u77E2\u793A\u7FC5\u8494\u84CD\u8996\u8A66\u8A69\u8AE1\u8C55\u8C7A\u57F4\u5BD4\u5F0F\u606F\u62ED\u690D\u6B96\u6E5C\u7184\u7BD2\u8755\u8B58\u8EFE\u98DF\u98FE\u4F38\u4F81\u4FE1\u547B\u5A20\u5BB8\u613C\u65B0\u6668\u71FC\u7533\u795E\u7D33\u814E\u81E3\u8398\u85AA\u85CE\u8703\u8A0A\u8EAB\u8F9B\uF971\u8FC5\u5931\u5BA4\u5BE6\u6089\u5BE9\u5C0B\u5FC3\u6C81"],
["e4a1", "\uF972\u6DF1\u700B\u751A\u82AF\u8AF6\u4EC0\u5341\uF973\u96D9\u6C0F\u4E9E\u4FC4\u5152\u555E\u5A25\u5CE8\u6211\u7259\u82BD\u83AA\u86FE\u8859\u8A1D\u963F\u96C5\u9913\u9D09\u9D5D\u580A\u5CB3\u5DBD\u5E44\u60E1\u6115\u63E1\u6A02\u6E25\u9102\u9354\u984E\u9C10\u9F77\u5B89\u5CB8\u6309\u664F\u6848\u773C\u96C1\u978D\u9854\u9B9F\u65A1\u8B01\u8ECB\u95BC\u5535\u5CA9\u5DD6\u5EB5\u6697\u764C\u83F4\u95C7\u58D3\u62BC\u72CE\u9D28\u4EF0\u592E\u600F\u663B\u6B83\u79E7\u9D26\u5393\u54C0\u57C3\u5D16\u611B\u66D6\u6DAF\u788D\u827E\u9698\u9744\u5384\u627C\u6396\u6DB2\u7E0A\u814B\u984D"],
["e5a1", "\u6AFB\u7F4C\u9DAF\u9E1A\u4E5F\u503B\u51B6\u591C\u60F9\u63F6\u6930\u723A\u8036\uF974\u91CE\u5F31\uF975\uF976\u7D04\u82E5\u846F\u84BB\u85E5\u8E8D\uF977\u4F6F\uF978\uF979\u58E4\u5B43\u6059\u63DA\u6518\u656D\u6698\uF97A\u694A\u6A23\u6D0B\u7001\u716C\u75D2\u760D\u79B3\u7A70\uF97B\u7F8A\uF97C\u8944\uF97D\u8B93\u91C0\u967D\uF97E\u990A\u5704\u5FA1\u65BC\u6F01\u7600\u79A6\u8A9E\u99AD\u9B5A\u9F6C\u5104\u61B6\u6291\u6A8D\u81C6\u5043\u5830\u5F66\u7109\u8A00\u8AFA\u5B7C\u8616\u4FFA\u513C\u56B4\u5944\u63A9\u6DF9\u5DAA\u696D\u5186\u4E88\u4F59\uF97F\uF980\uF981\u5982\uF982"],
["e6a1", "\uF983\u6B5F\u6C5D\uF984\u74B5\u7916\uF985\u8207\u8245\u8339\u8F3F\u8F5D\uF986\u9918\uF987\uF988\uF989\u4EA6\uF98A\u57DF\u5F79\u6613\uF98B\uF98C\u75AB\u7E79\u8B6F\uF98D\u9006\u9A5B\u56A5\u5827\u59F8\u5A1F\u5BB4\uF98E\u5EF6\uF98F\uF990\u6350\u633B\uF991\u693D\u6C87\u6CBF\u6D8E\u6D93\u6DF5\u6F14\uF992\u70DF\u7136\u7159\uF993\u71C3\u71D5\uF994\u784F\u786F\uF995\u7B75\u7DE3\uF996\u7E2F\uF997\u884D\u8EDF\uF998\uF999\uF99A\u925B\uF99B\u9CF6\uF99C\uF99D\uF99E\u6085\u6D85\uF99F\u71B1\uF9A0\uF9A1\u95B1\u53AD\uF9A2\uF9A3\uF9A4\u67D3\uF9A5\u708E\u7130\u7430\u8276\u82D2"],
["e7a1", "\uF9A6\u95BB\u9AE5\u9E7D\u66C4\uF9A7\u71C1\u8449\uF9A8\uF9A9\u584B\uF9AA\uF9AB\u5DB8\u5F71\uF9AC\u6620\u668E\u6979\u69AE\u6C38\u6CF3\u6E36\u6F41\u6FDA\u701B\u702F\u7150\u71DF\u7370\uF9AD\u745B\uF9AE\u74D4\u76C8\u7A4E\u7E93\uF9AF\uF9B0\u82F1\u8A60\u8FCE\uF9B1\u9348\uF9B2\u9719\uF9B3\uF9B4\u4E42\u502A\uF9B5\u5208\u53E1\u66F3\u6C6D\u6FCA\u730A\u777F\u7A62\u82AE\u85DD\u8602\uF9B6\u88D4\u8A63\u8B7D\u8C6B\uF9B7\u92B3\uF9B8\u9713\u9810\u4E94\u4F0D\u4FC9\u50B2\u5348\u543E\u5433\u55DA\u5862\u58BA\u5967\u5A1B\u5BE4\u609F\uF9B9\u61CA\u6556\u65FF\u6664\u68A7\u6C5A\u6FB3"],
["e8a1", "\u70CF\u71AC\u7352\u7B7D\u8708\u8AA4\u9C32\u9F07\u5C4B\u6C83\u7344\u7389\u923A\u6EAB\u7465\u761F\u7A69\u7E15\u860A\u5140\u58C5\u64C1\u74EE\u7515\u7670\u7FC1\u9095\u96CD\u9954\u6E26\u74E6\u7AA9\u7AAA\u81E5\u86D9\u8778\u8A1B\u5A49\u5B8C\u5B9B\u68A1\u6900\u6D63\u73A9\u7413\u742C\u7897\u7DE9\u7FEB\u8118\u8155\u839E\u8C4C\u962E\u9811\u66F0\u5F80\u65FA\u6789\u6C6A\u738B\u502D\u5A03\u6B6A\u77EE\u5916\u5D6C\u5DCD\u7325\u754F\uF9BA\uF9BB\u50E5\u51F9\u582F\u592D\u5996\u59DA\u5BE5\uF9BC\uF9BD\u5DA2\u62D7\u6416\u6493\u64FE\uF9BE\u66DC\uF9BF\u6A48\uF9C0\u71FF\u7464\uF9C1"],
["e9a1", "\u7A88\u7AAF\u7E47\u7E5E\u8000\u8170\uF9C2\u87EF\u8981\u8B20\u9059\uF9C3\u9080\u9952\u617E\u6B32\u6D74\u7E1F\u8925\u8FB1\u4FD1\u50AD\u5197\u52C7\u57C7\u5889\u5BB9\u5EB8\u6142\u6995\u6D8C\u6E67\u6EB6\u7194\u7462\u7528\u752C\u8073\u8338\u84C9\u8E0A\u9394\u93DE\uF9C4\u4E8E\u4F51\u5076\u512A\u53C8\u53CB\u53F3\u5B87\u5BD3\u5C24\u611A\u6182\u65F4\u725B\u7397\u7440\u76C2\u7950\u7991\u79B9\u7D06\u7FBD\u828B\u85D5\u865E\u8FC2\u9047\u90F5\u91EA\u9685\u96E8\u96E9\u52D6\u5F67\u65ED\u6631\u682F\u715C\u7A36\u90C1\u980A\u4E91\uF9C5\u6A52\u6B9E\u6F90\u7189\u8018\u82B8\u8553"],
["eaa1", "\u904B\u9695\u96F2\u97FB\u851A\u9B31\u4E90\u718A\u96C4\u5143\u539F\u54E1\u5713\u5712\u57A3\u5A9B\u5AC4\u5BC3\u6028\u613F\u63F4\u6C85\u6D39\u6E72\u6E90\u7230\u733F\u7457\u82D1\u8881\u8F45\u9060\uF9C6\u9662\u9858\u9D1B\u6708\u8D8A\u925E\u4F4D\u5049\u50DE\u5371\u570D\u59D4\u5A01\u5C09\u6170\u6690\u6E2D\u7232\u744B\u7DEF\u80C3\u840E\u8466\u853F\u875F\u885B\u8918\u8B02\u9055\u97CB\u9B4F\u4E73\u4F91\u5112\u516A\uF9C7\u552F\u55A9\u5B7A\u5BA5\u5E7C\u5E7D\u5EBE\u60A0\u60DF\u6108\u6109\u63C4\u6538\u6709\uF9C8\u67D4\u67DA\uF9C9\u6961\u6962\u6CB9\u6D27\uF9CA\u6E38\uF9CB"],
["eba1", "\u6FE1\u7336\u7337\uF9CC\u745C\u7531\uF9CD\u7652\uF9CE\uF9CF\u7DAD\u81FE\u8438\u88D5\u8A98\u8ADB\u8AED\u8E30\u8E42\u904A\u903E\u907A\u9149\u91C9\u936E\uF9D0\uF9D1\u5809\uF9D2\u6BD3\u8089\u80B2\uF9D3\uF9D4\u5141\u596B\u5C39\uF9D5\uF9D6\u6F64\u73A7\u80E4\u8D07\uF9D7\u9217\u958F\uF9D8\uF9D9\uF9DA\uF9DB\u807F\u620E\u701C\u7D68\u878D\uF9DC\u57A0\u6069\u6147\u6BB7\u8ABE\u9280\u96B1\u4E59\u541F\u6DEB\u852D\u9670\u97F3\u98EE\u63D6\u6CE3\u9091\u51DD\u61C9\u81BA\u9DF9\u4F9D\u501A\u5100\u5B9C\u610F\u61FF\u64EC\u6905\u6BC5\u7591\u77E3\u7FA9\u8264\u858F\u87FB\u8863\u8ABC"],
["eca1", "\u8B70\u91AB\u4E8C\u4EE5\u4F0A\uF9DD\uF9DE\u5937\u59E8\uF9DF\u5DF2\u5F1B\u5F5B\u6021\uF9E0\uF9E1\uF9E2\uF9E3\u723E\u73E5\uF9E4\u7570\u75CD\uF9E5\u79FB\uF9E6\u800C\u8033\u8084\u82E1\u8351\uF9E7\uF9E8\u8CBD\u8CB3\u9087\uF9E9\uF9EA\u98F4\u990C\uF9EB\uF9EC\u7037\u76CA\u7FCA\u7FCC\u7FFC\u8B1A\u4EBA\u4EC1\u5203\u5370\uF9ED\u54BD\u56E0\u59FB\u5BC5\u5F15\u5FCD\u6E6E\uF9EE\uF9EF\u7D6A\u8335\uF9F0\u8693\u8A8D\uF9F1\u976D\u9777\uF9F2\uF9F3\u4E00\u4F5A\u4F7E\u58F9\u65E5\u6EA2\u9038\u93B0\u99B9\u4EFB\u58EC\u598A\u59D9\u6041\uF9F4\uF9F5\u7A14\uF9F6\u834F\u8CC3\u5165\u5344"],
["eda1", "\uF9F7\uF9F8\uF9F9\u4ECD\u5269\u5B55\u82BF\u4ED4\u523A\u54A8\u59C9\u59FF\u5B50\u5B57\u5B5C\u6063\u6148\u6ECB\u7099\u716E\u7386\u74F7\u75B5\u78C1\u7D2B\u8005\u81EA\u8328\u8517\u85C9\u8AEE\u8CC7\u96CC\u4F5C\u52FA\u56BC\u65AB\u6628\u707C\u70B8\u7235\u7DBD\u828D\u914C\u96C0\u9D72\u5B71\u68E7\u6B98\u6F7A\u76DE\u5C91\u66AB\u6F5B\u7BB4\u7C2A\u8836\u96DC\u4E08\u4ED7\u5320\u5834\u58BB\u58EF\u596C\u5C07\u5E33\u5E84\u5F35\u638C\u66B2\u6756\u6A1F\u6AA3\u6B0C\u6F3F\u7246\uF9FA\u7350\u748B\u7AE0\u7CA7\u8178\u81DF\u81E7\u838A\u846C\u8523\u8594\u85CF\u88DD\u8D13\u91AC\u9577"],
["eea1", "\u969C\u518D\u54C9\u5728\u5BB0\u624D\u6750\u683D\u6893\u6E3D\u6ED3\u707D\u7E21\u88C1\u8CA1\u8F09\u9F4B\u9F4E\u722D\u7B8F\u8ACD\u931A\u4F47\u4F4E\u5132\u5480\u59D0\u5E95\u62B5\u6775\u696E\u6A17\u6CAE\u6E1A\u72D9\u732A\u75BD\u7BB8\u7D35\u82E7\u83F9\u8457\u85F7\u8A5B\u8CAF\u8E87\u9019\u90B8\u96CE\u9F5F\u52E3\u540A\u5AE1\u5BC2\u6458\u6575\u6EF4\u72C4\uF9FB\u7684\u7A4D\u7B1B\u7C4D\u7E3E\u7FDF\u837B\u8B2B\u8CCA\u8D64\u8DE1\u8E5F\u8FEA\u8FF9\u9069\u93D1\u4F43\u4F7A\u50B3\u5168\u5178\u524D\u526A\u5861\u587C\u5960\u5C08\u5C55\u5EDB\u609B\u6230\u6813\u6BBF\u6C08\u6FB1"],
["efa1", "\u714E\u7420\u7530\u7538\u7551\u7672\u7B4C\u7B8B\u7BAD\u7BC6\u7E8F\u8A6E\u8F3E\u8F49\u923F\u9293\u9322\u942B\u96FB\u985A\u986B\u991E\u5207\u622A\u6298\u6D59\u7664\u7ACA\u7BC0\u7D76\u5360\u5CBE\u5E97\u6F38\u70B9\u7C98\u9711\u9B8E\u9EDE\u63A5\u647A\u8776\u4E01\u4E95\u4EAD\u505C\u5075\u5448\u59C3\u5B9A\u5E40\u5EAD\u5EF7\u5F81\u60C5\u633A\u653F\u6574\u65CC\u6676\u6678\u67FE\u6968\u6A89\u6B63\u6C40\u6DC0\u6DE8\u6E1F\u6E5E\u701E\u70A1\u738E\u73FD\u753A\u775B\u7887\u798E\u7A0B\u7A7D\u7CBE\u7D8E\u8247\u8A02\u8AEA\u8C9E\u912D\u914A\u91D8\u9266\u92CC\u9320\u9706\u9756"],
["f0a1", "\u975C\u9802\u9F0E\u5236\u5291\u557C\u5824\u5E1D\u5F1F\u608C\u63D0\u68AF\u6FDF\u796D\u7B2C\u81CD\u85BA\u88FD\u8AF8\u8E44\u918D\u9664\u969B\u973D\u984C\u9F4A\u4FCE\u5146\u51CB\u52A9\u5632\u5F14\u5F6B\u63AA\u64CD\u65E9\u6641\u66FA\u66F9\u671D\u689D\u68D7\u69FD\u6F15\u6F6E\u7167\u71E5\u722A\u74AA\u773A\u7956\u795A\u79DF\u7A20\u7A95\u7C97\u7CDF\u7D44\u7E70\u8087\u85FB\u86A4\u8A54\u8ABF\u8D99\u8E81\u9020\u906D\u91E3\u963B\u96D5\u9CE5\u65CF\u7C07\u8DB3\u93C3\u5B58\u5C0A\u5352\u62D9\u731D\u5027\u5B97\u5F9E\u60B0\u616B\u68D5\u6DD9\u742E\u7A2E\u7D42\u7D9C\u7E31\u816B"],
["f1a1", "\u8E2A\u8E35\u937E\u9418\u4F50\u5750\u5DE6\u5EA7\u632B\u7F6A\u4E3B\u4F4F\u4F8F\u505A\u59DD\u80C4\u546A\u5468\u55FE\u594F\u5B99\u5DDE\u5EDA\u665D\u6731\u67F1\u682A\u6CE8\u6D32\u6E4A\u6F8D\u70B7\u73E0\u7587\u7C4C\u7D02\u7D2C\u7DA2\u821F\u86DB\u8A3B\u8A85\u8D70\u8E8A\u8F33\u9031\u914E\u9152\u9444\u99D0\u7AF9\u7CA5\u4FCA\u5101\u51C6\u57C8\u5BEF\u5CFB\u6659\u6A3D\u6D5A\u6E96\u6FEC\u710C\u756F\u7AE3\u8822\u9021\u9075\u96CB\u99FF\u8301\u4E2D\u4EF2\u8846\u91CD\u537D\u6ADB\u696B\u6C41\u847A\u589E\u618E\u66FE\u62EF\u70DD\u7511\u75C7\u7E52\u84B8\u8B49\u8D08\u4E4B\u53EA"],
["f2a1", "\u54AB\u5730\u5740\u5FD7\u6301\u6307\u646F\u652F\u65E8\u667A\u679D\u67B3\u6B62\u6C60\u6C9A\u6F2C\u77E5\u7825\u7949\u7957\u7D19\u80A2\u8102\u81F3\u829D\u82B7\u8718\u8A8C\uF9FC\u8D04\u8DBE\u9072\u76F4\u7A19\u7A37\u7E54\u8077\u5507\u55D4\u5875\u632F\u6422\u6649\u664B\u686D\u699B\u6B84\u6D25\u6EB1\u73CD\u7468\u74A1\u755B\u75B9\u76E1\u771E\u778B\u79E6\u7E09\u7E1D\u81FB\u852F\u8897\u8A3A\u8CD1\u8EEB\u8FB0\u9032\u93AD\u9663\u9673\u9707\u4F84\u53F1\u59EA\u5AC9\u5E19\u684E\u74C6\u75BE\u79E9\u7A92\u81A3\u86ED\u8CEA\u8DCC\u8FED\u659F\u6715\uF9FD\u57F7\u6F57\u7DDD\u8F2F"],
["f3a1", "\u93F6\u96C6\u5FB5\u61F2\u6F84\u4E14\u4F98\u501F\u53C9\u55DF\u5D6F\u5DEE\u6B21\u6B64\u78CB\u7B9A\uF9FE\u8E49\u8ECA\u906E\u6349\u643E\u7740\u7A84\u932F\u947F\u9F6A\u64B0\u6FAF\u71E6\u74A8\u74DA\u7AC4\u7C12\u7E82\u7CB2\u7E98\u8B9A\u8D0A\u947D\u9910\u994C\u5239\u5BDF\u64E6\u672D\u7D2E\u50ED\u53C3\u5879\u6158\u6159\u61FA\u65AC\u7AD9\u8B92\u8B96\u5009\u5021\u5275\u5531\u5A3C\u5EE0\u5F70\u6134\u655E\u660C\u6636\u66A2\u69CD\u6EC4\u6F32\u7316\u7621\u7A93\u8139\u8259\u83D6\u84BC\u50B5\u57F0\u5BC0\u5BE8\u5F69\u63A1\u7826\u7DB5\u83DC\u8521\u91C7\u91F5\u518A\u67F5\u7B56"],
["f4a1", "\u8CAC\u51C4\u59BB\u60BD\u8655\u501C\uF9FF\u5254\u5C3A\u617D\u621A\u62D3\u64F2\u65A5\u6ECC\u7620\u810A\u8E60\u965F\u96BB\u4EDF\u5343\u5598\u5929\u5DDD\u64C5\u6CC9\u6DFA\u7394\u7A7F\u821B\u85A6\u8CE4\u8E10\u9077\u91E7\u95E1\u9621\u97C6\u51F8\u54F2\u5586\u5FB9\u64A4\u6F88\u7DB4\u8F1F\u8F4D\u9435\u50C9\u5C16\u6CBE\u6DFB\u751B\u77BB\u7C3D\u7C64\u8A79\u8AC2\u581E\u59BE\u5E16\u6377\u7252\u758A\u776B\u8ADC\u8CBC\u8F12\u5EF3\u6674\u6DF8\u807D\u83C1\u8ACB\u9751\u9BD6\uFA00\u5243\u66FF\u6D95\u6EEF\u7DE0\u8AE6\u902E\u905E\u9AD4\u521D\u527F\u54E8\u6194\u6284\u62DB\u68A2"],
["f5a1", "\u6912\u695A\u6A35\u7092\u7126\u785D\u7901\u790E\u79D2\u7A0D\u8096\u8278\u82D5\u8349\u8549\u8C82\u8D85\u9162\u918B\u91AE\u4FC3\u56D1\u71ED\u77D7\u8700\u89F8\u5BF8\u5FD6\u6751\u90A8\u53E2\u585A\u5BF5\u60A4\u6181\u6460\u7E3D\u8070\u8525\u9283\u64AE\u50AC\u5D14\u6700\u589C\u62BD\u63A8\u690E\u6978\u6A1E\u6E6B\u76BA\u79CB\u82BB\u8429\u8ACF\u8DA8\u8FFD\u9112\u914B\u919C\u9310\u9318\u939A\u96DB\u9A36\u9C0D\u4E11\u755C\u795D\u7AFA\u7B51\u7BC9\u7E2E\u84C4\u8E59\u8E74\u8EF8\u9010\u6625\u693F\u7443\u51FA\u672E\u9EDC\u5145\u5FE0\u6C96\u87F2\u885D\u8877\u60B4\u81B5\u8403"],
["f6a1", "\u8D05\u53D6\u5439\u5634\u5A36\u5C31\u708A\u7FE0\u805A\u8106\u81ED\u8DA3\u9189\u9A5F\u9DF2\u5074\u4EC4\u53A0\u60FB\u6E2C\u5C64\u4F88\u5024\u55E4\u5CD9\u5E5F\u6065\u6894\u6CBB\u6DC4\u71BE\u75D4\u75F4\u7661\u7A1A\u7A49\u7DC7\u7DFB\u7F6E\u81F4\u86A9\u8F1C\u96C9\u99B3\u9F52\u5247\u52C5\u98ED\u89AA\u4E03\u67D2\u6F06\u4FB5\u5BE2\u6795\u6C88\u6D78\u741B\u7827\u91DD\u937C\u87C4\u79E4\u7A31\u5FEB\u4ED6\u54A4\u553E\u58AE\u59A5\u60F0\u6253\u62D6\u6736\u6955\u8235\u9640\u99B1\u99DD\u502C\u5353\u5544\u577C\uFA01\u6258\uFA02\u64E2\u666B\u67DD\u6FC1\u6FEF\u7422\u7438\u8A17"],
["f7a1", "\u9438\u5451\u5606\u5766\u5F48\u619A\u6B4E\u7058\u70AD\u7DBB\u8A95\u596A\u812B\u63A2\u7708\u803D\u8CAA\u5854\u642D\u69BB\u5B95\u5E11\u6E6F\uFA03\u8569\u514C\u53F0\u592A\u6020\u614B\u6B86\u6C70\u6CF0\u7B1E\u80CE\u82D4\u8DC6\u90B0\u98B1\uFA04\u64C7\u6FA4\u6491\u6504\u514E\u5410\u571F\u8A0E\u615F\u6876\uFA05\u75DB\u7B52\u7D71\u901A\u5806\u69CC\u817F\u892A\u9000\u9839\u5078\u5957\u59AC\u6295\u900F\u9B2A\u615D\u7279\u95D6\u5761\u5A46\u5DF4\u628A\u64AD\u64FA\u6777\u6CE2\u6D3E\u722C\u7436\u7834\u7F77\u82AD\u8DDB\u9817\u5224\u5742\u677F\u7248\u74E3\u8CA9\u8FA6\u9211"],
["f8a1", "\u962A\u516B\u53ED\u634C\u4F69\u5504\u6096\u6557\u6C9B\u6D7F\u724C\u72FD\u7A17\u8987\u8C9D\u5F6D\u6F8E\u70F9\u81A8\u610E\u4FBF\u504F\u6241\u7247\u7BC7\u7DE8\u7FE9\u904D\u97AD\u9A19\u8CB6\u576A\u5E73\u67B0\u840D\u8A55\u5420\u5B16\u5E63\u5EE2\u5F0A\u6583\u80BA\u853D\u9589\u965B\u4F48\u5305\u530D\u530F\u5486\u54FA\u5703\u5E03\u6016\u629B\u62B1\u6355\uFA06\u6CE1\u6D66\u75B1\u7832\u80DE\u812F\u82DE\u8461\u84B2\u888D\u8912\u900B\u92EA\u98FD\u9B91\u5E45\u66B4\u66DD\u7011\u7206\uFA07\u4FF5\u527D\u5F6A\u6153\u6753\u6A19\u6F02\u74E2\u7968\u8868\u8C79\u98C7\u98C4\u9A43"],
["f9a1", "\u54C1\u7A1F\u6953\u8AF7\u8C4A\u98A8\u99AE\u5F7C\u62AB\u75B2\u76AE\u88AB\u907F\u9642\u5339\u5F3C\u5FC5\u6CCC\u73CC\u7562\u758B\u7B46\u82FE\u999D\u4E4F\u903C\u4E0B\u4F55\u53A6\u590F\u5EC8\u6630\u6CB3\u7455\u8377\u8766\u8CC0\u9050\u971E\u9C15\u58D1\u5B78\u8650\u8B14\u9DB4\u5BD2\u6068\u608D\u65F1\u6C57\u6F22\u6FA3\u701A\u7F55\u7FF0\u9591\u9592\u9650\u97D3\u5272\u8F44\u51FD\u542B\u54B8\u5563\u558A\u6ABB\u6DB5\u7DD8\u8266\u929C\u9677\u9E79\u5408\u54C8\u76D2\u86E4\u95A4\u95D4\u965C\u4EA2\u4F09\u59EE\u5AE6\u5DF7\u6052\u6297\u676D\u6841\u6C86\u6E2F\u7F38\u809B\u822A"],
["faa1", "\uFA08\uFA09\u9805\u4EA5\u5055\u54B3\u5793\u595A\u5B69\u5BB3\u61C8\u6977\u6D77\u7023\u87F9\u89E3\u8A72\u8AE7\u9082\u99ED\u9AB8\u52BE\u6838\u5016\u5E78\u674F\u8347\u884C\u4EAB\u5411\u56AE\u73E6\u9115\u97FF\u9909\u9957\u9999\u5653\u589F\u865B\u8A31\u61B2\u6AF6\u737B\u8ED2\u6B47\u96AA\u9A57\u5955\u7200\u8D6B\u9769\u4FD4\u5CF4\u5F26\u61F8\u665B\u6CEB\u70AB\u7384\u73B9\u73FE\u7729\u774D\u7D43\u7D62\u7E23\u8237\u8852\uFA0A\u8CE2\u9249\u986F\u5B51\u7A74\u8840\u9801\u5ACC\u4FE0\u5354\u593E\u5CFD\u633E\u6D79\u72F9\u8105\u8107\u83A2\u92CF\u9830\u4EA8\u5144\u5211\u578B"],
["fba1", "\u5F62\u6CC2\u6ECE\u7005\u7050\u70AF\u7192\u73E9\u7469\u834A\u87A2\u8861\u9008\u90A2\u93A3\u99A8\u516E\u5F57\u60E0\u6167\u66B3\u8559\u8E4A\u91AF\u978B\u4E4E\u4E92\u547C\u58D5\u58FA\u597D\u5CB5\u5F27\u6236\u6248\u660A\u6667\u6BEB\u6D69\u6DCF\u6E56\u6EF8\u6F94\u6FE0\u6FE9\u705D\u72D0\u7425\u745A\u74E0\u7693\u795C\u7CCA\u7E1E\u80E1\u82A6\u846B\u84BF\u864E\u865F\u8774\u8B77\u8C6A\u93AC\u9800\u9865\u60D1\u6216\u9177\u5A5A\u660F\u6DF7\u6E3E\u743F\u9B42\u5FFD\u60DA\u7B0F\u54C4\u5F18\u6C5E\u6CD3\u6D2A\u70D8\u7D05\u8679\u8A0C\u9D3B\u5316\u548C\u5B05\u6A3A\u706B\u7575"],
["fca1", "\u798D\u79BE\u82B1\u83EF\u8A71\u8B41\u8CA8\u9774\uFA0B\u64F4\u652B\u78BA\u78BB\u7A6B\u4E38\u559A\u5950\u5BA6\u5E7B\u60A3\u63DB\u6B61\u6665\u6853\u6E19\u7165\u74B0\u7D08\u9084\u9A69\u9C25\u6D3B\u6ED1\u733E\u8C41\u95CA\u51F0\u5E4C\u5FA8\u604D\u60F6\u6130\u614C\u6643\u6644\u69A5\u6CC1\u6E5F\u6EC9\u6F62\u714C\u749C\u7687\u7BC1\u7C27\u8352\u8757\u9051\u968D\u9EC3\u532F\u56DE\u5EFB\u5F8A\u6062\u6094\u61F7\u6666\u6703\u6A9C\u6DEE\u6FAE\u7070\u736A\u7E6A\u81BE\u8334\u86D4\u8AA8\u8CC4\u5283\u7372\u5B96\u6A6B\u9404\u54EE\u5686\u5B5D\u6548\u6585\u66C9\u689F\u6D8D\u6DC6"],
["fda1", "\u723B\u80B4\u9175\u9A4D\u4FAF\u5019\u539A\u540E\u543C\u5589\u55C5\u5E3F\u5F8C\u673D\u7166\u73DD\u9005\u52DB\u52F3\u5864\u58CE\u7104\u718F\u71FB\u85B0\u8A13\u6688\u85A8\u55A7\u6684\u714A\u8431\u5349\u5599\u6BC1\u5F59\u5FBD\u63EE\u6689\u7147\u8AF1\u8F1D\u9EBE\u4F11\u643A\u70CB\u7566\u8667\u6064\u8B4E\u9DF8\u5147\u51F6\u5308\u6D36\u80F8\u9ED1\u6615\u6B23\u7098\u75D5\u5403\u5C79\u7D07\u8A16\u6B20\u6B3D\u6B46\u5438\u6070\u6D3D\u7FD5\u8208\u50D6\u51DE\u559C\u566B\u56CD\u59EC\u5B09\u5E0C\u6199\u6198\u6231\u665E\u66E6\u7199\u71B9\u71BA\u72A7\u79A7\u7A00\u7FB2\u8A70"]
];
}
});
var require_cp9502 = __commonJS2({
"node_modules/raw-body/node_modules/iconv-lite/encodings/tables/cp950.json"(exports2, module2) {
module2.exports = [
["0", "\0", 127],
["a140", "\u3000\uFF0C\u3001\u3002\uFF0E\u2027\uFF1B\uFF1A\uFF1F\uFF01\uFE30\u2026\u2025\uFE50\uFE51\uFE52\xB7\uFE54\uFE55\uFE56\uFE57\uFF5C\u2013\uFE31\u2014\uFE33\u2574\uFE34\uFE4F\uFF08\uFF09\uFE35\uFE36\uFF5B\uFF5D\uFE37\uFE38\u3014\u3015\uFE39\uFE3A\u3010\u3011\uFE3B\uFE3C\u300A\u300B\uFE3D\uFE3E\u3008\u3009\uFE3F\uFE40\u300C\u300D\uFE41\uFE42\u300E\u300F\uFE43\uFE44\uFE59\uFE5A"],
["a1a1", "\uFE5B\uFE5C\uFE5D\uFE5E\u2018\u2019\u201C\u201D\u301D\u301E\u2035\u2032\uFF03\uFF06\uFF0A\u203B\xA7\u3003\u25CB\u25CF\u25B3\u25B2\u25CE\u2606\u2605\u25C7\u25C6\u25A1\u25A0\u25BD\u25BC\u32A3\u2105\xAF\uFFE3\uFF3F\u02CD\uFE49\uFE4A\uFE4D\uFE4E\uFE4B\uFE4C\uFE5F\uFE60\uFE61\uFF0B\uFF0D\xD7\xF7\xB1\u221A\uFF1C\uFF1E\uFF1D\u2266\u2267\u2260\u221E\u2252\u2261\uFE62", 4, "\uFF5E\u2229\u222A\u22A5\u2220\u221F\u22BF\u33D2\u33D1\u222B\u222E\u2235\u2234\u2640\u2642\u2295\u2299\u2191\u2193\u2190\u2192\u2196\u2197\u2199\u2198\u2225\u2223\uFF0F"],
["a240", "\uFF3C\u2215\uFE68\uFF04\uFFE5\u3012\uFFE0\uFFE1\uFF05\uFF20\u2103\u2109\uFE69\uFE6A\uFE6B\u33D5\u339C\u339D\u339E\u33CE\u33A1\u338E\u338F\u33C4\xB0\u5159\u515B\u515E\u515D\u5161\u5163\u55E7\u74E9\u7CCE\u2581", 7, "\u258F\u258E\u258D\u258C\u258B\u258A\u2589\u253C\u2534\u252C\u2524\u251C\u2594\u2500\u2502\u2595\u250C\u2510\u2514\u2518\u256D"],
["a2a1", "\u256E\u2570\u256F\u2550\u255E\u256A\u2561\u25E2\u25E3\u25E5\u25E4\u2571\u2572\u2573\uFF10", 9, "\u2160", 9, "\u3021", 8, "\u5341\u5344\u5345\uFF21", 25, "\uFF41", 21],
["a340", "\uFF57\uFF58\uFF59\uFF5A\u0391", 16, "\u03A3", 6, "\u03B1", 16, "\u03C3", 6, "\u3105", 10],
["a3a1", "\u3110", 25, "\u02D9\u02C9\u02CA\u02C7\u02CB"],
["a3e1", "\u20AC"],
["a440", "\u4E00\u4E59\u4E01\u4E03\u4E43\u4E5D\u4E86\u4E8C\u4EBA\u513F\u5165\u516B\u51E0\u5200\u5201\u529B\u5315\u5341\u535C\u53C8\u4E09\u4E0B\u4E08\u4E0A\u4E2B\u4E38\u51E1\u4E45\u4E48\u4E5F\u4E5E\u4E8E\u4EA1\u5140\u5203\u52FA\u5343\u53C9\u53E3\u571F\u58EB\u5915\u5927\u5973\u5B50\u5B51\u5B53\u5BF8\u5C0F\u5C22\u5C38\u5C71\u5DDD\u5DE5\u5DF1\u5DF2\u5DF3\u5DFE\u5E72\u5EFE\u5F0B\u5F13\u624D"],
["a4a1", "\u4E11\u4E10\u4E0D\u4E2D\u4E30\u4E39\u4E4B\u5C39\u4E88\u4E91\u4E95\u4E92\u4E94\u4EA2\u4EC1\u4EC0\u4EC3\u4EC6\u4EC7\u4ECD\u4ECA\u4ECB\u4EC4\u5143\u5141\u5167\u516D\u516E\u516C\u5197\u51F6\u5206\u5207\u5208\u52FB\u52FE\u52FF\u5316\u5339\u5348\u5347\u5345\u535E\u5384\u53CB\u53CA\u53CD\u58EC\u5929\u592B\u592A\u592D\u5B54\u5C11\u5C24\u5C3A\u5C6F\u5DF4\u5E7B\u5EFF\u5F14\u5F15\u5FC3\u6208\u6236\u624B\u624E\u652F\u6587\u6597\u65A4\u65B9\u65E5\u66F0\u6708\u6728\u6B20\u6B62\u6B79\u6BCB\u6BD4\u6BDB\u6C0F\u6C34\u706B\u722A\u7236\u723B\u7247\u7259\u725B\u72AC\u738B\u4E19"],
["a540", "\u4E16\u4E15\u4E14\u4E18\u4E3B\u4E4D\u4E4F\u4E4E\u4EE5\u4ED8\u4ED4\u4ED5\u4ED6\u4ED7\u4EE3\u4EE4\u4ED9\u4EDE\u5145\u5144\u5189\u518A\u51AC\u51F9\u51FA\u51F8\u520A\u52A0\u529F\u5305\u5306\u5317\u531D\u4EDF\u534A\u5349\u5361\u5360\u536F\u536E\u53BB\u53EF\u53E4\u53F3\u53EC\u53EE\u53E9\u53E8\u53FC\u53F8\u53F5\u53EB\u53E6\u53EA\u53F2\u53F1\u53F0\u53E5\u53ED\u53FB\u56DB\u56DA\u5916"],
["a5a1", "\u592E\u5931\u5974\u5976\u5B55\u5B83\u5C3C\u5DE8\u5DE7\u5DE6\u5E02\u5E03\u5E73\u5E7C\u5F01\u5F18\u5F17\u5FC5\u620A\u6253\u6254\u6252\u6251\u65A5\u65E6\u672E\u672C\u672A\u672B\u672D\u6B63\u6BCD\u6C11\u6C10\u6C38\u6C41\u6C40\u6C3E\u72AF\u7384\u7389\u74DC\u74E6\u7518\u751F\u7528\u7529\u7530\u7531\u7532\u7533\u758B\u767D\u76AE\u76BF\u76EE\u77DB\u77E2\u77F3\u793A\u79BE\u7A74\u7ACB\u4E1E\u4E1F\u4E52\u4E53\u4E69\u4E99\u4EA4\u4EA6\u4EA5\u4EFF\u4F09\u4F19\u4F0A\u4F15\u4F0D\u4F10\u4F11\u4F0F\u4EF2\u4EF6\u4EFB\u4EF0\u4EF3\u4EFD\u4F01\u4F0B\u5149\u5147\u5146\u5148\u5168"],
["a640", "\u5171\u518D\u51B0\u5217\u5211\u5212\u520E\u5216\u52A3\u5308\u5321\u5320\u5370\u5371\u5409\u540F\u540C\u540A\u5410\u5401\u540B\u5404\u5411\u540D\u5408\u5403\u540E\u5406\u5412\u56E0\u56DE\u56DD\u5733\u5730\u5728\u572D\u572C\u572F\u5729\u5919\u591A\u5937\u5938\u5984\u5978\u5983\u597D\u5979\u5982\u5981\u5B57\u5B58\u5B87\u5B88\u5B85\u5B89\u5BFA\u5C16\u5C79\u5DDE\u5E06\u5E76\u5E74"],
["a6a1", "\u5F0F\u5F1B\u5FD9\u5FD6\u620E\u620C\u620D\u6210\u6263\u625B\u6258\u6536\u65E9\u65E8\u65EC\u65ED\u66F2\u66F3\u6709\u673D\u6734\u6731\u6735\u6B21\u6B64\u6B7B\u6C16\u6C5D\u6C57\u6C59\u6C5F\u6C60\u6C50\u6C55\u6C61\u6C5B\u6C4D\u6C4E\u7070\u725F\u725D\u767E\u7AF9\u7C73\u7CF8\u7F36\u7F8A\u7FBD\u8001\u8003\u800C\u8012\u8033\u807F\u8089\u808B\u808C\u81E3\u81EA\u81F3\u81FC\u820C\u821B\u821F\u826E\u8272\u827E\u866B\u8840\u884C\u8863\u897F\u9621\u4E32\u4EA8\u4F4D\u4F4F\u4F47\u4F57\u4F5E\u4F34\u4F5B\u4F55\u4F30\u4F50\u4F51\u4F3D\u4F3A\u4F38\u4F43\u4F54\u4F3C\u4F46\u4F63"],
["a740", "\u4F5C\u4F60\u4F2F\u4F4E\u4F36\u4F59\u4F5D\u4F48\u4F5A\u514C\u514B\u514D\u5175\u51B6\u51B7\u5225\u5224\u5229\u522A\u5228\u52AB\u52A9\u52AA\u52AC\u5323\u5373\u5375\u541D\u542D\u541E\u543E\u5426\u544E\u5427\u5446\u5443\u5433\u5448\u5442\u541B\u5429\u544A\u5439\u543B\u5438\u542E\u5435\u5436\u5420\u543C\u5440\u5431\u542B\u541F\u542C\u56EA\u56F0\u56E4\u56EB\u574A\u5751\u5740\u574D"],
["a7a1", "\u5747\u574E\u573E\u5750\u574F\u573B\u58EF\u593E\u599D\u5992\u59A8\u599E\u59A3\u5999\u5996\u598D\u59A4\u5993\u598A\u59A5\u5B5D\u5B5C\u5B5A\u5B5B\u5B8C\u5B8B\u5B8F\u5C2C\u5C40\u5C41\u5C3F\u5C3E\u5C90\u5C91\u5C94\u5C8C\u5DEB\u5E0C\u5E8F\u5E87\u5E8A\u5EF7\u5F04\u5F1F\u5F64\u5F62\u5F77\u5F79\u5FD8\u5FCC\u5FD7\u5FCD\u5FF1\u5FEB\u5FF8\u5FEA\u6212\u6211\u6284\u6297\u6296\u6280\u6276\u6289\u626D\u628A\u627C\u627E\u6279\u6273\u6292\u626F\u6298\u626E\u6295\u6293\u6291\u6286\u6539\u653B\u6538\u65F1\u66F4\u675F\u674E\u674F\u6750\u6751\u675C\u6756\u675E\u6749\u6746\u6760"],
["a840", "\u6753\u6757\u6B65\u6BCF\u6C42\u6C5E\u6C99\u6C81\u6C88\u6C89\u6C85\u6C9B\u6C6A\u6C7A\u6C90\u6C70\u6C8C\u6C68\u6C96\u6C92\u6C7D\u6C83\u6C72\u6C7E\u6C74\u6C86\u6C76\u6C8D\u6C94\u6C98\u6C82\u7076\u707C\u707D\u7078\u7262\u7261\u7260\u72C4\u72C2\u7396\u752C\u752B\u7537\u7538\u7682\u76EF\u77E3\u79C1\u79C0\u79BF\u7A76\u7CFB\u7F55\u8096\u8093\u809D\u8098\u809B\u809A\u80B2\u826F\u8292"],
["a8a1", "\u828B\u828D\u898B\u89D2\u8A00\u8C37\u8C46\u8C55\u8C9D\u8D64\u8D70\u8DB3\u8EAB\u8ECA\u8F9B\u8FB0\u8FC2\u8FC6\u8FC5\u8FC4\u5DE1\u9091\u90A2\u90AA\u90A6\u90A3\u9149\u91C6\u91CC\u9632\u962E\u9631\u962A\u962C\u4E26\u4E56\u4E73\u4E8B\u4E9B\u4E9E\u4EAB\u4EAC\u4F6F\u4F9D\u4F8D\u4F73\u4F7F\u4F6C\u4F9B\u4F8B\u4F86\u4F83\u4F70\u4F75\u4F88\u4F69\u4F7B\u4F96\u4F7E\u4F8F\u4F91\u4F7A\u5154\u5152\u5155\u5169\u5177\u5176\u5178\u51BD\u51FD\u523B\u5238\u5237\u523A\u5230\u522E\u5236\u5241\u52BE\u52BB\u5352\u5354\u5353\u5351\u5366\u5377\u5378\u5379\u53D6\u53D4\u53D7\u5473\u5475"],
["a940", "\u5496\u5478\u5495\u5480\u547B\u5477\u5484\u5492\u5486\u547C\u5490\u5471\u5476\u548C\u549A\u5462\u5468\u548B\u547D\u548E\u56FA\u5783\u5777\u576A\u5769\u5761\u5766\u5764\u577C\u591C\u5949\u5947\u5948\u5944\u5954\u59BE\u59BB\u59D4\u59B9\u59AE\u59D1\u59C6\u59D0\u59CD\u59CB\u59D3\u59CA\u59AF\u59B3\u59D2\u59C5\u5B5F\u5B64\u5B63\u5B97\u5B9A\u5B98\u5B9C\u5B99\u5B9B\u5C1A\u5C48\u5C45"],
["a9a1", "\u5C46\u5CB7\u5CA1\u5CB8\u5CA9\u5CAB\u5CB1\u5CB3\u5E18\u5E1A\u5E16\u5E15\u5E1B\u5E11\u5E78\u5E9A\u5E97\u5E9C\u5E95\u5E96\u5EF6\u5F26\u5F27\u5F29\u5F80\u5F81\u5F7F\u5F7C\u5FDD\u5FE0\u5FFD\u5FF5\u5FFF\u600F\u6014\u602F\u6035\u6016\u602A\u6015\u6021\u6027\u6029\u602B\u601B\u6216\u6215\u623F\u623E\u6240\u627F\u62C9\u62CC\u62C4\u62BF\u62C2\u62B9\u62D2\u62DB\u62AB\u62D3\u62D4\u62CB\u62C8\u62A8\u62BD\u62BC\u62D0\u62D9\u62C7\u62CD\u62B5\u62DA\u62B1\u62D8\u62D6\u62D7\u62C6\u62AC\u62CE\u653E\u65A7\u65BC\u65FA\u6614\u6613\u660C\u6606\u6602\u660E\u6600\u660F\u6615\u660A"],
["aa40", "\u6607\u670D\u670B\u676D\u678B\u6795\u6771\u679C\u6773\u6777\u6787\u679D\u6797\u676F\u6770\u677F\u6789\u677E\u6790\u6775\u679A\u6793\u677C\u676A\u6772\u6B23\u6B66\u6B67\u6B7F\u6C13\u6C1B\u6CE3\u6CE8\u6CF3\u6CB1\u6CCC\u6CE5\u6CB3\u6CBD\u6CBE\u6CBC\u6CE2\u6CAB\u6CD5\u6CD3\u6CB8\u6CC4\u6CB9\u6CC1\u6CAE\u6CD7\u6CC5\u6CF1\u6CBF\u6CBB\u6CE1\u6CDB\u6CCA\u6CAC\u6CEF\u6CDC\u6CD6\u6CE0"],
["aaa1", "\u7095\u708E\u7092\u708A\u7099\u722C\u722D\u7238\u7248\u7267\u7269\u72C0\u72CE\u72D9\u72D7\u72D0\u73A9\u73A8\u739F\u73AB\u73A5\u753D\u759D\u7599\u759A\u7684\u76C2\u76F2\u76F4\u77E5\u77FD\u793E\u7940\u7941\u79C9\u79C8\u7A7A\u7A79\u7AFA\u7CFE\u7F54\u7F8C\u7F8B\u8005\u80BA\u80A5\u80A2\u80B1\u80A1\u80AB\u80A9\u80B4\u80AA\u80AF\u81E5\u81FE\u820D\u82B3\u829D\u8299\u82AD\u82BD\u829F\u82B9\u82B1\u82AC\u82A5\u82AF\u82B8\u82A3\u82B0\u82BE\u82B7\u864E\u8671\u521D\u8868\u8ECB\u8FCE\u8FD4\u8FD1\u90B5\u90B8\u90B1\u90B6\u91C7\u91D1\u9577\u9580\u961C\u9640\u963F\u963B\u9644"],
["ab40", "\u9642\u96B9\u96E8\u9752\u975E\u4E9F\u4EAD\u4EAE\u4FE1\u4FB5\u4FAF\u4FBF\u4FE0\u4FD1\u4FCF\u4FDD\u4FC3\u4FB6\u4FD8\u4FDF\u4FCA\u4FD7\u4FAE\u4FD0\u4FC4\u4FC2\u4FDA\u4FCE\u4FDE\u4FB7\u5157\u5192\u5191\u51A0\u524E\u5243\u524A\u524D\u524C\u524B\u5247\u52C7\u52C9\u52C3\u52C1\u530D\u5357\u537B\u539A\u53DB\u54AC\u54C0\u54A8\u54CE\u54C9\u54B8\u54A6\u54B3\u54C7\u54C2\u54BD\u54AA\u54C1"],
["aba1", "\u54C4\u54C8\u54AF\u54AB\u54B1\u54BB\u54A9\u54A7\u54BF\u56FF\u5782\u578B\u57A0\u57A3\u57A2\u57CE\u57AE\u5793\u5955\u5951\u594F\u594E\u5950\u59DC\u59D8\u59FF\u59E3\u59E8\u5A03\u59E5\u59EA\u59DA\u59E6\u5A01\u59FB\u5B69\u5BA3\u5BA6\u5BA4\u5BA2\u5BA5\u5C01\u5C4E\u5C4F\u5C4D\u5C4B\u5CD9\u5CD2\u5DF7\u5E1D\u5E25\u5E1F\u5E7D\u5EA0\u5EA6\u5EFA\u5F08\u5F2D\u5F65\u5F88\u5F85\u5F8A\u5F8B\u5F87\u5F8C\u5F89\u6012\u601D\u6020\u6025\u600E\u6028\u604D\u6070\u6068\u6062\u6046\u6043\u606C\u606B\u606A\u6064\u6241\u62DC\u6316\u6309\u62FC\u62ED\u6301\u62EE\u62FD\u6307\u62F1\u62F7"],
["ac40", "\u62EF\u62EC\u62FE\u62F4\u6311\u6302\u653F\u6545\u65AB\u65BD\u65E2\u6625\u662D\u6620\u6627\u662F\u661F\u6628\u6631\u6624\u66F7\u67FF\u67D3\u67F1\u67D4\u67D0\u67EC\u67B6\u67AF\u67F5\u67E9\u67EF\u67C4\u67D1\u67B4\u67DA\u67E5\u67B8\u67CF\u67DE\u67F3\u67B0\u67D9\u67E2\u67DD\u67D2\u6B6A\u6B83\u6B86\u6BB5\u6BD2\u6BD7\u6C1F\u6CC9\u6D0B\u6D32\u6D2A\u6D41\u6D25\u6D0C\u6D31\u6D1E\u6D17"],
["aca1", "\u6D3B\u6D3D\u6D3E\u6D36\u6D1B\u6CF5\u6D39\u6D27\u6D38\u6D29\u6D2E\u6D35\u6D0E\u6D2B\u70AB\u70BA\u70B3\u70AC\u70AF\u70AD\u70B8\u70AE\u70A4\u7230\u7272\u726F\u7274\u72E9\u72E0\u72E1\u73B7\u73CA\u73BB\u73B2\u73CD\u73C0\u73B3\u751A\u752D\u754F\u754C\u754E\u754B\u75AB\u75A4\u75A5\u75A2\u75A3\u7678\u7686\u7687\u7688\u76C8\u76C6\u76C3\u76C5\u7701\u76F9\u76F8\u7709\u770B\u76FE\u76FC\u7707\u77DC\u7802\u7814\u780C\u780D\u7946\u7949\u7948\u7947\u79B9\u79BA\u79D1\u79D2\u79CB\u7A7F\u7A81\u7AFF\u7AFD\u7C7D\u7D02\u7D05\u7D00\u7D09\u7D07\u7D04\u7D06\u7F38\u7F8E\u7FBF\u8004"],
["ad40", "\u8010\u800D\u8011\u8036\u80D6\u80E5\u80DA\u80C3\u80C4\u80CC\u80E1\u80DB\u80CE\u80DE\u80E4\u80DD\u81F4\u8222\u82E7\u8303\u8305\u82E3\u82DB\u82E6\u8304\u82E5\u8302\u8309\u82D2\u82D7\u82F1\u8301\u82DC\u82D4\u82D1\u82DE\u82D3\u82DF\u82EF\u8306\u8650\u8679\u867B\u867A\u884D\u886B\u8981\u89D4\u8A08\u8A02\u8A03\u8C9E\u8CA0\u8D74\u8D73\u8DB4\u8ECD\u8ECC\u8FF0\u8FE6\u8FE2\u8FEA\u8FE5"],
["ada1", "\u8FED\u8FEB\u8FE4\u8FE8\u90CA\u90CE\u90C1\u90C3\u914B\u914A\u91CD\u9582\u9650\u964B\u964C\u964D\u9762\u9769\u97CB\u97ED\u97F3\u9801\u98A8\u98DB\u98DF\u9996\u9999\u4E58\u4EB3\u500C\u500D\u5023\u4FEF\u5026\u5025\u4FF8\u5029\u5016\u5006\u503C\u501F\u501A\u5012\u5011\u4FFA\u5000\u5014\u5028\u4FF1\u5021\u500B\u5019\u5018\u4FF3\u4FEE\u502D\u502A\u4FFE\u502B\u5009\u517C\u51A4\u51A5\u51A2\u51CD\u51CC\u51C6\u51CB\u5256\u525C\u5254\u525B\u525D\u532A\u537F\u539F\u539D\u53DF\u54E8\u5510\u5501\u5537\u54FC\u54E5\u54F2\u5506\u54FA\u5514\u54E9\u54ED\u54E1\u5509\u54EE\u54EA"],
["ae40", "\u54E6\u5527\u5507\u54FD\u550F\u5703\u5704\u57C2\u57D4\u57CB\u57C3\u5809\u590F\u5957\u5958\u595A\u5A11\u5A18\u5A1C\u5A1F\u5A1B\u5A13\u59EC\u5A20\u5A23\u5A29\u5A25\u5A0C\u5A09\u5B6B\u5C58\u5BB0\u5BB3\u5BB6\u5BB4\u5BAE\u5BB5\u5BB9\u5BB8\u5C04\u5C51\u5C55\u5C50\u5CED\u5CFD\u5CFB\u5CEA\u5CE8\u5CF0\u5CF6\u5D01\u5CF4\u5DEE\u5E2D\u5E2B\u5EAB\u5EAD\u5EA7\u5F31\u5F92\u5F91\u5F90\u6059"],
["aea1", "\u6063\u6065\u6050\u6055\u606D\u6069\u606F\u6084\u609F\u609A\u608D\u6094\u608C\u6085\u6096\u6247\u62F3\u6308\u62FF\u634E\u633E\u632F\u6355\u6342\u6346\u634F\u6349\u633A\u6350\u633D\u632A\u632B\u6328\u634D\u634C\u6548\u6549\u6599\u65C1\u65C5\u6642\u6649\u664F\u6643\u6652\u664C\u6645\u6641\u66F8\u6714\u6715\u6717\u6821\u6838\u6848\u6846\u6853\u6839\u6842\u6854\u6829\u68B3\u6817\u684C\u6851\u683D\u67F4\u6850\u6840\u683C\u6843\u682A\u6845\u6813\u6818\u6841\u6B8A\u6B89\u6BB7\u6C23\u6C27\u6C28\u6C26\u6C24\u6CF0\u6D6A\u6D95\u6D88\u6D87\u6D66\u6D78\u6D77\u6D59\u6D93"],
["af40", "\u6D6C\u6D89\u6D6E\u6D5A\u6D74\u6D69\u6D8C\u6D8A\u6D79\u6D85\u6D65\u6D94\u70CA\u70D8\u70E4\u70D9\u70C8\u70CF\u7239\u7279\u72FC\u72F9\u72FD\u72F8\u72F7\u7386\u73ED\u7409\u73EE\u73E0\u73EA\u73DE\u7554\u755D\u755C\u755A\u7559\u75BE\u75C5\u75C7\u75B2\u75B3\u75BD\u75BC\u75B9\u75C2\u75B8\u768B\u76B0\u76CA\u76CD\u76CE\u7729\u771F\u7720\u7728\u77E9\u7830\u7827\u7838\u781D\u7834\u7837"],
["afa1", "\u7825\u782D\u7820\u781F\u7832\u7955\u7950\u7960\u795F\u7956\u795E\u795D\u7957\u795A\u79E4\u79E3\u79E7\u79DF\u79E6\u79E9\u79D8\u7A84\u7A88\u7AD9\u7B06\u7B11\u7C89\u7D21\u7D17\u7D0B\u7D0A\u7D20\u7D22\u7D14\u7D10\u7D15\u7D1A\u7D1C\u7D0D\u7D19\u7D1B\u7F3A\u7F5F\u7F94\u7FC5\u7FC1\u8006\u8018\u8015\u8019\u8017\u803D\u803F\u80F1\u8102\u80F0\u8105\u80ED\u80F4\u8106\u80F8\u80F3\u8108\u80FD\u810A\u80FC\u80EF\u81ED\u81EC\u8200\u8210\u822A\u822B\u8228\u822C\u82BB\u832B\u8352\u8354\u834A\u8338\u8350\u8349\u8335\u8334\u834F\u8332\u8339\u8336\u8317\u8340\u8331\u8328\u8343"],
["b040", "\u8654\u868A\u86AA\u8693\u86A4\u86A9\u868C\u86A3\u869C\u8870\u8877\u8881\u8882\u887D\u8879\u8A18\u8A10\u8A0E\u8A0C\u8A15\u8A0A\u8A17\u8A13\u8A16\u8A0F\u8A11\u8C48\u8C7A\u8C79\u8CA1\u8CA2\u8D77\u8EAC\u8ED2\u8ED4\u8ECF\u8FB1\u9001\u9006\u8FF7\u9000\u8FFA\u8FF4\u9003\u8FFD\u9005\u8FF8\u9095\u90E1\u90DD\u90E2\u9152\u914D\u914C\u91D8\u91DD\u91D7\u91DC\u91D9\u9583\u9662\u9663\u9661"],
["b0a1", "\u965B\u965D\u9664\u9658\u965E\u96BB\u98E2\u99AC\u9AA8\u9AD8\u9B25\u9B32\u9B3C\u4E7E\u507A\u507D\u505C\u5047\u5043\u504C\u505A\u5049\u5065\u5076\u504E\u5055\u5075\u5074\u5077\u504F\u500F\u506F\u506D\u515C\u5195\u51F0\u526A\u526F\u52D2\u52D9\u52D8\u52D5\u5310\u530F\u5319\u533F\u5340\u533E\u53C3\u66FC\u5546\u556A\u5566\u5544\u555E\u5561\u5543\u554A\u5531\u5556\u554F\u5555\u552F\u5564\u5538\u552E\u555C\u552C\u5563\u5533\u5541\u5557\u5708\u570B\u5709\u57DF\u5805\u580A\u5806\u57E0\u57E4\u57FA\u5802\u5835\u57F7\u57F9\u5920\u5962\u5A36\u5A41\u5A49\u5A66\u5A6A\u5A40"],
["b140", "\u5A3C\u5A62\u5A5A\u5A46\u5A4A\u5B70\u5BC7\u5BC5\u5BC4\u5BC2\u5BBF\u5BC6\u5C09\u5C08\u5C07\u5C60\u5C5C\u5C5D\u5D07\u5D06\u5D0E\u5D1B\u5D16\u5D22\u5D11\u5D29\u5D14\u5D19\u5D24\u5D27\u5D17\u5DE2\u5E38\u5E36\u5E33\u5E37\u5EB7\u5EB8\u5EB6\u5EB5\u5EBE\u5F35\u5F37\u5F57\u5F6C\u5F69\u5F6B\u5F97\u5F99\u5F9E\u5F98\u5FA1\u5FA0\u5F9C\u607F\u60A3\u6089\u60A0\u60A8\u60CB\u60B4\u60E6\u60BD"],
["b1a1", "\u60C5\u60BB\u60B5\u60DC\u60BC\u60D8\u60D5\u60C6\u60DF\u60B8\u60DA\u60C7\u621A\u621B\u6248\u63A0\u63A7\u6372\u6396\u63A2\u63A5\u6377\u6367\u6398\u63AA\u6371\u63A9\u6389\u6383\u639B\u636B\u63A8\u6384\u6388\u6399\u63A1\u63AC\u6392\u638F\u6380\u637B\u6369\u6368\u637A\u655D\u6556\u6551\u6559\u6557\u555F\u654F\u6558\u6555\u6554\u659C\u659B\u65AC\u65CF\u65CB\u65CC\u65CE\u665D\u665A\u6664\u6668\u6666\u665E\u66F9\u52D7\u671B\u6881\u68AF\u68A2\u6893\u68B5\u687F\u6876\u68B1\u68A7\u6897\u68B0\u6883\u68C4\u68AD\u6886\u6885\u6894\u689D\u68A8\u689F\u68A1\u6882\u6B32\u6BBA"],
["b240", "\u6BEB\u6BEC\u6C2B\u6D8E\u6DBC\u6DF3\u6DD9\u6DB2\u6DE1\u6DCC\u6DE4\u6DFB\u6DFA\u6E05\u6DC7\u6DCB\u6DAF\u6DD1\u6DAE\u6DDE\u6DF9\u6DB8\u6DF7\u6DF5\u6DC5\u6DD2\u6E1A\u6DB5\u6DDA\u6DEB\u6DD8\u6DEA\u6DF1\u6DEE\u6DE8\u6DC6\u6DC4\u6DAA\u6DEC\u6DBF\u6DE6\u70F9\u7109\u710A\u70FD\u70EF\u723D\u727D\u7281\u731C\u731B\u7316\u7313\u7319\u7387\u7405\u740A\u7403\u7406\u73FE\u740D\u74E0\u74F6"],
["b2a1", "\u74F7\u751C\u7522\u7565\u7566\u7562\u7570\u758F\u75D4\u75D5\u75B5\u75CA\u75CD\u768E\u76D4\u76D2\u76DB\u7737\u773E\u773C\u7736\u7738\u773A\u786B\u7843\u784E\u7965\u7968\u796D\u79FB\u7A92\u7A95\u7B20\u7B28\u7B1B\u7B2C\u7B26\u7B19\u7B1E\u7B2E\u7C92\u7C97\u7C95\u7D46\u7D43\u7D71\u7D2E\u7D39\u7D3C\u7D40\u7D30\u7D33\u7D44\u7D2F\u7D42\u7D32\u7D31\u7F3D\u7F9E\u7F9A\u7FCC\u7FCE\u7FD2\u801C\u804A\u8046\u812F\u8116\u8123\u812B\u8129\u8130\u8124\u8202\u8235\u8237\u8236\u8239\u838E\u839E\u8398\u8378\u83A2\u8396\u83BD\u83AB\u8392\u838A\u8393\u8389\u83A0\u8377\u837B\u837C"],
["b340", "\u8386\u83A7\u8655\u5F6A\u86C7\u86C0\u86B6\u86C4\u86B5\u86C6\u86CB\u86B1\u86AF\u86C9\u8853\u889E\u8888\u88AB\u8892\u8896\u888D\u888B\u8993\u898F\u8A2A\u8A1D\u8A23\u8A25\u8A31\u8A2D\u8A1F\u8A1B\u8A22\u8C49\u8C5A\u8CA9\u8CAC\u8CAB\u8CA8\u8CAA\u8CA7\u8D67\u8D66\u8DBE\u8DBA\u8EDB\u8EDF\u9019\u900D\u901A\u9017\u9023\u901F\u901D\u9010\u9015\u901E\u9020\u900F\u9022\u9016\u901B\u9014"],
["b3a1", "\u90E8\u90ED\u90FD\u9157\u91CE\u91F5\u91E6\u91E3\u91E7\u91ED\u91E9\u9589\u966A\u9675\u9673\u9678\u9670\u9674\u9676\u9677\u966C\u96C0\u96EA\u96E9\u7AE0\u7ADF\u9802\u9803\u9B5A\u9CE5\u9E75\u9E7F\u9EA5\u9EBB\u50A2\u508D\u5085\u5099\u5091\u5080\u5096\u5098\u509A\u6700\u51F1\u5272\u5274\u5275\u5269\u52DE\u52DD\u52DB\u535A\u53A5\u557B\u5580\u55A7\u557C\u558A\u559D\u5598\u5582\u559C\u55AA\u5594\u5587\u558B\u5583\u55B3\u55AE\u559F\u553E\u55B2\u559A\u55BB\u55AC\u55B1\u557E\u5589\u55AB\u5599\u570D\u582F\u582A\u5834\u5824\u5830\u5831\u5821\u581D\u5820\u58F9\u58FA\u5960"],
["b440", "\u5A77\u5A9A\u5A7F\u5A92\u5A9B\u5AA7\u5B73\u5B71\u5BD2\u5BCC\u5BD3\u5BD0\u5C0A\u5C0B\u5C31\u5D4C\u5D50\u5D34\u5D47\u5DFD\u5E45\u5E3D\u5E40\u5E43\u5E7E\u5ECA\u5EC1\u5EC2\u5EC4\u5F3C\u5F6D\u5FA9\u5FAA\u5FA8\u60D1\u60E1\u60B2\u60B6\u60E0\u611C\u6123\u60FA\u6115\u60F0\u60FB\u60F4\u6168\u60F1\u610E\u60F6\u6109\u6100\u6112\u621F\u6249\u63A3\u638C\u63CF\u63C0\u63E9\u63C9\u63C6\u63CD"],
["b4a1", "\u63D2\u63E3\u63D0\u63E1\u63D6\u63ED\u63EE\u6376\u63F4\u63EA\u63DB\u6452\u63DA\u63F9\u655E\u6566\u6562\u6563\u6591\u6590\u65AF\u666E\u6670\u6674\u6676\u666F\u6691\u667A\u667E\u6677\u66FE\u66FF\u671F\u671D\u68FA\u68D5\u68E0\u68D8\u68D7\u6905\u68DF\u68F5\u68EE\u68E7\u68F9\u68D2\u68F2\u68E3\u68CB\u68CD\u690D\u6912\u690E\u68C9\u68DA\u696E\u68FB\u6B3E\u6B3A\u6B3D\u6B98\u6B96\u6BBC\u6BEF\u6C2E\u6C2F\u6C2C\u6E2F\u6E38\u6E54\u6E21\u6E32\u6E67\u6E4A\u6E20\u6E25\u6E23\u6E1B\u6E5B\u6E58\u6E24\u6E56\u6E6E\u6E2D\u6E26\u6E6F\u6E34\u6E4D\u6E3A\u6E2C\u6E43\u6E1D\u6E3E\u6ECB"],
["b540", "\u6E89\u6E19\u6E4E\u6E63\u6E44\u6E72\u6E69\u6E5F\u7119\u711A\u7126\u7130\u7121\u7136\u716E\u711C\u724C\u7284\u7280\u7336\u7325\u7334\u7329\u743A\u742A\u7433\u7422\u7425\u7435\u7436\u7434\u742F\u741B\u7426\u7428\u7525\u7526\u756B\u756A\u75E2\u75DB\u75E3\u75D9\u75D8\u75DE\u75E0\u767B\u767C\u7696\u7693\u76B4\u76DC\u774F\u77ED\u785D\u786C\u786F\u7A0D\u7A08\u7A0B\u7A05\u7A00\u7A98"],
["b5a1", "\u7A97\u7A96\u7AE5\u7AE3\u7B49\u7B56\u7B46\u7B50\u7B52\u7B54\u7B4D\u7B4B\u7B4F\u7B51\u7C9F\u7CA5\u7D5E\u7D50\u7D68\u7D55\u7D2B\u7D6E\u7D72\u7D61\u7D66\u7D62\u7D70\u7D73\u5584\u7FD4\u7FD5\u800B\u8052\u8085\u8155\u8154\u814B\u8151\u814E\u8139\u8146\u813E\u814C\u8153\u8174\u8212\u821C\u83E9\u8403\u83F8\u840D\u83E0\u83C5\u840B\u83C1\u83EF\u83F1\u83F4\u8457\u840A\u83F0\u840C\u83CC\u83FD\u83F2\u83CA\u8438\u840E\u8404\u83DC\u8407\u83D4\u83DF\u865B\u86DF\u86D9\u86ED\u86D4\u86DB\u86E4\u86D0\u86DE\u8857\u88C1\u88C2\u88B1\u8983\u8996\u8A3B\u8A60\u8A55\u8A5E\u8A3C\u8A41"],
["b640", "\u8A54\u8A5B\u8A50\u8A46\u8A34\u8A3A\u8A36\u8A56\u8C61\u8C82\u8CAF\u8CBC\u8CB3\u8CBD\u8CC1\u8CBB\u8CC0\u8CB4\u8CB7\u8CB6\u8CBF\u8CB8\u8D8A\u8D85\u8D81\u8DCE\u8DDD\u8DCB\u8DDA\u8DD1\u8DCC\u8DDB\u8DC6\u8EFB\u8EF8\u8EFC\u8F9C\u902E\u9035\u9031\u9038\u9032\u9036\u9102\u90F5\u9109\u90FE\u9163\u9165\u91CF\u9214\u9215\u9223\u9209\u921E\u920D\u9210\u9207\u9211\u9594\u958F\u958B\u9591"],
["b6a1", "\u9593\u9592\u958E\u968A\u968E\u968B\u967D\u9685\u9686\u968D\u9672\u9684\u96C1\u96C5\u96C4\u96C6\u96C7\u96EF\u96F2\u97CC\u9805\u9806\u9808\u98E7\u98EA\u98EF\u98E9\u98F2\u98ED\u99AE\u99AD\u9EC3\u9ECD\u9ED1\u4E82\u50AD\u50B5\u50B2\u50B3\u50C5\u50BE\u50AC\u50B7\u50BB\u50AF\u50C7\u527F\u5277\u527D\u52DF\u52E6\u52E4\u52E2\u52E3\u532F\u55DF\u55E8\u55D3\u55E6\u55CE\u55DC\u55C7\u55D1\u55E3\u55E4\u55EF\u55DA\u55E1\u55C5\u55C6\u55E5\u55C9\u5712\u5713\u585E\u5851\u5858\u5857\u585A\u5854\u586B\u584C\u586D\u584A\u5862\u5852\u584B\u5967\u5AC1\u5AC9\u5ACC\u5ABE\u5ABD\u5ABC"],
["b740", "\u5AB3\u5AC2\u5AB2\u5D69\u5D6F\u5E4C\u5E79\u5EC9\u5EC8\u5F12\u5F59\u5FAC\u5FAE\u611A\u610F\u6148\u611F\u60F3\u611B\u60F9\u6101\u6108\u614E\u614C\u6144\u614D\u613E\u6134\u6127\u610D\u6106\u6137\u6221\u6222\u6413\u643E\u641E\u642A\u642D\u643D\u642C\u640F\u641C\u6414\u640D\u6436\u6416\u6417\u6406\u656C\u659F\u65B0\u6697\u6689\u6687\u6688\u6696\u6684\u6698\u668D\u6703\u6994\u696D"],
["b7a1", "\u695A\u6977\u6960\u6954\u6975\u6930\u6982\u694A\u6968\u696B\u695E\u6953\u6979\u6986\u695D\u6963\u695B\u6B47\u6B72\u6BC0\u6BBF\u6BD3\u6BFD\u6EA2\u6EAF\u6ED3\u6EB6\u6EC2\u6E90\u6E9D\u6EC7\u6EC5\u6EA5\u6E98\u6EBC\u6EBA\u6EAB\u6ED1\u6E96\u6E9C\u6EC4\u6ED4\u6EAA\u6EA7\u6EB4\u714E\u7159\u7169\u7164\u7149\u7167\u715C\u716C\u7166\u714C\u7165\u715E\u7146\u7168\u7156\u723A\u7252\u7337\u7345\u733F\u733E\u746F\u745A\u7455\u745F\u745E\u7441\u743F\u7459\u745B\u745C\u7576\u7578\u7600\u75F0\u7601\u75F2\u75F1\u75FA\u75FF\u75F4\u75F3\u76DE\u76DF\u775B\u776B\u7766\u775E\u7763"],
["b840", "\u7779\u776A\u776C\u775C\u7765\u7768\u7762\u77EE\u788E\u78B0\u7897\u7898\u788C\u7889\u787C\u7891\u7893\u787F\u797A\u797F\u7981\u842C\u79BD\u7A1C\u7A1A\u7A20\u7A14\u7A1F\u7A1E\u7A9F\u7AA0\u7B77\u7BC0\u7B60\u7B6E\u7B67\u7CB1\u7CB3\u7CB5\u7D93\u7D79\u7D91\u7D81\u7D8F\u7D5B\u7F6E\u7F69\u7F6A\u7F72\u7FA9\u7FA8\u7FA4\u8056\u8058\u8086\u8084\u8171\u8170\u8178\u8165\u816E\u8173\u816B"],
["b8a1", "\u8179\u817A\u8166\u8205\u8247\u8482\u8477\u843D\u8431\u8475\u8466\u846B\u8449\u846C\u845B\u843C\u8435\u8461\u8463\u8469\u846D\u8446\u865E\u865C\u865F\u86F9\u8713\u8708\u8707\u8700\u86FE\u86FB\u8702\u8703\u8706\u870A\u8859\u88DF\u88D4\u88D9\u88DC\u88D8\u88DD\u88E1\u88CA\u88D5\u88D2\u899C\u89E3\u8A6B\u8A72\u8A73\u8A66\u8A69\u8A70\u8A87\u8A7C\u8A63\u8AA0\u8A71\u8A85\u8A6D\u8A62\u8A6E\u8A6C\u8A79\u8A7B\u8A3E\u8A68\u8C62\u8C8A\u8C89\u8CCA\u8CC7\u8CC8\u8CC4\u8CB2\u8CC3\u8CC2\u8CC5\u8DE1\u8DDF\u8DE8\u8DEF\u8DF3\u8DFA\u8DEA\u8DE4\u8DE6\u8EB2\u8F03\u8F09\u8EFE\u8F0A"],
["b940", "\u8F9F\u8FB2\u904B\u904A\u9053\u9042\u9054\u903C\u9055\u9050\u9047\u904F\u904E\u904D\u9051\u903E\u9041\u9112\u9117\u916C\u916A\u9169\u91C9\u9237\u9257\u9238\u923D\u9240\u923E\u925B\u924B\u9264\u9251\u9234\u9249\u924D\u9245\u9239\u923F\u925A\u9598\u9698\u9694\u9695\u96CD\u96CB\u96C9\u96CA\u96F7\u96FB\u96F9\u96F6\u9756\u9774\u9776\u9810\u9811\u9813\u980A\u9812\u980C\u98FC\u98F4"],
["b9a1", "\u98FD\u98FE\u99B3\u99B1\u99B4\u9AE1\u9CE9\u9E82\u9F0E\u9F13\u9F20\u50E7\u50EE\u50E5\u50D6\u50ED\u50DA\u50D5\u50CF\u50D1\u50F1\u50CE\u50E9\u5162\u51F3\u5283\u5282\u5331\u53AD\u55FE\u5600\u561B\u5617\u55FD\u5614\u5606\u5609\u560D\u560E\u55F7\u5616\u561F\u5608\u5610\u55F6\u5718\u5716\u5875\u587E\u5883\u5893\u588A\u5879\u5885\u587D\u58FD\u5925\u5922\u5924\u596A\u5969\u5AE1\u5AE6\u5AE9\u5AD7\u5AD6\u5AD8\u5AE3\u5B75\u5BDE\u5BE7\u5BE1\u5BE5\u5BE6\u5BE8\u5BE2\u5BE4\u5BDF\u5C0D\u5C62\u5D84\u5D87\u5E5B\u5E63\u5E55\u5E57\u5E54\u5ED3\u5ED6\u5F0A\u5F46\u5F70\u5FB9\u6147"],
["ba40", "\u613F\u614B\u6177\u6162\u6163\u615F\u615A\u6158\u6175\u622A\u6487\u6458\u6454\u64A4\u6478\u645F\u647A\u6451\u6467\u6434\u646D\u647B\u6572\u65A1\u65D7\u65D6\u66A2\u66A8\u669D\u699C\u69A8\u6995\u69C1\u69AE\u69D3\u69CB\u699B\u69B7\u69BB\u69AB\u69B4\u69D0\u69CD\u69AD\u69CC\u69A6\u69C3\u69A3\u6B49\u6B4C\u6C33\u6F33\u6F14\u6EFE\u6F13\u6EF4\u6F29\u6F3E\u6F20\u6F2C\u6F0F\u6F02\u6F22"],
["baa1", "\u6EFF\u6EEF\u6F06\u6F31\u6F38\u6F32\u6F23\u6F15\u6F2B\u6F2F\u6F88\u6F2A\u6EEC\u6F01\u6EF2\u6ECC\u6EF7\u7194\u7199\u717D\u718A\u7184\u7192\u723E\u7292\u7296\u7344\u7350\u7464\u7463\u746A\u7470\u746D\u7504\u7591\u7627\u760D\u760B\u7609\u7613\u76E1\u76E3\u7784\u777D\u777F\u7761\u78C1\u789F\u78A7\u78B3\u78A9\u78A3\u798E\u798F\u798D\u7A2E\u7A31\u7AAA\u7AA9\u7AED\u7AEF\u7BA1\u7B95\u7B8B\u7B75\u7B97\u7B9D\u7B94\u7B8F\u7BB8\u7B87\u7B84\u7CB9\u7CBD\u7CBE\u7DBB\u7DB0\u7D9C\u7DBD\u7DBE\u7DA0\u7DCA\u7DB4\u7DB2\u7DB1\u7DBA\u7DA2\u7DBF\u7DB5\u7DB8\u7DAD\u7DD2\u7DC7\u7DAC"],
["bb40", "\u7F70\u7FE0\u7FE1\u7FDF\u805E\u805A\u8087\u8150\u8180\u818F\u8188\u818A\u817F\u8182\u81E7\u81FA\u8207\u8214\u821E\u824B\u84C9\u84BF\u84C6\u84C4\u8499\u849E\u84B2\u849C\u84CB\u84B8\u84C0\u84D3\u8490\u84BC\u84D1\u84CA\u873F\u871C\u873B\u8722\u8725\u8734\u8718\u8755\u8737\u8729\u88F3\u8902\u88F4\u88F9\u88F8\u88FD\u88E8\u891A\u88EF\u8AA6\u8A8C\u8A9E\u8AA3\u8A8D\u8AA1\u8A93\u8AA4"],
["bba1", "\u8AAA\u8AA5\u8AA8\u8A98\u8A91\u8A9A\u8AA7\u8C6A\u8C8D\u8C8C\u8CD3\u8CD1\u8CD2\u8D6B\u8D99\u8D95\u8DFC\u8F14\u8F12\u8F15\u8F13\u8FA3\u9060\u9058\u905C\u9063\u9059\u905E\u9062\u905D\u905B\u9119\u9118\u911E\u9175\u9178\u9177\u9174\u9278\u9280\u9285\u9298\u9296\u927B\u9293\u929C\u92A8\u927C\u9291\u95A1\u95A8\u95A9\u95A3\u95A5\u95A4\u9699\u969C\u969B\u96CC\u96D2\u9700\u977C\u9785\u97F6\u9817\u9818\u98AF\u98B1\u9903\u9905\u990C\u9909\u99C1\u9AAF\u9AB0\u9AE6\u9B41\u9B42\u9CF4\u9CF6\u9CF3\u9EBC\u9F3B\u9F4A\u5104\u5100\u50FB\u50F5\u50F9\u5102\u5108\u5109\u5105\u51DC"],
["bc40", "\u5287\u5288\u5289\u528D\u528A\u52F0\u53B2\u562E\u563B\u5639\u5632\u563F\u5634\u5629\u5653\u564E\u5657\u5674\u5636\u562F\u5630\u5880\u589F\u589E\u58B3\u589C\u58AE\u58A9\u58A6\u596D\u5B09\u5AFB\u5B0B\u5AF5\u5B0C\u5B08\u5BEE\u5BEC\u5BE9\u5BEB\u5C64\u5C65\u5D9D\u5D94\u5E62\u5E5F\u5E61\u5EE2\u5EDA\u5EDF\u5EDD\u5EE3\u5EE0\u5F48\u5F71\u5FB7\u5FB5\u6176\u6167\u616E\u615D\u6155\u6182"],
["bca1", "\u617C\u6170\u616B\u617E\u61A7\u6190\u61AB\u618E\u61AC\u619A\u61A4\u6194\u61AE\u622E\u6469\u646F\u6479\u649E\u64B2\u6488\u6490\u64B0\u64A5\u6493\u6495\u64A9\u6492\u64AE\u64AD\u64AB\u649A\u64AC\u6499\u64A2\u64B3\u6575\u6577\u6578\u66AE\u66AB\u66B4\u66B1\u6A23\u6A1F\u69E8\u6A01\u6A1E\u6A19\u69FD\u6A21\u6A13\u6A0A\u69F3\u6A02\u6A05\u69ED\u6A11\u6B50\u6B4E\u6BA4\u6BC5\u6BC6\u6F3F\u6F7C\u6F84\u6F51\u6F66\u6F54\u6F86\u6F6D\u6F5B\u6F78\u6F6E\u6F8E\u6F7A\u6F70\u6F64\u6F97\u6F58\u6ED5\u6F6F\u6F60\u6F5F\u719F\u71AC\u71B1\u71A8\u7256\u729B\u734E\u7357\u7469\u748B\u7483"],
["bd40", "\u747E\u7480\u757F\u7620\u7629\u761F\u7624\u7626\u7621\u7622\u769A\u76BA\u76E4\u778E\u7787\u778C\u7791\u778B\u78CB\u78C5\u78BA\u78CA\u78BE\u78D5\u78BC\u78D0\u7A3F\u7A3C\u7A40\u7A3D\u7A37\u7A3B\u7AAF\u7AAE\u7BAD\u7BB1\u7BC4\u7BB4\u7BC6\u7BC7\u7BC1\u7BA0\u7BCC\u7CCA\u7DE0\u7DF4\u7DEF\u7DFB\u7DD8\u7DEC\u7DDD\u7DE8\u7DE3\u7DDA\u7DDE\u7DE9\u7D9E\u7DD9\u7DF2\u7DF9\u7F75\u7F77\u7FAF"],
["bda1", "\u7FE9\u8026\u819B\u819C\u819D\u81A0\u819A\u8198\u8517\u853D\u851A\u84EE\u852C\u852D\u8513\u8511\u8523\u8521\u8514\u84EC\u8525\u84FF\u8506\u8782\u8774\u8776\u8760\u8766\u8778\u8768\u8759\u8757\u874C\u8753\u885B\u885D\u8910\u8907\u8912\u8913\u8915\u890A\u8ABC\u8AD2\u8AC7\u8AC4\u8A95\u8ACB\u8AF8\u8AB2\u8AC9\u8AC2\u8ABF\u8AB0\u8AD6\u8ACD\u8AB6\u8AB9\u8ADB\u8C4C\u8C4E\u8C6C\u8CE0\u8CDE\u8CE6\u8CE4\u8CEC\u8CED\u8CE2\u8CE3\u8CDC\u8CEA\u8CE1\u8D6D\u8D9F\u8DA3\u8E2B\u8E10\u8E1D\u8E22\u8E0F\u8E29\u8E1F\u8E21\u8E1E\u8EBA\u8F1D\u8F1B\u8F1F\u8F29\u8F26\u8F2A\u8F1C\u8F1E"],
["be40", "\u8F25\u9069\u906E\u9068\u906D\u9077\u9130\u912D\u9127\u9131\u9187\u9189\u918B\u9183\u92C5\u92BB\u92B7\u92EA\u92AC\u92E4\u92C1\u92B3\u92BC\u92D2\u92C7\u92F0\u92B2\u95AD\u95B1\u9704\u9706\u9707\u9709\u9760\u978D\u978B\u978F\u9821\u982B\u981C\u98B3\u990A\u9913\u9912\u9918\u99DD\u99D0\u99DF\u99DB\u99D1\u99D5\u99D2\u99D9\u9AB7\u9AEE\u9AEF\u9B27\u9B45\u9B44\u9B77\u9B6F\u9D06\u9D09"],
["bea1", "\u9D03\u9EA9\u9EBE\u9ECE\u58A8\u9F52\u5112\u5118\u5114\u5110\u5115\u5180\u51AA\u51DD\u5291\u5293\u52F3\u5659\u566B\u5679\u5669\u5664\u5678\u566A\u5668\u5665\u5671\u566F\u566C\u5662\u5676\u58C1\u58BE\u58C7\u58C5\u596E\u5B1D\u5B34\u5B78\u5BF0\u5C0E\u5F4A\u61B2\u6191\u61A9\u618A\u61CD\u61B6\u61BE\u61CA\u61C8\u6230\u64C5\u64C1\u64CB\u64BB\u64BC\u64DA\u64C4\u64C7\u64C2\u64CD\u64BF\u64D2\u64D4\u64BE\u6574\u66C6\u66C9\u66B9\u66C4\u66C7\u66B8\u6A3D\u6A38\u6A3A\u6A59\u6A6B\u6A58\u6A39\u6A44\u6A62\u6A61\u6A4B\u6A47\u6A35\u6A5F\u6A48\u6B59\u6B77\u6C05\u6FC2\u6FB1\u6FA1"],
["bf40", "\u6FC3\u6FA4\u6FC1\u6FA7\u6FB3\u6FC0\u6FB9\u6FB6\u6FA6\u6FA0\u6FB4\u71BE\u71C9\u71D0\u71D2\u71C8\u71D5\u71B9\u71CE\u71D9\u71DC\u71C3\u71C4\u7368\u749C\u74A3\u7498\u749F\u749E\u74E2\u750C\u750D\u7634\u7638\u763A\u76E7\u76E5\u77A0\u779E\u779F\u77A5\u78E8\u78DA\u78EC\u78E7\u79A6\u7A4D\u7A4E\u7A46\u7A4C\u7A4B\u7ABA\u7BD9\u7C11\u7BC9\u7BE4\u7BDB\u7BE1\u7BE9\u7BE6\u7CD5\u7CD6\u7E0A"],
["bfa1", "\u7E11\u7E08\u7E1B\u7E23\u7E1E\u7E1D\u7E09\u7E10\u7F79\u7FB2\u7FF0\u7FF1\u7FEE\u8028\u81B3\u81A9\u81A8\u81FB\u8208\u8258\u8259\u854A\u8559\u8548\u8568\u8569\u8543\u8549\u856D\u856A\u855E\u8783\u879F\u879E\u87A2\u878D\u8861\u892A\u8932\u8925\u892B\u8921\u89AA\u89A6\u8AE6\u8AFA\u8AEB\u8AF1\u8B00\u8ADC\u8AE7\u8AEE\u8AFE\u8B01\u8B02\u8AF7\u8AED\u8AF3\u8AF6\u8AFC\u8C6B\u8C6D\u8C93\u8CF4\u8E44\u8E31\u8E34\u8E42\u8E39\u8E35\u8F3B\u8F2F\u8F38\u8F33\u8FA8\u8FA6\u9075\u9074\u9078\u9072\u907C\u907A\u9134\u9192\u9320\u9336\u92F8\u9333\u932F\u9322\u92FC\u932B\u9304\u931A"],
["c040", "\u9310\u9326\u9321\u9315\u932E\u9319\u95BB\u96A7\u96A8\u96AA\u96D5\u970E\u9711\u9716\u970D\u9713\u970F\u975B\u975C\u9766\u9798\u9830\u9838\u983B\u9837\u982D\u9839\u9824\u9910\u9928\u991E\u991B\u9921\u991A\u99ED\u99E2\u99F1\u9AB8\u9ABC\u9AFB\u9AED\u9B28\u9B91\u9D15\u9D23\u9D26\u9D28\u9D12\u9D1B\u9ED8\u9ED4\u9F8D\u9F9C\u512A\u511F\u5121\u5132\u52F5\u568E\u5680\u5690\u5685\u5687"],
["c0a1", "\u568F\u58D5\u58D3\u58D1\u58CE\u5B30\u5B2A\u5B24\u5B7A\u5C37\u5C68\u5DBC\u5DBA\u5DBD\u5DB8\u5E6B\u5F4C\u5FBD\u61C9\u61C2\u61C7\u61E6\u61CB\u6232\u6234\u64CE\u64CA\u64D8\u64E0\u64F0\u64E6\u64EC\u64F1\u64E2\u64ED\u6582\u6583\u66D9\u66D6\u6A80\u6A94\u6A84\u6AA2\u6A9C\u6ADB\u6AA3\u6A7E\u6A97\u6A90\u6AA0\u6B5C\u6BAE\u6BDA\u6C08\u6FD8\u6FF1\u6FDF\u6FE0\u6FDB\u6FE4\u6FEB\u6FEF\u6F80\u6FEC\u6FE1\u6FE9\u6FD5\u6FEE\u6FF0\u71E7\u71DF\u71EE\u71E6\u71E5\u71ED\u71EC\u71F4\u71E0\u7235\u7246\u7370\u7372\u74A9\u74B0\u74A6\u74A8\u7646\u7642\u764C\u76EA\u77B3\u77AA\u77B0\u77AC"],
["c140", "\u77A7\u77AD\u77EF\u78F7\u78FA\u78F4\u78EF\u7901\u79A7\u79AA\u7A57\u7ABF\u7C07\u7C0D\u7BFE\u7BF7\u7C0C\u7BE0\u7CE0\u7CDC\u7CDE\u7CE2\u7CDF\u7CD9\u7CDD\u7E2E\u7E3E\u7E46\u7E37\u7E32\u7E43\u7E2B\u7E3D\u7E31\u7E45\u7E41\u7E34\u7E39\u7E48\u7E35\u7E3F\u7E2F\u7F44\u7FF3\u7FFC\u8071\u8072\u8070\u806F\u8073\u81C6\u81C3\u81BA\u81C2\u81C0\u81BF\u81BD\u81C9\u81BE\u81E8\u8209\u8271\u85AA"],
["c1a1", "\u8584\u857E\u859C\u8591\u8594\u85AF\u859B\u8587\u85A8\u858A\u8667\u87C0\u87D1\u87B3\u87D2\u87C6\u87AB\u87BB\u87BA\u87C8\u87CB\u893B\u8936\u8944\u8938\u893D\u89AC\u8B0E\u8B17\u8B19\u8B1B\u8B0A\u8B20\u8B1D\u8B04\u8B10\u8C41\u8C3F\u8C73\u8CFA\u8CFD\u8CFC\u8CF8\u8CFB\u8DA8\u8E49\u8E4B\u8E48\u8E4A\u8F44\u8F3E\u8F42\u8F45\u8F3F\u907F\u907D\u9084\u9081\u9082\u9080\u9139\u91A3\u919E\u919C\u934D\u9382\u9328\u9375\u934A\u9365\u934B\u9318\u937E\u936C\u935B\u9370\u935A\u9354\u95CA\u95CB\u95CC\u95C8\u95C6\u96B1\u96B8\u96D6\u971C\u971E\u97A0\u97D3\u9846\u98B6\u9935\u9A01"],
["c240", "\u99FF\u9BAE\u9BAB\u9BAA\u9BAD\u9D3B\u9D3F\u9E8B\u9ECF\u9EDE\u9EDC\u9EDD\u9EDB\u9F3E\u9F4B\u53E2\u5695\u56AE\u58D9\u58D8\u5B38\u5F5D\u61E3\u6233\u64F4\u64F2\u64FE\u6506\u64FA\u64FB\u64F7\u65B7\u66DC\u6726\u6AB3\u6AAC\u6AC3\u6ABB\u6AB8\u6AC2\u6AAE\u6AAF\u6B5F\u6B78\u6BAF\u7009\u700B\u6FFE\u7006\u6FFA\u7011\u700F\u71FB\u71FC\u71FE\u71F8\u7377\u7375\u74A7\u74BF\u7515\u7656\u7658"],
["c2a1", "\u7652\u77BD\u77BF\u77BB\u77BC\u790E\u79AE\u7A61\u7A62\u7A60\u7AC4\u7AC5\u7C2B\u7C27\u7C2A\u7C1E\u7C23\u7C21\u7CE7\u7E54\u7E55\u7E5E\u7E5A\u7E61\u7E52\u7E59\u7F48\u7FF9\u7FFB\u8077\u8076\u81CD\u81CF\u820A\u85CF\u85A9\u85CD\u85D0\u85C9\u85B0\u85BA\u85B9\u85A6\u87EF\u87EC\u87F2\u87E0\u8986\u89B2\u89F4\u8B28\u8B39\u8B2C\u8B2B\u8C50\u8D05\u8E59\u8E63\u8E66\u8E64\u8E5F\u8E55\u8EC0\u8F49\u8F4D\u9087\u9083\u9088\u91AB\u91AC\u91D0\u9394\u938A\u9396\u93A2\u93B3\u93AE\u93AC\u93B0\u9398\u939A\u9397\u95D4\u95D6\u95D0\u95D5\u96E2\u96DC\u96D9\u96DB\u96DE\u9724\u97A3\u97A6"],
["c340", "\u97AD\u97F9\u984D\u984F\u984C\u984E\u9853\u98BA\u993E\u993F\u993D\u992E\u99A5\u9A0E\u9AC1\u9B03\u9B06\u9B4F\u9B4E\u9B4D\u9BCA\u9BC9\u9BFD\u9BC8\u9BC0\u9D51\u9D5D\u9D60\u9EE0\u9F15\u9F2C\u5133\u56A5\u58DE\u58DF\u58E2\u5BF5\u9F90\u5EEC\u61F2\u61F7\u61F6\u61F5\u6500\u650F\u66E0\u66DD\u6AE5\u6ADD\u6ADA\u6AD3\u701B\u701F\u7028\u701A\u701D\u7015\u7018\u7206\u720D\u7258\u72A2\u7378"],
["c3a1", "\u737A\u74BD\u74CA\u74E3\u7587\u7586\u765F\u7661\u77C7\u7919\u79B1\u7A6B\u7A69\u7C3E\u7C3F\u7C38\u7C3D\u7C37\u7C40\u7E6B\u7E6D\u7E79\u7E69\u7E6A\u7F85\u7E73\u7FB6\u7FB9\u7FB8\u81D8\u85E9\u85DD\u85EA\u85D5\u85E4\u85E5\u85F7\u87FB\u8805\u880D\u87F9\u87FE\u8960\u895F\u8956\u895E\u8B41\u8B5C\u8B58\u8B49\u8B5A\u8B4E\u8B4F\u8B46\u8B59\u8D08\u8D0A\u8E7C\u8E72\u8E87\u8E76\u8E6C\u8E7A\u8E74\u8F54\u8F4E\u8FAD\u908A\u908B\u91B1\u91AE\u93E1\u93D1\u93DF\u93C3\u93C8\u93DC\u93DD\u93D6\u93E2\u93CD\u93D8\u93E4\u93D7\u93E8\u95DC\u96B4\u96E3\u972A\u9727\u9761\u97DC\u97FB\u985E"],
["c440", "\u9858\u985B\u98BC\u9945\u9949\u9A16\u9A19\u9B0D\u9BE8\u9BE7\u9BD6\u9BDB\u9D89\u9D61\u9D72\u9D6A\u9D6C\u9E92\u9E97\u9E93\u9EB4\u52F8\u56A8\u56B7\u56B6\u56B4\u56BC\u58E4\u5B40\u5B43\u5B7D\u5BF6\u5DC9\u61F8\u61FA\u6518\u6514\u6519\u66E6\u6727\u6AEC\u703E\u7030\u7032\u7210\u737B\u74CF\u7662\u7665\u7926\u792A\u792C\u792B\u7AC7\u7AF6\u7C4C\u7C43\u7C4D\u7CEF\u7CF0\u8FAE\u7E7D\u7E7C"],
["c4a1", "\u7E82\u7F4C\u8000\u81DA\u8266\u85FB\u85F9\u8611\u85FA\u8606\u860B\u8607\u860A\u8814\u8815\u8964\u89BA\u89F8\u8B70\u8B6C\u8B66\u8B6F\u8B5F\u8B6B\u8D0F\u8D0D\u8E89\u8E81\u8E85\u8E82\u91B4\u91CB\u9418\u9403\u93FD\u95E1\u9730\u98C4\u9952\u9951\u99A8\u9A2B\u9A30\u9A37\u9A35\u9C13\u9C0D\u9E79\u9EB5\u9EE8\u9F2F\u9F5F\u9F63\u9F61\u5137\u5138\u56C1\u56C0\u56C2\u5914\u5C6C\u5DCD\u61FC\u61FE\u651D\u651C\u6595\u66E9\u6AFB\u6B04\u6AFA\u6BB2\u704C\u721B\u72A7\u74D6\u74D4\u7669\u77D3\u7C50\u7E8F\u7E8C\u7FBC\u8617\u862D\u861A\u8823\u8822\u8821\u881F\u896A\u896C\u89BD\u8B74"],
["c540", "\u8B77\u8B7D\u8D13\u8E8A\u8E8D\u8E8B\u8F5F\u8FAF\u91BA\u942E\u9433\u9435\u943A\u9438\u9432\u942B\u95E2\u9738\u9739\u9732\u97FF\u9867\u9865\u9957\u9A45\u9A43\u9A40\u9A3E\u9ACF\u9B54\u9B51\u9C2D\u9C25\u9DAF\u9DB4\u9DC2\u9DB8\u9E9D\u9EEF\u9F19\u9F5C\u9F66\u9F67\u513C\u513B\u56C8\u56CA\u56C9\u5B7F\u5DD4\u5DD2\u5F4E\u61FF\u6524\u6B0A\u6B61\u7051\u7058\u7380\u74E4\u758A\u766E\u766C"],
["c5a1", "\u79B3\u7C60\u7C5F\u807E\u807D\u81DF\u8972\u896F\u89FC\u8B80\u8D16\u8D17\u8E91\u8E93\u8F61\u9148\u9444\u9451\u9452\u973D\u973E\u97C3\u97C1\u986B\u9955\u9A55\u9A4D\u9AD2\u9B1A\u9C49\u9C31\u9C3E\u9C3B\u9DD3\u9DD7\u9F34\u9F6C\u9F6A\u9F94\u56CC\u5DD6\u6200\u6523\u652B\u652A\u66EC\u6B10\u74DA\u7ACA\u7C64\u7C63\u7C65\u7E93\u7E96\u7E94\u81E2\u8638\u863F\u8831\u8B8A\u9090\u908F\u9463\u9460\u9464\u9768\u986F\u995C\u9A5A\u9A5B\u9A57\u9AD3\u9AD4\u9AD1\u9C54\u9C57\u9C56\u9DE5\u9E9F\u9EF4\u56D1\u58E9\u652C\u705E\u7671\u7672\u77D7\u7F50\u7F88\u8836\u8839\u8862\u8B93\u8B92"],
["c640", "\u8B96\u8277\u8D1B\u91C0\u946A\u9742\u9748\u9744\u97C6\u9870\u9A5F\u9B22\u9B58\u9C5F\u9DF9\u9DFA\u9E7C\u9E7D\u9F07\u9F77\u9F72\u5EF3\u6B16\u7063\u7C6C\u7C6E\u883B\u89C0\u8EA1\u91C1\u9472\u9470\u9871\u995E\u9AD6\u9B23\u9ECC\u7064\u77DA\u8B9A\u9477\u97C9\u9A62\u9A65\u7E9C\u8B9C\u8EAA\u91C5\u947D\u947E\u947C\u9C77\u9C78\u9EF7\u8C54\u947F\u9E1A\u7228\u9A6A\u9B31\u9E1B\u9E1E\u7C72"],
["c940", "\u4E42\u4E5C\u51F5\u531A\u5382\u4E07\u4E0C\u4E47\u4E8D\u56D7\uFA0C\u5C6E\u5F73\u4E0F\u5187\u4E0E\u4E2E\u4E93\u4EC2\u4EC9\u4EC8\u5198\u52FC\u536C\u53B9\u5720\u5903\u592C\u5C10\u5DFF\u65E1\u6BB3\u6BCC\u6C14\u723F\u4E31\u4E3C\u4EE8\u4EDC\u4EE9\u4EE1\u4EDD\u4EDA\u520C\u531C\u534C\u5722\u5723\u5917\u592F\u5B81\u5B84\u5C12\u5C3B\u5C74\u5C73\u5E04\u5E80\u5E82\u5FC9\u6209\u6250\u6C15"],
["c9a1", "\u6C36\u6C43\u6C3F\u6C3B\u72AE\u72B0\u738A\u79B8\u808A\u961E\u4F0E\u4F18\u4F2C\u4EF5\u4F14\u4EF1\u4F00\u4EF7\u4F08\u4F1D\u4F02\u4F05\u4F22\u4F13\u4F04\u4EF4\u4F12\u51B1\u5213\u5209\u5210\u52A6\u5322\u531F\u534D\u538A\u5407\u56E1\u56DF\u572E\u572A\u5734\u593C\u5980\u597C\u5985\u597B\u597E\u5977\u597F\u5B56\u5C15\u5C25\u5C7C\u5C7A\u5C7B\u5C7E\u5DDF\u5E75\u5E84\u5F02\u5F1A\u5F74\u5FD5\u5FD4\u5FCF\u625C\u625E\u6264\u6261\u6266\u6262\u6259\u6260\u625A\u6265\u65EF\u65EE\u673E\u6739\u6738\u673B\u673A\u673F\u673C\u6733\u6C18\u6C46\u6C52\u6C5C\u6C4F\u6C4A\u6C54\u6C4B"],
["ca40", "\u6C4C\u7071\u725E\u72B4\u72B5\u738E\u752A\u767F\u7A75\u7F51\u8278\u827C\u8280\u827D\u827F\u864D\u897E\u9099\u9097\u9098\u909B\u9094\u9622\u9624\u9620\u9623\u4F56\u4F3B\u4F62\u4F49\u4F53\u4F64\u4F3E\u4F67\u4F52\u4F5F\u4F41\u4F58\u4F2D\u4F33\u4F3F\u4F61\u518F\u51B9\u521C\u521E\u5221\u52AD\u52AE\u5309\u5363\u5372\u538E\u538F\u5430\u5437\u542A\u5454\u5445\u5419\u541C\u5425\u5418"],
["caa1", "\u543D\u544F\u5441\u5428\u5424\u5447\u56EE\u56E7\u56E5\u5741\u5745\u574C\u5749\u574B\u5752\u5906\u5940\u59A6\u5998\u59A0\u5997\u598E\u59A2\u5990\u598F\u59A7\u59A1\u5B8E\u5B92\u5C28\u5C2A\u5C8D\u5C8F\u5C88\u5C8B\u5C89\u5C92\u5C8A\u5C86\u5C93\u5C95\u5DE0\u5E0A\u5E0E\u5E8B\u5E89\u5E8C\u5E88\u5E8D\u5F05\u5F1D\u5F78\u5F76\u5FD2\u5FD1\u5FD0\u5FED\u5FE8\u5FEE\u5FF3\u5FE1\u5FE4\u5FE3\u5FFA\u5FEF\u5FF7\u5FFB\u6000\u5FF4\u623A\u6283\u628C\u628E\u628F\u6294\u6287\u6271\u627B\u627A\u6270\u6281\u6288\u6277\u627D\u6272\u6274\u6537\u65F0\u65F4\u65F3\u65F2\u65F5\u6745\u6747"],
["cb40", "\u6759\u6755\u674C\u6748\u675D\u674D\u675A\u674B\u6BD0\u6C19\u6C1A\u6C78\u6C67\u6C6B\u6C84\u6C8B\u6C8F\u6C71\u6C6F\u6C69\u6C9A\u6C6D\u6C87\u6C95\u6C9C\u6C66\u6C73\u6C65\u6C7B\u6C8E\u7074\u707A\u7263\u72BF\u72BD\u72C3\u72C6\u72C1\u72BA\u72C5\u7395\u7397\u7393\u7394\u7392\u753A\u7539\u7594\u7595\u7681\u793D\u8034\u8095\u8099\u8090\u8092\u809C\u8290\u828F\u8285\u828E\u8291\u8293"],
["cba1", "\u828A\u8283\u8284\u8C78\u8FC9\u8FBF\u909F\u90A1\u90A5\u909E\u90A7\u90A0\u9630\u9628\u962F\u962D\u4E33\u4F98\u4F7C\u4F85\u4F7D\u4F80\u4F87\u4F76\u4F74\u4F89\u4F84\u4F77\u4F4C\u4F97\u4F6A\u4F9A\u4F79\u4F81\u4F78\u4F90\u4F9C\u4F94\u4F9E\u4F92\u4F82\u4F95\u4F6B\u4F6E\u519E\u51BC\u51BE\u5235\u5232\u5233\u5246\u5231\u52BC\u530A\u530B\u533C\u5392\u5394\u5487\u547F\u5481\u5491\u5482\u5488\u546B\u547A\u547E\u5465\u546C\u5474\u5466\u548D\u546F\u5461\u5460\u5498\u5463\u5467\u5464\u56F7\u56F9\u576F\u5772\u576D\u576B\u5771\u5770\u5776\u5780\u5775\u577B\u5773\u5774\u5762"],
["cc40", "\u5768\u577D\u590C\u5945\u59B5\u59BA\u59CF\u59CE\u59B2\u59CC\u59C1\u59B6\u59BC\u59C3\u59D6\u59B1\u59BD\u59C0\u59C8\u59B4\u59C7\u5B62\u5B65\u5B93\u5B95\u5C44\u5C47\u5CAE\u5CA4\u5CA0\u5CB5\u5CAF\u5CA8\u5CAC\u5C9F\u5CA3\u5CAD\u5CA2\u5CAA\u5CA7\u5C9D\u5CA5\u5CB6\u5CB0\u5CA6\u5E17\u5E14\u5E19\u5F28\u5F22\u5F23\u5F24\u5F54\u5F82\u5F7E\u5F7D\u5FDE\u5FE5\u602D\u6026\u6019\u6032\u600B"],
["cca1", "\u6034\u600A\u6017\u6033\u601A\u601E\u602C\u6022\u600D\u6010\u602E\u6013\u6011\u600C\u6009\u601C\u6214\u623D\u62AD\u62B4\u62D1\u62BE\u62AA\u62B6\u62CA\u62AE\u62B3\u62AF\u62BB\u62A9\u62B0\u62B8\u653D\u65A8\u65BB\u6609\u65FC\u6604\u6612\u6608\u65FB\u6603\u660B\u660D\u6605\u65FD\u6611\u6610\u66F6\u670A\u6785\u676C\u678E\u6792\u6776\u677B\u6798\u6786\u6784\u6774\u678D\u678C\u677A\u679F\u6791\u6799\u6783\u677D\u6781\u6778\u6779\u6794\u6B25\u6B80\u6B7E\u6BDE\u6C1D\u6C93\u6CEC\u6CEB\u6CEE\u6CD9\u6CB6\u6CD4\u6CAD\u6CE7\u6CB7\u6CD0\u6CC2\u6CBA\u6CC3\u6CC6\u6CED\u6CF2"],
["cd40", "\u6CD2\u6CDD\u6CB4\u6C8A\u6C9D\u6C80\u6CDE\u6CC0\u6D30\u6CCD\u6CC7\u6CB0\u6CF9\u6CCF\u6CE9\u6CD1\u7094\u7098\u7085\u7093\u7086\u7084\u7091\u7096\u7082\u709A\u7083\u726A\u72D6\u72CB\u72D8\u72C9\u72DC\u72D2\u72D4\u72DA\u72CC\u72D1\u73A4\u73A1\u73AD\u73A6\u73A2\u73A0\u73AC\u739D\u74DD\u74E8\u753F\u7540\u753E\u758C\u7598\u76AF\u76F3\u76F1\u76F0\u76F5\u77F8\u77FC\u77F9\u77FB\u77FA"],
["cda1", "\u77F7\u7942\u793F\u79C5\u7A78\u7A7B\u7AFB\u7C75\u7CFD\u8035\u808F\u80AE\u80A3\u80B8\u80B5\u80AD\u8220\u82A0\u82C0\u82AB\u829A\u8298\u829B\u82B5\u82A7\u82AE\u82BC\u829E\u82BA\u82B4\u82A8\u82A1\u82A9\u82C2\u82A4\u82C3\u82B6\u82A2\u8670\u866F\u866D\u866E\u8C56\u8FD2\u8FCB\u8FD3\u8FCD\u8FD6\u8FD5\u8FD7\u90B2\u90B4\u90AF\u90B3\u90B0\u9639\u963D\u963C\u963A\u9643\u4FCD\u4FC5\u4FD3\u4FB2\u4FC9\u4FCB\u4FC1\u4FD4\u4FDC\u4FD9\u4FBB\u4FB3\u4FDB\u4FC7\u4FD6\u4FBA\u4FC0\u4FB9\u4FEC\u5244\u5249\u52C0\u52C2\u533D\u537C\u5397\u5396\u5399\u5398\u54BA\u54A1\u54AD\u54A5\u54CF"],
["ce40", "\u54C3\u830D\u54B7\u54AE\u54D6\u54B6\u54C5\u54C6\u54A0\u5470\u54BC\u54A2\u54BE\u5472\u54DE\u54B0\u57B5\u579E\u579F\u57A4\u578C\u5797\u579D\u579B\u5794\u5798\u578F\u5799\u57A5\u579A\u5795\u58F4\u590D\u5953\u59E1\u59DE\u59EE\u5A00\u59F1\u59DD\u59FA\u59FD\u59FC\u59F6\u59E4\u59F2\u59F7\u59DB\u59E9\u59F3\u59F5\u59E0\u59FE\u59F4\u59ED\u5BA8\u5C4C\u5CD0\u5CD8\u5CCC\u5CD7\u5CCB\u5CDB"],
["cea1", "\u5CDE\u5CDA\u5CC9\u5CC7\u5CCA\u5CD6\u5CD3\u5CD4\u5CCF\u5CC8\u5CC6\u5CCE\u5CDF\u5CF8\u5DF9\u5E21\u5E22\u5E23\u5E20\u5E24\u5EB0\u5EA4\u5EA2\u5E9B\u5EA3\u5EA5\u5F07\u5F2E\u5F56\u5F86\u6037\u6039\u6054\u6072\u605E\u6045\u6053\u6047\u6049\u605B\u604C\u6040\u6042\u605F\u6024\u6044\u6058\u6066\u606E\u6242\u6243\u62CF\u630D\u630B\u62F5\u630E\u6303\u62EB\u62F9\u630F\u630C\u62F8\u62F6\u6300\u6313\u6314\u62FA\u6315\u62FB\u62F0\u6541\u6543\u65AA\u65BF\u6636\u6621\u6632\u6635\u661C\u6626\u6622\u6633\u662B\u663A\u661D\u6634\u6639\u662E\u670F\u6710\u67C1\u67F2\u67C8\u67BA"],
["cf40", "\u67DC\u67BB\u67F8\u67D8\u67C0\u67B7\u67C5\u67EB\u67E4\u67DF\u67B5\u67CD\u67B3\u67F7\u67F6\u67EE\u67E3\u67C2\u67B9\u67CE\u67E7\u67F0\u67B2\u67FC\u67C6\u67ED\u67CC\u67AE\u67E6\u67DB\u67FA\u67C9\u67CA\u67C3\u67EA\u67CB\u6B28\u6B82\u6B84\u6BB6\u6BD6\u6BD8\u6BE0\u6C20\u6C21\u6D28\u6D34\u6D2D\u6D1F\u6D3C\u6D3F\u6D12\u6D0A\u6CDA\u6D33\u6D04\u6D19\u6D3A\u6D1A\u6D11\u6D00\u6D1D\u6D42"],
["cfa1", "\u6D01\u6D18\u6D37\u6D03\u6D0F\u6D40\u6D07\u6D20\u6D2C\u6D08\u6D22\u6D09\u6D10\u70B7\u709F\u70BE\u70B1\u70B0\u70A1\u70B4\u70B5\u70A9\u7241\u7249\u724A\u726C\u7270\u7273\u726E\u72CA\u72E4\u72E8\u72EB\u72DF\u72EA\u72E6\u72E3\u7385\u73CC\u73C2\u73C8\u73C5\u73B9\u73B6\u73B5\u73B4\u73EB\u73BF\u73C7\u73BE\u73C3\u73C6\u73B8\u73CB\u74EC\u74EE\u752E\u7547\u7548\u75A7\u75AA\u7679\u76C4\u7708\u7703\u7704\u7705\u770A\u76F7\u76FB\u76FA\u77E7\u77E8\u7806\u7811\u7812\u7805\u7810\u780F\u780E\u7809\u7803\u7813\u794A\u794C\u794B\u7945\u7944\u79D5\u79CD\u79CF\u79D6\u79CE\u7A80"],
["d040", "\u7A7E\u7AD1\u7B00\u7B01\u7C7A\u7C78\u7C79\u7C7F\u7C80\u7C81\u7D03\u7D08\u7D01\u7F58\u7F91\u7F8D\u7FBE\u8007\u800E\u800F\u8014\u8037\u80D8\u80C7\u80E0\u80D1\u80C8\u80C2\u80D0\u80C5\u80E3\u80D9\u80DC\u80CA\u80D5\u80C9\u80CF\u80D7\u80E6\u80CD\u81FF\u8221\u8294\u82D9\u82FE\u82F9\u8307\u82E8\u8300\u82D5\u833A\u82EB\u82D6\u82F4\u82EC\u82E1\u82F2\u82F5\u830C\u82FB\u82F6\u82F0\u82EA"],
["d0a1", "\u82E4\u82E0\u82FA\u82F3\u82ED\u8677\u8674\u867C\u8673\u8841\u884E\u8867\u886A\u8869\u89D3\u8A04\u8A07\u8D72\u8FE3\u8FE1\u8FEE\u8FE0\u90F1\u90BD\u90BF\u90D5\u90C5\u90BE\u90C7\u90CB\u90C8\u91D4\u91D3\u9654\u964F\u9651\u9653\u964A\u964E\u501E\u5005\u5007\u5013\u5022\u5030\u501B\u4FF5\u4FF4\u5033\u5037\u502C\u4FF6\u4FF7\u5017\u501C\u5020\u5027\u5035\u502F\u5031\u500E\u515A\u5194\u5193\u51CA\u51C4\u51C5\u51C8\u51CE\u5261\u525A\u5252\u525E\u525F\u5255\u5262\u52CD\u530E\u539E\u5526\u54E2\u5517\u5512\u54E7\u54F3\u54E4\u551A\u54FF\u5504\u5508\u54EB\u5511\u5505\u54F1"],
["d140", "\u550A\u54FB\u54F7\u54F8\u54E0\u550E\u5503\u550B\u5701\u5702\u57CC\u5832\u57D5\u57D2\u57BA\u57C6\u57BD\u57BC\u57B8\u57B6\u57BF\u57C7\u57D0\u57B9\u57C1\u590E\u594A\u5A19\u5A16\u5A2D\u5A2E\u5A15\u5A0F\u5A17\u5A0A\u5A1E\u5A33\u5B6C\u5BA7\u5BAD\u5BAC\u5C03\u5C56\u5C54\u5CEC\u5CFF\u5CEE\u5CF1\u5CF7\u5D00\u5CF9\u5E29\u5E28\u5EA8\u5EAE\u5EAA\u5EAC\u5F33\u5F30\u5F67\u605D\u605A\u6067"],
["d1a1", "\u6041\u60A2\u6088\u6080\u6092\u6081\u609D\u6083\u6095\u609B\u6097\u6087\u609C\u608E\u6219\u6246\u62F2\u6310\u6356\u632C\u6344\u6345\u6336\u6343\u63E4\u6339\u634B\u634A\u633C\u6329\u6341\u6334\u6358\u6354\u6359\u632D\u6347\u6333\u635A\u6351\u6338\u6357\u6340\u6348\u654A\u6546\u65C6\u65C3\u65C4\u65C2\u664A\u665F\u6647\u6651\u6712\u6713\u681F\u681A\u6849\u6832\u6833\u683B\u684B\u684F\u6816\u6831\u681C\u6835\u682B\u682D\u682F\u684E\u6844\u6834\u681D\u6812\u6814\u6826\u6828\u682E\u684D\u683A\u6825\u6820\u6B2C\u6B2F\u6B2D\u6B31\u6B34\u6B6D\u8082\u6B88\u6BE6\u6BE4"],
["d240", "\u6BE8\u6BE3\u6BE2\u6BE7\u6C25\u6D7A\u6D63\u6D64\u6D76\u6D0D\u6D61\u6D92\u6D58\u6D62\u6D6D\u6D6F\u6D91\u6D8D\u6DEF\u6D7F\u6D86\u6D5E\u6D67\u6D60\u6D97\u6D70\u6D7C\u6D5F\u6D82\u6D98\u6D2F\u6D68\u6D8B\u6D7E\u6D80\u6D84\u6D16\u6D83\u6D7B\u6D7D\u6D75\u6D90\u70DC\u70D3\u70D1\u70DD\u70CB\u7F39\u70E2\u70D7\u70D2\u70DE\u70E0\u70D4\u70CD\u70C5\u70C6\u70C7\u70DA\u70CE\u70E1\u7242\u7278"],
["d2a1", "\u7277\u7276\u7300\u72FA\u72F4\u72FE\u72F6\u72F3\u72FB\u7301\u73D3\u73D9\u73E5\u73D6\u73BC\u73E7\u73E3\u73E9\u73DC\u73D2\u73DB\u73D4\u73DD\u73DA\u73D7\u73D8\u73E8\u74DE\u74DF\u74F4\u74F5\u7521\u755B\u755F\u75B0\u75C1\u75BB\u75C4\u75C0\u75BF\u75B6\u75BA\u768A\u76C9\u771D\u771B\u7710\u7713\u7712\u7723\u7711\u7715\u7719\u771A\u7722\u7727\u7823\u782C\u7822\u7835\u782F\u7828\u782E\u782B\u7821\u7829\u7833\u782A\u7831\u7954\u795B\u794F\u795C\u7953\u7952\u7951\u79EB\u79EC\u79E0\u79EE\u79ED\u79EA\u79DC\u79DE\u79DD\u7A86\u7A89\u7A85\u7A8B\u7A8C\u7A8A\u7A87\u7AD8\u7B10"],
["d340", "\u7B04\u7B13\u7B05\u7B0F\u7B08\u7B0A\u7B0E\u7B09\u7B12\u7C84\u7C91\u7C8A\u7C8C\u7C88\u7C8D\u7C85\u7D1E\u7D1D\u7D11\u7D0E\u7D18\u7D16\u7D13\u7D1F\u7D12\u7D0F\u7D0C\u7F5C\u7F61\u7F5E\u7F60\u7F5D\u7F5B\u7F96\u7F92\u7FC3\u7FC2\u7FC0\u8016\u803E\u8039\u80FA\u80F2\u80F9\u80F5\u8101\u80FB\u8100\u8201\u822F\u8225\u8333\u832D\u8344\u8319\u8351\u8325\u8356\u833F\u8341\u8326\u831C\u8322"],
["d3a1", "\u8342\u834E\u831B\u832A\u8308\u833C\u834D\u8316\u8324\u8320\u8337\u832F\u8329\u8347\u8345\u834C\u8353\u831E\u832C\u834B\u8327\u8348\u8653\u8652\u86A2\u86A8\u8696\u868D\u8691\u869E\u8687\u8697\u8686\u868B\u869A\u8685\u86A5\u8699\u86A1\u86A7\u8695\u8698\u868E\u869D\u8690\u8694\u8843\u8844\u886D\u8875\u8876\u8872\u8880\u8871\u887F\u886F\u8883\u887E\u8874\u887C\u8A12\u8C47\u8C57\u8C7B\u8CA4\u8CA3\u8D76\u8D78\u8DB5\u8DB7\u8DB6\u8ED1\u8ED3\u8FFE\u8FF5\u9002\u8FFF\u8FFB\u9004\u8FFC\u8FF6\u90D6\u90E0\u90D9\u90DA\u90E3\u90DF\u90E5\u90D8\u90DB\u90D7\u90DC\u90E4\u9150"],
["d440", "\u914E\u914F\u91D5\u91E2\u91DA\u965C\u965F\u96BC\u98E3\u9ADF\u9B2F\u4E7F\u5070\u506A\u5061\u505E\u5060\u5053\u504B\u505D\u5072\u5048\u504D\u5041\u505B\u504A\u5062\u5015\u5045\u505F\u5069\u506B\u5063\u5064\u5046\u5040\u506E\u5073\u5057\u5051\u51D0\u526B\u526D\u526C\u526E\u52D6\u52D3\u532D\u539C\u5575\u5576\u553C\u554D\u5550\u5534\u552A\u5551\u5562\u5536\u5535\u5530\u5552\u5545"],
["d4a1", "\u550C\u5532\u5565\u554E\u5539\u5548\u552D\u553B\u5540\u554B\u570A\u5707\u57FB\u5814\u57E2\u57F6\u57DC\u57F4\u5800\u57ED\u57FD\u5808\u57F8\u580B\u57F3\u57CF\u5807\u57EE\u57E3\u57F2\u57E5\u57EC\u57E1\u580E\u57FC\u5810\u57E7\u5801\u580C\u57F1\u57E9\u57F0\u580D\u5804\u595C\u5A60\u5A58\u5A55\u5A67\u5A5E\u5A38\u5A35\u5A6D\u5A50\u5A5F\u5A65\u5A6C\u5A53\u5A64\u5A57\u5A43\u5A5D\u5A52\u5A44\u5A5B\u5A48\u5A8E\u5A3E\u5A4D\u5A39\u5A4C\u5A70\u5A69\u5A47\u5A51\u5A56\u5A42\u5A5C\u5B72\u5B6E\u5BC1\u5BC0\u5C59\u5D1E\u5D0B\u5D1D\u5D1A\u5D20\u5D0C\u5D28\u5D0D\u5D26\u5D25\u5D0F"],
["d540", "\u5D30\u5D12\u5D23\u5D1F\u5D2E\u5E3E\u5E34\u5EB1\u5EB4\u5EB9\u5EB2\u5EB3\u5F36\u5F38\u5F9B\u5F96\u5F9F\u608A\u6090\u6086\u60BE\u60B0\u60BA\u60D3\u60D4\u60CF\u60E4\u60D9\u60DD\u60C8\u60B1\u60DB\u60B7\u60CA\u60BF\u60C3\u60CD\u60C0\u6332\u6365\u638A\u6382\u637D\u63BD\u639E\u63AD\u639D\u6397\u63AB\u638E\u636F\u6387\u6390\u636E\u63AF\u6375\u639C\u636D\u63AE\u637C\u63A4\u633B\u639F"],
["d5a1", "\u6378\u6385\u6381\u6391\u638D\u6370\u6553\u65CD\u6665\u6661\u665B\u6659\u665C\u6662\u6718\u6879\u6887\u6890\u689C\u686D\u686E\u68AE\u68AB\u6956\u686F\u68A3\u68AC\u68A9\u6875\u6874\u68B2\u688F\u6877\u6892\u687C\u686B\u6872\u68AA\u6880\u6871\u687E\u689B\u6896\u688B\u68A0\u6889\u68A4\u6878\u687B\u6891\u688C\u688A\u687D\u6B36\u6B33\u6B37\u6B38\u6B91\u6B8F\u6B8D\u6B8E\u6B8C\u6C2A\u6DC0\u6DAB\u6DB4\u6DB3\u6E74\u6DAC\u6DE9\u6DE2\u6DB7\u6DF6\u6DD4\u6E00\u6DC8\u6DE0\u6DDF\u6DD6\u6DBE\u6DE5\u6DDC\u6DDD\u6DDB\u6DF4\u6DCA\u6DBD\u6DED\u6DF0\u6DBA\u6DD5\u6DC2\u6DCF\u6DC9"],
["d640", "\u6DD0\u6DF2\u6DD3\u6DFD\u6DD7\u6DCD\u6DE3\u6DBB\u70FA\u710D\u70F7\u7117\u70F4\u710C\u70F0\u7104\u70F3\u7110\u70FC\u70FF\u7106\u7113\u7100\u70F8\u70F6\u710B\u7102\u710E\u727E\u727B\u727C\u727F\u731D\u7317\u7307\u7311\u7318\u730A\u7308\u72FF\u730F\u731E\u7388\u73F6\u73F8\u73F5\u7404\u7401\u73FD\u7407\u7400\u73FA\u73FC\u73FF\u740C\u740B\u73F4\u7408\u7564\u7563\u75CE\u75D2\u75CF"],
["d6a1", "\u75CB\u75CC\u75D1\u75D0\u768F\u7689\u76D3\u7739\u772F\u772D\u7731\u7732\u7734\u7733\u773D\u7725\u773B\u7735\u7848\u7852\u7849\u784D\u784A\u784C\u7826\u7845\u7850\u7964\u7967\u7969\u796A\u7963\u796B\u7961\u79BB\u79FA\u79F8\u79F6\u79F7\u7A8F\u7A94\u7A90\u7B35\u7B47\u7B34\u7B25\u7B30\u7B22\u7B24\u7B33\u7B18\u7B2A\u7B1D\u7B31\u7B2B\u7B2D\u7B2F\u7B32\u7B38\u7B1A\u7B23\u7C94\u7C98\u7C96\u7CA3\u7D35\u7D3D\u7D38\u7D36\u7D3A\u7D45\u7D2C\u7D29\u7D41\u7D47\u7D3E\u7D3F\u7D4A\u7D3B\u7D28\u7F63\u7F95\u7F9C\u7F9D\u7F9B\u7FCA\u7FCB\u7FCD\u7FD0\u7FD1\u7FC7\u7FCF\u7FC9\u801F"],
["d740", "\u801E\u801B\u8047\u8043\u8048\u8118\u8125\u8119\u811B\u812D\u811F\u812C\u811E\u8121\u8115\u8127\u811D\u8122\u8211\u8238\u8233\u823A\u8234\u8232\u8274\u8390\u83A3\u83A8\u838D\u837A\u8373\u83A4\u8374\u838F\u8381\u8395\u8399\u8375\u8394\u83A9\u837D\u8383\u838C\u839D\u839B\u83AA\u838B\u837E\u83A5\u83AF\u8388\u8397\u83B0\u837F\u83A6\u8387\u83AE\u8376\u839A\u8659\u8656\u86BF\u86B7"],
["d7a1", "\u86C2\u86C1\u86C5\u86BA\u86B0\u86C8\u86B9\u86B3\u86B8\u86CC\u86B4\u86BB\u86BC\u86C3\u86BD\u86BE\u8852\u8889\u8895\u88A8\u88A2\u88AA\u889A\u8891\u88A1\u889F\u8898\u88A7\u8899\u889B\u8897\u88A4\u88AC\u888C\u8893\u888E\u8982\u89D6\u89D9\u89D5\u8A30\u8A27\u8A2C\u8A1E\u8C39\u8C3B\u8C5C\u8C5D\u8C7D\u8CA5\u8D7D\u8D7B\u8D79\u8DBC\u8DC2\u8DB9\u8DBF\u8DC1\u8ED8\u8EDE\u8EDD\u8EDC\u8ED7\u8EE0\u8EE1\u9024\u900B\u9011\u901C\u900C\u9021\u90EF\u90EA\u90F0\u90F4\u90F2\u90F3\u90D4\u90EB\u90EC\u90E9\u9156\u9158\u915A\u9153\u9155\u91EC\u91F4\u91F1\u91F3\u91F8\u91E4\u91F9\u91EA"],
["d840", "\u91EB\u91F7\u91E8\u91EE\u957A\u9586\u9588\u967C\u966D\u966B\u9671\u966F\u96BF\u976A\u9804\u98E5\u9997\u509B\u5095\u5094\u509E\u508B\u50A3\u5083\u508C\u508E\u509D\u5068\u509C\u5092\u5082\u5087\u515F\u51D4\u5312\u5311\u53A4\u53A7\u5591\u55A8\u55A5\u55AD\u5577\u5645\u55A2\u5593\u5588\u558F\u55B5\u5581\u55A3\u5592\u55A4\u557D\u558C\u55A6\u557F\u5595\u55A1\u558E\u570C\u5829\u5837"],
["d8a1", "\u5819\u581E\u5827\u5823\u5828\u57F5\u5848\u5825\u581C\u581B\u5833\u583F\u5836\u582E\u5839\u5838\u582D\u582C\u583B\u5961\u5AAF\u5A94\u5A9F\u5A7A\u5AA2\u5A9E\u5A78\u5AA6\u5A7C\u5AA5\u5AAC\u5A95\u5AAE\u5A37\u5A84\u5A8A\u5A97\u5A83\u5A8B\u5AA9\u5A7B\u5A7D\u5A8C\u5A9C\u5A8F\u5A93\u5A9D\u5BEA\u5BCD\u5BCB\u5BD4\u5BD1\u5BCA\u5BCE\u5C0C\u5C30\u5D37\u5D43\u5D6B\u5D41\u5D4B\u5D3F\u5D35\u5D51\u5D4E\u5D55\u5D33\u5D3A\u5D52\u5D3D\u5D31\u5D59\u5D42\u5D39\u5D49\u5D38\u5D3C\u5D32\u5D36\u5D40\u5D45\u5E44\u5E41\u5F58\u5FA6\u5FA5\u5FAB\u60C9\u60B9\u60CC\u60E2\u60CE\u60C4\u6114"],
["d940", "\u60F2\u610A\u6116\u6105\u60F5\u6113\u60F8\u60FC\u60FE\u60C1\u6103\u6118\u611D\u6110\u60FF\u6104\u610B\u624A\u6394\u63B1\u63B0\u63CE\u63E5\u63E8\u63EF\u63C3\u649D\u63F3\u63CA\u63E0\u63F6\u63D5\u63F2\u63F5\u6461\u63DF\u63BE\u63DD\u63DC\u63C4\u63D8\u63D3\u63C2\u63C7\u63CC\u63CB\u63C8\u63F0\u63D7\u63D9\u6532\u6567\u656A\u6564\u655C\u6568\u6565\u658C\u659D\u659E\u65AE\u65D0\u65D2"],
["d9a1", "\u667C\u666C\u667B\u6680\u6671\u6679\u666A\u6672\u6701\u690C\u68D3\u6904\u68DC\u692A\u68EC\u68EA\u68F1\u690F\u68D6\u68F7\u68EB\u68E4\u68F6\u6913\u6910\u68F3\u68E1\u6907\u68CC\u6908\u6970\u68B4\u6911\u68EF\u68C6\u6914\u68F8\u68D0\u68FD\u68FC\u68E8\u690B\u690A\u6917\u68CE\u68C8\u68DD\u68DE\u68E6\u68F4\u68D1\u6906\u68D4\u68E9\u6915\u6925\u68C7\u6B39\u6B3B\u6B3F\u6B3C\u6B94\u6B97\u6B99\u6B95\u6BBD\u6BF0\u6BF2\u6BF3\u6C30\u6DFC\u6E46\u6E47\u6E1F\u6E49\u6E88\u6E3C\u6E3D\u6E45\u6E62\u6E2B\u6E3F\u6E41\u6E5D\u6E73\u6E1C\u6E33\u6E4B\u6E40\u6E51\u6E3B\u6E03\u6E2E\u6E5E"],
["da40", "\u6E68\u6E5C\u6E61\u6E31\u6E28\u6E60\u6E71\u6E6B\u6E39\u6E22\u6E30\u6E53\u6E65\u6E27\u6E78\u6E64\u6E77\u6E55\u6E79\u6E52\u6E66\u6E35\u6E36\u6E5A\u7120\u711E\u712F\u70FB\u712E\u7131\u7123\u7125\u7122\u7132\u711F\u7128\u713A\u711B\u724B\u725A\u7288\u7289\u7286\u7285\u728B\u7312\u730B\u7330\u7322\u7331\u7333\u7327\u7332\u732D\u7326\u7323\u7335\u730C\u742E\u742C\u7430\u742B\u7416"],
["daa1", "\u741A\u7421\u742D\u7431\u7424\u7423\u741D\u7429\u7420\u7432\u74FB\u752F\u756F\u756C\u75E7\u75DA\u75E1\u75E6\u75DD\u75DF\u75E4\u75D7\u7695\u7692\u76DA\u7746\u7747\u7744\u774D\u7745\u774A\u774E\u774B\u774C\u77DE\u77EC\u7860\u7864\u7865\u785C\u786D\u7871\u786A\u786E\u7870\u7869\u7868\u785E\u7862\u7974\u7973\u7972\u7970\u7A02\u7A0A\u7A03\u7A0C\u7A04\u7A99\u7AE6\u7AE4\u7B4A\u7B3B\u7B44\u7B48\u7B4C\u7B4E\u7B40\u7B58\u7B45\u7CA2\u7C9E\u7CA8\u7CA1\u7D58\u7D6F\u7D63\u7D53\u7D56\u7D67\u7D6A\u7D4F\u7D6D\u7D5C\u7D6B\u7D52\u7D54\u7D69\u7D51\u7D5F\u7D4E\u7F3E\u7F3F\u7F65"],
["db40", "\u7F66\u7FA2\u7FA0\u7FA1\u7FD7\u8051\u804F\u8050\u80FE\u80D4\u8143\u814A\u8152\u814F\u8147\u813D\u814D\u813A\u81E6\u81EE\u81F7\u81F8\u81F9\u8204\u823C\u823D\u823F\u8275\u833B\u83CF\u83F9\u8423\u83C0\u83E8\u8412\u83E7\u83E4\u83FC\u83F6\u8410\u83C6\u83C8\u83EB\u83E3\u83BF\u8401\u83DD\u83E5\u83D8\u83FF\u83E1\u83CB\u83CE\u83D6\u83F5\u83C9\u8409\u840F\u83DE\u8411\u8406\u83C2\u83F3"],
["dba1", "\u83D5\u83FA\u83C7\u83D1\u83EA\u8413\u83C3\u83EC\u83EE\u83C4\u83FB\u83D7\u83E2\u841B\u83DB\u83FE\u86D8\u86E2\u86E6\u86D3\u86E3\u86DA\u86EA\u86DD\u86EB\u86DC\u86EC\u86E9\u86D7\u86E8\u86D1\u8848\u8856\u8855\u88BA\u88D7\u88B9\u88B8\u88C0\u88BE\u88B6\u88BC\u88B7\u88BD\u88B2\u8901\u88C9\u8995\u8998\u8997\u89DD\u89DA\u89DB\u8A4E\u8A4D\u8A39\u8A59\u8A40\u8A57\u8A58\u8A44\u8A45\u8A52\u8A48\u8A51\u8A4A\u8A4C\u8A4F\u8C5F\u8C81\u8C80\u8CBA\u8CBE\u8CB0\u8CB9\u8CB5\u8D84\u8D80\u8D89\u8DD8\u8DD3\u8DCD\u8DC7\u8DD6\u8DDC\u8DCF\u8DD5\u8DD9\u8DC8\u8DD7\u8DC5\u8EEF\u8EF7\u8EFA"],
["dc40", "\u8EF9\u8EE6\u8EEE\u8EE5\u8EF5\u8EE7\u8EE8\u8EF6\u8EEB\u8EF1\u8EEC\u8EF4\u8EE9\u902D\u9034\u902F\u9106\u912C\u9104\u90FF\u90FC\u9108\u90F9\u90FB\u9101\u9100\u9107\u9105\u9103\u9161\u9164\u915F\u9162\u9160\u9201\u920A\u9225\u9203\u921A\u9226\u920F\u920C\u9200\u9212\u91FF\u91FD\u9206\u9204\u9227\u9202\u921C\u9224\u9219\u9217\u9205\u9216\u957B\u958D\u958C\u9590\u9687\u967E\u9688"],
["dca1", "\u9689\u9683\u9680\u96C2\u96C8\u96C3\u96F1\u96F0\u976C\u9770\u976E\u9807\u98A9\u98EB\u9CE6\u9EF9\u4E83\u4E84\u4EB6\u50BD\u50BF\u50C6\u50AE\u50C4\u50CA\u50B4\u50C8\u50C2\u50B0\u50C1\u50BA\u50B1\u50CB\u50C9\u50B6\u50B8\u51D7\u527A\u5278\u527B\u527C\u55C3\u55DB\u55CC\u55D0\u55CB\u55CA\u55DD\u55C0\u55D4\u55C4\u55E9\u55BF\u55D2\u558D\u55CF\u55D5\u55E2\u55D6\u55C8\u55F2\u55CD\u55D9\u55C2\u5714\u5853\u5868\u5864\u584F\u584D\u5849\u586F\u5855\u584E\u585D\u5859\u5865\u585B\u583D\u5863\u5871\u58FC\u5AC7\u5AC4\u5ACB\u5ABA\u5AB8\u5AB1\u5AB5\u5AB0\u5ABF\u5AC8\u5ABB\u5AC6"],
["dd40", "\u5AB7\u5AC0\u5ACA\u5AB4\u5AB6\u5ACD\u5AB9\u5A90\u5BD6\u5BD8\u5BD9\u5C1F\u5C33\u5D71\u5D63\u5D4A\u5D65\u5D72\u5D6C\u5D5E\u5D68\u5D67\u5D62\u5DF0\u5E4F\u5E4E\u5E4A\u5E4D\u5E4B\u5EC5\u5ECC\u5EC6\u5ECB\u5EC7\u5F40\u5FAF\u5FAD\u60F7\u6149\u614A\u612B\u6145\u6136\u6132\u612E\u6146\u612F\u614F\u6129\u6140\u6220\u9168\u6223\u6225\u6224\u63C5\u63F1\u63EB\u6410\u6412\u6409\u6420\u6424"],
["dda1", "\u6433\u6443\u641F\u6415\u6418\u6439\u6437\u6422\u6423\u640C\u6426\u6430\u6428\u6441\u6435\u642F\u640A\u641A\u6440\u6425\u6427\u640B\u63E7\u641B\u642E\u6421\u640E\u656F\u6592\u65D3\u6686\u668C\u6695\u6690\u668B\u668A\u6699\u6694\u6678\u6720\u6966\u695F\u6938\u694E\u6962\u6971\u693F\u6945\u696A\u6939\u6942\u6957\u6959\u697A\u6948\u6949\u6935\u696C\u6933\u693D\u6965\u68F0\u6978\u6934\u6969\u6940\u696F\u6944\u6976\u6958\u6941\u6974\u694C\u693B\u694B\u6937\u695C\u694F\u6951\u6932\u6952\u692F\u697B\u693C\u6B46\u6B45\u6B43\u6B42\u6B48\u6B41\u6B9B\uFA0D\u6BFB\u6BFC"],
["de40", "\u6BF9\u6BF7\u6BF8\u6E9B\u6ED6\u6EC8\u6E8F\u6EC0\u6E9F\u6E93\u6E94\u6EA0\u6EB1\u6EB9\u6EC6\u6ED2\u6EBD\u6EC1\u6E9E\u6EC9\u6EB7\u6EB0\u6ECD\u6EA6\u6ECF\u6EB2\u6EBE\u6EC3\u6EDC\u6ED8\u6E99\u6E92\u6E8E\u6E8D\u6EA4\u6EA1\u6EBF\u6EB3\u6ED0\u6ECA\u6E97\u6EAE\u6EA3\u7147\u7154\u7152\u7163\u7160\u7141\u715D\u7162\u7172\u7178\u716A\u7161\u7142\u7158\u7143\u714B\u7170\u715F\u7150\u7153"],
["dea1", "\u7144\u714D\u715A\u724F\u728D\u728C\u7291\u7290\u728E\u733C\u7342\u733B\u733A\u7340\u734A\u7349\u7444\u744A\u744B\u7452\u7451\u7457\u7440\u744F\u7450\u744E\u7442\u7446\u744D\u7454\u74E1\u74FF\u74FE\u74FD\u751D\u7579\u7577\u6983\u75EF\u760F\u7603\u75F7\u75FE\u75FC\u75F9\u75F8\u7610\u75FB\u75F6\u75ED\u75F5\u75FD\u7699\u76B5\u76DD\u7755\u775F\u7760\u7752\u7756\u775A\u7769\u7767\u7754\u7759\u776D\u77E0\u7887\u789A\u7894\u788F\u7884\u7895\u7885\u7886\u78A1\u7883\u7879\u7899\u7880\u7896\u787B\u797C\u7982\u797D\u7979\u7A11\u7A18\u7A19\u7A12\u7A17\u7A15\u7A22\u7A13"],
["df40", "\u7A1B\u7A10\u7AA3\u7AA2\u7A9E\u7AEB\u7B66\u7B64\u7B6D\u7B74\u7B69\u7B72\u7B65\u7B73\u7B71\u7B70\u7B61\u7B78\u7B76\u7B63\u7CB2\u7CB4\u7CAF\u7D88\u7D86\u7D80\u7D8D\u7D7F\u7D85\u7D7A\u7D8E\u7D7B\u7D83\u7D7C\u7D8C\u7D94\u7D84\u7D7D\u7D92\u7F6D\u7F6B\u7F67\u7F68\u7F6C\u7FA6\u7FA5\u7FA7\u7FDB\u7FDC\u8021\u8164\u8160\u8177\u815C\u8169\u815B\u8162\u8172\u6721\u815E\u8176\u8167\u816F"],
["dfa1", "\u8144\u8161\u821D\u8249\u8244\u8240\u8242\u8245\u84F1\u843F\u8456\u8476\u8479\u848F\u848D\u8465\u8451\u8440\u8486\u8467\u8430\u844D\u847D\u845A\u8459\u8474\u8473\u845D\u8507\u845E\u8437\u843A\u8434\u847A\u8443\u8478\u8432\u8445\u8429\u83D9\u844B\u842F\u8442\u842D\u845F\u8470\u8439\u844E\u844C\u8452\u846F\u84C5\u848E\u843B\u8447\u8436\u8433\u8468\u847E\u8444\u842B\u8460\u8454\u846E\u8450\u870B\u8704\u86F7\u870C\u86FA\u86D6\u86F5\u874D\u86F8\u870E\u8709\u8701\u86F6\u870D\u8705\u88D6\u88CB\u88CD\u88CE\u88DE\u88DB\u88DA\u88CC\u88D0\u8985\u899B\u89DF\u89E5\u89E4"],
["e040", "\u89E1\u89E0\u89E2\u89DC\u89E6\u8A76\u8A86\u8A7F\u8A61\u8A3F\u8A77\u8A82\u8A84\u8A75\u8A83\u8A81\u8A74\u8A7A\u8C3C\u8C4B\u8C4A\u8C65\u8C64\u8C66\u8C86\u8C84\u8C85\u8CCC\u8D68\u8D69\u8D91\u8D8C\u8D8E\u8D8F\u8D8D\u8D93\u8D94\u8D90\u8D92\u8DF0\u8DE0\u8DEC\u8DF1\u8DEE\u8DD0\u8DE9\u8DE3\u8DE2\u8DE7\u8DF2\u8DEB\u8DF4\u8F06\u8EFF\u8F01\u8F00\u8F05\u8F07\u8F08\u8F02\u8F0B\u9052\u903F"],
["e0a1", "\u9044\u9049\u903D\u9110\u910D\u910F\u9111\u9116\u9114\u910B\u910E\u916E\u916F\u9248\u9252\u9230\u923A\u9266\u9233\u9265\u925E\u9283\u922E\u924A\u9246\u926D\u926C\u924F\u9260\u9267\u926F\u9236\u9261\u9270\u9231\u9254\u9263\u9250\u9272\u924E\u9253\u924C\u9256\u9232\u959F\u959C\u959E\u959B\u9692\u9693\u9691\u9697\u96CE\u96FA\u96FD\u96F8\u96F5\u9773\u9777\u9778\u9772\u980F\u980D\u980E\u98AC\u98F6\u98F9\u99AF\u99B2\u99B0\u99B5\u9AAD\u9AAB\u9B5B\u9CEA\u9CED\u9CE7\u9E80\u9EFD\u50E6\u50D4\u50D7\u50E8\u50F3\u50DB\u50EA\u50DD\u50E4\u50D3\u50EC\u50F0\u50EF\u50E3\u50E0"],
["e140", "\u51D8\u5280\u5281\u52E9\u52EB\u5330\u53AC\u5627\u5615\u560C\u5612\u55FC\u560F\u561C\u5601\u5613\u5602\u55FA\u561D\u5604\u55FF\u55F9\u5889\u587C\u5890\u5898\u5886\u5881\u587F\u5874\u588B\u587A\u5887\u5891\u588E\u5876\u5882\u5888\u587B\u5894\u588F\u58FE\u596B\u5ADC\u5AEE\u5AE5\u5AD5\u5AEA\u5ADA\u5AED\u5AEB\u5AF3\u5AE2\u5AE0\u5ADB\u5AEC\u5ADE\u5ADD\u5AD9\u5AE8\u5ADF\u5B77\u5BE0"],
["e1a1", "\u5BE3\u5C63\u5D82\u5D80\u5D7D\u5D86\u5D7A\u5D81\u5D77\u5D8A\u5D89\u5D88\u5D7E\u5D7C\u5D8D\u5D79\u5D7F\u5E58\u5E59\u5E53\u5ED8\u5ED1\u5ED7\u5ECE\u5EDC\u5ED5\u5ED9\u5ED2\u5ED4\u5F44\u5F43\u5F6F\u5FB6\u612C\u6128\u6141\u615E\u6171\u6173\u6152\u6153\u6172\u616C\u6180\u6174\u6154\u617A\u615B\u6165\u613B\u616A\u6161\u6156\u6229\u6227\u622B\u642B\u644D\u645B\u645D\u6474\u6476\u6472\u6473\u647D\u6475\u6466\u64A6\u644E\u6482\u645E\u645C\u644B\u6453\u6460\u6450\u647F\u643F\u646C\u646B\u6459\u6465\u6477\u6573\u65A0\u66A1\u66A0\u669F\u6705\u6704\u6722\u69B1\u69B6\u69C9"],
["e240", "\u69A0\u69CE\u6996\u69B0\u69AC\u69BC\u6991\u6999\u698E\u69A7\u698D\u69A9\u69BE\u69AF\u69BF\u69C4\u69BD\u69A4\u69D4\u69B9\u69CA\u699A\u69CF\u69B3\u6993\u69AA\u69A1\u699E\u69D9\u6997\u6990\u69C2\u69B5\u69A5\u69C6\u6B4A\u6B4D\u6B4B\u6B9E\u6B9F\u6BA0\u6BC3\u6BC4\u6BFE\u6ECE\u6EF5\u6EF1\u6F03\u6F25\u6EF8\u6F37\u6EFB\u6F2E\u6F09\u6F4E\u6F19\u6F1A\u6F27\u6F18\u6F3B\u6F12\u6EED\u6F0A"],
["e2a1", "\u6F36\u6F73\u6EF9\u6EEE\u6F2D\u6F40\u6F30\u6F3C\u6F35\u6EEB\u6F07\u6F0E\u6F43\u6F05\u6EFD\u6EF6\u6F39\u6F1C\u6EFC\u6F3A\u6F1F\u6F0D\u6F1E\u6F08\u6F21\u7187\u7190\u7189\u7180\u7185\u7182\u718F\u717B\u7186\u7181\u7197\u7244\u7253\u7297\u7295\u7293\u7343\u734D\u7351\u734C\u7462\u7473\u7471\u7475\u7472\u7467\u746E\u7500\u7502\u7503\u757D\u7590\u7616\u7608\u760C\u7615\u7611\u760A\u7614\u76B8\u7781\u777C\u7785\u7782\u776E\u7780\u776F\u777E\u7783\u78B2\u78AA\u78B4\u78AD\u78A8\u787E\u78AB\u789E\u78A5\u78A0\u78AC\u78A2\u78A4\u7998\u798A\u798B\u7996\u7995\u7994\u7993"],
["e340", "\u7997\u7988\u7992\u7990\u7A2B\u7A4A\u7A30\u7A2F\u7A28\u7A26\u7AA8\u7AAB\u7AAC\u7AEE\u7B88\u7B9C\u7B8A\u7B91\u7B90\u7B96\u7B8D\u7B8C\u7B9B\u7B8E\u7B85\u7B98\u5284\u7B99\u7BA4\u7B82\u7CBB\u7CBF\u7CBC\u7CBA\u7DA7\u7DB7\u7DC2\u7DA3\u7DAA\u7DC1\u7DC0\u7DC5\u7D9D\u7DCE\u7DC4\u7DC6\u7DCB\u7DCC\u7DAF\u7DB9\u7D96\u7DBC\u7D9F\u7DA6\u7DAE\u7DA9\u7DA1\u7DC9\u7F73\u7FE2\u7FE3\u7FE5\u7FDE"],
["e3a1", "\u8024\u805D\u805C\u8189\u8186\u8183\u8187\u818D\u818C\u818B\u8215\u8497\u84A4\u84A1\u849F\u84BA\u84CE\u84C2\u84AC\u84AE\u84AB\u84B9\u84B4\u84C1\u84CD\u84AA\u849A\u84B1\u84D0\u849D\u84A7\u84BB\u84A2\u8494\u84C7\u84CC\u849B\u84A9\u84AF\u84A8\u84D6\u8498\u84B6\u84CF\u84A0\u84D7\u84D4\u84D2\u84DB\u84B0\u8491\u8661\u8733\u8723\u8728\u876B\u8740\u872E\u871E\u8721\u8719\u871B\u8743\u872C\u8741\u873E\u8746\u8720\u8732\u872A\u872D\u873C\u8712\u873A\u8731\u8735\u8742\u8726\u8727\u8738\u8724\u871A\u8730\u8711\u88F7\u88E7\u88F1\u88F2\u88FA\u88FE\u88EE\u88FC\u88F6\u88FB"],
["e440", "\u88F0\u88EC\u88EB\u899D\u89A1\u899F\u899E\u89E9\u89EB\u89E8\u8AAB\u8A99\u8A8B\u8A92\u8A8F\u8A96\u8C3D\u8C68\u8C69\u8CD5\u8CCF\u8CD7\u8D96\u8E09\u8E02\u8DFF\u8E0D\u8DFD\u8E0A\u8E03\u8E07\u8E06\u8E05\u8DFE\u8E00\u8E04\u8F10\u8F11\u8F0E\u8F0D\u9123\u911C\u9120\u9122\u911F\u911D\u911A\u9124\u9121\u911B\u917A\u9172\u9179\u9173\u92A5\u92A4\u9276\u929B\u927A\u92A0\u9294\u92AA\u928D"],
["e4a1", "\u92A6\u929A\u92AB\u9279\u9297\u927F\u92A3\u92EE\u928E\u9282\u9295\u92A2\u927D\u9288\u92A1\u928A\u9286\u928C\u9299\u92A7\u927E\u9287\u92A9\u929D\u928B\u922D\u969E\u96A1\u96FF\u9758\u977D\u977A\u977E\u9783\u9780\u9782\u977B\u9784\u9781\u977F\u97CE\u97CD\u9816\u98AD\u98AE\u9902\u9900\u9907\u999D\u999C\u99C3\u99B9\u99BB\u99BA\u99C2\u99BD\u99C7\u9AB1\u9AE3\u9AE7\u9B3E\u9B3F\u9B60\u9B61\u9B5F\u9CF1\u9CF2\u9CF5\u9EA7\u50FF\u5103\u5130\u50F8\u5106\u5107\u50F6\u50FE\u510B\u510C\u50FD\u510A\u528B\u528C\u52F1\u52EF\u5648\u5642\u564C\u5635\u5641\u564A\u5649\u5646\u5658"],
["e540", "\u565A\u5640\u5633\u563D\u562C\u563E\u5638\u562A\u563A\u571A\u58AB\u589D\u58B1\u58A0\u58A3\u58AF\u58AC\u58A5\u58A1\u58FF\u5AFF\u5AF4\u5AFD\u5AF7\u5AF6\u5B03\u5AF8\u5B02\u5AF9\u5B01\u5B07\u5B05\u5B0F\u5C67\u5D99\u5D97\u5D9F\u5D92\u5DA2\u5D93\u5D95\u5DA0\u5D9C\u5DA1\u5D9A\u5D9E\u5E69\u5E5D\u5E60\u5E5C\u7DF3\u5EDB\u5EDE\u5EE1\u5F49\u5FB2\u618B\u6183\u6179\u61B1\u61B0\u61A2\u6189"],
["e5a1", "\u619B\u6193\u61AF\u61AD\u619F\u6192\u61AA\u61A1\u618D\u6166\u61B3\u622D\u646E\u6470\u6496\u64A0\u6485\u6497\u649C\u648F\u648B\u648A\u648C\u64A3\u649F\u6468\u64B1\u6498\u6576\u657A\u6579\u657B\u65B2\u65B3\u66B5\u66B0\u66A9\u66B2\u66B7\u66AA\u66AF\u6A00\u6A06\u6A17\u69E5\u69F8\u6A15\u69F1\u69E4\u6A20\u69FF\u69EC\u69E2\u6A1B\u6A1D\u69FE\u6A27\u69F2\u69EE\u6A14\u69F7\u69E7\u6A40\u6A08\u69E6\u69FB\u6A0D\u69FC\u69EB\u6A09\u6A04\u6A18\u6A25\u6A0F\u69F6\u6A26\u6A07\u69F4\u6A16\u6B51\u6BA5\u6BA3\u6BA2\u6BA6\u6C01\u6C00\u6BFF\u6C02\u6F41\u6F26\u6F7E\u6F87\u6FC6\u6F92"],
["e640", "\u6F8D\u6F89\u6F8C\u6F62\u6F4F\u6F85\u6F5A\u6F96\u6F76\u6F6C\u6F82\u6F55\u6F72\u6F52\u6F50\u6F57\u6F94\u6F93\u6F5D\u6F00\u6F61\u6F6B\u6F7D\u6F67\u6F90\u6F53\u6F8B\u6F69\u6F7F\u6F95\u6F63\u6F77\u6F6A\u6F7B\u71B2\u71AF\u719B\u71B0\u71A0\u719A\u71A9\u71B5\u719D\u71A5\u719E\u71A4\u71A1\u71AA\u719C\u71A7\u71B3\u7298\u729A\u7358\u7352\u735E\u735F\u7360\u735D\u735B\u7361\u735A\u7359"],
["e6a1", "\u7362\u7487\u7489\u748A\u7486\u7481\u747D\u7485\u7488\u747C\u7479\u7508\u7507\u757E\u7625\u761E\u7619\u761D\u761C\u7623\u761A\u7628\u761B\u769C\u769D\u769E\u769B\u778D\u778F\u7789\u7788\u78CD\u78BB\u78CF\u78CC\u78D1\u78CE\u78D4\u78C8\u78C3\u78C4\u78C9\u799A\u79A1\u79A0\u799C\u79A2\u799B\u6B76\u7A39\u7AB2\u7AB4\u7AB3\u7BB7\u7BCB\u7BBE\u7BAC\u7BCE\u7BAF\u7BB9\u7BCA\u7BB5\u7CC5\u7CC8\u7CCC\u7CCB\u7DF7\u7DDB\u7DEA\u7DE7\u7DD7\u7DE1\u7E03\u7DFA\u7DE6\u7DF6\u7DF1\u7DF0\u7DEE\u7DDF\u7F76\u7FAC\u7FB0\u7FAD\u7FED\u7FEB\u7FEA\u7FEC\u7FE6\u7FE8\u8064\u8067\u81A3\u819F"],
["e740", "\u819E\u8195\u81A2\u8199\u8197\u8216\u824F\u8253\u8252\u8250\u824E\u8251\u8524\u853B\u850F\u8500\u8529\u850E\u8509\u850D\u851F\u850A\u8527\u851C\u84FB\u852B\u84FA\u8508\u850C\u84F4\u852A\u84F2\u8515\u84F7\u84EB\u84F3\u84FC\u8512\u84EA\u84E9\u8516\u84FE\u8528\u851D\u852E\u8502\u84FD\u851E\u84F6\u8531\u8526\u84E7\u84E8\u84F0\u84EF\u84F9\u8518\u8520\u8530\u850B\u8519\u852F\u8662"],
["e7a1", "\u8756\u8763\u8764\u8777\u87E1\u8773\u8758\u8754\u875B\u8752\u8761\u875A\u8751\u875E\u876D\u876A\u8750\u874E\u875F\u875D\u876F\u876C\u877A\u876E\u875C\u8765\u874F\u877B\u8775\u8762\u8767\u8769\u885A\u8905\u890C\u8914\u890B\u8917\u8918\u8919\u8906\u8916\u8911\u890E\u8909\u89A2\u89A4\u89A3\u89ED\u89F0\u89EC\u8ACF\u8AC6\u8AB8\u8AD3\u8AD1\u8AD4\u8AD5\u8ABB\u8AD7\u8ABE\u8AC0\u8AC5\u8AD8\u8AC3\u8ABA\u8ABD\u8AD9\u8C3E\u8C4D\u8C8F\u8CE5\u8CDF\u8CD9\u8CE8\u8CDA\u8CDD\u8CE7\u8DA0\u8D9C\u8DA1\u8D9B\u8E20\u8E23\u8E25\u8E24\u8E2E\u8E15\u8E1B\u8E16\u8E11\u8E19\u8E26\u8E27"],
["e840", "\u8E14\u8E12\u8E18\u8E13\u8E1C\u8E17\u8E1A\u8F2C\u8F24\u8F18\u8F1A\u8F20\u8F23\u8F16\u8F17\u9073\u9070\u906F\u9067\u906B\u912F\u912B\u9129\u912A\u9132\u9126\u912E\u9185\u9186\u918A\u9181\u9182\u9184\u9180\u92D0\u92C3\u92C4\u92C0\u92D9\u92B6\u92CF\u92F1\u92DF\u92D8\u92E9\u92D7\u92DD\u92CC\u92EF\u92C2\u92E8\u92CA\u92C8\u92CE\u92E6\u92CD\u92D5\u92C9\u92E0\u92DE\u92E7\u92D1\u92D3"],
["e8a1", "\u92B5\u92E1\u92C6\u92B4\u957C\u95AC\u95AB\u95AE\u95B0\u96A4\u96A2\u96D3\u9705\u9708\u9702\u975A\u978A\u978E\u9788\u97D0\u97CF\u981E\u981D\u9826\u9829\u9828\u9820\u981B\u9827\u98B2\u9908\u98FA\u9911\u9914\u9916\u9917\u9915\u99DC\u99CD\u99CF\u99D3\u99D4\u99CE\u99C9\u99D6\u99D8\u99CB\u99D7\u99CC\u9AB3\u9AEC\u9AEB\u9AF3\u9AF2\u9AF1\u9B46\u9B43\u9B67\u9B74\u9B71\u9B66\u9B76\u9B75\u9B70\u9B68\u9B64\u9B6C\u9CFC\u9CFA\u9CFD\u9CFF\u9CF7\u9D07\u9D00\u9CF9\u9CFB\u9D08\u9D05\u9D04\u9E83\u9ED3\u9F0F\u9F10\u511C\u5113\u5117\u511A\u5111\u51DE\u5334\u53E1\u5670\u5660\u566E"],
["e940", "\u5673\u5666\u5663\u566D\u5672\u565E\u5677\u571C\u571B\u58C8\u58BD\u58C9\u58BF\u58BA\u58C2\u58BC\u58C6\u5B17\u5B19\u5B1B\u5B21\u5B14\u5B13\u5B10\u5B16\u5B28\u5B1A\u5B20\u5B1E\u5BEF\u5DAC\u5DB1\u5DA9\u5DA7\u5DB5\u5DB0\u5DAE\u5DAA\u5DA8\u5DB2\u5DAD\u5DAF\u5DB4\u5E67\u5E68\u5E66\u5E6F\u5EE9\u5EE7\u5EE6\u5EE8\u5EE5\u5F4B\u5FBC\u619D\u61A8\u6196\u61C5\u61B4\u61C6\u61C1\u61CC\u61BA"],
["e9a1", "\u61BF\u61B8\u618C\u64D7\u64D6\u64D0\u64CF\u64C9\u64BD\u6489\u64C3\u64DB\u64F3\u64D9\u6533\u657F\u657C\u65A2\u66C8\u66BE\u66C0\u66CA\u66CB\u66CF\u66BD\u66BB\u66BA\u66CC\u6723\u6A34\u6A66\u6A49\u6A67\u6A32\u6A68\u6A3E\u6A5D\u6A6D\u6A76\u6A5B\u6A51\u6A28\u6A5A\u6A3B\u6A3F\u6A41\u6A6A\u6A64\u6A50\u6A4F\u6A54\u6A6F\u6A69\u6A60\u6A3C\u6A5E\u6A56\u6A55\u6A4D\u6A4E\u6A46\u6B55\u6B54\u6B56\u6BA7\u6BAA\u6BAB\u6BC8\u6BC7\u6C04\u6C03\u6C06\u6FAD\u6FCB\u6FA3\u6FC7\u6FBC\u6FCE\u6FC8\u6F5E\u6FC4\u6FBD\u6F9E\u6FCA\u6FA8\u7004\u6FA5\u6FAE\u6FBA\u6FAC\u6FAA\u6FCF\u6FBF\u6FB8"],
["ea40", "\u6FA2\u6FC9\u6FAB\u6FCD\u6FAF\u6FB2\u6FB0\u71C5\u71C2\u71BF\u71B8\u71D6\u71C0\u71C1\u71CB\u71D4\u71CA\u71C7\u71CF\u71BD\u71D8\u71BC\u71C6\u71DA\u71DB\u729D\u729E\u7369\u7366\u7367\u736C\u7365\u736B\u736A\u747F\u749A\u74A0\u7494\u7492\u7495\u74A1\u750B\u7580\u762F\u762D\u7631\u763D\u7633\u763C\u7635\u7632\u7630\u76BB\u76E6\u779A\u779D\u77A1\u779C\u779B\u77A2\u77A3\u7795\u7799"],
["eaa1", "\u7797\u78DD\u78E9\u78E5\u78EA\u78DE\u78E3\u78DB\u78E1\u78E2\u78ED\u78DF\u78E0\u79A4\u7A44\u7A48\u7A47\u7AB6\u7AB8\u7AB5\u7AB1\u7AB7\u7BDE\u7BE3\u7BE7\u7BDD\u7BD5\u7BE5\u7BDA\u7BE8\u7BF9\u7BD4\u7BEA\u7BE2\u7BDC\u7BEB\u7BD8\u7BDF\u7CD2\u7CD4\u7CD7\u7CD0\u7CD1\u7E12\u7E21\u7E17\u7E0C\u7E1F\u7E20\u7E13\u7E0E\u7E1C\u7E15\u7E1A\u7E22\u7E0B\u7E0F\u7E16\u7E0D\u7E14\u7E25\u7E24\u7F43\u7F7B\u7F7C\u7F7A\u7FB1\u7FEF\u802A\u8029\u806C\u81B1\u81A6\u81AE\u81B9\u81B5\u81AB\u81B0\u81AC\u81B4\u81B2\u81B7\u81A7\u81F2\u8255\u8256\u8257\u8556\u8545\u856B\u854D\u8553\u8561\u8558"],
["eb40", "\u8540\u8546\u8564\u8541\u8562\u8544\u8551\u8547\u8563\u853E\u855B\u8571\u854E\u856E\u8575\u8555\u8567\u8560\u858C\u8566\u855D\u8554\u8565\u856C\u8663\u8665\u8664\u879B\u878F\u8797\u8793\u8792\u8788\u8781\u8796\u8798\u8779\u8787\u87A3\u8785\u8790\u8791\u879D\u8784\u8794\u879C\u879A\u8789\u891E\u8926\u8930\u892D\u892E\u8927\u8931\u8922\u8929\u8923\u892F\u892C\u891F\u89F1\u8AE0"],
["eba1", "\u8AE2\u8AF2\u8AF4\u8AF5\u8ADD\u8B14\u8AE4\u8ADF\u8AF0\u8AC8\u8ADE\u8AE1\u8AE8\u8AFF\u8AEF\u8AFB\u8C91\u8C92\u8C90\u8CF5\u8CEE\u8CF1\u8CF0\u8CF3\u8D6C\u8D6E\u8DA5\u8DA7\u8E33\u8E3E\u8E38\u8E40\u8E45\u8E36\u8E3C\u8E3D\u8E41\u8E30\u8E3F\u8EBD\u8F36\u8F2E\u8F35\u8F32\u8F39\u8F37\u8F34\u9076\u9079\u907B\u9086\u90FA\u9133\u9135\u9136\u9193\u9190\u9191\u918D\u918F\u9327\u931E\u9308\u931F\u9306\u930F\u937A\u9338\u933C\u931B\u9323\u9312\u9301\u9346\u932D\u930E\u930D\u92CB\u931D\u92FA\u9325\u9313\u92F9\u92F7\u9334\u9302\u9324\u92FF\u9329\u9339\u9335\u932A\u9314\u930C"],
["ec40", "\u930B\u92FE\u9309\u9300\u92FB\u9316\u95BC\u95CD\u95BE\u95B9\u95BA\u95B6\u95BF\u95B5\u95BD\u96A9\u96D4\u970B\u9712\u9710\u9799\u9797\u9794\u97F0\u97F8\u9835\u982F\u9832\u9924\u991F\u9927\u9929\u999E\u99EE\u99EC\u99E5\u99E4\u99F0\u99E3\u99EA\u99E9\u99E7\u9AB9\u9ABF\u9AB4\u9ABB\u9AF6\u9AFA\u9AF9\u9AF7\u9B33\u9B80\u9B85\u9B87\u9B7C\u9B7E\u9B7B\u9B82\u9B93\u9B92\u9B90\u9B7A\u9B95"],
["eca1", "\u9B7D\u9B88\u9D25\u9D17\u9D20\u9D1E\u9D14\u9D29\u9D1D\u9D18\u9D22\u9D10\u9D19\u9D1F\u9E88\u9E86\u9E87\u9EAE\u9EAD\u9ED5\u9ED6\u9EFA\u9F12\u9F3D\u5126\u5125\u5122\u5124\u5120\u5129\u52F4\u5693\u568C\u568D\u5686\u5684\u5683\u567E\u5682\u567F\u5681\u58D6\u58D4\u58CF\u58D2\u5B2D\u5B25\u5B32\u5B23\u5B2C\u5B27\u5B26\u5B2F\u5B2E\u5B7B\u5BF1\u5BF2\u5DB7\u5E6C\u5E6A\u5FBE\u5FBB\u61C3\u61B5\u61BC\u61E7\u61E0\u61E5\u61E4\u61E8\u61DE\u64EF\u64E9\u64E3\u64EB\u64E4\u64E8\u6581\u6580\u65B6\u65DA\u66D2\u6A8D\u6A96\u6A81\u6AA5\u6A89\u6A9F\u6A9B\u6AA1\u6A9E\u6A87\u6A93\u6A8E"],
["ed40", "\u6A95\u6A83\u6AA8\u6AA4\u6A91\u6A7F\u6AA6\u6A9A\u6A85\u6A8C\u6A92\u6B5B\u6BAD\u6C09\u6FCC\u6FA9\u6FF4\u6FD4\u6FE3\u6FDC\u6FED\u6FE7\u6FE6\u6FDE\u6FF2\u6FDD\u6FE2\u6FE8\u71E1\u71F1\u71E8\u71F2\u71E4\u71F0\u71E2\u7373\u736E\u736F\u7497\u74B2\u74AB\u7490\u74AA\u74AD\u74B1\u74A5\u74AF\u7510\u7511\u7512\u750F\u7584\u7643\u7648\u7649\u7647\u76A4\u76E9\u77B5\u77AB\u77B2\u77B7\u77B6"],
["eda1", "\u77B4\u77B1\u77A8\u77F0\u78F3\u78FD\u7902\u78FB\u78FC\u78F2\u7905\u78F9\u78FE\u7904\u79AB\u79A8\u7A5C\u7A5B\u7A56\u7A58\u7A54\u7A5A\u7ABE\u7AC0\u7AC1\u7C05\u7C0F\u7BF2\u7C00\u7BFF\u7BFB\u7C0E\u7BF4\u7C0B\u7BF3\u7C02\u7C09\u7C03\u7C01\u7BF8\u7BFD\u7C06\u7BF0\u7BF1\u7C10\u7C0A\u7CE8\u7E2D\u7E3C\u7E42\u7E33\u9848\u7E38\u7E2A\u7E49\u7E40\u7E47\u7E29\u7E4C\u7E30\u7E3B\u7E36\u7E44\u7E3A\u7F45\u7F7F\u7F7E\u7F7D\u7FF4\u7FF2\u802C\u81BB\u81C4\u81CC\u81CA\u81C5\u81C7\u81BC\u81E9\u825B\u825A\u825C\u8583\u8580\u858F\u85A7\u8595\u85A0\u858B\u85A3\u857B\u85A4\u859A\u859E"],
["ee40", "\u8577\u857C\u8589\u85A1\u857A\u8578\u8557\u858E\u8596\u8586\u858D\u8599\u859D\u8581\u85A2\u8582\u8588\u8585\u8579\u8576\u8598\u8590\u859F\u8668\u87BE\u87AA\u87AD\u87C5\u87B0\u87AC\u87B9\u87B5\u87BC\u87AE\u87C9\u87C3\u87C2\u87CC\u87B7\u87AF\u87C4\u87CA\u87B4\u87B6\u87BF\u87B8\u87BD\u87DE\u87B2\u8935\u8933\u893C\u893E\u8941\u8952\u8937\u8942\u89AD\u89AF\u89AE\u89F2\u89F3\u8B1E"],
["eea1", "\u8B18\u8B16\u8B11\u8B05\u8B0B\u8B22\u8B0F\u8B12\u8B15\u8B07\u8B0D\u8B08\u8B06\u8B1C\u8B13\u8B1A\u8C4F\u8C70\u8C72\u8C71\u8C6F\u8C95\u8C94\u8CF9\u8D6F\u8E4E\u8E4D\u8E53\u8E50\u8E4C\u8E47\u8F43\u8F40\u9085\u907E\u9138\u919A\u91A2\u919B\u9199\u919F\u91A1\u919D\u91A0\u93A1\u9383\u93AF\u9364\u9356\u9347\u937C\u9358\u935C\u9376\u9349\u9350\u9351\u9360\u936D\u938F\u934C\u936A\u9379\u9357\u9355\u9352\u934F\u9371\u9377\u937B\u9361\u935E\u9363\u9367\u9380\u934E\u9359\u95C7\u95C0\u95C9\u95C3\u95C5\u95B7\u96AE\u96B0\u96AC\u9720\u971F\u9718\u971D\u9719\u979A\u97A1\u979C"],
["ef40", "\u979E\u979D\u97D5\u97D4\u97F1\u9841\u9844\u984A\u9849\u9845\u9843\u9925\u992B\u992C\u992A\u9933\u9932\u992F\u992D\u9931\u9930\u9998\u99A3\u99A1\u9A02\u99FA\u99F4\u99F7\u99F9\u99F8\u99F6\u99FB\u99FD\u99FE\u99FC\u9A03\u9ABE\u9AFE\u9AFD\u9B01\u9AFC\u9B48\u9B9A\u9BA8\u9B9E\u9B9B\u9BA6\u9BA1\u9BA5\u9BA4\u9B86\u9BA2\u9BA0\u9BAF\u9D33\u9D41\u9D67\u9D36\u9D2E\u9D2F\u9D31\u9D38\u9D30"],
["efa1", "\u9D45\u9D42\u9D43\u9D3E\u9D37\u9D40\u9D3D\u7FF5\u9D2D\u9E8A\u9E89\u9E8D\u9EB0\u9EC8\u9EDA\u9EFB\u9EFF\u9F24\u9F23\u9F22\u9F54\u9FA0\u5131\u512D\u512E\u5698\u569C\u5697\u569A\u569D\u5699\u5970\u5B3C\u5C69\u5C6A\u5DC0\u5E6D\u5E6E\u61D8\u61DF\u61ED\u61EE\u61F1\u61EA\u61F0\u61EB\u61D6\u61E9\u64FF\u6504\u64FD\u64F8\u6501\u6503\u64FC\u6594\u65DB\u66DA\u66DB\u66D8\u6AC5\u6AB9\u6ABD\u6AE1\u6AC6\u6ABA\u6AB6\u6AB7\u6AC7\u6AB4\u6AAD\u6B5E\u6BC9\u6C0B\u7007\u700C\u700D\u7001\u7005\u7014\u700E\u6FFF\u7000\u6FFB\u7026\u6FFC\u6FF7\u700A\u7201\u71FF\u71F9\u7203\u71FD\u7376"],
["f040", "\u74B8\u74C0\u74B5\u74C1\u74BE\u74B6\u74BB\u74C2\u7514\u7513\u765C\u7664\u7659\u7650\u7653\u7657\u765A\u76A6\u76BD\u76EC\u77C2\u77BA\u78FF\u790C\u7913\u7914\u7909\u7910\u7912\u7911\u79AD\u79AC\u7A5F\u7C1C\u7C29\u7C19\u7C20\u7C1F\u7C2D\u7C1D\u7C26\u7C28\u7C22\u7C25\u7C30\u7E5C\u7E50\u7E56\u7E63\u7E58\u7E62\u7E5F\u7E51\u7E60\u7E57\u7E53\u7FB5\u7FB3\u7FF7\u7FF8\u8075\u81D1\u81D2"],
["f0a1", "\u81D0\u825F\u825E\u85B4\u85C6\u85C0\u85C3\u85C2\u85B3\u85B5\u85BD\u85C7\u85C4\u85BF\u85CB\u85CE\u85C8\u85C5\u85B1\u85B6\u85D2\u8624\u85B8\u85B7\u85BE\u8669\u87E7\u87E6\u87E2\u87DB\u87EB\u87EA\u87E5\u87DF\u87F3\u87E4\u87D4\u87DC\u87D3\u87ED\u87D8\u87E3\u87A4\u87D7\u87D9\u8801\u87F4\u87E8\u87DD\u8953\u894B\u894F\u894C\u8946\u8950\u8951\u8949\u8B2A\u8B27\u8B23\u8B33\u8B30\u8B35\u8B47\u8B2F\u8B3C\u8B3E\u8B31\u8B25\u8B37\u8B26\u8B36\u8B2E\u8B24\u8B3B\u8B3D\u8B3A\u8C42\u8C75\u8C99\u8C98\u8C97\u8CFE\u8D04\u8D02\u8D00\u8E5C\u8E62\u8E60\u8E57\u8E56\u8E5E\u8E65\u8E67"],
["f140", "\u8E5B\u8E5A\u8E61\u8E5D\u8E69\u8E54\u8F46\u8F47\u8F48\u8F4B\u9128\u913A\u913B\u913E\u91A8\u91A5\u91A7\u91AF\u91AA\u93B5\u938C\u9392\u93B7\u939B\u939D\u9389\u93A7\u938E\u93AA\u939E\u93A6\u9395\u9388\u9399\u939F\u938D\u93B1\u9391\u93B2\u93A4\u93A8\u93B4\u93A3\u93A5\u95D2\u95D3\u95D1\u96B3\u96D7\u96DA\u5DC2\u96DF\u96D8\u96DD\u9723\u9722\u9725\u97AC\u97AE\u97A8\u97AB\u97A4\u97AA"],
["f1a1", "\u97A2\u97A5\u97D7\u97D9\u97D6\u97D8\u97FA\u9850\u9851\u9852\u98B8\u9941\u993C\u993A\u9A0F\u9A0B\u9A09\u9A0D\u9A04\u9A11\u9A0A\u9A05\u9A07\u9A06\u9AC0\u9ADC\u9B08\u9B04\u9B05\u9B29\u9B35\u9B4A\u9B4C\u9B4B\u9BC7\u9BC6\u9BC3\u9BBF\u9BC1\u9BB5\u9BB8\u9BD3\u9BB6\u9BC4\u9BB9\u9BBD\u9D5C\u9D53\u9D4F\u9D4A\u9D5B\u9D4B\u9D59\u9D56\u9D4C\u9D57\u9D52\u9D54\u9D5F\u9D58\u9D5A\u9E8E\u9E8C\u9EDF\u9F01\u9F00\u9F16\u9F25\u9F2B\u9F2A\u9F29\u9F28\u9F4C\u9F55\u5134\u5135\u5296\u52F7\u53B4\u56AB\u56AD\u56A6\u56A7\u56AA\u56AC\u58DA\u58DD\u58DB\u5912\u5B3D\u5B3E\u5B3F\u5DC3\u5E70"],
["f240", "\u5FBF\u61FB\u6507\u6510\u650D\u6509\u650C\u650E\u6584\u65DE\u65DD\u66DE\u6AE7\u6AE0\u6ACC\u6AD1\u6AD9\u6ACB\u6ADF\u6ADC\u6AD0\u6AEB\u6ACF\u6ACD\u6ADE\u6B60\u6BB0\u6C0C\u7019\u7027\u7020\u7016\u702B\u7021\u7022\u7023\u7029\u7017\u7024\u701C\u702A\u720C\u720A\u7207\u7202\u7205\u72A5\u72A6\u72A4\u72A3\u72A1\u74CB\u74C5\u74B7\u74C3\u7516\u7660\u77C9\u77CA\u77C4\u77F1\u791D\u791B"],
["f2a1", "\u7921\u791C\u7917\u791E\u79B0\u7A67\u7A68\u7C33\u7C3C\u7C39\u7C2C\u7C3B\u7CEC\u7CEA\u7E76\u7E75\u7E78\u7E70\u7E77\u7E6F\u7E7A\u7E72\u7E74\u7E68\u7F4B\u7F4A\u7F83\u7F86\u7FB7\u7FFD\u7FFE\u8078\u81D7\u81D5\u8264\u8261\u8263\u85EB\u85F1\u85ED\u85D9\u85E1\u85E8\u85DA\u85D7\u85EC\u85F2\u85F8\u85D8\u85DF\u85E3\u85DC\u85D1\u85F0\u85E6\u85EF\u85DE\u85E2\u8800\u87FA\u8803\u87F6\u87F7\u8809\u880C\u880B\u8806\u87FC\u8808\u87FF\u880A\u8802\u8962\u895A\u895B\u8957\u8961\u895C\u8958\u895D\u8959\u8988\u89B7\u89B6\u89F6\u8B50\u8B48\u8B4A\u8B40\u8B53\u8B56\u8B54\u8B4B\u8B55"],
["f340", "\u8B51\u8B42\u8B52\u8B57\u8C43\u8C77\u8C76\u8C9A\u8D06\u8D07\u8D09\u8DAC\u8DAA\u8DAD\u8DAB\u8E6D\u8E78\u8E73\u8E6A\u8E6F\u8E7B\u8EC2\u8F52\u8F51\u8F4F\u8F50\u8F53\u8FB4\u9140\u913F\u91B0\u91AD\u93DE\u93C7\u93CF\u93C2\u93DA\u93D0\u93F9\u93EC\u93CC\u93D9\u93A9\u93E6\u93CA\u93D4\u93EE\u93E3\u93D5\u93C4\u93CE\u93C0\u93D2\u93E7\u957D\u95DA\u95DB\u96E1\u9729\u972B\u972C\u9728\u9726"],
["f3a1", "\u97B3\u97B7\u97B6\u97DD\u97DE\u97DF\u985C\u9859\u985D\u9857\u98BF\u98BD\u98BB\u98BE\u9948\u9947\u9943\u99A6\u99A7\u9A1A\u9A15\u9A25\u9A1D\u9A24\u9A1B\u9A22\u9A20\u9A27\u9A23\u9A1E\u9A1C\u9A14\u9AC2\u9B0B\u9B0A\u9B0E\u9B0C\u9B37\u9BEA\u9BEB\u9BE0\u9BDE\u9BE4\u9BE6\u9BE2\u9BF0\u9BD4\u9BD7\u9BEC\u9BDC\u9BD9\u9BE5\u9BD5\u9BE1\u9BDA\u9D77\u9D81\u9D8A\u9D84\u9D88\u9D71\u9D80\u9D78\u9D86\u9D8B\u9D8C\u9D7D\u9D6B\u9D74\u9D75\u9D70\u9D69\u9D85\u9D73\u9D7B\u9D82\u9D6F\u9D79\u9D7F\u9D87\u9D68\u9E94\u9E91\u9EC0\u9EFC\u9F2D\u9F40\u9F41\u9F4D\u9F56\u9F57\u9F58\u5337\u56B2"],
["f440", "\u56B5\u56B3\u58E3\u5B45\u5DC6\u5DC7\u5EEE\u5EEF\u5FC0\u5FC1\u61F9\u6517\u6516\u6515\u6513\u65DF\u66E8\u66E3\u66E4\u6AF3\u6AF0\u6AEA\u6AE8\u6AF9\u6AF1\u6AEE\u6AEF\u703C\u7035\u702F\u7037\u7034\u7031\u7042\u7038\u703F\u703A\u7039\u7040\u703B\u7033\u7041\u7213\u7214\u72A8\u737D\u737C\u74BA\u76AB\u76AA\u76BE\u76ED\u77CC\u77CE\u77CF\u77CD\u77F2\u7925\u7923\u7927\u7928\u7924\u7929"],
["f4a1", "\u79B2\u7A6E\u7A6C\u7A6D\u7AF7\u7C49\u7C48\u7C4A\u7C47\u7C45\u7CEE\u7E7B\u7E7E\u7E81\u7E80\u7FBA\u7FFF\u8079\u81DB\u81D9\u820B\u8268\u8269\u8622\u85FF\u8601\u85FE\u861B\u8600\u85F6\u8604\u8609\u8605\u860C\u85FD\u8819\u8810\u8811\u8817\u8813\u8816\u8963\u8966\u89B9\u89F7\u8B60\u8B6A\u8B5D\u8B68\u8B63\u8B65\u8B67\u8B6D\u8DAE\u8E86\u8E88\u8E84\u8F59\u8F56\u8F57\u8F55\u8F58\u8F5A\u908D\u9143\u9141\u91B7\u91B5\u91B2\u91B3\u940B\u9413\u93FB\u9420\u940F\u9414\u93FE\u9415\u9410\u9428\u9419\u940D\u93F5\u9400\u93F7\u9407\u940E\u9416\u9412\u93FA\u9409\u93F8\u940A\u93FF"],
["f540", "\u93FC\u940C\u93F6\u9411\u9406\u95DE\u95E0\u95DF\u972E\u972F\u97B9\u97BB\u97FD\u97FE\u9860\u9862\u9863\u985F\u98C1\u98C2\u9950\u994E\u9959\u994C\u994B\u9953\u9A32\u9A34\u9A31\u9A2C\u9A2A\u9A36\u9A29\u9A2E\u9A38\u9A2D\u9AC7\u9ACA\u9AC6\u9B10\u9B12\u9B11\u9C0B\u9C08\u9BF7\u9C05\u9C12\u9BF8\u9C40\u9C07\u9C0E\u9C06\u9C17\u9C14\u9C09\u9D9F\u9D99\u9DA4\u9D9D\u9D92\u9D98\u9D90\u9D9B"],
["f5a1", "\u9DA0\u9D94\u9D9C\u9DAA\u9D97\u9DA1\u9D9A\u9DA2\u9DA8\u9D9E\u9DA3\u9DBF\u9DA9\u9D96\u9DA6\u9DA7\u9E99\u9E9B\u9E9A\u9EE5\u9EE4\u9EE7\u9EE6\u9F30\u9F2E\u9F5B\u9F60\u9F5E\u9F5D\u9F59\u9F91\u513A\u5139\u5298\u5297\u56C3\u56BD\u56BE\u5B48\u5B47\u5DCB\u5DCF\u5EF1\u61FD\u651B\u6B02\u6AFC\u6B03\u6AF8\u6B00\u7043\u7044\u704A\u7048\u7049\u7045\u7046\u721D\u721A\u7219\u737E\u7517\u766A\u77D0\u792D\u7931\u792F\u7C54\u7C53\u7CF2\u7E8A\u7E87\u7E88\u7E8B\u7E86\u7E8D\u7F4D\u7FBB\u8030\u81DD\u8618\u862A\u8626\u861F\u8623\u861C\u8619\u8627\u862E\u8621\u8620\u8629\u861E\u8625"],
["f640", "\u8829\u881D\u881B\u8820\u8824\u881C\u882B\u884A\u896D\u8969\u896E\u896B\u89FA\u8B79\u8B78\u8B45\u8B7A\u8B7B\u8D10\u8D14\u8DAF\u8E8E\u8E8C\u8F5E\u8F5B\u8F5D\u9146\u9144\u9145\u91B9\u943F\u943B\u9436\u9429\u943D\u943C\u9430\u9439\u942A\u9437\u942C\u9440\u9431\u95E5\u95E4\u95E3\u9735\u973A\u97BF\u97E1\u9864\u98C9\u98C6\u98C0\u9958\u9956\u9A39\u9A3D\u9A46\u9A44\u9A42\u9A41\u9A3A"],
["f6a1", "\u9A3F\u9ACD\u9B15\u9B17\u9B18\u9B16\u9B3A\u9B52\u9C2B\u9C1D\u9C1C\u9C2C\u9C23\u9C28\u9C29\u9C24\u9C21\u9DB7\u9DB6\u9DBC\u9DC1\u9DC7\u9DCA\u9DCF\u9DBE\u9DC5\u9DC3\u9DBB\u9DB5\u9DCE\u9DB9\u9DBA\u9DAC\u9DC8\u9DB1\u9DAD\u9DCC\u9DB3\u9DCD\u9DB2\u9E7A\u9E9C\u9EEB\u9EEE\u9EED\u9F1B\u9F18\u9F1A\u9F31\u9F4E\u9F65\u9F64\u9F92\u4EB9\u56C6\u56C5\u56CB\u5971\u5B4B\u5B4C\u5DD5\u5DD1\u5EF2\u6521\u6520\u6526\u6522\u6B0B\u6B08\u6B09\u6C0D\u7055\u7056\u7057\u7052\u721E\u721F\u72A9\u737F\u74D8\u74D5\u74D9\u74D7\u766D\u76AD\u7935\u79B4\u7A70\u7A71\u7C57\u7C5C\u7C59\u7C5B\u7C5A"],
["f740", "\u7CF4\u7CF1\u7E91\u7F4F\u7F87\u81DE\u826B\u8634\u8635\u8633\u862C\u8632\u8636\u882C\u8828\u8826\u882A\u8825\u8971\u89BF\u89BE\u89FB\u8B7E\u8B84\u8B82\u8B86\u8B85\u8B7F\u8D15\u8E95\u8E94\u8E9A\u8E92\u8E90\u8E96\u8E97\u8F60\u8F62\u9147\u944C\u9450\u944A\u944B\u944F\u9447\u9445\u9448\u9449\u9446\u973F\u97E3\u986A\u9869\u98CB\u9954\u995B\u9A4E\u9A53\u9A54\u9A4C\u9A4F\u9A48\u9A4A"],
["f7a1", "\u9A49\u9A52\u9A50\u9AD0\u9B19\u9B2B\u9B3B\u9B56\u9B55\u9C46\u9C48\u9C3F\u9C44\u9C39\u9C33\u9C41\u9C3C\u9C37\u9C34\u9C32\u9C3D\u9C36\u9DDB\u9DD2\u9DDE\u9DDA\u9DCB\u9DD0\u9DDC\u9DD1\u9DDF\u9DE9\u9DD9\u9DD8\u9DD6\u9DF5\u9DD5\u9DDD\u9EB6\u9EF0\u9F35\u9F33\u9F32\u9F42\u9F6B\u9F95\u9FA2\u513D\u5299\u58E8\u58E7\u5972\u5B4D\u5DD8\u882F\u5F4F\u6201\u6203\u6204\u6529\u6525\u6596\u66EB\u6B11\u6B12\u6B0F\u6BCA\u705B\u705A\u7222\u7382\u7381\u7383\u7670\u77D4\u7C67\u7C66\u7E95\u826C\u863A\u8640\u8639\u863C\u8631\u863B\u863E\u8830\u8832\u882E\u8833\u8976\u8974\u8973\u89FE"],
["f840", "\u8B8C\u8B8E\u8B8B\u8B88\u8C45\u8D19\u8E98\u8F64\u8F63\u91BC\u9462\u9455\u945D\u9457\u945E\u97C4\u97C5\u9800\u9A56\u9A59\u9B1E\u9B1F\u9B20\u9C52\u9C58\u9C50\u9C4A\u9C4D\u9C4B\u9C55\u9C59\u9C4C\u9C4E\u9DFB\u9DF7\u9DEF\u9DE3\u9DEB\u9DF8\u9DE4\u9DF6\u9DE1\u9DEE\u9DE6\u9DF2\u9DF0\u9DE2\u9DEC\u9DF4\u9DF3\u9DE8\u9DED\u9EC2\u9ED0\u9EF2\u9EF3\u9F06\u9F1C\u9F38\u9F37\u9F36\u9F43\u9F4F"],
["f8a1", "\u9F71\u9F70\u9F6E\u9F6F\u56D3\u56CD\u5B4E\u5C6D\u652D\u66ED\u66EE\u6B13\u705F\u7061\u705D\u7060\u7223\u74DB\u74E5\u77D5\u7938\u79B7\u79B6\u7C6A\u7E97\u7F89\u826D\u8643\u8838\u8837\u8835\u884B\u8B94\u8B95\u8E9E\u8E9F\u8EA0\u8E9D\u91BE\u91BD\u91C2\u946B\u9468\u9469\u96E5\u9746\u9743\u9747\u97C7\u97E5\u9A5E\u9AD5\u9B59\u9C63\u9C67\u9C66\u9C62\u9C5E\u9C60\u9E02\u9DFE\u9E07\u9E03\u9E06\u9E05\u9E00\u9E01\u9E09\u9DFF\u9DFD\u9E04\u9EA0\u9F1E\u9F46\u9F74\u9F75\u9F76\u56D4\u652E\u65B8\u6B18\u6B19\u6B17\u6B1A\u7062\u7226\u72AA\u77D8\u77D9\u7939\u7C69\u7C6B\u7CF6\u7E9A"],
["f940", "\u7E98\u7E9B\u7E99\u81E0\u81E1\u8646\u8647\u8648\u8979\u897A\u897C\u897B\u89FF\u8B98\u8B99\u8EA5\u8EA4\u8EA3\u946E\u946D\u946F\u9471\u9473\u9749\u9872\u995F\u9C68\u9C6E\u9C6D\u9E0B\u9E0D\u9E10\u9E0F\u9E12\u9E11\u9EA1\u9EF5\u9F09\u9F47\u9F78\u9F7B\u9F7A\u9F79\u571E\u7066\u7C6F\u883C\u8DB2\u8EA6\u91C3\u9474\u9478\u9476\u9475\u9A60\u9C74\u9C73\u9C71\u9C75\u9E14\u9E13\u9EF6\u9F0A"],
["f9a1", "\u9FA4\u7068\u7065\u7CF7\u866A\u883E\u883D\u883F\u8B9E\u8C9C\u8EA9\u8EC9\u974B\u9873\u9874\u98CC\u9961\u99AB\u9A64\u9A66\u9A67\u9B24\u9E15\u9E17\u9F48\u6207\u6B1E\u7227\u864C\u8EA8\u9482\u9480\u9481\u9A69\u9A68\u9B2E\u9E19\u7229\u864B\u8B9F\u9483\u9C79\u9EB7\u7675\u9A6B\u9C7A\u9E1D\u7069\u706A\u9EA4\u9F7E\u9F49\u9F98\u7881\u92B9\u88CF\u58BB\u6052\u7CA7\u5AFA\u2554\u2566\u2557\u2560\u256C\u2563\u255A\u2569\u255D\u2552\u2564\u2555\u255E\u256A\u2561\u2558\u2567\u255B\u2553\u2565\u2556\u255F\u256B\u2562\u2559\u2568\u255C\u2551\u2550\u256D\u256E\u2570\u256F\u2593"]
];
}
});
var require_big5_added2 = __commonJS2({
"node_modules/raw-body/node_modules/iconv-lite/encodings/tables/big5-added.json"(exports2, module2) {
module2.exports = [
["8740", "\u43F0\u4C32\u4603\u45A6\u4578\u{27267}\u4D77\u45B3\u{27CB1}\u4CE2\u{27CC5}\u3B95\u4736\u4744\u4C47\u4C40\u{242BF}\u{23617}\u{27352}\u{26E8B}\u{270D2}\u4C57\u{2A351}\u474F\u45DA\u4C85\u{27C6C}\u4D07\u4AA4\u46A1\u{26B23}\u7225\u{25A54}\u{21A63}\u{23E06}\u{23F61}\u664D\u56FB"],
["8767", "\u7D95\u591D\u{28BB9}\u3DF4\u9734\u{27BEF}\u5BDB\u{21D5E}\u5AA4\u3625\u{29EB0}\u5AD1\u5BB7\u5CFC\u676E\u8593\u{29945}\u7461\u749D\u3875\u{21D53}\u{2369E}\u{26021}\u3EEC"],
["87a1", "\u{258DE}\u3AF5\u7AFC\u9F97\u{24161}\u{2890D}\u{231EA}\u{20A8A}\u{2325E}\u430A\u8484\u9F96\u942F\u4930\u8613\u5896\u974A\u9218\u79D0\u7A32\u6660\u6A29\u889D\u744C\u7BC5\u6782\u7A2C\u524F\u9046\u34E6\u73C4\u{25DB9}\u74C6\u9FC7\u57B3\u492F\u544C\u4131\u{2368E}\u5818\u7A72\u{27B65}\u8B8F\u46AE\u{26E88}\u4181\u{25D99}\u7BAE\u{224BC}\u9FC8\u{224C1}\u{224C9}\u{224CC}\u9FC9\u8504\u{235BB}\u40B4\u9FCA\u44E1\u{2ADFF}\u62C1\u706E\u9FCB"],
["8840", "\u31C0", 4, "\u{2010C}\u31C5\u{200D1}\u{200CD}\u31C6\u31C7\u{200CB}\u{21FE8}\u31C8\u{200CA}\u31C9\u31CA\u31CB\u31CC\u{2010E}\u31CD\u31CE\u0100\xC1\u01CD\xC0\u0112\xC9\u011A\xC8\u014C\xD3\u01D1\xD2\u0FFF\xCA\u0304\u1EBE\u0FFF\xCA\u030C\u1EC0\xCA\u0101\xE1\u01CE\xE0\u0251\u0113\xE9\u011B\xE8\u012B\xED\u01D0\xEC\u014D\xF3\u01D2\xF2\u016B\xFA\u01D4\xF9\u01D6\u01D8\u01DA"],
["88a1", "\u01DC\xFC\u0FFF\xEA\u0304\u1EBF\u0FFF\xEA\u030C\u1EC1\xEA\u0261\u23DA\u23DB"],
["8940", "\u{2A3A9}\u{21145}"],
["8943", "\u650A"],
["8946", "\u4E3D\u6EDD\u9D4E\u91DF"],
["894c", "\u{27735}\u6491\u4F1A\u4F28\u4FA8\u5156\u5174\u519C\u51E4\u52A1\u52A8\u533B\u534E\u53D1\u53D8\u56E2\u58F0\u5904\u5907\u5932\u5934\u5B66\u5B9E\u5B9F\u5C9A\u5E86\u603B\u6589\u67FE\u6804\u6865\u6D4E\u70BC\u7535\u7EA4\u7EAC\u7EBA\u7EC7\u7ECF\u7EDF\u7F06\u7F37\u827A\u82CF\u836F\u89C6\u8BBE\u8BE2\u8F66\u8F67\u8F6E"],
["89a1", "\u7411\u7CFC\u7DCD\u6946\u7AC9\u5227"],
["89ab", "\u918C\u78B8\u915E\u80BC"],
["89b0", "\u8D0B\u80F6\u{209E7}"],
["89b5", "\u809F\u9EC7\u4CCD\u9DC9\u9E0C\u4C3E\u{29DF6}\u{2700E}\u9E0A\u{2A133}\u35C1"],
["89c1", "\u6E9A\u823E\u7519"],
["89c5", "\u4911\u9A6C\u9A8F\u9F99\u7987\u{2846C}\u{21DCA}\u{205D0}\u{22AE6}\u4E24\u4E81\u4E80\u4E87\u4EBF\u4EEB\u4F37\u344C\u4FBD\u3E48\u5003\u5088\u347D\u3493\u34A5\u5186\u5905\u51DB\u51FC\u5205\u4E89\u5279\u5290\u5327\u35C7\u53A9\u3551\u53B0\u3553\u53C2\u5423\u356D\u3572\u3681\u5493\u54A3\u54B4\u54B9\u54D0\u54EF\u5518\u5523\u5528\u3598\u553F\u35A5\u35BF\u55D7\u35C5"],
["8a40", "\u{27D84}\u5525"],
["8a43", "\u{20C42}\u{20D15}\u{2512B}\u5590\u{22CC6}\u39EC\u{20341}\u8E46\u{24DB8}\u{294E5}\u4053\u{280BE}\u777A\u{22C38}\u3A34\u47D5\u{2815D}\u{269F2}\u{24DEA}\u64DD\u{20D7C}\u{20FB4}\u{20CD5}\u{210F4}\u648D\u8E7E\u{20E96}\u{20C0B}\u{20F64}\u{22CA9}\u{28256}\u{244D3}"],
["8a64", "\u{20D46}\u{29A4D}\u{280E9}\u47F4\u{24EA7}\u{22CC2}\u9AB2\u3A67\u{295F4}\u3FED\u3506\u{252C7}\u{297D4}\u{278C8}\u{22D44}\u9D6E\u9815"],
["8a76", "\u43D9\u{260A5}\u64B4\u54E3\u{22D4C}\u{22BCA}\u{21077}\u39FB\u{2106F}"],
["8aa1", "\u{266DA}\u{26716}\u{279A0}\u64EA\u{25052}\u{20C43}\u8E68\u{221A1}\u{28B4C}\u{20731}"],
["8aac", "\u480B\u{201A9}\u3FFA\u5873\u{22D8D}"],
["8ab2", "\u{245C8}\u{204FC}\u{26097}\u{20F4C}\u{20D96}\u5579\u40BB\u43BA"],
["8abb", "\u4AB4\u{22A66}\u{2109D}\u81AA\u98F5\u{20D9C}\u6379\u39FE\u{22775}\u8DC0\u56A1\u647C\u3E43"],
["8ac9", "\u{2A601}\u{20E09}\u{22ACF}\u{22CC9}"],
["8ace", "\u{210C8}\u{239C2}\u3992\u3A06\u{2829B}\u3578\u{25E49}\u{220C7}\u5652\u{20F31}\u{22CB2}\u{29720}\u34BC\u6C3D\u{24E3B}"],
["8adf", "\u{27574}\u{22E8B}\u{22208}\u{2A65B}\u{28CCD}\u{20E7A}\u{20C34}\u{2681C}\u7F93\u{210CF}\u{22803}\u{22939}\u35FB\u{251E3}\u{20E8C}\u{20F8D}\u{20EAA}\u3F93\u{20F30}\u{20D47}\u{2114F}\u{20E4C}"],
["8af6", "\u{20EAB}\u{20BA9}\u{20D48}\u{210C0}\u{2113D}\u3FF9\u{22696}\u6432\u{20FAD}"],
["8b40", "\u{233F4}\u{27639}\u{22BCE}\u{20D7E}\u{20D7F}\u{22C51}\u{22C55}\u3A18\u{20E98}\u{210C7}\u{20F2E}\u{2A632}\u{26B50}\u{28CD2}\u{28D99}\u{28CCA}\u95AA\u54CC\u82C4\u55B9"],
["8b55", "\u{29EC3}\u9C26\u9AB6\u{2775E}\u{22DEE}\u7140\u816D\u80EC\u5C1C\u{26572}\u8134\u3797\u535F\u{280BD}\u91B6\u{20EFA}\u{20E0F}\u{20E77}\u{20EFB}\u35DD\u{24DEB}\u3609\u{20CD6}\u56AF\u{227B5}\u{210C9}\u{20E10}\u{20E78}\u{21078}\u{21148}\u{28207}\u{21455}\u{20E79}\u{24E50}\u{22DA4}\u5A54\u{2101D}\u{2101E}\u{210F5}\u{210F6}\u579C\u{20E11}"],
["8ba1", "\u{27694}\u{282CD}\u{20FB5}\u{20E7B}\u{2517E}\u3703\u{20FB6}\u{21180}\u{252D8}\u{2A2BD}\u{249DA}\u{2183A}\u{24177}\u{2827C}\u5899\u5268\u361A\u{2573D}\u7BB2\u5B68\u4800\u4B2C\u9F27\u49E7\u9C1F\u9B8D\u{25B74}\u{2313D}\u55FB\u35F2\u5689\u4E28\u5902\u{21BC1}\u{2F878}\u9751\u{20086}\u4E5B\u4EBB\u353E\u5C23\u5F51\u5FC4\u38FA\u624C\u6535\u6B7A\u6C35\u6C3A\u706C\u722B\u4E2C\u72AD\u{248E9}\u7F52\u793B\u7CF9\u7F53\u{2626A}\u34C1"],
["8bde", "\u{2634B}\u8002\u8080\u{26612}\u{26951}\u535D\u8864\u89C1\u{278B2}\u8BA0\u8D1D\u9485\u9578\u957F\u95E8\u{28E0F}\u97E6\u9875\u98CE\u98DE\u9963\u{29810}\u9C7C\u9E1F\u9EC4\u6B6F\uF907\u4E37\u{20087}\u961D\u6237\u94A2"],
["8c40", "\u503B\u6DFE\u{29C73}\u9FA6\u3DC9\u888F\u{2414E}\u7077\u5CF5\u4B20\u{251CD}\u3559\u{25D30}\u6122\u{28A32}\u8FA7\u91F6\u7191\u6719\u73BA\u{23281}\u{2A107}\u3C8B\u{21980}\u4B10\u78E4\u7402\u51AE\u{2870F}\u4009\u6A63\u{2A2BA}\u4223\u860F\u{20A6F}\u7A2A\u{29947}\u{28AEA}\u9755\u704D\u5324\u{2207E}\u93F4\u76D9\u{289E3}\u9FA7\u77DD\u4EA3\u4FF0\u50BC\u4E2F\u4F17\u9FA8\u5434\u7D8B\u5892\u58D0\u{21DB6}\u5E92\u5E99\u5FC2\u{22712}\u658B"],
["8ca1", "\u{233F9}\u6919\u6A43\u{23C63}\u6CFF"],
["8ca7", "\u7200\u{24505}\u738C\u3EDB\u{24A13}\u5B15\u74B9\u8B83\u{25CA4}\u{25695}\u7A93\u7BEC\u7CC3\u7E6C\u82F8\u8597\u9FA9\u8890\u9FAA\u8EB9\u9FAB\u8FCF\u855F\u99E0\u9221\u9FAC\u{28DB9}\u{2143F}\u4071\u42A2\u5A1A"],
["8cc9", "\u9868\u676B\u4276\u573D"],
["8cce", "\u85D6\u{2497B}\u82BF\u{2710D}\u4C81\u{26D74}\u5D7B\u{26B15}\u{26FBE}\u9FAD\u9FAE\u5B96\u9FAF\u66E7\u7E5B\u6E57\u79CA\u3D88\u44C3\u{23256}\u{22796}\u439A\u4536"],
["8ce6", "\u5CD5\u{23B1A}\u8AF9\u5C78\u3D12\u{23551}\u5D78\u9FB2\u7157\u4558\u{240EC}\u{21E23}\u4C77\u3978\u344A\u{201A4}\u{26C41}\u8ACC\u4FB4\u{20239}\u59BF\u816C\u9856\u{298FA}\u5F3B"],
["8d40", "\u{20B9F}"],
["8d42", "\u{221C1}\u{2896D}\u4102\u46BB\u{29079}\u3F07\u9FB3\u{2A1B5}\u40F8\u37D6\u46F7\u{26C46}\u417C\u{286B2}\u{273FF}\u456D\u38D4\u{2549A}\u4561\u451B\u4D89\u4C7B\u4D76\u45EA\u3FC8\u{24B0F}\u3661\u44DE\u44BD\u41ED\u5D3E\u5D48\u5D56\u3DFC\u380F\u5DA4\u5DB9\u3820\u3838\u5E42\u5EBD\u5F25\u5F83\u3908\u3914\u393F\u394D\u60D7\u613D\u5CE5\u3989\u61B7\u61B9\u61CF\u39B8\u622C\u6290\u62E5\u6318\u39F8\u56B1"],
["8da1", "\u3A03\u63E2\u63FB\u6407\u645A\u3A4B\u64C0\u5D15\u5621\u9F9F\u3A97\u6586\u3ABD\u65FF\u6653\u3AF2\u6692\u3B22\u6716\u3B42\u67A4\u6800\u3B58\u684A\u6884\u3B72\u3B71\u3B7B\u6909\u6943\u725C\u6964\u699F\u6985\u3BBC\u69D6\u3BDD\u6A65\u6A74\u6A71\u6A82\u3BEC\u6A99\u3BF2\u6AAB\u6AB5\u6AD4\u6AF6\u6B81\u6BC1\u6BEA\u6C75\u6CAA\u3CCB\u6D02\u6D06\u6D26\u6D81\u3CEF\u6DA4\u6DB1\u6E15\u6E18\u6E29\u6E86\u{289C0}\u6EBB\u6EE2\u6EDA\u9F7F\u6EE8\u6EE9\u6F24\u6F34\u3D46\u{23F41}\u6F81\u6FBE\u3D6A\u3D75\u71B7\u5C99\u3D8A\u702C\u3D91\u7050\u7054\u706F\u707F\u7089\u{20325}\u43C1\u35F1\u{20ED8}"],
["8e40", "\u{23ED7}\u57BE\u{26ED3}\u713E\u{257E0}\u364E\u69A2\u{28BE9}\u5B74\u7A49\u{258E1}\u{294D9}\u7A65\u7A7D\u{259AC}\u7ABB\u7AB0\u7AC2\u7AC3\u71D1\u{2648D}\u41CA\u7ADA\u7ADD\u7AEA\u41EF\u54B2\u{25C01}\u7B0B\u7B55\u7B29\u{2530E}\u{25CFE}\u7BA2\u7B6F\u839C\u{25BB4}\u{26C7F}\u7BD0\u8421\u7B92\u7BB8\u{25D20}\u3DAD\u{25C65}\u8492\u7BFA\u7C06\u7C35\u{25CC1}\u7C44\u7C83\u{24882}\u7CA6\u667D\u{24578}\u7CC9\u7CC7\u7CE6\u7C74\u7CF3\u7CF5\u7CCE"],
["8ea1", "\u7E67\u451D\u{26E44}\u7D5D\u{26ED6}\u748D\u7D89\u7DAB\u7135\u7DB3\u7DD2\u{24057}\u{26029}\u7DE4\u3D13\u7DF5\u{217F9}\u7DE5\u{2836D}\u7E1D\u{26121}\u{2615A}\u7E6E\u7E92\u432B\u946C\u7E27\u7F40\u7F41\u7F47\u7936\u{262D0}\u99E1\u7F97\u{26351}\u7FA3\u{21661}\u{20068}\u455C\u{23766}\u4503\u{2833A}\u7FFA\u{26489}\u8005\u8008\u801D\u8028\u802F\u{2A087}\u{26CC3}\u803B\u803C\u8061\u{22714}\u4989\u{26626}\u{23DE3}\u{266E8}\u6725\u80A7\u{28A48}\u8107\u811A\u58B0\u{226F6}\u6C7F\u{26498}\u{24FB8}\u64E7\u{2148A}\u8218\u{2185E}\u6A53\u{24A65}\u{24A95}\u447A\u8229\u{20B0D}\u{26A52}\u{23D7E}\u4FF9\u{214FD}\u84E2\u8362\u{26B0A}\u{249A7}\u{23530}\u{21773}\u{23DF8}\u82AA\u691B\u{2F994}\u41DB"],
["8f40", "\u854B\u82D0\u831A\u{20E16}\u{217B4}\u36C1\u{2317D}\u{2355A}\u827B\u82E2\u8318\u{23E8B}\u{26DA3}\u{26B05}\u{26B97}\u{235CE}\u3DBF\u831D\u55EC\u8385\u450B\u{26DA5}\u83AC\u83C1\u83D3\u347E\u{26ED4}\u6A57\u855A\u3496\u{26E42}\u{22EEF}\u8458\u{25BE4}\u8471\u3DD3\u44E4\u6AA7\u844A\u{23CB5}\u7958\u84A8\u{26B96}\u{26E77}\u{26E43}\u84DE\u840F\u8391\u44A0\u8493\u84E4\u{25C91}\u4240\u{25CC0}\u4543\u8534\u5AF2\u{26E99}\u4527\u8573\u4516\u67BF\u8616"],
["8fa1", "\u{28625}\u{2863B}\u85C1\u{27088}\u8602\u{21582}\u{270CD}\u{2F9B2}\u456A\u8628\u3648\u{218A2}\u53F7\u{2739A}\u867E\u8771\u{2A0F8}\u87EE\u{22C27}\u87B1\u87DA\u880F\u5661\u866C\u6856\u460F\u8845\u8846\u{275E0}\u{23DB9}\u{275E4}\u885E\u889C\u465B\u88B4\u88B5\u63C1\u88C5\u7777\u{2770F}\u8987\u898A\u89A6\u89A9\u89A7\u89BC\u{28A25}\u89E7\u{27924}\u{27ABD}\u8A9C\u7793\u91FE\u8A90\u{27A59}\u7AE9\u{27B3A}\u{23F8F}\u4713\u{27B38}\u717C\u8B0C\u8B1F\u{25430}\u{25565}\u8B3F\u8B4C\u8B4D\u8AA9\u{24A7A}\u8B90\u8B9B\u8AAF\u{216DF}\u4615\u884F\u8C9B\u{27D54}\u{27D8F}\u{2F9D4}\u3725\u{27D53}\u8CD6\u{27D98}\u{27DBD}\u8D12\u8D03\u{21910}\u8CDB\u705C\u8D11\u{24CC9}\u3ED0\u8D77"],
["9040", "\u8DA9\u{28002}\u{21014}\u{2498A}\u3B7C\u{281BC}\u{2710C}\u7AE7\u8EAD\u8EB6\u8EC3\u92D4\u8F19\u8F2D\u{28365}\u{28412}\u8FA5\u9303\u{2A29F}\u{20A50}\u8FB3\u492A\u{289DE}\u{2853D}\u{23DBB}\u5EF8\u{23262}\u8FF9\u{2A014}\u{286BC}\u{28501}\u{22325}\u3980\u{26ED7}\u9037\u{2853C}\u{27ABE}\u9061\u{2856C}\u{2860B}\u90A8\u{28713}\u90C4\u{286E6}\u90AE\u90FD\u9167\u3AF0\u91A9\u91C4\u7CAC\u{28933}\u{21E89}\u920E\u6C9F\u9241\u9262\u{255B9}\u92B9\u{28AC6}\u{23C9B}\u{28B0C}\u{255DB}"],
["90a1", "\u{20D31}\u932C\u936B\u{28AE1}\u{28BEB}\u708F\u5AC3\u{28AE2}\u{28AE5}\u4965\u9244\u{28BEC}\u{28C39}\u{28BFF}\u9373\u945B\u8EBC\u9585\u95A6\u9426\u95A0\u6FF6\u42B9\u{2267A}\u{286D8}\u{2127C}\u{23E2E}\u49DF\u6C1C\u967B\u9696\u416C\u96A3\u{26ED5}\u61DA\u96B6\u78F5\u{28AE0}\u96BD\u53CC\u49A1\u{26CB8}\u{20274}\u{26410}\u{290AF}\u{290E5}\u{24AD1}\u{21915}\u{2330A}\u9731\u8642\u9736\u4A0F\u453D\u4585\u{24AE9}\u7075\u5B41\u971B\u975C\u{291D5}\u9757\u5B4A\u{291EB}\u975F\u9425\u50D0\u{230B7}\u{230BC}\u9789\u979F\u97B1\u97BE\u97C0\u97D2\u97E0\u{2546C}\u97EE\u741C\u{29433}\u97FF\u97F5\u{2941D}\u{2797A}\u4AD1\u9834\u9833\u984B\u9866\u3B0E\u{27175}\u3D51\u{20630}\u{2415C}"],
["9140", "\u{25706}\u98CA\u98B7\u98C8\u98C7\u4AFF\u{26D27}\u{216D3}\u55B0\u98E1\u98E6\u98EC\u9378\u9939\u{24A29}\u4B72\u{29857}\u{29905}\u99F5\u9A0C\u9A3B\u9A10\u9A58\u{25725}\u36C4\u{290B1}\u{29BD5}\u9AE0\u9AE2\u{29B05}\u9AF4\u4C0E\u9B14\u9B2D\u{28600}\u5034\u9B34\u{269A8}\u38C3\u{2307D}\u9B50\u9B40\u{29D3E}\u5A45\u{21863}\u9B8E\u{2424B}\u9C02\u9BFF\u9C0C\u{29E68}\u9DD4\u{29FB7}\u{2A192}\u{2A1AB}\u{2A0E1}\u{2A123}\u{2A1DF}\u9D7E\u9D83\u{2A134}\u9E0E\u6888"],
["91a1", "\u9DC4\u{2215B}\u{2A193}\u{2A220}\u{2193B}\u{2A233}\u9D39\u{2A0B9}\u{2A2B4}\u9E90\u9E95\u9E9E\u9EA2\u4D34\u9EAA\u9EAF\u{24364}\u9EC1\u3B60\u39E5\u3D1D\u4F32\u37BE\u{28C2B}\u9F02\u9F08\u4B96\u9424\u{26DA2}\u9F17\u9F16\u9F39\u569F\u568A\u9F45\u99B8\u{2908B}\u97F2\u847F\u9F62\u9F69\u7ADC\u9F8E\u7216\u4BBE\u{24975}\u{249BB}\u7177\u{249F8}\u{24348}\u{24A51}\u739E\u{28BDA}\u{218FA}\u799F\u{2897E}\u{28E36}\u9369\u93F3\u{28A44}\u92EC\u9381\u93CB\u{2896C}\u{244B9}\u7217\u3EEB\u7772\u7A43\u70D0\u{24473}\u{243F8}\u717E\u{217EF}\u70A3\u{218BE}\u{23599}\u3EC7\u{21885}\u{2542F}\u{217F8}\u3722\u{216FB}\u{21839}\u36E1\u{21774}\u{218D1}\u{25F4B}\u3723\u{216C0}\u575B\u{24A25}\u{213FE}\u{212A8}"],
["9240", "\u{213C6}\u{214B6}\u8503\u{236A6}\u8503\u8455\u{24994}\u{27165}\u{23E31}\u{2555C}\u{23EFB}\u{27052}\u44F4\u{236EE}\u{2999D}\u{26F26}\u67F9\u3733\u3C15\u3DE7\u586C\u{21922}\u6810\u4057\u{2373F}\u{240E1}\u{2408B}\u{2410F}\u{26C21}\u54CB\u569E\u{266B1}\u5692\u{20FDF}\u{20BA8}\u{20E0D}\u93C6\u{28B13}\u939C\u4EF8\u512B\u3819\u{24436}\u4EBC\u{20465}\u{2037F}\u4F4B\u4F8A\u{25651}\u5A68\u{201AB}\u{203CB}\u3999\u{2030A}\u{20414}\u3435\u4F29\u{202C0}\u{28EB3}\u{20275}\u8ADA\u{2020C}\u4E98"],
["92a1", "\u50CD\u510D\u4FA2\u4F03\u{24A0E}\u{23E8A}\u4F42\u502E\u506C\u5081\u4FCC\u4FE5\u5058\u50FC\u5159\u515B\u515D\u515E\u6E76\u{23595}\u{23E39}\u{23EBF}\u6D72\u{21884}\u{23E89}\u51A8\u51C3\u{205E0}\u44DD\u{204A3}\u{20492}\u{20491}\u8D7A\u{28A9C}\u{2070E}\u5259\u52A4\u{20873}\u52E1\u936E\u467A\u718C\u{2438C}\u{20C20}\u{249AC}\u{210E4}\u69D1\u{20E1D}\u7479\u3EDE\u7499\u7414\u7456\u7398\u4B8E\u{24ABC}\u{2408D}\u53D0\u3584\u720F\u{240C9}\u55B4\u{20345}\u54CD\u{20BC6}\u571D\u925D\u96F4\u9366\u57DD\u578D\u577F\u363E\u58CB\u5A99\u{28A46}\u{216FA}\u{2176F}\u{21710}\u5A2C\u59B8\u928F\u5A7E\u5ACF\u5A12\u{25946}\u{219F3}\u{21861}\u{24295}\u36F5\u6D05\u7443\u5A21\u{25E83}"],
["9340", "\u5A81\u{28BD7}\u{20413}\u93E0\u748C\u{21303}\u7105\u4972\u9408\u{289FB}\u93BD\u37A0\u5C1E\u5C9E\u5E5E\u5E48\u{21996}\u{2197C}\u{23AEE}\u5ECD\u5B4F\u{21903}\u{21904}\u3701\u{218A0}\u36DD\u{216FE}\u36D3\u812A\u{28A47}\u{21DBA}\u{23472}\u{289A8}\u5F0C\u5F0E\u{21927}\u{217AB}\u5A6B\u{2173B}\u5B44\u8614\u{275FD}\u8860\u607E\u{22860}\u{2262B}\u5FDB\u3EB8\u{225AF}\u{225BE}\u{29088}\u{26F73}\u61C0\u{2003E}\u{20046}\u{2261B}\u6199\u6198\u6075\u{22C9B}\u{22D07}\u{246D4}\u{2914D}"],
["93a1", "\u6471\u{24665}\u{22B6A}\u3A29\u{22B22}\u{23450}\u{298EA}\u{22E78}\u6337\u{2A45B}\u64B6\u6331\u63D1\u{249E3}\u{22D67}\u62A4\u{22CA1}\u643B\u656B\u6972\u3BF4\u{2308E}\u{232AD}\u{24989}\u{232AB}\u550D\u{232E0}\u{218D9}\u{2943F}\u66CE\u{23289}\u{231B3}\u3AE0\u4190\u{25584}\u{28B22}\u{2558F}\u{216FC}\u{2555B}\u{25425}\u78EE\u{23103}\u{2182A}\u{23234}\u3464\u{2320F}\u{23182}\u{242C9}\u668E\u{26D24}\u666B\u4B93\u6630\u{27870}\u{21DEB}\u6663\u{232D2}\u{232E1}\u661E\u{25872}\u38D1\u{2383A}\u{237BC}\u3B99\u{237A2}\u{233FE}\u74D0\u3B96\u678F\u{2462A}\u68B6\u681E\u3BC4\u6ABE\u3863\u{237D5}\u{24487}\u6A33\u6A52\u6AC9\u6B05\u{21912}\u6511\u6898\u6A4C\u3BD7\u6A7A\u6B57\u{23FC0}\u{23C9A}\u93A0\u92F2\u{28BEA}\u{28ACB}"],
["9440", "\u9289\u{2801E}\u{289DC}\u9467\u6DA5\u6F0B\u{249EC}\u6D67\u{23F7F}\u3D8F\u6E04\u{2403C}\u5A3D\u6E0A\u5847\u6D24\u7842\u713B\u{2431A}\u{24276}\u70F1\u7250\u7287\u7294\u{2478F}\u{24725}\u5179\u{24AA4}\u{205EB}\u747A\u{23EF8}\u{2365F}\u{24A4A}\u{24917}\u{25FE1}\u3F06\u3EB1\u{24ADF}\u{28C23}\u{23F35}\u60A7\u3EF3\u74CC\u743C\u9387\u7437\u449F\u{26DEA}\u4551\u7583\u3F63\u{24CD9}\u{24D06}\u3F58\u7555\u7673\u{2A5C6}\u3B19\u7468\u{28ACC}\u{249AB}\u{2498E}\u3AFB"],
["94a1", "\u3DCD\u{24A4E}\u3EFF\u{249C5}\u{248F3}\u91FA\u5732\u9342\u{28AE3}\u{21864}\u50DF\u{25221}\u{251E7}\u7778\u{23232}\u770E\u770F\u777B\u{24697}\u{23781}\u3A5E\u{248F0}\u7438\u749B\u3EBF\u{24ABA}\u{24AC7}\u40C8\u{24A96}\u{261AE}\u9307\u{25581}\u781E\u788D\u7888\u78D2\u73D0\u7959\u{27741}\u{256E3}\u410E\u799B\u8496\u79A5\u6A2D\u{23EFA}\u7A3A\u79F4\u416E\u{216E6}\u4132\u9235\u79F1\u{20D4C}\u{2498C}\u{20299}\u{23DBA}\u{2176E}\u3597\u556B\u3570\u36AA\u{201D4}\u{20C0D}\u7AE2\u5A59\u{226F5}\u{25AAF}\u{25A9C}\u5A0D\u{2025B}\u78F0\u5A2A\u{25BC6}\u7AFE\u41F9\u7C5D\u7C6D\u4211\u{25BB3}\u{25EBC}\u{25EA6}\u7CCD\u{249F9}\u{217B0}\u7C8E\u7C7C\u7CAE\u6AB2\u7DDC\u7E07\u7DD3\u7F4E\u{26261}"],
["9540", "\u{2615C}\u{27B48}\u7D97\u{25E82}\u426A\u{26B75}\u{20916}\u67D6\u{2004E}\u{235CF}\u57C4\u{26412}\u{263F8}\u{24962}\u7FDD\u7B27\u{2082C}\u{25AE9}\u{25D43}\u7B0C\u{25E0E}\u99E6\u8645\u9A63\u6A1C\u{2343F}\u39E2\u{249F7}\u{265AD}\u9A1F\u{265A0}\u8480\u{27127}\u{26CD1}\u44EA\u8137\u4402\u80C6\u8109\u8142\u{267B4}\u98C3\u{26A42}\u8262\u8265\u{26A51}\u8453\u{26DA7}\u8610\u{2721B}\u5A86\u417F\u{21840}\u5B2B\u{218A1}\u5AE4\u{218D8}\u86A0\u{2F9BC}\u{23D8F}\u882D\u{27422}\u5A02"],
["95a1", "\u886E\u4F45\u8887\u88BF\u88E6\u8965\u894D\u{25683}\u8954\u{27785}\u{27784}\u{28BF5}\u{28BD9}\u{28B9C}\u{289F9}\u3EAD\u84A3\u46F5\u46CF\u37F2\u8A3D\u8A1C\u{29448}\u5F4D\u922B\u{24284}\u65D4\u7129\u70C4\u{21845}\u9D6D\u8C9F\u8CE9\u{27DDC}\u599A\u77C3\u59F0\u436E\u36D4\u8E2A\u8EA7\u{24C09}\u8F30\u8F4A\u42F4\u6C58\u6FBB\u{22321}\u489B\u6F79\u6E8B\u{217DA}\u9BE9\u36B5\u{2492F}\u90BB\u9097\u5571\u4906\u91BB\u9404\u{28A4B}\u4062\u{28AFC}\u9427\u{28C1D}\u{28C3B}\u84E5\u8A2B\u9599\u95A7\u9597\u9596\u{28D34}\u7445\u3EC2\u{248FF}\u{24A42}\u{243EA}\u3EE7\u{23225}\u968F\u{28EE7}\u{28E66}\u{28E65}\u3ECC\u{249ED}\u{24A78}\u{23FEE}\u7412\u746B\u3EFC\u9741\u{290B0}"],
["9640", "\u6847\u4A1D\u{29093}\u{257DF}\u975D\u9368\u{28989}\u{28C26}\u{28B2F}\u{263BE}\u92BA\u5B11\u8B69\u493C\u73F9\u{2421B}\u979B\u9771\u9938\u{20F26}\u5DC1\u{28BC5}\u{24AB2}\u981F\u{294DA}\u92F6\u{295D7}\u91E5\u44C0\u{28B50}\u{24A67}\u{28B64}\u98DC\u{28A45}\u3F00\u922A\u4925\u8414\u993B\u994D\u{27B06}\u3DFD\u999B\u4B6F\u99AA\u9A5C\u{28B65}\u{258C8}\u6A8F\u9A21\u5AFE\u9A2F\u{298F1}\u4B90\u{29948}\u99BC\u4BBD\u4B97\u937D\u5872\u{21302}\u5822\u{249B8}"],
["96a1", "\u{214E8}\u7844\u{2271F}\u{23DB8}\u68C5\u3D7D\u9458\u3927\u6150\u{22781}\u{2296B}\u6107\u9C4F\u9C53\u9C7B\u9C35\u9C10\u9B7F\u9BCF\u{29E2D}\u9B9F\u{2A1F5}\u{2A0FE}\u9D21\u4CAE\u{24104}\u9E18\u4CB0\u9D0C\u{2A1B4}\u{2A0ED}\u{2A0F3}\u{2992F}\u9DA5\u84BD\u{26E12}\u{26FDF}\u{26B82}\u85FC\u4533\u{26DA4}\u{26E84}\u{26DF0}\u8420\u85EE\u{26E00}\u{237D7}\u{26064}\u79E2\u{2359C}\u{23640}\u492D\u{249DE}\u3D62\u93DB\u92BE\u9348\u{202BF}\u78B9\u9277\u944D\u4FE4\u3440\u9064\u{2555D}\u783D\u7854\u78B6\u784B\u{21757}\u{231C9}\u{24941}\u369A\u4F72\u6FDA\u6FD9\u701E\u701E\u5414\u{241B5}\u57BB\u58F3\u578A\u9D16\u57D7\u7134\u34AF\u{241AC}\u71EB\u{26C40}\u{24F97}\u5B28\u{217B5}\u{28A49}"],
["9740", "\u610C\u5ACE\u5A0B\u42BC\u{24488}\u372C\u4B7B\u{289FC}\u93BB\u93B8\u{218D6}\u{20F1D}\u8472\u{26CC0}\u{21413}\u{242FA}\u{22C26}\u{243C1}\u5994\u{23DB7}\u{26741}\u7DA8\u{2615B}\u{260A4}\u{249B9}\u{2498B}\u{289FA}\u92E5\u73E2\u3EE9\u74B4\u{28B63}\u{2189F}\u3EE1\u{24AB3}\u6AD8\u73F3\u73FB\u3ED6\u{24A3E}\u{24A94}\u{217D9}\u{24A66}\u{203A7}\u{21424}\u{249E5}\u7448\u{24916}\u70A5\u{24976}\u9284\u73E6\u935F\u{204FE}\u9331\u{28ACE}\u{28A16}\u9386\u{28BE7}\u{255D5}\u4935\u{28A82}\u716B"],
["97a1", "\u{24943}\u{20CFF}\u56A4\u{2061A}\u{20BEB}\u{20CB8}\u5502\u79C4\u{217FA}\u7DFE\u{216C2}\u{24A50}\u{21852}\u452E\u9401\u370A\u{28AC0}\u{249AD}\u59B0\u{218BF}\u{21883}\u{27484}\u5AA1\u36E2\u{23D5B}\u36B0\u925F\u5A79\u{28A81}\u{21862}\u9374\u3CCD\u{20AB4}\u4A96\u398A\u50F4\u3D69\u3D4C\u{2139C}\u7175\u42FB\u{28218}\u6E0F\u{290E4}\u44EB\u6D57\u{27E4F}\u7067\u6CAF\u3CD6\u{23FED}\u{23E2D}\u6E02\u6F0C\u3D6F\u{203F5}\u7551\u36BC\u34C8\u4680\u3EDA\u4871\u59C4\u926E\u493E\u8F41\u{28C1C}\u{26BC0}\u5812\u57C8\u36D6\u{21452}\u70FE\u{24362}\u{24A71}\u{22FE3}\u{212B0}\u{223BD}\u68B9\u6967\u{21398}\u{234E5}\u{27BF4}\u{236DF}\u{28A83}\u{237D6}\u{233FA}\u{24C9F}\u6A1A\u{236AD}\u{26CB7}\u843E\u44DF\u44CE"],
["9840", "\u{26D26}\u{26D51}\u{26C82}\u{26FDE}\u6F17\u{27109}\u833D\u{2173A}\u83ED\u{26C80}\u{27053}\u{217DB}\u5989\u5A82\u{217B3}\u5A61\u5A71\u{21905}\u{241FC}\u372D\u59EF\u{2173C}\u36C7\u718E\u9390\u669A\u{242A5}\u5A6E\u5A2B\u{24293}\u6A2B\u{23EF9}\u{27736}\u{2445B}\u{242CA}\u711D\u{24259}\u{289E1}\u4FB0\u{26D28}\u5CC2\u{244CE}\u{27E4D}\u{243BD}\u6A0C\u{24256}\u{21304}\u70A6\u7133\u{243E9}\u3DA5\u6CDF\u{2F825}\u{24A4F}\u7E65\u59EB\u5D2F\u3DF3\u5F5C\u{24A5D}\u{217DF}\u7DA4\u8426"],
["98a1", "\u5485\u{23AFA}\u{23300}\u{20214}\u577E\u{208D5}\u{20619}\u3FE5\u{21F9E}\u{2A2B6}\u7003\u{2915B}\u5D70\u738F\u7CD3\u{28A59}\u{29420}\u4FC8\u7FE7\u72CD\u7310\u{27AF4}\u7338\u7339\u{256F6}\u7341\u7348\u3EA9\u{27B18}\u906C\u71F5\u{248F2}\u73E1\u81F6\u3ECA\u770C\u3ED1\u6CA2\u56FD\u7419\u741E\u741F\u3EE2\u3EF0\u3EF4\u3EFA\u74D3\u3F0E\u3F53\u7542\u756D\u7572\u758D\u3F7C\u75C8\u75DC\u3FC0\u764D\u3FD7\u7674\u3FDC\u767A\u{24F5C}\u7188\u5623\u8980\u5869\u401D\u7743\u4039\u6761\u4045\u35DB\u7798\u406A\u406F\u5C5E\u77BE\u77CB\u58F2\u7818\u70B9\u781C\u40A8\u7839\u7847\u7851\u7866\u8448\u{25535}\u7933\u6803\u7932\u4103"],
["9940", "\u4109\u7991\u7999\u8FBB\u7A06\u8FBC\u4167\u7A91\u41B2\u7ABC\u8279\u41C4\u7ACF\u7ADB\u41CF\u4E21\u7B62\u7B6C\u7B7B\u7C12\u7C1B\u4260\u427A\u7C7B\u7C9C\u428C\u7CB8\u4294\u7CED\u8F93\u70C0\u{20CCF}\u7DCF\u7DD4\u7DD0\u7DFD\u7FAE\u7FB4\u729F\u4397\u8020\u8025\u7B39\u802E\u8031\u8054\u3DCC\u57B4\u70A0\u80B7\u80E9\u43ED\u810C\u732A\u810E\u8112\u7560\u8114\u4401\u3B39\u8156\u8159\u815A"],
["99a1", "\u4413\u583A\u817C\u8184\u4425\u8193\u442D\u81A5\u57EF\u81C1\u81E4\u8254\u448F\u82A6\u8276\u82CA\u82D8\u82FF\u44B0\u8357\u9669\u698A\u8405\u70F5\u8464\u60E3\u8488\u4504\u84BE\u84E1\u84F8\u8510\u8538\u8552\u453B\u856F\u8570\u85E0\u4577\u8672\u8692\u86B2\u86EF\u9645\u878B\u4606\u4617\u88AE\u88FF\u8924\u8947\u8991\u{27967}\u8A29\u8A38\u8A94\u8AB4\u8C51\u8CD4\u8CF2\u8D1C\u4798\u585F\u8DC3\u47ED\u4EEE\u8E3A\u55D8\u5754\u8E71\u55F5\u8EB0\u4837\u8ECE\u8EE2\u8EE4\u8EED\u8EF2\u8FB7\u8FC1\u8FCA\u8FCC\u9033\u99C4\u48AD\u98E0\u9213\u491E\u9228\u9258\u926B\u92B1\u92AE\u92BF"],
["9a40", "\u92E3\u92EB\u92F3\u92F4\u92FD\u9343\u9384\u93AD\u4945\u4951\u9EBF\u9417\u5301\u941D\u942D\u943E\u496A\u9454\u9479\u952D\u95A2\u49A7\u95F4\u9633\u49E5\u67A0\u4A24\u9740\u4A35\u97B2\u97C2\u5654\u4AE4\u60E8\u98B9\u4B19\u98F1\u5844\u990E\u9919\u51B4\u991C\u9937\u9942\u995D\u9962\u4B70\u99C5\u4B9D\u9A3C\u9B0F\u7A83\u9B69\u9B81\u9BDD\u9BF1\u9BF4\u4C6D\u9C20\u376F\u{21BC2}\u9D49\u9C3A"],
["9aa1", "\u9EFE\u5650\u9D93\u9DBD\u9DC0\u9DFC\u94F6\u8FB6\u9E7B\u9EAC\u9EB1\u9EBD\u9EC6\u94DC\u9EE2\u9EF1\u9EF8\u7AC8\u9F44\u{20094}\u{202B7}\u{203A0}\u691A\u94C3\u59AC\u{204D7}\u5840\u94C1\u37B9\u{205D5}\u{20615}\u{20676}\u{216BA}\u5757\u7173\u{20AC2}\u{20ACD}\u{20BBF}\u546A\u{2F83B}\u{20BCB}\u549E\u{20BFB}\u{20C3B}\u{20C53}\u{20C65}\u{20C7C}\u60E7\u{20C8D}\u567A\u{20CB5}\u{20CDD}\u{20CED}\u{20D6F}\u{20DB2}\u{20DC8}\u6955\u9C2F\u87A5\u{20E04}\u{20E0E}\u{20ED7}\u{20F90}\u{20F2D}\u{20E73}\u5C20\u{20FBC}\u5E0B\u{2105C}\u{2104F}\u{21076}\u671E\u{2107B}\u{21088}\u{21096}\u3647\u{210BF}\u{210D3}\u{2112F}\u{2113B}\u5364\u84AD\u{212E3}\u{21375}\u{21336}\u8B81\u{21577}\u{21619}\u{217C3}\u{217C7}\u4E78\u70BB\u{2182D}\u{2196A}"],
["9b40", "\u{21A2D}\u{21A45}\u{21C2A}\u{21C70}\u{21CAC}\u{21EC8}\u62C3\u{21ED5}\u{21F15}\u7198\u6855\u{22045}\u69E9\u36C8\u{2227C}\u{223D7}\u{223FA}\u{2272A}\u{22871}\u{2294F}\u82FD\u{22967}\u{22993}\u{22AD5}\u89A5\u{22AE8}\u8FA0\u{22B0E}\u97B8\u{22B3F}\u9847\u9ABD\u{22C4C}"],
["9b62", "\u{22C88}\u{22CB7}\u{25BE8}\u{22D08}\u{22D12}\u{22DB7}\u{22D95}\u{22E42}\u{22F74}\u{22FCC}\u{23033}\u{23066}\u{2331F}\u{233DE}\u5FB1\u6648\u66BF\u{27A79}\u{23567}\u{235F3}\u7201\u{249BA}\u77D7\u{2361A}\u{23716}\u7E87\u{20346}\u58B5\u670E"],
["9ba1", "\u6918\u{23AA7}\u{27657}\u{25FE2}\u{23E11}\u{23EB9}\u{275FE}\u{2209A}\u48D0\u4AB8\u{24119}\u{28A9A}\u{242EE}\u{2430D}\u{2403B}\u{24334}\u{24396}\u{24A45}\u{205CA}\u51D2\u{20611}\u599F\u{21EA8}\u3BBE\u{23CFF}\u{24404}\u{244D6}\u5788\u{24674}\u399B\u{2472F}\u{285E8}\u{299C9}\u3762\u{221C3}\u8B5E\u{28B4E}\u99D6\u{24812}\u{248FB}\u{24A15}\u7209\u{24AC0}\u{20C78}\u5965\u{24EA5}\u{24F86}\u{20779}\u8EDA\u{2502C}\u528F\u573F\u7171\u{25299}\u{25419}\u{23F4A}\u{24AA7}\u55BC\u{25446}\u{2546E}\u{26B52}\u91D4\u3473\u{2553F}\u{27632}\u{2555E}\u4718\u{25562}\u{25566}\u{257C7}\u{2493F}\u{2585D}\u5066\u34FB\u{233CC}\u60DE\u{25903}\u477C\u{28948}\u{25AAE}\u{25B89}\u{25C06}\u{21D90}\u57A1\u7151\u6FB6\u{26102}\u{27C12}\u9056\u{261B2}\u{24F9A}\u8B62\u{26402}\u{2644A}"],
["9c40", "\u5D5B\u{26BF7}\u8F36\u{26484}\u{2191C}\u8AEA\u{249F6}\u{26488}\u{23FEF}\u{26512}\u4BC0\u{265BF}\u{266B5}\u{2271B}\u9465\u{257E1}\u6195\u5A27\u{2F8CD}\u4FBB\u56B9\u{24521}\u{266FC}\u4E6A\u{24934}\u9656\u6D8F\u{26CBD}\u3618\u8977\u{26799}\u{2686E}\u{26411}\u{2685E}\u71DF\u{268C7}\u7B42\u{290C0}\u{20A11}\u{26926}\u9104\u{26939}\u7A45\u9DF0\u{269FA}\u9A26\u{26A2D}\u365F\u{26469}\u{20021}\u7983\u{26A34}\u{26B5B}\u5D2C\u{23519}\u83CF\u{26B9D}\u46D0\u{26CA4}\u753B\u8865\u{26DAE}\u58B6"],
["9ca1", "\u371C\u{2258D}\u{2704B}\u{271CD}\u3C54\u{27280}\u{27285}\u9281\u{2217A}\u{2728B}\u9330\u{272E6}\u{249D0}\u6C39\u949F\u{27450}\u{20EF8}\u8827\u88F5\u{22926}\u{28473}\u{217B1}\u6EB8\u{24A2A}\u{21820}\u39A4\u36B9\u5C10\u79E3\u453F\u66B6\u{29CAD}\u{298A4}\u8943\u{277CC}\u{27858}\u56D6\u40DF\u{2160A}\u39A1\u{2372F}\u{280E8}\u{213C5}\u71AD\u8366\u{279DD}\u{291A8}\u5A67\u4CB7\u{270AF}\u{289AB}\u{279FD}\u{27A0A}\u{27B0B}\u{27D66}\u{2417A}\u7B43\u797E\u{28009}\u6FB5\u{2A2DF}\u6A03\u{28318}\u53A2\u{26E07}\u93BF\u6836\u975D\u{2816F}\u{28023}\u{269B5}\u{213ED}\u{2322F}\u{28048}\u5D85\u{28C30}\u{28083}\u5715\u9823\u{28949}\u5DAB\u{24988}\u65BE\u69D5\u53D2\u{24AA5}\u{23F81}\u3C11\u6736\u{28090}\u{280F4}\u{2812E}\u{21FA1}\u{2814F}"],
["9d40", "\u{28189}\u{281AF}\u{2821A}\u{28306}\u{2832F}\u{2838A}\u35CA\u{28468}\u{286AA}\u48FA\u63E6\u{28956}\u7808\u9255\u{289B8}\u43F2\u{289E7}\u43DF\u{289E8}\u{28B46}\u{28BD4}\u59F8\u{28C09}\u8F0B\u{28FC5}\u{290EC}\u7B51\u{29110}\u{2913C}\u3DF7\u{2915E}\u{24ACA}\u8FD0\u728F\u568B\u{294E7}\u{295E9}\u{295B0}\u{295B8}\u{29732}\u{298D1}\u{29949}\u{2996A}\u{299C3}\u{29A28}\u{29B0E}\u{29D5A}\u{29D9B}\u7E9F\u{29EF8}\u{29F23}\u4CA4\u9547\u{2A293}\u71A2\u{2A2FF}\u4D91\u9012\u{2A5CB}\u4D9C\u{20C9C}\u8FBE\u55C1"],
["9da1", "\u8FBA\u{224B0}\u8FB9\u{24A93}\u4509\u7E7F\u6F56\u6AB1\u4EEA\u34E4\u{28B2C}\u{2789D}\u373A\u8E80\u{217F5}\u{28024}\u{28B6C}\u{28B99}\u{27A3E}\u{266AF}\u3DEB\u{27655}\u{23CB7}\u{25635}\u{25956}\u4E9A\u{25E81}\u{26258}\u56BF\u{20E6D}\u8E0E\u5B6D\u{23E88}\u{24C9E}\u63DE\u62D0\u{217F6}\u{2187B}\u6530\u562D\u{25C4A}\u541A\u{25311}\u3DC6\u{29D98}\u4C7D\u5622\u561E\u7F49\u{25ED8}\u5975\u{23D40}\u8770\u4E1C\u{20FEA}\u{20D49}\u{236BA}\u8117\u9D5E\u8D18\u763B\u9C45\u764E\u77B9\u9345\u5432\u8148\u82F7\u5625\u8132\u8418\u80BD\u55EA\u7962\u5643\u5416\u{20E9D}\u35CE\u5605\u55F1\u66F1\u{282E2}\u362D\u7534\u55F0\u55BA\u5497\u5572\u{20C41}\u{20C96}\u5ED0\u{25148}\u{20E76}\u{22C62}"],
["9e40", "\u{20EA2}\u9EAB\u7D5A\u55DE\u{21075}\u629D\u976D\u5494\u8CCD\u71F6\u9176\u63FC\u63B9\u63FE\u5569\u{22B43}\u9C72\u{22EB3}\u519A\u34DF\u{20DA7}\u51A7\u544D\u551E\u5513\u7666\u8E2D\u{2688A}\u75B1\u80B6\u8804\u8786\u88C7\u81B6\u841C\u{210C1}\u44EC\u7304\u{24706}\u5B90\u830B\u{26893}\u567B\u{226F4}\u{27D2F}\u{241A3}\u{27D73}\u{26ED0}\u{272B6}\u9170\u{211D9}\u9208\u{23CFC}\u{2A6A9}\u{20EAC}\u{20EF9}\u7266\u{21CA2}\u474E\u{24FC2}\u{27FF9}\u{20FEB}\u40FA"],
["9ea1", "\u9C5D\u651F\u{22DA0}\u48F3\u{247E0}\u{29D7C}\u{20FEC}\u{20E0A}\u6062\u{275A3}\u{20FED}"],
["9ead", "\u{26048}\u{21187}\u71A3\u7E8E\u9D50\u4E1A\u4E04\u3577\u5B0D\u6CB2\u5367\u36AC\u39DC\u537D\u36A5\u{24618}\u589A\u{24B6E}\u822D\u544B\u57AA\u{25A95}\u{20979}"],
["9ec5", "\u3A52\u{22465}\u7374\u{29EAC}\u4D09\u9BED\u{23CFE}\u{29F30}\u4C5B\u{24FA9}\u{2959E}\u{29FDE}\u845C\u{23DB6}\u{272B2}\u{267B3}\u{23720}\u632E\u7D25\u{23EF7}\u{23E2C}\u3A2A\u9008\u52CC\u3E74\u367A\u45E9\u{2048E}\u7640\u5AF0\u{20EB6}\u787A\u{27F2E}\u58A7\u40BF\u567C\u9B8B\u5D74\u7654\u{2A434}\u9E85\u4CE1\u75F9\u37FB\u6119\u{230DA}\u{243F2}"],
["9ef5", "\u565D\u{212A9}\u57A7\u{24963}\u{29E06}\u5234\u{270AE}\u35AD\u6C4A\u9D7C"],
["9f40", "\u7C56\u9B39\u57DE\u{2176C}\u5C53\u64D3\u{294D0}\u{26335}\u{27164}\u86AD\u{20D28}\u{26D22}\u{24AE2}\u{20D71}"],
["9f4f", "\u51FE\u{21F0F}\u5D8E\u9703\u{21DD1}\u9E81\u904C\u7B1F\u9B02\u5CD1\u7BA3\u6268\u6335\u9AFF\u7BCF\u9B2A\u7C7E\u9B2E\u7C42\u7C86\u9C15\u7BFC\u9B09\u9F17\u9C1B\u{2493E}\u9F5A\u5573\u5BC3\u4FFD\u9E98\u4FF2\u5260\u3E06\u52D1\u5767\u5056\u59B7\u5E12\u97C8\u9DAB\u8F5C\u5469\u97B4\u9940\u97BA\u532C\u6130"],
["9fa1", "\u692C\u53DA\u9C0A\u9D02\u4C3B\u9641\u6980\u50A6\u7546\u{2176D}\u99DA\u5273"],
["9fae", "\u9159\u9681\u915C"],
["9fb2", "\u9151\u{28E97}\u637F\u{26D23}\u6ACA\u5611\u918E\u757A\u6285\u{203FC}\u734F\u7C70\u{25C21}\u{23CFD}"],
["9fc1", "\u{24919}\u76D6\u9B9D\u4E2A\u{20CD4}\u83BE\u8842"],
["9fc9", "\u5C4A\u69C0\u50ED\u577A\u521F\u5DF5\u4ECE\u6C31\u{201F2}\u4F39\u549C\u54DA\u529A\u8D82\u35FE\u5F0C\u35F3"],
["9fdb", "\u6B52\u917C\u9FA5\u9B97\u982E\u98B4\u9ABA\u9EA8\u9E84\u717A\u7B14"],
["9fe7", "\u6BFA\u8818\u7F78"],
["9feb", "\u5620\u{2A64A}\u8E77\u9F53"],
["9ff0", "\u8DD4\u8E4F\u9E1C\u8E01\u6282\u{2837D}\u8E28\u8E75\u7AD3\u{24A77}\u7A3E\u78D8\u6CEA\u8A67\u7607"],
["a040", "\u{28A5A}\u9F26\u6CCE\u87D6\u75C3\u{2A2B2}\u7853\u{2F840}\u8D0C\u72E2\u7371\u8B2D\u7302\u74F1\u8CEB\u{24ABB}\u862F\u5FBA\u88A0\u44B7"],
["a055", "\u{2183B}\u{26E05}"],
["a058", "\u8A7E\u{2251B}"],
["a05b", "\u60FD\u7667\u9AD7\u9D44\u936E\u9B8F\u87F5"],
["a063", "\u880F\u8CF7\u732C\u9721\u9BB0\u35D6\u72B2\u4C07\u7C51\u994A\u{26159}\u6159\u4C04\u9E96\u617D"],
["a073", "\u575F\u616F\u62A6\u6239\u62CE\u3A5C\u61E2\u53AA\u{233F5}\u6364\u6802\u35D2"],
["a0a1", "\u5D57\u{28BC2}\u8FDA\u{28E39}"],
["a0a6", "\u50D9\u{21D46}\u7906\u5332\u9638\u{20F3B}\u4065"],
["a0ae", "\u77FE"],
["a0b0", "\u7CC2\u{25F1A}\u7CDA\u7A2D\u8066\u8063\u7D4D\u7505\u74F2\u8994\u821A\u670C\u8062\u{27486}\u805B\u74F0\u8103\u7724\u8989\u{267CC}\u7553\u{26ED1}\u87A9\u87CE\u81C8\u878C\u8A49\u8CAD\u8B43\u772B\u74F8\u84DA\u3635\u69B2\u8DA6"],
["a0d4", "\u89A9\u7468\u6DB9\u87C1\u{24011}\u74E7\u3DDB\u7176\u60A4\u619C\u3CD1\u7162\u6077"],
["a0e2", "\u7F71\u{28B2D}\u7250\u60E9\u4B7E\u5220\u3C18\u{23CC7}\u{25ED7}\u{27656}\u{25531}\u{21944}\u{212FE}\u{29903}\u{26DDC}\u{270AD}\u5CC1\u{261AD}\u{28A0F}\u{23677}\u{200EE}\u{26846}\u{24F0E}\u4562\u5B1F\u{2634C}\u9F50\u9EA6\u{2626B}"],
["a3c0", "\u2400", 31, "\u2421"],
["c6a1", "\u2460", 9, "\u2474", 9, "\u2170", 9, "\u4E36\u4E3F\u4E85\u4EA0\u5182\u5196\u51AB\u52F9\u5338\u5369\u53B6\u590A\u5B80\u5DDB\u2F33\u5E7F\u5EF4\u5F50\u5F61\u6534\u65E0\u7592\u7676\u8FB5\u96B6\xA8\u02C6\u30FD\u30FE\u309D\u309E\u3003\u4EDD\u3005\u3006\u3007\u30FC\uFF3B\uFF3D\u273D\u3041", 23],
["c740", "\u3059", 58, "\u30A1\u30A2\u30A3\u30A4"],
["c7a1", "\u30A5", 81, "\u0410", 5, "\u0401\u0416", 4],
["c840", "\u041B", 26, "\u0451\u0436", 25, "\u21E7\u21B8\u21B9\u31CF\u{200CC}\u4E5A\u{2008A}\u5202\u4491"],
["c8a1", "\u9FB0\u5188\u9FB1\u{27607}"],
["c8cd", "\uFFE2\uFFE4\uFF07\uFF02\u3231\u2116\u2121\u309B\u309C\u2E80\u2E84\u2E86\u2E87\u2E88\u2E8A\u2E8C\u2E8D\u2E95\u2E9C\u2E9D\u2EA5\u2EA7\u2EAA\u2EAC\u2EAE\u2EB6\u2EBC\u2EBE\u2EC6\u2ECA\u2ECC\u2ECD\u2ECF\u2ED6\u2ED7\u2EDE\u2EE3"],
["c8f5", "\u0283\u0250\u025B\u0254\u0275\u0153\xF8\u014B\u028A\u026A"],
["f9fe", "\uFFED"],
["fa40", "\u{20547}\u92DB\u{205DF}\u{23FC5}\u854C\u42B5\u73EF\u51B5\u3649\u{24942}\u{289E4}\u9344\u{219DB}\u82EE\u{23CC8}\u783C\u6744\u62DF\u{24933}\u{289AA}\u{202A0}\u{26BB3}\u{21305}\u4FAB\u{224ED}\u5008\u{26D29}\u{27A84}\u{23600}\u{24AB1}\u{22513}\u5029\u{2037E}\u5FA4\u{20380}\u{20347}\u6EDB\u{2041F}\u507D\u5101\u347A\u510E\u986C\u3743\u8416\u{249A4}\u{20487}\u5160\u{233B4}\u516A\u{20BFF}\u{220FC}\u{202E5}\u{22530}\u{2058E}\u{23233}\u{21983}\u5B82\u877D\u{205B3}\u{23C99}\u51B2\u51B8"],
["faa1", "\u9D34\u51C9\u51CF\u51D1\u3CDC\u51D3\u{24AA6}\u51B3\u51E2\u5342\u51ED\u83CD\u693E\u{2372D}\u5F7B\u520B\u5226\u523C\u52B5\u5257\u5294\u52B9\u52C5\u7C15\u8542\u52E0\u860D\u{26B13}\u5305\u{28ADE}\u5549\u6ED9\u{23F80}\u{20954}\u{23FEC}\u5333\u5344\u{20BE2}\u6CCB\u{21726}\u681B\u73D5\u604A\u3EAA\u38CC\u{216E8}\u71DD\u44A2\u536D\u5374\u{286AB}\u537E\u537F\u{21596}\u{21613}\u77E6\u5393\u{28A9B}\u53A0\u53AB\u53AE\u73A7\u{25772}\u3F59\u739C\u53C1\u53C5\u6C49\u4E49\u57FE\u53D9\u3AAB\u{20B8F}\u53E0\u{23FEB}\u{22DA3}\u53F6\u{20C77}\u5413\u7079\u552B\u6657\u6D5B\u546D\u{26B53}\u{20D74}\u555D\u548F\u54A4\u47A6\u{2170D}\u{20EDD}\u3DB4\u{20D4D}"],
["fb40", "\u{289BC}\u{22698}\u5547\u4CED\u542F\u7417\u5586\u55A9\u5605\u{218D7}\u{2403A}\u4552\u{24435}\u66B3\u{210B4}\u5637\u66CD\u{2328A}\u66A4\u66AD\u564D\u564F\u78F1\u56F1\u9787\u53FE\u5700\u56EF\u56ED\u{28B66}\u3623\u{2124F}\u5746\u{241A5}\u6C6E\u708B\u5742\u36B1\u{26C7E}\u57E6\u{21416}\u5803\u{21454}\u{24363}\u5826\u{24BF5}\u585C\u58AA\u3561\u58E0\u58DC\u{2123C}\u58FB\u5BFF\u5743\u{2A150}\u{24278}\u93D3\u35A1\u591F\u68A6\u36C3\u6E59"],
["fba1", "\u{2163E}\u5A24\u5553\u{21692}\u8505\u59C9\u{20D4E}\u{26C81}\u{26D2A}\u{217DC}\u59D9\u{217FB}\u{217B2}\u{26DA6}\u6D71\u{21828}\u{216D5}\u59F9\u{26E45}\u5AAB\u5A63\u36E6\u{249A9}\u5A77\u3708\u5A96\u7465\u5AD3\u{26FA1}\u{22554}\u3D85\u{21911}\u3732\u{216B8}\u5E83\u52D0\u5B76\u6588\u5B7C\u{27A0E}\u4004\u485D\u{20204}\u5BD5\u6160\u{21A34}\u{259CC}\u{205A5}\u5BF3\u5B9D\u4D10\u5C05\u{21B44}\u5C13\u73CE\u5C14\u{21CA5}\u{26B28}\u5C49\u48DD\u5C85\u5CE9\u5CEF\u5D8B\u{21DF9}\u{21E37}\u5D10\u5D18\u5D46\u{21EA4}\u5CBA\u5DD7\u82FC\u382D\u{24901}\u{22049}\u{22173}\u8287\u3836\u3BC2\u5E2E\u6A8A\u5E75\u5E7A\u{244BC}\u{20CD3}\u53A6\u4EB7\u5ED0\u53A8\u{21771}\u5E09\u5EF4\u{28482}"],
["fc40", "\u5EF9\u5EFB\u38A0\u5EFC\u683E\u941B\u5F0D\u{201C1}\u{2F894}\u3ADE\u48AE\u{2133A}\u5F3A\u{26888}\u{223D0}\u5F58\u{22471}\u5F63\u97BD\u{26E6E}\u5F72\u9340\u{28A36}\u5FA7\u5DB6\u3D5F\u{25250}\u{21F6A}\u{270F8}\u{22668}\u91D6\u{2029E}\u{28A29}\u6031\u6685\u{21877}\u3963\u3DC7\u3639\u5790\u{227B4}\u7971\u3E40\u609E\u60A4\u60B3\u{24982}\u{2498F}\u{27A53}\u74A4\u50E1\u5AA0\u6164\u8424\u6142\u{2F8A6}\u{26ED2}\u6181\u51F4\u{20656}\u6187\u5BAA\u{23FB7}"],
["fca1", "\u{2285F}\u61D3\u{28B9D}\u{2995D}\u61D0\u3932\u{22980}\u{228C1}\u6023\u615C\u651E\u638B\u{20118}\u62C5\u{21770}\u62D5\u{22E0D}\u636C\u{249DF}\u3A17\u6438\u63F8\u{2138E}\u{217FC}\u6490\u6F8A\u{22E36}\u9814\u{2408C}\u{2571D}\u64E1\u64E5\u947B\u3A66\u643A\u3A57\u654D\u6F16\u{24A28}\u{24A23}\u6585\u656D\u655F\u{2307E}\u65B5\u{24940}\u4B37\u65D1\u40D8\u{21829}\u65E0\u65E3\u5FDF\u{23400}\u6618\u{231F7}\u{231F8}\u6644\u{231A4}\u{231A5}\u664B\u{20E75}\u6667\u{251E6}\u6673\u6674\u{21E3D}\u{23231}\u{285F4}\u{231C8}\u{25313}\u77C5\u{228F7}\u99A4\u6702\u{2439C}\u{24A21}\u3B2B\u69FA\u{237C2}\u675E\u6767\u6762\u{241CD}\u{290ED}\u67D7\u44E9\u6822\u6E50\u923C\u6801\u{233E6}\u{26DA0}\u685D"],
["fd40", "\u{2346F}\u69E1\u6A0B\u{28ADF}\u6973\u68C3\u{235CD}\u6901\u6900\u3D32\u3A01\u{2363C}\u3B80\u67AC\u6961\u{28A4A}\u42FC\u6936\u6998\u3BA1\u{203C9}\u8363\u5090\u69F9\u{23659}\u{2212A}\u6A45\u{23703}\u6A9D\u3BF3\u67B1\u6AC8\u{2919C}\u3C0D\u6B1D\u{20923}\u60DE\u6B35\u6B74\u{227CD}\u6EB5\u{23ADB}\u{203B5}\u{21958}\u3740\u5421\u{23B5A}\u6BE1\u{23EFC}\u6BDC\u6C37\u{2248B}\u{248F1}\u{26B51}\u6C5A\u8226\u6C79\u{23DBC}\u44C5\u{23DBD}\u{241A4}\u{2490C}\u{24900}"],
["fda1", "\u{23CC9}\u36E5\u3CEB\u{20D32}\u9B83\u{231F9}\u{22491}\u7F8F\u6837\u{26D25}\u{26DA1}\u{26DEB}\u6D96\u6D5C\u6E7C\u6F04\u{2497F}\u{24085}\u{26E72}\u8533\u{26F74}\u51C7\u6C9C\u6E1D\u842E\u{28B21}\u6E2F\u{23E2F}\u7453\u{23F82}\u79CC\u6E4F\u5A91\u{2304B}\u6FF8\u370D\u6F9D\u{23E30}\u6EFA\u{21497}\u{2403D}\u4555\u93F0\u6F44\u6F5C\u3D4E\u6F74\u{29170}\u3D3B\u6F9F\u{24144}\u6FD3\u{24091}\u{24155}\u{24039}\u{23FF0}\u{23FB4}\u{2413F}\u51DF\u{24156}\u{24157}\u{24140}\u{261DD}\u704B\u707E\u70A7\u7081\u70CC\u70D5\u70D6\u70DF\u4104\u3DE8\u71B4\u7196\u{24277}\u712B\u7145\u5A88\u714A\u716E\u5C9C\u{24365}\u714F\u9362\u{242C1}\u712C\u{2445A}\u{24A27}\u{24A22}\u71BA\u{28BE8}\u70BD\u720E"],
["fe40", "\u9442\u7215\u5911\u9443\u7224\u9341\u{25605}\u722E\u7240\u{24974}\u68BD\u7255\u7257\u3E55\u{23044}\u680D\u6F3D\u7282\u732A\u732B\u{24823}\u{2882B}\u48ED\u{28804}\u7328\u732E\u73CF\u73AA\u{20C3A}\u{26A2E}\u73C9\u7449\u{241E2}\u{216E7}\u{24A24}\u6623\u36C5\u{249B7}\u{2498D}\u{249FB}\u73F7\u7415\u6903\u{24A26}\u7439\u{205C3}\u3ED7\u745C\u{228AD}\u7460\u{28EB2}\u7447\u73E4\u7476\u83B9\u746C\u3730\u7474\u93F1\u6A2C\u7482\u4953\u{24A8C}"],
["fea1", "\u{2415F}\u{24A79}\u{28B8F}\u5B46\u{28C03}\u{2189E}\u74C8\u{21988}\u750E\u74E9\u751E\u{28ED9}\u{21A4B}\u5BD7\u{28EAC}\u9385\u754D\u754A\u7567\u756E\u{24F82}\u3F04\u{24D13}\u758E\u745D\u759E\u75B4\u7602\u762C\u7651\u764F\u766F\u7676\u{263F5}\u7690\u81EF\u37F8\u{26911}\u{2690E}\u76A1\u76A5\u76B7\u76CC\u{26F9F}\u8462\u{2509D}\u{2517D}\u{21E1C}\u771E\u7726\u7740\u64AF\u{25220}\u7758\u{232AC}\u77AF\u{28964}\u{28968}\u{216C1}\u77F4\u7809\u{21376}\u{24A12}\u68CA\u78AF\u78C7\u78D3\u96A5\u792E\u{255E0}\u78D7\u7934\u78B1\u{2760C}\u8FB8\u8884\u{28B2B}\u{26083}\u{2261C}\u7986\u8900\u6902\u7980\u{25857}\u799D\u{27B39}\u793C\u79A9\u6E2A\u{27126}\u3EA8\u79C6\u{2910D}\u79D4"]
];
}
});
var require_dbcs_data2 = __commonJS2({
"node_modules/raw-body/node_modules/iconv-lite/encodings/dbcs-data.js"(exports2, module2) {
"use strict";
module2.exports = {
// == Japanese/ShiftJIS ====================================================
// All japanese encodings are based on JIS X set of standards:
// JIS X 0201 - Single-byte encoding of ASCII + ¥ + Kana chars at 0xA1-0xDF.
// JIS X 0208 - Main set of 6879 characters, placed in 94x94 plane, to be encoded by 2 bytes.
// Has several variations in 1978, 1983, 1990 and 1997.
// JIS X 0212 - Supplementary plane of 6067 chars in 94x94 plane. 1990. Effectively dead.
// JIS X 0213 - Extension and modern replacement of 0208 and 0212. Total chars: 11233.
// 2 planes, first is superset of 0208, second - revised 0212.
// Introduced in 2000, revised 2004. Some characters are in Unicode Plane 2 (0x2xxxx)
// Byte encodings are:
// * Shift_JIS: Compatible with 0201, uses not defined chars in top half as lead bytes for double-byte
// encoding of 0208. Lead byte ranges: 0x81-0x9F, 0xE0-0xEF; Trail byte ranges: 0x40-0x7E, 0x80-0x9E, 0x9F-0xFC.
// Windows CP932 is a superset of Shift_JIS. Some companies added more chars, notably KDDI.
// * EUC-JP: Up to 3 bytes per character. Used mostly on *nixes.
// 0x00-0x7F - lower part of 0201
// 0x8E, 0xA1-0xDF - upper part of 0201
// (0xA1-0xFE)x2 - 0208 plane (94x94).
// 0x8F, (0xA1-0xFE)x2 - 0212 plane (94x94).
// * JIS X 208: 7-bit, direct encoding of 0208. Byte ranges: 0x21-0x7E (94 values). Uncommon.
// Used as-is in ISO2022 family.
// * ISO2022-JP: Stateful encoding, with escape sequences to switch between ASCII,
// 0201-1976 Roman, 0208-1978, 0208-1983.
// * ISO2022-JP-1: Adds esc seq for 0212-1990.
// * ISO2022-JP-2: Adds esc seq for GB2313-1980, KSX1001-1992, ISO8859-1, ISO8859-7.
// * ISO2022-JP-3: Adds esc seq for 0201-1976 Kana set, 0213-2000 Planes 1, 2.
// * ISO2022-JP-2004: Adds 0213-2004 Plane 1.
//
// After JIS X 0213 appeared, Shift_JIS-2004, EUC-JISX0213 and ISO2022-JP-2004 followed, with just changing the planes.
//
// Overall, it seems that it's a mess :( http://www8.plala.or.jp/tkubota1/unicode-symbols-map2.html
"shiftjis": {
type: "_dbcs",
table: function() {
return require_shiftjis2();
},
encodeAdd: { "\xA5": 92, "\u203E": 126 },
encodeSkipVals: [{ from: 60736, to: 63808 }]
},
"csshiftjis": "shiftjis",
"mskanji": "shiftjis",
"sjis": "shiftjis",
"windows31j": "shiftjis",
"ms31j": "shiftjis",
"xsjis": "shiftjis",
"windows932": "shiftjis",
"ms932": "shiftjis",
"932": "shiftjis",
"cp932": "shiftjis",
"eucjp": {
type: "_dbcs",
table: function() {
return require_eucjp2();
},
encodeAdd: { "\xA5": 92, "\u203E": 126 }
},
// TODO: KDDI extension to Shift_JIS
// TODO: IBM CCSID 942 = CP932, but F0-F9 custom chars and other char changes.
// TODO: IBM CCSID 943 = Shift_JIS = CP932 with original Shift_JIS lower 128 chars.
// == Chinese/GBK ==========================================================
// http://en.wikipedia.org/wiki/GBK
// We mostly implement W3C recommendation: https://www.w3.org/TR/encoding/#gbk-encoder
// Oldest GB2312 (1981, ~7600 chars) is a subset of CP936
"gb2312": "cp936",
"gb231280": "cp936",
"gb23121980": "cp936",
"csgb2312": "cp936",
"csiso58gb231280": "cp936",
"euccn": "cp936",
// Microsoft's CP936 is a subset and approximation of GBK.
"windows936": "cp936",
"ms936": "cp936",
"936": "cp936",
"cp936": {
type: "_dbcs",
table: function() {
return require_cp9362();
}
},
// GBK (~22000 chars) is an extension of CP936 that added user-mapped chars and some other.
"gbk": {
type: "_dbcs",
table: function() {
return require_cp9362().concat(require_gbk_added2());
}
},
"xgbk": "gbk",
"isoir58": "gbk",
// GB18030 is an algorithmic extension of GBK.
// Main source: https://www.w3.org/TR/encoding/#gbk-encoder
// http://icu-project.org/docs/papers/gb18030.html
// http://source.icu-project.org/repos/icu/data/trunk/charset/data/xml/gb-18030-2000.xml
// http://www.khngai.com/chinese/charmap/tblgbk.php?page=0
"gb18030": {
type: "_dbcs",
table: function() {
return require_cp9362().concat(require_gbk_added2());
},
gb18030: function() {
return require_gb18030_ranges2();
},
encodeSkipVals: [128],
encodeAdd: { "\u20AC": 41699 }
},
"chinese": "gb18030",
// == Korean ===============================================================
// EUC-KR, KS_C_5601 and KS X 1001 are exactly the same.
"windows949": "cp949",
"ms949": "cp949",
"949": "cp949",
"cp949": {
type: "_dbcs",
table: function() {
return require_cp9492();
}
},
"cseuckr": "cp949",
"csksc56011987": "cp949",
"euckr": "cp949",
"isoir149": "cp949",
"korean": "cp949",
"ksc56011987": "cp949",
"ksc56011989": "cp949",
"ksc5601": "cp949",
// == Big5/Taiwan/Hong Kong ================================================
// There are lots of tables for Big5 and cp950. Please see the following links for history:
// http://moztw.org/docs/big5/ http://www.haible.de/bruno/charsets/conversion-tables/Big5.html
// Variations, in roughly number of defined chars:
// * Windows CP 950: Microsoft variant of Big5. Canonical: http://www.unicode.org/Public/MAPPINGS/VENDORS/MICSFT/WINDOWS/CP950.TXT
// * Windows CP 951: Microsoft variant of Big5-HKSCS-2001. Seems to be never public. http://me.abelcheung.org/articles/research/what-is-cp951/
// * Big5-2003 (Taiwan standard) almost superset of cp950.
// * Unicode-at-on (UAO) / Mozilla 1.8. Falling out of use on the Web. Not supported by other browsers.
// * Big5-HKSCS (-2001, -2004, -2008). Hong Kong standard.
// many unicode code points moved from PUA to Supplementary plane (U+2XXXX) over the years.
// Plus, it has 4 combining sequences.
// Seems that Mozilla refused to support it for 10 yrs. https://bugzilla.mozilla.org/show_bug.cgi?id=162431 https://bugzilla.mozilla.org/show_bug.cgi?id=310299
// because big5-hkscs is the only encoding to include astral characters in non-algorithmic way.
// Implementations are not consistent within browsers; sometimes labeled as just big5.
// MS Internet Explorer switches from big5 to big5-hkscs when a patch applied.
// Great discussion & recap of what's going on https://bugzilla.mozilla.org/show_bug.cgi?id=912470#c31
// In the encoder, it might make sense to support encoding old PUA mappings to Big5 bytes seq-s.
// Official spec: http://www.ogcio.gov.hk/en/business/tech_promotion/ccli/terms/doc/2003cmp_2008.txt
// http://www.ogcio.gov.hk/tc/business/tech_promotion/ccli/terms/doc/hkscs-2008-big5-iso.txt
//
// Current understanding of how to deal with Big5(-HKSCS) is in the Encoding Standard, http://encoding.spec.whatwg.org/#big5-encoder
// Unicode mapping (http://www.unicode.org/Public/MAPPINGS/OBSOLETE/EASTASIA/OTHER/BIG5.TXT) is said to be wrong.
"windows950": "cp950",
"ms950": "cp950",
"950": "cp950",
"cp950": {
type: "_dbcs",
table: function() {
return require_cp9502();
}
},
// Big5 has many variations and is an extension of cp950. We use Encoding Standard's as a consensus.
"big5": "big5hkscs",
"big5hkscs": {
type: "_dbcs",
table: function() {
return require_cp9502().concat(require_big5_added2());
},
encodeSkipVals: [
// Although Encoding Standard says we should avoid encoding to HKSCS area (See Step 1 of
// https://encoding.spec.whatwg.org/#index-big5-pointer), we still do it to increase compatibility with ICU.
// But if a single unicode point can be encoded both as HKSCS and regular Big5, we prefer the latter.
36457,
36463,
36478,
36523,
36532,
36557,
36560,
36695,
36713,
36718,
36811,
36862,
36973,
36986,
37060,
37084,
37105,
37311,
37551,
37552,
37553,
37554,
37585,
37959,
38090,
38361,
38652,
39285,
39798,
39800,
39803,
39878,
39902,
39916,
39926,
40002,
40019,
40034,
40040,
40043,
40055,
40124,
40125,
40144,
40279,
40282,
40388,
40431,
40443,
40617,
40687,
40701,
40800,
40907,
41079,
41180,
41183,
36812,
37576,
38468,
38637,
// Step 2 of https://encoding.spec.whatwg.org/#index-big5-pointer: Use last pointer for U+2550, U+255E, U+2561, U+256A, U+5341, or U+5345
41636,
41637,
41639,
41638,
41676,
41678
]
},
"cnbig5": "big5hkscs",
"csbig5": "big5hkscs",
"xxbig5": "big5hkscs"
};
}
});
var require_encodings2 = __commonJS2({
"node_modules/raw-body/node_modules/iconv-lite/encodings/index.js"(exports2, module2) {
"use strict";
var modules = [
require_internal2(),
require_utf322(),
require_utf162(),
require_utf72(),
require_sbcs_codec2(),
require_sbcs_data2(),
require_sbcs_data_generated2(),
require_dbcs_codec2(),
require_dbcs_data2()
];
for (i = 0; i < modules.length; i++) {
module2 = modules[i];
for (enc in module2)
if (Object.prototype.hasOwnProperty.call(module2, enc))
exports2[enc] = module2[enc];
}
var module2;
var enc;
var i;
}
});
var require_streams2 = __commonJS2({
"node_modules/raw-body/node_modules/iconv-lite/lib/streams.js"(exports2, module2) {
"use strict";
var Buffer2 = require_safer2().Buffer;
module2.exports = function(stream_module) {
var Transform2 = stream_module.Transform;
function IconvLiteEncoderStream(conv, options) {
this.conv = conv;
options = options || {};
options.decodeStrings = false;
Transform2.call(this, options);
}
IconvLiteEncoderStream.prototype = Object.create(Transform2.prototype, {
constructor: { value: IconvLiteEncoderStream }
});
IconvLiteEncoderStream.prototype._transform = function(chunk, encoding, done) {
if (typeof chunk != "string")
return done(new Error("Iconv encoding stream needs strings as its input."));
try {
var res = this.conv.write(chunk);
if (res && res.length) this.push(res);
done();
} catch (e) {
done(e);
}
};
IconvLiteEncoderStream.prototype._flush = function(done) {
try {
var res = this.conv.end();
if (res && res.length) this.push(res);
done();
} catch (e) {
done(e);
}
};
IconvLiteEncoderStream.prototype.collect = function(cb) {
var chunks = [];
this.on("error", cb);
this.on("data", function(chunk) {
chunks.push(chunk);
});
this.on("end", function() {
cb(null, Buffer2.concat(chunks));
});
return this;
};
function IconvLiteDecoderStream(conv, options) {
this.conv = conv;
options = options || {};
options.encoding = this.encoding = "utf8";
Transform2.call(this, options);
}
IconvLiteDecoderStream.prototype = Object.create(Transform2.prototype, {
constructor: { value: IconvLiteDecoderStream }
});
IconvLiteDecoderStream.prototype._transform = function(chunk, encoding, done) {
if (!Buffer2.isBuffer(chunk) && !(chunk instanceof Uint8Array))
return done(new Error("Iconv decoding stream needs buffers as its input."));
try {
var res = this.conv.write(chunk);
if (res && res.length) this.push(res, this.encoding);
done();
} catch (e) {
done(e);
}
};
IconvLiteDecoderStream.prototype._flush = function(done) {
try {
var res = this.conv.end();
if (res && res.length) this.push(res, this.encoding);
done();
} catch (e) {
done(e);
}
};
IconvLiteDecoderStream.prototype.collect = function(cb) {
var res = "";
this.on("error", cb);
this.on("data", function(chunk) {
res += chunk;
});
this.on("end", function() {
cb(null, res);
});
return this;
};
return {
IconvLiteEncoderStream,
IconvLiteDecoderStream
};
};
}
});
var require_lib2 = __commonJS2({
"node_modules/raw-body/node_modules/iconv-lite/lib/index.js"(exports2, module2) {
"use strict";
var Buffer2 = require_safer2().Buffer;
var bomHandling = require_bom_handling2();
var iconv2 = module2.exports;
iconv2.encodings = null;
iconv2.defaultCharUnicode = "\uFFFD";
iconv2.defaultCharSingleByte = "?";
iconv2.encode = function encode3(str, encoding, options) {
str = "" + (str || "");
var encoder = iconv2.getEncoder(encoding, options);
var res = encoder.write(str);
var trail = encoder.end();
return trail && trail.length > 0 ? Buffer2.concat([res, trail]) : res;
};
iconv2.decode = function decode(buf, encoding, options) {
if (typeof buf === "string") {
if (!iconv2.skipDecodeWarning) {
console.error("Iconv-lite warning: decode()-ing strings is deprecated. Refer to https://github.com/ashtuchkin/iconv-lite/wiki/Use-Buffers-when-decoding");
iconv2.skipDecodeWarning = true;
}
buf = Buffer2.from("" + (buf || ""), "binary");
}
var decoder = iconv2.getDecoder(encoding, options);
var res = decoder.write(buf);
var trail = decoder.end();
return trail ? res + trail : res;
};
iconv2.encodingExists = function encodingExists(enc) {
try {
iconv2.getCodec(enc);
return true;
} catch (e) {
return false;
}
};
iconv2.toEncoding = iconv2.encode;
iconv2.fromEncoding = iconv2.decode;
iconv2._codecDataCache = {};
iconv2.getCodec = function getCodec(encoding) {
if (!iconv2.encodings)
iconv2.encodings = require_encodings2();
var enc = iconv2._canonicalizeEncoding(encoding);
var codecOptions = {};
while (true) {
var codec = iconv2._codecDataCache[enc];
if (codec)
return codec;
var codecDef = iconv2.encodings[enc];
switch (typeof codecDef) {
case "string":
enc = codecDef;
break;
case "object":
for (var key in codecDef)
codecOptions[key] = codecDef[key];
if (!codecOptions.encodingName)
codecOptions.encodingName = enc;
enc = codecDef.type;
break;
case "function":
if (!codecOptions.encodingName)
codecOptions.encodingName = enc;
codec = new codecDef(codecOptions, iconv2);
iconv2._codecDataCache[codecOptions.encodingName] = codec;
return codec;
default:
throw new Error("Encoding not recognized: '" + encoding + "' (searched as: '" + enc + "')");
}
}
};
iconv2._canonicalizeEncoding = function(encoding) {
return ("" + encoding).toLowerCase().replace(/:\d{4}$|[^0-9a-z]/g, "");
};
iconv2.getEncoder = function getEncoder(encoding, options) {
var codec = iconv2.getCodec(encoding), encoder = new codec.encoder(options, codec);
if (codec.bomAware && options && options.addBOM)
encoder = new bomHandling.PrependBOM(encoder, options);
return encoder;
};
iconv2.getDecoder = function getDecoder2(encoding, options) {
var codec = iconv2.getCodec(encoding), decoder = new codec.decoder(options, codec);
if (codec.bomAware && !(options && options.stripBOM === false))
decoder = new bomHandling.StripBOM(decoder, options);
return decoder;
};
iconv2.enableStreamingAPI = function enableStreamingAPI(stream_module2) {
if (iconv2.supportsStreams)
return;
var streams = require_streams2()(stream_module2);
iconv2.IconvLiteEncoderStream = streams.IconvLiteEncoderStream;
iconv2.IconvLiteDecoderStream = streams.IconvLiteDecoderStream;
iconv2.encodeStream = function encodeStream(encoding, options) {
return new iconv2.IconvLiteEncoderStream(iconv2.getEncoder(encoding, options), options);
};
iconv2.decodeStream = function decodeStream(encoding, options) {
return new iconv2.IconvLiteDecoderStream(iconv2.getDecoder(encoding, options), options);
};
iconv2.supportsStreams = true;
};
var stream_module;
try {
stream_module = require("stream");
} catch (e) {
}
if (stream_module && stream_module.Transform) {
iconv2.enableStreamingAPI(stream_module);
} else {
iconv2.encodeStream = iconv2.decodeStream = function() {
throw new Error("iconv-lite Streaming API is not enabled. Use iconv.enableStreamingAPI(require('stream')); to enable it.");
};
}
if (false) {
console.error("iconv-lite warning: js files use non-utf8 encoding. See https://github.com/ashtuchkin/iconv-lite/wiki/Javascript-source-file-encodings for more info.");
}
}
});
var require_unpipe = __commonJS2({
"node_modules/unpipe/index.js"(exports2, module2) {
"use strict";
module2.exports = unpipe;
function hasPipeDataListeners(stream5) {
var listeners = stream5.listeners("data");
for (var i = 0; i < listeners.length; i++) {
if (listeners[i].name === "ondata") {
return true;
}
}
return false;
}
function unpipe(stream5) {
if (!stream5) {
throw new TypeError("argument stream is required");
}
if (typeof stream5.unpipe === "function") {
stream5.unpipe();
return;
}
if (!hasPipeDataListeners(stream5)) {
return;
}
var listener;
var listeners = stream5.listeners("close");
for (var i = 0; i < listeners.length; i++) {
listener = listeners[i];
if (listener.name !== "cleanup" && listener.name !== "onclose") {
continue;
}
listener.call(stream5);
}
}
}
});
var require_raw_body = __commonJS2({
"node_modules/raw-body/index.js"(exports2, module2) {
"use strict";
var asyncHooks = tryRequireAsyncHooks();
var bytes = require_bytes();
var createError = require_http_errors();
var iconv2 = require_lib2();
var unpipe = require_unpipe();
module2.exports = getRawBody2;
var ICONV_ENCODING_MESSAGE_REGEXP = /^Encoding not recognized: /;
function getDecoder2(encoding) {
if (!encoding) return null;
try {
return iconv2.getDecoder(encoding);
} catch (e) {
if (!ICONV_ENCODING_MESSAGE_REGEXP.test(e.message)) throw e;
throw createError(415, "specified encoding unsupported", {
encoding,
type: "encoding.unsupported"
});
}
}
function getRawBody2(stream5, options, callback) {
var done = callback;
var opts = options || {};
if (stream5 === void 0) {
throw new TypeError("argument stream is required");
} else if (typeof stream5 !== "object" || stream5 === null || typeof stream5.on !== "function") {
throw new TypeError("argument stream must be a stream");
}
if (options === true || typeof options === "string") {
opts = {
encoding: options
};
}
if (typeof options === "function") {
done = options;
opts = {};
}
if (done !== void 0 && typeof done !== "function") {
throw new TypeError("argument callback must be a function");
}
if (!done && !global.Promise) {
throw new TypeError("argument callback is required");
}
var encoding = opts.encoding !== true ? opts.encoding : "utf-8";
var limit = bytes.parse(opts.limit);
var length = opts.length != null && !isNaN(opts.length) ? parseInt(opts.length, 10) : null;
if (done) {
return readStream2(stream5, encoding, length, limit, wrap2(done));
}
return new Promise(function executor(resolve, reject) {
readStream2(stream5, encoding, length, limit, function onRead(err2, buf) {
if (err2) return reject(err2);
resolve(buf);
});
});
}
function halt(stream5) {
unpipe(stream5);
if (typeof stream5.pause === "function") {
stream5.pause();
}
}
function readStream2(stream5, encoding, length, limit, callback) {
var complete = false;
var sync = true;
if (limit !== null && length !== null && length > limit) {
return done(createError(413, "request entity too large", {
expected: length,
length,
limit,
type: "entity.too.large"
}));
}
var state = stream5._readableState;
if (stream5._decoder || state && (state.encoding || state.decoder)) {
return done(createError(500, "stream encoding should not be set", {
type: "stream.encoding.set"
}));
}
if (typeof stream5.readable !== "undefined" && !stream5.readable) {
return done(createError(500, "stream is not readable", {
type: "stream.not.readable"
}));
}
var received = 0;
var decoder;
try {
decoder = getDecoder2(encoding);
} catch (err2) {
return done(err2);
}
var buffer = decoder ? "" : [];
stream5.on("aborted", onAborted);
stream5.on("close", cleanup);
stream5.on("data", onData);
stream5.on("end", onEnd);
stream5.on("error", onEnd);
sync = false;
function done() {
var args = new Array(arguments.length);
for (var i = 0; i < args.length; i++) {
args[i] = arguments[i];
}
complete = true;
if (sync) {
process.nextTick(invokeCallback);
} else {
invokeCallback();
}
function invokeCallback() {
cleanup();
if (args[0]) {
halt(stream5);
}
callback.apply(null, args);
}
}
function onAborted() {
if (complete) return;
done(createError(400, "request aborted", {
code: "ECONNABORTED",
expected: length,
length,
received,
type: "request.aborted"
}));
}
function onData(chunk) {
if (complete) return;
received += chunk.length;
if (limit !== null && received > limit) {
done(createError(413, "request entity too large", {
limit,
received,
type: "entity.too.large"
}));
} else if (decoder) {
buffer += decoder.write(chunk);
} else {
buffer.push(chunk);
}
}
function onEnd(err2) {
if (complete) return;
if (err2) return done(err2);
if (length !== null && received !== length) {
done(createError(400, "request size did not match content length", {
expected: length,
length,
received,
type: "request.size.invalid"
}));
} else {
var string = decoder ? buffer + (decoder.end() || "") : Buffer.concat(buffer);
done(null, string);
}
}
function cleanup() {
buffer = null;
stream5.removeListener("aborted", onAborted);
stream5.removeListener("data", onData);
stream5.removeListener("end", onEnd);
stream5.removeListener("error", onEnd);
stream5.removeListener("close", cleanup);
}
}
function tryRequireAsyncHooks() {
try {
return require("async_hooks");
} catch (e) {
return {};
}
}
function wrap2(fn) {
var res;
if (asyncHooks.AsyncResource) {
res = new asyncHooks.AsyncResource(fn.name || "bound-anonymous-fn");
}
if (!res || !res.runInAsyncScope) {
return fn;
}
return res.runInAsyncScope.bind(res, fn, null);
}
}
});
var require_content_type = __commonJS2({
"node_modules/content-type/index.js"(exports2) {
"use strict";
var PARAM_REGEXP = /; *([!#$%&'*+.^_`|~0-9A-Za-z-]+) *= *("(?:[\u000b\u0020\u0021\u0023-\u005b\u005d-\u007e\u0080-\u00ff]|\\[\u000b\u0020-\u00ff])*"|[!#$%&'*+.^_`|~0-9A-Za-z-]+) */g;
var TEXT_REGEXP = /^[\u000b\u0020-\u007e\u0080-\u00ff]+$/;
var TOKEN_REGEXP = /^[!#$%&'*+.^_`|~0-9A-Za-z-]+$/;
var QESC_REGEXP = /\\([\u000b\u0020-\u00ff])/g;
var QUOTE_REGEXP = /([\\"])/g;
var TYPE_REGEXP = /^[!#$%&'*+.^_`|~0-9A-Za-z-]+\/[!#$%&'*+.^_`|~0-9A-Za-z-]+$/;
exports2.format = format;
exports2.parse = parse8;
function format(obj) {
if (!obj || typeof obj !== "object") {
throw new TypeError("argument obj is required");
}
var parameters = obj.parameters;
var type = obj.type;
if (!type || !TYPE_REGEXP.test(type)) {
throw new TypeError("invalid type");
}
var string = type;
if (parameters && typeof parameters === "object") {
var param;
var params = Object.keys(parameters).sort();
for (var i = 0; i < params.length; i++) {
param = params[i];
if (!TOKEN_REGEXP.test(param)) {
throw new TypeError("invalid parameter name");
}
string += "; " + param + "=" + qstring(parameters[param]);
}
}
return string;
}
function parse8(string) {
if (!string) {
throw new TypeError("argument string is required");
}
var header = typeof string === "object" ? getcontenttype(string) : string;
if (typeof header !== "string") {
throw new TypeError("argument string is required to be a string");
}
var index2 = header.indexOf(";");
var type = index2 !== -1 ? header.slice(0, index2).trim() : header.trim();
if (!TYPE_REGEXP.test(type)) {
throw new TypeError("invalid media type");
}
var obj = new ContentType(type.toLowerCase());
if (index2 !== -1) {
var key;
var match;
var value;
PARAM_REGEXP.lastIndex = index2;
while (match = PARAM_REGEXP.exec(header)) {
if (match.index !== index2) {
throw new TypeError("invalid parameter format");
}
index2 += match[0].length;
key = match[1].toLowerCase();
value = match[2];
if (value.charCodeAt(0) === 34) {
value = value.slice(1, -1);
if (value.indexOf("\\") !== -1) {
value = value.replace(QESC_REGEXP, "$1");
}
}
obj.parameters[key] = value;
}
if (index2 !== header.length) {
throw new TypeError("invalid parameter format");
}
}
return obj;
}
function getcontenttype(obj) {
var header;
if (typeof obj.getHeader === "function") {
header = obj.getHeader("content-type");
} else if (typeof obj.headers === "object") {
header = obj.headers && obj.headers["content-type"];
}
if (typeof header !== "string") {
throw new TypeError("content-type header is missing from object");
}
return header;
}
function qstring(val2) {
var str = String(val2);
if (TOKEN_REGEXP.test(str)) {
return str;
}
if (str.length > 0 && !TEXT_REGEXP.test(str)) {
throw new TypeError("invalid parameter value");
}
return '"' + str.replace(QUOTE_REGEXP, "\\$1") + '"';
}
function ContentType(type) {
this.parameters = /* @__PURE__ */ Object.create(null);
this.type = type;
}
}
});
var require_ms2 = __commonJS2({
"node_modules/ms/index.js"(exports2, module2) {
var s = 1e3;
var m = s * 60;
var h = m * 60;
var d = h * 24;
var w = d * 7;
var y = d * 365.25;
module2.exports = function(val2, options) {
options = options || {};
var type = typeof val2;
if (type === "string" && val2.length > 0) {
return parse8(val2);
} else if (type === "number" && isFinite(val2)) {
return options.long ? fmtLong(val2) : fmtShort(val2);
}
throw new Error(
"val is not a non-empty string or a valid number. val=" + JSON.stringify(val2)
);
};
function parse8(str) {
str = String(str);
if (str.length > 100) {
return;
}
var match = /^(-?(?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(
str
);
if (!match) {
return;
}
var n = parseFloat(match[1]);
var type = (match[2] || "ms").toLowerCase();
switch (type) {
case "years":
case "year":
case "yrs":
case "yr":
case "y":
return n * y;
case "weeks":
case "week":
case "w":
return n * w;
case "days":
case "day":
case "d":
return n * d;
case "hours":
case "hour":
case "hrs":
case "hr":
case "h":
return n * h;
case "minutes":
case "minute":
case "mins":
case "min":
case "m":
return n * m;
case "seconds":
case "second":
case "secs":
case "sec":
case "s":
return n * s;
case "milliseconds":
case "millisecond":
case "msecs":
case "msec":
case "ms":
return n;
default:
return void 0;
}
}
function fmtShort(ms) {
var msAbs = Math.abs(ms);
if (msAbs >= d) {
return Math.round(ms / d) + "d";
}
if (msAbs >= h) {
return Math.round(ms / h) + "h";
}
if (msAbs >= m) {
return Math.round(ms / m) + "m";
}
if (msAbs >= s) {
return Math.round(ms / s) + "s";
}
return ms + "ms";
}
function fmtLong(ms) {
var msAbs = Math.abs(ms);
if (msAbs >= d) {
return plural(ms, msAbs, d, "day");
}
if (msAbs >= h) {
return plural(ms, msAbs, h, "hour");
}
if (msAbs >= m) {
return plural(ms, msAbs, m, "minute");
}
if (msAbs >= s) {
return plural(ms, msAbs, s, "second");
}
return ms + " ms";
}
function plural(ms, msAbs, n, name) {
var isPlural = msAbs >= n * 1.5;
return Math.round(ms / n) + " " + name + (isPlural ? "s" : "");
}
}
});
var require_common2 = __commonJS2({
"node_modules/debug/src/common.js"(exports2, module2) {
function setup(env) {
createDebug.debug = createDebug;
createDebug.default = createDebug;
createDebug.coerce = coerce22;
createDebug.disable = disable;
createDebug.enable = enable;
createDebug.enabled = enabled;
createDebug.humanize = require_ms2();
createDebug.destroy = destroy;
Object.keys(env).forEach((key) => {
createDebug[key] = env[key];
});
createDebug.names = [];
createDebug.skips = [];
createDebug.formatters = {};
function selectColor(namespace) {
let hash = 0;
for (let i = 0; i < namespace.length; i++) {
hash = (hash << 5) - hash + namespace.charCodeAt(i);
hash |= 0;
}
return createDebug.colors[Math.abs(hash) % createDebug.colors.length];
}
createDebug.selectColor = selectColor;
function createDebug(namespace) {
let prevTime;
let enableOverride = null;
let namespacesCache;
let enabledCache;
function debug(...args) {
if (!debug.enabled) {
return;
}
const self2 = debug;
const curr = Number(/* @__PURE__ */ new Date());
const ms = curr - (prevTime || curr);
self2.diff = ms;
self2.prev = prevTime;
self2.curr = curr;
prevTime = curr;
args[0] = createDebug.coerce(args[0]);
if (typeof args[0] !== "string") {
args.unshift("%O");
}
let index2 = 0;
args[0] = args[0].replace(/%([a-zA-Z%])/g, (match, format) => {
if (match === "%%") {
return "%";
}
index2++;
const formatter = createDebug.formatters[format];
if (typeof formatter === "function") {
const val2 = args[index2];
match = formatter.call(self2, val2);
args.splice(index2, 1);
index2--;
}
return match;
});
createDebug.formatArgs.call(self2, args);
const logFn = self2.log || createDebug.log;
logFn.apply(self2, args);
}
debug.namespace = namespace;
debug.useColors = createDebug.useColors();
debug.color = createDebug.selectColor(namespace);
debug.extend = extend2;
debug.destroy = createDebug.destroy;
Object.defineProperty(debug, "enabled", {
enumerable: true,
configurable: false,
get: () => {
if (enableOverride !== null) {
return enableOverride;
}
if (namespacesCache !== createDebug.namespaces) {
namespacesCache = createDebug.namespaces;
enabledCache = createDebug.enabled(namespace);
}
return enabledCache;
},
set: (v) => {
enableOverride = v;
}
});
if (typeof createDebug.init === "function") {
createDebug.init(debug);
}
return debug;
}
function extend2(namespace, delimiter) {
const newDebug = createDebug(this.namespace + (typeof delimiter === "undefined" ? ":" : delimiter) + namespace);
newDebug.log = this.log;
return newDebug;
}
function enable(namespaces) {
createDebug.save(namespaces);
createDebug.namespaces = namespaces;
createDebug.names = [];
createDebug.skips = [];
const split = (typeof namespaces === "string" ? namespaces : "").trim().replace(" ", ",").split(",").filter(Boolean);
for (const ns of split) {
if (ns[0] === "-") {
createDebug.skips.push(ns.slice(1));
} else {
createDebug.names.push(ns);
}
}
}
function matchesTemplate(search, template) {
let searchIndex = 0;
let templateIndex = 0;
let starIndex = -1;
let matchIndex = 0;
while (searchIndex < search.length) {
if (templateIndex < template.length && (template[templateIndex] === search[searchIndex] || template[templateIndex] === "*")) {
if (template[templateIndex] === "*") {
starIndex = templateIndex;
matchIndex = searchIndex;
templateIndex++;
} else {
searchIndex++;
templateIndex++;
}
} else if (starIndex !== -1) {
templateIndex = starIndex + 1;
matchIndex++;
searchIndex = matchIndex;
} else {
return false;
}
}
while (templateIndex < template.length && template[templateIndex] === "*") {
templateIndex++;
}
return templateIndex === template.length;
}
function disable() {
const namespaces = [
...createDebug.names,
...createDebug.skips.map((namespace) => "-" + namespace)
].join(",");
createDebug.enable("");
return namespaces;
}
function enabled(name) {
for (const skip of createDebug.skips) {
if (matchesTemplate(name, skip)) {
return false;
}
}
for (const ns of createDebug.names) {
if (matchesTemplate(name, ns)) {
return true;
}
}
return false;
}
function coerce22(val2) {
if (val2 instanceof Error) {
return val2.stack || val2.message;
}
return val2;
}
function destroy() {
console.warn("Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.");
}
createDebug.enable(createDebug.load());
return createDebug;
}
module2.exports = setup;
}
});
var require_browser2 = __commonJS2({
"node_modules/debug/src/browser.js"(exports2, module2) {
exports2.formatArgs = formatArgs;
exports2.save = save;
exports2.load = load2;
exports2.useColors = useColors;
exports2.storage = localstorage();
exports2.destroy = /* @__PURE__ */ (() => {
let warned = false;
return () => {
if (!warned) {
warned = true;
console.warn("Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.");
}
};
})();
exports2.colors = [
"#0000CC",
"#0000FF",
"#0033CC",
"#0033FF",
"#0066CC",
"#0066FF",
"#0099CC",
"#0099FF",
"#00CC00",
"#00CC33",
"#00CC66",
"#00CC99",
"#00CCCC",
"#00CCFF",
"#3300CC",
"#3300FF",
"#3333CC",
"#3333FF",
"#3366CC",
"#3366FF",
"#3399CC",
"#3399FF",
"#33CC00",
"#33CC33",
"#33CC66",
"#33CC99",
"#33CCCC",
"#33CCFF",
"#6600CC",
"#6600FF",
"#6633CC",
"#6633FF",
"#66CC00",
"#66CC33",
"#9900CC",
"#9900FF",
"#9933CC",
"#9933FF",
"#99CC00",
"#99CC33",
"#CC0000",
"#CC0033",
"#CC0066",
"#CC0099",
"#CC00CC",
"#CC00FF",
"#CC3300",
"#CC3333",
"#CC3366",
"#CC3399",
"#CC33CC",
"#CC33FF",
"#CC6600",
"#CC6633",
"#CC9900",
"#CC9933",
"#CCCC00",
"#CCCC33",
"#FF0000",
"#FF0033",
"#FF0066",
"#FF0099",
"#FF00CC",
"#FF00FF",
"#FF3300",
"#FF3333",
"#FF3366",
"#FF3399",
"#FF33CC",
"#FF33FF",
"#FF6600",
"#FF6633",
"#FF9900",
"#FF9933",
"#FFCC00",
"#FFCC33"
];
function useColors() {
if (typeof window !== "undefined" && window.process && (window.process.type === "renderer" || window.process.__nwjs)) {
return true;
}
if (typeof navigator !== "undefined" && navigator.userAgent && navigator.userAgent.toLowerCase().match(/(edge|trident)\/(\d+)/)) {
return false;
}
let m;
return typeof document !== "undefined" && document.documentElement && document.documentElement.style && document.documentElement.style.WebkitAppearance || // Is firebug? http://stackoverflow.com/a/398120/376773
typeof window !== "undefined" && window.console && (window.console.firebug || window.console.exception && window.console.table) || // Is firefox >= v31?
// https://developer.mozilla.org/en-US/docs/Tools/Web_Console#Styling_messages
typeof navigator !== "undefined" && navigator.userAgent && (m = navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/)) && parseInt(m[1], 10) >= 31 || // Double check webkit in userAgent just in case we are in a worker
typeof navigator !== "undefined" && navigator.userAgent && navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/);
}
function formatArgs(args) {
args[0] = (this.useColors ? "%c" : "") + this.namespace + (this.useColors ? " %c" : " ") + args[0] + (this.useColors ? "%c " : " ") + "+" + module2.exports.humanize(this.diff);
if (!this.useColors) {
return;
}
const c = "color: " + this.color;
args.splice(1, 0, c, "color: inherit");
let index2 = 0;
let lastC = 0;
args[0].replace(/%[a-zA-Z%]/g, (match) => {
if (match === "%%") {
return;
}
index2++;
if (match === "%c") {
lastC = index2;
}
});
args.splice(lastC, 0, c);
}
exports2.log = console.debug || console.log || (() => {
});
function save(namespaces) {
try {
if (namespaces) {
exports2.storage.setItem("debug", namespaces);
} else {
exports2.storage.removeItem("debug");
}
} catch (error) {
}
}
function load2() {
let r;
try {
r = exports2.storage.getItem("debug");
} catch (error) {
}
if (!r && typeof process !== "undefined" && "env" in process) {
r = process.env.DEBUG;
}
return r;
}
function localstorage() {
try {
return localStorage;
} catch (error) {
}
}
module2.exports = require_common2()(exports2);
var { formatters } = module2.exports;
formatters.j = function(v) {
try {
return JSON.stringify(v);
} catch (error) {
return "[UnexpectedJSONParseError]: " + error.message;
}
};
}
});
var require_has_flag = __commonJS2({
"node_modules/has-flag/index.js"(exports2, module2) {
"use strict";
module2.exports = (flag, argv = process.argv) => {
const prefix = flag.startsWith("-") ? "" : flag.length === 1 ? "-" : "--";
const position = argv.indexOf(prefix + flag);
const terminatorPosition = argv.indexOf("--");
return position !== -1 && (terminatorPosition === -1 || position < terminatorPosition);
};
}
});
var require_supports_color = __commonJS2({
"node_modules/supports-color/index.js"(exports2, module2) {
"use strict";
var os = require("os");
var tty = require("tty");
var hasFlag = require_has_flag();
var { env } = process;
var forceColor;
if (hasFlag("no-color") || hasFlag("no-colors") || hasFlag("color=false") || hasFlag("color=never")) {
forceColor = 0;
} else if (hasFlag("color") || hasFlag("colors") || hasFlag("color=true") || hasFlag("color=always")) {
forceColor = 1;
}
if ("FORCE_COLOR" in env) {
if (env.FORCE_COLOR === "true") {
forceColor = 1;
} else if (env.FORCE_COLOR === "false") {
forceColor = 0;
} else {
forceColor = env.FORCE_COLOR.length === 0 ? 1 : Math.min(parseInt(env.FORCE_COLOR, 10), 3);
}
}
function translateLevel(level) {
if (level === 0) {
return false;
}
return {
level,
hasBasic: true,
has256: level >= 2,
has16m: level >= 3
};
}
function supportsColor(haveStream, streamIsTTY) {
if (forceColor === 0) {
return 0;
}
if (hasFlag("color=16m") || hasFlag("color=full") || hasFlag("color=truecolor")) {
return 3;
}
if (hasFlag("color=256")) {
return 2;
}
if (haveStream && !streamIsTTY && forceColor === void 0) {
return 0;
}
const min = forceColor || 0;
if (env.TERM === "dumb") {
return min;
}
if (process.platform === "win32") {
const osRelease = os.release().split(".");
if (Number(osRelease[0]) >= 10 && Number(osRelease[2]) >= 10586) {
return Number(osRelease[2]) >= 14931 ? 3 : 2;
}
return 1;
}
if ("CI" in env) {
if (["TRAVIS", "CIRCLECI", "APPVEYOR", "GITLAB_CI", "GITHUB_ACTIONS", "BUILDKITE"].some((sign) => sign in env) || env.CI_NAME === "codeship") {
return 1;
}
return min;
}
if ("TEAMCITY_VERSION" in env) {
return /^(9\.(0*[1-9]\d*)\.|\d{2,}\.)/.test(env.TEAMCITY_VERSION) ? 1 : 0;
}
if (env.COLORTERM === "truecolor") {
return 3;
}
if ("TERM_PROGRAM" in env) {
const version = parseInt((env.TERM_PROGRAM_VERSION || "").split(".")[0], 10);
switch (env.TERM_PROGRAM) {
case "iTerm.app":
return version >= 3 ? 3 : 2;
case "Apple_Terminal":
return 2;
}
}
if (/-256(color)?$/i.test(env.TERM)) {
return 2;
}
if (/^screen|^xterm|^vt100|^vt220|^rxvt|color|ansi|cygwin|linux/i.test(env.TERM)) {
return 1;
}
if ("COLORTERM" in env) {
return 1;
}
return min;
}
function getSupportLevel(stream5) {
const level = supportsColor(stream5, stream5 && stream5.isTTY);
return translateLevel(level);
}
module2.exports = {
supportsColor: getSupportLevel,
stdout: translateLevel(supportsColor(true, tty.isatty(1))),
stderr: translateLevel(supportsColor(true, tty.isatty(2)))
};
}
});
var require_node2 = __commonJS2({
"node_modules/debug/src/node.js"(exports2, module2) {
var tty = require("tty");
var util22 = require("util");
exports2.init = init;
exports2.log = log;
exports2.formatArgs = formatArgs;
exports2.save = save;
exports2.load = load2;
exports2.useColors = useColors;
exports2.destroy = util22.deprecate(
() => {
},
"Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`."
);
exports2.colors = [6, 2, 3, 4, 5, 1];
try {
const supportsColor = require_supports_color();
if (supportsColor && (supportsColor.stderr || supportsColor).level >= 2) {
exports2.colors = [
20,
21,
26,
27,
32,
33,
38,
39,
40,
41,
42,
43,
44,
45,
56,
57,
62,
63,
68,
69,
74,
75,
76,
77,
78,
79,
80,
81,
92,
93,
98,
99,
112,
113,
128,
129,
134,
135,
148,
149,
160,
161,
162,
163,
164,
165,
166,
167,
168,
169,
170,
171,
172,
173,
178,
179,
184,
185,
196,
197,
198,
199,
200,
201,
202,
203,
204,
205,
206,
207,
208,
209,
214,
215,
220,
221
];
}
} catch (error) {
}
exports2.inspectOpts = Object.keys(process.env).filter((key) => {
return /^debug_/i.test(key);
}).reduce((obj, key) => {
const prop2 = key.substring(6).toLowerCase().replace(/_([a-z])/g, (_2, k) => {
return k.toUpperCase();
});
let val2 = process.env[key];
if (/^(yes|on|true|enabled)$/i.test(val2)) {
val2 = true;
} else if (/^(no|off|false|disabled)$/i.test(val2)) {
val2 = false;
} else if (val2 === "null") {
val2 = null;
} else {
val2 = Number(val2);
}
obj[prop2] = val2;
return obj;
}, {});
function useColors() {
return "colors" in exports2.inspectOpts ? Boolean(exports2.inspectOpts.colors) : tty.isatty(process.stderr.fd);
}
function formatArgs(args) {
const { namespace: name, useColors: useColors2 } = this;
if (useColors2) {
const c = this.color;
const colorCode = "\x1B[3" + (c < 8 ? c : "8;5;" + c);
const prefix = ` ${colorCode};1m${name} \x1B[0m`;
args[0] = prefix + args[0].split("\n").join("\n" + prefix);
args.push(colorCode + "m+" + module2.exports.humanize(this.diff) + "\x1B[0m");
} else {
args[0] = getDate() + name + " " + args[0];
}
}
function getDate() {
if (exports2.inspectOpts.hideDate) {
return "";
}
return (/* @__PURE__ */ new Date()).toISOString() + " ";
}
function log(...args) {
return process.stderr.write(util22.formatWithOptions(exports2.inspectOpts, ...args) + "\n");
}
function save(namespaces) {
if (namespaces) {
process.env.DEBUG = namespaces;
} else {
delete process.env.DEBUG;
}
}
function load2() {
return process.env.DEBUG;
}
function init(debug) {
debug.inspectOpts = {};
const keys = Object.keys(exports2.inspectOpts);
for (let i = 0; i < keys.length; i++) {
debug.inspectOpts[keys[i]] = exports2.inspectOpts[keys[i]];
}
}
module2.exports = require_common2()(exports2);
var { formatters } = module2.exports;
formatters.o = function(v) {
this.inspectOpts.colors = this.useColors;
return util22.inspect(v, this.inspectOpts).split("\n").map((str) => str.trim()).join(" ");
};
formatters.O = function(v) {
this.inspectOpts.colors = this.useColors;
return util22.inspect(v, this.inspectOpts);
};
}
});
var require_src2 = __commonJS2({
"node_modules/debug/src/index.js"(exports2, module2) {
if (typeof process === "undefined" || process.type === "renderer" || process.browser === true || process.__nwjs) {
module2.exports = require_browser2();
} else {
module2.exports = require_node2();
}
}
});
var require_ee_first = __commonJS2({
"node_modules/ee-first/index.js"(exports2, module2) {
"use strict";
module2.exports = first2;
function first2(stuff, done) {
if (!Array.isArray(stuff))
throw new TypeError("arg must be an array of [ee, events...] arrays");
var cleanups = [];
for (var i = 0; i < stuff.length; i++) {
var arr = stuff[i];
if (!Array.isArray(arr) || arr.length < 2)
throw new TypeError("each array member must be [ee, events...]");
var ee = arr[0];
for (var j = 1; j < arr.length; j++) {
var event = arr[j];
var fn = listener(event, callback);
ee.on(event, fn);
cleanups.push({
ee,
event,
fn
});
}
}
function callback() {
cleanup();
done.apply(null, arguments);
}
function cleanup() {
var x;
for (var i2 = 0; i2 < cleanups.length; i2++) {
x = cleanups[i2];
x.ee.removeListener(x.event, x.fn);
}
}
function thunk(fn2) {
done = fn2;
}
thunk.cancel = cleanup;
return thunk;
}
function listener(event, done) {
return function onevent(arg1) {
var args = new Array(arguments.length);
var ee = this;
var err2 = event === "error" ? arg1 : null;
for (var i = 0; i < args.length; i++) {
args[i] = arguments[i];
}
done(err2, ee, event, args);
};
}
}
});
var require_on_finished = __commonJS2({
"node_modules/on-finished/index.js"(exports2, module2) {
"use strict";
module2.exports = onFinished;
module2.exports.isFinished = isFinished;
var asyncHooks = tryRequireAsyncHooks();
var first2 = require_ee_first();
var defer = typeof setImmediate === "function" ? setImmediate : function(fn) {
process.nextTick(fn.bind.apply(fn, arguments));
};
function onFinished(msg, listener) {
if (isFinished(msg) !== false) {
defer(listener, null, msg);
return msg;
}
attachListener(msg, wrap2(listener));
return msg;
}
function isFinished(msg) {
var socket = msg.socket;
if (typeof msg.finished === "boolean") {
return Boolean(msg.finished || socket && !socket.writable);
}
if (typeof msg.complete === "boolean") {
return Boolean(msg.upgrade || !socket || !socket.readable || msg.complete && !msg.readable);
}
return void 0;
}
function attachFinishedListener(msg, callback) {
var eeMsg;
var eeSocket;
var finished = false;
function onFinish(error) {
eeMsg.cancel();
eeSocket.cancel();
finished = true;
callback(error);
}
eeMsg = eeSocket = first2([[msg, "end", "finish"]], onFinish);
function onSocket(socket) {
msg.removeListener("socket", onSocket);
if (finished) return;
if (eeMsg !== eeSocket) return;
eeSocket = first2([[socket, "error", "close"]], onFinish);
}
if (msg.socket) {
onSocket(msg.socket);
return;
}
msg.on("socket", onSocket);
if (msg.socket === void 0) {
patchAssignSocket(msg, onSocket);
}
}
function attachListener(msg, listener) {
var attached = msg.__onFinished;
if (!attached || !attached.queue) {
attached = msg.__onFinished = createListener(msg);
attachFinishedListener(msg, attached);
}
attached.queue.push(listener);
}
function createListener(msg) {
function listener(err2) {
if (msg.__onFinished === listener) msg.__onFinished = null;
if (!listener.queue) return;
var queue = listener.queue;
listener.queue = null;
for (var i = 0; i < queue.length; i++) {
queue[i](err2, msg);
}
}
listener.queue = [];
return listener;
}
function patchAssignSocket(res, callback) {
var assignSocket = res.assignSocket;
if (typeof assignSocket !== "function") return;
res.assignSocket = function _assignSocket(socket) {
assignSocket.call(this, socket);
callback(socket);
};
}
function tryRequireAsyncHooks() {
try {
return require("async_hooks");
} catch (e) {
return {};
}
}
function wrap2(fn) {
var res;
if (asyncHooks.AsyncResource) {
res = new asyncHooks.AsyncResource(fn.name || "bound-anonymous-fn");
}
if (!res || !res.runInAsyncScope) {
return fn;
}
return res.runInAsyncScope.bind(res, fn, null);
}
}
});
var require_bom_handling22 = __commonJS2({
"node_modules/body-parser/node_modules/iconv-lite/lib/bom-handling.js"(exports2) {
"use strict";
var BOMChar = "\uFEFF";
exports2.PrependBOM = PrependBOMWrapper;
function PrependBOMWrapper(encoder, options) {
this.encoder = encoder;
this.addBOM = true;
}
PrependBOMWrapper.prototype.write = function(str) {
if (this.addBOM) {
str = BOMChar + str;
this.addBOM = false;
}
return this.encoder.write(str);
};
PrependBOMWrapper.prototype.end = function() {
return this.encoder.end();
};
exports2.StripBOM = StripBOMWrapper;
function StripBOMWrapper(decoder, options) {
this.decoder = decoder;
this.pass = false;
this.options = options || {};
}
StripBOMWrapper.prototype.write = function(buf) {
var res = this.decoder.write(buf);
if (this.pass || !res)
return res;
if (res[0] === BOMChar) {
res = res.slice(1);
if (typeof this.options.stripBOM === "function")
this.options.stripBOM();
}
this.pass = true;
return res;
};
StripBOMWrapper.prototype.end = function() {
return this.decoder.end();
};
}
});
var require_internal22 = __commonJS2({
"node_modules/body-parser/node_modules/iconv-lite/encodings/internal.js"(exports2, module2) {
"use strict";
var Buffer2 = require_safer2().Buffer;
module2.exports = {
// Encodings
utf8: { type: "_internal", bomAware: true },
cesu8: { type: "_internal", bomAware: true },
unicode11utf8: "utf8",
ucs2: { type: "_internal", bomAware: true },
utf16le: "ucs2",
binary: { type: "_internal" },
base64: { type: "_internal" },
hex: { type: "_internal" },
// Codec.
_internal: InternalCodec
};
function InternalCodec(codecOptions, iconv2) {
this.enc = codecOptions.encodingName;
this.bomAware = codecOptions.bomAware;
if (this.enc === "base64")
this.encoder = InternalEncoderBase64;
else if (this.enc === "cesu8") {
this.enc = "utf8";
this.encoder = InternalEncoderCesu8;
if (Buffer2.from("eda0bdedb2a9", "hex").toString() !== "\u{1F4A9}") {
this.decoder = InternalDecoderCesu8;
this.defaultCharUnicode = iconv2.defaultCharUnicode;
}
}
}
InternalCodec.prototype.encoder = InternalEncoder;
InternalCodec.prototype.decoder = InternalDecoder;
var StringDecoder = require("string_decoder").StringDecoder;
if (!StringDecoder.prototype.end)
StringDecoder.prototype.end = function() {
};
function InternalDecoder(options, codec) {
this.decoder = new StringDecoder(codec.enc);
}
InternalDecoder.prototype.write = function(buf) {
if (!Buffer2.isBuffer(buf)) {
buf = Buffer2.from(buf);
}
return this.decoder.write(buf);
};
InternalDecoder.prototype.end = function() {
return this.decoder.end();
};
function InternalEncoder(options, codec) {
this.enc = codec.enc;
}
InternalEncoder.prototype.write = function(str) {
return Buffer2.from(str, this.enc);
};
InternalEncoder.prototype.end = function() {
};
function InternalEncoderBase64(options, codec) {
this.prevStr = "";
}
InternalEncoderBase64.prototype.write = function(str) {
str = this.prevStr + str;
var completeQuads = str.length - str.length % 4;
this.prevStr = str.slice(completeQuads);
str = str.slice(0, completeQuads);
return Buffer2.from(str, "base64");
};
InternalEncoderBase64.prototype.end = function() {
return Buffer2.from(this.prevStr, "base64");
};
function InternalEncoderCesu8(options, codec) {
}
InternalEncoderCesu8.prototype.write = function(str) {
var buf = Buffer2.alloc(str.length * 3), bufIdx = 0;
for (var i = 0; i < str.length; i++) {
var charCode = str.charCodeAt(i);
if (charCode < 128)
buf[bufIdx++] = charCode;
else if (charCode < 2048) {
buf[bufIdx++] = 192 + (charCode >>> 6);
buf[bufIdx++] = 128 + (charCode & 63);
} else {
buf[bufIdx++] = 224 + (charCode >>> 12);
buf[bufIdx++] = 128 + (charCode >>> 6 & 63);
buf[bufIdx++] = 128 + (charCode & 63);
}
}
return buf.slice(0, bufIdx);
};
InternalEncoderCesu8.prototype.end = function() {
};
function InternalDecoderCesu8(options, codec) {
this.acc = 0;
this.contBytes = 0;
this.accBytes = 0;
this.defaultCharUnicode = codec.defaultCharUnicode;
}
InternalDecoderCesu8.prototype.write = function(buf) {
var acc = this.acc, contBytes = this.contBytes, accBytes = this.accBytes, res = "";
for (var i = 0; i < buf.length; i++) {
var curByte = buf[i];
if ((curByte & 192) !== 128) {
if (contBytes > 0) {
res += this.defaultCharUnicode;
contBytes = 0;
}
if (curByte < 128) {
res += String.fromCharCode(curByte);
} else if (curByte < 224) {
acc = curByte & 31;
contBytes = 1;
accBytes = 1;
} else if (curByte < 240) {
acc = curByte & 15;
contBytes = 2;
accBytes = 1;
} else {
res += this.defaultCharUnicode;
}
} else {
if (contBytes > 0) {
acc = acc << 6 | curByte & 63;
contBytes--;
accBytes++;
if (contBytes === 0) {
if (accBytes === 2 && acc < 128 && acc > 0)
res += this.defaultCharUnicode;
else if (accBytes === 3 && acc < 2048)
res += this.defaultCharUnicode;
else
res += String.fromCharCode(acc);
}
} else {
res += this.defaultCharUnicode;
}
}
}
this.acc = acc;
this.contBytes = contBytes;
this.accBytes = accBytes;
return res;
};
InternalDecoderCesu8.prototype.end = function() {
var res = 0;
if (this.contBytes > 0)
res += this.defaultCharUnicode;
return res;
};
}
});
var require_utf3222 = __commonJS2({
"node_modules/body-parser/node_modules/iconv-lite/encodings/utf32.js"(exports2) {
"use strict";
var Buffer2 = require_safer2().Buffer;
exports2._utf32 = Utf32Codec;
function Utf32Codec(codecOptions, iconv2) {
this.iconv = iconv2;
this.bomAware = true;
this.isLE = codecOptions.isLE;
}
exports2.utf32le = { type: "_utf32", isLE: true };
exports2.utf32be = { type: "_utf32", isLE: false };
exports2.ucs4le = "utf32le";
exports2.ucs4be = "utf32be";
Utf32Codec.prototype.encoder = Utf32Encoder;
Utf32Codec.prototype.decoder = Utf32Decoder;
function Utf32Encoder(options, codec) {
this.isLE = codec.isLE;
this.highSurrogate = 0;
}
Utf32Encoder.prototype.write = function(str) {
var src = Buffer2.from(str, "ucs2");
var dst = Buffer2.alloc(src.length * 2);
var write32 = this.isLE ? dst.writeUInt32LE : dst.writeUInt32BE;
var offset = 0;
for (var i = 0; i < src.length; i += 2) {
var code = src.readUInt16LE(i);
var isHighSurrogate = 55296 <= code && code < 56320;
var isLowSurrogate = 56320 <= code && code < 57344;
if (this.highSurrogate) {
if (isHighSurrogate || !isLowSurrogate) {
write32.call(dst, this.highSurrogate, offset);
offset += 4;
} else {
var codepoint = (this.highSurrogate - 55296 << 10 | code - 56320) + 65536;
write32.call(dst, codepoint, offset);
offset += 4;
this.highSurrogate = 0;
continue;
}
}
if (isHighSurrogate)
this.highSurrogate = code;
else {
write32.call(dst, code, offset);
offset += 4;
this.highSurrogate = 0;
}
}
if (offset < dst.length)
dst = dst.slice(0, offset);
return dst;
};
Utf32Encoder.prototype.end = function() {
if (!this.highSurrogate)
return;
var buf = Buffer2.alloc(4);
if (this.isLE)
buf.writeUInt32LE(this.highSurrogate, 0);
else
buf.writeUInt32BE(this.highSurrogate, 0);
this.highSurrogate = 0;
return buf;
};
function Utf32Decoder(options, codec) {
this.isLE = codec.isLE;
this.badChar = codec.iconv.defaultCharUnicode.charCodeAt(0);
this.overflow = [];
}
Utf32Decoder.prototype.write = function(src) {
if (src.length === 0)
return "";
var i = 0;
var codepoint = 0;
var dst = Buffer2.alloc(src.length + 4);
var offset = 0;
var isLE = this.isLE;
var overflow = this.overflow;
var badChar = this.badChar;
if (overflow.length > 0) {
for (; i < src.length && overflow.length < 4; i++)
overflow.push(src[i]);
if (overflow.length === 4) {
if (isLE) {
codepoint = overflow[i] | overflow[i + 1] << 8 | overflow[i + 2] << 16 | overflow[i + 3] << 24;
} else {
codepoint = overflow[i + 3] | overflow[i + 2] << 8 | overflow[i + 1] << 16 | overflow[i] << 24;
}
overflow.length = 0;
offset = _writeCodepoint(dst, offset, codepoint, badChar);
}
}
for (; i < src.length - 3; i += 4) {
if (isLE) {
codepoint = src[i] | src[i + 1] << 8 | src[i + 2] << 16 | src[i + 3] << 24;
} else {
codepoint = src[i + 3] | src[i + 2] << 8 | src[i + 1] << 16 | src[i] << 24;
}
offset = _writeCodepoint(dst, offset, codepoint, badChar);
}
for (; i < src.length; i++) {
overflow.push(src[i]);
}
return dst.slice(0, offset).toString("ucs2");
};
function _writeCodepoint(dst, offset, codepoint, badChar) {
if (codepoint < 0 || codepoint > 1114111) {
codepoint = badChar;
}
if (codepoint >= 65536) {
codepoint -= 65536;
var high = 55296 | codepoint >> 10;
dst[offset++] = high & 255;
dst[offset++] = high >> 8;
var codepoint = 56320 | codepoint & 1023;
}
dst[offset++] = codepoint & 255;
dst[offset++] = codepoint >> 8;
return offset;
}
Utf32Decoder.prototype.end = function() {
this.overflow.length = 0;
};
exports2.utf32 = Utf32AutoCodec;
exports2.ucs4 = "utf32";
function Utf32AutoCodec(options, iconv2) {
this.iconv = iconv2;
}
Utf32AutoCodec.prototype.encoder = Utf32AutoEncoder;
Utf32AutoCodec.prototype.decoder = Utf32AutoDecoder;
function Utf32AutoEncoder(options, codec) {
options = options || {};
if (options.addBOM === void 0)
options.addBOM = true;
this.encoder = codec.iconv.getEncoder(options.defaultEncoding || "utf-32le", options);
}
Utf32AutoEncoder.prototype.write = function(str) {
return this.encoder.write(str);
};
Utf32AutoEncoder.prototype.end = function() {
return this.encoder.end();
};
function Utf32AutoDecoder(options, codec) {
this.decoder = null;
this.initialBufs = [];
this.initialBufsLen = 0;
this.options = options || {};
this.iconv = codec.iconv;
}
Utf32AutoDecoder.prototype.write = function(buf) {
if (!this.decoder) {
this.initialBufs.push(buf);
this.initialBufsLen += buf.length;
if (this.initialBufsLen < 32)
return "";
var encoding = detectEncoding(this.initialBufs, this.options.defaultEncoding);
this.decoder = this.iconv.getDecoder(encoding, this.options);
var resStr = "";
for (var i = 0; i < this.initialBufs.length; i++)
resStr += this.decoder.write(this.initialBufs[i]);
this.initialBufs.length = this.initialBufsLen = 0;
return resStr;
}
return this.decoder.write(buf);
};
Utf32AutoDecoder.prototype.end = function() {
if (!this.decoder) {
var encoding = detectEncoding(this.initialBufs, this.options.defaultEncoding);
this.decoder = this.iconv.getDecoder(encoding, this.options);
var resStr = "";
for (var i = 0; i < this.initialBufs.length; i++)
resStr += this.decoder.write(this.initialBufs[i]);
var trail = this.decoder.end();
if (trail)
resStr += trail;
this.initialBufs.length = this.initialBufsLen = 0;
return resStr;
}
return this.decoder.end();
};
function detectEncoding(bufs, defaultEncoding) {
var b = [];
var charsProcessed = 0;
var invalidLE = 0, invalidBE = 0;
var bmpCharsLE = 0, bmpCharsBE = 0;
outer_loop:
for (var i = 0; i < bufs.length; i++) {
var buf = bufs[i];
for (var j = 0; j < buf.length; j++) {
b.push(buf[j]);
if (b.length === 4) {
if (charsProcessed === 0) {
if (b[0] === 255 && b[1] === 254 && b[2] === 0 && b[3] === 0) {
return "utf-32le";
}
if (b[0] === 0 && b[1] === 0 && b[2] === 254 && b[3] === 255) {
return "utf-32be";
}
}
if (b[0] !== 0 || b[1] > 16) invalidBE++;
if (b[3] !== 0 || b[2] > 16) invalidLE++;
if (b[0] === 0 && b[1] === 0 && (b[2] !== 0 || b[3] !== 0)) bmpCharsBE++;
if ((b[0] !== 0 || b[1] !== 0) && b[2] === 0 && b[3] === 0) bmpCharsLE++;
b.length = 0;
charsProcessed++;
if (charsProcessed >= 100) {
break outer_loop;
}
}
}
}
if (bmpCharsBE - invalidBE > bmpCharsLE - invalidLE) return "utf-32be";
if (bmpCharsBE - invalidBE < bmpCharsLE - invalidLE) return "utf-32le";
return defaultEncoding || "utf-32le";
}
}
});
var require_utf1622 = __commonJS2({
"node_modules/body-parser/node_modules/iconv-lite/encodings/utf16.js"(exports2) {
"use strict";
var Buffer2 = require_safer2().Buffer;
exports2.utf16be = Utf16BECodec;
function Utf16BECodec() {
}
Utf16BECodec.prototype.encoder = Utf16BEEncoder;
Utf16BECodec.prototype.decoder = Utf16BEDecoder;
Utf16BECodec.prototype.bomAware = true;
function Utf16BEEncoder() {
}
Utf16BEEncoder.prototype.write = function(str) {
var buf = Buffer2.from(str, "ucs2");
for (var i = 0; i < buf.length; i += 2) {
var tmp = buf[i];
buf[i] = buf[i + 1];
buf[i + 1] = tmp;
}
return buf;
};
Utf16BEEncoder.prototype.end = function() {
};
function Utf16BEDecoder() {
this.overflowByte = -1;
}
Utf16BEDecoder.prototype.write = function(buf) {
if (buf.length == 0)
return "";
var buf2 = Buffer2.alloc(buf.length + 1), i = 0, j = 0;
if (this.overflowByte !== -1) {
buf2[0] = buf[0];
buf2[1] = this.overflowByte;
i = 1;
j = 2;
}
for (; i < buf.length - 1; i += 2, j += 2) {
buf2[j] = buf[i + 1];
buf2[j + 1] = buf[i];
}
this.overflowByte = i == buf.length - 1 ? buf[buf.length - 1] : -1;
return buf2.slice(0, j).toString("ucs2");
};
Utf16BEDecoder.prototype.end = function() {
this.overflowByte = -1;
};
exports2.utf16 = Utf16Codec;
function Utf16Codec(codecOptions, iconv2) {
this.iconv = iconv2;
}
Utf16Codec.prototype.encoder = Utf16Encoder;
Utf16Codec.prototype.decoder = Utf16Decoder;
function Utf16Encoder(options, codec) {
options = options || {};
if (options.addBOM === void 0)
options.addBOM = true;
this.encoder = codec.iconv.getEncoder("utf-16le", options);
}
Utf16Encoder.prototype.write = function(str) {
return this.encoder.write(str);
};
Utf16Encoder.prototype.end = function() {
return this.encoder.end();
};
function Utf16Decoder(options, codec) {
this.decoder = null;
this.initialBufs = [];
this.initialBufsLen = 0;
this.options = options || {};
this.iconv = codec.iconv;
}
Utf16Decoder.prototype.write = function(buf) {
if (!this.decoder) {
this.initialBufs.push(buf);
this.initialBufsLen += buf.length;
if (this.initialBufsLen < 16)
return "";
var encoding = detectEncoding(this.initialBufs, this.options.defaultEncoding);
this.decoder = this.iconv.getDecoder(encoding, this.options);
var resStr = "";
for (var i = 0; i < this.initialBufs.length; i++)
resStr += this.decoder.write(this.initialBufs[i]);
this.initialBufs.length = this.initialBufsLen = 0;
return resStr;
}
return this.decoder.write(buf);
};
Utf16Decoder.prototype.end = function() {
if (!this.decoder) {
var encoding = detectEncoding(this.initialBufs, this.options.defaultEncoding);
this.decoder = this.iconv.getDecoder(encoding, this.options);
var resStr = "";
for (var i = 0; i < this.initialBufs.length; i++)
resStr += this.decoder.write(this.initialBufs[i]);
var trail = this.decoder.end();
if (trail)
resStr += trail;
this.initialBufs.length = this.initialBufsLen = 0;
return resStr;
}
return this.decoder.end();
};
function detectEncoding(bufs, defaultEncoding) {
var b = [];
var charsProcessed = 0;
var asciiCharsLE = 0, asciiCharsBE = 0;
outer_loop:
for (var i = 0; i < bufs.length; i++) {
var buf = bufs[i];
for (var j = 0; j < buf.length; j++) {
b.push(buf[j]);
if (b.length === 2) {
if (charsProcessed === 0) {
if (b[0] === 255 && b[1] === 254) return "utf-16le";
if (b[0] === 254 && b[1] === 255) return "utf-16be";
}
if (b[0] === 0 && b[1] !== 0) asciiCharsBE++;
if (b[0] !== 0 && b[1] === 0) asciiCharsLE++;
b.length = 0;
charsProcessed++;
if (charsProcessed >= 100) {
break outer_loop;
}
}
}
}
if (asciiCharsBE > asciiCharsLE) return "utf-16be";
if (asciiCharsBE < asciiCharsLE) return "utf-16le";
return defaultEncoding || "utf-16le";
}
}
});
var require_utf722 = __commonJS2({
"node_modules/body-parser/node_modules/iconv-lite/encodings/utf7.js"(exports2) {
"use strict";
var Buffer2 = require_safer2().Buffer;
exports2.utf7 = Utf7Codec;
exports2.unicode11utf7 = "utf7";
function Utf7Codec(codecOptions, iconv2) {
this.iconv = iconv2;
}
Utf7Codec.prototype.encoder = Utf7Encoder;
Utf7Codec.prototype.decoder = Utf7Decoder;
Utf7Codec.prototype.bomAware = true;
var nonDirectChars = /[^A-Za-z0-9'\(\),-\.\/:\? \n\r\t]+/g;
function Utf7Encoder(options, codec) {
this.iconv = codec.iconv;
}
Utf7Encoder.prototype.write = function(str) {
return Buffer2.from(str.replace(nonDirectChars, function(chunk) {
return "+" + (chunk === "+" ? "" : this.iconv.encode(chunk, "utf16-be").toString("base64").replace(/=+$/, "")) + "-";
}.bind(this)));
};
Utf7Encoder.prototype.end = function() {
};
function Utf7Decoder(options, codec) {
this.iconv = codec.iconv;
this.inBase64 = false;
this.base64Accum = "";
}
var base64Regex22 = /[A-Za-z0-9\/+]/;
var base64Chars = [];
for (i = 0; i < 256; i++)
base64Chars[i] = base64Regex22.test(String.fromCharCode(i));
var i;
var plusChar = "+".charCodeAt(0);
var minusChar = "-".charCodeAt(0);
var andChar = "&".charCodeAt(0);
Utf7Decoder.prototype.write = function(buf) {
var res = "", lastI = 0, inBase64 = this.inBase64, base64Accum = this.base64Accum;
for (var i2 = 0; i2 < buf.length; i2++) {
if (!inBase64) {
if (buf[i2] == plusChar) {
res += this.iconv.decode(buf.slice(lastI, i2), "ascii");
lastI = i2 + 1;
inBase64 = true;
}
} else {
if (!base64Chars[buf[i2]]) {
if (i2 == lastI && buf[i2] == minusChar) {
res += "+";
} else {
var b64str = base64Accum + this.iconv.decode(buf.slice(lastI, i2), "ascii");
res += this.iconv.decode(Buffer2.from(b64str, "base64"), "utf16-be");
}
if (buf[i2] != minusChar)
i2--;
lastI = i2 + 1;
inBase64 = false;
base64Accum = "";
}
}
}
if (!inBase64) {
res += this.iconv.decode(buf.slice(lastI), "ascii");
} else {
var b64str = base64Accum + this.iconv.decode(buf.slice(lastI), "ascii");
var canBeDecoded = b64str.length - b64str.length % 8;
base64Accum = b64str.slice(canBeDecoded);
b64str = b64str.slice(0, canBeDecoded);
res += this.iconv.decode(Buffer2.from(b64str, "base64"), "utf16-be");
}
this.inBase64 = inBase64;
this.base64Accum = base64Accum;
return res;
};
Utf7Decoder.prototype.end = function() {
var res = "";
if (this.inBase64 && this.base64Accum.length > 0)
res = this.iconv.decode(Buffer2.from(this.base64Accum, "base64"), "utf16-be");
this.inBase64 = false;
this.base64Accum = "";
return res;
};
exports2.utf7imap = Utf7IMAPCodec;
function Utf7IMAPCodec(codecOptions, iconv2) {
this.iconv = iconv2;
}
Utf7IMAPCodec.prototype.encoder = Utf7IMAPEncoder;
Utf7IMAPCodec.prototype.decoder = Utf7IMAPDecoder;
Utf7IMAPCodec.prototype.bomAware = true;
function Utf7IMAPEncoder(options, codec) {
this.iconv = codec.iconv;
this.inBase64 = false;
this.base64Accum = Buffer2.alloc(6);
this.base64AccumIdx = 0;
}
Utf7IMAPEncoder.prototype.write = function(str) {
var inBase64 = this.inBase64, base64Accum = this.base64Accum, base64AccumIdx = this.base64AccumIdx, buf = Buffer2.alloc(str.length * 5 + 10), bufIdx = 0;
for (var i2 = 0; i2 < str.length; i2++) {
var uChar = str.charCodeAt(i2);
if (32 <= uChar && uChar <= 126) {
if (inBase64) {
if (base64AccumIdx > 0) {
bufIdx += buf.write(base64Accum.slice(0, base64AccumIdx).toString("base64").replace(/\//g, ",").replace(/=+$/, ""), bufIdx);
base64AccumIdx = 0;
}
buf[bufIdx++] = minusChar;
inBase64 = false;
}
if (!inBase64) {
buf[bufIdx++] = uChar;
if (uChar === andChar)
buf[bufIdx++] = minusChar;
}
} else {
if (!inBase64) {
buf[bufIdx++] = andChar;
inBase64 = true;
}
if (inBase64) {
base64Accum[base64AccumIdx++] = uChar >> 8;
base64Accum[base64AccumIdx++] = uChar & 255;
if (base64AccumIdx == base64Accum.length) {
bufIdx += buf.write(base64Accum.toString("base64").replace(/\//g, ","), bufIdx);
base64AccumIdx = 0;
}
}
}
}
this.inBase64 = inBase64;
this.base64AccumIdx = base64AccumIdx;
return buf.slice(0, bufIdx);
};
Utf7IMAPEncoder.prototype.end = function() {
var buf = Buffer2.alloc(10), bufIdx = 0;
if (this.inBase64) {
if (this.base64AccumIdx > 0) {
bufIdx += buf.write(this.base64Accum.slice(0, this.base64AccumIdx).toString("base64").replace(/\//g, ",").replace(/=+$/, ""), bufIdx);
this.base64AccumIdx = 0;
}
buf[bufIdx++] = minusChar;
this.inBase64 = false;
}
return buf.slice(0, bufIdx);
};
function Utf7IMAPDecoder(options, codec) {
this.iconv = codec.iconv;
this.inBase64 = false;
this.base64Accum = "";
}
var base64IMAPChars = base64Chars.slice();
base64IMAPChars[",".charCodeAt(0)] = true;
Utf7IMAPDecoder.prototype.write = function(buf) {
var res = "", lastI = 0, inBase64 = this.inBase64, base64Accum = this.base64Accum;
for (var i2 = 0; i2 < buf.length; i2++) {
if (!inBase64) {
if (buf[i2] == andChar) {
res += this.iconv.decode(buf.slice(lastI, i2), "ascii");
lastI = i2 + 1;
inBase64 = true;
}
} else {
if (!base64IMAPChars[buf[i2]]) {
if (i2 == lastI && buf[i2] == minusChar) {
res += "&";
} else {
var b64str = base64Accum + this.iconv.decode(buf.slice(lastI, i2), "ascii").replace(/,/g, "/");
res += this.iconv.decode(Buffer2.from(b64str, "base64"), "utf16-be");
}
if (buf[i2] != minusChar)
i2--;
lastI = i2 + 1;
inBase64 = false;
base64Accum = "";
}
}
}
if (!inBase64) {
res += this.iconv.decode(buf.slice(lastI), "ascii");
} else {
var b64str = base64Accum + this.iconv.decode(buf.slice(lastI), "ascii").replace(/,/g, "/");
var canBeDecoded = b64str.length - b64str.length % 8;
base64Accum = b64str.slice(canBeDecoded);
b64str = b64str.slice(0, canBeDecoded);
res += this.iconv.decode(Buffer2.from(b64str, "base64"), "utf16-be");
}
this.inBase64 = inBase64;
this.base64Accum = base64Accum;
return res;
};
Utf7IMAPDecoder.prototype.end = function() {
var res = "";
if (this.inBase64 && this.base64Accum.length > 0)
res = this.iconv.decode(Buffer2.from(this.base64Accum, "base64"), "utf16-be");
this.inBase64 = false;
this.base64Accum = "";
return res;
};
}
});
var require_sbcs_codec22 = __commonJS2({
"node_modules/body-parser/node_modules/iconv-lite/encodings/sbcs-codec.js"(exports2) {
"use strict";
var Buffer2 = require_safer2().Buffer;
exports2._sbcs = SBCSCodec;
function SBCSCodec(codecOptions, iconv2) {
if (!codecOptions)
throw new Error("SBCS codec is called without the data.");
if (!codecOptions.chars || codecOptions.chars.length !== 128 && codecOptions.chars.length !== 256)
throw new Error("Encoding '" + codecOptions.type + "' has incorrect 'chars' (must be of len 128 or 256)");
if (codecOptions.chars.length === 128) {
var asciiString = "";
for (var i = 0; i < 128; i++)
asciiString += String.fromCharCode(i);
codecOptions.chars = asciiString + codecOptions.chars;
}
this.decodeBuf = Buffer2.from(codecOptions.chars, "ucs2");
var encodeBuf = Buffer2.alloc(65536, iconv2.defaultCharSingleByte.charCodeAt(0));
for (var i = 0; i < codecOptions.chars.length; i++)
encodeBuf[codecOptions.chars.charCodeAt(i)] = i;
this.encodeBuf = encodeBuf;
}
SBCSCodec.prototype.encoder = SBCSEncoder;
SBCSCodec.prototype.decoder = SBCSDecoder;
function SBCSEncoder(options, codec) {
this.encodeBuf = codec.encodeBuf;
}
SBCSEncoder.prototype.write = function(str) {
var buf = Buffer2.alloc(str.length);
for (var i = 0; i < str.length; i++)
buf[i] = this.encodeBuf[str.charCodeAt(i)];
return buf;
};
SBCSEncoder.prototype.end = function() {
};
function SBCSDecoder(options, codec) {
this.decodeBuf = codec.decodeBuf;
}
SBCSDecoder.prototype.write = function(buf) {
var decodeBuf = this.decodeBuf;
var newBuf = Buffer2.alloc(buf.length * 2);
var idx1 = 0, idx2 = 0;
for (var i = 0; i < buf.length; i++) {
idx1 = buf[i] * 2;
idx2 = i * 2;
newBuf[idx2] = decodeBuf[idx1];
newBuf[idx2 + 1] = decodeBuf[idx1 + 1];
}
return newBuf.toString("ucs2");
};
SBCSDecoder.prototype.end = function() {
};
}
});
var require_sbcs_data22 = __commonJS2({
"node_modules/body-parser/node_modules/iconv-lite/encodings/sbcs-data.js"(exports2, module2) {
"use strict";
module2.exports = {
// Not supported by iconv, not sure why.
"10029": "maccenteuro",
"maccenteuro": {
"type": "_sbcs",
"chars": "\xC4\u0100\u0101\xC9\u0104\xD6\xDC\xE1\u0105\u010C\xE4\u010D\u0106\u0107\xE9\u0179\u017A\u010E\xED\u010F\u0112\u0113\u0116\xF3\u0117\xF4\xF6\xF5\xFA\u011A\u011B\xFC\u2020\xB0\u0118\xA3\xA7\u2022\xB6\xDF\xAE\xA9\u2122\u0119\xA8\u2260\u0123\u012E\u012F\u012A\u2264\u2265\u012B\u0136\u2202\u2211\u0142\u013B\u013C\u013D\u013E\u0139\u013A\u0145\u0146\u0143\xAC\u221A\u0144\u0147\u2206\xAB\xBB\u2026\xA0\u0148\u0150\xD5\u0151\u014C\u2013\u2014\u201C\u201D\u2018\u2019\xF7\u25CA\u014D\u0154\u0155\u0158\u2039\u203A\u0159\u0156\u0157\u0160\u201A\u201E\u0161\u015A\u015B\xC1\u0164\u0165\xCD\u017D\u017E\u016A\xD3\xD4\u016B\u016E\xDA\u016F\u0170\u0171\u0172\u0173\xDD\xFD\u0137\u017B\u0141\u017C\u0122\u02C7"
},
"808": "cp808",
"ibm808": "cp808",
"cp808": {
"type": "_sbcs",
"chars": "\u0410\u0411\u0412\u0413\u0414\u0415\u0416\u0417\u0418\u0419\u041A\u041B\u041C\u041D\u041E\u041F\u0420\u0421\u0422\u0423\u0424\u0425\u0426\u0427\u0428\u0429\u042A\u042B\u042C\u042D\u042E\u042F\u0430\u0431\u0432\u0433\u0434\u0435\u0436\u0437\u0438\u0439\u043A\u043B\u043C\u043D\u043E\u043F\u2591\u2592\u2593\u2502\u2524\u2561\u2562\u2556\u2555\u2563\u2551\u2557\u255D\u255C\u255B\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u255E\u255F\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u2567\u2568\u2564\u2565\u2559\u2558\u2552\u2553\u256B\u256A\u2518\u250C\u2588\u2584\u258C\u2590\u2580\u0440\u0441\u0442\u0443\u0444\u0445\u0446\u0447\u0448\u0449\u044A\u044B\u044C\u044D\u044E\u044F\u0401\u0451\u0404\u0454\u0407\u0457\u040E\u045E\xB0\u2219\xB7\u221A\u2116\u20AC\u25A0\xA0"
},
"mik": {
"type": "_sbcs",
"chars": "\u0410\u0411\u0412\u0413\u0414\u0415\u0416\u0417\u0418\u0419\u041A\u041B\u041C\u041D\u041E\u041F\u0420\u0421\u0422\u0423\u0424\u0425\u0426\u0427\u0428\u0429\u042A\u042B\u042C\u042D\u042E\u042F\u0430\u0431\u0432\u0433\u0434\u0435\u0436\u0437\u0438\u0439\u043A\u043B\u043C\u043D\u043E\u043F\u0440\u0441\u0442\u0443\u0444\u0445\u0446\u0447\u0448\u0449\u044A\u044B\u044C\u044D\u044E\u044F\u2514\u2534\u252C\u251C\u2500\u253C\u2563\u2551\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u2510\u2591\u2592\u2593\u2502\u2524\u2116\xA7\u2557\u255D\u2518\u250C\u2588\u2584\u258C\u2590\u2580\u03B1\xDF\u0393\u03C0\u03A3\u03C3\xB5\u03C4\u03A6\u0398\u03A9\u03B4\u221E\u03C6\u03B5\u2229\u2261\xB1\u2265\u2264\u2320\u2321\xF7\u2248\xB0\u2219\xB7\u221A\u207F\xB2\u25A0\xA0"
},
"cp720": {
"type": "_sbcs",
"chars": "\x80\x81\xE9\xE2\x84\xE0\x86\xE7\xEA\xEB\xE8\xEF\xEE\x8D\x8E\x8F\x90\u0651\u0652\xF4\xA4\u0640\xFB\xF9\u0621\u0622\u0623\u0624\xA3\u0625\u0626\u0627\u0628\u0629\u062A\u062B\u062C\u062D\u062E\u062F\u0630\u0631\u0632\u0633\u0634\u0635\xAB\xBB\u2591\u2592\u2593\u2502\u2524\u2561\u2562\u2556\u2555\u2563\u2551\u2557\u255D\u255C\u255B\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u255E\u255F\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u2567\u2568\u2564\u2565\u2559\u2558\u2552\u2553\u256B\u256A\u2518\u250C\u2588\u2584\u258C\u2590\u2580\u0636\u0637\u0638\u0639\u063A\u0641\xB5\u0642\u0643\u0644\u0645\u0646\u0647\u0648\u0649\u064A\u2261\u064B\u064C\u064D\u064E\u064F\u0650\u2248\xB0\u2219\xB7\u221A\u207F\xB2\u25A0\xA0"
},
// Aliases of generated encodings.
"ascii8bit": "ascii",
"usascii": "ascii",
"ansix34": "ascii",
"ansix341968": "ascii",
"ansix341986": "ascii",
"csascii": "ascii",
"cp367": "ascii",
"ibm367": "ascii",
"isoir6": "ascii",
"iso646us": "ascii",
"iso646irv": "ascii",
"us": "ascii",
"latin1": "iso88591",
"latin2": "iso88592",
"latin3": "iso88593",
"latin4": "iso88594",
"latin5": "iso88599",
"latin6": "iso885910",
"latin7": "iso885913",
"latin8": "iso885914",
"latin9": "iso885915",
"latin10": "iso885916",
"csisolatin1": "iso88591",
"csisolatin2": "iso88592",
"csisolatin3": "iso88593",
"csisolatin4": "iso88594",
"csisolatincyrillic": "iso88595",
"csisolatinarabic": "iso88596",
"csisolatingreek": "iso88597",
"csisolatinhebrew": "iso88598",
"csisolatin5": "iso88599",
"csisolatin6": "iso885910",
"l1": "iso88591",
"l2": "iso88592",
"l3": "iso88593",
"l4": "iso88594",
"l5": "iso88599",
"l6": "iso885910",
"l7": "iso885913",
"l8": "iso885914",
"l9": "iso885915",
"l10": "iso885916",
"isoir14": "iso646jp",
"isoir57": "iso646cn",
"isoir100": "iso88591",
"isoir101": "iso88592",
"isoir109": "iso88593",
"isoir110": "iso88594",
"isoir144": "iso88595",
"isoir127": "iso88596",
"isoir126": "iso88597",
"isoir138": "iso88598",
"isoir148": "iso88599",
"isoir157": "iso885910",
"isoir166": "tis620",
"isoir179": "iso885913",
"isoir199": "iso885914",
"isoir203": "iso885915",
"isoir226": "iso885916",
"cp819": "iso88591",
"ibm819": "iso88591",
"cyrillic": "iso88595",
"arabic": "iso88596",
"arabic8": "iso88596",
"ecma114": "iso88596",
"asmo708": "iso88596",
"greek": "iso88597",
"greek8": "iso88597",
"ecma118": "iso88597",
"elot928": "iso88597",
"hebrew": "iso88598",
"hebrew8": "iso88598",
"turkish": "iso88599",
"turkish8": "iso88599",
"thai": "iso885911",
"thai8": "iso885911",
"celtic": "iso885914",
"celtic8": "iso885914",
"isoceltic": "iso885914",
"tis6200": "tis620",
"tis62025291": "tis620",
"tis62025330": "tis620",
"10000": "macroman",
"10006": "macgreek",
"10007": "maccyrillic",
"10079": "maciceland",
"10081": "macturkish",
"cspc8codepage437": "cp437",
"cspc775baltic": "cp775",
"cspc850multilingual": "cp850",
"cspcp852": "cp852",
"cspc862latinhebrew": "cp862",
"cpgr": "cp869",
"msee": "cp1250",
"mscyrl": "cp1251",
"msansi": "cp1252",
"msgreek": "cp1253",
"msturk": "cp1254",
"mshebr": "cp1255",
"msarab": "cp1256",
"winbaltrim": "cp1257",
"cp20866": "koi8r",
"20866": "koi8r",
"ibm878": "koi8r",
"cskoi8r": "koi8r",
"cp21866": "koi8u",
"21866": "koi8u",
"ibm1168": "koi8u",
"strk10482002": "rk1048",
"tcvn5712": "tcvn",
"tcvn57121": "tcvn",
"gb198880": "iso646cn",
"cn": "iso646cn",
"csiso14jisc6220ro": "iso646jp",
"jisc62201969ro": "iso646jp",
"jp": "iso646jp",
"cshproman8": "hproman8",
"r8": "hproman8",
"roman8": "hproman8",
"xroman8": "hproman8",
"ibm1051": "hproman8",
"mac": "macintosh",
"csmacintosh": "macintosh"
};
}
});
var require_sbcs_data_generated22 = __commonJS2({
"node_modules/body-parser/node_modules/iconv-lite/encodings/sbcs-data-generated.js"(exports2, module2) {
"use strict";
module2.exports = {
"437": "cp437",
"737": "cp737",
"775": "cp775",
"850": "cp850",
"852": "cp852",
"855": "cp855",
"856": "cp856",
"857": "cp857",
"858": "cp858",
"860": "cp860",
"861": "cp861",
"862": "cp862",
"863": "cp863",
"864": "cp864",
"865": "cp865",
"866": "cp866",
"869": "cp869",
"874": "windows874",
"922": "cp922",
"1046": "cp1046",
"1124": "cp1124",
"1125": "cp1125",
"1129": "cp1129",
"1133": "cp1133",
"1161": "cp1161",
"1162": "cp1162",
"1163": "cp1163",
"1250": "windows1250",
"1251": "windows1251",
"1252": "windows1252",
"1253": "windows1253",
"1254": "windows1254",
"1255": "windows1255",
"1256": "windows1256",
"1257": "windows1257",
"1258": "windows1258",
"28591": "iso88591",
"28592": "iso88592",
"28593": "iso88593",
"28594": "iso88594",
"28595": "iso88595",
"28596": "iso88596",
"28597": "iso88597",
"28598": "iso88598",
"28599": "iso88599",
"28600": "iso885910",
"28601": "iso885911",
"28603": "iso885913",
"28604": "iso885914",
"28605": "iso885915",
"28606": "iso885916",
"windows874": {
"type": "_sbcs",
"chars": "\u20AC\uFFFD\uFFFD\uFFFD\uFFFD\u2026\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u2018\u2019\u201C\u201D\u2022\u2013\u2014\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\xA0\u0E01\u0E02\u0E03\u0E04\u0E05\u0E06\u0E07\u0E08\u0E09\u0E0A\u0E0B\u0E0C\u0E0D\u0E0E\u0E0F\u0E10\u0E11\u0E12\u0E13\u0E14\u0E15\u0E16\u0E17\u0E18\u0E19\u0E1A\u0E1B\u0E1C\u0E1D\u0E1E\u0E1F\u0E20\u0E21\u0E22\u0E23\u0E24\u0E25\u0E26\u0E27\u0E28\u0E29\u0E2A\u0E2B\u0E2C\u0E2D\u0E2E\u0E2F\u0E30\u0E31\u0E32\u0E33\u0E34\u0E35\u0E36\u0E37\u0E38\u0E39\u0E3A\uFFFD\uFFFD\uFFFD\uFFFD\u0E3F\u0E40\u0E41\u0E42\u0E43\u0E44\u0E45\u0E46\u0E47\u0E48\u0E49\u0E4A\u0E4B\u0E4C\u0E4D\u0E4E\u0E4F\u0E50\u0E51\u0E52\u0E53\u0E54\u0E55\u0E56\u0E57\u0E58\u0E59\u0E5A\u0E5B\uFFFD\uFFFD\uFFFD\uFFFD"
},
"win874": "windows874",
"cp874": "windows874",
"windows1250": {
"type": "_sbcs",
"chars": "\u20AC\uFFFD\u201A\uFFFD\u201E\u2026\u2020\u2021\uFFFD\u2030\u0160\u2039\u015A\u0164\u017D\u0179\uFFFD\u2018\u2019\u201C\u201D\u2022\u2013\u2014\uFFFD\u2122\u0161\u203A\u015B\u0165\u017E\u017A\xA0\u02C7\u02D8\u0141\xA4\u0104\xA6\xA7\xA8\xA9\u015E\xAB\xAC\xAD\xAE\u017B\xB0\xB1\u02DB\u0142\xB4\xB5\xB6\xB7\xB8\u0105\u015F\xBB\u013D\u02DD\u013E\u017C\u0154\xC1\xC2\u0102\xC4\u0139\u0106\xC7\u010C\xC9\u0118\xCB\u011A\xCD\xCE\u010E\u0110\u0143\u0147\xD3\xD4\u0150\xD6\xD7\u0158\u016E\xDA\u0170\xDC\xDD\u0162\xDF\u0155\xE1\xE2\u0103\xE4\u013A\u0107\xE7\u010D\xE9\u0119\xEB\u011B\xED\xEE\u010F\u0111\u0144\u0148\xF3\xF4\u0151\xF6\xF7\u0159\u016F\xFA\u0171\xFC\xFD\u0163\u02D9"
},
"win1250": "windows1250",
"cp1250": "windows1250",
"windows1251": {
"type": "_sbcs",
"chars": "\u0402\u0403\u201A\u0453\u201E\u2026\u2020\u2021\u20AC\u2030\u0409\u2039\u040A\u040C\u040B\u040F\u0452\u2018\u2019\u201C\u201D\u2022\u2013\u2014\uFFFD\u2122\u0459\u203A\u045A\u045C\u045B\u045F\xA0\u040E\u045E\u0408\xA4\u0490\xA6\xA7\u0401\xA9\u0404\xAB\xAC\xAD\xAE\u0407\xB0\xB1\u0406\u0456\u0491\xB5\xB6\xB7\u0451\u2116\u0454\xBB\u0458\u0405\u0455\u0457\u0410\u0411\u0412\u0413\u0414\u0415\u0416\u0417\u0418\u0419\u041A\u041B\u041C\u041D\u041E\u041F\u0420\u0421\u0422\u0423\u0424\u0425\u0426\u0427\u0428\u0429\u042A\u042B\u042C\u042D\u042E\u042F\u0430\u0431\u0432\u0433\u0434\u0435\u0436\u0437\u0438\u0439\u043A\u043B\u043C\u043D\u043E\u043F\u0440\u0441\u0442\u0443\u0444\u0445\u0446\u0447\u0448\u0449\u044A\u044B\u044C\u044D\u044E\u044F"
},
"win1251": "windows1251",
"cp1251": "windows1251",
"windows1252": {
"type": "_sbcs",
"chars": "\u20AC\uFFFD\u201A\u0192\u201E\u2026\u2020\u2021\u02C6\u2030\u0160\u2039\u0152\uFFFD\u017D\uFFFD\uFFFD\u2018\u2019\u201C\u201D\u2022\u2013\u2014\u02DC\u2122\u0161\u203A\u0153\uFFFD\u017E\u0178\xA0\xA1\xA2\xA3\xA4\xA5\xA6\xA7\xA8\xA9\xAA\xAB\xAC\xAD\xAE\xAF\xB0\xB1\xB2\xB3\xB4\xB5\xB6\xB7\xB8\xB9\xBA\xBB\xBC\xBD\xBE\xBF\xC0\xC1\xC2\xC3\xC4\xC5\xC6\xC7\xC8\xC9\xCA\xCB\xCC\xCD\xCE\xCF\xD0\xD1\xD2\xD3\xD4\xD5\xD6\xD7\xD8\xD9\xDA\xDB\xDC\xDD\xDE\xDF\xE0\xE1\xE2\xE3\xE4\xE5\xE6\xE7\xE8\xE9\xEA\xEB\xEC\xED\xEE\xEF\xF0\xF1\xF2\xF3\xF4\xF5\xF6\xF7\xF8\xF9\xFA\xFB\xFC\xFD\xFE\xFF"
},
"win1252": "windows1252",
"cp1252": "windows1252",
"windows1253": {
"type": "_sbcs",
"chars": "\u20AC\uFFFD\u201A\u0192\u201E\u2026\u2020\u2021\uFFFD\u2030\uFFFD\u2039\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u2018\u2019\u201C\u201D\u2022\u2013\u2014\uFFFD\u2122\uFFFD\u203A\uFFFD\uFFFD\uFFFD\uFFFD\xA0\u0385\u0386\xA3\xA4\xA5\xA6\xA7\xA8\xA9\uFFFD\xAB\xAC\xAD\xAE\u2015\xB0\xB1\xB2\xB3\u0384\xB5\xB6\xB7\u0388\u0389\u038A\xBB\u038C\xBD\u038E\u038F\u0390\u0391\u0392\u0393\u0394\u0395\u0396\u0397\u0398\u0399\u039A\u039B\u039C\u039D\u039E\u039F\u03A0\u03A1\uFFFD\u03A3\u03A4\u03A5\u03A6\u03A7\u03A8\u03A9\u03AA\u03AB\u03AC\u03AD\u03AE\u03AF\u03B0\u03B1\u03B2\u03B3\u03B4\u03B5\u03B6\u03B7\u03B8\u03B9\u03BA\u03BB\u03BC\u03BD\u03BE\u03BF\u03C0\u03C1\u03C2\u03C3\u03C4\u03C5\u03C6\u03C7\u03C8\u03C9\u03CA\u03CB\u03CC\u03CD\u03CE\uFFFD"
},
"win1253": "windows1253",
"cp1253": "windows1253",
"windows1254": {
"type": "_sbcs",
"chars": "\u20AC\uFFFD\u201A\u0192\u201E\u2026\u2020\u2021\u02C6\u2030\u0160\u2039\u0152\uFFFD\uFFFD\uFFFD\uFFFD\u2018\u2019\u201C\u201D\u2022\u2013\u2014\u02DC\u2122\u0161\u203A\u0153\uFFFD\uFFFD\u0178\xA0\xA1\xA2\xA3\xA4\xA5\xA6\xA7\xA8\xA9\xAA\xAB\xAC\xAD\xAE\xAF\xB0\xB1\xB2\xB3\xB4\xB5\xB6\xB7\xB8\xB9\xBA\xBB\xBC\xBD\xBE\xBF\xC0\xC1\xC2\xC3\xC4\xC5\xC6\xC7\xC8\xC9\xCA\xCB\xCC\xCD\xCE\xCF\u011E\xD1\xD2\xD3\xD4\xD5\xD6\xD7\xD8\xD9\xDA\xDB\xDC\u0130\u015E\xDF\xE0\xE1\xE2\xE3\xE4\xE5\xE6\xE7\xE8\xE9\xEA\xEB\xEC\xED\xEE\xEF\u011F\xF1\xF2\xF3\xF4\xF5\xF6\xF7\xF8\xF9\xFA\xFB\xFC\u0131\u015F\xFF"
},
"win1254": "windows1254",
"cp1254": "windows1254",
"windows1255": {
"type": "_sbcs",
"chars": "\u20AC\uFFFD\u201A\u0192\u201E\u2026\u2020\u2021\u02C6\u2030\uFFFD\u2039\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u2018\u2019\u201C\u201D\u2022\u2013\u2014\u02DC\u2122\uFFFD\u203A\uFFFD\uFFFD\uFFFD\uFFFD\xA0\xA1\xA2\xA3\u20AA\xA5\xA6\xA7\xA8\xA9\xD7\xAB\xAC\xAD\xAE\xAF\xB0\xB1\xB2\xB3\xB4\xB5\xB6\xB7\xB8\xB9\xF7\xBB\xBC\xBD\xBE\xBF\u05B0\u05B1\u05B2\u05B3\u05B4\u05B5\u05B6\u05B7\u05B8\u05B9\u05BA\u05BB\u05BC\u05BD\u05BE\u05BF\u05C0\u05C1\u05C2\u05C3\u05F0\u05F1\u05F2\u05F3\u05F4\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u05D0\u05D1\u05D2\u05D3\u05D4\u05D5\u05D6\u05D7\u05D8\u05D9\u05DA\u05DB\u05DC\u05DD\u05DE\u05DF\u05E0\u05E1\u05E2\u05E3\u05E4\u05E5\u05E6\u05E7\u05E8\u05E9\u05EA\uFFFD\uFFFD\u200E\u200F\uFFFD"
},
"win1255": "windows1255",
"cp1255": "windows1255",
"windows1256": {
"type": "_sbcs",
"chars": "\u20AC\u067E\u201A\u0192\u201E\u2026\u2020\u2021\u02C6\u2030\u0679\u2039\u0152\u0686\u0698\u0688\u06AF\u2018\u2019\u201C\u201D\u2022\u2013\u2014\u06A9\u2122\u0691\u203A\u0153\u200C\u200D\u06BA\xA0\u060C\xA2\xA3\xA4\xA5\xA6\xA7\xA8\xA9\u06BE\xAB\xAC\xAD\xAE\xAF\xB0\xB1\xB2\xB3\xB4\xB5\xB6\xB7\xB8\xB9\u061B\xBB\xBC\xBD\xBE\u061F\u06C1\u0621\u0622\u0623\u0624\u0625\u0626\u0627\u0628\u0629\u062A\u062B\u062C\u062D\u062E\u062F\u0630\u0631\u0632\u0633\u0634\u0635\u0636\xD7\u0637\u0638\u0639\u063A\u0640\u0641\u0642\u0643\xE0\u0644\xE2\u0645\u0646\u0647\u0648\xE7\xE8\xE9\xEA\xEB\u0649\u064A\xEE\xEF\u064B\u064C\u064D\u064E\xF4\u064F\u0650\xF7\u0651\xF9\u0652\xFB\xFC\u200E\u200F\u06D2"
},
"win1256": "windows1256",
"cp1256": "windows1256",
"windows1257": {
"type": "_sbcs",
"chars": "\u20AC\uFFFD\u201A\uFFFD\u201E\u2026\u2020\u2021\uFFFD\u2030\uFFFD\u2039\uFFFD\xA8\u02C7\xB8\uFFFD\u2018\u2019\u201C\u201D\u2022\u2013\u2014\uFFFD\u2122\uFFFD\u203A\uFFFD\xAF\u02DB\uFFFD\xA0\uFFFD\xA2\xA3\xA4\uFFFD\xA6\xA7\xD8\xA9\u0156\xAB\xAC\xAD\xAE\xC6\xB0\xB1\xB2\xB3\xB4\xB5\xB6\xB7\xF8\xB9\u0157\xBB\xBC\xBD\xBE\xE6\u0104\u012E\u0100\u0106\xC4\xC5\u0118\u0112\u010C\xC9\u0179\u0116\u0122\u0136\u012A\u013B\u0160\u0143\u0145\xD3\u014C\xD5\xD6\xD7\u0172\u0141\u015A\u016A\xDC\u017B\u017D\xDF\u0105\u012F\u0101\u0107\xE4\xE5\u0119\u0113\u010D\xE9\u017A\u0117\u0123\u0137\u012B\u013C\u0161\u0144\u0146\xF3\u014D\xF5\xF6\xF7\u0173\u0142\u015B\u016B\xFC\u017C\u017E\u02D9"
},
"win1257": "windows1257",
"cp1257": "windows1257",
"windows1258": {
"type": "_sbcs",
"chars": "\u20AC\uFFFD\u201A\u0192\u201E\u2026\u2020\u2021\u02C6\u2030\uFFFD\u2039\u0152\uFFFD\uFFFD\uFFFD\uFFFD\u2018\u2019\u201C\u201D\u2022\u2013\u2014\u02DC\u2122\uFFFD\u203A\u0153\uFFFD\uFFFD\u0178\xA0\xA1\xA2\xA3\xA4\xA5\xA6\xA7\xA8\xA9\xAA\xAB\xAC\xAD\xAE\xAF\xB0\xB1\xB2\xB3\xB4\xB5\xB6\xB7\xB8\xB9\xBA\xBB\xBC\xBD\xBE\xBF\xC0\xC1\xC2\u0102\xC4\xC5\xC6\xC7\xC8\xC9\xCA\xCB\u0300\xCD\xCE\xCF\u0110\xD1\u0309\xD3\xD4\u01A0\xD6\xD7\xD8\xD9\xDA\xDB\xDC\u01AF\u0303\xDF\xE0\xE1\xE2\u0103\xE4\xE5\xE6\xE7\xE8\xE9\xEA\xEB\u0301\xED\xEE\xEF\u0111\xF1\u0323\xF3\xF4\u01A1\xF6\xF7\xF8\xF9\xFA\xFB\xFC\u01B0\u20AB\xFF"
},
"win1258": "windows1258",
"cp1258": "windows1258",
"iso88591": {
"type": "_sbcs",
"chars": "\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8A\x8B\x8C\x8D\x8E\x8F\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9A\x9B\x9C\x9D\x9E\x9F\xA0\xA1\xA2\xA3\xA4\xA5\xA6\xA7\xA8\xA9\xAA\xAB\xAC\xAD\xAE\xAF\xB0\xB1\xB2\xB3\xB4\xB5\xB6\xB7\xB8\xB9\xBA\xBB\xBC\xBD\xBE\xBF\xC0\xC1\xC2\xC3\xC4\xC5\xC6\xC7\xC8\xC9\xCA\xCB\xCC\xCD\xCE\xCF\xD0\xD1\xD2\xD3\xD4\xD5\xD6\xD7\xD8\xD9\xDA\xDB\xDC\xDD\xDE\xDF\xE0\xE1\xE2\xE3\xE4\xE5\xE6\xE7\xE8\xE9\xEA\xEB\xEC\xED\xEE\xEF\xF0\xF1\xF2\xF3\xF4\xF5\xF6\xF7\xF8\xF9\xFA\xFB\xFC\xFD\xFE\xFF"
},
"cp28591": "iso88591",
"iso88592": {
"type": "_sbcs",
"chars": "\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8A\x8B\x8C\x8D\x8E\x8F\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9A\x9B\x9C\x9D\x9E\x9F\xA0\u0104\u02D8\u0141\xA4\u013D\u015A\xA7\xA8\u0160\u015E\u0164\u0179\xAD\u017D\u017B\xB0\u0105\u02DB\u0142\xB4\u013E\u015B\u02C7\xB8\u0161\u015F\u0165\u017A\u02DD\u017E\u017C\u0154\xC1\xC2\u0102\xC4\u0139\u0106\xC7\u010C\xC9\u0118\xCB\u011A\xCD\xCE\u010E\u0110\u0143\u0147\xD3\xD4\u0150\xD6\xD7\u0158\u016E\xDA\u0170\xDC\xDD\u0162\xDF\u0155\xE1\xE2\u0103\xE4\u013A\u0107\xE7\u010D\xE9\u0119\xEB\u011B\xED\xEE\u010F\u0111\u0144\u0148\xF3\xF4\u0151\xF6\xF7\u0159\u016F\xFA\u0171\xFC\xFD\u0163\u02D9"
},
"cp28592": "iso88592",
"iso88593": {
"type": "_sbcs",
"chars": "\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8A\x8B\x8C\x8D\x8E\x8F\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9A\x9B\x9C\x9D\x9E\x9F\xA0\u0126\u02D8\xA3\xA4\uFFFD\u0124\xA7\xA8\u0130\u015E\u011E\u0134\xAD\uFFFD\u017B\xB0\u0127\xB2\xB3\xB4\xB5\u0125\xB7\xB8\u0131\u015F\u011F\u0135\xBD\uFFFD\u017C\xC0\xC1\xC2\uFFFD\xC4\u010A\u0108\xC7\xC8\xC9\xCA\xCB\xCC\xCD\xCE\xCF\uFFFD\xD1\xD2\xD3\xD4\u0120\xD6\xD7\u011C\xD9\xDA\xDB\xDC\u016C\u015C\xDF\xE0\xE1\xE2\uFFFD\xE4\u010B\u0109\xE7\xE8\xE9\xEA\xEB\xEC\xED\xEE\xEF\uFFFD\xF1\xF2\xF3\xF4\u0121\xF6\xF7\u011D\xF9\xFA\xFB\xFC\u016D\u015D\u02D9"
},
"cp28593": "iso88593",
"iso88594": {
"type": "_sbcs",
"chars": "\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8A\x8B\x8C\x8D\x8E\x8F\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9A\x9B\x9C\x9D\x9E\x9F\xA0\u0104\u0138\u0156\xA4\u0128\u013B\xA7\xA8\u0160\u0112\u0122\u0166\xAD\u017D\xAF\xB0\u0105\u02DB\u0157\xB4\u0129\u013C\u02C7\xB8\u0161\u0113\u0123\u0167\u014A\u017E\u014B\u0100\xC1\xC2\xC3\xC4\xC5\xC6\u012E\u010C\xC9\u0118\xCB\u0116\xCD\xCE\u012A\u0110\u0145\u014C\u0136\xD4\xD5\xD6\xD7\xD8\u0172\xDA\xDB\xDC\u0168\u016A\xDF\u0101\xE1\xE2\xE3\xE4\xE5\xE6\u012F\u010D\xE9\u0119\xEB\u0117\xED\xEE\u012B\u0111\u0146\u014D\u0137\xF4\xF5\xF6\xF7\xF8\u0173\xFA\xFB\xFC\u0169\u016B\u02D9"
},
"cp28594": "iso88594",
"iso88595": {
"type": "_sbcs",
"chars": "\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8A\x8B\x8C\x8D\x8E\x8F\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9A\x9B\x9C\x9D\x9E\x9F\xA0\u0401\u0402\u0403\u0404\u0405\u0406\u0407\u0408\u0409\u040A\u040B\u040C\xAD\u040E\u040F\u0410\u0411\u0412\u0413\u0414\u0415\u0416\u0417\u0418\u0419\u041A\u041B\u041C\u041D\u041E\u041F\u0420\u0421\u0422\u0423\u0424\u0425\u0426\u0427\u0428\u0429\u042A\u042B\u042C\u042D\u042E\u042F\u0430\u0431\u0432\u0433\u0434\u0435\u0436\u0437\u0438\u0439\u043A\u043B\u043C\u043D\u043E\u043F\u0440\u0441\u0442\u0443\u0444\u0445\u0446\u0447\u0448\u0449\u044A\u044B\u044C\u044D\u044E\u044F\u2116\u0451\u0452\u0453\u0454\u0455\u0456\u0457\u0458\u0459\u045A\u045B\u045C\xA7\u045E\u045F"
},
"cp28595": "iso88595",
"iso88596": {
"type": "_sbcs",
"chars": "\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8A\x8B\x8C\x8D\x8E\x8F\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9A\x9B\x9C\x9D\x9E\x9F\xA0\uFFFD\uFFFD\uFFFD\xA4\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u060C\xAD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u061B\uFFFD\uFFFD\uFFFD\u061F\uFFFD\u0621\u0622\u0623\u0624\u0625\u0626\u0627\u0628\u0629\u062A\u062B\u062C\u062D\u062E\u062F\u0630\u0631\u0632\u0633\u0634\u0635\u0636\u0637\u0638\u0639\u063A\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u0640\u0641\u0642\u0643\u0644\u0645\u0646\u0647\u0648\u0649\u064A\u064B\u064C\u064D\u064E\u064F\u0650\u0651\u0652\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"
},
"cp28596": "iso88596",
"iso88597": {
"type": "_sbcs",
"chars": "\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8A\x8B\x8C\x8D\x8E\x8F\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9A\x9B\x9C\x9D\x9E\x9F\xA0\u2018\u2019\xA3\u20AC\u20AF\xA6\xA7\xA8\xA9\u037A\xAB\xAC\xAD\uFFFD\u2015\xB0\xB1\xB2\xB3\u0384\u0385\u0386\xB7\u0388\u0389\u038A\xBB\u038C\xBD\u038E\u038F\u0390\u0391\u0392\u0393\u0394\u0395\u0396\u0397\u0398\u0399\u039A\u039B\u039C\u039D\u039E\u039F\u03A0\u03A1\uFFFD\u03A3\u03A4\u03A5\u03A6\u03A7\u03A8\u03A9\u03AA\u03AB\u03AC\u03AD\u03AE\u03AF\u03B0\u03B1\u03B2\u03B3\u03B4\u03B5\u03B6\u03B7\u03B8\u03B9\u03BA\u03BB\u03BC\u03BD\u03BE\u03BF\u03C0\u03C1\u03C2\u03C3\u03C4\u03C5\u03C6\u03C7\u03C8\u03C9\u03CA\u03CB\u03CC\u03CD\u03CE\uFFFD"
},
"cp28597": "iso88597",
"iso88598": {
"type": "_sbcs",
"chars": "\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8A\x8B\x8C\x8D\x8E\x8F\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9A\x9B\x9C\x9D\x9E\x9F\xA0\uFFFD\xA2\xA3\xA4\xA5\xA6\xA7\xA8\xA9\xD7\xAB\xAC\xAD\xAE\xAF\xB0\xB1\xB2\xB3\xB4\xB5\xB6\xB7\xB8\xB9\xF7\xBB\xBC\xBD\xBE\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u2017\u05D0\u05D1\u05D2\u05D3\u05D4\u05D5\u05D6\u05D7\u05D8\u05D9\u05DA\u05DB\u05DC\u05DD\u05DE\u05DF\u05E0\u05E1\u05E2\u05E3\u05E4\u05E5\u05E6\u05E7\u05E8\u05E9\u05EA\uFFFD\uFFFD\u200E\u200F\uFFFD"
},
"cp28598": "iso88598",
"iso88599": {
"type": "_sbcs",
"chars": "\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8A\x8B\x8C\x8D\x8E\x8F\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9A\x9B\x9C\x9D\x9E\x9F\xA0\xA1\xA2\xA3\xA4\xA5\xA6\xA7\xA8\xA9\xAA\xAB\xAC\xAD\xAE\xAF\xB0\xB1\xB2\xB3\xB4\xB5\xB6\xB7\xB8\xB9\xBA\xBB\xBC\xBD\xBE\xBF\xC0\xC1\xC2\xC3\xC4\xC5\xC6\xC7\xC8\xC9\xCA\xCB\xCC\xCD\xCE\xCF\u011E\xD1\xD2\xD3\xD4\xD5\xD6\xD7\xD8\xD9\xDA\xDB\xDC\u0130\u015E\xDF\xE0\xE1\xE2\xE3\xE4\xE5\xE6\xE7\xE8\xE9\xEA\xEB\xEC\xED\xEE\xEF\u011F\xF1\xF2\xF3\xF4\xF5\xF6\xF7\xF8\xF9\xFA\xFB\xFC\u0131\u015F\xFF"
},
"cp28599": "iso88599",
"iso885910": {
"type": "_sbcs",
"chars": "\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8A\x8B\x8C\x8D\x8E\x8F\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9A\x9B\x9C\x9D\x9E\x9F\xA0\u0104\u0112\u0122\u012A\u0128\u0136\xA7\u013B\u0110\u0160\u0166\u017D\xAD\u016A\u014A\xB0\u0105\u0113\u0123\u012B\u0129\u0137\xB7\u013C\u0111\u0161\u0167\u017E\u2015\u016B\u014B\u0100\xC1\xC2\xC3\xC4\xC5\xC6\u012E\u010C\xC9\u0118\xCB\u0116\xCD\xCE\xCF\xD0\u0145\u014C\xD3\xD4\xD5\xD6\u0168\xD8\u0172\xDA\xDB\xDC\xDD\xDE\xDF\u0101\xE1\xE2\xE3\xE4\xE5\xE6\u012F\u010D\xE9\u0119\xEB\u0117\xED\xEE\xEF\xF0\u0146\u014D\xF3\xF4\xF5\xF6\u0169\xF8\u0173\xFA\xFB\xFC\xFD\xFE\u0138"
},
"cp28600": "iso885910",
"iso885911": {
"type": "_sbcs",
"chars": "\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8A\x8B\x8C\x8D\x8E\x8F\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9A\x9B\x9C\x9D\x9E\x9F\xA0\u0E01\u0E02\u0E03\u0E04\u0E05\u0E06\u0E07\u0E08\u0E09\u0E0A\u0E0B\u0E0C\u0E0D\u0E0E\u0E0F\u0E10\u0E11\u0E12\u0E13\u0E14\u0E15\u0E16\u0E17\u0E18\u0E19\u0E1A\u0E1B\u0E1C\u0E1D\u0E1E\u0E1F\u0E20\u0E21\u0E22\u0E23\u0E24\u0E25\u0E26\u0E27\u0E28\u0E29\u0E2A\u0E2B\u0E2C\u0E2D\u0E2E\u0E2F\u0E30\u0E31\u0E32\u0E33\u0E34\u0E35\u0E36\u0E37\u0E38\u0E39\u0E3A\uFFFD\uFFFD\uFFFD\uFFFD\u0E3F\u0E40\u0E41\u0E42\u0E43\u0E44\u0E45\u0E46\u0E47\u0E48\u0E49\u0E4A\u0E4B\u0E4C\u0E4D\u0E4E\u0E4F\u0E50\u0E51\u0E52\u0E53\u0E54\u0E55\u0E56\u0E57\u0E58\u0E59\u0E5A\u0E5B\uFFFD\uFFFD\uFFFD\uFFFD"
},
"cp28601": "iso885911",
"iso885913": {
"type": "_sbcs",
"chars": "\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8A\x8B\x8C\x8D\x8E\x8F\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9A\x9B\x9C\x9D\x9E\x9F\xA0\u201D\xA2\xA3\xA4\u201E\xA6\xA7\xD8\xA9\u0156\xAB\xAC\xAD\xAE\xC6\xB0\xB1\xB2\xB3\u201C\xB5\xB6\xB7\xF8\xB9\u0157\xBB\xBC\xBD\xBE\xE6\u0104\u012E\u0100\u0106\xC4\xC5\u0118\u0112\u010C\xC9\u0179\u0116\u0122\u0136\u012A\u013B\u0160\u0143\u0145\xD3\u014C\xD5\xD6\xD7\u0172\u0141\u015A\u016A\xDC\u017B\u017D\xDF\u0105\u012F\u0101\u0107\xE4\xE5\u0119\u0113\u010D\xE9\u017A\u0117\u0123\u0137\u012B\u013C\u0161\u0144\u0146\xF3\u014D\xF5\xF6\xF7\u0173\u0142\u015B\u016B\xFC\u017C\u017E\u2019"
},
"cp28603": "iso885913",
"iso885914": {
"type": "_sbcs",
"chars": "\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8A\x8B\x8C\x8D\x8E\x8F\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9A\x9B\x9C\x9D\x9E\x9F\xA0\u1E02\u1E03\xA3\u010A\u010B\u1E0A\xA7\u1E80\xA9\u1E82\u1E0B\u1EF2\xAD\xAE\u0178\u1E1E\u1E1F\u0120\u0121\u1E40\u1E41\xB6\u1E56\u1E81\u1E57\u1E83\u1E60\u1EF3\u1E84\u1E85\u1E61\xC0\xC1\xC2\xC3\xC4\xC5\xC6\xC7\xC8\xC9\xCA\xCB\xCC\xCD\xCE\xCF\u0174\xD1\xD2\xD3\xD4\xD5\xD6\u1E6A\xD8\xD9\xDA\xDB\xDC\xDD\u0176\xDF\xE0\xE1\xE2\xE3\xE4\xE5\xE6\xE7\xE8\xE9\xEA\xEB\xEC\xED\xEE\xEF\u0175\xF1\xF2\xF3\xF4\xF5\xF6\u1E6B\xF8\xF9\xFA\xFB\xFC\xFD\u0177\xFF"
},
"cp28604": "iso885914",
"iso885915": {
"type": "_sbcs",
"chars": "\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8A\x8B\x8C\x8D\x8E\x8F\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9A\x9B\x9C\x9D\x9E\x9F\xA0\xA1\xA2\xA3\u20AC\xA5\u0160\xA7\u0161\xA9\xAA\xAB\xAC\xAD\xAE\xAF\xB0\xB1\xB2\xB3\u017D\xB5\xB6\xB7\u017E\xB9\xBA\xBB\u0152\u0153\u0178\xBF\xC0\xC1\xC2\xC3\xC4\xC5\xC6\xC7\xC8\xC9\xCA\xCB\xCC\xCD\xCE\xCF\xD0\xD1\xD2\xD3\xD4\xD5\xD6\xD7\xD8\xD9\xDA\xDB\xDC\xDD\xDE\xDF\xE0\xE1\xE2\xE3\xE4\xE5\xE6\xE7\xE8\xE9\xEA\xEB\xEC\xED\xEE\xEF\xF0\xF1\xF2\xF3\xF4\xF5\xF6\xF7\xF8\xF9\xFA\xFB\xFC\xFD\xFE\xFF"
},
"cp28605": "iso885915",
"iso885916": {
"type": "_sbcs",
"chars": "\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8A\x8B\x8C\x8D\x8E\x8F\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9A\x9B\x9C\x9D\x9E\x9F\xA0\u0104\u0105\u0141\u20AC\u201E\u0160\xA7\u0161\xA9\u0218\xAB\u0179\xAD\u017A\u017B\xB0\xB1\u010C\u0142\u017D\u201D\xB6\xB7\u017E\u010D\u0219\xBB\u0152\u0153\u0178\u017C\xC0\xC1\xC2\u0102\xC4\u0106\xC6\xC7\xC8\xC9\xCA\xCB\xCC\xCD\xCE\xCF\u0110\u0143\xD2\xD3\xD4\u0150\xD6\u015A\u0170\xD9\xDA\xDB\xDC\u0118\u021A\xDF\xE0\xE1\xE2\u0103\xE4\u0107\xE6\xE7\xE8\xE9\xEA\xEB\xEC\xED\xEE\xEF\u0111\u0144\xF2\xF3\xF4\u0151\xF6\u015B\u0171\xF9\xFA\xFB\xFC\u0119\u021B\xFF"
},
"cp28606": "iso885916",
"cp437": {
"type": "_sbcs",
"chars": "\xC7\xFC\xE9\xE2\xE4\xE0\xE5\xE7\xEA\xEB\xE8\xEF\xEE\xEC\xC4\xC5\xC9\xE6\xC6\xF4\xF6\xF2\xFB\xF9\xFF\xD6\xDC\xA2\xA3\xA5\u20A7\u0192\xE1\xED\xF3\xFA\xF1\xD1\xAA\xBA\xBF\u2310\xAC\xBD\xBC\xA1\xAB\xBB\u2591\u2592\u2593\u2502\u2524\u2561\u2562\u2556\u2555\u2563\u2551\u2557\u255D\u255C\u255B\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u255E\u255F\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u2567\u2568\u2564\u2565\u2559\u2558\u2552\u2553\u256B\u256A\u2518\u250C\u2588\u2584\u258C\u2590\u2580\u03B1\xDF\u0393\u03C0\u03A3\u03C3\xB5\u03C4\u03A6\u0398\u03A9\u03B4\u221E\u03C6\u03B5\u2229\u2261\xB1\u2265\u2264\u2320\u2321\xF7\u2248\xB0\u2219\xB7\u221A\u207F\xB2\u25A0\xA0"
},
"ibm437": "cp437",
"csibm437": "cp437",
"cp737": {
"type": "_sbcs",
"chars": "\u0391\u0392\u0393\u0394\u0395\u0396\u0397\u0398\u0399\u039A\u039B\u039C\u039D\u039E\u039F\u03A0\u03A1\u03A3\u03A4\u03A5\u03A6\u03A7\u03A8\u03A9\u03B1\u03B2\u03B3\u03B4\u03B5\u03B6\u03B7\u03B8\u03B9\u03BA\u03BB\u03BC\u03BD\u03BE\u03BF\u03C0\u03C1\u03C3\u03C2\u03C4\u03C5\u03C6\u03C7\u03C8\u2591\u2592\u2593\u2502\u2524\u2561\u2562\u2556\u2555\u2563\u2551\u2557\u255D\u255C\u255B\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u255E\u255F\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u2567\u2568\u2564\u2565\u2559\u2558\u2552\u2553\u256B\u256A\u2518\u250C\u2588\u2584\u258C\u2590\u2580\u03C9\u03AC\u03AD\u03AE\u03CA\u03AF\u03CC\u03CD\u03CB\u03CE\u0386\u0388\u0389\u038A\u038C\u038E\u038F\xB1\u2265\u2264\u03AA\u03AB\xF7\u2248\xB0\u2219\xB7\u221A\u207F\xB2\u25A0\xA0"
},
"ibm737": "cp737",
"csibm737": "cp737",
"cp775": {
"type": "_sbcs",
"chars": "\u0106\xFC\xE9\u0101\xE4\u0123\xE5\u0107\u0142\u0113\u0156\u0157\u012B\u0179\xC4\xC5\xC9\xE6\xC6\u014D\xF6\u0122\xA2\u015A\u015B\xD6\xDC\xF8\xA3\xD8\xD7\xA4\u0100\u012A\xF3\u017B\u017C\u017A\u201D\xA6\xA9\xAE\xAC\xBD\xBC\u0141\xAB\xBB\u2591\u2592\u2593\u2502\u2524\u0104\u010C\u0118\u0116\u2563\u2551\u2557\u255D\u012E\u0160\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u0172\u016A\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u017D\u0105\u010D\u0119\u0117\u012F\u0161\u0173\u016B\u017E\u2518\u250C\u2588\u2584\u258C\u2590\u2580\xD3\xDF\u014C\u0143\xF5\xD5\xB5\u0144\u0136\u0137\u013B\u013C\u0146\u0112\u0145\u2019\xAD\xB1\u201C\xBE\xB6\xA7\xF7\u201E\xB0\u2219\xB7\xB9\xB3\xB2\u25A0\xA0"
},
"ibm775": "cp775",
"csibm775": "cp775",
"cp850": {
"type": "_sbcs",
"chars": "\xC7\xFC\xE9\xE2\xE4\xE0\xE5\xE7\xEA\xEB\xE8\xEF\xEE\xEC\xC4\xC5\xC9\xE6\xC6\xF4\xF6\xF2\xFB\xF9\xFF\xD6\xDC\xF8\xA3\xD8\xD7\u0192\xE1\xED\xF3\xFA\xF1\xD1\xAA\xBA\xBF\xAE\xAC\xBD\xBC\xA1\xAB\xBB\u2591\u2592\u2593\u2502\u2524\xC1\xC2\xC0\xA9\u2563\u2551\u2557\u255D\xA2\xA5\u2510\u2514\u2534\u252C\u251C\u2500\u253C\xE3\xC3\u255A\u2554\u2569\u2566\u2560\u2550\u256C\xA4\xF0\xD0\xCA\xCB\xC8\u0131\xCD\xCE\xCF\u2518\u250C\u2588\u2584\xA6\xCC\u2580\xD3\xDF\xD4\xD2\xF5\xD5\xB5\xFE\xDE\xDA\xDB\xD9\xFD\xDD\xAF\xB4\xAD\xB1\u2017\xBE\xB6\xA7\xF7\xB8\xB0\xA8\xB7\xB9\xB3\xB2\u25A0\xA0"
},
"ibm850": "cp850",
"csibm850": "cp850",
"cp852": {
"type": "_sbcs",
"chars": "\xC7\xFC\xE9\xE2\xE4\u016F\u0107\xE7\u0142\xEB\u0150\u0151\xEE\u0179\xC4\u0106\xC9\u0139\u013A\xF4\xF6\u013D\u013E\u015A\u015B\xD6\xDC\u0164\u0165\u0141\xD7\u010D\xE1\xED\xF3\xFA\u0104\u0105\u017D\u017E\u0118\u0119\xAC\u017A\u010C\u015F\xAB\xBB\u2591\u2592\u2593\u2502\u2524\xC1\xC2\u011A\u015E\u2563\u2551\u2557\u255D\u017B\u017C\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u0102\u0103\u255A\u2554\u2569\u2566\u2560\u2550\u256C\xA4\u0111\u0110\u010E\xCB\u010F\u0147\xCD\xCE\u011B\u2518\u250C\u2588\u2584\u0162\u016E\u2580\xD3\xDF\xD4\u0143\u0144\u0148\u0160\u0161\u0154\xDA\u0155\u0170\xFD\xDD\u0163\xB4\xAD\u02DD\u02DB\u02C7\u02D8\xA7\xF7\xB8\xB0\xA8\u02D9\u0171\u0158\u0159\u25A0\xA0"
},
"ibm852": "cp852",
"csibm852": "cp852",
"cp855": {
"type": "_sbcs",
"chars": "\u0452\u0402\u0453\u0403\u0451\u0401\u0454\u0404\u0455\u0405\u0456\u0406\u0457\u0407\u0458\u0408\u0459\u0409\u045A\u040A\u045B\u040B\u045C\u040C\u045E\u040E\u045F\u040F\u044E\u042E\u044A\u042A\u0430\u0410\u0431\u0411\u0446\u0426\u0434\u0414\u0435\u0415\u0444\u0424\u0433\u0413\xAB\xBB\u2591\u2592\u2593\u2502\u2524\u0445\u0425\u0438\u0418\u2563\u2551\u2557\u255D\u0439\u0419\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u043A\u041A\u255A\u2554\u2569\u2566\u2560\u2550\u256C\xA4\u043B\u041B\u043C\u041C\u043D\u041D\u043E\u041E\u043F\u2518\u250C\u2588\u2584\u041F\u044F\u2580\u042F\u0440\u0420\u0441\u0421\u0442\u0422\u0443\u0423\u0436\u0416\u0432\u0412\u044C\u042C\u2116\xAD\u044B\u042B\u0437\u0417\u0448\u0428\u044D\u042D\u0449\u0429\u0447\u0427\xA7\u25A0\xA0"
},
"ibm855": "cp855",
"csibm855": "cp855",
"cp856": {
"type": "_sbcs",
"chars": "\u05D0\u05D1\u05D2\u05D3\u05D4\u05D5\u05D6\u05D7\u05D8\u05D9\u05DA\u05DB\u05DC\u05DD\u05DE\u05DF\u05E0\u05E1\u05E2\u05E3\u05E4\u05E5\u05E6\u05E7\u05E8\u05E9\u05EA\uFFFD\xA3\uFFFD\xD7\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\xAE\xAC\xBD\xBC\uFFFD\xAB\xBB\u2591\u2592\u2593\u2502\u2524\uFFFD\uFFFD\uFFFD\xA9\u2563\u2551\u2557\u255D\xA2\xA5\u2510\u2514\u2534\u252C\u251C\u2500\u253C\uFFFD\uFFFD\u255A\u2554\u2569\u2566\u2560\u2550\u256C\xA4\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u2518\u250C\u2588\u2584\xA6\uFFFD\u2580\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\xB5\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\xAF\xB4\xAD\xB1\u2017\xBE\xB6\xA7\xF7\xB8\xB0\xA8\xB7\xB9\xB3\xB2\u25A0\xA0"
},
"ibm856": "cp856",
"csibm856": "cp856",
"cp857": {
"type": "_sbcs",
"chars": "\xC7\xFC\xE9\xE2\xE4\xE0\xE5\xE7\xEA\xEB\xE8\xEF\xEE\u0131\xC4\xC5\xC9\xE6\xC6\xF4\xF6\xF2\xFB\xF9\u0130\xD6\xDC\xF8\xA3\xD8\u015E\u015F\xE1\xED\xF3\xFA\xF1\xD1\u011E\u011F\xBF\xAE\xAC\xBD\xBC\xA1\xAB\xBB\u2591\u2592\u2593\u2502\u2524\xC1\xC2\xC0\xA9\u2563\u2551\u2557\u255D\xA2\xA5\u2510\u2514\u2534\u252C\u251C\u2500\u253C\xE3\xC3\u255A\u2554\u2569\u2566\u2560\u2550\u256C\xA4\xBA\xAA\xCA\xCB\xC8\uFFFD\xCD\xCE\xCF\u2518\u250C\u2588\u2584\xA6\xCC\u2580\xD3\xDF\xD4\xD2\xF5\xD5\xB5\uFFFD\xD7\xDA\xDB\xD9\xEC\xFF\xAF\xB4\xAD\xB1\uFFFD\xBE\xB6\xA7\xF7\xB8\xB0\xA8\xB7\xB9\xB3\xB2\u25A0\xA0"
},
"ibm857": "cp857",
"csibm857": "cp857",
"cp858": {
"type": "_sbcs",
"chars": "\xC7\xFC\xE9\xE2\xE4\xE0\xE5\xE7\xEA\xEB\xE8\xEF\xEE\xEC\xC4\xC5\xC9\xE6\xC6\xF4\xF6\xF2\xFB\xF9\xFF\xD6\xDC\xF8\xA3\xD8\xD7\u0192\xE1\xED\xF3\xFA\xF1\xD1\xAA\xBA\xBF\xAE\xAC\xBD\xBC\xA1\xAB\xBB\u2591\u2592\u2593\u2502\u2524\xC1\xC2\xC0\xA9\u2563\u2551\u2557\u255D\xA2\xA5\u2510\u2514\u2534\u252C\u251C\u2500\u253C\xE3\xC3\u255A\u2554\u2569\u2566\u2560\u2550\u256C\xA4\xF0\xD0\xCA\xCB\xC8\u20AC\xCD\xCE\xCF\u2518\u250C\u2588\u2584\xA6\xCC\u2580\xD3\xDF\xD4\xD2\xF5\xD5\xB5\xFE\xDE\xDA\xDB\xD9\xFD\xDD\xAF\xB4\xAD\xB1\u2017\xBE\xB6\xA7\xF7\xB8\xB0\xA8\xB7\xB9\xB3\xB2\u25A0\xA0"
},
"ibm858": "cp858",
"csibm858": "cp858",
"cp860": {
"type": "_sbcs",
"chars": "\xC7\xFC\xE9\xE2\xE3\xE0\xC1\xE7\xEA\xCA\xE8\xCD\xD4\xEC\xC3\xC2\xC9\xC0\xC8\xF4\xF5\xF2\xDA\xF9\xCC\xD5\xDC\xA2\xA3\xD9\u20A7\xD3\xE1\xED\xF3\xFA\xF1\xD1\xAA\xBA\xBF\xD2\xAC\xBD\xBC\xA1\xAB\xBB\u2591\u2592\u2593\u2502\u2524\u2561\u2562\u2556\u2555\u2563\u2551\u2557\u255D\u255C\u255B\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u255E\u255F\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u2567\u2568\u2564\u2565\u2559\u2558\u2552\u2553\u256B\u256A\u2518\u250C\u2588\u2584\u258C\u2590\u2580\u03B1\xDF\u0393\u03C0\u03A3\u03C3\xB5\u03C4\u03A6\u0398\u03A9\u03B4\u221E\u03C6\u03B5\u2229\u2261\xB1\u2265\u2264\u2320\u2321\xF7\u2248\xB0\u2219\xB7\u221A\u207F\xB2\u25A0\xA0"
},
"ibm860": "cp860",
"csibm860": "cp860",
"cp861": {
"type": "_sbcs",
"chars": "\xC7\xFC\xE9\xE2\xE4\xE0\xE5\xE7\xEA\xEB\xE8\xD0\xF0\xDE\xC4\xC5\xC9\xE6\xC6\xF4\xF6\xFE\xFB\xDD\xFD\xD6\xDC\xF8\xA3\xD8\u20A7\u0192\xE1\xED\xF3\xFA\xC1\xCD\xD3\xDA\xBF\u2310\xAC\xBD\xBC\xA1\xAB\xBB\u2591\u2592\u2593\u2502\u2524\u2561\u2562\u2556\u2555\u2563\u2551\u2557\u255D\u255C\u255B\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u255E\u255F\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u2567\u2568\u2564\u2565\u2559\u2558\u2552\u2553\u256B\u256A\u2518\u250C\u2588\u2584\u258C\u2590\u2580\u03B1\xDF\u0393\u03C0\u03A3\u03C3\xB5\u03C4\u03A6\u0398\u03A9\u03B4\u221E\u03C6\u03B5\u2229\u2261\xB1\u2265\u2264\u2320\u2321\xF7\u2248\xB0\u2219\xB7\u221A\u207F\xB2\u25A0\xA0"
},
"ibm861": "cp861",
"csibm861": "cp861",
"cp862": {
"type": "_sbcs",
"chars": "\u05D0\u05D1\u05D2\u05D3\u05D4\u05D5\u05D6\u05D7\u05D8\u05D9\u05DA\u05DB\u05DC\u05DD\u05DE\u05DF\u05E0\u05E1\u05E2\u05E3\u05E4\u05E5\u05E6\u05E7\u05E8\u05E9\u05EA\xA2\xA3\xA5\u20A7\u0192\xE1\xED\xF3\xFA\xF1\xD1\xAA\xBA\xBF\u2310\xAC\xBD\xBC\xA1\xAB\xBB\u2591\u2592\u2593\u2502\u2524\u2561\u2562\u2556\u2555\u2563\u2551\u2557\u255D\u255C\u255B\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u255E\u255F\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u2567\u2568\u2564\u2565\u2559\u2558\u2552\u2553\u256B\u256A\u2518\u250C\u2588\u2584\u258C\u2590\u2580\u03B1\xDF\u0393\u03C0\u03A3\u03C3\xB5\u03C4\u03A6\u0398\u03A9\u03B4\u221E\u03C6\u03B5\u2229\u2261\xB1\u2265\u2264\u2320\u2321\xF7\u2248\xB0\u2219\xB7\u221A\u207F\xB2\u25A0\xA0"
},
"ibm862": "cp862",
"csibm862": "cp862",
"cp863": {
"type": "_sbcs",
"chars": "\xC7\xFC\xE9\xE2\xC2\xE0\xB6\xE7\xEA\xEB\xE8\xEF\xEE\u2017\xC0\xA7\xC9\xC8\xCA\xF4\xCB\xCF\xFB\xF9\xA4\xD4\xDC\xA2\xA3\xD9\xDB\u0192\xA6\xB4\xF3\xFA\xA8\xB8\xB3\xAF\xCE\u2310\xAC\xBD\xBC\xBE\xAB\xBB\u2591\u2592\u2593\u2502\u2524\u2561\u2562\u2556\u2555\u2563\u2551\u2557\u255D\u255C\u255B\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u255E\u255F\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u2567\u2568\u2564\u2565\u2559\u2558\u2552\u2553\u256B\u256A\u2518\u250C\u2588\u2584\u258C\u2590\u2580\u03B1\xDF\u0393\u03C0\u03A3\u03C3\xB5\u03C4\u03A6\u0398\u03A9\u03B4\u221E\u03C6\u03B5\u2229\u2261\xB1\u2265\u2264\u2320\u2321\xF7\u2248\xB0\u2219\xB7\u221A\u207F\xB2\u25A0\xA0"
},
"ibm863": "cp863",
"csibm863": "cp863",
"cp864": {
"type": "_sbcs",
"chars": "\0\x07\b \n\v\f\r\x1B !\"#$\u066A&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\x7F\xB0\xB7\u2219\u221A\u2592\u2500\u2502\u253C\u2524\u252C\u251C\u2534\u2510\u250C\u2514\u2518\u03B2\u221E\u03C6\xB1\xBD\xBC\u2248\xAB\xBB\uFEF7\uFEF8\uFFFD\uFFFD\uFEFB\uFEFC\uFFFD\xA0\xAD\uFE82\xA3\xA4\uFE84\uFFFD\uFFFD\uFE8E\uFE8F\uFE95\uFE99\u060C\uFE9D\uFEA1\uFEA5\u0660\u0661\u0662\u0663\u0664\u0665\u0666\u0667\u0668\u0669\uFED1\u061B\uFEB1\uFEB5\uFEB9\u061F\xA2\uFE80\uFE81\uFE83\uFE85\uFECA\uFE8B\uFE8D\uFE91\uFE93\uFE97\uFE9B\uFE9F\uFEA3\uFEA7\uFEA9\uFEAB\uFEAD\uFEAF\uFEB3\uFEB7\uFEBB\uFEBF\uFEC1\uFEC5\uFECB\uFECF\xA6\xAC\xF7\xD7\uFEC9\u0640\uFED3\uFED7\uFEDB\uFEDF\uFEE3\uFEE7\uFEEB\uFEED\uFEEF\uFEF3\uFEBD\uFECC\uFECE\uFECD\uFEE1\uFE7D\u0651\uFEE5\uFEE9\uFEEC\uFEF0\uFEF2\uFED0\uFED5\uFEF5\uFEF6\uFEDD\uFED9\uFEF1\u25A0\uFFFD"
},
"ibm864": "cp864",
"csibm864": "cp864",
"cp865": {
"type": "_sbcs",
"chars": "\xC7\xFC\xE9\xE2\xE4\xE0\xE5\xE7\xEA\xEB\xE8\xEF\xEE\xEC\xC4\xC5\xC9\xE6\xC6\xF4\xF6\xF2\xFB\xF9\xFF\xD6\xDC\xF8\xA3\xD8\u20A7\u0192\xE1\xED\xF3\xFA\xF1\xD1\xAA\xBA\xBF\u2310\xAC\xBD\xBC\xA1\xAB\xA4\u2591\u2592\u2593\u2502\u2524\u2561\u2562\u2556\u2555\u2563\u2551\u2557\u255D\u255C\u255B\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u255E\u255F\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u2567\u2568\u2564\u2565\u2559\u2558\u2552\u2553\u256B\u256A\u2518\u250C\u2588\u2584\u258C\u2590\u2580\u03B1\xDF\u0393\u03C0\u03A3\u03C3\xB5\u03C4\u03A6\u0398\u03A9\u03B4\u221E\u03C6\u03B5\u2229\u2261\xB1\u2265\u2264\u2320\u2321\xF7\u2248\xB0\u2219\xB7\u221A\u207F\xB2\u25A0\xA0"
},
"ibm865": "cp865",
"csibm865": "cp865",
"cp866": {
"type": "_sbcs",
"chars": "\u0410\u0411\u0412\u0413\u0414\u0415\u0416\u0417\u0418\u0419\u041A\u041B\u041C\u041D\u041E\u041F\u0420\u0421\u0422\u0423\u0424\u0425\u0426\u0427\u0428\u0429\u042A\u042B\u042C\u042D\u042E\u042F\u0430\u0431\u0432\u0433\u0434\u0435\u0436\u0437\u0438\u0439\u043A\u043B\u043C\u043D\u043E\u043F\u2591\u2592\u2593\u2502\u2524\u2561\u2562\u2556\u2555\u2563\u2551\u2557\u255D\u255C\u255B\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u255E\u255F\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u2567\u2568\u2564\u2565\u2559\u2558\u2552\u2553\u256B\u256A\u2518\u250C\u2588\u2584\u258C\u2590\u2580\u0440\u0441\u0442\u0443\u0444\u0445\u0446\u0447\u0448\u0449\u044A\u044B\u044C\u044D\u044E\u044F\u0401\u0451\u0404\u0454\u0407\u0457\u040E\u045E\xB0\u2219\xB7\u221A\u2116\xA4\u25A0\xA0"
},
"ibm866": "cp866",
"csibm866": "cp866",
"cp869": {
"type": "_sbcs",
"chars": "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u0386\uFFFD\xB7\xAC\xA6\u2018\u2019\u0388\u2015\u0389\u038A\u03AA\u038C\uFFFD\uFFFD\u038E\u03AB\xA9\u038F\xB2\xB3\u03AC\xA3\u03AD\u03AE\u03AF\u03CA\u0390\u03CC\u03CD\u0391\u0392\u0393\u0394\u0395\u0396\u0397\xBD\u0398\u0399\xAB\xBB\u2591\u2592\u2593\u2502\u2524\u039A\u039B\u039C\u039D\u2563\u2551\u2557\u255D\u039E\u039F\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u03A0\u03A1\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u03A3\u03A4\u03A5\u03A6\u03A7\u03A8\u03A9\u03B1\u03B2\u03B3\u2518\u250C\u2588\u2584\u03B4\u03B5\u2580\u03B6\u03B7\u03B8\u03B9\u03BA\u03BB\u03BC\u03BD\u03BE\u03BF\u03C0\u03C1\u03C3\u03C2\u03C4\u0384\xAD\xB1\u03C5\u03C6\u03C7\xA7\u03C8\u0385\xB0\xA8\u03C9\u03CB\u03B0\u03CE\u25A0\xA0"
},
"ibm869": "cp869",
"csibm869": "cp869",
"cp922": {
"type": "_sbcs",
"chars": "\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8A\x8B\x8C\x8D\x8E\x8F\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9A\x9B\x9C\x9D\x9E\x9F\xA0\xA1\xA2\xA3\xA4\xA5\xA6\xA7\xA8\xA9\xAA\xAB\xAC\xAD\xAE\u203E\xB0\xB1\xB2\xB3\xB4\xB5\xB6\xB7\xB8\xB9\xBA\xBB\xBC\xBD\xBE\xBF\xC0\xC1\xC2\xC3\xC4\xC5\xC6\xC7\xC8\xC9\xCA\xCB\xCC\xCD\xCE\xCF\u0160\xD1\xD2\xD3\xD4\xD5\xD6\xD7\xD8\xD9\xDA\xDB\xDC\xDD\u017D\xDF\xE0\xE1\xE2\xE3\xE4\xE5\xE6\xE7\xE8\xE9\xEA\xEB\xEC\xED\xEE\xEF\u0161\xF1\xF2\xF3\xF4\xF5\xF6\xF7\xF8\xF9\xFA\xFB\xFC\xFD\u017E\xFF"
},
"ibm922": "cp922",
"csibm922": "cp922",
"cp1046": {
"type": "_sbcs",
"chars": "\uFE88\xD7\xF7\uF8F6\uF8F5\uF8F4\uF8F7\uFE71\x88\u25A0\u2502\u2500\u2510\u250C\u2514\u2518\uFE79\uFE7B\uFE7D\uFE7F\uFE77\uFE8A\uFEF0\uFEF3\uFEF2\uFECE\uFECF\uFED0\uFEF6\uFEF8\uFEFA\uFEFC\xA0\uF8FA\uF8F9\uF8F8\xA4\uF8FB\uFE8B\uFE91\uFE97\uFE9B\uFE9F\uFEA3\u060C\xAD\uFEA7\uFEB3\u0660\u0661\u0662\u0663\u0664\u0665\u0666\u0667\u0668\u0669\uFEB7\u061B\uFEBB\uFEBF\uFECA\u061F\uFECB\u0621\u0622\u0623\u0624\u0625\u0626\u0627\u0628\u0629\u062A\u062B\u062C\u062D\u062E\u062F\u0630\u0631\u0632\u0633\u0634\u0635\u0636\u0637\uFEC7\u0639\u063A\uFECC\uFE82\uFE84\uFE8E\uFED3\u0640\u0641\u0642\u0643\u0644\u0645\u0646\u0647\u0648\u0649\u064A\u064B\u064C\u064D\u064E\u064F\u0650\u0651\u0652\uFED7\uFEDB\uFEDF\uF8FC\uFEF5\uFEF7\uFEF9\uFEFB\uFEE3\uFEE7\uFEEC\uFEE9\uFFFD"
},
"ibm1046": "cp1046",
"csibm1046": "cp1046",
"cp1124": {
"type": "_sbcs",
"chars": "\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8A\x8B\x8C\x8D\x8E\x8F\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9A\x9B\x9C\x9D\x9E\x9F\xA0\u0401\u0402\u0490\u0404\u0405\u0406\u0407\u0408\u0409\u040A\u040B\u040C\xAD\u040E\u040F\u0410\u0411\u0412\u0413\u0414\u0415\u0416\u0417\u0418\u0419\u041A\u041B\u041C\u041D\u041E\u041F\u0420\u0421\u0422\u0423\u0424\u0425\u0426\u0427\u0428\u0429\u042A\u042B\u042C\u042D\u042E\u042F\u0430\u0431\u0432\u0433\u0434\u0435\u0436\u0437\u0438\u0439\u043A\u043B\u043C\u043D\u043E\u043F\u0440\u0441\u0442\u0443\u0444\u0445\u0446\u0447\u0448\u0449\u044A\u044B\u044C\u044D\u044E\u044F\u2116\u0451\u0452\u0491\u0454\u0455\u0456\u0457\u0458\u0459\u045A\u045B\u045C\xA7\u045E\u045F"
},
"ibm1124": "cp1124",
"csibm1124": "cp1124",
"cp1125": {
"type": "_sbcs",
"chars": "\u0410\u0411\u0412\u0413\u0414\u0415\u0416\u0417\u0418\u0419\u041A\u041B\u041C\u041D\u041E\u041F\u0420\u0421\u0422\u0423\u0424\u0425\u0426\u0427\u0428\u0429\u042A\u042B\u042C\u042D\u042E\u042F\u0430\u0431\u0432\u0433\u0434\u0435\u0436\u0437\u0438\u0439\u043A\u043B\u043C\u043D\u043E\u043F\u2591\u2592\u2593\u2502\u2524\u2561\u2562\u2556\u2555\u2563\u2551\u2557\u255D\u255C\u255B\u2510\u2514\u2534\u252C\u251C\u2500\u253C\u255E\u255F\u255A\u2554\u2569\u2566\u2560\u2550\u256C\u2567\u2568\u2564\u2565\u2559\u2558\u2552\u2553\u256B\u256A\u2518\u250C\u2588\u2584\u258C\u2590\u2580\u0440\u0441\u0442\u0443\u0444\u0445\u0446\u0447\u0448\u0449\u044A\u044B\u044C\u044D\u044E\u044F\u0401\u0451\u0490\u0491\u0404\u0454\u0406\u0456\u0407\u0457\xB7\u221A\u2116\xA4\u25A0\xA0"
},
"ibm1125": "cp1125",
"csibm1125": "cp1125",
"cp1129": {
"type": "_sbcs",
"chars": "\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8A\x8B\x8C\x8D\x8E\x8F\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9A\x9B\x9C\x9D\x9E\x9F\xA0\xA1\xA2\xA3\xA4\xA5\xA6\xA7\u0153\xA9\xAA\xAB\xAC\xAD\xAE\xAF\xB0\xB1\xB2\xB3\u0178\xB5\xB6\xB7\u0152\xB9\xBA\xBB\xBC\xBD\xBE\xBF\xC0\xC1\xC2\u0102\xC4\xC5\xC6\xC7\xC8\xC9\xCA\xCB\u0300\xCD\xCE\xCF\u0110\xD1\u0309\xD3\xD4\u01A0\xD6\xD7\xD8\xD9\xDA\xDB\xDC\u01AF\u0303\xDF\xE0\xE1\xE2\u0103\xE4\xE5\xE6\xE7\xE8\xE9\xEA\xEB\u0301\xED\xEE\xEF\u0111\xF1\u0323\xF3\xF4\u01A1\xF6\xF7\xF8\xF9\xFA\xFB\xFC\u01B0\u20AB\xFF"
},
"ibm1129": "cp1129",
"csibm1129": "cp1129",
"cp1133": {
"type": "_sbcs",
"chars": "\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8A\x8B\x8C\x8D\x8E\x8F\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9A\x9B\x9C\x9D\x9E\x9F\xA0\u0E81\u0E82\u0E84\u0E87\u0E88\u0EAA\u0E8A\u0E8D\u0E94\u0E95\u0E96\u0E97\u0E99\u0E9A\u0E9B\u0E9C\u0E9D\u0E9E\u0E9F\u0EA1\u0EA2\u0EA3\u0EA5\u0EA7\u0EAB\u0EAD\u0EAE\uFFFD\uFFFD\uFFFD\u0EAF\u0EB0\u0EB2\u0EB3\u0EB4\u0EB5\u0EB6\u0EB7\u0EB8\u0EB9\u0EBC\u0EB1\u0EBB\u0EBD\uFFFD\uFFFD\uFFFD\u0EC0\u0EC1\u0EC2\u0EC3\u0EC4\u0EC8\u0EC9\u0ECA\u0ECB\u0ECC\u0ECD\u0EC6\uFFFD\u0EDC\u0EDD\u20AD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u0ED0\u0ED1\u0ED2\u0ED3\u0ED4\u0ED5\u0ED6\u0ED7\u0ED8\u0ED9\uFFFD\uFFFD\xA2\xAC\xA6\uFFFD"
},
"ibm1133": "cp1133",
"csibm1133": "cp1133",
"cp1161": {
"type": "_sbcs",
"chars": "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u0E48\u0E01\u0E02\u0E03\u0E04\u0E05\u0E06\u0E07\u0E08\u0E09\u0E0A\u0E0B\u0E0C\u0E0D\u0E0E\u0E0F\u0E10\u0E11\u0E12\u0E13\u0E14\u0E15\u0E16\u0E17\u0E18\u0E19\u0E1A\u0E1B\u0E1C\u0E1D\u0E1E\u0E1F\u0E20\u0E21\u0E22\u0E23\u0E24\u0E25\u0E26\u0E27\u0E28\u0E29\u0E2A\u0E2B\u0E2C\u0E2D\u0E2E\u0E2F\u0E30\u0E31\u0E32\u0E33\u0E34\u0E35\u0E36\u0E37\u0E38\u0E39\u0E3A\u0E49\u0E4A\u0E4B\u20AC\u0E3F\u0E40\u0E41\u0E42\u0E43\u0E44\u0E45\u0E46\u0E47\u0E48\u0E49\u0E4A\u0E4B\u0E4C\u0E4D\u0E4E\u0E4F\u0E50\u0E51\u0E52\u0E53\u0E54\u0E55\u0E56\u0E57\u0E58\u0E59\u0E5A\u0E5B\xA2\xAC\xA6\xA0"
},
"ibm1161": "cp1161",
"csibm1161": "cp1161",
"cp1162": {
"type": "_sbcs",
"chars": "\u20AC\x81\x82\x83\x84\u2026\x86\x87\x88\x89\x8A\x8B\x8C\x8D\x8E\x8F\x90\u2018\u2019\u201C\u201D\u2022\u2013\u2014\x98\x99\x9A\x9B\x9C\x9D\x9E\x9F\xA0\u0E01\u0E02\u0E03\u0E04\u0E05\u0E06\u0E07\u0E08\u0E09\u0E0A\u0E0B\u0E0C\u0E0D\u0E0E\u0E0F\u0E10\u0E11\u0E12\u0E13\u0E14\u0E15\u0E16\u0E17\u0E18\u0E19\u0E1A\u0E1B\u0E1C\u0E1D\u0E1E\u0E1F\u0E20\u0E21\u0E22\u0E23\u0E24\u0E25\u0E26\u0E27\u0E28\u0E29\u0E2A\u0E2B\u0E2C\u0E2D\u0E2E\u0E2F\u0E30\u0E31\u0E32\u0E33\u0E34\u0E35\u0E36\u0E37\u0E38\u0E39\u0E3A\uFFFD\uFFFD\uFFFD\uFFFD\u0E3F\u0E40\u0E41\u0E42\u0E43\u0E44\u0E45\u0E46\u0E47\u0E48\u0E49\u0E4A\u0E4B\u0E4C\u0E4D\u0E4E\u0E4F\u0E50\u0E51\u0E52\u0E53\u0E54\u0E55\u0E56\u0E57\u0E58\u0E59\u0E5A\u0E5B\uFFFD\uFFFD\uFFFD\uFFFD"
},
"ibm1162": "cp1162",
"csibm1162": "cp1162",
"cp1163": {
"type": "_sbcs",
"chars": "\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8A\x8B\x8C\x8D\x8E\x8F\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9A\x9B\x9C\x9D\x9E\x9F\xA0\xA1\xA2\xA3\u20AC\xA5\xA6\xA7\u0153\xA9\xAA\xAB\xAC\xAD\xAE\xAF\xB0\xB1\xB2\xB3\u0178\xB5\xB6\xB7\u0152\xB9\xBA\xBB\xBC\xBD\xBE\xBF\xC0\xC1\xC2\u0102\xC4\xC5\xC6\xC7\xC8\xC9\xCA\xCB\u0300\xCD\xCE\xCF\u0110\xD1\u0309\xD3\xD4\u01A0\xD6\xD7\xD8\xD9\xDA\xDB\xDC\u01AF\u0303\xDF\xE0\xE1\xE2\u0103\xE4\xE5\xE6\xE7\xE8\xE9\xEA\xEB\u0301\xED\xEE\xEF\u0111\xF1\u0323\xF3\xF4\u01A1\xF6\xF7\xF8\xF9\xFA\xFB\xFC\u01B0\u20AB\xFF"
},
"ibm1163": "cp1163",
"csibm1163": "cp1163",
"maccroatian": {
"type": "_sbcs",
"chars": "\xC4\xC5\xC7\xC9\xD1\xD6\xDC\xE1\xE0\xE2\xE4\xE3\xE5\xE7\xE9\xE8\xEA\xEB\xED\xEC\xEE\xEF\xF1\xF3\xF2\xF4\xF6\xF5\xFA\xF9\xFB\xFC\u2020\xB0\xA2\xA3\xA7\u2022\xB6\xDF\xAE\u0160\u2122\xB4\xA8\u2260\u017D\xD8\u221E\xB1\u2264\u2265\u2206\xB5\u2202\u2211\u220F\u0161\u222B\xAA\xBA\u2126\u017E\xF8\xBF\xA1\xAC\u221A\u0192\u2248\u0106\xAB\u010C\u2026\xA0\xC0\xC3\xD5\u0152\u0153\u0110\u2014\u201C\u201D\u2018\u2019\xF7\u25CA\uFFFD\xA9\u2044\xA4\u2039\u203A\xC6\xBB\u2013\xB7\u201A\u201E\u2030\xC2\u0107\xC1\u010D\xC8\xCD\xCE\xCF\xCC\xD3\xD4\u0111\xD2\xDA\xDB\xD9\u0131\u02C6\u02DC\xAF\u03C0\xCB\u02DA\xB8\xCA\xE6\u02C7"
},
"maccyrillic": {
"type": "_sbcs",
"chars": "\u0410\u0411\u0412\u0413\u0414\u0415\u0416\u0417\u0418\u0419\u041A\u041B\u041C\u041D\u041E\u041F\u0420\u0421\u0422\u0423\u0424\u0425\u0426\u0427\u0428\u0429\u042A\u042B\u042C\u042D\u042E\u042F\u2020\xB0\xA2\xA3\xA7\u2022\xB6\u0406\xAE\xA9\u2122\u0402\u0452\u2260\u0403\u0453\u221E\xB1\u2264\u2265\u0456\xB5\u2202\u0408\u0404\u0454\u0407\u0457\u0409\u0459\u040A\u045A\u0458\u0405\xAC\u221A\u0192\u2248\u2206\xAB\xBB\u2026\xA0\u040B\u045B\u040C\u045C\u0455\u2013\u2014\u201C\u201D\u2018\u2019\xF7\u201E\u040E\u045E\u040F\u045F\u2116\u0401\u0451\u044F\u0430\u0431\u0432\u0433\u0434\u0435\u0436\u0437\u0438\u0439\u043A\u043B\u043C\u043D\u043E\u043F\u0440\u0441\u0442\u0443\u0444\u0445\u0446\u0447\u0448\u0449\u044A\u044B\u044C\u044D\u044E\xA4"
},
"macgreek": {
"type": "_sbcs",
"chars": "\xC4\xB9\xB2\xC9\xB3\xD6\xDC\u0385\xE0\xE2\xE4\u0384\xA8\xE7\xE9\xE8\xEA\xEB\xA3\u2122\xEE\xEF\u2022\xBD\u2030\xF4\xF6\xA6\xAD\xF9\xFB\xFC\u2020\u0393\u0394\u0398\u039B\u039E\u03A0\xDF\xAE\xA9\u03A3\u03AA\xA7\u2260\xB0\u0387\u0391\xB1\u2264\u2265\xA5\u0392\u0395\u0396\u0397\u0399\u039A\u039C\u03A6\u03AB\u03A8\u03A9\u03AC\u039D\xAC\u039F\u03A1\u2248\u03A4\xAB\xBB\u2026\xA0\u03A5\u03A7\u0386\u0388\u0153\u2013\u2015\u201C\u201D\u2018\u2019\xF7\u0389\u038A\u038C\u038E\u03AD\u03AE\u03AF\u03CC\u038F\u03CD\u03B1\u03B2\u03C8\u03B4\u03B5\u03C6\u03B3\u03B7\u03B9\u03BE\u03BA\u03BB\u03BC\u03BD\u03BF\u03C0\u03CE\u03C1\u03C3\u03C4\u03B8\u03C9\u03C2\u03C7\u03C5\u03B6\u03CA\u03CB\u0390\u03B0\uFFFD"
},
"maciceland": {
"type": "_sbcs",
"chars": "\xC4\xC5\xC7\xC9\xD1\xD6\xDC\xE1\xE0\xE2\xE4\xE3\xE5\xE7\xE9\xE8\xEA\xEB\xED\xEC\xEE\xEF\xF1\xF3\xF2\xF4\xF6\xF5\xFA\xF9\xFB\xFC\xDD\xB0\xA2\xA3\xA7\u2022\xB6\xDF\xAE\xA9\u2122\xB4\xA8\u2260\xC6\xD8\u221E\xB1\u2264\u2265\xA5\xB5\u2202\u2211\u220F\u03C0\u222B\xAA\xBA\u2126\xE6\xF8\xBF\xA1\xAC\u221A\u0192\u2248\u2206\xAB\xBB\u2026\xA0\xC0\xC3\xD5\u0152\u0153\u2013\u2014\u201C\u201D\u2018\u2019\xF7\u25CA\xFF\u0178\u2044\xA4\xD0\xF0\xDE\xFE\xFD\xB7\u201A\u201E\u2030\xC2\xCA\xC1\xCB\xC8\xCD\xCE\xCF\xCC\xD3\xD4\uFFFD\xD2\xDA\xDB\xD9\u0131\u02C6\u02DC\xAF\u02D8\u02D9\u02DA\xB8\u02DD\u02DB\u02C7"
},
"macroman": {
"type": "_sbcs",
"chars": "\xC4\xC5\xC7\xC9\xD1\xD6\xDC\xE1\xE0\xE2\xE4\xE3\xE5\xE7\xE9\xE8\xEA\xEB\xED\xEC\xEE\xEF\xF1\xF3\xF2\xF4\xF6\xF5\xFA\xF9\xFB\xFC\u2020\xB0\xA2\xA3\xA7\u2022\xB6\xDF\xAE\xA9\u2122\xB4\xA8\u2260\xC6\xD8\u221E\xB1\u2264\u2265\xA5\xB5\u2202\u2211\u220F\u03C0\u222B\xAA\xBA\u2126\xE6\xF8\xBF\xA1\xAC\u221A\u0192\u2248\u2206\xAB\xBB\u2026\xA0\xC0\xC3\xD5\u0152\u0153\u2013\u2014\u201C\u201D\u2018\u2019\xF7\u25CA\xFF\u0178\u2044\xA4\u2039\u203A\uFB01\uFB02\u2021\xB7\u201A\u201E\u2030\xC2\xCA\xC1\xCB\xC8\xCD\xCE\xCF\xCC\xD3\xD4\uFFFD\xD2\xDA\xDB\xD9\u0131\u02C6\u02DC\xAF\u02D8\u02D9\u02DA\xB8\u02DD\u02DB\u02C7"
},
"macromania": {
"type": "_sbcs",
"chars": "\xC4\xC5\xC7\xC9\xD1\xD6\xDC\xE1\xE0\xE2\xE4\xE3\xE5\xE7\xE9\xE8\xEA\xEB\xED\xEC\xEE\xEF\xF1\xF3\xF2\xF4\xF6\xF5\xFA\xF9\xFB\xFC\u2020\xB0\xA2\xA3\xA7\u2022\xB6\xDF\xAE\xA9\u2122\xB4\xA8\u2260\u0102\u015E\u221E\xB1\u2264\u2265\xA5\xB5\u2202\u2211\u220F\u03C0\u222B\xAA\xBA\u2126\u0103\u015F\xBF\xA1\xAC\u221A\u0192\u2248\u2206\xAB\xBB\u2026\xA0\xC0\xC3\xD5\u0152\u0153\u2013\u2014\u201C\u201D\u2018\u2019\xF7\u25CA\xFF\u0178\u2044\xA4\u2039\u203A\u0162\u0163\u2021\xB7\u201A\u201E\u2030\xC2\xCA\xC1\xCB\xC8\xCD\xCE\xCF\xCC\xD3\xD4\uFFFD\xD2\xDA\xDB\xD9\u0131\u02C6\u02DC\xAF\u02D8\u02D9\u02DA\xB8\u02DD\u02DB\u02C7"
},
"macthai": {
"type": "_sbcs",
"chars": "\xAB\xBB\u2026\uF88C\uF88F\uF892\uF895\uF898\uF88B\uF88E\uF891\uF894\uF897\u201C\u201D\uF899\uFFFD\u2022\uF884\uF889\uF885\uF886\uF887\uF888\uF88A\uF88D\uF890\uF893\uF896\u2018\u2019\uFFFD\xA0\u0E01\u0E02\u0E03\u0E04\u0E05\u0E06\u0E07\u0E08\u0E09\u0E0A\u0E0B\u0E0C\u0E0D\u0E0E\u0E0F\u0E10\u0E11\u0E12\u0E13\u0E14\u0E15\u0E16\u0E17\u0E18\u0E19\u0E1A\u0E1B\u0E1C\u0E1D\u0E1E\u0E1F\u0E20\u0E21\u0E22\u0E23\u0E24\u0E25\u0E26\u0E27\u0E28\u0E29\u0E2A\u0E2B\u0E2C\u0E2D\u0E2E\u0E2F\u0E30\u0E31\u0E32\u0E33\u0E34\u0E35\u0E36\u0E37\u0E38\u0E39\u0E3A\uFEFF\u200B\u2013\u2014\u0E3F\u0E40\u0E41\u0E42\u0E43\u0E44\u0E45\u0E46\u0E47\u0E48\u0E49\u0E4A\u0E4B\u0E4C\u0E4D\u2122\u0E4F\u0E50\u0E51\u0E52\u0E53\u0E54\u0E55\u0E56\u0E57\u0E58\u0E59\xAE\xA9\uFFFD\uFFFD\uFFFD\uFFFD"
},
"macturkish": {
"type": "_sbcs",
"chars": "\xC4\xC5\xC7\xC9\xD1\xD6\xDC\xE1\xE0\xE2\xE4\xE3\xE5\xE7\xE9\xE8\xEA\xEB\xED\xEC\xEE\xEF\xF1\xF3\xF2\xF4\xF6\xF5\xFA\xF9\xFB\xFC\u2020\xB0\xA2\xA3\xA7\u2022\xB6\xDF\xAE\xA9\u2122\xB4\xA8\u2260\xC6\xD8\u221E\xB1\u2264\u2265\xA5\xB5\u2202\u2211\u220F\u03C0\u222B\xAA\xBA\u2126\xE6\xF8\xBF\xA1\xAC\u221A\u0192\u2248\u2206\xAB\xBB\u2026\xA0\xC0\xC3\xD5\u0152\u0153\u2013\u2014\u201C\u201D\u2018\u2019\xF7\u25CA\xFF\u0178\u011E\u011F\u0130\u0131\u015E\u015F\u2021\xB7\u201A\u201E\u2030\xC2\xCA\xC1\xCB\xC8\xCD\xCE\xCF\xCC\xD3\xD4\uFFFD\xD2\xDA\xDB\xD9\uFFFD\u02C6\u02DC\xAF\u02D8\u02D9\u02DA\xB8\u02DD\u02DB\u02C7"
},
"macukraine": {
"type": "_sbcs",
"chars": "\u0410\u0411\u0412\u0413\u0414\u0415\u0416\u0417\u0418\u0419\u041A\u041B\u041C\u041D\u041E\u041F\u0420\u0421\u0422\u0423\u0424\u0425\u0426\u0427\u0428\u0429\u042A\u042B\u042C\u042D\u042E\u042F\u2020\xB0\u0490\xA3\xA7\u2022\xB6\u0406\xAE\xA9\u2122\u0402\u0452\u2260\u0403\u0453\u221E\xB1\u2264\u2265\u0456\xB5\u0491\u0408\u0404\u0454\u0407\u0457\u0409\u0459\u040A\u045A\u0458\u0405\xAC\u221A\u0192\u2248\u2206\xAB\xBB\u2026\xA0\u040B\u045B\u040C\u045C\u0455\u2013\u2014\u201C\u201D\u2018\u2019\xF7\u201E\u040E\u045E\u040F\u045F\u2116\u0401\u0451\u044F\u0430\u0431\u0432\u0433\u0434\u0435\u0436\u0437\u0438\u0439\u043A\u043B\u043C\u043D\u043E\u043F\u0440\u0441\u0442\u0443\u0444\u0445\u0446\u0447\u0448\u0449\u044A\u044B\u044C\u044D\u044E\xA4"
},
"koi8r": {
"type": "_sbcs",
"chars": "\u2500\u2502\u250C\u2510\u2514\u2518\u251C\u2524\u252C\u2534\u253C\u2580\u2584\u2588\u258C\u2590\u2591\u2592\u2593\u2320\u25A0\u2219\u221A\u2248\u2264\u2265\xA0\u2321\xB0\xB2\xB7\xF7\u2550\u2551\u2552\u0451\u2553\u2554\u2555\u2556\u2557\u2558\u2559\u255A\u255B\u255C\u255D\u255E\u255F\u2560\u2561\u0401\u2562\u2563\u2564\u2565\u2566\u2567\u2568\u2569\u256A\u256B\u256C\xA9\u044E\u0430\u0431\u0446\u0434\u0435\u0444\u0433\u0445\u0438\u0439\u043A\u043B\u043C\u043D\u043E\u043F\u044F\u0440\u0441\u0442\u0443\u0436\u0432\u044C\u044B\u0437\u0448\u044D\u0449\u0447\u044A\u042E\u0410\u0411\u0426\u0414\u0415\u0424\u0413\u0425\u0418\u0419\u041A\u041B\u041C\u041D\u041E\u041F\u042F\u0420\u0421\u0422\u0423\u0416\u0412\u042C\u042B\u0417\u0428\u042D\u0429\u0427\u042A"
},
"koi8u": {
"type": "_sbcs",
"chars": "\u2500\u2502\u250C\u2510\u2514\u2518\u251C\u2524\u252C\u2534\u253C\u2580\u2584\u2588\u258C\u2590\u2591\u2592\u2593\u2320\u25A0\u2219\u221A\u2248\u2264\u2265\xA0\u2321\xB0\xB2\xB7\xF7\u2550\u2551\u2552\u0451\u0454\u2554\u0456\u0457\u2557\u2558\u2559\u255A\u255B\u0491\u255D\u255E\u255F\u2560\u2561\u0401\u0404\u2563\u0406\u0407\u2566\u2567\u2568\u2569\u256A\u0490\u256C\xA9\u044E\u0430\u0431\u0446\u0434\u0435\u0444\u0433\u0445\u0438\u0439\u043A\u043B\u043C\u043D\u043E\u043F\u044F\u0440\u0441\u0442\u0443\u0436\u0432\u044C\u044B\u0437\u0448\u044D\u0449\u0447\u044A\u042E\u0410\u0411\u0426\u0414\u0415\u0424\u0413\u0425\u0418\u0419\u041A\u041B\u041C\u041D\u041E\u041F\u042F\u0420\u0421\u0422\u0423\u0416\u0412\u042C\u042B\u0417\u0428\u042D\u0429\u0427\u042A"
},
"koi8ru": {
"type": "_sbcs",
"chars": "\u2500\u2502\u250C\u2510\u2514\u2518\u251C\u2524\u252C\u2534\u253C\u2580\u2584\u2588\u258C\u2590\u2591\u2592\u2593\u2320\u25A0\u2219\u221A\u2248\u2264\u2265\xA0\u2321\xB0\xB2\xB7\xF7\u2550\u2551\u2552\u0451\u0454\u2554\u0456\u0457\u2557\u2558\u2559\u255A\u255B\u0491\u045E\u255E\u255F\u2560\u2561\u0401\u0404\u2563\u0406\u0407\u2566\u2567\u2568\u2569\u256A\u0490\u040E\xA9\u044E\u0430\u0431\u0446\u0434\u0435\u0444\u0433\u0445\u0438\u0439\u043A\u043B\u043C\u043D\u043E\u043F\u044F\u0440\u0441\u0442\u0443\u0436\u0432\u044C\u044B\u0437\u0448\u044D\u0449\u0447\u044A\u042E\u0410\u0411\u0426\u0414\u0415\u0424\u0413\u0425\u0418\u0419\u041A\u041B\u041C\u041D\u041E\u041F\u042F\u0420\u0421\u0422\u0423\u0416\u0412\u042C\u042B\u0417\u0428\u042D\u0429\u0427\u042A"
},
"koi8t": {
"type": "_sbcs",
"chars": "\u049B\u0493\u201A\u0492\u201E\u2026\u2020\u2021\uFFFD\u2030\u04B3\u2039\u04B2\u04B7\u04B6\uFFFD\u049A\u2018\u2019\u201C\u201D\u2022\u2013\u2014\uFFFD\u2122\uFFFD\u203A\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u04EF\u04EE\u0451\xA4\u04E3\xA6\xA7\uFFFD\uFFFD\uFFFD\xAB\xAC\xAD\xAE\uFFFD\xB0\xB1\xB2\u0401\uFFFD\u04E2\xB6\xB7\uFFFD\u2116\uFFFD\xBB\uFFFD\uFFFD\uFFFD\xA9\u044E\u0430\u0431\u0446\u0434\u0435\u0444\u0433\u0445\u0438\u0439\u043A\u043B\u043C\u043D\u043E\u043F\u044F\u0440\u0441\u0442\u0443\u0436\u0432\u044C\u044B\u0437\u0448\u044D\u0449\u0447\u044A\u042E\u0410\u0411\u0426\u0414\u0415\u0424\u0413\u0425\u0418\u0419\u041A\u041B\u041C\u041D\u041E\u041F\u042F\u0420\u0421\u0422\u0423\u0416\u0412\u042C\u042B\u0417\u0428\u042D\u0429\u0427\u042A"
},
"armscii8": {
"type": "_sbcs",
"chars": "\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8A\x8B\x8C\x8D\x8E\x8F\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9A\x9B\x9C\x9D\x9E\x9F\xA0\uFFFD\u0587\u0589)(\xBB\xAB\u2014.\u055D,-\u058A\u2026\u055C\u055B\u055E\u0531\u0561\u0532\u0562\u0533\u0563\u0534\u0564\u0535\u0565\u0536\u0566\u0537\u0567\u0538\u0568\u0539\u0569\u053A\u056A\u053B\u056B\u053C\u056C\u053D\u056D\u053E\u056E\u053F\u056F\u0540\u0570\u0541\u0571\u0542\u0572\u0543\u0573\u0544\u0574\u0545\u0575\u0546\u0576\u0547\u0577\u0548\u0578\u0549\u0579\u054A\u057A\u054B\u057B\u054C\u057C\u054D\u057D\u054E\u057E\u054F\u057F\u0550\u0580\u0551\u0581\u0552\u0582\u0553\u0583\u0554\u0584\u0555\u0585\u0556\u0586\u055A\uFFFD"
},
"rk1048": {
"type": "_sbcs",
"chars": "\u0402\u0403\u201A\u0453\u201E\u2026\u2020\u2021\u20AC\u2030\u0409\u2039\u040A\u049A\u04BA\u040F\u0452\u2018\u2019\u201C\u201D\u2022\u2013\u2014\uFFFD\u2122\u0459\u203A\u045A\u049B\u04BB\u045F\xA0\u04B0\u04B1\u04D8\xA4\u04E8\xA6\xA7\u0401\xA9\u0492\xAB\xAC\xAD\xAE\u04AE\xB0\xB1\u0406\u0456\u04E9\xB5\xB6\xB7\u0451\u2116\u0493\xBB\u04D9\u04A2\u04A3\u04AF\u0410\u0411\u0412\u0413\u0414\u0415\u0416\u0417\u0418\u0419\u041A\u041B\u041C\u041D\u041E\u041F\u0420\u0421\u0422\u0423\u0424\u0425\u0426\u0427\u0428\u0429\u042A\u042B\u042C\u042D\u042E\u042F\u0430\u0431\u0432\u0433\u0434\u0435\u0436\u0437\u0438\u0439\u043A\u043B\u043C\u043D\u043E\u043F\u0440\u0441\u0442\u0443\u0444\u0445\u0446\u0447\u0448\u0449\u044A\u044B\u044C\u044D\u044E\u044F"
},
"tcvn": {
"type": "_sbcs",
"chars": "\0\xDA\u1EE4\u1EEA\u1EEC\u1EEE\x07\b \n\v\f\r\u1EE8\u1EF0\u1EF2\u1EF6\u1EF8\xDD\u1EF4\x1B !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\x7F\xC0\u1EA2\xC3\xC1\u1EA0\u1EB6\u1EAC\xC8\u1EBA\u1EBC\xC9\u1EB8\u1EC6\xCC\u1EC8\u0128\xCD\u1ECA\xD2\u1ECE\xD5\xD3\u1ECC\u1ED8\u1EDC\u1EDE\u1EE0\u1EDA\u1EE2\xD9\u1EE6\u0168\xA0\u0102\xC2\xCA\xD4\u01A0\u01AF\u0110\u0103\xE2\xEA\xF4\u01A1\u01B0\u0111\u1EB0\u0300\u0309\u0303\u0301\u0323\xE0\u1EA3\xE3\xE1\u1EA1\u1EB2\u1EB1\u1EB3\u1EB5\u1EAF\u1EB4\u1EAE\u1EA6\u1EA8\u1EAA\u1EA4\u1EC0\u1EB7\u1EA7\u1EA9\u1EAB\u1EA5\u1EAD\xE8\u1EC2\u1EBB\u1EBD\xE9\u1EB9\u1EC1\u1EC3\u1EC5\u1EBF\u1EC7\xEC\u1EC9\u1EC4\u1EBE\u1ED2\u0129\xED\u1ECB\xF2\u1ED4\u1ECF\xF5\xF3\u1ECD\u1ED3\u1ED5\u1ED7\u1ED1\u1ED9\u1EDD\u1EDF\u1EE1\u1EDB\u1EE3\xF9\u1ED6\u1EE7\u0169\xFA\u1EE5\u1EEB\u1EED\u1EEF\u1EE9\u1EF1\u1EF3\u1EF7\u1EF9\xFD\u1EF5\u1ED0"
},
"georgianacademy": {
"type": "_sbcs",
"chars": "\x80\x81\u201A\u0192\u201E\u2026\u2020\u2021\u02C6\u2030\u0160\u2039\u0152\x8D\x8E\x8F\x90\u2018\u2019\u201C\u201D\u2022\u2013\u2014\u02DC\u2122\u0161\u203A\u0153\x9D\x9E\u0178\xA0\xA1\xA2\xA3\xA4\xA5\xA6\xA7\xA8\xA9\xAA\xAB\xAC\xAD\xAE\xAF\xB0\xB1\xB2\xB3\xB4\xB5\xB6\xB7\xB8\xB9\xBA\xBB\xBC\xBD\xBE\xBF\u10D0\u10D1\u10D2\u10D3\u10D4\u10D5\u10D6\u10D7\u10D8\u10D9\u10DA\u10DB\u10DC\u10DD\u10DE\u10DF\u10E0\u10E1\u10E2\u10E3\u10E4\u10E5\u10E6\u10E7\u10E8\u10E9\u10EA\u10EB\u10EC\u10ED\u10EE\u10EF\u10F0\u10F1\u10F2\u10F3\u10F4\u10F5\u10F6\xE7\xE8\xE9\xEA\xEB\xEC\xED\xEE\xEF\xF0\xF1\xF2\xF3\xF4\xF5\xF6\xF7\xF8\xF9\xFA\xFB\xFC\xFD\xFE\xFF"
},
"georgianps": {
"type": "_sbcs",
"chars": "\x80\x81\u201A\u0192\u201E\u2026\u2020\u2021\u02C6\u2030\u0160\u2039\u0152\x8D\x8E\x8F\x90\u2018\u2019\u201C\u201D\u2022\u2013\u2014\u02DC\u2122\u0161\u203A\u0153\x9D\x9E\u0178\xA0\xA1\xA2\xA3\xA4\xA5\xA6\xA7\xA8\xA9\xAA\xAB\xAC\xAD\xAE\xAF\xB0\xB1\xB2\xB3\xB4\xB5\xB6\xB7\xB8\xB9\xBA\xBB\xBC\xBD\xBE\xBF\u10D0\u10D1\u10D2\u10D3\u10D4\u10D5\u10D6\u10F1\u10D7\u10D8\u10D9\u10DA\u10DB\u10DC\u10F2\u10DD\u10DE\u10DF\u10E0\u10E1\u10E2\u10F3\u10E3\u10E4\u10E5\u10E6\u10E7\u10E8\u10E9\u10EA\u10EB\u10EC\u10ED\u10EE\u10F4\u10EF\u10F0\u10F5\xE6\xE7\xE8\xE9\xEA\xEB\xEC\xED\xEE\xEF\xF0\xF1\xF2\xF3\xF4\xF5\xF6\xF7\xF8\xF9\xFA\xFB\xFC\xFD\xFE\xFF"
},
"pt154": {
"type": "_sbcs",
"chars": "\u0496\u0492\u04EE\u0493\u201E\u2026\u04B6\u04AE\u04B2\u04AF\u04A0\u04E2\u04A2\u049A\u04BA\u04B8\u0497\u2018\u2019\u201C\u201D\u2022\u2013\u2014\u04B3\u04B7\u04A1\u04E3\u04A3\u049B\u04BB\u04B9\xA0\u040E\u045E\u0408\u04E8\u0498\u04B0\xA7\u0401\xA9\u04D8\xAB\xAC\u04EF\xAE\u049C\xB0\u04B1\u0406\u0456\u0499\u04E9\xB6\xB7\u0451\u2116\u04D9\xBB\u0458\u04AA\u04AB\u049D\u0410\u0411\u0412\u0413\u0414\u0415\u0416\u0417\u0418\u0419\u041A\u041B\u041C\u041D\u041E\u041F\u0420\u0421\u0422\u0423\u0424\u0425\u0426\u0427\u0428\u0429\u042A\u042B\u042C\u042D\u042E\u042F\u0430\u0431\u0432\u0433\u0434\u0435\u0436\u0437\u0438\u0439\u043A\u043B\u043C\u043D\u043E\u043F\u0440\u0441\u0442\u0443\u0444\u0445\u0446\u0447\u0448\u0449\u044A\u044B\u044C\u044D\u044E\u044F"
},
"viscii": {
"type": "_sbcs",
"chars": "\0\u1EB2\u1EB4\u1EAA\x07\b \n\v\f\r\u1EF6\u1EF8\x1B\u1EF4 !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~\x7F\u1EA0\u1EAE\u1EB0\u1EB6\u1EA4\u1EA6\u1EA8\u1EAC\u1EBC\u1EB8\u1EBE\u1EC0\u1EC2\u1EC4\u1EC6\u1ED0\u1ED2\u1ED4\u1ED6\u1ED8\u1EE2\u1EDA\u1EDC\u1EDE\u1ECA\u1ECE\u1ECC\u1EC8\u1EE6\u0168\u1EE4\u1EF2\xD5\u1EAF\u1EB1\u1EB7\u1EA5\u1EA7\u1EA9\u1EAD\u1EBD\u1EB9\u1EBF\u1EC1\u1EC3\u1EC5\u1EC7\u1ED1\u1ED3\u1ED5\u1ED7\u1EE0\u01A0\u1ED9\u1EDD\u1EDF\u1ECB\u1EF0\u1EE8\u1EEA\u1EEC\u01A1\u1EDB\u01AF\xC0\xC1\xC2\xC3\u1EA2\u0102\u1EB3\u1EB5\xC8\xC9\xCA\u1EBA\xCC\xCD\u0128\u1EF3\u0110\u1EE9\xD2\xD3\xD4\u1EA1\u1EF7\u1EEB\u1EED\xD9\xDA\u1EF9\u1EF5\xDD\u1EE1\u01B0\xE0\xE1\xE2\xE3\u1EA3\u0103\u1EEF\u1EAB\xE8\xE9\xEA\u1EBB\xEC\xED\u0129\u1EC9\u0111\u1EF1\xF2\xF3\xF4\xF5\u1ECF\u1ECD\u1EE5\xF9\xFA\u0169\u1EE7\xFD\u1EE3\u1EEE"
},
"iso646cn": {
"type": "_sbcs",
"chars": "\0\x07\b \n\v\f\r\x1B !\"#\xA5%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}\u203E\x7F\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"
},
"iso646jp": {
"type": "_sbcs",
"chars": "\0\x07\b \n\v\f\r\x1B !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\xA5]^_`abcdefghijklmnopqrstuvwxyz{|}\u203E\x7F\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"
},
"hproman8": {
"type": "_sbcs",
"chars": "\x80\x81\x82\x83\x84\x85\x86\x87\x88\x89\x8A\x8B\x8C\x8D\x8E\x8F\x90\x91\x92\x93\x94\x95\x96\x97\x98\x99\x9A\x9B\x9C\x9D\x9E\x9F\xA0\xC0\xC2\xC8\xCA\xCB\xCE\xCF\xB4\u02CB\u02C6\xA8\u02DC\xD9\xDB\u20A4\xAF\xDD\xFD\xB0\xC7\xE7\xD1\xF1\xA1\xBF\xA4\xA3\xA5\xA7\u0192\xA2\xE2\xEA\xF4\xFB\xE1\xE9\xF3\xFA\xE0\xE8\xF2\xF9\xE4\xEB\xF6\xFC\xC5\xEE\xD8\xC6\xE5\xED\xF8\xE6\xC4\xEC\xD6\xDC\xC9\xEF\xDF\xD4\xC1\xC3\xE3\xD0\xF0\xCD\xCC\xD3\xD2\xD5\xF5\u0160\u0161\xDA\u0178\xFF\xDE\xFE\xB7\xB5\xB6\xBE\u2014\xBC\xBD\xAA\xBA\xAB\u25A0\xBB\xB1\uFFFD"
},
"macintosh": {
"type": "_sbcs",
"chars": "\xC4\xC5\xC7\xC9\xD1\xD6\xDC\xE1\xE0\xE2\xE4\xE3\xE5\xE7\xE9\xE8\xEA\xEB\xED\xEC\xEE\xEF\xF1\xF3\xF2\xF4\xF6\xF5\xFA\xF9\xFB\xFC\u2020\xB0\xA2\xA3\xA7\u2022\xB6\xDF\xAE\xA9\u2122\xB4\xA8\u2260\xC6\xD8\u221E\xB1\u2264\u2265\xA5\xB5\u2202\u2211\u220F\u03C0\u222B\xAA\xBA\u2126\xE6\xF8\xBF\xA1\xAC\u221A\u0192\u2248\u2206\xAB\xBB\u2026\xA0\xC0\xC3\xD5\u0152\u0153\u2013\u2014\u201C\u201D\u2018\u2019\xF7\u25CA\xFF\u0178\u2044\xA4\u2039\u203A\uFB01\uFB02\u2021\xB7\u201A\u201E\u2030\xC2\xCA\xC1\xCB\xC8\xCD\xCE\xCF\xCC\xD3\xD4\uFFFD\xD2\xDA\xDB\xD9\u0131\u02C6\u02DC\xAF\u02D8\u02D9\u02DA\xB8\u02DD\u02DB\u02C7"
},
"ascii": {
"type": "_sbcs",
"chars": "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD"
},
"tis620": {
"type": "_sbcs",
"chars": "\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\uFFFD\u0E01\u0E02\u0E03\u0E04\u0E05\u0E06\u0E07\u0E08\u0E09\u0E0A\u0E0B\u0E0C\u0E0D\u0E0E\u0E0F\u0E10\u0E11\u0E12\u0E13\u0E14\u0E15\u0E16\u0E17\u0E18\u0E19\u0E1A\u0E1B\u0E1C\u0E1D\u0E1E\u0E1F\u0E20\u0E21\u0E22\u0E23\u0E24\u0E25\u0E26\u0E27\u0E28\u0E29\u0E2A\u0E2B\u0E2C\u0E2D\u0E2E\u0E2F\u0E30\u0E31\u0E32\u0E33\u0E34\u0E35\u0E36\u0E37\u0E38\u0E39\u0E3A\uFFFD\uFFFD\uFFFD\uFFFD\u0E3F\u0E40\u0E41\u0E42\u0E43\u0E44\u0E45\u0E46\u0E47\u0E48\u0E49\u0E4A\u0E4B\u0E4C\u0E4D\u0E4E\u0E4F\u0E50\u0E51\u0E52\u0E53\u0E54\u0E55\u0E56\u0E57\u0E58\u0E59\u0E5A\u0E5B\uFFFD\uFFFD\uFFFD\uFFFD"
}
};
}
});
var require_dbcs_codec22 = __commonJS2({
"node_modules/body-parser/node_modules/iconv-lite/encodings/dbcs-codec.js"(exports2) {
"use strict";
var Buffer2 = require_safer2().Buffer;
exports2._dbcs = DBCSCodec;
var UNASSIGNED = -1;
var GB18030_CODE = -2;
var SEQ_START = -10;
var NODE_START = -1e3;
var UNASSIGNED_NODE = new Array(256);
var DEF_CHAR = -1;
for (i = 0; i < 256; i++)
UNASSIGNED_NODE[i] = UNASSIGNED;
var i;
function DBCSCodec(codecOptions, iconv2) {
this.encodingName = codecOptions.encodingName;
if (!codecOptions)
throw new Error("DBCS codec is called without the data.");
if (!codecOptions.table)
throw new Error("Encoding '" + this.encodingName + "' has no data.");
var mappingTable = codecOptions.table();
this.decodeTables = [];
this.decodeTables[0] = UNASSIGNED_NODE.slice(0);
this.decodeTableSeq = [];
for (var i2 = 0; i2 < mappingTable.length; i2++)
this._addDecodeChunk(mappingTable[i2]);
if (typeof codecOptions.gb18030 === "function") {
this.gb18030 = codecOptions.gb18030();
var commonThirdByteNodeIdx = this.decodeTables.length;
this.decodeTables.push(UNASSIGNED_NODE.slice(0));
var commonFourthByteNodeIdx = this.decodeTables.length;
this.decodeTables.push(UNASSIGNED_NODE.slice(0));
var firstByteNode = this.decodeTables[0];
for (var i2 = 129; i2 <= 254; i2++) {
var secondByteNode = this.decodeTables[NODE_START - firstByteNode[i2]];
for (var j = 48; j <= 57; j++) {
if (secondByteNode[j] === UNASSIGNED) {
secondByteNode[j] = NODE_START - commonThirdByteNodeIdx;
} else if (secondByteNode[j] > NODE_START) {
throw new Error("gb18030 decode tables conflict at byte 2");
}
var thirdByteNode = this.decodeTables[NODE_START - secondByteNode[j]];
for (var k = 129; k <= 254; k++) {
if (thirdByteNode[k] === UNASSIGNED) {
thirdByteNode[k] = NODE_START - commonFourthByteNodeIdx;
} else if (thirdByteNode[k] === NODE_START - commonFourthByteNodeIdx) {
continue;
} else if (thirdByteNode[k] > NODE_START) {
throw new Error("gb18030 decode tables conflict at byte 3");
}
var fourthByteNode = this.decodeTables[NODE_START - thirdByteNode[k]];
for (var l = 48; l <= 57; l++) {
if (fourthByteNode[l] === UNASSIGNED)
fourthByteNode[l] = GB18030_CODE;
}
}
}
}
}
this.defaultCharUnicode = iconv2.defaultCharUnicode;
this.encodeTable = [];
this.encodeTableSeq = [];
var skipEncodeChars = {};
if (codecOptions.encodeSkipVals)
for (var i2 = 0; i2 < codecOptions.encodeSkipVals.length; i2++) {
var val2 = codecOptions.encodeSkipVals[i2];
if (typeof val2 === "number")
skipEncodeChars[val2] = true;
else
for (var j = val2.from; j <= val2.to; j++)
skipEncodeChars[j] = true;
}
this._fillEncodeTable(0, 0, skipEncodeChars);
if (codecOptions.encodeAdd) {
for (var uChar in codecOptions.encodeAdd)
if (Object.prototype.hasOwnProperty.call(codecOptions.encodeAdd, uChar))
this._setEncodeChar(uChar.charCodeAt(0), codecOptions.encodeAdd[uChar]);
}
this.defCharSB = this.encodeTable[0][iconv2.defaultCharSingleByte.charCodeAt(0)];
if (this.defCharSB === UNASSIGNED) this.defCharSB = this.encodeTable[0]["?"];
if (this.defCharSB === UNASSIGNED) this.defCharSB = "?".charCodeAt(0);
}
DBCSCodec.prototype.encoder = DBCSEncoder;
DBCSCodec.prototype.decoder = DBCSDecoder;
DBCSCodec.prototype._getDecodeTrieNode = function(addr) {
var bytes = [];
for (; addr > 0; addr >>>= 8)
bytes.push(addr & 255);
if (bytes.length == 0)
bytes.push(0);
var node = this.decodeTables[0];
for (var i2 = bytes.length - 1; i2 > 0; i2--) {
var val2 = node[bytes[i2]];
if (val2 == UNASSIGNED) {
node[bytes[i2]] = NODE_START - this.decodeTables.length;
this.decodeTables.push(node = UNASSIGNED_NODE.slice(0));
} else if (val2 <= NODE_START) {
node = this.decodeTables[NODE_START - val2];
} else
throw new Error("Overwrite byte in " + this.encodingName + ", addr: " + addr.toString(16));
}
return node;
};
DBCSCodec.prototype._addDecodeChunk = function(chunk) {
var curAddr = parseInt(chunk[0], 16);
var writeTable = this._getDecodeTrieNode(curAddr);
curAddr = curAddr & 255;
for (var k = 1; k < chunk.length; k++) {
var part = chunk[k];
if (typeof part === "string") {
for (var l = 0; l < part.length; ) {
var code = part.charCodeAt(l++);
if (55296 <= code && code < 56320) {
var codeTrail = part.charCodeAt(l++);
if (56320 <= codeTrail && codeTrail < 57344)
writeTable[curAddr++] = 65536 + (code - 55296) * 1024 + (codeTrail - 56320);
else
throw new Error("Incorrect surrogate pair in " + this.encodingName + " at chunk " + chunk[0]);
} else if (4080 < code && code <= 4095) {
var len = 4095 - code + 2;
var seq = [];
for (var m = 0; m < len; m++)
seq.push(part.charCodeAt(l++));
writeTable[curAddr++] = SEQ_START - this.decodeTableSeq.length;
this.decodeTableSeq.push(seq);
} else
writeTable[curAddr++] = code;
}
} else if (typeof part === "number") {
var charCode = writeTable[curAddr - 1] + 1;
for (var l = 0; l < part; l++)
writeTable[curAddr++] = charCode++;
} else
throw new Error("Incorrect type '" + typeof part + "' given in " + this.encodingName + " at chunk " + chunk[0]);
}
if (curAddr > 255)
throw new Error("Incorrect chunk in " + this.encodingName + " at addr " + chunk[0] + ": too long" + curAddr);
};
DBCSCodec.prototype._getEncodeBucket = function(uCode) {
var high = uCode >> 8;
if (this.encodeTable[high] === void 0)
this.encodeTable[high] = UNASSIGNED_NODE.slice(0);
return this.encodeTable[high];
};
DBCSCodec.prototype._setEncodeChar = function(uCode, dbcsCode) {
var bucket = this._getEncodeBucket(uCode);
var low = uCode & 255;
if (bucket[low] <= SEQ_START)
this.encodeTableSeq[SEQ_START - bucket[low]][DEF_CHAR] = dbcsCode;
else if (bucket[low] == UNASSIGNED)
bucket[low] = dbcsCode;
};
DBCSCodec.prototype._setEncodeSequence = function(seq, dbcsCode) {
var uCode = seq[0];
var bucket = this._getEncodeBucket(uCode);
var low = uCode & 255;
var node;
if (bucket[low] <= SEQ_START) {
node = this.encodeTableSeq[SEQ_START - bucket[low]];
} else {
node = {};
if (bucket[low] !== UNASSIGNED) node[DEF_CHAR] = bucket[low];
bucket[low] = SEQ_START - this.encodeTableSeq.length;
this.encodeTableSeq.push(node);
}
for (var j = 1; j < seq.length - 1; j++) {
var oldVal = node[uCode];
if (typeof oldVal === "object")
node = oldVal;
else {
node = node[uCode] = {};
if (oldVal !== void 0)
node[DEF_CHAR] = oldVal;
}
}
uCode = seq[seq.length - 1];
node[uCode] = dbcsCode;
};
DBCSCodec.prototype._fillEncodeTable = function(nodeIdx, prefix, skipEncodeChars) {
var node = this.decodeTables[nodeIdx];
var hasValues = false;
var subNodeEmpty = {};
for (var i2 = 0; i2 < 256; i2++) {
var uCode = node[i2];
var mbCode = prefix + i2;
if (skipEncodeChars[mbCode])
continue;
if (uCode >= 0) {
this._setEncodeChar(uCode, mbCode);
hasValues = true;
} else if (uCode <= NODE_START) {
var subNodeIdx = NODE_START - uCode;
if (!subNodeEmpty[subNodeIdx]) {
var newPrefix = mbCode << 8 >>> 0;
if (this._fillEncodeTable(subNodeIdx, newPrefix, skipEncodeChars))
hasValues = true;
else
subNodeEmpty[subNodeIdx] = true;
}
} else if (uCode <= SEQ_START) {
this._setEncodeSequence(this.decodeTableSeq[SEQ_START - uCode], mbCode);
hasValues = true;
}
}
return hasValues;
};
function DBCSEncoder(options, codec) {
this.leadSurrogate = -1;
this.seqObj = void 0;
this.encodeTable = codec.encodeTable;
this.encodeTableSeq = codec.encodeTableSeq;
this.defaultCharSingleByte = codec.defCharSB;
this.gb18030 = codec.gb18030;
}
DBCSEncoder.prototype.write = function(str) {
var newBuf = Buffer2.alloc(str.length * (this.gb18030 ? 4 : 3)), leadSurrogate = this.leadSurrogate, seqObj = this.seqObj, nextChar = -1, i2 = 0, j = 0;
while (true) {
if (nextChar === -1) {
if (i2 == str.length) break;
var uCode = str.charCodeAt(i2++);
} else {
var uCode = nextChar;
nextChar = -1;
}
if (55296 <= uCode && uCode < 57344) {
if (uCode < 56320) {
if (leadSurrogate === -1) {
leadSurrogate = uCode;
continue;
} else {
leadSurrogate = uCode;
uCode = UNASSIGNED;
}
} else {
if (leadSurrogate !== -1) {
uCode = 65536 + (leadSurrogate - 55296) * 1024 + (uCode - 56320);
leadSurrogate = -1;
} else {
uCode = UNASSIGNED;
}
}
} else if (leadSurrogate !== -1) {
nextChar = uCode;
uCode = UNASSIGNED;
leadSurrogate = -1;
}
var dbcsCode = UNASSIGNED;
if (seqObj !== void 0 && uCode != UNASSIGNED) {
var resCode = seqObj[uCode];
if (typeof resCode === "object") {
seqObj = resCode;
continue;
} else if (typeof resCode == "number") {
dbcsCode = resCode;
} else if (resCode == void 0) {
resCode = seqObj[DEF_CHAR];
if (resCode !== void 0) {
dbcsCode = resCode;
nextChar = uCode;
} else {
}
}
seqObj = void 0;
} else if (uCode >= 0) {
var subtable = this.encodeTable[uCode >> 8];
if (subtable !== void 0)
dbcsCode = subtable[uCode & 255];
if (dbcsCode <= SEQ_START) {
seqObj = this.encodeTableSeq[SEQ_START - dbcsCode];
continue;
}
if (dbcsCode == UNASSIGNED && this.gb18030) {
var idx = findIdx(this.gb18030.uChars, uCode);
if (idx != -1) {
var dbcsCode = this.gb18030.gbChars[idx] + (uCode - this.gb18030.uChars[idx]);
newBuf[j++] = 129 + Math.floor(dbcsCode / 12600);
dbcsCode = dbcsCode % 12600;
newBuf[j++] = 48 + Math.floor(dbcsCode / 1260);
dbcsCode = dbcsCode % 1260;
newBuf[j++] = 129 + Math.floor(dbcsCode / 10);
dbcsCode = dbcsCode % 10;
newBuf[j++] = 48 + dbcsCode;
continue;
}
}
}
if (dbcsCode === UNASSIGNED)
dbcsCode = this.defaultCharSingleByte;
if (dbcsCode < 256) {
newBuf[j++] = dbcsCode;
} else if (dbcsCode < 65536) {
newBuf[j++] = dbcsCode >> 8;
newBuf[j++] = dbcsCode & 255;
} else if (dbcsCode < 16777216) {
newBuf[j++] = dbcsCode >> 16;
newBuf[j++] = dbcsCode >> 8 & 255;
newBuf[j++] = dbcsCode & 255;
} else {
newBuf[j++] = dbcsCode >>> 24;
newBuf[j++] = dbcsCode >>> 16 & 255;
newBuf[j++] = dbcsCode >>> 8 & 255;
newBuf[j++] = dbcsCode & 255;
}
}
this.seqObj = seqObj;
this.leadSurrogate = leadSurrogate;
return newBuf.slice(0, j);
};
DBCSEncoder.prototype.end = function() {
if (this.leadSurrogate === -1 && this.seqObj === void 0)
return;
var newBuf = Buffer2.alloc(10), j = 0;
if (this.seqObj) {
var dbcsCode = this.seqObj[DEF_CHAR];
if (dbcsCode !== void 0) {
if (dbcsCode < 256) {
newBuf[j++] = dbcsCode;
} else {
newBuf[j++] = dbcsCode >> 8;
newBuf[j++] = dbcsCode & 255;
}
} else {
}
this.seqObj = void 0;
}
if (this.leadSurrogate !== -1) {
newBuf[j++] = this.defaultCharSingleByte;
this.leadSurrogate = -1;
}
return newBuf.slice(0, j);
};
DBCSEncoder.prototype.findIdx = findIdx;
function DBCSDecoder(options, codec) {
this.nodeIdx = 0;
this.prevBytes = [];
this.decodeTables = codec.decodeTables;
this.decodeTableSeq = codec.decodeTableSeq;
this.defaultCharUnicode = codec.defaultCharUnicode;
this.gb18030 = codec.gb18030;
}
DBCSDecoder.prototype.write = function(buf) {
var newBuf = Buffer2.alloc(buf.length * 2), nodeIdx = this.nodeIdx, prevBytes = this.prevBytes, prevOffset = this.prevBytes.length, seqStart = -this.prevBytes.length, uCode;
for (var i2 = 0, j = 0; i2 < buf.length; i2++) {
var curByte = i2 >= 0 ? buf[i2] : prevBytes[i2 + prevOffset];
var uCode = this.decodeTables[nodeIdx][curByte];
if (uCode >= 0) {
} else if (uCode === UNASSIGNED) {
uCode = this.defaultCharUnicode.charCodeAt(0);
i2 = seqStart;
} else if (uCode === GB18030_CODE) {
if (i2 >= 3) {
var ptr = (buf[i2 - 3] - 129) * 12600 + (buf[i2 - 2] - 48) * 1260 + (buf[i2 - 1] - 129) * 10 + (curByte - 48);
} else {
var ptr = (prevBytes[i2 - 3 + prevOffset] - 129) * 12600 + ((i2 - 2 >= 0 ? buf[i2 - 2] : prevBytes[i2 - 2 + prevOffset]) - 48) * 1260 + ((i2 - 1 >= 0 ? buf[i2 - 1] : prevBytes[i2 - 1 + prevOffset]) - 129) * 10 + (curByte - 48);
}
var idx = findIdx(this.gb18030.gbChars, ptr);
uCode = this.gb18030.uChars[idx] + ptr - this.gb18030.gbChars[idx];
} else if (uCode <= NODE_START) {
nodeIdx = NODE_START - uCode;
continue;
} else if (uCode <= SEQ_START) {
var seq = this.decodeTableSeq[SEQ_START - uCode];
for (var k = 0; k < seq.length - 1; k++) {
uCode = seq[k];
newBuf[j++] = uCode & 255;
newBuf[j++] = uCode >> 8;
}
uCode = seq[seq.length - 1];
} else
throw new Error("iconv-lite internal error: invalid decoding table value " + uCode + " at " + nodeIdx + "/" + curByte);
if (uCode >= 65536) {
uCode -= 65536;
var uCodeLead = 55296 | uCode >> 10;
newBuf[j++] = uCodeLead & 255;
newBuf[j++] = uCodeLead >> 8;
uCode = 56320 | uCode & 1023;
}
newBuf[j++] = uCode & 255;
newBuf[j++] = uCode >> 8;
nodeIdx = 0;
seqStart = i2 + 1;
}
this.nodeIdx = nodeIdx;
this.prevBytes = seqStart >= 0 ? Array.prototype.slice.call(buf, seqStart) : prevBytes.slice(seqStart + prevOffset).concat(Array.prototype.slice.call(buf));
return newBuf.slice(0, j).toString("ucs2");
};
DBCSDecoder.prototype.end = function() {
var ret = "";
while (this.prevBytes.length > 0) {
ret += this.defaultCharUnicode;
var bytesArr = this.prevBytes.slice(1);
this.prevBytes = [];
this.nodeIdx = 0;
if (bytesArr.length > 0)
ret += this.write(bytesArr);
}
this.prevBytes = [];
this.nodeIdx = 0;
return ret;
};
function findIdx(table, val2) {
if (table[0] > val2)
return -1;
var l = 0, r = table.length;
while (l < r - 1) {
var mid = l + (r - l + 1 >> 1);
if (table[mid] <= val2)
l = mid;
else
r = mid;
}
return l;
}
}
});
var require_shiftjis22 = __commonJS2({
"node_modules/body-parser/node_modules/iconv-lite/encodings/tables/shiftjis.json"(exports2, module2) {
module2.exports = [
["0", "\0", 128],
["a1", "\uFF61", 62],
["8140", "\u3000\u3001\u3002\uFF0C\uFF0E\u30FB\uFF1A\uFF1B\uFF1F\uFF01\u309B\u309C\xB4\uFF40\xA8\uFF3E\uFFE3\uFF3F\u30FD\u30FE\u309D\u309E\u3003\u4EDD\u3005\u3006\u3007\u30FC\u2015\u2010\uFF0F\uFF3C\uFF5E\u2225\uFF5C\u2026\u2025\u2018\u2019\u201C\u201D\uFF08\uFF09\u3014\u3015\uFF3B\uFF3D\uFF5B\uFF5D\u3008", 9, "\uFF0B\uFF0D\xB1\xD7"],
["8180", "\xF7\uFF1D\u2260\uFF1C\uFF1E\u2266\u2267\u221E\u2234\u2642\u2640\xB0\u2032\u2033\u2103\uFFE5\uFF04\uFFE0\uFFE1\uFF05\uFF03\uFF06\uFF0A\uFF20\xA7\u2606\u2605\u25CB\u25CF\u25CE\u25C7\u25C6\u25A1\u25A0\u25B3\u25B2\u25BD\u25BC\u203B\u3012\u2192\u2190\u2191\u2193\u3013"],
["81b8", "\u2208\u220B\u2286\u2287\u2282\u2283\u222A\u2229"],
["81c8", "\u2227\u2228\uFFE2\u21D2\u21D4\u2200\u2203"],
["81da", "\u2220\u22A5\u2312\u2202\u2207\u2261\u2252\u226A\u226B\u221A\u223D\u221D\u2235\u222B\u222C"],
["81f0", "\u212B\u2030\u266F\u266D\u266A\u2020\u2021\xB6"],
["81fc", "\u25EF"],
["824f", "\uFF10", 9],
["8260", "\uFF21", 25],
["8281", "\uFF41", 25],
["829f", "\u3041", 82],
["8340", "\u30A1", 62],
["8380", "\u30E0", 22],
["839f", "\u0391", 16, "\u03A3", 6],
["83bf", "\u03B1", 16, "\u03C3", 6],
["8440", "\u0410", 5, "\u0401\u0416", 25],
["8470", "\u0430", 5, "\u0451\u0436", 7],
["8480", "\u043E", 17],
["849f", "\u2500\u2502\u250C\u2510\u2518\u2514\u251C\u252C\u2524\u2534\u253C\u2501\u2503\u250F\u2513\u251B\u2517\u2523\u2533\u252B\u253B\u254B\u2520\u252F\u2528\u2537\u253F\u251D\u2530\u2525\u2538\u2542"],
["8740", "\u2460", 19, "\u2160", 9],
["875f", "\u3349\u3314\u3322\u334D\u3318\u3327\u3303\u3336\u3351\u3357\u330D\u3326\u3323\u332B\u334A\u333B\u339C\u339D\u339E\u338E\u338F\u33C4\u33A1"],
["877e", "\u337B"],
["8780", "\u301D\u301F\u2116\u33CD\u2121\u32A4", 4, "\u3231\u3232\u3239\u337E\u337D\u337C\u2252\u2261\u222B\u222E\u2211\u221A\u22A5\u2220\u221F\u22BF\u2235\u2229\u222A"],
["889f", "\u4E9C\u5516\u5A03\u963F\u54C0\u611B\u6328\u59F6\u9022\u8475\u831C\u7A50\u60AA\u63E1\u6E25\u65ED\u8466\u82A6\u9BF5\u6893\u5727\u65A1\u6271\u5B9B\u59D0\u867B\u98F4\u7D62\u7DBE\u9B8E\u6216\u7C9F\u88B7\u5B89\u5EB5\u6309\u6697\u6848\u95C7\u978D\u674F\u4EE5\u4F0A\u4F4D\u4F9D\u5049\u56F2\u5937\u59D4\u5A01\u5C09\u60DF\u610F\u6170\u6613\u6905\u70BA\u754F\u7570\u79FB\u7DAD\u7DEF\u80C3\u840E\u8863\u8B02\u9055\u907A\u533B\u4E95\u4EA5\u57DF\u80B2\u90C1\u78EF\u4E00\u58F1\u6EA2\u9038\u7A32\u8328\u828B\u9C2F\u5141\u5370\u54BD\u54E1\u56E0\u59FB\u5F15\u98F2\u6DEB\u80E4\u852D"],
["8940", "\u9662\u9670\u96A0\u97FB\u540B\u53F3\u5B87\u70CF\u7FBD\u8FC2\u96E8\u536F\u9D5C\u7ABA\u4E11\u7893\u81FC\u6E26\u5618\u5504\u6B1D\u851A\u9C3B\u59E5\u53A9\u6D66\u74DC\u958F\u5642\u4E91\u904B\u96F2\u834F\u990C\u53E1\u55B6\u5B30\u5F71\u6620\u66F3\u6804\u6C38\u6CF3\u6D29\u745B\u76C8\u7A4E\u9834\u82F1\u885B\u8A60\u92ED\u6DB2\u75AB\u76CA\u99C5\u60A6\u8B01\u8D8A\u95B2\u698E\u53AD\u5186"],
["8980", "\u5712\u5830\u5944\u5BB4\u5EF6\u6028\u63A9\u63F4\u6CBF\u6F14\u708E\u7114\u7159\u71D5\u733F\u7E01\u8276\u82D1\u8597\u9060\u925B\u9D1B\u5869\u65BC\u6C5A\u7525\u51F9\u592E\u5965\u5F80\u5FDC\u62BC\u65FA\u6A2A\u6B27\u6BB4\u738B\u7FC1\u8956\u9D2C\u9D0E\u9EC4\u5CA1\u6C96\u837B\u5104\u5C4B\u61B6\u81C6\u6876\u7261\u4E59\u4FFA\u5378\u6069\u6E29\u7A4F\u97F3\u4E0B\u5316\u4EEE\u4F55\u4F3D\u4FA1\u4F73\u52A0\u53EF\u5609\u590F\u5AC1\u5BB6\u5BE1\u79D1\u6687\u679C\u67B6\u6B4C\u6CB3\u706B\u73C2\u798D\u79BE\u7A3C\u7B87\u82B1\u82DB\u8304\u8377\u83EF\u83D3\u8766\u8AB2\u5629\u8CA8\u8FE6\u904E\u971E\u868A\u4FC4\u5CE8\u6211\u7259\u753B\u81E5\u82BD\u86FE\u8CC0\u96C5\u9913\u99D5\u4ECB\u4F1A\u89E3\u56DE\u584A\u58CA\u5EFB\u5FEB\u602A\u6094\u6062\u61D0\u6212\u62D0\u6539"],
["8a40", "\u9B41\u6666\u68B0\u6D77\u7070\u754C\u7686\u7D75\u82A5\u87F9\u958B\u968E\u8C9D\u51F1\u52BE\u5916\u54B3\u5BB3\u5D16\u6168\u6982\u6DAF\u788D\u84CB\u8857\u8A72\u93A7\u9AB8\u6D6C\u99A8\u86D9\u57A3\u67FF\u86CE\u920E\u5283\u5687\u5404\u5ED3\u62E1\u64B9\u683C\u6838\u6BBB\u7372\u78BA\u7A6B\u899A\u89D2\u8D6B\u8F03\u90ED\u95A3\u9694\u9769\u5B66\u5CB3\u697D\u984D\u984E\u639B\u7B20\u6A2B"],
["8a80", "\u6A7F\u68B6\u9C0D\u6F5F\u5272\u559D\u6070\u62EC\u6D3B\u6E07\u6ED1\u845B\u8910\u8F44\u4E14\u9C39\u53F6\u691B\u6A3A\u9784\u682A\u515C\u7AC3\u84B2\u91DC\u938C\u565B\u9D28\u6822\u8305\u8431\u7CA5\u5208\u82C5\u74E6\u4E7E\u4F83\u51A0\u5BD2\u520A\u52D8\u52E7\u5DFB\u559A\u582A\u59E6\u5B8C\u5B98\u5BDB\u5E72\u5E79\u60A3\u611F\u6163\u61BE\u63DB\u6562\u67D1\u6853\u68FA\u6B3E\u6B53\u6C57\u6F22\u6F97\u6F45\u74B0\u7518\u76E3\u770B\u7AFF\u7BA1\u7C21\u7DE9\u7F36\u7FF0\u809D\u8266\u839E\u89B3\u8ACC\u8CAB\u9084\u9451\u9593\u9591\u95A2\u9665\u97D3\u9928\u8218\u4E38\u542B\u5CB8\u5DCC\u73A9\u764C\u773C\u5CA9\u7FEB\u8D0B\u96C1\u9811\u9854\u9858\u4F01\u4F0E\u5371\u559C\u5668\u57FA\u5947\u5B09\u5BC4\u5C90\u5E0C\u5E7E\u5FCC\u63EE\u673A\u65D7\u65E2\u671F\u68CB\u68C4"],
["8b40", "\u6A5F\u5E30\u6BC5\u6C17\u6C7D\u757F\u7948\u5B63\u7A00\u7D00\u5FBD\u898F\u8A18\u8CB4\u8D77\u8ECC\u8F1D\u98E2\u9A0E\u9B3C\u4E80\u507D\u5100\u5993\u5B9C\u622F\u6280\u64EC\u6B3A\u72A0\u7591\u7947\u7FA9\u87FB\u8ABC\u8B70\u63AC\u83CA\u97A0\u5409\u5403\u55AB\u6854\u6A58\u8A70\u7827\u6775\u9ECD\u5374\u5BA2\u811A\u8650\u9006\u4E18\u4E45\u4EC7\u4F11\u53CA\u5438\u5BAE\u5F13\u6025\u6551"],
["8b80", "\u673D\u6C42\u6C72\u6CE3\u7078\u7403\u7A76\u7AAE\u7B08\u7D1A\u7CFE\u7D66\u65E7\u725B\u53BB\u5C45\u5DE8\u62D2\u62E0\u6319\u6E20\u865A\u8A31\u8DDD\u92F8\u6F01\u79A6\u9B5A\u4EA8\u4EAB\u4EAC\u4F9B\u4FA0\u50D1\u5147\u7AF6\u5171\u51F6\u5354\u5321\u537F\u53EB\u55AC\u5883\u5CE1\u5F37\u5F4A\u602F\u6050\u606D\u631F\u6559\u6A4B\u6CC1\u72C2\u72ED\u77EF\u80F8\u8105\u8208\u854E\u90F7\u93E1\u97FF\u9957\u9A5A\u4EF0\u51DD\u5C2D\u6681\u696D\u5C40\u66F2\u6975\u7389\u6850\u7C81\u50C5\u52E4\u5747\u5DFE\u9326\u65A4\u6B23\u6B3D\u7434\u7981\u79BD\u7B4B\u7DCA\u82B9\u83CC\u887F\u895F\u8B39\u8FD1\u91D1\u541F\u9280\u4E5D\u5036\u53E5\u533A\u72D7\u7396\u77E9\u82E6\u8EAF\u99C6\u99C8\u99D2\u5177\u611A\u865E\u55B0\u7A7A\u5076\u5BD3\u9047\u9685\u4E32\u6ADB\u91E7\u5C51\u5C48"],
["8c40", "\u6398\u7A9F\u6C93\u9774\u8F61\u7AAA\u718A\u9688\u7C82\u6817\u7E70\u6851\u936C\u52F2\u541B\u85AB\u8A13\u7FA4\u8ECD\u90E1\u5366\u8888\u7941\u4FC2\u50BE\u5211\u5144\u5553\u572D\u73EA\u578B\u5951\u5F62\u5F84\u6075\u6176\u6167\u61A9\u63B2\u643A\u656C\u666F\u6842\u6E13\u7566\u7A3D\u7CFB\u7D4C\u7D99\u7E4B\u7F6B\u830E\u834A\u86CD\u8A08\u8A63\u8B66\u8EFD\u981A\u9D8F\u82B8\u8FCE\u9BE8"],
["8c80", "\u5287\u621F\u6483\u6FC0\u9699\u6841\u5091\u6B20\u6C7A\u6F54\u7A74\u7D50\u8840\u8A23\u6708\u4EF6\u5039\u5026\u5065\u517C\u5238\u5263\u55A7\u570F\u5805\u5ACC\u5EFA\u61B2\u61F8\u62F3\u6372\u691C\u6A29\u727D\u72AC\u732E\u7814\u786F\u7D79\u770C\u80A9\u898B\u8B19\u8CE2\u8ED2\u9063\u9375\u967A\u9855\u9A13\u9E78\u5143\u539F\u53B3\u5E7B\u5F26\u6E1B\u6E90\u7384\u73FE\u7D43\u8237\u8A00\u8AFA\u9650\u4E4E\u500B\u53E4\u547C\u56FA\u59D1\u5B64\u5DF1\u5EAB\u5F27\u6238\u6545\u67AF\u6E56\u72D0\u7CCA\u88B4\u80A1\u80E1\u83F0\u864E\u8A87\u8DE8\u9237\u96C7\u9867\u9F13\u4E94\u4E92\u4F0D\u5348\u5449\u543E\u5A2F\u5F8C\u5FA1\u609F\u68A7\u6A8E\u745A\u7881\u8A9E\u8AA4\u8B77\u9190\u4E5E\u9BC9\u4EA4\u4F7C\u4FAF\u5019\u5016\u5149\u516C\u529F\u52B9\u52FE\u539A\u53E3\u5411"],
["8d40", "\u540E\u5589\u5751\u57A2\u597D\u5B54\u5B5D\u5B8F\u5DE5\u5DE7\u5DF7\u5E78\u5E83\u5E9A\u5EB7\u5F18\u6052\u614C\u6297\u62D8\u63A7\u653B\u6602\u6643\u66F4\u676D\u6821\u6897\u69CB\u6C5F\u6D2A\u6D69\u6E2F\u6E9D\u7532\u7687\u786C\u7A3F\u7CE0\u7D05\u7D18\u7D5E\u7DB1\u8015\u8003\u80AF\u80B1\u8154\u818F\u822A\u8352\u884C\u8861\u8B1B\u8CA2\u8CFC\u90CA\u9175\u9271\u783F\u92FC\u95A4\u964D"],
["8d80", "\u9805\u9999\u9AD8\u9D3B\u525B\u52AB\u53F7\u5408\u58D5\u62F7\u6FE0\u8C6A\u8F5F\u9EB9\u514B\u523B\u544A\u56FD\u7A40\u9177\u9D60\u9ED2\u7344\u6F09\u8170\u7511\u5FFD\u60DA\u9AA8\u72DB\u8FBC\u6B64\u9803\u4ECA\u56F0\u5764\u58BE\u5A5A\u6068\u61C7\u660F\u6606\u6839\u68B1\u6DF7\u75D5\u7D3A\u826E\u9B42\u4E9B\u4F50\u53C9\u5506\u5D6F\u5DE6\u5DEE\u67FB\u6C99\u7473\u7802\u8A50\u9396\u88DF\u5750\u5EA7\u632B\u50B5\u50AC\u518D\u6700\u54C9\u585E\u59BB\u5BB0\u5F69\u624D\u63A1\u683D\u6B73\u6E08\u707D\u91C7\u7280\u7815\u7826\u796D\u658E\u7D30\u83DC\u88C1\u8F09\u969B\u5264\u5728\u6750\u7F6A\u8CA1\u51B4\u5742\u962A\u583A\u698A\u80B4\u54B2\u5D0E\u57FC\u7895\u9DFA\u4F5C\u524A\u548B\u643E\u6628\u6714\u67F5\u7A84\u7B56\u7D22\u932F\u685C\u9BAD\u7B39\u5319\u518A\u5237"],
["8e40", "\u5BDF\u62F6\u64AE\u64E6\u672D\u6BBA\u85A9\u96D1\u7690\u9BD6\u634C\u9306\u9BAB\u76BF\u6652\u4E09\u5098\u53C2\u5C71\u60E8\u6492\u6563\u685F\u71E6\u73CA\u7523\u7B97\u7E82\u8695\u8B83\u8CDB\u9178\u9910\u65AC\u66AB\u6B8B\u4ED5\u4ED4\u4F3A\u4F7F\u523A\u53F8\u53F2\u55E3\u56DB\u58EB\u59CB\u59C9\u59FF\u5B50\u5C4D\u5E02\u5E2B\u5FD7\u601D\u6307\u652F\u5B5C\u65AF\u65BD\u65E8\u679D\u6B62"],
["8e80", "\u6B7B\u6C0F\u7345\u7949\u79C1\u7CF8\u7D19\u7D2B\u80A2\u8102\u81F3\u8996\u8A5E\u8A69\u8A66\u8A8C\u8AEE\u8CC7\u8CDC\u96CC\u98FC\u6B6F\u4E8B\u4F3C\u4F8D\u5150\u5B57\u5BFA\u6148\u6301\u6642\u6B21\u6ECB\u6CBB\u723E\u74BD\u75D4\u78C1\u793A\u800C\u8033\u81EA\u8494\u8F9E\u6C50\u9E7F\u5F0F\u8B58\u9D2B\u7AFA\u8EF8\u5B8D\u96EB\u4E03\u53F1\u57F7\u5931\u5AC9\u5BA4\u6089\u6E7F\u6F06\u75BE\u8CEA\u5B9F\u8500\u7BE0\u5072\u67F4\u829D\u5C61\u854A\u7E1E\u820E\u5199\u5C04\u6368\u8D66\u659C\u716E\u793E\u7D17\u8005\u8B1D\u8ECA\u906E\u86C7\u90AA\u501F\u52FA\u5C3A\u6753\u707C\u7235\u914C\u91C8\u932B\u82E5\u5BC2\u5F31\u60F9\u4E3B\u53D6\u5B88\u624B\u6731\u6B8A\u72E9\u73E0\u7A2E\u816B\u8DA3\u9152\u9996\u5112\u53D7\u546A\u5BFF\u6388\u6A39\u7DAC\u9700\u56DA\u53CE\u5468"],
["8f40", "\u5B97\u5C31\u5DDE\u4FEE\u6101\u62FE\u6D32\u79C0\u79CB\u7D42\u7E4D\u7FD2\u81ED\u821F\u8490\u8846\u8972\u8B90\u8E74\u8F2F\u9031\u914B\u916C\u96C6\u919C\u4EC0\u4F4F\u5145\u5341\u5F93\u620E\u67D4\u6C41\u6E0B\u7363\u7E26\u91CD\u9283\u53D4\u5919\u5BBF\u6DD1\u795D\u7E2E\u7C9B\u587E\u719F\u51FA\u8853\u8FF0\u4FCA\u5CFB\u6625\u77AC\u7AE3\u821C\u99FF\u51C6\u5FAA\u65EC\u696F\u6B89\u6DF3"],
["8f80", "\u6E96\u6F64\u76FE\u7D14\u5DE1\u9075\u9187\u9806\u51E6\u521D\u6240\u6691\u66D9\u6E1A\u5EB6\u7DD2\u7F72\u66F8\u85AF\u85F7\u8AF8\u52A9\u53D9\u5973\u5E8F\u5F90\u6055\u92E4\u9664\u50B7\u511F\u52DD\u5320\u5347\u53EC\u54E8\u5546\u5531\u5617\u5968\u59BE\u5A3C\u5BB5\u5C06\u5C0F\u5C11\u5C1A\u5E84\u5E8A\u5EE0\u5F70\u627F\u6284\u62DB\u638C\u6377\u6607\u660C\u662D\u6676\u677E\u68A2\u6A1F\u6A35\u6CBC\u6D88\u6E09\u6E58\u713C\u7126\u7167\u75C7\u7701\u785D\u7901\u7965\u79F0\u7AE0\u7B11\u7CA7\u7D39\u8096\u83D6\u848B\u8549\u885D\u88F3\u8A1F\u8A3C\u8A54\u8A73\u8C61\u8CDE\u91A4\u9266\u937E\u9418\u969C\u9798\u4E0A\u4E08\u4E1E\u4E57\u5197\u5270\u57CE\u5834\u58CC\u5B22\u5E38\u60C5\u64FE\u6761\u6756\u6D44\u72B6\u7573\u7A63\u84B8\u8B72\u91B8\u9320\u5631\u57F4\u98FE"],
["9040", "\u62ED\u690D\u6B96\u71ED\u7E54\u8077\u8272\u89E6\u98DF\u8755\u8FB1\u5C3B\u4F38\u4FE1\u4FB5\u5507\u5A20\u5BDD\u5BE9\u5FC3\u614E\u632F\u65B0\u664B\u68EE\u699B\u6D78\u6DF1\u7533\u75B9\u771F\u795E\u79E6\u7D33\u81E3\u82AF\u85AA\u89AA\u8A3A\u8EAB\u8F9B\u9032\u91DD\u9707\u4EBA\u4EC1\u5203\u5875\u58EC\u5C0B\u751A\u5C3D\u814E\u8A0A\u8FC5\u9663\u976D\u7B25\u8ACF\u9808\u9162\u56F3\u53A8"],
["9080", "\u9017\u5439\u5782\u5E25\u63A8\u6C34\u708A\u7761\u7C8B\u7FE0\u8870\u9042\u9154\u9310\u9318\u968F\u745E\u9AC4\u5D07\u5D69\u6570\u67A2\u8DA8\u96DB\u636E\u6749\u6919\u83C5\u9817\u96C0\u88FE\u6F84\u647A\u5BF8\u4E16\u702C\u755D\u662F\u51C4\u5236\u52E2\u59D3\u5F81\u6027\u6210\u653F\u6574\u661F\u6674\u68F2\u6816\u6B63\u6E05\u7272\u751F\u76DB\u7CBE\u8056\u58F0\u88FD\u897F\u8AA0\u8A93\u8ACB\u901D\u9192\u9752\u9759\u6589\u7A0E\u8106\u96BB\u5E2D\u60DC\u621A\u65A5\u6614\u6790\u77F3\u7A4D\u7C4D\u7E3E\u810A\u8CAC\u8D64\u8DE1\u8E5F\u78A9\u5207\u62D9\u63A5\u6442\u6298\u8A2D\u7A83\u7BC0\u8AAC\u96EA\u7D76\u820C\u8749\u4ED9\u5148\u5343\u5360\u5BA3\u5C02\u5C16\u5DDD\u6226\u6247\u64B0\u6813\u6834\u6CC9\u6D45\u6D17\u67D3\u6F5C\u714E\u717D\u65CB\u7A7F\u7BAD\u7DDA"],
["9140", "\u7E4A\u7FA8\u817A\u821B\u8239\u85A6\u8A6E\u8CCE\u8DF5\u9078\u9077\u92AD\u9291\u9583\u9BAE\u524D\u5584\u6F38\u7136\u5168\u7985\u7E55\u81B3\u7CCE\u564C\u5851\u5CA8\u63AA\u66FE\u66FD\u695A\u72D9\u758F\u758E\u790E\u7956\u79DF\u7C97\u7D20\u7D44\u8607\u8A34\u963B\u9061\u9F20\u50E7\u5275\u53CC\u53E2\u5009\u55AA\u58EE\u594F\u723D\u5B8B\u5C64\u531D\u60E3\u60F3\u635C\u6383\u633F\u63BB"],
["9180", "\u64CD\u65E9\u66F9\u5DE3\u69CD\u69FD\u6F15\u71E5\u4E89\u75E9\u76F8\u7A93\u7CDF\u7DCF\u7D9C\u8061\u8349\u8358\u846C\u84BC\u85FB\u88C5\u8D70\u9001\u906D\u9397\u971C\u9A12\u50CF\u5897\u618E\u81D3\u8535\u8D08\u9020\u4FC3\u5074\u5247\u5373\u606F\u6349\u675F\u6E2C\u8DB3\u901F\u4FD7\u5C5E\u8CCA\u65CF\u7D9A\u5352\u8896\u5176\u63C3\u5B58\u5B6B\u5C0A\u640D\u6751\u905C\u4ED6\u591A\u592A\u6C70\u8A51\u553E\u5815\u59A5\u60F0\u6253\u67C1\u8235\u6955\u9640\u99C4\u9A28\u4F53\u5806\u5BFE\u8010\u5CB1\u5E2F\u5F85\u6020\u614B\u6234\u66FF\u6CF0\u6EDE\u80CE\u817F\u82D4\u888B\u8CB8\u9000\u902E\u968A\u9EDB\u9BDB\u4EE3\u53F0\u5927\u7B2C\u918D\u984C\u9DF9\u6EDD\u7027\u5353\u5544\u5B85\u6258\u629E\u62D3\u6CA2\u6FEF\u7422\u8A17\u9438\u6FC1\u8AFE\u8338\u51E7\u86F8\u53EA"],
["9240", "\u53E9\u4F46\u9054\u8FB0\u596A\u8131\u5DFD\u7AEA\u8FBF\u68DA\u8C37\u72F8\u9C48\u6A3D\u8AB0\u4E39\u5358\u5606\u5766\u62C5\u63A2\u65E6\u6B4E\u6DE1\u6E5B\u70AD\u77ED\u7AEF\u7BAA\u7DBB\u803D\u80C6\u86CB\u8A95\u935B\u56E3\u58C7\u5F3E\u65AD\u6696\u6A80\u6BB5\u7537\u8AC7\u5024\u77E5\u5730\u5F1B\u6065\u667A\u6C60\u75F4\u7A1A\u7F6E\u81F4\u8718\u9045\u99B3\u7BC9\u755C\u7AF9\u7B51\u84C4"],
["9280", "\u9010\u79E9\u7A92\u8336\u5AE1\u7740\u4E2D\u4EF2\u5B99\u5FE0\u62BD\u663C\u67F1\u6CE8\u866B\u8877\u8A3B\u914E\u92F3\u99D0\u6A17\u7026\u732A\u82E7\u8457\u8CAF\u4E01\u5146\u51CB\u558B\u5BF5\u5E16\u5E33\u5E81\u5F14\u5F35\u5F6B\u5FB4\u61F2\u6311\u66A2\u671D\u6F6E\u7252\u753A\u773A\u8074\u8139\u8178\u8776\u8ABF\u8ADC\u8D85\u8DF3\u929A\u9577\u9802\u9CE5\u52C5\u6357\u76F4\u6715\u6C88\u73CD\u8CC3\u93AE\u9673\u6D25\u589C\u690E\u69CC\u8FFD\u939A\u75DB\u901A\u585A\u6802\u63B4\u69FB\u4F43\u6F2C\u67D8\u8FBB\u8526\u7DB4\u9354\u693F\u6F70\u576A\u58F7\u5B2C\u7D2C\u722A\u540A\u91E3\u9DB4\u4EAD\u4F4E\u505C\u5075\u5243\u8C9E\u5448\u5824\u5B9A\u5E1D\u5E95\u5EAD\u5EF7\u5F1F\u608C\u62B5\u633A\u63D0\u68AF\u6C40\u7887\u798E\u7A0B\u7DE0\u8247\u8A02\u8AE6\u8E44\u9013"],
["9340", "\u90B8\u912D\u91D8\u9F0E\u6CE5\u6458\u64E2\u6575\u6EF4\u7684\u7B1B\u9069\u93D1\u6EBA\u54F2\u5FB9\u64A4\u8F4D\u8FED\u9244\u5178\u586B\u5929\u5C55\u5E97\u6DFB\u7E8F\u751C\u8CBC\u8EE2\u985B\u70B9\u4F1D\u6BBF\u6FB1\u7530\u96FB\u514E\u5410\u5835\u5857\u59AC\u5C60\u5F92\u6597\u675C\u6E21\u767B\u83DF\u8CED\u9014\u90FD\u934D\u7825\u783A\u52AA\u5EA6\u571F\u5974\u6012\u5012\u515A\u51AC"],
["9380", "\u51CD\u5200\u5510\u5854\u5858\u5957\u5B95\u5CF6\u5D8B\u60BC\u6295\u642D\u6771\u6843\u68BC\u68DF\u76D7\u6DD8\u6E6F\u6D9B\u706F\u71C8\u5F53\u75D8\u7977\u7B49\u7B54\u7B52\u7CD6\u7D71\u5230\u8463\u8569\u85E4\u8A0E\u8B04\u8C46\u8E0F\u9003\u900F\u9419\u9676\u982D\u9A30\u95D8\u50CD\u52D5\u540C\u5802\u5C0E\u61A7\u649E\u6D1E\u77B3\u7AE5\u80F4\u8404\u9053\u9285\u5CE0\u9D07\u533F\u5F97\u5FB3\u6D9C\u7279\u7763\u79BF\u7BE4\u6BD2\u72EC\u8AAD\u6803\u6A61\u51F8\u7A81\u6934\u5C4A\u9CF6\u82EB\u5BC5\u9149\u701E\u5678\u5C6F\u60C7\u6566\u6C8C\u8C5A\u9041\u9813\u5451\u66C7\u920D\u5948\u90A3\u5185\u4E4D\u51EA\u8599\u8B0E\u7058\u637A\u934B\u6962\u99B4\u7E04\u7577\u5357\u6960\u8EDF\u96E3\u6C5D\u4E8C\u5C3C\u5F10\u8FE9\u5302\u8CD1\u8089\u8679\u5EFF\u65E5\u4E73\u5165"],
["9440", "\u5982\u5C3F\u97EE\u4EFB\u598A\u5FCD\u8A8D\u6FE1\u79B0\u7962\u5BE7\u8471\u732B\u71B1\u5E74\u5FF5\u637B\u649A\u71C3\u7C98\u4E43\u5EFC\u4E4B\u57DC\u56A2\u60A9\u6FC3\u7D0D\u80FD\u8133\u81BF\u8FB2\u8997\u86A4\u5DF4\u628A\u64AD\u8987\u6777\u6CE2\u6D3E\u7436\u7834\u5A46\u7F75\u82AD\u99AC\u4FF3\u5EC3\u62DD\u6392\u6557\u676F\u76C3\u724C\u80CC\u80BA\u8F29\u914D\u500D\u57F9\u5A92\u6885"],
["9480", "\u6973\u7164\u72FD\u8CB7\u58F2\u8CE0\u966A\u9019\u877F\u79E4\u77E7\u8429\u4F2F\u5265\u535A\u62CD\u67CF\u6CCA\u767D\u7B94\u7C95\u8236\u8584\u8FEB\u66DD\u6F20\u7206\u7E1B\u83AB\u99C1\u9EA6\u51FD\u7BB1\u7872\u7BB8\u8087\u7B48\u6AE8\u5E61\u808C\u7551\u7560\u516B\u9262\u6E8C\u767A\u9197\u9AEA\u4F10\u7F70\u629C\u7B4F\u95A5\u9CE9\u567A\u5859\u86E4\u96BC\u4F34\u5224\u534A\u53CD\u53DB\u5E06\u642C\u6591\u677F\u6C3E\u6C4E\u7248\u72AF\u73ED\u7554\u7E41\u822C\u85E9\u8CA9\u7BC4\u91C6\u7169\u9812\u98EF\u633D\u6669\u756A\u76E4\u78D0\u8543\u86EE\u532A\u5351\u5426\u5983\u5E87\u5F7C\u60B2\u6249\u6279\u62AB\u6590\u6BD4\u6CCC\u75B2\u76AE\u7891\u79D8\u7DCB\u7F77\u80A5\u88AB\u8AB9\u8CBB\u907F\u975E\u98DB\u6A0B\u7C38\u5099\u5C3E\u5FAE\u6787\u6BD8\u7435\u7709\u7F8E"],
["9540", "\u9F3B\u67CA\u7A17\u5339\u758B\u9AED\u5F66\u819D\u83F1\u8098\u5F3C\u5FC5\u7562\u7B46\u903C\u6867\u59EB\u5A9B\u7D10\u767E\u8B2C\u4FF5\u5F6A\u6A19\u6C37\u6F02\u74E2\u7968\u8868\u8A55\u8C79\u5EDF\u63CF\u75C5\u79D2\u82D7\u9328\u92F2\u849C\u86ED\u9C2D\u54C1\u5F6C\u658C\u6D5C\u7015\u8CA7\u8CD3\u983B\u654F\u74F6\u4E0D\u4ED8\u57E0\u592B\u5A66\u5BCC\u51A8\u5E03\u5E9C\u6016\u6276\u6577"],
["9580", "\u65A7\u666E\u6D6E\u7236\u7B26\u8150\u819A\u8299\u8B5C\u8CA0\u8CE6\u8D74\u961C\u9644\u4FAE\u64AB\u6B66\u821E\u8461\u856A\u90E8\u5C01\u6953\u98A8\u847A\u8557\u4F0F\u526F\u5FA9\u5E45\u670D\u798F\u8179\u8907\u8986\u6DF5\u5F17\u6255\u6CB8\u4ECF\u7269\u9B92\u5206\u543B\u5674\u58B3\u61A4\u626E\u711A\u596E\u7C89\u7CDE\u7D1B\u96F0\u6587\u805E\u4E19\u4F75\u5175\u5840\u5E63\u5E73\u5F0A\u67C4\u4E26\u853D\u9589\u965B\u7C73\u9801\u50FB\u58C1\u7656\u78A7\u5225\u77A5\u8511\u7B86\u504F\u5909\u7247\u7BC7\u7DE8\u8FBA\u8FD4\u904D\u4FBF\u52C9\u5A29\u5F01\u97AD\u4FDD\u8217\u92EA\u5703\u6355\u6B69\u752B\u88DC\u8F14\u7A42\u52DF\u5893\u6155\u620A\u66AE\u6BCD\u7C3F\u83E9\u5023\u4FF8\u5305\u5446\u5831\u5949\u5B9D\u5CF0\u5CEF\u5D29\u5E96\u62B1\u6367\u653E\u65B9\u670B"],
["9640", "\u6CD5\u6CE1\u70F9\u7832\u7E2B\u80DE\u82B3\u840C\u84EC\u8702\u8912\u8A2A\u8C4A\u90A6\u92D2\u98FD\u9CF3\u9D6C\u4E4F\u4EA1\u508D\u5256\u574A\u59A8\u5E3D\u5FD8\u5FD9\u623F\u66B4\u671B\u67D0\u68D2\u5192\u7D21\u80AA\u81A8\u8B00\u8C8C\u8CBF\u927E\u9632\u5420\u982C\u5317\u50D5\u535C\u58A8\u64B2\u6734\u7267\u7766\u7A46\u91E6\u52C3\u6CA1\u6B86\u5800\u5E4C\u5954\u672C\u7FFB\u51E1\u76C6"],
["9680", "\u6469\u78E8\u9B54\u9EBB\u57CB\u59B9\u6627\u679A\u6BCE\u54E9\u69D9\u5E55\u819C\u6795\u9BAA\u67FE\u9C52\u685D\u4EA6\u4FE3\u53C8\u62B9\u672B\u6CAB\u8FC4\u4FAD\u7E6D\u9EBF\u4E07\u6162\u6E80\u6F2B\u8513\u5473\u672A\u9B45\u5DF3\u7B95\u5CAC\u5BC6\u871C\u6E4A\u84D1\u7A14\u8108\u5999\u7C8D\u6C11\u7720\u52D9\u5922\u7121\u725F\u77DB\u9727\u9D61\u690B\u5A7F\u5A18\u51A5\u540D\u547D\u660E\u76DF\u8FF7\u9298\u9CF4\u59EA\u725D\u6EC5\u514D\u68C9\u7DBF\u7DEC\u9762\u9EBA\u6478\u6A21\u8302\u5984\u5B5F\u6BDB\u731B\u76F2\u7DB2\u8017\u8499\u5132\u6728\u9ED9\u76EE\u6762\u52FF\u9905\u5C24\u623B\u7C7E\u8CB0\u554F\u60B6\u7D0B\u9580\u5301\u4E5F\u51B6\u591C\u723A\u8036\u91CE\u5F25\u77E2\u5384\u5F79\u7D04\u85AC\u8A33\u8E8D\u9756\u67F3\u85AE\u9453\u6109\u6108\u6CB9\u7652"],
["9740", "\u8AED\u8F38\u552F\u4F51\u512A\u52C7\u53CB\u5BA5\u5E7D\u60A0\u6182\u63D6\u6709\u67DA\u6E67\u6D8C\u7336\u7337\u7531\u7950\u88D5\u8A98\u904A\u9091\u90F5\u96C4\u878D\u5915\u4E88\u4F59\u4E0E\u8A89\u8F3F\u9810\u50AD\u5E7C\u5996\u5BB9\u5EB8\u63DA\u63FA\u64C1\u66DC\u694A\u69D8\u6D0B\u6EB6\u7194\u7528\u7AAF\u7F8A\u8000\u8449\u84C9\u8981\u8B21\u8E0A\u9065\u967D\u990A\u617E\u6291\u6B32"],
["9780", "\u6C83\u6D74\u7FCC\u7FFC\u6DC0\u7F85\u87BA\u88F8\u6765\u83B1\u983C\u96F7\u6D1B\u7D61\u843D\u916A\u4E71\u5375\u5D50\u6B04\u6FEB\u85CD\u862D\u89A7\u5229\u540F\u5C65\u674E\u68A8\u7406\u7483\u75E2\u88CF\u88E1\u91CC\u96E2\u9678\u5F8B\u7387\u7ACB\u844E\u63A0\u7565\u5289\u6D41\u6E9C\u7409\u7559\u786B\u7C92\u9686\u7ADC\u9F8D\u4FB6\u616E\u65C5\u865C\u4E86\u4EAE\u50DA\u4E21\u51CC\u5BEE\u6599\u6881\u6DBC\u731F\u7642\u77AD\u7A1C\u7CE7\u826F\u8AD2\u907C\u91CF\u9675\u9818\u529B\u7DD1\u502B\u5398\u6797\u6DCB\u71D0\u7433\u81E8\u8F2A\u96A3\u9C57\u9E9F\u7460\u5841\u6D99\u7D2F\u985E\u4EE4\u4F36\u4F8B\u51B7\u52B1\u5DBA\u601C\u73B2\u793C\u82D3\u9234\u96B7\u96F6\u970A\u9E97\u9F62\u66A6\u6B74\u5217\u52A3\u70C8\u88C2\u5EC9\u604B\u6190\u6F23\u7149\u7C3E\u7DF4\u806F"],
["9840", "\u84EE\u9023\u932C\u5442\u9B6F\u6AD3\u7089\u8CC2\u8DEF\u9732\u52B4\u5A41\u5ECA\u5F04\u6717\u697C\u6994\u6D6A\u6F0F\u7262\u72FC\u7BED\u8001\u807E\u874B\u90CE\u516D\u9E93\u7984\u808B\u9332\u8AD6\u502D\u548C\u8A71\u6B6A\u8CC4\u8107\u60D1\u67A0\u9DF2\u4E99\u4E98\u9C10\u8A6B\u85C1\u8568\u6900\u6E7E\u7897\u8155"],
["989f", "\u5F0C\u4E10\u4E15\u4E2A\u4E31\u4E36\u4E3C\u4E3F\u4E42\u4E56\u4E58\u4E82\u4E85\u8C6B\u4E8A\u8212\u5F0D\u4E8E\u4E9E\u4E9F\u4EA0\u4EA2\u4EB0\u4EB3\u4EB6\u4ECE\u4ECD\u4EC4\u4EC6\u4EC2\u4ED7\u4EDE\u4EED\u4EDF\u4EF7\u4F09\u4F5A\u4F30\u4F5B\u4F5D\u4F57\u4F47\u4F76\u4F88\u4F8F\u4F98\u4F7B\u4F69\u4F70\u4F91\u4F6F\u4F86\u4F96\u5118\u4FD4\u4FDF\u4FCE\u4FD8\u4FDB\u4FD1\u4FDA\u4FD0\u4FE4\u4FE5\u501A\u5028\u5014\u502A\u5025\u5005\u4F1C\u4FF6\u5021\u5029\u502C\u4FFE\u4FEF\u5011\u5006\u5043\u5047\u6703\u5055\u5050\u5048\u505A\u5056\u506C\u5078\u5080\u509A\u5085\u50B4\u50B2"],
["9940", "\u50C9\u50CA\u50B3\u50C2\u50D6\u50DE\u50E5\u50ED\u50E3\u50EE\u50F9\u50F5\u5109\u5101\u5102\u5116\u5115\u5114\u511A\u5121\u513A\u5137\u513C\u513B\u513F\u5140\u5152\u514C\u5154\u5162\u7AF8\u5169\u516A\u516E\u5180\u5182\u56D8\u518C\u5189\u518F\u5191\u5193\u5195\u5196\u51A4\u51A6\u51A2\u51A9\u51AA\u51AB\u51B3\u51B1\u51B2\u51B0\u51B5\u51BD\u51C5\u51C9\u51DB\u51E0\u8655\u51E9\u51ED"],
["9980", "\u51F0\u51F5\u51FE\u5204\u520B\u5214\u520E\u5227\u522A\u522E\u5233\u5239\u524F\u5244\u524B\u524C\u525E\u5254\u526A\u5274\u5269\u5273\u527F\u527D\u528D\u5294\u5292\u5271\u5288\u5291\u8FA8\u8FA7\u52AC\u52AD\u52BC\u52B5\u52C1\u52CD\u52D7\u52DE\u52E3\u52E6\u98ED\u52E0\u52F3\u52F5\u52F8\u52F9\u5306\u5308\u7538\u530D\u5310\u530F\u5315\u531A\u5323\u532F\u5331\u5333\u5338\u5340\u5346\u5345\u4E17\u5349\u534D\u51D6\u535E\u5369\u536E\u5918\u537B\u5377\u5382\u5396\u53A0\u53A6\u53A5\u53AE\u53B0\u53B6\u53C3\u7C12\u96D9\u53DF\u66FC\u71EE\u53EE\u53E8\u53ED\u53FA\u5401\u543D\u5440\u542C\u542D\u543C\u542E\u5436\u5429\u541D\u544E\u548F\u5475\u548E\u545F\u5471\u5477\u5470\u5492\u547B\u5480\u5476\u5484\u5490\u5486\u54C7\u54A2\u54B8\u54A5\u54AC\u54C4\u54C8\u54A8"],
["9a40", "\u54AB\u54C2\u54A4\u54BE\u54BC\u54D8\u54E5\u54E6\u550F\u5514\u54FD\u54EE\u54ED\u54FA\u54E2\u5539\u5540\u5563\u554C\u552E\u555C\u5545\u5556\u5557\u5538\u5533\u555D\u5599\u5580\u54AF\u558A\u559F\u557B\u557E\u5598\u559E\u55AE\u557C\u5583\u55A9\u5587\u55A8\u55DA\u55C5\u55DF\u55C4\u55DC\u55E4\u55D4\u5614\u55F7\u5616\u55FE\u55FD\u561B\u55F9\u564E\u5650\u71DF\u5634\u5636\u5632\u5638"],
["9a80", "\u566B\u5664\u562F\u566C\u566A\u5686\u5680\u568A\u56A0\u5694\u568F\u56A5\u56AE\u56B6\u56B4\u56C2\u56BC\u56C1\u56C3\u56C0\u56C8\u56CE\u56D1\u56D3\u56D7\u56EE\u56F9\u5700\u56FF\u5704\u5709\u5708\u570B\u570D\u5713\u5718\u5716\u55C7\u571C\u5726\u5737\u5738\u574E\u573B\u5740\u574F\u5769\u57C0\u5788\u5761\u577F\u5789\u5793\u57A0\u57B3\u57A4\u57AA\u57B0\u57C3\u57C6\u57D4\u57D2\u57D3\u580A\u57D6\u57E3\u580B\u5819\u581D\u5872\u5821\u5862\u584B\u5870\u6BC0\u5852\u583D\u5879\u5885\u58B9\u589F\u58AB\u58BA\u58DE\u58BB\u58B8\u58AE\u58C5\u58D3\u58D1\u58D7\u58D9\u58D8\u58E5\u58DC\u58E4\u58DF\u58EF\u58FA\u58F9\u58FB\u58FC\u58FD\u5902\u590A\u5910\u591B\u68A6\u5925\u592C\u592D\u5932\u5938\u593E\u7AD2\u5955\u5950\u594E\u595A\u5958\u5962\u5960\u5967\u596C\u5969"],
["9b40", "\u5978\u5981\u599D\u4F5E\u4FAB\u59A3\u59B2\u59C6\u59E8\u59DC\u598D\u59D9\u59DA\u5A25\u5A1F\u5A11\u5A1C\u5A09\u5A1A\u5A40\u5A6C\u5A49\u5A35\u5A36\u5A62\u5A6A\u5A9A\u5ABC\u5ABE\u5ACB\u5AC2\u5ABD\u5AE3\u5AD7\u5AE6\u5AE9\u5AD6\u5AFA\u5AFB\u5B0C\u5B0B\u5B16\u5B32\u5AD0\u5B2A\u5B36\u5B3E\u5B43\u5B45\u5B40\u5B51\u5B55\u5B5A\u5B5B\u5B65\u5B69\u5B70\u5B73\u5B75\u5B78\u6588\u5B7A\u5B80"],
["9b80", "\u5B83\u5BA6\u5BB8\u5BC3\u5BC7\u5BC9\u5BD4\u5BD0\u5BE4\u5BE6\u5BE2\u5BDE\u5BE5\u5BEB\u5BF0\u5BF6\u5BF3\u5C05\u5C07\u5C08\u5C0D\u5C13\u5C20\u5C22\u5C28\u5C38\u5C39\u5C41\u5C46\u5C4E\u5C53\u5C50\u5C4F\u5B71\u5C6C\u5C6E\u4E62\u5C76\u5C79\u5C8C\u5C91\u5C94\u599B\u5CAB\u5CBB\u5CB6\u5CBC\u5CB7\u5CC5\u5CBE\u5CC7\u5CD9\u5CE9\u5CFD\u5CFA\u5CED\u5D8C\u5CEA\u5D0B\u5D15\u5D17\u5D5C\u5D1F\u5D1B\u5D11\u5D14\u5D22\u5D1A\u5D19\u5D18\u5D4C\u5D52\u5D4E\u5D4B\u5D6C\u5D73\u5D76\u5D87\u5D84\u5D82\u5DA2\u5D9D\u5DAC\u5DAE\u5DBD\u5D90\u5DB7\u5DBC\u5DC9\u5DCD\u5DD3\u5DD2\u5DD6\u5DDB\u5DEB\u5DF2\u5DF5\u5E0B\u5E1A\u5E19\u5E11\u5E1B\u5E36\u5E37\u5E44\u5E43\u5E40\u5E4E\u5E57\u5E54\u5E5F\u5E62\u5E64\u5E47\u5E75\u5E76\u5E7A\u9EBC\u5E7F\u5EA0\u5EC1\u5EC2\u5EC8\u5ED0\u5ECF"],
["9c40", "\u5ED6\u5EE3\u5EDD\u5EDA\u5EDB\u5EE2\u5EE1\u5EE8\u5EE9\u5EEC\u5EF1\u5EF3\u5EF0\u5EF4\u5EF8\u5EFE\u5F03\u5F09\u5F5D\u5F5C\u5F0B\u5F11\u5F16\u5F29\u5F2D\u5F38\u5F41\u5F48\u5F4C\u5F4E\u5F2F\u5F51\u5F56\u5F57\u5F59\u5F61\u5F6D\u5F73\u5F77\u5F83\u5F82\u5F7F\u5F8A\u5F88\u5F91\u5F87\u5F9E\u5F99\u5F98\u5FA0\u5FA8\u5FAD\u5FBC\u5FD6\u5FFB\u5FE4\u5FF8\u5FF1\u5FDD\u60B3\u5FFF\u6021\u6060"],
["9c80", "\u6019\u6010\u6029\u600E\u6031\u601B\u6015\u602B\u6026\u600F\u603A\u605A\u6041\u606A\u6077\u605F\u604A\u6046\u604D\u6063\u6043\u6064\u6042\u606C\u606B\u6059\u6081\u608D\u60E7\u6083\u609A\u6084\u609B\u6096\u6097\u6092\u60A7\u608B\u60E1\u60B8\u60E0\u60D3\u60B4\u5FF0\u60BD\u60C6\u60B5\u60D8\u614D\u6115\u6106\u60F6\u60F7\u6100\u60F4\u60FA\u6103\u6121\u60FB\u60F1\u610D\u610E\u6147\u613E\u6128\u6127\u614A\u613F\u613C\u612C\u6134\u613D\u6142\u6144\u6173\u6177\u6158\u6159\u615A\u616B\u6174\u616F\u6165\u6171\u615F\u615D\u6153\u6175\u6199\u6196\u6187\u61AC\u6194\u619A\u618A\u6191\u61AB\u61AE\u61CC\u61CA\u61C9\u61F7\u61C8\u61C3\u61C6\u61BA\u61CB\u7F79\u61CD\u61E6\u61E3\u61F6\u61FA\u61F4\u61FF\u61FD\u61FC\u61FE\u6200\u6208\u6209\u620D\u620C\u6214\u621B"],
["9d40", "\u621E\u6221\u622A\u622E\u6230\u6232\u6233\u6241\u624E\u625E\u6263\u625B\u6260\u6268\u627C\u6282\u6289\u627E\u6292\u6293\u6296\u62D4\u6283\u6294\u62D7\u62D1\u62BB\u62CF\u62FF\u62C6\u64D4\u62C8\u62DC\u62CC\u62CA\u62C2\u62C7\u629B\u62C9\u630C\u62EE\u62F1\u6327\u6302\u6308\u62EF\u62F5\u6350\u633E\u634D\u641C\u634F\u6396\u638E\u6380\u63AB\u6376\u63A3\u638F\u6389\u639F\u63B5\u636B"],
["9d80", "\u6369\u63BE\u63E9\u63C0\u63C6\u63E3\u63C9\u63D2\u63F6\u63C4\u6416\u6434\u6406\u6413\u6426\u6436\u651D\u6417\u6428\u640F\u6467\u646F\u6476\u644E\u652A\u6495\u6493\u64A5\u64A9\u6488\u64BC\u64DA\u64D2\u64C5\u64C7\u64BB\u64D8\u64C2\u64F1\u64E7\u8209\u64E0\u64E1\u62AC\u64E3\u64EF\u652C\u64F6\u64F4\u64F2\u64FA\u6500\u64FD\u6518\u651C\u6505\u6524\u6523\u652B\u6534\u6535\u6537\u6536\u6538\u754B\u6548\u6556\u6555\u654D\u6558\u655E\u655D\u6572\u6578\u6582\u6583\u8B8A\u659B\u659F\u65AB\u65B7\u65C3\u65C6\u65C1\u65C4\u65CC\u65D2\u65DB\u65D9\u65E0\u65E1\u65F1\u6772\u660A\u6603\u65FB\u6773\u6635\u6636\u6634\u661C\u664F\u6644\u6649\u6641\u665E\u665D\u6664\u6667\u6668\u665F\u6662\u6670\u6683\u6688\u668E\u6689\u6684\u6698\u669D\u66C1\u66B9\u66C9\u66BE\u66BC"],
["9e40", "\u66C4\u66B8\u66D6\u66DA\u66E0\u663F\u66E6\u66E9\u66F0\u66F5\u66F7\u670F\u6716\u671E\u6726\u6727\u9738\u672E\u673F\u6736\u6741\u6738\u6737\u6746\u675E\u6760\u6759\u6763\u6764\u6789\u6770\u67A9\u677C\u676A\u678C\u678B\u67A6\u67A1\u6785\u67B7\u67EF\u67B4\u67EC\u67B3\u67E9\u67B8\u67E4\u67DE\u67DD\u67E2\u67EE\u67B9\u67CE\u67C6\u67E7\u6A9C\u681E\u6846\u6829\u6840\u684D\u6832\u684E"],
["9e80", "\u68B3\u682B\u6859\u6863\u6877\u687F\u689F\u688F\u68AD\u6894\u689D\u689B\u6883\u6AAE\u68B9\u6874\u68B5\u68A0\u68BA\u690F\u688D\u687E\u6901\u68CA\u6908\u68D8\u6922\u6926\u68E1\u690C\u68CD\u68D4\u68E7\u68D5\u6936\u6912\u6904\u68D7\u68E3\u6925\u68F9\u68E0\u68EF\u6928\u692A\u691A\u6923\u6921\u68C6\u6979\u6977\u695C\u6978\u696B\u6954\u697E\u696E\u6939\u6974\u693D\u6959\u6930\u6961\u695E\u695D\u6981\u696A\u69B2\u69AE\u69D0\u69BF\u69C1\u69D3\u69BE\u69CE\u5BE8\u69CA\u69DD\u69BB\u69C3\u69A7\u6A2E\u6991\u69A0\u699C\u6995\u69B4\u69DE\u69E8\u6A02\u6A1B\u69FF\u6B0A\u69F9\u69F2\u69E7\u6A05\u69B1\u6A1E\u69ED\u6A14\u69EB\u6A0A\u6A12\u6AC1\u6A23\u6A13\u6A44\u6A0C\u6A72\u6A36\u6A78\u6A47\u6A62\u6A59\u6A66\u6A48\u6A38\u6A22\u6A90\u6A8D\u6AA0\u6A84\u6AA2\u6AA3"],
["9f40", "\u6A97\u8617\u6ABB\u6AC3\u6AC2\u6AB8\u6AB3\u6AAC\u6ADE\u6AD1\u6ADF\u6AAA\u6ADA\u6AEA\u6AFB\u6B05\u8616\u6AFA\u6B12\u6B16\u9B31\u6B1F\u6B38\u6B37\u76DC\u6B39\u98EE\u6B47\u6B43\u6B49\u6B50\u6B59\u6B54\u6B5B\u6B5F\u6B61\u6B78\u6B79\u6B7F\u6B80\u6B84\u6B83\u6B8D\u6B98\u6B95\u6B9E\u6BA4\u6BAA\u6BAB\u6BAF\u6BB2\u6BB1\u6BB3\u6BB7\u6BBC\u6BC6\u6BCB\u6BD3\u6BDF\u6BEC\u6BEB\u6BF3\u6BEF"],
["9f80", "\u9EBE\u6C08\u6C13\u6C14\u6C1B\u6C24\u6C23\u6C5E\u6C55\u6C62\u6C6A\u6C82\u6C8D\u6C9A\u6C81\u6C9B\u6C7E\u6C68\u6C73\u6C92\u6C90\u6CC4\u6CF1\u6CD3\u6CBD\u6CD7\u6CC5\u6CDD\u6CAE\u6CB1\u6CBE\u6CBA\u6CDB\u6CEF\u6CD9\u6CEA\u6D1F\u884D\u6D36\u6D2B\u6D3D\u6D38\u6D19\u6D35\u6D33\u6D12\u6D0C\u6D63\u6D93\u6D64\u6D5A\u6D79\u6D59\u6D8E\u6D95\u6FE4\u6D85\u6DF9\u6E15\u6E0A\u6DB5\u6DC7\u6DE6\u6DB8\u6DC6\u6DEC\u6DDE\u6DCC\u6DE8\u6DD2\u6DC5\u6DFA\u6DD9\u6DE4\u6DD5\u6DEA\u6DEE\u6E2D\u6E6E\u6E2E\u6E19\u6E72\u6E5F\u6E3E\u6E23\u6E6B\u6E2B\u6E76\u6E4D\u6E1F\u6E43\u6E3A\u6E4E\u6E24\u6EFF\u6E1D\u6E38\u6E82\u6EAA\u6E98\u6EC9\u6EB7\u6ED3\u6EBD\u6EAF\u6EC4\u6EB2\u6ED4\u6ED5\u6E8F\u6EA5\u6EC2\u6E9F\u6F41\u6F11\u704C\u6EEC\u6EF8\u6EFE\u6F3F\u6EF2\u6F31\u6EEF\u6F32\u6ECC"],
["e040", "\u6F3E\u6F13\u6EF7\u6F86\u6F7A\u6F78\u6F81\u6F80\u6F6F\u6F5B\u6FF3\u6F6D\u6F82\u6F7C\u6F58\u6F8E\u6F91\u6FC2\u6F66\u6FB3\u6FA3\u6FA1\u6FA4\u6FB9\u6FC6\u6FAA\u6FDF\u6FD5\u6FEC\u6FD4\u6FD8\u6FF1\u6FEE\u6FDB\u7009\u700B\u6FFA\u7011\u7001\u700F\u6FFE\u701B\u701A\u6F74\u701D\u7018\u701F\u7030\u703E\u7032\u7051\u7063\u7099\u7092\u70AF\u70F1\u70AC\u70B8\u70B3\u70AE\u70DF\u70CB\u70DD"],
["e080", "\u70D9\u7109\u70FD\u711C\u7119\u7165\u7155\u7188\u7166\u7162\u714C\u7156\u716C\u718F\u71FB\u7184\u7195\u71A8\u71AC\u71D7\u71B9\u71BE\u71D2\u71C9\u71D4\u71CE\u71E0\u71EC\u71E7\u71F5\u71FC\u71F9\u71FF\u720D\u7210\u721B\u7228\u722D\u722C\u7230\u7232\u723B\u723C\u723F\u7240\u7246\u724B\u7258\u7274\u727E\u7282\u7281\u7287\u7292\u7296\u72A2\u72A7\u72B9\u72B2\u72C3\u72C6\u72C4\u72CE\u72D2\u72E2\u72E0\u72E1\u72F9\u72F7\u500F\u7317\u730A\u731C\u7316\u731D\u7334\u732F\u7329\u7325\u733E\u734E\u734F\u9ED8\u7357\u736A\u7368\u7370\u7378\u7375\u737B\u737A\u73C8\u73B3\u73CE\u73BB\u73C0\u73E5\u73EE\u73DE\u74A2\u7405\u746F\u7425\u73F8\u7432\u743A\u7455\u743F\u745F\u7459\u7441\u745C\u7469\u7470\u7463\u746A\u7476\u747E\u748B\u749E\u74A7\u74CA\u74CF\u74D4\u73F1"],
["e140", "\u74E0\u74E3\u74E7\u74E9\u74EE\u74F2\u74F0\u74F1\u74F8\u74F7\u7504\u7503\u7505\u750C\u750E\u750D\u7515\u7513\u751E\u7526\u752C\u753C\u7544\u754D\u754A\u7549\u755B\u7546\u755A\u7569\u7564\u7567\u756B\u756D\u7578\u7576\u7586\u7587\u7574\u758A\u7589\u7582\u7594\u759A\u759D\u75A5\u75A3\u75C2\u75B3\u75C3\u75B5\u75BD\u75B8\u75BC\u75B1\u75CD\u75CA\u75D2\u75D9\u75E3\u75DE\u75FE\u75FF"],
["e180", "\u75FC\u7601\u75F0\u75FA\u75F2\u75F3\u760B\u760D\u7609\u761F\u7627\u7620\u7621\u7622\u7624\u7634\u7630\u763B\u7647\u7648\u7646\u765C\u7658\u7661\u7662\u7668\u7669\u766A\u7667\u766C\u7670\u7672\u7676\u7678\u767C\u7680\u7683\u7688\u768B\u768E\u7696\u7693\u7699\u769A\u76B0\u76B4\u76B8\u76B9\u76BA\u76C2\u76CD\u76D6\u76D2\u76DE\u76E1\u76E5\u76E7\u76EA\u862F\u76FB\u7708\u7707\u7704\u7729\u7724\u771E\u7725\u7726\u771B\u7737\u7738\u7747\u775A\u7768\u776B\u775B\u7765\u777F\u777E\u7779\u778E\u778B\u7791\u77A0\u779E\u77B0\u77B6\u77B9\u77BF\u77BC\u77BD\u77BB\u77C7\u77CD\u77D7\u77DA\u77DC\u77E3\u77EE\u77FC\u780C\u7812\u7926\u7820\u792A\u7845\u788E\u7874\u7886\u787C\u789A\u788C\u78A3\u78B5\u78AA\u78AF\u78D1\u78C6\u78CB\u78D4\u78BE\u78BC\u78C5\u78CA\u78EC"],
["e240", "\u78E7\u78DA\u78FD\u78F4\u7907\u7912\u7911\u7919\u792C\u792B\u7940\u7960\u7957\u795F\u795A\u7955\u7953\u797A\u797F\u798A\u799D\u79A7\u9F4B\u79AA\u79AE\u79B3\u79B9\u79BA\u79C9\u79D5\u79E7\u79EC\u79E1\u79E3\u7A08\u7A0D\u7A18\u7A19\u7A20\u7A1F\u7980\u7A31\u7A3B\u7A3E\u7A37\u7A43\u7A57\u7A49\u7A61\u7A62\u7A69\u9F9D\u7A70\u7A79\u7A7D\u7A88\u7A97\u7A95\u7A98\u7A96\u7AA9\u7AC8\u7AB0"],
["e280", "\u7AB6\u7AC5\u7AC4\u7ABF\u9083\u7AC7\u7ACA\u7ACD\u7ACF\u7AD5\u7AD3\u7AD9\u7ADA\u7ADD\u7AE1\u7AE2\u7AE6\u7AED\u7AF0\u7B02\u7B0F\u7B0A\u7B06\u7B33\u7B18\u7B19\u7B1E\u7B35\u7B28\u7B36\u7B50\u7B7A\u7B04\u7B4D\u7B0B\u7B4C\u7B45\u7B75\u7B65\u7B74\u7B67\u7B70\u7B71\u7B6C\u7B6E\u7B9D\u7B98\u7B9F\u7B8D\u7B9C\u7B9A\u7B8B\u7B92\u7B8F\u7B5D\u7B99\u7BCB\u7BC1\u7BCC\u7BCF\u7BB4\u7BC6\u7BDD\u7BE9\u7C11\u7C14\u7BE6\u7BE5\u7C60\u7C00\u7C07\u7C13\u7BF3\u7BF7\u7C17\u7C0D\u7BF6\u7C23\u7C27\u7C2A\u7C1F\u7C37\u7C2B\u7C3D\u7C4C\u7C43\u7C54\u7C4F\u7C40\u7C50\u7C58\u7C5F\u7C64\u7C56\u7C65\u7C6C\u7C75\u7C83\u7C90\u7CA4\u7CAD\u7CA2\u7CAB\u7CA1\u7CA8\u7CB3\u7CB2\u7CB1\u7CAE\u7CB9\u7CBD\u7CC0\u7CC5\u7CC2\u7CD8\u7CD2\u7CDC\u7CE2\u9B3B\u7CEF\u7CF2\u7CF4\u7CF6\u7CFA\u7D06"],
["e340", "\u7D02\u7D1C\u7D15\u7D0A\u7D45\u7D4B\u7D2E\u7D32\u7D3F\u7D35\u7D46\u7D73\u7D56\u7D4E\u7D72\u7D68\u7D6E\u7D4F\u7D63\u7D93\u7D89\u7D5B\u7D8F\u7D7D\u7D9B\u7DBA\u7DAE\u7DA3\u7DB5\u7DC7\u7DBD\u7DAB\u7E3D\u7DA2\u7DAF\u7DDC\u7DB8\u7D9F\u7DB0\u7DD8\u7DDD\u7DE4\u7DDE\u7DFB\u7DF2\u7DE1\u7E05\u7E0A\u7E23\u7E21\u7E12\u7E31\u7E1F\u7E09\u7E0B\u7E22\u7E46\u7E66\u7E3B\u7E35\u7E39\u7E43\u7E37"],
["e380", "\u7E32\u7E3A\u7E67\u7E5D\u7E56\u7E5E\u7E59\u7E5A\u7E79\u7E6A\u7E69\u7E7C\u7E7B\u7E83\u7DD5\u7E7D\u8FAE\u7E7F\u7E88\u7E89\u7E8C\u7E92\u7E90\u7E93\u7E94\u7E96\u7E8E\u7E9B\u7E9C\u7F38\u7F3A\u7F45\u7F4C\u7F4D\u7F4E\u7F50\u7F51\u7F55\u7F54\u7F58\u7F5F\u7F60\u7F68\u7F69\u7F67\u7F78\u7F82\u7F86\u7F83\u7F88\u7F87\u7F8C\u7F94\u7F9E\u7F9D\u7F9A\u7FA3\u7FAF\u7FB2\u7FB9\u7FAE\u7FB6\u7FB8\u8B71\u7FC5\u7FC6\u7FCA\u7FD5\u7FD4\u7FE1\u7FE6\u7FE9\u7FF3\u7FF9\u98DC\u8006\u8004\u800B\u8012\u8018\u8019\u801C\u8021\u8028\u803F\u803B\u804A\u8046\u8052\u8058\u805A\u805F\u8062\u8068\u8073\u8072\u8070\u8076\u8079\u807D\u807F\u8084\u8086\u8085\u809B\u8093\u809A\u80AD\u5190\u80AC\u80DB\u80E5\u80D9\u80DD\u80C4\u80DA\u80D6\u8109\u80EF\u80F1\u811B\u8129\u8123\u812F\u814B"],
["e440", "\u968B\u8146\u813E\u8153\u8151\u80FC\u8171\u816E\u8165\u8166\u8174\u8183\u8188\u818A\u8180\u8182\u81A0\u8195\u81A4\u81A3\u815F\u8193\u81A9\u81B0\u81B5\u81BE\u81B8\u81BD\u81C0\u81C2\u81BA\u81C9\u81CD\u81D1\u81D9\u81D8\u81C8\u81DA\u81DF\u81E0\u81E7\u81FA\u81FB\u81FE\u8201\u8202\u8205\u8207\u820A\u820D\u8210\u8216\u8229\u822B\u8238\u8233\u8240\u8259\u8258\u825D\u825A\u825F\u8264"],
["e480", "\u8262\u8268\u826A\u826B\u822E\u8271\u8277\u8278\u827E\u828D\u8292\u82AB\u829F\u82BB\u82AC\u82E1\u82E3\u82DF\u82D2\u82F4\u82F3\u82FA\u8393\u8303\u82FB\u82F9\u82DE\u8306\u82DC\u8309\u82D9\u8335\u8334\u8316\u8332\u8331\u8340\u8339\u8350\u8345\u832F\u832B\u8317\u8318\u8385\u839A\u83AA\u839F\u83A2\u8396\u8323\u838E\u8387\u838A\u837C\u83B5\u8373\u8375\u83A0\u8389\u83A8\u83F4\u8413\u83EB\u83CE\u83FD\u8403\u83D8\u840B\u83C1\u83F7\u8407\u83E0\u83F2\u840D\u8422\u8420\u83BD\u8438\u8506\u83FB\u846D\u842A\u843C\u855A\u8484\u8477\u846B\u84AD\u846E\u8482\u8469\u8446\u842C\u846F\u8479\u8435\u84CA\u8462\u84B9\u84BF\u849F\u84D9\u84CD\u84BB\u84DA\u84D0\u84C1\u84C6\u84D6\u84A1\u8521\u84FF\u84F4\u8517\u8518\u852C\u851F\u8515\u8514\u84FC\u8540\u8563\u8558\u8548"],
["e540", "\u8541\u8602\u854B\u8555\u8580\u85A4\u8588\u8591\u858A\u85A8\u856D\u8594\u859B\u85EA\u8587\u859C\u8577\u857E\u8590\u85C9\u85BA\u85CF\u85B9\u85D0\u85D5\u85DD\u85E5\u85DC\u85F9\u860A\u8613\u860B\u85FE\u85FA\u8606\u8622\u861A\u8630\u863F\u864D\u4E55\u8654\u865F\u8667\u8671\u8693\u86A3\u86A9\u86AA\u868B\u868C\u86B6\u86AF\u86C4\u86C6\u86B0\u86C9\u8823\u86AB\u86D4\u86DE\u86E9\u86EC"],
["e580", "\u86DF\u86DB\u86EF\u8712\u8706\u8708\u8700\u8703\u86FB\u8711\u8709\u870D\u86F9\u870A\u8734\u873F\u8737\u873B\u8725\u8729\u871A\u8760\u875F\u8778\u874C\u874E\u8774\u8757\u8768\u876E\u8759\u8753\u8763\u876A\u8805\u87A2\u879F\u8782\u87AF\u87CB\u87BD\u87C0\u87D0\u96D6\u87AB\u87C4\u87B3\u87C7\u87C6\u87BB\u87EF\u87F2\u87E0\u880F\u880D\u87FE\u87F6\u87F7\u880E\u87D2\u8811\u8816\u8815\u8822\u8821\u8831\u8836\u8839\u8827\u883B\u8844\u8842\u8852\u8859\u885E\u8862\u886B\u8881\u887E\u889E\u8875\u887D\u88B5\u8872\u8882\u8897\u8892\u88AE\u8899\u88A2\u888D\u88A4\u88B0\u88BF\u88B1\u88C3\u88C4\u88D4\u88D8\u88D9\u88DD\u88F9\u8902\u88FC\u88F4\u88E8\u88F2\u8904\u890C\u890A\u8913\u8943\u891E\u8925\u892A\u892B\u8941\u8944\u893B\u8936\u8938\u894C\u891D\u8960\u895E"],
["e640", "\u8966\u8964\u896D\u896A\u896F\u8974\u8977\u897E\u8983\u8988\u898A\u8993\u8998\u89A1\u89A9\u89A6\u89AC\u89AF\u89B2\u89BA\u89BD\u89BF\u89C0\u89DA\u89DC\u89DD\u89E7\u89F4\u89F8\u8A03\u8A16\u8A10\u8A0C\u8A1B\u8A1D\u8A25\u8A36\u8A41\u8A5B\u8A52\u8A46\u8A48\u8A7C\u8A6D\u8A6C\u8A62\u8A85\u8A82\u8A84\u8AA8\u8AA1\u8A91\u8AA5\u8AA6\u8A9A\u8AA3\u8AC4\u8ACD\u8AC2\u8ADA\u8AEB\u8AF3\u8AE7"],
["e680", "\u8AE4\u8AF1\u8B14\u8AE0\u8AE2\u8AF7\u8ADE\u8ADB\u8B0C\u8B07\u8B1A\u8AE1\u8B16\u8B10\u8B17\u8B20\u8B33\u97AB\u8B26\u8B2B\u8B3E\u8B28\u8B41\u8B4C\u8B4F\u8B4E\u8B49\u8B56\u8B5B\u8B5A\u8B6B\u8B5F\u8B6C\u8B6F\u8B74\u8B7D\u8B80\u8B8C\u8B8E\u8B92\u8B93\u8B96\u8B99\u8B9A\u8C3A\u8C41\u8C3F\u8C48\u8C4C\u8C4E\u8C50\u8C55\u8C62\u8C6C\u8C78\u8C7A\u8C82\u8C89\u8C85\u8C8A\u8C8D\u8C8E\u8C94\u8C7C\u8C98\u621D\u8CAD\u8CAA\u8CBD\u8CB2\u8CB3\u8CAE\u8CB6\u8CC8\u8CC1\u8CE4\u8CE3\u8CDA\u8CFD\u8CFA\u8CFB\u8D04\u8D05\u8D0A\u8D07\u8D0F\u8D0D\u8D10\u9F4E\u8D13\u8CCD\u8D14\u8D16\u8D67\u8D6D\u8D71\u8D73\u8D81\u8D99\u8DC2\u8DBE\u8DBA\u8DCF\u8DDA\u8DD6\u8DCC\u8DDB\u8DCB\u8DEA\u8DEB\u8DDF\u8DE3\u8DFC\u8E08\u8E09\u8DFF\u8E1D\u8E1E\u8E10\u8E1F\u8E42\u8E35\u8E30\u8E34\u8E4A"],
["e740", "\u8E47\u8E49\u8E4C\u8E50\u8E48\u8E59\u8E64\u8E60\u8E2A\u8E63\u8E55\u8E76\u8E72\u8E7C\u8E81\u8E87\u8E85\u8E84\u8E8B\u8E8A\u8E93\u8E91\u8E94\u8E99\u8EAA\u8EA1\u8EAC\u8EB0\u8EC6\u8EB1\u8EBE\u8EC5\u8EC8\u8ECB\u8EDB\u8EE3\u8EFC\u8EFB\u8EEB\u8EFE\u8F0A\u8F05\u8F15\u8F12\u8F19\u8F13\u8F1C\u8F1F\u8F1B\u8F0C\u8F26\u8F33\u8F3B\u8F39\u8F45\u8F42\u8F3E\u8F4C\u8F49\u8F46\u8F4E\u8F57\u8F5C"],
["e780", "\u8F62\u8F63\u8F64\u8F9C\u8F9F\u8FA3\u8FAD\u8FAF\u8FB7\u8FDA\u8FE5\u8FE2\u8FEA\u8FEF\u9087\u8FF4\u9005\u8FF9\u8FFA\u9011\u9015\u9021\u900D\u901E\u9016\u900B\u9027\u9036\u9035\u9039\u8FF8\u904F\u9050\u9051\u9052\u900E\u9049\u903E\u9056\u9058\u905E\u9068\u906F\u9076\u96A8\u9072\u9082\u907D\u9081\u9080\u908A\u9089\u908F\u90A8\u90AF\u90B1\u90B5\u90E2\u90E4\u6248\u90DB\u9102\u9112\u9119\u9132\u9130\u914A\u9156\u9158\u9163\u9165\u9169\u9173\u9172\u918B\u9189\u9182\u91A2\u91AB\u91AF\u91AA\u91B5\u91B4\u91BA\u91C0\u91C1\u91C9\u91CB\u91D0\u91D6\u91DF\u91E1\u91DB\u91FC\u91F5\u91F6\u921E\u91FF\u9214\u922C\u9215\u9211\u925E\u9257\u9245\u9249\u9264\u9248\u9295\u923F\u924B\u9250\u929C\u9296\u9293\u929B\u925A\u92CF\u92B9\u92B7\u92E9\u930F\u92FA\u9344\u932E"],
["e840", "\u9319\u9322\u931A\u9323\u933A\u9335\u933B\u935C\u9360\u937C\u936E\u9356\u93B0\u93AC\u93AD\u9394\u93B9\u93D6\u93D7\u93E8\u93E5\u93D8\u93C3\u93DD\u93D0\u93C8\u93E4\u941A\u9414\u9413\u9403\u9407\u9410\u9436\u942B\u9435\u9421\u943A\u9441\u9452\u9444\u945B\u9460\u9462\u945E\u946A\u9229\u9470\u9475\u9477\u947D\u945A\u947C\u947E\u9481\u947F\u9582\u9587\u958A\u9594\u9596\u9598\u9599"],
["e880", "\u95A0\u95A8\u95A7\u95AD\u95BC\u95BB\u95B9\u95BE\u95CA\u6FF6\u95C3\u95CD\u95CC\u95D5\u95D4\u95D6\u95DC\u95E1\u95E5\u95E2\u9621\u9628\u962E\u962F\u9642\u964C\u964F\u964B\u9677\u965C\u965E\u965D\u965F\u9666\u9672\u966C\u968D\u9698\u9695\u9697\u96AA\u96A7\u96B1\u96B2\u96B0\u96B4\u96B6\u96B8\u96B9\u96CE\u96CB\u96C9\u96CD\u894D\u96DC\u970D\u96D5\u96F9\u9704\u9706\u9708\u9713\u970E\u9711\u970F\u9716\u9719\u9724\u972A\u9730\u9739\u973D\u973E\u9744\u9746\u9748\u9742\u9749\u975C\u9760\u9764\u9766\u9768\u52D2\u976B\u9771\u9779\u9785\u977C\u9781\u977A\u9786\u978B\u978F\u9790\u979C\u97A8\u97A6\u97A3\u97B3\u97B4\u97C3\u97C6\u97C8\u97CB\u97DC\u97ED\u9F4F\u97F2\u7ADF\u97F6\u97F5\u980F\u980C\u9838\u9824\u9821\u9837\u983D\u9846\u984F\u984B\u986B\u986F\u9870"],
["e940", "\u9871\u9874\u9873\u98AA\u98AF\u98B1\u98B6\u98C4\u98C3\u98C6\u98E9\u98EB\u9903\u9909\u9912\u9914\u9918\u9921\u991D\u991E\u9924\u9920\u992C\u992E\u993D\u993E\u9942\u9949\u9945\u9950\u994B\u9951\u9952\u994C\u9955\u9997\u9998\u99A5\u99AD\u99AE\u99BC\u99DF\u99DB\u99DD\u99D8\u99D1\u99ED\u99EE\u99F1\u99F2\u99FB\u99F8\u9A01\u9A0F\u9A05\u99E2\u9A19\u9A2B\u9A37\u9A45\u9A42\u9A40\u9A43"],
["e980", "\u9A3E\u9A55\u9A4D\u9A5B\u9A57\u9A5F\u9A62\u9A65\u9A64\u9A69\u9A6B\u9A6A\u9AAD\u9AB0\u9ABC\u9AC0\u9ACF\u9AD1\u9AD3\u9AD4\u9ADE\u9ADF\u9AE2\u9AE3\u9AE6\u9AEF\u9AEB\u9AEE\u9AF4\u9AF1\u9AF7\u9AFB\u9B06\u9B18\u9B1A\u9B1F\u9B22\u9B23\u9B25\u9B27\u9B28\u9B29\u9B2A\u9B2E\u9B2F\u9B32\u9B44\u9B43\u9B4F\u9B4D\u9B4E\u9B51\u9B58\u9B74\u9B93\u9B83\u9B91\u9B96\u9B97\u9B9F\u9BA0\u9BA8\u9BB4\u9BC0\u9BCA\u9BB9\u9BC6\u9BCF\u9BD1\u9BD2\u9BE3\u9BE2\u9BE4\u9BD4\u9BE1\u9C3A\u9BF2\u9BF1\u9BF0\u9C15\u9C14\u9C09\u9C13\u9C0C\u9C06\u9C08\u9C12\u9C0A\u9C04\u9C2E\u9C1B\u9C25\u9C24\u9C21\u9C30\u9C47\u9C32\u9C46\u9C3E\u9C5A\u9C60\u9C67\u9C76\u9C78\u9CE7\u9CEC\u9CF0\u9D09\u9D08\u9CEB\u9D03\u9D06\u9D2A\u9D26\u9DAF\u9D23\u9D1F\u9D44\u9D15\u9D12\u9D41\u9D3F\u9D3E\u9D46\u9D48"],
["ea40", "\u9D5D\u9D5E\u9D64\u9D51\u9D50\u9D59\u9D72\u9D89\u9D87\u9DAB\u9D6F\u9D7A\u9D9A\u9DA4\u9DA9\u9DB2\u9DC4\u9DC1\u9DBB\u9DB8\u9DBA\u9DC6\u9DCF\u9DC2\u9DD9\u9DD3\u9DF8\u9DE6\u9DED\u9DEF\u9DFD\u9E1A\u9E1B\u9E1E\u9E75\u9E79\u9E7D\u9E81\u9E88\u9E8B\u9E8C\u9E92\u9E95\u9E91\u9E9D\u9EA5\u9EA9\u9EB8\u9EAA\u9EAD\u9761\u9ECC\u9ECE\u9ECF\u9ED0\u9ED4\u9EDC\u9EDE\u9EDD\u9EE0\u9EE5\u9EE8\u9EEF"],
["ea80", "\u9EF4\u9EF6\u9EF7\u9EF9\u9EFB\u9EFC\u9EFD\u9F07\u9F08\u76B7\u9F15\u9F21\u9F2C\u9F3E\u9F4A\u9F52\u9F54\u9F63\u9F5F\u9F60\u9F61\u9F66\u9F67\u9F6C\u9F6A\u9F77\u9F72\u9F76\u9F95\u9F9C\u9FA0\u582F\u69C7\u9059\u7464\u51DC\u7199"],
["ed40", "\u7E8A\u891C\u9348\u9288\u84DC\u4FC9\u70BB\u6631\u68C8\u92F9\u66FB\u5F45\u4E28\u4EE1\u4EFC\u4F00\u4F03\u4F39\u4F56\u4F92\u4F8A\u4F9A\u4F94\u4FCD\u5040\u5022\u4FFF\u501E\u5046\u5070\u5042\u5094\u50F4\u50D8\u514A\u5164\u519D\u51BE\u51EC\u5215\u529C\u52A6\u52C0\u52DB\u5300\u5307\u5324\u5372\u5393\u53B2\u53DD\uFA0E\u549C\u548A\u54A9\u54FF\u5586\u5759\u5765\u57AC\u57C8\u57C7\uFA0F"],
["ed80", "\uFA10\u589E\u58B2\u590B\u5953\u595B\u595D\u5963\u59A4\u59BA\u5B56\u5BC0\u752F\u5BD8\u5BEC\u5C1E\u5CA6\u5CBA\u5CF5\u5D27\u5D53\uFA11\u5D42\u5D6D\u5DB8\u5DB9\u5DD0\u5F21\u5F34\u5F67\u5FB7\u5FDE\u605D\u6085\u608A\u60DE\u60D5\u6120\u60F2\u6111\u6137\u6130\u6198\u6213\u62A6\u63F5\u6460\u649D\u64CE\u654E\u6600\u6615\u663B\u6609\u662E\u661E\u6624\u6665\u6657\u6659\uFA12\u6673\u6699\u66A0\u66B2\u66BF\u66FA\u670E\uF929\u6766\u67BB\u6852\u67C0\u6801\u6844\u68CF\uFA13\u6968\uFA14\u6998\u69E2\u6A30\u6A6B\u6A46\u6A73\u6A7E\u6AE2\u6AE4\u6BD6\u6C3F\u6C5C\u6C86\u6C6F\u6CDA\u6D04\u6D87\u6D6F\u6D96\u6DAC\u6DCF\u6DF8\u6DF2\u6DFC\u6E39\u6E5C\u6E27\u6E3C\u6EBF\u6F88\u6FB5\u6FF5\u7005\u7007\u7028\u7085\u70AB\u710F\u7104\u715C\u7146\u7147\uFA15\u71C1\u71FE\u72B1"],
["ee40", "\u72BE\u7324\uFA16\u7377\u73BD\u73C9\u73D6\u73E3\u73D2\u7407\u73F5\u7426\u742A\u7429\u742E\u7462\u7489\u749F\u7501\u756F\u7682\u769C\u769E\u769B\u76A6\uFA17\u7746\u52AF\u7821\u784E\u7864\u787A\u7930\uFA18\uFA19\uFA1A\u7994\uFA1B\u799B\u7AD1\u7AE7\uFA1C\u7AEB\u7B9E\uFA1D\u7D48\u7D5C\u7DB7\u7DA0\u7DD6\u7E52\u7F47\u7FA1\uFA1E\u8301\u8362\u837F\u83C7\u83F6\u8448\u84B4\u8553\u8559"],
["ee80", "\u856B\uFA1F\u85B0\uFA20\uFA21\u8807\u88F5\u8A12\u8A37\u8A79\u8AA7\u8ABE\u8ADF\uFA22\u8AF6\u8B53\u8B7F\u8CF0\u8CF4\u8D12\u8D76\uFA23\u8ECF\uFA24\uFA25\u9067\u90DE\uFA26\u9115\u9127\u91DA\u91D7\u91DE\u91ED\u91EE\u91E4\u91E5\u9206\u9210\u920A\u923A\u9240\u923C\u924E\u9259\u9251\u9239\u9267\u92A7\u9277\u9278\u92E7\u92D7\u92D9\u92D0\uFA27\u92D5\u92E0\u92D3\u9325\u9321\u92FB\uFA28\u931E\u92FF\u931D\u9302\u9370\u9357\u93A4\u93C6\u93DE\u93F8\u9431\u9445\u9448\u9592\uF9DC\uFA29\u969D\u96AF\u9733\u973B\u9743\u974D\u974F\u9751\u9755\u9857\u9865\uFA2A\uFA2B\u9927\uFA2C\u999E\u9A4E\u9AD9\u9ADC\u9B75\u9B72\u9B8F\u9BB1\u9BBB\u9C00\u9D70\u9D6B\uFA2D\u9E19\u9ED1"],
["eeef", "\u2170", 9, "\uFFE2\uFFE4\uFF07\uFF02"],
["f040", "\uE000", 62],
["f080", "\uE03F", 124],
["f140", "\uE0BC", 62],
["f180", "\uE0FB", 124],
["f240", "\uE178", 62],
["f280", "\uE1B7", 124],
["f340", "\uE234", 62],
["f380", "\uE273", 124],
["f440", "\uE2F0", 62],
["f480", "\uE32F", 124],
["f540", "\uE3AC", 62],
["f580", "\uE3EB", 124],
["f640", "\uE468", 62],
["f680", "\uE4A7", 124],
["f740", "\uE524", 62],
["f780", "\uE563", 124],
["f840", "\uE5E0", 62],
["f880", "\uE61F", 124],
["f940", "\uE69C"],
["fa40", "\u2170", 9, "\u2160", 9, "\uFFE2\uFFE4\uFF07\uFF02\u3231\u2116\u2121\u2235\u7E8A\u891C\u9348\u9288\u84DC\u4FC9\u70BB\u6631\u68C8\u92F9\u66FB\u5F45\u4E28\u4EE1\u4EFC\u4F00\u4F03\u4F39\u4F56\u4F92\u4F8A\u4F9A\u4F94\u4FCD\u5040\u5022\u4FFF\u501E\u5046\u5070\u5042\u5094\u50F4\u50D8\u514A"],
["fa80", "\u5164\u519D\u51BE\u51EC\u5215\u529C\u52A6\u52C0\u52DB\u5300\u5307\u5324\u5372\u5393\u53B2\u53DD\uFA0E\u549C\u548A\u54A9\u54FF\u5586\u5759\u5765\u57AC\u57C8\u57C7\uFA0F\uFA10\u589E\u58B2\u590B\u5953\u595B\u595D\u5963\u59A4\u59BA\u5B56\u5BC0\u752F\u5BD8\u5BEC\u5C1E\u5CA6\u5CBA\u5CF5\u5D27\u5D53\uFA11\u5D42\u5D6D\u5DB8\u5DB9\u5DD0\u5F21\u5F34\u5F67\u5FB7\u5FDE\u605D\u6085\u608A\u60DE\u60D5\u6120\u60F2\u6111\u6137\u6130\u6198\u6213\u62A6\u63F5\u6460\u649D\u64CE\u654E\u6600\u6615\u663B\u6609\u662E\u661E\u6624\u6665\u6657\u6659\uFA12\u6673\u6699\u66A0\u66B2\u66BF\u66FA\u670E\uF929\u6766\u67BB\u6852\u67C0\u6801\u6844\u68CF\uFA13\u6968\uFA14\u6998\u69E2\u6A30\u6A6B\u6A46\u6A73\u6A7E\u6AE2\u6AE4\u6BD6\u6C3F\u6C5C\u6C86\u6C6F\u6CDA\u6D04\u6D87\u6D6F"],
["fb40", "\u6D96\u6DAC\u6DCF\u6DF8\u6DF2\u6DFC\u6E39\u6E5C\u6E27\u6E3C\u6EBF\u6F88\u6FB5\u6FF5\u7005\u7007\u7028\u7085\u70AB\u710F\u7104\u715C\u7146\u7147\uFA15\u71C1\u71FE\u72B1\u72BE\u7324\uFA16\u7377\u73BD\u73C9\u73D6\u73E3\u73D2\u7407\u73F5\u7426\u742A\u7429\u742E\u7462\u7489\u749F\u7501\u756F\u7682\u769C\u769E\u769B\u76A6\uFA17\u7746\u52AF\u7821\u784E\u7864\u787A\u7930\uFA18\uFA19"],
["fb80", "\uFA1A\u7994\uFA1B\u799B\u7AD1\u7AE7\uFA1C\u7AEB\u7B9E\uFA1D\u7D48\u7D5C\u7DB7\u7DA0\u7DD6\u7E52\u7F47\u7FA1\uFA1E\u8301\u8362\u837F\u83C7\u83F6\u8448\u84B4\u8553\u8559\u856B\uFA1F\u85B0\uFA20\uFA21\u8807\u88F5\u8A12\u8A37\u8A79\u8AA7\u8ABE\u8ADF\uFA22\u8AF6\u8B53\u8B7F\u8CF0\u8CF4\u8D12\u8D76\uFA23\u8ECF\uFA24\uFA25\u9067\u90DE\uFA26\u9115\u9127\u91DA\u91D7\u91DE\u91ED\u91EE\u91E4\u91E5\u9206\u9210\u920A\u923A\u9240\u923C\u924E\u9259\u9251\u9239\u9267\u92A7\u9277\u9278\u92E7\u92D7\u92D9\u92D0\uFA27\u92D5\u92E0\u92D3\u9325\u9321\u92FB\uFA28\u931E\u92FF\u931D\u9302\u9370\u9357\u93A4\u93C6\u93DE\u93F8\u9431\u9445\u9448\u9592\uF9DC\uFA29\u969D\u96AF\u9733\u973B\u9743\u974D\u974F\u9751\u9755\u9857\u9865\uFA2A\uFA2B\u9927\uFA2C\u999E\u9A4E\u9AD9"],
["fc40", "\u9ADC\u9B75\u9B72\u9B8F\u9BB1\u9BBB\u9C00\u9D70\u9D6B\uFA2D\u9E19\u9ED1"]
];
}
});
var require_eucjp22 = __commonJS2({
"node_modules/body-parser/node_modules/iconv-lite/encodings/tables/eucjp.json"(exports2, module2) {
module2.exports = [
["0", "\0", 127],
["8ea1", "\uFF61", 62],
["a1a1", "\u3000\u3001\u3002\uFF0C\uFF0E\u30FB\uFF1A\uFF1B\uFF1F\uFF01\u309B\u309C\xB4\uFF40\xA8\uFF3E\uFFE3\uFF3F\u30FD\u30FE\u309D\u309E\u3003\u4EDD\u3005\u3006\u3007\u30FC\u2015\u2010\uFF0F\uFF3C\uFF5E\u2225\uFF5C\u2026\u2025\u2018\u2019\u201C\u201D\uFF08\uFF09\u3014\u3015\uFF3B\uFF3D\uFF5B\uFF5D\u3008", 9, "\uFF0B\uFF0D\xB1\xD7\xF7\uFF1D\u2260\uFF1C\uFF1E\u2266\u2267\u221E\u2234\u2642\u2640\xB0\u2032\u2033\u2103\uFFE5\uFF04\uFFE0\uFFE1\uFF05\uFF03\uFF06\uFF0A\uFF20\xA7\u2606\u2605\u25CB\u25CF\u25CE\u25C7"],
["a2a1", "\u25C6\u25A1\u25A0\u25B3\u25B2\u25BD\u25BC\u203B\u3012\u2192\u2190\u2191\u2193\u3013"],
["a2ba", "\u2208\u220B\u2286\u2287\u2282\u2283\u222A\u2229"],
["a2ca", "\u2227\u2228\uFFE2\u21D2\u21D4\u2200\u2203"],
["a2dc", "\u2220\u22A5\u2312\u2202\u2207\u2261\u2252\u226A\u226B\u221A\u223D\u221D\u2235\u222B\u222C"],
["a2f2", "\u212B\u2030\u266F\u266D\u266A\u2020\u2021\xB6"],
["a2fe", "\u25EF"],
["a3b0", "\uFF10", 9],
["a3c1", "\uFF21", 25],
["a3e1", "\uFF41", 25],
["a4a1", "\u3041", 82],
["a5a1", "\u30A1", 85],
["a6a1", "\u0391", 16, "\u03A3", 6],
["a6c1", "\u03B1", 16, "\u03C3", 6],
["a7a1", "\u0410", 5, "\u0401\u0416", 25],
["a7d1", "\u0430", 5, "\u0451\u0436", 25],
["a8a1", "\u2500\u2502\u250C\u2510\u2518\u2514\u251C\u252C\u2524\u2534\u253C\u2501\u2503\u250F\u2513\u251B\u2517\u2523\u2533\u252B\u253B\u254B\u2520\u252F\u2528\u2537\u253F\u251D\u2530\u2525\u2538\u2542"],
["ada1", "\u2460", 19, "\u2160", 9],
["adc0", "\u3349\u3314\u3322\u334D\u3318\u3327\u3303\u3336\u3351\u3357\u330D\u3326\u3323\u332B\u334A\u333B\u339C\u339D\u339E\u338E\u338F\u33C4\u33A1"],
["addf", "\u337B\u301D\u301F\u2116\u33CD\u2121\u32A4", 4, "\u3231\u3232\u3239\u337E\u337D\u337C\u2252\u2261\u222B\u222E\u2211\u221A\u22A5\u2220\u221F\u22BF\u2235\u2229\u222A"],
["b0a1", "\u4E9C\u5516\u5A03\u963F\u54C0\u611B\u6328\u59F6\u9022\u8475\u831C\u7A50\u60AA\u63E1\u6E25\u65ED\u8466\u82A6\u9BF5\u6893\u5727\u65A1\u6271\u5B9B\u59D0\u867B\u98F4\u7D62\u7DBE\u9B8E\u6216\u7C9F\u88B7\u5B89\u5EB5\u6309\u6697\u6848\u95C7\u978D\u674F\u4EE5\u4F0A\u4F4D\u4F9D\u5049\u56F2\u5937\u59D4\u5A01\u5C09\u60DF\u610F\u6170\u6613\u6905\u70BA\u754F\u7570\u79FB\u7DAD\u7DEF\u80C3\u840E\u8863\u8B02\u9055\u907A\u533B\u4E95\u4EA5\u57DF\u80B2\u90C1\u78EF\u4E00\u58F1\u6EA2\u9038\u7A32\u8328\u828B\u9C2F\u5141\u5370\u54BD\u54E1\u56E0\u59FB\u5F15\u98F2\u6DEB\u80E4\u852D"],
["b1a1", "\u9662\u9670\u96A0\u97FB\u540B\u53F3\u5B87\u70CF\u7FBD\u8FC2\u96E8\u536F\u9D5C\u7ABA\u4E11\u7893\u81FC\u6E26\u5618\u5504\u6B1D\u851A\u9C3B\u59E5\u53A9\u6D66\u74DC\u958F\u5642\u4E91\u904B\u96F2\u834F\u990C\u53E1\u55B6\u5B30\u5F71\u6620\u66F3\u6804\u6C38\u6CF3\u6D29\u745B\u76C8\u7A4E\u9834\u82F1\u885B\u8A60\u92ED\u6DB2\u75AB\u76CA\u99C5\u60A6\u8B01\u8D8A\u95B2\u698E\u53AD\u5186\u5712\u5830\u5944\u5BB4\u5EF6\u6028\u63A9\u63F4\u6CBF\u6F14\u708E\u7114\u7159\u71D5\u733F\u7E01\u8276\u82D1\u8597\u9060\u925B\u9D1B\u5869\u65BC\u6C5A\u7525\u51F9\u592E\u5965\u5F80\u5FDC"],
["b2a1", "\u62BC\u65FA\u6A2A\u6B27\u6BB4\u738B\u7FC1\u8956\u9D2C\u9D0E\u9EC4\u5CA1\u6C96\u837B\u5104\u5C4B\u61B6\u81C6\u6876\u7261\u4E59\u4FFA\u5378\u6069\u6E29\u7A4F\u97F3\u4E0B\u5316\u4EEE\u4F55\u4F3D\u4FA1\u4F73\u52A0\u53EF\u5609\u590F\u5AC1\u5BB6\u5BE1\u79D1\u6687\u679C\u67B6\u6B4C\u6CB3\u706B\u73C2\u798D\u79BE\u7A3C\u7B87\u82B1\u82DB\u8304\u8377\u83EF\u83D3\u8766\u8AB2\u5629\u8CA8\u8FE6\u904E\u971E\u868A\u4FC4\u5CE8\u6211\u7259\u753B\u81E5\u82BD\u86FE\u8CC0\u96C5\u9913\u99D5\u4ECB\u4F1A\u89E3\u56DE\u584A\u58CA\u5EFB\u5FEB\u602A\u6094\u6062\u61D0\u6212\u62D0\u6539"],
["b3a1", "\u9B41\u6666\u68B0\u6D77\u7070\u754C\u7686\u7D75\u82A5\u87F9\u958B\u968E\u8C9D\u51F1\u52BE\u5916\u54B3\u5BB3\u5D16\u6168\u6982\u6DAF\u788D\u84CB\u8857\u8A72\u93A7\u9AB8\u6D6C\u99A8\u86D9\u57A3\u67FF\u86CE\u920E\u5283\u5687\u5404\u5ED3\u62E1\u64B9\u683C\u6838\u6BBB\u7372\u78BA\u7A6B\u899A\u89D2\u8D6B\u8F03\u90ED\u95A3\u9694\u9769\u5B66\u5CB3\u697D\u984D\u984E\u639B\u7B20\u6A2B\u6A7F\u68B6\u9C0D\u6F5F\u5272\u559D\u6070\u62EC\u6D3B\u6E07\u6ED1\u845B\u8910\u8F44\u4E14\u9C39\u53F6\u691B\u6A3A\u9784\u682A\u515C\u7AC3\u84B2\u91DC\u938C\u565B\u9D28\u6822\u8305\u8431"],
["b4a1", "\u7CA5\u5208\u82C5\u74E6\u4E7E\u4F83\u51A0\u5BD2\u520A\u52D8\u52E7\u5DFB\u559A\u582A\u59E6\u5B8C\u5B98\u5BDB\u5E72\u5E79\u60A3\u611F\u6163\u61BE\u63DB\u6562\u67D1\u6853\u68FA\u6B3E\u6B53\u6C57\u6F22\u6F97\u6F45\u74B0\u7518\u76E3\u770B\u7AFF\u7BA1\u7C21\u7DE9\u7F36\u7FF0\u809D\u8266\u839E\u89B3\u8ACC\u8CAB\u9084\u9451\u9593\u9591\u95A2\u9665\u97D3\u9928\u8218\u4E38\u542B\u5CB8\u5DCC\u73A9\u764C\u773C\u5CA9\u7FEB\u8D0B\u96C1\u9811\u9854\u9858\u4F01\u4F0E\u5371\u559C\u5668\u57FA\u5947\u5B09\u5BC4\u5C90\u5E0C\u5E7E\u5FCC\u63EE\u673A\u65D7\u65E2\u671F\u68CB\u68C4"],
["b5a1", "\u6A5F\u5E30\u6BC5\u6C17\u6C7D\u757F\u7948\u5B63\u7A00\u7D00\u5FBD\u898F\u8A18\u8CB4\u8D77\u8ECC\u8F1D\u98E2\u9A0E\u9B3C\u4E80\u507D\u5100\u5993\u5B9C\u622F\u6280\u64EC\u6B3A\u72A0\u7591\u7947\u7FA9\u87FB\u8ABC\u8B70\u63AC\u83CA\u97A0\u5409\u5403\u55AB\u6854\u6A58\u8A70\u7827\u6775\u9ECD\u5374\u5BA2\u811A\u8650\u9006\u4E18\u4E45\u4EC7\u4F11\u53CA\u5438\u5BAE\u5F13\u6025\u6551\u673D\u6C42\u6C72\u6CE3\u7078\u7403\u7A76\u7AAE\u7B08\u7D1A\u7CFE\u7D66\u65E7\u725B\u53BB\u5C45\u5DE8\u62D2\u62E0\u6319\u6E20\u865A\u8A31\u8DDD\u92F8\u6F01\u79A6\u9B5A\u4EA8\u4EAB\u4EAC"],
["b6a1", "\u4F9B\u4FA0\u50D1\u5147\u7AF6\u5171\u51F6\u5354\u5321\u537F\u53EB\u55AC\u5883\u5CE1\u5F37\u5F4A\u602F\u6050\u606D\u631F\u6559\u6A4B\u6CC1\u72C2\u72ED\u77EF\u80F8\u8105\u8208\u854E\u90F7\u93E1\u97FF\u9957\u9A5A\u4EF0\u51DD\u5C2D\u6681\u696D\u5C40\u66F2\u6975\u7389\u6850\u7C81\u50C5\u52E4\u5747\u5DFE\u9326\u65A4\u6B23\u6B3D\u7434\u7981\u79BD\u7B4B\u7DCA\u82B9\u83CC\u887F\u895F\u8B39\u8FD1\u91D1\u541F\u9280\u4E5D\u5036\u53E5\u533A\u72D7\u7396\u77E9\u82E6\u8EAF\u99C6\u99C8\u99D2\u5177\u611A\u865E\u55B0\u7A7A\u5076\u5BD3\u9047\u9685\u4E32\u6ADB\u91E7\u5C51\u5C48"],
["b7a1", "\u6398\u7A9F\u6C93\u9774\u8F61\u7AAA\u718A\u9688\u7C82\u6817\u7E70\u6851\u936C\u52F2\u541B\u85AB\u8A13\u7FA4\u8ECD\u90E1\u5366\u8888\u7941\u4FC2\u50BE\u5211\u5144\u5553\u572D\u73EA\u578B\u5951\u5F62\u5F84\u6075\u6176\u6167\u61A9\u63B2\u643A\u656C\u666F\u6842\u6E13\u7566\u7A3D\u7CFB\u7D4C\u7D99\u7E4B\u7F6B\u830E\u834A\u86CD\u8A08\u8A63\u8B66\u8EFD\u981A\u9D8F\u82B8\u8FCE\u9BE8\u5287\u621F\u6483\u6FC0\u9699\u6841\u5091\u6B20\u6C7A\u6F54\u7A74\u7D50\u8840\u8A23\u6708\u4EF6\u5039\u5026\u5065\u517C\u5238\u5263\u55A7\u570F\u5805\u5ACC\u5EFA\u61B2\u61F8\u62F3\u6372"],
["b8a1", "\u691C\u6A29\u727D\u72AC\u732E\u7814\u786F\u7D79\u770C\u80A9\u898B\u8B19\u8CE2\u8ED2\u9063\u9375\u967A\u9855\u9A13\u9E78\u5143\u539F\u53B3\u5E7B\u5F26\u6E1B\u6E90\u7384\u73FE\u7D43\u8237\u8A00\u8AFA\u9650\u4E4E\u500B\u53E4\u547C\u56FA\u59D1\u5B64\u5DF1\u5EAB\u5F27\u6238\u6545\u67AF\u6E56\u72D0\u7CCA\u88B4\u80A1\u80E1\u83F0\u864E\u8A87\u8DE8\u9237\u96C7\u9867\u9F13\u4E94\u4E92\u4F0D\u5348\u5449\u543E\u5A2F\u5F8C\u5FA1\u609F\u68A7\u6A8E\u745A\u7881\u8A9E\u8AA4\u8B77\u9190\u4E5E\u9BC9\u4EA4\u4F7C\u4FAF\u5019\u5016\u5149\u516C\u529F\u52B9\u52FE\u539A\u53E3\u5411"],
["b9a1", "\u540E\u5589\u5751\u57A2\u597D\u5B54\u5B5D\u5B8F\u5DE5\u5DE7\u5DF7\u5E78\u5E83\u5E9A\u5EB7\u5F18\u6052\u614C\u6297\u62D8\u63A7\u653B\u6602\u6643\u66F4\u676D\u6821\u6897\u69CB\u6C5F\u6D2A\u6D69\u6E2F\u6E9D\u7532\u7687\u786C\u7A3F\u7CE0\u7D05\u7D18\u7D5E\u7DB1\u8015\u8003\u80AF\u80B1\u8154\u818F\u822A\u8352\u884C\u8861\u8B1B\u8CA2\u8CFC\u90CA\u9175\u9271\u783F\u92FC\u95A4\u964D\u9805\u9999\u9AD8\u9D3B\u525B\u52AB\u53F7\u5408\u58D5\u62F7\u6FE0\u8C6A\u8F5F\u9EB9\u514B\u523B\u544A\u56FD\u7A40\u9177\u9D60\u9ED2\u7344\u6F09\u8170\u7511\u5FFD\u60DA\u9AA8\u72DB\u8FBC"],
["baa1", "\u6B64\u9803\u4ECA\u56F0\u5764\u58BE\u5A5A\u6068\u61C7\u660F\u6606\u6839\u68B1\u6DF7\u75D5\u7D3A\u826E\u9B42\u4E9B\u4F50\u53C9\u5506\u5D6F\u5DE6\u5DEE\u67FB\u6C99\u7473\u7802\u8A50\u9396\u88DF\u5750\u5EA7\u632B\u50B5\u50AC\u518D\u6700\u54C9\u585E\u59BB\u5BB0\u5F69\u624D\u63A1\u683D\u6B73\u6E08\u707D\u91C7\u7280\u7815\u7826\u796D\u658E\u7D30\u83DC\u88C1\u8F09\u969B\u5264\u5728\u6750\u7F6A\u8CA1\u51B4\u5742\u962A\u583A\u698A\u80B4\u54B2\u5D0E\u57FC\u7895\u9DFA\u4F5C\u524A\u548B\u643E\u6628\u6714\u67F5\u7A84\u7B56\u7D22\u932F\u685C\u9BAD\u7B39\u5319\u518A\u5237"],
["bba1", "\u5BDF\u62F6\u64AE\u64E6\u672D\u6BBA\u85A9\u96D1\u7690\u9BD6\u634C\u9306\u9BAB\u76BF\u6652\u4E09\u5098\u53C2\u5C71\u60E8\u6492\u6563\u685F\u71E6\u73CA\u7523\u7B97\u7E82\u8695\u8B83\u8CDB\u9178\u9910\u65AC\u66AB\u6B8B\u4ED5\u4ED4\u4F3A\u4F7F\u523A\u53F8\u53F2\u55E3\u56DB\u58EB\u59CB\u59C9\u59FF\u5B50\u5C4D\u5E02\u5E2B\u5FD7\u601D\u6307\u652F\u5B5C\u65AF\u65BD\u65E8\u679D\u6B62\u6B7B\u6C0F\u7345\u7949\u79C1\u7CF8\u7D19\u7D2B\u80A2\u8102\u81F3\u8996\u8A5E\u8A69\u8A66\u8A8C\u8AEE\u8CC7\u8CDC\u96CC\u98FC\u6B6F\u4E8B\u4F3C\u4F8D\u5150\u5B57\u5BFA\u6148\u6301\u6642"],
["bca1", "\u6B21\u6ECB\u6CBB\u723E\u74BD\u75D4\u78C1\u793A\u800C\u8033\u81EA\u8494\u8F9E\u6C50\u9E7F\u5F0F\u8B58\u9D2B\u7AFA\u8EF8\u5B8D\u96EB\u4E03\u53F1\u57F7\u5931\u5AC9\u5BA4\u6089\u6E7F\u6F06\u75BE\u8CEA\u5B9F\u8500\u7BE0\u5072\u67F4\u829D\u5C61\u854A\u7E1E\u820E\u5199\u5C04\u6368\u8D66\u659C\u716E\u793E\u7D17\u8005\u8B1D\u8ECA\u906E\u86C7\u90AA\u501F\u52FA\u5C3A\u6753\u707C\u7235\u914C\u91C8\u932B\u82E5\u5BC2\u5F31\u60F9\u4E3B\u53D6\u5B88\u624B\u6731\u6B8A\u72E9\u73E0\u7A2E\u816B\u8DA3\u9152\u9996\u5112\u53D7\u546A\u5BFF\u6388\u6A39\u7DAC\u9700\u56DA\u53CE\u5468"],
["bda1", "\u5B97\u5C31\u5DDE\u4FEE\u6101\u62FE\u6D32\u79C0\u79CB\u7D42\u7E4D\u7FD2\u81ED\u821F\u8490\u8846\u8972\u8B90\u8E74\u8F2F\u9031\u914B\u916C\u96C6\u919C\u4EC0\u4F4F\u5145\u5341\u5F93\u620E\u67D4\u6C41\u6E0B\u7363\u7E26\u91CD\u9283\u53D4\u5919\u5BBF\u6DD1\u795D\u7E2E\u7C9B\u587E\u719F\u51FA\u8853\u8FF0\u4FCA\u5CFB\u6625\u77AC\u7AE3\u821C\u99FF\u51C6\u5FAA\u65EC\u696F\u6B89\u6DF3\u6E96\u6F64\u76FE\u7D14\u5DE1\u9075\u9187\u9806\u51E6\u521D\u6240\u6691\u66D9\u6E1A\u5EB6\u7DD2\u7F72\u66F8\u85AF\u85F7\u8AF8\u52A9\u53D9\u5973\u5E8F\u5F90\u6055\u92E4\u9664\u50B7\u511F"],
["bea1", "\u52DD\u5320\u5347\u53EC\u54E8\u5546\u5531\u5617\u5968\u59BE\u5A3C\u5BB5\u5C06\u5C0F\u5C11\u5C1A\u5E84\u5E8A\u5EE0\u5F70\u627F\u6284\u62DB\u638C\u6377\u6607\u660C\u662D\u6676\u677E\u68A2\u6A1F\u6A35\u6CBC\u6D88\u6E09\u6E58\u713C\u7126\u7167\u75C7\u7701\u785D\u7901\u7965\u79F0\u7AE0\u7B11\u7CA7\u7D39\u8096\u83D6\u848B\u8549\u885D\u88F3\u8A1F\u8A3C\u8A54\u8A73\u8C61\u8CDE\u91A4\u9266\u937E\u9418\u969C\u9798\u4E0A\u4E08\u4E1E\u4E57\u5197\u5270\u57CE\u5834\u58CC\u5B22\u5E38\u60C5\u64FE\u6761\u6756\u6D44\u72B6\u7573\u7A63\u84B8\u8B72\u91B8\u9320\u5631\u57F4\u98FE"],
["bfa1", "\u62ED\u690D\u6B96\u71ED\u7E54\u8077\u8272\u89E6\u98DF\u8755\u8FB1\u5C3B\u4F38\u4FE1\u4FB5\u5507\u5A20\u5BDD\u5BE9\u5FC3\u614E\u632F\u65B0\u664B\u68EE\u699B\u6D78\u6DF1\u7533\u75B9\u771F\u795E\u79E6\u7D33\u81E3\u82AF\u85AA\u89AA\u8A3A\u8EAB\u8F9B\u9032\u91DD\u9707\u4EBA\u4EC1\u5203\u5875\u58EC\u5C0B\u751A\u5C3D\u814E\u8A0A\u8FC5\u9663\u976D\u7B25\u8ACF\u9808\u9162\u56F3\u53A8\u9017\u5439\u5782\u5E25\u63A8\u6C34\u708A\u7761\u7C8B\u7FE0\u8870\u9042\u9154\u9310\u9318\u968F\u745E\u9AC4\u5D07\u5D69\u6570\u67A2\u8DA8\u96DB\u636E\u6749\u6919\u83C5\u9817\u96C0\u88FE"],
["c0a1", "\u6F84\u647A\u5BF8\u4E16\u702C\u755D\u662F\u51C4\u5236\u52E2\u59D3\u5F81\u6027\u6210\u653F\u6574\u661F\u6674\u68F2\u6816\u6B63\u6E05\u7272\u751F\u76DB\u7CBE\u8056\u58F0\u88FD\u897F\u8AA0\u8A93\u8ACB\u901D\u9192\u9752\u9759\u6589\u7A0E\u8106\u96BB\u5E2D\u60DC\u621A\u65A5\u6614\u6790\u77F3\u7A4D\u7C4D\u7E3E\u810A\u8CAC\u8D64\u8DE1\u8E5F\u78A9\u5207\u62D9\u63A5\u6442\u6298\u8A2D\u7A83\u7BC0\u8AAC\u96EA\u7D76\u820C\u8749\u4ED9\u5148\u5343\u5360\u5BA3\u5C02\u5C16\u5DDD\u6226\u6247\u64B0\u6813\u6834\u6CC9\u6D45\u6D17\u67D3\u6F5C\u714E\u717D\u65CB\u7A7F\u7BAD\u7DDA"],
["c1a1", "\u7E4A\u7FA8\u817A\u821B\u8239\u85A6\u8A6E\u8CCE\u8DF5\u9078\u9077\u92AD\u9291\u9583\u9BAE\u524D\u5584\u6F38\u7136\u5168\u7985\u7E55\u81B3\u7CCE\u564C\u5851\u5CA8\u63AA\u66FE\u66FD\u695A\u72D9\u758F\u758E\u790E\u7956\u79DF\u7C97\u7D20\u7D44\u8607\u8A34\u963B\u9061\u9F20\u50E7\u5275\u53CC\u53E2\u5009\u55AA\u58EE\u594F\u723D\u5B8B\u5C64\u531D\u60E3\u60F3\u635C\u6383\u633F\u63BB\u64CD\u65E9\u66F9\u5DE3\u69CD\u69FD\u6F15\u71E5\u4E89\u75E9\u76F8\u7A93\u7CDF\u7DCF\u7D9C\u8061\u8349\u8358\u846C\u84BC\u85FB\u88C5\u8D70\u9001\u906D\u9397\u971C\u9A12\u50CF\u5897\u618E"],
["c2a1", "\u81D3\u8535\u8D08\u9020\u4FC3\u5074\u5247\u5373\u606F\u6349\u675F\u6E2C\u8DB3\u901F\u4FD7\u5C5E\u8CCA\u65CF\u7D9A\u5352\u8896\u5176\u63C3\u5B58\u5B6B\u5C0A\u640D\u6751\u905C\u4ED6\u591A\u592A\u6C70\u8A51\u553E\u5815\u59A5\u60F0\u6253\u67C1\u8235\u6955\u9640\u99C4\u9A28\u4F53\u5806\u5BFE\u8010\u5CB1\u5E2F\u5F85\u6020\u614B\u6234\u66FF\u6CF0\u6EDE\u80CE\u817F\u82D4\u888B\u8CB8\u9000\u902E\u968A\u9EDB\u9BDB\u4EE3\u53F0\u5927\u7B2C\u918D\u984C\u9DF9\u6EDD\u7027\u5353\u5544\u5B85\u6258\u629E\u62D3\u6CA2\u6FEF\u7422\u8A17\u9438\u6FC1\u8AFE\u8338\u51E7\u86F8\u53EA"],
["c3a1", "\u53E9\u4F46\u9054\u8FB0\u596A\u8131\u5DFD\u7AEA\u8FBF\u68DA\u8C37\u72F8\u9C48\u6A3D\u8AB0\u4E39\u5358\u5606\u5766\u62C5\u63A2\u65E6\u6B4E\u6DE1\u6E5B\u70AD\u77ED\u7AEF\u7BAA\u7DBB\u803D\u80C6\u86CB\u8A95\u935B\u56E3\u58C7\u5F3E\u65AD\u6696\u6A80\u6BB5\u7537\u8AC7\u5024\u77E5\u5730\u5F1B\u6065\u667A\u6C60\u75F4\u7A1A\u7F6E\u81F4\u8718\u9045\u99B3\u7BC9\u755C\u7AF9\u7B51\u84C4\u9010\u79E9\u7A92\u8336\u5AE1\u7740\u4E2D\u4EF2\u5B99\u5FE0\u62BD\u663C\u67F1\u6CE8\u866B\u8877\u8A3B\u914E\u92F3\u99D0\u6A17\u7026\u732A\u82E7\u8457\u8CAF\u4E01\u5146\u51CB\u558B\u5BF5"],
["c4a1", "\u5E16\u5E33\u5E81\u5F14\u5F35\u5F6B\u5FB4\u61F2\u6311\u66A2\u671D\u6F6E\u7252\u753A\u773A\u8074\u8139\u8178\u8776\u8ABF\u8ADC\u8D85\u8DF3\u929A\u9577\u9802\u9CE5\u52C5\u6357\u76F4\u6715\u6C88\u73CD\u8CC3\u93AE\u9673\u6D25\u589C\u690E\u69CC\u8FFD\u939A\u75DB\u901A\u585A\u6802\u63B4\u69FB\u4F43\u6F2C\u67D8\u8FBB\u8526\u7DB4\u9354\u693F\u6F70\u576A\u58F7\u5B2C\u7D2C\u722A\u540A\u91E3\u9DB4\u4EAD\u4F4E\u505C\u5075\u5243\u8C9E\u5448\u5824\u5B9A\u5E1D\u5E95\u5EAD\u5EF7\u5F1F\u608C\u62B5\u633A\u63D0\u68AF\u6C40\u7887\u798E\u7A0B\u7DE0\u8247\u8A02\u8AE6\u8E44\u9013"],
["c5a1", "\u90B8\u912D\u91D8\u9F0E\u6CE5\u6458\u64E2\u6575\u6EF4\u7684\u7B1B\u9069\u93D1\u6EBA\u54F2\u5FB9\u64A4\u8F4D\u8FED\u9244\u5178\u586B\u5929\u5C55\u5E97\u6DFB\u7E8F\u751C\u8CBC\u8EE2\u985B\u70B9\u4F1D\u6BBF\u6FB1\u7530\u96FB\u514E\u5410\u5835\u5857\u59AC\u5C60\u5F92\u6597\u675C\u6E21\u767B\u83DF\u8CED\u9014\u90FD\u934D\u7825\u783A\u52AA\u5EA6\u571F\u5974\u6012\u5012\u515A\u51AC\u51CD\u5200\u5510\u5854\u5858\u5957\u5B95\u5CF6\u5D8B\u60BC\u6295\u642D\u6771\u6843\u68BC\u68DF\u76D7\u6DD8\u6E6F\u6D9B\u706F\u71C8\u5F53\u75D8\u7977\u7B49\u7B54\u7B52\u7CD6\u7D71\u5230"],
["c6a1", "\u8463\u8569\u85E4\u8A0E\u8B04\u8C46\u8E0F\u9003\u900F\u9419\u9676\u982D\u9A30\u95D8\u50CD\u52D5\u540C\u5802\u5C0E\u61A7\u649E\u6D1E\u77B3\u7AE5\u80F4\u8404\u9053\u9285\u5CE0\u9D07\u533F\u5F97\u5FB3\u6D9C\u7279\u7763\u79BF\u7BE4\u6BD2\u72EC\u8AAD\u6803\u6A61\u51F8\u7A81\u6934\u5C4A\u9CF6\u82EB\u5BC5\u9149\u701E\u5678\u5C6F\u60C7\u6566\u6C8C\u8C5A\u9041\u9813\u5451\u66C7\u920D\u5948\u90A3\u5185\u4E4D\u51EA\u8599\u8B0E\u7058\u637A\u934B\u6962\u99B4\u7E04\u7577\u5357\u6960\u8EDF\u96E3\u6C5D\u4E8C\u5C3C\u5F10\u8FE9\u5302\u8CD1\u8089\u8679\u5EFF\u65E5\u4E73\u5165"],
["c7a1", "\u5982\u5C3F\u97EE\u4EFB\u598A\u5FCD\u8A8D\u6FE1\u79B0\u7962\u5BE7\u8471\u732B\u71B1\u5E74\u5FF5\u637B\u649A\u71C3\u7C98\u4E43\u5EFC\u4E4B\u57DC\u56A2\u60A9\u6FC3\u7D0D\u80FD\u8133\u81BF\u8FB2\u8997\u86A4\u5DF4\u628A\u64AD\u8987\u6777\u6CE2\u6D3E\u7436\u7834\u5A46\u7F75\u82AD\u99AC\u4FF3\u5EC3\u62DD\u6392\u6557\u676F\u76C3\u724C\u80CC\u80BA\u8F29\u914D\u500D\u57F9\u5A92\u6885\u6973\u7164\u72FD\u8CB7\u58F2\u8CE0\u966A\u9019\u877F\u79E4\u77E7\u8429\u4F2F\u5265\u535A\u62CD\u67CF\u6CCA\u767D\u7B94\u7C95\u8236\u8584\u8FEB\u66DD\u6F20\u7206\u7E1B\u83AB\u99C1\u9EA6"],
["c8a1", "\u51FD\u7BB1\u7872\u7BB8\u8087\u7B48\u6AE8\u5E61\u808C\u7551\u7560\u516B\u9262\u6E8C\u767A\u9197\u9AEA\u4F10\u7F70\u629C\u7B4F\u95A5\u9CE9\u567A\u5859\u86E4\u96BC\u4F34\u5224\u534A\u53CD\u53DB\u5E06\u642C\u6591\u677F\u6C3E\u6C4E\u7248\u72AF\u73ED\u7554\u7E41\u822C\u85E9\u8CA9\u7BC4\u91C6\u7169\u9812\u98EF\u633D\u6669\u756A\u76E4\u78D0\u8543\u86EE\u532A\u5351\u5426\u5983\u5E87\u5F7C\u60B2\u6249\u6279\u62AB\u6590\u6BD4\u6CCC\u75B2\u76AE\u7891\u79D8\u7DCB\u7F77\u80A5\u88AB\u8AB9\u8CBB\u907F\u975E\u98DB\u6A0B\u7C38\u5099\u5C3E\u5FAE\u6787\u6BD8\u7435\u7709\u7F8E"],
["c9a1", "\u9F3B\u67CA\u7A17\u5339\u758B\u9AED\u5F66\u819D\u83F1\u8098\u5F3C\u5FC5\u7562\u7B46\u903C\u6867\u59EB\u5A9B\u7D10\u767E\u8B2C\u4FF5\u5F6A\u6A19\u6C37\u6F02\u74E2\u7968\u8868\u8A55\u8C79\u5EDF\u63CF\u75C5\u79D2\u82D7\u9328\u92F2\u849C\u86ED\u9C2D\u54C1\u5F6C\u658C\u6D5C\u7015\u8CA7\u8CD3\u983B\u654F\u74F6\u4E0D\u4ED8\u57E0\u592B\u5A66\u5BCC\u51A8\u5E03\u5E9C\u6016\u6276\u6577\u65A7\u666E\u6D6E\u7236\u7B26\u8150\u819A\u8299\u8B5C\u8CA0\u8CE6\u8D74\u961C\u9644\u4FAE\u64AB\u6B66\u821E\u8461\u856A\u90E8\u5C01\u6953\u98A8\u847A\u8557\u4F0F\u526F\u5FA9\u5E45\u670D"],
["caa1", "\u798F\u8179\u8907\u8986\u6DF5\u5F17\u6255\u6CB8\u4ECF\u7269\u9B92\u5206\u543B\u5674\u58B3\u61A4\u626E\u711A\u596E\u7C89\u7CDE\u7D1B\u96F0\u6587\u805E\u4E19\u4F75\u5175\u5840\u5E63\u5E73\u5F0A\u67C4\u4E26\u853D\u9589\u965B\u7C73\u9801\u50FB\u58C1\u7656\u78A7\u5225\u77A5\u8511\u7B86\u504F\u5909\u7247\u7BC7\u7DE8\u8FBA\u8FD4\u904D\u4FBF\u52C9\u5A29\u5F01\u97AD\u4FDD\u8217\u92EA\u5703\u6355\u6B69\u752B\u88DC\u8F14\u7A42\u52DF\u5893\u6155\u620A\u66AE\u6BCD\u7C3F\u83E9\u5023\u4FF8\u5305\u5446\u5831\u5949\u5B9D\u5CF0\u5CEF\u5D29\u5E96\u62B1\u6367\u653E\u65B9\u670B"],
["cba1", "\u6CD5\u6CE1\u70F9\u7832\u7E2B\u80DE\u82B3\u840C\u84EC\u8702\u8912\u8A2A\u8C4A\u90A6\u92D2\u98FD\u9CF3\u9D6C\u4E4F\u4EA1\u508D\u5256\u574A\u59A8\u5E3D\u5FD8\u5FD9\u623F\u66B4\u671B\u67D0\u68D2\u5192\u7D21\u80AA\u81A8\u8B00\u8C8C\u8CBF\u927E\u9632\u5420\u982C\u5317\u50D5\u535C\u58A8\u64B2\u6734\u7267\u7766\u7A46\u91E6\u52C3\u6CA1\u6B86\u5800\u5E4C\u5954\u672C\u7FFB\u51E1\u76C6\u6469\u78E8\u9B54\u9EBB\u57CB\u59B9\u6627\u679A\u6BCE\u54E9\u69D9\u5E55\u819C\u6795\u9BAA\u67FE\u9C52\u685D\u4EA6\u4FE3\u53C8\u62B9\u672B\u6CAB\u8FC4\u4FAD\u7E6D\u9EBF\u4E07\u6162\u6E80"],
["cca1", "\u6F2B\u8513\u5473\u672A\u9B45\u5DF3\u7B95\u5CAC\u5BC6\u871C\u6E4A\u84D1\u7A14\u8108\u5999\u7C8D\u6C11\u7720\u52D9\u5922\u7121\u725F\u77DB\u9727\u9D61\u690B\u5A7F\u5A18\u51A5\u540D\u547D\u660E\u76DF\u8FF7\u9298\u9CF4\u59EA\u725D\u6EC5\u514D\u68C9\u7DBF\u7DEC\u9762\u9EBA\u6478\u6A21\u8302\u5984\u5B5F\u6BDB\u731B\u76F2\u7DB2\u8017\u8499\u5132\u6728\u9ED9\u76EE\u6762\u52FF\u9905\u5C24\u623B\u7C7E\u8CB0\u554F\u60B6\u7D0B\u9580\u5301\u4E5F\u51B6\u591C\u723A\u8036\u91CE\u5F25\u77E2\u5384\u5F79\u7D04\u85AC\u8A33\u8E8D\u9756\u67F3\u85AE\u9453\u6109\u6108\u6CB9\u7652"],
["cda1", "\u8AED\u8F38\u552F\u4F51\u512A\u52C7\u53CB\u5BA5\u5E7D\u60A0\u6182\u63D6\u6709\u67DA\u6E67\u6D8C\u7336\u7337\u7531\u7950\u88D5\u8A98\u904A\u9091\u90F5\u96C4\u878D\u5915\u4E88\u4F59\u4E0E\u8A89\u8F3F\u9810\u50AD\u5E7C\u5996\u5BB9\u5EB8\u63DA\u63FA\u64C1\u66DC\u694A\u69D8\u6D0B\u6EB6\u7194\u7528\u7AAF\u7F8A\u8000\u8449\u84C9\u8981\u8B21\u8E0A\u9065\u967D\u990A\u617E\u6291\u6B32\u6C83\u6D74\u7FCC\u7FFC\u6DC0\u7F85\u87BA\u88F8\u6765\u83B1\u983C\u96F7\u6D1B\u7D61\u843D\u916A\u4E71\u5375\u5D50\u6B04\u6FEB\u85CD\u862D\u89A7\u5229\u540F\u5C65\u674E\u68A8\u7406\u7483"],
["cea1", "\u75E2\u88CF\u88E1\u91CC\u96E2\u9678\u5F8B\u7387\u7ACB\u844E\u63A0\u7565\u5289\u6D41\u6E9C\u7409\u7559\u786B\u7C92\u9686\u7ADC\u9F8D\u4FB6\u616E\u65C5\u865C\u4E86\u4EAE\u50DA\u4E21\u51CC\u5BEE\u6599\u6881\u6DBC\u731F\u7642\u77AD\u7A1C\u7CE7\u826F\u8AD2\u907C\u91CF\u9675\u9818\u529B\u7DD1\u502B\u5398\u6797\u6DCB\u71D0\u7433\u81E8\u8F2A\u96A3\u9C57\u9E9F\u7460\u5841\u6D99\u7D2F\u985E\u4EE4\u4F36\u4F8B\u51B7\u52B1\u5DBA\u601C\u73B2\u793C\u82D3\u9234\u96B7\u96F6\u970A\u9E97\u9F62\u66A6\u6B74\u5217\u52A3\u70C8\u88C2\u5EC9\u604B\u6190\u6F23\u7149\u7C3E\u7DF4\u806F"],
["cfa1", "\u84EE\u9023\u932C\u5442\u9B6F\u6AD3\u7089\u8CC2\u8DEF\u9732\u52B4\u5A41\u5ECA\u5F04\u6717\u697C\u6994\u6D6A\u6F0F\u7262\u72FC\u7BED\u8001\u807E\u874B\u90CE\u516D\u9E93\u7984\u808B\u9332\u8AD6\u502D\u548C\u8A71\u6B6A\u8CC4\u8107\u60D1\u67A0\u9DF2\u4E99\u4E98\u9C10\u8A6B\u85C1\u8568\u6900\u6E7E\u7897\u8155"],
["d0a1", "\u5F0C\u4E10\u4E15\u4E2A\u4E31\u4E36\u4E3C\u4E3F\u4E42\u4E56\u4E58\u4E82\u4E85\u8C6B\u4E8A\u8212\u5F0D\u4E8E\u4E9E\u4E9F\u4EA0\u4EA2\u4EB0\u4EB3\u4EB6\u4ECE\u4ECD\u4EC4\u4EC6\u4EC2\u4ED7\u4EDE\u4EED\u4EDF\u4EF7\u4F09\u4F5A\u4F30\u4F5B\u4F5D\u4F57\u4F47\u4F76\u4F88\u4F8F\u4F98\u4F7B\u4F69\u4F70\u4F91\u4F6F\u4F86\u4F96\u5118\u4FD4\u4FDF\u4FCE\u4FD8\u4FDB\u4FD1\u4FDA\u4FD0\u4FE4\u4FE5\u501A\u5028\u5014\u502A\u5025\u5005\u4F1C\u4FF6\u5021\u5029\u502C\u4FFE\u4FEF\u5011\u5006\u5043\u5047\u6703\u5055\u5050\u5048\u505A\u5056\u506C\u5078\u5080\u509A\u5085\u50B4\u50B2"],
["d1a1", "\u50C9\u50CA\u50B3\u50C2\u50D6\u50DE\u50E5\u50ED\u50E3\u50EE\u50F9\u50F5\u5109\u5101\u5102\u5116\u5115\u5114\u511A\u5121\u513A\u5137\u513C\u513B\u513F\u5140\u5152\u514C\u5154\u5162\u7AF8\u5169\u516A\u516E\u5180\u5182\u56D8\u518C\u5189\u518F\u5191\u5193\u5195\u5196\u51A4\u51A6\u51A2\u51A9\u51AA\u51AB\u51B3\u51B1\u51B2\u51B0\u51B5\u51BD\u51C5\u51C9\u51DB\u51E0\u8655\u51E9\u51ED\u51F0\u51F5\u51FE\u5204\u520B\u5214\u520E\u5227\u522A\u522E\u5233\u5239\u524F\u5244\u524B\u524C\u525E\u5254\u526A\u5274\u5269\u5273\u527F\u527D\u528D\u5294\u5292\u5271\u5288\u5291\u8FA8"],
["d2a1", "\u8FA7\u52AC\u52AD\u52BC\u52B5\u52C1\u52CD\u52D7\u52DE\u52E3\u52E6\u98ED\u52E0\u52F3\u52F5\u52F8\u52F9\u5306\u5308\u7538\u530D\u5310\u530F\u5315\u531A\u5323\u532F\u5331\u5333\u5338\u5340\u5346\u5345\u4E17\u5349\u534D\u51D6\u535E\u5369\u536E\u5918\u537B\u5377\u5382\u5396\u53A0\u53A6\u53A5\u53AE\u53B0\u53B6\u53C3\u7C12\u96D9\u53DF\u66FC\u71EE\u53EE\u53E8\u53ED\u53FA\u5401\u543D\u5440\u542C\u542D\u543C\u542E\u5436\u5429\u541D\u544E\u548F\u5475\u548E\u545F\u5471\u5477\u5470\u5492\u547B\u5480\u5476\u5484\u5490\u5486\u54C7\u54A2\u54B8\u54A5\u54AC\u54C4\u54C8\u54A8"],
["d3a1", "\u54AB\u54C2\u54A4\u54BE\u54BC\u54D8\u54E5\u54E6\u550F\u5514\u54FD\u54EE\u54ED\u54FA\u54E2\u5539\u5540\u5563\u554C\u552E\u555C\u5545\u5556\u5557\u5538\u5533\u555D\u5599\u5580\u54AF\u558A\u559F\u557B\u557E\u5598\u559E\u55AE\u557C\u5583\u55A9\u5587\u55A8\u55DA\u55C5\u55DF\u55C4\u55DC\u55E4\u55D4\u5614\u55F7\u5616\u55FE\u55FD\u561B\u55F9\u564E\u5650\u71DF\u5634\u5636\u5632\u5638\u566B\u5664\u562F\u566C\u566A\u5686\u5680\u568A\u56A0\u5694\u568F\u56A5\u56AE\u56B6\u56B4\u56C2\u56BC\u56C1\u56C3\u56C0\u56C8\u56CE\u56D1\u56D3\u56D7\u56EE\u56F9\u5700\u56FF\u5704\u5709"],
["d4a1", "\u5708\u570B\u570D\u5713\u5718\u5716\u55C7\u571C\u5726\u5737\u5738\u574E\u573B\u5740\u574F\u5769\u57C0\u5788\u5761\u577F\u5789\u5793\u57A0\u57B3\u57A4\u57AA\u57B0\u57C3\u57C6\u57D4\u57D2\u57D3\u580A\u57D6\u57E3\u580B\u5819\u581D\u5872\u5821\u5862\u584B\u5870\u6BC0\u5852\u583D\u5879\u5885\u58B9\u589F\u58AB\u58BA\u58DE\u58BB\u58B8\u58AE\u58C5\u58D3\u58D1\u58D7\u58D9\u58D8\u58E5\u58DC\u58E4\u58DF\u58EF\u58FA\u58F9\u58FB\u58FC\u58FD\u5902\u590A\u5910\u591B\u68A6\u5925\u592C\u592D\u5932\u5938\u593E\u7AD2\u5955\u5950\u594E\u595A\u5958\u5962\u5960\u5967\u596C\u5969"],
["d5a1", "\u5978\u5981\u599D\u4F5E\u4FAB\u59A3\u59B2\u59C6\u59E8\u59DC\u598D\u59D9\u59DA\u5A25\u5A1F\u5A11\u5A1C\u5A09\u5A1A\u5A40\u5A6C\u5A49\u5A35\u5A36\u5A62\u5A6A\u5A9A\u5ABC\u5ABE\u5ACB\u5AC2\u5ABD\u5AE3\u5AD7\u5AE6\u5AE9\u5AD6\u5AFA\u5AFB\u5B0C\u5B0B\u5B16\u5B32\u5AD0\u5B2A\u5B36\u5B3E\u5B43\u5B45\u5B40\u5B51\u5B55\u5B5A\u5B5B\u5B65\u5B69\u5B70\u5B73\u5B75\u5B78\u6588\u5B7A\u5B80\u5B83\u5BA6\u5BB8\u5BC3\u5BC7\u5BC9\u5BD4\u5BD0\u5BE4\u5BE6\u5BE2\u5BDE\u5BE5\u5BEB\u5BF0\u5BF6\u5BF3\u5C05\u5C07\u5C08\u5C0D\u5C13\u5C20\u5C22\u5C28\u5C38\u5C39\u5C41\u5C46\u5C4E\u5C53"],
["d6a1", "\u5C50\u5C4F\u5B71\u5C6C\u5C6E\u4E62\u5C76\u5C79\u5C8C\u5C91\u5C94\u599B\u5CAB\u5CBB\u5CB6\u5CBC\u5CB7\u5CC5\u5CBE\u5CC7\u5CD9\u5CE9\u5CFD\u5CFA\u5CED\u5D8C\u5CEA\u5D0B\u5D15\u5D17\u5D5C\u5D1F\u5D1B\u5D11\u5D14\u5D22\u5D1A\u5D19\u5D18\u5D4C\u5D52\u5D4E\u5D4B\u5D6C\u5D73\u5D76\u5D87\u5D84\u5D82\u5DA2\u5D9D\u5DAC\u5DAE\u5DBD\u5D90\u5DB7\u5DBC\u5DC9\u5DCD\u5DD3\u5DD2\u5DD6\u5DDB\u5DEB\u5DF2\u5DF5\u5E0B\u5E1A\u5E19\u5E11\u5E1B\u5E36\u5E37\u5E44\u5E43\u5E40\u5E4E\u5E57\u5E54\u5E5F\u5E62\u5E64\u5E47\u5E75\u5E76\u5E7A\u9EBC\u5E7F\u5EA0\u5EC1\u5EC2\u5EC8\u5ED0\u5ECF"],
["d7a1", "\u5ED6\u5EE3\u5EDD\u5EDA\u5EDB\u5EE2\u5EE1\u5EE8\u5EE9\u5EEC\u5EF1\u5EF3\u5EF0\u5EF4\u5EF8\u5EFE\u5F03\u5F09\u5F5D\u5F5C\u5F0B\u5F11\u5F16\u5F29\u5F2D\u5F38\u5F41\u5F48\u5F4C\u5F4E\u5F2F\u5F51\u5F56\u5F57\u5F59\u5F61\u5F6D\u5F73\u5F77\u5F83\u5F82\u5F7F\u5F8A\u5F88\u5F91\u5F87\u5F9E\u5F99\u5F98\u5FA0\u5FA8\u5FAD\u5FBC\u5FD6\u5FFB\u5FE4\u5FF8\u5FF1\u5FDD\u60B3\u5FFF\u6021\u6060\u6019\u6010\u6029\u600E\u6031\u601B\u6015\u602B\u6026\u600F\u603A\u605A\u6041\u606A\u6077\u605F\u604A\u6046\u604D\u6063\u6043\u6064\u6042\u606C\u606B\u6059\u6081\u608D\u60E7\u6083\u609A"],
["d8a1", "\u6084\u609B\u6096\u6097\u6092\u60A7\u608B\u60E1\u60B8\u60E0\u60D3\u60B4\u5FF0\u60BD\u60C6\u60B5\u60D8\u614D\u6115\u6106\u60F6\u60F7\u6100\u60F4\u60FA\u6103\u6121\u60FB\u60F1\u610D\u610E\u6147\u613E\u6128\u6127\u614A\u613F\u613C\u612C\u6134\u613D\u6142\u6144\u6173\u6177\u6158\u6159\u615A\u616B\u6174\u616F\u6165\u6171\u615F\u615D\u6153\u6175\u6199\u6196\u6187\u61AC\u6194\u619A\u618A\u6191\u61AB\u61AE\u61CC\u61CA\u61C9\u61F7\u61C8\u61C3\u61C6\u61BA\u61CB\u7F79\u61CD\u61E6\u61E3\u61F6\u61FA\u61F4\u61FF\u61FD\u61FC\u61FE\u6200\u6208\u6209\u620D\u620C\u6214\u621B"],
["d9a1", "\u621E\u6221\u622A\u622E\u6230\u6232\u6233\u6241\u624E\u625E\u6263\u625B\u6260\u6268\u627C\u6282\u6289\u627E\u6292\u6293\u6296\u62D4\u6283\u6294\u62D7\u62D1\u62BB\u62CF\u62FF\u62C6\u64D4\u62C8\u62DC\u62CC\u62CA\u62C2\u62C7\u629B\u62C9\u630C\u62EE\u62F1\u6327\u6302\u6308\u62EF\u62F5\u6350\u633E\u634D\u641C\u634F\u6396\u638E\u6380\u63AB\u6376\u63A3\u638F\u6389\u639F\u63B5\u636B\u6369\u63BE\u63E9\u63C0\u63C6\u63E3\u63C9\u63D2\u63F6\u63C4\u6416\u6434\u6406\u6413\u6426\u6436\u651D\u6417\u6428\u640F\u6467\u646F\u6476\u644E\u652A\u6495\u6493\u64A5\u64A9\u6488\u64BC"],
["daa1", "\u64DA\u64D2\u64C5\u64C7\u64BB\u64D8\u64C2\u64F1\u64E7\u8209\u64E0\u64E1\u62AC\u64E3\u64EF\u652C\u64F6\u64F4\u64F2\u64FA\u6500\u64FD\u6518\u651C\u6505\u6524\u6523\u652B\u6534\u6535\u6537\u6536\u6538\u754B\u6548\u6556\u6555\u654D\u6558\u655E\u655D\u6572\u6578\u6582\u6583\u8B8A\u659B\u659F\u65AB\u65B7\u65C3\u65C6\u65C1\u65C4\u65CC\u65D2\u65DB\u65D9\u65E0\u65E1\u65F1\u6772\u660A\u6603\u65FB\u6773\u6635\u6636\u6634\u661C\u664F\u6644\u6649\u6641\u665E\u665D\u6664\u6667\u6668\u665F\u6662\u6670\u6683\u6688\u668E\u6689\u6684\u6698\u669D\u66C1\u66B9\u66C9\u66BE\u66BC"],
["dba1", "\u66C4\u66B8\u66D6\u66DA\u66E0\u663F\u66E6\u66E9\u66F0\u66F5\u66F7\u670F\u6716\u671E\u6726\u6727\u9738\u672E\u673F\u6736\u6741\u6738\u6737\u6746\u675E\u6760\u6759\u6763\u6764\u6789\u6770\u67A9\u677C\u676A\u678C\u678B\u67A6\u67A1\u6785\u67B7\u67EF\u67B4\u67EC\u67B3\u67E9\u67B8\u67E4\u67DE\u67DD\u67E2\u67EE\u67B9\u67CE\u67C6\u67E7\u6A9C\u681E\u6846\u6829\u6840\u684D\u6832\u684E\u68B3\u682B\u6859\u6863\u6877\u687F\u689F\u688F\u68AD\u6894\u689D\u689B\u6883\u6AAE\u68B9\u6874\u68B5\u68A0\u68BA\u690F\u688D\u687E\u6901\u68CA\u6908\u68D8\u6922\u6926\u68E1\u690C\u68CD"],
["dca1", "\u68D4\u68E7\u68D5\u6936\u6912\u6904\u68D7\u68E3\u6925\u68F9\u68E0\u68EF\u6928\u692A\u691A\u6923\u6921\u68C6\u6979\u6977\u695C\u6978\u696B\u6954\u697E\u696E\u6939\u6974\u693D\u6959\u6930\u6961\u695E\u695D\u6981\u696A\u69B2\u69AE\u69D0\u69BF\u69C1\u69D3\u69BE\u69CE\u5BE8\u69CA\u69DD\u69BB\u69C3\u69A7\u6A2E\u6991\u69A0\u699C\u6995\u69B4\u69DE\u69E8\u6A02\u6A1B\u69FF\u6B0A\u69F9\u69F2\u69E7\u6A05\u69B1\u6A1E\u69ED\u6A14\u69EB\u6A0A\u6A12\u6AC1\u6A23\u6A13\u6A44\u6A0C\u6A72\u6A36\u6A78\u6A47\u6A62\u6A59\u6A66\u6A48\u6A38\u6A22\u6A90\u6A8D\u6AA0\u6A84\u6AA2\u6AA3"],
["dda1", "\u6A97\u8617\u6ABB\u6AC3\u6AC2\u6AB8\u6AB3\u6AAC\u6ADE\u6AD1\u6ADF\u6AAA\u6ADA\u6AEA\u6AFB\u6B05\u8616\u6AFA\u6B12\u6B16\u9B31\u6B1F\u6B38\u6B37\u76DC\u6B39\u98EE\u6B47\u6B43\u6B49\u6B50\u6B59\u6B54\u6B5B\u6B5F\u6B61\u6B78\u6B79\u6B7F\u6B80\u6B84\u6B83\u6B8D\u6B98\u6B95\u6B9E\u6BA4\u6BAA\u6BAB\u6BAF\u6BB2\u6BB1\u6BB3\u6BB7\u6BBC\u6BC6\u6BCB\u6BD3\u6BDF\u6BEC\u6BEB\u6BF3\u6BEF\u9EBE\u6C08\u6C13\u6C14\u6C1B\u6C24\u6C23\u6C5E\u6C55\u6C62\u6C6A\u6C82\u6C8D\u6C9A\u6C81\u6C9B\u6C7E\u6C68\u6C73\u6C92\u6C90\u6CC4\u6CF1\u6CD3\u6CBD\u6CD7\u6CC5\u6CDD\u6CAE\u6CB1\u6CBE"],
["dea1", "\u6CBA\u6CDB\u6CEF\u6CD9\u6CEA\u6D1F\u884D\u6D36\u6D2B\u6D3D\u6D38\u6D19\u6D35\u6D33\u6D12\u6D0C\u6D63\u6D93\u6D64\u6D5A\u6D79\u6D59\u6D8E\u6D95\u6FE4\u6D85\u6DF9\u6E15\u6E0A\u6DB5\u6DC7\u6DE6\u6DB8\u6DC6\u6DEC\u6DDE\u6DCC\u6DE8\u6DD2\u6DC5\u6DFA\u6DD9\u6DE4\u6DD5\u6DEA\u6DEE\u6E2D\u6E6E\u6E2E\u6E19\u6E72\u6E5F\u6E3E\u6E23\u6E6B\u6E2B\u6E76\u6E4D\u6E1F\u6E43\u6E3A\u6E4E\u6E24\u6EFF\u6E1D\u6E38\u6E82\u6EAA\u6E98\u6EC9\u6EB7\u6ED3\u6EBD\u6EAF\u6EC4\u6EB2\u6ED4\u6ED5\u6E8F\u6EA5\u6EC2\u6E9F\u6F41\u6F11\u704C\u6EEC\u6EF8\u6EFE\u6F3F\u6EF2\u6F31\u6EEF\u6F32\u6ECC"],
["dfa1", "\u6F3E\u6F13\u6EF7\u6F86\u6F7A\u6F78\u6F81\u6F80\u6F6F\u6F5B\u6FF3\u6F6D\u6F82\u6F7C\u6F58\u6F8E\u6F91\u6FC2\u6F66\u6FB3\u6FA3\u6FA1\u6FA4\u6FB9\u6FC6\u6FAA\u6FDF\u6FD5\u6FEC\u6FD4\u6FD8\u6FF1\u6FEE\u6FDB\u7009\u700B\u6FFA\u7011\u7001\u700F\u6FFE\u701B\u701A\u6F74\u701D\u7018\u701F\u7030\u703E\u7032\u7051\u7063\u7099\u7092\u70AF\u70F1\u70AC\u70B8\u70B3\u70AE\u70DF\u70CB\u70DD\u70D9\u7109\u70FD\u711C\u7119\u7165\u7155\u7188\u7166\u7162\u714C\u7156\u716C\u718F\u71FB\u7184\u7195\u71A8\u71AC\u71D7\u71B9\u71BE\u71D2\u71C9\u71D4\u71CE\u71E0\u71EC\u71E7\u71F5\u71FC"],
["e0a1", "\u71F9\u71FF\u720D\u7210\u721B\u7228\u722D\u722C\u7230\u7232\u723B\u723C\u723F\u7240\u7246\u724B\u7258\u7274\u727E\u7282\u7281\u7287\u7292\u7296\u72A2\u72A7\u72B9\u72B2\u72C3\u72C6\u72C4\u72CE\u72D2\u72E2\u72E0\u72E1\u72F9\u72F7\u500F\u7317\u730A\u731C\u7316\u731D\u7334\u732F\u7329\u7325\u733E\u734E\u734F\u9ED8\u7357\u736A\u7368\u7370\u7378\u7375\u737B\u737A\u73C8\u73B3\u73CE\u73BB\u73C0\u73E5\u73EE\u73DE\u74A2\u7405\u746F\u7425\u73F8\u7432\u743A\u7455\u743F\u745F\u7459\u7441\u745C\u7469\u7470\u7463\u746A\u7476\u747E\u748B\u749E\u74A7\u74CA\u74CF\u74D4\u73F1"],
["e1a1", "\u74E0\u74E3\u74E7\u74E9\u74EE\u74F2\u74F0\u74F1\u74F8\u74F7\u7504\u7503\u7505\u750C\u750E\u750D\u7515\u7513\u751E\u7526\u752C\u753C\u7544\u754D\u754A\u7549\u755B\u7546\u755A\u7569\u7564\u7567\u756B\u756D\u7578\u7576\u7586\u7587\u7574\u758A\u7589\u7582\u7594\u759A\u759D\u75A5\u75A3\u75C2\u75B3\u75C3\u75B5\u75BD\u75B8\u75BC\u75B1\u75CD\u75CA\u75D2\u75D9\u75E3\u75DE\u75FE\u75FF\u75FC\u7601\u75F0\u75FA\u75F2\u75F3\u760B\u760D\u7609\u761F\u7627\u7620\u7621\u7622\u7624\u7634\u7630\u763B\u7647\u7648\u7646\u765C\u7658\u7661\u7662\u7668\u7669\u766A\u7667\u766C\u7670"],
["e2a1", "\u7672\u7676\u7678\u767C\u7680\u7683\u7688\u768B\u768E\u7696\u7693\u7699\u769A\u76B0\u76B4\u76B8\u76B9\u76BA\u76C2\u76CD\u76D6\u76D2\u76DE\u76E1\u76E5\u76E7\u76EA\u862F\u76FB\u7708\u7707\u7704\u7729\u7724\u771E\u7725\u7726\u771B\u7737\u7738\u7747\u775A\u7768\u776B\u775B\u7765\u777F\u777E\u7779\u778E\u778B\u7791\u77A0\u779E\u77B0\u77B6\u77B9\u77BF\u77BC\u77BD\u77BB\u77C7\u77CD\u77D7\u77DA\u77DC\u77E3\u77EE\u77FC\u780C\u7812\u7926\u7820\u792A\u7845\u788E\u7874\u7886\u787C\u789A\u788C\u78A3\u78B5\u78AA\u78AF\u78D1\u78C6\u78CB\u78D4\u78BE\u78BC\u78C5\u78CA\u78EC"],
["e3a1", "\u78E7\u78DA\u78FD\u78F4\u7907\u7912\u7911\u7919\u792C\u792B\u7940\u7960\u7957\u795F\u795A\u7955\u7953\u797A\u797F\u798A\u799D\u79A7\u9F4B\u79AA\u79AE\u79B3\u79B9\u79BA\u79C9\u79D5\u79E7\u79EC\u79E1\u79E3\u7A08\u7A0D\u7A18\u7A19\u7A20\u7A1F\u7980\u7A31\u7A3B\u7A3E\u7A37\u7A43\u7A57\u7A49\u7A61\u7A62\u7A69\u9F9D\u7A70\u7A79\u7A7D\u7A88\u7A97\u7A95\u7A98\u7A96\u7AA9\u7AC8\u7AB0\u7AB6\u7AC5\u7AC4\u7ABF\u9083\u7AC7\u7ACA\u7ACD\u7ACF\u7AD5\u7AD3\u7AD9\u7ADA\u7ADD\u7AE1\u7AE2\u7AE6\u7AED\u7AF0\u7B02\u7B0F\u7B0A\u7B06\u7B33\u7B18\u7B19\u7B1E\u7B35\u7B28\u7B36\u7B50"],
["e4a1", "\u7B7A\u7B04\u7B4D\u7B0B\u7B4C\u7B45\u7B75\u7B65\u7B74\u7B67\u7B70\u7B71\u7B6C\u7B6E\u7B9D\u7B98\u7B9F\u7B8D\u7B9C\u7B9A\u7B8B\u7B92\u7B8F\u7B5D\u7B99\u7BCB\u7BC1\u7BCC\u7BCF\u7BB4\u7BC6\u7BDD\u7BE9\u7C11\u7C14\u7BE6\u7BE5\u7C60\u7C00\u7C07\u7C13\u7BF3\u7BF7\u7C17\u7C0D\u7BF6\u7C23\u7C27\u7C2A\u7C1F\u7C37\u7C2B\u7C3D\u7C4C\u7C43\u7C54\u7C4F\u7C40\u7C50\u7C58\u7C5F\u7C64\u7C56\u7C65\u7C6C\u7C75\u7C83\u7C90\u7CA4\u7CAD\u7CA2\u7CAB\u7CA1\u7CA8\u7CB3\u7CB2\u7CB1\u7CAE\u7CB9\u7CBD\u7CC0\u7CC5\u7CC2\u7CD8\u7CD2\u7CDC\u7CE2\u9B3B\u7CEF\u7CF2\u7CF4\u7CF6\u7CFA\u7D06"],
["e5a1", "\u7D02\u7D1C\u7D15\u7D0A\u7D45\u7D4B\u7D2E\u7D32\u7D3F\u7D35\u7D46\u7D73\u7D56\u7D4E\u7D72\u7D68\u7D6E\u7D4F\u7D63\u7D93\u7D89\u7D5B\u7D8F\u7D7D\u7D9B\u7DBA\u7DAE\u7DA3\u7DB5\u7DC7\u7DBD\u7DAB\u7E3D\u7DA2\u7DAF\u7DDC\u7DB8\u7D9F\u7DB0\u7DD8\u7DDD\u7DE4\u7DDE\u7DFB\u7DF2\u7DE1\u7E05\u7E0A\u7E23\u7E21\u7E12\u7E31\u7E1F\u7E09\u7E0B\u7E22\u7E46\u7E66\u7E3B\u7E35\u7E39\u7E43\u7E37\u7E32\u7E3A\u7E67\u7E5D\u7E56\u7E5E\u7E59\u7E5A\u7E79\u7E6A\u7E69\u7E7C\u7E7B\u7E83\u7DD5\u7E7D\u8FAE\u7E7F\u7E88\u7E89\u7E8C\u7E92\u7E90\u7E93\u7E94\u7E96\u7E8E\u7E9B\u7E9C\u7F38\u7F3A"],
["e6a1", "\u7F45\u7F4C\u7F4D\u7F4E\u7F50\u7F51\u7F55\u7F54\u7F58\u7F5F\u7F60\u7F68\u7F69\u7F67\u7F78\u7F82\u7F86\u7F83\u7F88\u7F87\u7F8C\u7F94\u7F9E\u7F9D\u7F9A\u7FA3\u7FAF\u7FB2\u7FB9\u7FAE\u7FB6\u7FB8\u8B71\u7FC5\u7FC6\u7FCA\u7FD5\u7FD4\u7FE1\u7FE6\u7FE9\u7FF3\u7FF9\u98DC\u8006\u8004\u800B\u8012\u8018\u8019\u801C\u8021\u8028\u803F\u803B\u804A\u8046\u8052\u8058\u805A\u805F\u8062\u8068\u8073\u8072\u8070\u8076\u8079\u807D\u807F\u8084\u8086\u8085\u809B\u8093\u809A\u80AD\u5190\u80AC\u80DB\u80E5\u80D9\u80DD\u80C4\u80DA\u80D6\u8109\u80EF\u80F1\u811B\u8129\u8123\u812F\u814B"],
["e7a1", "\u968B\u8146\u813E\u8153\u8151\u80FC\u8171\u816E\u8165\u8166\u8174\u8183\u8188\u818A\u8180\u8182\u81A0\u8195\u81A4\u81A3\u815F\u8193\u81A9\u81B0\u81B5\u81BE\u81B8\u81BD\u81C0\u81C2\u81BA\u81C9\u81CD\u81D1\u81D9\u81D8\u81C8\u81DA\u81DF\u81E0\u81E7\u81FA\u81FB\u81FE\u8201\u8202\u8205\u8207\u820A\u820D\u8210\u8216\u8229\u822B\u8238\u8233\u8240\u8259\u8258\u825D\u825A\u825F\u8264\u8262\u8268\u826A\u826B\u822E\u8271\u8277\u8278\u827E\u828D\u8292\u82AB\u829F\u82BB\u82AC\u82E1\u82E3\u82DF\u82D2\u82F4\u82F3\u82FA\u8393\u8303\u82FB\u82F9\u82DE\u8306\u82DC\u8309\u82D9"],
["e8a1", "\u8335\u8334\u8316\u8332\u8331\u8340\u8339\u8350\u8345\u832F\u832B\u8317\u8318\u8385\u839A\u83AA\u839F\u83A2\u8396\u8323\u838E\u8387\u838A\u837C\u83B5\u8373\u8375\u83A0\u8389\u83A8\u83F4\u8413\u83EB\u83CE\u83FD\u8403\u83D8\u840B\u83C1\u83F7\u8407\u83E0\u83F2\u840D\u8422\u8420\u83BD\u8438\u8506\u83FB\u846D\u842A\u843C\u855A\u8484\u8477\u846B\u84AD\u846E\u8482\u8469\u8446\u842C\u846F\u8479\u8435\u84CA\u8462\u84B9\u84BF\u849F\u84D9\u84CD\u84BB\u84DA\u84D0\u84C1\u84C6\u84D6\u84A1\u8521\u84FF\u84F4\u8517\u8518\u852C\u851F\u8515\u8514\u84FC\u8540\u8563\u8558\u8548"],
["e9a1", "\u8541\u8602\u854B\u8555\u8580\u85A4\u8588\u8591\u858A\u85A8\u856D\u8594\u859B\u85EA\u8587\u859C\u8577\u857E\u8590\u85C9\u85BA\u85CF\u85B9\u85D0\u85D5\u85DD\u85E5\u85DC\u85F9\u860A\u8613\u860B\u85FE\u85FA\u8606\u8622\u861A\u8630\u863F\u864D\u4E55\u8654\u865F\u8667\u8671\u8693\u86A3\u86A9\u86AA\u868B\u868C\u86B6\u86AF\u86C4\u86C6\u86B0\u86C9\u8823\u86AB\u86D4\u86DE\u86E9\u86EC\u86DF\u86DB\u86EF\u8712\u8706\u8708\u8700\u8703\u86FB\u8711\u8709\u870D\u86F9\u870A\u8734\u873F\u8737\u873B\u8725\u8729\u871A\u8760\u875F\u8778\u874C\u874E\u8774\u8757\u8768\u876E\u8759"],
["eaa1", "\u8753\u8763\u876A\u8805\u87A2\u879F\u8782\u87AF\u87CB\u87BD\u87C0\u87D0\u96D6\u87AB\u87C4\u87B3\u87C7\u87C6\u87BB\u87EF\u87F2\u87E0\u880F\u880D\u87FE\u87F6\u87F7\u880E\u87D2\u8811\u8816\u8815\u8822\u8821\u8831\u8836\u8839\u8827\u883B\u8844\u8842\u8852\u8859\u885E\u8862\u886B\u8881\u887E\u889E\u8875\u887D\u88B5\u8872\u8882\u8897\u8892\u88AE\u8899\u88A2\u888D\u88A4\u88B0\u88BF\u88B1\u88C3\u88C4\u88D4\u88D8\u88D9\u88DD\u88F9\u8902\u88FC\u88F4\u88E8\u88F2\u8904\u890C\u890A\u8913\u8943\u891E\u8925\u892A\u892B\u8941\u8944\u893B\u8936\u8938\u894C\u891D\u8960\u895E"],
["eba1", "\u8966\u8964\u896D\u896A\u896F\u8974\u8977\u897E\u8983\u8988\u898A\u8993\u8998\u89A1\u89A9\u89A6\u89AC\u89AF\u89B2\u89BA\u89BD\u89BF\u89C0\u89DA\u89DC\u89DD\u89E7\u89F4\u89F8\u8A03\u8A16\u8A10\u8A0C\u8A1B\u8A1D\u8A25\u8A36\u8A41\u8A5B\u8A52\u8A46\u8A48\u8A7C\u8A6D\u8A6C\u8A62\u8A85\u8A82\u8A84\u8AA8\u8AA1\u8A91\u8AA5\u8AA6\u8A9A\u8AA3\u8AC4\u8ACD\u8AC2\u8ADA\u8AEB\u8AF3\u8AE7\u8AE4\u8AF1\u8B14\u8AE0\u8AE2\u8AF7\u8ADE\u8ADB\u8B0C\u8B07\u8B1A\u8AE1\u8B16\u8B10\u8B17\u8B20\u8B33\u97AB\u8B26\u8B2B\u8B3E\u8B28\u8B41\u8B4C\u8B4F\u8B4E\u8B49\u8B56\u8B5B\u8B5A\u8B6B"],
["eca1", "\u8B5F\u8B6C\u8B6F\u8B74\u8B7D\u8B80\u8B8C\u8B8E\u8B92\u8B93\u8B96\u8B99\u8B9A\u8C3A\u8C41\u8C3F\u8C48\u8C4C\u8C4E\u8C50\u8C55\u8C62\u8C6C\u8C78\u8C7A\u8C82\u8C89\u8C85\u8C8A\u8C8D\u8C8E\u8C94\u8C7C\u8C98\u621D\u8CAD\u8CAA\u8CBD\u8CB2\u8CB3\u8CAE\u8CB6\u8CC8\u8CC1\u8CE4\u8CE3\u8CDA\u8CFD\u8CFA\u8CFB\u8D04\u8D05\u8D0A\u8D07\u8D0F\u8D0D\u8D10\u9F4E\u8D13\u8CCD\u8D14\u8D16\u8D67\u8D6D\u8D71\u8D73\u8D81\u8D99\u8DC2\u8DBE\u8DBA\u8DCF\u8DDA\u8DD6\u8DCC\u8DDB\u8DCB\u8DEA\u8DEB\u8DDF\u8DE3\u8DFC\u8E08\u8E09\u8DFF\u8E1D\u8E1E\u8E10\u8E1F\u8E42\u8E35\u8E30\u8E34\u8E4A"],
["eda1", "\u8E47\u8E49\u8E4C\u8E50\u8E48\u8E59\u8E64\u8E60\u8E2A\u8E63\u8E55\u8E76\u8E72\u8E7C\u8E81\u8E87\u8E85\u8E84\u8E8B\u8E8A\u8E93\u8E91\u8E94\u8E99\u8EAA\u8EA1\u8EAC\u8EB0\u8EC6\u8EB1\u8EBE\u8EC5\u8EC8\u8ECB\u8EDB\u8EE3\u8EFC\u8EFB\u8EEB\u8EFE\u8F0A\u8F05\u8F15\u8F12\u8F19\u8F13\u8F1C\u8F1F\u8F1B\u8F0C\u8F26\u8F33\u8F3B\u8F39\u8F45\u8F42\u8F3E\u8F4C\u8F49\u8F46\u8F4E\u8F57\u8F5C\u8F62\u8F63\u8F64\u8F9C\u8F9F\u8FA3\u8FAD\u8FAF\u8FB7\u8FDA\u8FE5\u8FE2\u8FEA\u8FEF\u9087\u8FF4\u9005\u8FF9\u8FFA\u9011\u9015\u9021\u900D\u901E\u9016\u900B\u9027\u9036\u9035\u9039\u8FF8"],
["eea1", "\u904F\u9050\u9051\u9052\u900E\u9049\u903E\u9056\u9058\u905E\u9068\u906F\u9076\u96A8\u9072\u9082\u907D\u9081\u9080\u908A\u9089\u908F\u90A8\u90AF\u90B1\u90B5\u90E2\u90E4\u6248\u90DB\u9102\u9112\u9119\u9132\u9130\u914A\u9156\u9158\u9163\u9165\u9169\u9173\u9172\u918B\u9189\u9182\u91A2\u91AB\u91AF\u91AA\u91B5\u91B4\u91BA\u91C0\u91C1\u91C9\u91CB\u91D0\u91D6\u91DF\u91E1\u91DB\u91FC\u91F5\u91F6\u921E\u91FF\u9214\u922C\u9215\u9211\u925E\u9257\u9245\u9249\u9264\u9248\u9295\u923F\u924B\u9250\u929C\u9296\u9293\u929B\u925A\u92CF\u92B9\u92B7\u92E9\u930F\u92FA\u9344\u932E"],
["efa1", "\u9319\u9322\u931A\u9323\u933A\u9335\u933B\u935C\u9360\u937C\u936E\u9356\u93B0\u93AC\u93AD\u9394\u93B9\u93D6\u93D7\u93E8\u93E5\u93D8\u93C3\u93DD\u93D0\u93C8\u93E4\u941A\u9414\u9413\u9403\u9407\u9410\u9436\u942B\u9435\u9421\u943A\u9441\u9452\u9444\u945B\u9460\u9462\u945E\u946A\u9229\u9470\u9475\u9477\u947D\u945A\u947C\u947E\u9481\u947F\u9582\u9587\u958A\u9594\u9596\u9598\u9599\u95A0\u95A8\u95A7\u95AD\u95BC\u95BB\u95B9\u95BE\u95CA\u6FF6\u95C3\u95CD\u95CC\u95D5\u95D4\u95D6\u95DC\u95E1\u95E5\u95E2\u9621\u9628\u962E\u962F\u9642\u964C\u964F\u964B\u9677\u965C\u965E"],
["f0a1", "\u965D\u965F\u9666\u9672\u966C\u968D\u9698\u9695\u9697\u96AA\u96A7\u96B1\u96B2\u96B0\u96B4\u96B6\u96B8\u96B9\u96CE\u96CB\u96C9\u96CD\u894D\u96DC\u970D\u96D5\u96F9\u9704\u9706\u9708\u9713\u970E\u9711\u970F\u9716\u9719\u9724\u972A\u9730\u9739\u973D\u973E\u9744\u9746\u9748\u9742\u9749\u975C\u9760\u9764\u9766\u9768\u52D2\u976B\u9771\u9779\u9785\u977C\u9781\u977A\u9786\u978B\u978F\u9790\u979C\u97A8\u97A6\u97A3\u97B3\u97B4\u97C3\u97C6\u97C8\u97CB\u97DC\u97ED\u9F4F\u97F2\u7ADF\u97F6\u97F5\u980F\u980C\u9838\u9824\u9821\u9837\u983D\u9846\u984F\u984B\u986B\u986F\u9870"],
["f1a1", "\u9871\u9874\u9873\u98AA\u98AF\u98B1\u98B6\u98C4\u98C3\u98C6\u98E9\u98EB\u9903\u9909\u9912\u9914\u9918\u9921\u991D\u991E\u9924\u9920\u992C\u992E\u993D\u993E\u9942\u9949\u9945\u9950\u994B\u9951\u9952\u994C\u9955\u9997\u9998\u99A5\u99AD\u99AE\u99BC\u99DF\u99DB\u99DD\u99D8\u99D1\u99ED\u99EE\u99F1\u99F2\u99FB\u99F8\u9A01\u9A0F\u9A05\u99E2\u9A19\u9A2B\u9A37\u9A45\u9A42\u9A40\u9A43\u9A3E\u9A55\u9A4D\u9A5B\u9A57\u9A5F\u9A62\u9A65\u9A64\u9A69\u9A6B\u9A6A\u9AAD\u9AB0\u9ABC\u9AC0\u9ACF\u9AD1\u9AD3\u9AD4\u9ADE\u9ADF\u9AE2\u9AE3\u9AE6\u9AEF\u9AEB\u9AEE\u9AF4\u9AF1\u9AF7"],
["f2a1", "\u9AFB\u9B06\u9B18\u9B1A\u9B1F\u9B22\u9B23\u9B25\u9B27\u9B28\u9B29\u9B2A\u9B2E\u9B2F\u9B32\u9B44\u9B43\u9B4F\u9B4D\u9B4E\u9B51\u9B58\u9B74\u9B93\u9B83\u9B91\u9B96\u9B97\u9B9F\u9BA0\u9BA8\u9BB4\u9BC0\u9BCA\u9BB9\u9BC6\u9BCF\u9BD1\u9BD2\u9BE3\u9BE2\u9BE4\u9BD4\u9BE1\u9C3A\u9BF2\u9BF1\u9BF0\u9C15\u9C14\u9C09\u9C13\u9C0C\u9C06\u9C08\u9C12\u9C0A\u9C04\u9C2E\u9C1B\u9C25\u9C24\u9C21\u9C30\u9C47\u9C32\u9C46\u9C3E\u9C5A\u9C60\u9C67\u9C76\u9C78\u9CE7\u9CEC\u9CF0\u9D09\u9D08\u9CEB\u9D03\u9D06\u9D2A\u9D26\u9DAF\u9D23\u9D1F\u9D44\u9D15\u9D12\u9D41\u9D3F\u9D3E\u9D46\u9D48"],
["f3a1", "\u9D5D\u9D5E\u9D64\u9D51\u9D50\u9D59\u9D72\u9D89\u9D87\u9DAB\u9D6F\u9D7A\u9D9A\u9DA4\u9DA9\u9DB2\u9DC4\u9DC1\u9DBB\u9DB8\u9DBA\u9DC6\u9DCF\u9DC2\u9DD9\u9DD3\u9DF8\u9DE6\u9DED\u9DEF\u9DFD\u9E1A\u9E1B\u9E1E\u9E75\u9E79\u9E7D\u9E81\u9E88\u9E8B\u9E8C\u9E92\u9E95\u9E91\u9E9D\u9EA5\u9EA9\u9EB8\u9EAA\u9EAD\u9761\u9ECC\u9ECE\u9ECF\u9ED0\u9ED4\u9EDC\u9EDE\u9EDD\u9EE0\u9EE5\u9EE8\u9EEF\u9EF4\u9EF6\u9EF7\u9EF9\u9EFB\u9EFC\u9EFD\u9F07\u9F08\u76B7\u9F15\u9F21\u9F2C\u9F3E\u9F4A\u9F52\u9F54\u9F63\u9F5F\u9F60\u9F61\u9F66\u9F67\u9F6C\u9F6A\u9F77\u9F72\u9F76\u9F95\u9F9C\u9FA0"],
["f4a1", "\u582F\u69C7\u9059\u7464\u51DC\u7199"],
["f9a1", "\u7E8A\u891C\u9348\u9288\u84DC\u4FC9\u70BB\u6631\u68C8\u92F9\u66FB\u5F45\u4E28\u4EE1\u4EFC\u4F00\u4F03\u4F39\u4F56\u4F92\u4F8A\u4F9A\u4F94\u4FCD\u5040\u5022\u4FFF\u501E\u5046\u5070\u5042\u5094\u50F4\u50D8\u514A\u5164\u519D\u51BE\u51EC\u5215\u529C\u52A6\u52C0\u52DB\u5300\u5307\u5324\u5372\u5393\u53B2\u53DD\uFA0E\u549C\u548A\u54A9\u54FF\u5586\u5759\u5765\u57AC\u57C8\u57C7\uFA0F\uFA10\u589E\u58B2\u590B\u5953\u595B\u595D\u5963\u59A4\u59BA\u5B56\u5BC0\u752F\u5BD8\u5BEC\u5C1E\u5CA6\u5CBA\u5CF5\u5D27\u5D53\uFA11\u5D42\u5D6D\u5DB8\u5DB9\u5DD0\u5F21\u5F34\u5F67\u5FB7"],
["faa1", "\u5FDE\u605D\u6085\u608A\u60DE\u60D5\u6120\u60F2\u6111\u6137\u6130\u6198\u6213\u62A6\u63F5\u6460\u649D\u64CE\u654E\u6600\u6615\u663B\u6609\u662E\u661E\u6624\u6665\u6657\u6659\uFA12\u6673\u6699\u66A0\u66B2\u66BF\u66FA\u670E\uF929\u6766\u67BB\u6852\u67C0\u6801\u6844\u68CF\uFA13\u6968\uFA14\u6998\u69E2\u6A30\u6A6B\u6A46\u6A73\u6A7E\u6AE2\u6AE4\u6BD6\u6C3F\u6C5C\u6C86\u6C6F\u6CDA\u6D04\u6D87\u6D6F\u6D96\u6DAC\u6DCF\u6DF8\u6DF2\u6DFC\u6E39\u6E5C\u6E27\u6E3C\u6EBF\u6F88\u6FB5\u6FF5\u7005\u7007\u7028\u7085\u70AB\u710F\u7104\u715C\u7146\u7147\uFA15\u71C1\u71FE\u72B1"],
["fba1", "\u72BE\u7324\uFA16\u7377\u73BD\u73C9\u73D6\u73E3\u73D2\u7407\u73F5\u7426\u742A\u7429\u742E\u7462\u7489\u749F\u7501\u756F\u7682\u769C\u769E\u769B\u76A6\uFA17\u7746\u52AF\u7821\u784E\u7864\u787A\u7930\uFA18\uFA19\uFA1A\u7994\uFA1B\u799B\u7AD1\u7AE7\uFA1C\u7AEB\u7B9E\uFA1D\u7D48\u7D5C\u7DB7\u7DA0\u7DD6\u7E52\u7F47\u7FA1\uFA1E\u8301\u8362\u837F\u83C7\u83F6\u8448\u84B4\u8553\u8559\u856B\uFA1F\u85B0\uFA20\uFA21\u8807\u88F5\u8A12\u8A37\u8A79\u8AA7\u8ABE\u8ADF\uFA22\u8AF6\u8B53\u8B7F\u8CF0\u8CF4\u8D12\u8D76\uFA23\u8ECF\uFA24\uFA25\u9067\u90DE\uFA26\u9115\u9127\u91DA"],
["fca1", "\u91D7\u91DE\u91ED\u91EE\u91E4\u91E5\u9206\u9210\u920A\u923A\u9240\u923C\u924E\u9259\u9251\u9239\u9267\u92A7\u9277\u9278\u92E7\u92D7\u92D9\u92D0\uFA27\u92D5\u92E0\u92D3\u9325\u9321\u92FB\uFA28\u931E\u92FF\u931D\u9302\u9370\u9357\u93A4\u93C6\u93DE\u93F8\u9431\u9445\u9448\u9592\uF9DC\uFA29\u969D\u96AF\u9733\u973B\u9743\u974D\u974F\u9751\u9755\u9857\u9865\uFA2A\uFA2B\u9927\uFA2C\u999E\u9A4E\u9AD9\u9ADC\u9B75\u9B72\u9B8F\u9BB1\u9BBB\u9C00\u9D70\u9D6B\uFA2D\u9E19\u9ED1"],
["fcf1", "\u2170", 9, "\uFFE2\uFFE4\uFF07\uFF02"],
["8fa2af", "\u02D8\u02C7\xB8\u02D9\u02DD\xAF\u02DB\u02DA\uFF5E\u0384\u0385"],
["8fa2c2", "\xA1\xA6\xBF"],
["8fa2eb", "\xBA\xAA\xA9\xAE\u2122\xA4\u2116"],
["8fa6e1", "\u0386\u0388\u0389\u038A\u03AA"],
["8fa6e7", "\u038C"],
["8fa6e9", "\u038E\u03AB"],
["8fa6ec", "\u038F"],
["8fa6f1", "\u03AC\u03AD\u03AE\u03AF\u03CA\u0390\u03CC\u03C2\u03CD\u03CB\u03B0\u03CE"],
["8fa7c2", "\u0402", 10, "\u040E\u040F"],
["8fa7f2", "\u0452", 10, "\u045E\u045F"],
["8fa9a1", "\xC6\u0110"],
["8fa9a4", "\u0126"],
["8fa9a6", "\u0132"],
["8fa9a8", "\u0141\u013F"],
["8fa9ab", "\u014A\xD8\u0152"],
["8fa9af", "\u0166\xDE"],
["8fa9c1", "\xE6\u0111\xF0\u0127\u0131\u0133\u0138\u0142\u0140\u0149\u014B\xF8\u0153\xDF\u0167\xFE"],
["8faaa1", "\xC1\xC0\xC4\xC2\u0102\u01CD\u0100\u0104\xC5\xC3\u0106\u0108\u010C\xC7\u010A\u010E\xC9\xC8\xCB\xCA\u011A\u0116\u0112\u0118"],
["8faaba", "\u011C\u011E\u0122\u0120\u0124\xCD\xCC\xCF\xCE\u01CF\u0130\u012A\u012E\u0128\u0134\u0136\u0139\u013D\u013B\u0143\u0147\u0145\xD1\xD3\xD2\xD6\xD4\u01D1\u0150\u014C\xD5\u0154\u0158\u0156\u015A\u015C\u0160\u015E\u0164\u0162\xDA\xD9\xDC\xDB\u016C\u01D3\u0170\u016A\u0172\u016E\u0168\u01D7\u01DB\u01D9\u01D5\u0174\xDD\u0178\u0176\u0179\u017D\u017B"],
["8faba1", "\xE1\xE0\xE4\xE2\u0103\u01CE\u0101\u0105\xE5\xE3\u0107\u0109\u010D\xE7\u010B\u010F\xE9\xE8\xEB\xEA\u011B\u0117\u0113\u0119\u01F5\u011D\u011F"],
["8fabbd", "\u0121\u0125\xED\xEC\xEF\xEE\u01D0"],
["8fabc5", "\u012B\u012F\u0129\u0135\u0137\u013A\u013E\u013C\u0144\u0148\u0146\xF1\xF3\xF2\xF6\xF4\u01D2\u0151\u014D\xF5\u0155\u0159\u0157\u015B\u015D\u0161\u015F\u0165\u0163\xFA\xF9\xFC\xFB\u016D\u01D4\u0171\u016B\u0173\u016F\u0169\u01D8\u01DC\u01DA\u01D6\u0175\xFD\xFF\u0177\u017A\u017E\u017C"],
["8fb0a1", "\u4E02\u4E04\u4E05\u4E0C\u4E12\u4E1F\u4E23\u4E24\u4E28\u4E2B\u4E2E\u4E2F\u4E30\u4E35\u4E40\u4E41\u4E44\u4E47\u4E51\u4E5A\u4E5C\u4E63\u4E68\u4E69\u4E74\u4E75\u4E79\u4E7F\u4E8D\u4E96\u4E97\u4E9D\u4EAF\u4EB9\u4EC3\u4ED0\u4EDA\u4EDB\u4EE0\u4EE1\u4EE2\u4EE8\u4EEF\u4EF1\u4EF3\u4EF5\u4EFD\u4EFE\u4EFF\u4F00\u4F02\u4F03\u4F08\u4F0B\u4F0C\u4F12\u4F15\u4F16\u4F17\u4F19\u4F2E\u4F31\u4F60\u4F33\u4F35\u4F37\u4F39\u4F3B\u4F3E\u4F40\u4F42\u4F48\u4F49\u4F4B\u4F4C\u4F52\u4F54\u4F56\u4F58\u4F5F\u4F63\u4F6A\u4F6C\u4F6E\u4F71\u4F77\u4F78\u4F79\u4F7A\u4F7D\u4F7E\u4F81\u4F82\u4F84"],
["8fb1a1", "\u4F85\u4F89\u4F8A\u4F8C\u4F8E\u4F90\u4F92\u4F93\u4F94\u4F97\u4F99\u4F9A\u4F9E\u4F9F\u4FB2\u4FB7\u4FB9\u4FBB\u4FBC\u4FBD\u4FBE\u4FC0\u4FC1\u4FC5\u4FC6\u4FC8\u4FC9\u4FCB\u4FCC\u4FCD\u4FCF\u4FD2\u4FDC\u4FE0\u4FE2\u4FF0\u4FF2\u4FFC\u4FFD\u4FFF\u5000\u5001\u5004\u5007\u500A\u500C\u500E\u5010\u5013\u5017\u5018\u501B\u501C\u501D\u501E\u5022\u5027\u502E\u5030\u5032\u5033\u5035\u5040\u5041\u5042\u5045\u5046\u504A\u504C\u504E\u5051\u5052\u5053\u5057\u5059\u505F\u5060\u5062\u5063\u5066\u5067\u506A\u506D\u5070\u5071\u503B\u5081\u5083\u5084\u5086\u508A\u508E\u508F\u5090"],
["8fb2a1", "\u5092\u5093\u5094\u5096\u509B\u509C\u509E", 4, "\u50AA\u50AF\u50B0\u50B9\u50BA\u50BD\u50C0\u50C3\u50C4\u50C7\u50CC\u50CE\u50D0\u50D3\u50D4\u50D8\u50DC\u50DD\u50DF\u50E2\u50E4\u50E6\u50E8\u50E9\u50EF\u50F1\u50F6\u50FA\u50FE\u5103\u5106\u5107\u5108\u510B\u510C\u510D\u510E\u50F2\u5110\u5117\u5119\u511B\u511C\u511D\u511E\u5123\u5127\u5128\u512C\u512D\u512F\u5131\u5133\u5134\u5135\u5138\u5139\u5142\u514A\u514F\u5153\u5155\u5157\u5158\u515F\u5164\u5166\u517E\u5183\u5184\u518B\u518E\u5198\u519D\u51A1\u51A3\u51AD\u51B8\u51BA\u51BC\u51BE\u51BF\u51C2"],
["8fb3a1", "\u51C8\u51CF\u51D1\u51D2\u51D3\u51D5\u51D8\u51DE\u51E2\u51E5\u51EE\u51F2\u51F3\u51F4\u51F7\u5201\u5202\u5205\u5212\u5213\u5215\u5216\u5218\u5222\u5228\u5231\u5232\u5235\u523C\u5245\u5249\u5255\u5257\u5258\u525A\u525C\u525F\u5260\u5261\u5266\u526E\u5277\u5278\u5279\u5280\u5282\u5285\u528A\u528C\u5293\u5295\u5296\u5297\u5298\u529A\u529C\u52A4\u52A5\u52A6\u52A7\u52AF\u52B0\u52B6\u52B7\u52B8\u52BA\u52BB\u52BD\u52C0\u52C4\u52C6\u52C8\u52CC\u52CF\u52D1\u52D4\u52D6\u52DB\u52DC\u52E1\u52E5\u52E8\u52E9\u52EA\u52EC\u52F0\u52F1\u52F4\u52F6\u52F7\u5300\u5303\u530A\u530B"],
["8fb4a1", "\u530C\u5311\u5313\u5318\u531B\u531C\u531E\u531F\u5325\u5327\u5328\u5329\u532B\u532C\u532D\u5330\u5332\u5335\u533C\u533D\u533E\u5342\u534C\u534B\u5359\u535B\u5361\u5363\u5365\u536C\u536D\u5372\u5379\u537E\u5383\u5387\u5388\u538E\u5393\u5394\u5399\u539D\u53A1\u53A4\u53AA\u53AB\u53AF\u53B2\u53B4\u53B5\u53B7\u53B8\u53BA\u53BD\u53C0\u53C5\u53CF\u53D2\u53D3\u53D5\u53DA\u53DD\u53DE\u53E0\u53E6\u53E7\u53F5\u5402\u5413\u541A\u5421\u5427\u5428\u542A\u542F\u5431\u5434\u5435\u5443\u5444\u5447\u544D\u544F\u545E\u5462\u5464\u5466\u5467\u5469\u546B\u546D\u546E\u5474\u547F"],
["8fb5a1", "\u5481\u5483\u5485\u5488\u5489\u548D\u5491\u5495\u5496\u549C\u549F\u54A1\u54A6\u54A7\u54A9\u54AA\u54AD\u54AE\u54B1\u54B7\u54B9\u54BA\u54BB\u54BF\u54C6\u54CA\u54CD\u54CE\u54E0\u54EA\u54EC\u54EF\u54F6\u54FC\u54FE\u54FF\u5500\u5501\u5505\u5508\u5509\u550C\u550D\u550E\u5515\u552A\u552B\u5532\u5535\u5536\u553B\u553C\u553D\u5541\u5547\u5549\u554A\u554D\u5550\u5551\u5558\u555A\u555B\u555E\u5560\u5561\u5564\u5566\u557F\u5581\u5582\u5586\u5588\u558E\u558F\u5591\u5592\u5593\u5594\u5597\u55A3\u55A4\u55AD\u55B2\u55BF\u55C1\u55C3\u55C6\u55C9\u55CB\u55CC\u55CE\u55D1\u55D2"],
["8fb6a1", "\u55D3\u55D7\u55D8\u55DB\u55DE\u55E2\u55E9\u55F6\u55FF\u5605\u5608\u560A\u560D", 5, "\u5619\u562C\u5630\u5633\u5635\u5637\u5639\u563B\u563C\u563D\u563F\u5640\u5641\u5643\u5644\u5646\u5649\u564B\u564D\u564F\u5654\u565E\u5660\u5661\u5662\u5663\u5666\u5669\u566D\u566F\u5671\u5672\u5675\u5684\u5685\u5688\u568B\u568C\u5695\u5699\u569A\u569D\u569E\u569F\u56A6\u56A7\u56A8\u56A9\u56AB\u56AC\u56AD\u56B1\u56B3\u56B7\u56BE\u56C5\u56C9\u56CA\u56CB\u56CF\u56D0\u56CC\u56CD\u56D9\u56DC\u56DD\u56DF\u56E1\u56E4", 4, "\u56F1\u56EB\u56ED"],
["8fb7a1", "\u56F6\u56F7\u5701\u5702\u5707\u570A\u570C\u5711\u5715\u571A\u571B\u571D\u5720\u5722\u5723\u5724\u5725\u5729\u572A\u572C\u572E\u572F\u5733\u5734\u573D\u573E\u573F\u5745\u5746\u574C\u574D\u5752\u5762\u5765\u5767\u5768\u576B\u576D", 4, "\u5773\u5774\u5775\u5777\u5779\u577A\u577B\u577C\u577E\u5781\u5783\u578C\u5794\u5797\u5799\u579A\u579C\u579D\u579E\u579F\u57A1\u5795\u57A7\u57A8\u57A9\u57AC\u57B8\u57BD\u57C7\u57C8\u57CC\u57CF\u57D5\u57DD\u57DE\u57E4\u57E6\u57E7\u57E9\u57ED\u57F0\u57F5\u57F6\u57F8\u57FD\u57FE\u57FF\u5803\u5804\u5808\u5809\u57E1"],
["8fb8a1", "\u580C\u580D\u581B\u581E\u581F\u5820\u5826\u5827\u582D\u5832\u5839\u583F\u5849\u584C\u584D\u584F\u5850\u5855\u585F\u5861\u5864\u5867\u5868\u5878\u587C\u587F\u5880\u5881\u5887\u5888\u5889\u588A\u588C\u588D\u588F\u5890\u5894\u5896\u589D\u58A0\u58A1\u58A2\u58A6\u58A9\u58B1\u58B2\u58C4\u58BC\u58C2\u58C8\u58CD\u58CE\u58D0\u58D2\u58D4\u58D6\u58DA\u58DD\u58E1\u58E2\u58E9\u58F3\u5905\u5906\u590B\u590C\u5912\u5913\u5914\u8641\u591D\u5921\u5923\u5924\u5928\u592F\u5930\u5933\u5935\u5936\u593F\u5943\u5946\u5952\u5953\u5959\u595B\u595D\u595E\u595F\u5961\u5963\u596B\u596D"],
["8fb9a1", "\u596F\u5972\u5975\u5976\u5979\u597B\u597C\u598B\u598C\u598E\u5992\u5995\u5997\u599F\u59A4\u59A7\u59AD\u59AE\u59AF\u59B0\u59B3\u59B7\u59BA\u59BC\u59C1\u59C3\u59C4\u59C8\u59CA\u59CD\u59D2\u59DD\u59DE\u59DF\u59E3\u59E4\u59E7\u59EE\u59EF\u59F1\u59F2\u59F4\u59F7\u5A00\u5A04\u5A0C\u5A0D\u5A0E\u5A12\u5A13\u5A1E\u5A23\u5A24\u5A27\u5A28\u5A2A\u5A2D\u5A30\u5A44\u5A45\u5A47\u5A48\u5A4C\u5A50\u5A55\u5A5E\u5A63\u5A65\u5A67\u5A6D\u5A77\u5A7A\u5A7B\u5A7E\u5A8B\u5A90\u5A93\u5A96\u5A99\u5A9C\u5A9E\u5A9F\u5AA0\u5AA2\u5AA7\u5AAC\u5AB1\u5AB2\u5AB3\u5AB5\u5AB8\u5ABA\u5ABB\u5ABF"],
["8fbaa1", "\u5AC4\u5AC6\u5AC8\u5ACF\u5ADA\u5ADC\u5AE0\u5AE5\u5AEA\u5AEE\u5AF5\u5AF6\u5AFD\u5B00\u5B01\u5B08\u5B17\u5B34\u5B19\u5B1B\u5B1D\u5B21\u5B25\u5B2D\u5B38\u5B41\u5B4B\u5B4C\u5B52\u5B56\u5B5E\u5B68\u5B6E\u5B6F\u5B7C\u5B7D\u5B7E\u5B7F\u5B81\u5B84\u5B86\u5B8A\u5B8E\u5B90\u5B91\u5B93\u5B94\u5B96\u5BA8\u5BA9\u5BAC\u5BAD\u5BAF\u5BB1\u5BB2\u5BB7\u5BBA\u5BBC\u5BC0\u5BC1\u5BCD\u5BCF\u5BD6", 4, "\u5BE0\u5BEF\u5BF1\u5BF4\u5BFD\u5C0C\u5C17\u5C1E\u5C1F\u5C23\u5C26\u5C29\u5C2B\u5C2C\u5C2E\u5C30\u5C32\u5C35\u5C36\u5C59\u5C5A\u5C5C\u5C62\u5C63\u5C67\u5C68\u5C69"],
["8fbba1", "\u5C6D\u5C70\u5C74\u5C75\u5C7A\u5C7B\u5C7C\u5C7D\u5C87\u5C88\u5C8A\u5C8F\u5C92\u5C9D\u5C9F\u5CA0\u5CA2\u5CA3\u5CA6\u5CAA\u5CB2\u5CB4\u5CB5\u5CBA\u5CC9\u5CCB\u5CD2\u5CDD\u5CD7\u5CEE\u5CF1\u5CF2\u5CF4\u5D01\u5D06\u5D0D\u5D12\u5D2B\u5D23\u5D24\u5D26\u5D27\u5D31\u5D34\u5D39\u5D3D\u5D3F\u5D42\u5D43\u5D46\u5D48\u5D55\u5D51\u5D59\u5D4A\u5D5F\u5D60\u5D61\u5D62\u5D64\u5D6A\u5D6D\u5D70\u5D79\u5D7A\u5D7E\u5D7F\u5D81\u5D83\u5D88\u5D8A\u5D92\u5D93\u5D94\u5D95\u5D99\u5D9B\u5D9F\u5DA0\u5DA7\u5DAB\u5DB0\u5DB4\u5DB8\u5DB9\u5DC3\u5DC7\u5DCB\u5DD0\u5DCE\u5DD8\u5DD9\u5DE0\u5DE4"],
["8fbca1", "\u5DE9\u5DF8\u5DF9\u5E00\u5E07\u5E0D\u5E12\u5E14\u5E15\u5E18\u5E1F\u5E20\u5E2E\u5E28\u5E32\u5E35\u5E3E\u5E4B\u5E50\u5E49\u5E51\u5E56\u5E58\u5E5B\u5E5C\u5E5E\u5E68\u5E6A", 4, "\u5E70\u5E80\u5E8B\u5E8E\u5EA2\u5EA4\u5EA5\u5EA8\u5EAA\u5EAC\u5EB1\u5EB3\u5EBD\u5EBE\u5EBF\u5EC6\u5ECC\u5ECB\u5ECE\u5ED1\u5ED2\u5ED4\u5ED5\u5EDC\u5EDE\u5EE5\u5EEB\u5F02\u5F06\u5F07\u5F08\u5F0E\u5F19\u5F1C\u5F1D\u5F21\u5F22\u5F23\u5F24\u5F28\u5F2B\u5F2C\u5F2E\u5F30\u5F34\u5F36\u5F3B\u5F3D\u5F3F\u5F40\u5F44\u5F45\u5F47\u5F4D\u5F50\u5F54\u5F58\u5F5B\u5F60\u5F63\u5F64\u5F67"],
["8fbda1", "\u5F6F\u5F72\u5F74\u5F75\u5F78\u5F7A\u5F7D\u5F7E\u5F89\u5F8D\u5F8F\u5F96\u5F9C\u5F9D\u5FA2\u5FA7\u5FAB\u5FA4\u5FAC\u5FAF\u5FB0\u5FB1\u5FB8\u5FC4\u5FC7\u5FC8\u5FC9\u5FCB\u5FD0", 4, "\u5FDE\u5FE1\u5FE2\u5FE8\u5FE9\u5FEA\u5FEC\u5FED\u5FEE\u5FEF\u5FF2\u5FF3\u5FF6\u5FFA\u5FFC\u6007\u600A\u600D\u6013\u6014\u6017\u6018\u601A\u601F\u6024\u602D\u6033\u6035\u6040\u6047\u6048\u6049\u604C\u6051\u6054\u6056\u6057\u605D\u6061\u6067\u6071\u607E\u607F\u6082\u6086\u6088\u608A\u608E\u6091\u6093\u6095\u6098\u609D\u609E\u60A2\u60A4\u60A5\u60A8\u60B0\u60B1\u60B7"],
["8fbea1", "\u60BB\u60BE\u60C2\u60C4\u60C8\u60C9\u60CA\u60CB\u60CE\u60CF\u60D4\u60D5\u60D9\u60DB\u60DD\u60DE\u60E2\u60E5\u60F2\u60F5\u60F8\u60FC\u60FD\u6102\u6107\u610A\u610C\u6110", 4, "\u6116\u6117\u6119\u611C\u611E\u6122\u612A\u612B\u6130\u6131\u6135\u6136\u6137\u6139\u6141\u6145\u6146\u6149\u615E\u6160\u616C\u6172\u6178\u617B\u617C\u617F\u6180\u6181\u6183\u6184\u618B\u618D\u6192\u6193\u6197\u6198\u619C\u619D\u619F\u61A0\u61A5\u61A8\u61AA\u61AD\u61B8\u61B9\u61BC\u61C0\u61C1\u61C2\u61CE\u61CF\u61D5\u61DC\u61DD\u61DE\u61DF\u61E1\u61E2\u61E7\u61E9\u61E5"],
["8fbfa1", "\u61EC\u61ED\u61EF\u6201\u6203\u6204\u6207\u6213\u6215\u621C\u6220\u6222\u6223\u6227\u6229\u622B\u6239\u623D\u6242\u6243\u6244\u6246\u624C\u6250\u6251\u6252\u6254\u6256\u625A\u625C\u6264\u626D\u626F\u6273\u627A\u627D\u628D\u628E\u628F\u6290\u62A6\u62A8\u62B3\u62B6\u62B7\u62BA\u62BE\u62BF\u62C4\u62CE\u62D5\u62D6\u62DA\u62EA\u62F2\u62F4\u62FC\u62FD\u6303\u6304\u630A\u630B\u630D\u6310\u6313\u6316\u6318\u6329\u632A\u632D\u6335\u6336\u6339\u633C\u6341\u6342\u6343\u6344\u6346\u634A\u634B\u634E\u6352\u6353\u6354\u6358\u635B\u6365\u6366\u636C\u636D\u6371\u6374\u6375"],
["8fc0a1", "\u6378\u637C\u637D\u637F\u6382\u6384\u6387\u638A\u6390\u6394\u6395\u6399\u639A\u639E\u63A4\u63A6\u63AD\u63AE\u63AF\u63BD\u63C1\u63C5\u63C8\u63CE\u63D1\u63D3\u63D4\u63D5\u63DC\u63E0\u63E5\u63EA\u63EC\u63F2\u63F3\u63F5\u63F8\u63F9\u6409\u640A\u6410\u6412\u6414\u6418\u641E\u6420\u6422\u6424\u6425\u6429\u642A\u642F\u6430\u6435\u643D\u643F\u644B\u644F\u6451\u6452\u6453\u6454\u645A\u645B\u645C\u645D\u645F\u6460\u6461\u6463\u646D\u6473\u6474\u647B\u647D\u6485\u6487\u648F\u6490\u6491\u6498\u6499\u649B\u649D\u649F\u64A1\u64A3\u64A6\u64A8\u64AC\u64B3\u64BD\u64BE\u64BF"],
["8fc1a1", "\u64C4\u64C9\u64CA\u64CB\u64CC\u64CE\u64D0\u64D1\u64D5\u64D7\u64E4\u64E5\u64E9\u64EA\u64ED\u64F0\u64F5\u64F7\u64FB\u64FF\u6501\u6504\u6508\u6509\u650A\u650F\u6513\u6514\u6516\u6519\u651B\u651E\u651F\u6522\u6526\u6529\u652E\u6531\u653A\u653C\u653D\u6543\u6547\u6549\u6550\u6552\u6554\u655F\u6560\u6567\u656B\u657A\u657D\u6581\u6585\u658A\u6592\u6595\u6598\u659D\u65A0\u65A3\u65A6\u65AE\u65B2\u65B3\u65B4\u65BF\u65C2\u65C8\u65C9\u65CE\u65D0\u65D4\u65D6\u65D8\u65DF\u65F0\u65F2\u65F4\u65F5\u65F9\u65FE\u65FF\u6600\u6604\u6608\u6609\u660D\u6611\u6612\u6615\u6616\u661D"],
["8fc2a1", "\u661E\u6621\u6622\u6623\u6624\u6626\u6629\u662A\u662B\u662C\u662E\u6630\u6631\u6633\u6639\u6637\u6640\u6645\u6646\u664A\u664C\u6651\u664E\u6657\u6658\u6659\u665B\u665C\u6660\u6661\u66FB\u666A\u666B\u666C\u667E\u6673\u6675\u667F\u6677\u6678\u6679\u667B\u6680\u667C\u668B\u668C\u668D\u6690\u6692\u6699\u669A\u669B\u669C\u669F\u66A0\u66A4\u66AD\u66B1\u66B2\u66B5\u66BB\u66BF\u66C0\u66C2\u66C3\u66C8\u66CC\u66CE\u66CF\u66D4\u66DB\u66DF\u66E8\u66EB\u66EC\u66EE\u66FA\u6705\u6707\u670E\u6713\u6719\u671C\u6720\u6722\u6733\u673E\u6745\u6747\u6748\u674C\u6754\u6755\u675D"],
["8fc3a1", "\u6766\u676C\u676E\u6774\u6776\u677B\u6781\u6784\u678E\u678F\u6791\u6793\u6796\u6798\u6799\u679B\u67B0\u67B1\u67B2\u67B5\u67BB\u67BC\u67BD\u67F9\u67C0\u67C2\u67C3\u67C5\u67C8\u67C9\u67D2\u67D7\u67D9\u67DC\u67E1\u67E6\u67F0\u67F2\u67F6\u67F7\u6852\u6814\u6819\u681D\u681F\u6828\u6827\u682C\u682D\u682F\u6830\u6831\u6833\u683B\u683F\u6844\u6845\u684A\u684C\u6855\u6857\u6858\u685B\u686B\u686E", 4, "\u6875\u6879\u687A\u687B\u687C\u6882\u6884\u6886\u6888\u6896\u6898\u689A\u689C\u68A1\u68A3\u68A5\u68A9\u68AA\u68AE\u68B2\u68BB\u68C5\u68C8\u68CC\u68CF"],
["8fc4a1", "\u68D0\u68D1\u68D3\u68D6\u68D9\u68DC\u68DD\u68E5\u68E8\u68EA\u68EB\u68EC\u68ED\u68F0\u68F1\u68F5\u68F6\u68FB\u68FC\u68FD\u6906\u6909\u690A\u6910\u6911\u6913\u6916\u6917\u6931\u6933\u6935\u6938\u693B\u6942\u6945\u6949\u694E\u6957\u695B\u6963\u6964\u6965\u6966\u6968\u6969\u696C\u6970\u6971\u6972\u697A\u697B\u697F\u6980\u698D\u6992\u6996\u6998\u69A1\u69A5\u69A6\u69A8\u69AB\u69AD\u69AF\u69B7\u69B8\u69BA\u69BC\u69C5\u69C8\u69D1\u69D6\u69D7\u69E2\u69E5\u69EE\u69EF\u69F1\u69F3\u69F5\u69FE\u6A00\u6A01\u6A03\u6A0F\u6A11\u6A15\u6A1A\u6A1D\u6A20\u6A24\u6A28\u6A30\u6A32"],
["8fc5a1", "\u6A34\u6A37\u6A3B\u6A3E\u6A3F\u6A45\u6A46\u6A49\u6A4A\u6A4E\u6A50\u6A51\u6A52\u6A55\u6A56\u6A5B\u6A64\u6A67\u6A6A\u6A71\u6A73\u6A7E\u6A81\u6A83\u6A86\u6A87\u6A89\u6A8B\u6A91\u6A9B\u6A9D\u6A9E\u6A9F\u6AA5\u6AAB\u6AAF\u6AB0\u6AB1\u6AB4\u6ABD\u6ABE\u6ABF\u6AC6\u6AC9\u6AC8\u6ACC\u6AD0\u6AD4\u6AD5\u6AD6\u6ADC\u6ADD\u6AE4\u6AE7\u6AEC\u6AF0\u6AF1\u6AF2\u6AFC\u6AFD\u6B02\u6B03\u6B06\u6B07\u6B09\u6B0F\u6B10\u6B11\u6B17\u6B1B\u6B1E\u6B24\u6B28\u6B2B\u6B2C\u6B2F\u6B35\u6B36\u6B3B\u6B3F\u6B46\u6B4A\u6B4D\u6B52\u6B56\u6B58\u6B5D\u6B60\u6B67\u6B6B\u6B6E\u6B70\u6B75\u6B7D"],
["8fc6a1", "\u6B7E\u6B82\u6B85\u6B97\u6B9B\u6B9F\u6BA0\u6BA2\u6BA3\u6BA8\u6BA9\u6BAC\u6BAD\u6BAE\u6BB0\u6BB8\u6BB9\u6BBD\u6BBE\u6BC3\u6BC4\u6BC9\u6BCC\u6BD6\u6BDA\u6BE1\u6BE3\u6BE6\u6BE7\u6BEE\u6BF1\u6BF7\u6BF9\u6BFF\u6C02\u6C04\u6C05\u6C09\u6C0D\u6C0E\u6C10\u6C12\u6C19\u6C1F\u6C26\u6C27\u6C28\u6C2C\u6C2E\u6C33\u6C35\u6C36\u6C3A\u6C3B\u6C3F\u6C4A\u6C4B\u6C4D\u6C4F\u6C52\u6C54\u6C59\u6C5B\u6C5C\u6C6B\u6C6D\u6C6F\u6C74\u6C76\u6C78\u6C79\u6C7B\u6C85\u6C86\u6C87\u6C89\u6C94\u6C95\u6C97\u6C98\u6C9C\u6C9F\u6CB0\u6CB2\u6CB4\u6CC2\u6CC6\u6CCD\u6CCF\u6CD0\u6CD1\u6CD2\u6CD4\u6CD6"],
["8fc7a1", "\u6CDA\u6CDC\u6CE0\u6CE7\u6CE9\u6CEB\u6CEC\u6CEE\u6CF2\u6CF4\u6D04\u6D07\u6D0A\u6D0E\u6D0F\u6D11\u6D13\u6D1A\u6D26\u6D27\u6D28\u6C67\u6D2E\u6D2F\u6D31\u6D39\u6D3C\u6D3F\u6D57\u6D5E\u6D5F\u6D61\u6D65\u6D67\u6D6F\u6D70\u6D7C\u6D82\u6D87\u6D91\u6D92\u6D94\u6D96\u6D97\u6D98\u6DAA\u6DAC\u6DB4\u6DB7\u6DB9\u6DBD\u6DBF\u6DC4\u6DC8\u6DCA\u6DCE\u6DCF\u6DD6\u6DDB\u6DDD\u6DDF\u6DE0\u6DE2\u6DE5\u6DE9\u6DEF\u6DF0\u6DF4\u6DF6\u6DFC\u6E00\u6E04\u6E1E\u6E22\u6E27\u6E32\u6E36\u6E39\u6E3B\u6E3C\u6E44\u6E45\u6E48\u6E49\u6E4B\u6E4F\u6E51\u6E52\u6E53\u6E54\u6E57\u6E5C\u6E5D\u6E5E"],
["8fc8a1", "\u6E62\u6E63\u6E68\u6E73\u6E7B\u6E7D\u6E8D\u6E93\u6E99\u6EA0\u6EA7\u6EAD\u6EAE\u6EB1\u6EB3\u6EBB\u6EBF\u6EC0\u6EC1\u6EC3\u6EC7\u6EC8\u6ECA\u6ECD\u6ECE\u6ECF\u6EEB\u6EED\u6EEE\u6EF9\u6EFB\u6EFD\u6F04\u6F08\u6F0A\u6F0C\u6F0D\u6F16\u6F18\u6F1A\u6F1B\u6F26\u6F29\u6F2A\u6F2F\u6F30\u6F33\u6F36\u6F3B\u6F3C\u6F2D\u6F4F\u6F51\u6F52\u6F53\u6F57\u6F59\u6F5A\u6F5D\u6F5E\u6F61\u6F62\u6F68\u6F6C\u6F7D\u6F7E\u6F83\u6F87\u6F88\u6F8B\u6F8C\u6F8D\u6F90\u6F92\u6F93\u6F94\u6F96\u6F9A\u6F9F\u6FA0\u6FA5\u6FA6\u6FA7\u6FA8\u6FAE\u6FAF\u6FB0\u6FB5\u6FB6\u6FBC\u6FC5\u6FC7\u6FC8\u6FCA"],
["8fc9a1", "\u6FDA\u6FDE\u6FE8\u6FE9\u6FF0\u6FF5\u6FF9\u6FFC\u6FFD\u7000\u7005\u7006\u7007\u700D\u7017\u7020\u7023\u702F\u7034\u7037\u7039\u703C\u7043\u7044\u7048\u7049\u704A\u704B\u7054\u7055\u705D\u705E\u704E\u7064\u7065\u706C\u706E\u7075\u7076\u707E\u7081\u7085\u7086\u7094", 4, "\u709B\u70A4\u70AB\u70B0\u70B1\u70B4\u70B7\u70CA\u70D1\u70D3\u70D4\u70D5\u70D6\u70D8\u70DC\u70E4\u70FA\u7103", 4, "\u710B\u710C\u710F\u711E\u7120\u712B\u712D\u712F\u7130\u7131\u7138\u7141\u7145\u7146\u7147\u714A\u714B\u7150\u7152\u7157\u715A\u715C\u715E\u7160"],
["8fcaa1", "\u7168\u7179\u7180\u7185\u7187\u718C\u7192\u719A\u719B\u71A0\u71A2\u71AF\u71B0\u71B2\u71B3\u71BA\u71BF\u71C0\u71C1\u71C4\u71CB\u71CC\u71D3\u71D6\u71D9\u71DA\u71DC\u71F8\u71FE\u7200\u7207\u7208\u7209\u7213\u7217\u721A\u721D\u721F\u7224\u722B\u722F\u7234\u7238\u7239\u7241\u7242\u7243\u7245\u724E\u724F\u7250\u7253\u7255\u7256\u725A\u725C\u725E\u7260\u7263\u7268\u726B\u726E\u726F\u7271\u7277\u7278\u727B\u727C\u727F\u7284\u7289\u728D\u728E\u7293\u729B\u72A8\u72AD\u72AE\u72B1\u72B4\u72BE\u72C1\u72C7\u72C9\u72CC\u72D5\u72D6\u72D8\u72DF\u72E5\u72F3\u72F4\u72FA\u72FB"],
["8fcba1", "\u72FE\u7302\u7304\u7305\u7307\u730B\u730D\u7312\u7313\u7318\u7319\u731E\u7322\u7324\u7327\u7328\u732C\u7331\u7332\u7335\u733A\u733B\u733D\u7343\u734D\u7350\u7352\u7356\u7358\u735D\u735E\u735F\u7360\u7366\u7367\u7369\u736B\u736C\u736E\u736F\u7371\u7377\u7379\u737C\u7380\u7381\u7383\u7385\u7386\u738E\u7390\u7393\u7395\u7397\u7398\u739C\u739E\u739F\u73A0\u73A2\u73A5\u73A6\u73AA\u73AB\u73AD\u73B5\u73B7\u73B9\u73BC\u73BD\u73BF\u73C5\u73C6\u73C9\u73CB\u73CC\u73CF\u73D2\u73D3\u73D6\u73D9\u73DD\u73E1\u73E3\u73E6\u73E7\u73E9\u73F4\u73F5\u73F7\u73F9\u73FA\u73FB\u73FD"],
["8fcca1", "\u73FF\u7400\u7401\u7404\u7407\u740A\u7411\u741A\u741B\u7424\u7426\u7428", 9, "\u7439\u7440\u7443\u7444\u7446\u7447\u744B\u744D\u7451\u7452\u7457\u745D\u7462\u7466\u7467\u7468\u746B\u746D\u746E\u7471\u7472\u7480\u7481\u7485\u7486\u7487\u7489\u748F\u7490\u7491\u7492\u7498\u7499\u749A\u749C\u749F\u74A0\u74A1\u74A3\u74A6\u74A8\u74A9\u74AA\u74AB\u74AE\u74AF\u74B1\u74B2\u74B5\u74B9\u74BB\u74BF\u74C8\u74C9\u74CC\u74D0\u74D3\u74D8\u74DA\u74DB\u74DE\u74DF\u74E4\u74E8\u74EA\u74EB\u74EF\u74F4\u74FA\u74FB\u74FC\u74FF\u7506"],
["8fcda1", "\u7512\u7516\u7517\u7520\u7521\u7524\u7527\u7529\u752A\u752F\u7536\u7539\u753D\u753E\u753F\u7540\u7543\u7547\u7548\u754E\u7550\u7552\u7557\u755E\u755F\u7561\u756F\u7571\u7579", 5, "\u7581\u7585\u7590\u7592\u7593\u7595\u7599\u759C\u75A2\u75A4\u75B4\u75BA\u75BF\u75C0\u75C1\u75C4\u75C6\u75CC\u75CE\u75CF\u75D7\u75DC\u75DF\u75E0\u75E1\u75E4\u75E7\u75EC\u75EE\u75EF\u75F1\u75F9\u7600\u7602\u7603\u7604\u7607\u7608\u760A\u760C\u760F\u7612\u7613\u7615\u7616\u7619\u761B\u761C\u761D\u761E\u7623\u7625\u7626\u7629\u762D\u7632\u7633\u7635\u7638\u7639"],
["8fcea1", "\u763A\u763C\u764A\u7640\u7641\u7643\u7644\u7645\u7649\u764B\u7655\u7659\u765F\u7664\u7665\u766D\u766E\u766F\u7671\u7674\u7681\u7685\u768C\u768D\u7695\u769B\u769C\u769D\u769F\u76A0\u76A2", 6, "\u76AA\u76AD\u76BD\u76C1\u76C5\u76C9\u76CB\u76CC\u76CE\u76D4\u76D9\u76E0\u76E6\u76E8\u76EC\u76F0\u76F1\u76F6\u76F9\u76FC\u7700\u7706\u770A\u770E\u7712\u7714\u7715\u7717\u7719\u771A\u771C\u7722\u7728\u772D\u772E\u772F\u7734\u7735\u7736\u7739\u773D\u773E\u7742\u7745\u7746\u774A\u774D\u774E\u774F\u7752\u7756\u7757\u775C\u775E\u775F\u7760\u7762"],
["8fcfa1", "\u7764\u7767\u776A\u776C\u7770\u7772\u7773\u7774\u777A\u777D\u7780\u7784\u778C\u778D\u7794\u7795\u7796\u779A\u779F\u77A2\u77A7\u77AA\u77AE\u77AF\u77B1\u77B5\u77BE\u77C3\u77C9\u77D1\u77D2\u77D5\u77D9\u77DE\u77DF\u77E0\u77E4\u77E6\u77EA\u77EC\u77F0\u77F1\u77F4\u77F8\u77FB\u7805\u7806\u7809\u780D\u780E\u7811\u781D\u7821\u7822\u7823\u782D\u782E\u7830\u7835\u7837\u7843\u7844\u7847\u7848\u784C\u784E\u7852\u785C\u785E\u7860\u7861\u7863\u7864\u7868\u786A\u786E\u787A\u787E\u788A\u788F\u7894\u7898\u78A1\u789D\u789E\u789F\u78A4\u78A8\u78AC\u78AD\u78B0\u78B1\u78B2\u78B3"],
["8fd0a1", "\u78BB\u78BD\u78BF\u78C7\u78C8\u78C9\u78CC\u78CE\u78D2\u78D3\u78D5\u78D6\u78E4\u78DB\u78DF\u78E0\u78E1\u78E6\u78EA\u78F2\u78F3\u7900\u78F6\u78F7\u78FA\u78FB\u78FF\u7906\u790C\u7910\u791A\u791C\u791E\u791F\u7920\u7925\u7927\u7929\u792D\u7931\u7934\u7935\u793B\u793D\u793F\u7944\u7945\u7946\u794A\u794B\u794F\u7951\u7954\u7958\u795B\u795C\u7967\u7969\u796B\u7972\u7979\u797B\u797C\u797E\u798B\u798C\u7991\u7993\u7994\u7995\u7996\u7998\u799B\u799C\u79A1\u79A8\u79A9\u79AB\u79AF\u79B1\u79B4\u79B8\u79BB\u79C2\u79C4\u79C7\u79C8\u79CA\u79CF\u79D4\u79D6\u79DA\u79DD\u79DE"],
["8fd1a1", "\u79E0\u79E2\u79E5\u79EA\u79EB\u79ED\u79F1\u79F8\u79FC\u7A02\u7A03\u7A07\u7A09\u7A0A\u7A0C\u7A11\u7A15\u7A1B\u7A1E\u7A21\u7A27\u7A2B\u7A2D\u7A2F\u7A30\u7A34\u7A35\u7A38\u7A39\u7A3A\u7A44\u7A45\u7A47\u7A48\u7A4C\u7A55\u7A56\u7A59\u7A5C\u7A5D\u7A5F\u7A60\u7A65\u7A67\u7A6A\u7A6D\u7A75\u7A78\u7A7E\u7A80\u7A82\u7A85\u7A86\u7A8A\u7A8B\u7A90\u7A91\u7A94\u7A9E\u7AA0\u7AA3\u7AAC\u7AB3\u7AB5\u7AB9\u7ABB\u7ABC\u7AC6\u7AC9\u7ACC\u7ACE\u7AD1\u7ADB\u7AE8\u7AE9\u7AEB\u7AEC\u7AF1\u7AF4\u7AFB\u7AFD\u7AFE\u7B07\u7B14\u7B1F\u7B23\u7B27\u7B29\u7B2A\u7B2B\u7B2D\u7B2E\u7B2F\u7B30"],
["8fd2a1", "\u7B31\u7B34\u7B3D\u7B3F\u7B40\u7B41\u7B47\u7B4E\u7B55\u7B60\u7B64\u7B66\u7B69\u7B6A\u7B6D\u7B6F\u7B72\u7B73\u7B77\u7B84\u7B89\u7B8E\u7B90\u7B91\u7B96\u7B9B\u7B9E\u7BA0\u7BA5\u7BAC\u7BAF\u7BB0\u7BB2\u7BB5\u7BB6\u7BBA\u7BBB\u7BBC\u7BBD\u7BC2\u7BC5\u7BC8\u7BCA\u7BD4\u7BD6\u7BD7\u7BD9\u7BDA\u7BDB\u7BE8\u7BEA\u7BF2\u7BF4\u7BF5\u7BF8\u7BF9\u7BFA\u7BFC\u7BFE\u7C01\u7C02\u7C03\u7C04\u7C06\u7C09\u7C0B\u7C0C\u7C0E\u7C0F\u7C19\u7C1B\u7C20\u7C25\u7C26\u7C28\u7C2C\u7C31\u7C33\u7C34\u7C36\u7C39\u7C3A\u7C46\u7C4A\u7C55\u7C51\u7C52\u7C53\u7C59", 5],
["8fd3a1", "\u7C61\u7C63\u7C67\u7C69\u7C6D\u7C6E\u7C70\u7C72\u7C79\u7C7C\u7C7D\u7C86\u7C87\u7C8F\u7C94\u7C9E\u7CA0\u7CA6\u7CB0\u7CB6\u7CB7\u7CBA\u7CBB\u7CBC\u7CBF\u7CC4\u7CC7\u7CC8\u7CC9\u7CCD\u7CCF\u7CD3\u7CD4\u7CD5\u7CD7\u7CD9\u7CDA\u7CDD\u7CE6\u7CE9\u7CEB\u7CF5\u7D03\u7D07\u7D08\u7D09\u7D0F\u7D11\u7D12\u7D13\u7D16\u7D1D\u7D1E\u7D23\u7D26\u7D2A\u7D2D\u7D31\u7D3C\u7D3D\u7D3E\u7D40\u7D41\u7D47\u7D48\u7D4D\u7D51\u7D53\u7D57\u7D59\u7D5A\u7D5C\u7D5D\u7D65\u7D67\u7D6A\u7D70\u7D78\u7D7A\u7D7B\u7D7F\u7D81\u7D82\u7D83\u7D85\u7D86\u7D88\u7D8B\u7D8C\u7D8D\u7D91\u7D96\u7D97\u7D9D"],
["8fd4a1", "\u7D9E\u7DA6\u7DA7\u7DAA\u7DB3\u7DB6\u7DB7\u7DB9\u7DC2", 4, "\u7DCC\u7DCD\u7DCE\u7DD7\u7DD9\u7E00\u7DE2\u7DE5\u7DE6\u7DEA\u7DEB\u7DED\u7DF1\u7DF5\u7DF6\u7DF9\u7DFA\u7E08\u7E10\u7E11\u7E15\u7E17\u7E1C\u7E1D\u7E20\u7E27\u7E28\u7E2C\u7E2D\u7E2F\u7E33\u7E36\u7E3F\u7E44\u7E45\u7E47\u7E4E\u7E50\u7E52\u7E58\u7E5F\u7E61\u7E62\u7E65\u7E6B\u7E6E\u7E6F\u7E73\u7E78\u7E7E\u7E81\u7E86\u7E87\u7E8A\u7E8D\u7E91\u7E95\u7E98\u7E9A\u7E9D\u7E9E\u7F3C\u7F3B\u7F3D\u7F3E\u7F3F\u7F43\u7F44\u7F47\u7F4F\u7F52\u7F53\u7F5B\u7F5C\u7F5D\u7F61\u7F63\u7F64\u7F65\u7F66\u7F6D"],
["8fd5a1", "\u7F71\u7F7D\u7F7E\u7F7F\u7F80\u7F8B\u7F8D\u7F8F\u7F90\u7F91\u7F96\u7F97\u7F9C\u7FA1\u7FA2\u7FA6\u7FAA\u7FAD\u7FB4\u7FBC\u7FBF\u7FC0\u7FC3\u7FC8\u7FCE\u7FCF\u7FDB\u7FDF\u7FE3\u7FE5\u7FE8\u7FEC\u7FEE\u7FEF\u7FF2\u7FFA\u7FFD\u7FFE\u7FFF\u8007\u8008\u800A\u800D\u800E\u800F\u8011\u8013\u8014\u8016\u801D\u801E\u801F\u8020\u8024\u8026\u802C\u802E\u8030\u8034\u8035\u8037\u8039\u803A\u803C\u803E\u8040\u8044\u8060\u8064\u8066\u806D\u8071\u8075\u8081\u8088\u808E\u809C\u809E\u80A6\u80A7\u80AB\u80B8\u80B9\u80C8\u80CD\u80CF\u80D2\u80D4\u80D5\u80D7\u80D8\u80E0\u80ED\u80EE"],
["8fd6a1", "\u80F0\u80F2\u80F3\u80F6\u80F9\u80FA\u80FE\u8103\u810B\u8116\u8117\u8118\u811C\u811E\u8120\u8124\u8127\u812C\u8130\u8135\u813A\u813C\u8145\u8147\u814A\u814C\u8152\u8157\u8160\u8161\u8167\u8168\u8169\u816D\u816F\u8177\u8181\u8190\u8184\u8185\u8186\u818B\u818E\u8196\u8198\u819B\u819E\u81A2\u81AE\u81B2\u81B4\u81BB\u81CB\u81C3\u81C5\u81CA\u81CE\u81CF\u81D5\u81D7\u81DB\u81DD\u81DE\u81E1\u81E4\u81EB\u81EC\u81F0\u81F1\u81F2\u81F5\u81F6\u81F8\u81F9\u81FD\u81FF\u8200\u8203\u820F\u8213\u8214\u8219\u821A\u821D\u8221\u8222\u8228\u8232\u8234\u823A\u8243\u8244\u8245\u8246"],
["8fd7a1", "\u824B\u824E\u824F\u8251\u8256\u825C\u8260\u8263\u8267\u826D\u8274\u827B\u827D\u827F\u8280\u8281\u8283\u8284\u8287\u8289\u828A\u828E\u8291\u8294\u8296\u8298\u829A\u829B\u82A0\u82A1\u82A3\u82A4\u82A7\u82A8\u82A9\u82AA\u82AE\u82B0\u82B2\u82B4\u82B7\u82BA\u82BC\u82BE\u82BF\u82C6\u82D0\u82D5\u82DA\u82E0\u82E2\u82E4\u82E8\u82EA\u82ED\u82EF\u82F6\u82F7\u82FD\u82FE\u8300\u8301\u8307\u8308\u830A\u830B\u8354\u831B\u831D\u831E\u831F\u8321\u8322\u832C\u832D\u832E\u8330\u8333\u8337\u833A\u833C\u833D\u8342\u8343\u8344\u8347\u834D\u834E\u8351\u8355\u8356\u8357\u8370\u8378"],
["8fd8a1", "\u837D\u837F\u8380\u8382\u8384\u8386\u838D\u8392\u8394\u8395\u8398\u8399\u839B\u839C\u839D\u83A6\u83A7\u83A9\u83AC\u83BE\u83BF\u83C0\u83C7\u83C9\u83CF\u83D0\u83D1\u83D4\u83DD\u8353\u83E8\u83EA\u83F6\u83F8\u83F9\u83FC\u8401\u8406\u840A\u840F\u8411\u8415\u8419\u83AD\u842F\u8439\u8445\u8447\u8448\u844A\u844D\u844F\u8451\u8452\u8456\u8458\u8459\u845A\u845C\u8460\u8464\u8465\u8467\u846A\u8470\u8473\u8474\u8476\u8478\u847C\u847D\u8481\u8485\u8492\u8493\u8495\u849E\u84A6\u84A8\u84A9\u84AA\u84AF\u84B1\u84B4\u84BA\u84BD\u84BE\u84C0\u84C2\u84C7\u84C8\u84CC\u84CF\u84D3"],
["8fd9a1", "\u84DC\u84E7\u84EA\u84EF\u84F0\u84F1\u84F2\u84F7\u8532\u84FA\u84FB\u84FD\u8502\u8503\u8507\u850C\u850E\u8510\u851C\u851E\u8522\u8523\u8524\u8525\u8527\u852A\u852B\u852F\u8533\u8534\u8536\u853F\u8546\u854F", 4, "\u8556\u8559\u855C", 6, "\u8564\u856B\u856F\u8579\u857A\u857B\u857D\u857F\u8581\u8585\u8586\u8589\u858B\u858C\u858F\u8593\u8598\u859D\u859F\u85A0\u85A2\u85A5\u85A7\u85B4\u85B6\u85B7\u85B8\u85BC\u85BD\u85BE\u85BF\u85C2\u85C7\u85CA\u85CB\u85CE\u85AD\u85D8\u85DA\u85DF\u85E0\u85E6\u85E8\u85ED\u85F3\u85F6\u85FC"],
["8fdaa1", "\u85FF\u8600\u8604\u8605\u860D\u860E\u8610\u8611\u8612\u8618\u8619\u861B\u861E\u8621\u8627\u8629\u8636\u8638\u863A\u863C\u863D\u8640\u8642\u8646\u8652\u8653\u8656\u8657\u8658\u8659\u865D\u8660", 4, "\u8669\u866C\u866F\u8675\u8676\u8677\u867A\u868D\u8691\u8696\u8698\u869A\u869C\u86A1\u86A6\u86A7\u86A8\u86AD\u86B1\u86B3\u86B4\u86B5\u86B7\u86B8\u86B9\u86BF\u86C0\u86C1\u86C3\u86C5\u86D1\u86D2\u86D5\u86D7\u86DA\u86DC\u86E0\u86E3\u86E5\u86E7\u8688\u86FA\u86FC\u86FD\u8704\u8705\u8707\u870B\u870E\u870F\u8710\u8713\u8714\u8719\u871E\u871F\u8721\u8723"],
["8fdba1", "\u8728\u872E\u872F\u8731\u8732\u8739\u873A\u873C\u873D\u873E\u8740\u8743\u8745\u874D\u8758\u875D\u8761\u8764\u8765\u876F\u8771\u8772\u877B\u8783", 6, "\u878B\u878C\u8790\u8793\u8795\u8797\u8798\u8799\u879E\u87A0\u87A3\u87A7\u87AC\u87AD\u87AE\u87B1\u87B5\u87BE\u87BF\u87C1\u87C8\u87C9\u87CA\u87CE\u87D5\u87D6\u87D9\u87DA\u87DC\u87DF\u87E2\u87E3\u87E4\u87EA\u87EB\u87ED\u87F1\u87F3\u87F8\u87FA\u87FF\u8801\u8803\u8806\u8809\u880A\u880B\u8810\u8819\u8812\u8813\u8814\u8818\u881A\u881B\u881C\u881E\u881F\u8828\u882D\u882E\u8830\u8832\u8835"],
["8fdca1", "\u883A\u883C\u8841\u8843\u8845\u8848\u8849\u884A\u884B\u884E\u8851\u8855\u8856\u8858\u885A\u885C\u885F\u8860\u8864\u8869\u8871\u8879\u887B\u8880\u8898\u889A\u889B\u889C\u889F\u88A0\u88A8\u88AA\u88BA\u88BD\u88BE\u88C0\u88CA", 4, "\u88D1\u88D2\u88D3\u88DB\u88DE\u88E7\u88EF\u88F0\u88F1\u88F5\u88F7\u8901\u8906\u890D\u890E\u890F\u8915\u8916\u8918\u8919\u891A\u891C\u8920\u8926\u8927\u8928\u8930\u8931\u8932\u8935\u8939\u893A\u893E\u8940\u8942\u8945\u8946\u8949\u894F\u8952\u8957\u895A\u895B\u895C\u8961\u8962\u8963\u896B\u896E\u8970\u8973\u8975\u897A"],
["8fdda1", "\u897B\u897C\u897D\u8989\u898D\u8990\u8994\u8995\u899B\u899C\u899F\u89A0\u89A5\u89B0\u89B4\u89B5\u89B6\u89B7\u89BC\u89D4", 4, "\u89E5\u89E9\u89EB\u89ED\u89F1\u89F3\u89F6\u89F9\u89FD\u89FF\u8A04\u8A05\u8A07\u8A0F\u8A11\u8A12\u8A14\u8A15\u8A1E\u8A20\u8A22\u8A24\u8A26\u8A2B\u8A2C\u8A2F\u8A35\u8A37\u8A3D\u8A3E\u8A40\u8A43\u8A45\u8A47\u8A49\u8A4D\u8A4E\u8A53\u8A56\u8A57\u8A58\u8A5C\u8A5D\u8A61\u8A65\u8A67\u8A75\u8A76\u8A77\u8A79\u8A7A\u8A7B\u8A7E\u8A7F\u8A80\u8A83\u8A86\u8A8B\u8A8F\u8A90\u8A92\u8A96\u8A97\u8A99\u8A9F\u8AA7\u8AA9\u8AAE\u8AAF\u8AB3"],
["8fdea1", "\u8AB6\u8AB7\u8ABB\u8ABE\u8AC3\u8AC6\u8AC8\u8AC9\u8ACA\u8AD1\u8AD3\u8AD4\u8AD5\u8AD7\u8ADD\u8ADF\u8AEC\u8AF0\u8AF4\u8AF5\u8AF6\u8AFC\u8AFF\u8B05\u8B06\u8B0B\u8B11\u8B1C\u8B1E\u8B1F\u8B0A\u8B2D\u8B30\u8B37\u8B3C\u8B42", 4, "\u8B48\u8B52\u8B53\u8B54\u8B59\u8B4D\u8B5E\u8B63\u8B6D\u8B76\u8B78\u8B79\u8B7C\u8B7E\u8B81\u8B84\u8B85\u8B8B\u8B8D\u8B8F\u8B94\u8B95\u8B9C\u8B9E\u8B9F\u8C38\u8C39\u8C3D\u8C3E\u8C45\u8C47\u8C49\u8C4B\u8C4F\u8C51\u8C53\u8C54\u8C57\u8C58\u8C5B\u8C5D\u8C59\u8C63\u8C64\u8C66\u8C68\u8C69\u8C6D\u8C73\u8C75\u8C76\u8C7B\u8C7E\u8C86"],
["8fdfa1", "\u8C87\u8C8B\u8C90\u8C92\u8C93\u8C99\u8C9B\u8C9C\u8CA4\u8CB9\u8CBA\u8CC5\u8CC6\u8CC9\u8CCB\u8CCF\u8CD6\u8CD5\u8CD9\u8CDD\u8CE1\u8CE8\u8CEC\u8CEF\u8CF0\u8CF2\u8CF5\u8CF7\u8CF8\u8CFE\u8CFF\u8D01\u8D03\u8D09\u8D12\u8D17\u8D1B\u8D65\u8D69\u8D6C\u8D6E\u8D7F\u8D82\u8D84\u8D88\u8D8D\u8D90\u8D91\u8D95\u8D9E\u8D9F\u8DA0\u8DA6\u8DAB\u8DAC\u8DAF\u8DB2\u8DB5\u8DB7\u8DB9\u8DBB\u8DC0\u8DC5\u8DC6\u8DC7\u8DC8\u8DCA\u8DCE\u8DD1\u8DD4\u8DD5\u8DD7\u8DD9\u8DE4\u8DE5\u8DE7\u8DEC\u8DF0\u8DBC\u8DF1\u8DF2\u8DF4\u8DFD\u8E01\u8E04\u8E05\u8E06\u8E0B\u8E11\u8E14\u8E16\u8E20\u8E21\u8E22"],
["8fe0a1", "\u8E23\u8E26\u8E27\u8E31\u8E33\u8E36\u8E37\u8E38\u8E39\u8E3D\u8E40\u8E41\u8E4B\u8E4D\u8E4E\u8E4F\u8E54\u8E5B\u8E5C\u8E5D\u8E5E\u8E61\u8E62\u8E69\u8E6C\u8E6D\u8E6F\u8E70\u8E71\u8E79\u8E7A\u8E7B\u8E82\u8E83\u8E89\u8E90\u8E92\u8E95\u8E9A\u8E9B\u8E9D\u8E9E\u8EA2\u8EA7\u8EA9\u8EAD\u8EAE\u8EB3\u8EB5\u8EBA\u8EBB\u8EC0\u8EC1\u8EC3\u8EC4\u8EC7\u8ECF\u8ED1\u8ED4\u8EDC\u8EE8\u8EEE\u8EF0\u8EF1\u8EF7\u8EF9\u8EFA\u8EED\u8F00\u8F02\u8F07\u8F08\u8F0F\u8F10\u8F16\u8F17\u8F18\u8F1E\u8F20\u8F21\u8F23\u8F25\u8F27\u8F28\u8F2C\u8F2D\u8F2E\u8F34\u8F35\u8F36\u8F37\u8F3A\u8F40\u8F41"],
["8fe1a1", "\u8F43\u8F47\u8F4F\u8F51", 4, "\u8F58\u8F5D\u8F5E\u8F65\u8F9D\u8FA0\u8FA1\u8FA4\u8FA5\u8FA6\u8FB5\u8FB6\u8FB8\u8FBE\u8FC0\u8FC1\u8FC6\u8FCA\u8FCB\u8FCD\u8FD0\u8FD2\u8FD3\u8FD5\u8FE0\u8FE3\u8FE4\u8FE8\u8FEE\u8FF1\u8FF5\u8FF6\u8FFB\u8FFE\u9002\u9004\u9008\u900C\u9018\u901B\u9028\u9029\u902F\u902A\u902C\u902D\u9033\u9034\u9037\u903F\u9043\u9044\u904C\u905B\u905D\u9062\u9066\u9067\u906C\u9070\u9074\u9079\u9085\u9088\u908B\u908C\u908E\u9090\u9095\u9097\u9098\u9099\u909B\u90A0\u90A1\u90A2\u90A5\u90B0\u90B2\u90B3\u90B4\u90B6\u90BD\u90CC\u90BE\u90C3"],
["8fe2a1", "\u90C4\u90C5\u90C7\u90C8\u90D5\u90D7\u90D8\u90D9\u90DC\u90DD\u90DF\u90E5\u90D2\u90F6\u90EB\u90EF\u90F0\u90F4\u90FE\u90FF\u9100\u9104\u9105\u9106\u9108\u910D\u9110\u9114\u9116\u9117\u9118\u911A\u911C\u911E\u9120\u9125\u9122\u9123\u9127\u9129\u912E\u912F\u9131\u9134\u9136\u9137\u9139\u913A\u913C\u913D\u9143\u9147\u9148\u914F\u9153\u9157\u9159\u915A\u915B\u9161\u9164\u9167\u916D\u9174\u9179\u917A\u917B\u9181\u9183\u9185\u9186\u918A\u918E\u9191\u9193\u9194\u9195\u9198\u919E\u91A1\u91A6\u91A8\u91AC\u91AD\u91AE\u91B0\u91B1\u91B2\u91B3\u91B6\u91BB\u91BC\u91BD\u91BF"],
["8fe3a1", "\u91C2\u91C3\u91C5\u91D3\u91D4\u91D7\u91D9\u91DA\u91DE\u91E4\u91E5\u91E9\u91EA\u91EC", 5, "\u91F7\u91F9\u91FB\u91FD\u9200\u9201\u9204\u9205\u9206\u9207\u9209\u920A\u920C\u9210\u9212\u9213\u9216\u9218\u921C\u921D\u9223\u9224\u9225\u9226\u9228\u922E\u922F\u9230\u9233\u9235\u9236\u9238\u9239\u923A\u923C\u923E\u9240\u9242\u9243\u9246\u9247\u924A\u924D\u924E\u924F\u9251\u9258\u9259\u925C\u925D\u9260\u9261\u9265\u9267\u9268\u9269\u926E\u926F\u9270\u9275", 4, "\u927B\u927C\u927D\u927F\u9288\u9289\u928A\u928D\u928E\u9292\u9297"],
["8fe4a1", "\u9299\u929F\u92A0\u92A4\u92A5\u92A7\u92A8\u92AB\u92AF\u92B2\u92B6\u92B8\u92BA\u92BB\u92BC\u92BD\u92BF", 4, "\u92C5\u92C6\u92C7\u92C8\u92CB\u92CC\u92CD\u92CE\u92D0\u92D3\u92D5\u92D7\u92D8\u92D9\u92DC\u92DD\u92DF\u92E0\u92E1\u92E3\u92E5\u92E7\u92E8\u92EC\u92EE\u92F0\u92F9\u92FB\u92FF\u9300\u9302\u9308\u930D\u9311\u9314\u9315\u931C\u931D\u931E\u931F\u9321\u9324\u9325\u9327\u9329\u932A\u9333\u9334\u9336\u9337\u9347\u9348\u9349\u9350\u9351\u9352\u9355\u9357\u9358\u935A\u935E\u9364\u9365\u9367\u9369\u936A\u936D\u936F\u9370\u9371\u9373\u9374\u9376"],
["8fe5a1", "\u937A\u937D\u937F\u9380\u9381\u9382\u9388\u938A\u938B\u938D\u938F\u9392\u9395\u9398\u939B\u939E\u93A1\u93A3\u93A4\u93A6\u93A8\u93AB\u93B4\u93B5\u93B6\u93BA\u93A9\u93C1\u93C4\u93C5\u93C6\u93C7\u93C9", 4, "\u93D3\u93D9\u93DC\u93DE\u93DF\u93E2\u93E6\u93E7\u93F9\u93F7\u93F8\u93FA\u93FB\u93FD\u9401\u9402\u9404\u9408\u9409\u940D\u940E\u940F\u9415\u9416\u9417\u941F\u942E\u942F\u9431\u9432\u9433\u9434\u943B\u943F\u943D\u9443\u9445\u9448\u944A\u944C\u9455\u9459\u945C\u945F\u9461\u9463\u9468\u946B\u946D\u946E\u946F\u9471\u9472\u9484\u9483\u9578\u9579"],
["8fe6a1", "\u957E\u9584\u9588\u958C\u958D\u958E\u959D\u959E\u959F\u95A1\u95A6\u95A9\u95AB\u95AC\u95B4\u95B6\u95BA\u95BD\u95BF\u95C6\u95C8\u95C9\u95CB\u95D0\u95D1\u95D2\u95D3\u95D9\u95DA\u95DD\u95DE\u95DF\u95E0\u95E4\u95E6\u961D\u961E\u9622\u9624\u9625\u9626\u962C\u9631\u9633\u9637\u9638\u9639\u963A\u963C\u963D\u9641\u9652\u9654\u9656\u9657\u9658\u9661\u966E\u9674\u967B\u967C\u967E\u967F\u9681\u9682\u9683\u9684\u9689\u9691\u9696\u969A\u969D\u969F\u96A4\u96A5\u96A6\u96A9\u96AE\u96AF\u96B3\u96BA\u96CA\u96D2\u5DB2\u96D8\u96DA\u96DD\u96DE\u96DF\u96E9\u96EF\u96F1\u96FA\u9702"],
["8fe7a1", "\u9703\u9705\u9709\u971A\u971B\u971D\u9721\u9722\u9723\u9728\u9731\u9733\u9741\u9743\u974A\u974E\u974F\u9755\u9757\u9758\u975A\u975B\u9763\u9767\u976A\u976E\u9773\u9776\u9777\u9778\u977B\u977D\u977F\u9780\u9789\u9795\u9796\u9797\u9799\u979A\u979E\u979F\u97A2\u97AC\u97AE\u97B1\u97B2\u97B5\u97B6\u97B8\u97B9\u97BA\u97BC\u97BE\u97BF\u97C1\u97C4\u97C5\u97C7\u97C9\u97CA\u97CC\u97CD\u97CE\u97D0\u97D1\u97D4\u97D7\u97D8\u97D9\u97DD\u97DE\u97E0\u97DB\u97E1\u97E4\u97EF\u97F1\u97F4\u97F7\u97F8\u97FA\u9807\u980A\u9819\u980D\u980E\u9814\u9816\u981C\u981E\u9820\u9823\u9826"],
["8fe8a1", "\u982B\u982E\u982F\u9830\u9832\u9833\u9835\u9825\u983E\u9844\u9847\u984A\u9851\u9852\u9853\u9856\u9857\u9859\u985A\u9862\u9863\u9865\u9866\u986A\u986C\u98AB\u98AD\u98AE\u98B0\u98B4\u98B7\u98B8\u98BA\u98BB\u98BF\u98C2\u98C5\u98C8\u98CC\u98E1\u98E3\u98E5\u98E6\u98E7\u98EA\u98F3\u98F6\u9902\u9907\u9908\u9911\u9915\u9916\u9917\u991A\u991B\u991C\u991F\u9922\u9926\u9927\u992B\u9931", 4, "\u9939\u993A\u993B\u993C\u9940\u9941\u9946\u9947\u9948\u994D\u994E\u9954\u9958\u9959\u995B\u995C\u995E\u995F\u9960\u999B\u999D\u999F\u99A6\u99B0\u99B1\u99B2\u99B5"],
["8fe9a1", "\u99B9\u99BA\u99BD\u99BF\u99C3\u99C9\u99D3\u99D4\u99D9\u99DA\u99DC\u99DE\u99E7\u99EA\u99EB\u99EC\u99F0\u99F4\u99F5\u99F9\u99FD\u99FE\u9A02\u9A03\u9A04\u9A0B\u9A0C\u9A10\u9A11\u9A16\u9A1E\u9A20\u9A22\u9A23\u9A24\u9A27\u9A2D\u9A2E\u9A33\u9A35\u9A36\u9A38\u9A47\u9A41\u9A44\u9A4A\u9A4B\u9A4C\u9A4E\u9A51\u9A54\u9A56\u9A5D\u9AAA\u9AAC\u9AAE\u9AAF\u9AB2\u9AB4\u9AB5\u9AB6\u9AB9\u9ABB\u9ABE\u9ABF\u9AC1\u9AC3\u9AC6\u9AC8\u9ACE\u9AD0\u9AD2\u9AD5\u9AD6\u9AD7\u9ADB\u9ADC\u9AE0\u9AE4\u9AE5\u9AE7\u9AE9\u9AEC\u9AF2\u9AF3\u9AF5\u9AF9\u9AFA\u9AFD\u9AFF", 4],
["8feaa1", "\u9B04\u9B05\u9B08\u9B09\u9B0B\u9B0C\u9B0D\u9B0E\u9B10\u9B12\u9B16\u9B19\u9B1B\u9B1C\u9B20\u9B26\u9B2B\u9B2D\u9B33\u9B34\u9B35\u9B37\u9B39\u9B3A\u9B3D\u9B48\u9B4B\u9B4C\u9B55\u9B56\u9B57\u9B5B\u9B5E\u9B61\u9B63\u9B65\u9B66\u9B68\u9B6A", 4, "\u9B73\u9B75\u9B77\u9B78\u9B79\u9B7F\u9B80\u9B84\u9B85\u9B86\u9B87\u9B89\u9B8A\u9B8B\u9B8D\u9B8F\u9B90\u9B94\u9B9A\u9B9D\u9B9E\u9BA6\u9BA7\u9BA9\u9BAC\u9BB0\u9BB1\u9BB2\u9BB7\u9BB8\u9BBB\u9BBC\u9BBE\u9BBF\u9BC1\u9BC7\u9BC8\u9BCE\u9BD0\u9BD7\u9BD8\u9BDD\u9BDF\u9BE5\u9BE7\u9BEA\u9BEB\u9BEF\u9BF3\u9BF7\u9BF8"],
["8feba1", "\u9BF9\u9BFA\u9BFD\u9BFF\u9C00\u9C02\u9C0B\u9C0F\u9C11\u9C16\u9C18\u9C19\u9C1A\u9C1C\u9C1E\u9C22\u9C23\u9C26", 4, "\u9C31\u9C35\u9C36\u9C37\u9C3D\u9C41\u9C43\u9C44\u9C45\u9C49\u9C4A\u9C4E\u9C4F\u9C50\u9C53\u9C54\u9C56\u9C58\u9C5B\u9C5D\u9C5E\u9C5F\u9C63\u9C69\u9C6A\u9C5C\u9C6B\u9C68\u9C6E\u9C70\u9C72\u9C75\u9C77\u9C7B\u9CE6\u9CF2\u9CF7\u9CF9\u9D0B\u9D02\u9D11\u9D17\u9D18\u9D1C\u9D1D\u9D1E\u9D2F\u9D30\u9D32\u9D33\u9D34\u9D3A\u9D3C\u9D45\u9D3D\u9D42\u9D43\u9D47\u9D4A\u9D53\u9D54\u9D5F\u9D63\u9D62\u9D65\u9D69\u9D6A\u9D6B\u9D70\u9D76\u9D77\u9D7B"],
["8feca1", "\u9D7C\u9D7E\u9D83\u9D84\u9D86\u9D8A\u9D8D\u9D8E\u9D92\u9D93\u9D95\u9D96\u9D97\u9D98\u9DA1\u9DAA\u9DAC\u9DAE\u9DB1\u9DB5\u9DB9\u9DBC\u9DBF\u9DC3\u9DC7\u9DC9\u9DCA\u9DD4\u9DD5\u9DD6\u9DD7\u9DDA\u9DDE\u9DDF\u9DE0\u9DE5\u9DE7\u9DE9\u9DEB\u9DEE\u9DF0\u9DF3\u9DF4\u9DFE\u9E0A\u9E02\u9E07\u9E0E\u9E10\u9E11\u9E12\u9E15\u9E16\u9E19\u9E1C\u9E1D\u9E7A\u9E7B\u9E7C\u9E80\u9E82\u9E83\u9E84\u9E85\u9E87\u9E8E\u9E8F\u9E96\u9E98\u9E9B\u9E9E\u9EA4\u9EA8\u9EAC\u9EAE\u9EAF\u9EB0\u9EB3\u9EB4\u9EB5\u9EC6\u9EC8\u9ECB\u9ED5\u9EDF\u9EE4\u9EE7\u9EEC\u9EED\u9EEE\u9EF0\u9EF1\u9EF2\u9EF5"],
["8feda1", "\u9EF8\u9EFF\u9F02\u9F03\u9F09\u9F0F\u9F10\u9F11\u9F12\u9F14\u9F16\u9F17\u9F19\u9F1A\u9F1B\u9F1F\u9F22\u9F26\u9F2A\u9F2B\u9F2F\u9F31\u9F32\u9F34\u9F37\u9F39\u9F3A\u9F3C\u9F3D\u9F3F\u9F41\u9F43", 4, "\u9F53\u9F55\u9F56\u9F57\u9F58\u9F5A\u9F5D\u9F5E\u9F68\u9F69\u9F6D", 4, "\u9F73\u9F75\u9F7A\u9F7D\u9F8F\u9F90\u9F91\u9F92\u9F94\u9F96\u9F97\u9F9E\u9FA1\u9FA2\u9FA3\u9FA5"]
];
}
});
var require_cp93622 = __commonJS2({
"node_modules/body-parser/node_modules/iconv-lite/encodings/tables/cp936.json"(exports2, module2) {
module2.exports = [
["0", "\0", 127, "\u20AC"],
["8140", "\u4E02\u4E04\u4E05\u4E06\u4E0F\u4E12\u4E17\u4E1F\u4E20\u4E21\u4E23\u4E26\u4E29\u4E2E\u4E2F\u4E31\u4E33\u4E35\u4E37\u4E3C\u4E40\u4E41\u4E42\u4E44\u4E46\u4E4A\u4E51\u4E55\u4E57\u4E5A\u4E5B\u4E62\u4E63\u4E64\u4E65\u4E67\u4E68\u4E6A", 5, "\u4E72\u4E74", 9, "\u4E7F", 6, "\u4E87\u4E8A"],
["8180", "\u4E90\u4E96\u4E97\u4E99\u4E9C\u4E9D\u4E9E\u4EA3\u4EAA\u4EAF\u4EB0\u4EB1\u4EB4\u4EB6\u4EB7\u4EB8\u4EB9\u4EBC\u4EBD\u4EBE\u4EC8\u4ECC\u4ECF\u4ED0\u4ED2\u4EDA\u4EDB\u4EDC\u4EE0\u4EE2\u4EE6\u4EE7\u4EE9\u4EED\u4EEE\u4EEF\u4EF1\u4EF4\u4EF8\u4EF9\u4EFA\u4EFC\u4EFE\u4F00\u4F02", 6, "\u4F0B\u4F0C\u4F12", 4, "\u4F1C\u4F1D\u4F21\u4F23\u4F28\u4F29\u4F2C\u4F2D\u4F2E\u4F31\u4F33\u4F35\u4F37\u4F39\u4F3B\u4F3E", 4, "\u4F44\u4F45\u4F47", 5, "\u4F52\u4F54\u4F56\u4F61\u4F62\u4F66\u4F68\u4F6A\u4F6B\u4F6D\u4F6E\u4F71\u4F72\u4F75\u4F77\u4F78\u4F79\u4F7A\u4F7D\u4F80\u4F81\u4F82\u4F85\u4F86\u4F87\u4F8A\u4F8C\u4F8E\u4F90\u4F92\u4F93\u4F95\u4F96\u4F98\u4F99\u4F9A\u4F9C\u4F9E\u4F9F\u4FA1\u4FA2"],
["8240", "\u4FA4\u4FAB\u4FAD\u4FB0", 4, "\u4FB6", 8, "\u4FC0\u4FC1\u4FC2\u4FC6\u4FC7\u4FC8\u4FC9\u4FCB\u4FCC\u4FCD\u4FD2", 4, "\u4FD9\u4FDB\u4FE0\u4FE2\u4FE4\u4FE5\u4FE7\u4FEB\u4FEC\u4FF0\u4FF2\u4FF4\u4FF5\u4FF6\u4FF7\u4FF9\u4FFB\u4FFC\u4FFD\u4FFF", 11],
["8280", "\u500B\u500E\u5010\u5011\u5013\u5015\u5016\u5017\u501B\u501D\u501E\u5020\u5022\u5023\u5024\u5027\u502B\u502F", 10, "\u503B\u503D\u503F\u5040\u5041\u5042\u5044\u5045\u5046\u5049\u504A\u504B\u504D\u5050", 4, "\u5056\u5057\u5058\u5059\u505B\u505D", 7, "\u5066", 5, "\u506D", 8, "\u5078\u5079\u507A\u507C\u507D\u5081\u5082\u5083\u5084\u5086\u5087\u5089\u508A\u508B\u508C\u508E", 20, "\u50A4\u50A6\u50AA\u50AB\u50AD", 4, "\u50B3", 6, "\u50BC"],
["8340", "\u50BD", 17, "\u50D0", 5, "\u50D7\u50D8\u50D9\u50DB", 10, "\u50E8\u50E9\u50EA\u50EB\u50EF\u50F0\u50F1\u50F2\u50F4\u50F6", 4, "\u50FC", 9, "\u5108"],
["8380", "\u5109\u510A\u510C", 5, "\u5113", 13, "\u5122", 28, "\u5142\u5147\u514A\u514C\u514E\u514F\u5150\u5152\u5153\u5157\u5158\u5159\u515B\u515D", 4, "\u5163\u5164\u5166\u5167\u5169\u516A\u516F\u5172\u517A\u517E\u517F\u5183\u5184\u5186\u5187\u518A\u518B\u518E\u518F\u5190\u5191\u5193\u5194\u5198\u519A\u519D\u519E\u519F\u51A1\u51A3\u51A6", 4, "\u51AD\u51AE\u51B4\u51B8\u51B9\u51BA\u51BE\u51BF\u51C1\u51C2\u51C3\u51C5\u51C8\u51CA\u51CD\u51CE\u51D0\u51D2", 5],
["8440", "\u51D8\u51D9\u51DA\u51DC\u51DE\u51DF\u51E2\u51E3\u51E5", 5, "\u51EC\u51EE\u51F1\u51F2\u51F4\u51F7\u51FE\u5204\u5205\u5209\u520B\u520C\u520F\u5210\u5213\u5214\u5215\u521C\u521E\u521F\u5221\u5222\u5223\u5225\u5226\u5227\u522A\u522C\u522F\u5231\u5232\u5234\u5235\u523C\u523E\u5244", 5, "\u524B\u524E\u524F\u5252\u5253\u5255\u5257\u5258"],
["8480", "\u5259\u525A\u525B\u525D\u525F\u5260\u5262\u5263\u5264\u5266\u5268\u526B\u526C\u526D\u526E\u5270\u5271\u5273", 9, "\u527E\u5280\u5283", 4, "\u5289", 6, "\u5291\u5292\u5294", 6, "\u529C\u52A4\u52A5\u52A6\u52A7\u52AE\u52AF\u52B0\u52B4", 9, "\u52C0\u52C1\u52C2\u52C4\u52C5\u52C6\u52C8\u52CA\u52CC\u52CD\u52CE\u52CF\u52D1\u52D3\u52D4\u52D5\u52D7\u52D9", 5, "\u52E0\u52E1\u52E2\u52E3\u52E5", 10, "\u52F1", 7, "\u52FB\u52FC\u52FD\u5301\u5302\u5303\u5304\u5307\u5309\u530A\u530B\u530C\u530E"],
["8540", "\u5311\u5312\u5313\u5314\u5318\u531B\u531C\u531E\u531F\u5322\u5324\u5325\u5327\u5328\u5329\u532B\u532C\u532D\u532F", 9, "\u533C\u533D\u5340\u5342\u5344\u5346\u534B\u534C\u534D\u5350\u5354\u5358\u5359\u535B\u535D\u5365\u5368\u536A\u536C\u536D\u5372\u5376\u5379\u537B\u537C\u537D\u537E\u5380\u5381\u5383\u5387\u5388\u538A\u538E\u538F"],
["8580", "\u5390", 4, "\u5396\u5397\u5399\u539B\u539C\u539E\u53A0\u53A1\u53A4\u53A7\u53AA\u53AB\u53AC\u53AD\u53AF", 6, "\u53B7\u53B8\u53B9\u53BA\u53BC\u53BD\u53BE\u53C0\u53C3", 4, "\u53CE\u53CF\u53D0\u53D2\u53D3\u53D5\u53DA\u53DC\u53DD\u53DE\u53E1\u53E2\u53E7\u53F4\u53FA\u53FE\u53FF\u5400\u5402\u5405\u5407\u540B\u5414\u5418\u5419\u541A\u541C\u5422\u5424\u5425\u542A\u5430\u5433\u5436\u5437\u543A\u543D\u543F\u5441\u5442\u5444\u5445\u5447\u5449\u544C\u544D\u544E\u544F\u5451\u545A\u545D", 4, "\u5463\u5465\u5467\u5469", 7, "\u5474\u5479\u547A\u547E\u547F\u5481\u5483\u5485\u5487\u5488\u5489\u548A\u548D\u5491\u5493\u5497\u5498\u549C\u549E\u549F\u54A0\u54A1"],
["8640", "\u54A2\u54A5\u54AE\u54B0\u54B2\u54B5\u54B6\u54B7\u54B9\u54BA\u54BC\u54BE\u54C3\u54C5\u54CA\u54CB\u54D6\u54D8\u54DB\u54E0", 4, "\u54EB\u54EC\u54EF\u54F0\u54F1\u54F4", 5, "\u54FB\u54FE\u5500\u5502\u5503\u5504\u5505\u5508\u550A", 4, "\u5512\u5513\u5515", 5, "\u551C\u551D\u551E\u551F\u5521\u5525\u5526"],
["8680", "\u5528\u5529\u552B\u552D\u5532\u5534\u5535\u5536\u5538\u5539\u553A\u553B\u553D\u5540\u5542\u5545\u5547\u5548\u554B", 4, "\u5551\u5552\u5553\u5554\u5557", 4, "\u555D\u555E\u555F\u5560\u5562\u5563\u5568\u5569\u556B\u556F", 5, "\u5579\u557A\u557D\u557F\u5585\u5586\u558C\u558D\u558E\u5590\u5592\u5593\u5595\u5596\u5597\u559A\u559B\u559E\u55A0", 6, "\u55A8", 8, "\u55B2\u55B4\u55B6\u55B8\u55BA\u55BC\u55BF", 4, "\u55C6\u55C7\u55C8\u55CA\u55CB\u55CE\u55CF\u55D0\u55D5\u55D7", 4, "\u55DE\u55E0\u55E2\u55E7\u55E9\u55ED\u55EE\u55F0\u55F1\u55F4\u55F6\u55F8", 4, "\u55FF\u5602\u5603\u5604\u5605"],
["8740", "\u5606\u5607\u560A\u560B\u560D\u5610", 7, "\u5619\u561A\u561C\u561D\u5620\u5621\u5622\u5625\u5626\u5628\u5629\u562A\u562B\u562E\u562F\u5630\u5633\u5635\u5637\u5638\u563A\u563C\u563D\u563E\u5640", 11, "\u564F", 4, "\u5655\u5656\u565A\u565B\u565D", 4],
["8780", "\u5663\u5665\u5666\u5667\u566D\u566E\u566F\u5670\u5672\u5673\u5674\u5675\u5677\u5678\u5679\u567A\u567D", 7, "\u5687", 6, "\u5690\u5691\u5692\u5694", 14, "\u56A4", 10, "\u56B0", 6, "\u56B8\u56B9\u56BA\u56BB\u56BD", 12, "\u56CB", 8, "\u56D5\u56D6\u56D8\u56D9\u56DC\u56E3\u56E5", 5, "\u56EC\u56EE\u56EF\u56F2\u56F3\u56F6\u56F7\u56F8\u56FB\u56FC\u5700\u5701\u5702\u5705\u5707\u570B", 6],
["8840", "\u5712", 9, "\u571D\u571E\u5720\u5721\u5722\u5724\u5725\u5726\u5727\u572B\u5731\u5732\u5734", 4, "\u573C\u573D\u573F\u5741\u5743\u5744\u5745\u5746\u5748\u5749\u574B\u5752", 4, "\u5758\u5759\u5762\u5763\u5765\u5767\u576C\u576E\u5770\u5771\u5772\u5774\u5775\u5778\u5779\u577A\u577D\u577E\u577F\u5780"],
["8880", "\u5781\u5787\u5788\u5789\u578A\u578D", 4, "\u5794", 6, "\u579C\u579D\u579E\u579F\u57A5\u57A8\u57AA\u57AC\u57AF\u57B0\u57B1\u57B3\u57B5\u57B6\u57B7\u57B9", 8, "\u57C4", 6, "\u57CC\u57CD\u57D0\u57D1\u57D3\u57D6\u57D7\u57DB\u57DC\u57DE\u57E1\u57E2\u57E3\u57E5", 7, "\u57EE\u57F0\u57F1\u57F2\u57F3\u57F5\u57F6\u57F7\u57FB\u57FC\u57FE\u57FF\u5801\u5803\u5804\u5805\u5808\u5809\u580A\u580C\u580E\u580F\u5810\u5812\u5813\u5814\u5816\u5817\u5818\u581A\u581B\u581C\u581D\u581F\u5822\u5823\u5825", 4, "\u582B", 4, "\u5831\u5832\u5833\u5834\u5836", 7],
["8940", "\u583E", 5, "\u5845", 6, "\u584E\u584F\u5850\u5852\u5853\u5855\u5856\u5857\u5859", 4, "\u585F", 5, "\u5866", 4, "\u586D", 16, "\u587F\u5882\u5884\u5886\u5887\u5888\u588A\u588B\u588C"],
["8980", "\u588D", 4, "\u5894", 4, "\u589B\u589C\u589D\u58A0", 7, "\u58AA", 17, "\u58BD\u58BE\u58BF\u58C0\u58C2\u58C3\u58C4\u58C6", 10, "\u58D2\u58D3\u58D4\u58D6", 13, "\u58E5", 5, "\u58ED\u58EF\u58F1\u58F2\u58F4\u58F5\u58F7\u58F8\u58FA", 7, "\u5903\u5905\u5906\u5908", 4, "\u590E\u5910\u5911\u5912\u5913\u5917\u5918\u591B\u591D\u591E\u5920\u5921\u5922\u5923\u5926\u5928\u592C\u5930\u5932\u5933\u5935\u5936\u593B"],
["8a40", "\u593D\u593E\u593F\u5940\u5943\u5945\u5946\u594A\u594C\u594D\u5950\u5952\u5953\u5959\u595B", 4, "\u5961\u5963\u5964\u5966", 12, "\u5975\u5977\u597A\u597B\u597C\u597E\u597F\u5980\u5985\u5989\u598B\u598C\u598E\u598F\u5990\u5991\u5994\u5995\u5998\u599A\u599B\u599C\u599D\u599F\u59A0\u59A1\u59A2\u59A6"],
["8a80", "\u59A7\u59AC\u59AD\u59B0\u59B1\u59B3", 5, "\u59BA\u59BC\u59BD\u59BF", 6, "\u59C7\u59C8\u59C9\u59CC\u59CD\u59CE\u59CF\u59D5\u59D6\u59D9\u59DB\u59DE", 4, "\u59E4\u59E6\u59E7\u59E9\u59EA\u59EB\u59ED", 11, "\u59FA\u59FC\u59FD\u59FE\u5A00\u5A02\u5A0A\u5A0B\u5A0D\u5A0E\u5A0F\u5A10\u5A12\u5A14\u5A15\u5A16\u5A17\u5A19\u5A1A\u5A1B\u5A1D\u5A1E\u5A21\u5A22\u5A24\u5A26\u5A27\u5A28\u5A2A", 6, "\u5A33\u5A35\u5A37", 4, "\u5A3D\u5A3E\u5A3F\u5A41", 4, "\u5A47\u5A48\u5A4B", 9, "\u5A56\u5A57\u5A58\u5A59\u5A5B", 5],
["8b40", "\u5A61\u5A63\u5A64\u5A65\u5A66\u5A68\u5A69\u5A6B", 8, "\u5A78\u5A79\u5A7B\u5A7C\u5A7D\u5A7E\u5A80", 17, "\u5A93", 6, "\u5A9C", 13, "\u5AAB\u5AAC"],
["8b80", "\u5AAD", 4, "\u5AB4\u5AB6\u5AB7\u5AB9", 4, "\u5ABF\u5AC0\u5AC3", 5, "\u5ACA\u5ACB\u5ACD", 4, "\u5AD3\u5AD5\u5AD7\u5AD9\u5ADA\u5ADB\u5ADD\u5ADE\u5ADF\u5AE2\u5AE4\u5AE5\u5AE7\u5AE8\u5AEA\u5AEC", 4, "\u5AF2", 22, "\u5B0A", 11, "\u5B18", 25, "\u5B33\u5B35\u5B36\u5B38", 7, "\u5B41", 6],
["8c40", "\u5B48", 7, "\u5B52\u5B56\u5B5E\u5B60\u5B61\u5B67\u5B68\u5B6B\u5B6D\u5B6E\u5B6F\u5B72\u5B74\u5B76\u5B77\u5B78\u5B79\u5B7B\u5B7C\u5B7E\u5B7F\u5B82\u5B86\u5B8A\u5B8D\u5B8E\u5B90\u5B91\u5B92\u5B94\u5B96\u5B9F\u5BA7\u5BA8\u5BA9\u5BAC\u5BAD\u5BAE\u5BAF\u5BB1\u5BB2\u5BB7\u5BBA\u5BBB\u5BBC\u5BC0\u5BC1\u5BC3\u5BC8\u5BC9\u5BCA\u5BCB\u5BCD\u5BCE\u5BCF"],
["8c80", "\u5BD1\u5BD4", 8, "\u5BE0\u5BE2\u5BE3\u5BE6\u5BE7\u5BE9", 4, "\u5BEF\u5BF1", 6, "\u5BFD\u5BFE\u5C00\u5C02\u5C03\u5C05\u5C07\u5C08\u5C0B\u5C0C\u5C0D\u5C0E\u5C10\u5C12\u5C13\u5C17\u5C19\u5C1B\u5C1E\u5C1F\u5C20\u5C21\u5C23\u5C26\u5C28\u5C29\u5C2A\u5C2B\u5C2D\u5C2E\u5C2F\u5C30\u5C32\u5C33\u5C35\u5C36\u5C37\u5C43\u5C44\u5C46\u5C47\u5C4C\u5C4D\u5C52\u5C53\u5C54\u5C56\u5C57\u5C58\u5C5A\u5C5B\u5C5C\u5C5D\u5C5F\u5C62\u5C64\u5C67", 6, "\u5C70\u5C72", 6, "\u5C7B\u5C7C\u5C7D\u5C7E\u5C80\u5C83", 4, "\u5C89\u5C8A\u5C8B\u5C8E\u5C8F\u5C92\u5C93\u5C95\u5C9D", 4, "\u5CA4", 4],
["8d40", "\u5CAA\u5CAE\u5CAF\u5CB0\u5CB2\u5CB4\u5CB6\u5CB9\u5CBA\u5CBB\u5CBC\u5CBE\u5CC0\u5CC2\u5CC3\u5CC5", 5, "\u5CCC", 5, "\u5CD3", 5, "\u5CDA", 6, "\u5CE2\u5CE3\u5CE7\u5CE9\u5CEB\u5CEC\u5CEE\u5CEF\u5CF1", 9, "\u5CFC", 4],
["8d80", "\u5D01\u5D04\u5D05\u5D08", 5, "\u5D0F", 4, "\u5D15\u5D17\u5D18\u5D19\u5D1A\u5D1C\u5D1D\u5D1F", 4, "\u5D25\u5D28\u5D2A\u5D2B\u5D2C\u5D2F", 4, "\u5D35", 7, "\u5D3F", 7, "\u5D48\u5D49\u5D4D", 10, "\u5D59\u5D5A\u5D5C\u5D5E", 10, "\u5D6A\u5D6D\u5D6E\u5D70\u5D71\u5D72\u5D73\u5D75", 12, "\u5D83", 21, "\u5D9A\u5D9B\u5D9C\u5D9E\u5D9F\u5DA0"],
["8e40", "\u5DA1", 21, "\u5DB8", 12, "\u5DC6", 6, "\u5DCE", 12, "\u5DDC\u5DDF\u5DE0\u5DE3\u5DE4\u5DEA\u5DEC\u5DED"],
["8e80", "\u5DF0\u5DF5\u5DF6\u5DF8", 4, "\u5DFF\u5E00\u5E04\u5E07\u5E09\u5E0A\u5E0B\u5E0D\u5E0E\u5E12\u5E13\u5E17\u5E1E", 7, "\u5E28", 4, "\u5E2F\u5E30\u5E32", 4, "\u5E39\u5E3A\u5E3E\u5E3F\u5E40\u5E41\u5E43\u5E46", 5, "\u5E4D", 6, "\u5E56", 4, "\u5E5C\u5E5D\u5E5F\u5E60\u5E63", 14, "\u5E75\u5E77\u5E79\u5E7E\u5E81\u5E82\u5E83\u5E85\u5E88\u5E89\u5E8C\u5E8D\u5E8E\u5E92\u5E98\u5E9B\u5E9D\u5EA1\u5EA2\u5EA3\u5EA4\u5EA8", 4, "\u5EAE", 4, "\u5EB4\u5EBA\u5EBB\u5EBC\u5EBD\u5EBF", 6],
["8f40", "\u5EC6\u5EC7\u5EC8\u5ECB", 5, "\u5ED4\u5ED5\u5ED7\u5ED8\u5ED9\u5EDA\u5EDC", 11, "\u5EE9\u5EEB", 8, "\u5EF5\u5EF8\u5EF9\u5EFB\u5EFC\u5EFD\u5F05\u5F06\u5F07\u5F09\u5F0C\u5F0D\u5F0E\u5F10\u5F12\u5F14\u5F16\u5F19\u5F1A\u5F1C\u5F1D\u5F1E\u5F21\u5F22\u5F23\u5F24"],
["8f80", "\u5F28\u5F2B\u5F2C\u5F2E\u5F30\u5F32", 6, "\u5F3B\u5F3D\u5F3E\u5F3F\u5F41", 14, "\u5F51\u5F54\u5F59\u5F5A\u5F5B\u5F5C\u5F5E\u5F5F\u5F60\u5F63\u5F65\u5F67\u5F68\u5F6B\u5F6E\u5F6F\u5F72\u5F74\u5F75\u5F76\u5F78\u5F7A\u5F7D\u5F7E\u5F7F\u5F83\u5F86\u5F8D\u5F8E\u5F8F\u5F91\u5F93\u5F94\u5F96\u5F9A\u5F9B\u5F9D\u5F9E\u5F9F\u5FA0\u5FA2", 5, "\u5FA9\u5FAB\u5FAC\u5FAF", 5, "\u5FB6\u5FB8\u5FB9\u5FBA\u5FBB\u5FBE", 4, "\u5FC7\u5FC8\u5FCA\u5FCB\u5FCE\u5FD3\u5FD4\u5FD5\u5FDA\u5FDB\u5FDC\u5FDE\u5FDF\u5FE2\u5FE3\u5FE5\u5FE6\u5FE8\u5FE9\u5FEC\u5FEF\u5FF0\u5FF2\u5FF3\u5FF4\u5FF6\u5FF7\u5FF9\u5FFA\u5FFC\u6007"],
["9040", "\u6008\u6009\u600B\u600C\u6010\u6011\u6013\u6017\u6018\u601A\u601E\u601F\u6022\u6023\u6024\u602C\u602D\u602E\u6030", 4, "\u6036", 4, "\u603D\u603E\u6040\u6044", 6, "\u604C\u604E\u604F\u6051\u6053\u6054\u6056\u6057\u6058\u605B\u605C\u605E\u605F\u6060\u6061\u6065\u6066\u606E\u6071\u6072\u6074\u6075\u6077\u607E\u6080"],
["9080", "\u6081\u6082\u6085\u6086\u6087\u6088\u608A\u608B\u608E\u608F\u6090\u6091\u6093\u6095\u6097\u6098\u6099\u609C\u609E\u60A1\u60A2\u60A4\u60A5\u60A7\u60A9\u60AA\u60AE\u60B0\u60B3\u60B5\u60B6\u60B7\u60B9\u60BA\u60BD", 7, "\u60C7\u60C8\u60C9\u60CC", 4, "\u60D2\u60D3\u60D4\u60D6\u60D7\u60D9\u60DB\u60DE\u60E1", 4, "\u60EA\u60F1\u60F2\u60F5\u60F7\u60F8\u60FB", 4, "\u6102\u6103\u6104\u6105\u6107\u610A\u610B\u610C\u6110", 4, "\u6116\u6117\u6118\u6119\u611B\u611C\u611D\u611E\u6121\u6122\u6125\u6128\u6129\u612A\u612C", 18, "\u6140", 6],
["9140", "\u6147\u6149\u614B\u614D\u614F\u6150\u6152\u6153\u6154\u6156", 6, "\u615E\u615F\u6160\u6161\u6163\u6164\u6165\u6166\u6169", 6, "\u6171\u6172\u6173\u6174\u6176\u6178", 18, "\u618C\u618D\u618F", 4, "\u6195"],
["9180", "\u6196", 6, "\u619E", 8, "\u61AA\u61AB\u61AD", 9, "\u61B8", 5, "\u61BF\u61C0\u61C1\u61C3", 4, "\u61C9\u61CC", 4, "\u61D3\u61D5", 16, "\u61E7", 13, "\u61F6", 8, "\u6200", 5, "\u6207\u6209\u6213\u6214\u6219\u621C\u621D\u621E\u6220\u6223\u6226\u6227\u6228\u6229\u622B\u622D\u622F\u6230\u6231\u6232\u6235\u6236\u6238", 4, "\u6242\u6244\u6245\u6246\u624A"],
["9240", "\u624F\u6250\u6255\u6256\u6257\u6259\u625A\u625C", 6, "\u6264\u6265\u6268\u6271\u6272\u6274\u6275\u6277\u6278\u627A\u627B\u627D\u6281\u6282\u6283\u6285\u6286\u6287\u6288\u628B", 5, "\u6294\u6299\u629C\u629D\u629E\u62A3\u62A6\u62A7\u62A9\u62AA\u62AD\u62AE\u62AF\u62B0\u62B2\u62B3\u62B4\u62B6\u62B7\u62B8\u62BA\u62BE\u62C0\u62C1"],
["9280", "\u62C3\u62CB\u62CF\u62D1\u62D5\u62DD\u62DE\u62E0\u62E1\u62E4\u62EA\u62EB\u62F0\u62F2\u62F5\u62F8\u62F9\u62FA\u62FB\u6300\u6303\u6304\u6305\u6306\u630A\u630B\u630C\u630D\u630F\u6310\u6312\u6313\u6314\u6315\u6317\u6318\u6319\u631C\u6326\u6327\u6329\u632C\u632D\u632E\u6330\u6331\u6333", 5, "\u633B\u633C\u633E\u633F\u6340\u6341\u6344\u6347\u6348\u634A\u6351\u6352\u6353\u6354\u6356", 7, "\u6360\u6364\u6365\u6366\u6368\u636A\u636B\u636C\u636F\u6370\u6372\u6373\u6374\u6375\u6378\u6379\u637C\u637D\u637E\u637F\u6381\u6383\u6384\u6385\u6386\u638B\u638D\u6391\u6393\u6394\u6395\u6397\u6399", 6, "\u63A1\u63A4\u63A6\u63AB\u63AF\u63B1\u63B2\u63B5\u63B6\u63B9\u63BB\u63BD\u63BF\u63C0"],
["9340", "\u63C1\u63C2\u63C3\u63C5\u63C7\u63C8\u63CA\u63CB\u63CC\u63D1\u63D3\u63D4\u63D5\u63D7", 6, "\u63DF\u63E2\u63E4", 4, "\u63EB\u63EC\u63EE\u63EF\u63F0\u63F1\u63F3\u63F5\u63F7\u63F9\u63FA\u63FB\u63FC\u63FE\u6403\u6404\u6406", 4, "\u640D\u640E\u6411\u6412\u6415", 5, "\u641D\u641F\u6422\u6423\u6424"],
["9380", "\u6425\u6427\u6428\u6429\u642B\u642E", 5, "\u6435", 4, "\u643B\u643C\u643E\u6440\u6442\u6443\u6449\u644B", 6, "\u6453\u6455\u6456\u6457\u6459", 4, "\u645F", 7, "\u6468\u646A\u646B\u646C\u646E", 9, "\u647B", 6, "\u6483\u6486\u6488", 8, "\u6493\u6494\u6497\u6498\u649A\u649B\u649C\u649D\u649F", 4, "\u64A5\u64A6\u64A7\u64A8\u64AA\u64AB\u64AF\u64B1\u64B2\u64B3\u64B4\u64B6\u64B9\u64BB\u64BD\u64BE\u64BF\u64C1\u64C3\u64C4\u64C6", 6, "\u64CF\u64D1\u64D3\u64D4\u64D5\u64D6\u64D9\u64DA"],
["9440", "\u64DB\u64DC\u64DD\u64DF\u64E0\u64E1\u64E3\u64E5\u64E7", 24, "\u6501", 7, "\u650A", 7, "\u6513", 4, "\u6519", 8],
["9480", "\u6522\u6523\u6524\u6526", 4, "\u652C\u652D\u6530\u6531\u6532\u6533\u6537\u653A\u653C\u653D\u6540", 4, "\u6546\u6547\u654A\u654B\u654D\u654E\u6550\u6552\u6553\u6554\u6557\u6558\u655A\u655C\u655F\u6560\u6561\u6564\u6565\u6567\u6568\u6569\u656A\u656D\u656E\u656F\u6571\u6573\u6575\u6576\u6578", 14, "\u6588\u6589\u658A\u658D\u658E\u658F\u6592\u6594\u6595\u6596\u6598\u659A\u659D\u659E\u65A0\u65A2\u65A3\u65A6\u65A8\u65AA\u65AC\u65AE\u65B1", 7, "\u65BA\u65BB\u65BE\u65BF\u65C0\u65C2\u65C7\u65C8\u65C9\u65CA\u65CD\u65D0\u65D1\u65D3\u65D4\u65D5\u65D8", 7, "\u65E1\u65E3\u65E4\u65EA\u65EB"],
["9540", "\u65F2\u65F3\u65F4\u65F5\u65F8\u65F9\u65FB", 4, "\u6601\u6604\u6605\u6607\u6608\u6609\u660B\u660D\u6610\u6611\u6612\u6616\u6617\u6618\u661A\u661B\u661C\u661E\u6621\u6622\u6623\u6624\u6626\u6629\u662A\u662B\u662C\u662E\u6630\u6632\u6633\u6637", 4, "\u663D\u663F\u6640\u6642\u6644", 6, "\u664D\u664E\u6650\u6651\u6658"],
["9580", "\u6659\u665B\u665C\u665D\u665E\u6660\u6662\u6663\u6665\u6667\u6669", 4, "\u6671\u6672\u6673\u6675\u6678\u6679\u667B\u667C\u667D\u667F\u6680\u6681\u6683\u6685\u6686\u6688\u6689\u668A\u668B\u668D\u668E\u668F\u6690\u6692\u6693\u6694\u6695\u6698", 4, "\u669E", 8, "\u66A9", 4, "\u66AF", 4, "\u66B5\u66B6\u66B7\u66B8\u66BA\u66BB\u66BC\u66BD\u66BF", 25, "\u66DA\u66DE", 7, "\u66E7\u66E8\u66EA", 5, "\u66F1\u66F5\u66F6\u66F8\u66FA\u66FB\u66FD\u6701\u6702\u6703"],
["9640", "\u6704\u6705\u6706\u6707\u670C\u670E\u670F\u6711\u6712\u6713\u6716\u6718\u6719\u671A\u671C\u671E\u6720", 5, "\u6727\u6729\u672E\u6730\u6732\u6733\u6736\u6737\u6738\u6739\u673B\u673C\u673E\u673F\u6741\u6744\u6745\u6747\u674A\u674B\u674D\u6752\u6754\u6755\u6757", 4, "\u675D\u6762\u6763\u6764\u6766\u6767\u676B\u676C\u676E\u6771\u6774\u6776"],
["9680", "\u6778\u6779\u677A\u677B\u677D\u6780\u6782\u6783\u6785\u6786\u6788\u678A\u678C\u678D\u678E\u678F\u6791\u6792\u6793\u6794\u6796\u6799\u679B\u679F\u67A0\u67A1\u67A4\u67A6\u67A9\u67AC\u67AE\u67B1\u67B2\u67B4\u67B9", 7, "\u67C2\u67C5", 9, "\u67D5\u67D6\u67D7\u67DB\u67DF\u67E1\u67E3\u67E4\u67E6\u67E7\u67E8\u67EA\u67EB\u67ED\u67EE\u67F2\u67F5", 7, "\u67FE\u6801\u6802\u6803\u6804\u6806\u680D\u6810\u6812\u6814\u6815\u6818", 4, "\u681E\u681F\u6820\u6822", 6, "\u682B", 6, "\u6834\u6835\u6836\u683A\u683B\u683F\u6847\u684B\u684D\u684F\u6852\u6856", 5],
["9740", "\u685C\u685D\u685E\u685F\u686A\u686C", 7, "\u6875\u6878", 8, "\u6882\u6884\u6887", 7, "\u6890\u6891\u6892\u6894\u6895\u6896\u6898", 9, "\u68A3\u68A4\u68A5\u68A9\u68AA\u68AB\u68AC\u68AE\u68B1\u68B2\u68B4\u68B6\u68B7\u68B8"],
["9780", "\u68B9", 6, "\u68C1\u68C3", 5, "\u68CA\u68CC\u68CE\u68CF\u68D0\u68D1\u68D3\u68D4\u68D6\u68D7\u68D9\u68DB", 4, "\u68E1\u68E2\u68E4", 9, "\u68EF\u68F2\u68F3\u68F4\u68F6\u68F7\u68F8\u68FB\u68FD\u68FE\u68FF\u6900\u6902\u6903\u6904\u6906", 4, "\u690C\u690F\u6911\u6913", 11, "\u6921\u6922\u6923\u6925", 7, "\u692E\u692F\u6931\u6932\u6933\u6935\u6936\u6937\u6938\u693A\u693B\u693C\u693E\u6940\u6941\u6943", 16, "\u6955\u6956\u6958\u6959\u695B\u695C\u695F"],
["9840", "\u6961\u6962\u6964\u6965\u6967\u6968\u6969\u696A\u696C\u696D\u696F\u6970\u6972", 4, "\u697A\u697B\u697D\u697E\u697F\u6981\u6983\u6985\u698A\u698B\u698C\u698E", 5, "\u6996\u6997\u6999\u699A\u699D", 9, "\u69A9\u69AA\u69AC\u69AE\u69AF\u69B0\u69B2\u69B3\u69B5\u69B6\u69B8\u69B9\u69BA\u69BC\u69BD"],
["9880", "\u69BE\u69BF\u69C0\u69C2", 7, "\u69CB\u69CD\u69CF\u69D1\u69D2\u69D3\u69D5", 5, "\u69DC\u69DD\u69DE\u69E1", 11, "\u69EE\u69EF\u69F0\u69F1\u69F3", 9, "\u69FE\u6A00", 9, "\u6A0B", 11, "\u6A19", 5, "\u6A20\u6A22", 5, "\u6A29\u6A2B\u6A2C\u6A2D\u6A2E\u6A30\u6A32\u6A33\u6A34\u6A36", 6, "\u6A3F", 4, "\u6A45\u6A46\u6A48", 7, "\u6A51", 6, "\u6A5A"],
["9940", "\u6A5C", 4, "\u6A62\u6A63\u6A64\u6A66", 10, "\u6A72", 6, "\u6A7A\u6A7B\u6A7D\u6A7E\u6A7F\u6A81\u6A82\u6A83\u6A85", 8, "\u6A8F\u6A92", 4, "\u6A98", 7, "\u6AA1", 5],
["9980", "\u6AA7\u6AA8\u6AAA\u6AAD", 114, "\u6B25\u6B26\u6B28", 6],
["9a40", "\u6B2F\u6B30\u6B31\u6B33\u6B34\u6B35\u6B36\u6B38\u6B3B\u6B3C\u6B3D\u6B3F\u6B40\u6B41\u6B42\u6B44\u6B45\u6B48\u6B4A\u6B4B\u6B4D", 11, "\u6B5A", 7, "\u6B68\u6B69\u6B6B", 13, "\u6B7A\u6B7D\u6B7E\u6B7F\u6B80\u6B85\u6B88"],
["9a80", "\u6B8C\u6B8E\u6B8F\u6B90\u6B91\u6B94\u6B95\u6B97\u6B98\u6B99\u6B9C", 4, "\u6BA2", 7, "\u6BAB", 7, "\u6BB6\u6BB8", 6, "\u6BC0\u6BC3\u6BC4\u6BC6", 4, "\u6BCC\u6BCE\u6BD0\u6BD1\u6BD8\u6BDA\u6BDC", 4, "\u6BE2", 7, "\u6BEC\u6BED\u6BEE\u6BF0\u6BF1\u6BF2\u6BF4\u6BF6\u6BF7\u6BF8\u6BFA\u6BFB\u6BFC\u6BFE", 6, "\u6C08", 4, "\u6C0E\u6C12\u6C17\u6C1C\u6C1D\u6C1E\u6C20\u6C23\u6C25\u6C2B\u6C2C\u6C2D\u6C31\u6C33\u6C36\u6C37\u6C39\u6C3A\u6C3B\u6C3C\u6C3E\u6C3F\u6C43\u6C44\u6C45\u6C48\u6C4B", 4, "\u6C51\u6C52\u6C53\u6C56\u6C58"],
["9b40", "\u6C59\u6C5A\u6C62\u6C63\u6C65\u6C66\u6C67\u6C6B", 4, "\u6C71\u6C73\u6C75\u6C77\u6C78\u6C7A\u6C7B\u6C7C\u6C7F\u6C80\u6C84\u6C87\u6C8A\u6C8B\u6C8D\u6C8E\u6C91\u6C92\u6C95\u6C96\u6C97\u6C98\u6C9A\u6C9C\u6C9D\u6C9E\u6CA0\u6CA2\u6CA8\u6CAC\u6CAF\u6CB0\u6CB4\u6CB5\u6CB6\u6CB7\u6CBA\u6CC0\u6CC1\u6CC2\u6CC3\u6CC6\u6CC7\u6CC8\u6CCB\u6CCD\u6CCE\u6CCF\u6CD1\u6CD2\u6CD8"],
["9b80", "\u6CD9\u6CDA\u6CDC\u6CDD\u6CDF\u6CE4\u6CE6\u6CE7\u6CE9\u6CEC\u6CED\u6CF2\u6CF4\u6CF9\u6CFF\u6D00\u6D02\u6D03\u6D05\u6D06\u6D08\u6D09\u6D0A\u6D0D\u6D0F\u6D10\u6D11\u6D13\u6D14\u6D15\u6D16\u6D18\u6D1C\u6D1D\u6D1F", 5, "\u6D26\u6D28\u6D29\u6D2C\u6D2D\u6D2F\u6D30\u6D34\u6D36\u6D37\u6D38\u6D3A\u6D3F\u6D40\u6D42\u6D44\u6D49\u6D4C\u6D50\u6D55\u6D56\u6D57\u6D58\u6D5B\u6D5D\u6D5F\u6D61\u6D62\u6D64\u6D65\u6D67\u6D68\u6D6B\u6D6C\u6D6D\u6D70\u6D71\u6D72\u6D73\u6D75\u6D76\u6D79\u6D7A\u6D7B\u6D7D", 4, "\u6D83\u6D84\u6D86\u6D87\u6D8A\u6D8B\u6D8D\u6D8F\u6D90\u6D92\u6D96", 4, "\u6D9C\u6DA2\u6DA5\u6DAC\u6DAD\u6DB0\u6DB1\u6DB3\u6DB4\u6DB6\u6DB7\u6DB9", 5, "\u6DC1\u6DC2\u6DC3\u6DC8\u6DC9\u6DCA"],
["9c40", "\u6DCD\u6DCE\u6DCF\u6DD0\u6DD2\u6DD3\u6DD4\u6DD5\u6DD7\u6DDA\u6DDB\u6DDC\u6DDF\u6DE2\u6DE3\u6DE5\u6DE7\u6DE8\u6DE9\u6DEA\u6DED\u6DEF\u6DF0\u6DF2\u6DF4\u6DF5\u6DF6\u6DF8\u6DFA\u6DFD", 7, "\u6E06\u6E07\u6E08\u6E09\u6E0B\u6E0F\u6E12\u6E13\u6E15\u6E18\u6E19\u6E1B\u6E1C\u6E1E\u6E1F\u6E22\u6E26\u6E27\u6E28\u6E2A\u6E2C\u6E2E\u6E30\u6E31\u6E33\u6E35"],
["9c80", "\u6E36\u6E37\u6E39\u6E3B", 7, "\u6E45", 7, "\u6E4F\u6E50\u6E51\u6E52\u6E55\u6E57\u6E59\u6E5A\u6E5C\u6E5D\u6E5E\u6E60", 10, "\u6E6C\u6E6D\u6E6F", 14, "\u6E80\u6E81\u6E82\u6E84\u6E87\u6E88\u6E8A", 4, "\u6E91", 6, "\u6E99\u6E9A\u6E9B\u6E9D\u6E9E\u6EA0\u6EA1\u6EA3\u6EA4\u6EA6\u6EA8\u6EA9\u6EAB\u6EAC\u6EAD\u6EAE\u6EB0\u6EB3\u6EB5\u6EB8\u6EB9\u6EBC\u6EBE\u6EBF\u6EC0\u6EC3\u6EC4\u6EC5\u6EC6\u6EC8\u6EC9\u6ECA\u6ECC\u6ECD\u6ECE\u6ED0\u6ED2\u6ED6\u6ED8\u6ED9\u6EDB\u6EDC\u6EDD\u6EE3\u6EE7\u6EEA", 5],
["9d40", "\u6EF0\u6EF1\u6EF2\u6EF3\u6EF5\u6EF6\u6EF7\u6EF8\u6EFA", 7, "\u6F03\u6F04\u6F05\u6F07\u6F08\u6F0A", 4, "\u6F10\u6F11\u6F12\u6F16", 9, "\u6F21\u6F22\u6F23\u6F25\u6F26\u6F27\u6F28\u6F2C\u6F2E\u6F30\u6F32\u6F34\u6F35\u6F37", 6, "\u6F3F\u6F40\u6F41\u6F42"],
["9d80", "\u6F43\u6F44\u6F45\u6F48\u6F49\u6F4A\u6F4C\u6F4E", 9, "\u6F59\u6F5A\u6F5B\u6F5D\u6F5F\u6F60\u6F61\u6F63\u6F64\u6F65\u6F67", 5, "\u6F6F\u6F70\u6F71\u6F73\u6F75\u6F76\u6F77\u6F79\u6F7B\u6F7D", 6, "\u6F85\u6F86\u6F87\u6F8A\u6F8B\u6F8F", 12, "\u6F9D\u6F9E\u6F9F\u6FA0\u6FA2", 4, "\u6FA8", 10, "\u6FB4\u6FB5\u6FB7\u6FB8\u6FBA", 5, "\u6FC1\u6FC3", 5, "\u6FCA", 6, "\u6FD3", 10, "\u6FDF\u6FE2\u6FE3\u6FE4\u6FE5"],
["9e40", "\u6FE6", 7, "\u6FF0", 32, "\u7012", 7, "\u701C", 6, "\u7024", 6],
["9e80", "\u702B", 9, "\u7036\u7037\u7038\u703A", 17, "\u704D\u704E\u7050", 13, "\u705F", 11, "\u706E\u7071\u7072\u7073\u7074\u7077\u7079\u707A\u707B\u707D\u7081\u7082\u7083\u7084\u7086\u7087\u7088\u708B\u708C\u708D\u708F\u7090\u7091\u7093\u7097\u7098\u709A\u709B\u709E", 12, "\u70B0\u70B2\u70B4\u70B5\u70B6\u70BA\u70BE\u70BF\u70C4\u70C5\u70C6\u70C7\u70C9\u70CB", 12, "\u70DA"],
["9f40", "\u70DC\u70DD\u70DE\u70E0\u70E1\u70E2\u70E3\u70E5\u70EA\u70EE\u70F0", 6, "\u70F8\u70FA\u70FB\u70FC\u70FE", 10, "\u710B", 4, "\u7111\u7112\u7114\u7117\u711B", 10, "\u7127", 7, "\u7132\u7133\u7134"],
["9f80", "\u7135\u7137", 13, "\u7146\u7147\u7148\u7149\u714B\u714D\u714F", 12, "\u715D\u715F", 4, "\u7165\u7169", 4, "\u716F\u7170\u7171\u7174\u7175\u7176\u7177\u7179\u717B\u717C\u717E", 5, "\u7185", 4, "\u718B\u718C\u718D\u718E\u7190\u7191\u7192\u7193\u7195\u7196\u7197\u719A", 4, "\u71A1", 6, "\u71A9\u71AA\u71AB\u71AD", 5, "\u71B4\u71B6\u71B7\u71B8\u71BA", 8, "\u71C4", 9, "\u71CF", 4],
["a040", "\u71D6", 9, "\u71E1\u71E2\u71E3\u71E4\u71E6\u71E8", 5, "\u71EF", 9, "\u71FA", 11, "\u7207", 19],
["a080", "\u721B\u721C\u721E", 9, "\u7229\u722B\u722D\u722E\u722F\u7232\u7233\u7234\u723A\u723C\u723E\u7240", 6, "\u7249\u724A\u724B\u724E\u724F\u7250\u7251\u7253\u7254\u7255\u7257\u7258\u725A\u725C\u725E\u7260\u7263\u7264\u7265\u7268\u726A\u726B\u726C\u726D\u7270\u7271\u7273\u7274\u7276\u7277\u7278\u727B\u727C\u727D\u7282\u7283\u7285", 4, "\u728C\u728E\u7290\u7291\u7293", 11, "\u72A0", 11, "\u72AE\u72B1\u72B2\u72B3\u72B5\u72BA", 6, "\u72C5\u72C6\u72C7\u72C9\u72CA\u72CB\u72CC\u72CF\u72D1\u72D3\u72D4\u72D5\u72D6\u72D8\u72DA\u72DB"],
["a1a1", "\u3000\u3001\u3002\xB7\u02C9\u02C7\xA8\u3003\u3005\u2014\uFF5E\u2016\u2026\u2018\u2019\u201C\u201D\u3014\u3015\u3008", 7, "\u3016\u3017\u3010\u3011\xB1\xD7\xF7\u2236\u2227\u2228\u2211\u220F\u222A\u2229\u2208\u2237\u221A\u22A5\u2225\u2220\u2312\u2299\u222B\u222E\u2261\u224C\u2248\u223D\u221D\u2260\u226E\u226F\u2264\u2265\u221E\u2235\u2234\u2642\u2640\xB0\u2032\u2033\u2103\uFF04\xA4\uFFE0\uFFE1\u2030\xA7\u2116\u2606\u2605\u25CB\u25CF\u25CE\u25C7\u25C6\u25A1\u25A0\u25B3\u25B2\u203B\u2192\u2190\u2191\u2193\u3013"],
["a2a1", "\u2170", 9],
["a2b1", "\u2488", 19, "\u2474", 19, "\u2460", 9],
["a2e5", "\u3220", 9],
["a2f1", "\u2160", 11],
["a3a1", "\uFF01\uFF02\uFF03\uFFE5\uFF05", 88, "\uFFE3"],
["a4a1", "\u3041", 82],
["a5a1", "\u30A1", 85],
["a6a1", "\u0391", 16, "\u03A3", 6],
["a6c1", "\u03B1", 16, "\u03C3", 6],
["a6e0", "\uFE35\uFE36\uFE39\uFE3A\uFE3F\uFE40\uFE3D\uFE3E\uFE41\uFE42\uFE43\uFE44"],
["a6ee", "\uFE3B\uFE3C\uFE37\uFE38\uFE31"],
["a6f4", "\uFE33\uFE34"],
["a7a1", "\u0410", 5, "\u0401\u0416", 25],
["a7d1", "\u0430", 5, "\u0451\u0436", 25],
["a840", "\u02CA\u02CB\u02D9\u2013\u2015\u2025\u2035\u2105\u2109\u2196\u2197\u2198\u2199\u2215\u221F\u2223\u2252\u2266\u2267\u22BF\u2550", 35, "\u2581", 6],
["a880", "\u2588", 7, "\u2593\u2594\u2595\u25BC\u25BD\u25E2\u25E3\u25E4\u25E5\u2609\u2295\u3012\u301D\u301E"],
["a8a1", "\u0101\xE1\u01CE\xE0\u0113\xE9\u011B\xE8\u012B\xED\u01D0\xEC\u014D\xF3\u01D2\xF2\u016B\xFA\u01D4\xF9\u01D6\u01D8\u01DA\u01DC\xFC\xEA\u0251"],
["a8bd", "\u0144\u0148"],
["a8c0", "\u0261"],
["a8c5", "\u3105", 36],
["a940", "\u3021", 8, "\u32A3\u338E\u338F\u339C\u339D\u339E\u33A1\u33C4\u33CE\u33D1\u33D2\u33D5\uFE30\uFFE2\uFFE4"],
["a959", "\u2121\u3231"],
["a95c", "\u2010"],
["a960", "\u30FC\u309B\u309C\u30FD\u30FE\u3006\u309D\u309E\uFE49", 9, "\uFE54\uFE55\uFE56\uFE57\uFE59", 8],
["a980", "\uFE62", 4, "\uFE68\uFE69\uFE6A\uFE6B"],
["a996", "\u3007"],
["a9a4", "\u2500", 75],
["aa40", "\u72DC\u72DD\u72DF\u72E2", 5, "\u72EA\u72EB\u72F5\u72F6\u72F9\u72FD\u72FE\u72FF\u7300\u7302\u7304", 5, "\u730B\u730C\u730D\u730F\u7310\u7311\u7312\u7314\u7318\u7319\u731A\u731F\u7320\u7323\u7324\u7326\u7327\u7328\u732D\u732F\u7330\u7332\u7333\u7335\u7336\u733A\u733B\u733C\u733D\u7340", 8],
["aa80", "\u7349\u734A\u734B\u734C\u734E\u734F\u7351\u7353\u7354\u7355\u7356\u7358", 7, "\u7361", 10, "\u736E\u7370\u7371"],
["ab40", "\u7372", 11, "\u737F", 4, "\u7385\u7386\u7388\u738A\u738C\u738D\u738F\u7390\u7392\u7393\u7394\u7395\u7397\u7398\u7399\u739A\u739C\u739D\u739E\u73A0\u73A1\u73A3", 5, "\u73AA\u73AC\u73AD\u73B1\u73B4\u73B5\u73B6\u73B8\u73B9\u73BC\u73BD\u73BE\u73BF\u73C1\u73C3", 4],
["ab80", "\u73CB\u73CC\u73CE\u73D2", 6, "\u73DA\u73DB\u73DC\u73DD\u73DF\u73E1\u73E2\u73E3\u73E4\u73E6\u73E8\u73EA\u73EB\u73EC\u73EE\u73EF\u73F0\u73F1\u73F3", 4],
["ac40", "\u73F8", 10, "\u7404\u7407\u7408\u740B\u740C\u740D\u740E\u7411", 8, "\u741C", 5, "\u7423\u7424\u7427\u7429\u742B\u742D\u742F\u7431\u7432\u7437", 4, "\u743D\u743E\u743F\u7440\u7442", 11],
["ac80", "\u744E", 6, "\u7456\u7458\u745D\u7460", 12, "\u746E\u746F\u7471", 4, "\u7478\u7479\u747A"],
["ad40", "\u747B\u747C\u747D\u747F\u7482\u7484\u7485\u7486\u7488\u7489\u748A\u748C\u748D\u748F\u7491", 10, "\u749D\u749F", 7, "\u74AA", 15, "\u74BB", 12],
["ad80", "\u74C8", 9, "\u74D3", 8, "\u74DD\u74DF\u74E1\u74E5\u74E7", 6, "\u74F0\u74F1\u74F2"],
["ae40", "\u74F3\u74F5\u74F8", 6, "\u7500\u7501\u7502\u7503\u7505", 7, "\u750E\u7510\u7512\u7514\u7515\u7516\u7517\u751B\u751D\u751E\u7520", 4, "\u7526\u7527\u752A\u752E\u7534\u7536\u7539\u753C\u753D\u753F\u7541\u7542\u7543\u7544\u7546\u7547\u7549\u754A\u754D\u7550\u7551\u7552\u7553\u7555\u7556\u7557\u7558"],
["ae80", "\u755D", 7, "\u7567\u7568\u7569\u756B", 6, "\u7573\u7575\u7576\u7577\u757A", 4, "\u7580\u7581\u7582\u7584\u7585\u7587"],
["af40", "\u7588\u7589\u758A\u758C\u758D\u758E\u7590\u7593\u7595\u7598\u759B\u759C\u759E\u75A2\u75A6", 4, "\u75AD\u75B6\u75B7\u75BA\u75BB\u75BF\u75C0\u75C1\u75C6\u75CB\u75CC\u75CE\u75CF\u75D0\u75D1\u75D3\u75D7\u75D9\u75DA\u75DC\u75DD\u75DF\u75E0\u75E1\u75E5\u75E9\u75EC\u75ED\u75EE\u75EF\u75F2\u75F3\u75F5\u75F6\u75F7\u75F8\u75FA\u75FB\u75FD\u75FE\u7602\u7604\u7606\u7607"],
["af80", "\u7608\u7609\u760B\u760D\u760E\u760F\u7611\u7612\u7613\u7614\u7616\u761A\u761C\u761D\u761E\u7621\u7623\u7627\u7628\u762C\u762E\u762F\u7631\u7632\u7636\u7637\u7639\u763A\u763B\u763D\u7641\u7642\u7644"],
["b040", "\u7645", 6, "\u764E", 5, "\u7655\u7657", 4, "\u765D\u765F\u7660\u7661\u7662\u7664", 6, "\u766C\u766D\u766E\u7670", 7, "\u7679\u767A\u767C\u767F\u7680\u7681\u7683\u7685\u7689\u768A\u768C\u768D\u768F\u7690\u7692\u7694\u7695\u7697\u7698\u769A\u769B"],
["b080", "\u769C", 7, "\u76A5", 8, "\u76AF\u76B0\u76B3\u76B5", 9, "\u76C0\u76C1\u76C3\u554A\u963F\u57C3\u6328\u54CE\u5509\u54C0\u7691\u764C\u853C\u77EE\u827E\u788D\u7231\u9698\u978D\u6C28\u5B89\u4FFA\u6309\u6697\u5CB8\u80FA\u6848\u80AE\u6602\u76CE\u51F9\u6556\u71AC\u7FF1\u8884\u50B2\u5965\u61CA\u6FB3\u82AD\u634C\u6252\u53ED\u5427\u7B06\u516B\u75A4\u5DF4\u62D4\u8DCB\u9776\u628A\u8019\u575D\u9738\u7F62\u7238\u767D\u67CF\u767E\u6446\u4F70\u8D25\u62DC\u7A17\u6591\u73ED\u642C\u6273\u822C\u9881\u677F\u7248\u626E\u62CC\u4F34\u74E3\u534A\u529E\u7ECA\u90A6\u5E2E\u6886\u699C\u8180\u7ED1\u68D2\u78C5\u868C\u9551\u508D\u8C24\u82DE\u80DE\u5305\u8912\u5265"],
["b140", "\u76C4\u76C7\u76C9\u76CB\u76CC\u76D3\u76D5\u76D9\u76DA\u76DC\u76DD\u76DE\u76E0", 4, "\u76E6", 7, "\u76F0\u76F3\u76F5\u76F6\u76F7\u76FA\u76FB\u76FD\u76FF\u7700\u7702\u7703\u7705\u7706\u770A\u770C\u770E", 10, "\u771B\u771C\u771D\u771E\u7721\u7723\u7724\u7725\u7727\u772A\u772B"],
["b180", "\u772C\u772E\u7730", 4, "\u7739\u773B\u773D\u773E\u773F\u7742\u7744\u7745\u7746\u7748", 7, "\u7752", 7, "\u775C\u8584\u96F9\u4FDD\u5821\u9971\u5B9D\u62B1\u62A5\u66B4\u8C79\u9C8D\u7206\u676F\u7891\u60B2\u5351\u5317\u8F88\u80CC\u8D1D\u94A1\u500D\u72C8\u5907\u60EB\u7119\u88AB\u5954\u82EF\u672C\u7B28\u5D29\u7EF7\u752D\u6CF5\u8E66\u8FF8\u903C\u9F3B\u6BD4\u9119\u7B14\u5F7C\u78A7\u84D6\u853D\u6BD5\u6BD9\u6BD6\u5E01\u5E87\u75F9\u95ED\u655D\u5F0A\u5FC5\u8F9F\u58C1\u81C2\u907F\u965B\u97AD\u8FB9\u7F16\u8D2C\u6241\u4FBF\u53D8\u535E\u8FA8\u8FA9\u8FAB\u904D\u6807\u5F6A\u8198\u8868\u9CD6\u618B\u522B\u762A\u5F6C\u658C\u6FD2\u6EE8\u5BBE\u6448\u5175\u51B0\u67C4\u4E19\u79C9\u997C\u70B3"],
["b240", "\u775D\u775E\u775F\u7760\u7764\u7767\u7769\u776A\u776D", 11, "\u777A\u777B\u777C\u7781\u7782\u7783\u7786", 5, "\u778F\u7790\u7793", 11, "\u77A1\u77A3\u77A4\u77A6\u77A8\u77AB\u77AD\u77AE\u77AF\u77B1\u77B2\u77B4\u77B6", 4],
["b280", "\u77BC\u77BE\u77C0", 12, "\u77CE", 8, "\u77D8\u77D9\u77DA\u77DD", 4, "\u77E4\u75C5\u5E76\u73BB\u83E0\u64AD\u62E8\u94B5\u6CE2\u535A\u52C3\u640F\u94C2\u7B94\u4F2F\u5E1B\u8236\u8116\u818A\u6E24\u6CCA\u9A73\u6355\u535C\u54FA\u8865\u57E0\u4E0D\u5E03\u6B65\u7C3F\u90E8\u6016\u64E6\u731C\u88C1\u6750\u624D\u8D22\u776C\u8E29\u91C7\u5F69\u83DC\u8521\u9910\u53C2\u8695\u6B8B\u60ED\u60E8\u707F\u82CD\u8231\u4ED3\u6CA7\u85CF\u64CD\u7CD9\u69FD\u66F9\u8349\u5395\u7B56\u4FA7\u518C\u6D4B\u5C42\u8E6D\u63D2\u53C9\u832C\u8336\u67E5\u78B4\u643D\u5BDF\u5C94\u5DEE\u8BE7\u62C6\u67F4\u8C7A\u6400\u63BA\u8749\u998B\u8C17\u7F20\u94F2\u4EA7\u9610\u98A4\u660C\u7316"],
["b340", "\u77E6\u77E8\u77EA\u77EF\u77F0\u77F1\u77F2\u77F4\u77F5\u77F7\u77F9\u77FA\u77FB\u77FC\u7803", 5, "\u780A\u780B\u780E\u780F\u7810\u7813\u7815\u7819\u781B\u781E\u7820\u7821\u7822\u7824\u7828\u782A\u782B\u782E\u782F\u7831\u7832\u7833\u7835\u7836\u783D\u783F\u7841\u7842\u7843\u7844\u7846\u7848\u7849\u784A\u784B\u784D\u784F\u7851\u7853\u7854\u7858\u7859\u785A"],
["b380", "\u785B\u785C\u785E", 11, "\u786F", 7, "\u7878\u7879\u787A\u787B\u787D", 6, "\u573A\u5C1D\u5E38\u957F\u507F\u80A0\u5382\u655E\u7545\u5531\u5021\u8D85\u6284\u949E\u671D\u5632\u6F6E\u5DE2\u5435\u7092\u8F66\u626F\u64A4\u63A3\u5F7B\u6F88\u90F4\u81E3\u8FB0\u5C18\u6668\u5FF1\u6C89\u9648\u8D81\u886C\u6491\u79F0\u57CE\u6A59\u6210\u5448\u4E58\u7A0B\u60E9\u6F84\u8BDA\u627F\u901E\u9A8B\u79E4\u5403\u75F4\u6301\u5319\u6C60\u8FDF\u5F1B\u9A70\u803B\u9F7F\u4F88\u5C3A\u8D64\u7FC5\u65A5\u70BD\u5145\u51B2\u866B\u5D07\u5BA0\u62BD\u916C\u7574\u8E0C\u7A20\u6101\u7B79\u4EC7\u7EF8\u7785\u4E11\u81ED\u521D\u51FA\u6A71\u53A8\u8E87\u9504\u96CF\u6EC1\u9664\u695A"],
["b440", "\u7884\u7885\u7886\u7888\u788A\u788B\u788F\u7890\u7892\u7894\u7895\u7896\u7899\u789D\u789E\u78A0\u78A2\u78A4\u78A6\u78A8", 7, "\u78B5\u78B6\u78B7\u78B8\u78BA\u78BB\u78BC\u78BD\u78BF\u78C0\u78C2\u78C3\u78C4\u78C6\u78C7\u78C8\u78CC\u78CD\u78CE\u78CF\u78D1\u78D2\u78D3\u78D6\u78D7\u78D8\u78DA", 9],
["b480", "\u78E4\u78E5\u78E6\u78E7\u78E9\u78EA\u78EB\u78ED", 4, "\u78F3\u78F5\u78F6\u78F8\u78F9\u78FB", 5, "\u7902\u7903\u7904\u7906", 6, "\u7840\u50A8\u77D7\u6410\u89E6\u5904\u63E3\u5DDD\u7A7F\u693D\u4F20\u8239\u5598\u4E32\u75AE\u7A97\u5E62\u5E8A\u95EF\u521B\u5439\u708A\u6376\u9524\u5782\u6625\u693F\u9187\u5507\u6DF3\u7EAF\u8822\u6233\u7EF0\u75B5\u8328\u78C1\u96CC\u8F9E\u6148\u74F7\u8BCD\u6B64\u523A\u8D50\u6B21\u806A\u8471\u56F1\u5306\u4ECE\u4E1B\u51D1\u7C97\u918B\u7C07\u4FC3\u8E7F\u7BE1\u7A9C\u6467\u5D14\u50AC\u8106\u7601\u7CB9\u6DEC\u7FE0\u6751\u5B58\u5BF8\u78CB\u64AE\u6413\u63AA\u632B\u9519\u642D\u8FBE\u7B54\u7629\u6253\u5927\u5446\u6B79\u50A3\u6234\u5E26\u6B86\u4EE3\u8D37\u888B\u5F85\u902E"],
["b540", "\u790D", 5, "\u7914", 9, "\u791F", 4, "\u7925", 14, "\u7935", 4, "\u793D\u793F\u7942\u7943\u7944\u7945\u7947\u794A", 8, "\u7954\u7955\u7958\u7959\u7961\u7963"],
["b580", "\u7964\u7966\u7969\u796A\u796B\u796C\u796E\u7970", 6, "\u7979\u797B", 4, "\u7982\u7983\u7986\u7987\u7988\u7989\u798B\u798C\u798D\u798E\u7990\u7991\u7992\u6020\u803D\u62C5\u4E39\u5355\u90F8\u63B8\u80C6\u65E6\u6C2E\u4F46\u60EE\u6DE1\u8BDE\u5F39\u86CB\u5F53\u6321\u515A\u8361\u6863\u5200\u6363\u8E48\u5012\u5C9B\u7977\u5BFC\u5230\u7A3B\u60BC\u9053\u76D7\u5FB7\u5F97\u7684\u8E6C\u706F\u767B\u7B49\u77AA\u51F3\u9093\u5824\u4F4E\u6EF4\u8FEA\u654C\u7B1B\u72C4\u6DA4\u7FDF\u5AE1\u62B5\u5E95\u5730\u8482\u7B2C\u5E1D\u5F1F\u9012\u7F14\u98A0\u6382\u6EC7\u7898\u70B9\u5178\u975B\u57AB\u7535\u4F43\u7538\u5E97\u60E6\u5960\u6DC0\u6BBF\u7889\u53FC\u96D5\u51CB\u5201\u6389\u540A\u9493\u8C03\u8DCC\u7239\u789F\u8776\u8FED\u8C0D\u53E0"],
["b640", "\u7993", 6, "\u799B", 11, "\u79A8", 10, "\u79B4", 4, "\u79BC\u79BF\u79C2\u79C4\u79C5\u79C7\u79C8\u79CA\u79CC\u79CE\u79CF\u79D0\u79D3\u79D4\u79D6\u79D7\u79D9", 5, "\u79E0\u79E1\u79E2\u79E5\u79E8\u79EA"],
["b680", "\u79EC\u79EE\u79F1", 6, "\u79F9\u79FA\u79FC\u79FE\u79FF\u7A01\u7A04\u7A05\u7A07\u7A08\u7A09\u7A0A\u7A0C\u7A0F", 4, "\u7A15\u7A16\u7A18\u7A19\u7A1B\u7A1C\u4E01\u76EF\u53EE\u9489\u9876\u9F0E\u952D\u5B9A\u8BA2\u4E22\u4E1C\u51AC\u8463\u61C2\u52A8\u680B\u4F97\u606B\u51BB\u6D1E\u515C\u6296\u6597\u9661\u8C46\u9017\u75D8\u90FD\u7763\u6BD2\u728A\u72EC\u8BFB\u5835\u7779\u8D4C\u675C\u9540\u809A\u5EA6\u6E21\u5992\u7AEF\u77ED\u953B\u6BB5\u65AD\u7F0E\u5806\u5151\u961F\u5BF9\u58A9\u5428\u8E72\u6566\u987F\u56E4\u949D\u76FE\u9041\u6387\u54C6\u591A\u593A\u579B\u8EB2\u6735\u8DFA\u8235\u5241\u60F0\u5815\u86FE\u5CE8\u9E45\u4FC4\u989D\u8BB9\u5A25\u6076\u5384\u627C\u904F\u9102\u997F\u6069\u800C\u513F\u8033\u5C14\u9975\u6D31\u4E8C"],
["b740", "\u7A1D\u7A1F\u7A21\u7A22\u7A24", 14, "\u7A34\u7A35\u7A36\u7A38\u7A3A\u7A3E\u7A40", 5, "\u7A47", 9, "\u7A52", 4, "\u7A58", 16],
["b780", "\u7A69", 6, "\u7A71\u7A72\u7A73\u7A75\u7A7B\u7A7C\u7A7D\u7A7E\u7A82\u7A85\u7A87\u7A89\u7A8A\u7A8B\u7A8C\u7A8E\u7A8F\u7A90\u7A93\u7A94\u7A99\u7A9A\u7A9B\u7A9E\u7AA1\u7AA2\u8D30\u53D1\u7F5A\u7B4F\u4F10\u4E4F\u9600\u6CD5\u73D0\u85E9\u5E06\u756A\u7FFB\u6A0A\u77FE\u9492\u7E41\u51E1\u70E6\u53CD\u8FD4\u8303\u8D29\u72AF\u996D\u6CDB\u574A\u82B3\u65B9\u80AA\u623F\u9632\u59A8\u4EFF\u8BBF\u7EBA\u653E\u83F2\u975E\u5561\u98DE\u80A5\u532A\u8BFD\u5420\u80BA\u5E9F\u6CB8\u8D39\u82AC\u915A\u5429\u6C1B\u5206\u7EB7\u575F\u711A\u6C7E\u7C89\u594B\u4EFD\u5FFF\u6124\u7CAA\u4E30\u5C01\u67AB\u8702\u5CF0\u950B\u98CE\u75AF\u70FD\u9022\u51AF\u7F1D\u8BBD\u5949\u51E4\u4F5B\u5426\u592B\u6577\u80A4\u5B75\u6276\u62C2\u8F90\u5E45\u6C1F\u7B26\u4F0F\u4FD8\u670D"],
["b840", "\u7AA3\u7AA4\u7AA7\u7AA9\u7AAA\u7AAB\u7AAE", 4, "\u7AB4", 10, "\u7AC0", 10, "\u7ACC", 9, "\u7AD7\u7AD8\u7ADA\u7ADB\u7ADC\u7ADD\u7AE1\u7AE2\u7AE4\u7AE7", 5, "\u7AEE\u7AF0\u7AF1\u7AF2\u7AF3"],
["b880", "\u7AF4", 4, "\u7AFB\u7AFC\u7AFE\u7B00\u7B01\u7B02\u7B05\u7B07\u7B09\u7B0C\u7B0D\u7B0E\u7B10\u7B12\u7B13\u7B16\u7B17\u7B18\u7B1A\u7B1C\u7B1D\u7B1F\u7B21\u7B22\u7B23\u7B27\u7B29\u7B2D\u6D6E\u6DAA\u798F\u88B1\u5F17\u752B\u629A\u8F85\u4FEF\u91DC\u65A7\u812F\u8151\u5E9C\u8150\u8D74\u526F\u8986\u8D4B\u590D\u5085\u4ED8\u961C\u7236\u8179\u8D1F\u5BCC\u8BA3\u9644\u5987\u7F1A\u5490\u5676\u560E\u8BE5\u6539\u6982\u9499\u76D6\u6E89\u5E72\u7518\u6746\u67D1\u7AFF\u809D\u8D76\u611F\u79C6\u6562\u8D63\u5188\u521A\u94A2\u7F38\u809B\u7EB2\u5C97\u6E2F\u6760\u7BD9\u768B\u9AD8\u818F\u7F94\u7CD5\u641E\u9550\u7A3F\u544A\u54E5\u6B4C\u6401\u6208\u9E3D\u80F3\u7599\u5272\u9769\u845B\u683C\u86E4\u9601\u9694\u94EC\u4E2A\u5404\u7ED9\u6839\u8DDF\u8015\u66F4\u5E9A\u7FB9"],
["b940", "\u7B2F\u7B30\u7B32\u7B34\u7B35\u7B36\u7B37\u7B39\u7B3B\u7B3D\u7B3F", 5, "\u7B46\u7B48\u7B4A\u7B4D\u7B4E\u7B53\u7B55\u7B57\u7B59\u7B5C\u7B5E\u7B5F\u7B61\u7B63", 10, "\u7B6F\u7B70\u7B73\u7B74\u7B76\u7B78\u7B7A\u7B7C\u7B7D\u7B7F\u7B81\u7B82\u7B83\u7B84\u7B86", 6, "\u7B8E\u7B8F"],
["b980", "\u7B91\u7B92\u7B93\u7B96\u7B98\u7B99\u7B9A\u7B9B\u7B9E\u7B9F\u7BA0\u7BA3\u7BA4\u7BA5\u7BAE\u7BAF\u7BB0\u7BB2\u7BB3\u7BB5\u7BB6\u7BB7\u7BB9", 7, "\u7BC2\u7BC3\u7BC4\u57C2\u803F\u6897\u5DE5\u653B\u529F\u606D\u9F9A\u4F9B\u8EAC\u516C\u5BAB\u5F13\u5DE9\u6C5E\u62F1\u8D21\u5171\u94A9\u52FE\u6C9F\u82DF\u72D7\u57A2\u6784\u8D2D\u591F\u8F9C\u83C7\u5495\u7B8D\u4F30\u6CBD\u5B64\u59D1\u9F13\u53E4\u86CA\u9AA8\u8C37\u80A1\u6545\u987E\u56FA\u96C7\u522E\u74DC\u5250\u5BE1\u6302\u8902\u4E56\u62D0\u602A\u68FA\u5173\u5B98\u51A0\u89C2\u7BA1\u9986\u7F50\u60EF\u704C\u8D2F\u5149\u5E7F\u901B\u7470\u89C4\u572D\u7845\u5F52\u9F9F\u95FA\u8F68\u9B3C\u8BE1\u7678\u6842\u67DC\u8DEA\u8D35\u523D\u8F8A\u6EDA\u68CD\u9505\u90ED\u56FD\u679C\u88F9\u8FC7\u54C8"],
["ba40", "\u7BC5\u7BC8\u7BC9\u7BCA\u7BCB\u7BCD\u7BCE\u7BCF\u7BD0\u7BD2\u7BD4", 4, "\u7BDB\u7BDC\u7BDE\u7BDF\u7BE0\u7BE2\u7BE3\u7BE4\u7BE7\u7BE8\u7BE9\u7BEB\u7BEC\u7BED\u7BEF\u7BF0\u7BF2", 4, "\u7BF8\u7BF9\u7BFA\u7BFB\u7BFD\u7BFF", 7, "\u7C08\u7C09\u7C0A\u7C0D\u7C0E\u7C10", 5, "\u7C17\u7C18\u7C19"],
["ba80", "\u7C1A", 4, "\u7C20", 5, "\u7C28\u7C29\u7C2B", 12, "\u7C39", 5, "\u7C42\u9AB8\u5B69\u6D77\u6C26\u4EA5\u5BB3\u9A87\u9163\u61A8\u90AF\u97E9\u542B\u6DB5\u5BD2\u51FD\u558A\u7F55\u7FF0\u64BC\u634D\u65F1\u61BE\u608D\u710A\u6C57\u6C49\u592F\u676D\u822A\u58D5\u568E\u8C6A\u6BEB\u90DD\u597D\u8017\u53F7\u6D69\u5475\u559D\u8377\u83CF\u6838\u79BE\u548C\u4F55\u5408\u76D2\u8C89\u9602\u6CB3\u6DB8\u8D6B\u8910\u9E64\u8D3A\u563F\u9ED1\u75D5\u5F88\u72E0\u6068\u54FC\u4EA8\u6A2A\u8861\u6052\u8F70\u54C4\u70D8\u8679\u9E3F\u6D2A\u5B8F\u5F18\u7EA2\u5589\u4FAF\u7334\u543C\u539A\u5019\u540E\u547C\u4E4E\u5FFD\u745A\u58F6\u846B\u80E1\u8774\u72D0\u7CCA\u6E56"],
["bb40", "\u7C43", 9, "\u7C4E", 36, "\u7C75", 5, "\u7C7E", 9],
["bb80", "\u7C88\u7C8A", 6, "\u7C93\u7C94\u7C96\u7C99\u7C9A\u7C9B\u7CA0\u7CA1\u7CA3\u7CA6\u7CA7\u7CA8\u7CA9\u7CAB\u7CAC\u7CAD\u7CAF\u7CB0\u7CB4", 4, "\u7CBA\u7CBB\u5F27\u864E\u552C\u62A4\u4E92\u6CAA\u6237\u82B1\u54D7\u534E\u733E\u6ED1\u753B\u5212\u5316\u8BDD\u69D0\u5F8A\u6000\u6DEE\u574F\u6B22\u73AF\u6853\u8FD8\u7F13\u6362\u60A3\u5524\u75EA\u8C62\u7115\u6DA3\u5BA6\u5E7B\u8352\u614C\u9EC4\u78FA\u8757\u7C27\u7687\u51F0\u60F6\u714C\u6643\u5E4C\u604D\u8C0E\u7070\u6325\u8F89\u5FBD\u6062\u86D4\u56DE\u6BC1\u6094\u6167\u5349\u60E0\u6666\u8D3F\u79FD\u4F1A\u70E9\u6C47\u8BB3\u8BF2\u7ED8\u8364\u660F\u5A5A\u9B42\u6D51\u6DF7\u8C41\u6D3B\u4F19\u706B\u83B7\u6216\u60D1\u970D\u8D27\u7978\u51FB\u573E\u57FA\u673A\u7578\u7A3D\u79EF\u7B95"],
["bc40", "\u7CBF\u7CC0\u7CC2\u7CC3\u7CC4\u7CC6\u7CC9\u7CCB\u7CCE", 6, "\u7CD8\u7CDA\u7CDB\u7CDD\u7CDE\u7CE1", 6, "\u7CE9", 5, "\u7CF0", 7, "\u7CF9\u7CFA\u7CFC", 13, "\u7D0B", 5],
["bc80", "\u7D11", 14, "\u7D21\u7D23\u7D24\u7D25\u7D26\u7D28\u7D29\u7D2A\u7D2C\u7D2D\u7D2E\u7D30", 6, "\u808C\u9965\u8FF9\u6FC0\u8BA5\u9E21\u59EC\u7EE9\u7F09\u5409\u6781\u68D8\u8F91\u7C4D\u96C6\u53CA\u6025\u75BE\u6C72\u5373\u5AC9\u7EA7\u6324\u51E0\u810A\u5DF1\u84DF\u6280\u5180\u5B63\u4F0E\u796D\u5242\u60B8\u6D4E\u5BC4\u5BC2\u8BA1\u8BB0\u65E2\u5FCC\u9645\u5993\u7EE7\u7EAA\u5609\u67B7\u5939\u4F73\u5BB6\u52A0\u835A\u988A\u8D3E\u7532\u94BE\u5047\u7A3C\u4EF7\u67B6\u9A7E\u5AC1\u6B7C\u76D1\u575A\u5C16\u7B3A\u95F4\u714E\u517C\u80A9\u8270\u5978\u7F04\u8327\u68C0\u67EC\u78B1\u7877\u62E3\u6361\u7B80\u4FED\u526A\u51CF\u8350\u69DB\u9274\u8DF5\u8D31\u89C1\u952E\u7BAD\u4EF6"],
["bd40", "\u7D37", 54, "\u7D6F", 7],
["bd80", "\u7D78", 32, "\u5065\u8230\u5251\u996F\u6E10\u6E85\u6DA7\u5EFA\u50F5\u59DC\u5C06\u6D46\u6C5F\u7586\u848B\u6868\u5956\u8BB2\u5320\u9171\u964D\u8549\u6912\u7901\u7126\u80F6\u4EA4\u90CA\u6D47\u9A84\u5A07\u56BC\u6405\u94F0\u77EB\u4FA5\u811A\u72E1\u89D2\u997A\u7F34\u7EDE\u527F\u6559\u9175\u8F7F\u8F83\u53EB\u7A96\u63ED\u63A5\u7686\u79F8\u8857\u9636\u622A\u52AB\u8282\u6854\u6770\u6377\u776B\u7AED\u6D01\u7ED3\u89E3\u59D0\u6212\u85C9\u82A5\u754C\u501F\u4ECB\u75A5\u8BEB\u5C4A\u5DFE\u7B4B\u65A4\u91D1\u4ECA\u6D25\u895F\u7D27\u9526\u4EC5\u8C28\u8FDB\u9773\u664B\u7981\u8FD1\u70EC\u6D78"],
["be40", "\u7D99", 12, "\u7DA7", 6, "\u7DAF", 42],
["be80", "\u7DDA", 32, "\u5C3D\u52B2\u8346\u5162\u830E\u775B\u6676\u9CB8\u4EAC\u60CA\u7CBE\u7CB3\u7ECF\u4E95\u8B66\u666F\u9888\u9759\u5883\u656C\u955C\u5F84\u75C9\u9756\u7ADF\u7ADE\u51C0\u70AF\u7A98\u63EA\u7A76\u7EA0\u7396\u97ED\u4E45\u7078\u4E5D\u9152\u53A9\u6551\u65E7\u81FC\u8205\u548E\u5C31\u759A\u97A0\u62D8\u72D9\u75BD\u5C45\u9A79\u83CA\u5C40\u5480\u77E9\u4E3E\u6CAE\u805A\u62D2\u636E\u5DE8\u5177\u8DDD\u8E1E\u952F\u4FF1\u53E5\u60E7\u70AC\u5267\u6350\u9E43\u5A1F\u5026\u7737\u5377\u7EE2\u6485\u652B\u6289\u6398\u5014\u7235\u89C9\u51B3\u8BC0\u7EDD\u5747\u83CC\u94A7\u519B\u541B\u5CFB"],
["bf40", "\u7DFB", 62],
["bf80", "\u7E3A\u7E3C", 4, "\u7E42", 4, "\u7E48", 21, "\u4FCA\u7AE3\u6D5A\u90E1\u9A8F\u5580\u5496\u5361\u54AF\u5F00\u63E9\u6977\u51EF\u6168\u520A\u582A\u52D8\u574E\u780D\u770B\u5EB7\u6177\u7CE0\u625B\u6297\u4EA2\u7095\u8003\u62F7\u70E4\u9760\u5777\u82DB\u67EF\u68F5\u78D5\u9897\u79D1\u58F3\u54B3\u53EF\u6E34\u514B\u523B\u5BA2\u8BFE\u80AF\u5543\u57A6\u6073\u5751\u542D\u7A7A\u6050\u5B54\u63A7\u62A0\u53E3\u6263\u5BC7\u67AF\u54ED\u7A9F\u82E6\u9177\u5E93\u88E4\u5938\u57AE\u630E\u8DE8\u80EF\u5757\u7B77\u4FA9\u5FEB\u5BBD\u6B3E\u5321\u7B50\u72C2\u6846\u77FF\u7736\u65F7\u51B5\u4E8F\u76D4\u5CBF\u7AA5\u8475\u594E\u9B41\u5080"],
["c040", "\u7E5E", 35, "\u7E83", 23, "\u7E9C\u7E9D\u7E9E"],
["c080", "\u7EAE\u7EB4\u7EBB\u7EBC\u7ED6\u7EE4\u7EEC\u7EF9\u7F0A\u7F10\u7F1E\u7F37\u7F39\u7F3B", 6, "\u7F43\u7F46", 9, "\u7F52\u7F53\u9988\u6127\u6E83\u5764\u6606\u6346\u56F0\u62EC\u6269\u5ED3\u9614\u5783\u62C9\u5587\u8721\u814A\u8FA3\u5566\u83B1\u6765\u8D56\u84DD\u5A6A\u680F\u62E6\u7BEE\u9611\u5170\u6F9C\u8C30\u63FD\u89C8\u61D2\u7F06\u70C2\u6EE5\u7405\u6994\u72FC\u5ECA\u90CE\u6717\u6D6A\u635E\u52B3\u7262\u8001\u4F6C\u59E5\u916A\u70D9\u6D9D\u52D2\u4E50\u96F7\u956D\u857E\u78CA\u7D2F\u5121\u5792\u64C2\u808B\u7C7B\u6CEA\u68F1\u695E\u51B7\u5398\u68A8\u7281\u9ECE\u7BF1\u72F8\u79BB\u6F13\u7406\u674E\u91CC\u9CA4\u793C\u8389\u8354\u540F\u6817\u4E3D\u5389\u52B1\u783E\u5386\u5229\u5088\u4F8B\u4FD0"],
["c140", "\u7F56\u7F59\u7F5B\u7F5C\u7F5D\u7F5E\u7F60\u7F63", 4, "\u7F6B\u7F6C\u7F6D\u7F6F\u7F70\u7F73\u7F75\u7F76\u7F77\u7F78\u7F7A\u7F7B\u7F7C\u7F7D\u7F7F\u7F80\u7F82", 7, "\u7F8B\u7F8D\u7F8F", 4, "\u7F95", 4, "\u7F9B\u7F9C\u7FA0\u7FA2\u7FA3\u7FA5\u7FA6\u7FA8", 6, "\u7FB1"],
["c180", "\u7FB3", 4, "\u7FBA\u7FBB\u7FBE\u7FC0\u7FC2\u7FC3\u7FC4\u7FC6\u7FC7\u7FC8\u7FC9\u7FCB\u7FCD\u7FCF", 4, "\u7FD6\u7FD7\u7FD9", 5, "\u7FE2\u7FE3\u75E2\u7ACB\u7C92\u6CA5\u96B6\u529B\u7483\u54E9\u4FE9\u8054\u83B2\u8FDE\u9570\u5EC9\u601C\u6D9F\u5E18\u655B\u8138\u94FE\u604B\u70BC\u7EC3\u7CAE\u51C9\u6881\u7CB1\u826F\u4E24\u8F86\u91CF\u667E\u4EAE\u8C05\u64A9\u804A\u50DA\u7597\u71CE\u5BE5\u8FBD\u6F66\u4E86\u6482\u9563\u5ED6\u6599\u5217\u88C2\u70C8\u52A3\u730E\u7433\u6797\u78F7\u9716\u4E34\u90BB\u9CDE\u6DCB\u51DB\u8D41\u541D\u62CE\u73B2\u83F1\u96F6\u9F84\u94C3\u4F36\u7F9A\u51CC\u7075\u9675\u5CAD\u9886\u53E6\u4EE4\u6E9C\u7409\u69B4\u786B\u998F\u7559\u5218\u7624\u6D41\u67F3\u516D\u9F99\u804B\u5499\u7B3C\u7ABF"],
["c240", "\u7FE4\u7FE7\u7FE8\u7FEA\u7FEB\u7FEC\u7FED\u7FEF\u7FF2\u7FF4", 6, "\u7FFD\u7FFE\u7FFF\u8002\u8007\u8008\u8009\u800A\u800E\u800F\u8011\u8013\u801A\u801B\u801D\u801E\u801F\u8021\u8023\u8024\u802B", 5, "\u8032\u8034\u8039\u803A\u803C\u803E\u8040\u8041\u8044\u8045\u8047\u8048\u8049\u804E\u804F\u8050\u8051\u8053\u8055\u8056\u8057"],
["c280", "\u8059\u805B", 13, "\u806B", 5, "\u8072", 11, "\u9686\u5784\u62E2\u9647\u697C\u5A04\u6402\u7BD3\u6F0F\u964B\u82A6\u5362\u9885\u5E90\u7089\u63B3\u5364\u864F\u9C81\u9E93\u788C\u9732\u8DEF\u8D42\u9E7F\u6F5E\u7984\u5F55\u9646\u622E\u9A74\u5415\u94DD\u4FA3\u65C5\u5C65\u5C61\u7F15\u8651\u6C2F\u5F8B\u7387\u6EE4\u7EFF\u5CE6\u631B\u5B6A\u6EE6\u5375\u4E71\u63A0\u7565\u62A1\u8F6E\u4F26\u4ED1\u6CA6\u7EB6\u8BBA\u841D\u87BA\u7F57\u903B\u9523\u7BA9\u9AA1\u88F8\u843D\u6D1B\u9A86\u7EDC\u5988\u9EBB\u739B\u7801\u8682\u9A6C\u9A82\u561B\u5417\u57CB\u4E70\u9EA6\u5356\u8FC8\u8109\u7792\u9992\u86EE\u6EE1\u8513\u66FC\u6162\u6F2B"],
["c340", "\u807E\u8081\u8082\u8085\u8088\u808A\u808D", 5, "\u8094\u8095\u8097\u8099\u809E\u80A3\u80A6\u80A7\u80A8\u80AC\u80B0\u80B3\u80B5\u80B6\u80B8\u80B9\u80BB\u80C5\u80C7", 4, "\u80CF", 6, "\u80D8\u80DF\u80E0\u80E2\u80E3\u80E6\u80EE\u80F5\u80F7\u80F9\u80FB\u80FE\u80FF\u8100\u8101\u8103\u8104\u8105\u8107\u8108\u810B"],
["c380", "\u810C\u8115\u8117\u8119\u811B\u811C\u811D\u811F", 12, "\u812D\u812E\u8130\u8133\u8134\u8135\u8137\u8139", 4, "\u813F\u8C29\u8292\u832B\u76F2\u6C13\u5FD9\u83BD\u732B\u8305\u951A\u6BDB\u77DB\u94C6\u536F\u8302\u5192\u5E3D\u8C8C\u8D38\u4E48\u73AB\u679A\u6885\u9176\u9709\u7164\u6CA1\u7709\u5A92\u9541\u6BCF\u7F8E\u6627\u5BD0\u59B9\u5A9A\u95E8\u95F7\u4EEC\u840C\u8499\u6AAC\u76DF\u9530\u731B\u68A6\u5B5F\u772F\u919A\u9761\u7CDC\u8FF7\u8C1C\u5F25\u7C73\u79D8\u89C5\u6CCC\u871C\u5BC6\u5E42\u68C9\u7720\u7EF5\u5195\u514D\u52C9\u5A29\u7F05\u9762\u82D7\u63CF\u7784\u85D0\u79D2\u6E3A\u5E99\u5999\u8511\u706D\u6C11\u62BF\u76BF\u654F\u60AF\u95FD\u660E\u879F\u9E23\u94ED\u540D\u547D\u8C2C\u6478"],
["c440", "\u8140", 5, "\u8147\u8149\u814D\u814E\u814F\u8152\u8156\u8157\u8158\u815B", 4, "\u8161\u8162\u8163\u8164\u8166\u8168\u816A\u816B\u816C\u816F\u8172\u8173\u8175\u8176\u8177\u8178\u8181\u8183", 4, "\u8189\u818B\u818C\u818D\u818E\u8190\u8192", 5, "\u8199\u819A\u819E", 4, "\u81A4\u81A5"],
["c480", "\u81A7\u81A9\u81AB", 7, "\u81B4", 5, "\u81BC\u81BD\u81BE\u81BF\u81C4\u81C5\u81C7\u81C8\u81C9\u81CB\u81CD", 6, "\u6479\u8611\u6A21\u819C\u78E8\u6469\u9B54\u62B9\u672B\u83AB\u58A8\u9ED8\u6CAB\u6F20\u5BDE\u964C\u8C0B\u725F\u67D0\u62C7\u7261\u4EA9\u59C6\u6BCD\u5893\u66AE\u5E55\u52DF\u6155\u6728\u76EE\u7766\u7267\u7A46\u62FF\u54EA\u5450\u94A0\u90A3\u5A1C\u7EB3\u6C16\u4E43\u5976\u8010\u5948\u5357\u7537\u96BE\u56CA\u6320\u8111\u607C\u95F9\u6DD6\u5462\u9981\u5185\u5AE9\u80FD\u59AE\u9713\u502A\u6CE5\u5C3C\u62DF\u4F60\u533F\u817B\u9006\u6EBA\u852B\u62C8\u5E74\u78BE\u64B5\u637B\u5FF5\u5A18\u917F\u9E1F\u5C3F\u634F\u8042\u5B7D\u556E\u954A\u954D\u6D85\u60A8\u67E0\u72DE\u51DD\u5B81"],
["c540", "\u81D4", 14, "\u81E4\u81E5\u81E6\u81E8\u81E9\u81EB\u81EE", 4, "\u81F5", 5, "\u81FD\u81FF\u8203\u8207", 4, "\u820E\u820F\u8211\u8213\u8215", 5, "\u821D\u8220\u8224\u8225\u8226\u8227\u8229\u822E\u8232\u823A\u823C\u823D\u823F"],
["c580", "\u8240\u8241\u8242\u8243\u8245\u8246\u8248\u824A\u824C\u824D\u824E\u8250", 7, "\u8259\u825B\u825C\u825D\u825E\u8260", 7, "\u8269\u62E7\u6CDE\u725B\u626D\u94AE\u7EBD\u8113\u6D53\u519C\u5F04\u5974\u52AA\u6012\u5973\u6696\u8650\u759F\u632A\u61E6\u7CEF\u8BFA\u54E6\u6B27\u9E25\u6BB4\u85D5\u5455\u5076\u6CA4\u556A\u8DB4\u722C\u5E15\u6015\u7436\u62CD\u6392\u724C\u5F98\u6E43\u6D3E\u6500\u6F58\u76D8\u78D0\u76FC\u7554\u5224\u53DB\u4E53\u5E9E\u65C1\u802A\u80D6\u629B\u5486\u5228\u70AE\u888D\u8DD1\u6CE1\u5478\u80DA\u57F9\u88F4\u8D54\u966A\u914D\u4F69\u6C9B\u55B7\u76C6\u7830\u62A8\u70F9\u6F8E\u5F6D\u84EC\u68DA\u787C\u7BF7\u81A8\u670B\u9E4F\u6367\u78B0\u576F\u7812\u9739\u6279\u62AB\u5288\u7435\u6BD7"],
["c640", "\u826A\u826B\u826C\u826D\u8271\u8275\u8276\u8277\u8278\u827B\u827C\u8280\u8281\u8283\u8285\u8286\u8287\u8289\u828C\u8290\u8293\u8294\u8295\u8296\u829A\u829B\u829E\u82A0\u82A2\u82A3\u82A7\u82B2\u82B5\u82B6\u82BA\u82BB\u82BC\u82BF\u82C0\u82C2\u82C3\u82C5\u82C6\u82C9\u82D0\u82D6\u82D9\u82DA\u82DD\u82E2\u82E7\u82E8\u82E9\u82EA\u82EC\u82ED\u82EE\u82F0\u82F2\u82F3\u82F5\u82F6\u82F8"],
["c680", "\u82FA\u82FC", 4, "\u830A\u830B\u830D\u8310\u8312\u8313\u8316\u8318\u8319\u831D", 9, "\u8329\u832A\u832E\u8330\u8332\u8337\u833B\u833D\u5564\u813E\u75B2\u76AE\u5339\u75DE\u50FB\u5C41\u8B6C\u7BC7\u504F\u7247\u9A97\u98D8\u6F02\u74E2\u7968\u6487\u77A5\u62FC\u9891\u8D2B\u54C1\u8058\u4E52\u576A\u82F9\u840D\u5E73\u51ED\u74F6\u8BC4\u5C4F\u5761\u6CFC\u9887\u5A46\u7834\u9B44\u8FEB\u7C95\u5256\u6251\u94FA\u4EC6\u8386\u8461\u83E9\u84B2\u57D4\u6734\u5703\u666E\u6D66\u8C31\u66DD\u7011\u671F\u6B3A\u6816\u621A\u59BB\u4E03\u51C4\u6F06\u67D2\u6C8F\u5176\u68CB\u5947\u6B67\u7566\u5D0E\u8110\u9F50\u65D7\u7948\u7941\u9A91\u8D77\u5C82\u4E5E\u4F01\u542F\u5951\u780C\u5668\u6C14\u8FC4\u5F03\u6C7D\u6CE3\u8BAB\u6390"],
["c740", "\u833E\u833F\u8341\u8342\u8344\u8345\u8348\u834A", 4, "\u8353\u8355", 4, "\u835D\u8362\u8370", 6, "\u8379\u837A\u837E", 6, "\u8387\u8388\u838A\u838B\u838C\u838D\u838F\u8390\u8391\u8394\u8395\u8396\u8397\u8399\u839A\u839D\u839F\u83A1", 6, "\u83AC\u83AD\u83AE"],
["c780", "\u83AF\u83B5\u83BB\u83BE\u83BF\u83C2\u83C3\u83C4\u83C6\u83C8\u83C9\u83CB\u83CD\u83CE\u83D0\u83D1\u83D2\u83D3\u83D5\u83D7\u83D9\u83DA\u83DB\u83DE\u83E2\u83E3\u83E4\u83E6\u83E7\u83E8\u83EB\u83EC\u83ED\u6070\u6D3D\u7275\u6266\u948E\u94C5\u5343\u8FC1\u7B7E\u4EDF\u8C26\u4E7E\u9ED4\u94B1\u94B3\u524D\u6F5C\u9063\u6D45\u8C34\u5811\u5D4C\u6B20\u6B49\u67AA\u545B\u8154\u7F8C\u5899\u8537\u5F3A\u62A2\u6A47\u9539\u6572\u6084\u6865\u77A7\u4E54\u4FA8\u5DE7\u9798\u64AC\u7FD8\u5CED\u4FCF\u7A8D\u5207\u8304\u4E14\u602F\u7A83\u94A6\u4FB5\u4EB2\u79E6\u7434\u52E4\u82B9\u64D2\u79BD\u5BDD\u6C81\u9752\u8F7B\u6C22\u503E\u537F\u6E05\u64CE\u6674\u6C30\u60C5\u9877\u8BF7\u5E86\u743C\u7A77\u79CB\u4E18\u90B1\u7403\u6C42\u56DA\u914B\u6CC5\u8D8B\u533A\u86C6\u66F2\u8EAF\u5C48\u9A71\u6E20"],
["c840", "\u83EE\u83EF\u83F3", 4, "\u83FA\u83FB\u83FC\u83FE\u83FF\u8400\u8402\u8405\u8407\u8408\u8409\u840A\u8410\u8412", 5, "\u8419\u841A\u841B\u841E", 5, "\u8429", 7, "\u8432", 5, "\u8439\u843A\u843B\u843E", 7, "\u8447\u8448\u8449"],
["c880", "\u844A", 6, "\u8452", 4, "\u8458\u845D\u845E\u845F\u8460\u8462\u8464", 4, "\u846A\u846E\u846F\u8470\u8472\u8474\u8477\u8479\u847B\u847C\u53D6\u5A36\u9F8B\u8DA3\u53BB\u5708\u98A7\u6743\u919B\u6CC9\u5168\u75CA\u62F3\u72AC\u5238\u529D\u7F3A\u7094\u7638\u5374\u9E4A\u69B7\u786E\u96C0\u88D9\u7FA4\u7136\u71C3\u5189\u67D3\u74E4\u58E4\u6518\u56B7\u8BA9\u9976\u6270\u7ED5\u60F9\u70ED\u58EC\u4EC1\u4EBA\u5FCD\u97E7\u4EFB\u8BA4\u5203\u598A\u7EAB\u6254\u4ECD\u65E5\u620E\u8338\u84C9\u8363\u878D\u7194\u6EB6\u5BB9\u7ED2\u5197\u63C9\u67D4\u8089\u8339\u8815\u5112\u5B7A\u5982\u8FB1\u4E73\u6C5D\u5165\u8925\u8F6F\u962E\u854A\u745E\u9510\u95F0\u6DA6\u82E5\u5F31\u6492\u6D12\u8428\u816E\u9CC3\u585E\u8D5B\u4E09\u53C1"],
["c940", "\u847D", 4, "\u8483\u8484\u8485\u8486\u848A\u848D\u848F", 7, "\u8498\u849A\u849B\u849D\u849E\u849F\u84A0\u84A2", 12, "\u84B0\u84B1\u84B3\u84B5\u84B6\u84B7\u84BB\u84BC\u84BE\u84C0\u84C2\u84C3\u84C5\u84C6\u84C7\u84C8\u84CB\u84CC\u84CE\u84CF\u84D2\u84D4\u84D5\u84D7"],
["c980", "\u84D8", 4, "\u84DE\u84E1\u84E2\u84E4\u84E7", 4, "\u84ED\u84EE\u84EF\u84F1", 10, "\u84FD\u84FE\u8500\u8501\u8502\u4F1E\u6563\u6851\u55D3\u4E27\u6414\u9A9A\u626B\u5AC2\u745F\u8272\u6DA9\u68EE\u50E7\u838E\u7802\u6740\u5239\u6C99\u7EB1\u50BB\u5565\u715E\u7B5B\u6652\u73CA\u82EB\u6749\u5C71\u5220\u717D\u886B\u95EA\u9655\u64C5\u8D61\u81B3\u5584\u6C55\u6247\u7F2E\u5892\u4F24\u5546\u8D4F\u664C\u4E0A\u5C1A\u88F3\u68A2\u634E\u7A0D\u70E7\u828D\u52FA\u97F6\u5C11\u54E8\u90B5\u7ECD\u5962\u8D4A\u86C7\u820C\u820D\u8D66\u6444\u5C04\u6151\u6D89\u793E\u8BBE\u7837\u7533\u547B\u4F38\u8EAB\u6DF1\u5A20\u7EC5\u795E\u6C88\u5BA1\u5A76\u751A\u80BE\u614E\u6E17\u58F0\u751F\u7525\u7272\u5347\u7EF3"],
["ca40", "\u8503", 8, "\u850D\u850E\u850F\u8510\u8512\u8514\u8515\u8516\u8518\u8519\u851B\u851C\u851D\u851E\u8520\u8522", 8, "\u852D", 9, "\u853E", 4, "\u8544\u8545\u8546\u8547\u854B", 10],
["ca80", "\u8557\u8558\u855A\u855B\u855C\u855D\u855F", 4, "\u8565\u8566\u8567\u8569", 8, "\u8573\u8575\u8576\u8577\u8578\u857C\u857D\u857F\u8580\u8581\u7701\u76DB\u5269\u80DC\u5723\u5E08\u5931\u72EE\u65BD\u6E7F\u8BD7\u5C38\u8671\u5341\u77F3\u62FE\u65F6\u4EC0\u98DF\u8680\u5B9E\u8BC6\u53F2\u77E2\u4F7F\u5C4E\u9A76\u59CB\u5F0F\u793A\u58EB\u4E16\u67FF\u4E8B\u62ED\u8A93\u901D\u52BF\u662F\u55DC\u566C\u9002\u4ED5\u4F8D\u91CA\u9970\u6C0F\u5E02\u6043\u5BA4\u89C6\u8BD5\u6536\u624B\u9996\u5B88\u5BFF\u6388\u552E\u53D7\u7626\u517D\u852C\u67A2\u68B3\u6B8A\u6292\u8F93\u53D4\u8212\u6DD1\u758F\u4E66\u8D4E\u5B70\u719F\u85AF\u6691\u66D9\u7F72\u8700\u9ECD\u9F20\u5C5E\u672F\u8FF0\u6811\u675F\u620D\u7AD6\u5885\u5EB6\u6570\u6F31"],
["cb40", "\u8582\u8583\u8586\u8588", 6, "\u8590", 10, "\u859D", 6, "\u85A5\u85A6\u85A7\u85A9\u85AB\u85AC\u85AD\u85B1", 5, "\u85B8\u85BA", 6, "\u85C2", 6, "\u85CA", 4, "\u85D1\u85D2"],
["cb80", "\u85D4\u85D6", 5, "\u85DD", 6, "\u85E5\u85E6\u85E7\u85E8\u85EA", 14, "\u6055\u5237\u800D\u6454\u8870\u7529\u5E05\u6813\u62F4\u971C\u53CC\u723D\u8C01\u6C34\u7761\u7A0E\u542E\u77AC\u987A\u821C\u8BF4\u7855\u6714\u70C1\u65AF\u6495\u5636\u601D\u79C1\u53F8\u4E1D\u6B7B\u8086\u5BFA\u55E3\u56DB\u4F3A\u4F3C\u9972\u5DF3\u677E\u8038\u6002\u9882\u9001\u5B8B\u8BBC\u8BF5\u641C\u8258\u64DE\u55FD\u82CF\u9165\u4FD7\u7D20\u901F\u7C9F\u50F3\u5851\u6EAF\u5BBF\u8BC9\u8083\u9178\u849C\u7B97\u867D\u968B\u968F\u7EE5\u9AD3\u788E\u5C81\u7A57\u9042\u96A7\u795F\u5B59\u635F\u7B0B\u84D1\u68AD\u5506\u7F29\u7410\u7D22\u9501\u6240\u584C\u4ED6\u5B83\u5979\u5854"],
["cc40", "\u85F9\u85FA\u85FC\u85FD\u85FE\u8600", 4, "\u8606", 10, "\u8612\u8613\u8614\u8615\u8617", 15, "\u8628\u862A", 13, "\u8639\u863A\u863B\u863D\u863E\u863F\u8640"],
["cc80", "\u8641", 11, "\u8652\u8653\u8655", 4, "\u865B\u865C\u865D\u865F\u8660\u8661\u8663", 7, "\u736D\u631E\u8E4B\u8E0F\u80CE\u82D4\u62AC\u53F0\u6CF0\u915E\u592A\u6001\u6C70\u574D\u644A\u8D2A\u762B\u6EE9\u575B\u6A80\u75F0\u6F6D\u8C2D\u8C08\u5766\u6BEF\u8892\u78B3\u63A2\u53F9\u70AD\u6C64\u5858\u642A\u5802\u68E0\u819B\u5510\u7CD6\u5018\u8EBA\u6DCC\u8D9F\u70EB\u638F\u6D9B\u6ED4\u7EE6\u8404\u6843\u9003\u6DD8\u9676\u8BA8\u5957\u7279\u85E4\u817E\u75BC\u8A8A\u68AF\u5254\u8E22\u9511\u63D0\u9898\u8E44\u557C\u4F53\u66FF\u568F\u60D5\u6D95\u5243\u5C49\u5929\u6DFB\u586B\u7530\u751C\u606C\u8214\u8146\u6311\u6761\u8FE2\u773A\u8DF3\u8D34\u94C1\u5E16\u5385\u542C\u70C3"],
["cd40", "\u866D\u866F\u8670\u8672", 6, "\u8683", 6, "\u868E", 4, "\u8694\u8696", 5, "\u869E", 4, "\u86A5\u86A6\u86AB\u86AD\u86AE\u86B2\u86B3\u86B7\u86B8\u86B9\u86BB", 4, "\u86C1\u86C2\u86C3\u86C5\u86C8\u86CC\u86CD\u86D2\u86D3\u86D5\u86D6\u86D7\u86DA\u86DC"],
["cd80", "\u86DD\u86E0\u86E1\u86E2\u86E3\u86E5\u86E6\u86E7\u86E8\u86EA\u86EB\u86EC\u86EF\u86F5\u86F6\u86F7\u86FA\u86FB\u86FC\u86FD\u86FF\u8701\u8704\u8705\u8706\u870B\u870C\u870E\u870F\u8710\u8711\u8714\u8716\u6C40\u5EF7\u505C\u4EAD\u5EAD\u633A\u8247\u901A\u6850\u916E\u77B3\u540C\u94DC\u5F64\u7AE5\u6876\u6345\u7B52\u7EDF\u75DB\u5077\u6295\u5934\u900F\u51F8\u79C3\u7A81\u56FE\u5F92\u9014\u6D82\u5C60\u571F\u5410\u5154\u6E4D\u56E2\u63A8\u9893\u817F\u8715\u892A\u9000\u541E\u5C6F\u81C0\u62D6\u6258\u8131\u9E35\u9640\u9A6E\u9A7C\u692D\u59A5\u62D3\u553E\u6316\u54C7\u86D9\u6D3C\u5A03\u74E6\u889C\u6B6A\u5916\u8C4C\u5F2F\u6E7E\u73A9\u987D\u4E38\u70F7\u5B8C\u7897\u633D\u665A\u7696\u60CB\u5B9B\u5A49\u4E07\u8155\u6C6A\u738B\u4EA1\u6789\u7F51\u5F80\u65FA\u671B\u5FD8\u5984\u5A01"],
["ce40", "\u8719\u871B\u871D\u871F\u8720\u8724\u8726\u8727\u8728\u872A\u872B\u872C\u872D\u872F\u8730\u8732\u8733\u8735\u8736\u8738\u8739\u873A\u873C\u873D\u8740", 6, "\u874A\u874B\u874D\u874F\u8750\u8751\u8752\u8754\u8755\u8756\u8758\u875A", 5, "\u8761\u8762\u8766", 7, "\u876F\u8771\u8772\u8773\u8775"],
["ce80", "\u8777\u8778\u8779\u877A\u877F\u8780\u8781\u8784\u8786\u8787\u8789\u878A\u878C\u878E", 4, "\u8794\u8795\u8796\u8798", 6, "\u87A0", 4, "\u5DCD\u5FAE\u5371\u97E6\u8FDD\u6845\u56F4\u552F\u60DF\u4E3A\u6F4D\u7EF4\u82C7\u840E\u59D4\u4F1F\u4F2A\u5C3E\u7EAC\u672A\u851A\u5473\u754F\u80C3\u5582\u9B4F\u4F4D\u6E2D\u8C13\u5C09\u6170\u536B\u761F\u6E29\u868A\u6587\u95FB\u7EB9\u543B\u7A33\u7D0A\u95EE\u55E1\u7FC1\u74EE\u631D\u8717\u6DA1\u7A9D\u6211\u65A1\u5367\u63E1\u6C83\u5DEB\u545C\u94A8\u4E4C\u6C61\u8BEC\u5C4B\u65E0\u829C\u68A7\u543E\u5434\u6BCB\u6B66\u4E94\u6342\u5348\u821E\u4F0D\u4FAE\u575E\u620A\u96FE\u6664\u7269\u52FF\u52A1\u609F\u8BEF\u6614\u7199\u6790\u897F\u7852\u77FD\u6670\u563B\u5438\u9521\u727A"],
["cf40", "\u87A5\u87A6\u87A7\u87A9\u87AA\u87AE\u87B0\u87B1\u87B2\u87B4\u87B6\u87B7\u87B8\u87B9\u87BB\u87BC\u87BE\u87BF\u87C1", 4, "\u87C7\u87C8\u87C9\u87CC", 4, "\u87D4", 6, "\u87DC\u87DD\u87DE\u87DF\u87E1\u87E2\u87E3\u87E4\u87E6\u87E7\u87E8\u87E9\u87EB\u87EC\u87ED\u87EF", 9],
["cf80", "\u87FA\u87FB\u87FC\u87FD\u87FF\u8800\u8801\u8802\u8804", 5, "\u880B", 7, "\u8814\u8817\u8818\u8819\u881A\u881C", 4, "\u8823\u7A00\u606F\u5E0C\u6089\u819D\u5915\u60DC\u7184\u70EF\u6EAA\u6C50\u7280\u6A84\u88AD\u5E2D\u4E60\u5AB3\u559C\u94E3\u6D17\u7CFB\u9699\u620F\u7EC6\u778E\u867E\u5323\u971E\u8F96\u6687\u5CE1\u4FA0\u72ED\u4E0B\u53A6\u590F\u5413\u6380\u9528\u5148\u4ED9\u9C9C\u7EA4\u54B8\u8D24\u8854\u8237\u95F2\u6D8E\u5F26\u5ACC\u663E\u9669\u73B0\u732E\u53BF\u817A\u9985\u7FA1\u5BAA\u9677\u9650\u7EBF\u76F8\u53A2\u9576\u9999\u7BB1\u8944\u6E58\u4E61\u7FD4\u7965\u8BE6\u60F3\u54CD\u4EAB\u9879\u5DF7\u6A61\u50CF\u5411\u8C61\u8427\u785D\u9704\u524A\u54EE\u56A3\u9500\u6D88\u5BB5\u6DC6\u6653"],
["d040", "\u8824", 13, "\u8833", 5, "\u883A\u883B\u883D\u883E\u883F\u8841\u8842\u8843\u8846", 5, "\u884E", 5, "\u8855\u8856\u8858\u885A", 6, "\u8866\u8867\u886A\u886D\u886F\u8871\u8873\u8874\u8875\u8876\u8878\u8879\u887A"],
["d080", "\u887B\u887C\u8880\u8883\u8886\u8887\u8889\u888A\u888C\u888E\u888F\u8890\u8891\u8893\u8894\u8895\u8897", 4, "\u889D", 4, "\u88A3\u88A5", 5, "\u5C0F\u5B5D\u6821\u8096\u5578\u7B11\u6548\u6954\u4E9B\u6B47\u874E\u978B\u534F\u631F\u643A\u90AA\u659C\u80C1\u8C10\u5199\u68B0\u5378\u87F9\u61C8\u6CC4\u6CFB\u8C22\u5C51\u85AA\u82AF\u950C\u6B23\u8F9B\u65B0\u5FFB\u5FC3\u4FE1\u8845\u661F\u8165\u7329\u60FA\u5174\u5211\u578B\u5F62\u90A2\u884C\u9192\u5E78\u674F\u6027\u59D3\u5144\u51F6\u80F8\u5308\u6C79\u96C4\u718A\u4F11\u4FEE\u7F9E\u673D\u55C5\u9508\u79C0\u8896\u7EE3\u589F\u620C\u9700\u865A\u5618\u987B\u5F90\u8BB8\u84C4\u9157\u53D9\u65ED\u5E8F\u755C\u6064\u7D6E\u5A7F\u7EEA\u7EED\u8F69\u55A7\u5BA3\u60AC\u65CB\u7384"],
["d140", "\u88AC\u88AE\u88AF\u88B0\u88B2", 4, "\u88B8\u88B9\u88BA\u88BB\u88BD\u88BE\u88BF\u88C0\u88C3\u88C4\u88C7\u88C8\u88CA\u88CB\u88CC\u88CD\u88CF\u88D0\u88D1\u88D3\u88D6\u88D7\u88DA", 4, "\u88E0\u88E1\u88E6\u88E7\u88E9", 6, "\u88F2\u88F5\u88F6\u88F7\u88FA\u88FB\u88FD\u88FF\u8900\u8901\u8903", 5],
["d180", "\u8909\u890B", 4, "\u8911\u8914", 4, "\u891C", 4, "\u8922\u8923\u8924\u8926\u8927\u8928\u8929\u892C\u892D\u892E\u892F\u8931\u8932\u8933\u8935\u8937\u9009\u7663\u7729\u7EDA\u9774\u859B\u5B66\u7A74\u96EA\u8840\u52CB\u718F\u5FAA\u65EC\u8BE2\u5BFB\u9A6F\u5DE1\u6B89\u6C5B\u8BAD\u8BAF\u900A\u8FC5\u538B\u62BC\u9E26\u9E2D\u5440\u4E2B\u82BD\u7259\u869C\u5D16\u8859\u6DAF\u96C5\u54D1\u4E9A\u8BB6\u7109\u54BD\u9609\u70DF\u6DF9\u76D0\u4E25\u7814\u8712\u5CA9\u5EF6\u8A00\u989C\u960E\u708E\u6CBF\u5944\u63A9\u773C\u884D\u6F14\u8273\u5830\u71D5\u538C\u781A\u96C1\u5501\u5F66\u7130\u5BB4\u8C1A\u9A8C\u6B83\u592E\u9E2F\u79E7\u6768\u626C\u4F6F\u75A1\u7F8A\u6D0B\u9633\u6C27\u4EF0\u75D2\u517B\u6837\u6F3E\u9080\u8170\u5996\u7476"],
["d240", "\u8938", 8, "\u8942\u8943\u8945", 24, "\u8960", 5, "\u8967", 19, "\u897C"],
["d280", "\u897D\u897E\u8980\u8982\u8984\u8985\u8987", 26, "\u6447\u5C27\u9065\u7A91\u8C23\u59DA\u54AC\u8200\u836F\u8981\u8000\u6930\u564E\u8036\u7237\u91CE\u51B6\u4E5F\u9875\u6396\u4E1A\u53F6\u66F3\u814B\u591C\u6DB2\u4E00\u58F9\u533B\u63D6\u94F1\u4F9D\u4F0A\u8863\u9890\u5937\u9057\u79FB\u4EEA\u80F0\u7591\u6C82\u5B9C\u59E8\u5F5D\u6905\u8681\u501A\u5DF2\u4E59\u77E3\u4EE5\u827A\u6291\u6613\u9091\u5C79\u4EBF\u5F79\u81C6\u9038\u8084\u75AB\u4EA6\u88D4\u610F\u6BC5\u5FC6\u4E49\u76CA\u6EA2\u8BE3\u8BAE\u8C0A\u8BD1\u5F02\u7FFC\u7FCC\u7ECE\u8335\u836B\u56E0\u6BB7\u97F3\u9634\u59FB\u541F\u94F6\u6DEB\u5BC5\u996E\u5C39\u5F15\u9690"],
["d340", "\u89A2", 30, "\u89C3\u89CD\u89D3\u89D4\u89D5\u89D7\u89D8\u89D9\u89DB\u89DD\u89DF\u89E0\u89E1\u89E2\u89E4\u89E7\u89E8\u89E9\u89EA\u89EC\u89ED\u89EE\u89F0\u89F1\u89F2\u89F4", 6],
["d380", "\u89FB", 4, "\u8A01", 5, "\u8A08", 21, "\u5370\u82F1\u6A31\u5A74\u9E70\u5E94\u7F28\u83B9\u8424\u8425\u8367\u8747\u8FCE\u8D62\u76C8\u5F71\u9896\u786C\u6620\u54DF\u62E5\u4F63\u81C3\u75C8\u5EB8\u96CD\u8E0A\u86F9\u548F\u6CF3\u6D8C\u6C38\u607F\u52C7\u7528\u5E7D\u4F18\u60A0\u5FE7\u5C24\u7531\u90AE\u94C0\u72B9\u6CB9\u6E38\u9149\u6709\u53CB\u53F3\u4F51\u91C9\u8BF1\u53C8\u5E7C\u8FC2\u6DE4\u4E8E\u76C2\u6986\u865E\u611A\u8206\u4F59\u4FDE\u903E\u9C7C\u6109\u6E1D\u6E14\u9685\u4E88\u5A31\u96E8\u4E0E\u5C7F\u79B9\u5B87\u8BED\u7FBD\u7389\u57DF\u828B\u90C1\u5401\u9047\u55BB\u5CEA\u5FA1\u6108\u6B32\u72F1\u80B2\u8A89"],
["d440", "\u8A1E", 31, "\u8A3F", 8, "\u8A49", 21],
["d480", "\u8A5F", 25, "\u8A7A", 6, "\u6D74\u5BD3\u88D5\u9884\u8C6B\u9A6D\u9E33\u6E0A\u51A4\u5143\u57A3\u8881\u539F\u63F4\u8F95\u56ED\u5458\u5706\u733F\u6E90\u7F18\u8FDC\u82D1\u613F\u6028\u9662\u66F0\u7EA6\u8D8A\u8DC3\u94A5\u5CB3\u7CA4\u6708\u60A6\u9605\u8018\u4E91\u90E7\u5300\u9668\u5141\u8FD0\u8574\u915D\u6655\u97F5\u5B55\u531D\u7838\u6742\u683D\u54C9\u707E\u5BB0\u8F7D\u518D\u5728\u54B1\u6512\u6682\u8D5E\u8D43\u810F\u846C\u906D\u7CDF\u51FF\u85FB\u67A3\u65E9\u6FA1\u86A4\u8E81\u566A\u9020\u7682\u7076\u71E5\u8D23\u62E9\u5219\u6CFD\u8D3C\u600E\u589E\u618E\u66FE\u8D60\u624E\u55B3\u6E23\u672D\u8F67"],
["d540", "\u8A81", 7, "\u8A8B", 7, "\u8A94", 46],
["d580", "\u8AC3", 32, "\u94E1\u95F8\u7728\u6805\u69A8\u548B\u4E4D\u70B8\u8BC8\u6458\u658B\u5B85\u7A84\u503A\u5BE8\u77BB\u6BE1\u8A79\u7C98\u6CBE\u76CF\u65A9\u8F97\u5D2D\u5C55\u8638\u6808\u5360\u6218\u7AD9\u6E5B\u7EFD\u6A1F\u7AE0\u5F70\u6F33\u5F20\u638C\u6DA8\u6756\u4E08\u5E10\u8D26\u4ED7\u80C0\u7634\u969C\u62DB\u662D\u627E\u6CBC\u8D75\u7167\u7F69\u5146\u8087\u53EC\u906E\u6298\u54F2\u86F0\u8F99\u8005\u9517\u8517\u8FD9\u6D59\u73CD\u659F\u771F\u7504\u7827\u81FB\u8D1E\u9488\u4FA6\u6795\u75B9\u8BCA\u9707\u632F\u9547\u9635\u84B8\u6323\u7741\u5F81\u72F0\u4E89\u6014\u6574\u62EF\u6B63\u653F"],
["d640", "\u8AE4", 34, "\u8B08", 27],
["d680", "\u8B24\u8B25\u8B27", 30, "\u5E27\u75C7\u90D1\u8BC1\u829D\u679D\u652F\u5431\u8718\u77E5\u80A2\u8102\u6C41\u4E4B\u7EC7\u804C\u76F4\u690D\u6B96\u6267\u503C\u4F84\u5740\u6307\u6B62\u8DBE\u53EA\u65E8\u7EB8\u5FD7\u631A\u63B7\u81F3\u81F4\u7F6E\u5E1C\u5CD9\u5236\u667A\u79E9\u7A1A\u8D28\u7099\u75D4\u6EDE\u6CBB\u7A92\u4E2D\u76C5\u5FE0\u949F\u8877\u7EC8\u79CD\u80BF\u91CD\u4EF2\u4F17\u821F\u5468\u5DDE\u6D32\u8BCC\u7CA5\u8F74\u8098\u5E1A\u5492\u76B1\u5B99\u663C\u9AA4\u73E0\u682A\u86DB\u6731\u732A\u8BF8\u8BDB\u9010\u7AF9\u70DB\u716E\u62C4\u77A9\u5631\u4E3B\u8457\u67F1\u52A9\u86C0\u8D2E\u94F8\u7B51"],
["d740", "\u8B46", 31, "\u8B67", 4, "\u8B6D", 25],
["d780", "\u8B87", 24, "\u8BAC\u8BB1\u8BBB\u8BC7\u8BD0\u8BEA\u8C09\u8C1E\u4F4F\u6CE8\u795D\u9A7B\u6293\u722A\u62FD\u4E13\u7816\u8F6C\u64B0\u8D5A\u7BC6\u6869\u5E84\u88C5\u5986\u649E\u58EE\u72B6\u690E\u9525\u8FFD\u8D58\u5760\u7F00\u8C06\u51C6\u6349\u62D9\u5353\u684C\u7422\u8301\u914C\u5544\u7740\u707C\u6D4A\u5179\u54A8\u8D44\u59FF\u6ECB\u6DC4\u5B5C\u7D2B\u4ED4\u7C7D\u6ED3\u5B50\u81EA\u6E0D\u5B57\u9B03\u68D5\u8E2A\u5B97\u7EFC\u603B\u7EB5\u90B9\u8D70\u594F\u63CD\u79DF\u8DB3\u5352\u65CF\u7956\u8BC5\u963B\u7EC4\u94BB\u7E82\u5634\u9189\u6700\u7F6A\u5C0A\u9075\u6628\u5DE6\u4F50\u67DE\u505A\u4F5C\u5750\u5EA7"],
["d840", "\u8C38", 8, "\u8C42\u8C43\u8C44\u8C45\u8C48\u8C4A\u8C4B\u8C4D", 7, "\u8C56\u8C57\u8C58\u8C59\u8C5B", 5, "\u8C63", 6, "\u8C6C", 6, "\u8C74\u8C75\u8C76\u8C77\u8C7B", 6, "\u8C83\u8C84\u8C86\u8C87"],
["d880", "\u8C88\u8C8B\u8C8D", 6, "\u8C95\u8C96\u8C97\u8C99", 20, "\u4E8D\u4E0C\u5140\u4E10\u5EFF\u5345\u4E15\u4E98\u4E1E\u9B32\u5B6C\u5669\u4E28\u79BA\u4E3F\u5315\u4E47\u592D\u723B\u536E\u6C10\u56DF\u80E4\u9997\u6BD3\u777E\u9F17\u4E36\u4E9F\u9F10\u4E5C\u4E69\u4E93\u8288\u5B5B\u556C\u560F\u4EC4\u538D\u539D\u53A3\u53A5\u53AE\u9765\u8D5D\u531A\u53F5\u5326\u532E\u533E\u8D5C\u5366\u5363\u5202\u5208\u520E\u522D\u5233\u523F\u5240\u524C\u525E\u5261\u525C\u84AF\u527D\u5282\u5281\u5290\u5293\u5182\u7F54\u4EBB\u4EC3\u4EC9\u4EC2\u4EE8\u4EE1\u4EEB\u4EDE\u4F1B\u4EF3\u4F22\u4F64\u4EF5\u4F25\u4F27\u4F09\u4F2B\u4F5E\u4F67\u6538\u4F5A\u4F5D"],
["d940", "\u8CAE", 62],
["d980", "\u8CED", 32, "\u4F5F\u4F57\u4F32\u4F3D\u4F76\u4F74\u4F91\u4F89\u4F83\u4F8F\u4F7E\u4F7B\u4FAA\u4F7C\u4FAC\u4F94\u4FE6\u4FE8\u4FEA\u4FC5\u4FDA\u4FE3\u4FDC\u4FD1\u4FDF\u4FF8\u5029\u504C\u4FF3\u502C\u500F\u502E\u502D\u4FFE\u501C\u500C\u5025\u5028\u507E\u5043\u5055\u5048\u504E\u506C\u507B\u50A5\u50A7\u50A9\u50BA\u50D6\u5106\u50ED\u50EC\u50E6\u50EE\u5107\u510B\u4EDD\u6C3D\u4F58\u4F65\u4FCE\u9FA0\u6C46\u7C74\u516E\u5DFD\u9EC9\u9998\u5181\u5914\u52F9\u530D\u8A07\u5310\u51EB\u5919\u5155\u4EA0\u5156\u4EB3\u886E\u88A4\u4EB5\u8114\u88D2\u7980\u5B34\u8803\u7FB8\u51AB\u51B1\u51BD\u51BC"],
["da40", "\u8D0E", 14, "\u8D20\u8D51\u8D52\u8D57\u8D5F\u8D65\u8D68\u8D69\u8D6A\u8D6C\u8D6E\u8D6F\u8D71\u8D72\u8D78", 8, "\u8D82\u8D83\u8D86\u8D87\u8D88\u8D89\u8D8C", 4, "\u8D92\u8D93\u8D95", 9, "\u8DA0\u8DA1"],
["da80", "\u8DA2\u8DA4", 12, "\u8DB2\u8DB6\u8DB7\u8DB9\u8DBB\u8DBD\u8DC0\u8DC1\u8DC2\u8DC5\u8DC7\u8DC8\u8DC9\u8DCA\u8DCD\u8DD0\u8DD2\u8DD3\u8DD4\u51C7\u5196\u51A2\u51A5\u8BA0\u8BA6\u8BA7\u8BAA\u8BB4\u8BB5\u8BB7\u8BC2\u8BC3\u8BCB\u8BCF\u8BCE\u8BD2\u8BD3\u8BD4\u8BD6\u8BD8\u8BD9\u8BDC\u8BDF\u8BE0\u8BE4\u8BE8\u8BE9\u8BEE\u8BF0\u8BF3\u8BF6\u8BF9\u8BFC\u8BFF\u8C00\u8C02\u8C04\u8C07\u8C0C\u8C0F\u8C11\u8C12\u8C14\u8C15\u8C16\u8C19\u8C1B\u8C18\u8C1D\u8C1F\u8C20\u8C21\u8C25\u8C27\u8C2A\u8C2B\u8C2E\u8C2F\u8C32\u8C33\u8C35\u8C36\u5369\u537A\u961D\u9622\u9621\u9631\u962A\u963D\u963C\u9642\u9649\u9654\u965F\u9667\u966C\u9672\u9674\u9688\u968D\u9697\u96B0\u9097\u909B\u909D\u9099\u90AC\u90A1\u90B4\u90B3\u90B6\u90BA"],
["db40", "\u8DD5\u8DD8\u8DD9\u8DDC\u8DE0\u8DE1\u8DE2\u8DE5\u8DE6\u8DE7\u8DE9\u8DED\u8DEE\u8DF0\u8DF1\u8DF2\u8DF4\u8DF6\u8DFC\u8DFE", 6, "\u8E06\u8E07\u8E08\u8E0B\u8E0D\u8E0E\u8E10\u8E11\u8E12\u8E13\u8E15", 7, "\u8E20\u8E21\u8E24", 4, "\u8E2B\u8E2D\u8E30\u8E32\u8E33\u8E34\u8E36\u8E37\u8E38\u8E3B\u8E3C\u8E3E"],
["db80", "\u8E3F\u8E43\u8E45\u8E46\u8E4C", 4, "\u8E53", 5, "\u8E5A", 11, "\u8E67\u8E68\u8E6A\u8E6B\u8E6E\u8E71\u90B8\u90B0\u90CF\u90C5\u90BE\u90D0\u90C4\u90C7\u90D3\u90E6\u90E2\u90DC\u90D7\u90DB\u90EB\u90EF\u90FE\u9104\u9122\u911E\u9123\u9131\u912F\u9139\u9143\u9146\u520D\u5942\u52A2\u52AC\u52AD\u52BE\u54FF\u52D0\u52D6\u52F0\u53DF\u71EE\u77CD\u5EF4\u51F5\u51FC\u9B2F\u53B6\u5F01\u755A\u5DEF\u574C\u57A9\u57A1\u587E\u58BC\u58C5\u58D1\u5729\u572C\u572A\u5733\u5739\u572E\u572F\u575C\u573B\u5742\u5769\u5785\u576B\u5786\u577C\u577B\u5768\u576D\u5776\u5773\u57AD\u57A4\u578C\u57B2\u57CF\u57A7\u57B4\u5793\u57A0\u57D5\u57D8\u57DA\u57D9\u57D2\u57B8\u57F4\u57EF\u57F8\u57E4\u57DD"],
["dc40", "\u8E73\u8E75\u8E77", 4, "\u8E7D\u8E7E\u8E80\u8E82\u8E83\u8E84\u8E86\u8E88", 6, "\u8E91\u8E92\u8E93\u8E95", 6, "\u8E9D\u8E9F", 11, "\u8EAD\u8EAE\u8EB0\u8EB1\u8EB3", 6, "\u8EBB", 7],
["dc80", "\u8EC3", 10, "\u8ECF", 21, "\u580B\u580D\u57FD\u57ED\u5800\u581E\u5819\u5844\u5820\u5865\u586C\u5881\u5889\u589A\u5880\u99A8\u9F19\u61FF\u8279\u827D\u827F\u828F\u828A\u82A8\u8284\u828E\u8291\u8297\u8299\u82AB\u82B8\u82BE\u82B0\u82C8\u82CA\u82E3\u8298\u82B7\u82AE\u82CB\u82CC\u82C1\u82A9\u82B4\u82A1\u82AA\u829F\u82C4\u82CE\u82A4\u82E1\u8309\u82F7\u82E4\u830F\u8307\u82DC\u82F4\u82D2\u82D8\u830C\u82FB\u82D3\u8311\u831A\u8306\u8314\u8315\u82E0\u82D5\u831C\u8351\u835B\u835C\u8308\u8392\u833C\u8334\u8331\u839B\u835E\u832F\u834F\u8347\u8343\u835F\u8340\u8317\u8360\u832D\u833A\u8333\u8366\u8365"],
["dd40", "\u8EE5", 62],
["dd80", "\u8F24", 32, "\u8368\u831B\u8369\u836C\u836A\u836D\u836E\u83B0\u8378\u83B3\u83B4\u83A0\u83AA\u8393\u839C\u8385\u837C\u83B6\u83A9\u837D\u83B8\u837B\u8398\u839E\u83A8\u83BA\u83BC\u83C1\u8401\u83E5\u83D8\u5807\u8418\u840B\u83DD\u83FD\u83D6\u841C\u8438\u8411\u8406\u83D4\u83DF\u840F\u8403\u83F8\u83F9\u83EA\u83C5\u83C0\u8426\u83F0\u83E1\u845C\u8451\u845A\u8459\u8473\u8487\u8488\u847A\u8489\u8478\u843C\u8446\u8469\u8476\u848C\u848E\u8431\u846D\u84C1\u84CD\u84D0\u84E6\u84BD\u84D3\u84CA\u84BF\u84BA\u84E0\u84A1\u84B9\u84B4\u8497\u84E5\u84E3\u850C\u750D\u8538\u84F0\u8539\u851F\u853A"],
["de40", "\u8F45", 32, "\u8F6A\u8F80\u8F8C\u8F92\u8F9D\u8FA0\u8FA1\u8FA2\u8FA4\u8FA5\u8FA6\u8FA7\u8FAA\u8FAC\u8FAD\u8FAE\u8FAF\u8FB2\u8FB3\u8FB4\u8FB5\u8FB7\u8FB8\u8FBA\u8FBB\u8FBC\u8FBF\u8FC0\u8FC3\u8FC6"],
["de80", "\u8FC9", 4, "\u8FCF\u8FD2\u8FD6\u8FD7\u8FDA\u8FE0\u8FE1\u8FE3\u8FE7\u8FEC\u8FEF\u8FF1\u8FF2\u8FF4\u8FF5\u8FF6\u8FFA\u8FFB\u8FFC\u8FFE\u8FFF\u9007\u9008\u900C\u900E\u9013\u9015\u9018\u8556\u853B\u84FF\u84FC\u8559\u8548\u8568\u8564\u855E\u857A\u77A2\u8543\u8572\u857B\u85A4\u85A8\u8587\u858F\u8579\u85AE\u859C\u8585\u85B9\u85B7\u85B0\u85D3\u85C1\u85DC\u85FF\u8627\u8605\u8629\u8616\u863C\u5EFE\u5F08\u593C\u5941\u8037\u5955\u595A\u5958\u530F\u5C22\u5C25\u5C2C\u5C34\u624C\u626A\u629F\u62BB\u62CA\u62DA\u62D7\u62EE\u6322\u62F6\u6339\u634B\u6343\u63AD\u63F6\u6371\u637A\u638E\u63B4\u636D\u63AC\u638A\u6369\u63AE\u63BC\u63F2\u63F8\u63E0\u63FF\u63C4\u63DE\u63CE\u6452\u63C6\u63BE\u6445\u6441\u640B\u641B\u6420\u640C\u6426\u6421\u645E\u6484\u646D\u6496"],
["df40", "\u9019\u901C\u9023\u9024\u9025\u9027", 5, "\u9030", 4, "\u9037\u9039\u903A\u903D\u903F\u9040\u9043\u9045\u9046\u9048", 4, "\u904E\u9054\u9055\u9056\u9059\u905A\u905C", 5, "\u9064\u9066\u9067\u9069\u906A\u906B\u906C\u906F", 4, "\u9076", 6, "\u907E\u9081"],
["df80", "\u9084\u9085\u9086\u9087\u9089\u908A\u908C", 4, "\u9092\u9094\u9096\u9098\u909A\u909C\u909E\u909F\u90A0\u90A4\u90A5\u90A7\u90A8\u90A9\u90AB\u90AD\u90B2\u90B7\u90BC\u90BD\u90BF\u90C0\u647A\u64B7\u64B8\u6499\u64BA\u64C0\u64D0\u64D7\u64E4\u64E2\u6509\u6525\u652E\u5F0B\u5FD2\u7519\u5F11\u535F\u53F1\u53FD\u53E9\u53E8\u53FB\u5412\u5416\u5406\u544B\u5452\u5453\u5454\u5456\u5443\u5421\u5457\u5459\u5423\u5432\u5482\u5494\u5477\u5471\u5464\u549A\u549B\u5484\u5476\u5466\u549D\u54D0\u54AD\u54C2\u54B4\u54D2\u54A7\u54A6\u54D3\u54D4\u5472\u54A3\u54D5\u54BB\u54BF\u54CC\u54D9\u54DA\u54DC\u54A9\u54AA\u54A4\u54DD\u54CF\u54DE\u551B\u54E7\u5520\u54FD\u5514\u54F3\u5522\u5523\u550F\u5511\u5527\u552A\u5567\u558F\u55B5\u5549\u556D\u5541\u5555\u553F\u5550\u553C"],
["e040", "\u90C2\u90C3\u90C6\u90C8\u90C9\u90CB\u90CC\u90CD\u90D2\u90D4\u90D5\u90D6\u90D8\u90D9\u90DA\u90DE\u90DF\u90E0\u90E3\u90E4\u90E5\u90E9\u90EA\u90EC\u90EE\u90F0\u90F1\u90F2\u90F3\u90F5\u90F6\u90F7\u90F9\u90FA\u90FB\u90FC\u90FF\u9100\u9101\u9103\u9105", 19, "\u911A\u911B\u911C"],
["e080", "\u911D\u911F\u9120\u9121\u9124", 10, "\u9130\u9132", 6, "\u913A", 8, "\u9144\u5537\u5556\u5575\u5576\u5577\u5533\u5530\u555C\u558B\u55D2\u5583\u55B1\u55B9\u5588\u5581\u559F\u557E\u55D6\u5591\u557B\u55DF\u55BD\u55BE\u5594\u5599\u55EA\u55F7\u55C9\u561F\u55D1\u55EB\u55EC\u55D4\u55E6\u55DD\u55C4\u55EF\u55E5\u55F2\u55F3\u55CC\u55CD\u55E8\u55F5\u55E4\u8F94\u561E\u5608\u560C\u5601\u5624\u5623\u55FE\u5600\u5627\u562D\u5658\u5639\u5657\u562C\u564D\u5662\u5659\u565C\u564C\u5654\u5686\u5664\u5671\u566B\u567B\u567C\u5685\u5693\u56AF\u56D4\u56D7\u56DD\u56E1\u56F5\u56EB\u56F9\u56FF\u5704\u570A\u5709\u571C\u5E0F\u5E19\u5E14\u5E11\u5E31\u5E3B\u5E3C"],
["e140", "\u9145\u9147\u9148\u9151\u9153\u9154\u9155\u9156\u9158\u9159\u915B\u915C\u915F\u9160\u9166\u9167\u9168\u916B\u916D\u9173\u917A\u917B\u917C\u9180", 4, "\u9186\u9188\u918A\u918E\u918F\u9193", 6, "\u919C", 5, "\u91A4", 5, "\u91AB\u91AC\u91B0\u91B1\u91B2\u91B3\u91B6\u91B7\u91B8\u91B9\u91BB"],
["e180", "\u91BC", 10, "\u91C8\u91CB\u91D0\u91D2", 9, "\u91DD", 8, "\u5E37\u5E44\u5E54\u5E5B\u5E5E\u5E61\u5C8C\u5C7A\u5C8D\u5C90\u5C96\u5C88\u5C98\u5C99\u5C91\u5C9A\u5C9C\u5CB5\u5CA2\u5CBD\u5CAC\u5CAB\u5CB1\u5CA3\u5CC1\u5CB7\u5CC4\u5CD2\u5CE4\u5CCB\u5CE5\u5D02\u5D03\u5D27\u5D26\u5D2E\u5D24\u5D1E\u5D06\u5D1B\u5D58\u5D3E\u5D34\u5D3D\u5D6C\u5D5B\u5D6F\u5D5D\u5D6B\u5D4B\u5D4A\u5D69\u5D74\u5D82\u5D99\u5D9D\u8C73\u5DB7\u5DC5\u5F73\u5F77\u5F82\u5F87\u5F89\u5F8C\u5F95\u5F99\u5F9C\u5FA8\u5FAD\u5FB5\u5FBC\u8862\u5F61\u72AD\u72B0\u72B4\u72B7\u72B8\u72C3\u72C1\u72CE\u72CD\u72D2\u72E8\u72EF\u72E9\u72F2\u72F4\u72F7\u7301\u72F3\u7303\u72FA"],
["e240", "\u91E6", 62],
["e280", "\u9225", 32, "\u72FB\u7317\u7313\u7321\u730A\u731E\u731D\u7315\u7322\u7339\u7325\u732C\u7338\u7331\u7350\u734D\u7357\u7360\u736C\u736F\u737E\u821B\u5925\u98E7\u5924\u5902\u9963\u9967", 5, "\u9974\u9977\u997D\u9980\u9984\u9987\u998A\u998D\u9990\u9991\u9993\u9994\u9995\u5E80\u5E91\u5E8B\u5E96\u5EA5\u5EA0\u5EB9\u5EB5\u5EBE\u5EB3\u8D53\u5ED2\u5ED1\u5EDB\u5EE8\u5EEA\u81BA\u5FC4\u5FC9\u5FD6\u5FCF\u6003\u5FEE\u6004\u5FE1\u5FE4\u5FFE\u6005\u6006\u5FEA\u5FED\u5FF8\u6019\u6035\u6026\u601B\u600F\u600D\u6029\u602B\u600A\u603F\u6021\u6078\u6079\u607B\u607A\u6042"],
["e340", "\u9246", 45, "\u9275", 16],
["e380", "\u9286", 7, "\u928F", 24, "\u606A\u607D\u6096\u609A\u60AD\u609D\u6083\u6092\u608C\u609B\u60EC\u60BB\u60B1\u60DD\u60D8\u60C6\u60DA\u60B4\u6120\u6126\u6115\u6123\u60F4\u6100\u610E\u612B\u614A\u6175\u61AC\u6194\u61A7\u61B7\u61D4\u61F5\u5FDD\u96B3\u95E9\u95EB\u95F1\u95F3\u95F5\u95F6\u95FC\u95FE\u9603\u9604\u9606\u9608\u960A\u960B\u960C\u960D\u960F\u9612\u9615\u9616\u9617\u9619\u961A\u4E2C\u723F\u6215\u6C35\u6C54\u6C5C\u6C4A\u6CA3\u6C85\u6C90\u6C94\u6C8C\u6C68\u6C69\u6C74\u6C76\u6C86\u6CA9\u6CD0\u6CD4\u6CAD\u6CF7\u6CF8\u6CF1\u6CD7\u6CB2\u6CE0\u6CD6\u6CFA\u6CEB\u6CEE\u6CB1\u6CD3\u6CEF\u6CFE"],
["e440", "\u92A8", 5, "\u92AF", 24, "\u92C9", 31],
["e480", "\u92E9", 32, "\u6D39\u6D27\u6D0C\u6D43\u6D48\u6D07\u6D04\u6D19\u6D0E\u6D2B\u6D4D\u6D2E\u6D35\u6D1A\u6D4F\u6D52\u6D54\u6D33\u6D91\u6D6F\u6D9E\u6DA0\u6D5E\u6D93\u6D94\u6D5C\u6D60\u6D7C\u6D63\u6E1A\u6DC7\u6DC5\u6DDE\u6E0E\u6DBF\u6DE0\u6E11\u6DE6\u6DDD\u6DD9\u6E16\u6DAB\u6E0C\u6DAE\u6E2B\u6E6E\u6E4E\u6E6B\u6EB2\u6E5F\u6E86\u6E53\u6E54\u6E32\u6E25\u6E44\u6EDF\u6EB1\u6E98\u6EE0\u6F2D\u6EE2\u6EA5\u6EA7\u6EBD\u6EBB\u6EB7\u6ED7\u6EB4\u6ECF\u6E8F\u6EC2\u6E9F\u6F62\u6F46\u6F47\u6F24\u6F15\u6EF9\u6F2F\u6F36\u6F4B\u6F74\u6F2A\u6F09\u6F29\u6F89\u6F8D\u6F8C\u6F78\u6F72\u6F7C\u6F7A\u6FD1"],
["e540", "\u930A", 51, "\u933F", 10],
["e580", "\u934A", 31, "\u936B\u6FC9\u6FA7\u6FB9\u6FB6\u6FC2\u6FE1\u6FEE\u6FDE\u6FE0\u6FEF\u701A\u7023\u701B\u7039\u7035\u704F\u705E\u5B80\u5B84\u5B95\u5B93\u5BA5\u5BB8\u752F\u9A9E\u6434\u5BE4\u5BEE\u8930\u5BF0\u8E47\u8B07\u8FB6\u8FD3\u8FD5\u8FE5\u8FEE\u8FE4\u8FE9\u8FE6\u8FF3\u8FE8\u9005\u9004\u900B\u9026\u9011\u900D\u9016\u9021\u9035\u9036\u902D\u902F\u9044\u9051\u9052\u9050\u9068\u9058\u9062\u905B\u66B9\u9074\u907D\u9082\u9088\u9083\u908B\u5F50\u5F57\u5F56\u5F58\u5C3B\u54AB\u5C50\u5C59\u5B71\u5C63\u5C66\u7FBC\u5F2A\u5F29\u5F2D\u8274\u5F3C\u9B3B\u5C6E\u5981\u5983\u598D\u59A9\u59AA\u59A3"],
["e640", "\u936C", 34, "\u9390", 27],
["e680", "\u93AC", 29, "\u93CB\u93CC\u93CD\u5997\u59CA\u59AB\u599E\u59A4\u59D2\u59B2\u59AF\u59D7\u59BE\u5A05\u5A06\u59DD\u5A08\u59E3\u59D8\u59F9\u5A0C\u5A09\u5A32\u5A34\u5A11\u5A23\u5A13\u5A40\u5A67\u5A4A\u5A55\u5A3C\u5A62\u5A75\u80EC\u5AAA\u5A9B\u5A77\u5A7A\u5ABE\u5AEB\u5AB2\u5AD2\u5AD4\u5AB8\u5AE0\u5AE3\u5AF1\u5AD6\u5AE6\u5AD8\u5ADC\u5B09\u5B17\u5B16\u5B32\u5B37\u5B40\u5C15\u5C1C\u5B5A\u5B65\u5B73\u5B51\u5B53\u5B62\u9A75\u9A77\u9A78\u9A7A\u9A7F\u9A7D\u9A80\u9A81\u9A85\u9A88\u9A8A\u9A90\u9A92\u9A93\u9A96\u9A98\u9A9B\u9A9C\u9A9D\u9A9F\u9AA0\u9AA2\u9AA3\u9AA5\u9AA7\u7E9F\u7EA1\u7EA3\u7EA5\u7EA8\u7EA9"],
["e740", "\u93CE", 7, "\u93D7", 54],
["e780", "\u940E", 32, "\u7EAD\u7EB0\u7EBE\u7EC0\u7EC1\u7EC2\u7EC9\u7ECB\u7ECC\u7ED0\u7ED4\u7ED7\u7EDB\u7EE0\u7EE1\u7EE8\u7EEB\u7EEE\u7EEF\u7EF1\u7EF2\u7F0D\u7EF6\u7EFA\u7EFB\u7EFE\u7F01\u7F02\u7F03\u7F07\u7F08\u7F0B\u7F0C\u7F0F\u7F11\u7F12\u7F17\u7F19\u7F1C\u7F1B\u7F1F\u7F21", 6, "\u7F2A\u7F2B\u7F2C\u7F2D\u7F2F", 4, "\u7F35\u5E7A\u757F\u5DDB\u753E\u9095\u738E\u7391\u73AE\u73A2\u739F\u73CF\u73C2\u73D1\u73B7\u73B3\u73C0\u73C9\u73C8\u73E5\u73D9\u987C\u740A\u73E9\u73E7\u73DE\u73BA\u73F2\u740F\u742A\u745B\u7426\u7425\u7428\u7430\u742E\u742C"],
["e840", "\u942F", 14, "\u943F", 43, "\u946C\u946D\u946E\u946F"],
["e880", "\u9470", 20, "\u9491\u9496\u9498\u94C7\u94CF\u94D3\u94D4\u94DA\u94E6\u94FB\u951C\u9520\u741B\u741A\u7441\u745C\u7457\u7455\u7459\u7477\u746D\u747E\u749C\u748E\u7480\u7481\u7487\u748B\u749E\u74A8\u74A9\u7490\u74A7\u74D2\u74BA\u97EA\u97EB\u97EC\u674C\u6753\u675E\u6748\u6769\u67A5\u6787\u676A\u6773\u6798\u67A7\u6775\u67A8\u679E\u67AD\u678B\u6777\u677C\u67F0\u6809\u67D8\u680A\u67E9\u67B0\u680C\u67D9\u67B5\u67DA\u67B3\u67DD\u6800\u67C3\u67B8\u67E2\u680E\u67C1\u67FD\u6832\u6833\u6860\u6861\u684E\u6862\u6844\u6864\u6883\u681D\u6855\u6866\u6841\u6867\u6840\u683E\u684A\u6849\u6829\u68B5\u688F\u6874\u6877\u6893\u686B\u68C2\u696E\u68FC\u691F\u6920\u68F9"],
["e940", "\u9527\u9533\u953D\u9543\u9548\u954B\u9555\u955A\u9560\u956E\u9574\u9575\u9577", 7, "\u9580", 42],
["e980", "\u95AB", 32, "\u6924\u68F0\u690B\u6901\u6957\u68E3\u6910\u6971\u6939\u6960\u6942\u695D\u6984\u696B\u6980\u6998\u6978\u6934\u69CC\u6987\u6988\u69CE\u6989\u6966\u6963\u6979\u699B\u69A7\u69BB\u69AB\u69AD\u69D4\u69B1\u69C1\u69CA\u69DF\u6995\u69E0\u698D\u69FF\u6A2F\u69ED\u6A17\u6A18\u6A65\u69F2\u6A44\u6A3E\u6AA0\u6A50\u6A5B\u6A35\u6A8E\u6A79\u6A3D\u6A28\u6A58\u6A7C\u6A91\u6A90\u6AA9\u6A97\u6AAB\u7337\u7352\u6B81\u6B82\u6B87\u6B84\u6B92\u6B93\u6B8D\u6B9A\u6B9B\u6BA1\u6BAA\u8F6B\u8F6D\u8F71\u8F72\u8F73\u8F75\u8F76\u8F78\u8F77\u8F79\u8F7A\u8F7C\u8F7E\u8F81\u8F82\u8F84\u8F87\u8F8B"],
["ea40", "\u95CC", 27, "\u95EC\u95FF\u9607\u9613\u9618\u961B\u961E\u9620\u9623", 6, "\u962B\u962C\u962D\u962F\u9630\u9637\u9638\u9639\u963A\u963E\u9641\u9643\u964A\u964E\u964F\u9651\u9652\u9653\u9656\u9657"],
["ea80", "\u9658\u9659\u965A\u965C\u965D\u965E\u9660\u9663\u9665\u9666\u966B\u966D", 4, "\u9673\u9678", 12, "\u9687\u9689\u968A\u8F8D\u8F8E\u8F8F\u8F98\u8F9A\u8ECE\u620B\u6217\u621B\u621F\u6222\u6221\u6225\u6224\u622C\u81E7\u74EF\u74F4\u74FF\u750F\u7511\u7513\u6534\u65EE\u65EF\u65F0\u660A\u6619\u6772\u6603\u6615\u6600\u7085\u66F7\u661D\u6634\u6631\u6636\u6635\u8006\u665F\u6654\u6641\u664F\u6656\u6661\u6657\u6677\u6684\u668C\u66A7\u669D\u66BE\u66DB\u66DC\u66E6\u66E9\u8D32\u8D33\u8D36\u8D3B\u8D3D\u8D40\u8D45\u8D46\u8D48\u8D49\u8D47\u8D4D\u8D55\u8D59\u89C7\u89CA\u89CB\u89CC\u89CE\u89CF\u89D0\u89D1\u726E\u729F\u725D\u7266\u726F\u727E\u727F\u7284\u728B\u728D\u728F\u7292\u6308\u6332\u63B0"],
["eb40", "\u968C\u968E\u9691\u9692\u9693\u9695\u9696\u969A\u969B\u969D", 9, "\u96A8", 7, "\u96B1\u96B2\u96B4\u96B5\u96B7\u96B8\u96BA\u96BB\u96BF\u96C2\u96C3\u96C8\u96CA\u96CB\u96D0\u96D1\u96D3\u96D4\u96D6", 9, "\u96E1", 6, "\u96EB"],
["eb80", "\u96EC\u96ED\u96EE\u96F0\u96F1\u96F2\u96F4\u96F5\u96F8\u96FA\u96FB\u96FC\u96FD\u96FF\u9702\u9703\u9705\u970A\u970B\u970C\u9710\u9711\u9712\u9714\u9715\u9717", 4, "\u971D\u971F\u9720\u643F\u64D8\u8004\u6BEA\u6BF3\u6BFD\u6BF5\u6BF9\u6C05\u6C07\u6C06\u6C0D\u6C15\u6C18\u6C19\u6C1A\u6C21\u6C29\u6C24\u6C2A\u6C32\u6535\u6555\u656B\u724D\u7252\u7256\u7230\u8662\u5216\u809F\u809C\u8093\u80BC\u670A\u80BD\u80B1\u80AB\u80AD\u80B4\u80B7\u80E7\u80E8\u80E9\u80EA\u80DB\u80C2\u80C4\u80D9\u80CD\u80D7\u6710\u80DD\u80EB\u80F1\u80F4\u80ED\u810D\u810E\u80F2\u80FC\u6715\u8112\u8C5A\u8136\u811E\u812C\u8118\u8132\u8148\u814C\u8153\u8174\u8159\u815A\u8171\u8160\u8169\u817C\u817D\u816D\u8167\u584D\u5AB5\u8188\u8182\u8191\u6ED5\u81A3\u81AA\u81CC\u6726\u81CA\u81BB"],
["ec40", "\u9721", 8, "\u972B\u972C\u972E\u972F\u9731\u9733", 4, "\u973A\u973B\u973C\u973D\u973F", 18, "\u9754\u9755\u9757\u9758\u975A\u975C\u975D\u975F\u9763\u9764\u9766\u9767\u9768\u976A", 7],
["ec80", "\u9772\u9775\u9777", 4, "\u977D", 7, "\u9786", 4, "\u978C\u978E\u978F\u9790\u9793\u9795\u9796\u9797\u9799", 4, "\u81C1\u81A6\u6B24\u6B37\u6B39\u6B43\u6B46\u6B59\u98D1\u98D2\u98D3\u98D5\u98D9\u98DA\u6BB3\u5F40\u6BC2\u89F3\u6590\u9F51\u6593\u65BC\u65C6\u65C4\u65C3\u65CC\u65CE\u65D2\u65D6\u7080\u709C\u7096\u709D\u70BB\u70C0\u70B7\u70AB\u70B1\u70E8\u70CA\u7110\u7113\u7116\u712F\u7131\u7173\u715C\u7168\u7145\u7172\u714A\u7178\u717A\u7198\u71B3\u71B5\u71A8\u71A0\u71E0\u71D4\u71E7\u71F9\u721D\u7228\u706C\u7118\u7166\u71B9\u623E\u623D\u6243\u6248\u6249\u793B\u7940\u7946\u7949\u795B\u795C\u7953\u795A\u7962\u7957\u7960\u796F\u7967\u797A\u7985\u798A\u799A\u79A7\u79B3\u5FD1\u5FD0"],
["ed40", "\u979E\u979F\u97A1\u97A2\u97A4", 6, "\u97AC\u97AE\u97B0\u97B1\u97B3\u97B5", 46],
["ed80", "\u97E4\u97E5\u97E8\u97EE", 4, "\u97F4\u97F7", 23, "\u603C\u605D\u605A\u6067\u6041\u6059\u6063\u60AB\u6106\u610D\u615D\u61A9\u619D\u61CB\u61D1\u6206\u8080\u807F\u6C93\u6CF6\u6DFC\u77F6\u77F8\u7800\u7809\u7817\u7818\u7811\u65AB\u782D\u781C\u781D\u7839\u783A\u783B\u781F\u783C\u7825\u782C\u7823\u7829\u784E\u786D\u7856\u7857\u7826\u7850\u7847\u784C\u786A\u789B\u7893\u789A\u7887\u789C\u78A1\u78A3\u78B2\u78B9\u78A5\u78D4\u78D9\u78C9\u78EC\u78F2\u7905\u78F4\u7913\u7924\u791E\u7934\u9F9B\u9EF9\u9EFB\u9EFC\u76F1\u7704\u770D\u76F9\u7707\u7708\u771A\u7722\u7719\u772D\u7726\u7735\u7738\u7750\u7751\u7747\u7743\u775A\u7768"],
["ee40", "\u980F", 62],
["ee80", "\u984E", 32, "\u7762\u7765\u777F\u778D\u777D\u7780\u778C\u7791\u779F\u77A0\u77B0\u77B5\u77BD\u753A\u7540\u754E\u754B\u7548\u755B\u7572\u7579\u7583\u7F58\u7F61\u7F5F\u8A48\u7F68\u7F74\u7F71\u7F79\u7F81\u7F7E\u76CD\u76E5\u8832\u9485\u9486\u9487\u948B\u948A\u948C\u948D\u948F\u9490\u9494\u9497\u9495\u949A\u949B\u949C\u94A3\u94A4\u94AB\u94AA\u94AD\u94AC\u94AF\u94B0\u94B2\u94B4\u94B6", 4, "\u94BC\u94BD\u94BF\u94C4\u94C8", 6, "\u94D0\u94D1\u94D2\u94D5\u94D6\u94D7\u94D9\u94D8\u94DB\u94DE\u94DF\u94E0\u94E2\u94E4\u94E5\u94E7\u94E8\u94EA"],
["ef40", "\u986F", 5, "\u988B\u988E\u9892\u9895\u9899\u98A3\u98A8", 37, "\u98CF\u98D0\u98D4\u98D6\u98D7\u98DB\u98DC\u98DD\u98E0", 4],
["ef80", "\u98E5\u98E6\u98E9", 30, "\u94E9\u94EB\u94EE\u94EF\u94F3\u94F4\u94F5\u94F7\u94F9\u94FC\u94FD\u94FF\u9503\u9502\u9506\u9507\u9509\u950A\u950D\u950E\u950F\u9512", 4, "\u9518\u951B\u951D\u951E\u951F\u9522\u952A\u952B\u9529\u952C\u9531\u9532\u9534\u9536\u9537\u9538\u953C\u953E\u953F\u9542\u9535\u9544\u9545\u9546\u9549\u954C\u954E\u954F\u9552\u9553\u9554\u9556\u9557\u9558\u9559\u955B\u955E\u955F\u955D\u9561\u9562\u9564", 8, "\u956F\u9571\u9572\u9573\u953A\u77E7\u77EC\u96C9\u79D5\u79ED\u79E3\u79EB\u7A06\u5D47\u7A03\u7A02\u7A1E\u7A14"],
["f040", "\u9908", 4, "\u990E\u990F\u9911", 28, "\u992F", 26],
["f080", "\u994A", 9, "\u9956", 12, "\u9964\u9966\u9973\u9978\u9979\u997B\u997E\u9982\u9983\u9989\u7A39\u7A37\u7A51\u9ECF\u99A5\u7A70\u7688\u768E\u7693\u7699\u76A4\u74DE\u74E0\u752C\u9E20\u9E22\u9E28", 4, "\u9E32\u9E31\u9E36\u9E38\u9E37\u9E39\u9E3A\u9E3E\u9E41\u9E42\u9E44\u9E46\u9E47\u9E48\u9E49\u9E4B\u9E4C\u9E4E\u9E51\u9E55\u9E57\u9E5A\u9E5B\u9E5C\u9E5E\u9E63\u9E66", 6, "\u9E71\u9E6D\u9E73\u7592\u7594\u7596\u75A0\u759D\u75AC\u75A3\u75B3\u75B4\u75B8\u75C4\u75B1\u75B0\u75C3\u75C2\u75D6\u75CD\u75E3\u75E8\u75E6\u75E4\u75EB\u75E7\u7603\u75F1\u75FC\u75FF\u7610\u7600\u7605\u760C\u7617\u760A\u7625\u7618\u7615\u7619"],
["f140", "\u998C\u998E\u999A", 10, "\u99A6\u99A7\u99A9", 47],
["f180", "\u99D9", 32, "\u761B\u763C\u7622\u7620\u7640\u762D\u7630\u763F\u7635\u7643\u763E\u7633\u764D\u765E\u7654\u765C\u7656\u766B\u766F\u7FCA\u7AE6\u7A78\u7A79\u7A80\u7A86\u7A88\u7A95\u7AA6\u7AA0\u7AAC\u7AA8\u7AAD\u7AB3\u8864\u8869\u8872\u887D\u887F\u8882\u88A2\u88C6\u88B7\u88BC\u88C9\u88E2\u88CE\u88E3\u88E5\u88F1\u891A\u88FC\u88E8\u88FE\u88F0\u8921\u8919\u8913\u891B\u890A\u8934\u892B\u8936\u8941\u8966\u897B\u758B\u80E5\u76B2\u76B4\u77DC\u8012\u8014\u8016\u801C\u8020\u8022\u8025\u8026\u8027\u8029\u8028\u8031\u800B\u8035\u8043\u8046\u804D\u8052\u8069\u8071\u8983\u9878\u9880\u9883"],
["f240", "\u99FA", 62],
["f280", "\u9A39", 32, "\u9889\u988C\u988D\u988F\u9894\u989A\u989B\u989E\u989F\u98A1\u98A2\u98A5\u98A6\u864D\u8654\u866C\u866E\u867F\u867A\u867C\u867B\u86A8\u868D\u868B\u86AC\u869D\u86A7\u86A3\u86AA\u8693\u86A9\u86B6\u86C4\u86B5\u86CE\u86B0\u86BA\u86B1\u86AF\u86C9\u86CF\u86B4\u86E9\u86F1\u86F2\u86ED\u86F3\u86D0\u8713\u86DE\u86F4\u86DF\u86D8\u86D1\u8703\u8707\u86F8\u8708\u870A\u870D\u8709\u8723\u873B\u871E\u8725\u872E\u871A\u873E\u8748\u8734\u8731\u8729\u8737\u873F\u8782\u8722\u877D\u877E\u877B\u8760\u8770\u874C\u876E\u878B\u8753\u8763\u877C\u8764\u8759\u8765\u8793\u87AF\u87A8\u87D2"],
["f340", "\u9A5A", 17, "\u9A72\u9A83\u9A89\u9A8D\u9A8E\u9A94\u9A95\u9A99\u9AA6\u9AA9", 6, "\u9AB2\u9AB3\u9AB4\u9AB5\u9AB9\u9ABB\u9ABD\u9ABE\u9ABF\u9AC3\u9AC4\u9AC6", 4, "\u9ACD\u9ACE\u9ACF\u9AD0\u9AD2\u9AD4\u9AD5\u9AD6\u9AD7\u9AD9\u9ADA\u9ADB\u9ADC"],
["f380", "\u9ADD\u9ADE\u9AE0\u9AE2\u9AE3\u9AE4\u9AE5\u9AE7\u9AE8\u9AE9\u9AEA\u9AEC\u9AEE\u9AF0", 8, "\u9AFA\u9AFC", 6, "\u9B04\u9B05\u9B06\u87C6\u8788\u8785\u87AD\u8797\u8783\u87AB\u87E5\u87AC\u87B5\u87B3\u87CB\u87D3\u87BD\u87D1\u87C0\u87CA\u87DB\u87EA\u87E0\u87EE\u8816\u8813\u87FE\u880A\u881B\u8821\u8839\u883C\u7F36\u7F42\u7F44\u7F45\u8210\u7AFA\u7AFD\u7B08\u7B03\u7B04\u7B15\u7B0A\u7B2B\u7B0F\u7B47\u7B38\u7B2A\u7B19\u7B2E\u7B31\u7B20\u7B25\u7B24\u7B33\u7B3E\u7B1E\u7B58\u7B5A\u7B45\u7B75\u7B4C\u7B5D\u7B60\u7B6E\u7B7B\u7B62\u7B72\u7B71\u7B90\u7BA6\u7BA7\u7BB8\u7BAC\u7B9D\u7BA8\u7B85\u7BAA\u7B9C\u7BA2\u7BAB\u7BB4\u7BD1\u7BC1\u7BCC\u7BDD\u7BDA\u7BE5\u7BE6\u7BEA\u7C0C\u7BFE\u7BFC\u7C0F\u7C16\u7C0B"],
["f440", "\u9B07\u9B09", 5, "\u9B10\u9B11\u9B12\u9B14", 10, "\u9B20\u9B21\u9B22\u9B24", 10, "\u9B30\u9B31\u9B33", 7, "\u9B3D\u9B3E\u9B3F\u9B40\u9B46\u9B4A\u9B4B\u9B4C\u9B4E\u9B50\u9B52\u9B53\u9B55", 5],
["f480", "\u9B5B", 32, "\u7C1F\u7C2A\u7C26\u7C38\u7C41\u7C40\u81FE\u8201\u8202\u8204\u81EC\u8844\u8221\u8222\u8223\u822D\u822F\u8228\u822B\u8238\u823B\u8233\u8234\u823E\u8244\u8249\u824B\u824F\u825A\u825F\u8268\u887E\u8885\u8888\u88D8\u88DF\u895E\u7F9D\u7F9F\u7FA7\u7FAF\u7FB0\u7FB2\u7C7C\u6549\u7C91\u7C9D\u7C9C\u7C9E\u7CA2\u7CB2\u7CBC\u7CBD\u7CC1\u7CC7\u7CCC\u7CCD\u7CC8\u7CC5\u7CD7\u7CE8\u826E\u66A8\u7FBF\u7FCE\u7FD5\u7FE5\u7FE1\u7FE6\u7FE9\u7FEE\u7FF3\u7CF8\u7D77\u7DA6\u7DAE\u7E47\u7E9B\u9EB8\u9EB4\u8D73\u8D84\u8D94\u8D91\u8DB1\u8D67\u8D6D\u8C47\u8C49\u914A\u9150\u914E\u914F\u9164"],
["f540", "\u9B7C", 62],
["f580", "\u9BBB", 32, "\u9162\u9161\u9170\u9169\u916F\u917D\u917E\u9172\u9174\u9179\u918C\u9185\u9190\u918D\u9191\u91A2\u91A3\u91AA\u91AD\u91AE\u91AF\u91B5\u91B4\u91BA\u8C55\u9E7E\u8DB8\u8DEB\u8E05\u8E59\u8E69\u8DB5\u8DBF\u8DBC\u8DBA\u8DC4\u8DD6\u8DD7\u8DDA\u8DDE\u8DCE\u8DCF\u8DDB\u8DC6\u8DEC\u8DF7\u8DF8\u8DE3\u8DF9\u8DFB\u8DE4\u8E09\u8DFD\u8E14\u8E1D\u8E1F\u8E2C\u8E2E\u8E23\u8E2F\u8E3A\u8E40\u8E39\u8E35\u8E3D\u8E31\u8E49\u8E41\u8E42\u8E51\u8E52\u8E4A\u8E70\u8E76\u8E7C\u8E6F\u8E74\u8E85\u8E8F\u8E94\u8E90\u8E9C\u8E9E\u8C78\u8C82\u8C8A\u8C85\u8C98\u8C94\u659B\u89D6\u89DE\u89DA\u89DC"],
["f640", "\u9BDC", 62],
["f680", "\u9C1B", 32, "\u89E5\u89EB\u89EF\u8A3E\u8B26\u9753\u96E9\u96F3\u96EF\u9706\u9701\u9708\u970F\u970E\u972A\u972D\u9730\u973E\u9F80\u9F83\u9F85", 5, "\u9F8C\u9EFE\u9F0B\u9F0D\u96B9\u96BC\u96BD\u96CE\u96D2\u77BF\u96E0\u928E\u92AE\u92C8\u933E\u936A\u93CA\u938F\u943E\u946B\u9C7F\u9C82\u9C85\u9C86\u9C87\u9C88\u7A23\u9C8B\u9C8E\u9C90\u9C91\u9C92\u9C94\u9C95\u9C9A\u9C9B\u9C9E", 5, "\u9CA5", 4, "\u9CAB\u9CAD\u9CAE\u9CB0", 7, "\u9CBA\u9CBB\u9CBC\u9CBD\u9CC4\u9CC5\u9CC6\u9CC7\u9CCA\u9CCB"],
["f740", "\u9C3C", 62],
["f780", "\u9C7B\u9C7D\u9C7E\u9C80\u9C83\u9C84\u9C89\u9C8A\u9C8C\u9C8F\u9C93\u9C96\u9C97\u9C98\u9C99\u9C9D\u9CAA\u9CAC\u9CAF\u9CB9\u9CBE", 4, "\u9CC8\u9CC9\u9CD1\u9CD2\u9CDA\u9CDB\u9CE0\u9CE1\u9CCC", 4, "\u9CD3\u9CD4\u9CD5\u9CD7\u9CD8\u9CD9\u9CDC\u9CDD\u9CDF\u9CE2\u977C\u9785\u9791\u9792\u9794\u97AF\u97AB\u97A3\u97B2\u97B4\u9AB1\u9AB0\u9AB7\u9E58\u9AB6\u9ABA\u9ABC\u9AC1\u9AC0\u9AC5\u9AC2\u9ACB\u9ACC\u9AD1\u9B45\u9B43\u9B47\u9B49\u9B48\u9B4D\u9B51\u98E8\u990D\u992E\u9955\u9954\u9ADF\u9AE1\u9AE6\u9AEF\u9AEB\u9AFB\u9AED\u9AF9\u9B08\u9B0F\u9B13\u9B1F\u9B23\u9EBD\u9EBE\u7E3B\u9E82\u9E87\u9E88\u9E8B\u9E92\u93D6\u9E9D\u9E9F\u9EDB\u9EDC\u9EDD\u9EE0\u9EDF\u9EE2\u9EE9\u9EE7\u9EE5\u9EEA\u9EEF\u9F22\u9F2C\u9F2F\u9F39\u9F37\u9F3D\u9F3E\u9F44"],
["f840", "\u9CE3", 62],
["f880", "\u9D22", 32],
["f940", "\u9D43", 62],
["f980", "\u9D82", 32],
["fa40", "\u9DA3", 62],
["fa80", "\u9DE2", 32],
["fb40", "\u9E03", 27, "\u9E24\u9E27\u9E2E\u9E30\u9E34\u9E3B\u9E3C\u9E40\u9E4D\u9E50\u9E52\u9E53\u9E54\u9E56\u9E59\u9E5D\u9E5F\u9E60\u9E61\u9E62\u9E65\u9E6E\u9E6F\u9E72\u9E74", 9, "\u9E80"],
["fb80", "\u9E81\u9E83\u9E84\u9E85\u9E86\u9E89\u9E8A\u9E8C", 5, "\u9E94", 8, "\u9E9E\u9EA0", 5, "\u9EA7\u9EA8\u9EA9\u9EAA"],
["fc40", "\u9EAB", 8, "\u9EB5\u9EB6\u9EB7\u9EB9\u9EBA\u9EBC\u9EBF", 4, "\u9EC5\u9EC6\u9EC7\u9EC8\u9ECA\u9ECB\u9ECC\u9ED0\u9ED2\u9ED3\u9ED5\u9ED6\u9ED7\u9ED9\u9EDA\u9EDE\u9EE1\u9EE3\u9EE4\u9EE6\u9EE8\u9EEB\u9EEC\u9EED\u9EEE\u9EF0", 8, "\u9EFA\u9EFD\u9EFF", 6],
["fc80", "\u9F06", 4, "\u9F0C\u9F0F\u9F11\u9F12\u9F14\u9F15\u9F16\u9F18\u9F1A", 5, "\u9F21\u9F23", 8, "\u9F2D\u9F2E\u9F30\u9F31"],
["fd40", "\u9F32", 4, "\u9F38\u9F3A\u9F3C\u9F3F", 4, "\u9F45", 10, "\u9F52", 38],
["fd80", "\u9F79", 5, "\u9F81\u9F82\u9F8D", 11, "\u9F9C\u9F9D\u9F9E\u9FA1", 4, "\uF92C\uF979\uF995\uF9E7\uF9F1"],
["fe40", "\uFA0C\uFA0D\uFA0E\uFA0F\uFA11\uFA13\uFA14\uFA18\uFA1F\uFA20\uFA21\uFA23\uFA24\uFA27\uFA28\uFA29"]
];
}
});
var require_gbk_added22 = __commonJS2({
"node_modules/body-parser/node_modules/iconv-lite/encodings/tables/gbk-added.json"(exports2, module2) {
module2.exports = [
["a140", "\uE4C6", 62],
["a180", "\uE505", 32],
["a240", "\uE526", 62],
["a280", "\uE565", 32],
["a2ab", "\uE766", 5],
["a2e3", "\u20AC\uE76D"],
["a2ef", "\uE76E\uE76F"],
["a2fd", "\uE770\uE771"],
["a340", "\uE586", 62],
["a380", "\uE5C5", 31, "\u3000"],
["a440", "\uE5E6", 62],
["a480", "\uE625", 32],
["a4f4", "\uE772", 10],
["a540", "\uE646", 62],
["a580", "\uE685", 32],
["a5f7", "\uE77D", 7],
["a640", "\uE6A6", 62],
["a680", "\uE6E5", 32],
["a6b9", "\uE785", 7],
["a6d9", "\uE78D", 6],
["a6ec", "\uE794\uE795"],
["a6f3", "\uE796"],
["a6f6", "\uE797", 8],
["a740", "\uE706", 62],
["a780", "\uE745", 32],
["a7c2", "\uE7A0", 14],
["a7f2", "\uE7AF", 12],
["a896", "\uE7BC", 10],
["a8bc", "\u1E3F"],
["a8bf", "\u01F9"],
["a8c1", "\uE7C9\uE7CA\uE7CB\uE7CC"],
["a8ea", "\uE7CD", 20],
["a958", "\uE7E2"],
["a95b", "\uE7E3"],
["a95d", "\uE7E4\uE7E5\uE7E6"],
["a989", "\u303E\u2FF0", 11],
["a997", "\uE7F4", 12],
["a9f0", "\uE801", 14],
["aaa1", "\uE000", 93],
["aba1", "\uE05E", 93],
["aca1", "\uE0BC", 93],
["ada1", "\uE11A", 93],
["aea1", "\uE178", 93],
["afa1", "\uE1D6", 93],
["d7fa", "\uE810", 4],
["f8a1", "\uE234", 93],
["f9a1", "\uE292", 93],
["faa1", "\uE2F0", 93],
["fba1", "\uE34E", 93],
["fca1", "\uE3AC", 93],
["fda1", "\uE40A", 93],
["fe50", "\u2E81\uE816\uE817\uE818\u2E84\u3473\u3447\u2E88\u2E8B\uE81E\u359E\u361A\u360E\u2E8C\u2E97\u396E\u3918\uE826\u39CF\u39DF\u3A73\u39D0\uE82B\uE82C\u3B4E\u3C6E\u3CE0\u2EA7\uE831\uE832\u2EAA\u4056\u415F\u2EAE\u4337\u2EB3\u2EB6\u2EB7\uE83B\u43B1\u43AC\u2EBB\u43DD\u44D6\u4661\u464C\uE843"],
["fe80", "\u4723\u4729\u477C\u478D\u2ECA\u4947\u497A\u497D\u4982\u4983\u4985\u4986\u499F\u499B\u49B7\u49B6\uE854\uE855\u4CA3\u4C9F\u4CA0\u4CA1\u4C77\u4CA2\u4D13", 6, "\u4DAE\uE864\uE468", 93],
["8135f437", "\uE7C7"]
];
}
});
var require_gb18030_ranges22 = __commonJS2({
"node_modules/body-parser/node_modules/iconv-lite/encodings/tables/gb18030-ranges.json"(exports2, module2) {
module2.exports = { uChars: [128, 165, 169, 178, 184, 216, 226, 235, 238, 244, 248, 251, 253, 258, 276, 284, 300, 325, 329, 334, 364, 463, 465, 467, 469, 471, 473, 475, 477, 506, 594, 610, 712, 716, 730, 930, 938, 962, 970, 1026, 1104, 1106, 8209, 8215, 8218, 8222, 8231, 8241, 8244, 8246, 8252, 8365, 8452, 8454, 8458, 8471, 8482, 8556, 8570, 8596, 8602, 8713, 8720, 8722, 8726, 8731, 8737, 8740, 8742, 8748, 8751, 8760, 8766, 8777, 8781, 8787, 8802, 8808, 8816, 8854, 8858, 8870, 8896, 8979, 9322, 9372, 9548, 9588, 9616, 9622, 9634, 9652, 9662, 9672, 9676, 9680, 9702, 9735, 9738, 9793, 9795, 11906, 11909, 11913, 11917, 11928, 11944, 11947, 11951, 11956, 11960, 11964, 11979, 12284, 12292, 12312, 12319, 12330, 12351, 12436, 12447, 12535, 12543, 12586, 12842, 12850, 12964, 13200, 13215, 13218, 13253, 13263, 13267, 13270, 13384, 13428, 13727, 13839, 13851, 14617, 14703, 14801, 14816, 14964, 15183, 15471, 15585, 16471, 16736, 17208, 17325, 17330, 17374, 17623, 17997, 18018, 18212, 18218, 18301, 18318, 18760, 18811, 18814, 18820, 18823, 18844, 18848, 18872, 19576, 19620, 19738, 19887, 40870, 59244, 59336, 59367, 59413, 59417, 59423, 59431, 59437, 59443, 59452, 59460, 59478, 59493, 63789, 63866, 63894, 63976, 63986, 64016, 64018, 64021, 64025, 64034, 64037, 64042, 65074, 65093, 65107, 65112, 65127, 65132, 65375, 65510, 65536], gbChars: [0, 36, 38, 45, 50, 81, 89, 95, 96, 100, 103, 104, 105, 109, 126, 133, 148, 172, 175, 179, 208, 306, 307, 308, 309, 310, 311, 312, 313, 341, 428, 443, 544, 545, 558, 741, 742, 749, 750, 805, 819, 820, 7922, 7924, 7925, 7927, 7934, 7943, 7944, 7945, 7950, 8062, 8148, 8149, 8152, 8164, 8174, 8236, 8240, 8262, 8264, 8374, 8380, 8381, 8384, 8388, 8390, 8392, 8393, 8394, 8396, 8401, 8406, 8416, 8419, 8424, 8437, 8439, 8445, 8482, 8485, 8496, 8521, 8603, 8936, 8946, 9046, 9050, 9063, 9066, 9076, 9092, 9100, 9108, 9111, 9113, 9131, 9162, 9164, 9218, 9219, 11329, 11331, 11334, 11336, 11346, 11361, 11363, 11366, 11370, 11372, 11375, 11389, 11682, 11686, 11687, 11692, 11694, 11714, 11716, 11723, 11725, 11730, 11736, 11982, 11989, 12102, 12336, 12348, 12350, 12384, 12393, 12395, 12397, 12510, 12553, 12851, 12962, 12973, 13738, 13823, 13919, 13933, 14080, 14298, 14585, 14698, 15583, 15847, 16318, 16434, 16438, 16481, 16729, 17102, 17122, 17315, 17320, 17402, 17418, 17859, 17909, 17911, 17915, 17916, 17936, 17939, 17961, 18664, 18703, 18814, 18962, 19043, 33469, 33470, 33471, 33484, 33485, 33490, 33497, 33501, 33505, 33513, 33520, 33536, 33550, 37845, 37921, 37948, 38029, 38038, 38064, 38065, 38066, 38069, 38075, 38076, 38078, 39108, 39109, 39113, 39114, 39115, 39116, 39265, 39394, 189e3] };
}
});
var require_cp94922 = __commonJS2({
"node_modules/body-parser/node_modules/iconv-lite/encodings/tables/cp949.json"(exports2, module2) {
module2.exports = [
["0", "\0", 127],
["8141", "\uAC02\uAC03\uAC05\uAC06\uAC0B", 4, "\uAC18\uAC1E\uAC1F\uAC21\uAC22\uAC23\uAC25", 6, "\uAC2E\uAC32\uAC33\uAC34"],
["8161", "\uAC35\uAC36\uAC37\uAC3A\uAC3B\uAC3D\uAC3E\uAC3F\uAC41", 9, "\uAC4C\uAC4E", 5, "\uAC55"],
["8181", "\uAC56\uAC57\uAC59\uAC5A\uAC5B\uAC5D", 18, "\uAC72\uAC73\uAC75\uAC76\uAC79\uAC7B", 4, "\uAC82\uAC87\uAC88\uAC8D\uAC8E\uAC8F\uAC91\uAC92\uAC93\uAC95", 6, "\uAC9E\uACA2", 5, "\uACAB\uACAD\uACAE\uACB1", 6, "\uACBA\uACBE\uACBF\uACC0\uACC2\uACC3\uACC5\uACC6\uACC7\uACC9\uACCA\uACCB\uACCD", 7, "\uACD6\uACD8", 7, "\uACE2\uACE3\uACE5\uACE6\uACE9\uACEB\uACED\uACEE\uACF2\uACF4\uACF7", 4, "\uACFE\uACFF\uAD01\uAD02\uAD03\uAD05\uAD07", 4, "\uAD0E\uAD10\uAD12\uAD13"],
["8241", "\uAD14\uAD15\uAD16\uAD17\uAD19\uAD1A\uAD1B\uAD1D\uAD1E\uAD1F\uAD21", 7, "\uAD2A\uAD2B\uAD2E", 5],
["8261", "\uAD36\uAD37\uAD39\uAD3A\uAD3B\uAD3D", 6, "\uAD46\uAD48\uAD4A", 5, "\uAD51\uAD52\uAD53\uAD55\uAD56\uAD57"],
["8281", "\uAD59", 7, "\uAD62\uAD64", 7, "\uAD6E\uAD6F\uAD71\uAD72\uAD77\uAD78\uAD79\uAD7A\uAD7E\uAD80\uAD83", 4, "\uAD8A\uAD8B\uAD8D\uAD8E\uAD8F\uAD91", 10, "\uAD9E", 5, "\uADA5", 17, "\uADB8", 7, "\uADC2\uADC3\uADC5\uADC6\uADC7\uADC9", 6, "\uADD2\uADD4", 7, "\uADDD\uADDE\uADDF\uADE1\uADE2\uADE3\uADE5", 18],
["8341", "\uADFA\uADFB\uADFD\uADFE\uAE02", 5, "\uAE0A\uAE0C\uAE0E", 5, "\uAE15", 7],
["8361", "\uAE1D", 18, "\uAE32\uAE33\uAE35\uAE36\uAE39\uAE3B\uAE3C"],
["8381", "\uAE3D\uAE3E\uAE3F\uAE42\uAE44\uAE47\uAE48\uAE49\uAE4B\uAE4F\uAE51\uAE52\uAE53\uAE55\uAE57", 4, "\uAE5E\uAE62\uAE63\uAE64\uAE66\uAE67\uAE6A\uAE6B\uAE6D\uAE6E\uAE6F\uAE71", 6, "\uAE7A\uAE7E", 5, "\uAE86", 5, "\uAE8D", 46, "\uAEBF\uAEC1\uAEC2\uAEC3\uAEC5", 6, "\uAECE\uAED2", 5, "\uAEDA\uAEDB\uAEDD", 8],
["8441", "\uAEE6\uAEE7\uAEE9\uAEEA\uAEEC\uAEEE", 5, "\uAEF5\uAEF6\uAEF7\uAEF9\uAEFA\uAEFB\uAEFD", 8],
["8461", "\uAF06\uAF09\uAF0A\uAF0B\uAF0C\uAF0E\uAF0F\uAF11", 18],
["8481", "\uAF24", 7, "\uAF2E\uAF2F\uAF31\uAF33\uAF35", 6, "\uAF3E\uAF40\uAF44\uAF45\uAF46\uAF47\uAF4A", 5, "\uAF51", 10, "\uAF5E", 5, "\uAF66", 18, "\uAF7A", 5, "\uAF81\uAF82\uAF83\uAF85\uAF86\uAF87\uAF89", 6, "\uAF92\uAF93\uAF94\uAF96", 5, "\uAF9D", 26, "\uAFBA\uAFBB\uAFBD\uAFBE"],
["8541", "\uAFBF\uAFC1", 5, "\uAFCA\uAFCC\uAFCF", 4, "\uAFD5", 6, "\uAFDD", 4],
["8561", "\uAFE2", 5, "\uAFEA", 5, "\uAFF2\uAFF3\uAFF5\uAFF6\uAFF7\uAFF9", 6, "\uB002\uB003"],
["8581", "\uB005", 6, "\uB00D\uB00E\uB00F\uB011\uB012\uB013\uB015", 6, "\uB01E", 9, "\uB029", 26, "\uB046\uB047\uB049\uB04B\uB04D\uB04F\uB050\uB051\uB052\uB056\uB058\uB05A\uB05B\uB05C\uB05E", 29, "\uB07E\uB07F\uB081\uB082\uB083\uB085", 6, "\uB08E\uB090\uB092", 5, "\uB09B\uB09D\uB09E\uB0A3\uB0A4"],
["8641", "\uB0A5\uB0A6\uB0A7\uB0AA\uB0B0\uB0B2\uB0B6\uB0B7\uB0B9\uB0BA\uB0BB\uB0BD", 6, "\uB0C6\uB0CA", 5, "\uB0D2"],
["8661", "\uB0D3\uB0D5\uB0D6\uB0D7\uB0D9", 6, "\uB0E1\uB0E2\uB0E3\uB0E4\uB0E6", 10],
["8681", "\uB0F1", 22, "\uB10A\uB10D\uB10E\uB10F\uB111\uB114\uB115\uB116\uB117\uB11A\uB11E", 4, "\uB126\uB127\uB129\uB12A\uB12B\uB12D", 6, "\uB136\uB13A", 5, "\uB142\uB143\uB145\uB146\uB147\uB149", 6, "\uB152\uB153\uB156\uB157\uB159\uB15A\uB15B\uB15D\uB15E\uB15F\uB161", 22, "\uB17A\uB17B\uB17D\uB17E\uB17F\uB181\uB183", 4, "\uB18A\uB18C\uB18E\uB18F\uB190\uB191\uB195\uB196\uB197\uB199\uB19A\uB19B\uB19D"],
["8741", "\uB19E", 9, "\uB1A9", 15],
["8761", "\uB1B9", 18, "\uB1CD\uB1CE\uB1CF\uB1D1\uB1D2\uB1D3\uB1D5"],
["8781", "\uB1D6", 5, "\uB1DE\uB1E0", 7, "\uB1EA\uB1EB\uB1ED\uB1EE\uB1EF\uB1F1", 7, "\uB1FA\uB1FC\uB1FE", 5, "\uB206\uB207\uB209\uB20A\uB20D", 6, "\uB216\uB218\uB21A", 5, "\uB221", 18, "\uB235", 6, "\uB23D", 26, "\uB259\uB25A\uB25B\uB25D\uB25E\uB25F\uB261", 6, "\uB26A", 4],
["8841", "\uB26F", 4, "\uB276", 5, "\uB27D", 6, "\uB286\uB287\uB288\uB28A", 4],
["8861", "\uB28F\uB292\uB293\uB295\uB296\uB297\uB29B", 4, "\uB2A2\uB2A4\uB2A7\uB2A8\uB2A9\uB2AB\uB2AD\uB2AE\uB2AF\uB2B1\uB2B2\uB2B3\uB2B5\uB2B6\uB2B7"],
["8881", "\uB2B8", 15, "\uB2CA\uB2CB\uB2CD\uB2CE\uB2CF\uB2D1\uB2D3", 4, "\uB2DA\uB2DC\uB2DE\uB2DF\uB2E0\uB2E1\uB2E3\uB2E7\uB2E9\uB2EA\uB2F0\uB2F1\uB2F2\uB2F6\uB2FC\uB2FD\uB2FE\uB302\uB303\uB305\uB306\uB307\uB309", 6, "\uB312\uB316", 5, "\uB31D", 54, "\uB357\uB359\uB35A\uB35D\uB360\uB361\uB362\uB363"],
["8941", "\uB366\uB368\uB36A\uB36C\uB36D\uB36F\uB372\uB373\uB375\uB376\uB377\uB379", 6, "\uB382\uB386", 5, "\uB38D"],
["8961", "\uB38E\uB38F\uB391\uB392\uB393\uB395", 10, "\uB3A2", 5, "\uB3A9\uB3AA\uB3AB\uB3AD"],
["8981", "\uB3AE", 21, "\uB3C6\uB3C7\uB3C9\uB3CA\uB3CD\uB3CF\uB3D1\uB3D2\uB3D3\uB3D6\uB3D8\uB3DA\uB3DC\uB3DE\uB3DF\uB3E1\uB3E2\uB3E3\uB3E5\uB3E6\uB3E7\uB3E9", 18, "\uB3FD", 18, "\uB411", 6, "\uB419\uB41A\uB41B\uB41D\uB41E\uB41F\uB421", 6, "\uB42A\uB42C", 7, "\uB435", 15],
["8a41", "\uB445", 10, "\uB452\uB453\uB455\uB456\uB457\uB459", 6, "\uB462\uB464\uB466"],
["8a61", "\uB467", 4, "\uB46D", 18, "\uB481\uB482"],
["8a81", "\uB483", 4, "\uB489", 19, "\uB49E", 5, "\uB4A5\uB4A6\uB4A7\uB4A9\uB4AA\uB4AB\uB4AD", 7, "\uB4B6\uB4B8\uB4BA", 5, "\uB4C1\uB4C2\uB4C3\uB4C5\uB4C6\uB4C7\uB4C9", 6, "\uB4D1\uB4D2\uB4D3\uB4D4\uB4D6", 5, "\uB4DE\uB4DF\uB4E1\uB4E2\uB4E5\uB4E7", 4, "\uB4EE\uB4F0\uB4F2", 5, "\uB4F9", 26, "\uB516\uB517\uB519\uB51A\uB51D"],
["8b41", "\uB51E", 5, "\uB526\uB52B", 4, "\uB532\uB533\uB535\uB536\uB537\uB539", 6, "\uB542\uB546"],
["8b61", "\uB547\uB548\uB549\uB54A\uB54E\uB54F\uB551\uB552\uB553\uB555", 6, "\uB55E\uB562", 8],
["8b81", "\uB56B", 52, "\uB5A2\uB5A3\uB5A5\uB5A6\uB5A7\uB5A9\uB5AC\uB5AD\uB5AE\uB5AF\uB5B2\uB5B6", 4, "\uB5BE\uB5BF\uB5C1\uB5C2\uB5C3\uB5C5", 6, "\uB5CE\uB5D2", 5, "\uB5D9", 18, "\uB5ED", 18],
["8c41", "\uB600", 15, "\uB612\uB613\uB615\uB616\uB617\uB619", 4],
["8c61", "\uB61E", 6, "\uB626", 5, "\uB62D", 6, "\uB635", 5],
["8c81", "\uB63B", 12, "\uB649", 26, "\uB665\uB666\uB667\uB669", 50, "\uB69E\uB69F\uB6A1\uB6A2\uB6A3\uB6A5", 5, "\uB6AD\uB6AE\uB6AF\uB6B0\uB6B2", 16],
["8d41", "\uB6C3", 16, "\uB6D5", 8],
["8d61", "\uB6DE", 17, "\uB6F1\uB6F2\uB6F3\uB6F5\uB6F6\uB6F7\uB6F9\uB6FA"],
["8d81", "\uB6FB", 4, "\uB702\uB703\uB704\uB706", 33, "\uB72A\uB72B\uB72D\uB72E\uB731", 6, "\uB73A\uB73C", 7, "\uB745\uB746\uB747\uB749\uB74A\uB74B\uB74D", 6, "\uB756", 9, "\uB761\uB762\uB763\uB765\uB766\uB767\uB769", 6, "\uB772\uB774\uB776", 5, "\uB77E\uB77F\uB781\uB782\uB783\uB785", 6, "\uB78E\uB793\uB794\uB795\uB79A\uB79B\uB79D\uB79E"],
["8e41", "\uB79F\uB7A1", 6, "\uB7AA\uB7AE", 5, "\uB7B6\uB7B7\uB7B9", 8],
["8e61", "\uB7C2", 4, "\uB7C8\uB7CA", 19],
["8e81", "\uB7DE", 13, "\uB7EE\uB7EF\uB7F1\uB7F2\uB7F3\uB7F5", 6, "\uB7FE\uB802", 4, "\uB80A\uB80B\uB80D\uB80E\uB80F\uB811", 6, "\uB81A\uB81C\uB81E", 5, "\uB826\uB827\uB829\uB82A\uB82B\uB82D", 6, "\uB836\uB83A", 5, "\uB841\uB842\uB843\uB845", 11, "\uB852\uB854", 7, "\uB85E\uB85F\uB861\uB862\uB863\uB865", 6, "\uB86E\uB870\uB872", 5, "\uB879\uB87A\uB87B\uB87D", 7],
["8f41", "\uB885", 7, "\uB88E", 17],
["8f61", "\uB8A0", 7, "\uB8A9", 6, "\uB8B1\uB8B2\uB8B3\uB8B5\uB8B6\uB8B7\uB8B9", 4],
["8f81", "\uB8BE\uB8BF\uB8C2\uB8C4\uB8C6", 5, "\uB8CD\uB8CE\uB8CF\uB8D1\uB8D2\uB8D3\uB8D5", 7, "\uB8DE\uB8E0\uB8E2", 5, "\uB8EA\uB8EB\uB8ED\uB8EE\uB8EF\uB8F1", 6, "\uB8FA\uB8FC\uB8FE", 5, "\uB905", 18, "\uB919", 6, "\uB921", 26, "\uB93E\uB93F\uB941\uB942\uB943\uB945", 6, "\uB94D\uB94E\uB950\uB952", 5],
["9041", "\uB95A\uB95B\uB95D\uB95E\uB95F\uB961", 6, "\uB96A\uB96C\uB96E", 5, "\uB976\uB977\uB979\uB97A\uB97B\uB97D"],
["9061", "\uB97E", 5, "\uB986\uB988\uB98B\uB98C\uB98F", 15],
["9081", "\uB99F", 12, "\uB9AE\uB9AF\uB9B1\uB9B2\uB9B3\uB9B5", 6, "\uB9BE\uB9C0\uB9C2", 5, "\uB9CA\uB9CB\uB9CD\uB9D3", 4, "\uB9DA\uB9DC\uB9DF\uB9E0\uB9E2\uB9E6\uB9E7\uB9E9\uB9EA\uB9EB\uB9ED", 6, "\uB9F6\uB9FB", 4, "\uBA02", 5, "\uBA09", 11, "\uBA16", 33, "\uBA3A\uBA3B\uBA3D\uBA3E\uBA3F\uBA41\uBA43\uBA44\uBA45\uBA46"],
["9141", "\uBA47\uBA4A\uBA4C\uBA4F\uBA50\uBA51\uBA52\uBA56\uBA57\uBA59\uBA5A\uBA5B\uBA5D", 6, "\uBA66\uBA6A", 5],
["9161", "\uBA72\uBA73\uBA75\uBA76\uBA77\uBA79", 9, "\uBA86\uBA88\uBA89\uBA8A\uBA8B\uBA8D", 5],
["9181", "\uBA93", 20, "\uBAAA\uBAAD\uBAAE\uBAAF\uBAB1\uBAB3", 4, "\uBABA\uBABC\uBABE", 5, "\uBAC5\uBAC6\uBAC7\uBAC9", 14, "\uBADA", 33, "\uBAFD\uBAFE\uBAFF\uBB01\uBB02\uBB03\uBB05", 7, "\uBB0E\uBB10\uBB12", 5, "\uBB19\uBB1A\uBB1B\uBB1D\uBB1E\uBB1F\uBB21", 6],
["9241", "\uBB28\uBB2A\uBB2C", 7, "\uBB37\uBB39\uBB3A\uBB3F", 4, "\uBB46\uBB48\uBB4A\uBB4B\uBB4C\uBB4E\uBB51\uBB52"],
["9261", "\uBB53\uBB55\uBB56\uBB57\uBB59", 7, "\uBB62\uBB64", 7, "\uBB6D", 4],
["9281", "\uBB72", 21, "\uBB89\uBB8A\uBB8B\uBB8D\uBB8E\uBB8F\uBB91", 18, "\uBBA5\uBBA6\uBBA7\uBBA9\uBBAA\uBBAB\uBBAD", 6, "\uBBB5\uBBB6\uBBB8", 7, "\uBBC1\uBBC2\uBBC3\uBBC5\uBBC6\uBBC7\uBBC9", 6, "\uBBD1\uBBD2\uBBD4", 35, "\uBBFA\uBBFB\uBBFD\uBBFE\uBC01"],
["9341", "\uBC03", 4, "\uBC0A\uBC0E\uBC10\uBC12\uBC13\uBC19\uBC1A\uBC20\uBC21\uBC22\uBC23\uBC26\uBC28\uBC2A\uBC2B\uBC2C\uBC2E\uBC2F\uBC32\uBC33\uBC35"],
["9361", "\uBC36\uBC37\uBC39", 6, "\uBC42\uBC46\uBC47\uBC48\uBC4A\uBC4B\uBC4E\uBC4F\uBC51", 8],
["9381", "\uBC5A\uBC5B\uBC5C\uBC5E", 37, "\uBC86\uBC87\uBC89\uBC8A\uBC8D\uBC8F", 4, "\uBC96\uBC98\uBC9B", 4, "\uBCA2\uBCA3\uBCA5\uBCA6\uBCA9", 6, "\uBCB2\uBCB6", 5, "\uBCBE\uBCBF\uBCC1\uBCC2\uBCC3\uBCC5", 7, "\uBCCE\uBCD2\uBCD3\uBCD4\uBCD6\uBCD7\uBCD9\uBCDA\uBCDB\uBCDD", 22, "\uBCF7\uBCF9\uBCFA\uBCFB\uBCFD"],
["9441", "\uBCFE", 5, "\uBD06\uBD08\uBD0A", 5, "\uBD11\uBD12\uBD13\uBD15", 8],
["9461", "\uBD1E", 5, "\uBD25", 6, "\uBD2D", 12],
["9481", "\uBD3A", 5, "\uBD41", 6, "\uBD4A\uBD4B\uBD4D\uBD4E\uBD4F\uBD51", 6, "\uBD5A", 9, "\uBD65\uBD66\uBD67\uBD69", 22, "\uBD82\uBD83\uBD85\uBD86\uBD8B", 4, "\uBD92\uBD94\uBD96\uBD97\uBD98\uBD9B\uBD9D", 6, "\uBDA5", 10, "\uBDB1", 6, "\uBDB9", 24],
["9541", "\uBDD2\uBDD3\uBDD6\uBDD7\uBDD9\uBDDA\uBDDB\uBDDD", 11, "\uBDEA", 5, "\uBDF1"],
["9561", "\uBDF2\uBDF3\uBDF5\uBDF6\uBDF7\uBDF9", 6, "\uBE01\uBE02\uBE04\uBE06", 5, "\uBE0E\uBE0F\uBE11\uBE12\uBE13"],
["9581", "\uBE15", 6, "\uBE1E\uBE20", 35, "\uBE46\uBE47\uBE49\uBE4A\uBE4B\uBE4D\uBE4F", 4, "\uBE56\uBE58\uBE5C\uBE5D\uBE5E\uBE5F\uBE62\uBE63\uBE65\uBE66\uBE67\uBE69\uBE6B", 4, "\uBE72\uBE76", 4, "\uBE7E\uBE7F\uBE81\uBE82\uBE83\uBE85", 6, "\uBE8E\uBE92", 5, "\uBE9A", 13, "\uBEA9", 14],
["9641", "\uBEB8", 23, "\uBED2\uBED3"],
["9661", "\uBED5\uBED6\uBED9", 6, "\uBEE1\uBEE2\uBEE6", 5, "\uBEED", 8],
["9681", "\uBEF6", 10, "\uBF02", 5, "\uBF0A", 13, "\uBF1A\uBF1E", 33, "\uBF42\uBF43\uBF45\uBF46\uBF47\uBF49", 6, "\uBF52\uBF53\uBF54\uBF56", 44],
["9741", "\uBF83", 16, "\uBF95", 8],
["9761", "\uBF9E", 17, "\uBFB1", 7],
["9781", "\uBFB9", 11, "\uBFC6", 5, "\uBFCE\uBFCF\uBFD1\uBFD2\uBFD3\uBFD5", 6, "\uBFDD\uBFDE\uBFE0\uBFE2", 89, "\uC03D\uC03E\uC03F"],
["9841", "\uC040", 16, "\uC052", 5, "\uC059\uC05A\uC05B"],
["9861", "\uC05D\uC05E\uC05F\uC061", 6, "\uC06A", 15],
["9881", "\uC07A", 21, "\uC092\uC093\uC095\uC096\uC097\uC099", 6, "\uC0A2\uC0A4\uC0A6", 5, "\uC0AE\uC0B1\uC0B2\uC0B7", 4, "\uC0BE\uC0C2\uC0C3\uC0C4\uC0C6\uC0C7\uC0CA\uC0CB\uC0CD\uC0CE\uC0CF\uC0D1", 6, "\uC0DA\uC0DE", 5, "\uC0E6\uC0E7\uC0E9\uC0EA\uC0EB\uC0ED", 6, "\uC0F6\uC0F8\uC0FA", 5, "\uC101\uC102\uC103\uC105\uC106\uC107\uC109", 6, "\uC111\uC112\uC113\uC114\uC116", 5, "\uC121\uC122\uC125\uC128\uC129\uC12A\uC12B\uC12E"],
["9941", "\uC132\uC133\uC134\uC135\uC137\uC13A\uC13B\uC13D\uC13E\uC13F\uC141", 6, "\uC14A\uC14E", 5, "\uC156\uC157"],
["9961", "\uC159\uC15A\uC15B\uC15D", 6, "\uC166\uC16A", 5, "\uC171\uC172\uC173\uC175\uC176\uC177\uC179\uC17A\uC17B"],
["9981", "\uC17C", 8, "\uC186", 5, "\uC18F\uC191\uC192\uC193\uC195\uC197", 4, "\uC19E\uC1A0\uC1A2\uC1A3\uC1A4\uC1A6\uC1A7\uC1AA\uC1AB\uC1AD\uC1AE\uC1AF\uC1B1", 11, "\uC1BE", 5, "\uC1C5\uC1C6\uC1C7\uC1C9\uC1CA\uC1CB\uC1CD", 6, "\uC1D5\uC1D6\uC1D9", 6, "\uC1E1\uC1E2\uC1E3\uC1E5\uC1E6\uC1E7\uC1E9", 6, "\uC1F2\uC1F4", 7, "\uC1FE\uC1FF\uC201\uC202\uC203\uC205", 6, "\uC20E\uC210\uC212", 5, "\uC21A\uC21B\uC21D\uC21E\uC221\uC222\uC223"],
["9a41", "\uC224\uC225\uC226\uC227\uC22A\uC22C\uC22E\uC230\uC233\uC235", 16],
["9a61", "\uC246\uC247\uC249", 6, "\uC252\uC253\uC255\uC256\uC257\uC259", 6, "\uC261\uC262\uC263\uC264\uC266"],
["9a81", "\uC267", 4, "\uC26E\uC26F\uC271\uC272\uC273\uC275", 6, "\uC27E\uC280\uC282", 5, "\uC28A", 5, "\uC291", 6, "\uC299\uC29A\uC29C\uC29E", 5, "\uC2A6\uC2A7\uC2A9\uC2AA\uC2AB\uC2AE", 5, "\uC2B6\uC2B8\uC2BA", 33, "\uC2DE\uC2DF\uC2E1\uC2E2\uC2E5", 5, "\uC2EE\uC2F0\uC2F2\uC2F3\uC2F4\uC2F5\uC2F7\uC2FA\uC2FD\uC2FE\uC2FF\uC301", 6, "\uC30A\uC30B\uC30E\uC30F"],
["9b41", "\uC310\uC311\uC312\uC316\uC317\uC319\uC31A\uC31B\uC31D", 6, "\uC326\uC327\uC32A", 8],
["9b61", "\uC333", 17, "\uC346", 7],
["9b81", "\uC34E", 25, "\uC36A\uC36B\uC36D\uC36E\uC36F\uC371\uC373", 4, "\uC37A\uC37B\uC37E", 5, "\uC385\uC386\uC387\uC389\uC38A\uC38B\uC38D", 50, "\uC3C1", 22, "\uC3DA"],
["9c41", "\uC3DB\uC3DD\uC3DE\uC3E1\uC3E3", 4, "\uC3EA\uC3EB\uC3EC\uC3EE", 5, "\uC3F6\uC3F7\uC3F9", 5],
["9c61", "\uC3FF", 8, "\uC409", 6, "\uC411", 9],
["9c81", "\uC41B", 8, "\uC425", 6, "\uC42D\uC42E\uC42F\uC431\uC432\uC433\uC435", 6, "\uC43E", 9, "\uC449", 26, "\uC466\uC467\uC469\uC46A\uC46B\uC46D", 6, "\uC476\uC477\uC478\uC47A", 5, "\uC481", 18, "\uC495", 6, "\uC49D", 12],
["9d41", "\uC4AA", 13, "\uC4B9\uC4BA\uC4BB\uC4BD", 8],
["9d61", "\uC4C6", 25],
["9d81", "\uC4E0", 8, "\uC4EA", 5, "\uC4F2\uC4F3\uC4F5\uC4F6\uC4F7\uC4F9\uC4FB\uC4FC\uC4FD\uC4FE\uC502", 9, "\uC50D\uC50E\uC50F\uC511\uC512\uC513\uC515", 6, "\uC51D", 10, "\uC52A\uC52B\uC52D\uC52E\uC52F\uC531", 6, "\uC53A\uC53C\uC53E", 5, "\uC546\uC547\uC54B\uC54F\uC550\uC551\uC552\uC556\uC55A\uC55B\uC55C\uC55F\uC562\uC563\uC565\uC566\uC567\uC569", 6, "\uC572\uC576", 5, "\uC57E\uC57F\uC581\uC582\uC583\uC585\uC586\uC588\uC589\uC58A\uC58B\uC58E\uC590\uC592\uC593\uC594"],
["9e41", "\uC596\uC599\uC59A\uC59B\uC59D\uC59E\uC59F\uC5A1", 7, "\uC5AA", 9, "\uC5B6"],
["9e61", "\uC5B7\uC5BA\uC5BF", 4, "\uC5CB\uC5CD\uC5CF\uC5D2\uC5D3\uC5D5\uC5D6\uC5D7\uC5D9", 6, "\uC5E2\uC5E4\uC5E6\uC5E7"],
["9e81", "\uC5E8\uC5E9\uC5EA\uC5EB\uC5EF\uC5F1\uC5F2\uC5F3\uC5F5\uC5F8\uC5F9\uC5FA\uC5FB\uC602\uC603\uC604\uC609\uC60A\uC60B\uC60D\uC60E\uC60F\uC611", 6, "\uC61A\uC61D", 6, "\uC626\uC627\uC629\uC62A\uC62B\uC62F\uC631\uC632\uC636\uC638\uC63A\uC63C\uC63D\uC63E\uC63F\uC642\uC643\uC645\uC646\uC647\uC649", 6, "\uC652\uC656", 5, "\uC65E\uC65F\uC661", 10, "\uC66D\uC66E\uC670\uC672", 5, "\uC67A\uC67B\uC67D\uC67E\uC67F\uC681", 6, "\uC68A\uC68C\uC68E", 5, "\uC696\uC697\uC699\uC69A\uC69B\uC69D", 6, "\uC6A6"],
["9f41", "\uC6A8\uC6AA", 5, "\uC6B2\uC6B3\uC6B5\uC6B6\uC6B7\uC6BB", 4, "\uC6C2\uC6C4\uC6C6", 5, "\uC6CE"],
["9f61", "\uC6CF\uC6D1\uC6D2\uC6D3\uC6D5", 6, "\uC6DE\uC6DF\uC6E2", 5, "\uC6EA\uC6EB\uC6ED\uC6EE\uC6EF\uC6F1\uC6F2"],
["9f81", "\uC6F3", 4, "\uC6FA\uC6FB\uC6FC\uC6FE", 5, "\uC706\uC707\uC709\uC70A\uC70B\uC70D", 6, "\uC716\uC718\uC71A", 5, "\uC722\uC723\uC725\uC726\uC727\uC729", 6, "\uC732\uC734\uC736\uC738\uC739\uC73A\uC73B\uC73E\uC73F\uC741\uC742\uC743\uC745", 4, "\uC74B\uC74E\uC750\uC759\uC75A\uC75B\uC75D\uC75E\uC75F\uC761", 6, "\uC769\uC76A\uC76C", 7, "\uC776\uC777\uC779\uC77A\uC77B\uC77F\uC780\uC781\uC782\uC786\uC78B\uC78C\uC78D\uC78F\uC792\uC793\uC795\uC799\uC79B", 4, "\uC7A2\uC7A7", 4, "\uC7AE\uC7AF\uC7B1\uC7B2\uC7B3\uC7B5\uC7B6\uC7B7"],
["a041", "\uC7B8\uC7B9\uC7BA\uC7BB\uC7BE\uC7C2", 5, "\uC7CA\uC7CB\uC7CD\uC7CF\uC7D1", 6, "\uC7D9\uC7DA\uC7DB\uC7DC"],
["a061", "\uC7DE", 5, "\uC7E5\uC7E6\uC7E7\uC7E9\uC7EA\uC7EB\uC7ED", 13],
["a081", "\uC7FB", 4, "\uC802\uC803\uC805\uC806\uC807\uC809\uC80B", 4, "\uC812\uC814\uC817", 4, "\uC81E\uC81F\uC821\uC822\uC823\uC825", 6, "\uC82E\uC830\uC832", 5, "\uC839\uC83A\uC83B\uC83D\uC83E\uC83F\uC841", 6, "\uC84A\uC84B\uC84E", 5, "\uC855", 26, "\uC872\uC873\uC875\uC876\uC877\uC879\uC87B", 4, "\uC882\uC884\uC888\uC889\uC88A\uC88E", 5, "\uC895", 7, "\uC89E\uC8A0\uC8A2\uC8A3\uC8A4"],
["a141", "\uC8A5\uC8A6\uC8A7\uC8A9", 18, "\uC8BE\uC8BF\uC8C0\uC8C1"],
["a161", "\uC8C2\uC8C3\uC8C5\uC8C6\uC8C7\uC8C9\uC8CA\uC8CB\uC8CD", 6, "\uC8D6\uC8D8\uC8DA", 5, "\uC8E2\uC8E3\uC8E5"],
["a181", "\uC8E6", 14, "\uC8F6", 5, "\uC8FE\uC8FF\uC901\uC902\uC903\uC907", 4, "\uC90E\u3000\u3001\u3002\xB7\u2025\u2026\xA8\u3003\xAD\u2015\u2225\uFF3C\u223C\u2018\u2019\u201C\u201D\u3014\u3015\u3008", 9, "\xB1\xD7\xF7\u2260\u2264\u2265\u221E\u2234\xB0\u2032\u2033\u2103\u212B\uFFE0\uFFE1\uFFE5\u2642\u2640\u2220\u22A5\u2312\u2202\u2207\u2261\u2252\xA7\u203B\u2606\u2605\u25CB\u25CF\u25CE\u25C7\u25C6\u25A1\u25A0\u25B3\u25B2\u25BD\u25BC\u2192\u2190\u2191\u2193\u2194\u3013\u226A\u226B\u221A\u223D\u221D\u2235\u222B\u222C\u2208\u220B\u2286\u2287\u2282\u2283\u222A\u2229\u2227\u2228\uFFE2"],
["a241", "\uC910\uC912", 5, "\uC919", 18],
["a261", "\uC92D", 6, "\uC935", 18],
["a281", "\uC948", 7, "\uC952\uC953\uC955\uC956\uC957\uC959", 6, "\uC962\uC964", 7, "\uC96D\uC96E\uC96F\u21D2\u21D4\u2200\u2203\xB4\uFF5E\u02C7\u02D8\u02DD\u02DA\u02D9\xB8\u02DB\xA1\xBF\u02D0\u222E\u2211\u220F\xA4\u2109\u2030\u25C1\u25C0\u25B7\u25B6\u2664\u2660\u2661\u2665\u2667\u2663\u2299\u25C8\u25A3\u25D0\u25D1\u2592\u25A4\u25A5\u25A8\u25A7\u25A6\u25A9\u2668\u260F\u260E\u261C\u261E\xB6\u2020\u2021\u2195\u2197\u2199\u2196\u2198\u266D\u2669\u266A\u266C\u327F\u321C\u2116\u33C7\u2122\u33C2\u33D8\u2121\u20AC\xAE"],
["a341", "\uC971\uC972\uC973\uC975", 6, "\uC97D", 10, "\uC98A\uC98B\uC98D\uC98E\uC98F"],
["a361", "\uC991", 6, "\uC99A\uC99C\uC99E", 16],
["a381", "\uC9AF", 16, "\uC9C2\uC9C3\uC9C5\uC9C6\uC9C9\uC9CB", 4, "\uC9D2\uC9D4\uC9D7\uC9D8\uC9DB\uFF01", 58, "\uFFE6\uFF3D", 32, "\uFFE3"],
["a441", "\uC9DE\uC9DF\uC9E1\uC9E3\uC9E5\uC9E6\uC9E8\uC9E9\uC9EA\uC9EB\uC9EE\uC9F2", 5, "\uC9FA\uC9FB\uC9FD\uC9FE\uC9FF\uCA01\uCA02\uCA03\uCA04"],
["a461", "\uCA05\uCA06\uCA07\uCA0A\uCA0E", 5, "\uCA15\uCA16\uCA17\uCA19", 12],
["a481", "\uCA26\uCA27\uCA28\uCA2A", 28, "\u3131", 93],
["a541", "\uCA47", 4, "\uCA4E\uCA4F\uCA51\uCA52\uCA53\uCA55", 6, "\uCA5E\uCA62", 5, "\uCA69\uCA6A"],
["a561", "\uCA6B", 17, "\uCA7E", 5, "\uCA85\uCA86"],
["a581", "\uCA87", 16, "\uCA99", 14, "\u2170", 9],
["a5b0", "\u2160", 9],
["a5c1", "\u0391", 16, "\u03A3", 6],
["a5e1", "\u03B1", 16, "\u03C3", 6],
["a641", "\uCAA8", 19, "\uCABE\uCABF\uCAC1\uCAC2\uCAC3\uCAC5"],
["a661", "\uCAC6", 5, "\uCACE\uCAD0\uCAD2\uCAD4\uCAD5\uCAD6\uCAD7\uCADA", 5, "\uCAE1", 6],
["a681", "\uCAE8\uCAE9\uCAEA\uCAEB\uCAED", 6, "\uCAF5", 18, "\uCB09\uCB0A\u2500\u2502\u250C\u2510\u2518\u2514\u251C\u252C\u2524\u2534\u253C\u2501\u2503\u250F\u2513\u251B\u2517\u2523\u2533\u252B\u253B\u254B\u2520\u252F\u2528\u2537\u253F\u251D\u2530\u2525\u2538\u2542\u2512\u2511\u251A\u2519\u2516\u2515\u250E\u250D\u251E\u251F\u2521\u2522\u2526\u2527\u2529\u252A\u252D\u252E\u2531\u2532\u2535\u2536\u2539\u253A\u253D\u253E\u2540\u2541\u2543", 7],
["a741", "\uCB0B", 4, "\uCB11\uCB12\uCB13\uCB15\uCB16\uCB17\uCB19", 6, "\uCB22", 7],
["a761", "\uCB2A", 22, "\uCB42\uCB43\uCB44"],
["a781", "\uCB45\uCB46\uCB47\uCB4A\uCB4B\uCB4D\uCB4E\uCB4F\uCB51", 6, "\uCB5A\uCB5B\uCB5C\uCB5E", 5, "\uCB65", 7, "\u3395\u3396\u3397\u2113\u3398\u33C4\u33A3\u33A4\u33A5\u33A6\u3399", 9, "\u33CA\u338D\u338E\u338F\u33CF\u3388\u3389\u33C8\u33A7\u33A8\u33B0", 9, "\u3380", 4, "\u33BA", 5, "\u3390", 4, "\u2126\u33C0\u33C1\u338A\u338B\u338C\u33D6\u33C5\u33AD\u33AE\u33AF\u33DB\u33A9\u33AA\u33AB\u33AC\u33DD\u33D0\u33D3\u33C3\u33C9\u33DC\u33C6"],
["a841", "\uCB6D", 10, "\uCB7A", 14],
["a861", "\uCB89", 18, "\uCB9D", 6],
["a881", "\uCBA4", 19, "\uCBB9", 11, "\xC6\xD0\xAA\u0126"],
["a8a6", "\u0132"],
["a8a8", "\u013F\u0141\xD8\u0152\xBA\xDE\u0166\u014A"],
["a8b1", "\u3260", 27, "\u24D0", 25, "\u2460", 14, "\xBD\u2153\u2154\xBC\xBE\u215B\u215C\u215D\u215E"],
["a941", "\uCBC5", 14, "\uCBD5", 10],
["a961", "\uCBE0\uCBE1\uCBE2\uCBE3\uCBE5\uCBE6\uCBE8\uCBEA", 18],
["a981", "\uCBFD", 14, "\uCC0E\uCC0F\uCC11\uCC12\uCC13\uCC15", 6, "\uCC1E\uCC1F\uCC20\uCC23\uCC24\xE6\u0111\xF0\u0127\u0131\u0133\u0138\u0140\u0142\xF8\u0153\xDF\xFE\u0167\u014B\u0149\u3200", 27, "\u249C", 25, "\u2474", 14, "\xB9\xB2\xB3\u2074\u207F\u2081\u2082\u2083\u2084"],
["aa41", "\uCC25\uCC26\uCC2A\uCC2B\uCC2D\uCC2F\uCC31", 6, "\uCC3A\uCC3F", 4, "\uCC46\uCC47\uCC49\uCC4A\uCC4B\uCC4D\uCC4E"],
["aa61", "\uCC4F", 4, "\uCC56\uCC5A", 5, "\uCC61\uCC62\uCC63\uCC65\uCC67\uCC69", 6, "\uCC71\uCC72"],
["aa81", "\uCC73\uCC74\uCC76", 29, "\u3041", 82],
["ab41", "\uCC94\uCC95\uCC96\uCC97\uCC9A\uCC9B\uCC9D\uCC9E\uCC9F\uCCA1", 6, "\uCCAA\uCCAE", 5, "\uCCB6\uCCB7\uCCB9"],
["ab61", "\uCCBA\uCCBB\uCCBD", 6, "\uCCC6\uCCC8\uCCCA", 5, "\uCCD1\uCCD2\uCCD3\uCCD5", 5],
["ab81", "\uCCDB", 8, "\uCCE5", 6, "\uCCED\uCCEE\uCCEF\uCCF1", 12, "\u30A1", 85],
["ac41", "\uCCFE\uCCFF\uCD00\uCD02", 5, "\uCD0A\uCD0B\uCD0D\uCD0E\uCD0F\uCD11", 6, "\uCD1A\uCD1C\uCD1E\uCD1F\uCD20"],
["ac61", "\uCD21\uCD22\uCD23\uCD25\uCD26\uCD27\uCD29\uCD2A\uCD2B\uCD2D", 11, "\uCD3A", 4],
["ac81", "\uCD3F", 28, "\uCD5D\uCD5E\uCD5F\u0410", 5, "\u0401\u0416", 25],
["acd1", "\u0430", 5, "\u0451\u0436", 25],
["ad41", "\uCD61\uCD62\uCD63\uCD65", 6, "\uCD6E\uCD70\uCD72", 5, "\uCD79", 7],
["ad61", "\uCD81", 6, "\uCD89", 10, "\uCD96\uCD97\uCD99\uCD9A\uCD9B\uCD9D\uCD9E\uCD9F"],
["ad81", "\uCDA0\uCDA1\uCDA2\uCDA3\uCDA6\uCDA8\uCDAA", 5, "\uCDB1", 18, "\uCDC5"],
["ae41", "\uCDC6", 5, "\uCDCD\uCDCE\uCDCF\uCDD1", 16],
["ae61", "\uCDE2", 5, "\uCDE9\uCDEA\uCDEB\uCDED\uCDEE\uCDEF\uCDF1", 6, "\uCDFA\uCDFC\uCDFE", 4],
["ae81", "\uCE03\uCE05\uCE06\uCE07\uCE09\uCE0A\uCE0B\uCE0D", 6, "\uCE15\uCE16\uCE17\uCE18\uCE1A", 5, "\uCE22\uCE23\uCE25\uCE26\uCE27\uCE29\uCE2A\uCE2B"],
["af41", "\uCE2C\uCE2D\uCE2E\uCE2F\uCE32\uCE34\uCE36", 19],
["af61", "\uCE4A", 13, "\uCE5A\uCE5B\uCE5D\uCE5E\uCE62", 5, "\uCE6A\uCE6C"],
["af81", "\uCE6E", 5, "\uCE76\uCE77\uCE79\uCE7A\uCE7B\uCE7D", 6, "\uCE86\uCE88\uCE8A", 5, "\uCE92\uCE93\uCE95\uCE96\uCE97\uCE99"],
["b041", "\uCE9A", 5, "\uCEA2\uCEA6", 5, "\uCEAE", 12],
["b061", "\uCEBB", 5, "\uCEC2", 19],
["b081", "\uCED6", 13, "\uCEE6\uCEE7\uCEE9\uCEEA\uCEED", 6, "\uCEF6\uCEFA", 5, "\uAC00\uAC01\uAC04\uAC07\uAC08\uAC09\uAC0A\uAC10", 7, "\uAC19", 4, "\uAC20\uAC24\uAC2C\uAC2D\uAC2F\uAC30\uAC31\uAC38\uAC39\uAC3C\uAC40\uAC4B\uAC4D\uAC54\uAC58\uAC5C\uAC70\uAC71\uAC74\uAC77\uAC78\uAC7A\uAC80\uAC81\uAC83\uAC84\uAC85\uAC86\uAC89\uAC8A\uAC8B\uAC8C\uAC90\uAC94\uAC9C\uAC9D\uAC9F\uACA0\uACA1\uACA8\uACA9\uACAA\uACAC\uACAF\uACB0\uACB8\uACB9\uACBB\uACBC\uACBD\uACC1\uACC4\uACC8\uACCC\uACD5\uACD7\uACE0\uACE1\uACE4\uACE7\uACE8\uACEA\uACEC\uACEF\uACF0\uACF1\uACF3\uACF5\uACF6\uACFC\uACFD\uAD00\uAD04\uAD06"],
["b141", "\uCF02\uCF03\uCF05\uCF06\uCF07\uCF09", 6, "\uCF12\uCF14\uCF16", 5, "\uCF1D\uCF1E\uCF1F\uCF21\uCF22\uCF23"],
["b161", "\uCF25", 6, "\uCF2E\uCF32", 5, "\uCF39", 11],
["b181", "\uCF45", 14, "\uCF56\uCF57\uCF59\uCF5A\uCF5B\uCF5D", 6, "\uCF66\uCF68\uCF6A\uCF6B\uCF6C\uAD0C\uAD0D\uAD0F\uAD11\uAD18\uAD1C\uAD20\uAD29\uAD2C\uAD2D\uAD34\uAD35\uAD38\uAD3C\uAD44\uAD45\uAD47\uAD49\uAD50\uAD54\uAD58\uAD61\uAD63\uAD6C\uAD6D\uAD70\uAD73\uAD74\uAD75\uAD76\uAD7B\uAD7C\uAD7D\uAD7F\uAD81\uAD82\uAD88\uAD89\uAD8C\uAD90\uAD9C\uAD9D\uADA4\uADB7\uADC0\uADC1\uADC4\uADC8\uADD0\uADD1\uADD3\uADDC\uADE0\uADE4\uADF8\uADF9\uADFC\uADFF\uAE00\uAE01\uAE08\uAE09\uAE0B\uAE0D\uAE14\uAE30\uAE31\uAE34\uAE37\uAE38\uAE3A\uAE40\uAE41\uAE43\uAE45\uAE46\uAE4A\uAE4C\uAE4D\uAE4E\uAE50\uAE54\uAE56\uAE5C\uAE5D\uAE5F\uAE60\uAE61\uAE65\uAE68\uAE69\uAE6C\uAE70\uAE78"],
["b241", "\uCF6D\uCF6E\uCF6F\uCF72\uCF73\uCF75\uCF76\uCF77\uCF79", 6, "\uCF81\uCF82\uCF83\uCF84\uCF86", 5, "\uCF8D"],
["b261", "\uCF8E", 18, "\uCFA2", 5, "\uCFA9"],
["b281", "\uCFAA", 5, "\uCFB1", 18, "\uCFC5", 6, "\uAE79\uAE7B\uAE7C\uAE7D\uAE84\uAE85\uAE8C\uAEBC\uAEBD\uAEBE\uAEC0\uAEC4\uAECC\uAECD\uAECF\uAED0\uAED1\uAED8\uAED9\uAEDC\uAEE8\uAEEB\uAEED\uAEF4\uAEF8\uAEFC\uAF07\uAF08\uAF0D\uAF10\uAF2C\uAF2D\uAF30\uAF32\uAF34\uAF3C\uAF3D\uAF3F\uAF41\uAF42\uAF43\uAF48\uAF49\uAF50\uAF5C\uAF5D\uAF64\uAF65\uAF79\uAF80\uAF84\uAF88\uAF90\uAF91\uAF95\uAF9C\uAFB8\uAFB9\uAFBC\uAFC0\uAFC7\uAFC8\uAFC9\uAFCB\uAFCD\uAFCE\uAFD4\uAFDC\uAFE8\uAFE9\uAFF0\uAFF1\uAFF4\uAFF8\uB000\uB001\uB004\uB00C\uB010\uB014\uB01C\uB01D\uB028\uB044\uB045\uB048\uB04A\uB04C\uB04E\uB053\uB054\uB055\uB057\uB059"],
["b341", "\uCFCC", 19, "\uCFE2\uCFE3\uCFE5\uCFE6\uCFE7\uCFE9"],
["b361", "\uCFEA", 5, "\uCFF2\uCFF4\uCFF6", 5, "\uCFFD\uCFFE\uCFFF\uD001\uD002\uD003\uD005", 5],
["b381", "\uD00B", 5, "\uD012", 5, "\uD019", 19, "\uB05D\uB07C\uB07D\uB080\uB084\uB08C\uB08D\uB08F\uB091\uB098\uB099\uB09A\uB09C\uB09F\uB0A0\uB0A1\uB0A2\uB0A8\uB0A9\uB0AB", 4, "\uB0B1\uB0B3\uB0B4\uB0B5\uB0B8\uB0BC\uB0C4\uB0C5\uB0C7\uB0C8\uB0C9\uB0D0\uB0D1\uB0D4\uB0D8\uB0E0\uB0E5\uB108\uB109\uB10B\uB10C\uB110\uB112\uB113\uB118\uB119\uB11B\uB11C\uB11D\uB123\uB124\uB125\uB128\uB12C\uB134\uB135\uB137\uB138\uB139\uB140\uB141\uB144\uB148\uB150\uB151\uB154\uB155\uB158\uB15C\uB160\uB178\uB179\uB17C\uB180\uB182\uB188\uB189\uB18B\uB18D\uB192\uB193\uB194\uB198\uB19C\uB1A8\uB1CC\uB1D0\uB1D4\uB1DC\uB1DD"],
["b441", "\uD02E", 5, "\uD036\uD037\uD039\uD03A\uD03B\uD03D", 6, "\uD046\uD048\uD04A", 5],
["b461", "\uD051\uD052\uD053\uD055\uD056\uD057\uD059", 6, "\uD061", 10, "\uD06E\uD06F"],
["b481", "\uD071\uD072\uD073\uD075", 6, "\uD07E\uD07F\uD080\uD082", 18, "\uB1DF\uB1E8\uB1E9\uB1EC\uB1F0\uB1F9\uB1FB\uB1FD\uB204\uB205\uB208\uB20B\uB20C\uB214\uB215\uB217\uB219\uB220\uB234\uB23C\uB258\uB25C\uB260\uB268\uB269\uB274\uB275\uB27C\uB284\uB285\uB289\uB290\uB291\uB294\uB298\uB299\uB29A\uB2A0\uB2A1\uB2A3\uB2A5\uB2A6\uB2AA\uB2AC\uB2B0\uB2B4\uB2C8\uB2C9\uB2CC\uB2D0\uB2D2\uB2D8\uB2D9\uB2DB\uB2DD\uB2E2\uB2E4\uB2E5\uB2E6\uB2E8\uB2EB", 4, "\uB2F3\uB2F4\uB2F5\uB2F7", 4, "\uB2FF\uB300\uB301\uB304\uB308\uB310\uB311\uB313\uB314\uB315\uB31C\uB354\uB355\uB356\uB358\uB35B\uB35C\uB35E\uB35F\uB364\uB365"],
["b541", "\uD095", 14, "\uD0A6\uD0A7\uD0A9\uD0AA\uD0AB\uD0AD", 5],
["b561", "\uD0B3\uD0B6\uD0B8\uD0BA", 5, "\uD0C2\uD0C3\uD0C5\uD0C6\uD0C7\uD0CA", 5, "\uD0D2\uD0D6", 4],
["b581", "\uD0DB\uD0DE\uD0DF\uD0E1\uD0E2\uD0E3\uD0E5", 6, "\uD0EE\uD0F2", 5, "\uD0F9", 11, "\uB367\uB369\uB36B\uB36E\uB370\uB371\uB374\uB378\uB380\uB381\uB383\uB384\uB385\uB38C\uB390\uB394\uB3A0\uB3A1\uB3A8\uB3AC\uB3C4\uB3C5\uB3C8\uB3CB\uB3CC\uB3CE\uB3D0\uB3D4\uB3D5\uB3D7\uB3D9\uB3DB\uB3DD\uB3E0\uB3E4\uB3E8\uB3FC\uB410\uB418\uB41C\uB420\uB428\uB429\uB42B\uB434\uB450\uB451\uB454\uB458\uB460\uB461\uB463\uB465\uB46C\uB480\uB488\uB49D\uB4A4\uB4A8\uB4AC\uB4B5\uB4B7\uB4B9\uB4C0\uB4C4\uB4C8\uB4D0\uB4D5\uB4DC\uB4DD\uB4E0\uB4E3\uB4E4\uB4E6\uB4EC\uB4ED\uB4EF\uB4F1\uB4F8\uB514\uB515\uB518\uB51B\uB51C\uB524\uB525\uB527\uB528\uB529\uB52A\uB530\uB531\uB534\uB538"],
["b641", "\uD105", 7, "\uD10E", 17],
["b661", "\uD120", 15, "\uD132\uD133\uD135\uD136\uD137\uD139\uD13B\uD13C\uD13D\uD13E"],
["b681", "\uD13F\uD142\uD146", 5, "\uD14E\uD14F\uD151\uD152\uD153\uD155", 6, "\uD15E\uD160\uD162", 5, "\uD169\uD16A\uD16B\uD16D\uB540\uB541\uB543\uB544\uB545\uB54B\uB54C\uB54D\uB550\uB554\uB55C\uB55D\uB55F\uB560\uB561\uB5A0\uB5A1\uB5A4\uB5A8\uB5AA\uB5AB\uB5B0\uB5B1\uB5B3\uB5B4\uB5B5\uB5BB\uB5BC\uB5BD\uB5C0\uB5C4\uB5CC\uB5CD\uB5CF\uB5D0\uB5D1\uB5D8\uB5EC\uB610\uB611\uB614\uB618\uB625\uB62C\uB634\uB648\uB664\uB668\uB69C\uB69D\uB6A0\uB6A4\uB6AB\uB6AC\uB6B1\uB6D4\uB6F0\uB6F4\uB6F8\uB700\uB701\uB705\uB728\uB729\uB72C\uB72F\uB730\uB738\uB739\uB73B\uB744\uB748\uB74C\uB754\uB755\uB760\uB764\uB768\uB770\uB771\uB773\uB775\uB77C\uB77D\uB780\uB784\uB78C\uB78D\uB78F\uB790\uB791\uB792\uB796\uB797"],
["b741", "\uD16E", 13, "\uD17D", 6, "\uD185\uD186\uD187\uD189\uD18A"],
["b761", "\uD18B", 20, "\uD1A2\uD1A3\uD1A5\uD1A6\uD1A7"],
["b781", "\uD1A9", 6, "\uD1B2\uD1B4\uD1B6\uD1B7\uD1B8\uD1B9\uD1BB\uD1BD\uD1BE\uD1BF\uD1C1", 14, "\uB798\uB799\uB79C\uB7A0\uB7A8\uB7A9\uB7AB\uB7AC\uB7AD\uB7B4\uB7B5\uB7B8\uB7C7\uB7C9\uB7EC\uB7ED\uB7F0\uB7F4\uB7FC\uB7FD\uB7FF\uB800\uB801\uB807\uB808\uB809\uB80C\uB810\uB818\uB819\uB81B\uB81D\uB824\uB825\uB828\uB82C\uB834\uB835\uB837\uB838\uB839\uB840\uB844\uB851\uB853\uB85C\uB85D\uB860\uB864\uB86C\uB86D\uB86F\uB871\uB878\uB87C\uB88D\uB8A8\uB8B0\uB8B4\uB8B8\uB8C0\uB8C1\uB8C3\uB8C5\uB8CC\uB8D0\uB8D4\uB8DD\uB8DF\uB8E1\uB8E8\uB8E9\uB8EC\uB8F0\uB8F8\uB8F9\uB8FB\uB8FD\uB904\uB918\uB920\uB93C\uB93D\uB940\uB944\uB94C\uB94F\uB951\uB958\uB959\uB95C\uB960\uB968\uB969"],
["b841", "\uD1D0", 7, "\uD1D9", 17],
["b861", "\uD1EB", 8, "\uD1F5\uD1F6\uD1F7\uD1F9", 13],
["b881", "\uD208\uD20A", 5, "\uD211", 24, "\uB96B\uB96D\uB974\uB975\uB978\uB97C\uB984\uB985\uB987\uB989\uB98A\uB98D\uB98E\uB9AC\uB9AD\uB9B0\uB9B4\uB9BC\uB9BD\uB9BF\uB9C1\uB9C8\uB9C9\uB9CC\uB9CE", 4, "\uB9D8\uB9D9\uB9DB\uB9DD\uB9DE\uB9E1\uB9E3\uB9E4\uB9E5\uB9E8\uB9EC\uB9F4\uB9F5\uB9F7\uB9F8\uB9F9\uB9FA\uBA00\uBA01\uBA08\uBA15\uBA38\uBA39\uBA3C\uBA40\uBA42\uBA48\uBA49\uBA4B\uBA4D\uBA4E\uBA53\uBA54\uBA55\uBA58\uBA5C\uBA64\uBA65\uBA67\uBA68\uBA69\uBA70\uBA71\uBA74\uBA78\uBA83\uBA84\uBA85\uBA87\uBA8C\uBAA8\uBAA9\uBAAB\uBAAC\uBAB0\uBAB2\uBAB8\uBAB9\uBABB\uBABD\uBAC4\uBAC8\uBAD8\uBAD9\uBAFC"],
["b941", "\uD22A\uD22B\uD22E\uD22F\uD231\uD232\uD233\uD235", 6, "\uD23E\uD240\uD242", 5, "\uD249\uD24A\uD24B\uD24C"],
["b961", "\uD24D", 14, "\uD25D", 6, "\uD265\uD266\uD267\uD268"],
["b981", "\uD269", 22, "\uD282\uD283\uD285\uD286\uD287\uD289\uD28A\uD28B\uD28C\uBB00\uBB04\uBB0D\uBB0F\uBB11\uBB18\uBB1C\uBB20\uBB29\uBB2B\uBB34\uBB35\uBB36\uBB38\uBB3B\uBB3C\uBB3D\uBB3E\uBB44\uBB45\uBB47\uBB49\uBB4D\uBB4F\uBB50\uBB54\uBB58\uBB61\uBB63\uBB6C\uBB88\uBB8C\uBB90\uBBA4\uBBA8\uBBAC\uBBB4\uBBB7\uBBC0\uBBC4\uBBC8\uBBD0\uBBD3\uBBF8\uBBF9\uBBFC\uBBFF\uBC00\uBC02\uBC08\uBC09\uBC0B\uBC0C\uBC0D\uBC0F\uBC11\uBC14", 4, "\uBC1B", 4, "\uBC24\uBC25\uBC27\uBC29\uBC2D\uBC30\uBC31\uBC34\uBC38\uBC40\uBC41\uBC43\uBC44\uBC45\uBC49\uBC4C\uBC4D\uBC50\uBC5D\uBC84\uBC85\uBC88\uBC8B\uBC8C\uBC8E\uBC94\uBC95\uBC97"],
["ba41", "\uD28D\uD28E\uD28F\uD292\uD293\uD294\uD296", 5, "\uD29D\uD29E\uD29F\uD2A1\uD2A2\uD2A3\uD2A5", 6, "\uD2AD"],
["ba61", "\uD2AE\uD2AF\uD2B0\uD2B2", 5, "\uD2BA\uD2BB\uD2BD\uD2BE\uD2C1\uD2C3", 4, "\uD2CA\uD2CC", 5],
["ba81", "\uD2D2\uD2D3\uD2D5\uD2D6\uD2D7\uD2D9\uD2DA\uD2DB\uD2DD", 6, "\uD2E6", 9, "\uD2F2\uD2F3\uD2F5\uD2F6\uD2F7\uD2F9\uD2FA\uBC99\uBC9A\uBCA0\uBCA1\uBCA4\uBCA7\uBCA8\uBCB0\uBCB1\uBCB3\uBCB4\uBCB5\uBCBC\uBCBD\uBCC0\uBCC4\uBCCD\uBCCF\uBCD0\uBCD1\uBCD5\uBCD8\uBCDC\uBCF4\uBCF5\uBCF6\uBCF8\uBCFC\uBD04\uBD05\uBD07\uBD09\uBD10\uBD14\uBD24\uBD2C\uBD40\uBD48\uBD49\uBD4C\uBD50\uBD58\uBD59\uBD64\uBD68\uBD80\uBD81\uBD84\uBD87\uBD88\uBD89\uBD8A\uBD90\uBD91\uBD93\uBD95\uBD99\uBD9A\uBD9C\uBDA4\uBDB0\uBDB8\uBDD4\uBDD5\uBDD8\uBDDC\uBDE9\uBDF0\uBDF4\uBDF8\uBE00\uBE03\uBE05\uBE0C\uBE0D\uBE10\uBE14\uBE1C\uBE1D\uBE1F\uBE44\uBE45\uBE48\uBE4C\uBE4E\uBE54\uBE55\uBE57\uBE59\uBE5A\uBE5B\uBE60\uBE61\uBE64"],
["bb41", "\uD2FB", 4, "\uD302\uD304\uD306", 5, "\uD30F\uD311\uD312\uD313\uD315\uD317", 4, "\uD31E\uD322\uD323"],
["bb61", "\uD324\uD326\uD327\uD32A\uD32B\uD32D\uD32E\uD32F\uD331", 6, "\uD33A\uD33E", 5, "\uD346\uD347\uD348\uD349"],
["bb81", "\uD34A", 31, "\uBE68\uBE6A\uBE70\uBE71\uBE73\uBE74\uBE75\uBE7B\uBE7C\uBE7D\uBE80\uBE84\uBE8C\uBE8D\uBE8F\uBE90\uBE91\uBE98\uBE99\uBEA8\uBED0\uBED1\uBED4\uBED7\uBED8\uBEE0\uBEE3\uBEE4\uBEE5\uBEEC\uBF01\uBF08\uBF09\uBF18\uBF19\uBF1B\uBF1C\uBF1D\uBF40\uBF41\uBF44\uBF48\uBF50\uBF51\uBF55\uBF94\uBFB0\uBFC5\uBFCC\uBFCD\uBFD0\uBFD4\uBFDC\uBFDF\uBFE1\uC03C\uC051\uC058\uC05C\uC060\uC068\uC069\uC090\uC091\uC094\uC098\uC0A0\uC0A1\uC0A3\uC0A5\uC0AC\uC0AD\uC0AF\uC0B0\uC0B3\uC0B4\uC0B5\uC0B6\uC0BC\uC0BD\uC0BF\uC0C0\uC0C1\uC0C5\uC0C8\uC0C9\uC0CC\uC0D0\uC0D8\uC0D9\uC0DB\uC0DC\uC0DD\uC0E4"],
["bc41", "\uD36A", 17, "\uD37E\uD37F\uD381\uD382\uD383\uD385\uD386\uD387"],
["bc61", "\uD388\uD389\uD38A\uD38B\uD38E\uD392", 5, "\uD39A\uD39B\uD39D\uD39E\uD39F\uD3A1", 6, "\uD3AA\uD3AC\uD3AE"],
["bc81", "\uD3AF", 4, "\uD3B5\uD3B6\uD3B7\uD3B9\uD3BA\uD3BB\uD3BD", 6, "\uD3C6\uD3C7\uD3CA", 5, "\uD3D1", 5, "\uC0E5\uC0E8\uC0EC\uC0F4\uC0F5\uC0F7\uC0F9\uC100\uC104\uC108\uC110\uC115\uC11C", 4, "\uC123\uC124\uC126\uC127\uC12C\uC12D\uC12F\uC130\uC131\uC136\uC138\uC139\uC13C\uC140\uC148\uC149\uC14B\uC14C\uC14D\uC154\uC155\uC158\uC15C\uC164\uC165\uC167\uC168\uC169\uC170\uC174\uC178\uC185\uC18C\uC18D\uC18E\uC190\uC194\uC196\uC19C\uC19D\uC19F\uC1A1\uC1A5\uC1A8\uC1A9\uC1AC\uC1B0\uC1BD\uC1C4\uC1C8\uC1CC\uC1D4\uC1D7\uC1D8\uC1E0\uC1E4\uC1E8\uC1F0\uC1F1\uC1F3\uC1FC\uC1FD\uC200\uC204\uC20C\uC20D\uC20F\uC211\uC218\uC219\uC21C\uC21F\uC220\uC228\uC229\uC22B\uC22D"],
["bd41", "\uD3D7\uD3D9", 7, "\uD3E2\uD3E4", 7, "\uD3EE\uD3EF\uD3F1\uD3F2\uD3F3\uD3F5\uD3F6\uD3F7"],
["bd61", "\uD3F8\uD3F9\uD3FA\uD3FB\uD3FE\uD400\uD402", 5, "\uD409", 13],
["bd81", "\uD417", 5, "\uD41E", 25, "\uC22F\uC231\uC232\uC234\uC248\uC250\uC251\uC254\uC258\uC260\uC265\uC26C\uC26D\uC270\uC274\uC27C\uC27D\uC27F\uC281\uC288\uC289\uC290\uC298\uC29B\uC29D\uC2A4\uC2A5\uC2A8\uC2AC\uC2AD\uC2B4\uC2B5\uC2B7\uC2B9\uC2DC\uC2DD\uC2E0\uC2E3\uC2E4\uC2EB\uC2EC\uC2ED\uC2EF\uC2F1\uC2F6\uC2F8\uC2F9\uC2FB\uC2FC\uC300\uC308\uC309\uC30C\uC30D\uC313\uC314\uC315\uC318\uC31C\uC324\uC325\uC328\uC329\uC345\uC368\uC369\uC36C\uC370\uC372\uC378\uC379\uC37C\uC37D\uC384\uC388\uC38C\uC3C0\uC3D8\uC3D9\uC3DC\uC3DF\uC3E0\uC3E2\uC3E8\uC3E9\uC3ED\uC3F4\uC3F5\uC3F8\uC408\uC410\uC424\uC42C\uC430"],
["be41", "\uD438", 7, "\uD441\uD442\uD443\uD445", 14],
["be61", "\uD454", 7, "\uD45D\uD45E\uD45F\uD461\uD462\uD463\uD465", 7, "\uD46E\uD470\uD471\uD472"],
["be81", "\uD473", 4, "\uD47A\uD47B\uD47D\uD47E\uD481\uD483", 4, "\uD48A\uD48C\uD48E", 5, "\uD495", 8, "\uC434\uC43C\uC43D\uC448\uC464\uC465\uC468\uC46C\uC474\uC475\uC479\uC480\uC494\uC49C\uC4B8\uC4BC\uC4E9\uC4F0\uC4F1\uC4F4\uC4F8\uC4FA\uC4FF\uC500\uC501\uC50C\uC510\uC514\uC51C\uC528\uC529\uC52C\uC530\uC538\uC539\uC53B\uC53D\uC544\uC545\uC548\uC549\uC54A\uC54C\uC54D\uC54E\uC553\uC554\uC555\uC557\uC558\uC559\uC55D\uC55E\uC560\uC561\uC564\uC568\uC570\uC571\uC573\uC574\uC575\uC57C\uC57D\uC580\uC584\uC587\uC58C\uC58D\uC58F\uC591\uC595\uC597\uC598\uC59C\uC5A0\uC5A9\uC5B4\uC5B5\uC5B8\uC5B9\uC5BB\uC5BC\uC5BD\uC5BE\uC5C4", 6, "\uC5CC\uC5CE"],
["bf41", "\uD49E", 10, "\uD4AA", 14],
["bf61", "\uD4B9", 18, "\uD4CD\uD4CE\uD4CF\uD4D1\uD4D2\uD4D3\uD4D5"],
["bf81", "\uD4D6", 5, "\uD4DD\uD4DE\uD4E0", 7, "\uD4E9\uD4EA\uD4EB\uD4ED\uD4EE\uD4EF\uD4F1", 6, "\uD4F9\uD4FA\uD4FC\uC5D0\uC5D1\uC5D4\uC5D8\uC5E0\uC5E1\uC5E3\uC5E5\uC5EC\uC5ED\uC5EE\uC5F0\uC5F4\uC5F6\uC5F7\uC5FC", 5, "\uC605\uC606\uC607\uC608\uC60C\uC610\uC618\uC619\uC61B\uC61C\uC624\uC625\uC628\uC62C\uC62D\uC62E\uC630\uC633\uC634\uC635\uC637\uC639\uC63B\uC640\uC641\uC644\uC648\uC650\uC651\uC653\uC654\uC655\uC65C\uC65D\uC660\uC66C\uC66F\uC671\uC678\uC679\uC67C\uC680\uC688\uC689\uC68B\uC68D\uC694\uC695\uC698\uC69C\uC6A4\uC6A5\uC6A7\uC6A9\uC6B0\uC6B1\uC6B4\uC6B8\uC6B9\uC6BA\uC6C0\uC6C1\uC6C3\uC6C5\uC6CC\uC6CD\uC6D0\uC6D4\uC6DC\uC6DD\uC6E0\uC6E1\uC6E8"],
["c041", "\uD4FE", 5, "\uD505\uD506\uD507\uD509\uD50A\uD50B\uD50D", 6, "\uD516\uD518", 5],
["c061", "\uD51E", 25],
["c081", "\uD538\uD539\uD53A\uD53B\uD53E\uD53F\uD541\uD542\uD543\uD545", 6, "\uD54E\uD550\uD552", 5, "\uD55A\uD55B\uD55D\uD55E\uD55F\uD561\uD562\uD563\uC6E9\uC6EC\uC6F0\uC6F8\uC6F9\uC6FD\uC704\uC705\uC708\uC70C\uC714\uC715\uC717\uC719\uC720\uC721\uC724\uC728\uC730\uC731\uC733\uC735\uC737\uC73C\uC73D\uC740\uC744\uC74A\uC74C\uC74D\uC74F\uC751", 7, "\uC75C\uC760\uC768\uC76B\uC774\uC775\uC778\uC77C\uC77D\uC77E\uC783\uC784\uC785\uC787\uC788\uC789\uC78A\uC78E\uC790\uC791\uC794\uC796\uC797\uC798\uC79A\uC7A0\uC7A1\uC7A3\uC7A4\uC7A5\uC7A6\uC7AC\uC7AD\uC7B0\uC7B4\uC7BC\uC7BD\uC7BF\uC7C0\uC7C1\uC7C8\uC7C9\uC7CC\uC7CE\uC7D0\uC7D8\uC7DD\uC7E4\uC7E8\uC7EC\uC800\uC801\uC804\uC808\uC80A"],
["c141", "\uD564\uD566\uD567\uD56A\uD56C\uD56E", 5, "\uD576\uD577\uD579\uD57A\uD57B\uD57D", 6, "\uD586\uD58A\uD58B"],
["c161", "\uD58C\uD58D\uD58E\uD58F\uD591", 19, "\uD5A6\uD5A7"],
["c181", "\uD5A8", 31, "\uC810\uC811\uC813\uC815\uC816\uC81C\uC81D\uC820\uC824\uC82C\uC82D\uC82F\uC831\uC838\uC83C\uC840\uC848\uC849\uC84C\uC84D\uC854\uC870\uC871\uC874\uC878\uC87A\uC880\uC881\uC883\uC885\uC886\uC887\uC88B\uC88C\uC88D\uC894\uC89D\uC89F\uC8A1\uC8A8\uC8BC\uC8BD\uC8C4\uC8C8\uC8CC\uC8D4\uC8D5\uC8D7\uC8D9\uC8E0\uC8E1\uC8E4\uC8F5\uC8FC\uC8FD\uC900\uC904\uC905\uC906\uC90C\uC90D\uC90F\uC911\uC918\uC92C\uC934\uC950\uC951\uC954\uC958\uC960\uC961\uC963\uC96C\uC970\uC974\uC97C\uC988\uC989\uC98C\uC990\uC998\uC999\uC99B\uC99D\uC9C0\uC9C1\uC9C4\uC9C7\uC9C8\uC9CA\uC9D0\uC9D1\uC9D3"],
["c241", "\uD5CA\uD5CB\uD5CD\uD5CE\uD5CF\uD5D1\uD5D3", 4, "\uD5DA\uD5DC\uD5DE", 5, "\uD5E6\uD5E7\uD5E9\uD5EA\uD5EB\uD5ED\uD5EE"],
["c261", "\uD5EF", 4, "\uD5F6\uD5F8\uD5FA", 5, "\uD602\uD603\uD605\uD606\uD607\uD609", 6, "\uD612"],
["c281", "\uD616", 5, "\uD61D\uD61E\uD61F\uD621\uD622\uD623\uD625", 7, "\uD62E", 9, "\uD63A\uD63B\uC9D5\uC9D6\uC9D9\uC9DA\uC9DC\uC9DD\uC9E0\uC9E2\uC9E4\uC9E7\uC9EC\uC9ED\uC9EF\uC9F0\uC9F1\uC9F8\uC9F9\uC9FC\uCA00\uCA08\uCA09\uCA0B\uCA0C\uCA0D\uCA14\uCA18\uCA29\uCA4C\uCA4D\uCA50\uCA54\uCA5C\uCA5D\uCA5F\uCA60\uCA61\uCA68\uCA7D\uCA84\uCA98\uCABC\uCABD\uCAC0\uCAC4\uCACC\uCACD\uCACF\uCAD1\uCAD3\uCAD8\uCAD9\uCAE0\uCAEC\uCAF4\uCB08\uCB10\uCB14\uCB18\uCB20\uCB21\uCB41\uCB48\uCB49\uCB4C\uCB50\uCB58\uCB59\uCB5D\uCB64\uCB78\uCB79\uCB9C\uCBB8\uCBD4\uCBE4\uCBE7\uCBE9\uCC0C\uCC0D\uCC10\uCC14\uCC1C\uCC1D\uCC21\uCC22\uCC27\uCC28\uCC29\uCC2C\uCC2E\uCC30\uCC38\uCC39\uCC3B"],
["c341", "\uD63D\uD63E\uD63F\uD641\uD642\uD643\uD644\uD646\uD647\uD64A\uD64C\uD64E\uD64F\uD650\uD652\uD653\uD656\uD657\uD659\uD65A\uD65B\uD65D", 4],
["c361", "\uD662", 4, "\uD668\uD66A", 5, "\uD672\uD673\uD675", 11],
["c381", "\uD681\uD682\uD684\uD686", 5, "\uD68E\uD68F\uD691\uD692\uD693\uD695", 7, "\uD69E\uD6A0\uD6A2", 5, "\uD6A9\uD6AA\uCC3C\uCC3D\uCC3E\uCC44\uCC45\uCC48\uCC4C\uCC54\uCC55\uCC57\uCC58\uCC59\uCC60\uCC64\uCC66\uCC68\uCC70\uCC75\uCC98\uCC99\uCC9C\uCCA0\uCCA8\uCCA9\uCCAB\uCCAC\uCCAD\uCCB4\uCCB5\uCCB8\uCCBC\uCCC4\uCCC5\uCCC7\uCCC9\uCCD0\uCCD4\uCCE4\uCCEC\uCCF0\uCD01\uCD08\uCD09\uCD0C\uCD10\uCD18\uCD19\uCD1B\uCD1D\uCD24\uCD28\uCD2C\uCD39\uCD5C\uCD60\uCD64\uCD6C\uCD6D\uCD6F\uCD71\uCD78\uCD88\uCD94\uCD95\uCD98\uCD9C\uCDA4\uCDA5\uCDA7\uCDA9\uCDB0\uCDC4\uCDCC\uCDD0\uCDE8\uCDEC\uCDF0\uCDF8\uCDF9\uCDFB\uCDFD\uCE04\uCE08\uCE0C\uCE14\uCE19\uCE20\uCE21\uCE24\uCE28\uCE30\uCE31\uCE33\uCE35"],
["c441", "\uD6AB\uD6AD\uD6AE\uD6AF\uD6B1", 7, "\uD6BA\uD6BC", 7, "\uD6C6\uD6C7\uD6C9\uD6CA\uD6CB"],
["c461", "\uD6CD\uD6CE\uD6CF\uD6D0\uD6D2\uD6D3\uD6D5\uD6D6\uD6D8\uD6DA", 5, "\uD6E1\uD6E2\uD6E3\uD6E5\uD6E6\uD6E7\uD6E9", 4],
["c481", "\uD6EE\uD6EF\uD6F1\uD6F2\uD6F3\uD6F4\uD6F6", 5, "\uD6FE\uD6FF\uD701\uD702\uD703\uD705", 11, "\uD712\uD713\uD714\uCE58\uCE59\uCE5C\uCE5F\uCE60\uCE61\uCE68\uCE69\uCE6B\uCE6D\uCE74\uCE75\uCE78\uCE7C\uCE84\uCE85\uCE87\uCE89\uCE90\uCE91\uCE94\uCE98\uCEA0\uCEA1\uCEA3\uCEA4\uCEA5\uCEAC\uCEAD\uCEC1\uCEE4\uCEE5\uCEE8\uCEEB\uCEEC\uCEF4\uCEF5\uCEF7\uCEF8\uCEF9\uCF00\uCF01\uCF04\uCF08\uCF10\uCF11\uCF13\uCF15\uCF1C\uCF20\uCF24\uCF2C\uCF2D\uCF2F\uCF30\uCF31\uCF38\uCF54\uCF55\uCF58\uCF5C\uCF64\uCF65\uCF67\uCF69\uCF70\uCF71\uCF74\uCF78\uCF80\uCF85\uCF8C\uCFA1\uCFA8\uCFB0\uCFC4\uCFE0\uCFE1\uCFE4\uCFE8\uCFF0\uCFF1\uCFF3\uCFF5\uCFFC\uD000\uD004\uD011\uD018\uD02D\uD034\uD035\uD038\uD03C"],
["c541", "\uD715\uD716\uD717\uD71A\uD71B\uD71D\uD71E\uD71F\uD721", 6, "\uD72A\uD72C\uD72E", 5, "\uD736\uD737\uD739"],
["c561", "\uD73A\uD73B\uD73D", 6, "\uD745\uD746\uD748\uD74A", 5, "\uD752\uD753\uD755\uD75A", 4],
["c581", "\uD75F\uD762\uD764\uD766\uD767\uD768\uD76A\uD76B\uD76D\uD76E\uD76F\uD771\uD772\uD773\uD775", 6, "\uD77E\uD77F\uD780\uD782", 5, "\uD78A\uD78B\uD044\uD045\uD047\uD049\uD050\uD054\uD058\uD060\uD06C\uD06D\uD070\uD074\uD07C\uD07D\uD081\uD0A4\uD0A5\uD0A8\uD0AC\uD0B4\uD0B5\uD0B7\uD0B9\uD0C0\uD0C1\uD0C4\uD0C8\uD0C9\uD0D0\uD0D1\uD0D3\uD0D4\uD0D5\uD0DC\uD0DD\uD0E0\uD0E4\uD0EC\uD0ED\uD0EF\uD0F0\uD0F1\uD0F8\uD10D\uD130\uD131\uD134\uD138\uD13A\uD140\uD141\uD143\uD144\uD145\uD14C\uD14D\uD150\uD154\uD15C\uD15D\uD15F\uD161\uD168\uD16C\uD17C\uD184\uD188\uD1A0\uD1A1\uD1A4\uD1A8\uD1B0\uD1B1\uD1B3\uD1B5\uD1BA\uD1BC\uD1C0\uD1D8\uD1F4\uD1F8\uD207\uD209\uD210\uD22C\uD22D\uD230\uD234\uD23C\uD23D\uD23F\uD241\uD248\uD25C"],
["c641", "\uD78D\uD78E\uD78F\uD791", 6, "\uD79A\uD79C\uD79E", 5],
["c6a1", "\uD264\uD280\uD281\uD284\uD288\uD290\uD291\uD295\uD29C\uD2A0\uD2A4\uD2AC\uD2B1\uD2B8\uD2B9\uD2BC\uD2BF\uD2C0\uD2C2\uD2C8\uD2C9\uD2CB\uD2D4\uD2D8\uD2DC\uD2E4\uD2E5\uD2F0\uD2F1\uD2F4\uD2F8\uD300\uD301\uD303\uD305\uD30C\uD30D\uD30E\uD310\uD314\uD316\uD31C\uD31D\uD31F\uD320\uD321\uD325\uD328\uD329\uD32C\uD330\uD338\uD339\uD33B\uD33C\uD33D\uD344\uD345\uD37C\uD37D\uD380\uD384\uD38C\uD38D\uD38F\uD390\uD391\uD398\uD399\uD39C\uD3A0\uD3A8\uD3A9\uD3AB\uD3AD\uD3B4\uD3B8\uD3BC\uD3C4\uD3C5\uD3C8\uD3C9\uD3D0\uD3D8\uD3E1\uD3E3\uD3EC\uD3ED\uD3F0\uD3F4\uD3FC\uD3FD\uD3FF\uD401"],
["c7a1", "\uD408\uD41D\uD440\uD444\uD45C\uD460\uD464\uD46D\uD46F\uD478\uD479\uD47C\uD47F\uD480\uD482\uD488\uD489\uD48B\uD48D\uD494\uD4A9\uD4CC\uD4D0\uD4D4\uD4DC\uD4DF\uD4E8\uD4EC\uD4F0\uD4F8\uD4FB\uD4FD\uD504\uD508\uD50C\uD514\uD515\uD517\uD53C\uD53D\uD540\uD544\uD54C\uD54D\uD54F\uD551\uD558\uD559\uD55C\uD560\uD565\uD568\uD569\uD56B\uD56D\uD574\uD575\uD578\uD57C\uD584\uD585\uD587\uD588\uD589\uD590\uD5A5\uD5C8\uD5C9\uD5CC\uD5D0\uD5D2\uD5D8\uD5D9\uD5DB\uD5DD\uD5E4\uD5E5\uD5E8\uD5EC\uD5F4\uD5F5\uD5F7\uD5F9\uD600\uD601\uD604\uD608\uD610\uD611\uD613\uD614\uD615\uD61C\uD620"],
["c8a1", "\uD624\uD62D\uD638\uD639\uD63C\uD640\uD645\uD648\uD649\uD64B\uD64D\uD651\uD654\uD655\uD658\uD65C\uD667\uD669\uD670\uD671\uD674\uD683\uD685\uD68C\uD68D\uD690\uD694\uD69D\uD69F\uD6A1\uD6A8\uD6AC\uD6B0\uD6B9\uD6BB\uD6C4\uD6C5\uD6C8\uD6CC\uD6D1\uD6D4\uD6D7\uD6D9\uD6E0\uD6E4\uD6E8\uD6F0\uD6F5\uD6FC\uD6FD\uD700\uD704\uD711\uD718\uD719\uD71C\uD720\uD728\uD729\uD72B\uD72D\uD734\uD735\uD738\uD73C\uD744\uD747\uD749\uD750\uD751\uD754\uD756\uD757\uD758\uD759\uD760\uD761\uD763\uD765\uD769\uD76C\uD770\uD774\uD77C\uD77D\uD781\uD788\uD789\uD78C\uD790\uD798\uD799\uD79B\uD79D"],
["caa1", "\u4F3D\u4F73\u5047\u50F9\u52A0\u53EF\u5475\u54E5\u5609\u5AC1\u5BB6\u6687\u67B6\u67B7\u67EF\u6B4C\u73C2\u75C2\u7A3C\u82DB\u8304\u8857\u8888\u8A36\u8CC8\u8DCF\u8EFB\u8FE6\u99D5\u523B\u5374\u5404\u606A\u6164\u6BBC\u73CF\u811A\u89BA\u89D2\u95A3\u4F83\u520A\u58BE\u5978\u59E6\u5E72\u5E79\u61C7\u63C0\u6746\u67EC\u687F\u6F97\u764E\u770B\u78F5\u7A08\u7AFF\u7C21\u809D\u826E\u8271\u8AEB\u9593\u4E6B\u559D\u66F7\u6E34\u78A3\u7AED\u845B\u8910\u874E\u97A8\u52D8\u574E\u582A\u5D4C\u611F\u61BE\u6221\u6562\u67D1\u6A44\u6E1B\u7518\u75B3\u76E3\u77B0\u7D3A\u90AF\u9451\u9452\u9F95"],
["cba1", "\u5323\u5CAC\u7532\u80DB\u9240\u9598\u525B\u5808\u59DC\u5CA1\u5D17\u5EB7\u5F3A\u5F4A\u6177\u6C5F\u757A\u7586\u7CE0\u7D73\u7DB1\u7F8C\u8154\u8221\u8591\u8941\u8B1B\u92FC\u964D\u9C47\u4ECB\u4EF7\u500B\u51F1\u584F\u6137\u613E\u6168\u6539\u69EA\u6F11\u75A5\u7686\u76D6\u7B87\u82A5\u84CB\uF900\u93A7\u958B\u5580\u5BA2\u5751\uF901\u7CB3\u7FB9\u91B5\u5028\u53BB\u5C45\u5DE8\u62D2\u636E\u64DA\u64E7\u6E20\u70AC\u795B\u8DDD\u8E1E\uF902\u907D\u9245\u92F8\u4E7E\u4EF6\u5065\u5DFE\u5EFA\u6106\u6957\u8171\u8654\u8E47\u9375\u9A2B\u4E5E\u5091\u6770\u6840\u5109\u528D\u5292\u6AA2"],
["cca1", "\u77BC\u9210\u9ED4\u52AB\u602F\u8FF2\u5048\u61A9\u63ED\u64CA\u683C\u6A84\u6FC0\u8188\u89A1\u9694\u5805\u727D\u72AC\u7504\u7D79\u7E6D\u80A9\u898B\u8B74\u9063\u9D51\u6289\u6C7A\u6F54\u7D50\u7F3A\u8A23\u517C\u614A\u7B9D\u8B19\u9257\u938C\u4EAC\u4FD3\u501E\u50BE\u5106\u52C1\u52CD\u537F\u5770\u5883\u5E9A\u5F91\u6176\u61AC\u64CE\u656C\u666F\u66BB\u66F4\u6897\u6D87\u7085\u70F1\u749F\u74A5\u74CA\u75D9\u786C\u78EC\u7ADF\u7AF6\u7D45\u7D93\u8015\u803F\u811B\u8396\u8B66\u8F15\u9015\u93E1\u9803\u9838\u9A5A\u9BE8\u4FC2\u5553\u583A\u5951\u5B63\u5C46\u60B8\u6212\u6842\u68B0"],
["cda1", "\u68E8\u6EAA\u754C\u7678\u78CE\u7A3D\u7CFB\u7E6B\u7E7C\u8A08\u8AA1\u8C3F\u968E\u9DC4\u53E4\u53E9\u544A\u5471\u56FA\u59D1\u5B64\u5C3B\u5EAB\u62F7\u6537\u6545\u6572\u66A0\u67AF\u69C1\u6CBD\u75FC\u7690\u777E\u7A3F\u7F94\u8003\u80A1\u818F\u82E6\u82FD\u83F0\u85C1\u8831\u88B4\u8AA5\uF903\u8F9C\u932E\u96C7\u9867\u9AD8\u9F13\u54ED\u659B\u66F2\u688F\u7A40\u8C37\u9D60\u56F0\u5764\u5D11\u6606\u68B1\u68CD\u6EFE\u7428\u889E\u9BE4\u6C68\uF904\u9AA8\u4F9B\u516C\u5171\u529F\u5B54\u5DE5\u6050\u606D\u62F1\u63A7\u653B\u73D9\u7A7A\u86A3\u8CA2\u978F\u4E32\u5BE1\u6208\u679C\u74DC"],
["cea1", "\u79D1\u83D3\u8A87\u8AB2\u8DE8\u904E\u934B\u9846\u5ED3\u69E8\u85FF\u90ED\uF905\u51A0\u5B98\u5BEC\u6163\u68FA\u6B3E\u704C\u742F\u74D8\u7BA1\u7F50\u83C5\u89C0\u8CAB\u95DC\u9928\u522E\u605D\u62EC\u9002\u4F8A\u5149\u5321\u58D9\u5EE3\u66E0\u6D38\u709A\u72C2\u73D6\u7B50\u80F1\u945B\u5366\u639B\u7F6B\u4E56\u5080\u584A\u58DE\u602A\u6127\u62D0\u69D0\u9B41\u5B8F\u7D18\u80B1\u8F5F\u4EA4\u50D1\u54AC\u55AC\u5B0C\u5DA0\u5DE7\u652A\u654E\u6821\u6A4B\u72E1\u768E\u77EF\u7D5E\u7FF9\u81A0\u854E\u86DF\u8F03\u8F4E\u90CA\u9903\u9A55\u9BAB\u4E18\u4E45\u4E5D\u4EC7\u4FF1\u5177\u52FE"],
["cfa1", "\u5340\u53E3\u53E5\u548E\u5614\u5775\u57A2\u5BC7\u5D87\u5ED0\u61FC\u62D8\u6551\u67B8\u67E9\u69CB\u6B50\u6BC6\u6BEC\u6C42\u6E9D\u7078\u72D7\u7396\u7403\u77BF\u77E9\u7A76\u7D7F\u8009\u81FC\u8205\u820A\u82DF\u8862\u8B33\u8CFC\u8EC0\u9011\u90B1\u9264\u92B6\u99D2\u9A45\u9CE9\u9DD7\u9F9C\u570B\u5C40\u83CA\u97A0\u97AB\u9EB4\u541B\u7A98\u7FA4\u88D9\u8ECD\u90E1\u5800\u5C48\u6398\u7A9F\u5BAE\u5F13\u7A79\u7AAE\u828E\u8EAC\u5026\u5238\u52F8\u5377\u5708\u62F3\u6372\u6B0A\u6DC3\u7737\u53A5\u7357\u8568\u8E76\u95D5\u673A\u6AC3\u6F70\u8A6D\u8ECC\u994B\uF906\u6677\u6B78\u8CB4"],
["d0a1", "\u9B3C\uF907\u53EB\u572D\u594E\u63C6\u69FB\u73EA\u7845\u7ABA\u7AC5\u7CFE\u8475\u898F\u8D73\u9035\u95A8\u52FB\u5747\u7547\u7B60\u83CC\u921E\uF908\u6A58\u514B\u524B\u5287\u621F\u68D8\u6975\u9699\u50C5\u52A4\u52E4\u61C3\u65A4\u6839\u69FF\u747E\u7B4B\u82B9\u83EB\u89B2\u8B39\u8FD1\u9949\uF909\u4ECA\u5997\u64D2\u6611\u6A8E\u7434\u7981\u79BD\u82A9\u887E\u887F\u895F\uF90A\u9326\u4F0B\u53CA\u6025\u6271\u6C72\u7D1A\u7D66\u4E98\u5162\u77DC\u80AF\u4F01\u4F0E\u5176\u5180\u55DC\u5668\u573B\u57FA\u57FC\u5914\u5947\u5993\u5BC4\u5C90\u5D0E\u5DF1\u5E7E\u5FCC\u6280\u65D7\u65E3"],
["d1a1", "\u671E\u671F\u675E\u68CB\u68C4\u6A5F\u6B3A\u6C23\u6C7D\u6C82\u6DC7\u7398\u7426\u742A\u7482\u74A3\u7578\u757F\u7881\u78EF\u7941\u7947\u7948\u797A\u7B95\u7D00\u7DBA\u7F88\u8006\u802D\u808C\u8A18\u8B4F\u8C48\u8D77\u9321\u9324\u98E2\u9951\u9A0E\u9A0F\u9A65\u9E92\u7DCA\u4F76\u5409\u62EE\u6854\u91D1\u55AB\u513A\uF90B\uF90C\u5A1C\u61E6\uF90D\u62CF\u62FF\uF90E", 5, "\u90A3\uF914", 4, "\u8AFE\uF919\uF91A\uF91B\uF91C\u6696\uF91D\u7156\uF91E\uF91F\u96E3\uF920\u634F\u637A\u5357\uF921\u678F\u6960\u6E73\uF922\u7537\uF923\uF924\uF925"],
["d2a1", "\u7D0D\uF926\uF927\u8872\u56CA\u5A18\uF928", 4, "\u4E43\uF92D\u5167\u5948\u67F0\u8010\uF92E\u5973\u5E74\u649A\u79CA\u5FF5\u606C\u62C8\u637B\u5BE7\u5BD7\u52AA\uF92F\u5974\u5F29\u6012\uF930\uF931\uF932\u7459\uF933", 5, "\u99D1\uF939", 10, "\u6FC3\uF944\uF945\u81BF\u8FB2\u60F1\uF946\uF947\u8166\uF948\uF949\u5C3F\uF94A", 7, "\u5AE9\u8A25\u677B\u7D10\uF952", 5, "\u80FD\uF958\uF959\u5C3C\u6CE5\u533F\u6EBA\u591A\u8336"],
["d3a1", "\u4E39\u4EB6\u4F46\u55AE\u5718\u58C7\u5F56\u65B7\u65E6\u6A80\u6BB5\u6E4D\u77ED\u7AEF\u7C1E\u7DDE\u86CB\u8892\u9132\u935B\u64BB\u6FBE\u737A\u75B8\u9054\u5556\u574D\u61BA\u64D4\u66C7\u6DE1\u6E5B\u6F6D\u6FB9\u75F0\u8043\u81BD\u8541\u8983\u8AC7\u8B5A\u931F\u6C93\u7553\u7B54\u8E0F\u905D\u5510\u5802\u5858\u5E62\u6207\u649E\u68E0\u7576\u7CD6\u87B3\u9EE8\u4EE3\u5788\u576E\u5927\u5C0D\u5CB1\u5E36\u5F85\u6234\u64E1\u73B3\u81FA\u888B\u8CB8\u968A\u9EDB\u5B85\u5FB7\u60B3\u5012\u5200\u5230\u5716\u5835\u5857\u5C0E\u5C60\u5CF6\u5D8B\u5EA6\u5F92\u60BC\u6311\u6389\u6417\u6843"],
["d4a1", "\u68F9\u6AC2\u6DD8\u6E21\u6ED4\u6FE4\u71FE\u76DC\u7779\u79B1\u7A3B\u8404\u89A9\u8CED\u8DF3\u8E48\u9003\u9014\u9053\u90FD\u934D\u9676\u97DC\u6BD2\u7006\u7258\u72A2\u7368\u7763\u79BF\u7BE4\u7E9B\u8B80\u58A9\u60C7\u6566\u65FD\u66BE\u6C8C\u711E\u71C9\u8C5A\u9813\u4E6D\u7A81\u4EDD\u51AC\u51CD\u52D5\u540C\u61A7\u6771\u6850\u68DF\u6D1E\u6F7C\u75BC\u77B3\u7AE5\u80F4\u8463\u9285\u515C\u6597\u675C\u6793\u75D8\u7AC7\u8373\uF95A\u8C46\u9017\u982D\u5C6F\u81C0\u829A\u9041\u906F\u920D\u5F97\u5D9D\u6A59\u71C8\u767B\u7B49\u85E4\u8B04\u9127\u9A30\u5587\u61F6\uF95B\u7669\u7F85"],
["d5a1", "\u863F\u87BA\u88F8\u908F\uF95C\u6D1B\u70D9\u73DE\u7D61\u843D\uF95D\u916A\u99F1\uF95E\u4E82\u5375\u6B04\u6B12\u703E\u721B\u862D\u9E1E\u524C\u8FA3\u5D50\u64E5\u652C\u6B16\u6FEB\u7C43\u7E9C\u85CD\u8964\u89BD\u62C9\u81D8\u881F\u5ECA\u6717\u6D6A\u72FC\u7405\u746F\u8782\u90DE\u4F86\u5D0D\u5FA0\u840A\u51B7\u63A0\u7565\u4EAE\u5006\u5169\u51C9\u6881\u6A11\u7CAE\u7CB1\u7CE7\u826F\u8AD2\u8F1B\u91CF\u4FB6\u5137\u52F5\u5442\u5EEC\u616E\u623E\u65C5\u6ADA\u6FFE\u792A\u85DC\u8823\u95AD\u9A62\u9A6A\u9E97\u9ECE\u529B\u66C6\u6B77\u701D\u792B\u8F62\u9742\u6190\u6200\u6523\u6F23"],
["d6a1", "\u7149\u7489\u7DF4\u806F\u84EE\u8F26\u9023\u934A\u51BD\u5217\u52A3\u6D0C\u70C8\u88C2\u5EC9\u6582\u6BAE\u6FC2\u7C3E\u7375\u4EE4\u4F36\u56F9\uF95F\u5CBA\u5DBA\u601C\u73B2\u7B2D\u7F9A\u7FCE\u8046\u901E\u9234\u96F6\u9748\u9818\u9F61\u4F8B\u6FA7\u79AE\u91B4\u96B7\u52DE\uF960\u6488\u64C4\u6AD3\u6F5E\u7018\u7210\u76E7\u8001\u8606\u865C\u8DEF\u8F05\u9732\u9B6F\u9DFA\u9E75\u788C\u797F\u7DA0\u83C9\u9304\u9E7F\u9E93\u8AD6\u58DF\u5F04\u6727\u7027\u74CF\u7C60\u807E\u5121\u7028\u7262\u78CA\u8CC2\u8CDA\u8CF4\u96F7\u4E86\u50DA\u5BEE\u5ED6\u6599\u71CE\u7642\u77AD\u804A\u84FC"],
["d7a1", "\u907C\u9B27\u9F8D\u58D8\u5A41\u5C62\u6A13\u6DDA\u6F0F\u763B\u7D2F\u7E37\u851E\u8938\u93E4\u964B\u5289\u65D2\u67F3\u69B4\u6D41\u6E9C\u700F\u7409\u7460\u7559\u7624\u786B\u8B2C\u985E\u516D\u622E\u9678\u4F96\u502B\u5D19\u6DEA\u7DB8\u8F2A\u5F8B\u6144\u6817\uF961\u9686\u52D2\u808B\u51DC\u51CC\u695E\u7A1C\u7DBE\u83F1\u9675\u4FDA\u5229\u5398\u540F\u550E\u5C65\u60A7\u674E\u68A8\u6D6C\u7281\u72F8\u7406\u7483\uF962\u75E2\u7C6C\u7F79\u7FB8\u8389\u88CF\u88E1\u91CC\u91D0\u96E2\u9BC9\u541D\u6F7E\u71D0\u7498\u85FA\u8EAA\u96A3\u9C57\u9E9F\u6797\u6DCB\u7433\u81E8\u9716\u782C"],
["d8a1", "\u7ACB\u7B20\u7C92\u6469\u746A\u75F2\u78BC\u78E8\u99AC\u9B54\u9EBB\u5BDE\u5E55\u6F20\u819C\u83AB\u9088\u4E07\u534D\u5A29\u5DD2\u5F4E\u6162\u633D\u6669\u66FC\u6EFF\u6F2B\u7063\u779E\u842C\u8513\u883B\u8F13\u9945\u9C3B\u551C\u62B9\u672B\u6CAB\u8309\u896A\u977A\u4EA1\u5984\u5FD8\u5FD9\u671B\u7DB2\u7F54\u8292\u832B\u83BD\u8F1E\u9099\u57CB\u59B9\u5A92\u5BD0\u6627\u679A\u6885\u6BCF\u7164\u7F75\u8CB7\u8CE3\u9081\u9B45\u8108\u8C8A\u964C\u9A40\u9EA5\u5B5F\u6C13\u731B\u76F2\u76DF\u840C\u51AA\u8993\u514D\u5195\u52C9\u68C9\u6C94\u7704\u7720\u7DBF\u7DEC\u9762\u9EB5\u6EC5"],
["d9a1", "\u8511\u51A5\u540D\u547D\u660E\u669D\u6927\u6E9F\u76BF\u7791\u8317\u84C2\u879F\u9169\u9298\u9CF4\u8882\u4FAE\u5192\u52DF\u59C6\u5E3D\u6155\u6478\u6479\u66AE\u67D0\u6A21\u6BCD\u6BDB\u725F\u7261\u7441\u7738\u77DB\u8017\u82BC\u8305\u8B00\u8B28\u8C8C\u6728\u6C90\u7267\u76EE\u7766\u7A46\u9DA9\u6B7F\u6C92\u5922\u6726\u8499\u536F\u5893\u5999\u5EDF\u63CF\u6634\u6773\u6E3A\u732B\u7AD7\u82D7\u9328\u52D9\u5DEB\u61AE\u61CB\u620A\u62C7\u64AB\u65E0\u6959\u6B66\u6BCB\u7121\u73F7\u755D\u7E46\u821E\u8302\u856A\u8AA3\u8CBF\u9727\u9D61\u58A8\u9ED8\u5011\u520E\u543B\u554F\u6587"],
["daa1", "\u6C76\u7D0A\u7D0B\u805E\u868A\u9580\u96EF\u52FF\u6C95\u7269\u5473\u5A9A\u5C3E\u5D4B\u5F4C\u5FAE\u672A\u68B6\u6963\u6E3C\u6E44\u7709\u7C73\u7F8E\u8587\u8B0E\u8FF7\u9761\u9EF4\u5CB7\u60B6\u610D\u61AB\u654F\u65FB\u65FC\u6C11\u6CEF\u739F\u73C9\u7DE1\u9594\u5BC6\u871C\u8B10\u525D\u535A\u62CD\u640F\u64B2\u6734\u6A38\u6CCA\u73C0\u749E\u7B94\u7C95\u7E1B\u818A\u8236\u8584\u8FEB\u96F9\u99C1\u4F34\u534A\u53CD\u53DB\u62CC\u642C\u6500\u6591\u69C3\u6CEE\u6F58\u73ED\u7554\u7622\u76E4\u76FC\u78D0\u78FB\u792C\u7D46\u822C\u87E0\u8FD4\u9812\u98EF\u52C3\u62D4\u64A5\u6E24\u6F51"],
["dba1", "\u767C\u8DCB\u91B1\u9262\u9AEE\u9B43\u5023\u508D\u574A\u59A8\u5C28\u5E47\u5F77\u623F\u653E\u65B9\u65C1\u6609\u678B\u699C\u6EC2\u78C5\u7D21\u80AA\u8180\u822B\u82B3\u84A1\u868C\u8A2A\u8B17\u90A6\u9632\u9F90\u500D\u4FF3\uF963\u57F9\u5F98\u62DC\u6392\u676F\u6E43\u7119\u76C3\u80CC\u80DA\u88F4\u88F5\u8919\u8CE0\u8F29\u914D\u966A\u4F2F\u4F70\u5E1B\u67CF\u6822\u767D\u767E\u9B44\u5E61\u6A0A\u7169\u71D4\u756A\uF964\u7E41\u8543\u85E9\u98DC\u4F10\u7B4F\u7F70\u95A5\u51E1\u5E06\u68B5\u6C3E\u6C4E\u6CDB\u72AF\u7BC4\u8303\u6CD5\u743A\u50FB\u5288\u58C1\u64D8\u6A97\u74A7\u7656"],
["dca1", "\u78A7\u8617\u95E2\u9739\uF965\u535E\u5F01\u8B8A\u8FA8\u8FAF\u908A\u5225\u77A5\u9C49\u9F08\u4E19\u5002\u5175\u5C5B\u5E77\u661E\u663A\u67C4\u68C5\u70B3\u7501\u75C5\u79C9\u7ADD\u8F27\u9920\u9A08\u4FDD\u5821\u5831\u5BF6\u666E\u6B65\u6D11\u6E7A\u6F7D\u73E4\u752B\u83E9\u88DC\u8913\u8B5C\u8F14\u4F0F\u50D5\u5310\u535C\u5B93\u5FA9\u670D\u798F\u8179\u832F\u8514\u8907\u8986\u8F39\u8F3B\u99A5\u9C12\u672C\u4E76\u4FF8\u5949\u5C01\u5CEF\u5CF0\u6367\u68D2\u70FD\u71A2\u742B\u7E2B\u84EC\u8702\u9022\u92D2\u9CF3\u4E0D\u4ED8\u4FEF\u5085\u5256\u526F\u5426\u5490\u57E0\u592B\u5A66"],
["dda1", "\u5B5A\u5B75\u5BCC\u5E9C\uF966\u6276\u6577\u65A7\u6D6E\u6EA5\u7236\u7B26\u7C3F\u7F36\u8150\u8151\u819A\u8240\u8299\u83A9\u8A03\u8CA0\u8CE6\u8CFB\u8D74\u8DBA\u90E8\u91DC\u961C\u9644\u99D9\u9CE7\u5317\u5206\u5429\u5674\u58B3\u5954\u596E\u5FFF\u61A4\u626E\u6610\u6C7E\u711A\u76C6\u7C89\u7CDE\u7D1B\u82AC\u8CC1\u96F0\uF967\u4F5B\u5F17\u5F7F\u62C2\u5D29\u670B\u68DA\u787C\u7E43\u9D6C\u4E15\u5099\u5315\u532A\u5351\u5983\u5A62\u5E87\u60B2\u618A\u6249\u6279\u6590\u6787\u69A7\u6BD4\u6BD6\u6BD7\u6BD8\u6CB8\uF968\u7435\u75FA\u7812\u7891\u79D5\u79D8\u7C83\u7DCB\u7FE1\u80A5"],
["dea1", "\u813E\u81C2\u83F2\u871A\u88E8\u8AB9\u8B6C\u8CBB\u9119\u975E\u98DB\u9F3B\u56AC\u5B2A\u5F6C\u658C\u6AB3\u6BAF\u6D5C\u6FF1\u7015\u725D\u73AD\u8CA7\u8CD3\u983B\u6191\u6C37\u8058\u9A01\u4E4D\u4E8B\u4E9B\u4ED5\u4F3A\u4F3C\u4F7F\u4FDF\u50FF\u53F2\u53F8\u5506\u55E3\u56DB\u58EB\u5962\u5A11\u5BEB\u5BFA\u5C04\u5DF3\u5E2B\u5F99\u601D\u6368\u659C\u65AF\u67F6\u67FB\u68AD\u6B7B\u6C99\u6CD7\u6E23\u7009\u7345\u7802\u793E\u7940\u7960\u79C1\u7BE9\u7D17\u7D72\u8086\u820D\u838E\u84D1\u86C7\u88DF\u8A50\u8A5E\u8B1D\u8CDC\u8D66\u8FAD\u90AA\u98FC\u99DF\u9E9D\u524A\uF969\u6714\uF96A"],
["dfa1", "\u5098\u522A\u5C71\u6563\u6C55\u73CA\u7523\u759D\u7B97\u849C\u9178\u9730\u4E77\u6492\u6BBA\u715E\u85A9\u4E09\uF96B\u6749\u68EE\u6E17\u829F\u8518\u886B\u63F7\u6F81\u9212\u98AF\u4E0A\u50B7\u50CF\u511F\u5546\u55AA\u5617\u5B40\u5C19\u5CE0\u5E38\u5E8A\u5EA0\u5EC2\u60F3\u6851\u6A61\u6E58\u723D\u7240\u72C0\u76F8\u7965\u7BB1\u7FD4\u88F3\u89F4\u8A73\u8C61\u8CDE\u971C\u585E\u74BD\u8CFD\u55C7\uF96C\u7A61\u7D22\u8272\u7272\u751F\u7525\uF96D\u7B19\u5885\u58FB\u5DBC\u5E8F\u5EB6\u5F90\u6055\u6292\u637F\u654D\u6691\u66D9\u66F8\u6816\u68F2\u7280\u745E\u7B6E\u7D6E\u7DD6\u7F72"],
["e0a1", "\u80E5\u8212\u85AF\u897F\u8A93\u901D\u92E4\u9ECD\u9F20\u5915\u596D\u5E2D\u60DC\u6614\u6673\u6790\u6C50\u6DC5\u6F5F\u77F3\u78A9\u84C6\u91CB\u932B\u4ED9\u50CA\u5148\u5584\u5B0B\u5BA3\u6247\u657E\u65CB\u6E32\u717D\u7401\u7444\u7487\u74BF\u766C\u79AA\u7DDA\u7E55\u7FA8\u817A\u81B3\u8239\u861A\u87EC\u8A75\u8DE3\u9078\u9291\u9425\u994D\u9BAE\u5368\u5C51\u6954\u6CC4\u6D29\u6E2B\u820C\u859B\u893B\u8A2D\u8AAA\u96EA\u9F67\u5261\u66B9\u6BB2\u7E96\u87FE\u8D0D\u9583\u965D\u651D\u6D89\u71EE\uF96E\u57CE\u59D3\u5BAC\u6027\u60FA\u6210\u661F\u665F\u7329\u73F9\u76DB\u7701\u7B6C"],
["e1a1", "\u8056\u8072\u8165\u8AA0\u9192\u4E16\u52E2\u6B72\u6D17\u7A05\u7B39\u7D30\uF96F\u8CB0\u53EC\u562F\u5851\u5BB5\u5C0F\u5C11\u5DE2\u6240\u6383\u6414\u662D\u68B3\u6CBC\u6D88\u6EAF\u701F\u70A4\u71D2\u7526\u758F\u758E\u7619\u7B11\u7BE0\u7C2B\u7D20\u7D39\u852C\u856D\u8607\u8A34\u900D\u9061\u90B5\u92B7\u97F6\u9A37\u4FD7\u5C6C\u675F\u6D91\u7C9F\u7E8C\u8B16\u8D16\u901F\u5B6B\u5DFD\u640D\u84C0\u905C\u98E1\u7387\u5B8B\u609A\u677E\u6DDE\u8A1F\u8AA6\u9001\u980C\u5237\uF970\u7051\u788E\u9396\u8870\u91D7\u4FEE\u53D7\u55FD\u56DA\u5782\u58FD\u5AC2\u5B88\u5CAB\u5CC0\u5E25\u6101"],
["e2a1", "\u620D\u624B\u6388\u641C\u6536\u6578\u6A39\u6B8A\u6C34\u6D19\u6F31\u71E7\u72E9\u7378\u7407\u74B2\u7626\u7761\u79C0\u7A57\u7AEA\u7CB9\u7D8F\u7DAC\u7E61\u7F9E\u8129\u8331\u8490\u84DA\u85EA\u8896\u8AB0\u8B90\u8F38\u9042\u9083\u916C\u9296\u92B9\u968B\u96A7\u96A8\u96D6\u9700\u9808\u9996\u9AD3\u9B1A\u53D4\u587E\u5919\u5B70\u5BBF\u6DD1\u6F5A\u719F\u7421\u74B9\u8085\u83FD\u5DE1\u5F87\u5FAA\u6042\u65EC\u6812\u696F\u6A53\u6B89\u6D35\u6DF3\u73E3\u76FE\u77AC\u7B4D\u7D14\u8123\u821C\u8340\u84F4\u8563\u8A62\u8AC4\u9187\u931E\u9806\u99B4\u620C\u8853\u8FF0\u9265\u5D07\u5D27"],
["e3a1", "\u5D69\u745F\u819D\u8768\u6FD5\u62FE\u7FD2\u8936\u8972\u4E1E\u4E58\u50E7\u52DD\u5347\u627F\u6607\u7E69\u8805\u965E\u4F8D\u5319\u5636\u59CB\u5AA4\u5C38\u5C4E\u5C4D\u5E02\u5F11\u6043\u65BD\u662F\u6642\u67BE\u67F4\u731C\u77E2\u793A\u7FC5\u8494\u84CD\u8996\u8A66\u8A69\u8AE1\u8C55\u8C7A\u57F4\u5BD4\u5F0F\u606F\u62ED\u690D\u6B96\u6E5C\u7184\u7BD2\u8755\u8B58\u8EFE\u98DF\u98FE\u4F38\u4F81\u4FE1\u547B\u5A20\u5BB8\u613C\u65B0\u6668\u71FC\u7533\u795E\u7D33\u814E\u81E3\u8398\u85AA\u85CE\u8703\u8A0A\u8EAB\u8F9B\uF971\u8FC5\u5931\u5BA4\u5BE6\u6089\u5BE9\u5C0B\u5FC3\u6C81"],
["e4a1", "\uF972\u6DF1\u700B\u751A\u82AF\u8AF6\u4EC0\u5341\uF973\u96D9\u6C0F\u4E9E\u4FC4\u5152\u555E\u5A25\u5CE8\u6211\u7259\u82BD\u83AA\u86FE\u8859\u8A1D\u963F\u96C5\u9913\u9D09\u9D5D\u580A\u5CB3\u5DBD\u5E44\u60E1\u6115\u63E1\u6A02\u6E25\u9102\u9354\u984E\u9C10\u9F77\u5B89\u5CB8\u6309\u664F\u6848\u773C\u96C1\u978D\u9854\u9B9F\u65A1\u8B01\u8ECB\u95BC\u5535\u5CA9\u5DD6\u5EB5\u6697\u764C\u83F4\u95C7\u58D3\u62BC\u72CE\u9D28\u4EF0\u592E\u600F\u663B\u6B83\u79E7\u9D26\u5393\u54C0\u57C3\u5D16\u611B\u66D6\u6DAF\u788D\u827E\u9698\u9744\u5384\u627C\u6396\u6DB2\u7E0A\u814B\u984D"],
["e5a1", "\u6AFB\u7F4C\u9DAF\u9E1A\u4E5F\u503B\u51B6\u591C\u60F9\u63F6\u6930\u723A\u8036\uF974\u91CE\u5F31\uF975\uF976\u7D04\u82E5\u846F\u84BB\u85E5\u8E8D\uF977\u4F6F\uF978\uF979\u58E4\u5B43\u6059\u63DA\u6518\u656D\u6698\uF97A\u694A\u6A23\u6D0B\u7001\u716C\u75D2\u760D\u79B3\u7A70\uF97B\u7F8A\uF97C\u8944\uF97D\u8B93\u91C0\u967D\uF97E\u990A\u5704\u5FA1\u65BC\u6F01\u7600\u79A6\u8A9E\u99AD\u9B5A\u9F6C\u5104\u61B6\u6291\u6A8D\u81C6\u5043\u5830\u5F66\u7109\u8A00\u8AFA\u5B7C\u8616\u4FFA\u513C\u56B4\u5944\u63A9\u6DF9\u5DAA\u696D\u5186\u4E88\u4F59\uF97F\uF980\uF981\u5982\uF982"],
["e6a1", "\uF983\u6B5F\u6C5D\uF984\u74B5\u7916\uF985\u8207\u8245\u8339\u8F3F\u8F5D\uF986\u9918\uF987\uF988\uF989\u4EA6\uF98A\u57DF\u5F79\u6613\uF98B\uF98C\u75AB\u7E79\u8B6F\uF98D\u9006\u9A5B\u56A5\u5827\u59F8\u5A1F\u5BB4\uF98E\u5EF6\uF98F\uF990\u6350\u633B\uF991\u693D\u6C87\u6CBF\u6D8E\u6D93\u6DF5\u6F14\uF992\u70DF\u7136\u7159\uF993\u71C3\u71D5\uF994\u784F\u786F\uF995\u7B75\u7DE3\uF996\u7E2F\uF997\u884D\u8EDF\uF998\uF999\uF99A\u925B\uF99B\u9CF6\uF99C\uF99D\uF99E\u6085\u6D85\uF99F\u71B1\uF9A0\uF9A1\u95B1\u53AD\uF9A2\uF9A3\uF9A4\u67D3\uF9A5\u708E\u7130\u7430\u8276\u82D2"],
["e7a1", "\uF9A6\u95BB\u9AE5\u9E7D\u66C4\uF9A7\u71C1\u8449\uF9A8\uF9A9\u584B\uF9AA\uF9AB\u5DB8\u5F71\uF9AC\u6620\u668E\u6979\u69AE\u6C38\u6CF3\u6E36\u6F41\u6FDA\u701B\u702F\u7150\u71DF\u7370\uF9AD\u745B\uF9AE\u74D4\u76C8\u7A4E\u7E93\uF9AF\uF9B0\u82F1\u8A60\u8FCE\uF9B1\u9348\uF9B2\u9719\uF9B3\uF9B4\u4E42\u502A\uF9B5\u5208\u53E1\u66F3\u6C6D\u6FCA\u730A\u777F\u7A62\u82AE\u85DD\u8602\uF9B6\u88D4\u8A63\u8B7D\u8C6B\uF9B7\u92B3\uF9B8\u9713\u9810\u4E94\u4F0D\u4FC9\u50B2\u5348\u543E\u5433\u55DA\u5862\u58BA\u5967\u5A1B\u5BE4\u609F\uF9B9\u61CA\u6556\u65FF\u6664\u68A7\u6C5A\u6FB3"],
["e8a1", "\u70CF\u71AC\u7352\u7B7D\u8708\u8AA4\u9C32\u9F07\u5C4B\u6C83\u7344\u7389\u923A\u6EAB\u7465\u761F\u7A69\u7E15\u860A\u5140\u58C5\u64C1\u74EE\u7515\u7670\u7FC1\u9095\u96CD\u9954\u6E26\u74E6\u7AA9\u7AAA\u81E5\u86D9\u8778\u8A1B\u5A49\u5B8C\u5B9B\u68A1\u6900\u6D63\u73A9\u7413\u742C\u7897\u7DE9\u7FEB\u8118\u8155\u839E\u8C4C\u962E\u9811\u66F0\u5F80\u65FA\u6789\u6C6A\u738B\u502D\u5A03\u6B6A\u77EE\u5916\u5D6C\u5DCD\u7325\u754F\uF9BA\uF9BB\u50E5\u51F9\u582F\u592D\u5996\u59DA\u5BE5\uF9BC\uF9BD\u5DA2\u62D7\u6416\u6493\u64FE\uF9BE\u66DC\uF9BF\u6A48\uF9C0\u71FF\u7464\uF9C1"],
["e9a1", "\u7A88\u7AAF\u7E47\u7E5E\u8000\u8170\uF9C2\u87EF\u8981\u8B20\u9059\uF9C3\u9080\u9952\u617E\u6B32\u6D74\u7E1F\u8925\u8FB1\u4FD1\u50AD\u5197\u52C7\u57C7\u5889\u5BB9\u5EB8\u6142\u6995\u6D8C\u6E67\u6EB6\u7194\u7462\u7528\u752C\u8073\u8338\u84C9\u8E0A\u9394\u93DE\uF9C4\u4E8E\u4F51\u5076\u512A\u53C8\u53CB\u53F3\u5B87\u5BD3\u5C24\u611A\u6182\u65F4\u725B\u7397\u7440\u76C2\u7950\u7991\u79B9\u7D06\u7FBD\u828B\u85D5\u865E\u8FC2\u9047\u90F5\u91EA\u9685\u96E8\u96E9\u52D6\u5F67\u65ED\u6631\u682F\u715C\u7A36\u90C1\u980A\u4E91\uF9C5\u6A52\u6B9E\u6F90\u7189\u8018\u82B8\u8553"],
["eaa1", "\u904B\u9695\u96F2\u97FB\u851A\u9B31\u4E90\u718A\u96C4\u5143\u539F\u54E1\u5713\u5712\u57A3\u5A9B\u5AC4\u5BC3\u6028\u613F\u63F4\u6C85\u6D39\u6E72\u6E90\u7230\u733F\u7457\u82D1\u8881\u8F45\u9060\uF9C6\u9662\u9858\u9D1B\u6708\u8D8A\u925E\u4F4D\u5049\u50DE\u5371\u570D\u59D4\u5A01\u5C09\u6170\u6690\u6E2D\u7232\u744B\u7DEF\u80C3\u840E\u8466\u853F\u875F\u885B\u8918\u8B02\u9055\u97CB\u9B4F\u4E73\u4F91\u5112\u516A\uF9C7\u552F\u55A9\u5B7A\u5BA5\u5E7C\u5E7D\u5EBE\u60A0\u60DF\u6108\u6109\u63C4\u6538\u6709\uF9C8\u67D4\u67DA\uF9C9\u6961\u6962\u6CB9\u6D27\uF9CA\u6E38\uF9CB"],
["eba1", "\u6FE1\u7336\u7337\uF9CC\u745C\u7531\uF9CD\u7652\uF9CE\uF9CF\u7DAD\u81FE\u8438\u88D5\u8A98\u8ADB\u8AED\u8E30\u8E42\u904A\u903E\u907A\u9149\u91C9\u936E\uF9D0\uF9D1\u5809\uF9D2\u6BD3\u8089\u80B2\uF9D3\uF9D4\u5141\u596B\u5C39\uF9D5\uF9D6\u6F64\u73A7\u80E4\u8D07\uF9D7\u9217\u958F\uF9D8\uF9D9\uF9DA\uF9DB\u807F\u620E\u701C\u7D68\u878D\uF9DC\u57A0\u6069\u6147\u6BB7\u8ABE\u9280\u96B1\u4E59\u541F\u6DEB\u852D\u9670\u97F3\u98EE\u63D6\u6CE3\u9091\u51DD\u61C9\u81BA\u9DF9\u4F9D\u501A\u5100\u5B9C\u610F\u61FF\u64EC\u6905\u6BC5\u7591\u77E3\u7FA9\u8264\u858F\u87FB\u8863\u8ABC"],
["eca1", "\u8B70\u91AB\u4E8C\u4EE5\u4F0A\uF9DD\uF9DE\u5937\u59E8\uF9DF\u5DF2\u5F1B\u5F5B\u6021\uF9E0\uF9E1\uF9E2\uF9E3\u723E\u73E5\uF9E4\u7570\u75CD\uF9E5\u79FB\uF9E6\u800C\u8033\u8084\u82E1\u8351\uF9E7\uF9E8\u8CBD\u8CB3\u9087\uF9E9\uF9EA\u98F4\u990C\uF9EB\uF9EC\u7037\u76CA\u7FCA\u7FCC\u7FFC\u8B1A\u4EBA\u4EC1\u5203\u5370\uF9ED\u54BD\u56E0\u59FB\u5BC5\u5F15\u5FCD\u6E6E\uF9EE\uF9EF\u7D6A\u8335\uF9F0\u8693\u8A8D\uF9F1\u976D\u9777\uF9F2\uF9F3\u4E00\u4F5A\u4F7E\u58F9\u65E5\u6EA2\u9038\u93B0\u99B9\u4EFB\u58EC\u598A\u59D9\u6041\uF9F4\uF9F5\u7A14\uF9F6\u834F\u8CC3\u5165\u5344"],
["eda1", "\uF9F7\uF9F8\uF9F9\u4ECD\u5269\u5B55\u82BF\u4ED4\u523A\u54A8\u59C9\u59FF\u5B50\u5B57\u5B5C\u6063\u6148\u6ECB\u7099\u716E\u7386\u74F7\u75B5\u78C1\u7D2B\u8005\u81EA\u8328\u8517\u85C9\u8AEE\u8CC7\u96CC\u4F5C\u52FA\u56BC\u65AB\u6628\u707C\u70B8\u7235\u7DBD\u828D\u914C\u96C0\u9D72\u5B71\u68E7\u6B98\u6F7A\u76DE\u5C91\u66AB\u6F5B\u7BB4\u7C2A\u8836\u96DC\u4E08\u4ED7\u5320\u5834\u58BB\u58EF\u596C\u5C07\u5E33\u5E84\u5F35\u638C\u66B2\u6756\u6A1F\u6AA3\u6B0C\u6F3F\u7246\uF9FA\u7350\u748B\u7AE0\u7CA7\u8178\u81DF\u81E7\u838A\u846C\u8523\u8594\u85CF\u88DD\u8D13\u91AC\u9577"],
["eea1", "\u969C\u518D\u54C9\u5728\u5BB0\u624D\u6750\u683D\u6893\u6E3D\u6ED3\u707D\u7E21\u88C1\u8CA1\u8F09\u9F4B\u9F4E\u722D\u7B8F\u8ACD\u931A\u4F47\u4F4E\u5132\u5480\u59D0\u5E95\u62B5\u6775\u696E\u6A17\u6CAE\u6E1A\u72D9\u732A\u75BD\u7BB8\u7D35\u82E7\u83F9\u8457\u85F7\u8A5B\u8CAF\u8E87\u9019\u90B8\u96CE\u9F5F\u52E3\u540A\u5AE1\u5BC2\u6458\u6575\u6EF4\u72C4\uF9FB\u7684\u7A4D\u7B1B\u7C4D\u7E3E\u7FDF\u837B\u8B2B\u8CCA\u8D64\u8DE1\u8E5F\u8FEA\u8FF9\u9069\u93D1\u4F43\u4F7A\u50B3\u5168\u5178\u524D\u526A\u5861\u587C\u5960\u5C08\u5C55\u5EDB\u609B\u6230\u6813\u6BBF\u6C08\u6FB1"],
["efa1", "\u714E\u7420\u7530\u7538\u7551\u7672\u7B4C\u7B8B\u7BAD\u7BC6\u7E8F\u8A6E\u8F3E\u8F49\u923F\u9293\u9322\u942B\u96FB\u985A\u986B\u991E\u5207\u622A\u6298\u6D59\u7664\u7ACA\u7BC0\u7D76\u5360\u5CBE\u5E97\u6F38\u70B9\u7C98\u9711\u9B8E\u9EDE\u63A5\u647A\u8776\u4E01\u4E95\u4EAD\u505C\u5075\u5448\u59C3\u5B9A\u5E40\u5EAD\u5EF7\u5F81\u60C5\u633A\u653F\u6574\u65CC\u6676\u6678\u67FE\u6968\u6A89\u6B63\u6C40\u6DC0\u6DE8\u6E1F\u6E5E\u701E\u70A1\u738E\u73FD\u753A\u775B\u7887\u798E\u7A0B\u7A7D\u7CBE\u7D8E\u8247\u8A02\u8AEA\u8C9E\u912D\u914A\u91D8\u9266\u92CC\u9320\u9706\u9756"],
["f0a1", "\u975C\u9802\u9F0E\u5236\u5291\u557C\u5824\u5E1D\u5F1F\u608C\u63D0\u68AF\u6FDF\u796D\u7B2C\u81CD\u85BA\u88FD\u8AF8\u8E44\u918D\u9664\u969B\u973D\u984C\u9F4A\u4FCE\u5146\u51CB\u52A9\u5632\u5F14\u5F6B\u63AA\u64CD\u65E9\u6641\u66FA\u66F9\u671D\u689D\u68D7\u69FD\u6F15\u6F6E\u7167\u71E5\u722A\u74AA\u773A\u7956\u795A\u79DF\u7A20\u7A95\u7C97\u7CDF\u7D44\u7E70\u8087\u85FB\u86A4\u8A54\u8ABF\u8D99\u8E81\u9020\u906D\u91E3\u963B\u96D5\u9CE5\u65CF\u7C07\u8DB3\u93C3\u5B58\u5C0A\u5352\u62D9\u731D\u5027\u5B97\u5F9E\u60B0\u616B\u68D5\u6DD9\u742E\u7A2E\u7D42\u7D9C\u7E31\u816B"],
["f1a1", "\u8E2A\u8E35\u937E\u9418\u4F50\u5750\u5DE6\u5EA7\u632B\u7F6A\u4E3B\u4F4F\u4F8F\u505A\u59DD\u80C4\u546A\u5468\u55FE\u594F\u5B99\u5DDE\u5EDA\u665D\u6731\u67F1\u682A\u6CE8\u6D32\u6E4A\u6F8D\u70B7\u73E0\u7587\u7C4C\u7D02\u7D2C\u7DA2\u821F\u86DB\u8A3B\u8A85\u8D70\u8E8A\u8F33\u9031\u914E\u9152\u9444\u99D0\u7AF9\u7CA5\u4FCA\u5101\u51C6\u57C8\u5BEF\u5CFB\u6659\u6A3D\u6D5A\u6E96\u6FEC\u710C\u756F\u7AE3\u8822\u9021\u9075\u96CB\u99FF\u8301\u4E2D\u4EF2\u8846\u91CD\u537D\u6ADB\u696B\u6C41\u847A\u589E\u618E\u66FE\u62EF\u70DD\u7511\u75C7\u7E52\u84B8\u8B49\u8D08\u4E4B\u53EA"],
["f2a1", "\u54AB\u5730\u5740\u5FD7\u6301\u6307\u646F\u652F\u65E8\u667A\u679D\u67B3\u6B62\u6C60\u6C9A\u6F2C\u77E5\u7825\u7949\u7957\u7D19\u80A2\u8102\u81F3\u829D\u82B7\u8718\u8A8C\uF9FC\u8D04\u8DBE\u9072\u76F4\u7A19\u7A37\u7E54\u8077\u5507\u55D4\u5875\u632F\u6422\u6649\u664B\u686D\u699B\u6B84\u6D25\u6EB1\u73CD\u7468\u74A1\u755B\u75B9\u76E1\u771E\u778B\u79E6\u7E09\u7E1D\u81FB\u852F\u8897\u8A3A\u8CD1\u8EEB\u8FB0\u9032\u93AD\u9663\u9673\u9707\u4F84\u53F1\u59EA\u5AC9\u5E19\u684E\u74C6\u75BE\u79E9\u7A92\u81A3\u86ED\u8CEA\u8DCC\u8FED\u659F\u6715\uF9FD\u57F7\u6F57\u7DDD\u8F2F"],
["f3a1", "\u93F6\u96C6\u5FB5\u61F2\u6F84\u4E14\u4F98\u501F\u53C9\u55DF\u5D6F\u5DEE\u6B21\u6B64\u78CB\u7B9A\uF9FE\u8E49\u8ECA\u906E\u6349\u643E\u7740\u7A84\u932F\u947F\u9F6A\u64B0\u6FAF\u71E6\u74A8\u74DA\u7AC4\u7C12\u7E82\u7CB2\u7E98\u8B9A\u8D0A\u947D\u9910\u994C\u5239\u5BDF\u64E6\u672D\u7D2E\u50ED\u53C3\u5879\u6158\u6159\u61FA\u65AC\u7AD9\u8B92\u8B96\u5009\u5021\u5275\u5531\u5A3C\u5EE0\u5F70\u6134\u655E\u660C\u6636\u66A2\u69CD\u6EC4\u6F32\u7316\u7621\u7A93\u8139\u8259\u83D6\u84BC\u50B5\u57F0\u5BC0\u5BE8\u5F69\u63A1\u7826\u7DB5\u83DC\u8521\u91C7\u91F5\u518A\u67F5\u7B56"],
["f4a1", "\u8CAC\u51C4\u59BB\u60BD\u8655\u501C\uF9FF\u5254\u5C3A\u617D\u621A\u62D3\u64F2\u65A5\u6ECC\u7620\u810A\u8E60\u965F\u96BB\u4EDF\u5343\u5598\u5929\u5DDD\u64C5\u6CC9\u6DFA\u7394\u7A7F\u821B\u85A6\u8CE4\u8E10\u9077\u91E7\u95E1\u9621\u97C6\u51F8\u54F2\u5586\u5FB9\u64A4\u6F88\u7DB4\u8F1F\u8F4D\u9435\u50C9\u5C16\u6CBE\u6DFB\u751B\u77BB\u7C3D\u7C64\u8A79\u8AC2\u581E\u59BE\u5E16\u6377\u7252\u758A\u776B\u8ADC\u8CBC\u8F12\u5EF3\u6674\u6DF8\u807D\u83C1\u8ACB\u9751\u9BD6\uFA00\u5243\u66FF\u6D95\u6EEF\u7DE0\u8AE6\u902E\u905E\u9AD4\u521D\u527F\u54E8\u6194\u6284\u62DB\u68A2"],
["f5a1", "\u6912\u695A\u6A35\u7092\u7126\u785D\u7901\u790E\u79D2\u7A0D\u8096\u8278\u82D5\u8349\u8549\u8C82\u8D85\u9162\u918B\u91AE\u4FC3\u56D1\u71ED\u77D7\u8700\u89F8\u5BF8\u5FD6\u6751\u90A8\u53E2\u585A\u5BF5\u60A4\u6181\u6460\u7E3D\u8070\u8525\u9283\u64AE\u50AC\u5D14\u6700\u589C\u62BD\u63A8\u690E\u6978\u6A1E\u6E6B\u76BA\u79CB\u82BB\u8429\u8ACF\u8DA8\u8FFD\u9112\u914B\u919C\u9310\u9318\u939A\u96DB\u9A36\u9C0D\u4E11\u755C\u795D\u7AFA\u7B51\u7BC9\u7E2E\u84C4\u8E59\u8E74\u8EF8\u9010\u6625\u693F\u7443\u51FA\u672E\u9EDC\u5145\u5FE0\u6C96\u87F2\u885D\u8877\u60B4\u81B5\u8403"],
["f6a1", "\u8D05\u53D6\u5439\u5634\u5A36\u5C31\u708A\u7FE0\u805A\u8106\u81ED\u8DA3\u9189\u9A5F\u9DF2\u5074\u4EC4\u53A0\u60FB\u6E2C\u5C64\u4F88\u5024\u55E4\u5CD9\u5E5F\u6065\u6894\u6CBB\u6DC4\u71BE\u75D4\u75F4\u7661\u7A1A\u7A49\u7DC7\u7DFB\u7F6E\u81F4\u86A9\u8F1C\u96C9\u99B3\u9F52\u5247\u52C5\u98ED\u89AA\u4E03\u67D2\u6F06\u4FB5\u5BE2\u6795\u6C88\u6D78\u741B\u7827\u91DD\u937C\u87C4\u79E4\u7A31\u5FEB\u4ED6\u54A4\u553E\u58AE\u59A5\u60F0\u6253\u62D6\u6736\u6955\u8235\u9640\u99B1\u99DD\u502C\u5353\u5544\u577C\uFA01\u6258\uFA02\u64E2\u666B\u67DD\u6FC1\u6FEF\u7422\u7438\u8A17"],
["f7a1", "\u9438\u5451\u5606\u5766\u5F48\u619A\u6B4E\u7058\u70AD\u7DBB\u8A95\u596A\u812B\u63A2\u7708\u803D\u8CAA\u5854\u642D\u69BB\u5B95\u5E11\u6E6F\uFA03\u8569\u514C\u53F0\u592A\u6020\u614B\u6B86\u6C70\u6CF0\u7B1E\u80CE\u82D4\u8DC6\u90B0\u98B1\uFA04\u64C7\u6FA4\u6491\u6504\u514E\u5410\u571F\u8A0E\u615F\u6876\uFA05\u75DB\u7B52\u7D71\u901A\u5806\u69CC\u817F\u892A\u9000\u9839\u5078\u5957\u59AC\u6295\u900F\u9B2A\u615D\u7279\u95D6\u5761\u5A46\u5DF4\u628A\u64AD\u64FA\u6777\u6CE2\u6D3E\u722C\u7436\u7834\u7F77\u82AD\u8DDB\u9817\u5224\u5742\u677F\u7248\u74E3\u8CA9\u8FA6\u9211"],
["f8a1", "\u962A\u516B\u53ED\u634C\u4F69\u5504\u6096\u6557\u6C9B\u6D7F\u724C\u72FD\u7A17\u8987\u8C9D\u5F6D\u6F8E\u70F9\u81A8\u610E\u4FBF\u504F\u6241\u7247\u7BC7\u7DE8\u7FE9\u904D\u97AD\u9A19\u8CB6\u576A\u5E73\u67B0\u840D\u8A55\u5420\u5B16\u5E63\u5EE2\u5F0A\u6583\u80BA\u853D\u9589\u965B\u4F48\u5305\u530D\u530F\u5486\u54FA\u5703\u5E03\u6016\u629B\u62B1\u6355\uFA06\u6CE1\u6D66\u75B1\u7832\u80DE\u812F\u82DE\u8461\u84B2\u888D\u8912\u900B\u92EA\u98FD\u9B91\u5E45\u66B4\u66DD\u7011\u7206\uFA07\u4FF5\u527D\u5F6A\u6153\u6753\u6A19\u6F02\u74E2\u7968\u8868\u8C79\u98C7\u98C4\u9A43"],
["f9a1", "\u54C1\u7A1F\u6953\u8AF7\u8C4A\u98A8\u99AE\u5F7C\u62AB\u75B2\u76AE\u88AB\u907F\u9642\u5339\u5F3C\u5FC5\u6CCC\u73CC\u7562\u758B\u7B46\u82FE\u999D\u4E4F\u903C\u4E0B\u4F55\u53A6\u590F\u5EC8\u6630\u6CB3\u7455\u8377\u8766\u8CC0\u9050\u971E\u9C15\u58D1\u5B78\u8650\u8B14\u9DB4\u5BD2\u6068\u608D\u65F1\u6C57\u6F22\u6FA3\u701A\u7F55\u7FF0\u9591\u9592\u9650\u97D3\u5272\u8F44\u51FD\u542B\u54B8\u5563\u558A\u6ABB\u6DB5\u7DD8\u8266\u929C\u9677\u9E79\u5408\u54C8\u76D2\u86E4\u95A4\u95D4\u965C\u4EA2\u4F09\u59EE\u5AE6\u5DF7\u6052\u6297\u676D\u6841\u6C86\u6E2F\u7F38\u809B\u822A"],
["faa1", "\uFA08\uFA09\u9805\u4EA5\u5055\u54B3\u5793\u595A\u5B69\u5BB3\u61C8\u6977\u6D77\u7023\u87F9\u89E3\u8A72\u8AE7\u9082\u99ED\u9AB8\u52BE\u6838\u5016\u5E78\u674F\u8347\u884C\u4EAB\u5411\u56AE\u73E6\u9115\u97FF\u9909\u9957\u9999\u5653\u589F\u865B\u8A31\u61B2\u6AF6\u737B\u8ED2\u6B47\u96AA\u9A57\u5955\u7200\u8D6B\u9769\u4FD4\u5CF4\u5F26\u61F8\u665B\u6CEB\u70AB\u7384\u73B9\u73FE\u7729\u774D\u7D43\u7D62\u7E23\u8237\u8852\uFA0A\u8CE2\u9249\u986F\u5B51\u7A74\u8840\u9801\u5ACC\u4FE0\u5354\u593E\u5CFD\u633E\u6D79\u72F9\u8105\u8107\u83A2\u92CF\u9830\u4EA8\u5144\u5211\u578B"],
["fba1", "\u5F62\u6CC2\u6ECE\u7005\u7050\u70AF\u7192\u73E9\u7469\u834A\u87A2\u8861\u9008\u90A2\u93A3\u99A8\u516E\u5F57\u60E0\u6167\u66B3\u8559\u8E4A\u91AF\u978B\u4E4E\u4E92\u547C\u58D5\u58FA\u597D\u5CB5\u5F27\u6236\u6248\u660A\u6667\u6BEB\u6D69\u6DCF\u6E56\u6EF8\u6F94\u6FE0\u6FE9\u705D\u72D0\u7425\u745A\u74E0\u7693\u795C\u7CCA\u7E1E\u80E1\u82A6\u846B\u84BF\u864E\u865F\u8774\u8B77\u8C6A\u93AC\u9800\u9865\u60D1\u6216\u9177\u5A5A\u660F\u6DF7\u6E3E\u743F\u9B42\u5FFD\u60DA\u7B0F\u54C4\u5F18\u6C5E\u6CD3\u6D2A\u70D8\u7D05\u8679\u8A0C\u9D3B\u5316\u548C\u5B05\u6A3A\u706B\u7575"],
["fca1", "\u798D\u79BE\u82B1\u83EF\u8A71\u8B41\u8CA8\u9774\uFA0B\u64F4\u652B\u78BA\u78BB\u7A6B\u4E38\u559A\u5950\u5BA6\u5E7B\u60A3\u63DB\u6B61\u6665\u6853\u6E19\u7165\u74B0\u7D08\u9084\u9A69\u9C25\u6D3B\u6ED1\u733E\u8C41\u95CA\u51F0\u5E4C\u5FA8\u604D\u60F6\u6130\u614C\u6643\u6644\u69A5\u6CC1\u6E5F\u6EC9\u6F62\u714C\u749C\u7687\u7BC1\u7C27\u8352\u8757\u9051\u968D\u9EC3\u532F\u56DE\u5EFB\u5F8A\u6062\u6094\u61F7\u6666\u6703\u6A9C\u6DEE\u6FAE\u7070\u736A\u7E6A\u81BE\u8334\u86D4\u8AA8\u8CC4\u5283\u7372\u5B96\u6A6B\u9404\u54EE\u5686\u5B5D\u6548\u6585\u66C9\u689F\u6D8D\u6DC6"],
["fda1", "\u723B\u80B4\u9175\u9A4D\u4FAF\u5019\u539A\u540E\u543C\u5589\u55C5\u5E3F\u5F8C\u673D\u7166\u73DD\u9005\u52DB\u52F3\u5864\u58CE\u7104\u718F\u71FB\u85B0\u8A13\u6688\u85A8\u55A7\u6684\u714A\u8431\u5349\u5599\u6BC1\u5F59\u5FBD\u63EE\u6689\u7147\u8AF1\u8F1D\u9EBE\u4F11\u643A\u70CB\u7566\u8667\u6064\u8B4E\u9DF8\u5147\u51F6\u5308\u6D36\u80F8\u9ED1\u6615\u6B23\u7098\u75D5\u5403\u5C79\u7D07\u8A16\u6B20\u6B3D\u6B46\u5438\u6070\u6D3D\u7FD5\u8208\u50D6\u51DE\u559C\u566B\u56CD\u59EC\u5B09\u5E0C\u6199\u6198\u6231\u665E\u66E6\u7199\u71B9\u71BA\u72A7\u79A7\u7A00\u7FB2\u8A70"]
];
}
});
var require_cp95022 = __commonJS2({
"node_modules/body-parser/node_modules/iconv-lite/encodings/tables/cp950.json"(exports2, module2) {
module2.exports = [
["0", "\0", 127],
["a140", "\u3000\uFF0C\u3001\u3002\uFF0E\u2027\uFF1B\uFF1A\uFF1F\uFF01\uFE30\u2026\u2025\uFE50\uFE51\uFE52\xB7\uFE54\uFE55\uFE56\uFE57\uFF5C\u2013\uFE31\u2014\uFE33\u2574\uFE34\uFE4F\uFF08\uFF09\uFE35\uFE36\uFF5B\uFF5D\uFE37\uFE38\u3014\u3015\uFE39\uFE3A\u3010\u3011\uFE3B\uFE3C\u300A\u300B\uFE3D\uFE3E\u3008\u3009\uFE3F\uFE40\u300C\u300D\uFE41\uFE42\u300E\u300F\uFE43\uFE44\uFE59\uFE5A"],
["a1a1", "\uFE5B\uFE5C\uFE5D\uFE5E\u2018\u2019\u201C\u201D\u301D\u301E\u2035\u2032\uFF03\uFF06\uFF0A\u203B\xA7\u3003\u25CB\u25CF\u25B3\u25B2\u25CE\u2606\u2605\u25C7\u25C6\u25A1\u25A0\u25BD\u25BC\u32A3\u2105\xAF\uFFE3\uFF3F\u02CD\uFE49\uFE4A\uFE4D\uFE4E\uFE4B\uFE4C\uFE5F\uFE60\uFE61\uFF0B\uFF0D\xD7\xF7\xB1\u221A\uFF1C\uFF1E\uFF1D\u2266\u2267\u2260\u221E\u2252\u2261\uFE62", 4, "\uFF5E\u2229\u222A\u22A5\u2220\u221F\u22BF\u33D2\u33D1\u222B\u222E\u2235\u2234\u2640\u2642\u2295\u2299\u2191\u2193\u2190\u2192\u2196\u2197\u2199\u2198\u2225\u2223\uFF0F"],
["a240", "\uFF3C\u2215\uFE68\uFF04\uFFE5\u3012\uFFE0\uFFE1\uFF05\uFF20\u2103\u2109\uFE69\uFE6A\uFE6B\u33D5\u339C\u339D\u339E\u33CE\u33A1\u338E\u338F\u33C4\xB0\u5159\u515B\u515E\u515D\u5161\u5163\u55E7\u74E9\u7CCE\u2581", 7, "\u258F\u258E\u258D\u258C\u258B\u258A\u2589\u253C\u2534\u252C\u2524\u251C\u2594\u2500\u2502\u2595\u250C\u2510\u2514\u2518\u256D"],
["a2a1", "\u256E\u2570\u256F\u2550\u255E\u256A\u2561\u25E2\u25E3\u25E5\u25E4\u2571\u2572\u2573\uFF10", 9, "\u2160", 9, "\u3021", 8, "\u5341\u5344\u5345\uFF21", 25, "\uFF41", 21],
["a340", "\uFF57\uFF58\uFF59\uFF5A\u0391", 16, "\u03A3", 6, "\u03B1", 16, "\u03C3", 6, "\u3105", 10],
["a3a1", "\u3110", 25, "\u02D9\u02C9\u02CA\u02C7\u02CB"],
["a3e1", "\u20AC"],
["a440", "\u4E00\u4E59\u4E01\u4E03\u4E43\u4E5D\u4E86\u4E8C\u4EBA\u513F\u5165\u516B\u51E0\u5200\u5201\u529B\u5315\u5341\u535C\u53C8\u4E09\u4E0B\u4E08\u4E0A\u4E2B\u4E38\u51E1\u4E45\u4E48\u4E5F\u4E5E\u4E8E\u4EA1\u5140\u5203\u52FA\u5343\u53C9\u53E3\u571F\u58EB\u5915\u5927\u5973\u5B50\u5B51\u5B53\u5BF8\u5C0F\u5C22\u5C38\u5C71\u5DDD\u5DE5\u5DF1\u5DF2\u5DF3\u5DFE\u5E72\u5EFE\u5F0B\u5F13\u624D"],
["a4a1", "\u4E11\u4E10\u4E0D\u4E2D\u4E30\u4E39\u4E4B\u5C39\u4E88\u4E91\u4E95\u4E92\u4E94\u4EA2\u4EC1\u4EC0\u4EC3\u4EC6\u4EC7\u4ECD\u4ECA\u4ECB\u4EC4\u5143\u5141\u5167\u516D\u516E\u516C\u5197\u51F6\u5206\u5207\u5208\u52FB\u52FE\u52FF\u5316\u5339\u5348\u5347\u5345\u535E\u5384\u53CB\u53CA\u53CD\u58EC\u5929\u592B\u592A\u592D\u5B54\u5C11\u5C24\u5C3A\u5C6F\u5DF4\u5E7B\u5EFF\u5F14\u5F15\u5FC3\u6208\u6236\u624B\u624E\u652F\u6587\u6597\u65A4\u65B9\u65E5\u66F0\u6708\u6728\u6B20\u6B62\u6B79\u6BCB\u6BD4\u6BDB\u6C0F\u6C34\u706B\u722A\u7236\u723B\u7247\u7259\u725B\u72AC\u738B\u4E19"],
["a540", "\u4E16\u4E15\u4E14\u4E18\u4E3B\u4E4D\u4E4F\u4E4E\u4EE5\u4ED8\u4ED4\u4ED5\u4ED6\u4ED7\u4EE3\u4EE4\u4ED9\u4EDE\u5145\u5144\u5189\u518A\u51AC\u51F9\u51FA\u51F8\u520A\u52A0\u529F\u5305\u5306\u5317\u531D\u4EDF\u534A\u5349\u5361\u5360\u536F\u536E\u53BB\u53EF\u53E4\u53F3\u53EC\u53EE\u53E9\u53E8\u53FC\u53F8\u53F5\u53EB\u53E6\u53EA\u53F2\u53F1\u53F0\u53E5\u53ED\u53FB\u56DB\u56DA\u5916"],
["a5a1", "\u592E\u5931\u5974\u5976\u5B55\u5B83\u5C3C\u5DE8\u5DE7\u5DE6\u5E02\u5E03\u5E73\u5E7C\u5F01\u5F18\u5F17\u5FC5\u620A\u6253\u6254\u6252\u6251\u65A5\u65E6\u672E\u672C\u672A\u672B\u672D\u6B63\u6BCD\u6C11\u6C10\u6C38\u6C41\u6C40\u6C3E\u72AF\u7384\u7389\u74DC\u74E6\u7518\u751F\u7528\u7529\u7530\u7531\u7532\u7533\u758B\u767D\u76AE\u76BF\u76EE\u77DB\u77E2\u77F3\u793A\u79BE\u7A74\u7ACB\u4E1E\u4E1F\u4E52\u4E53\u4E69\u4E99\u4EA4\u4EA6\u4EA5\u4EFF\u4F09\u4F19\u4F0A\u4F15\u4F0D\u4F10\u4F11\u4F0F\u4EF2\u4EF6\u4EFB\u4EF0\u4EF3\u4EFD\u4F01\u4F0B\u5149\u5147\u5146\u5148\u5168"],
["a640", "\u5171\u518D\u51B0\u5217\u5211\u5212\u520E\u5216\u52A3\u5308\u5321\u5320\u5370\u5371\u5409\u540F\u540C\u540A\u5410\u5401\u540B\u5404\u5411\u540D\u5408\u5403\u540E\u5406\u5412\u56E0\u56DE\u56DD\u5733\u5730\u5728\u572D\u572C\u572F\u5729\u5919\u591A\u5937\u5938\u5984\u5978\u5983\u597D\u5979\u5982\u5981\u5B57\u5B58\u5B87\u5B88\u5B85\u5B89\u5BFA\u5C16\u5C79\u5DDE\u5E06\u5E76\u5E74"],
["a6a1", "\u5F0F\u5F1B\u5FD9\u5FD6\u620E\u620C\u620D\u6210\u6263\u625B\u6258\u6536\u65E9\u65E8\u65EC\u65ED\u66F2\u66F3\u6709\u673D\u6734\u6731\u6735\u6B21\u6B64\u6B7B\u6C16\u6C5D\u6C57\u6C59\u6C5F\u6C60\u6C50\u6C55\u6C61\u6C5B\u6C4D\u6C4E\u7070\u725F\u725D\u767E\u7AF9\u7C73\u7CF8\u7F36\u7F8A\u7FBD\u8001\u8003\u800C\u8012\u8033\u807F\u8089\u808B\u808C\u81E3\u81EA\u81F3\u81FC\u820C\u821B\u821F\u826E\u8272\u827E\u866B\u8840\u884C\u8863\u897F\u9621\u4E32\u4EA8\u4F4D\u4F4F\u4F47\u4F57\u4F5E\u4F34\u4F5B\u4F55\u4F30\u4F50\u4F51\u4F3D\u4F3A\u4F38\u4F43\u4F54\u4F3C\u4F46\u4F63"],
["a740", "\u4F5C\u4F60\u4F2F\u4F4E\u4F36\u4F59\u4F5D\u4F48\u4F5A\u514C\u514B\u514D\u5175\u51B6\u51B7\u5225\u5224\u5229\u522A\u5228\u52AB\u52A9\u52AA\u52AC\u5323\u5373\u5375\u541D\u542D\u541E\u543E\u5426\u544E\u5427\u5446\u5443\u5433\u5448\u5442\u541B\u5429\u544A\u5439\u543B\u5438\u542E\u5435\u5436\u5420\u543C\u5440\u5431\u542B\u541F\u542C\u56EA\u56F0\u56E4\u56EB\u574A\u5751\u5740\u574D"],
["a7a1", "\u5747\u574E\u573E\u5750\u574F\u573B\u58EF\u593E\u599D\u5992\u59A8\u599E\u59A3\u5999\u5996\u598D\u59A4\u5993\u598A\u59A5\u5B5D\u5B5C\u5B5A\u5B5B\u5B8C\u5B8B\u5B8F\u5C2C\u5C40\u5C41\u5C3F\u5C3E\u5C90\u5C91\u5C94\u5C8C\u5DEB\u5E0C\u5E8F\u5E87\u5E8A\u5EF7\u5F04\u5F1F\u5F64\u5F62\u5F77\u5F79\u5FD8\u5FCC\u5FD7\u5FCD\u5FF1\u5FEB\u5FF8\u5FEA\u6212\u6211\u6284\u6297\u6296\u6280\u6276\u6289\u626D\u628A\u627C\u627E\u6279\u6273\u6292\u626F\u6298\u626E\u6295\u6293\u6291\u6286\u6539\u653B\u6538\u65F1\u66F4\u675F\u674E\u674F\u6750\u6751\u675C\u6756\u675E\u6749\u6746\u6760"],
["a840", "\u6753\u6757\u6B65\u6BCF\u6C42\u6C5E\u6C99\u6C81\u6C88\u6C89\u6C85\u6C9B\u6C6A\u6C7A\u6C90\u6C70\u6C8C\u6C68\u6C96\u6C92\u6C7D\u6C83\u6C72\u6C7E\u6C74\u6C86\u6C76\u6C8D\u6C94\u6C98\u6C82\u7076\u707C\u707D\u7078\u7262\u7261\u7260\u72C4\u72C2\u7396\u752C\u752B\u7537\u7538\u7682\u76EF\u77E3\u79C1\u79C0\u79BF\u7A76\u7CFB\u7F55\u8096\u8093\u809D\u8098\u809B\u809A\u80B2\u826F\u8292"],
["a8a1", "\u828B\u828D\u898B\u89D2\u8A00\u8C37\u8C46\u8C55\u8C9D\u8D64\u8D70\u8DB3\u8EAB\u8ECA\u8F9B\u8FB0\u8FC2\u8FC6\u8FC5\u8FC4\u5DE1\u9091\u90A2\u90AA\u90A6\u90A3\u9149\u91C6\u91CC\u9632\u962E\u9631\u962A\u962C\u4E26\u4E56\u4E73\u4E8B\u4E9B\u4E9E\u4EAB\u4EAC\u4F6F\u4F9D\u4F8D\u4F73\u4F7F\u4F6C\u4F9B\u4F8B\u4F86\u4F83\u4F70\u4F75\u4F88\u4F69\u4F7B\u4F96\u4F7E\u4F8F\u4F91\u4F7A\u5154\u5152\u5155\u5169\u5177\u5176\u5178\u51BD\u51FD\u523B\u5238\u5237\u523A\u5230\u522E\u5236\u5241\u52BE\u52BB\u5352\u5354\u5353\u5351\u5366\u5377\u5378\u5379\u53D6\u53D4\u53D7\u5473\u5475"],
["a940", "\u5496\u5478\u5495\u5480\u547B\u5477\u5484\u5492\u5486\u547C\u5490\u5471\u5476\u548C\u549A\u5462\u5468\u548B\u547D\u548E\u56FA\u5783\u5777\u576A\u5769\u5761\u5766\u5764\u577C\u591C\u5949\u5947\u5948\u5944\u5954\u59BE\u59BB\u59D4\u59B9\u59AE\u59D1\u59C6\u59D0\u59CD\u59CB\u59D3\u59CA\u59AF\u59B3\u59D2\u59C5\u5B5F\u5B64\u5B63\u5B97\u5B9A\u5B98\u5B9C\u5B99\u5B9B\u5C1A\u5C48\u5C45"],
["a9a1", "\u5C46\u5CB7\u5CA1\u5CB8\u5CA9\u5CAB\u5CB1\u5CB3\u5E18\u5E1A\u5E16\u5E15\u5E1B\u5E11\u5E78\u5E9A\u5E97\u5E9C\u5E95\u5E96\u5EF6\u5F26\u5F27\u5F29\u5F80\u5F81\u5F7F\u5F7C\u5FDD\u5FE0\u5FFD\u5FF5\u5FFF\u600F\u6014\u602F\u6035\u6016\u602A\u6015\u6021\u6027\u6029\u602B\u601B\u6216\u6215\u623F\u623E\u6240\u627F\u62C9\u62CC\u62C4\u62BF\u62C2\u62B9\u62D2\u62DB\u62AB\u62D3\u62D4\u62CB\u62C8\u62A8\u62BD\u62BC\u62D0\u62D9\u62C7\u62CD\u62B5\u62DA\u62B1\u62D8\u62D6\u62D7\u62C6\u62AC\u62CE\u653E\u65A7\u65BC\u65FA\u6614\u6613\u660C\u6606\u6602\u660E\u6600\u660F\u6615\u660A"],
["aa40", "\u6607\u670D\u670B\u676D\u678B\u6795\u6771\u679C\u6773\u6777\u6787\u679D\u6797\u676F\u6770\u677F\u6789\u677E\u6790\u6775\u679A\u6793\u677C\u676A\u6772\u6B23\u6B66\u6B67\u6B7F\u6C13\u6C1B\u6CE3\u6CE8\u6CF3\u6CB1\u6CCC\u6CE5\u6CB3\u6CBD\u6CBE\u6CBC\u6CE2\u6CAB\u6CD5\u6CD3\u6CB8\u6CC4\u6CB9\u6CC1\u6CAE\u6CD7\u6CC5\u6CF1\u6CBF\u6CBB\u6CE1\u6CDB\u6CCA\u6CAC\u6CEF\u6CDC\u6CD6\u6CE0"],
["aaa1", "\u7095\u708E\u7092\u708A\u7099\u722C\u722D\u7238\u7248\u7267\u7269\u72C0\u72CE\u72D9\u72D7\u72D0\u73A9\u73A8\u739F\u73AB\u73A5\u753D\u759D\u7599\u759A\u7684\u76C2\u76F2\u76F4\u77E5\u77FD\u793E\u7940\u7941\u79C9\u79C8\u7A7A\u7A79\u7AFA\u7CFE\u7F54\u7F8C\u7F8B\u8005\u80BA\u80A5\u80A2\u80B1\u80A1\u80AB\u80A9\u80B4\u80AA\u80AF\u81E5\u81FE\u820D\u82B3\u829D\u8299\u82AD\u82BD\u829F\u82B9\u82B1\u82AC\u82A5\u82AF\u82B8\u82A3\u82B0\u82BE\u82B7\u864E\u8671\u521D\u8868\u8ECB\u8FCE\u8FD4\u8FD1\u90B5\u90B8\u90B1\u90B6\u91C7\u91D1\u9577\u9580\u961C\u9640\u963F\u963B\u9644"],
["ab40", "\u9642\u96B9\u96E8\u9752\u975E\u4E9F\u4EAD\u4EAE\u4FE1\u4FB5\u4FAF\u4FBF\u4FE0\u4FD1\u4FCF\u4FDD\u4FC3\u4FB6\u4FD8\u4FDF\u4FCA\u4FD7\u4FAE\u4FD0\u4FC4\u4FC2\u4FDA\u4FCE\u4FDE\u4FB7\u5157\u5192\u5191\u51A0\u524E\u5243\u524A\u524D\u524C\u524B\u5247\u52C7\u52C9\u52C3\u52C1\u530D\u5357\u537B\u539A\u53DB\u54AC\u54C0\u54A8\u54CE\u54C9\u54B8\u54A6\u54B3\u54C7\u54C2\u54BD\u54AA\u54C1"],
["aba1", "\u54C4\u54C8\u54AF\u54AB\u54B1\u54BB\u54A9\u54A7\u54BF\u56FF\u5782\u578B\u57A0\u57A3\u57A2\u57CE\u57AE\u5793\u5955\u5951\u594F\u594E\u5950\u59DC\u59D8\u59FF\u59E3\u59E8\u5A03\u59E5\u59EA\u59DA\u59E6\u5A01\u59FB\u5B69\u5BA3\u5BA6\u5BA4\u5BA2\u5BA5\u5C01\u5C4E\u5C4F\u5C4D\u5C4B\u5CD9\u5CD2\u5DF7\u5E1D\u5E25\u5E1F\u5E7D\u5EA0\u5EA6\u5EFA\u5F08\u5F2D\u5F65\u5F88\u5F85\u5F8A\u5F8B\u5F87\u5F8C\u5F89\u6012\u601D\u6020\u6025\u600E\u6028\u604D\u6070\u6068\u6062\u6046\u6043\u606C\u606B\u606A\u6064\u6241\u62DC\u6316\u6309\u62FC\u62ED\u6301\u62EE\u62FD\u6307\u62F1\u62F7"],
["ac40", "\u62EF\u62EC\u62FE\u62F4\u6311\u6302\u653F\u6545\u65AB\u65BD\u65E2\u6625\u662D\u6620\u6627\u662F\u661F\u6628\u6631\u6624\u66F7\u67FF\u67D3\u67F1\u67D4\u67D0\u67EC\u67B6\u67AF\u67F5\u67E9\u67EF\u67C4\u67D1\u67B4\u67DA\u67E5\u67B8\u67CF\u67DE\u67F3\u67B0\u67D9\u67E2\u67DD\u67D2\u6B6A\u6B83\u6B86\u6BB5\u6BD2\u6BD7\u6C1F\u6CC9\u6D0B\u6D32\u6D2A\u6D41\u6D25\u6D0C\u6D31\u6D1E\u6D17"],
["aca1", "\u6D3B\u6D3D\u6D3E\u6D36\u6D1B\u6CF5\u6D39\u6D27\u6D38\u6D29\u6D2E\u6D35\u6D0E\u6D2B\u70AB\u70BA\u70B3\u70AC\u70AF\u70AD\u70B8\u70AE\u70A4\u7230\u7272\u726F\u7274\u72E9\u72E0\u72E1\u73B7\u73CA\u73BB\u73B2\u73CD\u73C0\u73B3\u751A\u752D\u754F\u754C\u754E\u754B\u75AB\u75A4\u75A5\u75A2\u75A3\u7678\u7686\u7687\u7688\u76C8\u76C6\u76C3\u76C5\u7701\u76F9\u76F8\u7709\u770B\u76FE\u76FC\u7707\u77DC\u7802\u7814\u780C\u780D\u7946\u7949\u7948\u7947\u79B9\u79BA\u79D1\u79D2\u79CB\u7A7F\u7A81\u7AFF\u7AFD\u7C7D\u7D02\u7D05\u7D00\u7D09\u7D07\u7D04\u7D06\u7F38\u7F8E\u7FBF\u8004"],
["ad40", "\u8010\u800D\u8011\u8036\u80D6\u80E5\u80DA\u80C3\u80C4\u80CC\u80E1\u80DB\u80CE\u80DE\u80E4\u80DD\u81F4\u8222\u82E7\u8303\u8305\u82E3\u82DB\u82E6\u8304\u82E5\u8302\u8309\u82D2\u82D7\u82F1\u8301\u82DC\u82D4\u82D1\u82DE\u82D3\u82DF\u82EF\u8306\u8650\u8679\u867B\u867A\u884D\u886B\u8981\u89D4\u8A08\u8A02\u8A03\u8C9E\u8CA0\u8D74\u8D73\u8DB4\u8ECD\u8ECC\u8FF0\u8FE6\u8FE2\u8FEA\u8FE5"],
["ada1", "\u8FED\u8FEB\u8FE4\u8FE8\u90CA\u90CE\u90C1\u90C3\u914B\u914A\u91CD\u9582\u9650\u964B\u964C\u964D\u9762\u9769\u97CB\u97ED\u97F3\u9801\u98A8\u98DB\u98DF\u9996\u9999\u4E58\u4EB3\u500C\u500D\u5023\u4FEF\u5026\u5025\u4FF8\u5029\u5016\u5006\u503C\u501F\u501A\u5012\u5011\u4FFA\u5000\u5014\u5028\u4FF1\u5021\u500B\u5019\u5018\u4FF3\u4FEE\u502D\u502A\u4FFE\u502B\u5009\u517C\u51A4\u51A5\u51A2\u51CD\u51CC\u51C6\u51CB\u5256\u525C\u5254\u525B\u525D\u532A\u537F\u539F\u539D\u53DF\u54E8\u5510\u5501\u5537\u54FC\u54E5\u54F2\u5506\u54FA\u5514\u54E9\u54ED\u54E1\u5509\u54EE\u54EA"],
["ae40", "\u54E6\u5527\u5507\u54FD\u550F\u5703\u5704\u57C2\u57D4\u57CB\u57C3\u5809\u590F\u5957\u5958\u595A\u5A11\u5A18\u5A1C\u5A1F\u5A1B\u5A13\u59EC\u5A20\u5A23\u5A29\u5A25\u5A0C\u5A09\u5B6B\u5C58\u5BB0\u5BB3\u5BB6\u5BB4\u5BAE\u5BB5\u5BB9\u5BB8\u5C04\u5C51\u5C55\u5C50\u5CED\u5CFD\u5CFB\u5CEA\u5CE8\u5CF0\u5CF6\u5D01\u5CF4\u5DEE\u5E2D\u5E2B\u5EAB\u5EAD\u5EA7\u5F31\u5F92\u5F91\u5F90\u6059"],
["aea1", "\u6063\u6065\u6050\u6055\u606D\u6069\u606F\u6084\u609F\u609A\u608D\u6094\u608C\u6085\u6096\u6247\u62F3\u6308\u62FF\u634E\u633E\u632F\u6355\u6342\u6346\u634F\u6349\u633A\u6350\u633D\u632A\u632B\u6328\u634D\u634C\u6548\u6549\u6599\u65C1\u65C5\u6642\u6649\u664F\u6643\u6652\u664C\u6645\u6641\u66F8\u6714\u6715\u6717\u6821\u6838\u6848\u6846\u6853\u6839\u6842\u6854\u6829\u68B3\u6817\u684C\u6851\u683D\u67F4\u6850\u6840\u683C\u6843\u682A\u6845\u6813\u6818\u6841\u6B8A\u6B89\u6BB7\u6C23\u6C27\u6C28\u6C26\u6C24\u6CF0\u6D6A\u6D95\u6D88\u6D87\u6D66\u6D78\u6D77\u6D59\u6D93"],
["af40", "\u6D6C\u6D89\u6D6E\u6D5A\u6D74\u6D69\u6D8C\u6D8A\u6D79\u6D85\u6D65\u6D94\u70CA\u70D8\u70E4\u70D9\u70C8\u70CF\u7239\u7279\u72FC\u72F9\u72FD\u72F8\u72F7\u7386\u73ED\u7409\u73EE\u73E0\u73EA\u73DE\u7554\u755D\u755C\u755A\u7559\u75BE\u75C5\u75C7\u75B2\u75B3\u75BD\u75BC\u75B9\u75C2\u75B8\u768B\u76B0\u76CA\u76CD\u76CE\u7729\u771F\u7720\u7728\u77E9\u7830\u7827\u7838\u781D\u7834\u7837"],
["afa1", "\u7825\u782D\u7820\u781F\u7832\u7955\u7950\u7960\u795F\u7956\u795E\u795D\u7957\u795A\u79E4\u79E3\u79E7\u79DF\u79E6\u79E9\u79D8\u7A84\u7A88\u7AD9\u7B06\u7B11\u7C89\u7D21\u7D17\u7D0B\u7D0A\u7D20\u7D22\u7D14\u7D10\u7D15\u7D1A\u7D1C\u7D0D\u7D19\u7D1B\u7F3A\u7F5F\u7F94\u7FC5\u7FC1\u8006\u8018\u8015\u8019\u8017\u803D\u803F\u80F1\u8102\u80F0\u8105\u80ED\u80F4\u8106\u80F8\u80F3\u8108\u80FD\u810A\u80FC\u80EF\u81ED\u81EC\u8200\u8210\u822A\u822B\u8228\u822C\u82BB\u832B\u8352\u8354\u834A\u8338\u8350\u8349\u8335\u8334\u834F\u8332\u8339\u8336\u8317\u8340\u8331\u8328\u8343"],
["b040", "\u8654\u868A\u86AA\u8693\u86A4\u86A9\u868C\u86A3\u869C\u8870\u8877\u8881\u8882\u887D\u8879\u8A18\u8A10\u8A0E\u8A0C\u8A15\u8A0A\u8A17\u8A13\u8A16\u8A0F\u8A11\u8C48\u8C7A\u8C79\u8CA1\u8CA2\u8D77\u8EAC\u8ED2\u8ED4\u8ECF\u8FB1\u9001\u9006\u8FF7\u9000\u8FFA\u8FF4\u9003\u8FFD\u9005\u8FF8\u9095\u90E1\u90DD\u90E2\u9152\u914D\u914C\u91D8\u91DD\u91D7\u91DC\u91D9\u9583\u9662\u9663\u9661"],
["b0a1", "\u965B\u965D\u9664\u9658\u965E\u96BB\u98E2\u99AC\u9AA8\u9AD8\u9B25\u9B32\u9B3C\u4E7E\u507A\u507D\u505C\u5047\u5043\u504C\u505A\u5049\u5065\u5076\u504E\u5055\u5075\u5074\u5077\u504F\u500F\u506F\u506D\u515C\u5195\u51F0\u526A\u526F\u52D2\u52D9\u52D8\u52D5\u5310\u530F\u5319\u533F\u5340\u533E\u53C3\u66FC\u5546\u556A\u5566\u5544\u555E\u5561\u5543\u554A\u5531\u5556\u554F\u5555\u552F\u5564\u5538\u552E\u555C\u552C\u5563\u5533\u5541\u5557\u5708\u570B\u5709\u57DF\u5805\u580A\u5806\u57E0\u57E4\u57FA\u5802\u5835\u57F7\u57F9\u5920\u5962\u5A36\u5A41\u5A49\u5A66\u5A6A\u5A40"],
["b140", "\u5A3C\u5A62\u5A5A\u5A46\u5A4A\u5B70\u5BC7\u5BC5\u5BC4\u5BC2\u5BBF\u5BC6\u5C09\u5C08\u5C07\u5C60\u5C5C\u5C5D\u5D07\u5D06\u5D0E\u5D1B\u5D16\u5D22\u5D11\u5D29\u5D14\u5D19\u5D24\u5D27\u5D17\u5DE2\u5E38\u5E36\u5E33\u5E37\u5EB7\u5EB8\u5EB6\u5EB5\u5EBE\u5F35\u5F37\u5F57\u5F6C\u5F69\u5F6B\u5F97\u5F99\u5F9E\u5F98\u5FA1\u5FA0\u5F9C\u607F\u60A3\u6089\u60A0\u60A8\u60CB\u60B4\u60E6\u60BD"],
["b1a1", "\u60C5\u60BB\u60B5\u60DC\u60BC\u60D8\u60D5\u60C6\u60DF\u60B8\u60DA\u60C7\u621A\u621B\u6248\u63A0\u63A7\u6372\u6396\u63A2\u63A5\u6377\u6367\u6398\u63AA\u6371\u63A9\u6389\u6383\u639B\u636B\u63A8\u6384\u6388\u6399\u63A1\u63AC\u6392\u638F\u6380\u637B\u6369\u6368\u637A\u655D\u6556\u6551\u6559\u6557\u555F\u654F\u6558\u6555\u6554\u659C\u659B\u65AC\u65CF\u65CB\u65CC\u65CE\u665D\u665A\u6664\u6668\u6666\u665E\u66F9\u52D7\u671B\u6881\u68AF\u68A2\u6893\u68B5\u687F\u6876\u68B1\u68A7\u6897\u68B0\u6883\u68C4\u68AD\u6886\u6885\u6894\u689D\u68A8\u689F\u68A1\u6882\u6B32\u6BBA"],
["b240", "\u6BEB\u6BEC\u6C2B\u6D8E\u6DBC\u6DF3\u6DD9\u6DB2\u6DE1\u6DCC\u6DE4\u6DFB\u6DFA\u6E05\u6DC7\u6DCB\u6DAF\u6DD1\u6DAE\u6DDE\u6DF9\u6DB8\u6DF7\u6DF5\u6DC5\u6DD2\u6E1A\u6DB5\u6DDA\u6DEB\u6DD8\u6DEA\u6DF1\u6DEE\u6DE8\u6DC6\u6DC4\u6DAA\u6DEC\u6DBF\u6DE6\u70F9\u7109\u710A\u70FD\u70EF\u723D\u727D\u7281\u731C\u731B\u7316\u7313\u7319\u7387\u7405\u740A\u7403\u7406\u73FE\u740D\u74E0\u74F6"],
["b2a1", "\u74F7\u751C\u7522\u7565\u7566\u7562\u7570\u758F\u75D4\u75D5\u75B5\u75CA\u75CD\u768E\u76D4\u76D2\u76DB\u7737\u773E\u773C\u7736\u7738\u773A\u786B\u7843\u784E\u7965\u7968\u796D\u79FB\u7A92\u7A95\u7B20\u7B28\u7B1B\u7B2C\u7B26\u7B19\u7B1E\u7B2E\u7C92\u7C97\u7C95\u7D46\u7D43\u7D71\u7D2E\u7D39\u7D3C\u7D40\u7D30\u7D33\u7D44\u7D2F\u7D42\u7D32\u7D31\u7F3D\u7F9E\u7F9A\u7FCC\u7FCE\u7FD2\u801C\u804A\u8046\u812F\u8116\u8123\u812B\u8129\u8130\u8124\u8202\u8235\u8237\u8236\u8239\u838E\u839E\u8398\u8378\u83A2\u8396\u83BD\u83AB\u8392\u838A\u8393\u8389\u83A0\u8377\u837B\u837C"],
["b340", "\u8386\u83A7\u8655\u5F6A\u86C7\u86C0\u86B6\u86C4\u86B5\u86C6\u86CB\u86B1\u86AF\u86C9\u8853\u889E\u8888\u88AB\u8892\u8896\u888D\u888B\u8993\u898F\u8A2A\u8A1D\u8A23\u8A25\u8A31\u8A2D\u8A1F\u8A1B\u8A22\u8C49\u8C5A\u8CA9\u8CAC\u8CAB\u8CA8\u8CAA\u8CA7\u8D67\u8D66\u8DBE\u8DBA\u8EDB\u8EDF\u9019\u900D\u901A\u9017\u9023\u901F\u901D\u9010\u9015\u901E\u9020\u900F\u9022\u9016\u901B\u9014"],
["b3a1", "\u90E8\u90ED\u90FD\u9157\u91CE\u91F5\u91E6\u91E3\u91E7\u91ED\u91E9\u9589\u966A\u9675\u9673\u9678\u9670\u9674\u9676\u9677\u966C\u96C0\u96EA\u96E9\u7AE0\u7ADF\u9802\u9803\u9B5A\u9CE5\u9E75\u9E7F\u9EA5\u9EBB\u50A2\u508D\u5085\u5099\u5091\u5080\u5096\u5098\u509A\u6700\u51F1\u5272\u5274\u5275\u5269\u52DE\u52DD\u52DB\u535A\u53A5\u557B\u5580\u55A7\u557C\u558A\u559D\u5598\u5582\u559C\u55AA\u5594\u5587\u558B\u5583\u55B3\u55AE\u559F\u553E\u55B2\u559A\u55BB\u55AC\u55B1\u557E\u5589\u55AB\u5599\u570D\u582F\u582A\u5834\u5824\u5830\u5831\u5821\u581D\u5820\u58F9\u58FA\u5960"],
["b440", "\u5A77\u5A9A\u5A7F\u5A92\u5A9B\u5AA7\u5B73\u5B71\u5BD2\u5BCC\u5BD3\u5BD0\u5C0A\u5C0B\u5C31\u5D4C\u5D50\u5D34\u5D47\u5DFD\u5E45\u5E3D\u5E40\u5E43\u5E7E\u5ECA\u5EC1\u5EC2\u5EC4\u5F3C\u5F6D\u5FA9\u5FAA\u5FA8\u60D1\u60E1\u60B2\u60B6\u60E0\u611C\u6123\u60FA\u6115\u60F0\u60FB\u60F4\u6168\u60F1\u610E\u60F6\u6109\u6100\u6112\u621F\u6249\u63A3\u638C\u63CF\u63C0\u63E9\u63C9\u63C6\u63CD"],
["b4a1", "\u63D2\u63E3\u63D0\u63E1\u63D6\u63ED\u63EE\u6376\u63F4\u63EA\u63DB\u6452\u63DA\u63F9\u655E\u6566\u6562\u6563\u6591\u6590\u65AF\u666E\u6670\u6674\u6676\u666F\u6691\u667A\u667E\u6677\u66FE\u66FF\u671F\u671D\u68FA\u68D5\u68E0\u68D8\u68D7\u6905\u68DF\u68F5\u68EE\u68E7\u68F9\u68D2\u68F2\u68E3\u68CB\u68CD\u690D\u6912\u690E\u68C9\u68DA\u696E\u68FB\u6B3E\u6B3A\u6B3D\u6B98\u6B96\u6BBC\u6BEF\u6C2E\u6C2F\u6C2C\u6E2F\u6E38\u6E54\u6E21\u6E32\u6E67\u6E4A\u6E20\u6E25\u6E23\u6E1B\u6E5B\u6E58\u6E24\u6E56\u6E6E\u6E2D\u6E26\u6E6F\u6E34\u6E4D\u6E3A\u6E2C\u6E43\u6E1D\u6E3E\u6ECB"],
["b540", "\u6E89\u6E19\u6E4E\u6E63\u6E44\u6E72\u6E69\u6E5F\u7119\u711A\u7126\u7130\u7121\u7136\u716E\u711C\u724C\u7284\u7280\u7336\u7325\u7334\u7329\u743A\u742A\u7433\u7422\u7425\u7435\u7436\u7434\u742F\u741B\u7426\u7428\u7525\u7526\u756B\u756A\u75E2\u75DB\u75E3\u75D9\u75D8\u75DE\u75E0\u767B\u767C\u7696\u7693\u76B4\u76DC\u774F\u77ED\u785D\u786C\u786F\u7A0D\u7A08\u7A0B\u7A05\u7A00\u7A98"],
["b5a1", "\u7A97\u7A96\u7AE5\u7AE3\u7B49\u7B56\u7B46\u7B50\u7B52\u7B54\u7B4D\u7B4B\u7B4F\u7B51\u7C9F\u7CA5\u7D5E\u7D50\u7D68\u7D55\u7D2B\u7D6E\u7D72\u7D61\u7D66\u7D62\u7D70\u7D73\u5584\u7FD4\u7FD5\u800B\u8052\u8085\u8155\u8154\u814B\u8151\u814E\u8139\u8146\u813E\u814C\u8153\u8174\u8212\u821C\u83E9\u8403\u83F8\u840D\u83E0\u83C5\u840B\u83C1\u83EF\u83F1\u83F4\u8457\u840A\u83F0\u840C\u83CC\u83FD\u83F2\u83CA\u8438\u840E\u8404\u83DC\u8407\u83D4\u83DF\u865B\u86DF\u86D9\u86ED\u86D4\u86DB\u86E4\u86D0\u86DE\u8857\u88C1\u88C2\u88B1\u8983\u8996\u8A3B\u8A60\u8A55\u8A5E\u8A3C\u8A41"],
["b640", "\u8A54\u8A5B\u8A50\u8A46\u8A34\u8A3A\u8A36\u8A56\u8C61\u8C82\u8CAF\u8CBC\u8CB3\u8CBD\u8CC1\u8CBB\u8CC0\u8CB4\u8CB7\u8CB6\u8CBF\u8CB8\u8D8A\u8D85\u8D81\u8DCE\u8DDD\u8DCB\u8DDA\u8DD1\u8DCC\u8DDB\u8DC6\u8EFB\u8EF8\u8EFC\u8F9C\u902E\u9035\u9031\u9038\u9032\u9036\u9102\u90F5\u9109\u90FE\u9163\u9165\u91CF\u9214\u9215\u9223\u9209\u921E\u920D\u9210\u9207\u9211\u9594\u958F\u958B\u9591"],
["b6a1", "\u9593\u9592\u958E\u968A\u968E\u968B\u967D\u9685\u9686\u968D\u9672\u9684\u96C1\u96C5\u96C4\u96C6\u96C7\u96EF\u96F2\u97CC\u9805\u9806\u9808\u98E7\u98EA\u98EF\u98E9\u98F2\u98ED\u99AE\u99AD\u9EC3\u9ECD\u9ED1\u4E82\u50AD\u50B5\u50B2\u50B3\u50C5\u50BE\u50AC\u50B7\u50BB\u50AF\u50C7\u527F\u5277\u527D\u52DF\u52E6\u52E4\u52E2\u52E3\u532F\u55DF\u55E8\u55D3\u55E6\u55CE\u55DC\u55C7\u55D1\u55E3\u55E4\u55EF\u55DA\u55E1\u55C5\u55C6\u55E5\u55C9\u5712\u5713\u585E\u5851\u5858\u5857\u585A\u5854\u586B\u584C\u586D\u584A\u5862\u5852\u584B\u5967\u5AC1\u5AC9\u5ACC\u5ABE\u5ABD\u5ABC"],
["b740", "\u5AB3\u5AC2\u5AB2\u5D69\u5D6F\u5E4C\u5E79\u5EC9\u5EC8\u5F12\u5F59\u5FAC\u5FAE\u611A\u610F\u6148\u611F\u60F3\u611B\u60F9\u6101\u6108\u614E\u614C\u6144\u614D\u613E\u6134\u6127\u610D\u6106\u6137\u6221\u6222\u6413\u643E\u641E\u642A\u642D\u643D\u642C\u640F\u641C\u6414\u640D\u6436\u6416\u6417\u6406\u656C\u659F\u65B0\u6697\u6689\u6687\u6688\u6696\u6684\u6698\u668D\u6703\u6994\u696D"],
["b7a1", "\u695A\u6977\u6960\u6954\u6975\u6930\u6982\u694A\u6968\u696B\u695E\u6953\u6979\u6986\u695D\u6963\u695B\u6B47\u6B72\u6BC0\u6BBF\u6BD3\u6BFD\u6EA2\u6EAF\u6ED3\u6EB6\u6EC2\u6E90\u6E9D\u6EC7\u6EC5\u6EA5\u6E98\u6EBC\u6EBA\u6EAB\u6ED1\u6E96\u6E9C\u6EC4\u6ED4\u6EAA\u6EA7\u6EB4\u714E\u7159\u7169\u7164\u7149\u7167\u715C\u716C\u7166\u714C\u7165\u715E\u7146\u7168\u7156\u723A\u7252\u7337\u7345\u733F\u733E\u746F\u745A\u7455\u745F\u745E\u7441\u743F\u7459\u745B\u745C\u7576\u7578\u7600\u75F0\u7601\u75F2\u75F1\u75FA\u75FF\u75F4\u75F3\u76DE\u76DF\u775B\u776B\u7766\u775E\u7763"],
["b840", "\u7779\u776A\u776C\u775C\u7765\u7768\u7762\u77EE\u788E\u78B0\u7897\u7898\u788C\u7889\u787C\u7891\u7893\u787F\u797A\u797F\u7981\u842C\u79BD\u7A1C\u7A1A\u7A20\u7A14\u7A1F\u7A1E\u7A9F\u7AA0\u7B77\u7BC0\u7B60\u7B6E\u7B67\u7CB1\u7CB3\u7CB5\u7D93\u7D79\u7D91\u7D81\u7D8F\u7D5B\u7F6E\u7F69\u7F6A\u7F72\u7FA9\u7FA8\u7FA4\u8056\u8058\u8086\u8084\u8171\u8170\u8178\u8165\u816E\u8173\u816B"],
["b8a1", "\u8179\u817A\u8166\u8205\u8247\u8482\u8477\u843D\u8431\u8475\u8466\u846B\u8449\u846C\u845B\u843C\u8435\u8461\u8463\u8469\u846D\u8446\u865E\u865C\u865F\u86F9\u8713\u8708\u8707\u8700\u86FE\u86FB\u8702\u8703\u8706\u870A\u8859\u88DF\u88D4\u88D9\u88DC\u88D8\u88DD\u88E1\u88CA\u88D5\u88D2\u899C\u89E3\u8A6B\u8A72\u8A73\u8A66\u8A69\u8A70\u8A87\u8A7C\u8A63\u8AA0\u8A71\u8A85\u8A6D\u8A62\u8A6E\u8A6C\u8A79\u8A7B\u8A3E\u8A68\u8C62\u8C8A\u8C89\u8CCA\u8CC7\u8CC8\u8CC4\u8CB2\u8CC3\u8CC2\u8CC5\u8DE1\u8DDF\u8DE8\u8DEF\u8DF3\u8DFA\u8DEA\u8DE4\u8DE6\u8EB2\u8F03\u8F09\u8EFE\u8F0A"],
["b940", "\u8F9F\u8FB2\u904B\u904A\u9053\u9042\u9054\u903C\u9055\u9050\u9047\u904F\u904E\u904D\u9051\u903E\u9041\u9112\u9117\u916C\u916A\u9169\u91C9\u9237\u9257\u9238\u923D\u9240\u923E\u925B\u924B\u9264\u9251\u9234\u9249\u924D\u9245\u9239\u923F\u925A\u9598\u9698\u9694\u9695\u96CD\u96CB\u96C9\u96CA\u96F7\u96FB\u96F9\u96F6\u9756\u9774\u9776\u9810\u9811\u9813\u980A\u9812\u980C\u98FC\u98F4"],
["b9a1", "\u98FD\u98FE\u99B3\u99B1\u99B4\u9AE1\u9CE9\u9E82\u9F0E\u9F13\u9F20\u50E7\u50EE\u50E5\u50D6\u50ED\u50DA\u50D5\u50CF\u50D1\u50F1\u50CE\u50E9\u5162\u51F3\u5283\u5282\u5331\u53AD\u55FE\u5600\u561B\u5617\u55FD\u5614\u5606\u5609\u560D\u560E\u55F7\u5616\u561F\u5608\u5610\u55F6\u5718\u5716\u5875\u587E\u5883\u5893\u588A\u5879\u5885\u587D\u58FD\u5925\u5922\u5924\u596A\u5969\u5AE1\u5AE6\u5AE9\u5AD7\u5AD6\u5AD8\u5AE3\u5B75\u5BDE\u5BE7\u5BE1\u5BE5\u5BE6\u5BE8\u5BE2\u5BE4\u5BDF\u5C0D\u5C62\u5D84\u5D87\u5E5B\u5E63\u5E55\u5E57\u5E54\u5ED3\u5ED6\u5F0A\u5F46\u5F70\u5FB9\u6147"],
["ba40", "\u613F\u614B\u6177\u6162\u6163\u615F\u615A\u6158\u6175\u622A\u6487\u6458\u6454\u64A4\u6478\u645F\u647A\u6451\u6467\u6434\u646D\u647B\u6572\u65A1\u65D7\u65D6\u66A2\u66A8\u669D\u699C\u69A8\u6995\u69C1\u69AE\u69D3\u69CB\u699B\u69B7\u69BB\u69AB\u69B4\u69D0\u69CD\u69AD\u69CC\u69A6\u69C3\u69A3\u6B49\u6B4C\u6C33\u6F33\u6F14\u6EFE\u6F13\u6EF4\u6F29\u6F3E\u6F20\u6F2C\u6F0F\u6F02\u6F22"],
["baa1", "\u6EFF\u6EEF\u6F06\u6F31\u6F38\u6F32\u6F23\u6F15\u6F2B\u6F2F\u6F88\u6F2A\u6EEC\u6F01\u6EF2\u6ECC\u6EF7\u7194\u7199\u717D\u718A\u7184\u7192\u723E\u7292\u7296\u7344\u7350\u7464\u7463\u746A\u7470\u746D\u7504\u7591\u7627\u760D\u760B\u7609\u7613\u76E1\u76E3\u7784\u777D\u777F\u7761\u78C1\u789F\u78A7\u78B3\u78A9\u78A3\u798E\u798F\u798D\u7A2E\u7A31\u7AAA\u7AA9\u7AED\u7AEF\u7BA1\u7B95\u7B8B\u7B75\u7B97\u7B9D\u7B94\u7B8F\u7BB8\u7B87\u7B84\u7CB9\u7CBD\u7CBE\u7DBB\u7DB0\u7D9C\u7DBD\u7DBE\u7DA0\u7DCA\u7DB4\u7DB2\u7DB1\u7DBA\u7DA2\u7DBF\u7DB5\u7DB8\u7DAD\u7DD2\u7DC7\u7DAC"],
["bb40", "\u7F70\u7FE0\u7FE1\u7FDF\u805E\u805A\u8087\u8150\u8180\u818F\u8188\u818A\u817F\u8182\u81E7\u81FA\u8207\u8214\u821E\u824B\u84C9\u84BF\u84C6\u84C4\u8499\u849E\u84B2\u849C\u84CB\u84B8\u84C0\u84D3\u8490\u84BC\u84D1\u84CA\u873F\u871C\u873B\u8722\u8725\u8734\u8718\u8755\u8737\u8729\u88F3\u8902\u88F4\u88F9\u88F8\u88FD\u88E8\u891A\u88EF\u8AA6\u8A8C\u8A9E\u8AA3\u8A8D\u8AA1\u8A93\u8AA4"],
["bba1", "\u8AAA\u8AA5\u8AA8\u8A98\u8A91\u8A9A\u8AA7\u8C6A\u8C8D\u8C8C\u8CD3\u8CD1\u8CD2\u8D6B\u8D99\u8D95\u8DFC\u8F14\u8F12\u8F15\u8F13\u8FA3\u9060\u9058\u905C\u9063\u9059\u905E\u9062\u905D\u905B\u9119\u9118\u911E\u9175\u9178\u9177\u9174\u9278\u9280\u9285\u9298\u9296\u927B\u9293\u929C\u92A8\u927C\u9291\u95A1\u95A8\u95A9\u95A3\u95A5\u95A4\u9699\u969C\u969B\u96CC\u96D2\u9700\u977C\u9785\u97F6\u9817\u9818\u98AF\u98B1\u9903\u9905\u990C\u9909\u99C1\u9AAF\u9AB0\u9AE6\u9B41\u9B42\u9CF4\u9CF6\u9CF3\u9EBC\u9F3B\u9F4A\u5104\u5100\u50FB\u50F5\u50F9\u5102\u5108\u5109\u5105\u51DC"],
["bc40", "\u5287\u5288\u5289\u528D\u528A\u52F0\u53B2\u562E\u563B\u5639\u5632\u563F\u5634\u5629\u5653\u564E\u5657\u5674\u5636\u562F\u5630\u5880\u589F\u589E\u58B3\u589C\u58AE\u58A9\u58A6\u596D\u5B09\u5AFB\u5B0B\u5AF5\u5B0C\u5B08\u5BEE\u5BEC\u5BE9\u5BEB\u5C64\u5C65\u5D9D\u5D94\u5E62\u5E5F\u5E61\u5EE2\u5EDA\u5EDF\u5EDD\u5EE3\u5EE0\u5F48\u5F71\u5FB7\u5FB5\u6176\u6167\u616E\u615D\u6155\u6182"],
["bca1", "\u617C\u6170\u616B\u617E\u61A7\u6190\u61AB\u618E\u61AC\u619A\u61A4\u6194\u61AE\u622E\u6469\u646F\u6479\u649E\u64B2\u6488\u6490\u64B0\u64A5\u6493\u6495\u64A9\u6492\u64AE\u64AD\u64AB\u649A\u64AC\u6499\u64A2\u64B3\u6575\u6577\u6578\u66AE\u66AB\u66B4\u66B1\u6A23\u6A1F\u69E8\u6A01\u6A1E\u6A19\u69FD\u6A21\u6A13\u6A0A\u69F3\u6A02\u6A05\u69ED\u6A11\u6B50\u6B4E\u6BA4\u6BC5\u6BC6\u6F3F\u6F7C\u6F84\u6F51\u6F66\u6F54\u6F86\u6F6D\u6F5B\u6F78\u6F6E\u6F8E\u6F7A\u6F70\u6F64\u6F97\u6F58\u6ED5\u6F6F\u6F60\u6F5F\u719F\u71AC\u71B1\u71A8\u7256\u729B\u734E\u7357\u7469\u748B\u7483"],
["bd40", "\u747E\u7480\u757F\u7620\u7629\u761F\u7624\u7626\u7621\u7622\u769A\u76BA\u76E4\u778E\u7787\u778C\u7791\u778B\u78CB\u78C5\u78BA\u78CA\u78BE\u78D5\u78BC\u78D0\u7A3F\u7A3C\u7A40\u7A3D\u7A37\u7A3B\u7AAF\u7AAE\u7BAD\u7BB1\u7BC4\u7BB4\u7BC6\u7BC7\u7BC1\u7BA0\u7BCC\u7CCA\u7DE0\u7DF4\u7DEF\u7DFB\u7DD8\u7DEC\u7DDD\u7DE8\u7DE3\u7DDA\u7DDE\u7DE9\u7D9E\u7DD9\u7DF2\u7DF9\u7F75\u7F77\u7FAF"],
["bda1", "\u7FE9\u8026\u819B\u819C\u819D\u81A0\u819A\u8198\u8517\u853D\u851A\u84EE\u852C\u852D\u8513\u8511\u8523\u8521\u8514\u84EC\u8525\u84FF\u8506\u8782\u8774\u8776\u8760\u8766\u8778\u8768\u8759\u8757\u874C\u8753\u885B\u885D\u8910\u8907\u8912\u8913\u8915\u890A\u8ABC\u8AD2\u8AC7\u8AC4\u8A95\u8ACB\u8AF8\u8AB2\u8AC9\u8AC2\u8ABF\u8AB0\u8AD6\u8ACD\u8AB6\u8AB9\u8ADB\u8C4C\u8C4E\u8C6C\u8CE0\u8CDE\u8CE6\u8CE4\u8CEC\u8CED\u8CE2\u8CE3\u8CDC\u8CEA\u8CE1\u8D6D\u8D9F\u8DA3\u8E2B\u8E10\u8E1D\u8E22\u8E0F\u8E29\u8E1F\u8E21\u8E1E\u8EBA\u8F1D\u8F1B\u8F1F\u8F29\u8F26\u8F2A\u8F1C\u8F1E"],
["be40", "\u8F25\u9069\u906E\u9068\u906D\u9077\u9130\u912D\u9127\u9131\u9187\u9189\u918B\u9183\u92C5\u92BB\u92B7\u92EA\u92AC\u92E4\u92C1\u92B3\u92BC\u92D2\u92C7\u92F0\u92B2\u95AD\u95B1\u9704\u9706\u9707\u9709\u9760\u978D\u978B\u978F\u9821\u982B\u981C\u98B3\u990A\u9913\u9912\u9918\u99DD\u99D0\u99DF\u99DB\u99D1\u99D5\u99D2\u99D9\u9AB7\u9AEE\u9AEF\u9B27\u9B45\u9B44\u9B77\u9B6F\u9D06\u9D09"],
["bea1", "\u9D03\u9EA9\u9EBE\u9ECE\u58A8\u9F52\u5112\u5118\u5114\u5110\u5115\u5180\u51AA\u51DD\u5291\u5293\u52F3\u5659\u566B\u5679\u5669\u5664\u5678\u566A\u5668\u5665\u5671\u566F\u566C\u5662\u5676\u58C1\u58BE\u58C7\u58C5\u596E\u5B1D\u5B34\u5B78\u5BF0\u5C0E\u5F4A\u61B2\u6191\u61A9\u618A\u61CD\u61B6\u61BE\u61CA\u61C8\u6230\u64C5\u64C1\u64CB\u64BB\u64BC\u64DA\u64C4\u64C7\u64C2\u64CD\u64BF\u64D2\u64D4\u64BE\u6574\u66C6\u66C9\u66B9\u66C4\u66C7\u66B8\u6A3D\u6A38\u6A3A\u6A59\u6A6B\u6A58\u6A39\u6A44\u6A62\u6A61\u6A4B\u6A47\u6A35\u6A5F\u6A48\u6B59\u6B77\u6C05\u6FC2\u6FB1\u6FA1"],
["bf40", "\u6FC3\u6FA4\u6FC1\u6FA7\u6FB3\u6FC0\u6FB9\u6FB6\u6FA6\u6FA0\u6FB4\u71BE\u71C9\u71D0\u71D2\u71C8\u71D5\u71B9\u71CE\u71D9\u71DC\u71C3\u71C4\u7368\u749C\u74A3\u7498\u749F\u749E\u74E2\u750C\u750D\u7634\u7638\u763A\u76E7\u76E5\u77A0\u779E\u779F\u77A5\u78E8\u78DA\u78EC\u78E7\u79A6\u7A4D\u7A4E\u7A46\u7A4C\u7A4B\u7ABA\u7BD9\u7C11\u7BC9\u7BE4\u7BDB\u7BE1\u7BE9\u7BE6\u7CD5\u7CD6\u7E0A"],
["bfa1", "\u7E11\u7E08\u7E1B\u7E23\u7E1E\u7E1D\u7E09\u7E10\u7F79\u7FB2\u7FF0\u7FF1\u7FEE\u8028\u81B3\u81A9\u81A8\u81FB\u8208\u8258\u8259\u854A\u8559\u8548\u8568\u8569\u8543\u8549\u856D\u856A\u855E\u8783\u879F\u879E\u87A2\u878D\u8861\u892A\u8932\u8925\u892B\u8921\u89AA\u89A6\u8AE6\u8AFA\u8AEB\u8AF1\u8B00\u8ADC\u8AE7\u8AEE\u8AFE\u8B01\u8B02\u8AF7\u8AED\u8AF3\u8AF6\u8AFC\u8C6B\u8C6D\u8C93\u8CF4\u8E44\u8E31\u8E34\u8E42\u8E39\u8E35\u8F3B\u8F2F\u8F38\u8F33\u8FA8\u8FA6\u9075\u9074\u9078\u9072\u907C\u907A\u9134\u9192\u9320\u9336\u92F8\u9333\u932F\u9322\u92FC\u932B\u9304\u931A"],
["c040", "\u9310\u9326\u9321\u9315\u932E\u9319\u95BB\u96A7\u96A8\u96AA\u96D5\u970E\u9711\u9716\u970D\u9713\u970F\u975B\u975C\u9766\u9798\u9830\u9838\u983B\u9837\u982D\u9839\u9824\u9910\u9928\u991E\u991B\u9921\u991A\u99ED\u99E2\u99F1\u9AB8\u9ABC\u9AFB\u9AED\u9B28\u9B91\u9D15\u9D23\u9D26\u9D28\u9D12\u9D1B\u9ED8\u9ED4\u9F8D\u9F9C\u512A\u511F\u5121\u5132\u52F5\u568E\u5680\u5690\u5685\u5687"],
["c0a1", "\u568F\u58D5\u58D3\u58D1\u58CE\u5B30\u5B2A\u5B24\u5B7A\u5C37\u5C68\u5DBC\u5DBA\u5DBD\u5DB8\u5E6B\u5F4C\u5FBD\u61C9\u61C2\u61C7\u61E6\u61CB\u6232\u6234\u64CE\u64CA\u64D8\u64E0\u64F0\u64E6\u64EC\u64F1\u64E2\u64ED\u6582\u6583\u66D9\u66D6\u6A80\u6A94\u6A84\u6AA2\u6A9C\u6ADB\u6AA3\u6A7E\u6A97\u6A90\u6AA0\u6B5C\u6BAE\u6BDA\u6C08\u6FD8\u6FF1\u6FDF\u6FE0\u6FDB\u6FE4\u6FEB\u6FEF\u6F80\u6FEC\u6FE1\u6FE9\u6FD5\u6FEE\u6FF0\u71E7\u71DF\u71EE\u71E6\u71E5\u71ED\u71EC\u71F4\u71E0\u7235\u7246\u7370\u7372\u74A9\u74B0\u74A6\u74A8\u7646\u7642\u764C\u76EA\u77B3\u77AA\u77B0\u77AC"],
["c140", "\u77A7\u77AD\u77EF\u78F7\u78FA\u78F4\u78EF\u7901\u79A7\u79AA\u7A57\u7ABF\u7C07\u7C0D\u7BFE\u7BF7\u7C0C\u7BE0\u7CE0\u7CDC\u7CDE\u7CE2\u7CDF\u7CD9\u7CDD\u7E2E\u7E3E\u7E46\u7E37\u7E32\u7E43\u7E2B\u7E3D\u7E31\u7E45\u7E41\u7E34\u7E39\u7E48\u7E35\u7E3F\u7E2F\u7F44\u7FF3\u7FFC\u8071\u8072\u8070\u806F\u8073\u81C6\u81C3\u81BA\u81C2\u81C0\u81BF\u81BD\u81C9\u81BE\u81E8\u8209\u8271\u85AA"],
["c1a1", "\u8584\u857E\u859C\u8591\u8594\u85AF\u859B\u8587\u85A8\u858A\u8667\u87C0\u87D1\u87B3\u87D2\u87C6\u87AB\u87BB\u87BA\u87C8\u87CB\u893B\u8936\u8944\u8938\u893D\u89AC\u8B0E\u8B17\u8B19\u8B1B\u8B0A\u8B20\u8B1D\u8B04\u8B10\u8C41\u8C3F\u8C73\u8CFA\u8CFD\u8CFC\u8CF8\u8CFB\u8DA8\u8E49\u8E4B\u8E48\u8E4A\u8F44\u8F3E\u8F42\u8F45\u8F3F\u907F\u907D\u9084\u9081\u9082\u9080\u9139\u91A3\u919E\u919C\u934D\u9382\u9328\u9375\u934A\u9365\u934B\u9318\u937E\u936C\u935B\u9370\u935A\u9354\u95CA\u95CB\u95CC\u95C8\u95C6\u96B1\u96B8\u96D6\u971C\u971E\u97A0\u97D3\u9846\u98B6\u9935\u9A01"],
["c240", "\u99FF\u9BAE\u9BAB\u9BAA\u9BAD\u9D3B\u9D3F\u9E8B\u9ECF\u9EDE\u9EDC\u9EDD\u9EDB\u9F3E\u9F4B\u53E2\u5695\u56AE\u58D9\u58D8\u5B38\u5F5D\u61E3\u6233\u64F4\u64F2\u64FE\u6506\u64FA\u64FB\u64F7\u65B7\u66DC\u6726\u6AB3\u6AAC\u6AC3\u6ABB\u6AB8\u6AC2\u6AAE\u6AAF\u6B5F\u6B78\u6BAF\u7009\u700B\u6FFE\u7006\u6FFA\u7011\u700F\u71FB\u71FC\u71FE\u71F8\u7377\u7375\u74A7\u74BF\u7515\u7656\u7658"],
["c2a1", "\u7652\u77BD\u77BF\u77BB\u77BC\u790E\u79AE\u7A61\u7A62\u7A60\u7AC4\u7AC5\u7C2B\u7C27\u7C2A\u7C1E\u7C23\u7C21\u7CE7\u7E54\u7E55\u7E5E\u7E5A\u7E61\u7E52\u7E59\u7F48\u7FF9\u7FFB\u8077\u8076\u81CD\u81CF\u820A\u85CF\u85A9\u85CD\u85D0\u85C9\u85B0\u85BA\u85B9\u85A6\u87EF\u87EC\u87F2\u87E0\u8986\u89B2\u89F4\u8B28\u8B39\u8B2C\u8B2B\u8C50\u8D05\u8E59\u8E63\u8E66\u8E64\u8E5F\u8E55\u8EC0\u8F49\u8F4D\u9087\u9083\u9088\u91AB\u91AC\u91D0\u9394\u938A\u9396\u93A2\u93B3\u93AE\u93AC\u93B0\u9398\u939A\u9397\u95D4\u95D6\u95D0\u95D5\u96E2\u96DC\u96D9\u96DB\u96DE\u9724\u97A3\u97A6"],
["c340", "\u97AD\u97F9\u984D\u984F\u984C\u984E\u9853\u98BA\u993E\u993F\u993D\u992E\u99A5\u9A0E\u9AC1\u9B03\u9B06\u9B4F\u9B4E\u9B4D\u9BCA\u9BC9\u9BFD\u9BC8\u9BC0\u9D51\u9D5D\u9D60\u9EE0\u9F15\u9F2C\u5133\u56A5\u58DE\u58DF\u58E2\u5BF5\u9F90\u5EEC\u61F2\u61F7\u61F6\u61F5\u6500\u650F\u66E0\u66DD\u6AE5\u6ADD\u6ADA\u6AD3\u701B\u701F\u7028\u701A\u701D\u7015\u7018\u7206\u720D\u7258\u72A2\u7378"],
["c3a1", "\u737A\u74BD\u74CA\u74E3\u7587\u7586\u765F\u7661\u77C7\u7919\u79B1\u7A6B\u7A69\u7C3E\u7C3F\u7C38\u7C3D\u7C37\u7C40\u7E6B\u7E6D\u7E79\u7E69\u7E6A\u7F85\u7E73\u7FB6\u7FB9\u7FB8\u81D8\u85E9\u85DD\u85EA\u85D5\u85E4\u85E5\u85F7\u87FB\u8805\u880D\u87F9\u87FE\u8960\u895F\u8956\u895E\u8B41\u8B5C\u8B58\u8B49\u8B5A\u8B4E\u8B4F\u8B46\u8B59\u8D08\u8D0A\u8E7C\u8E72\u8E87\u8E76\u8E6C\u8E7A\u8E74\u8F54\u8F4E\u8FAD\u908A\u908B\u91B1\u91AE\u93E1\u93D1\u93DF\u93C3\u93C8\u93DC\u93DD\u93D6\u93E2\u93CD\u93D8\u93E4\u93D7\u93E8\u95DC\u96B4\u96E3\u972A\u9727\u9761\u97DC\u97FB\u985E"],
["c440", "\u9858\u985B\u98BC\u9945\u9949\u9A16\u9A19\u9B0D\u9BE8\u9BE7\u9BD6\u9BDB\u9D89\u9D61\u9D72\u9D6A\u9D6C\u9E92\u9E97\u9E93\u9EB4\u52F8\u56A8\u56B7\u56B6\u56B4\u56BC\u58E4\u5B40\u5B43\u5B7D\u5BF6\u5DC9\u61F8\u61FA\u6518\u6514\u6519\u66E6\u6727\u6AEC\u703E\u7030\u7032\u7210\u737B\u74CF\u7662\u7665\u7926\u792A\u792C\u792B\u7AC7\u7AF6\u7C4C\u7C43\u7C4D\u7CEF\u7CF0\u8FAE\u7E7D\u7E7C"],
["c4a1", "\u7E82\u7F4C\u8000\u81DA\u8266\u85FB\u85F9\u8611\u85FA\u8606\u860B\u8607\u860A\u8814\u8815\u8964\u89BA\u89F8\u8B70\u8B6C\u8B66\u8B6F\u8B5F\u8B6B\u8D0F\u8D0D\u8E89\u8E81\u8E85\u8E82\u91B4\u91CB\u9418\u9403\u93FD\u95E1\u9730\u98C4\u9952\u9951\u99A8\u9A2B\u9A30\u9A37\u9A35\u9C13\u9C0D\u9E79\u9EB5\u9EE8\u9F2F\u9F5F\u9F63\u9F61\u5137\u5138\u56C1\u56C0\u56C2\u5914\u5C6C\u5DCD\u61FC\u61FE\u651D\u651C\u6595\u66E9\u6AFB\u6B04\u6AFA\u6BB2\u704C\u721B\u72A7\u74D6\u74D4\u7669\u77D3\u7C50\u7E8F\u7E8C\u7FBC\u8617\u862D\u861A\u8823\u8822\u8821\u881F\u896A\u896C\u89BD\u8B74"],
["c540", "\u8B77\u8B7D\u8D13\u8E8A\u8E8D\u8E8B\u8F5F\u8FAF\u91BA\u942E\u9433\u9435\u943A\u9438\u9432\u942B\u95E2\u9738\u9739\u9732\u97FF\u9867\u9865\u9957\u9A45\u9A43\u9A40\u9A3E\u9ACF\u9B54\u9B51\u9C2D\u9C25\u9DAF\u9DB4\u9DC2\u9DB8\u9E9D\u9EEF\u9F19\u9F5C\u9F66\u9F67\u513C\u513B\u56C8\u56CA\u56C9\u5B7F\u5DD4\u5DD2\u5F4E\u61FF\u6524\u6B0A\u6B61\u7051\u7058\u7380\u74E4\u758A\u766E\u766C"],
["c5a1", "\u79B3\u7C60\u7C5F\u807E\u807D\u81DF\u8972\u896F\u89FC\u8B80\u8D16\u8D17\u8E91\u8E93\u8F61\u9148\u9444\u9451\u9452\u973D\u973E\u97C3\u97C1\u986B\u9955\u9A55\u9A4D\u9AD2\u9B1A\u9C49\u9C31\u9C3E\u9C3B\u9DD3\u9DD7\u9F34\u9F6C\u9F6A\u9F94\u56CC\u5DD6\u6200\u6523\u652B\u652A\u66EC\u6B10\u74DA\u7ACA\u7C64\u7C63\u7C65\u7E93\u7E96\u7E94\u81E2\u8638\u863F\u8831\u8B8A\u9090\u908F\u9463\u9460\u9464\u9768\u986F\u995C\u9A5A\u9A5B\u9A57\u9AD3\u9AD4\u9AD1\u9C54\u9C57\u9C56\u9DE5\u9E9F\u9EF4\u56D1\u58E9\u652C\u705E\u7671\u7672\u77D7\u7F50\u7F88\u8836\u8839\u8862\u8B93\u8B92"],
["c640", "\u8B96\u8277\u8D1B\u91C0\u946A\u9742\u9748\u9744\u97C6\u9870\u9A5F\u9B22\u9B58\u9C5F\u9DF9\u9DFA\u9E7C\u9E7D\u9F07\u9F77\u9F72\u5EF3\u6B16\u7063\u7C6C\u7C6E\u883B\u89C0\u8EA1\u91C1\u9472\u9470\u9871\u995E\u9AD6\u9B23\u9ECC\u7064\u77DA\u8B9A\u9477\u97C9\u9A62\u9A65\u7E9C\u8B9C\u8EAA\u91C5\u947D\u947E\u947C\u9C77\u9C78\u9EF7\u8C54\u947F\u9E1A\u7228\u9A6A\u9B31\u9E1B\u9E1E\u7C72"],
["c940", "\u4E42\u4E5C\u51F5\u531A\u5382\u4E07\u4E0C\u4E47\u4E8D\u56D7\uFA0C\u5C6E\u5F73\u4E0F\u5187\u4E0E\u4E2E\u4E93\u4EC2\u4EC9\u4EC8\u5198\u52FC\u536C\u53B9\u5720\u5903\u592C\u5C10\u5DFF\u65E1\u6BB3\u6BCC\u6C14\u723F\u4E31\u4E3C\u4EE8\u4EDC\u4EE9\u4EE1\u4EDD\u4EDA\u520C\u531C\u534C\u5722\u5723\u5917\u592F\u5B81\u5B84\u5C12\u5C3B\u5C74\u5C73\u5E04\u5E80\u5E82\u5FC9\u6209\u6250\u6C15"],
["c9a1", "\u6C36\u6C43\u6C3F\u6C3B\u72AE\u72B0\u738A\u79B8\u808A\u961E\u4F0E\u4F18\u4F2C\u4EF5\u4F14\u4EF1\u4F00\u4EF7\u4F08\u4F1D\u4F02\u4F05\u4F22\u4F13\u4F04\u4EF4\u4F12\u51B1\u5213\u5209\u5210\u52A6\u5322\u531F\u534D\u538A\u5407\u56E1\u56DF\u572E\u572A\u5734\u593C\u5980\u597C\u5985\u597B\u597E\u5977\u597F\u5B56\u5C15\u5C25\u5C7C\u5C7A\u5C7B\u5C7E\u5DDF\u5E75\u5E84\u5F02\u5F1A\u5F74\u5FD5\u5FD4\u5FCF\u625C\u625E\u6264\u6261\u6266\u6262\u6259\u6260\u625A\u6265\u65EF\u65EE\u673E\u6739\u6738\u673B\u673A\u673F\u673C\u6733\u6C18\u6C46\u6C52\u6C5C\u6C4F\u6C4A\u6C54\u6C4B"],
["ca40", "\u6C4C\u7071\u725E\u72B4\u72B5\u738E\u752A\u767F\u7A75\u7F51\u8278\u827C\u8280\u827D\u827F\u864D\u897E\u9099\u9097\u9098\u909B\u9094\u9622\u9624\u9620\u9623\u4F56\u4F3B\u4F62\u4F49\u4F53\u4F64\u4F3E\u4F67\u4F52\u4F5F\u4F41\u4F58\u4F2D\u4F33\u4F3F\u4F61\u518F\u51B9\u521C\u521E\u5221\u52AD\u52AE\u5309\u5363\u5372\u538E\u538F\u5430\u5437\u542A\u5454\u5445\u5419\u541C\u5425\u5418"],
["caa1", "\u543D\u544F\u5441\u5428\u5424\u5447\u56EE\u56E7\u56E5\u5741\u5745\u574C\u5749\u574B\u5752\u5906\u5940\u59A6\u5998\u59A0\u5997\u598E\u59A2\u5990\u598F\u59A7\u59A1\u5B8E\u5B92\u5C28\u5C2A\u5C8D\u5C8F\u5C88\u5C8B\u5C89\u5C92\u5C8A\u5C86\u5C93\u5C95\u5DE0\u5E0A\u5E0E\u5E8B\u5E89\u5E8C\u5E88\u5E8D\u5F05\u5F1D\u5F78\u5F76\u5FD2\u5FD1\u5FD0\u5FED\u5FE8\u5FEE\u5FF3\u5FE1\u5FE4\u5FE3\u5FFA\u5FEF\u5FF7\u5FFB\u6000\u5FF4\u623A\u6283\u628C\u628E\u628F\u6294\u6287\u6271\u627B\u627A\u6270\u6281\u6288\u6277\u627D\u6272\u6274\u6537\u65F0\u65F4\u65F3\u65F2\u65F5\u6745\u6747"],
["cb40", "\u6759\u6755\u674C\u6748\u675D\u674D\u675A\u674B\u6BD0\u6C19\u6C1A\u6C78\u6C67\u6C6B\u6C84\u6C8B\u6C8F\u6C71\u6C6F\u6C69\u6C9A\u6C6D\u6C87\u6C95\u6C9C\u6C66\u6C73\u6C65\u6C7B\u6C8E\u7074\u707A\u7263\u72BF\u72BD\u72C3\u72C6\u72C1\u72BA\u72C5\u7395\u7397\u7393\u7394\u7392\u753A\u7539\u7594\u7595\u7681\u793D\u8034\u8095\u8099\u8090\u8092\u809C\u8290\u828F\u8285\u828E\u8291\u8293"],
["cba1", "\u828A\u8283\u8284\u8C78\u8FC9\u8FBF\u909F\u90A1\u90A5\u909E\u90A7\u90A0\u9630\u9628\u962F\u962D\u4E33\u4F98\u4F7C\u4F85\u4F7D\u4F80\u4F87\u4F76\u4F74\u4F89\u4F84\u4F77\u4F4C\u4F97\u4F6A\u4F9A\u4F79\u4F81\u4F78\u4F90\u4F9C\u4F94\u4F9E\u4F92\u4F82\u4F95\u4F6B\u4F6E\u519E\u51BC\u51BE\u5235\u5232\u5233\u5246\u5231\u52BC\u530A\u530B\u533C\u5392\u5394\u5487\u547F\u5481\u5491\u5482\u5488\u546B\u547A\u547E\u5465\u546C\u5474\u5466\u548D\u546F\u5461\u5460\u5498\u5463\u5467\u5464\u56F7\u56F9\u576F\u5772\u576D\u576B\u5771\u5770\u5776\u5780\u5775\u577B\u5773\u5774\u5762"],
["cc40", "\u5768\u577D\u590C\u5945\u59B5\u59BA\u59CF\u59CE\u59B2\u59CC\u59C1\u59B6\u59BC\u59C3\u59D6\u59B1\u59BD\u59C0\u59C8\u59B4\u59C7\u5B62\u5B65\u5B93\u5B95\u5C44\u5C47\u5CAE\u5CA4\u5CA0\u5CB5\u5CAF\u5CA8\u5CAC\u5C9F\u5CA3\u5CAD\u5CA2\u5CAA\u5CA7\u5C9D\u5CA5\u5CB6\u5CB0\u5CA6\u5E17\u5E14\u5E19\u5F28\u5F22\u5F23\u5F24\u5F54\u5F82\u5F7E\u5F7D\u5FDE\u5FE5\u602D\u6026\u6019\u6032\u600B"],
["cca1", "\u6034\u600A\u6017\u6033\u601A\u601E\u602C\u6022\u600D\u6010\u602E\u6013\u6011\u600C\u6009\u601C\u6214\u623D\u62AD\u62B4\u62D1\u62BE\u62AA\u62B6\u62CA\u62AE\u62B3\u62AF\u62BB\u62A9\u62B0\u62B8\u653D\u65A8\u65BB\u6609\u65FC\u6604\u6612\u6608\u65FB\u6603\u660B\u660D\u6605\u65FD\u6611\u6610\u66F6\u670A\u6785\u676C\u678E\u6792\u6776\u677B\u6798\u6786\u6784\u6774\u678D\u678C\u677A\u679F\u6791\u6799\u6783\u677D\u6781\u6778\u6779\u6794\u6B25\u6B80\u6B7E\u6BDE\u6C1D\u6C93\u6CEC\u6CEB\u6CEE\u6CD9\u6CB6\u6CD4\u6CAD\u6CE7\u6CB7\u6CD0\u6CC2\u6CBA\u6CC3\u6CC6\u6CED\u6CF2"],
["cd40", "\u6CD2\u6CDD\u6CB4\u6C8A\u6C9D\u6C80\u6CDE\u6CC0\u6D30\u6CCD\u6CC7\u6CB0\u6CF9\u6CCF\u6CE9\u6CD1\u7094\u7098\u7085\u7093\u7086\u7084\u7091\u7096\u7082\u709A\u7083\u726A\u72D6\u72CB\u72D8\u72C9\u72DC\u72D2\u72D4\u72DA\u72CC\u72D1\u73A4\u73A1\u73AD\u73A6\u73A2\u73A0\u73AC\u739D\u74DD\u74E8\u753F\u7540\u753E\u758C\u7598\u76AF\u76F3\u76F1\u76F0\u76F5\u77F8\u77FC\u77F9\u77FB\u77FA"],
["cda1", "\u77F7\u7942\u793F\u79C5\u7A78\u7A7B\u7AFB\u7C75\u7CFD\u8035\u808F\u80AE\u80A3\u80B8\u80B5\u80AD\u8220\u82A0\u82C0\u82AB\u829A\u8298\u829B\u82B5\u82A7\u82AE\u82BC\u829E\u82BA\u82B4\u82A8\u82A1\u82A9\u82C2\u82A4\u82C3\u82B6\u82A2\u8670\u866F\u866D\u866E\u8C56\u8FD2\u8FCB\u8FD3\u8FCD\u8FD6\u8FD5\u8FD7\u90B2\u90B4\u90AF\u90B3\u90B0\u9639\u963D\u963C\u963A\u9643\u4FCD\u4FC5\u4FD3\u4FB2\u4FC9\u4FCB\u4FC1\u4FD4\u4FDC\u4FD9\u4FBB\u4FB3\u4FDB\u4FC7\u4FD6\u4FBA\u4FC0\u4FB9\u4FEC\u5244\u5249\u52C0\u52C2\u533D\u537C\u5397\u5396\u5399\u5398\u54BA\u54A1\u54AD\u54A5\u54CF"],
["ce40", "\u54C3\u830D\u54B7\u54AE\u54D6\u54B6\u54C5\u54C6\u54A0\u5470\u54BC\u54A2\u54BE\u5472\u54DE\u54B0\u57B5\u579E\u579F\u57A4\u578C\u5797\u579D\u579B\u5794\u5798\u578F\u5799\u57A5\u579A\u5795\u58F4\u590D\u5953\u59E1\u59DE\u59EE\u5A00\u59F1\u59DD\u59FA\u59FD\u59FC\u59F6\u59E4\u59F2\u59F7\u59DB\u59E9\u59F3\u59F5\u59E0\u59FE\u59F4\u59ED\u5BA8\u5C4C\u5CD0\u5CD8\u5CCC\u5CD7\u5CCB\u5CDB"],
["cea1", "\u5CDE\u5CDA\u5CC9\u5CC7\u5CCA\u5CD6\u5CD3\u5CD4\u5CCF\u5CC8\u5CC6\u5CCE\u5CDF\u5CF8\u5DF9\u5E21\u5E22\u5E23\u5E20\u5E24\u5EB0\u5EA4\u5EA2\u5E9B\u5EA3\u5EA5\u5F07\u5F2E\u5F56\u5F86\u6037\u6039\u6054\u6072\u605E\u6045\u6053\u6047\u6049\u605B\u604C\u6040\u6042\u605F\u6024\u6044\u6058\u6066\u606E\u6242\u6243\u62CF\u630D\u630B\u62F5\u630E\u6303\u62EB\u62F9\u630F\u630C\u62F8\u62F6\u6300\u6313\u6314\u62FA\u6315\u62FB\u62F0\u6541\u6543\u65AA\u65BF\u6636\u6621\u6632\u6635\u661C\u6626\u6622\u6633\u662B\u663A\u661D\u6634\u6639\u662E\u670F\u6710\u67C1\u67F2\u67C8\u67BA"],
["cf40", "\u67DC\u67BB\u67F8\u67D8\u67C0\u67B7\u67C5\u67EB\u67E4\u67DF\u67B5\u67CD\u67B3\u67F7\u67F6\u67EE\u67E3\u67C2\u67B9\u67CE\u67E7\u67F0\u67B2\u67FC\u67C6\u67ED\u67CC\u67AE\u67E6\u67DB\u67FA\u67C9\u67CA\u67C3\u67EA\u67CB\u6B28\u6B82\u6B84\u6BB6\u6BD6\u6BD8\u6BE0\u6C20\u6C21\u6D28\u6D34\u6D2D\u6D1F\u6D3C\u6D3F\u6D12\u6D0A\u6CDA\u6D33\u6D04\u6D19\u6D3A\u6D1A\u6D11\u6D00\u6D1D\u6D42"],
["cfa1", "\u6D01\u6D18\u6D37\u6D03\u6D0F\u6D40\u6D07\u6D20\u6D2C\u6D08\u6D22\u6D09\u6D10\u70B7\u709F\u70BE\u70B1\u70B0\u70A1\u70B4\u70B5\u70A9\u7241\u7249\u724A\u726C\u7270\u7273\u726E\u72CA\u72E4\u72E8\u72EB\u72DF\u72EA\u72E6\u72E3\u7385\u73CC\u73C2\u73C8\u73C5\u73B9\u73B6\u73B5\u73B4\u73EB\u73BF\u73C7\u73BE\u73C3\u73C6\u73B8\u73CB\u74EC\u74EE\u752E\u7547\u7548\u75A7\u75AA\u7679\u76C4\u7708\u7703\u7704\u7705\u770A\u76F7\u76FB\u76FA\u77E7\u77E8\u7806\u7811\u7812\u7805\u7810\u780F\u780E\u7809\u7803\u7813\u794A\u794C\u794B\u7945\u7944\u79D5\u79CD\u79CF\u79D6\u79CE\u7A80"],
["d040", "\u7A7E\u7AD1\u7B00\u7B01\u7C7A\u7C78\u7C79\u7C7F\u7C80\u7C81\u7D03\u7D08\u7D01\u7F58\u7F91\u7F8D\u7FBE\u8007\u800E\u800F\u8014\u8037\u80D8\u80C7\u80E0\u80D1\u80C8\u80C2\u80D0\u80C5\u80E3\u80D9\u80DC\u80CA\u80D5\u80C9\u80CF\u80D7\u80E6\u80CD\u81FF\u8221\u8294\u82D9\u82FE\u82F9\u8307\u82E8\u8300\u82D5\u833A\u82EB\u82D6\u82F4\u82EC\u82E1\u82F2\u82F5\u830C\u82FB\u82F6\u82F0\u82EA"],
["d0a1", "\u82E4\u82E0\u82FA\u82F3\u82ED\u8677\u8674\u867C\u8673\u8841\u884E\u8867\u886A\u8869\u89D3\u8A04\u8A07\u8D72\u8FE3\u8FE1\u8FEE\u8FE0\u90F1\u90BD\u90BF\u90D5\u90C5\u90BE\u90C7\u90CB\u90C8\u91D4\u91D3\u9654\u964F\u9651\u9653\u964A\u964E\u501E\u5005\u5007\u5013\u5022\u5030\u501B\u4FF5\u4FF4\u5033\u5037\u502C\u4FF6\u4FF7\u5017\u501C\u5020\u5027\u5035\u502F\u5031\u500E\u515A\u5194\u5193\u51CA\u51C4\u51C5\u51C8\u51CE\u5261\u525A\u5252\u525E\u525F\u5255\u5262\u52CD\u530E\u539E\u5526\u54E2\u5517\u5512\u54E7\u54F3\u54E4\u551A\u54FF\u5504\u5508\u54EB\u5511\u5505\u54F1"],
["d140", "\u550A\u54FB\u54F7\u54F8\u54E0\u550E\u5503\u550B\u5701\u5702\u57CC\u5832\u57D5\u57D2\u57BA\u57C6\u57BD\u57BC\u57B8\u57B6\u57BF\u57C7\u57D0\u57B9\u57C1\u590E\u594A\u5A19\u5A16\u5A2D\u5A2E\u5A15\u5A0F\u5A17\u5A0A\u5A1E\u5A33\u5B6C\u5BA7\u5BAD\u5BAC\u5C03\u5C56\u5C54\u5CEC\u5CFF\u5CEE\u5CF1\u5CF7\u5D00\u5CF9\u5E29\u5E28\u5EA8\u5EAE\u5EAA\u5EAC\u5F33\u5F30\u5F67\u605D\u605A\u6067"],
["d1a1", "\u6041\u60A2\u6088\u6080\u6092\u6081\u609D\u6083\u6095\u609B\u6097\u6087\u609C\u608E\u6219\u6246\u62F2\u6310\u6356\u632C\u6344\u6345\u6336\u6343\u63E4\u6339\u634B\u634A\u633C\u6329\u6341\u6334\u6358\u6354\u6359\u632D\u6347\u6333\u635A\u6351\u6338\u6357\u6340\u6348\u654A\u6546\u65C6\u65C3\u65C4\u65C2\u664A\u665F\u6647\u6651\u6712\u6713\u681F\u681A\u6849\u6832\u6833\u683B\u684B\u684F\u6816\u6831\u681C\u6835\u682B\u682D\u682F\u684E\u6844\u6834\u681D\u6812\u6814\u6826\u6828\u682E\u684D\u683A\u6825\u6820\u6B2C\u6B2F\u6B2D\u6B31\u6B34\u6B6D\u8082\u6B88\u6BE6\u6BE4"],
["d240", "\u6BE8\u6BE3\u6BE2\u6BE7\u6C25\u6D7A\u6D63\u6D64\u6D76\u6D0D\u6D61\u6D92\u6D58\u6D62\u6D6D\u6D6F\u6D91\u6D8D\u6DEF\u6D7F\u6D86\u6D5E\u6D67\u6D60\u6D97\u6D70\u6D7C\u6D5F\u6D82\u6D98\u6D2F\u6D68\u6D8B\u6D7E\u6D80\u6D84\u6D16\u6D83\u6D7B\u6D7D\u6D75\u6D90\u70DC\u70D3\u70D1\u70DD\u70CB\u7F39\u70E2\u70D7\u70D2\u70DE\u70E0\u70D4\u70CD\u70C5\u70C6\u70C7\u70DA\u70CE\u70E1\u7242\u7278"],
["d2a1", "\u7277\u7276\u7300\u72FA\u72F4\u72FE\u72F6\u72F3\u72FB\u7301\u73D3\u73D9\u73E5\u73D6\u73BC\u73E7\u73E3\u73E9\u73DC\u73D2\u73DB\u73D4\u73DD\u73DA\u73D7\u73D8\u73E8\u74DE\u74DF\u74F4\u74F5\u7521\u755B\u755F\u75B0\u75C1\u75BB\u75C4\u75C0\u75BF\u75B6\u75BA\u768A\u76C9\u771D\u771B\u7710\u7713\u7712\u7723\u7711\u7715\u7719\u771A\u7722\u7727\u7823\u782C\u7822\u7835\u782F\u7828\u782E\u782B\u7821\u7829\u7833\u782A\u7831\u7954\u795B\u794F\u795C\u7953\u7952\u7951\u79EB\u79EC\u79E0\u79EE\u79ED\u79EA\u79DC\u79DE\u79DD\u7A86\u7A89\u7A85\u7A8B\u7A8C\u7A8A\u7A87\u7AD8\u7B10"],
["d340", "\u7B04\u7B13\u7B05\u7B0F\u7B08\u7B0A\u7B0E\u7B09\u7B12\u7C84\u7C91\u7C8A\u7C8C\u7C88\u7C8D\u7C85\u7D1E\u7D1D\u7D11\u7D0E\u7D18\u7D16\u7D13\u7D1F\u7D12\u7D0F\u7D0C\u7F5C\u7F61\u7F5E\u7F60\u7F5D\u7F5B\u7F96\u7F92\u7FC3\u7FC2\u7FC0\u8016\u803E\u8039\u80FA\u80F2\u80F9\u80F5\u8101\u80FB\u8100\u8201\u822F\u8225\u8333\u832D\u8344\u8319\u8351\u8325\u8356\u833F\u8341\u8326\u831C\u8322"],
["d3a1", "\u8342\u834E\u831B\u832A\u8308\u833C\u834D\u8316\u8324\u8320\u8337\u832F\u8329\u8347\u8345\u834C\u8353\u831E\u832C\u834B\u8327\u8348\u8653\u8652\u86A2\u86A8\u8696\u868D\u8691\u869E\u8687\u8697\u8686\u868B\u869A\u8685\u86A5\u8699\u86A1\u86A7\u8695\u8698\u868E\u869D\u8690\u8694\u8843\u8844\u886D\u8875\u8876\u8872\u8880\u8871\u887F\u886F\u8883\u887E\u8874\u887C\u8A12\u8C47\u8C57\u8C7B\u8CA4\u8CA3\u8D76\u8D78\u8DB5\u8DB7\u8DB6\u8ED1\u8ED3\u8FFE\u8FF5\u9002\u8FFF\u8FFB\u9004\u8FFC\u8FF6\u90D6\u90E0\u90D9\u90DA\u90E3\u90DF\u90E5\u90D8\u90DB\u90D7\u90DC\u90E4\u9150"],
["d440", "\u914E\u914F\u91D5\u91E2\u91DA\u965C\u965F\u96BC\u98E3\u9ADF\u9B2F\u4E7F\u5070\u506A\u5061\u505E\u5060\u5053\u504B\u505D\u5072\u5048\u504D\u5041\u505B\u504A\u5062\u5015\u5045\u505F\u5069\u506B\u5063\u5064\u5046\u5040\u506E\u5073\u5057\u5051\u51D0\u526B\u526D\u526C\u526E\u52D6\u52D3\u532D\u539C\u5575\u5576\u553C\u554D\u5550\u5534\u552A\u5551\u5562\u5536\u5535\u5530\u5552\u5545"],
["d4a1", "\u550C\u5532\u5565\u554E\u5539\u5548\u552D\u553B\u5540\u554B\u570A\u5707\u57FB\u5814\u57E2\u57F6\u57DC\u57F4\u5800\u57ED\u57FD\u5808\u57F8\u580B\u57F3\u57CF\u5807\u57EE\u57E3\u57F2\u57E5\u57EC\u57E1\u580E\u57FC\u5810\u57E7\u5801\u580C\u57F1\u57E9\u57F0\u580D\u5804\u595C\u5A60\u5A58\u5A55\u5A67\u5A5E\u5A38\u5A35\u5A6D\u5A50\u5A5F\u5A65\u5A6C\u5A53\u5A64\u5A57\u5A43\u5A5D\u5A52\u5A44\u5A5B\u5A48\u5A8E\u5A3E\u5A4D\u5A39\u5A4C\u5A70\u5A69\u5A47\u5A51\u5A56\u5A42\u5A5C\u5B72\u5B6E\u5BC1\u5BC0\u5C59\u5D1E\u5D0B\u5D1D\u5D1A\u5D20\u5D0C\u5D28\u5D0D\u5D26\u5D25\u5D0F"],
["d540", "\u5D30\u5D12\u5D23\u5D1F\u5D2E\u5E3E\u5E34\u5EB1\u5EB4\u5EB9\u5EB2\u5EB3\u5F36\u5F38\u5F9B\u5F96\u5F9F\u608A\u6090\u6086\u60BE\u60B0\u60BA\u60D3\u60D4\u60CF\u60E4\u60D9\u60DD\u60C8\u60B1\u60DB\u60B7\u60CA\u60BF\u60C3\u60CD\u60C0\u6332\u6365\u638A\u6382\u637D\u63BD\u639E\u63AD\u639D\u6397\u63AB\u638E\u636F\u6387\u6390\u636E\u63AF\u6375\u639C\u636D\u63AE\u637C\u63A4\u633B\u639F"],
["d5a1", "\u6378\u6385\u6381\u6391\u638D\u6370\u6553\u65CD\u6665\u6661\u665B\u6659\u665C\u6662\u6718\u6879\u6887\u6890\u689C\u686D\u686E\u68AE\u68AB\u6956\u686F\u68A3\u68AC\u68A9\u6875\u6874\u68B2\u688F\u6877\u6892\u687C\u686B\u6872\u68AA\u6880\u6871\u687E\u689B\u6896\u688B\u68A0\u6889\u68A4\u6878\u687B\u6891\u688C\u688A\u687D\u6B36\u6B33\u6B37\u6B38\u6B91\u6B8F\u6B8D\u6B8E\u6B8C\u6C2A\u6DC0\u6DAB\u6DB4\u6DB3\u6E74\u6DAC\u6DE9\u6DE2\u6DB7\u6DF6\u6DD4\u6E00\u6DC8\u6DE0\u6DDF\u6DD6\u6DBE\u6DE5\u6DDC\u6DDD\u6DDB\u6DF4\u6DCA\u6DBD\u6DED\u6DF0\u6DBA\u6DD5\u6DC2\u6DCF\u6DC9"],
["d640", "\u6DD0\u6DF2\u6DD3\u6DFD\u6DD7\u6DCD\u6DE3\u6DBB\u70FA\u710D\u70F7\u7117\u70F4\u710C\u70F0\u7104\u70F3\u7110\u70FC\u70FF\u7106\u7113\u7100\u70F8\u70F6\u710B\u7102\u710E\u727E\u727B\u727C\u727F\u731D\u7317\u7307\u7311\u7318\u730A\u7308\u72FF\u730F\u731E\u7388\u73F6\u73F8\u73F5\u7404\u7401\u73FD\u7407\u7400\u73FA\u73FC\u73FF\u740C\u740B\u73F4\u7408\u7564\u7563\u75CE\u75D2\u75CF"],
["d6a1", "\u75CB\u75CC\u75D1\u75D0\u768F\u7689\u76D3\u7739\u772F\u772D\u7731\u7732\u7734\u7733\u773D\u7725\u773B\u7735\u7848\u7852\u7849\u784D\u784A\u784C\u7826\u7845\u7850\u7964\u7967\u7969\u796A\u7963\u796B\u7961\u79BB\u79FA\u79F8\u79F6\u79F7\u7A8F\u7A94\u7A90\u7B35\u7B47\u7B34\u7B25\u7B30\u7B22\u7B24\u7B33\u7B18\u7B2A\u7B1D\u7B31\u7B2B\u7B2D\u7B2F\u7B32\u7B38\u7B1A\u7B23\u7C94\u7C98\u7C96\u7CA3\u7D35\u7D3D\u7D38\u7D36\u7D3A\u7D45\u7D2C\u7D29\u7D41\u7D47\u7D3E\u7D3F\u7D4A\u7D3B\u7D28\u7F63\u7F95\u7F9C\u7F9D\u7F9B\u7FCA\u7FCB\u7FCD\u7FD0\u7FD1\u7FC7\u7FCF\u7FC9\u801F"],
["d740", "\u801E\u801B\u8047\u8043\u8048\u8118\u8125\u8119\u811B\u812D\u811F\u812C\u811E\u8121\u8115\u8127\u811D\u8122\u8211\u8238\u8233\u823A\u8234\u8232\u8274\u8390\u83A3\u83A8\u838D\u837A\u8373\u83A4\u8374\u838F\u8381\u8395\u8399\u8375\u8394\u83A9\u837D\u8383\u838C\u839D\u839B\u83AA\u838B\u837E\u83A5\u83AF\u8388\u8397\u83B0\u837F\u83A6\u8387\u83AE\u8376\u839A\u8659\u8656\u86BF\u86B7"],
["d7a1", "\u86C2\u86C1\u86C5\u86BA\u86B0\u86C8\u86B9\u86B3\u86B8\u86CC\u86B4\u86BB\u86BC\u86C3\u86BD\u86BE\u8852\u8889\u8895\u88A8\u88A2\u88AA\u889A\u8891\u88A1\u889F\u8898\u88A7\u8899\u889B\u8897\u88A4\u88AC\u888C\u8893\u888E\u8982\u89D6\u89D9\u89D5\u8A30\u8A27\u8A2C\u8A1E\u8C39\u8C3B\u8C5C\u8C5D\u8C7D\u8CA5\u8D7D\u8D7B\u8D79\u8DBC\u8DC2\u8DB9\u8DBF\u8DC1\u8ED8\u8EDE\u8EDD\u8EDC\u8ED7\u8EE0\u8EE1\u9024\u900B\u9011\u901C\u900C\u9021\u90EF\u90EA\u90F0\u90F4\u90F2\u90F3\u90D4\u90EB\u90EC\u90E9\u9156\u9158\u915A\u9153\u9155\u91EC\u91F4\u91F1\u91F3\u91F8\u91E4\u91F9\u91EA"],
["d840", "\u91EB\u91F7\u91E8\u91EE\u957A\u9586\u9588\u967C\u966D\u966B\u9671\u966F\u96BF\u976A\u9804\u98E5\u9997\u509B\u5095\u5094\u509E\u508B\u50A3\u5083\u508C\u508E\u509D\u5068\u509C\u5092\u5082\u5087\u515F\u51D4\u5312\u5311\u53A4\u53A7\u5591\u55A8\u55A5\u55AD\u5577\u5645\u55A2\u5593\u5588\u558F\u55B5\u5581\u55A3\u5592\u55A4\u557D\u558C\u55A6\u557F\u5595\u55A1\u558E\u570C\u5829\u5837"],
["d8a1", "\u5819\u581E\u5827\u5823\u5828\u57F5\u5848\u5825\u581C\u581B\u5833\u583F\u5836\u582E\u5839\u5838\u582D\u582C\u583B\u5961\u5AAF\u5A94\u5A9F\u5A7A\u5AA2\u5A9E\u5A78\u5AA6\u5A7C\u5AA5\u5AAC\u5A95\u5AAE\u5A37\u5A84\u5A8A\u5A97\u5A83\u5A8B\u5AA9\u5A7B\u5A7D\u5A8C\u5A9C\u5A8F\u5A93\u5A9D\u5BEA\u5BCD\u5BCB\u5BD4\u5BD1\u5BCA\u5BCE\u5C0C\u5C30\u5D37\u5D43\u5D6B\u5D41\u5D4B\u5D3F\u5D35\u5D51\u5D4E\u5D55\u5D33\u5D3A\u5D52\u5D3D\u5D31\u5D59\u5D42\u5D39\u5D49\u5D38\u5D3C\u5D32\u5D36\u5D40\u5D45\u5E44\u5E41\u5F58\u5FA6\u5FA5\u5FAB\u60C9\u60B9\u60CC\u60E2\u60CE\u60C4\u6114"],
["d940", "\u60F2\u610A\u6116\u6105\u60F5\u6113\u60F8\u60FC\u60FE\u60C1\u6103\u6118\u611D\u6110\u60FF\u6104\u610B\u624A\u6394\u63B1\u63B0\u63CE\u63E5\u63E8\u63EF\u63C3\u649D\u63F3\u63CA\u63E0\u63F6\u63D5\u63F2\u63F5\u6461\u63DF\u63BE\u63DD\u63DC\u63C4\u63D8\u63D3\u63C2\u63C7\u63CC\u63CB\u63C8\u63F0\u63D7\u63D9\u6532\u6567\u656A\u6564\u655C\u6568\u6565\u658C\u659D\u659E\u65AE\u65D0\u65D2"],
["d9a1", "\u667C\u666C\u667B\u6680\u6671\u6679\u666A\u6672\u6701\u690C\u68D3\u6904\u68DC\u692A\u68EC\u68EA\u68F1\u690F\u68D6\u68F7\u68EB\u68E4\u68F6\u6913\u6910\u68F3\u68E1\u6907\u68CC\u6908\u6970\u68B4\u6911\u68EF\u68C6\u6914\u68F8\u68D0\u68FD\u68FC\u68E8\u690B\u690A\u6917\u68CE\u68C8\u68DD\u68DE\u68E6\u68F4\u68D1\u6906\u68D4\u68E9\u6915\u6925\u68C7\u6B39\u6B3B\u6B3F\u6B3C\u6B94\u6B97\u6B99\u6B95\u6BBD\u6BF0\u6BF2\u6BF3\u6C30\u6DFC\u6E46\u6E47\u6E1F\u6E49\u6E88\u6E3C\u6E3D\u6E45\u6E62\u6E2B\u6E3F\u6E41\u6E5D\u6E73\u6E1C\u6E33\u6E4B\u6E40\u6E51\u6E3B\u6E03\u6E2E\u6E5E"],
["da40", "\u6E68\u6E5C\u6E61\u6E31\u6E28\u6E60\u6E71\u6E6B\u6E39\u6E22\u6E30\u6E53\u6E65\u6E27\u6E78\u6E64\u6E77\u6E55\u6E79\u6E52\u6E66\u6E35\u6E36\u6E5A\u7120\u711E\u712F\u70FB\u712E\u7131\u7123\u7125\u7122\u7132\u711F\u7128\u713A\u711B\u724B\u725A\u7288\u7289\u7286\u7285\u728B\u7312\u730B\u7330\u7322\u7331\u7333\u7327\u7332\u732D\u7326\u7323\u7335\u730C\u742E\u742C\u7430\u742B\u7416"],
["daa1", "\u741A\u7421\u742D\u7431\u7424\u7423\u741D\u7429\u7420\u7432\u74FB\u752F\u756F\u756C\u75E7\u75DA\u75E1\u75E6\u75DD\u75DF\u75E4\u75D7\u7695\u7692\u76DA\u7746\u7747\u7744\u774D\u7745\u774A\u774E\u774B\u774C\u77DE\u77EC\u7860\u7864\u7865\u785C\u786D\u7871\u786A\u786E\u7870\u7869\u7868\u785E\u7862\u7974\u7973\u7972\u7970\u7A02\u7A0A\u7A03\u7A0C\u7A04\u7A99\u7AE6\u7AE4\u7B4A\u7B3B\u7B44\u7B48\u7B4C\u7B4E\u7B40\u7B58\u7B45\u7CA2\u7C9E\u7CA8\u7CA1\u7D58\u7D6F\u7D63\u7D53\u7D56\u7D67\u7D6A\u7D4F\u7D6D\u7D5C\u7D6B\u7D52\u7D54\u7D69\u7D51\u7D5F\u7D4E\u7F3E\u7F3F\u7F65"],
["db40", "\u7F66\u7FA2\u7FA0\u7FA1\u7FD7\u8051\u804F\u8050\u80FE\u80D4\u8143\u814A\u8152\u814F\u8147\u813D\u814D\u813A\u81E6\u81EE\u81F7\u81F8\u81F9\u8204\u823C\u823D\u823F\u8275\u833B\u83CF\u83F9\u8423\u83C0\u83E8\u8412\u83E7\u83E4\u83FC\u83F6\u8410\u83C6\u83C8\u83EB\u83E3\u83BF\u8401\u83DD\u83E5\u83D8\u83FF\u83E1\u83CB\u83CE\u83D6\u83F5\u83C9\u8409\u840F\u83DE\u8411\u8406\u83C2\u83F3"],
["dba1", "\u83D5\u83FA\u83C7\u83D1\u83EA\u8413\u83C3\u83EC\u83EE\u83C4\u83FB\u83D7\u83E2\u841B\u83DB\u83FE\u86D8\u86E2\u86E6\u86D3\u86E3\u86DA\u86EA\u86DD\u86EB\u86DC\u86EC\u86E9\u86D7\u86E8\u86D1\u8848\u8856\u8855\u88BA\u88D7\u88B9\u88B8\u88C0\u88BE\u88B6\u88BC\u88B7\u88BD\u88B2\u8901\u88C9\u8995\u8998\u8997\u89DD\u89DA\u89DB\u8A4E\u8A4D\u8A39\u8A59\u8A40\u8A57\u8A58\u8A44\u8A45\u8A52\u8A48\u8A51\u8A4A\u8A4C\u8A4F\u8C5F\u8C81\u8C80\u8CBA\u8CBE\u8CB0\u8CB9\u8CB5\u8D84\u8D80\u8D89\u8DD8\u8DD3\u8DCD\u8DC7\u8DD6\u8DDC\u8DCF\u8DD5\u8DD9\u8DC8\u8DD7\u8DC5\u8EEF\u8EF7\u8EFA"],
["dc40", "\u8EF9\u8EE6\u8EEE\u8EE5\u8EF5\u8EE7\u8EE8\u8EF6\u8EEB\u8EF1\u8EEC\u8EF4\u8EE9\u902D\u9034\u902F\u9106\u912C\u9104\u90FF\u90FC\u9108\u90F9\u90FB\u9101\u9100\u9107\u9105\u9103\u9161\u9164\u915F\u9162\u9160\u9201\u920A\u9225\u9203\u921A\u9226\u920F\u920C\u9200\u9212\u91FF\u91FD\u9206\u9204\u9227\u9202\u921C\u9224\u9219\u9217\u9205\u9216\u957B\u958D\u958C\u9590\u9687\u967E\u9688"],
["dca1", "\u9689\u9683\u9680\u96C2\u96C8\u96C3\u96F1\u96F0\u976C\u9770\u976E\u9807\u98A9\u98EB\u9CE6\u9EF9\u4E83\u4E84\u4EB6\u50BD\u50BF\u50C6\u50AE\u50C4\u50CA\u50B4\u50C8\u50C2\u50B0\u50C1\u50BA\u50B1\u50CB\u50C9\u50B6\u50B8\u51D7\u527A\u5278\u527B\u527C\u55C3\u55DB\u55CC\u55D0\u55CB\u55CA\u55DD\u55C0\u55D4\u55C4\u55E9\u55BF\u55D2\u558D\u55CF\u55D5\u55E2\u55D6\u55C8\u55F2\u55CD\u55D9\u55C2\u5714\u5853\u5868\u5864\u584F\u584D\u5849\u586F\u5855\u584E\u585D\u5859\u5865\u585B\u583D\u5863\u5871\u58FC\u5AC7\u5AC4\u5ACB\u5ABA\u5AB8\u5AB1\u5AB5\u5AB0\u5ABF\u5AC8\u5ABB\u5AC6"],
["dd40", "\u5AB7\u5AC0\u5ACA\u5AB4\u5AB6\u5ACD\u5AB9\u5A90\u5BD6\u5BD8\u5BD9\u5C1F\u5C33\u5D71\u5D63\u5D4A\u5D65\u5D72\u5D6C\u5D5E\u5D68\u5D67\u5D62\u5DF0\u5E4F\u5E4E\u5E4A\u5E4D\u5E4B\u5EC5\u5ECC\u5EC6\u5ECB\u5EC7\u5F40\u5FAF\u5FAD\u60F7\u6149\u614A\u612B\u6145\u6136\u6132\u612E\u6146\u612F\u614F\u6129\u6140\u6220\u9168\u6223\u6225\u6224\u63C5\u63F1\u63EB\u6410\u6412\u6409\u6420\u6424"],
["dda1", "\u6433\u6443\u641F\u6415\u6418\u6439\u6437\u6422\u6423\u640C\u6426\u6430\u6428\u6441\u6435\u642F\u640A\u641A\u6440\u6425\u6427\u640B\u63E7\u641B\u642E\u6421\u640E\u656F\u6592\u65D3\u6686\u668C\u6695\u6690\u668B\u668A\u6699\u6694\u6678\u6720\u6966\u695F\u6938\u694E\u6962\u6971\u693F\u6945\u696A\u6939\u6942\u6957\u6959\u697A\u6948\u6949\u6935\u696C\u6933\u693D\u6965\u68F0\u6978\u6934\u6969\u6940\u696F\u6944\u6976\u6958\u6941\u6974\u694C\u693B\u694B\u6937\u695C\u694F\u6951\u6932\u6952\u692F\u697B\u693C\u6B46\u6B45\u6B43\u6B42\u6B48\u6B41\u6B9B\uFA0D\u6BFB\u6BFC"],
["de40", "\u6BF9\u6BF7\u6BF8\u6E9B\u6ED6\u6EC8\u6E8F\u6EC0\u6E9F\u6E93\u6E94\u6EA0\u6EB1\u6EB9\u6EC6\u6ED2\u6EBD\u6EC1\u6E9E\u6EC9\u6EB7\u6EB0\u6ECD\u6EA6\u6ECF\u6EB2\u6EBE\u6EC3\u6EDC\u6ED8\u6E99\u6E92\u6E8E\u6E8D\u6EA4\u6EA1\u6EBF\u6EB3\u6ED0\u6ECA\u6E97\u6EAE\u6EA3\u7147\u7154\u7152\u7163\u7160\u7141\u715D\u7162\u7172\u7178\u716A\u7161\u7142\u7158\u7143\u714B\u7170\u715F\u7150\u7153"],
["dea1", "\u7144\u714D\u715A\u724F\u728D\u728C\u7291\u7290\u728E\u733C\u7342\u733B\u733A\u7340\u734A\u7349\u7444\u744A\u744B\u7452\u7451\u7457\u7440\u744F\u7450\u744E\u7442\u7446\u744D\u7454\u74E1\u74FF\u74FE\u74FD\u751D\u7579\u7577\u6983\u75EF\u760F\u7603\u75F7\u75FE\u75FC\u75F9\u75F8\u7610\u75FB\u75F6\u75ED\u75F5\u75FD\u7699\u76B5\u76DD\u7755\u775F\u7760\u7752\u7756\u775A\u7769\u7767\u7754\u7759\u776D\u77E0\u7887\u789A\u7894\u788F\u7884\u7895\u7885\u7886\u78A1\u7883\u7879\u7899\u7880\u7896\u787B\u797C\u7982\u797D\u7979\u7A11\u7A18\u7A19\u7A12\u7A17\u7A15\u7A22\u7A13"],
["df40", "\u7A1B\u7A10\u7AA3\u7AA2\u7A9E\u7AEB\u7B66\u7B64\u7B6D\u7B74\u7B69\u7B72\u7B65\u7B73\u7B71\u7B70\u7B61\u7B78\u7B76\u7B63\u7CB2\u7CB4\u7CAF\u7D88\u7D86\u7D80\u7D8D\u7D7F\u7D85\u7D7A\u7D8E\u7D7B\u7D83\u7D7C\u7D8C\u7D94\u7D84\u7D7D\u7D92\u7F6D\u7F6B\u7F67\u7F68\u7F6C\u7FA6\u7FA5\u7FA7\u7FDB\u7FDC\u8021\u8164\u8160\u8177\u815C\u8169\u815B\u8162\u8172\u6721\u815E\u8176\u8167\u816F"],
["dfa1", "\u8144\u8161\u821D\u8249\u8244\u8240\u8242\u8245\u84F1\u843F\u8456\u8476\u8479\u848F\u848D\u8465\u8451\u8440\u8486\u8467\u8430\u844D\u847D\u845A\u8459\u8474\u8473\u845D\u8507\u845E\u8437\u843A\u8434\u847A\u8443\u8478\u8432\u8445\u8429\u83D9\u844B\u842F\u8442\u842D\u845F\u8470\u8439\u844E\u844C\u8452\u846F\u84C5\u848E\u843B\u8447\u8436\u8433\u8468\u847E\u8444\u842B\u8460\u8454\u846E\u8450\u870B\u8704\u86F7\u870C\u86FA\u86D6\u86F5\u874D\u86F8\u870E\u8709\u8701\u86F6\u870D\u8705\u88D6\u88CB\u88CD\u88CE\u88DE\u88DB\u88DA\u88CC\u88D0\u8985\u899B\u89DF\u89E5\u89E4"],
["e040", "\u89E1\u89E0\u89E2\u89DC\u89E6\u8A76\u8A86\u8A7F\u8A61\u8A3F\u8A77\u8A82\u8A84\u8A75\u8A83\u8A81\u8A74\u8A7A\u8C3C\u8C4B\u8C4A\u8C65\u8C64\u8C66\u8C86\u8C84\u8C85\u8CCC\u8D68\u8D69\u8D91\u8D8C\u8D8E\u8D8F\u8D8D\u8D93\u8D94\u8D90\u8D92\u8DF0\u8DE0\u8DEC\u8DF1\u8DEE\u8DD0\u8DE9\u8DE3\u8DE2\u8DE7\u8DF2\u8DEB\u8DF4\u8F06\u8EFF\u8F01\u8F00\u8F05\u8F07\u8F08\u8F02\u8F0B\u9052\u903F"],
["e0a1", "\u9044\u9049\u903D\u9110\u910D\u910F\u9111\u9116\u9114\u910B\u910E\u916E\u916F\u9248\u9252\u9230\u923A\u9266\u9233\u9265\u925E\u9283\u922E\u924A\u9246\u926D\u926C\u924F\u9260\u9267\u926F\u9236\u9261\u9270\u9231\u9254\u9263\u9250\u9272\u924E\u9253\u924C\u9256\u9232\u959F\u959C\u959E\u959B\u9692\u9693\u9691\u9697\u96CE\u96FA\u96FD\u96F8\u96F5\u9773\u9777\u9778\u9772\u980F\u980D\u980E\u98AC\u98F6\u98F9\u99AF\u99B2\u99B0\u99B5\u9AAD\u9AAB\u9B5B\u9CEA\u9CED\u9CE7\u9E80\u9EFD\u50E6\u50D4\u50D7\u50E8\u50F3\u50DB\u50EA\u50DD\u50E4\u50D3\u50EC\u50F0\u50EF\u50E3\u50E0"],
["e140", "\u51D8\u5280\u5281\u52E9\u52EB\u5330\u53AC\u5627\u5615\u560C\u5612\u55FC\u560F\u561C\u5601\u5613\u5602\u55FA\u561D\u5604\u55FF\u55F9\u5889\u587C\u5890\u5898\u5886\u5881\u587F\u5874\u588B\u587A\u5887\u5891\u588E\u5876\u5882\u5888\u587B\u5894\u588F\u58FE\u596B\u5ADC\u5AEE\u5AE5\u5AD5\u5AEA\u5ADA\u5AED\u5AEB\u5AF3\u5AE2\u5AE0\u5ADB\u5AEC\u5ADE\u5ADD\u5AD9\u5AE8\u5ADF\u5B77\u5BE0"],
["e1a1", "\u5BE3\u5C63\u5D82\u5D80\u5D7D\u5D86\u5D7A\u5D81\u5D77\u5D8A\u5D89\u5D88\u5D7E\u5D7C\u5D8D\u5D79\u5D7F\u5E58\u5E59\u5E53\u5ED8\u5ED1\u5ED7\u5ECE\u5EDC\u5ED5\u5ED9\u5ED2\u5ED4\u5F44\u5F43\u5F6F\u5FB6\u612C\u6128\u6141\u615E\u6171\u6173\u6152\u6153\u6172\u616C\u6180\u6174\u6154\u617A\u615B\u6165\u613B\u616A\u6161\u6156\u6229\u6227\u622B\u642B\u644D\u645B\u645D\u6474\u6476\u6472\u6473\u647D\u6475\u6466\u64A6\u644E\u6482\u645E\u645C\u644B\u6453\u6460\u6450\u647F\u643F\u646C\u646B\u6459\u6465\u6477\u6573\u65A0\u66A1\u66A0\u669F\u6705\u6704\u6722\u69B1\u69B6\u69C9"],
["e240", "\u69A0\u69CE\u6996\u69B0\u69AC\u69BC\u6991\u6999\u698E\u69A7\u698D\u69A9\u69BE\u69AF\u69BF\u69C4\u69BD\u69A4\u69D4\u69B9\u69CA\u699A\u69CF\u69B3\u6993\u69AA\u69A1\u699E\u69D9\u6997\u6990\u69C2\u69B5\u69A5\u69C6\u6B4A\u6B4D\u6B4B\u6B9E\u6B9F\u6BA0\u6BC3\u6BC4\u6BFE\u6ECE\u6EF5\u6EF1\u6F03\u6F25\u6EF8\u6F37\u6EFB\u6F2E\u6F09\u6F4E\u6F19\u6F1A\u6F27\u6F18\u6F3B\u6F12\u6EED\u6F0A"],
["e2a1", "\u6F36\u6F73\u6EF9\u6EEE\u6F2D\u6F40\u6F30\u6F3C\u6F35\u6EEB\u6F07\u6F0E\u6F43\u6F05\u6EFD\u6EF6\u6F39\u6F1C\u6EFC\u6F3A\u6F1F\u6F0D\u6F1E\u6F08\u6F21\u7187\u7190\u7189\u7180\u7185\u7182\u718F\u717B\u7186\u7181\u7197\u7244\u7253\u7297\u7295\u7293\u7343\u734D\u7351\u734C\u7462\u7473\u7471\u7475\u7472\u7467\u746E\u7500\u7502\u7503\u757D\u7590\u7616\u7608\u760C\u7615\u7611\u760A\u7614\u76B8\u7781\u777C\u7785\u7782\u776E\u7780\u776F\u777E\u7783\u78B2\u78AA\u78B4\u78AD\u78A8\u787E\u78AB\u789E\u78A5\u78A0\u78AC\u78A2\u78A4\u7998\u798A\u798B\u7996\u7995\u7994\u7993"],
["e340", "\u7997\u7988\u7992\u7990\u7A2B\u7A4A\u7A30\u7A2F\u7A28\u7A26\u7AA8\u7AAB\u7AAC\u7AEE\u7B88\u7B9C\u7B8A\u7B91\u7B90\u7B96\u7B8D\u7B8C\u7B9B\u7B8E\u7B85\u7B98\u5284\u7B99\u7BA4\u7B82\u7CBB\u7CBF\u7CBC\u7CBA\u7DA7\u7DB7\u7DC2\u7DA3\u7DAA\u7DC1\u7DC0\u7DC5\u7D9D\u7DCE\u7DC4\u7DC6\u7DCB\u7DCC\u7DAF\u7DB9\u7D96\u7DBC\u7D9F\u7DA6\u7DAE\u7DA9\u7DA1\u7DC9\u7F73\u7FE2\u7FE3\u7FE5\u7FDE"],
["e3a1", "\u8024\u805D\u805C\u8189\u8186\u8183\u8187\u818D\u818C\u818B\u8215\u8497\u84A4\u84A1\u849F\u84BA\u84CE\u84C2\u84AC\u84AE\u84AB\u84B9\u84B4\u84C1\u84CD\u84AA\u849A\u84B1\u84D0\u849D\u84A7\u84BB\u84A2\u8494\u84C7\u84CC\u849B\u84A9\u84AF\u84A8\u84D6\u8498\u84B6\u84CF\u84A0\u84D7\u84D4\u84D2\u84DB\u84B0\u8491\u8661\u8733\u8723\u8728\u876B\u8740\u872E\u871E\u8721\u8719\u871B\u8743\u872C\u8741\u873E\u8746\u8720\u8732\u872A\u872D\u873C\u8712\u873A\u8731\u8735\u8742\u8726\u8727\u8738\u8724\u871A\u8730\u8711\u88F7\u88E7\u88F1\u88F2\u88FA\u88FE\u88EE\u88FC\u88F6\u88FB"],
["e440", "\u88F0\u88EC\u88EB\u899D\u89A1\u899F\u899E\u89E9\u89EB\u89E8\u8AAB\u8A99\u8A8B\u8A92\u8A8F\u8A96\u8C3D\u8C68\u8C69\u8CD5\u8CCF\u8CD7\u8D96\u8E09\u8E02\u8DFF\u8E0D\u8DFD\u8E0A\u8E03\u8E07\u8E06\u8E05\u8DFE\u8E00\u8E04\u8F10\u8F11\u8F0E\u8F0D\u9123\u911C\u9120\u9122\u911F\u911D\u911A\u9124\u9121\u911B\u917A\u9172\u9179\u9173\u92A5\u92A4\u9276\u929B\u927A\u92A0\u9294\u92AA\u928D"],
["e4a1", "\u92A6\u929A\u92AB\u9279\u9297\u927F\u92A3\u92EE\u928E\u9282\u9295\u92A2\u927D\u9288\u92A1\u928A\u9286\u928C\u9299\u92A7\u927E\u9287\u92A9\u929D\u928B\u922D\u969E\u96A1\u96FF\u9758\u977D\u977A\u977E\u9783\u9780\u9782\u977B\u9784\u9781\u977F\u97CE\u97CD\u9816\u98AD\u98AE\u9902\u9900\u9907\u999D\u999C\u99C3\u99B9\u99BB\u99BA\u99C2\u99BD\u99C7\u9AB1\u9AE3\u9AE7\u9B3E\u9B3F\u9B60\u9B61\u9B5F\u9CF1\u9CF2\u9CF5\u9EA7\u50FF\u5103\u5130\u50F8\u5106\u5107\u50F6\u50FE\u510B\u510C\u50FD\u510A\u528B\u528C\u52F1\u52EF\u5648\u5642\u564C\u5635\u5641\u564A\u5649\u5646\u5658"],
["e540", "\u565A\u5640\u5633\u563D\u562C\u563E\u5638\u562A\u563A\u571A\u58AB\u589D\u58B1\u58A0\u58A3\u58AF\u58AC\u58A5\u58A1\u58FF\u5AFF\u5AF4\u5AFD\u5AF7\u5AF6\u5B03\u5AF8\u5B02\u5AF9\u5B01\u5B07\u5B05\u5B0F\u5C67\u5D99\u5D97\u5D9F\u5D92\u5DA2\u5D93\u5D95\u5DA0\u5D9C\u5DA1\u5D9A\u5D9E\u5E69\u5E5D\u5E60\u5E5C\u7DF3\u5EDB\u5EDE\u5EE1\u5F49\u5FB2\u618B\u6183\u6179\u61B1\u61B0\u61A2\u6189"],
["e5a1", "\u619B\u6193\u61AF\u61AD\u619F\u6192\u61AA\u61A1\u618D\u6166\u61B3\u622D\u646E\u6470\u6496\u64A0\u6485\u6497\u649C\u648F\u648B\u648A\u648C\u64A3\u649F\u6468\u64B1\u6498\u6576\u657A\u6579\u657B\u65B2\u65B3\u66B5\u66B0\u66A9\u66B2\u66B7\u66AA\u66AF\u6A00\u6A06\u6A17\u69E5\u69F8\u6A15\u69F1\u69E4\u6A20\u69FF\u69EC\u69E2\u6A1B\u6A1D\u69FE\u6A27\u69F2\u69EE\u6A14\u69F7\u69E7\u6A40\u6A08\u69E6\u69FB\u6A0D\u69FC\u69EB\u6A09\u6A04\u6A18\u6A25\u6A0F\u69F6\u6A26\u6A07\u69F4\u6A16\u6B51\u6BA5\u6BA3\u6BA2\u6BA6\u6C01\u6C00\u6BFF\u6C02\u6F41\u6F26\u6F7E\u6F87\u6FC6\u6F92"],
["e640", "\u6F8D\u6F89\u6F8C\u6F62\u6F4F\u6F85\u6F5A\u6F96\u6F76\u6F6C\u6F82\u6F55\u6F72\u6F52\u6F50\u6F57\u6F94\u6F93\u6F5D\u6F00\u6F61\u6F6B\u6F7D\u6F67\u6F90\u6F53\u6F8B\u6F69\u6F7F\u6F95\u6F63\u6F77\u6F6A\u6F7B\u71B2\u71AF\u719B\u71B0\u71A0\u719A\u71A9\u71B5\u719D\u71A5\u719E\u71A4\u71A1\u71AA\u719C\u71A7\u71B3\u7298\u729A\u7358\u7352\u735E\u735F\u7360\u735D\u735B\u7361\u735A\u7359"],
["e6a1", "\u7362\u7487\u7489\u748A\u7486\u7481\u747D\u7485\u7488\u747C\u7479\u7508\u7507\u757E\u7625\u761E\u7619\u761D\u761C\u7623\u761A\u7628\u761B\u769C\u769D\u769E\u769B\u778D\u778F\u7789\u7788\u78CD\u78BB\u78CF\u78CC\u78D1\u78CE\u78D4\u78C8\u78C3\u78C4\u78C9\u799A\u79A1\u79A0\u799C\u79A2\u799B\u6B76\u7A39\u7AB2\u7AB4\u7AB3\u7BB7\u7BCB\u7BBE\u7BAC\u7BCE\u7BAF\u7BB9\u7BCA\u7BB5\u7CC5\u7CC8\u7CCC\u7CCB\u7DF7\u7DDB\u7DEA\u7DE7\u7DD7\u7DE1\u7E03\u7DFA\u7DE6\u7DF6\u7DF1\u7DF0\u7DEE\u7DDF\u7F76\u7FAC\u7FB0\u7FAD\u7FED\u7FEB\u7FEA\u7FEC\u7FE6\u7FE8\u8064\u8067\u81A3\u819F"],
["e740", "\u819E\u8195\u81A2\u8199\u8197\u8216\u824F\u8253\u8252\u8250\u824E\u8251\u8524\u853B\u850F\u8500\u8529\u850E\u8509\u850D\u851F\u850A\u8527\u851C\u84FB\u852B\u84FA\u8508\u850C\u84F4\u852A\u84F2\u8515\u84F7\u84EB\u84F3\u84FC\u8512\u84EA\u84E9\u8516\u84FE\u8528\u851D\u852E\u8502\u84FD\u851E\u84F6\u8531\u8526\u84E7\u84E8\u84F0\u84EF\u84F9\u8518\u8520\u8530\u850B\u8519\u852F\u8662"],
["e7a1", "\u8756\u8763\u8764\u8777\u87E1\u8773\u8758\u8754\u875B\u8752\u8761\u875A\u8751\u875E\u876D\u876A\u8750\u874E\u875F\u875D\u876F\u876C\u877A\u876E\u875C\u8765\u874F\u877B\u8775\u8762\u8767\u8769\u885A\u8905\u890C\u8914\u890B\u8917\u8918\u8919\u8906\u8916\u8911\u890E\u8909\u89A2\u89A4\u89A3\u89ED\u89F0\u89EC\u8ACF\u8AC6\u8AB8\u8AD3\u8AD1\u8AD4\u8AD5\u8ABB\u8AD7\u8ABE\u8AC0\u8AC5\u8AD8\u8AC3\u8ABA\u8ABD\u8AD9\u8C3E\u8C4D\u8C8F\u8CE5\u8CDF\u8CD9\u8CE8\u8CDA\u8CDD\u8CE7\u8DA0\u8D9C\u8DA1\u8D9B\u8E20\u8E23\u8E25\u8E24\u8E2E\u8E15\u8E1B\u8E16\u8E11\u8E19\u8E26\u8E27"],
["e840", "\u8E14\u8E12\u8E18\u8E13\u8E1C\u8E17\u8E1A\u8F2C\u8F24\u8F18\u8F1A\u8F20\u8F23\u8F16\u8F17\u9073\u9070\u906F\u9067\u906B\u912F\u912B\u9129\u912A\u9132\u9126\u912E\u9185\u9186\u918A\u9181\u9182\u9184\u9180\u92D0\u92C3\u92C4\u92C0\u92D9\u92B6\u92CF\u92F1\u92DF\u92D8\u92E9\u92D7\u92DD\u92CC\u92EF\u92C2\u92E8\u92CA\u92C8\u92CE\u92E6\u92CD\u92D5\u92C9\u92E0\u92DE\u92E7\u92D1\u92D3"],
["e8a1", "\u92B5\u92E1\u92C6\u92B4\u957C\u95AC\u95AB\u95AE\u95B0\u96A4\u96A2\u96D3\u9705\u9708\u9702\u975A\u978A\u978E\u9788\u97D0\u97CF\u981E\u981D\u9826\u9829\u9828\u9820\u981B\u9827\u98B2\u9908\u98FA\u9911\u9914\u9916\u9917\u9915\u99DC\u99CD\u99CF\u99D3\u99D4\u99CE\u99C9\u99D6\u99D8\u99CB\u99D7\u99CC\u9AB3\u9AEC\u9AEB\u9AF3\u9AF2\u9AF1\u9B46\u9B43\u9B67\u9B74\u9B71\u9B66\u9B76\u9B75\u9B70\u9B68\u9B64\u9B6C\u9CFC\u9CFA\u9CFD\u9CFF\u9CF7\u9D07\u9D00\u9CF9\u9CFB\u9D08\u9D05\u9D04\u9E83\u9ED3\u9F0F\u9F10\u511C\u5113\u5117\u511A\u5111\u51DE\u5334\u53E1\u5670\u5660\u566E"],
["e940", "\u5673\u5666\u5663\u566D\u5672\u565E\u5677\u571C\u571B\u58C8\u58BD\u58C9\u58BF\u58BA\u58C2\u58BC\u58C6\u5B17\u5B19\u5B1B\u5B21\u5B14\u5B13\u5B10\u5B16\u5B28\u5B1A\u5B20\u5B1E\u5BEF\u5DAC\u5DB1\u5DA9\u5DA7\u5DB5\u5DB0\u5DAE\u5DAA\u5DA8\u5DB2\u5DAD\u5DAF\u5DB4\u5E67\u5E68\u5E66\u5E6F\u5EE9\u5EE7\u5EE6\u5EE8\u5EE5\u5F4B\u5FBC\u619D\u61A8\u6196\u61C5\u61B4\u61C6\u61C1\u61CC\u61BA"],
["e9a1", "\u61BF\u61B8\u618C\u64D7\u64D6\u64D0\u64CF\u64C9\u64BD\u6489\u64C3\u64DB\u64F3\u64D9\u6533\u657F\u657C\u65A2\u66C8\u66BE\u66C0\u66CA\u66CB\u66CF\u66BD\u66BB\u66BA\u66CC\u6723\u6A34\u6A66\u6A49\u6A67\u6A32\u6A68\u6A3E\u6A5D\u6A6D\u6A76\u6A5B\u6A51\u6A28\u6A5A\u6A3B\u6A3F\u6A41\u6A6A\u6A64\u6A50\u6A4F\u6A54\u6A6F\u6A69\u6A60\u6A3C\u6A5E\u6A56\u6A55\u6A4D\u6A4E\u6A46\u6B55\u6B54\u6B56\u6BA7\u6BAA\u6BAB\u6BC8\u6BC7\u6C04\u6C03\u6C06\u6FAD\u6FCB\u6FA3\u6FC7\u6FBC\u6FCE\u6FC8\u6F5E\u6FC4\u6FBD\u6F9E\u6FCA\u6FA8\u7004\u6FA5\u6FAE\u6FBA\u6FAC\u6FAA\u6FCF\u6FBF\u6FB8"],
["ea40", "\u6FA2\u6FC9\u6FAB\u6FCD\u6FAF\u6FB2\u6FB0\u71C5\u71C2\u71BF\u71B8\u71D6\u71C0\u71C1\u71CB\u71D4\u71CA\u71C7\u71CF\u71BD\u71D8\u71BC\u71C6\u71DA\u71DB\u729D\u729E\u7369\u7366\u7367\u736C\u7365\u736B\u736A\u747F\u749A\u74A0\u7494\u7492\u7495\u74A1\u750B\u7580\u762F\u762D\u7631\u763D\u7633\u763C\u7635\u7632\u7630\u76BB\u76E6\u779A\u779D\u77A1\u779C\u779B\u77A2\u77A3\u7795\u7799"],
["eaa1", "\u7797\u78DD\u78E9\u78E5\u78EA\u78DE\u78E3\u78DB\u78E1\u78E2\u78ED\u78DF\u78E0\u79A4\u7A44\u7A48\u7A47\u7AB6\u7AB8\u7AB5\u7AB1\u7AB7\u7BDE\u7BE3\u7BE7\u7BDD\u7BD5\u7BE5\u7BDA\u7BE8\u7BF9\u7BD4\u7BEA\u7BE2\u7BDC\u7BEB\u7BD8\u7BDF\u7CD2\u7CD4\u7CD7\u7CD0\u7CD1\u7E12\u7E21\u7E17\u7E0C\u7E1F\u7E20\u7E13\u7E0E\u7E1C\u7E15\u7E1A\u7E22\u7E0B\u7E0F\u7E16\u7E0D\u7E14\u7E25\u7E24\u7F43\u7F7B\u7F7C\u7F7A\u7FB1\u7FEF\u802A\u8029\u806C\u81B1\u81A6\u81AE\u81B9\u81B5\u81AB\u81B0\u81AC\u81B4\u81B2\u81B7\u81A7\u81F2\u8255\u8256\u8257\u8556\u8545\u856B\u854D\u8553\u8561\u8558"],
["eb40", "\u8540\u8546\u8564\u8541\u8562\u8544\u8551\u8547\u8563\u853E\u855B\u8571\u854E\u856E\u8575\u8555\u8567\u8560\u858C\u8566\u855D\u8554\u8565\u856C\u8663\u8665\u8664\u879B\u878F\u8797\u8793\u8792\u8788\u8781\u8796\u8798\u8779\u8787\u87A3\u8785\u8790\u8791\u879D\u8784\u8794\u879C\u879A\u8789\u891E\u8926\u8930\u892D\u892E\u8927\u8931\u8922\u8929\u8923\u892F\u892C\u891F\u89F1\u8AE0"],
["eba1", "\u8AE2\u8AF2\u8AF4\u8AF5\u8ADD\u8B14\u8AE4\u8ADF\u8AF0\u8AC8\u8ADE\u8AE1\u8AE8\u8AFF\u8AEF\u8AFB\u8C91\u8C92\u8C90\u8CF5\u8CEE\u8CF1\u8CF0\u8CF3\u8D6C\u8D6E\u8DA5\u8DA7\u8E33\u8E3E\u8E38\u8E40\u8E45\u8E36\u8E3C\u8E3D\u8E41\u8E30\u8E3F\u8EBD\u8F36\u8F2E\u8F35\u8F32\u8F39\u8F37\u8F34\u9076\u9079\u907B\u9086\u90FA\u9133\u9135\u9136\u9193\u9190\u9191\u918D\u918F\u9327\u931E\u9308\u931F\u9306\u930F\u937A\u9338\u933C\u931B\u9323\u9312\u9301\u9346\u932D\u930E\u930D\u92CB\u931D\u92FA\u9325\u9313\u92F9\u92F7\u9334\u9302\u9324\u92FF\u9329\u9339\u9335\u932A\u9314\u930C"],
["ec40", "\u930B\u92FE\u9309\u9300\u92FB\u9316\u95BC\u95CD\u95BE\u95B9\u95BA\u95B6\u95BF\u95B5\u95BD\u96A9\u96D4\u970B\u9712\u9710\u9799\u9797\u9794\u97F0\u97F8\u9835\u982F\u9832\u9924\u991F\u9927\u9929\u999E\u99EE\u99EC\u99E5\u99E4\u99F0\u99E3\u99EA\u99E9\u99E7\u9AB9\u9ABF\u9AB4\u9ABB\u9AF6\u9AFA\u9AF9\u9AF7\u9B33\u9B80\u9B85\u9B87\u9B7C\u9B7E\u9B7B\u9B82\u9B93\u9B92\u9B90\u9B7A\u9B95"],
["eca1", "\u9B7D\u9B88\u9D25\u9D17\u9D20\u9D1E\u9D14\u9D29\u9D1D\u9D18\u9D22\u9D10\u9D19\u9D1F\u9E88\u9E86\u9E87\u9EAE\u9EAD\u9ED5\u9ED6\u9EFA\u9F12\u9F3D\u5126\u5125\u5122\u5124\u5120\u5129\u52F4\u5693\u568C\u568D\u5686\u5684\u5683\u567E\u5682\u567F\u5681\u58D6\u58D4\u58CF\u58D2\u5B2D\u5B25\u5B32\u5B23\u5B2C\u5B27\u5B26\u5B2F\u5B2E\u5B7B\u5BF1\u5BF2\u5DB7\u5E6C\u5E6A\u5FBE\u5FBB\u61C3\u61B5\u61BC\u61E7\u61E0\u61E5\u61E4\u61E8\u61DE\u64EF\u64E9\u64E3\u64EB\u64E4\u64E8\u6581\u6580\u65B6\u65DA\u66D2\u6A8D\u6A96\u6A81\u6AA5\u6A89\u6A9F\u6A9B\u6AA1\u6A9E\u6A87\u6A93\u6A8E"],
["ed40", "\u6A95\u6A83\u6AA8\u6AA4\u6A91\u6A7F\u6AA6\u6A9A\u6A85\u6A8C\u6A92\u6B5B\u6BAD\u6C09\u6FCC\u6FA9\u6FF4\u6FD4\u6FE3\u6FDC\u6FED\u6FE7\u6FE6\u6FDE\u6FF2\u6FDD\u6FE2\u6FE8\u71E1\u71F1\u71E8\u71F2\u71E4\u71F0\u71E2\u7373\u736E\u736F\u7497\u74B2\u74AB\u7490\u74AA\u74AD\u74B1\u74A5\u74AF\u7510\u7511\u7512\u750F\u7584\u7643\u7648\u7649\u7647\u76A4\u76E9\u77B5\u77AB\u77B2\u77B7\u77B6"],
["eda1", "\u77B4\u77B1\u77A8\u77F0\u78F3\u78FD\u7902\u78FB\u78FC\u78F2\u7905\u78F9\u78FE\u7904\u79AB\u79A8\u7A5C\u7A5B\u7A56\u7A58\u7A54\u7A5A\u7ABE\u7AC0\u7AC1\u7C05\u7C0F\u7BF2\u7C00\u7BFF\u7BFB\u7C0E\u7BF4\u7C0B\u7BF3\u7C02\u7C09\u7C03\u7C01\u7BF8\u7BFD\u7C06\u7BF0\u7BF1\u7C10\u7C0A\u7CE8\u7E2D\u7E3C\u7E42\u7E33\u9848\u7E38\u7E2A\u7E49\u7E40\u7E47\u7E29\u7E4C\u7E30\u7E3B\u7E36\u7E44\u7E3A\u7F45\u7F7F\u7F7E\u7F7D\u7FF4\u7FF2\u802C\u81BB\u81C4\u81CC\u81CA\u81C5\u81C7\u81BC\u81E9\u825B\u825A\u825C\u8583\u8580\u858F\u85A7\u8595\u85A0\u858B\u85A3\u857B\u85A4\u859A\u859E"],
["ee40", "\u8577\u857C\u8589\u85A1\u857A\u8578\u8557\u858E\u8596\u8586\u858D\u8599\u859D\u8581\u85A2\u8582\u8588\u8585\u8579\u8576\u8598\u8590\u859F\u8668\u87BE\u87AA\u87AD\u87C5\u87B0\u87AC\u87B9\u87B5\u87BC\u87AE\u87C9\u87C3\u87C2\u87CC\u87B7\u87AF\u87C4\u87CA\u87B4\u87B6\u87BF\u87B8\u87BD\u87DE\u87B2\u8935\u8933\u893C\u893E\u8941\u8952\u8937\u8942\u89AD\u89AF\u89AE\u89F2\u89F3\u8B1E"],
["eea1", "\u8B18\u8B16\u8B11\u8B05\u8B0B\u8B22\u8B0F\u8B12\u8B15\u8B07\u8B0D\u8B08\u8B06\u8B1C\u8B13\u8B1A\u8C4F\u8C70\u8C72\u8C71\u8C6F\u8C95\u8C94\u8CF9\u8D6F\u8E4E\u8E4D\u8E53\u8E50\u8E4C\u8E47\u8F43\u8F40\u9085\u907E\u9138\u919A\u91A2\u919B\u9199\u919F\u91A1\u919D\u91A0\u93A1\u9383\u93AF\u9364\u9356\u9347\u937C\u9358\u935C\u9376\u9349\u9350\u9351\u9360\u936D\u938F\u934C\u936A\u9379\u9357\u9355\u9352\u934F\u9371\u9377\u937B\u9361\u935E\u9363\u9367\u9380\u934E\u9359\u95C7\u95C0\u95C9\u95C3\u95C5\u95B7\u96AE\u96B0\u96AC\u9720\u971F\u9718\u971D\u9719\u979A\u97A1\u979C"],
["ef40", "\u979E\u979D\u97D5\u97D4\u97F1\u9841\u9844\u984A\u9849\u9845\u9843\u9925\u992B\u992C\u992A\u9933\u9932\u992F\u992D\u9931\u9930\u9998\u99A3\u99A1\u9A02\u99FA\u99F4\u99F7\u99F9\u99F8\u99F6\u99FB\u99FD\u99FE\u99FC\u9A03\u9ABE\u9AFE\u9AFD\u9B01\u9AFC\u9B48\u9B9A\u9BA8\u9B9E\u9B9B\u9BA6\u9BA1\u9BA5\u9BA4\u9B86\u9BA2\u9BA0\u9BAF\u9D33\u9D41\u9D67\u9D36\u9D2E\u9D2F\u9D31\u9D38\u9D30"],
["efa1", "\u9D45\u9D42\u9D43\u9D3E\u9D37\u9D40\u9D3D\u7FF5\u9D2D\u9E8A\u9E89\u9E8D\u9EB0\u9EC8\u9EDA\u9EFB\u9EFF\u9F24\u9F23\u9F22\u9F54\u9FA0\u5131\u512D\u512E\u5698\u569C\u5697\u569A\u569D\u5699\u5970\u5B3C\u5C69\u5C6A\u5DC0\u5E6D\u5E6E\u61D8\u61DF\u61ED\u61EE\u61F1\u61EA\u61F0\u61EB\u61D6\u61E9\u64FF\u6504\u64FD\u64F8\u6501\u6503\u64FC\u6594\u65DB\u66DA\u66DB\u66D8\u6AC5\u6AB9\u6ABD\u6AE1\u6AC6\u6ABA\u6AB6\u6AB7\u6AC7\u6AB4\u6AAD\u6B5E\u6BC9\u6C0B\u7007\u700C\u700D\u7001\u7005\u7014\u700E\u6FFF\u7000\u6FFB\u7026\u6FFC\u6FF7\u700A\u7201\u71FF\u71F9\u7203\u71FD\u7376"],
["f040", "\u74B8\u74C0\u74B5\u74C1\u74BE\u74B6\u74BB\u74C2\u7514\u7513\u765C\u7664\u7659\u7650\u7653\u7657\u765A\u76A6\u76BD\u76EC\u77C2\u77BA\u78FF\u790C\u7913\u7914\u7909\u7910\u7912\u7911\u79AD\u79AC\u7A5F\u7C1C\u7C29\u7C19\u7C20\u7C1F\u7C2D\u7C1D\u7C26\u7C28\u7C22\u7C25\u7C30\u7E5C\u7E50\u7E56\u7E63\u7E58\u7E62\u7E5F\u7E51\u7E60\u7E57\u7E53\u7FB5\u7FB3\u7FF7\u7FF8\u8075\u81D1\u81D2"],
["f0a1", "\u81D0\u825F\u825E\u85B4\u85C6\u85C0\u85C3\u85C2\u85B3\u85B5\u85BD\u85C7\u85C4\u85BF\u85CB\u85CE\u85C8\u85C5\u85B1\u85B6\u85D2\u8624\u85B8\u85B7\u85BE\u8669\u87E7\u87E6\u87E2\u87DB\u87EB\u87EA\u87E5\u87DF\u87F3\u87E4\u87D4\u87DC\u87D3\u87ED\u87D8\u87E3\u87A4\u87D7\u87D9\u8801\u87F4\u87E8\u87DD\u8953\u894B\u894F\u894C\u8946\u8950\u8951\u8949\u8B2A\u8B27\u8B23\u8B33\u8B30\u8B35\u8B47\u8B2F\u8B3C\u8B3E\u8B31\u8B25\u8B37\u8B26\u8B36\u8B2E\u8B24\u8B3B\u8B3D\u8B3A\u8C42\u8C75\u8C99\u8C98\u8C97\u8CFE\u8D04\u8D02\u8D00\u8E5C\u8E62\u8E60\u8E57\u8E56\u8E5E\u8E65\u8E67"],
["f140", "\u8E5B\u8E5A\u8E61\u8E5D\u8E69\u8E54\u8F46\u8F47\u8F48\u8F4B\u9128\u913A\u913B\u913E\u91A8\u91A5\u91A7\u91AF\u91AA\u93B5\u938C\u9392\u93B7\u939B\u939D\u9389\u93A7\u938E\u93AA\u939E\u93A6\u9395\u9388\u9399\u939F\u938D\u93B1\u9391\u93B2\u93A4\u93A8\u93B4\u93A3\u93A5\u95D2\u95D3\u95D1\u96B3\u96D7\u96DA\u5DC2\u96DF\u96D8\u96DD\u9723\u9722\u9725\u97AC\u97AE\u97A8\u97AB\u97A4\u97AA"],
["f1a1", "\u97A2\u97A5\u97D7\u97D9\u97D6\u97D8\u97FA\u9850\u9851\u9852\u98B8\u9941\u993C\u993A\u9A0F\u9A0B\u9A09\u9A0D\u9A04\u9A11\u9A0A\u9A05\u9A07\u9A06\u9AC0\u9ADC\u9B08\u9B04\u9B05\u9B29\u9B35\u9B4A\u9B4C\u9B4B\u9BC7\u9BC6\u9BC3\u9BBF\u9BC1\u9BB5\u9BB8\u9BD3\u9BB6\u9BC4\u9BB9\u9BBD\u9D5C\u9D53\u9D4F\u9D4A\u9D5B\u9D4B\u9D59\u9D56\u9D4C\u9D57\u9D52\u9D54\u9D5F\u9D58\u9D5A\u9E8E\u9E8C\u9EDF\u9F01\u9F00\u9F16\u9F25\u9F2B\u9F2A\u9F29\u9F28\u9F4C\u9F55\u5134\u5135\u5296\u52F7\u53B4\u56AB\u56AD\u56A6\u56A7\u56AA\u56AC\u58DA\u58DD\u58DB\u5912\u5B3D\u5B3E\u5B3F\u5DC3\u5E70"],
["f240", "\u5FBF\u61FB\u6507\u6510\u650D\u6509\u650C\u650E\u6584\u65DE\u65DD\u66DE\u6AE7\u6AE0\u6ACC\u6AD1\u6AD9\u6ACB\u6ADF\u6ADC\u6AD0\u6AEB\u6ACF\u6ACD\u6ADE\u6B60\u6BB0\u6C0C\u7019\u7027\u7020\u7016\u702B\u7021\u7022\u7023\u7029\u7017\u7024\u701C\u702A\u720C\u720A\u7207\u7202\u7205\u72A5\u72A6\u72A4\u72A3\u72A1\u74CB\u74C5\u74B7\u74C3\u7516\u7660\u77C9\u77CA\u77C4\u77F1\u791D\u791B"],
["f2a1", "\u7921\u791C\u7917\u791E\u79B0\u7A67\u7A68\u7C33\u7C3C\u7C39\u7C2C\u7C3B\u7CEC\u7CEA\u7E76\u7E75\u7E78\u7E70\u7E77\u7E6F\u7E7A\u7E72\u7E74\u7E68\u7F4B\u7F4A\u7F83\u7F86\u7FB7\u7FFD\u7FFE\u8078\u81D7\u81D5\u8264\u8261\u8263\u85EB\u85F1\u85ED\u85D9\u85E1\u85E8\u85DA\u85D7\u85EC\u85F2\u85F8\u85D8\u85DF\u85E3\u85DC\u85D1\u85F0\u85E6\u85EF\u85DE\u85E2\u8800\u87FA\u8803\u87F6\u87F7\u8809\u880C\u880B\u8806\u87FC\u8808\u87FF\u880A\u8802\u8962\u895A\u895B\u8957\u8961\u895C\u8958\u895D\u8959\u8988\u89B7\u89B6\u89F6\u8B50\u8B48\u8B4A\u8B40\u8B53\u8B56\u8B54\u8B4B\u8B55"],
["f340", "\u8B51\u8B42\u8B52\u8B57\u8C43\u8C77\u8C76\u8C9A\u8D06\u8D07\u8D09\u8DAC\u8DAA\u8DAD\u8DAB\u8E6D\u8E78\u8E73\u8E6A\u8E6F\u8E7B\u8EC2\u8F52\u8F51\u8F4F\u8F50\u8F53\u8FB4\u9140\u913F\u91B0\u91AD\u93DE\u93C7\u93CF\u93C2\u93DA\u93D0\u93F9\u93EC\u93CC\u93D9\u93A9\u93E6\u93CA\u93D4\u93EE\u93E3\u93D5\u93C4\u93CE\u93C0\u93D2\u93E7\u957D\u95DA\u95DB\u96E1\u9729\u972B\u972C\u9728\u9726"],
["f3a1", "\u97B3\u97B7\u97B6\u97DD\u97DE\u97DF\u985C\u9859\u985D\u9857\u98BF\u98BD\u98BB\u98BE\u9948\u9947\u9943\u99A6\u99A7\u9A1A\u9A15\u9A25\u9A1D\u9A24\u9A1B\u9A22\u9A20\u9A27\u9A23\u9A1E\u9A1C\u9A14\u9AC2\u9B0B\u9B0A\u9B0E\u9B0C\u9B37\u9BEA\u9BEB\u9BE0\u9BDE\u9BE4\u9BE6\u9BE2\u9BF0\u9BD4\u9BD7\u9BEC\u9BDC\u9BD9\u9BE5\u9BD5\u9BE1\u9BDA\u9D77\u9D81\u9D8A\u9D84\u9D88\u9D71\u9D80\u9D78\u9D86\u9D8B\u9D8C\u9D7D\u9D6B\u9D74\u9D75\u9D70\u9D69\u9D85\u9D73\u9D7B\u9D82\u9D6F\u9D79\u9D7F\u9D87\u9D68\u9E94\u9E91\u9EC0\u9EFC\u9F2D\u9F40\u9F41\u9F4D\u9F56\u9F57\u9F58\u5337\u56B2"],
["f440", "\u56B5\u56B3\u58E3\u5B45\u5DC6\u5DC7\u5EEE\u5EEF\u5FC0\u5FC1\u61F9\u6517\u6516\u6515\u6513\u65DF\u66E8\u66E3\u66E4\u6AF3\u6AF0\u6AEA\u6AE8\u6AF9\u6AF1\u6AEE\u6AEF\u703C\u7035\u702F\u7037\u7034\u7031\u7042\u7038\u703F\u703A\u7039\u7040\u703B\u7033\u7041\u7213\u7214\u72A8\u737D\u737C\u74BA\u76AB\u76AA\u76BE\u76ED\u77CC\u77CE\u77CF\u77CD\u77F2\u7925\u7923\u7927\u7928\u7924\u7929"],
["f4a1", "\u79B2\u7A6E\u7A6C\u7A6D\u7AF7\u7C49\u7C48\u7C4A\u7C47\u7C45\u7CEE\u7E7B\u7E7E\u7E81\u7E80\u7FBA\u7FFF\u8079\u81DB\u81D9\u820B\u8268\u8269\u8622\u85FF\u8601\u85FE\u861B\u8600\u85F6\u8604\u8609\u8605\u860C\u85FD\u8819\u8810\u8811\u8817\u8813\u8816\u8963\u8966\u89B9\u89F7\u8B60\u8B6A\u8B5D\u8B68\u8B63\u8B65\u8B67\u8B6D\u8DAE\u8E86\u8E88\u8E84\u8F59\u8F56\u8F57\u8F55\u8F58\u8F5A\u908D\u9143\u9141\u91B7\u91B5\u91B2\u91B3\u940B\u9413\u93FB\u9420\u940F\u9414\u93FE\u9415\u9410\u9428\u9419\u940D\u93F5\u9400\u93F7\u9407\u940E\u9416\u9412\u93FA\u9409\u93F8\u940A\u93FF"],
["f540", "\u93FC\u940C\u93F6\u9411\u9406\u95DE\u95E0\u95DF\u972E\u972F\u97B9\u97BB\u97FD\u97FE\u9860\u9862\u9863\u985F\u98C1\u98C2\u9950\u994E\u9959\u994C\u994B\u9953\u9A32\u9A34\u9A31\u9A2C\u9A2A\u9A36\u9A29\u9A2E\u9A38\u9A2D\u9AC7\u9ACA\u9AC6\u9B10\u9B12\u9B11\u9C0B\u9C08\u9BF7\u9C05\u9C12\u9BF8\u9C40\u9C07\u9C0E\u9C06\u9C17\u9C14\u9C09\u9D9F\u9D99\u9DA4\u9D9D\u9D92\u9D98\u9D90\u9D9B"],
["f5a1", "\u9DA0\u9D94\u9D9C\u9DAA\u9D97\u9DA1\u9D9A\u9DA2\u9DA8\u9D9E\u9DA3\u9DBF\u9DA9\u9D96\u9DA6\u9DA7\u9E99\u9E9B\u9E9A\u9EE5\u9EE4\u9EE7\u9EE6\u9F30\u9F2E\u9F5B\u9F60\u9F5E\u9F5D\u9F59\u9F91\u513A\u5139\u5298\u5297\u56C3\u56BD\u56BE\u5B48\u5B47\u5DCB\u5DCF\u5EF1\u61FD\u651B\u6B02\u6AFC\u6B03\u6AF8\u6B00\u7043\u7044\u704A\u7048\u7049\u7045\u7046\u721D\u721A\u7219\u737E\u7517\u766A\u77D0\u792D\u7931\u792F\u7C54\u7C53\u7CF2\u7E8A\u7E87\u7E88\u7E8B\u7E86\u7E8D\u7F4D\u7FBB\u8030\u81DD\u8618\u862A\u8626\u861F\u8623\u861C\u8619\u8627\u862E\u8621\u8620\u8629\u861E\u8625"],
["f640", "\u8829\u881D\u881B\u8820\u8824\u881C\u882B\u884A\u896D\u8969\u896E\u896B\u89FA\u8B79\u8B78\u8B45\u8B7A\u8B7B\u8D10\u8D14\u8DAF\u8E8E\u8E8C\u8F5E\u8F5B\u8F5D\u9146\u9144\u9145\u91B9\u943F\u943B\u9436\u9429\u943D\u943C\u9430\u9439\u942A\u9437\u942C\u9440\u9431\u95E5\u95E4\u95E3\u9735\u973A\u97BF\u97E1\u9864\u98C9\u98C6\u98C0\u9958\u9956\u9A39\u9A3D\u9A46\u9A44\u9A42\u9A41\u9A3A"],
["f6a1", "\u9A3F\u9ACD\u9B15\u9B17\u9B18\u9B16\u9B3A\u9B52\u9C2B\u9C1D\u9C1C\u9C2C\u9C23\u9C28\u9C29\u9C24\u9C21\u9DB7\u9DB6\u9DBC\u9DC1\u9DC7\u9DCA\u9DCF\u9DBE\u9DC5\u9DC3\u9DBB\u9DB5\u9DCE\u9DB9\u9DBA\u9DAC\u9DC8\u9DB1\u9DAD\u9DCC\u9DB3\u9DCD\u9DB2\u9E7A\u9E9C\u9EEB\u9EEE\u9EED\u9F1B\u9F18\u9F1A\u9F31\u9F4E\u9F65\u9F64\u9F92\u4EB9\u56C6\u56C5\u56CB\u5971\u5B4B\u5B4C\u5DD5\u5DD1\u5EF2\u6521\u6520\u6526\u6522\u6B0B\u6B08\u6B09\u6C0D\u7055\u7056\u7057\u7052\u721E\u721F\u72A9\u737F\u74D8\u74D5\u74D9\u74D7\u766D\u76AD\u7935\u79B4\u7A70\u7A71\u7C57\u7C5C\u7C59\u7C5B\u7C5A"],
["f740", "\u7CF4\u7CF1\u7E91\u7F4F\u7F87\u81DE\u826B\u8634\u8635\u8633\u862C\u8632\u8636\u882C\u8828\u8826\u882A\u8825\u8971\u89BF\u89BE\u89FB\u8B7E\u8B84\u8B82\u8B86\u8B85\u8B7F\u8D15\u8E95\u8E94\u8E9A\u8E92\u8E90\u8E96\u8E97\u8F60\u8F62\u9147\u944C\u9450\u944A\u944B\u944F\u9447\u9445\u9448\u9449\u9446\u973F\u97E3\u986A\u9869\u98CB\u9954\u995B\u9A4E\u9A53\u9A54\u9A4C\u9A4F\u9A48\u9A4A"],
["f7a1", "\u9A49\u9A52\u9A50\u9AD0\u9B19\u9B2B\u9B3B\u9B56\u9B55\u9C46\u9C48\u9C3F\u9C44\u9C39\u9C33\u9C41\u9C3C\u9C37\u9C34\u9C32\u9C3D\u9C36\u9DDB\u9DD2\u9DDE\u9DDA\u9DCB\u9DD0\u9DDC\u9DD1\u9DDF\u9DE9\u9DD9\u9DD8\u9DD6\u9DF5\u9DD5\u9DDD\u9EB6\u9EF0\u9F35\u9F33\u9F32\u9F42\u9F6B\u9F95\u9FA2\u513D\u5299\u58E8\u58E7\u5972\u5B4D\u5DD8\u882F\u5F4F\u6201\u6203\u6204\u6529\u6525\u6596\u66EB\u6B11\u6B12\u6B0F\u6BCA\u705B\u705A\u7222\u7382\u7381\u7383\u7670\u77D4\u7C67\u7C66\u7E95\u826C\u863A\u8640\u8639\u863C\u8631\u863B\u863E\u8830\u8832\u882E\u8833\u8976\u8974\u8973\u89FE"],
["f840", "\u8B8C\u8B8E\u8B8B\u8B88\u8C45\u8D19\u8E98\u8F64\u8F63\u91BC\u9462\u9455\u945D\u9457\u945E\u97C4\u97C5\u9800\u9A56\u9A59\u9B1E\u9B1F\u9B20\u9C52\u9C58\u9C50\u9C4A\u9C4D\u9C4B\u9C55\u9C59\u9C4C\u9C4E\u9DFB\u9DF7\u9DEF\u9DE3\u9DEB\u9DF8\u9DE4\u9DF6\u9DE1\u9DEE\u9DE6\u9DF2\u9DF0\u9DE2\u9DEC\u9DF4\u9DF3\u9DE8\u9DED\u9EC2\u9ED0\u9EF2\u9EF3\u9F06\u9F1C\u9F38\u9F37\u9F36\u9F43\u9F4F"],
["f8a1", "\u9F71\u9F70\u9F6E\u9F6F\u56D3\u56CD\u5B4E\u5C6D\u652D\u66ED\u66EE\u6B13\u705F\u7061\u705D\u7060\u7223\u74DB\u74E5\u77D5\u7938\u79B7\u79B6\u7C6A\u7E97\u7F89\u826D\u8643\u8838\u8837\u8835\u884B\u8B94\u8B95\u8E9E\u8E9F\u8EA0\u8E9D\u91BE\u91BD\u91C2\u946B\u9468\u9469\u96E5\u9746\u9743\u9747\u97C7\u97E5\u9A5E\u9AD5\u9B59\u9C63\u9C67\u9C66\u9C62\u9C5E\u9C60\u9E02\u9DFE\u9E07\u9E03\u9E06\u9E05\u9E00\u9E01\u9E09\u9DFF\u9DFD\u9E04\u9EA0\u9F1E\u9F46\u9F74\u9F75\u9F76\u56D4\u652E\u65B8\u6B18\u6B19\u6B17\u6B1A\u7062\u7226\u72AA\u77D8\u77D9\u7939\u7C69\u7C6B\u7CF6\u7E9A"],
["f940", "\u7E98\u7E9B\u7E99\u81E0\u81E1\u8646\u8647\u8648\u8979\u897A\u897C\u897B\u89FF\u8B98\u8B99\u8EA5\u8EA4\u8EA3\u946E\u946D\u946F\u9471\u9473\u9749\u9872\u995F\u9C68\u9C6E\u9C6D\u9E0B\u9E0D\u9E10\u9E0F\u9E12\u9E11\u9EA1\u9EF5\u9F09\u9F47\u9F78\u9F7B\u9F7A\u9F79\u571E\u7066\u7C6F\u883C\u8DB2\u8EA6\u91C3\u9474\u9478\u9476\u9475\u9A60\u9C74\u9C73\u9C71\u9C75\u9E14\u9E13\u9EF6\u9F0A"],
["f9a1", "\u9FA4\u7068\u7065\u7CF7\u866A\u883E\u883D\u883F\u8B9E\u8C9C\u8EA9\u8EC9\u974B\u9873\u9874\u98CC\u9961\u99AB\u9A64\u9A66\u9A67\u9B24\u9E15\u9E17\u9F48\u6207\u6B1E\u7227\u864C\u8EA8\u9482\u9480\u9481\u9A69\u9A68\u9B2E\u9E19\u7229\u864B\u8B9F\u9483\u9C79\u9EB7\u7675\u9A6B\u9C7A\u9E1D\u7069\u706A\u9EA4\u9F7E\u9F49\u9F98\u7881\u92B9\u88CF\u58BB\u6052\u7CA7\u5AFA\u2554\u2566\u2557\u2560\u256C\u2563\u255A\u2569\u255D\u2552\u2564\u2555\u255E\u256A\u2561\u2558\u2567\u255B\u2553\u2565\u2556\u255F\u256B\u2562\u2559\u2568\u255C\u2551\u2550\u256D\u256E\u2570\u256F\u2593"]
];
}
});
var require_big5_added22 = __commonJS2({
"node_modules/body-parser/node_modules/iconv-lite/encodings/tables/big5-added.json"(exports2, module2) {
module2.exports = [
["8740", "\u43F0\u4C32\u4603\u45A6\u4578\u{27267}\u4D77\u45B3\u{27CB1}\u4CE2\u{27CC5}\u3B95\u4736\u4744\u4C47\u4C40\u{242BF}\u{23617}\u{27352}\u{26E8B}\u{270D2}\u4C57\u{2A351}\u474F\u45DA\u4C85\u{27C6C}\u4D07\u4AA4\u46A1\u{26B23}\u7225\u{25A54}\u{21A63}\u{23E06}\u{23F61}\u664D\u56FB"],
["8767", "\u7D95\u591D\u{28BB9}\u3DF4\u9734\u{27BEF}\u5BDB\u{21D5E}\u5AA4\u3625\u{29EB0}\u5AD1\u5BB7\u5CFC\u676E\u8593\u{29945}\u7461\u749D\u3875\u{21D53}\u{2369E}\u{26021}\u3EEC"],
["87a1", "\u{258DE}\u3AF5\u7AFC\u9F97\u{24161}\u{2890D}\u{231EA}\u{20A8A}\u{2325E}\u430A\u8484\u9F96\u942F\u4930\u8613\u5896\u974A\u9218\u79D0\u7A32\u6660\u6A29\u889D\u744C\u7BC5\u6782\u7A2C\u524F\u9046\u34E6\u73C4\u{25DB9}\u74C6\u9FC7\u57B3\u492F\u544C\u4131\u{2368E}\u5818\u7A72\u{27B65}\u8B8F\u46AE\u{26E88}\u4181\u{25D99}\u7BAE\u{224BC}\u9FC8\u{224C1}\u{224C9}\u{224CC}\u9FC9\u8504\u{235BB}\u40B4\u9FCA\u44E1\u{2ADFF}\u62C1\u706E\u9FCB"],
["8840", "\u31C0", 4, "\u{2010C}\u31C5\u{200D1}\u{200CD}\u31C6\u31C7\u{200CB}\u{21FE8}\u31C8\u{200CA}\u31C9\u31CA\u31CB\u31CC\u{2010E}\u31CD\u31CE\u0100\xC1\u01CD\xC0\u0112\xC9\u011A\xC8\u014C\xD3\u01D1\xD2\u0FFF\xCA\u0304\u1EBE\u0FFF\xCA\u030C\u1EC0\xCA\u0101\xE1\u01CE\xE0\u0251\u0113\xE9\u011B\xE8\u012B\xED\u01D0\xEC\u014D\xF3\u01D2\xF2\u016B\xFA\u01D4\xF9\u01D6\u01D8\u01DA"],
["88a1", "\u01DC\xFC\u0FFF\xEA\u0304\u1EBF\u0FFF\xEA\u030C\u1EC1\xEA\u0261\u23DA\u23DB"],
["8940", "\u{2A3A9}\u{21145}"],
["8943", "\u650A"],
["8946", "\u4E3D\u6EDD\u9D4E\u91DF"],
["894c", "\u{27735}\u6491\u4F1A\u4F28\u4FA8\u5156\u5174\u519C\u51E4\u52A1\u52A8\u533B\u534E\u53D1\u53D8\u56E2\u58F0\u5904\u5907\u5932\u5934\u5B66\u5B9E\u5B9F\u5C9A\u5E86\u603B\u6589\u67FE\u6804\u6865\u6D4E\u70BC\u7535\u7EA4\u7EAC\u7EBA\u7EC7\u7ECF\u7EDF\u7F06\u7F37\u827A\u82CF\u836F\u89C6\u8BBE\u8BE2\u8F66\u8F67\u8F6E"],
["89a1", "\u7411\u7CFC\u7DCD\u6946\u7AC9\u5227"],
["89ab", "\u918C\u78B8\u915E\u80BC"],
["89b0", "\u8D0B\u80F6\u{209E7}"],
["89b5", "\u809F\u9EC7\u4CCD\u9DC9\u9E0C\u4C3E\u{29DF6}\u{2700E}\u9E0A\u{2A133}\u35C1"],
["89c1", "\u6E9A\u823E\u7519"],
["89c5", "\u4911\u9A6C\u9A8F\u9F99\u7987\u{2846C}\u{21DCA}\u{205D0}\u{22AE6}\u4E24\u4E81\u4E80\u4E87\u4EBF\u4EEB\u4F37\u344C\u4FBD\u3E48\u5003\u5088\u347D\u3493\u34A5\u5186\u5905\u51DB\u51FC\u5205\u4E89\u5279\u5290\u5327\u35C7\u53A9\u3551\u53B0\u3553\u53C2\u5423\u356D\u3572\u3681\u5493\u54A3\u54B4\u54B9\u54D0\u54EF\u5518\u5523\u5528\u3598\u553F\u35A5\u35BF\u55D7\u35C5"],
["8a40", "\u{27D84}\u5525"],
["8a43", "\u{20C42}\u{20D15}\u{2512B}\u5590\u{22CC6}\u39EC\u{20341}\u8E46\u{24DB8}\u{294E5}\u4053\u{280BE}\u777A\u{22C38}\u3A34\u47D5\u{2815D}\u{269F2}\u{24DEA}\u64DD\u{20D7C}\u{20FB4}\u{20CD5}\u{210F4}\u648D\u8E7E\u{20E96}\u{20C0B}\u{20F64}\u{22CA9}\u{28256}\u{244D3}"],
["8a64", "\u{20D46}\u{29A4D}\u{280E9}\u47F4\u{24EA7}\u{22CC2}\u9AB2\u3A67\u{295F4}\u3FED\u3506\u{252C7}\u{297D4}\u{278C8}\u{22D44}\u9D6E\u9815"],
["8a76", "\u43D9\u{260A5}\u64B4\u54E3\u{22D4C}\u{22BCA}\u{21077}\u39FB\u{2106F}"],
["8aa1", "\u{266DA}\u{26716}\u{279A0}\u64EA\u{25052}\u{20C43}\u8E68\u{221A1}\u{28B4C}\u{20731}"],
["8aac", "\u480B\u{201A9}\u3FFA\u5873\u{22D8D}"],
["8ab2", "\u{245C8}\u{204FC}\u{26097}\u{20F4C}\u{20D96}\u5579\u40BB\u43BA"],
["8abb", "\u4AB4\u{22A66}\u{2109D}\u81AA\u98F5\u{20D9C}\u6379\u39FE\u{22775}\u8DC0\u56A1\u647C\u3E43"],
["8ac9", "\u{2A601}\u{20E09}\u{22ACF}\u{22CC9}"],
["8ace", "\u{210C8}\u{239C2}\u3992\u3A06\u{2829B}\u3578\u{25E49}\u{220C7}\u5652\u{20F31}\u{22CB2}\u{29720}\u34BC\u6C3D\u{24E3B}"],
["8adf", "\u{27574}\u{22E8B}\u{22208}\u{2A65B}\u{28CCD}\u{20E7A}\u{20C34}\u{2681C}\u7F93\u{210CF}\u{22803}\u{22939}\u35FB\u{251E3}\u{20E8C}\u{20F8D}\u{20EAA}\u3F93\u{20F30}\u{20D47}\u{2114F}\u{20E4C}"],
["8af6", "\u{20EAB}\u{20BA9}\u{20D48}\u{210C0}\u{2113D}\u3FF9\u{22696}\u6432\u{20FAD}"],
["8b40", "\u{233F4}\u{27639}\u{22BCE}\u{20D7E}\u{20D7F}\u{22C51}\u{22C55}\u3A18\u{20E98}\u{210C7}\u{20F2E}\u{2A632}\u{26B50}\u{28CD2}\u{28D99}\u{28CCA}\u95AA\u54CC\u82C4\u55B9"],
["8b55", "\u{29EC3}\u9C26\u9AB6\u{2775E}\u{22DEE}\u7140\u816D\u80EC\u5C1C\u{26572}\u8134\u3797\u535F\u{280BD}\u91B6\u{20EFA}\u{20E0F}\u{20E77}\u{20EFB}\u35DD\u{24DEB}\u3609\u{20CD6}\u56AF\u{227B5}\u{210C9}\u{20E10}\u{20E78}\u{21078}\u{21148}\u{28207}\u{21455}\u{20E79}\u{24E50}\u{22DA4}\u5A54\u{2101D}\u{2101E}\u{210F5}\u{210F6}\u579C\u{20E11}"],
["8ba1", "\u{27694}\u{282CD}\u{20FB5}\u{20E7B}\u{2517E}\u3703\u{20FB6}\u{21180}\u{252D8}\u{2A2BD}\u{249DA}\u{2183A}\u{24177}\u{2827C}\u5899\u5268\u361A\u{2573D}\u7BB2\u5B68\u4800\u4B2C\u9F27\u49E7\u9C1F\u9B8D\u{25B74}\u{2313D}\u55FB\u35F2\u5689\u4E28\u5902\u{21BC1}\u{2F878}\u9751\u{20086}\u4E5B\u4EBB\u353E\u5C23\u5F51\u5FC4\u38FA\u624C\u6535\u6B7A\u6C35\u6C3A\u706C\u722B\u4E2C\u72AD\u{248E9}\u7F52\u793B\u7CF9\u7F53\u{2626A}\u34C1"],
["8bde", "\u{2634B}\u8002\u8080\u{26612}\u{26951}\u535D\u8864\u89C1\u{278B2}\u8BA0\u8D1D\u9485\u9578\u957F\u95E8\u{28E0F}\u97E6\u9875\u98CE\u98DE\u9963\u{29810}\u9C7C\u9E1F\u9EC4\u6B6F\uF907\u4E37\u{20087}\u961D\u6237\u94A2"],
["8c40", "\u503B\u6DFE\u{29C73}\u9FA6\u3DC9\u888F\u{2414E}\u7077\u5CF5\u4B20\u{251CD}\u3559\u{25D30}\u6122\u{28A32}\u8FA7\u91F6\u7191\u6719\u73BA\u{23281}\u{2A107}\u3C8B\u{21980}\u4B10\u78E4\u7402\u51AE\u{2870F}\u4009\u6A63\u{2A2BA}\u4223\u860F\u{20A6F}\u7A2A\u{29947}\u{28AEA}\u9755\u704D\u5324\u{2207E}\u93F4\u76D9\u{289E3}\u9FA7\u77DD\u4EA3\u4FF0\u50BC\u4E2F\u4F17\u9FA8\u5434\u7D8B\u5892\u58D0\u{21DB6}\u5E92\u5E99\u5FC2\u{22712}\u658B"],
["8ca1", "\u{233F9}\u6919\u6A43\u{23C63}\u6CFF"],
["8ca7", "\u7200\u{24505}\u738C\u3EDB\u{24A13}\u5B15\u74B9\u8B83\u{25CA4}\u{25695}\u7A93\u7BEC\u7CC3\u7E6C\u82F8\u8597\u9FA9\u8890\u9FAA\u8EB9\u9FAB\u8FCF\u855F\u99E0\u9221\u9FAC\u{28DB9}\u{2143F}\u4071\u42A2\u5A1A"],
["8cc9", "\u9868\u676B\u4276\u573D"],
["8cce", "\u85D6\u{2497B}\u82BF\u{2710D}\u4C81\u{26D74}\u5D7B\u{26B15}\u{26FBE}\u9FAD\u9FAE\u5B96\u9FAF\u66E7\u7E5B\u6E57\u79CA\u3D88\u44C3\u{23256}\u{22796}\u439A\u4536"],
["8ce6", "\u5CD5\u{23B1A}\u8AF9\u5C78\u3D12\u{23551}\u5D78\u9FB2\u7157\u4558\u{240EC}\u{21E23}\u4C77\u3978\u344A\u{201A4}\u{26C41}\u8ACC\u4FB4\u{20239}\u59BF\u816C\u9856\u{298FA}\u5F3B"],
["8d40", "\u{20B9F}"],
["8d42", "\u{221C1}\u{2896D}\u4102\u46BB\u{29079}\u3F07\u9FB3\u{2A1B5}\u40F8\u37D6\u46F7\u{26C46}\u417C\u{286B2}\u{273FF}\u456D\u38D4\u{2549A}\u4561\u451B\u4D89\u4C7B\u4D76\u45EA\u3FC8\u{24B0F}\u3661\u44DE\u44BD\u41ED\u5D3E\u5D48\u5D56\u3DFC\u380F\u5DA4\u5DB9\u3820\u3838\u5E42\u5EBD\u5F25\u5F83\u3908\u3914\u393F\u394D\u60D7\u613D\u5CE5\u3989\u61B7\u61B9\u61CF\u39B8\u622C\u6290\u62E5\u6318\u39F8\u56B1"],
["8da1", "\u3A03\u63E2\u63FB\u6407\u645A\u3A4B\u64C0\u5D15\u5621\u9F9F\u3A97\u6586\u3ABD\u65FF\u6653\u3AF2\u6692\u3B22\u6716\u3B42\u67A4\u6800\u3B58\u684A\u6884\u3B72\u3B71\u3B7B\u6909\u6943\u725C\u6964\u699F\u6985\u3BBC\u69D6\u3BDD\u6A65\u6A74\u6A71\u6A82\u3BEC\u6A99\u3BF2\u6AAB\u6AB5\u6AD4\u6AF6\u6B81\u6BC1\u6BEA\u6C75\u6CAA\u3CCB\u6D02\u6D06\u6D26\u6D81\u3CEF\u6DA4\u6DB1\u6E15\u6E18\u6E29\u6E86\u{289C0}\u6EBB\u6EE2\u6EDA\u9F7F\u6EE8\u6EE9\u6F24\u6F34\u3D46\u{23F41}\u6F81\u6FBE\u3D6A\u3D75\u71B7\u5C99\u3D8A\u702C\u3D91\u7050\u7054\u706F\u707F\u7089\u{20325}\u43C1\u35F1\u{20ED8}"],
["8e40", "\u{23ED7}\u57BE\u{26ED3}\u713E\u{257E0}\u364E\u69A2\u{28BE9}\u5B74\u7A49\u{258E1}\u{294D9}\u7A65\u7A7D\u{259AC}\u7ABB\u7AB0\u7AC2\u7AC3\u71D1\u{2648D}\u41CA\u7ADA\u7ADD\u7AEA\u41EF\u54B2\u{25C01}\u7B0B\u7B55\u7B29\u{2530E}\u{25CFE}\u7BA2\u7B6F\u839C\u{25BB4}\u{26C7F}\u7BD0\u8421\u7B92\u7BB8\u{25D20}\u3DAD\u{25C65}\u8492\u7BFA\u7C06\u7C35\u{25CC1}\u7C44\u7C83\u{24882}\u7CA6\u667D\u{24578}\u7CC9\u7CC7\u7CE6\u7C74\u7CF3\u7CF5\u7CCE"],
["8ea1", "\u7E67\u451D\u{26E44}\u7D5D\u{26ED6}\u748D\u7D89\u7DAB\u7135\u7DB3\u7DD2\u{24057}\u{26029}\u7DE4\u3D13\u7DF5\u{217F9}\u7DE5\u{2836D}\u7E1D\u{26121}\u{2615A}\u7E6E\u7E92\u432B\u946C\u7E27\u7F40\u7F41\u7F47\u7936\u{262D0}\u99E1\u7F97\u{26351}\u7FA3\u{21661}\u{20068}\u455C\u{23766}\u4503\u{2833A}\u7FFA\u{26489}\u8005\u8008\u801D\u8028\u802F\u{2A087}\u{26CC3}\u803B\u803C\u8061\u{22714}\u4989\u{26626}\u{23DE3}\u{266E8}\u6725\u80A7\u{28A48}\u8107\u811A\u58B0\u{226F6}\u6C7F\u{26498}\u{24FB8}\u64E7\u{2148A}\u8218\u{2185E}\u6A53\u{24A65}\u{24A95}\u447A\u8229\u{20B0D}\u{26A52}\u{23D7E}\u4FF9\u{214FD}\u84E2\u8362\u{26B0A}\u{249A7}\u{23530}\u{21773}\u{23DF8}\u82AA\u691B\u{2F994}\u41DB"],
["8f40", "\u854B\u82D0\u831A\u{20E16}\u{217B4}\u36C1\u{2317D}\u{2355A}\u827B\u82E2\u8318\u{23E8B}\u{26DA3}\u{26B05}\u{26B97}\u{235CE}\u3DBF\u831D\u55EC\u8385\u450B\u{26DA5}\u83AC\u83C1\u83D3\u347E\u{26ED4}\u6A57\u855A\u3496\u{26E42}\u{22EEF}\u8458\u{25BE4}\u8471\u3DD3\u44E4\u6AA7\u844A\u{23CB5}\u7958\u84A8\u{26B96}\u{26E77}\u{26E43}\u84DE\u840F\u8391\u44A0\u8493\u84E4\u{25C91}\u4240\u{25CC0}\u4543\u8534\u5AF2\u{26E99}\u4527\u8573\u4516\u67BF\u8616"],
["8fa1", "\u{28625}\u{2863B}\u85C1\u{27088}\u8602\u{21582}\u{270CD}\u{2F9B2}\u456A\u8628\u3648\u{218A2}\u53F7\u{2739A}\u867E\u8771\u{2A0F8}\u87EE\u{22C27}\u87B1\u87DA\u880F\u5661\u866C\u6856\u460F\u8845\u8846\u{275E0}\u{23DB9}\u{275E4}\u885E\u889C\u465B\u88B4\u88B5\u63C1\u88C5\u7777\u{2770F}\u8987\u898A\u89A6\u89A9\u89A7\u89BC\u{28A25}\u89E7\u{27924}\u{27ABD}\u8A9C\u7793\u91FE\u8A90\u{27A59}\u7AE9\u{27B3A}\u{23F8F}\u4713\u{27B38}\u717C\u8B0C\u8B1F\u{25430}\u{25565}\u8B3F\u8B4C\u8B4D\u8AA9\u{24A7A}\u8B90\u8B9B\u8AAF\u{216DF}\u4615\u884F\u8C9B\u{27D54}\u{27D8F}\u{2F9D4}\u3725\u{27D53}\u8CD6\u{27D98}\u{27DBD}\u8D12\u8D03\u{21910}\u8CDB\u705C\u8D11\u{24CC9}\u3ED0\u8D77"],
["9040", "\u8DA9\u{28002}\u{21014}\u{2498A}\u3B7C\u{281BC}\u{2710C}\u7AE7\u8EAD\u8EB6\u8EC3\u92D4\u8F19\u8F2D\u{28365}\u{28412}\u8FA5\u9303\u{2A29F}\u{20A50}\u8FB3\u492A\u{289DE}\u{2853D}\u{23DBB}\u5EF8\u{23262}\u8FF9\u{2A014}\u{286BC}\u{28501}\u{22325}\u3980\u{26ED7}\u9037\u{2853C}\u{27ABE}\u9061\u{2856C}\u{2860B}\u90A8\u{28713}\u90C4\u{286E6}\u90AE\u90FD\u9167\u3AF0\u91A9\u91C4\u7CAC\u{28933}\u{21E89}\u920E\u6C9F\u9241\u9262\u{255B9}\u92B9\u{28AC6}\u{23C9B}\u{28B0C}\u{255DB}"],
["90a1", "\u{20D31}\u932C\u936B\u{28AE1}\u{28BEB}\u708F\u5AC3\u{28AE2}\u{28AE5}\u4965\u9244\u{28BEC}\u{28C39}\u{28BFF}\u9373\u945B\u8EBC\u9585\u95A6\u9426\u95A0\u6FF6\u42B9\u{2267A}\u{286D8}\u{2127C}\u{23E2E}\u49DF\u6C1C\u967B\u9696\u416C\u96A3\u{26ED5}\u61DA\u96B6\u78F5\u{28AE0}\u96BD\u53CC\u49A1\u{26CB8}\u{20274}\u{26410}\u{290AF}\u{290E5}\u{24AD1}\u{21915}\u{2330A}\u9731\u8642\u9736\u4A0F\u453D\u4585\u{24AE9}\u7075\u5B41\u971B\u975C\u{291D5}\u9757\u5B4A\u{291EB}\u975F\u9425\u50D0\u{230B7}\u{230BC}\u9789\u979F\u97B1\u97BE\u97C0\u97D2\u97E0\u{2546C}\u97EE\u741C\u{29433}\u97FF\u97F5\u{2941D}\u{2797A}\u4AD1\u9834\u9833\u984B\u9866\u3B0E\u{27175}\u3D51\u{20630}\u{2415C}"],
["9140", "\u{25706}\u98CA\u98B7\u98C8\u98C7\u4AFF\u{26D27}\u{216D3}\u55B0\u98E1\u98E6\u98EC\u9378\u9939\u{24A29}\u4B72\u{29857}\u{29905}\u99F5\u9A0C\u9A3B\u9A10\u9A58\u{25725}\u36C4\u{290B1}\u{29BD5}\u9AE0\u9AE2\u{29B05}\u9AF4\u4C0E\u9B14\u9B2D\u{28600}\u5034\u9B34\u{269A8}\u38C3\u{2307D}\u9B50\u9B40\u{29D3E}\u5A45\u{21863}\u9B8E\u{2424B}\u9C02\u9BFF\u9C0C\u{29E68}\u9DD4\u{29FB7}\u{2A192}\u{2A1AB}\u{2A0E1}\u{2A123}\u{2A1DF}\u9D7E\u9D83\u{2A134}\u9E0E\u6888"],
["91a1", "\u9DC4\u{2215B}\u{2A193}\u{2A220}\u{2193B}\u{2A233}\u9D39\u{2A0B9}\u{2A2B4}\u9E90\u9E95\u9E9E\u9EA2\u4D34\u9EAA\u9EAF\u{24364}\u9EC1\u3B60\u39E5\u3D1D\u4F32\u37BE\u{28C2B}\u9F02\u9F08\u4B96\u9424\u{26DA2}\u9F17\u9F16\u9F39\u569F\u568A\u9F45\u99B8\u{2908B}\u97F2\u847F\u9F62\u9F69\u7ADC\u9F8E\u7216\u4BBE\u{24975}\u{249BB}\u7177\u{249F8}\u{24348}\u{24A51}\u739E\u{28BDA}\u{218FA}\u799F\u{2897E}\u{28E36}\u9369\u93F3\u{28A44}\u92EC\u9381\u93CB\u{2896C}\u{244B9}\u7217\u3EEB\u7772\u7A43\u70D0\u{24473}\u{243F8}\u717E\u{217EF}\u70A3\u{218BE}\u{23599}\u3EC7\u{21885}\u{2542F}\u{217F8}\u3722\u{216FB}\u{21839}\u36E1\u{21774}\u{218D1}\u{25F4B}\u3723\u{216C0}\u575B\u{24A25}\u{213FE}\u{212A8}"],
["9240", "\u{213C6}\u{214B6}\u8503\u{236A6}\u8503\u8455\u{24994}\u{27165}\u{23E31}\u{2555C}\u{23EFB}\u{27052}\u44F4\u{236EE}\u{2999D}\u{26F26}\u67F9\u3733\u3C15\u3DE7\u586C\u{21922}\u6810\u4057\u{2373F}\u{240E1}\u{2408B}\u{2410F}\u{26C21}\u54CB\u569E\u{266B1}\u5692\u{20FDF}\u{20BA8}\u{20E0D}\u93C6\u{28B13}\u939C\u4EF8\u512B\u3819\u{24436}\u4EBC\u{20465}\u{2037F}\u4F4B\u4F8A\u{25651}\u5A68\u{201AB}\u{203CB}\u3999\u{2030A}\u{20414}\u3435\u4F29\u{202C0}\u{28EB3}\u{20275}\u8ADA\u{2020C}\u4E98"],
["92a1", "\u50CD\u510D\u4FA2\u4F03\u{24A0E}\u{23E8A}\u4F42\u502E\u506C\u5081\u4FCC\u4FE5\u5058\u50FC\u5159\u515B\u515D\u515E\u6E76\u{23595}\u{23E39}\u{23EBF}\u6D72\u{21884}\u{23E89}\u51A8\u51C3\u{205E0}\u44DD\u{204A3}\u{20492}\u{20491}\u8D7A\u{28A9C}\u{2070E}\u5259\u52A4\u{20873}\u52E1\u936E\u467A\u718C\u{2438C}\u{20C20}\u{249AC}\u{210E4}\u69D1\u{20E1D}\u7479\u3EDE\u7499\u7414\u7456\u7398\u4B8E\u{24ABC}\u{2408D}\u53D0\u3584\u720F\u{240C9}\u55B4\u{20345}\u54CD\u{20BC6}\u571D\u925D\u96F4\u9366\u57DD\u578D\u577F\u363E\u58CB\u5A99\u{28A46}\u{216FA}\u{2176F}\u{21710}\u5A2C\u59B8\u928F\u5A7E\u5ACF\u5A12\u{25946}\u{219F3}\u{21861}\u{24295}\u36F5\u6D05\u7443\u5A21\u{25E83}"],
["9340", "\u5A81\u{28BD7}\u{20413}\u93E0\u748C\u{21303}\u7105\u4972\u9408\u{289FB}\u93BD\u37A0\u5C1E\u5C9E\u5E5E\u5E48\u{21996}\u{2197C}\u{23AEE}\u5ECD\u5B4F\u{21903}\u{21904}\u3701\u{218A0}\u36DD\u{216FE}\u36D3\u812A\u{28A47}\u{21DBA}\u{23472}\u{289A8}\u5F0C\u5F0E\u{21927}\u{217AB}\u5A6B\u{2173B}\u5B44\u8614\u{275FD}\u8860\u607E\u{22860}\u{2262B}\u5FDB\u3EB8\u{225AF}\u{225BE}\u{29088}\u{26F73}\u61C0\u{2003E}\u{20046}\u{2261B}\u6199\u6198\u6075\u{22C9B}\u{22D07}\u{246D4}\u{2914D}"],
["93a1", "\u6471\u{24665}\u{22B6A}\u3A29\u{22B22}\u{23450}\u{298EA}\u{22E78}\u6337\u{2A45B}\u64B6\u6331\u63D1\u{249E3}\u{22D67}\u62A4\u{22CA1}\u643B\u656B\u6972\u3BF4\u{2308E}\u{232AD}\u{24989}\u{232AB}\u550D\u{232E0}\u{218D9}\u{2943F}\u66CE\u{23289}\u{231B3}\u3AE0\u4190\u{25584}\u{28B22}\u{2558F}\u{216FC}\u{2555B}\u{25425}\u78EE\u{23103}\u{2182A}\u{23234}\u3464\u{2320F}\u{23182}\u{242C9}\u668E\u{26D24}\u666B\u4B93\u6630\u{27870}\u{21DEB}\u6663\u{232D2}\u{232E1}\u661E\u{25872}\u38D1\u{2383A}\u{237BC}\u3B99\u{237A2}\u{233FE}\u74D0\u3B96\u678F\u{2462A}\u68B6\u681E\u3BC4\u6ABE\u3863\u{237D5}\u{24487}\u6A33\u6A52\u6AC9\u6B05\u{21912}\u6511\u6898\u6A4C\u3BD7\u6A7A\u6B57\u{23FC0}\u{23C9A}\u93A0\u92F2\u{28BEA}\u{28ACB}"],
["9440", "\u9289\u{2801E}\u{289DC}\u9467\u6DA5\u6F0B\u{249EC}\u6D67\u{23F7F}\u3D8F\u6E04\u{2403C}\u5A3D\u6E0A\u5847\u6D24\u7842\u713B\u{2431A}\u{24276}\u70F1\u7250\u7287\u7294\u{2478F}\u{24725}\u5179\u{24AA4}\u{205EB}\u747A\u{23EF8}\u{2365F}\u{24A4A}\u{24917}\u{25FE1}\u3F06\u3EB1\u{24ADF}\u{28C23}\u{23F35}\u60A7\u3EF3\u74CC\u743C\u9387\u7437\u449F\u{26DEA}\u4551\u7583\u3F63\u{24CD9}\u{24D06}\u3F58\u7555\u7673\u{2A5C6}\u3B19\u7468\u{28ACC}\u{249AB}\u{2498E}\u3AFB"],
["94a1", "\u3DCD\u{24A4E}\u3EFF\u{249C5}\u{248F3}\u91FA\u5732\u9342\u{28AE3}\u{21864}\u50DF\u{25221}\u{251E7}\u7778\u{23232}\u770E\u770F\u777B\u{24697}\u{23781}\u3A5E\u{248F0}\u7438\u749B\u3EBF\u{24ABA}\u{24AC7}\u40C8\u{24A96}\u{261AE}\u9307\u{25581}\u781E\u788D\u7888\u78D2\u73D0\u7959\u{27741}\u{256E3}\u410E\u799B\u8496\u79A5\u6A2D\u{23EFA}\u7A3A\u79F4\u416E\u{216E6}\u4132\u9235\u79F1\u{20D4C}\u{2498C}\u{20299}\u{23DBA}\u{2176E}\u3597\u556B\u3570\u36AA\u{201D4}\u{20C0D}\u7AE2\u5A59\u{226F5}\u{25AAF}\u{25A9C}\u5A0D\u{2025B}\u78F0\u5A2A\u{25BC6}\u7AFE\u41F9\u7C5D\u7C6D\u4211\u{25BB3}\u{25EBC}\u{25EA6}\u7CCD\u{249F9}\u{217B0}\u7C8E\u7C7C\u7CAE\u6AB2\u7DDC\u7E07\u7DD3\u7F4E\u{26261}"],
["9540", "\u{2615C}\u{27B48}\u7D97\u{25E82}\u426A\u{26B75}\u{20916}\u67D6\u{2004E}\u{235CF}\u57C4\u{26412}\u{263F8}\u{24962}\u7FDD\u7B27\u{2082C}\u{25AE9}\u{25D43}\u7B0C\u{25E0E}\u99E6\u8645\u9A63\u6A1C\u{2343F}\u39E2\u{249F7}\u{265AD}\u9A1F\u{265A0}\u8480\u{27127}\u{26CD1}\u44EA\u8137\u4402\u80C6\u8109\u8142\u{267B4}\u98C3\u{26A42}\u8262\u8265\u{26A51}\u8453\u{26DA7}\u8610\u{2721B}\u5A86\u417F\u{21840}\u5B2B\u{218A1}\u5AE4\u{218D8}\u86A0\u{2F9BC}\u{23D8F}\u882D\u{27422}\u5A02"],
["95a1", "\u886E\u4F45\u8887\u88BF\u88E6\u8965\u894D\u{25683}\u8954\u{27785}\u{27784}\u{28BF5}\u{28BD9}\u{28B9C}\u{289F9}\u3EAD\u84A3\u46F5\u46CF\u37F2\u8A3D\u8A1C\u{29448}\u5F4D\u922B\u{24284}\u65D4\u7129\u70C4\u{21845}\u9D6D\u8C9F\u8CE9\u{27DDC}\u599A\u77C3\u59F0\u436E\u36D4\u8E2A\u8EA7\u{24C09}\u8F30\u8F4A\u42F4\u6C58\u6FBB\u{22321}\u489B\u6F79\u6E8B\u{217DA}\u9BE9\u36B5\u{2492F}\u90BB\u9097\u5571\u4906\u91BB\u9404\u{28A4B}\u4062\u{28AFC}\u9427\u{28C1D}\u{28C3B}\u84E5\u8A2B\u9599\u95A7\u9597\u9596\u{28D34}\u7445\u3EC2\u{248FF}\u{24A42}\u{243EA}\u3EE7\u{23225}\u968F\u{28EE7}\u{28E66}\u{28E65}\u3ECC\u{249ED}\u{24A78}\u{23FEE}\u7412\u746B\u3EFC\u9741\u{290B0}"],
["9640", "\u6847\u4A1D\u{29093}\u{257DF}\u975D\u9368\u{28989}\u{28C26}\u{28B2F}\u{263BE}\u92BA\u5B11\u8B69\u493C\u73F9\u{2421B}\u979B\u9771\u9938\u{20F26}\u5DC1\u{28BC5}\u{24AB2}\u981F\u{294DA}\u92F6\u{295D7}\u91E5\u44C0\u{28B50}\u{24A67}\u{28B64}\u98DC\u{28A45}\u3F00\u922A\u4925\u8414\u993B\u994D\u{27B06}\u3DFD\u999B\u4B6F\u99AA\u9A5C\u{28B65}\u{258C8}\u6A8F\u9A21\u5AFE\u9A2F\u{298F1}\u4B90\u{29948}\u99BC\u4BBD\u4B97\u937D\u5872\u{21302}\u5822\u{249B8}"],
["96a1", "\u{214E8}\u7844\u{2271F}\u{23DB8}\u68C5\u3D7D\u9458\u3927\u6150\u{22781}\u{2296B}\u6107\u9C4F\u9C53\u9C7B\u9C35\u9C10\u9B7F\u9BCF\u{29E2D}\u9B9F\u{2A1F5}\u{2A0FE}\u9D21\u4CAE\u{24104}\u9E18\u4CB0\u9D0C\u{2A1B4}\u{2A0ED}\u{2A0F3}\u{2992F}\u9DA5\u84BD\u{26E12}\u{26FDF}\u{26B82}\u85FC\u4533\u{26DA4}\u{26E84}\u{26DF0}\u8420\u85EE\u{26E00}\u{237D7}\u{26064}\u79E2\u{2359C}\u{23640}\u492D\u{249DE}\u3D62\u93DB\u92BE\u9348\u{202BF}\u78B9\u9277\u944D\u4FE4\u3440\u9064\u{2555D}\u783D\u7854\u78B6\u784B\u{21757}\u{231C9}\u{24941}\u369A\u4F72\u6FDA\u6FD9\u701E\u701E\u5414\u{241B5}\u57BB\u58F3\u578A\u9D16\u57D7\u7134\u34AF\u{241AC}\u71EB\u{26C40}\u{24F97}\u5B28\u{217B5}\u{28A49}"],
["9740", "\u610C\u5ACE\u5A0B\u42BC\u{24488}\u372C\u4B7B\u{289FC}\u93BB\u93B8\u{218D6}\u{20F1D}\u8472\u{26CC0}\u{21413}\u{242FA}\u{22C26}\u{243C1}\u5994\u{23DB7}\u{26741}\u7DA8\u{2615B}\u{260A4}\u{249B9}\u{2498B}\u{289FA}\u92E5\u73E2\u3EE9\u74B4\u{28B63}\u{2189F}\u3EE1\u{24AB3}\u6AD8\u73F3\u73FB\u3ED6\u{24A3E}\u{24A94}\u{217D9}\u{24A66}\u{203A7}\u{21424}\u{249E5}\u7448\u{24916}\u70A5\u{24976}\u9284\u73E6\u935F\u{204FE}\u9331\u{28ACE}\u{28A16}\u9386\u{28BE7}\u{255D5}\u4935\u{28A82}\u716B"],
["97a1", "\u{24943}\u{20CFF}\u56A4\u{2061A}\u{20BEB}\u{20CB8}\u5502\u79C4\u{217FA}\u7DFE\u{216C2}\u{24A50}\u{21852}\u452E\u9401\u370A\u{28AC0}\u{249AD}\u59B0\u{218BF}\u{21883}\u{27484}\u5AA1\u36E2\u{23D5B}\u36B0\u925F\u5A79\u{28A81}\u{21862}\u9374\u3CCD\u{20AB4}\u4A96\u398A\u50F4\u3D69\u3D4C\u{2139C}\u7175\u42FB\u{28218}\u6E0F\u{290E4}\u44EB\u6D57\u{27E4F}\u7067\u6CAF\u3CD6\u{23FED}\u{23E2D}\u6E02\u6F0C\u3D6F\u{203F5}\u7551\u36BC\u34C8\u4680\u3EDA\u4871\u59C4\u926E\u493E\u8F41\u{28C1C}\u{26BC0}\u5812\u57C8\u36D6\u{21452}\u70FE\u{24362}\u{24A71}\u{22FE3}\u{212B0}\u{223BD}\u68B9\u6967\u{21398}\u{234E5}\u{27BF4}\u{236DF}\u{28A83}\u{237D6}\u{233FA}\u{24C9F}\u6A1A\u{236AD}\u{26CB7}\u843E\u44DF\u44CE"],
["9840", "\u{26D26}\u{26D51}\u{26C82}\u{26FDE}\u6F17\u{27109}\u833D\u{2173A}\u83ED\u{26C80}\u{27053}\u{217DB}\u5989\u5A82\u{217B3}\u5A61\u5A71\u{21905}\u{241FC}\u372D\u59EF\u{2173C}\u36C7\u718E\u9390\u669A\u{242A5}\u5A6E\u5A2B\u{24293}\u6A2B\u{23EF9}\u{27736}\u{2445B}\u{242CA}\u711D\u{24259}\u{289E1}\u4FB0\u{26D28}\u5CC2\u{244CE}\u{27E4D}\u{243BD}\u6A0C\u{24256}\u{21304}\u70A6\u7133\u{243E9}\u3DA5\u6CDF\u{2F825}\u{24A4F}\u7E65\u59EB\u5D2F\u3DF3\u5F5C\u{24A5D}\u{217DF}\u7DA4\u8426"],
["98a1", "\u5485\u{23AFA}\u{23300}\u{20214}\u577E\u{208D5}\u{20619}\u3FE5\u{21F9E}\u{2A2B6}\u7003\u{2915B}\u5D70\u738F\u7CD3\u{28A59}\u{29420}\u4FC8\u7FE7\u72CD\u7310\u{27AF4}\u7338\u7339\u{256F6}\u7341\u7348\u3EA9\u{27B18}\u906C\u71F5\u{248F2}\u73E1\u81F6\u3ECA\u770C\u3ED1\u6CA2\u56FD\u7419\u741E\u741F\u3EE2\u3EF0\u3EF4\u3EFA\u74D3\u3F0E\u3F53\u7542\u756D\u7572\u758D\u3F7C\u75C8\u75DC\u3FC0\u764D\u3FD7\u7674\u3FDC\u767A\u{24F5C}\u7188\u5623\u8980\u5869\u401D\u7743\u4039\u6761\u4045\u35DB\u7798\u406A\u406F\u5C5E\u77BE\u77CB\u58F2\u7818\u70B9\u781C\u40A8\u7839\u7847\u7851\u7866\u8448\u{25535}\u7933\u6803\u7932\u4103"],
["9940", "\u4109\u7991\u7999\u8FBB\u7A06\u8FBC\u4167\u7A91\u41B2\u7ABC\u8279\u41C4\u7ACF\u7ADB\u41CF\u4E21\u7B62\u7B6C\u7B7B\u7C12\u7C1B\u4260\u427A\u7C7B\u7C9C\u428C\u7CB8\u4294\u7CED\u8F93\u70C0\u{20CCF}\u7DCF\u7DD4\u7DD0\u7DFD\u7FAE\u7FB4\u729F\u4397\u8020\u8025\u7B39\u802E\u8031\u8054\u3DCC\u57B4\u70A0\u80B7\u80E9\u43ED\u810C\u732A\u810E\u8112\u7560\u8114\u4401\u3B39\u8156\u8159\u815A"],
["99a1", "\u4413\u583A\u817C\u8184\u4425\u8193\u442D\u81A5\u57EF\u81C1\u81E4\u8254\u448F\u82A6\u8276\u82CA\u82D8\u82FF\u44B0\u8357\u9669\u698A\u8405\u70F5\u8464\u60E3\u8488\u4504\u84BE\u84E1\u84F8\u8510\u8538\u8552\u453B\u856F\u8570\u85E0\u4577\u8672\u8692\u86B2\u86EF\u9645\u878B\u4606\u4617\u88AE\u88FF\u8924\u8947\u8991\u{27967}\u8A29\u8A38\u8A94\u8AB4\u8C51\u8CD4\u8CF2\u8D1C\u4798\u585F\u8DC3\u47ED\u4EEE\u8E3A\u55D8\u5754\u8E71\u55F5\u8EB0\u4837\u8ECE\u8EE2\u8EE4\u8EED\u8EF2\u8FB7\u8FC1\u8FCA\u8FCC\u9033\u99C4\u48AD\u98E0\u9213\u491E\u9228\u9258\u926B\u92B1\u92AE\u92BF"],
["9a40", "\u92E3\u92EB\u92F3\u92F4\u92FD\u9343\u9384\u93AD\u4945\u4951\u9EBF\u9417\u5301\u941D\u942D\u943E\u496A\u9454\u9479\u952D\u95A2\u49A7\u95F4\u9633\u49E5\u67A0\u4A24\u9740\u4A35\u97B2\u97C2\u5654\u4AE4\u60E8\u98B9\u4B19\u98F1\u5844\u990E\u9919\u51B4\u991C\u9937\u9942\u995D\u9962\u4B70\u99C5\u4B9D\u9A3C\u9B0F\u7A83\u9B69\u9B81\u9BDD\u9BF1\u9BF4\u4C6D\u9C20\u376F\u{21BC2}\u9D49\u9C3A"],
["9aa1", "\u9EFE\u5650\u9D93\u9DBD\u9DC0\u9DFC\u94F6\u8FB6\u9E7B\u9EAC\u9EB1\u9EBD\u9EC6\u94DC\u9EE2\u9EF1\u9EF8\u7AC8\u9F44\u{20094}\u{202B7}\u{203A0}\u691A\u94C3\u59AC\u{204D7}\u5840\u94C1\u37B9\u{205D5}\u{20615}\u{20676}\u{216BA}\u5757\u7173\u{20AC2}\u{20ACD}\u{20BBF}\u546A\u{2F83B}\u{20BCB}\u549E\u{20BFB}\u{20C3B}\u{20C53}\u{20C65}\u{20C7C}\u60E7\u{20C8D}\u567A\u{20CB5}\u{20CDD}\u{20CED}\u{20D6F}\u{20DB2}\u{20DC8}\u6955\u9C2F\u87A5\u{20E04}\u{20E0E}\u{20ED7}\u{20F90}\u{20F2D}\u{20E73}\u5C20\u{20FBC}\u5E0B\u{2105C}\u{2104F}\u{21076}\u671E\u{2107B}\u{21088}\u{21096}\u3647\u{210BF}\u{210D3}\u{2112F}\u{2113B}\u5364\u84AD\u{212E3}\u{21375}\u{21336}\u8B81\u{21577}\u{21619}\u{217C3}\u{217C7}\u4E78\u70BB\u{2182D}\u{2196A}"],
["9b40", "\u{21A2D}\u{21A45}\u{21C2A}\u{21C70}\u{21CAC}\u{21EC8}\u62C3\u{21ED5}\u{21F15}\u7198\u6855\u{22045}\u69E9\u36C8\u{2227C}\u{223D7}\u{223FA}\u{2272A}\u{22871}\u{2294F}\u82FD\u{22967}\u{22993}\u{22AD5}\u89A5\u{22AE8}\u8FA0\u{22B0E}\u97B8\u{22B3F}\u9847\u9ABD\u{22C4C}"],
["9b62", "\u{22C88}\u{22CB7}\u{25BE8}\u{22D08}\u{22D12}\u{22DB7}\u{22D95}\u{22E42}\u{22F74}\u{22FCC}\u{23033}\u{23066}\u{2331F}\u{233DE}\u5FB1\u6648\u66BF\u{27A79}\u{23567}\u{235F3}\u7201\u{249BA}\u77D7\u{2361A}\u{23716}\u7E87\u{20346}\u58B5\u670E"],
["9ba1", "\u6918\u{23AA7}\u{27657}\u{25FE2}\u{23E11}\u{23EB9}\u{275FE}\u{2209A}\u48D0\u4AB8\u{24119}\u{28A9A}\u{242EE}\u{2430D}\u{2403B}\u{24334}\u{24396}\u{24A45}\u{205CA}\u51D2\u{20611}\u599F\u{21EA8}\u3BBE\u{23CFF}\u{24404}\u{244D6}\u5788\u{24674}\u399B\u{2472F}\u{285E8}\u{299C9}\u3762\u{221C3}\u8B5E\u{28B4E}\u99D6\u{24812}\u{248FB}\u{24A15}\u7209\u{24AC0}\u{20C78}\u5965\u{24EA5}\u{24F86}\u{20779}\u8EDA\u{2502C}\u528F\u573F\u7171\u{25299}\u{25419}\u{23F4A}\u{24AA7}\u55BC\u{25446}\u{2546E}\u{26B52}\u91D4\u3473\u{2553F}\u{27632}\u{2555E}\u4718\u{25562}\u{25566}\u{257C7}\u{2493F}\u{2585D}\u5066\u34FB\u{233CC}\u60DE\u{25903}\u477C\u{28948}\u{25AAE}\u{25B89}\u{25C06}\u{21D90}\u57A1\u7151\u6FB6\u{26102}\u{27C12}\u9056\u{261B2}\u{24F9A}\u8B62\u{26402}\u{2644A}"],
["9c40", "\u5D5B\u{26BF7}\u8F36\u{26484}\u{2191C}\u8AEA\u{249F6}\u{26488}\u{23FEF}\u{26512}\u4BC0\u{265BF}\u{266B5}\u{2271B}\u9465\u{257E1}\u6195\u5A27\u{2F8CD}\u4FBB\u56B9\u{24521}\u{266FC}\u4E6A\u{24934}\u9656\u6D8F\u{26CBD}\u3618\u8977\u{26799}\u{2686E}\u{26411}\u{2685E}\u71DF\u{268C7}\u7B42\u{290C0}\u{20A11}\u{26926}\u9104\u{26939}\u7A45\u9DF0\u{269FA}\u9A26\u{26A2D}\u365F\u{26469}\u{20021}\u7983\u{26A34}\u{26B5B}\u5D2C\u{23519}\u83CF\u{26B9D}\u46D0\u{26CA4}\u753B\u8865\u{26DAE}\u58B6"],
["9ca1", "\u371C\u{2258D}\u{2704B}\u{271CD}\u3C54\u{27280}\u{27285}\u9281\u{2217A}\u{2728B}\u9330\u{272E6}\u{249D0}\u6C39\u949F\u{27450}\u{20EF8}\u8827\u88F5\u{22926}\u{28473}\u{217B1}\u6EB8\u{24A2A}\u{21820}\u39A4\u36B9\u5C10\u79E3\u453F\u66B6\u{29CAD}\u{298A4}\u8943\u{277CC}\u{27858}\u56D6\u40DF\u{2160A}\u39A1\u{2372F}\u{280E8}\u{213C5}\u71AD\u8366\u{279DD}\u{291A8}\u5A67\u4CB7\u{270AF}\u{289AB}\u{279FD}\u{27A0A}\u{27B0B}\u{27D66}\u{2417A}\u7B43\u797E\u{28009}\u6FB5\u{2A2DF}\u6A03\u{28318}\u53A2\u{26E07}\u93BF\u6836\u975D\u{2816F}\u{28023}\u{269B5}\u{213ED}\u{2322F}\u{28048}\u5D85\u{28C30}\u{28083}\u5715\u9823\u{28949}\u5DAB\u{24988}\u65BE\u69D5\u53D2\u{24AA5}\u{23F81}\u3C11\u6736\u{28090}\u{280F4}\u{2812E}\u{21FA1}\u{2814F}"],
["9d40", "\u{28189}\u{281AF}\u{2821A}\u{28306}\u{2832F}\u{2838A}\u35CA\u{28468}\u{286AA}\u48FA\u63E6\u{28956}\u7808\u9255\u{289B8}\u43F2\u{289E7}\u43DF\u{289E8}\u{28B46}\u{28BD4}\u59F8\u{28C09}\u8F0B\u{28FC5}\u{290EC}\u7B51\u{29110}\u{2913C}\u3DF7\u{2915E}\u{24ACA}\u8FD0\u728F\u568B\u{294E7}\u{295E9}\u{295B0}\u{295B8}\u{29732}\u{298D1}\u{29949}\u{2996A}\u{299C3}\u{29A28}\u{29B0E}\u{29D5A}\u{29D9B}\u7E9F\u{29EF8}\u{29F23}\u4CA4\u9547\u{2A293}\u71A2\u{2A2FF}\u4D91\u9012\u{2A5CB}\u4D9C\u{20C9C}\u8FBE\u55C1"],
["9da1", "\u8FBA\u{224B0}\u8FB9\u{24A93}\u4509\u7E7F\u6F56\u6AB1\u4EEA\u34E4\u{28B2C}\u{2789D}\u373A\u8E80\u{217F5}\u{28024}\u{28B6C}\u{28B99}\u{27A3E}\u{266AF}\u3DEB\u{27655}\u{23CB7}\u{25635}\u{25956}\u4E9A\u{25E81}\u{26258}\u56BF\u{20E6D}\u8E0E\u5B6D\u{23E88}\u{24C9E}\u63DE\u62D0\u{217F6}\u{2187B}\u6530\u562D\u{25C4A}\u541A\u{25311}\u3DC6\u{29D98}\u4C7D\u5622\u561E\u7F49\u{25ED8}\u5975\u{23D40}\u8770\u4E1C\u{20FEA}\u{20D49}\u{236BA}\u8117\u9D5E\u8D18\u763B\u9C45\u764E\u77B9\u9345\u5432\u8148\u82F7\u5625\u8132\u8418\u80BD\u55EA\u7962\u5643\u5416\u{20E9D}\u35CE\u5605\u55F1\u66F1\u{282E2}\u362D\u7534\u55F0\u55BA\u5497\u5572\u{20C41}\u{20C96}\u5ED0\u{25148}\u{20E76}\u{22C62}"],
["9e40", "\u{20EA2}\u9EAB\u7D5A\u55DE\u{21075}\u629D\u976D\u5494\u8CCD\u71F6\u9176\u63FC\u63B9\u63FE\u5569\u{22B43}\u9C72\u{22EB3}\u519A\u34DF\u{20DA7}\u51A7\u544D\u551E\u5513\u7666\u8E2D\u{2688A}\u75B1\u80B6\u8804\u8786\u88C7\u81B6\u841C\u{210C1}\u44EC\u7304\u{24706}\u5B90\u830B\u{26893}\u567B\u{226F4}\u{27D2F}\u{241A3}\u{27D73}\u{26ED0}\u{272B6}\u9170\u{211D9}\u9208\u{23CFC}\u{2A6A9}\u{20EAC}\u{20EF9}\u7266\u{21CA2}\u474E\u{24FC2}\u{27FF9}\u{20FEB}\u40FA"],
["9ea1", "\u9C5D\u651F\u{22DA0}\u48F3\u{247E0}\u{29D7C}\u{20FEC}\u{20E0A}\u6062\u{275A3}\u{20FED}"],
["9ead", "\u{26048}\u{21187}\u71A3\u7E8E\u9D50\u4E1A\u4E04\u3577\u5B0D\u6CB2\u5367\u36AC\u39DC\u537D\u36A5\u{24618}\u589A\u{24B6E}\u822D\u544B\u57AA\u{25A95}\u{20979}"],
["9ec5", "\u3A52\u{22465}\u7374\u{29EAC}\u4D09\u9BED\u{23CFE}\u{29F30}\u4C5B\u{24FA9}\u{2959E}\u{29FDE}\u845C\u{23DB6}\u{272B2}\u{267B3}\u{23720}\u632E\u7D25\u{23EF7}\u{23E2C}\u3A2A\u9008\u52CC\u3E74\u367A\u45E9\u{2048E}\u7640\u5AF0\u{20EB6}\u787A\u{27F2E}\u58A7\u40BF\u567C\u9B8B\u5D74\u7654\u{2A434}\u9E85\u4CE1\u75F9\u37FB\u6119\u{230DA}\u{243F2}"],
["9ef5", "\u565D\u{212A9}\u57A7\u{24963}\u{29E06}\u5234\u{270AE}\u35AD\u6C4A\u9D7C"],
["9f40", "\u7C56\u9B39\u57DE\u{2176C}\u5C53\u64D3\u{294D0}\u{26335}\u{27164}\u86AD\u{20D28}\u{26D22}\u{24AE2}\u{20D71}"],
["9f4f", "\u51FE\u{21F0F}\u5D8E\u9703\u{21DD1}\u9E81\u904C\u7B1F\u9B02\u5CD1\u7BA3\u6268\u6335\u9AFF\u7BCF\u9B2A\u7C7E\u9B2E\u7C42\u7C86\u9C15\u7BFC\u9B09\u9F17\u9C1B\u{2493E}\u9F5A\u5573\u5BC3\u4FFD\u9E98\u4FF2\u5260\u3E06\u52D1\u5767\u5056\u59B7\u5E12\u97C8\u9DAB\u8F5C\u5469\u97B4\u9940\u97BA\u532C\u6130"],
["9fa1", "\u692C\u53DA\u9C0A\u9D02\u4C3B\u9641\u6980\u50A6\u7546\u{2176D}\u99DA\u5273"],
["9fae", "\u9159\u9681\u915C"],
["9fb2", "\u9151\u{28E97}\u637F\u{26D23}\u6ACA\u5611\u918E\u757A\u6285\u{203FC}\u734F\u7C70\u{25C21}\u{23CFD}"],
["9fc1", "\u{24919}\u76D6\u9B9D\u4E2A\u{20CD4}\u83BE\u8842"],
["9fc9", "\u5C4A\u69C0\u50ED\u577A\u521F\u5DF5\u4ECE\u6C31\u{201F2}\u4F39\u549C\u54DA\u529A\u8D82\u35FE\u5F0C\u35F3"],
["9fdb", "\u6B52\u917C\u9FA5\u9B97\u982E\u98B4\u9ABA\u9EA8\u9E84\u717A\u7B14"],
["9fe7", "\u6BFA\u8818\u7F78"],
["9feb", "\u5620\u{2A64A}\u8E77\u9F53"],
["9ff0", "\u8DD4\u8E4F\u9E1C\u8E01\u6282\u{2837D}\u8E28\u8E75\u7AD3\u{24A77}\u7A3E\u78D8\u6CEA\u8A67\u7607"],
["a040", "\u{28A5A}\u9F26\u6CCE\u87D6\u75C3\u{2A2B2}\u7853\u{2F840}\u8D0C\u72E2\u7371\u8B2D\u7302\u74F1\u8CEB\u{24ABB}\u862F\u5FBA\u88A0\u44B7"],
["a055", "\u{2183B}\u{26E05}"],
["a058", "\u8A7E\u{2251B}"],
["a05b", "\u60FD\u7667\u9AD7\u9D44\u936E\u9B8F\u87F5"],
["a063", "\u880F\u8CF7\u732C\u9721\u9BB0\u35D6\u72B2\u4C07\u7C51\u994A\u{26159}\u6159\u4C04\u9E96\u617D"],
["a073", "\u575F\u616F\u62A6\u6239\u62CE\u3A5C\u61E2\u53AA\u{233F5}\u6364\u6802\u35D2"],
["a0a1", "\u5D57\u{28BC2}\u8FDA\u{28E39}"],
["a0a6", "\u50D9\u{21D46}\u7906\u5332\u9638\u{20F3B}\u4065"],
["a0ae", "\u77FE"],
["a0b0", "\u7CC2\u{25F1A}\u7CDA\u7A2D\u8066\u8063\u7D4D\u7505\u74F2\u8994\u821A\u670C\u8062\u{27486}\u805B\u74F0\u8103\u7724\u8989\u{267CC}\u7553\u{26ED1}\u87A9\u87CE\u81C8\u878C\u8A49\u8CAD\u8B43\u772B\u74F8\u84DA\u3635\u69B2\u8DA6"],
["a0d4", "\u89A9\u7468\u6DB9\u87C1\u{24011}\u74E7\u3DDB\u7176\u60A4\u619C\u3CD1\u7162\u6077"],
["a0e2", "\u7F71\u{28B2D}\u7250\u60E9\u4B7E\u5220\u3C18\u{23CC7}\u{25ED7}\u{27656}\u{25531}\u{21944}\u{212FE}\u{29903}\u{26DDC}\u{270AD}\u5CC1\u{261AD}\u{28A0F}\u{23677}\u{200EE}\u{26846}\u{24F0E}\u4562\u5B1F\u{2634C}\u9F50\u9EA6\u{2626B}"],
["a3c0", "\u2400", 31, "\u2421"],
["c6a1", "\u2460", 9, "\u2474", 9, "\u2170", 9, "\u4E36\u4E3F\u4E85\u4EA0\u5182\u5196\u51AB\u52F9\u5338\u5369\u53B6\u590A\u5B80\u5DDB\u2F33\u5E7F\u5EF4\u5F50\u5F61\u6534\u65E0\u7592\u7676\u8FB5\u96B6\xA8\u02C6\u30FD\u30FE\u309D\u309E\u3003\u4EDD\u3005\u3006\u3007\u30FC\uFF3B\uFF3D\u273D\u3041", 23],
["c740", "\u3059", 58, "\u30A1\u30A2\u30A3\u30A4"],
["c7a1", "\u30A5", 81, "\u0410", 5, "\u0401\u0416", 4],
["c840", "\u041B", 26, "\u0451\u0436", 25, "\u21E7\u21B8\u21B9\u31CF\u{200CC}\u4E5A\u{2008A}\u5202\u4491"],
["c8a1", "\u9FB0\u5188\u9FB1\u{27607}"],
["c8cd", "\uFFE2\uFFE4\uFF07\uFF02\u3231\u2116\u2121\u309B\u309C\u2E80\u2E84\u2E86\u2E87\u2E88\u2E8A\u2E8C\u2E8D\u2E95\u2E9C\u2E9D\u2EA5\u2EA7\u2EAA\u2EAC\u2EAE\u2EB6\u2EBC\u2EBE\u2EC6\u2ECA\u2ECC\u2ECD\u2ECF\u2ED6\u2ED7\u2EDE\u2EE3"],
["c8f5", "\u0283\u0250\u025B\u0254\u0275\u0153\xF8\u014B\u028A\u026A"],
["f9fe", "\uFFED"],
["fa40", "\u{20547}\u92DB\u{205DF}\u{23FC5}\u854C\u42B5\u73EF\u51B5\u3649\u{24942}\u{289E4}\u9344\u{219DB}\u82EE\u{23CC8}\u783C\u6744\u62DF\u{24933}\u{289AA}\u{202A0}\u{26BB3}\u{21305}\u4FAB\u{224ED}\u5008\u{26D29}\u{27A84}\u{23600}\u{24AB1}\u{22513}\u5029\u{2037E}\u5FA4\u{20380}\u{20347}\u6EDB\u{2041F}\u507D\u5101\u347A\u510E\u986C\u3743\u8416\u{249A4}\u{20487}\u5160\u{233B4}\u516A\u{20BFF}\u{220FC}\u{202E5}\u{22530}\u{2058E}\u{23233}\u{21983}\u5B82\u877D\u{205B3}\u{23C99}\u51B2\u51B8"],
["faa1", "\u9D34\u51C9\u51CF\u51D1\u3CDC\u51D3\u{24AA6}\u51B3\u51E2\u5342\u51ED\u83CD\u693E\u{2372D}\u5F7B\u520B\u5226\u523C\u52B5\u5257\u5294\u52B9\u52C5\u7C15\u8542\u52E0\u860D\u{26B13}\u5305\u{28ADE}\u5549\u6ED9\u{23F80}\u{20954}\u{23FEC}\u5333\u5344\u{20BE2}\u6CCB\u{21726}\u681B\u73D5\u604A\u3EAA\u38CC\u{216E8}\u71DD\u44A2\u536D\u5374\u{286AB}\u537E\u537F\u{21596}\u{21613}\u77E6\u5393\u{28A9B}\u53A0\u53AB\u53AE\u73A7\u{25772}\u3F59\u739C\u53C1\u53C5\u6C49\u4E49\u57FE\u53D9\u3AAB\u{20B8F}\u53E0\u{23FEB}\u{22DA3}\u53F6\u{20C77}\u5413\u7079\u552B\u6657\u6D5B\u546D\u{26B53}\u{20D74}\u555D\u548F\u54A4\u47A6\u{2170D}\u{20EDD}\u3DB4\u{20D4D}"],
["fb40", "\u{289BC}\u{22698}\u5547\u4CED\u542F\u7417\u5586\u55A9\u5605\u{218D7}\u{2403A}\u4552\u{24435}\u66B3\u{210B4}\u5637\u66CD\u{2328A}\u66A4\u66AD\u564D\u564F\u78F1\u56F1\u9787\u53FE\u5700\u56EF\u56ED\u{28B66}\u3623\u{2124F}\u5746\u{241A5}\u6C6E\u708B\u5742\u36B1\u{26C7E}\u57E6\u{21416}\u5803\u{21454}\u{24363}\u5826\u{24BF5}\u585C\u58AA\u3561\u58E0\u58DC\u{2123C}\u58FB\u5BFF\u5743\u{2A150}\u{24278}\u93D3\u35A1\u591F\u68A6\u36C3\u6E59"],
["fba1", "\u{2163E}\u5A24\u5553\u{21692}\u8505\u59C9\u{20D4E}\u{26C81}\u{26D2A}\u{217DC}\u59D9\u{217FB}\u{217B2}\u{26DA6}\u6D71\u{21828}\u{216D5}\u59F9\u{26E45}\u5AAB\u5A63\u36E6\u{249A9}\u5A77\u3708\u5A96\u7465\u5AD3\u{26FA1}\u{22554}\u3D85\u{21911}\u3732\u{216B8}\u5E83\u52D0\u5B76\u6588\u5B7C\u{27A0E}\u4004\u485D\u{20204}\u5BD5\u6160\u{21A34}\u{259CC}\u{205A5}\u5BF3\u5B9D\u4D10\u5C05\u{21B44}\u5C13\u73CE\u5C14\u{21CA5}\u{26B28}\u5C49\u48DD\u5C85\u5CE9\u5CEF\u5D8B\u{21DF9}\u{21E37}\u5D10\u5D18\u5D46\u{21EA4}\u5CBA\u5DD7\u82FC\u382D\u{24901}\u{22049}\u{22173}\u8287\u3836\u3BC2\u5E2E\u6A8A\u5E75\u5E7A\u{244BC}\u{20CD3}\u53A6\u4EB7\u5ED0\u53A8\u{21771}\u5E09\u5EF4\u{28482}"],
["fc40", "\u5EF9\u5EFB\u38A0\u5EFC\u683E\u941B\u5F0D\u{201C1}\u{2F894}\u3ADE\u48AE\u{2133A}\u5F3A\u{26888}\u{223D0}\u5F58\u{22471}\u5F63\u97BD\u{26E6E}\u5F72\u9340\u{28A36}\u5FA7\u5DB6\u3D5F\u{25250}\u{21F6A}\u{270F8}\u{22668}\u91D6\u{2029E}\u{28A29}\u6031\u6685\u{21877}\u3963\u3DC7\u3639\u5790\u{227B4}\u7971\u3E40\u609E\u60A4\u60B3\u{24982}\u{2498F}\u{27A53}\u74A4\u50E1\u5AA0\u6164\u8424\u6142\u{2F8A6}\u{26ED2}\u6181\u51F4\u{20656}\u6187\u5BAA\u{23FB7}"],
["fca1", "\u{2285F}\u61D3\u{28B9D}\u{2995D}\u61D0\u3932\u{22980}\u{228C1}\u6023\u615C\u651E\u638B\u{20118}\u62C5\u{21770}\u62D5\u{22E0D}\u636C\u{249DF}\u3A17\u6438\u63F8\u{2138E}\u{217FC}\u6490\u6F8A\u{22E36}\u9814\u{2408C}\u{2571D}\u64E1\u64E5\u947B\u3A66\u643A\u3A57\u654D\u6F16\u{24A28}\u{24A23}\u6585\u656D\u655F\u{2307E}\u65B5\u{24940}\u4B37\u65D1\u40D8\u{21829}\u65E0\u65E3\u5FDF\u{23400}\u6618\u{231F7}\u{231F8}\u6644\u{231A4}\u{231A5}\u664B\u{20E75}\u6667\u{251E6}\u6673\u6674\u{21E3D}\u{23231}\u{285F4}\u{231C8}\u{25313}\u77C5\u{228F7}\u99A4\u6702\u{2439C}\u{24A21}\u3B2B\u69FA\u{237C2}\u675E\u6767\u6762\u{241CD}\u{290ED}\u67D7\u44E9\u6822\u6E50\u923C\u6801\u{233E6}\u{26DA0}\u685D"],
["fd40", "\u{2346F}\u69E1\u6A0B\u{28ADF}\u6973\u68C3\u{235CD}\u6901\u6900\u3D32\u3A01\u{2363C}\u3B80\u67AC\u6961\u{28A4A}\u42FC\u6936\u6998\u3BA1\u{203C9}\u8363\u5090\u69F9\u{23659}\u{2212A}\u6A45\u{23703}\u6A9D\u3BF3\u67B1\u6AC8\u{2919C}\u3C0D\u6B1D\u{20923}\u60DE\u6B35\u6B74\u{227CD}\u6EB5\u{23ADB}\u{203B5}\u{21958}\u3740\u5421\u{23B5A}\u6BE1\u{23EFC}\u6BDC\u6C37\u{2248B}\u{248F1}\u{26B51}\u6C5A\u8226\u6C79\u{23DBC}\u44C5\u{23DBD}\u{241A4}\u{2490C}\u{24900}"],
["fda1", "\u{23CC9}\u36E5\u3CEB\u{20D32}\u9B83\u{231F9}\u{22491}\u7F8F\u6837\u{26D25}\u{26DA1}\u{26DEB}\u6D96\u6D5C\u6E7C\u6F04\u{2497F}\u{24085}\u{26E72}\u8533\u{26F74}\u51C7\u6C9C\u6E1D\u842E\u{28B21}\u6E2F\u{23E2F}\u7453\u{23F82}\u79CC\u6E4F\u5A91\u{2304B}\u6FF8\u370D\u6F9D\u{23E30}\u6EFA\u{21497}\u{2403D}\u4555\u93F0\u6F44\u6F5C\u3D4E\u6F74\u{29170}\u3D3B\u6F9F\u{24144}\u6FD3\u{24091}\u{24155}\u{24039}\u{23FF0}\u{23FB4}\u{2413F}\u51DF\u{24156}\u{24157}\u{24140}\u{261DD}\u704B\u707E\u70A7\u7081\u70CC\u70D5\u70D6\u70DF\u4104\u3DE8\u71B4\u7196\u{24277}\u712B\u7145\u5A88\u714A\u716E\u5C9C\u{24365}\u714F\u9362\u{242C1}\u712C\u{2445A}\u{24A27}\u{24A22}\u71BA\u{28BE8}\u70BD\u720E"],
["fe40", "\u9442\u7215\u5911\u9443\u7224\u9341\u{25605}\u722E\u7240\u{24974}\u68BD\u7255\u7257\u3E55\u{23044}\u680D\u6F3D\u7282\u732A\u732B\u{24823}\u{2882B}\u48ED\u{28804}\u7328\u732E\u73CF\u73AA\u{20C3A}\u{26A2E}\u73C9\u7449\u{241E2}\u{216E7}\u{24A24}\u6623\u36C5\u{249B7}\u{2498D}\u{249FB}\u73F7\u7415\u6903\u{24A26}\u7439\u{205C3}\u3ED7\u745C\u{228AD}\u7460\u{28EB2}\u7447\u73E4\u7476\u83B9\u746C\u3730\u7474\u93F1\u6A2C\u7482\u4953\u{24A8C}"],
["fea1", "\u{2415F}\u{24A79}\u{28B8F}\u5B46\u{28C03}\u{2189E}\u74C8\u{21988}\u750E\u74E9\u751E\u{28ED9}\u{21A4B}\u5BD7\u{28EAC}\u9385\u754D\u754A\u7567\u756E\u{24F82}\u3F04\u{24D13}\u758E\u745D\u759E\u75B4\u7602\u762C\u7651\u764F\u766F\u7676\u{263F5}\u7690\u81EF\u37F8\u{26911}\u{2690E}\u76A1\u76A5\u76B7\u76CC\u{26F9F}\u8462\u{2509D}\u{2517D}\u{21E1C}\u771E\u7726\u7740\u64AF\u{25220}\u7758\u{232AC}\u77AF\u{28964}\u{28968}\u{216C1}\u77F4\u7809\u{21376}\u{24A12}\u68CA\u78AF\u78C7\u78D3\u96A5\u792E\u{255E0}\u78D7\u7934\u78B1\u{2760C}\u8FB8\u8884\u{28B2B}\u{26083}\u{2261C}\u7986\u8900\u6902\u7980\u{25857}\u799D\u{27B39}\u793C\u79A9\u6E2A\u{27126}\u3EA8\u79C6\u{2910D}\u79D4"]
];
}
});
var require_dbcs_data22 = __commonJS2({
"node_modules/body-parser/node_modules/iconv-lite/encodings/dbcs-data.js"(exports2, module2) {
"use strict";
module2.exports = {
// == Japanese/ShiftJIS ====================================================
// All japanese encodings are based on JIS X set of standards:
// JIS X 0201 - Single-byte encoding of ASCII + ¥ + Kana chars at 0xA1-0xDF.
// JIS X 0208 - Main set of 6879 characters, placed in 94x94 plane, to be encoded by 2 bytes.
// Has several variations in 1978, 1983, 1990 and 1997.
// JIS X 0212 - Supplementary plane of 6067 chars in 94x94 plane. 1990. Effectively dead.
// JIS X 0213 - Extension and modern replacement of 0208 and 0212. Total chars: 11233.
// 2 planes, first is superset of 0208, second - revised 0212.
// Introduced in 2000, revised 2004. Some characters are in Unicode Plane 2 (0x2xxxx)
// Byte encodings are:
// * Shift_JIS: Compatible with 0201, uses not defined chars in top half as lead bytes for double-byte
// encoding of 0208. Lead byte ranges: 0x81-0x9F, 0xE0-0xEF; Trail byte ranges: 0x40-0x7E, 0x80-0x9E, 0x9F-0xFC.
// Windows CP932 is a superset of Shift_JIS. Some companies added more chars, notably KDDI.
// * EUC-JP: Up to 3 bytes per character. Used mostly on *nixes.
// 0x00-0x7F - lower part of 0201
// 0x8E, 0xA1-0xDF - upper part of 0201
// (0xA1-0xFE)x2 - 0208 plane (94x94).
// 0x8F, (0xA1-0xFE)x2 - 0212 plane (94x94).
// * JIS X 208: 7-bit, direct encoding of 0208. Byte ranges: 0x21-0x7E (94 values). Uncommon.
// Used as-is in ISO2022 family.
// * ISO2022-JP: Stateful encoding, with escape sequences to switch between ASCII,
// 0201-1976 Roman, 0208-1978, 0208-1983.
// * ISO2022-JP-1: Adds esc seq for 0212-1990.
// * ISO2022-JP-2: Adds esc seq for GB2313-1980, KSX1001-1992, ISO8859-1, ISO8859-7.
// * ISO2022-JP-3: Adds esc seq for 0201-1976 Kana set, 0213-2000 Planes 1, 2.
// * ISO2022-JP-2004: Adds 0213-2004 Plane 1.
//
// After JIS X 0213 appeared, Shift_JIS-2004, EUC-JISX0213 and ISO2022-JP-2004 followed, with just changing the planes.
//
// Overall, it seems that it's a mess :( http://www8.plala.or.jp/tkubota1/unicode-symbols-map2.html
"shiftjis": {
type: "_dbcs",
table: function() {
return require_shiftjis22();
},
encodeAdd: { "\xA5": 92, "\u203E": 126 },
encodeSkipVals: [{ from: 60736, to: 63808 }]
},
"csshiftjis": "shiftjis",
"mskanji": "shiftjis",
"sjis": "shiftjis",
"windows31j": "shiftjis",
"ms31j": "shiftjis",
"xsjis": "shiftjis",
"windows932": "shiftjis",
"ms932": "shiftjis",
"932": "shiftjis",
"cp932": "shiftjis",
"eucjp": {
type: "_dbcs",
table: function() {
return require_eucjp22();
},
encodeAdd: { "\xA5": 92, "\u203E": 126 }
},
// TODO: KDDI extension to Shift_JIS
// TODO: IBM CCSID 942 = CP932, but F0-F9 custom chars and other char changes.
// TODO: IBM CCSID 943 = Shift_JIS = CP932 with original Shift_JIS lower 128 chars.
// == Chinese/GBK ==========================================================
// http://en.wikipedia.org/wiki/GBK
// We mostly implement W3C recommendation: https://www.w3.org/TR/encoding/#gbk-encoder
// Oldest GB2312 (1981, ~7600 chars) is a subset of CP936
"gb2312": "cp936",
"gb231280": "cp936",
"gb23121980": "cp936",
"csgb2312": "cp936",
"csiso58gb231280": "cp936",
"euccn": "cp936",
// Microsoft's CP936 is a subset and approximation of GBK.
"windows936": "cp936",
"ms936": "cp936",
"936": "cp936",
"cp936": {
type: "_dbcs",
table: function() {
return require_cp93622();
}
},
// GBK (~22000 chars) is an extension of CP936 that added user-mapped chars and some other.
"gbk": {
type: "_dbcs",
table: function() {
return require_cp93622().concat(require_gbk_added22());
}
},
"xgbk": "gbk",
"isoir58": "gbk",
// GB18030 is an algorithmic extension of GBK.
// Main source: https://www.w3.org/TR/encoding/#gbk-encoder
// http://icu-project.org/docs/papers/gb18030.html
// http://source.icu-project.org/repos/icu/data/trunk/charset/data/xml/gb-18030-2000.xml
// http://www.khngai.com/chinese/charmap/tblgbk.php?page=0
"gb18030": {
type: "_dbcs",
table: function() {
return require_cp93622().concat(require_gbk_added22());
},
gb18030: function() {
return require_gb18030_ranges22();
},
encodeSkipVals: [128],
encodeAdd: { "\u20AC": 41699 }
},
"chinese": "gb18030",
// == Korean ===============================================================
// EUC-KR, KS_C_5601 and KS X 1001 are exactly the same.
"windows949": "cp949",
"ms949": "cp949",
"949": "cp949",
"cp949": {
type: "_dbcs",
table: function() {
return require_cp94922();
}
},
"cseuckr": "cp949",
"csksc56011987": "cp949",
"euckr": "cp949",
"isoir149": "cp949",
"korean": "cp949",
"ksc56011987": "cp949",
"ksc56011989": "cp949",
"ksc5601": "cp949",
// == Big5/Taiwan/Hong Kong ================================================
// There are lots of tables for Big5 and cp950. Please see the following links for history:
// http://moztw.org/docs/big5/ http://www.haible.de/bruno/charsets/conversion-tables/Big5.html
// Variations, in roughly number of defined chars:
// * Windows CP 950: Microsoft variant of Big5. Canonical: http://www.unicode.org/Public/MAPPINGS/VENDORS/MICSFT/WINDOWS/CP950.TXT
// * Windows CP 951: Microsoft variant of Big5-HKSCS-2001. Seems to be never public. http://me.abelcheung.org/articles/research/what-is-cp951/
// * Big5-2003 (Taiwan standard) almost superset of cp950.
// * Unicode-at-on (UAO) / Mozilla 1.8. Falling out of use on the Web. Not supported by other browsers.
// * Big5-HKSCS (-2001, -2004, -2008). Hong Kong standard.
// many unicode code points moved from PUA to Supplementary plane (U+2XXXX) over the years.
// Plus, it has 4 combining sequences.
// Seems that Mozilla refused to support it for 10 yrs. https://bugzilla.mozilla.org/show_bug.cgi?id=162431 https://bugzilla.mozilla.org/show_bug.cgi?id=310299
// because big5-hkscs is the only encoding to include astral characters in non-algorithmic way.
// Implementations are not consistent within browsers; sometimes labeled as just big5.
// MS Internet Explorer switches from big5 to big5-hkscs when a patch applied.
// Great discussion & recap of what's going on https://bugzilla.mozilla.org/show_bug.cgi?id=912470#c31
// In the encoder, it might make sense to support encoding old PUA mappings to Big5 bytes seq-s.
// Official spec: http://www.ogcio.gov.hk/en/business/tech_promotion/ccli/terms/doc/2003cmp_2008.txt
// http://www.ogcio.gov.hk/tc/business/tech_promotion/ccli/terms/doc/hkscs-2008-big5-iso.txt
//
// Current understanding of how to deal with Big5(-HKSCS) is in the Encoding Standard, http://encoding.spec.whatwg.org/#big5-encoder
// Unicode mapping (http://www.unicode.org/Public/MAPPINGS/OBSOLETE/EASTASIA/OTHER/BIG5.TXT) is said to be wrong.
"windows950": "cp950",
"ms950": "cp950",
"950": "cp950",
"cp950": {
type: "_dbcs",
table: function() {
return require_cp95022();
}
},
// Big5 has many variations and is an extension of cp950. We use Encoding Standard's as a consensus.
"big5": "big5hkscs",
"big5hkscs": {
type: "_dbcs",
table: function() {
return require_cp95022().concat(require_big5_added22());
},
encodeSkipVals: [
// Although Encoding Standard says we should avoid encoding to HKSCS area (See Step 1 of
// https://encoding.spec.whatwg.org/#index-big5-pointer), we still do it to increase compatibility with ICU.
// But if a single unicode point can be encoded both as HKSCS and regular Big5, we prefer the latter.
36457,
36463,
36478,
36523,
36532,
36557,
36560,
36695,
36713,
36718,
36811,
36862,
36973,
36986,
37060,
37084,
37105,
37311,
37551,
37552,
37553,
37554,
37585,
37959,
38090,
38361,
38652,
39285,
39798,
39800,
39803,
39878,
39902,
39916,
39926,
40002,
40019,
40034,
40040,
40043,
40055,
40124,
40125,
40144,
40279,
40282,
40388,
40431,
40443,
40617,
40687,
40701,
40800,
40907,
41079,
41180,
41183,
36812,
37576,
38468,
38637,
// Step 2 of https://encoding.spec.whatwg.org/#index-big5-pointer: Use last pointer for U+2550, U+255E, U+2561, U+256A, U+5341, or U+5345
41636,
41637,
41639,
41638,
41676,
41678
]
},
"cnbig5": "big5hkscs",
"csbig5": "big5hkscs",
"xxbig5": "big5hkscs"
};
}
});
var require_encodings22 = __commonJS2({
"node_modules/body-parser/node_modules/iconv-lite/encodings/index.js"(exports2, module2) {
"use strict";
var modules = [
require_internal22(),
require_utf3222(),
require_utf1622(),
require_utf722(),
require_sbcs_codec22(),
require_sbcs_data22(),
require_sbcs_data_generated22(),
require_dbcs_codec22(),
require_dbcs_data22()
];
for (i = 0; i < modules.length; i++) {
module2 = modules[i];
for (enc in module2)
if (Object.prototype.hasOwnProperty.call(module2, enc))
exports2[enc] = module2[enc];
}
var module2;
var enc;
var i;
}
});
var require_streams22 = __commonJS2({
"node_modules/body-parser/node_modules/iconv-lite/lib/streams.js"(exports2, module2) {
"use strict";
var Buffer2 = require_safer2().Buffer;
module2.exports = function(stream_module) {
var Transform2 = stream_module.Transform;
function IconvLiteEncoderStream(conv, options) {
this.conv = conv;
options = options || {};
options.decodeStrings = false;
Transform2.call(this, options);
}
IconvLiteEncoderStream.prototype = Object.create(Transform2.prototype, {
constructor: { value: IconvLiteEncoderStream }
});
IconvLiteEncoderStream.prototype._transform = function(chunk, encoding, done) {
if (typeof chunk != "string")
return done(new Error("Iconv encoding stream needs strings as its input."));
try {
var res = this.conv.write(chunk);
if (res && res.length) this.push(res);
done();
} catch (e) {
done(e);
}
};
IconvLiteEncoderStream.prototype._flush = function(done) {
try {
var res = this.conv.end();
if (res && res.length) this.push(res);
done();
} catch (e) {
done(e);
}
};
IconvLiteEncoderStream.prototype.collect = function(cb) {
var chunks = [];
this.on("error", cb);
this.on("data", function(chunk) {
chunks.push(chunk);
});
this.on("end", function() {
cb(null, Buffer2.concat(chunks));
});
return this;
};
function IconvLiteDecoderStream(conv, options) {
this.conv = conv;
options = options || {};
options.encoding = this.encoding = "utf8";
Transform2.call(this, options);
}
IconvLiteDecoderStream.prototype = Object.create(Transform2.prototype, {
constructor: { value: IconvLiteDecoderStream }
});
IconvLiteDecoderStream.prototype._transform = function(chunk, encoding, done) {
if (!Buffer2.isBuffer(chunk) && !(chunk instanceof Uint8Array))
return done(new Error("Iconv decoding stream needs buffers as its input."));
try {
var res = this.conv.write(chunk);
if (res && res.length) this.push(res, this.encoding);
done();
} catch (e) {
done(e);
}
};
IconvLiteDecoderStream.prototype._flush = function(done) {
try {
var res = this.conv.end();
if (res && res.length) this.push(res, this.encoding);
done();
} catch (e) {
done(e);
}
};
IconvLiteDecoderStream.prototype.collect = function(cb) {
var res = "";
this.on("error", cb);
this.on("data", function(chunk) {
res += chunk;
});
this.on("end", function() {
cb(null, res);
});
return this;
};
return {
IconvLiteEncoderStream,
IconvLiteDecoderStream
};
};
}
});
var require_lib22 = __commonJS2({
"node_modules/body-parser/node_modules/iconv-lite/lib/index.js"(exports2, module2) {
"use strict";
var Buffer2 = require_safer2().Buffer;
var bomHandling = require_bom_handling22();
var iconv2 = module2.exports;
iconv2.encodings = null;
iconv2.defaultCharUnicode = "\uFFFD";
iconv2.defaultCharSingleByte = "?";
iconv2.encode = function encode3(str, encoding, options) {
str = "" + (str || "");
var encoder = iconv2.getEncoder(encoding, options);
var res = encoder.write(str);
var trail = encoder.end();
return trail && trail.length > 0 ? Buffer2.concat([res, trail]) : res;
};
iconv2.decode = function decode(buf, encoding, options) {
if (typeof buf === "string") {
if (!iconv2.skipDecodeWarning) {
console.error("Iconv-lite warning: decode()-ing strings is deprecated. Refer to https://github.com/ashtuchkin/iconv-lite/wiki/Use-Buffers-when-decoding");
iconv2.skipDecodeWarning = true;
}
buf = Buffer2.from("" + (buf || ""), "binary");
}
var decoder = iconv2.getDecoder(encoding, options);
var res = decoder.write(buf);
var trail = decoder.end();
return trail ? res + trail : res;
};
iconv2.encodingExists = function encodingExists(enc) {
try {
iconv2.getCodec(enc);
return true;
} catch (e) {
return false;
}
};
iconv2.toEncoding = iconv2.encode;
iconv2.fromEncoding = iconv2.decode;
iconv2._codecDataCache = {};
iconv2.getCodec = function getCodec(encoding) {
if (!iconv2.encodings)
iconv2.encodings = require_encodings22();
var enc = iconv2._canonicalizeEncoding(encoding);
var codecOptions = {};
while (true) {
var codec = iconv2._codecDataCache[enc];
if (codec)
return codec;
var codecDef = iconv2.encodings[enc];
switch (typeof codecDef) {
case "string":
enc = codecDef;
break;
case "object":
for (var key in codecDef)
codecOptions[key] = codecDef[key];
if (!codecOptions.encodingName)
codecOptions.encodingName = enc;
enc = codecDef.type;
break;
case "function":
if (!codecOptions.encodingName)
codecOptions.encodingName = enc;
codec = new codecDef(codecOptions, iconv2);
iconv2._codecDataCache[codecOptions.encodingName] = codec;
return codec;
default:
throw new Error("Encoding not recognized: '" + encoding + "' (searched as: '" + enc + "')");
}
}
};
iconv2._canonicalizeEncoding = function(encoding) {
return ("" + encoding).toLowerCase().replace(/:\d{4}$|[^0-9a-z]/g, "");
};
iconv2.getEncoder = function getEncoder(encoding, options) {
var codec = iconv2.getCodec(encoding), encoder = new codec.encoder(options, codec);
if (codec.bomAware && options && options.addBOM)
encoder = new bomHandling.PrependBOM(encoder, options);
return encoder;
};
iconv2.getDecoder = function getDecoder2(encoding, options) {
var codec = iconv2.getCodec(encoding), decoder = new codec.decoder(options, codec);
if (codec.bomAware && !(options && options.stripBOM === false))
decoder = new bomHandling.StripBOM(decoder, options);
return decoder;
};
iconv2.enableStreamingAPI = function enableStreamingAPI(stream_module2) {
if (iconv2.supportsStreams)
return;
var streams = require_streams22()(stream_module2);
iconv2.IconvLiteEncoderStream = streams.IconvLiteEncoderStream;
iconv2.IconvLiteDecoderStream = streams.IconvLiteDecoderStream;
iconv2.encodeStream = function encodeStream(encoding, options) {
return new iconv2.IconvLiteEncoderStream(iconv2.getEncoder(encoding, options), options);
};
iconv2.decodeStream = function decodeStream(encoding, options) {
return new iconv2.IconvLiteDecoderStream(iconv2.getDecoder(encoding, options), options);
};
iconv2.supportsStreams = true;
};
var stream_module;
try {
stream_module = require("stream");
} catch (e) {
}
if (stream_module && stream_module.Transform) {
iconv2.enableStreamingAPI(stream_module);
} else {
iconv2.encodeStream = iconv2.decodeStream = function() {
throw new Error("iconv-lite Streaming API is not enabled. Use iconv.enableStreamingAPI(require('stream')); to enable it.");
};
}
if (false) {
console.error("iconv-lite warning: js files use non-utf8 encoding. See https://github.com/ashtuchkin/iconv-lite/wiki/Javascript-source-file-encodings for more info.");
}
}
});
var require_read = __commonJS2({
"node_modules/body-parser/lib/read.js"(exports2, module2) {
"use strict";
var createError = require_http_errors();
var getBody = require_raw_body();
var iconv2 = require_lib22();
var onFinished = require_on_finished();
var zlib2 = require("node:zlib");
module2.exports = read;
function read(req, res, next2, parse8, debug, options) {
var length;
var opts = options;
var stream5;
var encoding = opts.encoding !== null ? opts.encoding : null;
var verify = opts.verify;
try {
stream5 = contentstream(req, debug, opts.inflate);
length = stream5.length;
stream5.length = void 0;
} catch (err2) {
return next2(err2);
}
opts.length = length;
opts.encoding = verify ? null : encoding;
if (opts.encoding === null && encoding !== null && !iconv2.encodingExists(encoding)) {
return next2(createError(415, 'unsupported charset "' + encoding.toUpperCase() + '"', {
charset: encoding.toLowerCase(),
type: "charset.unsupported"
}));
}
debug("read body");
getBody(stream5, opts, function(error, body) {
if (error) {
var _error;
if (error.type === "encoding.unsupported") {
_error = createError(415, 'unsupported charset "' + encoding.toUpperCase() + '"', {
charset: encoding.toLowerCase(),
type: "charset.unsupported"
});
} else {
_error = createError(400, error);
}
if (stream5 !== req) {
req.unpipe();
stream5.destroy();
}
dump(req, function onfinished() {
next2(createError(400, _error));
});
return;
}
if (verify) {
try {
debug("verify body");
verify(req, res, body, encoding);
} catch (err2) {
next2(createError(403, err2, {
body,
type: err2.type || "entity.verify.failed"
}));
return;
}
}
var str = body;
try {
debug("parse body");
str = typeof body !== "string" && encoding !== null ? iconv2.decode(body, encoding) : body;
req.body = parse8(str, encoding);
} catch (err2) {
next2(createError(400, err2, {
body: str,
type: err2.type || "entity.parse.failed"
}));
return;
}
next2();
});
}
function contentstream(req, debug, inflate) {
var encoding = (req.headers["content-encoding"] || "identity").toLowerCase();
var length = req.headers["content-length"];
debug('content-encoding "%s"', encoding);
if (inflate === false && encoding !== "identity") {
throw createError(415, "content encoding unsupported", {
encoding,
type: "encoding.unsupported"
});
}
if (encoding === "identity") {
req.length = length;
return req;
}
var stream5 = createDecompressionStream(encoding, debug);
req.pipe(stream5);
return stream5;
}
function createDecompressionStream(encoding, debug) {
switch (encoding) {
case "deflate":
debug("inflate body");
return zlib2.createInflate();
case "gzip":
debug("gunzip body");
return zlib2.createGunzip();
case "br":
debug("brotli decompress body");
return zlib2.createBrotliDecompress();
default:
throw createError(415, 'unsupported content encoding "' + encoding + '"', {
encoding,
type: "encoding.unsupported"
});
}
}
function dump(req, callback) {
if (onFinished.isFinished(req)) {
callback(null);
} else {
onFinished(req, callback);
req.resume();
}
}
}
});
var require_db2 = __commonJS2({
"node_modules/type-is/node_modules/mime-db/db.json"(exports2, module2) {
module2.exports = {
"application/1d-interleaved-parityfec": {
source: "iana"
},
"application/3gpdash-qoe-report+xml": {
source: "iana",
charset: "UTF-8",
compressible: true
},
"application/3gpp-ims+xml": {
source: "iana",
compressible: true
},
"application/3gpphal+json": {
source: "iana",
compressible: true
},
"application/3gpphalforms+json": {
source: "iana",
compressible: true
},
"application/a2l": {
source: "iana"
},
"application/ace+cbor": {
source: "iana"
},
"application/ace+json": {
source: "iana",
compressible: true
},
"application/ace-groupcomm+cbor": {
source: "iana"
},
"application/ace-trl+cbor": {
source: "iana"
},
"application/activemessage": {
source: "iana"
},
"application/activity+json": {
source: "iana",
compressible: true
},
"application/aif+cbor": {
source: "iana"
},
"application/aif+json": {
source: "iana",
compressible: true
},
"application/alto-cdni+json": {
source: "iana",
compressible: true
},
"application/alto-cdnifilter+json": {
source: "iana",
compressible: true
},
"application/alto-costmap+json": {
source: "iana",
compressible: true
},
"application/alto-costmapfilter+json": {
source: "iana",
compressible: true
},
"application/alto-directory+json": {
source: "iana",
compressible: true
},
"application/alto-endpointcost+json": {
source: "iana",
compressible: true
},
"application/alto-endpointcostparams+json": {
source: "iana",
compressible: true
},
"application/alto-endpointprop+json": {
source: "iana",
compressible: true
},
"application/alto-endpointpropparams+json": {
source: "iana",
compressible: true
},
"application/alto-error+json": {
source: "iana",
compressible: true
},
"application/alto-networkmap+json": {
source: "iana",
compressible: true
},
"application/alto-networkmapfilter+json": {
source: "iana",
compressible: true
},
"application/alto-propmap+json": {
source: "iana",
compressible: true
},
"application/alto-propmapparams+json": {
source: "iana",
compressible: true
},
"application/alto-tips+json": {
source: "iana",
compressible: true
},
"application/alto-tipsparams+json": {
source: "iana",
compressible: true
},
"application/alto-updatestreamcontrol+json": {
source: "iana",
compressible: true
},
"application/alto-updatestreamparams+json": {
source: "iana",
compressible: true
},
"application/aml": {
source: "iana"
},
"application/andrew-inset": {
source: "iana",
extensions: ["ez"]
},
"application/appinstaller": {
compressible: false,
extensions: ["appinstaller"]
},
"application/applefile": {
source: "iana"
},
"application/applixware": {
source: "apache",
extensions: ["aw"]
},
"application/appx": {
compressible: false,
extensions: ["appx"]
},
"application/appxbundle": {
compressible: false,
extensions: ["appxbundle"]
},
"application/at+jwt": {
source: "iana"
},
"application/atf": {
source: "iana"
},
"application/atfx": {
source: "iana"
},
"application/atom+xml": {
source: "iana",
compressible: true,
extensions: ["atom"]
},
"application/atomcat+xml": {
source: "iana",
compressible: true,
extensions: ["atomcat"]
},
"application/atomdeleted+xml": {
source: "iana",
compressible: true,
extensions: ["atomdeleted"]
},
"application/atomicmail": {
source: "iana"
},
"application/atomsvc+xml": {
source: "iana",
compressible: true,
extensions: ["atomsvc"]
},
"application/atsc-dwd+xml": {
source: "iana",
compressible: true,
extensions: ["dwd"]
},
"application/atsc-dynamic-event-message": {
source: "iana"
},
"application/atsc-held+xml": {
source: "iana",
compressible: true,
extensions: ["held"]
},
"application/atsc-rdt+json": {
source: "iana",
compressible: true
},
"application/atsc-rsat+xml": {
source: "iana",
compressible: true,
extensions: ["rsat"]
},
"application/atxml": {
source: "iana"
},
"application/auth-policy+xml": {
source: "iana",
compressible: true
},
"application/automationml-aml+xml": {
source: "iana",
compressible: true,
extensions: ["aml"]
},
"application/automationml-amlx+zip": {
source: "iana",
compressible: false,
extensions: ["amlx"]
},
"application/bacnet-xdd+zip": {
source: "iana",
compressible: false
},
"application/batch-smtp": {
source: "iana"
},
"application/bdoc": {
compressible: false,
extensions: ["bdoc"]
},
"application/beep+xml": {
source: "iana",
charset: "UTF-8",
compressible: true
},
"application/bufr": {
source: "iana"
},
"application/c2pa": {
source: "iana"
},
"application/calendar+json": {
source: "iana",
compressible: true
},
"application/calendar+xml": {
source: "iana",
compressible: true,
extensions: ["xcs"]
},
"application/call-completion": {
source: "iana"
},
"application/cals-1840": {
source: "iana"
},
"application/captive+json": {
source: "iana",
compressible: true
},
"application/cbor": {
source: "iana"
},
"application/cbor-seq": {
source: "iana"
},
"application/cccex": {
source: "iana"
},
"application/ccmp+xml": {
source: "iana",
compressible: true
},
"application/ccxml+xml": {
source: "iana",
compressible: true,
extensions: ["ccxml"]
},
"application/cda+xml": {
source: "iana",
charset: "UTF-8",
compressible: true
},
"application/cdfx+xml": {
source: "iana",
compressible: true,
extensions: ["cdfx"]
},
"application/cdmi-capability": {
source: "iana",
extensions: ["cdmia"]
},
"application/cdmi-container": {
source: "iana",
extensions: ["cdmic"]
},
"application/cdmi-domain": {
source: "iana",
extensions: ["cdmid"]
},
"application/cdmi-object": {
source: "iana",
extensions: ["cdmio"]
},
"application/cdmi-queue": {
source: "iana",
extensions: ["cdmiq"]
},
"application/cdni": {
source: "iana"
},
"application/ce+cbor": {
source: "iana"
},
"application/cea": {
source: "iana"
},
"application/cea-2018+xml": {
source: "iana",
compressible: true
},
"application/cellml+xml": {
source: "iana",
compressible: true
},
"application/cfw": {
source: "iana"
},
"application/cid-edhoc+cbor-seq": {
source: "iana"
},
"application/city+json": {
source: "iana",
compressible: true
},
"application/city+json-seq": {
source: "iana"
},
"application/clr": {
source: "iana"
},
"application/clue+xml": {
source: "iana",
compressible: true
},
"application/clue_info+xml": {
source: "iana",
compressible: true
},
"application/cms": {
source: "iana"
},
"application/cnrp+xml": {
source: "iana",
compressible: true
},
"application/coap-eap": {
source: "iana"
},
"application/coap-group+json": {
source: "iana",
compressible: true
},
"application/coap-payload": {
source: "iana"
},
"application/commonground": {
source: "iana"
},
"application/concise-problem-details+cbor": {
source: "iana"
},
"application/conference-info+xml": {
source: "iana",
compressible: true
},
"application/cose": {
source: "iana"
},
"application/cose-key": {
source: "iana"
},
"application/cose-key-set": {
source: "iana"
},
"application/cose-x509": {
source: "iana"
},
"application/cpl+xml": {
source: "iana",
compressible: true,
extensions: ["cpl"]
},
"application/csrattrs": {
source: "iana"
},
"application/csta+xml": {
source: "iana",
compressible: true
},
"application/cstadata+xml": {
source: "iana",
compressible: true
},
"application/csvm+json": {
source: "iana",
compressible: true
},
"application/cu-seeme": {
source: "apache",
extensions: ["cu"]
},
"application/cwl": {
source: "iana",
extensions: ["cwl"]
},
"application/cwl+json": {
source: "iana",
compressible: true
},
"application/cwl+yaml": {
source: "iana"
},
"application/cwt": {
source: "iana"
},
"application/cybercash": {
source: "iana"
},
"application/dart": {
compressible: true
},
"application/dash+xml": {
source: "iana",
compressible: true,
extensions: ["mpd"]
},
"application/dash-patch+xml": {
source: "iana",
compressible: true,
extensions: ["mpp"]
},
"application/dashdelta": {
source: "iana"
},
"application/davmount+xml": {
source: "iana",
compressible: true,
extensions: ["davmount"]
},
"application/dca-rft": {
source: "iana"
},
"application/dcd": {
source: "iana"
},
"application/dec-dx": {
source: "iana"
},
"application/dialog-info+xml": {
source: "iana",
compressible: true
},
"application/dicom": {
source: "iana",
extensions: ["dcm"]
},
"application/dicom+json": {
source: "iana",
compressible: true
},
"application/dicom+xml": {
source: "iana",
compressible: true
},
"application/dii": {
source: "iana"
},
"application/dit": {
source: "iana"
},
"application/dns": {
source: "iana"
},
"application/dns+json": {
source: "iana",
compressible: true
},
"application/dns-message": {
source: "iana"
},
"application/docbook+xml": {
source: "apache",
compressible: true,
extensions: ["dbk"]
},
"application/dots+cbor": {
source: "iana"
},
"application/dpop+jwt": {
source: "iana"
},
"application/dskpp+xml": {
source: "iana",
compressible: true
},
"application/dssc+der": {
source: "iana",
extensions: ["dssc"]
},
"application/dssc+xml": {
source: "iana",
compressible: true,
extensions: ["xdssc"]
},
"application/dvcs": {
source: "iana"
},
"application/eat+cwt": {
source: "iana"
},
"application/eat+jwt": {
source: "iana"
},
"application/eat-bun+cbor": {
source: "iana"
},
"application/eat-bun+json": {
source: "iana",
compressible: true
},
"application/eat-ucs+cbor": {
source: "iana"
},
"application/eat-ucs+json": {
source: "iana",
compressible: true
},
"application/ecmascript": {
source: "apache",
compressible: true,
extensions: ["ecma"]
},
"application/edhoc+cbor-seq": {
source: "iana"
},
"application/edi-consent": {
source: "iana"
},
"application/edi-x12": {
source: "iana",
compressible: false
},
"application/edifact": {
source: "iana",
compressible: false
},
"application/efi": {
source: "iana"
},
"application/elm+json": {
source: "iana",
charset: "UTF-8",
compressible: true
},
"application/elm+xml": {
source: "iana",
compressible: true
},
"application/emergencycalldata.cap+xml": {
source: "iana",
charset: "UTF-8",
compressible: true
},
"application/emergencycalldata.comment+xml": {
source: "iana",
compressible: true
},
"application/emergencycalldata.control+xml": {
source: "iana",
compressible: true
},
"application/emergencycalldata.deviceinfo+xml": {
source: "iana",
compressible: true
},
"application/emergencycalldata.ecall.msd": {
source: "iana"
},
"application/emergencycalldata.legacyesn+json": {
source: "iana",
compressible: true
},
"application/emergencycalldata.providerinfo+xml": {
source: "iana",
compressible: true
},
"application/emergencycalldata.serviceinfo+xml": {
source: "iana",
compressible: true
},
"application/emergencycalldata.subscriberinfo+xml": {
source: "iana",
compressible: true
},
"application/emergencycalldata.veds+xml": {
source: "iana",
compressible: true
},
"application/emma+xml": {
source: "iana",
compressible: true,
extensions: ["emma"]
},
"application/emotionml+xml": {
source: "iana",
compressible: true,
extensions: ["emotionml"]
},
"application/encaprtp": {
source: "iana"
},
"application/entity-statement+jwt": {
source: "iana"
},
"application/epp+xml": {
source: "iana",
compressible: true
},
"application/epub+zip": {
source: "iana",
compressible: false,
extensions: ["epub"]
},
"application/eshop": {
source: "iana"
},
"application/exi": {
source: "iana",
extensions: ["exi"]
},
"application/expect-ct-report+json": {
source: "iana",
compressible: true
},
"application/express": {
source: "iana",
extensions: ["exp"]
},
"application/fastinfoset": {
source: "iana"
},
"application/fastsoap": {
source: "iana"
},
"application/fdf": {
source: "iana",
extensions: ["fdf"]
},
"application/fdt+xml": {
source: "iana",
compressible: true,
extensions: ["fdt"]
},
"application/fhir+json": {
source: "iana",
charset: "UTF-8",
compressible: true
},
"application/fhir+xml": {
source: "iana",
charset: "UTF-8",
compressible: true
},
"application/fido.trusted-apps+json": {
compressible: true
},
"application/fits": {
source: "iana"
},
"application/flexfec": {
source: "iana"
},
"application/font-sfnt": {
source: "iana"
},
"application/font-tdpfr": {
source: "iana",
extensions: ["pfr"]
},
"application/font-woff": {
source: "iana",
compressible: false
},
"application/framework-attributes+xml": {
source: "iana",
compressible: true
},
"application/geo+json": {
source: "iana",
compressible: true,
extensions: ["geojson"]
},
"application/geo+json-seq": {
source: "iana"
},
"application/geopackage+sqlite3": {
source: "iana"
},
"application/geopose+json": {
source: "iana",
compressible: true
},
"application/geoxacml+json": {
source: "iana",
compressible: true
},
"application/geoxacml+xml": {
source: "iana",
compressible: true
},
"application/gltf-buffer": {
source: "iana"
},
"application/gml+xml": {
source: "iana",
compressible: true,
extensions: ["gml"]
},
"application/gnap-binding-jws": {
source: "iana"
},
"application/gnap-binding-jwsd": {
source: "iana"
},
"application/gnap-binding-rotation-jws": {
source: "iana"
},
"application/gnap-binding-rotation-jwsd": {
source: "iana"
},
"application/gpx+xml": {
source: "apache",
compressible: true,
extensions: ["gpx"]
},
"application/grib": {
source: "iana"
},
"application/gxf": {
source: "apache",
extensions: ["gxf"]
},
"application/gzip": {
source: "iana",
compressible: false,
extensions: ["gz"]
},
"application/h224": {
source: "iana"
},
"application/held+xml": {
source: "iana",
compressible: true
},
"application/hjson": {
extensions: ["hjson"]
},
"application/hl7v2+xml": {
source: "iana",
charset: "UTF-8",
compressible: true
},
"application/http": {
source: "iana"
},
"application/hyperstudio": {
source: "iana",
extensions: ["stk"]
},
"application/ibe-key-request+xml": {
source: "iana",
compressible: true
},
"application/ibe-pkg-reply+xml": {
source: "iana",
compressible: true
},
"application/ibe-pp-data": {
source: "iana"
},
"application/iges": {
source: "iana"
},
"application/im-iscomposing+xml": {
source: "iana",
charset: "UTF-8",
compressible: true
},
"application/index": {
source: "iana"
},
"application/index.cmd": {
source: "iana"
},
"application/index.obj": {
source: "iana"
},
"application/index.response": {
source: "iana"
},
"application/index.vnd": {
source: "iana"
},
"application/inkml+xml": {
source: "iana",
compressible: true,
extensions: ["ink", "inkml"]
},
"application/iotp": {
source: "iana"
},
"application/ipfix": {
source: "iana",
extensions: ["ipfix"]
},
"application/ipp": {
source: "iana"
},
"application/isup": {
source: "iana"
},
"application/its+xml": {
source: "iana",
compressible: true,
extensions: ["its"]
},
"application/java-archive": {
source: "iana",
compressible: false,
extensions: ["jar", "war", "ear"]
},
"application/java-serialized-object": {
source: "apache",
compressible: false,
extensions: ["ser"]
},
"application/java-vm": {
source: "apache",
compressible: false,
extensions: ["class"]
},
"application/javascript": {
source: "apache",
charset: "UTF-8",
compressible: true,
extensions: ["js"]
},
"application/jf2feed+json": {
source: "iana",
compressible: true
},
"application/jose": {
source: "iana"
},
"application/jose+json": {
source: "iana",
compressible: true
},
"application/jrd+json": {
source: "iana",
compressible: true
},
"application/jscalendar+json": {
source: "iana",
compressible: true
},
"application/jscontact+json": {
source: "iana",
compressible: true
},
"application/json": {
source: "iana",
charset: "UTF-8",
compressible: true,
extensions: ["json", "map"]
},
"application/json-patch+json": {
source: "iana",
compressible: true
},
"application/json-seq": {
source: "iana"
},
"application/json5": {
extensions: ["json5"]
},
"application/jsonml+json": {
source: "apache",
compressible: true,
extensions: ["jsonml"]
},
"application/jsonpath": {
source: "iana"
},
"application/jwk+json": {
source: "iana",
compressible: true
},
"application/jwk-set+json": {
source: "iana",
compressible: true
},
"application/jwk-set+jwt": {
source: "iana"
},
"application/jwt": {
source: "iana"
},
"application/kpml-request+xml": {
source: "iana",
compressible: true
},
"application/kpml-response+xml": {
source: "iana",
compressible: true
},
"application/ld+json": {
source: "iana",
compressible: true,
extensions: ["jsonld"]
},
"application/lgr+xml": {
source: "iana",
compressible: true,
extensions: ["lgr"]
},
"application/link-format": {
source: "iana"
},
"application/linkset": {
source: "iana"
},
"application/linkset+json": {
source: "iana",
compressible: true
},
"application/load-control+xml": {
source: "iana",
compressible: true
},
"application/logout+jwt": {
source: "iana"
},
"application/lost+xml": {
source: "iana",
compressible: true,
extensions: ["lostxml"]
},
"application/lostsync+xml": {
source: "iana",
compressible: true
},
"application/lpf+zip": {
source: "iana",
compressible: false
},
"application/lxf": {
source: "iana"
},
"application/mac-binhex40": {
source: "iana",
extensions: ["hqx"]
},
"application/mac-compactpro": {
source: "apache",
extensions: ["cpt"]
},
"application/macwriteii": {
source: "iana"
},
"application/mads+xml": {
source: "iana",
compressible: true,
extensions: ["mads"]
},
"application/manifest+json": {
source: "iana",
charset: "UTF-8",
compressible: true,
extensions: ["webmanifest"]
},
"application/marc": {
source: "iana",
extensions: ["mrc"]
},
"application/marcxml+xml": {
source: "iana",
compressible: true,
extensions: ["mrcx"]
},
"application/mathematica": {
source: "iana",
extensions: ["ma", "nb", "mb"]
},
"application/mathml+xml": {
source: "iana",
compressible: true,
extensions: ["mathml"]
},
"application/mathml-content+xml": {
source: "iana",
compressible: true
},
"application/mathml-presentation+xml": {
source: "iana",
compressible: true
},
"application/mbms-associated-procedure-description+xml": {
source: "iana",
compressible: true
},
"application/mbms-deregister+xml": {
source: "iana",
compressible: true
},
"application/mbms-envelope+xml": {
source: "iana",
compressible: true
},
"application/mbms-msk+xml": {
source: "iana",
compressible: true
},
"application/mbms-msk-response+xml": {
source: "iana",
compressible: true
},
"application/mbms-protection-description+xml": {
source: "iana",
compressible: true
},
"application/mbms-reception-report+xml": {
source: "iana",
compressible: true
},
"application/mbms-register+xml": {
source: "iana",
compressible: true
},
"application/mbms-register-response+xml": {
source: "iana",
compressible: true
},
"application/mbms-schedule+xml": {
source: "iana",
compressible: true
},
"application/mbms-user-service-description+xml": {
source: "iana",
compressible: true
},
"application/mbox": {
source: "iana",
extensions: ["mbox"]
},
"application/media-policy-dataset+xml": {
source: "iana",
compressible: true,
extensions: ["mpf"]
},
"application/media_control+xml": {
source: "iana",
compressible: true
},
"application/mediaservercontrol+xml": {
source: "iana",
compressible: true,
extensions: ["mscml"]
},
"application/merge-patch+json": {
source: "iana",
compressible: true
},
"application/metalink+xml": {
source: "apache",
compressible: true,
extensions: ["metalink"]
},
"application/metalink4+xml": {
source: "iana",
compressible: true,
extensions: ["meta4"]
},
"application/mets+xml": {
source: "iana",
compressible: true,
extensions: ["mets"]
},
"application/mf4": {
source: "iana"
},
"application/mikey": {
source: "iana"
},
"application/mipc": {
source: "iana"
},
"application/missing-blocks+cbor-seq": {
source: "iana"
},
"application/mmt-aei+xml": {
source: "iana",
compressible: true,
extensions: ["maei"]
},
"application/mmt-usd+xml": {
source: "iana",
compressible: true,
extensions: ["musd"]
},
"application/mods+xml": {
source: "iana",
compressible: true,
extensions: ["mods"]
},
"application/moss-keys": {
source: "iana"
},
"application/moss-signature": {
source: "iana"
},
"application/mosskey-data": {
source: "iana"
},
"application/mosskey-request": {
source: "iana"
},
"application/mp21": {
source: "iana",
extensions: ["m21", "mp21"]
},
"application/mp4": {
source: "iana",
extensions: ["mp4", "mpg4", "mp4s", "m4p"]
},
"application/mpeg4-generic": {
source: "iana"
},
"application/mpeg4-iod": {
source: "iana"
},
"application/mpeg4-iod-xmt": {
source: "iana"
},
"application/mrb-consumer+xml": {
source: "iana",
compressible: true
},
"application/mrb-publish+xml": {
source: "iana",
compressible: true
},
"application/msc-ivr+xml": {
source: "iana",
charset: "UTF-8",
compressible: true
},
"application/msc-mixer+xml": {
source: "iana",
charset: "UTF-8",
compressible: true
},
"application/msix": {
compressible: false,
extensions: ["msix"]
},
"application/msixbundle": {
compressible: false,
extensions: ["msixbundle"]
},
"application/msword": {
source: "iana",
compressible: false,
extensions: ["doc", "dot"]
},
"application/mud+json": {
source: "iana",
compressible: true
},
"application/multipart-core": {
source: "iana"
},
"application/mxf": {
source: "iana",
extensions: ["mxf"]
},
"application/n-quads": {
source: "iana",
extensions: ["nq"]
},
"application/n-triples": {
source: "iana",
extensions: ["nt"]
},
"application/nasdata": {
source: "iana"
},
"application/news-checkgroups": {
source: "iana",
charset: "US-ASCII"
},
"application/news-groupinfo": {
source: "iana",
charset: "US-ASCII"
},
"application/news-transmission": {
source: "iana"
},
"application/nlsml+xml": {
source: "iana",
compressible: true
},
"application/node": {
source: "iana",
extensions: ["cjs"]
},
"application/nss": {
source: "iana"
},
"application/oauth-authz-req+jwt": {
source: "iana"
},
"application/oblivious-dns-message": {
source: "iana"
},
"application/ocsp-request": {
source: "iana"
},
"application/ocsp-response": {
source: "iana"
},
"application/octet-stream": {
source: "iana",
compressible: true,
extensions: ["bin", "dms", "lrf", "mar", "so", "dist", "distz", "pkg", "bpk", "dump", "elc", "deploy", "exe", "dll", "deb", "dmg", "iso", "img", "msi", "msp", "msm", "buffer"]
},
"application/oda": {
source: "iana",
extensions: ["oda"]
},
"application/odm+xml": {
source: "iana",
compressible: true
},
"application/odx": {
source: "iana"
},
"application/oebps-package+xml": {
source: "iana",
compressible: true,
extensions: ["opf"]
},
"application/ogg": {
source: "iana",
compressible: false,
extensions: ["ogx"]
},
"application/ohttp-keys": {
source: "iana"
},
"application/omdoc+xml": {
source: "apache",
compressible: true,
extensions: ["omdoc"]
},
"application/onenote": {
source: "apache",
extensions: ["onetoc", "onetoc2", "onetmp", "onepkg", "one", "onea"]
},
"application/opc-nodeset+xml": {
source: "iana",
compressible: true
},
"application/oscore": {
source: "iana"
},
"application/oxps": {
source: "iana",
extensions: ["oxps"]
},
"application/p21": {
source: "iana"
},
"application/p21+zip": {
source: "iana",
compressible: false
},
"application/p2p-overlay+xml": {
source: "iana",
compressible: true,
extensions: ["relo"]
},
"application/parityfec": {
source: "iana"
},
"application/passport": {
source: "iana"
},
"application/patch-ops-error+xml": {
source: "iana",
compressible: true,
extensions: ["xer"]
},
"application/pdf": {
source: "iana",
compressible: false,
extensions: ["pdf"]
},
"application/pdx": {
source: "iana"
},
"application/pem-certificate-chain": {
source: "iana"
},
"application/pgp-encrypted": {
source: "iana",
compressible: false,
extensions: ["pgp"]
},
"application/pgp-keys": {
source: "iana",
extensions: ["asc"]
},
"application/pgp-signature": {
source: "iana",
extensions: ["sig", "asc"]
},
"application/pics-rules": {
source: "apache",
extensions: ["prf"]
},
"application/pidf+xml": {
source: "iana",
charset: "UTF-8",
compressible: true
},
"application/pidf-diff+xml": {
source: "iana",
charset: "UTF-8",
compressible: true
},
"application/pkcs10": {
source: "iana",
extensions: ["p10"]
},
"application/pkcs12": {
source: "iana"
},
"application/pkcs7-mime": {
source: "iana",
extensions: ["p7m", "p7c"]
},
"application/pkcs7-signature": {
source: "iana",
extensions: ["p7s"]
},
"application/pkcs8": {
source: "iana",
extensions: ["p8"]
},
"application/pkcs8-encrypted": {
source: "iana"
},
"application/pkix-attr-cert": {
source: "iana",
extensions: ["ac"]
},
"application/pkix-cert": {
source: "iana",
extensions: ["cer"]
},
"application/pkix-crl": {
source: "iana",
extensions: ["crl"]
},
"application/pkix-pkipath": {
source: "iana",
extensions: ["pkipath"]
},
"application/pkixcmp": {
source: "iana",
extensions: ["pki"]
},
"application/pls+xml": {
source: "iana",
compressible: true,
extensions: ["pls"]
},
"application/poc-settings+xml": {
source: "iana",
charset: "UTF-8",
compressible: true
},
"application/postscript": {
source: "iana",
compressible: true,
extensions: ["ai", "eps", "ps"]
},
"application/ppsp-tracker+json": {
source: "iana",
compressible: true
},
"application/private-token-issuer-directory": {
source: "iana"
},
"application/private-token-request": {
source: "iana"
},
"application/private-token-response": {
source: "iana"
},
"application/problem+json": {
source: "iana",
compressible: true
},
"application/problem+xml": {
source: "iana",
compressible: true
},
"application/provenance+xml": {
source: "iana",
compressible: true,
extensions: ["provx"]
},
"application/provided-claims+jwt": {
source: "iana"
},
"application/prs.alvestrand.titrax-sheet": {
source: "iana"
},
"application/prs.cww": {
source: "iana",
extensions: ["cww"]
},
"application/prs.cyn": {
source: "iana",
charset: "7-BIT"
},
"application/prs.hpub+zip": {
source: "iana",
compressible: false
},
"application/prs.implied-document+xml": {
source: "iana",
compressible: true
},
"application/prs.implied-executable": {
source: "iana"
},
"application/prs.implied-object+json": {
source: "iana",
compressible: true
},
"application/prs.implied-object+json-seq": {
source: "iana"
},
"application/prs.implied-object+yaml": {
source: "iana"
},
"application/prs.implied-structure": {
source: "iana"
},
"application/prs.mayfile": {
source: "iana"
},
"application/prs.nprend": {
source: "iana"
},
"application/prs.plucker": {
source: "iana"
},
"application/prs.rdf-xml-crypt": {
source: "iana"
},
"application/prs.vcfbzip2": {
source: "iana"
},
"application/prs.xsf+xml": {
source: "iana",
compressible: true,
extensions: ["xsf"]
},
"application/pskc+xml": {
source: "iana",
compressible: true,
extensions: ["pskcxml"]
},
"application/pvd+json": {
source: "iana",
compressible: true
},
"application/qsig": {
source: "iana"
},
"application/raml+yaml": {
compressible: true,
extensions: ["raml"]
},
"application/raptorfec": {
source: "iana"
},
"application/rdap+json": {
source: "iana",
compressible: true
},
"application/rdf+xml": {
source: "iana",
compressible: true,
extensions: ["rdf", "owl"]
},
"application/reginfo+xml": {
source: "iana",
compressible: true,
extensions: ["rif"]
},
"application/relax-ng-compact-syntax": {
source: "iana",
extensions: ["rnc"]
},
"application/remote-printing": {
source: "apache"
},
"application/reputon+json": {
source: "iana",
compressible: true
},
"application/resolve-response+jwt": {
source: "iana"
},
"application/resource-lists+xml": {
source: "iana",
compressible: true,
extensions: ["rl"]
},
"application/resource-lists-diff+xml": {
source: "iana",
compressible: true,
extensions: ["rld"]
},
"application/rfc+xml": {
source: "iana",
compressible: true
},
"application/riscos": {
source: "iana"
},
"application/rlmi+xml": {
source: "iana",
compressible: true
},
"application/rls-services+xml": {
source: "iana",
compressible: true,
extensions: ["rs"]
},
"application/route-apd+xml": {
source: "iana",
compressible: true,
extensions: ["rapd"]
},
"application/route-s-tsid+xml": {
source: "iana",
compressible: true,
extensions: ["sls"]
},
"application/route-usd+xml": {
source: "iana",
compressible: true,
extensions: ["rusd"]
},
"application/rpki-checklist": {
source: "iana"
},
"application/rpki-ghostbusters": {
source: "iana",
extensions: ["gbr"]
},
"application/rpki-manifest": {
source: "iana",
extensions: ["mft"]
},
"application/rpki-publication": {
source: "iana"
},
"application/rpki-roa": {
source: "iana",
extensions: ["roa"]
},
"application/rpki-signed-tal": {
source: "iana"
},
"application/rpki-updown": {
source: "iana"
},
"application/rsd+xml": {
source: "apache",
compressible: true,
extensions: ["rsd"]
},
"application/rss+xml": {
source: "apache",
compressible: true,
extensions: ["rss"]
},
"application/rtf": {
source: "iana",
compressible: true,
extensions: ["rtf"]
},
"application/rtploopback": {
source: "iana"
},
"application/rtx": {
source: "iana"
},
"application/samlassertion+xml": {
source: "iana",
compressible: true
},
"application/samlmetadata+xml": {
source: "iana",
compressible: true
},
"application/sarif+json": {
source: "iana",
compressible: true
},
"application/sarif-external-properties+json": {
source: "iana",
compressible: true
},
"application/sbe": {
source: "iana"
},
"application/sbml+xml": {
source: "iana",
compressible: true,
extensions: ["sbml"]
},
"application/scaip+xml": {
source: "iana",
compressible: true
},
"application/scim+json": {
source: "iana",
compressible: true
},
"application/scvp-cv-request": {
source: "iana",
extensions: ["scq"]
},
"application/scvp-cv-response": {
source: "iana",
extensions: ["scs"]
},
"application/scvp-vp-request": {
source: "iana",
extensions: ["spq"]
},
"application/scvp-vp-response": {
source: "iana",
extensions: ["spp"]
},
"application/sdp": {
source: "iana",
extensions: ["sdp"]
},
"application/secevent+jwt": {
source: "iana"
},
"application/senml+cbor": {
source: "iana"
},
"application/senml+json": {
source: "iana",
compressible: true
},
"application/senml+xml": {
source: "iana",
compressible: true,
extensions: ["senmlx"]
},
"application/senml-etch+cbor": {
source: "iana"
},
"application/senml-etch+json": {
source: "iana",
compressible: true
},
"application/senml-exi": {
source: "iana"
},
"application/sensml+cbor": {
source: "iana"
},
"application/sensml+json": {
source: "iana",
compressible: true
},
"application/sensml+xml": {
source: "iana",
compressible: true,
extensions: ["sensmlx"]
},
"application/sensml-exi": {
source: "iana"
},
"application/sep+xml": {
source: "iana",
compressible: true
},
"application/sep-exi": {
source: "iana"
},
"application/session-info": {
source: "iana"
},
"application/set-payment": {
source: "iana"
},
"application/set-payment-initiation": {
source: "iana",
extensions: ["setpay"]
},
"application/set-registration": {
source: "iana"
},
"application/set-registration-initiation": {
source: "iana",
extensions: ["setreg"]
},
"application/sgml": {
source: "iana"
},
"application/sgml-open-catalog": {
source: "iana"
},
"application/shf+xml": {
source: "iana",
compressible: true,
extensions: ["shf"]
},
"application/sieve": {
source: "iana",
extensions: ["siv", "sieve"]
},
"application/simple-filter+xml": {
source: "iana",
compressible: true
},
"application/simple-message-summary": {
source: "iana"
},
"application/simplesymbolcontainer": {
source: "iana"
},
"application/sipc": {
source: "iana"
},
"application/slate": {
source: "iana"
},
"application/smil": {
source: "apache"
},
"application/smil+xml": {
source: "iana",
compressible: true,
extensions: ["smi", "smil"]
},
"application/smpte336m": {
source: "iana"
},
"application/soap+fastinfoset": {
source: "iana"
},
"application/soap+xml": {
source: "iana",
compressible: true
},
"application/sparql-query": {
source: "iana",
extensions: ["rq"]
},
"application/sparql-results+xml": {
source: "iana",
compressible: true,
extensions: ["srx"]
},
"application/spdx+json": {
source: "iana",
compressible: true
},
"application/spirits-event+xml": {
source: "iana",
compressible: true
},
"application/sql": {
source: "iana",
extensions: ["sql"]
},
"application/srgs": {
source: "iana",
extensions: ["gram"]
},
"application/srgs+xml": {
source: "iana",
compressible: true,
extensions: ["grxml"]
},
"application/sru+xml": {
source: "iana",
compressible: true,
extensions: ["sru"]
},
"application/ssdl+xml": {
source: "apache",
compressible: true,
extensions: ["ssdl"]
},
"application/sslkeylogfile": {
source: "iana"
},
"application/ssml+xml": {
source: "iana",
compressible: true,
extensions: ["ssml"]
},
"application/st2110-41": {
source: "iana"
},
"application/stix+json": {
source: "iana",
compressible: true
},
"application/stratum": {
source: "iana"
},
"application/swid+cbor": {
source: "iana"
},
"application/swid+xml": {
source: "iana",
compressible: true,
extensions: ["swidtag"]
},
"application/tamp-apex-update": {
source: "iana"
},
"application/tamp-apex-update-confirm": {
source: "iana"
},
"application/tamp-community-update": {
source: "iana"
},
"application/tamp-community-update-confirm": {
source: "iana"
},
"application/tamp-error": {
source: "iana"
},
"application/tamp-sequence-adjust": {
source: "iana"
},
"application/tamp-sequence-adjust-confirm": {
source: "iana"
},
"application/tamp-status-query": {
source: "iana"
},
"application/tamp-status-response": {
source: "iana"
},
"application/tamp-update": {
source: "iana"
},
"application/tamp-update-confirm": {
source: "iana"
},
"application/tar": {
compressible: true
},
"application/taxii+json": {
source: "iana",
compressible: true
},
"application/td+json": {
source: "iana",
compressible: true
},
"application/tei+xml": {
source: "iana",
compressible: true,
extensions: ["tei", "teicorpus"]
},
"application/tetra_isi": {
source: "iana"
},
"application/thraud+xml": {
source: "iana",
compressible: true,
extensions: ["tfi"]
},
"application/timestamp-query": {
source: "iana"
},
"application/timestamp-reply": {
source: "iana"
},
"application/timestamped-data": {
source: "iana",
extensions: ["tsd"]
},
"application/tlsrpt+gzip": {
source: "iana"
},
"application/tlsrpt+json": {
source: "iana",
compressible: true
},
"application/tm+json": {
source: "iana",
compressible: true
},
"application/tnauthlist": {
source: "iana"
},
"application/toc+cbor": {
source: "iana"
},
"application/token-introspection+jwt": {
source: "iana"
},
"application/toml": {
source: "iana",
compressible: true,
extensions: ["toml"]
},
"application/trickle-ice-sdpfrag": {
source: "iana"
},
"application/trig": {
source: "iana",
extensions: ["trig"]
},
"application/trust-chain+json": {
source: "iana",
compressible: true
},
"application/trust-mark+jwt": {
source: "iana"
},
"application/trust-mark-delegation+jwt": {
source: "iana"
},
"application/ttml+xml": {
source: "iana",
compressible: true,
extensions: ["ttml"]
},
"application/tve-trigger": {
source: "iana"
},
"application/tzif": {
source: "iana"
},
"application/tzif-leap": {
source: "iana"
},
"application/ubjson": {
compressible: false,
extensions: ["ubj"]
},
"application/uccs+cbor": {
source: "iana"
},
"application/ujcs+json": {
source: "iana",
compressible: true
},
"application/ulpfec": {
source: "iana"
},
"application/urc-grpsheet+xml": {
source: "iana",
compressible: true
},
"application/urc-ressheet+xml": {
source: "iana",
compressible: true,
extensions: ["rsheet"]
},
"application/urc-targetdesc+xml": {
source: "iana",
compressible: true,
extensions: ["td"]
},
"application/urc-uisocketdesc+xml": {
source: "iana",
compressible: true
},
"application/vc": {
source: "iana"
},
"application/vc+cose": {
source: "iana"
},
"application/vc+jwt": {
source: "iana"
},
"application/vcard+json": {
source: "iana",
compressible: true
},
"application/vcard+xml": {
source: "iana",
compressible: true
},
"application/vemmi": {
source: "iana"
},
"application/vividence.scriptfile": {
source: "apache"
},
"application/vnd.1000minds.decision-model+xml": {
source: "iana",
compressible: true,
extensions: ["1km"]
},
"application/vnd.1ob": {
source: "iana"
},
"application/vnd.3gpp-prose+xml": {
source: "iana",
compressible: true
},
"application/vnd.3gpp-prose-pc3a+xml": {
source: "iana",
compressible: true
},
"application/vnd.3gpp-prose-pc3ach+xml": {
source: "iana",
compressible: true
},
"application/vnd.3gpp-prose-pc3ch+xml": {
source: "iana",
compressible: true
},
"application/vnd.3gpp-prose-pc8+xml": {
source: "iana",
compressible: true
},
"application/vnd.3gpp-v2x-local-service-information": {
source: "iana"
},
"application/vnd.3gpp.5gnas": {
source: "iana"
},
"application/vnd.3gpp.5gsa2x": {
source: "iana"
},
"application/vnd.3gpp.5gsa2x-local-service-information": {
source: "iana"
},
"application/vnd.3gpp.5gsv2x": {
source: "iana"
},
"application/vnd.3gpp.5gsv2x-local-service-information": {
source: "iana"
},
"application/vnd.3gpp.access-transfer-events+xml": {
source: "iana",
compressible: true
},
"application/vnd.3gpp.bsf+xml": {
source: "iana",
compressible: true
},
"application/vnd.3gpp.crs+xml": {
source: "iana",
compressible: true
},
"application/vnd.3gpp.current-location-discovery+xml": {
source: "iana",
compressible: true
},
"application/vnd.3gpp.gmop+xml": {
source: "iana",
compressible: true
},
"application/vnd.3gpp.gtpc": {
source: "iana"
},
"application/vnd.3gpp.interworking-data": {
source: "iana"
},
"application/vnd.3gpp.lpp": {
source: "iana"
},
"application/vnd.3gpp.mc-signalling-ear": {
source: "iana"
},
"application/vnd.3gpp.mcdata-affiliation-command+xml": {
source: "iana",
compressible: true
},
"application/vnd.3gpp.mcdata-info+xml": {
source: "iana",
compressible: true
},
"application/vnd.3gpp.mcdata-msgstore-ctrl-request+xml": {
source: "iana",
compressible: true
},
"application/vnd.3gpp.mcdata-payload": {
source: "iana"
},
"application/vnd.3gpp.mcdata-regroup+xml": {
source: "iana",
compressible: true
},
"application/vnd.3gpp.mcdata-service-config+xml": {
source: "iana",
compressible: true
},
"application/vnd.3gpp.mcdata-signalling": {
source: "iana"
},
"application/vnd.3gpp.mcdata-ue-config+xml": {
source: "iana",
compressible: true
},
"application/vnd.3gpp.mcdata-user-profile+xml": {
source: "iana",
compressible: true
},
"application/vnd.3gpp.mcptt-affiliation-command+xml": {
source: "iana",
compressible: true
},
"application/vnd.3gpp.mcptt-floor-request+xml": {
source: "iana",
compressible: true
},
"application/vnd.3gpp.mcptt-info+xml": {
source: "iana",
compressible: true
},
"application/vnd.3gpp.mcptt-location-info+xml": {
source: "iana",
compressible: true
},
"application/vnd.3gpp.mcptt-mbms-usage-info+xml": {
source: "iana",
compressible: true
},
"application/vnd.3gpp.mcptt-regroup+xml": {
source: "iana",
compressible: true
},
"application/vnd.3gpp.mcptt-service-config+xml": {
source: "iana",
compressible: true
},
"application/vnd.3gpp.mcptt-signed+xml": {
source: "iana",
compressible: true
},
"application/vnd.3gpp.mcptt-ue-config+xml": {
source: "iana",
compressible: true
},
"application/vnd.3gpp.mcptt-ue-init-config+xml": {
source: "iana",
compressible: true
},
"application/vnd.3gpp.mcptt-user-profile+xml": {
source: "iana",
compressible: true
},
"application/vnd.3gpp.mcvideo-affiliation-command+xml": {
source: "iana",
compressible: true
},
"application/vnd.3gpp.mcvideo-info+xml": {
source: "iana",
compressible: true
},
"application/vnd.3gpp.mcvideo-location-info+xml": {
source: "iana",
compressible: true
},
"application/vnd.3gpp.mcvideo-mbms-usage-info+xml": {
source: "iana",
compressible: true
},
"application/vnd.3gpp.mcvideo-regroup+xml": {
source: "iana",
compressible: true
},
"application/vnd.3gpp.mcvideo-service-config+xml": {
source: "iana",
compressible: true
},
"application/vnd.3gpp.mcvideo-transmission-request+xml": {
source: "iana",
compressible: true
},
"application/vnd.3gpp.mcvideo-ue-config+xml": {
source: "iana",
compressible: true
},
"application/vnd.3gpp.mcvideo-user-profile+xml": {
source: "iana",
compressible: true
},
"application/vnd.3gpp.mid-call+xml": {
source: "iana",
compressible: true
},
"application/vnd.3gpp.ngap": {
source: "iana"
},
"application/vnd.3gpp.pfcp": {
source: "iana"
},
"application/vnd.3gpp.pic-bw-large": {
source: "iana",
extensions: ["plb"]
},
"application/vnd.3gpp.pic-bw-small": {
source: "iana",
extensions: ["psb"]
},
"application/vnd.3gpp.pic-bw-var": {
source: "iana",
extensions: ["pvb"]
},
"application/vnd.3gpp.pinapp-info+xml": {
source: "iana",
compressible: true
},
"application/vnd.3gpp.s1ap": {
source: "iana"
},
"application/vnd.3gpp.seal-group-doc+xml": {
source: "iana",
compressible: true
},
"application/vnd.3gpp.seal-info+xml": {
source: "iana",
compressible: true
},
"application/vnd.3gpp.seal-location-info+xml": {
source: "iana",
compressible: true
},
"application/vnd.3gpp.seal-mbms-usage-info+xml": {
source: "iana",
compressible: true
},
"application/vnd.3gpp.seal-network-qos-management-info+xml": {
source: "iana",
compressible: true
},
"application/vnd.3gpp.seal-ue-config-info+xml": {
source: "iana",
compressible: true
},
"application/vnd.3gpp.seal-unicast-info+xml": {
source: "iana",
compressible: true
},
"application/vnd.3gpp.seal-user-profile-info+xml": {
source: "iana",
compressible: true
},
"application/vnd.3gpp.sms": {
source: "iana"
},
"application/vnd.3gpp.sms+xml": {
source: "iana",
compressible: true
},
"application/vnd.3gpp.srvcc-ext+xml": {
source: "iana",
compressible: true
},
"application/vnd.3gpp.srvcc-info+xml": {
source: "iana",
compressible: true
},
"application/vnd.3gpp.state-and-event-info+xml": {
source: "iana",
compressible: true
},
"application/vnd.3gpp.ussd+xml": {
source: "iana",
compressible: true
},
"application/vnd.3gpp.v2x": {
source: "iana"
},
"application/vnd.3gpp.vae-info+xml": {
source: "iana",
compressible: true
},
"application/vnd.3gpp2.bcmcsinfo+xml": {
source: "iana",
compressible: true
},
"application/vnd.3gpp2.sms": {
source: "iana"
},
"application/vnd.3gpp2.tcap": {
source: "iana",
extensions: ["tcap"]
},
"application/vnd.3lightssoftware.imagescal": {
source: "iana"
},
"application/vnd.3m.post-it-notes": {
source: "iana",
extensions: ["pwn"]
},
"application/vnd.accpac.simply.aso": {
source: "iana",
extensions: ["aso"]
},
"application/vnd.accpac.simply.imp": {
source: "iana",
extensions: ["imp"]
},
"application/vnd.acm.addressxfer+json": {
source: "iana",
compressible: true
},
"application/vnd.acm.chatbot+json": {
source: "iana",
compressible: true
},
"application/vnd.acucobol": {
source: "iana",
extensions: ["acu"]
},
"application/vnd.acucorp": {
source: "iana",
extensions: ["atc", "acutc"]
},
"application/vnd.adobe.air-application-installer-package+zip": {
source: "apache",
compressible: false,
extensions: ["air"]
},
"application/vnd.adobe.flash.movie": {
source: "iana"
},
"application/vnd.adobe.formscentral.fcdt": {
source: "iana",
extensions: ["fcdt"]
},
"application/vnd.adobe.fxp": {
source: "iana",
extensions: ["fxp", "fxpl"]
},
"application/vnd.adobe.partial-upload": {
source: "iana"
},
"application/vnd.adobe.xdp+xml": {
source: "iana",
compressible: true,
extensions: ["xdp"]
},
"application/vnd.adobe.xfdf": {
source: "apache",
extensions: ["xfdf"]
},
"application/vnd.aether.imp": {
source: "iana"
},
"application/vnd.afpc.afplinedata": {
source: "iana"
},
"application/vnd.afpc.afplinedata-pagedef": {
source: "iana"
},
"application/vnd.afpc.cmoca-cmresource": {
source: "iana"
},
"application/vnd.afpc.foca-charset": {
source: "iana"
},
"application/vnd.afpc.foca-codedfont": {
source: "iana"
},
"application/vnd.afpc.foca-codepage": {
source: "iana"
},
"application/vnd.afpc.modca": {
source: "iana"
},
"application/vnd.afpc.modca-cmtable": {
source: "iana"
},
"application/vnd.afpc.modca-formdef": {
source: "iana"
},
"application/vnd.afpc.modca-mediummap": {
source: "iana"
},
"application/vnd.afpc.modca-objectcontainer": {
source: "iana"
},
"application/vnd.afpc.modca-overlay": {
source: "iana"
},
"application/vnd.afpc.modca-pagesegment": {
source: "iana"
},
"application/vnd.age": {
source: "iana",
extensions: ["age"]
},
"application/vnd.ah-barcode": {
source: "apache"
},
"application/vnd.ahead.space": {
source: "iana",
extensions: ["ahead"]
},
"application/vnd.airzip.filesecure.azf": {
source: "iana",
extensions: ["azf"]
},
"application/vnd.airzip.filesecure.azs": {
source: "iana",
extensions: ["azs"]
},
"application/vnd.amadeus+json": {
source: "iana",
compressible: true
},
"application/vnd.amazon.ebook": {
source: "apache",
extensions: ["azw"]
},
"application/vnd.amazon.mobi8-ebook": {
source: "iana"
},
"application/vnd.americandynamics.acc": {
source: "iana",
extensions: ["acc"]
},
"application/vnd.amiga.ami": {
source: "iana",
extensions: ["ami"]
},
"application/vnd.amundsen.maze+xml": {
source: "iana",
compressible: true
},
"application/vnd.android.ota": {
source: "iana"
},
"application/vnd.android.package-archive": {
source: "apache",
compressible: false,
extensions: ["apk"]
},
"application/vnd.anki": {
source: "iana"
},
"application/vnd.anser-web-certificate-issue-initiation": {
source: "iana",
extensions: ["cii"]
},
"application/vnd.anser-web-funds-transfer-initiation": {
source: "apache",
extensions: ["fti"]
},
"application/vnd.antix.game-component": {
source: "iana",
extensions: ["atx"]
},
"application/vnd.apache.arrow.file": {
source: "iana"
},
"application/vnd.apache.arrow.stream": {
source: "iana"
},
"application/vnd.apache.parquet": {
source: "iana"
},
"application/vnd.apache.thrift.binary": {
source: "iana"
},
"application/vnd.apache.thrift.compact": {
source: "iana"
},
"application/vnd.apache.thrift.json": {
source: "iana"
},
"application/vnd.apexlang": {
source: "iana"
},
"application/vnd.api+json": {
source: "iana",
compressible: true
},
"application/vnd.aplextor.warrp+json": {
source: "iana",
compressible: true
},
"application/vnd.apothekende.reservation+json": {
source: "iana",
compressible: true
},
"application/vnd.apple.installer+xml": {
source: "iana",
compressible: true,
extensions: ["mpkg"]
},
"application/vnd.apple.keynote": {
source: "iana",
extensions: ["key"]
},
"application/vnd.apple.mpegurl": {
source: "iana",
extensions: ["m3u8"]
},
"application/vnd.apple.numbers": {
source: "iana",
extensions: ["numbers"]
},
"application/vnd.apple.pages": {
source: "iana",
extensions: ["pages"]
},
"application/vnd.apple.pkpass": {
compressible: false,
extensions: ["pkpass"]
},
"application/vnd.arastra.swi": {
source: "apache"
},
"application/vnd.aristanetworks.swi": {
source: "iana",
extensions: ["swi"]
},
"application/vnd.artisan+json": {
source: "iana",
compressible: true
},
"application/vnd.artsquare": {
source: "iana"
},
"application/vnd.astraea-software.iota": {
source: "iana",
extensions: ["iota"]
},
"application/vnd.audiograph": {
source: "iana",
extensions: ["aep"]
},
"application/vnd.autodesk.fbx": {
extensions: ["fbx"]
},
"application/vnd.autopackage": {
source: "iana"
},
"application/vnd.avalon+json": {
source: "iana",
compressible: true
},
"application/vnd.avistar+xml": {
source: "iana",
compressible: true
},
"application/vnd.balsamiq.bmml+xml": {
source: "iana",
compressible: true,
extensions: ["bmml"]
},
"application/vnd.balsamiq.bmpr": {
source: "iana"
},
"application/vnd.banana-accounting": {
source: "iana"
},
"application/vnd.bbf.usp.error": {
source: "iana"
},
"application/vnd.bbf.usp.msg": {
source: "iana"
},
"application/vnd.bbf.usp.msg+json": {
source: "iana",
compressible: true
},
"application/vnd.bekitzur-stech+json": {
source: "iana",
compressible: true
},
"application/vnd.belightsoft.lhzd+zip": {
source: "iana",
compressible: false
},
"application/vnd.belightsoft.lhzl+zip": {
source: "iana",
compressible: false
},
"application/vnd.bint.med-content": {
source: "iana"
},
"application/vnd.biopax.rdf+xml": {
source: "iana",
compressible: true
},
"application/vnd.blink-idb-value-wrapper": {
source: "iana"
},
"application/vnd.blueice.multipass": {
source: "iana",
extensions: ["mpm"]
},
"application/vnd.bluetooth.ep.oob": {
source: "iana"
},
"application/vnd.bluetooth.le.oob": {
source: "iana"
},
"application/vnd.bmi": {
source: "iana",
extensions: ["bmi"]
},
"application/vnd.bpf": {
source: "iana"
},
"application/vnd.bpf3": {
source: "iana"
},
"application/vnd.businessobjects": {
source: "iana",
extensions: ["rep"]
},
"application/vnd.byu.uapi+json": {
source: "iana",
compressible: true
},
"application/vnd.bzip3": {
source: "iana"
},
"application/vnd.c3voc.schedule+xml": {
source: "iana",
compressible: true
},
"application/vnd.cab-jscript": {
source: "iana"
},
"application/vnd.canon-cpdl": {
source: "iana"
},
"application/vnd.canon-lips": {
source: "iana"
},
"application/vnd.capasystems-pg+json": {
source: "iana",
compressible: true
},
"application/vnd.cendio.thinlinc.clientconf": {
source: "iana"
},
"application/vnd.century-systems.tcp_stream": {
source: "iana"
},
"application/vnd.chemdraw+xml": {
source: "iana",
compressible: true,
extensions: ["cdxml"]
},
"application/vnd.chess-pgn": {
source: "iana"
},
"application/vnd.chipnuts.karaoke-mmd": {
source: "iana",
extensions: ["mmd"]
},
"application/vnd.ciedi": {
source: "iana"
},
"application/vnd.cinderella": {
source: "iana",
extensions: ["cdy"]
},
"application/vnd.cirpack.isdn-ext": {
source: "iana"
},
"application/vnd.citationstyles.style+xml": {
source: "iana",
compressible: true,
extensions: ["csl"]
},
"application/vnd.claymore": {
source: "iana",
extensions: ["cla"]
},
"application/vnd.cloanto.rp9": {
source: "iana",
extensions: ["rp9"]
},
"application/vnd.clonk.c4group": {
source: "iana",
extensions: ["c4g", "c4d", "c4f", "c4p", "c4u"]
},
"application/vnd.cluetrust.cartomobile-config": {
source: "iana",
extensions: ["c11amc"]
},
"application/vnd.cluetrust.cartomobile-config-pkg": {
source: "iana",
extensions: ["c11amz"]
},
"application/vnd.cncf.helm.chart.content.v1.tar+gzip": {
source: "iana"
},
"application/vnd.cncf.helm.chart.provenance.v1.prov": {
source: "iana"
},
"application/vnd.cncf.helm.config.v1+json": {
source: "iana",
compressible: true
},
"application/vnd.coffeescript": {
source: "iana"
},
"application/vnd.collabio.xodocuments.document": {
source: "iana"
},
"application/vnd.collabio.xodocuments.document-template": {
source: "iana"
},
"application/vnd.collabio.xodocuments.presentation": {
source: "iana"
},
"application/vnd.collabio.xodocuments.presentation-template": {
source: "iana"
},
"application/vnd.collabio.xodocuments.spreadsheet": {
source: "iana"
},
"application/vnd.collabio.xodocuments.spreadsheet-template": {
source: "iana"
},
"application/vnd.collection+json": {
source: "iana",
compressible: true
},
"application/vnd.collection.doc+json": {
source: "iana",
compressible: true
},
"application/vnd.collection.next+json": {
source: "iana",
compressible: true
},
"application/vnd.comicbook+zip": {
source: "iana",
compressible: false
},
"application/vnd.comicbook-rar": {
source: "iana"
},
"application/vnd.commerce-battelle": {
source: "iana"
},
"application/vnd.commonspace": {
source: "iana",
extensions: ["csp"]
},
"application/vnd.contact.cmsg": {
source: "iana",
extensions: ["cdbcmsg"]
},
"application/vnd.coreos.ignition+json": {
source: "iana",
compressible: true
},
"application/vnd.cosmocaller": {
source: "iana",
extensions: ["cmc"]
},
"application/vnd.crick.clicker": {
source: "iana",
extensions: ["clkx"]
},
"application/vnd.crick.clicker.keyboard": {
source: "iana",
extensions: ["clkk"]
},
"application/vnd.crick.clicker.palette": {
source: "iana",
extensions: ["clkp"]
},
"application/vnd.crick.clicker.template": {
source: "iana",
extensions: ["clkt"]
},
"application/vnd.crick.clicker.wordbank": {
source: "iana",
extensions: ["clkw"]
},
"application/vnd.criticaltools.wbs+xml": {
source: "iana",
compressible: true,
extensions: ["wbs"]
},
"application/vnd.cryptii.pipe+json": {
source: "iana",
compressible: true
},
"application/vnd.crypto-shade-file": {
source: "iana"
},
"application/vnd.cryptomator.encrypted": {
source: "iana"
},
"application/vnd.cryptomator.vault": {
source: "iana"
},
"application/vnd.ctc-posml": {
source: "iana",
extensions: ["pml"]
},
"application/vnd.ctct.ws+xml": {
source: "iana",
compressible: true
},
"application/vnd.cups-pdf": {
source: "iana"
},
"application/vnd.cups-postscript": {
source: "iana"
},
"application/vnd.cups-ppd": {
source: "iana",
extensions: ["ppd"]
},
"application/vnd.cups-raster": {
source: "iana"
},
"application/vnd.cups-raw": {
source: "iana"
},
"application/vnd.curl": {
source: "iana"
},
"application/vnd.curl.car": {
source: "apache",
extensions: ["car"]
},
"application/vnd.curl.pcurl": {
source: "apache",
extensions: ["pcurl"]
},
"application/vnd.cyan.dean.root+xml": {
source: "iana",
compressible: true
},
"application/vnd.cybank": {
source: "iana"
},
"application/vnd.cyclonedx+json": {
source: "iana",
compressible: true
},
"application/vnd.cyclonedx+xml": {
source: "iana",
compressible: true
},
"application/vnd.d2l.coursepackage1p0+zip": {
source: "iana",
compressible: false
},
"application/vnd.d3m-dataset": {
source: "iana"
},
"application/vnd.d3m-problem": {
source: "iana"
},
"application/vnd.dart": {
source: "iana",
compressible: true,
extensions: ["dart"]
},
"application/vnd.data-vision.rdz": {
source: "iana",
extensions: ["rdz"]
},
"application/vnd.datalog": {
source: "iana"
},
"application/vnd.datapackage+json": {
source: "iana",
compressible: true
},
"application/vnd.dataresource+json": {
source: "iana",
compressible: true
},
"application/vnd.dbf": {
source: "iana",
extensions: ["dbf"]
},
"application/vnd.dcmp+xml": {
source: "iana",
compressible: true,
extensions: ["dcmp"]
},
"application/vnd.debian.binary-package": {
source: "iana"
},
"application/vnd.dece.data": {
source: "iana",
extensions: ["uvf", "uvvf", "uvd", "uvvd"]
},
"application/vnd.dece.ttml+xml": {
source: "iana",
compressible: true,
extensions: ["uvt", "uvvt"]
},
"application/vnd.dece.unspecified": {
source: "iana",
extensions: ["uvx", "uvvx"]
},
"application/vnd.dece.zip": {
source: "iana",
extensions: ["uvz", "uvvz"]
},
"application/vnd.denovo.fcselayout-link": {
source: "iana",
extensions: ["fe_launch"]
},
"application/vnd.desmume.movie": {
source: "iana"
},
"application/vnd.dir-bi.plate-dl-nosuffix": {
source: "iana"
},
"application/vnd.dm.delegation+xml": {
source: "iana",
compressible: true
},
"application/vnd.dna": {
source: "iana",
extensions: ["dna"]
},
"application/vnd.document+json": {
source: "iana",
compressible: true
},
"application/vnd.dolby.mlp": {
source: "apache",
extensions: ["mlp"]
},
"application/vnd.dolby.mobile.1": {
source: "iana"
},
"application/vnd.dolby.mobile.2": {
source: "iana"
},
"application/vnd.doremir.scorecloud-binary-document": {
source: "iana"
},
"application/vnd.dpgraph": {
source: "iana",
extensions: ["dpg"]
},
"application/vnd.dreamfactory": {
source: "iana",
extensions: ["dfac"]
},
"application/vnd.drive+json": {
source: "iana",
compressible: true
},
"application/vnd.ds-keypoint": {
source: "apache",
extensions: ["kpxx"]
},
"application/vnd.dtg.local": {
source: "iana"
},
"application/vnd.dtg.local.flash": {
source: "iana"
},
"application/vnd.dtg.local.html": {
source: "iana"
},
"application/vnd.dvb.ait": {
source: "iana",
extensions: ["ait"]
},
"application/vnd.dvb.dvbisl+xml": {
source: "iana",
compressible: true
},
"application/vnd.dvb.dvbj": {
source: "iana"
},
"application/vnd.dvb.esgcontainer": {
source: "iana"
},
"application/vnd.dvb.ipdcdftnotifaccess": {
source: "iana"
},
"application/vnd.dvb.ipdcesgaccess": {
source: "iana"
},
"application/vnd.dvb.ipdcesgaccess2": {
source: "iana"
},
"application/vnd.dvb.ipdcesgpdd": {
source: "iana"
},
"application/vnd.dvb.ipdcroaming": {
source: "iana"
},
"application/vnd.dvb.iptv.alfec-base": {
source: "iana"
},
"application/vnd.dvb.iptv.alfec-enhancement": {
source: "iana"
},
"application/vnd.dvb.notif-aggregate-root+xml": {
source: "iana",
compressible: true
},
"application/vnd.dvb.notif-container+xml": {
source: "iana",
compressible: true
},
"application/vnd.dvb.notif-generic+xml": {
source: "iana",
compressible: true
},
"application/vnd.dvb.notif-ia-msglist+xml": {
source: "iana",
compressible: true
},
"application/vnd.dvb.notif-ia-registration-request+xml": {
source: "iana",
compressible: true
},
"application/vnd.dvb.notif-ia-registration-response+xml": {
source: "iana",
compressible: true
},
"application/vnd.dvb.notif-init+xml": {
source: "iana",
compressible: true
},
"application/vnd.dvb.pfr": {
source: "iana"
},
"application/vnd.dvb.service": {
source: "iana",
extensions: ["svc"]
},
"application/vnd.dxr": {
source: "iana"
},
"application/vnd.dynageo": {
source: "iana",
extensions: ["geo"]
},
"application/vnd.dzr": {
source: "iana"
},
"application/vnd.easykaraoke.cdgdownload": {
source: "iana"
},
"application/vnd.ecdis-update": {
source: "iana"
},
"application/vnd.ecip.rlp": {
source: "iana"
},
"application/vnd.eclipse.ditto+json": {
source: "iana",
compressible: true
},
"application/vnd.ecowin.chart": {
source: "iana",
extensions: ["mag"]
},
"application/vnd.ecowin.filerequest": {
source: "iana"
},
"application/vnd.ecowin.fileupdate": {
source: "iana"
},
"application/vnd.ecowin.series": {
source: "iana"
},
"application/vnd.ecowin.seriesrequest": {
source: "iana"
},
"application/vnd.ecowin.seriesupdate": {
source: "iana"
},
"application/vnd.efi.img": {
source: "iana"
},
"application/vnd.efi.iso": {
source: "iana"
},
"application/vnd.eln+zip": {
source: "iana",
compressible: false
},
"application/vnd.emclient.accessrequest+xml": {
source: "iana",
compressible: true
},
"application/vnd.enliven": {
source: "iana",
extensions: ["nml"]
},
"application/vnd.enphase.envoy": {
source: "iana"
},
"application/vnd.eprints.data+xml": {
source: "iana",
compressible: true
},
"application/vnd.epson.esf": {
source: "iana",
extensions: ["esf"]
},
"application/vnd.epson.msf": {
source: "iana",
extensions: ["msf"]
},
"application/vnd.epson.quickanime": {
source: "iana",
extensions: ["qam"]
},
"application/vnd.epson.salt": {
source: "iana",
extensions: ["slt"]
},
"application/vnd.epson.ssf": {
source: "iana",
extensions: ["ssf"]
},
"application/vnd.ericsson.quickcall": {
source: "iana"
},
"application/vnd.erofs": {
source: "iana"
},
"application/vnd.espass-espass+zip": {
source: "iana",
compressible: false
},
"application/vnd.eszigno3+xml": {
source: "iana",
compressible: true,
extensions: ["es3", "et3"]
},
"application/vnd.etsi.aoc+xml": {
source: "iana",
compressible: true
},
"application/vnd.etsi.asic-e+zip": {
source: "iana",
compressible: false
},
"application/vnd.etsi.asic-s+zip": {
source: "iana",
compressible: false
},
"application/vnd.etsi.cug+xml": {
source: "iana",
compressible: true
},
"application/vnd.etsi.iptvcommand+xml": {
source: "iana",
compressible: true
},
"application/vnd.etsi.iptvdiscovery+xml": {
source: "iana",
compressible: true
},
"application/vnd.etsi.iptvprofile+xml": {
source: "iana",
compressible: true
},
"application/vnd.etsi.iptvsad-bc+xml": {
source: "iana",
compressible: true
},
"application/vnd.etsi.iptvsad-cod+xml": {
source: "iana",
compressible: true
},
"application/vnd.etsi.iptvsad-npvr+xml": {
source: "iana",
compressible: true
},
"application/vnd.etsi.iptvservice+xml": {
source: "iana",
compressible: true
},
"application/vnd.etsi.iptvsync+xml": {
source: "iana",
compressible: true
},
"application/vnd.etsi.iptvueprofile+xml": {
source: "iana",
compressible: true
},
"application/vnd.etsi.mcid+xml": {
source: "iana",
compressible: true
},
"application/vnd.etsi.mheg5": {
source: "iana"
},
"application/vnd.etsi.overload-control-policy-dataset+xml": {
source: "iana",
compressible: true
},
"application/vnd.etsi.pstn+xml": {
source: "iana",
compressible: true
},
"application/vnd.etsi.sci+xml": {
source: "iana",
compressible: true
},
"application/vnd.etsi.simservs+xml": {
source: "iana",
compressible: true
},
"application/vnd.etsi.timestamp-token": {
source: "iana"
},
"application/vnd.etsi.tsl+xml": {
source: "iana",
compressible: true
},
"application/vnd.etsi.tsl.der": {
source: "iana"
},
"application/vnd.eu.kasparian.car+json": {
source: "iana",
compressible: true
},
"application/vnd.eudora.data": {
source: "iana"
},
"application/vnd.evolv.ecig.profile": {
source: "iana"
},
"application/vnd.evolv.ecig.settings": {
source: "iana"
},
"application/vnd.evolv.ecig.theme": {
source: "iana"
},
"application/vnd.exstream-empower+zip": {
source: "iana",
compressible: false
},
"application/vnd.exstream-package": {
source: "iana"
},
"application/vnd.ezpix-album": {
source: "iana",
extensions: ["ez2"]
},
"application/vnd.ezpix-package": {
source: "iana",
extensions: ["ez3"]
},
"application/vnd.f-secure.mobile": {
source: "iana"
},
"application/vnd.familysearch.gedcom+zip": {
source: "iana",
compressible: false
},
"application/vnd.fastcopy-disk-image": {
source: "iana"
},
"application/vnd.fdf": {
source: "apache",
extensions: ["fdf"]
},
"application/vnd.fdsn.mseed": {
source: "iana",
extensions: ["mseed"]
},
"application/vnd.fdsn.seed": {
source: "iana",
extensions: ["seed", "dataless"]
},
"application/vnd.fdsn.stationxml+xml": {
source: "iana",
charset: "XML-BASED",
compressible: true
},
"application/vnd.ffsns": {
source: "iana"
},
"application/vnd.ficlab.flb+zip": {
source: "iana",
compressible: false
},
"application/vnd.filmit.zfc": {
source: "iana"
},
"application/vnd.fints": {
source: "iana"
},
"application/vnd.firemonkeys.cloudcell": {
source: "iana"
},
"application/vnd.flographit": {
source: "iana",
extensions: ["gph"]
},
"application/vnd.fluxtime.clip": {
source: "iana",
extensions: ["ftc"]
},
"application/vnd.font-fontforge-sfd": {
source: "iana"
},
"application/vnd.framemaker": {
source: "iana",
extensions: ["fm", "frame", "maker", "book"]
},
"application/vnd.freelog.comic": {
source: "iana"
},
"application/vnd.frogans.fnc": {
source: "apache",
extensions: ["fnc"]
},
"application/vnd.frogans.ltf": {
source: "apache",
extensions: ["ltf"]
},
"application/vnd.fsc.weblaunch": {
source: "iana",
extensions: ["fsc"]
},
"application/vnd.fujifilm.fb.docuworks": {
source: "iana"
},
"application/vnd.fujifilm.fb.docuworks.binder": {
source: "iana"
},
"application/vnd.fujifilm.fb.docuworks.container": {
source: "iana"
},
"application/vnd.fujifilm.fb.jfi+xml": {
source: "iana",
compressible: true
},
"application/vnd.fujitsu.oasys": {
source: "iana",
extensions: ["oas"]
},
"application/vnd.fujitsu.oasys2": {
source: "iana",
extensions: ["oa2"]
},
"application/vnd.fujitsu.oasys3": {
source: "iana",
extensions: ["oa3"]
},
"application/vnd.fujitsu.oasysgp": {
source: "iana",
extensions: ["fg5"]
},
"application/vnd.fujitsu.oasysprs": {
source: "iana",
extensions: ["bh2"]
},
"application/vnd.fujixerox.art-ex": {
source: "iana"
},
"application/vnd.fujixerox.art4": {
source: "iana"
},
"application/vnd.fujixerox.ddd": {
source: "iana",
extensions: ["ddd"]
},
"application/vnd.fujixerox.docuworks": {
source: "iana",
extensions: ["xdw"]
},
"application/vnd.fujixerox.docuworks.binder": {
source: "iana",
extensions: ["xbd"]
},
"application/vnd.fujixerox.docuworks.container": {
source: "iana"
},
"application/vnd.fujixerox.hbpl": {
source: "iana"
},
"application/vnd.fut-misnet": {
source: "iana"
},
"application/vnd.futoin+cbor": {
source: "iana"
},
"application/vnd.futoin+json": {
source: "iana",
compressible: true
},
"application/vnd.fuzzysheet": {
source: "iana",
extensions: ["fzs"]
},
"application/vnd.ga4gh.passport+jwt": {
source: "iana"
},
"application/vnd.genomatix.tuxedo": {
source: "iana",
extensions: ["txd"]
},
"application/vnd.genozip": {
source: "iana"
},
"application/vnd.gentics.grd+json": {
source: "iana",
compressible: true
},
"application/vnd.gentoo.catmetadata+xml": {
source: "iana",
compressible: true
},
"application/vnd.gentoo.ebuild": {
source: "iana"
},
"application/vnd.gentoo.eclass": {
source: "iana"
},
"application/vnd.gentoo.gpkg": {
source: "iana"
},
"application/vnd.gentoo.manifest": {
source: "iana"
},
"application/vnd.gentoo.pkgmetadata+xml": {
source: "iana",
compressible: true
},
"application/vnd.gentoo.xpak": {
source: "iana"
},
"application/vnd.geo+json": {
source: "apache",
compressible: true
},
"application/vnd.geocube+xml": {
source: "apache",
compressible: true
},
"application/vnd.geogebra.file": {
source: "iana",
extensions: ["ggb"]
},
"application/vnd.geogebra.pinboard": {
source: "iana"
},
"application/vnd.geogebra.slides": {
source: "iana",
extensions: ["ggs"]
},
"application/vnd.geogebra.tool": {
source: "iana",
extensions: ["ggt"]
},
"application/vnd.geometry-explorer": {
source: "iana",
extensions: ["gex", "gre"]
},
"application/vnd.geonext": {
source: "iana",
extensions: ["gxt"]
},
"application/vnd.geoplan": {
source: "iana",
extensions: ["g2w"]
},
"application/vnd.geospace": {
source: "iana",
extensions: ["g3w"]
},
"application/vnd.gerber": {
source: "iana"
},
"application/vnd.globalplatform.card-content-mgt": {
source: "iana"
},
"application/vnd.globalplatform.card-content-mgt-response": {
source: "iana"
},
"application/vnd.gmx": {
source: "iana",
extensions: ["gmx"]
},
"application/vnd.gnu.taler.exchange+json": {
source: "iana",
compressible: true
},
"application/vnd.gnu.taler.merchant+json": {
source: "iana",
compressible: true
},
"application/vnd.google-apps.audio": {},
"application/vnd.google-apps.document": {
compressible: false,
extensions: ["gdoc"]
},
"application/vnd.google-apps.drawing": {
compressible: false,
extensions: ["gdraw"]
},
"application/vnd.google-apps.drive-sdk": {
compressible: false
},
"application/vnd.google-apps.file": {},
"application/vnd.google-apps.folder": {
compressible: false
},
"application/vnd.google-apps.form": {
compressible: false,
extensions: ["gform"]
},
"application/vnd.google-apps.fusiontable": {},
"application/vnd.google-apps.jam": {
compressible: false,
extensions: ["gjam"]
},
"application/vnd.google-apps.mail-layout": {},
"application/vnd.google-apps.map": {
compressible: false,
extensions: ["gmap"]
},
"application/vnd.google-apps.photo": {},
"application/vnd.google-apps.presentation": {
compressible: false,
extensions: ["gslides"]
},
"application/vnd.google-apps.script": {
compressible: false,
extensions: ["gscript"]
},
"application/vnd.google-apps.shortcut": {},
"application/vnd.google-apps.site": {
compressible: false,
extensions: ["gsite"]
},
"application/vnd.google-apps.spreadsheet": {
compressible: false,
extensions: ["gsheet"]
},
"application/vnd.google-apps.unknown": {},
"application/vnd.google-apps.video": {},
"application/vnd.google-earth.kml+xml": {
source: "iana",
compressible: true,
extensions: ["kml"]
},
"application/vnd.google-earth.kmz": {
source: "iana",
compressible: false,
extensions: ["kmz"]
},
"application/vnd.gov.sk.e-form+xml": {
source: "apache",
compressible: true
},
"application/vnd.gov.sk.e-form+zip": {
source: "iana",
compressible: false
},
"application/vnd.gov.sk.xmldatacontainer+xml": {
source: "iana",
compressible: true,
extensions: ["xdcf"]
},
"application/vnd.gpxsee.map+xml": {
source: "iana",
compressible: true
},
"application/vnd.grafeq": {
source: "iana",
extensions: ["gqf", "gqs"]
},
"application/vnd.gridmp": {
source: "iana"
},
"application/vnd.groove-account": {
source: "iana",
extensions: ["gac"]
},
"application/vnd.groove-help": {
source: "iana",
extensions: ["ghf"]
},
"application/vnd.groove-identity-message": {
source: "iana",
extensions: ["gim"]
},
"application/vnd.groove-injector": {
source: "iana",
extensions: ["grv"]
},
"application/vnd.groove-tool-message": {
source: "iana",
extensions: ["gtm"]
},
"application/vnd.groove-tool-template": {
source: "iana",
extensions: ["tpl"]
},
"application/vnd.groove-vcard": {
source: "iana",
extensions: ["vcg"]
},
"application/vnd.hal+json": {
source: "iana",
compressible: true
},
"application/vnd.hal+xml": {
source: "iana",
compressible: true,
extensions: ["hal"]
},
"application/vnd.handheld-entertainment+xml": {
source: "iana",
compressible: true,
extensions: ["zmm"]
},
"application/vnd.hbci": {
source: "iana",
extensions: ["hbci"]
},
"application/vnd.hc+json": {
source: "iana",
compressible: true
},
"application/vnd.hcl-bireports": {
source: "iana"
},
"application/vnd.hdt": {
source: "iana"
},
"application/vnd.heroku+json": {
source: "iana",
compressible: true
},
"application/vnd.hhe.lesson-player": {
source: "iana",
extensions: ["les"]
},
"application/vnd.hp-hpgl": {
source: "iana",
extensions: ["hpgl"]
},
"application/vnd.hp-hpid": {
source: "iana",
extensions: ["hpid"]
},
"application/vnd.hp-hps": {
source: "iana",
extensions: ["hps"]
},
"application/vnd.hp-jlyt": {
source: "iana",
extensions: ["jlt"]
},
"application/vnd.hp-pcl": {
source: "iana",
extensions: ["pcl"]
},
"application/vnd.hp-pclxl": {
source: "iana",
extensions: ["pclxl"]
},
"application/vnd.hsl": {
source: "iana"
},
"application/vnd.httphone": {
source: "iana"
},
"application/vnd.hydrostatix.sof-data": {
source: "iana",
extensions: ["sfd-hdstx"]
},
"application/vnd.hyper+json": {
source: "iana",
compressible: true
},
"application/vnd.hyper-item+json": {
source: "iana",
compressible: true
},
"application/vnd.hyperdrive+json": {
source: "iana",
compressible: true
},
"application/vnd.hzn-3d-crossword": {
source: "iana"
},
"application/vnd.ibm.afplinedata": {
source: "apache"
},
"application/vnd.ibm.electronic-media": {
source: "iana"
},
"application/vnd.ibm.minipay": {
source: "iana",
extensions: ["mpy"]
},
"application/vnd.ibm.modcap": {
source: "apache",
extensions: ["afp", "listafp", "list3820"]
},
"application/vnd.ibm.rights-management": {
source: "iana",
extensions: ["irm"]
},
"application/vnd.ibm.secure-container": {
source: "iana",
extensions: ["sc"]
},
"application/vnd.iccprofile": {
source: "iana",
extensions: ["icc", "icm"]
},
"application/vnd.ieee.1905": {
source: "iana"
},
"application/vnd.igloader": {
source: "iana",
extensions: ["igl"]
},
"application/vnd.imagemeter.folder+zip": {
source: "iana",
compressible: false
},
"application/vnd.imagemeter.image+zip": {
source: "iana",
compressible: false
},
"application/vnd.immervision-ivp": {
source: "iana",
extensions: ["ivp"]
},
"application/vnd.immervision-ivu": {
source: "iana",
extensions: ["ivu"]
},
"application/vnd.ims.imsccv1p1": {
source: "iana"
},
"application/vnd.ims.imsccv1p2": {
source: "iana"
},
"application/vnd.ims.imsccv1p3": {
source: "iana"
},
"application/vnd.ims.lis.v2.result+json": {
source: "iana",
compressible: true
},
"application/vnd.ims.lti.v2.toolconsumerprofile+json": {
source: "iana",
compressible: true
},
"application/vnd.ims.lti.v2.toolproxy+json": {
source: "iana",
compressible: true
},
"application/vnd.ims.lti.v2.toolproxy.id+json": {
source: "iana",
compressible: true
},
"application/vnd.ims.lti.v2.toolsettings+json": {
source: "iana",
compressible: true
},
"application/vnd.ims.lti.v2.toolsettings.simple+json": {
source: "iana",
compressible: true
},
"application/vnd.informedcontrol.rms+xml": {
source: "iana",
compressible: true
},
"application/vnd.informix-visionary": {
source: "apache"
},
"application/vnd.infotech.project": {
source: "iana"
},
"application/vnd.infotech.project+xml": {
source: "iana",
compressible: true
},
"application/vnd.innopath.wamp.notification": {
source: "iana"
},
"application/vnd.insors.igm": {
source: "iana",
extensions: ["igm"]
},
"application/vnd.intercon.formnet": {
source: "iana",
extensions: ["xpw", "xpx"]
},
"application/vnd.intergeo": {
source: "iana",
extensions: ["i2g"]
},
"application/vnd.intertrust.digibox": {
source: "iana"
},
"application/vnd.intertrust.nncp": {
source: "iana"
},
"application/vnd.intu.qbo": {
source: "iana",
extensions: ["qbo"]
},
"application/vnd.intu.qfx": {
source: "iana",
extensions: ["qfx"]
},
"application/vnd.ipfs.ipns-record": {
source: "iana"
},
"application/vnd.ipld.car": {
source: "iana"
},
"application/vnd.ipld.dag-cbor": {
source: "iana"
},
"application/vnd.ipld.dag-json": {
source: "iana"
},
"application/vnd.ipld.raw": {
source: "iana"
},
"application/vnd.iptc.g2.catalogitem+xml": {
source: "iana",
compressible: true
},
"application/vnd.iptc.g2.conceptitem+xml": {
source: "iana",
compressible: true
},
"application/vnd.iptc.g2.knowledgeitem+xml": {
source: "iana",
compressible: true
},
"application/vnd.iptc.g2.newsitem+xml": {
source: "iana",
compressible: true
},
"application/vnd.iptc.g2.newsmessage+xml": {
source: "iana",
compressible: true
},
"application/vnd.iptc.g2.packageitem+xml": {
source: "iana",
compressible: true
},
"application/vnd.iptc.g2.planningitem+xml": {
source: "iana",
compressible: true
},
"application/vnd.ipunplugged.rcprofile": {
source: "iana",
extensions: ["rcprofile"]
},
"application/vnd.irepository.package+xml": {
source: "iana",
compressible: true,
extensions: ["irp"]
},
"application/vnd.is-xpr": {
source: "iana",
extensions: ["xpr"]
},
"application/vnd.isac.fcs": {
source: "iana",
extensions: ["fcs"]
},
"application/vnd.iso11783-10+zip": {
source: "iana",
compressible: false
},
"application/vnd.jam": {
source: "iana",
extensions: ["jam"]
},
"application/vnd.japannet-directory-service": {
source: "iana"
},
"application/vnd.japannet-jpnstore-wakeup": {
source: "iana"
},
"application/vnd.japannet-payment-wakeup": {
source: "iana"
},
"application/vnd.japannet-registration": {
source: "iana"
},
"application/vnd.japannet-registration-wakeup": {
source: "iana"
},
"application/vnd.japannet-setstore-wakeup": {
source: "iana"
},
"application/vnd.japannet-verification": {
source: "iana"
},
"application/vnd.japannet-verification-wakeup": {
source: "iana"
},
"application/vnd.jcp.javame.midlet-rms": {
source: "iana",
extensions: ["rms"]
},
"application/vnd.jisp": {
source: "iana",
extensions: ["jisp"]
},
"application/vnd.joost.joda-archive": {
source: "iana",
extensions: ["joda"]
},
"application/vnd.jsk.isdn-ngn": {
source: "iana"
},
"application/vnd.kahootz": {
source: "iana",
extensions: ["ktz", "ktr"]
},
"application/vnd.kde.karbon": {
source: "iana",
extensions: ["karbon"]
},
"application/vnd.kde.kchart": {
source: "iana",
extensions: ["chrt"]
},
"application/vnd.kde.kformula": {
source: "iana",
extensions: ["kfo"]
},
"application/vnd.kde.kivio": {
source: "iana",
extensions: ["flw"]
},
"application/vnd.kde.kontour": {
source: "iana",
extensions: ["kon"]
},
"application/vnd.kde.kpresenter": {
source: "iana",
extensions: ["kpr", "kpt"]
},
"application/vnd.kde.kspread": {
source: "iana",
extensions: ["ksp"]
},
"application/vnd.kde.kword": {
source: "iana",
extensions: ["kwd", "kwt"]
},
"application/vnd.kdl": {
source: "iana"
},
"application/vnd.kenameaapp": {
source: "iana",
extensions: ["htke"]
},
"application/vnd.keyman.kmp+zip": {
source: "iana",
compressible: false
},
"application/vnd.keyman.kmx": {
source: "iana"
},
"application/vnd.kidspiration": {
source: "iana",
extensions: ["kia"]
},
"application/vnd.kinar": {
source: "iana",
extensions: ["kne", "knp"]
},
"application/vnd.koan": {
source: "iana",
extensions: ["skp", "skd", "skt", "skm"]
},
"application/vnd.kodak-descriptor": {
source: "iana",
extensions: ["sse"]
},
"application/vnd.las": {
source: "iana"
},
"application/vnd.las.las+json": {
source: "iana",
compressible: true
},
"application/vnd.las.las+xml": {
source: "iana",
compressible: true,
extensions: ["lasxml"]
},
"application/vnd.laszip": {
source: "iana"
},
"application/vnd.ldev.productlicensing": {
source: "iana"
},
"application/vnd.leap+json": {
source: "iana",
compressible: true
},
"application/vnd.liberty-request+xml": {
source: "iana",
compressible: true
},
"application/vnd.llamagraphics.life-balance.desktop": {
source: "iana",
extensions: ["lbd"]
},
"application/vnd.llamagraphics.life-balance.exchange+xml": {
source: "iana",
compressible: true,
extensions: ["lbe"]
},
"application/vnd.logipipe.circuit+zip": {
source: "iana",
compressible: false
},
"application/vnd.loom": {
source: "iana"
},
"application/vnd.lotus-1-2-3": {
source: "iana",
extensions: ["123"]
},
"application/vnd.lotus-approach": {
source: "iana",
extensions: ["apr"]
},
"application/vnd.lotus-freelance": {
source: "iana",
extensions: ["pre"]
},
"application/vnd.lotus-notes": {
source: "iana",
extensions: ["nsf"]
},
"application/vnd.lotus-organizer": {
source: "iana",
extensions: ["org"]
},
"application/vnd.lotus-screencam": {
source: "iana",
extensions: ["scm"]
},
"application/vnd.lotus-wordpro": {
source: "iana",
extensions: ["lwp"]
},
"application/vnd.macports.portpkg": {
source: "iana",
extensions: ["portpkg"]
},
"application/vnd.mapbox-vector-tile": {
source: "iana",
extensions: ["mvt"]
},
"application/vnd.marlin.drm.actiontoken+xml": {
source: "iana",
compressible: true
},
"application/vnd.marlin.drm.conftoken+xml": {
source: "iana",
compressible: true
},
"application/vnd.marlin.drm.license+xml": {
source: "iana",
compressible: true
},
"application/vnd.marlin.drm.mdcf": {
source: "iana"
},
"application/vnd.mason+json": {
source: "iana",
compressible: true
},
"application/vnd.maxar.archive.3tz+zip": {
source: "iana",
compressible: false
},
"application/vnd.maxmind.maxmind-db": {
source: "iana"
},
"application/vnd.mcd": {
source: "iana",
extensions: ["mcd"]
},
"application/vnd.mdl": {
source: "iana"
},
"application/vnd.mdl-mbsdf": {
source: "iana"
},
"application/vnd.medcalcdata": {
source: "iana",
extensions: ["mc1"]
},
"application/vnd.mediastation.cdkey": {
source: "iana",
extensions: ["cdkey"]
},
"application/vnd.medicalholodeck.recordxr": {
source: "iana"
},
"application/vnd.meridian-slingshot": {
source: "iana"
},
"application/vnd.mermaid": {
source: "iana"
},
"application/vnd.mfer": {
source: "iana",
extensions: ["mwf"]
},
"application/vnd.mfmp": {
source: "iana",
extensions: ["mfm"]
},
"application/vnd.micro+json": {
source: "iana",
compressible: true
},
"application/vnd.micrografx.flo": {
source: "iana",
extensions: ["flo"]
},
"application/vnd.micrografx.igx": {
source: "iana",
extensions: ["igx"]
},
"application/vnd.microsoft.portable-executable": {
source: "iana"
},
"application/vnd.microsoft.windows.thumbnail-cache": {
source: "iana"
},
"application/vnd.miele+json": {
source: "iana",
compressible: true
},
"application/vnd.mif": {
source: "iana",
extensions: ["mif"]
},
"application/vnd.minisoft-hp3000-save": {
source: "iana"
},
"application/vnd.mitsubishi.misty-guard.trustweb": {
source: "iana"
},
"application/vnd.mobius.daf": {
source: "iana",
extensions: ["daf"]
},
"application/vnd.mobius.dis": {
source: "iana",
extensions: ["dis"]
},
"application/vnd.mobius.mbk": {
source: "iana",
extensions: ["mbk"]
},
"application/vnd.mobius.mqy": {
source: "iana",
extensions: ["mqy"]
},
"application/vnd.mobius.msl": {
source: "iana",
extensions: ["msl"]
},
"application/vnd.mobius.plc": {
source: "iana",
extensions: ["plc"]
},
"application/vnd.mobius.txf": {
source: "iana",
extensions: ["txf"]
},
"application/vnd.modl": {
source: "iana"
},
"application/vnd.mophun.application": {
source: "iana",
extensions: ["mpn"]
},
"application/vnd.mophun.certificate": {
source: "iana",
extensions: ["mpc"]
},
"application/vnd.motorola.flexsuite": {
source: "iana"
},
"application/vnd.motorola.flexsuite.adsi": {
source: "iana"
},
"application/vnd.motorola.flexsuite.fis": {
source: "iana"
},
"application/vnd.motorola.flexsuite.gotap": {
source: "iana"
},
"application/vnd.motorola.flexsuite.kmr": {
source: "iana"
},
"application/vnd.motorola.flexsuite.ttc": {
source: "iana"
},
"application/vnd.motorola.flexsuite.wem": {
source: "iana"
},
"application/vnd.motorola.iprm": {
source: "iana"
},
"application/vnd.mozilla.xul+xml": {
source: "iana",
compressible: true,
extensions: ["xul"]
},
"application/vnd.ms-3mfdocument": {
source: "iana"
},
"application/vnd.ms-artgalry": {
source: "iana",
extensions: ["cil"]
},
"application/vnd.ms-asf": {
source: "iana"
},
"application/vnd.ms-cab-compressed": {
source: "iana",
extensions: ["cab"]
},
"application/vnd.ms-color.iccprofile": {
source: "apache"
},
"application/vnd.ms-excel": {
source: "iana",
compressible: false,
extensions: ["xls", "xlm", "xla", "xlc", "xlt", "xlw"]
},
"application/vnd.ms-excel.addin.macroenabled.12": {
source: "iana",
extensions: ["xlam"]
},
"application/vnd.ms-excel.sheet.binary.macroenabled.12": {
source: "iana",
extensions: ["xlsb"]
},
"application/vnd.ms-excel.sheet.macroenabled.12": {
source: "iana",
extensions: ["xlsm"]
},
"application/vnd.ms-excel.template.macroenabled.12": {
source: "iana",
extensions: ["xltm"]
},
"application/vnd.ms-fontobject": {
source: "iana",
compressible: true,
extensions: ["eot"]
},
"application/vnd.ms-htmlhelp": {
source: "iana",
extensions: ["chm"]
},
"application/vnd.ms-ims": {
source: "iana",
extensions: ["ims"]
},
"application/vnd.ms-lrm": {
source: "iana",
extensions: ["lrm"]
},
"application/vnd.ms-office.activex+xml": {
source: "iana",
compressible: true
},
"application/vnd.ms-officetheme": {
source: "iana",
extensions: ["thmx"]
},
"application/vnd.ms-opentype": {
source: "apache",
compressible: true
},
"application/vnd.ms-outlook": {
compressible: false,
extensions: ["msg"]
},
"application/vnd.ms-package.obfuscated-opentype": {
source: "apache"
},
"application/vnd.ms-pki.seccat": {
source: "apache",
extensions: ["cat"]
},
"application/vnd.ms-pki.stl": {
source: "apache",
extensions: ["stl"]
},
"application/vnd.ms-playready.initiator+xml": {
source: "iana",
compressible: true
},
"application/vnd.ms-powerpoint": {
source: "iana",
compressible: false,
extensions: ["ppt", "pps", "pot"]
},
"application/vnd.ms-powerpoint.addin.macroenabled.12": {
source: "iana",
extensions: ["ppam"]
},
"application/vnd.ms-powerpoint.presentation.macroenabled.12": {
source: "iana",
extensions: ["pptm"]
},
"application/vnd.ms-powerpoint.slide.macroenabled.12": {
source: "iana",
extensions: ["sldm"]
},
"application/vnd.ms-powerpoint.slideshow.macroenabled.12": {
source: "iana",
extensions: ["ppsm"]
},
"application/vnd.ms-powerpoint.template.macroenabled.12": {
source: "iana",
extensions: ["potm"]
},
"application/vnd.ms-printdevicecapabilities+xml": {
source: "iana",
compressible: true
},
"application/vnd.ms-printing.printticket+xml": {
source: "apache",
compressible: true
},
"application/vnd.ms-printschematicket+xml": {
source: "iana",
compressible: true
},
"application/vnd.ms-project": {
source: "iana",
extensions: ["mpp", "mpt"]
},
"application/vnd.ms-tnef": {
source: "iana"
},
"application/vnd.ms-visio.viewer": {
extensions: ["vdx"]
},
"application/vnd.ms-windows.devicepairing": {
source: "iana"
},
"application/vnd.ms-windows.nwprinting.oob": {
source: "iana"
},
"application/vnd.ms-windows.printerpairing": {
source: "iana"
},
"application/vnd.ms-windows.wsd.oob": {
source: "iana"
},
"application/vnd.ms-wmdrm.lic-chlg-req": {
source: "iana"
},
"application/vnd.ms-wmdrm.lic-resp": {
source: "iana"
},
"application/vnd.ms-wmdrm.meter-chlg-req": {
source: "iana"
},
"application/vnd.ms-wmdrm.meter-resp": {
source: "iana"
},
"application/vnd.ms-word.document.macroenabled.12": {
source: "iana",
extensions: ["docm"]
},
"application/vnd.ms-word.template.macroenabled.12": {
source: "iana",
extensions: ["dotm"]
},
"application/vnd.ms-works": {
source: "iana",
extensions: ["wps", "wks", "wcm", "wdb"]
},
"application/vnd.ms-wpl": {
source: "iana",
extensions: ["wpl"]
},
"application/vnd.ms-xpsdocument": {
source: "iana",
compressible: false,
extensions: ["xps"]
},
"application/vnd.msa-disk-image": {
source: "iana"
},
"application/vnd.mseq": {
source: "iana",
extensions: ["mseq"]
},
"application/vnd.msgpack": {
source: "iana"
},
"application/vnd.msign": {
source: "iana"
},
"application/vnd.multiad.creator": {
source: "iana"
},
"application/vnd.multiad.creator.cif": {
source: "iana"
},
"application/vnd.music-niff": {
source: "iana"
},
"application/vnd.musician": {
source: "iana",
extensions: ["mus"]
},
"application/vnd.muvee.style": {
source: "iana",
extensions: ["msty"]
},
"application/vnd.mynfc": {
source: "iana",
extensions: ["taglet"]
},
"application/vnd.nacamar.ybrid+json": {
source: "iana",
compressible: true
},
"application/vnd.nato.bindingdataobject+cbor": {
source: "iana"
},
"application/vnd.nato.bindingdataobject+json": {
source: "iana",
compressible: true
},
"application/vnd.nato.bindingdataobject+xml": {
source: "iana",
compressible: true,
extensions: ["bdo"]
},
"application/vnd.nato.openxmlformats-package.iepd+zip": {
source: "iana",
compressible: false
},
"application/vnd.ncd.control": {
source: "iana"
},
"application/vnd.ncd.reference": {
source: "iana"
},
"application/vnd.nearst.inv+json": {
source: "iana",
compressible: true
},
"application/vnd.nebumind.line": {
source: "iana"
},
"application/vnd.nervana": {
source: "iana"
},
"application/vnd.netfpx": {
source: "iana"
},
"application/vnd.neurolanguage.nlu": {
source: "iana",
extensions: ["nlu"]
},
"application/vnd.nimn": {
source: "iana"
},
"application/vnd.nintendo.nitro.rom": {
source: "iana"
},
"application/vnd.nintendo.snes.rom": {
source: "iana"
},
"application/vnd.nitf": {
source: "iana",
extensions: ["ntf", "nitf"]
},
"application/vnd.noblenet-directory": {
source: "iana",
extensions: ["nnd"]
},
"application/vnd.noblenet-sealer": {
source: "iana",
extensions: ["nns"]
},
"application/vnd.noblenet-web": {
source: "iana",
extensions: ["nnw"]
},
"application/vnd.nokia.catalogs": {
source: "iana"
},
"application/vnd.nokia.conml+wbxml": {
source: "iana"
},
"application/vnd.nokia.conml+xml": {
source: "iana",
compressible: true
},
"application/vnd.nokia.iptv.config+xml": {
source: "iana",
compressible: true
},
"application/vnd.nokia.isds-radio-presets": {
source: "iana"
},
"application/vnd.nokia.landmark+wbxml": {
source: "iana"
},
"application/vnd.nokia.landmark+xml": {
source: "iana",
compressible: true
},
"application/vnd.nokia.landmarkcollection+xml": {
source: "iana",
compressible: true
},
"application/vnd.nokia.n-gage.ac+xml": {
source: "iana",
compressible: true,
extensions: ["ac"]
},
"application/vnd.nokia.n-gage.data": {
source: "iana",
extensions: ["ngdat"]
},
"application/vnd.nokia.n-gage.symbian.install": {
source: "apache",
extensions: ["n-gage"]
},
"application/vnd.nokia.ncd": {
source: "iana"
},
"application/vnd.nokia.pcd+wbxml": {
source: "iana"
},
"application/vnd.nokia.pcd+xml": {
source: "iana",
compressible: true
},
"application/vnd.nokia.radio-preset": {
source: "iana",
extensions: ["rpst"]
},
"application/vnd.nokia.radio-presets": {
source: "iana",
extensions: ["rpss"]
},
"application/vnd.novadigm.edm": {
source: "iana",
extensions: ["edm"]
},
"application/vnd.novadigm.edx": {
source: "iana",
extensions: ["edx"]
},
"application/vnd.novadigm.ext": {
source: "iana",
extensions: ["ext"]
},
"application/vnd.ntt-local.content-share": {
source: "iana"
},
"application/vnd.ntt-local.file-transfer": {
source: "iana"
},
"application/vnd.ntt-local.ogw_remote-access": {
source: "iana"
},
"application/vnd.ntt-local.sip-ta_remote": {
source: "iana"
},
"application/vnd.ntt-local.sip-ta_tcp_stream": {
source: "iana"
},
"application/vnd.oai.workflows": {
source: "iana"
},
"application/vnd.oai.workflows+json": {
source: "iana",
compressible: true
},
"application/vnd.oai.workflows+yaml": {
source: "iana"
},
"application/vnd.oasis.opendocument.base": {
source: "iana"
},
"application/vnd.oasis.opendocument.chart": {
source: "iana",
extensions: ["odc"]
},
"application/vnd.oasis.opendocument.chart-template": {
source: "iana",
extensions: ["otc"]
},
"application/vnd.oasis.opendocument.database": {
source: "apache",
extensions: ["odb"]
},
"application/vnd.oasis.opendocument.formula": {
source: "iana",
extensions: ["odf"]
},
"application/vnd.oasis.opendocument.formula-template": {
source: "iana",
extensions: ["odft"]
},
"application/vnd.oasis.opendocument.graphics": {
source: "iana",
compressible: false,
extensions: ["odg"]
},
"application/vnd.oasis.opendocument.graphics-template": {
source: "iana",
extensions: ["otg"]
},
"application/vnd.oasis.opendocument.image": {
source: "iana",
extensions: ["odi"]
},
"application/vnd.oasis.opendocument.image-template": {
source: "iana",
extensions: ["oti"]
},
"application/vnd.oasis.opendocument.presentation": {
source: "iana",
compressible: false,
extensions: ["odp"]
},
"application/vnd.oasis.opendocument.presentation-template": {
source: "iana",
extensions: ["otp"]
},
"application/vnd.oasis.opendocument.spreadsheet": {
source: "iana",
compressible: false,
extensions: ["ods"]
},
"application/vnd.oasis.opendocument.spreadsheet-template": {
source: "iana",
extensions: ["ots"]
},
"application/vnd.oasis.opendocument.text": {
source: "iana",
compressible: false,
extensions: ["odt"]
},
"application/vnd.oasis.opendocument.text-master": {
source: "iana",
extensions: ["odm"]
},
"application/vnd.oasis.opendocument.text-master-template": {
source: "iana"
},
"application/vnd.oasis.opendocument.text-template": {
source: "iana",
extensions: ["ott"]
},
"application/vnd.oasis.opendocument.text-web": {
source: "iana",
extensions: ["oth"]
},
"application/vnd.obn": {
source: "iana"
},
"application/vnd.ocf+cbor": {
source: "iana"
},
"application/vnd.oci.image.manifest.v1+json": {
source: "iana",
compressible: true
},
"application/vnd.oftn.l10n+json": {
source: "iana",
compressible: true
},
"application/vnd.oipf.contentaccessdownload+xml": {
source: "iana",
compressible: true
},
"application/vnd.oipf.contentaccessstreaming+xml": {
source: "iana",
compressible: true
},
"application/vnd.oipf.cspg-hexbinary": {
source: "iana"
},
"application/vnd.oipf.dae.svg+xml": {
source: "iana",
compressible: true
},
"application/vnd.oipf.dae.xhtml+xml": {
source: "iana",
compressible: true
},
"application/vnd.oipf.mippvcontrolmessage+xml": {
source: "iana",
compressible: true
},
"application/vnd.oipf.pae.gem": {
source: "iana"
},
"application/vnd.oipf.spdiscovery+xml": {
source: "iana",
compressible: true
},
"application/vnd.oipf.spdlist+xml": {
source: "iana",
compressible: true
},
"application/vnd.oipf.ueprofile+xml": {
source: "iana",
compressible: true
},
"application/vnd.oipf.userprofile+xml": {
source: "iana",
compressible: true
},
"application/vnd.olpc-sugar": {
source: "iana",
extensions: ["xo"]
},
"application/vnd.oma-scws-config": {
source: "iana"
},
"application/vnd.oma-scws-http-request": {
source: "iana"
},
"application/vnd.oma-scws-http-response": {
source: "iana"
},
"application/vnd.oma.bcast.associated-procedure-parameter+xml": {
source: "iana",
compressible: true
},
"application/vnd.oma.bcast.drm-trigger+xml": {
source: "apache",
compressible: true
},
"application/vnd.oma.bcast.imd+xml": {
source: "iana",
compressible: true
},
"application/vnd.oma.bcast.ltkm": {
source: "iana"
},
"application/vnd.oma.bcast.notification+xml": {
source: "iana",
compressible: true
},
"application/vnd.oma.bcast.provisioningtrigger": {
source: "iana"
},
"application/vnd.oma.bcast.sgboot": {
source: "iana"
},
"application/vnd.oma.bcast.sgdd+xml": {
source: "iana",
compressible: true
},
"application/vnd.oma.bcast.sgdu": {
source: "iana"
},
"application/vnd.oma.bcast.simple-symbol-container": {
source: "iana"
},
"application/vnd.oma.bcast.smartcard-trigger+xml": {
source: "apache",
compressible: true
},
"application/vnd.oma.bcast.sprov+xml": {
source: "iana",
compressible: true
},
"application/vnd.oma.bcast.stkm": {
source: "iana"
},
"application/vnd.oma.cab-address-book+xml": {
source: "iana",
compressible: true
},
"application/vnd.oma.cab-feature-handler+xml": {
source: "iana",
compressible: true
},
"application/vnd.oma.cab-pcc+xml": {
source: "iana",
compressible: true
},
"application/vnd.oma.cab-subs-invite+xml": {
source: "iana",
compressible: true
},
"application/vnd.oma.cab-user-prefs+xml": {
source: "iana",
compressible: true
},
"application/vnd.oma.dcd": {
source: "iana"
},
"application/vnd.oma.dcdc": {
source: "iana"
},
"application/vnd.oma.dd2+xml": {
source: "iana",
compressible: true,
extensions: ["dd2"]
},
"application/vnd.oma.drm.risd+xml": {
source: "iana",
compressible: true
},
"application/vnd.oma.group-usage-list+xml": {
source: "iana",
compressible: true
},
"application/vnd.oma.lwm2m+cbor": {
source: "iana"
},
"application/vnd.oma.lwm2m+json": {
source: "iana",
compressible: true
},
"application/vnd.oma.lwm2m+tlv": {
source: "iana"
},
"application/vnd.oma.pal+xml": {
source: "iana",
compressible: true
},
"application/vnd.oma.poc.detailed-progress-report+xml": {
source: "iana",
compressible: true
},
"application/vnd.oma.poc.final-report+xml": {
source: "iana",
compressible: true
},
"application/vnd.oma.poc.groups+xml": {
source: "iana",
compressible: true
},
"application/vnd.oma.poc.invocation-descriptor+xml": {
source: "iana",
compressible: true
},
"application/vnd.oma.poc.optimized-progress-report+xml": {
source: "iana",
compressible: true
},
"application/vnd.oma.push": {
source: "iana"
},
"application/vnd.oma.scidm.messages+xml": {
source: "iana",
compressible: true
},
"application/vnd.oma.xcap-directory+xml": {
source: "iana",
compressible: true
},
"application/vnd.omads-email+xml": {
source: "iana",
charset: "UTF-8",
compressible: true
},
"application/vnd.omads-file+xml": {
source: "iana",
charset: "UTF-8",
compressible: true
},
"application/vnd.omads-folder+xml": {
source: "iana",
charset: "UTF-8",
compressible: true
},
"application/vnd.omaloc-supl-init": {
source: "iana"
},
"application/vnd.onepager": {
source: "iana"
},
"application/vnd.onepagertamp": {
source: "iana"
},
"application/vnd.onepagertamx": {
source: "iana"
},
"application/vnd.onepagertat": {
source: "iana"
},
"application/vnd.onepagertatp": {
source: "iana"
},
"application/vnd.onepagertatx": {
source: "iana"
},
"application/vnd.onvif.metadata": {
source: "iana"
},
"application/vnd.openblox.game+xml": {
source: "iana",
compressible: true,
extensions: ["obgx"]
},
"application/vnd.openblox.game-binary": {
source: "iana"
},
"application/vnd.openeye.oeb": {
source: "iana"
},
"application/vnd.openofficeorg.extension": {
source: "apache",
extensions: ["oxt"]
},
"application/vnd.openstreetmap.data+xml": {
source: "iana",
compressible: true,
extensions: ["osm"]
},
"application/vnd.opentimestamps.ots": {
source: "iana"
},
"application/vnd.openvpi.dspx+json": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.custom-properties+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.customxmlproperties+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.drawing+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.drawingml.chart+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.drawingml.chartshapes+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.drawingml.diagramcolors+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.drawingml.diagramdata+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.drawingml.diagramlayout+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.drawingml.diagramstyle+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.extended-properties+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.presentationml.commentauthors+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.presentationml.comments+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.presentationml.handoutmaster+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.presentationml.notesmaster+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.presentationml.notesslide+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.presentationml.presentation": {
source: "iana",
compressible: false,
extensions: ["pptx"]
},
"application/vnd.openxmlformats-officedocument.presentationml.presentation.main+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.presentationml.presprops+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.presentationml.slide": {
source: "iana",
extensions: ["sldx"]
},
"application/vnd.openxmlformats-officedocument.presentationml.slide+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.presentationml.slidelayout+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.presentationml.slidemaster+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.presentationml.slideshow": {
source: "iana",
extensions: ["ppsx"]
},
"application/vnd.openxmlformats-officedocument.presentationml.slideshow.main+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.presentationml.slideupdateinfo+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.presentationml.tablestyles+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.presentationml.tags+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.presentationml.template": {
source: "iana",
extensions: ["potx"]
},
"application/vnd.openxmlformats-officedocument.presentationml.template.main+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.presentationml.viewprops+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.spreadsheetml.calcchain+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.spreadsheetml.chartsheet+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.spreadsheetml.comments+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.spreadsheetml.connections+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.spreadsheetml.dialogsheet+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.spreadsheetml.externallink+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.spreadsheetml.pivotcachedefinition+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.spreadsheetml.pivotcacherecords+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.spreadsheetml.pivottable+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.spreadsheetml.querytable+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.spreadsheetml.revisionheaders+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.spreadsheetml.revisionlog+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.spreadsheetml.sharedstrings+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet": {
source: "iana",
compressible: false,
extensions: ["xlsx"]
},
"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.spreadsheetml.sheetmetadata+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.spreadsheetml.table+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.spreadsheetml.tablesinglecells+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.spreadsheetml.template": {
source: "iana",
extensions: ["xltx"]
},
"application/vnd.openxmlformats-officedocument.spreadsheetml.template.main+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.spreadsheetml.usernames+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.spreadsheetml.volatiledependencies+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.theme+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.themeoverride+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.vmldrawing": {
source: "iana"
},
"application/vnd.openxmlformats-officedocument.wordprocessingml.comments+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.wordprocessingml.document": {
source: "iana",
compressible: false,
extensions: ["docx"]
},
"application/vnd.openxmlformats-officedocument.wordprocessingml.document.glossary+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.wordprocessingml.document.main+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.wordprocessingml.endnotes+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.wordprocessingml.fonttable+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.wordprocessingml.footer+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.wordprocessingml.footnotes+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.wordprocessingml.numbering+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.wordprocessingml.settings+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.wordprocessingml.styles+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.wordprocessingml.template": {
source: "iana",
extensions: ["dotx"]
},
"application/vnd.openxmlformats-officedocument.wordprocessingml.template.main+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.wordprocessingml.websettings+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-package.core-properties+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-package.digital-signature-xmlsignature+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-package.relationships+xml": {
source: "iana",
compressible: true
},
"application/vnd.oracle.resource+json": {
source: "iana",
compressible: true
},
"application/vnd.orange.indata": {
source: "iana"
},
"application/vnd.osa.netdeploy": {
source: "iana"
},
"application/vnd.osgeo.mapguide.package": {
source: "iana",
extensions: ["mgp"]
},
"application/vnd.osgi.bundle": {
source: "iana"
},
"application/vnd.osgi.dp": {
source: "iana",
extensions: ["dp"]
},
"application/vnd.osgi.subsystem": {
source: "iana",
extensions: ["esa"]
},
"application/vnd.otps.ct-kip+xml": {
source: "iana",
compressible: true
},
"application/vnd.oxli.countgraph": {
source: "iana"
},
"application/vnd.pagerduty+json": {
source: "iana",
compressible: true
},
"application/vnd.palm": {
source: "iana",
extensions: ["pdb", "pqa", "oprc"]
},
"application/vnd.panoply": {
source: "iana"
},
"application/vnd.paos.xml": {
source: "iana"
},
"application/vnd.patentdive": {
source: "iana"
},
"application/vnd.patientecommsdoc": {
source: "iana"
},
"application/vnd.pawaafile": {
source: "iana",
extensions: ["paw"]
},
"application/vnd.pcos": {
source: "iana"
},
"application/vnd.pg.format": {
source: "iana",
extensions: ["str"]
},
"application/vnd.pg.osasli": {
source: "iana",
extensions: ["ei6"]
},
"application/vnd.piaccess.application-licence": {
source: "iana"
},
"application/vnd.picsel": {
source: "iana",
extensions: ["efif"]
},
"application/vnd.pmi.widget": {
source: "iana",
extensions: ["wg"]
},
"application/vnd.poc.group-advertisement+xml": {
source: "iana",
compressible: true
},
"application/vnd.pocketlearn": {
source: "iana",
extensions: ["plf"]
},
"application/vnd.powerbuilder6": {
source: "iana",
extensions: ["pbd"]
},
"application/vnd.powerbuilder6-s": {
source: "iana"
},
"application/vnd.powerbuilder7": {
source: "iana"
},
"application/vnd.powerbuilder7-s": {
source: "iana"
},
"application/vnd.powerbuilder75": {
source: "iana"
},
"application/vnd.powerbuilder75-s": {
source: "iana"
},
"application/vnd.preminet": {
source: "iana"
},
"application/vnd.previewsystems.box": {
source: "iana",
extensions: ["box"]
},
"application/vnd.procrate.brushset": {
extensions: ["brushset"]
},
"application/vnd.procreate.brush": {
extensions: ["brush"]
},
"application/vnd.procreate.dream": {
extensions: ["drm"]
},
"application/vnd.proteus.magazine": {
source: "iana",
extensions: ["mgz"]
},
"application/vnd.psfs": {
source: "iana"
},
"application/vnd.pt.mundusmundi": {
source: "iana"
},
"application/vnd.publishare-delta-tree": {
source: "iana",
extensions: ["qps"]
},
"application/vnd.pvi.ptid1": {
source: "iana",
extensions: ["ptid"]
},
"application/vnd.pwg-multiplexed": {
source: "iana"
},
"application/vnd.pwg-xhtml-print+xml": {
source: "iana",
compressible: true,
extensions: ["xhtm"]
},
"application/vnd.qualcomm.brew-app-res": {
source: "iana"
},
"application/vnd.quarantainenet": {
source: "iana"
},
"application/vnd.quark.quarkxpress": {
source: "iana",
extensions: ["qxd", "qxt", "qwd", "qwt", "qxl", "qxb"]
},
"application/vnd.quobject-quoxdocument": {
source: "iana"
},
"application/vnd.radisys.moml+xml": {
source: "iana",
compressible: true
},
"application/vnd.radisys.msml+xml": {
source: "iana",
compressible: true
},
"application/vnd.radisys.msml-audit+xml": {
source: "iana",
compressible: true
},
"application/vnd.radisys.msml-audit-conf+xml": {
source: "iana",
compressible: true
},
"application/vnd.radisys.msml-audit-conn+xml": {
source: "iana",
compressible: true
},
"application/vnd.radisys.msml-audit-dialog+xml": {
source: "iana",
compressible: true
},
"application/vnd.radisys.msml-audit-stream+xml": {
source: "iana",
compressible: true
},
"application/vnd.radisys.msml-conf+xml": {
source: "iana",
compressible: true
},
"application/vnd.radisys.msml-dialog+xml": {
source: "iana",
compressible: true
},
"application/vnd.radisys.msml-dialog-base+xml": {
source: "iana",
compressible: true
},
"application/vnd.radisys.msml-dialog-fax-detect+xml": {
source: "iana",
compressible: true
},
"application/vnd.radisys.msml-dialog-fax-sendrecv+xml": {
source: "iana",
compressible: true
},
"application/vnd.radisys.msml-dialog-group+xml": {
source: "iana",
compressible: true
},
"application/vnd.radisys.msml-dialog-speech+xml": {
source: "iana",
compressible: true
},
"application/vnd.radisys.msml-dialog-transform+xml": {
source: "iana",
compressible: true
},
"application/vnd.rainstor.data": {
source: "iana"
},
"application/vnd.rapid": {
source: "iana"
},
"application/vnd.rar": {
source: "iana",
extensions: ["rar"]
},
"application/vnd.realvnc.bed": {
source: "iana",
extensions: ["bed"]
},
"application/vnd.recordare.musicxml": {
source: "iana",
extensions: ["mxl"]
},
"application/vnd.recordare.musicxml+xml": {
source: "iana",
compressible: true,
extensions: ["musicxml"]
},
"application/vnd.relpipe": {
source: "iana"
},
"application/vnd.renlearn.rlprint": {
source: "iana"
},
"application/vnd.resilient.logic": {
source: "iana"
},
"application/vnd.restful+json": {
source: "iana",
compressible: true
},
"application/vnd.rig.cryptonote": {
source: "iana",
extensions: ["cryptonote"]
},
"application/vnd.rim.cod": {
source: "apache",
extensions: ["cod"]
},
"application/vnd.rn-realmedia": {
source: "apache",
extensions: ["rm"]
},
"application/vnd.rn-realmedia-vbr": {
source: "apache",
extensions: ["rmvb"]
},
"application/vnd.route66.link66+xml": {
source: "iana",
compressible: true,
extensions: ["link66"]
},
"application/vnd.rs-274x": {
source: "iana"
},
"application/vnd.ruckus.download": {
source: "iana"
},
"application/vnd.s3sms": {
source: "iana"
},
"application/vnd.sailingtracker.track": {
source: "iana",
extensions: ["st"]
},
"application/vnd.sar": {
source: "iana"
},
"application/vnd.sbm.cid": {
source: "iana"
},
"application/vnd.sbm.mid2": {
source: "iana"
},
"application/vnd.scribus": {
source: "iana"
},
"application/vnd.sealed.3df": {
source: "iana"
},
"application/vnd.sealed.csf": {
source: "iana"
},
"application/vnd.sealed.doc": {
source: "iana"
},
"application/vnd.sealed.eml": {
source: "iana"
},
"application/vnd.sealed.mht": {
source: "iana"
},
"application/vnd.sealed.net": {
source: "iana"
},
"application/vnd.sealed.ppt": {
source: "iana"
},
"application/vnd.sealed.tiff": {
source: "iana"
},
"application/vnd.sealed.xls": {
source: "iana"
},
"application/vnd.sealedmedia.softseal.html": {
source: "iana"
},
"application/vnd.sealedmedia.softseal.pdf": {
source: "iana"
},
"application/vnd.seemail": {
source: "iana",
extensions: ["see"]
},
"application/vnd.seis+json": {
source: "iana",
compressible: true
},
"application/vnd.sema": {
source: "iana",
extensions: ["sema"]
},
"application/vnd.semd": {
source: "iana",
extensions: ["semd"]
},
"application/vnd.semf": {
source: "iana",
extensions: ["semf"]
},
"application/vnd.shade-save-file": {
source: "iana"
},
"application/vnd.shana.informed.formdata": {
source: "iana",
extensions: ["ifm"]
},
"application/vnd.shana.informed.formtemplate": {
source: "iana",
extensions: ["itp"]
},
"application/vnd.shana.informed.interchange": {
source: "iana",
extensions: ["iif"]
},
"application/vnd.shana.informed.package": {
source: "iana",
extensions: ["ipk"]
},
"application/vnd.shootproof+json": {
source: "iana",
compressible: true
},
"application/vnd.shopkick+json": {
source: "iana",
compressible: true
},
"application/vnd.shp": {
source: "iana"
},
"application/vnd.shx": {
source: "iana"
},
"application/vnd.sigrok.session": {
source: "iana"
},
"application/vnd.simtech-mindmapper": {
source: "iana",
extensions: ["twd", "twds"]
},
"application/vnd.siren+json": {
source: "iana",
compressible: true
},
"application/vnd.sketchometry": {
source: "iana"
},
"application/vnd.smaf": {
source: "iana",
extensions: ["mmf"]
},
"application/vnd.smart.notebook": {
source: "iana"
},
"application/vnd.smart.teacher": {
source: "iana",
extensions: ["teacher"]
},
"application/vnd.smintio.portals.archive": {
source: "iana"
},
"application/vnd.snesdev-page-table": {
source: "iana"
},
"application/vnd.software602.filler.form+xml": {
source: "iana",
compressible: true,
extensions: ["fo"]
},
"application/vnd.software602.filler.form-xml-zip": {
source: "iana"
},
"application/vnd.solent.sdkm+xml": {
source: "iana",
compressible: true,
extensions: ["sdkm", "sdkd"]
},
"application/vnd.spotfire.dxp": {
source: "iana",
extensions: ["dxp"]
},
"application/vnd.spotfire.sfs": {
source: "iana",
extensions: ["sfs"]
},
"application/vnd.sqlite3": {
source: "iana"
},
"application/vnd.sss-cod": {
source: "iana"
},
"application/vnd.sss-dtf": {
source: "iana"
},
"application/vnd.sss-ntf": {
source: "iana"
},
"application/vnd.stardivision.calc": {
source: "apache",
extensions: ["sdc"]
},
"application/vnd.stardivision.draw": {
source: "apache",
extensions: ["sda"]
},
"application/vnd.stardivision.impress": {
source: "apache",
extensions: ["sdd"]
},
"application/vnd.stardivision.math": {
source: "apache",
extensions: ["smf"]
},
"application/vnd.stardivision.writer": {
source: "apache",
extensions: ["sdw", "vor"]
},
"application/vnd.stardivision.writer-global": {
source: "apache",
extensions: ["sgl"]
},
"application/vnd.stepmania.package": {
source: "iana",
extensions: ["smzip"]
},
"application/vnd.stepmania.stepchart": {
source: "iana",
extensions: ["sm"]
},
"application/vnd.street-stream": {
source: "iana"
},
"application/vnd.sun.wadl+xml": {
source: "iana",
compressible: true,
extensions: ["wadl"]
},
"application/vnd.sun.xml.calc": {
source: "apache",
extensions: ["sxc"]
},
"application/vnd.sun.xml.calc.template": {
source: "apache",
extensions: ["stc"]
},
"application/vnd.sun.xml.draw": {
source: "apache",
extensions: ["sxd"]
},
"application/vnd.sun.xml.draw.template": {
source: "apache",
extensions: ["std"]
},
"application/vnd.sun.xml.impress": {
source: "apache",
extensions: ["sxi"]
},
"application/vnd.sun.xml.impress.template": {
source: "apache",
extensions: ["sti"]
},
"application/vnd.sun.xml.math": {
source: "apache",
extensions: ["sxm"]
},
"application/vnd.sun.xml.writer": {
source: "apache",
extensions: ["sxw"]
},
"application/vnd.sun.xml.writer.global": {
source: "apache",
extensions: ["sxg"]
},
"application/vnd.sun.xml.writer.template": {
source: "apache",
extensions: ["stw"]
},
"application/vnd.sus-calendar": {
source: "iana",
extensions: ["sus", "susp"]
},
"application/vnd.svd": {
source: "iana",
extensions: ["svd"]
},
"application/vnd.swiftview-ics": {
source: "iana"
},
"application/vnd.sybyl.mol2": {
source: "iana"
},
"application/vnd.sycle+xml": {
source: "iana",
compressible: true
},
"application/vnd.syft+json": {
source: "iana",
compressible: true
},
"application/vnd.symbian.install": {
source: "apache",
extensions: ["sis", "sisx"]
},
"application/vnd.syncml+xml": {
source: "iana",
charset: "UTF-8",
compressible: true,
extensions: ["xsm"]
},
"application/vnd.syncml.dm+wbxml": {
source: "iana",
charset: "UTF-8",
extensions: ["bdm"]
},
"application/vnd.syncml.dm+xml": {
source: "iana",
charset: "UTF-8",
compressible: true,
extensions: ["xdm"]
},
"application/vnd.syncml.dm.notification": {
source: "iana"
},
"application/vnd.syncml.dmddf+wbxml": {
source: "iana"
},
"application/vnd.syncml.dmddf+xml": {
source: "iana",
charset: "UTF-8",
compressible: true,
extensions: ["ddf"]
},
"application/vnd.syncml.dmtnds+wbxml": {
source: "iana"
},
"application/vnd.syncml.dmtnds+xml": {
source: "iana",
charset: "UTF-8",
compressible: true
},
"application/vnd.syncml.ds.notification": {
source: "iana"
},
"application/vnd.tableschema+json": {
source: "iana",
compressible: true
},
"application/vnd.tao.intent-module-archive": {
source: "iana",
extensions: ["tao"]
},
"application/vnd.tcpdump.pcap": {
source: "iana",
extensions: ["pcap", "cap", "dmp"]
},
"application/vnd.think-cell.ppttc+json": {
source: "iana",
compressible: true
},
"application/vnd.tmd.mediaflex.api+xml": {
source: "iana",
compressible: true
},
"application/vnd.tml": {
source: "iana"
},
"application/vnd.tmobile-livetv": {
source: "iana",
extensions: ["tmo"]
},
"application/vnd.tri.onesource": {
source: "iana"
},
"application/vnd.trid.tpt": {
source: "iana",
extensions: ["tpt"]
},
"application/vnd.triscape.mxs": {
source: "iana",
extensions: ["mxs"]
},
"application/vnd.trueapp": {
source: "iana",
extensions: ["tra"]
},
"application/vnd.truedoc": {
source: "iana"
},
"application/vnd.ubisoft.webplayer": {
source: "iana"
},
"application/vnd.ufdl": {
source: "iana",
extensions: ["ufd", "ufdl"]
},
"application/vnd.uic.osdm+json": {
source: "iana",
compressible: true
},
"application/vnd.uiq.theme": {
source: "iana",
extensions: ["utz"]
},
"application/vnd.umajin": {
source: "iana",
extensions: ["umj"]
},
"application/vnd.unity": {
source: "iana",
extensions: ["unityweb"]
},
"application/vnd.uoml+xml": {
source: "iana",
compressible: true,
extensions: ["uoml", "uo"]
},
"application/vnd.uplanet.alert": {
source: "iana"
},
"application/vnd.uplanet.alert-wbxml": {
source: "iana"
},
"application/vnd.uplanet.bearer-choice": {
source: "iana"
},
"application/vnd.uplanet.bearer-choice-wbxml": {
source: "iana"
},
"application/vnd.uplanet.cacheop": {
source: "iana"
},
"application/vnd.uplanet.cacheop-wbxml": {
source: "iana"
},
"application/vnd.uplanet.channel": {
source: "iana"
},
"application/vnd.uplanet.channel-wbxml": {
source: "iana"
},
"application/vnd.uplanet.list": {
source: "iana"
},
"application/vnd.uplanet.list-wbxml": {
source: "iana"
},
"application/vnd.uplanet.listcmd": {
source: "iana"
},
"application/vnd.uplanet.listcmd-wbxml": {
source: "iana"
},
"application/vnd.uplanet.signal": {
source: "iana"
},
"application/vnd.uri-map": {
source: "iana"
},
"application/vnd.valve.source.material": {
source: "iana"
},
"application/vnd.vcx": {
source: "iana",
extensions: ["vcx"]
},
"application/vnd.vd-study": {
source: "iana"
},
"application/vnd.vectorworks": {
source: "iana"
},
"application/vnd.vel+json": {
source: "iana",
compressible: true
},
"application/vnd.veraison.tsm-report+cbor": {
source: "iana"
},
"application/vnd.veraison.tsm-report+json": {
source: "iana",
compressible: true
},
"application/vnd.verimatrix.vcas": {
source: "iana"
},
"application/vnd.veritone.aion+json": {
source: "iana",
compressible: true
},
"application/vnd.veryant.thin": {
source: "iana"
},
"application/vnd.ves.encrypted": {
source: "iana"
},
"application/vnd.vidsoft.vidconference": {
source: "iana"
},
"application/vnd.visio": {
source: "iana",
extensions: ["vsd", "vst", "vss", "vsw", "vsdx", "vtx"]
},
"application/vnd.visionary": {
source: "iana",
extensions: ["vis"]
},
"application/vnd.vividence.scriptfile": {
source: "iana"
},
"application/vnd.vocalshaper.vsp4": {
source: "iana"
},
"application/vnd.vsf": {
source: "iana",
extensions: ["vsf"]
},
"application/vnd.wap.sic": {
source: "iana"
},
"application/vnd.wap.slc": {
source: "iana"
},
"application/vnd.wap.wbxml": {
source: "iana",
charset: "UTF-8",
extensions: ["wbxml"]
},
"application/vnd.wap.wmlc": {
source: "iana",
extensions: ["wmlc"]
},
"application/vnd.wap.wmlscriptc": {
source: "iana",
extensions: ["wmlsc"]
},
"application/vnd.wasmflow.wafl": {
source: "iana"
},
"application/vnd.webturbo": {
source: "iana",
extensions: ["wtb"]
},
"application/vnd.wfa.dpp": {
source: "iana"
},
"application/vnd.wfa.p2p": {
source: "iana"
},
"application/vnd.wfa.wsc": {
source: "iana"
},
"application/vnd.windows.devicepairing": {
source: "iana"
},
"application/vnd.wmc": {
source: "iana"
},
"application/vnd.wmf.bootstrap": {
source: "iana"
},
"application/vnd.wolfram.mathematica": {
source: "iana"
},
"application/vnd.wolfram.mathematica.package": {
source: "iana"
},
"application/vnd.wolfram.player": {
source: "iana",
extensions: ["nbp"]
},
"application/vnd.wordlift": {
source: "iana"
},
"application/vnd.wordperfect": {
source: "iana",
extensions: ["wpd"]
},
"application/vnd.wqd": {
source: "iana",
extensions: ["wqd"]
},
"application/vnd.wrq-hp3000-labelled": {
source: "iana"
},
"application/vnd.wt.stf": {
source: "iana",
extensions: ["stf"]
},
"application/vnd.wv.csp+wbxml": {
source: "iana"
},
"application/vnd.wv.csp+xml": {
source: "iana",
compressible: true
},
"application/vnd.wv.ssp+xml": {
source: "iana",
compressible: true
},
"application/vnd.xacml+json": {
source: "iana",
compressible: true
},
"application/vnd.xara": {
source: "iana",
extensions: ["xar"]
},
"application/vnd.xarin.cpj": {
source: "iana"
},
"application/vnd.xecrets-encrypted": {
source: "iana"
},
"application/vnd.xfdl": {
source: "iana",
extensions: ["xfdl"]
},
"application/vnd.xfdl.webform": {
source: "iana"
},
"application/vnd.xmi+xml": {
source: "iana",
compressible: true
},
"application/vnd.xmpie.cpkg": {
source: "iana"
},
"application/vnd.xmpie.dpkg": {
source: "iana"
},
"application/vnd.xmpie.plan": {
source: "iana"
},
"application/vnd.xmpie.ppkg": {
source: "iana"
},
"application/vnd.xmpie.xlim": {
source: "iana"
},
"application/vnd.yamaha.hv-dic": {
source: "iana",
extensions: ["hvd"]
},
"application/vnd.yamaha.hv-script": {
source: "iana",
extensions: ["hvs"]
},
"application/vnd.yamaha.hv-voice": {
source: "iana",
extensions: ["hvp"]
},
"application/vnd.yamaha.openscoreformat": {
source: "iana",
extensions: ["osf"]
},
"application/vnd.yamaha.openscoreformat.osfpvg+xml": {
source: "iana",
compressible: true,
extensions: ["osfpvg"]
},
"application/vnd.yamaha.remote-setup": {
source: "iana"
},
"application/vnd.yamaha.smaf-audio": {
source: "iana",
extensions: ["saf"]
},
"application/vnd.yamaha.smaf-phrase": {
source: "iana",
extensions: ["spf"]
},
"application/vnd.yamaha.through-ngn": {
source: "iana"
},
"application/vnd.yamaha.tunnel-udpencap": {
source: "iana"
},
"application/vnd.yaoweme": {
source: "iana"
},
"application/vnd.yellowriver-custom-menu": {
source: "iana",
extensions: ["cmp"]
},
"application/vnd.zul": {
source: "iana",
extensions: ["zir", "zirz"]
},
"application/vnd.zzazz.deck+xml": {
source: "iana",
compressible: true,
extensions: ["zaz"]
},
"application/voicexml+xml": {
source: "iana",
compressible: true,
extensions: ["vxml"]
},
"application/voucher-cms+json": {
source: "iana",
compressible: true
},
"application/voucher-jws+json": {
source: "iana",
compressible: true
},
"application/vp": {
source: "iana"
},
"application/vp+cose": {
source: "iana"
},
"application/vp+jwt": {
source: "iana"
},
"application/vq-rtcpxr": {
source: "iana"
},
"application/wasm": {
source: "iana",
compressible: true,
extensions: ["wasm"]
},
"application/watcherinfo+xml": {
source: "iana",
compressible: true,
extensions: ["wif"]
},
"application/webpush-options+json": {
source: "iana",
compressible: true
},
"application/whoispp-query": {
source: "iana"
},
"application/whoispp-response": {
source: "iana"
},
"application/widget": {
source: "iana",
extensions: ["wgt"]
},
"application/winhlp": {
source: "apache",
extensions: ["hlp"]
},
"application/wita": {
source: "iana"
},
"application/wordperfect5.1": {
source: "iana"
},
"application/wsdl+xml": {
source: "iana",
compressible: true,
extensions: ["wsdl"]
},
"application/wspolicy+xml": {
source: "iana",
compressible: true,
extensions: ["wspolicy"]
},
"application/x-7z-compressed": {
source: "apache",
compressible: false,
extensions: ["7z"]
},
"application/x-abiword": {
source: "apache",
extensions: ["abw"]
},
"application/x-ace-compressed": {
source: "apache",
extensions: ["ace"]
},
"application/x-amf": {
source: "apache"
},
"application/x-apple-diskimage": {
source: "apache",
extensions: ["dmg"]
},
"application/x-arj": {
compressible: false,
extensions: ["arj"]
},
"application/x-authorware-bin": {
source: "apache",
extensions: ["aab", "x32", "u32", "vox"]
},
"application/x-authorware-map": {
source: "apache",
extensions: ["aam"]
},
"application/x-authorware-seg": {
source: "apache",
extensions: ["aas"]
},
"application/x-bcpio": {
source: "apache",
extensions: ["bcpio"]
},
"application/x-bdoc": {
compressible: false,
extensions: ["bdoc"]
},
"application/x-bittorrent": {
source: "apache",
extensions: ["torrent"]
},
"application/x-blender": {
extensions: ["blend"]
},
"application/x-blorb": {
source: "apache",
extensions: ["blb", "blorb"]
},
"application/x-bzip": {
source: "apache",
compressible: false,
extensions: ["bz"]
},
"application/x-bzip2": {
source: "apache",
compressible: false,
extensions: ["bz2", "boz"]
},
"application/x-cbr": {
source: "apache",
extensions: ["cbr", "cba", "cbt", "cbz", "cb7"]
},
"application/x-cdlink": {
source: "apache",
extensions: ["vcd"]
},
"application/x-cfs-compressed": {
source: "apache",
extensions: ["cfs"]
},
"application/x-chat": {
source: "apache",
extensions: ["chat"]
},
"application/x-chess-pgn": {
source: "apache",
extensions: ["pgn"]
},
"application/x-chrome-extension": {
extensions: ["crx"]
},
"application/x-cocoa": {
source: "nginx",
extensions: ["cco"]
},
"application/x-compress": {
source: "apache"
},
"application/x-compressed": {
extensions: ["rar"]
},
"application/x-conference": {
source: "apache",
extensions: ["nsc"]
},
"application/x-cpio": {
source: "apache",
extensions: ["cpio"]
},
"application/x-csh": {
source: "apache",
extensions: ["csh"]
},
"application/x-deb": {
compressible: false
},
"application/x-debian-package": {
source: "apache",
extensions: ["deb", "udeb"]
},
"application/x-dgc-compressed": {
source: "apache",
extensions: ["dgc"]
},
"application/x-director": {
source: "apache",
extensions: ["dir", "dcr", "dxr", "cst", "cct", "cxt", "w3d", "fgd", "swa"]
},
"application/x-doom": {
source: "apache",
extensions: ["wad"]
},
"application/x-dtbncx+xml": {
source: "apache",
compressible: true,
extensions: ["ncx"]
},
"application/x-dtbook+xml": {
source: "apache",
compressible: true,
extensions: ["dtb"]
},
"application/x-dtbresource+xml": {
source: "apache",
compressible: true,
extensions: ["res"]
},
"application/x-dvi": {
source: "apache",
compressible: false,
extensions: ["dvi"]
},
"application/x-envoy": {
source: "apache",
extensions: ["evy"]
},
"application/x-eva": {
source: "apache",
extensions: ["eva"]
},
"application/x-font-bdf": {
source: "apache",
extensions: ["bdf"]
},
"application/x-font-dos": {
source: "apache"
},
"application/x-font-framemaker": {
source: "apache"
},
"application/x-font-ghostscript": {
source: "apache",
extensions: ["gsf"]
},
"application/x-font-libgrx": {
source: "apache"
},
"application/x-font-linux-psf": {
source: "apache",
extensions: ["psf"]
},
"application/x-font-pcf": {
source: "apache",
extensions: ["pcf"]
},
"application/x-font-snf": {
source: "apache",
extensions: ["snf"]
},
"application/x-font-speedo": {
source: "apache"
},
"application/x-font-sunos-news": {
source: "apache"
},
"application/x-font-type1": {
source: "apache",
extensions: ["pfa", "pfb", "pfm", "afm"]
},
"application/x-font-vfont": {
source: "apache"
},
"application/x-freearc": {
source: "apache",
extensions: ["arc"]
},
"application/x-futuresplash": {
source: "apache",
extensions: ["spl"]
},
"application/x-gca-compressed": {
source: "apache",
extensions: ["gca"]
},
"application/x-glulx": {
source: "apache",
extensions: ["ulx"]
},
"application/x-gnumeric": {
source: "apache",
extensions: ["gnumeric"]
},
"application/x-gramps-xml": {
source: "apache",
extensions: ["gramps"]
},
"application/x-gtar": {
source: "apache",
extensions: ["gtar"]
},
"application/x-gzip": {
source: "apache"
},
"application/x-hdf": {
source: "apache",
extensions: ["hdf"]
},
"application/x-httpd-php": {
compressible: true,
extensions: ["php"]
},
"application/x-install-instructions": {
source: "apache",
extensions: ["install"]
},
"application/x-ipynb+json": {
compressible: true,
extensions: ["ipynb"]
},
"application/x-iso9660-image": {
source: "apache",
extensions: ["iso"]
},
"application/x-iwork-keynote-sffkey": {
extensions: ["key"]
},
"application/x-iwork-numbers-sffnumbers": {
extensions: ["numbers"]
},
"application/x-iwork-pages-sffpages": {
extensions: ["pages"]
},
"application/x-java-archive-diff": {
source: "nginx",
extensions: ["jardiff"]
},
"application/x-java-jnlp-file": {
source: "apache",
compressible: false,
extensions: ["jnlp"]
},
"application/x-javascript": {
compressible: true
},
"application/x-keepass2": {
extensions: ["kdbx"]
},
"application/x-latex": {
source: "apache",
compressible: false,
extensions: ["latex"]
},
"application/x-lua-bytecode": {
extensions: ["luac"]
},
"application/x-lzh-compressed": {
source: "apache",
extensions: ["lzh", "lha"]
},
"application/x-makeself": {
source: "nginx",
extensions: ["run"]
},
"application/x-mie": {
source: "apache",
extensions: ["mie"]
},
"application/x-mobipocket-ebook": {
source: "apache",
extensions: ["prc", "mobi"]
},
"application/x-mpegurl": {
compressible: false
},
"application/x-ms-application": {
source: "apache",
extensions: ["application"]
},
"application/x-ms-shortcut": {
source: "apache",
extensions: ["lnk"]
},
"application/x-ms-wmd": {
source: "apache",
extensions: ["wmd"]
},
"application/x-ms-wmz": {
source: "apache",
extensions: ["wmz"]
},
"application/x-ms-xbap": {
source: "apache",
extensions: ["xbap"]
},
"application/x-msaccess": {
source: "apache",
extensions: ["mdb"]
},
"application/x-msbinder": {
source: "apache",
extensions: ["obd"]
},
"application/x-mscardfile": {
source: "apache",
extensions: ["crd"]
},
"application/x-msclip": {
source: "apache",
extensions: ["clp"]
},
"application/x-msdos-program": {
extensions: ["exe"]
},
"application/x-msdownload": {
source: "apache",
extensions: ["exe", "dll", "com", "bat", "msi"]
},
"application/x-msmediaview": {
source: "apache",
extensions: ["mvb", "m13", "m14"]
},
"application/x-msmetafile": {
source: "apache",
extensions: ["wmf", "wmz", "emf", "emz"]
},
"application/x-msmoney": {
source: "apache",
extensions: ["mny"]
},
"application/x-mspublisher": {
source: "apache",
extensions: ["pub"]
},
"application/x-msschedule": {
source: "apache",
extensions: ["scd"]
},
"application/x-msterminal": {
source: "apache",
extensions: ["trm"]
},
"application/x-mswrite": {
source: "apache",
extensions: ["wri"]
},
"application/x-netcdf": {
source: "apache",
extensions: ["nc", "cdf"]
},
"application/x-ns-proxy-autoconfig": {
compressible: true,
extensions: ["pac"]
},
"application/x-nzb": {
source: "apache",
extensions: ["nzb"]
},
"application/x-perl": {
source: "nginx",
extensions: ["pl", "pm"]
},
"application/x-pilot": {
source: "nginx",
extensions: ["prc", "pdb"]
},
"application/x-pkcs12": {
source: "apache",
compressible: false,
extensions: ["p12", "pfx"]
},
"application/x-pkcs7-certificates": {
source: "apache",
extensions: ["p7b", "spc"]
},
"application/x-pkcs7-certreqresp": {
source: "apache",
extensions: ["p7r"]
},
"application/x-pki-message": {
source: "iana"
},
"application/x-rar-compressed": {
source: "apache",
compressible: false,
extensions: ["rar"]
},
"application/x-redhat-package-manager": {
source: "nginx",
extensions: ["rpm"]
},
"application/x-research-info-systems": {
source: "apache",
extensions: ["ris"]
},
"application/x-sea": {
source: "nginx",
extensions: ["sea"]
},
"application/x-sh": {
source: "apache",
compressible: true,
extensions: ["sh"]
},
"application/x-shar": {
source: "apache",
extensions: ["shar"]
},
"application/x-shockwave-flash": {
source: "apache",
compressible: false,
extensions: ["swf"]
},
"application/x-silverlight-app": {
source: "apache",
extensions: ["xap"]
},
"application/x-sql": {
source: "apache",
extensions: ["sql"]
},
"application/x-stuffit": {
source: "apache",
compressible: false,
extensions: ["sit"]
},
"application/x-stuffitx": {
source: "apache",
extensions: ["sitx"]
},
"application/x-subrip": {
source: "apache",
extensions: ["srt"]
},
"application/x-sv4cpio": {
source: "apache",
extensions: ["sv4cpio"]
},
"application/x-sv4crc": {
source: "apache",
extensions: ["sv4crc"]
},
"application/x-t3vm-image": {
source: "apache",
extensions: ["t3"]
},
"application/x-tads": {
source: "apache",
extensions: ["gam"]
},
"application/x-tar": {
source: "apache",
compressible: true,
extensions: ["tar"]
},
"application/x-tcl": {
source: "apache",
extensions: ["tcl", "tk"]
},
"application/x-tex": {
source: "apache",
extensions: ["tex"]
},
"application/x-tex-tfm": {
source: "apache",
extensions: ["tfm"]
},
"application/x-texinfo": {
source: "apache",
extensions: ["texinfo", "texi"]
},
"application/x-tgif": {
source: "apache",
extensions: ["obj"]
},
"application/x-ustar": {
source: "apache",
extensions: ["ustar"]
},
"application/x-virtualbox-hdd": {
compressible: true,
extensions: ["hdd"]
},
"application/x-virtualbox-ova": {
compressible: true,
extensions: ["ova"]
},
"application/x-virtualbox-ovf": {
compressible: true,
extensions: ["ovf"]
},
"application/x-virtualbox-vbox": {
compressible: true,
extensions: ["vbox"]
},
"application/x-virtualbox-vbox-extpack": {
compressible: false,
extensions: ["vbox-extpack"]
},
"application/x-virtualbox-vdi": {
compressible: true,
extensions: ["vdi"]
},
"application/x-virtualbox-vhd": {
compressible: true,
extensions: ["vhd"]
},
"application/x-virtualbox-vmdk": {
compressible: true,
extensions: ["vmdk"]
},
"application/x-wais-source": {
source: "apache",
extensions: ["src"]
},
"application/x-web-app-manifest+json": {
compressible: true,
extensions: ["webapp"]
},
"application/x-www-form-urlencoded": {
source: "iana",
compressible: true
},
"application/x-x509-ca-cert": {
source: "iana",
extensions: ["der", "crt", "pem"]
},
"application/x-x509-ca-ra-cert": {
source: "iana"
},
"application/x-x509-next-ca-cert": {
source: "iana"
},
"application/x-xfig": {
source: "apache",
extensions: ["fig"]
},
"application/x-xliff+xml": {
source: "apache",
compressible: true,
extensions: ["xlf"]
},
"application/x-xpinstall": {
source: "apache",
compressible: false,
extensions: ["xpi"]
},
"application/x-xz": {
source: "apache",
extensions: ["xz"]
},
"application/x-zip-compressed": {
extensions: ["zip"]
},
"application/x-zmachine": {
source: "apache",
extensions: ["z1", "z2", "z3", "z4", "z5", "z6", "z7", "z8"]
},
"application/x400-bp": {
source: "iana"
},
"application/xacml+xml": {
source: "iana",
compressible: true
},
"application/xaml+xml": {
source: "apache",
compressible: true,
extensions: ["xaml"]
},
"application/xcap-att+xml": {
source: "iana",
compressible: true,
extensions: ["xav"]
},
"application/xcap-caps+xml": {
source: "iana",
compressible: true,
extensions: ["xca"]
},
"application/xcap-diff+xml": {
source: "iana",
compressible: true,
extensions: ["xdf"]
},
"application/xcap-el+xml": {
source: "iana",
compressible: true,
extensions: ["xel"]
},
"application/xcap-error+xml": {
source: "iana",
compressible: true
},
"application/xcap-ns+xml": {
source: "iana",
compressible: true,
extensions: ["xns"]
},
"application/xcon-conference-info+xml": {
source: "iana",
compressible: true
},
"application/xcon-conference-info-diff+xml": {
source: "iana",
compressible: true
},
"application/xenc+xml": {
source: "iana",
compressible: true,
extensions: ["xenc"]
},
"application/xfdf": {
source: "iana",
extensions: ["xfdf"]
},
"application/xhtml+xml": {
source: "iana",
compressible: true,
extensions: ["xhtml", "xht"]
},
"application/xhtml-voice+xml": {
source: "apache",
compressible: true
},
"application/xliff+xml": {
source: "iana",
compressible: true,
extensions: ["xlf"]
},
"application/xml": {
source: "iana",
compressible: true,
extensions: ["xml", "xsl", "xsd", "rng"]
},
"application/xml-dtd": {
source: "iana",
compressible: true,
extensions: ["dtd"]
},
"application/xml-external-parsed-entity": {
source: "iana"
},
"application/xml-patch+xml": {
source: "iana",
compressible: true
},
"application/xmpp+xml": {
source: "iana",
compressible: true
},
"application/xop+xml": {
source: "iana",
compressible: true,
extensions: ["xop"]
},
"application/xproc+xml": {
source: "apache",
compressible: true,
extensions: ["xpl"]
},
"application/xslt+xml": {
source: "iana",
compressible: true,
extensions: ["xsl", "xslt"]
},
"application/xspf+xml": {
source: "apache",
compressible: true,
extensions: ["xspf"]
},
"application/xv+xml": {
source: "iana",
compressible: true,
extensions: ["mxml", "xhvml", "xvml", "xvm"]
},
"application/yaml": {
source: "iana"
},
"application/yang": {
source: "iana",
extensions: ["yang"]
},
"application/yang-data+cbor": {
source: "iana"
},
"application/yang-data+json": {
source: "iana",
compressible: true
},
"application/yang-data+xml": {
source: "iana",
compressible: true
},
"application/yang-patch+json": {
source: "iana",
compressible: true
},
"application/yang-patch+xml": {
source: "iana",
compressible: true
},
"application/yang-sid+json": {
source: "iana",
compressible: true
},
"application/yin+xml": {
source: "iana",
compressible: true,
extensions: ["yin"]
},
"application/zip": {
source: "iana",
compressible: false,
extensions: ["zip"]
},
"application/zip+dotlottie": {
extensions: ["lottie"]
},
"application/zlib": {
source: "iana"
},
"application/zstd": {
source: "iana"
},
"audio/1d-interleaved-parityfec": {
source: "iana"
},
"audio/32kadpcm": {
source: "iana"
},
"audio/3gpp": {
source: "iana",
compressible: false,
extensions: ["3gpp"]
},
"audio/3gpp2": {
source: "iana"
},
"audio/aac": {
source: "iana",
extensions: ["adts", "aac"]
},
"audio/ac3": {
source: "iana"
},
"audio/adpcm": {
source: "apache",
extensions: ["adp"]
},
"audio/amr": {
source: "iana",
extensions: ["amr"]
},
"audio/amr-wb": {
source: "iana"
},
"audio/amr-wb+": {
source: "iana"
},
"audio/aptx": {
source: "iana"
},
"audio/asc": {
source: "iana"
},
"audio/atrac-advanced-lossless": {
source: "iana"
},
"audio/atrac-x": {
source: "iana"
},
"audio/atrac3": {
source: "iana"
},
"audio/basic": {
source: "iana",
compressible: false,
extensions: ["au", "snd"]
},
"audio/bv16": {
source: "iana"
},
"audio/bv32": {
source: "iana"
},
"audio/clearmode": {
source: "iana"
},
"audio/cn": {
source: "iana"
},
"audio/dat12": {
source: "iana"
},
"audio/dls": {
source: "iana"
},
"audio/dsr-es201108": {
source: "iana"
},
"audio/dsr-es202050": {
source: "iana"
},
"audio/dsr-es202211": {
source: "iana"
},
"audio/dsr-es202212": {
source: "iana"
},
"audio/dv": {
source: "iana"
},
"audio/dvi4": {
source: "iana"
},
"audio/eac3": {
source: "iana"
},
"audio/encaprtp": {
source: "iana"
},
"audio/evrc": {
source: "iana"
},
"audio/evrc-qcp": {
source: "iana"
},
"audio/evrc0": {
source: "iana"
},
"audio/evrc1": {
source: "iana"
},
"audio/evrcb": {
source: "iana"
},
"audio/evrcb0": {
source: "iana"
},
"audio/evrcb1": {
source: "iana"
},
"audio/evrcnw": {
source: "iana"
},
"audio/evrcnw0": {
source: "iana"
},
"audio/evrcnw1": {
source: "iana"
},
"audio/evrcwb": {
source: "iana"
},
"audio/evrcwb0": {
source: "iana"
},
"audio/evrcwb1": {
source: "iana"
},
"audio/evs": {
source: "iana"
},
"audio/flac": {
source: "iana"
},
"audio/flexfec": {
source: "iana"
},
"audio/fwdred": {
source: "iana"
},
"audio/g711-0": {
source: "iana"
},
"audio/g719": {
source: "iana"
},
"audio/g722": {
source: "iana"
},
"audio/g7221": {
source: "iana"
},
"audio/g723": {
source: "iana"
},
"audio/g726-16": {
source: "iana"
},
"audio/g726-24": {
source: "iana"
},
"audio/g726-32": {
source: "iana"
},
"audio/g726-40": {
source: "iana"
},
"audio/g728": {
source: "iana"
},
"audio/g729": {
source: "iana"
},
"audio/g7291": {
source: "iana"
},
"audio/g729d": {
source: "iana"
},
"audio/g729e": {
source: "iana"
},
"audio/gsm": {
source: "iana"
},
"audio/gsm-efr": {
source: "iana"
},
"audio/gsm-hr-08": {
source: "iana"
},
"audio/ilbc": {
source: "iana"
},
"audio/ip-mr_v2.5": {
source: "iana"
},
"audio/isac": {
source: "apache"
},
"audio/l16": {
source: "iana"
},
"audio/l20": {
source: "iana"
},
"audio/l24": {
source: "iana",
compressible: false
},
"audio/l8": {
source: "iana"
},
"audio/lpc": {
source: "iana"
},
"audio/matroska": {
source: "iana"
},
"audio/melp": {
source: "iana"
},
"audio/melp1200": {
source: "iana"
},
"audio/melp2400": {
source: "iana"
},
"audio/melp600": {
source: "iana"
},
"audio/mhas": {
source: "iana"
},
"audio/midi": {
source: "apache",
extensions: ["mid", "midi", "kar", "rmi"]
},
"audio/midi-clip": {
source: "iana"
},
"audio/mobile-xmf": {
source: "iana",
extensions: ["mxmf"]
},
"audio/mp3": {
compressible: false,
extensions: ["mp3"]
},
"audio/mp4": {
source: "iana",
compressible: false,
extensions: ["m4a", "mp4a", "m4b"]
},
"audio/mp4a-latm": {
source: "iana"
},
"audio/mpa": {
source: "iana"
},
"audio/mpa-robust": {
source: "iana"
},
"audio/mpeg": {
source: "iana",
compressible: false,
extensions: ["mpga", "mp2", "mp2a", "mp3", "m2a", "m3a"]
},
"audio/mpeg4-generic": {
source: "iana"
},
"audio/musepack": {
source: "apache"
},
"audio/ogg": {
source: "iana",
compressible: false,
extensions: ["oga", "ogg", "spx", "opus"]
},
"audio/opus": {
source: "iana"
},
"audio/parityfec": {
source: "iana"
},
"audio/pcma": {
source: "iana"
},
"audio/pcma-wb": {
source: "iana"
},
"audio/pcmu": {
source: "iana"
},
"audio/pcmu-wb": {
source: "iana"
},
"audio/prs.sid": {
source: "iana"
},
"audio/qcelp": {
source: "iana"
},
"audio/raptorfec": {
source: "iana"
},
"audio/red": {
source: "iana"
},
"audio/rtp-enc-aescm128": {
source: "iana"
},
"audio/rtp-midi": {
source: "iana"
},
"audio/rtploopback": {
source: "iana"
},
"audio/rtx": {
source: "iana"
},
"audio/s3m": {
source: "apache",
extensions: ["s3m"]
},
"audio/scip": {
source: "iana"
},
"audio/silk": {
source: "apache",
extensions: ["sil"]
},
"audio/smv": {
source: "iana"
},
"audio/smv-qcp": {
source: "iana"
},
"audio/smv0": {
source: "iana"
},
"audio/sofa": {
source: "iana"
},
"audio/sp-midi": {
source: "iana"
},
"audio/speex": {
source: "iana"
},
"audio/t140c": {
source: "iana"
},
"audio/t38": {
source: "iana"
},
"audio/telephone-event": {
source: "iana"
},
"audio/tetra_acelp": {
source: "iana"
},
"audio/tetra_acelp_bb": {
source: "iana"
},
"audio/tone": {
source: "iana"
},
"audio/tsvcis": {
source: "iana"
},
"audio/uemclip": {
source: "iana"
},
"audio/ulpfec": {
source: "iana"
},
"audio/usac": {
source: "iana"
},
"audio/vdvi": {
source: "iana"
},
"audio/vmr-wb": {
source: "iana"
},
"audio/vnd.3gpp.iufp": {
source: "iana"
},
"audio/vnd.4sb": {
source: "iana"
},
"audio/vnd.audiokoz": {
source: "iana"
},
"audio/vnd.celp": {
source: "iana"
},
"audio/vnd.cisco.nse": {
source: "iana"
},
"audio/vnd.cmles.radio-events": {
source: "iana"
},
"audio/vnd.cns.anp1": {
source: "iana"
},
"audio/vnd.cns.inf1": {
source: "iana"
},
"audio/vnd.dece.audio": {
source: "iana",
extensions: ["uva", "uvva"]
},
"audio/vnd.digital-winds": {
source: "iana",
extensions: ["eol"]
},
"audio/vnd.dlna.adts": {
source: "iana"
},
"audio/vnd.dolby.heaac.1": {
source: "iana"
},
"audio/vnd.dolby.heaac.2": {
source: "iana"
},
"audio/vnd.dolby.mlp": {
source: "iana"
},
"audio/vnd.dolby.mps": {
source: "iana"
},
"audio/vnd.dolby.pl2": {
source: "iana"
},
"audio/vnd.dolby.pl2x": {
source: "iana"
},
"audio/vnd.dolby.pl2z": {
source: "iana"
},
"audio/vnd.dolby.pulse.1": {
source: "iana"
},
"audio/vnd.dra": {
source: "iana",
extensions: ["dra"]
},
"audio/vnd.dts": {
source: "iana",
extensions: ["dts"]
},
"audio/vnd.dts.hd": {
source: "iana",
extensions: ["dtshd"]
},
"audio/vnd.dts.uhd": {
source: "iana"
},
"audio/vnd.dvb.file": {
source: "iana"
},
"audio/vnd.everad.plj": {
source: "iana"
},
"audio/vnd.hns.audio": {
source: "iana"
},
"audio/vnd.lucent.voice": {
source: "iana",
extensions: ["lvp"]
},
"audio/vnd.ms-playready.media.pya": {
source: "iana",
extensions: ["pya"]
},
"audio/vnd.nokia.mobile-xmf": {
source: "iana"
},
"audio/vnd.nortel.vbk": {
source: "iana"
},
"audio/vnd.nuera.ecelp4800": {
source: "iana",
extensions: ["ecelp4800"]
},
"audio/vnd.nuera.ecelp7470": {
source: "iana",
extensions: ["ecelp7470"]
},
"audio/vnd.nuera.ecelp9600": {
source: "iana",
extensions: ["ecelp9600"]
},
"audio/vnd.octel.sbc": {
source: "iana"
},
"audio/vnd.presonus.multitrack": {
source: "iana"
},
"audio/vnd.qcelp": {
source: "apache"
},
"audio/vnd.rhetorex.32kadpcm": {
source: "iana"
},
"audio/vnd.rip": {
source: "iana",
extensions: ["rip"]
},
"audio/vnd.rn-realaudio": {
compressible: false
},
"audio/vnd.sealedmedia.softseal.mpeg": {
source: "iana"
},
"audio/vnd.vmx.cvsd": {
source: "iana"
},
"audio/vnd.wave": {
compressible: false
},
"audio/vorbis": {
source: "iana",
compressible: false
},
"audio/vorbis-config": {
source: "iana"
},
"audio/wav": {
compressible: false,
extensions: ["wav"]
},
"audio/wave": {
compressible: false,
extensions: ["wav"]
},
"audio/webm": {
source: "apache",
compressible: false,
extensions: ["weba"]
},
"audio/x-aac": {
source: "apache",
compressible: false,
extensions: ["aac"]
},
"audio/x-aiff": {
source: "apache",
extensions: ["aif", "aiff", "aifc"]
},
"audio/x-caf": {
source: "apache",
compressible: false,
extensions: ["caf"]
},
"audio/x-flac": {
source: "apache",
extensions: ["flac"]
},
"audio/x-m4a": {
source: "nginx",
extensions: ["m4a"]
},
"audio/x-matroska": {
source: "apache",
extensions: ["mka"]
},
"audio/x-mpegurl": {
source: "apache",
extensions: ["m3u"]
},
"audio/x-ms-wax": {
source: "apache",
extensions: ["wax"]
},
"audio/x-ms-wma": {
source: "apache",
extensions: ["wma"]
},
"audio/x-pn-realaudio": {
source: "apache",
extensions: ["ram", "ra"]
},
"audio/x-pn-realaudio-plugin": {
source: "apache",
extensions: ["rmp"]
},
"audio/x-realaudio": {
source: "nginx",
extensions: ["ra"]
},
"audio/x-tta": {
source: "apache"
},
"audio/x-wav": {
source: "apache",
extensions: ["wav"]
},
"audio/xm": {
source: "apache",
extensions: ["xm"]
},
"chemical/x-cdx": {
source: "apache",
extensions: ["cdx"]
},
"chemical/x-cif": {
source: "apache",
extensions: ["cif"]
},
"chemical/x-cmdf": {
source: "apache",
extensions: ["cmdf"]
},
"chemical/x-cml": {
source: "apache",
extensions: ["cml"]
},
"chemical/x-csml": {
source: "apache",
extensions: ["csml"]
},
"chemical/x-pdb": {
source: "apache"
},
"chemical/x-xyz": {
source: "apache",
extensions: ["xyz"]
},
"font/collection": {
source: "iana",
extensions: ["ttc"]
},
"font/otf": {
source: "iana",
compressible: true,
extensions: ["otf"]
},
"font/sfnt": {
source: "iana"
},
"font/ttf": {
source: "iana",
compressible: true,
extensions: ["ttf"]
},
"font/woff": {
source: "iana",
extensions: ["woff"]
},
"font/woff2": {
source: "iana",
extensions: ["woff2"]
},
"image/aces": {
source: "iana",
extensions: ["exr"]
},
"image/apng": {
source: "iana",
compressible: false,
extensions: ["apng"]
},
"image/avci": {
source: "iana",
extensions: ["avci"]
},
"image/avcs": {
source: "iana",
extensions: ["avcs"]
},
"image/avif": {
source: "iana",
compressible: false,
extensions: ["avif"]
},
"image/bmp": {
source: "iana",
compressible: true,
extensions: ["bmp", "dib"]
},
"image/cgm": {
source: "iana",
extensions: ["cgm"]
},
"image/dicom-rle": {
source: "iana",
extensions: ["drle"]
},
"image/dpx": {
source: "iana",
extensions: ["dpx"]
},
"image/emf": {
source: "iana",
extensions: ["emf"]
},
"image/fits": {
source: "iana",
extensions: ["fits"]
},
"image/g3fax": {
source: "iana",
extensions: ["g3"]
},
"image/gif": {
source: "iana",
compressible: false,
extensions: ["gif"]
},
"image/heic": {
source: "iana",
extensions: ["heic"]
},
"image/heic-sequence": {
source: "iana",
extensions: ["heics"]
},
"image/heif": {
source: "iana",
extensions: ["heif"]
},
"image/heif-sequence": {
source: "iana",
extensions: ["heifs"]
},
"image/hej2k": {
source: "iana",
extensions: ["hej2"]
},
"image/ief": {
source: "iana",
extensions: ["ief"]
},
"image/j2c": {
source: "iana"
},
"image/jaii": {
source: "iana",
extensions: ["jaii"]
},
"image/jais": {
source: "iana",
extensions: ["jais"]
},
"image/jls": {
source: "iana",
extensions: ["jls"]
},
"image/jp2": {
source: "iana",
compressible: false,
extensions: ["jp2", "jpg2"]
},
"image/jpeg": {
source: "iana",
compressible: false,
extensions: ["jpg", "jpeg", "jpe"]
},
"image/jph": {
source: "iana",
extensions: ["jph"]
},
"image/jphc": {
source: "iana",
extensions: ["jhc"]
},
"image/jpm": {
source: "iana",
compressible: false,
extensions: ["jpm", "jpgm"]
},
"image/jpx": {
source: "iana",
compressible: false,
extensions: ["jpx", "jpf"]
},
"image/jxl": {
source: "iana",
extensions: ["jxl"]
},
"image/jxr": {
source: "iana",
extensions: ["jxr"]
},
"image/jxra": {
source: "iana",
extensions: ["jxra"]
},
"image/jxrs": {
source: "iana",
extensions: ["jxrs"]
},
"image/jxs": {
source: "iana",
extensions: ["jxs"]
},
"image/jxsc": {
source: "iana",
extensions: ["jxsc"]
},
"image/jxsi": {
source: "iana",
extensions: ["jxsi"]
},
"image/jxss": {
source: "iana",
extensions: ["jxss"]
},
"image/ktx": {
source: "iana",
extensions: ["ktx"]
},
"image/ktx2": {
source: "iana",
extensions: ["ktx2"]
},
"image/naplps": {
source: "iana"
},
"image/pjpeg": {
compressible: false,
extensions: ["jfif"]
},
"image/png": {
source: "iana",
compressible: false,
extensions: ["png"]
},
"image/prs.btif": {
source: "iana",
extensions: ["btif", "btf"]
},
"image/prs.pti": {
source: "iana",
extensions: ["pti"]
},
"image/pwg-raster": {
source: "iana"
},
"image/sgi": {
source: "apache",
extensions: ["sgi"]
},
"image/svg+xml": {
source: "iana",
compressible: true,
extensions: ["svg", "svgz"]
},
"image/t38": {
source: "iana",
extensions: ["t38"]
},
"image/tiff": {
source: "iana",
compressible: false,
extensions: ["tif", "tiff"]
},
"image/tiff-fx": {
source: "iana",
extensions: ["tfx"]
},
"image/vnd.adobe.photoshop": {
source: "iana",
compressible: true,
extensions: ["psd"]
},
"image/vnd.airzip.accelerator.azv": {
source: "iana",
extensions: ["azv"]
},
"image/vnd.clip": {
source: "iana"
},
"image/vnd.cns.inf2": {
source: "iana"
},
"image/vnd.dece.graphic": {
source: "iana",
extensions: ["uvi", "uvvi", "uvg", "uvvg"]
},
"image/vnd.djvu": {
source: "iana",
extensions: ["djvu", "djv"]
},
"image/vnd.dvb.subtitle": {
source: "iana",
extensions: ["sub"]
},
"image/vnd.dwg": {
source: "iana",
extensions: ["dwg"]
},
"image/vnd.dxf": {
source: "iana",
extensions: ["dxf"]
},
"image/vnd.fastbidsheet": {
source: "iana",
extensions: ["fbs"]
},
"image/vnd.fpx": {
source: "iana",
extensions: ["fpx"]
},
"image/vnd.fst": {
source: "iana",
extensions: ["fst"]
},
"image/vnd.fujixerox.edmics-mmr": {
source: "iana",
extensions: ["mmr"]
},
"image/vnd.fujixerox.edmics-rlc": {
source: "iana",
extensions: ["rlc"]
},
"image/vnd.globalgraphics.pgb": {
source: "iana"
},
"image/vnd.microsoft.icon": {
source: "iana",
compressible: true,
extensions: ["ico"]
},
"image/vnd.mix": {
source: "iana"
},
"image/vnd.mozilla.apng": {
source: "iana"
},
"image/vnd.ms-dds": {
compressible: true,
extensions: ["dds"]
},
"image/vnd.ms-modi": {
source: "iana",
extensions: ["mdi"]
},
"image/vnd.ms-photo": {
source: "apache",
extensions: ["wdp"]
},
"image/vnd.net-fpx": {
source: "iana",
extensions: ["npx"]
},
"image/vnd.pco.b16": {
source: "iana",
extensions: ["b16"]
},
"image/vnd.radiance": {
source: "iana"
},
"image/vnd.sealed.png": {
source: "iana"
},
"image/vnd.sealedmedia.softseal.gif": {
source: "iana"
},
"image/vnd.sealedmedia.softseal.jpg": {
source: "iana"
},
"image/vnd.svf": {
source: "iana"
},
"image/vnd.tencent.tap": {
source: "iana",
extensions: ["tap"]
},
"image/vnd.valve.source.texture": {
source: "iana",
extensions: ["vtf"]
},
"image/vnd.wap.wbmp": {
source: "iana",
extensions: ["wbmp"]
},
"image/vnd.xiff": {
source: "iana",
extensions: ["xif"]
},
"image/vnd.zbrush.pcx": {
source: "iana",
extensions: ["pcx"]
},
"image/webp": {
source: "iana",
extensions: ["webp"]
},
"image/wmf": {
source: "iana",
extensions: ["wmf"]
},
"image/x-3ds": {
source: "apache",
extensions: ["3ds"]
},
"image/x-adobe-dng": {
extensions: ["dng"]
},
"image/x-cmu-raster": {
source: "apache",
extensions: ["ras"]
},
"image/x-cmx": {
source: "apache",
extensions: ["cmx"]
},
"image/x-emf": {
source: "iana"
},
"image/x-freehand": {
source: "apache",
extensions: ["fh", "fhc", "fh4", "fh5", "fh7"]
},
"image/x-icon": {
source: "apache",
compressible: true,
extensions: ["ico"]
},
"image/x-jng": {
source: "nginx",
extensions: ["jng"]
},
"image/x-mrsid-image": {
source: "apache",
extensions: ["sid"]
},
"image/x-ms-bmp": {
source: "nginx",
compressible: true,
extensions: ["bmp"]
},
"image/x-pcx": {
source: "apache",
extensions: ["pcx"]
},
"image/x-pict": {
source: "apache",
extensions: ["pic", "pct"]
},
"image/x-portable-anymap": {
source: "apache",
extensions: ["pnm"]
},
"image/x-portable-bitmap": {
source: "apache",
extensions: ["pbm"]
},
"image/x-portable-graymap": {
source: "apache",
extensions: ["pgm"]
},
"image/x-portable-pixmap": {
source: "apache",
extensions: ["ppm"]
},
"image/x-rgb": {
source: "apache",
extensions: ["rgb"]
},
"image/x-tga": {
source: "apache",
extensions: ["tga"]
},
"image/x-wmf": {
source: "iana"
},
"image/x-xbitmap": {
source: "apache",
extensions: ["xbm"]
},
"image/x-xcf": {
compressible: false
},
"image/x-xpixmap": {
source: "apache",
extensions: ["xpm"]
},
"image/x-xwindowdump": {
source: "apache",
extensions: ["xwd"]
},
"message/bhttp": {
source: "iana"
},
"message/cpim": {
source: "iana"
},
"message/delivery-status": {
source: "iana"
},
"message/disposition-notification": {
source: "iana",
extensions: [
"disposition-notification"
]
},
"message/external-body": {
source: "iana"
},
"message/feedback-report": {
source: "iana"
},
"message/global": {
source: "iana",
extensions: ["u8msg"]
},
"message/global-delivery-status": {
source: "iana",
extensions: ["u8dsn"]
},
"message/global-disposition-notification": {
source: "iana",
extensions: ["u8mdn"]
},
"message/global-headers": {
source: "iana",
extensions: ["u8hdr"]
},
"message/http": {
source: "iana",
compressible: false
},
"message/imdn+xml": {
source: "iana",
compressible: true
},
"message/mls": {
source: "iana"
},
"message/news": {
source: "apache"
},
"message/ohttp-req": {
source: "iana"
},
"message/ohttp-res": {
source: "iana"
},
"message/partial": {
source: "iana",
compressible: false
},
"message/rfc822": {
source: "iana",
compressible: true,
extensions: ["eml", "mime", "mht", "mhtml"]
},
"message/s-http": {
source: "apache"
},
"message/sip": {
source: "iana"
},
"message/sipfrag": {
source: "iana"
},
"message/tracking-status": {
source: "iana"
},
"message/vnd.si.simp": {
source: "apache"
},
"message/vnd.wfa.wsc": {
source: "iana",
extensions: ["wsc"]
},
"model/3mf": {
source: "iana",
extensions: ["3mf"]
},
"model/e57": {
source: "iana"
},
"model/gltf+json": {
source: "iana",
compressible: true,
extensions: ["gltf"]
},
"model/gltf-binary": {
source: "iana",
compressible: true,
extensions: ["glb"]
},
"model/iges": {
source: "iana",
compressible: false,
extensions: ["igs", "iges"]
},
"model/jt": {
source: "iana",
extensions: ["jt"]
},
"model/mesh": {
source: "iana",
compressible: false,
extensions: ["msh", "mesh", "silo"]
},
"model/mtl": {
source: "iana",
extensions: ["mtl"]
},
"model/obj": {
source: "iana",
extensions: ["obj"]
},
"model/prc": {
source: "iana",
extensions: ["prc"]
},
"model/step": {
source: "iana",
extensions: ["step", "stp", "stpnc", "p21", "210"]
},
"model/step+xml": {
source: "iana",
compressible: true,
extensions: ["stpx"]
},
"model/step+zip": {
source: "iana",
compressible: false,
extensions: ["stpz"]
},
"model/step-xml+zip": {
source: "iana",
compressible: false,
extensions: ["stpxz"]
},
"model/stl": {
source: "iana",
extensions: ["stl"]
},
"model/u3d": {
source: "iana",
extensions: ["u3d"]
},
"model/vnd.bary": {
source: "iana",
extensions: ["bary"]
},
"model/vnd.cld": {
source: "iana",
extensions: ["cld"]
},
"model/vnd.collada+xml": {
source: "iana",
compressible: true,
extensions: ["dae"]
},
"model/vnd.dwf": {
source: "iana",
extensions: ["dwf"]
},
"model/vnd.flatland.3dml": {
source: "iana"
},
"model/vnd.gdl": {
source: "iana",
extensions: ["gdl"]
},
"model/vnd.gs-gdl": {
source: "apache"
},
"model/vnd.gs.gdl": {
source: "iana"
},
"model/vnd.gtw": {
source: "iana",
extensions: ["gtw"]
},
"model/vnd.moml+xml": {
source: "iana",
compressible: true
},
"model/vnd.mts": {
source: "iana",
extensions: ["mts"]
},
"model/vnd.opengex": {
source: "iana",
extensions: ["ogex"]
},
"model/vnd.parasolid.transmit.binary": {
source: "iana",
extensions: ["x_b"]
},
"model/vnd.parasolid.transmit.text": {
source: "iana",
extensions: ["x_t"]
},
"model/vnd.pytha.pyox": {
source: "iana",
extensions: ["pyo", "pyox"]
},
"model/vnd.rosette.annotated-data-model": {
source: "iana"
},
"model/vnd.sap.vds": {
source: "iana",
extensions: ["vds"]
},
"model/vnd.usda": {
source: "iana",
extensions: ["usda"]
},
"model/vnd.usdz+zip": {
source: "iana",
compressible: false,
extensions: ["usdz"]
},
"model/vnd.valve.source.compiled-map": {
source: "iana",
extensions: ["bsp"]
},
"model/vnd.vtu": {
source: "iana",
extensions: ["vtu"]
},
"model/vrml": {
source: "iana",
compressible: false,
extensions: ["wrl", "vrml"]
},
"model/x3d+binary": {
source: "apache",
compressible: false,
extensions: ["x3db", "x3dbz"]
},
"model/x3d+fastinfoset": {
source: "iana",
extensions: ["x3db"]
},
"model/x3d+vrml": {
source: "apache",
compressible: false,
extensions: ["x3dv", "x3dvz"]
},
"model/x3d+xml": {
source: "iana",
compressible: true,
extensions: ["x3d", "x3dz"]
},
"model/x3d-vrml": {
source: "iana",
extensions: ["x3dv"]
},
"multipart/alternative": {
source: "iana",
compressible: false
},
"multipart/appledouble": {
source: "iana"
},
"multipart/byteranges": {
source: "iana"
},
"multipart/digest": {
source: "iana"
},
"multipart/encrypted": {
source: "iana",
compressible: false
},
"multipart/form-data": {
source: "iana",
compressible: false
},
"multipart/header-set": {
source: "iana"
},
"multipart/mixed": {
source: "iana"
},
"multipart/multilingual": {
source: "iana"
},
"multipart/parallel": {
source: "iana"
},
"multipart/related": {
source: "iana",
compressible: false
},
"multipart/report": {
source: "iana"
},
"multipart/signed": {
source: "iana",
compressible: false
},
"multipart/vnd.bint.med-plus": {
source: "iana"
},
"multipart/voice-message": {
source: "iana"
},
"multipart/x-mixed-replace": {
source: "iana"
},
"text/1d-interleaved-parityfec": {
source: "iana"
},
"text/cache-manifest": {
source: "iana",
compressible: true,
extensions: ["appcache", "manifest"]
},
"text/calendar": {
source: "iana",
extensions: ["ics", "ifb"]
},
"text/calender": {
compressible: true
},
"text/cmd": {
compressible: true
},
"text/coffeescript": {
extensions: ["coffee", "litcoffee"]
},
"text/cql": {
source: "iana"
},
"text/cql-expression": {
source: "iana"
},
"text/cql-identifier": {
source: "iana"
},
"text/css": {
source: "iana",
charset: "UTF-8",
compressible: true,
extensions: ["css"]
},
"text/csv": {
source: "iana",
compressible: true,
extensions: ["csv"]
},
"text/csv-schema": {
source: "iana"
},
"text/directory": {
source: "iana"
},
"text/dns": {
source: "iana"
},
"text/ecmascript": {
source: "apache"
},
"text/encaprtp": {
source: "iana"
},
"text/enriched": {
source: "iana"
},
"text/fhirpath": {
source: "iana"
},
"text/flexfec": {
source: "iana"
},
"text/fwdred": {
source: "iana"
},
"text/gff3": {
source: "iana"
},
"text/grammar-ref-list": {
source: "iana"
},
"text/hl7v2": {
source: "iana"
},
"text/html": {
source: "iana",
compressible: true,
extensions: ["html", "htm", "shtml"]
},
"text/jade": {
extensions: ["jade"]
},
"text/javascript": {
source: "iana",
charset: "UTF-8",
compressible: true,
extensions: ["js", "mjs"]
},
"text/jcr-cnd": {
source: "iana"
},
"text/jsx": {
compressible: true,
extensions: ["jsx"]
},
"text/less": {
compressible: true,
extensions: ["less"]
},
"text/markdown": {
source: "iana",
compressible: true,
extensions: ["md", "markdown"]
},
"text/mathml": {
source: "nginx",
extensions: ["mml"]
},
"text/mdx": {
compressible: true,
extensions: ["mdx"]
},
"text/mizar": {
source: "iana"
},
"text/n3": {
source: "iana",
charset: "UTF-8",
compressible: true,
extensions: ["n3"]
},
"text/parameters": {
source: "iana",
charset: "UTF-8"
},
"text/parityfec": {
source: "iana"
},
"text/plain": {
source: "iana",
compressible: true,
extensions: ["txt", "text", "conf", "def", "list", "log", "in", "ini"]
},
"text/provenance-notation": {
source: "iana",
charset: "UTF-8"
},
"text/prs.fallenstein.rst": {
source: "iana"
},
"text/prs.lines.tag": {
source: "iana",
extensions: ["dsc"]
},
"text/prs.prop.logic": {
source: "iana"
},
"text/prs.texi": {
source: "iana"
},
"text/raptorfec": {
source: "iana"
},
"text/red": {
source: "iana"
},
"text/rfc822-headers": {
source: "iana"
},
"text/richtext": {
source: "iana",
compressible: true,
extensions: ["rtx"]
},
"text/rtf": {
source: "iana",
compressible: true,
extensions: ["rtf"]
},
"text/rtp-enc-aescm128": {
source: "iana"
},
"text/rtploopback": {
source: "iana"
},
"text/rtx": {
source: "iana"
},
"text/sgml": {
source: "iana",
extensions: ["sgml", "sgm"]
},
"text/shaclc": {
source: "iana"
},
"text/shex": {
source: "iana",
extensions: ["shex"]
},
"text/slim": {
extensions: ["slim", "slm"]
},
"text/spdx": {
source: "iana",
extensions: ["spdx"]
},
"text/strings": {
source: "iana"
},
"text/stylus": {
extensions: ["stylus", "styl"]
},
"text/t140": {
source: "iana"
},
"text/tab-separated-values": {
source: "iana",
compressible: true,
extensions: ["tsv"]
},
"text/troff": {
source: "iana",
extensions: ["t", "tr", "roff", "man", "me", "ms"]
},
"text/turtle": {
source: "iana",
charset: "UTF-8",
extensions: ["ttl"]
},
"text/ulpfec": {
source: "iana"
},
"text/uri-list": {
source: "iana",
compressible: true,
extensions: ["uri", "uris", "urls"]
},
"text/vcard": {
source: "iana",
compressible: true,
extensions: ["vcard"]
},
"text/vnd.a": {
source: "iana"
},
"text/vnd.abc": {
source: "iana"
},
"text/vnd.ascii-art": {
source: "iana"
},
"text/vnd.curl": {
source: "iana",
extensions: ["curl"]
},
"text/vnd.curl.dcurl": {
source: "apache",
extensions: ["dcurl"]
},
"text/vnd.curl.mcurl": {
source: "apache",
extensions: ["mcurl"]
},
"text/vnd.curl.scurl": {
source: "apache",
extensions: ["scurl"]
},
"text/vnd.debian.copyright": {
source: "iana",
charset: "UTF-8"
},
"text/vnd.dmclientscript": {
source: "iana"
},
"text/vnd.dvb.subtitle": {
source: "iana",
extensions: ["sub"]
},
"text/vnd.esmertec.theme-descriptor": {
source: "iana",
charset: "UTF-8"
},
"text/vnd.exchangeable": {
source: "iana"
},
"text/vnd.familysearch.gedcom": {
source: "iana",
extensions: ["ged"]
},
"text/vnd.ficlab.flt": {
source: "iana"
},
"text/vnd.fly": {
source: "iana",
extensions: ["fly"]
},
"text/vnd.fmi.flexstor": {
source: "iana",
extensions: ["flx"]
},
"text/vnd.gml": {
source: "iana"
},
"text/vnd.graphviz": {
source: "iana",
extensions: ["gv"]
},
"text/vnd.hans": {
source: "iana"
},
"text/vnd.hgl": {
source: "iana"
},
"text/vnd.in3d.3dml": {
source: "iana",
extensions: ["3dml"]
},
"text/vnd.in3d.spot": {
source: "iana",
extensions: ["spot"]
},
"text/vnd.iptc.newsml": {
source: "iana"
},
"text/vnd.iptc.nitf": {
source: "iana"
},
"text/vnd.latex-z": {
source: "iana"
},
"text/vnd.motorola.reflex": {
source: "iana"
},
"text/vnd.ms-mediapackage": {
source: "iana"
},
"text/vnd.net2phone.commcenter.command": {
source: "iana"
},
"text/vnd.radisys.msml-basic-layout": {
source: "iana"
},
"text/vnd.senx.warpscript": {
source: "iana"
},
"text/vnd.si.uricatalogue": {
source: "apache"
},
"text/vnd.sosi": {
source: "iana"
},
"text/vnd.sun.j2me.app-descriptor": {
source: "iana",
charset: "UTF-8",
extensions: ["jad"]
},
"text/vnd.trolltech.linguist": {
source: "iana",
charset: "UTF-8"
},
"text/vnd.vcf": {
source: "iana"
},
"text/vnd.wap.si": {
source: "iana"
},
"text/vnd.wap.sl": {
source: "iana"
},
"text/vnd.wap.wml": {
source: "iana",
extensions: ["wml"]
},
"text/vnd.wap.wmlscript": {
source: "iana",
extensions: ["wmls"]
},
"text/vnd.zoo.kcl": {
source: "iana"
},
"text/vtt": {
source: "iana",
charset: "UTF-8",
compressible: true,
extensions: ["vtt"]
},
"text/wgsl": {
source: "iana",
extensions: ["wgsl"]
},
"text/x-asm": {
source: "apache",
extensions: ["s", "asm"]
},
"text/x-c": {
source: "apache",
extensions: ["c", "cc", "cxx", "cpp", "h", "hh", "dic"]
},
"text/x-component": {
source: "nginx",
extensions: ["htc"]
},
"text/x-fortran": {
source: "apache",
extensions: ["f", "for", "f77", "f90"]
},
"text/x-gwt-rpc": {
compressible: true
},
"text/x-handlebars-template": {
extensions: ["hbs"]
},
"text/x-java-source": {
source: "apache",
extensions: ["java"]
},
"text/x-jquery-tmpl": {
compressible: true
},
"text/x-lua": {
extensions: ["lua"]
},
"text/x-markdown": {
compressible: true,
extensions: ["mkd"]
},
"text/x-nfo": {
source: "apache",
extensions: ["nfo"]
},
"text/x-opml": {
source: "apache",
extensions: ["opml"]
},
"text/x-org": {
compressible: true,
extensions: ["org"]
},
"text/x-pascal": {
source: "apache",
extensions: ["p", "pas"]
},
"text/x-processing": {
compressible: true,
extensions: ["pde"]
},
"text/x-sass": {
extensions: ["sass"]
},
"text/x-scss": {
extensions: ["scss"]
},
"text/x-setext": {
source: "apache",
extensions: ["etx"]
},
"text/x-sfv": {
source: "apache",
extensions: ["sfv"]
},
"text/x-suse-ymp": {
compressible: true,
extensions: ["ymp"]
},
"text/x-uuencode": {
source: "apache",
extensions: ["uu"]
},
"text/x-vcalendar": {
source: "apache",
extensions: ["vcs"]
},
"text/x-vcard": {
source: "apache",
extensions: ["vcf"]
},
"text/xml": {
source: "iana",
compressible: true,
extensions: ["xml"]
},
"text/xml-external-parsed-entity": {
source: "iana"
},
"text/yaml": {
compressible: true,
extensions: ["yaml", "yml"]
},
"video/1d-interleaved-parityfec": {
source: "iana"
},
"video/3gpp": {
source: "iana",
extensions: ["3gp", "3gpp"]
},
"video/3gpp-tt": {
source: "iana"
},
"video/3gpp2": {
source: "iana",
extensions: ["3g2"]
},
"video/av1": {
source: "iana"
},
"video/bmpeg": {
source: "iana"
},
"video/bt656": {
source: "iana"
},
"video/celb": {
source: "iana"
},
"video/dv": {
source: "iana"
},
"video/encaprtp": {
source: "iana"
},
"video/evc": {
source: "iana"
},
"video/ffv1": {
source: "iana"
},
"video/flexfec": {
source: "iana"
},
"video/h261": {
source: "iana",
extensions: ["h261"]
},
"video/h263": {
source: "iana",
extensions: ["h263"]
},
"video/h263-1998": {
source: "iana"
},
"video/h263-2000": {
source: "iana"
},
"video/h264": {
source: "iana",
extensions: ["h264"]
},
"video/h264-rcdo": {
source: "iana"
},
"video/h264-svc": {
source: "iana"
},
"video/h265": {
source: "iana"
},
"video/h266": {
source: "iana"
},
"video/iso.segment": {
source: "iana",
extensions: ["m4s"]
},
"video/jpeg": {
source: "iana",
extensions: ["jpgv"]
},
"video/jpeg2000": {
source: "iana"
},
"video/jpm": {
source: "apache",
extensions: ["jpm", "jpgm"]
},
"video/jxsv": {
source: "iana"
},
"video/lottie+json": {
source: "iana",
compressible: true
},
"video/matroska": {
source: "iana"
},
"video/matroska-3d": {
source: "iana"
},
"video/mj2": {
source: "iana",
extensions: ["mj2", "mjp2"]
},
"video/mp1s": {
source: "iana"
},
"video/mp2p": {
source: "iana"
},
"video/mp2t": {
source: "iana",
extensions: ["ts", "m2t", "m2ts", "mts"]
},
"video/mp4": {
source: "iana",
compressible: false,
extensions: ["mp4", "mp4v", "mpg4"]
},
"video/mp4v-es": {
source: "iana"
},
"video/mpeg": {
source: "iana",
compressible: false,
extensions: ["mpeg", "mpg", "mpe", "m1v", "m2v"]
},
"video/mpeg4-generic": {
source: "iana"
},
"video/mpv": {
source: "iana"
},
"video/nv": {
source: "iana"
},
"video/ogg": {
source: "iana",
compressible: false,
extensions: ["ogv"]
},
"video/parityfec": {
source: "iana"
},
"video/pointer": {
source: "iana"
},
"video/quicktime": {
source: "iana",
compressible: false,
extensions: ["qt", "mov"]
},
"video/raptorfec": {
source: "iana"
},
"video/raw": {
source: "iana"
},
"video/rtp-enc-aescm128": {
source: "iana"
},
"video/rtploopback": {
source: "iana"
},
"video/rtx": {
source: "iana"
},
"video/scip": {
source: "iana"
},
"video/smpte291": {
source: "iana"
},
"video/smpte292m": {
source: "iana"
},
"video/ulpfec": {
source: "iana"
},
"video/vc1": {
source: "iana"
},
"video/vc2": {
source: "iana"
},
"video/vnd.cctv": {
source: "iana"
},
"video/vnd.dece.hd": {
source: "iana",
extensions: ["uvh", "uvvh"]
},
"video/vnd.dece.mobile": {
source: "iana",
extensions: ["uvm", "uvvm"]
},
"video/vnd.dece.mp4": {
source: "iana"
},
"video/vnd.dece.pd": {
source: "iana",
extensions: ["uvp", "uvvp"]
},
"video/vnd.dece.sd": {
source: "iana",
extensions: ["uvs", "uvvs"]
},
"video/vnd.dece.video": {
source: "iana",
extensions: ["uvv", "uvvv"]
},
"video/vnd.directv.mpeg": {
source: "iana"
},
"video/vnd.directv.mpeg-tts": {
source: "iana"
},
"video/vnd.dlna.mpeg-tts": {
source: "iana"
},
"video/vnd.dvb.file": {
source: "iana",
extensions: ["dvb"]
},
"video/vnd.fvt": {
source: "iana",
extensions: ["fvt"]
},
"video/vnd.hns.video": {
source: "iana"
},
"video/vnd.iptvforum.1dparityfec-1010": {
source: "iana"
},
"video/vnd.iptvforum.1dparityfec-2005": {
source: "iana"
},
"video/vnd.iptvforum.2dparityfec-1010": {
source: "iana"
},
"video/vnd.iptvforum.2dparityfec-2005": {
source: "iana"
},
"video/vnd.iptvforum.ttsavc": {
source: "iana"
},
"video/vnd.iptvforum.ttsmpeg2": {
source: "iana"
},
"video/vnd.motorola.video": {
source: "iana"
},
"video/vnd.motorola.videop": {
source: "iana"
},
"video/vnd.mpegurl": {
source: "iana",
extensions: ["mxu", "m4u"]
},
"video/vnd.ms-playready.media.pyv": {
source: "iana",
extensions: ["pyv"]
},
"video/vnd.nokia.interleaved-multimedia": {
source: "iana"
},
"video/vnd.nokia.mp4vr": {
source: "iana"
},
"video/vnd.nokia.videovoip": {
source: "iana"
},
"video/vnd.objectvideo": {
source: "iana"
},
"video/vnd.planar": {
source: "iana"
},
"video/vnd.radgamettools.bink": {
source: "iana"
},
"video/vnd.radgamettools.smacker": {
source: "apache"
},
"video/vnd.sealed.mpeg1": {
source: "iana"
},
"video/vnd.sealed.mpeg4": {
source: "iana"
},
"video/vnd.sealed.swf": {
source: "iana"
},
"video/vnd.sealedmedia.softseal.mov": {
source: "iana"
},
"video/vnd.uvvu.mp4": {
source: "iana",
extensions: ["uvu", "uvvu"]
},
"video/vnd.vivo": {
source: "iana",
extensions: ["viv"]
},
"video/vnd.youtube.yt": {
source: "iana"
},
"video/vp8": {
source: "iana"
},
"video/vp9": {
source: "iana"
},
"video/webm": {
source: "apache",
compressible: false,
extensions: ["webm"]
},
"video/x-f4v": {
source: "apache",
extensions: ["f4v"]
},
"video/x-fli": {
source: "apache",
extensions: ["fli"]
},
"video/x-flv": {
source: "apache",
compressible: false,
extensions: ["flv"]
},
"video/x-m4v": {
source: "apache",
extensions: ["m4v"]
},
"video/x-matroska": {
source: "apache",
compressible: false,
extensions: ["mkv", "mk3d", "mks"]
},
"video/x-mng": {
source: "apache",
extensions: ["mng"]
},
"video/x-ms-asf": {
source: "apache",
extensions: ["asf", "asx"]
},
"video/x-ms-vob": {
source: "apache",
extensions: ["vob"]
},
"video/x-ms-wm": {
source: "apache",
extensions: ["wm"]
},
"video/x-ms-wmv": {
source: "apache",
compressible: false,
extensions: ["wmv"]
},
"video/x-ms-wmx": {
source: "apache",
extensions: ["wmx"]
},
"video/x-ms-wvx": {
source: "apache",
extensions: ["wvx"]
},
"video/x-msvideo": {
source: "apache",
extensions: ["avi"]
},
"video/x-sgi-movie": {
source: "apache",
extensions: ["movie"]
},
"video/x-smv": {
source: "apache",
extensions: ["smv"]
},
"x-conference/x-cooltalk": {
source: "apache",
extensions: ["ice"]
},
"x-shader/x-fragment": {
compressible: true
},
"x-shader/x-vertex": {
compressible: true
}
};
}
});
var require_mime_db2 = __commonJS2({
"node_modules/type-is/node_modules/mime-db/index.js"(exports2, module2) {
module2.exports = require_db2();
}
});
var require_mimeScore = __commonJS2({
"node_modules/type-is/node_modules/mime-types/mimeScore.js"(exports2, module2) {
var FACET_SCORES = {
"prs.": 100,
"x-": 200,
"x.": 300,
"vnd.": 400,
default: 900
};
var SOURCE_SCORES = {
nginx: 10,
apache: 20,
iana: 40,
default: 30
// definitions added by `jshttp/mime-db` project?
};
var TYPE_SCORES = {
// prefer application/xml over text/xml
// prefer application/rtf over text/rtf
application: 1,
// prefer font/woff over application/font-woff
font: 2,
default: 0
};
module2.exports = function mimeScore(mimeType, source = "default") {
if (mimeType === "application/octet-stream") {
return 0;
}
const [type, subtype] = mimeType.split("/");
const facet = subtype.replace(/(\.|x-).*/, "$1");
const facetScore = FACET_SCORES[facet] || FACET_SCORES.default;
const sourceScore = SOURCE_SCORES[source] || SOURCE_SCORES.default;
const typeScore = TYPE_SCORES[type] || TYPE_SCORES.default;
const lengthScore = 1 - mimeType.length / 100;
return facetScore + sourceScore + typeScore + lengthScore;
};
}
});
var require_mime_types2 = __commonJS2({
"node_modules/type-is/node_modules/mime-types/index.js"(exports2) {
"use strict";
var db = require_mime_db2();
var extname = require("path").extname;
var mimeScore = require_mimeScore();
var EXTRACT_TYPE_REGEXP = /^\s*([^;\s]*)(?:;|\s|$)/;
var TEXT_TYPE_REGEXP = /^text\//i;
exports2.charset = charset;
exports2.charsets = { lookup: charset };
exports2.contentType = contentType2;
exports2.extension = extension;
exports2.extensions = /* @__PURE__ */ Object.create(null);
exports2.lookup = lookup;
exports2.types = /* @__PURE__ */ Object.create(null);
exports2._extensionConflicts = [];
populateMaps(exports2.extensions, exports2.types);
function charset(type) {
if (!type || typeof type !== "string") {
return false;
}
var match = EXTRACT_TYPE_REGEXP.exec(type);
var mime = match && db[match[1].toLowerCase()];
if (mime && mime.charset) {
return mime.charset;
}
if (match && TEXT_TYPE_REGEXP.test(match[1])) {
return "UTF-8";
}
return false;
}
function contentType2(str) {
if (!str || typeof str !== "string") {
return false;
}
var mime = str.indexOf("/") === -1 ? exports2.lookup(str) : str;
if (!mime) {
return false;
}
if (mime.indexOf("charset") === -1) {
var charset2 = exports2.charset(mime);
if (charset2) mime += "; charset=" + charset2.toLowerCase();
}
return mime;
}
function extension(type) {
if (!type || typeof type !== "string") {
return false;
}
var match = EXTRACT_TYPE_REGEXP.exec(type);
var exts = match && exports2.extensions[match[1].toLowerCase()];
if (!exts || !exts.length) {
return false;
}
return exts[0];
}
function lookup(path) {
if (!path || typeof path !== "string") {
return false;
}
var extension2 = extname("x." + path).toLowerCase().slice(1);
if (!extension2) {
return false;
}
return exports2.types[extension2] || false;
}
function populateMaps(extensions, types) {
Object.keys(db).forEach(function forEachMimeType(type) {
var mime = db[type];
var exts = mime.extensions;
if (!exts || !exts.length) {
return;
}
extensions[type] = exts;
for (var i = 0; i < exts.length; i++) {
var extension2 = exts[i];
types[extension2] = _preferredType(extension2, types[extension2], type);
const legacyType = _preferredTypeLegacy(
extension2,
types[extension2],
type
);
if (legacyType !== types[extension2]) {
exports2._extensionConflicts.push([extension2, legacyType, types[extension2]]);
}
}
});
}
function _preferredType(ext, type0, type1) {
var score0 = type0 ? mimeScore(type0, db[type0].source) : 0;
var score1 = type1 ? mimeScore(type1, db[type1].source) : 0;
return score0 > score1 ? type0 : type1;
}
function _preferredTypeLegacy(ext, type0, type1) {
var SOURCE_RANK = ["nginx", "apache", void 0, "iana"];
var score0 = type0 ? SOURCE_RANK.indexOf(db[type0].source) : 0;
var score1 = type1 ? SOURCE_RANK.indexOf(db[type1].source) : 0;
if (exports2.types[extension] !== "application/octet-stream" && (score0 > score1 || score0 === score1 && exports2.types[extension]?.slice(0, 12) === "application/")) {
return type0;
}
return score0 > score1 ? type0 : type1;
}
}
});
var require_media_typer = __commonJS2({
"node_modules/media-typer/index.js"(exports2) {
"use strict";
var SUBTYPE_NAME_REGEXP = /^[A-Za-z0-9][A-Za-z0-9!#$&^_.-]{0,126}$/;
var TYPE_NAME_REGEXP = /^[A-Za-z0-9][A-Za-z0-9!#$&^_-]{0,126}$/;
var TYPE_REGEXP = /^ *([A-Za-z0-9][A-Za-z0-9!#$&^_-]{0,126})\/([A-Za-z0-9][A-Za-z0-9!#$&^_.+-]{0,126}) *$/;
exports2.format = format;
exports2.parse = parse8;
exports2.test = test2;
function format(obj) {
if (!obj || typeof obj !== "object") {
throw new TypeError("argument obj is required");
}
var subtype = obj.subtype;
var suffix = obj.suffix;
var type = obj.type;
if (!type || !TYPE_NAME_REGEXP.test(type)) {
throw new TypeError("invalid type");
}
if (!subtype || !SUBTYPE_NAME_REGEXP.test(subtype)) {
throw new TypeError("invalid subtype");
}
var string = type + "/" + subtype;
if (suffix) {
if (!TYPE_NAME_REGEXP.test(suffix)) {
throw new TypeError("invalid suffix");
}
string += "+" + suffix;
}
return string;
}
function test2(string) {
if (!string) {
throw new TypeError("argument string is required");
}
if (typeof string !== "string") {
throw new TypeError("argument string is required to be a string");
}
return TYPE_REGEXP.test(string.toLowerCase());
}
function parse8(string) {
if (!string) {
throw new TypeError("argument string is required");
}
if (typeof string !== "string") {
throw new TypeError("argument string is required to be a string");
}
var match = TYPE_REGEXP.exec(string.toLowerCase());
if (!match) {
throw new TypeError("invalid media type");
}
var type = match[1];
var subtype = match[2];
var suffix;
var index2 = subtype.lastIndexOf("+");
if (index2 !== -1) {
suffix = subtype.substr(index2 + 1);
subtype = subtype.substr(0, index2);
}
return new MediaType(type, subtype, suffix);
}
function MediaType(type, subtype, suffix) {
this.type = type;
this.subtype = subtype;
this.suffix = suffix;
}
}
});
var require_type_is = __commonJS2({
"node_modules/type-is/index.js"(exports2, module2) {
"use strict";
var contentType2 = require_content_type();
var mime = require_mime_types2();
var typer = require_media_typer();
module2.exports = typeofrequest;
module2.exports.is = typeis;
module2.exports.hasBody = hasbody;
module2.exports.normalize = normalize;
module2.exports.match = mimeMatch;
function typeis(value, types_) {
var i;
var types = types_;
var val2 = tryNormalizeType(value);
if (!val2) {
return false;
}
if (types && !Array.isArray(types)) {
types = new Array(arguments.length - 1);
for (i = 0; i < types.length; i++) {
types[i] = arguments[i + 1];
}
}
if (!types || !types.length) {
return val2;
}
var type;
for (i = 0; i < types.length; i++) {
if (mimeMatch(normalize(type = types[i]), val2)) {
return type[0] === "+" || type.indexOf("*") !== -1 ? val2 : type;
}
}
return false;
}
function hasbody(req) {
return req.headers["transfer-encoding"] !== void 0 || !isNaN(req.headers["content-length"]);
}
function typeofrequest(req, types_) {
if (!hasbody(req)) return null;
var types = arguments.length > 2 ? Array.prototype.slice.call(arguments, 1) : types_;
var value = req.headers["content-type"];
return typeis(value, types);
}
function normalize(type) {
if (typeof type !== "string") {
return false;
}
switch (type) {
case "urlencoded":
return "application/x-www-form-urlencoded";
case "multipart":
return "multipart/*";
}
if (type[0] === "+") {
return "*/*" + type;
}
return type.indexOf("/") === -1 ? mime.lookup(type) : type;
}
function mimeMatch(expected, actual) {
if (expected === false) {
return false;
}
var actualParts = actual.split("/");
var expectedParts = expected.split("/");
if (actualParts.length !== 2 || expectedParts.length !== 2) {
return false;
}
if (expectedParts[0] !== "*" && expectedParts[0] !== actualParts[0]) {
return false;
}
if (expectedParts[1].slice(0, 2) === "*+") {
return expectedParts[1].length <= actualParts[1].length + 1 && expectedParts[1].slice(1) === actualParts[1].slice(1 - expectedParts[1].length);
}
if (expectedParts[1] !== "*" && expectedParts[1] !== actualParts[1]) {
return false;
}
return true;
}
function normalizeType(value) {
var type = contentType2.parse(value).type;
return typer.test(type) ? type : null;
}
function tryNormalizeType(value) {
try {
return value ? normalizeType(value) : null;
} catch (err2) {
return null;
}
}
}
});
var require_utils3 = __commonJS2({
"node_modules/body-parser/lib/utils.js"(exports2, module2) {
"use strict";
var bytes = require_bytes();
var contentType2 = require_content_type();
var typeis = require_type_is();
module2.exports = {
getCharset,
normalizeOptions
};
function getCharset(req) {
try {
return (contentType2.parse(req).parameters.charset || "").toLowerCase();
} catch {
return void 0;
}
}
function typeChecker(type) {
return function checkType(req) {
return Boolean(typeis(req, type));
};
}
function normalizeOptions(options, defaultType) {
if (!defaultType) {
throw new TypeError("defaultType must be provided");
}
var inflate = options?.inflate !== false;
var limit = typeof options?.limit !== "number" ? bytes.parse(options?.limit || "100kb") : options?.limit;
var type = options?.type || defaultType;
var verify = options?.verify || false;
if (verify !== false && typeof verify !== "function") {
throw new TypeError("option verify must be function");
}
var shouldParse = typeof type !== "function" ? typeChecker(type) : type;
return {
inflate,
limit,
verify,
shouldParse
};
}
}
});
var require_json = __commonJS2({
"node_modules/body-parser/lib/types/json.js"(exports2, module2) {
"use strict";
var createError = require_http_errors();
var debug = require_src2()("body-parser:json");
var isFinished = require_on_finished().isFinished;
var read = require_read();
var typeis = require_type_is();
var { getCharset, normalizeOptions } = require_utils3();
module2.exports = json;
var FIRST_CHAR_REGEXP = /^[\x20\x09\x0a\x0d]*([^\x20\x09\x0a\x0d])/;
var JSON_SYNTAX_CHAR = "#";
var JSON_SYNTAX_REGEXP = /#+/g;
function json(options) {
var { inflate, limit, verify, shouldParse } = normalizeOptions(options, "application/json");
var reviver = options?.reviver;
var strict = options?.strict !== false;
function parse8(body) {
if (body.length === 0) {
return {};
}
if (strict) {
var first2 = firstchar(body);
if (first2 !== "{" && first2 !== "[") {
debug("strict violation");
throw createStrictSyntaxError(body, first2);
}
}
try {
debug("parse json");
return JSON.parse(body, reviver);
} catch (e) {
throw normalizeJsonSyntaxError(e, {
message: e.message,
stack: e.stack
});
}
}
return function jsonParser(req, res, next2) {
if (isFinished(req)) {
debug("body already parsed");
next2();
return;
}
if (!("body" in req)) {
req.body = void 0;
}
if (!typeis.hasBody(req)) {
debug("skip empty body");
next2();
return;
}
debug("content-type %j", req.headers["content-type"]);
if (!shouldParse(req)) {
debug("skip parsing");
next2();
return;
}
var charset = getCharset(req) || "utf-8";
if (charset.slice(0, 4) !== "utf-") {
debug("invalid charset");
next2(createError(415, 'unsupported charset "' + charset.toUpperCase() + '"', {
charset,
type: "charset.unsupported"
}));
return;
}
read(req, res, next2, parse8, debug, {
encoding: charset,
inflate,
limit,
verify
});
};
}
function createStrictSyntaxError(str, char) {
var index2 = str.indexOf(char);
var partial = "";
if (index2 !== -1) {
partial = str.substring(0, index2) + JSON_SYNTAX_CHAR;
for (var i = index2 + 1; i < str.length; i++) {
partial += JSON_SYNTAX_CHAR;
}
}
try {
JSON.parse(partial);
throw new SyntaxError("strict violation");
} catch (e) {
return normalizeJsonSyntaxError(e, {
message: e.message.replace(JSON_SYNTAX_REGEXP, function(placeholder) {
return str.substring(index2, index2 + placeholder.length);
}),
stack: e.stack
});
}
}
function firstchar(str) {
var match = FIRST_CHAR_REGEXP.exec(str);
return match ? match[1] : void 0;
}
function normalizeJsonSyntaxError(error, obj) {
var keys = Object.getOwnPropertyNames(error);
for (var i = 0; i < keys.length; i++) {
var key = keys[i];
if (key !== "stack" && key !== "message") {
delete error[key];
}
}
error.stack = obj.stack.replace(error.message, obj.message);
error.message = obj.message;
return error;
}
}
});
var require_raw = __commonJS2({
"node_modules/body-parser/lib/types/raw.js"(exports2, module2) {
"use strict";
var debug = require_src2()("body-parser:raw");
var isFinished = require_on_finished().isFinished;
var read = require_read();
var typeis = require_type_is();
var { normalizeOptions } = require_utils3();
module2.exports = raw;
function raw(options) {
var { inflate, limit, verify, shouldParse } = normalizeOptions(options, "application/octet-stream");
function parse8(buf) {
return buf;
}
return function rawParser(req, res, next2) {
if (isFinished(req)) {
debug("body already parsed");
next2();
return;
}
if (!("body" in req)) {
req.body = void 0;
}
if (!typeis.hasBody(req)) {
debug("skip empty body");
next2();
return;
}
debug("content-type %j", req.headers["content-type"]);
if (!shouldParse(req)) {
debug("skip parsing");
next2();
return;
}
read(req, res, next2, parse8, debug, {
encoding: null,
inflate,
limit,
verify
});
};
}
}
});
var require_text = __commonJS2({
"node_modules/body-parser/lib/types/text.js"(exports2, module2) {
"use strict";
var debug = require_src2()("body-parser:text");
var isFinished = require_on_finished().isFinished;
var read = require_read();
var typeis = require_type_is();
var { getCharset, normalizeOptions } = require_utils3();
module2.exports = text3;
function text3(options) {
var { inflate, limit, verify, shouldParse } = normalizeOptions(options, "text/plain");
var defaultCharset = options?.defaultCharset || "utf-8";
function parse8(buf) {
return buf;
}
return function textParser(req, res, next2) {
if (isFinished(req)) {
debug("body already parsed");
next2();
return;
}
if (!("body" in req)) {
req.body = void 0;
}
if (!typeis.hasBody(req)) {
debug("skip empty body");
next2();
return;
}
debug("content-type %j", req.headers["content-type"]);
if (!shouldParse(req)) {
debug("skip parsing");
next2();
return;
}
var charset = getCharset(req) || defaultCharset;
read(req, res, next2, parse8, debug, {
encoding: charset,
inflate,
limit,
verify
});
};
}
}
});
var require_type2 = __commonJS2({
"node_modules/es-errors/type.js"(exports2, module2) {
"use strict";
module2.exports = TypeError;
}
});
var require_util_inspect = __commonJS2({
"node_modules/object-inspect/util.inspect.js"(exports2, module2) {
module2.exports = require("util").inspect;
}
});
var require_object_inspect = __commonJS2({
"node_modules/object-inspect/index.js"(exports2, module2) {
var hasMap = typeof Map === "function" && Map.prototype;
var mapSizeDescriptor = Object.getOwnPropertyDescriptor && hasMap ? Object.getOwnPropertyDescriptor(Map.prototype, "size") : null;
var mapSize = hasMap && mapSizeDescriptor && typeof mapSizeDescriptor.get === "function" ? mapSizeDescriptor.get : null;
var mapForEach = hasMap && Map.prototype.forEach;
var hasSet = typeof Set === "function" && Set.prototype;
var setSizeDescriptor = Object.getOwnPropertyDescriptor && hasSet ? Object.getOwnPropertyDescriptor(Set.prototype, "size") : null;
var setSize = hasSet && setSizeDescriptor && typeof setSizeDescriptor.get === "function" ? setSizeDescriptor.get : null;
var setForEach = hasSet && Set.prototype.forEach;
var hasWeakMap = typeof WeakMap === "function" && WeakMap.prototype;
var weakMapHas = hasWeakMap ? WeakMap.prototype.has : null;
var hasWeakSet = typeof WeakSet === "function" && WeakSet.prototype;
var weakSetHas = hasWeakSet ? WeakSet.prototype.has : null;
var hasWeakRef = typeof WeakRef === "function" && WeakRef.prototype;
var weakRefDeref = hasWeakRef ? WeakRef.prototype.deref : null;
var booleanValueOf = Boolean.prototype.valueOf;
var objectToString = Object.prototype.toString;
var functionToString = Function.prototype.toString;
var $match = String.prototype.match;
var $slice = String.prototype.slice;
var $replace = String.prototype.replace;
var $toUpperCase = String.prototype.toUpperCase;
var $toLowerCase = String.prototype.toLowerCase;
var $test = RegExp.prototype.test;
var $concat = Array.prototype.concat;
var $join = Array.prototype.join;
var $arrSlice = Array.prototype.slice;
var $floor = Math.floor;
var bigIntValueOf = typeof BigInt === "function" ? BigInt.prototype.valueOf : null;
var gOPS = Object.getOwnPropertySymbols;
var symToString = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? Symbol.prototype.toString : null;
var hasShammedSymbols = typeof Symbol === "function" && typeof Symbol.iterator === "object";
var toStringTag = typeof Symbol === "function" && Symbol.toStringTag && (typeof Symbol.toStringTag === hasShammedSymbols ? "object" : "symbol") ? Symbol.toStringTag : null;
var isEnumerable = Object.prototype.propertyIsEnumerable;
var gPO = (typeof Reflect === "function" ? Reflect.getPrototypeOf : Object.getPrototypeOf) || ([].__proto__ === Array.prototype ? function(O) {
return O.__proto__;
} : null);
function addNumericSeparator(num, str) {
if (num === Infinity || num === -Infinity || num !== num || num && num > -1e3 && num < 1e3 || $test.call(/e/, str)) {
return str;
}
var sepRegex = /[0-9](?=(?:[0-9]{3})+(?![0-9]))/g;
if (typeof num === "number") {
var int = num < 0 ? -$floor(-num) : $floor(num);
if (int !== num) {
var intStr = String(int);
var dec = $slice.call(str, intStr.length + 1);
return $replace.call(intStr, sepRegex, "$&_") + "." + $replace.call($replace.call(dec, /([0-9]{3})/g, "$&_"), /_$/, "");
}
}
return $replace.call(str, sepRegex, "$&_");
}
var utilInspect = require_util_inspect();
var inspectCustom = utilInspect.custom;
var inspectSymbol = isSymbol(inspectCustom) ? inspectCustom : null;
var quotes = {
__proto__: null,
"double": '"',
single: "'"
};
var quoteREs = {
__proto__: null,
"double": /(["\\])/g,
single: /(['\\])/g
};
module2.exports = function inspect_(obj, options, depth, seen) {
var opts = options || {};
if (has2(opts, "quoteStyle") && !has2(quotes, opts.quoteStyle)) {
throw new TypeError('option "quoteStyle" must be "single" or "double"');
}
if (has2(opts, "maxStringLength") && (typeof opts.maxStringLength === "number" ? opts.maxStringLength < 0 && opts.maxStringLength !== Infinity : opts.maxStringLength !== null)) {
throw new TypeError('option "maxStringLength", if provided, must be a positive integer, Infinity, or `null`');
}
var customInspect = has2(opts, "customInspect") ? opts.customInspect : true;
if (typeof customInspect !== "boolean" && customInspect !== "symbol") {
throw new TypeError("option \"customInspect\", if provided, must be `true`, `false`, or `'symbol'`");
}
if (has2(opts, "indent") && opts.indent !== null && opts.indent !== " " && !(parseInt(opts.indent, 10) === opts.indent && opts.indent > 0)) {
throw new TypeError('option "indent" must be "\\t", an integer > 0, or `null`');
}
if (has2(opts, "numericSeparator") && typeof opts.numericSeparator !== "boolean") {
throw new TypeError('option "numericSeparator", if provided, must be `true` or `false`');
}
var numericSeparator = opts.numericSeparator;
if (typeof obj === "undefined") {
return "undefined";
}
if (obj === null) {
return "null";
}
if (typeof obj === "boolean") {
return obj ? "true" : "false";
}
if (typeof obj === "string") {
return inspectString(obj, opts);
}
if (typeof obj === "number") {
if (obj === 0) {
return Infinity / obj > 0 ? "0" : "-0";
}
var str = String(obj);
return numericSeparator ? addNumericSeparator(obj, str) : str;
}
if (typeof obj === "bigint") {
var bigIntStr = String(obj) + "n";
return numericSeparator ? addNumericSeparator(obj, bigIntStr) : bigIntStr;
}
var maxDepth = typeof opts.depth === "undefined" ? 5 : opts.depth;
if (typeof depth === "undefined") {
depth = 0;
}
if (depth >= maxDepth && maxDepth > 0 && typeof obj === "object") {
return isArray2(obj) ? "[Array]" : "[Object]";
}
var indent = getIndent(opts, depth);
if (typeof seen === "undefined") {
seen = [];
} else if (indexOf(seen, obj) >= 0) {
return "[Circular]";
}
function inspect(value, from, noIndent) {
if (from) {
seen = $arrSlice.call(seen);
seen.push(from);
}
if (noIndent) {
var newOpts = {
depth: opts.depth
};
if (has2(opts, "quoteStyle")) {
newOpts.quoteStyle = opts.quoteStyle;
}
return inspect_(value, newOpts, depth + 1, seen);
}
return inspect_(value, opts, depth + 1, seen);
}
if (typeof obj === "function" && !isRegExp2(obj)) {
var name = nameOf(obj);
var keys = arrObjKeys(obj, inspect);
return "[Function" + (name ? ": " + name : " (anonymous)") + "]" + (keys.length > 0 ? " { " + $join.call(keys, ", ") + " }" : "");
}
if (isSymbol(obj)) {
var symString = hasShammedSymbols ? $replace.call(String(obj), /^(Symbol\(.*\))_[^)]*$/, "$1") : symToString.call(obj);
return typeof obj === "object" && !hasShammedSymbols ? markBoxed(symString) : symString;
}
if (isElement(obj)) {
var s = "<" + $toLowerCase.call(String(obj.nodeName));
var attrs = obj.attributes || [];
for (var i = 0; i < attrs.length; i++) {
s += " " + attrs[i].name + "=" + wrapQuotes(quote(attrs[i].value), "double", opts);
}
s += ">";
if (obj.childNodes && obj.childNodes.length) {
s += "...";
}
s += "</" + $toLowerCase.call(String(obj.nodeName)) + ">";
return s;
}
if (isArray2(obj)) {
if (obj.length === 0) {
return "[]";
}
var xs = arrObjKeys(obj, inspect);
if (indent && !singleLineValues(xs)) {
return "[" + indentedJoin(xs, indent) + "]";
}
return "[ " + $join.call(xs, ", ") + " ]";
}
if (isError(obj)) {
var parts = arrObjKeys(obj, inspect);
if (!("cause" in Error.prototype) && "cause" in obj && !isEnumerable.call(obj, "cause")) {
return "{ [" + String(obj) + "] " + $join.call($concat.call("[cause]: " + inspect(obj.cause), parts), ", ") + " }";
}
if (parts.length === 0) {
return "[" + String(obj) + "]";
}
return "{ [" + String(obj) + "] " + $join.call(parts, ", ") + " }";
}
if (typeof obj === "object" && customInspect) {
if (inspectSymbol && typeof obj[inspectSymbol] === "function" && utilInspect) {
return utilInspect(obj, { depth: maxDepth - depth });
} else if (customInspect !== "symbol" && typeof obj.inspect === "function") {
return obj.inspect();
}
}
if (isMap(obj)) {
var mapParts = [];
if (mapForEach) {
mapForEach.call(obj, function(value, key) {
mapParts.push(inspect(key, obj, true) + " => " + inspect(value, obj));
});
}
return collectionOf("Map", mapSize.call(obj), mapParts, indent);
}
if (isSet(obj)) {
var setParts = [];
if (setForEach) {
setForEach.call(obj, function(value) {
setParts.push(inspect(value, obj));
});
}
return collectionOf("Set", setSize.call(obj), setParts, indent);
}
if (isWeakMap(obj)) {
return weakCollectionOf("WeakMap");
}
if (isWeakSet(obj)) {
return weakCollectionOf("WeakSet");
}
if (isWeakRef(obj)) {
return weakCollectionOf("WeakRef");
}
if (isNumber3(obj)) {
return markBoxed(inspect(Number(obj)));
}
if (isBigInt(obj)) {
return markBoxed(inspect(bigIntValueOf.call(obj)));
}
if (isBoolean2(obj)) {
return markBoxed(booleanValueOf.call(obj));
}
if (isString2(obj)) {
return markBoxed(inspect(String(obj)));
}
if (typeof window !== "undefined" && obj === window) {
return "{ [object Window] }";
}
if (typeof globalThis !== "undefined" && obj === globalThis || typeof global !== "undefined" && obj === global) {
return "{ [object globalThis] }";
}
if (!isDate2(obj) && !isRegExp2(obj)) {
var ys = arrObjKeys(obj, inspect);
var isPlainObject2 = gPO ? gPO(obj) === Object.prototype : obj instanceof Object || obj.constructor === Object;
var protoTag = obj instanceof Object ? "" : "null prototype";
var stringTag = !isPlainObject2 && toStringTag && Object(obj) === obj && toStringTag in obj ? $slice.call(toStr(obj), 8, -1) : protoTag ? "Object" : "";
var constructorTag = isPlainObject2 || typeof obj.constructor !== "function" ? "" : obj.constructor.name ? obj.constructor.name + " " : "";
var tag = constructorTag + (stringTag || protoTag ? "[" + $join.call($concat.call([], stringTag || [], protoTag || []), ": ") + "] " : "");
if (ys.length === 0) {
return tag + "{}";
}
if (indent) {
return tag + "{" + indentedJoin(ys, indent) + "}";
}
return tag + "{ " + $join.call(ys, ", ") + " }";
}
return String(obj);
};
function wrapQuotes(s, defaultStyle, opts) {
var style = opts.quoteStyle || defaultStyle;
var quoteChar = quotes[style];
return quoteChar + s + quoteChar;
}
function quote(s) {
return $replace.call(String(s), /"/g, """);
}
function canTrustToString(obj) {
return !toStringTag || !(typeof obj === "object" && (toStringTag in obj || typeof obj[toStringTag] !== "undefined"));
}
function isArray2(obj) {
return toStr(obj) === "[object Array]" && canTrustToString(obj);
}
function isDate2(obj) {
return toStr(obj) === "[object Date]" && canTrustToString(obj);
}
function isRegExp2(obj) {
return toStr(obj) === "[object RegExp]" && canTrustToString(obj);
}
function isError(obj) {
return toStr(obj) === "[object Error]" && canTrustToString(obj);
}
function isString2(obj) {
return toStr(obj) === "[object String]" && canTrustToString(obj);
}
function isNumber3(obj) {
return toStr(obj) === "[object Number]" && canTrustToString(obj);
}
function isBoolean2(obj) {
return toStr(obj) === "[object Boolean]" && canTrustToString(obj);
}
function isSymbol(obj) {
if (hasShammedSymbols) {
return obj && typeof obj === "object" && obj instanceof Symbol;
}
if (typeof obj === "symbol") {
return true;
}
if (!obj || typeof obj !== "object" || !symToString) {
return false;
}
try {
symToString.call(obj);
return true;
} catch (e) {
}
return false;
}
function isBigInt(obj) {
if (!obj || typeof obj !== "object" || !bigIntValueOf) {
return false;
}
try {
bigIntValueOf.call(obj);
return true;
} catch (e) {
}
return false;
}
var hasOwn2 = Object.prototype.hasOwnProperty || function(key) {
return key in this;
};
function has2(obj, key) {
return hasOwn2.call(obj, key);
}
function toStr(obj) {
return objectToString.call(obj);
}
function nameOf(f) {
if (f.name) {
return f.name;
}
var m = $match.call(functionToString.call(f), /^function\s*([\w$]+)/);
if (m) {
return m[1];
}
return null;
}
function indexOf(xs, x) {
if (xs.indexOf) {
return xs.indexOf(x);
}
for (var i = 0, l = xs.length; i < l; i++) {
if (xs[i] === x) {
return i;
}
}
return -1;
}
function isMap(x) {
if (!mapSize || !x || typeof x !== "object") {
return false;
}
try {
mapSize.call(x);
try {
setSize.call(x);
} catch (s) {
return true;
}
return x instanceof Map;
} catch (e) {
}
return false;
}
function isWeakMap(x) {
if (!weakMapHas || !x || typeof x !== "object") {
return false;
}
try {
weakMapHas.call(x, weakMapHas);
try {
weakSetHas.call(x, weakSetHas);
} catch (s) {
return true;
}
return x instanceof WeakMap;
} catch (e) {
}
return false;
}
function isWeakRef(x) {
if (!weakRefDeref || !x || typeof x !== "object") {
return false;
}
try {
weakRefDeref.call(x);
return true;
} catch (e) {
}
return false;
}
function isSet(x) {
if (!setSize || !x || typeof x !== "object") {
return false;
}
try {
setSize.call(x);
try {
mapSize.call(x);
} catch (m) {
return true;
}
return x instanceof Set;
} catch (e) {
}
return false;
}
function isWeakSet(x) {
if (!weakSetHas || !x || typeof x !== "object") {
return false;
}
try {
weakSetHas.call(x, weakSetHas);
try {
weakMapHas.call(x, weakMapHas);
} catch (s) {
return true;
}
return x instanceof WeakSet;
} catch (e) {
}
return false;
}
function isElement(x) {
if (!x || typeof x !== "object") {
return false;
}
if (typeof HTMLElement !== "undefined" && x instanceof HTMLElement) {
return true;
}
return typeof x.nodeName === "string" && typeof x.getAttribute === "function";
}
function inspectString(str, opts) {
if (str.length > opts.maxStringLength) {
var remaining = str.length - opts.maxStringLength;
var trailer = "... " + remaining + " more character" + (remaining > 1 ? "s" : "");
return inspectString($slice.call(str, 0, opts.maxStringLength), opts) + trailer;
}
var quoteRE = quoteREs[opts.quoteStyle || "single"];
quoteRE.lastIndex = 0;
var s = $replace.call($replace.call(str, quoteRE, "\\$1"), /[\x00-\x1f]/g, lowbyte);
return wrapQuotes(s, "single", opts);
}
function lowbyte(c) {
var n = c.charCodeAt(0);
var x = {
8: "b",
9: "t",
10: "n",
12: "f",
13: "r"
}[n];
if (x) {
return "\\" + x;
}
return "\\x" + (n < 16 ? "0" : "") + $toUpperCase.call(n.toString(16));
}
function markBoxed(str) {
return "Object(" + str + ")";
}
function weakCollectionOf(type) {
return type + " { ? }";
}
function collectionOf(type, size, entries, indent) {
var joinedEntries = indent ? indentedJoin(entries, indent) : $join.call(entries, ", ");
return type + " (" + size + ") {" + joinedEntries + "}";
}
function singleLineValues(xs) {
for (var i = 0; i < xs.length; i++) {
if (indexOf(xs[i], "\n") >= 0) {
return false;
}
}
return true;
}
function getIndent(opts, depth) {
var baseIndent;
if (opts.indent === " ") {
baseIndent = " ";
} else if (typeof opts.indent === "number" && opts.indent > 0) {
baseIndent = $join.call(Array(opts.indent + 1), " ");
} else {
return null;
}
return {
base: baseIndent,
prev: $join.call(Array(depth + 1), baseIndent)
};
}
function indentedJoin(xs, indent) {
if (xs.length === 0) {
return "";
}
var lineJoiner = "\n" + indent.prev + indent.base;
return lineJoiner + $join.call(xs, "," + lineJoiner) + "\n" + indent.prev;
}
function arrObjKeys(obj, inspect) {
var isArr = isArray2(obj);
var xs = [];
if (isArr) {
xs.length = obj.length;
for (var i = 0; i < obj.length; i++) {
xs[i] = has2(obj, i) ? inspect(obj[i], obj) : "";
}
}
var syms = typeof gOPS === "function" ? gOPS(obj) : [];
var symMap;
if (hasShammedSymbols) {
symMap = {};
for (var k = 0; k < syms.length; k++) {
symMap["$" + syms[k]] = syms[k];
}
}
for (var key in obj) {
if (!has2(obj, key)) {
continue;
}
if (isArr && String(Number(key)) === key && key < obj.length) {
continue;
}
if (hasShammedSymbols && symMap["$" + key] instanceof Symbol) {
continue;
} else if ($test.call(/[^\w$]/, key)) {
xs.push(inspect(key, obj) + ": " + inspect(obj[key], obj));
} else {
xs.push(key + ": " + inspect(obj[key], obj));
}
}
if (typeof gOPS === "function") {
for (var j = 0; j < syms.length; j++) {
if (isEnumerable.call(obj, syms[j])) {
xs.push("[" + inspect(syms[j]) + "]: " + inspect(obj[syms[j]], obj));
}
}
}
return xs;
}
}
});
var require_side_channel_list = __commonJS2({
"node_modules/side-channel-list/index.js"(exports2, module2) {
"use strict";
var inspect = require_object_inspect();
var $TypeError = require_type2();
var listGetNode = function(list, key, isDelete) {
var prev2 = list;
var curr;
for (; (curr = prev2.next) != null; prev2 = curr) {
if (curr.key === key) {
prev2.next = curr.next;
if (!isDelete) {
curr.next = /** @type {NonNullable<typeof list.next>} */
list.next;
list.next = curr;
}
return curr;
}
}
};
var listGet = function(objects, key) {
if (!objects) {
return void 0;
}
var node = listGetNode(objects, key);
return node && node.value;
};
var listSet = function(objects, key, value) {
var node = listGetNode(objects, key);
if (node) {
node.value = value;
} else {
objects.next = /** @type {import('./list.d.ts').ListNode<typeof value, typeof key>} */
{
// eslint-disable-line no-param-reassign, no-extra-parens
key,
next: objects.next,
value
};
}
};
var listHas = function(objects, key) {
if (!objects) {
return false;
}
return !!listGetNode(objects, key);
};
var listDelete = function(objects, key) {
if (objects) {
return listGetNode(objects, key, true);
}
};
module2.exports = function getSideChannelList() {
var $o;
var channel = {
assert: function(key) {
if (!channel.has(key)) {
throw new $TypeError("Side channel does not contain " + inspect(key));
}
},
"delete": function(key) {
var root2 = $o && $o.next;
var deletedNode = listDelete($o, key);
if (deletedNode && root2 && root2 === deletedNode) {
$o = void 0;
}
return !!deletedNode;
},
get: function(key) {
return listGet($o, key);
},
has: function(key) {
return listHas($o, key);
},
set: function(key, value) {
if (!$o) {
$o = {
next: void 0
};
}
listSet(
/** @type {NonNullable<typeof $o>} */
$o,
key,
value
);
}
};
return channel;
};
}
});
var require_es_object_atoms2 = __commonJS2({
"node_modules/es-object-atoms/index.js"(exports2, module2) {
"use strict";
module2.exports = Object;
}
});
var require_es_errors2 = __commonJS2({
"node_modules/es-errors/index.js"(exports2, module2) {
"use strict";
module2.exports = Error;
}
});
var require_eval2 = __commonJS2({
"node_modules/es-errors/eval.js"(exports2, module2) {
"use strict";
module2.exports = EvalError;
}
});
var require_range2 = __commonJS2({
"node_modules/es-errors/range.js"(exports2, module2) {
"use strict";
module2.exports = RangeError;
}
});
var require_ref3 = __commonJS2({
"node_modules/es-errors/ref.js"(exports2, module2) {
"use strict";
module2.exports = ReferenceError;
}
});
var require_syntax2 = __commonJS2({
"node_modules/es-errors/syntax.js"(exports2, module2) {
"use strict";
module2.exports = SyntaxError;
}
});
var require_uri2 = __commonJS2({
"node_modules/es-errors/uri.js"(exports2, module2) {
"use strict";
module2.exports = URIError;
}
});
var require_abs2 = __commonJS2({
"node_modules/math-intrinsics/abs.js"(exports2, module2) {
"use strict";
module2.exports = Math.abs;
}
});
var require_floor2 = __commonJS2({
"node_modules/math-intrinsics/floor.js"(exports2, module2) {
"use strict";
module2.exports = Math.floor;
}
});
var require_max2 = __commonJS2({
"node_modules/math-intrinsics/max.js"(exports2, module2) {
"use strict";
module2.exports = Math.max;
}
});
var require_min2 = __commonJS2({
"node_modules/math-intrinsics/min.js"(exports2, module2) {
"use strict";
module2.exports = Math.min;
}
});
var require_pow2 = __commonJS2({
"node_modules/math-intrinsics/pow.js"(exports2, module2) {
"use strict";
module2.exports = Math.pow;
}
});
var require_round2 = __commonJS2({
"node_modules/math-intrinsics/round.js"(exports2, module2) {
"use strict";
module2.exports = Math.round;
}
});
var require_isNaN2 = __commonJS2({
"node_modules/math-intrinsics/isNaN.js"(exports2, module2) {
"use strict";
module2.exports = Number.isNaN || function isNaN2(a) {
return a !== a;
};
}
});
var require_sign2 = __commonJS2({
"node_modules/math-intrinsics/sign.js"(exports2, module2) {
"use strict";
var $isNaN = require_isNaN2();
module2.exports = function sign(number) {
if ($isNaN(number) || number === 0) {
return number;
}
return number < 0 ? -1 : 1;
};
}
});
var require_gOPD2 = __commonJS2({
"node_modules/gopd/gOPD.js"(exports2, module2) {
"use strict";
module2.exports = Object.getOwnPropertyDescriptor;
}
});
var require_gopd2 = __commonJS2({
"node_modules/gopd/index.js"(exports2, module2) {
"use strict";
var $gOPD = require_gOPD2();
if ($gOPD) {
try {
$gOPD([], "length");
} catch (e) {
$gOPD = null;
}
}
module2.exports = $gOPD;
}
});
var require_es_define_property2 = __commonJS2({
"node_modules/es-define-property/index.js"(exports2, module2) {
"use strict";
var $defineProperty = Object.defineProperty || false;
if ($defineProperty) {
try {
$defineProperty({}, "a", { value: 1 });
} catch (e) {
$defineProperty = false;
}
}
module2.exports = $defineProperty;
}
});
var require_shams3 = __commonJS2({
"node_modules/has-symbols/shams.js"(exports2, module2) {
"use strict";
module2.exports = function hasSymbols() {
if (typeof Symbol !== "function" || typeof Object.getOwnPropertySymbols !== "function") {
return false;
}
if (typeof Symbol.iterator === "symbol") {
return true;
}
var obj = {};
var sym = Symbol("test");
var symObj = Object(sym);
if (typeof sym === "string") {
return false;
}
if (Object.prototype.toString.call(sym) !== "[object Symbol]") {
return false;
}
if (Object.prototype.toString.call(symObj) !== "[object Symbol]") {
return false;
}
var symVal = 42;
obj[sym] = symVal;
for (var _2 in obj) {
return false;
}
if (typeof Object.keys === "function" && Object.keys(obj).length !== 0) {
return false;
}
if (typeof Object.getOwnPropertyNames === "function" && Object.getOwnPropertyNames(obj).length !== 0) {
return false;
}
var syms = Object.getOwnPropertySymbols(obj);
if (syms.length !== 1 || syms[0] !== sym) {
return false;
}
if (!Object.prototype.propertyIsEnumerable.call(obj, sym)) {
return false;
}
if (typeof Object.getOwnPropertyDescriptor === "function") {
var descriptor = (
/** @type {PropertyDescriptor} */
Object.getOwnPropertyDescriptor(obj, sym)
);
if (descriptor.value !== symVal || descriptor.enumerable !== true) {
return false;
}
}
return true;
};
}
});
var require_has_symbols2 = __commonJS2({
"node_modules/has-symbols/index.js"(exports2, module2) {
"use strict";
var origSymbol = typeof Symbol !== "undefined" && Symbol;
var hasSymbolSham = require_shams3();
module2.exports = function hasNativeSymbols() {
if (typeof origSymbol !== "function") {
return false;
}
if (typeof Symbol !== "function") {
return false;
}
if (typeof origSymbol("foo") !== "symbol") {
return false;
}
if (typeof Symbol("bar") !== "symbol") {
return false;
}
return hasSymbolSham();
};
}
});
var require_Reflect_getPrototypeOf2 = __commonJS2({
"node_modules/get-proto/Reflect.getPrototypeOf.js"(exports2, module2) {
"use strict";
module2.exports = typeof Reflect !== "undefined" && Reflect.getPrototypeOf || null;
}
});
var require_Object_getPrototypeOf2 = __commonJS2({
"node_modules/get-proto/Object.getPrototypeOf.js"(exports2, module2) {
"use strict";
var $Object = require_es_object_atoms2();
module2.exports = $Object.getPrototypeOf || null;
}
});
var require_implementation2 = __commonJS2({
"node_modules/function-bind/implementation.js"(exports2, module2) {
"use strict";
var ERROR_MESSAGE = "Function.prototype.bind called on incompatible ";
var toStr = Object.prototype.toString;
var max = Math.max;
var funcType = "[object Function]";
var concatty = function concatty2(a, b) {
var arr = [];
for (var i = 0; i < a.length; i += 1) {
arr[i] = a[i];
}
for (var j = 0; j < b.length; j += 1) {
arr[j + a.length] = b[j];
}
return arr;
};
var slicy = function slicy2(arrLike, offset) {
var arr = [];
for (var i = offset || 0, j = 0; i < arrLike.length; i += 1, j += 1) {
arr[j] = arrLike[i];
}
return arr;
};
var joiny = function(arr, joiner) {
var str = "";
for (var i = 0; i < arr.length; i += 1) {
str += arr[i];
if (i + 1 < arr.length) {
str += joiner;
}
}
return str;
};
module2.exports = function bind2(that) {
var target = this;
if (typeof target !== "function" || toStr.apply(target) !== funcType) {
throw new TypeError(ERROR_MESSAGE + target);
}
var args = slicy(arguments, 1);
var bound;
var binder = function() {
if (this instanceof bound) {
var result = target.apply(
this,
concatty(args, arguments)
);
if (Object(result) === result) {
return result;
}
return this;
}
return target.apply(
that,
concatty(args, arguments)
);
};
var boundLength = max(0, target.length - args.length);
var boundArgs = [];
for (var i = 0; i < boundLength; i++) {
boundArgs[i] = "$" + i;
}
bound = Function("binder", "return function (" + joiny(boundArgs, ",") + "){ return binder.apply(this,arguments); }")(binder);
if (target.prototype) {
var Empty = function Empty2() {
};
Empty.prototype = target.prototype;
bound.prototype = new Empty();
Empty.prototype = null;
}
return bound;
};
}
});
var require_function_bind2 = __commonJS2({
"node_modules/function-bind/index.js"(exports2, module2) {
"use strict";
var implementation = require_implementation2();
module2.exports = Function.prototype.bind || implementation;
}
});
var require_functionCall2 = __commonJS2({
"node_modules/call-bind-apply-helpers/functionCall.js"(exports2, module2) {
"use strict";
module2.exports = Function.prototype.call;
}
});
var require_functionApply2 = __commonJS2({
"node_modules/call-bind-apply-helpers/functionApply.js"(exports2, module2) {
"use strict";
module2.exports = Function.prototype.apply;
}
});
var require_reflectApply2 = __commonJS2({
"node_modules/call-bind-apply-helpers/reflectApply.js"(exports2, module2) {
"use strict";
module2.exports = typeof Reflect !== "undefined" && Reflect && Reflect.apply;
}
});
var require_actualApply2 = __commonJS2({
"node_modules/call-bind-apply-helpers/actualApply.js"(exports2, module2) {
"use strict";
var bind2 = require_function_bind2();
var $apply = require_functionApply2();
var $call = require_functionCall2();
var $reflectApply = require_reflectApply2();
module2.exports = $reflectApply || bind2.call($call, $apply);
}
});
var require_call_bind_apply_helpers2 = __commonJS2({
"node_modules/call-bind-apply-helpers/index.js"(exports2, module2) {
"use strict";
var bind2 = require_function_bind2();
var $TypeError = require_type2();
var $call = require_functionCall2();
var $actualApply = require_actualApply2();
module2.exports = function callBindBasic(args) {
if (args.length < 1 || typeof args[0] !== "function") {
throw new $TypeError("a function is required");
}
return $actualApply(bind2, $call, args);
};
}
});
var require_get2 = __commonJS2({
"node_modules/dunder-proto/get.js"(exports2, module2) {
"use strict";
var callBind = require_call_bind_apply_helpers2();
var gOPD = require_gopd2();
var hasProtoAccessor;
try {
hasProtoAccessor = /** @type {{ __proto__?: typeof Array.prototype }} */
[].__proto__ === Array.prototype;
} catch (e) {
if (!e || typeof e !== "object" || !("code" in e) || e.code !== "ERR_PROTO_ACCESS") {
throw e;
}
}
var desc = !!hasProtoAccessor && gOPD && gOPD(
Object.prototype,
/** @type {keyof typeof Object.prototype} */
"__proto__"
);
var $Object = Object;
var $getPrototypeOf = $Object.getPrototypeOf;
module2.exports = desc && typeof desc.get === "function" ? callBind([desc.get]) : typeof $getPrototypeOf === "function" ? (
/** @type {import('./get')} */
(function getDunder(value) {
return $getPrototypeOf(value == null ? value : $Object(value));
})
) : false;
}
});
var require_get_proto2 = __commonJS2({
"node_modules/get-proto/index.js"(exports2, module2) {
"use strict";
var reflectGetProto = require_Reflect_getPrototypeOf2();
var originalGetProto = require_Object_getPrototypeOf2();
var getDunderProto = require_get2();
module2.exports = reflectGetProto ? function getProto(O) {
return reflectGetProto(O);
} : originalGetProto ? function getProto(O) {
if (!O || typeof O !== "object" && typeof O !== "function") {
throw new TypeError("getProto: not an object");
}
return originalGetProto(O);
} : getDunderProto ? function getProto(O) {
return getDunderProto(O);
} : null;
}
});
var require_hasown2 = __commonJS2({
"node_modules/hasown/index.js"(exports2, module2) {
"use strict";
var call = Function.prototype.call;
var $hasOwn = Object.prototype.hasOwnProperty;
var bind2 = require_function_bind2();
module2.exports = bind2.call(call, $hasOwn);
}
});
var require_get_intrinsic2 = __commonJS2({
"node_modules/get-intrinsic/index.js"(exports2, module2) {
"use strict";
var undefined2;
var $Object = require_es_object_atoms2();
var $Error = require_es_errors2();
var $EvalError = require_eval2();
var $RangeError = require_range2();
var $ReferenceError = require_ref3();
var $SyntaxError = require_syntax2();
var $TypeError = require_type2();
var $URIError = require_uri2();
var abs = require_abs2();
var floor = require_floor2();
var max = require_max2();
var min = require_min2();
var pow = require_pow2();
var round = require_round2();
var sign = require_sign2();
var $Function = Function;
var getEvalledConstructor = function(expressionSyntax) {
try {
return $Function('"use strict"; return (' + expressionSyntax + ").constructor;")();
} catch (e) {
}
};
var $gOPD = require_gopd2();
var $defineProperty = require_es_define_property2();
var throwTypeError = function() {
throw new $TypeError();
};
var ThrowTypeError = $gOPD ? (function() {
try {
arguments.callee;
return throwTypeError;
} catch (calleeThrows) {
try {
return $gOPD(arguments, "callee").get;
} catch (gOPDthrows) {
return throwTypeError;
}
}
})() : throwTypeError;
var hasSymbols = require_has_symbols2()();
var getProto = require_get_proto2();
var $ObjectGPO = require_Object_getPrototypeOf2();
var $ReflectGPO = require_Reflect_getPrototypeOf2();
var $apply = require_functionApply2();
var $call = require_functionCall2();
var needsEval = {};
var TypedArray = typeof Uint8Array === "undefined" || !getProto ? undefined2 : getProto(Uint8Array);
var INTRINSICS = {
__proto__: null,
"%AggregateError%": typeof AggregateError === "undefined" ? undefined2 : AggregateError,
"%Array%": Array,
"%ArrayBuffer%": typeof ArrayBuffer === "undefined" ? undefined2 : ArrayBuffer,
"%ArrayIteratorPrototype%": hasSymbols && getProto ? getProto([][Symbol.iterator]()) : undefined2,
"%AsyncFromSyncIteratorPrototype%": undefined2,
"%AsyncFunction%": needsEval,
"%AsyncGenerator%": needsEval,
"%AsyncGeneratorFunction%": needsEval,
"%AsyncIteratorPrototype%": needsEval,
"%Atomics%": typeof Atomics === "undefined" ? undefined2 : Atomics,
"%BigInt%": typeof BigInt === "undefined" ? undefined2 : BigInt,
"%BigInt64Array%": typeof BigInt64Array === "undefined" ? undefined2 : BigInt64Array,
"%BigUint64Array%": typeof BigUint64Array === "undefined" ? undefined2 : BigUint64Array,
"%Boolean%": Boolean,
"%DataView%": typeof DataView === "undefined" ? undefined2 : DataView,
"%Date%": Date,
"%decodeURI%": decodeURI,
"%decodeURIComponent%": decodeURIComponent,
"%encodeURI%": encodeURI,
"%encodeURIComponent%": encodeURIComponent,
"%Error%": $Error,
"%eval%": eval,
// eslint-disable-line no-eval
"%EvalError%": $EvalError,
"%Float16Array%": typeof Float16Array === "undefined" ? undefined2 : Float16Array,
"%Float32Array%": typeof Float32Array === "undefined" ? undefined2 : Float32Array,
"%Float64Array%": typeof Float64Array === "undefined" ? undefined2 : Float64Array,
"%FinalizationRegistry%": typeof FinalizationRegistry === "undefined" ? undefined2 : FinalizationRegistry,
"%Function%": $Function,
"%GeneratorFunction%": needsEval,
"%Int8Array%": typeof Int8Array === "undefined" ? undefined2 : Int8Array,
"%Int16Array%": typeof Int16Array === "undefined" ? undefined2 : Int16Array,
"%Int32Array%": typeof Int32Array === "undefined" ? undefined2 : Int32Array,
"%isFinite%": isFinite,
"%isNaN%": isNaN,
"%IteratorPrototype%": hasSymbols && getProto ? getProto(getProto([][Symbol.iterator]())) : undefined2,
"%JSON%": typeof JSON === "object" ? JSON : undefined2,
"%Map%": typeof Map === "undefined" ? undefined2 : Map,
"%MapIteratorPrototype%": typeof Map === "undefined" || !hasSymbols || !getProto ? undefined2 : getProto((/* @__PURE__ */ new Map())[Symbol.iterator]()),
"%Math%": Math,
"%Number%": Number,
"%Object%": $Object,
"%Object.getOwnPropertyDescriptor%": $gOPD,
"%parseFloat%": parseFloat,
"%parseInt%": parseInt,
"%Promise%": typeof Promise === "undefined" ? undefined2 : Promise,
"%Proxy%": typeof Proxy === "undefined" ? undefined2 : Proxy,
"%RangeError%": $RangeError,
"%ReferenceError%": $ReferenceError,
"%Reflect%": typeof Reflect === "undefined" ? undefined2 : Reflect,
"%RegExp%": RegExp,
"%Set%": typeof Set === "undefined" ? undefined2 : Set,
"%SetIteratorPrototype%": typeof Set === "undefined" || !hasSymbols || !getProto ? undefined2 : getProto((/* @__PURE__ */ new Set())[Symbol.iterator]()),
"%SharedArrayBuffer%": typeof SharedArrayBuffer === "undefined" ? undefined2 : SharedArrayBuffer,
"%String%": String,
"%StringIteratorPrototype%": hasSymbols && getProto ? getProto(""[Symbol.iterator]()) : undefined2,
"%Symbol%": hasSymbols ? Symbol : undefined2,
"%SyntaxError%": $SyntaxError,
"%ThrowTypeError%": ThrowTypeError,
"%TypedArray%": TypedArray,
"%TypeError%": $TypeError,
"%Uint8Array%": typeof Uint8Array === "undefined" ? undefined2 : Uint8Array,
"%Uint8ClampedArray%": typeof Uint8ClampedArray === "undefined" ? undefined2 : Uint8ClampedArray,
"%Uint16Array%": typeof Uint16Array === "undefined" ? undefined2 : Uint16Array,
"%Uint32Array%": typeof Uint32Array === "undefined" ? undefined2 : Uint32Array,
"%URIError%": $URIError,
"%WeakMap%": typeof WeakMap === "undefined" ? undefined2 : WeakMap,
"%WeakRef%": typeof WeakRef === "undefined" ? undefined2 : WeakRef,
"%WeakSet%": typeof WeakSet === "undefined" ? undefined2 : WeakSet,
"%Function.prototype.call%": $call,
"%Function.prototype.apply%": $apply,
"%Object.defineProperty%": $defineProperty,
"%Object.getPrototypeOf%": $ObjectGPO,
"%Math.abs%": abs,
"%Math.floor%": floor,
"%Math.max%": max,
"%Math.min%": min,
"%Math.pow%": pow,
"%Math.round%": round,
"%Math.sign%": sign,
"%Reflect.getPrototypeOf%": $ReflectGPO
};
if (getProto) {
try {
null.error;
} catch (e) {
errorProto = getProto(getProto(e));
INTRINSICS["%Error.prototype%"] = errorProto;
}
}
var errorProto;
var doEval = function doEval2(name) {
var value;
if (name === "%AsyncFunction%") {
value = getEvalledConstructor("async function () {}");
} else if (name === "%GeneratorFunction%") {
value = getEvalledConstructor("function* () {}");
} else if (name === "%AsyncGeneratorFunction%") {
value = getEvalledConstructor("async function* () {}");
} else if (name === "%AsyncGenerator%") {
var fn = doEval2("%AsyncGeneratorFunction%");
if (fn) {
value = fn.prototype;
}
} else if (name === "%AsyncIteratorPrototype%") {
var gen = doEval2("%AsyncGenerator%");
if (gen && getProto) {
value = getProto(gen.prototype);
}
}
INTRINSICS[name] = value;
return value;
};
var LEGACY_ALIASES = {
__proto__: null,
"%ArrayBufferPrototype%": ["ArrayBuffer", "prototype"],
"%ArrayPrototype%": ["Array", "prototype"],
"%ArrayProto_entries%": ["Array", "prototype", "entries"],
"%ArrayProto_forEach%": ["Array", "prototype", "forEach"],
"%ArrayProto_keys%": ["Array", "prototype", "keys"],
"%ArrayProto_values%": ["Array", "prototype", "values"],
"%AsyncFunctionPrototype%": ["AsyncFunction", "prototype"],
"%AsyncGenerator%": ["AsyncGeneratorFunction", "prototype"],
"%AsyncGeneratorPrototype%": ["AsyncGeneratorFunction", "prototype", "prototype"],
"%BooleanPrototype%": ["Boolean", "prototype"],
"%DataViewPrototype%": ["DataView", "prototype"],
"%DatePrototype%": ["Date", "prototype"],
"%ErrorPrototype%": ["Error", "prototype"],
"%EvalErrorPrototype%": ["EvalError", "prototype"],
"%Float32ArrayPrototype%": ["Float32Array", "prototype"],
"%Float64ArrayPrototype%": ["Float64Array", "prototype"],
"%FunctionPrototype%": ["Function", "prototype"],
"%Generator%": ["GeneratorFunction", "prototype"],
"%GeneratorPrototype%": ["GeneratorFunction", "prototype", "prototype"],
"%Int8ArrayPrototype%": ["Int8Array", "prototype"],
"%Int16ArrayPrototype%": ["Int16Array", "prototype"],
"%Int32ArrayPrototype%": ["Int32Array", "prototype"],
"%JSONParse%": ["JSON", "parse"],
"%JSONStringify%": ["JSON", "stringify"],
"%MapPrototype%": ["Map", "prototype"],
"%NumberPrototype%": ["Number", "prototype"],
"%ObjectPrototype%": ["Object", "prototype"],
"%ObjProto_toString%": ["Object", "prototype", "toString"],
"%ObjProto_valueOf%": ["Object", "prototype", "valueOf"],
"%PromisePrototype%": ["Promise", "prototype"],
"%PromiseProto_then%": ["Promise", "prototype", "then"],
"%Promise_all%": ["Promise", "all"],
"%Promise_reject%": ["Promise", "reject"],
"%Promise_resolve%": ["Promise", "resolve"],
"%RangeErrorPrototype%": ["RangeError", "prototype"],
"%ReferenceErrorPrototype%": ["ReferenceError", "prototype"],
"%RegExpPrototype%": ["RegExp", "prototype"],
"%SetPrototype%": ["Set", "prototype"],
"%SharedArrayBufferPrototype%": ["SharedArrayBuffer", "prototype"],
"%StringPrototype%": ["String", "prototype"],
"%SymbolPrototype%": ["Symbol", "prototype"],
"%SyntaxErrorPrototype%": ["SyntaxError", "prototype"],
"%TypedArrayPrototype%": ["TypedArray", "prototype"],
"%TypeErrorPrototype%": ["TypeError", "prototype"],
"%Uint8ArrayPrototype%": ["Uint8Array", "prototype"],
"%Uint8ClampedArrayPrototype%": ["Uint8ClampedArray", "prototype"],
"%Uint16ArrayPrototype%": ["Uint16Array", "prototype"],
"%Uint32ArrayPrototype%": ["Uint32Array", "prototype"],
"%URIErrorPrototype%": ["URIError", "prototype"],
"%WeakMapPrototype%": ["WeakMap", "prototype"],
"%WeakSetPrototype%": ["WeakSet", "prototype"]
};
var bind2 = require_function_bind2();
var hasOwn2 = require_hasown2();
var $concat = bind2.call($call, Array.prototype.concat);
var $spliceApply = bind2.call($apply, Array.prototype.splice);
var $replace = bind2.call($call, String.prototype.replace);
var $strSlice = bind2.call($call, String.prototype.slice);
var $exec = bind2.call($call, RegExp.prototype.exec);
var rePropName = /[^%.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|%$))/g;
var reEscapeChar = /\\(\\)?/g;
var stringToPath = function stringToPath2(string) {
var first2 = $strSlice(string, 0, 1);
var last2 = $strSlice(string, -1);
if (first2 === "%" && last2 !== "%") {
throw new $SyntaxError("invalid intrinsic syntax, expected closing `%`");
} else if (last2 === "%" && first2 !== "%") {
throw new $SyntaxError("invalid intrinsic syntax, expected opening `%`");
}
var result = [];
$replace(string, rePropName, function(match, number, quote, subString) {
result[result.length] = quote ? $replace(subString, reEscapeChar, "$1") : number || match;
});
return result;
};
var getBaseIntrinsic = function getBaseIntrinsic2(name, allowMissing) {
var intrinsicName = name;
var alias;
if (hasOwn2(LEGACY_ALIASES, intrinsicName)) {
alias = LEGACY_ALIASES[intrinsicName];
intrinsicName = "%" + alias[0] + "%";
}
if (hasOwn2(INTRINSICS, intrinsicName)) {
var value = INTRINSICS[intrinsicName];
if (value === needsEval) {
value = doEval(intrinsicName);
}
if (typeof value === "undefined" && !allowMissing) {
throw new $TypeError("intrinsic " + name + " exists, but is not available. Please file an issue!");
}
return {
alias,
name: intrinsicName,
value
};
}
throw new $SyntaxError("intrinsic " + name + " does not exist!");
};
module2.exports = function GetIntrinsic(name, allowMissing) {
if (typeof name !== "string" || name.length === 0) {
throw new $TypeError("intrinsic name must be a non-empty string");
}
if (arguments.length > 1 && typeof allowMissing !== "boolean") {
throw new $TypeError('"allowMissing" argument must be a boolean');
}
if ($exec(/^%?[^%]*%?$/, name) === null) {
throw new $SyntaxError("`%` may not be present anywhere but at the beginning and end of the intrinsic name");
}
var parts = stringToPath(name);
var intrinsicBaseName = parts.length > 0 ? parts[0] : "";
var intrinsic = getBaseIntrinsic("%" + intrinsicBaseName + "%", allowMissing);
var intrinsicRealName = intrinsic.name;
var value = intrinsic.value;
var skipFurtherCaching = false;
var alias = intrinsic.alias;
if (alias) {
intrinsicBaseName = alias[0];
$spliceApply(parts, $concat([0, 1], alias));
}
for (var i = 1, isOwn = true; i < parts.length; i += 1) {
var part = parts[i];
var first2 = $strSlice(part, 0, 1);
var last2 = $strSlice(part, -1);
if ((first2 === '"' || first2 === "'" || first2 === "`" || (last2 === '"' || last2 === "'" || last2 === "`")) && first2 !== last2) {
throw new $SyntaxError("property names with quotes must have matching quotes");
}
if (part === "constructor" || !isOwn) {
skipFurtherCaching = true;
}
intrinsicBaseName += "." + part;
intrinsicRealName = "%" + intrinsicBaseName + "%";
if (hasOwn2(INTRINSICS, intrinsicRealName)) {
value = INTRINSICS[intrinsicRealName];
} else if (value != null) {
if (!(part in value)) {
if (!allowMissing) {
throw new $TypeError("base intrinsic for " + name + " exists, but the property is not available.");
}
return void undefined2;
}
if ($gOPD && i + 1 >= parts.length) {
var desc = $gOPD(value, part);
isOwn = !!desc;
if (isOwn && "get" in desc && !("originalValue" in desc.get)) {
value = desc.get;
} else {
value = value[part];
}
} else {
isOwn = hasOwn2(value, part);
value = value[part];
}
if (isOwn && !skipFurtherCaching) {
INTRINSICS[intrinsicRealName] = value;
}
}
}
return value;
};
}
});
var require_call_bound = __commonJS2({
"node_modules/call-bound/index.js"(exports2, module2) {
"use strict";
var GetIntrinsic = require_get_intrinsic2();
var callBindBasic = require_call_bind_apply_helpers2();
var $indexOf = callBindBasic([GetIntrinsic("%String.prototype.indexOf%")]);
module2.exports = function callBoundIntrinsic(name, allowMissing) {
var intrinsic = (
/** @type {(this: unknown, ...args: unknown[]) => unknown} */
GetIntrinsic(name, !!allowMissing)
);
if (typeof intrinsic === "function" && $indexOf(name, ".prototype.") > -1) {
return callBindBasic(
/** @type {const} */
[intrinsic]
);
}
return intrinsic;
};
}
});
var require_side_channel_map = __commonJS2({
"node_modules/side-channel-map/index.js"(exports2, module2) {
"use strict";
var GetIntrinsic = require_get_intrinsic2();
var callBound = require_call_bound();
var inspect = require_object_inspect();
var $TypeError = require_type2();
var $Map = GetIntrinsic("%Map%", true);
var $mapGet = callBound("Map.prototype.get", true);
var $mapSet = callBound("Map.prototype.set", true);
var $mapHas = callBound("Map.prototype.has", true);
var $mapDelete = callBound("Map.prototype.delete", true);
var $mapSize = callBound("Map.prototype.size", true);
module2.exports = !!$Map && /** @type {Exclude<import('.'), false>} */
function getSideChannelMap() {
var $m;
var channel = {
assert: function(key) {
if (!channel.has(key)) {
throw new $TypeError("Side channel does not contain " + inspect(key));
}
},
"delete": function(key) {
if ($m) {
var result = $mapDelete($m, key);
if ($mapSize($m) === 0) {
$m = void 0;
}
return result;
}
return false;
},
get: function(key) {
if ($m) {
return $mapGet($m, key);
}
},
has: function(key) {
if ($m) {
return $mapHas($m, key);
}
return false;
},
set: function(key, value) {
if (!$m) {
$m = new $Map();
}
$mapSet($m, key, value);
}
};
return channel;
};
}
});
var require_side_channel_weakmap = __commonJS2({
"node_modules/side-channel-weakmap/index.js"(exports2, module2) {
"use strict";
var GetIntrinsic = require_get_intrinsic2();
var callBound = require_call_bound();
var inspect = require_object_inspect();
var getSideChannelMap = require_side_channel_map();
var $TypeError = require_type2();
var $WeakMap = GetIntrinsic("%WeakMap%", true);
var $weakMapGet = callBound("WeakMap.prototype.get", true);
var $weakMapSet = callBound("WeakMap.prototype.set", true);
var $weakMapHas = callBound("WeakMap.prototype.has", true);
var $weakMapDelete = callBound("WeakMap.prototype.delete", true);
module2.exports = $WeakMap ? (
/** @type {Exclude<import('.'), false>} */
(function getSideChannelWeakMap() {
var $wm;
var $m;
var channel = {
assert: function(key) {
if (!channel.has(key)) {
throw new $TypeError("Side channel does not contain " + inspect(key));
}
},
"delete": function(key) {
if ($WeakMap && key && (typeof key === "object" || typeof key === "function")) {
if ($wm) {
return $weakMapDelete($wm, key);
}
} else if (getSideChannelMap) {
if ($m) {
return $m["delete"](key);
}
}
return false;
},
get: function(key) {
if ($WeakMap && key && (typeof key === "object" || typeof key === "function")) {
if ($wm) {
return $weakMapGet($wm, key);
}
}
return $m && $m.get(key);
},
has: function(key) {
if ($WeakMap && key && (typeof key === "object" || typeof key === "function")) {
if ($wm) {
return $weakMapHas($wm, key);
}
}
return !!$m && $m.has(key);
},
set: function(key, value) {
if ($WeakMap && key && (typeof key === "object" || typeof key === "function")) {
if (!$wm) {
$wm = new $WeakMap();
}
$weakMapSet($wm, key, value);
} else if (getSideChannelMap) {
if (!$m) {
$m = getSideChannelMap();
}
$m.set(key, value);
}
}
};
return channel;
})
) : getSideChannelMap;
}
});
var require_side_channel = __commonJS2({
"node_modules/side-channel/index.js"(exports2, module2) {
"use strict";
var $TypeError = require_type2();
var inspect = require_object_inspect();
var getSideChannelList = require_side_channel_list();
var getSideChannelMap = require_side_channel_map();
var getSideChannelWeakMap = require_side_channel_weakmap();
var makeChannel = getSideChannelWeakMap || getSideChannelMap || getSideChannelList;
module2.exports = function getSideChannel() {
var $channelData;
var channel = {
assert: function(key) {
if (!channel.has(key)) {
throw new $TypeError("Side channel does not contain " + inspect(key));
}
},
"delete": function(key) {
return !!$channelData && $channelData["delete"](key);
},
get: function(key) {
return $channelData && $channelData.get(key);
},
has: function(key) {
return !!$channelData && $channelData.has(key);
},
set: function(key, value) {
if (!$channelData) {
$channelData = makeChannel();
}
$channelData.set(key, value);
}
};
return channel;
};
}
});
var require_formats2 = __commonJS2({
"node_modules/qs/lib/formats.js"(exports2, module2) {
"use strict";
var replace = String.prototype.replace;
var percentTwenties = /%20/g;
var Format = {
RFC1738: "RFC1738",
RFC3986: "RFC3986"
};
module2.exports = {
"default": Format.RFC3986,
formatters: {
RFC1738: function(value) {
return replace.call(value, percentTwenties, "+");
},
RFC3986: function(value) {
return String(value);
}
},
RFC1738: Format.RFC1738,
RFC3986: Format.RFC3986
};
}
});
var require_utils22 = __commonJS2({
"node_modules/qs/lib/utils.js"(exports2, module2) {
"use strict";
var formats = require_formats2();
var has2 = Object.prototype.hasOwnProperty;
var isArray2 = Array.isArray;
var hexTable = (function() {
var array = [];
for (var i = 0; i < 256; ++i) {
array.push("%" + ((i < 16 ? "0" : "") + i.toString(16)).toUpperCase());
}
return array;
})();
var compactQueue = function compactQueue2(queue) {
while (queue.length > 1) {
var item = queue.pop();
var obj = item.obj[item.prop];
if (isArray2(obj)) {
var compacted = [];
for (var j = 0; j < obj.length; ++j) {
if (typeof obj[j] !== "undefined") {
compacted.push(obj[j]);
}
}
item.obj[item.prop] = compacted;
}
}
};
var arrayToObject2 = function arrayToObject22(source, options) {
var obj = options && options.plainObjects ? { __proto__: null } : {};
for (var i = 0; i < source.length; ++i) {
if (typeof source[i] !== "undefined") {
obj[i] = source[i];
}
}
return obj;
};
var merge3 = function merge22(target, source, options) {
if (!source) {
return target;
}
if (typeof source !== "object" && typeof source !== "function") {
if (isArray2(target)) {
target.push(source);
} else if (target && typeof target === "object") {
if (options && (options.plainObjects || options.allowPrototypes) || !has2.call(Object.prototype, source)) {
target[source] = true;
}
} else {
return [target, source];
}
return target;
}
if (!target || typeof target !== "object") {
return [target].concat(source);
}
var mergeTarget = target;
if (isArray2(target) && !isArray2(source)) {
mergeTarget = arrayToObject2(target, options);
}
if (isArray2(target) && isArray2(source)) {
source.forEach(function(item, i) {
if (has2.call(target, i)) {
var targetItem = target[i];
if (targetItem && typeof targetItem === "object" && item && typeof item === "object") {
target[i] = merge22(targetItem, item, options);
} else {
target.push(item);
}
} else {
target[i] = item;
}
});
return target;
}
return Object.keys(source).reduce(function(acc, key) {
var value = source[key];
if (has2.call(acc, key)) {
acc[key] = merge22(acc[key], value, options);
} else {
acc[key] = value;
}
return acc;
}, mergeTarget);
};
var assign = function assignSingleSource(target, source) {
return Object.keys(source).reduce(function(acc, key) {
acc[key] = source[key];
return acc;
}, target);
};
var decode = function(str, defaultDecoder, charset) {
var strWithoutPlus = str.replace(/\+/g, " ");
if (charset === "iso-8859-1") {
return strWithoutPlus.replace(/%[0-9a-f]{2}/gi, unescape);
}
try {
return decodeURIComponent(strWithoutPlus);
} catch (e) {
return strWithoutPlus;
}
};
var limit = 1024;
var encode3 = function encode22(str, defaultEncoder, charset, kind, format) {
if (str.length === 0) {
return str;
}
var string = str;
if (typeof str === "symbol") {
string = Symbol.prototype.toString.call(str);
} else if (typeof str !== "string") {
string = String(str);
}
if (charset === "iso-8859-1") {
return escape(string).replace(/%u[0-9a-f]{4}/gi, function($0) {
return "%26%23" + parseInt($0.slice(2), 16) + "%3B";
});
}
var out = "";
for (var j = 0; j < string.length; j += limit) {
var segment = string.length >= limit ? string.slice(j, j + limit) : string;
var arr = [];
for (var i = 0; i < segment.length; ++i) {
var c = segment.charCodeAt(i);
if (c === 45 || c === 46 || c === 95 || c === 126 || c >= 48 && c <= 57 || c >= 65 && c <= 90 || c >= 97 && c <= 122 || format === formats.RFC1738 && (c === 40 || c === 41)) {
arr[arr.length] = segment.charAt(i);
continue;
}
if (c < 128) {
arr[arr.length] = hexTable[c];
continue;
}
if (c < 2048) {
arr[arr.length] = hexTable[192 | c >> 6] + hexTable[128 | c & 63];
continue;
}
if (c < 55296 || c >= 57344) {
arr[arr.length] = hexTable[224 | c >> 12] + hexTable[128 | c >> 6 & 63] + hexTable[128 | c & 63];
continue;
}
i += 1;
c = 65536 + ((c & 1023) << 10 | segment.charCodeAt(i) & 1023);
arr[arr.length] = hexTable[240 | c >> 18] + hexTable[128 | c >> 12 & 63] + hexTable[128 | c >> 6 & 63] + hexTable[128 | c & 63];
}
out += arr.join("");
}
return out;
};
var compact = function compact2(value) {
var queue = [{ obj: { o: value }, prop: "o" }];
var refs = [];
for (var i = 0; i < queue.length; ++i) {
var item = queue[i];
var obj = item.obj[item.prop];
var keys = Object.keys(obj);
for (var j = 0; j < keys.length; ++j) {
var key = keys[j];
var val2 = obj[key];
if (typeof val2 === "object" && val2 !== null && refs.indexOf(val2) === -1) {
queue.push({ obj, prop: key });
refs.push(val2);
}
}
}
compactQueue(queue);
return value;
};
var isRegExp2 = function isRegExp22(obj) {
return Object.prototype.toString.call(obj) === "[object RegExp]";
};
var isBuffer2 = function isBuffer22(obj) {
if (!obj || typeof obj !== "object") {
return false;
}
return !!(obj.constructor && obj.constructor.isBuffer && obj.constructor.isBuffer(obj));
};
var combine = function combine2(a, b) {
return [].concat(a, b);
};
var maybeMap = function maybeMap2(val2, fn) {
if (isArray2(val2)) {
var mapped = [];
for (var i = 0; i < val2.length; i += 1) {
mapped.push(fn(val2[i]));
}
return mapped;
}
return fn(val2);
};
module2.exports = {
arrayToObject: arrayToObject2,
assign,
combine,
compact,
decode,
encode: encode3,
isBuffer: isBuffer2,
isRegExp: isRegExp2,
maybeMap,
merge: merge3
};
}
});
var require_stringify2 = __commonJS2({
"node_modules/qs/lib/stringify.js"(exports2, module2) {
"use strict";
var getSideChannel = require_side_channel();
var utils = require_utils22();
var formats = require_formats2();
var has2 = Object.prototype.hasOwnProperty;
var arrayPrefixGenerators = {
brackets: function brackets(prefix) {
return prefix + "[]";
},
comma: "comma",
indices: function indices(prefix, key) {
return prefix + "[" + key + "]";
},
repeat: function repeat(prefix) {
return prefix;
}
};
var isArray2 = Array.isArray;
var push = Array.prototype.push;
var pushToArray = function(arr, valueOrArray) {
push.apply(arr, isArray2(valueOrArray) ? valueOrArray : [valueOrArray]);
};
var toISO = Date.prototype.toISOString;
var defaultFormat = formats["default"];
var defaults2 = {
addQueryPrefix: false,
allowDots: false,
allowEmptyArrays: false,
arrayFormat: "indices",
charset: "utf-8",
charsetSentinel: false,
commaRoundTrip: false,
delimiter: "&",
encode: true,
encodeDotInKeys: false,
encoder: utils.encode,
encodeValuesOnly: false,
filter: void 0,
format: defaultFormat,
formatter: formats.formatters[defaultFormat],
// deprecated
indices: false,
serializeDate: function serializeDate(date) {
return toISO.call(date);
},
skipNulls: false,
strictNullHandling: false
};
var isNonNullishPrimitive = function isNonNullishPrimitive2(v) {
return typeof v === "string" || typeof v === "number" || typeof v === "boolean" || typeof v === "symbol" || typeof v === "bigint";
};
var sentinel = {};
var stringify2 = function stringify22(object, prefix, generateArrayPrefix, commaRoundTrip, allowEmptyArrays, strictNullHandling, skipNulls, encodeDotInKeys, encoder, filter5, sort, allowDots, serializeDate, format, formatter, encodeValuesOnly, charset, sideChannel) {
var obj = object;
var tmpSc = sideChannel;
var step = 0;
var findFlag = false;
while ((tmpSc = tmpSc.get(sentinel)) !== void 0 && !findFlag) {
var pos = tmpSc.get(object);
step += 1;
if (typeof pos !== "undefined") {
if (pos === step) {
throw new RangeError("Cyclic object value");
} else {
findFlag = true;
}
}
if (typeof tmpSc.get(sentinel) === "undefined") {
step = 0;
}
}
if (typeof filter5 === "function") {
obj = filter5(prefix, obj);
} else if (obj instanceof Date) {
obj = serializeDate(obj);
} else if (generateArrayPrefix === "comma" && isArray2(obj)) {
obj = utils.maybeMap(obj, function(value2) {
if (value2 instanceof Date) {
return serializeDate(value2);
}
return value2;
});
}
if (obj === null) {
if (strictNullHandling) {
return encoder && !encodeValuesOnly ? encoder(prefix, defaults2.encoder, charset, "key", format) : prefix;
}
obj = "";
}
if (isNonNullishPrimitive(obj) || utils.isBuffer(obj)) {
if (encoder) {
var keyValue = encodeValuesOnly ? prefix : encoder(prefix, defaults2.encoder, charset, "key", format);
return [formatter(keyValue) + "=" + formatter(encoder(obj, defaults2.encoder, charset, "value", format))];
}
return [formatter(prefix) + "=" + formatter(String(obj))];
}
var values = [];
if (typeof obj === "undefined") {
return values;
}
var objKeys;
if (generateArrayPrefix === "comma" && isArray2(obj)) {
if (encodeValuesOnly && encoder) {
obj = utils.maybeMap(obj, encoder);
}
objKeys = [{ value: obj.length > 0 ? obj.join(",") || null : void 0 }];
} else if (isArray2(filter5)) {
objKeys = filter5;
} else {
var keys = Object.keys(obj);
objKeys = sort ? keys.sort(sort) : keys;
}
var encodedPrefix = encodeDotInKeys ? String(prefix).replace(/\./g, "%2E") : String(prefix);
var adjustedPrefix = commaRoundTrip && isArray2(obj) && obj.length === 1 ? encodedPrefix + "[]" : encodedPrefix;
if (allowEmptyArrays && isArray2(obj) && obj.length === 0) {
return adjustedPrefix + "[]";
}
for (var j = 0; j < objKeys.length; ++j) {
var key = objKeys[j];
var value = typeof key === "object" && key && typeof key.value !== "undefined" ? key.value : obj[key];
if (skipNulls && value === null) {
continue;
}
var encodedKey = allowDots && encodeDotInKeys ? String(key).replace(/\./g, "%2E") : String(key);
var keyPrefix = isArray2(obj) ? typeof generateArrayPrefix === "function" ? generateArrayPrefix(adjustedPrefix, encodedKey) : adjustedPrefix : adjustedPrefix + (allowDots ? "." + encodedKey : "[" + encodedKey + "]");
sideChannel.set(object, step);
var valueSideChannel = getSideChannel();
valueSideChannel.set(sentinel, sideChannel);
pushToArray(values, stringify22(
value,
keyPrefix,
generateArrayPrefix,
commaRoundTrip,
allowEmptyArrays,
strictNullHandling,
skipNulls,
encodeDotInKeys,
generateArrayPrefix === "comma" && encodeValuesOnly && isArray2(obj) ? null : encoder,
filter5,
sort,
allowDots,
serializeDate,
format,
formatter,
encodeValuesOnly,
charset,
valueSideChannel
));
}
return values;
};
var normalizeStringifyOptions = function normalizeStringifyOptions2(opts) {
if (!opts) {
return defaults2;
}
if (typeof opts.allowEmptyArrays !== "undefined" && typeof opts.allowEmptyArrays !== "boolean") {
throw new TypeError("`allowEmptyArrays` option can only be `true` or `false`, when provided");
}
if (typeof opts.encodeDotInKeys !== "undefined" && typeof opts.encodeDotInKeys !== "boolean") {
throw new TypeError("`encodeDotInKeys` option can only be `true` or `false`, when provided");
}
if (opts.encoder !== null && typeof opts.encoder !== "undefined" && typeof opts.encoder !== "function") {
throw new TypeError("Encoder has to be a function.");
}
var charset = opts.charset || defaults2.charset;
if (typeof opts.charset !== "undefined" && opts.charset !== "utf-8" && opts.charset !== "iso-8859-1") {
throw new TypeError("The charset option must be either utf-8, iso-8859-1, or undefined");
}
var format = formats["default"];
if (typeof opts.format !== "undefined") {
if (!has2.call(formats.formatters, opts.format)) {
throw new TypeError("Unknown format option provided.");
}
format = opts.format;
}
var formatter = formats.formatters[format];
var filter5 = defaults2.filter;
if (typeof opts.filter === "function" || isArray2(opts.filter)) {
filter5 = opts.filter;
}
var arrayFormat;
if (opts.arrayFormat in arrayPrefixGenerators) {
arrayFormat = opts.arrayFormat;
} else if ("indices" in opts) {
arrayFormat = opts.indices ? "indices" : "repeat";
} else {
arrayFormat = defaults2.arrayFormat;
}
if ("commaRoundTrip" in opts && typeof opts.commaRoundTrip !== "boolean") {
throw new TypeError("`commaRoundTrip` must be a boolean, or absent");
}
var allowDots = typeof opts.allowDots === "undefined" ? opts.encodeDotInKeys === true ? true : defaults2.allowDots : !!opts.allowDots;
return {
addQueryPrefix: typeof opts.addQueryPrefix === "boolean" ? opts.addQueryPrefix : defaults2.addQueryPrefix,
allowDots,
allowEmptyArrays: typeof opts.allowEmptyArrays === "boolean" ? !!opts.allowEmptyArrays : defaults2.allowEmptyArrays,
arrayFormat,
charset,
charsetSentinel: typeof opts.charsetSentinel === "boolean" ? opts.charsetSentinel : defaults2.charsetSentinel,
commaRoundTrip: !!opts.commaRoundTrip,
delimiter: typeof opts.delimiter === "undefined" ? defaults2.delimiter : opts.delimiter,
encode: typeof opts.encode === "boolean" ? opts.encode : defaults2.encode,
encodeDotInKeys: typeof opts.encodeDotInKeys === "boolean" ? opts.encodeDotInKeys : defaults2.encodeDotInKeys,
encoder: typeof opts.encoder === "function" ? opts.encoder : defaults2.encoder,
encodeValuesOnly: typeof opts.encodeValuesOnly === "boolean" ? opts.encodeValuesOnly : defaults2.encodeValuesOnly,
filter: filter5,
format,
formatter,
serializeDate: typeof opts.serializeDate === "function" ? opts.serializeDate : defaults2.serializeDate,
skipNulls: typeof opts.skipNulls === "boolean" ? opts.skipNulls : defaults2.skipNulls,
sort: typeof opts.sort === "function" ? opts.sort : null,
strictNullHandling: typeof opts.strictNullHandling === "boolean" ? opts.strictNullHandling : defaults2.strictNullHandling
};
};
module2.exports = function(object, opts) {
var obj = object;
var options = normalizeStringifyOptions(opts);
var objKeys;
var filter5;
if (typeof options.filter === "function") {
filter5 = options.filter;
obj = filter5("", obj);
} else if (isArray2(options.filter)) {
filter5 = options.filter;
objKeys = filter5;
}
var keys = [];
if (typeof obj !== "object" || obj === null) {
return "";
}
var generateArrayPrefix = arrayPrefixGenerators[options.arrayFormat];
var commaRoundTrip = generateArrayPrefix === "comma" && options.commaRoundTrip;
if (!objKeys) {
objKeys = Object.keys(obj);
}
if (options.sort) {
objKeys.sort(options.sort);
}
var sideChannel = getSideChannel();
for (var i = 0; i < objKeys.length; ++i) {
var key = objKeys[i];
var value = obj[key];
if (options.skipNulls && value === null) {
continue;
}
pushToArray(keys, stringify2(
value,
key,
generateArrayPrefix,
commaRoundTrip,
options.allowEmptyArrays,
options.strictNullHandling,
options.skipNulls,
options.encodeDotInKeys,
options.encode ? options.encoder : null,
options.filter,
options.sort,
options.allowDots,
options.serializeDate,
options.format,
options.formatter,
options.encodeValuesOnly,
options.charset,
sideChannel
));
}
var joined = keys.join(options.delimiter);
var prefix = options.addQueryPrefix === true ? "?" : "";
if (options.charsetSentinel) {
if (options.charset === "iso-8859-1") {
prefix += "utf8=%26%2310003%3B&";
} else {
prefix += "utf8=%E2%9C%93&";
}
}
return joined.length > 0 ? prefix + joined : "";
};
}
});
var require_parse3 = __commonJS2({
"node_modules/qs/lib/parse.js"(exports2, module2) {
"use strict";
var utils = require_utils22();
var has2 = Object.prototype.hasOwnProperty;
var isArray2 = Array.isArray;
var defaults2 = {
allowDots: false,
allowEmptyArrays: false,
allowPrototypes: false,
allowSparse: false,
arrayLimit: 20,
charset: "utf-8",
charsetSentinel: false,
comma: false,
decodeDotInKeys: false,
decoder: utils.decode,
delimiter: "&",
depth: 5,
duplicates: "combine",
ignoreQueryPrefix: false,
interpretNumericEntities: false,
parameterLimit: 1e3,
parseArrays: true,
plainObjects: false,
strictDepth: false,
strictNullHandling: false,
throwOnLimitExceeded: false
};
var interpretNumericEntities = function(str) {
return str.replace(/&#(\d+);/g, function($0, numberStr) {
return String.fromCharCode(parseInt(numberStr, 10));
});
};
var parseArrayValue = function(val2, options, currentArrayLength) {
if (val2 && typeof val2 === "string" && options.comma && val2.indexOf(",") > -1) {
return val2.split(",");
}
if (options.throwOnLimitExceeded && currentArrayLength >= options.arrayLimit) {
throw new RangeError("Array limit exceeded. Only " + options.arrayLimit + " element" + (options.arrayLimit === 1 ? "" : "s") + " allowed in an array.");
}
return val2;
};
var isoSentinel = "utf8=%26%2310003%3B";
var charsetSentinel = "utf8=%E2%9C%93";
var parseValues = function parseQueryStringValues(str, options) {
var obj = { __proto__: null };
var cleanStr = options.ignoreQueryPrefix ? str.replace(/^\?/, "") : str;
cleanStr = cleanStr.replace(/%5B/gi, "[").replace(/%5D/gi, "]");
var limit = options.parameterLimit === Infinity ? void 0 : options.parameterLimit;
var parts = cleanStr.split(
options.delimiter,
options.throwOnLimitExceeded ? limit + 1 : limit
);
if (options.throwOnLimitExceeded && parts.length > limit) {
throw new RangeError("Parameter limit exceeded. Only " + limit + " parameter" + (limit === 1 ? "" : "s") + " allowed.");
}
var skipIndex = -1;
var i;
var charset = options.charset;
if (options.charsetSentinel) {
for (i = 0; i < parts.length; ++i) {
if (parts[i].indexOf("utf8=") === 0) {
if (parts[i] === charsetSentinel) {
charset = "utf-8";
} else if (parts[i] === isoSentinel) {
charset = "iso-8859-1";
}
skipIndex = i;
i = parts.length;
}
}
}
for (i = 0; i < parts.length; ++i) {
if (i === skipIndex) {
continue;
}
var part = parts[i];
var bracketEqualsPos = part.indexOf("]=");
var pos = bracketEqualsPos === -1 ? part.indexOf("=") : bracketEqualsPos + 1;
var key;
var val2;
if (pos === -1) {
key = options.decoder(part, defaults2.decoder, charset, "key");
val2 = options.strictNullHandling ? null : "";
} else {
key = options.decoder(part.slice(0, pos), defaults2.decoder, charset, "key");
val2 = utils.maybeMap(
parseArrayValue(
part.slice(pos + 1),
options,
isArray2(obj[key]) ? obj[key].length : 0
),
function(encodedVal) {
return options.decoder(encodedVal, defaults2.decoder, charset, "value");
}
);
}
if (val2 && options.interpretNumericEntities && charset === "iso-8859-1") {
val2 = interpretNumericEntities(String(val2));
}
if (part.indexOf("[]=") > -1) {
val2 = isArray2(val2) ? [val2] : val2;
}
var existing = has2.call(obj, key);
if (existing && options.duplicates === "combine") {
obj[key] = utils.combine(obj[key], val2);
} else if (!existing || options.duplicates === "last") {
obj[key] = val2;
}
}
return obj;
};
var parseObject = function(chain, val2, options, valuesParsed) {
var currentArrayLength = 0;
if (chain.length > 0 && chain[chain.length - 1] === "[]") {
var parentKey = chain.slice(0, -1).join("");
currentArrayLength = Array.isArray(val2) && val2[parentKey] ? val2[parentKey].length : 0;
}
var leaf = valuesParsed ? val2 : parseArrayValue(val2, options, currentArrayLength);
for (var i = chain.length - 1; i >= 0; --i) {
var obj;
var root2 = chain[i];
if (root2 === "[]" && options.parseArrays) {
obj = options.allowEmptyArrays && (leaf === "" || options.strictNullHandling && leaf === null) ? [] : utils.combine([], leaf);
} else {
obj = options.plainObjects ? { __proto__: null } : {};
var cleanRoot = root2.charAt(0) === "[" && root2.charAt(root2.length - 1) === "]" ? root2.slice(1, -1) : root2;
var decodedRoot = options.decodeDotInKeys ? cleanRoot.replace(/%2E/g, ".") : cleanRoot;
var index2 = parseInt(decodedRoot, 10);
if (!options.parseArrays && decodedRoot === "") {
obj = { 0: leaf };
} else if (!isNaN(index2) && root2 !== decodedRoot && String(index2) === decodedRoot && index2 >= 0 && (options.parseArrays && index2 <= options.arrayLimit)) {
obj = [];
obj[index2] = leaf;
} else if (decodedRoot !== "__proto__") {
obj[decodedRoot] = leaf;
}
}
leaf = obj;
}
return leaf;
};
var parseKeys = function parseQueryStringKeys(givenKey, val2, options, valuesParsed) {
if (!givenKey) {
return;
}
var key = options.allowDots ? givenKey.replace(/\.([^.[]+)/g, "[$1]") : givenKey;
var brackets = /(\[[^[\]]*])/;
var child = /(\[[^[\]]*])/g;
var segment = options.depth > 0 && brackets.exec(key);
var parent2 = segment ? key.slice(0, segment.index) : key;
var keys = [];
if (parent2) {
if (!options.plainObjects && has2.call(Object.prototype, parent2)) {
if (!options.allowPrototypes) {
return;
}
}
keys.push(parent2);
}
var i = 0;
while (options.depth > 0 && (segment = child.exec(key)) !== null && i < options.depth) {
i += 1;
if (!options.plainObjects && has2.call(Object.prototype, segment[1].slice(1, -1))) {
if (!options.allowPrototypes) {
return;
}
}
keys.push(segment[1]);
}
if (segment) {
if (options.strictDepth === true) {
throw new RangeError("Input depth exceeded depth option of " + options.depth + " and strictDepth is true");
}
keys.push("[" + key.slice(segment.index) + "]");
}
return parseObject(keys, val2, options, valuesParsed);
};
var normalizeParseOptions = function normalizeParseOptions2(opts) {
if (!opts) {
return defaults2;
}
if (typeof opts.allowEmptyArrays !== "undefined" && typeof opts.allowEmptyArrays !== "boolean") {
throw new TypeError("`allowEmptyArrays` option can only be `true` or `false`, when provided");
}
if (typeof opts.decodeDotInKeys !== "undefined" && typeof opts.decodeDotInKeys !== "boolean") {
throw new TypeError("`decodeDotInKeys` option can only be `true` or `false`, when provided");
}
if (opts.decoder !== null && typeof opts.decoder !== "undefined" && typeof opts.decoder !== "function") {
throw new TypeError("Decoder has to be a function.");
}
if (typeof opts.charset !== "undefined" && opts.charset !== "utf-8" && opts.charset !== "iso-8859-1") {
throw new TypeError("The charset option must be either utf-8, iso-8859-1, or undefined");
}
if (typeof opts.throwOnLimitExceeded !== "undefined" && typeof opts.throwOnLimitExceeded !== "boolean") {
throw new TypeError("`throwOnLimitExceeded` option must be a boolean");
}
var charset = typeof opts.charset === "undefined" ? defaults2.charset : opts.charset;
var duplicates = typeof opts.duplicates === "undefined" ? defaults2.duplicates : opts.duplicates;
if (duplicates !== "combine" && duplicates !== "first" && duplicates !== "last") {
throw new TypeError("The duplicates option must be either combine, first, or last");
}
var allowDots = typeof opts.allowDots === "undefined" ? opts.decodeDotInKeys === true ? true : defaults2.allowDots : !!opts.allowDots;
return {
allowDots,
allowEmptyArrays: typeof opts.allowEmptyArrays === "boolean" ? !!opts.allowEmptyArrays : defaults2.allowEmptyArrays,
allowPrototypes: typeof opts.allowPrototypes === "boolean" ? opts.allowPrototypes : defaults2.allowPrototypes,
allowSparse: typeof opts.allowSparse === "boolean" ? opts.allowSparse : defaults2.allowSparse,
arrayLimit: typeof opts.arrayLimit === "number" ? opts.arrayLimit : defaults2.arrayLimit,
charset,
charsetSentinel: typeof opts.charsetSentinel === "boolean" ? opts.charsetSentinel : defaults2.charsetSentinel,
comma: typeof opts.comma === "boolean" ? opts.comma : defaults2.comma,
decodeDotInKeys: typeof opts.decodeDotInKeys === "boolean" ? opts.decodeDotInKeys : defaults2.decodeDotInKeys,
decoder: typeof opts.decoder === "function" ? opts.decoder : defaults2.decoder,
delimiter: typeof opts.delimiter === "string" || utils.isRegExp(opts.delimiter) ? opts.delimiter : defaults2.delimiter,
// eslint-disable-next-line no-implicit-coercion, no-extra-parens
depth: typeof opts.depth === "number" || opts.depth === false ? +opts.depth : defaults2.depth,
duplicates,
ignoreQueryPrefix: opts.ignoreQueryPrefix === true,
interpretNumericEntities: typeof opts.interpretNumericEntities === "boolean" ? opts.interpretNumericEntities : defaults2.interpretNumericEntities,
parameterLimit: typeof opts.parameterLimit === "number" ? opts.parameterLimit : defaults2.parameterLimit,
parseArrays: opts.parseArrays !== false,
plainObjects: typeof opts.plainObjects === "boolean" ? opts.plainObjects : defaults2.plainObjects,
strictDepth: typeof opts.strictDepth === "boolean" ? !!opts.strictDepth : defaults2.strictDepth,
strictNullHandling: typeof opts.strictNullHandling === "boolean" ? opts.strictNullHandling : defaults2.strictNullHandling,
throwOnLimitExceeded: typeof opts.throwOnLimitExceeded === "boolean" ? opts.throwOnLimitExceeded : false
};
};
module2.exports = function(str, opts) {
var options = normalizeParseOptions(opts);
if (str === "" || str === null || typeof str === "undefined") {
return options.plainObjects ? { __proto__: null } : {};
}
var tempObj = typeof str === "string" ? parseValues(str, options) : str;
var obj = options.plainObjects ? { __proto__: null } : {};
var keys = Object.keys(tempObj);
for (var i = 0; i < keys.length; ++i) {
var key = keys[i];
var newObj = parseKeys(key, tempObj[key], options, typeof str === "string");
obj = utils.merge(obj, newObj, options);
}
if (options.allowSparse === true) {
return obj;
}
return utils.compact(obj);
};
}
});
var require_lib3 = __commonJS2({
"node_modules/qs/lib/index.js"(exports2, module2) {
"use strict";
var stringify2 = require_stringify2();
var parse8 = require_parse3();
var formats = require_formats2();
module2.exports = {
formats,
parse: parse8,
stringify: stringify2
};
}
});
var require_urlencoded = __commonJS2({
"node_modules/body-parser/lib/types/urlencoded.js"(exports2, module2) {
"use strict";
var createError = require_http_errors();
var debug = require_src2()("body-parser:urlencoded");
var isFinished = require_on_finished().isFinished;
var read = require_read();
var typeis = require_type_is();
var qs = require_lib3();
var { getCharset, normalizeOptions } = require_utils3();
module2.exports = urlencoded;
function urlencoded(options) {
var { inflate, limit, verify, shouldParse } = normalizeOptions(options, "application/x-www-form-urlencoded");
var defaultCharset = options?.defaultCharset || "utf-8";
if (defaultCharset !== "utf-8" && defaultCharset !== "iso-8859-1") {
throw new TypeError("option defaultCharset must be either utf-8 or iso-8859-1");
}
var queryparse = createQueryParser(options);
function parse8(body, encoding) {
return body.length ? queryparse(body, encoding) : {};
}
return function urlencodedParser(req, res, next2) {
if (isFinished(req)) {
debug("body already parsed");
next2();
return;
}
if (!("body" in req)) {
req.body = void 0;
}
if (!typeis.hasBody(req)) {
debug("skip empty body");
next2();
return;
}
debug("content-type %j", req.headers["content-type"]);
if (!shouldParse(req)) {
debug("skip parsing");
next2();
return;
}
var charset = getCharset(req) || defaultCharset;
if (charset !== "utf-8" && charset !== "iso-8859-1") {
debug("invalid charset");
next2(createError(415, 'unsupported charset "' + charset.toUpperCase() + '"', {
charset,
type: "charset.unsupported"
}));
return;
}
read(req, res, next2, parse8, debug, {
encoding: charset,
inflate,
limit,
verify
});
};
}
function createQueryParser(options) {
var extended = Boolean(options?.extended);
var parameterLimit = options?.parameterLimit !== void 0 ? options?.parameterLimit : 1e3;
var charsetSentinel = options?.charsetSentinel;
var interpretNumericEntities = options?.interpretNumericEntities;
var depth = extended ? options?.depth !== void 0 ? options?.depth : 32 : 0;
if (isNaN(parameterLimit) || parameterLimit < 1) {
throw new TypeError("option parameterLimit must be a positive number");
}
if (isNaN(depth) || depth < 0) {
throw new TypeError("option depth must be a zero or a positive number");
}
if (isFinite(parameterLimit)) {
parameterLimit = parameterLimit | 0;
}
return function queryparse(body, encoding) {
var paramCount = parameterCount(body, parameterLimit);
if (paramCount === void 0) {
debug("too many parameters");
throw createError(413, "too many parameters", {
type: "parameters.too.many"
});
}
var arrayLimit = extended ? Math.max(100, paramCount) : 0;
debug("parse " + (extended ? "extended " : "") + "urlencoding");
try {
return qs.parse(body, {
allowPrototypes: true,
arrayLimit,
depth,
charsetSentinel,
interpretNumericEntities,
charset: encoding,
parameterLimit,
strictDepth: true
});
} catch (err2) {
if (err2 instanceof RangeError) {
throw createError(400, "The input exceeded the depth", {
type: "querystring.parse.rangeError"
});
} else {
throw err2;
}
}
};
}
function parameterCount(body, limit) {
var len = body.split("&").length;
return len > limit ? void 0 : len - 1;
}
}
});
var require_body_parser = __commonJS2({
"node_modules/body-parser/index.js"(exports2, module2) {
"use strict";
exports2 = module2.exports = bodyParser;
Object.defineProperty(exports2, "json", {
configurable: true,
enumerable: true,
get: () => require_json()
});
Object.defineProperty(exports2, "raw", {
configurable: true,
enumerable: true,
get: () => require_raw()
});
Object.defineProperty(exports2, "text", {
configurable: true,
enumerable: true,
get: () => require_text()
});
Object.defineProperty(exports2, "urlencoded", {
configurable: true,
enumerable: true,
get: () => require_urlencoded()
});
function bodyParser() {
throw new Error("The bodyParser() generic has been split into individual middleware to use instead.");
}
}
});
var require_merge_descriptors = __commonJS2({
"node_modules/merge-descriptors/index.js"(exports2, module2) {
"use strict";
function mergeDescriptors(destination, source, overwrite = true) {
if (!destination) {
throw new TypeError("The `destination` argument is required.");
}
if (!source) {
throw new TypeError("The `source` argument is required.");
}
for (const name of Object.getOwnPropertyNames(source)) {
if (!overwrite && Object.hasOwn(destination, name)) {
continue;
}
const descriptor = Object.getOwnPropertyDescriptor(source, name);
Object.defineProperty(destination, name, descriptor);
}
return destination;
}
module2.exports = mergeDescriptors;
}
});
var require_encodeurl = __commonJS2({
"node_modules/encodeurl/index.js"(exports2, module2) {
"use strict";
module2.exports = encodeUrl;
var ENCODE_CHARS_REGEXP = /(?:[^\x21\x23-\x3B\x3D\x3F-\x5F\x61-\x7A\x7C\x7E]|%(?:[^0-9A-Fa-f]|[0-9A-Fa-f][^0-9A-Fa-f]|$))+/g;
var UNMATCHED_SURROGATE_PAIR_REGEXP = /(^|[^\uD800-\uDBFF])[\uDC00-\uDFFF]|[\uD800-\uDBFF]([^\uDC00-\uDFFF]|$)/g;
var UNMATCHED_SURROGATE_PAIR_REPLACE = "$1\uFFFD$2";
function encodeUrl(url2) {
return String(url2).replace(UNMATCHED_SURROGATE_PAIR_REGEXP, UNMATCHED_SURROGATE_PAIR_REPLACE).replace(ENCODE_CHARS_REGEXP, encodeURI);
}
}
});
var require_escape_html = __commonJS2({
"node_modules/escape-html/index.js"(exports2, module2) {
"use strict";
var matchHtmlRegExp = /["'&<>]/;
module2.exports = escapeHtml;
function escapeHtml(string) {
var str = "" + string;
var match = matchHtmlRegExp.exec(str);
if (!match) {
return str;
}
var escape22;
var html3 = "";
var index2 = 0;
var lastIndex = 0;
for (index2 = match.index; index2 < str.length; index2++) {
switch (str.charCodeAt(index2)) {
case 34:
escape22 = """;
break;
case 38:
escape22 = "&";
break;
case 39:
escape22 = "'";
break;
case 60:
escape22 = "<";
break;
case 62:
escape22 = ">";
break;
default:
continue;
}
if (lastIndex !== index2) {
html3 += str.substring(lastIndex, index2);
}
lastIndex = index2 + 1;
html3 += escape22;
}
return lastIndex !== index2 ? html3 + str.substring(lastIndex, index2) : html3;
}
}
});
var require_parseurl = __commonJS2({
"node_modules/parseurl/index.js"(exports2, module2) {
"use strict";
var url2 = require("url");
var parse8 = url2.parse;
var Url = url2.Url;
module2.exports = parseurl;
module2.exports.original = originalurl;
function parseurl(req) {
var url22 = req.url;
if (url22 === void 0) {
return void 0;
}
var parsed = req._parsedUrl;
if (fresh(url22, parsed)) {
return parsed;
}
parsed = fastparse(url22);
parsed._raw = url22;
return req._parsedUrl = parsed;
}
function originalurl(req) {
var url22 = req.originalUrl;
if (typeof url22 !== "string") {
return parseurl(req);
}
var parsed = req._parsedOriginalUrl;
if (fresh(url22, parsed)) {
return parsed;
}
parsed = fastparse(url22);
parsed._raw = url22;
return req._parsedOriginalUrl = parsed;
}
function fastparse(str) {
if (typeof str !== "string" || str.charCodeAt(0) !== 47) {
return parse8(str);
}
var pathname = str;
var query = null;
var search = null;
for (var i = 1; i < str.length; i++) {
switch (str.charCodeAt(i)) {
case 63:
if (search === null) {
pathname = str.substring(0, i);
query = str.substring(i + 1);
search = str.substring(i);
}
break;
case 9:
/* \t */
case 10:
/* \n */
case 12:
/* \f */
case 13:
/* \r */
case 32:
/* */
case 35:
/* # */
case 160:
case 65279:
return parse8(str);
}
}
var url22 = Url !== void 0 ? new Url() : {};
url22.path = str;
url22.href = str;
url22.pathname = pathname;
if (search !== null) {
url22.query = query;
url22.search = search;
}
return url22;
}
function fresh(url22, parsedUrl) {
return typeof parsedUrl === "object" && parsedUrl !== null && (Url === void 0 || parsedUrl instanceof Url) && parsedUrl._raw === url22;
}
}
});
var require_finalhandler = __commonJS2({
"node_modules/finalhandler/index.js"(exports2, module2) {
"use strict";
var debug = require_src2()("finalhandler");
var encodeUrl = require_encodeurl();
var escapeHtml = require_escape_html();
var onFinished = require_on_finished();
var parseUrl = require_parseurl();
var statuses = require_statuses();
var isFinished = onFinished.isFinished;
function createHtmlDocument(message) {
var body = escapeHtml(message).replaceAll("\n", "<br>").replaceAll(" ", " ");
return '<!DOCTYPE html>\n<html lang="en">\n<head>\n<meta charset="utf-8">\n<title>Error</title>\n</head>\n<body>\n<pre>' + body + "</pre>\n</body>\n</html>\n";
}
module2.exports = finalhandler;
function finalhandler(req, res, options) {
var opts = options || {};
var env = opts.env || "production";
var onerror = opts.onerror;
return function(err2) {
var headers;
var msg;
var status;
if (!err2 && res.headersSent) {
debug("cannot 404 after headers sent");
return;
}
if (err2) {
status = getErrorStatusCode(err2);
if (status === void 0) {
status = getResponseStatusCode(res);
} else {
headers = getErrorHeaders(err2);
}
msg = getErrorMessage(err2, status, env);
} else {
status = 404;
msg = "Cannot " + req.method + " " + encodeUrl(getResourceName(req));
}
debug("default %s", status);
if (err2 && onerror) {
setImmediate(onerror, err2, req, res);
}
if (res.headersSent) {
debug("cannot %d after headers sent", status);
if (req.socket) {
req.socket.destroy();
}
return;
}
send(req, res, status, headers, msg);
};
}
function getErrorHeaders(err2) {
if (!err2.headers || typeof err2.headers !== "object") {
return void 0;
}
return { ...err2.headers };
}
function getErrorMessage(err2, status, env) {
var msg;
if (env !== "production") {
msg = err2.stack;
if (!msg && typeof err2.toString === "function") {
msg = err2.toString();
}
}
return msg || statuses.message[status];
}
function getErrorStatusCode(err2) {
if (typeof err2.status === "number" && err2.status >= 400 && err2.status < 600) {
return err2.status;
}
if (typeof err2.statusCode === "number" && err2.statusCode >= 400 && err2.statusCode < 600) {
return err2.statusCode;
}
return void 0;
}
function getResourceName(req) {
try {
return parseUrl.original(req).pathname;
} catch (e) {
return "resource";
}
}
function getResponseStatusCode(res) {
var status = res.statusCode;
if (typeof status !== "number" || status < 400 || status > 599) {
status = 500;
}
return status;
}
function send(req, res, status, headers, message) {
function write() {
var body = createHtmlDocument(message);
res.statusCode = status;
if (req.httpVersionMajor < 2) {
res.statusMessage = statuses.message[status];
}
res.removeHeader("Content-Encoding");
res.removeHeader("Content-Language");
res.removeHeader("Content-Range");
for (const [key, value] of Object.entries(headers ?? {})) {
res.setHeader(key, value);
}
res.setHeader("Content-Security-Policy", "default-src 'none'");
res.setHeader("X-Content-Type-Options", "nosniff");
res.setHeader("Content-Type", "text/html; charset=utf-8");
res.setHeader("Content-Length", Buffer.byteLength(body, "utf8"));
if (req.method === "HEAD") {
res.end();
return;
}
res.end(body, "utf8");
}
if (isFinished(req)) {
write();
return;
}
req.unpipe();
onFinished(req, write);
req.resume();
}
}
});
var require_view = __commonJS2({
"node_modules/express/lib/view.js"(exports2, module2) {
"use strict";
var debug = require_src2()("express:view");
var path = require("node:path");
var fs = require("node:fs");
var dirname = path.dirname;
var basename = path.basename;
var extname = path.extname;
var join = path.join;
var resolve = path.resolve;
module2.exports = View;
function View(name, options) {
var opts = options || {};
this.defaultEngine = opts.defaultEngine;
this.ext = extname(name);
this.name = name;
this.root = opts.root;
if (!this.ext && !this.defaultEngine) {
throw new Error("No default engine was specified and no extension was provided.");
}
var fileName = name;
if (!this.ext) {
this.ext = this.defaultEngine[0] !== "." ? "." + this.defaultEngine : this.defaultEngine;
fileName += this.ext;
}
if (!opts.engines[this.ext]) {
var mod = this.ext.slice(1);
debug('require "%s"', mod);
var fn = require(mod).__express;
if (typeof fn !== "function") {
throw new Error('Module "' + mod + '" does not provide a view engine.');
}
opts.engines[this.ext] = fn;
}
this.engine = opts.engines[this.ext];
this.path = this.lookup(fileName);
}
View.prototype.lookup = function lookup(name) {
var path2;
var roots = [].concat(this.root);
debug('lookup "%s"', name);
for (var i = 0; i < roots.length && !path2; i++) {
var root2 = roots[i];
var loc = resolve(root2, name);
var dir = dirname(loc);
var file = basename(loc);
path2 = this.resolve(dir, file);
}
return path2;
};
View.prototype.render = function render3(options, callback) {
var sync = true;
debug('render "%s"', this.path);
this.engine(this.path, options, function onRender() {
if (!sync) {
return callback.apply(this, arguments);
}
var args = new Array(arguments.length);
var cntx = this;
for (var i = 0; i < arguments.length; i++) {
args[i] = arguments[i];
}
return process.nextTick(function renderTick() {
return callback.apply(cntx, args);
});
});
sync = false;
};
View.prototype.resolve = function resolve2(dir, file) {
var ext = this.ext;
var path2 = join(dir, file);
var stat = tryStat(path2);
if (stat && stat.isFile()) {
return path2;
}
path2 = join(dir, basename(file, ext), "index" + ext);
stat = tryStat(path2);
if (stat && stat.isFile()) {
return path2;
}
};
function tryStat(path2) {
debug('stat "%s"', path2);
try {
return fs.statSync(path2);
} catch (e) {
return void 0;
}
}
}
});
var require_etag = __commonJS2({
"node_modules/etag/index.js"(exports2, module2) {
"use strict";
module2.exports = etag;
var crypto4 = require("crypto");
var Stats = require("fs").Stats;
var toString4 = Object.prototype.toString;
function entitytag(entity) {
if (entity.length === 0) {
return '"0-2jmj7l5rSw0yVb/vlWAYkK/YBwk"';
}
var hash = crypto4.createHash("sha1").update(entity, "utf8").digest("base64").substring(0, 27);
var len = typeof entity === "string" ? Buffer.byteLength(entity, "utf8") : entity.length;
return '"' + len.toString(16) + "-" + hash + '"';
}
function etag(entity, options) {
if (entity == null) {
throw new TypeError("argument entity is required");
}
var isStats = isstats(entity);
var weak = options && typeof options.weak === "boolean" ? options.weak : isStats;
if (!isStats && typeof entity !== "string" && !Buffer.isBuffer(entity)) {
throw new TypeError("argument entity must be string, Buffer, or fs.Stats");
}
var tag = isStats ? stattag(entity) : entitytag(entity);
return weak ? "W/" + tag : tag;
}
function isstats(obj) {
if (typeof Stats === "function" && obj instanceof Stats) {
return true;
}
return obj && typeof obj === "object" && "ctime" in obj && toString4.call(obj.ctime) === "[object Date]" && "mtime" in obj && toString4.call(obj.mtime) === "[object Date]" && "ino" in obj && typeof obj.ino === "number" && "size" in obj && typeof obj.size === "number";
}
function stattag(stat) {
var mtime = stat.mtime.getTime().toString(16);
var size = stat.size.toString(16);
return '"' + size + "-" + mtime + '"';
}
}
});
var require_db22 = __commonJS2({
"node_modules/express/node_modules/mime-db/db.json"(exports2, module2) {
module2.exports = {
"application/1d-interleaved-parityfec": {
source: "iana"
},
"application/3gpdash-qoe-report+xml": {
source: "iana",
charset: "UTF-8",
compressible: true
},
"application/3gpp-ims+xml": {
source: "iana",
compressible: true
},
"application/3gpphal+json": {
source: "iana",
compressible: true
},
"application/3gpphalforms+json": {
source: "iana",
compressible: true
},
"application/a2l": {
source: "iana"
},
"application/ace+cbor": {
source: "iana"
},
"application/ace+json": {
source: "iana",
compressible: true
},
"application/ace-groupcomm+cbor": {
source: "iana"
},
"application/ace-trl+cbor": {
source: "iana"
},
"application/activemessage": {
source: "iana"
},
"application/activity+json": {
source: "iana",
compressible: true
},
"application/aif+cbor": {
source: "iana"
},
"application/aif+json": {
source: "iana",
compressible: true
},
"application/alto-cdni+json": {
source: "iana",
compressible: true
},
"application/alto-cdnifilter+json": {
source: "iana",
compressible: true
},
"application/alto-costmap+json": {
source: "iana",
compressible: true
},
"application/alto-costmapfilter+json": {
source: "iana",
compressible: true
},
"application/alto-directory+json": {
source: "iana",
compressible: true
},
"application/alto-endpointcost+json": {
source: "iana",
compressible: true
},
"application/alto-endpointcostparams+json": {
source: "iana",
compressible: true
},
"application/alto-endpointprop+json": {
source: "iana",
compressible: true
},
"application/alto-endpointpropparams+json": {
source: "iana",
compressible: true
},
"application/alto-error+json": {
source: "iana",
compressible: true
},
"application/alto-networkmap+json": {
source: "iana",
compressible: true
},
"application/alto-networkmapfilter+json": {
source: "iana",
compressible: true
},
"application/alto-propmap+json": {
source: "iana",
compressible: true
},
"application/alto-propmapparams+json": {
source: "iana",
compressible: true
},
"application/alto-tips+json": {
source: "iana",
compressible: true
},
"application/alto-tipsparams+json": {
source: "iana",
compressible: true
},
"application/alto-updatestreamcontrol+json": {
source: "iana",
compressible: true
},
"application/alto-updatestreamparams+json": {
source: "iana",
compressible: true
},
"application/aml": {
source: "iana"
},
"application/andrew-inset": {
source: "iana",
extensions: ["ez"]
},
"application/appinstaller": {
compressible: false,
extensions: ["appinstaller"]
},
"application/applefile": {
source: "iana"
},
"application/applixware": {
source: "apache",
extensions: ["aw"]
},
"application/appx": {
compressible: false,
extensions: ["appx"]
},
"application/appxbundle": {
compressible: false,
extensions: ["appxbundle"]
},
"application/at+jwt": {
source: "iana"
},
"application/atf": {
source: "iana"
},
"application/atfx": {
source: "iana"
},
"application/atom+xml": {
source: "iana",
compressible: true,
extensions: ["atom"]
},
"application/atomcat+xml": {
source: "iana",
compressible: true,
extensions: ["atomcat"]
},
"application/atomdeleted+xml": {
source: "iana",
compressible: true,
extensions: ["atomdeleted"]
},
"application/atomicmail": {
source: "iana"
},
"application/atomsvc+xml": {
source: "iana",
compressible: true,
extensions: ["atomsvc"]
},
"application/atsc-dwd+xml": {
source: "iana",
compressible: true,
extensions: ["dwd"]
},
"application/atsc-dynamic-event-message": {
source: "iana"
},
"application/atsc-held+xml": {
source: "iana",
compressible: true,
extensions: ["held"]
},
"application/atsc-rdt+json": {
source: "iana",
compressible: true
},
"application/atsc-rsat+xml": {
source: "iana",
compressible: true,
extensions: ["rsat"]
},
"application/atxml": {
source: "iana"
},
"application/auth-policy+xml": {
source: "iana",
compressible: true
},
"application/automationml-aml+xml": {
source: "iana",
compressible: true,
extensions: ["aml"]
},
"application/automationml-amlx+zip": {
source: "iana",
compressible: false,
extensions: ["amlx"]
},
"application/bacnet-xdd+zip": {
source: "iana",
compressible: false
},
"application/batch-smtp": {
source: "iana"
},
"application/bdoc": {
compressible: false,
extensions: ["bdoc"]
},
"application/beep+xml": {
source: "iana",
charset: "UTF-8",
compressible: true
},
"application/bufr": {
source: "iana"
},
"application/c2pa": {
source: "iana"
},
"application/calendar+json": {
source: "iana",
compressible: true
},
"application/calendar+xml": {
source: "iana",
compressible: true,
extensions: ["xcs"]
},
"application/call-completion": {
source: "iana"
},
"application/cals-1840": {
source: "iana"
},
"application/captive+json": {
source: "iana",
compressible: true
},
"application/cbor": {
source: "iana"
},
"application/cbor-seq": {
source: "iana"
},
"application/cccex": {
source: "iana"
},
"application/ccmp+xml": {
source: "iana",
compressible: true
},
"application/ccxml+xml": {
source: "iana",
compressible: true,
extensions: ["ccxml"]
},
"application/cda+xml": {
source: "iana",
charset: "UTF-8",
compressible: true
},
"application/cdfx+xml": {
source: "iana",
compressible: true,
extensions: ["cdfx"]
},
"application/cdmi-capability": {
source: "iana",
extensions: ["cdmia"]
},
"application/cdmi-container": {
source: "iana",
extensions: ["cdmic"]
},
"application/cdmi-domain": {
source: "iana",
extensions: ["cdmid"]
},
"application/cdmi-object": {
source: "iana",
extensions: ["cdmio"]
},
"application/cdmi-queue": {
source: "iana",
extensions: ["cdmiq"]
},
"application/cdni": {
source: "iana"
},
"application/ce+cbor": {
source: "iana"
},
"application/cea": {
source: "iana"
},
"application/cea-2018+xml": {
source: "iana",
compressible: true
},
"application/cellml+xml": {
source: "iana",
compressible: true
},
"application/cfw": {
source: "iana"
},
"application/cid-edhoc+cbor-seq": {
source: "iana"
},
"application/city+json": {
source: "iana",
compressible: true
},
"application/city+json-seq": {
source: "iana"
},
"application/clr": {
source: "iana"
},
"application/clue+xml": {
source: "iana",
compressible: true
},
"application/clue_info+xml": {
source: "iana",
compressible: true
},
"application/cms": {
source: "iana"
},
"application/cnrp+xml": {
source: "iana",
compressible: true
},
"application/coap-eap": {
source: "iana"
},
"application/coap-group+json": {
source: "iana",
compressible: true
},
"application/coap-payload": {
source: "iana"
},
"application/commonground": {
source: "iana"
},
"application/concise-problem-details+cbor": {
source: "iana"
},
"application/conference-info+xml": {
source: "iana",
compressible: true
},
"application/cose": {
source: "iana"
},
"application/cose-key": {
source: "iana"
},
"application/cose-key-set": {
source: "iana"
},
"application/cose-x509": {
source: "iana"
},
"application/cpl+xml": {
source: "iana",
compressible: true,
extensions: ["cpl"]
},
"application/csrattrs": {
source: "iana"
},
"application/csta+xml": {
source: "iana",
compressible: true
},
"application/cstadata+xml": {
source: "iana",
compressible: true
},
"application/csvm+json": {
source: "iana",
compressible: true
},
"application/cu-seeme": {
source: "apache",
extensions: ["cu"]
},
"application/cwl": {
source: "iana",
extensions: ["cwl"]
},
"application/cwl+json": {
source: "iana",
compressible: true
},
"application/cwl+yaml": {
source: "iana"
},
"application/cwt": {
source: "iana"
},
"application/cybercash": {
source: "iana"
},
"application/dart": {
compressible: true
},
"application/dash+xml": {
source: "iana",
compressible: true,
extensions: ["mpd"]
},
"application/dash-patch+xml": {
source: "iana",
compressible: true,
extensions: ["mpp"]
},
"application/dashdelta": {
source: "iana"
},
"application/davmount+xml": {
source: "iana",
compressible: true,
extensions: ["davmount"]
},
"application/dca-rft": {
source: "iana"
},
"application/dcd": {
source: "iana"
},
"application/dec-dx": {
source: "iana"
},
"application/dialog-info+xml": {
source: "iana",
compressible: true
},
"application/dicom": {
source: "iana",
extensions: ["dcm"]
},
"application/dicom+json": {
source: "iana",
compressible: true
},
"application/dicom+xml": {
source: "iana",
compressible: true
},
"application/dii": {
source: "iana"
},
"application/dit": {
source: "iana"
},
"application/dns": {
source: "iana"
},
"application/dns+json": {
source: "iana",
compressible: true
},
"application/dns-message": {
source: "iana"
},
"application/docbook+xml": {
source: "apache",
compressible: true,
extensions: ["dbk"]
},
"application/dots+cbor": {
source: "iana"
},
"application/dpop+jwt": {
source: "iana"
},
"application/dskpp+xml": {
source: "iana",
compressible: true
},
"application/dssc+der": {
source: "iana",
extensions: ["dssc"]
},
"application/dssc+xml": {
source: "iana",
compressible: true,
extensions: ["xdssc"]
},
"application/dvcs": {
source: "iana"
},
"application/eat+cwt": {
source: "iana"
},
"application/eat+jwt": {
source: "iana"
},
"application/eat-bun+cbor": {
source: "iana"
},
"application/eat-bun+json": {
source: "iana",
compressible: true
},
"application/eat-ucs+cbor": {
source: "iana"
},
"application/eat-ucs+json": {
source: "iana",
compressible: true
},
"application/ecmascript": {
source: "apache",
compressible: true,
extensions: ["ecma"]
},
"application/edhoc+cbor-seq": {
source: "iana"
},
"application/edi-consent": {
source: "iana"
},
"application/edi-x12": {
source: "iana",
compressible: false
},
"application/edifact": {
source: "iana",
compressible: false
},
"application/efi": {
source: "iana"
},
"application/elm+json": {
source: "iana",
charset: "UTF-8",
compressible: true
},
"application/elm+xml": {
source: "iana",
compressible: true
},
"application/emergencycalldata.cap+xml": {
source: "iana",
charset: "UTF-8",
compressible: true
},
"application/emergencycalldata.comment+xml": {
source: "iana",
compressible: true
},
"application/emergencycalldata.control+xml": {
source: "iana",
compressible: true
},
"application/emergencycalldata.deviceinfo+xml": {
source: "iana",
compressible: true
},
"application/emergencycalldata.ecall.msd": {
source: "iana"
},
"application/emergencycalldata.legacyesn+json": {
source: "iana",
compressible: true
},
"application/emergencycalldata.providerinfo+xml": {
source: "iana",
compressible: true
},
"application/emergencycalldata.serviceinfo+xml": {
source: "iana",
compressible: true
},
"application/emergencycalldata.subscriberinfo+xml": {
source: "iana",
compressible: true
},
"application/emergencycalldata.veds+xml": {
source: "iana",
compressible: true
},
"application/emma+xml": {
source: "iana",
compressible: true,
extensions: ["emma"]
},
"application/emotionml+xml": {
source: "iana",
compressible: true,
extensions: ["emotionml"]
},
"application/encaprtp": {
source: "iana"
},
"application/entity-statement+jwt": {
source: "iana"
},
"application/epp+xml": {
source: "iana",
compressible: true
},
"application/epub+zip": {
source: "iana",
compressible: false,
extensions: ["epub"]
},
"application/eshop": {
source: "iana"
},
"application/exi": {
source: "iana",
extensions: ["exi"]
},
"application/expect-ct-report+json": {
source: "iana",
compressible: true
},
"application/express": {
source: "iana",
extensions: ["exp"]
},
"application/fastinfoset": {
source: "iana"
},
"application/fastsoap": {
source: "iana"
},
"application/fdf": {
source: "iana",
extensions: ["fdf"]
},
"application/fdt+xml": {
source: "iana",
compressible: true,
extensions: ["fdt"]
},
"application/fhir+json": {
source: "iana",
charset: "UTF-8",
compressible: true
},
"application/fhir+xml": {
source: "iana",
charset: "UTF-8",
compressible: true
},
"application/fido.trusted-apps+json": {
compressible: true
},
"application/fits": {
source: "iana"
},
"application/flexfec": {
source: "iana"
},
"application/font-sfnt": {
source: "iana"
},
"application/font-tdpfr": {
source: "iana",
extensions: ["pfr"]
},
"application/font-woff": {
source: "iana",
compressible: false
},
"application/framework-attributes+xml": {
source: "iana",
compressible: true
},
"application/geo+json": {
source: "iana",
compressible: true,
extensions: ["geojson"]
},
"application/geo+json-seq": {
source: "iana"
},
"application/geopackage+sqlite3": {
source: "iana"
},
"application/geopose+json": {
source: "iana",
compressible: true
},
"application/geoxacml+json": {
source: "iana",
compressible: true
},
"application/geoxacml+xml": {
source: "iana",
compressible: true
},
"application/gltf-buffer": {
source: "iana"
},
"application/gml+xml": {
source: "iana",
compressible: true,
extensions: ["gml"]
},
"application/gnap-binding-jws": {
source: "iana"
},
"application/gnap-binding-jwsd": {
source: "iana"
},
"application/gnap-binding-rotation-jws": {
source: "iana"
},
"application/gnap-binding-rotation-jwsd": {
source: "iana"
},
"application/gpx+xml": {
source: "apache",
compressible: true,
extensions: ["gpx"]
},
"application/grib": {
source: "iana"
},
"application/gxf": {
source: "apache",
extensions: ["gxf"]
},
"application/gzip": {
source: "iana",
compressible: false,
extensions: ["gz"]
},
"application/h224": {
source: "iana"
},
"application/held+xml": {
source: "iana",
compressible: true
},
"application/hjson": {
extensions: ["hjson"]
},
"application/hl7v2+xml": {
source: "iana",
charset: "UTF-8",
compressible: true
},
"application/http": {
source: "iana"
},
"application/hyperstudio": {
source: "iana",
extensions: ["stk"]
},
"application/ibe-key-request+xml": {
source: "iana",
compressible: true
},
"application/ibe-pkg-reply+xml": {
source: "iana",
compressible: true
},
"application/ibe-pp-data": {
source: "iana"
},
"application/iges": {
source: "iana"
},
"application/im-iscomposing+xml": {
source: "iana",
charset: "UTF-8",
compressible: true
},
"application/index": {
source: "iana"
},
"application/index.cmd": {
source: "iana"
},
"application/index.obj": {
source: "iana"
},
"application/index.response": {
source: "iana"
},
"application/index.vnd": {
source: "iana"
},
"application/inkml+xml": {
source: "iana",
compressible: true,
extensions: ["ink", "inkml"]
},
"application/iotp": {
source: "iana"
},
"application/ipfix": {
source: "iana",
extensions: ["ipfix"]
},
"application/ipp": {
source: "iana"
},
"application/isup": {
source: "iana"
},
"application/its+xml": {
source: "iana",
compressible: true,
extensions: ["its"]
},
"application/java-archive": {
source: "iana",
compressible: false,
extensions: ["jar", "war", "ear"]
},
"application/java-serialized-object": {
source: "apache",
compressible: false,
extensions: ["ser"]
},
"application/java-vm": {
source: "apache",
compressible: false,
extensions: ["class"]
},
"application/javascript": {
source: "apache",
charset: "UTF-8",
compressible: true,
extensions: ["js"]
},
"application/jf2feed+json": {
source: "iana",
compressible: true
},
"application/jose": {
source: "iana"
},
"application/jose+json": {
source: "iana",
compressible: true
},
"application/jrd+json": {
source: "iana",
compressible: true
},
"application/jscalendar+json": {
source: "iana",
compressible: true
},
"application/jscontact+json": {
source: "iana",
compressible: true
},
"application/json": {
source: "iana",
charset: "UTF-8",
compressible: true,
extensions: ["json", "map"]
},
"application/json-patch+json": {
source: "iana",
compressible: true
},
"application/json-seq": {
source: "iana"
},
"application/json5": {
extensions: ["json5"]
},
"application/jsonml+json": {
source: "apache",
compressible: true,
extensions: ["jsonml"]
},
"application/jsonpath": {
source: "iana"
},
"application/jwk+json": {
source: "iana",
compressible: true
},
"application/jwk-set+json": {
source: "iana",
compressible: true
},
"application/jwk-set+jwt": {
source: "iana"
},
"application/jwt": {
source: "iana"
},
"application/kpml-request+xml": {
source: "iana",
compressible: true
},
"application/kpml-response+xml": {
source: "iana",
compressible: true
},
"application/ld+json": {
source: "iana",
compressible: true,
extensions: ["jsonld"]
},
"application/lgr+xml": {
source: "iana",
compressible: true,
extensions: ["lgr"]
},
"application/link-format": {
source: "iana"
},
"application/linkset": {
source: "iana"
},
"application/linkset+json": {
source: "iana",
compressible: true
},
"application/load-control+xml": {
source: "iana",
compressible: true
},
"application/logout+jwt": {
source: "iana"
},
"application/lost+xml": {
source: "iana",
compressible: true,
extensions: ["lostxml"]
},
"application/lostsync+xml": {
source: "iana",
compressible: true
},
"application/lpf+zip": {
source: "iana",
compressible: false
},
"application/lxf": {
source: "iana"
},
"application/mac-binhex40": {
source: "iana",
extensions: ["hqx"]
},
"application/mac-compactpro": {
source: "apache",
extensions: ["cpt"]
},
"application/macwriteii": {
source: "iana"
},
"application/mads+xml": {
source: "iana",
compressible: true,
extensions: ["mads"]
},
"application/manifest+json": {
source: "iana",
charset: "UTF-8",
compressible: true,
extensions: ["webmanifest"]
},
"application/marc": {
source: "iana",
extensions: ["mrc"]
},
"application/marcxml+xml": {
source: "iana",
compressible: true,
extensions: ["mrcx"]
},
"application/mathematica": {
source: "iana",
extensions: ["ma", "nb", "mb"]
},
"application/mathml+xml": {
source: "iana",
compressible: true,
extensions: ["mathml"]
},
"application/mathml-content+xml": {
source: "iana",
compressible: true
},
"application/mathml-presentation+xml": {
source: "iana",
compressible: true
},
"application/mbms-associated-procedure-description+xml": {
source: "iana",
compressible: true
},
"application/mbms-deregister+xml": {
source: "iana",
compressible: true
},
"application/mbms-envelope+xml": {
source: "iana",
compressible: true
},
"application/mbms-msk+xml": {
source: "iana",
compressible: true
},
"application/mbms-msk-response+xml": {
source: "iana",
compressible: true
},
"application/mbms-protection-description+xml": {
source: "iana",
compressible: true
},
"application/mbms-reception-report+xml": {
source: "iana",
compressible: true
},
"application/mbms-register+xml": {
source: "iana",
compressible: true
},
"application/mbms-register-response+xml": {
source: "iana",
compressible: true
},
"application/mbms-schedule+xml": {
source: "iana",
compressible: true
},
"application/mbms-user-service-description+xml": {
source: "iana",
compressible: true
},
"application/mbox": {
source: "iana",
extensions: ["mbox"]
},
"application/media-policy-dataset+xml": {
source: "iana",
compressible: true,
extensions: ["mpf"]
},
"application/media_control+xml": {
source: "iana",
compressible: true
},
"application/mediaservercontrol+xml": {
source: "iana",
compressible: true,
extensions: ["mscml"]
},
"application/merge-patch+json": {
source: "iana",
compressible: true
},
"application/metalink+xml": {
source: "apache",
compressible: true,
extensions: ["metalink"]
},
"application/metalink4+xml": {
source: "iana",
compressible: true,
extensions: ["meta4"]
},
"application/mets+xml": {
source: "iana",
compressible: true,
extensions: ["mets"]
},
"application/mf4": {
source: "iana"
},
"application/mikey": {
source: "iana"
},
"application/mipc": {
source: "iana"
},
"application/missing-blocks+cbor-seq": {
source: "iana"
},
"application/mmt-aei+xml": {
source: "iana",
compressible: true,
extensions: ["maei"]
},
"application/mmt-usd+xml": {
source: "iana",
compressible: true,
extensions: ["musd"]
},
"application/mods+xml": {
source: "iana",
compressible: true,
extensions: ["mods"]
},
"application/moss-keys": {
source: "iana"
},
"application/moss-signature": {
source: "iana"
},
"application/mosskey-data": {
source: "iana"
},
"application/mosskey-request": {
source: "iana"
},
"application/mp21": {
source: "iana",
extensions: ["m21", "mp21"]
},
"application/mp4": {
source: "iana",
extensions: ["mp4", "mpg4", "mp4s", "m4p"]
},
"application/mpeg4-generic": {
source: "iana"
},
"application/mpeg4-iod": {
source: "iana"
},
"application/mpeg4-iod-xmt": {
source: "iana"
},
"application/mrb-consumer+xml": {
source: "iana",
compressible: true
},
"application/mrb-publish+xml": {
source: "iana",
compressible: true
},
"application/msc-ivr+xml": {
source: "iana",
charset: "UTF-8",
compressible: true
},
"application/msc-mixer+xml": {
source: "iana",
charset: "UTF-8",
compressible: true
},
"application/msix": {
compressible: false,
extensions: ["msix"]
},
"application/msixbundle": {
compressible: false,
extensions: ["msixbundle"]
},
"application/msword": {
source: "iana",
compressible: false,
extensions: ["doc", "dot"]
},
"application/mud+json": {
source: "iana",
compressible: true
},
"application/multipart-core": {
source: "iana"
},
"application/mxf": {
source: "iana",
extensions: ["mxf"]
},
"application/n-quads": {
source: "iana",
extensions: ["nq"]
},
"application/n-triples": {
source: "iana",
extensions: ["nt"]
},
"application/nasdata": {
source: "iana"
},
"application/news-checkgroups": {
source: "iana",
charset: "US-ASCII"
},
"application/news-groupinfo": {
source: "iana",
charset: "US-ASCII"
},
"application/news-transmission": {
source: "iana"
},
"application/nlsml+xml": {
source: "iana",
compressible: true
},
"application/node": {
source: "iana",
extensions: ["cjs"]
},
"application/nss": {
source: "iana"
},
"application/oauth-authz-req+jwt": {
source: "iana"
},
"application/oblivious-dns-message": {
source: "iana"
},
"application/ocsp-request": {
source: "iana"
},
"application/ocsp-response": {
source: "iana"
},
"application/octet-stream": {
source: "iana",
compressible: true,
extensions: ["bin", "dms", "lrf", "mar", "so", "dist", "distz", "pkg", "bpk", "dump", "elc", "deploy", "exe", "dll", "deb", "dmg", "iso", "img", "msi", "msp", "msm", "buffer"]
},
"application/oda": {
source: "iana",
extensions: ["oda"]
},
"application/odm+xml": {
source: "iana",
compressible: true
},
"application/odx": {
source: "iana"
},
"application/oebps-package+xml": {
source: "iana",
compressible: true,
extensions: ["opf"]
},
"application/ogg": {
source: "iana",
compressible: false,
extensions: ["ogx"]
},
"application/ohttp-keys": {
source: "iana"
},
"application/omdoc+xml": {
source: "apache",
compressible: true,
extensions: ["omdoc"]
},
"application/onenote": {
source: "apache",
extensions: ["onetoc", "onetoc2", "onetmp", "onepkg", "one", "onea"]
},
"application/opc-nodeset+xml": {
source: "iana",
compressible: true
},
"application/oscore": {
source: "iana"
},
"application/oxps": {
source: "iana",
extensions: ["oxps"]
},
"application/p21": {
source: "iana"
},
"application/p21+zip": {
source: "iana",
compressible: false
},
"application/p2p-overlay+xml": {
source: "iana",
compressible: true,
extensions: ["relo"]
},
"application/parityfec": {
source: "iana"
},
"application/passport": {
source: "iana"
},
"application/patch-ops-error+xml": {
source: "iana",
compressible: true,
extensions: ["xer"]
},
"application/pdf": {
source: "iana",
compressible: false,
extensions: ["pdf"]
},
"application/pdx": {
source: "iana"
},
"application/pem-certificate-chain": {
source: "iana"
},
"application/pgp-encrypted": {
source: "iana",
compressible: false,
extensions: ["pgp"]
},
"application/pgp-keys": {
source: "iana",
extensions: ["asc"]
},
"application/pgp-signature": {
source: "iana",
extensions: ["sig", "asc"]
},
"application/pics-rules": {
source: "apache",
extensions: ["prf"]
},
"application/pidf+xml": {
source: "iana",
charset: "UTF-8",
compressible: true
},
"application/pidf-diff+xml": {
source: "iana",
charset: "UTF-8",
compressible: true
},
"application/pkcs10": {
source: "iana",
extensions: ["p10"]
},
"application/pkcs12": {
source: "iana"
},
"application/pkcs7-mime": {
source: "iana",
extensions: ["p7m", "p7c"]
},
"application/pkcs7-signature": {
source: "iana",
extensions: ["p7s"]
},
"application/pkcs8": {
source: "iana",
extensions: ["p8"]
},
"application/pkcs8-encrypted": {
source: "iana"
},
"application/pkix-attr-cert": {
source: "iana",
extensions: ["ac"]
},
"application/pkix-cert": {
source: "iana",
extensions: ["cer"]
},
"application/pkix-crl": {
source: "iana",
extensions: ["crl"]
},
"application/pkix-pkipath": {
source: "iana",
extensions: ["pkipath"]
},
"application/pkixcmp": {
source: "iana",
extensions: ["pki"]
},
"application/pls+xml": {
source: "iana",
compressible: true,
extensions: ["pls"]
},
"application/poc-settings+xml": {
source: "iana",
charset: "UTF-8",
compressible: true
},
"application/postscript": {
source: "iana",
compressible: true,
extensions: ["ai", "eps", "ps"]
},
"application/ppsp-tracker+json": {
source: "iana",
compressible: true
},
"application/private-token-issuer-directory": {
source: "iana"
},
"application/private-token-request": {
source: "iana"
},
"application/private-token-response": {
source: "iana"
},
"application/problem+json": {
source: "iana",
compressible: true
},
"application/problem+xml": {
source: "iana",
compressible: true
},
"application/provenance+xml": {
source: "iana",
compressible: true,
extensions: ["provx"]
},
"application/provided-claims+jwt": {
source: "iana"
},
"application/prs.alvestrand.titrax-sheet": {
source: "iana"
},
"application/prs.cww": {
source: "iana",
extensions: ["cww"]
},
"application/prs.cyn": {
source: "iana",
charset: "7-BIT"
},
"application/prs.hpub+zip": {
source: "iana",
compressible: false
},
"application/prs.implied-document+xml": {
source: "iana",
compressible: true
},
"application/prs.implied-executable": {
source: "iana"
},
"application/prs.implied-object+json": {
source: "iana",
compressible: true
},
"application/prs.implied-object+json-seq": {
source: "iana"
},
"application/prs.implied-object+yaml": {
source: "iana"
},
"application/prs.implied-structure": {
source: "iana"
},
"application/prs.mayfile": {
source: "iana"
},
"application/prs.nprend": {
source: "iana"
},
"application/prs.plucker": {
source: "iana"
},
"application/prs.rdf-xml-crypt": {
source: "iana"
},
"application/prs.vcfbzip2": {
source: "iana"
},
"application/prs.xsf+xml": {
source: "iana",
compressible: true,
extensions: ["xsf"]
},
"application/pskc+xml": {
source: "iana",
compressible: true,
extensions: ["pskcxml"]
},
"application/pvd+json": {
source: "iana",
compressible: true
},
"application/qsig": {
source: "iana"
},
"application/raml+yaml": {
compressible: true,
extensions: ["raml"]
},
"application/raptorfec": {
source: "iana"
},
"application/rdap+json": {
source: "iana",
compressible: true
},
"application/rdf+xml": {
source: "iana",
compressible: true,
extensions: ["rdf", "owl"]
},
"application/reginfo+xml": {
source: "iana",
compressible: true,
extensions: ["rif"]
},
"application/relax-ng-compact-syntax": {
source: "iana",
extensions: ["rnc"]
},
"application/remote-printing": {
source: "apache"
},
"application/reputon+json": {
source: "iana",
compressible: true
},
"application/resolve-response+jwt": {
source: "iana"
},
"application/resource-lists+xml": {
source: "iana",
compressible: true,
extensions: ["rl"]
},
"application/resource-lists-diff+xml": {
source: "iana",
compressible: true,
extensions: ["rld"]
},
"application/rfc+xml": {
source: "iana",
compressible: true
},
"application/riscos": {
source: "iana"
},
"application/rlmi+xml": {
source: "iana",
compressible: true
},
"application/rls-services+xml": {
source: "iana",
compressible: true,
extensions: ["rs"]
},
"application/route-apd+xml": {
source: "iana",
compressible: true,
extensions: ["rapd"]
},
"application/route-s-tsid+xml": {
source: "iana",
compressible: true,
extensions: ["sls"]
},
"application/route-usd+xml": {
source: "iana",
compressible: true,
extensions: ["rusd"]
},
"application/rpki-checklist": {
source: "iana"
},
"application/rpki-ghostbusters": {
source: "iana",
extensions: ["gbr"]
},
"application/rpki-manifest": {
source: "iana",
extensions: ["mft"]
},
"application/rpki-publication": {
source: "iana"
},
"application/rpki-roa": {
source: "iana",
extensions: ["roa"]
},
"application/rpki-signed-tal": {
source: "iana"
},
"application/rpki-updown": {
source: "iana"
},
"application/rsd+xml": {
source: "apache",
compressible: true,
extensions: ["rsd"]
},
"application/rss+xml": {
source: "apache",
compressible: true,
extensions: ["rss"]
},
"application/rtf": {
source: "iana",
compressible: true,
extensions: ["rtf"]
},
"application/rtploopback": {
source: "iana"
},
"application/rtx": {
source: "iana"
},
"application/samlassertion+xml": {
source: "iana",
compressible: true
},
"application/samlmetadata+xml": {
source: "iana",
compressible: true
},
"application/sarif+json": {
source: "iana",
compressible: true
},
"application/sarif-external-properties+json": {
source: "iana",
compressible: true
},
"application/sbe": {
source: "iana"
},
"application/sbml+xml": {
source: "iana",
compressible: true,
extensions: ["sbml"]
},
"application/scaip+xml": {
source: "iana",
compressible: true
},
"application/scim+json": {
source: "iana",
compressible: true
},
"application/scvp-cv-request": {
source: "iana",
extensions: ["scq"]
},
"application/scvp-cv-response": {
source: "iana",
extensions: ["scs"]
},
"application/scvp-vp-request": {
source: "iana",
extensions: ["spq"]
},
"application/scvp-vp-response": {
source: "iana",
extensions: ["spp"]
},
"application/sdp": {
source: "iana",
extensions: ["sdp"]
},
"application/secevent+jwt": {
source: "iana"
},
"application/senml+cbor": {
source: "iana"
},
"application/senml+json": {
source: "iana",
compressible: true
},
"application/senml+xml": {
source: "iana",
compressible: true,
extensions: ["senmlx"]
},
"application/senml-etch+cbor": {
source: "iana"
},
"application/senml-etch+json": {
source: "iana",
compressible: true
},
"application/senml-exi": {
source: "iana"
},
"application/sensml+cbor": {
source: "iana"
},
"application/sensml+json": {
source: "iana",
compressible: true
},
"application/sensml+xml": {
source: "iana",
compressible: true,
extensions: ["sensmlx"]
},
"application/sensml-exi": {
source: "iana"
},
"application/sep+xml": {
source: "iana",
compressible: true
},
"application/sep-exi": {
source: "iana"
},
"application/session-info": {
source: "iana"
},
"application/set-payment": {
source: "iana"
},
"application/set-payment-initiation": {
source: "iana",
extensions: ["setpay"]
},
"application/set-registration": {
source: "iana"
},
"application/set-registration-initiation": {
source: "iana",
extensions: ["setreg"]
},
"application/sgml": {
source: "iana"
},
"application/sgml-open-catalog": {
source: "iana"
},
"application/shf+xml": {
source: "iana",
compressible: true,
extensions: ["shf"]
},
"application/sieve": {
source: "iana",
extensions: ["siv", "sieve"]
},
"application/simple-filter+xml": {
source: "iana",
compressible: true
},
"application/simple-message-summary": {
source: "iana"
},
"application/simplesymbolcontainer": {
source: "iana"
},
"application/sipc": {
source: "iana"
},
"application/slate": {
source: "iana"
},
"application/smil": {
source: "apache"
},
"application/smil+xml": {
source: "iana",
compressible: true,
extensions: ["smi", "smil"]
},
"application/smpte336m": {
source: "iana"
},
"application/soap+fastinfoset": {
source: "iana"
},
"application/soap+xml": {
source: "iana",
compressible: true
},
"application/sparql-query": {
source: "iana",
extensions: ["rq"]
},
"application/sparql-results+xml": {
source: "iana",
compressible: true,
extensions: ["srx"]
},
"application/spdx+json": {
source: "iana",
compressible: true
},
"application/spirits-event+xml": {
source: "iana",
compressible: true
},
"application/sql": {
source: "iana",
extensions: ["sql"]
},
"application/srgs": {
source: "iana",
extensions: ["gram"]
},
"application/srgs+xml": {
source: "iana",
compressible: true,
extensions: ["grxml"]
},
"application/sru+xml": {
source: "iana",
compressible: true,
extensions: ["sru"]
},
"application/ssdl+xml": {
source: "apache",
compressible: true,
extensions: ["ssdl"]
},
"application/sslkeylogfile": {
source: "iana"
},
"application/ssml+xml": {
source: "iana",
compressible: true,
extensions: ["ssml"]
},
"application/st2110-41": {
source: "iana"
},
"application/stix+json": {
source: "iana",
compressible: true
},
"application/stratum": {
source: "iana"
},
"application/swid+cbor": {
source: "iana"
},
"application/swid+xml": {
source: "iana",
compressible: true,
extensions: ["swidtag"]
},
"application/tamp-apex-update": {
source: "iana"
},
"application/tamp-apex-update-confirm": {
source: "iana"
},
"application/tamp-community-update": {
source: "iana"
},
"application/tamp-community-update-confirm": {
source: "iana"
},
"application/tamp-error": {
source: "iana"
},
"application/tamp-sequence-adjust": {
source: "iana"
},
"application/tamp-sequence-adjust-confirm": {
source: "iana"
},
"application/tamp-status-query": {
source: "iana"
},
"application/tamp-status-response": {
source: "iana"
},
"application/tamp-update": {
source: "iana"
},
"application/tamp-update-confirm": {
source: "iana"
},
"application/tar": {
compressible: true
},
"application/taxii+json": {
source: "iana",
compressible: true
},
"application/td+json": {
source: "iana",
compressible: true
},
"application/tei+xml": {
source: "iana",
compressible: true,
extensions: ["tei", "teicorpus"]
},
"application/tetra_isi": {
source: "iana"
},
"application/thraud+xml": {
source: "iana",
compressible: true,
extensions: ["tfi"]
},
"application/timestamp-query": {
source: "iana"
},
"application/timestamp-reply": {
source: "iana"
},
"application/timestamped-data": {
source: "iana",
extensions: ["tsd"]
},
"application/tlsrpt+gzip": {
source: "iana"
},
"application/tlsrpt+json": {
source: "iana",
compressible: true
},
"application/tm+json": {
source: "iana",
compressible: true
},
"application/tnauthlist": {
source: "iana"
},
"application/toc+cbor": {
source: "iana"
},
"application/token-introspection+jwt": {
source: "iana"
},
"application/toml": {
source: "iana",
compressible: true,
extensions: ["toml"]
},
"application/trickle-ice-sdpfrag": {
source: "iana"
},
"application/trig": {
source: "iana",
extensions: ["trig"]
},
"application/trust-chain+json": {
source: "iana",
compressible: true
},
"application/trust-mark+jwt": {
source: "iana"
},
"application/trust-mark-delegation+jwt": {
source: "iana"
},
"application/ttml+xml": {
source: "iana",
compressible: true,
extensions: ["ttml"]
},
"application/tve-trigger": {
source: "iana"
},
"application/tzif": {
source: "iana"
},
"application/tzif-leap": {
source: "iana"
},
"application/ubjson": {
compressible: false,
extensions: ["ubj"]
},
"application/uccs+cbor": {
source: "iana"
},
"application/ujcs+json": {
source: "iana",
compressible: true
},
"application/ulpfec": {
source: "iana"
},
"application/urc-grpsheet+xml": {
source: "iana",
compressible: true
},
"application/urc-ressheet+xml": {
source: "iana",
compressible: true,
extensions: ["rsheet"]
},
"application/urc-targetdesc+xml": {
source: "iana",
compressible: true,
extensions: ["td"]
},
"application/urc-uisocketdesc+xml": {
source: "iana",
compressible: true
},
"application/vc": {
source: "iana"
},
"application/vc+cose": {
source: "iana"
},
"application/vc+jwt": {
source: "iana"
},
"application/vcard+json": {
source: "iana",
compressible: true
},
"application/vcard+xml": {
source: "iana",
compressible: true
},
"application/vemmi": {
source: "iana"
},
"application/vividence.scriptfile": {
source: "apache"
},
"application/vnd.1000minds.decision-model+xml": {
source: "iana",
compressible: true,
extensions: ["1km"]
},
"application/vnd.1ob": {
source: "iana"
},
"application/vnd.3gpp-prose+xml": {
source: "iana",
compressible: true
},
"application/vnd.3gpp-prose-pc3a+xml": {
source: "iana",
compressible: true
},
"application/vnd.3gpp-prose-pc3ach+xml": {
source: "iana",
compressible: true
},
"application/vnd.3gpp-prose-pc3ch+xml": {
source: "iana",
compressible: true
},
"application/vnd.3gpp-prose-pc8+xml": {
source: "iana",
compressible: true
},
"application/vnd.3gpp-v2x-local-service-information": {
source: "iana"
},
"application/vnd.3gpp.5gnas": {
source: "iana"
},
"application/vnd.3gpp.5gsa2x": {
source: "iana"
},
"application/vnd.3gpp.5gsa2x-local-service-information": {
source: "iana"
},
"application/vnd.3gpp.5gsv2x": {
source: "iana"
},
"application/vnd.3gpp.5gsv2x-local-service-information": {
source: "iana"
},
"application/vnd.3gpp.access-transfer-events+xml": {
source: "iana",
compressible: true
},
"application/vnd.3gpp.bsf+xml": {
source: "iana",
compressible: true
},
"application/vnd.3gpp.crs+xml": {
source: "iana",
compressible: true
},
"application/vnd.3gpp.current-location-discovery+xml": {
source: "iana",
compressible: true
},
"application/vnd.3gpp.gmop+xml": {
source: "iana",
compressible: true
},
"application/vnd.3gpp.gtpc": {
source: "iana"
},
"application/vnd.3gpp.interworking-data": {
source: "iana"
},
"application/vnd.3gpp.lpp": {
source: "iana"
},
"application/vnd.3gpp.mc-signalling-ear": {
source: "iana"
},
"application/vnd.3gpp.mcdata-affiliation-command+xml": {
source: "iana",
compressible: true
},
"application/vnd.3gpp.mcdata-info+xml": {
source: "iana",
compressible: true
},
"application/vnd.3gpp.mcdata-msgstore-ctrl-request+xml": {
source: "iana",
compressible: true
},
"application/vnd.3gpp.mcdata-payload": {
source: "iana"
},
"application/vnd.3gpp.mcdata-regroup+xml": {
source: "iana",
compressible: true
},
"application/vnd.3gpp.mcdata-service-config+xml": {
source: "iana",
compressible: true
},
"application/vnd.3gpp.mcdata-signalling": {
source: "iana"
},
"application/vnd.3gpp.mcdata-ue-config+xml": {
source: "iana",
compressible: true
},
"application/vnd.3gpp.mcdata-user-profile+xml": {
source: "iana",
compressible: true
},
"application/vnd.3gpp.mcptt-affiliation-command+xml": {
source: "iana",
compressible: true
},
"application/vnd.3gpp.mcptt-floor-request+xml": {
source: "iana",
compressible: true
},
"application/vnd.3gpp.mcptt-info+xml": {
source: "iana",
compressible: true
},
"application/vnd.3gpp.mcptt-location-info+xml": {
source: "iana",
compressible: true
},
"application/vnd.3gpp.mcptt-mbms-usage-info+xml": {
source: "iana",
compressible: true
},
"application/vnd.3gpp.mcptt-regroup+xml": {
source: "iana",
compressible: true
},
"application/vnd.3gpp.mcptt-service-config+xml": {
source: "iana",
compressible: true
},
"application/vnd.3gpp.mcptt-signed+xml": {
source: "iana",
compressible: true
},
"application/vnd.3gpp.mcptt-ue-config+xml": {
source: "iana",
compressible: true
},
"application/vnd.3gpp.mcptt-ue-init-config+xml": {
source: "iana",
compressible: true
},
"application/vnd.3gpp.mcptt-user-profile+xml": {
source: "iana",
compressible: true
},
"application/vnd.3gpp.mcvideo-affiliation-command+xml": {
source: "iana",
compressible: true
},
"application/vnd.3gpp.mcvideo-info+xml": {
source: "iana",
compressible: true
},
"application/vnd.3gpp.mcvideo-location-info+xml": {
source: "iana",
compressible: true
},
"application/vnd.3gpp.mcvideo-mbms-usage-info+xml": {
source: "iana",
compressible: true
},
"application/vnd.3gpp.mcvideo-regroup+xml": {
source: "iana",
compressible: true
},
"application/vnd.3gpp.mcvideo-service-config+xml": {
source: "iana",
compressible: true
},
"application/vnd.3gpp.mcvideo-transmission-request+xml": {
source: "iana",
compressible: true
},
"application/vnd.3gpp.mcvideo-ue-config+xml": {
source: "iana",
compressible: true
},
"application/vnd.3gpp.mcvideo-user-profile+xml": {
source: "iana",
compressible: true
},
"application/vnd.3gpp.mid-call+xml": {
source: "iana",
compressible: true
},
"application/vnd.3gpp.ngap": {
source: "iana"
},
"application/vnd.3gpp.pfcp": {
source: "iana"
},
"application/vnd.3gpp.pic-bw-large": {
source: "iana",
extensions: ["plb"]
},
"application/vnd.3gpp.pic-bw-small": {
source: "iana",
extensions: ["psb"]
},
"application/vnd.3gpp.pic-bw-var": {
source: "iana",
extensions: ["pvb"]
},
"application/vnd.3gpp.pinapp-info+xml": {
source: "iana",
compressible: true
},
"application/vnd.3gpp.s1ap": {
source: "iana"
},
"application/vnd.3gpp.seal-group-doc+xml": {
source: "iana",
compressible: true
},
"application/vnd.3gpp.seal-info+xml": {
source: "iana",
compressible: true
},
"application/vnd.3gpp.seal-location-info+xml": {
source: "iana",
compressible: true
},
"application/vnd.3gpp.seal-mbms-usage-info+xml": {
source: "iana",
compressible: true
},
"application/vnd.3gpp.seal-network-qos-management-info+xml": {
source: "iana",
compressible: true
},
"application/vnd.3gpp.seal-ue-config-info+xml": {
source: "iana",
compressible: true
},
"application/vnd.3gpp.seal-unicast-info+xml": {
source: "iana",
compressible: true
},
"application/vnd.3gpp.seal-user-profile-info+xml": {
source: "iana",
compressible: true
},
"application/vnd.3gpp.sms": {
source: "iana"
},
"application/vnd.3gpp.sms+xml": {
source: "iana",
compressible: true
},
"application/vnd.3gpp.srvcc-ext+xml": {
source: "iana",
compressible: true
},
"application/vnd.3gpp.srvcc-info+xml": {
source: "iana",
compressible: true
},
"application/vnd.3gpp.state-and-event-info+xml": {
source: "iana",
compressible: true
},
"application/vnd.3gpp.ussd+xml": {
source: "iana",
compressible: true
},
"application/vnd.3gpp.v2x": {
source: "iana"
},
"application/vnd.3gpp.vae-info+xml": {
source: "iana",
compressible: true
},
"application/vnd.3gpp2.bcmcsinfo+xml": {
source: "iana",
compressible: true
},
"application/vnd.3gpp2.sms": {
source: "iana"
},
"application/vnd.3gpp2.tcap": {
source: "iana",
extensions: ["tcap"]
},
"application/vnd.3lightssoftware.imagescal": {
source: "iana"
},
"application/vnd.3m.post-it-notes": {
source: "iana",
extensions: ["pwn"]
},
"application/vnd.accpac.simply.aso": {
source: "iana",
extensions: ["aso"]
},
"application/vnd.accpac.simply.imp": {
source: "iana",
extensions: ["imp"]
},
"application/vnd.acm.addressxfer+json": {
source: "iana",
compressible: true
},
"application/vnd.acm.chatbot+json": {
source: "iana",
compressible: true
},
"application/vnd.acucobol": {
source: "iana",
extensions: ["acu"]
},
"application/vnd.acucorp": {
source: "iana",
extensions: ["atc", "acutc"]
},
"application/vnd.adobe.air-application-installer-package+zip": {
source: "apache",
compressible: false,
extensions: ["air"]
},
"application/vnd.adobe.flash.movie": {
source: "iana"
},
"application/vnd.adobe.formscentral.fcdt": {
source: "iana",
extensions: ["fcdt"]
},
"application/vnd.adobe.fxp": {
source: "iana",
extensions: ["fxp", "fxpl"]
},
"application/vnd.adobe.partial-upload": {
source: "iana"
},
"application/vnd.adobe.xdp+xml": {
source: "iana",
compressible: true,
extensions: ["xdp"]
},
"application/vnd.adobe.xfdf": {
source: "apache",
extensions: ["xfdf"]
},
"application/vnd.aether.imp": {
source: "iana"
},
"application/vnd.afpc.afplinedata": {
source: "iana"
},
"application/vnd.afpc.afplinedata-pagedef": {
source: "iana"
},
"application/vnd.afpc.cmoca-cmresource": {
source: "iana"
},
"application/vnd.afpc.foca-charset": {
source: "iana"
},
"application/vnd.afpc.foca-codedfont": {
source: "iana"
},
"application/vnd.afpc.foca-codepage": {
source: "iana"
},
"application/vnd.afpc.modca": {
source: "iana"
},
"application/vnd.afpc.modca-cmtable": {
source: "iana"
},
"application/vnd.afpc.modca-formdef": {
source: "iana"
},
"application/vnd.afpc.modca-mediummap": {
source: "iana"
},
"application/vnd.afpc.modca-objectcontainer": {
source: "iana"
},
"application/vnd.afpc.modca-overlay": {
source: "iana"
},
"application/vnd.afpc.modca-pagesegment": {
source: "iana"
},
"application/vnd.age": {
source: "iana",
extensions: ["age"]
},
"application/vnd.ah-barcode": {
source: "apache"
},
"application/vnd.ahead.space": {
source: "iana",
extensions: ["ahead"]
},
"application/vnd.airzip.filesecure.azf": {
source: "iana",
extensions: ["azf"]
},
"application/vnd.airzip.filesecure.azs": {
source: "iana",
extensions: ["azs"]
},
"application/vnd.amadeus+json": {
source: "iana",
compressible: true
},
"application/vnd.amazon.ebook": {
source: "apache",
extensions: ["azw"]
},
"application/vnd.amazon.mobi8-ebook": {
source: "iana"
},
"application/vnd.americandynamics.acc": {
source: "iana",
extensions: ["acc"]
},
"application/vnd.amiga.ami": {
source: "iana",
extensions: ["ami"]
},
"application/vnd.amundsen.maze+xml": {
source: "iana",
compressible: true
},
"application/vnd.android.ota": {
source: "iana"
},
"application/vnd.android.package-archive": {
source: "apache",
compressible: false,
extensions: ["apk"]
},
"application/vnd.anki": {
source: "iana"
},
"application/vnd.anser-web-certificate-issue-initiation": {
source: "iana",
extensions: ["cii"]
},
"application/vnd.anser-web-funds-transfer-initiation": {
source: "apache",
extensions: ["fti"]
},
"application/vnd.antix.game-component": {
source: "iana",
extensions: ["atx"]
},
"application/vnd.apache.arrow.file": {
source: "iana"
},
"application/vnd.apache.arrow.stream": {
source: "iana"
},
"application/vnd.apache.parquet": {
source: "iana"
},
"application/vnd.apache.thrift.binary": {
source: "iana"
},
"application/vnd.apache.thrift.compact": {
source: "iana"
},
"application/vnd.apache.thrift.json": {
source: "iana"
},
"application/vnd.apexlang": {
source: "iana"
},
"application/vnd.api+json": {
source: "iana",
compressible: true
},
"application/vnd.aplextor.warrp+json": {
source: "iana",
compressible: true
},
"application/vnd.apothekende.reservation+json": {
source: "iana",
compressible: true
},
"application/vnd.apple.installer+xml": {
source: "iana",
compressible: true,
extensions: ["mpkg"]
},
"application/vnd.apple.keynote": {
source: "iana",
extensions: ["key"]
},
"application/vnd.apple.mpegurl": {
source: "iana",
extensions: ["m3u8"]
},
"application/vnd.apple.numbers": {
source: "iana",
extensions: ["numbers"]
},
"application/vnd.apple.pages": {
source: "iana",
extensions: ["pages"]
},
"application/vnd.apple.pkpass": {
compressible: false,
extensions: ["pkpass"]
},
"application/vnd.arastra.swi": {
source: "apache"
},
"application/vnd.aristanetworks.swi": {
source: "iana",
extensions: ["swi"]
},
"application/vnd.artisan+json": {
source: "iana",
compressible: true
},
"application/vnd.artsquare": {
source: "iana"
},
"application/vnd.astraea-software.iota": {
source: "iana",
extensions: ["iota"]
},
"application/vnd.audiograph": {
source: "iana",
extensions: ["aep"]
},
"application/vnd.autodesk.fbx": {
extensions: ["fbx"]
},
"application/vnd.autopackage": {
source: "iana"
},
"application/vnd.avalon+json": {
source: "iana",
compressible: true
},
"application/vnd.avistar+xml": {
source: "iana",
compressible: true
},
"application/vnd.balsamiq.bmml+xml": {
source: "iana",
compressible: true,
extensions: ["bmml"]
},
"application/vnd.balsamiq.bmpr": {
source: "iana"
},
"application/vnd.banana-accounting": {
source: "iana"
},
"application/vnd.bbf.usp.error": {
source: "iana"
},
"application/vnd.bbf.usp.msg": {
source: "iana"
},
"application/vnd.bbf.usp.msg+json": {
source: "iana",
compressible: true
},
"application/vnd.bekitzur-stech+json": {
source: "iana",
compressible: true
},
"application/vnd.belightsoft.lhzd+zip": {
source: "iana",
compressible: false
},
"application/vnd.belightsoft.lhzl+zip": {
source: "iana",
compressible: false
},
"application/vnd.bint.med-content": {
source: "iana"
},
"application/vnd.biopax.rdf+xml": {
source: "iana",
compressible: true
},
"application/vnd.blink-idb-value-wrapper": {
source: "iana"
},
"application/vnd.blueice.multipass": {
source: "iana",
extensions: ["mpm"]
},
"application/vnd.bluetooth.ep.oob": {
source: "iana"
},
"application/vnd.bluetooth.le.oob": {
source: "iana"
},
"application/vnd.bmi": {
source: "iana",
extensions: ["bmi"]
},
"application/vnd.bpf": {
source: "iana"
},
"application/vnd.bpf3": {
source: "iana"
},
"application/vnd.businessobjects": {
source: "iana",
extensions: ["rep"]
},
"application/vnd.byu.uapi+json": {
source: "iana",
compressible: true
},
"application/vnd.bzip3": {
source: "iana"
},
"application/vnd.c3voc.schedule+xml": {
source: "iana",
compressible: true
},
"application/vnd.cab-jscript": {
source: "iana"
},
"application/vnd.canon-cpdl": {
source: "iana"
},
"application/vnd.canon-lips": {
source: "iana"
},
"application/vnd.capasystems-pg+json": {
source: "iana",
compressible: true
},
"application/vnd.cendio.thinlinc.clientconf": {
source: "iana"
},
"application/vnd.century-systems.tcp_stream": {
source: "iana"
},
"application/vnd.chemdraw+xml": {
source: "iana",
compressible: true,
extensions: ["cdxml"]
},
"application/vnd.chess-pgn": {
source: "iana"
},
"application/vnd.chipnuts.karaoke-mmd": {
source: "iana",
extensions: ["mmd"]
},
"application/vnd.ciedi": {
source: "iana"
},
"application/vnd.cinderella": {
source: "iana",
extensions: ["cdy"]
},
"application/vnd.cirpack.isdn-ext": {
source: "iana"
},
"application/vnd.citationstyles.style+xml": {
source: "iana",
compressible: true,
extensions: ["csl"]
},
"application/vnd.claymore": {
source: "iana",
extensions: ["cla"]
},
"application/vnd.cloanto.rp9": {
source: "iana",
extensions: ["rp9"]
},
"application/vnd.clonk.c4group": {
source: "iana",
extensions: ["c4g", "c4d", "c4f", "c4p", "c4u"]
},
"application/vnd.cluetrust.cartomobile-config": {
source: "iana",
extensions: ["c11amc"]
},
"application/vnd.cluetrust.cartomobile-config-pkg": {
source: "iana",
extensions: ["c11amz"]
},
"application/vnd.cncf.helm.chart.content.v1.tar+gzip": {
source: "iana"
},
"application/vnd.cncf.helm.chart.provenance.v1.prov": {
source: "iana"
},
"application/vnd.cncf.helm.config.v1+json": {
source: "iana",
compressible: true
},
"application/vnd.coffeescript": {
source: "iana"
},
"application/vnd.collabio.xodocuments.document": {
source: "iana"
},
"application/vnd.collabio.xodocuments.document-template": {
source: "iana"
},
"application/vnd.collabio.xodocuments.presentation": {
source: "iana"
},
"application/vnd.collabio.xodocuments.presentation-template": {
source: "iana"
},
"application/vnd.collabio.xodocuments.spreadsheet": {
source: "iana"
},
"application/vnd.collabio.xodocuments.spreadsheet-template": {
source: "iana"
},
"application/vnd.collection+json": {
source: "iana",
compressible: true
},
"application/vnd.collection.doc+json": {
source: "iana",
compressible: true
},
"application/vnd.collection.next+json": {
source: "iana",
compressible: true
},
"application/vnd.comicbook+zip": {
source: "iana",
compressible: false
},
"application/vnd.comicbook-rar": {
source: "iana"
},
"application/vnd.commerce-battelle": {
source: "iana"
},
"application/vnd.commonspace": {
source: "iana",
extensions: ["csp"]
},
"application/vnd.contact.cmsg": {
source: "iana",
extensions: ["cdbcmsg"]
},
"application/vnd.coreos.ignition+json": {
source: "iana",
compressible: true
},
"application/vnd.cosmocaller": {
source: "iana",
extensions: ["cmc"]
},
"application/vnd.crick.clicker": {
source: "iana",
extensions: ["clkx"]
},
"application/vnd.crick.clicker.keyboard": {
source: "iana",
extensions: ["clkk"]
},
"application/vnd.crick.clicker.palette": {
source: "iana",
extensions: ["clkp"]
},
"application/vnd.crick.clicker.template": {
source: "iana",
extensions: ["clkt"]
},
"application/vnd.crick.clicker.wordbank": {
source: "iana",
extensions: ["clkw"]
},
"application/vnd.criticaltools.wbs+xml": {
source: "iana",
compressible: true,
extensions: ["wbs"]
},
"application/vnd.cryptii.pipe+json": {
source: "iana",
compressible: true
},
"application/vnd.crypto-shade-file": {
source: "iana"
},
"application/vnd.cryptomator.encrypted": {
source: "iana"
},
"application/vnd.cryptomator.vault": {
source: "iana"
},
"application/vnd.ctc-posml": {
source: "iana",
extensions: ["pml"]
},
"application/vnd.ctct.ws+xml": {
source: "iana",
compressible: true
},
"application/vnd.cups-pdf": {
source: "iana"
},
"application/vnd.cups-postscript": {
source: "iana"
},
"application/vnd.cups-ppd": {
source: "iana",
extensions: ["ppd"]
},
"application/vnd.cups-raster": {
source: "iana"
},
"application/vnd.cups-raw": {
source: "iana"
},
"application/vnd.curl": {
source: "iana"
},
"application/vnd.curl.car": {
source: "apache",
extensions: ["car"]
},
"application/vnd.curl.pcurl": {
source: "apache",
extensions: ["pcurl"]
},
"application/vnd.cyan.dean.root+xml": {
source: "iana",
compressible: true
},
"application/vnd.cybank": {
source: "iana"
},
"application/vnd.cyclonedx+json": {
source: "iana",
compressible: true
},
"application/vnd.cyclonedx+xml": {
source: "iana",
compressible: true
},
"application/vnd.d2l.coursepackage1p0+zip": {
source: "iana",
compressible: false
},
"application/vnd.d3m-dataset": {
source: "iana"
},
"application/vnd.d3m-problem": {
source: "iana"
},
"application/vnd.dart": {
source: "iana",
compressible: true,
extensions: ["dart"]
},
"application/vnd.data-vision.rdz": {
source: "iana",
extensions: ["rdz"]
},
"application/vnd.datalog": {
source: "iana"
},
"application/vnd.datapackage+json": {
source: "iana",
compressible: true
},
"application/vnd.dataresource+json": {
source: "iana",
compressible: true
},
"application/vnd.dbf": {
source: "iana",
extensions: ["dbf"]
},
"application/vnd.dcmp+xml": {
source: "iana",
compressible: true,
extensions: ["dcmp"]
},
"application/vnd.debian.binary-package": {
source: "iana"
},
"application/vnd.dece.data": {
source: "iana",
extensions: ["uvf", "uvvf", "uvd", "uvvd"]
},
"application/vnd.dece.ttml+xml": {
source: "iana",
compressible: true,
extensions: ["uvt", "uvvt"]
},
"application/vnd.dece.unspecified": {
source: "iana",
extensions: ["uvx", "uvvx"]
},
"application/vnd.dece.zip": {
source: "iana",
extensions: ["uvz", "uvvz"]
},
"application/vnd.denovo.fcselayout-link": {
source: "iana",
extensions: ["fe_launch"]
},
"application/vnd.desmume.movie": {
source: "iana"
},
"application/vnd.dir-bi.plate-dl-nosuffix": {
source: "iana"
},
"application/vnd.dm.delegation+xml": {
source: "iana",
compressible: true
},
"application/vnd.dna": {
source: "iana",
extensions: ["dna"]
},
"application/vnd.document+json": {
source: "iana",
compressible: true
},
"application/vnd.dolby.mlp": {
source: "apache",
extensions: ["mlp"]
},
"application/vnd.dolby.mobile.1": {
source: "iana"
},
"application/vnd.dolby.mobile.2": {
source: "iana"
},
"application/vnd.doremir.scorecloud-binary-document": {
source: "iana"
},
"application/vnd.dpgraph": {
source: "iana",
extensions: ["dpg"]
},
"application/vnd.dreamfactory": {
source: "iana",
extensions: ["dfac"]
},
"application/vnd.drive+json": {
source: "iana",
compressible: true
},
"application/vnd.ds-keypoint": {
source: "apache",
extensions: ["kpxx"]
},
"application/vnd.dtg.local": {
source: "iana"
},
"application/vnd.dtg.local.flash": {
source: "iana"
},
"application/vnd.dtg.local.html": {
source: "iana"
},
"application/vnd.dvb.ait": {
source: "iana",
extensions: ["ait"]
},
"application/vnd.dvb.dvbisl+xml": {
source: "iana",
compressible: true
},
"application/vnd.dvb.dvbj": {
source: "iana"
},
"application/vnd.dvb.esgcontainer": {
source: "iana"
},
"application/vnd.dvb.ipdcdftnotifaccess": {
source: "iana"
},
"application/vnd.dvb.ipdcesgaccess": {
source: "iana"
},
"application/vnd.dvb.ipdcesgaccess2": {
source: "iana"
},
"application/vnd.dvb.ipdcesgpdd": {
source: "iana"
},
"application/vnd.dvb.ipdcroaming": {
source: "iana"
},
"application/vnd.dvb.iptv.alfec-base": {
source: "iana"
},
"application/vnd.dvb.iptv.alfec-enhancement": {
source: "iana"
},
"application/vnd.dvb.notif-aggregate-root+xml": {
source: "iana",
compressible: true
},
"application/vnd.dvb.notif-container+xml": {
source: "iana",
compressible: true
},
"application/vnd.dvb.notif-generic+xml": {
source: "iana",
compressible: true
},
"application/vnd.dvb.notif-ia-msglist+xml": {
source: "iana",
compressible: true
},
"application/vnd.dvb.notif-ia-registration-request+xml": {
source: "iana",
compressible: true
},
"application/vnd.dvb.notif-ia-registration-response+xml": {
source: "iana",
compressible: true
},
"application/vnd.dvb.notif-init+xml": {
source: "iana",
compressible: true
},
"application/vnd.dvb.pfr": {
source: "iana"
},
"application/vnd.dvb.service": {
source: "iana",
extensions: ["svc"]
},
"application/vnd.dxr": {
source: "iana"
},
"application/vnd.dynageo": {
source: "iana",
extensions: ["geo"]
},
"application/vnd.dzr": {
source: "iana"
},
"application/vnd.easykaraoke.cdgdownload": {
source: "iana"
},
"application/vnd.ecdis-update": {
source: "iana"
},
"application/vnd.ecip.rlp": {
source: "iana"
},
"application/vnd.eclipse.ditto+json": {
source: "iana",
compressible: true
},
"application/vnd.ecowin.chart": {
source: "iana",
extensions: ["mag"]
},
"application/vnd.ecowin.filerequest": {
source: "iana"
},
"application/vnd.ecowin.fileupdate": {
source: "iana"
},
"application/vnd.ecowin.series": {
source: "iana"
},
"application/vnd.ecowin.seriesrequest": {
source: "iana"
},
"application/vnd.ecowin.seriesupdate": {
source: "iana"
},
"application/vnd.efi.img": {
source: "iana"
},
"application/vnd.efi.iso": {
source: "iana"
},
"application/vnd.eln+zip": {
source: "iana",
compressible: false
},
"application/vnd.emclient.accessrequest+xml": {
source: "iana",
compressible: true
},
"application/vnd.enliven": {
source: "iana",
extensions: ["nml"]
},
"application/vnd.enphase.envoy": {
source: "iana"
},
"application/vnd.eprints.data+xml": {
source: "iana",
compressible: true
},
"application/vnd.epson.esf": {
source: "iana",
extensions: ["esf"]
},
"application/vnd.epson.msf": {
source: "iana",
extensions: ["msf"]
},
"application/vnd.epson.quickanime": {
source: "iana",
extensions: ["qam"]
},
"application/vnd.epson.salt": {
source: "iana",
extensions: ["slt"]
},
"application/vnd.epson.ssf": {
source: "iana",
extensions: ["ssf"]
},
"application/vnd.ericsson.quickcall": {
source: "iana"
},
"application/vnd.erofs": {
source: "iana"
},
"application/vnd.espass-espass+zip": {
source: "iana",
compressible: false
},
"application/vnd.eszigno3+xml": {
source: "iana",
compressible: true,
extensions: ["es3", "et3"]
},
"application/vnd.etsi.aoc+xml": {
source: "iana",
compressible: true
},
"application/vnd.etsi.asic-e+zip": {
source: "iana",
compressible: false
},
"application/vnd.etsi.asic-s+zip": {
source: "iana",
compressible: false
},
"application/vnd.etsi.cug+xml": {
source: "iana",
compressible: true
},
"application/vnd.etsi.iptvcommand+xml": {
source: "iana",
compressible: true
},
"application/vnd.etsi.iptvdiscovery+xml": {
source: "iana",
compressible: true
},
"application/vnd.etsi.iptvprofile+xml": {
source: "iana",
compressible: true
},
"application/vnd.etsi.iptvsad-bc+xml": {
source: "iana",
compressible: true
},
"application/vnd.etsi.iptvsad-cod+xml": {
source: "iana",
compressible: true
},
"application/vnd.etsi.iptvsad-npvr+xml": {
source: "iana",
compressible: true
},
"application/vnd.etsi.iptvservice+xml": {
source: "iana",
compressible: true
},
"application/vnd.etsi.iptvsync+xml": {
source: "iana",
compressible: true
},
"application/vnd.etsi.iptvueprofile+xml": {
source: "iana",
compressible: true
},
"application/vnd.etsi.mcid+xml": {
source: "iana",
compressible: true
},
"application/vnd.etsi.mheg5": {
source: "iana"
},
"application/vnd.etsi.overload-control-policy-dataset+xml": {
source: "iana",
compressible: true
},
"application/vnd.etsi.pstn+xml": {
source: "iana",
compressible: true
},
"application/vnd.etsi.sci+xml": {
source: "iana",
compressible: true
},
"application/vnd.etsi.simservs+xml": {
source: "iana",
compressible: true
},
"application/vnd.etsi.timestamp-token": {
source: "iana"
},
"application/vnd.etsi.tsl+xml": {
source: "iana",
compressible: true
},
"application/vnd.etsi.tsl.der": {
source: "iana"
},
"application/vnd.eu.kasparian.car+json": {
source: "iana",
compressible: true
},
"application/vnd.eudora.data": {
source: "iana"
},
"application/vnd.evolv.ecig.profile": {
source: "iana"
},
"application/vnd.evolv.ecig.settings": {
source: "iana"
},
"application/vnd.evolv.ecig.theme": {
source: "iana"
},
"application/vnd.exstream-empower+zip": {
source: "iana",
compressible: false
},
"application/vnd.exstream-package": {
source: "iana"
},
"application/vnd.ezpix-album": {
source: "iana",
extensions: ["ez2"]
},
"application/vnd.ezpix-package": {
source: "iana",
extensions: ["ez3"]
},
"application/vnd.f-secure.mobile": {
source: "iana"
},
"application/vnd.familysearch.gedcom+zip": {
source: "iana",
compressible: false
},
"application/vnd.fastcopy-disk-image": {
source: "iana"
},
"application/vnd.fdf": {
source: "apache",
extensions: ["fdf"]
},
"application/vnd.fdsn.mseed": {
source: "iana",
extensions: ["mseed"]
},
"application/vnd.fdsn.seed": {
source: "iana",
extensions: ["seed", "dataless"]
},
"application/vnd.fdsn.stationxml+xml": {
source: "iana",
charset: "XML-BASED",
compressible: true
},
"application/vnd.ffsns": {
source: "iana"
},
"application/vnd.ficlab.flb+zip": {
source: "iana",
compressible: false
},
"application/vnd.filmit.zfc": {
source: "iana"
},
"application/vnd.fints": {
source: "iana"
},
"application/vnd.firemonkeys.cloudcell": {
source: "iana"
},
"application/vnd.flographit": {
source: "iana",
extensions: ["gph"]
},
"application/vnd.fluxtime.clip": {
source: "iana",
extensions: ["ftc"]
},
"application/vnd.font-fontforge-sfd": {
source: "iana"
},
"application/vnd.framemaker": {
source: "iana",
extensions: ["fm", "frame", "maker", "book"]
},
"application/vnd.freelog.comic": {
source: "iana"
},
"application/vnd.frogans.fnc": {
source: "apache",
extensions: ["fnc"]
},
"application/vnd.frogans.ltf": {
source: "apache",
extensions: ["ltf"]
},
"application/vnd.fsc.weblaunch": {
source: "iana",
extensions: ["fsc"]
},
"application/vnd.fujifilm.fb.docuworks": {
source: "iana"
},
"application/vnd.fujifilm.fb.docuworks.binder": {
source: "iana"
},
"application/vnd.fujifilm.fb.docuworks.container": {
source: "iana"
},
"application/vnd.fujifilm.fb.jfi+xml": {
source: "iana",
compressible: true
},
"application/vnd.fujitsu.oasys": {
source: "iana",
extensions: ["oas"]
},
"application/vnd.fujitsu.oasys2": {
source: "iana",
extensions: ["oa2"]
},
"application/vnd.fujitsu.oasys3": {
source: "iana",
extensions: ["oa3"]
},
"application/vnd.fujitsu.oasysgp": {
source: "iana",
extensions: ["fg5"]
},
"application/vnd.fujitsu.oasysprs": {
source: "iana",
extensions: ["bh2"]
},
"application/vnd.fujixerox.art-ex": {
source: "iana"
},
"application/vnd.fujixerox.art4": {
source: "iana"
},
"application/vnd.fujixerox.ddd": {
source: "iana",
extensions: ["ddd"]
},
"application/vnd.fujixerox.docuworks": {
source: "iana",
extensions: ["xdw"]
},
"application/vnd.fujixerox.docuworks.binder": {
source: "iana",
extensions: ["xbd"]
},
"application/vnd.fujixerox.docuworks.container": {
source: "iana"
},
"application/vnd.fujixerox.hbpl": {
source: "iana"
},
"application/vnd.fut-misnet": {
source: "iana"
},
"application/vnd.futoin+cbor": {
source: "iana"
},
"application/vnd.futoin+json": {
source: "iana",
compressible: true
},
"application/vnd.fuzzysheet": {
source: "iana",
extensions: ["fzs"]
},
"application/vnd.ga4gh.passport+jwt": {
source: "iana"
},
"application/vnd.genomatix.tuxedo": {
source: "iana",
extensions: ["txd"]
},
"application/vnd.genozip": {
source: "iana"
},
"application/vnd.gentics.grd+json": {
source: "iana",
compressible: true
},
"application/vnd.gentoo.catmetadata+xml": {
source: "iana",
compressible: true
},
"application/vnd.gentoo.ebuild": {
source: "iana"
},
"application/vnd.gentoo.eclass": {
source: "iana"
},
"application/vnd.gentoo.gpkg": {
source: "iana"
},
"application/vnd.gentoo.manifest": {
source: "iana"
},
"application/vnd.gentoo.pkgmetadata+xml": {
source: "iana",
compressible: true
},
"application/vnd.gentoo.xpak": {
source: "iana"
},
"application/vnd.geo+json": {
source: "apache",
compressible: true
},
"application/vnd.geocube+xml": {
source: "apache",
compressible: true
},
"application/vnd.geogebra.file": {
source: "iana",
extensions: ["ggb"]
},
"application/vnd.geogebra.pinboard": {
source: "iana"
},
"application/vnd.geogebra.slides": {
source: "iana",
extensions: ["ggs"]
},
"application/vnd.geogebra.tool": {
source: "iana",
extensions: ["ggt"]
},
"application/vnd.geometry-explorer": {
source: "iana",
extensions: ["gex", "gre"]
},
"application/vnd.geonext": {
source: "iana",
extensions: ["gxt"]
},
"application/vnd.geoplan": {
source: "iana",
extensions: ["g2w"]
},
"application/vnd.geospace": {
source: "iana",
extensions: ["g3w"]
},
"application/vnd.gerber": {
source: "iana"
},
"application/vnd.globalplatform.card-content-mgt": {
source: "iana"
},
"application/vnd.globalplatform.card-content-mgt-response": {
source: "iana"
},
"application/vnd.gmx": {
source: "iana",
extensions: ["gmx"]
},
"application/vnd.gnu.taler.exchange+json": {
source: "iana",
compressible: true
},
"application/vnd.gnu.taler.merchant+json": {
source: "iana",
compressible: true
},
"application/vnd.google-apps.audio": {},
"application/vnd.google-apps.document": {
compressible: false,
extensions: ["gdoc"]
},
"application/vnd.google-apps.drawing": {
compressible: false,
extensions: ["gdraw"]
},
"application/vnd.google-apps.drive-sdk": {
compressible: false
},
"application/vnd.google-apps.file": {},
"application/vnd.google-apps.folder": {
compressible: false
},
"application/vnd.google-apps.form": {
compressible: false,
extensions: ["gform"]
},
"application/vnd.google-apps.fusiontable": {},
"application/vnd.google-apps.jam": {
compressible: false,
extensions: ["gjam"]
},
"application/vnd.google-apps.mail-layout": {},
"application/vnd.google-apps.map": {
compressible: false,
extensions: ["gmap"]
},
"application/vnd.google-apps.photo": {},
"application/vnd.google-apps.presentation": {
compressible: false,
extensions: ["gslides"]
},
"application/vnd.google-apps.script": {
compressible: false,
extensions: ["gscript"]
},
"application/vnd.google-apps.shortcut": {},
"application/vnd.google-apps.site": {
compressible: false,
extensions: ["gsite"]
},
"application/vnd.google-apps.spreadsheet": {
compressible: false,
extensions: ["gsheet"]
},
"application/vnd.google-apps.unknown": {},
"application/vnd.google-apps.video": {},
"application/vnd.google-earth.kml+xml": {
source: "iana",
compressible: true,
extensions: ["kml"]
},
"application/vnd.google-earth.kmz": {
source: "iana",
compressible: false,
extensions: ["kmz"]
},
"application/vnd.gov.sk.e-form+xml": {
source: "apache",
compressible: true
},
"application/vnd.gov.sk.e-form+zip": {
source: "iana",
compressible: false
},
"application/vnd.gov.sk.xmldatacontainer+xml": {
source: "iana",
compressible: true,
extensions: ["xdcf"]
},
"application/vnd.gpxsee.map+xml": {
source: "iana",
compressible: true
},
"application/vnd.grafeq": {
source: "iana",
extensions: ["gqf", "gqs"]
},
"application/vnd.gridmp": {
source: "iana"
},
"application/vnd.groove-account": {
source: "iana",
extensions: ["gac"]
},
"application/vnd.groove-help": {
source: "iana",
extensions: ["ghf"]
},
"application/vnd.groove-identity-message": {
source: "iana",
extensions: ["gim"]
},
"application/vnd.groove-injector": {
source: "iana",
extensions: ["grv"]
},
"application/vnd.groove-tool-message": {
source: "iana",
extensions: ["gtm"]
},
"application/vnd.groove-tool-template": {
source: "iana",
extensions: ["tpl"]
},
"application/vnd.groove-vcard": {
source: "iana",
extensions: ["vcg"]
},
"application/vnd.hal+json": {
source: "iana",
compressible: true
},
"application/vnd.hal+xml": {
source: "iana",
compressible: true,
extensions: ["hal"]
},
"application/vnd.handheld-entertainment+xml": {
source: "iana",
compressible: true,
extensions: ["zmm"]
},
"application/vnd.hbci": {
source: "iana",
extensions: ["hbci"]
},
"application/vnd.hc+json": {
source: "iana",
compressible: true
},
"application/vnd.hcl-bireports": {
source: "iana"
},
"application/vnd.hdt": {
source: "iana"
},
"application/vnd.heroku+json": {
source: "iana",
compressible: true
},
"application/vnd.hhe.lesson-player": {
source: "iana",
extensions: ["les"]
},
"application/vnd.hp-hpgl": {
source: "iana",
extensions: ["hpgl"]
},
"application/vnd.hp-hpid": {
source: "iana",
extensions: ["hpid"]
},
"application/vnd.hp-hps": {
source: "iana",
extensions: ["hps"]
},
"application/vnd.hp-jlyt": {
source: "iana",
extensions: ["jlt"]
},
"application/vnd.hp-pcl": {
source: "iana",
extensions: ["pcl"]
},
"application/vnd.hp-pclxl": {
source: "iana",
extensions: ["pclxl"]
},
"application/vnd.hsl": {
source: "iana"
},
"application/vnd.httphone": {
source: "iana"
},
"application/vnd.hydrostatix.sof-data": {
source: "iana",
extensions: ["sfd-hdstx"]
},
"application/vnd.hyper+json": {
source: "iana",
compressible: true
},
"application/vnd.hyper-item+json": {
source: "iana",
compressible: true
},
"application/vnd.hyperdrive+json": {
source: "iana",
compressible: true
},
"application/vnd.hzn-3d-crossword": {
source: "iana"
},
"application/vnd.ibm.afplinedata": {
source: "apache"
},
"application/vnd.ibm.electronic-media": {
source: "iana"
},
"application/vnd.ibm.minipay": {
source: "iana",
extensions: ["mpy"]
},
"application/vnd.ibm.modcap": {
source: "apache",
extensions: ["afp", "listafp", "list3820"]
},
"application/vnd.ibm.rights-management": {
source: "iana",
extensions: ["irm"]
},
"application/vnd.ibm.secure-container": {
source: "iana",
extensions: ["sc"]
},
"application/vnd.iccprofile": {
source: "iana",
extensions: ["icc", "icm"]
},
"application/vnd.ieee.1905": {
source: "iana"
},
"application/vnd.igloader": {
source: "iana",
extensions: ["igl"]
},
"application/vnd.imagemeter.folder+zip": {
source: "iana",
compressible: false
},
"application/vnd.imagemeter.image+zip": {
source: "iana",
compressible: false
},
"application/vnd.immervision-ivp": {
source: "iana",
extensions: ["ivp"]
},
"application/vnd.immervision-ivu": {
source: "iana",
extensions: ["ivu"]
},
"application/vnd.ims.imsccv1p1": {
source: "iana"
},
"application/vnd.ims.imsccv1p2": {
source: "iana"
},
"application/vnd.ims.imsccv1p3": {
source: "iana"
},
"application/vnd.ims.lis.v2.result+json": {
source: "iana",
compressible: true
},
"application/vnd.ims.lti.v2.toolconsumerprofile+json": {
source: "iana",
compressible: true
},
"application/vnd.ims.lti.v2.toolproxy+json": {
source: "iana",
compressible: true
},
"application/vnd.ims.lti.v2.toolproxy.id+json": {
source: "iana",
compressible: true
},
"application/vnd.ims.lti.v2.toolsettings+json": {
source: "iana",
compressible: true
},
"application/vnd.ims.lti.v2.toolsettings.simple+json": {
source: "iana",
compressible: true
},
"application/vnd.informedcontrol.rms+xml": {
source: "iana",
compressible: true
},
"application/vnd.informix-visionary": {
source: "apache"
},
"application/vnd.infotech.project": {
source: "iana"
},
"application/vnd.infotech.project+xml": {
source: "iana",
compressible: true
},
"application/vnd.innopath.wamp.notification": {
source: "iana"
},
"application/vnd.insors.igm": {
source: "iana",
extensions: ["igm"]
},
"application/vnd.intercon.formnet": {
source: "iana",
extensions: ["xpw", "xpx"]
},
"application/vnd.intergeo": {
source: "iana",
extensions: ["i2g"]
},
"application/vnd.intertrust.digibox": {
source: "iana"
},
"application/vnd.intertrust.nncp": {
source: "iana"
},
"application/vnd.intu.qbo": {
source: "iana",
extensions: ["qbo"]
},
"application/vnd.intu.qfx": {
source: "iana",
extensions: ["qfx"]
},
"application/vnd.ipfs.ipns-record": {
source: "iana"
},
"application/vnd.ipld.car": {
source: "iana"
},
"application/vnd.ipld.dag-cbor": {
source: "iana"
},
"application/vnd.ipld.dag-json": {
source: "iana"
},
"application/vnd.ipld.raw": {
source: "iana"
},
"application/vnd.iptc.g2.catalogitem+xml": {
source: "iana",
compressible: true
},
"application/vnd.iptc.g2.conceptitem+xml": {
source: "iana",
compressible: true
},
"application/vnd.iptc.g2.knowledgeitem+xml": {
source: "iana",
compressible: true
},
"application/vnd.iptc.g2.newsitem+xml": {
source: "iana",
compressible: true
},
"application/vnd.iptc.g2.newsmessage+xml": {
source: "iana",
compressible: true
},
"application/vnd.iptc.g2.packageitem+xml": {
source: "iana",
compressible: true
},
"application/vnd.iptc.g2.planningitem+xml": {
source: "iana",
compressible: true
},
"application/vnd.ipunplugged.rcprofile": {
source: "iana",
extensions: ["rcprofile"]
},
"application/vnd.irepository.package+xml": {
source: "iana",
compressible: true,
extensions: ["irp"]
},
"application/vnd.is-xpr": {
source: "iana",
extensions: ["xpr"]
},
"application/vnd.isac.fcs": {
source: "iana",
extensions: ["fcs"]
},
"application/vnd.iso11783-10+zip": {
source: "iana",
compressible: false
},
"application/vnd.jam": {
source: "iana",
extensions: ["jam"]
},
"application/vnd.japannet-directory-service": {
source: "iana"
},
"application/vnd.japannet-jpnstore-wakeup": {
source: "iana"
},
"application/vnd.japannet-payment-wakeup": {
source: "iana"
},
"application/vnd.japannet-registration": {
source: "iana"
},
"application/vnd.japannet-registration-wakeup": {
source: "iana"
},
"application/vnd.japannet-setstore-wakeup": {
source: "iana"
},
"application/vnd.japannet-verification": {
source: "iana"
},
"application/vnd.japannet-verification-wakeup": {
source: "iana"
},
"application/vnd.jcp.javame.midlet-rms": {
source: "iana",
extensions: ["rms"]
},
"application/vnd.jisp": {
source: "iana",
extensions: ["jisp"]
},
"application/vnd.joost.joda-archive": {
source: "iana",
extensions: ["joda"]
},
"application/vnd.jsk.isdn-ngn": {
source: "iana"
},
"application/vnd.kahootz": {
source: "iana",
extensions: ["ktz", "ktr"]
},
"application/vnd.kde.karbon": {
source: "iana",
extensions: ["karbon"]
},
"application/vnd.kde.kchart": {
source: "iana",
extensions: ["chrt"]
},
"application/vnd.kde.kformula": {
source: "iana",
extensions: ["kfo"]
},
"application/vnd.kde.kivio": {
source: "iana",
extensions: ["flw"]
},
"application/vnd.kde.kontour": {
source: "iana",
extensions: ["kon"]
},
"application/vnd.kde.kpresenter": {
source: "iana",
extensions: ["kpr", "kpt"]
},
"application/vnd.kde.kspread": {
source: "iana",
extensions: ["ksp"]
},
"application/vnd.kde.kword": {
source: "iana",
extensions: ["kwd", "kwt"]
},
"application/vnd.kdl": {
source: "iana"
},
"application/vnd.kenameaapp": {
source: "iana",
extensions: ["htke"]
},
"application/vnd.keyman.kmp+zip": {
source: "iana",
compressible: false
},
"application/vnd.keyman.kmx": {
source: "iana"
},
"application/vnd.kidspiration": {
source: "iana",
extensions: ["kia"]
},
"application/vnd.kinar": {
source: "iana",
extensions: ["kne", "knp"]
},
"application/vnd.koan": {
source: "iana",
extensions: ["skp", "skd", "skt", "skm"]
},
"application/vnd.kodak-descriptor": {
source: "iana",
extensions: ["sse"]
},
"application/vnd.las": {
source: "iana"
},
"application/vnd.las.las+json": {
source: "iana",
compressible: true
},
"application/vnd.las.las+xml": {
source: "iana",
compressible: true,
extensions: ["lasxml"]
},
"application/vnd.laszip": {
source: "iana"
},
"application/vnd.ldev.productlicensing": {
source: "iana"
},
"application/vnd.leap+json": {
source: "iana",
compressible: true
},
"application/vnd.liberty-request+xml": {
source: "iana",
compressible: true
},
"application/vnd.llamagraphics.life-balance.desktop": {
source: "iana",
extensions: ["lbd"]
},
"application/vnd.llamagraphics.life-balance.exchange+xml": {
source: "iana",
compressible: true,
extensions: ["lbe"]
},
"application/vnd.logipipe.circuit+zip": {
source: "iana",
compressible: false
},
"application/vnd.loom": {
source: "iana"
},
"application/vnd.lotus-1-2-3": {
source: "iana",
extensions: ["123"]
},
"application/vnd.lotus-approach": {
source: "iana",
extensions: ["apr"]
},
"application/vnd.lotus-freelance": {
source: "iana",
extensions: ["pre"]
},
"application/vnd.lotus-notes": {
source: "iana",
extensions: ["nsf"]
},
"application/vnd.lotus-organizer": {
source: "iana",
extensions: ["org"]
},
"application/vnd.lotus-screencam": {
source: "iana",
extensions: ["scm"]
},
"application/vnd.lotus-wordpro": {
source: "iana",
extensions: ["lwp"]
},
"application/vnd.macports.portpkg": {
source: "iana",
extensions: ["portpkg"]
},
"application/vnd.mapbox-vector-tile": {
source: "iana",
extensions: ["mvt"]
},
"application/vnd.marlin.drm.actiontoken+xml": {
source: "iana",
compressible: true
},
"application/vnd.marlin.drm.conftoken+xml": {
source: "iana",
compressible: true
},
"application/vnd.marlin.drm.license+xml": {
source: "iana",
compressible: true
},
"application/vnd.marlin.drm.mdcf": {
source: "iana"
},
"application/vnd.mason+json": {
source: "iana",
compressible: true
},
"application/vnd.maxar.archive.3tz+zip": {
source: "iana",
compressible: false
},
"application/vnd.maxmind.maxmind-db": {
source: "iana"
},
"application/vnd.mcd": {
source: "iana",
extensions: ["mcd"]
},
"application/vnd.mdl": {
source: "iana"
},
"application/vnd.mdl-mbsdf": {
source: "iana"
},
"application/vnd.medcalcdata": {
source: "iana",
extensions: ["mc1"]
},
"application/vnd.mediastation.cdkey": {
source: "iana",
extensions: ["cdkey"]
},
"application/vnd.medicalholodeck.recordxr": {
source: "iana"
},
"application/vnd.meridian-slingshot": {
source: "iana"
},
"application/vnd.mermaid": {
source: "iana"
},
"application/vnd.mfer": {
source: "iana",
extensions: ["mwf"]
},
"application/vnd.mfmp": {
source: "iana",
extensions: ["mfm"]
},
"application/vnd.micro+json": {
source: "iana",
compressible: true
},
"application/vnd.micrografx.flo": {
source: "iana",
extensions: ["flo"]
},
"application/vnd.micrografx.igx": {
source: "iana",
extensions: ["igx"]
},
"application/vnd.microsoft.portable-executable": {
source: "iana"
},
"application/vnd.microsoft.windows.thumbnail-cache": {
source: "iana"
},
"application/vnd.miele+json": {
source: "iana",
compressible: true
},
"application/vnd.mif": {
source: "iana",
extensions: ["mif"]
},
"application/vnd.minisoft-hp3000-save": {
source: "iana"
},
"application/vnd.mitsubishi.misty-guard.trustweb": {
source: "iana"
},
"application/vnd.mobius.daf": {
source: "iana",
extensions: ["daf"]
},
"application/vnd.mobius.dis": {
source: "iana",
extensions: ["dis"]
},
"application/vnd.mobius.mbk": {
source: "iana",
extensions: ["mbk"]
},
"application/vnd.mobius.mqy": {
source: "iana",
extensions: ["mqy"]
},
"application/vnd.mobius.msl": {
source: "iana",
extensions: ["msl"]
},
"application/vnd.mobius.plc": {
source: "iana",
extensions: ["plc"]
},
"application/vnd.mobius.txf": {
source: "iana",
extensions: ["txf"]
},
"application/vnd.modl": {
source: "iana"
},
"application/vnd.mophun.application": {
source: "iana",
extensions: ["mpn"]
},
"application/vnd.mophun.certificate": {
source: "iana",
extensions: ["mpc"]
},
"application/vnd.motorola.flexsuite": {
source: "iana"
},
"application/vnd.motorola.flexsuite.adsi": {
source: "iana"
},
"application/vnd.motorola.flexsuite.fis": {
source: "iana"
},
"application/vnd.motorola.flexsuite.gotap": {
source: "iana"
},
"application/vnd.motorola.flexsuite.kmr": {
source: "iana"
},
"application/vnd.motorola.flexsuite.ttc": {
source: "iana"
},
"application/vnd.motorola.flexsuite.wem": {
source: "iana"
},
"application/vnd.motorola.iprm": {
source: "iana"
},
"application/vnd.mozilla.xul+xml": {
source: "iana",
compressible: true,
extensions: ["xul"]
},
"application/vnd.ms-3mfdocument": {
source: "iana"
},
"application/vnd.ms-artgalry": {
source: "iana",
extensions: ["cil"]
},
"application/vnd.ms-asf": {
source: "iana"
},
"application/vnd.ms-cab-compressed": {
source: "iana",
extensions: ["cab"]
},
"application/vnd.ms-color.iccprofile": {
source: "apache"
},
"application/vnd.ms-excel": {
source: "iana",
compressible: false,
extensions: ["xls", "xlm", "xla", "xlc", "xlt", "xlw"]
},
"application/vnd.ms-excel.addin.macroenabled.12": {
source: "iana",
extensions: ["xlam"]
},
"application/vnd.ms-excel.sheet.binary.macroenabled.12": {
source: "iana",
extensions: ["xlsb"]
},
"application/vnd.ms-excel.sheet.macroenabled.12": {
source: "iana",
extensions: ["xlsm"]
},
"application/vnd.ms-excel.template.macroenabled.12": {
source: "iana",
extensions: ["xltm"]
},
"application/vnd.ms-fontobject": {
source: "iana",
compressible: true,
extensions: ["eot"]
},
"application/vnd.ms-htmlhelp": {
source: "iana",
extensions: ["chm"]
},
"application/vnd.ms-ims": {
source: "iana",
extensions: ["ims"]
},
"application/vnd.ms-lrm": {
source: "iana",
extensions: ["lrm"]
},
"application/vnd.ms-office.activex+xml": {
source: "iana",
compressible: true
},
"application/vnd.ms-officetheme": {
source: "iana",
extensions: ["thmx"]
},
"application/vnd.ms-opentype": {
source: "apache",
compressible: true
},
"application/vnd.ms-outlook": {
compressible: false,
extensions: ["msg"]
},
"application/vnd.ms-package.obfuscated-opentype": {
source: "apache"
},
"application/vnd.ms-pki.seccat": {
source: "apache",
extensions: ["cat"]
},
"application/vnd.ms-pki.stl": {
source: "apache",
extensions: ["stl"]
},
"application/vnd.ms-playready.initiator+xml": {
source: "iana",
compressible: true
},
"application/vnd.ms-powerpoint": {
source: "iana",
compressible: false,
extensions: ["ppt", "pps", "pot"]
},
"application/vnd.ms-powerpoint.addin.macroenabled.12": {
source: "iana",
extensions: ["ppam"]
},
"application/vnd.ms-powerpoint.presentation.macroenabled.12": {
source: "iana",
extensions: ["pptm"]
},
"application/vnd.ms-powerpoint.slide.macroenabled.12": {
source: "iana",
extensions: ["sldm"]
},
"application/vnd.ms-powerpoint.slideshow.macroenabled.12": {
source: "iana",
extensions: ["ppsm"]
},
"application/vnd.ms-powerpoint.template.macroenabled.12": {
source: "iana",
extensions: ["potm"]
},
"application/vnd.ms-printdevicecapabilities+xml": {
source: "iana",
compressible: true
},
"application/vnd.ms-printing.printticket+xml": {
source: "apache",
compressible: true
},
"application/vnd.ms-printschematicket+xml": {
source: "iana",
compressible: true
},
"application/vnd.ms-project": {
source: "iana",
extensions: ["mpp", "mpt"]
},
"application/vnd.ms-tnef": {
source: "iana"
},
"application/vnd.ms-visio.viewer": {
extensions: ["vdx"]
},
"application/vnd.ms-windows.devicepairing": {
source: "iana"
},
"application/vnd.ms-windows.nwprinting.oob": {
source: "iana"
},
"application/vnd.ms-windows.printerpairing": {
source: "iana"
},
"application/vnd.ms-windows.wsd.oob": {
source: "iana"
},
"application/vnd.ms-wmdrm.lic-chlg-req": {
source: "iana"
},
"application/vnd.ms-wmdrm.lic-resp": {
source: "iana"
},
"application/vnd.ms-wmdrm.meter-chlg-req": {
source: "iana"
},
"application/vnd.ms-wmdrm.meter-resp": {
source: "iana"
},
"application/vnd.ms-word.document.macroenabled.12": {
source: "iana",
extensions: ["docm"]
},
"application/vnd.ms-word.template.macroenabled.12": {
source: "iana",
extensions: ["dotm"]
},
"application/vnd.ms-works": {
source: "iana",
extensions: ["wps", "wks", "wcm", "wdb"]
},
"application/vnd.ms-wpl": {
source: "iana",
extensions: ["wpl"]
},
"application/vnd.ms-xpsdocument": {
source: "iana",
compressible: false,
extensions: ["xps"]
},
"application/vnd.msa-disk-image": {
source: "iana"
},
"application/vnd.mseq": {
source: "iana",
extensions: ["mseq"]
},
"application/vnd.msgpack": {
source: "iana"
},
"application/vnd.msign": {
source: "iana"
},
"application/vnd.multiad.creator": {
source: "iana"
},
"application/vnd.multiad.creator.cif": {
source: "iana"
},
"application/vnd.music-niff": {
source: "iana"
},
"application/vnd.musician": {
source: "iana",
extensions: ["mus"]
},
"application/vnd.muvee.style": {
source: "iana",
extensions: ["msty"]
},
"application/vnd.mynfc": {
source: "iana",
extensions: ["taglet"]
},
"application/vnd.nacamar.ybrid+json": {
source: "iana",
compressible: true
},
"application/vnd.nato.bindingdataobject+cbor": {
source: "iana"
},
"application/vnd.nato.bindingdataobject+json": {
source: "iana",
compressible: true
},
"application/vnd.nato.bindingdataobject+xml": {
source: "iana",
compressible: true,
extensions: ["bdo"]
},
"application/vnd.nato.openxmlformats-package.iepd+zip": {
source: "iana",
compressible: false
},
"application/vnd.ncd.control": {
source: "iana"
},
"application/vnd.ncd.reference": {
source: "iana"
},
"application/vnd.nearst.inv+json": {
source: "iana",
compressible: true
},
"application/vnd.nebumind.line": {
source: "iana"
},
"application/vnd.nervana": {
source: "iana"
},
"application/vnd.netfpx": {
source: "iana"
},
"application/vnd.neurolanguage.nlu": {
source: "iana",
extensions: ["nlu"]
},
"application/vnd.nimn": {
source: "iana"
},
"application/vnd.nintendo.nitro.rom": {
source: "iana"
},
"application/vnd.nintendo.snes.rom": {
source: "iana"
},
"application/vnd.nitf": {
source: "iana",
extensions: ["ntf", "nitf"]
},
"application/vnd.noblenet-directory": {
source: "iana",
extensions: ["nnd"]
},
"application/vnd.noblenet-sealer": {
source: "iana",
extensions: ["nns"]
},
"application/vnd.noblenet-web": {
source: "iana",
extensions: ["nnw"]
},
"application/vnd.nokia.catalogs": {
source: "iana"
},
"application/vnd.nokia.conml+wbxml": {
source: "iana"
},
"application/vnd.nokia.conml+xml": {
source: "iana",
compressible: true
},
"application/vnd.nokia.iptv.config+xml": {
source: "iana",
compressible: true
},
"application/vnd.nokia.isds-radio-presets": {
source: "iana"
},
"application/vnd.nokia.landmark+wbxml": {
source: "iana"
},
"application/vnd.nokia.landmark+xml": {
source: "iana",
compressible: true
},
"application/vnd.nokia.landmarkcollection+xml": {
source: "iana",
compressible: true
},
"application/vnd.nokia.n-gage.ac+xml": {
source: "iana",
compressible: true,
extensions: ["ac"]
},
"application/vnd.nokia.n-gage.data": {
source: "iana",
extensions: ["ngdat"]
},
"application/vnd.nokia.n-gage.symbian.install": {
source: "apache",
extensions: ["n-gage"]
},
"application/vnd.nokia.ncd": {
source: "iana"
},
"application/vnd.nokia.pcd+wbxml": {
source: "iana"
},
"application/vnd.nokia.pcd+xml": {
source: "iana",
compressible: true
},
"application/vnd.nokia.radio-preset": {
source: "iana",
extensions: ["rpst"]
},
"application/vnd.nokia.radio-presets": {
source: "iana",
extensions: ["rpss"]
},
"application/vnd.novadigm.edm": {
source: "iana",
extensions: ["edm"]
},
"application/vnd.novadigm.edx": {
source: "iana",
extensions: ["edx"]
},
"application/vnd.novadigm.ext": {
source: "iana",
extensions: ["ext"]
},
"application/vnd.ntt-local.content-share": {
source: "iana"
},
"application/vnd.ntt-local.file-transfer": {
source: "iana"
},
"application/vnd.ntt-local.ogw_remote-access": {
source: "iana"
},
"application/vnd.ntt-local.sip-ta_remote": {
source: "iana"
},
"application/vnd.ntt-local.sip-ta_tcp_stream": {
source: "iana"
},
"application/vnd.oai.workflows": {
source: "iana"
},
"application/vnd.oai.workflows+json": {
source: "iana",
compressible: true
},
"application/vnd.oai.workflows+yaml": {
source: "iana"
},
"application/vnd.oasis.opendocument.base": {
source: "iana"
},
"application/vnd.oasis.opendocument.chart": {
source: "iana",
extensions: ["odc"]
},
"application/vnd.oasis.opendocument.chart-template": {
source: "iana",
extensions: ["otc"]
},
"application/vnd.oasis.opendocument.database": {
source: "apache",
extensions: ["odb"]
},
"application/vnd.oasis.opendocument.formula": {
source: "iana",
extensions: ["odf"]
},
"application/vnd.oasis.opendocument.formula-template": {
source: "iana",
extensions: ["odft"]
},
"application/vnd.oasis.opendocument.graphics": {
source: "iana",
compressible: false,
extensions: ["odg"]
},
"application/vnd.oasis.opendocument.graphics-template": {
source: "iana",
extensions: ["otg"]
},
"application/vnd.oasis.opendocument.image": {
source: "iana",
extensions: ["odi"]
},
"application/vnd.oasis.opendocument.image-template": {
source: "iana",
extensions: ["oti"]
},
"application/vnd.oasis.opendocument.presentation": {
source: "iana",
compressible: false,
extensions: ["odp"]
},
"application/vnd.oasis.opendocument.presentation-template": {
source: "iana",
extensions: ["otp"]
},
"application/vnd.oasis.opendocument.spreadsheet": {
source: "iana",
compressible: false,
extensions: ["ods"]
},
"application/vnd.oasis.opendocument.spreadsheet-template": {
source: "iana",
extensions: ["ots"]
},
"application/vnd.oasis.opendocument.text": {
source: "iana",
compressible: false,
extensions: ["odt"]
},
"application/vnd.oasis.opendocument.text-master": {
source: "iana",
extensions: ["odm"]
},
"application/vnd.oasis.opendocument.text-master-template": {
source: "iana"
},
"application/vnd.oasis.opendocument.text-template": {
source: "iana",
extensions: ["ott"]
},
"application/vnd.oasis.opendocument.text-web": {
source: "iana",
extensions: ["oth"]
},
"application/vnd.obn": {
source: "iana"
},
"application/vnd.ocf+cbor": {
source: "iana"
},
"application/vnd.oci.image.manifest.v1+json": {
source: "iana",
compressible: true
},
"application/vnd.oftn.l10n+json": {
source: "iana",
compressible: true
},
"application/vnd.oipf.contentaccessdownload+xml": {
source: "iana",
compressible: true
},
"application/vnd.oipf.contentaccessstreaming+xml": {
source: "iana",
compressible: true
},
"application/vnd.oipf.cspg-hexbinary": {
source: "iana"
},
"application/vnd.oipf.dae.svg+xml": {
source: "iana",
compressible: true
},
"application/vnd.oipf.dae.xhtml+xml": {
source: "iana",
compressible: true
},
"application/vnd.oipf.mippvcontrolmessage+xml": {
source: "iana",
compressible: true
},
"application/vnd.oipf.pae.gem": {
source: "iana"
},
"application/vnd.oipf.spdiscovery+xml": {
source: "iana",
compressible: true
},
"application/vnd.oipf.spdlist+xml": {
source: "iana",
compressible: true
},
"application/vnd.oipf.ueprofile+xml": {
source: "iana",
compressible: true
},
"application/vnd.oipf.userprofile+xml": {
source: "iana",
compressible: true
},
"application/vnd.olpc-sugar": {
source: "iana",
extensions: ["xo"]
},
"application/vnd.oma-scws-config": {
source: "iana"
},
"application/vnd.oma-scws-http-request": {
source: "iana"
},
"application/vnd.oma-scws-http-response": {
source: "iana"
},
"application/vnd.oma.bcast.associated-procedure-parameter+xml": {
source: "iana",
compressible: true
},
"application/vnd.oma.bcast.drm-trigger+xml": {
source: "apache",
compressible: true
},
"application/vnd.oma.bcast.imd+xml": {
source: "iana",
compressible: true
},
"application/vnd.oma.bcast.ltkm": {
source: "iana"
},
"application/vnd.oma.bcast.notification+xml": {
source: "iana",
compressible: true
},
"application/vnd.oma.bcast.provisioningtrigger": {
source: "iana"
},
"application/vnd.oma.bcast.sgboot": {
source: "iana"
},
"application/vnd.oma.bcast.sgdd+xml": {
source: "iana",
compressible: true
},
"application/vnd.oma.bcast.sgdu": {
source: "iana"
},
"application/vnd.oma.bcast.simple-symbol-container": {
source: "iana"
},
"application/vnd.oma.bcast.smartcard-trigger+xml": {
source: "apache",
compressible: true
},
"application/vnd.oma.bcast.sprov+xml": {
source: "iana",
compressible: true
},
"application/vnd.oma.bcast.stkm": {
source: "iana"
},
"application/vnd.oma.cab-address-book+xml": {
source: "iana",
compressible: true
},
"application/vnd.oma.cab-feature-handler+xml": {
source: "iana",
compressible: true
},
"application/vnd.oma.cab-pcc+xml": {
source: "iana",
compressible: true
},
"application/vnd.oma.cab-subs-invite+xml": {
source: "iana",
compressible: true
},
"application/vnd.oma.cab-user-prefs+xml": {
source: "iana",
compressible: true
},
"application/vnd.oma.dcd": {
source: "iana"
},
"application/vnd.oma.dcdc": {
source: "iana"
},
"application/vnd.oma.dd2+xml": {
source: "iana",
compressible: true,
extensions: ["dd2"]
},
"application/vnd.oma.drm.risd+xml": {
source: "iana",
compressible: true
},
"application/vnd.oma.group-usage-list+xml": {
source: "iana",
compressible: true
},
"application/vnd.oma.lwm2m+cbor": {
source: "iana"
},
"application/vnd.oma.lwm2m+json": {
source: "iana",
compressible: true
},
"application/vnd.oma.lwm2m+tlv": {
source: "iana"
},
"application/vnd.oma.pal+xml": {
source: "iana",
compressible: true
},
"application/vnd.oma.poc.detailed-progress-report+xml": {
source: "iana",
compressible: true
},
"application/vnd.oma.poc.final-report+xml": {
source: "iana",
compressible: true
},
"application/vnd.oma.poc.groups+xml": {
source: "iana",
compressible: true
},
"application/vnd.oma.poc.invocation-descriptor+xml": {
source: "iana",
compressible: true
},
"application/vnd.oma.poc.optimized-progress-report+xml": {
source: "iana",
compressible: true
},
"application/vnd.oma.push": {
source: "iana"
},
"application/vnd.oma.scidm.messages+xml": {
source: "iana",
compressible: true
},
"application/vnd.oma.xcap-directory+xml": {
source: "iana",
compressible: true
},
"application/vnd.omads-email+xml": {
source: "iana",
charset: "UTF-8",
compressible: true
},
"application/vnd.omads-file+xml": {
source: "iana",
charset: "UTF-8",
compressible: true
},
"application/vnd.omads-folder+xml": {
source: "iana",
charset: "UTF-8",
compressible: true
},
"application/vnd.omaloc-supl-init": {
source: "iana"
},
"application/vnd.onepager": {
source: "iana"
},
"application/vnd.onepagertamp": {
source: "iana"
},
"application/vnd.onepagertamx": {
source: "iana"
},
"application/vnd.onepagertat": {
source: "iana"
},
"application/vnd.onepagertatp": {
source: "iana"
},
"application/vnd.onepagertatx": {
source: "iana"
},
"application/vnd.onvif.metadata": {
source: "iana"
},
"application/vnd.openblox.game+xml": {
source: "iana",
compressible: true,
extensions: ["obgx"]
},
"application/vnd.openblox.game-binary": {
source: "iana"
},
"application/vnd.openeye.oeb": {
source: "iana"
},
"application/vnd.openofficeorg.extension": {
source: "apache",
extensions: ["oxt"]
},
"application/vnd.openstreetmap.data+xml": {
source: "iana",
compressible: true,
extensions: ["osm"]
},
"application/vnd.opentimestamps.ots": {
source: "iana"
},
"application/vnd.openvpi.dspx+json": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.custom-properties+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.customxmlproperties+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.drawing+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.drawingml.chart+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.drawingml.chartshapes+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.drawingml.diagramcolors+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.drawingml.diagramdata+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.drawingml.diagramlayout+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.drawingml.diagramstyle+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.extended-properties+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.presentationml.commentauthors+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.presentationml.comments+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.presentationml.handoutmaster+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.presentationml.notesmaster+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.presentationml.notesslide+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.presentationml.presentation": {
source: "iana",
compressible: false,
extensions: ["pptx"]
},
"application/vnd.openxmlformats-officedocument.presentationml.presentation.main+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.presentationml.presprops+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.presentationml.slide": {
source: "iana",
extensions: ["sldx"]
},
"application/vnd.openxmlformats-officedocument.presentationml.slide+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.presentationml.slidelayout+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.presentationml.slidemaster+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.presentationml.slideshow": {
source: "iana",
extensions: ["ppsx"]
},
"application/vnd.openxmlformats-officedocument.presentationml.slideshow.main+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.presentationml.slideupdateinfo+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.presentationml.tablestyles+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.presentationml.tags+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.presentationml.template": {
source: "iana",
extensions: ["potx"]
},
"application/vnd.openxmlformats-officedocument.presentationml.template.main+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.presentationml.viewprops+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.spreadsheetml.calcchain+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.spreadsheetml.chartsheet+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.spreadsheetml.comments+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.spreadsheetml.connections+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.spreadsheetml.dialogsheet+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.spreadsheetml.externallink+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.spreadsheetml.pivotcachedefinition+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.spreadsheetml.pivotcacherecords+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.spreadsheetml.pivottable+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.spreadsheetml.querytable+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.spreadsheetml.revisionheaders+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.spreadsheetml.revisionlog+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.spreadsheetml.sharedstrings+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet": {
source: "iana",
compressible: false,
extensions: ["xlsx"]
},
"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.spreadsheetml.sheetmetadata+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.spreadsheetml.table+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.spreadsheetml.tablesinglecells+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.spreadsheetml.template": {
source: "iana",
extensions: ["xltx"]
},
"application/vnd.openxmlformats-officedocument.spreadsheetml.template.main+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.spreadsheetml.usernames+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.spreadsheetml.volatiledependencies+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.theme+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.themeoverride+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.vmldrawing": {
source: "iana"
},
"application/vnd.openxmlformats-officedocument.wordprocessingml.comments+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.wordprocessingml.document": {
source: "iana",
compressible: false,
extensions: ["docx"]
},
"application/vnd.openxmlformats-officedocument.wordprocessingml.document.glossary+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.wordprocessingml.document.main+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.wordprocessingml.endnotes+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.wordprocessingml.fonttable+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.wordprocessingml.footer+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.wordprocessingml.footnotes+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.wordprocessingml.numbering+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.wordprocessingml.settings+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.wordprocessingml.styles+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.wordprocessingml.template": {
source: "iana",
extensions: ["dotx"]
},
"application/vnd.openxmlformats-officedocument.wordprocessingml.template.main+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.wordprocessingml.websettings+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-package.core-properties+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-package.digital-signature-xmlsignature+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-package.relationships+xml": {
source: "iana",
compressible: true
},
"application/vnd.oracle.resource+json": {
source: "iana",
compressible: true
},
"application/vnd.orange.indata": {
source: "iana"
},
"application/vnd.osa.netdeploy": {
source: "iana"
},
"application/vnd.osgeo.mapguide.package": {
source: "iana",
extensions: ["mgp"]
},
"application/vnd.osgi.bundle": {
source: "iana"
},
"application/vnd.osgi.dp": {
source: "iana",
extensions: ["dp"]
},
"application/vnd.osgi.subsystem": {
source: "iana",
extensions: ["esa"]
},
"application/vnd.otps.ct-kip+xml": {
source: "iana",
compressible: true
},
"application/vnd.oxli.countgraph": {
source: "iana"
},
"application/vnd.pagerduty+json": {
source: "iana",
compressible: true
},
"application/vnd.palm": {
source: "iana",
extensions: ["pdb", "pqa", "oprc"]
},
"application/vnd.panoply": {
source: "iana"
},
"application/vnd.paos.xml": {
source: "iana"
},
"application/vnd.patentdive": {
source: "iana"
},
"application/vnd.patientecommsdoc": {
source: "iana"
},
"application/vnd.pawaafile": {
source: "iana",
extensions: ["paw"]
},
"application/vnd.pcos": {
source: "iana"
},
"application/vnd.pg.format": {
source: "iana",
extensions: ["str"]
},
"application/vnd.pg.osasli": {
source: "iana",
extensions: ["ei6"]
},
"application/vnd.piaccess.application-licence": {
source: "iana"
},
"application/vnd.picsel": {
source: "iana",
extensions: ["efif"]
},
"application/vnd.pmi.widget": {
source: "iana",
extensions: ["wg"]
},
"application/vnd.poc.group-advertisement+xml": {
source: "iana",
compressible: true
},
"application/vnd.pocketlearn": {
source: "iana",
extensions: ["plf"]
},
"application/vnd.powerbuilder6": {
source: "iana",
extensions: ["pbd"]
},
"application/vnd.powerbuilder6-s": {
source: "iana"
},
"application/vnd.powerbuilder7": {
source: "iana"
},
"application/vnd.powerbuilder7-s": {
source: "iana"
},
"application/vnd.powerbuilder75": {
source: "iana"
},
"application/vnd.powerbuilder75-s": {
source: "iana"
},
"application/vnd.preminet": {
source: "iana"
},
"application/vnd.previewsystems.box": {
source: "iana",
extensions: ["box"]
},
"application/vnd.procrate.brushset": {
extensions: ["brushset"]
},
"application/vnd.procreate.brush": {
extensions: ["brush"]
},
"application/vnd.procreate.dream": {
extensions: ["drm"]
},
"application/vnd.proteus.magazine": {
source: "iana",
extensions: ["mgz"]
},
"application/vnd.psfs": {
source: "iana"
},
"application/vnd.pt.mundusmundi": {
source: "iana"
},
"application/vnd.publishare-delta-tree": {
source: "iana",
extensions: ["qps"]
},
"application/vnd.pvi.ptid1": {
source: "iana",
extensions: ["ptid"]
},
"application/vnd.pwg-multiplexed": {
source: "iana"
},
"application/vnd.pwg-xhtml-print+xml": {
source: "iana",
compressible: true,
extensions: ["xhtm"]
},
"application/vnd.qualcomm.brew-app-res": {
source: "iana"
},
"application/vnd.quarantainenet": {
source: "iana"
},
"application/vnd.quark.quarkxpress": {
source: "iana",
extensions: ["qxd", "qxt", "qwd", "qwt", "qxl", "qxb"]
},
"application/vnd.quobject-quoxdocument": {
source: "iana"
},
"application/vnd.radisys.moml+xml": {
source: "iana",
compressible: true
},
"application/vnd.radisys.msml+xml": {
source: "iana",
compressible: true
},
"application/vnd.radisys.msml-audit+xml": {
source: "iana",
compressible: true
},
"application/vnd.radisys.msml-audit-conf+xml": {
source: "iana",
compressible: true
},
"application/vnd.radisys.msml-audit-conn+xml": {
source: "iana",
compressible: true
},
"application/vnd.radisys.msml-audit-dialog+xml": {
source: "iana",
compressible: true
},
"application/vnd.radisys.msml-audit-stream+xml": {
source: "iana",
compressible: true
},
"application/vnd.radisys.msml-conf+xml": {
source: "iana",
compressible: true
},
"application/vnd.radisys.msml-dialog+xml": {
source: "iana",
compressible: true
},
"application/vnd.radisys.msml-dialog-base+xml": {
source: "iana",
compressible: true
},
"application/vnd.radisys.msml-dialog-fax-detect+xml": {
source: "iana",
compressible: true
},
"application/vnd.radisys.msml-dialog-fax-sendrecv+xml": {
source: "iana",
compressible: true
},
"application/vnd.radisys.msml-dialog-group+xml": {
source: "iana",
compressible: true
},
"application/vnd.radisys.msml-dialog-speech+xml": {
source: "iana",
compressible: true
},
"application/vnd.radisys.msml-dialog-transform+xml": {
source: "iana",
compressible: true
},
"application/vnd.rainstor.data": {
source: "iana"
},
"application/vnd.rapid": {
source: "iana"
},
"application/vnd.rar": {
source: "iana",
extensions: ["rar"]
},
"application/vnd.realvnc.bed": {
source: "iana",
extensions: ["bed"]
},
"application/vnd.recordare.musicxml": {
source: "iana",
extensions: ["mxl"]
},
"application/vnd.recordare.musicxml+xml": {
source: "iana",
compressible: true,
extensions: ["musicxml"]
},
"application/vnd.relpipe": {
source: "iana"
},
"application/vnd.renlearn.rlprint": {
source: "iana"
},
"application/vnd.resilient.logic": {
source: "iana"
},
"application/vnd.restful+json": {
source: "iana",
compressible: true
},
"application/vnd.rig.cryptonote": {
source: "iana",
extensions: ["cryptonote"]
},
"application/vnd.rim.cod": {
source: "apache",
extensions: ["cod"]
},
"application/vnd.rn-realmedia": {
source: "apache",
extensions: ["rm"]
},
"application/vnd.rn-realmedia-vbr": {
source: "apache",
extensions: ["rmvb"]
},
"application/vnd.route66.link66+xml": {
source: "iana",
compressible: true,
extensions: ["link66"]
},
"application/vnd.rs-274x": {
source: "iana"
},
"application/vnd.ruckus.download": {
source: "iana"
},
"application/vnd.s3sms": {
source: "iana"
},
"application/vnd.sailingtracker.track": {
source: "iana",
extensions: ["st"]
},
"application/vnd.sar": {
source: "iana"
},
"application/vnd.sbm.cid": {
source: "iana"
},
"application/vnd.sbm.mid2": {
source: "iana"
},
"application/vnd.scribus": {
source: "iana"
},
"application/vnd.sealed.3df": {
source: "iana"
},
"application/vnd.sealed.csf": {
source: "iana"
},
"application/vnd.sealed.doc": {
source: "iana"
},
"application/vnd.sealed.eml": {
source: "iana"
},
"application/vnd.sealed.mht": {
source: "iana"
},
"application/vnd.sealed.net": {
source: "iana"
},
"application/vnd.sealed.ppt": {
source: "iana"
},
"application/vnd.sealed.tiff": {
source: "iana"
},
"application/vnd.sealed.xls": {
source: "iana"
},
"application/vnd.sealedmedia.softseal.html": {
source: "iana"
},
"application/vnd.sealedmedia.softseal.pdf": {
source: "iana"
},
"application/vnd.seemail": {
source: "iana",
extensions: ["see"]
},
"application/vnd.seis+json": {
source: "iana",
compressible: true
},
"application/vnd.sema": {
source: "iana",
extensions: ["sema"]
},
"application/vnd.semd": {
source: "iana",
extensions: ["semd"]
},
"application/vnd.semf": {
source: "iana",
extensions: ["semf"]
},
"application/vnd.shade-save-file": {
source: "iana"
},
"application/vnd.shana.informed.formdata": {
source: "iana",
extensions: ["ifm"]
},
"application/vnd.shana.informed.formtemplate": {
source: "iana",
extensions: ["itp"]
},
"application/vnd.shana.informed.interchange": {
source: "iana",
extensions: ["iif"]
},
"application/vnd.shana.informed.package": {
source: "iana",
extensions: ["ipk"]
},
"application/vnd.shootproof+json": {
source: "iana",
compressible: true
},
"application/vnd.shopkick+json": {
source: "iana",
compressible: true
},
"application/vnd.shp": {
source: "iana"
},
"application/vnd.shx": {
source: "iana"
},
"application/vnd.sigrok.session": {
source: "iana"
},
"application/vnd.simtech-mindmapper": {
source: "iana",
extensions: ["twd", "twds"]
},
"application/vnd.siren+json": {
source: "iana",
compressible: true
},
"application/vnd.sketchometry": {
source: "iana"
},
"application/vnd.smaf": {
source: "iana",
extensions: ["mmf"]
},
"application/vnd.smart.notebook": {
source: "iana"
},
"application/vnd.smart.teacher": {
source: "iana",
extensions: ["teacher"]
},
"application/vnd.smintio.portals.archive": {
source: "iana"
},
"application/vnd.snesdev-page-table": {
source: "iana"
},
"application/vnd.software602.filler.form+xml": {
source: "iana",
compressible: true,
extensions: ["fo"]
},
"application/vnd.software602.filler.form-xml-zip": {
source: "iana"
},
"application/vnd.solent.sdkm+xml": {
source: "iana",
compressible: true,
extensions: ["sdkm", "sdkd"]
},
"application/vnd.spotfire.dxp": {
source: "iana",
extensions: ["dxp"]
},
"application/vnd.spotfire.sfs": {
source: "iana",
extensions: ["sfs"]
},
"application/vnd.sqlite3": {
source: "iana"
},
"application/vnd.sss-cod": {
source: "iana"
},
"application/vnd.sss-dtf": {
source: "iana"
},
"application/vnd.sss-ntf": {
source: "iana"
},
"application/vnd.stardivision.calc": {
source: "apache",
extensions: ["sdc"]
},
"application/vnd.stardivision.draw": {
source: "apache",
extensions: ["sda"]
},
"application/vnd.stardivision.impress": {
source: "apache",
extensions: ["sdd"]
},
"application/vnd.stardivision.math": {
source: "apache",
extensions: ["smf"]
},
"application/vnd.stardivision.writer": {
source: "apache",
extensions: ["sdw", "vor"]
},
"application/vnd.stardivision.writer-global": {
source: "apache",
extensions: ["sgl"]
},
"application/vnd.stepmania.package": {
source: "iana",
extensions: ["smzip"]
},
"application/vnd.stepmania.stepchart": {
source: "iana",
extensions: ["sm"]
},
"application/vnd.street-stream": {
source: "iana"
},
"application/vnd.sun.wadl+xml": {
source: "iana",
compressible: true,
extensions: ["wadl"]
},
"application/vnd.sun.xml.calc": {
source: "apache",
extensions: ["sxc"]
},
"application/vnd.sun.xml.calc.template": {
source: "apache",
extensions: ["stc"]
},
"application/vnd.sun.xml.draw": {
source: "apache",
extensions: ["sxd"]
},
"application/vnd.sun.xml.draw.template": {
source: "apache",
extensions: ["std"]
},
"application/vnd.sun.xml.impress": {
source: "apache",
extensions: ["sxi"]
},
"application/vnd.sun.xml.impress.template": {
source: "apache",
extensions: ["sti"]
},
"application/vnd.sun.xml.math": {
source: "apache",
extensions: ["sxm"]
},
"application/vnd.sun.xml.writer": {
source: "apache",
extensions: ["sxw"]
},
"application/vnd.sun.xml.writer.global": {
source: "apache",
extensions: ["sxg"]
},
"application/vnd.sun.xml.writer.template": {
source: "apache",
extensions: ["stw"]
},
"application/vnd.sus-calendar": {
source: "iana",
extensions: ["sus", "susp"]
},
"application/vnd.svd": {
source: "iana",
extensions: ["svd"]
},
"application/vnd.swiftview-ics": {
source: "iana"
},
"application/vnd.sybyl.mol2": {
source: "iana"
},
"application/vnd.sycle+xml": {
source: "iana",
compressible: true
},
"application/vnd.syft+json": {
source: "iana",
compressible: true
},
"application/vnd.symbian.install": {
source: "apache",
extensions: ["sis", "sisx"]
},
"application/vnd.syncml+xml": {
source: "iana",
charset: "UTF-8",
compressible: true,
extensions: ["xsm"]
},
"application/vnd.syncml.dm+wbxml": {
source: "iana",
charset: "UTF-8",
extensions: ["bdm"]
},
"application/vnd.syncml.dm+xml": {
source: "iana",
charset: "UTF-8",
compressible: true,
extensions: ["xdm"]
},
"application/vnd.syncml.dm.notification": {
source: "iana"
},
"application/vnd.syncml.dmddf+wbxml": {
source: "iana"
},
"application/vnd.syncml.dmddf+xml": {
source: "iana",
charset: "UTF-8",
compressible: true,
extensions: ["ddf"]
},
"application/vnd.syncml.dmtnds+wbxml": {
source: "iana"
},
"application/vnd.syncml.dmtnds+xml": {
source: "iana",
charset: "UTF-8",
compressible: true
},
"application/vnd.syncml.ds.notification": {
source: "iana"
},
"application/vnd.tableschema+json": {
source: "iana",
compressible: true
},
"application/vnd.tao.intent-module-archive": {
source: "iana",
extensions: ["tao"]
},
"application/vnd.tcpdump.pcap": {
source: "iana",
extensions: ["pcap", "cap", "dmp"]
},
"application/vnd.think-cell.ppttc+json": {
source: "iana",
compressible: true
},
"application/vnd.tmd.mediaflex.api+xml": {
source: "iana",
compressible: true
},
"application/vnd.tml": {
source: "iana"
},
"application/vnd.tmobile-livetv": {
source: "iana",
extensions: ["tmo"]
},
"application/vnd.tri.onesource": {
source: "iana"
},
"application/vnd.trid.tpt": {
source: "iana",
extensions: ["tpt"]
},
"application/vnd.triscape.mxs": {
source: "iana",
extensions: ["mxs"]
},
"application/vnd.trueapp": {
source: "iana",
extensions: ["tra"]
},
"application/vnd.truedoc": {
source: "iana"
},
"application/vnd.ubisoft.webplayer": {
source: "iana"
},
"application/vnd.ufdl": {
source: "iana",
extensions: ["ufd", "ufdl"]
},
"application/vnd.uic.osdm+json": {
source: "iana",
compressible: true
},
"application/vnd.uiq.theme": {
source: "iana",
extensions: ["utz"]
},
"application/vnd.umajin": {
source: "iana",
extensions: ["umj"]
},
"application/vnd.unity": {
source: "iana",
extensions: ["unityweb"]
},
"application/vnd.uoml+xml": {
source: "iana",
compressible: true,
extensions: ["uoml", "uo"]
},
"application/vnd.uplanet.alert": {
source: "iana"
},
"application/vnd.uplanet.alert-wbxml": {
source: "iana"
},
"application/vnd.uplanet.bearer-choice": {
source: "iana"
},
"application/vnd.uplanet.bearer-choice-wbxml": {
source: "iana"
},
"application/vnd.uplanet.cacheop": {
source: "iana"
},
"application/vnd.uplanet.cacheop-wbxml": {
source: "iana"
},
"application/vnd.uplanet.channel": {
source: "iana"
},
"application/vnd.uplanet.channel-wbxml": {
source: "iana"
},
"application/vnd.uplanet.list": {
source: "iana"
},
"application/vnd.uplanet.list-wbxml": {
source: "iana"
},
"application/vnd.uplanet.listcmd": {
source: "iana"
},
"application/vnd.uplanet.listcmd-wbxml": {
source: "iana"
},
"application/vnd.uplanet.signal": {
source: "iana"
},
"application/vnd.uri-map": {
source: "iana"
},
"application/vnd.valve.source.material": {
source: "iana"
},
"application/vnd.vcx": {
source: "iana",
extensions: ["vcx"]
},
"application/vnd.vd-study": {
source: "iana"
},
"application/vnd.vectorworks": {
source: "iana"
},
"application/vnd.vel+json": {
source: "iana",
compressible: true
},
"application/vnd.veraison.tsm-report+cbor": {
source: "iana"
},
"application/vnd.veraison.tsm-report+json": {
source: "iana",
compressible: true
},
"application/vnd.verimatrix.vcas": {
source: "iana"
},
"application/vnd.veritone.aion+json": {
source: "iana",
compressible: true
},
"application/vnd.veryant.thin": {
source: "iana"
},
"application/vnd.ves.encrypted": {
source: "iana"
},
"application/vnd.vidsoft.vidconference": {
source: "iana"
},
"application/vnd.visio": {
source: "iana",
extensions: ["vsd", "vst", "vss", "vsw", "vsdx", "vtx"]
},
"application/vnd.visionary": {
source: "iana",
extensions: ["vis"]
},
"application/vnd.vividence.scriptfile": {
source: "iana"
},
"application/vnd.vocalshaper.vsp4": {
source: "iana"
},
"application/vnd.vsf": {
source: "iana",
extensions: ["vsf"]
},
"application/vnd.wap.sic": {
source: "iana"
},
"application/vnd.wap.slc": {
source: "iana"
},
"application/vnd.wap.wbxml": {
source: "iana",
charset: "UTF-8",
extensions: ["wbxml"]
},
"application/vnd.wap.wmlc": {
source: "iana",
extensions: ["wmlc"]
},
"application/vnd.wap.wmlscriptc": {
source: "iana",
extensions: ["wmlsc"]
},
"application/vnd.wasmflow.wafl": {
source: "iana"
},
"application/vnd.webturbo": {
source: "iana",
extensions: ["wtb"]
},
"application/vnd.wfa.dpp": {
source: "iana"
},
"application/vnd.wfa.p2p": {
source: "iana"
},
"application/vnd.wfa.wsc": {
source: "iana"
},
"application/vnd.windows.devicepairing": {
source: "iana"
},
"application/vnd.wmc": {
source: "iana"
},
"application/vnd.wmf.bootstrap": {
source: "iana"
},
"application/vnd.wolfram.mathematica": {
source: "iana"
},
"application/vnd.wolfram.mathematica.package": {
source: "iana"
},
"application/vnd.wolfram.player": {
source: "iana",
extensions: ["nbp"]
},
"application/vnd.wordlift": {
source: "iana"
},
"application/vnd.wordperfect": {
source: "iana",
extensions: ["wpd"]
},
"application/vnd.wqd": {
source: "iana",
extensions: ["wqd"]
},
"application/vnd.wrq-hp3000-labelled": {
source: "iana"
},
"application/vnd.wt.stf": {
source: "iana",
extensions: ["stf"]
},
"application/vnd.wv.csp+wbxml": {
source: "iana"
},
"application/vnd.wv.csp+xml": {
source: "iana",
compressible: true
},
"application/vnd.wv.ssp+xml": {
source: "iana",
compressible: true
},
"application/vnd.xacml+json": {
source: "iana",
compressible: true
},
"application/vnd.xara": {
source: "iana",
extensions: ["xar"]
},
"application/vnd.xarin.cpj": {
source: "iana"
},
"application/vnd.xecrets-encrypted": {
source: "iana"
},
"application/vnd.xfdl": {
source: "iana",
extensions: ["xfdl"]
},
"application/vnd.xfdl.webform": {
source: "iana"
},
"application/vnd.xmi+xml": {
source: "iana",
compressible: true
},
"application/vnd.xmpie.cpkg": {
source: "iana"
},
"application/vnd.xmpie.dpkg": {
source: "iana"
},
"application/vnd.xmpie.plan": {
source: "iana"
},
"application/vnd.xmpie.ppkg": {
source: "iana"
},
"application/vnd.xmpie.xlim": {
source: "iana"
},
"application/vnd.yamaha.hv-dic": {
source: "iana",
extensions: ["hvd"]
},
"application/vnd.yamaha.hv-script": {
source: "iana",
extensions: ["hvs"]
},
"application/vnd.yamaha.hv-voice": {
source: "iana",
extensions: ["hvp"]
},
"application/vnd.yamaha.openscoreformat": {
source: "iana",
extensions: ["osf"]
},
"application/vnd.yamaha.openscoreformat.osfpvg+xml": {
source: "iana",
compressible: true,
extensions: ["osfpvg"]
},
"application/vnd.yamaha.remote-setup": {
source: "iana"
},
"application/vnd.yamaha.smaf-audio": {
source: "iana",
extensions: ["saf"]
},
"application/vnd.yamaha.smaf-phrase": {
source: "iana",
extensions: ["spf"]
},
"application/vnd.yamaha.through-ngn": {
source: "iana"
},
"application/vnd.yamaha.tunnel-udpencap": {
source: "iana"
},
"application/vnd.yaoweme": {
source: "iana"
},
"application/vnd.yellowriver-custom-menu": {
source: "iana",
extensions: ["cmp"]
},
"application/vnd.zul": {
source: "iana",
extensions: ["zir", "zirz"]
},
"application/vnd.zzazz.deck+xml": {
source: "iana",
compressible: true,
extensions: ["zaz"]
},
"application/voicexml+xml": {
source: "iana",
compressible: true,
extensions: ["vxml"]
},
"application/voucher-cms+json": {
source: "iana",
compressible: true
},
"application/voucher-jws+json": {
source: "iana",
compressible: true
},
"application/vp": {
source: "iana"
},
"application/vp+cose": {
source: "iana"
},
"application/vp+jwt": {
source: "iana"
},
"application/vq-rtcpxr": {
source: "iana"
},
"application/wasm": {
source: "iana",
compressible: true,
extensions: ["wasm"]
},
"application/watcherinfo+xml": {
source: "iana",
compressible: true,
extensions: ["wif"]
},
"application/webpush-options+json": {
source: "iana",
compressible: true
},
"application/whoispp-query": {
source: "iana"
},
"application/whoispp-response": {
source: "iana"
},
"application/widget": {
source: "iana",
extensions: ["wgt"]
},
"application/winhlp": {
source: "apache",
extensions: ["hlp"]
},
"application/wita": {
source: "iana"
},
"application/wordperfect5.1": {
source: "iana"
},
"application/wsdl+xml": {
source: "iana",
compressible: true,
extensions: ["wsdl"]
},
"application/wspolicy+xml": {
source: "iana",
compressible: true,
extensions: ["wspolicy"]
},
"application/x-7z-compressed": {
source: "apache",
compressible: false,
extensions: ["7z"]
},
"application/x-abiword": {
source: "apache",
extensions: ["abw"]
},
"application/x-ace-compressed": {
source: "apache",
extensions: ["ace"]
},
"application/x-amf": {
source: "apache"
},
"application/x-apple-diskimage": {
source: "apache",
extensions: ["dmg"]
},
"application/x-arj": {
compressible: false,
extensions: ["arj"]
},
"application/x-authorware-bin": {
source: "apache",
extensions: ["aab", "x32", "u32", "vox"]
},
"application/x-authorware-map": {
source: "apache",
extensions: ["aam"]
},
"application/x-authorware-seg": {
source: "apache",
extensions: ["aas"]
},
"application/x-bcpio": {
source: "apache",
extensions: ["bcpio"]
},
"application/x-bdoc": {
compressible: false,
extensions: ["bdoc"]
},
"application/x-bittorrent": {
source: "apache",
extensions: ["torrent"]
},
"application/x-blender": {
extensions: ["blend"]
},
"application/x-blorb": {
source: "apache",
extensions: ["blb", "blorb"]
},
"application/x-bzip": {
source: "apache",
compressible: false,
extensions: ["bz"]
},
"application/x-bzip2": {
source: "apache",
compressible: false,
extensions: ["bz2", "boz"]
},
"application/x-cbr": {
source: "apache",
extensions: ["cbr", "cba", "cbt", "cbz", "cb7"]
},
"application/x-cdlink": {
source: "apache",
extensions: ["vcd"]
},
"application/x-cfs-compressed": {
source: "apache",
extensions: ["cfs"]
},
"application/x-chat": {
source: "apache",
extensions: ["chat"]
},
"application/x-chess-pgn": {
source: "apache",
extensions: ["pgn"]
},
"application/x-chrome-extension": {
extensions: ["crx"]
},
"application/x-cocoa": {
source: "nginx",
extensions: ["cco"]
},
"application/x-compress": {
source: "apache"
},
"application/x-compressed": {
extensions: ["rar"]
},
"application/x-conference": {
source: "apache",
extensions: ["nsc"]
},
"application/x-cpio": {
source: "apache",
extensions: ["cpio"]
},
"application/x-csh": {
source: "apache",
extensions: ["csh"]
},
"application/x-deb": {
compressible: false
},
"application/x-debian-package": {
source: "apache",
extensions: ["deb", "udeb"]
},
"application/x-dgc-compressed": {
source: "apache",
extensions: ["dgc"]
},
"application/x-director": {
source: "apache",
extensions: ["dir", "dcr", "dxr", "cst", "cct", "cxt", "w3d", "fgd", "swa"]
},
"application/x-doom": {
source: "apache",
extensions: ["wad"]
},
"application/x-dtbncx+xml": {
source: "apache",
compressible: true,
extensions: ["ncx"]
},
"application/x-dtbook+xml": {
source: "apache",
compressible: true,
extensions: ["dtb"]
},
"application/x-dtbresource+xml": {
source: "apache",
compressible: true,
extensions: ["res"]
},
"application/x-dvi": {
source: "apache",
compressible: false,
extensions: ["dvi"]
},
"application/x-envoy": {
source: "apache",
extensions: ["evy"]
},
"application/x-eva": {
source: "apache",
extensions: ["eva"]
},
"application/x-font-bdf": {
source: "apache",
extensions: ["bdf"]
},
"application/x-font-dos": {
source: "apache"
},
"application/x-font-framemaker": {
source: "apache"
},
"application/x-font-ghostscript": {
source: "apache",
extensions: ["gsf"]
},
"application/x-font-libgrx": {
source: "apache"
},
"application/x-font-linux-psf": {
source: "apache",
extensions: ["psf"]
},
"application/x-font-pcf": {
source: "apache",
extensions: ["pcf"]
},
"application/x-font-snf": {
source: "apache",
extensions: ["snf"]
},
"application/x-font-speedo": {
source: "apache"
},
"application/x-font-sunos-news": {
source: "apache"
},
"application/x-font-type1": {
source: "apache",
extensions: ["pfa", "pfb", "pfm", "afm"]
},
"application/x-font-vfont": {
source: "apache"
},
"application/x-freearc": {
source: "apache",
extensions: ["arc"]
},
"application/x-futuresplash": {
source: "apache",
extensions: ["spl"]
},
"application/x-gca-compressed": {
source: "apache",
extensions: ["gca"]
},
"application/x-glulx": {
source: "apache",
extensions: ["ulx"]
},
"application/x-gnumeric": {
source: "apache",
extensions: ["gnumeric"]
},
"application/x-gramps-xml": {
source: "apache",
extensions: ["gramps"]
},
"application/x-gtar": {
source: "apache",
extensions: ["gtar"]
},
"application/x-gzip": {
source: "apache"
},
"application/x-hdf": {
source: "apache",
extensions: ["hdf"]
},
"application/x-httpd-php": {
compressible: true,
extensions: ["php"]
},
"application/x-install-instructions": {
source: "apache",
extensions: ["install"]
},
"application/x-ipynb+json": {
compressible: true,
extensions: ["ipynb"]
},
"application/x-iso9660-image": {
source: "apache",
extensions: ["iso"]
},
"application/x-iwork-keynote-sffkey": {
extensions: ["key"]
},
"application/x-iwork-numbers-sffnumbers": {
extensions: ["numbers"]
},
"application/x-iwork-pages-sffpages": {
extensions: ["pages"]
},
"application/x-java-archive-diff": {
source: "nginx",
extensions: ["jardiff"]
},
"application/x-java-jnlp-file": {
source: "apache",
compressible: false,
extensions: ["jnlp"]
},
"application/x-javascript": {
compressible: true
},
"application/x-keepass2": {
extensions: ["kdbx"]
},
"application/x-latex": {
source: "apache",
compressible: false,
extensions: ["latex"]
},
"application/x-lua-bytecode": {
extensions: ["luac"]
},
"application/x-lzh-compressed": {
source: "apache",
extensions: ["lzh", "lha"]
},
"application/x-makeself": {
source: "nginx",
extensions: ["run"]
},
"application/x-mie": {
source: "apache",
extensions: ["mie"]
},
"application/x-mobipocket-ebook": {
source: "apache",
extensions: ["prc", "mobi"]
},
"application/x-mpegurl": {
compressible: false
},
"application/x-ms-application": {
source: "apache",
extensions: ["application"]
},
"application/x-ms-shortcut": {
source: "apache",
extensions: ["lnk"]
},
"application/x-ms-wmd": {
source: "apache",
extensions: ["wmd"]
},
"application/x-ms-wmz": {
source: "apache",
extensions: ["wmz"]
},
"application/x-ms-xbap": {
source: "apache",
extensions: ["xbap"]
},
"application/x-msaccess": {
source: "apache",
extensions: ["mdb"]
},
"application/x-msbinder": {
source: "apache",
extensions: ["obd"]
},
"application/x-mscardfile": {
source: "apache",
extensions: ["crd"]
},
"application/x-msclip": {
source: "apache",
extensions: ["clp"]
},
"application/x-msdos-program": {
extensions: ["exe"]
},
"application/x-msdownload": {
source: "apache",
extensions: ["exe", "dll", "com", "bat", "msi"]
},
"application/x-msmediaview": {
source: "apache",
extensions: ["mvb", "m13", "m14"]
},
"application/x-msmetafile": {
source: "apache",
extensions: ["wmf", "wmz", "emf", "emz"]
},
"application/x-msmoney": {
source: "apache",
extensions: ["mny"]
},
"application/x-mspublisher": {
source: "apache",
extensions: ["pub"]
},
"application/x-msschedule": {
source: "apache",
extensions: ["scd"]
},
"application/x-msterminal": {
source: "apache",
extensions: ["trm"]
},
"application/x-mswrite": {
source: "apache",
extensions: ["wri"]
},
"application/x-netcdf": {
source: "apache",
extensions: ["nc", "cdf"]
},
"application/x-ns-proxy-autoconfig": {
compressible: true,
extensions: ["pac"]
},
"application/x-nzb": {
source: "apache",
extensions: ["nzb"]
},
"application/x-perl": {
source: "nginx",
extensions: ["pl", "pm"]
},
"application/x-pilot": {
source: "nginx",
extensions: ["prc", "pdb"]
},
"application/x-pkcs12": {
source: "apache",
compressible: false,
extensions: ["p12", "pfx"]
},
"application/x-pkcs7-certificates": {
source: "apache",
extensions: ["p7b", "spc"]
},
"application/x-pkcs7-certreqresp": {
source: "apache",
extensions: ["p7r"]
},
"application/x-pki-message": {
source: "iana"
},
"application/x-rar-compressed": {
source: "apache",
compressible: false,
extensions: ["rar"]
},
"application/x-redhat-package-manager": {
source: "nginx",
extensions: ["rpm"]
},
"application/x-research-info-systems": {
source: "apache",
extensions: ["ris"]
},
"application/x-sea": {
source: "nginx",
extensions: ["sea"]
},
"application/x-sh": {
source: "apache",
compressible: true,
extensions: ["sh"]
},
"application/x-shar": {
source: "apache",
extensions: ["shar"]
},
"application/x-shockwave-flash": {
source: "apache",
compressible: false,
extensions: ["swf"]
},
"application/x-silverlight-app": {
source: "apache",
extensions: ["xap"]
},
"application/x-sql": {
source: "apache",
extensions: ["sql"]
},
"application/x-stuffit": {
source: "apache",
compressible: false,
extensions: ["sit"]
},
"application/x-stuffitx": {
source: "apache",
extensions: ["sitx"]
},
"application/x-subrip": {
source: "apache",
extensions: ["srt"]
},
"application/x-sv4cpio": {
source: "apache",
extensions: ["sv4cpio"]
},
"application/x-sv4crc": {
source: "apache",
extensions: ["sv4crc"]
},
"application/x-t3vm-image": {
source: "apache",
extensions: ["t3"]
},
"application/x-tads": {
source: "apache",
extensions: ["gam"]
},
"application/x-tar": {
source: "apache",
compressible: true,
extensions: ["tar"]
},
"application/x-tcl": {
source: "apache",
extensions: ["tcl", "tk"]
},
"application/x-tex": {
source: "apache",
extensions: ["tex"]
},
"application/x-tex-tfm": {
source: "apache",
extensions: ["tfm"]
},
"application/x-texinfo": {
source: "apache",
extensions: ["texinfo", "texi"]
},
"application/x-tgif": {
source: "apache",
extensions: ["obj"]
},
"application/x-ustar": {
source: "apache",
extensions: ["ustar"]
},
"application/x-virtualbox-hdd": {
compressible: true,
extensions: ["hdd"]
},
"application/x-virtualbox-ova": {
compressible: true,
extensions: ["ova"]
},
"application/x-virtualbox-ovf": {
compressible: true,
extensions: ["ovf"]
},
"application/x-virtualbox-vbox": {
compressible: true,
extensions: ["vbox"]
},
"application/x-virtualbox-vbox-extpack": {
compressible: false,
extensions: ["vbox-extpack"]
},
"application/x-virtualbox-vdi": {
compressible: true,
extensions: ["vdi"]
},
"application/x-virtualbox-vhd": {
compressible: true,
extensions: ["vhd"]
},
"application/x-virtualbox-vmdk": {
compressible: true,
extensions: ["vmdk"]
},
"application/x-wais-source": {
source: "apache",
extensions: ["src"]
},
"application/x-web-app-manifest+json": {
compressible: true,
extensions: ["webapp"]
},
"application/x-www-form-urlencoded": {
source: "iana",
compressible: true
},
"application/x-x509-ca-cert": {
source: "iana",
extensions: ["der", "crt", "pem"]
},
"application/x-x509-ca-ra-cert": {
source: "iana"
},
"application/x-x509-next-ca-cert": {
source: "iana"
},
"application/x-xfig": {
source: "apache",
extensions: ["fig"]
},
"application/x-xliff+xml": {
source: "apache",
compressible: true,
extensions: ["xlf"]
},
"application/x-xpinstall": {
source: "apache",
compressible: false,
extensions: ["xpi"]
},
"application/x-xz": {
source: "apache",
extensions: ["xz"]
},
"application/x-zip-compressed": {
extensions: ["zip"]
},
"application/x-zmachine": {
source: "apache",
extensions: ["z1", "z2", "z3", "z4", "z5", "z6", "z7", "z8"]
},
"application/x400-bp": {
source: "iana"
},
"application/xacml+xml": {
source: "iana",
compressible: true
},
"application/xaml+xml": {
source: "apache",
compressible: true,
extensions: ["xaml"]
},
"application/xcap-att+xml": {
source: "iana",
compressible: true,
extensions: ["xav"]
},
"application/xcap-caps+xml": {
source: "iana",
compressible: true,
extensions: ["xca"]
},
"application/xcap-diff+xml": {
source: "iana",
compressible: true,
extensions: ["xdf"]
},
"application/xcap-el+xml": {
source: "iana",
compressible: true,
extensions: ["xel"]
},
"application/xcap-error+xml": {
source: "iana",
compressible: true
},
"application/xcap-ns+xml": {
source: "iana",
compressible: true,
extensions: ["xns"]
},
"application/xcon-conference-info+xml": {
source: "iana",
compressible: true
},
"application/xcon-conference-info-diff+xml": {
source: "iana",
compressible: true
},
"application/xenc+xml": {
source: "iana",
compressible: true,
extensions: ["xenc"]
},
"application/xfdf": {
source: "iana",
extensions: ["xfdf"]
},
"application/xhtml+xml": {
source: "iana",
compressible: true,
extensions: ["xhtml", "xht"]
},
"application/xhtml-voice+xml": {
source: "apache",
compressible: true
},
"application/xliff+xml": {
source: "iana",
compressible: true,
extensions: ["xlf"]
},
"application/xml": {
source: "iana",
compressible: true,
extensions: ["xml", "xsl", "xsd", "rng"]
},
"application/xml-dtd": {
source: "iana",
compressible: true,
extensions: ["dtd"]
},
"application/xml-external-parsed-entity": {
source: "iana"
},
"application/xml-patch+xml": {
source: "iana",
compressible: true
},
"application/xmpp+xml": {
source: "iana",
compressible: true
},
"application/xop+xml": {
source: "iana",
compressible: true,
extensions: ["xop"]
},
"application/xproc+xml": {
source: "apache",
compressible: true,
extensions: ["xpl"]
},
"application/xslt+xml": {
source: "iana",
compressible: true,
extensions: ["xsl", "xslt"]
},
"application/xspf+xml": {
source: "apache",
compressible: true,
extensions: ["xspf"]
},
"application/xv+xml": {
source: "iana",
compressible: true,
extensions: ["mxml", "xhvml", "xvml", "xvm"]
},
"application/yaml": {
source: "iana"
},
"application/yang": {
source: "iana",
extensions: ["yang"]
},
"application/yang-data+cbor": {
source: "iana"
},
"application/yang-data+json": {
source: "iana",
compressible: true
},
"application/yang-data+xml": {
source: "iana",
compressible: true
},
"application/yang-patch+json": {
source: "iana",
compressible: true
},
"application/yang-patch+xml": {
source: "iana",
compressible: true
},
"application/yang-sid+json": {
source: "iana",
compressible: true
},
"application/yin+xml": {
source: "iana",
compressible: true,
extensions: ["yin"]
},
"application/zip": {
source: "iana",
compressible: false,
extensions: ["zip"]
},
"application/zip+dotlottie": {
extensions: ["lottie"]
},
"application/zlib": {
source: "iana"
},
"application/zstd": {
source: "iana"
},
"audio/1d-interleaved-parityfec": {
source: "iana"
},
"audio/32kadpcm": {
source: "iana"
},
"audio/3gpp": {
source: "iana",
compressible: false,
extensions: ["3gpp"]
},
"audio/3gpp2": {
source: "iana"
},
"audio/aac": {
source: "iana",
extensions: ["adts", "aac"]
},
"audio/ac3": {
source: "iana"
},
"audio/adpcm": {
source: "apache",
extensions: ["adp"]
},
"audio/amr": {
source: "iana",
extensions: ["amr"]
},
"audio/amr-wb": {
source: "iana"
},
"audio/amr-wb+": {
source: "iana"
},
"audio/aptx": {
source: "iana"
},
"audio/asc": {
source: "iana"
},
"audio/atrac-advanced-lossless": {
source: "iana"
},
"audio/atrac-x": {
source: "iana"
},
"audio/atrac3": {
source: "iana"
},
"audio/basic": {
source: "iana",
compressible: false,
extensions: ["au", "snd"]
},
"audio/bv16": {
source: "iana"
},
"audio/bv32": {
source: "iana"
},
"audio/clearmode": {
source: "iana"
},
"audio/cn": {
source: "iana"
},
"audio/dat12": {
source: "iana"
},
"audio/dls": {
source: "iana"
},
"audio/dsr-es201108": {
source: "iana"
},
"audio/dsr-es202050": {
source: "iana"
},
"audio/dsr-es202211": {
source: "iana"
},
"audio/dsr-es202212": {
source: "iana"
},
"audio/dv": {
source: "iana"
},
"audio/dvi4": {
source: "iana"
},
"audio/eac3": {
source: "iana"
},
"audio/encaprtp": {
source: "iana"
},
"audio/evrc": {
source: "iana"
},
"audio/evrc-qcp": {
source: "iana"
},
"audio/evrc0": {
source: "iana"
},
"audio/evrc1": {
source: "iana"
},
"audio/evrcb": {
source: "iana"
},
"audio/evrcb0": {
source: "iana"
},
"audio/evrcb1": {
source: "iana"
},
"audio/evrcnw": {
source: "iana"
},
"audio/evrcnw0": {
source: "iana"
},
"audio/evrcnw1": {
source: "iana"
},
"audio/evrcwb": {
source: "iana"
},
"audio/evrcwb0": {
source: "iana"
},
"audio/evrcwb1": {
source: "iana"
},
"audio/evs": {
source: "iana"
},
"audio/flac": {
source: "iana"
},
"audio/flexfec": {
source: "iana"
},
"audio/fwdred": {
source: "iana"
},
"audio/g711-0": {
source: "iana"
},
"audio/g719": {
source: "iana"
},
"audio/g722": {
source: "iana"
},
"audio/g7221": {
source: "iana"
},
"audio/g723": {
source: "iana"
},
"audio/g726-16": {
source: "iana"
},
"audio/g726-24": {
source: "iana"
},
"audio/g726-32": {
source: "iana"
},
"audio/g726-40": {
source: "iana"
},
"audio/g728": {
source: "iana"
},
"audio/g729": {
source: "iana"
},
"audio/g7291": {
source: "iana"
},
"audio/g729d": {
source: "iana"
},
"audio/g729e": {
source: "iana"
},
"audio/gsm": {
source: "iana"
},
"audio/gsm-efr": {
source: "iana"
},
"audio/gsm-hr-08": {
source: "iana"
},
"audio/ilbc": {
source: "iana"
},
"audio/ip-mr_v2.5": {
source: "iana"
},
"audio/isac": {
source: "apache"
},
"audio/l16": {
source: "iana"
},
"audio/l20": {
source: "iana"
},
"audio/l24": {
source: "iana",
compressible: false
},
"audio/l8": {
source: "iana"
},
"audio/lpc": {
source: "iana"
},
"audio/matroska": {
source: "iana"
},
"audio/melp": {
source: "iana"
},
"audio/melp1200": {
source: "iana"
},
"audio/melp2400": {
source: "iana"
},
"audio/melp600": {
source: "iana"
},
"audio/mhas": {
source: "iana"
},
"audio/midi": {
source: "apache",
extensions: ["mid", "midi", "kar", "rmi"]
},
"audio/midi-clip": {
source: "iana"
},
"audio/mobile-xmf": {
source: "iana",
extensions: ["mxmf"]
},
"audio/mp3": {
compressible: false,
extensions: ["mp3"]
},
"audio/mp4": {
source: "iana",
compressible: false,
extensions: ["m4a", "mp4a", "m4b"]
},
"audio/mp4a-latm": {
source: "iana"
},
"audio/mpa": {
source: "iana"
},
"audio/mpa-robust": {
source: "iana"
},
"audio/mpeg": {
source: "iana",
compressible: false,
extensions: ["mpga", "mp2", "mp2a", "mp3", "m2a", "m3a"]
},
"audio/mpeg4-generic": {
source: "iana"
},
"audio/musepack": {
source: "apache"
},
"audio/ogg": {
source: "iana",
compressible: false,
extensions: ["oga", "ogg", "spx", "opus"]
},
"audio/opus": {
source: "iana"
},
"audio/parityfec": {
source: "iana"
},
"audio/pcma": {
source: "iana"
},
"audio/pcma-wb": {
source: "iana"
},
"audio/pcmu": {
source: "iana"
},
"audio/pcmu-wb": {
source: "iana"
},
"audio/prs.sid": {
source: "iana"
},
"audio/qcelp": {
source: "iana"
},
"audio/raptorfec": {
source: "iana"
},
"audio/red": {
source: "iana"
},
"audio/rtp-enc-aescm128": {
source: "iana"
},
"audio/rtp-midi": {
source: "iana"
},
"audio/rtploopback": {
source: "iana"
},
"audio/rtx": {
source: "iana"
},
"audio/s3m": {
source: "apache",
extensions: ["s3m"]
},
"audio/scip": {
source: "iana"
},
"audio/silk": {
source: "apache",
extensions: ["sil"]
},
"audio/smv": {
source: "iana"
},
"audio/smv-qcp": {
source: "iana"
},
"audio/smv0": {
source: "iana"
},
"audio/sofa": {
source: "iana"
},
"audio/sp-midi": {
source: "iana"
},
"audio/speex": {
source: "iana"
},
"audio/t140c": {
source: "iana"
},
"audio/t38": {
source: "iana"
},
"audio/telephone-event": {
source: "iana"
},
"audio/tetra_acelp": {
source: "iana"
},
"audio/tetra_acelp_bb": {
source: "iana"
},
"audio/tone": {
source: "iana"
},
"audio/tsvcis": {
source: "iana"
},
"audio/uemclip": {
source: "iana"
},
"audio/ulpfec": {
source: "iana"
},
"audio/usac": {
source: "iana"
},
"audio/vdvi": {
source: "iana"
},
"audio/vmr-wb": {
source: "iana"
},
"audio/vnd.3gpp.iufp": {
source: "iana"
},
"audio/vnd.4sb": {
source: "iana"
},
"audio/vnd.audiokoz": {
source: "iana"
},
"audio/vnd.celp": {
source: "iana"
},
"audio/vnd.cisco.nse": {
source: "iana"
},
"audio/vnd.cmles.radio-events": {
source: "iana"
},
"audio/vnd.cns.anp1": {
source: "iana"
},
"audio/vnd.cns.inf1": {
source: "iana"
},
"audio/vnd.dece.audio": {
source: "iana",
extensions: ["uva", "uvva"]
},
"audio/vnd.digital-winds": {
source: "iana",
extensions: ["eol"]
},
"audio/vnd.dlna.adts": {
source: "iana"
},
"audio/vnd.dolby.heaac.1": {
source: "iana"
},
"audio/vnd.dolby.heaac.2": {
source: "iana"
},
"audio/vnd.dolby.mlp": {
source: "iana"
},
"audio/vnd.dolby.mps": {
source: "iana"
},
"audio/vnd.dolby.pl2": {
source: "iana"
},
"audio/vnd.dolby.pl2x": {
source: "iana"
},
"audio/vnd.dolby.pl2z": {
source: "iana"
},
"audio/vnd.dolby.pulse.1": {
source: "iana"
},
"audio/vnd.dra": {
source: "iana",
extensions: ["dra"]
},
"audio/vnd.dts": {
source: "iana",
extensions: ["dts"]
},
"audio/vnd.dts.hd": {
source: "iana",
extensions: ["dtshd"]
},
"audio/vnd.dts.uhd": {
source: "iana"
},
"audio/vnd.dvb.file": {
source: "iana"
},
"audio/vnd.everad.plj": {
source: "iana"
},
"audio/vnd.hns.audio": {
source: "iana"
},
"audio/vnd.lucent.voice": {
source: "iana",
extensions: ["lvp"]
},
"audio/vnd.ms-playready.media.pya": {
source: "iana",
extensions: ["pya"]
},
"audio/vnd.nokia.mobile-xmf": {
source: "iana"
},
"audio/vnd.nortel.vbk": {
source: "iana"
},
"audio/vnd.nuera.ecelp4800": {
source: "iana",
extensions: ["ecelp4800"]
},
"audio/vnd.nuera.ecelp7470": {
source: "iana",
extensions: ["ecelp7470"]
},
"audio/vnd.nuera.ecelp9600": {
source: "iana",
extensions: ["ecelp9600"]
},
"audio/vnd.octel.sbc": {
source: "iana"
},
"audio/vnd.presonus.multitrack": {
source: "iana"
},
"audio/vnd.qcelp": {
source: "apache"
},
"audio/vnd.rhetorex.32kadpcm": {
source: "iana"
},
"audio/vnd.rip": {
source: "iana",
extensions: ["rip"]
},
"audio/vnd.rn-realaudio": {
compressible: false
},
"audio/vnd.sealedmedia.softseal.mpeg": {
source: "iana"
},
"audio/vnd.vmx.cvsd": {
source: "iana"
},
"audio/vnd.wave": {
compressible: false
},
"audio/vorbis": {
source: "iana",
compressible: false
},
"audio/vorbis-config": {
source: "iana"
},
"audio/wav": {
compressible: false,
extensions: ["wav"]
},
"audio/wave": {
compressible: false,
extensions: ["wav"]
},
"audio/webm": {
source: "apache",
compressible: false,
extensions: ["weba"]
},
"audio/x-aac": {
source: "apache",
compressible: false,
extensions: ["aac"]
},
"audio/x-aiff": {
source: "apache",
extensions: ["aif", "aiff", "aifc"]
},
"audio/x-caf": {
source: "apache",
compressible: false,
extensions: ["caf"]
},
"audio/x-flac": {
source: "apache",
extensions: ["flac"]
},
"audio/x-m4a": {
source: "nginx",
extensions: ["m4a"]
},
"audio/x-matroska": {
source: "apache",
extensions: ["mka"]
},
"audio/x-mpegurl": {
source: "apache",
extensions: ["m3u"]
},
"audio/x-ms-wax": {
source: "apache",
extensions: ["wax"]
},
"audio/x-ms-wma": {
source: "apache",
extensions: ["wma"]
},
"audio/x-pn-realaudio": {
source: "apache",
extensions: ["ram", "ra"]
},
"audio/x-pn-realaudio-plugin": {
source: "apache",
extensions: ["rmp"]
},
"audio/x-realaudio": {
source: "nginx",
extensions: ["ra"]
},
"audio/x-tta": {
source: "apache"
},
"audio/x-wav": {
source: "apache",
extensions: ["wav"]
},
"audio/xm": {
source: "apache",
extensions: ["xm"]
},
"chemical/x-cdx": {
source: "apache",
extensions: ["cdx"]
},
"chemical/x-cif": {
source: "apache",
extensions: ["cif"]
},
"chemical/x-cmdf": {
source: "apache",
extensions: ["cmdf"]
},
"chemical/x-cml": {
source: "apache",
extensions: ["cml"]
},
"chemical/x-csml": {
source: "apache",
extensions: ["csml"]
},
"chemical/x-pdb": {
source: "apache"
},
"chemical/x-xyz": {
source: "apache",
extensions: ["xyz"]
},
"font/collection": {
source: "iana",
extensions: ["ttc"]
},
"font/otf": {
source: "iana",
compressible: true,
extensions: ["otf"]
},
"font/sfnt": {
source: "iana"
},
"font/ttf": {
source: "iana",
compressible: true,
extensions: ["ttf"]
},
"font/woff": {
source: "iana",
extensions: ["woff"]
},
"font/woff2": {
source: "iana",
extensions: ["woff2"]
},
"image/aces": {
source: "iana",
extensions: ["exr"]
},
"image/apng": {
source: "iana",
compressible: false,
extensions: ["apng"]
},
"image/avci": {
source: "iana",
extensions: ["avci"]
},
"image/avcs": {
source: "iana",
extensions: ["avcs"]
},
"image/avif": {
source: "iana",
compressible: false,
extensions: ["avif"]
},
"image/bmp": {
source: "iana",
compressible: true,
extensions: ["bmp", "dib"]
},
"image/cgm": {
source: "iana",
extensions: ["cgm"]
},
"image/dicom-rle": {
source: "iana",
extensions: ["drle"]
},
"image/dpx": {
source: "iana",
extensions: ["dpx"]
},
"image/emf": {
source: "iana",
extensions: ["emf"]
},
"image/fits": {
source: "iana",
extensions: ["fits"]
},
"image/g3fax": {
source: "iana",
extensions: ["g3"]
},
"image/gif": {
source: "iana",
compressible: false,
extensions: ["gif"]
},
"image/heic": {
source: "iana",
extensions: ["heic"]
},
"image/heic-sequence": {
source: "iana",
extensions: ["heics"]
},
"image/heif": {
source: "iana",
extensions: ["heif"]
},
"image/heif-sequence": {
source: "iana",
extensions: ["heifs"]
},
"image/hej2k": {
source: "iana",
extensions: ["hej2"]
},
"image/ief": {
source: "iana",
extensions: ["ief"]
},
"image/j2c": {
source: "iana"
},
"image/jaii": {
source: "iana",
extensions: ["jaii"]
},
"image/jais": {
source: "iana",
extensions: ["jais"]
},
"image/jls": {
source: "iana",
extensions: ["jls"]
},
"image/jp2": {
source: "iana",
compressible: false,
extensions: ["jp2", "jpg2"]
},
"image/jpeg": {
source: "iana",
compressible: false,
extensions: ["jpg", "jpeg", "jpe"]
},
"image/jph": {
source: "iana",
extensions: ["jph"]
},
"image/jphc": {
source: "iana",
extensions: ["jhc"]
},
"image/jpm": {
source: "iana",
compressible: false,
extensions: ["jpm", "jpgm"]
},
"image/jpx": {
source: "iana",
compressible: false,
extensions: ["jpx", "jpf"]
},
"image/jxl": {
source: "iana",
extensions: ["jxl"]
},
"image/jxr": {
source: "iana",
extensions: ["jxr"]
},
"image/jxra": {
source: "iana",
extensions: ["jxra"]
},
"image/jxrs": {
source: "iana",
extensions: ["jxrs"]
},
"image/jxs": {
source: "iana",
extensions: ["jxs"]
},
"image/jxsc": {
source: "iana",
extensions: ["jxsc"]
},
"image/jxsi": {
source: "iana",
extensions: ["jxsi"]
},
"image/jxss": {
source: "iana",
extensions: ["jxss"]
},
"image/ktx": {
source: "iana",
extensions: ["ktx"]
},
"image/ktx2": {
source: "iana",
extensions: ["ktx2"]
},
"image/naplps": {
source: "iana"
},
"image/pjpeg": {
compressible: false,
extensions: ["jfif"]
},
"image/png": {
source: "iana",
compressible: false,
extensions: ["png"]
},
"image/prs.btif": {
source: "iana",
extensions: ["btif", "btf"]
},
"image/prs.pti": {
source: "iana",
extensions: ["pti"]
},
"image/pwg-raster": {
source: "iana"
},
"image/sgi": {
source: "apache",
extensions: ["sgi"]
},
"image/svg+xml": {
source: "iana",
compressible: true,
extensions: ["svg", "svgz"]
},
"image/t38": {
source: "iana",
extensions: ["t38"]
},
"image/tiff": {
source: "iana",
compressible: false,
extensions: ["tif", "tiff"]
},
"image/tiff-fx": {
source: "iana",
extensions: ["tfx"]
},
"image/vnd.adobe.photoshop": {
source: "iana",
compressible: true,
extensions: ["psd"]
},
"image/vnd.airzip.accelerator.azv": {
source: "iana",
extensions: ["azv"]
},
"image/vnd.clip": {
source: "iana"
},
"image/vnd.cns.inf2": {
source: "iana"
},
"image/vnd.dece.graphic": {
source: "iana",
extensions: ["uvi", "uvvi", "uvg", "uvvg"]
},
"image/vnd.djvu": {
source: "iana",
extensions: ["djvu", "djv"]
},
"image/vnd.dvb.subtitle": {
source: "iana",
extensions: ["sub"]
},
"image/vnd.dwg": {
source: "iana",
extensions: ["dwg"]
},
"image/vnd.dxf": {
source: "iana",
extensions: ["dxf"]
},
"image/vnd.fastbidsheet": {
source: "iana",
extensions: ["fbs"]
},
"image/vnd.fpx": {
source: "iana",
extensions: ["fpx"]
},
"image/vnd.fst": {
source: "iana",
extensions: ["fst"]
},
"image/vnd.fujixerox.edmics-mmr": {
source: "iana",
extensions: ["mmr"]
},
"image/vnd.fujixerox.edmics-rlc": {
source: "iana",
extensions: ["rlc"]
},
"image/vnd.globalgraphics.pgb": {
source: "iana"
},
"image/vnd.microsoft.icon": {
source: "iana",
compressible: true,
extensions: ["ico"]
},
"image/vnd.mix": {
source: "iana"
},
"image/vnd.mozilla.apng": {
source: "iana"
},
"image/vnd.ms-dds": {
compressible: true,
extensions: ["dds"]
},
"image/vnd.ms-modi": {
source: "iana",
extensions: ["mdi"]
},
"image/vnd.ms-photo": {
source: "apache",
extensions: ["wdp"]
},
"image/vnd.net-fpx": {
source: "iana",
extensions: ["npx"]
},
"image/vnd.pco.b16": {
source: "iana",
extensions: ["b16"]
},
"image/vnd.radiance": {
source: "iana"
},
"image/vnd.sealed.png": {
source: "iana"
},
"image/vnd.sealedmedia.softseal.gif": {
source: "iana"
},
"image/vnd.sealedmedia.softseal.jpg": {
source: "iana"
},
"image/vnd.svf": {
source: "iana"
},
"image/vnd.tencent.tap": {
source: "iana",
extensions: ["tap"]
},
"image/vnd.valve.source.texture": {
source: "iana",
extensions: ["vtf"]
},
"image/vnd.wap.wbmp": {
source: "iana",
extensions: ["wbmp"]
},
"image/vnd.xiff": {
source: "iana",
extensions: ["xif"]
},
"image/vnd.zbrush.pcx": {
source: "iana",
extensions: ["pcx"]
},
"image/webp": {
source: "iana",
extensions: ["webp"]
},
"image/wmf": {
source: "iana",
extensions: ["wmf"]
},
"image/x-3ds": {
source: "apache",
extensions: ["3ds"]
},
"image/x-adobe-dng": {
extensions: ["dng"]
},
"image/x-cmu-raster": {
source: "apache",
extensions: ["ras"]
},
"image/x-cmx": {
source: "apache",
extensions: ["cmx"]
},
"image/x-emf": {
source: "iana"
},
"image/x-freehand": {
source: "apache",
extensions: ["fh", "fhc", "fh4", "fh5", "fh7"]
},
"image/x-icon": {
source: "apache",
compressible: true,
extensions: ["ico"]
},
"image/x-jng": {
source: "nginx",
extensions: ["jng"]
},
"image/x-mrsid-image": {
source: "apache",
extensions: ["sid"]
},
"image/x-ms-bmp": {
source: "nginx",
compressible: true,
extensions: ["bmp"]
},
"image/x-pcx": {
source: "apache",
extensions: ["pcx"]
},
"image/x-pict": {
source: "apache",
extensions: ["pic", "pct"]
},
"image/x-portable-anymap": {
source: "apache",
extensions: ["pnm"]
},
"image/x-portable-bitmap": {
source: "apache",
extensions: ["pbm"]
},
"image/x-portable-graymap": {
source: "apache",
extensions: ["pgm"]
},
"image/x-portable-pixmap": {
source: "apache",
extensions: ["ppm"]
},
"image/x-rgb": {
source: "apache",
extensions: ["rgb"]
},
"image/x-tga": {
source: "apache",
extensions: ["tga"]
},
"image/x-wmf": {
source: "iana"
},
"image/x-xbitmap": {
source: "apache",
extensions: ["xbm"]
},
"image/x-xcf": {
compressible: false
},
"image/x-xpixmap": {
source: "apache",
extensions: ["xpm"]
},
"image/x-xwindowdump": {
source: "apache",
extensions: ["xwd"]
},
"message/bhttp": {
source: "iana"
},
"message/cpim": {
source: "iana"
},
"message/delivery-status": {
source: "iana"
},
"message/disposition-notification": {
source: "iana",
extensions: [
"disposition-notification"
]
},
"message/external-body": {
source: "iana"
},
"message/feedback-report": {
source: "iana"
},
"message/global": {
source: "iana",
extensions: ["u8msg"]
},
"message/global-delivery-status": {
source: "iana",
extensions: ["u8dsn"]
},
"message/global-disposition-notification": {
source: "iana",
extensions: ["u8mdn"]
},
"message/global-headers": {
source: "iana",
extensions: ["u8hdr"]
},
"message/http": {
source: "iana",
compressible: false
},
"message/imdn+xml": {
source: "iana",
compressible: true
},
"message/mls": {
source: "iana"
},
"message/news": {
source: "apache"
},
"message/ohttp-req": {
source: "iana"
},
"message/ohttp-res": {
source: "iana"
},
"message/partial": {
source: "iana",
compressible: false
},
"message/rfc822": {
source: "iana",
compressible: true,
extensions: ["eml", "mime", "mht", "mhtml"]
},
"message/s-http": {
source: "apache"
},
"message/sip": {
source: "iana"
},
"message/sipfrag": {
source: "iana"
},
"message/tracking-status": {
source: "iana"
},
"message/vnd.si.simp": {
source: "apache"
},
"message/vnd.wfa.wsc": {
source: "iana",
extensions: ["wsc"]
},
"model/3mf": {
source: "iana",
extensions: ["3mf"]
},
"model/e57": {
source: "iana"
},
"model/gltf+json": {
source: "iana",
compressible: true,
extensions: ["gltf"]
},
"model/gltf-binary": {
source: "iana",
compressible: true,
extensions: ["glb"]
},
"model/iges": {
source: "iana",
compressible: false,
extensions: ["igs", "iges"]
},
"model/jt": {
source: "iana",
extensions: ["jt"]
},
"model/mesh": {
source: "iana",
compressible: false,
extensions: ["msh", "mesh", "silo"]
},
"model/mtl": {
source: "iana",
extensions: ["mtl"]
},
"model/obj": {
source: "iana",
extensions: ["obj"]
},
"model/prc": {
source: "iana",
extensions: ["prc"]
},
"model/step": {
source: "iana",
extensions: ["step", "stp", "stpnc", "p21", "210"]
},
"model/step+xml": {
source: "iana",
compressible: true,
extensions: ["stpx"]
},
"model/step+zip": {
source: "iana",
compressible: false,
extensions: ["stpz"]
},
"model/step-xml+zip": {
source: "iana",
compressible: false,
extensions: ["stpxz"]
},
"model/stl": {
source: "iana",
extensions: ["stl"]
},
"model/u3d": {
source: "iana",
extensions: ["u3d"]
},
"model/vnd.bary": {
source: "iana",
extensions: ["bary"]
},
"model/vnd.cld": {
source: "iana",
extensions: ["cld"]
},
"model/vnd.collada+xml": {
source: "iana",
compressible: true,
extensions: ["dae"]
},
"model/vnd.dwf": {
source: "iana",
extensions: ["dwf"]
},
"model/vnd.flatland.3dml": {
source: "iana"
},
"model/vnd.gdl": {
source: "iana",
extensions: ["gdl"]
},
"model/vnd.gs-gdl": {
source: "apache"
},
"model/vnd.gs.gdl": {
source: "iana"
},
"model/vnd.gtw": {
source: "iana",
extensions: ["gtw"]
},
"model/vnd.moml+xml": {
source: "iana",
compressible: true
},
"model/vnd.mts": {
source: "iana",
extensions: ["mts"]
},
"model/vnd.opengex": {
source: "iana",
extensions: ["ogex"]
},
"model/vnd.parasolid.transmit.binary": {
source: "iana",
extensions: ["x_b"]
},
"model/vnd.parasolid.transmit.text": {
source: "iana",
extensions: ["x_t"]
},
"model/vnd.pytha.pyox": {
source: "iana",
extensions: ["pyo", "pyox"]
},
"model/vnd.rosette.annotated-data-model": {
source: "iana"
},
"model/vnd.sap.vds": {
source: "iana",
extensions: ["vds"]
},
"model/vnd.usda": {
source: "iana",
extensions: ["usda"]
},
"model/vnd.usdz+zip": {
source: "iana",
compressible: false,
extensions: ["usdz"]
},
"model/vnd.valve.source.compiled-map": {
source: "iana",
extensions: ["bsp"]
},
"model/vnd.vtu": {
source: "iana",
extensions: ["vtu"]
},
"model/vrml": {
source: "iana",
compressible: false,
extensions: ["wrl", "vrml"]
},
"model/x3d+binary": {
source: "apache",
compressible: false,
extensions: ["x3db", "x3dbz"]
},
"model/x3d+fastinfoset": {
source: "iana",
extensions: ["x3db"]
},
"model/x3d+vrml": {
source: "apache",
compressible: false,
extensions: ["x3dv", "x3dvz"]
},
"model/x3d+xml": {
source: "iana",
compressible: true,
extensions: ["x3d", "x3dz"]
},
"model/x3d-vrml": {
source: "iana",
extensions: ["x3dv"]
},
"multipart/alternative": {
source: "iana",
compressible: false
},
"multipart/appledouble": {
source: "iana"
},
"multipart/byteranges": {
source: "iana"
},
"multipart/digest": {
source: "iana"
},
"multipart/encrypted": {
source: "iana",
compressible: false
},
"multipart/form-data": {
source: "iana",
compressible: false
},
"multipart/header-set": {
source: "iana"
},
"multipart/mixed": {
source: "iana"
},
"multipart/multilingual": {
source: "iana"
},
"multipart/parallel": {
source: "iana"
},
"multipart/related": {
source: "iana",
compressible: false
},
"multipart/report": {
source: "iana"
},
"multipart/signed": {
source: "iana",
compressible: false
},
"multipart/vnd.bint.med-plus": {
source: "iana"
},
"multipart/voice-message": {
source: "iana"
},
"multipart/x-mixed-replace": {
source: "iana"
},
"text/1d-interleaved-parityfec": {
source: "iana"
},
"text/cache-manifest": {
source: "iana",
compressible: true,
extensions: ["appcache", "manifest"]
},
"text/calendar": {
source: "iana",
extensions: ["ics", "ifb"]
},
"text/calender": {
compressible: true
},
"text/cmd": {
compressible: true
},
"text/coffeescript": {
extensions: ["coffee", "litcoffee"]
},
"text/cql": {
source: "iana"
},
"text/cql-expression": {
source: "iana"
},
"text/cql-identifier": {
source: "iana"
},
"text/css": {
source: "iana",
charset: "UTF-8",
compressible: true,
extensions: ["css"]
},
"text/csv": {
source: "iana",
compressible: true,
extensions: ["csv"]
},
"text/csv-schema": {
source: "iana"
},
"text/directory": {
source: "iana"
},
"text/dns": {
source: "iana"
},
"text/ecmascript": {
source: "apache"
},
"text/encaprtp": {
source: "iana"
},
"text/enriched": {
source: "iana"
},
"text/fhirpath": {
source: "iana"
},
"text/flexfec": {
source: "iana"
},
"text/fwdred": {
source: "iana"
},
"text/gff3": {
source: "iana"
},
"text/grammar-ref-list": {
source: "iana"
},
"text/hl7v2": {
source: "iana"
},
"text/html": {
source: "iana",
compressible: true,
extensions: ["html", "htm", "shtml"]
},
"text/jade": {
extensions: ["jade"]
},
"text/javascript": {
source: "iana",
charset: "UTF-8",
compressible: true,
extensions: ["js", "mjs"]
},
"text/jcr-cnd": {
source: "iana"
},
"text/jsx": {
compressible: true,
extensions: ["jsx"]
},
"text/less": {
compressible: true,
extensions: ["less"]
},
"text/markdown": {
source: "iana",
compressible: true,
extensions: ["md", "markdown"]
},
"text/mathml": {
source: "nginx",
extensions: ["mml"]
},
"text/mdx": {
compressible: true,
extensions: ["mdx"]
},
"text/mizar": {
source: "iana"
},
"text/n3": {
source: "iana",
charset: "UTF-8",
compressible: true,
extensions: ["n3"]
},
"text/parameters": {
source: "iana",
charset: "UTF-8"
},
"text/parityfec": {
source: "iana"
},
"text/plain": {
source: "iana",
compressible: true,
extensions: ["txt", "text", "conf", "def", "list", "log", "in", "ini"]
},
"text/provenance-notation": {
source: "iana",
charset: "UTF-8"
},
"text/prs.fallenstein.rst": {
source: "iana"
},
"text/prs.lines.tag": {
source: "iana",
extensions: ["dsc"]
},
"text/prs.prop.logic": {
source: "iana"
},
"text/prs.texi": {
source: "iana"
},
"text/raptorfec": {
source: "iana"
},
"text/red": {
source: "iana"
},
"text/rfc822-headers": {
source: "iana"
},
"text/richtext": {
source: "iana",
compressible: true,
extensions: ["rtx"]
},
"text/rtf": {
source: "iana",
compressible: true,
extensions: ["rtf"]
},
"text/rtp-enc-aescm128": {
source: "iana"
},
"text/rtploopback": {
source: "iana"
},
"text/rtx": {
source: "iana"
},
"text/sgml": {
source: "iana",
extensions: ["sgml", "sgm"]
},
"text/shaclc": {
source: "iana"
},
"text/shex": {
source: "iana",
extensions: ["shex"]
},
"text/slim": {
extensions: ["slim", "slm"]
},
"text/spdx": {
source: "iana",
extensions: ["spdx"]
},
"text/strings": {
source: "iana"
},
"text/stylus": {
extensions: ["stylus", "styl"]
},
"text/t140": {
source: "iana"
},
"text/tab-separated-values": {
source: "iana",
compressible: true,
extensions: ["tsv"]
},
"text/troff": {
source: "iana",
extensions: ["t", "tr", "roff", "man", "me", "ms"]
},
"text/turtle": {
source: "iana",
charset: "UTF-8",
extensions: ["ttl"]
},
"text/ulpfec": {
source: "iana"
},
"text/uri-list": {
source: "iana",
compressible: true,
extensions: ["uri", "uris", "urls"]
},
"text/vcard": {
source: "iana",
compressible: true,
extensions: ["vcard"]
},
"text/vnd.a": {
source: "iana"
},
"text/vnd.abc": {
source: "iana"
},
"text/vnd.ascii-art": {
source: "iana"
},
"text/vnd.curl": {
source: "iana",
extensions: ["curl"]
},
"text/vnd.curl.dcurl": {
source: "apache",
extensions: ["dcurl"]
},
"text/vnd.curl.mcurl": {
source: "apache",
extensions: ["mcurl"]
},
"text/vnd.curl.scurl": {
source: "apache",
extensions: ["scurl"]
},
"text/vnd.debian.copyright": {
source: "iana",
charset: "UTF-8"
},
"text/vnd.dmclientscript": {
source: "iana"
},
"text/vnd.dvb.subtitle": {
source: "iana",
extensions: ["sub"]
},
"text/vnd.esmertec.theme-descriptor": {
source: "iana",
charset: "UTF-8"
},
"text/vnd.exchangeable": {
source: "iana"
},
"text/vnd.familysearch.gedcom": {
source: "iana",
extensions: ["ged"]
},
"text/vnd.ficlab.flt": {
source: "iana"
},
"text/vnd.fly": {
source: "iana",
extensions: ["fly"]
},
"text/vnd.fmi.flexstor": {
source: "iana",
extensions: ["flx"]
},
"text/vnd.gml": {
source: "iana"
},
"text/vnd.graphviz": {
source: "iana",
extensions: ["gv"]
},
"text/vnd.hans": {
source: "iana"
},
"text/vnd.hgl": {
source: "iana"
},
"text/vnd.in3d.3dml": {
source: "iana",
extensions: ["3dml"]
},
"text/vnd.in3d.spot": {
source: "iana",
extensions: ["spot"]
},
"text/vnd.iptc.newsml": {
source: "iana"
},
"text/vnd.iptc.nitf": {
source: "iana"
},
"text/vnd.latex-z": {
source: "iana"
},
"text/vnd.motorola.reflex": {
source: "iana"
},
"text/vnd.ms-mediapackage": {
source: "iana"
},
"text/vnd.net2phone.commcenter.command": {
source: "iana"
},
"text/vnd.radisys.msml-basic-layout": {
source: "iana"
},
"text/vnd.senx.warpscript": {
source: "iana"
},
"text/vnd.si.uricatalogue": {
source: "apache"
},
"text/vnd.sosi": {
source: "iana"
},
"text/vnd.sun.j2me.app-descriptor": {
source: "iana",
charset: "UTF-8",
extensions: ["jad"]
},
"text/vnd.trolltech.linguist": {
source: "iana",
charset: "UTF-8"
},
"text/vnd.vcf": {
source: "iana"
},
"text/vnd.wap.si": {
source: "iana"
},
"text/vnd.wap.sl": {
source: "iana"
},
"text/vnd.wap.wml": {
source: "iana",
extensions: ["wml"]
},
"text/vnd.wap.wmlscript": {
source: "iana",
extensions: ["wmls"]
},
"text/vnd.zoo.kcl": {
source: "iana"
},
"text/vtt": {
source: "iana",
charset: "UTF-8",
compressible: true,
extensions: ["vtt"]
},
"text/wgsl": {
source: "iana",
extensions: ["wgsl"]
},
"text/x-asm": {
source: "apache",
extensions: ["s", "asm"]
},
"text/x-c": {
source: "apache",
extensions: ["c", "cc", "cxx", "cpp", "h", "hh", "dic"]
},
"text/x-component": {
source: "nginx",
extensions: ["htc"]
},
"text/x-fortran": {
source: "apache",
extensions: ["f", "for", "f77", "f90"]
},
"text/x-gwt-rpc": {
compressible: true
},
"text/x-handlebars-template": {
extensions: ["hbs"]
},
"text/x-java-source": {
source: "apache",
extensions: ["java"]
},
"text/x-jquery-tmpl": {
compressible: true
},
"text/x-lua": {
extensions: ["lua"]
},
"text/x-markdown": {
compressible: true,
extensions: ["mkd"]
},
"text/x-nfo": {
source: "apache",
extensions: ["nfo"]
},
"text/x-opml": {
source: "apache",
extensions: ["opml"]
},
"text/x-org": {
compressible: true,
extensions: ["org"]
},
"text/x-pascal": {
source: "apache",
extensions: ["p", "pas"]
},
"text/x-processing": {
compressible: true,
extensions: ["pde"]
},
"text/x-sass": {
extensions: ["sass"]
},
"text/x-scss": {
extensions: ["scss"]
},
"text/x-setext": {
source: "apache",
extensions: ["etx"]
},
"text/x-sfv": {
source: "apache",
extensions: ["sfv"]
},
"text/x-suse-ymp": {
compressible: true,
extensions: ["ymp"]
},
"text/x-uuencode": {
source: "apache",
extensions: ["uu"]
},
"text/x-vcalendar": {
source: "apache",
extensions: ["vcs"]
},
"text/x-vcard": {
source: "apache",
extensions: ["vcf"]
},
"text/xml": {
source: "iana",
compressible: true,
extensions: ["xml"]
},
"text/xml-external-parsed-entity": {
source: "iana"
},
"text/yaml": {
compressible: true,
extensions: ["yaml", "yml"]
},
"video/1d-interleaved-parityfec": {
source: "iana"
},
"video/3gpp": {
source: "iana",
extensions: ["3gp", "3gpp"]
},
"video/3gpp-tt": {
source: "iana"
},
"video/3gpp2": {
source: "iana",
extensions: ["3g2"]
},
"video/av1": {
source: "iana"
},
"video/bmpeg": {
source: "iana"
},
"video/bt656": {
source: "iana"
},
"video/celb": {
source: "iana"
},
"video/dv": {
source: "iana"
},
"video/encaprtp": {
source: "iana"
},
"video/evc": {
source: "iana"
},
"video/ffv1": {
source: "iana"
},
"video/flexfec": {
source: "iana"
},
"video/h261": {
source: "iana",
extensions: ["h261"]
},
"video/h263": {
source: "iana",
extensions: ["h263"]
},
"video/h263-1998": {
source: "iana"
},
"video/h263-2000": {
source: "iana"
},
"video/h264": {
source: "iana",
extensions: ["h264"]
},
"video/h264-rcdo": {
source: "iana"
},
"video/h264-svc": {
source: "iana"
},
"video/h265": {
source: "iana"
},
"video/h266": {
source: "iana"
},
"video/iso.segment": {
source: "iana",
extensions: ["m4s"]
},
"video/jpeg": {
source: "iana",
extensions: ["jpgv"]
},
"video/jpeg2000": {
source: "iana"
},
"video/jpm": {
source: "apache",
extensions: ["jpm", "jpgm"]
},
"video/jxsv": {
source: "iana"
},
"video/lottie+json": {
source: "iana",
compressible: true
},
"video/matroska": {
source: "iana"
},
"video/matroska-3d": {
source: "iana"
},
"video/mj2": {
source: "iana",
extensions: ["mj2", "mjp2"]
},
"video/mp1s": {
source: "iana"
},
"video/mp2p": {
source: "iana"
},
"video/mp2t": {
source: "iana",
extensions: ["ts", "m2t", "m2ts", "mts"]
},
"video/mp4": {
source: "iana",
compressible: false,
extensions: ["mp4", "mp4v", "mpg4"]
},
"video/mp4v-es": {
source: "iana"
},
"video/mpeg": {
source: "iana",
compressible: false,
extensions: ["mpeg", "mpg", "mpe", "m1v", "m2v"]
},
"video/mpeg4-generic": {
source: "iana"
},
"video/mpv": {
source: "iana"
},
"video/nv": {
source: "iana"
},
"video/ogg": {
source: "iana",
compressible: false,
extensions: ["ogv"]
},
"video/parityfec": {
source: "iana"
},
"video/pointer": {
source: "iana"
},
"video/quicktime": {
source: "iana",
compressible: false,
extensions: ["qt", "mov"]
},
"video/raptorfec": {
source: "iana"
},
"video/raw": {
source: "iana"
},
"video/rtp-enc-aescm128": {
source: "iana"
},
"video/rtploopback": {
source: "iana"
},
"video/rtx": {
source: "iana"
},
"video/scip": {
source: "iana"
},
"video/smpte291": {
source: "iana"
},
"video/smpte292m": {
source: "iana"
},
"video/ulpfec": {
source: "iana"
},
"video/vc1": {
source: "iana"
},
"video/vc2": {
source: "iana"
},
"video/vnd.cctv": {
source: "iana"
},
"video/vnd.dece.hd": {
source: "iana",
extensions: ["uvh", "uvvh"]
},
"video/vnd.dece.mobile": {
source: "iana",
extensions: ["uvm", "uvvm"]
},
"video/vnd.dece.mp4": {
source: "iana"
},
"video/vnd.dece.pd": {
source: "iana",
extensions: ["uvp", "uvvp"]
},
"video/vnd.dece.sd": {
source: "iana",
extensions: ["uvs", "uvvs"]
},
"video/vnd.dece.video": {
source: "iana",
extensions: ["uvv", "uvvv"]
},
"video/vnd.directv.mpeg": {
source: "iana"
},
"video/vnd.directv.mpeg-tts": {
source: "iana"
},
"video/vnd.dlna.mpeg-tts": {
source: "iana"
},
"video/vnd.dvb.file": {
source: "iana",
extensions: ["dvb"]
},
"video/vnd.fvt": {
source: "iana",
extensions: ["fvt"]
},
"video/vnd.hns.video": {
source: "iana"
},
"video/vnd.iptvforum.1dparityfec-1010": {
source: "iana"
},
"video/vnd.iptvforum.1dparityfec-2005": {
source: "iana"
},
"video/vnd.iptvforum.2dparityfec-1010": {
source: "iana"
},
"video/vnd.iptvforum.2dparityfec-2005": {
source: "iana"
},
"video/vnd.iptvforum.ttsavc": {
source: "iana"
},
"video/vnd.iptvforum.ttsmpeg2": {
source: "iana"
},
"video/vnd.motorola.video": {
source: "iana"
},
"video/vnd.motorola.videop": {
source: "iana"
},
"video/vnd.mpegurl": {
source: "iana",
extensions: ["mxu", "m4u"]
},
"video/vnd.ms-playready.media.pyv": {
source: "iana",
extensions: ["pyv"]
},
"video/vnd.nokia.interleaved-multimedia": {
source: "iana"
},
"video/vnd.nokia.mp4vr": {
source: "iana"
},
"video/vnd.nokia.videovoip": {
source: "iana"
},
"video/vnd.objectvideo": {
source: "iana"
},
"video/vnd.planar": {
source: "iana"
},
"video/vnd.radgamettools.bink": {
source: "iana"
},
"video/vnd.radgamettools.smacker": {
source: "apache"
},
"video/vnd.sealed.mpeg1": {
source: "iana"
},
"video/vnd.sealed.mpeg4": {
source: "iana"
},
"video/vnd.sealed.swf": {
source: "iana"
},
"video/vnd.sealedmedia.softseal.mov": {
source: "iana"
},
"video/vnd.uvvu.mp4": {
source: "iana",
extensions: ["uvu", "uvvu"]
},
"video/vnd.vivo": {
source: "iana",
extensions: ["viv"]
},
"video/vnd.youtube.yt": {
source: "iana"
},
"video/vp8": {
source: "iana"
},
"video/vp9": {
source: "iana"
},
"video/webm": {
source: "apache",
compressible: false,
extensions: ["webm"]
},
"video/x-f4v": {
source: "apache",
extensions: ["f4v"]
},
"video/x-fli": {
source: "apache",
extensions: ["fli"]
},
"video/x-flv": {
source: "apache",
compressible: false,
extensions: ["flv"]
},
"video/x-m4v": {
source: "apache",
extensions: ["m4v"]
},
"video/x-matroska": {
source: "apache",
compressible: false,
extensions: ["mkv", "mk3d", "mks"]
},
"video/x-mng": {
source: "apache",
extensions: ["mng"]
},
"video/x-ms-asf": {
source: "apache",
extensions: ["asf", "asx"]
},
"video/x-ms-vob": {
source: "apache",
extensions: ["vob"]
},
"video/x-ms-wm": {
source: "apache",
extensions: ["wm"]
},
"video/x-ms-wmv": {
source: "apache",
compressible: false,
extensions: ["wmv"]
},
"video/x-ms-wmx": {
source: "apache",
extensions: ["wmx"]
},
"video/x-ms-wvx": {
source: "apache",
extensions: ["wvx"]
},
"video/x-msvideo": {
source: "apache",
extensions: ["avi"]
},
"video/x-sgi-movie": {
source: "apache",
extensions: ["movie"]
},
"video/x-smv": {
source: "apache",
extensions: ["smv"]
},
"x-conference/x-cooltalk": {
source: "apache",
extensions: ["ice"]
},
"x-shader/x-fragment": {
compressible: true
},
"x-shader/x-vertex": {
compressible: true
}
};
}
});
var require_mime_db22 = __commonJS2({
"node_modules/express/node_modules/mime-db/index.js"(exports2, module2) {
module2.exports = require_db22();
}
});
var require_mimeScore2 = __commonJS2({
"node_modules/express/node_modules/mime-types/mimeScore.js"(exports2, module2) {
var FACET_SCORES = {
"prs.": 100,
"x-": 200,
"x.": 300,
"vnd.": 400,
default: 900
};
var SOURCE_SCORES = {
nginx: 10,
apache: 20,
iana: 40,
default: 30
// definitions added by `jshttp/mime-db` project?
};
var TYPE_SCORES = {
// prefer application/xml over text/xml
// prefer application/rtf over text/rtf
application: 1,
// prefer font/woff over application/font-woff
font: 2,
default: 0
};
module2.exports = function mimeScore(mimeType, source = "default") {
if (mimeType === "application/octet-stream") {
return 0;
}
const [type, subtype] = mimeType.split("/");
const facet = subtype.replace(/(\.|x-).*/, "$1");
const facetScore = FACET_SCORES[facet] || FACET_SCORES.default;
const sourceScore = SOURCE_SCORES[source] || SOURCE_SCORES.default;
const typeScore = TYPE_SCORES[type] || TYPE_SCORES.default;
const lengthScore = 1 - mimeType.length / 100;
return facetScore + sourceScore + typeScore + lengthScore;
};
}
});
var require_mime_types22 = __commonJS2({
"node_modules/express/node_modules/mime-types/index.js"(exports2) {
"use strict";
var db = require_mime_db22();
var extname = require("path").extname;
var mimeScore = require_mimeScore2();
var EXTRACT_TYPE_REGEXP = /^\s*([^;\s]*)(?:;|\s|$)/;
var TEXT_TYPE_REGEXP = /^text\//i;
exports2.charset = charset;
exports2.charsets = { lookup: charset };
exports2.contentType = contentType2;
exports2.extension = extension;
exports2.extensions = /* @__PURE__ */ Object.create(null);
exports2.lookup = lookup;
exports2.types = /* @__PURE__ */ Object.create(null);
exports2._extensionConflicts = [];
populateMaps(exports2.extensions, exports2.types);
function charset(type) {
if (!type || typeof type !== "string") {
return false;
}
var match = EXTRACT_TYPE_REGEXP.exec(type);
var mime = match && db[match[1].toLowerCase()];
if (mime && mime.charset) {
return mime.charset;
}
if (match && TEXT_TYPE_REGEXP.test(match[1])) {
return "UTF-8";
}
return false;
}
function contentType2(str) {
if (!str || typeof str !== "string") {
return false;
}
var mime = str.indexOf("/") === -1 ? exports2.lookup(str) : str;
if (!mime) {
return false;
}
if (mime.indexOf("charset") === -1) {
var charset2 = exports2.charset(mime);
if (charset2) mime += "; charset=" + charset2.toLowerCase();
}
return mime;
}
function extension(type) {
if (!type || typeof type !== "string") {
return false;
}
var match = EXTRACT_TYPE_REGEXP.exec(type);
var exts = match && exports2.extensions[match[1].toLowerCase()];
if (!exts || !exts.length) {
return false;
}
return exts[0];
}
function lookup(path) {
if (!path || typeof path !== "string") {
return false;
}
var extension2 = extname("x." + path).toLowerCase().slice(1);
if (!extension2) {
return false;
}
return exports2.types[extension2] || false;
}
function populateMaps(extensions, types) {
Object.keys(db).forEach(function forEachMimeType(type) {
var mime = db[type];
var exts = mime.extensions;
if (!exts || !exts.length) {
return;
}
extensions[type] = exts;
for (var i = 0; i < exts.length; i++) {
var extension2 = exts[i];
types[extension2] = _preferredType(extension2, types[extension2], type);
const legacyType = _preferredTypeLegacy(
extension2,
types[extension2],
type
);
if (legacyType !== types[extension2]) {
exports2._extensionConflicts.push([extension2, legacyType, types[extension2]]);
}
}
});
}
function _preferredType(ext, type0, type1) {
var score0 = type0 ? mimeScore(type0, db[type0].source) : 0;
var score1 = type1 ? mimeScore(type1, db[type1].source) : 0;
return score0 > score1 ? type0 : type1;
}
function _preferredTypeLegacy(ext, type0, type1) {
var SOURCE_RANK = ["nginx", "apache", void 0, "iana"];
var score0 = type0 ? SOURCE_RANK.indexOf(db[type0].source) : 0;
var score1 = type1 ? SOURCE_RANK.indexOf(db[type1].source) : 0;
if (exports2.types[extension] !== "application/octet-stream" && (score0 > score1 || score0 === score1 && exports2.types[extension]?.slice(0, 12) === "application/")) {
return type0;
}
return score0 > score1 ? type0 : type1;
}
}
});
var require_forwarded = __commonJS2({
"node_modules/forwarded/index.js"(exports2, module2) {
"use strict";
module2.exports = forwarded;
function forwarded(req) {
if (!req) {
throw new TypeError("argument req is required");
}
var proxyAddrs = parse8(req.headers["x-forwarded-for"] || "");
var socketAddr = getSocketAddr(req);
var addrs = [socketAddr].concat(proxyAddrs);
return addrs;
}
function getSocketAddr(req) {
return req.socket ? req.socket.remoteAddress : req.connection.remoteAddress;
}
function parse8(header) {
var end2 = header.length;
var list = [];
var start = header.length;
for (var i = header.length - 1; i >= 0; i--) {
switch (header.charCodeAt(i)) {
case 32:
if (start === end2) {
start = end2 = i;
}
break;
case 44:
if (start !== end2) {
list.push(header.substring(start, end2));
}
start = end2 = i;
break;
default:
start = i;
break;
}
}
if (start !== end2) {
list.push(header.substring(start, end2));
}
return list;
}
}
});
var require_ipaddr = __commonJS2({
"node_modules/ipaddr.js/lib/ipaddr.js"(exports2, module2) {
(function() {
var expandIPv6, ipaddr, ipv4Part, ipv4Regexes, ipv6Part, ipv6Regexes, matchCIDR, root2, zoneIndex;
ipaddr = {};
root2 = this;
if (typeof module2 !== "undefined" && module2 !== null && module2.exports) {
module2.exports = ipaddr;
} else {
root2["ipaddr"] = ipaddr;
}
matchCIDR = function(first2, second, partSize, cidrBits) {
var part, shift;
if (first2.length !== second.length) {
throw new Error("ipaddr: cannot match CIDR for objects with different lengths");
}
part = 0;
while (cidrBits > 0) {
shift = partSize - cidrBits;
if (shift < 0) {
shift = 0;
}
if (first2[part] >> shift !== second[part] >> shift) {
return false;
}
cidrBits -= partSize;
part += 1;
}
return true;
};
ipaddr.subnetMatch = function(address, rangeList, defaultName) {
var k, len, rangeName, rangeSubnets, subnet;
if (defaultName == null) {
defaultName = "unicast";
}
for (rangeName in rangeList) {
rangeSubnets = rangeList[rangeName];
if (rangeSubnets[0] && !(rangeSubnets[0] instanceof Array)) {
rangeSubnets = [rangeSubnets];
}
for (k = 0, len = rangeSubnets.length; k < len; k++) {
subnet = rangeSubnets[k];
if (address.kind() === subnet[0].kind()) {
if (address.match.apply(address, subnet)) {
return rangeName;
}
}
}
}
return defaultName;
};
ipaddr.IPv4 = (function() {
function IPv4(octets) {
var k, len, octet;
if (octets.length !== 4) {
throw new Error("ipaddr: ipv4 octet count should be 4");
}
for (k = 0, len = octets.length; k < len; k++) {
octet = octets[k];
if (!(0 <= octet && octet <= 255)) {
throw new Error("ipaddr: ipv4 octet should fit in 8 bits");
}
}
this.octets = octets;
}
IPv4.prototype.kind = function() {
return "ipv4";
};
IPv4.prototype.toString = function() {
return this.octets.join(".");
};
IPv4.prototype.toNormalizedString = function() {
return this.toString();
};
IPv4.prototype.toByteArray = function() {
return this.octets.slice(0);
};
IPv4.prototype.match = function(other, cidrRange) {
var ref;
if (cidrRange === void 0) {
ref = other, other = ref[0], cidrRange = ref[1];
}
if (other.kind() !== "ipv4") {
throw new Error("ipaddr: cannot match ipv4 address with non-ipv4 one");
}
return matchCIDR(this.octets, other.octets, 8, cidrRange);
};
IPv4.prototype.SpecialRanges = {
unspecified: [[new IPv4([0, 0, 0, 0]), 8]],
broadcast: [[new IPv4([255, 255, 255, 255]), 32]],
multicast: [[new IPv4([224, 0, 0, 0]), 4]],
linkLocal: [[new IPv4([169, 254, 0, 0]), 16]],
loopback: [[new IPv4([127, 0, 0, 0]), 8]],
carrierGradeNat: [[new IPv4([100, 64, 0, 0]), 10]],
"private": [[new IPv4([10, 0, 0, 0]), 8], [new IPv4([172, 16, 0, 0]), 12], [new IPv4([192, 168, 0, 0]), 16]],
reserved: [[new IPv4([192, 0, 0, 0]), 24], [new IPv4([192, 0, 2, 0]), 24], [new IPv4([192, 88, 99, 0]), 24], [new IPv4([198, 51, 100, 0]), 24], [new IPv4([203, 0, 113, 0]), 24], [new IPv4([240, 0, 0, 0]), 4]]
};
IPv4.prototype.range = function() {
return ipaddr.subnetMatch(this, this.SpecialRanges);
};
IPv4.prototype.toIPv4MappedAddress = function() {
return ipaddr.IPv6.parse("::ffff:" + this.toString());
};
IPv4.prototype.prefixLengthFromSubnetMask = function() {
var cidr, i, k, octet, stop, zeros, zerotable;
zerotable = {
0: 8,
128: 7,
192: 6,
224: 5,
240: 4,
248: 3,
252: 2,
254: 1,
255: 0
};
cidr = 0;
stop = false;
for (i = k = 3; k >= 0; i = k += -1) {
octet = this.octets[i];
if (octet in zerotable) {
zeros = zerotable[octet];
if (stop && zeros !== 0) {
return null;
}
if (zeros !== 8) {
stop = true;
}
cidr += zeros;
} else {
return null;
}
}
return 32 - cidr;
};
return IPv4;
})();
ipv4Part = "(0?\\d+|0x[a-f0-9]+)";
ipv4Regexes = {
fourOctet: new RegExp("^" + ipv4Part + "\\." + ipv4Part + "\\." + ipv4Part + "\\." + ipv4Part + "$", "i"),
longValue: new RegExp("^" + ipv4Part + "$", "i")
};
ipaddr.IPv4.parser = function(string) {
var match, parseIntAuto, part, shift, value;
parseIntAuto = function(string2) {
if (string2[0] === "0" && string2[1] !== "x") {
return parseInt(string2, 8);
} else {
return parseInt(string2);
}
};
if (match = string.match(ipv4Regexes.fourOctet)) {
return (function() {
var k, len, ref, results;
ref = match.slice(1, 6);
results = [];
for (k = 0, len = ref.length; k < len; k++) {
part = ref[k];
results.push(parseIntAuto(part));
}
return results;
})();
} else if (match = string.match(ipv4Regexes.longValue)) {
value = parseIntAuto(match[1]);
if (value > 4294967295 || value < 0) {
throw new Error("ipaddr: address outside defined range");
}
return (function() {
var k, results;
results = [];
for (shift = k = 0; k <= 24; shift = k += 8) {
results.push(value >> shift & 255);
}
return results;
})().reverse();
} else {
return null;
}
};
ipaddr.IPv6 = (function() {
function IPv6(parts, zoneId) {
var i, k, l, len, part, ref;
if (parts.length === 16) {
this.parts = [];
for (i = k = 0; k <= 14; i = k += 2) {
this.parts.push(parts[i] << 8 | parts[i + 1]);
}
} else if (parts.length === 8) {
this.parts = parts;
} else {
throw new Error("ipaddr: ipv6 part count should be 8 or 16");
}
ref = this.parts;
for (l = 0, len = ref.length; l < len; l++) {
part = ref[l];
if (!(0 <= part && part <= 65535)) {
throw new Error("ipaddr: ipv6 part should fit in 16 bits");
}
}
if (zoneId) {
this.zoneId = zoneId;
}
}
IPv6.prototype.kind = function() {
return "ipv6";
};
IPv6.prototype.toString = function() {
return this.toNormalizedString().replace(/((^|:)(0(:|$))+)/, "::");
};
IPv6.prototype.toRFC5952String = function() {
var bestMatchIndex, bestMatchLength, match, regex, string;
regex = /((^|:)(0(:|$)){2,})/g;
string = this.toNormalizedString();
bestMatchIndex = 0;
bestMatchLength = -1;
while (match = regex.exec(string)) {
if (match[0].length > bestMatchLength) {
bestMatchIndex = match.index;
bestMatchLength = match[0].length;
}
}
if (bestMatchLength < 0) {
return string;
}
return string.substring(0, bestMatchIndex) + "::" + string.substring(bestMatchIndex + bestMatchLength);
};
IPv6.prototype.toByteArray = function() {
var bytes, k, len, part, ref;
bytes = [];
ref = this.parts;
for (k = 0, len = ref.length; k < len; k++) {
part = ref[k];
bytes.push(part >> 8);
bytes.push(part & 255);
}
return bytes;
};
IPv6.prototype.toNormalizedString = function() {
var addr, part, suffix;
addr = function() {
var k, len, ref, results;
ref = this.parts;
results = [];
for (k = 0, len = ref.length; k < len; k++) {
part = ref[k];
results.push(part.toString(16));
}
return results;
}.call(this).join(":");
suffix = "";
if (this.zoneId) {
suffix = "%" + this.zoneId;
}
return addr + suffix;
};
IPv6.prototype.toFixedLengthString = function() {
var addr, part, suffix;
addr = function() {
var k, len, ref, results;
ref = this.parts;
results = [];
for (k = 0, len = ref.length; k < len; k++) {
part = ref[k];
results.push(part.toString(16).padStart(4, "0"));
}
return results;
}.call(this).join(":");
suffix = "";
if (this.zoneId) {
suffix = "%" + this.zoneId;
}
return addr + suffix;
};
IPv6.prototype.match = function(other, cidrRange) {
var ref;
if (cidrRange === void 0) {
ref = other, other = ref[0], cidrRange = ref[1];
}
if (other.kind() !== "ipv6") {
throw new Error("ipaddr: cannot match ipv6 address with non-ipv6 one");
}
return matchCIDR(this.parts, other.parts, 16, cidrRange);
};
IPv6.prototype.SpecialRanges = {
unspecified: [new IPv6([0, 0, 0, 0, 0, 0, 0, 0]), 128],
linkLocal: [new IPv6([65152, 0, 0, 0, 0, 0, 0, 0]), 10],
multicast: [new IPv6([65280, 0, 0, 0, 0, 0, 0, 0]), 8],
loopback: [new IPv6([0, 0, 0, 0, 0, 0, 0, 1]), 128],
uniqueLocal: [new IPv6([64512, 0, 0, 0, 0, 0, 0, 0]), 7],
ipv4Mapped: [new IPv6([0, 0, 0, 0, 0, 65535, 0, 0]), 96],
rfc6145: [new IPv6([0, 0, 0, 0, 65535, 0, 0, 0]), 96],
rfc6052: [new IPv6([100, 65435, 0, 0, 0, 0, 0, 0]), 96],
"6to4": [new IPv6([8194, 0, 0, 0, 0, 0, 0, 0]), 16],
teredo: [new IPv6([8193, 0, 0, 0, 0, 0, 0, 0]), 32],
reserved: [[new IPv6([8193, 3512, 0, 0, 0, 0, 0, 0]), 32]]
};
IPv6.prototype.range = function() {
return ipaddr.subnetMatch(this, this.SpecialRanges);
};
IPv6.prototype.isIPv4MappedAddress = function() {
return this.range() === "ipv4Mapped";
};
IPv6.prototype.toIPv4Address = function() {
var high, low, ref;
if (!this.isIPv4MappedAddress()) {
throw new Error("ipaddr: trying to convert a generic ipv6 address to ipv4");
}
ref = this.parts.slice(-2), high = ref[0], low = ref[1];
return new ipaddr.IPv4([high >> 8, high & 255, low >> 8, low & 255]);
};
IPv6.prototype.prefixLengthFromSubnetMask = function() {
var cidr, i, k, part, stop, zeros, zerotable;
zerotable = {
0: 16,
32768: 15,
49152: 14,
57344: 13,
61440: 12,
63488: 11,
64512: 10,
65024: 9,
65280: 8,
65408: 7,
65472: 6,
65504: 5,
65520: 4,
65528: 3,
65532: 2,
65534: 1,
65535: 0
};
cidr = 0;
stop = false;
for (i = k = 7; k >= 0; i = k += -1) {
part = this.parts[i];
if (part in zerotable) {
zeros = zerotable[part];
if (stop && zeros !== 0) {
return null;
}
if (zeros !== 16) {
stop = true;
}
cidr += zeros;
} else {
return null;
}
}
return 128 - cidr;
};
return IPv6;
})();
ipv6Part = "(?:[0-9a-f]+::?)+";
zoneIndex = "%[0-9a-z]{1,}";
ipv6Regexes = {
zoneIndex: new RegExp(zoneIndex, "i"),
"native": new RegExp("^(::)?(" + ipv6Part + ")?([0-9a-f]+)?(::)?(" + zoneIndex + ")?$", "i"),
transitional: new RegExp("^((?:" + ipv6Part + ")|(?:::)(?:" + ipv6Part + ")?)" + (ipv4Part + "\\." + ipv4Part + "\\." + ipv4Part + "\\." + ipv4Part) + ("(" + zoneIndex + ")?$"), "i")
};
expandIPv6 = function(string, parts) {
var colonCount, lastColon, part, replacement, replacementCount, zoneId;
if (string.indexOf("::") !== string.lastIndexOf("::")) {
return null;
}
zoneId = (string.match(ipv6Regexes["zoneIndex"]) || [])[0];
if (zoneId) {
zoneId = zoneId.substring(1);
string = string.replace(/%.+$/, "");
}
colonCount = 0;
lastColon = -1;
while ((lastColon = string.indexOf(":", lastColon + 1)) >= 0) {
colonCount++;
}
if (string.substr(0, 2) === "::") {
colonCount--;
}
if (string.substr(-2, 2) === "::") {
colonCount--;
}
if (colonCount > parts) {
return null;
}
replacementCount = parts - colonCount;
replacement = ":";
while (replacementCount--) {
replacement += "0:";
}
string = string.replace("::", replacement);
if (string[0] === ":") {
string = string.slice(1);
}
if (string[string.length - 1] === ":") {
string = string.slice(0, -1);
}
parts = (function() {
var k, len, ref, results;
ref = string.split(":");
results = [];
for (k = 0, len = ref.length; k < len; k++) {
part = ref[k];
results.push(parseInt(part, 16));
}
return results;
})();
return {
parts,
zoneId
};
};
ipaddr.IPv6.parser = function(string) {
var addr, k, len, match, octet, octets, zoneId;
if (ipv6Regexes["native"].test(string)) {
return expandIPv6(string, 8);
} else if (match = string.match(ipv6Regexes["transitional"])) {
zoneId = match[6] || "";
addr = expandIPv6(match[1].slice(0, -1) + zoneId, 6);
if (addr.parts) {
octets = [parseInt(match[2]), parseInt(match[3]), parseInt(match[4]), parseInt(match[5])];
for (k = 0, len = octets.length; k < len; k++) {
octet = octets[k];
if (!(0 <= octet && octet <= 255)) {
return null;
}
}
addr.parts.push(octets[0] << 8 | octets[1]);
addr.parts.push(octets[2] << 8 | octets[3]);
return {
parts: addr.parts,
zoneId: addr.zoneId
};
}
}
return null;
};
ipaddr.IPv4.isIPv4 = ipaddr.IPv6.isIPv6 = function(string) {
return this.parser(string) !== null;
};
ipaddr.IPv4.isValid = function(string) {
var e;
try {
new this(this.parser(string));
return true;
} catch (error1) {
e = error1;
return false;
}
};
ipaddr.IPv4.isValidFourPartDecimal = function(string) {
if (ipaddr.IPv4.isValid(string) && string.match(/^(0|[1-9]\d*)(\.(0|[1-9]\d*)){3}$/)) {
return true;
} else {
return false;
}
};
ipaddr.IPv6.isValid = function(string) {
var addr, e;
if (typeof string === "string" && string.indexOf(":") === -1) {
return false;
}
try {
addr = this.parser(string);
new this(addr.parts, addr.zoneId);
return true;
} catch (error1) {
e = error1;
return false;
}
};
ipaddr.IPv4.parse = function(string) {
var parts;
parts = this.parser(string);
if (parts === null) {
throw new Error("ipaddr: string is not formatted like ip address");
}
return new this(parts);
};
ipaddr.IPv6.parse = function(string) {
var addr;
addr = this.parser(string);
if (addr.parts === null) {
throw new Error("ipaddr: string is not formatted like ip address");
}
return new this(addr.parts, addr.zoneId);
};
ipaddr.IPv4.parseCIDR = function(string) {
var maskLength, match, parsed;
if (match = string.match(/^(.+)\/(\d+)$/)) {
maskLength = parseInt(match[2]);
if (maskLength >= 0 && maskLength <= 32) {
parsed = [this.parse(match[1]), maskLength];
Object.defineProperty(parsed, "toString", {
value: function() {
return this.join("/");
}
});
return parsed;
}
}
throw new Error("ipaddr: string is not formatted like an IPv4 CIDR range");
};
ipaddr.IPv4.subnetMaskFromPrefixLength = function(prefix) {
var filledOctetCount, j, octets;
prefix = parseInt(prefix);
if (prefix < 0 || prefix > 32) {
throw new Error("ipaddr: invalid IPv4 prefix length");
}
octets = [0, 0, 0, 0];
j = 0;
filledOctetCount = Math.floor(prefix / 8);
while (j < filledOctetCount) {
octets[j] = 255;
j++;
}
if (filledOctetCount < 4) {
octets[filledOctetCount] = Math.pow(2, prefix % 8) - 1 << 8 - prefix % 8;
}
return new this(octets);
};
ipaddr.IPv4.broadcastAddressFromCIDR = function(string) {
var cidr, error, i, ipInterfaceOctets, octets, subnetMaskOctets;
try {
cidr = this.parseCIDR(string);
ipInterfaceOctets = cidr[0].toByteArray();
subnetMaskOctets = this.subnetMaskFromPrefixLength(cidr[1]).toByteArray();
octets = [];
i = 0;
while (i < 4) {
octets.push(parseInt(ipInterfaceOctets[i], 10) | parseInt(subnetMaskOctets[i], 10) ^ 255);
i++;
}
return new this(octets);
} catch (error1) {
error = error1;
throw new Error("ipaddr: the address does not have IPv4 CIDR format");
}
};
ipaddr.IPv4.networkAddressFromCIDR = function(string) {
var cidr, error, i, ipInterfaceOctets, octets, subnetMaskOctets;
try {
cidr = this.parseCIDR(string);
ipInterfaceOctets = cidr[0].toByteArray();
subnetMaskOctets = this.subnetMaskFromPrefixLength(cidr[1]).toByteArray();
octets = [];
i = 0;
while (i < 4) {
octets.push(parseInt(ipInterfaceOctets[i], 10) & parseInt(subnetMaskOctets[i], 10));
i++;
}
return new this(octets);
} catch (error1) {
error = error1;
throw new Error("ipaddr: the address does not have IPv4 CIDR format");
}
};
ipaddr.IPv6.parseCIDR = function(string) {
var maskLength, match, parsed;
if (match = string.match(/^(.+)\/(\d+)$/)) {
maskLength = parseInt(match[2]);
if (maskLength >= 0 && maskLength <= 128) {
parsed = [this.parse(match[1]), maskLength];
Object.defineProperty(parsed, "toString", {
value: function() {
return this.join("/");
}
});
return parsed;
}
}
throw new Error("ipaddr: string is not formatted like an IPv6 CIDR range");
};
ipaddr.isValid = function(string) {
return ipaddr.IPv6.isValid(string) || ipaddr.IPv4.isValid(string);
};
ipaddr.parse = function(string) {
if (ipaddr.IPv6.isValid(string)) {
return ipaddr.IPv6.parse(string);
} else if (ipaddr.IPv4.isValid(string)) {
return ipaddr.IPv4.parse(string);
} else {
throw new Error("ipaddr: the address has neither IPv6 nor IPv4 format");
}
};
ipaddr.parseCIDR = function(string) {
var e;
try {
return ipaddr.IPv6.parseCIDR(string);
} catch (error1) {
e = error1;
try {
return ipaddr.IPv4.parseCIDR(string);
} catch (error12) {
e = error12;
throw new Error("ipaddr: the address has neither IPv6 nor IPv4 CIDR format");
}
}
};
ipaddr.fromByteArray = function(bytes) {
var length;
length = bytes.length;
if (length === 4) {
return new ipaddr.IPv4(bytes);
} else if (length === 16) {
return new ipaddr.IPv6(bytes);
} else {
throw new Error("ipaddr: the binary input is neither an IPv6 nor IPv4 address");
}
};
ipaddr.process = function(string) {
var addr;
addr = this.parse(string);
if (addr.kind() === "ipv6" && addr.isIPv4MappedAddress()) {
return addr.toIPv4Address();
} else {
return addr;
}
};
}).call(exports2);
}
});
var require_proxy_addr = __commonJS2({
"node_modules/proxy-addr/index.js"(exports2, module2) {
"use strict";
module2.exports = proxyaddr;
module2.exports.all = alladdrs;
module2.exports.compile = compile4;
var forwarded = require_forwarded();
var ipaddr = require_ipaddr();
var DIGIT_REGEXP = /^[0-9]+$/;
var isip = ipaddr.isValid;
var parseip = ipaddr.parse;
var IP_RANGES = {
linklocal: ["169.254.0.0/16", "fe80::/10"],
loopback: ["127.0.0.1/8", "::1/128"],
uniquelocal: ["10.0.0.0/8", "172.16.0.0/12", "192.168.0.0/16", "fc00::/7"]
};
function alladdrs(req, trust) {
var addrs = forwarded(req);
if (!trust) {
return addrs;
}
if (typeof trust !== "function") {
trust = compile4(trust);
}
for (var i = 0; i < addrs.length - 1; i++) {
if (trust(addrs[i], i)) continue;
addrs.length = i + 1;
}
return addrs;
}
function compile4(val2) {
if (!val2) {
throw new TypeError("argument is required");
}
var trust;
if (typeof val2 === "string") {
trust = [val2];
} else if (Array.isArray(val2)) {
trust = val2.slice();
} else {
throw new TypeError("unsupported trust argument");
}
for (var i = 0; i < trust.length; i++) {
val2 = trust[i];
if (!Object.prototype.hasOwnProperty.call(IP_RANGES, val2)) {
continue;
}
val2 = IP_RANGES[val2];
trust.splice.apply(trust, [i, 1].concat(val2));
i += val2.length - 1;
}
return compileTrust(compileRangeSubnets(trust));
}
function compileRangeSubnets(arr) {
var rangeSubnets = new Array(arr.length);
for (var i = 0; i < arr.length; i++) {
rangeSubnets[i] = parseipNotation(arr[i]);
}
return rangeSubnets;
}
function compileTrust(rangeSubnets) {
var len = rangeSubnets.length;
return len === 0 ? trustNone : len === 1 ? trustSingle(rangeSubnets[0]) : trustMulti(rangeSubnets);
}
function parseipNotation(note) {
var pos = note.lastIndexOf("/");
var str = pos !== -1 ? note.substring(0, pos) : note;
if (!isip(str)) {
throw new TypeError("invalid IP address: " + str);
}
var ip = parseip(str);
if (pos === -1 && ip.kind() === "ipv6" && ip.isIPv4MappedAddress()) {
ip = ip.toIPv4Address();
}
var max = ip.kind() === "ipv6" ? 128 : 32;
var range = pos !== -1 ? note.substring(pos + 1, note.length) : null;
if (range === null) {
range = max;
} else if (DIGIT_REGEXP.test(range)) {
range = parseInt(range, 10);
} else if (ip.kind() === "ipv4" && isip(range)) {
range = parseNetmask(range);
} else {
range = null;
}
if (range <= 0 || range > max) {
throw new TypeError("invalid range on address: " + note);
}
return [ip, range];
}
function parseNetmask(netmask) {
var ip = parseip(netmask);
var kind = ip.kind();
return kind === "ipv4" ? ip.prefixLengthFromSubnetMask() : null;
}
function proxyaddr(req, trust) {
if (!req) {
throw new TypeError("req argument is required");
}
if (!trust) {
throw new TypeError("trust argument is required");
}
var addrs = alladdrs(req, trust);
var addr = addrs[addrs.length - 1];
return addr;
}
function trustNone() {
return false;
}
function trustMulti(subnets) {
return function trust(addr) {
if (!isip(addr)) return false;
var ip = parseip(addr);
var ipconv;
var kind = ip.kind();
for (var i = 0; i < subnets.length; i++) {
var subnet = subnets[i];
var subnetip = subnet[0];
var subnetkind = subnetip.kind();
var subnetrange = subnet[1];
var trusted = ip;
if (kind !== subnetkind) {
if (subnetkind === "ipv4" && !ip.isIPv4MappedAddress()) {
continue;
}
if (!ipconv) {
ipconv = subnetkind === "ipv4" ? ip.toIPv4Address() : ip.toIPv4MappedAddress();
}
trusted = ipconv;
}
if (trusted.match(subnetip, subnetrange)) {
return true;
}
}
return false;
};
}
function trustSingle(subnet) {
var subnetip = subnet[0];
var subnetkind = subnetip.kind();
var subnetisipv4 = subnetkind === "ipv4";
var subnetrange = subnet[1];
return function trust(addr) {
if (!isip(addr)) return false;
var ip = parseip(addr);
var kind = ip.kind();
if (kind !== subnetkind) {
if (subnetisipv4 && !ip.isIPv4MappedAddress()) {
return false;
}
ip = subnetisipv4 ? ip.toIPv4Address() : ip.toIPv4MappedAddress();
}
return ip.match(subnetip, subnetrange);
};
}
}
});
var require_utils32 = __commonJS2({
"node_modules/express/lib/utils.js"(exports2) {
"use strict";
var { METHODS } = require("node:http");
var contentType2 = require_content_type();
var etag = require_etag();
var mime = require_mime_types22();
var proxyaddr = require_proxy_addr();
var qs = require_lib3();
var querystring = require("querystring");
exports2.methods = METHODS.map((method) => method.toLowerCase());
exports2.etag = createETagGenerator({ weak: false });
exports2.wetag = createETagGenerator({ weak: true });
exports2.normalizeType = function(type) {
return ~type.indexOf("/") ? acceptParams(type) : { value: mime.lookup(type) || "application/octet-stream", params: {} };
};
exports2.normalizeTypes = function(types) {
return types.map(exports2.normalizeType);
};
function acceptParams(str) {
var length = str.length;
var colonIndex = str.indexOf(";");
var index2 = colonIndex === -1 ? length : colonIndex;
var ret = { value: str.slice(0, index2).trim(), quality: 1, params: {} };
while (index2 < length) {
var splitIndex = str.indexOf("=", index2);
if (splitIndex === -1) break;
var colonIndex = str.indexOf(";", index2);
var endIndex = colonIndex === -1 ? length : colonIndex;
if (splitIndex > endIndex) {
index2 = str.lastIndexOf(";", splitIndex - 1) + 1;
continue;
}
var key = str.slice(index2, splitIndex).trim();
var value = str.slice(splitIndex + 1, endIndex).trim();
if (key === "q") {
ret.quality = parseFloat(value);
} else {
ret.params[key] = value;
}
index2 = endIndex + 1;
}
return ret;
}
exports2.compileETag = function(val2) {
var fn;
if (typeof val2 === "function") {
return val2;
}
switch (val2) {
case true:
case "weak":
fn = exports2.wetag;
break;
case false:
break;
case "strong":
fn = exports2.etag;
break;
default:
throw new TypeError("unknown value for etag function: " + val2);
}
return fn;
};
exports2.compileQueryParser = function compileQueryParser(val2) {
var fn;
if (typeof val2 === "function") {
return val2;
}
switch (val2) {
case true:
case "simple":
fn = querystring.parse;
break;
case false:
break;
case "extended":
fn = parseExtendedQueryString;
break;
default:
throw new TypeError("unknown value for query parser function: " + val2);
}
return fn;
};
exports2.compileTrust = function(val2) {
if (typeof val2 === "function") return val2;
if (val2 === true) {
return function() {
return true;
};
}
if (typeof val2 === "number") {
return function(a, i) {
return i < val2;
};
}
if (typeof val2 === "string") {
val2 = val2.split(",").map(function(v) {
return v.trim();
});
}
return proxyaddr.compile(val2 || []);
};
exports2.setCharset = function setCharset(type, charset) {
if (!type || !charset) {
return type;
}
var parsed = contentType2.parse(type);
parsed.parameters.charset = charset;
return contentType2.format(parsed);
};
function createETagGenerator(options) {
return function generateETag(body, encoding) {
var buf = !Buffer.isBuffer(body) ? Buffer.from(body, encoding) : body;
return etag(buf, options);
};
}
function parseExtendedQueryString(str) {
return qs.parse(str, {
allowPrototypes: true
});
}
}
});
var require_wrappy = __commonJS2({
"node_modules/wrappy/wrappy.js"(exports2, module2) {
module2.exports = wrappy;
function wrappy(fn, cb) {
if (fn && cb) return wrappy(fn)(cb);
if (typeof fn !== "function")
throw new TypeError("need wrapper function");
Object.keys(fn).forEach(function(k) {
wrapper[k] = fn[k];
});
return wrapper;
function wrapper() {
var args = new Array(arguments.length);
for (var i = 0; i < args.length; i++) {
args[i] = arguments[i];
}
var ret = fn.apply(this, args);
var cb2 = args[args.length - 1];
if (typeof ret === "function" && ret !== cb2) {
Object.keys(cb2).forEach(function(k) {
ret[k] = cb2[k];
});
}
return ret;
}
}
}
});
var require_once = __commonJS2({
"node_modules/once/once.js"(exports2, module2) {
var wrappy = require_wrappy();
module2.exports = wrappy(once);
module2.exports.strict = wrappy(onceStrict);
once.proto = once(function() {
Object.defineProperty(Function.prototype, "once", {
value: function() {
return once(this);
},
configurable: true
});
Object.defineProperty(Function.prototype, "onceStrict", {
value: function() {
return onceStrict(this);
},
configurable: true
});
});
function once(fn) {
var f = function() {
if (f.called) return f.value;
f.called = true;
return f.value = fn.apply(this, arguments);
};
f.called = false;
return f;
}
function onceStrict(fn) {
var f = function() {
if (f.called)
throw new Error(f.onceError);
f.called = true;
return f.value = fn.apply(this, arguments);
};
var name = fn.name || "Function wrapped with `once`";
f.onceError = name + " shouldn't be called more than once";
f.called = false;
return f;
}
}
});
var require_is_promise = __commonJS2({
"node_modules/is-promise/index.js"(exports2, module2) {
module2.exports = isPromise;
module2.exports.default = isPromise;
function isPromise(obj) {
return !!obj && (typeof obj === "object" || typeof obj === "function") && typeof obj.then === "function";
}
}
});
var require_dist = __commonJS2({
"node_modules/path-to-regexp/dist/index.js"(exports2) {
"use strict";
Object.defineProperty(exports2, "__esModule", { value: true });
exports2.TokenData = void 0;
exports2.parse = parse8;
exports2.compile = compile4;
exports2.match = match;
exports2.pathToRegexp = pathToRegexp;
exports2.stringify = stringify2;
var DEFAULT_DELIMITER = "/";
var NOOP_VALUE = (value) => value;
var ID_START = /^[$_\p{ID_Start}]$/u;
var ID_CONTINUE = /^[$\u200c\u200d\p{ID_Continue}]$/u;
var DEBUG_URL = "https://git.new/pathToRegexpError";
var SIMPLE_TOKENS = {
// Groups.
"{": "{",
"}": "}",
// Reserved.
"(": "(",
")": ")",
"[": "[",
"]": "]",
"+": "+",
"?": "?",
"!": "!"
};
function escapeText2(str) {
return str.replace(/[{}()\[\]+?!:*]/g, "\\$&");
}
function escape22(str) {
return str.replace(/[.+*?^${}()[\]|/\\]/g, "\\$&");
}
function* lexer(str) {
const chars = [...str];
let i = 0;
function name() {
let value = "";
if (ID_START.test(chars[++i])) {
value += chars[i];
while (ID_CONTINUE.test(chars[++i])) {
value += chars[i];
}
} else if (chars[i] === '"') {
let pos = i;
while (i < chars.length) {
if (chars[++i] === '"') {
i++;
pos = 0;
break;
}
if (chars[i] === "\\") {
value += chars[++i];
} else {
value += chars[i];
}
}
if (pos) {
throw new TypeError(`Unterminated quote at ${pos}: ${DEBUG_URL}`);
}
}
if (!value) {
throw new TypeError(`Missing parameter name at ${i}: ${DEBUG_URL}`);
}
return value;
}
while (i < chars.length) {
const value = chars[i];
const type = SIMPLE_TOKENS[value];
if (type) {
yield { type, index: i++, value };
} else if (value === "\\") {
yield { type: "ESCAPED", index: i++, value: chars[i++] };
} else if (value === ":") {
const value2 = name();
yield { type: "PARAM", index: i, value: value2 };
} else if (value === "*") {
const value2 = name();
yield { type: "WILDCARD", index: i, value: value2 };
} else {
yield { type: "CHAR", index: i, value: chars[i++] };
}
}
return { type: "END", index: i, value: "" };
}
var Iter = class {
constructor(tokens) {
this.tokens = tokens;
}
peek() {
if (!this._peek) {
const next2 = this.tokens.next();
this._peek = next2.value;
}
return this._peek;
}
tryConsume(type) {
const token = this.peek();
if (token.type !== type)
return;
this._peek = void 0;
return token.value;
}
consume(type) {
const value = this.tryConsume(type);
if (value !== void 0)
return value;
const { type: nextType, index: index2 } = this.peek();
throw new TypeError(`Unexpected ${nextType} at ${index2}, expected ${type}: ${DEBUG_URL}`);
}
text() {
let result = "";
let value;
while (value = this.tryConsume("CHAR") || this.tryConsume("ESCAPED")) {
result += value;
}
return result;
}
};
var TokenData = class {
constructor(tokens) {
this.tokens = tokens;
}
};
exports2.TokenData = TokenData;
function parse8(str, options = {}) {
const { encodePath = NOOP_VALUE } = options;
const it = new Iter(lexer(str));
function consume(endType) {
const tokens2 = [];
while (true) {
const path = it.text();
if (path)
tokens2.push({ type: "text", value: encodePath(path) });
const param = it.tryConsume("PARAM");
if (param) {
tokens2.push({
type: "param",
name: param
});
continue;
}
const wildcard = it.tryConsume("WILDCARD");
if (wildcard) {
tokens2.push({
type: "wildcard",
name: wildcard
});
continue;
}
const open = it.tryConsume("{");
if (open) {
tokens2.push({
type: "group",
tokens: consume("}")
});
continue;
}
it.consume(endType);
return tokens2;
}
}
const tokens = consume("END");
return new TokenData(tokens);
}
function compile4(path, options = {}) {
const { encode: encode3 = encodeURIComponent, delimiter = DEFAULT_DELIMITER } = options;
const data2 = path instanceof TokenData ? path : parse8(path, options);
const fn = tokensToFunction(data2.tokens, delimiter, encode3);
return function path2(data22 = {}) {
const [path3, ...missing] = fn(data22);
if (missing.length) {
throw new TypeError(`Missing parameters: ${missing.join(", ")}`);
}
return path3;
};
}
function tokensToFunction(tokens, delimiter, encode3) {
const encoders = tokens.map((token) => tokenToFunction(token, delimiter, encode3));
return (data2) => {
const result = [""];
for (const encoder of encoders) {
const [value, ...extras] = encoder(data2);
result[0] += value;
result.push(...extras);
}
return result;
};
}
function tokenToFunction(token, delimiter, encode3) {
if (token.type === "text")
return () => [token.value];
if (token.type === "group") {
const fn = tokensToFunction(token.tokens, delimiter, encode3);
return (data2) => {
const [value, ...missing] = fn(data2);
if (!missing.length)
return [value];
return [""];
};
}
const encodeValue = encode3 || NOOP_VALUE;
if (token.type === "wildcard" && encode3 !== false) {
return (data2) => {
const value = data2[token.name];
if (value == null)
return ["", token.name];
if (!Array.isArray(value) || value.length === 0) {
throw new TypeError(`Expected "${token.name}" to be a non-empty array`);
}
return [
value.map((value2, index2) => {
if (typeof value2 !== "string") {
throw new TypeError(`Expected "${token.name}/${index2}" to be a string`);
}
return encodeValue(value2);
}).join(delimiter)
];
};
}
return (data2) => {
const value = data2[token.name];
if (value == null)
return ["", token.name];
if (typeof value !== "string") {
throw new TypeError(`Expected "${token.name}" to be a string`);
}
return [encodeValue(value)];
};
}
function match(path, options = {}) {
const { decode = decodeURIComponent, delimiter = DEFAULT_DELIMITER } = options;
const { regexp, keys } = pathToRegexp(path, options);
const decoders = keys.map((key) => {
if (decode === false)
return NOOP_VALUE;
if (key.type === "param")
return decode;
return (value) => value.split(delimiter).map(decode);
});
return function match2(input) {
const m = regexp.exec(input);
if (!m)
return false;
const path2 = m[0];
const params = /* @__PURE__ */ Object.create(null);
for (let i = 1; i < m.length; i++) {
if (m[i] === void 0)
continue;
const key = keys[i - 1];
const decoder = decoders[i - 1];
params[key.name] = decoder(m[i]);
}
return { path: path2, params };
};
}
function pathToRegexp(path, options = {}) {
const { delimiter = DEFAULT_DELIMITER, end: end2 = true, sensitive = false, trailing = true } = options;
const keys = [];
const sources = [];
const flags = sensitive ? "" : "i";
const paths = Array.isArray(path) ? path : [path];
const items = paths.map((path2) => path2 instanceof TokenData ? path2 : parse8(path2, options));
for (const { tokens } of items) {
for (const seq of flatten(tokens, 0, [])) {
const regexp2 = sequenceToRegExp(seq, delimiter, keys);
sources.push(regexp2);
}
}
let pattern = `^(?:${sources.join("|")})`;
if (trailing)
pattern += `(?:${escape22(delimiter)}$)?`;
pattern += end2 ? "$" : `(?=${escape22(delimiter)}|$)`;
const regexp = new RegExp(pattern, flags);
return { regexp, keys };
}
function* flatten(tokens, index2, init) {
if (index2 === tokens.length) {
return yield init;
}
const token = tokens[index2];
if (token.type === "group") {
const fork = init.slice();
for (const seq of flatten(token.tokens, 0, fork)) {
yield* flatten(tokens, index2 + 1, seq);
}
} else {
init.push(token);
}
yield* flatten(tokens, index2 + 1, init);
}
function sequenceToRegExp(tokens, delimiter, keys) {
let result = "";
let backtrack = "";
let isSafeSegmentParam = true;
for (let i = 0; i < tokens.length; i++) {
const token = tokens[i];
if (token.type === "text") {
result += escape22(token.value);
backtrack += token.value;
isSafeSegmentParam || (isSafeSegmentParam = token.value.includes(delimiter));
continue;
}
if (token.type === "param" || token.type === "wildcard") {
if (!isSafeSegmentParam && !backtrack) {
throw new TypeError(`Missing text after "${token.name}": ${DEBUG_URL}`);
}
if (token.type === "param") {
result += `(${negate(delimiter, isSafeSegmentParam ? "" : backtrack)}+)`;
} else {
result += `([\\s\\S]+)`;
}
keys.push(token);
backtrack = "";
isSafeSegmentParam = false;
continue;
}
}
return result;
}
function negate(delimiter, backtrack) {
if (backtrack.length < 2) {
if (delimiter.length < 2)
return `[^${escape22(delimiter + backtrack)}]`;
return `(?:(?!${escape22(delimiter)})[^${escape22(backtrack)}])`;
}
if (delimiter.length < 2) {
return `(?:(?!${escape22(backtrack)})[^${escape22(delimiter)}])`;
}
return `(?:(?!${escape22(backtrack)}|${escape22(delimiter)})[\\s\\S])`;
}
function stringify2(data2) {
return data2.tokens.map(function stringifyToken(token, index2, tokens) {
if (token.type === "text")
return escapeText2(token.value);
if (token.type === "group") {
return `{${token.tokens.map(stringifyToken).join("")}}`;
}
const isSafe = isNameSafe(token.name) && isNextNameSafe(tokens[index2 + 1]);
const key = isSafe ? token.name : JSON.stringify(token.name);
if (token.type === "param")
return `:${key}`;
if (token.type === "wildcard")
return `*${key}`;
throw new TypeError(`Unexpected token: ${token}`);
}).join("");
}
function isNameSafe(name) {
const [first2, ...rest] = name;
if (!ID_START.test(first2))
return false;
return rest.every((char) => ID_CONTINUE.test(char));
}
function isNextNameSafe(token) {
if ((token === null || token === void 0 ? void 0 : token.type) !== "text")
return true;
return !ID_CONTINUE.test(token.value[0]);
}
}
});
var require_layer = __commonJS2({
"node_modules/router/lib/layer.js"(exports2, module2) {
"use strict";
var isPromise = require_is_promise();
var pathRegexp = require_dist();
var debug = require_src2()("router:layer");
var deprecate = require_depd()("router");
var TRAILING_SLASH_REGEXP = /\/+$/;
var MATCHING_GROUP_REGEXP = /\((?:\?<(.*?)>)?(?!\?)/g;
module2.exports = Layer;
function Layer(path, options, fn) {
if (!(this instanceof Layer)) {
return new Layer(path, options, fn);
}
debug("new %o", path);
const opts = options || {};
this.handle = fn;
this.keys = [];
this.name = fn.name || "<anonymous>";
this.params = void 0;
this.path = void 0;
this.slash = path === "/" && opts.end === false;
function matcher(_path) {
if (_path instanceof RegExp) {
const keys = [];
let name = 0;
let m;
while (m = MATCHING_GROUP_REGEXP.exec(_path.source)) {
keys.push({
name: m[1] || name++,
offset: m.index
});
}
return function regexpMatcher(p) {
const match = _path.exec(p);
if (!match) {
return false;
}
const params = {};
for (let i = 1; i < match.length; i++) {
const key = keys[i - 1];
const prop2 = key.name;
const val2 = decodeParam(match[i]);
if (val2 !== void 0) {
params[prop2] = val2;
}
}
return {
params,
path: match[0]
};
};
}
return pathRegexp.match(opts.strict ? _path : loosen(_path), {
sensitive: opts.sensitive,
end: opts.end,
trailing: !opts.strict,
decode: decodeParam
});
}
this.matchers = Array.isArray(path) ? path.map(matcher) : [matcher(path)];
}
Layer.prototype.handleError = function handleError(error, req, res, next2) {
const fn = this.handle;
if (fn.length !== 4) {
return next2(error);
}
try {
const ret = fn(error, req, res, next2);
if (isPromise(ret)) {
if (!(ret instanceof Promise)) {
deprecate("handlers that are Promise-like are deprecated, use a native Promise instead");
}
ret.then(null, function(error2) {
next2(error2 || new Error("Rejected promise"));
});
}
} catch (err2) {
next2(err2);
}
};
Layer.prototype.handleRequest = function handleRequest(req, res, next2) {
const fn = this.handle;
if (fn.length > 3) {
return next2();
}
try {
const ret = fn(req, res, next2);
if (isPromise(ret)) {
if (!(ret instanceof Promise)) {
deprecate("handlers that are Promise-like are deprecated, use a native Promise instead");
}
ret.then(null, function(error) {
next2(error || new Error("Rejected promise"));
});
}
} catch (err2) {
next2(err2);
}
};
Layer.prototype.match = function match(path) {
let match2;
if (path != null) {
if (this.slash) {
this.params = {};
this.path = "";
return true;
}
let i = 0;
while (!match2 && i < this.matchers.length) {
match2 = this.matchers[i](path);
i++;
}
}
if (!match2) {
this.params = void 0;
this.path = void 0;
return false;
}
this.params = match2.params;
this.path = match2.path;
this.keys = Object.keys(match2.params);
return true;
};
function decodeParam(val2) {
if (typeof val2 !== "string" || val2.length === 0) {
return val2;
}
try {
return decodeURIComponent(val2);
} catch (err2) {
if (err2 instanceof URIError) {
err2.message = "Failed to decode param '" + val2 + "'";
err2.status = 400;
}
throw err2;
}
}
function loosen(path) {
if (path instanceof RegExp || path === "/") {
return path;
}
return Array.isArray(path) ? path.map(function(p) {
return loosen(p);
}) : String(path).replace(TRAILING_SLASH_REGEXP, "");
}
}
});
var require_route = __commonJS2({
"node_modules/router/lib/route.js"(exports2, module2) {
"use strict";
var debug = require_src2()("router:route");
var Layer = require_layer();
var { METHODS } = require("node:http");
var slice2 = Array.prototype.slice;
var flatten = Array.prototype.flat;
var methods = METHODS.map((method) => method.toLowerCase());
module2.exports = Route;
function Route(path) {
debug("new %o", path);
this.path = path;
this.stack = [];
this.methods = /* @__PURE__ */ Object.create(null);
}
Route.prototype._handlesMethod = function _handlesMethod(method) {
if (this.methods._all) {
return true;
}
let name = typeof method === "string" ? method.toLowerCase() : method;
if (name === "head" && !this.methods.head) {
name = "get";
}
return Boolean(this.methods[name]);
};
Route.prototype._methods = function _methods() {
const methods2 = Object.keys(this.methods);
if (this.methods.get && !this.methods.head) {
methods2.push("head");
}
for (let i = 0; i < methods2.length; i++) {
methods2[i] = methods2[i].toUpperCase();
}
return methods2;
};
Route.prototype.dispatch = function dispatch(req, res, done) {
let idx = 0;
const stack = this.stack;
let sync = 0;
if (stack.length === 0) {
return done();
}
let method = typeof req.method === "string" ? req.method.toLowerCase() : req.method;
if (method === "head" && !this.methods.head) {
method = "get";
}
req.route = this;
next2();
function next2(err2) {
if (err2 && err2 === "route") {
return done();
}
if (err2 && err2 === "router") {
return done(err2);
}
if (idx >= stack.length) {
return done(err2);
}
if (++sync > 100) {
return setImmediate(next2, err2);
}
let layer;
let match;
while (match !== true && idx < stack.length) {
layer = stack[idx++];
match = !layer.method || layer.method === method;
}
if (match !== true) {
return done(err2);
}
if (err2) {
layer.handleError(err2, req, res, next2);
} else {
layer.handleRequest(req, res, next2);
}
sync = 0;
}
};
Route.prototype.all = function all3(handler) {
const callbacks = flatten.call(slice2.call(arguments), Infinity);
if (callbacks.length === 0) {
throw new TypeError("argument handler is required");
}
for (let i = 0; i < callbacks.length; i++) {
const fn = callbacks[i];
if (typeof fn !== "function") {
throw new TypeError("argument handler must be a function");
}
const layer = Layer("/", {}, fn);
layer.method = void 0;
this.methods._all = true;
this.stack.push(layer);
}
return this;
};
methods.forEach(function(method) {
Route.prototype[method] = function(handler) {
const callbacks = flatten.call(slice2.call(arguments), Infinity);
if (callbacks.length === 0) {
throw new TypeError("argument handler is required");
}
for (let i = 0; i < callbacks.length; i++) {
const fn = callbacks[i];
if (typeof fn !== "function") {
throw new TypeError("argument handler must be a function");
}
debug("%s %s", method, this.path);
const layer = Layer("/", {}, fn);
layer.method = method;
this.methods[method] = true;
this.stack.push(layer);
}
return this;
};
});
}
});
var require_router = __commonJS2({
"node_modules/router/index.js"(exports2, module2) {
"use strict";
var isPromise = require_is_promise();
var Layer = require_layer();
var { METHODS } = require("node:http");
var parseUrl = require_parseurl();
var Route = require_route();
var debug = require_src2()("router");
var deprecate = require_depd()("router");
var slice2 = Array.prototype.slice;
var flatten = Array.prototype.flat;
var methods = METHODS.map((method) => method.toLowerCase());
module2.exports = Router;
module2.exports.Route = Route;
function Router(options) {
if (!(this instanceof Router)) {
return new Router(options);
}
const opts = options || {};
function router(req, res, next2) {
router.handle(req, res, next2);
}
Object.setPrototypeOf(router, this);
router.caseSensitive = opts.caseSensitive;
router.mergeParams = opts.mergeParams;
router.params = {};
router.strict = opts.strict;
router.stack = [];
return router;
}
Router.prototype = function() {
};
Router.prototype.param = function param(name, fn) {
if (!name) {
throw new TypeError("argument name is required");
}
if (typeof name !== "string") {
throw new TypeError("argument name must be a string");
}
if (!fn) {
throw new TypeError("argument fn is required");
}
if (typeof fn !== "function") {
throw new TypeError("argument fn must be a function");
}
let params = this.params[name];
if (!params) {
params = this.params[name] = [];
}
params.push(fn);
return this;
};
Router.prototype.handle = function handle(req, res, callback) {
if (!callback) {
throw new TypeError("argument callback is required");
}
debug("dispatching %s %s", req.method, req.url);
let idx = 0;
let methods2;
const protohost = getProtohost(req.url) || "";
let removed = "";
const self2 = this;
let slashAdded = false;
let sync = 0;
const paramcalled = {};
const stack = this.stack;
const parentParams = req.params;
const parentUrl = req.baseUrl || "";
let done = restore(callback, req, "baseUrl", "next", "params");
req.next = next2;
if (req.method === "OPTIONS") {
methods2 = [];
done = wrap2(done, generateOptionsResponder(res, methods2));
}
req.baseUrl = parentUrl;
req.originalUrl = req.originalUrl || req.url;
next2();
function next2(err2) {
let layerError = err2 === "route" ? null : err2;
if (slashAdded) {
req.url = req.url.slice(1);
slashAdded = false;
}
if (removed.length !== 0) {
req.baseUrl = parentUrl;
req.url = protohost + removed + req.url.slice(protohost.length);
removed = "";
}
if (layerError === "router") {
setImmediate(done, null);
return;
}
if (idx >= stack.length) {
setImmediate(done, layerError);
return;
}
if (++sync > 100) {
return setImmediate(next2, err2);
}
const path = getPathname(req);
if (path == null) {
return done(layerError);
}
let layer;
let match;
let route;
while (match !== true && idx < stack.length) {
layer = stack[idx++];
match = matchLayer(layer, path);
route = layer.route;
if (typeof match !== "boolean") {
layerError = layerError || match;
}
if (match !== true) {
continue;
}
if (!route) {
continue;
}
if (layerError) {
match = false;
continue;
}
const method = req.method;
const hasMethod = route._handlesMethod(method);
if (!hasMethod && method === "OPTIONS" && methods2) {
methods2.push.apply(methods2, route._methods());
}
if (!hasMethod && method !== "HEAD") {
match = false;
}
}
if (match !== true) {
return done(layerError);
}
if (route) {
req.route = route;
}
req.params = self2.mergeParams ? mergeParams(layer.params, parentParams) : layer.params;
const layerPath = layer.path;
processParams(self2.params, layer, paramcalled, req, res, function(err3) {
if (err3) {
next2(layerError || err3);
} else if (route) {
layer.handleRequest(req, res, next2);
} else {
trimPrefix(layer, layerError, layerPath, path);
}
sync = 0;
});
}
function trimPrefix(layer, layerError, layerPath, path) {
if (layerPath.length !== 0) {
if (layerPath !== path.substring(0, layerPath.length)) {
next2(layerError);
return;
}
const c = path[layerPath.length];
if (c && c !== "/") {
next2(layerError);
return;
}
debug("trim prefix (%s) from url %s", layerPath, req.url);
removed = layerPath;
req.url = protohost + req.url.slice(protohost.length + removed.length);
if (!protohost && req.url[0] !== "/") {
req.url = "/" + req.url;
slashAdded = true;
}
req.baseUrl = parentUrl + (removed[removed.length - 1] === "/" ? removed.substring(0, removed.length - 1) : removed);
}
debug("%s %s : %s", layer.name, layerPath, req.originalUrl);
if (layerError) {
layer.handleError(layerError, req, res, next2);
} else {
layer.handleRequest(req, res, next2);
}
}
};
Router.prototype.use = function use(handler) {
let offset = 0;
let path = "/";
if (typeof handler !== "function") {
let arg = handler;
while (Array.isArray(arg) && arg.length !== 0) {
arg = arg[0];
}
if (typeof arg !== "function") {
offset = 1;
path = handler;
}
}
const callbacks = flatten.call(slice2.call(arguments, offset), Infinity);
if (callbacks.length === 0) {
throw new TypeError("argument handler is required");
}
for (let i = 0; i < callbacks.length; i++) {
const fn = callbacks[i];
if (typeof fn !== "function") {
throw new TypeError("argument handler must be a function");
}
debug("use %o %s", path, fn.name || "<anonymous>");
const layer = new Layer(path, {
sensitive: this.caseSensitive,
strict: false,
end: false
}, fn);
layer.route = void 0;
this.stack.push(layer);
}
return this;
};
Router.prototype.route = function route(path) {
const route2 = new Route(path);
const layer = new Layer(path, {
sensitive: this.caseSensitive,
strict: this.strict,
end: true
}, handle);
function handle(req, res, next2) {
route2.dispatch(req, res, next2);
}
layer.route = route2;
this.stack.push(layer);
return route2;
};
methods.concat("all").forEach(function(method) {
Router.prototype[method] = function(path) {
const route = this.route(path);
route[method].apply(route, slice2.call(arguments, 1));
return this;
};
});
function generateOptionsResponder(res, methods2) {
return function onDone(fn, err2) {
if (err2 || methods2.length === 0) {
return fn(err2);
}
trySendOptionsResponse(res, methods2, fn);
};
}
function getPathname(req) {
try {
return parseUrl(req).pathname;
} catch (err2) {
return void 0;
}
}
function getProtohost(url2) {
if (typeof url2 !== "string" || url2.length === 0 || url2[0] === "/") {
return void 0;
}
const searchIndex = url2.indexOf("?");
const pathLength = searchIndex !== -1 ? searchIndex : url2.length;
const fqdnIndex = url2.substring(0, pathLength).indexOf("://");
return fqdnIndex !== -1 ? url2.substring(0, url2.indexOf("/", 3 + fqdnIndex)) : void 0;
}
function matchLayer(layer, path) {
try {
return layer.match(path);
} catch (err2) {
return err2;
}
}
function mergeParams(params, parent2) {
if (typeof parent2 !== "object" || !parent2) {
return params;
}
const obj = Object.assign({}, parent2);
if (!(0 in params) || !(0 in parent2)) {
return Object.assign(obj, params);
}
let i = 0;
let o = 0;
while (i in params) {
i++;
}
while (o in parent2) {
o++;
}
for (i--; i >= 0; i--) {
params[i + o] = params[i];
if (i < o) {
delete params[i];
}
}
return Object.assign(obj, params);
}
function processParams(params, layer, called, req, res, done) {
const keys = layer.keys;
if (!keys || keys.length === 0) {
return done();
}
let i = 0;
let paramIndex = 0;
let key;
let paramVal;
let paramCallbacks;
let paramCalled;
function param(err2) {
if (err2) {
return done(err2);
}
if (i >= keys.length) {
return done();
}
paramIndex = 0;
key = keys[i++];
paramVal = req.params[key];
paramCallbacks = params[key];
paramCalled = called[key];
if (paramVal === void 0 || !paramCallbacks) {
return param();
}
if (paramCalled && (paramCalled.match === paramVal || paramCalled.error && paramCalled.error !== "route")) {
req.params[key] = paramCalled.value;
return param(paramCalled.error);
}
called[key] = paramCalled = {
error: null,
match: paramVal,
value: paramVal
};
paramCallback();
}
function paramCallback(err2) {
const fn = paramCallbacks[paramIndex++];
paramCalled.value = req.params[key];
if (err2) {
paramCalled.error = err2;
param(err2);
return;
}
if (!fn) return param();
try {
const ret = fn(req, res, paramCallback, paramVal, key);
if (isPromise(ret)) {
if (!(ret instanceof Promise)) {
deprecate("parameters that are Promise-like are deprecated, use a native Promise instead");
}
ret.then(null, function(error) {
paramCallback(error || new Error("Rejected promise"));
});
}
} catch (e) {
paramCallback(e);
}
}
param();
}
function restore(fn, obj) {
const props = new Array(arguments.length - 2);
const vals = new Array(arguments.length - 2);
for (let i = 0; i < props.length; i++) {
props[i] = arguments[i + 2];
vals[i] = obj[props[i]];
}
return function() {
for (let i = 0; i < props.length; i++) {
obj[props[i]] = vals[i];
}
return fn.apply(this, arguments);
};
}
function sendOptionsResponse(res, methods2) {
const options = /* @__PURE__ */ Object.create(null);
for (let i = 0; i < methods2.length; i++) {
options[methods2[i]] = true;
}
const allow = Object.keys(options).sort().join(", ");
res.setHeader("Allow", allow);
res.setHeader("Content-Length", Buffer.byteLength(allow));
res.setHeader("Content-Type", "text/plain");
res.setHeader("X-Content-Type-Options", "nosniff");
res.end(allow);
}
function trySendOptionsResponse(res, methods2, next2) {
try {
sendOptionsResponse(res, methods2);
} catch (err2) {
next2(err2);
}
}
function wrap2(old, fn) {
return function proxy() {
const args = new Array(arguments.length + 1);
args[0] = old;
for (let i = 0, len = arguments.length; i < len; i++) {
args[i + 1] = arguments[i];
}
fn.apply(this, args);
};
}
}
});
var require_application = __commonJS2({
"node_modules/express/lib/application.js"(exports2, module2) {
"use strict";
var finalhandler = require_finalhandler();
var debug = require_src2()("express:application");
var View = require_view();
var http2 = require("node:http");
var methods = require_utils32().methods;
var compileETag = require_utils32().compileETag;
var compileQueryParser = require_utils32().compileQueryParser;
var compileTrust = require_utils32().compileTrust;
var resolve = require("node:path").resolve;
var once = require_once();
var Router = require_router();
var slice2 = Array.prototype.slice;
var flatten = Array.prototype.flat;
var app = exports2 = module2.exports = {};
var trustProxyDefaultSymbol = "@@symbol:trust_proxy_default";
app.init = function init() {
var router = null;
this.cache = /* @__PURE__ */ Object.create(null);
this.engines = /* @__PURE__ */ Object.create(null);
this.settings = /* @__PURE__ */ Object.create(null);
this.defaultConfiguration();
Object.defineProperty(this, "router", {
configurable: true,
enumerable: true,
get: function getrouter() {
if (router === null) {
router = new Router({
caseSensitive: this.enabled("case sensitive routing"),
strict: this.enabled("strict routing")
});
}
return router;
}
});
};
app.defaultConfiguration = function defaultConfiguration() {
var env = "production";
this.enable("x-powered-by");
this.set("etag", "weak");
this.set("env", env);
this.set("query parser", "simple");
this.set("subdomain offset", 2);
this.set("trust proxy", false);
Object.defineProperty(this.settings, trustProxyDefaultSymbol, {
configurable: true,
value: true
});
debug("booting in %s mode", env);
this.on("mount", function onmount(parent2) {
if (this.settings[trustProxyDefaultSymbol] === true && typeof parent2.settings["trust proxy fn"] === "function") {
delete this.settings["trust proxy"];
delete this.settings["trust proxy fn"];
}
Object.setPrototypeOf(this.request, parent2.request);
Object.setPrototypeOf(this.response, parent2.response);
Object.setPrototypeOf(this.engines, parent2.engines);
Object.setPrototypeOf(this.settings, parent2.settings);
});
this.locals = /* @__PURE__ */ Object.create(null);
this.mountpath = "/";
this.locals.settings = this.settings;
this.set("view", View);
this.set("views", resolve("views"));
this.set("jsonp callback name", "callback");
if (env === "production") {
this.enable("view cache");
}
};
app.handle = function handle(req, res, callback) {
var done = callback || finalhandler(req, res, {
env: this.get("env"),
onerror: logerror.bind(this)
});
if (this.enabled("x-powered-by")) {
res.setHeader("X-Powered-By", "Express");
}
req.res = res;
res.req = req;
Object.setPrototypeOf(req, this.request);
Object.setPrototypeOf(res, this.response);
if (!res.locals) {
res.locals = /* @__PURE__ */ Object.create(null);
}
this.router.handle(req, res, done);
};
app.use = function use(fn) {
var offset = 0;
var path = "/";
if (typeof fn !== "function") {
var arg = fn;
while (Array.isArray(arg) && arg.length !== 0) {
arg = arg[0];
}
if (typeof arg !== "function") {
offset = 1;
path = fn;
}
}
var fns = flatten.call(slice2.call(arguments, offset), Infinity);
if (fns.length === 0) {
throw new TypeError("app.use() requires a middleware function");
}
var router = this.router;
fns.forEach(function(fn2) {
if (!fn2 || !fn2.handle || !fn2.set) {
return router.use(path, fn2);
}
debug(".use app under %s", path);
fn2.mountpath = path;
fn2.parent = this;
router.use(path, function mounted_app(req, res, next2) {
var orig = req.app;
fn2.handle(req, res, function(err2) {
Object.setPrototypeOf(req, orig.request);
Object.setPrototypeOf(res, orig.response);
next2(err2);
});
});
fn2.emit("mount", this);
}, this);
return this;
};
app.route = function route(path) {
return this.router.route(path);
};
app.engine = function engine(ext, fn) {
if (typeof fn !== "function") {
throw new Error("callback function required");
}
var extension = ext[0] !== "." ? "." + ext : ext;
this.engines[extension] = fn;
return this;
};
app.param = function param(name, fn) {
if (Array.isArray(name)) {
for (var i = 0; i < name.length; i++) {
this.param(name[i], fn);
}
return this;
}
this.router.param(name, fn);
return this;
};
app.set = function set(setting, val2) {
if (arguments.length === 1) {
return this.settings[setting];
}
debug('set "%s" to %o', setting, val2);
this.settings[setting] = val2;
switch (setting) {
case "etag":
this.set("etag fn", compileETag(val2));
break;
case "query parser":
this.set("query parser fn", compileQueryParser(val2));
break;
case "trust proxy":
this.set("trust proxy fn", compileTrust(val2));
Object.defineProperty(this.settings, trustProxyDefaultSymbol, {
configurable: true,
value: false
});
break;
}
return this;
};
app.path = function path() {
return this.parent ? this.parent.path() + this.mountpath : "";
};
app.enabled = function enabled(setting) {
return Boolean(this.set(setting));
};
app.disabled = function disabled(setting) {
return !this.set(setting);
};
app.enable = function enable(setting) {
return this.set(setting, true);
};
app.disable = function disable(setting) {
return this.set(setting, false);
};
methods.forEach(function(method) {
app[method] = function(path) {
if (method === "get" && arguments.length === 1) {
return this.set(path);
}
var route = this.route(path);
route[method].apply(route, slice2.call(arguments, 1));
return this;
};
});
app.all = function all3(path) {
var route = this.route(path);
var args = slice2.call(arguments, 1);
for (var i = 0; i < methods.length; i++) {
route[methods[i]].apply(route, args);
}
return this;
};
app.render = function render3(name, options, callback) {
var cache = this.cache;
var done = callback;
var engines = this.engines;
var opts = options;
var view;
if (typeof options === "function") {
done = options;
opts = {};
}
var renderOptions = { ...this.locals, ...opts._locals, ...opts };
if (renderOptions.cache == null) {
renderOptions.cache = this.enabled("view cache");
}
if (renderOptions.cache) {
view = cache[name];
}
if (!view) {
var View2 = this.get("view");
view = new View2(name, {
defaultEngine: this.get("view engine"),
root: this.get("views"),
engines
});
if (!view.path) {
var dirs = Array.isArray(view.root) && view.root.length > 1 ? 'directories "' + view.root.slice(0, -1).join('", "') + '" or "' + view.root[view.root.length - 1] + '"' : 'directory "' + view.root + '"';
var err2 = new Error('Failed to lookup view "' + name + '" in views ' + dirs);
err2.view = view;
return done(err2);
}
if (renderOptions.cache) {
cache[name] = view;
}
}
tryRender(view, renderOptions, done);
};
app.listen = function listen() {
var server = http2.createServer(this);
var args = Array.prototype.slice.call(arguments);
if (typeof args[args.length - 1] === "function") {
var done = args[args.length - 1] = once(args[args.length - 1]);
server.once("error", done);
}
return server.listen.apply(server, args);
};
function logerror(err2) {
if (this.get("env") !== "test") console.error(err2.stack || err2.toString());
}
function tryRender(view, options, callback) {
try {
view.render(options, callback);
} catch (err2) {
callback(err2);
}
}
}
});
var require_charset = __commonJS2({
"node_modules/negotiator/lib/charset.js"(exports2, module2) {
"use strict";
module2.exports = preferredCharsets;
module2.exports.preferredCharsets = preferredCharsets;
var simpleCharsetRegExp = /^\s*([^\s;]+)\s*(?:;(.*))?$/;
function parseAcceptCharset(accept) {
var accepts = accept.split(",");
for (var i = 0, j = 0; i < accepts.length; i++) {
var charset = parseCharset(accepts[i].trim(), i);
if (charset) {
accepts[j++] = charset;
}
}
accepts.length = j;
return accepts;
}
function parseCharset(str, i) {
var match = simpleCharsetRegExp.exec(str);
if (!match) return null;
var charset = match[1];
var q = 1;
if (match[2]) {
var params = match[2].split(";");
for (var j = 0; j < params.length; j++) {
var p = params[j].trim().split("=");
if (p[0] === "q") {
q = parseFloat(p[1]);
break;
}
}
}
return {
charset,
q,
i
};
}
function getCharsetPriority(charset, accepted, index2) {
var priority = { o: -1, q: 0, s: 0 };
for (var i = 0; i < accepted.length; i++) {
var spec = specify(charset, accepted[i], index2);
if (spec && (priority.s - spec.s || priority.q - spec.q || priority.o - spec.o) < 0) {
priority = spec;
}
}
return priority;
}
function specify(charset, spec, index2) {
var s = 0;
if (spec.charset.toLowerCase() === charset.toLowerCase()) {
s |= 1;
} else if (spec.charset !== "*") {
return null;
}
return {
i: index2,
o: spec.i,
q: spec.q,
s
};
}
function preferredCharsets(accept, provided) {
var accepts = parseAcceptCharset(accept === void 0 ? "*" : accept || "");
if (!provided) {
return accepts.filter(isQuality).sort(compareSpecs).map(getFullCharset);
}
var priorities = provided.map(function getPriority(type, index2) {
return getCharsetPriority(type, accepts, index2);
});
return priorities.filter(isQuality).sort(compareSpecs).map(function getCharset(priority) {
return provided[priorities.indexOf(priority)];
});
}
function compareSpecs(a, b) {
return b.q - a.q || b.s - a.s || a.o - b.o || a.i - b.i || 0;
}
function getFullCharset(spec) {
return spec.charset;
}
function isQuality(spec) {
return spec.q > 0;
}
}
});
var require_encoding2 = __commonJS2({
"node_modules/negotiator/lib/encoding.js"(exports2, module2) {
"use strict";
module2.exports = preferredEncodings;
module2.exports.preferredEncodings = preferredEncodings;
var simpleEncodingRegExp = /^\s*([^\s;]+)\s*(?:;(.*))?$/;
function parseAcceptEncoding(accept) {
var accepts = accept.split(",");
var hasIdentity = false;
var minQuality = 1;
for (var i = 0, j = 0; i < accepts.length; i++) {
var encoding = parseEncoding(accepts[i].trim(), i);
if (encoding) {
accepts[j++] = encoding;
hasIdentity = hasIdentity || specify("identity", encoding);
minQuality = Math.min(minQuality, encoding.q || 1);
}
}
if (!hasIdentity) {
accepts[j++] = {
encoding: "identity",
q: minQuality,
i
};
}
accepts.length = j;
return accepts;
}
function parseEncoding(str, i) {
var match = simpleEncodingRegExp.exec(str);
if (!match) return null;
var encoding = match[1];
var q = 1;
if (match[2]) {
var params = match[2].split(";");
for (var j = 0; j < params.length; j++) {
var p = params[j].trim().split("=");
if (p[0] === "q") {
q = parseFloat(p[1]);
break;
}
}
}
return {
encoding,
q,
i
};
}
function getEncodingPriority(encoding, accepted, index2) {
var priority = { encoding, o: -1, q: 0, s: 0 };
for (var i = 0; i < accepted.length; i++) {
var spec = specify(encoding, accepted[i], index2);
if (spec && (priority.s - spec.s || priority.q - spec.q || priority.o - spec.o) < 0) {
priority = spec;
}
}
return priority;
}
function specify(encoding, spec, index2) {
var s = 0;
if (spec.encoding.toLowerCase() === encoding.toLowerCase()) {
s |= 1;
} else if (spec.encoding !== "*") {
return null;
}
return {
encoding,
i: index2,
o: spec.i,
q: spec.q,
s
};
}
function preferredEncodings(accept, provided, preferred) {
var accepts = parseAcceptEncoding(accept || "");
var comparator = preferred ? function comparator2(a, b) {
if (a.q !== b.q) {
return b.q - a.q;
}
var aPreferred = preferred.indexOf(a.encoding);
var bPreferred = preferred.indexOf(b.encoding);
if (aPreferred === -1 && bPreferred === -1) {
return b.s - a.s || a.o - b.o || a.i - b.i;
}
if (aPreferred !== -1 && bPreferred !== -1) {
return aPreferred - bPreferred;
}
return aPreferred === -1 ? 1 : -1;
} : compareSpecs;
if (!provided) {
return accepts.filter(isQuality).sort(comparator).map(getFullEncoding);
}
var priorities = provided.map(function getPriority(type, index2) {
return getEncodingPriority(type, accepts, index2);
});
return priorities.filter(isQuality).sort(comparator).map(function getEncoding2(priority) {
return provided[priorities.indexOf(priority)];
});
}
function compareSpecs(a, b) {
return b.q - a.q || b.s - a.s || a.o - b.o || a.i - b.i;
}
function getFullEncoding(spec) {
return spec.encoding;
}
function isQuality(spec) {
return spec.q > 0;
}
}
});
var require_language = __commonJS2({
"node_modules/negotiator/lib/language.js"(exports2, module2) {
"use strict";
module2.exports = preferredLanguages;
module2.exports.preferredLanguages = preferredLanguages;
var simpleLanguageRegExp = /^\s*([^\s\-;]+)(?:-([^\s;]+))?\s*(?:;(.*))?$/;
function parseAcceptLanguage(accept) {
var accepts = accept.split(",");
for (var i = 0, j = 0; i < accepts.length; i++) {
var language = parseLanguage(accepts[i].trim(), i);
if (language) {
accepts[j++] = language;
}
}
accepts.length = j;
return accepts;
}
function parseLanguage(str, i) {
var match = simpleLanguageRegExp.exec(str);
if (!match) return null;
var prefix = match[1];
var suffix = match[2];
var full = prefix;
if (suffix) full += "-" + suffix;
var q = 1;
if (match[3]) {
var params = match[3].split(";");
for (var j = 0; j < params.length; j++) {
var p = params[j].split("=");
if (p[0] === "q") q = parseFloat(p[1]);
}
}
return {
prefix,
suffix,
q,
i,
full
};
}
function getLanguagePriority(language, accepted, index2) {
var priority = { o: -1, q: 0, s: 0 };
for (var i = 0; i < accepted.length; i++) {
var spec = specify(language, accepted[i], index2);
if (spec && (priority.s - spec.s || priority.q - spec.q || priority.o - spec.o) < 0) {
priority = spec;
}
}
return priority;
}
function specify(language, spec, index2) {
var p = parseLanguage(language);
if (!p) return null;
var s = 0;
if (spec.full.toLowerCase() === p.full.toLowerCase()) {
s |= 4;
} else if (spec.prefix.toLowerCase() === p.full.toLowerCase()) {
s |= 2;
} else if (spec.full.toLowerCase() === p.prefix.toLowerCase()) {
s |= 1;
} else if (spec.full !== "*") {
return null;
}
return {
i: index2,
o: spec.i,
q: spec.q,
s
};
}
function preferredLanguages(accept, provided) {
var accepts = parseAcceptLanguage(accept === void 0 ? "*" : accept || "");
if (!provided) {
return accepts.filter(isQuality).sort(compareSpecs).map(getFullLanguage);
}
var priorities = provided.map(function getPriority(type, index2) {
return getLanguagePriority(type, accepts, index2);
});
return priorities.filter(isQuality).sort(compareSpecs).map(function getLanguage(priority) {
return provided[priorities.indexOf(priority)];
});
}
function compareSpecs(a, b) {
return b.q - a.q || b.s - a.s || a.o - b.o || a.i - b.i || 0;
}
function getFullLanguage(spec) {
return spec.full;
}
function isQuality(spec) {
return spec.q > 0;
}
}
});
var require_mediaType = __commonJS2({
"node_modules/negotiator/lib/mediaType.js"(exports2, module2) {
"use strict";
module2.exports = preferredMediaTypes;
module2.exports.preferredMediaTypes = preferredMediaTypes;
var simpleMediaTypeRegExp = /^\s*([^\s\/;]+)\/([^;\s]+)\s*(?:;(.*))?$/;
function parseAccept(accept) {
var accepts = splitMediaTypes(accept);
for (var i = 0, j = 0; i < accepts.length; i++) {
var mediaType = parseMediaType(accepts[i].trim(), i);
if (mediaType) {
accepts[j++] = mediaType;
}
}
accepts.length = j;
return accepts;
}
function parseMediaType(str, i) {
var match = simpleMediaTypeRegExp.exec(str);
if (!match) return null;
var params = /* @__PURE__ */ Object.create(null);
var q = 1;
var subtype = match[2];
var type = match[1];
if (match[3]) {
var kvps = splitParameters(match[3]).map(splitKeyValuePair);
for (var j = 0; j < kvps.length; j++) {
var pair = kvps[j];
var key = pair[0].toLowerCase();
var val2 = pair[1];
var value = val2 && val2[0] === '"' && val2[val2.length - 1] === '"' ? val2.slice(1, -1) : val2;
if (key === "q") {
q = parseFloat(value);
break;
}
params[key] = value;
}
}
return {
type,
subtype,
params,
q,
i
};
}
function getMediaTypePriority(type, accepted, index2) {
var priority = { o: -1, q: 0, s: 0 };
for (var i = 0; i < accepted.length; i++) {
var spec = specify(type, accepted[i], index2);
if (spec && (priority.s - spec.s || priority.q - spec.q || priority.o - spec.o) < 0) {
priority = spec;
}
}
return priority;
}
function specify(type, spec, index2) {
var p = parseMediaType(type);
var s = 0;
if (!p) {
return null;
}
if (spec.type.toLowerCase() == p.type.toLowerCase()) {
s |= 4;
} else if (spec.type != "*") {
return null;
}
if (spec.subtype.toLowerCase() == p.subtype.toLowerCase()) {
s |= 2;
} else if (spec.subtype != "*") {
return null;
}
var keys = Object.keys(spec.params);
if (keys.length > 0) {
if (keys.every(function(k) {
return spec.params[k] == "*" || (spec.params[k] || "").toLowerCase() == (p.params[k] || "").toLowerCase();
})) {
s |= 1;
} else {
return null;
}
}
return {
i: index2,
o: spec.i,
q: spec.q,
s
};
}
function preferredMediaTypes(accept, provided) {
var accepts = parseAccept(accept === void 0 ? "*/*" : accept || "");
if (!provided) {
return accepts.filter(isQuality).sort(compareSpecs).map(getFullType);
}
var priorities = provided.map(function getPriority(type, index2) {
return getMediaTypePriority(type, accepts, index2);
});
return priorities.filter(isQuality).sort(compareSpecs).map(function getType(priority) {
return provided[priorities.indexOf(priority)];
});
}
function compareSpecs(a, b) {
return b.q - a.q || b.s - a.s || a.o - b.o || a.i - b.i || 0;
}
function getFullType(spec) {
return spec.type + "/" + spec.subtype;
}
function isQuality(spec) {
return spec.q > 0;
}
function quoteCount(string) {
var count = 0;
var index2 = 0;
while ((index2 = string.indexOf('"', index2)) !== -1) {
count++;
index2++;
}
return count;
}
function splitKeyValuePair(str) {
var index2 = str.indexOf("=");
var key;
var val2;
if (index2 === -1) {
key = str;
} else {
key = str.slice(0, index2);
val2 = str.slice(index2 + 1);
}
return [key, val2];
}
function splitMediaTypes(accept) {
var accepts = accept.split(",");
for (var i = 1, j = 0; i < accepts.length; i++) {
if (quoteCount(accepts[j]) % 2 == 0) {
accepts[++j] = accepts[i];
} else {
accepts[j] += "," + accepts[i];
}
}
accepts.length = j + 1;
return accepts;
}
function splitParameters(str) {
var parameters = str.split(";");
for (var i = 1, j = 0; i < parameters.length; i++) {
if (quoteCount(parameters[j]) % 2 == 0) {
parameters[++j] = parameters[i];
} else {
parameters[j] += ";" + parameters[i];
}
}
parameters.length = j + 1;
for (var i = 0; i < parameters.length; i++) {
parameters[i] = parameters[i].trim();
}
return parameters;
}
}
});
var require_negotiator = __commonJS2({
"node_modules/negotiator/index.js"(exports2, module2) {
"use strict";
var preferredCharsets = require_charset();
var preferredEncodings = require_encoding2();
var preferredLanguages = require_language();
var preferredMediaTypes = require_mediaType();
module2.exports = Negotiator;
module2.exports.Negotiator = Negotiator;
function Negotiator(request) {
if (!(this instanceof Negotiator)) {
return new Negotiator(request);
}
this.request = request;
}
Negotiator.prototype.charset = function charset(available) {
var set = this.charsets(available);
return set && set[0];
};
Negotiator.prototype.charsets = function charsets(available) {
return preferredCharsets(this.request.headers["accept-charset"], available);
};
Negotiator.prototype.encoding = function encoding(available, opts) {
var set = this.encodings(available, opts);
return set && set[0];
};
Negotiator.prototype.encodings = function encodings(available, options) {
var opts = options || {};
return preferredEncodings(this.request.headers["accept-encoding"], available, opts.preferred);
};
Negotiator.prototype.language = function language(available) {
var set = this.languages(available);
return set && set[0];
};
Negotiator.prototype.languages = function languages(available) {
return preferredLanguages(this.request.headers["accept-language"], available);
};
Negotiator.prototype.mediaType = function mediaType(available) {
var set = this.mediaTypes(available);
return set && set[0];
};
Negotiator.prototype.mediaTypes = function mediaTypes(available) {
return preferredMediaTypes(this.request.headers.accept, available);
};
Negotiator.prototype.preferredCharset = Negotiator.prototype.charset;
Negotiator.prototype.preferredCharsets = Negotiator.prototype.charsets;
Negotiator.prototype.preferredEncoding = Negotiator.prototype.encoding;
Negotiator.prototype.preferredEncodings = Negotiator.prototype.encodings;
Negotiator.prototype.preferredLanguage = Negotiator.prototype.language;
Negotiator.prototype.preferredLanguages = Negotiator.prototype.languages;
Negotiator.prototype.preferredMediaType = Negotiator.prototype.mediaType;
Negotiator.prototype.preferredMediaTypes = Negotiator.prototype.mediaTypes;
}
});
var require_db3 = __commonJS2({
"node_modules/accepts/node_modules/mime-db/db.json"(exports2, module2) {
module2.exports = {
"application/1d-interleaved-parityfec": {
source: "iana"
},
"application/3gpdash-qoe-report+xml": {
source: "iana",
charset: "UTF-8",
compressible: true
},
"application/3gpp-ims+xml": {
source: "iana",
compressible: true
},
"application/3gpphal+json": {
source: "iana",
compressible: true
},
"application/3gpphalforms+json": {
source: "iana",
compressible: true
},
"application/a2l": {
source: "iana"
},
"application/ace+cbor": {
source: "iana"
},
"application/ace+json": {
source: "iana",
compressible: true
},
"application/ace-groupcomm+cbor": {
source: "iana"
},
"application/ace-trl+cbor": {
source: "iana"
},
"application/activemessage": {
source: "iana"
},
"application/activity+json": {
source: "iana",
compressible: true
},
"application/aif+cbor": {
source: "iana"
},
"application/aif+json": {
source: "iana",
compressible: true
},
"application/alto-cdni+json": {
source: "iana",
compressible: true
},
"application/alto-cdnifilter+json": {
source: "iana",
compressible: true
},
"application/alto-costmap+json": {
source: "iana",
compressible: true
},
"application/alto-costmapfilter+json": {
source: "iana",
compressible: true
},
"application/alto-directory+json": {
source: "iana",
compressible: true
},
"application/alto-endpointcost+json": {
source: "iana",
compressible: true
},
"application/alto-endpointcostparams+json": {
source: "iana",
compressible: true
},
"application/alto-endpointprop+json": {
source: "iana",
compressible: true
},
"application/alto-endpointpropparams+json": {
source: "iana",
compressible: true
},
"application/alto-error+json": {
source: "iana",
compressible: true
},
"application/alto-networkmap+json": {
source: "iana",
compressible: true
},
"application/alto-networkmapfilter+json": {
source: "iana",
compressible: true
},
"application/alto-propmap+json": {
source: "iana",
compressible: true
},
"application/alto-propmapparams+json": {
source: "iana",
compressible: true
},
"application/alto-tips+json": {
source: "iana",
compressible: true
},
"application/alto-tipsparams+json": {
source: "iana",
compressible: true
},
"application/alto-updatestreamcontrol+json": {
source: "iana",
compressible: true
},
"application/alto-updatestreamparams+json": {
source: "iana",
compressible: true
},
"application/aml": {
source: "iana"
},
"application/andrew-inset": {
source: "iana",
extensions: ["ez"]
},
"application/appinstaller": {
compressible: false,
extensions: ["appinstaller"]
},
"application/applefile": {
source: "iana"
},
"application/applixware": {
source: "apache",
extensions: ["aw"]
},
"application/appx": {
compressible: false,
extensions: ["appx"]
},
"application/appxbundle": {
compressible: false,
extensions: ["appxbundle"]
},
"application/at+jwt": {
source: "iana"
},
"application/atf": {
source: "iana"
},
"application/atfx": {
source: "iana"
},
"application/atom+xml": {
source: "iana",
compressible: true,
extensions: ["atom"]
},
"application/atomcat+xml": {
source: "iana",
compressible: true,
extensions: ["atomcat"]
},
"application/atomdeleted+xml": {
source: "iana",
compressible: true,
extensions: ["atomdeleted"]
},
"application/atomicmail": {
source: "iana"
},
"application/atomsvc+xml": {
source: "iana",
compressible: true,
extensions: ["atomsvc"]
},
"application/atsc-dwd+xml": {
source: "iana",
compressible: true,
extensions: ["dwd"]
},
"application/atsc-dynamic-event-message": {
source: "iana"
},
"application/atsc-held+xml": {
source: "iana",
compressible: true,
extensions: ["held"]
},
"application/atsc-rdt+json": {
source: "iana",
compressible: true
},
"application/atsc-rsat+xml": {
source: "iana",
compressible: true,
extensions: ["rsat"]
},
"application/atxml": {
source: "iana"
},
"application/auth-policy+xml": {
source: "iana",
compressible: true
},
"application/automationml-aml+xml": {
source: "iana",
compressible: true,
extensions: ["aml"]
},
"application/automationml-amlx+zip": {
source: "iana",
compressible: false,
extensions: ["amlx"]
},
"application/bacnet-xdd+zip": {
source: "iana",
compressible: false
},
"application/batch-smtp": {
source: "iana"
},
"application/bdoc": {
compressible: false,
extensions: ["bdoc"]
},
"application/beep+xml": {
source: "iana",
charset: "UTF-8",
compressible: true
},
"application/bufr": {
source: "iana"
},
"application/c2pa": {
source: "iana"
},
"application/calendar+json": {
source: "iana",
compressible: true
},
"application/calendar+xml": {
source: "iana",
compressible: true,
extensions: ["xcs"]
},
"application/call-completion": {
source: "iana"
},
"application/cals-1840": {
source: "iana"
},
"application/captive+json": {
source: "iana",
compressible: true
},
"application/cbor": {
source: "iana"
},
"application/cbor-seq": {
source: "iana"
},
"application/cccex": {
source: "iana"
},
"application/ccmp+xml": {
source: "iana",
compressible: true
},
"application/ccxml+xml": {
source: "iana",
compressible: true,
extensions: ["ccxml"]
},
"application/cda+xml": {
source: "iana",
charset: "UTF-8",
compressible: true
},
"application/cdfx+xml": {
source: "iana",
compressible: true,
extensions: ["cdfx"]
},
"application/cdmi-capability": {
source: "iana",
extensions: ["cdmia"]
},
"application/cdmi-container": {
source: "iana",
extensions: ["cdmic"]
},
"application/cdmi-domain": {
source: "iana",
extensions: ["cdmid"]
},
"application/cdmi-object": {
source: "iana",
extensions: ["cdmio"]
},
"application/cdmi-queue": {
source: "iana",
extensions: ["cdmiq"]
},
"application/cdni": {
source: "iana"
},
"application/ce+cbor": {
source: "iana"
},
"application/cea": {
source: "iana"
},
"application/cea-2018+xml": {
source: "iana",
compressible: true
},
"application/cellml+xml": {
source: "iana",
compressible: true
},
"application/cfw": {
source: "iana"
},
"application/cid-edhoc+cbor-seq": {
source: "iana"
},
"application/city+json": {
source: "iana",
compressible: true
},
"application/city+json-seq": {
source: "iana"
},
"application/clr": {
source: "iana"
},
"application/clue+xml": {
source: "iana",
compressible: true
},
"application/clue_info+xml": {
source: "iana",
compressible: true
},
"application/cms": {
source: "iana"
},
"application/cnrp+xml": {
source: "iana",
compressible: true
},
"application/coap-eap": {
source: "iana"
},
"application/coap-group+json": {
source: "iana",
compressible: true
},
"application/coap-payload": {
source: "iana"
},
"application/commonground": {
source: "iana"
},
"application/concise-problem-details+cbor": {
source: "iana"
},
"application/conference-info+xml": {
source: "iana",
compressible: true
},
"application/cose": {
source: "iana"
},
"application/cose-key": {
source: "iana"
},
"application/cose-key-set": {
source: "iana"
},
"application/cose-x509": {
source: "iana"
},
"application/cpl+xml": {
source: "iana",
compressible: true,
extensions: ["cpl"]
},
"application/csrattrs": {
source: "iana"
},
"application/csta+xml": {
source: "iana",
compressible: true
},
"application/cstadata+xml": {
source: "iana",
compressible: true
},
"application/csvm+json": {
source: "iana",
compressible: true
},
"application/cu-seeme": {
source: "apache",
extensions: ["cu"]
},
"application/cwl": {
source: "iana",
extensions: ["cwl"]
},
"application/cwl+json": {
source: "iana",
compressible: true
},
"application/cwl+yaml": {
source: "iana"
},
"application/cwt": {
source: "iana"
},
"application/cybercash": {
source: "iana"
},
"application/dart": {
compressible: true
},
"application/dash+xml": {
source: "iana",
compressible: true,
extensions: ["mpd"]
},
"application/dash-patch+xml": {
source: "iana",
compressible: true,
extensions: ["mpp"]
},
"application/dashdelta": {
source: "iana"
},
"application/davmount+xml": {
source: "iana",
compressible: true,
extensions: ["davmount"]
},
"application/dca-rft": {
source: "iana"
},
"application/dcd": {
source: "iana"
},
"application/dec-dx": {
source: "iana"
},
"application/dialog-info+xml": {
source: "iana",
compressible: true
},
"application/dicom": {
source: "iana",
extensions: ["dcm"]
},
"application/dicom+json": {
source: "iana",
compressible: true
},
"application/dicom+xml": {
source: "iana",
compressible: true
},
"application/dii": {
source: "iana"
},
"application/dit": {
source: "iana"
},
"application/dns": {
source: "iana"
},
"application/dns+json": {
source: "iana",
compressible: true
},
"application/dns-message": {
source: "iana"
},
"application/docbook+xml": {
source: "apache",
compressible: true,
extensions: ["dbk"]
},
"application/dots+cbor": {
source: "iana"
},
"application/dpop+jwt": {
source: "iana"
},
"application/dskpp+xml": {
source: "iana",
compressible: true
},
"application/dssc+der": {
source: "iana",
extensions: ["dssc"]
},
"application/dssc+xml": {
source: "iana",
compressible: true,
extensions: ["xdssc"]
},
"application/dvcs": {
source: "iana"
},
"application/eat+cwt": {
source: "iana"
},
"application/eat+jwt": {
source: "iana"
},
"application/eat-bun+cbor": {
source: "iana"
},
"application/eat-bun+json": {
source: "iana",
compressible: true
},
"application/eat-ucs+cbor": {
source: "iana"
},
"application/eat-ucs+json": {
source: "iana",
compressible: true
},
"application/ecmascript": {
source: "apache",
compressible: true,
extensions: ["ecma"]
},
"application/edhoc+cbor-seq": {
source: "iana"
},
"application/edi-consent": {
source: "iana"
},
"application/edi-x12": {
source: "iana",
compressible: false
},
"application/edifact": {
source: "iana",
compressible: false
},
"application/efi": {
source: "iana"
},
"application/elm+json": {
source: "iana",
charset: "UTF-8",
compressible: true
},
"application/elm+xml": {
source: "iana",
compressible: true
},
"application/emergencycalldata.cap+xml": {
source: "iana",
charset: "UTF-8",
compressible: true
},
"application/emergencycalldata.comment+xml": {
source: "iana",
compressible: true
},
"application/emergencycalldata.control+xml": {
source: "iana",
compressible: true
},
"application/emergencycalldata.deviceinfo+xml": {
source: "iana",
compressible: true
},
"application/emergencycalldata.ecall.msd": {
source: "iana"
},
"application/emergencycalldata.legacyesn+json": {
source: "iana",
compressible: true
},
"application/emergencycalldata.providerinfo+xml": {
source: "iana",
compressible: true
},
"application/emergencycalldata.serviceinfo+xml": {
source: "iana",
compressible: true
},
"application/emergencycalldata.subscriberinfo+xml": {
source: "iana",
compressible: true
},
"application/emergencycalldata.veds+xml": {
source: "iana",
compressible: true
},
"application/emma+xml": {
source: "iana",
compressible: true,
extensions: ["emma"]
},
"application/emotionml+xml": {
source: "iana",
compressible: true,
extensions: ["emotionml"]
},
"application/encaprtp": {
source: "iana"
},
"application/entity-statement+jwt": {
source: "iana"
},
"application/epp+xml": {
source: "iana",
compressible: true
},
"application/epub+zip": {
source: "iana",
compressible: false,
extensions: ["epub"]
},
"application/eshop": {
source: "iana"
},
"application/exi": {
source: "iana",
extensions: ["exi"]
},
"application/expect-ct-report+json": {
source: "iana",
compressible: true
},
"application/express": {
source: "iana",
extensions: ["exp"]
},
"application/fastinfoset": {
source: "iana"
},
"application/fastsoap": {
source: "iana"
},
"application/fdf": {
source: "iana",
extensions: ["fdf"]
},
"application/fdt+xml": {
source: "iana",
compressible: true,
extensions: ["fdt"]
},
"application/fhir+json": {
source: "iana",
charset: "UTF-8",
compressible: true
},
"application/fhir+xml": {
source: "iana",
charset: "UTF-8",
compressible: true
},
"application/fido.trusted-apps+json": {
compressible: true
},
"application/fits": {
source: "iana"
},
"application/flexfec": {
source: "iana"
},
"application/font-sfnt": {
source: "iana"
},
"application/font-tdpfr": {
source: "iana",
extensions: ["pfr"]
},
"application/font-woff": {
source: "iana",
compressible: false
},
"application/framework-attributes+xml": {
source: "iana",
compressible: true
},
"application/geo+json": {
source: "iana",
compressible: true,
extensions: ["geojson"]
},
"application/geo+json-seq": {
source: "iana"
},
"application/geopackage+sqlite3": {
source: "iana"
},
"application/geopose+json": {
source: "iana",
compressible: true
},
"application/geoxacml+json": {
source: "iana",
compressible: true
},
"application/geoxacml+xml": {
source: "iana",
compressible: true
},
"application/gltf-buffer": {
source: "iana"
},
"application/gml+xml": {
source: "iana",
compressible: true,
extensions: ["gml"]
},
"application/gnap-binding-jws": {
source: "iana"
},
"application/gnap-binding-jwsd": {
source: "iana"
},
"application/gnap-binding-rotation-jws": {
source: "iana"
},
"application/gnap-binding-rotation-jwsd": {
source: "iana"
},
"application/gpx+xml": {
source: "apache",
compressible: true,
extensions: ["gpx"]
},
"application/grib": {
source: "iana"
},
"application/gxf": {
source: "apache",
extensions: ["gxf"]
},
"application/gzip": {
source: "iana",
compressible: false,
extensions: ["gz"]
},
"application/h224": {
source: "iana"
},
"application/held+xml": {
source: "iana",
compressible: true
},
"application/hjson": {
extensions: ["hjson"]
},
"application/hl7v2+xml": {
source: "iana",
charset: "UTF-8",
compressible: true
},
"application/http": {
source: "iana"
},
"application/hyperstudio": {
source: "iana",
extensions: ["stk"]
},
"application/ibe-key-request+xml": {
source: "iana",
compressible: true
},
"application/ibe-pkg-reply+xml": {
source: "iana",
compressible: true
},
"application/ibe-pp-data": {
source: "iana"
},
"application/iges": {
source: "iana"
},
"application/im-iscomposing+xml": {
source: "iana",
charset: "UTF-8",
compressible: true
},
"application/index": {
source: "iana"
},
"application/index.cmd": {
source: "iana"
},
"application/index.obj": {
source: "iana"
},
"application/index.response": {
source: "iana"
},
"application/index.vnd": {
source: "iana"
},
"application/inkml+xml": {
source: "iana",
compressible: true,
extensions: ["ink", "inkml"]
},
"application/iotp": {
source: "iana"
},
"application/ipfix": {
source: "iana",
extensions: ["ipfix"]
},
"application/ipp": {
source: "iana"
},
"application/isup": {
source: "iana"
},
"application/its+xml": {
source: "iana",
compressible: true,
extensions: ["its"]
},
"application/java-archive": {
source: "iana",
compressible: false,
extensions: ["jar", "war", "ear"]
},
"application/java-serialized-object": {
source: "apache",
compressible: false,
extensions: ["ser"]
},
"application/java-vm": {
source: "apache",
compressible: false,
extensions: ["class"]
},
"application/javascript": {
source: "apache",
charset: "UTF-8",
compressible: true,
extensions: ["js"]
},
"application/jf2feed+json": {
source: "iana",
compressible: true
},
"application/jose": {
source: "iana"
},
"application/jose+json": {
source: "iana",
compressible: true
},
"application/jrd+json": {
source: "iana",
compressible: true
},
"application/jscalendar+json": {
source: "iana",
compressible: true
},
"application/jscontact+json": {
source: "iana",
compressible: true
},
"application/json": {
source: "iana",
charset: "UTF-8",
compressible: true,
extensions: ["json", "map"]
},
"application/json-patch+json": {
source: "iana",
compressible: true
},
"application/json-seq": {
source: "iana"
},
"application/json5": {
extensions: ["json5"]
},
"application/jsonml+json": {
source: "apache",
compressible: true,
extensions: ["jsonml"]
},
"application/jsonpath": {
source: "iana"
},
"application/jwk+json": {
source: "iana",
compressible: true
},
"application/jwk-set+json": {
source: "iana",
compressible: true
},
"application/jwk-set+jwt": {
source: "iana"
},
"application/jwt": {
source: "iana"
},
"application/kpml-request+xml": {
source: "iana",
compressible: true
},
"application/kpml-response+xml": {
source: "iana",
compressible: true
},
"application/ld+json": {
source: "iana",
compressible: true,
extensions: ["jsonld"]
},
"application/lgr+xml": {
source: "iana",
compressible: true,
extensions: ["lgr"]
},
"application/link-format": {
source: "iana"
},
"application/linkset": {
source: "iana"
},
"application/linkset+json": {
source: "iana",
compressible: true
},
"application/load-control+xml": {
source: "iana",
compressible: true
},
"application/logout+jwt": {
source: "iana"
},
"application/lost+xml": {
source: "iana",
compressible: true,
extensions: ["lostxml"]
},
"application/lostsync+xml": {
source: "iana",
compressible: true
},
"application/lpf+zip": {
source: "iana",
compressible: false
},
"application/lxf": {
source: "iana"
},
"application/mac-binhex40": {
source: "iana",
extensions: ["hqx"]
},
"application/mac-compactpro": {
source: "apache",
extensions: ["cpt"]
},
"application/macwriteii": {
source: "iana"
},
"application/mads+xml": {
source: "iana",
compressible: true,
extensions: ["mads"]
},
"application/manifest+json": {
source: "iana",
charset: "UTF-8",
compressible: true,
extensions: ["webmanifest"]
},
"application/marc": {
source: "iana",
extensions: ["mrc"]
},
"application/marcxml+xml": {
source: "iana",
compressible: true,
extensions: ["mrcx"]
},
"application/mathematica": {
source: "iana",
extensions: ["ma", "nb", "mb"]
},
"application/mathml+xml": {
source: "iana",
compressible: true,
extensions: ["mathml"]
},
"application/mathml-content+xml": {
source: "iana",
compressible: true
},
"application/mathml-presentation+xml": {
source: "iana",
compressible: true
},
"application/mbms-associated-procedure-description+xml": {
source: "iana",
compressible: true
},
"application/mbms-deregister+xml": {
source: "iana",
compressible: true
},
"application/mbms-envelope+xml": {
source: "iana",
compressible: true
},
"application/mbms-msk+xml": {
source: "iana",
compressible: true
},
"application/mbms-msk-response+xml": {
source: "iana",
compressible: true
},
"application/mbms-protection-description+xml": {
source: "iana",
compressible: true
},
"application/mbms-reception-report+xml": {
source: "iana",
compressible: true
},
"application/mbms-register+xml": {
source: "iana",
compressible: true
},
"application/mbms-register-response+xml": {
source: "iana",
compressible: true
},
"application/mbms-schedule+xml": {
source: "iana",
compressible: true
},
"application/mbms-user-service-description+xml": {
source: "iana",
compressible: true
},
"application/mbox": {
source: "iana",
extensions: ["mbox"]
},
"application/media-policy-dataset+xml": {
source: "iana",
compressible: true,
extensions: ["mpf"]
},
"application/media_control+xml": {
source: "iana",
compressible: true
},
"application/mediaservercontrol+xml": {
source: "iana",
compressible: true,
extensions: ["mscml"]
},
"application/merge-patch+json": {
source: "iana",
compressible: true
},
"application/metalink+xml": {
source: "apache",
compressible: true,
extensions: ["metalink"]
},
"application/metalink4+xml": {
source: "iana",
compressible: true,
extensions: ["meta4"]
},
"application/mets+xml": {
source: "iana",
compressible: true,
extensions: ["mets"]
},
"application/mf4": {
source: "iana"
},
"application/mikey": {
source: "iana"
},
"application/mipc": {
source: "iana"
},
"application/missing-blocks+cbor-seq": {
source: "iana"
},
"application/mmt-aei+xml": {
source: "iana",
compressible: true,
extensions: ["maei"]
},
"application/mmt-usd+xml": {
source: "iana",
compressible: true,
extensions: ["musd"]
},
"application/mods+xml": {
source: "iana",
compressible: true,
extensions: ["mods"]
},
"application/moss-keys": {
source: "iana"
},
"application/moss-signature": {
source: "iana"
},
"application/mosskey-data": {
source: "iana"
},
"application/mosskey-request": {
source: "iana"
},
"application/mp21": {
source: "iana",
extensions: ["m21", "mp21"]
},
"application/mp4": {
source: "iana",
extensions: ["mp4", "mpg4", "mp4s", "m4p"]
},
"application/mpeg4-generic": {
source: "iana"
},
"application/mpeg4-iod": {
source: "iana"
},
"application/mpeg4-iod-xmt": {
source: "iana"
},
"application/mrb-consumer+xml": {
source: "iana",
compressible: true
},
"application/mrb-publish+xml": {
source: "iana",
compressible: true
},
"application/msc-ivr+xml": {
source: "iana",
charset: "UTF-8",
compressible: true
},
"application/msc-mixer+xml": {
source: "iana",
charset: "UTF-8",
compressible: true
},
"application/msix": {
compressible: false,
extensions: ["msix"]
},
"application/msixbundle": {
compressible: false,
extensions: ["msixbundle"]
},
"application/msword": {
source: "iana",
compressible: false,
extensions: ["doc", "dot"]
},
"application/mud+json": {
source: "iana",
compressible: true
},
"application/multipart-core": {
source: "iana"
},
"application/mxf": {
source: "iana",
extensions: ["mxf"]
},
"application/n-quads": {
source: "iana",
extensions: ["nq"]
},
"application/n-triples": {
source: "iana",
extensions: ["nt"]
},
"application/nasdata": {
source: "iana"
},
"application/news-checkgroups": {
source: "iana",
charset: "US-ASCII"
},
"application/news-groupinfo": {
source: "iana",
charset: "US-ASCII"
},
"application/news-transmission": {
source: "iana"
},
"application/nlsml+xml": {
source: "iana",
compressible: true
},
"application/node": {
source: "iana",
extensions: ["cjs"]
},
"application/nss": {
source: "iana"
},
"application/oauth-authz-req+jwt": {
source: "iana"
},
"application/oblivious-dns-message": {
source: "iana"
},
"application/ocsp-request": {
source: "iana"
},
"application/ocsp-response": {
source: "iana"
},
"application/octet-stream": {
source: "iana",
compressible: true,
extensions: ["bin", "dms", "lrf", "mar", "so", "dist", "distz", "pkg", "bpk", "dump", "elc", "deploy", "exe", "dll", "deb", "dmg", "iso", "img", "msi", "msp", "msm", "buffer"]
},
"application/oda": {
source: "iana",
extensions: ["oda"]
},
"application/odm+xml": {
source: "iana",
compressible: true
},
"application/odx": {
source: "iana"
},
"application/oebps-package+xml": {
source: "iana",
compressible: true,
extensions: ["opf"]
},
"application/ogg": {
source: "iana",
compressible: false,
extensions: ["ogx"]
},
"application/ohttp-keys": {
source: "iana"
},
"application/omdoc+xml": {
source: "apache",
compressible: true,
extensions: ["omdoc"]
},
"application/onenote": {
source: "apache",
extensions: ["onetoc", "onetoc2", "onetmp", "onepkg", "one", "onea"]
},
"application/opc-nodeset+xml": {
source: "iana",
compressible: true
},
"application/oscore": {
source: "iana"
},
"application/oxps": {
source: "iana",
extensions: ["oxps"]
},
"application/p21": {
source: "iana"
},
"application/p21+zip": {
source: "iana",
compressible: false
},
"application/p2p-overlay+xml": {
source: "iana",
compressible: true,
extensions: ["relo"]
},
"application/parityfec": {
source: "iana"
},
"application/passport": {
source: "iana"
},
"application/patch-ops-error+xml": {
source: "iana",
compressible: true,
extensions: ["xer"]
},
"application/pdf": {
source: "iana",
compressible: false,
extensions: ["pdf"]
},
"application/pdx": {
source: "iana"
},
"application/pem-certificate-chain": {
source: "iana"
},
"application/pgp-encrypted": {
source: "iana",
compressible: false,
extensions: ["pgp"]
},
"application/pgp-keys": {
source: "iana",
extensions: ["asc"]
},
"application/pgp-signature": {
source: "iana",
extensions: ["sig", "asc"]
},
"application/pics-rules": {
source: "apache",
extensions: ["prf"]
},
"application/pidf+xml": {
source: "iana",
charset: "UTF-8",
compressible: true
},
"application/pidf-diff+xml": {
source: "iana",
charset: "UTF-8",
compressible: true
},
"application/pkcs10": {
source: "iana",
extensions: ["p10"]
},
"application/pkcs12": {
source: "iana"
},
"application/pkcs7-mime": {
source: "iana",
extensions: ["p7m", "p7c"]
},
"application/pkcs7-signature": {
source: "iana",
extensions: ["p7s"]
},
"application/pkcs8": {
source: "iana",
extensions: ["p8"]
},
"application/pkcs8-encrypted": {
source: "iana"
},
"application/pkix-attr-cert": {
source: "iana",
extensions: ["ac"]
},
"application/pkix-cert": {
source: "iana",
extensions: ["cer"]
},
"application/pkix-crl": {
source: "iana",
extensions: ["crl"]
},
"application/pkix-pkipath": {
source: "iana",
extensions: ["pkipath"]
},
"application/pkixcmp": {
source: "iana",
extensions: ["pki"]
},
"application/pls+xml": {
source: "iana",
compressible: true,
extensions: ["pls"]
},
"application/poc-settings+xml": {
source: "iana",
charset: "UTF-8",
compressible: true
},
"application/postscript": {
source: "iana",
compressible: true,
extensions: ["ai", "eps", "ps"]
},
"application/ppsp-tracker+json": {
source: "iana",
compressible: true
},
"application/private-token-issuer-directory": {
source: "iana"
},
"application/private-token-request": {
source: "iana"
},
"application/private-token-response": {
source: "iana"
},
"application/problem+json": {
source: "iana",
compressible: true
},
"application/problem+xml": {
source: "iana",
compressible: true
},
"application/provenance+xml": {
source: "iana",
compressible: true,
extensions: ["provx"]
},
"application/provided-claims+jwt": {
source: "iana"
},
"application/prs.alvestrand.titrax-sheet": {
source: "iana"
},
"application/prs.cww": {
source: "iana",
extensions: ["cww"]
},
"application/prs.cyn": {
source: "iana",
charset: "7-BIT"
},
"application/prs.hpub+zip": {
source: "iana",
compressible: false
},
"application/prs.implied-document+xml": {
source: "iana",
compressible: true
},
"application/prs.implied-executable": {
source: "iana"
},
"application/prs.implied-object+json": {
source: "iana",
compressible: true
},
"application/prs.implied-object+json-seq": {
source: "iana"
},
"application/prs.implied-object+yaml": {
source: "iana"
},
"application/prs.implied-structure": {
source: "iana"
},
"application/prs.mayfile": {
source: "iana"
},
"application/prs.nprend": {
source: "iana"
},
"application/prs.plucker": {
source: "iana"
},
"application/prs.rdf-xml-crypt": {
source: "iana"
},
"application/prs.vcfbzip2": {
source: "iana"
},
"application/prs.xsf+xml": {
source: "iana",
compressible: true,
extensions: ["xsf"]
},
"application/pskc+xml": {
source: "iana",
compressible: true,
extensions: ["pskcxml"]
},
"application/pvd+json": {
source: "iana",
compressible: true
},
"application/qsig": {
source: "iana"
},
"application/raml+yaml": {
compressible: true,
extensions: ["raml"]
},
"application/raptorfec": {
source: "iana"
},
"application/rdap+json": {
source: "iana",
compressible: true
},
"application/rdf+xml": {
source: "iana",
compressible: true,
extensions: ["rdf", "owl"]
},
"application/reginfo+xml": {
source: "iana",
compressible: true,
extensions: ["rif"]
},
"application/relax-ng-compact-syntax": {
source: "iana",
extensions: ["rnc"]
},
"application/remote-printing": {
source: "apache"
},
"application/reputon+json": {
source: "iana",
compressible: true
},
"application/resolve-response+jwt": {
source: "iana"
},
"application/resource-lists+xml": {
source: "iana",
compressible: true,
extensions: ["rl"]
},
"application/resource-lists-diff+xml": {
source: "iana",
compressible: true,
extensions: ["rld"]
},
"application/rfc+xml": {
source: "iana",
compressible: true
},
"application/riscos": {
source: "iana"
},
"application/rlmi+xml": {
source: "iana",
compressible: true
},
"application/rls-services+xml": {
source: "iana",
compressible: true,
extensions: ["rs"]
},
"application/route-apd+xml": {
source: "iana",
compressible: true,
extensions: ["rapd"]
},
"application/route-s-tsid+xml": {
source: "iana",
compressible: true,
extensions: ["sls"]
},
"application/route-usd+xml": {
source: "iana",
compressible: true,
extensions: ["rusd"]
},
"application/rpki-checklist": {
source: "iana"
},
"application/rpki-ghostbusters": {
source: "iana",
extensions: ["gbr"]
},
"application/rpki-manifest": {
source: "iana",
extensions: ["mft"]
},
"application/rpki-publication": {
source: "iana"
},
"application/rpki-roa": {
source: "iana",
extensions: ["roa"]
},
"application/rpki-signed-tal": {
source: "iana"
},
"application/rpki-updown": {
source: "iana"
},
"application/rsd+xml": {
source: "apache",
compressible: true,
extensions: ["rsd"]
},
"application/rss+xml": {
source: "apache",
compressible: true,
extensions: ["rss"]
},
"application/rtf": {
source: "iana",
compressible: true,
extensions: ["rtf"]
},
"application/rtploopback": {
source: "iana"
},
"application/rtx": {
source: "iana"
},
"application/samlassertion+xml": {
source: "iana",
compressible: true
},
"application/samlmetadata+xml": {
source: "iana",
compressible: true
},
"application/sarif+json": {
source: "iana",
compressible: true
},
"application/sarif-external-properties+json": {
source: "iana",
compressible: true
},
"application/sbe": {
source: "iana"
},
"application/sbml+xml": {
source: "iana",
compressible: true,
extensions: ["sbml"]
},
"application/scaip+xml": {
source: "iana",
compressible: true
},
"application/scim+json": {
source: "iana",
compressible: true
},
"application/scvp-cv-request": {
source: "iana",
extensions: ["scq"]
},
"application/scvp-cv-response": {
source: "iana",
extensions: ["scs"]
},
"application/scvp-vp-request": {
source: "iana",
extensions: ["spq"]
},
"application/scvp-vp-response": {
source: "iana",
extensions: ["spp"]
},
"application/sdp": {
source: "iana",
extensions: ["sdp"]
},
"application/secevent+jwt": {
source: "iana"
},
"application/senml+cbor": {
source: "iana"
},
"application/senml+json": {
source: "iana",
compressible: true
},
"application/senml+xml": {
source: "iana",
compressible: true,
extensions: ["senmlx"]
},
"application/senml-etch+cbor": {
source: "iana"
},
"application/senml-etch+json": {
source: "iana",
compressible: true
},
"application/senml-exi": {
source: "iana"
},
"application/sensml+cbor": {
source: "iana"
},
"application/sensml+json": {
source: "iana",
compressible: true
},
"application/sensml+xml": {
source: "iana",
compressible: true,
extensions: ["sensmlx"]
},
"application/sensml-exi": {
source: "iana"
},
"application/sep+xml": {
source: "iana",
compressible: true
},
"application/sep-exi": {
source: "iana"
},
"application/session-info": {
source: "iana"
},
"application/set-payment": {
source: "iana"
},
"application/set-payment-initiation": {
source: "iana",
extensions: ["setpay"]
},
"application/set-registration": {
source: "iana"
},
"application/set-registration-initiation": {
source: "iana",
extensions: ["setreg"]
},
"application/sgml": {
source: "iana"
},
"application/sgml-open-catalog": {
source: "iana"
},
"application/shf+xml": {
source: "iana",
compressible: true,
extensions: ["shf"]
},
"application/sieve": {
source: "iana",
extensions: ["siv", "sieve"]
},
"application/simple-filter+xml": {
source: "iana",
compressible: true
},
"application/simple-message-summary": {
source: "iana"
},
"application/simplesymbolcontainer": {
source: "iana"
},
"application/sipc": {
source: "iana"
},
"application/slate": {
source: "iana"
},
"application/smil": {
source: "apache"
},
"application/smil+xml": {
source: "iana",
compressible: true,
extensions: ["smi", "smil"]
},
"application/smpte336m": {
source: "iana"
},
"application/soap+fastinfoset": {
source: "iana"
},
"application/soap+xml": {
source: "iana",
compressible: true
},
"application/sparql-query": {
source: "iana",
extensions: ["rq"]
},
"application/sparql-results+xml": {
source: "iana",
compressible: true,
extensions: ["srx"]
},
"application/spdx+json": {
source: "iana",
compressible: true
},
"application/spirits-event+xml": {
source: "iana",
compressible: true
},
"application/sql": {
source: "iana",
extensions: ["sql"]
},
"application/srgs": {
source: "iana",
extensions: ["gram"]
},
"application/srgs+xml": {
source: "iana",
compressible: true,
extensions: ["grxml"]
},
"application/sru+xml": {
source: "iana",
compressible: true,
extensions: ["sru"]
},
"application/ssdl+xml": {
source: "apache",
compressible: true,
extensions: ["ssdl"]
},
"application/sslkeylogfile": {
source: "iana"
},
"application/ssml+xml": {
source: "iana",
compressible: true,
extensions: ["ssml"]
},
"application/st2110-41": {
source: "iana"
},
"application/stix+json": {
source: "iana",
compressible: true
},
"application/stratum": {
source: "iana"
},
"application/swid+cbor": {
source: "iana"
},
"application/swid+xml": {
source: "iana",
compressible: true,
extensions: ["swidtag"]
},
"application/tamp-apex-update": {
source: "iana"
},
"application/tamp-apex-update-confirm": {
source: "iana"
},
"application/tamp-community-update": {
source: "iana"
},
"application/tamp-community-update-confirm": {
source: "iana"
},
"application/tamp-error": {
source: "iana"
},
"application/tamp-sequence-adjust": {
source: "iana"
},
"application/tamp-sequence-adjust-confirm": {
source: "iana"
},
"application/tamp-status-query": {
source: "iana"
},
"application/tamp-status-response": {
source: "iana"
},
"application/tamp-update": {
source: "iana"
},
"application/tamp-update-confirm": {
source: "iana"
},
"application/tar": {
compressible: true
},
"application/taxii+json": {
source: "iana",
compressible: true
},
"application/td+json": {
source: "iana",
compressible: true
},
"application/tei+xml": {
source: "iana",
compressible: true,
extensions: ["tei", "teicorpus"]
},
"application/tetra_isi": {
source: "iana"
},
"application/thraud+xml": {
source: "iana",
compressible: true,
extensions: ["tfi"]
},
"application/timestamp-query": {
source: "iana"
},
"application/timestamp-reply": {
source: "iana"
},
"application/timestamped-data": {
source: "iana",
extensions: ["tsd"]
},
"application/tlsrpt+gzip": {
source: "iana"
},
"application/tlsrpt+json": {
source: "iana",
compressible: true
},
"application/tm+json": {
source: "iana",
compressible: true
},
"application/tnauthlist": {
source: "iana"
},
"application/toc+cbor": {
source: "iana"
},
"application/token-introspection+jwt": {
source: "iana"
},
"application/toml": {
source: "iana",
compressible: true,
extensions: ["toml"]
},
"application/trickle-ice-sdpfrag": {
source: "iana"
},
"application/trig": {
source: "iana",
extensions: ["trig"]
},
"application/trust-chain+json": {
source: "iana",
compressible: true
},
"application/trust-mark+jwt": {
source: "iana"
},
"application/trust-mark-delegation+jwt": {
source: "iana"
},
"application/ttml+xml": {
source: "iana",
compressible: true,
extensions: ["ttml"]
},
"application/tve-trigger": {
source: "iana"
},
"application/tzif": {
source: "iana"
},
"application/tzif-leap": {
source: "iana"
},
"application/ubjson": {
compressible: false,
extensions: ["ubj"]
},
"application/uccs+cbor": {
source: "iana"
},
"application/ujcs+json": {
source: "iana",
compressible: true
},
"application/ulpfec": {
source: "iana"
},
"application/urc-grpsheet+xml": {
source: "iana",
compressible: true
},
"application/urc-ressheet+xml": {
source: "iana",
compressible: true,
extensions: ["rsheet"]
},
"application/urc-targetdesc+xml": {
source: "iana",
compressible: true,
extensions: ["td"]
},
"application/urc-uisocketdesc+xml": {
source: "iana",
compressible: true
},
"application/vc": {
source: "iana"
},
"application/vc+cose": {
source: "iana"
},
"application/vc+jwt": {
source: "iana"
},
"application/vcard+json": {
source: "iana",
compressible: true
},
"application/vcard+xml": {
source: "iana",
compressible: true
},
"application/vemmi": {
source: "iana"
},
"application/vividence.scriptfile": {
source: "apache"
},
"application/vnd.1000minds.decision-model+xml": {
source: "iana",
compressible: true,
extensions: ["1km"]
},
"application/vnd.1ob": {
source: "iana"
},
"application/vnd.3gpp-prose+xml": {
source: "iana",
compressible: true
},
"application/vnd.3gpp-prose-pc3a+xml": {
source: "iana",
compressible: true
},
"application/vnd.3gpp-prose-pc3ach+xml": {
source: "iana",
compressible: true
},
"application/vnd.3gpp-prose-pc3ch+xml": {
source: "iana",
compressible: true
},
"application/vnd.3gpp-prose-pc8+xml": {
source: "iana",
compressible: true
},
"application/vnd.3gpp-v2x-local-service-information": {
source: "iana"
},
"application/vnd.3gpp.5gnas": {
source: "iana"
},
"application/vnd.3gpp.5gsa2x": {
source: "iana"
},
"application/vnd.3gpp.5gsa2x-local-service-information": {
source: "iana"
},
"application/vnd.3gpp.5gsv2x": {
source: "iana"
},
"application/vnd.3gpp.5gsv2x-local-service-information": {
source: "iana"
},
"application/vnd.3gpp.access-transfer-events+xml": {
source: "iana",
compressible: true
},
"application/vnd.3gpp.bsf+xml": {
source: "iana",
compressible: true
},
"application/vnd.3gpp.crs+xml": {
source: "iana",
compressible: true
},
"application/vnd.3gpp.current-location-discovery+xml": {
source: "iana",
compressible: true
},
"application/vnd.3gpp.gmop+xml": {
source: "iana",
compressible: true
},
"application/vnd.3gpp.gtpc": {
source: "iana"
},
"application/vnd.3gpp.interworking-data": {
source: "iana"
},
"application/vnd.3gpp.lpp": {
source: "iana"
},
"application/vnd.3gpp.mc-signalling-ear": {
source: "iana"
},
"application/vnd.3gpp.mcdata-affiliation-command+xml": {
source: "iana",
compressible: true
},
"application/vnd.3gpp.mcdata-info+xml": {
source: "iana",
compressible: true
},
"application/vnd.3gpp.mcdata-msgstore-ctrl-request+xml": {
source: "iana",
compressible: true
},
"application/vnd.3gpp.mcdata-payload": {
source: "iana"
},
"application/vnd.3gpp.mcdata-regroup+xml": {
source: "iana",
compressible: true
},
"application/vnd.3gpp.mcdata-service-config+xml": {
source: "iana",
compressible: true
},
"application/vnd.3gpp.mcdata-signalling": {
source: "iana"
},
"application/vnd.3gpp.mcdata-ue-config+xml": {
source: "iana",
compressible: true
},
"application/vnd.3gpp.mcdata-user-profile+xml": {
source: "iana",
compressible: true
},
"application/vnd.3gpp.mcptt-affiliation-command+xml": {
source: "iana",
compressible: true
},
"application/vnd.3gpp.mcptt-floor-request+xml": {
source: "iana",
compressible: true
},
"application/vnd.3gpp.mcptt-info+xml": {
source: "iana",
compressible: true
},
"application/vnd.3gpp.mcptt-location-info+xml": {
source: "iana",
compressible: true
},
"application/vnd.3gpp.mcptt-mbms-usage-info+xml": {
source: "iana",
compressible: true
},
"application/vnd.3gpp.mcptt-regroup+xml": {
source: "iana",
compressible: true
},
"application/vnd.3gpp.mcptt-service-config+xml": {
source: "iana",
compressible: true
},
"application/vnd.3gpp.mcptt-signed+xml": {
source: "iana",
compressible: true
},
"application/vnd.3gpp.mcptt-ue-config+xml": {
source: "iana",
compressible: true
},
"application/vnd.3gpp.mcptt-ue-init-config+xml": {
source: "iana",
compressible: true
},
"application/vnd.3gpp.mcptt-user-profile+xml": {
source: "iana",
compressible: true
},
"application/vnd.3gpp.mcvideo-affiliation-command+xml": {
source: "iana",
compressible: true
},
"application/vnd.3gpp.mcvideo-info+xml": {
source: "iana",
compressible: true
},
"application/vnd.3gpp.mcvideo-location-info+xml": {
source: "iana",
compressible: true
},
"application/vnd.3gpp.mcvideo-mbms-usage-info+xml": {
source: "iana",
compressible: true
},
"application/vnd.3gpp.mcvideo-regroup+xml": {
source: "iana",
compressible: true
},
"application/vnd.3gpp.mcvideo-service-config+xml": {
source: "iana",
compressible: true
},
"application/vnd.3gpp.mcvideo-transmission-request+xml": {
source: "iana",
compressible: true
},
"application/vnd.3gpp.mcvideo-ue-config+xml": {
source: "iana",
compressible: true
},
"application/vnd.3gpp.mcvideo-user-profile+xml": {
source: "iana",
compressible: true
},
"application/vnd.3gpp.mid-call+xml": {
source: "iana",
compressible: true
},
"application/vnd.3gpp.ngap": {
source: "iana"
},
"application/vnd.3gpp.pfcp": {
source: "iana"
},
"application/vnd.3gpp.pic-bw-large": {
source: "iana",
extensions: ["plb"]
},
"application/vnd.3gpp.pic-bw-small": {
source: "iana",
extensions: ["psb"]
},
"application/vnd.3gpp.pic-bw-var": {
source: "iana",
extensions: ["pvb"]
},
"application/vnd.3gpp.pinapp-info+xml": {
source: "iana",
compressible: true
},
"application/vnd.3gpp.s1ap": {
source: "iana"
},
"application/vnd.3gpp.seal-group-doc+xml": {
source: "iana",
compressible: true
},
"application/vnd.3gpp.seal-info+xml": {
source: "iana",
compressible: true
},
"application/vnd.3gpp.seal-location-info+xml": {
source: "iana",
compressible: true
},
"application/vnd.3gpp.seal-mbms-usage-info+xml": {
source: "iana",
compressible: true
},
"application/vnd.3gpp.seal-network-qos-management-info+xml": {
source: "iana",
compressible: true
},
"application/vnd.3gpp.seal-ue-config-info+xml": {
source: "iana",
compressible: true
},
"application/vnd.3gpp.seal-unicast-info+xml": {
source: "iana",
compressible: true
},
"application/vnd.3gpp.seal-user-profile-info+xml": {
source: "iana",
compressible: true
},
"application/vnd.3gpp.sms": {
source: "iana"
},
"application/vnd.3gpp.sms+xml": {
source: "iana",
compressible: true
},
"application/vnd.3gpp.srvcc-ext+xml": {
source: "iana",
compressible: true
},
"application/vnd.3gpp.srvcc-info+xml": {
source: "iana",
compressible: true
},
"application/vnd.3gpp.state-and-event-info+xml": {
source: "iana",
compressible: true
},
"application/vnd.3gpp.ussd+xml": {
source: "iana",
compressible: true
},
"application/vnd.3gpp.v2x": {
source: "iana"
},
"application/vnd.3gpp.vae-info+xml": {
source: "iana",
compressible: true
},
"application/vnd.3gpp2.bcmcsinfo+xml": {
source: "iana",
compressible: true
},
"application/vnd.3gpp2.sms": {
source: "iana"
},
"application/vnd.3gpp2.tcap": {
source: "iana",
extensions: ["tcap"]
},
"application/vnd.3lightssoftware.imagescal": {
source: "iana"
},
"application/vnd.3m.post-it-notes": {
source: "iana",
extensions: ["pwn"]
},
"application/vnd.accpac.simply.aso": {
source: "iana",
extensions: ["aso"]
},
"application/vnd.accpac.simply.imp": {
source: "iana",
extensions: ["imp"]
},
"application/vnd.acm.addressxfer+json": {
source: "iana",
compressible: true
},
"application/vnd.acm.chatbot+json": {
source: "iana",
compressible: true
},
"application/vnd.acucobol": {
source: "iana",
extensions: ["acu"]
},
"application/vnd.acucorp": {
source: "iana",
extensions: ["atc", "acutc"]
},
"application/vnd.adobe.air-application-installer-package+zip": {
source: "apache",
compressible: false,
extensions: ["air"]
},
"application/vnd.adobe.flash.movie": {
source: "iana"
},
"application/vnd.adobe.formscentral.fcdt": {
source: "iana",
extensions: ["fcdt"]
},
"application/vnd.adobe.fxp": {
source: "iana",
extensions: ["fxp", "fxpl"]
},
"application/vnd.adobe.partial-upload": {
source: "iana"
},
"application/vnd.adobe.xdp+xml": {
source: "iana",
compressible: true,
extensions: ["xdp"]
},
"application/vnd.adobe.xfdf": {
source: "apache",
extensions: ["xfdf"]
},
"application/vnd.aether.imp": {
source: "iana"
},
"application/vnd.afpc.afplinedata": {
source: "iana"
},
"application/vnd.afpc.afplinedata-pagedef": {
source: "iana"
},
"application/vnd.afpc.cmoca-cmresource": {
source: "iana"
},
"application/vnd.afpc.foca-charset": {
source: "iana"
},
"application/vnd.afpc.foca-codedfont": {
source: "iana"
},
"application/vnd.afpc.foca-codepage": {
source: "iana"
},
"application/vnd.afpc.modca": {
source: "iana"
},
"application/vnd.afpc.modca-cmtable": {
source: "iana"
},
"application/vnd.afpc.modca-formdef": {
source: "iana"
},
"application/vnd.afpc.modca-mediummap": {
source: "iana"
},
"application/vnd.afpc.modca-objectcontainer": {
source: "iana"
},
"application/vnd.afpc.modca-overlay": {
source: "iana"
},
"application/vnd.afpc.modca-pagesegment": {
source: "iana"
},
"application/vnd.age": {
source: "iana",
extensions: ["age"]
},
"application/vnd.ah-barcode": {
source: "apache"
},
"application/vnd.ahead.space": {
source: "iana",
extensions: ["ahead"]
},
"application/vnd.airzip.filesecure.azf": {
source: "iana",
extensions: ["azf"]
},
"application/vnd.airzip.filesecure.azs": {
source: "iana",
extensions: ["azs"]
},
"application/vnd.amadeus+json": {
source: "iana",
compressible: true
},
"application/vnd.amazon.ebook": {
source: "apache",
extensions: ["azw"]
},
"application/vnd.amazon.mobi8-ebook": {
source: "iana"
},
"application/vnd.americandynamics.acc": {
source: "iana",
extensions: ["acc"]
},
"application/vnd.amiga.ami": {
source: "iana",
extensions: ["ami"]
},
"application/vnd.amundsen.maze+xml": {
source: "iana",
compressible: true
},
"application/vnd.android.ota": {
source: "iana"
},
"application/vnd.android.package-archive": {
source: "apache",
compressible: false,
extensions: ["apk"]
},
"application/vnd.anki": {
source: "iana"
},
"application/vnd.anser-web-certificate-issue-initiation": {
source: "iana",
extensions: ["cii"]
},
"application/vnd.anser-web-funds-transfer-initiation": {
source: "apache",
extensions: ["fti"]
},
"application/vnd.antix.game-component": {
source: "iana",
extensions: ["atx"]
},
"application/vnd.apache.arrow.file": {
source: "iana"
},
"application/vnd.apache.arrow.stream": {
source: "iana"
},
"application/vnd.apache.parquet": {
source: "iana"
},
"application/vnd.apache.thrift.binary": {
source: "iana"
},
"application/vnd.apache.thrift.compact": {
source: "iana"
},
"application/vnd.apache.thrift.json": {
source: "iana"
},
"application/vnd.apexlang": {
source: "iana"
},
"application/vnd.api+json": {
source: "iana",
compressible: true
},
"application/vnd.aplextor.warrp+json": {
source: "iana",
compressible: true
},
"application/vnd.apothekende.reservation+json": {
source: "iana",
compressible: true
},
"application/vnd.apple.installer+xml": {
source: "iana",
compressible: true,
extensions: ["mpkg"]
},
"application/vnd.apple.keynote": {
source: "iana",
extensions: ["key"]
},
"application/vnd.apple.mpegurl": {
source: "iana",
extensions: ["m3u8"]
},
"application/vnd.apple.numbers": {
source: "iana",
extensions: ["numbers"]
},
"application/vnd.apple.pages": {
source: "iana",
extensions: ["pages"]
},
"application/vnd.apple.pkpass": {
compressible: false,
extensions: ["pkpass"]
},
"application/vnd.arastra.swi": {
source: "apache"
},
"application/vnd.aristanetworks.swi": {
source: "iana",
extensions: ["swi"]
},
"application/vnd.artisan+json": {
source: "iana",
compressible: true
},
"application/vnd.artsquare": {
source: "iana"
},
"application/vnd.astraea-software.iota": {
source: "iana",
extensions: ["iota"]
},
"application/vnd.audiograph": {
source: "iana",
extensions: ["aep"]
},
"application/vnd.autodesk.fbx": {
extensions: ["fbx"]
},
"application/vnd.autopackage": {
source: "iana"
},
"application/vnd.avalon+json": {
source: "iana",
compressible: true
},
"application/vnd.avistar+xml": {
source: "iana",
compressible: true
},
"application/vnd.balsamiq.bmml+xml": {
source: "iana",
compressible: true,
extensions: ["bmml"]
},
"application/vnd.balsamiq.bmpr": {
source: "iana"
},
"application/vnd.banana-accounting": {
source: "iana"
},
"application/vnd.bbf.usp.error": {
source: "iana"
},
"application/vnd.bbf.usp.msg": {
source: "iana"
},
"application/vnd.bbf.usp.msg+json": {
source: "iana",
compressible: true
},
"application/vnd.bekitzur-stech+json": {
source: "iana",
compressible: true
},
"application/vnd.belightsoft.lhzd+zip": {
source: "iana",
compressible: false
},
"application/vnd.belightsoft.lhzl+zip": {
source: "iana",
compressible: false
},
"application/vnd.bint.med-content": {
source: "iana"
},
"application/vnd.biopax.rdf+xml": {
source: "iana",
compressible: true
},
"application/vnd.blink-idb-value-wrapper": {
source: "iana"
},
"application/vnd.blueice.multipass": {
source: "iana",
extensions: ["mpm"]
},
"application/vnd.bluetooth.ep.oob": {
source: "iana"
},
"application/vnd.bluetooth.le.oob": {
source: "iana"
},
"application/vnd.bmi": {
source: "iana",
extensions: ["bmi"]
},
"application/vnd.bpf": {
source: "iana"
},
"application/vnd.bpf3": {
source: "iana"
},
"application/vnd.businessobjects": {
source: "iana",
extensions: ["rep"]
},
"application/vnd.byu.uapi+json": {
source: "iana",
compressible: true
},
"application/vnd.bzip3": {
source: "iana"
},
"application/vnd.c3voc.schedule+xml": {
source: "iana",
compressible: true
},
"application/vnd.cab-jscript": {
source: "iana"
},
"application/vnd.canon-cpdl": {
source: "iana"
},
"application/vnd.canon-lips": {
source: "iana"
},
"application/vnd.capasystems-pg+json": {
source: "iana",
compressible: true
},
"application/vnd.cendio.thinlinc.clientconf": {
source: "iana"
},
"application/vnd.century-systems.tcp_stream": {
source: "iana"
},
"application/vnd.chemdraw+xml": {
source: "iana",
compressible: true,
extensions: ["cdxml"]
},
"application/vnd.chess-pgn": {
source: "iana"
},
"application/vnd.chipnuts.karaoke-mmd": {
source: "iana",
extensions: ["mmd"]
},
"application/vnd.ciedi": {
source: "iana"
},
"application/vnd.cinderella": {
source: "iana",
extensions: ["cdy"]
},
"application/vnd.cirpack.isdn-ext": {
source: "iana"
},
"application/vnd.citationstyles.style+xml": {
source: "iana",
compressible: true,
extensions: ["csl"]
},
"application/vnd.claymore": {
source: "iana",
extensions: ["cla"]
},
"application/vnd.cloanto.rp9": {
source: "iana",
extensions: ["rp9"]
},
"application/vnd.clonk.c4group": {
source: "iana",
extensions: ["c4g", "c4d", "c4f", "c4p", "c4u"]
},
"application/vnd.cluetrust.cartomobile-config": {
source: "iana",
extensions: ["c11amc"]
},
"application/vnd.cluetrust.cartomobile-config-pkg": {
source: "iana",
extensions: ["c11amz"]
},
"application/vnd.cncf.helm.chart.content.v1.tar+gzip": {
source: "iana"
},
"application/vnd.cncf.helm.chart.provenance.v1.prov": {
source: "iana"
},
"application/vnd.cncf.helm.config.v1+json": {
source: "iana",
compressible: true
},
"application/vnd.coffeescript": {
source: "iana"
},
"application/vnd.collabio.xodocuments.document": {
source: "iana"
},
"application/vnd.collabio.xodocuments.document-template": {
source: "iana"
},
"application/vnd.collabio.xodocuments.presentation": {
source: "iana"
},
"application/vnd.collabio.xodocuments.presentation-template": {
source: "iana"
},
"application/vnd.collabio.xodocuments.spreadsheet": {
source: "iana"
},
"application/vnd.collabio.xodocuments.spreadsheet-template": {
source: "iana"
},
"application/vnd.collection+json": {
source: "iana",
compressible: true
},
"application/vnd.collection.doc+json": {
source: "iana",
compressible: true
},
"application/vnd.collection.next+json": {
source: "iana",
compressible: true
},
"application/vnd.comicbook+zip": {
source: "iana",
compressible: false
},
"application/vnd.comicbook-rar": {
source: "iana"
},
"application/vnd.commerce-battelle": {
source: "iana"
},
"application/vnd.commonspace": {
source: "iana",
extensions: ["csp"]
},
"application/vnd.contact.cmsg": {
source: "iana",
extensions: ["cdbcmsg"]
},
"application/vnd.coreos.ignition+json": {
source: "iana",
compressible: true
},
"application/vnd.cosmocaller": {
source: "iana",
extensions: ["cmc"]
},
"application/vnd.crick.clicker": {
source: "iana",
extensions: ["clkx"]
},
"application/vnd.crick.clicker.keyboard": {
source: "iana",
extensions: ["clkk"]
},
"application/vnd.crick.clicker.palette": {
source: "iana",
extensions: ["clkp"]
},
"application/vnd.crick.clicker.template": {
source: "iana",
extensions: ["clkt"]
},
"application/vnd.crick.clicker.wordbank": {
source: "iana",
extensions: ["clkw"]
},
"application/vnd.criticaltools.wbs+xml": {
source: "iana",
compressible: true,
extensions: ["wbs"]
},
"application/vnd.cryptii.pipe+json": {
source: "iana",
compressible: true
},
"application/vnd.crypto-shade-file": {
source: "iana"
},
"application/vnd.cryptomator.encrypted": {
source: "iana"
},
"application/vnd.cryptomator.vault": {
source: "iana"
},
"application/vnd.ctc-posml": {
source: "iana",
extensions: ["pml"]
},
"application/vnd.ctct.ws+xml": {
source: "iana",
compressible: true
},
"application/vnd.cups-pdf": {
source: "iana"
},
"application/vnd.cups-postscript": {
source: "iana"
},
"application/vnd.cups-ppd": {
source: "iana",
extensions: ["ppd"]
},
"application/vnd.cups-raster": {
source: "iana"
},
"application/vnd.cups-raw": {
source: "iana"
},
"application/vnd.curl": {
source: "iana"
},
"application/vnd.curl.car": {
source: "apache",
extensions: ["car"]
},
"application/vnd.curl.pcurl": {
source: "apache",
extensions: ["pcurl"]
},
"application/vnd.cyan.dean.root+xml": {
source: "iana",
compressible: true
},
"application/vnd.cybank": {
source: "iana"
},
"application/vnd.cyclonedx+json": {
source: "iana",
compressible: true
},
"application/vnd.cyclonedx+xml": {
source: "iana",
compressible: true
},
"application/vnd.d2l.coursepackage1p0+zip": {
source: "iana",
compressible: false
},
"application/vnd.d3m-dataset": {
source: "iana"
},
"application/vnd.d3m-problem": {
source: "iana"
},
"application/vnd.dart": {
source: "iana",
compressible: true,
extensions: ["dart"]
},
"application/vnd.data-vision.rdz": {
source: "iana",
extensions: ["rdz"]
},
"application/vnd.datalog": {
source: "iana"
},
"application/vnd.datapackage+json": {
source: "iana",
compressible: true
},
"application/vnd.dataresource+json": {
source: "iana",
compressible: true
},
"application/vnd.dbf": {
source: "iana",
extensions: ["dbf"]
},
"application/vnd.dcmp+xml": {
source: "iana",
compressible: true,
extensions: ["dcmp"]
},
"application/vnd.debian.binary-package": {
source: "iana"
},
"application/vnd.dece.data": {
source: "iana",
extensions: ["uvf", "uvvf", "uvd", "uvvd"]
},
"application/vnd.dece.ttml+xml": {
source: "iana",
compressible: true,
extensions: ["uvt", "uvvt"]
},
"application/vnd.dece.unspecified": {
source: "iana",
extensions: ["uvx", "uvvx"]
},
"application/vnd.dece.zip": {
source: "iana",
extensions: ["uvz", "uvvz"]
},
"application/vnd.denovo.fcselayout-link": {
source: "iana",
extensions: ["fe_launch"]
},
"application/vnd.desmume.movie": {
source: "iana"
},
"application/vnd.dir-bi.plate-dl-nosuffix": {
source: "iana"
},
"application/vnd.dm.delegation+xml": {
source: "iana",
compressible: true
},
"application/vnd.dna": {
source: "iana",
extensions: ["dna"]
},
"application/vnd.document+json": {
source: "iana",
compressible: true
},
"application/vnd.dolby.mlp": {
source: "apache",
extensions: ["mlp"]
},
"application/vnd.dolby.mobile.1": {
source: "iana"
},
"application/vnd.dolby.mobile.2": {
source: "iana"
},
"application/vnd.doremir.scorecloud-binary-document": {
source: "iana"
},
"application/vnd.dpgraph": {
source: "iana",
extensions: ["dpg"]
},
"application/vnd.dreamfactory": {
source: "iana",
extensions: ["dfac"]
},
"application/vnd.drive+json": {
source: "iana",
compressible: true
},
"application/vnd.ds-keypoint": {
source: "apache",
extensions: ["kpxx"]
},
"application/vnd.dtg.local": {
source: "iana"
},
"application/vnd.dtg.local.flash": {
source: "iana"
},
"application/vnd.dtg.local.html": {
source: "iana"
},
"application/vnd.dvb.ait": {
source: "iana",
extensions: ["ait"]
},
"application/vnd.dvb.dvbisl+xml": {
source: "iana",
compressible: true
},
"application/vnd.dvb.dvbj": {
source: "iana"
},
"application/vnd.dvb.esgcontainer": {
source: "iana"
},
"application/vnd.dvb.ipdcdftnotifaccess": {
source: "iana"
},
"application/vnd.dvb.ipdcesgaccess": {
source: "iana"
},
"application/vnd.dvb.ipdcesgaccess2": {
source: "iana"
},
"application/vnd.dvb.ipdcesgpdd": {
source: "iana"
},
"application/vnd.dvb.ipdcroaming": {
source: "iana"
},
"application/vnd.dvb.iptv.alfec-base": {
source: "iana"
},
"application/vnd.dvb.iptv.alfec-enhancement": {
source: "iana"
},
"application/vnd.dvb.notif-aggregate-root+xml": {
source: "iana",
compressible: true
},
"application/vnd.dvb.notif-container+xml": {
source: "iana",
compressible: true
},
"application/vnd.dvb.notif-generic+xml": {
source: "iana",
compressible: true
},
"application/vnd.dvb.notif-ia-msglist+xml": {
source: "iana",
compressible: true
},
"application/vnd.dvb.notif-ia-registration-request+xml": {
source: "iana",
compressible: true
},
"application/vnd.dvb.notif-ia-registration-response+xml": {
source: "iana",
compressible: true
},
"application/vnd.dvb.notif-init+xml": {
source: "iana",
compressible: true
},
"application/vnd.dvb.pfr": {
source: "iana"
},
"application/vnd.dvb.service": {
source: "iana",
extensions: ["svc"]
},
"application/vnd.dxr": {
source: "iana"
},
"application/vnd.dynageo": {
source: "iana",
extensions: ["geo"]
},
"application/vnd.dzr": {
source: "iana"
},
"application/vnd.easykaraoke.cdgdownload": {
source: "iana"
},
"application/vnd.ecdis-update": {
source: "iana"
},
"application/vnd.ecip.rlp": {
source: "iana"
},
"application/vnd.eclipse.ditto+json": {
source: "iana",
compressible: true
},
"application/vnd.ecowin.chart": {
source: "iana",
extensions: ["mag"]
},
"application/vnd.ecowin.filerequest": {
source: "iana"
},
"application/vnd.ecowin.fileupdate": {
source: "iana"
},
"application/vnd.ecowin.series": {
source: "iana"
},
"application/vnd.ecowin.seriesrequest": {
source: "iana"
},
"application/vnd.ecowin.seriesupdate": {
source: "iana"
},
"application/vnd.efi.img": {
source: "iana"
},
"application/vnd.efi.iso": {
source: "iana"
},
"application/vnd.eln+zip": {
source: "iana",
compressible: false
},
"application/vnd.emclient.accessrequest+xml": {
source: "iana",
compressible: true
},
"application/vnd.enliven": {
source: "iana",
extensions: ["nml"]
},
"application/vnd.enphase.envoy": {
source: "iana"
},
"application/vnd.eprints.data+xml": {
source: "iana",
compressible: true
},
"application/vnd.epson.esf": {
source: "iana",
extensions: ["esf"]
},
"application/vnd.epson.msf": {
source: "iana",
extensions: ["msf"]
},
"application/vnd.epson.quickanime": {
source: "iana",
extensions: ["qam"]
},
"application/vnd.epson.salt": {
source: "iana",
extensions: ["slt"]
},
"application/vnd.epson.ssf": {
source: "iana",
extensions: ["ssf"]
},
"application/vnd.ericsson.quickcall": {
source: "iana"
},
"application/vnd.erofs": {
source: "iana"
},
"application/vnd.espass-espass+zip": {
source: "iana",
compressible: false
},
"application/vnd.eszigno3+xml": {
source: "iana",
compressible: true,
extensions: ["es3", "et3"]
},
"application/vnd.etsi.aoc+xml": {
source: "iana",
compressible: true
},
"application/vnd.etsi.asic-e+zip": {
source: "iana",
compressible: false
},
"application/vnd.etsi.asic-s+zip": {
source: "iana",
compressible: false
},
"application/vnd.etsi.cug+xml": {
source: "iana",
compressible: true
},
"application/vnd.etsi.iptvcommand+xml": {
source: "iana",
compressible: true
},
"application/vnd.etsi.iptvdiscovery+xml": {
source: "iana",
compressible: true
},
"application/vnd.etsi.iptvprofile+xml": {
source: "iana",
compressible: true
},
"application/vnd.etsi.iptvsad-bc+xml": {
source: "iana",
compressible: true
},
"application/vnd.etsi.iptvsad-cod+xml": {
source: "iana",
compressible: true
},
"application/vnd.etsi.iptvsad-npvr+xml": {
source: "iana",
compressible: true
},
"application/vnd.etsi.iptvservice+xml": {
source: "iana",
compressible: true
},
"application/vnd.etsi.iptvsync+xml": {
source: "iana",
compressible: true
},
"application/vnd.etsi.iptvueprofile+xml": {
source: "iana",
compressible: true
},
"application/vnd.etsi.mcid+xml": {
source: "iana",
compressible: true
},
"application/vnd.etsi.mheg5": {
source: "iana"
},
"application/vnd.etsi.overload-control-policy-dataset+xml": {
source: "iana",
compressible: true
},
"application/vnd.etsi.pstn+xml": {
source: "iana",
compressible: true
},
"application/vnd.etsi.sci+xml": {
source: "iana",
compressible: true
},
"application/vnd.etsi.simservs+xml": {
source: "iana",
compressible: true
},
"application/vnd.etsi.timestamp-token": {
source: "iana"
},
"application/vnd.etsi.tsl+xml": {
source: "iana",
compressible: true
},
"application/vnd.etsi.tsl.der": {
source: "iana"
},
"application/vnd.eu.kasparian.car+json": {
source: "iana",
compressible: true
},
"application/vnd.eudora.data": {
source: "iana"
},
"application/vnd.evolv.ecig.profile": {
source: "iana"
},
"application/vnd.evolv.ecig.settings": {
source: "iana"
},
"application/vnd.evolv.ecig.theme": {
source: "iana"
},
"application/vnd.exstream-empower+zip": {
source: "iana",
compressible: false
},
"application/vnd.exstream-package": {
source: "iana"
},
"application/vnd.ezpix-album": {
source: "iana",
extensions: ["ez2"]
},
"application/vnd.ezpix-package": {
source: "iana",
extensions: ["ez3"]
},
"application/vnd.f-secure.mobile": {
source: "iana"
},
"application/vnd.familysearch.gedcom+zip": {
source: "iana",
compressible: false
},
"application/vnd.fastcopy-disk-image": {
source: "iana"
},
"application/vnd.fdf": {
source: "apache",
extensions: ["fdf"]
},
"application/vnd.fdsn.mseed": {
source: "iana",
extensions: ["mseed"]
},
"application/vnd.fdsn.seed": {
source: "iana",
extensions: ["seed", "dataless"]
},
"application/vnd.fdsn.stationxml+xml": {
source: "iana",
charset: "XML-BASED",
compressible: true
},
"application/vnd.ffsns": {
source: "iana"
},
"application/vnd.ficlab.flb+zip": {
source: "iana",
compressible: false
},
"application/vnd.filmit.zfc": {
source: "iana"
},
"application/vnd.fints": {
source: "iana"
},
"application/vnd.firemonkeys.cloudcell": {
source: "iana"
},
"application/vnd.flographit": {
source: "iana",
extensions: ["gph"]
},
"application/vnd.fluxtime.clip": {
source: "iana",
extensions: ["ftc"]
},
"application/vnd.font-fontforge-sfd": {
source: "iana"
},
"application/vnd.framemaker": {
source: "iana",
extensions: ["fm", "frame", "maker", "book"]
},
"application/vnd.freelog.comic": {
source: "iana"
},
"application/vnd.frogans.fnc": {
source: "apache",
extensions: ["fnc"]
},
"application/vnd.frogans.ltf": {
source: "apache",
extensions: ["ltf"]
},
"application/vnd.fsc.weblaunch": {
source: "iana",
extensions: ["fsc"]
},
"application/vnd.fujifilm.fb.docuworks": {
source: "iana"
},
"application/vnd.fujifilm.fb.docuworks.binder": {
source: "iana"
},
"application/vnd.fujifilm.fb.docuworks.container": {
source: "iana"
},
"application/vnd.fujifilm.fb.jfi+xml": {
source: "iana",
compressible: true
},
"application/vnd.fujitsu.oasys": {
source: "iana",
extensions: ["oas"]
},
"application/vnd.fujitsu.oasys2": {
source: "iana",
extensions: ["oa2"]
},
"application/vnd.fujitsu.oasys3": {
source: "iana",
extensions: ["oa3"]
},
"application/vnd.fujitsu.oasysgp": {
source: "iana",
extensions: ["fg5"]
},
"application/vnd.fujitsu.oasysprs": {
source: "iana",
extensions: ["bh2"]
},
"application/vnd.fujixerox.art-ex": {
source: "iana"
},
"application/vnd.fujixerox.art4": {
source: "iana"
},
"application/vnd.fujixerox.ddd": {
source: "iana",
extensions: ["ddd"]
},
"application/vnd.fujixerox.docuworks": {
source: "iana",
extensions: ["xdw"]
},
"application/vnd.fujixerox.docuworks.binder": {
source: "iana",
extensions: ["xbd"]
},
"application/vnd.fujixerox.docuworks.container": {
source: "iana"
},
"application/vnd.fujixerox.hbpl": {
source: "iana"
},
"application/vnd.fut-misnet": {
source: "iana"
},
"application/vnd.futoin+cbor": {
source: "iana"
},
"application/vnd.futoin+json": {
source: "iana",
compressible: true
},
"application/vnd.fuzzysheet": {
source: "iana",
extensions: ["fzs"]
},
"application/vnd.ga4gh.passport+jwt": {
source: "iana"
},
"application/vnd.genomatix.tuxedo": {
source: "iana",
extensions: ["txd"]
},
"application/vnd.genozip": {
source: "iana"
},
"application/vnd.gentics.grd+json": {
source: "iana",
compressible: true
},
"application/vnd.gentoo.catmetadata+xml": {
source: "iana",
compressible: true
},
"application/vnd.gentoo.ebuild": {
source: "iana"
},
"application/vnd.gentoo.eclass": {
source: "iana"
},
"application/vnd.gentoo.gpkg": {
source: "iana"
},
"application/vnd.gentoo.manifest": {
source: "iana"
},
"application/vnd.gentoo.pkgmetadata+xml": {
source: "iana",
compressible: true
},
"application/vnd.gentoo.xpak": {
source: "iana"
},
"application/vnd.geo+json": {
source: "apache",
compressible: true
},
"application/vnd.geocube+xml": {
source: "apache",
compressible: true
},
"application/vnd.geogebra.file": {
source: "iana",
extensions: ["ggb"]
},
"application/vnd.geogebra.pinboard": {
source: "iana"
},
"application/vnd.geogebra.slides": {
source: "iana",
extensions: ["ggs"]
},
"application/vnd.geogebra.tool": {
source: "iana",
extensions: ["ggt"]
},
"application/vnd.geometry-explorer": {
source: "iana",
extensions: ["gex", "gre"]
},
"application/vnd.geonext": {
source: "iana",
extensions: ["gxt"]
},
"application/vnd.geoplan": {
source: "iana",
extensions: ["g2w"]
},
"application/vnd.geospace": {
source: "iana",
extensions: ["g3w"]
},
"application/vnd.gerber": {
source: "iana"
},
"application/vnd.globalplatform.card-content-mgt": {
source: "iana"
},
"application/vnd.globalplatform.card-content-mgt-response": {
source: "iana"
},
"application/vnd.gmx": {
source: "iana",
extensions: ["gmx"]
},
"application/vnd.gnu.taler.exchange+json": {
source: "iana",
compressible: true
},
"application/vnd.gnu.taler.merchant+json": {
source: "iana",
compressible: true
},
"application/vnd.google-apps.audio": {},
"application/vnd.google-apps.document": {
compressible: false,
extensions: ["gdoc"]
},
"application/vnd.google-apps.drawing": {
compressible: false,
extensions: ["gdraw"]
},
"application/vnd.google-apps.drive-sdk": {
compressible: false
},
"application/vnd.google-apps.file": {},
"application/vnd.google-apps.folder": {
compressible: false
},
"application/vnd.google-apps.form": {
compressible: false,
extensions: ["gform"]
},
"application/vnd.google-apps.fusiontable": {},
"application/vnd.google-apps.jam": {
compressible: false,
extensions: ["gjam"]
},
"application/vnd.google-apps.mail-layout": {},
"application/vnd.google-apps.map": {
compressible: false,
extensions: ["gmap"]
},
"application/vnd.google-apps.photo": {},
"application/vnd.google-apps.presentation": {
compressible: false,
extensions: ["gslides"]
},
"application/vnd.google-apps.script": {
compressible: false,
extensions: ["gscript"]
},
"application/vnd.google-apps.shortcut": {},
"application/vnd.google-apps.site": {
compressible: false,
extensions: ["gsite"]
},
"application/vnd.google-apps.spreadsheet": {
compressible: false,
extensions: ["gsheet"]
},
"application/vnd.google-apps.unknown": {},
"application/vnd.google-apps.video": {},
"application/vnd.google-earth.kml+xml": {
source: "iana",
compressible: true,
extensions: ["kml"]
},
"application/vnd.google-earth.kmz": {
source: "iana",
compressible: false,
extensions: ["kmz"]
},
"application/vnd.gov.sk.e-form+xml": {
source: "apache",
compressible: true
},
"application/vnd.gov.sk.e-form+zip": {
source: "iana",
compressible: false
},
"application/vnd.gov.sk.xmldatacontainer+xml": {
source: "iana",
compressible: true,
extensions: ["xdcf"]
},
"application/vnd.gpxsee.map+xml": {
source: "iana",
compressible: true
},
"application/vnd.grafeq": {
source: "iana",
extensions: ["gqf", "gqs"]
},
"application/vnd.gridmp": {
source: "iana"
},
"application/vnd.groove-account": {
source: "iana",
extensions: ["gac"]
},
"application/vnd.groove-help": {
source: "iana",
extensions: ["ghf"]
},
"application/vnd.groove-identity-message": {
source: "iana",
extensions: ["gim"]
},
"application/vnd.groove-injector": {
source: "iana",
extensions: ["grv"]
},
"application/vnd.groove-tool-message": {
source: "iana",
extensions: ["gtm"]
},
"application/vnd.groove-tool-template": {
source: "iana",
extensions: ["tpl"]
},
"application/vnd.groove-vcard": {
source: "iana",
extensions: ["vcg"]
},
"application/vnd.hal+json": {
source: "iana",
compressible: true
},
"application/vnd.hal+xml": {
source: "iana",
compressible: true,
extensions: ["hal"]
},
"application/vnd.handheld-entertainment+xml": {
source: "iana",
compressible: true,
extensions: ["zmm"]
},
"application/vnd.hbci": {
source: "iana",
extensions: ["hbci"]
},
"application/vnd.hc+json": {
source: "iana",
compressible: true
},
"application/vnd.hcl-bireports": {
source: "iana"
},
"application/vnd.hdt": {
source: "iana"
},
"application/vnd.heroku+json": {
source: "iana",
compressible: true
},
"application/vnd.hhe.lesson-player": {
source: "iana",
extensions: ["les"]
},
"application/vnd.hp-hpgl": {
source: "iana",
extensions: ["hpgl"]
},
"application/vnd.hp-hpid": {
source: "iana",
extensions: ["hpid"]
},
"application/vnd.hp-hps": {
source: "iana",
extensions: ["hps"]
},
"application/vnd.hp-jlyt": {
source: "iana",
extensions: ["jlt"]
},
"application/vnd.hp-pcl": {
source: "iana",
extensions: ["pcl"]
},
"application/vnd.hp-pclxl": {
source: "iana",
extensions: ["pclxl"]
},
"application/vnd.hsl": {
source: "iana"
},
"application/vnd.httphone": {
source: "iana"
},
"application/vnd.hydrostatix.sof-data": {
source: "iana",
extensions: ["sfd-hdstx"]
},
"application/vnd.hyper+json": {
source: "iana",
compressible: true
},
"application/vnd.hyper-item+json": {
source: "iana",
compressible: true
},
"application/vnd.hyperdrive+json": {
source: "iana",
compressible: true
},
"application/vnd.hzn-3d-crossword": {
source: "iana"
},
"application/vnd.ibm.afplinedata": {
source: "apache"
},
"application/vnd.ibm.electronic-media": {
source: "iana"
},
"application/vnd.ibm.minipay": {
source: "iana",
extensions: ["mpy"]
},
"application/vnd.ibm.modcap": {
source: "apache",
extensions: ["afp", "listafp", "list3820"]
},
"application/vnd.ibm.rights-management": {
source: "iana",
extensions: ["irm"]
},
"application/vnd.ibm.secure-container": {
source: "iana",
extensions: ["sc"]
},
"application/vnd.iccprofile": {
source: "iana",
extensions: ["icc", "icm"]
},
"application/vnd.ieee.1905": {
source: "iana"
},
"application/vnd.igloader": {
source: "iana",
extensions: ["igl"]
},
"application/vnd.imagemeter.folder+zip": {
source: "iana",
compressible: false
},
"application/vnd.imagemeter.image+zip": {
source: "iana",
compressible: false
},
"application/vnd.immervision-ivp": {
source: "iana",
extensions: ["ivp"]
},
"application/vnd.immervision-ivu": {
source: "iana",
extensions: ["ivu"]
},
"application/vnd.ims.imsccv1p1": {
source: "iana"
},
"application/vnd.ims.imsccv1p2": {
source: "iana"
},
"application/vnd.ims.imsccv1p3": {
source: "iana"
},
"application/vnd.ims.lis.v2.result+json": {
source: "iana",
compressible: true
},
"application/vnd.ims.lti.v2.toolconsumerprofile+json": {
source: "iana",
compressible: true
},
"application/vnd.ims.lti.v2.toolproxy+json": {
source: "iana",
compressible: true
},
"application/vnd.ims.lti.v2.toolproxy.id+json": {
source: "iana",
compressible: true
},
"application/vnd.ims.lti.v2.toolsettings+json": {
source: "iana",
compressible: true
},
"application/vnd.ims.lti.v2.toolsettings.simple+json": {
source: "iana",
compressible: true
},
"application/vnd.informedcontrol.rms+xml": {
source: "iana",
compressible: true
},
"application/vnd.informix-visionary": {
source: "apache"
},
"application/vnd.infotech.project": {
source: "iana"
},
"application/vnd.infotech.project+xml": {
source: "iana",
compressible: true
},
"application/vnd.innopath.wamp.notification": {
source: "iana"
},
"application/vnd.insors.igm": {
source: "iana",
extensions: ["igm"]
},
"application/vnd.intercon.formnet": {
source: "iana",
extensions: ["xpw", "xpx"]
},
"application/vnd.intergeo": {
source: "iana",
extensions: ["i2g"]
},
"application/vnd.intertrust.digibox": {
source: "iana"
},
"application/vnd.intertrust.nncp": {
source: "iana"
},
"application/vnd.intu.qbo": {
source: "iana",
extensions: ["qbo"]
},
"application/vnd.intu.qfx": {
source: "iana",
extensions: ["qfx"]
},
"application/vnd.ipfs.ipns-record": {
source: "iana"
},
"application/vnd.ipld.car": {
source: "iana"
},
"application/vnd.ipld.dag-cbor": {
source: "iana"
},
"application/vnd.ipld.dag-json": {
source: "iana"
},
"application/vnd.ipld.raw": {
source: "iana"
},
"application/vnd.iptc.g2.catalogitem+xml": {
source: "iana",
compressible: true
},
"application/vnd.iptc.g2.conceptitem+xml": {
source: "iana",
compressible: true
},
"application/vnd.iptc.g2.knowledgeitem+xml": {
source: "iana",
compressible: true
},
"application/vnd.iptc.g2.newsitem+xml": {
source: "iana",
compressible: true
},
"application/vnd.iptc.g2.newsmessage+xml": {
source: "iana",
compressible: true
},
"application/vnd.iptc.g2.packageitem+xml": {
source: "iana",
compressible: true
},
"application/vnd.iptc.g2.planningitem+xml": {
source: "iana",
compressible: true
},
"application/vnd.ipunplugged.rcprofile": {
source: "iana",
extensions: ["rcprofile"]
},
"application/vnd.irepository.package+xml": {
source: "iana",
compressible: true,
extensions: ["irp"]
},
"application/vnd.is-xpr": {
source: "iana",
extensions: ["xpr"]
},
"application/vnd.isac.fcs": {
source: "iana",
extensions: ["fcs"]
},
"application/vnd.iso11783-10+zip": {
source: "iana",
compressible: false
},
"application/vnd.jam": {
source: "iana",
extensions: ["jam"]
},
"application/vnd.japannet-directory-service": {
source: "iana"
},
"application/vnd.japannet-jpnstore-wakeup": {
source: "iana"
},
"application/vnd.japannet-payment-wakeup": {
source: "iana"
},
"application/vnd.japannet-registration": {
source: "iana"
},
"application/vnd.japannet-registration-wakeup": {
source: "iana"
},
"application/vnd.japannet-setstore-wakeup": {
source: "iana"
},
"application/vnd.japannet-verification": {
source: "iana"
},
"application/vnd.japannet-verification-wakeup": {
source: "iana"
},
"application/vnd.jcp.javame.midlet-rms": {
source: "iana",
extensions: ["rms"]
},
"application/vnd.jisp": {
source: "iana",
extensions: ["jisp"]
},
"application/vnd.joost.joda-archive": {
source: "iana",
extensions: ["joda"]
},
"application/vnd.jsk.isdn-ngn": {
source: "iana"
},
"application/vnd.kahootz": {
source: "iana",
extensions: ["ktz", "ktr"]
},
"application/vnd.kde.karbon": {
source: "iana",
extensions: ["karbon"]
},
"application/vnd.kde.kchart": {
source: "iana",
extensions: ["chrt"]
},
"application/vnd.kde.kformula": {
source: "iana",
extensions: ["kfo"]
},
"application/vnd.kde.kivio": {
source: "iana",
extensions: ["flw"]
},
"application/vnd.kde.kontour": {
source: "iana",
extensions: ["kon"]
},
"application/vnd.kde.kpresenter": {
source: "iana",
extensions: ["kpr", "kpt"]
},
"application/vnd.kde.kspread": {
source: "iana",
extensions: ["ksp"]
},
"application/vnd.kde.kword": {
source: "iana",
extensions: ["kwd", "kwt"]
},
"application/vnd.kdl": {
source: "iana"
},
"application/vnd.kenameaapp": {
source: "iana",
extensions: ["htke"]
},
"application/vnd.keyman.kmp+zip": {
source: "iana",
compressible: false
},
"application/vnd.keyman.kmx": {
source: "iana"
},
"application/vnd.kidspiration": {
source: "iana",
extensions: ["kia"]
},
"application/vnd.kinar": {
source: "iana",
extensions: ["kne", "knp"]
},
"application/vnd.koan": {
source: "iana",
extensions: ["skp", "skd", "skt", "skm"]
},
"application/vnd.kodak-descriptor": {
source: "iana",
extensions: ["sse"]
},
"application/vnd.las": {
source: "iana"
},
"application/vnd.las.las+json": {
source: "iana",
compressible: true
},
"application/vnd.las.las+xml": {
source: "iana",
compressible: true,
extensions: ["lasxml"]
},
"application/vnd.laszip": {
source: "iana"
},
"application/vnd.ldev.productlicensing": {
source: "iana"
},
"application/vnd.leap+json": {
source: "iana",
compressible: true
},
"application/vnd.liberty-request+xml": {
source: "iana",
compressible: true
},
"application/vnd.llamagraphics.life-balance.desktop": {
source: "iana",
extensions: ["lbd"]
},
"application/vnd.llamagraphics.life-balance.exchange+xml": {
source: "iana",
compressible: true,
extensions: ["lbe"]
},
"application/vnd.logipipe.circuit+zip": {
source: "iana",
compressible: false
},
"application/vnd.loom": {
source: "iana"
},
"application/vnd.lotus-1-2-3": {
source: "iana",
extensions: ["123"]
},
"application/vnd.lotus-approach": {
source: "iana",
extensions: ["apr"]
},
"application/vnd.lotus-freelance": {
source: "iana",
extensions: ["pre"]
},
"application/vnd.lotus-notes": {
source: "iana",
extensions: ["nsf"]
},
"application/vnd.lotus-organizer": {
source: "iana",
extensions: ["org"]
},
"application/vnd.lotus-screencam": {
source: "iana",
extensions: ["scm"]
},
"application/vnd.lotus-wordpro": {
source: "iana",
extensions: ["lwp"]
},
"application/vnd.macports.portpkg": {
source: "iana",
extensions: ["portpkg"]
},
"application/vnd.mapbox-vector-tile": {
source: "iana",
extensions: ["mvt"]
},
"application/vnd.marlin.drm.actiontoken+xml": {
source: "iana",
compressible: true
},
"application/vnd.marlin.drm.conftoken+xml": {
source: "iana",
compressible: true
},
"application/vnd.marlin.drm.license+xml": {
source: "iana",
compressible: true
},
"application/vnd.marlin.drm.mdcf": {
source: "iana"
},
"application/vnd.mason+json": {
source: "iana",
compressible: true
},
"application/vnd.maxar.archive.3tz+zip": {
source: "iana",
compressible: false
},
"application/vnd.maxmind.maxmind-db": {
source: "iana"
},
"application/vnd.mcd": {
source: "iana",
extensions: ["mcd"]
},
"application/vnd.mdl": {
source: "iana"
},
"application/vnd.mdl-mbsdf": {
source: "iana"
},
"application/vnd.medcalcdata": {
source: "iana",
extensions: ["mc1"]
},
"application/vnd.mediastation.cdkey": {
source: "iana",
extensions: ["cdkey"]
},
"application/vnd.medicalholodeck.recordxr": {
source: "iana"
},
"application/vnd.meridian-slingshot": {
source: "iana"
},
"application/vnd.mermaid": {
source: "iana"
},
"application/vnd.mfer": {
source: "iana",
extensions: ["mwf"]
},
"application/vnd.mfmp": {
source: "iana",
extensions: ["mfm"]
},
"application/vnd.micro+json": {
source: "iana",
compressible: true
},
"application/vnd.micrografx.flo": {
source: "iana",
extensions: ["flo"]
},
"application/vnd.micrografx.igx": {
source: "iana",
extensions: ["igx"]
},
"application/vnd.microsoft.portable-executable": {
source: "iana"
},
"application/vnd.microsoft.windows.thumbnail-cache": {
source: "iana"
},
"application/vnd.miele+json": {
source: "iana",
compressible: true
},
"application/vnd.mif": {
source: "iana",
extensions: ["mif"]
},
"application/vnd.minisoft-hp3000-save": {
source: "iana"
},
"application/vnd.mitsubishi.misty-guard.trustweb": {
source: "iana"
},
"application/vnd.mobius.daf": {
source: "iana",
extensions: ["daf"]
},
"application/vnd.mobius.dis": {
source: "iana",
extensions: ["dis"]
},
"application/vnd.mobius.mbk": {
source: "iana",
extensions: ["mbk"]
},
"application/vnd.mobius.mqy": {
source: "iana",
extensions: ["mqy"]
},
"application/vnd.mobius.msl": {
source: "iana",
extensions: ["msl"]
},
"application/vnd.mobius.plc": {
source: "iana",
extensions: ["plc"]
},
"application/vnd.mobius.txf": {
source: "iana",
extensions: ["txf"]
},
"application/vnd.modl": {
source: "iana"
},
"application/vnd.mophun.application": {
source: "iana",
extensions: ["mpn"]
},
"application/vnd.mophun.certificate": {
source: "iana",
extensions: ["mpc"]
},
"application/vnd.motorola.flexsuite": {
source: "iana"
},
"application/vnd.motorola.flexsuite.adsi": {
source: "iana"
},
"application/vnd.motorola.flexsuite.fis": {
source: "iana"
},
"application/vnd.motorola.flexsuite.gotap": {
source: "iana"
},
"application/vnd.motorola.flexsuite.kmr": {
source: "iana"
},
"application/vnd.motorola.flexsuite.ttc": {
source: "iana"
},
"application/vnd.motorola.flexsuite.wem": {
source: "iana"
},
"application/vnd.motorola.iprm": {
source: "iana"
},
"application/vnd.mozilla.xul+xml": {
source: "iana",
compressible: true,
extensions: ["xul"]
},
"application/vnd.ms-3mfdocument": {
source: "iana"
},
"application/vnd.ms-artgalry": {
source: "iana",
extensions: ["cil"]
},
"application/vnd.ms-asf": {
source: "iana"
},
"application/vnd.ms-cab-compressed": {
source: "iana",
extensions: ["cab"]
},
"application/vnd.ms-color.iccprofile": {
source: "apache"
},
"application/vnd.ms-excel": {
source: "iana",
compressible: false,
extensions: ["xls", "xlm", "xla", "xlc", "xlt", "xlw"]
},
"application/vnd.ms-excel.addin.macroenabled.12": {
source: "iana",
extensions: ["xlam"]
},
"application/vnd.ms-excel.sheet.binary.macroenabled.12": {
source: "iana",
extensions: ["xlsb"]
},
"application/vnd.ms-excel.sheet.macroenabled.12": {
source: "iana",
extensions: ["xlsm"]
},
"application/vnd.ms-excel.template.macroenabled.12": {
source: "iana",
extensions: ["xltm"]
},
"application/vnd.ms-fontobject": {
source: "iana",
compressible: true,
extensions: ["eot"]
},
"application/vnd.ms-htmlhelp": {
source: "iana",
extensions: ["chm"]
},
"application/vnd.ms-ims": {
source: "iana",
extensions: ["ims"]
},
"application/vnd.ms-lrm": {
source: "iana",
extensions: ["lrm"]
},
"application/vnd.ms-office.activex+xml": {
source: "iana",
compressible: true
},
"application/vnd.ms-officetheme": {
source: "iana",
extensions: ["thmx"]
},
"application/vnd.ms-opentype": {
source: "apache",
compressible: true
},
"application/vnd.ms-outlook": {
compressible: false,
extensions: ["msg"]
},
"application/vnd.ms-package.obfuscated-opentype": {
source: "apache"
},
"application/vnd.ms-pki.seccat": {
source: "apache",
extensions: ["cat"]
},
"application/vnd.ms-pki.stl": {
source: "apache",
extensions: ["stl"]
},
"application/vnd.ms-playready.initiator+xml": {
source: "iana",
compressible: true
},
"application/vnd.ms-powerpoint": {
source: "iana",
compressible: false,
extensions: ["ppt", "pps", "pot"]
},
"application/vnd.ms-powerpoint.addin.macroenabled.12": {
source: "iana",
extensions: ["ppam"]
},
"application/vnd.ms-powerpoint.presentation.macroenabled.12": {
source: "iana",
extensions: ["pptm"]
},
"application/vnd.ms-powerpoint.slide.macroenabled.12": {
source: "iana",
extensions: ["sldm"]
},
"application/vnd.ms-powerpoint.slideshow.macroenabled.12": {
source: "iana",
extensions: ["ppsm"]
},
"application/vnd.ms-powerpoint.template.macroenabled.12": {
source: "iana",
extensions: ["potm"]
},
"application/vnd.ms-printdevicecapabilities+xml": {
source: "iana",
compressible: true
},
"application/vnd.ms-printing.printticket+xml": {
source: "apache",
compressible: true
},
"application/vnd.ms-printschematicket+xml": {
source: "iana",
compressible: true
},
"application/vnd.ms-project": {
source: "iana",
extensions: ["mpp", "mpt"]
},
"application/vnd.ms-tnef": {
source: "iana"
},
"application/vnd.ms-visio.viewer": {
extensions: ["vdx"]
},
"application/vnd.ms-windows.devicepairing": {
source: "iana"
},
"application/vnd.ms-windows.nwprinting.oob": {
source: "iana"
},
"application/vnd.ms-windows.printerpairing": {
source: "iana"
},
"application/vnd.ms-windows.wsd.oob": {
source: "iana"
},
"application/vnd.ms-wmdrm.lic-chlg-req": {
source: "iana"
},
"application/vnd.ms-wmdrm.lic-resp": {
source: "iana"
},
"application/vnd.ms-wmdrm.meter-chlg-req": {
source: "iana"
},
"application/vnd.ms-wmdrm.meter-resp": {
source: "iana"
},
"application/vnd.ms-word.document.macroenabled.12": {
source: "iana",
extensions: ["docm"]
},
"application/vnd.ms-word.template.macroenabled.12": {
source: "iana",
extensions: ["dotm"]
},
"application/vnd.ms-works": {
source: "iana",
extensions: ["wps", "wks", "wcm", "wdb"]
},
"application/vnd.ms-wpl": {
source: "iana",
extensions: ["wpl"]
},
"application/vnd.ms-xpsdocument": {
source: "iana",
compressible: false,
extensions: ["xps"]
},
"application/vnd.msa-disk-image": {
source: "iana"
},
"application/vnd.mseq": {
source: "iana",
extensions: ["mseq"]
},
"application/vnd.msgpack": {
source: "iana"
},
"application/vnd.msign": {
source: "iana"
},
"application/vnd.multiad.creator": {
source: "iana"
},
"application/vnd.multiad.creator.cif": {
source: "iana"
},
"application/vnd.music-niff": {
source: "iana"
},
"application/vnd.musician": {
source: "iana",
extensions: ["mus"]
},
"application/vnd.muvee.style": {
source: "iana",
extensions: ["msty"]
},
"application/vnd.mynfc": {
source: "iana",
extensions: ["taglet"]
},
"application/vnd.nacamar.ybrid+json": {
source: "iana",
compressible: true
},
"application/vnd.nato.bindingdataobject+cbor": {
source: "iana"
},
"application/vnd.nato.bindingdataobject+json": {
source: "iana",
compressible: true
},
"application/vnd.nato.bindingdataobject+xml": {
source: "iana",
compressible: true,
extensions: ["bdo"]
},
"application/vnd.nato.openxmlformats-package.iepd+zip": {
source: "iana",
compressible: false
},
"application/vnd.ncd.control": {
source: "iana"
},
"application/vnd.ncd.reference": {
source: "iana"
},
"application/vnd.nearst.inv+json": {
source: "iana",
compressible: true
},
"application/vnd.nebumind.line": {
source: "iana"
},
"application/vnd.nervana": {
source: "iana"
},
"application/vnd.netfpx": {
source: "iana"
},
"application/vnd.neurolanguage.nlu": {
source: "iana",
extensions: ["nlu"]
},
"application/vnd.nimn": {
source: "iana"
},
"application/vnd.nintendo.nitro.rom": {
source: "iana"
},
"application/vnd.nintendo.snes.rom": {
source: "iana"
},
"application/vnd.nitf": {
source: "iana",
extensions: ["ntf", "nitf"]
},
"application/vnd.noblenet-directory": {
source: "iana",
extensions: ["nnd"]
},
"application/vnd.noblenet-sealer": {
source: "iana",
extensions: ["nns"]
},
"application/vnd.noblenet-web": {
source: "iana",
extensions: ["nnw"]
},
"application/vnd.nokia.catalogs": {
source: "iana"
},
"application/vnd.nokia.conml+wbxml": {
source: "iana"
},
"application/vnd.nokia.conml+xml": {
source: "iana",
compressible: true
},
"application/vnd.nokia.iptv.config+xml": {
source: "iana",
compressible: true
},
"application/vnd.nokia.isds-radio-presets": {
source: "iana"
},
"application/vnd.nokia.landmark+wbxml": {
source: "iana"
},
"application/vnd.nokia.landmark+xml": {
source: "iana",
compressible: true
},
"application/vnd.nokia.landmarkcollection+xml": {
source: "iana",
compressible: true
},
"application/vnd.nokia.n-gage.ac+xml": {
source: "iana",
compressible: true,
extensions: ["ac"]
},
"application/vnd.nokia.n-gage.data": {
source: "iana",
extensions: ["ngdat"]
},
"application/vnd.nokia.n-gage.symbian.install": {
source: "apache",
extensions: ["n-gage"]
},
"application/vnd.nokia.ncd": {
source: "iana"
},
"application/vnd.nokia.pcd+wbxml": {
source: "iana"
},
"application/vnd.nokia.pcd+xml": {
source: "iana",
compressible: true
},
"application/vnd.nokia.radio-preset": {
source: "iana",
extensions: ["rpst"]
},
"application/vnd.nokia.radio-presets": {
source: "iana",
extensions: ["rpss"]
},
"application/vnd.novadigm.edm": {
source: "iana",
extensions: ["edm"]
},
"application/vnd.novadigm.edx": {
source: "iana",
extensions: ["edx"]
},
"application/vnd.novadigm.ext": {
source: "iana",
extensions: ["ext"]
},
"application/vnd.ntt-local.content-share": {
source: "iana"
},
"application/vnd.ntt-local.file-transfer": {
source: "iana"
},
"application/vnd.ntt-local.ogw_remote-access": {
source: "iana"
},
"application/vnd.ntt-local.sip-ta_remote": {
source: "iana"
},
"application/vnd.ntt-local.sip-ta_tcp_stream": {
source: "iana"
},
"application/vnd.oai.workflows": {
source: "iana"
},
"application/vnd.oai.workflows+json": {
source: "iana",
compressible: true
},
"application/vnd.oai.workflows+yaml": {
source: "iana"
},
"application/vnd.oasis.opendocument.base": {
source: "iana"
},
"application/vnd.oasis.opendocument.chart": {
source: "iana",
extensions: ["odc"]
},
"application/vnd.oasis.opendocument.chart-template": {
source: "iana",
extensions: ["otc"]
},
"application/vnd.oasis.opendocument.database": {
source: "apache",
extensions: ["odb"]
},
"application/vnd.oasis.opendocument.formula": {
source: "iana",
extensions: ["odf"]
},
"application/vnd.oasis.opendocument.formula-template": {
source: "iana",
extensions: ["odft"]
},
"application/vnd.oasis.opendocument.graphics": {
source: "iana",
compressible: false,
extensions: ["odg"]
},
"application/vnd.oasis.opendocument.graphics-template": {
source: "iana",
extensions: ["otg"]
},
"application/vnd.oasis.opendocument.image": {
source: "iana",
extensions: ["odi"]
},
"application/vnd.oasis.opendocument.image-template": {
source: "iana",
extensions: ["oti"]
},
"application/vnd.oasis.opendocument.presentation": {
source: "iana",
compressible: false,
extensions: ["odp"]
},
"application/vnd.oasis.opendocument.presentation-template": {
source: "iana",
extensions: ["otp"]
},
"application/vnd.oasis.opendocument.spreadsheet": {
source: "iana",
compressible: false,
extensions: ["ods"]
},
"application/vnd.oasis.opendocument.spreadsheet-template": {
source: "iana",
extensions: ["ots"]
},
"application/vnd.oasis.opendocument.text": {
source: "iana",
compressible: false,
extensions: ["odt"]
},
"application/vnd.oasis.opendocument.text-master": {
source: "iana",
extensions: ["odm"]
},
"application/vnd.oasis.opendocument.text-master-template": {
source: "iana"
},
"application/vnd.oasis.opendocument.text-template": {
source: "iana",
extensions: ["ott"]
},
"application/vnd.oasis.opendocument.text-web": {
source: "iana",
extensions: ["oth"]
},
"application/vnd.obn": {
source: "iana"
},
"application/vnd.ocf+cbor": {
source: "iana"
},
"application/vnd.oci.image.manifest.v1+json": {
source: "iana",
compressible: true
},
"application/vnd.oftn.l10n+json": {
source: "iana",
compressible: true
},
"application/vnd.oipf.contentaccessdownload+xml": {
source: "iana",
compressible: true
},
"application/vnd.oipf.contentaccessstreaming+xml": {
source: "iana",
compressible: true
},
"application/vnd.oipf.cspg-hexbinary": {
source: "iana"
},
"application/vnd.oipf.dae.svg+xml": {
source: "iana",
compressible: true
},
"application/vnd.oipf.dae.xhtml+xml": {
source: "iana",
compressible: true
},
"application/vnd.oipf.mippvcontrolmessage+xml": {
source: "iana",
compressible: true
},
"application/vnd.oipf.pae.gem": {
source: "iana"
},
"application/vnd.oipf.spdiscovery+xml": {
source: "iana",
compressible: true
},
"application/vnd.oipf.spdlist+xml": {
source: "iana",
compressible: true
},
"application/vnd.oipf.ueprofile+xml": {
source: "iana",
compressible: true
},
"application/vnd.oipf.userprofile+xml": {
source: "iana",
compressible: true
},
"application/vnd.olpc-sugar": {
source: "iana",
extensions: ["xo"]
},
"application/vnd.oma-scws-config": {
source: "iana"
},
"application/vnd.oma-scws-http-request": {
source: "iana"
},
"application/vnd.oma-scws-http-response": {
source: "iana"
},
"application/vnd.oma.bcast.associated-procedure-parameter+xml": {
source: "iana",
compressible: true
},
"application/vnd.oma.bcast.drm-trigger+xml": {
source: "apache",
compressible: true
},
"application/vnd.oma.bcast.imd+xml": {
source: "iana",
compressible: true
},
"application/vnd.oma.bcast.ltkm": {
source: "iana"
},
"application/vnd.oma.bcast.notification+xml": {
source: "iana",
compressible: true
},
"application/vnd.oma.bcast.provisioningtrigger": {
source: "iana"
},
"application/vnd.oma.bcast.sgboot": {
source: "iana"
},
"application/vnd.oma.bcast.sgdd+xml": {
source: "iana",
compressible: true
},
"application/vnd.oma.bcast.sgdu": {
source: "iana"
},
"application/vnd.oma.bcast.simple-symbol-container": {
source: "iana"
},
"application/vnd.oma.bcast.smartcard-trigger+xml": {
source: "apache",
compressible: true
},
"application/vnd.oma.bcast.sprov+xml": {
source: "iana",
compressible: true
},
"application/vnd.oma.bcast.stkm": {
source: "iana"
},
"application/vnd.oma.cab-address-book+xml": {
source: "iana",
compressible: true
},
"application/vnd.oma.cab-feature-handler+xml": {
source: "iana",
compressible: true
},
"application/vnd.oma.cab-pcc+xml": {
source: "iana",
compressible: true
},
"application/vnd.oma.cab-subs-invite+xml": {
source: "iana",
compressible: true
},
"application/vnd.oma.cab-user-prefs+xml": {
source: "iana",
compressible: true
},
"application/vnd.oma.dcd": {
source: "iana"
},
"application/vnd.oma.dcdc": {
source: "iana"
},
"application/vnd.oma.dd2+xml": {
source: "iana",
compressible: true,
extensions: ["dd2"]
},
"application/vnd.oma.drm.risd+xml": {
source: "iana",
compressible: true
},
"application/vnd.oma.group-usage-list+xml": {
source: "iana",
compressible: true
},
"application/vnd.oma.lwm2m+cbor": {
source: "iana"
},
"application/vnd.oma.lwm2m+json": {
source: "iana",
compressible: true
},
"application/vnd.oma.lwm2m+tlv": {
source: "iana"
},
"application/vnd.oma.pal+xml": {
source: "iana",
compressible: true
},
"application/vnd.oma.poc.detailed-progress-report+xml": {
source: "iana",
compressible: true
},
"application/vnd.oma.poc.final-report+xml": {
source: "iana",
compressible: true
},
"application/vnd.oma.poc.groups+xml": {
source: "iana",
compressible: true
},
"application/vnd.oma.poc.invocation-descriptor+xml": {
source: "iana",
compressible: true
},
"application/vnd.oma.poc.optimized-progress-report+xml": {
source: "iana",
compressible: true
},
"application/vnd.oma.push": {
source: "iana"
},
"application/vnd.oma.scidm.messages+xml": {
source: "iana",
compressible: true
},
"application/vnd.oma.xcap-directory+xml": {
source: "iana",
compressible: true
},
"application/vnd.omads-email+xml": {
source: "iana",
charset: "UTF-8",
compressible: true
},
"application/vnd.omads-file+xml": {
source: "iana",
charset: "UTF-8",
compressible: true
},
"application/vnd.omads-folder+xml": {
source: "iana",
charset: "UTF-8",
compressible: true
},
"application/vnd.omaloc-supl-init": {
source: "iana"
},
"application/vnd.onepager": {
source: "iana"
},
"application/vnd.onepagertamp": {
source: "iana"
},
"application/vnd.onepagertamx": {
source: "iana"
},
"application/vnd.onepagertat": {
source: "iana"
},
"application/vnd.onepagertatp": {
source: "iana"
},
"application/vnd.onepagertatx": {
source: "iana"
},
"application/vnd.onvif.metadata": {
source: "iana"
},
"application/vnd.openblox.game+xml": {
source: "iana",
compressible: true,
extensions: ["obgx"]
},
"application/vnd.openblox.game-binary": {
source: "iana"
},
"application/vnd.openeye.oeb": {
source: "iana"
},
"application/vnd.openofficeorg.extension": {
source: "apache",
extensions: ["oxt"]
},
"application/vnd.openstreetmap.data+xml": {
source: "iana",
compressible: true,
extensions: ["osm"]
},
"application/vnd.opentimestamps.ots": {
source: "iana"
},
"application/vnd.openvpi.dspx+json": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.custom-properties+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.customxmlproperties+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.drawing+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.drawingml.chart+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.drawingml.chartshapes+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.drawingml.diagramcolors+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.drawingml.diagramdata+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.drawingml.diagramlayout+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.drawingml.diagramstyle+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.extended-properties+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.presentationml.commentauthors+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.presentationml.comments+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.presentationml.handoutmaster+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.presentationml.notesmaster+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.presentationml.notesslide+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.presentationml.presentation": {
source: "iana",
compressible: false,
extensions: ["pptx"]
},
"application/vnd.openxmlformats-officedocument.presentationml.presentation.main+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.presentationml.presprops+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.presentationml.slide": {
source: "iana",
extensions: ["sldx"]
},
"application/vnd.openxmlformats-officedocument.presentationml.slide+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.presentationml.slidelayout+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.presentationml.slidemaster+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.presentationml.slideshow": {
source: "iana",
extensions: ["ppsx"]
},
"application/vnd.openxmlformats-officedocument.presentationml.slideshow.main+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.presentationml.slideupdateinfo+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.presentationml.tablestyles+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.presentationml.tags+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.presentationml.template": {
source: "iana",
extensions: ["potx"]
},
"application/vnd.openxmlformats-officedocument.presentationml.template.main+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.presentationml.viewprops+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.spreadsheetml.calcchain+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.spreadsheetml.chartsheet+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.spreadsheetml.comments+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.spreadsheetml.connections+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.spreadsheetml.dialogsheet+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.spreadsheetml.externallink+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.spreadsheetml.pivotcachedefinition+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.spreadsheetml.pivotcacherecords+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.spreadsheetml.pivottable+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.spreadsheetml.querytable+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.spreadsheetml.revisionheaders+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.spreadsheetml.revisionlog+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.spreadsheetml.sharedstrings+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet": {
source: "iana",
compressible: false,
extensions: ["xlsx"]
},
"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.spreadsheetml.sheetmetadata+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.spreadsheetml.table+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.spreadsheetml.tablesinglecells+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.spreadsheetml.template": {
source: "iana",
extensions: ["xltx"]
},
"application/vnd.openxmlformats-officedocument.spreadsheetml.template.main+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.spreadsheetml.usernames+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.spreadsheetml.volatiledependencies+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.theme+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.themeoverride+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.vmldrawing": {
source: "iana"
},
"application/vnd.openxmlformats-officedocument.wordprocessingml.comments+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.wordprocessingml.document": {
source: "iana",
compressible: false,
extensions: ["docx"]
},
"application/vnd.openxmlformats-officedocument.wordprocessingml.document.glossary+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.wordprocessingml.document.main+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.wordprocessingml.endnotes+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.wordprocessingml.fonttable+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.wordprocessingml.footer+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.wordprocessingml.footnotes+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.wordprocessingml.numbering+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.wordprocessingml.settings+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.wordprocessingml.styles+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.wordprocessingml.template": {
source: "iana",
extensions: ["dotx"]
},
"application/vnd.openxmlformats-officedocument.wordprocessingml.template.main+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.wordprocessingml.websettings+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-package.core-properties+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-package.digital-signature-xmlsignature+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-package.relationships+xml": {
source: "iana",
compressible: true
},
"application/vnd.oracle.resource+json": {
source: "iana",
compressible: true
},
"application/vnd.orange.indata": {
source: "iana"
},
"application/vnd.osa.netdeploy": {
source: "iana"
},
"application/vnd.osgeo.mapguide.package": {
source: "iana",
extensions: ["mgp"]
},
"application/vnd.osgi.bundle": {
source: "iana"
},
"application/vnd.osgi.dp": {
source: "iana",
extensions: ["dp"]
},
"application/vnd.osgi.subsystem": {
source: "iana",
extensions: ["esa"]
},
"application/vnd.otps.ct-kip+xml": {
source: "iana",
compressible: true
},
"application/vnd.oxli.countgraph": {
source: "iana"
},
"application/vnd.pagerduty+json": {
source: "iana",
compressible: true
},
"application/vnd.palm": {
source: "iana",
extensions: ["pdb", "pqa", "oprc"]
},
"application/vnd.panoply": {
source: "iana"
},
"application/vnd.paos.xml": {
source: "iana"
},
"application/vnd.patentdive": {
source: "iana"
},
"application/vnd.patientecommsdoc": {
source: "iana"
},
"application/vnd.pawaafile": {
source: "iana",
extensions: ["paw"]
},
"application/vnd.pcos": {
source: "iana"
},
"application/vnd.pg.format": {
source: "iana",
extensions: ["str"]
},
"application/vnd.pg.osasli": {
source: "iana",
extensions: ["ei6"]
},
"application/vnd.piaccess.application-licence": {
source: "iana"
},
"application/vnd.picsel": {
source: "iana",
extensions: ["efif"]
},
"application/vnd.pmi.widget": {
source: "iana",
extensions: ["wg"]
},
"application/vnd.poc.group-advertisement+xml": {
source: "iana",
compressible: true
},
"application/vnd.pocketlearn": {
source: "iana",
extensions: ["plf"]
},
"application/vnd.powerbuilder6": {
source: "iana",
extensions: ["pbd"]
},
"application/vnd.powerbuilder6-s": {
source: "iana"
},
"application/vnd.powerbuilder7": {
source: "iana"
},
"application/vnd.powerbuilder7-s": {
source: "iana"
},
"application/vnd.powerbuilder75": {
source: "iana"
},
"application/vnd.powerbuilder75-s": {
source: "iana"
},
"application/vnd.preminet": {
source: "iana"
},
"application/vnd.previewsystems.box": {
source: "iana",
extensions: ["box"]
},
"application/vnd.procrate.brushset": {
extensions: ["brushset"]
},
"application/vnd.procreate.brush": {
extensions: ["brush"]
},
"application/vnd.procreate.dream": {
extensions: ["drm"]
},
"application/vnd.proteus.magazine": {
source: "iana",
extensions: ["mgz"]
},
"application/vnd.psfs": {
source: "iana"
},
"application/vnd.pt.mundusmundi": {
source: "iana"
},
"application/vnd.publishare-delta-tree": {
source: "iana",
extensions: ["qps"]
},
"application/vnd.pvi.ptid1": {
source: "iana",
extensions: ["ptid"]
},
"application/vnd.pwg-multiplexed": {
source: "iana"
},
"application/vnd.pwg-xhtml-print+xml": {
source: "iana",
compressible: true,
extensions: ["xhtm"]
},
"application/vnd.qualcomm.brew-app-res": {
source: "iana"
},
"application/vnd.quarantainenet": {
source: "iana"
},
"application/vnd.quark.quarkxpress": {
source: "iana",
extensions: ["qxd", "qxt", "qwd", "qwt", "qxl", "qxb"]
},
"application/vnd.quobject-quoxdocument": {
source: "iana"
},
"application/vnd.radisys.moml+xml": {
source: "iana",
compressible: true
},
"application/vnd.radisys.msml+xml": {
source: "iana",
compressible: true
},
"application/vnd.radisys.msml-audit+xml": {
source: "iana",
compressible: true
},
"application/vnd.radisys.msml-audit-conf+xml": {
source: "iana",
compressible: true
},
"application/vnd.radisys.msml-audit-conn+xml": {
source: "iana",
compressible: true
},
"application/vnd.radisys.msml-audit-dialog+xml": {
source: "iana",
compressible: true
},
"application/vnd.radisys.msml-audit-stream+xml": {
source: "iana",
compressible: true
},
"application/vnd.radisys.msml-conf+xml": {
source: "iana",
compressible: true
},
"application/vnd.radisys.msml-dialog+xml": {
source: "iana",
compressible: true
},
"application/vnd.radisys.msml-dialog-base+xml": {
source: "iana",
compressible: true
},
"application/vnd.radisys.msml-dialog-fax-detect+xml": {
source: "iana",
compressible: true
},
"application/vnd.radisys.msml-dialog-fax-sendrecv+xml": {
source: "iana",
compressible: true
},
"application/vnd.radisys.msml-dialog-group+xml": {
source: "iana",
compressible: true
},
"application/vnd.radisys.msml-dialog-speech+xml": {
source: "iana",
compressible: true
},
"application/vnd.radisys.msml-dialog-transform+xml": {
source: "iana",
compressible: true
},
"application/vnd.rainstor.data": {
source: "iana"
},
"application/vnd.rapid": {
source: "iana"
},
"application/vnd.rar": {
source: "iana",
extensions: ["rar"]
},
"application/vnd.realvnc.bed": {
source: "iana",
extensions: ["bed"]
},
"application/vnd.recordare.musicxml": {
source: "iana",
extensions: ["mxl"]
},
"application/vnd.recordare.musicxml+xml": {
source: "iana",
compressible: true,
extensions: ["musicxml"]
},
"application/vnd.relpipe": {
source: "iana"
},
"application/vnd.renlearn.rlprint": {
source: "iana"
},
"application/vnd.resilient.logic": {
source: "iana"
},
"application/vnd.restful+json": {
source: "iana",
compressible: true
},
"application/vnd.rig.cryptonote": {
source: "iana",
extensions: ["cryptonote"]
},
"application/vnd.rim.cod": {
source: "apache",
extensions: ["cod"]
},
"application/vnd.rn-realmedia": {
source: "apache",
extensions: ["rm"]
},
"application/vnd.rn-realmedia-vbr": {
source: "apache",
extensions: ["rmvb"]
},
"application/vnd.route66.link66+xml": {
source: "iana",
compressible: true,
extensions: ["link66"]
},
"application/vnd.rs-274x": {
source: "iana"
},
"application/vnd.ruckus.download": {
source: "iana"
},
"application/vnd.s3sms": {
source: "iana"
},
"application/vnd.sailingtracker.track": {
source: "iana",
extensions: ["st"]
},
"application/vnd.sar": {
source: "iana"
},
"application/vnd.sbm.cid": {
source: "iana"
},
"application/vnd.sbm.mid2": {
source: "iana"
},
"application/vnd.scribus": {
source: "iana"
},
"application/vnd.sealed.3df": {
source: "iana"
},
"application/vnd.sealed.csf": {
source: "iana"
},
"application/vnd.sealed.doc": {
source: "iana"
},
"application/vnd.sealed.eml": {
source: "iana"
},
"application/vnd.sealed.mht": {
source: "iana"
},
"application/vnd.sealed.net": {
source: "iana"
},
"application/vnd.sealed.ppt": {
source: "iana"
},
"application/vnd.sealed.tiff": {
source: "iana"
},
"application/vnd.sealed.xls": {
source: "iana"
},
"application/vnd.sealedmedia.softseal.html": {
source: "iana"
},
"application/vnd.sealedmedia.softseal.pdf": {
source: "iana"
},
"application/vnd.seemail": {
source: "iana",
extensions: ["see"]
},
"application/vnd.seis+json": {
source: "iana",
compressible: true
},
"application/vnd.sema": {
source: "iana",
extensions: ["sema"]
},
"application/vnd.semd": {
source: "iana",
extensions: ["semd"]
},
"application/vnd.semf": {
source: "iana",
extensions: ["semf"]
},
"application/vnd.shade-save-file": {
source: "iana"
},
"application/vnd.shana.informed.formdata": {
source: "iana",
extensions: ["ifm"]
},
"application/vnd.shana.informed.formtemplate": {
source: "iana",
extensions: ["itp"]
},
"application/vnd.shana.informed.interchange": {
source: "iana",
extensions: ["iif"]
},
"application/vnd.shana.informed.package": {
source: "iana",
extensions: ["ipk"]
},
"application/vnd.shootproof+json": {
source: "iana",
compressible: true
},
"application/vnd.shopkick+json": {
source: "iana",
compressible: true
},
"application/vnd.shp": {
source: "iana"
},
"application/vnd.shx": {
source: "iana"
},
"application/vnd.sigrok.session": {
source: "iana"
},
"application/vnd.simtech-mindmapper": {
source: "iana",
extensions: ["twd", "twds"]
},
"application/vnd.siren+json": {
source: "iana",
compressible: true
},
"application/vnd.sketchometry": {
source: "iana"
},
"application/vnd.smaf": {
source: "iana",
extensions: ["mmf"]
},
"application/vnd.smart.notebook": {
source: "iana"
},
"application/vnd.smart.teacher": {
source: "iana",
extensions: ["teacher"]
},
"application/vnd.smintio.portals.archive": {
source: "iana"
},
"application/vnd.snesdev-page-table": {
source: "iana"
},
"application/vnd.software602.filler.form+xml": {
source: "iana",
compressible: true,
extensions: ["fo"]
},
"application/vnd.software602.filler.form-xml-zip": {
source: "iana"
},
"application/vnd.solent.sdkm+xml": {
source: "iana",
compressible: true,
extensions: ["sdkm", "sdkd"]
},
"application/vnd.spotfire.dxp": {
source: "iana",
extensions: ["dxp"]
},
"application/vnd.spotfire.sfs": {
source: "iana",
extensions: ["sfs"]
},
"application/vnd.sqlite3": {
source: "iana"
},
"application/vnd.sss-cod": {
source: "iana"
},
"application/vnd.sss-dtf": {
source: "iana"
},
"application/vnd.sss-ntf": {
source: "iana"
},
"application/vnd.stardivision.calc": {
source: "apache",
extensions: ["sdc"]
},
"application/vnd.stardivision.draw": {
source: "apache",
extensions: ["sda"]
},
"application/vnd.stardivision.impress": {
source: "apache",
extensions: ["sdd"]
},
"application/vnd.stardivision.math": {
source: "apache",
extensions: ["smf"]
},
"application/vnd.stardivision.writer": {
source: "apache",
extensions: ["sdw", "vor"]
},
"application/vnd.stardivision.writer-global": {
source: "apache",
extensions: ["sgl"]
},
"application/vnd.stepmania.package": {
source: "iana",
extensions: ["smzip"]
},
"application/vnd.stepmania.stepchart": {
source: "iana",
extensions: ["sm"]
},
"application/vnd.street-stream": {
source: "iana"
},
"application/vnd.sun.wadl+xml": {
source: "iana",
compressible: true,
extensions: ["wadl"]
},
"application/vnd.sun.xml.calc": {
source: "apache",
extensions: ["sxc"]
},
"application/vnd.sun.xml.calc.template": {
source: "apache",
extensions: ["stc"]
},
"application/vnd.sun.xml.draw": {
source: "apache",
extensions: ["sxd"]
},
"application/vnd.sun.xml.draw.template": {
source: "apache",
extensions: ["std"]
},
"application/vnd.sun.xml.impress": {
source: "apache",
extensions: ["sxi"]
},
"application/vnd.sun.xml.impress.template": {
source: "apache",
extensions: ["sti"]
},
"application/vnd.sun.xml.math": {
source: "apache",
extensions: ["sxm"]
},
"application/vnd.sun.xml.writer": {
source: "apache",
extensions: ["sxw"]
},
"application/vnd.sun.xml.writer.global": {
source: "apache",
extensions: ["sxg"]
},
"application/vnd.sun.xml.writer.template": {
source: "apache",
extensions: ["stw"]
},
"application/vnd.sus-calendar": {
source: "iana",
extensions: ["sus", "susp"]
},
"application/vnd.svd": {
source: "iana",
extensions: ["svd"]
},
"application/vnd.swiftview-ics": {
source: "iana"
},
"application/vnd.sybyl.mol2": {
source: "iana"
},
"application/vnd.sycle+xml": {
source: "iana",
compressible: true
},
"application/vnd.syft+json": {
source: "iana",
compressible: true
},
"application/vnd.symbian.install": {
source: "apache",
extensions: ["sis", "sisx"]
},
"application/vnd.syncml+xml": {
source: "iana",
charset: "UTF-8",
compressible: true,
extensions: ["xsm"]
},
"application/vnd.syncml.dm+wbxml": {
source: "iana",
charset: "UTF-8",
extensions: ["bdm"]
},
"application/vnd.syncml.dm+xml": {
source: "iana",
charset: "UTF-8",
compressible: true,
extensions: ["xdm"]
},
"application/vnd.syncml.dm.notification": {
source: "iana"
},
"application/vnd.syncml.dmddf+wbxml": {
source: "iana"
},
"application/vnd.syncml.dmddf+xml": {
source: "iana",
charset: "UTF-8",
compressible: true,
extensions: ["ddf"]
},
"application/vnd.syncml.dmtnds+wbxml": {
source: "iana"
},
"application/vnd.syncml.dmtnds+xml": {
source: "iana",
charset: "UTF-8",
compressible: true
},
"application/vnd.syncml.ds.notification": {
source: "iana"
},
"application/vnd.tableschema+json": {
source: "iana",
compressible: true
},
"application/vnd.tao.intent-module-archive": {
source: "iana",
extensions: ["tao"]
},
"application/vnd.tcpdump.pcap": {
source: "iana",
extensions: ["pcap", "cap", "dmp"]
},
"application/vnd.think-cell.ppttc+json": {
source: "iana",
compressible: true
},
"application/vnd.tmd.mediaflex.api+xml": {
source: "iana",
compressible: true
},
"application/vnd.tml": {
source: "iana"
},
"application/vnd.tmobile-livetv": {
source: "iana",
extensions: ["tmo"]
},
"application/vnd.tri.onesource": {
source: "iana"
},
"application/vnd.trid.tpt": {
source: "iana",
extensions: ["tpt"]
},
"application/vnd.triscape.mxs": {
source: "iana",
extensions: ["mxs"]
},
"application/vnd.trueapp": {
source: "iana",
extensions: ["tra"]
},
"application/vnd.truedoc": {
source: "iana"
},
"application/vnd.ubisoft.webplayer": {
source: "iana"
},
"application/vnd.ufdl": {
source: "iana",
extensions: ["ufd", "ufdl"]
},
"application/vnd.uic.osdm+json": {
source: "iana",
compressible: true
},
"application/vnd.uiq.theme": {
source: "iana",
extensions: ["utz"]
},
"application/vnd.umajin": {
source: "iana",
extensions: ["umj"]
},
"application/vnd.unity": {
source: "iana",
extensions: ["unityweb"]
},
"application/vnd.uoml+xml": {
source: "iana",
compressible: true,
extensions: ["uoml", "uo"]
},
"application/vnd.uplanet.alert": {
source: "iana"
},
"application/vnd.uplanet.alert-wbxml": {
source: "iana"
},
"application/vnd.uplanet.bearer-choice": {
source: "iana"
},
"application/vnd.uplanet.bearer-choice-wbxml": {
source: "iana"
},
"application/vnd.uplanet.cacheop": {
source: "iana"
},
"application/vnd.uplanet.cacheop-wbxml": {
source: "iana"
},
"application/vnd.uplanet.channel": {
source: "iana"
},
"application/vnd.uplanet.channel-wbxml": {
source: "iana"
},
"application/vnd.uplanet.list": {
source: "iana"
},
"application/vnd.uplanet.list-wbxml": {
source: "iana"
},
"application/vnd.uplanet.listcmd": {
source: "iana"
},
"application/vnd.uplanet.listcmd-wbxml": {
source: "iana"
},
"application/vnd.uplanet.signal": {
source: "iana"
},
"application/vnd.uri-map": {
source: "iana"
},
"application/vnd.valve.source.material": {
source: "iana"
},
"application/vnd.vcx": {
source: "iana",
extensions: ["vcx"]
},
"application/vnd.vd-study": {
source: "iana"
},
"application/vnd.vectorworks": {
source: "iana"
},
"application/vnd.vel+json": {
source: "iana",
compressible: true
},
"application/vnd.veraison.tsm-report+cbor": {
source: "iana"
},
"application/vnd.veraison.tsm-report+json": {
source: "iana",
compressible: true
},
"application/vnd.verimatrix.vcas": {
source: "iana"
},
"application/vnd.veritone.aion+json": {
source: "iana",
compressible: true
},
"application/vnd.veryant.thin": {
source: "iana"
},
"application/vnd.ves.encrypted": {
source: "iana"
},
"application/vnd.vidsoft.vidconference": {
source: "iana"
},
"application/vnd.visio": {
source: "iana",
extensions: ["vsd", "vst", "vss", "vsw", "vsdx", "vtx"]
},
"application/vnd.visionary": {
source: "iana",
extensions: ["vis"]
},
"application/vnd.vividence.scriptfile": {
source: "iana"
},
"application/vnd.vocalshaper.vsp4": {
source: "iana"
},
"application/vnd.vsf": {
source: "iana",
extensions: ["vsf"]
},
"application/vnd.wap.sic": {
source: "iana"
},
"application/vnd.wap.slc": {
source: "iana"
},
"application/vnd.wap.wbxml": {
source: "iana",
charset: "UTF-8",
extensions: ["wbxml"]
},
"application/vnd.wap.wmlc": {
source: "iana",
extensions: ["wmlc"]
},
"application/vnd.wap.wmlscriptc": {
source: "iana",
extensions: ["wmlsc"]
},
"application/vnd.wasmflow.wafl": {
source: "iana"
},
"application/vnd.webturbo": {
source: "iana",
extensions: ["wtb"]
},
"application/vnd.wfa.dpp": {
source: "iana"
},
"application/vnd.wfa.p2p": {
source: "iana"
},
"application/vnd.wfa.wsc": {
source: "iana"
},
"application/vnd.windows.devicepairing": {
source: "iana"
},
"application/vnd.wmc": {
source: "iana"
},
"application/vnd.wmf.bootstrap": {
source: "iana"
},
"application/vnd.wolfram.mathematica": {
source: "iana"
},
"application/vnd.wolfram.mathematica.package": {
source: "iana"
},
"application/vnd.wolfram.player": {
source: "iana",
extensions: ["nbp"]
},
"application/vnd.wordlift": {
source: "iana"
},
"application/vnd.wordperfect": {
source: "iana",
extensions: ["wpd"]
},
"application/vnd.wqd": {
source: "iana",
extensions: ["wqd"]
},
"application/vnd.wrq-hp3000-labelled": {
source: "iana"
},
"application/vnd.wt.stf": {
source: "iana",
extensions: ["stf"]
},
"application/vnd.wv.csp+wbxml": {
source: "iana"
},
"application/vnd.wv.csp+xml": {
source: "iana",
compressible: true
},
"application/vnd.wv.ssp+xml": {
source: "iana",
compressible: true
},
"application/vnd.xacml+json": {
source: "iana",
compressible: true
},
"application/vnd.xara": {
source: "iana",
extensions: ["xar"]
},
"application/vnd.xarin.cpj": {
source: "iana"
},
"application/vnd.xecrets-encrypted": {
source: "iana"
},
"application/vnd.xfdl": {
source: "iana",
extensions: ["xfdl"]
},
"application/vnd.xfdl.webform": {
source: "iana"
},
"application/vnd.xmi+xml": {
source: "iana",
compressible: true
},
"application/vnd.xmpie.cpkg": {
source: "iana"
},
"application/vnd.xmpie.dpkg": {
source: "iana"
},
"application/vnd.xmpie.plan": {
source: "iana"
},
"application/vnd.xmpie.ppkg": {
source: "iana"
},
"application/vnd.xmpie.xlim": {
source: "iana"
},
"application/vnd.yamaha.hv-dic": {
source: "iana",
extensions: ["hvd"]
},
"application/vnd.yamaha.hv-script": {
source: "iana",
extensions: ["hvs"]
},
"application/vnd.yamaha.hv-voice": {
source: "iana",
extensions: ["hvp"]
},
"application/vnd.yamaha.openscoreformat": {
source: "iana",
extensions: ["osf"]
},
"application/vnd.yamaha.openscoreformat.osfpvg+xml": {
source: "iana",
compressible: true,
extensions: ["osfpvg"]
},
"application/vnd.yamaha.remote-setup": {
source: "iana"
},
"application/vnd.yamaha.smaf-audio": {
source: "iana",
extensions: ["saf"]
},
"application/vnd.yamaha.smaf-phrase": {
source: "iana",
extensions: ["spf"]
},
"application/vnd.yamaha.through-ngn": {
source: "iana"
},
"application/vnd.yamaha.tunnel-udpencap": {
source: "iana"
},
"application/vnd.yaoweme": {
source: "iana"
},
"application/vnd.yellowriver-custom-menu": {
source: "iana",
extensions: ["cmp"]
},
"application/vnd.zul": {
source: "iana",
extensions: ["zir", "zirz"]
},
"application/vnd.zzazz.deck+xml": {
source: "iana",
compressible: true,
extensions: ["zaz"]
},
"application/voicexml+xml": {
source: "iana",
compressible: true,
extensions: ["vxml"]
},
"application/voucher-cms+json": {
source: "iana",
compressible: true
},
"application/voucher-jws+json": {
source: "iana",
compressible: true
},
"application/vp": {
source: "iana"
},
"application/vp+cose": {
source: "iana"
},
"application/vp+jwt": {
source: "iana"
},
"application/vq-rtcpxr": {
source: "iana"
},
"application/wasm": {
source: "iana",
compressible: true,
extensions: ["wasm"]
},
"application/watcherinfo+xml": {
source: "iana",
compressible: true,
extensions: ["wif"]
},
"application/webpush-options+json": {
source: "iana",
compressible: true
},
"application/whoispp-query": {
source: "iana"
},
"application/whoispp-response": {
source: "iana"
},
"application/widget": {
source: "iana",
extensions: ["wgt"]
},
"application/winhlp": {
source: "apache",
extensions: ["hlp"]
},
"application/wita": {
source: "iana"
},
"application/wordperfect5.1": {
source: "iana"
},
"application/wsdl+xml": {
source: "iana",
compressible: true,
extensions: ["wsdl"]
},
"application/wspolicy+xml": {
source: "iana",
compressible: true,
extensions: ["wspolicy"]
},
"application/x-7z-compressed": {
source: "apache",
compressible: false,
extensions: ["7z"]
},
"application/x-abiword": {
source: "apache",
extensions: ["abw"]
},
"application/x-ace-compressed": {
source: "apache",
extensions: ["ace"]
},
"application/x-amf": {
source: "apache"
},
"application/x-apple-diskimage": {
source: "apache",
extensions: ["dmg"]
},
"application/x-arj": {
compressible: false,
extensions: ["arj"]
},
"application/x-authorware-bin": {
source: "apache",
extensions: ["aab", "x32", "u32", "vox"]
},
"application/x-authorware-map": {
source: "apache",
extensions: ["aam"]
},
"application/x-authorware-seg": {
source: "apache",
extensions: ["aas"]
},
"application/x-bcpio": {
source: "apache",
extensions: ["bcpio"]
},
"application/x-bdoc": {
compressible: false,
extensions: ["bdoc"]
},
"application/x-bittorrent": {
source: "apache",
extensions: ["torrent"]
},
"application/x-blender": {
extensions: ["blend"]
},
"application/x-blorb": {
source: "apache",
extensions: ["blb", "blorb"]
},
"application/x-bzip": {
source: "apache",
compressible: false,
extensions: ["bz"]
},
"application/x-bzip2": {
source: "apache",
compressible: false,
extensions: ["bz2", "boz"]
},
"application/x-cbr": {
source: "apache",
extensions: ["cbr", "cba", "cbt", "cbz", "cb7"]
},
"application/x-cdlink": {
source: "apache",
extensions: ["vcd"]
},
"application/x-cfs-compressed": {
source: "apache",
extensions: ["cfs"]
},
"application/x-chat": {
source: "apache",
extensions: ["chat"]
},
"application/x-chess-pgn": {
source: "apache",
extensions: ["pgn"]
},
"application/x-chrome-extension": {
extensions: ["crx"]
},
"application/x-cocoa": {
source: "nginx",
extensions: ["cco"]
},
"application/x-compress": {
source: "apache"
},
"application/x-compressed": {
extensions: ["rar"]
},
"application/x-conference": {
source: "apache",
extensions: ["nsc"]
},
"application/x-cpio": {
source: "apache",
extensions: ["cpio"]
},
"application/x-csh": {
source: "apache",
extensions: ["csh"]
},
"application/x-deb": {
compressible: false
},
"application/x-debian-package": {
source: "apache",
extensions: ["deb", "udeb"]
},
"application/x-dgc-compressed": {
source: "apache",
extensions: ["dgc"]
},
"application/x-director": {
source: "apache",
extensions: ["dir", "dcr", "dxr", "cst", "cct", "cxt", "w3d", "fgd", "swa"]
},
"application/x-doom": {
source: "apache",
extensions: ["wad"]
},
"application/x-dtbncx+xml": {
source: "apache",
compressible: true,
extensions: ["ncx"]
},
"application/x-dtbook+xml": {
source: "apache",
compressible: true,
extensions: ["dtb"]
},
"application/x-dtbresource+xml": {
source: "apache",
compressible: true,
extensions: ["res"]
},
"application/x-dvi": {
source: "apache",
compressible: false,
extensions: ["dvi"]
},
"application/x-envoy": {
source: "apache",
extensions: ["evy"]
},
"application/x-eva": {
source: "apache",
extensions: ["eva"]
},
"application/x-font-bdf": {
source: "apache",
extensions: ["bdf"]
},
"application/x-font-dos": {
source: "apache"
},
"application/x-font-framemaker": {
source: "apache"
},
"application/x-font-ghostscript": {
source: "apache",
extensions: ["gsf"]
},
"application/x-font-libgrx": {
source: "apache"
},
"application/x-font-linux-psf": {
source: "apache",
extensions: ["psf"]
},
"application/x-font-pcf": {
source: "apache",
extensions: ["pcf"]
},
"application/x-font-snf": {
source: "apache",
extensions: ["snf"]
},
"application/x-font-speedo": {
source: "apache"
},
"application/x-font-sunos-news": {
source: "apache"
},
"application/x-font-type1": {
source: "apache",
extensions: ["pfa", "pfb", "pfm", "afm"]
},
"application/x-font-vfont": {
source: "apache"
},
"application/x-freearc": {
source: "apache",
extensions: ["arc"]
},
"application/x-futuresplash": {
source: "apache",
extensions: ["spl"]
},
"application/x-gca-compressed": {
source: "apache",
extensions: ["gca"]
},
"application/x-glulx": {
source: "apache",
extensions: ["ulx"]
},
"application/x-gnumeric": {
source: "apache",
extensions: ["gnumeric"]
},
"application/x-gramps-xml": {
source: "apache",
extensions: ["gramps"]
},
"application/x-gtar": {
source: "apache",
extensions: ["gtar"]
},
"application/x-gzip": {
source: "apache"
},
"application/x-hdf": {
source: "apache",
extensions: ["hdf"]
},
"application/x-httpd-php": {
compressible: true,
extensions: ["php"]
},
"application/x-install-instructions": {
source: "apache",
extensions: ["install"]
},
"application/x-ipynb+json": {
compressible: true,
extensions: ["ipynb"]
},
"application/x-iso9660-image": {
source: "apache",
extensions: ["iso"]
},
"application/x-iwork-keynote-sffkey": {
extensions: ["key"]
},
"application/x-iwork-numbers-sffnumbers": {
extensions: ["numbers"]
},
"application/x-iwork-pages-sffpages": {
extensions: ["pages"]
},
"application/x-java-archive-diff": {
source: "nginx",
extensions: ["jardiff"]
},
"application/x-java-jnlp-file": {
source: "apache",
compressible: false,
extensions: ["jnlp"]
},
"application/x-javascript": {
compressible: true
},
"application/x-keepass2": {
extensions: ["kdbx"]
},
"application/x-latex": {
source: "apache",
compressible: false,
extensions: ["latex"]
},
"application/x-lua-bytecode": {
extensions: ["luac"]
},
"application/x-lzh-compressed": {
source: "apache",
extensions: ["lzh", "lha"]
},
"application/x-makeself": {
source: "nginx",
extensions: ["run"]
},
"application/x-mie": {
source: "apache",
extensions: ["mie"]
},
"application/x-mobipocket-ebook": {
source: "apache",
extensions: ["prc", "mobi"]
},
"application/x-mpegurl": {
compressible: false
},
"application/x-ms-application": {
source: "apache",
extensions: ["application"]
},
"application/x-ms-shortcut": {
source: "apache",
extensions: ["lnk"]
},
"application/x-ms-wmd": {
source: "apache",
extensions: ["wmd"]
},
"application/x-ms-wmz": {
source: "apache",
extensions: ["wmz"]
},
"application/x-ms-xbap": {
source: "apache",
extensions: ["xbap"]
},
"application/x-msaccess": {
source: "apache",
extensions: ["mdb"]
},
"application/x-msbinder": {
source: "apache",
extensions: ["obd"]
},
"application/x-mscardfile": {
source: "apache",
extensions: ["crd"]
},
"application/x-msclip": {
source: "apache",
extensions: ["clp"]
},
"application/x-msdos-program": {
extensions: ["exe"]
},
"application/x-msdownload": {
source: "apache",
extensions: ["exe", "dll", "com", "bat", "msi"]
},
"application/x-msmediaview": {
source: "apache",
extensions: ["mvb", "m13", "m14"]
},
"application/x-msmetafile": {
source: "apache",
extensions: ["wmf", "wmz", "emf", "emz"]
},
"application/x-msmoney": {
source: "apache",
extensions: ["mny"]
},
"application/x-mspublisher": {
source: "apache",
extensions: ["pub"]
},
"application/x-msschedule": {
source: "apache",
extensions: ["scd"]
},
"application/x-msterminal": {
source: "apache",
extensions: ["trm"]
},
"application/x-mswrite": {
source: "apache",
extensions: ["wri"]
},
"application/x-netcdf": {
source: "apache",
extensions: ["nc", "cdf"]
},
"application/x-ns-proxy-autoconfig": {
compressible: true,
extensions: ["pac"]
},
"application/x-nzb": {
source: "apache",
extensions: ["nzb"]
},
"application/x-perl": {
source: "nginx",
extensions: ["pl", "pm"]
},
"application/x-pilot": {
source: "nginx",
extensions: ["prc", "pdb"]
},
"application/x-pkcs12": {
source: "apache",
compressible: false,
extensions: ["p12", "pfx"]
},
"application/x-pkcs7-certificates": {
source: "apache",
extensions: ["p7b", "spc"]
},
"application/x-pkcs7-certreqresp": {
source: "apache",
extensions: ["p7r"]
},
"application/x-pki-message": {
source: "iana"
},
"application/x-rar-compressed": {
source: "apache",
compressible: false,
extensions: ["rar"]
},
"application/x-redhat-package-manager": {
source: "nginx",
extensions: ["rpm"]
},
"application/x-research-info-systems": {
source: "apache",
extensions: ["ris"]
},
"application/x-sea": {
source: "nginx",
extensions: ["sea"]
},
"application/x-sh": {
source: "apache",
compressible: true,
extensions: ["sh"]
},
"application/x-shar": {
source: "apache",
extensions: ["shar"]
},
"application/x-shockwave-flash": {
source: "apache",
compressible: false,
extensions: ["swf"]
},
"application/x-silverlight-app": {
source: "apache",
extensions: ["xap"]
},
"application/x-sql": {
source: "apache",
extensions: ["sql"]
},
"application/x-stuffit": {
source: "apache",
compressible: false,
extensions: ["sit"]
},
"application/x-stuffitx": {
source: "apache",
extensions: ["sitx"]
},
"application/x-subrip": {
source: "apache",
extensions: ["srt"]
},
"application/x-sv4cpio": {
source: "apache",
extensions: ["sv4cpio"]
},
"application/x-sv4crc": {
source: "apache",
extensions: ["sv4crc"]
},
"application/x-t3vm-image": {
source: "apache",
extensions: ["t3"]
},
"application/x-tads": {
source: "apache",
extensions: ["gam"]
},
"application/x-tar": {
source: "apache",
compressible: true,
extensions: ["tar"]
},
"application/x-tcl": {
source: "apache",
extensions: ["tcl", "tk"]
},
"application/x-tex": {
source: "apache",
extensions: ["tex"]
},
"application/x-tex-tfm": {
source: "apache",
extensions: ["tfm"]
},
"application/x-texinfo": {
source: "apache",
extensions: ["texinfo", "texi"]
},
"application/x-tgif": {
source: "apache",
extensions: ["obj"]
},
"application/x-ustar": {
source: "apache",
extensions: ["ustar"]
},
"application/x-virtualbox-hdd": {
compressible: true,
extensions: ["hdd"]
},
"application/x-virtualbox-ova": {
compressible: true,
extensions: ["ova"]
},
"application/x-virtualbox-ovf": {
compressible: true,
extensions: ["ovf"]
},
"application/x-virtualbox-vbox": {
compressible: true,
extensions: ["vbox"]
},
"application/x-virtualbox-vbox-extpack": {
compressible: false,
extensions: ["vbox-extpack"]
},
"application/x-virtualbox-vdi": {
compressible: true,
extensions: ["vdi"]
},
"application/x-virtualbox-vhd": {
compressible: true,
extensions: ["vhd"]
},
"application/x-virtualbox-vmdk": {
compressible: true,
extensions: ["vmdk"]
},
"application/x-wais-source": {
source: "apache",
extensions: ["src"]
},
"application/x-web-app-manifest+json": {
compressible: true,
extensions: ["webapp"]
},
"application/x-www-form-urlencoded": {
source: "iana",
compressible: true
},
"application/x-x509-ca-cert": {
source: "iana",
extensions: ["der", "crt", "pem"]
},
"application/x-x509-ca-ra-cert": {
source: "iana"
},
"application/x-x509-next-ca-cert": {
source: "iana"
},
"application/x-xfig": {
source: "apache",
extensions: ["fig"]
},
"application/x-xliff+xml": {
source: "apache",
compressible: true,
extensions: ["xlf"]
},
"application/x-xpinstall": {
source: "apache",
compressible: false,
extensions: ["xpi"]
},
"application/x-xz": {
source: "apache",
extensions: ["xz"]
},
"application/x-zip-compressed": {
extensions: ["zip"]
},
"application/x-zmachine": {
source: "apache",
extensions: ["z1", "z2", "z3", "z4", "z5", "z6", "z7", "z8"]
},
"application/x400-bp": {
source: "iana"
},
"application/xacml+xml": {
source: "iana",
compressible: true
},
"application/xaml+xml": {
source: "apache",
compressible: true,
extensions: ["xaml"]
},
"application/xcap-att+xml": {
source: "iana",
compressible: true,
extensions: ["xav"]
},
"application/xcap-caps+xml": {
source: "iana",
compressible: true,
extensions: ["xca"]
},
"application/xcap-diff+xml": {
source: "iana",
compressible: true,
extensions: ["xdf"]
},
"application/xcap-el+xml": {
source: "iana",
compressible: true,
extensions: ["xel"]
},
"application/xcap-error+xml": {
source: "iana",
compressible: true
},
"application/xcap-ns+xml": {
source: "iana",
compressible: true,
extensions: ["xns"]
},
"application/xcon-conference-info+xml": {
source: "iana",
compressible: true
},
"application/xcon-conference-info-diff+xml": {
source: "iana",
compressible: true
},
"application/xenc+xml": {
source: "iana",
compressible: true,
extensions: ["xenc"]
},
"application/xfdf": {
source: "iana",
extensions: ["xfdf"]
},
"application/xhtml+xml": {
source: "iana",
compressible: true,
extensions: ["xhtml", "xht"]
},
"application/xhtml-voice+xml": {
source: "apache",
compressible: true
},
"application/xliff+xml": {
source: "iana",
compressible: true,
extensions: ["xlf"]
},
"application/xml": {
source: "iana",
compressible: true,
extensions: ["xml", "xsl", "xsd", "rng"]
},
"application/xml-dtd": {
source: "iana",
compressible: true,
extensions: ["dtd"]
},
"application/xml-external-parsed-entity": {
source: "iana"
},
"application/xml-patch+xml": {
source: "iana",
compressible: true
},
"application/xmpp+xml": {
source: "iana",
compressible: true
},
"application/xop+xml": {
source: "iana",
compressible: true,
extensions: ["xop"]
},
"application/xproc+xml": {
source: "apache",
compressible: true,
extensions: ["xpl"]
},
"application/xslt+xml": {
source: "iana",
compressible: true,
extensions: ["xsl", "xslt"]
},
"application/xspf+xml": {
source: "apache",
compressible: true,
extensions: ["xspf"]
},
"application/xv+xml": {
source: "iana",
compressible: true,
extensions: ["mxml", "xhvml", "xvml", "xvm"]
},
"application/yaml": {
source: "iana"
},
"application/yang": {
source: "iana",
extensions: ["yang"]
},
"application/yang-data+cbor": {
source: "iana"
},
"application/yang-data+json": {
source: "iana",
compressible: true
},
"application/yang-data+xml": {
source: "iana",
compressible: true
},
"application/yang-patch+json": {
source: "iana",
compressible: true
},
"application/yang-patch+xml": {
source: "iana",
compressible: true
},
"application/yang-sid+json": {
source: "iana",
compressible: true
},
"application/yin+xml": {
source: "iana",
compressible: true,
extensions: ["yin"]
},
"application/zip": {
source: "iana",
compressible: false,
extensions: ["zip"]
},
"application/zip+dotlottie": {
extensions: ["lottie"]
},
"application/zlib": {
source: "iana"
},
"application/zstd": {
source: "iana"
},
"audio/1d-interleaved-parityfec": {
source: "iana"
},
"audio/32kadpcm": {
source: "iana"
},
"audio/3gpp": {
source: "iana",
compressible: false,
extensions: ["3gpp"]
},
"audio/3gpp2": {
source: "iana"
},
"audio/aac": {
source: "iana",
extensions: ["adts", "aac"]
},
"audio/ac3": {
source: "iana"
},
"audio/adpcm": {
source: "apache",
extensions: ["adp"]
},
"audio/amr": {
source: "iana",
extensions: ["amr"]
},
"audio/amr-wb": {
source: "iana"
},
"audio/amr-wb+": {
source: "iana"
},
"audio/aptx": {
source: "iana"
},
"audio/asc": {
source: "iana"
},
"audio/atrac-advanced-lossless": {
source: "iana"
},
"audio/atrac-x": {
source: "iana"
},
"audio/atrac3": {
source: "iana"
},
"audio/basic": {
source: "iana",
compressible: false,
extensions: ["au", "snd"]
},
"audio/bv16": {
source: "iana"
},
"audio/bv32": {
source: "iana"
},
"audio/clearmode": {
source: "iana"
},
"audio/cn": {
source: "iana"
},
"audio/dat12": {
source: "iana"
},
"audio/dls": {
source: "iana"
},
"audio/dsr-es201108": {
source: "iana"
},
"audio/dsr-es202050": {
source: "iana"
},
"audio/dsr-es202211": {
source: "iana"
},
"audio/dsr-es202212": {
source: "iana"
},
"audio/dv": {
source: "iana"
},
"audio/dvi4": {
source: "iana"
},
"audio/eac3": {
source: "iana"
},
"audio/encaprtp": {
source: "iana"
},
"audio/evrc": {
source: "iana"
},
"audio/evrc-qcp": {
source: "iana"
},
"audio/evrc0": {
source: "iana"
},
"audio/evrc1": {
source: "iana"
},
"audio/evrcb": {
source: "iana"
},
"audio/evrcb0": {
source: "iana"
},
"audio/evrcb1": {
source: "iana"
},
"audio/evrcnw": {
source: "iana"
},
"audio/evrcnw0": {
source: "iana"
},
"audio/evrcnw1": {
source: "iana"
},
"audio/evrcwb": {
source: "iana"
},
"audio/evrcwb0": {
source: "iana"
},
"audio/evrcwb1": {
source: "iana"
},
"audio/evs": {
source: "iana"
},
"audio/flac": {
source: "iana"
},
"audio/flexfec": {
source: "iana"
},
"audio/fwdred": {
source: "iana"
},
"audio/g711-0": {
source: "iana"
},
"audio/g719": {
source: "iana"
},
"audio/g722": {
source: "iana"
},
"audio/g7221": {
source: "iana"
},
"audio/g723": {
source: "iana"
},
"audio/g726-16": {
source: "iana"
},
"audio/g726-24": {
source: "iana"
},
"audio/g726-32": {
source: "iana"
},
"audio/g726-40": {
source: "iana"
},
"audio/g728": {
source: "iana"
},
"audio/g729": {
source: "iana"
},
"audio/g7291": {
source: "iana"
},
"audio/g729d": {
source: "iana"
},
"audio/g729e": {
source: "iana"
},
"audio/gsm": {
source: "iana"
},
"audio/gsm-efr": {
source: "iana"
},
"audio/gsm-hr-08": {
source: "iana"
},
"audio/ilbc": {
source: "iana"
},
"audio/ip-mr_v2.5": {
source: "iana"
},
"audio/isac": {
source: "apache"
},
"audio/l16": {
source: "iana"
},
"audio/l20": {
source: "iana"
},
"audio/l24": {
source: "iana",
compressible: false
},
"audio/l8": {
source: "iana"
},
"audio/lpc": {
source: "iana"
},
"audio/matroska": {
source: "iana"
},
"audio/melp": {
source: "iana"
},
"audio/melp1200": {
source: "iana"
},
"audio/melp2400": {
source: "iana"
},
"audio/melp600": {
source: "iana"
},
"audio/mhas": {
source: "iana"
},
"audio/midi": {
source: "apache",
extensions: ["mid", "midi", "kar", "rmi"]
},
"audio/midi-clip": {
source: "iana"
},
"audio/mobile-xmf": {
source: "iana",
extensions: ["mxmf"]
},
"audio/mp3": {
compressible: false,
extensions: ["mp3"]
},
"audio/mp4": {
source: "iana",
compressible: false,
extensions: ["m4a", "mp4a", "m4b"]
},
"audio/mp4a-latm": {
source: "iana"
},
"audio/mpa": {
source: "iana"
},
"audio/mpa-robust": {
source: "iana"
},
"audio/mpeg": {
source: "iana",
compressible: false,
extensions: ["mpga", "mp2", "mp2a", "mp3", "m2a", "m3a"]
},
"audio/mpeg4-generic": {
source: "iana"
},
"audio/musepack": {
source: "apache"
},
"audio/ogg": {
source: "iana",
compressible: false,
extensions: ["oga", "ogg", "spx", "opus"]
},
"audio/opus": {
source: "iana"
},
"audio/parityfec": {
source: "iana"
},
"audio/pcma": {
source: "iana"
},
"audio/pcma-wb": {
source: "iana"
},
"audio/pcmu": {
source: "iana"
},
"audio/pcmu-wb": {
source: "iana"
},
"audio/prs.sid": {
source: "iana"
},
"audio/qcelp": {
source: "iana"
},
"audio/raptorfec": {
source: "iana"
},
"audio/red": {
source: "iana"
},
"audio/rtp-enc-aescm128": {
source: "iana"
},
"audio/rtp-midi": {
source: "iana"
},
"audio/rtploopback": {
source: "iana"
},
"audio/rtx": {
source: "iana"
},
"audio/s3m": {
source: "apache",
extensions: ["s3m"]
},
"audio/scip": {
source: "iana"
},
"audio/silk": {
source: "apache",
extensions: ["sil"]
},
"audio/smv": {
source: "iana"
},
"audio/smv-qcp": {
source: "iana"
},
"audio/smv0": {
source: "iana"
},
"audio/sofa": {
source: "iana"
},
"audio/sp-midi": {
source: "iana"
},
"audio/speex": {
source: "iana"
},
"audio/t140c": {
source: "iana"
},
"audio/t38": {
source: "iana"
},
"audio/telephone-event": {
source: "iana"
},
"audio/tetra_acelp": {
source: "iana"
},
"audio/tetra_acelp_bb": {
source: "iana"
},
"audio/tone": {
source: "iana"
},
"audio/tsvcis": {
source: "iana"
},
"audio/uemclip": {
source: "iana"
},
"audio/ulpfec": {
source: "iana"
},
"audio/usac": {
source: "iana"
},
"audio/vdvi": {
source: "iana"
},
"audio/vmr-wb": {
source: "iana"
},
"audio/vnd.3gpp.iufp": {
source: "iana"
},
"audio/vnd.4sb": {
source: "iana"
},
"audio/vnd.audiokoz": {
source: "iana"
},
"audio/vnd.celp": {
source: "iana"
},
"audio/vnd.cisco.nse": {
source: "iana"
},
"audio/vnd.cmles.radio-events": {
source: "iana"
},
"audio/vnd.cns.anp1": {
source: "iana"
},
"audio/vnd.cns.inf1": {
source: "iana"
},
"audio/vnd.dece.audio": {
source: "iana",
extensions: ["uva", "uvva"]
},
"audio/vnd.digital-winds": {
source: "iana",
extensions: ["eol"]
},
"audio/vnd.dlna.adts": {
source: "iana"
},
"audio/vnd.dolby.heaac.1": {
source: "iana"
},
"audio/vnd.dolby.heaac.2": {
source: "iana"
},
"audio/vnd.dolby.mlp": {
source: "iana"
},
"audio/vnd.dolby.mps": {
source: "iana"
},
"audio/vnd.dolby.pl2": {
source: "iana"
},
"audio/vnd.dolby.pl2x": {
source: "iana"
},
"audio/vnd.dolby.pl2z": {
source: "iana"
},
"audio/vnd.dolby.pulse.1": {
source: "iana"
},
"audio/vnd.dra": {
source: "iana",
extensions: ["dra"]
},
"audio/vnd.dts": {
source: "iana",
extensions: ["dts"]
},
"audio/vnd.dts.hd": {
source: "iana",
extensions: ["dtshd"]
},
"audio/vnd.dts.uhd": {
source: "iana"
},
"audio/vnd.dvb.file": {
source: "iana"
},
"audio/vnd.everad.plj": {
source: "iana"
},
"audio/vnd.hns.audio": {
source: "iana"
},
"audio/vnd.lucent.voice": {
source: "iana",
extensions: ["lvp"]
},
"audio/vnd.ms-playready.media.pya": {
source: "iana",
extensions: ["pya"]
},
"audio/vnd.nokia.mobile-xmf": {
source: "iana"
},
"audio/vnd.nortel.vbk": {
source: "iana"
},
"audio/vnd.nuera.ecelp4800": {
source: "iana",
extensions: ["ecelp4800"]
},
"audio/vnd.nuera.ecelp7470": {
source: "iana",
extensions: ["ecelp7470"]
},
"audio/vnd.nuera.ecelp9600": {
source: "iana",
extensions: ["ecelp9600"]
},
"audio/vnd.octel.sbc": {
source: "iana"
},
"audio/vnd.presonus.multitrack": {
source: "iana"
},
"audio/vnd.qcelp": {
source: "apache"
},
"audio/vnd.rhetorex.32kadpcm": {
source: "iana"
},
"audio/vnd.rip": {
source: "iana",
extensions: ["rip"]
},
"audio/vnd.rn-realaudio": {
compressible: false
},
"audio/vnd.sealedmedia.softseal.mpeg": {
source: "iana"
},
"audio/vnd.vmx.cvsd": {
source: "iana"
},
"audio/vnd.wave": {
compressible: false
},
"audio/vorbis": {
source: "iana",
compressible: false
},
"audio/vorbis-config": {
source: "iana"
},
"audio/wav": {
compressible: false,
extensions: ["wav"]
},
"audio/wave": {
compressible: false,
extensions: ["wav"]
},
"audio/webm": {
source: "apache",
compressible: false,
extensions: ["weba"]
},
"audio/x-aac": {
source: "apache",
compressible: false,
extensions: ["aac"]
},
"audio/x-aiff": {
source: "apache",
extensions: ["aif", "aiff", "aifc"]
},
"audio/x-caf": {
source: "apache",
compressible: false,
extensions: ["caf"]
},
"audio/x-flac": {
source: "apache",
extensions: ["flac"]
},
"audio/x-m4a": {
source: "nginx",
extensions: ["m4a"]
},
"audio/x-matroska": {
source: "apache",
extensions: ["mka"]
},
"audio/x-mpegurl": {
source: "apache",
extensions: ["m3u"]
},
"audio/x-ms-wax": {
source: "apache",
extensions: ["wax"]
},
"audio/x-ms-wma": {
source: "apache",
extensions: ["wma"]
},
"audio/x-pn-realaudio": {
source: "apache",
extensions: ["ram", "ra"]
},
"audio/x-pn-realaudio-plugin": {
source: "apache",
extensions: ["rmp"]
},
"audio/x-realaudio": {
source: "nginx",
extensions: ["ra"]
},
"audio/x-tta": {
source: "apache"
},
"audio/x-wav": {
source: "apache",
extensions: ["wav"]
},
"audio/xm": {
source: "apache",
extensions: ["xm"]
},
"chemical/x-cdx": {
source: "apache",
extensions: ["cdx"]
},
"chemical/x-cif": {
source: "apache",
extensions: ["cif"]
},
"chemical/x-cmdf": {
source: "apache",
extensions: ["cmdf"]
},
"chemical/x-cml": {
source: "apache",
extensions: ["cml"]
},
"chemical/x-csml": {
source: "apache",
extensions: ["csml"]
},
"chemical/x-pdb": {
source: "apache"
},
"chemical/x-xyz": {
source: "apache",
extensions: ["xyz"]
},
"font/collection": {
source: "iana",
extensions: ["ttc"]
},
"font/otf": {
source: "iana",
compressible: true,
extensions: ["otf"]
},
"font/sfnt": {
source: "iana"
},
"font/ttf": {
source: "iana",
compressible: true,
extensions: ["ttf"]
},
"font/woff": {
source: "iana",
extensions: ["woff"]
},
"font/woff2": {
source: "iana",
extensions: ["woff2"]
},
"image/aces": {
source: "iana",
extensions: ["exr"]
},
"image/apng": {
source: "iana",
compressible: false,
extensions: ["apng"]
},
"image/avci": {
source: "iana",
extensions: ["avci"]
},
"image/avcs": {
source: "iana",
extensions: ["avcs"]
},
"image/avif": {
source: "iana",
compressible: false,
extensions: ["avif"]
},
"image/bmp": {
source: "iana",
compressible: true,
extensions: ["bmp", "dib"]
},
"image/cgm": {
source: "iana",
extensions: ["cgm"]
},
"image/dicom-rle": {
source: "iana",
extensions: ["drle"]
},
"image/dpx": {
source: "iana",
extensions: ["dpx"]
},
"image/emf": {
source: "iana",
extensions: ["emf"]
},
"image/fits": {
source: "iana",
extensions: ["fits"]
},
"image/g3fax": {
source: "iana",
extensions: ["g3"]
},
"image/gif": {
source: "iana",
compressible: false,
extensions: ["gif"]
},
"image/heic": {
source: "iana",
extensions: ["heic"]
},
"image/heic-sequence": {
source: "iana",
extensions: ["heics"]
},
"image/heif": {
source: "iana",
extensions: ["heif"]
},
"image/heif-sequence": {
source: "iana",
extensions: ["heifs"]
},
"image/hej2k": {
source: "iana",
extensions: ["hej2"]
},
"image/ief": {
source: "iana",
extensions: ["ief"]
},
"image/j2c": {
source: "iana"
},
"image/jaii": {
source: "iana",
extensions: ["jaii"]
},
"image/jais": {
source: "iana",
extensions: ["jais"]
},
"image/jls": {
source: "iana",
extensions: ["jls"]
},
"image/jp2": {
source: "iana",
compressible: false,
extensions: ["jp2", "jpg2"]
},
"image/jpeg": {
source: "iana",
compressible: false,
extensions: ["jpg", "jpeg", "jpe"]
},
"image/jph": {
source: "iana",
extensions: ["jph"]
},
"image/jphc": {
source: "iana",
extensions: ["jhc"]
},
"image/jpm": {
source: "iana",
compressible: false,
extensions: ["jpm", "jpgm"]
},
"image/jpx": {
source: "iana",
compressible: false,
extensions: ["jpx", "jpf"]
},
"image/jxl": {
source: "iana",
extensions: ["jxl"]
},
"image/jxr": {
source: "iana",
extensions: ["jxr"]
},
"image/jxra": {
source: "iana",
extensions: ["jxra"]
},
"image/jxrs": {
source: "iana",
extensions: ["jxrs"]
},
"image/jxs": {
source: "iana",
extensions: ["jxs"]
},
"image/jxsc": {
source: "iana",
extensions: ["jxsc"]
},
"image/jxsi": {
source: "iana",
extensions: ["jxsi"]
},
"image/jxss": {
source: "iana",
extensions: ["jxss"]
},
"image/ktx": {
source: "iana",
extensions: ["ktx"]
},
"image/ktx2": {
source: "iana",
extensions: ["ktx2"]
},
"image/naplps": {
source: "iana"
},
"image/pjpeg": {
compressible: false,
extensions: ["jfif"]
},
"image/png": {
source: "iana",
compressible: false,
extensions: ["png"]
},
"image/prs.btif": {
source: "iana",
extensions: ["btif", "btf"]
},
"image/prs.pti": {
source: "iana",
extensions: ["pti"]
},
"image/pwg-raster": {
source: "iana"
},
"image/sgi": {
source: "apache",
extensions: ["sgi"]
},
"image/svg+xml": {
source: "iana",
compressible: true,
extensions: ["svg", "svgz"]
},
"image/t38": {
source: "iana",
extensions: ["t38"]
},
"image/tiff": {
source: "iana",
compressible: false,
extensions: ["tif", "tiff"]
},
"image/tiff-fx": {
source: "iana",
extensions: ["tfx"]
},
"image/vnd.adobe.photoshop": {
source: "iana",
compressible: true,
extensions: ["psd"]
},
"image/vnd.airzip.accelerator.azv": {
source: "iana",
extensions: ["azv"]
},
"image/vnd.clip": {
source: "iana"
},
"image/vnd.cns.inf2": {
source: "iana"
},
"image/vnd.dece.graphic": {
source: "iana",
extensions: ["uvi", "uvvi", "uvg", "uvvg"]
},
"image/vnd.djvu": {
source: "iana",
extensions: ["djvu", "djv"]
},
"image/vnd.dvb.subtitle": {
source: "iana",
extensions: ["sub"]
},
"image/vnd.dwg": {
source: "iana",
extensions: ["dwg"]
},
"image/vnd.dxf": {
source: "iana",
extensions: ["dxf"]
},
"image/vnd.fastbidsheet": {
source: "iana",
extensions: ["fbs"]
},
"image/vnd.fpx": {
source: "iana",
extensions: ["fpx"]
},
"image/vnd.fst": {
source: "iana",
extensions: ["fst"]
},
"image/vnd.fujixerox.edmics-mmr": {
source: "iana",
extensions: ["mmr"]
},
"image/vnd.fujixerox.edmics-rlc": {
source: "iana",
extensions: ["rlc"]
},
"image/vnd.globalgraphics.pgb": {
source: "iana"
},
"image/vnd.microsoft.icon": {
source: "iana",
compressible: true,
extensions: ["ico"]
},
"image/vnd.mix": {
source: "iana"
},
"image/vnd.mozilla.apng": {
source: "iana"
},
"image/vnd.ms-dds": {
compressible: true,
extensions: ["dds"]
},
"image/vnd.ms-modi": {
source: "iana",
extensions: ["mdi"]
},
"image/vnd.ms-photo": {
source: "apache",
extensions: ["wdp"]
},
"image/vnd.net-fpx": {
source: "iana",
extensions: ["npx"]
},
"image/vnd.pco.b16": {
source: "iana",
extensions: ["b16"]
},
"image/vnd.radiance": {
source: "iana"
},
"image/vnd.sealed.png": {
source: "iana"
},
"image/vnd.sealedmedia.softseal.gif": {
source: "iana"
},
"image/vnd.sealedmedia.softseal.jpg": {
source: "iana"
},
"image/vnd.svf": {
source: "iana"
},
"image/vnd.tencent.tap": {
source: "iana",
extensions: ["tap"]
},
"image/vnd.valve.source.texture": {
source: "iana",
extensions: ["vtf"]
},
"image/vnd.wap.wbmp": {
source: "iana",
extensions: ["wbmp"]
},
"image/vnd.xiff": {
source: "iana",
extensions: ["xif"]
},
"image/vnd.zbrush.pcx": {
source: "iana",
extensions: ["pcx"]
},
"image/webp": {
source: "iana",
extensions: ["webp"]
},
"image/wmf": {
source: "iana",
extensions: ["wmf"]
},
"image/x-3ds": {
source: "apache",
extensions: ["3ds"]
},
"image/x-adobe-dng": {
extensions: ["dng"]
},
"image/x-cmu-raster": {
source: "apache",
extensions: ["ras"]
},
"image/x-cmx": {
source: "apache",
extensions: ["cmx"]
},
"image/x-emf": {
source: "iana"
},
"image/x-freehand": {
source: "apache",
extensions: ["fh", "fhc", "fh4", "fh5", "fh7"]
},
"image/x-icon": {
source: "apache",
compressible: true,
extensions: ["ico"]
},
"image/x-jng": {
source: "nginx",
extensions: ["jng"]
},
"image/x-mrsid-image": {
source: "apache",
extensions: ["sid"]
},
"image/x-ms-bmp": {
source: "nginx",
compressible: true,
extensions: ["bmp"]
},
"image/x-pcx": {
source: "apache",
extensions: ["pcx"]
},
"image/x-pict": {
source: "apache",
extensions: ["pic", "pct"]
},
"image/x-portable-anymap": {
source: "apache",
extensions: ["pnm"]
},
"image/x-portable-bitmap": {
source: "apache",
extensions: ["pbm"]
},
"image/x-portable-graymap": {
source: "apache",
extensions: ["pgm"]
},
"image/x-portable-pixmap": {
source: "apache",
extensions: ["ppm"]
},
"image/x-rgb": {
source: "apache",
extensions: ["rgb"]
},
"image/x-tga": {
source: "apache",
extensions: ["tga"]
},
"image/x-wmf": {
source: "iana"
},
"image/x-xbitmap": {
source: "apache",
extensions: ["xbm"]
},
"image/x-xcf": {
compressible: false
},
"image/x-xpixmap": {
source: "apache",
extensions: ["xpm"]
},
"image/x-xwindowdump": {
source: "apache",
extensions: ["xwd"]
},
"message/bhttp": {
source: "iana"
},
"message/cpim": {
source: "iana"
},
"message/delivery-status": {
source: "iana"
},
"message/disposition-notification": {
source: "iana",
extensions: [
"disposition-notification"
]
},
"message/external-body": {
source: "iana"
},
"message/feedback-report": {
source: "iana"
},
"message/global": {
source: "iana",
extensions: ["u8msg"]
},
"message/global-delivery-status": {
source: "iana",
extensions: ["u8dsn"]
},
"message/global-disposition-notification": {
source: "iana",
extensions: ["u8mdn"]
},
"message/global-headers": {
source: "iana",
extensions: ["u8hdr"]
},
"message/http": {
source: "iana",
compressible: false
},
"message/imdn+xml": {
source: "iana",
compressible: true
},
"message/mls": {
source: "iana"
},
"message/news": {
source: "apache"
},
"message/ohttp-req": {
source: "iana"
},
"message/ohttp-res": {
source: "iana"
},
"message/partial": {
source: "iana",
compressible: false
},
"message/rfc822": {
source: "iana",
compressible: true,
extensions: ["eml", "mime", "mht", "mhtml"]
},
"message/s-http": {
source: "apache"
},
"message/sip": {
source: "iana"
},
"message/sipfrag": {
source: "iana"
},
"message/tracking-status": {
source: "iana"
},
"message/vnd.si.simp": {
source: "apache"
},
"message/vnd.wfa.wsc": {
source: "iana",
extensions: ["wsc"]
},
"model/3mf": {
source: "iana",
extensions: ["3mf"]
},
"model/e57": {
source: "iana"
},
"model/gltf+json": {
source: "iana",
compressible: true,
extensions: ["gltf"]
},
"model/gltf-binary": {
source: "iana",
compressible: true,
extensions: ["glb"]
},
"model/iges": {
source: "iana",
compressible: false,
extensions: ["igs", "iges"]
},
"model/jt": {
source: "iana",
extensions: ["jt"]
},
"model/mesh": {
source: "iana",
compressible: false,
extensions: ["msh", "mesh", "silo"]
},
"model/mtl": {
source: "iana",
extensions: ["mtl"]
},
"model/obj": {
source: "iana",
extensions: ["obj"]
},
"model/prc": {
source: "iana",
extensions: ["prc"]
},
"model/step": {
source: "iana",
extensions: ["step", "stp", "stpnc", "p21", "210"]
},
"model/step+xml": {
source: "iana",
compressible: true,
extensions: ["stpx"]
},
"model/step+zip": {
source: "iana",
compressible: false,
extensions: ["stpz"]
},
"model/step-xml+zip": {
source: "iana",
compressible: false,
extensions: ["stpxz"]
},
"model/stl": {
source: "iana",
extensions: ["stl"]
},
"model/u3d": {
source: "iana",
extensions: ["u3d"]
},
"model/vnd.bary": {
source: "iana",
extensions: ["bary"]
},
"model/vnd.cld": {
source: "iana",
extensions: ["cld"]
},
"model/vnd.collada+xml": {
source: "iana",
compressible: true,
extensions: ["dae"]
},
"model/vnd.dwf": {
source: "iana",
extensions: ["dwf"]
},
"model/vnd.flatland.3dml": {
source: "iana"
},
"model/vnd.gdl": {
source: "iana",
extensions: ["gdl"]
},
"model/vnd.gs-gdl": {
source: "apache"
},
"model/vnd.gs.gdl": {
source: "iana"
},
"model/vnd.gtw": {
source: "iana",
extensions: ["gtw"]
},
"model/vnd.moml+xml": {
source: "iana",
compressible: true
},
"model/vnd.mts": {
source: "iana",
extensions: ["mts"]
},
"model/vnd.opengex": {
source: "iana",
extensions: ["ogex"]
},
"model/vnd.parasolid.transmit.binary": {
source: "iana",
extensions: ["x_b"]
},
"model/vnd.parasolid.transmit.text": {
source: "iana",
extensions: ["x_t"]
},
"model/vnd.pytha.pyox": {
source: "iana",
extensions: ["pyo", "pyox"]
},
"model/vnd.rosette.annotated-data-model": {
source: "iana"
},
"model/vnd.sap.vds": {
source: "iana",
extensions: ["vds"]
},
"model/vnd.usda": {
source: "iana",
extensions: ["usda"]
},
"model/vnd.usdz+zip": {
source: "iana",
compressible: false,
extensions: ["usdz"]
},
"model/vnd.valve.source.compiled-map": {
source: "iana",
extensions: ["bsp"]
},
"model/vnd.vtu": {
source: "iana",
extensions: ["vtu"]
},
"model/vrml": {
source: "iana",
compressible: false,
extensions: ["wrl", "vrml"]
},
"model/x3d+binary": {
source: "apache",
compressible: false,
extensions: ["x3db", "x3dbz"]
},
"model/x3d+fastinfoset": {
source: "iana",
extensions: ["x3db"]
},
"model/x3d+vrml": {
source: "apache",
compressible: false,
extensions: ["x3dv", "x3dvz"]
},
"model/x3d+xml": {
source: "iana",
compressible: true,
extensions: ["x3d", "x3dz"]
},
"model/x3d-vrml": {
source: "iana",
extensions: ["x3dv"]
},
"multipart/alternative": {
source: "iana",
compressible: false
},
"multipart/appledouble": {
source: "iana"
},
"multipart/byteranges": {
source: "iana"
},
"multipart/digest": {
source: "iana"
},
"multipart/encrypted": {
source: "iana",
compressible: false
},
"multipart/form-data": {
source: "iana",
compressible: false
},
"multipart/header-set": {
source: "iana"
},
"multipart/mixed": {
source: "iana"
},
"multipart/multilingual": {
source: "iana"
},
"multipart/parallel": {
source: "iana"
},
"multipart/related": {
source: "iana",
compressible: false
},
"multipart/report": {
source: "iana"
},
"multipart/signed": {
source: "iana",
compressible: false
},
"multipart/vnd.bint.med-plus": {
source: "iana"
},
"multipart/voice-message": {
source: "iana"
},
"multipart/x-mixed-replace": {
source: "iana"
},
"text/1d-interleaved-parityfec": {
source: "iana"
},
"text/cache-manifest": {
source: "iana",
compressible: true,
extensions: ["appcache", "manifest"]
},
"text/calendar": {
source: "iana",
extensions: ["ics", "ifb"]
},
"text/calender": {
compressible: true
},
"text/cmd": {
compressible: true
},
"text/coffeescript": {
extensions: ["coffee", "litcoffee"]
},
"text/cql": {
source: "iana"
},
"text/cql-expression": {
source: "iana"
},
"text/cql-identifier": {
source: "iana"
},
"text/css": {
source: "iana",
charset: "UTF-8",
compressible: true,
extensions: ["css"]
},
"text/csv": {
source: "iana",
compressible: true,
extensions: ["csv"]
},
"text/csv-schema": {
source: "iana"
},
"text/directory": {
source: "iana"
},
"text/dns": {
source: "iana"
},
"text/ecmascript": {
source: "apache"
},
"text/encaprtp": {
source: "iana"
},
"text/enriched": {
source: "iana"
},
"text/fhirpath": {
source: "iana"
},
"text/flexfec": {
source: "iana"
},
"text/fwdred": {
source: "iana"
},
"text/gff3": {
source: "iana"
},
"text/grammar-ref-list": {
source: "iana"
},
"text/hl7v2": {
source: "iana"
},
"text/html": {
source: "iana",
compressible: true,
extensions: ["html", "htm", "shtml"]
},
"text/jade": {
extensions: ["jade"]
},
"text/javascript": {
source: "iana",
charset: "UTF-8",
compressible: true,
extensions: ["js", "mjs"]
},
"text/jcr-cnd": {
source: "iana"
},
"text/jsx": {
compressible: true,
extensions: ["jsx"]
},
"text/less": {
compressible: true,
extensions: ["less"]
},
"text/markdown": {
source: "iana",
compressible: true,
extensions: ["md", "markdown"]
},
"text/mathml": {
source: "nginx",
extensions: ["mml"]
},
"text/mdx": {
compressible: true,
extensions: ["mdx"]
},
"text/mizar": {
source: "iana"
},
"text/n3": {
source: "iana",
charset: "UTF-8",
compressible: true,
extensions: ["n3"]
},
"text/parameters": {
source: "iana",
charset: "UTF-8"
},
"text/parityfec": {
source: "iana"
},
"text/plain": {
source: "iana",
compressible: true,
extensions: ["txt", "text", "conf", "def", "list", "log", "in", "ini"]
},
"text/provenance-notation": {
source: "iana",
charset: "UTF-8"
},
"text/prs.fallenstein.rst": {
source: "iana"
},
"text/prs.lines.tag": {
source: "iana",
extensions: ["dsc"]
},
"text/prs.prop.logic": {
source: "iana"
},
"text/prs.texi": {
source: "iana"
},
"text/raptorfec": {
source: "iana"
},
"text/red": {
source: "iana"
},
"text/rfc822-headers": {
source: "iana"
},
"text/richtext": {
source: "iana",
compressible: true,
extensions: ["rtx"]
},
"text/rtf": {
source: "iana",
compressible: true,
extensions: ["rtf"]
},
"text/rtp-enc-aescm128": {
source: "iana"
},
"text/rtploopback": {
source: "iana"
},
"text/rtx": {
source: "iana"
},
"text/sgml": {
source: "iana",
extensions: ["sgml", "sgm"]
},
"text/shaclc": {
source: "iana"
},
"text/shex": {
source: "iana",
extensions: ["shex"]
},
"text/slim": {
extensions: ["slim", "slm"]
},
"text/spdx": {
source: "iana",
extensions: ["spdx"]
},
"text/strings": {
source: "iana"
},
"text/stylus": {
extensions: ["stylus", "styl"]
},
"text/t140": {
source: "iana"
},
"text/tab-separated-values": {
source: "iana",
compressible: true,
extensions: ["tsv"]
},
"text/troff": {
source: "iana",
extensions: ["t", "tr", "roff", "man", "me", "ms"]
},
"text/turtle": {
source: "iana",
charset: "UTF-8",
extensions: ["ttl"]
},
"text/ulpfec": {
source: "iana"
},
"text/uri-list": {
source: "iana",
compressible: true,
extensions: ["uri", "uris", "urls"]
},
"text/vcard": {
source: "iana",
compressible: true,
extensions: ["vcard"]
},
"text/vnd.a": {
source: "iana"
},
"text/vnd.abc": {
source: "iana"
},
"text/vnd.ascii-art": {
source: "iana"
},
"text/vnd.curl": {
source: "iana",
extensions: ["curl"]
},
"text/vnd.curl.dcurl": {
source: "apache",
extensions: ["dcurl"]
},
"text/vnd.curl.mcurl": {
source: "apache",
extensions: ["mcurl"]
},
"text/vnd.curl.scurl": {
source: "apache",
extensions: ["scurl"]
},
"text/vnd.debian.copyright": {
source: "iana",
charset: "UTF-8"
},
"text/vnd.dmclientscript": {
source: "iana"
},
"text/vnd.dvb.subtitle": {
source: "iana",
extensions: ["sub"]
},
"text/vnd.esmertec.theme-descriptor": {
source: "iana",
charset: "UTF-8"
},
"text/vnd.exchangeable": {
source: "iana"
},
"text/vnd.familysearch.gedcom": {
source: "iana",
extensions: ["ged"]
},
"text/vnd.ficlab.flt": {
source: "iana"
},
"text/vnd.fly": {
source: "iana",
extensions: ["fly"]
},
"text/vnd.fmi.flexstor": {
source: "iana",
extensions: ["flx"]
},
"text/vnd.gml": {
source: "iana"
},
"text/vnd.graphviz": {
source: "iana",
extensions: ["gv"]
},
"text/vnd.hans": {
source: "iana"
},
"text/vnd.hgl": {
source: "iana"
},
"text/vnd.in3d.3dml": {
source: "iana",
extensions: ["3dml"]
},
"text/vnd.in3d.spot": {
source: "iana",
extensions: ["spot"]
},
"text/vnd.iptc.newsml": {
source: "iana"
},
"text/vnd.iptc.nitf": {
source: "iana"
},
"text/vnd.latex-z": {
source: "iana"
},
"text/vnd.motorola.reflex": {
source: "iana"
},
"text/vnd.ms-mediapackage": {
source: "iana"
},
"text/vnd.net2phone.commcenter.command": {
source: "iana"
},
"text/vnd.radisys.msml-basic-layout": {
source: "iana"
},
"text/vnd.senx.warpscript": {
source: "iana"
},
"text/vnd.si.uricatalogue": {
source: "apache"
},
"text/vnd.sosi": {
source: "iana"
},
"text/vnd.sun.j2me.app-descriptor": {
source: "iana",
charset: "UTF-8",
extensions: ["jad"]
},
"text/vnd.trolltech.linguist": {
source: "iana",
charset: "UTF-8"
},
"text/vnd.vcf": {
source: "iana"
},
"text/vnd.wap.si": {
source: "iana"
},
"text/vnd.wap.sl": {
source: "iana"
},
"text/vnd.wap.wml": {
source: "iana",
extensions: ["wml"]
},
"text/vnd.wap.wmlscript": {
source: "iana",
extensions: ["wmls"]
},
"text/vnd.zoo.kcl": {
source: "iana"
},
"text/vtt": {
source: "iana",
charset: "UTF-8",
compressible: true,
extensions: ["vtt"]
},
"text/wgsl": {
source: "iana",
extensions: ["wgsl"]
},
"text/x-asm": {
source: "apache",
extensions: ["s", "asm"]
},
"text/x-c": {
source: "apache",
extensions: ["c", "cc", "cxx", "cpp", "h", "hh", "dic"]
},
"text/x-component": {
source: "nginx",
extensions: ["htc"]
},
"text/x-fortran": {
source: "apache",
extensions: ["f", "for", "f77", "f90"]
},
"text/x-gwt-rpc": {
compressible: true
},
"text/x-handlebars-template": {
extensions: ["hbs"]
},
"text/x-java-source": {
source: "apache",
extensions: ["java"]
},
"text/x-jquery-tmpl": {
compressible: true
},
"text/x-lua": {
extensions: ["lua"]
},
"text/x-markdown": {
compressible: true,
extensions: ["mkd"]
},
"text/x-nfo": {
source: "apache",
extensions: ["nfo"]
},
"text/x-opml": {
source: "apache",
extensions: ["opml"]
},
"text/x-org": {
compressible: true,
extensions: ["org"]
},
"text/x-pascal": {
source: "apache",
extensions: ["p", "pas"]
},
"text/x-processing": {
compressible: true,
extensions: ["pde"]
},
"text/x-sass": {
extensions: ["sass"]
},
"text/x-scss": {
extensions: ["scss"]
},
"text/x-setext": {
source: "apache",
extensions: ["etx"]
},
"text/x-sfv": {
source: "apache",
extensions: ["sfv"]
},
"text/x-suse-ymp": {
compressible: true,
extensions: ["ymp"]
},
"text/x-uuencode": {
source: "apache",
extensions: ["uu"]
},
"text/x-vcalendar": {
source: "apache",
extensions: ["vcs"]
},
"text/x-vcard": {
source: "apache",
extensions: ["vcf"]
},
"text/xml": {
source: "iana",
compressible: true,
extensions: ["xml"]
},
"text/xml-external-parsed-entity": {
source: "iana"
},
"text/yaml": {
compressible: true,
extensions: ["yaml", "yml"]
},
"video/1d-interleaved-parityfec": {
source: "iana"
},
"video/3gpp": {
source: "iana",
extensions: ["3gp", "3gpp"]
},
"video/3gpp-tt": {
source: "iana"
},
"video/3gpp2": {
source: "iana",
extensions: ["3g2"]
},
"video/av1": {
source: "iana"
},
"video/bmpeg": {
source: "iana"
},
"video/bt656": {
source: "iana"
},
"video/celb": {
source: "iana"
},
"video/dv": {
source: "iana"
},
"video/encaprtp": {
source: "iana"
},
"video/evc": {
source: "iana"
},
"video/ffv1": {
source: "iana"
},
"video/flexfec": {
source: "iana"
},
"video/h261": {
source: "iana",
extensions: ["h261"]
},
"video/h263": {
source: "iana",
extensions: ["h263"]
},
"video/h263-1998": {
source: "iana"
},
"video/h263-2000": {
source: "iana"
},
"video/h264": {
source: "iana",
extensions: ["h264"]
},
"video/h264-rcdo": {
source: "iana"
},
"video/h264-svc": {
source: "iana"
},
"video/h265": {
source: "iana"
},
"video/h266": {
source: "iana"
},
"video/iso.segment": {
source: "iana",
extensions: ["m4s"]
},
"video/jpeg": {
source: "iana",
extensions: ["jpgv"]
},
"video/jpeg2000": {
source: "iana"
},
"video/jpm": {
source: "apache",
extensions: ["jpm", "jpgm"]
},
"video/jxsv": {
source: "iana"
},
"video/lottie+json": {
source: "iana",
compressible: true
},
"video/matroska": {
source: "iana"
},
"video/matroska-3d": {
source: "iana"
},
"video/mj2": {
source: "iana",
extensions: ["mj2", "mjp2"]
},
"video/mp1s": {
source: "iana"
},
"video/mp2p": {
source: "iana"
},
"video/mp2t": {
source: "iana",
extensions: ["ts", "m2t", "m2ts", "mts"]
},
"video/mp4": {
source: "iana",
compressible: false,
extensions: ["mp4", "mp4v", "mpg4"]
},
"video/mp4v-es": {
source: "iana"
},
"video/mpeg": {
source: "iana",
compressible: false,
extensions: ["mpeg", "mpg", "mpe", "m1v", "m2v"]
},
"video/mpeg4-generic": {
source: "iana"
},
"video/mpv": {
source: "iana"
},
"video/nv": {
source: "iana"
},
"video/ogg": {
source: "iana",
compressible: false,
extensions: ["ogv"]
},
"video/parityfec": {
source: "iana"
},
"video/pointer": {
source: "iana"
},
"video/quicktime": {
source: "iana",
compressible: false,
extensions: ["qt", "mov"]
},
"video/raptorfec": {
source: "iana"
},
"video/raw": {
source: "iana"
},
"video/rtp-enc-aescm128": {
source: "iana"
},
"video/rtploopback": {
source: "iana"
},
"video/rtx": {
source: "iana"
},
"video/scip": {
source: "iana"
},
"video/smpte291": {
source: "iana"
},
"video/smpte292m": {
source: "iana"
},
"video/ulpfec": {
source: "iana"
},
"video/vc1": {
source: "iana"
},
"video/vc2": {
source: "iana"
},
"video/vnd.cctv": {
source: "iana"
},
"video/vnd.dece.hd": {
source: "iana",
extensions: ["uvh", "uvvh"]
},
"video/vnd.dece.mobile": {
source: "iana",
extensions: ["uvm", "uvvm"]
},
"video/vnd.dece.mp4": {
source: "iana"
},
"video/vnd.dece.pd": {
source: "iana",
extensions: ["uvp", "uvvp"]
},
"video/vnd.dece.sd": {
source: "iana",
extensions: ["uvs", "uvvs"]
},
"video/vnd.dece.video": {
source: "iana",
extensions: ["uvv", "uvvv"]
},
"video/vnd.directv.mpeg": {
source: "iana"
},
"video/vnd.directv.mpeg-tts": {
source: "iana"
},
"video/vnd.dlna.mpeg-tts": {
source: "iana"
},
"video/vnd.dvb.file": {
source: "iana",
extensions: ["dvb"]
},
"video/vnd.fvt": {
source: "iana",
extensions: ["fvt"]
},
"video/vnd.hns.video": {
source: "iana"
},
"video/vnd.iptvforum.1dparityfec-1010": {
source: "iana"
},
"video/vnd.iptvforum.1dparityfec-2005": {
source: "iana"
},
"video/vnd.iptvforum.2dparityfec-1010": {
source: "iana"
},
"video/vnd.iptvforum.2dparityfec-2005": {
source: "iana"
},
"video/vnd.iptvforum.ttsavc": {
source: "iana"
},
"video/vnd.iptvforum.ttsmpeg2": {
source: "iana"
},
"video/vnd.motorola.video": {
source: "iana"
},
"video/vnd.motorola.videop": {
source: "iana"
},
"video/vnd.mpegurl": {
source: "iana",
extensions: ["mxu", "m4u"]
},
"video/vnd.ms-playready.media.pyv": {
source: "iana",
extensions: ["pyv"]
},
"video/vnd.nokia.interleaved-multimedia": {
source: "iana"
},
"video/vnd.nokia.mp4vr": {
source: "iana"
},
"video/vnd.nokia.videovoip": {
source: "iana"
},
"video/vnd.objectvideo": {
source: "iana"
},
"video/vnd.planar": {
source: "iana"
},
"video/vnd.radgamettools.bink": {
source: "iana"
},
"video/vnd.radgamettools.smacker": {
source: "apache"
},
"video/vnd.sealed.mpeg1": {
source: "iana"
},
"video/vnd.sealed.mpeg4": {
source: "iana"
},
"video/vnd.sealed.swf": {
source: "iana"
},
"video/vnd.sealedmedia.softseal.mov": {
source: "iana"
},
"video/vnd.uvvu.mp4": {
source: "iana",
extensions: ["uvu", "uvvu"]
},
"video/vnd.vivo": {
source: "iana",
extensions: ["viv"]
},
"video/vnd.youtube.yt": {
source: "iana"
},
"video/vp8": {
source: "iana"
},
"video/vp9": {
source: "iana"
},
"video/webm": {
source: "apache",
compressible: false,
extensions: ["webm"]
},
"video/x-f4v": {
source: "apache",
extensions: ["f4v"]
},
"video/x-fli": {
source: "apache",
extensions: ["fli"]
},
"video/x-flv": {
source: "apache",
compressible: false,
extensions: ["flv"]
},
"video/x-m4v": {
source: "apache",
extensions: ["m4v"]
},
"video/x-matroska": {
source: "apache",
compressible: false,
extensions: ["mkv", "mk3d", "mks"]
},
"video/x-mng": {
source: "apache",
extensions: ["mng"]
},
"video/x-ms-asf": {
source: "apache",
extensions: ["asf", "asx"]
},
"video/x-ms-vob": {
source: "apache",
extensions: ["vob"]
},
"video/x-ms-wm": {
source: "apache",
extensions: ["wm"]
},
"video/x-ms-wmv": {
source: "apache",
compressible: false,
extensions: ["wmv"]
},
"video/x-ms-wmx": {
source: "apache",
extensions: ["wmx"]
},
"video/x-ms-wvx": {
source: "apache",
extensions: ["wvx"]
},
"video/x-msvideo": {
source: "apache",
extensions: ["avi"]
},
"video/x-sgi-movie": {
source: "apache",
extensions: ["movie"]
},
"video/x-smv": {
source: "apache",
extensions: ["smv"]
},
"x-conference/x-cooltalk": {
source: "apache",
extensions: ["ice"]
},
"x-shader/x-fragment": {
compressible: true
},
"x-shader/x-vertex": {
compressible: true
}
};
}
});
var require_mime_db3 = __commonJS2({
"node_modules/accepts/node_modules/mime-db/index.js"(exports2, module2) {
module2.exports = require_db3();
}
});
var require_mimeScore3 = __commonJS2({
"node_modules/accepts/node_modules/mime-types/mimeScore.js"(exports2, module2) {
var FACET_SCORES = {
"prs.": 100,
"x-": 200,
"x.": 300,
"vnd.": 400,
default: 900
};
var SOURCE_SCORES = {
nginx: 10,
apache: 20,
iana: 40,
default: 30
// definitions added by `jshttp/mime-db` project?
};
var TYPE_SCORES = {
// prefer application/xml over text/xml
// prefer application/rtf over text/rtf
application: 1,
// prefer font/woff over application/font-woff
font: 2,
default: 0
};
module2.exports = function mimeScore(mimeType, source = "default") {
if (mimeType === "application/octet-stream") {
return 0;
}
const [type, subtype] = mimeType.split("/");
const facet = subtype.replace(/(\.|x-).*/, "$1");
const facetScore = FACET_SCORES[facet] || FACET_SCORES.default;
const sourceScore = SOURCE_SCORES[source] || SOURCE_SCORES.default;
const typeScore = TYPE_SCORES[type] || TYPE_SCORES.default;
const lengthScore = 1 - mimeType.length / 100;
return facetScore + sourceScore + typeScore + lengthScore;
};
}
});
var require_mime_types3 = __commonJS2({
"node_modules/accepts/node_modules/mime-types/index.js"(exports2) {
"use strict";
var db = require_mime_db3();
var extname = require("path").extname;
var mimeScore = require_mimeScore3();
var EXTRACT_TYPE_REGEXP = /^\s*([^;\s]*)(?:;|\s|$)/;
var TEXT_TYPE_REGEXP = /^text\//i;
exports2.charset = charset;
exports2.charsets = { lookup: charset };
exports2.contentType = contentType2;
exports2.extension = extension;
exports2.extensions = /* @__PURE__ */ Object.create(null);
exports2.lookup = lookup;
exports2.types = /* @__PURE__ */ Object.create(null);
exports2._extensionConflicts = [];
populateMaps(exports2.extensions, exports2.types);
function charset(type) {
if (!type || typeof type !== "string") {
return false;
}
var match = EXTRACT_TYPE_REGEXP.exec(type);
var mime = match && db[match[1].toLowerCase()];
if (mime && mime.charset) {
return mime.charset;
}
if (match && TEXT_TYPE_REGEXP.test(match[1])) {
return "UTF-8";
}
return false;
}
function contentType2(str) {
if (!str || typeof str !== "string") {
return false;
}
var mime = str.indexOf("/") === -1 ? exports2.lookup(str) : str;
if (!mime) {
return false;
}
if (mime.indexOf("charset") === -1) {
var charset2 = exports2.charset(mime);
if (charset2) mime += "; charset=" + charset2.toLowerCase();
}
return mime;
}
function extension(type) {
if (!type || typeof type !== "string") {
return false;
}
var match = EXTRACT_TYPE_REGEXP.exec(type);
var exts = match && exports2.extensions[match[1].toLowerCase()];
if (!exts || !exts.length) {
return false;
}
return exts[0];
}
function lookup(path) {
if (!path || typeof path !== "string") {
return false;
}
var extension2 = extname("x." + path).toLowerCase().slice(1);
if (!extension2) {
return false;
}
return exports2.types[extension2] || false;
}
function populateMaps(extensions, types) {
Object.keys(db).forEach(function forEachMimeType(type) {
var mime = db[type];
var exts = mime.extensions;
if (!exts || !exts.length) {
return;
}
extensions[type] = exts;
for (var i = 0; i < exts.length; i++) {
var extension2 = exts[i];
types[extension2] = _preferredType(extension2, types[extension2], type);
const legacyType = _preferredTypeLegacy(
extension2,
types[extension2],
type
);
if (legacyType !== types[extension2]) {
exports2._extensionConflicts.push([extension2, legacyType, types[extension2]]);
}
}
});
}
function _preferredType(ext, type0, type1) {
var score0 = type0 ? mimeScore(type0, db[type0].source) : 0;
var score1 = type1 ? mimeScore(type1, db[type1].source) : 0;
return score0 > score1 ? type0 : type1;
}
function _preferredTypeLegacy(ext, type0, type1) {
var SOURCE_RANK = ["nginx", "apache", void 0, "iana"];
var score0 = type0 ? SOURCE_RANK.indexOf(db[type0].source) : 0;
var score1 = type1 ? SOURCE_RANK.indexOf(db[type1].source) : 0;
if (exports2.types[extension] !== "application/octet-stream" && (score0 > score1 || score0 === score1 && exports2.types[extension]?.slice(0, 12) === "application/")) {
return type0;
}
return score0 > score1 ? type0 : type1;
}
}
});
var require_accepts = __commonJS2({
"node_modules/accepts/index.js"(exports2, module2) {
"use strict";
var Negotiator = require_negotiator();
var mime = require_mime_types3();
module2.exports = Accepts;
function Accepts(req) {
if (!(this instanceof Accepts)) {
return new Accepts(req);
}
this.headers = req.headers;
this.negotiator = new Negotiator(req);
}
Accepts.prototype.type = Accepts.prototype.types = function(types_) {
var types = types_;
if (types && !Array.isArray(types)) {
types = new Array(arguments.length);
for (var i = 0; i < types.length; i++) {
types[i] = arguments[i];
}
}
if (!types || types.length === 0) {
return this.negotiator.mediaTypes();
}
if (!this.headers.accept) {
return types[0];
}
var mimes = types.map(extToMime);
var accepts = this.negotiator.mediaTypes(mimes.filter(validMime));
var first2 = accepts[0];
return first2 ? types[mimes.indexOf(first2)] : false;
};
Accepts.prototype.encoding = Accepts.prototype.encodings = function(encodings_) {
var encodings = encodings_;
if (encodings && !Array.isArray(encodings)) {
encodings = new Array(arguments.length);
for (var i = 0; i < encodings.length; i++) {
encodings[i] = arguments[i];
}
}
if (!encodings || encodings.length === 0) {
return this.negotiator.encodings();
}
return this.negotiator.encodings(encodings)[0] || false;
};
Accepts.prototype.charset = Accepts.prototype.charsets = function(charsets_) {
var charsets = charsets_;
if (charsets && !Array.isArray(charsets)) {
charsets = new Array(arguments.length);
for (var i = 0; i < charsets.length; i++) {
charsets[i] = arguments[i];
}
}
if (!charsets || charsets.length === 0) {
return this.negotiator.charsets();
}
return this.negotiator.charsets(charsets)[0] || false;
};
Accepts.prototype.lang = Accepts.prototype.langs = Accepts.prototype.language = Accepts.prototype.languages = function(languages_) {
var languages = languages_;
if (languages && !Array.isArray(languages)) {
languages = new Array(arguments.length);
for (var i = 0; i < languages.length; i++) {
languages[i] = arguments[i];
}
}
if (!languages || languages.length === 0) {
return this.negotiator.languages();
}
return this.negotiator.languages(languages)[0] || false;
};
function extToMime(type) {
return type.indexOf("/") === -1 ? mime.lookup(type) : type;
}
function validMime(type) {
return typeof type === "string";
}
}
});
var require_fresh = __commonJS2({
"node_modules/fresh/index.js"(exports2, module2) {
"use strict";
var CACHE_CONTROL_NO_CACHE_REGEXP = /(?:^|,)\s*?no-cache\s*?(?:,|$)/;
module2.exports = fresh;
function fresh(reqHeaders, resHeaders) {
var modifiedSince = reqHeaders["if-modified-since"];
var noneMatch = reqHeaders["if-none-match"];
if (!modifiedSince && !noneMatch) {
return false;
}
var cacheControl = reqHeaders["cache-control"];
if (cacheControl && CACHE_CONTROL_NO_CACHE_REGEXP.test(cacheControl)) {
return false;
}
if (noneMatch) {
if (noneMatch === "*") {
return true;
}
var etag = resHeaders.etag;
if (!etag) {
return false;
}
var matches = parseTokenList(noneMatch);
for (var i = 0; i < matches.length; i++) {
var match = matches[i];
if (match === etag || match === "W/" + etag || "W/" + match === etag) {
return true;
}
}
return false;
}
if (modifiedSince) {
var lastModified = resHeaders["last-modified"];
var modifiedStale = !lastModified || !(parseHttpDate(lastModified) <= parseHttpDate(modifiedSince));
if (modifiedStale) {
return false;
}
}
return true;
}
function parseHttpDate(date) {
var timestamp = date && Date.parse(date);
return typeof timestamp === "number" ? timestamp : NaN;
}
function parseTokenList(str) {
var end2 = 0;
var list = [];
var start = 0;
for (var i = 0, len = str.length; i < len; i++) {
switch (str.charCodeAt(i)) {
case 32:
if (start === end2) {
start = end2 = i + 1;
}
break;
case 44:
list.push(str.substring(start, end2));
start = end2 = i + 1;
break;
default:
end2 = i + 1;
break;
}
}
list.push(str.substring(start, end2));
return list;
}
}
});
var require_range_parser = __commonJS2({
"node_modules/range-parser/index.js"(exports2, module2) {
"use strict";
module2.exports = rangeParser;
function rangeParser(size, str, options) {
if (typeof str !== "string") {
throw new TypeError("argument str must be a string");
}
var index2 = str.indexOf("=");
if (index2 === -1) {
return -2;
}
var arr = str.slice(index2 + 1).split(",");
var ranges = [];
ranges.type = str.slice(0, index2);
for (var i = 0; i < arr.length; i++) {
var range = arr[i].split("-");
var start = parseInt(range[0], 10);
var end2 = parseInt(range[1], 10);
if (isNaN(start)) {
start = size - end2;
end2 = size - 1;
} else if (isNaN(end2)) {
end2 = size - 1;
}
if (end2 > size - 1) {
end2 = size - 1;
}
if (isNaN(start) || isNaN(end2) || start > end2 || start < 0) {
continue;
}
ranges.push({
start,
end: end2
});
}
if (ranges.length < 1) {
return -1;
}
return options && options.combine ? combineRanges(ranges) : ranges;
}
function combineRanges(ranges) {
var ordered = ranges.map(mapWithIndex).sort(sortByRangeStart);
for (var j = 0, i = 1; i < ordered.length; i++) {
var range = ordered[i];
var current = ordered[j];
if (range.start > current.end + 1) {
ordered[++j] = range;
} else if (range.end > current.end) {
current.end = range.end;
current.index = Math.min(current.index, range.index);
}
}
ordered.length = j + 1;
var combined = ordered.sort(sortByRangeIndex).map(mapWithoutIndex);
combined.type = ranges.type;
return combined;
}
function mapWithIndex(range, index2) {
return {
start: range.start,
end: range.end,
index: index2
};
}
function mapWithoutIndex(range) {
return {
start: range.start,
end: range.end
};
}
function sortByRangeIndex(a, b) {
return a.index - b.index;
}
function sortByRangeStart(a, b) {
return a.start - b.start;
}
}
});
var require_request3 = __commonJS2({
"node_modules/express/lib/request.js"(exports2, module2) {
"use strict";
var accepts = require_accepts();
var isIP = require("node:net").isIP;
var typeis = require_type_is();
var http2 = require("node:http");
var fresh = require_fresh();
var parseRange = require_range_parser();
var parse8 = require_parseurl();
var proxyaddr = require_proxy_addr();
var req = Object.create(http2.IncomingMessage.prototype);
module2.exports = req;
req.get = req.header = function header(name) {
if (!name) {
throw new TypeError("name argument is required to req.get");
}
if (typeof name !== "string") {
throw new TypeError("name must be a string to req.get");
}
var lc = name.toLowerCase();
switch (lc) {
case "referer":
case "referrer":
return this.headers.referrer || this.headers.referer;
default:
return this.headers[lc];
}
};
req.accepts = function() {
var accept = accepts(this);
return accept.types.apply(accept, arguments);
};
req.acceptsEncodings = function() {
var accept = accepts(this);
return accept.encodings.apply(accept, arguments);
};
req.acceptsCharsets = function() {
var accept = accepts(this);
return accept.charsets.apply(accept, arguments);
};
req.acceptsLanguages = function() {
var accept = accepts(this);
return accept.languages.apply(accept, arguments);
};
req.range = function range(size, options) {
var range2 = this.get("Range");
if (!range2) return;
return parseRange(size, range2, options);
};
defineGetter(req, "query", function query() {
var queryparse = this.app.get("query parser fn");
if (!queryparse) {
return /* @__PURE__ */ Object.create(null);
}
var querystring = parse8(this).query;
return queryparse(querystring);
});
req.is = function is4(types) {
var arr = types;
if (!Array.isArray(types)) {
arr = new Array(arguments.length);
for (var i = 0; i < arr.length; i++) {
arr[i] = arguments[i];
}
}
return typeis(this, arr);
};
defineGetter(req, "protocol", function protocol() {
var proto = this.connection.encrypted ? "https" : "http";
var trust = this.app.get("trust proxy fn");
if (!trust(this.connection.remoteAddress, 0)) {
return proto;
}
var header = this.get("X-Forwarded-Proto") || proto;
var index2 = header.indexOf(",");
return index2 !== -1 ? header.substring(0, index2).trim() : header.trim();
});
defineGetter(req, "secure", function secure() {
return this.protocol === "https";
});
defineGetter(req, "ip", function ip() {
var trust = this.app.get("trust proxy fn");
return proxyaddr(this, trust);
});
defineGetter(req, "ips", function ips() {
var trust = this.app.get("trust proxy fn");
var addrs = proxyaddr.all(this, trust);
addrs.reverse().pop();
return addrs;
});
defineGetter(req, "subdomains", function subdomains() {
var hostname = this.hostname;
if (!hostname) return [];
var offset = this.app.get("subdomain offset");
var subdomains2 = !isIP(hostname) ? hostname.split(".").reverse() : [hostname];
return subdomains2.slice(offset);
});
defineGetter(req, "path", function path() {
return parse8(this).pathname;
});
defineGetter(req, "host", function host() {
var trust = this.app.get("trust proxy fn");
var val2 = this.get("X-Forwarded-Host");
if (!val2 || !trust(this.connection.remoteAddress, 0)) {
val2 = this.get("Host");
} else if (val2.indexOf(",") !== -1) {
val2 = val2.substring(0, val2.indexOf(",")).trimRight();
}
return val2 || void 0;
});
defineGetter(req, "hostname", function hostname() {
var host = this.host;
if (!host) return;
var offset = host[0] === "[" ? host.indexOf("]") + 1 : 0;
var index2 = host.indexOf(":", offset);
return index2 !== -1 ? host.substring(0, index2) : host;
});
defineGetter(req, "fresh", function() {
var method = this.method;
var res = this.res;
var status = res.statusCode;
if ("GET" !== method && "HEAD" !== method) return false;
if (status >= 200 && status < 300 || 304 === status) {
return fresh(this.headers, {
"etag": res.get("ETag"),
"last-modified": res.get("Last-Modified")
});
}
return false;
});
defineGetter(req, "stale", function stale() {
return !this.fresh;
});
defineGetter(req, "xhr", function xhr() {
var val2 = this.get("X-Requested-With") || "";
return val2.toLowerCase() === "xmlhttprequest";
});
function defineGetter(obj, name, getter) {
Object.defineProperty(obj, name, {
configurable: true,
enumerable: true,
get: getter
});
}
}
});
var require_safe_buffer = __commonJS2({
"node_modules/safe-buffer/index.js"(exports2, module2) {
var buffer = require("buffer");
var Buffer2 = buffer.Buffer;
function copyProps(src, dst) {
for (var key in src) {
dst[key] = src[key];
}
}
if (Buffer2.from && Buffer2.alloc && Buffer2.allocUnsafe && Buffer2.allocUnsafeSlow) {
module2.exports = buffer;
} else {
copyProps(buffer, exports2);
exports2.Buffer = SafeBuffer;
}
function SafeBuffer(arg, encodingOrOffset, length) {
return Buffer2(arg, encodingOrOffset, length);
}
SafeBuffer.prototype = Object.create(Buffer2.prototype);
copyProps(Buffer2, SafeBuffer);
SafeBuffer.from = function(arg, encodingOrOffset, length) {
if (typeof arg === "number") {
throw new TypeError("Argument must not be a number");
}
return Buffer2(arg, encodingOrOffset, length);
};
SafeBuffer.alloc = function(size, fill, encoding) {
if (typeof size !== "number") {
throw new TypeError("Argument must be a number");
}
var buf = Buffer2(size);
if (fill !== void 0) {
if (typeof encoding === "string") {
buf.fill(fill, encoding);
} else {
buf.fill(fill);
}
} else {
buf.fill(0);
}
return buf;
};
SafeBuffer.allocUnsafe = function(size) {
if (typeof size !== "number") {
throw new TypeError("Argument must be a number");
}
return Buffer2(size);
};
SafeBuffer.allocUnsafeSlow = function(size) {
if (typeof size !== "number") {
throw new TypeError("Argument must be a number");
}
return buffer.SlowBuffer(size);
};
}
});
var require_content_disposition = __commonJS2({
"node_modules/content-disposition/index.js"(exports2, module2) {
"use strict";
module2.exports = contentDisposition;
module2.exports.parse = parse8;
var basename = require("path").basename;
var Buffer2 = require_safe_buffer().Buffer;
var ENCODE_URL_ATTR_CHAR_REGEXP = /[\x00-\x20"'()*,/:;<=>?@[\\\]{}\x7f]/g;
var HEX_ESCAPE_REGEXP = /%[0-9A-Fa-f]{2}/;
var HEX_ESCAPE_REPLACE_REGEXP = /%([0-9A-Fa-f]{2})/g;
var NON_LATIN1_REGEXP = /[^\x20-\x7e\xa0-\xff]/g;
var QESC_REGEXP = /\\([\u0000-\u007f])/g;
var QUOTE_REGEXP = /([\\"])/g;
var PARAM_REGEXP = /;[\x09\x20]*([!#$%&'*+.0-9A-Z^_`a-z|~-]+)[\x09\x20]*=[\x09\x20]*("(?:[\x20!\x23-\x5b\x5d-\x7e\x80-\xff]|\\[\x20-\x7e])*"|[!#$%&'*+.0-9A-Z^_`a-z|~-]+)[\x09\x20]*/g;
var TEXT_REGEXP = /^[\x20-\x7e\x80-\xff]+$/;
var TOKEN_REGEXP = /^[!#$%&'*+.0-9A-Z^_`a-z|~-]+$/;
var EXT_VALUE_REGEXP = /^([A-Za-z0-9!#$%&+\-^_`{}~]+)'(?:[A-Za-z]{2,3}(?:-[A-Za-z]{3}){0,3}|[A-Za-z]{4,8}|)'((?:%[0-9A-Fa-f]{2}|[A-Za-z0-9!#$&+.^_`|~-])+)$/;
var DISPOSITION_TYPE_REGEXP = /^([!#$%&'*+.0-9A-Z^_`a-z|~-]+)[\x09\x20]*(?:$|;)/;
function contentDisposition(filename, options) {
var opts = options || {};
var type = opts.type || "attachment";
var params = createparams(filename, opts.fallback);
return format(new ContentDisposition(type, params));
}
function createparams(filename, fallback) {
if (filename === void 0) {
return;
}
var params = {};
if (typeof filename !== "string") {
throw new TypeError("filename must be a string");
}
if (fallback === void 0) {
fallback = true;
}
if (typeof fallback !== "string" && typeof fallback !== "boolean") {
throw new TypeError("fallback must be a string or boolean");
}
if (typeof fallback === "string" && NON_LATIN1_REGEXP.test(fallback)) {
throw new TypeError("fallback must be ISO-8859-1 string");
}
var name = basename(filename);
var isQuotedString = TEXT_REGEXP.test(name);
var fallbackName = typeof fallback !== "string" ? fallback && getlatin1(name) : basename(fallback);
var hasFallback = typeof fallbackName === "string" && fallbackName !== name;
if (hasFallback || !isQuotedString || HEX_ESCAPE_REGEXP.test(name)) {
params["filename*"] = name;
}
if (isQuotedString || hasFallback) {
params.filename = hasFallback ? fallbackName : name;
}
return params;
}
function format(obj) {
var parameters = obj.parameters;
var type = obj.type;
if (!type || typeof type !== "string" || !TOKEN_REGEXP.test(type)) {
throw new TypeError("invalid type");
}
var string = String(type).toLowerCase();
if (parameters && typeof parameters === "object") {
var param;
var params = Object.keys(parameters).sort();
for (var i = 0; i < params.length; i++) {
param = params[i];
var val2 = param.slice(-1) === "*" ? ustring(parameters[param]) : qstring(parameters[param]);
string += "; " + param + "=" + val2;
}
}
return string;
}
function decodefield(str) {
var match = EXT_VALUE_REGEXP.exec(str);
if (!match) {
throw new TypeError("invalid extended field value");
}
var charset = match[1].toLowerCase();
var encoded = match[2];
var value;
var binary = encoded.replace(HEX_ESCAPE_REPLACE_REGEXP, pdecode);
switch (charset) {
case "iso-8859-1":
value = getlatin1(binary);
break;
case "utf-8":
case "utf8":
value = Buffer2.from(binary, "binary").toString("utf8");
break;
default:
throw new TypeError("unsupported charset in extended field");
}
return value;
}
function getlatin1(val2) {
return String(val2).replace(NON_LATIN1_REGEXP, "?");
}
function parse8(string) {
if (!string || typeof string !== "string") {
throw new TypeError("argument string is required");
}
var match = DISPOSITION_TYPE_REGEXP.exec(string);
if (!match) {
throw new TypeError("invalid type format");
}
var index2 = match[0].length;
var type = match[1].toLowerCase();
var key;
var names = [];
var params = {};
var value;
index2 = PARAM_REGEXP.lastIndex = match[0].slice(-1) === ";" ? index2 - 1 : index2;
while (match = PARAM_REGEXP.exec(string)) {
if (match.index !== index2) {
throw new TypeError("invalid parameter format");
}
index2 += match[0].length;
key = match[1].toLowerCase();
value = match[2];
if (names.indexOf(key) !== -1) {
throw new TypeError("invalid duplicate parameter");
}
names.push(key);
if (key.indexOf("*") + 1 === key.length) {
key = key.slice(0, -1);
value = decodefield(value);
params[key] = value;
continue;
}
if (typeof params[key] === "string") {
continue;
}
if (value[0] === '"') {
value = value.slice(1, -1).replace(QESC_REGEXP, "$1");
}
params[key] = value;
}
if (index2 !== -1 && index2 !== string.length) {
throw new TypeError("invalid parameter format");
}
return new ContentDisposition(type, params);
}
function pdecode(str, hex) {
return String.fromCharCode(parseInt(hex, 16));
}
function pencode(char) {
return "%" + String(char).charCodeAt(0).toString(16).toUpperCase();
}
function qstring(val2) {
var str = String(val2);
return '"' + str.replace(QUOTE_REGEXP, "\\$1") + '"';
}
function ustring(val2) {
var str = String(val2);
var encoded = encodeURIComponent(str).replace(ENCODE_URL_ATTR_CHAR_REGEXP, pencode);
return "UTF-8''" + encoded;
}
function ContentDisposition(type, parameters) {
this.type = type;
this.parameters = parameters;
}
}
});
var require_cookie_signature = __commonJS2({
"node_modules/cookie-signature/index.js"(exports2) {
var crypto4 = require("crypto");
exports2.sign = function(val2, secret) {
if ("string" != typeof val2) throw new TypeError("Cookie value must be provided as a string.");
if (null == secret) throw new TypeError("Secret key must be provided.");
return val2 + "." + crypto4.createHmac("sha256", secret).update(val2).digest("base64").replace(/\=+$/, "");
};
exports2.unsign = function(input, secret) {
if ("string" != typeof input) throw new TypeError("Signed cookie string must be provided.");
if (null == secret) throw new TypeError("Secret key must be provided.");
var tentativeValue = input.slice(0, input.lastIndexOf(".")), expectedInput = exports2.sign(tentativeValue, secret), expectedBuffer = Buffer.from(expectedInput), inputBuffer = Buffer.from(input);
return expectedBuffer.length === inputBuffer.length && crypto4.timingSafeEqual(expectedBuffer, inputBuffer) ? tentativeValue : false;
};
}
});
var require_cookie = __commonJS2({
"node_modules/cookie/index.js"(exports2) {
"use strict";
exports2.parse = parse8;
exports2.serialize = serialize3;
var __toString = Object.prototype.toString;
var cookieNameRegExp = /^[!#$%&'*+\-.^_`|~0-9A-Za-z]+$/;
var cookieValueRegExp = /^("?)[\u0021\u0023-\u002B\u002D-\u003A\u003C-\u005B\u005D-\u007E]*\1$/;
var domainValueRegExp = /^([.]?[a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?)([.][a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?)*$/i;
var pathValueRegExp = /^[\u0020-\u003A\u003D-\u007E]*$/;
function parse8(str, opt) {
if (typeof str !== "string") {
throw new TypeError("argument str must be a string");
}
var obj = {};
var len = str.length;
if (len < 2) return obj;
var dec = opt && opt.decode || decode;
var index2 = 0;
var eqIdx = 0;
var endIdx = 0;
do {
eqIdx = str.indexOf("=", index2);
if (eqIdx === -1) break;
endIdx = str.indexOf(";", index2);
if (endIdx === -1) {
endIdx = len;
} else if (eqIdx > endIdx) {
index2 = str.lastIndexOf(";", eqIdx - 1) + 1;
continue;
}
var keyStartIdx = startIndex(str, index2, eqIdx);
var keyEndIdx = endIndex(str, eqIdx, keyStartIdx);
var key = str.slice(keyStartIdx, keyEndIdx);
if (!obj.hasOwnProperty(key)) {
var valStartIdx = startIndex(str, eqIdx + 1, endIdx);
var valEndIdx = endIndex(str, endIdx, valStartIdx);
if (str.charCodeAt(valStartIdx) === 34 && str.charCodeAt(valEndIdx - 1) === 34) {
valStartIdx++;
valEndIdx--;
}
var val2 = str.slice(valStartIdx, valEndIdx);
obj[key] = tryDecode(val2, dec);
}
index2 = endIdx + 1;
} while (index2 < len);
return obj;
}
function startIndex(str, index2, max) {
do {
var code = str.charCodeAt(index2);
if (code !== 32 && code !== 9) return index2;
} while (++index2 < max);
return max;
}
function endIndex(str, index2, min) {
while (index2 > min) {
var code = str.charCodeAt(--index2);
if (code !== 32 && code !== 9) return index2 + 1;
}
return min;
}
function serialize3(name, val2, opt) {
var enc = opt && opt.encode || encodeURIComponent;
if (typeof enc !== "function") {
throw new TypeError("option encode is invalid");
}
if (!cookieNameRegExp.test(name)) {
throw new TypeError("argument name is invalid");
}
var value = enc(val2);
if (!cookieValueRegExp.test(value)) {
throw new TypeError("argument val is invalid");
}
var str = name + "=" + value;
if (!opt) return str;
if (null != opt.maxAge) {
var maxAge = Math.floor(opt.maxAge);
if (!isFinite(maxAge)) {
throw new TypeError("option maxAge is invalid");
}
str += "; Max-Age=" + maxAge;
}
if (opt.domain) {
if (!domainValueRegExp.test(opt.domain)) {
throw new TypeError("option domain is invalid");
}
str += "; Domain=" + opt.domain;
}
if (opt.path) {
if (!pathValueRegExp.test(opt.path)) {
throw new TypeError("option path is invalid");
}
str += "; Path=" + opt.path;
}
if (opt.expires) {
var expires = opt.expires;
if (!isDate2(expires) || isNaN(expires.valueOf())) {
throw new TypeError("option expires is invalid");
}
str += "; Expires=" + expires.toUTCString();
}
if (opt.httpOnly) {
str += "; HttpOnly";
}
if (opt.secure) {
str += "; Secure";
}
if (opt.partitioned) {
str += "; Partitioned";
}
if (opt.priority) {
var priority = typeof opt.priority === "string" ? opt.priority.toLowerCase() : opt.priority;
switch (priority) {
case "low":
str += "; Priority=Low";
break;
case "medium":
str += "; Priority=Medium";
break;
case "high":
str += "; Priority=High";
break;
default:
throw new TypeError("option priority is invalid");
}
}
if (opt.sameSite) {
var sameSite = typeof opt.sameSite === "string" ? opt.sameSite.toLowerCase() : opt.sameSite;
switch (sameSite) {
case true:
str += "; SameSite=Strict";
break;
case "lax":
str += "; SameSite=Lax";
break;
case "strict":
str += "; SameSite=Strict";
break;
case "none":
str += "; SameSite=None";
break;
default:
throw new TypeError("option sameSite is invalid");
}
}
return str;
}
function decode(str) {
return str.indexOf("%") !== -1 ? decodeURIComponent(str) : str;
}
function isDate2(val2) {
return __toString.call(val2) === "[object Date]";
}
function tryDecode(str, decode2) {
try {
return decode2(str);
} catch (e) {
return str;
}
}
}
});
var require_db4 = __commonJS2({
"node_modules/send/node_modules/mime-db/db.json"(exports2, module2) {
module2.exports = {
"application/1d-interleaved-parityfec": {
source: "iana"
},
"application/3gpdash-qoe-report+xml": {
source: "iana",
charset: "UTF-8",
compressible: true
},
"application/3gpp-ims+xml": {
source: "iana",
compressible: true
},
"application/3gpphal+json": {
source: "iana",
compressible: true
},
"application/3gpphalforms+json": {
source: "iana",
compressible: true
},
"application/a2l": {
source: "iana"
},
"application/ace+cbor": {
source: "iana"
},
"application/ace+json": {
source: "iana",
compressible: true
},
"application/ace-groupcomm+cbor": {
source: "iana"
},
"application/ace-trl+cbor": {
source: "iana"
},
"application/activemessage": {
source: "iana"
},
"application/activity+json": {
source: "iana",
compressible: true
},
"application/aif+cbor": {
source: "iana"
},
"application/aif+json": {
source: "iana",
compressible: true
},
"application/alto-cdni+json": {
source: "iana",
compressible: true
},
"application/alto-cdnifilter+json": {
source: "iana",
compressible: true
},
"application/alto-costmap+json": {
source: "iana",
compressible: true
},
"application/alto-costmapfilter+json": {
source: "iana",
compressible: true
},
"application/alto-directory+json": {
source: "iana",
compressible: true
},
"application/alto-endpointcost+json": {
source: "iana",
compressible: true
},
"application/alto-endpointcostparams+json": {
source: "iana",
compressible: true
},
"application/alto-endpointprop+json": {
source: "iana",
compressible: true
},
"application/alto-endpointpropparams+json": {
source: "iana",
compressible: true
},
"application/alto-error+json": {
source: "iana",
compressible: true
},
"application/alto-networkmap+json": {
source: "iana",
compressible: true
},
"application/alto-networkmapfilter+json": {
source: "iana",
compressible: true
},
"application/alto-propmap+json": {
source: "iana",
compressible: true
},
"application/alto-propmapparams+json": {
source: "iana",
compressible: true
},
"application/alto-tips+json": {
source: "iana",
compressible: true
},
"application/alto-tipsparams+json": {
source: "iana",
compressible: true
},
"application/alto-updatestreamcontrol+json": {
source: "iana",
compressible: true
},
"application/alto-updatestreamparams+json": {
source: "iana",
compressible: true
},
"application/aml": {
source: "iana"
},
"application/andrew-inset": {
source: "iana",
extensions: ["ez"]
},
"application/appinstaller": {
compressible: false,
extensions: ["appinstaller"]
},
"application/applefile": {
source: "iana"
},
"application/applixware": {
source: "apache",
extensions: ["aw"]
},
"application/appx": {
compressible: false,
extensions: ["appx"]
},
"application/appxbundle": {
compressible: false,
extensions: ["appxbundle"]
},
"application/at+jwt": {
source: "iana"
},
"application/atf": {
source: "iana"
},
"application/atfx": {
source: "iana"
},
"application/atom+xml": {
source: "iana",
compressible: true,
extensions: ["atom"]
},
"application/atomcat+xml": {
source: "iana",
compressible: true,
extensions: ["atomcat"]
},
"application/atomdeleted+xml": {
source: "iana",
compressible: true,
extensions: ["atomdeleted"]
},
"application/atomicmail": {
source: "iana"
},
"application/atomsvc+xml": {
source: "iana",
compressible: true,
extensions: ["atomsvc"]
},
"application/atsc-dwd+xml": {
source: "iana",
compressible: true,
extensions: ["dwd"]
},
"application/atsc-dynamic-event-message": {
source: "iana"
},
"application/atsc-held+xml": {
source: "iana",
compressible: true,
extensions: ["held"]
},
"application/atsc-rdt+json": {
source: "iana",
compressible: true
},
"application/atsc-rsat+xml": {
source: "iana",
compressible: true,
extensions: ["rsat"]
},
"application/atxml": {
source: "iana"
},
"application/auth-policy+xml": {
source: "iana",
compressible: true
},
"application/automationml-aml+xml": {
source: "iana",
compressible: true,
extensions: ["aml"]
},
"application/automationml-amlx+zip": {
source: "iana",
compressible: false,
extensions: ["amlx"]
},
"application/bacnet-xdd+zip": {
source: "iana",
compressible: false
},
"application/batch-smtp": {
source: "iana"
},
"application/bdoc": {
compressible: false,
extensions: ["bdoc"]
},
"application/beep+xml": {
source: "iana",
charset: "UTF-8",
compressible: true
},
"application/bufr": {
source: "iana"
},
"application/c2pa": {
source: "iana"
},
"application/calendar+json": {
source: "iana",
compressible: true
},
"application/calendar+xml": {
source: "iana",
compressible: true,
extensions: ["xcs"]
},
"application/call-completion": {
source: "iana"
},
"application/cals-1840": {
source: "iana"
},
"application/captive+json": {
source: "iana",
compressible: true
},
"application/cbor": {
source: "iana"
},
"application/cbor-seq": {
source: "iana"
},
"application/cccex": {
source: "iana"
},
"application/ccmp+xml": {
source: "iana",
compressible: true
},
"application/ccxml+xml": {
source: "iana",
compressible: true,
extensions: ["ccxml"]
},
"application/cda+xml": {
source: "iana",
charset: "UTF-8",
compressible: true
},
"application/cdfx+xml": {
source: "iana",
compressible: true,
extensions: ["cdfx"]
},
"application/cdmi-capability": {
source: "iana",
extensions: ["cdmia"]
},
"application/cdmi-container": {
source: "iana",
extensions: ["cdmic"]
},
"application/cdmi-domain": {
source: "iana",
extensions: ["cdmid"]
},
"application/cdmi-object": {
source: "iana",
extensions: ["cdmio"]
},
"application/cdmi-queue": {
source: "iana",
extensions: ["cdmiq"]
},
"application/cdni": {
source: "iana"
},
"application/ce+cbor": {
source: "iana"
},
"application/cea": {
source: "iana"
},
"application/cea-2018+xml": {
source: "iana",
compressible: true
},
"application/cellml+xml": {
source: "iana",
compressible: true
},
"application/cfw": {
source: "iana"
},
"application/cid-edhoc+cbor-seq": {
source: "iana"
},
"application/city+json": {
source: "iana",
compressible: true
},
"application/city+json-seq": {
source: "iana"
},
"application/clr": {
source: "iana"
},
"application/clue+xml": {
source: "iana",
compressible: true
},
"application/clue_info+xml": {
source: "iana",
compressible: true
},
"application/cms": {
source: "iana"
},
"application/cnrp+xml": {
source: "iana",
compressible: true
},
"application/coap-eap": {
source: "iana"
},
"application/coap-group+json": {
source: "iana",
compressible: true
},
"application/coap-payload": {
source: "iana"
},
"application/commonground": {
source: "iana"
},
"application/concise-problem-details+cbor": {
source: "iana"
},
"application/conference-info+xml": {
source: "iana",
compressible: true
},
"application/cose": {
source: "iana"
},
"application/cose-key": {
source: "iana"
},
"application/cose-key-set": {
source: "iana"
},
"application/cose-x509": {
source: "iana"
},
"application/cpl+xml": {
source: "iana",
compressible: true,
extensions: ["cpl"]
},
"application/csrattrs": {
source: "iana"
},
"application/csta+xml": {
source: "iana",
compressible: true
},
"application/cstadata+xml": {
source: "iana",
compressible: true
},
"application/csvm+json": {
source: "iana",
compressible: true
},
"application/cu-seeme": {
source: "apache",
extensions: ["cu"]
},
"application/cwl": {
source: "iana",
extensions: ["cwl"]
},
"application/cwl+json": {
source: "iana",
compressible: true
},
"application/cwl+yaml": {
source: "iana"
},
"application/cwt": {
source: "iana"
},
"application/cybercash": {
source: "iana"
},
"application/dart": {
compressible: true
},
"application/dash+xml": {
source: "iana",
compressible: true,
extensions: ["mpd"]
},
"application/dash-patch+xml": {
source: "iana",
compressible: true,
extensions: ["mpp"]
},
"application/dashdelta": {
source: "iana"
},
"application/davmount+xml": {
source: "iana",
compressible: true,
extensions: ["davmount"]
},
"application/dca-rft": {
source: "iana"
},
"application/dcd": {
source: "iana"
},
"application/dec-dx": {
source: "iana"
},
"application/dialog-info+xml": {
source: "iana",
compressible: true
},
"application/dicom": {
source: "iana",
extensions: ["dcm"]
},
"application/dicom+json": {
source: "iana",
compressible: true
},
"application/dicom+xml": {
source: "iana",
compressible: true
},
"application/dii": {
source: "iana"
},
"application/dit": {
source: "iana"
},
"application/dns": {
source: "iana"
},
"application/dns+json": {
source: "iana",
compressible: true
},
"application/dns-message": {
source: "iana"
},
"application/docbook+xml": {
source: "apache",
compressible: true,
extensions: ["dbk"]
},
"application/dots+cbor": {
source: "iana"
},
"application/dpop+jwt": {
source: "iana"
},
"application/dskpp+xml": {
source: "iana",
compressible: true
},
"application/dssc+der": {
source: "iana",
extensions: ["dssc"]
},
"application/dssc+xml": {
source: "iana",
compressible: true,
extensions: ["xdssc"]
},
"application/dvcs": {
source: "iana"
},
"application/eat+cwt": {
source: "iana"
},
"application/eat+jwt": {
source: "iana"
},
"application/eat-bun+cbor": {
source: "iana"
},
"application/eat-bun+json": {
source: "iana",
compressible: true
},
"application/eat-ucs+cbor": {
source: "iana"
},
"application/eat-ucs+json": {
source: "iana",
compressible: true
},
"application/ecmascript": {
source: "apache",
compressible: true,
extensions: ["ecma"]
},
"application/edhoc+cbor-seq": {
source: "iana"
},
"application/edi-consent": {
source: "iana"
},
"application/edi-x12": {
source: "iana",
compressible: false
},
"application/edifact": {
source: "iana",
compressible: false
},
"application/efi": {
source: "iana"
},
"application/elm+json": {
source: "iana",
charset: "UTF-8",
compressible: true
},
"application/elm+xml": {
source: "iana",
compressible: true
},
"application/emergencycalldata.cap+xml": {
source: "iana",
charset: "UTF-8",
compressible: true
},
"application/emergencycalldata.comment+xml": {
source: "iana",
compressible: true
},
"application/emergencycalldata.control+xml": {
source: "iana",
compressible: true
},
"application/emergencycalldata.deviceinfo+xml": {
source: "iana",
compressible: true
},
"application/emergencycalldata.ecall.msd": {
source: "iana"
},
"application/emergencycalldata.legacyesn+json": {
source: "iana",
compressible: true
},
"application/emergencycalldata.providerinfo+xml": {
source: "iana",
compressible: true
},
"application/emergencycalldata.serviceinfo+xml": {
source: "iana",
compressible: true
},
"application/emergencycalldata.subscriberinfo+xml": {
source: "iana",
compressible: true
},
"application/emergencycalldata.veds+xml": {
source: "iana",
compressible: true
},
"application/emma+xml": {
source: "iana",
compressible: true,
extensions: ["emma"]
},
"application/emotionml+xml": {
source: "iana",
compressible: true,
extensions: ["emotionml"]
},
"application/encaprtp": {
source: "iana"
},
"application/entity-statement+jwt": {
source: "iana"
},
"application/epp+xml": {
source: "iana",
compressible: true
},
"application/epub+zip": {
source: "iana",
compressible: false,
extensions: ["epub"]
},
"application/eshop": {
source: "iana"
},
"application/exi": {
source: "iana",
extensions: ["exi"]
},
"application/expect-ct-report+json": {
source: "iana",
compressible: true
},
"application/express": {
source: "iana",
extensions: ["exp"]
},
"application/fastinfoset": {
source: "iana"
},
"application/fastsoap": {
source: "iana"
},
"application/fdf": {
source: "iana",
extensions: ["fdf"]
},
"application/fdt+xml": {
source: "iana",
compressible: true,
extensions: ["fdt"]
},
"application/fhir+json": {
source: "iana",
charset: "UTF-8",
compressible: true
},
"application/fhir+xml": {
source: "iana",
charset: "UTF-8",
compressible: true
},
"application/fido.trusted-apps+json": {
compressible: true
},
"application/fits": {
source: "iana"
},
"application/flexfec": {
source: "iana"
},
"application/font-sfnt": {
source: "iana"
},
"application/font-tdpfr": {
source: "iana",
extensions: ["pfr"]
},
"application/font-woff": {
source: "iana",
compressible: false
},
"application/framework-attributes+xml": {
source: "iana",
compressible: true
},
"application/geo+json": {
source: "iana",
compressible: true,
extensions: ["geojson"]
},
"application/geo+json-seq": {
source: "iana"
},
"application/geopackage+sqlite3": {
source: "iana"
},
"application/geopose+json": {
source: "iana",
compressible: true
},
"application/geoxacml+json": {
source: "iana",
compressible: true
},
"application/geoxacml+xml": {
source: "iana",
compressible: true
},
"application/gltf-buffer": {
source: "iana"
},
"application/gml+xml": {
source: "iana",
compressible: true,
extensions: ["gml"]
},
"application/gnap-binding-jws": {
source: "iana"
},
"application/gnap-binding-jwsd": {
source: "iana"
},
"application/gnap-binding-rotation-jws": {
source: "iana"
},
"application/gnap-binding-rotation-jwsd": {
source: "iana"
},
"application/gpx+xml": {
source: "apache",
compressible: true,
extensions: ["gpx"]
},
"application/grib": {
source: "iana"
},
"application/gxf": {
source: "apache",
extensions: ["gxf"]
},
"application/gzip": {
source: "iana",
compressible: false,
extensions: ["gz"]
},
"application/h224": {
source: "iana"
},
"application/held+xml": {
source: "iana",
compressible: true
},
"application/hjson": {
extensions: ["hjson"]
},
"application/hl7v2+xml": {
source: "iana",
charset: "UTF-8",
compressible: true
},
"application/http": {
source: "iana"
},
"application/hyperstudio": {
source: "iana",
extensions: ["stk"]
},
"application/ibe-key-request+xml": {
source: "iana",
compressible: true
},
"application/ibe-pkg-reply+xml": {
source: "iana",
compressible: true
},
"application/ibe-pp-data": {
source: "iana"
},
"application/iges": {
source: "iana"
},
"application/im-iscomposing+xml": {
source: "iana",
charset: "UTF-8",
compressible: true
},
"application/index": {
source: "iana"
},
"application/index.cmd": {
source: "iana"
},
"application/index.obj": {
source: "iana"
},
"application/index.response": {
source: "iana"
},
"application/index.vnd": {
source: "iana"
},
"application/inkml+xml": {
source: "iana",
compressible: true,
extensions: ["ink", "inkml"]
},
"application/iotp": {
source: "iana"
},
"application/ipfix": {
source: "iana",
extensions: ["ipfix"]
},
"application/ipp": {
source: "iana"
},
"application/isup": {
source: "iana"
},
"application/its+xml": {
source: "iana",
compressible: true,
extensions: ["its"]
},
"application/java-archive": {
source: "iana",
compressible: false,
extensions: ["jar", "war", "ear"]
},
"application/java-serialized-object": {
source: "apache",
compressible: false,
extensions: ["ser"]
},
"application/java-vm": {
source: "apache",
compressible: false,
extensions: ["class"]
},
"application/javascript": {
source: "apache",
charset: "UTF-8",
compressible: true,
extensions: ["js"]
},
"application/jf2feed+json": {
source: "iana",
compressible: true
},
"application/jose": {
source: "iana"
},
"application/jose+json": {
source: "iana",
compressible: true
},
"application/jrd+json": {
source: "iana",
compressible: true
},
"application/jscalendar+json": {
source: "iana",
compressible: true
},
"application/jscontact+json": {
source: "iana",
compressible: true
},
"application/json": {
source: "iana",
charset: "UTF-8",
compressible: true,
extensions: ["json", "map"]
},
"application/json-patch+json": {
source: "iana",
compressible: true
},
"application/json-seq": {
source: "iana"
},
"application/json5": {
extensions: ["json5"]
},
"application/jsonml+json": {
source: "apache",
compressible: true,
extensions: ["jsonml"]
},
"application/jsonpath": {
source: "iana"
},
"application/jwk+json": {
source: "iana",
compressible: true
},
"application/jwk-set+json": {
source: "iana",
compressible: true
},
"application/jwk-set+jwt": {
source: "iana"
},
"application/jwt": {
source: "iana"
},
"application/kpml-request+xml": {
source: "iana",
compressible: true
},
"application/kpml-response+xml": {
source: "iana",
compressible: true
},
"application/ld+json": {
source: "iana",
compressible: true,
extensions: ["jsonld"]
},
"application/lgr+xml": {
source: "iana",
compressible: true,
extensions: ["lgr"]
},
"application/link-format": {
source: "iana"
},
"application/linkset": {
source: "iana"
},
"application/linkset+json": {
source: "iana",
compressible: true
},
"application/load-control+xml": {
source: "iana",
compressible: true
},
"application/logout+jwt": {
source: "iana"
},
"application/lost+xml": {
source: "iana",
compressible: true,
extensions: ["lostxml"]
},
"application/lostsync+xml": {
source: "iana",
compressible: true
},
"application/lpf+zip": {
source: "iana",
compressible: false
},
"application/lxf": {
source: "iana"
},
"application/mac-binhex40": {
source: "iana",
extensions: ["hqx"]
},
"application/mac-compactpro": {
source: "apache",
extensions: ["cpt"]
},
"application/macwriteii": {
source: "iana"
},
"application/mads+xml": {
source: "iana",
compressible: true,
extensions: ["mads"]
},
"application/manifest+json": {
source: "iana",
charset: "UTF-8",
compressible: true,
extensions: ["webmanifest"]
},
"application/marc": {
source: "iana",
extensions: ["mrc"]
},
"application/marcxml+xml": {
source: "iana",
compressible: true,
extensions: ["mrcx"]
},
"application/mathematica": {
source: "iana",
extensions: ["ma", "nb", "mb"]
},
"application/mathml+xml": {
source: "iana",
compressible: true,
extensions: ["mathml"]
},
"application/mathml-content+xml": {
source: "iana",
compressible: true
},
"application/mathml-presentation+xml": {
source: "iana",
compressible: true
},
"application/mbms-associated-procedure-description+xml": {
source: "iana",
compressible: true
},
"application/mbms-deregister+xml": {
source: "iana",
compressible: true
},
"application/mbms-envelope+xml": {
source: "iana",
compressible: true
},
"application/mbms-msk+xml": {
source: "iana",
compressible: true
},
"application/mbms-msk-response+xml": {
source: "iana",
compressible: true
},
"application/mbms-protection-description+xml": {
source: "iana",
compressible: true
},
"application/mbms-reception-report+xml": {
source: "iana",
compressible: true
},
"application/mbms-register+xml": {
source: "iana",
compressible: true
},
"application/mbms-register-response+xml": {
source: "iana",
compressible: true
},
"application/mbms-schedule+xml": {
source: "iana",
compressible: true
},
"application/mbms-user-service-description+xml": {
source: "iana",
compressible: true
},
"application/mbox": {
source: "iana",
extensions: ["mbox"]
},
"application/media-policy-dataset+xml": {
source: "iana",
compressible: true,
extensions: ["mpf"]
},
"application/media_control+xml": {
source: "iana",
compressible: true
},
"application/mediaservercontrol+xml": {
source: "iana",
compressible: true,
extensions: ["mscml"]
},
"application/merge-patch+json": {
source: "iana",
compressible: true
},
"application/metalink+xml": {
source: "apache",
compressible: true,
extensions: ["metalink"]
},
"application/metalink4+xml": {
source: "iana",
compressible: true,
extensions: ["meta4"]
},
"application/mets+xml": {
source: "iana",
compressible: true,
extensions: ["mets"]
},
"application/mf4": {
source: "iana"
},
"application/mikey": {
source: "iana"
},
"application/mipc": {
source: "iana"
},
"application/missing-blocks+cbor-seq": {
source: "iana"
},
"application/mmt-aei+xml": {
source: "iana",
compressible: true,
extensions: ["maei"]
},
"application/mmt-usd+xml": {
source: "iana",
compressible: true,
extensions: ["musd"]
},
"application/mods+xml": {
source: "iana",
compressible: true,
extensions: ["mods"]
},
"application/moss-keys": {
source: "iana"
},
"application/moss-signature": {
source: "iana"
},
"application/mosskey-data": {
source: "iana"
},
"application/mosskey-request": {
source: "iana"
},
"application/mp21": {
source: "iana",
extensions: ["m21", "mp21"]
},
"application/mp4": {
source: "iana",
extensions: ["mp4", "mpg4", "mp4s", "m4p"]
},
"application/mpeg4-generic": {
source: "iana"
},
"application/mpeg4-iod": {
source: "iana"
},
"application/mpeg4-iod-xmt": {
source: "iana"
},
"application/mrb-consumer+xml": {
source: "iana",
compressible: true
},
"application/mrb-publish+xml": {
source: "iana",
compressible: true
},
"application/msc-ivr+xml": {
source: "iana",
charset: "UTF-8",
compressible: true
},
"application/msc-mixer+xml": {
source: "iana",
charset: "UTF-8",
compressible: true
},
"application/msix": {
compressible: false,
extensions: ["msix"]
},
"application/msixbundle": {
compressible: false,
extensions: ["msixbundle"]
},
"application/msword": {
source: "iana",
compressible: false,
extensions: ["doc", "dot"]
},
"application/mud+json": {
source: "iana",
compressible: true
},
"application/multipart-core": {
source: "iana"
},
"application/mxf": {
source: "iana",
extensions: ["mxf"]
},
"application/n-quads": {
source: "iana",
extensions: ["nq"]
},
"application/n-triples": {
source: "iana",
extensions: ["nt"]
},
"application/nasdata": {
source: "iana"
},
"application/news-checkgroups": {
source: "iana",
charset: "US-ASCII"
},
"application/news-groupinfo": {
source: "iana",
charset: "US-ASCII"
},
"application/news-transmission": {
source: "iana"
},
"application/nlsml+xml": {
source: "iana",
compressible: true
},
"application/node": {
source: "iana",
extensions: ["cjs"]
},
"application/nss": {
source: "iana"
},
"application/oauth-authz-req+jwt": {
source: "iana"
},
"application/oblivious-dns-message": {
source: "iana"
},
"application/ocsp-request": {
source: "iana"
},
"application/ocsp-response": {
source: "iana"
},
"application/octet-stream": {
source: "iana",
compressible: true,
extensions: ["bin", "dms", "lrf", "mar", "so", "dist", "distz", "pkg", "bpk", "dump", "elc", "deploy", "exe", "dll", "deb", "dmg", "iso", "img", "msi", "msp", "msm", "buffer"]
},
"application/oda": {
source: "iana",
extensions: ["oda"]
},
"application/odm+xml": {
source: "iana",
compressible: true
},
"application/odx": {
source: "iana"
},
"application/oebps-package+xml": {
source: "iana",
compressible: true,
extensions: ["opf"]
},
"application/ogg": {
source: "iana",
compressible: false,
extensions: ["ogx"]
},
"application/ohttp-keys": {
source: "iana"
},
"application/omdoc+xml": {
source: "apache",
compressible: true,
extensions: ["omdoc"]
},
"application/onenote": {
source: "apache",
extensions: ["onetoc", "onetoc2", "onetmp", "onepkg", "one", "onea"]
},
"application/opc-nodeset+xml": {
source: "iana",
compressible: true
},
"application/oscore": {
source: "iana"
},
"application/oxps": {
source: "iana",
extensions: ["oxps"]
},
"application/p21": {
source: "iana"
},
"application/p21+zip": {
source: "iana",
compressible: false
},
"application/p2p-overlay+xml": {
source: "iana",
compressible: true,
extensions: ["relo"]
},
"application/parityfec": {
source: "iana"
},
"application/passport": {
source: "iana"
},
"application/patch-ops-error+xml": {
source: "iana",
compressible: true,
extensions: ["xer"]
},
"application/pdf": {
source: "iana",
compressible: false,
extensions: ["pdf"]
},
"application/pdx": {
source: "iana"
},
"application/pem-certificate-chain": {
source: "iana"
},
"application/pgp-encrypted": {
source: "iana",
compressible: false,
extensions: ["pgp"]
},
"application/pgp-keys": {
source: "iana",
extensions: ["asc"]
},
"application/pgp-signature": {
source: "iana",
extensions: ["sig", "asc"]
},
"application/pics-rules": {
source: "apache",
extensions: ["prf"]
},
"application/pidf+xml": {
source: "iana",
charset: "UTF-8",
compressible: true
},
"application/pidf-diff+xml": {
source: "iana",
charset: "UTF-8",
compressible: true
},
"application/pkcs10": {
source: "iana",
extensions: ["p10"]
},
"application/pkcs12": {
source: "iana"
},
"application/pkcs7-mime": {
source: "iana",
extensions: ["p7m", "p7c"]
},
"application/pkcs7-signature": {
source: "iana",
extensions: ["p7s"]
},
"application/pkcs8": {
source: "iana",
extensions: ["p8"]
},
"application/pkcs8-encrypted": {
source: "iana"
},
"application/pkix-attr-cert": {
source: "iana",
extensions: ["ac"]
},
"application/pkix-cert": {
source: "iana",
extensions: ["cer"]
},
"application/pkix-crl": {
source: "iana",
extensions: ["crl"]
},
"application/pkix-pkipath": {
source: "iana",
extensions: ["pkipath"]
},
"application/pkixcmp": {
source: "iana",
extensions: ["pki"]
},
"application/pls+xml": {
source: "iana",
compressible: true,
extensions: ["pls"]
},
"application/poc-settings+xml": {
source: "iana",
charset: "UTF-8",
compressible: true
},
"application/postscript": {
source: "iana",
compressible: true,
extensions: ["ai", "eps", "ps"]
},
"application/ppsp-tracker+json": {
source: "iana",
compressible: true
},
"application/private-token-issuer-directory": {
source: "iana"
},
"application/private-token-request": {
source: "iana"
},
"application/private-token-response": {
source: "iana"
},
"application/problem+json": {
source: "iana",
compressible: true
},
"application/problem+xml": {
source: "iana",
compressible: true
},
"application/provenance+xml": {
source: "iana",
compressible: true,
extensions: ["provx"]
},
"application/provided-claims+jwt": {
source: "iana"
},
"application/prs.alvestrand.titrax-sheet": {
source: "iana"
},
"application/prs.cww": {
source: "iana",
extensions: ["cww"]
},
"application/prs.cyn": {
source: "iana",
charset: "7-BIT"
},
"application/prs.hpub+zip": {
source: "iana",
compressible: false
},
"application/prs.implied-document+xml": {
source: "iana",
compressible: true
},
"application/prs.implied-executable": {
source: "iana"
},
"application/prs.implied-object+json": {
source: "iana",
compressible: true
},
"application/prs.implied-object+json-seq": {
source: "iana"
},
"application/prs.implied-object+yaml": {
source: "iana"
},
"application/prs.implied-structure": {
source: "iana"
},
"application/prs.mayfile": {
source: "iana"
},
"application/prs.nprend": {
source: "iana"
},
"application/prs.plucker": {
source: "iana"
},
"application/prs.rdf-xml-crypt": {
source: "iana"
},
"application/prs.vcfbzip2": {
source: "iana"
},
"application/prs.xsf+xml": {
source: "iana",
compressible: true,
extensions: ["xsf"]
},
"application/pskc+xml": {
source: "iana",
compressible: true,
extensions: ["pskcxml"]
},
"application/pvd+json": {
source: "iana",
compressible: true
},
"application/qsig": {
source: "iana"
},
"application/raml+yaml": {
compressible: true,
extensions: ["raml"]
},
"application/raptorfec": {
source: "iana"
},
"application/rdap+json": {
source: "iana",
compressible: true
},
"application/rdf+xml": {
source: "iana",
compressible: true,
extensions: ["rdf", "owl"]
},
"application/reginfo+xml": {
source: "iana",
compressible: true,
extensions: ["rif"]
},
"application/relax-ng-compact-syntax": {
source: "iana",
extensions: ["rnc"]
},
"application/remote-printing": {
source: "apache"
},
"application/reputon+json": {
source: "iana",
compressible: true
},
"application/resolve-response+jwt": {
source: "iana"
},
"application/resource-lists+xml": {
source: "iana",
compressible: true,
extensions: ["rl"]
},
"application/resource-lists-diff+xml": {
source: "iana",
compressible: true,
extensions: ["rld"]
},
"application/rfc+xml": {
source: "iana",
compressible: true
},
"application/riscos": {
source: "iana"
},
"application/rlmi+xml": {
source: "iana",
compressible: true
},
"application/rls-services+xml": {
source: "iana",
compressible: true,
extensions: ["rs"]
},
"application/route-apd+xml": {
source: "iana",
compressible: true,
extensions: ["rapd"]
},
"application/route-s-tsid+xml": {
source: "iana",
compressible: true,
extensions: ["sls"]
},
"application/route-usd+xml": {
source: "iana",
compressible: true,
extensions: ["rusd"]
},
"application/rpki-checklist": {
source: "iana"
},
"application/rpki-ghostbusters": {
source: "iana",
extensions: ["gbr"]
},
"application/rpki-manifest": {
source: "iana",
extensions: ["mft"]
},
"application/rpki-publication": {
source: "iana"
},
"application/rpki-roa": {
source: "iana",
extensions: ["roa"]
},
"application/rpki-signed-tal": {
source: "iana"
},
"application/rpki-updown": {
source: "iana"
},
"application/rsd+xml": {
source: "apache",
compressible: true,
extensions: ["rsd"]
},
"application/rss+xml": {
source: "apache",
compressible: true,
extensions: ["rss"]
},
"application/rtf": {
source: "iana",
compressible: true,
extensions: ["rtf"]
},
"application/rtploopback": {
source: "iana"
},
"application/rtx": {
source: "iana"
},
"application/samlassertion+xml": {
source: "iana",
compressible: true
},
"application/samlmetadata+xml": {
source: "iana",
compressible: true
},
"application/sarif+json": {
source: "iana",
compressible: true
},
"application/sarif-external-properties+json": {
source: "iana",
compressible: true
},
"application/sbe": {
source: "iana"
},
"application/sbml+xml": {
source: "iana",
compressible: true,
extensions: ["sbml"]
},
"application/scaip+xml": {
source: "iana",
compressible: true
},
"application/scim+json": {
source: "iana",
compressible: true
},
"application/scvp-cv-request": {
source: "iana",
extensions: ["scq"]
},
"application/scvp-cv-response": {
source: "iana",
extensions: ["scs"]
},
"application/scvp-vp-request": {
source: "iana",
extensions: ["spq"]
},
"application/scvp-vp-response": {
source: "iana",
extensions: ["spp"]
},
"application/sdp": {
source: "iana",
extensions: ["sdp"]
},
"application/secevent+jwt": {
source: "iana"
},
"application/senml+cbor": {
source: "iana"
},
"application/senml+json": {
source: "iana",
compressible: true
},
"application/senml+xml": {
source: "iana",
compressible: true,
extensions: ["senmlx"]
},
"application/senml-etch+cbor": {
source: "iana"
},
"application/senml-etch+json": {
source: "iana",
compressible: true
},
"application/senml-exi": {
source: "iana"
},
"application/sensml+cbor": {
source: "iana"
},
"application/sensml+json": {
source: "iana",
compressible: true
},
"application/sensml+xml": {
source: "iana",
compressible: true,
extensions: ["sensmlx"]
},
"application/sensml-exi": {
source: "iana"
},
"application/sep+xml": {
source: "iana",
compressible: true
},
"application/sep-exi": {
source: "iana"
},
"application/session-info": {
source: "iana"
},
"application/set-payment": {
source: "iana"
},
"application/set-payment-initiation": {
source: "iana",
extensions: ["setpay"]
},
"application/set-registration": {
source: "iana"
},
"application/set-registration-initiation": {
source: "iana",
extensions: ["setreg"]
},
"application/sgml": {
source: "iana"
},
"application/sgml-open-catalog": {
source: "iana"
},
"application/shf+xml": {
source: "iana",
compressible: true,
extensions: ["shf"]
},
"application/sieve": {
source: "iana",
extensions: ["siv", "sieve"]
},
"application/simple-filter+xml": {
source: "iana",
compressible: true
},
"application/simple-message-summary": {
source: "iana"
},
"application/simplesymbolcontainer": {
source: "iana"
},
"application/sipc": {
source: "iana"
},
"application/slate": {
source: "iana"
},
"application/smil": {
source: "apache"
},
"application/smil+xml": {
source: "iana",
compressible: true,
extensions: ["smi", "smil"]
},
"application/smpte336m": {
source: "iana"
},
"application/soap+fastinfoset": {
source: "iana"
},
"application/soap+xml": {
source: "iana",
compressible: true
},
"application/sparql-query": {
source: "iana",
extensions: ["rq"]
},
"application/sparql-results+xml": {
source: "iana",
compressible: true,
extensions: ["srx"]
},
"application/spdx+json": {
source: "iana",
compressible: true
},
"application/spirits-event+xml": {
source: "iana",
compressible: true
},
"application/sql": {
source: "iana",
extensions: ["sql"]
},
"application/srgs": {
source: "iana",
extensions: ["gram"]
},
"application/srgs+xml": {
source: "iana",
compressible: true,
extensions: ["grxml"]
},
"application/sru+xml": {
source: "iana",
compressible: true,
extensions: ["sru"]
},
"application/ssdl+xml": {
source: "apache",
compressible: true,
extensions: ["ssdl"]
},
"application/sslkeylogfile": {
source: "iana"
},
"application/ssml+xml": {
source: "iana",
compressible: true,
extensions: ["ssml"]
},
"application/st2110-41": {
source: "iana"
},
"application/stix+json": {
source: "iana",
compressible: true
},
"application/stratum": {
source: "iana"
},
"application/swid+cbor": {
source: "iana"
},
"application/swid+xml": {
source: "iana",
compressible: true,
extensions: ["swidtag"]
},
"application/tamp-apex-update": {
source: "iana"
},
"application/tamp-apex-update-confirm": {
source: "iana"
},
"application/tamp-community-update": {
source: "iana"
},
"application/tamp-community-update-confirm": {
source: "iana"
},
"application/tamp-error": {
source: "iana"
},
"application/tamp-sequence-adjust": {
source: "iana"
},
"application/tamp-sequence-adjust-confirm": {
source: "iana"
},
"application/tamp-status-query": {
source: "iana"
},
"application/tamp-status-response": {
source: "iana"
},
"application/tamp-update": {
source: "iana"
},
"application/tamp-update-confirm": {
source: "iana"
},
"application/tar": {
compressible: true
},
"application/taxii+json": {
source: "iana",
compressible: true
},
"application/td+json": {
source: "iana",
compressible: true
},
"application/tei+xml": {
source: "iana",
compressible: true,
extensions: ["tei", "teicorpus"]
},
"application/tetra_isi": {
source: "iana"
},
"application/thraud+xml": {
source: "iana",
compressible: true,
extensions: ["tfi"]
},
"application/timestamp-query": {
source: "iana"
},
"application/timestamp-reply": {
source: "iana"
},
"application/timestamped-data": {
source: "iana",
extensions: ["tsd"]
},
"application/tlsrpt+gzip": {
source: "iana"
},
"application/tlsrpt+json": {
source: "iana",
compressible: true
},
"application/tm+json": {
source: "iana",
compressible: true
},
"application/tnauthlist": {
source: "iana"
},
"application/toc+cbor": {
source: "iana"
},
"application/token-introspection+jwt": {
source: "iana"
},
"application/toml": {
source: "iana",
compressible: true,
extensions: ["toml"]
},
"application/trickle-ice-sdpfrag": {
source: "iana"
},
"application/trig": {
source: "iana",
extensions: ["trig"]
},
"application/trust-chain+json": {
source: "iana",
compressible: true
},
"application/trust-mark+jwt": {
source: "iana"
},
"application/trust-mark-delegation+jwt": {
source: "iana"
},
"application/ttml+xml": {
source: "iana",
compressible: true,
extensions: ["ttml"]
},
"application/tve-trigger": {
source: "iana"
},
"application/tzif": {
source: "iana"
},
"application/tzif-leap": {
source: "iana"
},
"application/ubjson": {
compressible: false,
extensions: ["ubj"]
},
"application/uccs+cbor": {
source: "iana"
},
"application/ujcs+json": {
source: "iana",
compressible: true
},
"application/ulpfec": {
source: "iana"
},
"application/urc-grpsheet+xml": {
source: "iana",
compressible: true
},
"application/urc-ressheet+xml": {
source: "iana",
compressible: true,
extensions: ["rsheet"]
},
"application/urc-targetdesc+xml": {
source: "iana",
compressible: true,
extensions: ["td"]
},
"application/urc-uisocketdesc+xml": {
source: "iana",
compressible: true
},
"application/vc": {
source: "iana"
},
"application/vc+cose": {
source: "iana"
},
"application/vc+jwt": {
source: "iana"
},
"application/vcard+json": {
source: "iana",
compressible: true
},
"application/vcard+xml": {
source: "iana",
compressible: true
},
"application/vemmi": {
source: "iana"
},
"application/vividence.scriptfile": {
source: "apache"
},
"application/vnd.1000minds.decision-model+xml": {
source: "iana",
compressible: true,
extensions: ["1km"]
},
"application/vnd.1ob": {
source: "iana"
},
"application/vnd.3gpp-prose+xml": {
source: "iana",
compressible: true
},
"application/vnd.3gpp-prose-pc3a+xml": {
source: "iana",
compressible: true
},
"application/vnd.3gpp-prose-pc3ach+xml": {
source: "iana",
compressible: true
},
"application/vnd.3gpp-prose-pc3ch+xml": {
source: "iana",
compressible: true
},
"application/vnd.3gpp-prose-pc8+xml": {
source: "iana",
compressible: true
},
"application/vnd.3gpp-v2x-local-service-information": {
source: "iana"
},
"application/vnd.3gpp.5gnas": {
source: "iana"
},
"application/vnd.3gpp.5gsa2x": {
source: "iana"
},
"application/vnd.3gpp.5gsa2x-local-service-information": {
source: "iana"
},
"application/vnd.3gpp.5gsv2x": {
source: "iana"
},
"application/vnd.3gpp.5gsv2x-local-service-information": {
source: "iana"
},
"application/vnd.3gpp.access-transfer-events+xml": {
source: "iana",
compressible: true
},
"application/vnd.3gpp.bsf+xml": {
source: "iana",
compressible: true
},
"application/vnd.3gpp.crs+xml": {
source: "iana",
compressible: true
},
"application/vnd.3gpp.current-location-discovery+xml": {
source: "iana",
compressible: true
},
"application/vnd.3gpp.gmop+xml": {
source: "iana",
compressible: true
},
"application/vnd.3gpp.gtpc": {
source: "iana"
},
"application/vnd.3gpp.interworking-data": {
source: "iana"
},
"application/vnd.3gpp.lpp": {
source: "iana"
},
"application/vnd.3gpp.mc-signalling-ear": {
source: "iana"
},
"application/vnd.3gpp.mcdata-affiliation-command+xml": {
source: "iana",
compressible: true
},
"application/vnd.3gpp.mcdata-info+xml": {
source: "iana",
compressible: true
},
"application/vnd.3gpp.mcdata-msgstore-ctrl-request+xml": {
source: "iana",
compressible: true
},
"application/vnd.3gpp.mcdata-payload": {
source: "iana"
},
"application/vnd.3gpp.mcdata-regroup+xml": {
source: "iana",
compressible: true
},
"application/vnd.3gpp.mcdata-service-config+xml": {
source: "iana",
compressible: true
},
"application/vnd.3gpp.mcdata-signalling": {
source: "iana"
},
"application/vnd.3gpp.mcdata-ue-config+xml": {
source: "iana",
compressible: true
},
"application/vnd.3gpp.mcdata-user-profile+xml": {
source: "iana",
compressible: true
},
"application/vnd.3gpp.mcptt-affiliation-command+xml": {
source: "iana",
compressible: true
},
"application/vnd.3gpp.mcptt-floor-request+xml": {
source: "iana",
compressible: true
},
"application/vnd.3gpp.mcptt-info+xml": {
source: "iana",
compressible: true
},
"application/vnd.3gpp.mcptt-location-info+xml": {
source: "iana",
compressible: true
},
"application/vnd.3gpp.mcptt-mbms-usage-info+xml": {
source: "iana",
compressible: true
},
"application/vnd.3gpp.mcptt-regroup+xml": {
source: "iana",
compressible: true
},
"application/vnd.3gpp.mcptt-service-config+xml": {
source: "iana",
compressible: true
},
"application/vnd.3gpp.mcptt-signed+xml": {
source: "iana",
compressible: true
},
"application/vnd.3gpp.mcptt-ue-config+xml": {
source: "iana",
compressible: true
},
"application/vnd.3gpp.mcptt-ue-init-config+xml": {
source: "iana",
compressible: true
},
"application/vnd.3gpp.mcptt-user-profile+xml": {
source: "iana",
compressible: true
},
"application/vnd.3gpp.mcvideo-affiliation-command+xml": {
source: "iana",
compressible: true
},
"application/vnd.3gpp.mcvideo-info+xml": {
source: "iana",
compressible: true
},
"application/vnd.3gpp.mcvideo-location-info+xml": {
source: "iana",
compressible: true
},
"application/vnd.3gpp.mcvideo-mbms-usage-info+xml": {
source: "iana",
compressible: true
},
"application/vnd.3gpp.mcvideo-regroup+xml": {
source: "iana",
compressible: true
},
"application/vnd.3gpp.mcvideo-service-config+xml": {
source: "iana",
compressible: true
},
"application/vnd.3gpp.mcvideo-transmission-request+xml": {
source: "iana",
compressible: true
},
"application/vnd.3gpp.mcvideo-ue-config+xml": {
source: "iana",
compressible: true
},
"application/vnd.3gpp.mcvideo-user-profile+xml": {
source: "iana",
compressible: true
},
"application/vnd.3gpp.mid-call+xml": {
source: "iana",
compressible: true
},
"application/vnd.3gpp.ngap": {
source: "iana"
},
"application/vnd.3gpp.pfcp": {
source: "iana"
},
"application/vnd.3gpp.pic-bw-large": {
source: "iana",
extensions: ["plb"]
},
"application/vnd.3gpp.pic-bw-small": {
source: "iana",
extensions: ["psb"]
},
"application/vnd.3gpp.pic-bw-var": {
source: "iana",
extensions: ["pvb"]
},
"application/vnd.3gpp.pinapp-info+xml": {
source: "iana",
compressible: true
},
"application/vnd.3gpp.s1ap": {
source: "iana"
},
"application/vnd.3gpp.seal-group-doc+xml": {
source: "iana",
compressible: true
},
"application/vnd.3gpp.seal-info+xml": {
source: "iana",
compressible: true
},
"application/vnd.3gpp.seal-location-info+xml": {
source: "iana",
compressible: true
},
"application/vnd.3gpp.seal-mbms-usage-info+xml": {
source: "iana",
compressible: true
},
"application/vnd.3gpp.seal-network-qos-management-info+xml": {
source: "iana",
compressible: true
},
"application/vnd.3gpp.seal-ue-config-info+xml": {
source: "iana",
compressible: true
},
"application/vnd.3gpp.seal-unicast-info+xml": {
source: "iana",
compressible: true
},
"application/vnd.3gpp.seal-user-profile-info+xml": {
source: "iana",
compressible: true
},
"application/vnd.3gpp.sms": {
source: "iana"
},
"application/vnd.3gpp.sms+xml": {
source: "iana",
compressible: true
},
"application/vnd.3gpp.srvcc-ext+xml": {
source: "iana",
compressible: true
},
"application/vnd.3gpp.srvcc-info+xml": {
source: "iana",
compressible: true
},
"application/vnd.3gpp.state-and-event-info+xml": {
source: "iana",
compressible: true
},
"application/vnd.3gpp.ussd+xml": {
source: "iana",
compressible: true
},
"application/vnd.3gpp.v2x": {
source: "iana"
},
"application/vnd.3gpp.vae-info+xml": {
source: "iana",
compressible: true
},
"application/vnd.3gpp2.bcmcsinfo+xml": {
source: "iana",
compressible: true
},
"application/vnd.3gpp2.sms": {
source: "iana"
},
"application/vnd.3gpp2.tcap": {
source: "iana",
extensions: ["tcap"]
},
"application/vnd.3lightssoftware.imagescal": {
source: "iana"
},
"application/vnd.3m.post-it-notes": {
source: "iana",
extensions: ["pwn"]
},
"application/vnd.accpac.simply.aso": {
source: "iana",
extensions: ["aso"]
},
"application/vnd.accpac.simply.imp": {
source: "iana",
extensions: ["imp"]
},
"application/vnd.acm.addressxfer+json": {
source: "iana",
compressible: true
},
"application/vnd.acm.chatbot+json": {
source: "iana",
compressible: true
},
"application/vnd.acucobol": {
source: "iana",
extensions: ["acu"]
},
"application/vnd.acucorp": {
source: "iana",
extensions: ["atc", "acutc"]
},
"application/vnd.adobe.air-application-installer-package+zip": {
source: "apache",
compressible: false,
extensions: ["air"]
},
"application/vnd.adobe.flash.movie": {
source: "iana"
},
"application/vnd.adobe.formscentral.fcdt": {
source: "iana",
extensions: ["fcdt"]
},
"application/vnd.adobe.fxp": {
source: "iana",
extensions: ["fxp", "fxpl"]
},
"application/vnd.adobe.partial-upload": {
source: "iana"
},
"application/vnd.adobe.xdp+xml": {
source: "iana",
compressible: true,
extensions: ["xdp"]
},
"application/vnd.adobe.xfdf": {
source: "apache",
extensions: ["xfdf"]
},
"application/vnd.aether.imp": {
source: "iana"
},
"application/vnd.afpc.afplinedata": {
source: "iana"
},
"application/vnd.afpc.afplinedata-pagedef": {
source: "iana"
},
"application/vnd.afpc.cmoca-cmresource": {
source: "iana"
},
"application/vnd.afpc.foca-charset": {
source: "iana"
},
"application/vnd.afpc.foca-codedfont": {
source: "iana"
},
"application/vnd.afpc.foca-codepage": {
source: "iana"
},
"application/vnd.afpc.modca": {
source: "iana"
},
"application/vnd.afpc.modca-cmtable": {
source: "iana"
},
"application/vnd.afpc.modca-formdef": {
source: "iana"
},
"application/vnd.afpc.modca-mediummap": {
source: "iana"
},
"application/vnd.afpc.modca-objectcontainer": {
source: "iana"
},
"application/vnd.afpc.modca-overlay": {
source: "iana"
},
"application/vnd.afpc.modca-pagesegment": {
source: "iana"
},
"application/vnd.age": {
source: "iana",
extensions: ["age"]
},
"application/vnd.ah-barcode": {
source: "apache"
},
"application/vnd.ahead.space": {
source: "iana",
extensions: ["ahead"]
},
"application/vnd.airzip.filesecure.azf": {
source: "iana",
extensions: ["azf"]
},
"application/vnd.airzip.filesecure.azs": {
source: "iana",
extensions: ["azs"]
},
"application/vnd.amadeus+json": {
source: "iana",
compressible: true
},
"application/vnd.amazon.ebook": {
source: "apache",
extensions: ["azw"]
},
"application/vnd.amazon.mobi8-ebook": {
source: "iana"
},
"application/vnd.americandynamics.acc": {
source: "iana",
extensions: ["acc"]
},
"application/vnd.amiga.ami": {
source: "iana",
extensions: ["ami"]
},
"application/vnd.amundsen.maze+xml": {
source: "iana",
compressible: true
},
"application/vnd.android.ota": {
source: "iana"
},
"application/vnd.android.package-archive": {
source: "apache",
compressible: false,
extensions: ["apk"]
},
"application/vnd.anki": {
source: "iana"
},
"application/vnd.anser-web-certificate-issue-initiation": {
source: "iana",
extensions: ["cii"]
},
"application/vnd.anser-web-funds-transfer-initiation": {
source: "apache",
extensions: ["fti"]
},
"application/vnd.antix.game-component": {
source: "iana",
extensions: ["atx"]
},
"application/vnd.apache.arrow.file": {
source: "iana"
},
"application/vnd.apache.arrow.stream": {
source: "iana"
},
"application/vnd.apache.parquet": {
source: "iana"
},
"application/vnd.apache.thrift.binary": {
source: "iana"
},
"application/vnd.apache.thrift.compact": {
source: "iana"
},
"application/vnd.apache.thrift.json": {
source: "iana"
},
"application/vnd.apexlang": {
source: "iana"
},
"application/vnd.api+json": {
source: "iana",
compressible: true
},
"application/vnd.aplextor.warrp+json": {
source: "iana",
compressible: true
},
"application/vnd.apothekende.reservation+json": {
source: "iana",
compressible: true
},
"application/vnd.apple.installer+xml": {
source: "iana",
compressible: true,
extensions: ["mpkg"]
},
"application/vnd.apple.keynote": {
source: "iana",
extensions: ["key"]
},
"application/vnd.apple.mpegurl": {
source: "iana",
extensions: ["m3u8"]
},
"application/vnd.apple.numbers": {
source: "iana",
extensions: ["numbers"]
},
"application/vnd.apple.pages": {
source: "iana",
extensions: ["pages"]
},
"application/vnd.apple.pkpass": {
compressible: false,
extensions: ["pkpass"]
},
"application/vnd.arastra.swi": {
source: "apache"
},
"application/vnd.aristanetworks.swi": {
source: "iana",
extensions: ["swi"]
},
"application/vnd.artisan+json": {
source: "iana",
compressible: true
},
"application/vnd.artsquare": {
source: "iana"
},
"application/vnd.astraea-software.iota": {
source: "iana",
extensions: ["iota"]
},
"application/vnd.audiograph": {
source: "iana",
extensions: ["aep"]
},
"application/vnd.autodesk.fbx": {
extensions: ["fbx"]
},
"application/vnd.autopackage": {
source: "iana"
},
"application/vnd.avalon+json": {
source: "iana",
compressible: true
},
"application/vnd.avistar+xml": {
source: "iana",
compressible: true
},
"application/vnd.balsamiq.bmml+xml": {
source: "iana",
compressible: true,
extensions: ["bmml"]
},
"application/vnd.balsamiq.bmpr": {
source: "iana"
},
"application/vnd.banana-accounting": {
source: "iana"
},
"application/vnd.bbf.usp.error": {
source: "iana"
},
"application/vnd.bbf.usp.msg": {
source: "iana"
},
"application/vnd.bbf.usp.msg+json": {
source: "iana",
compressible: true
},
"application/vnd.bekitzur-stech+json": {
source: "iana",
compressible: true
},
"application/vnd.belightsoft.lhzd+zip": {
source: "iana",
compressible: false
},
"application/vnd.belightsoft.lhzl+zip": {
source: "iana",
compressible: false
},
"application/vnd.bint.med-content": {
source: "iana"
},
"application/vnd.biopax.rdf+xml": {
source: "iana",
compressible: true
},
"application/vnd.blink-idb-value-wrapper": {
source: "iana"
},
"application/vnd.blueice.multipass": {
source: "iana",
extensions: ["mpm"]
},
"application/vnd.bluetooth.ep.oob": {
source: "iana"
},
"application/vnd.bluetooth.le.oob": {
source: "iana"
},
"application/vnd.bmi": {
source: "iana",
extensions: ["bmi"]
},
"application/vnd.bpf": {
source: "iana"
},
"application/vnd.bpf3": {
source: "iana"
},
"application/vnd.businessobjects": {
source: "iana",
extensions: ["rep"]
},
"application/vnd.byu.uapi+json": {
source: "iana",
compressible: true
},
"application/vnd.bzip3": {
source: "iana"
},
"application/vnd.c3voc.schedule+xml": {
source: "iana",
compressible: true
},
"application/vnd.cab-jscript": {
source: "iana"
},
"application/vnd.canon-cpdl": {
source: "iana"
},
"application/vnd.canon-lips": {
source: "iana"
},
"application/vnd.capasystems-pg+json": {
source: "iana",
compressible: true
},
"application/vnd.cendio.thinlinc.clientconf": {
source: "iana"
},
"application/vnd.century-systems.tcp_stream": {
source: "iana"
},
"application/vnd.chemdraw+xml": {
source: "iana",
compressible: true,
extensions: ["cdxml"]
},
"application/vnd.chess-pgn": {
source: "iana"
},
"application/vnd.chipnuts.karaoke-mmd": {
source: "iana",
extensions: ["mmd"]
},
"application/vnd.ciedi": {
source: "iana"
},
"application/vnd.cinderella": {
source: "iana",
extensions: ["cdy"]
},
"application/vnd.cirpack.isdn-ext": {
source: "iana"
},
"application/vnd.citationstyles.style+xml": {
source: "iana",
compressible: true,
extensions: ["csl"]
},
"application/vnd.claymore": {
source: "iana",
extensions: ["cla"]
},
"application/vnd.cloanto.rp9": {
source: "iana",
extensions: ["rp9"]
},
"application/vnd.clonk.c4group": {
source: "iana",
extensions: ["c4g", "c4d", "c4f", "c4p", "c4u"]
},
"application/vnd.cluetrust.cartomobile-config": {
source: "iana",
extensions: ["c11amc"]
},
"application/vnd.cluetrust.cartomobile-config-pkg": {
source: "iana",
extensions: ["c11amz"]
},
"application/vnd.cncf.helm.chart.content.v1.tar+gzip": {
source: "iana"
},
"application/vnd.cncf.helm.chart.provenance.v1.prov": {
source: "iana"
},
"application/vnd.cncf.helm.config.v1+json": {
source: "iana",
compressible: true
},
"application/vnd.coffeescript": {
source: "iana"
},
"application/vnd.collabio.xodocuments.document": {
source: "iana"
},
"application/vnd.collabio.xodocuments.document-template": {
source: "iana"
},
"application/vnd.collabio.xodocuments.presentation": {
source: "iana"
},
"application/vnd.collabio.xodocuments.presentation-template": {
source: "iana"
},
"application/vnd.collabio.xodocuments.spreadsheet": {
source: "iana"
},
"application/vnd.collabio.xodocuments.spreadsheet-template": {
source: "iana"
},
"application/vnd.collection+json": {
source: "iana",
compressible: true
},
"application/vnd.collection.doc+json": {
source: "iana",
compressible: true
},
"application/vnd.collection.next+json": {
source: "iana",
compressible: true
},
"application/vnd.comicbook+zip": {
source: "iana",
compressible: false
},
"application/vnd.comicbook-rar": {
source: "iana"
},
"application/vnd.commerce-battelle": {
source: "iana"
},
"application/vnd.commonspace": {
source: "iana",
extensions: ["csp"]
},
"application/vnd.contact.cmsg": {
source: "iana",
extensions: ["cdbcmsg"]
},
"application/vnd.coreos.ignition+json": {
source: "iana",
compressible: true
},
"application/vnd.cosmocaller": {
source: "iana",
extensions: ["cmc"]
},
"application/vnd.crick.clicker": {
source: "iana",
extensions: ["clkx"]
},
"application/vnd.crick.clicker.keyboard": {
source: "iana",
extensions: ["clkk"]
},
"application/vnd.crick.clicker.palette": {
source: "iana",
extensions: ["clkp"]
},
"application/vnd.crick.clicker.template": {
source: "iana",
extensions: ["clkt"]
},
"application/vnd.crick.clicker.wordbank": {
source: "iana",
extensions: ["clkw"]
},
"application/vnd.criticaltools.wbs+xml": {
source: "iana",
compressible: true,
extensions: ["wbs"]
},
"application/vnd.cryptii.pipe+json": {
source: "iana",
compressible: true
},
"application/vnd.crypto-shade-file": {
source: "iana"
},
"application/vnd.cryptomator.encrypted": {
source: "iana"
},
"application/vnd.cryptomator.vault": {
source: "iana"
},
"application/vnd.ctc-posml": {
source: "iana",
extensions: ["pml"]
},
"application/vnd.ctct.ws+xml": {
source: "iana",
compressible: true
},
"application/vnd.cups-pdf": {
source: "iana"
},
"application/vnd.cups-postscript": {
source: "iana"
},
"application/vnd.cups-ppd": {
source: "iana",
extensions: ["ppd"]
},
"application/vnd.cups-raster": {
source: "iana"
},
"application/vnd.cups-raw": {
source: "iana"
},
"application/vnd.curl": {
source: "iana"
},
"application/vnd.curl.car": {
source: "apache",
extensions: ["car"]
},
"application/vnd.curl.pcurl": {
source: "apache",
extensions: ["pcurl"]
},
"application/vnd.cyan.dean.root+xml": {
source: "iana",
compressible: true
},
"application/vnd.cybank": {
source: "iana"
},
"application/vnd.cyclonedx+json": {
source: "iana",
compressible: true
},
"application/vnd.cyclonedx+xml": {
source: "iana",
compressible: true
},
"application/vnd.d2l.coursepackage1p0+zip": {
source: "iana",
compressible: false
},
"application/vnd.d3m-dataset": {
source: "iana"
},
"application/vnd.d3m-problem": {
source: "iana"
},
"application/vnd.dart": {
source: "iana",
compressible: true,
extensions: ["dart"]
},
"application/vnd.data-vision.rdz": {
source: "iana",
extensions: ["rdz"]
},
"application/vnd.datalog": {
source: "iana"
},
"application/vnd.datapackage+json": {
source: "iana",
compressible: true
},
"application/vnd.dataresource+json": {
source: "iana",
compressible: true
},
"application/vnd.dbf": {
source: "iana",
extensions: ["dbf"]
},
"application/vnd.dcmp+xml": {
source: "iana",
compressible: true,
extensions: ["dcmp"]
},
"application/vnd.debian.binary-package": {
source: "iana"
},
"application/vnd.dece.data": {
source: "iana",
extensions: ["uvf", "uvvf", "uvd", "uvvd"]
},
"application/vnd.dece.ttml+xml": {
source: "iana",
compressible: true,
extensions: ["uvt", "uvvt"]
},
"application/vnd.dece.unspecified": {
source: "iana",
extensions: ["uvx", "uvvx"]
},
"application/vnd.dece.zip": {
source: "iana",
extensions: ["uvz", "uvvz"]
},
"application/vnd.denovo.fcselayout-link": {
source: "iana",
extensions: ["fe_launch"]
},
"application/vnd.desmume.movie": {
source: "iana"
},
"application/vnd.dir-bi.plate-dl-nosuffix": {
source: "iana"
},
"application/vnd.dm.delegation+xml": {
source: "iana",
compressible: true
},
"application/vnd.dna": {
source: "iana",
extensions: ["dna"]
},
"application/vnd.document+json": {
source: "iana",
compressible: true
},
"application/vnd.dolby.mlp": {
source: "apache",
extensions: ["mlp"]
},
"application/vnd.dolby.mobile.1": {
source: "iana"
},
"application/vnd.dolby.mobile.2": {
source: "iana"
},
"application/vnd.doremir.scorecloud-binary-document": {
source: "iana"
},
"application/vnd.dpgraph": {
source: "iana",
extensions: ["dpg"]
},
"application/vnd.dreamfactory": {
source: "iana",
extensions: ["dfac"]
},
"application/vnd.drive+json": {
source: "iana",
compressible: true
},
"application/vnd.ds-keypoint": {
source: "apache",
extensions: ["kpxx"]
},
"application/vnd.dtg.local": {
source: "iana"
},
"application/vnd.dtg.local.flash": {
source: "iana"
},
"application/vnd.dtg.local.html": {
source: "iana"
},
"application/vnd.dvb.ait": {
source: "iana",
extensions: ["ait"]
},
"application/vnd.dvb.dvbisl+xml": {
source: "iana",
compressible: true
},
"application/vnd.dvb.dvbj": {
source: "iana"
},
"application/vnd.dvb.esgcontainer": {
source: "iana"
},
"application/vnd.dvb.ipdcdftnotifaccess": {
source: "iana"
},
"application/vnd.dvb.ipdcesgaccess": {
source: "iana"
},
"application/vnd.dvb.ipdcesgaccess2": {
source: "iana"
},
"application/vnd.dvb.ipdcesgpdd": {
source: "iana"
},
"application/vnd.dvb.ipdcroaming": {
source: "iana"
},
"application/vnd.dvb.iptv.alfec-base": {
source: "iana"
},
"application/vnd.dvb.iptv.alfec-enhancement": {
source: "iana"
},
"application/vnd.dvb.notif-aggregate-root+xml": {
source: "iana",
compressible: true
},
"application/vnd.dvb.notif-container+xml": {
source: "iana",
compressible: true
},
"application/vnd.dvb.notif-generic+xml": {
source: "iana",
compressible: true
},
"application/vnd.dvb.notif-ia-msglist+xml": {
source: "iana",
compressible: true
},
"application/vnd.dvb.notif-ia-registration-request+xml": {
source: "iana",
compressible: true
},
"application/vnd.dvb.notif-ia-registration-response+xml": {
source: "iana",
compressible: true
},
"application/vnd.dvb.notif-init+xml": {
source: "iana",
compressible: true
},
"application/vnd.dvb.pfr": {
source: "iana"
},
"application/vnd.dvb.service": {
source: "iana",
extensions: ["svc"]
},
"application/vnd.dxr": {
source: "iana"
},
"application/vnd.dynageo": {
source: "iana",
extensions: ["geo"]
},
"application/vnd.dzr": {
source: "iana"
},
"application/vnd.easykaraoke.cdgdownload": {
source: "iana"
},
"application/vnd.ecdis-update": {
source: "iana"
},
"application/vnd.ecip.rlp": {
source: "iana"
},
"application/vnd.eclipse.ditto+json": {
source: "iana",
compressible: true
},
"application/vnd.ecowin.chart": {
source: "iana",
extensions: ["mag"]
},
"application/vnd.ecowin.filerequest": {
source: "iana"
},
"application/vnd.ecowin.fileupdate": {
source: "iana"
},
"application/vnd.ecowin.series": {
source: "iana"
},
"application/vnd.ecowin.seriesrequest": {
source: "iana"
},
"application/vnd.ecowin.seriesupdate": {
source: "iana"
},
"application/vnd.efi.img": {
source: "iana"
},
"application/vnd.efi.iso": {
source: "iana"
},
"application/vnd.eln+zip": {
source: "iana",
compressible: false
},
"application/vnd.emclient.accessrequest+xml": {
source: "iana",
compressible: true
},
"application/vnd.enliven": {
source: "iana",
extensions: ["nml"]
},
"application/vnd.enphase.envoy": {
source: "iana"
},
"application/vnd.eprints.data+xml": {
source: "iana",
compressible: true
},
"application/vnd.epson.esf": {
source: "iana",
extensions: ["esf"]
},
"application/vnd.epson.msf": {
source: "iana",
extensions: ["msf"]
},
"application/vnd.epson.quickanime": {
source: "iana",
extensions: ["qam"]
},
"application/vnd.epson.salt": {
source: "iana",
extensions: ["slt"]
},
"application/vnd.epson.ssf": {
source: "iana",
extensions: ["ssf"]
},
"application/vnd.ericsson.quickcall": {
source: "iana"
},
"application/vnd.erofs": {
source: "iana"
},
"application/vnd.espass-espass+zip": {
source: "iana",
compressible: false
},
"application/vnd.eszigno3+xml": {
source: "iana",
compressible: true,
extensions: ["es3", "et3"]
},
"application/vnd.etsi.aoc+xml": {
source: "iana",
compressible: true
},
"application/vnd.etsi.asic-e+zip": {
source: "iana",
compressible: false
},
"application/vnd.etsi.asic-s+zip": {
source: "iana",
compressible: false
},
"application/vnd.etsi.cug+xml": {
source: "iana",
compressible: true
},
"application/vnd.etsi.iptvcommand+xml": {
source: "iana",
compressible: true
},
"application/vnd.etsi.iptvdiscovery+xml": {
source: "iana",
compressible: true
},
"application/vnd.etsi.iptvprofile+xml": {
source: "iana",
compressible: true
},
"application/vnd.etsi.iptvsad-bc+xml": {
source: "iana",
compressible: true
},
"application/vnd.etsi.iptvsad-cod+xml": {
source: "iana",
compressible: true
},
"application/vnd.etsi.iptvsad-npvr+xml": {
source: "iana",
compressible: true
},
"application/vnd.etsi.iptvservice+xml": {
source: "iana",
compressible: true
},
"application/vnd.etsi.iptvsync+xml": {
source: "iana",
compressible: true
},
"application/vnd.etsi.iptvueprofile+xml": {
source: "iana",
compressible: true
},
"application/vnd.etsi.mcid+xml": {
source: "iana",
compressible: true
},
"application/vnd.etsi.mheg5": {
source: "iana"
},
"application/vnd.etsi.overload-control-policy-dataset+xml": {
source: "iana",
compressible: true
},
"application/vnd.etsi.pstn+xml": {
source: "iana",
compressible: true
},
"application/vnd.etsi.sci+xml": {
source: "iana",
compressible: true
},
"application/vnd.etsi.simservs+xml": {
source: "iana",
compressible: true
},
"application/vnd.etsi.timestamp-token": {
source: "iana"
},
"application/vnd.etsi.tsl+xml": {
source: "iana",
compressible: true
},
"application/vnd.etsi.tsl.der": {
source: "iana"
},
"application/vnd.eu.kasparian.car+json": {
source: "iana",
compressible: true
},
"application/vnd.eudora.data": {
source: "iana"
},
"application/vnd.evolv.ecig.profile": {
source: "iana"
},
"application/vnd.evolv.ecig.settings": {
source: "iana"
},
"application/vnd.evolv.ecig.theme": {
source: "iana"
},
"application/vnd.exstream-empower+zip": {
source: "iana",
compressible: false
},
"application/vnd.exstream-package": {
source: "iana"
},
"application/vnd.ezpix-album": {
source: "iana",
extensions: ["ez2"]
},
"application/vnd.ezpix-package": {
source: "iana",
extensions: ["ez3"]
},
"application/vnd.f-secure.mobile": {
source: "iana"
},
"application/vnd.familysearch.gedcom+zip": {
source: "iana",
compressible: false
},
"application/vnd.fastcopy-disk-image": {
source: "iana"
},
"application/vnd.fdf": {
source: "apache",
extensions: ["fdf"]
},
"application/vnd.fdsn.mseed": {
source: "iana",
extensions: ["mseed"]
},
"application/vnd.fdsn.seed": {
source: "iana",
extensions: ["seed", "dataless"]
},
"application/vnd.fdsn.stationxml+xml": {
source: "iana",
charset: "XML-BASED",
compressible: true
},
"application/vnd.ffsns": {
source: "iana"
},
"application/vnd.ficlab.flb+zip": {
source: "iana",
compressible: false
},
"application/vnd.filmit.zfc": {
source: "iana"
},
"application/vnd.fints": {
source: "iana"
},
"application/vnd.firemonkeys.cloudcell": {
source: "iana"
},
"application/vnd.flographit": {
source: "iana",
extensions: ["gph"]
},
"application/vnd.fluxtime.clip": {
source: "iana",
extensions: ["ftc"]
},
"application/vnd.font-fontforge-sfd": {
source: "iana"
},
"application/vnd.framemaker": {
source: "iana",
extensions: ["fm", "frame", "maker", "book"]
},
"application/vnd.freelog.comic": {
source: "iana"
},
"application/vnd.frogans.fnc": {
source: "apache",
extensions: ["fnc"]
},
"application/vnd.frogans.ltf": {
source: "apache",
extensions: ["ltf"]
},
"application/vnd.fsc.weblaunch": {
source: "iana",
extensions: ["fsc"]
},
"application/vnd.fujifilm.fb.docuworks": {
source: "iana"
},
"application/vnd.fujifilm.fb.docuworks.binder": {
source: "iana"
},
"application/vnd.fujifilm.fb.docuworks.container": {
source: "iana"
},
"application/vnd.fujifilm.fb.jfi+xml": {
source: "iana",
compressible: true
},
"application/vnd.fujitsu.oasys": {
source: "iana",
extensions: ["oas"]
},
"application/vnd.fujitsu.oasys2": {
source: "iana",
extensions: ["oa2"]
},
"application/vnd.fujitsu.oasys3": {
source: "iana",
extensions: ["oa3"]
},
"application/vnd.fujitsu.oasysgp": {
source: "iana",
extensions: ["fg5"]
},
"application/vnd.fujitsu.oasysprs": {
source: "iana",
extensions: ["bh2"]
},
"application/vnd.fujixerox.art-ex": {
source: "iana"
},
"application/vnd.fujixerox.art4": {
source: "iana"
},
"application/vnd.fujixerox.ddd": {
source: "iana",
extensions: ["ddd"]
},
"application/vnd.fujixerox.docuworks": {
source: "iana",
extensions: ["xdw"]
},
"application/vnd.fujixerox.docuworks.binder": {
source: "iana",
extensions: ["xbd"]
},
"application/vnd.fujixerox.docuworks.container": {
source: "iana"
},
"application/vnd.fujixerox.hbpl": {
source: "iana"
},
"application/vnd.fut-misnet": {
source: "iana"
},
"application/vnd.futoin+cbor": {
source: "iana"
},
"application/vnd.futoin+json": {
source: "iana",
compressible: true
},
"application/vnd.fuzzysheet": {
source: "iana",
extensions: ["fzs"]
},
"application/vnd.ga4gh.passport+jwt": {
source: "iana"
},
"application/vnd.genomatix.tuxedo": {
source: "iana",
extensions: ["txd"]
},
"application/vnd.genozip": {
source: "iana"
},
"application/vnd.gentics.grd+json": {
source: "iana",
compressible: true
},
"application/vnd.gentoo.catmetadata+xml": {
source: "iana",
compressible: true
},
"application/vnd.gentoo.ebuild": {
source: "iana"
},
"application/vnd.gentoo.eclass": {
source: "iana"
},
"application/vnd.gentoo.gpkg": {
source: "iana"
},
"application/vnd.gentoo.manifest": {
source: "iana"
},
"application/vnd.gentoo.pkgmetadata+xml": {
source: "iana",
compressible: true
},
"application/vnd.gentoo.xpak": {
source: "iana"
},
"application/vnd.geo+json": {
source: "apache",
compressible: true
},
"application/vnd.geocube+xml": {
source: "apache",
compressible: true
},
"application/vnd.geogebra.file": {
source: "iana",
extensions: ["ggb"]
},
"application/vnd.geogebra.pinboard": {
source: "iana"
},
"application/vnd.geogebra.slides": {
source: "iana",
extensions: ["ggs"]
},
"application/vnd.geogebra.tool": {
source: "iana",
extensions: ["ggt"]
},
"application/vnd.geometry-explorer": {
source: "iana",
extensions: ["gex", "gre"]
},
"application/vnd.geonext": {
source: "iana",
extensions: ["gxt"]
},
"application/vnd.geoplan": {
source: "iana",
extensions: ["g2w"]
},
"application/vnd.geospace": {
source: "iana",
extensions: ["g3w"]
},
"application/vnd.gerber": {
source: "iana"
},
"application/vnd.globalplatform.card-content-mgt": {
source: "iana"
},
"application/vnd.globalplatform.card-content-mgt-response": {
source: "iana"
},
"application/vnd.gmx": {
source: "iana",
extensions: ["gmx"]
},
"application/vnd.gnu.taler.exchange+json": {
source: "iana",
compressible: true
},
"application/vnd.gnu.taler.merchant+json": {
source: "iana",
compressible: true
},
"application/vnd.google-apps.audio": {},
"application/vnd.google-apps.document": {
compressible: false,
extensions: ["gdoc"]
},
"application/vnd.google-apps.drawing": {
compressible: false,
extensions: ["gdraw"]
},
"application/vnd.google-apps.drive-sdk": {
compressible: false
},
"application/vnd.google-apps.file": {},
"application/vnd.google-apps.folder": {
compressible: false
},
"application/vnd.google-apps.form": {
compressible: false,
extensions: ["gform"]
},
"application/vnd.google-apps.fusiontable": {},
"application/vnd.google-apps.jam": {
compressible: false,
extensions: ["gjam"]
},
"application/vnd.google-apps.mail-layout": {},
"application/vnd.google-apps.map": {
compressible: false,
extensions: ["gmap"]
},
"application/vnd.google-apps.photo": {},
"application/vnd.google-apps.presentation": {
compressible: false,
extensions: ["gslides"]
},
"application/vnd.google-apps.script": {
compressible: false,
extensions: ["gscript"]
},
"application/vnd.google-apps.shortcut": {},
"application/vnd.google-apps.site": {
compressible: false,
extensions: ["gsite"]
},
"application/vnd.google-apps.spreadsheet": {
compressible: false,
extensions: ["gsheet"]
},
"application/vnd.google-apps.unknown": {},
"application/vnd.google-apps.video": {},
"application/vnd.google-earth.kml+xml": {
source: "iana",
compressible: true,
extensions: ["kml"]
},
"application/vnd.google-earth.kmz": {
source: "iana",
compressible: false,
extensions: ["kmz"]
},
"application/vnd.gov.sk.e-form+xml": {
source: "apache",
compressible: true
},
"application/vnd.gov.sk.e-form+zip": {
source: "iana",
compressible: false
},
"application/vnd.gov.sk.xmldatacontainer+xml": {
source: "iana",
compressible: true,
extensions: ["xdcf"]
},
"application/vnd.gpxsee.map+xml": {
source: "iana",
compressible: true
},
"application/vnd.grafeq": {
source: "iana",
extensions: ["gqf", "gqs"]
},
"application/vnd.gridmp": {
source: "iana"
},
"application/vnd.groove-account": {
source: "iana",
extensions: ["gac"]
},
"application/vnd.groove-help": {
source: "iana",
extensions: ["ghf"]
},
"application/vnd.groove-identity-message": {
source: "iana",
extensions: ["gim"]
},
"application/vnd.groove-injector": {
source: "iana",
extensions: ["grv"]
},
"application/vnd.groove-tool-message": {
source: "iana",
extensions: ["gtm"]
},
"application/vnd.groove-tool-template": {
source: "iana",
extensions: ["tpl"]
},
"application/vnd.groove-vcard": {
source: "iana",
extensions: ["vcg"]
},
"application/vnd.hal+json": {
source: "iana",
compressible: true
},
"application/vnd.hal+xml": {
source: "iana",
compressible: true,
extensions: ["hal"]
},
"application/vnd.handheld-entertainment+xml": {
source: "iana",
compressible: true,
extensions: ["zmm"]
},
"application/vnd.hbci": {
source: "iana",
extensions: ["hbci"]
},
"application/vnd.hc+json": {
source: "iana",
compressible: true
},
"application/vnd.hcl-bireports": {
source: "iana"
},
"application/vnd.hdt": {
source: "iana"
},
"application/vnd.heroku+json": {
source: "iana",
compressible: true
},
"application/vnd.hhe.lesson-player": {
source: "iana",
extensions: ["les"]
},
"application/vnd.hp-hpgl": {
source: "iana",
extensions: ["hpgl"]
},
"application/vnd.hp-hpid": {
source: "iana",
extensions: ["hpid"]
},
"application/vnd.hp-hps": {
source: "iana",
extensions: ["hps"]
},
"application/vnd.hp-jlyt": {
source: "iana",
extensions: ["jlt"]
},
"application/vnd.hp-pcl": {
source: "iana",
extensions: ["pcl"]
},
"application/vnd.hp-pclxl": {
source: "iana",
extensions: ["pclxl"]
},
"application/vnd.hsl": {
source: "iana"
},
"application/vnd.httphone": {
source: "iana"
},
"application/vnd.hydrostatix.sof-data": {
source: "iana",
extensions: ["sfd-hdstx"]
},
"application/vnd.hyper+json": {
source: "iana",
compressible: true
},
"application/vnd.hyper-item+json": {
source: "iana",
compressible: true
},
"application/vnd.hyperdrive+json": {
source: "iana",
compressible: true
},
"application/vnd.hzn-3d-crossword": {
source: "iana"
},
"application/vnd.ibm.afplinedata": {
source: "apache"
},
"application/vnd.ibm.electronic-media": {
source: "iana"
},
"application/vnd.ibm.minipay": {
source: "iana",
extensions: ["mpy"]
},
"application/vnd.ibm.modcap": {
source: "apache",
extensions: ["afp", "listafp", "list3820"]
},
"application/vnd.ibm.rights-management": {
source: "iana",
extensions: ["irm"]
},
"application/vnd.ibm.secure-container": {
source: "iana",
extensions: ["sc"]
},
"application/vnd.iccprofile": {
source: "iana",
extensions: ["icc", "icm"]
},
"application/vnd.ieee.1905": {
source: "iana"
},
"application/vnd.igloader": {
source: "iana",
extensions: ["igl"]
},
"application/vnd.imagemeter.folder+zip": {
source: "iana",
compressible: false
},
"application/vnd.imagemeter.image+zip": {
source: "iana",
compressible: false
},
"application/vnd.immervision-ivp": {
source: "iana",
extensions: ["ivp"]
},
"application/vnd.immervision-ivu": {
source: "iana",
extensions: ["ivu"]
},
"application/vnd.ims.imsccv1p1": {
source: "iana"
},
"application/vnd.ims.imsccv1p2": {
source: "iana"
},
"application/vnd.ims.imsccv1p3": {
source: "iana"
},
"application/vnd.ims.lis.v2.result+json": {
source: "iana",
compressible: true
},
"application/vnd.ims.lti.v2.toolconsumerprofile+json": {
source: "iana",
compressible: true
},
"application/vnd.ims.lti.v2.toolproxy+json": {
source: "iana",
compressible: true
},
"application/vnd.ims.lti.v2.toolproxy.id+json": {
source: "iana",
compressible: true
},
"application/vnd.ims.lti.v2.toolsettings+json": {
source: "iana",
compressible: true
},
"application/vnd.ims.lti.v2.toolsettings.simple+json": {
source: "iana",
compressible: true
},
"application/vnd.informedcontrol.rms+xml": {
source: "iana",
compressible: true
},
"application/vnd.informix-visionary": {
source: "apache"
},
"application/vnd.infotech.project": {
source: "iana"
},
"application/vnd.infotech.project+xml": {
source: "iana",
compressible: true
},
"application/vnd.innopath.wamp.notification": {
source: "iana"
},
"application/vnd.insors.igm": {
source: "iana",
extensions: ["igm"]
},
"application/vnd.intercon.formnet": {
source: "iana",
extensions: ["xpw", "xpx"]
},
"application/vnd.intergeo": {
source: "iana",
extensions: ["i2g"]
},
"application/vnd.intertrust.digibox": {
source: "iana"
},
"application/vnd.intertrust.nncp": {
source: "iana"
},
"application/vnd.intu.qbo": {
source: "iana",
extensions: ["qbo"]
},
"application/vnd.intu.qfx": {
source: "iana",
extensions: ["qfx"]
},
"application/vnd.ipfs.ipns-record": {
source: "iana"
},
"application/vnd.ipld.car": {
source: "iana"
},
"application/vnd.ipld.dag-cbor": {
source: "iana"
},
"application/vnd.ipld.dag-json": {
source: "iana"
},
"application/vnd.ipld.raw": {
source: "iana"
},
"application/vnd.iptc.g2.catalogitem+xml": {
source: "iana",
compressible: true
},
"application/vnd.iptc.g2.conceptitem+xml": {
source: "iana",
compressible: true
},
"application/vnd.iptc.g2.knowledgeitem+xml": {
source: "iana",
compressible: true
},
"application/vnd.iptc.g2.newsitem+xml": {
source: "iana",
compressible: true
},
"application/vnd.iptc.g2.newsmessage+xml": {
source: "iana",
compressible: true
},
"application/vnd.iptc.g2.packageitem+xml": {
source: "iana",
compressible: true
},
"application/vnd.iptc.g2.planningitem+xml": {
source: "iana",
compressible: true
},
"application/vnd.ipunplugged.rcprofile": {
source: "iana",
extensions: ["rcprofile"]
},
"application/vnd.irepository.package+xml": {
source: "iana",
compressible: true,
extensions: ["irp"]
},
"application/vnd.is-xpr": {
source: "iana",
extensions: ["xpr"]
},
"application/vnd.isac.fcs": {
source: "iana",
extensions: ["fcs"]
},
"application/vnd.iso11783-10+zip": {
source: "iana",
compressible: false
},
"application/vnd.jam": {
source: "iana",
extensions: ["jam"]
},
"application/vnd.japannet-directory-service": {
source: "iana"
},
"application/vnd.japannet-jpnstore-wakeup": {
source: "iana"
},
"application/vnd.japannet-payment-wakeup": {
source: "iana"
},
"application/vnd.japannet-registration": {
source: "iana"
},
"application/vnd.japannet-registration-wakeup": {
source: "iana"
},
"application/vnd.japannet-setstore-wakeup": {
source: "iana"
},
"application/vnd.japannet-verification": {
source: "iana"
},
"application/vnd.japannet-verification-wakeup": {
source: "iana"
},
"application/vnd.jcp.javame.midlet-rms": {
source: "iana",
extensions: ["rms"]
},
"application/vnd.jisp": {
source: "iana",
extensions: ["jisp"]
},
"application/vnd.joost.joda-archive": {
source: "iana",
extensions: ["joda"]
},
"application/vnd.jsk.isdn-ngn": {
source: "iana"
},
"application/vnd.kahootz": {
source: "iana",
extensions: ["ktz", "ktr"]
},
"application/vnd.kde.karbon": {
source: "iana",
extensions: ["karbon"]
},
"application/vnd.kde.kchart": {
source: "iana",
extensions: ["chrt"]
},
"application/vnd.kde.kformula": {
source: "iana",
extensions: ["kfo"]
},
"application/vnd.kde.kivio": {
source: "iana",
extensions: ["flw"]
},
"application/vnd.kde.kontour": {
source: "iana",
extensions: ["kon"]
},
"application/vnd.kde.kpresenter": {
source: "iana",
extensions: ["kpr", "kpt"]
},
"application/vnd.kde.kspread": {
source: "iana",
extensions: ["ksp"]
},
"application/vnd.kde.kword": {
source: "iana",
extensions: ["kwd", "kwt"]
},
"application/vnd.kdl": {
source: "iana"
},
"application/vnd.kenameaapp": {
source: "iana",
extensions: ["htke"]
},
"application/vnd.keyman.kmp+zip": {
source: "iana",
compressible: false
},
"application/vnd.keyman.kmx": {
source: "iana"
},
"application/vnd.kidspiration": {
source: "iana",
extensions: ["kia"]
},
"application/vnd.kinar": {
source: "iana",
extensions: ["kne", "knp"]
},
"application/vnd.koan": {
source: "iana",
extensions: ["skp", "skd", "skt", "skm"]
},
"application/vnd.kodak-descriptor": {
source: "iana",
extensions: ["sse"]
},
"application/vnd.las": {
source: "iana"
},
"application/vnd.las.las+json": {
source: "iana",
compressible: true
},
"application/vnd.las.las+xml": {
source: "iana",
compressible: true,
extensions: ["lasxml"]
},
"application/vnd.laszip": {
source: "iana"
},
"application/vnd.ldev.productlicensing": {
source: "iana"
},
"application/vnd.leap+json": {
source: "iana",
compressible: true
},
"application/vnd.liberty-request+xml": {
source: "iana",
compressible: true
},
"application/vnd.llamagraphics.life-balance.desktop": {
source: "iana",
extensions: ["lbd"]
},
"application/vnd.llamagraphics.life-balance.exchange+xml": {
source: "iana",
compressible: true,
extensions: ["lbe"]
},
"application/vnd.logipipe.circuit+zip": {
source: "iana",
compressible: false
},
"application/vnd.loom": {
source: "iana"
},
"application/vnd.lotus-1-2-3": {
source: "iana",
extensions: ["123"]
},
"application/vnd.lotus-approach": {
source: "iana",
extensions: ["apr"]
},
"application/vnd.lotus-freelance": {
source: "iana",
extensions: ["pre"]
},
"application/vnd.lotus-notes": {
source: "iana",
extensions: ["nsf"]
},
"application/vnd.lotus-organizer": {
source: "iana",
extensions: ["org"]
},
"application/vnd.lotus-screencam": {
source: "iana",
extensions: ["scm"]
},
"application/vnd.lotus-wordpro": {
source: "iana",
extensions: ["lwp"]
},
"application/vnd.macports.portpkg": {
source: "iana",
extensions: ["portpkg"]
},
"application/vnd.mapbox-vector-tile": {
source: "iana",
extensions: ["mvt"]
},
"application/vnd.marlin.drm.actiontoken+xml": {
source: "iana",
compressible: true
},
"application/vnd.marlin.drm.conftoken+xml": {
source: "iana",
compressible: true
},
"application/vnd.marlin.drm.license+xml": {
source: "iana",
compressible: true
},
"application/vnd.marlin.drm.mdcf": {
source: "iana"
},
"application/vnd.mason+json": {
source: "iana",
compressible: true
},
"application/vnd.maxar.archive.3tz+zip": {
source: "iana",
compressible: false
},
"application/vnd.maxmind.maxmind-db": {
source: "iana"
},
"application/vnd.mcd": {
source: "iana",
extensions: ["mcd"]
},
"application/vnd.mdl": {
source: "iana"
},
"application/vnd.mdl-mbsdf": {
source: "iana"
},
"application/vnd.medcalcdata": {
source: "iana",
extensions: ["mc1"]
},
"application/vnd.mediastation.cdkey": {
source: "iana",
extensions: ["cdkey"]
},
"application/vnd.medicalholodeck.recordxr": {
source: "iana"
},
"application/vnd.meridian-slingshot": {
source: "iana"
},
"application/vnd.mermaid": {
source: "iana"
},
"application/vnd.mfer": {
source: "iana",
extensions: ["mwf"]
},
"application/vnd.mfmp": {
source: "iana",
extensions: ["mfm"]
},
"application/vnd.micro+json": {
source: "iana",
compressible: true
},
"application/vnd.micrografx.flo": {
source: "iana",
extensions: ["flo"]
},
"application/vnd.micrografx.igx": {
source: "iana",
extensions: ["igx"]
},
"application/vnd.microsoft.portable-executable": {
source: "iana"
},
"application/vnd.microsoft.windows.thumbnail-cache": {
source: "iana"
},
"application/vnd.miele+json": {
source: "iana",
compressible: true
},
"application/vnd.mif": {
source: "iana",
extensions: ["mif"]
},
"application/vnd.minisoft-hp3000-save": {
source: "iana"
},
"application/vnd.mitsubishi.misty-guard.trustweb": {
source: "iana"
},
"application/vnd.mobius.daf": {
source: "iana",
extensions: ["daf"]
},
"application/vnd.mobius.dis": {
source: "iana",
extensions: ["dis"]
},
"application/vnd.mobius.mbk": {
source: "iana",
extensions: ["mbk"]
},
"application/vnd.mobius.mqy": {
source: "iana",
extensions: ["mqy"]
},
"application/vnd.mobius.msl": {
source: "iana",
extensions: ["msl"]
},
"application/vnd.mobius.plc": {
source: "iana",
extensions: ["plc"]
},
"application/vnd.mobius.txf": {
source: "iana",
extensions: ["txf"]
},
"application/vnd.modl": {
source: "iana"
},
"application/vnd.mophun.application": {
source: "iana",
extensions: ["mpn"]
},
"application/vnd.mophun.certificate": {
source: "iana",
extensions: ["mpc"]
},
"application/vnd.motorola.flexsuite": {
source: "iana"
},
"application/vnd.motorola.flexsuite.adsi": {
source: "iana"
},
"application/vnd.motorola.flexsuite.fis": {
source: "iana"
},
"application/vnd.motorola.flexsuite.gotap": {
source: "iana"
},
"application/vnd.motorola.flexsuite.kmr": {
source: "iana"
},
"application/vnd.motorola.flexsuite.ttc": {
source: "iana"
},
"application/vnd.motorola.flexsuite.wem": {
source: "iana"
},
"application/vnd.motorola.iprm": {
source: "iana"
},
"application/vnd.mozilla.xul+xml": {
source: "iana",
compressible: true,
extensions: ["xul"]
},
"application/vnd.ms-3mfdocument": {
source: "iana"
},
"application/vnd.ms-artgalry": {
source: "iana",
extensions: ["cil"]
},
"application/vnd.ms-asf": {
source: "iana"
},
"application/vnd.ms-cab-compressed": {
source: "iana",
extensions: ["cab"]
},
"application/vnd.ms-color.iccprofile": {
source: "apache"
},
"application/vnd.ms-excel": {
source: "iana",
compressible: false,
extensions: ["xls", "xlm", "xla", "xlc", "xlt", "xlw"]
},
"application/vnd.ms-excel.addin.macroenabled.12": {
source: "iana",
extensions: ["xlam"]
},
"application/vnd.ms-excel.sheet.binary.macroenabled.12": {
source: "iana",
extensions: ["xlsb"]
},
"application/vnd.ms-excel.sheet.macroenabled.12": {
source: "iana",
extensions: ["xlsm"]
},
"application/vnd.ms-excel.template.macroenabled.12": {
source: "iana",
extensions: ["xltm"]
},
"application/vnd.ms-fontobject": {
source: "iana",
compressible: true,
extensions: ["eot"]
},
"application/vnd.ms-htmlhelp": {
source: "iana",
extensions: ["chm"]
},
"application/vnd.ms-ims": {
source: "iana",
extensions: ["ims"]
},
"application/vnd.ms-lrm": {
source: "iana",
extensions: ["lrm"]
},
"application/vnd.ms-office.activex+xml": {
source: "iana",
compressible: true
},
"application/vnd.ms-officetheme": {
source: "iana",
extensions: ["thmx"]
},
"application/vnd.ms-opentype": {
source: "apache",
compressible: true
},
"application/vnd.ms-outlook": {
compressible: false,
extensions: ["msg"]
},
"application/vnd.ms-package.obfuscated-opentype": {
source: "apache"
},
"application/vnd.ms-pki.seccat": {
source: "apache",
extensions: ["cat"]
},
"application/vnd.ms-pki.stl": {
source: "apache",
extensions: ["stl"]
},
"application/vnd.ms-playready.initiator+xml": {
source: "iana",
compressible: true
},
"application/vnd.ms-powerpoint": {
source: "iana",
compressible: false,
extensions: ["ppt", "pps", "pot"]
},
"application/vnd.ms-powerpoint.addin.macroenabled.12": {
source: "iana",
extensions: ["ppam"]
},
"application/vnd.ms-powerpoint.presentation.macroenabled.12": {
source: "iana",
extensions: ["pptm"]
},
"application/vnd.ms-powerpoint.slide.macroenabled.12": {
source: "iana",
extensions: ["sldm"]
},
"application/vnd.ms-powerpoint.slideshow.macroenabled.12": {
source: "iana",
extensions: ["ppsm"]
},
"application/vnd.ms-powerpoint.template.macroenabled.12": {
source: "iana",
extensions: ["potm"]
},
"application/vnd.ms-printdevicecapabilities+xml": {
source: "iana",
compressible: true
},
"application/vnd.ms-printing.printticket+xml": {
source: "apache",
compressible: true
},
"application/vnd.ms-printschematicket+xml": {
source: "iana",
compressible: true
},
"application/vnd.ms-project": {
source: "iana",
extensions: ["mpp", "mpt"]
},
"application/vnd.ms-tnef": {
source: "iana"
},
"application/vnd.ms-visio.viewer": {
extensions: ["vdx"]
},
"application/vnd.ms-windows.devicepairing": {
source: "iana"
},
"application/vnd.ms-windows.nwprinting.oob": {
source: "iana"
},
"application/vnd.ms-windows.printerpairing": {
source: "iana"
},
"application/vnd.ms-windows.wsd.oob": {
source: "iana"
},
"application/vnd.ms-wmdrm.lic-chlg-req": {
source: "iana"
},
"application/vnd.ms-wmdrm.lic-resp": {
source: "iana"
},
"application/vnd.ms-wmdrm.meter-chlg-req": {
source: "iana"
},
"application/vnd.ms-wmdrm.meter-resp": {
source: "iana"
},
"application/vnd.ms-word.document.macroenabled.12": {
source: "iana",
extensions: ["docm"]
},
"application/vnd.ms-word.template.macroenabled.12": {
source: "iana",
extensions: ["dotm"]
},
"application/vnd.ms-works": {
source: "iana",
extensions: ["wps", "wks", "wcm", "wdb"]
},
"application/vnd.ms-wpl": {
source: "iana",
extensions: ["wpl"]
},
"application/vnd.ms-xpsdocument": {
source: "iana",
compressible: false,
extensions: ["xps"]
},
"application/vnd.msa-disk-image": {
source: "iana"
},
"application/vnd.mseq": {
source: "iana",
extensions: ["mseq"]
},
"application/vnd.msgpack": {
source: "iana"
},
"application/vnd.msign": {
source: "iana"
},
"application/vnd.multiad.creator": {
source: "iana"
},
"application/vnd.multiad.creator.cif": {
source: "iana"
},
"application/vnd.music-niff": {
source: "iana"
},
"application/vnd.musician": {
source: "iana",
extensions: ["mus"]
},
"application/vnd.muvee.style": {
source: "iana",
extensions: ["msty"]
},
"application/vnd.mynfc": {
source: "iana",
extensions: ["taglet"]
},
"application/vnd.nacamar.ybrid+json": {
source: "iana",
compressible: true
},
"application/vnd.nato.bindingdataobject+cbor": {
source: "iana"
},
"application/vnd.nato.bindingdataobject+json": {
source: "iana",
compressible: true
},
"application/vnd.nato.bindingdataobject+xml": {
source: "iana",
compressible: true,
extensions: ["bdo"]
},
"application/vnd.nato.openxmlformats-package.iepd+zip": {
source: "iana",
compressible: false
},
"application/vnd.ncd.control": {
source: "iana"
},
"application/vnd.ncd.reference": {
source: "iana"
},
"application/vnd.nearst.inv+json": {
source: "iana",
compressible: true
},
"application/vnd.nebumind.line": {
source: "iana"
},
"application/vnd.nervana": {
source: "iana"
},
"application/vnd.netfpx": {
source: "iana"
},
"application/vnd.neurolanguage.nlu": {
source: "iana",
extensions: ["nlu"]
},
"application/vnd.nimn": {
source: "iana"
},
"application/vnd.nintendo.nitro.rom": {
source: "iana"
},
"application/vnd.nintendo.snes.rom": {
source: "iana"
},
"application/vnd.nitf": {
source: "iana",
extensions: ["ntf", "nitf"]
},
"application/vnd.noblenet-directory": {
source: "iana",
extensions: ["nnd"]
},
"application/vnd.noblenet-sealer": {
source: "iana",
extensions: ["nns"]
},
"application/vnd.noblenet-web": {
source: "iana",
extensions: ["nnw"]
},
"application/vnd.nokia.catalogs": {
source: "iana"
},
"application/vnd.nokia.conml+wbxml": {
source: "iana"
},
"application/vnd.nokia.conml+xml": {
source: "iana",
compressible: true
},
"application/vnd.nokia.iptv.config+xml": {
source: "iana",
compressible: true
},
"application/vnd.nokia.isds-radio-presets": {
source: "iana"
},
"application/vnd.nokia.landmark+wbxml": {
source: "iana"
},
"application/vnd.nokia.landmark+xml": {
source: "iana",
compressible: true
},
"application/vnd.nokia.landmarkcollection+xml": {
source: "iana",
compressible: true
},
"application/vnd.nokia.n-gage.ac+xml": {
source: "iana",
compressible: true,
extensions: ["ac"]
},
"application/vnd.nokia.n-gage.data": {
source: "iana",
extensions: ["ngdat"]
},
"application/vnd.nokia.n-gage.symbian.install": {
source: "apache",
extensions: ["n-gage"]
},
"application/vnd.nokia.ncd": {
source: "iana"
},
"application/vnd.nokia.pcd+wbxml": {
source: "iana"
},
"application/vnd.nokia.pcd+xml": {
source: "iana",
compressible: true
},
"application/vnd.nokia.radio-preset": {
source: "iana",
extensions: ["rpst"]
},
"application/vnd.nokia.radio-presets": {
source: "iana",
extensions: ["rpss"]
},
"application/vnd.novadigm.edm": {
source: "iana",
extensions: ["edm"]
},
"application/vnd.novadigm.edx": {
source: "iana",
extensions: ["edx"]
},
"application/vnd.novadigm.ext": {
source: "iana",
extensions: ["ext"]
},
"application/vnd.ntt-local.content-share": {
source: "iana"
},
"application/vnd.ntt-local.file-transfer": {
source: "iana"
},
"application/vnd.ntt-local.ogw_remote-access": {
source: "iana"
},
"application/vnd.ntt-local.sip-ta_remote": {
source: "iana"
},
"application/vnd.ntt-local.sip-ta_tcp_stream": {
source: "iana"
},
"application/vnd.oai.workflows": {
source: "iana"
},
"application/vnd.oai.workflows+json": {
source: "iana",
compressible: true
},
"application/vnd.oai.workflows+yaml": {
source: "iana"
},
"application/vnd.oasis.opendocument.base": {
source: "iana"
},
"application/vnd.oasis.opendocument.chart": {
source: "iana",
extensions: ["odc"]
},
"application/vnd.oasis.opendocument.chart-template": {
source: "iana",
extensions: ["otc"]
},
"application/vnd.oasis.opendocument.database": {
source: "apache",
extensions: ["odb"]
},
"application/vnd.oasis.opendocument.formula": {
source: "iana",
extensions: ["odf"]
},
"application/vnd.oasis.opendocument.formula-template": {
source: "iana",
extensions: ["odft"]
},
"application/vnd.oasis.opendocument.graphics": {
source: "iana",
compressible: false,
extensions: ["odg"]
},
"application/vnd.oasis.opendocument.graphics-template": {
source: "iana",
extensions: ["otg"]
},
"application/vnd.oasis.opendocument.image": {
source: "iana",
extensions: ["odi"]
},
"application/vnd.oasis.opendocument.image-template": {
source: "iana",
extensions: ["oti"]
},
"application/vnd.oasis.opendocument.presentation": {
source: "iana",
compressible: false,
extensions: ["odp"]
},
"application/vnd.oasis.opendocument.presentation-template": {
source: "iana",
extensions: ["otp"]
},
"application/vnd.oasis.opendocument.spreadsheet": {
source: "iana",
compressible: false,
extensions: ["ods"]
},
"application/vnd.oasis.opendocument.spreadsheet-template": {
source: "iana",
extensions: ["ots"]
},
"application/vnd.oasis.opendocument.text": {
source: "iana",
compressible: false,
extensions: ["odt"]
},
"application/vnd.oasis.opendocument.text-master": {
source: "iana",
extensions: ["odm"]
},
"application/vnd.oasis.opendocument.text-master-template": {
source: "iana"
},
"application/vnd.oasis.opendocument.text-template": {
source: "iana",
extensions: ["ott"]
},
"application/vnd.oasis.opendocument.text-web": {
source: "iana",
extensions: ["oth"]
},
"application/vnd.obn": {
source: "iana"
},
"application/vnd.ocf+cbor": {
source: "iana"
},
"application/vnd.oci.image.manifest.v1+json": {
source: "iana",
compressible: true
},
"application/vnd.oftn.l10n+json": {
source: "iana",
compressible: true
},
"application/vnd.oipf.contentaccessdownload+xml": {
source: "iana",
compressible: true
},
"application/vnd.oipf.contentaccessstreaming+xml": {
source: "iana",
compressible: true
},
"application/vnd.oipf.cspg-hexbinary": {
source: "iana"
},
"application/vnd.oipf.dae.svg+xml": {
source: "iana",
compressible: true
},
"application/vnd.oipf.dae.xhtml+xml": {
source: "iana",
compressible: true
},
"application/vnd.oipf.mippvcontrolmessage+xml": {
source: "iana",
compressible: true
},
"application/vnd.oipf.pae.gem": {
source: "iana"
},
"application/vnd.oipf.spdiscovery+xml": {
source: "iana",
compressible: true
},
"application/vnd.oipf.spdlist+xml": {
source: "iana",
compressible: true
},
"application/vnd.oipf.ueprofile+xml": {
source: "iana",
compressible: true
},
"application/vnd.oipf.userprofile+xml": {
source: "iana",
compressible: true
},
"application/vnd.olpc-sugar": {
source: "iana",
extensions: ["xo"]
},
"application/vnd.oma-scws-config": {
source: "iana"
},
"application/vnd.oma-scws-http-request": {
source: "iana"
},
"application/vnd.oma-scws-http-response": {
source: "iana"
},
"application/vnd.oma.bcast.associated-procedure-parameter+xml": {
source: "iana",
compressible: true
},
"application/vnd.oma.bcast.drm-trigger+xml": {
source: "apache",
compressible: true
},
"application/vnd.oma.bcast.imd+xml": {
source: "iana",
compressible: true
},
"application/vnd.oma.bcast.ltkm": {
source: "iana"
},
"application/vnd.oma.bcast.notification+xml": {
source: "iana",
compressible: true
},
"application/vnd.oma.bcast.provisioningtrigger": {
source: "iana"
},
"application/vnd.oma.bcast.sgboot": {
source: "iana"
},
"application/vnd.oma.bcast.sgdd+xml": {
source: "iana",
compressible: true
},
"application/vnd.oma.bcast.sgdu": {
source: "iana"
},
"application/vnd.oma.bcast.simple-symbol-container": {
source: "iana"
},
"application/vnd.oma.bcast.smartcard-trigger+xml": {
source: "apache",
compressible: true
},
"application/vnd.oma.bcast.sprov+xml": {
source: "iana",
compressible: true
},
"application/vnd.oma.bcast.stkm": {
source: "iana"
},
"application/vnd.oma.cab-address-book+xml": {
source: "iana",
compressible: true
},
"application/vnd.oma.cab-feature-handler+xml": {
source: "iana",
compressible: true
},
"application/vnd.oma.cab-pcc+xml": {
source: "iana",
compressible: true
},
"application/vnd.oma.cab-subs-invite+xml": {
source: "iana",
compressible: true
},
"application/vnd.oma.cab-user-prefs+xml": {
source: "iana",
compressible: true
},
"application/vnd.oma.dcd": {
source: "iana"
},
"application/vnd.oma.dcdc": {
source: "iana"
},
"application/vnd.oma.dd2+xml": {
source: "iana",
compressible: true,
extensions: ["dd2"]
},
"application/vnd.oma.drm.risd+xml": {
source: "iana",
compressible: true
},
"application/vnd.oma.group-usage-list+xml": {
source: "iana",
compressible: true
},
"application/vnd.oma.lwm2m+cbor": {
source: "iana"
},
"application/vnd.oma.lwm2m+json": {
source: "iana",
compressible: true
},
"application/vnd.oma.lwm2m+tlv": {
source: "iana"
},
"application/vnd.oma.pal+xml": {
source: "iana",
compressible: true
},
"application/vnd.oma.poc.detailed-progress-report+xml": {
source: "iana",
compressible: true
},
"application/vnd.oma.poc.final-report+xml": {
source: "iana",
compressible: true
},
"application/vnd.oma.poc.groups+xml": {
source: "iana",
compressible: true
},
"application/vnd.oma.poc.invocation-descriptor+xml": {
source: "iana",
compressible: true
},
"application/vnd.oma.poc.optimized-progress-report+xml": {
source: "iana",
compressible: true
},
"application/vnd.oma.push": {
source: "iana"
},
"application/vnd.oma.scidm.messages+xml": {
source: "iana",
compressible: true
},
"application/vnd.oma.xcap-directory+xml": {
source: "iana",
compressible: true
},
"application/vnd.omads-email+xml": {
source: "iana",
charset: "UTF-8",
compressible: true
},
"application/vnd.omads-file+xml": {
source: "iana",
charset: "UTF-8",
compressible: true
},
"application/vnd.omads-folder+xml": {
source: "iana",
charset: "UTF-8",
compressible: true
},
"application/vnd.omaloc-supl-init": {
source: "iana"
},
"application/vnd.onepager": {
source: "iana"
},
"application/vnd.onepagertamp": {
source: "iana"
},
"application/vnd.onepagertamx": {
source: "iana"
},
"application/vnd.onepagertat": {
source: "iana"
},
"application/vnd.onepagertatp": {
source: "iana"
},
"application/vnd.onepagertatx": {
source: "iana"
},
"application/vnd.onvif.metadata": {
source: "iana"
},
"application/vnd.openblox.game+xml": {
source: "iana",
compressible: true,
extensions: ["obgx"]
},
"application/vnd.openblox.game-binary": {
source: "iana"
},
"application/vnd.openeye.oeb": {
source: "iana"
},
"application/vnd.openofficeorg.extension": {
source: "apache",
extensions: ["oxt"]
},
"application/vnd.openstreetmap.data+xml": {
source: "iana",
compressible: true,
extensions: ["osm"]
},
"application/vnd.opentimestamps.ots": {
source: "iana"
},
"application/vnd.openvpi.dspx+json": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.custom-properties+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.customxmlproperties+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.drawing+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.drawingml.chart+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.drawingml.chartshapes+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.drawingml.diagramcolors+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.drawingml.diagramdata+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.drawingml.diagramlayout+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.drawingml.diagramstyle+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.extended-properties+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.presentationml.commentauthors+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.presentationml.comments+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.presentationml.handoutmaster+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.presentationml.notesmaster+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.presentationml.notesslide+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.presentationml.presentation": {
source: "iana",
compressible: false,
extensions: ["pptx"]
},
"application/vnd.openxmlformats-officedocument.presentationml.presentation.main+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.presentationml.presprops+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.presentationml.slide": {
source: "iana",
extensions: ["sldx"]
},
"application/vnd.openxmlformats-officedocument.presentationml.slide+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.presentationml.slidelayout+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.presentationml.slidemaster+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.presentationml.slideshow": {
source: "iana",
extensions: ["ppsx"]
},
"application/vnd.openxmlformats-officedocument.presentationml.slideshow.main+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.presentationml.slideupdateinfo+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.presentationml.tablestyles+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.presentationml.tags+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.presentationml.template": {
source: "iana",
extensions: ["potx"]
},
"application/vnd.openxmlformats-officedocument.presentationml.template.main+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.presentationml.viewprops+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.spreadsheetml.calcchain+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.spreadsheetml.chartsheet+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.spreadsheetml.comments+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.spreadsheetml.connections+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.spreadsheetml.dialogsheet+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.spreadsheetml.externallink+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.spreadsheetml.pivotcachedefinition+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.spreadsheetml.pivotcacherecords+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.spreadsheetml.pivottable+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.spreadsheetml.querytable+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.spreadsheetml.revisionheaders+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.spreadsheetml.revisionlog+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.spreadsheetml.sharedstrings+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet": {
source: "iana",
compressible: false,
extensions: ["xlsx"]
},
"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.spreadsheetml.sheetmetadata+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.spreadsheetml.table+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.spreadsheetml.tablesinglecells+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.spreadsheetml.template": {
source: "iana",
extensions: ["xltx"]
},
"application/vnd.openxmlformats-officedocument.spreadsheetml.template.main+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.spreadsheetml.usernames+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.spreadsheetml.volatiledependencies+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.theme+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.themeoverride+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.vmldrawing": {
source: "iana"
},
"application/vnd.openxmlformats-officedocument.wordprocessingml.comments+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.wordprocessingml.document": {
source: "iana",
compressible: false,
extensions: ["docx"]
},
"application/vnd.openxmlformats-officedocument.wordprocessingml.document.glossary+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.wordprocessingml.document.main+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.wordprocessingml.endnotes+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.wordprocessingml.fonttable+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.wordprocessingml.footer+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.wordprocessingml.footnotes+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.wordprocessingml.numbering+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.wordprocessingml.settings+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.wordprocessingml.styles+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.wordprocessingml.template": {
source: "iana",
extensions: ["dotx"]
},
"application/vnd.openxmlformats-officedocument.wordprocessingml.template.main+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-officedocument.wordprocessingml.websettings+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-package.core-properties+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-package.digital-signature-xmlsignature+xml": {
source: "iana",
compressible: true
},
"application/vnd.openxmlformats-package.relationships+xml": {
source: "iana",
compressible: true
},
"application/vnd.oracle.resource+json": {
source: "iana",
compressible: true
},
"application/vnd.orange.indata": {
source: "iana"
},
"application/vnd.osa.netdeploy": {
source: "iana"
},
"application/vnd.osgeo.mapguide.package": {
source: "iana",
extensions: ["mgp"]
},
"application/vnd.osgi.bundle": {
source: "iana"
},
"application/vnd.osgi.dp": {
source: "iana",
extensions: ["dp"]
},
"application/vnd.osgi.subsystem": {
source: "iana",
extensions: ["esa"]
},
"application/vnd.otps.ct-kip+xml": {
source: "iana",
compressible: true
},
"application/vnd.oxli.countgraph": {
source: "iana"
},
"application/vnd.pagerduty+json": {
source: "iana",
compressible: true
},
"application/vnd.palm": {
source: "iana",
extensions: ["pdb", "pqa", "oprc"]
},
"application/vnd.panoply": {
source: "iana"
},
"application/vnd.paos.xml": {
source: "iana"
},
"application/vnd.patentdive": {
source: "iana"
},
"application/vnd.patientecommsdoc": {
source: "iana"
},
"application/vnd.pawaafile": {
source: "iana",
extensions: ["paw"]
},
"application/vnd.pcos": {
source: "iana"
},
"application/vnd.pg.format": {
source: "iana",
extensions: ["str"]
},
"application/vnd.pg.osasli": {
source: "iana",
extensions: ["ei6"]
},
"application/vnd.piaccess.application-licence": {
source: "iana"
},
"application/vnd.picsel": {
source: "iana",
extensions: ["efif"]
},
"application/vnd.pmi.widget": {
source: "iana",
extensions: ["wg"]
},
"application/vnd.poc.group-advertisement+xml": {
source: "iana",
compressible: true
},
"application/vnd.pocketlearn": {
source: "iana",
extensions: ["plf"]
},
"application/vnd.powerbuilder6": {
source: "iana",
extensions: ["pbd"]
},
"application/vnd.powerbuilder6-s": {
source: "iana"
},
"application/vnd.powerbuilder7": {
source: "iana"
},
"application/vnd.powerbuilder7-s": {
source: "iana"
},
"application/vnd.powerbuilder75": {
source: "iana"
},
"application/vnd.powerbuilder75-s": {
source: "iana"
},
"application/vnd.preminet": {
source: "iana"
},
"application/vnd.previewsystems.box": {
source: "iana",
extensions: ["box"]
},
"application/vnd.procrate.brushset": {
extensions: ["brushset"]
},
"application/vnd.procreate.brush": {
extensions: ["brush"]
},
"application/vnd.procreate.dream": {
extensions: ["drm"]
},
"application/vnd.proteus.magazine": {
source: "iana",
extensions: ["mgz"]
},
"application/vnd.psfs": {
source: "iana"
},
"application/vnd.pt.mundusmundi": {
source: "iana"
},
"application/vnd.publishare-delta-tree": {
source: "iana",
extensions: ["qps"]
},
"application/vnd.pvi.ptid1": {
source: "iana",
extensions: ["ptid"]
},
"application/vnd.pwg-multiplexed": {
source: "iana"
},
"application/vnd.pwg-xhtml-print+xml": {
source: "iana",
compressible: true,
extensions: ["xhtm"]
},
"application/vnd.qualcomm.brew-app-res": {
source: "iana"
},
"application/vnd.quarantainenet": {
source: "iana"
},
"application/vnd.quark.quarkxpress": {
source: "iana",
extensions: ["qxd", "qxt", "qwd", "qwt", "qxl", "qxb"]
},
"application/vnd.quobject-quoxdocument": {
source: "iana"
},
"application/vnd.radisys.moml+xml": {
source: "iana",
compressible: true
},
"application/vnd.radisys.msml+xml": {
source: "iana",
compressible: true
},
"application/vnd.radisys.msml-audit+xml": {
source: "iana",
compressible: true
},
"application/vnd.radisys.msml-audit-conf+xml": {
source: "iana",
compressible: true
},
"application/vnd.radisys.msml-audit-conn+xml": {
source: "iana",
compressible: true
},
"application/vnd.radisys.msml-audit-dialog+xml": {
source: "iana",
compressible: true
},
"application/vnd.radisys.msml-audit-stream+xml": {
source: "iana",
compressible: true
},
"application/vnd.radisys.msml-conf+xml": {
source: "iana",
compressible: true
},
"application/vnd.radisys.msml-dialog+xml": {
source: "iana",
compressible: true
},
"application/vnd.radisys.msml-dialog-base+xml": {
source: "iana",
compressible: true
},
"application/vnd.radisys.msml-dialog-fax-detect+xml": {
source: "iana",
compressible: true
},
"application/vnd.radisys.msml-dialog-fax-sendrecv+xml": {
source: "iana",
compressible: true
},
"application/vnd.radisys.msml-dialog-group+xml": {
source: "iana",
compressible: true
},
"application/vnd.radisys.msml-dialog-speech+xml": {
source: "iana",
compressible: true
},
"application/vnd.radisys.msml-dialog-transform+xml": {
source: "iana",
compressible: true
},
"application/vnd.rainstor.data": {
source: "iana"
},
"application/vnd.rapid": {
source: "iana"
},
"application/vnd.rar": {
source: "iana",
extensions: ["rar"]
},
"application/vnd.realvnc.bed": {
source: "iana",
extensions: ["bed"]
},
"application/vnd.recordare.musicxml": {
source: "iana",
extensions: ["mxl"]
},
"application/vnd.recordare.musicxml+xml": {
source: "iana",
compressible: true,
extensions: ["musicxml"]
},
"application/vnd.relpipe": {
source: "iana"
},
"application/vnd.renlearn.rlprint": {
source: "iana"
},
"application/vnd.resilient.logic": {
source: "iana"
},
"application/vnd.restful+json": {
source: "iana",
compressible: true
},
"application/vnd.rig.cryptonote": {
source: "iana",
extensions: ["cryptonote"]
},
"application/vnd.rim.cod": {
source: "apache",
extensions: ["cod"]
},
"application/vnd.rn-realmedia": {
source: "apache",
extensions: ["rm"]
},
"application/vnd.rn-realmedia-vbr": {
source: "apache",
extensions: ["rmvb"]
},
"application/vnd.route66.link66+xml": {
source: "iana",
compressible: true,
extensions: ["link66"]
},
"application/vnd.rs-274x": {
source: "iana"
},
"application/vnd.ruckus.download": {
source: "iana"
},
"application/vnd.s3sms": {
source: "iana"
},
"application/vnd.sailingtracker.track": {
source: "iana",
extensions: ["st"]
},
"application/vnd.sar": {
source: "iana"
},
"application/vnd.sbm.cid": {
source: "iana"
},
"application/vnd.sbm.mid2": {
source: "iana"
},
"application/vnd.scribus": {
source: "iana"
},
"application/vnd.sealed.3df": {
source: "iana"
},
"application/vnd.sealed.csf": {
source: "iana"
},
"application/vnd.sealed.doc": {
source: "iana"
},
"application/vnd.sealed.eml": {
source: "iana"
},
"application/vnd.sealed.mht": {
source: "iana"
},
"application/vnd.sealed.net": {
source: "iana"
},
"application/vnd.sealed.ppt": {
source: "iana"
},
"application/vnd.sealed.tiff": {
source: "iana"
},
"application/vnd.sealed.xls": {
source: "iana"
},
"application/vnd.sealedmedia.softseal.html": {
source: "iana"
},
"application/vnd.sealedmedia.softseal.pdf": {
source: "iana"
},
"application/vnd.seemail": {
source: "iana",
extensions: ["see"]
},
"application/vnd.seis+json": {
source: "iana",
compressible: true
},
"application/vnd.sema": {
source: "iana",
extensions: ["sema"]
},
"application/vnd.semd": {
source: "iana",
extensions: ["semd"]
},
"application/vnd.semf": {
source: "iana",
extensions: ["semf"]
},
"application/vnd.shade-save-file": {
source: "iana"
},
"application/vnd.shana.informed.formdata": {
source: "iana",
extensions: ["ifm"]
},
"application/vnd.shana.informed.formtemplate": {
source: "iana",
extensions: ["itp"]
},
"application/vnd.shana.informed.interchange": {
source: "iana",
extensions: ["iif"]
},
"application/vnd.shana.informed.package": {
source: "iana",
extensions: ["ipk"]
},
"application/vnd.shootproof+json": {
source: "iana",
compressible: true
},
"application/vnd.shopkick+json": {
source: "iana",
compressible: true
},
"application/vnd.shp": {
source: "iana"
},
"application/vnd.shx": {
source: "iana"
},
"application/vnd.sigrok.session": {
source: "iana"
},
"application/vnd.simtech-mindmapper": {
source: "iana",
extensions: ["twd", "twds"]
},
"application/vnd.siren+json": {
source: "iana",
compressible: true
},
"application/vnd.sketchometry": {
source: "iana"
},
"application/vnd.smaf": {
source: "iana",
extensions: ["mmf"]
},
"application/vnd.smart.notebook": {
source: "iana"
},
"application/vnd.smart.teacher": {
source: "iana",
extensions: ["teacher"]
},
"application/vnd.smintio.portals.archive": {
source: "iana"
},
"application/vnd.snesdev-page-table": {
source: "iana"
},
"application/vnd.software602.filler.form+xml": {
source: "iana",
compressible: true,
extensions: ["fo"]
},
"application/vnd.software602.filler.form-xml-zip": {
source: "iana"
},
"application/vnd.solent.sdkm+xml": {
source: "iana",
compressible: true,
extensions: ["sdkm", "sdkd"]
},
"application/vnd.spotfire.dxp": {
source: "iana",
extensions: ["dxp"]
},
"application/vnd.spotfire.sfs": {
source: "iana",
extensions: ["sfs"]
},
"application/vnd.sqlite3": {
source: "iana"
},
"application/vnd.sss-cod": {
source: "iana"
},
"application/vnd.sss-dtf": {
source: "iana"
},
"application/vnd.sss-ntf": {
source: "iana"
},
"application/vnd.stardivision.calc": {
source: "apache",
extensions: ["sdc"]
},
"application/vnd.stardivision.draw": {
source: "apache",
extensions: ["sda"]
},
"application/vnd.stardivision.impress": {
source: "apache",
extensions: ["sdd"]
},
"application/vnd.stardivision.math": {
source: "apache",
extensions: ["smf"]
},
"application/vnd.stardivision.writer": {
source: "apache",
extensions: ["sdw", "vor"]
},
"application/vnd.stardivision.writer-global": {
source: "apache",
extensions: ["sgl"]
},
"application/vnd.stepmania.package": {
source: "iana",
extensions: ["smzip"]
},
"application/vnd.stepmania.stepchart": {
source: "iana",
extensions: ["sm"]
},
"application/vnd.street-stream": {
source: "iana"
},
"application/vnd.sun.wadl+xml": {
source: "iana",
compressible: true,
extensions: ["wadl"]
},
"application/vnd.sun.xml.calc": {
source: "apache",
extensions: ["sxc"]
},
"application/vnd.sun.xml.calc.template": {
source: "apache",
extensions: ["stc"]
},
"application/vnd.sun.xml.draw": {
source: "apache",
extensions: ["sxd"]
},
"application/vnd.sun.xml.draw.template": {
source: "apache",
extensions: ["std"]
},
"application/vnd.sun.xml.impress": {
source: "apache",
extensions: ["sxi"]
},
"application/vnd.sun.xml.impress.template": {
source: "apache",
extensions: ["sti"]
},
"application/vnd.sun.xml.math": {
source: "apache",
extensions: ["sxm"]
},
"application/vnd.sun.xml.writer": {
source: "apache",
extensions: ["sxw"]
},
"application/vnd.sun.xml.writer.global": {
source: "apache",
extensions: ["sxg"]
},
"application/vnd.sun.xml.writer.template": {
source: "apache",
extensions: ["stw"]
},
"application/vnd.sus-calendar": {
source: "iana",
extensions: ["sus", "susp"]
},
"application/vnd.svd": {
source: "iana",
extensions: ["svd"]
},
"application/vnd.swiftview-ics": {
source: "iana"
},
"application/vnd.sybyl.mol2": {
source: "iana"
},
"application/vnd.sycle+xml": {
source: "iana",
compressible: true
},
"application/vnd.syft+json": {
source: "iana",
compressible: true
},
"application/vnd.symbian.install": {
source: "apache",
extensions: ["sis", "sisx"]
},
"application/vnd.syncml+xml": {
source: "iana",
charset: "UTF-8",
compressible: true,
extensions: ["xsm"]
},
"application/vnd.syncml.dm+wbxml": {
source: "iana",
charset: "UTF-8",
extensions: ["bdm"]
},
"application/vnd.syncml.dm+xml": {
source: "iana",
charset: "UTF-8",
compressible: true,
extensions: ["xdm"]
},
"application/vnd.syncml.dm.notification": {
source: "iana"
},
"application/vnd.syncml.dmddf+wbxml": {
source: "iana"
},
"application/vnd.syncml.dmddf+xml": {
source: "iana",
charset: "UTF-8",
compressible: true,
extensions: ["ddf"]
},
"application/vnd.syncml.dmtnds+wbxml": {
source: "iana"
},
"application/vnd.syncml.dmtnds+xml": {
source: "iana",
charset: "UTF-8",
compressible: true
},
"application/vnd.syncml.ds.notification": {
source: "iana"
},
"application/vnd.tableschema+json": {
source: "iana",
compressible: true
},
"application/vnd.tao.intent-module-archive": {
source: "iana",
extensions: ["tao"]
},
"application/vnd.tcpdump.pcap": {
source: "iana",
extensions: ["pcap", "cap", "dmp"]
},
"application/vnd.think-cell.ppttc+json": {
source: "iana",
compressible: true
},
"application/vnd.tmd.mediaflex.api+xml": {
source: "iana",
compressible: true
},
"application/vnd.tml": {
source: "iana"
},
"application/vnd.tmobile-livetv": {
source: "iana",
extensions: ["tmo"]
},
"application/vnd.tri.onesource": {
source: "iana"
},
"application/vnd.trid.tpt": {
source: "iana",
extensions: ["tpt"]
},
"application/vnd.triscape.mxs": {
source: "iana",
extensions: ["mxs"]
},
"application/vnd.trueapp": {
source: "iana",
extensions: ["tra"]
},
"application/vnd.truedoc": {
source: "iana"
},
"application/vnd.ubisoft.webplayer": {
source: "iana"
},
"application/vnd.ufdl": {
source: "iana",
extensions: ["ufd", "ufdl"]
},
"application/vnd.uic.osdm+json": {
source: "iana",
compressible: true
},
"application/vnd.uiq.theme": {
source: "iana",
extensions: ["utz"]
},
"application/vnd.umajin": {
source: "iana",
extensions: ["umj"]
},
"application/vnd.unity": {
source: "iana",
extensions: ["unityweb"]
},
"application/vnd.uoml+xml": {
source: "iana",
compressible: true,
extensions: ["uoml", "uo"]
},
"application/vnd.uplanet.alert": {
source: "iana"
},
"application/vnd.uplanet.alert-wbxml": {
source: "iana"
},
"application/vnd.uplanet.bearer-choice": {
source: "iana"
},
"application/vnd.uplanet.bearer-choice-wbxml": {
source: "iana"
},
"application/vnd.uplanet.cacheop": {
source: "iana"
},
"application/vnd.uplanet.cacheop-wbxml": {
source: "iana"
},
"application/vnd.uplanet.channel": {
source: "iana"
},
"application/vnd.uplanet.channel-wbxml": {
source: "iana"
},
"application/vnd.uplanet.list": {
source: "iana"
},
"application/vnd.uplanet.list-wbxml": {
source: "iana"
},
"application/vnd.uplanet.listcmd": {
source: "iana"
},
"application/vnd.uplanet.listcmd-wbxml": {
source: "iana"
},
"application/vnd.uplanet.signal": {
source: "iana"
},
"application/vnd.uri-map": {
source: "iana"
},
"application/vnd.valve.source.material": {
source: "iana"
},
"application/vnd.vcx": {
source: "iana",
extensions: ["vcx"]
},
"application/vnd.vd-study": {
source: "iana"
},
"application/vnd.vectorworks": {
source: "iana"
},
"application/vnd.vel+json": {
source: "iana",
compressible: true
},
"application/vnd.veraison.tsm-report+cbor": {
source: "iana"
},
"application/vnd.veraison.tsm-report+json": {
source: "iana",
compressible: true
},
"application/vnd.verimatrix.vcas": {
source: "iana"
},
"application/vnd.veritone.aion+json": {
source: "iana",
compressible: true
},
"application/vnd.veryant.thin": {
source: "iana"
},
"application/vnd.ves.encrypted": {
source: "iana"
},
"application/vnd.vidsoft.vidconference": {
source: "iana"
},
"application/vnd.visio": {
source: "iana",
extensions: ["vsd", "vst", "vss", "vsw", "vsdx", "vtx"]
},
"application/vnd.visionary": {
source: "iana",
extensions: ["vis"]
},
"application/vnd.vividence.scriptfile": {
source: "iana"
},
"application/vnd.vocalshaper.vsp4": {
source: "iana"
},
"application/vnd.vsf": {
source: "iana",
extensions: ["vsf"]
},
"application/vnd.wap.sic": {
source: "iana"
},
"application/vnd.wap.slc": {
source: "iana"
},
"application/vnd.wap.wbxml": {
source: "iana",
charset: "UTF-8",
extensions: ["wbxml"]
},
"application/vnd.wap.wmlc": {
source: "iana",
extensions: ["wmlc"]
},
"application/vnd.wap.wmlscriptc": {
source: "iana",
extensions: ["wmlsc"]
},
"application/vnd.wasmflow.wafl": {
source: "iana"
},
"application/vnd.webturbo": {
source: "iana",
extensions: ["wtb"]
},
"application/vnd.wfa.dpp": {
source: "iana"
},
"application/vnd.wfa.p2p": {
source: "iana"
},
"application/vnd.wfa.wsc": {
source: "iana"
},
"application/vnd.windows.devicepairing": {
source: "iana"
},
"application/vnd.wmc": {
source: "iana"
},
"application/vnd.wmf.bootstrap": {
source: "iana"
},
"application/vnd.wolfram.mathematica": {
source: "iana"
},
"application/vnd.wolfram.mathematica.package": {
source: "iana"
},
"application/vnd.wolfram.player": {
source: "iana",
extensions: ["nbp"]
},
"application/vnd.wordlift": {
source: "iana"
},
"application/vnd.wordperfect": {
source: "iana",
extensions: ["wpd"]
},
"application/vnd.wqd": {
source: "iana",
extensions: ["wqd"]
},
"application/vnd.wrq-hp3000-labelled": {
source: "iana"
},
"application/vnd.wt.stf": {
source: "iana",
extensions: ["stf"]
},
"application/vnd.wv.csp+wbxml": {
source: "iana"
},
"application/vnd.wv.csp+xml": {
source: "iana",
compressible: true
},
"application/vnd.wv.ssp+xml": {
source: "iana",
compressible: true
},
"application/vnd.xacml+json": {
source: "iana",
compressible: true
},
"application/vnd.xara": {
source: "iana",
extensions: ["xar"]
},
"application/vnd.xarin.cpj": {
source: "iana"
},
"application/vnd.xecrets-encrypted": {
source: "iana"
},
"application/vnd.xfdl": {
source: "iana",
extensions: ["xfdl"]
},
"application/vnd.xfdl.webform": {
source: "iana"
},
"application/vnd.xmi+xml": {
source: "iana",
compressible: true
},
"application/vnd.xmpie.cpkg": {
source: "iana"
},
"application/vnd.xmpie.dpkg": {
source: "iana"
},
"application/vnd.xmpie.plan": {
source: "iana"
},
"application/vnd.xmpie.ppkg": {
source: "iana"
},
"application/vnd.xmpie.xlim": {
source: "iana"
},
"application/vnd.yamaha.hv-dic": {
source: "iana",
extensions: ["hvd"]
},
"application/vnd.yamaha.hv-script": {
source: "iana",
extensions: ["hvs"]
},
"application/vnd.yamaha.hv-voice": {
source: "iana",
extensions: ["hvp"]
},
"application/vnd.yamaha.openscoreformat": {
source: "iana",
extensions: ["osf"]
},
"application/vnd.yamaha.openscoreformat.osfpvg+xml": {
source: "iana",
compressible: true,
extensions: ["osfpvg"]
},
"application/vnd.yamaha.remote-setup": {
source: "iana"
},
"application/vnd.yamaha.smaf-audio": {
source: "iana",
extensions: ["saf"]
},
"application/vnd.yamaha.smaf-phrase": {
source: "iana",
extensions: ["spf"]
},
"application/vnd.yamaha.through-ngn": {
source: "iana"
},
"application/vnd.yamaha.tunnel-udpencap": {
source: "iana"
},
"application/vnd.yaoweme": {
source: "iana"
},
"application/vnd.yellowriver-custom-menu": {
source: "iana",
extensions: ["cmp"]
},
"application/vnd.zul": {
source: "iana",
extensions: ["zir", "zirz"]
},
"application/vnd.zzazz.deck+xml": {
source: "iana",
compressible: true,
extensions: ["zaz"]
},
"application/voicexml+xml": {
source: "iana",
compressible: true,
extensions: ["vxml"]
},
"application/voucher-cms+json": {
source: "iana",
compressible: true
},
"application/voucher-jws+json": {
source: "iana",
compressible: true
},
"application/vp": {
source: "iana"
},
"application/vp+cose": {
source: "iana"
},
"application/vp+jwt": {
source: "iana"
},
"application/vq-rtcpxr": {
source: "iana"
},
"application/wasm": {
source: "iana",
compressible: true,
extensions: ["wasm"]
},
"application/watcherinfo+xml": {
source: "iana",
compressible: true,
extensions: ["wif"]
},
"application/webpush-options+json": {
source: "iana",
compressible: true
},
"application/whoispp-query": {
source: "iana"
},
"application/whoispp-response": {
source: "iana"
},
"application/widget": {
source: "iana",
extensions: ["wgt"]
},
"application/winhlp": {
source: "apache",
extensions: ["hlp"]
},
"application/wita": {
source: "iana"
},
"application/wordperfect5.1": {
source: "iana"
},
"application/wsdl+xml": {
source: "iana",
compressible: true,
extensions: ["wsdl"]
},
"application/wspolicy+xml": {
source: "iana",
compressible: true,
extensions: ["wspolicy"]
},
"application/x-7z-compressed": {
source: "apache",
compressible: false,
extensions: ["7z"]
},
"application/x-abiword": {
source: "apache",
extensions: ["abw"]
},
"application/x-ace-compressed": {
source: "apache",
extensions: ["ace"]
},
"application/x-amf": {
source: "apache"
},
"application/x-apple-diskimage": {
source: "apache",
extensions: ["dmg"]
},
"application/x-arj": {
compressible: false,
extensions: ["arj"]
},
"application/x-authorware-bin": {
source: "apache",
extensions: ["aab", "x32", "u32", "vox"]
},
"application/x-authorware-map": {
source: "apache",
extensions: ["aam"]
},
"application/x-authorware-seg": {
source: "apache",
extensions: ["aas"]
},
"application/x-bcpio": {
source: "apache",
extensions: ["bcpio"]
},
"application/x-bdoc": {
compressible: false,
extensions: ["bdoc"]
},
"application/x-bittorrent": {
source: "apache",
extensions: ["torrent"]
},
"application/x-blender": {
extensions: ["blend"]
},
"application/x-blorb": {
source: "apache",
extensions: ["blb", "blorb"]
},
"application/x-bzip": {
source: "apache",
compressible: false,
extensions: ["bz"]
},
"application/x-bzip2": {
source: "apache",
compressible: false,
extensions: ["bz2", "boz"]
},
"application/x-cbr": {
source: "apache",
extensions: ["cbr", "cba", "cbt", "cbz", "cb7"]
},
"application/x-cdlink": {
source: "apache",
extensions: ["vcd"]
},
"application/x-cfs-compressed": {
source: "apache",
extensions: ["cfs"]
},
"application/x-chat": {
source: "apache",
extensions: ["chat"]
},
"application/x-chess-pgn": {
source: "apache",
extensions: ["pgn"]
},
"application/x-chrome-extension": {
extensions: ["crx"]
},
"application/x-cocoa": {
source: "nginx",
extensions: ["cco"]
},
"application/x-compress": {
source: "apache"
},
"application/x-compressed": {
extensions: ["rar"]
},
"application/x-conference": {
source: "apache",
extensions: ["nsc"]
},
"application/x-cpio": {
source: "apache",
extensions: ["cpio"]
},
"application/x-csh": {
source: "apache",
extensions: ["csh"]
},
"application/x-deb": {
compressible: false
},
"application/x-debian-package": {
source: "apache",
extensions: ["deb", "udeb"]
},
"application/x-dgc-compressed": {
source: "apache",
extensions: ["dgc"]
},
"application/x-director": {
source: "apache",
extensions: ["dir", "dcr", "dxr", "cst", "cct", "cxt", "w3d", "fgd", "swa"]
},
"application/x-doom": {
source: "apache",
extensions: ["wad"]
},
"application/x-dtbncx+xml": {
source: "apache",
compressible: true,
extensions: ["ncx"]
},
"application/x-dtbook+xml": {
source: "apache",
compressible: true,
extensions: ["dtb"]
},
"application/x-dtbresource+xml": {
source: "apache",
compressible: true,
extensions: ["res"]
},
"application/x-dvi": {
source: "apache",
compressible: false,
extensions: ["dvi"]
},
"application/x-envoy": {
source: "apache",
extensions: ["evy"]
},
"application/x-eva": {
source: "apache",
extensions: ["eva"]
},
"application/x-font-bdf": {
source: "apache",
extensions: ["bdf"]
},
"application/x-font-dos": {
source: "apache"
},
"application/x-font-framemaker": {
source: "apache"
},
"application/x-font-ghostscript": {
source: "apache",
extensions: ["gsf"]
},
"application/x-font-libgrx": {
source: "apache"
},
"application/x-font-linux-psf": {
source: "apache",
extensions: ["psf"]
},
"application/x-font-pcf": {
source: "apache",
extensions: ["pcf"]
},
"application/x-font-snf": {
source: "apache",
extensions: ["snf"]
},
"application/x-font-speedo": {
source: "apache"
},
"application/x-font-sunos-news": {
source: "apache"
},
"application/x-font-type1": {
source: "apache",
extensions: ["pfa", "pfb", "pfm", "afm"]
},
"application/x-font-vfont": {
source: "apache"
},
"application/x-freearc": {
source: "apache",
extensions: ["arc"]
},
"application/x-futuresplash": {
source: "apache",
extensions: ["spl"]
},
"application/x-gca-compressed": {
source: "apache",
extensions: ["gca"]
},
"application/x-glulx": {
source: "apache",
extensions: ["ulx"]
},
"application/x-gnumeric": {
source: "apache",
extensions: ["gnumeric"]
},
"application/x-gramps-xml": {
source: "apache",
extensions: ["gramps"]
},
"application/x-gtar": {
source: "apache",
extensions: ["gtar"]
},
"application/x-gzip": {
source: "apache"
},
"application/x-hdf": {
source: "apache",
extensions: ["hdf"]
},
"application/x-httpd-php": {
compressible: true,
extensions: ["php"]
},
"application/x-install-instructions": {
source: "apache",
extensions: ["install"]
},
"application/x-ipynb+json": {
compressible: true,
extensions: ["ipynb"]
},
"application/x-iso9660-image": {
source: "apache",
extensions: ["iso"]
},
"application/x-iwork-keynote-sffkey": {
extensions: ["key"]
},
"application/x-iwork-numbers-sffnumbers": {
extensions: ["numbers"]
},
"application/x-iwork-pages-sffpages": {
extensions: ["pages"]
},
"application/x-java-archive-diff": {
source: "nginx",
extensions: ["jardiff"]
},
"application/x-java-jnlp-file": {
source: "apache",
compressible: false,
extensions: ["jnlp"]
},
"application/x-javascript": {
compressible: true
},
"application/x-keepass2": {
extensions: ["kdbx"]
},
"application/x-latex": {
source: "apache",
compressible: false,
extensions: ["latex"]
},
"application/x-lua-bytecode": {
extensions: ["luac"]
},
"application/x-lzh-compressed": {
source: "apache",
extensions: ["lzh", "lha"]
},
"application/x-makeself": {
source: "nginx",
extensions: ["run"]
},
"application/x-mie": {
source: "apache",
extensions: ["mie"]
},
"application/x-mobipocket-ebook": {
source: "apache",
extensions: ["prc", "mobi"]
},
"application/x-mpegurl": {
compressible: false
},
"application/x-ms-application": {
source: "apache",
extensions: ["application"]
},
"application/x-ms-shortcut": {
source: "apache",
extensions: ["lnk"]
},
"application/x-ms-wmd": {
source: "apache",
extensions: ["wmd"]
},
"application/x-ms-wmz": {
source: "apache",
extensions: ["wmz"]
},
"application/x-ms-xbap": {
source: "apache",
extensions: ["xbap"]
},
"application/x-msaccess": {
source: "apache",
extensions: ["mdb"]
},
"application/x-msbinder": {
source: "apache",
extensions: ["obd"]
},
"application/x-mscardfile": {
source: "apache",
extensions: ["crd"]
},
"application/x-msclip": {
source: "apache",
extensions: ["clp"]
},
"application/x-msdos-program": {
extensions: ["exe"]
},
"application/x-msdownload": {
source: "apache",
extensions: ["exe", "dll", "com", "bat", "msi"]
},
"application/x-msmediaview": {
source: "apache",
extensions: ["mvb", "m13", "m14"]
},
"application/x-msmetafile": {
source: "apache",
extensions: ["wmf", "wmz", "emf", "emz"]
},
"application/x-msmoney": {
source: "apache",
extensions: ["mny"]
},
"application/x-mspublisher": {
source: "apache",
extensions: ["pub"]
},
"application/x-msschedule": {
source: "apache",
extensions: ["scd"]
},
"application/x-msterminal": {
source: "apache",
extensions: ["trm"]
},
"application/x-mswrite": {
source: "apache",
extensions: ["wri"]
},
"application/x-netcdf": {
source: "apache",
extensions: ["nc", "cdf"]
},
"application/x-ns-proxy-autoconfig": {
compressible: true,
extensions: ["pac"]
},
"application/x-nzb": {
source: "apache",
extensions: ["nzb"]
},
"application/x-perl": {
source: "nginx",
extensions: ["pl", "pm"]
},
"application/x-pilot": {
source: "nginx",
extensions: ["prc", "pdb"]
},
"application/x-pkcs12": {
source: "apache",
compressible: false,
extensions: ["p12", "pfx"]
},
"application/x-pkcs7-certificates": {
source: "apache",
extensions: ["p7b", "spc"]
},
"application/x-pkcs7-certreqresp": {
source: "apache",
extensions: ["p7r"]
},
"application/x-pki-message": {
source: "iana"
},
"application/x-rar-compressed": {
source: "apache",
compressible: false,
extensions: ["rar"]
},
"application/x-redhat-package-manager": {
source: "nginx",
extensions: ["rpm"]
},
"application/x-research-info-systems": {
source: "apache",
extensions: ["ris"]
},
"application/x-sea": {
source: "nginx",
extensions: ["sea"]
},
"application/x-sh": {
source: "apache",
compressible: true,
extensions: ["sh"]
},
"application/x-shar": {
source: "apache",
extensions: ["shar"]
},
"application/x-shockwave-flash": {
source: "apache",
compressible: false,
extensions: ["swf"]
},
"application/x-silverlight-app": {
source: "apache",
extensions: ["xap"]
},
"application/x-sql": {
source: "apache",
extensions: ["sql"]
},
"application/x-stuffit": {
source: "apache",
compressible: false,
extensions: ["sit"]
},
"application/x-stuffitx": {
source: "apache",
extensions: ["sitx"]
},
"application/x-subrip": {
source: "apache",
extensions: ["srt"]
},
"application/x-sv4cpio": {
source: "apache",
extensions: ["sv4cpio"]
},
"application/x-sv4crc": {
source: "apache",
extensions: ["sv4crc"]
},
"application/x-t3vm-image": {
source: "apache",
extensions: ["t3"]
},
"application/x-tads": {
source: "apache",
extensions: ["gam"]
},
"application/x-tar": {
source: "apache",
compressible: true,
extensions: ["tar"]
},
"application/x-tcl": {
source: "apache",
extensions: ["tcl", "tk"]
},
"application/x-tex": {
source: "apache",
extensions: ["tex"]
},
"application/x-tex-tfm": {
source: "apache",
extensions: ["tfm"]
},
"application/x-texinfo": {
source: "apache",
extensions: ["texinfo", "texi"]
},
"application/x-tgif": {
source: "apache",
extensions: ["obj"]
},
"application/x-ustar": {
source: "apache",
extensions: ["ustar"]
},
"application/x-virtualbox-hdd": {
compressible: true,
extensions: ["hdd"]
},
"application/x-virtualbox-ova": {
compressible: true,
extensions: ["ova"]
},
"application/x-virtualbox-ovf": {
compressible: true,
extensions: ["ovf"]
},
"application/x-virtualbox-vbox": {
compressible: true,
extensions: ["vbox"]
},
"application/x-virtualbox-vbox-extpack": {
compressible: false,
extensions: ["vbox-extpack"]
},
"application/x-virtualbox-vdi": {
compressible: true,
extensions: ["vdi"]
},
"application/x-virtualbox-vhd": {
compressible: true,
extensions: ["vhd"]
},
"application/x-virtualbox-vmdk": {
compressible: true,
extensions: ["vmdk"]
},
"application/x-wais-source": {
source: "apache",
extensions: ["src"]
},
"application/x-web-app-manifest+json": {
compressible: true,
extensions: ["webapp"]
},
"application/x-www-form-urlencoded": {
source: "iana",
compressible: true
},
"application/x-x509-ca-cert": {
source: "iana",
extensions: ["der", "crt", "pem"]
},
"application/x-x509-ca-ra-cert": {
source: "iana"
},
"application/x-x509-next-ca-cert": {
source: "iana"
},
"application/x-xfig": {
source: "apache",
extensions: ["fig"]
},
"application/x-xliff+xml": {
source: "apache",
compressible: true,
extensions: ["xlf"]
},
"application/x-xpinstall": {
source: "apache",
compressible: false,
extensions: ["xpi"]
},
"application/x-xz": {
source: "apache",
extensions: ["xz"]
},
"application/x-zip-compressed": {
extensions: ["zip"]
},
"application/x-zmachine": {
source: "apache",
extensions: ["z1", "z2", "z3", "z4", "z5", "z6", "z7", "z8"]
},
"application/x400-bp": {
source: "iana"
},
"application/xacml+xml": {
source: "iana",
compressible: true
},
"application/xaml+xml": {
source: "apache",
compressible: true,
extensions: ["xaml"]
},
"application/xcap-att+xml": {
source: "iana",
compressible: true,
extensions: ["xav"]
},
"application/xcap-caps+xml": {
source: "iana",
compressible: true,
extensions: ["xca"]
},
"application/xcap-diff+xml": {
source: "iana",
compressible: true,
extensions: ["xdf"]
},
"application/xcap-el+xml": {
source: "iana",
compressible: true,
extensions: ["xel"]
},
"application/xcap-error+xml": {
source: "iana",
compressible: true
},
"application/xcap-ns+xml": {
source: "iana",
compressible: true,
extensions: ["xns"]
},
"application/xcon-conference-info+xml": {
source: "iana",
compressible: true
},
"application/xcon-conference-info-diff+xml": {
source: "iana",
compressible: true
},
"application/xenc+xml": {
source: "iana",
compressible: true,
extensions: ["xenc"]
},
"application/xfdf": {
source: "iana",
extensions: ["xfdf"]
},
"application/xhtml+xml": {
source: "iana",
compressible: true,
extensions: ["xhtml", "xht"]
},
"application/xhtml-voice+xml": {
source: "apache",
compressible: true
},
"application/xliff+xml": {
source: "iana",
compressible: true,
extensions: ["xlf"]
},
"application/xml": {
source: "iana",
compressible: true,
extensions: ["xml", "xsl", "xsd", "rng"]
},
"application/xml-dtd": {
source: "iana",
compressible: true,
extensions: ["dtd"]
},
"application/xml-external-parsed-entity": {
source: "iana"
},
"application/xml-patch+xml": {
source: "iana",
compressible: true
},
"application/xmpp+xml": {
source: "iana",
compressible: true
},
"application/xop+xml": {
source: "iana",
compressible: true,
extensions: ["xop"]
},
"application/xproc+xml": {
source: "apache",
compressible: true,
extensions: ["xpl"]
},
"application/xslt+xml": {
source: "iana",
compressible: true,
extensions: ["xsl", "xslt"]
},
"application/xspf+xml": {
source: "apache",
compressible: true,
extensions: ["xspf"]
},
"application/xv+xml": {
source: "iana",
compressible: true,
extensions: ["mxml", "xhvml", "xvml", "xvm"]
},
"application/yaml": {
source: "iana"
},
"application/yang": {
source: "iana",
extensions: ["yang"]
},
"application/yang-data+cbor": {
source: "iana"
},
"application/yang-data+json": {
source: "iana",
compressible: true
},
"application/yang-data+xml": {
source: "iana",
compressible: true
},
"application/yang-patch+json": {
source: "iana",
compressible: true
},
"application/yang-patch+xml": {
source: "iana",
compressible: true
},
"application/yang-sid+json": {
source: "iana",
compressible: true
},
"application/yin+xml": {
source: "iana",
compressible: true,
extensions: ["yin"]
},
"application/zip": {
source: "iana",
compressible: false,
extensions: ["zip"]
},
"application/zip+dotlottie": {
extensions: ["lottie"]
},
"application/zlib": {
source: "iana"
},
"application/zstd": {
source: "iana"
},
"audio/1d-interleaved-parityfec": {
source: "iana"
},
"audio/32kadpcm": {
source: "iana"
},
"audio/3gpp": {
source: "iana",
compressible: false,
extensions: ["3gpp"]
},
"audio/3gpp2": {
source: "iana"
},
"audio/aac": {
source: "iana",
extensions: ["adts", "aac"]
},
"audio/ac3": {
source: "iana"
},
"audio/adpcm": {
source: "apache",
extensions: ["adp"]
},
"audio/amr": {
source: "iana",
extensions: ["amr"]
},
"audio/amr-wb": {
source: "iana"
},
"audio/amr-wb+": {
source: "iana"
},
"audio/aptx": {
source: "iana"
},
"audio/asc": {
source: "iana"
},
"audio/atrac-advanced-lossless": {
source: "iana"
},
"audio/atrac-x": {
source: "iana"
},
"audio/atrac3": {
source: "iana"
},
"audio/basic": {
source: "iana",
compressible: false,
extensions: ["au", "snd"]
},
"audio/bv16": {
source: "iana"
},
"audio/bv32": {
source: "iana"
},
"audio/clearmode": {
source: "iana"
},
"audio/cn": {
source: "iana"
},
"audio/dat12": {
source: "iana"
},
"audio/dls": {
source: "iana"
},
"audio/dsr-es201108": {
source: "iana"
},
"audio/dsr-es202050": {
source: "iana"
},
"audio/dsr-es202211": {
source: "iana"
},
"audio/dsr-es202212": {
source: "iana"
},
"audio/dv": {
source: "iana"
},
"audio/dvi4": {
source: "iana"
},
"audio/eac3": {
source: "iana"
},
"audio/encaprtp": {
source: "iana"
},
"audio/evrc": {
source: "iana"
},
"audio/evrc-qcp": {
source: "iana"
},
"audio/evrc0": {
source: "iana"
},
"audio/evrc1": {
source: "iana"
},
"audio/evrcb": {
source: "iana"
},
"audio/evrcb0": {
source: "iana"
},
"audio/evrcb1": {
source: "iana"
},
"audio/evrcnw": {
source: "iana"
},
"audio/evrcnw0": {
source: "iana"
},
"audio/evrcnw1": {
source: "iana"
},
"audio/evrcwb": {
source: "iana"
},
"audio/evrcwb0": {
source: "iana"
},
"audio/evrcwb1": {
source: "iana"
},
"audio/evs": {
source: "iana"
},
"audio/flac": {
source: "iana"
},
"audio/flexfec": {
source: "iana"
},
"audio/fwdred": {
source: "iana"
},
"audio/g711-0": {
source: "iana"
},
"audio/g719": {
source: "iana"
},
"audio/g722": {
source: "iana"
},
"audio/g7221": {
source: "iana"
},
"audio/g723": {
source: "iana"
},
"audio/g726-16": {
source: "iana"
},
"audio/g726-24": {
source: "iana"
},
"audio/g726-32": {
source: "iana"
},
"audio/g726-40": {
source: "iana"
},
"audio/g728": {
source: "iana"
},
"audio/g729": {
source: "iana"
},
"audio/g7291": {
source: "iana"
},
"audio/g729d": {
source: "iana"
},
"audio/g729e": {
source: "iana"
},
"audio/gsm": {
source: "iana"
},
"audio/gsm-efr": {
source: "iana"
},
"audio/gsm-hr-08": {
source: "iana"
},
"audio/ilbc": {
source: "iana"
},
"audio/ip-mr_v2.5": {
source: "iana"
},
"audio/isac": {
source: "apache"
},
"audio/l16": {
source: "iana"
},
"audio/l20": {
source: "iana"
},
"audio/l24": {
source: "iana",
compressible: false
},
"audio/l8": {
source: "iana"
},
"audio/lpc": {
source: "iana"
},
"audio/matroska": {
source: "iana"
},
"audio/melp": {
source: "iana"
},
"audio/melp1200": {
source: "iana"
},
"audio/melp2400": {
source: "iana"
},
"audio/melp600": {
source: "iana"
},
"audio/mhas": {
source: "iana"
},
"audio/midi": {
source: "apache",
extensions: ["mid", "midi", "kar", "rmi"]
},
"audio/midi-clip": {
source: "iana"
},
"audio/mobile-xmf": {
source: "iana",
extensions: ["mxmf"]
},
"audio/mp3": {
compressible: false,
extensions: ["mp3"]
},
"audio/mp4": {
source: "iana",
compressible: false,
extensions: ["m4a", "mp4a", "m4b"]
},
"audio/mp4a-latm": {
source: "iana"
},
"audio/mpa": {
source: "iana"
},
"audio/mpa-robust": {
source: "iana"
},
"audio/mpeg": {
source: "iana",
compressible: false,
extensions: ["mpga", "mp2", "mp2a", "mp3", "m2a", "m3a"]
},
"audio/mpeg4-generic": {
source: "iana"
},
"audio/musepack": {
source: "apache"
},
"audio/ogg": {
source: "iana",
compressible: false,
extensions: ["oga", "ogg", "spx", "opus"]
},
"audio/opus": {
source: "iana"
},
"audio/parityfec": {
source: "iana"
},
"audio/pcma": {
source: "iana"
},
"audio/pcma-wb": {
source: "iana"
},
"audio/pcmu": {
source: "iana"
},
"audio/pcmu-wb": {
source: "iana"
},
"audio/prs.sid": {
source: "iana"
},
"audio/qcelp": {
source: "iana"
},
"audio/raptorfec": {
source: "iana"
},
"audio/red": {
source: "iana"
},
"audio/rtp-enc-aescm128": {
source: "iana"
},
"audio/rtp-midi": {
source: "iana"
},
"audio/rtploopback": {
source: "iana"
},
"audio/rtx": {
source: "iana"
},
"audio/s3m": {
source: "apache",
extensions: ["s3m"]
},
"audio/scip": {
source: "iana"
},
"audio/silk": {
source: "apache",
extensions: ["sil"]
},
"audio/smv": {
source: "iana"
},
"audio/smv-qcp": {
source: "iana"
},
"audio/smv0": {
source: "iana"
},
"audio/sofa": {
source: "iana"
},
"audio/sp-midi": {
source: "iana"
},
"audio/speex": {
source: "iana"
},
"audio/t140c": {
source: "iana"
},
"audio/t38": {
source: "iana"
},
"audio/telephone-event": {
source: "iana"
},
"audio/tetra_acelp": {
source: "iana"
},
"audio/tetra_acelp_bb": {
source: "iana"
},
"audio/tone": {
source: "iana"
},
"audio/tsvcis": {
source: "iana"
},
"audio/uemclip": {
source: "iana"
},
"audio/ulpfec": {
source: "iana"
},
"audio/usac": {
source: "iana"
},
"audio/vdvi": {
source: "iana"
},
"audio/vmr-wb": {
source: "iana"
},
"audio/vnd.3gpp.iufp": {
source: "iana"
},
"audio/vnd.4sb": {
source: "iana"
},
"audio/vnd.audiokoz": {
source: "iana"
},
"audio/vnd.celp": {
source: "iana"
},
"audio/vnd.cisco.nse": {
source: "iana"
},
"audio/vnd.cmles.radio-events": {
source: "iana"
},
"audio/vnd.cns.anp1": {
source: "iana"
},
"audio/vnd.cns.inf1": {
source: "iana"
},
"audio/vnd.dece.audio": {
source: "iana",
extensions: ["uva", "uvva"]
},
"audio/vnd.digital-winds": {
source: "iana",
extensions: ["eol"]
},
"audio/vnd.dlna.adts": {
source: "iana"
},
"audio/vnd.dolby.heaac.1": {
source: "iana"
},
"audio/vnd.dolby.heaac.2": {
source: "iana"
},
"audio/vnd.dolby.mlp": {
source: "iana"
},
"audio/vnd.dolby.mps": {
source: "iana"
},
"audio/vnd.dolby.pl2": {
source: "iana"
},
"audio/vnd.dolby.pl2x": {
source: "iana"
},
"audio/vnd.dolby.pl2z": {
source: "iana"
},
"audio/vnd.dolby.pulse.1": {
source: "iana"
},
"audio/vnd.dra": {
source: "iana",
extensions: ["dra"]
},
"audio/vnd.dts": {
source: "iana",
extensions: ["dts"]
},
"audio/vnd.dts.hd": {
source: "iana",
extensions: ["dtshd"]
},
"audio/vnd.dts.uhd": {
source: "iana"
},
"audio/vnd.dvb.file": {
source: "iana"
},
"audio/vnd.everad.plj": {
source: "iana"
},
"audio/vnd.hns.audio": {
source: "iana"
},
"audio/vnd.lucent.voice": {
source: "iana",
extensions: ["lvp"]
},
"audio/vnd.ms-playready.media.pya": {
source: "iana",
extensions: ["pya"]
},
"audio/vnd.nokia.mobile-xmf": {
source: "iana"
},
"audio/vnd.nortel.vbk": {
source: "iana"
},
"audio/vnd.nuera.ecelp4800": {
source: "iana",
extensions: ["ecelp4800"]
},
"audio/vnd.nuera.ecelp7470": {
source: "iana",
extensions: ["ecelp7470"]
},
"audio/vnd.nuera.ecelp9600": {
source: "iana",
extensions: ["ecelp9600"]
},
"audio/vnd.octel.sbc": {
source: "iana"
},
"audio/vnd.presonus.multitrack": {
source: "iana"
},
"audio/vnd.qcelp": {
source: "apache"
},
"audio/vnd.rhetorex.32kadpcm": {
source: "iana"
},
"audio/vnd.rip": {
source: "iana",
extensions: ["rip"]
},
"audio/vnd.rn-realaudio": {
compressible: false
},
"audio/vnd.sealedmedia.softseal.mpeg": {
source: "iana"
},
"audio/vnd.vmx.cvsd": {
source: "iana"
},
"audio/vnd.wave": {
compressible: false
},
"audio/vorbis": {
source: "iana",
compressible: false
},
"audio/vorbis-config": {
source: "iana"
},
"audio/wav": {
compressible: false,
extensions: ["wav"]
},
"audio/wave": {
compressible: false,
extensions: ["wav"]
},
"audio/webm": {
source: "apache",
compressible: false,
extensions: ["weba"]
},
"audio/x-aac": {
source: "apache",
compressible: false,
extensions: ["aac"]
},
"audio/x-aiff": {
source: "apache",
extensions: ["aif", "aiff", "aifc"]
},
"audio/x-caf": {
source: "apache",
compressible: false,
extensions: ["caf"]
},
"audio/x-flac": {
source: "apache",
extensions: ["flac"]
},
"audio/x-m4a": {
source: "nginx",
extensions: ["m4a"]
},
"audio/x-matroska": {
source: "apache",
extensions: ["mka"]
},
"audio/x-mpegurl": {
source: "apache",
extensions: ["m3u"]
},
"audio/x-ms-wax": {
source: "apache",
extensions: ["wax"]
},
"audio/x-ms-wma": {
source: "apache",
extensions: ["wma"]
},
"audio/x-pn-realaudio": {
source: "apache",
extensions: ["ram", "ra"]
},
"audio/x-pn-realaudio-plugin": {
source: "apache",
extensions: ["rmp"]
},
"audio/x-realaudio": {
source: "nginx",
extensions: ["ra"]
},
"audio/x-tta": {
source: "apache"
},
"audio/x-wav": {
source: "apache",
extensions: ["wav"]
},
"audio/xm": {
source: "apache",
extensions: ["xm"]
},
"chemical/x-cdx": {
source: "apache",
extensions: ["cdx"]
},
"chemical/x-cif": {
source: "apache",
extensions: ["cif"]
},
"chemical/x-cmdf": {
source: "apache",
extensions: ["cmdf"]
},
"chemical/x-cml": {
source: "apache",
extensions: ["cml"]
},
"chemical/x-csml": {
source: "apache",
extensions: ["csml"]
},
"chemical/x-pdb": {
source: "apache"
},
"chemical/x-xyz": {
source: "apache",
extensions: ["xyz"]
},
"font/collection": {
source: "iana",
extensions: ["ttc"]
},
"font/otf": {
source: "iana",
compressible: true,
extensions: ["otf"]
},
"font/sfnt": {
source: "iana"
},
"font/ttf": {
source: "iana",
compressible: true,
extensions: ["ttf"]
},
"font/woff": {
source: "iana",
extensions: ["woff"]
},
"font/woff2": {
source: "iana",
extensions: ["woff2"]
},
"image/aces": {
source: "iana",
extensions: ["exr"]
},
"image/apng": {
source: "iana",
compressible: false,
extensions: ["apng"]
},
"image/avci": {
source: "iana",
extensions: ["avci"]
},
"image/avcs": {
source: "iana",
extensions: ["avcs"]
},
"image/avif": {
source: "iana",
compressible: false,
extensions: ["avif"]
},
"image/bmp": {
source: "iana",
compressible: true,
extensions: ["bmp", "dib"]
},
"image/cgm": {
source: "iana",
extensions: ["cgm"]
},
"image/dicom-rle": {
source: "iana",
extensions: ["drle"]
},
"image/dpx": {
source: "iana",
extensions: ["dpx"]
},
"image/emf": {
source: "iana",
extensions: ["emf"]
},
"image/fits": {
source: "iana",
extensions: ["fits"]
},
"image/g3fax": {
source: "iana",
extensions: ["g3"]
},
"image/gif": {
source: "iana",
compressible: false,
extensions: ["gif"]
},
"image/heic": {
source: "iana",
extensions: ["heic"]
},
"image/heic-sequence": {
source: "iana",
extensions: ["heics"]
},
"image/heif": {
source: "iana",
extensions: ["heif"]
},
"image/heif-sequence": {
source: "iana",
extensions: ["heifs"]
},
"image/hej2k": {
source: "iana",
extensions: ["hej2"]
},
"image/ief": {
source: "iana",
extensions: ["ief"]
},
"image/j2c": {
source: "iana"
},
"image/jaii": {
source: "iana",
extensions: ["jaii"]
},
"image/jais": {
source: "iana",
extensions: ["jais"]
},
"image/jls": {
source: "iana",
extensions: ["jls"]
},
"image/jp2": {
source: "iana",
compressible: false,
extensions: ["jp2", "jpg2"]
},
"image/jpeg": {
source: "iana",
compressible: false,
extensions: ["jpg", "jpeg", "jpe"]
},
"image/jph": {
source: "iana",
extensions: ["jph"]
},
"image/jphc": {
source: "iana",
extensions: ["jhc"]
},
"image/jpm": {
source: "iana",
compressible: false,
extensions: ["jpm", "jpgm"]
},
"image/jpx": {
source: "iana",
compressible: false,
extensions: ["jpx", "jpf"]
},
"image/jxl": {
source: "iana",
extensions: ["jxl"]
},
"image/jxr": {
source: "iana",
extensions: ["jxr"]
},
"image/jxra": {
source: "iana",
extensions: ["jxra"]
},
"image/jxrs": {
source: "iana",
extensions: ["jxrs"]
},
"image/jxs": {
source: "iana",
extensions: ["jxs"]
},
"image/jxsc": {
source: "iana",
extensions: ["jxsc"]
},
"image/jxsi": {
source: "iana",
extensions: ["jxsi"]
},
"image/jxss": {
source: "iana",
extensions: ["jxss"]
},
"image/ktx": {
source: "iana",
extensions: ["ktx"]
},
"image/ktx2": {
source: "iana",
extensions: ["ktx2"]
},
"image/naplps": {
source: "iana"
},
"image/pjpeg": {
compressible: false,
extensions: ["jfif"]
},
"image/png": {
source: "iana",
compressible: false,
extensions: ["png"]
},
"image/prs.btif": {
source: "iana",
extensions: ["btif", "btf"]
},
"image/prs.pti": {
source: "iana",
extensions: ["pti"]
},
"image/pwg-raster": {
source: "iana"
},
"image/sgi": {
source: "apache",
extensions: ["sgi"]
},
"image/svg+xml": {
source: "iana",
compressible: true,
extensions: ["svg", "svgz"]
},
"image/t38": {
source: "iana",
extensions: ["t38"]
},
"image/tiff": {
source: "iana",
compressible: false,
extensions: ["tif", "tiff"]
},
"image/tiff-fx": {
source: "iana",
extensions: ["tfx"]
},
"image/vnd.adobe.photoshop": {
source: "iana",
compressible: true,
extensions: ["psd"]
},
"image/vnd.airzip.accelerator.azv": {
source: "iana",
extensions: ["azv"]
},
"image/vnd.clip": {
source: "iana"
},
"image/vnd.cns.inf2": {
source: "iana"
},
"image/vnd.dece.graphic": {
source: "iana",
extensions: ["uvi", "uvvi", "uvg", "uvvg"]
},
"image/vnd.djvu": {
source: "iana",
extensions: ["djvu", "djv"]
},
"image/vnd.dvb.subtitle": {
source: "iana",
extensions: ["sub"]
},
"image/vnd.dwg": {
source: "iana",
extensions: ["dwg"]
},
"image/vnd.dxf": {
source: "iana",
extensions: ["dxf"]
},
"image/vnd.fastbidsheet": {
source: "iana",
extensions: ["fbs"]
},
"image/vnd.fpx": {
source: "iana",
extensions: ["fpx"]
},
"image/vnd.fst": {
source: "iana",
extensions: ["fst"]
},
"image/vnd.fujixerox.edmics-mmr": {
source: "iana",
extensions: ["mmr"]
},
"image/vnd.fujixerox.edmics-rlc": {
source: "iana",
extensions: ["rlc"]
},
"image/vnd.globalgraphics.pgb": {
source: "iana"
},
"image/vnd.microsoft.icon": {
source: "iana",
compressible: true,
extensions: ["ico"]
},
"image/vnd.mix": {
source: "iana"
},
"image/vnd.mozilla.apng": {
source: "iana"
},
"image/vnd.ms-dds": {
compressible: true,
extensions: ["dds"]
},
"image/vnd.ms-modi": {
source: "iana",
extensions: ["mdi"]
},
"image/vnd.ms-photo": {
source: "apache",
extensions: ["wdp"]
},
"image/vnd.net-fpx": {
source: "iana",
extensions: ["npx"]
},
"image/vnd.pco.b16": {
source: "iana",
extensions: ["b16"]
},
"image/vnd.radiance": {
source: "iana"
},
"image/vnd.sealed.png": {
source: "iana"
},
"image/vnd.sealedmedia.softseal.gif": {
source: "iana"
},
"image/vnd.sealedmedia.softseal.jpg": {
source: "iana"
},
"image/vnd.svf": {
source: "iana"
},
"image/vnd.tencent.tap": {
source: "iana",
extensions: ["tap"]
},
"image/vnd.valve.source.texture": {
source: "iana",
extensions: ["vtf"]
},
"image/vnd.wap.wbmp": {
source: "iana",
extensions: ["wbmp"]
},
"image/vnd.xiff": {
source: "iana",
extensions: ["xif"]
},
"image/vnd.zbrush.pcx": {
source: "iana",
extensions: ["pcx"]
},
"image/webp": {
source: "iana",
extensions: ["webp"]
},
"image/wmf": {
source: "iana",
extensions: ["wmf"]
},
"image/x-3ds": {
source: "apache",
extensions: ["3ds"]
},
"image/x-adobe-dng": {
extensions: ["dng"]
},
"image/x-cmu-raster": {
source: "apache",
extensions: ["ras"]
},
"image/x-cmx": {
source: "apache",
extensions: ["cmx"]
},
"image/x-emf": {
source: "iana"
},
"image/x-freehand": {
source: "apache",
extensions: ["fh", "fhc", "fh4", "fh5", "fh7"]
},
"image/x-icon": {
source: "apache",
compressible: true,
extensions: ["ico"]
},
"image/x-jng": {
source: "nginx",
extensions: ["jng"]
},
"image/x-mrsid-image": {
source: "apache",
extensions: ["sid"]
},
"image/x-ms-bmp": {
source: "nginx",
compressible: true,
extensions: ["bmp"]
},
"image/x-pcx": {
source: "apache",
extensions: ["pcx"]
},
"image/x-pict": {
source: "apache",
extensions: ["pic", "pct"]
},
"image/x-portable-anymap": {
source: "apache",
extensions: ["pnm"]
},
"image/x-portable-bitmap": {
source: "apache",
extensions: ["pbm"]
},
"image/x-portable-graymap": {
source: "apache",
extensions: ["pgm"]
},
"image/x-portable-pixmap": {
source: "apache",
extensions: ["ppm"]
},
"image/x-rgb": {
source: "apache",
extensions: ["rgb"]
},
"image/x-tga": {
source: "apache",
extensions: ["tga"]
},
"image/x-wmf": {
source: "iana"
},
"image/x-xbitmap": {
source: "apache",
extensions: ["xbm"]
},
"image/x-xcf": {
compressible: false
},
"image/x-xpixmap": {
source: "apache",
extensions: ["xpm"]
},
"image/x-xwindowdump": {
source: "apache",
extensions: ["xwd"]
},
"message/bhttp": {
source: "iana"
},
"message/cpim": {
source: "iana"
},
"message/delivery-status": {
source: "iana"
},
"message/disposition-notification": {
source: "iana",
extensions: [
"disposition-notification"
]
},
"message/external-body": {
source: "iana"
},
"message/feedback-report": {
source: "iana"
},
"message/global": {
source: "iana",
extensions: ["u8msg"]
},
"message/global-delivery-status": {
source: "iana",
extensions: ["u8dsn"]
},
"message/global-disposition-notification": {
source: "iana",
extensions: ["u8mdn"]
},
"message/global-headers": {
source: "iana",
extensions: ["u8hdr"]
},
"message/http": {
source: "iana",
compressible: false
},
"message/imdn+xml": {
source: "iana",
compressible: true
},
"message/mls": {
source: "iana"
},
"message/news": {
source: "apache"
},
"message/ohttp-req": {
source: "iana"
},
"message/ohttp-res": {
source: "iana"
},
"message/partial": {
source: "iana",
compressible: false
},
"message/rfc822": {
source: "iana",
compressible: true,
extensions: ["eml", "mime", "mht", "mhtml"]
},
"message/s-http": {
source: "apache"
},
"message/sip": {
source: "iana"
},
"message/sipfrag": {
source: "iana"
},
"message/tracking-status": {
source: "iana"
},
"message/vnd.si.simp": {
source: "apache"
},
"message/vnd.wfa.wsc": {
source: "iana",
extensions: ["wsc"]
},
"model/3mf": {
source: "iana",
extensions: ["3mf"]
},
"model/e57": {
source: "iana"
},
"model/gltf+json": {
source: "iana",
compressible: true,
extensions: ["gltf"]
},
"model/gltf-binary": {
source: "iana",
compressible: true,
extensions: ["glb"]
},
"model/iges": {
source: "iana",
compressible: false,
extensions: ["igs", "iges"]
},
"model/jt": {
source: "iana",
extensions: ["jt"]
},
"model/mesh": {
source: "iana",
compressible: false,
extensions: ["msh", "mesh", "silo"]
},
"model/mtl": {
source: "iana",
extensions: ["mtl"]
},
"model/obj": {
source: "iana",
extensions: ["obj"]
},
"model/prc": {
source: "iana",
extensions: ["prc"]
},
"model/step": {
source: "iana",
extensions: ["step", "stp", "stpnc", "p21", "210"]
},
"model/step+xml": {
source: "iana",
compressible: true,
extensions: ["stpx"]
},
"model/step+zip": {
source: "iana",
compressible: false,
extensions: ["stpz"]
},
"model/step-xml+zip": {
source: "iana",
compressible: false,
extensions: ["stpxz"]
},
"model/stl": {
source: "iana",
extensions: ["stl"]
},
"model/u3d": {
source: "iana",
extensions: ["u3d"]
},
"model/vnd.bary": {
source: "iana",
extensions: ["bary"]
},
"model/vnd.cld": {
source: "iana",
extensions: ["cld"]
},
"model/vnd.collada+xml": {
source: "iana",
compressible: true,
extensions: ["dae"]
},
"model/vnd.dwf": {
source: "iana",
extensions: ["dwf"]
},
"model/vnd.flatland.3dml": {
source: "iana"
},
"model/vnd.gdl": {
source: "iana",
extensions: ["gdl"]
},
"model/vnd.gs-gdl": {
source: "apache"
},
"model/vnd.gs.gdl": {
source: "iana"
},
"model/vnd.gtw": {
source: "iana",
extensions: ["gtw"]
},
"model/vnd.moml+xml": {
source: "iana",
compressible: true
},
"model/vnd.mts": {
source: "iana",
extensions: ["mts"]
},
"model/vnd.opengex": {
source: "iana",
extensions: ["ogex"]
},
"model/vnd.parasolid.transmit.binary": {
source: "iana",
extensions: ["x_b"]
},
"model/vnd.parasolid.transmit.text": {
source: "iana",
extensions: ["x_t"]
},
"model/vnd.pytha.pyox": {
source: "iana",
extensions: ["pyo", "pyox"]
},
"model/vnd.rosette.annotated-data-model": {
source: "iana"
},
"model/vnd.sap.vds": {
source: "iana",
extensions: ["vds"]
},
"model/vnd.usda": {
source: "iana",
extensions: ["usda"]
},
"model/vnd.usdz+zip": {
source: "iana",
compressible: false,
extensions: ["usdz"]
},
"model/vnd.valve.source.compiled-map": {
source: "iana",
extensions: ["bsp"]
},
"model/vnd.vtu": {
source: "iana",
extensions: ["vtu"]
},
"model/vrml": {
source: "iana",
compressible: false,
extensions: ["wrl", "vrml"]
},
"model/x3d+binary": {
source: "apache",
compressible: false,
extensions: ["x3db", "x3dbz"]
},
"model/x3d+fastinfoset": {
source: "iana",
extensions: ["x3db"]
},
"model/x3d+vrml": {
source: "apache",
compressible: false,
extensions: ["x3dv", "x3dvz"]
},
"model/x3d+xml": {
source: "iana",
compressible: true,
extensions: ["x3d", "x3dz"]
},
"model/x3d-vrml": {
source: "iana",
extensions: ["x3dv"]
},
"multipart/alternative": {
source: "iana",
compressible: false
},
"multipart/appledouble": {
source: "iana"
},
"multipart/byteranges": {
source: "iana"
},
"multipart/digest": {
source: "iana"
},
"multipart/encrypted": {
source: "iana",
compressible: false
},
"multipart/form-data": {
source: "iana",
compressible: false
},
"multipart/header-set": {
source: "iana"
},
"multipart/mixed": {
source: "iana"
},
"multipart/multilingual": {
source: "iana"
},
"multipart/parallel": {
source: "iana"
},
"multipart/related": {
source: "iana",
compressible: false
},
"multipart/report": {
source: "iana"
},
"multipart/signed": {
source: "iana",
compressible: false
},
"multipart/vnd.bint.med-plus": {
source: "iana"
},
"multipart/voice-message": {
source: "iana"
},
"multipart/x-mixed-replace": {
source: "iana"
},
"text/1d-interleaved-parityfec": {
source: "iana"
},
"text/cache-manifest": {
source: "iana",
compressible: true,
extensions: ["appcache", "manifest"]
},
"text/calendar": {
source: "iana",
extensions: ["ics", "ifb"]
},
"text/calender": {
compressible: true
},
"text/cmd": {
compressible: true
},
"text/coffeescript": {
extensions: ["coffee", "litcoffee"]
},
"text/cql": {
source: "iana"
},
"text/cql-expression": {
source: "iana"
},
"text/cql-identifier": {
source: "iana"
},
"text/css": {
source: "iana",
charset: "UTF-8",
compressible: true,
extensions: ["css"]
},
"text/csv": {
source: "iana",
compressible: true,
extensions: ["csv"]
},
"text/csv-schema": {
source: "iana"
},
"text/directory": {
source: "iana"
},
"text/dns": {
source: "iana"
},
"text/ecmascript": {
source: "apache"
},
"text/encaprtp": {
source: "iana"
},
"text/enriched": {
source: "iana"
},
"text/fhirpath": {
source: "iana"
},
"text/flexfec": {
source: "iana"
},
"text/fwdred": {
source: "iana"
},
"text/gff3": {
source: "iana"
},
"text/grammar-ref-list": {
source: "iana"
},
"text/hl7v2": {
source: "iana"
},
"text/html": {
source: "iana",
compressible: true,
extensions: ["html", "htm", "shtml"]
},
"text/jade": {
extensions: ["jade"]
},
"text/javascript": {
source: "iana",
charset: "UTF-8",
compressible: true,
extensions: ["js", "mjs"]
},
"text/jcr-cnd": {
source: "iana"
},
"text/jsx": {
compressible: true,
extensions: ["jsx"]
},
"text/less": {
compressible: true,
extensions: ["less"]
},
"text/markdown": {
source: "iana",
compressible: true,
extensions: ["md", "markdown"]
},
"text/mathml": {
source: "nginx",
extensions: ["mml"]
},
"text/mdx": {
compressible: true,
extensions: ["mdx"]
},
"text/mizar": {
source: "iana"
},
"text/n3": {
source: "iana",
charset: "UTF-8",
compressible: true,
extensions: ["n3"]
},
"text/parameters": {
source: "iana",
charset: "UTF-8"
},
"text/parityfec": {
source: "iana"
},
"text/plain": {
source: "iana",
compressible: true,
extensions: ["txt", "text", "conf", "def", "list", "log", "in", "ini"]
},
"text/provenance-notation": {
source: "iana",
charset: "UTF-8"
},
"text/prs.fallenstein.rst": {
source: "iana"
},
"text/prs.lines.tag": {
source: "iana",
extensions: ["dsc"]
},
"text/prs.prop.logic": {
source: "iana"
},
"text/prs.texi": {
source: "iana"
},
"text/raptorfec": {
source: "iana"
},
"text/red": {
source: "iana"
},
"text/rfc822-headers": {
source: "iana"
},
"text/richtext": {
source: "iana",
compressible: true,
extensions: ["rtx"]
},
"text/rtf": {
source: "iana",
compressible: true,
extensions: ["rtf"]
},
"text/rtp-enc-aescm128": {
source: "iana"
},
"text/rtploopback": {
source: "iana"
},
"text/rtx": {
source: "iana"
},
"text/sgml": {
source: "iana",
extensions: ["sgml", "sgm"]
},
"text/shaclc": {
source: "iana"
},
"text/shex": {
source: "iana",
extensions: ["shex"]
},
"text/slim": {
extensions: ["slim", "slm"]
},
"text/spdx": {
source: "iana",
extensions: ["spdx"]
},
"text/strings": {
source: "iana"
},
"text/stylus": {
extensions: ["stylus", "styl"]
},
"text/t140": {
source: "iana"
},
"text/tab-separated-values": {
source: "iana",
compressible: true,
extensions: ["tsv"]
},
"text/troff": {
source: "iana",
extensions: ["t", "tr", "roff", "man", "me", "ms"]
},
"text/turtle": {
source: "iana",
charset: "UTF-8",
extensions: ["ttl"]
},
"text/ulpfec": {
source: "iana"
},
"text/uri-list": {
source: "iana",
compressible: true,
extensions: ["uri", "uris", "urls"]
},
"text/vcard": {
source: "iana",
compressible: true,
extensions: ["vcard"]
},
"text/vnd.a": {
source: "iana"
},
"text/vnd.abc": {
source: "iana"
},
"text/vnd.ascii-art": {
source: "iana"
},
"text/vnd.curl": {
source: "iana",
extensions: ["curl"]
},
"text/vnd.curl.dcurl": {
source: "apache",
extensions: ["dcurl"]
},
"text/vnd.curl.mcurl": {
source: "apache",
extensions: ["mcurl"]
},
"text/vnd.curl.scurl": {
source: "apache",
extensions: ["scurl"]
},
"text/vnd.debian.copyright": {
source: "iana",
charset: "UTF-8"
},
"text/vnd.dmclientscript": {
source: "iana"
},
"text/vnd.dvb.subtitle": {
source: "iana",
extensions: ["sub"]
},
"text/vnd.esmertec.theme-descriptor": {
source: "iana",
charset: "UTF-8"
},
"text/vnd.exchangeable": {
source: "iana"
},
"text/vnd.familysearch.gedcom": {
source: "iana",
extensions: ["ged"]
},
"text/vnd.ficlab.flt": {
source: "iana"
},
"text/vnd.fly": {
source: "iana",
extensions: ["fly"]
},
"text/vnd.fmi.flexstor": {
source: "iana",
extensions: ["flx"]
},
"text/vnd.gml": {
source: "iana"
},
"text/vnd.graphviz": {
source: "iana",
extensions: ["gv"]
},
"text/vnd.hans": {
source: "iana"
},
"text/vnd.hgl": {
source: "iana"
},
"text/vnd.in3d.3dml": {
source: "iana",
extensions: ["3dml"]
},
"text/vnd.in3d.spot": {
source: "iana",
extensions: ["spot"]
},
"text/vnd.iptc.newsml": {
source: "iana"
},
"text/vnd.iptc.nitf": {
source: "iana"
},
"text/vnd.latex-z": {
source: "iana"
},
"text/vnd.motorola.reflex": {
source: "iana"
},
"text/vnd.ms-mediapackage": {
source: "iana"
},
"text/vnd.net2phone.commcenter.command": {
source: "iana"
},
"text/vnd.radisys.msml-basic-layout": {
source: "iana"
},
"text/vnd.senx.warpscript": {
source: "iana"
},
"text/vnd.si.uricatalogue": {
source: "apache"
},
"text/vnd.sosi": {
source: "iana"
},
"text/vnd.sun.j2me.app-descriptor": {
source: "iana",
charset: "UTF-8",
extensions: ["jad"]
},
"text/vnd.trolltech.linguist": {
source: "iana",
charset: "UTF-8"
},
"text/vnd.vcf": {
source: "iana"
},
"text/vnd.wap.si": {
source: "iana"
},
"text/vnd.wap.sl": {
source: "iana"
},
"text/vnd.wap.wml": {
source: "iana",
extensions: ["wml"]
},
"text/vnd.wap.wmlscript": {
source: "iana",
extensions: ["wmls"]
},
"text/vnd.zoo.kcl": {
source: "iana"
},
"text/vtt": {
source: "iana",
charset: "UTF-8",
compressible: true,
extensions: ["vtt"]
},
"text/wgsl": {
source: "iana",
extensions: ["wgsl"]
},
"text/x-asm": {
source: "apache",
extensions: ["s", "asm"]
},
"text/x-c": {
source: "apache",
extensions: ["c", "cc", "cxx", "cpp", "h", "hh", "dic"]
},
"text/x-component": {
source: "nginx",
extensions: ["htc"]
},
"text/x-fortran": {
source: "apache",
extensions: ["f", "for", "f77", "f90"]
},
"text/x-gwt-rpc": {
compressible: true
},
"text/x-handlebars-template": {
extensions: ["hbs"]
},
"text/x-java-source": {
source: "apache",
extensions: ["java"]
},
"text/x-jquery-tmpl": {
compressible: true
},
"text/x-lua": {
extensions: ["lua"]
},
"text/x-markdown": {
compressible: true,
extensions: ["mkd"]
},
"text/x-nfo": {
source: "apache",
extensions: ["nfo"]
},
"text/x-opml": {
source: "apache",
extensions: ["opml"]
},
"text/x-org": {
compressible: true,
extensions: ["org"]
},
"text/x-pascal": {
source: "apache",
extensions: ["p", "pas"]
},
"text/x-processing": {
compressible: true,
extensions: ["pde"]
},
"text/x-sass": {
extensions: ["sass"]
},
"text/x-scss": {
extensions: ["scss"]
},
"text/x-setext": {
source: "apache",
extensions: ["etx"]
},
"text/x-sfv": {
source: "apache",
extensions: ["sfv"]
},
"text/x-suse-ymp": {
compressible: true,
extensions: ["ymp"]
},
"text/x-uuencode": {
source: "apache",
extensions: ["uu"]
},
"text/x-vcalendar": {
source: "apache",
extensions: ["vcs"]
},
"text/x-vcard": {
source: "apache",
extensions: ["vcf"]
},
"text/xml": {
source: "iana",
compressible: true,
extensions: ["xml"]
},
"text/xml-external-parsed-entity": {
source: "iana"
},
"text/yaml": {
compressible: true,
extensions: ["yaml", "yml"]
},
"video/1d-interleaved-parityfec": {
source: "iana"
},
"video/3gpp": {
source: "iana",
extensions: ["3gp", "3gpp"]
},
"video/3gpp-tt": {
source: "iana"
},
"video/3gpp2": {
source: "iana",
extensions: ["3g2"]
},
"video/av1": {
source: "iana"
},
"video/bmpeg": {
source: "iana"
},
"video/bt656": {
source: "iana"
},
"video/celb": {
source: "iana"
},
"video/dv": {
source: "iana"
},
"video/encaprtp": {
source: "iana"
},
"video/evc": {
source: "iana"
},
"video/ffv1": {
source: "iana"
},
"video/flexfec": {
source: "iana"
},
"video/h261": {
source: "iana",
extensions: ["h261"]
},
"video/h263": {
source: "iana",
extensions: ["h263"]
},
"video/h263-1998": {
source: "iana"
},
"video/h263-2000": {
source: "iana"
},
"video/h264": {
source: "iana",
extensions: ["h264"]
},
"video/h264-rcdo": {
source: "iana"
},
"video/h264-svc": {
source: "iana"
},
"video/h265": {
source: "iana"
},
"video/h266": {
source: "iana"
},
"video/iso.segment": {
source: "iana",
extensions: ["m4s"]
},
"video/jpeg": {
source: "iana",
extensions: ["jpgv"]
},
"video/jpeg2000": {
source: "iana"
},
"video/jpm": {
source: "apache",
extensions: ["jpm", "jpgm"]
},
"video/jxsv": {
source: "iana"
},
"video/lottie+json": {
source: "iana",
compressible: true
},
"video/matroska": {
source: "iana"
},
"video/matroska-3d": {
source: "iana"
},
"video/mj2": {
source: "iana",
extensions: ["mj2", "mjp2"]
},
"video/mp1s": {
source: "iana"
},
"video/mp2p": {
source: "iana"
},
"video/mp2t": {
source: "iana",
extensions: ["ts", "m2t", "m2ts", "mts"]
},
"video/mp4": {
source: "iana",
compressible: false,
extensions: ["mp4", "mp4v", "mpg4"]
},
"video/mp4v-es": {
source: "iana"
},
"video/mpeg": {
source: "iana",
compressible: false,
extensions: ["mpeg", "mpg", "mpe", "m1v", "m2v"]
},
"video/mpeg4-generic": {
source: "iana"
},
"video/mpv": {
source: "iana"
},
"video/nv": {
source: "iana"
},
"video/ogg": {
source: "iana",
compressible: false,
extensions: ["ogv"]
},
"video/parityfec": {
source: "iana"
},
"video/pointer": {
source: "iana"
},
"video/quicktime": {
source: "iana",
compressible: false,
extensions: ["qt", "mov"]
},
"video/raptorfec": {
source: "iana"
},
"video/raw": {
source: "iana"
},
"video/rtp-enc-aescm128": {
source: "iana"
},
"video/rtploopback": {
source: "iana"
},
"video/rtx": {
source: "iana"
},
"video/scip": {
source: "iana"
},
"video/smpte291": {
source: "iana"
},
"video/smpte292m": {
source: "iana"
},
"video/ulpfec": {
source: "iana"
},
"video/vc1": {
source: "iana"
},
"video/vc2": {
source: "iana"
},
"video/vnd.cctv": {
source: "iana"
},
"video/vnd.dece.hd": {
source: "iana",
extensions: ["uvh", "uvvh"]
},
"video/vnd.dece.mobile": {
source: "iana",
extensions: ["uvm", "uvvm"]
},
"video/vnd.dece.mp4": {
source: "iana"
},
"video/vnd.dece.pd": {
source: "iana",
extensions: ["uvp", "uvvp"]
},
"video/vnd.dece.sd": {
source: "iana",
extensions: ["uvs", "uvvs"]
},
"video/vnd.dece.video": {
source: "iana",
extensions: ["uvv", "uvvv"]
},
"video/vnd.directv.mpeg": {
source: "iana"
},
"video/vnd.directv.mpeg-tts": {
source: "iana"
},
"video/vnd.dlna.mpeg-tts": {
source: "iana"
},
"video/vnd.dvb.file": {
source: "iana",
extensions: ["dvb"]
},
"video/vnd.fvt": {
source: "iana",
extensions: ["fvt"]
},
"video/vnd.hns.video": {
source: "iana"
},
"video/vnd.iptvforum.1dparityfec-1010": {
source: "iana"
},
"video/vnd.iptvforum.1dparityfec-2005": {
source: "iana"
},
"video/vnd.iptvforum.2dparityfec-1010": {
source: "iana"
},
"video/vnd.iptvforum.2dparityfec-2005": {
source: "iana"
},
"video/vnd.iptvforum.ttsavc": {
source: "iana"
},
"video/vnd.iptvforum.ttsmpeg2": {
source: "iana"
},
"video/vnd.motorola.video": {
source: "iana"
},
"video/vnd.motorola.videop": {
source: "iana"
},
"video/vnd.mpegurl": {
source: "iana",
extensions: ["mxu", "m4u"]
},
"video/vnd.ms-playready.media.pyv": {
source: "iana",
extensions: ["pyv"]
},
"video/vnd.nokia.interleaved-multimedia": {
source: "iana"
},
"video/vnd.nokia.mp4vr": {
source: "iana"
},
"video/vnd.nokia.videovoip": {
source: "iana"
},
"video/vnd.objectvideo": {
source: "iana"
},
"video/vnd.planar": {
source: "iana"
},
"video/vnd.radgamettools.bink": {
source: "iana"
},
"video/vnd.radgamettools.smacker": {
source: "apache"
},
"video/vnd.sealed.mpeg1": {
source: "iana"
},
"video/vnd.sealed.mpeg4": {
source: "iana"
},
"video/vnd.sealed.swf": {
source: "iana"
},
"video/vnd.sealedmedia.softseal.mov": {
source: "iana"
},
"video/vnd.uvvu.mp4": {
source: "iana",
extensions: ["uvu", "uvvu"]
},
"video/vnd.vivo": {
source: "iana",
extensions: ["viv"]
},
"video/vnd.youtube.yt": {
source: "iana"
},
"video/vp8": {
source: "iana"
},
"video/vp9": {
source: "iana"
},
"video/webm": {
source: "apache",
compressible: false,
extensions: ["webm"]
},
"video/x-f4v": {
source: "apache",
extensions: ["f4v"]
},
"video/x-fli": {
source: "apache",
extensions: ["fli"]
},
"video/x-flv": {
source: "apache",
compressible: false,
extensions: ["flv"]
},
"video/x-m4v": {
source: "apache",
extensions: ["m4v"]
},
"video/x-matroska": {
source: "apache",
compressible: false,
extensions: ["mkv", "mk3d", "mks"]
},
"video/x-mng": {
source: "apache",
extensions: ["mng"]
},
"video/x-ms-asf": {
source: "apache",
extensions: ["asf", "asx"]
},
"video/x-ms-vob": {
source: "apache",
extensions: ["vob"]
},
"video/x-ms-wm": {
source: "apache",
extensions: ["wm"]
},
"video/x-ms-wmv": {
source: "apache",
compressible: false,
extensions: ["wmv"]
},
"video/x-ms-wmx": {
source: "apache",
extensions: ["wmx"]
},
"video/x-ms-wvx": {
source: "apache",
extensions: ["wvx"]
},
"video/x-msvideo": {
source: "apache",
extensions: ["avi"]
},
"video/x-sgi-movie": {
source: "apache",
extensions: ["movie"]
},
"video/x-smv": {
source: "apache",
extensions: ["smv"]
},
"x-conference/x-cooltalk": {
source: "apache",
extensions: ["ice"]
},
"x-shader/x-fragment": {
compressible: true
},
"x-shader/x-vertex": {
compressible: true
}
};
}
});
var require_mime_db4 = __commonJS2({
"node_modules/send/node_modules/mime-db/index.js"(exports2, module2) {
module2.exports = require_db4();
}
});
var require_mimeScore4 = __commonJS2({
"node_modules/send/node_modules/mime-types/mimeScore.js"(exports2, module2) {
var FACET_SCORES = {
"prs.": 100,
"x-": 200,
"x.": 300,
"vnd.": 400,
default: 900
};
var SOURCE_SCORES = {
nginx: 10,
apache: 20,
iana: 40,
default: 30
// definitions added by `jshttp/mime-db` project?
};
var TYPE_SCORES = {
// prefer application/xml over text/xml
// prefer application/rtf over text/rtf
application: 1,
// prefer font/woff over application/font-woff
font: 2,
default: 0
};
module2.exports = function mimeScore(mimeType, source = "default") {
if (mimeType === "application/octet-stream") {
return 0;
}
const [type, subtype] = mimeType.split("/");
const facet = subtype.replace(/(\.|x-).*/, "$1");
const facetScore = FACET_SCORES[facet] || FACET_SCORES.default;
const sourceScore = SOURCE_SCORES[source] || SOURCE_SCORES.default;
const typeScore = TYPE_SCORES[type] || TYPE_SCORES.default;
const lengthScore = 1 - mimeType.length / 100;
return facetScore + sourceScore + typeScore + lengthScore;
};
}
});
var require_mime_types4 = __commonJS2({
"node_modules/send/node_modules/mime-types/index.js"(exports2) {
"use strict";
var db = require_mime_db4();
var extname = require("path").extname;
var mimeScore = require_mimeScore4();
var EXTRACT_TYPE_REGEXP = /^\s*([^;\s]*)(?:;|\s|$)/;
var TEXT_TYPE_REGEXP = /^text\//i;
exports2.charset = charset;
exports2.charsets = { lookup: charset };
exports2.contentType = contentType2;
exports2.extension = extension;
exports2.extensions = /* @__PURE__ */ Object.create(null);
exports2.lookup = lookup;
exports2.types = /* @__PURE__ */ Object.create(null);
exports2._extensionConflicts = [];
populateMaps(exports2.extensions, exports2.types);
function charset(type) {
if (!type || typeof type !== "string") {
return false;
}
var match = EXTRACT_TYPE_REGEXP.exec(type);
var mime = match && db[match[1].toLowerCase()];
if (mime && mime.charset) {
return mime.charset;
}
if (match && TEXT_TYPE_REGEXP.test(match[1])) {
return "UTF-8";
}
return false;
}
function contentType2(str) {
if (!str || typeof str !== "string") {
return false;
}
var mime = str.indexOf("/") === -1 ? exports2.lookup(str) : str;
if (!mime) {
return false;
}
if (mime.indexOf("charset") === -1) {
var charset2 = exports2.charset(mime);
if (charset2) mime += "; charset=" + charset2.toLowerCase();
}
return mime;
}
function extension(type) {
if (!type || typeof type !== "string") {
return false;
}
var match = EXTRACT_TYPE_REGEXP.exec(type);
var exts = match && exports2.extensions[match[1].toLowerCase()];
if (!exts || !exts.length) {
return false;
}
return exts[0];
}
function lookup(path) {
if (!path || typeof path !== "string") {
return false;
}
var extension2 = extname("x." + path).toLowerCase().slice(1);
if (!extension2) {
return false;
}
return exports2.types[extension2] || false;
}
function populateMaps(extensions, types) {
Object.keys(db).forEach(function forEachMimeType(type) {
var mime = db[type];
var exts = mime.extensions;
if (!exts || !exts.length) {
return;
}
extensions[type] = exts;
for (var i = 0; i < exts.length; i++) {
var extension2 = exts[i];
types[extension2] = _preferredType(extension2, types[extension2], type);
const legacyType = _preferredTypeLegacy(
extension2,
types[extension2],
type
);
if (legacyType !== types[extension2]) {
exports2._extensionConflicts.push([extension2, legacyType, types[extension2]]);
}
}
});
}
function _preferredType(ext, type0, type1) {
var score0 = type0 ? mimeScore(type0, db[type0].source) : 0;
var score1 = type1 ? mimeScore(type1, db[type1].source) : 0;
return score0 > score1 ? type0 : type1;
}
function _preferredTypeLegacy(ext, type0, type1) {
var SOURCE_RANK = ["nginx", "apache", void 0, "iana"];
var score0 = type0 ? SOURCE_RANK.indexOf(db[type0].source) : 0;
var score1 = type1 ? SOURCE_RANK.indexOf(db[type1].source) : 0;
if (exports2.types[extension] !== "application/octet-stream" && (score0 > score1 || score0 === score1 && exports2.types[extension]?.slice(0, 12) === "application/")) {
return type0;
}
return score0 > score1 ? type0 : type1;
}
}
});
var require_send = __commonJS2({
"node_modules/send/index.js"(exports2, module2) {
"use strict";
var createError = require_http_errors();
var debug = require_src2()("send");
var encodeUrl = require_encodeurl();
var escapeHtml = require_escape_html();
var etag = require_etag();
var fresh = require_fresh();
var fs = require("fs");
var mime = require_mime_types4();
var ms = require_ms2();
var onFinished = require_on_finished();
var parseRange = require_range_parser();
var path = require("path");
var statuses = require_statuses();
var Stream = require("stream");
var util22 = require("util");
var extname = path.extname;
var join = path.join;
var normalize = path.normalize;
var resolve = path.resolve;
var sep = path.sep;
var BYTES_RANGE_REGEXP = /^ *bytes=/;
var MAX_MAXAGE = 60 * 60 * 24 * 365 * 1e3;
var UP_PATH_REGEXP = /(?:^|[\\/])\.\.(?:[\\/]|$)/;
module2.exports = send;
function send(req, path2, options) {
return new SendStream(req, path2, options);
}
function SendStream(req, path2, options) {
Stream.call(this);
var opts = options || {};
this.options = opts;
this.path = path2;
this.req = req;
this._acceptRanges = opts.acceptRanges !== void 0 ? Boolean(opts.acceptRanges) : true;
this._cacheControl = opts.cacheControl !== void 0 ? Boolean(opts.cacheControl) : true;
this._etag = opts.etag !== void 0 ? Boolean(opts.etag) : true;
this._dotfiles = opts.dotfiles !== void 0 ? opts.dotfiles : "ignore";
if (this._dotfiles !== "ignore" && this._dotfiles !== "allow" && this._dotfiles !== "deny") {
throw new TypeError('dotfiles option must be "allow", "deny", or "ignore"');
}
this._extensions = opts.extensions !== void 0 ? normalizeList(opts.extensions, "extensions option") : [];
this._immutable = opts.immutable !== void 0 ? Boolean(opts.immutable) : false;
this._index = opts.index !== void 0 ? normalizeList(opts.index, "index option") : ["index.html"];
this._lastModified = opts.lastModified !== void 0 ? Boolean(opts.lastModified) : true;
this._maxage = opts.maxAge || opts.maxage;
this._maxage = typeof this._maxage === "string" ? ms(this._maxage) : Number(this._maxage);
this._maxage = !isNaN(this._maxage) ? Math.min(Math.max(0, this._maxage), MAX_MAXAGE) : 0;
this._root = opts.root ? resolve(opts.root) : null;
}
util22.inherits(SendStream, Stream);
SendStream.prototype.error = function error(status, err2) {
if (hasListeners(this, "error")) {
return this.emit("error", createHttpError(status, err2));
}
var res = this.res;
var msg = statuses.message[status] || String(status);
var doc = createHtmlDocument("Error", escapeHtml(msg));
clearHeaders(res);
if (err2 && err2.headers) {
setHeaders(res, err2.headers);
}
res.statusCode = status;
res.setHeader("Content-Type", "text/html; charset=UTF-8");
res.setHeader("Content-Length", Buffer.byteLength(doc));
res.setHeader("Content-Security-Policy", "default-src 'none'");
res.setHeader("X-Content-Type-Options", "nosniff");
res.end(doc);
};
SendStream.prototype.hasTrailingSlash = function hasTrailingSlash() {
return this.path[this.path.length - 1] === "/";
};
SendStream.prototype.isConditionalGET = function isConditionalGET() {
return this.req.headers["if-match"] || this.req.headers["if-unmodified-since"] || this.req.headers["if-none-match"] || this.req.headers["if-modified-since"];
};
SendStream.prototype.isPreconditionFailure = function isPreconditionFailure() {
var req = this.req;
var res = this.res;
var match = req.headers["if-match"];
if (match) {
var etag2 = res.getHeader("ETag");
return !etag2 || match !== "*" && parseTokenList(match).every(function(match2) {
return match2 !== etag2 && match2 !== "W/" + etag2 && "W/" + match2 !== etag2;
});
}
var unmodifiedSince = parseHttpDate(req.headers["if-unmodified-since"]);
if (!isNaN(unmodifiedSince)) {
var lastModified = parseHttpDate(res.getHeader("Last-Modified"));
return isNaN(lastModified) || lastModified > unmodifiedSince;
}
return false;
};
SendStream.prototype.removeContentHeaderFields = function removeContentHeaderFields() {
var res = this.res;
res.removeHeader("Content-Encoding");
res.removeHeader("Content-Language");
res.removeHeader("Content-Length");
res.removeHeader("Content-Range");
res.removeHeader("Content-Type");
};
SendStream.prototype.notModified = function notModified() {
var res = this.res;
debug("not modified");
this.removeContentHeaderFields();
res.statusCode = 304;
res.end();
};
SendStream.prototype.headersAlreadySent = function headersAlreadySent() {
var err2 = new Error("Can't set headers after they are sent.");
debug("headers already sent");
this.error(500, err2);
};
SendStream.prototype.isCachable = function isCachable() {
var statusCode = this.res.statusCode;
return statusCode >= 200 && statusCode < 300 || statusCode === 304;
};
SendStream.prototype.onStatError = function onStatError(error) {
switch (error.code) {
case "ENAMETOOLONG":
case "ENOENT":
case "ENOTDIR":
this.error(404, error);
break;
default:
this.error(500, error);
break;
}
};
SendStream.prototype.isFresh = function isFresh() {
return fresh(this.req.headers, {
etag: this.res.getHeader("ETag"),
"last-modified": this.res.getHeader("Last-Modified")
});
};
SendStream.prototype.isRangeFresh = function isRangeFresh() {
var ifRange = this.req.headers["if-range"];
if (!ifRange) {
return true;
}
if (ifRange.indexOf('"') !== -1) {
var etag2 = this.res.getHeader("ETag");
return Boolean(etag2 && ifRange.indexOf(etag2) !== -1);
}
var lastModified = this.res.getHeader("Last-Modified");
return parseHttpDate(lastModified) <= parseHttpDate(ifRange);
};
SendStream.prototype.redirect = function redirect(path2) {
var res = this.res;
if (hasListeners(this, "directory")) {
this.emit("directory", res, path2);
return;
}
if (this.hasTrailingSlash()) {
this.error(403);
return;
}
var loc = encodeUrl(collapseLeadingSlashes(this.path + "/"));
var doc = createHtmlDocument("Redirecting", "Redirecting to " + escapeHtml(loc));
res.statusCode = 301;
res.setHeader("Content-Type", "text/html; charset=UTF-8");
res.setHeader("Content-Length", Buffer.byteLength(doc));
res.setHeader("Content-Security-Policy", "default-src 'none'");
res.setHeader("X-Content-Type-Options", "nosniff");
res.setHeader("Location", loc);
res.end(doc);
};
SendStream.prototype.pipe = function pipe(res) {
var root2 = this._root;
this.res = res;
var path2 = decode(this.path);
if (path2 === -1) {
this.error(400);
return res;
}
if (~path2.indexOf("\0")) {
this.error(400);
return res;
}
var parts;
if (root2 !== null) {
if (path2) {
path2 = normalize("." + sep + path2);
}
if (UP_PATH_REGEXP.test(path2)) {
debug('malicious path "%s"', path2);
this.error(403);
return res;
}
parts = path2.split(sep);
path2 = normalize(join(root2, path2));
} else {
if (UP_PATH_REGEXP.test(path2)) {
debug('malicious path "%s"', path2);
this.error(403);
return res;
}
parts = normalize(path2).split(sep);
path2 = resolve(path2);
}
if (containsDotFile(parts)) {
debug('%s dotfile "%s"', this._dotfiles, path2);
switch (this._dotfiles) {
case "allow":
break;
case "deny":
this.error(403);
return res;
case "ignore":
default:
this.error(404);
return res;
}
}
if (this._index.length && this.hasTrailingSlash()) {
this.sendIndex(path2);
return res;
}
this.sendFile(path2);
return res;
};
SendStream.prototype.send = function send2(path2, stat) {
var len = stat.size;
var options = this.options;
var opts = {};
var res = this.res;
var req = this.req;
var ranges = req.headers.range;
var offset = options.start || 0;
if (res.headersSent) {
this.headersAlreadySent();
return;
}
debug('pipe "%s"', path2);
this.setHeader(path2, stat);
this.type(path2);
if (this.isConditionalGET()) {
if (this.isPreconditionFailure()) {
this.error(412);
return;
}
if (this.isCachable() && this.isFresh()) {
this.notModified();
return;
}
}
len = Math.max(0, len - offset);
if (options.end !== void 0) {
var bytes = options.end - offset + 1;
if (len > bytes) len = bytes;
}
if (this._acceptRanges && BYTES_RANGE_REGEXP.test(ranges)) {
ranges = parseRange(len, ranges, {
combine: true
});
if (!this.isRangeFresh()) {
debug("range stale");
ranges = -2;
}
if (ranges === -1) {
debug("range unsatisfiable");
res.setHeader("Content-Range", contentRange("bytes", len));
return this.error(416, {
headers: { "Content-Range": res.getHeader("Content-Range") }
});
}
if (ranges !== -2 && ranges.length === 1) {
debug("range %j", ranges);
res.statusCode = 206;
res.setHeader("Content-Range", contentRange("bytes", len, ranges[0]));
offset += ranges[0].start;
len = ranges[0].end - ranges[0].start + 1;
}
}
for (var prop2 in options) {
opts[prop2] = options[prop2];
}
opts.start = offset;
opts.end = Math.max(offset, offset + len - 1);
res.setHeader("Content-Length", len);
if (req.method === "HEAD") {
res.end();
return;
}
this.stream(path2, opts);
};
SendStream.prototype.sendFile = function sendFile(path2) {
var i = 0;
var self2 = this;
debug('stat "%s"', path2);
fs.stat(path2, function onstat(err2, stat) {
var pathEndsWithSep = path2[path2.length - 1] === sep;
if (err2 && err2.code === "ENOENT" && !extname(path2) && !pathEndsWithSep) {
return next2(err2);
}
if (err2) return self2.onStatError(err2);
if (stat.isDirectory()) return self2.redirect(path2);
if (pathEndsWithSep) return self2.error(404);
self2.emit("file", path2, stat);
self2.send(path2, stat);
});
function next2(err2) {
if (self2._extensions.length <= i) {
return err2 ? self2.onStatError(err2) : self2.error(404);
}
var p = path2 + "." + self2._extensions[i++];
debug('stat "%s"', p);
fs.stat(p, function(err3, stat) {
if (err3) return next2(err3);
if (stat.isDirectory()) return next2();
self2.emit("file", p, stat);
self2.send(p, stat);
});
}
};
SendStream.prototype.sendIndex = function sendIndex(path2) {
var i = -1;
var self2 = this;
function next2(err2) {
if (++i >= self2._index.length) {
if (err2) return self2.onStatError(err2);
return self2.error(404);
}
var p = join(path2, self2._index[i]);
debug('stat "%s"', p);
fs.stat(p, function(err3, stat) {
if (err3) return next2(err3);
if (stat.isDirectory()) return next2();
self2.emit("file", p, stat);
self2.send(p, stat);
});
}
next2();
};
SendStream.prototype.stream = function stream5(path2, options) {
var self2 = this;
var res = this.res;
var stream22 = fs.createReadStream(path2, options);
this.emit("stream", stream22);
stream22.pipe(res);
function cleanup() {
stream22.destroy();
}
onFinished(res, cleanup);
stream22.on("error", function onerror(err2) {
cleanup();
self2.onStatError(err2);
});
stream22.on("end", function onend() {
self2.emit("end");
});
};
SendStream.prototype.type = function type(path2) {
var res = this.res;
if (res.getHeader("Content-Type")) return;
var ext = extname(path2);
var type2 = mime.contentType(ext) || "application/octet-stream";
debug("content-type %s", type2);
res.setHeader("Content-Type", type2);
};
SendStream.prototype.setHeader = function setHeader(path2, stat) {
var res = this.res;
this.emit("headers", res, path2, stat);
if (this._acceptRanges && !res.getHeader("Accept-Ranges")) {
debug("accept ranges");
res.setHeader("Accept-Ranges", "bytes");
}
if (this._cacheControl && !res.getHeader("Cache-Control")) {
var cacheControl = "public, max-age=" + Math.floor(this._maxage / 1e3);
if (this._immutable) {
cacheControl += ", immutable";
}
debug("cache-control %s", cacheControl);
res.setHeader("Cache-Control", cacheControl);
}
if (this._lastModified && !res.getHeader("Last-Modified")) {
var modified = stat.mtime.toUTCString();
debug("modified %s", modified);
res.setHeader("Last-Modified", modified);
}
if (this._etag && !res.getHeader("ETag")) {
var val2 = etag(stat);
debug("etag %s", val2);
res.setHeader("ETag", val2);
}
};
function clearHeaders(res) {
for (const header of res.getHeaderNames()) {
res.removeHeader(header);
}
}
function collapseLeadingSlashes(str) {
for (var i = 0; i < str.length; i++) {
if (str[i] !== "/") {
break;
}
}
return i > 1 ? "/" + str.substr(i) : str;
}
function containsDotFile(parts) {
for (var i = 0; i < parts.length; i++) {
var part = parts[i];
if (part.length > 1 && part[0] === ".") {
return true;
}
}
return false;
}
function contentRange(type, size, range) {
return type + " " + (range ? range.start + "-" + range.end : "*") + "/" + size;
}
function createHtmlDocument(title, body) {
return '<!DOCTYPE html>\n<html lang="en">\n<head>\n<meta charset="utf-8">\n<title>' + title + "</title>\n</head>\n<body>\n<pre>" + body + "</pre>\n</body>\n</html>\n";
}
function createHttpError(status, err2) {
if (!err2) {
return createError(status);
}
return err2 instanceof Error ? createError(status, err2, { expose: false }) : createError(status, err2);
}
function decode(path2) {
try {
return decodeURIComponent(path2);
} catch (err2) {
return -1;
}
}
function hasListeners(emitter, type) {
var count = typeof emitter.listenerCount !== "function" ? emitter.listeners(type).length : emitter.listenerCount(type);
return count > 0;
}
function normalizeList(val2, name) {
var list = [].concat(val2 || []);
for (var i = 0; i < list.length; i++) {
if (typeof list[i] !== "string") {
throw new TypeError(name + " must be array of strings or false");
}
}
return list;
}
function parseHttpDate(date) {
var timestamp = date && Date.parse(date);
return typeof timestamp === "number" ? timestamp : NaN;
}
function parseTokenList(str) {
var end2 = 0;
var list = [];
var start = 0;
for (var i = 0, len = str.length; i < len; i++) {
switch (str.charCodeAt(i)) {
case 32:
if (start === end2) {
start = end2 = i + 1;
}
break;
case 44:
if (start !== end2) {
list.push(str.substring(start, end2));
}
start = end2 = i + 1;
break;
default:
end2 = i + 1;
break;
}
}
if (start !== end2) {
list.push(str.substring(start, end2));
}
return list;
}
function setHeaders(res, headers) {
var keys = Object.keys(headers);
for (var i = 0; i < keys.length; i++) {
var key = keys[i];
res.setHeader(key, headers[key]);
}
}
}
});
var require_vary = __commonJS2({
"node_modules/vary/index.js"(exports2, module2) {
"use strict";
module2.exports = vary;
module2.exports.append = append4;
var FIELD_NAME_REGEXP = /^[!#$%&'*+\-.^_`|~0-9A-Za-z]+$/;
function append4(header, field) {
if (typeof header !== "string") {
throw new TypeError("header argument is required");
}
if (!field) {
throw new TypeError("field argument is required");
}
var fields = !Array.isArray(field) ? parse8(String(field)) : field;
for (var j = 0; j < fields.length; j++) {
if (!FIELD_NAME_REGEXP.test(fields[j])) {
throw new TypeError("field argument contains an invalid header name");
}
}
if (header === "*") {
return header;
}
var val2 = header;
var vals = parse8(header.toLowerCase());
if (fields.indexOf("*") !== -1 || vals.indexOf("*") !== -1) {
return "*";
}
for (var i = 0; i < fields.length; i++) {
var fld = fields[i].toLowerCase();
if (vals.indexOf(fld) === -1) {
vals.push(fld);
val2 = val2 ? val2 + ", " + fields[i] : fields[i];
}
}
return val2;
}
function parse8(header) {
var end2 = 0;
var list = [];
var start = 0;
for (var i = 0, len = header.length; i < len; i++) {
switch (header.charCodeAt(i)) {
case 32:
if (start === end2) {
start = end2 = i + 1;
}
break;
case 44:
list.push(header.substring(start, end2));
start = end2 = i + 1;
break;
default:
end2 = i + 1;
break;
}
}
list.push(header.substring(start, end2));
return list;
}
function vary(res, field) {
if (!res || !res.getHeader || !res.setHeader) {
throw new TypeError("res argument is required");
}
var val2 = res.getHeader("Vary") || "";
var header = Array.isArray(val2) ? val2.join(", ") : String(val2);
if (val2 = append4(header, field)) {
res.setHeader("Vary", val2);
}
}
}
});
var require_response2 = __commonJS2({
"node_modules/express/lib/response.js"(exports2, module2) {
"use strict";
var contentDisposition = require_content_disposition();
var createError = require_http_errors();
var encodeUrl = require_encodeurl();
var escapeHtml = require_escape_html();
var http2 = require("node:http");
var onFinished = require_on_finished();
var mime = require_mime_types22();
var path = require("node:path");
var pathIsAbsolute = require("node:path").isAbsolute;
var statuses = require_statuses();
var sign = require_cookie_signature().sign;
var normalizeType = require_utils32().normalizeType;
var normalizeTypes = require_utils32().normalizeTypes;
var setCharset = require_utils32().setCharset;
var cookie = require_cookie();
var send = require_send();
var extname = path.extname;
var resolve = path.resolve;
var vary = require_vary();
var res = Object.create(http2.ServerResponse.prototype);
module2.exports = res;
res.status = function status(code) {
if (!Number.isInteger(code)) {
throw new TypeError(`Invalid status code: ${JSON.stringify(code)}. Status code must be an integer.`);
}
if (code < 100 || code > 999) {
throw new RangeError(`Invalid status code: ${JSON.stringify(code)}. Status code must be greater than 99 and less than 1000.`);
}
this.statusCode = code;
return this;
};
res.links = function(links) {
var link = this.get("Link") || "";
if (link) link += ", ";
return this.set("Link", link + Object.keys(links).map(function(rel) {
if (Array.isArray(links[rel])) {
return links[rel].map(function(singleLink) {
return `<${singleLink}>; rel="${rel}"`;
}).join(", ");
} else {
return `<${links[rel]}>; rel="${rel}"`;
}
}).join(", "));
};
res.send = function send2(body) {
var chunk = body;
var encoding;
var req = this.req;
var type;
var app = this.app;
switch (typeof chunk) {
// string defaulting to html
case "string":
if (!this.get("Content-Type")) {
this.type("html");
}
break;
case "boolean":
case "number":
case "object":
if (chunk === null) {
chunk = "";
} else if (ArrayBuffer.isView(chunk)) {
if (!this.get("Content-Type")) {
this.type("bin");
}
} else {
return this.json(chunk);
}
break;
}
if (typeof chunk === "string") {
encoding = "utf8";
type = this.get("Content-Type");
if (typeof type === "string") {
this.set("Content-Type", setCharset(type, "utf-8"));
}
}
var etagFn = app.get("etag fn");
var generateETag = !this.get("ETag") && typeof etagFn === "function";
var len;
if (chunk !== void 0) {
if (Buffer.isBuffer(chunk)) {
len = chunk.length;
} else if (!generateETag && chunk.length < 1e3) {
len = Buffer.byteLength(chunk, encoding);
} else {
chunk = Buffer.from(chunk, encoding);
encoding = void 0;
len = chunk.length;
}
this.set("Content-Length", len);
}
var etag;
if (generateETag && len !== void 0) {
if (etag = etagFn(chunk, encoding)) {
this.set("ETag", etag);
}
}
if (req.fresh) this.status(304);
if (204 === this.statusCode || 304 === this.statusCode) {
this.removeHeader("Content-Type");
this.removeHeader("Content-Length");
this.removeHeader("Transfer-Encoding");
chunk = "";
}
if (this.statusCode === 205) {
this.set("Content-Length", "0");
this.removeHeader("Transfer-Encoding");
chunk = "";
}
if (req.method === "HEAD") {
this.end();
} else {
this.end(chunk, encoding);
}
return this;
};
res.json = function json(obj) {
var app = this.app;
var escape22 = app.get("json escape");
var replacer = app.get("json replacer");
var spaces = app.get("json spaces");
var body = stringify2(obj, replacer, spaces, escape22);
if (!this.get("Content-Type")) {
this.set("Content-Type", "application/json");
}
return this.send(body);
};
res.jsonp = function jsonp(obj) {
var app = this.app;
var escape22 = app.get("json escape");
var replacer = app.get("json replacer");
var spaces = app.get("json spaces");
var body = stringify2(obj, replacer, spaces, escape22);
var callback = this.req.query[app.get("jsonp callback name")];
if (!this.get("Content-Type")) {
this.set("X-Content-Type-Options", "nosniff");
this.set("Content-Type", "application/json");
}
if (Array.isArray(callback)) {
callback = callback[0];
}
if (typeof callback === "string" && callback.length !== 0) {
this.set("X-Content-Type-Options", "nosniff");
this.set("Content-Type", "text/javascript");
callback = callback.replace(/[^\[\]\w$.]/g, "");
if (body === void 0) {
body = "";
} else if (typeof body === "string") {
body = body.replace(/\u2028/g, "\\u2028").replace(/\u2029/g, "\\u2029");
}
body = "/**/ typeof " + callback + " === 'function' && " + callback + "(" + body + ");";
}
return this.send(body);
};
res.sendStatus = function sendStatus(statusCode) {
var body = statuses.message[statusCode] || String(statusCode);
this.status(statusCode);
this.type("txt");
return this.send(body);
};
res.sendFile = function sendFile(path2, options, callback) {
var done = callback;
var req = this.req;
var res2 = this;
var next2 = req.next;
var opts = options || {};
if (!path2) {
throw new TypeError("path argument is required to res.sendFile");
}
if (typeof path2 !== "string") {
throw new TypeError("path must be a string to res.sendFile");
}
if (typeof options === "function") {
done = options;
opts = {};
}
if (!opts.root && !pathIsAbsolute(path2)) {
throw new TypeError("path must be absolute or specify root to res.sendFile");
}
var pathname = encodeURI(path2);
opts.etag = this.app.enabled("etag");
var file = send(req, pathname, opts);
sendfile(res2, file, opts, function(err2) {
if (done) return done(err2);
if (err2 && err2.code === "EISDIR") return next2();
if (err2 && err2.code !== "ECONNABORTED" && err2.syscall !== "write") {
next2(err2);
}
});
};
res.download = function download(path2, filename, options, callback) {
var done = callback;
var name = filename;
var opts = options || null;
if (typeof filename === "function") {
done = filename;
name = null;
opts = null;
} else if (typeof options === "function") {
done = options;
opts = null;
}
if (typeof filename === "object" && (typeof options === "function" || options === void 0)) {
name = null;
opts = filename;
}
var headers = {
"Content-Disposition": contentDisposition(name || path2)
};
if (opts && opts.headers) {
var keys = Object.keys(opts.headers);
for (var i = 0; i < keys.length; i++) {
var key = keys[i];
if (key.toLowerCase() !== "content-disposition") {
headers[key] = opts.headers[key];
}
}
}
opts = Object.create(opts);
opts.headers = headers;
var fullPath = !opts.root ? resolve(path2) : path2;
return this.sendFile(fullPath, opts, done);
};
res.contentType = res.type = function contentType2(type) {
var ct = type.indexOf("/") === -1 ? mime.contentType(type) || "application/octet-stream" : type;
return this.set("Content-Type", ct);
};
res.format = function(obj) {
var req = this.req;
var next2 = req.next;
var keys = Object.keys(obj).filter(function(v) {
return v !== "default";
});
var key = keys.length > 0 ? req.accepts(keys) : false;
this.vary("Accept");
if (key) {
this.set("Content-Type", normalizeType(key).value);
obj[key](req, this, next2);
} else if (obj.default) {
obj.default(req, this, next2);
} else {
next2(createError(406, {
types: normalizeTypes(keys).map(function(o) {
return o.value;
})
}));
}
return this;
};
res.attachment = function attachment(filename) {
if (filename) {
this.type(extname(filename));
}
this.set("Content-Disposition", contentDisposition(filename));
return this;
};
res.append = function append4(field, val2) {
var prev2 = this.get(field);
var value = val2;
if (prev2) {
value = Array.isArray(prev2) ? prev2.concat(val2) : Array.isArray(val2) ? [prev2].concat(val2) : [prev2, val2];
}
return this.set(field, value);
};
res.set = res.header = function header(field, val2) {
if (arguments.length === 2) {
var value = Array.isArray(val2) ? val2.map(String) : String(val2);
if (field.toLowerCase() === "content-type") {
if (Array.isArray(value)) {
throw new TypeError("Content-Type cannot be set to an Array");
}
value = mime.contentType(value);
}
this.setHeader(field, value);
} else {
for (var key in field) {
this.set(key, field[key]);
}
}
return this;
};
res.get = function(field) {
return this.getHeader(field);
};
res.clearCookie = function clearCookie(name, options) {
const opts = { path: "/", ...options, expires: /* @__PURE__ */ new Date(1) };
delete opts.maxAge;
return this.cookie(name, "", opts);
};
res.cookie = function(name, value, options) {
var opts = { ...options };
var secret = this.req.secret;
var signed = opts.signed;
if (signed && !secret) {
throw new Error('cookieParser("secret") required for signed cookies');
}
var val2 = typeof value === "object" ? "j:" + JSON.stringify(value) : String(value);
if (signed) {
val2 = "s:" + sign(val2, secret);
}
if (opts.maxAge != null) {
var maxAge = opts.maxAge - 0;
if (!isNaN(maxAge)) {
opts.expires = new Date(Date.now() + maxAge);
opts.maxAge = Math.floor(maxAge / 1e3);
}
}
if (opts.path == null) {
opts.path = "/";
}
this.append("Set-Cookie", cookie.serialize(name, String(val2), opts));
return this;
};
res.location = function location(url2) {
return this.set("Location", encodeUrl(url2));
};
res.redirect = function redirect(url2) {
var address = url2;
var body;
var status = 302;
if (arguments.length === 2) {
status = arguments[0];
address = arguments[1];
}
address = this.location(address).get("Location");
this.format({
text: function() {
body = statuses.message[status] + ". Redirecting to " + address;
},
html: function() {
var u = escapeHtml(address);
body = "<p>" + statuses.message[status] + ". Redirecting to " + u + "</p>";
},
default: function() {
body = "";
}
});
this.status(status);
this.set("Content-Length", Buffer.byteLength(body));
if (this.req.method === "HEAD") {
this.end();
} else {
this.end(body);
}
};
res.vary = function(field) {
vary(this, field);
return this;
};
res.render = function render3(view, options, callback) {
var app = this.req.app;
var done = callback;
var opts = options || {};
var req = this.req;
var self2 = this;
if (typeof options === "function") {
done = options;
opts = {};
}
opts._locals = self2.locals;
done = done || function(err2, str) {
if (err2) return req.next(err2);
self2.send(str);
};
app.render(view, opts, done);
};
function sendfile(res2, file, options, callback) {
var done = false;
var streaming;
function onaborted() {
if (done) return;
done = true;
var err2 = new Error("Request aborted");
err2.code = "ECONNABORTED";
callback(err2);
}
function ondirectory() {
if (done) return;
done = true;
var err2 = new Error("EISDIR, read");
err2.code = "EISDIR";
callback(err2);
}
function onerror(err2) {
if (done) return;
done = true;
callback(err2);
}
function onend() {
if (done) return;
done = true;
callback();
}
function onfile() {
streaming = false;
}
function onfinish(err2) {
if (err2 && err2.code === "ECONNRESET") return onaborted();
if (err2) return onerror(err2);
if (done) return;
setImmediate(function() {
if (streaming !== false && !done) {
onaborted();
return;
}
if (done) return;
done = true;
callback();
});
}
function onstream() {
streaming = true;
}
file.on("directory", ondirectory);
file.on("end", onend);
file.on("error", onerror);
file.on("file", onfile);
file.on("stream", onstream);
onFinished(res2, onfinish);
if (options.headers) {
file.on("headers", function headers(res3) {
var obj = options.headers;
var keys = Object.keys(obj);
for (var i = 0; i < keys.length; i++) {
var k = keys[i];
res3.setHeader(k, obj[k]);
}
});
}
file.pipe(res2);
}
function stringify2(value, replacer, spaces, escape22) {
var json = replacer || spaces ? JSON.stringify(value, replacer, spaces) : JSON.stringify(value);
if (escape22 && typeof json === "string") {
json = json.replace(/[<>&]/g, function(c) {
switch (c.charCodeAt(0)) {
case 60:
return "\\u003c";
case 62:
return "\\u003e";
case 38:
return "\\u0026";
/* istanbul ignore next: unreachable default */
default:
return c;
}
});
}
return json;
}
}
});
var require_serve_static = __commonJS2({
"node_modules/serve-static/index.js"(exports2, module2) {
"use strict";
var encodeUrl = require_encodeurl();
var escapeHtml = require_escape_html();
var parseUrl = require_parseurl();
var resolve = require("path").resolve;
var send = require_send();
var url2 = require("url");
module2.exports = serveStatic;
function serveStatic(root2, options) {
if (!root2) {
throw new TypeError("root path required");
}
if (typeof root2 !== "string") {
throw new TypeError("root path must be a string");
}
var opts = Object.create(options || null);
var fallthrough = opts.fallthrough !== false;
var redirect = opts.redirect !== false;
var setHeaders = opts.setHeaders;
if (setHeaders && typeof setHeaders !== "function") {
throw new TypeError("option setHeaders must be function");
}
opts.maxage = opts.maxage || opts.maxAge || 0;
opts.root = resolve(root2);
var onDirectory = redirect ? createRedirectDirectoryListener() : createNotFoundDirectoryListener();
return function serveStatic2(req, res, next2) {
if (req.method !== "GET" && req.method !== "HEAD") {
if (fallthrough) {
return next2();
}
res.statusCode = 405;
res.setHeader("Allow", "GET, HEAD");
res.setHeader("Content-Length", "0");
res.end();
return;
}
var forwardError = !fallthrough;
var originalUrl = parseUrl.original(req);
var path = parseUrl(req).pathname;
if (path === "/" && originalUrl.pathname.substr(-1) !== "/") {
path = "";
}
var stream5 = send(req, path, opts);
stream5.on("directory", onDirectory);
if (setHeaders) {
stream5.on("headers", setHeaders);
}
if (fallthrough) {
stream5.on("file", function onFile() {
forwardError = true;
});
}
stream5.on("error", function error(err2) {
if (forwardError || !(err2.statusCode < 500)) {
next2(err2);
return;
}
next2();
});
stream5.pipe(res);
};
}
function collapseLeadingSlashes(str) {
for (var i = 0; i < str.length; i++) {
if (str.charCodeAt(i) !== 47) {
break;
}
}
return i > 1 ? "/" + str.substr(i) : str;
}
function createHtmlDocument(title, body) {
return '<!DOCTYPE html>\n<html lang="en">\n<head>\n<meta charset="utf-8">\n<title>' + title + "</title>\n</head>\n<body>\n<pre>" + body + "</pre>\n</body>\n</html>\n";
}
function createNotFoundDirectoryListener() {
return function notFound() {
this.error(404);
};
}
function createRedirectDirectoryListener() {
return function redirect(res) {
if (this.hasTrailingSlash()) {
this.error(404);
return;
}
var originalUrl = parseUrl.original(this.req);
originalUrl.path = null;
originalUrl.pathname = collapseLeadingSlashes(originalUrl.pathname + "/");
var loc = encodeUrl(url2.format(originalUrl));
var doc = createHtmlDocument("Redirecting", "Redirecting to " + escapeHtml(loc));
res.statusCode = 301;
res.setHeader("Content-Type", "text/html; charset=UTF-8");
res.setHeader("Content-Length", Buffer.byteLength(doc));
res.setHeader("Content-Security-Policy", "default-src 'none'");
res.setHeader("X-Content-Type-Options", "nosniff");
res.setHeader("Location", loc);
res.end(doc);
};
}
}
});
var require_express = __commonJS2({
"node_modules/express/lib/express.js"(exports2, module2) {
"use strict";
var bodyParser = require_body_parser();
var EventEmitter2 = require("node:events").EventEmitter;
var mixin = require_merge_descriptors();
var proto = require_application();
var Router = require_router();
var req = require_request3();
var res = require_response2();
exports2 = module2.exports = createApplication;
function createApplication() {
var app = function(req2, res2, next2) {
app.handle(req2, res2, next2);
};
mixin(app, EventEmitter2.prototype, false);
mixin(app, proto, false);
app.request = Object.create(req, {
app: { configurable: true, enumerable: true, writable: true, value: app }
});
app.response = Object.create(res, {
app: { configurable: true, enumerable: true, writable: true, value: app }
});
app.init();
return app;
}
exports2.application = proto;
exports2.request = req;
exports2.response = res;
exports2.Route = Router.Route;
exports2.Router = Router;
exports2.json = bodyParser.json;
exports2.raw = bodyParser.raw;
exports2.static = require_serve_static();
exports2.text = bodyParser.text;
exports2.urlencoded = bodyParser.urlencoded;
}
});
var require_express2 = __commonJS2({
"node_modules/express/index.js"(exports2, module2) {
"use strict";
module2.exports = require_express();
}
});
var require_lodash = __commonJS2({
"node_modules/lodash/lodash.js"(exports2, module2) {
(function() {
var undefined2;
var VERSION3 = "4.17.21";
var LARGE_ARRAY_SIZE = 200;
var CORE_ERROR_TEXT = "Unsupported core-js use. Try https://npms.io/search?q=ponyfill.", FUNC_ERROR_TEXT = "Expected a function", INVALID_TEMPL_VAR_ERROR_TEXT = "Invalid `variable` option passed into `_.template`";
var HASH_UNDEFINED = "__lodash_hash_undefined__";
var MAX_MEMOIZE_SIZE = 500;
var PLACEHOLDER = "__lodash_placeholder__";
var CLONE_DEEP_FLAG = 1, CLONE_FLAT_FLAG = 2, CLONE_SYMBOLS_FLAG = 4;
var COMPARE_PARTIAL_FLAG = 1, COMPARE_UNORDERED_FLAG = 2;
var WRAP_BIND_FLAG = 1, WRAP_BIND_KEY_FLAG = 2, WRAP_CURRY_BOUND_FLAG = 4, WRAP_CURRY_FLAG = 8, WRAP_CURRY_RIGHT_FLAG = 16, WRAP_PARTIAL_FLAG = 32, WRAP_PARTIAL_RIGHT_FLAG = 64, WRAP_ARY_FLAG = 128, WRAP_REARG_FLAG = 256, WRAP_FLIP_FLAG = 512;
var DEFAULT_TRUNC_LENGTH = 30, DEFAULT_TRUNC_OMISSION = "...";
var HOT_COUNT = 800, HOT_SPAN = 16;
var LAZY_FILTER_FLAG = 1, LAZY_MAP_FLAG = 2, LAZY_WHILE_FLAG = 3;
var INFINITY = 1 / 0, MAX_SAFE_INTEGER = 9007199254740991, MAX_INTEGER = 17976931348623157e292, NAN = 0 / 0;
var MAX_ARRAY_LENGTH = 4294967295, MAX_ARRAY_INDEX = MAX_ARRAY_LENGTH - 1, HALF_MAX_ARRAY_LENGTH = MAX_ARRAY_LENGTH >>> 1;
var wrapFlags = [
["ary", WRAP_ARY_FLAG],
["bind", WRAP_BIND_FLAG],
["bindKey", WRAP_BIND_KEY_FLAG],
["curry", WRAP_CURRY_FLAG],
["curryRight", WRAP_CURRY_RIGHT_FLAG],
["flip", WRAP_FLIP_FLAG],
["partial", WRAP_PARTIAL_FLAG],
["partialRight", WRAP_PARTIAL_RIGHT_FLAG],
["rearg", WRAP_REARG_FLAG]
];
var argsTag = "[object Arguments]", arrayTag = "[object Array]", asyncTag = "[object AsyncFunction]", boolTag = "[object Boolean]", dateTag = "[object Date]", domExcTag = "[object DOMException]", errorTag = "[object Error]", funcTag = "[object Function]", genTag = "[object GeneratorFunction]", mapTag = "[object Map]", numberTag = "[object Number]", nullTag = "[object Null]", objectTag = "[object Object]", promiseTag = "[object Promise]", proxyTag = "[object Proxy]", regexpTag = "[object RegExp]", setTag = "[object Set]", stringTag = "[object String]", symbolTag = "[object Symbol]", undefinedTag = "[object Undefined]", weakMapTag = "[object WeakMap]", weakSetTag = "[object WeakSet]";
var arrayBufferTag = "[object ArrayBuffer]", dataViewTag = "[object DataView]", float32Tag = "[object Float32Array]", float64Tag = "[object Float64Array]", int8Tag = "[object Int8Array]", int16Tag = "[object Int16Array]", int32Tag = "[object Int32Array]", uint8Tag = "[object Uint8Array]", uint8ClampedTag = "[object Uint8ClampedArray]", uint16Tag = "[object Uint16Array]", uint32Tag = "[object Uint32Array]";
var reEmptyStringLeading = /\b__p \+= '';/g, reEmptyStringMiddle = /\b(__p \+=) '' \+/g, reEmptyStringTrailing = /(__e\(.*?\)|\b__t\)) \+\n'';/g;
var reEscapedHtml = /&(?:amp|lt|gt|quot|#39);/g, reUnescapedHtml = /[&<>"']/g, reHasEscapedHtml = RegExp(reEscapedHtml.source), reHasUnescapedHtml = RegExp(reUnescapedHtml.source);
var reEscape = /<%-([\s\S]+?)%>/g, reEvaluate = /<%([\s\S]+?)%>/g, reInterpolate = /<%=([\s\S]+?)%>/g;
var reIsDeepProp = /\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/, reIsPlainProp = /^\w*$/, rePropName = /[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g;
var reRegExpChar = /[\\^$.*+?()[\]{}|]/g, reHasRegExpChar = RegExp(reRegExpChar.source);
var reTrimStart = /^\s+/;
var reWhitespace = /\s/;
var reWrapComment = /\{(?:\n\/\* \[wrapped with .+\] \*\/)?\n?/, reWrapDetails = /\{\n\/\* \[wrapped with (.+)\] \*/, reSplitDetails = /,? & /;
var reAsciiWord = /[^\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\x7f]+/g;
var reForbiddenIdentifierChars = /[()=,{}\[\]\/\s]/;
var reEscapeChar = /\\(\\)?/g;
var reEsTemplate = /\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g;
var reFlags = /\w*$/;
var reIsBadHex = /^[-+]0x[0-9a-f]+$/i;
var reIsBinary = /^0b[01]+$/i;
var reIsHostCtor = /^\[object .+?Constructor\]$/;
var reIsOctal = /^0o[0-7]+$/i;
var reIsUint = /^(?:0|[1-9]\d*)$/;
var reLatin = /[\xc0-\xd6\xd8-\xf6\xf8-\xff\u0100-\u017f]/g;
var reNoMatch = /($^)/;
var reUnescapedString = /['\n\r\u2028\u2029\\]/g;
var rsAstralRange = "\\ud800-\\udfff", rsComboMarksRange = "\\u0300-\\u036f", reComboHalfMarksRange = "\\ufe20-\\ufe2f", rsComboSymbolsRange = "\\u20d0-\\u20ff", rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange, rsDingbatRange = "\\u2700-\\u27bf", rsLowerRange = "a-z\\xdf-\\xf6\\xf8-\\xff", rsMathOpRange = "\\xac\\xb1\\xd7\\xf7", rsNonCharRange = "\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf", rsPunctuationRange = "\\u2000-\\u206f", rsSpaceRange = " \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000", rsUpperRange = "A-Z\\xc0-\\xd6\\xd8-\\xde", rsVarRange = "\\ufe0e\\ufe0f", rsBreakRange = rsMathOpRange + rsNonCharRange + rsPunctuationRange + rsSpaceRange;
var rsApos = "['\u2019]", rsAstral = "[" + rsAstralRange + "]", rsBreak = "[" + rsBreakRange + "]", rsCombo = "[" + rsComboRange + "]", rsDigits = "\\d+", rsDingbat = "[" + rsDingbatRange + "]", rsLower = "[" + rsLowerRange + "]", rsMisc = "[^" + rsAstralRange + rsBreakRange + rsDigits + rsDingbatRange + rsLowerRange + rsUpperRange + "]", rsFitz = "\\ud83c[\\udffb-\\udfff]", rsModifier = "(?:" + rsCombo + "|" + rsFitz + ")", rsNonAstral = "[^" + rsAstralRange + "]", rsRegional = "(?:\\ud83c[\\udde6-\\uddff]){2}", rsSurrPair = "[\\ud800-\\udbff][\\udc00-\\udfff]", rsUpper = "[" + rsUpperRange + "]", rsZWJ = "\\u200d";
var rsMiscLower = "(?:" + rsLower + "|" + rsMisc + ")", rsMiscUpper = "(?:" + rsUpper + "|" + rsMisc + ")", rsOptContrLower = "(?:" + rsApos + "(?:d|ll|m|re|s|t|ve))?", rsOptContrUpper = "(?:" + rsApos + "(?:D|LL|M|RE|S|T|VE))?", reOptMod = rsModifier + "?", rsOptVar = "[" + rsVarRange + "]?", rsOptJoin = "(?:" + rsZWJ + "(?:" + [rsNonAstral, rsRegional, rsSurrPair].join("|") + ")" + rsOptVar + reOptMod + ")*", rsOrdLower = "\\d*(?:1st|2nd|3rd|(?![123])\\dth)(?=\\b|[A-Z_])", rsOrdUpper = "\\d*(?:1ST|2ND|3RD|(?![123])\\dTH)(?=\\b|[a-z_])", rsSeq = rsOptVar + reOptMod + rsOptJoin, rsEmoji = "(?:" + [rsDingbat, rsRegional, rsSurrPair].join("|") + ")" + rsSeq, rsSymbol = "(?:" + [rsNonAstral + rsCombo + "?", rsCombo, rsRegional, rsSurrPair, rsAstral].join("|") + ")";
var reApos = RegExp(rsApos, "g");
var reComboMark = RegExp(rsCombo, "g");
var reUnicode = RegExp(rsFitz + "(?=" + rsFitz + ")|" + rsSymbol + rsSeq, "g");
var reUnicodeWord = RegExp([
rsUpper + "?" + rsLower + "+" + rsOptContrLower + "(?=" + [rsBreak, rsUpper, "$"].join("|") + ")",
rsMiscUpper + "+" + rsOptContrUpper + "(?=" + [rsBreak, rsUpper + rsMiscLower, "$"].join("|") + ")",
rsUpper + "?" + rsMiscLower + "+" + rsOptContrLower,
rsUpper + "+" + rsOptContrUpper,
rsOrdUpper,
rsOrdLower,
rsDigits,
rsEmoji
].join("|"), "g");
var reHasUnicode = RegExp("[" + rsZWJ + rsAstralRange + rsComboRange + rsVarRange + "]");
var reHasUnicodeWord = /[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/;
var contextProps = [
"Array",
"Buffer",
"DataView",
"Date",
"Error",
"Float32Array",
"Float64Array",
"Function",
"Int8Array",
"Int16Array",
"Int32Array",
"Map",
"Math",
"Object",
"Promise",
"RegExp",
"Set",
"String",
"Symbol",
"TypeError",
"Uint8Array",
"Uint8ClampedArray",
"Uint16Array",
"Uint32Array",
"WeakMap",
"_",
"clearTimeout",
"isFinite",
"parseInt",
"setTimeout"
];
var templateCounter = -1;
var typedArrayTags = {};
typedArrayTags[float32Tag] = typedArrayTags[float64Tag] = typedArrayTags[int8Tag] = typedArrayTags[int16Tag] = typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] = typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] = typedArrayTags[uint32Tag] = true;
typedArrayTags[argsTag] = typedArrayTags[arrayTag] = typedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] = typedArrayTags[dataViewTag] = typedArrayTags[dateTag] = typedArrayTags[errorTag] = typedArrayTags[funcTag] = typedArrayTags[mapTag] = typedArrayTags[numberTag] = typedArrayTags[objectTag] = typedArrayTags[regexpTag] = typedArrayTags[setTag] = typedArrayTags[stringTag] = typedArrayTags[weakMapTag] = false;
var cloneableTags = {};
cloneableTags[argsTag] = cloneableTags[arrayTag] = cloneableTags[arrayBufferTag] = cloneableTags[dataViewTag] = cloneableTags[boolTag] = cloneableTags[dateTag] = cloneableTags[float32Tag] = cloneableTags[float64Tag] = cloneableTags[int8Tag] = cloneableTags[int16Tag] = cloneableTags[int32Tag] = cloneableTags[mapTag] = cloneableTags[numberTag] = cloneableTags[objectTag] = cloneableTags[regexpTag] = cloneableTags[setTag] = cloneableTags[stringTag] = cloneableTags[symbolTag] = cloneableTags[uint8Tag] = cloneableTags[uint8ClampedTag] = cloneableTags[uint16Tag] = cloneableTags[uint32Tag] = true;
cloneableTags[errorTag] = cloneableTags[funcTag] = cloneableTags[weakMapTag] = false;
var deburredLetters = {
// Latin-1 Supplement block.
"\xC0": "A",
"\xC1": "A",
"\xC2": "A",
"\xC3": "A",
"\xC4": "A",
"\xC5": "A",
"\xE0": "a",
"\xE1": "a",
"\xE2": "a",
"\xE3": "a",
"\xE4": "a",
"\xE5": "a",
"\xC7": "C",
"\xE7": "c",
"\xD0": "D",
"\xF0": "d",
"\xC8": "E",
"\xC9": "E",
"\xCA": "E",
"\xCB": "E",
"\xE8": "e",
"\xE9": "e",
"\xEA": "e",
"\xEB": "e",
"\xCC": "I",
"\xCD": "I",
"\xCE": "I",
"\xCF": "I",
"\xEC": "i",
"\xED": "i",
"\xEE": "i",
"\xEF": "i",
"\xD1": "N",
"\xF1": "n",
"\xD2": "O",
"\xD3": "O",
"\xD4": "O",
"\xD5": "O",
"\xD6": "O",
"\xD8": "O",
"\xF2": "o",
"\xF3": "o",
"\xF4": "o",
"\xF5": "o",
"\xF6": "o",
"\xF8": "o",
"\xD9": "U",
"\xDA": "U",
"\xDB": "U",
"\xDC": "U",
"\xF9": "u",
"\xFA": "u",
"\xFB": "u",
"\xFC": "u",
"\xDD": "Y",
"\xFD": "y",
"\xFF": "y",
"\xC6": "Ae",
"\xE6": "ae",
"\xDE": "Th",
"\xFE": "th",
"\xDF": "ss",
// Latin Extended-A block.
"\u0100": "A",
"\u0102": "A",
"\u0104": "A",
"\u0101": "a",
"\u0103": "a",
"\u0105": "a",
"\u0106": "C",
"\u0108": "C",
"\u010A": "C",
"\u010C": "C",
"\u0107": "c",
"\u0109": "c",
"\u010B": "c",
"\u010D": "c",
"\u010E": "D",
"\u0110": "D",
"\u010F": "d",
"\u0111": "d",
"\u0112": "E",
"\u0114": "E",
"\u0116": "E",
"\u0118": "E",
"\u011A": "E",
"\u0113": "e",
"\u0115": "e",
"\u0117": "e",
"\u0119": "e",
"\u011B": "e",
"\u011C": "G",
"\u011E": "G",
"\u0120": "G",
"\u0122": "G",
"\u011D": "g",
"\u011F": "g",
"\u0121": "g",
"\u0123": "g",
"\u0124": "H",
"\u0126": "H",
"\u0125": "h",
"\u0127": "h",
"\u0128": "I",
"\u012A": "I",
"\u012C": "I",
"\u012E": "I",
"\u0130": "I",
"\u0129": "i",
"\u012B": "i",
"\u012D": "i",
"\u012F": "i",
"\u0131": "i",
"\u0134": "J",
"\u0135": "j",
"\u0136": "K",
"\u0137": "k",
"\u0138": "k",
"\u0139": "L",
"\u013B": "L",
"\u013D": "L",
"\u013F": "L",
"\u0141": "L",
"\u013A": "l",
"\u013C": "l",
"\u013E": "l",
"\u0140": "l",
"\u0142": "l",
"\u0143": "N",
"\u0145": "N",
"\u0147": "N",
"\u014A": "N",
"\u0144": "n",
"\u0146": "n",
"\u0148": "n",
"\u014B": "n",
"\u014C": "O",
"\u014E": "O",
"\u0150": "O",
"\u014D": "o",
"\u014F": "o",
"\u0151": "o",
"\u0154": "R",
"\u0156": "R",
"\u0158": "R",
"\u0155": "r",
"\u0157": "r",
"\u0159": "r",
"\u015A": "S",
"\u015C": "S",
"\u015E": "S",
"\u0160": "S",
"\u015B": "s",
"\u015D": "s",
"\u015F": "s",
"\u0161": "s",
"\u0162": "T",
"\u0164": "T",
"\u0166": "T",
"\u0163": "t",
"\u0165": "t",
"\u0167": "t",
"\u0168": "U",
"\u016A": "U",
"\u016C": "U",
"\u016E": "U",
"\u0170": "U",
"\u0172": "U",
"\u0169": "u",
"\u016B": "u",
"\u016D": "u",
"\u016F": "u",
"\u0171": "u",
"\u0173": "u",
"\u0174": "W",
"\u0175": "w",
"\u0176": "Y",
"\u0177": "y",
"\u0178": "Y",
"\u0179": "Z",
"\u017B": "Z",
"\u017D": "Z",
"\u017A": "z",
"\u017C": "z",
"\u017E": "z",
"\u0132": "IJ",
"\u0133": "ij",
"\u0152": "Oe",
"\u0153": "oe",
"\u0149": "'n",
"\u017F": "s"
};
var htmlEscapes = {
"&": "&",
"<": "<",
">": ">",
'"': """,
"'": "'"
};
var htmlUnescapes = {
"&": "&",
"<": "<",
">": ">",
""": '"',
"'": "'"
};
var stringEscapes = {
"\\": "\\",
"'": "'",
"\n": "n",
"\r": "r",
"\u2028": "u2028",
"\u2029": "u2029"
};
var freeParseFloat = parseFloat, freeParseInt = parseInt;
var freeGlobal = typeof global == "object" && global && global.Object === Object && global;
var freeSelf = typeof self == "object" && self && self.Object === Object && self;
var root2 = freeGlobal || freeSelf || Function("return this")();
var freeExports = typeof exports2 == "object" && exports2 && !exports2.nodeType && exports2;
var freeModule = freeExports && typeof module2 == "object" && module2 && !module2.nodeType && module2;
var moduleExports = freeModule && freeModule.exports === freeExports;
var freeProcess = moduleExports && freeGlobal.process;
var nodeUtil = (function() {
try {
var types = freeModule && freeModule.require && freeModule.require("util").types;
if (types) {
return types;
}
return freeProcess && freeProcess.binding && freeProcess.binding("util");
} catch (e) {
}
})();
var nodeIsArrayBuffer = nodeUtil && nodeUtil.isArrayBuffer, nodeIsDate = nodeUtil && nodeUtil.isDate, nodeIsMap = nodeUtil && nodeUtil.isMap, nodeIsRegExp = nodeUtil && nodeUtil.isRegExp, nodeIsSet = nodeUtil && nodeUtil.isSet, nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;
function apply(func, thisArg, args) {
switch (args.length) {
case 0:
return func.call(thisArg);
case 1:
return func.call(thisArg, args[0]);
case 2:
return func.call(thisArg, args[0], args[1]);
case 3:
return func.call(thisArg, args[0], args[1], args[2]);
}
return func.apply(thisArg, args);
}
function arrayAggregator(array, setter, iteratee, accumulator) {
var index2 = -1, length = array == null ? 0 : array.length;
while (++index2 < length) {
var value = array[index2];
setter(accumulator, value, iteratee(value), array);
}
return accumulator;
}
function arrayEach(array, iteratee) {
var index2 = -1, length = array == null ? 0 : array.length;
while (++index2 < length) {
if (iteratee(array[index2], index2, array) === false) {
break;
}
}
return array;
}
function arrayEachRight(array, iteratee) {
var length = array == null ? 0 : array.length;
while (length--) {
if (iteratee(array[length], length, array) === false) {
break;
}
}
return array;
}
function arrayEvery(array, predicate) {
var index2 = -1, length = array == null ? 0 : array.length;
while (++index2 < length) {
if (!predicate(array[index2], index2, array)) {
return false;
}
}
return true;
}
function arrayFilter(array, predicate) {
var index2 = -1, length = array == null ? 0 : array.length, resIndex = 0, result = [];
while (++index2 < length) {
var value = array[index2];
if (predicate(value, index2, array)) {
result[resIndex++] = value;
}
}
return result;
}
function arrayIncludes(array, value) {
var length = array == null ? 0 : array.length;
return !!length && baseIndexOf(array, value, 0) > -1;
}
function arrayIncludesWith(array, value, comparator) {
var index2 = -1, length = array == null ? 0 : array.length;
while (++index2 < length) {
if (comparator(value, array[index2])) {
return true;
}
}
return false;
}
function arrayMap(array, iteratee) {
var index2 = -1, length = array == null ? 0 : array.length, result = Array(length);
while (++index2 < length) {
result[index2] = iteratee(array[index2], index2, array);
}
return result;
}
function arrayPush(array, values) {
var index2 = -1, length = values.length, offset = array.length;
while (++index2 < length) {
array[offset + index2] = values[index2];
}
return array;
}
function arrayReduce(array, iteratee, accumulator, initAccum) {
var index2 = -1, length = array == null ? 0 : array.length;
if (initAccum && length) {
accumulator = array[++index2];
}
while (++index2 < length) {
accumulator = iteratee(accumulator, array[index2], index2, array);
}
return accumulator;
}
function arrayReduceRight(array, iteratee, accumulator, initAccum) {
var length = array == null ? 0 : array.length;
if (initAccum && length) {
accumulator = array[--length];
}
while (length--) {
accumulator = iteratee(accumulator, array[length], length, array);
}
return accumulator;
}
function arraySome(array, predicate) {
var index2 = -1, length = array == null ? 0 : array.length;
while (++index2 < length) {
if (predicate(array[index2], index2, array)) {
return true;
}
}
return false;
}
var asciiSize = baseProperty("length");
function asciiToArray(string) {
return string.split("");
}
function asciiWords(string) {
return string.match(reAsciiWord) || [];
}
function baseFindKey(collection, predicate, eachFunc) {
var result;
eachFunc(collection, function(value, key, collection2) {
if (predicate(value, key, collection2)) {
result = key;
return false;
}
});
return result;
}
function baseFindIndex(array, predicate, fromIndex, fromRight) {
var length = array.length, index2 = fromIndex + (fromRight ? 1 : -1);
while (fromRight ? index2-- : ++index2 < length) {
if (predicate(array[index2], index2, array)) {
return index2;
}
}
return -1;
}
function baseIndexOf(array, value, fromIndex) {
return value === value ? strictIndexOf(array, value, fromIndex) : baseFindIndex(array, baseIsNaN, fromIndex);
}
function baseIndexOfWith(array, value, fromIndex, comparator) {
var index2 = fromIndex - 1, length = array.length;
while (++index2 < length) {
if (comparator(array[index2], value)) {
return index2;
}
}
return -1;
}
function baseIsNaN(value) {
return value !== value;
}
function baseMean(array, iteratee) {
var length = array == null ? 0 : array.length;
return length ? baseSum(array, iteratee) / length : NAN;
}
function baseProperty(key) {
return function(object) {
return object == null ? undefined2 : object[key];
};
}
function basePropertyOf(object) {
return function(key) {
return object == null ? undefined2 : object[key];
};
}
function baseReduce(collection, iteratee, accumulator, initAccum, eachFunc) {
eachFunc(collection, function(value, index2, collection2) {
accumulator = initAccum ? (initAccum = false, value) : iteratee(accumulator, value, index2, collection2);
});
return accumulator;
}
function baseSortBy(array, comparer) {
var length = array.length;
array.sort(comparer);
while (length--) {
array[length] = array[length].value;
}
return array;
}
function baseSum(array, iteratee) {
var result, index2 = -1, length = array.length;
while (++index2 < length) {
var current = iteratee(array[index2]);
if (current !== undefined2) {
result = result === undefined2 ? current : result + current;
}
}
return result;
}
function baseTimes(n, iteratee) {
var index2 = -1, result = Array(n);
while (++index2 < n) {
result[index2] = iteratee(index2);
}
return result;
}
function baseToPairs(object, props) {
return arrayMap(props, function(key) {
return [key, object[key]];
});
}
function baseTrim(string) {
return string ? string.slice(0, trimmedEndIndex(string) + 1).replace(reTrimStart, "") : string;
}
function baseUnary(func) {
return function(value) {
return func(value);
};
}
function baseValues(object, props) {
return arrayMap(props, function(key) {
return object[key];
});
}
function cacheHas(cache, key) {
return cache.has(key);
}
function charsStartIndex(strSymbols, chrSymbols) {
var index2 = -1, length = strSymbols.length;
while (++index2 < length && baseIndexOf(chrSymbols, strSymbols[index2], 0) > -1) {
}
return index2;
}
function charsEndIndex(strSymbols, chrSymbols) {
var index2 = strSymbols.length;
while (index2-- && baseIndexOf(chrSymbols, strSymbols[index2], 0) > -1) {
}
return index2;
}
function countHolders(array, placeholder) {
var length = array.length, result = 0;
while (length--) {
if (array[length] === placeholder) {
++result;
}
}
return result;
}
var deburrLetter = basePropertyOf(deburredLetters);
var escapeHtmlChar = basePropertyOf(htmlEscapes);
function escapeStringChar(chr) {
return "\\" + stringEscapes[chr];
}
function getValue(object, key) {
return object == null ? undefined2 : object[key];
}
function hasUnicode(string) {
return reHasUnicode.test(string);
}
function hasUnicodeWord(string) {
return reHasUnicodeWord.test(string);
}
function iteratorToArray(iterator) {
var data2, result = [];
while (!(data2 = iterator.next()).done) {
result.push(data2.value);
}
return result;
}
function mapToArray(map2) {
var index2 = -1, result = Array(map2.size);
map2.forEach(function(value, key) {
result[++index2] = [key, value];
});
return result;
}
function overArg(func, transform) {
return function(arg) {
return func(transform(arg));
};
}
function replaceHolders(array, placeholder) {
var index2 = -1, length = array.length, resIndex = 0, result = [];
while (++index2 < length) {
var value = array[index2];
if (value === placeholder || value === PLACEHOLDER) {
array[index2] = PLACEHOLDER;
result[resIndex++] = index2;
}
}
return result;
}
function setToArray(set) {
var index2 = -1, result = Array(set.size);
set.forEach(function(value) {
result[++index2] = value;
});
return result;
}
function setToPairs(set) {
var index2 = -1, result = Array(set.size);
set.forEach(function(value) {
result[++index2] = [value, value];
});
return result;
}
function strictIndexOf(array, value, fromIndex) {
var index2 = fromIndex - 1, length = array.length;
while (++index2 < length) {
if (array[index2] === value) {
return index2;
}
}
return -1;
}
function strictLastIndexOf(array, value, fromIndex) {
var index2 = fromIndex + 1;
while (index2--) {
if (array[index2] === value) {
return index2;
}
}
return index2;
}
function stringSize(string) {
return hasUnicode(string) ? unicodeSize(string) : asciiSize(string);
}
function stringToArray(string) {
return hasUnicode(string) ? unicodeToArray(string) : asciiToArray(string);
}
function trimmedEndIndex(string) {
var index2 = string.length;
while (index2-- && reWhitespace.test(string.charAt(index2))) {
}
return index2;
}
var unescapeHtmlChar = basePropertyOf(htmlUnescapes);
function unicodeSize(string) {
var result = reUnicode.lastIndex = 0;
while (reUnicode.test(string)) {
++result;
}
return result;
}
function unicodeToArray(string) {
return string.match(reUnicode) || [];
}
function unicodeWords(string) {
return string.match(reUnicodeWord) || [];
}
var runInContext = function runInContext2(context) {
context = context == null ? root2 : _2.defaults(root2.Object(), context, _2.pick(root2, contextProps));
var Array2 = context.Array, Date2 = context.Date, Error2 = context.Error, Function2 = context.Function, Math2 = context.Math, Object2 = context.Object, RegExp2 = context.RegExp, String2 = context.String, TypeError2 = context.TypeError;
var arrayProto = Array2.prototype, funcProto = Function2.prototype, objectProto = Object2.prototype;
var coreJsData = context["__core-js_shared__"];
var funcToString = funcProto.toString;
var hasOwnProperty2 = objectProto.hasOwnProperty;
var idCounter = 0;
var maskSrcKey = (function() {
var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || "");
return uid ? "Symbol(src)_1." + uid : "";
})();
var nativeObjectToString = objectProto.toString;
var objectCtorString = funcToString.call(Object2);
var oldDash = root2._;
var reIsNative = RegExp2(
"^" + funcToString.call(hasOwnProperty2).replace(reRegExpChar, "\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, "$1.*?") + "$"
);
var Buffer2 = moduleExports ? context.Buffer : undefined2, Symbol2 = context.Symbol, Uint8Array2 = context.Uint8Array, allocUnsafe = Buffer2 ? Buffer2.allocUnsafe : undefined2, getPrototype = overArg(Object2.getPrototypeOf, Object2), objectCreate = Object2.create, propertyIsEnumerable = objectProto.propertyIsEnumerable, splice = arrayProto.splice, spreadableSymbol = Symbol2 ? Symbol2.isConcatSpreadable : undefined2, symIterator = Symbol2 ? Symbol2.iterator : undefined2, symToStringTag = Symbol2 ? Symbol2.toStringTag : undefined2;
var defineProperty = (function() {
try {
var func = getNative(Object2, "defineProperty");
func({}, "", {});
return func;
} catch (e) {
}
})();
var ctxClearTimeout = context.clearTimeout !== root2.clearTimeout && context.clearTimeout, ctxNow = Date2 && Date2.now !== root2.Date.now && Date2.now, ctxSetTimeout = context.setTimeout !== root2.setTimeout && context.setTimeout;
var nativeCeil = Math2.ceil, nativeFloor = Math2.floor, nativeGetSymbols = Object2.getOwnPropertySymbols, nativeIsBuffer = Buffer2 ? Buffer2.isBuffer : undefined2, nativeIsFinite = context.isFinite, nativeJoin = arrayProto.join, nativeKeys = overArg(Object2.keys, Object2), nativeMax = Math2.max, nativeMin = Math2.min, nativeNow = Date2.now, nativeParseInt = context.parseInt, nativeRandom = Math2.random, nativeReverse = arrayProto.reverse;
var DataView2 = getNative(context, "DataView"), Map2 = getNative(context, "Map"), Promise2 = getNative(context, "Promise"), Set2 = getNative(context, "Set"), WeakMap2 = getNative(context, "WeakMap"), nativeCreate = getNative(Object2, "create");
var metaMap = WeakMap2 && new WeakMap2();
var realNames = {};
var dataViewCtorString = toSource(DataView2), mapCtorString = toSource(Map2), promiseCtorString = toSource(Promise2), setCtorString = toSource(Set2), weakMapCtorString = toSource(WeakMap2);
var symbolProto = Symbol2 ? Symbol2.prototype : undefined2, symbolValueOf = symbolProto ? symbolProto.valueOf : undefined2, symbolToString = symbolProto ? symbolProto.toString : undefined2;
function lodash(value) {
if (isObjectLike(value) && !isArray2(value) && !(value instanceof LazyWrapper)) {
if (value instanceof LodashWrapper) {
return value;
}
if (hasOwnProperty2.call(value, "__wrapped__")) {
return wrapperClone(value);
}
}
return new LodashWrapper(value);
}
var baseCreate = /* @__PURE__ */ (function() {
function object() {
}
return function(proto) {
if (!isObject2(proto)) {
return {};
}
if (objectCreate) {
return objectCreate(proto);
}
object.prototype = proto;
var result2 = new object();
object.prototype = undefined2;
return result2;
};
})();
function baseLodash() {
}
function LodashWrapper(value, chainAll) {
this.__wrapped__ = value;
this.__actions__ = [];
this.__chain__ = !!chainAll;
this.__index__ = 0;
this.__values__ = undefined2;
}
lodash.templateSettings = {
/**
* Used to detect `data` property values to be HTML-escaped.
*
* @memberOf _.templateSettings
* @type {RegExp}
*/
"escape": reEscape,
/**
* Used to detect code to be evaluated.
*
* @memberOf _.templateSettings
* @type {RegExp}
*/
"evaluate": reEvaluate,
/**
* Used to detect `data` property values to inject.
*
* @memberOf _.templateSettings
* @type {RegExp}
*/
"interpolate": reInterpolate,
/**
* Used to reference the data object in the template text.
*
* @memberOf _.templateSettings
* @type {string}
*/
"variable": "",
/**
* Used to import variables into the compiled template.
*
* @memberOf _.templateSettings
* @type {Object}
*/
"imports": {
/**
* A reference to the `lodash` function.
*
* @memberOf _.templateSettings.imports
* @type {Function}
*/
"_": lodash
}
};
lodash.prototype = baseLodash.prototype;
lodash.prototype.constructor = lodash;
LodashWrapper.prototype = baseCreate(baseLodash.prototype);
LodashWrapper.prototype.constructor = LodashWrapper;
function LazyWrapper(value) {
this.__wrapped__ = value;
this.__actions__ = [];
this.__dir__ = 1;
this.__filtered__ = false;
this.__iteratees__ = [];
this.__takeCount__ = MAX_ARRAY_LENGTH;
this.__views__ = [];
}
function lazyClone() {
var result2 = new LazyWrapper(this.__wrapped__);
result2.__actions__ = copyArray(this.__actions__);
result2.__dir__ = this.__dir__;
result2.__filtered__ = this.__filtered__;
result2.__iteratees__ = copyArray(this.__iteratees__);
result2.__takeCount__ = this.__takeCount__;
result2.__views__ = copyArray(this.__views__);
return result2;
}
function lazyReverse() {
if (this.__filtered__) {
var result2 = new LazyWrapper(this);
result2.__dir__ = -1;
result2.__filtered__ = true;
} else {
result2 = this.clone();
result2.__dir__ *= -1;
}
return result2;
}
function lazyValue() {
var array = this.__wrapped__.value(), dir = this.__dir__, isArr = isArray2(array), isRight = dir < 0, arrLength = isArr ? array.length : 0, view = getView(0, arrLength, this.__views__), start = view.start, end2 = view.end, length = end2 - start, index2 = isRight ? end2 : start - 1, iteratees = this.__iteratees__, iterLength = iteratees.length, resIndex = 0, takeCount = nativeMin(length, this.__takeCount__);
if (!isArr || !isRight && arrLength == length && takeCount == length) {
return baseWrapperValue(array, this.__actions__);
}
var result2 = [];
outer:
while (length-- && resIndex < takeCount) {
index2 += dir;
var iterIndex = -1, value = array[index2];
while (++iterIndex < iterLength) {
var data2 = iteratees[iterIndex], iteratee2 = data2.iteratee, type = data2.type, computed = iteratee2(value);
if (type == LAZY_MAP_FLAG) {
value = computed;
} else if (!computed) {
if (type == LAZY_FILTER_FLAG) {
continue outer;
} else {
break outer;
}
}
}
result2[resIndex++] = value;
}
return result2;
}
LazyWrapper.prototype = baseCreate(baseLodash.prototype);
LazyWrapper.prototype.constructor = LazyWrapper;
function Hash(entries) {
var index2 = -1, length = entries == null ? 0 : entries.length;
this.clear();
while (++index2 < length) {
var entry2 = entries[index2];
this.set(entry2[0], entry2[1]);
}
}
function hashClear() {
this.__data__ = nativeCreate ? nativeCreate(null) : {};
this.size = 0;
}
function hashDelete(key) {
var result2 = this.has(key) && delete this.__data__[key];
this.size -= result2 ? 1 : 0;
return result2;
}
function hashGet(key) {
var data2 = this.__data__;
if (nativeCreate) {
var result2 = data2[key];
return result2 === HASH_UNDEFINED ? undefined2 : result2;
}
return hasOwnProperty2.call(data2, key) ? data2[key] : undefined2;
}
function hashHas(key) {
var data2 = this.__data__;
return nativeCreate ? data2[key] !== undefined2 : hasOwnProperty2.call(data2, key);
}
function hashSet(key, value) {
var data2 = this.__data__;
this.size += this.has(key) ? 0 : 1;
data2[key] = nativeCreate && value === undefined2 ? HASH_UNDEFINED : value;
return this;
}
Hash.prototype.clear = hashClear;
Hash.prototype["delete"] = hashDelete;
Hash.prototype.get = hashGet;
Hash.prototype.has = hashHas;
Hash.prototype.set = hashSet;
function ListCache(entries) {
var index2 = -1, length = entries == null ? 0 : entries.length;
this.clear();
while (++index2 < length) {
var entry2 = entries[index2];
this.set(entry2[0], entry2[1]);
}
}
function listCacheClear() {
this.__data__ = [];
this.size = 0;
}
function listCacheDelete(key) {
var data2 = this.__data__, index2 = assocIndexOf(data2, key);
if (index2 < 0) {
return false;
}
var lastIndex = data2.length - 1;
if (index2 == lastIndex) {
data2.pop();
} else {
splice.call(data2, index2, 1);
}
--this.size;
return true;
}
function listCacheGet(key) {
var data2 = this.__data__, index2 = assocIndexOf(data2, key);
return index2 < 0 ? undefined2 : data2[index2][1];
}
function listCacheHas(key) {
return assocIndexOf(this.__data__, key) > -1;
}
function listCacheSet(key, value) {
var data2 = this.__data__, index2 = assocIndexOf(data2, key);
if (index2 < 0) {
++this.size;
data2.push([key, value]);
} else {
data2[index2][1] = value;
}
return this;
}
ListCache.prototype.clear = listCacheClear;
ListCache.prototype["delete"] = listCacheDelete;
ListCache.prototype.get = listCacheGet;
ListCache.prototype.has = listCacheHas;
ListCache.prototype.set = listCacheSet;
function MapCache(entries) {
var index2 = -1, length = entries == null ? 0 : entries.length;
this.clear();
while (++index2 < length) {
var entry2 = entries[index2];
this.set(entry2[0], entry2[1]);
}
}
function mapCacheClear() {
this.size = 0;
this.__data__ = {
"hash": new Hash(),
"map": new (Map2 || ListCache)(),
"string": new Hash()
};
}
function mapCacheDelete(key) {
var result2 = getMapData(this, key)["delete"](key);
this.size -= result2 ? 1 : 0;
return result2;
}
function mapCacheGet(key) {
return getMapData(this, key).get(key);
}
function mapCacheHas(key) {
return getMapData(this, key).has(key);
}
function mapCacheSet(key, value) {
var data2 = getMapData(this, key), size2 = data2.size;
data2.set(key, value);
this.size += data2.size == size2 ? 0 : 1;
return this;
}
MapCache.prototype.clear = mapCacheClear;
MapCache.prototype["delete"] = mapCacheDelete;
MapCache.prototype.get = mapCacheGet;
MapCache.prototype.has = mapCacheHas;
MapCache.prototype.set = mapCacheSet;
function SetCache(values2) {
var index2 = -1, length = values2 == null ? 0 : values2.length;
this.__data__ = new MapCache();
while (++index2 < length) {
this.add(values2[index2]);
}
}
function setCacheAdd(value) {
this.__data__.set(value, HASH_UNDEFINED);
return this;
}
function setCacheHas(value) {
return this.__data__.has(value);
}
SetCache.prototype.add = SetCache.prototype.push = setCacheAdd;
SetCache.prototype.has = setCacheHas;
function Stack(entries) {
var data2 = this.__data__ = new ListCache(entries);
this.size = data2.size;
}
function stackClear() {
this.__data__ = new ListCache();
this.size = 0;
}
function stackDelete(key) {
var data2 = this.__data__, result2 = data2["delete"](key);
this.size = data2.size;
return result2;
}
function stackGet(key) {
return this.__data__.get(key);
}
function stackHas(key) {
return this.__data__.has(key);
}
function stackSet(key, value) {
var data2 = this.__data__;
if (data2 instanceof ListCache) {
var pairs = data2.__data__;
if (!Map2 || pairs.length < LARGE_ARRAY_SIZE - 1) {
pairs.push([key, value]);
this.size = ++data2.size;
return this;
}
data2 = this.__data__ = new MapCache(pairs);
}
data2.set(key, value);
this.size = data2.size;
return this;
}
Stack.prototype.clear = stackClear;
Stack.prototype["delete"] = stackDelete;
Stack.prototype.get = stackGet;
Stack.prototype.has = stackHas;
Stack.prototype.set = stackSet;
function arrayLikeKeys(value, inherited) {
var isArr = isArray2(value), isArg = !isArr && isArguments(value), isBuff = !isArr && !isArg && isBuffer2(value), isType = !isArr && !isArg && !isBuff && isTypedArray2(value), skipIndexes = isArr || isArg || isBuff || isType, result2 = skipIndexes ? baseTimes(value.length, String2) : [], length = result2.length;
for (var key in value) {
if ((inherited || hasOwnProperty2.call(value, key)) && !(skipIndexes && // Safari 9 has enumerable `arguments.length` in strict mode.
(key == "length" || // Node.js 0.10 has enumerable non-index properties on buffers.
isBuff && (key == "offset" || key == "parent") || // PhantomJS 2 has enumerable non-index properties on typed arrays.
isType && (key == "buffer" || key == "byteLength" || key == "byteOffset") || // Skip index properties.
isIndex(key, length)))) {
result2.push(key);
}
}
return result2;
}
function arraySample(array) {
var length = array.length;
return length ? array[baseRandom(0, length - 1)] : undefined2;
}
function arraySampleSize(array, n) {
return shuffleSelf(copyArray(array), baseClamp(n, 0, array.length));
}
function arrayShuffle(array) {
return shuffleSelf(copyArray(array));
}
function assignMergeValue(object, key, value) {
if (value !== undefined2 && !eq2(object[key], value) || value === undefined2 && !(key in object)) {
baseAssignValue(object, key, value);
}
}
function assignValue(object, key, value) {
var objValue = object[key];
if (!(hasOwnProperty2.call(object, key) && eq2(objValue, value)) || value === undefined2 && !(key in object)) {
baseAssignValue(object, key, value);
}
}
function assocIndexOf(array, key) {
var length = array.length;
while (length--) {
if (eq2(array[length][0], key)) {
return length;
}
}
return -1;
}
function baseAggregator(collection, setter, iteratee2, accumulator) {
baseEach(collection, function(value, key, collection2) {
setter(accumulator, value, iteratee2(value), collection2);
});
return accumulator;
}
function baseAssign(object, source) {
return object && copyObject(source, keys(source), object);
}
function baseAssignIn(object, source) {
return object && copyObject(source, keysIn(source), object);
}
function baseAssignValue(object, key, value) {
if (key == "__proto__" && defineProperty) {
defineProperty(object, key, {
"configurable": true,
"enumerable": true,
"value": value,
"writable": true
});
} else {
object[key] = value;
}
}
function baseAt(object, paths) {
var index2 = -1, length = paths.length, result2 = Array2(length), skip = object == null;
while (++index2 < length) {
result2[index2] = skip ? undefined2 : get2(object, paths[index2]);
}
return result2;
}
function baseClamp(number, lower, upper) {
if (number === number) {
if (upper !== undefined2) {
number = number <= upper ? number : upper;
}
if (lower !== undefined2) {
number = number >= lower ? number : lower;
}
}
return number;
}
function baseClone(value, bitmask, customizer, key, object, stack) {
var result2, isDeep = bitmask & CLONE_DEEP_FLAG, isFlat = bitmask & CLONE_FLAT_FLAG, isFull = bitmask & CLONE_SYMBOLS_FLAG;
if (customizer) {
result2 = object ? customizer(value, key, object, stack) : customizer(value);
}
if (result2 !== undefined2) {
return result2;
}
if (!isObject2(value)) {
return value;
}
var isArr = isArray2(value);
if (isArr) {
result2 = initCloneArray(value);
if (!isDeep) {
return copyArray(value, result2);
}
} else {
var tag = getTag(value), isFunc = tag == funcTag || tag == genTag;
if (isBuffer2(value)) {
return cloneBuffer(value, isDeep);
}
if (tag == objectTag || tag == argsTag || isFunc && !object) {
result2 = isFlat || isFunc ? {} : initCloneObject(value);
if (!isDeep) {
return isFlat ? copySymbolsIn(value, baseAssignIn(result2, value)) : copySymbols(value, baseAssign(result2, value));
}
} else {
if (!cloneableTags[tag]) {
return object ? value : {};
}
result2 = initCloneByTag(value, tag, isDeep);
}
}
stack || (stack = new Stack());
var stacked = stack.get(value);
if (stacked) {
return stacked;
}
stack.set(value, result2);
if (isSet(value)) {
value.forEach(function(subValue) {
result2.add(baseClone(subValue, bitmask, customizer, subValue, value, stack));
});
} else if (isMap(value)) {
value.forEach(function(subValue, key2) {
result2.set(key2, baseClone(subValue, bitmask, customizer, key2, value, stack));
});
}
var keysFunc = isFull ? isFlat ? getAllKeysIn : getAllKeys : isFlat ? keysIn : keys;
var props = isArr ? undefined2 : keysFunc(value);
arrayEach(props || value, function(subValue, key2) {
if (props) {
key2 = subValue;
subValue = value[key2];
}
assignValue(result2, key2, baseClone(subValue, bitmask, customizer, key2, value, stack));
});
return result2;
}
function baseConforms(source) {
var props = keys(source);
return function(object) {
return baseConformsTo(object, source, props);
};
}
function baseConformsTo(object, source, props) {
var length = props.length;
if (object == null) {
return !length;
}
object = Object2(object);
while (length--) {
var key = props[length], predicate = source[key], value = object[key];
if (value === undefined2 && !(key in object) || !predicate(value)) {
return false;
}
}
return true;
}
function baseDelay(func, wait, args) {
if (typeof func != "function") {
throw new TypeError2(FUNC_ERROR_TEXT);
}
return setTimeout2(function() {
func.apply(undefined2, args);
}, wait);
}
function baseDifference(array, values2, iteratee2, comparator) {
var index2 = -1, includes2 = arrayIncludes, isCommon = true, length = array.length, result2 = [], valuesLength = values2.length;
if (!length) {
return result2;
}
if (iteratee2) {
values2 = arrayMap(values2, baseUnary(iteratee2));
}
if (comparator) {
includes2 = arrayIncludesWith;
isCommon = false;
} else if (values2.length >= LARGE_ARRAY_SIZE) {
includes2 = cacheHas;
isCommon = false;
values2 = new SetCache(values2);
}
outer:
while (++index2 < length) {
var value = array[index2], computed = iteratee2 == null ? value : iteratee2(value);
value = comparator || value !== 0 ? value : 0;
if (isCommon && computed === computed) {
var valuesIndex = valuesLength;
while (valuesIndex--) {
if (values2[valuesIndex] === computed) {
continue outer;
}
}
result2.push(value);
} else if (!includes2(values2, computed, comparator)) {
result2.push(value);
}
}
return result2;
}
var baseEach = createBaseEach(baseForOwn);
var baseEachRight = createBaseEach(baseForOwnRight, true);
function baseEvery(collection, predicate) {
var result2 = true;
baseEach(collection, function(value, index2, collection2) {
result2 = !!predicate(value, index2, collection2);
return result2;
});
return result2;
}
function baseExtremum(array, iteratee2, comparator) {
var index2 = -1, length = array.length;
while (++index2 < length) {
var value = array[index2], current = iteratee2(value);
if (current != null && (computed === undefined2 ? current === current && !isSymbol(current) : comparator(current, computed))) {
var computed = current, result2 = value;
}
}
return result2;
}
function baseFill(array, value, start, end2) {
var length = array.length;
start = toInteger(start);
if (start < 0) {
start = -start > length ? 0 : length + start;
}
end2 = end2 === undefined2 || end2 > length ? length : toInteger(end2);
if (end2 < 0) {
end2 += length;
}
end2 = start > end2 ? 0 : toLength(end2);
while (start < end2) {
array[start++] = value;
}
return array;
}
function baseFilter(collection, predicate) {
var result2 = [];
baseEach(collection, function(value, index2, collection2) {
if (predicate(value, index2, collection2)) {
result2.push(value);
}
});
return result2;
}
function baseFlatten(array, depth, predicate, isStrict, result2) {
var index2 = -1, length = array.length;
predicate || (predicate = isFlattenable);
result2 || (result2 = []);
while (++index2 < length) {
var value = array[index2];
if (depth > 0 && predicate(value)) {
if (depth > 1) {
baseFlatten(value, depth - 1, predicate, isStrict, result2);
} else {
arrayPush(result2, value);
}
} else if (!isStrict) {
result2[result2.length] = value;
}
}
return result2;
}
var baseFor = createBaseFor();
var baseForRight = createBaseFor(true);
function baseForOwn(object, iteratee2) {
return object && baseFor(object, iteratee2, keys);
}
function baseForOwnRight(object, iteratee2) {
return object && baseForRight(object, iteratee2, keys);
}
function baseFunctions(object, props) {
return arrayFilter(props, function(key) {
return isFunction2(object[key]);
});
}
function baseGet(object, path) {
path = castPath(path, object);
var index2 = 0, length = path.length;
while (object != null && index2 < length) {
object = object[toKey(path[index2++])];
}
return index2 && index2 == length ? object : undefined2;
}
function baseGetAllKeys(object, keysFunc, symbolsFunc) {
var result2 = keysFunc(object);
return isArray2(object) ? result2 : arrayPush(result2, symbolsFunc(object));
}
function baseGetTag(value) {
if (value == null) {
return value === undefined2 ? undefinedTag : nullTag;
}
return symToStringTag && symToStringTag in Object2(value) ? getRawTag(value) : objectToString(value);
}
function baseGt(value, other) {
return value > other;
}
function baseHas(object, key) {
return object != null && hasOwnProperty2.call(object, key);
}
function baseHasIn(object, key) {
return object != null && key in Object2(object);
}
function baseInRange(number, start, end2) {
return number >= nativeMin(start, end2) && number < nativeMax(start, end2);
}
function baseIntersection(arrays, iteratee2, comparator) {
var includes2 = comparator ? arrayIncludesWith : arrayIncludes, length = arrays[0].length, othLength = arrays.length, othIndex = othLength, caches = Array2(othLength), maxLength = Infinity, result2 = [];
while (othIndex--) {
var array = arrays[othIndex];
if (othIndex && iteratee2) {
array = arrayMap(array, baseUnary(iteratee2));
}
maxLength = nativeMin(array.length, maxLength);
caches[othIndex] = !comparator && (iteratee2 || length >= 120 && array.length >= 120) ? new SetCache(othIndex && array) : undefined2;
}
array = arrays[0];
var index2 = -1, seen = caches[0];
outer:
while (++index2 < length && result2.length < maxLength) {
var value = array[index2], computed = iteratee2 ? iteratee2(value) : value;
value = comparator || value !== 0 ? value : 0;
if (!(seen ? cacheHas(seen, computed) : includes2(result2, computed, comparator))) {
othIndex = othLength;
while (--othIndex) {
var cache = caches[othIndex];
if (!(cache ? cacheHas(cache, computed) : includes2(arrays[othIndex], computed, comparator))) {
continue outer;
}
}
if (seen) {
seen.push(computed);
}
result2.push(value);
}
}
return result2;
}
function baseInverter(object, setter, iteratee2, accumulator) {
baseForOwn(object, function(value, key, object2) {
setter(accumulator, iteratee2(value), key, object2);
});
return accumulator;
}
function baseInvoke(object, path, args) {
path = castPath(path, object);
object = parent2(object, path);
var func = object == null ? object : object[toKey(last2(path))];
return func == null ? undefined2 : apply(func, object, args);
}
function baseIsArguments(value) {
return isObjectLike(value) && baseGetTag(value) == argsTag;
}
function baseIsArrayBuffer(value) {
return isObjectLike(value) && baseGetTag(value) == arrayBufferTag;
}
function baseIsDate(value) {
return isObjectLike(value) && baseGetTag(value) == dateTag;
}
function baseIsEqual(value, other, bitmask, customizer, stack) {
if (value === other) {
return true;
}
if (value == null || other == null || !isObjectLike(value) && !isObjectLike(other)) {
return value !== value && other !== other;
}
return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack);
}
function baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) {
var objIsArr = isArray2(object), othIsArr = isArray2(other), objTag = objIsArr ? arrayTag : getTag(object), othTag = othIsArr ? arrayTag : getTag(other);
objTag = objTag == argsTag ? objectTag : objTag;
othTag = othTag == argsTag ? objectTag : othTag;
var objIsObj = objTag == objectTag, othIsObj = othTag == objectTag, isSameTag = objTag == othTag;
if (isSameTag && isBuffer2(object)) {
if (!isBuffer2(other)) {
return false;
}
objIsArr = true;
objIsObj = false;
}
if (isSameTag && !objIsObj) {
stack || (stack = new Stack());
return objIsArr || isTypedArray2(object) ? equalArrays(object, other, bitmask, customizer, equalFunc, stack) : equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack);
}
if (!(bitmask & COMPARE_PARTIAL_FLAG)) {
var objIsWrapped = objIsObj && hasOwnProperty2.call(object, "__wrapped__"), othIsWrapped = othIsObj && hasOwnProperty2.call(other, "__wrapped__");
if (objIsWrapped || othIsWrapped) {
var objUnwrapped = objIsWrapped ? object.value() : object, othUnwrapped = othIsWrapped ? other.value() : other;
stack || (stack = new Stack());
return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack);
}
}
if (!isSameTag) {
return false;
}
stack || (stack = new Stack());
return equalObjects(object, other, bitmask, customizer, equalFunc, stack);
}
function baseIsMap(value) {
return isObjectLike(value) && getTag(value) == mapTag;
}
function baseIsMatch(object, source, matchData, customizer) {
var index2 = matchData.length, length = index2, noCustomizer = !customizer;
if (object == null) {
return !length;
}
object = Object2(object);
while (index2--) {
var data2 = matchData[index2];
if (noCustomizer && data2[2] ? data2[1] !== object[data2[0]] : !(data2[0] in object)) {
return false;
}
}
while (++index2 < length) {
data2 = matchData[index2];
var key = data2[0], objValue = object[key], srcValue = data2[1];
if (noCustomizer && data2[2]) {
if (objValue === undefined2 && !(key in object)) {
return false;
}
} else {
var stack = new Stack();
if (customizer) {
var result2 = customizer(objValue, srcValue, key, object, source, stack);
}
if (!(result2 === undefined2 ? baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG, customizer, stack) : result2)) {
return false;
}
}
}
return true;
}
function baseIsNative(value) {
if (!isObject2(value) || isMasked(value)) {
return false;
}
var pattern = isFunction2(value) ? reIsNative : reIsHostCtor;
return pattern.test(toSource(value));
}
function baseIsRegExp(value) {
return isObjectLike(value) && baseGetTag(value) == regexpTag;
}
function baseIsSet(value) {
return isObjectLike(value) && getTag(value) == setTag;
}
function baseIsTypedArray(value) {
return isObjectLike(value) && isLength(value.length) && !!typedArrayTags[baseGetTag(value)];
}
function baseIteratee(value) {
if (typeof value == "function") {
return value;
}
if (value == null) {
return identity;
}
if (typeof value == "object") {
return isArray2(value) ? baseMatchesProperty(value[0], value[1]) : baseMatches(value);
}
return property(value);
}
function baseKeys(object) {
if (!isPrototype(object)) {
return nativeKeys(object);
}
var result2 = [];
for (var key in Object2(object)) {
if (hasOwnProperty2.call(object, key) && key != "constructor") {
result2.push(key);
}
}
return result2;
}
function baseKeysIn(object) {
if (!isObject2(object)) {
return nativeKeysIn(object);
}
var isProto = isPrototype(object), result2 = [];
for (var key in object) {
if (!(key == "constructor" && (isProto || !hasOwnProperty2.call(object, key)))) {
result2.push(key);
}
}
return result2;
}
function baseLt(value, other) {
return value < other;
}
function baseMap(collection, iteratee2) {
var index2 = -1, result2 = isArrayLike2(collection) ? Array2(collection.length) : [];
baseEach(collection, function(value, key, collection2) {
result2[++index2] = iteratee2(value, key, collection2);
});
return result2;
}
function baseMatches(source) {
var matchData = getMatchData(source);
if (matchData.length == 1 && matchData[0][2]) {
return matchesStrictComparable(matchData[0][0], matchData[0][1]);
}
return function(object) {
return object === source || baseIsMatch(object, source, matchData);
};
}
function baseMatchesProperty(path, srcValue) {
if (isKey(path) && isStrictComparable(srcValue)) {
return matchesStrictComparable(toKey(path), srcValue);
}
return function(object) {
var objValue = get2(object, path);
return objValue === undefined2 && objValue === srcValue ? hasIn(object, path) : baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG);
};
}
function baseMerge(object, source, srcIndex, customizer, stack) {
if (object === source) {
return;
}
baseFor(source, function(srcValue, key) {
stack || (stack = new Stack());
if (isObject2(srcValue)) {
baseMergeDeep(object, source, key, srcIndex, baseMerge, customizer, stack);
} else {
var newValue = customizer ? customizer(safeGet(object, key), srcValue, key + "", object, source, stack) : undefined2;
if (newValue === undefined2) {
newValue = srcValue;
}
assignMergeValue(object, key, newValue);
}
}, keysIn);
}
function baseMergeDeep(object, source, key, srcIndex, mergeFunc, customizer, stack) {
var objValue = safeGet(object, key), srcValue = safeGet(source, key), stacked = stack.get(srcValue);
if (stacked) {
assignMergeValue(object, key, stacked);
return;
}
var newValue = customizer ? customizer(objValue, srcValue, key + "", object, source, stack) : undefined2;
var isCommon = newValue === undefined2;
if (isCommon) {
var isArr = isArray2(srcValue), isBuff = !isArr && isBuffer2(srcValue), isTyped = !isArr && !isBuff && isTypedArray2(srcValue);
newValue = srcValue;
if (isArr || isBuff || isTyped) {
if (isArray2(objValue)) {
newValue = objValue;
} else if (isArrayLikeObject(objValue)) {
newValue = copyArray(objValue);
} else if (isBuff) {
isCommon = false;
newValue = cloneBuffer(srcValue, true);
} else if (isTyped) {
isCommon = false;
newValue = cloneTypedArray(srcValue, true);
} else {
newValue = [];
}
} else if (isPlainObject2(srcValue) || isArguments(srcValue)) {
newValue = objValue;
if (isArguments(objValue)) {
newValue = toPlainObject(objValue);
} else if (!isObject2(objValue) || isFunction2(objValue)) {
newValue = initCloneObject(srcValue);
}
} else {
isCommon = false;
}
}
if (isCommon) {
stack.set(srcValue, newValue);
mergeFunc(newValue, srcValue, srcIndex, customizer, stack);
stack["delete"](srcValue);
}
assignMergeValue(object, key, newValue);
}
function baseNth(array, n) {
var length = array.length;
if (!length) {
return;
}
n += n < 0 ? length : 0;
return isIndex(n, length) ? array[n] : undefined2;
}
function baseOrderBy(collection, iteratees, orders) {
if (iteratees.length) {
iteratees = arrayMap(iteratees, function(iteratee2) {
if (isArray2(iteratee2)) {
return function(value) {
return baseGet(value, iteratee2.length === 1 ? iteratee2[0] : iteratee2);
};
}
return iteratee2;
});
} else {
iteratees = [identity];
}
var index2 = -1;
iteratees = arrayMap(iteratees, baseUnary(getIteratee()));
var result2 = baseMap(collection, function(value, key, collection2) {
var criteria = arrayMap(iteratees, function(iteratee2) {
return iteratee2(value);
});
return { "criteria": criteria, "index": ++index2, "value": value };
});
return baseSortBy(result2, function(object, other) {
return compareMultiple(object, other, orders);
});
}
function basePick(object, paths) {
return basePickBy(object, paths, function(value, path) {
return hasIn(object, path);
});
}
function basePickBy(object, paths, predicate) {
var index2 = -1, length = paths.length, result2 = {};
while (++index2 < length) {
var path = paths[index2], value = baseGet(object, path);
if (predicate(value, path)) {
baseSet(result2, castPath(path, object), value);
}
}
return result2;
}
function basePropertyDeep(path) {
return function(object) {
return baseGet(object, path);
};
}
function basePullAll(array, values2, iteratee2, comparator) {
var indexOf2 = comparator ? baseIndexOfWith : baseIndexOf, index2 = -1, length = values2.length, seen = array;
if (array === values2) {
values2 = copyArray(values2);
}
if (iteratee2) {
seen = arrayMap(array, baseUnary(iteratee2));
}
while (++index2 < length) {
var fromIndex = 0, value = values2[index2], computed = iteratee2 ? iteratee2(value) : value;
while ((fromIndex = indexOf2(seen, computed, fromIndex, comparator)) > -1) {
if (seen !== array) {
splice.call(seen, fromIndex, 1);
}
splice.call(array, fromIndex, 1);
}
}
return array;
}
function basePullAt(array, indexes) {
var length = array ? indexes.length : 0, lastIndex = length - 1;
while (length--) {
var index2 = indexes[length];
if (length == lastIndex || index2 !== previous) {
var previous = index2;
if (isIndex(index2)) {
splice.call(array, index2, 1);
} else {
baseUnset(array, index2);
}
}
}
return array;
}
function baseRandom(lower, upper) {
return lower + nativeFloor(nativeRandom() * (upper - lower + 1));
}
function baseRange(start, end2, step, fromRight) {
var index2 = -1, length = nativeMax(nativeCeil((end2 - start) / (step || 1)), 0), result2 = Array2(length);
while (length--) {
result2[fromRight ? length : ++index2] = start;
start += step;
}
return result2;
}
function baseRepeat(string, n) {
var result2 = "";
if (!string || n < 1 || n > MAX_SAFE_INTEGER) {
return result2;
}
do {
if (n % 2) {
result2 += string;
}
n = nativeFloor(n / 2);
if (n) {
string += string;
}
} while (n);
return result2;
}
function baseRest(func, start) {
return setToString(overRest(func, start, identity), func + "");
}
function baseSample(collection) {
return arraySample(values(collection));
}
function baseSampleSize(collection, n) {
var array = values(collection);
return shuffleSelf(array, baseClamp(n, 0, array.length));
}
function baseSet(object, path, value, customizer) {
if (!isObject2(object)) {
return object;
}
path = castPath(path, object);
var index2 = -1, length = path.length, lastIndex = length - 1, nested = object;
while (nested != null && ++index2 < length) {
var key = toKey(path[index2]), newValue = value;
if (key === "__proto__" || key === "constructor" || key === "prototype") {
return object;
}
if (index2 != lastIndex) {
var objValue = nested[key];
newValue = customizer ? customizer(objValue, key, nested) : undefined2;
if (newValue === undefined2) {
newValue = isObject2(objValue) ? objValue : isIndex(path[index2 + 1]) ? [] : {};
}
}
assignValue(nested, key, newValue);
nested = nested[key];
}
return object;
}
var baseSetData = !metaMap ? identity : function(func, data2) {
metaMap.set(func, data2);
return func;
};
var baseSetToString = !defineProperty ? identity : function(func, string) {
return defineProperty(func, "toString", {
"configurable": true,
"enumerable": false,
"value": constant(string),
"writable": true
});
};
function baseShuffle(collection) {
return shuffleSelf(values(collection));
}
function baseSlice(array, start, end2) {
var index2 = -1, length = array.length;
if (start < 0) {
start = -start > length ? 0 : length + start;
}
end2 = end2 > length ? length : end2;
if (end2 < 0) {
end2 += length;
}
length = start > end2 ? 0 : end2 - start >>> 0;
start >>>= 0;
var result2 = Array2(length);
while (++index2 < length) {
result2[index2] = array[index2 + start];
}
return result2;
}
function baseSome(collection, predicate) {
var result2;
baseEach(collection, function(value, index2, collection2) {
result2 = predicate(value, index2, collection2);
return !result2;
});
return !!result2;
}
function baseSortedIndex(array, value, retHighest) {
var low = 0, high = array == null ? low : array.length;
if (typeof value == "number" && value === value && high <= HALF_MAX_ARRAY_LENGTH) {
while (low < high) {
var mid = low + high >>> 1, computed = array[mid];
if (computed !== null && !isSymbol(computed) && (retHighest ? computed <= value : computed < value)) {
low = mid + 1;
} else {
high = mid;
}
}
return high;
}
return baseSortedIndexBy(array, value, identity, retHighest);
}
function baseSortedIndexBy(array, value, iteratee2, retHighest) {
var low = 0, high = array == null ? 0 : array.length;
if (high === 0) {
return 0;
}
value = iteratee2(value);
var valIsNaN = value !== value, valIsNull = value === null, valIsSymbol = isSymbol(value), valIsUndefined = value === undefined2;
while (low < high) {
var mid = nativeFloor((low + high) / 2), computed = iteratee2(array[mid]), othIsDefined = computed !== undefined2, othIsNull = computed === null, othIsReflexive = computed === computed, othIsSymbol = isSymbol(computed);
if (valIsNaN) {
var setLow = retHighest || othIsReflexive;
} else if (valIsUndefined) {
setLow = othIsReflexive && (retHighest || othIsDefined);
} else if (valIsNull) {
setLow = othIsReflexive && othIsDefined && (retHighest || !othIsNull);
} else if (valIsSymbol) {
setLow = othIsReflexive && othIsDefined && !othIsNull && (retHighest || !othIsSymbol);
} else if (othIsNull || othIsSymbol) {
setLow = false;
} else {
setLow = retHighest ? computed <= value : computed < value;
}
if (setLow) {
low = mid + 1;
} else {
high = mid;
}
}
return nativeMin(high, MAX_ARRAY_INDEX);
}
function baseSortedUniq(array, iteratee2) {
var index2 = -1, length = array.length, resIndex = 0, result2 = [];
while (++index2 < length) {
var value = array[index2], computed = iteratee2 ? iteratee2(value) : value;
if (!index2 || !eq2(computed, seen)) {
var seen = computed;
result2[resIndex++] = value === 0 ? 0 : value;
}
}
return result2;
}
function baseToNumber(value) {
if (typeof value == "number") {
return value;
}
if (isSymbol(value)) {
return NAN;
}
return +value;
}
function baseToString(value) {
if (typeof value == "string") {
return value;
}
if (isArray2(value)) {
return arrayMap(value, baseToString) + "";
}
if (isSymbol(value)) {
return symbolToString ? symbolToString.call(value) : "";
}
var result2 = value + "";
return result2 == "0" && 1 / value == -INFINITY ? "-0" : result2;
}
function baseUniq(array, iteratee2, comparator) {
var index2 = -1, includes2 = arrayIncludes, length = array.length, isCommon = true, result2 = [], seen = result2;
if (comparator) {
isCommon = false;
includes2 = arrayIncludesWith;
} else if (length >= LARGE_ARRAY_SIZE) {
var set2 = iteratee2 ? null : createSet(array);
if (set2) {
return setToArray(set2);
}
isCommon = false;
includes2 = cacheHas;
seen = new SetCache();
} else {
seen = iteratee2 ? [] : result2;
}
outer:
while (++index2 < length) {
var value = array[index2], computed = iteratee2 ? iteratee2(value) : value;
value = comparator || value !== 0 ? value : 0;
if (isCommon && computed === computed) {
var seenIndex = seen.length;
while (seenIndex--) {
if (seen[seenIndex] === computed) {
continue outer;
}
}
if (iteratee2) {
seen.push(computed);
}
result2.push(value);
} else if (!includes2(seen, computed, comparator)) {
if (seen !== result2) {
seen.push(computed);
}
result2.push(value);
}
}
return result2;
}
function baseUnset(object, path) {
path = castPath(path, object);
object = parent2(object, path);
return object == null || delete object[toKey(last2(path))];
}
function baseUpdate(object, path, updater, customizer) {
return baseSet(object, path, updater(baseGet(object, path)), customizer);
}
function baseWhile(array, predicate, isDrop, fromRight) {
var length = array.length, index2 = fromRight ? length : -1;
while ((fromRight ? index2-- : ++index2 < length) && predicate(array[index2], index2, array)) {
}
return isDrop ? baseSlice(array, fromRight ? 0 : index2, fromRight ? index2 + 1 : length) : baseSlice(array, fromRight ? index2 + 1 : 0, fromRight ? length : index2);
}
function baseWrapperValue(value, actions) {
var result2 = value;
if (result2 instanceof LazyWrapper) {
result2 = result2.value();
}
return arrayReduce(actions, function(result3, action) {
return action.func.apply(action.thisArg, arrayPush([result3], action.args));
}, result2);
}
function baseXor(arrays, iteratee2, comparator) {
var length = arrays.length;
if (length < 2) {
return length ? baseUniq(arrays[0]) : [];
}
var index2 = -1, result2 = Array2(length);
while (++index2 < length) {
var array = arrays[index2], othIndex = -1;
while (++othIndex < length) {
if (othIndex != index2) {
result2[index2] = baseDifference(result2[index2] || array, arrays[othIndex], iteratee2, comparator);
}
}
}
return baseUniq(baseFlatten(result2, 1), iteratee2, comparator);
}
function baseZipObject(props, values2, assignFunc) {
var index2 = -1, length = props.length, valsLength = values2.length, result2 = {};
while (++index2 < length) {
var value = index2 < valsLength ? values2[index2] : undefined2;
assignFunc(result2, props[index2], value);
}
return result2;
}
function castArrayLikeObject(value) {
return isArrayLikeObject(value) ? value : [];
}
function castFunction(value) {
return typeof value == "function" ? value : identity;
}
function castPath(value, object) {
if (isArray2(value)) {
return value;
}
return isKey(value, object) ? [value] : stringToPath(toString4(value));
}
var castRest = baseRest;
function castSlice(array, start, end2) {
var length = array.length;
end2 = end2 === undefined2 ? length : end2;
return !start && end2 >= length ? array : baseSlice(array, start, end2);
}
var clearTimeout2 = ctxClearTimeout || function(id) {
return root2.clearTimeout(id);
};
function cloneBuffer(buffer, isDeep) {
if (isDeep) {
return buffer.slice();
}
var length = buffer.length, result2 = allocUnsafe ? allocUnsafe(length) : new buffer.constructor(length);
buffer.copy(result2);
return result2;
}
function cloneArrayBuffer(arrayBuffer) {
var result2 = new arrayBuffer.constructor(arrayBuffer.byteLength);
new Uint8Array2(result2).set(new Uint8Array2(arrayBuffer));
return result2;
}
function cloneDataView(dataView, isDeep) {
var buffer = isDeep ? cloneArrayBuffer(dataView.buffer) : dataView.buffer;
return new dataView.constructor(buffer, dataView.byteOffset, dataView.byteLength);
}
function cloneRegExp(regexp) {
var result2 = new regexp.constructor(regexp.source, reFlags.exec(regexp));
result2.lastIndex = regexp.lastIndex;
return result2;
}
function cloneSymbol(symbol) {
return symbolValueOf ? Object2(symbolValueOf.call(symbol)) : {};
}
function cloneTypedArray(typedArray, isDeep) {
var buffer = isDeep ? cloneArrayBuffer(typedArray.buffer) : typedArray.buffer;
return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length);
}
function compareAscending(value, other) {
if (value !== other) {
var valIsDefined = value !== undefined2, valIsNull = value === null, valIsReflexive = value === value, valIsSymbol = isSymbol(value);
var othIsDefined = other !== undefined2, othIsNull = other === null, othIsReflexive = other === other, othIsSymbol = isSymbol(other);
if (!othIsNull && !othIsSymbol && !valIsSymbol && value > other || valIsSymbol && othIsDefined && othIsReflexive && !othIsNull && !othIsSymbol || valIsNull && othIsDefined && othIsReflexive || !valIsDefined && othIsReflexive || !valIsReflexive) {
return 1;
}
if (!valIsNull && !valIsSymbol && !othIsSymbol && value < other || othIsSymbol && valIsDefined && valIsReflexive && !valIsNull && !valIsSymbol || othIsNull && valIsDefined && valIsReflexive || !othIsDefined && valIsReflexive || !othIsReflexive) {
return -1;
}
}
return 0;
}
function compareMultiple(object, other, orders) {
var index2 = -1, objCriteria = object.criteria, othCriteria = other.criteria, length = objCriteria.length, ordersLength = orders.length;
while (++index2 < length) {
var result2 = compareAscending(objCriteria[index2], othCriteria[index2]);
if (result2) {
if (index2 >= ordersLength) {
return result2;
}
var order = orders[index2];
return result2 * (order == "desc" ? -1 : 1);
}
}
return object.index - other.index;
}
function composeArgs(args, partials, holders, isCurried) {
var argsIndex = -1, argsLength = args.length, holdersLength = holders.length, leftIndex = -1, leftLength = partials.length, rangeLength = nativeMax(argsLength - holdersLength, 0), result2 = Array2(leftLength + rangeLength), isUncurried = !isCurried;
while (++leftIndex < leftLength) {
result2[leftIndex] = partials[leftIndex];
}
while (++argsIndex < holdersLength) {
if (isUncurried || argsIndex < argsLength) {
result2[holders[argsIndex]] = args[argsIndex];
}
}
while (rangeLength--) {
result2[leftIndex++] = args[argsIndex++];
}
return result2;
}
function composeArgsRight(args, partials, holders, isCurried) {
var argsIndex = -1, argsLength = args.length, holdersIndex = -1, holdersLength = holders.length, rightIndex = -1, rightLength = partials.length, rangeLength = nativeMax(argsLength - holdersLength, 0), result2 = Array2(rangeLength + rightLength), isUncurried = !isCurried;
while (++argsIndex < rangeLength) {
result2[argsIndex] = args[argsIndex];
}
var offset = argsIndex;
while (++rightIndex < rightLength) {
result2[offset + rightIndex] = partials[rightIndex];
}
while (++holdersIndex < holdersLength) {
if (isUncurried || argsIndex < argsLength) {
result2[offset + holders[holdersIndex]] = args[argsIndex++];
}
}
return result2;
}
function copyArray(source, array) {
var index2 = -1, length = source.length;
array || (array = Array2(length));
while (++index2 < length) {
array[index2] = source[index2];
}
return array;
}
function copyObject(source, props, object, customizer) {
var isNew = !object;
object || (object = {});
var index2 = -1, length = props.length;
while (++index2 < length) {
var key = props[index2];
var newValue = customizer ? customizer(object[key], source[key], key, object, source) : undefined2;
if (newValue === undefined2) {
newValue = source[key];
}
if (isNew) {
baseAssignValue(object, key, newValue);
} else {
assignValue(object, key, newValue);
}
}
return object;
}
function copySymbols(source, object) {
return copyObject(source, getSymbols(source), object);
}
function copySymbolsIn(source, object) {
return copyObject(source, getSymbolsIn(source), object);
}
function createAggregator(setter, initializer) {
return function(collection, iteratee2) {
var func = isArray2(collection) ? arrayAggregator : baseAggregator, accumulator = initializer ? initializer() : {};
return func(collection, setter, getIteratee(iteratee2, 2), accumulator);
};
}
function createAssigner(assigner) {
return baseRest(function(object, sources) {
var index2 = -1, length = sources.length, customizer = length > 1 ? sources[length - 1] : undefined2, guard = length > 2 ? sources[2] : undefined2;
customizer = assigner.length > 3 && typeof customizer == "function" ? (length--, customizer) : undefined2;
if (guard && isIterateeCall(sources[0], sources[1], guard)) {
customizer = length < 3 ? undefined2 : customizer;
length = 1;
}
object = Object2(object);
while (++index2 < length) {
var source = sources[index2];
if (source) {
assigner(object, source, index2, customizer);
}
}
return object;
});
}
function createBaseEach(eachFunc, fromRight) {
return function(collection, iteratee2) {
if (collection == null) {
return collection;
}
if (!isArrayLike2(collection)) {
return eachFunc(collection, iteratee2);
}
var length = collection.length, index2 = fromRight ? length : -1, iterable = Object2(collection);
while (fromRight ? index2-- : ++index2 < length) {
if (iteratee2(iterable[index2], index2, iterable) === false) {
break;
}
}
return collection;
};
}
function createBaseFor(fromRight) {
return function(object, iteratee2, keysFunc) {
var index2 = -1, iterable = Object2(object), props = keysFunc(object), length = props.length;
while (length--) {
var key = props[fromRight ? length : ++index2];
if (iteratee2(iterable[key], key, iterable) === false) {
break;
}
}
return object;
};
}
function createBind(func, bitmask, thisArg) {
var isBind = bitmask & WRAP_BIND_FLAG, Ctor = createCtor(func);
function wrapper() {
var fn = this && this !== root2 && this instanceof wrapper ? Ctor : func;
return fn.apply(isBind ? thisArg : this, arguments);
}
return wrapper;
}
function createCaseFirst(methodName) {
return function(string) {
string = toString4(string);
var strSymbols = hasUnicode(string) ? stringToArray(string) : undefined2;
var chr = strSymbols ? strSymbols[0] : string.charAt(0);
var trailing = strSymbols ? castSlice(strSymbols, 1).join("") : string.slice(1);
return chr[methodName]() + trailing;
};
}
function createCompounder(callback) {
return function(string) {
return arrayReduce(words(deburr(string).replace(reApos, "")), callback, "");
};
}
function createCtor(Ctor) {
return function() {
var args = arguments;
switch (args.length) {
case 0:
return new Ctor();
case 1:
return new Ctor(args[0]);
case 2:
return new Ctor(args[0], args[1]);
case 3:
return new Ctor(args[0], args[1], args[2]);
case 4:
return new Ctor(args[0], args[1], args[2], args[3]);
case 5:
return new Ctor(args[0], args[1], args[2], args[3], args[4]);
case 6:
return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5]);
case 7:
return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5], args[6]);
}
var thisBinding = baseCreate(Ctor.prototype), result2 = Ctor.apply(thisBinding, args);
return isObject2(result2) ? result2 : thisBinding;
};
}
function createCurry(func, bitmask, arity) {
var Ctor = createCtor(func);
function wrapper() {
var length = arguments.length, args = Array2(length), index2 = length, placeholder = getHolder(wrapper);
while (index2--) {
args[index2] = arguments[index2];
}
var holders = length < 3 && args[0] !== placeholder && args[length - 1] !== placeholder ? [] : replaceHolders(args, placeholder);
length -= holders.length;
if (length < arity) {
return createRecurry(
func,
bitmask,
createHybrid,
wrapper.placeholder,
undefined2,
args,
holders,
undefined2,
undefined2,
arity - length
);
}
var fn = this && this !== root2 && this instanceof wrapper ? Ctor : func;
return apply(fn, this, args);
}
return wrapper;
}
function createFind(findIndexFunc) {
return function(collection, predicate, fromIndex) {
var iterable = Object2(collection);
if (!isArrayLike2(collection)) {
var iteratee2 = getIteratee(predicate, 3);
collection = keys(collection);
predicate = function(key) {
return iteratee2(iterable[key], key, iterable);
};
}
var index2 = findIndexFunc(collection, predicate, fromIndex);
return index2 > -1 ? iterable[iteratee2 ? collection[index2] : index2] : undefined2;
};
}
function createFlow(fromRight) {
return flatRest(function(funcs) {
var length = funcs.length, index2 = length, prereq = LodashWrapper.prototype.thru;
if (fromRight) {
funcs.reverse();
}
while (index2--) {
var func = funcs[index2];
if (typeof func != "function") {
throw new TypeError2(FUNC_ERROR_TEXT);
}
if (prereq && !wrapper && getFuncName(func) == "wrapper") {
var wrapper = new LodashWrapper([], true);
}
}
index2 = wrapper ? index2 : length;
while (++index2 < length) {
func = funcs[index2];
var funcName = getFuncName(func), data2 = funcName == "wrapper" ? getData(func) : undefined2;
if (data2 && isLaziable(data2[0]) && data2[1] == (WRAP_ARY_FLAG | WRAP_CURRY_FLAG | WRAP_PARTIAL_FLAG | WRAP_REARG_FLAG) && !data2[4].length && data2[9] == 1) {
wrapper = wrapper[getFuncName(data2[0])].apply(wrapper, data2[3]);
} else {
wrapper = func.length == 1 && isLaziable(func) ? wrapper[funcName]() : wrapper.thru(func);
}
}
return function() {
var args = arguments, value = args[0];
if (wrapper && args.length == 1 && isArray2(value)) {
return wrapper.plant(value).value();
}
var index22 = 0, result2 = length ? funcs[index22].apply(this, args) : value;
while (++index22 < length) {
result2 = funcs[index22].call(this, result2);
}
return result2;
};
});
}
function createHybrid(func, bitmask, thisArg, partials, holders, partialsRight, holdersRight, argPos, ary2, arity) {
var isAry = bitmask & WRAP_ARY_FLAG, isBind = bitmask & WRAP_BIND_FLAG, isBindKey = bitmask & WRAP_BIND_KEY_FLAG, isCurried = bitmask & (WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG), isFlip = bitmask & WRAP_FLIP_FLAG, Ctor = isBindKey ? undefined2 : createCtor(func);
function wrapper() {
var length = arguments.length, args = Array2(length), index2 = length;
while (index2--) {
args[index2] = arguments[index2];
}
if (isCurried) {
var placeholder = getHolder(wrapper), holdersCount = countHolders(args, placeholder);
}
if (partials) {
args = composeArgs(args, partials, holders, isCurried);
}
if (partialsRight) {
args = composeArgsRight(args, partialsRight, holdersRight, isCurried);
}
length -= holdersCount;
if (isCurried && length < arity) {
var newHolders = replaceHolders(args, placeholder);
return createRecurry(
func,
bitmask,
createHybrid,
wrapper.placeholder,
thisArg,
args,
newHolders,
argPos,
ary2,
arity - length
);
}
var thisBinding = isBind ? thisArg : this, fn = isBindKey ? thisBinding[func] : func;
length = args.length;
if (argPos) {
args = reorder(args, argPos);
} else if (isFlip && length > 1) {
args.reverse();
}
if (isAry && ary2 < length) {
args.length = ary2;
}
if (this && this !== root2 && this instanceof wrapper) {
fn = Ctor || createCtor(fn);
}
return fn.apply(thisBinding, args);
}
return wrapper;
}
function createInverter(setter, toIteratee) {
return function(object, iteratee2) {
return baseInverter(object, setter, toIteratee(iteratee2), {});
};
}
function createMathOperation(operator, defaultValue) {
return function(value, other) {
var result2;
if (value === undefined2 && other === undefined2) {
return defaultValue;
}
if (value !== undefined2) {
result2 = value;
}
if (other !== undefined2) {
if (result2 === undefined2) {
return other;
}
if (typeof value == "string" || typeof other == "string") {
value = baseToString(value);
other = baseToString(other);
} else {
value = baseToNumber(value);
other = baseToNumber(other);
}
result2 = operator(value, other);
}
return result2;
};
}
function createOver(arrayFunc) {
return flatRest(function(iteratees) {
iteratees = arrayMap(iteratees, baseUnary(getIteratee()));
return baseRest(function(args) {
var thisArg = this;
return arrayFunc(iteratees, function(iteratee2) {
return apply(iteratee2, thisArg, args);
});
});
});
}
function createPadding(length, chars) {
chars = chars === undefined2 ? " " : baseToString(chars);
var charsLength = chars.length;
if (charsLength < 2) {
return charsLength ? baseRepeat(chars, length) : chars;
}
var result2 = baseRepeat(chars, nativeCeil(length / stringSize(chars)));
return hasUnicode(chars) ? castSlice(stringToArray(result2), 0, length).join("") : result2.slice(0, length);
}
function createPartial(func, bitmask, thisArg, partials) {
var isBind = bitmask & WRAP_BIND_FLAG, Ctor = createCtor(func);
function wrapper() {
var argsIndex = -1, argsLength = arguments.length, leftIndex = -1, leftLength = partials.length, args = Array2(leftLength + argsLength), fn = this && this !== root2 && this instanceof wrapper ? Ctor : func;
while (++leftIndex < leftLength) {
args[leftIndex] = partials[leftIndex];
}
while (argsLength--) {
args[leftIndex++] = arguments[++argsIndex];
}
return apply(fn, isBind ? thisArg : this, args);
}
return wrapper;
}
function createRange(fromRight) {
return function(start, end2, step) {
if (step && typeof step != "number" && isIterateeCall(start, end2, step)) {
end2 = step = undefined2;
}
start = toFinite(start);
if (end2 === undefined2) {
end2 = start;
start = 0;
} else {
end2 = toFinite(end2);
}
step = step === undefined2 ? start < end2 ? 1 : -1 : toFinite(step);
return baseRange(start, end2, step, fromRight);
};
}
function createRelationalOperation(operator) {
return function(value, other) {
if (!(typeof value == "string" && typeof other == "string")) {
value = toNumber(value);
other = toNumber(other);
}
return operator(value, other);
};
}
function createRecurry(func, bitmask, wrapFunc, placeholder, thisArg, partials, holders, argPos, ary2, arity) {
var isCurry = bitmask & WRAP_CURRY_FLAG, newHolders = isCurry ? holders : undefined2, newHoldersRight = isCurry ? undefined2 : holders, newPartials = isCurry ? partials : undefined2, newPartialsRight = isCurry ? undefined2 : partials;
bitmask |= isCurry ? WRAP_PARTIAL_FLAG : WRAP_PARTIAL_RIGHT_FLAG;
bitmask &= ~(isCurry ? WRAP_PARTIAL_RIGHT_FLAG : WRAP_PARTIAL_FLAG);
if (!(bitmask & WRAP_CURRY_BOUND_FLAG)) {
bitmask &= ~(WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG);
}
var newData = [
func,
bitmask,
thisArg,
newPartials,
newHolders,
newPartialsRight,
newHoldersRight,
argPos,
ary2,
arity
];
var result2 = wrapFunc.apply(undefined2, newData);
if (isLaziable(func)) {
setData2(result2, newData);
}
result2.placeholder = placeholder;
return setWrapToString(result2, func, bitmask);
}
function createRound(methodName) {
var func = Math2[methodName];
return function(number, precision) {
number = toNumber(number);
precision = precision == null ? 0 : nativeMin(toInteger(precision), 292);
if (precision && nativeIsFinite(number)) {
var pair = (toString4(number) + "e").split("e"), value = func(pair[0] + "e" + (+pair[1] + precision));
pair = (toString4(value) + "e").split("e");
return +(pair[0] + "e" + (+pair[1] - precision));
}
return func(number);
};
}
var createSet = !(Set2 && 1 / setToArray(new Set2([, -0]))[1] == INFINITY) ? noop2 : function(values2) {
return new Set2(values2);
};
function createToPairs(keysFunc) {
return function(object) {
var tag = getTag(object);
if (tag == mapTag) {
return mapToArray(object);
}
if (tag == setTag) {
return setToPairs(object);
}
return baseToPairs(object, keysFunc(object));
};
}
function createWrap(func, bitmask, thisArg, partials, holders, argPos, ary2, arity) {
var isBindKey = bitmask & WRAP_BIND_KEY_FLAG;
if (!isBindKey && typeof func != "function") {
throw new TypeError2(FUNC_ERROR_TEXT);
}
var length = partials ? partials.length : 0;
if (!length) {
bitmask &= ~(WRAP_PARTIAL_FLAG | WRAP_PARTIAL_RIGHT_FLAG);
partials = holders = undefined2;
}
ary2 = ary2 === undefined2 ? ary2 : nativeMax(toInteger(ary2), 0);
arity = arity === undefined2 ? arity : toInteger(arity);
length -= holders ? holders.length : 0;
if (bitmask & WRAP_PARTIAL_RIGHT_FLAG) {
var partialsRight = partials, holdersRight = holders;
partials = holders = undefined2;
}
var data2 = isBindKey ? undefined2 : getData(func);
var newData = [
func,
bitmask,
thisArg,
partials,
holders,
partialsRight,
holdersRight,
argPos,
ary2,
arity
];
if (data2) {
mergeData(newData, data2);
}
func = newData[0];
bitmask = newData[1];
thisArg = newData[2];
partials = newData[3];
holders = newData[4];
arity = newData[9] = newData[9] === undefined2 ? isBindKey ? 0 : func.length : nativeMax(newData[9] - length, 0);
if (!arity && bitmask & (WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG)) {
bitmask &= ~(WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG);
}
if (!bitmask || bitmask == WRAP_BIND_FLAG) {
var result2 = createBind(func, bitmask, thisArg);
} else if (bitmask == WRAP_CURRY_FLAG || bitmask == WRAP_CURRY_RIGHT_FLAG) {
result2 = createCurry(func, bitmask, arity);
} else if ((bitmask == WRAP_PARTIAL_FLAG || bitmask == (WRAP_BIND_FLAG | WRAP_PARTIAL_FLAG)) && !holders.length) {
result2 = createPartial(func, bitmask, thisArg, partials);
} else {
result2 = createHybrid.apply(undefined2, newData);
}
var setter = data2 ? baseSetData : setData2;
return setWrapToString(setter(result2, newData), func, bitmask);
}
function customDefaultsAssignIn(objValue, srcValue, key, object) {
if (objValue === undefined2 || eq2(objValue, objectProto[key]) && !hasOwnProperty2.call(object, key)) {
return srcValue;
}
return objValue;
}
function customDefaultsMerge(objValue, srcValue, key, object, source, stack) {
if (isObject2(objValue) && isObject2(srcValue)) {
stack.set(srcValue, objValue);
baseMerge(objValue, srcValue, undefined2, customDefaultsMerge, stack);
stack["delete"](srcValue);
}
return objValue;
}
function customOmitClone(value) {
return isPlainObject2(value) ? undefined2 : value;
}
function equalArrays(array, other, bitmask, customizer, equalFunc, stack) {
var isPartial = bitmask & COMPARE_PARTIAL_FLAG, arrLength = array.length, othLength = other.length;
if (arrLength != othLength && !(isPartial && othLength > arrLength)) {
return false;
}
var arrStacked = stack.get(array);
var othStacked = stack.get(other);
if (arrStacked && othStacked) {
return arrStacked == other && othStacked == array;
}
var index2 = -1, result2 = true, seen = bitmask & COMPARE_UNORDERED_FLAG ? new SetCache() : undefined2;
stack.set(array, other);
stack.set(other, array);
while (++index2 < arrLength) {
var arrValue = array[index2], othValue = other[index2];
if (customizer) {
var compared = isPartial ? customizer(othValue, arrValue, index2, other, array, stack) : customizer(arrValue, othValue, index2, array, other, stack);
}
if (compared !== undefined2) {
if (compared) {
continue;
}
result2 = false;
break;
}
if (seen) {
if (!arraySome(other, function(othValue2, othIndex) {
if (!cacheHas(seen, othIndex) && (arrValue === othValue2 || equalFunc(arrValue, othValue2, bitmask, customizer, stack))) {
return seen.push(othIndex);
}
})) {
result2 = false;
break;
}
} else if (!(arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) {
result2 = false;
break;
}
}
stack["delete"](array);
stack["delete"](other);
return result2;
}
function equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) {
switch (tag) {
case dataViewTag:
if (object.byteLength != other.byteLength || object.byteOffset != other.byteOffset) {
return false;
}
object = object.buffer;
other = other.buffer;
case arrayBufferTag:
if (object.byteLength != other.byteLength || !equalFunc(new Uint8Array2(object), new Uint8Array2(other))) {
return false;
}
return true;
case boolTag:
case dateTag:
case numberTag:
return eq2(+object, +other);
case errorTag:
return object.name == other.name && object.message == other.message;
case regexpTag:
case stringTag:
return object == other + "";
case mapTag:
var convert = mapToArray;
case setTag:
var isPartial = bitmask & COMPARE_PARTIAL_FLAG;
convert || (convert = setToArray);
if (object.size != other.size && !isPartial) {
return false;
}
var stacked = stack.get(object);
if (stacked) {
return stacked == other;
}
bitmask |= COMPARE_UNORDERED_FLAG;
stack.set(object, other);
var result2 = equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack);
stack["delete"](object);
return result2;
case symbolTag:
if (symbolValueOf) {
return symbolValueOf.call(object) == symbolValueOf.call(other);
}
}
return false;
}
function equalObjects(object, other, bitmask, customizer, equalFunc, stack) {
var isPartial = bitmask & COMPARE_PARTIAL_FLAG, objProps = getAllKeys(object), objLength = objProps.length, othProps = getAllKeys(other), othLength = othProps.length;
if (objLength != othLength && !isPartial) {
return false;
}
var index2 = objLength;
while (index2--) {
var key = objProps[index2];
if (!(isPartial ? key in other : hasOwnProperty2.call(other, key))) {
return false;
}
}
var objStacked = stack.get(object);
var othStacked = stack.get(other);
if (objStacked && othStacked) {
return objStacked == other && othStacked == object;
}
var result2 = true;
stack.set(object, other);
stack.set(other, object);
var skipCtor = isPartial;
while (++index2 < objLength) {
key = objProps[index2];
var objValue = object[key], othValue = other[key];
if (customizer) {
var compared = isPartial ? customizer(othValue, objValue, key, other, object, stack) : customizer(objValue, othValue, key, object, other, stack);
}
if (!(compared === undefined2 ? objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack) : compared)) {
result2 = false;
break;
}
skipCtor || (skipCtor = key == "constructor");
}
if (result2 && !skipCtor) {
var objCtor = object.constructor, othCtor = other.constructor;
if (objCtor != othCtor && ("constructor" in object && "constructor" in other) && !(typeof objCtor == "function" && objCtor instanceof objCtor && typeof othCtor == "function" && othCtor instanceof othCtor)) {
result2 = false;
}
}
stack["delete"](object);
stack["delete"](other);
return result2;
}
function flatRest(func) {
return setToString(overRest(func, undefined2, flatten), func + "");
}
function getAllKeys(object) {
return baseGetAllKeys(object, keys, getSymbols);
}
function getAllKeysIn(object) {
return baseGetAllKeys(object, keysIn, getSymbolsIn);
}
var getData = !metaMap ? noop2 : function(func) {
return metaMap.get(func);
};
function getFuncName(func) {
var result2 = func.name + "", array = realNames[result2], length = hasOwnProperty2.call(realNames, result2) ? array.length : 0;
while (length--) {
var data2 = array[length], otherFunc = data2.func;
if (otherFunc == null || otherFunc == func) {
return data2.name;
}
}
return result2;
}
function getHolder(func) {
var object = hasOwnProperty2.call(lodash, "placeholder") ? lodash : func;
return object.placeholder;
}
function getIteratee() {
var result2 = lodash.iteratee || iteratee;
result2 = result2 === iteratee ? baseIteratee : result2;
return arguments.length ? result2(arguments[0], arguments[1]) : result2;
}
function getMapData(map22, key) {
var data2 = map22.__data__;
return isKeyable(key) ? data2[typeof key == "string" ? "string" : "hash"] : data2.map;
}
function getMatchData(object) {
var result2 = keys(object), length = result2.length;
while (length--) {
var key = result2[length], value = object[key];
result2[length] = [key, value, isStrictComparable(value)];
}
return result2;
}
function getNative(object, key) {
var value = getValue(object, key);
return baseIsNative(value) ? value : undefined2;
}
function getRawTag(value) {
var isOwn = hasOwnProperty2.call(value, symToStringTag), tag = value[symToStringTag];
try {
value[symToStringTag] = undefined2;
var unmasked = true;
} catch (e) {
}
var result2 = nativeObjectToString.call(value);
if (unmasked) {
if (isOwn) {
value[symToStringTag] = tag;
} else {
delete value[symToStringTag];
}
}
return result2;
}
var getSymbols = !nativeGetSymbols ? stubArray : function(object) {
if (object == null) {
return [];
}
object = Object2(object);
return arrayFilter(nativeGetSymbols(object), function(symbol) {
return propertyIsEnumerable.call(object, symbol);
});
};
var getSymbolsIn = !nativeGetSymbols ? stubArray : function(object) {
var result2 = [];
while (object) {
arrayPush(result2, getSymbols(object));
object = getPrototype(object);
}
return result2;
};
var getTag = baseGetTag;
if (DataView2 && getTag(new DataView2(new ArrayBuffer(1))) != dataViewTag || Map2 && getTag(new Map2()) != mapTag || Promise2 && getTag(Promise2.resolve()) != promiseTag || Set2 && getTag(new Set2()) != setTag || WeakMap2 && getTag(new WeakMap2()) != weakMapTag) {
getTag = function(value) {
var result2 = baseGetTag(value), Ctor = result2 == objectTag ? value.constructor : undefined2, ctorString = Ctor ? toSource(Ctor) : "";
if (ctorString) {
switch (ctorString) {
case dataViewCtorString:
return dataViewTag;
case mapCtorString:
return mapTag;
case promiseCtorString:
return promiseTag;
case setCtorString:
return setTag;
case weakMapCtorString:
return weakMapTag;
}
}
return result2;
};
}
function getView(start, end2, transforms) {
var index2 = -1, length = transforms.length;
while (++index2 < length) {
var data2 = transforms[index2], size2 = data2.size;
switch (data2.type) {
case "drop":
start += size2;
break;
case "dropRight":
end2 -= size2;
break;
case "take":
end2 = nativeMin(end2, start + size2);
break;
case "takeRight":
start = nativeMax(start, end2 - size2);
break;
}
}
return { "start": start, "end": end2 };
}
function getWrapDetails(source) {
var match = source.match(reWrapDetails);
return match ? match[1].split(reSplitDetails) : [];
}
function hasPath(object, path, hasFunc) {
path = castPath(path, object);
var index2 = -1, length = path.length, result2 = false;
while (++index2 < length) {
var key = toKey(path[index2]);
if (!(result2 = object != null && hasFunc(object, key))) {
break;
}
object = object[key];
}
if (result2 || ++index2 != length) {
return result2;
}
length = object == null ? 0 : object.length;
return !!length && isLength(length) && isIndex(key, length) && (isArray2(object) || isArguments(object));
}
function initCloneArray(array) {
var length = array.length, result2 = new array.constructor(length);
if (length && typeof array[0] == "string" && hasOwnProperty2.call(array, "index")) {
result2.index = array.index;
result2.input = array.input;
}
return result2;
}
function initCloneObject(object) {
return typeof object.constructor == "function" && !isPrototype(object) ? baseCreate(getPrototype(object)) : {};
}
function initCloneByTag(object, tag, isDeep) {
var Ctor = object.constructor;
switch (tag) {
case arrayBufferTag:
return cloneArrayBuffer(object);
case boolTag:
case dateTag:
return new Ctor(+object);
case dataViewTag:
return cloneDataView(object, isDeep);
case float32Tag:
case float64Tag:
case int8Tag:
case int16Tag:
case int32Tag:
case uint8Tag:
case uint8ClampedTag:
case uint16Tag:
case uint32Tag:
return cloneTypedArray(object, isDeep);
case mapTag:
return new Ctor();
case numberTag:
case stringTag:
return new Ctor(object);
case regexpTag:
return cloneRegExp(object);
case setTag:
return new Ctor();
case symbolTag:
return cloneSymbol(object);
}
}
function insertWrapDetails(source, details) {
var length = details.length;
if (!length) {
return source;
}
var lastIndex = length - 1;
details[lastIndex] = (length > 1 ? "& " : "") + details[lastIndex];
details = details.join(length > 2 ? ", " : " ");
return source.replace(reWrapComment, "{\n/* [wrapped with " + details + "] */\n");
}
function isFlattenable(value) {
return isArray2(value) || isArguments(value) || !!(spreadableSymbol && value && value[spreadableSymbol]);
}
function isIndex(value, length) {
var type = typeof value;
length = length == null ? MAX_SAFE_INTEGER : length;
return !!length && (type == "number" || type != "symbol" && reIsUint.test(value)) && (value > -1 && value % 1 == 0 && value < length);
}
function isIterateeCall(value, index2, object) {
if (!isObject2(object)) {
return false;
}
var type = typeof index2;
if (type == "number" ? isArrayLike2(object) && isIndex(index2, object.length) : type == "string" && index2 in object) {
return eq2(object[index2], value);
}
return false;
}
function isKey(value, object) {
if (isArray2(value)) {
return false;
}
var type = typeof value;
if (type == "number" || type == "symbol" || type == "boolean" || value == null || isSymbol(value)) {
return true;
}
return reIsPlainProp.test(value) || !reIsDeepProp.test(value) || object != null && value in Object2(object);
}
function isKeyable(value) {
var type = typeof value;
return type == "string" || type == "number" || type == "symbol" || type == "boolean" ? value !== "__proto__" : value === null;
}
function isLaziable(func) {
var funcName = getFuncName(func), other = lodash[funcName];
if (typeof other != "function" || !(funcName in LazyWrapper.prototype)) {
return false;
}
if (func === other) {
return true;
}
var data2 = getData(other);
return !!data2 && func === data2[0];
}
function isMasked(func) {
return !!maskSrcKey && maskSrcKey in func;
}
var isMaskable = coreJsData ? isFunction2 : stubFalse;
function isPrototype(value) {
var Ctor = value && value.constructor, proto = typeof Ctor == "function" && Ctor.prototype || objectProto;
return value === proto;
}
function isStrictComparable(value) {
return value === value && !isObject2(value);
}
function matchesStrictComparable(key, srcValue) {
return function(object) {
if (object == null) {
return false;
}
return object[key] === srcValue && (srcValue !== undefined2 || key in Object2(object));
};
}
function memoizeCapped(func) {
var result2 = memoize(func, function(key) {
if (cache.size === MAX_MEMOIZE_SIZE) {
cache.clear();
}
return key;
});
var cache = result2.cache;
return result2;
}
function mergeData(data2, source) {
var bitmask = data2[1], srcBitmask = source[1], newBitmask = bitmask | srcBitmask, isCommon = newBitmask < (WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG | WRAP_ARY_FLAG);
var isCombo = srcBitmask == WRAP_ARY_FLAG && bitmask == WRAP_CURRY_FLAG || srcBitmask == WRAP_ARY_FLAG && bitmask == WRAP_REARG_FLAG && data2[7].length <= source[8] || srcBitmask == (WRAP_ARY_FLAG | WRAP_REARG_FLAG) && source[7].length <= source[8] && bitmask == WRAP_CURRY_FLAG;
if (!(isCommon || isCombo)) {
return data2;
}
if (srcBitmask & WRAP_BIND_FLAG) {
data2[2] = source[2];
newBitmask |= bitmask & WRAP_BIND_FLAG ? 0 : WRAP_CURRY_BOUND_FLAG;
}
var value = source[3];
if (value) {
var partials = data2[3];
data2[3] = partials ? composeArgs(partials, value, source[4]) : value;
data2[4] = partials ? replaceHolders(data2[3], PLACEHOLDER) : source[4];
}
value = source[5];
if (value) {
partials = data2[5];
data2[5] = partials ? composeArgsRight(partials, value, source[6]) : value;
data2[6] = partials ? replaceHolders(data2[5], PLACEHOLDER) : source[6];
}
value = source[7];
if (value) {
data2[7] = value;
}
if (srcBitmask & WRAP_ARY_FLAG) {
data2[8] = data2[8] == null ? source[8] : nativeMin(data2[8], source[8]);
}
if (data2[9] == null) {
data2[9] = source[9];
}
data2[0] = source[0];
data2[1] = newBitmask;
return data2;
}
function nativeKeysIn(object) {
var result2 = [];
if (object != null) {
for (var key in Object2(object)) {
result2.push(key);
}
}
return result2;
}
function objectToString(value) {
return nativeObjectToString.call(value);
}
function overRest(func, start, transform2) {
start = nativeMax(start === undefined2 ? func.length - 1 : start, 0);
return function() {
var args = arguments, index2 = -1, length = nativeMax(args.length - start, 0), array = Array2(length);
while (++index2 < length) {
array[index2] = args[start + index2];
}
index2 = -1;
var otherArgs = Array2(start + 1);
while (++index2 < start) {
otherArgs[index2] = args[index2];
}
otherArgs[start] = transform2(array);
return apply(func, this, otherArgs);
};
}
function parent2(object, path) {
return path.length < 2 ? object : baseGet(object, baseSlice(path, 0, -1));
}
function reorder(array, indexes) {
var arrLength = array.length, length = nativeMin(indexes.length, arrLength), oldArray = copyArray(array);
while (length--) {
var index2 = indexes[length];
array[length] = isIndex(index2, arrLength) ? oldArray[index2] : undefined2;
}
return array;
}
function safeGet(object, key) {
if (key === "constructor" && typeof object[key] === "function") {
return;
}
if (key == "__proto__") {
return;
}
return object[key];
}
var setData2 = shortOut(baseSetData);
var setTimeout2 = ctxSetTimeout || function(func, wait) {
return root2.setTimeout(func, wait);
};
var setToString = shortOut(baseSetToString);
function setWrapToString(wrapper, reference, bitmask) {
var source = reference + "";
return setToString(wrapper, insertWrapDetails(source, updateWrapDetails(getWrapDetails(source), bitmask)));
}
function shortOut(func) {
var count = 0, lastCalled = 0;
return function() {
var stamp = nativeNow(), remaining = HOT_SPAN - (stamp - lastCalled);
lastCalled = stamp;
if (remaining > 0) {
if (++count >= HOT_COUNT) {
return arguments[0];
}
} else {
count = 0;
}
return func.apply(undefined2, arguments);
};
}
function shuffleSelf(array, size2) {
var index2 = -1, length = array.length, lastIndex = length - 1;
size2 = size2 === undefined2 ? length : size2;
while (++index2 < size2) {
var rand = baseRandom(index2, lastIndex), value = array[rand];
array[rand] = array[index2];
array[index2] = value;
}
array.length = size2;
return array;
}
var stringToPath = memoizeCapped(function(string) {
var result2 = [];
if (string.charCodeAt(0) === 46) {
result2.push("");
}
string.replace(rePropName, function(match, number, quote, subString) {
result2.push(quote ? subString.replace(reEscapeChar, "$1") : number || match);
});
return result2;
});
function toKey(value) {
if (typeof value == "string" || isSymbol(value)) {
return value;
}
var result2 = value + "";
return result2 == "0" && 1 / value == -INFINITY ? "-0" : result2;
}
function toSource(func) {
if (func != null) {
try {
return funcToString.call(func);
} catch (e) {
}
try {
return func + "";
} catch (e) {
}
}
return "";
}
function updateWrapDetails(details, bitmask) {
arrayEach(wrapFlags, function(pair) {
var value = "_." + pair[0];
if (bitmask & pair[1] && !arrayIncludes(details, value)) {
details.push(value);
}
});
return details.sort();
}
function wrapperClone(wrapper) {
if (wrapper instanceof LazyWrapper) {
return wrapper.clone();
}
var result2 = new LodashWrapper(wrapper.__wrapped__, wrapper.__chain__);
result2.__actions__ = copyArray(wrapper.__actions__);
result2.__index__ = wrapper.__index__;
result2.__values__ = wrapper.__values__;
return result2;
}
function chunk(array, size2, guard) {
if (guard ? isIterateeCall(array, size2, guard) : size2 === undefined2) {
size2 = 1;
} else {
size2 = nativeMax(toInteger(size2), 0);
}
var length = array == null ? 0 : array.length;
if (!length || size2 < 1) {
return [];
}
var index2 = 0, resIndex = 0, result2 = Array2(nativeCeil(length / size2));
while (index2 < length) {
result2[resIndex++] = baseSlice(array, index2, index2 += size2);
}
return result2;
}
function compact(array) {
var index2 = -1, length = array == null ? 0 : array.length, resIndex = 0, result2 = [];
while (++index2 < length) {
var value = array[index2];
if (value) {
result2[resIndex++] = value;
}
}
return result2;
}
function concat() {
var length = arguments.length;
if (!length) {
return [];
}
var args = Array2(length - 1), array = arguments[0], index2 = length;
while (index2--) {
args[index2 - 1] = arguments[index2];
}
return arrayPush(isArray2(array) ? copyArray(array) : [array], baseFlatten(args, 1));
}
var difference = baseRest(function(array, values2) {
return isArrayLikeObject(array) ? baseDifference(array, baseFlatten(values2, 1, isArrayLikeObject, true)) : [];
});
var differenceBy = baseRest(function(array, values2) {
var iteratee2 = last2(values2);
if (isArrayLikeObject(iteratee2)) {
iteratee2 = undefined2;
}
return isArrayLikeObject(array) ? baseDifference(array, baseFlatten(values2, 1, isArrayLikeObject, true), getIteratee(iteratee2, 2)) : [];
});
var differenceWith = baseRest(function(array, values2) {
var comparator = last2(values2);
if (isArrayLikeObject(comparator)) {
comparator = undefined2;
}
return isArrayLikeObject(array) ? baseDifference(array, baseFlatten(values2, 1, isArrayLikeObject, true), undefined2, comparator) : [];
});
function drop(array, n, guard) {
var length = array == null ? 0 : array.length;
if (!length) {
return [];
}
n = guard || n === undefined2 ? 1 : toInteger(n);
return baseSlice(array, n < 0 ? 0 : n, length);
}
function dropRight(array, n, guard) {
var length = array == null ? 0 : array.length;
if (!length) {
return [];
}
n = guard || n === undefined2 ? 1 : toInteger(n);
n = length - n;
return baseSlice(array, 0, n < 0 ? 0 : n);
}
function dropRightWhile(array, predicate) {
return array && array.length ? baseWhile(array, getIteratee(predicate, 3), true, true) : [];
}
function dropWhile(array, predicate) {
return array && array.length ? baseWhile(array, getIteratee(predicate, 3), true) : [];
}
function fill(array, value, start, end2) {
var length = array == null ? 0 : array.length;
if (!length) {
return [];
}
if (start && typeof start != "number" && isIterateeCall(array, value, start)) {
start = 0;
end2 = length;
}
return baseFill(array, value, start, end2);
}
function findIndex(array, predicate, fromIndex) {
var length = array == null ? 0 : array.length;
if (!length) {
return -1;
}
var index2 = fromIndex == null ? 0 : toInteger(fromIndex);
if (index2 < 0) {
index2 = nativeMax(length + index2, 0);
}
return baseFindIndex(array, getIteratee(predicate, 3), index2);
}
function findLastIndex(array, predicate, fromIndex) {
var length = array == null ? 0 : array.length;
if (!length) {
return -1;
}
var index2 = length - 1;
if (fromIndex !== undefined2) {
index2 = toInteger(fromIndex);
index2 = fromIndex < 0 ? nativeMax(length + index2, 0) : nativeMin(index2, length - 1);
}
return baseFindIndex(array, getIteratee(predicate, 3), index2, true);
}
function flatten(array) {
var length = array == null ? 0 : array.length;
return length ? baseFlatten(array, 1) : [];
}
function flattenDeep(array) {
var length = array == null ? 0 : array.length;
return length ? baseFlatten(array, INFINITY) : [];
}
function flattenDepth(array, depth) {
var length = array == null ? 0 : array.length;
if (!length) {
return [];
}
depth = depth === undefined2 ? 1 : toInteger(depth);
return baseFlatten(array, depth);
}
function fromPairs(pairs) {
var index2 = -1, length = pairs == null ? 0 : pairs.length, result2 = {};
while (++index2 < length) {
var pair = pairs[index2];
result2[pair[0]] = pair[1];
}
return result2;
}
function head(array) {
return array && array.length ? array[0] : undefined2;
}
function indexOf(array, value, fromIndex) {
var length = array == null ? 0 : array.length;
if (!length) {
return -1;
}
var index2 = fromIndex == null ? 0 : toInteger(fromIndex);
if (index2 < 0) {
index2 = nativeMax(length + index2, 0);
}
return baseIndexOf(array, value, index2);
}
function initial(array) {
var length = array == null ? 0 : array.length;
return length ? baseSlice(array, 0, -1) : [];
}
var intersection = baseRest(function(arrays) {
var mapped = arrayMap(arrays, castArrayLikeObject);
return mapped.length && mapped[0] === arrays[0] ? baseIntersection(mapped) : [];
});
var intersectionBy = baseRest(function(arrays) {
var iteratee2 = last2(arrays), mapped = arrayMap(arrays, castArrayLikeObject);
if (iteratee2 === last2(mapped)) {
iteratee2 = undefined2;
} else {
mapped.pop();
}
return mapped.length && mapped[0] === arrays[0] ? baseIntersection(mapped, getIteratee(iteratee2, 2)) : [];
});
var intersectionWith = baseRest(function(arrays) {
var comparator = last2(arrays), mapped = arrayMap(arrays, castArrayLikeObject);
comparator = typeof comparator == "function" ? comparator : undefined2;
if (comparator) {
mapped.pop();
}
return mapped.length && mapped[0] === arrays[0] ? baseIntersection(mapped, undefined2, comparator) : [];
});
function join(array, separator) {
return array == null ? "" : nativeJoin.call(array, separator);
}
function last2(array) {
var length = array == null ? 0 : array.length;
return length ? array[length - 1] : undefined2;
}
function lastIndexOf(array, value, fromIndex) {
var length = array == null ? 0 : array.length;
if (!length) {
return -1;
}
var index2 = length;
if (fromIndex !== undefined2) {
index2 = toInteger(fromIndex);
index2 = index2 < 0 ? nativeMax(length + index2, 0) : nativeMin(index2, length - 1);
}
return value === value ? strictLastIndexOf(array, value, index2) : baseFindIndex(array, baseIsNaN, index2, true);
}
function nth(array, n) {
return array && array.length ? baseNth(array, toInteger(n)) : undefined2;
}
var pull = baseRest(pullAll);
function pullAll(array, values2) {
return array && array.length && values2 && values2.length ? basePullAll(array, values2) : array;
}
function pullAllBy(array, values2, iteratee2) {
return array && array.length && values2 && values2.length ? basePullAll(array, values2, getIteratee(iteratee2, 2)) : array;
}
function pullAllWith(array, values2, comparator) {
return array && array.length && values2 && values2.length ? basePullAll(array, values2, undefined2, comparator) : array;
}
var pullAt = flatRest(function(array, indexes) {
var length = array == null ? 0 : array.length, result2 = baseAt(array, indexes);
basePullAt(array, arrayMap(indexes, function(index2) {
return isIndex(index2, length) ? +index2 : index2;
}).sort(compareAscending));
return result2;
});
function remove2(array, predicate) {
var result2 = [];
if (!(array && array.length)) {
return result2;
}
var index2 = -1, indexes = [], length = array.length;
predicate = getIteratee(predicate, 3);
while (++index2 < length) {
var value = array[index2];
if (predicate(value, index2, array)) {
result2.push(value);
indexes.push(index2);
}
}
basePullAt(array, indexes);
return result2;
}
function reverse(array) {
return array == null ? array : nativeReverse.call(array);
}
function slice2(array, start, end2) {
var length = array == null ? 0 : array.length;
if (!length) {
return [];
}
if (end2 && typeof end2 != "number" && isIterateeCall(array, start, end2)) {
start = 0;
end2 = length;
} else {
start = start == null ? 0 : toInteger(start);
end2 = end2 === undefined2 ? length : toInteger(end2);
}
return baseSlice(array, start, end2);
}
function sortedIndex(array, value) {
return baseSortedIndex(array, value);
}
function sortedIndexBy(array, value, iteratee2) {
return baseSortedIndexBy(array, value, getIteratee(iteratee2, 2));
}
function sortedIndexOf(array, value) {
var length = array == null ? 0 : array.length;
if (length) {
var index2 = baseSortedIndex(array, value);
if (index2 < length && eq2(array[index2], value)) {
return index2;
}
}
return -1;
}
function sortedLastIndex(array, value) {
return baseSortedIndex(array, value, true);
}
function sortedLastIndexBy(array, value, iteratee2) {
return baseSortedIndexBy(array, value, getIteratee(iteratee2, 2), true);
}
function sortedLastIndexOf(array, value) {
var length = array == null ? 0 : array.length;
if (length) {
var index2 = baseSortedIndex(array, value, true) - 1;
if (eq2(array[index2], value)) {
return index2;
}
}
return -1;
}
function sortedUniq(array) {
return array && array.length ? baseSortedUniq(array) : [];
}
function sortedUniqBy(array, iteratee2) {
return array && array.length ? baseSortedUniq(array, getIteratee(iteratee2, 2)) : [];
}
function tail(array) {
var length = array == null ? 0 : array.length;
return length ? baseSlice(array, 1, length) : [];
}
function take(array, n, guard) {
if (!(array && array.length)) {
return [];
}
n = guard || n === undefined2 ? 1 : toInteger(n);
return baseSlice(array, 0, n < 0 ? 0 : n);
}
function takeRight(array, n, guard) {
var length = array == null ? 0 : array.length;
if (!length) {
return [];
}
n = guard || n === undefined2 ? 1 : toInteger(n);
n = length - n;
return baseSlice(array, n < 0 ? 0 : n, length);
}
function takeRightWhile(array, predicate) {
return array && array.length ? baseWhile(array, getIteratee(predicate, 3), false, true) : [];
}
function takeWhile(array, predicate) {
return array && array.length ? baseWhile(array, getIteratee(predicate, 3)) : [];
}
var union = baseRest(function(arrays) {
return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true));
});
var unionBy = baseRest(function(arrays) {
var iteratee2 = last2(arrays);
if (isArrayLikeObject(iteratee2)) {
iteratee2 = undefined2;
}
return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true), getIteratee(iteratee2, 2));
});
var unionWith = baseRest(function(arrays) {
var comparator = last2(arrays);
comparator = typeof comparator == "function" ? comparator : undefined2;
return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true), undefined2, comparator);
});
function uniq(array) {
return array && array.length ? baseUniq(array) : [];
}
function uniqBy(array, iteratee2) {
return array && array.length ? baseUniq(array, getIteratee(iteratee2, 2)) : [];
}
function uniqWith(array, comparator) {
comparator = typeof comparator == "function" ? comparator : undefined2;
return array && array.length ? baseUniq(array, undefined2, comparator) : [];
}
function unzip(array) {
if (!(array && array.length)) {
return [];
}
var length = 0;
array = arrayFilter(array, function(group) {
if (isArrayLikeObject(group)) {
length = nativeMax(group.length, length);
return true;
}
});
return baseTimes(length, function(index2) {
return arrayMap(array, baseProperty(index2));
});
}
function unzipWith(array, iteratee2) {
if (!(array && array.length)) {
return [];
}
var result2 = unzip(array);
if (iteratee2 == null) {
return result2;
}
return arrayMap(result2, function(group) {
return apply(iteratee2, undefined2, group);
});
}
var without = baseRest(function(array, values2) {
return isArrayLikeObject(array) ? baseDifference(array, values2) : [];
});
var xor = baseRest(function(arrays) {
return baseXor(arrayFilter(arrays, isArrayLikeObject));
});
var xorBy = baseRest(function(arrays) {
var iteratee2 = last2(arrays);
if (isArrayLikeObject(iteratee2)) {
iteratee2 = undefined2;
}
return baseXor(arrayFilter(arrays, isArrayLikeObject), getIteratee(iteratee2, 2));
});
var xorWith = baseRest(function(arrays) {
var comparator = last2(arrays);
comparator = typeof comparator == "function" ? comparator : undefined2;
return baseXor(arrayFilter(arrays, isArrayLikeObject), undefined2, comparator);
});
var zip = baseRest(unzip);
function zipObject(props, values2) {
return baseZipObject(props || [], values2 || [], assignValue);
}
function zipObjectDeep(props, values2) {
return baseZipObject(props || [], values2 || [], baseSet);
}
var zipWith = baseRest(function(arrays) {
var length = arrays.length, iteratee2 = length > 1 ? arrays[length - 1] : undefined2;
iteratee2 = typeof iteratee2 == "function" ? (arrays.pop(), iteratee2) : undefined2;
return unzipWith(arrays, iteratee2);
});
function chain(value) {
var result2 = lodash(value);
result2.__chain__ = true;
return result2;
}
function tap(value, interceptor) {
interceptor(value);
return value;
}
function thru(value, interceptor) {
return interceptor(value);
}
var wrapperAt = flatRest(function(paths) {
var length = paths.length, start = length ? paths[0] : 0, value = this.__wrapped__, interceptor = function(object) {
return baseAt(object, paths);
};
if (length > 1 || this.__actions__.length || !(value instanceof LazyWrapper) || !isIndex(start)) {
return this.thru(interceptor);
}
value = value.slice(start, +start + (length ? 1 : 0));
value.__actions__.push({
"func": thru,
"args": [interceptor],
"thisArg": undefined2
});
return new LodashWrapper(value, this.__chain__).thru(function(array) {
if (length && !array.length) {
array.push(undefined2);
}
return array;
});
});
function wrapperChain() {
return chain(this);
}
function wrapperCommit() {
return new LodashWrapper(this.value(), this.__chain__);
}
function wrapperNext() {
if (this.__values__ === undefined2) {
this.__values__ = toArray3(this.value());
}
var done = this.__index__ >= this.__values__.length, value = done ? undefined2 : this.__values__[this.__index__++];
return { "done": done, "value": value };
}
function wrapperToIterator() {
return this;
}
function wrapperPlant(value) {
var result2, parent22 = this;
while (parent22 instanceof baseLodash) {
var clone22 = wrapperClone(parent22);
clone22.__index__ = 0;
clone22.__values__ = undefined2;
if (result2) {
previous.__wrapped__ = clone22;
} else {
result2 = clone22;
}
var previous = clone22;
parent22 = parent22.__wrapped__;
}
previous.__wrapped__ = value;
return result2;
}
function wrapperReverse() {
var value = this.__wrapped__;
if (value instanceof LazyWrapper) {
var wrapped = value;
if (this.__actions__.length) {
wrapped = new LazyWrapper(this);
}
wrapped = wrapped.reverse();
wrapped.__actions__.push({
"func": thru,
"args": [reverse],
"thisArg": undefined2
});
return new LodashWrapper(wrapped, this.__chain__);
}
return this.thru(reverse);
}
function wrapperValue() {
return baseWrapperValue(this.__wrapped__, this.__actions__);
}
var countBy = createAggregator(function(result2, value, key) {
if (hasOwnProperty2.call(result2, key)) {
++result2[key];
} else {
baseAssignValue(result2, key, 1);
}
});
function every(collection, predicate, guard) {
var func = isArray2(collection) ? arrayEvery : baseEvery;
if (guard && isIterateeCall(collection, predicate, guard)) {
predicate = undefined2;
}
return func(collection, getIteratee(predicate, 3));
}
function filter5(collection, predicate) {
var func = isArray2(collection) ? arrayFilter : baseFilter;
return func(collection, getIteratee(predicate, 3));
}
var find4 = createFind(findIndex);
var findLast = createFind(findLastIndex);
function flatMap(collection, iteratee2) {
return baseFlatten(map2(collection, iteratee2), 1);
}
function flatMapDeep(collection, iteratee2) {
return baseFlatten(map2(collection, iteratee2), INFINITY);
}
function flatMapDepth(collection, iteratee2, depth) {
depth = depth === undefined2 ? 1 : toInteger(depth);
return baseFlatten(map2(collection, iteratee2), depth);
}
function forEach2(collection, iteratee2) {
var func = isArray2(collection) ? arrayEach : baseEach;
return func(collection, getIteratee(iteratee2, 3));
}
function forEachRight(collection, iteratee2) {
var func = isArray2(collection) ? arrayEachRight : baseEachRight;
return func(collection, getIteratee(iteratee2, 3));
}
var groupBy = createAggregator(function(result2, value, key) {
if (hasOwnProperty2.call(result2, key)) {
result2[key].push(value);
} else {
baseAssignValue(result2, key, [value]);
}
});
function includes(collection, value, fromIndex, guard) {
collection = isArrayLike2(collection) ? collection : values(collection);
fromIndex = fromIndex && !guard ? toInteger(fromIndex) : 0;
var length = collection.length;
if (fromIndex < 0) {
fromIndex = nativeMax(length + fromIndex, 0);
}
return isString2(collection) ? fromIndex <= length && collection.indexOf(value, fromIndex) > -1 : !!length && baseIndexOf(collection, value, fromIndex) > -1;
}
var invokeMap = baseRest(function(collection, path, args) {
var index2 = -1, isFunc = typeof path == "function", result2 = isArrayLike2(collection) ? Array2(collection.length) : [];
baseEach(collection, function(value) {
result2[++index2] = isFunc ? apply(path, value, args) : baseInvoke(value, path, args);
});
return result2;
});
var keyBy = createAggregator(function(result2, value, key) {
baseAssignValue(result2, key, value);
});
function map2(collection, iteratee2) {
var func = isArray2(collection) ? arrayMap : baseMap;
return func(collection, getIteratee(iteratee2, 3));
}
function orderBy(collection, iteratees, orders, guard) {
if (collection == null) {
return [];
}
if (!isArray2(iteratees)) {
iteratees = iteratees == null ? [] : [iteratees];
}
orders = guard ? undefined2 : orders;
if (!isArray2(orders)) {
orders = orders == null ? [] : [orders];
}
return baseOrderBy(collection, iteratees, orders);
}
var partition = createAggregator(function(result2, value, key) {
result2[key ? 0 : 1].push(value);
}, function() {
return [[], []];
});
function reduce(collection, iteratee2, accumulator) {
var func = isArray2(collection) ? arrayReduce : baseReduce, initAccum = arguments.length < 3;
return func(collection, getIteratee(iteratee2, 4), accumulator, initAccum, baseEach);
}
function reduceRight(collection, iteratee2, accumulator) {
var func = isArray2(collection) ? arrayReduceRight : baseReduce, initAccum = arguments.length < 3;
return func(collection, getIteratee(iteratee2, 4), accumulator, initAccum, baseEachRight);
}
function reject(collection, predicate) {
var func = isArray2(collection) ? arrayFilter : baseFilter;
return func(collection, negate(getIteratee(predicate, 3)));
}
function sample(collection) {
var func = isArray2(collection) ? arraySample : baseSample;
return func(collection);
}
function sampleSize(collection, n, guard) {
if (guard ? isIterateeCall(collection, n, guard) : n === undefined2) {
n = 1;
} else {
n = toInteger(n);
}
var func = isArray2(collection) ? arraySampleSize : baseSampleSize;
return func(collection, n);
}
function shuffle(collection) {
var func = isArray2(collection) ? arrayShuffle : baseShuffle;
return func(collection);
}
function size(collection) {
if (collection == null) {
return 0;
}
if (isArrayLike2(collection)) {
return isString2(collection) ? stringSize(collection) : collection.length;
}
var tag = getTag(collection);
if (tag == mapTag || tag == setTag) {
return collection.size;
}
return baseKeys(collection).length;
}
function some2(collection, predicate, guard) {
var func = isArray2(collection) ? arraySome : baseSome;
if (guard && isIterateeCall(collection, predicate, guard)) {
predicate = undefined2;
}
return func(collection, getIteratee(predicate, 3));
}
var sortBy = baseRest(function(collection, iteratees) {
if (collection == null) {
return [];
}
var length = iteratees.length;
if (length > 1 && isIterateeCall(collection, iteratees[0], iteratees[1])) {
iteratees = [];
} else if (length > 2 && isIterateeCall(iteratees[0], iteratees[1], iteratees[2])) {
iteratees = [iteratees[0]];
}
return baseOrderBy(collection, baseFlatten(iteratees, 1), []);
});
var now = ctxNow || function() {
return root2.Date.now();
};
function after2(n, func) {
if (typeof func != "function") {
throw new TypeError2(FUNC_ERROR_TEXT);
}
n = toInteger(n);
return function() {
if (--n < 1) {
return func.apply(this, arguments);
}
};
}
function ary(func, n, guard) {
n = guard ? undefined2 : n;
n = func && n == null ? func.length : n;
return createWrap(func, WRAP_ARY_FLAG, undefined2, undefined2, undefined2, undefined2, n);
}
function before2(n, func) {
var result2;
if (typeof func != "function") {
throw new TypeError2(FUNC_ERROR_TEXT);
}
n = toInteger(n);
return function() {
if (--n > 0) {
result2 = func.apply(this, arguments);
}
if (n <= 1) {
func = undefined2;
}
return result2;
};
}
var bind2 = baseRest(function(func, thisArg, partials) {
var bitmask = WRAP_BIND_FLAG;
if (partials.length) {
var holders = replaceHolders(partials, getHolder(bind2));
bitmask |= WRAP_PARTIAL_FLAG;
}
return createWrap(func, bitmask, thisArg, partials, holders);
});
var bindKey = baseRest(function(object, key, partials) {
var bitmask = WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG;
if (partials.length) {
var holders = replaceHolders(partials, getHolder(bindKey));
bitmask |= WRAP_PARTIAL_FLAG;
}
return createWrap(key, bitmask, object, partials, holders);
});
function curry(func, arity, guard) {
arity = guard ? undefined2 : arity;
var result2 = createWrap(func, WRAP_CURRY_FLAG, undefined2, undefined2, undefined2, undefined2, undefined2, arity);
result2.placeholder = curry.placeholder;
return result2;
}
function curryRight(func, arity, guard) {
arity = guard ? undefined2 : arity;
var result2 = createWrap(func, WRAP_CURRY_RIGHT_FLAG, undefined2, undefined2, undefined2, undefined2, undefined2, arity);
result2.placeholder = curryRight.placeholder;
return result2;
}
function debounce(func, wait, options) {
var lastArgs, lastThis, maxWait, result2, timerId, lastCallTime, lastInvokeTime = 0, leading = false, maxing = false, trailing = true;
if (typeof func != "function") {
throw new TypeError2(FUNC_ERROR_TEXT);
}
wait = toNumber(wait) || 0;
if (isObject2(options)) {
leading = !!options.leading;
maxing = "maxWait" in options;
maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;
trailing = "trailing" in options ? !!options.trailing : trailing;
}
function invokeFunc(time) {
var args = lastArgs, thisArg = lastThis;
lastArgs = lastThis = undefined2;
lastInvokeTime = time;
result2 = func.apply(thisArg, args);
return result2;
}
function leadingEdge(time) {
lastInvokeTime = time;
timerId = setTimeout2(timerExpired, wait);
return leading ? invokeFunc(time) : result2;
}
function remainingWait(time) {
var timeSinceLastCall = time - lastCallTime, timeSinceLastInvoke = time - lastInvokeTime, timeWaiting = wait - timeSinceLastCall;
return maxing ? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke) : timeWaiting;
}
function shouldInvoke(time) {
var timeSinceLastCall = time - lastCallTime, timeSinceLastInvoke = time - lastInvokeTime;
return lastCallTime === undefined2 || timeSinceLastCall >= wait || timeSinceLastCall < 0 || maxing && timeSinceLastInvoke >= maxWait;
}
function timerExpired() {
var time = now();
if (shouldInvoke(time)) {
return trailingEdge(time);
}
timerId = setTimeout2(timerExpired, remainingWait(time));
}
function trailingEdge(time) {
timerId = undefined2;
if (trailing && lastArgs) {
return invokeFunc(time);
}
lastArgs = lastThis = undefined2;
return result2;
}
function cancel() {
if (timerId !== undefined2) {
clearTimeout2(timerId);
}
lastInvokeTime = 0;
lastArgs = lastCallTime = lastThis = timerId = undefined2;
}
function flush() {
return timerId === undefined2 ? result2 : trailingEdge(now());
}
function debounced() {
var time = now(), isInvoking = shouldInvoke(time);
lastArgs = arguments;
lastThis = this;
lastCallTime = time;
if (isInvoking) {
if (timerId === undefined2) {
return leadingEdge(lastCallTime);
}
if (maxing) {
clearTimeout2(timerId);
timerId = setTimeout2(timerExpired, wait);
return invokeFunc(lastCallTime);
}
}
if (timerId === undefined2) {
timerId = setTimeout2(timerExpired, wait);
}
return result2;
}
debounced.cancel = cancel;
debounced.flush = flush;
return debounced;
}
var defer = baseRest(function(func, args) {
return baseDelay(func, 1, args);
});
var delay = baseRest(function(func, wait, args) {
return baseDelay(func, toNumber(wait) || 0, args);
});
function flip(func) {
return createWrap(func, WRAP_FLIP_FLAG);
}
function memoize(func, resolver) {
if (typeof func != "function" || resolver != null && typeof resolver != "function") {
throw new TypeError2(FUNC_ERROR_TEXT);
}
var memoized = function() {
var args = arguments, key = resolver ? resolver.apply(this, args) : args[0], cache = memoized.cache;
if (cache.has(key)) {
return cache.get(key);
}
var result2 = func.apply(this, args);
memoized.cache = cache.set(key, result2) || cache;
return result2;
};
memoized.cache = new (memoize.Cache || MapCache)();
return memoized;
}
memoize.Cache = MapCache;
function negate(predicate) {
if (typeof predicate != "function") {
throw new TypeError2(FUNC_ERROR_TEXT);
}
return function() {
var args = arguments;
switch (args.length) {
case 0:
return !predicate.call(this);
case 1:
return !predicate.call(this, args[0]);
case 2:
return !predicate.call(this, args[0], args[1]);
case 3:
return !predicate.call(this, args[0], args[1], args[2]);
}
return !predicate.apply(this, args);
};
}
function once(func) {
return before2(2, func);
}
var overArgs = castRest(function(func, transforms) {
transforms = transforms.length == 1 && isArray2(transforms[0]) ? arrayMap(transforms[0], baseUnary(getIteratee())) : arrayMap(baseFlatten(transforms, 1), baseUnary(getIteratee()));
var funcsLength = transforms.length;
return baseRest(function(args) {
var index2 = -1, length = nativeMin(args.length, funcsLength);
while (++index2 < length) {
args[index2] = transforms[index2].call(this, args[index2]);
}
return apply(func, this, args);
});
});
var partial = baseRest(function(func, partials) {
var holders = replaceHolders(partials, getHolder(partial));
return createWrap(func, WRAP_PARTIAL_FLAG, undefined2, partials, holders);
});
var partialRight = baseRest(function(func, partials) {
var holders = replaceHolders(partials, getHolder(partialRight));
return createWrap(func, WRAP_PARTIAL_RIGHT_FLAG, undefined2, partials, holders);
});
var rearg = flatRest(function(func, indexes) {
return createWrap(func, WRAP_REARG_FLAG, undefined2, undefined2, undefined2, indexes);
});
function rest(func, start) {
if (typeof func != "function") {
throw new TypeError2(FUNC_ERROR_TEXT);
}
start = start === undefined2 ? start : toInteger(start);
return baseRest(func, start);
}
function spread3(func, start) {
if (typeof func != "function") {
throw new TypeError2(FUNC_ERROR_TEXT);
}
start = start == null ? 0 : nativeMax(toInteger(start), 0);
return baseRest(function(args) {
var array = args[start], otherArgs = castSlice(args, 0, start);
if (array) {
arrayPush(otherArgs, array);
}
return apply(func, this, otherArgs);
});
}
function throttle2(func, wait, options) {
var leading = true, trailing = true;
if (typeof func != "function") {
throw new TypeError2(FUNC_ERROR_TEXT);
}
if (isObject2(options)) {
leading = "leading" in options ? !!options.leading : leading;
trailing = "trailing" in options ? !!options.trailing : trailing;
}
return debounce(func, wait, {
"leading": leading,
"maxWait": wait,
"trailing": trailing
});
}
function unary(func) {
return ary(func, 1);
}
function wrap2(value, wrapper) {
return partial(castFunction(wrapper), value);
}
function castArray() {
if (!arguments.length) {
return [];
}
var value = arguments[0];
return isArray2(value) ? value : [value];
}
function clone2(value) {
return baseClone(value, CLONE_SYMBOLS_FLAG);
}
function cloneWith(value, customizer) {
customizer = typeof customizer == "function" ? customizer : undefined2;
return baseClone(value, CLONE_SYMBOLS_FLAG, customizer);
}
function cloneDeep(value) {
return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG);
}
function cloneDeepWith(value, customizer) {
customizer = typeof customizer == "function" ? customizer : undefined2;
return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG, customizer);
}
function conformsTo(object, source) {
return source == null || baseConformsTo(object, source, keys(source));
}
function eq2(value, other) {
return value === other || value !== value && other !== other;
}
var gt = createRelationalOperation(baseGt);
var gte = createRelationalOperation(function(value, other) {
return value >= other;
});
var isArguments = baseIsArguments(/* @__PURE__ */ (function() {
return arguments;
})()) ? baseIsArguments : function(value) {
return isObjectLike(value) && hasOwnProperty2.call(value, "callee") && !propertyIsEnumerable.call(value, "callee");
};
var isArray2 = Array2.isArray;
var isArrayBuffer2 = nodeIsArrayBuffer ? baseUnary(nodeIsArrayBuffer) : baseIsArrayBuffer;
function isArrayLike2(value) {
return value != null && isLength(value.length) && !isFunction2(value);
}
function isArrayLikeObject(value) {
return isObjectLike(value) && isArrayLike2(value);
}
function isBoolean2(value) {
return value === true || value === false || isObjectLike(value) && baseGetTag(value) == boolTag;
}
var isBuffer2 = nativeIsBuffer || stubFalse;
var isDate2 = nodeIsDate ? baseUnary(nodeIsDate) : baseIsDate;
function isElement(value) {
return isObjectLike(value) && value.nodeType === 1 && !isPlainObject2(value);
}
function isEmpty(value) {
if (value == null) {
return true;
}
if (isArrayLike2(value) && (isArray2(value) || typeof value == "string" || typeof value.splice == "function" || isBuffer2(value) || isTypedArray2(value) || isArguments(value))) {
return !value.length;
}
var tag = getTag(value);
if (tag == mapTag || tag == setTag) {
return !value.size;
}
if (isPrototype(value)) {
return !baseKeys(value).length;
}
for (var key in value) {
if (hasOwnProperty2.call(value, key)) {
return false;
}
}
return true;
}
function isEqual(value, other) {
return baseIsEqual(value, other);
}
function isEqualWith(value, other, customizer) {
customizer = typeof customizer == "function" ? customizer : undefined2;
var result2 = customizer ? customizer(value, other) : undefined2;
return result2 === undefined2 ? baseIsEqual(value, other, undefined2, customizer) : !!result2;
}
function isError(value) {
if (!isObjectLike(value)) {
return false;
}
var tag = baseGetTag(value);
return tag == errorTag || tag == domExcTag || typeof value.message == "string" && typeof value.name == "string" && !isPlainObject2(value);
}
function isFinite2(value) {
return typeof value == "number" && nativeIsFinite(value);
}
function isFunction2(value) {
if (!isObject2(value)) {
return false;
}
var tag = baseGetTag(value);
return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;
}
function isInteger(value) {
return typeof value == "number" && value == toInteger(value);
}
function isLength(value) {
return typeof value == "number" && value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;
}
function isObject2(value) {
var type = typeof value;
return value != null && (type == "object" || type == "function");
}
function isObjectLike(value) {
return value != null && typeof value == "object";
}
var isMap = nodeIsMap ? baseUnary(nodeIsMap) : baseIsMap;
function isMatch(object, source) {
return object === source || baseIsMatch(object, source, getMatchData(source));
}
function isMatchWith(object, source, customizer) {
customizer = typeof customizer == "function" ? customizer : undefined2;
return baseIsMatch(object, source, getMatchData(source), customizer);
}
function isNaN2(value) {
return isNumber3(value) && value != +value;
}
function isNative(value) {
if (isMaskable(value)) {
throw new Error2(CORE_ERROR_TEXT);
}
return baseIsNative(value);
}
function isNull(value) {
return value === null;
}
function isNil(value) {
return value == null;
}
function isNumber3(value) {
return typeof value == "number" || isObjectLike(value) && baseGetTag(value) == numberTag;
}
function isPlainObject2(value) {
if (!isObjectLike(value) || baseGetTag(value) != objectTag) {
return false;
}
var proto = getPrototype(value);
if (proto === null) {
return true;
}
var Ctor = hasOwnProperty2.call(proto, "constructor") && proto.constructor;
return typeof Ctor == "function" && Ctor instanceof Ctor && funcToString.call(Ctor) == objectCtorString;
}
var isRegExp2 = nodeIsRegExp ? baseUnary(nodeIsRegExp) : baseIsRegExp;
function isSafeInteger(value) {
return isInteger(value) && value >= -MAX_SAFE_INTEGER && value <= MAX_SAFE_INTEGER;
}
var isSet = nodeIsSet ? baseUnary(nodeIsSet) : baseIsSet;
function isString2(value) {
return typeof value == "string" || !isArray2(value) && isObjectLike(value) && baseGetTag(value) == stringTag;
}
function isSymbol(value) {
return typeof value == "symbol" || isObjectLike(value) && baseGetTag(value) == symbolTag;
}
var isTypedArray2 = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray;
function isUndefined2(value) {
return value === undefined2;
}
function isWeakMap(value) {
return isObjectLike(value) && getTag(value) == weakMapTag;
}
function isWeakSet(value) {
return isObjectLike(value) && baseGetTag(value) == weakSetTag;
}
var lt = createRelationalOperation(baseLt);
var lte = createRelationalOperation(function(value, other) {
return value <= other;
});
function toArray3(value) {
if (!value) {
return [];
}
if (isArrayLike2(value)) {
return isString2(value) ? stringToArray(value) : copyArray(value);
}
if (symIterator && value[symIterator]) {
return iteratorToArray(value[symIterator]());
}
var tag = getTag(value), func = tag == mapTag ? mapToArray : tag == setTag ? setToArray : values;
return func(value);
}
function toFinite(value) {
if (!value) {
return value === 0 ? value : 0;
}
value = toNumber(value);
if (value === INFINITY || value === -INFINITY) {
var sign = value < 0 ? -1 : 1;
return sign * MAX_INTEGER;
}
return value === value ? value : 0;
}
function toInteger(value) {
var result2 = toFinite(value), remainder = result2 % 1;
return result2 === result2 ? remainder ? result2 - remainder : result2 : 0;
}
function toLength(value) {
return value ? baseClamp(toInteger(value), 0, MAX_ARRAY_LENGTH) : 0;
}
function toNumber(value) {
if (typeof value == "number") {
return value;
}
if (isSymbol(value)) {
return NAN;
}
if (isObject2(value)) {
var other = typeof value.valueOf == "function" ? value.valueOf() : value;
value = isObject2(other) ? other + "" : other;
}
if (typeof value != "string") {
return value === 0 ? value : +value;
}
value = baseTrim(value);
var isBinary = reIsBinary.test(value);
return isBinary || reIsOctal.test(value) ? freeParseInt(value.slice(2), isBinary ? 2 : 8) : reIsBadHex.test(value) ? NAN : +value;
}
function toPlainObject(value) {
return copyObject(value, keysIn(value));
}
function toSafeInteger(value) {
return value ? baseClamp(toInteger(value), -MAX_SAFE_INTEGER, MAX_SAFE_INTEGER) : value === 0 ? value : 0;
}
function toString4(value) {
return value == null ? "" : baseToString(value);
}
var assign = createAssigner(function(object, source) {
if (isPrototype(source) || isArrayLike2(source)) {
copyObject(source, keys(source), object);
return;
}
for (var key in source) {
if (hasOwnProperty2.call(source, key)) {
assignValue(object, key, source[key]);
}
}
});
var assignIn = createAssigner(function(object, source) {
copyObject(source, keysIn(source), object);
});
var assignInWith = createAssigner(function(object, source, srcIndex, customizer) {
copyObject(source, keysIn(source), object, customizer);
});
var assignWith = createAssigner(function(object, source, srcIndex, customizer) {
copyObject(source, keys(source), object, customizer);
});
var at = flatRest(baseAt);
function create(prototype3, properties) {
var result2 = baseCreate(prototype3);
return properties == null ? result2 : baseAssign(result2, properties);
}
var defaults2 = baseRest(function(object, sources) {
object = Object2(object);
var index2 = -1;
var length = sources.length;
var guard = length > 2 ? sources[2] : undefined2;
if (guard && isIterateeCall(sources[0], sources[1], guard)) {
length = 1;
}
while (++index2 < length) {
var source = sources[index2];
var props = keysIn(source);
var propsIndex = -1;
var propsLength = props.length;
while (++propsIndex < propsLength) {
var key = props[propsIndex];
var value = object[key];
if (value === undefined2 || eq2(value, objectProto[key]) && !hasOwnProperty2.call(object, key)) {
object[key] = source[key];
}
}
}
return object;
});
var defaultsDeep = baseRest(function(args) {
args.push(undefined2, customDefaultsMerge);
return apply(mergeWith, undefined2, args);
});
function findKey2(object, predicate) {
return baseFindKey(object, getIteratee(predicate, 3), baseForOwn);
}
function findLastKey(object, predicate) {
return baseFindKey(object, getIteratee(predicate, 3), baseForOwnRight);
}
function forIn(object, iteratee2) {
return object == null ? object : baseFor(object, getIteratee(iteratee2, 3), keysIn);
}
function forInRight(object, iteratee2) {
return object == null ? object : baseForRight(object, getIteratee(iteratee2, 3), keysIn);
}
function forOwn(object, iteratee2) {
return object && baseForOwn(object, getIteratee(iteratee2, 3));
}
function forOwnRight(object, iteratee2) {
return object && baseForOwnRight(object, getIteratee(iteratee2, 3));
}
function functions(object) {
return object == null ? [] : baseFunctions(object, keys(object));
}
function functionsIn(object) {
return object == null ? [] : baseFunctions(object, keysIn(object));
}
function get2(object, path, defaultValue) {
var result2 = object == null ? undefined2 : baseGet(object, path);
return result2 === undefined2 ? defaultValue : result2;
}
function has2(object, path) {
return object != null && hasPath(object, path, baseHas);
}
function hasIn(object, path) {
return object != null && hasPath(object, path, baseHasIn);
}
var invert = createInverter(function(result2, value, key) {
if (value != null && typeof value.toString != "function") {
value = nativeObjectToString.call(value);
}
result2[value] = key;
}, constant(identity));
var invertBy = createInverter(function(result2, value, key) {
if (value != null && typeof value.toString != "function") {
value = nativeObjectToString.call(value);
}
if (hasOwnProperty2.call(result2, value)) {
result2[value].push(key);
} else {
result2[value] = [key];
}
}, getIteratee);
var invoke = baseRest(baseInvoke);
function keys(object) {
return isArrayLike2(object) ? arrayLikeKeys(object) : baseKeys(object);
}
function keysIn(object) {
return isArrayLike2(object) ? arrayLikeKeys(object, true) : baseKeysIn(object);
}
function mapKeys(object, iteratee2) {
var result2 = {};
iteratee2 = getIteratee(iteratee2, 3);
baseForOwn(object, function(value, key, object2) {
baseAssignValue(result2, iteratee2(value, key, object2), value);
});
return result2;
}
function mapValues(object, iteratee2) {
var result2 = {};
iteratee2 = getIteratee(iteratee2, 3);
baseForOwn(object, function(value, key, object2) {
baseAssignValue(result2, key, iteratee2(value, key, object2));
});
return result2;
}
var merge3 = createAssigner(function(object, source, srcIndex) {
baseMerge(object, source, srcIndex);
});
var mergeWith = createAssigner(function(object, source, srcIndex, customizer) {
baseMerge(object, source, srcIndex, customizer);
});
var omit = flatRest(function(object, paths) {
var result2 = {};
if (object == null) {
return result2;
}
var isDeep = false;
paths = arrayMap(paths, function(path) {
path = castPath(path, object);
isDeep || (isDeep = path.length > 1);
return path;
});
copyObject(object, getAllKeysIn(object), result2);
if (isDeep) {
result2 = baseClone(result2, CLONE_DEEP_FLAG | CLONE_FLAT_FLAG | CLONE_SYMBOLS_FLAG, customOmitClone);
}
var length = paths.length;
while (length--) {
baseUnset(result2, paths[length]);
}
return result2;
});
function omitBy(object, predicate) {
return pickBy(object, negate(getIteratee(predicate)));
}
var pick = flatRest(function(object, paths) {
return object == null ? {} : basePick(object, paths);
});
function pickBy(object, predicate) {
if (object == null) {
return {};
}
var props = arrayMap(getAllKeysIn(object), function(prop2) {
return [prop2];
});
predicate = getIteratee(predicate);
return basePickBy(object, props, function(value, path) {
return predicate(value, path[0]);
});
}
function result(object, path, defaultValue) {
path = castPath(path, object);
var index2 = -1, length = path.length;
if (!length) {
length = 1;
object = undefined2;
}
while (++index2 < length) {
var value = object == null ? undefined2 : object[toKey(path[index2])];
if (value === undefined2) {
index2 = length;
value = defaultValue;
}
object = isFunction2(value) ? value.call(object) : value;
}
return object;
}
function set(object, path, value) {
return object == null ? object : baseSet(object, path, value);
}
function setWith(object, path, value, customizer) {
customizer = typeof customizer == "function" ? customizer : undefined2;
return object == null ? object : baseSet(object, path, value, customizer);
}
var toPairs = createToPairs(keys);
var toPairsIn = createToPairs(keysIn);
function transform(object, iteratee2, accumulator) {
var isArr = isArray2(object), isArrLike = isArr || isBuffer2(object) || isTypedArray2(object);
iteratee2 = getIteratee(iteratee2, 4);
if (accumulator == null) {
var Ctor = object && object.constructor;
if (isArrLike) {
accumulator = isArr ? new Ctor() : [];
} else if (isObject2(object)) {
accumulator = isFunction2(Ctor) ? baseCreate(getPrototype(object)) : {};
} else {
accumulator = {};
}
}
(isArrLike ? arrayEach : baseForOwn)(object, function(value, index2, object2) {
return iteratee2(accumulator, value, index2, object2);
});
return accumulator;
}
function unset(object, path) {
return object == null ? true : baseUnset(object, path);
}
function update2(object, path, updater) {
return object == null ? object : baseUpdate(object, path, castFunction(updater));
}
function updateWith(object, path, updater, customizer) {
customizer = typeof customizer == "function" ? customizer : undefined2;
return object == null ? object : baseUpdate(object, path, castFunction(updater), customizer);
}
function values(object) {
return object == null ? [] : baseValues(object, keys(object));
}
function valuesIn(object) {
return object == null ? [] : baseValues(object, keysIn(object));
}
function clamp(number, lower, upper) {
if (upper === undefined2) {
upper = lower;
lower = undefined2;
}
if (upper !== undefined2) {
upper = toNumber(upper);
upper = upper === upper ? upper : 0;
}
if (lower !== undefined2) {
lower = toNumber(lower);
lower = lower === lower ? lower : 0;
}
return baseClamp(toNumber(number), lower, upper);
}
function inRange(number, start, end2) {
start = toFinite(start);
if (end2 === undefined2) {
end2 = start;
start = 0;
} else {
end2 = toFinite(end2);
}
number = toNumber(number);
return baseInRange(number, start, end2);
}
function random(lower, upper, floating) {
if (floating && typeof floating != "boolean" && isIterateeCall(lower, upper, floating)) {
upper = floating = undefined2;
}
if (floating === undefined2) {
if (typeof upper == "boolean") {
floating = upper;
upper = undefined2;
} else if (typeof lower == "boolean") {
floating = lower;
lower = undefined2;
}
}
if (lower === undefined2 && upper === undefined2) {
lower = 0;
upper = 1;
} else {
lower = toFinite(lower);
if (upper === undefined2) {
upper = lower;
lower = 0;
} else {
upper = toFinite(upper);
}
}
if (lower > upper) {
var temp = lower;
lower = upper;
upper = temp;
}
if (floating || lower % 1 || upper % 1) {
var rand = nativeRandom();
return nativeMin(lower + rand * (upper - lower + freeParseFloat("1e-" + ((rand + "").length - 1))), upper);
}
return baseRandom(lower, upper);
}
var camelCase2 = createCompounder(function(result2, word, index2) {
word = word.toLowerCase();
return result2 + (index2 ? capitalize(word) : word);
});
function capitalize(string) {
return upperFirst(toString4(string).toLowerCase());
}
function deburr(string) {
string = toString4(string);
return string && string.replace(reLatin, deburrLetter).replace(reComboMark, "");
}
function endsWith2(string, target, position) {
string = toString4(string);
target = baseToString(target);
var length = string.length;
position = position === undefined2 ? length : baseClamp(toInteger(position), 0, length);
var end2 = position;
position -= target.length;
return position >= 0 && string.slice(position, end2) == target;
}
function escape22(string) {
string = toString4(string);
return string && reHasUnescapedHtml.test(string) ? string.replace(reUnescapedHtml, escapeHtmlChar) : string;
}
function escapeRegExp(string) {
string = toString4(string);
return string && reHasRegExpChar.test(string) ? string.replace(reRegExpChar, "\\$&") : string;
}
var kebabCase = createCompounder(function(result2, word, index2) {
return result2 + (index2 ? "-" : "") + word.toLowerCase();
});
var lowerCase = createCompounder(function(result2, word, index2) {
return result2 + (index2 ? " " : "") + word.toLowerCase();
});
var lowerFirst = createCaseFirst("toLowerCase");
function pad(string, length, chars) {
string = toString4(string);
length = toInteger(length);
var strLength = length ? stringSize(string) : 0;
if (!length || strLength >= length) {
return string;
}
var mid = (length - strLength) / 2;
return createPadding(nativeFloor(mid), chars) + string + createPadding(nativeCeil(mid), chars);
}
function padEnd(string, length, chars) {
string = toString4(string);
length = toInteger(length);
var strLength = length ? stringSize(string) : 0;
return length && strLength < length ? string + createPadding(length - strLength, chars) : string;
}
function padStart(string, length, chars) {
string = toString4(string);
length = toInteger(length);
var strLength = length ? stringSize(string) : 0;
return length && strLength < length ? createPadding(length - strLength, chars) + string : string;
}
function parseInt2(string, radix, guard) {
if (guard || radix == null) {
radix = 0;
} else if (radix) {
radix = +radix;
}
return nativeParseInt(toString4(string).replace(reTrimStart, ""), radix || 0);
}
function repeat(string, n, guard) {
if (guard ? isIterateeCall(string, n, guard) : n === undefined2) {
n = 1;
} else {
n = toInteger(n);
}
return baseRepeat(toString4(string), n);
}
function replace() {
var args = arguments, string = toString4(args[0]);
return args.length < 3 ? string : string.replace(args[1], args[2]);
}
var snakeCase = createCompounder(function(result2, word, index2) {
return result2 + (index2 ? "_" : "") + word.toLowerCase();
});
function split(string, separator, limit) {
if (limit && typeof limit != "number" && isIterateeCall(string, separator, limit)) {
separator = limit = undefined2;
}
limit = limit === undefined2 ? MAX_ARRAY_LENGTH : limit >>> 0;
if (!limit) {
return [];
}
string = toString4(string);
if (string && (typeof separator == "string" || separator != null && !isRegExp2(separator))) {
separator = baseToString(separator);
if (!separator && hasUnicode(string)) {
return castSlice(stringToArray(string), 0, limit);
}
}
return string.split(separator, limit);
}
var startCase = createCompounder(function(result2, word, index2) {
return result2 + (index2 ? " " : "") + upperFirst(word);
});
function startsWith(string, target, position) {
string = toString4(string);
position = position == null ? 0 : baseClamp(toInteger(position), 0, string.length);
target = baseToString(target);
return string.slice(position, position + target.length) == target;
}
function template(string, options, guard) {
var settings = lodash.templateSettings;
if (guard && isIterateeCall(string, options, guard)) {
options = undefined2;
}
string = toString4(string);
options = assignInWith({}, options, settings, customDefaultsAssignIn);
var imports = assignInWith({}, options.imports, settings.imports, customDefaultsAssignIn), importsKeys = keys(imports), importsValues = baseValues(imports, importsKeys);
var isEscaping, isEvaluating, index2 = 0, interpolate = options.interpolate || reNoMatch, source = "__p += '";
var reDelimiters = RegExp2(
(options.escape || reNoMatch).source + "|" + interpolate.source + "|" + (interpolate === reInterpolate ? reEsTemplate : reNoMatch).source + "|" + (options.evaluate || reNoMatch).source + "|$",
"g"
);
var sourceURL = "//# sourceURL=" + (hasOwnProperty2.call(options, "sourceURL") ? (options.sourceURL + "").replace(/\s/g, " ") : "lodash.templateSources[" + ++templateCounter + "]") + "\n";
string.replace(reDelimiters, function(match, escapeValue, interpolateValue, esTemplateValue, evaluateValue, offset) {
interpolateValue || (interpolateValue = esTemplateValue);
source += string.slice(index2, offset).replace(reUnescapedString, escapeStringChar);
if (escapeValue) {
isEscaping = true;
source += "' +\n__e(" + escapeValue + ") +\n'";
}
if (evaluateValue) {
isEvaluating = true;
source += "';\n" + evaluateValue + ";\n__p += '";
}
if (interpolateValue) {
source += "' +\n((__t = (" + interpolateValue + ")) == null ? '' : __t) +\n'";
}
index2 = offset + match.length;
return match;
});
source += "';\n";
var variable = hasOwnProperty2.call(options, "variable") && options.variable;
if (!variable) {
source = "with (obj) {\n" + source + "\n}\n";
} else if (reForbiddenIdentifierChars.test(variable)) {
throw new Error2(INVALID_TEMPL_VAR_ERROR_TEXT);
}
source = (isEvaluating ? source.replace(reEmptyStringLeading, "") : source).replace(reEmptyStringMiddle, "$1").replace(reEmptyStringTrailing, "$1;");
source = "function(" + (variable || "obj") + ") {\n" + (variable ? "" : "obj || (obj = {});\n") + "var __t, __p = ''" + (isEscaping ? ", __e = _.escape" : "") + (isEvaluating ? ", __j = Array.prototype.join;\nfunction print() { __p += __j.call(arguments, '') }\n" : ";\n") + source + "return __p\n}";
var result2 = attempt(function() {
return Function2(importsKeys, sourceURL + "return " + source).apply(undefined2, importsValues);
});
result2.source = source;
if (isError(result2)) {
throw result2;
}
return result2;
}
function toLower(value) {
return toString4(value).toLowerCase();
}
function toUpper(value) {
return toString4(value).toUpperCase();
}
function trim2(string, chars, guard) {
string = toString4(string);
if (string && (guard || chars === undefined2)) {
return baseTrim(string);
}
if (!string || !(chars = baseToString(chars))) {
return string;
}
var strSymbols = stringToArray(string), chrSymbols = stringToArray(chars), start = charsStartIndex(strSymbols, chrSymbols), end2 = charsEndIndex(strSymbols, chrSymbols) + 1;
return castSlice(strSymbols, start, end2).join("");
}
function trimEnd(string, chars, guard) {
string = toString4(string);
if (string && (guard || chars === undefined2)) {
return string.slice(0, trimmedEndIndex(string) + 1);
}
if (!string || !(chars = baseToString(chars))) {
return string;
}
var strSymbols = stringToArray(string), end2 = charsEndIndex(strSymbols, stringToArray(chars)) + 1;
return castSlice(strSymbols, 0, end2).join("");
}
function trimStart(string, chars, guard) {
string = toString4(string);
if (string && (guard || chars === undefined2)) {
return string.replace(reTrimStart, "");
}
if (!string || !(chars = baseToString(chars))) {
return string;
}
var strSymbols = stringToArray(string), start = charsStartIndex(strSymbols, stringToArray(chars));
return castSlice(strSymbols, start).join("");
}
function truncate(string, options) {
var length = DEFAULT_TRUNC_LENGTH, omission = DEFAULT_TRUNC_OMISSION;
if (isObject2(options)) {
var separator = "separator" in options ? options.separator : separator;
length = "length" in options ? toInteger(options.length) : length;
omission = "omission" in options ? baseToString(options.omission) : omission;
}
string = toString4(string);
var strLength = string.length;
if (hasUnicode(string)) {
var strSymbols = stringToArray(string);
strLength = strSymbols.length;
}
if (length >= strLength) {
return string;
}
var end2 = length - stringSize(omission);
if (end2 < 1) {
return omission;
}
var result2 = strSymbols ? castSlice(strSymbols, 0, end2).join("") : string.slice(0, end2);
if (separator === undefined2) {
return result2 + omission;
}
if (strSymbols) {
end2 += result2.length - end2;
}
if (isRegExp2(separator)) {
if (string.slice(end2).search(separator)) {
var match, substring = result2;
if (!separator.global) {
separator = RegExp2(separator.source, toString4(reFlags.exec(separator)) + "g");
}
separator.lastIndex = 0;
while (match = separator.exec(substring)) {
var newEnd = match.index;
}
result2 = result2.slice(0, newEnd === undefined2 ? end2 : newEnd);
}
} else if (string.indexOf(baseToString(separator), end2) != end2) {
var index2 = result2.lastIndexOf(separator);
if (index2 > -1) {
result2 = result2.slice(0, index2);
}
}
return result2 + omission;
}
function unescape2(string) {
string = toString4(string);
return string && reHasEscapedHtml.test(string) ? string.replace(reEscapedHtml, unescapeHtmlChar) : string;
}
var upperCase = createCompounder(function(result2, word, index2) {
return result2 + (index2 ? " " : "") + word.toUpperCase();
});
var upperFirst = createCaseFirst("toUpperCase");
function words(string, pattern, guard) {
string = toString4(string);
pattern = guard ? undefined2 : pattern;
if (pattern === undefined2) {
return hasUnicodeWord(string) ? unicodeWords(string) : asciiWords(string);
}
return string.match(pattern) || [];
}
var attempt = baseRest(function(func, args) {
try {
return apply(func, undefined2, args);
} catch (e) {
return isError(e) ? e : new Error2(e);
}
});
var bindAll = flatRest(function(object, methodNames) {
arrayEach(methodNames, function(key) {
key = toKey(key);
baseAssignValue(object, key, bind2(object[key], object));
});
return object;
});
function cond(pairs) {
var length = pairs == null ? 0 : pairs.length, toIteratee = getIteratee();
pairs = !length ? [] : arrayMap(pairs, function(pair) {
if (typeof pair[1] != "function") {
throw new TypeError2(FUNC_ERROR_TEXT);
}
return [toIteratee(pair[0]), pair[1]];
});
return baseRest(function(args) {
var index2 = -1;
while (++index2 < length) {
var pair = pairs[index2];
if (apply(pair[0], this, args)) {
return apply(pair[1], this, args);
}
}
});
}
function conforms(source) {
return baseConforms(baseClone(source, CLONE_DEEP_FLAG));
}
function constant(value) {
return function() {
return value;
};
}
function defaultTo(value, defaultValue) {
return value == null || value !== value ? defaultValue : value;
}
var flow = createFlow();
var flowRight = createFlow(true);
function identity(value) {
return value;
}
function iteratee(func) {
return baseIteratee(typeof func == "function" ? func : baseClone(func, CLONE_DEEP_FLAG));
}
function matches(source) {
return baseMatches(baseClone(source, CLONE_DEEP_FLAG));
}
function matchesProperty(path, srcValue) {
return baseMatchesProperty(path, baseClone(srcValue, CLONE_DEEP_FLAG));
}
var method = baseRest(function(path, args) {
return function(object) {
return baseInvoke(object, path, args);
};
});
var methodOf = baseRest(function(object, args) {
return function(path) {
return baseInvoke(object, path, args);
};
});
function mixin(object, source, options) {
var props = keys(source), methodNames = baseFunctions(source, props);
if (options == null && !(isObject2(source) && (methodNames.length || !props.length))) {
options = source;
source = object;
object = this;
methodNames = baseFunctions(source, keys(source));
}
var chain2 = !(isObject2(options) && "chain" in options) || !!options.chain, isFunc = isFunction2(object);
arrayEach(methodNames, function(methodName) {
var func = source[methodName];
object[methodName] = func;
if (isFunc) {
object.prototype[methodName] = function() {
var chainAll = this.__chain__;
if (chain2 || chainAll) {
var result2 = object(this.__wrapped__), actions = result2.__actions__ = copyArray(this.__actions__);
actions.push({ "func": func, "args": arguments, "thisArg": object });
result2.__chain__ = chainAll;
return result2;
}
return func.apply(object, arrayPush([this.value()], arguments));
};
}
});
return object;
}
function noConflict() {
if (root2._ === this) {
root2._ = oldDash;
}
return this;
}
function noop2() {
}
function nthArg(n) {
n = toInteger(n);
return baseRest(function(args) {
return baseNth(args, n);
});
}
var over = createOver(arrayMap);
var overEvery = createOver(arrayEvery);
var overSome = createOver(arraySome);
function property(path) {
return isKey(path) ? baseProperty(toKey(path)) : basePropertyDeep(path);
}
function propertyOf(object) {
return function(path) {
return object == null ? undefined2 : baseGet(object, path);
};
}
var range = createRange();
var rangeRight = createRange(true);
function stubArray() {
return [];
}
function stubFalse() {
return false;
}
function stubObject() {
return {};
}
function stubString() {
return "";
}
function stubTrue() {
return true;
}
function times(n, iteratee2) {
n = toInteger(n);
if (n < 1 || n > MAX_SAFE_INTEGER) {
return [];
}
var index2 = MAX_ARRAY_LENGTH, length = nativeMin(n, MAX_ARRAY_LENGTH);
iteratee2 = getIteratee(iteratee2);
n -= MAX_ARRAY_LENGTH;
var result2 = baseTimes(length, iteratee2);
while (++index2 < n) {
iteratee2(index2);
}
return result2;
}
function toPath(value) {
if (isArray2(value)) {
return arrayMap(value, toKey);
}
return isSymbol(value) ? [value] : copyArray(stringToPath(toString4(value)));
}
function uniqueId(prefix) {
var id = ++idCounter;
return toString4(prefix) + id;
}
var add2 = createMathOperation(function(augend, addend) {
return augend + addend;
}, 0);
var ceil = createRound("ceil");
var divide = createMathOperation(function(dividend, divisor) {
return dividend / divisor;
}, 1);
var floor = createRound("floor");
function max(array) {
return array && array.length ? baseExtremum(array, identity, baseGt) : undefined2;
}
function maxBy(array, iteratee2) {
return array && array.length ? baseExtremum(array, getIteratee(iteratee2, 2), baseGt) : undefined2;
}
function mean(array) {
return baseMean(array, identity);
}
function meanBy(array, iteratee2) {
return baseMean(array, getIteratee(iteratee2, 2));
}
function min(array) {
return array && array.length ? baseExtremum(array, identity, baseLt) : undefined2;
}
function minBy(array, iteratee2) {
return array && array.length ? baseExtremum(array, getIteratee(iteratee2, 2), baseLt) : undefined2;
}
var multiply = createMathOperation(function(multiplier, multiplicand) {
return multiplier * multiplicand;
}, 1);
var round = createRound("round");
var subtract = createMathOperation(function(minuend, subtrahend) {
return minuend - subtrahend;
}, 0);
function sum(array) {
return array && array.length ? baseSum(array, identity) : 0;
}
function sumBy(array, iteratee2) {
return array && array.length ? baseSum(array, getIteratee(iteratee2, 2)) : 0;
}
lodash.after = after2;
lodash.ary = ary;
lodash.assign = assign;
lodash.assignIn = assignIn;
lodash.assignInWith = assignInWith;
lodash.assignWith = assignWith;
lodash.at = at;
lodash.before = before2;
lodash.bind = bind2;
lodash.bindAll = bindAll;
lodash.bindKey = bindKey;
lodash.castArray = castArray;
lodash.chain = chain;
lodash.chunk = chunk;
lodash.compact = compact;
lodash.concat = concat;
lodash.cond = cond;
lodash.conforms = conforms;
lodash.constant = constant;
lodash.countBy = countBy;
lodash.create = create;
lodash.curry = curry;
lodash.curryRight = curryRight;
lodash.debounce = debounce;
lodash.defaults = defaults2;
lodash.defaultsDeep = defaultsDeep;
lodash.defer = defer;
lodash.delay = delay;
lodash.difference = difference;
lodash.differenceBy = differenceBy;
lodash.differenceWith = differenceWith;
lodash.drop = drop;
lodash.dropRight = dropRight;
lodash.dropRightWhile = dropRightWhile;
lodash.dropWhile = dropWhile;
lodash.fill = fill;
lodash.filter = filter5;
lodash.flatMap = flatMap;
lodash.flatMapDeep = flatMapDeep;
lodash.flatMapDepth = flatMapDepth;
lodash.flatten = flatten;
lodash.flattenDeep = flattenDeep;
lodash.flattenDepth = flattenDepth;
lodash.flip = flip;
lodash.flow = flow;
lodash.flowRight = flowRight;
lodash.fromPairs = fromPairs;
lodash.functions = functions;
lodash.functionsIn = functionsIn;
lodash.groupBy = groupBy;
lodash.initial = initial;
lodash.intersection = intersection;
lodash.intersectionBy = intersectionBy;
lodash.intersectionWith = intersectionWith;
lodash.invert = invert;
lodash.invertBy = invertBy;
lodash.invokeMap = invokeMap;
lodash.iteratee = iteratee;
lodash.keyBy = keyBy;
lodash.keys = keys;
lodash.keysIn = keysIn;
lodash.map = map2;
lodash.mapKeys = mapKeys;
lodash.mapValues = mapValues;
lodash.matches = matches;
lodash.matchesProperty = matchesProperty;
lodash.memoize = memoize;
lodash.merge = merge3;
lodash.mergeWith = mergeWith;
lodash.method = method;
lodash.methodOf = methodOf;
lodash.mixin = mixin;
lodash.negate = negate;
lodash.nthArg = nthArg;
lodash.omit = omit;
lodash.omitBy = omitBy;
lodash.once = once;
lodash.orderBy = orderBy;
lodash.over = over;
lodash.overArgs = overArgs;
lodash.overEvery = overEvery;
lodash.overSome = overSome;
lodash.partial = partial;
lodash.partialRight = partialRight;
lodash.partition = partition;
lodash.pick = pick;
lodash.pickBy = pickBy;
lodash.property = property;
lodash.propertyOf = propertyOf;
lodash.pull = pull;
lodash.pullAll = pullAll;
lodash.pullAllBy = pullAllBy;
lodash.pullAllWith = pullAllWith;
lodash.pullAt = pullAt;
lodash.range = range;
lodash.rangeRight = rangeRight;
lodash.rearg = rearg;
lodash.reject = reject;
lodash.remove = remove2;
lodash.rest = rest;
lodash.reverse = reverse;
lodash.sampleSize = sampleSize;
lodash.set = set;
lodash.setWith = setWith;
lodash.shuffle = shuffle;
lodash.slice = slice2;
lodash.sortBy = sortBy;
lodash.sortedUniq = sortedUniq;
lodash.sortedUniqBy = sortedUniqBy;
lodash.split = split;
lodash.spread = spread3;
lodash.tail = tail;
lodash.take = take;
lodash.takeRight = takeRight;
lodash.takeRightWhile = takeRightWhile;
lodash.takeWhile = takeWhile;
lodash.tap = tap;
lodash.throttle = throttle2;
lodash.thru = thru;
lodash.toArray = toArray3;
lodash.toPairs = toPairs;
lodash.toPairsIn = toPairsIn;
lodash.toPath = toPath;
lodash.toPlainObject = toPlainObject;
lodash.transform = transform;
lodash.unary = unary;
lodash.union = union;
lodash.unionBy = unionBy;
lodash.unionWith = unionWith;
lodash.uniq = uniq;
lodash.uniqBy = uniqBy;
lodash.uniqWith = uniqWith;
lodash.unset = unset;
lodash.unzip = unzip;
lodash.unzipWith = unzipWith;
lodash.update = update2;
lodash.updateWith = updateWith;
lodash.values = values;
lodash.valuesIn = valuesIn;
lodash.without = without;
lodash.words = words;
lodash.wrap = wrap2;
lodash.xor = xor;
lodash.xorBy = xorBy;
lodash.xorWith = xorWith;
lodash.zip = zip;
lodash.zipObject = zipObject;
lodash.zipObjectDeep = zipObjectDeep;
lodash.zipWith = zipWith;
lodash.entries = toPairs;
lodash.entriesIn = toPairsIn;
lodash.extend = assignIn;
lodash.extendWith = assignInWith;
mixin(lodash, lodash);
lodash.add = add2;
lodash.attempt = attempt;
lodash.camelCase = camelCase2;
lodash.capitalize = capitalize;
lodash.ceil = ceil;
lodash.clamp = clamp;
lodash.clone = clone2;
lodash.cloneDeep = cloneDeep;
lodash.cloneDeepWith = cloneDeepWith;
lodash.cloneWith = cloneWith;
lodash.conformsTo = conformsTo;
lodash.deburr = deburr;
lodash.defaultTo = defaultTo;
lodash.divide = divide;
lodash.endsWith = endsWith2;
lodash.eq = eq2;
lodash.escape = escape22;
lodash.escapeRegExp = escapeRegExp;
lodash.every = every;
lodash.find = find4;
lodash.findIndex = findIndex;
lodash.findKey = findKey2;
lodash.findLast = findLast;
lodash.findLastIndex = findLastIndex;
lodash.findLastKey = findLastKey;
lodash.floor = floor;
lodash.forEach = forEach2;
lodash.forEachRight = forEachRight;
lodash.forIn = forIn;
lodash.forInRight = forInRight;
lodash.forOwn = forOwn;
lodash.forOwnRight = forOwnRight;
lodash.get = get2;
lodash.gt = gt;
lodash.gte = gte;
lodash.has = has2;
lodash.hasIn = hasIn;
lodash.head = head;
lodash.identity = identity;
lodash.includes = includes;
lodash.indexOf = indexOf;
lodash.inRange = inRange;
lodash.invoke = invoke;
lodash.isArguments = isArguments;
lodash.isArray = isArray2;
lodash.isArrayBuffer = isArrayBuffer2;
lodash.isArrayLike = isArrayLike2;
lodash.isArrayLikeObject = isArrayLikeObject;
lodash.isBoolean = isBoolean2;
lodash.isBuffer = isBuffer2;
lodash.isDate = isDate2;
lodash.isElement = isElement;
lodash.isEmpty = isEmpty;
lodash.isEqual = isEqual;
lodash.isEqualWith = isEqualWith;
lodash.isError = isError;
lodash.isFinite = isFinite2;
lodash.isFunction = isFunction2;
lodash.isInteger = isInteger;
lodash.isLength = isLength;
lodash.isMap = isMap;
lodash.isMatch = isMatch;
lodash.isMatchWith = isMatchWith;
lodash.isNaN = isNaN2;
lodash.isNative = isNative;
lodash.isNil = isNil;
lodash.isNull = isNull;
lodash.isNumber = isNumber3;
lodash.isObject = isObject2;
lodash.isObjectLike = isObjectLike;
lodash.isPlainObject = isPlainObject2;
lodash.isRegExp = isRegExp2;
lodash.isSafeInteger = isSafeInteger;
lodash.isSet = isSet;
lodash.isString = isString2;
lodash.isSymbol = isSymbol;
lodash.isTypedArray = isTypedArray2;
lodash.isUndefined = isUndefined2;
lodash.isWeakMap = isWeakMap;
lodash.isWeakSet = isWeakSet;
lodash.join = join;
lodash.kebabCase = kebabCase;
lodash.last = last2;
lodash.lastIndexOf = lastIndexOf;
lodash.lowerCase = lowerCase;
lodash.lowerFirst = lowerFirst;
lodash.lt = lt;
lodash.lte = lte;
lodash.max = max;
lodash.maxBy = maxBy;
lodash.mean = mean;
lodash.meanBy = meanBy;
lodash.min = min;
lodash.minBy = minBy;
lodash.stubArray = stubArray;
lodash.stubFalse = stubFalse;
lodash.stubObject = stubObject;
lodash.stubString = stubString;
lodash.stubTrue = stubTrue;
lodash.multiply = multiply;
lodash.nth = nth;
lodash.noConflict = noConflict;
lodash.noop = noop2;
lodash.now = now;
lodash.pad = pad;
lodash.padEnd = padEnd;
lodash.padStart = padStart;
lodash.parseInt = parseInt2;
lodash.random = random;
lodash.reduce = reduce;
lodash.reduceRight = reduceRight;
lodash.repeat = repeat;
lodash.replace = replace;
lodash.result = result;
lodash.round = round;
lodash.runInContext = runInContext2;
lodash.sample = sample;
lodash.size = size;
lodash.snakeCase = snakeCase;
lodash.some = some2;
lodash.sortedIndex = sortedIndex;
lodash.sortedIndexBy = sortedIndexBy;
lodash.sortedIndexOf = sortedIndexOf;
lodash.sortedLastIndex = sortedLastIndex;
lodash.sortedLastIndexBy = sortedLastIndexBy;
lodash.sortedLastIndexOf = sortedLastIndexOf;
lodash.startCase = startCase;
lodash.startsWith = startsWith;
lodash.subtract = subtract;
lodash.sum = sum;
lodash.sumBy = sumBy;
lodash.template = template;
lodash.times = times;
lodash.toFinite = toFinite;
lodash.toInteger = toInteger;
lodash.toLength = toLength;
lodash.toLower = toLower;
lodash.toNumber = toNumber;
lodash.toSafeInteger = toSafeInteger;
lodash.toString = toString4;
lodash.toUpper = toUpper;
lodash.trim = trim2;
lodash.trimEnd = trimEnd;
lodash.trimStart = trimStart;
lodash.truncate = truncate;
lodash.unescape = unescape2;
lodash.uniqueId = uniqueId;
lodash.upperCase = upperCase;
lodash.upperFirst = upperFirst;
lodash.each = forEach2;
lodash.eachRight = forEachRight;
lodash.first = head;
mixin(lodash, (function() {
var source = {};
baseForOwn(lodash, function(func, methodName) {
if (!hasOwnProperty2.call(lodash.prototype, methodName)) {
source[methodName] = func;
}
});
return source;
})(), { "chain": false });
lodash.VERSION = VERSION3;
arrayEach(["bind", "bindKey", "curry", "curryRight", "partial", "partialRight"], function(methodName) {
lodash[methodName].placeholder = lodash;
});
arrayEach(["drop", "take"], function(methodName, index2) {
LazyWrapper.prototype[methodName] = function(n) {
n = n === undefined2 ? 1 : nativeMax(toInteger(n), 0);
var result2 = this.__filtered__ && !index2 ? new LazyWrapper(this) : this.clone();
if (result2.__filtered__) {
result2.__takeCount__ = nativeMin(n, result2.__takeCount__);
} else {
result2.__views__.push({
"size": nativeMin(n, MAX_ARRAY_LENGTH),
"type": methodName + (result2.__dir__ < 0 ? "Right" : "")
});
}
return result2;
};
LazyWrapper.prototype[methodName + "Right"] = function(n) {
return this.reverse()[methodName](n).reverse();
};
});
arrayEach(["filter", "map", "takeWhile"], function(methodName, index2) {
var type = index2 + 1, isFilter2 = type == LAZY_FILTER_FLAG || type == LAZY_WHILE_FLAG;
LazyWrapper.prototype[methodName] = function(iteratee2) {
var result2 = this.clone();
result2.__iteratees__.push({
"iteratee": getIteratee(iteratee2, 3),
"type": type
});
result2.__filtered__ = result2.__filtered__ || isFilter2;
return result2;
};
});
arrayEach(["head", "last"], function(methodName, index2) {
var takeName = "take" + (index2 ? "Right" : "");
LazyWrapper.prototype[methodName] = function() {
return this[takeName](1).value()[0];
};
});
arrayEach(["initial", "tail"], function(methodName, index2) {
var dropName = "drop" + (index2 ? "" : "Right");
LazyWrapper.prototype[methodName] = function() {
return this.__filtered__ ? new LazyWrapper(this) : this[dropName](1);
};
});
LazyWrapper.prototype.compact = function() {
return this.filter(identity);
};
LazyWrapper.prototype.find = function(predicate) {
return this.filter(predicate).head();
};
LazyWrapper.prototype.findLast = function(predicate) {
return this.reverse().find(predicate);
};
LazyWrapper.prototype.invokeMap = baseRest(function(path, args) {
if (typeof path == "function") {
return new LazyWrapper(this);
}
return this.map(function(value) {
return baseInvoke(value, path, args);
});
});
LazyWrapper.prototype.reject = function(predicate) {
return this.filter(negate(getIteratee(predicate)));
};
LazyWrapper.prototype.slice = function(start, end2) {
start = toInteger(start);
var result2 = this;
if (result2.__filtered__ && (start > 0 || end2 < 0)) {
return new LazyWrapper(result2);
}
if (start < 0) {
result2 = result2.takeRight(-start);
} else if (start) {
result2 = result2.drop(start);
}
if (end2 !== undefined2) {
end2 = toInteger(end2);
result2 = end2 < 0 ? result2.dropRight(-end2) : result2.take(end2 - start);
}
return result2;
};
LazyWrapper.prototype.takeRightWhile = function(predicate) {
return this.reverse().takeWhile(predicate).reverse();
};
LazyWrapper.prototype.toArray = function() {
return this.take(MAX_ARRAY_LENGTH);
};
baseForOwn(LazyWrapper.prototype, function(func, methodName) {
var checkIteratee = /^(?:filter|find|map|reject)|While$/.test(methodName), isTaker = /^(?:head|last)$/.test(methodName), lodashFunc = lodash[isTaker ? "take" + (methodName == "last" ? "Right" : "") : methodName], retUnwrapped = isTaker || /^find/.test(methodName);
if (!lodashFunc) {
return;
}
lodash.prototype[methodName] = function() {
var value = this.__wrapped__, args = isTaker ? [1] : arguments, isLazy = value instanceof LazyWrapper, iteratee2 = args[0], useLazy = isLazy || isArray2(value);
var interceptor = function(value2) {
var result3 = lodashFunc.apply(lodash, arrayPush([value2], args));
return isTaker && chainAll ? result3[0] : result3;
};
if (useLazy && checkIteratee && typeof iteratee2 == "function" && iteratee2.length != 1) {
isLazy = useLazy = false;
}
var chainAll = this.__chain__, isHybrid = !!this.__actions__.length, isUnwrapped = retUnwrapped && !chainAll, onlyLazy = isLazy && !isHybrid;
if (!retUnwrapped && useLazy) {
value = onlyLazy ? value : new LazyWrapper(this);
var result2 = func.apply(value, args);
result2.__actions__.push({ "func": thru, "args": [interceptor], "thisArg": undefined2 });
return new LodashWrapper(result2, chainAll);
}
if (isUnwrapped && onlyLazy) {
return func.apply(this, args);
}
result2 = this.thru(interceptor);
return isUnwrapped ? isTaker ? result2.value()[0] : result2.value() : result2;
};
});
arrayEach(["pop", "push", "shift", "sort", "splice", "unshift"], function(methodName) {
var func = arrayProto[methodName], chainName = /^(?:push|sort|unshift)$/.test(methodName) ? "tap" : "thru", retUnwrapped = /^(?:pop|shift)$/.test(methodName);
lodash.prototype[methodName] = function() {
var args = arguments;
if (retUnwrapped && !this.__chain__) {
var value = this.value();
return func.apply(isArray2(value) ? value : [], args);
}
return this[chainName](function(value2) {
return func.apply(isArray2(value2) ? value2 : [], args);
});
};
});
baseForOwn(LazyWrapper.prototype, function(func, methodName) {
var lodashFunc = lodash[methodName];
if (lodashFunc) {
var key = lodashFunc.name + "";
if (!hasOwnProperty2.call(realNames, key)) {
realNames[key] = [];
}
realNames[key].push({ "name": methodName, "func": lodashFunc });
}
});
realNames[createHybrid(undefined2, WRAP_BIND_KEY_FLAG).name] = [{
"name": "wrapper",
"func": undefined2
}];
LazyWrapper.prototype.clone = lazyClone;
LazyWrapper.prototype.reverse = lazyReverse;
LazyWrapper.prototype.value = lazyValue;
lodash.prototype.at = wrapperAt;
lodash.prototype.chain = wrapperChain;
lodash.prototype.commit = wrapperCommit;
lodash.prototype.next = wrapperNext;
lodash.prototype.plant = wrapperPlant;
lodash.prototype.reverse = wrapperReverse;
lodash.prototype.toJSON = lodash.prototype.valueOf = lodash.prototype.value = wrapperValue;
lodash.prototype.first = lodash.prototype.head;
if (symIterator) {
lodash.prototype[symIterator] = wrapperToIterator;
}
return lodash;
};
var _2 = runInContext();
if (typeof define == "function" && typeof define.amd == "object" && define.amd) {
root2._ = _2;
define(function() {
return _2;
});
} else if (freeModule) {
(freeModule.exports = _2)._ = _2;
freeExports._ = _2;
} else {
root2._ = _2;
}
}).call(exports2);
}
});
var require_object_assign = __commonJS2({
"node_modules/object-assign/index.js"(exports2, module2) {
"use strict";
var getOwnPropertySymbols = Object.getOwnPropertySymbols;
var hasOwnProperty2 = Object.prototype.hasOwnProperty;
var propIsEnumerable = Object.prototype.propertyIsEnumerable;
function toObject(val2) {
if (val2 === null || val2 === void 0) {
throw new TypeError("Object.assign cannot be called with null or undefined");
}
return Object(val2);
}
function shouldUseNative() {
try {
if (!Object.assign) {
return false;
}
var test1 = new String("abc");
test1[5] = "de";
if (Object.getOwnPropertyNames(test1)[0] === "5") {
return false;
}
var test2 = {};
for (var i = 0; i < 10; i++) {
test2["_" + String.fromCharCode(i)] = i;
}
var order2 = Object.getOwnPropertyNames(test2).map(function(n) {
return test2[n];
});
if (order2.join("") !== "0123456789") {
return false;
}
var test3 = {};
"abcdefghijklmnopqrst".split("").forEach(function(letter) {
test3[letter] = letter;
});
if (Object.keys(Object.assign({}, test3)).join("") !== "abcdefghijklmnopqrst") {
return false;
}
return true;
} catch (err2) {
return false;
}
}
module2.exports = shouldUseNative() ? Object.assign : function(target, source) {
var from;
var to = toObject(target);
var symbols;
for (var s = 1; s < arguments.length; s++) {
from = Object(arguments[s]);
for (var key in from) {
if (hasOwnProperty2.call(from, key)) {
to[key] = from[key];
}
}
if (getOwnPropertySymbols) {
symbols = getOwnPropertySymbols(from);
for (var i = 0; i < symbols.length; i++) {
if (propIsEnumerable.call(from, symbols[i])) {
to[symbols[i]] = from[symbols[i]];
}
}
}
}
return to;
};
}
});
var require_lib4 = __commonJS2({
"node_modules/cors/lib/index.js"(exports2, module2) {
(function() {
"use strict";
var assign = require_object_assign();
var vary = require_vary();
var defaults2 = {
origin: "*",
methods: "GET,HEAD,PUT,PATCH,POST,DELETE",
preflightContinue: false,
optionsSuccessStatus: 204
};
function isString2(s) {
return typeof s === "string" || s instanceof String;
}
function isOriginAllowed(origin2, allowedOrigin) {
if (Array.isArray(allowedOrigin)) {
for (var i = 0; i < allowedOrigin.length; ++i) {
if (isOriginAllowed(origin2, allowedOrigin[i])) {
return true;
}
}
return false;
} else if (isString2(allowedOrigin)) {
return origin2 === allowedOrigin;
} else if (allowedOrigin instanceof RegExp) {
return allowedOrigin.test(origin2);
} else {
return !!allowedOrigin;
}
}
function configureOrigin(options, req) {
var requestOrigin = req.headers.origin, headers = [], isAllowed;
if (!options.origin || options.origin === "*") {
headers.push([{
key: "Access-Control-Allow-Origin",
value: "*"
}]);
} else if (isString2(options.origin)) {
headers.push([{
key: "Access-Control-Allow-Origin",
value: options.origin
}]);
headers.push([{
key: "Vary",
value: "Origin"
}]);
} else {
isAllowed = isOriginAllowed(requestOrigin, options.origin);
headers.push([{
key: "Access-Control-Allow-Origin",
value: isAllowed ? requestOrigin : false
}]);
headers.push([{
key: "Vary",
value: "Origin"
}]);
}
return headers;
}
function configureMethods(options) {
var methods = options.methods;
if (methods.join) {
methods = options.methods.join(",");
}
return {
key: "Access-Control-Allow-Methods",
value: methods
};
}
function configureCredentials(options) {
if (options.credentials === true) {
return {
key: "Access-Control-Allow-Credentials",
value: "true"
};
}
return null;
}
function configureAllowedHeaders(options, req) {
var allowedHeaders = options.allowedHeaders || options.headers;
var headers = [];
if (!allowedHeaders) {
allowedHeaders = req.headers["access-control-request-headers"];
headers.push([{
key: "Vary",
value: "Access-Control-Request-Headers"
}]);
} else if (allowedHeaders.join) {
allowedHeaders = allowedHeaders.join(",");
}
if (allowedHeaders && allowedHeaders.length) {
headers.push([{
key: "Access-Control-Allow-Headers",
value: allowedHeaders
}]);
}
return headers;
}
function configureExposedHeaders(options) {
var headers = options.exposedHeaders;
if (!headers) {
return null;
} else if (headers.join) {
headers = headers.join(",");
}
if (headers && headers.length) {
return {
key: "Access-Control-Expose-Headers",
value: headers
};
}
return null;
}
function configureMaxAge(options) {
var maxAge = (typeof options.maxAge === "number" || options.maxAge) && options.maxAge.toString();
if (maxAge && maxAge.length) {
return {
key: "Access-Control-Max-Age",
value: maxAge
};
}
return null;
}
function applyHeaders(headers, res) {
for (var i = 0, n = headers.length; i < n; i++) {
var header = headers[i];
if (header) {
if (Array.isArray(header)) {
applyHeaders(header, res);
} else if (header.key === "Vary" && header.value) {
vary(res, header.value);
} else if (header.value) {
res.setHeader(header.key, header.value);
}
}
}
}
function cors2(options, req, res, next2) {
var headers = [], method = req.method && req.method.toUpperCase && req.method.toUpperCase();
if (method === "OPTIONS") {
headers.push(configureOrigin(options, req));
headers.push(configureCredentials(options, req));
headers.push(configureMethods(options, req));
headers.push(configureAllowedHeaders(options, req));
headers.push(configureMaxAge(options, req));
headers.push(configureExposedHeaders(options, req));
applyHeaders(headers, res);
if (options.preflightContinue) {
next2();
} else {
res.statusCode = options.optionsSuccessStatus;
res.setHeader("Content-Length", "0");
res.end();
}
} else {
headers.push(configureOrigin(options, req));
headers.push(configureCredentials(options, req));
headers.push(configureExposedHeaders(options, req));
applyHeaders(headers, res);
next2();
}
}
function middlewareWrapper(o) {
var optionsCallback = null;
if (typeof o === "function") {
optionsCallback = o;
} else {
optionsCallback = function(req, cb) {
cb(null, o);
};
}
return function corsMiddleware(req, res, next2) {
optionsCallback(req, function(err2, options) {
if (err2) {
next2(err2);
} else {
var corsOptions = assign({}, defaults2, options);
var originCallback = null;
if (corsOptions.origin && typeof corsOptions.origin === "function") {
originCallback = corsOptions.origin;
} else if (corsOptions.origin) {
originCallback = function(origin2, cb) {
cb(null, corsOptions.origin);
};
}
if (originCallback) {
originCallback(req.headers.origin, function(err22, origin2) {
if (err22 || !origin2) {
next2(err22);
} else {
corsOptions.origin = origin2;
cors2(corsOptions, req, res, next2);
}
});
} else {
next2();
}
}
});
};
}
module2.exports = middlewareWrapper;
})();
}
});
var util4;
(function(util22) {
util22.assertEqual = (val2) => val2;
function assertIs(_arg) {
}
util22.assertIs = assertIs;
function assertNever(_x) {
throw new Error();
}
util22.assertNever = assertNever;
util22.arrayToEnum = (items) => {
const obj = {};
for (const item of items) {
obj[item] = item;
}
return obj;
};
util22.getValidEnumValues = (obj) => {
const validKeys = util22.objectKeys(obj).filter((k) => typeof obj[obj[k]] !== "number");
const filtered = {};
for (const k of validKeys) {
filtered[k] = obj[k];
}
return util22.objectValues(filtered);
};
util22.objectValues = (obj) => {
return util22.objectKeys(obj).map(function(e) {
return obj[e];
});
};
util22.objectKeys = typeof Object.keys === "function" ? (obj) => Object.keys(obj) : (object) => {
const keys = [];
for (const key in object) {
if (Object.prototype.hasOwnProperty.call(object, key)) {
keys.push(key);
}
}
return keys;
};
util22.find = (arr, checker) => {
for (const item of arr) {
if (checker(item))
return item;
}
return void 0;
};
util22.isInteger = typeof Number.isInteger === "function" ? (val2) => Number.isInteger(val2) : (val2) => typeof val2 === "number" && isFinite(val2) && Math.floor(val2) === val2;
function joinValues(array, separator = " | ") {
return array.map((val2) => typeof val2 === "string" ? `'${val2}'` : val2).join(separator);
}
util22.joinValues = joinValues;
util22.jsonStringifyReplacer = (_2, value) => {
if (typeof value === "bigint") {
return value.toString();
}
return value;
};
})(util4 || (util4 = {}));
var objectUtil2;
(function(objectUtil22) {
objectUtil22.mergeShapes = (first2, second) => {
return {
...first2,
...second
// second overwrites first
};
};
})(objectUtil2 || (objectUtil2 = {}));
var ZodParsedType2 = util4.arrayToEnum([
"string",
"nan",
"number",
"integer",
"float",
"boolean",
"date",
"bigint",
"symbol",
"function",
"undefined",
"null",
"array",
"object",
"unknown",
"promise",
"void",
"never",
"map",
"set"
]);
var getParsedType2 = (data2) => {
const t = typeof data2;
switch (t) {
case "undefined":
return ZodParsedType2.undefined;
case "string":
return ZodParsedType2.string;
case "number":
return isNaN(data2) ? ZodParsedType2.nan : ZodParsedType2.number;
case "boolean":
return ZodParsedType2.boolean;
case "function":
return ZodParsedType2.function;
case "bigint":
return ZodParsedType2.bigint;
case "symbol":
return ZodParsedType2.symbol;
case "object":
if (Array.isArray(data2)) {
return ZodParsedType2.array;
}
if (data2 === null) {
return ZodParsedType2.null;
}
if (data2.then && typeof data2.then === "function" && data2.catch && typeof data2.catch === "function") {
return ZodParsedType2.promise;
}
if (typeof Map !== "undefined" && data2 instanceof Map) {
return ZodParsedType2.map;
}
if (typeof Set !== "undefined" && data2 instanceof Set) {
return ZodParsedType2.set;
}
if (typeof Date !== "undefined" && data2 instanceof Date) {
return ZodParsedType2.date;
}
return ZodParsedType2.object;
default:
return ZodParsedType2.unknown;
}
};
var ZodIssueCode2 = util4.arrayToEnum([
"invalid_type",
"invalid_literal",
"custom",
"invalid_union",
"invalid_union_discriminator",
"invalid_enum_value",
"unrecognized_keys",
"invalid_arguments",
"invalid_return_type",
"invalid_date",
"invalid_string",
"too_small",
"too_big",
"invalid_intersection_types",
"not_multiple_of",
"not_finite"
]);
var quotelessJson2 = (obj) => {
const json = JSON.stringify(obj, null, 2);
return json.replace(/"([^"]+)":/g, "$1:");
};
var ZodError2 = class _ZodError extends Error {
get errors() {
return this.issues;
}
constructor(issues) {
super();
this.issues = [];
this.addIssue = (sub) => {
this.issues = [...this.issues, sub];
};
this.addIssues = (subs = []) => {
this.issues = [...this.issues, ...subs];
};
const actualProto = new.target.prototype;
if (Object.setPrototypeOf) {
Object.setPrototypeOf(this, actualProto);
} else {
this.__proto__ = actualProto;
}
this.name = "ZodError";
this.issues = issues;
}
format(_mapper) {
const mapper = _mapper || function(issue) {
return issue.message;
};
const fieldErrors = { _errors: [] };
const processError = (error) => {
for (const issue of error.issues) {
if (issue.code === "invalid_union") {
issue.unionErrors.map(processError);
} else if (issue.code === "invalid_return_type") {
processError(issue.returnTypeError);
} else if (issue.code === "invalid_arguments") {
processError(issue.argumentsError);
} else if (issue.path.length === 0) {
fieldErrors._errors.push(mapper(issue));
} else {
let curr = fieldErrors;
let i = 0;
while (i < issue.path.length) {
const el = issue.path[i];
const terminal = i === issue.path.length - 1;
if (!terminal) {
curr[el] = curr[el] || { _errors: [] };
} else {
curr[el] = curr[el] || { _errors: [] };
curr[el]._errors.push(mapper(issue));
}
curr = curr[el];
i++;
}
}
}
};
processError(this);
return fieldErrors;
}
static assert(value) {
if (!(value instanceof _ZodError)) {
throw new Error(`Not a ZodError: ${value}`);
}
}
toString() {
return this.message;
}
get message() {
return JSON.stringify(this.issues, util4.jsonStringifyReplacer, 2);
}
get isEmpty() {
return this.issues.length === 0;
}
flatten(mapper = (issue) => issue.message) {
const fieldErrors = {};
const formErrors = [];
for (const sub of this.issues) {
if (sub.path.length > 0) {
fieldErrors[sub.path[0]] = fieldErrors[sub.path[0]] || [];
fieldErrors[sub.path[0]].push(mapper(sub));
} else {
formErrors.push(mapper(sub));
}
}
return { formErrors, fieldErrors };
}
get formErrors() {
return this.flatten();
}
};
ZodError2.create = (issues) => {
const error = new ZodError2(issues);
return error;
};
var errorMap2 = (issue, _ctx) => {
let message;
switch (issue.code) {
case ZodIssueCode2.invalid_type:
if (issue.received === ZodParsedType2.undefined) {
message = "Required";
} else {
message = `Expected ${issue.expected}, received ${issue.received}`;
}
break;
case ZodIssueCode2.invalid_literal:
message = `Invalid literal value, expected ${JSON.stringify(issue.expected, util4.jsonStringifyReplacer)}`;
break;
case ZodIssueCode2.unrecognized_keys:
message = `Unrecognized key(s) in object: ${util4.joinValues(issue.keys, ", ")}`;
break;
case ZodIssueCode2.invalid_union:
message = `Invalid input`;
break;
case ZodIssueCode2.invalid_union_discriminator:
message = `Invalid discriminator value. Expected ${util4.joinValues(issue.options)}`;
break;
case ZodIssueCode2.invalid_enum_value:
message = `Invalid enum value. Expected ${util4.joinValues(issue.options)}, received '${issue.received}'`;
break;
case ZodIssueCode2.invalid_arguments:
message = `Invalid function arguments`;
break;
case ZodIssueCode2.invalid_return_type:
message = `Invalid function return type`;
break;
case ZodIssueCode2.invalid_date:
message = `Invalid date`;
break;
case ZodIssueCode2.invalid_string:
if (typeof issue.validation === "object") {
if ("includes" in issue.validation) {
message = `Invalid input: must include "${issue.validation.includes}"`;
if (typeof issue.validation.position === "number") {
message = `${message} at one or more positions greater than or equal to ${issue.validation.position}`;
}
} else if ("startsWith" in issue.validation) {
message = `Invalid input: must start with "${issue.validation.startsWith}"`;
} else if ("endsWith" in issue.validation) {
message = `Invalid input: must end with "${issue.validation.endsWith}"`;
} else {
util4.assertNever(issue.validation);
}
} else if (issue.validation !== "regex") {
message = `Invalid ${issue.validation}`;
} else {
message = "Invalid";
}
break;
case ZodIssueCode2.too_small:
if (issue.type === "array")
message = `Array must contain ${issue.exact ? "exactly" : issue.inclusive ? `at least` : `more than`} ${issue.minimum} element(s)`;
else if (issue.type === "string")
message = `String must contain ${issue.exact ? "exactly" : issue.inclusive ? `at least` : `over`} ${issue.minimum} character(s)`;
else if (issue.type === "number")
message = `Number must be ${issue.exact ? `exactly equal to ` : issue.inclusive ? `greater than or equal to ` : `greater than `}${issue.minimum}`;
else if (issue.type === "date")
message = `Date must be ${issue.exact ? `exactly equal to ` : issue.inclusive ? `greater than or equal to ` : `greater than `}${new Date(Number(issue.minimum))}`;
else
message = "Invalid input";
break;
case ZodIssueCode2.too_big:
if (issue.type === "array")
message = `Array must contain ${issue.exact ? `exactly` : issue.inclusive ? `at most` : `less than`} ${issue.maximum} element(s)`;
else if (issue.type === "string")
message = `String must contain ${issue.exact ? `exactly` : issue.inclusive ? `at most` : `under`} ${issue.maximum} character(s)`;
else if (issue.type === "number")
message = `Number must be ${issue.exact ? `exactly` : issue.inclusive ? `less than or equal to` : `less than`} ${issue.maximum}`;
else if (issue.type === "bigint")
message = `BigInt must be ${issue.exact ? `exactly` : issue.inclusive ? `less than or equal to` : `less than`} ${issue.maximum}`;
else if (issue.type === "date")
message = `Date must be ${issue.exact ? `exactly` : issue.inclusive ? `smaller than or equal to` : `smaller than`} ${new Date(Number(issue.maximum))}`;
else
message = "Invalid input";
break;
case ZodIssueCode2.custom:
message = `Invalid input`;
break;
case ZodIssueCode2.invalid_intersection_types:
message = `Intersection results could not be merged`;
break;
case ZodIssueCode2.not_multiple_of:
message = `Number must be a multiple of ${issue.multipleOf}`;
break;
case ZodIssueCode2.not_finite:
message = "Number must be finite";
break;
default:
message = _ctx.defaultError;
util4.assertNever(issue);
}
return { message };
};
var overrideErrorMap2 = errorMap2;
function setErrorMap2(map2) {
overrideErrorMap2 = map2;
}
function getErrorMap2() {
return overrideErrorMap2;
}
var makeIssue2 = (params) => {
const { data: data2, path, errorMaps, issueData } = params;
const fullPath = [...path, ...issueData.path || []];
const fullIssue = {
...issueData,
path: fullPath
};
if (issueData.message !== void 0) {
return {
...issueData,
path: fullPath,
message: issueData.message
};
}
let errorMessage = "";
const maps = errorMaps.filter((m) => !!m).slice().reverse();
for (const map2 of maps) {
errorMessage = map2(fullIssue, { data: data2, defaultError: errorMessage }).message;
}
return {
...issueData,
path: fullPath,
message: errorMessage
};
};
var EMPTY_PATH2 = [];
function addIssueToContext2(ctx, issueData) {
const overrideMap = getErrorMap2();
const issue = makeIssue2({
issueData,
data: ctx.data,
path: ctx.path,
errorMaps: [
ctx.common.contextualErrorMap,
// contextual error map is first priority
ctx.schemaErrorMap,
// then schema-bound map if available
overrideMap,
// then global override map
overrideMap === errorMap2 ? void 0 : errorMap2
// then global default map
].filter((x) => !!x)
});
ctx.common.issues.push(issue);
}
var ParseStatus2 = class _ParseStatus {
constructor() {
this.value = "valid";
}
dirty() {
if (this.value === "valid")
this.value = "dirty";
}
abort() {
if (this.value !== "aborted")
this.value = "aborted";
}
static mergeArray(status, results) {
const arrayValue = [];
for (const s of results) {
if (s.status === "aborted")
return INVALID2;
if (s.status === "dirty")
status.dirty();
arrayValue.push(s.value);
}
return { status: status.value, value: arrayValue };
}
static async mergeObjectAsync(status, pairs) {
const syncPairs = [];
for (const pair of pairs) {
const key = await pair.key;
const value = await pair.value;
syncPairs.push({
key,
value
});
}
return _ParseStatus.mergeObjectSync(status, syncPairs);
}
static mergeObjectSync(status, pairs) {
const finalObject = {};
for (const pair of pairs) {
const { key, value } = pair;
if (key.status === "aborted")
return INVALID2;
if (value.status === "aborted")
return INVALID2;
if (key.status === "dirty")
status.dirty();
if (value.status === "dirty")
status.dirty();
if (key.value !== "__proto__" && (typeof value.value !== "undefined" || pair.alwaysSet)) {
finalObject[key.value] = value.value;
}
}
return { status: status.value, value: finalObject };
}
};
var INVALID2 = Object.freeze({
status: "aborted"
});
var DIRTY2 = (value) => ({ status: "dirty", value });
var OK2 = (value) => ({ status: "valid", value });
var isAborted2 = (x) => x.status === "aborted";
var isDirty2 = (x) => x.status === "dirty";
var isValid2 = (x) => x.status === "valid";
var isAsync2 = (x) => typeof Promise !== "undefined" && x instanceof Promise;
function __classPrivateFieldGet2(receiver, state, kind, f) {
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
}
function __classPrivateFieldSet2(receiver, state, value, kind, f) {
if (kind === "m") throw new TypeError("Private method is not writable");
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
return kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value), value;
}
var errorUtil2;
(function(errorUtil22) {
errorUtil22.errToObj = (message) => typeof message === "string" ? { message } : message || {};
errorUtil22.toString = (message) => typeof message === "string" ? message : message === null || message === void 0 ? void 0 : message.message;
})(errorUtil2 || (errorUtil2 = {}));
var _ZodEnum_cache2;
var _ZodNativeEnum_cache2;
var ParseInputLazyPath2 = class {
constructor(parent2, value, path, key) {
this._cachedPath = [];
this.parent = parent2;
this.data = value;
this._path = path;
this._key = key;
}
get path() {
if (!this._cachedPath.length) {
if (this._key instanceof Array) {
this._cachedPath.push(...this._path, ...this._key);
} else {
this._cachedPath.push(...this._path, this._key);
}
}
return this._cachedPath;
}
};
var handleResult2 = (ctx, result) => {
if (isValid2(result)) {
return { success: true, data: result.value };
} else {
if (!ctx.common.issues.length) {
throw new Error("Validation failed but no issues detected.");
}
return {
success: false,
get error() {
if (this._error)
return this._error;
const error = new ZodError2(ctx.common.issues);
this._error = error;
return this._error;
}
};
}
};
function processCreateParams2(params) {
if (!params)
return {};
const { errorMap: errorMap22, invalid_type_error, required_error, description } = params;
if (errorMap22 && (invalid_type_error || required_error)) {
throw new Error(`Can't use "invalid_type_error" or "required_error" in conjunction with custom error map.`);
}
if (errorMap22)
return { errorMap: errorMap22, description };
const customMap = (iss, ctx) => {
var _a2, _b;
const { message } = params;
if (iss.code === "invalid_enum_value") {
return { message: message !== null && message !== void 0 ? message : ctx.defaultError };
}
if (typeof ctx.data === "undefined") {
return { message: (_a2 = message !== null && message !== void 0 ? message : required_error) !== null && _a2 !== void 0 ? _a2 : ctx.defaultError };
}
if (iss.code !== "invalid_type")
return { message: ctx.defaultError };
return { message: (_b = message !== null && message !== void 0 ? message : invalid_type_error) !== null && _b !== void 0 ? _b : ctx.defaultError };
};
return { errorMap: customMap, description };
}
var ZodType2 = class {
get description() {
return this._def.description;
}
_getType(input) {
return getParsedType2(input.data);
}
_getOrReturnCtx(input, ctx) {
return ctx || {
common: input.parent.common,
data: input.data,
parsedType: getParsedType2(input.data),
schemaErrorMap: this._def.errorMap,
path: input.path,
parent: input.parent
};
}
_processInputParams(input) {
return {
status: new ParseStatus2(),
ctx: {
common: input.parent.common,
data: input.data,
parsedType: getParsedType2(input.data),
schemaErrorMap: this._def.errorMap,
path: input.path,
parent: input.parent
}
};
}
_parseSync(input) {
const result = this._parse(input);
if (isAsync2(result)) {
throw new Error("Synchronous parse encountered promise.");
}
return result;
}
_parseAsync(input) {
const result = this._parse(input);
return Promise.resolve(result);
}
parse(data2, params) {
const result = this.safeParse(data2, params);
if (result.success)
return result.data;
throw result.error;
}
safeParse(data2, params) {
var _a2;
const ctx = {
common: {
issues: [],
async: (_a2 = params === null || params === void 0 ? void 0 : params.async) !== null && _a2 !== void 0 ? _a2 : false,
contextualErrorMap: params === null || params === void 0 ? void 0 : params.errorMap
},
path: (params === null || params === void 0 ? void 0 : params.path) || [],
schemaErrorMap: this._def.errorMap,
parent: null,
data: data2,
parsedType: getParsedType2(data2)
};
const result = this._parseSync({ data: data2, path: ctx.path, parent: ctx });
return handleResult2(ctx, result);
}
"~validate"(data2) {
var _a2, _b;
const ctx = {
common: {
issues: [],
async: !!this["~standard"].async
},
path: [],
schemaErrorMap: this._def.errorMap,
parent: null,
data: data2,
parsedType: getParsedType2(data2)
};
if (!this["~standard"].async) {
try {
const result = this._parseSync({ data: data2, path: [], parent: ctx });
return isValid2(result) ? {
value: result.value
} : {
issues: ctx.common.issues
};
} catch (err2) {
if ((_b = (_a2 = err2 === null || err2 === void 0 ? void 0 : err2.message) === null || _a2 === void 0 ? void 0 : _a2.toLowerCase()) === null || _b === void 0 ? void 0 : _b.includes("encountered")) {
this["~standard"].async = true;
}
ctx.common = {
issues: [],
async: true
};
}
}
return this._parseAsync({ data: data2, path: [], parent: ctx }).then((result) => isValid2(result) ? {
value: result.value
} : {
issues: ctx.common.issues
});
}
async parseAsync(data2, params) {
const result = await this.safeParseAsync(data2, params);
if (result.success)
return result.data;
throw result.error;
}
async safeParseAsync(data2, params) {
const ctx = {
common: {
issues: [],
contextualErrorMap: params === null || params === void 0 ? void 0 : params.errorMap,
async: true
},
path: (params === null || params === void 0 ? void 0 : params.path) || [],
schemaErrorMap: this._def.errorMap,
parent: null,
data: data2,
parsedType: getParsedType2(data2)
};
const maybeAsyncResult = this._parse({ data: data2, path: ctx.path, parent: ctx });
const result = await (isAsync2(maybeAsyncResult) ? maybeAsyncResult : Promise.resolve(maybeAsyncResult));
return handleResult2(ctx, result);
}
refine(check, message) {
const getIssueProperties = (val2) => {
if (typeof message === "string" || typeof message === "undefined") {
return { message };
} else if (typeof message === "function") {
return message(val2);
} else {
return message;
}
};
return this._refinement((val2, ctx) => {
const result = check(val2);
const setError = () => ctx.addIssue({
code: ZodIssueCode2.custom,
...getIssueProperties(val2)
});
if (typeof Promise !== "undefined" && result instanceof Promise) {
return result.then((data2) => {
if (!data2) {
setError();
return false;
} else {
return true;
}
});
}
if (!result) {
setError();
return false;
} else {
return true;
}
});
}
refinement(check, refinementData) {
return this._refinement((val2, ctx) => {
if (!check(val2)) {
ctx.addIssue(typeof refinementData === "function" ? refinementData(val2, ctx) : refinementData);
return false;
} else {
return true;
}
});
}
_refinement(refinement) {
return new ZodEffects2({
schema: this,
typeName: ZodFirstPartyTypeKind2.ZodEffects,
effect: { type: "refinement", refinement }
});
}
superRefine(refinement) {
return this._refinement(refinement);
}
constructor(def) {
this.spa = this.safeParseAsync;
this._def = def;
this.parse = this.parse.bind(this);
this.safeParse = this.safeParse.bind(this);
this.parseAsync = this.parseAsync.bind(this);
this.safeParseAsync = this.safeParseAsync.bind(this);
this.spa = this.spa.bind(this);
this.refine = this.refine.bind(this);
this.refinement = this.refinement.bind(this);
this.superRefine = this.superRefine.bind(this);
this.optional = this.optional.bind(this);
this.nullable = this.nullable.bind(this);
this.nullish = this.nullish.bind(this);
this.array = this.array.bind(this);
this.promise = this.promise.bind(this);
this.or = this.or.bind(this);
this.and = this.and.bind(this);
this.transform = this.transform.bind(this);
this.brand = this.brand.bind(this);
this.default = this.default.bind(this);
this.catch = this.catch.bind(this);
this.describe = this.describe.bind(this);
this.pipe = this.pipe.bind(this);
this.readonly = this.readonly.bind(this);
this.isNullable = this.isNullable.bind(this);
this.isOptional = this.isOptional.bind(this);
this["~standard"] = {
version: 1,
vendor: "zod",
validate: (data2) => this["~validate"](data2)
};
}
optional() {
return ZodOptional2.create(this, this._def);
}
nullable() {
return ZodNullable2.create(this, this._def);
}
nullish() {
return this.nullable().optional();
}
array() {
return ZodArray2.create(this);
}
promise() {
return ZodPromise2.create(this, this._def);
}
or(option) {
return ZodUnion2.create([this, option], this._def);
}
and(incoming) {
return ZodIntersection2.create(this, incoming, this._def);
}
transform(transform) {
return new ZodEffects2({
...processCreateParams2(this._def),
schema: this,
typeName: ZodFirstPartyTypeKind2.ZodEffects,
effect: { type: "transform", transform }
});
}
default(def) {
const defaultValueFunc = typeof def === "function" ? def : () => def;
return new ZodDefault2({
...processCreateParams2(this._def),
innerType: this,
defaultValue: defaultValueFunc,
typeName: ZodFirstPartyTypeKind2.ZodDefault
});
}
brand() {
return new ZodBranded2({
typeName: ZodFirstPartyTypeKind2.ZodBranded,
type: this,
...processCreateParams2(this._def)
});
}
catch(def) {
const catchValueFunc = typeof def === "function" ? def : () => def;
return new ZodCatch2({
...processCreateParams2(this._def),
innerType: this,
catchValue: catchValueFunc,
typeName: ZodFirstPartyTypeKind2.ZodCatch
});
}
describe(description) {
const This = this.constructor;
return new This({
...this._def,
description
});
}
pipe(target) {
return ZodPipeline2.create(this, target);
}
readonly() {
return ZodReadonly2.create(this);
}
isOptional() {
return this.safeParse(void 0).success;
}
isNullable() {
return this.safeParse(null).success;
}
};
var cuidRegex2 = /^c[^\s-]{8,}$/i;
var cuid2Regex2 = /^[0-9a-z]+$/;
var ulidRegex2 = /^[0-9A-HJKMNP-TV-Z]{26}$/i;
var uuidRegex2 = /^[0-9a-fA-F]{8}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{12}$/i;
var nanoidRegex2 = /^[a-z0-9_-]{21}$/i;
var jwtRegex2 = /^[A-Za-z0-9-_]+\.[A-Za-z0-9-_]+\.[A-Za-z0-9-_]*$/;
var durationRegex2 = /^[-+]?P(?!$)(?:(?:[-+]?\d+Y)|(?:[-+]?\d+[.,]\d+Y$))?(?:(?:[-+]?\d+M)|(?:[-+]?\d+[.,]\d+M$))?(?:(?:[-+]?\d+W)|(?:[-+]?\d+[.,]\d+W$))?(?:(?:[-+]?\d+D)|(?:[-+]?\d+[.,]\d+D$))?(?:T(?=[\d+-])(?:(?:[-+]?\d+H)|(?:[-+]?\d+[.,]\d+H$))?(?:(?:[-+]?\d+M)|(?:[-+]?\d+[.,]\d+M$))?(?:[-+]?\d+(?:[.,]\d+)?S)?)??$/;
var emailRegex2 = /^(?!\.)(?!.*\.\.)([A-Z0-9_'+\-\.]*)[A-Z0-9_+-]@([A-Z0-9][A-Z0-9\-]*\.)+[A-Z]{2,}$/i;
var _emojiRegex2 = `^(\\p{Extended_Pictographic}|\\p{Emoji_Component})+$`;
var emojiRegex2;
var ipv4Regex2 = /^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])$/;
var ipv4CidrRegex2 = /^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\/(3[0-2]|[12]?[0-9])$/;
var ipv6Regex2 = /^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))$/;
var ipv6CidrRegex2 = /^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))\/(12[0-8]|1[01][0-9]|[1-9]?[0-9])$/;
var base64Regex2 = /^([0-9a-zA-Z+/]{4})*(([0-9a-zA-Z+/]{2}==)|([0-9a-zA-Z+/]{3}=))?$/;
var base64urlRegex2 = /^([0-9a-zA-Z-_]{4})*(([0-9a-zA-Z-_]{2}(==)?)|([0-9a-zA-Z-_]{3}(=)?))?$/;
var dateRegexSource2 = `((\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-((0[13578]|1[02])-(0[1-9]|[12]\\d|3[01])|(0[469]|11)-(0[1-9]|[12]\\d|30)|(02)-(0[1-9]|1\\d|2[0-8])))`;
var dateRegex2 = new RegExp(`^${dateRegexSource2}$`);
function timeRegexSource2(args) {
let regex = `([01]\\d|2[0-3]):[0-5]\\d:[0-5]\\d`;
if (args.precision) {
regex = `${regex}\\.\\d{${args.precision}}`;
} else if (args.precision == null) {
regex = `${regex}(\\.\\d+)?`;
}
return regex;
}
function timeRegex2(args) {
return new RegExp(`^${timeRegexSource2(args)}$`);
}
function datetimeRegex2(args) {
let regex = `${dateRegexSource2}T${timeRegexSource2(args)}`;
const opts = [];
opts.push(args.local ? `Z?` : `Z`);
if (args.offset)
opts.push(`([+-]\\d{2}:?\\d{2})`);
regex = `${regex}(${opts.join("|")})`;
return new RegExp(`^${regex}$`);
}
function isValidIP2(ip, version) {
if ((version === "v4" || !version) && ipv4Regex2.test(ip)) {
return true;
}
if ((version === "v6" || !version) && ipv6Regex2.test(ip)) {
return true;
}
return false;
}
function isValidJWT2(jwt, alg) {
if (!jwtRegex2.test(jwt))
return false;
try {
const [header] = jwt.split(".");
const base64 = header.replace(/-/g, "+").replace(/_/g, "/").padEnd(header.length + (4 - header.length % 4) % 4, "=");
const decoded = JSON.parse(atob(base64));
if (typeof decoded !== "object" || decoded === null)
return false;
if (!decoded.typ || !decoded.alg)
return false;
if (alg && decoded.alg !== alg)
return false;
return true;
} catch (_a2) {
return false;
}
}
function isValidCidr2(ip, version) {
if ((version === "v4" || !version) && ipv4CidrRegex2.test(ip)) {
return true;
}
if ((version === "v6" || !version) && ipv6CidrRegex2.test(ip)) {
return true;
}
return false;
}
var ZodString2 = class _ZodString extends ZodType2 {
_parse(input) {
if (this._def.coerce) {
input.data = String(input.data);
}
const parsedType = this._getType(input);
if (parsedType !== ZodParsedType2.string) {
const ctx2 = this._getOrReturnCtx(input);
addIssueToContext2(ctx2, {
code: ZodIssueCode2.invalid_type,
expected: ZodParsedType2.string,
received: ctx2.parsedType
});
return INVALID2;
}
const status = new ParseStatus2();
let ctx = void 0;
for (const check of this._def.checks) {
if (check.kind === "min") {
if (input.data.length < check.value) {
ctx = this._getOrReturnCtx(input, ctx);
addIssueToContext2(ctx, {
code: ZodIssueCode2.too_small,
minimum: check.value,
type: "string",
inclusive: true,
exact: false,
message: check.message
});
status.dirty();
}
} else if (check.kind === "max") {
if (input.data.length > check.value) {
ctx = this._getOrReturnCtx(input, ctx);
addIssueToContext2(ctx, {
code: ZodIssueCode2.too_big,
maximum: check.value,
type: "string",
inclusive: true,
exact: false,
message: check.message
});
status.dirty();
}
} else if (check.kind === "length") {
const tooBig = input.data.length > check.value;
const tooSmall = input.data.length < check.value;
if (tooBig || tooSmall) {
ctx = this._getOrReturnCtx(input, ctx);
if (tooBig) {
addIssueToContext2(ctx, {
code: ZodIssueCode2.too_big,
maximum: check.value,
type: "string",
inclusive: true,
exact: true,
message: check.message
});
} else if (tooSmall) {
addIssueToContext2(ctx, {
code: ZodIssueCode2.too_small,
minimum: check.value,
type: "string",
inclusive: true,
exact: true,
message: check.message
});
}
status.dirty();
}
} else if (check.kind === "email") {
if (!emailRegex2.test(input.data)) {
ctx = this._getOrReturnCtx(input, ctx);
addIssueToContext2(ctx, {
validation: "email",
code: ZodIssueCode2.invalid_string,
message: check.message
});
status.dirty();
}
} else if (check.kind === "emoji") {
if (!emojiRegex2) {
emojiRegex2 = new RegExp(_emojiRegex2, "u");
}
if (!emojiRegex2.test(input.data)) {
ctx = this._getOrReturnCtx(input, ctx);
addIssueToContext2(ctx, {
validation: "emoji",
code: ZodIssueCode2.invalid_string,
message: check.message
});
status.dirty();
}
} else if (check.kind === "uuid") {
if (!uuidRegex2.test(input.data)) {
ctx = this._getOrReturnCtx(input, ctx);
addIssueToContext2(ctx, {
validation: "uuid",
code: ZodIssueCode2.invalid_string,
message: check.message
});
status.dirty();
}
} else if (check.kind === "nanoid") {
if (!nanoidRegex2.test(input.data)) {
ctx = this._getOrReturnCtx(input, ctx);
addIssueToContext2(ctx, {
validation: "nanoid",
code: ZodIssueCode2.invalid_string,
message: check.message
});
status.dirty();
}
} else if (check.kind === "cuid") {
if (!cuidRegex2.test(input.data)) {
ctx = this._getOrReturnCtx(input, ctx);
addIssueToContext2(ctx, {
validation: "cuid",
code: ZodIssueCode2.invalid_string,
message: check.message
});
status.dirty();
}
} else if (check.kind === "cuid2") {
if (!cuid2Regex2.test(input.data)) {
ctx = this._getOrReturnCtx(input, ctx);
addIssueToContext2(ctx, {
validation: "cuid2",
code: ZodIssueCode2.invalid_string,
message: check.message
});
status.dirty();
}
} else if (check.kind === "ulid") {
if (!ulidRegex2.test(input.data)) {
ctx = this._getOrReturnCtx(input, ctx);
addIssueToContext2(ctx, {
validation: "ulid",
code: ZodIssueCode2.invalid_string,
message: check.message
});
status.dirty();
}
} else if (check.kind === "url") {
try {
new URL(input.data);
} catch (_a2) {
ctx = this._getOrReturnCtx(input, ctx);
addIssueToContext2(ctx, {
validation: "url",
code: ZodIssueCode2.invalid_string,
message: check.message
});
status.dirty();
}
} else if (check.kind === "regex") {
check.regex.lastIndex = 0;
const testResult = check.regex.test(input.data);
if (!testResult) {
ctx = this._getOrReturnCtx(input, ctx);
addIssueToContext2(ctx, {
validation: "regex",
code: ZodIssueCode2.invalid_string,
message: check.message
});
status.dirty();
}
} else if (check.kind === "trim") {
input.data = input.data.trim();
} else if (check.kind === "includes") {
if (!input.data.includes(check.value, check.position)) {
ctx = this._getOrReturnCtx(input, ctx);
addIssueToContext2(ctx, {
code: ZodIssueCode2.invalid_string,
validation: { includes: check.value, position: check.position },
message: check.message
});
status.dirty();
}
} else if (check.kind === "toLowerCase") {
input.data = input.data.toLowerCase();
} else if (check.kind === "toUpperCase") {
input.data = input.data.toUpperCase();
} else if (check.kind === "startsWith") {
if (!input.data.startsWith(check.value)) {
ctx = this._getOrReturnCtx(input, ctx);
addIssueToContext2(ctx, {
code: ZodIssueCode2.invalid_string,
validation: { startsWith: check.value },
message: check.message
});
status.dirty();
}
} else if (check.kind === "endsWith") {
if (!input.data.endsWith(check.value)) {
ctx = this._getOrReturnCtx(input, ctx);
addIssueToContext2(ctx, {
code: ZodIssueCode2.invalid_string,
validation: { endsWith: check.value },
message: check.message
});
status.dirty();
}
} else if (check.kind === "datetime") {
const regex = datetimeRegex2(check);
if (!regex.test(input.data)) {
ctx = this._getOrReturnCtx(input, ctx);
addIssueToContext2(ctx, {
code: ZodIssueCode2.invalid_string,
validation: "datetime",
message: check.message
});
status.dirty();
}
} else if (check.kind === "date") {
const regex = dateRegex2;
if (!regex.test(input.data)) {
ctx = this._getOrReturnCtx(input, ctx);
addIssueToContext2(ctx, {
code: ZodIssueCode2.invalid_string,
validation: "date",
message: check.message
});
status.dirty();
}
} else if (check.kind === "time") {
const regex = timeRegex2(check);
if (!regex.test(input.data)) {
ctx = this._getOrReturnCtx(input, ctx);
addIssueToContext2(ctx, {
code: ZodIssueCode2.invalid_string,
validation: "time",
message: check.message
});
status.dirty();
}
} else if (check.kind === "duration") {
if (!durationRegex2.test(input.data)) {
ctx = this._getOrReturnCtx(input, ctx);
addIssueToContext2(ctx, {
validation: "duration",
code: ZodIssueCode2.invalid_string,
message: check.message
});
status.dirty();
}
} else if (check.kind === "ip") {
if (!isValidIP2(input.data, check.version)) {
ctx = this._getOrReturnCtx(input, ctx);
addIssueToContext2(ctx, {
validation: "ip",
code: ZodIssueCode2.invalid_string,
message: check.message
});
status.dirty();
}
} else if (check.kind === "jwt") {
if (!isValidJWT2(input.data, check.alg)) {
ctx = this._getOrReturnCtx(input, ctx);
addIssueToContext2(ctx, {
validation: "jwt",
code: ZodIssueCode2.invalid_string,
message: check.message
});
status.dirty();
}
} else if (check.kind === "cidr") {
if (!isValidCidr2(input.data, check.version)) {
ctx = this._getOrReturnCtx(input, ctx);
addIssueToContext2(ctx, {
validation: "cidr",
code: ZodIssueCode2.invalid_string,
message: check.message
});
status.dirty();
}
} else if (check.kind === "base64") {
if (!base64Regex2.test(input.data)) {
ctx = this._getOrReturnCtx(input, ctx);
addIssueToContext2(ctx, {
validation: "base64",
code: ZodIssueCode2.invalid_string,
message: check.message
});
status.dirty();
}
} else if (check.kind === "base64url") {
if (!base64urlRegex2.test(input.data)) {
ctx = this._getOrReturnCtx(input, ctx);
addIssueToContext2(ctx, {
validation: "base64url",
code: ZodIssueCode2.invalid_string,
message: check.message
});
status.dirty();
}
} else {
util4.assertNever(check);
}
}
return { status: status.value, value: input.data };
}
_regex(regex, validation, message) {
return this.refinement((data2) => regex.test(data2), {
validation,
code: ZodIssueCode2.invalid_string,
...errorUtil2.errToObj(message)
});
}
_addCheck(check) {
return new _ZodString({
...this._def,
checks: [...this._def.checks, check]
});
}
email(message) {
return this._addCheck({ kind: "email", ...errorUtil2.errToObj(message) });
}
url(message) {
return this._addCheck({ kind: "url", ...errorUtil2.errToObj(message) });
}
emoji(message) {
return this._addCheck({ kind: "emoji", ...errorUtil2.errToObj(message) });
}
uuid(message) {
return this._addCheck({ kind: "uuid", ...errorUtil2.errToObj(message) });
}
nanoid(message) {
return this._addCheck({ kind: "nanoid", ...errorUtil2.errToObj(message) });
}
cuid(message) {
return this._addCheck({ kind: "cuid", ...errorUtil2.errToObj(message) });
}
cuid2(message) {
return this._addCheck({ kind: "cuid2", ...errorUtil2.errToObj(message) });
}
ulid(message) {
return this._addCheck({ kind: "ulid", ...errorUtil2.errToObj(message) });
}
base64(message) {
return this._addCheck({ kind: "base64", ...errorUtil2.errToObj(message) });
}
base64url(message) {
return this._addCheck({
kind: "base64url",
...errorUtil2.errToObj(message)
});
}
jwt(options) {
return this._addCheck({ kind: "jwt", ...errorUtil2.errToObj(options) });
}
ip(options) {
return this._addCheck({ kind: "ip", ...errorUtil2.errToObj(options) });
}
cidr(options) {
return this._addCheck({ kind: "cidr", ...errorUtil2.errToObj(options) });
}
datetime(options) {
var _a2, _b;
if (typeof options === "string") {
return this._addCheck({
kind: "datetime",
precision: null,
offset: false,
local: false,
message: options
});
}
return this._addCheck({
kind: "datetime",
precision: typeof (options === null || options === void 0 ? void 0 : options.precision) === "undefined" ? null : options === null || options === void 0 ? void 0 : options.precision,
offset: (_a2 = options === null || options === void 0 ? void 0 : options.offset) !== null && _a2 !== void 0 ? _a2 : false,
local: (_b = options === null || options === void 0 ? void 0 : options.local) !== null && _b !== void 0 ? _b : false,
...errorUtil2.errToObj(options === null || options === void 0 ? void 0 : options.message)
});
}
date(message) {
return this._addCheck({ kind: "date", message });
}
time(options) {
if (typeof options === "string") {
return this._addCheck({
kind: "time",
precision: null,
message: options
});
}
return this._addCheck({
kind: "time",
precision: typeof (options === null || options === void 0 ? void 0 : options.precision) === "undefined" ? null : options === null || options === void 0 ? void 0 : options.precision,
...errorUtil2.errToObj(options === null || options === void 0 ? void 0 : options.message)
});
}
duration(message) {
return this._addCheck({ kind: "duration", ...errorUtil2.errToObj(message) });
}
regex(regex, message) {
return this._addCheck({
kind: "regex",
regex,
...errorUtil2.errToObj(message)
});
}
includes(value, options) {
return this._addCheck({
kind: "includes",
value,
position: options === null || options === void 0 ? void 0 : options.position,
...errorUtil2.errToObj(options === null || options === void 0 ? void 0 : options.message)
});
}
startsWith(value, message) {
return this._addCheck({
kind: "startsWith",
value,
...errorUtil2.errToObj(message)
});
}
endsWith(value, message) {
return this._addCheck({
kind: "endsWith",
value,
...errorUtil2.errToObj(message)
});
}
min(minLength, message) {
return this._addCheck({
kind: "min",
value: minLength,
...errorUtil2.errToObj(message)
});
}
max(maxLength, message) {
return this._addCheck({
kind: "max",
value: maxLength,
...errorUtil2.errToObj(message)
});
}
length(len, message) {
return this._addCheck({
kind: "length",
value: len,
...errorUtil2.errToObj(message)
});
}
/**
* Equivalent to `.min(1)`
*/
nonempty(message) {
return this.min(1, errorUtil2.errToObj(message));
}
trim() {
return new _ZodString({
...this._def,
checks: [...this._def.checks, { kind: "trim" }]
});
}
toLowerCase() {
return new _ZodString({
...this._def,
checks: [...this._def.checks, { kind: "toLowerCase" }]
});
}
toUpperCase() {
return new _ZodString({
...this._def,
checks: [...this._def.checks, { kind: "toUpperCase" }]
});
}
get isDatetime() {
return !!this._def.checks.find((ch) => ch.kind === "datetime");
}
get isDate() {
return !!this._def.checks.find((ch) => ch.kind === "date");
}
get isTime() {
return !!this._def.checks.find((ch) => ch.kind === "time");
}
get isDuration() {
return !!this._def.checks.find((ch) => ch.kind === "duration");
}
get isEmail() {
return !!this._def.checks.find((ch) => ch.kind === "email");
}
get isURL() {
return !!this._def.checks.find((ch) => ch.kind === "url");
}
get isEmoji() {
return !!this._def.checks.find((ch) => ch.kind === "emoji");
}
get isUUID() {
return !!this._def.checks.find((ch) => ch.kind === "uuid");
}
get isNANOID() {
return !!this._def.checks.find((ch) => ch.kind === "nanoid");
}
get isCUID() {
return !!this._def.checks.find((ch) => ch.kind === "cuid");
}
get isCUID2() {
return !!this._def.checks.find((ch) => ch.kind === "cuid2");
}
get isULID() {
return !!this._def.checks.find((ch) => ch.kind === "ulid");
}
get isIP() {
return !!this._def.checks.find((ch) => ch.kind === "ip");
}
get isCIDR() {
return !!this._def.checks.find((ch) => ch.kind === "cidr");
}
get isBase64() {
return !!this._def.checks.find((ch) => ch.kind === "base64");
}
get isBase64url() {
return !!this._def.checks.find((ch) => ch.kind === "base64url");
}
get minLength() {
let min = null;
for (const ch of this._def.checks) {
if (ch.kind === "min") {
if (min === null || ch.value > min)
min = ch.value;
}
}
return min;
}
get maxLength() {
let max = null;
for (const ch of this._def.checks) {
if (ch.kind === "max") {
if (max === null || ch.value < max)
max = ch.value;
}
}
return max;
}
};
ZodString2.create = (params) => {
var _a2;
return new ZodString2({
checks: [],
typeName: ZodFirstPartyTypeKind2.ZodString,
coerce: (_a2 = params === null || params === void 0 ? void 0 : params.coerce) !== null && _a2 !== void 0 ? _a2 : false,
...processCreateParams2(params)
});
};
function floatSafeRemainder2(val2, step) {
const valDecCount = (val2.toString().split(".")[1] || "").length;
const stepDecCount = (step.toString().split(".")[1] || "").length;
const decCount = valDecCount > stepDecCount ? valDecCount : stepDecCount;
const valInt = parseInt(val2.toFixed(decCount).replace(".", ""));
const stepInt = parseInt(step.toFixed(decCount).replace(".", ""));
return valInt % stepInt / Math.pow(10, decCount);
}
var ZodNumber2 = class _ZodNumber extends ZodType2 {
constructor() {
super(...arguments);
this.min = this.gte;
this.max = this.lte;
this.step = this.multipleOf;
}
_parse(input) {
if (this._def.coerce) {
input.data = Number(input.data);
}
const parsedType = this._getType(input);
if (parsedType !== ZodParsedType2.number) {
const ctx2 = this._getOrReturnCtx(input);
addIssueToContext2(ctx2, {
code: ZodIssueCode2.invalid_type,
expected: ZodParsedType2.number,
received: ctx2.parsedType
});
return INVALID2;
}
let ctx = void 0;
const status = new ParseStatus2();
for (const check of this._def.checks) {
if (check.kind === "int") {
if (!util4.isInteger(input.data)) {
ctx = this._getOrReturnCtx(input, ctx);
addIssueToContext2(ctx, {
code: ZodIssueCode2.invalid_type,
expected: "integer",
received: "float",
message: check.message
});
status.dirty();
}
} else if (check.kind === "min") {
const tooSmall = check.inclusive ? input.data < check.value : input.data <= check.value;
if (tooSmall) {
ctx = this._getOrReturnCtx(input, ctx);
addIssueToContext2(ctx, {
code: ZodIssueCode2.too_small,
minimum: check.value,
type: "number",
inclusive: check.inclusive,
exact: false,
message: check.message
});
status.dirty();
}
} else if (check.kind === "max") {
const tooBig = check.inclusive ? input.data > check.value : input.data >= check.value;
if (tooBig) {
ctx = this._getOrReturnCtx(input, ctx);
addIssueToContext2(ctx, {
code: ZodIssueCode2.too_big,
maximum: check.value,
type: "number",
inclusive: check.inclusive,
exact: false,
message: check.message
});
status.dirty();
}
} else if (check.kind === "multipleOf") {
if (floatSafeRemainder2(input.data, check.value) !== 0) {
ctx = this._getOrReturnCtx(input, ctx);
addIssueToContext2(ctx, {
code: ZodIssueCode2.not_multiple_of,
multipleOf: check.value,
message: check.message
});
status.dirty();
}
} else if (check.kind === "finite") {
if (!Number.isFinite(input.data)) {
ctx = this._getOrReturnCtx(input, ctx);
addIssueToContext2(ctx, {
code: ZodIssueCode2.not_finite,
message: check.message
});
status.dirty();
}
} else {
util4.assertNever(check);
}
}
return { status: status.value, value: input.data };
}
gte(value, message) {
return this.setLimit("min", value, true, errorUtil2.toString(message));
}
gt(value, message) {
return this.setLimit("min", value, false, errorUtil2.toString(message));
}
lte(value, message) {
return this.setLimit("max", value, true, errorUtil2.toString(message));
}
lt(value, message) {
return this.setLimit("max", value, false, errorUtil2.toString(message));
}
setLimit(kind, value, inclusive, message) {
return new _ZodNumber({
...this._def,
checks: [
...this._def.checks,
{
kind,
value,
inclusive,
message: errorUtil2.toString(message)
}
]
});
}
_addCheck(check) {
return new _ZodNumber({
...this._def,
checks: [...this._def.checks, check]
});
}
int(message) {
return this._addCheck({
kind: "int",
message: errorUtil2.toString(message)
});
}
positive(message) {
return this._addCheck({
kind: "min",
value: 0,
inclusive: false,
message: errorUtil2.toString(message)
});
}
negative(message) {
return this._addCheck({
kind: "max",
value: 0,
inclusive: false,
message: errorUtil2.toString(message)
});
}
nonpositive(message) {
return this._addCheck({
kind: "max",
value: 0,
inclusive: true,
message: errorUtil2.toString(message)
});
}
nonnegative(message) {
return this._addCheck({
kind: "min",
value: 0,
inclusive: true,
message: errorUtil2.toString(message)
});
}
multipleOf(value, message) {
return this._addCheck({
kind: "multipleOf",
value,
message: errorUtil2.toString(message)
});
}
finite(message) {
return this._addCheck({
kind: "finite",
message: errorUtil2.toString(message)
});
}
safe(message) {
return this._addCheck({
kind: "min",
inclusive: true,
value: Number.MIN_SAFE_INTEGER,
message: errorUtil2.toString(message)
})._addCheck({
kind: "max",
inclusive: true,
value: Number.MAX_SAFE_INTEGER,
message: errorUtil2.toString(message)
});
}
get minValue() {
let min = null;
for (const ch of this._def.checks) {
if (ch.kind === "min") {
if (min === null || ch.value > min)
min = ch.value;
}
}
return min;
}
get maxValue() {
let max = null;
for (const ch of this._def.checks) {
if (ch.kind === "max") {
if (max === null || ch.value < max)
max = ch.value;
}
}
return max;
}
get isInt() {
return !!this._def.checks.find((ch) => ch.kind === "int" || ch.kind === "multipleOf" && util4.isInteger(ch.value));
}
get isFinite() {
let max = null, min = null;
for (const ch of this._def.checks) {
if (ch.kind === "finite" || ch.kind === "int" || ch.kind === "multipleOf") {
return true;
} else if (ch.kind === "min") {
if (min === null || ch.value > min)
min = ch.value;
} else if (ch.kind === "max") {
if (max === null || ch.value < max)
max = ch.value;
}
}
return Number.isFinite(min) && Number.isFinite(max);
}
};
ZodNumber2.create = (params) => {
return new ZodNumber2({
checks: [],
typeName: ZodFirstPartyTypeKind2.ZodNumber,
coerce: (params === null || params === void 0 ? void 0 : params.coerce) || false,
...processCreateParams2(params)
});
};
var ZodBigInt2 = class _ZodBigInt extends ZodType2 {
constructor() {
super(...arguments);
this.min = this.gte;
this.max = this.lte;
}
_parse(input) {
if (this._def.coerce) {
try {
input.data = BigInt(input.data);
} catch (_a2) {
return this._getInvalidInput(input);
}
}
const parsedType = this._getType(input);
if (parsedType !== ZodParsedType2.bigint) {
return this._getInvalidInput(input);
}
let ctx = void 0;
const status = new ParseStatus2();
for (const check of this._def.checks) {
if (check.kind === "min") {
const tooSmall = check.inclusive ? input.data < check.value : input.data <= check.value;
if (tooSmall) {
ctx = this._getOrReturnCtx(input, ctx);
addIssueToContext2(ctx, {
code: ZodIssueCode2.too_small,
type: "bigint",
minimum: check.value,
inclusive: check.inclusive,
message: check.message
});
status.dirty();
}
} else if (check.kind === "max") {
const tooBig = check.inclusive ? input.data > check.value : input.data >= check.value;
if (tooBig) {
ctx = this._getOrReturnCtx(input, ctx);
addIssueToContext2(ctx, {
code: ZodIssueCode2.too_big,
type: "bigint",
maximum: check.value,
inclusive: check.inclusive,
message: check.message
});
status.dirty();
}
} else if (check.kind === "multipleOf") {
if (input.data % check.value !== BigInt(0)) {
ctx = this._getOrReturnCtx(input, ctx);
addIssueToContext2(ctx, {
code: ZodIssueCode2.not_multiple_of,
multipleOf: check.value,
message: check.message
});
status.dirty();
}
} else {
util4.assertNever(check);
}
}
return { status: status.value, value: input.data };
}
_getInvalidInput(input) {
const ctx = this._getOrReturnCtx(input);
addIssueToContext2(ctx, {
code: ZodIssueCode2.invalid_type,
expected: ZodParsedType2.bigint,
received: ctx.parsedType
});
return INVALID2;
}
gte(value, message) {
return this.setLimit("min", value, true, errorUtil2.toString(message));
}
gt(value, message) {
return this.setLimit("min", value, false, errorUtil2.toString(message));
}
lte(value, message) {
return this.setLimit("max", value, true, errorUtil2.toString(message));
}
lt(value, message) {
return this.setLimit("max", value, false, errorUtil2.toString(message));
}
setLimit(kind, value, inclusive, message) {
return new _ZodBigInt({
...this._def,
checks: [
...this._def.checks,
{
kind,
value,
inclusive,
message: errorUtil2.toString(message)
}
]
});
}
_addCheck(check) {
return new _ZodBigInt({
...this._def,
checks: [...this._def.checks, check]
});
}
positive(message) {
return this._addCheck({
kind: "min",
value: BigInt(0),
inclusive: false,
message: errorUtil2.toString(message)
});
}
negative(message) {
return this._addCheck({
kind: "max",
value: BigInt(0),
inclusive: false,
message: errorUtil2.toString(message)
});
}
nonpositive(message) {
return this._addCheck({
kind: "max",
value: BigInt(0),
inclusive: true,
message: errorUtil2.toString(message)
});
}
nonnegative(message) {
return this._addCheck({
kind: "min",
value: BigInt(0),
inclusive: true,
message: errorUtil2.toString(message)
});
}
multipleOf(value, message) {
return this._addCheck({
kind: "multipleOf",
value,
message: errorUtil2.toString(message)
});
}
get minValue() {
let min = null;
for (const ch of this._def.checks) {
if (ch.kind === "min") {
if (min === null || ch.value > min)
min = ch.value;
}
}
return min;
}
get maxValue() {
let max = null;
for (const ch of this._def.checks) {
if (ch.kind === "max") {
if (max === null || ch.value < max)
max = ch.value;
}
}
return max;
}
};
ZodBigInt2.create = (params) => {
var _a2;
return new ZodBigInt2({
checks: [],
typeName: ZodFirstPartyTypeKind2.ZodBigInt,
coerce: (_a2 = params === null || params === void 0 ? void 0 : params.coerce) !== null && _a2 !== void 0 ? _a2 : false,
...processCreateParams2(params)
});
};
var ZodBoolean2 = class extends ZodType2 {
_parse(input) {
if (this._def.coerce) {
input.data = Boolean(input.data);
}
const parsedType = this._getType(input);
if (parsedType !== ZodParsedType2.boolean) {
const ctx = this._getOrReturnCtx(input);
addIssueToContext2(ctx, {
code: ZodIssueCode2.invalid_type,
expected: ZodParsedType2.boolean,
received: ctx.parsedType
});
return INVALID2;
}
return OK2(input.data);
}
};
ZodBoolean2.create = (params) => {
return new ZodBoolean2({
typeName: ZodFirstPartyTypeKind2.ZodBoolean,
coerce: (params === null || params === void 0 ? void 0 : params.coerce) || false,
...processCreateParams2(params)
});
};
var ZodDate2 = class _ZodDate extends ZodType2 {
_parse(input) {
if (this._def.coerce) {
input.data = new Date(input.data);
}
const parsedType = this._getType(input);
if (parsedType !== ZodParsedType2.date) {
const ctx2 = this._getOrReturnCtx(input);
addIssueToContext2(ctx2, {
code: ZodIssueCode2.invalid_type,
expected: ZodParsedType2.date,
received: ctx2.parsedType
});
return INVALID2;
}
if (isNaN(input.data.getTime())) {
const ctx2 = this._getOrReturnCtx(input);
addIssueToContext2(ctx2, {
code: ZodIssueCode2.invalid_date
});
return INVALID2;
}
const status = new ParseStatus2();
let ctx = void 0;
for (const check of this._def.checks) {
if (check.kind === "min") {
if (input.data.getTime() < check.value) {
ctx = this._getOrReturnCtx(input, ctx);
addIssueToContext2(ctx, {
code: ZodIssueCode2.too_small,
message: check.message,
inclusive: true,
exact: false,
minimum: check.value,
type: "date"
});
status.dirty();
}
} else if (check.kind === "max") {
if (input.data.getTime() > check.value) {
ctx = this._getOrReturnCtx(input, ctx);
addIssueToContext2(ctx, {
code: ZodIssueCode2.too_big,
message: check.message,
inclusive: true,
exact: false,
maximum: check.value,
type: "date"
});
status.dirty();
}
} else {
util4.assertNever(check);
}
}
return {
status: status.value,
value: new Date(input.data.getTime())
};
}
_addCheck(check) {
return new _ZodDate({
...this._def,
checks: [...this._def.checks, check]
});
}
min(minDate, message) {
return this._addCheck({
kind: "min",
value: minDate.getTime(),
message: errorUtil2.toString(message)
});
}
max(maxDate, message) {
return this._addCheck({
kind: "max",
value: maxDate.getTime(),
message: errorUtil2.toString(message)
});
}
get minDate() {
let min = null;
for (const ch of this._def.checks) {
if (ch.kind === "min") {
if (min === null || ch.value > min)
min = ch.value;
}
}
return min != null ? new Date(min) : null;
}
get maxDate() {
let max = null;
for (const ch of this._def.checks) {
if (ch.kind === "max") {
if (max === null || ch.value < max)
max = ch.value;
}
}
return max != null ? new Date(max) : null;
}
};
ZodDate2.create = (params) => {
return new ZodDate2({
checks: [],
coerce: (params === null || params === void 0 ? void 0 : params.coerce) || false,
typeName: ZodFirstPartyTypeKind2.ZodDate,
...processCreateParams2(params)
});
};
var ZodSymbol2 = class extends ZodType2 {
_parse(input) {
const parsedType = this._getType(input);
if (parsedType !== ZodParsedType2.symbol) {
const ctx = this._getOrReturnCtx(input);
addIssueToContext2(ctx, {
code: ZodIssueCode2.invalid_type,
expected: ZodParsedType2.symbol,
received: ctx.parsedType
});
return INVALID2;
}
return OK2(input.data);
}
};
ZodSymbol2.create = (params) => {
return new ZodSymbol2({
typeName: ZodFirstPartyTypeKind2.ZodSymbol,
...processCreateParams2(params)
});
};
var ZodUndefined2 = class extends ZodType2 {
_parse(input) {
const parsedType = this._getType(input);
if (parsedType !== ZodParsedType2.undefined) {
const ctx = this._getOrReturnCtx(input);
addIssueToContext2(ctx, {
code: ZodIssueCode2.invalid_type,
expected: ZodParsedType2.undefined,
received: ctx.parsedType
});
return INVALID2;
}
return OK2(input.data);
}
};
ZodUndefined2.create = (params) => {
return new ZodUndefined2({
typeName: ZodFirstPartyTypeKind2.ZodUndefined,
...processCreateParams2(params)
});
};
var ZodNull2 = class extends ZodType2 {
_parse(input) {
const parsedType = this._getType(input);
if (parsedType !== ZodParsedType2.null) {
const ctx = this._getOrReturnCtx(input);
addIssueToContext2(ctx, {
code: ZodIssueCode2.invalid_type,
expected: ZodParsedType2.null,
received: ctx.parsedType
});
return INVALID2;
}
return OK2(input.data);
}
};
ZodNull2.create = (params) => {
return new ZodNull2({
typeName: ZodFirstPartyTypeKind2.ZodNull,
...processCreateParams2(params)
});
};
var ZodAny2 = class extends ZodType2 {
constructor() {
super(...arguments);
this._any = true;
}
_parse(input) {
return OK2(input.data);
}
};
ZodAny2.create = (params) => {
return new ZodAny2({
typeName: ZodFirstPartyTypeKind2.ZodAny,
...processCreateParams2(params)
});
};
var ZodUnknown2 = class extends ZodType2 {
constructor() {
super(...arguments);
this._unknown = true;
}
_parse(input) {
return OK2(input.data);
}
};
ZodUnknown2.create = (params) => {
return new ZodUnknown2({
typeName: ZodFirstPartyTypeKind2.ZodUnknown,
...processCreateParams2(params)
});
};
var ZodNever2 = class extends ZodType2 {
_parse(input) {
const ctx = this._getOrReturnCtx(input);
addIssueToContext2(ctx, {
code: ZodIssueCode2.invalid_type,
expected: ZodParsedType2.never,
received: ctx.parsedType
});
return INVALID2;
}
};
ZodNever2.create = (params) => {
return new ZodNever2({
typeName: ZodFirstPartyTypeKind2.ZodNever,
...processCreateParams2(params)
});
};
var ZodVoid2 = class extends ZodType2 {
_parse(input) {
const parsedType = this._getType(input);
if (parsedType !== ZodParsedType2.undefined) {
const ctx = this._getOrReturnCtx(input);
addIssueToContext2(ctx, {
code: ZodIssueCode2.invalid_type,
expected: ZodParsedType2.void,
received: ctx.parsedType
});
return INVALID2;
}
return OK2(input.data);
}
};
ZodVoid2.create = (params) => {
return new ZodVoid2({
typeName: ZodFirstPartyTypeKind2.ZodVoid,
...processCreateParams2(params)
});
};
var ZodArray2 = class _ZodArray extends ZodType2 {
_parse(input) {
const { ctx, status } = this._processInputParams(input);
const def = this._def;
if (ctx.parsedType !== ZodParsedType2.array) {
addIssueToContext2(ctx, {
code: ZodIssueCode2.invalid_type,
expected: ZodParsedType2.array,
received: ctx.parsedType
});
return INVALID2;
}
if (def.exactLength !== null) {
const tooBig = ctx.data.length > def.exactLength.value;
const tooSmall = ctx.data.length < def.exactLength.value;
if (tooBig || tooSmall) {
addIssueToContext2(ctx, {
code: tooBig ? ZodIssueCode2.too_big : ZodIssueCode2.too_small,
minimum: tooSmall ? def.exactLength.value : void 0,
maximum: tooBig ? def.exactLength.value : void 0,
type: "array",
inclusive: true,
exact: true,
message: def.exactLength.message
});
status.dirty();
}
}
if (def.minLength !== null) {
if (ctx.data.length < def.minLength.value) {
addIssueToContext2(ctx, {
code: ZodIssueCode2.too_small,
minimum: def.minLength.value,
type: "array",
inclusive: true,
exact: false,
message: def.minLength.message
});
status.dirty();
}
}
if (def.maxLength !== null) {
if (ctx.data.length > def.maxLength.value) {
addIssueToContext2(ctx, {
code: ZodIssueCode2.too_big,
maximum: def.maxLength.value,
type: "array",
inclusive: true,
exact: false,
message: def.maxLength.message
});
status.dirty();
}
}
if (ctx.common.async) {
return Promise.all([...ctx.data].map((item, i) => {
return def.type._parseAsync(new ParseInputLazyPath2(ctx, item, ctx.path, i));
})).then((result2) => {
return ParseStatus2.mergeArray(status, result2);
});
}
const result = [...ctx.data].map((item, i) => {
return def.type._parseSync(new ParseInputLazyPath2(ctx, item, ctx.path, i));
});
return ParseStatus2.mergeArray(status, result);
}
get element() {
return this._def.type;
}
min(minLength, message) {
return new _ZodArray({
...this._def,
minLength: { value: minLength, message: errorUtil2.toString(message) }
});
}
max(maxLength, message) {
return new _ZodArray({
...this._def,
maxLength: { value: maxLength, message: errorUtil2.toString(message) }
});
}
length(len, message) {
return new _ZodArray({
...this._def,
exactLength: { value: len, message: errorUtil2.toString(message) }
});
}
nonempty(message) {
return this.min(1, message);
}
};
ZodArray2.create = (schema, params) => {
return new ZodArray2({
type: schema,
minLength: null,
maxLength: null,
exactLength: null,
typeName: ZodFirstPartyTypeKind2.ZodArray,
...processCreateParams2(params)
});
};
function deepPartialify2(schema) {
if (schema instanceof ZodObject2) {
const newShape = {};
for (const key in schema.shape) {
const fieldSchema = schema.shape[key];
newShape[key] = ZodOptional2.create(deepPartialify2(fieldSchema));
}
return new ZodObject2({
...schema._def,
shape: () => newShape
});
} else if (schema instanceof ZodArray2) {
return new ZodArray2({
...schema._def,
type: deepPartialify2(schema.element)
});
} else if (schema instanceof ZodOptional2) {
return ZodOptional2.create(deepPartialify2(schema.unwrap()));
} else if (schema instanceof ZodNullable2) {
return ZodNullable2.create(deepPartialify2(schema.unwrap()));
} else if (schema instanceof ZodTuple2) {
return ZodTuple2.create(schema.items.map((item) => deepPartialify2(item)));
} else {
return schema;
}
}
var ZodObject2 = class _ZodObject extends ZodType2 {
constructor() {
super(...arguments);
this._cached = null;
this.nonstrict = this.passthrough;
this.augment = this.extend;
}
_getCached() {
if (this._cached !== null)
return this._cached;
const shape = this._def.shape();
const keys = util4.objectKeys(shape);
return this._cached = { shape, keys };
}
_parse(input) {
const parsedType = this._getType(input);
if (parsedType !== ZodParsedType2.object) {
const ctx2 = this._getOrReturnCtx(input);
addIssueToContext2(ctx2, {
code: ZodIssueCode2.invalid_type,
expected: ZodParsedType2.object,
received: ctx2.parsedType
});
return INVALID2;
}
const { status, ctx } = this._processInputParams(input);
const { shape, keys: shapeKeys } = this._getCached();
const extraKeys = [];
if (!(this._def.catchall instanceof ZodNever2 && this._def.unknownKeys === "strip")) {
for (const key in ctx.data) {
if (!shapeKeys.includes(key)) {
extraKeys.push(key);
}
}
}
const pairs = [];
for (const key of shapeKeys) {
const keyValidator = shape[key];
const value = ctx.data[key];
pairs.push({
key: { status: "valid", value: key },
value: keyValidator._parse(new ParseInputLazyPath2(ctx, value, ctx.path, key)),
alwaysSet: key in ctx.data
});
}
if (this._def.catchall instanceof ZodNever2) {
const unknownKeys = this._def.unknownKeys;
if (unknownKeys === "passthrough") {
for (const key of extraKeys) {
pairs.push({
key: { status: "valid", value: key },
value: { status: "valid", value: ctx.data[key] }
});
}
} else if (unknownKeys === "strict") {
if (extraKeys.length > 0) {
addIssueToContext2(ctx, {
code: ZodIssueCode2.unrecognized_keys,
keys: extraKeys
});
status.dirty();
}
} else if (unknownKeys === "strip") ;
else {
throw new Error(`Internal ZodObject error: invalid unknownKeys value.`);
}
} else {
const catchall = this._def.catchall;
for (const key of extraKeys) {
const value = ctx.data[key];
pairs.push({
key: { status: "valid", value: key },
value: catchall._parse(
new ParseInputLazyPath2(ctx, value, ctx.path, key)
//, ctx.child(key), value, getParsedType(value)
),
alwaysSet: key in ctx.data
});
}
}
if (ctx.common.async) {
return Promise.resolve().then(async () => {
const syncPairs = [];
for (const pair of pairs) {
const key = await pair.key;
const value = await pair.value;
syncPairs.push({
key,
value,
alwaysSet: pair.alwaysSet
});
}
return syncPairs;
}).then((syncPairs) => {
return ParseStatus2.mergeObjectSync(status, syncPairs);
});
} else {
return ParseStatus2.mergeObjectSync(status, pairs);
}
}
get shape() {
return this._def.shape();
}
strict(message) {
errorUtil2.errToObj;
return new _ZodObject({
...this._def,
unknownKeys: "strict",
...message !== void 0 ? {
errorMap: (issue, ctx) => {
var _a2, _b, _c, _d;
const defaultError = (_c = (_b = (_a2 = this._def).errorMap) === null || _b === void 0 ? void 0 : _b.call(_a2, issue, ctx).message) !== null && _c !== void 0 ? _c : ctx.defaultError;
if (issue.code === "unrecognized_keys")
return {
message: (_d = errorUtil2.errToObj(message).message) !== null && _d !== void 0 ? _d : defaultError
};
return {
message: defaultError
};
}
} : {}
});
}
strip() {
return new _ZodObject({
...this._def,
unknownKeys: "strip"
});
}
passthrough() {
return new _ZodObject({
...this._def,
unknownKeys: "passthrough"
});
}
// const AugmentFactory =
// <Def extends ZodObjectDef>(def: Def) =>
// <Augmentation extends ZodRawShape>(
// augmentation: Augmentation
// ): ZodObject<
// extendShape<ReturnType<Def["shape"]>, Augmentation>,
// Def["unknownKeys"],
// Def["catchall"]
// > => {
// return new ZodObject({
// ...def,
// shape: () => ({
// ...def.shape(),
// ...augmentation,
// }),
// }) as any;
// };
extend(augmentation) {
return new _ZodObject({
...this._def,
shape: () => ({
...this._def.shape(),
...augmentation
})
});
}
/**
* Prior to zod@1.0.12 there was a bug in the
* inferred type of merged objects. Please
* upgrade if you are experiencing issues.
*/
merge(merging) {
const merged = new _ZodObject({
unknownKeys: merging._def.unknownKeys,
catchall: merging._def.catchall,
shape: () => ({
...this._def.shape(),
...merging._def.shape()
}),
typeName: ZodFirstPartyTypeKind2.ZodObject
});
return merged;
}
// merge<
// Incoming extends AnyZodObject,
// Augmentation extends Incoming["shape"],
// NewOutput extends {
// [k in keyof Augmentation | keyof Output]: k extends keyof Augmentation
// ? Augmentation[k]["_output"]
// : k extends keyof Output
// ? Output[k]
// : never;
// },
// NewInput extends {
// [k in keyof Augmentation | keyof Input]: k extends keyof Augmentation
// ? Augmentation[k]["_input"]
// : k extends keyof Input
// ? Input[k]
// : never;
// }
// >(
// merging: Incoming
// ): ZodObject<
// extendShape<T, ReturnType<Incoming["_def"]["shape"]>>,
// Incoming["_def"]["unknownKeys"],
// Incoming["_def"]["catchall"],
// NewOutput,
// NewInput
// > {
// const merged: any = new ZodObject({
// unknownKeys: merging._def.unknownKeys,
// catchall: merging._def.catchall,
// shape: () =>
// objectUtil.mergeShapes(this._def.shape(), merging._def.shape()),
// typeName: ZodFirstPartyTypeKind.ZodObject,
// }) as any;
// return merged;
// }
setKey(key, schema) {
return this.augment({ [key]: schema });
}
// merge<Incoming extends AnyZodObject>(
// merging: Incoming
// ): //ZodObject<T & Incoming["_shape"], UnknownKeys, Catchall> = (merging) => {
// ZodObject<
// extendShape<T, ReturnType<Incoming["_def"]["shape"]>>,
// Incoming["_def"]["unknownKeys"],
// Incoming["_def"]["catchall"]
// > {
// // const mergedShape = objectUtil.mergeShapes(
// // this._def.shape(),
// // merging._def.shape()
// // );
// const merged: any = new ZodObject({
// unknownKeys: merging._def.unknownKeys,
// catchall: merging._def.catchall,
// shape: () =>
// objectUtil.mergeShapes(this._def.shape(), merging._def.shape()),
// typeName: ZodFirstPartyTypeKind.ZodObject,
// }) as any;
// return merged;
// }
catchall(index2) {
return new _ZodObject({
...this._def,
catchall: index2
});
}
pick(mask) {
const shape = {};
util4.objectKeys(mask).forEach((key) => {
if (mask[key] && this.shape[key]) {
shape[key] = this.shape[key];
}
});
return new _ZodObject({
...this._def,
shape: () => shape
});
}
omit(mask) {
const shape = {};
util4.objectKeys(this.shape).forEach((key) => {
if (!mask[key]) {
shape[key] = this.shape[key];
}
});
return new _ZodObject({
...this._def,
shape: () => shape
});
}
/**
* @deprecated
*/
deepPartial() {
return deepPartialify2(this);
}
partial(mask) {
const newShape = {};
util4.objectKeys(this.shape).forEach((key) => {
const fieldSchema = this.shape[key];
if (mask && !mask[key]) {
newShape[key] = fieldSchema;
} else {
newShape[key] = fieldSchema.optional();
}
});
return new _ZodObject({
...this._def,
shape: () => newShape
});
}
required(mask) {
const newShape = {};
util4.objectKeys(this.shape).forEach((key) => {
if (mask && !mask[key]) {
newShape[key] = this.shape[key];
} else {
const fieldSchema = this.shape[key];
let newField = fieldSchema;
while (newField instanceof ZodOptional2) {
newField = newField._def.innerType;
}
newShape[key] = newField;
}
});
return new _ZodObject({
...this._def,
shape: () => newShape
});
}
keyof() {
return createZodEnum2(util4.objectKeys(this.shape));
}
};
ZodObject2.create = (shape, params) => {
return new ZodObject2({
shape: () => shape,
unknownKeys: "strip",
catchall: ZodNever2.create(),
typeName: ZodFirstPartyTypeKind2.ZodObject,
...processCreateParams2(params)
});
};
ZodObject2.strictCreate = (shape, params) => {
return new ZodObject2({
shape: () => shape,
unknownKeys: "strict",
catchall: ZodNever2.create(),
typeName: ZodFirstPartyTypeKind2.ZodObject,
...processCreateParams2(params)
});
};
ZodObject2.lazycreate = (shape, params) => {
return new ZodObject2({
shape,
unknownKeys: "strip",
catchall: ZodNever2.create(),
typeName: ZodFirstPartyTypeKind2.ZodObject,
...processCreateParams2(params)
});
};
var ZodUnion2 = class extends ZodType2 {
_parse(input) {
const { ctx } = this._processInputParams(input);
const options = this._def.options;
function handleResults(results) {
for (const result of results) {
if (result.result.status === "valid") {
return result.result;
}
}
for (const result of results) {
if (result.result.status === "dirty") {
ctx.common.issues.push(...result.ctx.common.issues);
return result.result;
}
}
const unionErrors = results.map((result) => new ZodError2(result.ctx.common.issues));
addIssueToContext2(ctx, {
code: ZodIssueCode2.invalid_union,
unionErrors
});
return INVALID2;
}
if (ctx.common.async) {
return Promise.all(options.map(async (option) => {
const childCtx = {
...ctx,
common: {
...ctx.common,
issues: []
},
parent: null
};
return {
result: await option._parseAsync({
data: ctx.data,
path: ctx.path,
parent: childCtx
}),
ctx: childCtx
};
})).then(handleResults);
} else {
let dirty = void 0;
const issues = [];
for (const option of options) {
const childCtx = {
...ctx,
common: {
...ctx.common,
issues: []
},
parent: null
};
const result = option._parseSync({
data: ctx.data,
path: ctx.path,
parent: childCtx
});
if (result.status === "valid") {
return result;
} else if (result.status === "dirty" && !dirty) {
dirty = { result, ctx: childCtx };
}
if (childCtx.common.issues.length) {
issues.push(childCtx.common.issues);
}
}
if (dirty) {
ctx.common.issues.push(...dirty.ctx.common.issues);
return dirty.result;
}
const unionErrors = issues.map((issues2) => new ZodError2(issues2));
addIssueToContext2(ctx, {
code: ZodIssueCode2.invalid_union,
unionErrors
});
return INVALID2;
}
}
get options() {
return this._def.options;
}
};
ZodUnion2.create = (types, params) => {
return new ZodUnion2({
options: types,
typeName: ZodFirstPartyTypeKind2.ZodUnion,
...processCreateParams2(params)
});
};
var getDiscriminator2 = (type) => {
if (type instanceof ZodLazy2) {
return getDiscriminator2(type.schema);
} else if (type instanceof ZodEffects2) {
return getDiscriminator2(type.innerType());
} else if (type instanceof ZodLiteral2) {
return [type.value];
} else if (type instanceof ZodEnum2) {
return type.options;
} else if (type instanceof ZodNativeEnum2) {
return util4.objectValues(type.enum);
} else if (type instanceof ZodDefault2) {
return getDiscriminator2(type._def.innerType);
} else if (type instanceof ZodUndefined2) {
return [void 0];
} else if (type instanceof ZodNull2) {
return [null];
} else if (type instanceof ZodOptional2) {
return [void 0, ...getDiscriminator2(type.unwrap())];
} else if (type instanceof ZodNullable2) {
return [null, ...getDiscriminator2(type.unwrap())];
} else if (type instanceof ZodBranded2) {
return getDiscriminator2(type.unwrap());
} else if (type instanceof ZodReadonly2) {
return getDiscriminator2(type.unwrap());
} else if (type instanceof ZodCatch2) {
return getDiscriminator2(type._def.innerType);
} else {
return [];
}
};
var ZodDiscriminatedUnion2 = class _ZodDiscriminatedUnion extends ZodType2 {
_parse(input) {
const { ctx } = this._processInputParams(input);
if (ctx.parsedType !== ZodParsedType2.object) {
addIssueToContext2(ctx, {
code: ZodIssueCode2.invalid_type,
expected: ZodParsedType2.object,
received: ctx.parsedType
});
return INVALID2;
}
const discriminator = this.discriminator;
const discriminatorValue = ctx.data[discriminator];
const option = this.optionsMap.get(discriminatorValue);
if (!option) {
addIssueToContext2(ctx, {
code: ZodIssueCode2.invalid_union_discriminator,
options: Array.from(this.optionsMap.keys()),
path: [discriminator]
});
return INVALID2;
}
if (ctx.common.async) {
return option._parseAsync({
data: ctx.data,
path: ctx.path,
parent: ctx
});
} else {
return option._parseSync({
data: ctx.data,
path: ctx.path,
parent: ctx
});
}
}
get discriminator() {
return this._def.discriminator;
}
get options() {
return this._def.options;
}
get optionsMap() {
return this._def.optionsMap;
}
/**
* The constructor of the discriminated union schema. Its behaviour is very similar to that of the normal z.union() constructor.
* However, it only allows a union of objects, all of which need to share a discriminator property. This property must
* have a different value for each object in the union.
* @param discriminator the name of the discriminator property
* @param types an array of object schemas
* @param params
*/
static create(discriminator, options, params) {
const optionsMap = /* @__PURE__ */ new Map();
for (const type of options) {
const discriminatorValues = getDiscriminator2(type.shape[discriminator]);
if (!discriminatorValues.length) {
throw new Error(`A discriminator value for key \`${discriminator}\` could not be extracted from all schema options`);
}
for (const value of discriminatorValues) {
if (optionsMap.has(value)) {
throw new Error(`Discriminator property ${String(discriminator)} has duplicate value ${String(value)}`);
}
optionsMap.set(value, type);
}
}
return new _ZodDiscriminatedUnion({
typeName: ZodFirstPartyTypeKind2.ZodDiscriminatedUnion,
discriminator,
options,
optionsMap,
...processCreateParams2(params)
});
}
};
function mergeValues2(a, b) {
const aType = getParsedType2(a);
const bType = getParsedType2(b);
if (a === b) {
return { valid: true, data: a };
} else if (aType === ZodParsedType2.object && bType === ZodParsedType2.object) {
const bKeys = util4.objectKeys(b);
const sharedKeys = util4.objectKeys(a).filter((key) => bKeys.indexOf(key) !== -1);
const newObj = { ...a, ...b };
for (const key of sharedKeys) {
const sharedValue = mergeValues2(a[key], b[key]);
if (!sharedValue.valid) {
return { valid: false };
}
newObj[key] = sharedValue.data;
}
return { valid: true, data: newObj };
} else if (aType === ZodParsedType2.array && bType === ZodParsedType2.array) {
if (a.length !== b.length) {
return { valid: false };
}
const newArray = [];
for (let index2 = 0; index2 < a.length; index2++) {
const itemA = a[index2];
const itemB = b[index2];
const sharedValue = mergeValues2(itemA, itemB);
if (!sharedValue.valid) {
return { valid: false };
}
newArray.push(sharedValue.data);
}
return { valid: true, data: newArray };
} else if (aType === ZodParsedType2.date && bType === ZodParsedType2.date && +a === +b) {
return { valid: true, data: a };
} else {
return { valid: false };
}
}
var ZodIntersection2 = class extends ZodType2 {
_parse(input) {
const { status, ctx } = this._processInputParams(input);
const handleParsed = (parsedLeft, parsedRight) => {
if (isAborted2(parsedLeft) || isAborted2(parsedRight)) {
return INVALID2;
}
const merged = mergeValues2(parsedLeft.value, parsedRight.value);
if (!merged.valid) {
addIssueToContext2(ctx, {
code: ZodIssueCode2.invalid_intersection_types
});
return INVALID2;
}
if (isDirty2(parsedLeft) || isDirty2(parsedRight)) {
status.dirty();
}
return { status: status.value, value: merged.data };
};
if (ctx.common.async) {
return Promise.all([
this._def.left._parseAsync({
data: ctx.data,
path: ctx.path,
parent: ctx
}),
this._def.right._parseAsync({
data: ctx.data,
path: ctx.path,
parent: ctx
})
]).then(([left, right]) => handleParsed(left, right));
} else {
return handleParsed(this._def.left._parseSync({
data: ctx.data,
path: ctx.path,
parent: ctx
}), this._def.right._parseSync({
data: ctx.data,
path: ctx.path,
parent: ctx
}));
}
}
};
ZodIntersection2.create = (left, right, params) => {
return new ZodIntersection2({
left,
right,
typeName: ZodFirstPartyTypeKind2.ZodIntersection,
...processCreateParams2(params)
});
};
var ZodTuple2 = class _ZodTuple extends ZodType2 {
_parse(input) {
const { status, ctx } = this._processInputParams(input);
if (ctx.parsedType !== ZodParsedType2.array) {
addIssueToContext2(ctx, {
code: ZodIssueCode2.invalid_type,
expected: ZodParsedType2.array,
received: ctx.parsedType
});
return INVALID2;
}
if (ctx.data.length < this._def.items.length) {
addIssueToContext2(ctx, {
code: ZodIssueCode2.too_small,
minimum: this._def.items.length,
inclusive: true,
exact: false,
type: "array"
});
return INVALID2;
}
const rest = this._def.rest;
if (!rest && ctx.data.length > this._def.items.length) {
addIssueToContext2(ctx, {
code: ZodIssueCode2.too_big,
maximum: this._def.items.length,
inclusive: true,
exact: false,
type: "array"
});
status.dirty();
}
const items = [...ctx.data].map((item, itemIndex) => {
const schema = this._def.items[itemIndex] || this._def.rest;
if (!schema)
return null;
return schema._parse(new ParseInputLazyPath2(ctx, item, ctx.path, itemIndex));
}).filter((x) => !!x);
if (ctx.common.async) {
return Promise.all(items).then((results) => {
return ParseStatus2.mergeArray(status, results);
});
} else {
return ParseStatus2.mergeArray(status, items);
}
}
get items() {
return this._def.items;
}
rest(rest) {
return new _ZodTuple({
...this._def,
rest
});
}
};
ZodTuple2.create = (schemas, params) => {
if (!Array.isArray(schemas)) {
throw new Error("You must pass an array of schemas to z.tuple([ ... ])");
}
return new ZodTuple2({
items: schemas,
typeName: ZodFirstPartyTypeKind2.ZodTuple,
rest: null,
...processCreateParams2(params)
});
};
var ZodRecord2 = class _ZodRecord extends ZodType2 {
get keySchema() {
return this._def.keyType;
}
get valueSchema() {
return this._def.valueType;
}
_parse(input) {
const { status, ctx } = this._processInputParams(input);
if (ctx.parsedType !== ZodParsedType2.object) {
addIssueToContext2(ctx, {
code: ZodIssueCode2.invalid_type,
expected: ZodParsedType2.object,
received: ctx.parsedType
});
return INVALID2;
}
const pairs = [];
const keyType = this._def.keyType;
const valueType = this._def.valueType;
for (const key in ctx.data) {
pairs.push({
key: keyType._parse(new ParseInputLazyPath2(ctx, key, ctx.path, key)),
value: valueType._parse(new ParseInputLazyPath2(ctx, ctx.data[key], ctx.path, key)),
alwaysSet: key in ctx.data
});
}
if (ctx.common.async) {
return ParseStatus2.mergeObjectAsync(status, pairs);
} else {
return ParseStatus2.mergeObjectSync(status, pairs);
}
}
get element() {
return this._def.valueType;
}
static create(first2, second, third) {
if (second instanceof ZodType2) {
return new _ZodRecord({
keyType: first2,
valueType: second,
typeName: ZodFirstPartyTypeKind2.ZodRecord,
...processCreateParams2(third)
});
}
return new _ZodRecord({
keyType: ZodString2.create(),
valueType: first2,
typeName: ZodFirstPartyTypeKind2.ZodRecord,
...processCreateParams2(second)
});
}
};
var ZodMap2 = class extends ZodType2 {
get keySchema() {
return this._def.keyType;
}
get valueSchema() {
return this._def.valueType;
}
_parse(input) {
const { status, ctx } = this._processInputParams(input);
if (ctx.parsedType !== ZodParsedType2.map) {
addIssueToContext2(ctx, {
code: ZodIssueCode2.invalid_type,
expected: ZodParsedType2.map,
received: ctx.parsedType
});
return INVALID2;
}
const keyType = this._def.keyType;
const valueType = this._def.valueType;
const pairs = [...ctx.data.entries()].map(([key, value], index2) => {
return {
key: keyType._parse(new ParseInputLazyPath2(ctx, key, ctx.path, [index2, "key"])),
value: valueType._parse(new ParseInputLazyPath2(ctx, value, ctx.path, [index2, "value"]))
};
});
if (ctx.common.async) {
const finalMap = /* @__PURE__ */ new Map();
return Promise.resolve().then(async () => {
for (const pair of pairs) {
const key = await pair.key;
const value = await pair.value;
if (key.status === "aborted" || value.status === "aborted") {
return INVALID2;
}
if (key.status === "dirty" || value.status === "dirty") {
status.dirty();
}
finalMap.set(key.value, value.value);
}
return { status: status.value, value: finalMap };
});
} else {
const finalMap = /* @__PURE__ */ new Map();
for (const pair of pairs) {
const key = pair.key;
const value = pair.value;
if (key.status === "aborted" || value.status === "aborted") {
return INVALID2;
}
if (key.status === "dirty" || value.status === "dirty") {
status.dirty();
}
finalMap.set(key.value, value.value);
}
return { status: status.value, value: finalMap };
}
}
};
ZodMap2.create = (keyType, valueType, params) => {
return new ZodMap2({
valueType,
keyType,
typeName: ZodFirstPartyTypeKind2.ZodMap,
...processCreateParams2(params)
});
};
var ZodSet2 = class _ZodSet extends ZodType2 {
_parse(input) {
const { status, ctx } = this._processInputParams(input);
if (ctx.parsedType !== ZodParsedType2.set) {
addIssueToContext2(ctx, {
code: ZodIssueCode2.invalid_type,
expected: ZodParsedType2.set,
received: ctx.parsedType
});
return INVALID2;
}
const def = this._def;
if (def.minSize !== null) {
if (ctx.data.size < def.minSize.value) {
addIssueToContext2(ctx, {
code: ZodIssueCode2.too_small,
minimum: def.minSize.value,
type: "set",
inclusive: true,
exact: false,
message: def.minSize.message
});
status.dirty();
}
}
if (def.maxSize !== null) {
if (ctx.data.size > def.maxSize.value) {
addIssueToContext2(ctx, {
code: ZodIssueCode2.too_big,
maximum: def.maxSize.value,
type: "set",
inclusive: true,
exact: false,
message: def.maxSize.message
});
status.dirty();
}
}
const valueType = this._def.valueType;
function finalizeSet(elements2) {
const parsedSet = /* @__PURE__ */ new Set();
for (const element of elements2) {
if (element.status === "aborted")
return INVALID2;
if (element.status === "dirty")
status.dirty();
parsedSet.add(element.value);
}
return { status: status.value, value: parsedSet };
}
const elements = [...ctx.data.values()].map((item, i) => valueType._parse(new ParseInputLazyPath2(ctx, item, ctx.path, i)));
if (ctx.common.async) {
return Promise.all(elements).then((elements2) => finalizeSet(elements2));
} else {
return finalizeSet(elements);
}
}
min(minSize, message) {
return new _ZodSet({
...this._def,
minSize: { value: minSize, message: errorUtil2.toString(message) }
});
}
max(maxSize, message) {
return new _ZodSet({
...this._def,
maxSize: { value: maxSize, message: errorUtil2.toString(message) }
});
}
size(size, message) {
return this.min(size, message).max(size, message);
}
nonempty(message) {
return this.min(1, message);
}
};
ZodSet2.create = (valueType, params) => {
return new ZodSet2({
valueType,
minSize: null,
maxSize: null,
typeName: ZodFirstPartyTypeKind2.ZodSet,
...processCreateParams2(params)
});
};
var ZodFunction2 = class _ZodFunction extends ZodType2 {
constructor() {
super(...arguments);
this.validate = this.implement;
}
_parse(input) {
const { ctx } = this._processInputParams(input);
if (ctx.parsedType !== ZodParsedType2.function) {
addIssueToContext2(ctx, {
code: ZodIssueCode2.invalid_type,
expected: ZodParsedType2.function,
received: ctx.parsedType
});
return INVALID2;
}
function makeArgsIssue(args, error) {
return makeIssue2({
data: args,
path: ctx.path,
errorMaps: [
ctx.common.contextualErrorMap,
ctx.schemaErrorMap,
getErrorMap2(),
errorMap2
].filter((x) => !!x),
issueData: {
code: ZodIssueCode2.invalid_arguments,
argumentsError: error
}
});
}
function makeReturnsIssue(returns, error) {
return makeIssue2({
data: returns,
path: ctx.path,
errorMaps: [
ctx.common.contextualErrorMap,
ctx.schemaErrorMap,
getErrorMap2(),
errorMap2
].filter((x) => !!x),
issueData: {
code: ZodIssueCode2.invalid_return_type,
returnTypeError: error
}
});
}
const params = { errorMap: ctx.common.contextualErrorMap };
const fn = ctx.data;
if (this._def.returns instanceof ZodPromise2) {
const me = this;
return OK2(async function(...args) {
const error = new ZodError2([]);
const parsedArgs = await me._def.args.parseAsync(args, params).catch((e) => {
error.addIssue(makeArgsIssue(args, e));
throw error;
});
const result = await Reflect.apply(fn, this, parsedArgs);
const parsedReturns = await me._def.returns._def.type.parseAsync(result, params).catch((e) => {
error.addIssue(makeReturnsIssue(result, e));
throw error;
});
return parsedReturns;
});
} else {
const me = this;
return OK2(function(...args) {
const parsedArgs = me._def.args.safeParse(args, params);
if (!parsedArgs.success) {
throw new ZodError2([makeArgsIssue(args, parsedArgs.error)]);
}
const result = Reflect.apply(fn, this, parsedArgs.data);
const parsedReturns = me._def.returns.safeParse(result, params);
if (!parsedReturns.success) {
throw new ZodError2([makeReturnsIssue(result, parsedReturns.error)]);
}
return parsedReturns.data;
});
}
}
parameters() {
return this._def.args;
}
returnType() {
return this._def.returns;
}
args(...items) {
return new _ZodFunction({
...this._def,
args: ZodTuple2.create(items).rest(ZodUnknown2.create())
});
}
returns(returnType) {
return new _ZodFunction({
...this._def,
returns: returnType
});
}
implement(func) {
const validatedFunc = this.parse(func);
return validatedFunc;
}
strictImplement(func) {
const validatedFunc = this.parse(func);
return validatedFunc;
}
static create(args, returns, params) {
return new _ZodFunction({
args: args ? args : ZodTuple2.create([]).rest(ZodUnknown2.create()),
returns: returns || ZodUnknown2.create(),
typeName: ZodFirstPartyTypeKind2.ZodFunction,
...processCreateParams2(params)
});
}
};
var ZodLazy2 = class extends ZodType2 {
get schema() {
return this._def.getter();
}
_parse(input) {
const { ctx } = this._processInputParams(input);
const lazySchema = this._def.getter();
return lazySchema._parse({ data: ctx.data, path: ctx.path, parent: ctx });
}
};
ZodLazy2.create = (getter, params) => {
return new ZodLazy2({
getter,
typeName: ZodFirstPartyTypeKind2.ZodLazy,
...processCreateParams2(params)
});
};
var ZodLiteral2 = class extends ZodType2 {
_parse(input) {
if (input.data !== this._def.value) {
const ctx = this._getOrReturnCtx(input);
addIssueToContext2(ctx, {
received: ctx.data,
code: ZodIssueCode2.invalid_literal,
expected: this._def.value
});
return INVALID2;
}
return { status: "valid", value: input.data };
}
get value() {
return this._def.value;
}
};
ZodLiteral2.create = (value, params) => {
return new ZodLiteral2({
value,
typeName: ZodFirstPartyTypeKind2.ZodLiteral,
...processCreateParams2(params)
});
};
function createZodEnum2(values, params) {
return new ZodEnum2({
values,
typeName: ZodFirstPartyTypeKind2.ZodEnum,
...processCreateParams2(params)
});
}
var ZodEnum2 = class _ZodEnum extends ZodType2 {
constructor() {
super(...arguments);
_ZodEnum_cache2.set(this, void 0);
}
_parse(input) {
if (typeof input.data !== "string") {
const ctx = this._getOrReturnCtx(input);
const expectedValues = this._def.values;
addIssueToContext2(ctx, {
expected: util4.joinValues(expectedValues),
received: ctx.parsedType,
code: ZodIssueCode2.invalid_type
});
return INVALID2;
}
if (!__classPrivateFieldGet2(this, _ZodEnum_cache2, "f")) {
__classPrivateFieldSet2(this, _ZodEnum_cache2, new Set(this._def.values), "f");
}
if (!__classPrivateFieldGet2(this, _ZodEnum_cache2, "f").has(input.data)) {
const ctx = this._getOrReturnCtx(input);
const expectedValues = this._def.values;
addIssueToContext2(ctx, {
received: ctx.data,
code: ZodIssueCode2.invalid_enum_value,
options: expectedValues
});
return INVALID2;
}
return OK2(input.data);
}
get options() {
return this._def.values;
}
get enum() {
const enumValues = {};
for (const val2 of this._def.values) {
enumValues[val2] = val2;
}
return enumValues;
}
get Values() {
const enumValues = {};
for (const val2 of this._def.values) {
enumValues[val2] = val2;
}
return enumValues;
}
get Enum() {
const enumValues = {};
for (const val2 of this._def.values) {
enumValues[val2] = val2;
}
return enumValues;
}
extract(values, newDef = this._def) {
return _ZodEnum.create(values, {
...this._def,
...newDef
});
}
exclude(values, newDef = this._def) {
return _ZodEnum.create(this.options.filter((opt) => !values.includes(opt)), {
...this._def,
...newDef
});
}
};
_ZodEnum_cache2 = /* @__PURE__ */ new WeakMap();
ZodEnum2.create = createZodEnum2;
var ZodNativeEnum2 = class extends ZodType2 {
constructor() {
super(...arguments);
_ZodNativeEnum_cache2.set(this, void 0);
}
_parse(input) {
const nativeEnumValues = util4.getValidEnumValues(this._def.values);
const ctx = this._getOrReturnCtx(input);
if (ctx.parsedType !== ZodParsedType2.string && ctx.parsedType !== ZodParsedType2.number) {
const expectedValues = util4.objectValues(nativeEnumValues);
addIssueToContext2(ctx, {
expected: util4.joinValues(expectedValues),
received: ctx.parsedType,
code: ZodIssueCode2.invalid_type
});
return INVALID2;
}
if (!__classPrivateFieldGet2(this, _ZodNativeEnum_cache2, "f")) {
__classPrivateFieldSet2(this, _ZodNativeEnum_cache2, new Set(util4.getValidEnumValues(this._def.values)), "f");
}
if (!__classPrivateFieldGet2(this, _ZodNativeEnum_cache2, "f").has(input.data)) {
const expectedValues = util4.objectValues(nativeEnumValues);
addIssueToContext2(ctx, {
received: ctx.data,
code: ZodIssueCode2.invalid_enum_value,
options: expectedValues
});
return INVALID2;
}
return OK2(input.data);
}
get enum() {
return this._def.values;
}
};
_ZodNativeEnum_cache2 = /* @__PURE__ */ new WeakMap();
ZodNativeEnum2.create = (values, params) => {
return new ZodNativeEnum2({
values,
typeName: ZodFirstPartyTypeKind2.ZodNativeEnum,
...processCreateParams2(params)
});
};
var ZodPromise2 = class extends ZodType2 {
unwrap() {
return this._def.type;
}
_parse(input) {
const { ctx } = this._processInputParams(input);
if (ctx.parsedType !== ZodParsedType2.promise && ctx.common.async === false) {
addIssueToContext2(ctx, {
code: ZodIssueCode2.invalid_type,
expected: ZodParsedType2.promise,
received: ctx.parsedType
});
return INVALID2;
}
const promisified = ctx.parsedType === ZodParsedType2.promise ? ctx.data : Promise.resolve(ctx.data);
return OK2(promisified.then((data2) => {
return this._def.type.parseAsync(data2, {
path: ctx.path,
errorMap: ctx.common.contextualErrorMap
});
}));
}
};
ZodPromise2.create = (schema, params) => {
return new ZodPromise2({
type: schema,
typeName: ZodFirstPartyTypeKind2.ZodPromise,
...processCreateParams2(params)
});
};
var ZodEffects2 = class extends ZodType2 {
innerType() {
return this._def.schema;
}
sourceType() {
return this._def.schema._def.typeName === ZodFirstPartyTypeKind2.ZodEffects ? this._def.schema.sourceType() : this._def.schema;
}
_parse(input) {
const { status, ctx } = this._processInputParams(input);
const effect = this._def.effect || null;
const checkCtx = {
addIssue: (arg) => {
addIssueToContext2(ctx, arg);
if (arg.fatal) {
status.abort();
} else {
status.dirty();
}
},
get path() {
return ctx.path;
}
};
checkCtx.addIssue = checkCtx.addIssue.bind(checkCtx);
if (effect.type === "preprocess") {
const processed = effect.transform(ctx.data, checkCtx);
if (ctx.common.async) {
return Promise.resolve(processed).then(async (processed2) => {
if (status.value === "aborted")
return INVALID2;
const result = await this._def.schema._parseAsync({
data: processed2,
path: ctx.path,
parent: ctx
});
if (result.status === "aborted")
return INVALID2;
if (result.status === "dirty")
return DIRTY2(result.value);
if (status.value === "dirty")
return DIRTY2(result.value);
return result;
});
} else {
if (status.value === "aborted")
return INVALID2;
const result = this._def.schema._parseSync({
data: processed,
path: ctx.path,
parent: ctx
});
if (result.status === "aborted")
return INVALID2;
if (result.status === "dirty")
return DIRTY2(result.value);
if (status.value === "dirty")
return DIRTY2(result.value);
return result;
}
}
if (effect.type === "refinement") {
const executeRefinement = (acc) => {
const result = effect.refinement(acc, checkCtx);
if (ctx.common.async) {
return Promise.resolve(result);
}
if (result instanceof Promise) {
throw new Error("Async refinement encountered during synchronous parse operation. Use .parseAsync instead.");
}
return acc;
};
if (ctx.common.async === false) {
const inner = this._def.schema._parseSync({
data: ctx.data,
path: ctx.path,
parent: ctx
});
if (inner.status === "aborted")
return INVALID2;
if (inner.status === "dirty")
status.dirty();
executeRefinement(inner.value);
return { status: status.value, value: inner.value };
} else {
return this._def.schema._parseAsync({ data: ctx.data, path: ctx.path, parent: ctx }).then((inner) => {
if (inner.status === "aborted")
return INVALID2;
if (inner.status === "dirty")
status.dirty();
return executeRefinement(inner.value).then(() => {
return { status: status.value, value: inner.value };
});
});
}
}
if (effect.type === "transform") {
if (ctx.common.async === false) {
const base = this._def.schema._parseSync({
data: ctx.data,
path: ctx.path,
parent: ctx
});
if (!isValid2(base))
return base;
const result = effect.transform(base.value, checkCtx);
if (result instanceof Promise) {
throw new Error(`Asynchronous transform encountered during synchronous parse operation. Use .parseAsync instead.`);
}
return { status: status.value, value: result };
} else {
return this._def.schema._parseAsync({ data: ctx.data, path: ctx.path, parent: ctx }).then((base) => {
if (!isValid2(base))
return base;
return Promise.resolve(effect.transform(base.value, checkCtx)).then((result) => ({ status: status.value, value: result }));
});
}
}
util4.assertNever(effect);
}
};
ZodEffects2.create = (schema, effect, params) => {
return new ZodEffects2({
schema,
typeName: ZodFirstPartyTypeKind2.ZodEffects,
effect,
...processCreateParams2(params)
});
};
ZodEffects2.createWithPreprocess = (preprocess, schema, params) => {
return new ZodEffects2({
schema,
effect: { type: "preprocess", transform: preprocess },
typeName: ZodFirstPartyTypeKind2.ZodEffects,
...processCreateParams2(params)
});
};
var ZodOptional2 = class extends ZodType2 {
_parse(input) {
const parsedType = this._getType(input);
if (parsedType === ZodParsedType2.undefined) {
return OK2(void 0);
}
return this._def.innerType._parse(input);
}
unwrap() {
return this._def.innerType;
}
};
ZodOptional2.create = (type, params) => {
return new ZodOptional2({
innerType: type,
typeName: ZodFirstPartyTypeKind2.ZodOptional,
...processCreateParams2(params)
});
};
var ZodNullable2 = class extends ZodType2 {
_parse(input) {
const parsedType = this._getType(input);
if (parsedType === ZodParsedType2.null) {
return OK2(null);
}
return this._def.innerType._parse(input);
}
unwrap() {
return this._def.innerType;
}
};
ZodNullable2.create = (type, params) => {
return new ZodNullable2({
innerType: type,
typeName: ZodFirstPartyTypeKind2.ZodNullable,
...processCreateParams2(params)
});
};
var ZodDefault2 = class extends ZodType2 {
_parse(input) {
const { ctx } = this._processInputParams(input);
let data2 = ctx.data;
if (ctx.parsedType === ZodParsedType2.undefined) {
data2 = this._def.defaultValue();
}
return this._def.innerType._parse({
data: data2,
path: ctx.path,
parent: ctx
});
}
removeDefault() {
return this._def.innerType;
}
};
ZodDefault2.create = (type, params) => {
return new ZodDefault2({
innerType: type,
typeName: ZodFirstPartyTypeKind2.ZodDefault,
defaultValue: typeof params.default === "function" ? params.default : () => params.default,
...processCreateParams2(params)
});
};
var ZodCatch2 = class extends ZodType2 {
_parse(input) {
const { ctx } = this._processInputParams(input);
const newCtx = {
...ctx,
common: {
...ctx.common,
issues: []
}
};
const result = this._def.innerType._parse({
data: newCtx.data,
path: newCtx.path,
parent: {
...newCtx
}
});
if (isAsync2(result)) {
return result.then((result2) => {
return {
status: "valid",
value: result2.status === "valid" ? result2.value : this._def.catchValue({
get error() {
return new ZodError2(newCtx.common.issues);
},
input: newCtx.data
})
};
});
} else {
return {
status: "valid",
value: result.status === "valid" ? result.value : this._def.catchValue({
get error() {
return new ZodError2(newCtx.common.issues);
},
input: newCtx.data
})
};
}
}
removeCatch() {
return this._def.innerType;
}
};
ZodCatch2.create = (type, params) => {
return new ZodCatch2({
innerType: type,
typeName: ZodFirstPartyTypeKind2.ZodCatch,
catchValue: typeof params.catch === "function" ? params.catch : () => params.catch,
...processCreateParams2(params)
});
};
var ZodNaN2 = class extends ZodType2 {
_parse(input) {
const parsedType = this._getType(input);
if (parsedType !== ZodParsedType2.nan) {
const ctx = this._getOrReturnCtx(input);
addIssueToContext2(ctx, {
code: ZodIssueCode2.invalid_type,
expected: ZodParsedType2.nan,
received: ctx.parsedType
});
return INVALID2;
}
return { status: "valid", value: input.data };
}
};
ZodNaN2.create = (params) => {
return new ZodNaN2({
typeName: ZodFirstPartyTypeKind2.ZodNaN,
...processCreateParams2(params)
});
};
var BRAND2 = Symbol("zod_brand");
var ZodBranded2 = class extends ZodType2 {
_parse(input) {
const { ctx } = this._processInputParams(input);
const data2 = ctx.data;
return this._def.type._parse({
data: data2,
path: ctx.path,
parent: ctx
});
}
unwrap() {
return this._def.type;
}
};
var ZodPipeline2 = class _ZodPipeline extends ZodType2 {
_parse(input) {
const { status, ctx } = this._processInputParams(input);
if (ctx.common.async) {
const handleAsync = async () => {
const inResult = await this._def.in._parseAsync({
data: ctx.data,
path: ctx.path,
parent: ctx
});
if (inResult.status === "aborted")
return INVALID2;
if (inResult.status === "dirty") {
status.dirty();
return DIRTY2(inResult.value);
} else {
return this._def.out._parseAsync({
data: inResult.value,
path: ctx.path,
parent: ctx
});
}
};
return handleAsync();
} else {
const inResult = this._def.in._parseSync({
data: ctx.data,
path: ctx.path,
parent: ctx
});
if (inResult.status === "aborted")
return INVALID2;
if (inResult.status === "dirty") {
status.dirty();
return {
status: "dirty",
value: inResult.value
};
} else {
return this._def.out._parseSync({
data: inResult.value,
path: ctx.path,
parent: ctx
});
}
}
}
static create(a, b) {
return new _ZodPipeline({
in: a,
out: b,
typeName: ZodFirstPartyTypeKind2.ZodPipeline
});
}
};
var ZodReadonly2 = class extends ZodType2 {
_parse(input) {
const result = this._def.innerType._parse(input);
const freeze = (data2) => {
if (isValid2(data2)) {
data2.value = Object.freeze(data2.value);
}
return data2;
};
return isAsync2(result) ? result.then((data2) => freeze(data2)) : freeze(result);
}
unwrap() {
return this._def.innerType;
}
};
ZodReadonly2.create = (type, params) => {
return new ZodReadonly2({
innerType: type,
typeName: ZodFirstPartyTypeKind2.ZodReadonly,
...processCreateParams2(params)
});
};
function cleanParams2(params, data2) {
const p = typeof params === "function" ? params(data2) : typeof params === "string" ? { message: params } : params;
const p2 = typeof p === "string" ? { message: p } : p;
return p2;
}
function custom2(check, _params = {}, fatal) {
if (check)
return ZodAny2.create().superRefine((data2, ctx) => {
var _a2, _b;
const r = check(data2);
if (r instanceof Promise) {
return r.then((r2) => {
var _a22, _b2;
if (!r2) {
const params = cleanParams2(_params, data2);
const _fatal = (_b2 = (_a22 = params.fatal) !== null && _a22 !== void 0 ? _a22 : fatal) !== null && _b2 !== void 0 ? _b2 : true;
ctx.addIssue({ code: "custom", ...params, fatal: _fatal });
}
});
}
if (!r) {
const params = cleanParams2(_params, data2);
const _fatal = (_b = (_a2 = params.fatal) !== null && _a2 !== void 0 ? _a2 : fatal) !== null && _b !== void 0 ? _b : true;
ctx.addIssue({ code: "custom", ...params, fatal: _fatal });
}
return;
});
return ZodAny2.create();
}
var late2 = {
object: ZodObject2.lazycreate
};
var ZodFirstPartyTypeKind2;
(function(ZodFirstPartyTypeKind22) {
ZodFirstPartyTypeKind22["ZodString"] = "ZodString";
ZodFirstPartyTypeKind22["ZodNumber"] = "ZodNumber";
ZodFirstPartyTypeKind22["ZodNaN"] = "ZodNaN";
ZodFirstPartyTypeKind22["ZodBigInt"] = "ZodBigInt";
ZodFirstPartyTypeKind22["ZodBoolean"] = "ZodBoolean";
ZodFirstPartyTypeKind22["ZodDate"] = "ZodDate";
ZodFirstPartyTypeKind22["ZodSymbol"] = "ZodSymbol";
ZodFirstPartyTypeKind22["ZodUndefined"] = "ZodUndefined";
ZodFirstPartyTypeKind22["ZodNull"] = "ZodNull";
ZodFirstPartyTypeKind22["ZodAny"] = "ZodAny";
ZodFirstPartyTypeKind22["ZodUnknown"] = "ZodUnknown";
ZodFirstPartyTypeKind22["ZodNever"] = "ZodNever";
ZodFirstPartyTypeKind22["ZodVoid"] = "ZodVoid";
ZodFirstPartyTypeKind22["ZodArray"] = "ZodArray";
ZodFirstPartyTypeKind22["ZodObject"] = "ZodObject";
ZodFirstPartyTypeKind22["ZodUnion"] = "ZodUnion";
ZodFirstPartyTypeKind22["ZodDiscriminatedUnion"] = "ZodDiscriminatedUnion";
ZodFirstPartyTypeKind22["ZodIntersection"] = "ZodIntersection";
ZodFirstPartyTypeKind22["ZodTuple"] = "ZodTuple";
ZodFirstPartyTypeKind22["ZodRecord"] = "ZodRecord";
ZodFirstPartyTypeKind22["ZodMap"] = "ZodMap";
ZodFirstPartyTypeKind22["ZodSet"] = "ZodSet";
ZodFirstPartyTypeKind22["ZodFunction"] = "ZodFunction";
ZodFirstPartyTypeKind22["ZodLazy"] = "ZodLazy";
ZodFirstPartyTypeKind22["ZodLiteral"] = "ZodLiteral";
ZodFirstPartyTypeKind22["ZodEnum"] = "ZodEnum";
ZodFirstPartyTypeKind22["ZodEffects"] = "ZodEffects";
ZodFirstPartyTypeKind22["ZodNativeEnum"] = "ZodNativeEnum";
ZodFirstPartyTypeKind22["ZodOptional"] = "ZodOptional";
ZodFirstPartyTypeKind22["ZodNullable"] = "ZodNullable";
ZodFirstPartyTypeKind22["ZodDefault"] = "ZodDefault";
ZodFirstPartyTypeKind22["ZodCatch"] = "ZodCatch";
ZodFirstPartyTypeKind22["ZodPromise"] = "ZodPromise";
ZodFirstPartyTypeKind22["ZodBranded"] = "ZodBranded";
ZodFirstPartyTypeKind22["ZodPipeline"] = "ZodPipeline";
ZodFirstPartyTypeKind22["ZodReadonly"] = "ZodReadonly";
})(ZodFirstPartyTypeKind2 || (ZodFirstPartyTypeKind2 = {}));
var instanceOfType2 = (cls, params = {
message: `Input not instance of ${cls.name}`
}) => custom2((data2) => data2 instanceof cls, params);
var stringType2 = ZodString2.create;
var numberType2 = ZodNumber2.create;
var nanType2 = ZodNaN2.create;
var bigIntType2 = ZodBigInt2.create;
var booleanType2 = ZodBoolean2.create;
var dateType2 = ZodDate2.create;
var symbolType2 = ZodSymbol2.create;
var undefinedType2 = ZodUndefined2.create;
var nullType2 = ZodNull2.create;
var anyType2 = ZodAny2.create;
var unknownType2 = ZodUnknown2.create;
var neverType2 = ZodNever2.create;
var voidType2 = ZodVoid2.create;
var arrayType2 = ZodArray2.create;
var objectType2 = ZodObject2.create;
var strictObjectType2 = ZodObject2.strictCreate;
var unionType2 = ZodUnion2.create;
var discriminatedUnionType2 = ZodDiscriminatedUnion2.create;
var intersectionType2 = ZodIntersection2.create;
var tupleType2 = ZodTuple2.create;
var recordType2 = ZodRecord2.create;
var mapType2 = ZodMap2.create;
var setType2 = ZodSet2.create;
var functionType2 = ZodFunction2.create;
var lazyType2 = ZodLazy2.create;
var literalType2 = ZodLiteral2.create;
var enumType2 = ZodEnum2.create;
var nativeEnumType2 = ZodNativeEnum2.create;
var promiseType2 = ZodPromise2.create;
var effectsType2 = ZodEffects2.create;
var optionalType2 = ZodOptional2.create;
var nullableType2 = ZodNullable2.create;
var preprocessType2 = ZodEffects2.createWithPreprocess;
var pipelineType2 = ZodPipeline2.create;
var ostring2 = () => stringType2().optional();
var onumber2 = () => numberType2().optional();
var oboolean2 = () => booleanType2().optional();
var coerce2 = {
string: (arg) => ZodString2.create({ ...arg, coerce: true }),
number: (arg) => ZodNumber2.create({ ...arg, coerce: true }),
boolean: (arg) => ZodBoolean2.create({
...arg,
coerce: true
}),
bigint: (arg) => ZodBigInt2.create({ ...arg, coerce: true }),
date: (arg) => ZodDate2.create({ ...arg, coerce: true })
};
var NEVER2 = INVALID2;
var z2 = /* @__PURE__ */ Object.freeze({
__proto__: null,
defaultErrorMap: errorMap2,
setErrorMap: setErrorMap2,
getErrorMap: getErrorMap2,
makeIssue: makeIssue2,
EMPTY_PATH: EMPTY_PATH2,
addIssueToContext: addIssueToContext2,
ParseStatus: ParseStatus2,
INVALID: INVALID2,
DIRTY: DIRTY2,
OK: OK2,
isAborted: isAborted2,
isDirty: isDirty2,
isValid: isValid2,
isAsync: isAsync2,
get util() {
return util4;
},
get objectUtil() {
return objectUtil2;
},
ZodParsedType: ZodParsedType2,
getParsedType: getParsedType2,
ZodType: ZodType2,
datetimeRegex: datetimeRegex2,
ZodString: ZodString2,
ZodNumber: ZodNumber2,
ZodBigInt: ZodBigInt2,
ZodBoolean: ZodBoolean2,
ZodDate: ZodDate2,
ZodSymbol: ZodSymbol2,
ZodUndefined: ZodUndefined2,
ZodNull: ZodNull2,
ZodAny: ZodAny2,
ZodUnknown: ZodUnknown2,
ZodNever: ZodNever2,
ZodVoid: ZodVoid2,
ZodArray: ZodArray2,
ZodObject: ZodObject2,
ZodUnion: ZodUnion2,
ZodDiscriminatedUnion: ZodDiscriminatedUnion2,
ZodIntersection: ZodIntersection2,
ZodTuple: ZodTuple2,
ZodRecord: ZodRecord2,
ZodMap: ZodMap2,
ZodSet: ZodSet2,
ZodFunction: ZodFunction2,
ZodLazy: ZodLazy2,
ZodLiteral: ZodLiteral2,
ZodEnum: ZodEnum2,
ZodNativeEnum: ZodNativeEnum2,
ZodPromise: ZodPromise2,
ZodEffects: ZodEffects2,
ZodTransformer: ZodEffects2,
ZodOptional: ZodOptional2,
ZodNullable: ZodNullable2,
ZodDefault: ZodDefault2,
ZodCatch: ZodCatch2,
ZodNaN: ZodNaN2,
BRAND: BRAND2,
ZodBranded: ZodBranded2,
ZodPipeline: ZodPipeline2,
ZodReadonly: ZodReadonly2,
custom: custom2,
Schema: ZodType2,
ZodSchema: ZodType2,
late: late2,
get ZodFirstPartyTypeKind() {
return ZodFirstPartyTypeKind2;
},
coerce: coerce2,
any: anyType2,
array: arrayType2,
bigint: bigIntType2,
boolean: booleanType2,
date: dateType2,
discriminatedUnion: discriminatedUnionType2,
effect: effectsType2,
"enum": enumType2,
"function": functionType2,
"instanceof": instanceOfType2,
intersection: intersectionType2,
lazy: lazyType2,
literal: literalType2,
map: mapType2,
nan: nanType2,
nativeEnum: nativeEnumType2,
never: neverType2,
"null": nullType2,
nullable: nullableType2,
number: numberType2,
object: objectType2,
oboolean: oboolean2,
onumber: onumber2,
optional: optionalType2,
ostring: ostring2,
pipeline: pipelineType2,
preprocess: preprocessType2,
promise: promiseType2,
record: recordType2,
set: setType2,
strictObject: strictObjectType2,
string: stringType2,
symbol: symbolType2,
transformer: effectsType2,
tuple: tupleType2,
"undefined": undefinedType2,
union: unionType2,
unknown: unknownType2,
"void": voidType2,
NEVER: NEVER2,
ZodIssueCode: ZodIssueCode2,
quotelessJson: quotelessJson2,
ZodError: ZodError2
});
var LATEST_PROTOCOL_VERSION2 = "2025-06-18";
var DEFAULT_NEGOTIATED_PROTOCOL_VERSION = "2025-03-26";
var SUPPORTED_PROTOCOL_VERSIONS2 = [
LATEST_PROTOCOL_VERSION2,
"2025-03-26",
"2024-11-05",
"2024-10-07"
];
var JSONRPC_VERSION2 = "2.0";
var ProgressTokenSchema2 = z2.union([z2.string(), z2.number().int()]);
var CursorSchema2 = z2.string();
var RequestMetaSchema2 = z2.object({
/**
* If specified, the caller is requesting out-of-band progress notifications for this request (as represented by notifications/progress). The value of this parameter is an opaque token that will be attached to any subsequent notifications. The receiver is not obligated to provide these notifications.
*/
progressToken: z2.optional(ProgressTokenSchema2)
}).passthrough();
var BaseRequestParamsSchema2 = z2.object({
_meta: z2.optional(RequestMetaSchema2)
}).passthrough();
var RequestSchema2 = z2.object({
method: z2.string(),
params: z2.optional(BaseRequestParamsSchema2)
});
var BaseNotificationParamsSchema2 = z2.object({
/**
* See [MCP specification](https://github.com/modelcontextprotocol/modelcontextprotocol/blob/47339c03c143bb4ec01a26e721a1b8fe66634ebe/docs/specification/draft/basic/index.mdx#general-fields)
* for notes on _meta usage.
*/
_meta: z2.optional(z2.object({}).passthrough())
}).passthrough();
var NotificationSchema2 = z2.object({
method: z2.string(),
params: z2.optional(BaseNotificationParamsSchema2)
});
var ResultSchema2 = z2.object({
/**
* See [MCP specification](https://github.com/modelcontextprotocol/modelcontextprotocol/blob/47339c03c143bb4ec01a26e721a1b8fe66634ebe/docs/specification/draft/basic/index.mdx#general-fields)
* for notes on _meta usage.
*/
_meta: z2.optional(z2.object({}).passthrough())
}).passthrough();
var RequestIdSchema2 = z2.union([z2.string(), z2.number().int()]);
var JSONRPCRequestSchema2 = z2.object({
jsonrpc: z2.literal(JSONRPC_VERSION2),
id: RequestIdSchema2
}).merge(RequestSchema2).strict();
var isJSONRPCRequest2 = (value) => JSONRPCRequestSchema2.safeParse(value).success;
var JSONRPCNotificationSchema2 = z2.object({
jsonrpc: z2.literal(JSONRPC_VERSION2)
}).merge(NotificationSchema2).strict();
var JSONRPCResponseSchema2 = z2.object({
jsonrpc: z2.literal(JSONRPC_VERSION2),
id: RequestIdSchema2,
result: ResultSchema2
}).strict();
var isJSONRPCResponse2 = (value) => JSONRPCResponseSchema2.safeParse(value).success;
var ErrorCode2;
(function(ErrorCode22) {
ErrorCode22[ErrorCode22["ConnectionClosed"] = -32e3] = "ConnectionClosed";
ErrorCode22[ErrorCode22["RequestTimeout"] = -32001] = "RequestTimeout";
ErrorCode22[ErrorCode22["ParseError"] = -32700] = "ParseError";
ErrorCode22[ErrorCode22["InvalidRequest"] = -32600] = "InvalidRequest";
ErrorCode22[ErrorCode22["MethodNotFound"] = -32601] = "MethodNotFound";
ErrorCode22[ErrorCode22["InvalidParams"] = -32602] = "InvalidParams";
ErrorCode22[ErrorCode22["InternalError"] = -32603] = "InternalError";
})(ErrorCode2 || (ErrorCode2 = {}));
var JSONRPCErrorSchema2 = z2.object({
jsonrpc: z2.literal(JSONRPC_VERSION2),
id: RequestIdSchema2,
error: z2.object({
/**
* The error type that occurred.
*/
code: z2.number().int(),
/**
* A short description of the error. The message SHOULD be limited to a concise single sentence.
*/
message: z2.string(),
/**
* Additional information about the error. The value of this member is defined by the sender (e.g. detailed error information, nested errors etc.).
*/
data: z2.optional(z2.unknown())
})
}).strict();
var isJSONRPCError2 = (value) => JSONRPCErrorSchema2.safeParse(value).success;
var JSONRPCMessageSchema2 = z2.union([
JSONRPCRequestSchema2,
JSONRPCNotificationSchema2,
JSONRPCResponseSchema2,
JSONRPCErrorSchema2
]);
var EmptyResultSchema2 = ResultSchema2.strict();
var CancelledNotificationSchema2 = NotificationSchema2.extend({
method: z2.literal("notifications/cancelled"),
params: BaseNotificationParamsSchema2.extend({
/**
* The ID of the request to cancel.
*
* This MUST correspond to the ID of a request previously issued in the same direction.
*/
requestId: RequestIdSchema2,
/**
* An optional string describing the reason for the cancellation. This MAY be logged or presented to the user.
*/
reason: z2.string().optional()
})
});
var BaseMetadataSchema2 = z2.object({
/** Intended for programmatic or logical use, but used as a display name in past specs or fallback */
name: z2.string(),
/**
* Intended for UI and end-user contexts — optimized to be human-readable and easily understood,
* even by those unfamiliar with domain-specific terminology.
*
* If not provided, the name should be used for display (except for Tool,
* where `annotations.title` should be given precedence over using `name`,
* if present).
*/
title: z2.optional(z2.string())
}).passthrough();
var ImplementationSchema2 = BaseMetadataSchema2.extend({
version: z2.string()
});
var ClientCapabilitiesSchema2 = z2.object({
/**
* Experimental, non-standard capabilities that the client supports.
*/
experimental: z2.optional(z2.object({}).passthrough()),
/**
* Present if the client supports sampling from an LLM.
*/
sampling: z2.optional(z2.object({}).passthrough()),
/**
* Present if the client supports eliciting user input.
*/
elicitation: z2.optional(z2.object({}).passthrough()),
/**
* Present if the client supports listing roots.
*/
roots: z2.optional(z2.object({
/**
* Whether the client supports issuing notifications for changes to the roots list.
*/
listChanged: z2.optional(z2.boolean())
}).passthrough())
}).passthrough();
var InitializeRequestSchema2 = RequestSchema2.extend({
method: z2.literal("initialize"),
params: BaseRequestParamsSchema2.extend({
/**
* The latest version of the Model Context Protocol that the client supports. The client MAY decide to support older versions as well.
*/
protocolVersion: z2.string(),
capabilities: ClientCapabilitiesSchema2,
clientInfo: ImplementationSchema2
})
});
var isInitializeRequest = (value) => InitializeRequestSchema2.safeParse(value).success;
var ServerCapabilitiesSchema2 = z2.object({
/**
* Experimental, non-standard capabilities that the server supports.
*/
experimental: z2.optional(z2.object({}).passthrough()),
/**
* Present if the server supports sending log messages to the client.
*/
logging: z2.optional(z2.object({}).passthrough()),
/**
* Present if the server supports sending completions to the client.
*/
completions: z2.optional(z2.object({}).passthrough()),
/**
* Present if the server offers any prompt templates.
*/
prompts: z2.optional(z2.object({
/**
* Whether this server supports issuing notifications for changes to the prompt list.
*/
listChanged: z2.optional(z2.boolean())
}).passthrough()),
/**
* Present if the server offers any resources to read.
*/
resources: z2.optional(z2.object({
/**
* Whether this server supports clients subscribing to resource updates.
*/
subscribe: z2.optional(z2.boolean()),
/**
* Whether this server supports issuing notifications for changes to the resource list.
*/
listChanged: z2.optional(z2.boolean())
}).passthrough()),
/**
* Present if the server offers any tools to call.
*/
tools: z2.optional(z2.object({
/**
* Whether this server supports issuing notifications for changes to the tool list.
*/
listChanged: z2.optional(z2.boolean())
}).passthrough())
}).passthrough();
var InitializeResultSchema2 = ResultSchema2.extend({
/**
* The version of the Model Context Protocol that the server wants to use. This may not match the version that the client requested. If the client cannot support this version, it MUST disconnect.
*/
protocolVersion: z2.string(),
capabilities: ServerCapabilitiesSchema2,
serverInfo: ImplementationSchema2,
/**
* Instructions describing how to use the server and its features.
*
* This can be used by clients to improve the LLM's understanding of available tools, resources, etc. It can be thought of like a "hint" to the model. For example, this information MAY be added to the system prompt.
*/
instructions: z2.optional(z2.string())
});
var InitializedNotificationSchema2 = NotificationSchema2.extend({
method: z2.literal("notifications/initialized")
});
var PingRequestSchema2 = RequestSchema2.extend({
method: z2.literal("ping")
});
var ProgressSchema2 = z2.object({
/**
* The progress thus far. This should increase every time progress is made, even if the total is unknown.
*/
progress: z2.number(),
/**
* Total number of items to process (or total progress required), if known.
*/
total: z2.optional(z2.number()),
/**
* An optional message describing the current progress.
*/
message: z2.optional(z2.string())
}).passthrough();
var ProgressNotificationSchema2 = NotificationSchema2.extend({
method: z2.literal("notifications/progress"),
params: BaseNotificationParamsSchema2.merge(ProgressSchema2).extend({
/**
* The progress token which was given in the initial request, used to associate this notification with the request that is proceeding.
*/
progressToken: ProgressTokenSchema2
})
});
var PaginatedRequestSchema2 = RequestSchema2.extend({
params: BaseRequestParamsSchema2.extend({
/**
* An opaque token representing the current pagination position.
* If provided, the server should return results starting after this cursor.
*/
cursor: z2.optional(CursorSchema2)
}).optional()
});
var PaginatedResultSchema2 = ResultSchema2.extend({
/**
* An opaque token representing the pagination position after the last returned result.
* If present, there may be more results available.
*/
nextCursor: z2.optional(CursorSchema2)
});
var ResourceContentsSchema2 = z2.object({
/**
* The URI of this resource.
*/
uri: z2.string(),
/**
* The MIME type of this resource, if known.
*/
mimeType: z2.optional(z2.string()),
/**
* See [MCP specification](https://github.com/modelcontextprotocol/modelcontextprotocol/blob/47339c03c143bb4ec01a26e721a1b8fe66634ebe/docs/specification/draft/basic/index.mdx#general-fields)
* for notes on _meta usage.
*/
_meta: z2.optional(z2.object({}).passthrough())
}).passthrough();
var TextResourceContentsSchema2 = ResourceContentsSchema2.extend({
/**
* The text of the item. This must only be set if the item can actually be represented as text (not binary data).
*/
text: z2.string()
});
var Base64Schema2 = z2.string().refine((val2) => {
try {
atob(val2);
return true;
} catch (_a2) {
return false;
}
}, { message: "Invalid Base64 string" });
var BlobResourceContentsSchema2 = ResourceContentsSchema2.extend({
/**
* A base64-encoded string representing the binary data of the item.
*/
blob: Base64Schema2
});
var ResourceSchema2 = BaseMetadataSchema2.extend({
/**
* The URI of this resource.
*/
uri: z2.string(),
/**
* A description of what this resource represents.
*
* This can be used by clients to improve the LLM's understanding of available resources. It can be thought of like a "hint" to the model.
*/
description: z2.optional(z2.string()),
/**
* The MIME type of this resource, if known.
*/
mimeType: z2.optional(z2.string()),
/**
* See [MCP specification](https://github.com/modelcontextprotocol/modelcontextprotocol/blob/47339c03c143bb4ec01a26e721a1b8fe66634ebe/docs/specification/draft/basic/index.mdx#general-fields)
* for notes on _meta usage.
*/
_meta: z2.optional(z2.object({}).passthrough())
});
var ResourceTemplateSchema2 = BaseMetadataSchema2.extend({
/**
* A URI template (according to RFC 6570) that can be used to construct resource URIs.
*/
uriTemplate: z2.string(),
/**
* A description of what this template is for.
*
* This can be used by clients to improve the LLM's understanding of available resources. It can be thought of like a "hint" to the model.
*/
description: z2.optional(z2.string()),
/**
* The MIME type for all resources that match this template. This should only be included if all resources matching this template have the same type.
*/
mimeType: z2.optional(z2.string()),
/**
* See [MCP specification](https://github.com/modelcontextprotocol/modelcontextprotocol/blob/47339c03c143bb4ec01a26e721a1b8fe66634ebe/docs/specification/draft/basic/index.mdx#general-fields)
* for notes on _meta usage.
*/
_meta: z2.optional(z2.object({}).passthrough())
});
var ListResourcesRequestSchema2 = PaginatedRequestSchema2.extend({
method: z2.literal("resources/list")
});
var ListResourcesResultSchema2 = PaginatedResultSchema2.extend({
resources: z2.array(ResourceSchema2)
});
var ListResourceTemplatesRequestSchema2 = PaginatedRequestSchema2.extend({
method: z2.literal("resources/templates/list")
});
var ListResourceTemplatesResultSchema2 = PaginatedResultSchema2.extend({
resourceTemplates: z2.array(ResourceTemplateSchema2)
});
var ReadResourceRequestSchema2 = RequestSchema2.extend({
method: z2.literal("resources/read"),
params: BaseRequestParamsSchema2.extend({
/**
* The URI of the resource to read. The URI can use any protocol; it is up to the server how to interpret it.
*/
uri: z2.string()
})
});
var ReadResourceResultSchema2 = ResultSchema2.extend({
contents: z2.array(z2.union([TextResourceContentsSchema2, BlobResourceContentsSchema2]))
});
var ResourceListChangedNotificationSchema2 = NotificationSchema2.extend({
method: z2.literal("notifications/resources/list_changed")
});
var SubscribeRequestSchema2 = RequestSchema2.extend({
method: z2.literal("resources/subscribe"),
params: BaseRequestParamsSchema2.extend({
/**
* The URI of the resource to subscribe to. The URI can use any protocol; it is up to the server how to interpret it.
*/
uri: z2.string()
})
});
var UnsubscribeRequestSchema2 = RequestSchema2.extend({
method: z2.literal("resources/unsubscribe"),
params: BaseRequestParamsSchema2.extend({
/**
* The URI of the resource to unsubscribe from.
*/
uri: z2.string()
})
});
var ResourceUpdatedNotificationSchema2 = NotificationSchema2.extend({
method: z2.literal("notifications/resources/updated"),
params: BaseNotificationParamsSchema2.extend({
/**
* The URI of the resource that has been updated. This might be a sub-resource of the one that the client actually subscribed to.
*/
uri: z2.string()
})
});
var PromptArgumentSchema2 = z2.object({
/**
* The name of the argument.
*/
name: z2.string(),
/**
* A human-readable description of the argument.
*/
description: z2.optional(z2.string()),
/**
* Whether this argument must be provided.
*/
required: z2.optional(z2.boolean())
}).passthrough();
var PromptSchema2 = BaseMetadataSchema2.extend({
/**
* An optional description of what this prompt provides
*/
description: z2.optional(z2.string()),
/**
* A list of arguments to use for templating the prompt.
*/
arguments: z2.optional(z2.array(PromptArgumentSchema2)),
/**
* See [MCP specification](https://github.com/modelcontextprotocol/modelcontextprotocol/blob/47339c03c143bb4ec01a26e721a1b8fe66634ebe/docs/specification/draft/basic/index.mdx#general-fields)
* for notes on _meta usage.
*/
_meta: z2.optional(z2.object({}).passthrough())
});
var ListPromptsRequestSchema2 = PaginatedRequestSchema2.extend({
method: z2.literal("prompts/list")
});
var ListPromptsResultSchema2 = PaginatedResultSchema2.extend({
prompts: z2.array(PromptSchema2)
});
var GetPromptRequestSchema2 = RequestSchema2.extend({
method: z2.literal("prompts/get"),
params: BaseRequestParamsSchema2.extend({
/**
* The name of the prompt or prompt template.
*/
name: z2.string(),
/**
* Arguments to use for templating the prompt.
*/
arguments: z2.optional(z2.record(z2.string()))
})
});
var TextContentSchema2 = z2.object({
type: z2.literal("text"),
/**
* The text content of the message.
*/
text: z2.string(),
/**
* See [MCP specification](https://github.com/modelcontextprotocol/modelcontextprotocol/blob/47339c03c143bb4ec01a26e721a1b8fe66634ebe/docs/specification/draft/basic/index.mdx#general-fields)
* for notes on _meta usage.
*/
_meta: z2.optional(z2.object({}).passthrough())
}).passthrough();
var ImageContentSchema2 = z2.object({
type: z2.literal("image"),
/**
* The base64-encoded image data.
*/
data: Base64Schema2,
/**
* The MIME type of the image. Different providers may support different image types.
*/
mimeType: z2.string(),
/**
* See [MCP specification](https://github.com/modelcontextprotocol/modelcontextprotocol/blob/47339c03c143bb4ec01a26e721a1b8fe66634ebe/docs/specification/draft/basic/index.mdx#general-fields)
* for notes on _meta usage.
*/
_meta: z2.optional(z2.object({}).passthrough())
}).passthrough();
var AudioContentSchema2 = z2.object({
type: z2.literal("audio"),
/**
* The base64-encoded audio data.
*/
data: Base64Schema2,
/**
* The MIME type of the audio. Different providers may support different audio types.
*/
mimeType: z2.string(),
/**
* See [MCP specification](https://github.com/modelcontextprotocol/modelcontextprotocol/blob/47339c03c143bb4ec01a26e721a1b8fe66634ebe/docs/specification/draft/basic/index.mdx#general-fields)
* for notes on _meta usage.
*/
_meta: z2.optional(z2.object({}).passthrough())
}).passthrough();
var EmbeddedResourceSchema2 = z2.object({
type: z2.literal("resource"),
resource: z2.union([TextResourceContentsSchema2, BlobResourceContentsSchema2]),
/**
* See [MCP specification](https://github.com/modelcontextprotocol/modelcontextprotocol/blob/47339c03c143bb4ec01a26e721a1b8fe66634ebe/docs/specification/draft/basic/index.mdx#general-fields)
* for notes on _meta usage.
*/
_meta: z2.optional(z2.object({}).passthrough())
}).passthrough();
var ResourceLinkSchema2 = ResourceSchema2.extend({
type: z2.literal("resource_link")
});
var ContentBlockSchema2 = z2.union([
TextContentSchema2,
ImageContentSchema2,
AudioContentSchema2,
ResourceLinkSchema2,
EmbeddedResourceSchema2
]);
var PromptMessageSchema2 = z2.object({
role: z2.enum(["user", "assistant"]),
content: ContentBlockSchema2
}).passthrough();
var GetPromptResultSchema2 = ResultSchema2.extend({
/**
* An optional description for the prompt.
*/
description: z2.optional(z2.string()),
messages: z2.array(PromptMessageSchema2)
});
var PromptListChangedNotificationSchema2 = NotificationSchema2.extend({
method: z2.literal("notifications/prompts/list_changed")
});
var ToolAnnotationsSchema2 = z2.object({
/**
* A human-readable title for the tool.
*/
title: z2.optional(z2.string()),
/**
* If true, the tool does not modify its environment.
*
* Default: false
*/
readOnlyHint: z2.optional(z2.boolean()),
/**
* If true, the tool may perform destructive updates to its environment.
* If false, the tool performs only additive updates.
*
* (This property is meaningful only when `readOnlyHint == false`)
*
* Default: true
*/
destructiveHint: z2.optional(z2.boolean()),
/**
* If true, calling the tool repeatedly with the same arguments
* will have no additional effect on the its environment.
*
* (This property is meaningful only when `readOnlyHint == false`)
*
* Default: false
*/
idempotentHint: z2.optional(z2.boolean()),
/**
* If true, this tool may interact with an "open world" of external
* entities. If false, the tool's domain of interaction is closed.
* For example, the world of a web search tool is open, whereas that
* of a memory tool is not.
*
* Default: true
*/
openWorldHint: z2.optional(z2.boolean())
}).passthrough();
var ToolSchema2 = BaseMetadataSchema2.extend({
/**
* A human-readable description of the tool.
*/
description: z2.optional(z2.string()),
/**
* A JSON Schema object defining the expected parameters for the tool.
*/
inputSchema: z2.object({
type: z2.literal("object"),
properties: z2.optional(z2.object({}).passthrough()),
required: z2.optional(z2.array(z2.string()))
}).passthrough(),
/**
* An optional JSON Schema object defining the structure of the tool's output returned in
* the structuredContent field of a CallToolResult.
*/
outputSchema: z2.optional(z2.object({
type: z2.literal("object"),
properties: z2.optional(z2.object({}).passthrough()),
required: z2.optional(z2.array(z2.string()))
}).passthrough()),
/**
* Optional additional tool information.
*/
annotations: z2.optional(ToolAnnotationsSchema2),
/**
* See [MCP specification](https://github.com/modelcontextprotocol/modelcontextprotocol/blob/47339c03c143bb4ec01a26e721a1b8fe66634ebe/docs/specification/draft/basic/index.mdx#general-fields)
* for notes on _meta usage.
*/
_meta: z2.optional(z2.object({}).passthrough())
});
var ListToolsRequestSchema2 = PaginatedRequestSchema2.extend({
method: z2.literal("tools/list")
});
var ListToolsResultSchema2 = PaginatedResultSchema2.extend({
tools: z2.array(ToolSchema2)
});
var CallToolResultSchema2 = ResultSchema2.extend({
/**
* A list of content objects that represent the result of the tool call.
*
* If the Tool does not define an outputSchema, this field MUST be present in the result.
* For backwards compatibility, this field is always present, but it may be empty.
*/
content: z2.array(ContentBlockSchema2).default([]),
/**
* An object containing structured tool output.
*
* If the Tool defines an outputSchema, this field MUST be present in the result, and contain a JSON object that matches the schema.
*/
structuredContent: z2.object({}).passthrough().optional(),
/**
* Whether the tool call ended in an error.
*
* If not set, this is assumed to be false (the call was successful).
*
* Any errors that originate from the tool SHOULD be reported inside the result
* object, with `isError` set to true, _not_ as an MCP protocol-level error
* response. Otherwise, the LLM would not be able to see that an error occurred
* and self-correct.
*
* However, any errors in _finding_ the tool, an error indicating that the
* server does not support tool calls, or any other exceptional conditions,
* should be reported as an MCP error response.
*/
isError: z2.optional(z2.boolean())
});
var CompatibilityCallToolResultSchema2 = CallToolResultSchema2.or(ResultSchema2.extend({
toolResult: z2.unknown()
}));
var CallToolRequestSchema2 = RequestSchema2.extend({
method: z2.literal("tools/call"),
params: BaseRequestParamsSchema2.extend({
name: z2.string(),
arguments: z2.optional(z2.record(z2.unknown()))
})
});
var ToolListChangedNotificationSchema2 = NotificationSchema2.extend({
method: z2.literal("notifications/tools/list_changed")
});
var LoggingLevelSchema2 = z2.enum([
"debug",
"info",
"notice",
"warning",
"error",
"critical",
"alert",
"emergency"
]);
var SetLevelRequestSchema2 = RequestSchema2.extend({
method: z2.literal("logging/setLevel"),
params: BaseRequestParamsSchema2.extend({
/**
* The level of logging that the client wants to receive from the server. The server should send all logs at this level and higher (i.e., more severe) to the client as notifications/logging/message.
*/
level: LoggingLevelSchema2
})
});
var LoggingMessageNotificationSchema2 = NotificationSchema2.extend({
method: z2.literal("notifications/message"),
params: BaseNotificationParamsSchema2.extend({
/**
* The severity of this log message.
*/
level: LoggingLevelSchema2,
/**
* An optional name of the logger issuing this message.
*/
logger: z2.optional(z2.string()),
/**
* The data to be logged, such as a string message or an object. Any JSON serializable type is allowed here.
*/
data: z2.unknown()
})
});
var ModelHintSchema2 = z2.object({
/**
* A hint for a model name.
*/
name: z2.string().optional()
}).passthrough();
var ModelPreferencesSchema2 = z2.object({
/**
* Optional hints to use for model selection.
*/
hints: z2.optional(z2.array(ModelHintSchema2)),
/**
* How much to prioritize cost when selecting a model.
*/
costPriority: z2.optional(z2.number().min(0).max(1)),
/**
* How much to prioritize sampling speed (latency) when selecting a model.
*/
speedPriority: z2.optional(z2.number().min(0).max(1)),
/**
* How much to prioritize intelligence and capabilities when selecting a model.
*/
intelligencePriority: z2.optional(z2.number().min(0).max(1))
}).passthrough();
var SamplingMessageSchema2 = z2.object({
role: z2.enum(["user", "assistant"]),
content: z2.union([TextContentSchema2, ImageContentSchema2, AudioContentSchema2])
}).passthrough();
var CreateMessageRequestSchema2 = RequestSchema2.extend({
method: z2.literal("sampling/createMessage"),
params: BaseRequestParamsSchema2.extend({
messages: z2.array(SamplingMessageSchema2),
/**
* An optional system prompt the server wants to use for sampling. The client MAY modify or omit this prompt.
*/
systemPrompt: z2.optional(z2.string()),
/**
* A request to include context from one or more MCP servers (including the caller), to be attached to the prompt. The client MAY ignore this request.
*/
includeContext: z2.optional(z2.enum(["none", "thisServer", "allServers"])),
temperature: z2.optional(z2.number()),
/**
* The maximum number of tokens to sample, as requested by the server. The client MAY choose to sample fewer tokens than requested.
*/
maxTokens: z2.number().int(),
stopSequences: z2.optional(z2.array(z2.string())),
/**
* Optional metadata to pass through to the LLM provider. The format of this metadata is provider-specific.
*/
metadata: z2.optional(z2.object({}).passthrough()),
/**
* The server's preferences for which model to select.
*/
modelPreferences: z2.optional(ModelPreferencesSchema2)
})
});
var CreateMessageResultSchema2 = ResultSchema2.extend({
/**
* The name of the model that generated the message.
*/
model: z2.string(),
/**
* The reason why sampling stopped.
*/
stopReason: z2.optional(z2.enum(["endTurn", "stopSequence", "maxTokens"]).or(z2.string())),
role: z2.enum(["user", "assistant"]),
content: z2.discriminatedUnion("type", [
TextContentSchema2,
ImageContentSchema2,
AudioContentSchema2
])
});
var BooleanSchemaSchema2 = z2.object({
type: z2.literal("boolean"),
title: z2.optional(z2.string()),
description: z2.optional(z2.string()),
default: z2.optional(z2.boolean())
}).passthrough();
var StringSchemaSchema2 = z2.object({
type: z2.literal("string"),
title: z2.optional(z2.string()),
description: z2.optional(z2.string()),
minLength: z2.optional(z2.number()),
maxLength: z2.optional(z2.number()),
format: z2.optional(z2.enum(["email", "uri", "date", "date-time"]))
}).passthrough();
var NumberSchemaSchema2 = z2.object({
type: z2.enum(["number", "integer"]),
title: z2.optional(z2.string()),
description: z2.optional(z2.string()),
minimum: z2.optional(z2.number()),
maximum: z2.optional(z2.number())
}).passthrough();
var EnumSchemaSchema2 = z2.object({
type: z2.literal("string"),
title: z2.optional(z2.string()),
description: z2.optional(z2.string()),
enum: z2.array(z2.string()),
enumNames: z2.optional(z2.array(z2.string()))
}).passthrough();
var PrimitiveSchemaDefinitionSchema2 = z2.union([
BooleanSchemaSchema2,
StringSchemaSchema2,
NumberSchemaSchema2,
EnumSchemaSchema2
]);
var ElicitRequestSchema2 = RequestSchema2.extend({
method: z2.literal("elicitation/create"),
params: BaseRequestParamsSchema2.extend({
/**
* The message to present to the user.
*/
message: z2.string(),
/**
* The schema for the requested user input.
*/
requestedSchema: z2.object({
type: z2.literal("object"),
properties: z2.record(z2.string(), PrimitiveSchemaDefinitionSchema2),
required: z2.optional(z2.array(z2.string()))
}).passthrough()
})
});
var ElicitResultSchema2 = ResultSchema2.extend({
/**
* The user's response action.
*/
action: z2.enum(["accept", "decline", "cancel"]),
/**
* The collected user input content (only present if action is "accept").
*/
content: z2.optional(z2.record(z2.string(), z2.unknown()))
});
var ResourceTemplateReferenceSchema2 = z2.object({
type: z2.literal("ref/resource"),
/**
* The URI or URI template of the resource.
*/
uri: z2.string()
}).passthrough();
var PromptReferenceSchema2 = z2.object({
type: z2.literal("ref/prompt"),
/**
* The name of the prompt or prompt template
*/
name: z2.string()
}).passthrough();
var CompleteRequestSchema2 = RequestSchema2.extend({
method: z2.literal("completion/complete"),
params: BaseRequestParamsSchema2.extend({
ref: z2.union([PromptReferenceSchema2, ResourceTemplateReferenceSchema2]),
/**
* The argument's information
*/
argument: z2.object({
/**
* The name of the argument
*/
name: z2.string(),
/**
* The value of the argument to use for completion matching.
*/
value: z2.string()
}).passthrough(),
context: z2.optional(z2.object({
/**
* Previously-resolved variables in a URI template or prompt.
*/
arguments: z2.optional(z2.record(z2.string(), z2.string()))
}))
})
});
var CompleteResultSchema2 = ResultSchema2.extend({
completion: z2.object({
/**
* An array of completion values. Must not exceed 100 items.
*/
values: z2.array(z2.string()).max(100),
/**
* The total number of completion options available. This can exceed the number of values actually sent in the response.
*/
total: z2.optional(z2.number().int()),
/**
* Indicates whether there are additional completion options beyond those provided in the current response, even if the exact total is unknown.
*/
hasMore: z2.optional(z2.boolean())
}).passthrough()
});
var RootSchema2 = z2.object({
/**
* The URI identifying the root. This *must* start with file:// for now.
*/
uri: z2.string().startsWith("file://"),
/**
* An optional name for the root.
*/
name: z2.optional(z2.string()),
/**
* See [MCP specification](https://github.com/modelcontextprotocol/modelcontextprotocol/blob/47339c03c143bb4ec01a26e721a1b8fe66634ebe/docs/specification/draft/basic/index.mdx#general-fields)
* for notes on _meta usage.
*/
_meta: z2.optional(z2.object({}).passthrough())
}).passthrough();
var ListRootsRequestSchema2 = RequestSchema2.extend({
method: z2.literal("roots/list")
});
var ListRootsResultSchema2 = ResultSchema2.extend({
roots: z2.array(RootSchema2)
});
var RootsListChangedNotificationSchema2 = NotificationSchema2.extend({
method: z2.literal("notifications/roots/list_changed")
});
var ClientRequestSchema2 = z2.union([
PingRequestSchema2,
InitializeRequestSchema2,
CompleteRequestSchema2,
SetLevelRequestSchema2,
GetPromptRequestSchema2,
ListPromptsRequestSchema2,
ListResourcesRequestSchema2,
ListResourceTemplatesRequestSchema2,
ReadResourceRequestSchema2,
SubscribeRequestSchema2,
UnsubscribeRequestSchema2,
CallToolRequestSchema2,
ListToolsRequestSchema2
]);
var ClientNotificationSchema2 = z2.union([
CancelledNotificationSchema2,
ProgressNotificationSchema2,
InitializedNotificationSchema2,
RootsListChangedNotificationSchema2
]);
var ClientResultSchema2 = z2.union([
EmptyResultSchema2,
CreateMessageResultSchema2,
ElicitResultSchema2,
ListRootsResultSchema2
]);
var ServerRequestSchema2 = z2.union([
PingRequestSchema2,
CreateMessageRequestSchema2,
ElicitRequestSchema2,
ListRootsRequestSchema2
]);
var ServerNotificationSchema2 = z2.union([
CancelledNotificationSchema2,
ProgressNotificationSchema2,
LoggingMessageNotificationSchema2,
ResourceUpdatedNotificationSchema2,
ResourceListChangedNotificationSchema2,
ToolListChangedNotificationSchema2,
PromptListChangedNotificationSchema2
]);
var ServerResultSchema2 = z2.union([
EmptyResultSchema2,
InitializeResultSchema2,
CompleteResultSchema2,
GetPromptResultSchema2,
ListPromptsResultSchema2,
ListResourcesResultSchema2,
ListResourceTemplatesResultSchema2,
ReadResourceResultSchema2,
CallToolResultSchema2,
ListToolsResultSchema2
]);
var import_raw_body = __toESM2(require_raw_body(), 1);
var import_content_type = __toESM2(require_content_type(), 1);
var import_node_crypto = require("node:crypto");
var MAXIMUM_MESSAGE_SIZE = "4mb";
var StreamableHTTPServerTransport = class {
constructor(options) {
var _a2, _b;
this._started = false;
this._streamMapping = /* @__PURE__ */ new Map();
this._requestToStreamMapping = /* @__PURE__ */ new Map();
this._requestResponseMap = /* @__PURE__ */ new Map();
this._initialized = false;
this._enableJsonResponse = false;
this._standaloneSseStreamId = "_GET_stream";
this.sessionIdGenerator = options.sessionIdGenerator;
this._enableJsonResponse = (_a2 = options.enableJsonResponse) !== null && _a2 !== void 0 ? _a2 : false;
this._eventStore = options.eventStore;
this._onsessioninitialized = options.onsessioninitialized;
this._onsessionclosed = options.onsessionclosed;
this._allowedHosts = options.allowedHosts;
this._allowedOrigins = options.allowedOrigins;
this._enableDnsRebindingProtection = (_b = options.enableDnsRebindingProtection) !== null && _b !== void 0 ? _b : false;
}
/**
* Starts the transport. This is required by the Transport interface but is a no-op
* for the Streamable HTTP transport as connections are managed per-request.
*/
async start() {
if (this._started) {
throw new Error("Transport already started");
}
this._started = true;
}
/**
* Validates request headers for DNS rebinding protection.
* @returns Error message if validation fails, undefined if validation passes.
*/
validateRequestHeaders(req) {
if (!this._enableDnsRebindingProtection) {
return void 0;
}
if (this._allowedHosts && this._allowedHosts.length > 0) {
const hostHeader = req.headers.host;
if (!hostHeader || !this._allowedHosts.includes(hostHeader)) {
return `Invalid Host header: ${hostHeader}`;
}
}
if (this._allowedOrigins && this._allowedOrigins.length > 0) {
const originHeader = req.headers.origin;
if (!originHeader || !this._allowedOrigins.includes(originHeader)) {
return `Invalid Origin header: ${originHeader}`;
}
}
return void 0;
}
/**
* Handles an incoming HTTP request, whether GET or POST
*/
async handleRequest(req, res, parsedBody) {
var _a2;
const validationError = this.validateRequestHeaders(req);
if (validationError) {
res.writeHead(403).end(JSON.stringify({
jsonrpc: "2.0",
error: {
code: -32e3,
message: validationError
},
id: null
}));
(_a2 = this.onerror) === null || _a2 === void 0 ? void 0 : _a2.call(this, new Error(validationError));
return;
}
if (req.method === "POST") {
await this.handlePostRequest(req, res, parsedBody);
} else if (req.method === "GET") {
await this.handleGetRequest(req, res);
} else if (req.method === "DELETE") {
await this.handleDeleteRequest(req, res);
} else {
await this.handleUnsupportedRequest(res);
}
}
/**
* Handles GET requests for SSE stream
*/
async handleGetRequest(req, res) {
const acceptHeader = req.headers.accept;
if (!(acceptHeader === null || acceptHeader === void 0 ? void 0 : acceptHeader.includes("text/event-stream"))) {
res.writeHead(406).end(JSON.stringify({
jsonrpc: "2.0",
error: {
code: -32e3,
message: "Not Acceptable: Client must accept text/event-stream"
},
id: null
}));
return;
}
if (!this.validateSession(req, res)) {
return;
}
if (!this.validateProtocolVersion(req, res)) {
return;
}
if (this._eventStore) {
const lastEventId = req.headers["last-event-id"];
if (lastEventId) {
await this.replayEvents(lastEventId, res);
return;
}
}
const headers = {
"Content-Type": "text/event-stream",
"Cache-Control": "no-cache, no-transform",
Connection: "keep-alive"
};
if (this.sessionId !== void 0) {
headers["mcp-session-id"] = this.sessionId;
}
if (this._streamMapping.get(this._standaloneSseStreamId) !== void 0) {
res.writeHead(409).end(JSON.stringify({
jsonrpc: "2.0",
error: {
code: -32e3,
message: "Conflict: Only one SSE stream is allowed per session"
},
id: null
}));
return;
}
res.writeHead(200, headers).flushHeaders();
this._streamMapping.set(this._standaloneSseStreamId, res);
res.on("close", () => {
this._streamMapping.delete(this._standaloneSseStreamId);
});
}
/**
* Replays events that would have been sent after the specified event ID
* Only used when resumability is enabled
*/
async replayEvents(lastEventId, res) {
var _a2, _b;
if (!this._eventStore) {
return;
}
try {
const headers = {
"Content-Type": "text/event-stream",
"Cache-Control": "no-cache, no-transform",
Connection: "keep-alive"
};
if (this.sessionId !== void 0) {
headers["mcp-session-id"] = this.sessionId;
}
res.writeHead(200, headers).flushHeaders();
const streamId = await ((_a2 = this._eventStore) === null || _a2 === void 0 ? void 0 : _a2.replayEventsAfter(lastEventId, {
send: async (eventId, message) => {
var _a22;
if (!this.writeSSEEvent(res, message, eventId)) {
(_a22 = this.onerror) === null || _a22 === void 0 ? void 0 : _a22.call(this, new Error("Failed replay events"));
res.end();
}
}
}));
this._streamMapping.set(streamId, res);
} catch (error) {
(_b = this.onerror) === null || _b === void 0 ? void 0 : _b.call(this, error);
}
}
/**
* Writes an event to the SSE stream with proper formatting
*/
writeSSEEvent(res, message, eventId) {
let eventData = `event: message
`;
if (eventId) {
eventData += `id: ${eventId}
`;
}
eventData += `data: ${JSON.stringify(message)}
`;
return res.write(eventData);
}
/**
* Handles unsupported requests (PUT, PATCH, etc.)
*/
async handleUnsupportedRequest(res) {
res.writeHead(405, {
"Allow": "GET, POST, DELETE"
}).end(JSON.stringify({
jsonrpc: "2.0",
error: {
code: -32e3,
message: "Method not allowed."
},
id: null
}));
}
/**
* Handles POST requests containing JSON-RPC messages
*/
async handlePostRequest(req, res, parsedBody) {
var _a2, _b, _c, _d, _e;
try {
const acceptHeader = req.headers.accept;
if (!(acceptHeader === null || acceptHeader === void 0 ? void 0 : acceptHeader.includes("application/json")) || !acceptHeader.includes("text/event-stream")) {
res.writeHead(406).end(JSON.stringify({
jsonrpc: "2.0",
error: {
code: -32e3,
message: "Not Acceptable: Client must accept both application/json and text/event-stream"
},
id: null
}));
return;
}
const ct = req.headers["content-type"];
if (!ct || !ct.includes("application/json")) {
res.writeHead(415).end(JSON.stringify({
jsonrpc: "2.0",
error: {
code: -32e3,
message: "Unsupported Media Type: Content-Type must be application/json"
},
id: null
}));
return;
}
const authInfo = req.auth;
const requestInfo = { headers: req.headers };
let rawMessage;
if (parsedBody !== void 0) {
rawMessage = parsedBody;
} else {
const parsedCt = import_content_type.default.parse(ct);
const body = await (0, import_raw_body.default)(req, {
limit: MAXIMUM_MESSAGE_SIZE,
encoding: (_a2 = parsedCt.parameters.charset) !== null && _a2 !== void 0 ? _a2 : "utf-8"
});
rawMessage = JSON.parse(body.toString());
}
let messages;
if (Array.isArray(rawMessage)) {
messages = rawMessage.map((msg) => JSONRPCMessageSchema2.parse(msg));
} else {
messages = [JSONRPCMessageSchema2.parse(rawMessage)];
}
const isInitializationRequest = messages.some(isInitializeRequest);
if (isInitializationRequest) {
if (this._initialized && this.sessionId !== void 0) {
res.writeHead(400).end(JSON.stringify({
jsonrpc: "2.0",
error: {
code: -32600,
message: "Invalid Request: Server already initialized"
},
id: null
}));
return;
}
if (messages.length > 1) {
res.writeHead(400).end(JSON.stringify({
jsonrpc: "2.0",
error: {
code: -32600,
message: "Invalid Request: Only one initialization request is allowed"
},
id: null
}));
return;
}
this.sessionId = (_b = this.sessionIdGenerator) === null || _b === void 0 ? void 0 : _b.call(this);
this._initialized = true;
if (this.sessionId && this._onsessioninitialized) {
await Promise.resolve(this._onsessioninitialized(this.sessionId));
}
}
if (!isInitializationRequest) {
if (!this.validateSession(req, res)) {
return;
}
if (!this.validateProtocolVersion(req, res)) {
return;
}
}
const hasRequests = messages.some(isJSONRPCRequest2);
if (!hasRequests) {
res.writeHead(202).end();
for (const message of messages) {
(_c = this.onmessage) === null || _c === void 0 ? void 0 : _c.call(this, message, { authInfo, requestInfo });
}
} else if (hasRequests) {
const streamId = (0, import_node_crypto.randomUUID)();
if (!this._enableJsonResponse) {
const headers = {
"Content-Type": "text/event-stream",
"Cache-Control": "no-cache",
Connection: "keep-alive"
};
if (this.sessionId !== void 0) {
headers["mcp-session-id"] = this.sessionId;
}
res.writeHead(200, headers);
}
for (const message of messages) {
if (isJSONRPCRequest2(message)) {
this._streamMapping.set(streamId, res);
this._requestToStreamMapping.set(message.id, streamId);
}
}
res.on("close", () => {
this._streamMapping.delete(streamId);
});
for (const message of messages) {
(_d = this.onmessage) === null || _d === void 0 ? void 0 : _d.call(this, message, { authInfo, requestInfo });
}
}
} catch (error) {
res.writeHead(400).end(JSON.stringify({
jsonrpc: "2.0",
error: {
code: -32700,
message: "Parse error",
data: String(error)
},
id: null
}));
(_e = this.onerror) === null || _e === void 0 ? void 0 : _e.call(this, error);
}
}
/**
* Handles DELETE requests to terminate sessions
*/
async handleDeleteRequest(req, res) {
var _a2;
if (!this.validateSession(req, res)) {
return;
}
if (!this.validateProtocolVersion(req, res)) {
return;
}
await Promise.resolve((_a2 = this._onsessionclosed) === null || _a2 === void 0 ? void 0 : _a2.call(this, this.sessionId));
await this.close();
res.writeHead(200).end();
}
/**
* Validates session ID for non-initialization requests
* Returns true if the session is valid, false otherwise
*/
validateSession(req, res) {
if (this.sessionIdGenerator === void 0) {
return true;
}
if (!this._initialized) {
res.writeHead(400).end(JSON.stringify({
jsonrpc: "2.0",
error: {
code: -32e3,
message: "Bad Request: Server not initialized"
},
id: null
}));
return false;
}
const sessionId = req.headers["mcp-session-id"];
if (!sessionId) {
res.writeHead(400).end(JSON.stringify({
jsonrpc: "2.0",
error: {
code: -32e3,
message: "Bad Request: Mcp-Session-Id header is required"
},
id: null
}));
return false;
} else if (Array.isArray(sessionId)) {
res.writeHead(400).end(JSON.stringify({
jsonrpc: "2.0",
error: {
code: -32e3,
message: "Bad Request: Mcp-Session-Id header must be a single value"
},
id: null
}));
return false;
} else if (sessionId !== this.sessionId) {
res.writeHead(404).end(JSON.stringify({
jsonrpc: "2.0",
error: {
code: -32001,
message: "Session not found"
},
id: null
}));
return false;
}
return true;
}
validateProtocolVersion(req, res) {
var _a2;
let protocolVersion = (_a2 = req.headers["mcp-protocol-version"]) !== null && _a2 !== void 0 ? _a2 : DEFAULT_NEGOTIATED_PROTOCOL_VERSION;
if (Array.isArray(protocolVersion)) {
protocolVersion = protocolVersion[protocolVersion.length - 1];
}
if (!SUPPORTED_PROTOCOL_VERSIONS2.includes(protocolVersion)) {
res.writeHead(400).end(JSON.stringify({
jsonrpc: "2.0",
error: {
code: -32e3,
message: `Bad Request: Unsupported protocol version (supported versions: ${SUPPORTED_PROTOCOL_VERSIONS2.join(", ")})`
},
id: null
}));
return false;
}
return true;
}
async close() {
var _a2;
this._streamMapping.forEach((response) => {
response.end();
});
this._streamMapping.clear();
this._requestResponseMap.clear();
(_a2 = this.onclose) === null || _a2 === void 0 ? void 0 : _a2.call(this);
}
async send(message, options) {
let requestId = options === null || options === void 0 ? void 0 : options.relatedRequestId;
if (isJSONRPCResponse2(message) || isJSONRPCError2(message)) {
requestId = message.id;
}
if (requestId === void 0) {
if (isJSONRPCResponse2(message) || isJSONRPCError2(message)) {
throw new Error("Cannot send a response on a standalone SSE stream unless resuming a previous client request");
}
const standaloneSse = this._streamMapping.get(this._standaloneSseStreamId);
if (standaloneSse === void 0) {
return;
}
let eventId;
if (this._eventStore) {
eventId = await this._eventStore.storeEvent(this._standaloneSseStreamId, message);
}
this.writeSSEEvent(standaloneSse, message, eventId);
return;
}
const streamId = this._requestToStreamMapping.get(requestId);
const response = this._streamMapping.get(streamId);
if (!streamId) {
throw new Error(`No connection established for request ID: ${String(requestId)}`);
}
if (!this._enableJsonResponse) {
let eventId;
if (this._eventStore) {
eventId = await this._eventStore.storeEvent(streamId, message);
}
if (response) {
this.writeSSEEvent(response, message, eventId);
}
}
if (isJSONRPCResponse2(message) || isJSONRPCError2(message)) {
this._requestResponseMap.set(requestId, message);
const relatedIds = Array.from(this._requestToStreamMapping.entries()).filter(([_2, streamId2]) => this._streamMapping.get(streamId2) === response).map(([id]) => id);
const allResponsesReady = relatedIds.every((id) => this._requestResponseMap.has(id));
if (allResponsesReady) {
if (!response) {
throw new Error(`No connection established for request ID: ${String(requestId)}`);
}
if (this._enableJsonResponse) {
const headers = {
"Content-Type": "application/json"
};
if (this.sessionId !== void 0) {
headers["mcp-session-id"] = this.sessionId;
}
const responses = relatedIds.map((id) => this._requestResponseMap.get(id));
response.writeHead(200, headers);
if (responses.length === 1) {
response.end(JSON.stringify(responses[0]));
} else {
response.end(JSON.stringify(responses));
}
} else {
response.end();
}
for (const id of relatedIds) {
this._requestResponseMap.delete(id);
this._requestToStreamMapping.delete(id);
}
}
}
}
};
var import_express = __toESM2(require_express2(), 1);
var import_node_crypto2 = require("node:crypto");
var import_lodash = __toESM2(require_lodash(), 1);
function ok(value) {
return { ok: true, value };
}
function err(typeOrPayload, payload) {
if (payload !== void 0) {
return { ok: false, error: { type: typeOrPayload, ...payload } };
}
return { ok: false, error: typeOrPayload };
}
var ignoreOverride = Symbol("Let zodToJsonSchema decide on which parser to use");
var defaultOptions2 = {
name: void 0,
$refStrategy: "root",
basePath: ["#"],
effectStrategy: "input",
pipeStrategy: "all",
dateStrategy: "format:date-time",
mapStrategy: "entries",
removeAdditionalStrategy: "passthrough",
definitionPath: "definitions",
target: "jsonSchema7",
strictUnions: false,
definitions: {},
errorMessages: false,
markdownDescription: false,
patternStrategy: "escape",
applyRegexFlags: false,
emailStrategy: "format:email",
base64Strategy: "contentEncoding:base64",
nameStrategy: "ref"
};
var getDefaultOptions = (options) => typeof options === "string" ? {
...defaultOptions2,
name: options
} : {
...defaultOptions2,
...options
};
var getRefs = (options) => {
const _options = getDefaultOptions(options);
const currentPath = _options.name !== void 0 ? [..._options.basePath, _options.definitionPath, _options.name] : _options.basePath;
return {
..._options,
currentPath,
propertyPath: void 0,
seen: new Map(Object.entries(_options.definitions).map(([name, def]) => [
def._def,
{
def: def._def,
path: [..._options.basePath, _options.definitionPath, name],
// Resolution of references will be forced even though seen, so it's ok that the schema is undefined here for now.
jsonSchema: void 0
}
]))
};
};
function addErrorMessage(res, key, errorMessage, refs) {
if (!refs?.errorMessages)
return;
if (errorMessage) {
res.errorMessage = {
...res.errorMessage,
[key]: errorMessage
};
}
}
function setResponseValueAndErrors(res, key, value, errorMessage, refs) {
res[key] = value;
addErrorMessage(res, key, errorMessage, refs);
}
function parseAnyDef() {
return {};
}
function parseArrayDef(def, refs) {
const res = {
type: "array"
};
if (def.type?._def && def.type?._def?.typeName !== ZodFirstPartyTypeKind2.ZodAny) {
res.items = parseDef(def.type._def, {
...refs,
currentPath: [...refs.currentPath, "items"]
});
}
if (def.minLength) {
setResponseValueAndErrors(res, "minItems", def.minLength.value, def.minLength.message, refs);
}
if (def.maxLength) {
setResponseValueAndErrors(res, "maxItems", def.maxLength.value, def.maxLength.message, refs);
}
if (def.exactLength) {
setResponseValueAndErrors(res, "minItems", def.exactLength.value, def.exactLength.message, refs);
setResponseValueAndErrors(res, "maxItems", def.exactLength.value, def.exactLength.message, refs);
}
return res;
}
function parseBigintDef(def, refs) {
const res = {
type: "integer",
format: "int64"
};
if (!def.checks)
return res;
for (const check of def.checks) {
switch (check.kind) {
case "min":
if (refs.target === "jsonSchema7") {
if (check.inclusive) {
setResponseValueAndErrors(res, "minimum", check.value, check.message, refs);
} else {
setResponseValueAndErrors(res, "exclusiveMinimum", check.value, check.message, refs);
}
} else {
if (!check.inclusive) {
res.exclusiveMinimum = true;
}
setResponseValueAndErrors(res, "minimum", check.value, check.message, refs);
}
break;
case "max":
if (refs.target === "jsonSchema7") {
if (check.inclusive) {
setResponseValueAndErrors(res, "maximum", check.value, check.message, refs);
} else {
setResponseValueAndErrors(res, "exclusiveMaximum", check.value, check.message, refs);
}
} else {
if (!check.inclusive) {
res.exclusiveMaximum = true;
}
setResponseValueAndErrors(res, "maximum", check.value, check.message, refs);
}
break;
case "multipleOf":
setResponseValueAndErrors(res, "multipleOf", check.value, check.message, refs);
break;
}
}
return res;
}
function parseBooleanDef() {
return {
type: "boolean"
};
}
function parseBrandedDef(_def, refs) {
return parseDef(_def.type._def, refs);
}
var parseCatchDef = (def, refs) => {
return parseDef(def.innerType._def, refs);
};
function parseDateDef(def, refs, overrideDateStrategy) {
const strategy = overrideDateStrategy ?? refs.dateStrategy;
if (Array.isArray(strategy)) {
return {
anyOf: strategy.map((item, i) => parseDateDef(def, refs, item))
};
}
switch (strategy) {
case "string":
case "format:date-time":
return {
type: "string",
format: "date-time"
};
case "format:date":
return {
type: "string",
format: "date"
};
case "integer":
return integerDateParser(def, refs);
}
}
var integerDateParser = (def, refs) => {
const res = {
type: "integer",
format: "unix-time"
};
if (refs.target === "openApi3") {
return res;
}
for (const check of def.checks) {
switch (check.kind) {
case "min":
setResponseValueAndErrors(
res,
"minimum",
check.value,
// This is in milliseconds
check.message,
refs
);
break;
case "max":
setResponseValueAndErrors(
res,
"maximum",
check.value,
// This is in milliseconds
check.message,
refs
);
break;
}
}
return res;
};
function parseDefaultDef(_def, refs) {
return {
...parseDef(_def.innerType._def, refs),
default: _def.defaultValue()
};
}
function parseEffectsDef(_def, refs) {
return refs.effectStrategy === "input" ? parseDef(_def.schema._def, refs) : {};
}
function parseEnumDef(def) {
return {
type: "string",
enum: Array.from(def.values)
};
}
var isJsonSchema7AllOfType = (type) => {
if ("type" in type && type.type === "string")
return false;
return "allOf" in type;
};
function parseIntersectionDef(def, refs) {
const allOf = [
parseDef(def.left._def, {
...refs,
currentPath: [...refs.currentPath, "allOf", "0"]
}),
parseDef(def.right._def, {
...refs,
currentPath: [...refs.currentPath, "allOf", "1"]
})
].filter((x) => !!x);
let unevaluatedProperties = refs.target === "jsonSchema2019-09" ? { unevaluatedProperties: false } : void 0;
const mergedAllOf = [];
allOf.forEach((schema) => {
if (isJsonSchema7AllOfType(schema)) {
mergedAllOf.push(...schema.allOf);
if (schema.unevaluatedProperties === void 0) {
unevaluatedProperties = void 0;
}
} else {
let nestedSchema = schema;
if ("additionalProperties" in schema && schema.additionalProperties === false) {
const { additionalProperties, ...rest } = schema;
nestedSchema = rest;
} else {
unevaluatedProperties = void 0;
}
mergedAllOf.push(nestedSchema);
}
});
return mergedAllOf.length ? {
allOf: mergedAllOf,
...unevaluatedProperties
} : void 0;
}
function parseLiteralDef(def, refs) {
const parsedType = typeof def.value;
if (parsedType !== "bigint" && parsedType !== "number" && parsedType !== "boolean" && parsedType !== "string") {
return {
type: Array.isArray(def.value) ? "array" : "object"
};
}
if (refs.target === "openApi3") {
return {
type: parsedType === "bigint" ? "integer" : parsedType,
enum: [def.value]
};
}
return {
type: parsedType === "bigint" ? "integer" : parsedType,
const: def.value
};
}
var emojiRegex22 = void 0;
var zodPatterns = {
/**
* `c` was changed to `[cC]` to replicate /i flag
*/
cuid: /^[cC][^\s-]{8,}$/,
cuid2: /^[0-9a-z]+$/,
ulid: /^[0-9A-HJKMNP-TV-Z]{26}$/,
/**
* `a-z` was added to replicate /i flag
*/
email: /^(?!\.)(?!.*\.\.)([a-zA-Z0-9_'+\-\.]*)[a-zA-Z0-9_+-]@([a-zA-Z0-9][a-zA-Z0-9\-]*\.)+[a-zA-Z]{2,}$/,
/**
* Constructed a valid Unicode RegExp
*
* Lazily instantiate since this type of regex isn't supported
* in all envs (e.g. React Native).
*
* See:
* https://github.com/colinhacks/zod/issues/2433
* Fix in Zod:
* https://github.com/colinhacks/zod/commit/9340fd51e48576a75adc919bff65dbc4a5d4c99b
*/
emoji: () => {
if (emojiRegex22 === void 0) {
emojiRegex22 = RegExp("^(\\p{Extended_Pictographic}|\\p{Emoji_Component})+$", "u");
}
return emojiRegex22;
},
/**
* Unused
*/
uuid: /^[0-9a-fA-F]{8}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{12}$/,
/**
* Unused
*/
ipv4: /^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])$/,
ipv4Cidr: /^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\/(3[0-2]|[12]?[0-9])$/,
/**
* Unused
*/
ipv6: /^(([a-f0-9]{1,4}:){7}|::([a-f0-9]{1,4}:){0,6}|([a-f0-9]{1,4}:){1}:([a-f0-9]{1,4}:){0,5}|([a-f0-9]{1,4}:){2}:([a-f0-9]{1,4}:){0,4}|([a-f0-9]{1,4}:){3}:([a-f0-9]{1,4}:){0,3}|([a-f0-9]{1,4}:){4}:([a-f0-9]{1,4}:){0,2}|([a-f0-9]{1,4}:){5}:([a-f0-9]{1,4}:){0,1})([a-f0-9]{1,4}|(((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2}))\.){3}((25[0-5])|(2[0-4][0-9])|(1[0-9]{2})|([0-9]{1,2})))$/,
ipv6Cidr: /^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))\/(12[0-8]|1[01][0-9]|[1-9]?[0-9])$/,
base64: /^([0-9a-zA-Z+/]{4})*(([0-9a-zA-Z+/]{2}==)|([0-9a-zA-Z+/]{3}=))?$/,
base64url: /^([0-9a-zA-Z-_]{4})*(([0-9a-zA-Z-_]{2}(==)?)|([0-9a-zA-Z-_]{3}(=)?))?$/,
nanoid: /^[a-zA-Z0-9_-]{21}$/,
jwt: /^[A-Za-z0-9-_]+\.[A-Za-z0-9-_]+\.[A-Za-z0-9-_]*$/
};
function parseStringDef(def, refs) {
const res = {
type: "string"
};
if (def.checks) {
for (const check of def.checks) {
switch (check.kind) {
case "min":
setResponseValueAndErrors(res, "minLength", typeof res.minLength === "number" ? Math.max(res.minLength, check.value) : check.value, check.message, refs);
break;
case "max":
setResponseValueAndErrors(res, "maxLength", typeof res.maxLength === "number" ? Math.min(res.maxLength, check.value) : check.value, check.message, refs);
break;
case "email":
switch (refs.emailStrategy) {
case "format:email":
addFormat(res, "email", check.message, refs);
break;
case "format:idn-email":
addFormat(res, "idn-email", check.message, refs);
break;
case "pattern:zod":
addPattern(res, zodPatterns.email, check.message, refs);
break;
}
break;
case "url":
addFormat(res, "uri", check.message, refs);
break;
case "uuid":
addFormat(res, "uuid", check.message, refs);
break;
case "regex":
addPattern(res, check.regex, check.message, refs);
break;
case "cuid":
addPattern(res, zodPatterns.cuid, check.message, refs);
break;
case "cuid2":
addPattern(res, zodPatterns.cuid2, check.message, refs);
break;
case "startsWith":
addPattern(res, RegExp(`^${escapeLiteralCheckValue(check.value, refs)}`), check.message, refs);
break;
case "endsWith":
addPattern(res, RegExp(`${escapeLiteralCheckValue(check.value, refs)}$`), check.message, refs);
break;
case "datetime":
addFormat(res, "date-time", check.message, refs);
break;
case "date":
addFormat(res, "date", check.message, refs);
break;
case "time":
addFormat(res, "time", check.message, refs);
break;
case "duration":
addFormat(res, "duration", check.message, refs);
break;
case "length":
setResponseValueAndErrors(res, "minLength", typeof res.minLength === "number" ? Math.max(res.minLength, check.value) : check.value, check.message, refs);
setResponseValueAndErrors(res, "maxLength", typeof res.maxLength === "number" ? Math.min(res.maxLength, check.value) : check.value, check.message, refs);
break;
case "includes": {
addPattern(res, RegExp(escapeLiteralCheckValue(check.value, refs)), check.message, refs);
break;
}
case "ip": {
if (check.version !== "v6") {
addFormat(res, "ipv4", check.message, refs);
}
if (check.version !== "v4") {
addFormat(res, "ipv6", check.message, refs);
}
break;
}
case "base64url":
addPattern(res, zodPatterns.base64url, check.message, refs);
break;
case "jwt":
addPattern(res, zodPatterns.jwt, check.message, refs);
break;
case "cidr": {
if (check.version !== "v6") {
addPattern(res, zodPatterns.ipv4Cidr, check.message, refs);
}
if (check.version !== "v4") {
addPattern(res, zodPatterns.ipv6Cidr, check.message, refs);
}
break;
}
case "emoji":
addPattern(res, zodPatterns.emoji(), check.message, refs);
break;
case "ulid": {
addPattern(res, zodPatterns.ulid, check.message, refs);
break;
}
case "base64": {
switch (refs.base64Strategy) {
case "format:binary": {
addFormat(res, "binary", check.message, refs);
break;
}
case "contentEncoding:base64": {
setResponseValueAndErrors(res, "contentEncoding", "base64", check.message, refs);
break;
}
case "pattern:zod": {
addPattern(res, zodPatterns.base64, check.message, refs);
break;
}
}
break;
}
case "nanoid": {
addPattern(res, zodPatterns.nanoid, check.message, refs);
}
case "toLowerCase":
case "toUpperCase":
case "trim":
break;
default:
/* @__PURE__ */ ((_2) => {
})(check);
}
}
}
return res;
}
function escapeLiteralCheckValue(literal, refs) {
return refs.patternStrategy === "escape" ? escapeNonAlphaNumeric(literal) : literal;
}
var ALPHA_NUMERIC = new Set("ABCDEFGHIJKLMNOPQRSTUVXYZabcdefghijklmnopqrstuvxyz0123456789");
function escapeNonAlphaNumeric(source) {
let result = "";
for (let i = 0; i < source.length; i++) {
if (!ALPHA_NUMERIC.has(source[i])) {
result += "\\";
}
result += source[i];
}
return result;
}
function addFormat(schema, value, message, refs) {
if (schema.format || schema.anyOf?.some((x) => x.format)) {
if (!schema.anyOf) {
schema.anyOf = [];
}
if (schema.format) {
schema.anyOf.push({
format: schema.format,
...schema.errorMessage && refs.errorMessages && {
errorMessage: { format: schema.errorMessage.format }
}
});
delete schema.format;
if (schema.errorMessage) {
delete schema.errorMessage.format;
if (Object.keys(schema.errorMessage).length === 0) {
delete schema.errorMessage;
}
}
}
schema.anyOf.push({
format: value,
...message && refs.errorMessages && { errorMessage: { format: message } }
});
} else {
setResponseValueAndErrors(schema, "format", value, message, refs);
}
}
function addPattern(schema, regex, message, refs) {
if (schema.pattern || schema.allOf?.some((x) => x.pattern)) {
if (!schema.allOf) {
schema.allOf = [];
}
if (schema.pattern) {
schema.allOf.push({
pattern: schema.pattern,
...schema.errorMessage && refs.errorMessages && {
errorMessage: { pattern: schema.errorMessage.pattern }
}
});
delete schema.pattern;
if (schema.errorMessage) {
delete schema.errorMessage.pattern;
if (Object.keys(schema.errorMessage).length === 0) {
delete schema.errorMessage;
}
}
}
schema.allOf.push({
pattern: stringifyRegExpWithFlags(regex, refs),
...message && refs.errorMessages && { errorMessage: { pattern: message } }
});
} else {
setResponseValueAndErrors(schema, "pattern", stringifyRegExpWithFlags(regex, refs), message, refs);
}
}
function stringifyRegExpWithFlags(regex, refs) {
if (!refs.applyRegexFlags || !regex.flags) {
return regex.source;
}
const flags = {
i: regex.flags.includes("i"),
m: regex.flags.includes("m"),
s: regex.flags.includes("s")
// `.` matches newlines
};
const source = flags.i ? regex.source.toLowerCase() : regex.source;
let pattern = "";
let isEscaped = false;
let inCharGroup = false;
let inCharRange = false;
for (let i = 0; i < source.length; i++) {
if (isEscaped) {
pattern += source[i];
isEscaped = false;
continue;
}
if (flags.i) {
if (inCharGroup) {
if (source[i].match(/[a-z]/)) {
if (inCharRange) {
pattern += source[i];
pattern += `${source[i - 2]}-${source[i]}`.toUpperCase();
inCharRange = false;
} else if (source[i + 1] === "-" && source[i + 2]?.match(/[a-z]/)) {
pattern += source[i];
inCharRange = true;
} else {
pattern += `${source[i]}${source[i].toUpperCase()}`;
}
continue;
}
} else if (source[i].match(/[a-z]/)) {
pattern += `[${source[i]}${source[i].toUpperCase()}]`;
continue;
}
}
if (flags.m) {
if (source[i] === "^") {
pattern += `(^|(?<=[\r
]))`;
continue;
} else if (source[i] === "$") {
pattern += `($|(?=[\r
]))`;
continue;
}
}
if (flags.s && source[i] === ".") {
pattern += inCharGroup ? `${source[i]}\r
` : `[${source[i]}\r
]`;
continue;
}
pattern += source[i];
if (source[i] === "\\") {
isEscaped = true;
} else if (inCharGroup && source[i] === "]") {
inCharGroup = false;
} else if (!inCharGroup && source[i] === "[") {
inCharGroup = true;
}
}
try {
new RegExp(pattern);
} catch {
console.warn(`Could not convert regex pattern at ${refs.currentPath.join("/")} to a flag-independent form! Falling back to the flag-ignorant source`);
return regex.source;
}
return pattern;
}
function parseRecordDef(def, refs) {
if (refs.target === "openAi") {
console.warn("Warning: OpenAI may not support records in schemas! Try an array of key-value pairs instead.");
}
if (refs.target === "openApi3" && def.keyType?._def.typeName === ZodFirstPartyTypeKind2.ZodEnum) {
return {
type: "object",
required: def.keyType._def.values,
properties: def.keyType._def.values.reduce((acc, key) => ({
...acc,
[key]: parseDef(def.valueType._def, {
...refs,
currentPath: [...refs.currentPath, "properties", key]
}) ?? {}
}), {}),
additionalProperties: false
};
}
const schema = {
type: "object",
additionalProperties: parseDef(def.valueType._def, {
...refs,
currentPath: [...refs.currentPath, "additionalProperties"]
}) ?? {}
};
if (refs.target === "openApi3") {
return schema;
}
if (def.keyType?._def.typeName === ZodFirstPartyTypeKind2.ZodString && def.keyType._def.checks?.length) {
const { type, ...keyType } = parseStringDef(def.keyType._def, refs);
return {
...schema,
propertyNames: keyType
};
} else if (def.keyType?._def.typeName === ZodFirstPartyTypeKind2.ZodEnum) {
return {
...schema,
propertyNames: {
enum: def.keyType._def.values
}
};
} else if (def.keyType?._def.typeName === ZodFirstPartyTypeKind2.ZodBranded && def.keyType._def.type._def.typeName === ZodFirstPartyTypeKind2.ZodString && def.keyType._def.type._def.checks?.length) {
const { type, ...keyType } = parseBrandedDef(def.keyType._def, refs);
return {
...schema,
propertyNames: keyType
};
}
return schema;
}
function parseMapDef(def, refs) {
if (refs.mapStrategy === "record") {
return parseRecordDef(def, refs);
}
const keys = parseDef(def.keyType._def, {
...refs,
currentPath: [...refs.currentPath, "items", "items", "0"]
}) || {};
const values = parseDef(def.valueType._def, {
...refs,
currentPath: [...refs.currentPath, "items", "items", "1"]
}) || {};
return {
type: "array",
maxItems: 125,
items: {
type: "array",
items: [keys, values],
minItems: 2,
maxItems: 2
}
};
}
function parseNativeEnumDef(def) {
const object = def.values;
const actualKeys = Object.keys(def.values).filter((key) => {
return typeof object[object[key]] !== "number";
});
const actualValues = actualKeys.map((key) => object[key]);
const parsedTypes = Array.from(new Set(actualValues.map((values) => typeof values)));
return {
type: parsedTypes.length === 1 ? parsedTypes[0] === "string" ? "string" : "number" : ["string", "number"],
enum: actualValues
};
}
function parseNeverDef() {
return {
not: {}
};
}
function parseNullDef(refs) {
return refs.target === "openApi3" ? {
enum: ["null"],
nullable: true
} : {
type: "null"
};
}
var primitiveMappings = {
ZodString: "string",
ZodNumber: "number",
ZodBigInt: "integer",
ZodBoolean: "boolean",
ZodNull: "null"
};
function parseUnionDef(def, refs) {
if (refs.target === "openApi3")
return asAnyOf(def, refs);
const options = def.options instanceof Map ? Array.from(def.options.values()) : def.options;
if (options.every((x) => x._def.typeName in primitiveMappings && (!x._def.checks || !x._def.checks.length))) {
const types = options.reduce((types2, x) => {
const type = primitiveMappings[x._def.typeName];
return type && !types2.includes(type) ? [...types2, type] : types2;
}, []);
return {
type: types.length > 1 ? types : types[0]
};
} else if (options.every((x) => x._def.typeName === "ZodLiteral" && !x.description)) {
const types = options.reduce((acc, x) => {
const type = typeof x._def.value;
switch (type) {
case "string":
case "number":
case "boolean":
return [...acc, type];
case "bigint":
return [...acc, "integer"];
case "object":
if (x._def.value === null)
return [...acc, "null"];
case "symbol":
case "undefined":
case "function":
default:
return acc;
}
}, []);
if (types.length === options.length) {
const uniqueTypes = types.filter((x, i, a) => a.indexOf(x) === i);
return {
type: uniqueTypes.length > 1 ? uniqueTypes : uniqueTypes[0],
enum: options.reduce((acc, x) => {
return acc.includes(x._def.value) ? acc : [...acc, x._def.value];
}, [])
};
}
} else if (options.every((x) => x._def.typeName === "ZodEnum")) {
return {
type: "string",
enum: options.reduce((acc, x) => [
...acc,
...x._def.values.filter((x2) => !acc.includes(x2))
], [])
};
}
return asAnyOf(def, refs);
}
var asAnyOf = (def, refs) => {
const anyOf = (def.options instanceof Map ? Array.from(def.options.values()) : def.options).map((x, i) => parseDef(x._def, {
...refs,
currentPath: [...refs.currentPath, "anyOf", `${i}`]
})).filter((x) => !!x && (!refs.strictUnions || typeof x === "object" && Object.keys(x).length > 0));
return anyOf.length ? { anyOf } : void 0;
};
function parseNullableDef(def, refs) {
if (["ZodString", "ZodNumber", "ZodBigInt", "ZodBoolean", "ZodNull"].includes(def.innerType._def.typeName) && (!def.innerType._def.checks || !def.innerType._def.checks.length)) {
if (refs.target === "openApi3") {
return {
type: primitiveMappings[def.innerType._def.typeName],
nullable: true
};
}
return {
type: [
primitiveMappings[def.innerType._def.typeName],
"null"
]
};
}
if (refs.target === "openApi3") {
const base2 = parseDef(def.innerType._def, {
...refs,
currentPath: [...refs.currentPath]
});
if (base2 && "$ref" in base2)
return { allOf: [base2], nullable: true };
return base2 && { ...base2, nullable: true };
}
const base = parseDef(def.innerType._def, {
...refs,
currentPath: [...refs.currentPath, "anyOf", "0"]
});
return base && { anyOf: [base, { type: "null" }] };
}
function parseNumberDef(def, refs) {
const res = {
type: "number"
};
if (!def.checks)
return res;
for (const check of def.checks) {
switch (check.kind) {
case "int":
res.type = "integer";
addErrorMessage(res, "type", check.message, refs);
break;
case "min":
if (refs.target === "jsonSchema7") {
if (check.inclusive) {
setResponseValueAndErrors(res, "minimum", check.value, check.message, refs);
} else {
setResponseValueAndErrors(res, "exclusiveMinimum", check.value, check.message, refs);
}
} else {
if (!check.inclusive) {
res.exclusiveMinimum = true;
}
setResponseValueAndErrors(res, "minimum", check.value, check.message, refs);
}
break;
case "max":
if (refs.target === "jsonSchema7") {
if (check.inclusive) {
setResponseValueAndErrors(res, "maximum", check.value, check.message, refs);
} else {
setResponseValueAndErrors(res, "exclusiveMaximum", check.value, check.message, refs);
}
} else {
if (!check.inclusive) {
res.exclusiveMaximum = true;
}
setResponseValueAndErrors(res, "maximum", check.value, check.message, refs);
}
break;
case "multipleOf":
setResponseValueAndErrors(res, "multipleOf", check.value, check.message, refs);
break;
}
}
return res;
}
function decideAdditionalProperties(def, refs) {
if (refs.removeAdditionalStrategy === "strict") {
return def.catchall._def.typeName === "ZodNever" ? def.unknownKeys !== "strict" : parseDef(def.catchall._def, {
...refs,
currentPath: [...refs.currentPath, "additionalProperties"]
}) ?? true;
} else {
return def.catchall._def.typeName === "ZodNever" ? def.unknownKeys === "passthrough" : parseDef(def.catchall._def, {
...refs,
currentPath: [...refs.currentPath, "additionalProperties"]
}) ?? true;
}
}
function parseObjectDef(def, refs) {
const forceOptionalIntoNullable = refs.target === "openAi";
const result = {
type: "object",
...Object.entries(def.shape()).reduce((acc, [propName, propDef]) => {
if (propDef === void 0 || propDef._def === void 0)
return acc;
let propOptional = propDef.isOptional();
if (propOptional && forceOptionalIntoNullable) {
if (propDef instanceof ZodOptional2) {
propDef = propDef._def.innerType;
}
if (!propDef.isNullable()) {
propDef = propDef.nullable();
}
propOptional = false;
}
const parsedDef = parseDef(propDef._def, {
...refs,
currentPath: [...refs.currentPath, "properties", propName],
propertyPath: [...refs.currentPath, "properties", propName]
});
if (parsedDef === void 0)
return acc;
return {
properties: { ...acc.properties, [propName]: parsedDef },
required: propOptional ? acc.required : [...acc.required, propName]
};
}, { properties: {}, required: [] }),
additionalProperties: decideAdditionalProperties(def, refs)
};
if (!result.required.length)
delete result.required;
return result;
}
var parseOptionalDef = (def, refs) => {
if (refs.currentPath.toString() === refs.propertyPath?.toString()) {
return parseDef(def.innerType._def, refs);
}
const innerSchema = parseDef(def.innerType._def, {
...refs,
currentPath: [...refs.currentPath, "anyOf", "1"]
});
return innerSchema ? {
anyOf: [
{
not: {}
},
innerSchema
]
} : {};
};
var parsePipelineDef = (def, refs) => {
if (refs.pipeStrategy === "input") {
return parseDef(def.in._def, refs);
} else if (refs.pipeStrategy === "output") {
return parseDef(def.out._def, refs);
}
const a = parseDef(def.in._def, {
...refs,
currentPath: [...refs.currentPath, "allOf", "0"]
});
const b = parseDef(def.out._def, {
...refs,
currentPath: [...refs.currentPath, "allOf", a ? "1" : "0"]
});
return {
allOf: [a, b].filter((x) => x !== void 0)
};
};
function parsePromiseDef(def, refs) {
return parseDef(def.type._def, refs);
}
function parseSetDef(def, refs) {
const items = parseDef(def.valueType._def, {
...refs,
currentPath: [...refs.currentPath, "items"]
});
const schema = {
type: "array",
uniqueItems: true,
items
};
if (def.minSize) {
setResponseValueAndErrors(schema, "minItems", def.minSize.value, def.minSize.message, refs);
}
if (def.maxSize) {
setResponseValueAndErrors(schema, "maxItems", def.maxSize.value, def.maxSize.message, refs);
}
return schema;
}
function parseTupleDef(def, refs) {
if (def.rest) {
return {
type: "array",
minItems: def.items.length,
items: def.items.map((x, i) => parseDef(x._def, {
...refs,
currentPath: [...refs.currentPath, "items", `${i}`]
})).reduce((acc, x) => x === void 0 ? acc : [...acc, x], []),
additionalItems: parseDef(def.rest._def, {
...refs,
currentPath: [...refs.currentPath, "additionalItems"]
})
};
} else {
return {
type: "array",
minItems: def.items.length,
maxItems: def.items.length,
items: def.items.map((x, i) => parseDef(x._def, {
...refs,
currentPath: [...refs.currentPath, "items", `${i}`]
})).reduce((acc, x) => x === void 0 ? acc : [...acc, x], [])
};
}
}
function parseUndefinedDef() {
return {
not: {}
};
}
function parseUnknownDef() {
return {};
}
var parseReadonlyDef = (def, refs) => {
return parseDef(def.innerType._def, refs);
};
var selectParser = (def, typeName, refs) => {
switch (typeName) {
case ZodFirstPartyTypeKind2.ZodString:
return parseStringDef(def, refs);
case ZodFirstPartyTypeKind2.ZodNumber:
return parseNumberDef(def, refs);
case ZodFirstPartyTypeKind2.ZodObject:
return parseObjectDef(def, refs);
case ZodFirstPartyTypeKind2.ZodBigInt:
return parseBigintDef(def, refs);
case ZodFirstPartyTypeKind2.ZodBoolean:
return parseBooleanDef();
case ZodFirstPartyTypeKind2.ZodDate:
return parseDateDef(def, refs);
case ZodFirstPartyTypeKind2.ZodUndefined:
return parseUndefinedDef();
case ZodFirstPartyTypeKind2.ZodNull:
return parseNullDef(refs);
case ZodFirstPartyTypeKind2.ZodArray:
return parseArrayDef(def, refs);
case ZodFirstPartyTypeKind2.ZodUnion:
case ZodFirstPartyTypeKind2.ZodDiscriminatedUnion:
return parseUnionDef(def, refs);
case ZodFirstPartyTypeKind2.ZodIntersection:
return parseIntersectionDef(def, refs);
case ZodFirstPartyTypeKind2.ZodTuple:
return parseTupleDef(def, refs);
case ZodFirstPartyTypeKind2.ZodRecord:
return parseRecordDef(def, refs);
case ZodFirstPartyTypeKind2.ZodLiteral:
return parseLiteralDef(def, refs);
case ZodFirstPartyTypeKind2.ZodEnum:
return parseEnumDef(def);
case ZodFirstPartyTypeKind2.ZodNativeEnum:
return parseNativeEnumDef(def);
case ZodFirstPartyTypeKind2.ZodNullable:
return parseNullableDef(def, refs);
case ZodFirstPartyTypeKind2.ZodOptional:
return parseOptionalDef(def, refs);
case ZodFirstPartyTypeKind2.ZodMap:
return parseMapDef(def, refs);
case ZodFirstPartyTypeKind2.ZodSet:
return parseSetDef(def, refs);
case ZodFirstPartyTypeKind2.ZodLazy:
return () => def.getter()._def;
case ZodFirstPartyTypeKind2.ZodPromise:
return parsePromiseDef(def, refs);
case ZodFirstPartyTypeKind2.ZodNaN:
case ZodFirstPartyTypeKind2.ZodNever:
return parseNeverDef();
case ZodFirstPartyTypeKind2.ZodEffects:
return parseEffectsDef(def, refs);
case ZodFirstPartyTypeKind2.ZodAny:
return parseAnyDef();
case ZodFirstPartyTypeKind2.ZodUnknown:
return parseUnknownDef();
case ZodFirstPartyTypeKind2.ZodDefault:
return parseDefaultDef(def, refs);
case ZodFirstPartyTypeKind2.ZodBranded:
return parseBrandedDef(def, refs);
case ZodFirstPartyTypeKind2.ZodReadonly:
return parseReadonlyDef(def, refs);
case ZodFirstPartyTypeKind2.ZodCatch:
return parseCatchDef(def, refs);
case ZodFirstPartyTypeKind2.ZodPipeline:
return parsePipelineDef(def, refs);
case ZodFirstPartyTypeKind2.ZodFunction:
case ZodFirstPartyTypeKind2.ZodVoid:
case ZodFirstPartyTypeKind2.ZodSymbol:
return void 0;
default:
return /* @__PURE__ */ ((_2) => void 0)(typeName);
}
};
function parseDef(def, refs, forceResolution = false) {
const seenItem = refs.seen.get(def);
if (refs.override) {
const overrideResult = refs.override?.(def, refs, seenItem, forceResolution);
if (overrideResult !== ignoreOverride) {
return overrideResult;
}
}
if (seenItem && !forceResolution) {
const seenSchema = get$ref(seenItem, refs);
if (seenSchema !== void 0) {
return seenSchema;
}
}
const newItem = { def, path: refs.currentPath, jsonSchema: void 0 };
refs.seen.set(def, newItem);
const jsonSchemaOrGetter = selectParser(def, def.typeName, refs);
const jsonSchema = typeof jsonSchemaOrGetter === "function" ? parseDef(jsonSchemaOrGetter(), refs) : jsonSchemaOrGetter;
if (jsonSchema) {
addMeta(def, refs, jsonSchema);
}
newItem.jsonSchema = jsonSchema;
return jsonSchema;
}
var get$ref = (item, refs) => {
switch (refs.$refStrategy) {
case "root":
return { $ref: item.path.join("/") };
case "relative":
return { $ref: getRelativePath(refs.currentPath, item.path) };
case "none":
case "seen": {
if (item.path.length < refs.currentPath.length && item.path.every((value, index2) => refs.currentPath[index2] === value)) {
console.warn(`Recursive reference detected at ${refs.currentPath.join("/")}! Defaulting to any`);
return {};
}
return refs.$refStrategy === "seen" ? {} : void 0;
}
}
};
var getRelativePath = (pathA, pathB) => {
let i = 0;
for (; i < pathA.length && i < pathB.length; i++) {
if (pathA[i] !== pathB[i])
break;
}
return [(pathA.length - i).toString(), ...pathB.slice(i)].join("/");
};
var addMeta = (def, refs, jsonSchema) => {
if (def.description) {
jsonSchema.description = def.description;
if (refs.markdownDescription) {
jsonSchema.markdownDescription = def.description;
}
}
return jsonSchema;
};
var zodToJsonSchema = (schema, options) => {
const refs = getRefs(options);
const definitions = typeof options === "object" && options.definitions ? Object.entries(options.definitions).reduce((acc, [name2, schema2]) => ({
...acc,
[name2]: parseDef(schema2._def, {
...refs,
currentPath: [...refs.basePath, refs.definitionPath, name2]
}, true) ?? {}
}), {}) : void 0;
const name = typeof options === "string" ? options : options?.nameStrategy === "title" ? void 0 : options?.name;
const main = parseDef(schema._def, name === void 0 ? refs : {
...refs,
currentPath: [...refs.basePath, refs.definitionPath, name]
}, false) ?? {};
const title = typeof options === "object" && options.name !== void 0 && options.nameStrategy === "title" ? options.name : void 0;
if (title !== void 0) {
main.title = title;
}
const combined = name === void 0 ? definitions ? {
...main,
[refs.definitionPath]: definitions
} : main : {
$ref: [
...refs.$refStrategy === "relative" ? [] : refs.basePath,
refs.definitionPath,
name
].join("/"),
[refs.definitionPath]: {
...definitions,
[name]: main
}
};
if (refs.target === "jsonSchema7") {
combined.$schema = "http://json-schema.org/draft-07/schema#";
} else if (refs.target === "jsonSchema2019-09" || refs.target === "openAi") {
combined.$schema = "https://json-schema.org/draft/2019-09/schema#";
}
if (refs.target === "openAi" && ("anyOf" in combined || "oneOf" in combined || "allOf" in combined || "type" in combined && Array.isArray(combined.type))) {
console.warn("Warning: OpenAI may not support schemas with unions as roots! Try wrapping it in an object property.");
}
return combined;
};
function parseExpressRequestConfig(req) {
return JSON.parse(Buffer.from(req.query.config, "base64").toString());
}
function parseAndValidateConfig(req, schema) {
let config = {};
if (req.query.config) {
try {
config = parseExpressRequestConfig(req);
} catch (configError) {
return err({
title: "Invalid config parameter",
status: 400,
detail: "Failed to parse config parameter",
instance: req.originalUrl
});
}
}
for (const [key, value] of Object.entries(req.query)) {
if (key === "config" || key === "api_key" || key === "profile")
continue;
const pathParts = key.split(".");
const rawValue = Array.isArray(value) ? value[0] : value;
if (typeof rawValue !== "string")
continue;
let parsedValue = rawValue;
try {
parsedValue = JSON.parse(rawValue);
} catch {
}
import_lodash.default.set(config, pathParts, parsedValue);
}
if (schema) {
const result = schema.safeParse(config);
if (!result.success) {
const jsonSchema = zodToJsonSchema(schema);
const errors = result.error.issues.map((issue) => {
let received = config;
for (const key of issue.path) {
if (received && typeof received === "object" && key in received) {
received = received[key];
} else {
received = void 0;
break;
}
}
return {
param: issue.path.join(".") || "root",
pointer: `/${issue.path.join("/")}`,
reason: issue.message,
received
};
});
return err({
title: "Invalid configuration parameters",
status: 422,
detail: "One or more config parameters are invalid.",
instance: req.originalUrl,
configSchema: jsonSchema,
errors
});
}
return ok(result.data);
}
return ok(config);
}
var createLRUStore = (max = 1e3) => {
const cache = /* @__PURE__ */ new Map();
return {
get: (id) => {
const t = cache.get(id);
if (!t)
return void 0;
cache.delete(id);
cache.set(id, t);
return t;
},
set: (id, transport) => {
if (cache.has(id)) {
cache.delete(id);
} else if (cache.size >= max) {
const [lruId, lruTransport] = cache.entries().next().value;
lruTransport.close?.();
cache.delete(lruId);
}
cache.set(id, transport);
},
delete: (id) => cache.delete(id)
};
};
function createStatefulServer(createMcpServer, options) {
const app = options?.app ?? (0, import_express.default)();
app.use("/mcp", import_express.default.json());
const sessionStore = options?.sessionStore ?? createLRUStore();
app.post("/mcp", async (req, res) => {
const sessionId = req.headers["mcp-session-id"];
let transport;
if (sessionId && sessionStore.get(sessionId)) {
transport = sessionStore.get(sessionId);
} else if (!sessionId && isInitializeRequest(req.body)) {
const newSessionId = (0, import_node_crypto2.randomUUID)();
transport = new StreamableHTTPServerTransport({
sessionIdGenerator: () => newSessionId,
onsessioninitialized: (sessionId2) => {
sessionStore.set(sessionId2, transport);
}
});
transport.onclose = () => {
if (transport.sessionId) {
sessionStore.delete?.(transport.sessionId);
}
};
const configResult = parseAndValidateConfig(req, options?.schema);
if (!configResult.ok) {
const status = configResult.error.status || 400;
res.status(status).json(configResult.error);
return;
}
const config = configResult.value;
try {
const server = createMcpServer({
sessionId: newSessionId,
config
});
await server.connect(transport);
} catch (error) {
console.error("Error initializing server:", error);
res.status(500).json({
jsonrpc: "2.0",
error: {
code: -32603,
message: "Error initializing server."
},
id: null
});
return;
}
} else {
res.status(400).json({
jsonrpc: "2.0",
error: {
code: -32e3,
message: "Session not found or expired"
},
id: null
});
return;
}
await transport.handleRequest(req, res, req.body);
});
app.get("/.well-known/mcp-config", (req, res) => {
res.set("Content-Type", "application/schema+json; charset=utf-8");
const baseSchema = options?.schema ? zodToJsonSchema(options.schema) : {
type: "object",
properties: {},
required: []
};
const configSchema = {
$schema: "https://json-schema.org/draft/2020-12/schema",
$id: `${req.protocol}://${req.get("host")}/.well-known/mcp-config`,
title: "MCP Session Configuration",
description: "Schema for the /mcp endpoint configuration",
"x-mcp-version": "1.0",
"x-query-style": "dot+bracket",
...baseSchema
};
res.json(configSchema);
});
const handleSessionRequest = async (req, res) => {
const sessionId = req.headers["mcp-session-id"];
if (!sessionId || !sessionStore.get(sessionId)) {
res.status(400).send("Invalid or expired session ID");
return;
}
const transport = sessionStore.get(sessionId);
await transport.handleRequest(req, res);
};
app.get("/mcp", handleSessionRequest);
app.delete("/mcp", async (req, res) => {
const sessionId = req.headers["mcp-session-id"];
if (!sessionId) {
res.status(400).json({
jsonrpc: "2.0",
error: {
code: -32600,
message: "Missing mcp-session-id header"
},
id: null
});
return;
}
const transport = sessionStore.get(sessionId);
if (!transport) {
res.status(404).json({
jsonrpc: "2.0",
error: {
code: -32e3,
message: "Session not found or expired"
},
id: null
});
return;
}
transport.close?.();
res.status(204).end();
});
return { app };
}
var import_cors = __toESM2(require_lib4());
var import_express2 = __toESM2(require_express2());
var _entry = __toESM2((init_src(), __toCommonJS(src_exports)));
var entry = _entry;
async function startMcpServer() {
try {
const port = process.env.PORT || "8181";
console.log(`[smithery] Starting MCP server on port ${port}`);
let server;
const app = (0, import_express2.default)();
if (false) {
console.log(`[smithery] Injecting cors middleware`);
app.use(
(0, import_cors.default)({
exposedHeaders: ["mcp-session-id"]
})
);
}
if (entry.default && typeof entry.default === "function") {
console.log(`[smithery] Setting up server.`);
server = createStatefulServer(entry.default, {
schema: entry.configSchema,
app
});
} else {
throw new Error(
"No valid server export found. Please export:\n- export default function({ sessionId, config }) { ... }"
);
}
server.app.listen(Number.parseInt(port));
console.log(`[smithery] MCP server started successfully on port ${port}`);
} catch (error) {
console.error(`[smithery] Failed to start MCP server:`, error);
process.exit(1);
}
}
startMcpServer();
/*! Bundled license information:
bytes/index.js:
(*!
* bytes
* Copyright(c) 2012-2014 TJ Holowaychuk
* Copyright(c) 2015 Jed Watson
* MIT Licensed
*)
depd/index.js:
(*!
* depd
* Copyright(c) 2014-2018 Douglas Christopher Wilson
* MIT Licensed
*)
statuses/index.js:
(*!
* statuses
* Copyright(c) 2014 Jonathan Ong
* Copyright(c) 2016 Douglas Christopher Wilson
* MIT Licensed
*)
toidentifier/index.js:
(*!
* toidentifier
* Copyright(c) 2016 Douglas Christopher Wilson
* MIT Licensed
*)
http-errors/index.js:
(*!
* http-errors
* Copyright(c) 2014 Jonathan Ong
* Copyright(c) 2016 Douglas Christopher Wilson
* MIT Licensed
*)
unpipe/index.js:
(*!
* unpipe
* Copyright(c) 2015 Douglas Christopher Wilson
* MIT Licensed
*)
raw-body/index.js:
(*!
* raw-body
* Copyright(c) 2013-2014 Jonathan Ong
* Copyright(c) 2014-2022 Douglas Christopher Wilson
* MIT Licensed
*)
content-type/index.js:
(*!
* content-type
* Copyright(c) 2015 Douglas Christopher Wilson
* MIT Licensed
*)
ee-first/index.js:
(*!
* ee-first
* Copyright(c) 2014 Jonathan Ong
* MIT Licensed
*)
on-finished/index.js:
(*!
* on-finished
* Copyright(c) 2013 Jonathan Ong
* Copyright(c) 2014 Douglas Christopher Wilson
* MIT Licensed
*)
body-parser/lib/read.js:
body-parser/lib/types/raw.js:
body-parser/lib/types/text.js:
body-parser/index.js:
(*!
* body-parser
* Copyright(c) 2014-2015 Douglas Christopher Wilson
* MIT Licensed
*)
mime-db/index.js:
mime-db/index.js:
mime-db/index.js:
mime-db/index.js:
(*!
* mime-db
* Copyright(c) 2014 Jonathan Ong
* Copyright(c) 2015-2022 Douglas Christopher Wilson
* MIT Licensed
*)
mime-types/index.js:
mime-types/index.js:
mime-types/index.js:
mime-types/index.js:
(*!
* mime-types
* Copyright(c) 2014 Jonathan Ong
* Copyright(c) 2015 Douglas Christopher Wilson
* MIT Licensed
*)
media-typer/index.js:
(*!
* media-typer
* Copyright(c) 2014-2017 Douglas Christopher Wilson
* MIT Licensed
*)
type-is/index.js:
(*!
* type-is
* Copyright(c) 2014 Jonathan Ong
* Copyright(c) 2014-2015 Douglas Christopher Wilson
* MIT Licensed
*)
body-parser/lib/types/json.js:
body-parser/lib/types/urlencoded.js:
(*!
* body-parser
* Copyright(c) 2014 Jonathan Ong
* Copyright(c) 2014-2015 Douglas Christopher Wilson
* MIT Licensed
*)
encodeurl/index.js:
(*!
* encodeurl
* Copyright(c) 2016 Douglas Christopher Wilson
* MIT Licensed
*)
escape-html/index.js:
(*!
* escape-html
* Copyright(c) 2012-2013 TJ Holowaychuk
* Copyright(c) 2015 Andreas Lubbe
* Copyright(c) 2015 Tiancheng "Timothy" Gu
* MIT Licensed
*)
parseurl/index.js:
(*!
* parseurl
* Copyright(c) 2014 Jonathan Ong
* Copyright(c) 2014-2017 Douglas Christopher Wilson
* MIT Licensed
*)
finalhandler/index.js:
(*!
* finalhandler
* Copyright(c) 2014-2022 Douglas Christopher Wilson
* MIT Licensed
*)
express/lib/view.js:
express/lib/application.js:
express/lib/request.js:
express/lib/express.js:
express/index.js:
(*!
* express
* Copyright(c) 2009-2013 TJ Holowaychuk
* Copyright(c) 2013 Roman Shtylman
* Copyright(c) 2014-2015 Douglas Christopher Wilson
* MIT Licensed
*)
etag/index.js:
(*!
* etag
* Copyright(c) 2014-2016 Douglas Christopher Wilson
* MIT Licensed
*)
forwarded/index.js:
(*!
* forwarded
* Copyright(c) 2014-2017 Douglas Christopher Wilson
* MIT Licensed
*)
proxy-addr/index.js:
(*!
* proxy-addr
* Copyright(c) 2014-2016 Douglas Christopher Wilson
* MIT Licensed
*)
express/lib/utils.js:
express/lib/response.js:
(*!
* express
* Copyright(c) 2009-2013 TJ Holowaychuk
* Copyright(c) 2014-2015 Douglas Christopher Wilson
* MIT Licensed
*)
router/lib/layer.js:
router/lib/route.js:
router/index.js:
(*!
* router
* Copyright(c) 2013 Roman Shtylman
* Copyright(c) 2014-2022 Douglas Christopher Wilson
* MIT Licensed
*)
negotiator/index.js:
(*!
* negotiator
* Copyright(c) 2012 Federico Romero
* Copyright(c) 2012-2014 Isaac Z. Schlueter
* Copyright(c) 2015 Douglas Christopher Wilson
* MIT Licensed
*)
accepts/index.js:
(*!
* accepts
* Copyright(c) 2014 Jonathan Ong
* Copyright(c) 2015 Douglas Christopher Wilson
* MIT Licensed
*)
fresh/index.js:
(*!
* fresh
* Copyright(c) 2012 TJ Holowaychuk
* Copyright(c) 2016-2017 Douglas Christopher Wilson
* MIT Licensed
*)
range-parser/index.js:
(*!
* range-parser
* Copyright(c) 2012-2014 TJ Holowaychuk
* Copyright(c) 2015-2016 Douglas Christopher Wilson
* MIT Licensed
*)
safe-buffer/index.js:
(*! safe-buffer. MIT License. Feross Aboukhadijeh <https://feross.org/opensource> *)
content-disposition/index.js:
(*!
* content-disposition
* Copyright(c) 2014-2017 Douglas Christopher Wilson
* MIT Licensed
*)
cookie/index.js:
(*!
* cookie
* Copyright(c) 2012-2014 Roman Shtylman
* Copyright(c) 2015 Douglas Christopher Wilson
* MIT Licensed
*)
send/index.js:
(*!
* send
* Copyright(c) 2012 TJ Holowaychuk
* Copyright(c) 2014-2022 Douglas Christopher Wilson
* MIT Licensed
*)
vary/index.js:
(*!
* vary
* Copyright(c) 2014-2017 Douglas Christopher Wilson
* MIT Licensed
*)
serve-static/index.js:
(*!
* serve-static
* Copyright(c) 2010 Sencha Inc.
* Copyright(c) 2011 TJ Holowaychuk
* Copyright(c) 2014-2016 Douglas Christopher Wilson
* MIT Licensed
*)
lodash/lodash.js:
(**
* @license
* Lodash <https://lodash.com/>
* Copyright OpenJS Foundation and other contributors <https://openjsf.org/>
* Released under MIT license <https://lodash.com/license>
* Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>
* Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
*)
object-assign/index.js:
(*
object-assign
(c) Sindre Sorhus
@license MIT
*)
*/
/*! Bundled license information:
uri-js/dist/es5/uri.all.js:
(** @license URI.js v4.4.1 (c) 2011 Gary Court. License: http://github.com/garycourt/uri-js *)
mime-db/index.js:
(*!
* mime-db
* Copyright(c) 2014 Jonathan Ong
* Copyright(c) 2015-2022 Douglas Christopher Wilson
* MIT Licensed
*)
mime-types/index.js:
(*!
* mime-types
* Copyright(c) 2014 Jonathan Ong
* Copyright(c) 2015 Douglas Christopher Wilson
* MIT Licensed
*)
undici/lib/web/fetch/body.js:
(*! formdata-polyfill. MIT License. Jimmy Wärting <https://jimmy.warting.se/opensource> *)
undici/lib/web/websocket/frame.js:
(*! ws. MIT License. Einar Otto Stangvik <einaros@gmail.com> *)
*/
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vbm9kZV9tb2R1bGVzL3pvZC9saWIvaW5kZXgubWpzIiwgIi4uL25vZGVfbW9kdWxlcy9AbW9kZWxjb250ZXh0cHJvdG9jb2wvc2RrL3NyYy90eXBlcy50cyIsICIuLi9ub2RlX21vZHVsZXMvQG1vZGVsY29udGV4dHByb3RvY29sL3Nkay9zcmMvc2hhcmVkL3Byb3RvY29sLnRzIiwgIi4uL25vZGVfbW9kdWxlcy91cmktanMvc3JjL2luZGV4LnRzIiwgIi4uL25vZGVfbW9kdWxlcy91cmktanMvc3JjL3NjaGVtZXMvdXJuLXV1aWQudHMiLCAiLi4vbm9kZV9tb2R1bGVzL3VyaS1qcy9zcmMvc2NoZW1lcy91cm4udHMiLCAiLi4vbm9kZV9tb2R1bGVzL3VyaS1qcy9zcmMvc2NoZW1lcy9tYWlsdG8udHMiLCAiLi4vbm9kZV9tb2R1bGVzL3VyaS1qcy9zcmMvc2NoZW1lcy93c3MudHMiLCAiLi4vbm9kZV9tb2R1bGVzL3VyaS1qcy9zcmMvc2NoZW1lcy93cy50cyIsICIuLi9ub2RlX21vZHVsZXMvdXJpLWpzL3NyYy9zY2hlbWVzL2h0dHBzLnRzIiwgIi4uL25vZGVfbW9kdWxlcy91cmktanMvc3JjL3NjaGVtZXMvaHR0cC50cyIsICIuLi9ub2RlX21vZHVsZXMvdXJpLWpzL3NyYy91cmkudHMiLCAiLi4vbm9kZV9tb2R1bGVzL3VyaS1qcy9ub2RlX21vZHVsZXMvcHVueWNvZGUvcHVueWNvZGUuZXM2LmpzIiwgIi4uL25vZGVfbW9kdWxlcy91cmktanMvc3JjL3JlZ2V4cHMtaXJpLnRzIiwgIi4uL25vZGVfbW9kdWxlcy91cmktanMvc3JjL3JlZ2V4cHMtdXJpLnRzIiwgIi4uL25vZGVfbW9kdWxlcy91cmktanMvc3JjL3V0aWwudHMiLCAiLi4vbm9kZV9tb2R1bGVzL2Zhc3QtZGVlcC1lcXVhbC9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvYWp2L2xpYi9jb21waWxlL3VjczJsZW5ndGguanMiLCAiLi4vbm9kZV9tb2R1bGVzL2Fqdi9saWIvY29tcGlsZS91dGlsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9hanYvbGliL2NvbXBpbGUvc2NoZW1hX29iai5qcyIsICIuLi9ub2RlX21vZHVsZXMvanNvbi1zY2hlbWEtdHJhdmVyc2UvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL2Fqdi9saWIvY29tcGlsZS9yZXNvbHZlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9hanYvbGliL2NvbXBpbGUvZXJyb3JfY2xhc3Nlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvZmFzdC1qc29uLXN0YWJsZS1zdHJpbmdpZnkvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL2Fqdi9saWIvZG90anMvdmFsaWRhdGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2Fqdi9saWIvY29tcGlsZS9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvYWp2L2xpYi9jYWNoZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvYWp2L2xpYi9jb21waWxlL2Zvcm1hdHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2Fqdi9saWIvZG90anMvcmVmLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9hanYvbGliL2RvdGpzL2FsbE9mLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9hanYvbGliL2RvdGpzL2FueU9mLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9hanYvbGliL2RvdGpzL2NvbW1lbnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2Fqdi9saWIvZG90anMvY29uc3QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2Fqdi9saWIvZG90anMvY29udGFpbnMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2Fqdi9saWIvZG90anMvZGVwZW5kZW5jaWVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9hanYvbGliL2RvdGpzL2VudW0uanMiLCAiLi4vbm9kZV9tb2R1bGVzL2Fqdi9saWIvZG90anMvZm9ybWF0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9hanYvbGliL2RvdGpzL2lmLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9hanYvbGliL2RvdGpzL2l0ZW1zLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9hanYvbGliL2RvdGpzL19saW1pdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvYWp2L2xpYi9kb3Rqcy9fbGltaXRJdGVtcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvYWp2L2xpYi9kb3Rqcy9fbGltaXRMZW5ndGguanMiLCAiLi4vbm9kZV9tb2R1bGVzL2Fqdi9saWIvZG90anMvX2xpbWl0UHJvcGVydGllcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvYWp2L2xpYi9kb3Rqcy9tdWx0aXBsZU9mLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9hanYvbGliL2RvdGpzL25vdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvYWp2L2xpYi9kb3Rqcy9vbmVPZi5qcyIsICIuLi9ub2RlX21vZHVsZXMvYWp2L2xpYi9kb3Rqcy9wYXR0ZXJuLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9hanYvbGliL2RvdGpzL3Byb3BlcnRpZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2Fqdi9saWIvZG90anMvcHJvcGVydHlOYW1lcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvYWp2L2xpYi9kb3Rqcy9yZXF1aXJlZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvYWp2L2xpYi9kb3Rqcy91bmlxdWVJdGVtcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvYWp2L2xpYi9kb3Rqcy9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvYWp2L2xpYi9jb21waWxlL3J1bGVzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9hanYvbGliL2RhdGEuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2Fqdi9saWIvY29tcGlsZS9hc3luYy5qcyIsICIuLi9ub2RlX21vZHVsZXMvYWp2L2xpYi9kb3Rqcy9jdXN0b20uanMiLCAiLi4vbm9kZV9tb2R1bGVzL2Fqdi9saWIvcmVmcy9qc29uLXNjaGVtYS1kcmFmdC0wNy5qc29uIiwgIi4uL25vZGVfbW9kdWxlcy9hanYvbGliL2RlZmluaXRpb25fc2NoZW1hLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9hanYvbGliL2tleXdvcmQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2Fqdi9saWIvcmVmcy9kYXRhLmpzb24iLCAiLi4vbm9kZV9tb2R1bGVzL2Fqdi9saWIvYWp2LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9AbW9kZWxjb250ZXh0cHJvdG9jb2wvc2RrL3NyYy9zZXJ2ZXIvaW5kZXgudHMiLCAiLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL2JpbmQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi91dGlscy5qcyIsICIuLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NvcmUvQXhpb3NFcnJvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvZGVsYXllZC1zdHJlYW0vbGliL2RlbGF5ZWRfc3RyZWFtLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9jb21iaW5lZC1zdHJlYW0vbGliL2NvbWJpbmVkX3N0cmVhbS5qcyIsICIuLi9ub2RlX21vZHVsZXMvbWltZS1kYi9kYi5qc29uIiwgIi4uL25vZGVfbW9kdWxlcy9taW1lLWRiL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9taW1lLXR5cGVzL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9hc3luY2tpdC9saWIvZGVmZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2FzeW5ja2l0L2xpYi9hc3luYy5qcyIsICIuLi9ub2RlX21vZHVsZXMvYXN5bmNraXQvbGliL2Fib3J0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9hc3luY2tpdC9saWIvaXRlcmF0ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvYXN5bmNraXQvbGliL3N0YXRlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9hc3luY2tpdC9saWIvdGVybWluYXRvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvYXN5bmNraXQvcGFyYWxsZWwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2FzeW5ja2l0L3NlcmlhbE9yZGVyZWQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2FzeW5ja2l0L3NlcmlhbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvYXN5bmNraXQvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL2VzLW9iamVjdC1hdG9tcy9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvZXMtZXJyb3JzL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9lcy1lcnJvcnMvZXZhbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvZXMtZXJyb3JzL3JhbmdlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9lcy1lcnJvcnMvcmVmLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9lcy1lcnJvcnMvc3ludGF4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9lcy1lcnJvcnMvdHlwZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvZXMtZXJyb3JzL3VyaS5qcyIsICIuLi9ub2RlX21vZHVsZXMvbWF0aC1pbnRyaW5zaWNzL2Ficy5qcyIsICIuLi9ub2RlX21vZHVsZXMvbWF0aC1pbnRyaW5zaWNzL2Zsb29yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9tYXRoLWludHJpbnNpY3MvbWF4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9tYXRoLWludHJpbnNpY3MvbWluLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9tYXRoLWludHJpbnNpY3MvcG93LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9tYXRoLWludHJpbnNpY3Mvcm91bmQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL21hdGgtaW50cmluc2ljcy9pc05hTi5qcyIsICIuLi9ub2RlX21vZHVsZXMvbWF0aC1pbnRyaW5zaWNzL3NpZ24uanMiLCAiLi4vbm9kZV9tb2R1bGVzL2dvcGQvZ09QRC5qcyIsICIuLi9ub2RlX21vZHVsZXMvZ29wZC9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvZXMtZGVmaW5lLXByb3BlcnR5L2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9oYXMtc3ltYm9scy9zaGFtcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvaGFzLXN5bWJvbHMvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL2dldC1wcm90by9SZWZsZWN0LmdldFByb3RvdHlwZU9mLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9nZXQtcHJvdG8vT2JqZWN0LmdldFByb3RvdHlwZU9mLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9mdW5jdGlvbi1iaW5kL2ltcGxlbWVudGF0aW9uLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9mdW5jdGlvbi1iaW5kL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9jYWxsLWJpbmQtYXBwbHktaGVscGVycy9mdW5jdGlvbkNhbGwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2NhbGwtYmluZC1hcHBseS1oZWxwZXJzL2Z1bmN0aW9uQXBwbHkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2NhbGwtYmluZC1hcHBseS1oZWxwZXJzL3JlZmxlY3RBcHBseS5qcyIsICIuLi9ub2RlX21vZHVsZXMvY2FsbC1iaW5kLWFwcGx5LWhlbHBlcnMvYWN0dWFsQXBwbHkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2NhbGwtYmluZC1hcHBseS1oZWxwZXJzL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9kdW5kZXItcHJvdG8vZ2V0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9nZXQtcHJvdG8vaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL2hhc293bi9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvZ2V0LWludHJpbnNpYy9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvaGFzLXRvc3RyaW5ndGFnL3NoYW1zLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9lcy1zZXQtdG9zdHJpbmd0YWcvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL2Zvcm0tZGF0YS9saWIvcG9wdWxhdGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2Zvcm0tZGF0YS9saWIvZm9ybV9kYXRhLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvcGxhdGZvcm0vbm9kZS9jbGFzc2VzL0Zvcm1EYXRhLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy90b0Zvcm1EYXRhLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9BeGlvc1VSTFNlYXJjaFBhcmFtcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvYnVpbGRVUkwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jb3JlL0ludGVyY2VwdG9yTWFuYWdlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2RlZmF1bHRzL3RyYW5zaXRpb25hbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL3BsYXRmb3JtL25vZGUvY2xhc3Nlcy9VUkxTZWFyY2hQYXJhbXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9wbGF0Zm9ybS9ub2RlL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvcGxhdGZvcm0vY29tbW9uL3V0aWxzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvcGxhdGZvcm0vaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL3RvVVJMRW5jb2RlZEZvcm0uanMiLCAiLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL2Zvcm1EYXRhVG9KU09OLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvZGVmYXVsdHMvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL3BhcnNlSGVhZGVycy5qcyIsICIuLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NvcmUvQXhpb3NIZWFkZXJzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY29yZS90cmFuc2Zvcm1EYXRhLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY2FuY2VsL2lzQ2FuY2VsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY2FuY2VsL0NhbmNlbGVkRXJyb3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jb3JlL3NldHRsZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvaXNBYnNvbHV0ZVVSTC5qcyIsICIuLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvY29tYmluZVVSTHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jb3JlL2J1aWxkRnVsbFBhdGguanMiLCAiLi4vbm9kZV9tb2R1bGVzL3Byb3h5LWZyb20tZW52L2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9tcy9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvZGVidWcvc3JjL2NvbW1vbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvZGVidWcvc3JjL2Jyb3dzZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2RlYnVnL3NyYy9ub2RlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9kZWJ1Zy9zcmMvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL2ZvbGxvdy1yZWRpcmVjdHMvZGVidWcuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2ZvbGxvdy1yZWRpcmVjdHMvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9lbnYvZGF0YS5qcyIsICIuLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvcGFyc2VQcm90b2NvbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvZnJvbURhdGFVUkkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL0F4aW9zVHJhbnNmb3JtU3RyZWFtLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9yZWFkQmxvYi5qcyIsICIuLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvZm9ybURhdGFUb1N0cmVhbS5qcyIsICIuLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvWmxpYkhlYWRlclRyYW5zZm9ybVN0cmVhbS5qcyIsICIuLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvY2FsbGJhY2tpZnkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL3NwZWVkb21ldGVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy90aHJvdHRsZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvcHJvZ3Jlc3NFdmVudFJlZHVjZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9hZGFwdGVycy9odHRwLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9pc1VSTFNhbWVPcmlnaW4uanMiLCAiLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL2Nvb2tpZXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jb3JlL21lcmdlQ29uZmlnLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9yZXNvbHZlQ29uZmlnLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvYWRhcHRlcnMveGhyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9jb21wb3NlU2lnbmFscy5qcyIsICIuLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvdHJhY2tTdHJlYW0uanMiLCAiLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9hZGFwdGVycy9mZXRjaC5qcyIsICIuLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2FkYXB0ZXJzL2FkYXB0ZXJzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY29yZS9kaXNwYXRjaFJlcXVlc3QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL3ZhbGlkYXRvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NvcmUvQXhpb3MuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jYW5jZWwvQ2FuY2VsVG9rZW4uanMiLCAiLi4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL3NwcmVhZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvaXNBeGlvc0Vycm9yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9IdHRwU3RhdHVzQ29kZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2F4aW9zLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9heGlvcy9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvY2hlZXJpby9zcmMvb3B0aW9ucy50cyIsICIuLi9ub2RlX21vZHVsZXMvZG9tZWxlbWVudHR5cGUvbGliL2VzbS9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvZG9taGFuZGxlci9saWIvZXNtL25vZGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2RvbWhhbmRsZXIvbGliL2VzbS9pbmRleC5qcyIsICJodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vZmI1NS9lbnRpdGllcy82MWFmZDQ3MDFlYWE3MzY5NzhiMTNjNzM1MWNkM2RlOWE5NmIwNGJjL3NyYy9nZW5lcmF0ZWQvZGVjb2RlLWRhdGEtaHRtbC50cyIsICJodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vZmI1NS9lbnRpdGllcy82MWFmZDQ3MDFlYWE3MzY5NzhiMTNjNzM1MWNkM2RlOWE5NmIwNGJjL3NyYy9nZW5lcmF0ZWQvZGVjb2RlLWRhdGEteG1sLnRzIiwgImh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9mYjU1L2VudGl0aWVzLzYxYWZkNDcwMWVhYTczNjk3OGIxM2M3MzUxY2QzZGU5YTk2YjA0YmMvc3JjL2RlY29kZV9jb2RlcG9pbnQudHMiLCAiaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL2ZiNTUvZW50aXRpZXMvNjFhZmQ0NzAxZWFhNzM2OTc4YjEzYzczNTFjZDNkZTlhOTZiMDRiYy9zcmMvZGVjb2RlLnRzIiwgImh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9mYjU1L2VudGl0aWVzLzYxYWZkNDcwMWVhYTczNjk3OGIxM2M3MzUxY2QzZGU5YTk2YjA0YmMvc3JjL2dlbmVyYXRlZC9lbmNvZGUtaHRtbC50cyIsICJodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vZmI1NS9lbnRpdGllcy82MWFmZDQ3MDFlYWE3MzY5NzhiMTNjNzM1MWNkM2RlOWE5NmIwNGJjL3NyYy9lc2NhcGUudHMiLCAiaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL2ZiNTUvZW50aXRpZXMvNjFhZmQ0NzAxZWFhNzM2OTc4YjEzYzczNTFjZDNkZTlhOTZiMDRiYy9zcmMvZW5jb2RlLnRzIiwgImh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9mYjU1L2VudGl0aWVzLzYxYWZkNDcwMWVhYTczNjk3OGIxM2M3MzUxY2QzZGU5YTk2YjA0YmMvc3JjL2luZGV4LnRzIiwgIi4uL25vZGVfbW9kdWxlcy9kb20tc2VyaWFsaXplci9saWIvZXNtL2ZvcmVpZ25OYW1lcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvZG9tLXNlcmlhbGl6ZXIvbGliL2VzbS9pbmRleC5qcyIsICJodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vZmI1NS9kb211dGlscy8wYWI4YmNmMWVjZmM3MGRmYzkzMjkxYTRjYjI0OTY1NzhhYzI1ZTljL3NyYy9zdHJpbmdpZnkudHMiLCAiaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL2ZiNTUvZG9tdXRpbHMvMGFiOGJjZjFlY2ZjNzBkZmM5MzI5MWE0Y2IyNDk2NTc4YWMyNWU5Yy9zcmMvdHJhdmVyc2FsLnRzIiwgImh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9mYjU1L2RvbXV0aWxzLzBhYjhiY2YxZWNmYzcwZGZjOTMyOTFhNGNiMjQ5NjU3OGFjMjVlOWMvc3JjL21hbmlwdWxhdGlvbi50cyIsICJodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vZmI1NS9kb211dGlscy8wYWI4YmNmMWVjZmM3MGRmYzkzMjkxYTRjYjI0OTY1NzhhYzI1ZTljL3NyYy9xdWVyeWluZy50cyIsICJodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vZmI1NS9kb211dGlscy8wYWI4YmNmMWVjZmM3MGRmYzkzMjkxYTRjYjI0OTY1NzhhYzI1ZTljL3NyYy9sZWdhY3kudHMiLCAiaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL2ZiNTUvZG9tdXRpbHMvMGFiOGJjZjFlY2ZjNzBkZmM5MzI5MWE0Y2IyNDk2NTc4YWMyNWU5Yy9zcmMvaGVscGVycy50cyIsICJodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vZmI1NS9kb211dGlscy8wYWI4YmNmMWVjZmM3MGRmYzkzMjkxYTRjYjI0OTY1NzhhYzI1ZTljL3NyYy9mZWVkcy50cyIsICJodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vZmI1NS9kb211dGlscy8wYWI4YmNmMWVjZmM3MGRmYzkzMjkxYTRjYjI0OTY1NzhhYzI1ZTljL3NyYy9pbmRleC50cyIsICIuLi9ub2RlX21vZHVsZXMvY2hlZXJpby9zcmMvc3RhdGljLnRzIiwgIi4uL25vZGVfbW9kdWxlcy9jaGVlcmlvL3NyYy91dGlscy50cyIsICIuLi9ub2RlX21vZHVsZXMvY2hlZXJpby9zcmMvYXBpL2F0dHJpYnV0ZXMudHMiLCAiLi4vbm9kZV9tb2R1bGVzL2Nzcy13aGF0L2xpYi9jb21tb25qcy90eXBlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvY3NzLXdoYXQvbGliL2NvbW1vbmpzL3BhcnNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9jc3Mtd2hhdC9saWIvY29tbW9uanMvc3RyaW5naWZ5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9jc3Mtd2hhdC9saWIvY29tbW9uanMvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL2Jvb2xiYXNlL2luZGV4LmpzIiwgImh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9mYjU1L2Nzcy1zZWxlY3QvMGYwNzI1YTlkZmVkZGQyZmRiNTRlZGE5NjU2Y2RiYWI1YmJmNmJlNi9zcmMvc29ydC50cyIsICJodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vZmI1NS9jc3Mtc2VsZWN0LzBmMDcyNWE5ZGZlZGRkMmZkYjU0ZWRhOTY1NmNkYmFiNWJiZjZiZTYvc3JjL2F0dHJpYnV0ZXMudHMiLCAiaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL2ZiNTUvbnRoLWNoZWNrLzYzOWZkMmE0MDAwYjY5ZjgyMzUwYWFkOGMzNGNiNDNmNzdlNDgzYmEvc3JjL3BhcnNlLnRzIiwgImh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9mYjU1L250aC1jaGVjay82MzlmZDJhNDAwMGI2OWY4MjM1MGFhZDhjMzRjYjQzZjc3ZTQ4M2JhL3NyYy9jb21waWxlLnRzIiwgImh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9mYjU1L250aC1jaGVjay82MzlmZDJhNDAwMGI2OWY4MjM1MGFhZDhjMzRjYjQzZjc3ZTQ4M2JhL3NyYy9pbmRleC50cyIsICJodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vZmI1NS9jc3Mtc2VsZWN0LzBmMDcyNWE5ZGZlZGRkMmZkYjU0ZWRhOTY1NmNkYmFiNWJiZjZiZTYvc3JjL3BzZXVkby1zZWxlY3RvcnMvZmlsdGVycy50cyIsICJodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vZmI1NS9jc3Mtc2VsZWN0LzBmMDcyNWE5ZGZlZGRkMmZkYjU0ZWRhOTY1NmNkYmFiNWJiZjZiZTYvc3JjL3BzZXVkby1zZWxlY3RvcnMvcHNldWRvcy50cyIsICJodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vZmI1NS9jc3Mtc2VsZWN0LzBmMDcyNWE5ZGZlZGRkMmZkYjU0ZWRhOTY1NmNkYmFiNWJiZjZiZTYvc3JjL3BzZXVkby1zZWxlY3RvcnMvYWxpYXNlcy50cyIsICJodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vZmI1NS9jc3Mtc2VsZWN0LzBmMDcyNWE5ZGZlZGRkMmZkYjU0ZWRhOTY1NmNkYmFiNWJiZjZiZTYvc3JjL3BzZXVkby1zZWxlY3RvcnMvc3Vic2VsZWN0cy50cyIsICJodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vZmI1NS9jc3Mtc2VsZWN0LzBmMDcyNWE5ZGZlZGRkMmZkYjU0ZWRhOTY1NmNkYmFiNWJiZjZiZTYvc3JjL3BzZXVkby1zZWxlY3RvcnMvaW5kZXgudHMiLCAiaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL2ZiNTUvY3NzLXNlbGVjdC8wZjA3MjVhOWRmZWRkZDJmZGI1NGVkYTk2NTZjZGJhYjViYmY2YmU2L3NyYy9nZW5lcmFsLnRzIiwgImh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9mYjU1L2Nzcy1zZWxlY3QvMGYwNzI1YTlkZmVkZGQyZmRiNTRlZGE5NjU2Y2RiYWI1YmJmNmJlNi9zcmMvY29tcGlsZS50cyIsICJodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vZmI1NS9jc3Mtc2VsZWN0LzBmMDcyNWE5ZGZlZGRkMmZkYjU0ZWRhOTY1NmNkYmFiNWJiZjZiZTYvc3JjL2luZGV4LnRzIiwgImh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9jaGVlcmlvanMvY2hlZXJpby1zZWxlY3QvZWYwNjNhNmNhNGMzZjBkMDJkMmZjMzUwNWU3NTBiNmZiODFjNDQ4ZC9zcmMvcG9zaXRpb25hbHMudHMiLCAiaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL2NoZWVyaW9qcy9jaGVlcmlvLXNlbGVjdC9lZjA2M2E2Y2E0YzNmMGQwMmQyZmMzNTA1ZTc1MGI2ZmI4MWM0NDhkL3NyYy9oZWxwZXJzLnRzIiwgImh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9jaGVlcmlvanMvY2hlZXJpby1zZWxlY3QvZWYwNjNhNmNhNGMzZjBkMDJkMmZjMzUwNWU3NTBiNmZiODFjNDQ4ZC9zcmMvaW5kZXgudHMiLCAiLi4vbm9kZV9tb2R1bGVzL2NoZWVyaW8vc3JjL2FwaS90cmF2ZXJzaW5nLnRzIiwgIi4uL25vZGVfbW9kdWxlcy9jaGVlcmlvL3NyYy9wYXJzZS50cyIsICIuLi9ub2RlX21vZHVsZXMvY2hlZXJpby9zcmMvYXBpL21hbmlwdWxhdGlvbi50cyIsICIuLi9ub2RlX21vZHVsZXMvY2hlZXJpby9zcmMvYXBpL2Nzcy50cyIsICIuLi9ub2RlX21vZHVsZXMvY2hlZXJpby9zcmMvYXBpL2Zvcm1zLnRzIiwgIi4uL25vZGVfbW9kdWxlcy9jaGVlcmlvL3NyYy9hcGkvZXh0cmFjdC50cyIsICIuLi9ub2RlX21vZHVsZXMvY2hlZXJpby9zcmMvY2hlZXJpby50cyIsICIuLi9ub2RlX21vZHVsZXMvY2hlZXJpby9zcmMvbG9hZC50cyIsICIuLi9ub2RlX21vZHVsZXMvcGFyc2U1L2Rpc3QvY29tbW9uL3VuaWNvZGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3BhcnNlNS9kaXN0L2NvbW1vbi9lcnJvci1jb2Rlcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvcGFyc2U1L2Rpc3QvdG9rZW5pemVyL3ByZXByb2Nlc3Nvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvcGFyc2U1L2Rpc3QvY29tbW9uL3Rva2VuLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9wYXJzZTUvZGlzdC9jb21tb24vaHRtbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvcGFyc2U1L2Rpc3QvdG9rZW5pemVyL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9wYXJzZTUvZGlzdC9wYXJzZXIvb3Blbi1lbGVtZW50LXN0YWNrLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9wYXJzZTUvZGlzdC9wYXJzZXIvZm9ybWF0dGluZy1lbGVtZW50LWxpc3QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3BhcnNlNS9kaXN0L3RyZWUtYWRhcHRlcnMvZGVmYXVsdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvcGFyc2U1L2Rpc3QvY29tbW9uL2RvY3R5cGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3BhcnNlNS9kaXN0L2NvbW1vbi9mb3JlaWduLWNvbnRlbnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3BhcnNlNS9kaXN0L3BhcnNlci9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvcGFyc2U1L2Rpc3Qvc2VyaWFsaXplci9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvcGFyc2U1L2Rpc3QvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL3BhcnNlNS1odG1scGFyc2VyMi10cmVlLWFkYXB0ZXIvZGlzdC9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvY2hlZXJpby9zcmMvcGFyc2Vycy9wYXJzZTUtYWRhcHRlci50cyIsICJodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vZmI1NS9odG1scGFyc2VyMi9lMjkzOWE2YzdiMDVkNWM0ODQ1YjRhMmU0NThhNGZjMGE2NWEzMjFkL3NyYy9Ub2tlbml6ZXIudHMiLCAiaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL2ZiNTUvaHRtbHBhcnNlcjIvZTI5MzlhNmM3YjA1ZDVjNDg0NWI0YTJlNDU4YTRmYzBhNjVhMzIxZC9zcmMvUGFyc2VyLnRzIiwgImh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9mYjU1L2h0bWxwYXJzZXIyL2UyOTM5YTZjN2IwNWQ1YzQ4NDViNGEyZTQ1OGE0ZmMwYTY1YTMyMWQvc3JjL2luZGV4LnRzIiwgIi4uL25vZGVfbW9kdWxlcy9jaGVlcmlvL3NyYy9sb2FkLXBhcnNlLnRzIiwgIi4uL25vZGVfbW9kdWxlcy9wYXJzZTUtcGFyc2VyLXN0cmVhbS9kaXN0L2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy9zYWZlci1idWZmZXIvc2FmZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2ljb252LWxpdGUvbGliL2JvbS1oYW5kbGluZy5qcyIsICIuLi9ub2RlX21vZHVsZXMvaWNvbnYtbGl0ZS9lbmNvZGluZ3MvaW50ZXJuYWwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2ljb252LWxpdGUvZW5jb2RpbmdzL3V0ZjMyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9pY29udi1saXRlL2VuY29kaW5ncy91dGYxNi5qcyIsICIuLi9ub2RlX21vZHVsZXMvaWNvbnYtbGl0ZS9lbmNvZGluZ3MvdXRmNy5qcyIsICIuLi9ub2RlX21vZHVsZXMvaWNvbnYtbGl0ZS9lbmNvZGluZ3Mvc2Jjcy1jb2RlYy5qcyIsICIuLi9ub2RlX21vZHVsZXMvaWNvbnYtbGl0ZS9lbmNvZGluZ3Mvc2Jjcy1kYXRhLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9pY29udi1saXRlL2VuY29kaW5ncy9zYmNzLWRhdGEtZ2VuZXJhdGVkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9pY29udi1saXRlL2VuY29kaW5ncy9kYmNzLWNvZGVjLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9pY29udi1saXRlL2VuY29kaW5ncy90YWJsZXMvc2hpZnRqaXMuanNvbiIsICIuLi9ub2RlX21vZHVsZXMvaWNvbnYtbGl0ZS9lbmNvZGluZ3MvdGFibGVzL2V1Y2pwLmpzb24iLCAiLi4vbm9kZV9tb2R1bGVzL2ljb252LWxpdGUvZW5jb2RpbmdzL3RhYmxlcy9jcDkzNi5qc29uIiwgIi4uL25vZGVfbW9kdWxlcy9pY29udi1saXRlL2VuY29kaW5ncy90YWJsZXMvZ2JrLWFkZGVkLmpzb24iLCAiLi4vbm9kZV9tb2R1bGVzL2ljb252LWxpdGUvZW5jb2RpbmdzL3RhYmxlcy9nYjE4MDMwLXJhbmdlcy5qc29uIiwgIi4uL25vZGVfbW9kdWxlcy9pY29udi1saXRlL2VuY29kaW5ncy90YWJsZXMvY3A5NDkuanNvbiIsICIuLi9ub2RlX21vZHVsZXMvaWNvbnYtbGl0ZS9lbmNvZGluZ3MvdGFibGVzL2NwOTUwLmpzb24iLCAiLi4vbm9kZV9tb2R1bGVzL2ljb252LWxpdGUvZW5jb2RpbmdzL3RhYmxlcy9iaWc1LWFkZGVkLmpzb24iLCAiLi4vbm9kZV9tb2R1bGVzL2ljb252LWxpdGUvZW5jb2RpbmdzL2RiY3MtZGF0YS5qcyIsICIuLi9ub2RlX21vZHVsZXMvaWNvbnYtbGl0ZS9lbmNvZGluZ3MvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL2ljb252LWxpdGUvbGliL3N0cmVhbXMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL2ljb252LWxpdGUvbGliL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy93aGF0d2ctZW5jb2RpbmcvbGliL3N1cHBvcnRlZC1uYW1lcy5qc29uIiwgIi4uL25vZGVfbW9kdWxlcy93aGF0d2ctZW5jb2RpbmcvbGliL2xhYmVscy10by1uYW1lcy5qc29uIiwgIi4uL25vZGVfbW9kdWxlcy93aGF0d2ctZW5jb2RpbmcvbGliL3doYXR3Zy1lbmNvZGluZy5qcyIsICIuLi9ub2RlX21vZHVsZXMvZW5jb2Rpbmctc25pZmZlci9zcmMvc25pZmZlci50cyIsICIuLi9ub2RlX21vZHVsZXMvZW5jb2Rpbmctc25pZmZlci9zcmMvaW5kZXgudHMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvY29yZS9zeW1ib2xzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2NvcmUvZXJyb3JzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2NvcmUvY29uc3RhbnRzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2NvcmUvdHJlZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9jb3JlL3V0aWwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvY29yZS9kaWFnbm9zdGljcy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9jb3JlL3JlcXVlc3QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvZGlzcGF0Y2hlci9kaXNwYXRjaGVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2Rpc3BhdGNoZXIvZGlzcGF0Y2hlci1iYXNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL3V0aWwvdGltZXJzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2NvcmUvY29ubmVjdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9sbGh0dHAvdXRpbHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvbGxodHRwL2NvbnN0YW50cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9sbGh0dHAvbGxodHRwLXdhc20uanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvbGxodHRwL2xsaHR0cF9zaW1kLXdhc20uanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvd2ViL2ZldGNoL2NvbnN0YW50cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi93ZWIvZmV0Y2gvZ2xvYmFsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL3dlYi9mZXRjaC9kYXRhLXVybC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi93ZWIvZmV0Y2gvd2ViaWRsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL3dlYi9mZXRjaC91dGlsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL3dlYi9mZXRjaC9zeW1ib2xzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL3dlYi9mZXRjaC9maWxlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL3dlYi9mZXRjaC9mb3JtZGF0YS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi93ZWIvZmV0Y2gvZm9ybWRhdGEtcGFyc2VyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL3dlYi9mZXRjaC9ib2R5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2Rpc3BhdGNoZXIvY2xpZW50LWgxLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2Rpc3BhdGNoZXIvY2xpZW50LWgyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2hhbmRsZXIvcmVkaXJlY3QtaGFuZGxlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9pbnRlcmNlcHRvci9yZWRpcmVjdC1pbnRlcmNlcHRvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9kaXNwYXRjaGVyL2NsaWVudC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9kaXNwYXRjaGVyL2ZpeGVkLXF1ZXVlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2Rpc3BhdGNoZXIvcG9vbC1zdGF0cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9kaXNwYXRjaGVyL3Bvb2wtYmFzZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9kaXNwYXRjaGVyL3Bvb2wuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvZGlzcGF0Y2hlci9iYWxhbmNlZC1wb29sLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2Rpc3BhdGNoZXIvYWdlbnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvZGlzcGF0Y2hlci9wcm94eS1hZ2VudC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9kaXNwYXRjaGVyL2Vudi1odHRwLXByb3h5LWFnZW50LmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2hhbmRsZXIvcmV0cnktaGFuZGxlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9kaXNwYXRjaGVyL3JldHJ5LWFnZW50LmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2FwaS9yZWFkYWJsZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9hcGkvdXRpbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9hcGkvYXBpLXJlcXVlc3QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvYXBpL2Fib3J0LXNpZ25hbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9hcGkvYXBpLXN0cmVhbS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9hcGkvYXBpLXBpcGVsaW5lLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2FwaS9hcGktdXBncmFkZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9hcGkvYXBpLWNvbm5lY3QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvYXBpL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL21vY2svbW9jay1lcnJvcnMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvbW9jay9tb2NrLXN5bWJvbHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvbW9jay9tb2NrLXV0aWxzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL21vY2svbW9jay1pbnRlcmNlcHRvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9tb2NrL21vY2stY2xpZW50LmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL21vY2svbW9jay1wb29sLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL21vY2svcGx1cmFsaXplci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9tb2NrL3BlbmRpbmctaW50ZXJjZXB0b3JzLWZvcm1hdHRlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9tb2NrL21vY2stYWdlbnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvZ2xvYmFsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2hhbmRsZXIvZGVjb3JhdG9yLWhhbmRsZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvaW50ZXJjZXB0b3IvcmVkaXJlY3QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvaW50ZXJjZXB0b3IvcmV0cnkuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvaW50ZXJjZXB0b3IvZHVtcC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9pbnRlcmNlcHRvci9kbnMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvd2ViL2ZldGNoL2hlYWRlcnMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvd2ViL2ZldGNoL3Jlc3BvbnNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL3dlYi9mZXRjaC9kaXNwYXRjaGVyLXdlYWtyZWYuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvd2ViL2ZldGNoL3JlcXVlc3QuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvd2ViL2ZldGNoL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL3dlYi9maWxlYXBpL3N5bWJvbHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvd2ViL2ZpbGVhcGkvcHJvZ3Jlc3NldmVudC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi93ZWIvZmlsZWFwaS9lbmNvZGluZy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi93ZWIvZmlsZWFwaS91dGlsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL3dlYi9maWxlYXBpL2ZpbGVyZWFkZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvd2ViL2NhY2hlL3N5bWJvbHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvd2ViL2NhY2hlL3V0aWwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvd2ViL2NhY2hlL2NhY2hlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL3dlYi9jYWNoZS9jYWNoZXN0b3JhZ2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvd2ViL2Nvb2tpZXMvY29uc3RhbnRzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL3dlYi9jb29raWVzL3V0aWwuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvd2ViL2Nvb2tpZXMvcGFyc2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvd2ViL2Nvb2tpZXMvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvd2ViL3dlYnNvY2tldC9ldmVudHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvd2ViL3dlYnNvY2tldC9jb25zdGFudHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvd2ViL3dlYnNvY2tldC9zeW1ib2xzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL3dlYi93ZWJzb2NrZXQvdXRpbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi93ZWIvd2Vic29ja2V0L2ZyYW1lLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL3dlYi93ZWJzb2NrZXQvY29ubmVjdGlvbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi93ZWIvd2Vic29ja2V0L3Blcm1lc3NhZ2UtZGVmbGF0ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi93ZWIvd2Vic29ja2V0L3JlY2VpdmVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL3dlYi93ZWJzb2NrZXQvc2VuZGVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL3dlYi93ZWJzb2NrZXQvd2Vic29ja2V0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL3dlYi9ldmVudHNvdXJjZS91dGlsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL3dlYi9ldmVudHNvdXJjZS9ldmVudHNvdXJjZS1zdHJlYW0uanMiLCAiLi4vbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvd2ViL2V2ZW50c291cmNlL2V2ZW50c291cmNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy91bmRpY2kvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzL3doYXR3Zy1taW1ldHlwZS9saWIvdXRpbHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3doYXR3Zy1taW1ldHlwZS9saWIvbWltZS10eXBlLXBhcmFtZXRlcnMuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3doYXR3Zy1taW1ldHlwZS9saWIvcGFyc2VyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy93aGF0d2ctbWltZXR5cGUvbGliL3NlcmlhbGl6ZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzL3doYXR3Zy1taW1ldHlwZS9saWIvbWltZS10eXBlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy9jaGVlcmlvL3NyYy9pbmRleC50cyIsICIuLi9zcmMvdXRpbHMvc2VhcmNoLmpzIiwgIi4uL3NyYy90b29scy9zZWFyY2hUb29sLmpzIiwgIi4uL3NyYy90b29scy9mZXRjaFVybFRvb2wuanMiLCAiLi4vc3JjL3Rvb2xzL21ldGFkYXRhVG9vbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvdXVpZC9kaXN0L2VzbS1ub2RlL3JuZy5qcyIsICIuLi9ub2RlX21vZHVsZXMvdXVpZC9kaXN0L2VzbS1ub2RlL3N0cmluZ2lmeS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdXVpZC9kaXN0L2VzbS1ub2RlL25hdGl2ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvdXVpZC9kaXN0L2VzbS1ub2RlL3Y0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy91dWlkL2Rpc3QvZXNtLW5vZGUvaW5kZXguanMiLCAiLi4vc3JjL3V0aWxzL3NlYXJjaF9mZWxvLmpzIiwgIi4uL3NyYy90b29scy9mZWxvVG9vbC5qcyIsICIuLi9zcmMvaW5kZXgudHMiLCAiYm9vdHN0cmFwOnZpcnR1YWw6Ym9vdHN0cmFwIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyJ2YXIgdXRpbDtcbihmdW5jdGlvbiAodXRpbCkge1xuICAgIHV0aWwuYXNzZXJ0RXF1YWwgPSAodmFsKSA9PiB2YWw7XG4gICAgZnVuY3Rpb24gYXNzZXJ0SXMoX2FyZykgeyB9XG4gICAgdXRpbC5hc3NlcnRJcyA9IGFzc2VydElzO1xuICAgIGZ1bmN0aW9uIGFzc2VydE5ldmVyKF94KSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcigpO1xuICAgIH1cbiAgICB1dGlsLmFzc2VydE5ldmVyID0gYXNzZXJ0TmV2ZXI7XG4gICAgdXRpbC5hcnJheVRvRW51bSA9IChpdGVtcykgPT4ge1xuICAgICAgICBjb25zdCBvYmogPSB7fTtcbiAgICAgICAgZm9yIChjb25zdCBpdGVtIG9mIGl0ZW1zKSB7XG4gICAgICAgICAgICBvYmpbaXRlbV0gPSBpdGVtO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBvYmo7XG4gICAgfTtcbiAgICB1dGlsLmdldFZhbGlkRW51bVZhbHVlcyA9IChvYmopID0+IHtcbiAgICAgICAgY29uc3QgdmFsaWRLZXlzID0gdXRpbC5vYmplY3RLZXlzKG9iaikuZmlsdGVyKChrKSA9PiB0eXBlb2Ygb2JqW29ialtrXV0gIT09IFwibnVtYmVyXCIpO1xuICAgICAgICBjb25zdCBmaWx0ZXJlZCA9IHt9O1xuICAgICAgICBmb3IgKGNvbnN0IGsgb2YgdmFsaWRLZXlzKSB7XG4gICAgICAgICAgICBmaWx0ZXJlZFtrXSA9IG9ialtrXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdXRpbC5vYmplY3RWYWx1ZXMoZmlsdGVyZWQpO1xuICAgIH07XG4gICAgdXRpbC5vYmplY3RWYWx1ZXMgPSAob2JqKSA9PiB7XG4gICAgICAgIHJldHVybiB1dGlsLm9iamVjdEtleXMob2JqKS5tYXAoZnVuY3Rpb24gKGUpIHtcbiAgICAgICAgICAgIHJldHVybiBvYmpbZV07XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgdXRpbC5vYmplY3RLZXlzID0gdHlwZW9mIE9iamVjdC5rZXlzID09PSBcImZ1bmN0aW9uXCIgLy8gZXNsaW50LWRpc2FibGUtbGluZSBiYW4vYmFuXG4gICAgICAgID8gKG9iaikgPT4gT2JqZWN0LmtleXMob2JqKSAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIGJhbi9iYW5cbiAgICAgICAgOiAob2JqZWN0KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBrZXlzID0gW107XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBvYmplY3QpIHtcbiAgICAgICAgICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwga2V5KSkge1xuICAgICAgICAgICAgICAgICAgICBrZXlzLnB1c2goa2V5KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4ga2V5cztcbiAgICAgICAgfTtcbiAgICB1dGlsLmZpbmQgPSAoYXJyLCBjaGVja2VyKSA9PiB7XG4gICAgICAgIGZvciAoY29uc3QgaXRlbSBvZiBhcnIpIHtcbiAgICAgICAgICAgIGlmIChjaGVja2VyKGl0ZW0pKVxuICAgICAgICAgICAgICAgIHJldHVybiBpdGVtO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfTtcbiAgICB1dGlsLmlzSW50ZWdlciA9IHR5cGVvZiBOdW1iZXIuaXNJbnRlZ2VyID09PSBcImZ1bmN0aW9uXCJcbiAgICAgICAgPyAodmFsKSA9PiBOdW1iZXIuaXNJbnRlZ2VyKHZhbCkgLy8gZXNsaW50LWRpc2FibGUtbGluZSBiYW4vYmFuXG4gICAgICAgIDogKHZhbCkgPT4gdHlwZW9mIHZhbCA9PT0gXCJudW1iZXJcIiAmJiBpc0Zpbml0ZSh2YWwpICYmIE1hdGguZmxvb3IodmFsKSA9PT0gdmFsO1xuICAgIGZ1bmN0aW9uIGpvaW5WYWx1ZXMoYXJyYXksIHNlcGFyYXRvciA9IFwiIHwgXCIpIHtcbiAgICAgICAgcmV0dXJuIGFycmF5XG4gICAgICAgICAgICAubWFwKCh2YWwpID0+ICh0eXBlb2YgdmFsID09PSBcInN0cmluZ1wiID8gYCcke3ZhbH0nYCA6IHZhbCkpXG4gICAgICAgICAgICAuam9pbihzZXBhcmF0b3IpO1xuICAgIH1cbiAgICB1dGlsLmpvaW5WYWx1ZXMgPSBqb2luVmFsdWVzO1xuICAgIHV0aWwuanNvblN0cmluZ2lmeVJlcGxhY2VyID0gKF8sIHZhbHVlKSA9PiB7XG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09IFwiYmlnaW50XCIpIHtcbiAgICAgICAgICAgIHJldHVybiB2YWx1ZS50b1N0cmluZygpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9O1xufSkodXRpbCB8fCAodXRpbCA9IHt9KSk7XG52YXIgb2JqZWN0VXRpbDtcbihmdW5jdGlvbiAob2JqZWN0VXRpbCkge1xuICAgIG9iamVjdFV0aWwubWVyZ2VTaGFwZXMgPSAoZmlyc3QsIHNlY29uZCkgPT4ge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgLi4uZmlyc3QsXG4gICAgICAgICAgICAuLi5zZWNvbmQsIC8vIHNlY29uZCBvdmVyd3JpdGVzIGZpcnN0XG4gICAgICAgIH07XG4gICAgfTtcbn0pKG9iamVjdFV0aWwgfHwgKG9iamVjdFV0aWwgPSB7fSkpO1xuY29uc3QgWm9kUGFyc2VkVHlwZSA9IHV0aWwuYXJyYXlUb0VudW0oW1xuICAgIFwic3RyaW5nXCIsXG4gICAgXCJuYW5cIixcbiAgICBcIm51bWJlclwiLFxuICAgIFwiaW50ZWdlclwiLFxuICAgIFwiZmxvYXRcIixcbiAgICBcImJvb2xlYW5cIixcbiAgICBcImRhdGVcIixcbiAgICBcImJpZ2ludFwiLFxuICAgIFwic3ltYm9sXCIsXG4gICAgXCJmdW5jdGlvblwiLFxuICAgIFwidW5kZWZpbmVkXCIsXG4gICAgXCJudWxsXCIsXG4gICAgXCJhcnJheVwiLFxuICAgIFwib2JqZWN0XCIsXG4gICAgXCJ1bmtub3duXCIsXG4gICAgXCJwcm9taXNlXCIsXG4gICAgXCJ2b2lkXCIsXG4gICAgXCJuZXZlclwiLFxuICAgIFwibWFwXCIsXG4gICAgXCJzZXRcIixcbl0pO1xuY29uc3QgZ2V0UGFyc2VkVHlwZSA9IChkYXRhKSA9PiB7XG4gICAgY29uc3QgdCA9IHR5cGVvZiBkYXRhO1xuICAgIHN3aXRjaCAodCkge1xuICAgICAgICBjYXNlIFwidW5kZWZpbmVkXCI6XG4gICAgICAgICAgICByZXR1cm4gWm9kUGFyc2VkVHlwZS51bmRlZmluZWQ7XG4gICAgICAgIGNhc2UgXCJzdHJpbmdcIjpcbiAgICAgICAgICAgIHJldHVybiBab2RQYXJzZWRUeXBlLnN0cmluZztcbiAgICAgICAgY2FzZSBcIm51bWJlclwiOlxuICAgICAgICAgICAgcmV0dXJuIGlzTmFOKGRhdGEpID8gWm9kUGFyc2VkVHlwZS5uYW4gOiBab2RQYXJzZWRUeXBlLm51bWJlcjtcbiAgICAgICAgY2FzZSBcImJvb2xlYW5cIjpcbiAgICAgICAgICAgIHJldHVybiBab2RQYXJzZWRUeXBlLmJvb2xlYW47XG4gICAgICAgIGNhc2UgXCJmdW5jdGlvblwiOlxuICAgICAgICAgICAgcmV0dXJuIFpvZFBhcnNlZFR5cGUuZnVuY3Rpb247XG4gICAgICAgIGNhc2UgXCJiaWdpbnRcIjpcbiAgICAgICAgICAgIHJldHVybiBab2RQYXJzZWRUeXBlLmJpZ2ludDtcbiAgICAgICAgY2FzZSBcInN5bWJvbFwiOlxuICAgICAgICAgICAgcmV0dXJuIFpvZFBhcnNlZFR5cGUuc3ltYm9sO1xuICAgICAgICBjYXNlIFwib2JqZWN0XCI6XG4gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShkYXRhKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBab2RQYXJzZWRUeXBlLmFycmF5O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGRhdGEgPT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gWm9kUGFyc2VkVHlwZS5udWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGRhdGEudGhlbiAmJlxuICAgICAgICAgICAgICAgIHR5cGVvZiBkYXRhLnRoZW4gPT09IFwiZnVuY3Rpb25cIiAmJlxuICAgICAgICAgICAgICAgIGRhdGEuY2F0Y2ggJiZcbiAgICAgICAgICAgICAgICB0eXBlb2YgZGF0YS5jYXRjaCA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFpvZFBhcnNlZFR5cGUucHJvbWlzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0eXBlb2YgTWFwICE9PSBcInVuZGVmaW5lZFwiICYmIGRhdGEgaW5zdGFuY2VvZiBNYXApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gWm9kUGFyc2VkVHlwZS5tYXA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodHlwZW9mIFNldCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBkYXRhIGluc3RhbmNlb2YgU2V0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFpvZFBhcnNlZFR5cGUuc2V0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHR5cGVvZiBEYXRlICE9PSBcInVuZGVmaW5lZFwiICYmIGRhdGEgaW5zdGFuY2VvZiBEYXRlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFpvZFBhcnNlZFR5cGUuZGF0ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBab2RQYXJzZWRUeXBlLm9iamVjdDtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHJldHVybiBab2RQYXJzZWRUeXBlLnVua25vd247XG4gICAgfVxufTtcblxuY29uc3QgWm9kSXNzdWVDb2RlID0gdXRpbC5hcnJheVRvRW51bShbXG4gICAgXCJpbnZhbGlkX3R5cGVcIixcbiAgICBcImludmFsaWRfbGl0ZXJhbFwiLFxuICAgIFwiY3VzdG9tXCIsXG4gICAgXCJpbnZhbGlkX3VuaW9uXCIsXG4gICAgXCJpbnZhbGlkX3VuaW9uX2Rpc2NyaW1pbmF0b3JcIixcbiAgICBcImludmFsaWRfZW51bV92YWx1ZVwiLFxuICAgIFwidW5yZWNvZ25pemVkX2tleXNcIixcbiAgICBcImludmFsaWRfYXJndW1lbnRzXCIsXG4gICAgXCJpbnZhbGlkX3JldHVybl90eXBlXCIsXG4gICAgXCJpbnZhbGlkX2RhdGVcIixcbiAgICBcImludmFsaWRfc3RyaW5nXCIsXG4gICAgXCJ0b29fc21hbGxcIixcbiAgICBcInRvb19iaWdcIixcbiAgICBcImludmFsaWRfaW50ZXJzZWN0aW9uX3R5cGVzXCIsXG4gICAgXCJub3RfbXVsdGlwbGVfb2ZcIixcbiAgICBcIm5vdF9maW5pdGVcIixcbl0pO1xuY29uc3QgcXVvdGVsZXNzSnNvbiA9IChvYmopID0+IHtcbiAgICBjb25zdCBqc29uID0gSlNPTi5zdHJpbmdpZnkob2JqLCBudWxsLCAyKTtcbiAgICByZXR1cm4ganNvbi5yZXBsYWNlKC9cIihbXlwiXSspXCI6L2csIFwiJDE6XCIpO1xufTtcbmNsYXNzIFpvZEVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICAgIGdldCBlcnJvcnMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmlzc3VlcztcbiAgICB9XG4gICAgY29uc3RydWN0b3IoaXNzdWVzKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIHRoaXMuaXNzdWVzID0gW107XG4gICAgICAgIHRoaXMuYWRkSXNzdWUgPSAoc3ViKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmlzc3VlcyA9IFsuLi50aGlzLmlzc3Vlcywgc3ViXTtcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5hZGRJc3N1ZXMgPSAoc3VicyA9IFtdKSA9PiB7XG4gICAgICAgICAgICB0aGlzLmlzc3VlcyA9IFsuLi50aGlzLmlzc3VlcywgLi4uc3Vic107XG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IGFjdHVhbFByb3RvID0gbmV3LnRhcmdldC5wcm90b3R5cGU7XG4gICAgICAgIGlmIChPYmplY3Quc2V0UHJvdG90eXBlT2YpIHtcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBiYW4vYmFuXG4gICAgICAgICAgICBPYmplY3Quc2V0UHJvdG90eXBlT2YodGhpcywgYWN0dWFsUHJvdG8pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fX3Byb3RvX18gPSBhY3R1YWxQcm90bztcbiAgICAgICAgfVxuICAgICAgICB0aGlzLm5hbWUgPSBcIlpvZEVycm9yXCI7XG4gICAgICAgIHRoaXMuaXNzdWVzID0gaXNzdWVzO1xuICAgIH1cbiAgICBmb3JtYXQoX21hcHBlcikge1xuICAgICAgICBjb25zdCBtYXBwZXIgPSBfbWFwcGVyIHx8XG4gICAgICAgICAgICBmdW5jdGlvbiAoaXNzdWUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaXNzdWUubWVzc2FnZTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIGNvbnN0IGZpZWxkRXJyb3JzID0geyBfZXJyb3JzOiBbXSB9O1xuICAgICAgICBjb25zdCBwcm9jZXNzRXJyb3IgPSAoZXJyb3IpID0+IHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgaXNzdWUgb2YgZXJyb3IuaXNzdWVzKSB7XG4gICAgICAgICAgICAgICAgaWYgKGlzc3VlLmNvZGUgPT09IFwiaW52YWxpZF91bmlvblwiKSB7XG4gICAgICAgICAgICAgICAgICAgIGlzc3VlLnVuaW9uRXJyb3JzLm1hcChwcm9jZXNzRXJyb3IpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChpc3N1ZS5jb2RlID09PSBcImludmFsaWRfcmV0dXJuX3R5cGVcIikge1xuICAgICAgICAgICAgICAgICAgICBwcm9jZXNzRXJyb3IoaXNzdWUucmV0dXJuVHlwZUVycm9yKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoaXNzdWUuY29kZSA9PT0gXCJpbnZhbGlkX2FyZ3VtZW50c1wiKSB7XG4gICAgICAgICAgICAgICAgICAgIHByb2Nlc3NFcnJvcihpc3N1ZS5hcmd1bWVudHNFcnJvcik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKGlzc3VlLnBhdGgubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGZpZWxkRXJyb3JzLl9lcnJvcnMucHVzaChtYXBwZXIoaXNzdWUpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBjdXJyID0gZmllbGRFcnJvcnM7XG4gICAgICAgICAgICAgICAgICAgIGxldCBpID0gMDtcbiAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGkgPCBpc3N1ZS5wYXRoLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZWwgPSBpc3N1ZS5wYXRoW2ldO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdGVybWluYWwgPSBpID09PSBpc3N1ZS5wYXRoLmxlbmd0aCAtIDE7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXRlcm1pbmFsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycltlbF0gPSBjdXJyW2VsXSB8fCB7IF9lcnJvcnM6IFtdIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaWYgKHR5cGVvZiBlbCA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgY3VycltlbF0gPSBjdXJyW2VsXSB8fCB7IF9lcnJvcnM6IFtdIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gfSBlbHNlIGlmICh0eXBlb2YgZWwgPT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgIGNvbnN0IGVycm9yQXJyYXk6IGFueSA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgZXJyb3JBcnJheS5fZXJyb3JzID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICBjdXJyW2VsXSA9IGN1cnJbZWxdIHx8IGVycm9yQXJyYXk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycltlbF0gPSBjdXJyW2VsXSB8fCB7IF9lcnJvcnM6IFtdIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycltlbF0uX2Vycm9ycy5wdXNoKG1hcHBlcihpc3N1ZSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgY3VyciA9IGN1cnJbZWxdO1xuICAgICAgICAgICAgICAgICAgICAgICAgaSsrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICBwcm9jZXNzRXJyb3IodGhpcyk7XG4gICAgICAgIHJldHVybiBmaWVsZEVycm9ycztcbiAgICB9XG4gICAgc3RhdGljIGFzc2VydCh2YWx1ZSkge1xuICAgICAgICBpZiAoISh2YWx1ZSBpbnN0YW5jZW9mIFpvZEVycm9yKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBOb3QgYSBab2RFcnJvcjogJHt2YWx1ZX1gKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICB0b1N0cmluZygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWVzc2FnZTtcbiAgICB9XG4gICAgZ2V0IG1lc3NhZ2UoKSB7XG4gICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeSh0aGlzLmlzc3VlcywgdXRpbC5qc29uU3RyaW5naWZ5UmVwbGFjZXIsIDIpO1xuICAgIH1cbiAgICBnZXQgaXNFbXB0eSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaXNzdWVzLmxlbmd0aCA9PT0gMDtcbiAgICB9XG4gICAgZmxhdHRlbihtYXBwZXIgPSAoaXNzdWUpID0+IGlzc3VlLm1lc3NhZ2UpIHtcbiAgICAgICAgY29uc3QgZmllbGRFcnJvcnMgPSB7fTtcbiAgICAgICAgY29uc3QgZm9ybUVycm9ycyA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IHN1YiBvZiB0aGlzLmlzc3Vlcykge1xuICAgICAgICAgICAgaWYgKHN1Yi5wYXRoLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICBmaWVsZEVycm9yc1tzdWIucGF0aFswXV0gPSBmaWVsZEVycm9yc1tzdWIucGF0aFswXV0gfHwgW107XG4gICAgICAgICAgICAgICAgZmllbGRFcnJvcnNbc3ViLnBhdGhbMF1dLnB1c2gobWFwcGVyKHN1YikpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgZm9ybUVycm9ycy5wdXNoKG1hcHBlcihzdWIpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geyBmb3JtRXJyb3JzLCBmaWVsZEVycm9ycyB9O1xuICAgIH1cbiAgICBnZXQgZm9ybUVycm9ycygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZmxhdHRlbigpO1xuICAgIH1cbn1cblpvZEVycm9yLmNyZWF0ZSA9IChpc3N1ZXMpID0+IHtcbiAgICBjb25zdCBlcnJvciA9IG5ldyBab2RFcnJvcihpc3N1ZXMpO1xuICAgIHJldHVybiBlcnJvcjtcbn07XG5cbmNvbnN0IGVycm9yTWFwID0gKGlzc3VlLCBfY3R4KSA9PiB7XG4gICAgbGV0IG1lc3NhZ2U7XG4gICAgc3dpdGNoIChpc3N1ZS5jb2RlKSB7XG4gICAgICAgIGNhc2UgWm9kSXNzdWVDb2RlLmludmFsaWRfdHlwZTpcbiAgICAgICAgICAgIGlmIChpc3N1ZS5yZWNlaXZlZCA9PT0gWm9kUGFyc2VkVHlwZS51bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICBtZXNzYWdlID0gXCJSZXF1aXJlZFwiO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgbWVzc2FnZSA9IGBFeHBlY3RlZCAke2lzc3VlLmV4cGVjdGVkfSwgcmVjZWl2ZWQgJHtpc3N1ZS5yZWNlaXZlZH1gO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgWm9kSXNzdWVDb2RlLmludmFsaWRfbGl0ZXJhbDpcbiAgICAgICAgICAgIG1lc3NhZ2UgPSBgSW52YWxpZCBsaXRlcmFsIHZhbHVlLCBleHBlY3RlZCAke0pTT04uc3RyaW5naWZ5KGlzc3VlLmV4cGVjdGVkLCB1dGlsLmpzb25TdHJpbmdpZnlSZXBsYWNlcil9YDtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFpvZElzc3VlQ29kZS51bnJlY29nbml6ZWRfa2V5czpcbiAgICAgICAgICAgIG1lc3NhZ2UgPSBgVW5yZWNvZ25pemVkIGtleShzKSBpbiBvYmplY3Q6ICR7dXRpbC5qb2luVmFsdWVzKGlzc3VlLmtleXMsIFwiLCBcIil9YDtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFpvZElzc3VlQ29kZS5pbnZhbGlkX3VuaW9uOlxuICAgICAgICAgICAgbWVzc2FnZSA9IGBJbnZhbGlkIGlucHV0YDtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFpvZElzc3VlQ29kZS5pbnZhbGlkX3VuaW9uX2Rpc2NyaW1pbmF0b3I6XG4gICAgICAgICAgICBtZXNzYWdlID0gYEludmFsaWQgZGlzY3JpbWluYXRvciB2YWx1ZS4gRXhwZWN0ZWQgJHt1dGlsLmpvaW5WYWx1ZXMoaXNzdWUub3B0aW9ucyl9YDtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFpvZElzc3VlQ29kZS5pbnZhbGlkX2VudW1fdmFsdWU6XG4gICAgICAgICAgICBtZXNzYWdlID0gYEludmFsaWQgZW51bSB2YWx1ZS4gRXhwZWN0ZWQgJHt1dGlsLmpvaW5WYWx1ZXMoaXNzdWUub3B0aW9ucyl9LCByZWNlaXZlZCAnJHtpc3N1ZS5yZWNlaXZlZH0nYDtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFpvZElzc3VlQ29kZS5pbnZhbGlkX2FyZ3VtZW50czpcbiAgICAgICAgICAgIG1lc3NhZ2UgPSBgSW52YWxpZCBmdW5jdGlvbiBhcmd1bWVudHNgO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgWm9kSXNzdWVDb2RlLmludmFsaWRfcmV0dXJuX3R5cGU6XG4gICAgICAgICAgICBtZXNzYWdlID0gYEludmFsaWQgZnVuY3Rpb24gcmV0dXJuIHR5cGVgO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgWm9kSXNzdWVDb2RlLmludmFsaWRfZGF0ZTpcbiAgICAgICAgICAgIG1lc3NhZ2UgPSBgSW52YWxpZCBkYXRlYDtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFpvZElzc3VlQ29kZS5pbnZhbGlkX3N0cmluZzpcbiAgICAgICAgICAgIGlmICh0eXBlb2YgaXNzdWUudmFsaWRhdGlvbiA9PT0gXCJvYmplY3RcIikge1xuICAgICAgICAgICAgICAgIGlmIChcImluY2x1ZGVzXCIgaW4gaXNzdWUudmFsaWRhdGlvbikge1xuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlID0gYEludmFsaWQgaW5wdXQ6IG11c3QgaW5jbHVkZSBcIiR7aXNzdWUudmFsaWRhdGlvbi5pbmNsdWRlc31cImA7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgaXNzdWUudmFsaWRhdGlvbi5wb3NpdGlvbiA9PT0gXCJudW1iZXJcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZSA9IGAke21lc3NhZ2V9IGF0IG9uZSBvciBtb3JlIHBvc2l0aW9ucyBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJHtpc3N1ZS52YWxpZGF0aW9uLnBvc2l0aW9ufWA7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoXCJzdGFydHNXaXRoXCIgaW4gaXNzdWUudmFsaWRhdGlvbikge1xuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlID0gYEludmFsaWQgaW5wdXQ6IG11c3Qgc3RhcnQgd2l0aCBcIiR7aXNzdWUudmFsaWRhdGlvbi5zdGFydHNXaXRofVwiYDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoXCJlbmRzV2l0aFwiIGluIGlzc3VlLnZhbGlkYXRpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZSA9IGBJbnZhbGlkIGlucHV0OiBtdXN0IGVuZCB3aXRoIFwiJHtpc3N1ZS52YWxpZGF0aW9uLmVuZHNXaXRofVwiYDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHV0aWwuYXNzZXJ0TmV2ZXIoaXNzdWUudmFsaWRhdGlvbik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoaXNzdWUudmFsaWRhdGlvbiAhPT0gXCJyZWdleFwiKSB7XG4gICAgICAgICAgICAgICAgbWVzc2FnZSA9IGBJbnZhbGlkICR7aXNzdWUudmFsaWRhdGlvbn1gO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgbWVzc2FnZSA9IFwiSW52YWxpZFwiO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgWm9kSXNzdWVDb2RlLnRvb19zbWFsbDpcbiAgICAgICAgICAgIGlmIChpc3N1ZS50eXBlID09PSBcImFycmF5XCIpXG4gICAgICAgICAgICAgICAgbWVzc2FnZSA9IGBBcnJheSBtdXN0IGNvbnRhaW4gJHtpc3N1ZS5leGFjdCA/IFwiZXhhY3RseVwiIDogaXNzdWUuaW5jbHVzaXZlID8gYGF0IGxlYXN0YCA6IGBtb3JlIHRoYW5gfSAke2lzc3VlLm1pbmltdW19IGVsZW1lbnQocylgO1xuICAgICAgICAgICAgZWxzZSBpZiAoaXNzdWUudHlwZSA9PT0gXCJzdHJpbmdcIilcbiAgICAgICAgICAgICAgICBtZXNzYWdlID0gYFN0cmluZyBtdXN0IGNvbnRhaW4gJHtpc3N1ZS5leGFjdCA/IFwiZXhhY3RseVwiIDogaXNzdWUuaW5jbHVzaXZlID8gYGF0IGxlYXN0YCA6IGBvdmVyYH0gJHtpc3N1ZS5taW5pbXVtfSBjaGFyYWN0ZXIocylgO1xuICAgICAgICAgICAgZWxzZSBpZiAoaXNzdWUudHlwZSA9PT0gXCJudW1iZXJcIilcbiAgICAgICAgICAgICAgICBtZXNzYWdlID0gYE51bWJlciBtdXN0IGJlICR7aXNzdWUuZXhhY3RcbiAgICAgICAgICAgICAgICAgICAgPyBgZXhhY3RseSBlcXVhbCB0byBgXG4gICAgICAgICAgICAgICAgICAgIDogaXNzdWUuaW5jbHVzaXZlXG4gICAgICAgICAgICAgICAgICAgICAgICA/IGBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gYFxuICAgICAgICAgICAgICAgICAgICAgICAgOiBgZ3JlYXRlciB0aGFuIGB9JHtpc3N1ZS5taW5pbXVtfWA7XG4gICAgICAgICAgICBlbHNlIGlmIChpc3N1ZS50eXBlID09PSBcImRhdGVcIilcbiAgICAgICAgICAgICAgICBtZXNzYWdlID0gYERhdGUgbXVzdCBiZSAke2lzc3VlLmV4YWN0XG4gICAgICAgICAgICAgICAgICAgID8gYGV4YWN0bHkgZXF1YWwgdG8gYFxuICAgICAgICAgICAgICAgICAgICA6IGlzc3VlLmluY2x1c2l2ZVxuICAgICAgICAgICAgICAgICAgICAgICAgPyBgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIGBcbiAgICAgICAgICAgICAgICAgICAgICAgIDogYGdyZWF0ZXIgdGhhbiBgfSR7bmV3IERhdGUoTnVtYmVyKGlzc3VlLm1pbmltdW0pKX1gO1xuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSBcIkludmFsaWQgaW5wdXRcIjtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFpvZElzc3VlQ29kZS50b29fYmlnOlxuICAgICAgICAgICAgaWYgKGlzc3VlLnR5cGUgPT09IFwiYXJyYXlcIilcbiAgICAgICAgICAgICAgICBtZXNzYWdlID0gYEFycmF5IG11c3QgY29udGFpbiAke2lzc3VlLmV4YWN0ID8gYGV4YWN0bHlgIDogaXNzdWUuaW5jbHVzaXZlID8gYGF0IG1vc3RgIDogYGxlc3MgdGhhbmB9ICR7aXNzdWUubWF4aW11bX0gZWxlbWVudChzKWA7XG4gICAgICAgICAgICBlbHNlIGlmIChpc3N1ZS50eXBlID09PSBcInN0cmluZ1wiKVxuICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSBgU3RyaW5nIG11c3QgY29udGFpbiAke2lzc3VlLmV4YWN0ID8gYGV4YWN0bHlgIDogaXNzdWUuaW5jbHVzaXZlID8gYGF0IG1vc3RgIDogYHVuZGVyYH0gJHtpc3N1ZS5tYXhpbXVtfSBjaGFyYWN0ZXIocylgO1xuICAgICAgICAgICAgZWxzZSBpZiAoaXNzdWUudHlwZSA9PT0gXCJudW1iZXJcIilcbiAgICAgICAgICAgICAgICBtZXNzYWdlID0gYE51bWJlciBtdXN0IGJlICR7aXNzdWUuZXhhY3RcbiAgICAgICAgICAgICAgICAgICAgPyBgZXhhY3RseWBcbiAgICAgICAgICAgICAgICAgICAgOiBpc3N1ZS5pbmNsdXNpdmVcbiAgICAgICAgICAgICAgICAgICAgICAgID8gYGxlc3MgdGhhbiBvciBlcXVhbCB0b2BcbiAgICAgICAgICAgICAgICAgICAgICAgIDogYGxlc3MgdGhhbmB9ICR7aXNzdWUubWF4aW11bX1gO1xuICAgICAgICAgICAgZWxzZSBpZiAoaXNzdWUudHlwZSA9PT0gXCJiaWdpbnRcIilcbiAgICAgICAgICAgICAgICBtZXNzYWdlID0gYEJpZ0ludCBtdXN0IGJlICR7aXNzdWUuZXhhY3RcbiAgICAgICAgICAgICAgICAgICAgPyBgZXhhY3RseWBcbiAgICAgICAgICAgICAgICAgICAgOiBpc3N1ZS5pbmNsdXNpdmVcbiAgICAgICAgICAgICAgICAgICAgICAgID8gYGxlc3MgdGhhbiBvciBlcXVhbCB0b2BcbiAgICAgICAgICAgICAgICAgICAgICAgIDogYGxlc3MgdGhhbmB9ICR7aXNzdWUubWF4aW11bX1gO1xuICAgICAgICAgICAgZWxzZSBpZiAoaXNzdWUudHlwZSA9PT0gXCJkYXRlXCIpXG4gICAgICAgICAgICAgICAgbWVzc2FnZSA9IGBEYXRlIG11c3QgYmUgJHtpc3N1ZS5leGFjdFxuICAgICAgICAgICAgICAgICAgICA/IGBleGFjdGx5YFxuICAgICAgICAgICAgICAgICAgICA6IGlzc3VlLmluY2x1c2l2ZVxuICAgICAgICAgICAgICAgICAgICAgICAgPyBgc21hbGxlciB0aGFuIG9yIGVxdWFsIHRvYFxuICAgICAgICAgICAgICAgICAgICAgICAgOiBgc21hbGxlciB0aGFuYH0gJHtuZXcgRGF0ZShOdW1iZXIoaXNzdWUubWF4aW11bSkpfWA7XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgbWVzc2FnZSA9IFwiSW52YWxpZCBpbnB1dFwiO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgWm9kSXNzdWVDb2RlLmN1c3RvbTpcbiAgICAgICAgICAgIG1lc3NhZ2UgPSBgSW52YWxpZCBpbnB1dGA7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBab2RJc3N1ZUNvZGUuaW52YWxpZF9pbnRlcnNlY3Rpb25fdHlwZXM6XG4gICAgICAgICAgICBtZXNzYWdlID0gYEludGVyc2VjdGlvbiByZXN1bHRzIGNvdWxkIG5vdCBiZSBtZXJnZWRgO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgWm9kSXNzdWVDb2RlLm5vdF9tdWx0aXBsZV9vZjpcbiAgICAgICAgICAgIG1lc3NhZ2UgPSBgTnVtYmVyIG11c3QgYmUgYSBtdWx0aXBsZSBvZiAke2lzc3VlLm11bHRpcGxlT2Z9YDtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlIFpvZElzc3VlQ29kZS5ub3RfZmluaXRlOlxuICAgICAgICAgICAgbWVzc2FnZSA9IFwiTnVtYmVyIG11c3QgYmUgZmluaXRlXCI7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIG1lc3NhZ2UgPSBfY3R4LmRlZmF1bHRFcnJvcjtcbiAgICAgICAgICAgIHV0aWwuYXNzZXJ0TmV2ZXIoaXNzdWUpO1xuICAgIH1cbiAgICByZXR1cm4geyBtZXNzYWdlIH07XG59O1xuXG5sZXQgb3ZlcnJpZGVFcnJvck1hcCA9IGVycm9yTWFwO1xuZnVuY3Rpb24gc2V0RXJyb3JNYXAobWFwKSB7XG4gICAgb3ZlcnJpZGVFcnJvck1hcCA9IG1hcDtcbn1cbmZ1bmN0aW9uIGdldEVycm9yTWFwKCkge1xuICAgIHJldHVybiBvdmVycmlkZUVycm9yTWFwO1xufVxuXG5jb25zdCBtYWtlSXNzdWUgPSAocGFyYW1zKSA9PiB7XG4gICAgY29uc3QgeyBkYXRhLCBwYXRoLCBlcnJvck1hcHMsIGlzc3VlRGF0YSB9ID0gcGFyYW1zO1xuICAgIGNvbnN0IGZ1bGxQYXRoID0gWy4uLnBhdGgsIC4uLihpc3N1ZURhdGEucGF0aCB8fCBbXSldO1xuICAgIGNvbnN0IGZ1bGxJc3N1ZSA9IHtcbiAgICAgICAgLi4uaXNzdWVEYXRhLFxuICAgICAgICBwYXRoOiBmdWxsUGF0aCxcbiAgICB9O1xuICAgIGlmIChpc3N1ZURhdGEubWVzc2FnZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAuLi5pc3N1ZURhdGEsXG4gICAgICAgICAgICBwYXRoOiBmdWxsUGF0aCxcbiAgICAgICAgICAgIG1lc3NhZ2U6IGlzc3VlRGF0YS5tZXNzYWdlLFxuICAgICAgICB9O1xuICAgIH1cbiAgICBsZXQgZXJyb3JNZXNzYWdlID0gXCJcIjtcbiAgICBjb25zdCBtYXBzID0gZXJyb3JNYXBzXG4gICAgICAgIC5maWx0ZXIoKG0pID0+ICEhbSlcbiAgICAgICAgLnNsaWNlKClcbiAgICAgICAgLnJldmVyc2UoKTtcbiAgICBmb3IgKGNvbnN0IG1hcCBvZiBtYXBzKSB7XG4gICAgICAgIGVycm9yTWVzc2FnZSA9IG1hcChmdWxsSXNzdWUsIHsgZGF0YSwgZGVmYXVsdEVycm9yOiBlcnJvck1lc3NhZ2UgfSkubWVzc2FnZTtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgICAgLi4uaXNzdWVEYXRhLFxuICAgICAgICBwYXRoOiBmdWxsUGF0aCxcbiAgICAgICAgbWVzc2FnZTogZXJyb3JNZXNzYWdlLFxuICAgIH07XG59O1xuY29uc3QgRU1QVFlfUEFUSCA9IFtdO1xuZnVuY3Rpb24gYWRkSXNzdWVUb0NvbnRleHQoY3R4LCBpc3N1ZURhdGEpIHtcbiAgICBjb25zdCBvdmVycmlkZU1hcCA9IGdldEVycm9yTWFwKCk7XG4gICAgY29uc3QgaXNzdWUgPSBtYWtlSXNzdWUoe1xuICAgICAgICBpc3N1ZURhdGE6IGlzc3VlRGF0YSxcbiAgICAgICAgZGF0YTogY3R4LmRhdGEsXG4gICAgICAgIHBhdGg6IGN0eC5wYXRoLFxuICAgICAgICBlcnJvck1hcHM6IFtcbiAgICAgICAgICAgIGN0eC5jb21tb24uY29udGV4dHVhbEVycm9yTWFwLCAvLyBjb250ZXh0dWFsIGVycm9yIG1hcCBpcyBmaXJzdCBwcmlvcml0eVxuICAgICAgICAgICAgY3R4LnNjaGVtYUVycm9yTWFwLCAvLyB0aGVuIHNjaGVtYS1ib3VuZCBtYXAgaWYgYXZhaWxhYmxlXG4gICAgICAgICAgICBvdmVycmlkZU1hcCwgLy8gdGhlbiBnbG9iYWwgb3ZlcnJpZGUgbWFwXG4gICAgICAgICAgICBvdmVycmlkZU1hcCA9PT0gZXJyb3JNYXAgPyB1bmRlZmluZWQgOiBlcnJvck1hcCwgLy8gdGhlbiBnbG9iYWwgZGVmYXVsdCBtYXBcbiAgICAgICAgXS5maWx0ZXIoKHgpID0+ICEheCksXG4gICAgfSk7XG4gICAgY3R4LmNvbW1vbi5pc3N1ZXMucHVzaChpc3N1ZSk7XG59XG5jbGFzcyBQYXJzZVN0YXR1cyB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHRoaXMudmFsdWUgPSBcInZhbGlkXCI7XG4gICAgfVxuICAgIGRpcnR5KCkge1xuICAgICAgICBpZiAodGhpcy52YWx1ZSA9PT0gXCJ2YWxpZFwiKVxuICAgICAgICAgICAgdGhpcy52YWx1ZSA9IFwiZGlydHlcIjtcbiAgICB9XG4gICAgYWJvcnQoKSB7XG4gICAgICAgIGlmICh0aGlzLnZhbHVlICE9PSBcImFib3J0ZWRcIilcbiAgICAgICAgICAgIHRoaXMudmFsdWUgPSBcImFib3J0ZWRcIjtcbiAgICB9XG4gICAgc3RhdGljIG1lcmdlQXJyYXkoc3RhdHVzLCByZXN1bHRzKSB7XG4gICAgICAgIGNvbnN0IGFycmF5VmFsdWUgPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCBzIG9mIHJlc3VsdHMpIHtcbiAgICAgICAgICAgIGlmIChzLnN0YXR1cyA9PT0gXCJhYm9ydGVkXCIpXG4gICAgICAgICAgICAgICAgcmV0dXJuIElOVkFMSUQ7XG4gICAgICAgICAgICBpZiAocy5zdGF0dXMgPT09IFwiZGlydHlcIilcbiAgICAgICAgICAgICAgICBzdGF0dXMuZGlydHkoKTtcbiAgICAgICAgICAgIGFycmF5VmFsdWUucHVzaChzLnZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geyBzdGF0dXM6IHN0YXR1cy52YWx1ZSwgdmFsdWU6IGFycmF5VmFsdWUgfTtcbiAgICB9XG4gICAgc3RhdGljIGFzeW5jIG1lcmdlT2JqZWN0QXN5bmMoc3RhdHVzLCBwYWlycykge1xuICAgICAgICBjb25zdCBzeW5jUGFpcnMgPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCBwYWlyIG9mIHBhaXJzKSB7XG4gICAgICAgICAgICBjb25zdCBrZXkgPSBhd2FpdCBwYWlyLmtleTtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gYXdhaXQgcGFpci52YWx1ZTtcbiAgICAgICAgICAgIHN5bmNQYWlycy5wdXNoKHtcbiAgICAgICAgICAgICAgICBrZXksXG4gICAgICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gUGFyc2VTdGF0dXMubWVyZ2VPYmplY3RTeW5jKHN0YXR1cywgc3luY1BhaXJzKTtcbiAgICB9XG4gICAgc3RhdGljIG1lcmdlT2JqZWN0U3luYyhzdGF0dXMsIHBhaXJzKSB7XG4gICAgICAgIGNvbnN0IGZpbmFsT2JqZWN0ID0ge307XG4gICAgICAgIGZvciAoY29uc3QgcGFpciBvZiBwYWlycykge1xuICAgICAgICAgICAgY29uc3QgeyBrZXksIHZhbHVlIH0gPSBwYWlyO1xuICAgICAgICAgICAgaWYgKGtleS5zdGF0dXMgPT09IFwiYWJvcnRlZFwiKVxuICAgICAgICAgICAgICAgIHJldHVybiBJTlZBTElEO1xuICAgICAgICAgICAgaWYgKHZhbHVlLnN0YXR1cyA9PT0gXCJhYm9ydGVkXCIpXG4gICAgICAgICAgICAgICAgcmV0dXJuIElOVkFMSUQ7XG4gICAgICAgICAgICBpZiAoa2V5LnN0YXR1cyA9PT0gXCJkaXJ0eVwiKVxuICAgICAgICAgICAgICAgIHN0YXR1cy5kaXJ0eSgpO1xuICAgICAgICAgICAgaWYgKHZhbHVlLnN0YXR1cyA9PT0gXCJkaXJ0eVwiKVxuICAgICAgICAgICAgICAgIHN0YXR1cy5kaXJ0eSgpO1xuICAgICAgICAgICAgaWYgKGtleS52YWx1ZSAhPT0gXCJfX3Byb3RvX19cIiAmJlxuICAgICAgICAgICAgICAgICh0eXBlb2YgdmFsdWUudmFsdWUgIT09IFwidW5kZWZpbmVkXCIgfHwgcGFpci5hbHdheXNTZXQpKSB7XG4gICAgICAgICAgICAgICAgZmluYWxPYmplY3Rba2V5LnZhbHVlXSA9IHZhbHVlLnZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7IHN0YXR1czogc3RhdHVzLnZhbHVlLCB2YWx1ZTogZmluYWxPYmplY3QgfTtcbiAgICB9XG59XG5jb25zdCBJTlZBTElEID0gT2JqZWN0LmZyZWV6ZSh7XG4gICAgc3RhdHVzOiBcImFib3J0ZWRcIixcbn0pO1xuY29uc3QgRElSVFkgPSAodmFsdWUpID0+ICh7IHN0YXR1czogXCJkaXJ0eVwiLCB2YWx1ZSB9KTtcbmNvbnN0IE9LID0gKHZhbHVlKSA9PiAoeyBzdGF0dXM6IFwidmFsaWRcIiwgdmFsdWUgfSk7XG5jb25zdCBpc0Fib3J0ZWQgPSAoeCkgPT4geC5zdGF0dXMgPT09IFwiYWJvcnRlZFwiO1xuY29uc3QgaXNEaXJ0eSA9ICh4KSA9PiB4LnN0YXR1cyA9PT0gXCJkaXJ0eVwiO1xuY29uc3QgaXNWYWxpZCA9ICh4KSA9PiB4LnN0YXR1cyA9PT0gXCJ2YWxpZFwiO1xuY29uc3QgaXNBc3luYyA9ICh4KSA9PiB0eXBlb2YgUHJvbWlzZSAhPT0gXCJ1bmRlZmluZWRcIiAmJiB4IGluc3RhbmNlb2YgUHJvbWlzZTtcblxuLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxyXG5Db3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cclxuXHJcblBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZC9vciBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueVxyXG5wdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQuXHJcblxyXG5USEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiIEFORCBUSEUgQVVUSE9SIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUyBXSVRIXHJcblJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWVxyXG5BTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLCBESVJFQ1QsXHJcbklORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMgV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTVxyXG5MT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUlxyXG5PVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SXHJcblBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuXHJcbioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovXHJcblxyXG5mdW5jdGlvbiBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHJlY2VpdmVyLCBzdGF0ZSwga2luZCwgZikge1xyXG4gICAgaWYgKGtpbmQgPT09IFwiYVwiICYmICFmKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiUHJpdmF0ZSBhY2Nlc3NvciB3YXMgZGVmaW5lZCB3aXRob3V0IGEgZ2V0dGVyXCIpO1xyXG4gICAgaWYgKHR5cGVvZiBzdGF0ZSA9PT0gXCJmdW5jdGlvblwiID8gcmVjZWl2ZXIgIT09IHN0YXRlIHx8ICFmIDogIXN0YXRlLmhhcyhyZWNlaXZlcikpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgcmVhZCBwcml2YXRlIG1lbWJlciBmcm9tIGFuIG9iamVjdCB3aG9zZSBjbGFzcyBkaWQgbm90IGRlY2xhcmUgaXRcIik7XHJcbiAgICByZXR1cm4ga2luZCA9PT0gXCJtXCIgPyBmIDoga2luZCA9PT0gXCJhXCIgPyBmLmNhbGwocmVjZWl2ZXIpIDogZiA/IGYudmFsdWUgOiBzdGF0ZS5nZXQocmVjZWl2ZXIpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBfX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KHJlY2VpdmVyLCBzdGF0ZSwgdmFsdWUsIGtpbmQsIGYpIHtcclxuICAgIGlmIChraW5kID09PSBcIm1cIikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlByaXZhdGUgbWV0aG9kIGlzIG5vdCB3cml0YWJsZVwiKTtcclxuICAgIGlmIChraW5kID09PSBcImFcIiAmJiAhZikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlByaXZhdGUgYWNjZXNzb3Igd2FzIGRlZmluZWQgd2l0aG91dCBhIHNldHRlclwiKTtcclxuICAgIGlmICh0eXBlb2Ygc3RhdGUgPT09IFwiZnVuY3Rpb25cIiA/IHJlY2VpdmVyICE9PSBzdGF0ZSB8fCAhZiA6ICFzdGF0ZS5oYXMocmVjZWl2ZXIpKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IHdyaXRlIHByaXZhdGUgbWVtYmVyIHRvIGFuIG9iamVjdCB3aG9zZSBjbGFzcyBkaWQgbm90IGRlY2xhcmUgaXRcIik7XHJcbiAgICByZXR1cm4gKGtpbmQgPT09IFwiYVwiID8gZi5jYWxsKHJlY2VpdmVyLCB2YWx1ZSkgOiBmID8gZi52YWx1ZSA9IHZhbHVlIDogc3RhdGUuc2V0KHJlY2VpdmVyLCB2YWx1ZSkpLCB2YWx1ZTtcclxufVxyXG5cclxudHlwZW9mIFN1cHByZXNzZWRFcnJvciA9PT0gXCJmdW5jdGlvblwiID8gU3VwcHJlc3NlZEVycm9yIDogZnVuY3Rpb24gKGVycm9yLCBzdXBwcmVzc2VkLCBtZXNzYWdlKSB7XHJcbiAgICB2YXIgZSA9IG5ldyBFcnJvcihtZXNzYWdlKTtcclxuICAgIHJldHVybiBlLm5hbWUgPSBcIlN1cHByZXNzZWRFcnJvclwiLCBlLmVycm9yID0gZXJyb3IsIGUuc3VwcHJlc3NlZCA9IHN1cHByZXNzZWQsIGU7XHJcbn07XG5cbnZhciBlcnJvclV0aWw7XG4oZnVuY3Rpb24gKGVycm9yVXRpbCkge1xuICAgIGVycm9yVXRpbC5lcnJUb09iaiA9IChtZXNzYWdlKSA9PiB0eXBlb2YgbWVzc2FnZSA9PT0gXCJzdHJpbmdcIiA/IHsgbWVzc2FnZSB9IDogbWVzc2FnZSB8fCB7fTtcbiAgICBlcnJvclV0aWwudG9TdHJpbmcgPSAobWVzc2FnZSkgPT4gdHlwZW9mIG1lc3NhZ2UgPT09IFwic3RyaW5nXCIgPyBtZXNzYWdlIDogbWVzc2FnZSA9PT0gbnVsbCB8fCBtZXNzYWdlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBtZXNzYWdlLm1lc3NhZ2U7XG59KShlcnJvclV0aWwgfHwgKGVycm9yVXRpbCA9IHt9KSk7XG5cbnZhciBfWm9kRW51bV9jYWNoZSwgX1pvZE5hdGl2ZUVudW1fY2FjaGU7XG5jbGFzcyBQYXJzZUlucHV0TGF6eVBhdGgge1xuICAgIGNvbnN0cnVjdG9yKHBhcmVudCwgdmFsdWUsIHBhdGgsIGtleSkge1xuICAgICAgICB0aGlzLl9jYWNoZWRQYXRoID0gW107XG4gICAgICAgIHRoaXMucGFyZW50ID0gcGFyZW50O1xuICAgICAgICB0aGlzLmRhdGEgPSB2YWx1ZTtcbiAgICAgICAgdGhpcy5fcGF0aCA9IHBhdGg7XG4gICAgICAgIHRoaXMuX2tleSA9IGtleTtcbiAgICB9XG4gICAgZ2V0IHBhdGgoKSB7XG4gICAgICAgIGlmICghdGhpcy5fY2FjaGVkUGF0aC5sZW5ndGgpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLl9rZXkgaW5zdGFuY2VvZiBBcnJheSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2NhY2hlZFBhdGgucHVzaCguLi50aGlzLl9wYXRoLCAuLi50aGlzLl9rZXkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fY2FjaGVkUGF0aC5wdXNoKC4uLnRoaXMuX3BhdGgsIHRoaXMuX2tleSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuX2NhY2hlZFBhdGg7XG4gICAgfVxufVxuY29uc3QgaGFuZGxlUmVzdWx0ID0gKGN0eCwgcmVzdWx0KSA9PiB7XG4gICAgaWYgKGlzVmFsaWQocmVzdWx0KSkge1xuICAgICAgICByZXR1cm4geyBzdWNjZXNzOiB0cnVlLCBkYXRhOiByZXN1bHQudmFsdWUgfTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGlmICghY3R4LmNvbW1vbi5pc3N1ZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJWYWxpZGF0aW9uIGZhaWxlZCBidXQgbm8gaXNzdWVzIGRldGVjdGVkLlwiKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgc3VjY2VzczogZmFsc2UsXG4gICAgICAgICAgICBnZXQgZXJyb3IoKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuX2Vycm9yKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fZXJyb3I7XG4gICAgICAgICAgICAgICAgY29uc3QgZXJyb3IgPSBuZXcgWm9kRXJyb3IoY3R4LmNvbW1vbi5pc3N1ZXMpO1xuICAgICAgICAgICAgICAgIHRoaXMuX2Vycm9yID0gZXJyb3I7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2Vycm9yO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICB9XG59O1xuZnVuY3Rpb24gcHJvY2Vzc0NyZWF0ZVBhcmFtcyhwYXJhbXMpIHtcbiAgICBpZiAoIXBhcmFtcylcbiAgICAgICAgcmV0dXJuIHt9O1xuICAgIGNvbnN0IHsgZXJyb3JNYXAsIGludmFsaWRfdHlwZV9lcnJvciwgcmVxdWlyZWRfZXJyb3IsIGRlc2NyaXB0aW9uIH0gPSBwYXJhbXM7XG4gICAgaWYgKGVycm9yTWFwICYmIChpbnZhbGlkX3R5cGVfZXJyb3IgfHwgcmVxdWlyZWRfZXJyb3IpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgQ2FuJ3QgdXNlIFwiaW52YWxpZF90eXBlX2Vycm9yXCIgb3IgXCJyZXF1aXJlZF9lcnJvclwiIGluIGNvbmp1bmN0aW9uIHdpdGggY3VzdG9tIGVycm9yIG1hcC5gKTtcbiAgICB9XG4gICAgaWYgKGVycm9yTWFwKVxuICAgICAgICByZXR1cm4geyBlcnJvck1hcDogZXJyb3JNYXAsIGRlc2NyaXB0aW9uIH07XG4gICAgY29uc3QgY3VzdG9tTWFwID0gKGlzcywgY3R4KSA9PiB7XG4gICAgICAgIHZhciBfYSwgX2I7XG4gICAgICAgIGNvbnN0IHsgbWVzc2FnZSB9ID0gcGFyYW1zO1xuICAgICAgICBpZiAoaXNzLmNvZGUgPT09IFwiaW52YWxpZF9lbnVtX3ZhbHVlXCIpIHtcbiAgICAgICAgICAgIHJldHVybiB7IG1lc3NhZ2U6IG1lc3NhZ2UgIT09IG51bGwgJiYgbWVzc2FnZSAhPT0gdm9pZCAwID8gbWVzc2FnZSA6IGN0eC5kZWZhdWx0RXJyb3IgfTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIGN0eC5kYXRhID09PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgICAgICByZXR1cm4geyBtZXNzYWdlOiAoX2EgPSBtZXNzYWdlICE9PSBudWxsICYmIG1lc3NhZ2UgIT09IHZvaWQgMCA/IG1lc3NhZ2UgOiByZXF1aXJlZF9lcnJvcikgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogY3R4LmRlZmF1bHRFcnJvciB9O1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc3MuY29kZSAhPT0gXCJpbnZhbGlkX3R5cGVcIilcbiAgICAgICAgICAgIHJldHVybiB7IG1lc3NhZ2U6IGN0eC5kZWZhdWx0RXJyb3IgfTtcbiAgICAgICAgcmV0dXJuIHsgbWVzc2FnZTogKF9iID0gbWVzc2FnZSAhPT0gbnVsbCAmJiBtZXNzYWdlICE9PSB2b2lkIDAgPyBtZXNzYWdlIDogaW52YWxpZF90eXBlX2Vycm9yKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiBjdHguZGVmYXVsdEVycm9yIH07XG4gICAgfTtcbiAgICByZXR1cm4geyBlcnJvck1hcDogY3VzdG9tTWFwLCBkZXNjcmlwdGlvbiB9O1xufVxuY2xhc3MgWm9kVHlwZSB7XG4gICAgZ2V0IGRlc2NyaXB0aW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGVmLmRlc2NyaXB0aW9uO1xuICAgIH1cbiAgICBfZ2V0VHlwZShpbnB1dCkge1xuICAgICAgICByZXR1cm4gZ2V0UGFyc2VkVHlwZShpbnB1dC5kYXRhKTtcbiAgICB9XG4gICAgX2dldE9yUmV0dXJuQ3R4KGlucHV0LCBjdHgpIHtcbiAgICAgICAgcmV0dXJuIChjdHggfHwge1xuICAgICAgICAgICAgY29tbW9uOiBpbnB1dC5wYXJlbnQuY29tbW9uLFxuICAgICAgICAgICAgZGF0YTogaW5wdXQuZGF0YSxcbiAgICAgICAgICAgIHBhcnNlZFR5cGU6IGdldFBhcnNlZFR5cGUoaW5wdXQuZGF0YSksXG4gICAgICAgICAgICBzY2hlbWFFcnJvck1hcDogdGhpcy5fZGVmLmVycm9yTWFwLFxuICAgICAgICAgICAgcGF0aDogaW5wdXQucGF0aCxcbiAgICAgICAgICAgIHBhcmVudDogaW5wdXQucGFyZW50LFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgX3Byb2Nlc3NJbnB1dFBhcmFtcyhpbnB1dCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgc3RhdHVzOiBuZXcgUGFyc2VTdGF0dXMoKSxcbiAgICAgICAgICAgIGN0eDoge1xuICAgICAgICAgICAgICAgIGNvbW1vbjogaW5wdXQucGFyZW50LmNvbW1vbixcbiAgICAgICAgICAgICAgICBkYXRhOiBpbnB1dC5kYXRhLFxuICAgICAgICAgICAgICAgIHBhcnNlZFR5cGU6IGdldFBhcnNlZFR5cGUoaW5wdXQuZGF0YSksXG4gICAgICAgICAgICAgICAgc2NoZW1hRXJyb3JNYXA6IHRoaXMuX2RlZi5lcnJvck1hcCxcbiAgICAgICAgICAgICAgICBwYXRoOiBpbnB1dC5wYXRoLFxuICAgICAgICAgICAgICAgIHBhcmVudDogaW5wdXQucGFyZW50LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgX3BhcnNlU3luYyhpbnB1dCkge1xuICAgICAgICBjb25zdCByZXN1bHQgPSB0aGlzLl9wYXJzZShpbnB1dCk7XG4gICAgICAgIGlmIChpc0FzeW5jKHJlc3VsdCkpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlN5bmNocm9ub3VzIHBhcnNlIGVuY291bnRlcmVkIHByb21pc2UuXCIpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuICAgIF9wYXJzZUFzeW5jKGlucHV0KSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMuX3BhcnNlKGlucHV0KTtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShyZXN1bHQpO1xuICAgIH1cbiAgICBwYXJzZShkYXRhLCBwYXJhbXMpIHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gdGhpcy5zYWZlUGFyc2UoZGF0YSwgcGFyYW1zKTtcbiAgICAgICAgaWYgKHJlc3VsdC5zdWNjZXNzKVxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdC5kYXRhO1xuICAgICAgICB0aHJvdyByZXN1bHQuZXJyb3I7XG4gICAgfVxuICAgIHNhZmVQYXJzZShkYXRhLCBwYXJhbXMpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICBjb25zdCBjdHggPSB7XG4gICAgICAgICAgICBjb21tb246IHtcbiAgICAgICAgICAgICAgICBpc3N1ZXM6IFtdLFxuICAgICAgICAgICAgICAgIGFzeW5jOiAoX2EgPSBwYXJhbXMgPT09IG51bGwgfHwgcGFyYW1zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBwYXJhbXMuYXN5bmMpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IGZhbHNlLFxuICAgICAgICAgICAgICAgIGNvbnRleHR1YWxFcnJvck1hcDogcGFyYW1zID09PSBudWxsIHx8IHBhcmFtcyA9PT0gdm9pZCAwID8gdm9pZCAwIDogcGFyYW1zLmVycm9yTWFwLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHBhdGg6IChwYXJhbXMgPT09IG51bGwgfHwgcGFyYW1zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBwYXJhbXMucGF0aCkgfHwgW10sXG4gICAgICAgICAgICBzY2hlbWFFcnJvck1hcDogdGhpcy5fZGVmLmVycm9yTWFwLFxuICAgICAgICAgICAgcGFyZW50OiBudWxsLFxuICAgICAgICAgICAgZGF0YSxcbiAgICAgICAgICAgIHBhcnNlZFR5cGU6IGdldFBhcnNlZFR5cGUoZGF0YSksXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMuX3BhcnNlU3luYyh7IGRhdGEsIHBhdGg6IGN0eC5wYXRoLCBwYXJlbnQ6IGN0eCB9KTtcbiAgICAgICAgcmV0dXJuIGhhbmRsZVJlc3VsdChjdHgsIHJlc3VsdCk7XG4gICAgfVxuICAgIFwifnZhbGlkYXRlXCIoZGF0YSkge1xuICAgICAgICB2YXIgX2EsIF9iO1xuICAgICAgICBjb25zdCBjdHggPSB7XG4gICAgICAgICAgICBjb21tb246IHtcbiAgICAgICAgICAgICAgICBpc3N1ZXM6IFtdLFxuICAgICAgICAgICAgICAgIGFzeW5jOiAhIXRoaXNbXCJ+c3RhbmRhcmRcIl0uYXN5bmMsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcGF0aDogW10sXG4gICAgICAgICAgICBzY2hlbWFFcnJvck1hcDogdGhpcy5fZGVmLmVycm9yTWFwLFxuICAgICAgICAgICAgcGFyZW50OiBudWxsLFxuICAgICAgICAgICAgZGF0YSxcbiAgICAgICAgICAgIHBhcnNlZFR5cGU6IGdldFBhcnNlZFR5cGUoZGF0YSksXG4gICAgICAgIH07XG4gICAgICAgIGlmICghdGhpc1tcIn5zdGFuZGFyZFwiXS5hc3luYykge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSB0aGlzLl9wYXJzZVN5bmMoeyBkYXRhLCBwYXRoOiBbXSwgcGFyZW50OiBjdHggfSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlzVmFsaWQocmVzdWx0KVxuICAgICAgICAgICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiByZXN1bHQudmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpc3N1ZXM6IGN0eC5jb21tb24uaXNzdWVzLFxuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgIGlmICgoX2IgPSAoX2EgPSBlcnIgPT09IG51bGwgfHwgZXJyID09PSB2b2lkIDAgPyB2b2lkIDAgOiBlcnIubWVzc2FnZSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnRvTG93ZXJDYXNlKCkpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5pbmNsdWRlcyhcImVuY291bnRlcmVkXCIpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXNbXCJ+c3RhbmRhcmRcIl0uYXN5bmMgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjdHguY29tbW9uID0ge1xuICAgICAgICAgICAgICAgICAgICBpc3N1ZXM6IFtdLFxuICAgICAgICAgICAgICAgICAgICBhc3luYzogdHJ1ZSxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLl9wYXJzZUFzeW5jKHsgZGF0YSwgcGF0aDogW10sIHBhcmVudDogY3R4IH0pLnRoZW4oKHJlc3VsdCkgPT4gaXNWYWxpZChyZXN1bHQpXG4gICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICB2YWx1ZTogcmVzdWx0LnZhbHVlLFxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgOiB7XG4gICAgICAgICAgICAgICAgaXNzdWVzOiBjdHguY29tbW9uLmlzc3VlcyxcbiAgICAgICAgICAgIH0pO1xuICAgIH1cbiAgICBhc3luYyBwYXJzZUFzeW5jKGRhdGEsIHBhcmFtcykge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLnNhZmVQYXJzZUFzeW5jKGRhdGEsIHBhcmFtcyk7XG4gICAgICAgIGlmIChyZXN1bHQuc3VjY2VzcylcbiAgICAgICAgICAgIHJldHVybiByZXN1bHQuZGF0YTtcbiAgICAgICAgdGhyb3cgcmVzdWx0LmVycm9yO1xuICAgIH1cbiAgICBhc3luYyBzYWZlUGFyc2VBc3luYyhkYXRhLCBwYXJhbXMpIHtcbiAgICAgICAgY29uc3QgY3R4ID0ge1xuICAgICAgICAgICAgY29tbW9uOiB7XG4gICAgICAgICAgICAgICAgaXNzdWVzOiBbXSxcbiAgICAgICAgICAgICAgICBjb250ZXh0dWFsRXJyb3JNYXA6IHBhcmFtcyA9PT0gbnVsbCB8fCBwYXJhbXMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHBhcmFtcy5lcnJvck1hcCxcbiAgICAgICAgICAgICAgICBhc3luYzogdHJ1ZSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBwYXRoOiAocGFyYW1zID09PSBudWxsIHx8IHBhcmFtcyA9PT0gdm9pZCAwID8gdm9pZCAwIDogcGFyYW1zLnBhdGgpIHx8IFtdLFxuICAgICAgICAgICAgc2NoZW1hRXJyb3JNYXA6IHRoaXMuX2RlZi5lcnJvck1hcCxcbiAgICAgICAgICAgIHBhcmVudDogbnVsbCxcbiAgICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgICBwYXJzZWRUeXBlOiBnZXRQYXJzZWRUeXBlKGRhdGEpLFxuICAgICAgICB9O1xuICAgICAgICBjb25zdCBtYXliZUFzeW5jUmVzdWx0ID0gdGhpcy5fcGFyc2UoeyBkYXRhLCBwYXRoOiBjdHgucGF0aCwgcGFyZW50OiBjdHggfSk7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IChpc0FzeW5jKG1heWJlQXN5bmNSZXN1bHQpXG4gICAgICAgICAgICA/IG1heWJlQXN5bmNSZXN1bHRcbiAgICAgICAgICAgIDogUHJvbWlzZS5yZXNvbHZlKG1heWJlQXN5bmNSZXN1bHQpKTtcbiAgICAgICAgcmV0dXJuIGhhbmRsZVJlc3VsdChjdHgsIHJlc3VsdCk7XG4gICAgfVxuICAgIHJlZmluZShjaGVjaywgbWVzc2FnZSkge1xuICAgICAgICBjb25zdCBnZXRJc3N1ZVByb3BlcnRpZXMgPSAodmFsKSA9PiB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIG1lc3NhZ2UgPT09IFwic3RyaW5nXCIgfHwgdHlwZW9mIG1lc3NhZ2UgPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4geyBtZXNzYWdlIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICh0eXBlb2YgbWVzc2FnZSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG1lc3NhZ2UodmFsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBtZXNzYWdlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gdGhpcy5fcmVmaW5lbWVudCgodmFsLCBjdHgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGNoZWNrKHZhbCk7XG4gICAgICAgICAgICBjb25zdCBzZXRFcnJvciA9ICgpID0+IGN0eC5hZGRJc3N1ZSh7XG4gICAgICAgICAgICAgICAgY29kZTogWm9kSXNzdWVDb2RlLmN1c3RvbSxcbiAgICAgICAgICAgICAgICAuLi5nZXRJc3N1ZVByb3BlcnRpZXModmFsKSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBQcm9taXNlICE9PSBcInVuZGVmaW5lZFwiICYmIHJlc3VsdCBpbnN0YW5jZW9mIFByb21pc2UpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0LnRoZW4oKGRhdGEpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFkYXRhKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRFcnJvcigpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghcmVzdWx0KSB7XG4gICAgICAgICAgICAgICAgc2V0RXJyb3IoKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHJlZmluZW1lbnQoY2hlY2ssIHJlZmluZW1lbnREYXRhKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9yZWZpbmVtZW50KCh2YWwsIGN0eCkgPT4ge1xuICAgICAgICAgICAgaWYgKCFjaGVjayh2YWwpKSB7XG4gICAgICAgICAgICAgICAgY3R4LmFkZElzc3VlKHR5cGVvZiByZWZpbmVtZW50RGF0YSA9PT0gXCJmdW5jdGlvblwiXG4gICAgICAgICAgICAgICAgICAgID8gcmVmaW5lbWVudERhdGEodmFsLCBjdHgpXG4gICAgICAgICAgICAgICAgICAgIDogcmVmaW5lbWVudERhdGEpO1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG4gICAgX3JlZmluZW1lbnQocmVmaW5lbWVudCkge1xuICAgICAgICByZXR1cm4gbmV3IFpvZEVmZmVjdHMoe1xuICAgICAgICAgICAgc2NoZW1hOiB0aGlzLFxuICAgICAgICAgICAgdHlwZU5hbWU6IFpvZEZpcnN0UGFydHlUeXBlS2luZC5ab2RFZmZlY3RzLFxuICAgICAgICAgICAgZWZmZWN0OiB7IHR5cGU6IFwicmVmaW5lbWVudFwiLCByZWZpbmVtZW50IH0sXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBzdXBlclJlZmluZShyZWZpbmVtZW50KSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9yZWZpbmVtZW50KHJlZmluZW1lbnQpO1xuICAgIH1cbiAgICBjb25zdHJ1Y3RvcihkZWYpIHtcbiAgICAgICAgLyoqIEFsaWFzIG9mIHNhZmVQYXJzZUFzeW5jICovXG4gICAgICAgIHRoaXMuc3BhID0gdGhpcy5zYWZlUGFyc2VBc3luYztcbiAgICAgICAgdGhpcy5fZGVmID0gZGVmO1xuICAgICAgICB0aGlzLnBhcnNlID0gdGhpcy5wYXJzZS5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLnNhZmVQYXJzZSA9IHRoaXMuc2FmZVBhcnNlLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMucGFyc2VBc3luYyA9IHRoaXMucGFyc2VBc3luYy5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLnNhZmVQYXJzZUFzeW5jID0gdGhpcy5zYWZlUGFyc2VBc3luYy5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLnNwYSA9IHRoaXMuc3BhLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMucmVmaW5lID0gdGhpcy5yZWZpbmUuYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5yZWZpbmVtZW50ID0gdGhpcy5yZWZpbmVtZW50LmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMuc3VwZXJSZWZpbmUgPSB0aGlzLnN1cGVyUmVmaW5lLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMub3B0aW9uYWwgPSB0aGlzLm9wdGlvbmFsLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMubnVsbGFibGUgPSB0aGlzLm51bGxhYmxlLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMubnVsbGlzaCA9IHRoaXMubnVsbGlzaC5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLmFycmF5ID0gdGhpcy5hcnJheS5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLnByb21pc2UgPSB0aGlzLnByb21pc2UuYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5vciA9IHRoaXMub3IuYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5hbmQgPSB0aGlzLmFuZC5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLnRyYW5zZm9ybSA9IHRoaXMudHJhbnNmb3JtLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMuYnJhbmQgPSB0aGlzLmJyYW5kLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMuZGVmYXVsdCA9IHRoaXMuZGVmYXVsdC5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLmNhdGNoID0gdGhpcy5jYXRjaC5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLmRlc2NyaWJlID0gdGhpcy5kZXNjcmliZS5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLnBpcGUgPSB0aGlzLnBpcGUuYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5yZWFkb25seSA9IHRoaXMucmVhZG9ubHkuYmluZCh0aGlzKTtcbiAgICAgICAgdGhpcy5pc051bGxhYmxlID0gdGhpcy5pc051bGxhYmxlLmJpbmQodGhpcyk7XG4gICAgICAgIHRoaXMuaXNPcHRpb25hbCA9IHRoaXMuaXNPcHRpb25hbC5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzW1wifnN0YW5kYXJkXCJdID0ge1xuICAgICAgICAgICAgdmVyc2lvbjogMSxcbiAgICAgICAgICAgIHZlbmRvcjogXCJ6b2RcIixcbiAgICAgICAgICAgIHZhbGlkYXRlOiAoZGF0YSkgPT4gdGhpc1tcIn52YWxpZGF0ZVwiXShkYXRhKSxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgb3B0aW9uYWwoKSB7XG4gICAgICAgIHJldHVybiBab2RPcHRpb25hbC5jcmVhdGUodGhpcywgdGhpcy5fZGVmKTtcbiAgICB9XG4gICAgbnVsbGFibGUoKSB7XG4gICAgICAgIHJldHVybiBab2ROdWxsYWJsZS5jcmVhdGUodGhpcywgdGhpcy5fZGVmKTtcbiAgICB9XG4gICAgbnVsbGlzaCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubnVsbGFibGUoKS5vcHRpb25hbCgpO1xuICAgIH1cbiAgICBhcnJheSgpIHtcbiAgICAgICAgcmV0dXJuIFpvZEFycmF5LmNyZWF0ZSh0aGlzKTtcbiAgICB9XG4gICAgcHJvbWlzZSgpIHtcbiAgICAgICAgcmV0dXJuIFpvZFByb21pc2UuY3JlYXRlKHRoaXMsIHRoaXMuX2RlZik7XG4gICAgfVxuICAgIG9yKG9wdGlvbikge1xuICAgICAgICByZXR1cm4gWm9kVW5pb24uY3JlYXRlKFt0aGlzLCBvcHRpb25dLCB0aGlzLl9kZWYpO1xuICAgIH1cbiAgICBhbmQoaW5jb21pbmcpIHtcbiAgICAgICAgcmV0dXJuIFpvZEludGVyc2VjdGlvbi5jcmVhdGUodGhpcywgaW5jb21pbmcsIHRoaXMuX2RlZik7XG4gICAgfVxuICAgIHRyYW5zZm9ybSh0cmFuc2Zvcm0pIHtcbiAgICAgICAgcmV0dXJuIG5ldyBab2RFZmZlY3RzKHtcbiAgICAgICAgICAgIC4uLnByb2Nlc3NDcmVhdGVQYXJhbXModGhpcy5fZGVmKSxcbiAgICAgICAgICAgIHNjaGVtYTogdGhpcyxcbiAgICAgICAgICAgIHR5cGVOYW1lOiBab2RGaXJzdFBhcnR5VHlwZUtpbmQuWm9kRWZmZWN0cyxcbiAgICAgICAgICAgIGVmZmVjdDogeyB0eXBlOiBcInRyYW5zZm9ybVwiLCB0cmFuc2Zvcm0gfSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGRlZmF1bHQoZGVmKSB7XG4gICAgICAgIGNvbnN0IGRlZmF1bHRWYWx1ZUZ1bmMgPSB0eXBlb2YgZGVmID09PSBcImZ1bmN0aW9uXCIgPyBkZWYgOiAoKSA9PiBkZWY7XG4gICAgICAgIHJldHVybiBuZXcgWm9kRGVmYXVsdCh7XG4gICAgICAgICAgICAuLi5wcm9jZXNzQ3JlYXRlUGFyYW1zKHRoaXMuX2RlZiksXG4gICAgICAgICAgICBpbm5lclR5cGU6IHRoaXMsXG4gICAgICAgICAgICBkZWZhdWx0VmFsdWU6IGRlZmF1bHRWYWx1ZUZ1bmMsXG4gICAgICAgICAgICB0eXBlTmFtZTogWm9kRmlyc3RQYXJ0eVR5cGVLaW5kLlpvZERlZmF1bHQsXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBicmFuZCgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBab2RCcmFuZGVkKHtcbiAgICAgICAgICAgIHR5cGVOYW1lOiBab2RGaXJzdFBhcnR5VHlwZUtpbmQuWm9kQnJhbmRlZCxcbiAgICAgICAgICAgIHR5cGU6IHRoaXMsXG4gICAgICAgICAgICAuLi5wcm9jZXNzQ3JlYXRlUGFyYW1zKHRoaXMuX2RlZiksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBjYXRjaChkZWYpIHtcbiAgICAgICAgY29uc3QgY2F0Y2hWYWx1ZUZ1bmMgPSB0eXBlb2YgZGVmID09PSBcImZ1bmN0aW9uXCIgPyBkZWYgOiAoKSA9PiBkZWY7XG4gICAgICAgIHJldHVybiBuZXcgWm9kQ2F0Y2goe1xuICAgICAgICAgICAgLi4ucHJvY2Vzc0NyZWF0ZVBhcmFtcyh0aGlzLl9kZWYpLFxuICAgICAgICAgICAgaW5uZXJUeXBlOiB0aGlzLFxuICAgICAgICAgICAgY2F0Y2hWYWx1ZTogY2F0Y2hWYWx1ZUZ1bmMsXG4gICAgICAgICAgICB0eXBlTmFtZTogWm9kRmlyc3RQYXJ0eVR5cGVLaW5kLlpvZENhdGNoLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgZGVzY3JpYmUoZGVzY3JpcHRpb24pIHtcbiAgICAgICAgY29uc3QgVGhpcyA9IHRoaXMuY29uc3RydWN0b3I7XG4gICAgICAgIHJldHVybiBuZXcgVGhpcyh7XG4gICAgICAgICAgICAuLi50aGlzLl9kZWYsXG4gICAgICAgICAgICBkZXNjcmlwdGlvbixcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHBpcGUodGFyZ2V0KSB7XG4gICAgICAgIHJldHVybiBab2RQaXBlbGluZS5jcmVhdGUodGhpcywgdGFyZ2V0KTtcbiAgICB9XG4gICAgcmVhZG9ubHkoKSB7XG4gICAgICAgIHJldHVybiBab2RSZWFkb25seS5jcmVhdGUodGhpcyk7XG4gICAgfVxuICAgIGlzT3B0aW9uYWwoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnNhZmVQYXJzZSh1bmRlZmluZWQpLnN1Y2Nlc3M7XG4gICAgfVxuICAgIGlzTnVsbGFibGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnNhZmVQYXJzZShudWxsKS5zdWNjZXNzO1xuICAgIH1cbn1cbmNvbnN0IGN1aWRSZWdleCA9IC9eY1teXFxzLV17OCx9JC9pO1xuY29uc3QgY3VpZDJSZWdleCA9IC9eWzAtOWEtel0rJC87XG5jb25zdCB1bGlkUmVnZXggPSAvXlswLTlBLUhKS01OUC1UVi1aXXsyNn0kL2k7XG4vLyBjb25zdCB1dWlkUmVnZXggPVxuLy8gICAvXihbYS1mMC05XXs4fS1bYS1mMC05XXs0fS1bMS01XVthLWYwLTldezN9LVthLWYwLTldezR9LVthLWYwLTldezEyfXwwMDAwMDAwMC0wMDAwLTAwMDAtMDAwMC0wMDAwMDAwMDAwMDApJC9pO1xuY29uc3QgdXVpZFJlZ2V4ID0gL15bMC05YS1mQS1GXXs4fVxcYi1bMC05YS1mQS1GXXs0fVxcYi1bMC05YS1mQS1GXXs0fVxcYi1bMC05YS1mQS1GXXs0fVxcYi1bMC05YS1mQS1GXXsxMn0kL2k7XG5jb25zdCBuYW5vaWRSZWdleCA9IC9eW2EtejAtOV8tXXsyMX0kL2k7XG5jb25zdCBqd3RSZWdleCA9IC9eW0EtWmEtejAtOS1fXStcXC5bQS1aYS16MC05LV9dK1xcLltBLVphLXowLTktX10qJC87XG5jb25zdCBkdXJhdGlvblJlZ2V4ID0gL15bLStdP1AoPyEkKSg/Oig/OlstK10/XFxkK1kpfCg/OlstK10/XFxkK1suLF1cXGQrWSQpKT8oPzooPzpbLStdP1xcZCtNKXwoPzpbLStdP1xcZCtbLixdXFxkK00kKSk/KD86KD86Wy0rXT9cXGQrVyl8KD86Wy0rXT9cXGQrWy4sXVxcZCtXJCkpPyg/Oig/OlstK10/XFxkK0QpfCg/OlstK10/XFxkK1suLF1cXGQrRCQpKT8oPzpUKD89W1xcZCstXSkoPzooPzpbLStdP1xcZCtIKXwoPzpbLStdP1xcZCtbLixdXFxkK0gkKSk/KD86KD86Wy0rXT9cXGQrTSl8KD86Wy0rXT9cXGQrWy4sXVxcZCtNJCkpPyg/OlstK10/XFxkKyg/OlsuLF1cXGQrKT9TKT8pPz8kLztcbi8vIGZyb20gaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9hLzQ2MTgxLzE1NTAxNTVcbi8vIG9sZCB2ZXJzaW9uOiB0b28gc2xvdywgZGlkbid0IHN1cHBvcnQgdW5pY29kZVxuLy8gY29uc3QgZW1haWxSZWdleCA9IC9eKCgoW2Etel18XFxkfFshI1xcJCUmJ1xcKlxcK1xcLVxcLz1cXD9cXF5fYHtcXHx9fl18W1xcdTAwQTAtXFx1RDdGRlxcdUY5MDAtXFx1RkRDRlxcdUZERjAtXFx1RkZFRl0pKyhcXC4oW2Etel18XFxkfFshI1xcJCUmJ1xcKlxcK1xcLVxcLz1cXD9cXF5fYHtcXHx9fl18W1xcdTAwQTAtXFx1RDdGRlxcdUY5MDAtXFx1RkRDRlxcdUZERjAtXFx1RkZFRl0pKykqKXwoKFxceDIyKSgoKChcXHgyMHxcXHgwOSkqKFxceDBkXFx4MGEpKT8oXFx4MjB8XFx4MDkpKyk/KChbXFx4MDEtXFx4MDhcXHgwYlxceDBjXFx4MGUtXFx4MWZcXHg3Zl18XFx4MjF8W1xceDIzLVxceDViXXxbXFx4NWQtXFx4N2VdfFtcXHUwMEEwLVxcdUQ3RkZcXHVGOTAwLVxcdUZEQ0ZcXHVGREYwLVxcdUZGRUZdKXwoXFxcXChbXFx4MDEtXFx4MDlcXHgwYlxceDBjXFx4MGQtXFx4N2ZdfFtcXHUwMEEwLVxcdUQ3RkZcXHVGOTAwLVxcdUZEQ0ZcXHVGREYwLVxcdUZGRUZdKSkpKSooKChcXHgyMHxcXHgwOSkqKFxceDBkXFx4MGEpKT8oXFx4MjB8XFx4MDkpKyk/KFxceDIyKSkpQCgoKFthLXpdfFxcZHxbXFx1MDBBMC1cXHVEN0ZGXFx1RjkwMC1cXHVGRENGXFx1RkRGMC1cXHVGRkVGXSl8KChbYS16XXxcXGR8W1xcdTAwQTAtXFx1RDdGRlxcdUY5MDAtXFx1RkRDRlxcdUZERjAtXFx1RkZFRl0pKFthLXpdfFxcZHwtfFxcLnxffH58W1xcdTAwQTAtXFx1RDdGRlxcdUY5MDAtXFx1RkRDRlxcdUZERjAtXFx1RkZFRl0pKihbYS16XXxcXGR8W1xcdTAwQTAtXFx1RDdGRlxcdUY5MDAtXFx1RkRDRlxcdUZERjAtXFx1RkZFRl0pKSlcXC4pKygoW2Etel18W1xcdTAwQTAtXFx1RDdGRlxcdUY5MDAtXFx1RkRDRlxcdUZERjAtXFx1RkZFRl0pfCgoW2Etel18W1xcdTAwQTAtXFx1RDdGRlxcdUY5MDAtXFx1RkRDRlxcdUZERjAtXFx1RkZFRl0pKFthLXpdfFxcZHwtfFxcLnxffH58W1xcdTAwQTAtXFx1RDdGRlxcdUY5MDAtXFx1RkRDRlxcdUZERjAtXFx1RkZFRl0pKihbYS16XXxbXFx1MDBBMC1cXHVEN0ZGXFx1RjkwMC1cXHVGRENGXFx1RkRGMC1cXHVGRkVGXSkpKSQvaTtcbi8vb2xkIGVtYWlsIHJlZ2V4XG4vLyBjb25zdCBlbWFpbFJlZ2V4ID0gL14oKFtePD4oKVtcXF0uLDs6XFxzQFwiXSsoXFwuW148PigpW1xcXS4sOzpcXHNAXCJdKykqKXwoXCIuK1wiKSlAKCg/IS0pKFtePD4oKVtcXF0uLDs6XFxzQFwiXStcXC4pK1tePD4oKVtcXF0uLDs6XFxzQFwiXXsxLH0pW14tPD4oKVtcXF0uLDs6XFxzQFwiXSQvaTtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZVxuLy8gY29uc3QgZW1haWxSZWdleCA9XG4vLyAgIC9eKChbXjw+KClbXFxdXFxcXC4sOzpcXHNAXFxcIl0rKFxcLltePD4oKVtcXF1cXFxcLiw7Olxcc0BcXFwiXSspKil8KFxcXCIuK1xcXCIpKUAoKFxcWygoKDI1WzAtNV0pfCgyWzAtNF1bMC05XSl8KDFbMC05XXsyfSl8KFswLTldezEsMn0pKVxcLil7M30oKDI1WzAtNV0pfCgyWzAtNF1bMC05XSl8KDFbMC05XXsyfSl8KFswLTldezEsMn0pKVxcXSl8KFxcW0lQdjY6KChbYS1mMC05XXsxLDR9Oil7N318OjooW2EtZjAtOV17MSw0fTopezAsNn18KFthLWYwLTldezEsNH06KXsxfTooW2EtZjAtOV17MSw0fTopezAsNX18KFthLWYwLTldezEsNH06KXsyfTooW2EtZjAtOV17MSw0fTopezAsNH18KFthLWYwLTldezEsNH06KXszfTooW2EtZjAtOV17MSw0fTopezAsM318KFthLWYwLTldezEsNH06KXs0fTooW2EtZjAtOV17MSw0fTopezAsMn18KFthLWYwLTldezEsNH06KXs1fTooW2EtZjAtOV17MSw0fTopezAsMX0pKFthLWYwLTldezEsNH18KCgoMjVbMC01XSl8KDJbMC00XVswLTldKXwoMVswLTldezJ9KXwoWzAtOV17MSwyfSkpXFwuKXszfSgoMjVbMC01XSl8KDJbMC00XVswLTldKXwoMVswLTldezJ9KXwoWzAtOV17MSwyfSkpKVxcXSl8KFtBLVphLXowLTldKFtBLVphLXowLTktXSpbQS1aYS16MC05XSkqKFxcLltBLVphLXpdezIsfSkrKSkkLztcbi8vIGNvbnN0IGVtYWlsUmVnZXggPVxuLy8gICAvXlthLXpBLVowLTlcXC5cXCFcXCNcXCRcXCVcXCZcXCdcXCpcXCtcXC9cXD1cXD9cXF5cXF9cXGBcXHtcXHxcXH1cXH5cXC1dK0BbYS16QS1aMC05XSg/OlthLXpBLVowLTktXXswLDYxfVthLXpBLVowLTldKT8oPzpcXC5bYS16QS1aMC05XSg/OlthLXpBLVowLTktXXswLDYxfVthLXpBLVowLTldKT8pKiQvO1xuLy8gY29uc3QgZW1haWxSZWdleCA9XG4vLyAgIC9eKD86W2EtejAtOSEjJCUmJyorLz0/Xl9ge3x9fi1dKyg/OlxcLlthLXowLTkhIyQlJicqKy89P15fYHt8fX4tXSspKnxcIig/OltcXHgwMS1cXHgwOFxceDBiXFx4MGNcXHgwZS1cXHgxZlxceDIxXFx4MjMtXFx4NWJcXHg1ZC1cXHg3Zl18XFxcXFtcXHgwMS1cXHgwOVxceDBiXFx4MGNcXHgwZS1cXHg3Zl0pKlwiKUAoPzooPzpbYS16MC05XSg/OlthLXowLTktXSpbYS16MC05XSk/XFwuKStbYS16MC05XSg/OlthLXowLTktXSpbYS16MC05XSk/fFxcWyg/Oig/OjI1WzAtNV18MlswLTRdWzAtOV18WzAxXT9bMC05XVswLTldPylcXC4pezN9KD86MjVbMC01XXwyWzAtNF1bMC05XXxbMDFdP1swLTldWzAtOV0/fFthLXowLTktXSpbYS16MC05XTooPzpbXFx4MDEtXFx4MDhcXHgwYlxceDBjXFx4MGUtXFx4MWZcXHgyMS1cXHg1YVxceDUzLVxceDdmXXxcXFxcW1xceDAxLVxceDA5XFx4MGJcXHgwY1xceDBlLVxceDdmXSkrKVxcXSkkL2k7XG5jb25zdCBlbWFpbFJlZ2V4ID0gL14oPyFcXC4pKD8hLipcXC5cXC4pKFtBLVowLTlfJytcXC1cXC5dKilbQS1aMC05XystXUAoW0EtWjAtOV1bQS1aMC05XFwtXSpcXC4pK1tBLVpdezIsfSQvaTtcbi8vIGNvbnN0IGVtYWlsUmVnZXggPVxuLy8gICAvXlthLXowLTkuISMkJSZcdTIwMTkqKy89P15fYHt8fX4tXStAW2EtejAtOS1dKyg/OlxcLlthLXowLTlcXC1dKykqJC9pO1xuLy8gZnJvbSBodHRwczovL3RoZWtldmluc2NvdHQuY29tL2Vtb2ppcy1pbi1qYXZhc2NyaXB0LyN3cml0aW5nLWEtcmVndWxhci1leHByZXNzaW9uXG5jb25zdCBfZW1vamlSZWdleCA9IGBeKFxcXFxwe0V4dGVuZGVkX1BpY3RvZ3JhcGhpY318XFxcXHB7RW1vamlfQ29tcG9uZW50fSkrJGA7XG5sZXQgZW1vamlSZWdleDtcbi8vIGZhc3Rlciwgc2ltcGxlciwgc2FmZXJcbmNvbnN0IGlwdjRSZWdleCA9IC9eKD86KD86MjVbMC01XXwyWzAtNF1bMC05XXwxWzAtOV1bMC05XXxbMS05XVswLTldfFswLTldKVxcLil7M30oPzoyNVswLTVdfDJbMC00XVswLTldfDFbMC05XVswLTldfFsxLTldWzAtOV18WzAtOV0pJC87XG5jb25zdCBpcHY0Q2lkclJlZ2V4ID0gL14oPzooPzoyNVswLTVdfDJbMC00XVswLTldfDFbMC05XVswLTldfFsxLTldWzAtOV18WzAtOV0pXFwuKXszfSg/OjI1WzAtNV18MlswLTRdWzAtOV18MVswLTldWzAtOV18WzEtOV1bMC05XXxbMC05XSlcXC8oM1swLTJdfFsxMl0/WzAtOV0pJC87XG4vLyBjb25zdCBpcHY2UmVnZXggPVxuLy8gL14oKFthLWYwLTldezEsNH06KXs3fXw6OihbYS1mMC05XXsxLDR9Oil7MCw2fXwoW2EtZjAtOV17MSw0fTopezF9OihbYS1mMC05XXsxLDR9Oil7MCw1fXwoW2EtZjAtOV17MSw0fTopezJ9OihbYS1mMC05XXsxLDR9Oil7MCw0fXwoW2EtZjAtOV17MSw0fTopezN9OihbYS1mMC05XXsxLDR9Oil7MCwzfXwoW2EtZjAtOV17MSw0fTopezR9OihbYS1mMC05XXsxLDR9Oil7MCwyfXwoW2EtZjAtOV17MSw0fTopezV9OihbYS1mMC05XXsxLDR9Oil7MCwxfSkoW2EtZjAtOV17MSw0fXwoKCgyNVswLTVdKXwoMlswLTRdWzAtOV0pfCgxWzAtOV17Mn0pfChbMC05XXsxLDJ9KSlcXC4pezN9KCgyNVswLTVdKXwoMlswLTRdWzAtOV0pfCgxWzAtOV17Mn0pfChbMC05XXsxLDJ9KSkpJC87XG5jb25zdCBpcHY2UmVnZXggPSAvXigoWzAtOWEtZkEtRl17MSw0fTopezcsN31bMC05YS1mQS1GXXsxLDR9fChbMC05YS1mQS1GXXsxLDR9Oil7MSw3fTp8KFswLTlhLWZBLUZdezEsNH06KXsxLDZ9OlswLTlhLWZBLUZdezEsNH18KFswLTlhLWZBLUZdezEsNH06KXsxLDV9KDpbMC05YS1mQS1GXXsxLDR9KXsxLDJ9fChbMC05YS1mQS1GXXsxLDR9Oil7MSw0fSg6WzAtOWEtZkEtRl17MSw0fSl7MSwzfXwoWzAtOWEtZkEtRl17MSw0fTopezEsM30oOlswLTlhLWZBLUZdezEsNH0pezEsNH18KFswLTlhLWZBLUZdezEsNH06KXsxLDJ9KDpbMC05YS1mQS1GXXsxLDR9KXsxLDV9fFswLTlhLWZBLUZdezEsNH06KCg6WzAtOWEtZkEtRl17MSw0fSl7MSw2fSl8OigoOlswLTlhLWZBLUZdezEsNH0pezEsN318Oil8ZmU4MDooOlswLTlhLWZBLUZdezAsNH0pezAsNH0lWzAtOWEtekEtWl17MSx9fDo6KGZmZmYoOjB7MSw0fSl7MCwxfTopezAsMX0oKDI1WzAtNV18KDJbMC00XXwxezAsMX1bMC05XSl7MCwxfVswLTldKVxcLil7MywzfSgyNVswLTVdfCgyWzAtNF18MXswLDF9WzAtOV0pezAsMX1bMC05XSl8KFswLTlhLWZBLUZdezEsNH06KXsxLDR9OigoMjVbMC01XXwoMlswLTRdfDF7MCwxfVswLTldKXswLDF9WzAtOV0pXFwuKXszLDN9KDI1WzAtNV18KDJbMC00XXwxezAsMX1bMC05XSl7MCwxfVswLTldKSkkLztcbmNvbnN0IGlwdjZDaWRyUmVnZXggPSAvXigoWzAtOWEtZkEtRl17MSw0fTopezcsN31bMC05YS1mQS1GXXsxLDR9fChbMC05YS1mQS1GXXsxLDR9Oil7MSw3fTp8KFswLTlhLWZBLUZdezEsNH06KXsxLDZ9OlswLTlhLWZBLUZdezEsNH18KFswLTlhLWZBLUZdezEsNH06KXsxLDV9KDpbMC05YS1mQS1GXXsxLDR9KXsxLDJ9fChbMC05YS1mQS1GXXsxLDR9Oil7MSw0fSg6WzAtOWEtZkEtRl17MSw0fSl7MSwzfXwoWzAtOWEtZkEtRl17MSw0fTopezEsM30oOlswLTlhLWZBLUZdezEsNH0pezEsNH18KFswLTlhLWZBLUZdezEsNH06KXsxLDJ9KDpbMC05YS1mQS1GXXsxLDR9KXsxLDV9fFswLTlhLWZBLUZdezEsNH06KCg6WzAtOWEtZkEtRl17MSw0fSl7MSw2fSl8OigoOlswLTlhLWZBLUZdezEsNH0pezEsN318Oil8ZmU4MDooOlswLTlhLWZBLUZdezAsNH0pezAsNH0lWzAtOWEtekEtWl17MSx9fDo6KGZmZmYoOjB7MSw0fSl7MCwxfTopezAsMX0oKDI1WzAtNV18KDJbMC00XXwxezAsMX1bMC05XSl7MCwxfVswLTldKVxcLil7MywzfSgyNVswLTVdfCgyWzAtNF18MXswLDF9WzAtOV0pezAsMX1bMC05XSl8KFswLTlhLWZBLUZdezEsNH06KXsxLDR9OigoMjVbMC01XXwoMlswLTRdfDF7MCwxfVswLTldKXswLDF9WzAtOV0pXFwuKXszLDN9KDI1WzAtNV18KDJbMC00XXwxezAsMX1bMC05XSl7MCwxfVswLTldKSlcXC8oMTJbMC04XXwxWzAxXVswLTldfFsxLTldP1swLTldKSQvO1xuLy8gaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvNzg2MDM5Mi9kZXRlcm1pbmUtaWYtc3RyaW5nLWlzLWluLWJhc2U2NC11c2luZy1qYXZhc2NyaXB0XG5jb25zdCBiYXNlNjRSZWdleCA9IC9eKFswLTlhLXpBLVorL117NH0pKigoWzAtOWEtekEtWisvXXsyfT09KXwoWzAtOWEtekEtWisvXXszfT0pKT8kLztcbi8vIGh0dHBzOi8vYmFzZTY0Lmd1cnUvc3RhbmRhcmRzL2Jhc2U2NHVybFxuY29uc3QgYmFzZTY0dXJsUmVnZXggPSAvXihbMC05YS16QS1aLV9dezR9KSooKFswLTlhLXpBLVotX117Mn0oPT0pPyl8KFswLTlhLXpBLVotX117M30oPSk/KSk/JC87XG4vLyBzaW1wbGVcbi8vIGNvbnN0IGRhdGVSZWdleFNvdXJjZSA9IGBcXFxcZHs0fS1cXFxcZHsyfS1cXFxcZHsyfWA7XG4vLyBubyBsZWFwIHllYXIgdmFsaWRhdGlvblxuLy8gY29uc3QgZGF0ZVJlZ2V4U291cmNlID0gYFxcXFxkezR9LSgoMFsxMzU3OF18MTB8MTIpLTMxfCgwWzEzLTldfDFbMC0yXSktMzB8KDBbMS05XXwxWzAtMl0pLSgwWzEtOV18MVxcXFxkfDJcXFxcZCkpYDtcbi8vIHdpdGggbGVhcCB5ZWFyIHZhbGlkYXRpb25cbmNvbnN0IGRhdGVSZWdleFNvdXJjZSA9IGAoKFxcXFxkXFxcXGRbMjQ2OF1bMDQ4XXxcXFxcZFxcXFxkWzEzNTc5XVsyNl18XFxcXGRcXFxcZDBbNDhdfFswMjQ2OF1bMDQ4XTAwfFsxMzU3OV1bMjZdMDApLTAyLTI5fFxcXFxkezR9LSgoMFsxMzU3OF18MVswMl0pLSgwWzEtOV18WzEyXVxcXFxkfDNbMDFdKXwoMFs0NjldfDExKS0oMFsxLTldfFsxMl1cXFxcZHwzMCl8KDAyKS0oMFsxLTldfDFcXFxcZHwyWzAtOF0pKSlgO1xuY29uc3QgZGF0ZVJlZ2V4ID0gbmV3IFJlZ0V4cChgXiR7ZGF0ZVJlZ2V4U291cmNlfSRgKTtcbmZ1bmN0aW9uIHRpbWVSZWdleFNvdXJjZShhcmdzKSB7XG4gICAgLy8gbGV0IHJlZ2V4ID0gYFxcXFxkezJ9OlxcXFxkezJ9OlxcXFxkezJ9YDtcbiAgICBsZXQgcmVnZXggPSBgKFswMV1cXFxcZHwyWzAtM10pOlswLTVdXFxcXGQ6WzAtNV1cXFxcZGA7XG4gICAgaWYgKGFyZ3MucHJlY2lzaW9uKSB7XG4gICAgICAgIHJlZ2V4ID0gYCR7cmVnZXh9XFxcXC5cXFxcZHske2FyZ3MucHJlY2lzaW9ufX1gO1xuICAgIH1cbiAgICBlbHNlIGlmIChhcmdzLnByZWNpc2lvbiA9PSBudWxsKSB7XG4gICAgICAgIHJlZ2V4ID0gYCR7cmVnZXh9KFxcXFwuXFxcXGQrKT9gO1xuICAgIH1cbiAgICByZXR1cm4gcmVnZXg7XG59XG5mdW5jdGlvbiB0aW1lUmVnZXgoYXJncykge1xuICAgIHJldHVybiBuZXcgUmVnRXhwKGBeJHt0aW1lUmVnZXhTb3VyY2UoYXJncyl9JGApO1xufVxuLy8gQWRhcHRlZCBmcm9tIGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vYS8zMTQzMjMxXG5mdW5jdGlvbiBkYXRldGltZVJlZ2V4KGFyZ3MpIHtcbiAgICBsZXQgcmVnZXggPSBgJHtkYXRlUmVnZXhTb3VyY2V9VCR7dGltZVJlZ2V4U291cmNlKGFyZ3MpfWA7XG4gICAgY29uc3Qgb3B0cyA9IFtdO1xuICAgIG9wdHMucHVzaChhcmdzLmxvY2FsID8gYFo/YCA6IGBaYCk7XG4gICAgaWYgKGFyZ3Mub2Zmc2V0KVxuICAgICAgICBvcHRzLnB1c2goYChbKy1dXFxcXGR7Mn06P1xcXFxkezJ9KWApO1xuICAgIHJlZ2V4ID0gYCR7cmVnZXh9KCR7b3B0cy5qb2luKFwifFwiKX0pYDtcbiAgICByZXR1cm4gbmV3IFJlZ0V4cChgXiR7cmVnZXh9JGApO1xufVxuZnVuY3Rpb24gaXNWYWxpZElQKGlwLCB2ZXJzaW9uKSB7XG4gICAgaWYgKCh2ZXJzaW9uID09PSBcInY0XCIgfHwgIXZlcnNpb24pICYmIGlwdjRSZWdleC50ZXN0KGlwKSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKCh2ZXJzaW9uID09PSBcInY2XCIgfHwgIXZlcnNpb24pICYmIGlwdjZSZWdleC50ZXN0KGlwKSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xufVxuZnVuY3Rpb24gaXNWYWxpZEpXVChqd3QsIGFsZykge1xuICAgIGlmICghand0UmVnZXgudGVzdChqd3QpKVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgdHJ5IHtcbiAgICAgICAgY29uc3QgW2hlYWRlcl0gPSBqd3Quc3BsaXQoXCIuXCIpO1xuICAgICAgICAvLyBDb252ZXJ0IGJhc2U2NHVybCB0byBiYXNlNjRcbiAgICAgICAgY29uc3QgYmFzZTY0ID0gaGVhZGVyXG4gICAgICAgICAgICAucmVwbGFjZSgvLS9nLCBcIitcIilcbiAgICAgICAgICAgIC5yZXBsYWNlKC9fL2csIFwiL1wiKVxuICAgICAgICAgICAgLnBhZEVuZChoZWFkZXIubGVuZ3RoICsgKCg0IC0gKGhlYWRlci5sZW5ndGggJSA0KSkgJSA0KSwgXCI9XCIpO1xuICAgICAgICBjb25zdCBkZWNvZGVkID0gSlNPTi5wYXJzZShhdG9iKGJhc2U2NCkpO1xuICAgICAgICBpZiAodHlwZW9mIGRlY29kZWQgIT09IFwib2JqZWN0XCIgfHwgZGVjb2RlZCA9PT0gbnVsbClcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgaWYgKCFkZWNvZGVkLnR5cCB8fCAhZGVjb2RlZC5hbGcpXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIGlmIChhbGcgJiYgZGVjb2RlZC5hbGcgIT09IGFsZylcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGNhdGNoIChfYSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxufVxuZnVuY3Rpb24gaXNWYWxpZENpZHIoaXAsIHZlcnNpb24pIHtcbiAgICBpZiAoKHZlcnNpb24gPT09IFwidjRcIiB8fCAhdmVyc2lvbikgJiYgaXB2NENpZHJSZWdleC50ZXN0KGlwKSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKCh2ZXJzaW9uID09PSBcInY2XCIgfHwgIXZlcnNpb24pICYmIGlwdjZDaWRyUmVnZXgudGVzdChpcCkpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbn1cbmNsYXNzIFpvZFN0cmluZyBleHRlbmRzIFpvZFR5cGUge1xuICAgIF9wYXJzZShpbnB1dCkge1xuICAgICAgICBpZiAodGhpcy5fZGVmLmNvZXJjZSkge1xuICAgICAgICAgICAgaW5wdXQuZGF0YSA9IFN0cmluZyhpbnB1dC5kYXRhKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBwYXJzZWRUeXBlID0gdGhpcy5fZ2V0VHlwZShpbnB1dCk7XG4gICAgICAgIGlmIChwYXJzZWRUeXBlICE9PSBab2RQYXJzZWRUeXBlLnN0cmluZykge1xuICAgICAgICAgICAgY29uc3QgY3R4ID0gdGhpcy5fZ2V0T3JSZXR1cm5DdHgoaW5wdXQpO1xuICAgICAgICAgICAgYWRkSXNzdWVUb0NvbnRleHQoY3R4LCB7XG4gICAgICAgICAgICAgICAgY29kZTogWm9kSXNzdWVDb2RlLmludmFsaWRfdHlwZSxcbiAgICAgICAgICAgICAgICBleHBlY3RlZDogWm9kUGFyc2VkVHlwZS5zdHJpbmcsXG4gICAgICAgICAgICAgICAgcmVjZWl2ZWQ6IGN0eC5wYXJzZWRUeXBlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gSU5WQUxJRDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzdGF0dXMgPSBuZXcgUGFyc2VTdGF0dXMoKTtcbiAgICAgICAgbGV0IGN0eCA9IHVuZGVmaW5lZDtcbiAgICAgICAgZm9yIChjb25zdCBjaGVjayBvZiB0aGlzLl9kZWYuY2hlY2tzKSB7XG4gICAgICAgICAgICBpZiAoY2hlY2sua2luZCA9PT0gXCJtaW5cIikge1xuICAgICAgICAgICAgICAgIGlmIChpbnB1dC5kYXRhLmxlbmd0aCA8IGNoZWNrLnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIGN0eCA9IHRoaXMuX2dldE9yUmV0dXJuQ3R4KGlucHV0LCBjdHgpO1xuICAgICAgICAgICAgICAgICAgICBhZGRJc3N1ZVRvQ29udGV4dChjdHgsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvZGU6IFpvZElzc3VlQ29kZS50b29fc21hbGwsXG4gICAgICAgICAgICAgICAgICAgICAgICBtaW5pbXVtOiBjaGVjay52YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBpbmNsdXNpdmU6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBleGFjdDogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBjaGVjay5tZXNzYWdlLFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgc3RhdHVzLmRpcnR5KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoY2hlY2sua2luZCA9PT0gXCJtYXhcIikge1xuICAgICAgICAgICAgICAgIGlmIChpbnB1dC5kYXRhLmxlbmd0aCA+IGNoZWNrLnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIGN0eCA9IHRoaXMuX2dldE9yUmV0dXJuQ3R4KGlucHV0LCBjdHgpO1xuICAgICAgICAgICAgICAgICAgICBhZGRJc3N1ZVRvQ29udGV4dChjdHgsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvZGU6IFpvZElzc3VlQ29kZS50b29fYmlnLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWF4aW11bTogY2hlY2sudmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgaW5jbHVzaXZlOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgZXhhY3Q6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogY2hlY2subWVzc2FnZSxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHN0YXR1cy5kaXJ0eSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGNoZWNrLmtpbmQgPT09IFwibGVuZ3RoXCIpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB0b29CaWcgPSBpbnB1dC5kYXRhLmxlbmd0aCA+IGNoZWNrLnZhbHVlO1xuICAgICAgICAgICAgICAgIGNvbnN0IHRvb1NtYWxsID0gaW5wdXQuZGF0YS5sZW5ndGggPCBjaGVjay52YWx1ZTtcbiAgICAgICAgICAgICAgICBpZiAodG9vQmlnIHx8IHRvb1NtYWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIGN0eCA9IHRoaXMuX2dldE9yUmV0dXJuQ3R4KGlucHV0LCBjdHgpO1xuICAgICAgICAgICAgICAgICAgICBpZiAodG9vQmlnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhZGRJc3N1ZVRvQ29udGV4dChjdHgsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlOiBab2RJc3N1ZUNvZGUudG9vX2JpZyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhpbXVtOiBjaGVjay52YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluY2x1c2l2ZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGFjdDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBjaGVjay5tZXNzYWdlLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAodG9vU21hbGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFkZElzc3VlVG9Db250ZXh0KGN0eCwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGU6IFpvZElzc3VlQ29kZS50b29fc21hbGwsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWluaW11bTogY2hlY2sudmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJzdHJpbmdcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmNsdXNpdmU6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhhY3Q6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogY2hlY2subWVzc2FnZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHN0YXR1cy5kaXJ0eSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGNoZWNrLmtpbmQgPT09IFwiZW1haWxcIikge1xuICAgICAgICAgICAgICAgIGlmICghZW1haWxSZWdleC50ZXN0KGlucHV0LmRhdGEpKSB7XG4gICAgICAgICAgICAgICAgICAgIGN0eCA9IHRoaXMuX2dldE9yUmV0dXJuQ3R4KGlucHV0LCBjdHgpO1xuICAgICAgICAgICAgICAgICAgICBhZGRJc3N1ZVRvQ29udGV4dChjdHgsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRpb246IFwiZW1haWxcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvZGU6IFpvZElzc3VlQ29kZS5pbnZhbGlkX3N0cmluZyxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGNoZWNrLm1lc3NhZ2UsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBzdGF0dXMuZGlydHkoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChjaGVjay5raW5kID09PSBcImVtb2ppXCIpIHtcbiAgICAgICAgICAgICAgICBpZiAoIWVtb2ppUmVnZXgpIHtcbiAgICAgICAgICAgICAgICAgICAgZW1vamlSZWdleCA9IG5ldyBSZWdFeHAoX2Vtb2ppUmVnZXgsIFwidVwiKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKCFlbW9qaVJlZ2V4LnRlc3QoaW5wdXQuZGF0YSkpIHtcbiAgICAgICAgICAgICAgICAgICAgY3R4ID0gdGhpcy5fZ2V0T3JSZXR1cm5DdHgoaW5wdXQsIGN0eCk7XG4gICAgICAgICAgICAgICAgICAgIGFkZElzc3VlVG9Db250ZXh0KGN0eCwge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdGlvbjogXCJlbW9qaVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgY29kZTogWm9kSXNzdWVDb2RlLmludmFsaWRfc3RyaW5nLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogY2hlY2subWVzc2FnZSxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHN0YXR1cy5kaXJ0eSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGNoZWNrLmtpbmQgPT09IFwidXVpZFwiKSB7XG4gICAgICAgICAgICAgICAgaWYgKCF1dWlkUmVnZXgudGVzdChpbnB1dC5kYXRhKSkge1xuICAgICAgICAgICAgICAgICAgICBjdHggPSB0aGlzLl9nZXRPclJldHVybkN0eChpbnB1dCwgY3R4KTtcbiAgICAgICAgICAgICAgICAgICAgYWRkSXNzdWVUb0NvbnRleHQoY3R4LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0aW9uOiBcInV1aWRcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvZGU6IFpvZElzc3VlQ29kZS5pbnZhbGlkX3N0cmluZyxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGNoZWNrLm1lc3NhZ2UsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBzdGF0dXMuZGlydHkoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChjaGVjay5raW5kID09PSBcIm5hbm9pZFwiKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFuYW5vaWRSZWdleC50ZXN0KGlucHV0LmRhdGEpKSB7XG4gICAgICAgICAgICAgICAgICAgIGN0eCA9IHRoaXMuX2dldE9yUmV0dXJuQ3R4KGlucHV0LCBjdHgpO1xuICAgICAgICAgICAgICAgICAgICBhZGRJc3N1ZVRvQ29udGV4dChjdHgsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRpb246IFwibmFub2lkXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2RlOiBab2RJc3N1ZUNvZGUuaW52YWxpZF9zdHJpbmcsXG4gICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBjaGVjay5tZXNzYWdlLFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgc3RhdHVzLmRpcnR5KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoY2hlY2sua2luZCA9PT0gXCJjdWlkXCIpIHtcbiAgICAgICAgICAgICAgICBpZiAoIWN1aWRSZWdleC50ZXN0KGlucHV0LmRhdGEpKSB7XG4gICAgICAgICAgICAgICAgICAgIGN0eCA9IHRoaXMuX2dldE9yUmV0dXJuQ3R4KGlucHV0LCBjdHgpO1xuICAgICAgICAgICAgICAgICAgICBhZGRJc3N1ZVRvQ29udGV4dChjdHgsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRpb246IFwiY3VpZFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgY29kZTogWm9kSXNzdWVDb2RlLmludmFsaWRfc3RyaW5nLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogY2hlY2subWVzc2FnZSxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHN0YXR1cy5kaXJ0eSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGNoZWNrLmtpbmQgPT09IFwiY3VpZDJcIikge1xuICAgICAgICAgICAgICAgIGlmICghY3VpZDJSZWdleC50ZXN0KGlucHV0LmRhdGEpKSB7XG4gICAgICAgICAgICAgICAgICAgIGN0eCA9IHRoaXMuX2dldE9yUmV0dXJuQ3R4KGlucHV0LCBjdHgpO1xuICAgICAgICAgICAgICAgICAgICBhZGRJc3N1ZVRvQ29udGV4dChjdHgsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRpb246IFwiY3VpZDJcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvZGU6IFpvZElzc3VlQ29kZS5pbnZhbGlkX3N0cmluZyxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGNoZWNrLm1lc3NhZ2UsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBzdGF0dXMuZGlydHkoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChjaGVjay5raW5kID09PSBcInVsaWRcIikge1xuICAgICAgICAgICAgICAgIGlmICghdWxpZFJlZ2V4LnRlc3QoaW5wdXQuZGF0YSkpIHtcbiAgICAgICAgICAgICAgICAgICAgY3R4ID0gdGhpcy5fZ2V0T3JSZXR1cm5DdHgoaW5wdXQsIGN0eCk7XG4gICAgICAgICAgICAgICAgICAgIGFkZElzc3VlVG9Db250ZXh0KGN0eCwge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdGlvbjogXCJ1bGlkXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2RlOiBab2RJc3N1ZUNvZGUuaW52YWxpZF9zdHJpbmcsXG4gICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBjaGVjay5tZXNzYWdlLFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgc3RhdHVzLmRpcnR5KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoY2hlY2sua2luZCA9PT0gXCJ1cmxcIikge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIG5ldyBVUkwoaW5wdXQuZGF0YSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhdGNoIChfYSkge1xuICAgICAgICAgICAgICAgICAgICBjdHggPSB0aGlzLl9nZXRPclJldHVybkN0eChpbnB1dCwgY3R4KTtcbiAgICAgICAgICAgICAgICAgICAgYWRkSXNzdWVUb0NvbnRleHQoY3R4LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0aW9uOiBcInVybFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgY29kZTogWm9kSXNzdWVDb2RlLmludmFsaWRfc3RyaW5nLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogY2hlY2subWVzc2FnZSxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHN0YXR1cy5kaXJ0eSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGNoZWNrLmtpbmQgPT09IFwicmVnZXhcIikge1xuICAgICAgICAgICAgICAgIGNoZWNrLnJlZ2V4Lmxhc3RJbmRleCA9IDA7XG4gICAgICAgICAgICAgICAgY29uc3QgdGVzdFJlc3VsdCA9IGNoZWNrLnJlZ2V4LnRlc3QoaW5wdXQuZGF0YSk7XG4gICAgICAgICAgICAgICAgaWYgKCF0ZXN0UmVzdWx0KSB7XG4gICAgICAgICAgICAgICAgICAgIGN0eCA9IHRoaXMuX2dldE9yUmV0dXJuQ3R4KGlucHV0LCBjdHgpO1xuICAgICAgICAgICAgICAgICAgICBhZGRJc3N1ZVRvQ29udGV4dChjdHgsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRpb246IFwicmVnZXhcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvZGU6IFpvZElzc3VlQ29kZS5pbnZhbGlkX3N0cmluZyxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGNoZWNrLm1lc3NhZ2UsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBzdGF0dXMuZGlydHkoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChjaGVjay5raW5kID09PSBcInRyaW1cIikge1xuICAgICAgICAgICAgICAgIGlucHV0LmRhdGEgPSBpbnB1dC5kYXRhLnRyaW0oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGNoZWNrLmtpbmQgPT09IFwiaW5jbHVkZXNcIikge1xuICAgICAgICAgICAgICAgIGlmICghaW5wdXQuZGF0YS5pbmNsdWRlcyhjaGVjay52YWx1ZSwgY2hlY2sucG9zaXRpb24pKSB7XG4gICAgICAgICAgICAgICAgICAgIGN0eCA9IHRoaXMuX2dldE9yUmV0dXJuQ3R4KGlucHV0LCBjdHgpO1xuICAgICAgICAgICAgICAgICAgICBhZGRJc3N1ZVRvQ29udGV4dChjdHgsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvZGU6IFpvZElzc3VlQ29kZS5pbnZhbGlkX3N0cmluZyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRpb246IHsgaW5jbHVkZXM6IGNoZWNrLnZhbHVlLCBwb3NpdGlvbjogY2hlY2sucG9zaXRpb24gfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGNoZWNrLm1lc3NhZ2UsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBzdGF0dXMuZGlydHkoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChjaGVjay5raW5kID09PSBcInRvTG93ZXJDYXNlXCIpIHtcbiAgICAgICAgICAgICAgICBpbnB1dC5kYXRhID0gaW5wdXQuZGF0YS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoY2hlY2sua2luZCA9PT0gXCJ0b1VwcGVyQ2FzZVwiKSB7XG4gICAgICAgICAgICAgICAgaW5wdXQuZGF0YSA9IGlucHV0LmRhdGEudG9VcHBlckNhc2UoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGNoZWNrLmtpbmQgPT09IFwic3RhcnRzV2l0aFwiKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFpbnB1dC5kYXRhLnN0YXJ0c1dpdGgoY2hlY2sudmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgIGN0eCA9IHRoaXMuX2dldE9yUmV0dXJuQ3R4KGlucHV0LCBjdHgpO1xuICAgICAgICAgICAgICAgICAgICBhZGRJc3N1ZVRvQ29udGV4dChjdHgsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvZGU6IFpvZElzc3VlQ29kZS5pbnZhbGlkX3N0cmluZyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRpb246IHsgc3RhcnRzV2l0aDogY2hlY2sudmFsdWUgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGNoZWNrLm1lc3NhZ2UsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBzdGF0dXMuZGlydHkoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChjaGVjay5raW5kID09PSBcImVuZHNXaXRoXCIpIHtcbiAgICAgICAgICAgICAgICBpZiAoIWlucHV0LmRhdGEuZW5kc1dpdGgoY2hlY2sudmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgIGN0eCA9IHRoaXMuX2dldE9yUmV0dXJuQ3R4KGlucHV0LCBjdHgpO1xuICAgICAgICAgICAgICAgICAgICBhZGRJc3N1ZVRvQ29udGV4dChjdHgsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvZGU6IFpvZElzc3VlQ29kZS5pbnZhbGlkX3N0cmluZyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRpb246IHsgZW5kc1dpdGg6IGNoZWNrLnZhbHVlIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBjaGVjay5tZXNzYWdlLFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgc3RhdHVzLmRpcnR5KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoY2hlY2sua2luZCA9PT0gXCJkYXRldGltZVwiKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVnZXggPSBkYXRldGltZVJlZ2V4KGNoZWNrKTtcbiAgICAgICAgICAgICAgICBpZiAoIXJlZ2V4LnRlc3QoaW5wdXQuZGF0YSkpIHtcbiAgICAgICAgICAgICAgICAgICAgY3R4ID0gdGhpcy5fZ2V0T3JSZXR1cm5DdHgoaW5wdXQsIGN0eCk7XG4gICAgICAgICAgICAgICAgICAgIGFkZElzc3VlVG9Db250ZXh0KGN0eCwge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29kZTogWm9kSXNzdWVDb2RlLmludmFsaWRfc3RyaW5nLFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdGlvbjogXCJkYXRldGltZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogY2hlY2subWVzc2FnZSxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHN0YXR1cy5kaXJ0eSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGNoZWNrLmtpbmQgPT09IFwiZGF0ZVwiKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVnZXggPSBkYXRlUmVnZXg7XG4gICAgICAgICAgICAgICAgaWYgKCFyZWdleC50ZXN0KGlucHV0LmRhdGEpKSB7XG4gICAgICAgICAgICAgICAgICAgIGN0eCA9IHRoaXMuX2dldE9yUmV0dXJuQ3R4KGlucHV0LCBjdHgpO1xuICAgICAgICAgICAgICAgICAgICBhZGRJc3N1ZVRvQ29udGV4dChjdHgsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvZGU6IFpvZElzc3VlQ29kZS5pbnZhbGlkX3N0cmluZyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRpb246IFwiZGF0ZVwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogY2hlY2subWVzc2FnZSxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHN0YXR1cy5kaXJ0eSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGNoZWNrLmtpbmQgPT09IFwidGltZVwiKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVnZXggPSB0aW1lUmVnZXgoY2hlY2spO1xuICAgICAgICAgICAgICAgIGlmICghcmVnZXgudGVzdChpbnB1dC5kYXRhKSkge1xuICAgICAgICAgICAgICAgICAgICBjdHggPSB0aGlzLl9nZXRPclJldHVybkN0eChpbnB1dCwgY3R4KTtcbiAgICAgICAgICAgICAgICAgICAgYWRkSXNzdWVUb0NvbnRleHQoY3R4LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb2RlOiBab2RJc3N1ZUNvZGUuaW52YWxpZF9zdHJpbmcsXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0aW9uOiBcInRpbWVcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGNoZWNrLm1lc3NhZ2UsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBzdGF0dXMuZGlydHkoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChjaGVjay5raW5kID09PSBcImR1cmF0aW9uXCIpIHtcbiAgICAgICAgICAgICAgICBpZiAoIWR1cmF0aW9uUmVnZXgudGVzdChpbnB1dC5kYXRhKSkge1xuICAgICAgICAgICAgICAgICAgICBjdHggPSB0aGlzLl9nZXRPclJldHVybkN0eChpbnB1dCwgY3R4KTtcbiAgICAgICAgICAgICAgICAgICAgYWRkSXNzdWVUb0NvbnRleHQoY3R4LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0aW9uOiBcImR1cmF0aW9uXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2RlOiBab2RJc3N1ZUNvZGUuaW52YWxpZF9zdHJpbmcsXG4gICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBjaGVjay5tZXNzYWdlLFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgc3RhdHVzLmRpcnR5KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoY2hlY2sua2luZCA9PT0gXCJpcFwiKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFpc1ZhbGlkSVAoaW5wdXQuZGF0YSwgY2hlY2sudmVyc2lvbikpIHtcbiAgICAgICAgICAgICAgICAgICAgY3R4ID0gdGhpcy5fZ2V0T3JSZXR1cm5DdHgoaW5wdXQsIGN0eCk7XG4gICAgICAgICAgICAgICAgICAgIGFkZElzc3VlVG9Db250ZXh0KGN0eCwge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFsaWRhdGlvbjogXCJpcFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgY29kZTogWm9kSXNzdWVDb2RlLmludmFsaWRfc3RyaW5nLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogY2hlY2subWVzc2FnZSxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHN0YXR1cy5kaXJ0eSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGNoZWNrLmtpbmQgPT09IFwiand0XCIpIHtcbiAgICAgICAgICAgICAgICBpZiAoIWlzVmFsaWRKV1QoaW5wdXQuZGF0YSwgY2hlY2suYWxnKSkge1xuICAgICAgICAgICAgICAgICAgICBjdHggPSB0aGlzLl9nZXRPclJldHVybkN0eChpbnB1dCwgY3R4KTtcbiAgICAgICAgICAgICAgICAgICAgYWRkSXNzdWVUb0NvbnRleHQoY3R4LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0aW9uOiBcImp3dFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgY29kZTogWm9kSXNzdWVDb2RlLmludmFsaWRfc3RyaW5nLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogY2hlY2subWVzc2FnZSxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHN0YXR1cy5kaXJ0eSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGNoZWNrLmtpbmQgPT09IFwiY2lkclwiKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFpc1ZhbGlkQ2lkcihpbnB1dC5kYXRhLCBjaGVjay52ZXJzaW9uKSkge1xuICAgICAgICAgICAgICAgICAgICBjdHggPSB0aGlzLl9nZXRPclJldHVybkN0eChpbnB1dCwgY3R4KTtcbiAgICAgICAgICAgICAgICAgICAgYWRkSXNzdWVUb0NvbnRleHQoY3R4LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0aW9uOiBcImNpZHJcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvZGU6IFpvZElzc3VlQ29kZS5pbnZhbGlkX3N0cmluZyxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGNoZWNrLm1lc3NhZ2UsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBzdGF0dXMuZGlydHkoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChjaGVjay5raW5kID09PSBcImJhc2U2NFwiKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFiYXNlNjRSZWdleC50ZXN0KGlucHV0LmRhdGEpKSB7XG4gICAgICAgICAgICAgICAgICAgIGN0eCA9IHRoaXMuX2dldE9yUmV0dXJuQ3R4KGlucHV0LCBjdHgpO1xuICAgICAgICAgICAgICAgICAgICBhZGRJc3N1ZVRvQ29udGV4dChjdHgsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRpb246IFwiYmFzZTY0XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2RlOiBab2RJc3N1ZUNvZGUuaW52YWxpZF9zdHJpbmcsXG4gICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBjaGVjay5tZXNzYWdlLFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgc3RhdHVzLmRpcnR5KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoY2hlY2sua2luZCA9PT0gXCJiYXNlNjR1cmxcIikge1xuICAgICAgICAgICAgICAgIGlmICghYmFzZTY0dXJsUmVnZXgudGVzdChpbnB1dC5kYXRhKSkge1xuICAgICAgICAgICAgICAgICAgICBjdHggPSB0aGlzLl9nZXRPclJldHVybkN0eChpbnB1dCwgY3R4KTtcbiAgICAgICAgICAgICAgICAgICAgYWRkSXNzdWVUb0NvbnRleHQoY3R4LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWxpZGF0aW9uOiBcImJhc2U2NHVybFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgY29kZTogWm9kSXNzdWVDb2RlLmludmFsaWRfc3RyaW5nLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogY2hlY2subWVzc2FnZSxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHN0YXR1cy5kaXJ0eSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHV0aWwuYXNzZXJ0TmV2ZXIoY2hlY2spO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7IHN0YXR1czogc3RhdHVzLnZhbHVlLCB2YWx1ZTogaW5wdXQuZGF0YSB9O1xuICAgIH1cbiAgICBfcmVnZXgocmVnZXgsIHZhbGlkYXRpb24sIG1lc3NhZ2UpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmVmaW5lbWVudCgoZGF0YSkgPT4gcmVnZXgudGVzdChkYXRhKSwge1xuICAgICAgICAgICAgdmFsaWRhdGlvbixcbiAgICAgICAgICAgIGNvZGU6IFpvZElzc3VlQ29kZS5pbnZhbGlkX3N0cmluZyxcbiAgICAgICAgICAgIC4uLmVycm9yVXRpbC5lcnJUb09iaihtZXNzYWdlKSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIF9hZGRDaGVjayhjaGVjaykge1xuICAgICAgICByZXR1cm4gbmV3IFpvZFN0cmluZyh7XG4gICAgICAgICAgICAuLi50aGlzLl9kZWYsXG4gICAgICAgICAgICBjaGVja3M6IFsuLi50aGlzLl9kZWYuY2hlY2tzLCBjaGVja10sXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBlbWFpbChtZXNzYWdlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9hZGRDaGVjayh7IGtpbmQ6IFwiZW1haWxcIiwgLi4uZXJyb3JVdGlsLmVyclRvT2JqKG1lc3NhZ2UpIH0pO1xuICAgIH1cbiAgICB1cmwobWVzc2FnZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5fYWRkQ2hlY2soeyBraW5kOiBcInVybFwiLCAuLi5lcnJvclV0aWwuZXJyVG9PYmoobWVzc2FnZSkgfSk7XG4gICAgfVxuICAgIGVtb2ppKG1lc3NhZ2UpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2FkZENoZWNrKHsga2luZDogXCJlbW9qaVwiLCAuLi5lcnJvclV0aWwuZXJyVG9PYmoobWVzc2FnZSkgfSk7XG4gICAgfVxuICAgIHV1aWQobWVzc2FnZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5fYWRkQ2hlY2soeyBraW5kOiBcInV1aWRcIiwgLi4uZXJyb3JVdGlsLmVyclRvT2JqKG1lc3NhZ2UpIH0pO1xuICAgIH1cbiAgICBuYW5vaWQobWVzc2FnZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5fYWRkQ2hlY2soeyBraW5kOiBcIm5hbm9pZFwiLCAuLi5lcnJvclV0aWwuZXJyVG9PYmoobWVzc2FnZSkgfSk7XG4gICAgfVxuICAgIGN1aWQobWVzc2FnZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5fYWRkQ2hlY2soeyBraW5kOiBcImN1aWRcIiwgLi4uZXJyb3JVdGlsLmVyclRvT2JqKG1lc3NhZ2UpIH0pO1xuICAgIH1cbiAgICBjdWlkMihtZXNzYWdlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9hZGRDaGVjayh7IGtpbmQ6IFwiY3VpZDJcIiwgLi4uZXJyb3JVdGlsLmVyclRvT2JqKG1lc3NhZ2UpIH0pO1xuICAgIH1cbiAgICB1bGlkKG1lc3NhZ2UpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2FkZENoZWNrKHsga2luZDogXCJ1bGlkXCIsIC4uLmVycm9yVXRpbC5lcnJUb09iaihtZXNzYWdlKSB9KTtcbiAgICB9XG4gICAgYmFzZTY0KG1lc3NhZ2UpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2FkZENoZWNrKHsga2luZDogXCJiYXNlNjRcIiwgLi4uZXJyb3JVdGlsLmVyclRvT2JqKG1lc3NhZ2UpIH0pO1xuICAgIH1cbiAgICBiYXNlNjR1cmwobWVzc2FnZSkge1xuICAgICAgICAvLyBiYXNlNjR1cmwgZW5jb2RpbmcgaXMgYSBtb2RpZmljYXRpb24gb2YgYmFzZTY0IHRoYXQgY2FuIHNhZmVseSBiZSB1c2VkIGluIFVSTHMgYW5kIGZpbGVuYW1lc1xuICAgICAgICByZXR1cm4gdGhpcy5fYWRkQ2hlY2soe1xuICAgICAgICAgICAga2luZDogXCJiYXNlNjR1cmxcIixcbiAgICAgICAgICAgIC4uLmVycm9yVXRpbC5lcnJUb09iaihtZXNzYWdlKSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGp3dChvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9hZGRDaGVjayh7IGtpbmQ6IFwiand0XCIsIC4uLmVycm9yVXRpbC5lcnJUb09iaihvcHRpb25zKSB9KTtcbiAgICB9XG4gICAgaXAob3B0aW9ucykge1xuICAgICAgICByZXR1cm4gdGhpcy5fYWRkQ2hlY2soeyBraW5kOiBcImlwXCIsIC4uLmVycm9yVXRpbC5lcnJUb09iaihvcHRpb25zKSB9KTtcbiAgICB9XG4gICAgY2lkcihvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9hZGRDaGVjayh7IGtpbmQ6IFwiY2lkclwiLCAuLi5lcnJvclV0aWwuZXJyVG9PYmoob3B0aW9ucykgfSk7XG4gICAgfVxuICAgIGRhdGV0aW1lKG9wdGlvbnMpIHtcbiAgICAgICAgdmFyIF9hLCBfYjtcbiAgICAgICAgaWYgKHR5cGVvZiBvcHRpb25zID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fYWRkQ2hlY2soe1xuICAgICAgICAgICAgICAgIGtpbmQ6IFwiZGF0ZXRpbWVcIixcbiAgICAgICAgICAgICAgICBwcmVjaXNpb246IG51bGwsXG4gICAgICAgICAgICAgICAgb2Zmc2V0OiBmYWxzZSxcbiAgICAgICAgICAgICAgICBsb2NhbDogZmFsc2UsXG4gICAgICAgICAgICAgICAgbWVzc2FnZTogb3B0aW9ucyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLl9hZGRDaGVjayh7XG4gICAgICAgICAgICBraW5kOiBcImRhdGV0aW1lXCIsXG4gICAgICAgICAgICBwcmVjaXNpb246IHR5cGVvZiAob3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLnByZWNpc2lvbikgPT09IFwidW5kZWZpbmVkXCIgPyBudWxsIDogb3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLnByZWNpc2lvbixcbiAgICAgICAgICAgIG9mZnNldDogKF9hID0gb3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLm9mZnNldCkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogZmFsc2UsXG4gICAgICAgICAgICBsb2NhbDogKF9iID0gb3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLmxvY2FsKSAhPT0gbnVsbCAmJiBfYiAhPT0gdm9pZCAwID8gX2IgOiBmYWxzZSxcbiAgICAgICAgICAgIC4uLmVycm9yVXRpbC5lcnJUb09iaihvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMubWVzc2FnZSksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBkYXRlKG1lc3NhZ2UpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2FkZENoZWNrKHsga2luZDogXCJkYXRlXCIsIG1lc3NhZ2UgfSk7XG4gICAgfVxuICAgIHRpbWUob3B0aW9ucykge1xuICAgICAgICBpZiAodHlwZW9mIG9wdGlvbnMgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9hZGRDaGVjayh7XG4gICAgICAgICAgICAgICAga2luZDogXCJ0aW1lXCIsXG4gICAgICAgICAgICAgICAgcHJlY2lzaW9uOiBudWxsLFxuICAgICAgICAgICAgICAgIG1lc3NhZ2U6IG9wdGlvbnMsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5fYWRkQ2hlY2soe1xuICAgICAgICAgICAga2luZDogXCJ0aW1lXCIsXG4gICAgICAgICAgICBwcmVjaXNpb246IHR5cGVvZiAob3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLnByZWNpc2lvbikgPT09IFwidW5kZWZpbmVkXCIgPyBudWxsIDogb3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLnByZWNpc2lvbixcbiAgICAgICAgICAgIC4uLmVycm9yVXRpbC5lcnJUb09iaihvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMubWVzc2FnZSksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBkdXJhdGlvbihtZXNzYWdlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9hZGRDaGVjayh7IGtpbmQ6IFwiZHVyYXRpb25cIiwgLi4uZXJyb3JVdGlsLmVyclRvT2JqKG1lc3NhZ2UpIH0pO1xuICAgIH1cbiAgICByZWdleChyZWdleCwgbWVzc2FnZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5fYWRkQ2hlY2soe1xuICAgICAgICAgICAga2luZDogXCJyZWdleFwiLFxuICAgICAgICAgICAgcmVnZXg6IHJlZ2V4LFxuICAgICAgICAgICAgLi4uZXJyb3JVdGlsLmVyclRvT2JqKG1lc3NhZ2UpLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgaW5jbHVkZXModmFsdWUsIG9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2FkZENoZWNrKHtcbiAgICAgICAgICAgIGtpbmQ6IFwiaW5jbHVkZXNcIixcbiAgICAgICAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgICAgICAgIHBvc2l0aW9uOiBvcHRpb25zID09PSBudWxsIHx8IG9wdGlvbnMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9wdGlvbnMucG9zaXRpb24sXG4gICAgICAgICAgICAuLi5lcnJvclV0aWwuZXJyVG9PYmoob3B0aW9ucyA9PT0gbnVsbCB8fCBvcHRpb25zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBvcHRpb25zLm1lc3NhZ2UpLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgc3RhcnRzV2l0aCh2YWx1ZSwgbWVzc2FnZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5fYWRkQ2hlY2soe1xuICAgICAgICAgICAga2luZDogXCJzdGFydHNXaXRoXCIsXG4gICAgICAgICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICAgICAgICAuLi5lcnJvclV0aWwuZXJyVG9PYmoobWVzc2FnZSksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBlbmRzV2l0aCh2YWx1ZSwgbWVzc2FnZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5fYWRkQ2hlY2soe1xuICAgICAgICAgICAga2luZDogXCJlbmRzV2l0aFwiLFxuICAgICAgICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgICAgICAgLi4uZXJyb3JVdGlsLmVyclRvT2JqKG1lc3NhZ2UpLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgbWluKG1pbkxlbmd0aCwgbWVzc2FnZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5fYWRkQ2hlY2soe1xuICAgICAgICAgICAga2luZDogXCJtaW5cIixcbiAgICAgICAgICAgIHZhbHVlOiBtaW5MZW5ndGgsXG4gICAgICAgICAgICAuLi5lcnJvclV0aWwuZXJyVG9PYmoobWVzc2FnZSksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBtYXgobWF4TGVuZ3RoLCBtZXNzYWdlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9hZGRDaGVjayh7XG4gICAgICAgICAgICBraW5kOiBcIm1heFwiLFxuICAgICAgICAgICAgdmFsdWU6IG1heExlbmd0aCxcbiAgICAgICAgICAgIC4uLmVycm9yVXRpbC5lcnJUb09iaihtZXNzYWdlKSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGxlbmd0aChsZW4sIG1lc3NhZ2UpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2FkZENoZWNrKHtcbiAgICAgICAgICAgIGtpbmQ6IFwibGVuZ3RoXCIsXG4gICAgICAgICAgICB2YWx1ZTogbGVuLFxuICAgICAgICAgICAgLi4uZXJyb3JVdGlsLmVyclRvT2JqKG1lc3NhZ2UpLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgLyoqXG4gICAgICogRXF1aXZhbGVudCB0byBgLm1pbigxKWBcbiAgICAgKi9cbiAgICBub25lbXB0eShtZXNzYWdlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLm1pbigxLCBlcnJvclV0aWwuZXJyVG9PYmoobWVzc2FnZSkpO1xuICAgIH1cbiAgICB0cmltKCkge1xuICAgICAgICByZXR1cm4gbmV3IFpvZFN0cmluZyh7XG4gICAgICAgICAgICAuLi50aGlzLl9kZWYsXG4gICAgICAgICAgICBjaGVja3M6IFsuLi50aGlzLl9kZWYuY2hlY2tzLCB7IGtpbmQ6IFwidHJpbVwiIH1dLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgdG9Mb3dlckNhc2UoKSB7XG4gICAgICAgIHJldHVybiBuZXcgWm9kU3RyaW5nKHtcbiAgICAgICAgICAgIC4uLnRoaXMuX2RlZixcbiAgICAgICAgICAgIGNoZWNrczogWy4uLnRoaXMuX2RlZi5jaGVja3MsIHsga2luZDogXCJ0b0xvd2VyQ2FzZVwiIH1dLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgdG9VcHBlckNhc2UoKSB7XG4gICAgICAgIHJldHVybiBuZXcgWm9kU3RyaW5nKHtcbiAgICAgICAgICAgIC4uLnRoaXMuX2RlZixcbiAgICAgICAgICAgIGNoZWNrczogWy4uLnRoaXMuX2RlZi5jaGVja3MsIHsga2luZDogXCJ0b1VwcGVyQ2FzZVwiIH1dLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgZ2V0IGlzRGF0ZXRpbWUoKSB7XG4gICAgICAgIHJldHVybiAhIXRoaXMuX2RlZi5jaGVja3MuZmluZCgoY2gpID0+IGNoLmtpbmQgPT09IFwiZGF0ZXRpbWVcIik7XG4gICAgfVxuICAgIGdldCBpc0RhdGUoKSB7XG4gICAgICAgIHJldHVybiAhIXRoaXMuX2RlZi5jaGVja3MuZmluZCgoY2gpID0+IGNoLmtpbmQgPT09IFwiZGF0ZVwiKTtcbiAgICB9XG4gICAgZ2V0IGlzVGltZSgpIHtcbiAgICAgICAgcmV0dXJuICEhdGhpcy5fZGVmLmNoZWNrcy5maW5kKChjaCkgPT4gY2gua2luZCA9PT0gXCJ0aW1lXCIpO1xuICAgIH1cbiAgICBnZXQgaXNEdXJhdGlvbigpIHtcbiAgICAgICAgcmV0dXJuICEhdGhpcy5fZGVmLmNoZWNrcy5maW5kKChjaCkgPT4gY2gua2luZCA9PT0gXCJkdXJhdGlvblwiKTtcbiAgICB9XG4gICAgZ2V0IGlzRW1haWwoKSB7XG4gICAgICAgIHJldHVybiAhIXRoaXMuX2RlZi5jaGVja3MuZmluZCgoY2gpID0+IGNoLmtpbmQgPT09IFwiZW1haWxcIik7XG4gICAgfVxuICAgIGdldCBpc1VSTCgpIHtcbiAgICAgICAgcmV0dXJuICEhdGhpcy5fZGVmLmNoZWNrcy5maW5kKChjaCkgPT4gY2gua2luZCA9PT0gXCJ1cmxcIik7XG4gICAgfVxuICAgIGdldCBpc0Vtb2ppKCkge1xuICAgICAgICByZXR1cm4gISF0aGlzLl9kZWYuY2hlY2tzLmZpbmQoKGNoKSA9PiBjaC5raW5kID09PSBcImVtb2ppXCIpO1xuICAgIH1cbiAgICBnZXQgaXNVVUlEKCkge1xuICAgICAgICByZXR1cm4gISF0aGlzLl9kZWYuY2hlY2tzLmZpbmQoKGNoKSA9PiBjaC5raW5kID09PSBcInV1aWRcIik7XG4gICAgfVxuICAgIGdldCBpc05BTk9JRCgpIHtcbiAgICAgICAgcmV0dXJuICEhdGhpcy5fZGVmLmNoZWNrcy5maW5kKChjaCkgPT4gY2gua2luZCA9PT0gXCJuYW5vaWRcIik7XG4gICAgfVxuICAgIGdldCBpc0NVSUQoKSB7XG4gICAgICAgIHJldHVybiAhIXRoaXMuX2RlZi5jaGVja3MuZmluZCgoY2gpID0+IGNoLmtpbmQgPT09IFwiY3VpZFwiKTtcbiAgICB9XG4gICAgZ2V0IGlzQ1VJRDIoKSB7XG4gICAgICAgIHJldHVybiAhIXRoaXMuX2RlZi5jaGVja3MuZmluZCgoY2gpID0+IGNoLmtpbmQgPT09IFwiY3VpZDJcIik7XG4gICAgfVxuICAgIGdldCBpc1VMSUQoKSB7XG4gICAgICAgIHJldHVybiAhIXRoaXMuX2RlZi5jaGVja3MuZmluZCgoY2gpID0+IGNoLmtpbmQgPT09IFwidWxpZFwiKTtcbiAgICB9XG4gICAgZ2V0IGlzSVAoKSB7XG4gICAgICAgIHJldHVybiAhIXRoaXMuX2RlZi5jaGVja3MuZmluZCgoY2gpID0+IGNoLmtpbmQgPT09IFwiaXBcIik7XG4gICAgfVxuICAgIGdldCBpc0NJRFIoKSB7XG4gICAgICAgIHJldHVybiAhIXRoaXMuX2RlZi5jaGVja3MuZmluZCgoY2gpID0+IGNoLmtpbmQgPT09IFwiY2lkclwiKTtcbiAgICB9XG4gICAgZ2V0IGlzQmFzZTY0KCkge1xuICAgICAgICByZXR1cm4gISF0aGlzLl9kZWYuY2hlY2tzLmZpbmQoKGNoKSA9PiBjaC5raW5kID09PSBcImJhc2U2NFwiKTtcbiAgICB9XG4gICAgZ2V0IGlzQmFzZTY0dXJsKCkge1xuICAgICAgICAvLyBiYXNlNjR1cmwgZW5jb2RpbmcgaXMgYSBtb2RpZmljYXRpb24gb2YgYmFzZTY0IHRoYXQgY2FuIHNhZmVseSBiZSB1c2VkIGluIFVSTHMgYW5kIGZpbGVuYW1lc1xuICAgICAgICByZXR1cm4gISF0aGlzLl9kZWYuY2hlY2tzLmZpbmQoKGNoKSA9PiBjaC5raW5kID09PSBcImJhc2U2NHVybFwiKTtcbiAgICB9XG4gICAgZ2V0IG1pbkxlbmd0aCgpIHtcbiAgICAgICAgbGV0IG1pbiA9IG51bGw7XG4gICAgICAgIGZvciAoY29uc3QgY2ggb2YgdGhpcy5fZGVmLmNoZWNrcykge1xuICAgICAgICAgICAgaWYgKGNoLmtpbmQgPT09IFwibWluXCIpIHtcbiAgICAgICAgICAgICAgICBpZiAobWluID09PSBudWxsIHx8IGNoLnZhbHVlID4gbWluKVxuICAgICAgICAgICAgICAgICAgICBtaW4gPSBjaC52YWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbWluO1xuICAgIH1cbiAgICBnZXQgbWF4TGVuZ3RoKCkge1xuICAgICAgICBsZXQgbWF4ID0gbnVsbDtcbiAgICAgICAgZm9yIChjb25zdCBjaCBvZiB0aGlzLl9kZWYuY2hlY2tzKSB7XG4gICAgICAgICAgICBpZiAoY2gua2luZCA9PT0gXCJtYXhcIikge1xuICAgICAgICAgICAgICAgIGlmIChtYXggPT09IG51bGwgfHwgY2gudmFsdWUgPCBtYXgpXG4gICAgICAgICAgICAgICAgICAgIG1heCA9IGNoLnZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtYXg7XG4gICAgfVxufVxuWm9kU3RyaW5nLmNyZWF0ZSA9IChwYXJhbXMpID0+IHtcbiAgICB2YXIgX2E7XG4gICAgcmV0dXJuIG5ldyBab2RTdHJpbmcoe1xuICAgICAgICBjaGVja3M6IFtdLFxuICAgICAgICB0eXBlTmFtZTogWm9kRmlyc3RQYXJ0eVR5cGVLaW5kLlpvZFN0cmluZyxcbiAgICAgICAgY29lcmNlOiAoX2EgPSBwYXJhbXMgPT09IG51bGwgfHwgcGFyYW1zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBwYXJhbXMuY29lcmNlKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBmYWxzZSxcbiAgICAgICAgLi4ucHJvY2Vzc0NyZWF0ZVBhcmFtcyhwYXJhbXMpLFxuICAgIH0pO1xufTtcbi8vIGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzM5NjY0ODQvd2h5LWRvZXMtbW9kdWx1cy1vcGVyYXRvci1yZXR1cm4tZnJhY3Rpb25hbC1udW1iZXItaW4tamF2YXNjcmlwdC8zMTcxMTAzNCMzMTcxMTAzNFxuZnVuY3Rpb24gZmxvYXRTYWZlUmVtYWluZGVyKHZhbCwgc3RlcCkge1xuICAgIGNvbnN0IHZhbERlY0NvdW50ID0gKHZhbC50b1N0cmluZygpLnNwbGl0KFwiLlwiKVsxXSB8fCBcIlwiKS5sZW5ndGg7XG4gICAgY29uc3Qgc3RlcERlY0NvdW50ID0gKHN0ZXAudG9TdHJpbmcoKS5zcGxpdChcIi5cIilbMV0gfHwgXCJcIikubGVuZ3RoO1xuICAgIGNvbnN0IGRlY0NvdW50ID0gdmFsRGVjQ291bnQgPiBzdGVwRGVjQ291bnQgPyB2YWxEZWNDb3VudCA6IHN0ZXBEZWNDb3VudDtcbiAgICBjb25zdCB2YWxJbnQgPSBwYXJzZUludCh2YWwudG9GaXhlZChkZWNDb3VudCkucmVwbGFjZShcIi5cIiwgXCJcIikpO1xuICAgIGNvbnN0IHN0ZXBJbnQgPSBwYXJzZUludChzdGVwLnRvRml4ZWQoZGVjQ291bnQpLnJlcGxhY2UoXCIuXCIsIFwiXCIpKTtcbiAgICByZXR1cm4gKHZhbEludCAlIHN0ZXBJbnQpIC8gTWF0aC5wb3coMTAsIGRlY0NvdW50KTtcbn1cbmNsYXNzIFpvZE51bWJlciBleHRlbmRzIFpvZFR5cGUge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlciguLi5hcmd1bWVudHMpO1xuICAgICAgICB0aGlzLm1pbiA9IHRoaXMuZ3RlO1xuICAgICAgICB0aGlzLm1heCA9IHRoaXMubHRlO1xuICAgICAgICB0aGlzLnN0ZXAgPSB0aGlzLm11bHRpcGxlT2Y7XG4gICAgfVxuICAgIF9wYXJzZShpbnB1dCkge1xuICAgICAgICBpZiAodGhpcy5fZGVmLmNvZXJjZSkge1xuICAgICAgICAgICAgaW5wdXQuZGF0YSA9IE51bWJlcihpbnB1dC5kYXRhKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBwYXJzZWRUeXBlID0gdGhpcy5fZ2V0VHlwZShpbnB1dCk7XG4gICAgICAgIGlmIChwYXJzZWRUeXBlICE9PSBab2RQYXJzZWRUeXBlLm51bWJlcikge1xuICAgICAgICAgICAgY29uc3QgY3R4ID0gdGhpcy5fZ2V0T3JSZXR1cm5DdHgoaW5wdXQpO1xuICAgICAgICAgICAgYWRkSXNzdWVUb0NvbnRleHQoY3R4LCB7XG4gICAgICAgICAgICAgICAgY29kZTogWm9kSXNzdWVDb2RlLmludmFsaWRfdHlwZSxcbiAgICAgICAgICAgICAgICBleHBlY3RlZDogWm9kUGFyc2VkVHlwZS5udW1iZXIsXG4gICAgICAgICAgICAgICAgcmVjZWl2ZWQ6IGN0eC5wYXJzZWRUeXBlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gSU5WQUxJRDtcbiAgICAgICAgfVxuICAgICAgICBsZXQgY3R4ID0gdW5kZWZpbmVkO1xuICAgICAgICBjb25zdCBzdGF0dXMgPSBuZXcgUGFyc2VTdGF0dXMoKTtcbiAgICAgICAgZm9yIChjb25zdCBjaGVjayBvZiB0aGlzLl9kZWYuY2hlY2tzKSB7XG4gICAgICAgICAgICBpZiAoY2hlY2sua2luZCA9PT0gXCJpbnRcIikge1xuICAgICAgICAgICAgICAgIGlmICghdXRpbC5pc0ludGVnZXIoaW5wdXQuZGF0YSkpIHtcbiAgICAgICAgICAgICAgICAgICAgY3R4ID0gdGhpcy5fZ2V0T3JSZXR1cm5DdHgoaW5wdXQsIGN0eCk7XG4gICAgICAgICAgICAgICAgICAgIGFkZElzc3VlVG9Db250ZXh0KGN0eCwge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29kZTogWm9kSXNzdWVDb2RlLmludmFsaWRfdHlwZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4cGVjdGVkOiBcImludGVnZXJcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlY2VpdmVkOiBcImZsb2F0XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBjaGVjay5tZXNzYWdlLFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgc3RhdHVzLmRpcnR5KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoY2hlY2sua2luZCA9PT0gXCJtaW5cIikge1xuICAgICAgICAgICAgICAgIGNvbnN0IHRvb1NtYWxsID0gY2hlY2suaW5jbHVzaXZlXG4gICAgICAgICAgICAgICAgICAgID8gaW5wdXQuZGF0YSA8IGNoZWNrLnZhbHVlXG4gICAgICAgICAgICAgICAgICAgIDogaW5wdXQuZGF0YSA8PSBjaGVjay52YWx1ZTtcbiAgICAgICAgICAgICAgICBpZiAodG9vU21hbGwpIHtcbiAgICAgICAgICAgICAgICAgICAgY3R4ID0gdGhpcy5fZ2V0T3JSZXR1cm5DdHgoaW5wdXQsIGN0eCk7XG4gICAgICAgICAgICAgICAgICAgIGFkZElzc3VlVG9Db250ZXh0KGN0eCwge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29kZTogWm9kSXNzdWVDb2RlLnRvb19zbWFsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1pbmltdW06IGNoZWNrLnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJudW1iZXJcIixcbiAgICAgICAgICAgICAgICAgICAgICAgIGluY2x1c2l2ZTogY2hlY2suaW5jbHVzaXZlLFxuICAgICAgICAgICAgICAgICAgICAgICAgZXhhY3Q6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogY2hlY2subWVzc2FnZSxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHN0YXR1cy5kaXJ0eSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGNoZWNrLmtpbmQgPT09IFwibWF4XCIpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB0b29CaWcgPSBjaGVjay5pbmNsdXNpdmVcbiAgICAgICAgICAgICAgICAgICAgPyBpbnB1dC5kYXRhID4gY2hlY2sudmFsdWVcbiAgICAgICAgICAgICAgICAgICAgOiBpbnB1dC5kYXRhID49IGNoZWNrLnZhbHVlO1xuICAgICAgICAgICAgICAgIGlmICh0b29CaWcpIHtcbiAgICAgICAgICAgICAgICAgICAgY3R4ID0gdGhpcy5fZ2V0T3JSZXR1cm5DdHgoaW5wdXQsIGN0eCk7XG4gICAgICAgICAgICAgICAgICAgIGFkZElzc3VlVG9Db250ZXh0KGN0eCwge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29kZTogWm9kSXNzdWVDb2RlLnRvb19iaWcsXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXhpbXVtOiBjaGVjay52YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFwibnVtYmVyXCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBpbmNsdXNpdmU6IGNoZWNrLmluY2x1c2l2ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4YWN0OiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGNoZWNrLm1lc3NhZ2UsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBzdGF0dXMuZGlydHkoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChjaGVjay5raW5kID09PSBcIm11bHRpcGxlT2ZcIikge1xuICAgICAgICAgICAgICAgIGlmIChmbG9hdFNhZmVSZW1haW5kZXIoaW5wdXQuZGF0YSwgY2hlY2sudmFsdWUpICE9PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGN0eCA9IHRoaXMuX2dldE9yUmV0dXJuQ3R4KGlucHV0LCBjdHgpO1xuICAgICAgICAgICAgICAgICAgICBhZGRJc3N1ZVRvQ29udGV4dChjdHgsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvZGU6IFpvZElzc3VlQ29kZS5ub3RfbXVsdGlwbGVfb2YsXG4gICAgICAgICAgICAgICAgICAgICAgICBtdWx0aXBsZU9mOiBjaGVjay52YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGNoZWNrLm1lc3NhZ2UsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBzdGF0dXMuZGlydHkoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChjaGVjay5raW5kID09PSBcImZpbml0ZVwiKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFOdW1iZXIuaXNGaW5pdGUoaW5wdXQuZGF0YSkpIHtcbiAgICAgICAgICAgICAgICAgICAgY3R4ID0gdGhpcy5fZ2V0T3JSZXR1cm5DdHgoaW5wdXQsIGN0eCk7XG4gICAgICAgICAgICAgICAgICAgIGFkZElzc3VlVG9Db250ZXh0KGN0eCwge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29kZTogWm9kSXNzdWVDb2RlLm5vdF9maW5pdGUsXG4gICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBjaGVjay5tZXNzYWdlLFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgc3RhdHVzLmRpcnR5KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdXRpbC5hc3NlcnROZXZlcihjaGVjayk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHsgc3RhdHVzOiBzdGF0dXMudmFsdWUsIHZhbHVlOiBpbnB1dC5kYXRhIH07XG4gICAgfVxuICAgIGd0ZSh2YWx1ZSwgbWVzc2FnZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5zZXRMaW1pdChcIm1pblwiLCB2YWx1ZSwgdHJ1ZSwgZXJyb3JVdGlsLnRvU3RyaW5nKG1lc3NhZ2UpKTtcbiAgICB9XG4gICAgZ3QodmFsdWUsIG1lc3NhZ2UpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2V0TGltaXQoXCJtaW5cIiwgdmFsdWUsIGZhbHNlLCBlcnJvclV0aWwudG9TdHJpbmcobWVzc2FnZSkpO1xuICAgIH1cbiAgICBsdGUodmFsdWUsIG1lc3NhZ2UpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2V0TGltaXQoXCJtYXhcIiwgdmFsdWUsIHRydWUsIGVycm9yVXRpbC50b1N0cmluZyhtZXNzYWdlKSk7XG4gICAgfVxuICAgIGx0KHZhbHVlLCBtZXNzYWdlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnNldExpbWl0KFwibWF4XCIsIHZhbHVlLCBmYWxzZSwgZXJyb3JVdGlsLnRvU3RyaW5nKG1lc3NhZ2UpKTtcbiAgICB9XG4gICAgc2V0TGltaXQoa2luZCwgdmFsdWUsIGluY2x1c2l2ZSwgbWVzc2FnZSkge1xuICAgICAgICByZXR1cm4gbmV3IFpvZE51bWJlcih7XG4gICAgICAgICAgICAuLi50aGlzLl9kZWYsXG4gICAgICAgICAgICBjaGVja3M6IFtcbiAgICAgICAgICAgICAgICAuLi50aGlzLl9kZWYuY2hlY2tzLFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAga2luZCxcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgICAgICAgICAgIGluY2x1c2l2ZSxcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogZXJyb3JVdGlsLnRvU3RyaW5nKG1lc3NhZ2UpLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBdLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgX2FkZENoZWNrKGNoZWNrKSB7XG4gICAgICAgIHJldHVybiBuZXcgWm9kTnVtYmVyKHtcbiAgICAgICAgICAgIC4uLnRoaXMuX2RlZixcbiAgICAgICAgICAgIGNoZWNrczogWy4uLnRoaXMuX2RlZi5jaGVja3MsIGNoZWNrXSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGludChtZXNzYWdlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9hZGRDaGVjayh7XG4gICAgICAgICAgICBraW5kOiBcImludFwiLFxuICAgICAgICAgICAgbWVzc2FnZTogZXJyb3JVdGlsLnRvU3RyaW5nKG1lc3NhZ2UpLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgcG9zaXRpdmUobWVzc2FnZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5fYWRkQ2hlY2soe1xuICAgICAgICAgICAga2luZDogXCJtaW5cIixcbiAgICAgICAgICAgIHZhbHVlOiAwLFxuICAgICAgICAgICAgaW5jbHVzaXZlOiBmYWxzZSxcbiAgICAgICAgICAgIG1lc3NhZ2U6IGVycm9yVXRpbC50b1N0cmluZyhtZXNzYWdlKSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIG5lZ2F0aXZlKG1lc3NhZ2UpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2FkZENoZWNrKHtcbiAgICAgICAgICAgIGtpbmQ6IFwibWF4XCIsXG4gICAgICAgICAgICB2YWx1ZTogMCxcbiAgICAgICAgICAgIGluY2x1c2l2ZTogZmFsc2UsXG4gICAgICAgICAgICBtZXNzYWdlOiBlcnJvclV0aWwudG9TdHJpbmcobWVzc2FnZSksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBub25wb3NpdGl2ZShtZXNzYWdlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9hZGRDaGVjayh7XG4gICAgICAgICAgICBraW5kOiBcIm1heFwiLFxuICAgICAgICAgICAgdmFsdWU6IDAsXG4gICAgICAgICAgICBpbmNsdXNpdmU6IHRydWUsXG4gICAgICAgICAgICBtZXNzYWdlOiBlcnJvclV0aWwudG9TdHJpbmcobWVzc2FnZSksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBub25uZWdhdGl2ZShtZXNzYWdlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9hZGRDaGVjayh7XG4gICAgICAgICAgICBraW5kOiBcIm1pblwiLFxuICAgICAgICAgICAgdmFsdWU6IDAsXG4gICAgICAgICAgICBpbmNsdXNpdmU6IHRydWUsXG4gICAgICAgICAgICBtZXNzYWdlOiBlcnJvclV0aWwudG9TdHJpbmcobWVzc2FnZSksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBtdWx0aXBsZU9mKHZhbHVlLCBtZXNzYWdlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9hZGRDaGVjayh7XG4gICAgICAgICAgICBraW5kOiBcIm11bHRpcGxlT2ZcIixcbiAgICAgICAgICAgIHZhbHVlOiB2YWx1ZSxcbiAgICAgICAgICAgIG1lc3NhZ2U6IGVycm9yVXRpbC50b1N0cmluZyhtZXNzYWdlKSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGZpbml0ZShtZXNzYWdlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9hZGRDaGVjayh7XG4gICAgICAgICAgICBraW5kOiBcImZpbml0ZVwiLFxuICAgICAgICAgICAgbWVzc2FnZTogZXJyb3JVdGlsLnRvU3RyaW5nKG1lc3NhZ2UpLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgc2FmZShtZXNzYWdlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9hZGRDaGVjayh7XG4gICAgICAgICAgICBraW5kOiBcIm1pblwiLFxuICAgICAgICAgICAgaW5jbHVzaXZlOiB0cnVlLFxuICAgICAgICAgICAgdmFsdWU6IE51bWJlci5NSU5fU0FGRV9JTlRFR0VSLFxuICAgICAgICAgICAgbWVzc2FnZTogZXJyb3JVdGlsLnRvU3RyaW5nKG1lc3NhZ2UpLFxuICAgICAgICB9KS5fYWRkQ2hlY2soe1xuICAgICAgICAgICAga2luZDogXCJtYXhcIixcbiAgICAgICAgICAgIGluY2x1c2l2ZTogdHJ1ZSxcbiAgICAgICAgICAgIHZhbHVlOiBOdW1iZXIuTUFYX1NBRkVfSU5URUdFUixcbiAgICAgICAgICAgIG1lc3NhZ2U6IGVycm9yVXRpbC50b1N0cmluZyhtZXNzYWdlKSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGdldCBtaW5WYWx1ZSgpIHtcbiAgICAgICAgbGV0IG1pbiA9IG51bGw7XG4gICAgICAgIGZvciAoY29uc3QgY2ggb2YgdGhpcy5fZGVmLmNoZWNrcykge1xuICAgICAgICAgICAgaWYgKGNoLmtpbmQgPT09IFwibWluXCIpIHtcbiAgICAgICAgICAgICAgICBpZiAobWluID09PSBudWxsIHx8IGNoLnZhbHVlID4gbWluKVxuICAgICAgICAgICAgICAgICAgICBtaW4gPSBjaC52YWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbWluO1xuICAgIH1cbiAgICBnZXQgbWF4VmFsdWUoKSB7XG4gICAgICAgIGxldCBtYXggPSBudWxsO1xuICAgICAgICBmb3IgKGNvbnN0IGNoIG9mIHRoaXMuX2RlZi5jaGVja3MpIHtcbiAgICAgICAgICAgIGlmIChjaC5raW5kID09PSBcIm1heFwiKSB7XG4gICAgICAgICAgICAgICAgaWYgKG1heCA9PT0gbnVsbCB8fCBjaC52YWx1ZSA8IG1heClcbiAgICAgICAgICAgICAgICAgICAgbWF4ID0gY2gudmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG1heDtcbiAgICB9XG4gICAgZ2V0IGlzSW50KCkge1xuICAgICAgICByZXR1cm4gISF0aGlzLl9kZWYuY2hlY2tzLmZpbmQoKGNoKSA9PiBjaC5raW5kID09PSBcImludFwiIHx8XG4gICAgICAgICAgICAoY2gua2luZCA9PT0gXCJtdWx0aXBsZU9mXCIgJiYgdXRpbC5pc0ludGVnZXIoY2gudmFsdWUpKSk7XG4gICAgfVxuICAgIGdldCBpc0Zpbml0ZSgpIHtcbiAgICAgICAgbGV0IG1heCA9IG51bGwsIG1pbiA9IG51bGw7XG4gICAgICAgIGZvciAoY29uc3QgY2ggb2YgdGhpcy5fZGVmLmNoZWNrcykge1xuICAgICAgICAgICAgaWYgKGNoLmtpbmQgPT09IFwiZmluaXRlXCIgfHxcbiAgICAgICAgICAgICAgICBjaC5raW5kID09PSBcImludFwiIHx8XG4gICAgICAgICAgICAgICAgY2gua2luZCA9PT0gXCJtdWx0aXBsZU9mXCIpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGNoLmtpbmQgPT09IFwibWluXCIpIHtcbiAgICAgICAgICAgICAgICBpZiAobWluID09PSBudWxsIHx8IGNoLnZhbHVlID4gbWluKVxuICAgICAgICAgICAgICAgICAgICBtaW4gPSBjaC52YWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGNoLmtpbmQgPT09IFwibWF4XCIpIHtcbiAgICAgICAgICAgICAgICBpZiAobWF4ID09PSBudWxsIHx8IGNoLnZhbHVlIDwgbWF4KVxuICAgICAgICAgICAgICAgICAgICBtYXggPSBjaC52YWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gTnVtYmVyLmlzRmluaXRlKG1pbikgJiYgTnVtYmVyLmlzRmluaXRlKG1heCk7XG4gICAgfVxufVxuWm9kTnVtYmVyLmNyZWF0ZSA9IChwYXJhbXMpID0+IHtcbiAgICByZXR1cm4gbmV3IFpvZE51bWJlcih7XG4gICAgICAgIGNoZWNrczogW10sXG4gICAgICAgIHR5cGVOYW1lOiBab2RGaXJzdFBhcnR5VHlwZUtpbmQuWm9kTnVtYmVyLFxuICAgICAgICBjb2VyY2U6IChwYXJhbXMgPT09IG51bGwgfHwgcGFyYW1zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBwYXJhbXMuY29lcmNlKSB8fCBmYWxzZSxcbiAgICAgICAgLi4ucHJvY2Vzc0NyZWF0ZVBhcmFtcyhwYXJhbXMpLFxuICAgIH0pO1xufTtcbmNsYXNzIFpvZEJpZ0ludCBleHRlbmRzIFpvZFR5cGUge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlciguLi5hcmd1bWVudHMpO1xuICAgICAgICB0aGlzLm1pbiA9IHRoaXMuZ3RlO1xuICAgICAgICB0aGlzLm1heCA9IHRoaXMubHRlO1xuICAgIH1cbiAgICBfcGFyc2UoaW5wdXQpIHtcbiAgICAgICAgaWYgKHRoaXMuX2RlZi5jb2VyY2UpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgaW5wdXQuZGF0YSA9IEJpZ0ludChpbnB1dC5kYXRhKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChfYSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9nZXRJbnZhbGlkSW5wdXQoaW5wdXQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHBhcnNlZFR5cGUgPSB0aGlzLl9nZXRUeXBlKGlucHV0KTtcbiAgICAgICAgaWYgKHBhcnNlZFR5cGUgIT09IFpvZFBhcnNlZFR5cGUuYmlnaW50KSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fZ2V0SW52YWxpZElucHV0KGlucHV0KTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgY3R4ID0gdW5kZWZpbmVkO1xuICAgICAgICBjb25zdCBzdGF0dXMgPSBuZXcgUGFyc2VTdGF0dXMoKTtcbiAgICAgICAgZm9yIChjb25zdCBjaGVjayBvZiB0aGlzLl9kZWYuY2hlY2tzKSB7XG4gICAgICAgICAgICBpZiAoY2hlY2sua2luZCA9PT0gXCJtaW5cIikge1xuICAgICAgICAgICAgICAgIGNvbnN0IHRvb1NtYWxsID0gY2hlY2suaW5jbHVzaXZlXG4gICAgICAgICAgICAgICAgICAgID8gaW5wdXQuZGF0YSA8IGNoZWNrLnZhbHVlXG4gICAgICAgICAgICAgICAgICAgIDogaW5wdXQuZGF0YSA8PSBjaGVjay52YWx1ZTtcbiAgICAgICAgICAgICAgICBpZiAodG9vU21hbGwpIHtcbiAgICAgICAgICAgICAgICAgICAgY3R4ID0gdGhpcy5fZ2V0T3JSZXR1cm5DdHgoaW5wdXQsIGN0eCk7XG4gICAgICAgICAgICAgICAgICAgIGFkZElzc3VlVG9Db250ZXh0KGN0eCwge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29kZTogWm9kSXNzdWVDb2RlLnRvb19zbWFsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFwiYmlnaW50XCIsXG4gICAgICAgICAgICAgICAgICAgICAgICBtaW5pbXVtOiBjaGVjay52YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGluY2x1c2l2ZTogY2hlY2suaW5jbHVzaXZlLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogY2hlY2subWVzc2FnZSxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHN0YXR1cy5kaXJ0eSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGNoZWNrLmtpbmQgPT09IFwibWF4XCIpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB0b29CaWcgPSBjaGVjay5pbmNsdXNpdmVcbiAgICAgICAgICAgICAgICAgICAgPyBpbnB1dC5kYXRhID4gY2hlY2sudmFsdWVcbiAgICAgICAgICAgICAgICAgICAgOiBpbnB1dC5kYXRhID49IGNoZWNrLnZhbHVlO1xuICAgICAgICAgICAgICAgIGlmICh0b29CaWcpIHtcbiAgICAgICAgICAgICAgICAgICAgY3R4ID0gdGhpcy5fZ2V0T3JSZXR1cm5DdHgoaW5wdXQsIGN0eCk7XG4gICAgICAgICAgICAgICAgICAgIGFkZElzc3VlVG9Db250ZXh0KGN0eCwge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29kZTogWm9kSXNzdWVDb2RlLnRvb19iaWcsXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBcImJpZ2ludFwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWF4aW11bTogY2hlY2sudmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBpbmNsdXNpdmU6IGNoZWNrLmluY2x1c2l2ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGNoZWNrLm1lc3NhZ2UsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBzdGF0dXMuZGlydHkoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChjaGVjay5raW5kID09PSBcIm11bHRpcGxlT2ZcIikge1xuICAgICAgICAgICAgICAgIGlmIChpbnB1dC5kYXRhICUgY2hlY2sudmFsdWUgIT09IEJpZ0ludCgwKSkge1xuICAgICAgICAgICAgICAgICAgICBjdHggPSB0aGlzLl9nZXRPclJldHVybkN0eChpbnB1dCwgY3R4KTtcbiAgICAgICAgICAgICAgICAgICAgYWRkSXNzdWVUb0NvbnRleHQoY3R4LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb2RlOiBab2RJc3N1ZUNvZGUubm90X211bHRpcGxlX29mLFxuICAgICAgICAgICAgICAgICAgICAgICAgbXVsdGlwbGVPZjogY2hlY2sudmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBjaGVjay5tZXNzYWdlLFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgc3RhdHVzLmRpcnR5KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdXRpbC5hc3NlcnROZXZlcihjaGVjayk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHsgc3RhdHVzOiBzdGF0dXMudmFsdWUsIHZhbHVlOiBpbnB1dC5kYXRhIH07XG4gICAgfVxuICAgIF9nZXRJbnZhbGlkSW5wdXQoaW5wdXQpIHtcbiAgICAgICAgY29uc3QgY3R4ID0gdGhpcy5fZ2V0T3JSZXR1cm5DdHgoaW5wdXQpO1xuICAgICAgICBhZGRJc3N1ZVRvQ29udGV4dChjdHgsIHtcbiAgICAgICAgICAgIGNvZGU6IFpvZElzc3VlQ29kZS5pbnZhbGlkX3R5cGUsXG4gICAgICAgICAgICBleHBlY3RlZDogWm9kUGFyc2VkVHlwZS5iaWdpbnQsXG4gICAgICAgICAgICByZWNlaXZlZDogY3R4LnBhcnNlZFR5cGUsXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gSU5WQUxJRDtcbiAgICB9XG4gICAgZ3RlKHZhbHVlLCBtZXNzYWdlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnNldExpbWl0KFwibWluXCIsIHZhbHVlLCB0cnVlLCBlcnJvclV0aWwudG9TdHJpbmcobWVzc2FnZSkpO1xuICAgIH1cbiAgICBndCh2YWx1ZSwgbWVzc2FnZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5zZXRMaW1pdChcIm1pblwiLCB2YWx1ZSwgZmFsc2UsIGVycm9yVXRpbC50b1N0cmluZyhtZXNzYWdlKSk7XG4gICAgfVxuICAgIGx0ZSh2YWx1ZSwgbWVzc2FnZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5zZXRMaW1pdChcIm1heFwiLCB2YWx1ZSwgdHJ1ZSwgZXJyb3JVdGlsLnRvU3RyaW5nKG1lc3NhZ2UpKTtcbiAgICB9XG4gICAgbHQodmFsdWUsIG1lc3NhZ2UpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc2V0TGltaXQoXCJtYXhcIiwgdmFsdWUsIGZhbHNlLCBlcnJvclV0aWwudG9TdHJpbmcobWVzc2FnZSkpO1xuICAgIH1cbiAgICBzZXRMaW1pdChraW5kLCB2YWx1ZSwgaW5jbHVzaXZlLCBtZXNzYWdlKSB7XG4gICAgICAgIHJldHVybiBuZXcgWm9kQmlnSW50KHtcbiAgICAgICAgICAgIC4uLnRoaXMuX2RlZixcbiAgICAgICAgICAgIGNoZWNrczogW1xuICAgICAgICAgICAgICAgIC4uLnRoaXMuX2RlZi5jaGVja3MsXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBraW5kLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgaW5jbHVzaXZlLFxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBlcnJvclV0aWwudG9TdHJpbmcobWVzc2FnZSksXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIF0sXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBfYWRkQ2hlY2soY2hlY2spIHtcbiAgICAgICAgcmV0dXJuIG5ldyBab2RCaWdJbnQoe1xuICAgICAgICAgICAgLi4udGhpcy5fZGVmLFxuICAgICAgICAgICAgY2hlY2tzOiBbLi4udGhpcy5fZGVmLmNoZWNrcywgY2hlY2tdLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgcG9zaXRpdmUobWVzc2FnZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5fYWRkQ2hlY2soe1xuICAgICAgICAgICAga2luZDogXCJtaW5cIixcbiAgICAgICAgICAgIHZhbHVlOiBCaWdJbnQoMCksXG4gICAgICAgICAgICBpbmNsdXNpdmU6IGZhbHNlLFxuICAgICAgICAgICAgbWVzc2FnZTogZXJyb3JVdGlsLnRvU3RyaW5nKG1lc3NhZ2UpLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgbmVnYXRpdmUobWVzc2FnZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5fYWRkQ2hlY2soe1xuICAgICAgICAgICAga2luZDogXCJtYXhcIixcbiAgICAgICAgICAgIHZhbHVlOiBCaWdJbnQoMCksXG4gICAgICAgICAgICBpbmNsdXNpdmU6IGZhbHNlLFxuICAgICAgICAgICAgbWVzc2FnZTogZXJyb3JVdGlsLnRvU3RyaW5nKG1lc3NhZ2UpLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgbm9ucG9zaXRpdmUobWVzc2FnZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5fYWRkQ2hlY2soe1xuICAgICAgICAgICAga2luZDogXCJtYXhcIixcbiAgICAgICAgICAgIHZhbHVlOiBCaWdJbnQoMCksXG4gICAgICAgICAgICBpbmNsdXNpdmU6IHRydWUsXG4gICAgICAgICAgICBtZXNzYWdlOiBlcnJvclV0aWwudG9TdHJpbmcobWVzc2FnZSksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBub25uZWdhdGl2ZShtZXNzYWdlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9hZGRDaGVjayh7XG4gICAgICAgICAgICBraW5kOiBcIm1pblwiLFxuICAgICAgICAgICAgdmFsdWU6IEJpZ0ludCgwKSxcbiAgICAgICAgICAgIGluY2x1c2l2ZTogdHJ1ZSxcbiAgICAgICAgICAgIG1lc3NhZ2U6IGVycm9yVXRpbC50b1N0cmluZyhtZXNzYWdlKSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIG11bHRpcGxlT2YodmFsdWUsIG1lc3NhZ2UpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2FkZENoZWNrKHtcbiAgICAgICAgICAgIGtpbmQ6IFwibXVsdGlwbGVPZlwiLFxuICAgICAgICAgICAgdmFsdWUsXG4gICAgICAgICAgICBtZXNzYWdlOiBlcnJvclV0aWwudG9TdHJpbmcobWVzc2FnZSksXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBnZXQgbWluVmFsdWUoKSB7XG4gICAgICAgIGxldCBtaW4gPSBudWxsO1xuICAgICAgICBmb3IgKGNvbnN0IGNoIG9mIHRoaXMuX2RlZi5jaGVja3MpIHtcbiAgICAgICAgICAgIGlmIChjaC5raW5kID09PSBcIm1pblwiKSB7XG4gICAgICAgICAgICAgICAgaWYgKG1pbiA9PT0gbnVsbCB8fCBjaC52YWx1ZSA+IG1pbilcbiAgICAgICAgICAgICAgICAgICAgbWluID0gY2gudmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG1pbjtcbiAgICB9XG4gICAgZ2V0IG1heFZhbHVlKCkge1xuICAgICAgICBsZXQgbWF4ID0gbnVsbDtcbiAgICAgICAgZm9yIChjb25zdCBjaCBvZiB0aGlzLl9kZWYuY2hlY2tzKSB7XG4gICAgICAgICAgICBpZiAoY2gua2luZCA9PT0gXCJtYXhcIikge1xuICAgICAgICAgICAgICAgIGlmIChtYXggPT09IG51bGwgfHwgY2gudmFsdWUgPCBtYXgpXG4gICAgICAgICAgICAgICAgICAgIG1heCA9IGNoLnZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtYXg7XG4gICAgfVxufVxuWm9kQmlnSW50LmNyZWF0ZSA9IChwYXJhbXMpID0+IHtcbiAgICB2YXIgX2E7XG4gICAgcmV0dXJuIG5ldyBab2RCaWdJbnQoe1xuICAgICAgICBjaGVja3M6IFtdLFxuICAgICAgICB0eXBlTmFtZTogWm9kRmlyc3RQYXJ0eVR5cGVLaW5kLlpvZEJpZ0ludCxcbiAgICAgICAgY29lcmNlOiAoX2EgPSBwYXJhbXMgPT09IG51bGwgfHwgcGFyYW1zID09PSB2b2lkIDAgPyB2b2lkIDAgOiBwYXJhbXMuY29lcmNlKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBmYWxzZSxcbiAgICAgICAgLi4ucHJvY2Vzc0NyZWF0ZVBhcmFtcyhwYXJhbXMpLFxuICAgIH0pO1xufTtcbmNsYXNzIFpvZEJvb2xlYW4gZXh0ZW5kcyBab2RUeXBlIHtcbiAgICBfcGFyc2UoaW5wdXQpIHtcbiAgICAgICAgaWYgKHRoaXMuX2RlZi5jb2VyY2UpIHtcbiAgICAgICAgICAgIGlucHV0LmRhdGEgPSBCb29sZWFuKGlucHV0LmRhdGEpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHBhcnNlZFR5cGUgPSB0aGlzLl9nZXRUeXBlKGlucHV0KTtcbiAgICAgICAgaWYgKHBhcnNlZFR5cGUgIT09IFpvZFBhcnNlZFR5cGUuYm9vbGVhbikge1xuICAgICAgICAgICAgY29uc3QgY3R4ID0gdGhpcy5fZ2V0T3JSZXR1cm5DdHgoaW5wdXQpO1xuICAgICAgICAgICAgYWRkSXNzdWVUb0NvbnRleHQoY3R4LCB7XG4gICAgICAgICAgICAgICAgY29kZTogWm9kSXNzdWVDb2RlLmludmFsaWRfdHlwZSxcbiAgICAgICAgICAgICAgICBleHBlY3RlZDogWm9kUGFyc2VkVHlwZS5ib29sZWFuLFxuICAgICAgICAgICAgICAgIHJlY2VpdmVkOiBjdHgucGFyc2VkVHlwZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIElOVkFMSUQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIE9LKGlucHV0LmRhdGEpO1xuICAgIH1cbn1cblpvZEJvb2xlYW4uY3JlYXRlID0gKHBhcmFtcykgPT4ge1xuICAgIHJldHVybiBuZXcgWm9kQm9vbGVhbih7XG4gICAgICAgIHR5cGVOYW1lOiBab2RGaXJzdFBhcnR5VHlwZUtpbmQuWm9kQm9vbGVhbixcbiAgICAgICAgY29lcmNlOiAocGFyYW1zID09PSBudWxsIHx8IHBhcmFtcyA9PT0gdm9pZCAwID8gdm9pZCAwIDogcGFyYW1zLmNvZXJjZSkgfHwgZmFsc2UsXG4gICAgICAgIC4uLnByb2Nlc3NDcmVhdGVQYXJhbXMocGFyYW1zKSxcbiAgICB9KTtcbn07XG5jbGFzcyBab2REYXRlIGV4dGVuZHMgWm9kVHlwZSB7XG4gICAgX3BhcnNlKGlucHV0KSB7XG4gICAgICAgIGlmICh0aGlzLl9kZWYuY29lcmNlKSB7XG4gICAgICAgICAgICBpbnB1dC5kYXRhID0gbmV3IERhdGUoaW5wdXQuZGF0YSk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcGFyc2VkVHlwZSA9IHRoaXMuX2dldFR5cGUoaW5wdXQpO1xuICAgICAgICBpZiAocGFyc2VkVHlwZSAhPT0gWm9kUGFyc2VkVHlwZS5kYXRlKSB7XG4gICAgICAgICAgICBjb25zdCBjdHggPSB0aGlzLl9nZXRPclJldHVybkN0eChpbnB1dCk7XG4gICAgICAgICAgICBhZGRJc3N1ZVRvQ29udGV4dChjdHgsIHtcbiAgICAgICAgICAgICAgICBjb2RlOiBab2RJc3N1ZUNvZGUuaW52YWxpZF90eXBlLFxuICAgICAgICAgICAgICAgIGV4cGVjdGVkOiBab2RQYXJzZWRUeXBlLmRhdGUsXG4gICAgICAgICAgICAgICAgcmVjZWl2ZWQ6IGN0eC5wYXJzZWRUeXBlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gSU5WQUxJRDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNOYU4oaW5wdXQuZGF0YS5nZXRUaW1lKCkpKSB7XG4gICAgICAgICAgICBjb25zdCBjdHggPSB0aGlzLl9nZXRPclJldHVybkN0eChpbnB1dCk7XG4gICAgICAgICAgICBhZGRJc3N1ZVRvQ29udGV4dChjdHgsIHtcbiAgICAgICAgICAgICAgICBjb2RlOiBab2RJc3N1ZUNvZGUuaW52YWxpZF9kYXRlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gSU5WQUxJRDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzdGF0dXMgPSBuZXcgUGFyc2VTdGF0dXMoKTtcbiAgICAgICAgbGV0IGN0eCA9IHVuZGVmaW5lZDtcbiAgICAgICAgZm9yIChjb25zdCBjaGVjayBvZiB0aGlzLl9kZWYuY2hlY2tzKSB7XG4gICAgICAgICAgICBpZiAoY2hlY2sua2luZCA9PT0gXCJtaW5cIikge1xuICAgICAgICAgICAgICAgIGlmIChpbnB1dC5kYXRhLmdldFRpbWUoKSA8IGNoZWNrLnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIGN0eCA9IHRoaXMuX2dldE9yUmV0dXJuQ3R4KGlucHV0LCBjdHgpO1xuICAgICAgICAgICAgICAgICAgICBhZGRJc3N1ZVRvQ29udGV4dChjdHgsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvZGU6IFpvZElzc3VlQ29kZS50b29fc21hbGwsXG4gICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBjaGVjay5tZXNzYWdlLFxuICAgICAgICAgICAgICAgICAgICAgICAgaW5jbHVzaXZlOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgZXhhY3Q6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWluaW11bTogY2hlY2sudmFsdWUsXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBcImRhdGVcIixcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHN0YXR1cy5kaXJ0eSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGNoZWNrLmtpbmQgPT09IFwibWF4XCIpIHtcbiAgICAgICAgICAgICAgICBpZiAoaW5wdXQuZGF0YS5nZXRUaW1lKCkgPiBjaGVjay52YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICBjdHggPSB0aGlzLl9nZXRPclJldHVybkN0eChpbnB1dCwgY3R4KTtcbiAgICAgICAgICAgICAgICAgICAgYWRkSXNzdWVUb0NvbnRleHQoY3R4LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb2RlOiBab2RJc3N1ZUNvZGUudG9vX2JpZyxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGNoZWNrLm1lc3NhZ2UsXG4gICAgICAgICAgICAgICAgICAgICAgICBpbmNsdXNpdmU6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBleGFjdDogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXhpbXVtOiBjaGVjay52YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IFwiZGF0ZVwiLFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgc3RhdHVzLmRpcnR5KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdXRpbC5hc3NlcnROZXZlcihjaGVjayk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHN0YXR1czogc3RhdHVzLnZhbHVlLFxuICAgICAgICAgICAgdmFsdWU6IG5ldyBEYXRlKGlucHV0LmRhdGEuZ2V0VGltZSgpKSxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgX2FkZENoZWNrKGNoZWNrKSB7XG4gICAgICAgIHJldHVybiBuZXcgWm9kRGF0ZSh7XG4gICAgICAgICAgICAuLi50aGlzLl9kZWYsXG4gICAgICAgICAgICBjaGVja3M6IFsuLi50aGlzLl9kZWYuY2hlY2tzLCBjaGVja10sXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBtaW4obWluRGF0ZSwgbWVzc2FnZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5fYWRkQ2hlY2soe1xuICAgICAgICAgICAga2luZDogXCJtaW5cIixcbiAgICAgICAgICAgIHZhbHVlOiBtaW5EYXRlLmdldFRpbWUoKSxcbiAgICAgICAgICAgIG1lc3NhZ2U6IGVycm9yVXRpbC50b1N0cmluZyhtZXNzYWdlKSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIG1heChtYXhEYXRlLCBtZXNzYWdlKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9hZGRDaGVjayh7XG4gICAgICAgICAgICBraW5kOiBcIm1heFwiLFxuICAgICAgICAgICAgdmFsdWU6IG1heERhdGUuZ2V0VGltZSgpLFxuICAgICAgICAgICAgbWVzc2FnZTogZXJyb3JVdGlsLnRvU3RyaW5nKG1lc3NhZ2UpLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgZ2V0IG1pbkRhdGUoKSB7XG4gICAgICAgIGxldCBtaW4gPSBudWxsO1xuICAgICAgICBmb3IgKGNvbnN0IGNoIG9mIHRoaXMuX2RlZi5jaGVja3MpIHtcbiAgICAgICAgICAgIGlmIChjaC5raW5kID09PSBcIm1pblwiKSB7XG4gICAgICAgICAgICAgICAgaWYgKG1pbiA9PT0gbnVsbCB8fCBjaC52YWx1ZSA+IG1pbilcbiAgICAgICAgICAgICAgICAgICAgbWluID0gY2gudmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG1pbiAhPSBudWxsID8gbmV3IERhdGUobWluKSA6IG51bGw7XG4gICAgfVxuICAgIGdldCBtYXhEYXRlKCkge1xuICAgICAgICBsZXQgbWF4ID0gbnVsbDtcbiAgICAgICAgZm9yIChjb25zdCBjaCBvZiB0aGlzLl9kZWYuY2hlY2tzKSB7XG4gICAgICAgICAgICBpZiAoY2gua2luZCA9PT0gXCJtYXhcIikge1xuICAgICAgICAgICAgICAgIGlmIChtYXggPT09IG51bGwgfHwgY2gudmFsdWUgPCBtYXgpXG4gICAgICAgICAgICAgICAgICAgIG1heCA9IGNoLnZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBtYXggIT0gbnVsbCA/IG5ldyBEYXRlKG1heCkgOiBudWxsO1xuICAgIH1cbn1cblpvZERhdGUuY3JlYXRlID0gKHBhcmFtcykgPT4ge1xuICAgIHJldHVybiBuZXcgWm9kRGF0ZSh7XG4gICAgICAgIGNoZWNrczogW10sXG4gICAgICAgIGNvZXJjZTogKHBhcmFtcyA9PT0gbnVsbCB8fCBwYXJhbXMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHBhcmFtcy5jb2VyY2UpIHx8IGZhbHNlLFxuICAgICAgICB0eXBlTmFtZTogWm9kRmlyc3RQYXJ0eVR5cGVLaW5kLlpvZERhdGUsXG4gICAgICAgIC4uLnByb2Nlc3NDcmVhdGVQYXJhbXMocGFyYW1zKSxcbiAgICB9KTtcbn07XG5jbGFzcyBab2RTeW1ib2wgZXh0ZW5kcyBab2RUeXBlIHtcbiAgICBfcGFyc2UoaW5wdXQpIHtcbiAgICAgICAgY29uc3QgcGFyc2VkVHlwZSA9IHRoaXMuX2dldFR5cGUoaW5wdXQpO1xuICAgICAgICBpZiAocGFyc2VkVHlwZSAhPT0gWm9kUGFyc2VkVHlwZS5zeW1ib2wpIHtcbiAgICAgICAgICAgIGNvbnN0IGN0eCA9IHRoaXMuX2dldE9yUmV0dXJuQ3R4KGlucHV0KTtcbiAgICAgICAgICAgIGFkZElzc3VlVG9Db250ZXh0KGN0eCwge1xuICAgICAgICAgICAgICAgIGNvZGU6IFpvZElzc3VlQ29kZS5pbnZhbGlkX3R5cGUsXG4gICAgICAgICAgICAgICAgZXhwZWN0ZWQ6IFpvZFBhcnNlZFR5cGUuc3ltYm9sLFxuICAgICAgICAgICAgICAgIHJlY2VpdmVkOiBjdHgucGFyc2VkVHlwZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIElOVkFMSUQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIE9LKGlucHV0LmRhdGEpO1xuICAgIH1cbn1cblpvZFN5bWJvbC5jcmVhdGUgPSAocGFyYW1zKSA9PiB7XG4gICAgcmV0dXJuIG5ldyBab2RTeW1ib2woe1xuICAgICAgICB0eXBlTmFtZTogWm9kRmlyc3RQYXJ0eVR5cGVLaW5kLlpvZFN5bWJvbCxcbiAgICAgICAgLi4ucHJvY2Vzc0NyZWF0ZVBhcmFtcyhwYXJhbXMpLFxuICAgIH0pO1xufTtcbmNsYXNzIFpvZFVuZGVmaW5lZCBleHRlbmRzIFpvZFR5cGUge1xuICAgIF9wYXJzZShpbnB1dCkge1xuICAgICAgICBjb25zdCBwYXJzZWRUeXBlID0gdGhpcy5fZ2V0VHlwZShpbnB1dCk7XG4gICAgICAgIGlmIChwYXJzZWRUeXBlICE9PSBab2RQYXJzZWRUeXBlLnVuZGVmaW5lZCkge1xuICAgICAgICAgICAgY29uc3QgY3R4ID0gdGhpcy5fZ2V0T3JSZXR1cm5DdHgoaW5wdXQpO1xuICAgICAgICAgICAgYWRkSXNzdWVUb0NvbnRleHQoY3R4LCB7XG4gICAgICAgICAgICAgICAgY29kZTogWm9kSXNzdWVDb2RlLmludmFsaWRfdHlwZSxcbiAgICAgICAgICAgICAgICBleHBlY3RlZDogWm9kUGFyc2VkVHlwZS51bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgcmVjZWl2ZWQ6IGN0eC5wYXJzZWRUeXBlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gSU5WQUxJRDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gT0soaW5wdXQuZGF0YSk7XG4gICAgfVxufVxuWm9kVW5kZWZpbmVkLmNyZWF0ZSA9IChwYXJhbXMpID0+IHtcbiAgICByZXR1cm4gbmV3IFpvZFVuZGVmaW5lZCh7XG4gICAgICAgIHR5cGVOYW1lOiBab2RGaXJzdFBhcnR5VHlwZUtpbmQuWm9kVW5kZWZpbmVkLFxuICAgICAgICAuLi5wcm9jZXNzQ3JlYXRlUGFyYW1zKHBhcmFtcyksXG4gICAgfSk7XG59O1xuY2xhc3MgWm9kTnVsbCBleHRlbmRzIFpvZFR5cGUge1xuICAgIF9wYXJzZShpbnB1dCkge1xuICAgICAgICBjb25zdCBwYXJzZWRUeXBlID0gdGhpcy5fZ2V0VHlwZShpbnB1dCk7XG4gICAgICAgIGlmIChwYXJzZWRUeXBlICE9PSBab2RQYXJzZWRUeXBlLm51bGwpIHtcbiAgICAgICAgICAgIGNvbnN0IGN0eCA9IHRoaXMuX2dldE9yUmV0dXJuQ3R4KGlucHV0KTtcbiAgICAgICAgICAgIGFkZElzc3VlVG9Db250ZXh0KGN0eCwge1xuICAgICAgICAgICAgICAgIGNvZGU6IFpvZElzc3VlQ29kZS5pbnZhbGlkX3R5cGUsXG4gICAgICAgICAgICAgICAgZXhwZWN0ZWQ6IFpvZFBhcnNlZFR5cGUubnVsbCxcbiAgICAgICAgICAgICAgICByZWNlaXZlZDogY3R4LnBhcnNlZFR5cGUsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiBJTlZBTElEO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBPSyhpbnB1dC5kYXRhKTtcbiAgICB9XG59XG5ab2ROdWxsLmNyZWF0ZSA9IChwYXJhbXMpID0+IHtcbiAgICByZXR1cm4gbmV3IFpvZE51bGwoe1xuICAgICAgICB0eXBlTmFtZTogWm9kRmlyc3RQYXJ0eVR5cGVLaW5kLlpvZE51bGwsXG4gICAgICAgIC4uLnByb2Nlc3NDcmVhdGVQYXJhbXMocGFyYW1zKSxcbiAgICB9KTtcbn07XG5jbGFzcyBab2RBbnkgZXh0ZW5kcyBab2RUeXBlIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTtcbiAgICAgICAgLy8gdG8gcHJldmVudCBpbnN0YW5jZXMgb2Ygb3RoZXIgY2xhc3NlcyBmcm9tIGV4dGVuZGluZyBab2RBbnkuIHRoaXMgY2F1c2VzIGlzc3VlcyB3aXRoIGNhdGNoYWxsIGluIFpvZE9iamVjdC5cbiAgICAgICAgdGhpcy5fYW55ID0gdHJ1ZTtcbiAgICB9XG4gICAgX3BhcnNlKGlucHV0KSB7XG4gICAgICAgIHJldHVybiBPSyhpbnB1dC5kYXRhKTtcbiAgICB9XG59XG5ab2RBbnkuY3JlYXRlID0gKHBhcmFtcykgPT4ge1xuICAgIHJldHVybiBuZXcgWm9kQW55KHtcbiAgICAgICAgdHlwZU5hbWU6IFpvZEZpcnN0UGFydHlUeXBlS2luZC5ab2RBbnksXG4gICAgICAgIC4uLnByb2Nlc3NDcmVhdGVQYXJhbXMocGFyYW1zKSxcbiAgICB9KTtcbn07XG5jbGFzcyBab2RVbmtub3duIGV4dGVuZHMgWm9kVHlwZSB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XG4gICAgICAgIC8vIHJlcXVpcmVkXG4gICAgICAgIHRoaXMuX3Vua25vd24gPSB0cnVlO1xuICAgIH1cbiAgICBfcGFyc2UoaW5wdXQpIHtcbiAgICAgICAgcmV0dXJuIE9LKGlucHV0LmRhdGEpO1xuICAgIH1cbn1cblpvZFVua25vd24uY3JlYXRlID0gKHBhcmFtcykgPT4ge1xuICAgIHJldHVybiBuZXcgWm9kVW5rbm93bih7XG4gICAgICAgIHR5cGVOYW1lOiBab2RGaXJzdFBhcnR5VHlwZUtpbmQuWm9kVW5rbm93bixcbiAgICAgICAgLi4ucHJvY2Vzc0NyZWF0ZVBhcmFtcyhwYXJhbXMpLFxuICAgIH0pO1xufTtcbmNsYXNzIFpvZE5ldmVyIGV4dGVuZHMgWm9kVHlwZSB7XG4gICAgX3BhcnNlKGlucHV0KSB7XG4gICAgICAgIGNvbnN0IGN0eCA9IHRoaXMuX2dldE9yUmV0dXJuQ3R4KGlucHV0KTtcbiAgICAgICAgYWRkSXNzdWVUb0NvbnRleHQoY3R4LCB7XG4gICAgICAgICAgICBjb2RlOiBab2RJc3N1ZUNvZGUuaW52YWxpZF90eXBlLFxuICAgICAgICAgICAgZXhwZWN0ZWQ6IFpvZFBhcnNlZFR5cGUubmV2ZXIsXG4gICAgICAgICAgICByZWNlaXZlZDogY3R4LnBhcnNlZFR5cGUsXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gSU5WQUxJRDtcbiAgICB9XG59XG5ab2ROZXZlci5jcmVhdGUgPSAocGFyYW1zKSA9PiB7XG4gICAgcmV0dXJuIG5ldyBab2ROZXZlcih7XG4gICAgICAgIHR5cGVOYW1lOiBab2RGaXJzdFBhcnR5VHlwZUtpbmQuWm9kTmV2ZXIsXG4gICAgICAgIC4uLnByb2Nlc3NDcmVhdGVQYXJhbXMocGFyYW1zKSxcbiAgICB9KTtcbn07XG5jbGFzcyBab2RWb2lkIGV4dGVuZHMgWm9kVHlwZSB7XG4gICAgX3BhcnNlKGlucHV0KSB7XG4gICAgICAgIGNvbnN0IHBhcnNlZFR5cGUgPSB0aGlzLl9nZXRUeXBlKGlucHV0KTtcbiAgICAgICAgaWYgKHBhcnNlZFR5cGUgIT09IFpvZFBhcnNlZFR5cGUudW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBjb25zdCBjdHggPSB0aGlzLl9nZXRPclJldHVybkN0eChpbnB1dCk7XG4gICAgICAgICAgICBhZGRJc3N1ZVRvQ29udGV4dChjdHgsIHtcbiAgICAgICAgICAgICAgICBjb2RlOiBab2RJc3N1ZUNvZGUuaW52YWxpZF90eXBlLFxuICAgICAgICAgICAgICAgIGV4cGVjdGVkOiBab2RQYXJzZWRUeXBlLnZvaWQsXG4gICAgICAgICAgICAgICAgcmVjZWl2ZWQ6IGN0eC5wYXJzZWRUeXBlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gSU5WQUxJRDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gT0soaW5wdXQuZGF0YSk7XG4gICAgfVxufVxuWm9kVm9pZC5jcmVhdGUgPSAocGFyYW1zKSA9PiB7XG4gICAgcmV0dXJuIG5ldyBab2RWb2lkKHtcbiAgICAgICAgdHlwZU5hbWU6IFpvZEZpcnN0UGFydHlUeXBlS2luZC5ab2RWb2lkLFxuICAgICAgICAuLi5wcm9jZXNzQ3JlYXRlUGFyYW1zKHBhcmFtcyksXG4gICAgfSk7XG59O1xuY2xhc3MgWm9kQXJyYXkgZXh0ZW5kcyBab2RUeXBlIHtcbiAgICBfcGFyc2UoaW5wdXQpIHtcbiAgICAgICAgY29uc3QgeyBjdHgsIHN0YXR1cyB9ID0gdGhpcy5fcHJvY2Vzc0lucHV0UGFyYW1zKGlucHV0KTtcbiAgICAgICAgY29uc3QgZGVmID0gdGhpcy5fZGVmO1xuICAgICAgICBpZiAoY3R4LnBhcnNlZFR5cGUgIT09IFpvZFBhcnNlZFR5cGUuYXJyYXkpIHtcbiAgICAgICAgICAgIGFkZElzc3VlVG9Db250ZXh0KGN0eCwge1xuICAgICAgICAgICAgICAgIGNvZGU6IFpvZElzc3VlQ29kZS5pbnZhbGlkX3R5cGUsXG4gICAgICAgICAgICAgICAgZXhwZWN0ZWQ6IFpvZFBhcnNlZFR5cGUuYXJyYXksXG4gICAgICAgICAgICAgICAgcmVjZWl2ZWQ6IGN0eC5wYXJzZWRUeXBlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gSU5WQUxJRDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZGVmLmV4YWN0TGVuZ3RoICE9PSBudWxsKSB7XG4gICAgICAgICAgICBjb25zdCB0b29CaWcgPSBjdHguZGF0YS5sZW5ndGggPiBkZWYuZXhhY3RMZW5ndGgudmFsdWU7XG4gICAgICAgICAgICBjb25zdCB0b29TbWFsbCA9IGN0eC5kYXRhLmxlbmd0aCA8IGRlZi5leGFjdExlbmd0aC52YWx1ZTtcbiAgICAgICAgICAgIGlmICh0b29CaWcgfHwgdG9vU21hbGwpIHtcbiAgICAgICAgICAgICAgICBhZGRJc3N1ZVRvQ29udGV4dChjdHgsIHtcbiAgICAgICAgICAgICAgICAgICAgY29kZTogdG9vQmlnID8gWm9kSXNzdWVDb2RlLnRvb19iaWcgOiBab2RJc3N1ZUNvZGUudG9vX3NtYWxsLFxuICAgICAgICAgICAgICAgICAgICBtaW5pbXVtOiAodG9vU21hbGwgPyBkZWYuZXhhY3RMZW5ndGgudmFsdWUgOiB1bmRlZmluZWQpLFxuICAgICAgICAgICAgICAgICAgICBtYXhpbXVtOiAodG9vQmlnID8gZGVmLmV4YWN0TGVuZ3RoLnZhbHVlIDogdW5kZWZpbmVkKSxcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJhcnJheVwiLFxuICAgICAgICAgICAgICAgICAgICBpbmNsdXNpdmU6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIGV4YWN0OiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBkZWYuZXhhY3RMZW5ndGgubWVzc2FnZSxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBzdGF0dXMuZGlydHkoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoZGVmLm1pbkxlbmd0aCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgaWYgKGN0eC5kYXRhLmxlbmd0aCA8IGRlZi5taW5MZW5ndGgudmFsdWUpIHtcbiAgICAgICAgICAgICAgICBhZGRJc3N1ZVRvQ29udGV4dChjdHgsIHtcbiAgICAgICAgICAgICAgICAgICAgY29kZTogWm9kSXNzdWVDb2RlLnRvb19zbWFsbCxcbiAgICAgICAgICAgICAgICAgICAgbWluaW11bTogZGVmLm1pbkxlbmd0aC52YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJhcnJheVwiLFxuICAgICAgICAgICAgICAgICAgICBpbmNsdXNpdmU6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIGV4YWN0OiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogZGVmLm1pbkxlbmd0aC5tZXNzYWdlLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHN0YXR1cy5kaXJ0eSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChkZWYubWF4TGVuZ3RoICE9PSBudWxsKSB7XG4gICAgICAgICAgICBpZiAoY3R4LmRhdGEubGVuZ3RoID4gZGVmLm1heExlbmd0aC52YWx1ZSkge1xuICAgICAgICAgICAgICAgIGFkZElzc3VlVG9Db250ZXh0KGN0eCwge1xuICAgICAgICAgICAgICAgICAgICBjb2RlOiBab2RJc3N1ZUNvZGUudG9vX2JpZyxcbiAgICAgICAgICAgICAgICAgICAgbWF4aW11bTogZGVmLm1heExlbmd0aC52YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJhcnJheVwiLFxuICAgICAgICAgICAgICAgICAgICBpbmNsdXNpdmU6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIGV4YWN0OiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogZGVmLm1heExlbmd0aC5tZXNzYWdlLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHN0YXR1cy5kaXJ0eSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChjdHguY29tbW9uLmFzeW5jKSB7XG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5hbGwoWy4uLmN0eC5kYXRhXS5tYXAoKGl0ZW0sIGkpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZGVmLnR5cGUuX3BhcnNlQXN5bmMobmV3IFBhcnNlSW5wdXRMYXp5UGF0aChjdHgsIGl0ZW0sIGN0eC5wYXRoLCBpKSk7XG4gICAgICAgICAgICB9KSkudGhlbigocmVzdWx0KSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFBhcnNlU3RhdHVzLm1lcmdlQXJyYXkoc3RhdHVzLCByZXN1bHQpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcmVzdWx0ID0gWy4uLmN0eC5kYXRhXS5tYXAoKGl0ZW0sIGkpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBkZWYudHlwZS5fcGFyc2VTeW5jKG5ldyBQYXJzZUlucHV0TGF6eVBhdGgoY3R4LCBpdGVtLCBjdHgucGF0aCwgaSkpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIFBhcnNlU3RhdHVzLm1lcmdlQXJyYXkoc3RhdHVzLCByZXN1bHQpO1xuICAgIH1cbiAgICBnZXQgZWxlbWVudCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RlZi50eXBlO1xuICAgIH1cbiAgICBtaW4obWluTGVuZ3RoLCBtZXNzYWdlKSB7XG4gICAgICAgIHJldHVybiBuZXcgWm9kQXJyYXkoe1xuICAgICAgICAgICAgLi4udGhpcy5fZGVmLFxuICAgICAgICAgICAgbWluTGVuZ3RoOiB7IHZhbHVlOiBtaW5MZW5ndGgsIG1lc3NhZ2U6IGVycm9yVXRpbC50b1N0cmluZyhtZXNzYWdlKSB9LFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgbWF4KG1heExlbmd0aCwgbWVzc2FnZSkge1xuICAgICAgICByZXR1cm4gbmV3IFpvZEFycmF5KHtcbiAgICAgICAgICAgIC4uLnRoaXMuX2RlZixcbiAgICAgICAgICAgIG1heExlbmd0aDogeyB2YWx1ZTogbWF4TGVuZ3RoLCBtZXNzYWdlOiBlcnJvclV0aWwudG9TdHJpbmcobWVzc2FnZSkgfSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGxlbmd0aChsZW4sIG1lc3NhZ2UpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBab2RBcnJheSh7XG4gICAgICAgICAgICAuLi50aGlzLl9kZWYsXG4gICAgICAgICAgICBleGFjdExlbmd0aDogeyB2YWx1ZTogbGVuLCBtZXNzYWdlOiBlcnJvclV0aWwudG9TdHJpbmcobWVzc2FnZSkgfSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIG5vbmVtcHR5KG1lc3NhZ2UpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWluKDEsIG1lc3NhZ2UpO1xuICAgIH1cbn1cblpvZEFycmF5LmNyZWF0ZSA9IChzY2hlbWEsIHBhcmFtcykgPT4ge1xuICAgIHJldHVybiBuZXcgWm9kQXJyYXkoe1xuICAgICAgICB0eXBlOiBzY2hlbWEsXG4gICAgICAgIG1pbkxlbmd0aDogbnVsbCxcbiAgICAgICAgbWF4TGVuZ3RoOiBudWxsLFxuICAgICAgICBleGFjdExlbmd0aDogbnVsbCxcbiAgICAgICAgdHlwZU5hbWU6IFpvZEZpcnN0UGFydHlUeXBlS2luZC5ab2RBcnJheSxcbiAgICAgICAgLi4ucHJvY2Vzc0NyZWF0ZVBhcmFtcyhwYXJhbXMpLFxuICAgIH0pO1xufTtcbmZ1bmN0aW9uIGRlZXBQYXJ0aWFsaWZ5KHNjaGVtYSkge1xuICAgIGlmIChzY2hlbWEgaW5zdGFuY2VvZiBab2RPYmplY3QpIHtcbiAgICAgICAgY29uc3QgbmV3U2hhcGUgPSB7fTtcbiAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gc2NoZW1hLnNoYXBlKSB7XG4gICAgICAgICAgICBjb25zdCBmaWVsZFNjaGVtYSA9IHNjaGVtYS5zaGFwZVtrZXldO1xuICAgICAgICAgICAgbmV3U2hhcGVba2V5XSA9IFpvZE9wdGlvbmFsLmNyZWF0ZShkZWVwUGFydGlhbGlmeShmaWVsZFNjaGVtYSkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuZXcgWm9kT2JqZWN0KHtcbiAgICAgICAgICAgIC4uLnNjaGVtYS5fZGVmLFxuICAgICAgICAgICAgc2hhcGU6ICgpID0+IG5ld1NoYXBlLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgZWxzZSBpZiAoc2NoZW1hIGluc3RhbmNlb2YgWm9kQXJyYXkpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBab2RBcnJheSh7XG4gICAgICAgICAgICAuLi5zY2hlbWEuX2RlZixcbiAgICAgICAgICAgIHR5cGU6IGRlZXBQYXJ0aWFsaWZ5KHNjaGVtYS5lbGVtZW50KSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGVsc2UgaWYgKHNjaGVtYSBpbnN0YW5jZW9mIFpvZE9wdGlvbmFsKSB7XG4gICAgICAgIHJldHVybiBab2RPcHRpb25hbC5jcmVhdGUoZGVlcFBhcnRpYWxpZnkoc2NoZW1hLnVud3JhcCgpKSk7XG4gICAgfVxuICAgIGVsc2UgaWYgKHNjaGVtYSBpbnN0YW5jZW9mIFpvZE51bGxhYmxlKSB7XG4gICAgICAgIHJldHVybiBab2ROdWxsYWJsZS5jcmVhdGUoZGVlcFBhcnRpYWxpZnkoc2NoZW1hLnVud3JhcCgpKSk7XG4gICAgfVxuICAgIGVsc2UgaWYgKHNjaGVtYSBpbnN0YW5jZW9mIFpvZFR1cGxlKSB7XG4gICAgICAgIHJldHVybiBab2RUdXBsZS5jcmVhdGUoc2NoZW1hLml0ZW1zLm1hcCgoaXRlbSkgPT4gZGVlcFBhcnRpYWxpZnkoaXRlbSkpKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHJldHVybiBzY2hlbWE7XG4gICAgfVxufVxuY2xhc3MgWm9kT2JqZWN0IGV4dGVuZHMgWm9kVHlwZSB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XG4gICAgICAgIHRoaXMuX2NhY2hlZCA9IG51bGw7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBAZGVwcmVjYXRlZCBJbiBtb3N0IGNhc2VzLCB0aGlzIGlzIG5vIGxvbmdlciBuZWVkZWQgLSB1bmtub3duIHByb3BlcnRpZXMgYXJlIG5vdyBzaWxlbnRseSBzdHJpcHBlZC5cbiAgICAgICAgICogSWYgeW91IHdhbnQgdG8gcGFzcyB0aHJvdWdoIHVua25vd24gcHJvcGVydGllcywgdXNlIGAucGFzc3Rocm91Z2goKWAgaW5zdGVhZC5cbiAgICAgICAgICovXG4gICAgICAgIHRoaXMubm9uc3RyaWN0ID0gdGhpcy5wYXNzdGhyb3VnaDtcbiAgICAgICAgLy8gZXh0ZW5kPFxuICAgICAgICAvLyAgIEF1Z21lbnRhdGlvbiBleHRlbmRzIFpvZFJhd1NoYXBlLFxuICAgICAgICAvLyAgIE5ld091dHB1dCBleHRlbmRzIHV0aWwuZmxhdHRlbjx7XG4gICAgICAgIC8vICAgICBbayBpbiBrZXlvZiBBdWdtZW50YXRpb24gfCBrZXlvZiBPdXRwdXRdOiBrIGV4dGVuZHMga2V5b2YgQXVnbWVudGF0aW9uXG4gICAgICAgIC8vICAgICAgID8gQXVnbWVudGF0aW9uW2tdW1wiX291dHB1dFwiXVxuICAgICAgICAvLyAgICAgICA6IGsgZXh0ZW5kcyBrZXlvZiBPdXRwdXRcbiAgICAgICAgLy8gICAgICAgPyBPdXRwdXRba11cbiAgICAgICAgLy8gICAgICAgOiBuZXZlcjtcbiAgICAgICAgLy8gICB9PixcbiAgICAgICAgLy8gICBOZXdJbnB1dCBleHRlbmRzIHV0aWwuZmxhdHRlbjx7XG4gICAgICAgIC8vICAgICBbayBpbiBrZXlvZiBBdWdtZW50YXRpb24gfCBrZXlvZiBJbnB1dF06IGsgZXh0ZW5kcyBrZXlvZiBBdWdtZW50YXRpb25cbiAgICAgICAgLy8gICAgICAgPyBBdWdtZW50YXRpb25ba11bXCJfaW5wdXRcIl1cbiAgICAgICAgLy8gICAgICAgOiBrIGV4dGVuZHMga2V5b2YgSW5wdXRcbiAgICAgICAgLy8gICAgICAgPyBJbnB1dFtrXVxuICAgICAgICAvLyAgICAgICA6IG5ldmVyO1xuICAgICAgICAvLyAgIH0+XG4gICAgICAgIC8vID4oXG4gICAgICAgIC8vICAgYXVnbWVudGF0aW9uOiBBdWdtZW50YXRpb25cbiAgICAgICAgLy8gKTogWm9kT2JqZWN0PFxuICAgICAgICAvLyAgIGV4dGVuZFNoYXBlPFQsIEF1Z21lbnRhdGlvbj4sXG4gICAgICAgIC8vICAgVW5rbm93bktleXMsXG4gICAgICAgIC8vICAgQ2F0Y2hhbGwsXG4gICAgICAgIC8vICAgTmV3T3V0cHV0LFxuICAgICAgICAvLyAgIE5ld0lucHV0XG4gICAgICAgIC8vID4ge1xuICAgICAgICAvLyAgIHJldHVybiBuZXcgWm9kT2JqZWN0KHtcbiAgICAgICAgLy8gICAgIC4uLnRoaXMuX2RlZixcbiAgICAgICAgLy8gICAgIHNoYXBlOiAoKSA9PiAoe1xuICAgICAgICAvLyAgICAgICAuLi50aGlzLl9kZWYuc2hhcGUoKSxcbiAgICAgICAgLy8gICAgICAgLi4uYXVnbWVudGF0aW9uLFxuICAgICAgICAvLyAgICAgfSksXG4gICAgICAgIC8vICAgfSkgYXMgYW55O1xuICAgICAgICAvLyB9XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBAZGVwcmVjYXRlZCBVc2UgYC5leHRlbmRgIGluc3RlYWRcbiAgICAgICAgICogICovXG4gICAgICAgIHRoaXMuYXVnbWVudCA9IHRoaXMuZXh0ZW5kO1xuICAgIH1cbiAgICBfZ2V0Q2FjaGVkKCkge1xuICAgICAgICBpZiAodGhpcy5fY2FjaGVkICE9PSBudWxsKVxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2NhY2hlZDtcbiAgICAgICAgY29uc3Qgc2hhcGUgPSB0aGlzLl9kZWYuc2hhcGUoKTtcbiAgICAgICAgY29uc3Qga2V5cyA9IHV0aWwub2JqZWN0S2V5cyhzaGFwZSk7XG4gICAgICAgIHJldHVybiAodGhpcy5fY2FjaGVkID0geyBzaGFwZSwga2V5cyB9KTtcbiAgICB9XG4gICAgX3BhcnNlKGlucHV0KSB7XG4gICAgICAgIGNvbnN0IHBhcnNlZFR5cGUgPSB0aGlzLl9nZXRUeXBlKGlucHV0KTtcbiAgICAgICAgaWYgKHBhcnNlZFR5cGUgIT09IFpvZFBhcnNlZFR5cGUub2JqZWN0KSB7XG4gICAgICAgICAgICBjb25zdCBjdHggPSB0aGlzLl9nZXRPclJldHVybkN0eChpbnB1dCk7XG4gICAgICAgICAgICBhZGRJc3N1ZVRvQ29udGV4dChjdHgsIHtcbiAgICAgICAgICAgICAgICBjb2RlOiBab2RJc3N1ZUNvZGUuaW52YWxpZF90eXBlLFxuICAgICAgICAgICAgICAgIGV4cGVjdGVkOiBab2RQYXJzZWRUeXBlLm9iamVjdCxcbiAgICAgICAgICAgICAgICByZWNlaXZlZDogY3R4LnBhcnNlZFR5cGUsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiBJTlZBTElEO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHsgc3RhdHVzLCBjdHggfSA9IHRoaXMuX3Byb2Nlc3NJbnB1dFBhcmFtcyhpbnB1dCk7XG4gICAgICAgIGNvbnN0IHsgc2hhcGUsIGtleXM6IHNoYXBlS2V5cyB9ID0gdGhpcy5fZ2V0Q2FjaGVkKCk7XG4gICAgICAgIGNvbnN0IGV4dHJhS2V5cyA9IFtdO1xuICAgICAgICBpZiAoISh0aGlzLl9kZWYuY2F0Y2hhbGwgaW5zdGFuY2VvZiBab2ROZXZlciAmJlxuICAgICAgICAgICAgdGhpcy5fZGVmLnVua25vd25LZXlzID09PSBcInN0cmlwXCIpKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBjdHguZGF0YSkge1xuICAgICAgICAgICAgICAgIGlmICghc2hhcGVLZXlzLmluY2x1ZGVzKGtleSkpIHtcbiAgICAgICAgICAgICAgICAgICAgZXh0cmFLZXlzLnB1c2goa2V5KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcGFpcnMgPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCBrZXkgb2Ygc2hhcGVLZXlzKSB7XG4gICAgICAgICAgICBjb25zdCBrZXlWYWxpZGF0b3IgPSBzaGFwZVtrZXldO1xuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBjdHguZGF0YVtrZXldO1xuICAgICAgICAgICAgcGFpcnMucHVzaCh7XG4gICAgICAgICAgICAgICAga2V5OiB7IHN0YXR1czogXCJ2YWxpZFwiLCB2YWx1ZToga2V5IH0sXG4gICAgICAgICAgICAgICAgdmFsdWU6IGtleVZhbGlkYXRvci5fcGFyc2UobmV3IFBhcnNlSW5wdXRMYXp5UGF0aChjdHgsIHZhbHVlLCBjdHgucGF0aCwga2V5KSksXG4gICAgICAgICAgICAgICAgYWx3YXlzU2V0OiBrZXkgaW4gY3R4LmRhdGEsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5fZGVmLmNhdGNoYWxsIGluc3RhbmNlb2YgWm9kTmV2ZXIpIHtcbiAgICAgICAgICAgIGNvbnN0IHVua25vd25LZXlzID0gdGhpcy5fZGVmLnVua25vd25LZXlzO1xuICAgICAgICAgICAgaWYgKHVua25vd25LZXlzID09PSBcInBhc3N0aHJvdWdoXCIpIHtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGtleSBvZiBleHRyYUtleXMpIHtcbiAgICAgICAgICAgICAgICAgICAgcGFpcnMucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICBrZXk6IHsgc3RhdHVzOiBcInZhbGlkXCIsIHZhbHVlOiBrZXkgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiB7IHN0YXR1czogXCJ2YWxpZFwiLCB2YWx1ZTogY3R4LmRhdGFba2V5XSB9LFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICh1bmtub3duS2V5cyA9PT0gXCJzdHJpY3RcIikge1xuICAgICAgICAgICAgICAgIGlmIChleHRyYUtleXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICBhZGRJc3N1ZVRvQ29udGV4dChjdHgsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvZGU6IFpvZElzc3VlQ29kZS51bnJlY29nbml6ZWRfa2V5cyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGtleXM6IGV4dHJhS2V5cyxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHN0YXR1cy5kaXJ0eSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHVua25vd25LZXlzID09PSBcInN0cmlwXCIpIDtcbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgSW50ZXJuYWwgWm9kT2JqZWN0IGVycm9yOiBpbnZhbGlkIHVua25vd25LZXlzIHZhbHVlLmApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgLy8gcnVuIGNhdGNoYWxsIHZhbGlkYXRpb25cbiAgICAgICAgICAgIGNvbnN0IGNhdGNoYWxsID0gdGhpcy5fZGVmLmNhdGNoYWxsO1xuICAgICAgICAgICAgZm9yIChjb25zdCBrZXkgb2YgZXh0cmFLZXlzKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBjdHguZGF0YVtrZXldO1xuICAgICAgICAgICAgICAgIHBhaXJzLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICBrZXk6IHsgc3RhdHVzOiBcInZhbGlkXCIsIHZhbHVlOiBrZXkgfSxcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGNhdGNoYWxsLl9wYXJzZShuZXcgUGFyc2VJbnB1dExhenlQYXRoKGN0eCwgdmFsdWUsIGN0eC5wYXRoLCBrZXkpIC8vLCBjdHguY2hpbGQoa2V5KSwgdmFsdWUsIGdldFBhcnNlZFR5cGUodmFsdWUpXG4gICAgICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgICAgIGFsd2F5c1NldDoga2V5IGluIGN0eC5kYXRhLFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChjdHguY29tbW9uLmFzeW5jKSB7XG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKClcbiAgICAgICAgICAgICAgICAudGhlbihhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3Qgc3luY1BhaXJzID0gW107XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBwYWlyIG9mIHBhaXJzKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGtleSA9IGF3YWl0IHBhaXIua2V5O1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGF3YWl0IHBhaXIudmFsdWU7XG4gICAgICAgICAgICAgICAgICAgIHN5bmNQYWlycy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGtleSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgYWx3YXlzU2V0OiBwYWlyLmFsd2F5c1NldCxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBzeW5jUGFpcnM7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIC50aGVuKChzeW5jUGFpcnMpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gUGFyc2VTdGF0dXMubWVyZ2VPYmplY3RTeW5jKHN0YXR1cywgc3luY1BhaXJzKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIFBhcnNlU3RhdHVzLm1lcmdlT2JqZWN0U3luYyhzdGF0dXMsIHBhaXJzKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBnZXQgc2hhcGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kZWYuc2hhcGUoKTtcbiAgICB9XG4gICAgc3RyaWN0KG1lc3NhZ2UpIHtcbiAgICAgICAgZXJyb3JVdGlsLmVyclRvT2JqO1xuICAgICAgICByZXR1cm4gbmV3IFpvZE9iamVjdCh7XG4gICAgICAgICAgICAuLi50aGlzLl9kZWYsXG4gICAgICAgICAgICB1bmtub3duS2V5czogXCJzdHJpY3RcIixcbiAgICAgICAgICAgIC4uLihtZXNzYWdlICE9PSB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICAgICAgZXJyb3JNYXA6IChpc3N1ZSwgY3R4KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgX2EsIF9iLCBfYywgX2Q7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBkZWZhdWx0RXJyb3IgPSAoX2MgPSAoX2IgPSAoX2EgPSB0aGlzLl9kZWYpLmVycm9yTWFwKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuY2FsbChfYSwgaXNzdWUsIGN0eCkubWVzc2FnZSkgIT09IG51bGwgJiYgX2MgIT09IHZvaWQgMCA/IF9jIDogY3R4LmRlZmF1bHRFcnJvcjtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc3N1ZS5jb2RlID09PSBcInVucmVjb2duaXplZF9rZXlzXCIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTogKF9kID0gZXJyb3JVdGlsLmVyclRvT2JqKG1lc3NhZ2UpLm1lc3NhZ2UpICE9PSBudWxsICYmIF9kICE9PSB2b2lkIDAgPyBfZCA6IGRlZmF1bHRFcnJvcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOiBkZWZhdWx0RXJyb3IsXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICA6IHt9KSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHN0cmlwKCkge1xuICAgICAgICByZXR1cm4gbmV3IFpvZE9iamVjdCh7XG4gICAgICAgICAgICAuLi50aGlzLl9kZWYsXG4gICAgICAgICAgICB1bmtub3duS2V5czogXCJzdHJpcFwiLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgcGFzc3Rocm91Z2goKSB7XG4gICAgICAgIHJldHVybiBuZXcgWm9kT2JqZWN0KHtcbiAgICAgICAgICAgIC4uLnRoaXMuX2RlZixcbiAgICAgICAgICAgIHVua25vd25LZXlzOiBcInBhc3N0aHJvdWdoXCIsXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvLyBjb25zdCBBdWdtZW50RmFjdG9yeSA9XG4gICAgLy8gICA8RGVmIGV4dGVuZHMgWm9kT2JqZWN0RGVmPihkZWY6IERlZikgPT5cbiAgICAvLyAgIDxBdWdtZW50YXRpb24gZXh0ZW5kcyBab2RSYXdTaGFwZT4oXG4gICAgLy8gICAgIGF1Z21lbnRhdGlvbjogQXVnbWVudGF0aW9uXG4gICAgLy8gICApOiBab2RPYmplY3Q8XG4gICAgLy8gICAgIGV4dGVuZFNoYXBlPFJldHVyblR5cGU8RGVmW1wic2hhcGVcIl0+LCBBdWdtZW50YXRpb24+LFxuICAgIC8vICAgICBEZWZbXCJ1bmtub3duS2V5c1wiXSxcbiAgICAvLyAgICAgRGVmW1wiY2F0Y2hhbGxcIl1cbiAgICAvLyAgID4gPT4ge1xuICAgIC8vICAgICByZXR1cm4gbmV3IFpvZE9iamVjdCh7XG4gICAgLy8gICAgICAgLi4uZGVmLFxuICAgIC8vICAgICAgIHNoYXBlOiAoKSA9PiAoe1xuICAgIC8vICAgICAgICAgLi4uZGVmLnNoYXBlKCksXG4gICAgLy8gICAgICAgICAuLi5hdWdtZW50YXRpb24sXG4gICAgLy8gICAgICAgfSksXG4gICAgLy8gICAgIH0pIGFzIGFueTtcbiAgICAvLyAgIH07XG4gICAgZXh0ZW5kKGF1Z21lbnRhdGlvbikge1xuICAgICAgICByZXR1cm4gbmV3IFpvZE9iamVjdCh7XG4gICAgICAgICAgICAuLi50aGlzLl9kZWYsXG4gICAgICAgICAgICBzaGFwZTogKCkgPT4gKHtcbiAgICAgICAgICAgICAgICAuLi50aGlzLl9kZWYuc2hhcGUoKSxcbiAgICAgICAgICAgICAgICAuLi5hdWdtZW50YXRpb24sXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFByaW9yIHRvIHpvZEAxLjAuMTIgdGhlcmUgd2FzIGEgYnVnIGluIHRoZVxuICAgICAqIGluZmVycmVkIHR5cGUgb2YgbWVyZ2VkIG9iamVjdHMuIFBsZWFzZVxuICAgICAqIHVwZ3JhZGUgaWYgeW91IGFyZSBleHBlcmllbmNpbmcgaXNzdWVzLlxuICAgICAqL1xuICAgIG1lcmdlKG1lcmdpbmcpIHtcbiAgICAgICAgY29uc3QgbWVyZ2VkID0gbmV3IFpvZE9iamVjdCh7XG4gICAgICAgICAgICB1bmtub3duS2V5czogbWVyZ2luZy5fZGVmLnVua25vd25LZXlzLFxuICAgICAgICAgICAgY2F0Y2hhbGw6IG1lcmdpbmcuX2RlZi5jYXRjaGFsbCxcbiAgICAgICAgICAgIHNoYXBlOiAoKSA9PiAoe1xuICAgICAgICAgICAgICAgIC4uLnRoaXMuX2RlZi5zaGFwZSgpLFxuICAgICAgICAgICAgICAgIC4uLm1lcmdpbmcuX2RlZi5zaGFwZSgpLFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICB0eXBlTmFtZTogWm9kRmlyc3RQYXJ0eVR5cGVLaW5kLlpvZE9iamVjdCxcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBtZXJnZWQ7XG4gICAgfVxuICAgIC8vIG1lcmdlPFxuICAgIC8vICAgSW5jb21pbmcgZXh0ZW5kcyBBbnlab2RPYmplY3QsXG4gICAgLy8gICBBdWdtZW50YXRpb24gZXh0ZW5kcyBJbmNvbWluZ1tcInNoYXBlXCJdLFxuICAgIC8vICAgTmV3T3V0cHV0IGV4dGVuZHMge1xuICAgIC8vICAgICBbayBpbiBrZXlvZiBBdWdtZW50YXRpb24gfCBrZXlvZiBPdXRwdXRdOiBrIGV4dGVuZHMga2V5b2YgQXVnbWVudGF0aW9uXG4gICAgLy8gICAgICAgPyBBdWdtZW50YXRpb25ba11bXCJfb3V0cHV0XCJdXG4gICAgLy8gICAgICAgOiBrIGV4dGVuZHMga2V5b2YgT3V0cHV0XG4gICAgLy8gICAgICAgPyBPdXRwdXRba11cbiAgICAvLyAgICAgICA6IG5ldmVyO1xuICAgIC8vICAgfSxcbiAgICAvLyAgIE5ld0lucHV0IGV4dGVuZHMge1xuICAgIC8vICAgICBbayBpbiBrZXlvZiBBdWdtZW50YXRpb24gfCBrZXlvZiBJbnB1dF06IGsgZXh0ZW5kcyBrZXlvZiBBdWdtZW50YXRpb25cbiAgICAvLyAgICAgICA/IEF1Z21lbnRhdGlvbltrXVtcIl9pbnB1dFwiXVxuICAgIC8vICAgICAgIDogayBleHRlbmRzIGtleW9mIElucHV0XG4gICAgLy8gICAgICAgPyBJbnB1dFtrXVxuICAgIC8vICAgICAgIDogbmV2ZXI7XG4gICAgLy8gICB9XG4gICAgLy8gPihcbiAgICAvLyAgIG1lcmdpbmc6IEluY29taW5nXG4gICAgLy8gKTogWm9kT2JqZWN0PFxuICAgIC8vICAgZXh0ZW5kU2hhcGU8VCwgUmV0dXJuVHlwZTxJbmNvbWluZ1tcIl9kZWZcIl1bXCJzaGFwZVwiXT4+LFxuICAgIC8vICAgSW5jb21pbmdbXCJfZGVmXCJdW1widW5rbm93bktleXNcIl0sXG4gICAgLy8gICBJbmNvbWluZ1tcIl9kZWZcIl1bXCJjYXRjaGFsbFwiXSxcbiAgICAvLyAgIE5ld091dHB1dCxcbiAgICAvLyAgIE5ld0lucHV0XG4gICAgLy8gPiB7XG4gICAgLy8gICBjb25zdCBtZXJnZWQ6IGFueSA9IG5ldyBab2RPYmplY3Qoe1xuICAgIC8vICAgICB1bmtub3duS2V5czogbWVyZ2luZy5fZGVmLnVua25vd25LZXlzLFxuICAgIC8vICAgICBjYXRjaGFsbDogbWVyZ2luZy5fZGVmLmNhdGNoYWxsLFxuICAgIC8vICAgICBzaGFwZTogKCkgPT5cbiAgICAvLyAgICAgICBvYmplY3RVdGlsLm1lcmdlU2hhcGVzKHRoaXMuX2RlZi5zaGFwZSgpLCBtZXJnaW5nLl9kZWYuc2hhcGUoKSksXG4gICAgLy8gICAgIHR5cGVOYW1lOiBab2RGaXJzdFBhcnR5VHlwZUtpbmQuWm9kT2JqZWN0LFxuICAgIC8vICAgfSkgYXMgYW55O1xuICAgIC8vICAgcmV0dXJuIG1lcmdlZDtcbiAgICAvLyB9XG4gICAgc2V0S2V5KGtleSwgc2NoZW1hKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmF1Z21lbnQoeyBba2V5XTogc2NoZW1hIH0pO1xuICAgIH1cbiAgICAvLyBtZXJnZTxJbmNvbWluZyBleHRlbmRzIEFueVpvZE9iamVjdD4oXG4gICAgLy8gICBtZXJnaW5nOiBJbmNvbWluZ1xuICAgIC8vICk6IC8vWm9kT2JqZWN0PFQgJiBJbmNvbWluZ1tcIl9zaGFwZVwiXSwgVW5rbm93bktleXMsIENhdGNoYWxsPiA9IChtZXJnaW5nKSA9PiB7XG4gICAgLy8gWm9kT2JqZWN0PFxuICAgIC8vICAgZXh0ZW5kU2hhcGU8VCwgUmV0dXJuVHlwZTxJbmNvbWluZ1tcIl9kZWZcIl1bXCJzaGFwZVwiXT4+LFxuICAgIC8vICAgSW5jb21pbmdbXCJfZGVmXCJdW1widW5rbm93bktleXNcIl0sXG4gICAgLy8gICBJbmNvbWluZ1tcIl9kZWZcIl1bXCJjYXRjaGFsbFwiXVxuICAgIC8vID4ge1xuICAgIC8vICAgLy8gY29uc3QgbWVyZ2VkU2hhcGUgPSBvYmplY3RVdGlsLm1lcmdlU2hhcGVzKFxuICAgIC8vICAgLy8gICB0aGlzLl9kZWYuc2hhcGUoKSxcbiAgICAvLyAgIC8vICAgbWVyZ2luZy5fZGVmLnNoYXBlKClcbiAgICAvLyAgIC8vICk7XG4gICAgLy8gICBjb25zdCBtZXJnZWQ6IGFueSA9IG5ldyBab2RPYmplY3Qoe1xuICAgIC8vICAgICB1bmtub3duS2V5czogbWVyZ2luZy5fZGVmLnVua25vd25LZXlzLFxuICAgIC8vICAgICBjYXRjaGFsbDogbWVyZ2luZy5fZGVmLmNhdGNoYWxsLFxuICAgIC8vICAgICBzaGFwZTogKCkgPT5cbiAgICAvLyAgICAgICBvYmplY3RVdGlsLm1lcmdlU2hhcGVzKHRoaXMuX2RlZi5zaGFwZSgpLCBtZXJnaW5nLl9kZWYuc2hhcGUoKSksXG4gICAgLy8gICAgIHR5cGVOYW1lOiBab2RGaXJzdFBhcnR5VHlwZUtpbmQuWm9kT2JqZWN0LFxuICAgIC8vICAgfSkgYXMgYW55O1xuICAgIC8vICAgcmV0dXJuIG1lcmdlZDtcbiAgICAvLyB9XG4gICAgY2F0Y2hhbGwoaW5kZXgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBab2RPYmplY3Qoe1xuICAgICAgICAgICAgLi4udGhpcy5fZGVmLFxuICAgICAgICAgICAgY2F0Y2hhbGw6IGluZGV4LFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgcGljayhtYXNrKSB7XG4gICAgICAgIGNvbnN0IHNoYXBlID0ge307XG4gICAgICAgIHV0aWwub2JqZWN0S2V5cyhtYXNrKS5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgICAgICAgIGlmIChtYXNrW2tleV0gJiYgdGhpcy5zaGFwZVtrZXldKSB7XG4gICAgICAgICAgICAgICAgc2hhcGVba2V5XSA9IHRoaXMuc2hhcGVba2V5XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBuZXcgWm9kT2JqZWN0KHtcbiAgICAgICAgICAgIC4uLnRoaXMuX2RlZixcbiAgICAgICAgICAgIHNoYXBlOiAoKSA9PiBzaGFwZSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIG9taXQobWFzaykge1xuICAgICAgICBjb25zdCBzaGFwZSA9IHt9O1xuICAgICAgICB1dGlsLm9iamVjdEtleXModGhpcy5zaGFwZSkuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICAgICAgICBpZiAoIW1hc2tba2V5XSkge1xuICAgICAgICAgICAgICAgIHNoYXBlW2tleV0gPSB0aGlzLnNoYXBlW2tleV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gbmV3IFpvZE9iamVjdCh7XG4gICAgICAgICAgICAuLi50aGlzLl9kZWYsXG4gICAgICAgICAgICBzaGFwZTogKCkgPT4gc2hhcGUsXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAZGVwcmVjYXRlZFxuICAgICAqL1xuICAgIGRlZXBQYXJ0aWFsKCkge1xuICAgICAgICByZXR1cm4gZGVlcFBhcnRpYWxpZnkodGhpcyk7XG4gICAgfVxuICAgIHBhcnRpYWwobWFzaykge1xuICAgICAgICBjb25zdCBuZXdTaGFwZSA9IHt9O1xuICAgICAgICB1dGlsLm9iamVjdEtleXModGhpcy5zaGFwZSkuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBmaWVsZFNjaGVtYSA9IHRoaXMuc2hhcGVba2V5XTtcbiAgICAgICAgICAgIGlmIChtYXNrICYmICFtYXNrW2tleV0pIHtcbiAgICAgICAgICAgICAgICBuZXdTaGFwZVtrZXldID0gZmllbGRTY2hlbWE7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBuZXdTaGFwZVtrZXldID0gZmllbGRTY2hlbWEub3B0aW9uYWwoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBuZXcgWm9kT2JqZWN0KHtcbiAgICAgICAgICAgIC4uLnRoaXMuX2RlZixcbiAgICAgICAgICAgIHNoYXBlOiAoKSA9PiBuZXdTaGFwZSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHJlcXVpcmVkKG1hc2spIHtcbiAgICAgICAgY29uc3QgbmV3U2hhcGUgPSB7fTtcbiAgICAgICAgdXRpbC5vYmplY3RLZXlzKHRoaXMuc2hhcGUpLmZvckVhY2goKGtleSkgPT4ge1xuICAgICAgICAgICAgaWYgKG1hc2sgJiYgIW1hc2tba2V5XSkge1xuICAgICAgICAgICAgICAgIG5ld1NoYXBlW2tleV0gPSB0aGlzLnNoYXBlW2tleV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zdCBmaWVsZFNjaGVtYSA9IHRoaXMuc2hhcGVba2V5XTtcbiAgICAgICAgICAgICAgICBsZXQgbmV3RmllbGQgPSBmaWVsZFNjaGVtYTtcbiAgICAgICAgICAgICAgICB3aGlsZSAobmV3RmllbGQgaW5zdGFuY2VvZiBab2RPcHRpb25hbCkge1xuICAgICAgICAgICAgICAgICAgICBuZXdGaWVsZCA9IG5ld0ZpZWxkLl9kZWYuaW5uZXJUeXBlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBuZXdTaGFwZVtrZXldID0gbmV3RmllbGQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gbmV3IFpvZE9iamVjdCh7XG4gICAgICAgICAgICAuLi50aGlzLl9kZWYsXG4gICAgICAgICAgICBzaGFwZTogKCkgPT4gbmV3U2hhcGUsXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBrZXlvZigpIHtcbiAgICAgICAgcmV0dXJuIGNyZWF0ZVpvZEVudW0odXRpbC5vYmplY3RLZXlzKHRoaXMuc2hhcGUpKTtcbiAgICB9XG59XG5ab2RPYmplY3QuY3JlYXRlID0gKHNoYXBlLCBwYXJhbXMpID0+IHtcbiAgICByZXR1cm4gbmV3IFpvZE9iamVjdCh7XG4gICAgICAgIHNoYXBlOiAoKSA9PiBzaGFwZSxcbiAgICAgICAgdW5rbm93bktleXM6IFwic3RyaXBcIixcbiAgICAgICAgY2F0Y2hhbGw6IFpvZE5ldmVyLmNyZWF0ZSgpLFxuICAgICAgICB0eXBlTmFtZTogWm9kRmlyc3RQYXJ0eVR5cGVLaW5kLlpvZE9iamVjdCxcbiAgICAgICAgLi4ucHJvY2Vzc0NyZWF0ZVBhcmFtcyhwYXJhbXMpLFxuICAgIH0pO1xufTtcblpvZE9iamVjdC5zdHJpY3RDcmVhdGUgPSAoc2hhcGUsIHBhcmFtcykgPT4ge1xuICAgIHJldHVybiBuZXcgWm9kT2JqZWN0KHtcbiAgICAgICAgc2hhcGU6ICgpID0+IHNoYXBlLFxuICAgICAgICB1bmtub3duS2V5czogXCJzdHJpY3RcIixcbiAgICAgICAgY2F0Y2hhbGw6IFpvZE5ldmVyLmNyZWF0ZSgpLFxuICAgICAgICB0eXBlTmFtZTogWm9kRmlyc3RQYXJ0eVR5cGVLaW5kLlpvZE9iamVjdCxcbiAgICAgICAgLi4ucHJvY2Vzc0NyZWF0ZVBhcmFtcyhwYXJhbXMpLFxuICAgIH0pO1xufTtcblpvZE9iamVjdC5sYXp5Y3JlYXRlID0gKHNoYXBlLCBwYXJhbXMpID0+IHtcbiAgICByZXR1cm4gbmV3IFpvZE9iamVjdCh7XG4gICAgICAgIHNoYXBlLFxuICAgICAgICB1bmtub3duS2V5czogXCJzdHJpcFwiLFxuICAgICAgICBjYXRjaGFsbDogWm9kTmV2ZXIuY3JlYXRlKCksXG4gICAgICAgIHR5cGVOYW1lOiBab2RGaXJzdFBhcnR5VHlwZUtpbmQuWm9kT2JqZWN0LFxuICAgICAgICAuLi5wcm9jZXNzQ3JlYXRlUGFyYW1zKHBhcmFtcyksXG4gICAgfSk7XG59O1xuY2xhc3MgWm9kVW5pb24gZXh0ZW5kcyBab2RUeXBlIHtcbiAgICBfcGFyc2UoaW5wdXQpIHtcbiAgICAgICAgY29uc3QgeyBjdHggfSA9IHRoaXMuX3Byb2Nlc3NJbnB1dFBhcmFtcyhpbnB1dCk7XG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSB0aGlzLl9kZWYub3B0aW9ucztcbiAgICAgICAgZnVuY3Rpb24gaGFuZGxlUmVzdWx0cyhyZXN1bHRzKSB7XG4gICAgICAgICAgICAvLyByZXR1cm4gZmlyc3QgaXNzdWUtZnJlZSB2YWxpZGF0aW9uIGlmIGl0IGV4aXN0c1xuICAgICAgICAgICAgZm9yIChjb25zdCByZXN1bHQgb2YgcmVzdWx0cykge1xuICAgICAgICAgICAgICAgIGlmIChyZXN1bHQucmVzdWx0LnN0YXR1cyA9PT0gXCJ2YWxpZFwiKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQucmVzdWx0O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZvciAoY29uc3QgcmVzdWx0IG9mIHJlc3VsdHMpIHtcbiAgICAgICAgICAgICAgICBpZiAocmVzdWx0LnJlc3VsdC5zdGF0dXMgPT09IFwiZGlydHlcIikge1xuICAgICAgICAgICAgICAgICAgICAvLyBhZGQgaXNzdWVzIGZyb20gZGlydHkgb3B0aW9uXG4gICAgICAgICAgICAgICAgICAgIGN0eC5jb21tb24uaXNzdWVzLnB1c2goLi4ucmVzdWx0LmN0eC5jb21tb24uaXNzdWVzKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdC5yZXN1bHQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gcmV0dXJuIGludmFsaWRcbiAgICAgICAgICAgIGNvbnN0IHVuaW9uRXJyb3JzID0gcmVzdWx0cy5tYXAoKHJlc3VsdCkgPT4gbmV3IFpvZEVycm9yKHJlc3VsdC5jdHguY29tbW9uLmlzc3VlcykpO1xuICAgICAgICAgICAgYWRkSXNzdWVUb0NvbnRleHQoY3R4LCB7XG4gICAgICAgICAgICAgICAgY29kZTogWm9kSXNzdWVDb2RlLmludmFsaWRfdW5pb24sXG4gICAgICAgICAgICAgICAgdW5pb25FcnJvcnMsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiBJTlZBTElEO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjdHguY29tbW9uLmFzeW5jKSB7XG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5hbGwob3B0aW9ucy5tYXAoYXN5bmMgKG9wdGlvbikgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNoaWxkQ3R4ID0ge1xuICAgICAgICAgICAgICAgICAgICAuLi5jdHgsXG4gICAgICAgICAgICAgICAgICAgIGNvbW1vbjoge1xuICAgICAgICAgICAgICAgICAgICAgICAgLi4uY3R4LmNvbW1vbixcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzc3VlczogW10sXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHBhcmVudDogbnVsbCxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdDogYXdhaXQgb3B0aW9uLl9wYXJzZUFzeW5jKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6IGN0eC5kYXRhLFxuICAgICAgICAgICAgICAgICAgICAgICAgcGF0aDogY3R4LnBhdGgsXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnQ6IGNoaWxkQ3R4LFxuICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgY3R4OiBjaGlsZEN0eCxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfSkpLnRoZW4oaGFuZGxlUmVzdWx0cyk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBsZXQgZGlydHkgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICBjb25zdCBpc3N1ZXMgPSBbXTtcbiAgICAgICAgICAgIGZvciAoY29uc3Qgb3B0aW9uIG9mIG9wdGlvbnMpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBjaGlsZEN0eCA9IHtcbiAgICAgICAgICAgICAgICAgICAgLi4uY3R4LFxuICAgICAgICAgICAgICAgICAgICBjb21tb246IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC4uLmN0eC5jb21tb24sXG4gICAgICAgICAgICAgICAgICAgICAgICBpc3N1ZXM6IFtdLFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICBwYXJlbnQ6IG51bGwsXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSBvcHRpb24uX3BhcnNlU3luYyh7XG4gICAgICAgICAgICAgICAgICAgIGRhdGE6IGN0eC5kYXRhLFxuICAgICAgICAgICAgICAgICAgICBwYXRoOiBjdHgucGF0aCxcbiAgICAgICAgICAgICAgICAgICAgcGFyZW50OiBjaGlsZEN0eCxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBpZiAocmVzdWx0LnN0YXR1cyA9PT0gXCJ2YWxpZFwiKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHJlc3VsdC5zdGF0dXMgPT09IFwiZGlydHlcIiAmJiAhZGlydHkpIHtcbiAgICAgICAgICAgICAgICAgICAgZGlydHkgPSB7IHJlc3VsdCwgY3R4OiBjaGlsZEN0eCB9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoY2hpbGRDdHguY29tbW9uLmlzc3Vlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgaXNzdWVzLnB1c2goY2hpbGRDdHguY29tbW9uLmlzc3Vlcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGRpcnR5KSB7XG4gICAgICAgICAgICAgICAgY3R4LmNvbW1vbi5pc3N1ZXMucHVzaCguLi5kaXJ0eS5jdHguY29tbW9uLmlzc3Vlcyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGRpcnR5LnJlc3VsdDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHVuaW9uRXJyb3JzID0gaXNzdWVzLm1hcCgoaXNzdWVzKSA9PiBuZXcgWm9kRXJyb3IoaXNzdWVzKSk7XG4gICAgICAgICAgICBhZGRJc3N1ZVRvQ29udGV4dChjdHgsIHtcbiAgICAgICAgICAgICAgICBjb2RlOiBab2RJc3N1ZUNvZGUuaW52YWxpZF91bmlvbixcbiAgICAgICAgICAgICAgICB1bmlvbkVycm9ycyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIElOVkFMSUQ7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZ2V0IG9wdGlvbnMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kZWYub3B0aW9ucztcbiAgICB9XG59XG5ab2RVbmlvbi5jcmVhdGUgPSAodHlwZXMsIHBhcmFtcykgPT4ge1xuICAgIHJldHVybiBuZXcgWm9kVW5pb24oe1xuICAgICAgICBvcHRpb25zOiB0eXBlcyxcbiAgICAgICAgdHlwZU5hbWU6IFpvZEZpcnN0UGFydHlUeXBlS2luZC5ab2RVbmlvbixcbiAgICAgICAgLi4ucHJvY2Vzc0NyZWF0ZVBhcmFtcyhwYXJhbXMpLFxuICAgIH0pO1xufTtcbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xuLy8vLy8vLy8vLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy8vLy8vLy9cbi8vLy8vLy8vLy8gICAgICBab2REaXNjcmltaW5hdGVkVW5pb24gICAgICAvLy8vLy8vLy8vXG4vLy8vLy8vLy8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8vLy8vLy8vL1xuLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy9cbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5jb25zdCBnZXREaXNjcmltaW5hdG9yID0gKHR5cGUpID0+IHtcbiAgICBpZiAodHlwZSBpbnN0YW5jZW9mIFpvZExhenkpIHtcbiAgICAgICAgcmV0dXJuIGdldERpc2NyaW1pbmF0b3IodHlwZS5zY2hlbWEpO1xuICAgIH1cbiAgICBlbHNlIGlmICh0eXBlIGluc3RhbmNlb2YgWm9kRWZmZWN0cykge1xuICAgICAgICByZXR1cm4gZ2V0RGlzY3JpbWluYXRvcih0eXBlLmlubmVyVHlwZSgpKTtcbiAgICB9XG4gICAgZWxzZSBpZiAodHlwZSBpbnN0YW5jZW9mIFpvZExpdGVyYWwpIHtcbiAgICAgICAgcmV0dXJuIFt0eXBlLnZhbHVlXTtcbiAgICB9XG4gICAgZWxzZSBpZiAodHlwZSBpbnN0YW5jZW9mIFpvZEVudW0pIHtcbiAgICAgICAgcmV0dXJuIHR5cGUub3B0aW9ucztcbiAgICB9XG4gICAgZWxzZSBpZiAodHlwZSBpbnN0YW5jZW9mIFpvZE5hdGl2ZUVudW0pIHtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGJhbi9iYW5cbiAgICAgICAgcmV0dXJuIHV0aWwub2JqZWN0VmFsdWVzKHR5cGUuZW51bSk7XG4gICAgfVxuICAgIGVsc2UgaWYgKHR5cGUgaW5zdGFuY2VvZiBab2REZWZhdWx0KSB7XG4gICAgICAgIHJldHVybiBnZXREaXNjcmltaW5hdG9yKHR5cGUuX2RlZi5pbm5lclR5cGUpO1xuICAgIH1cbiAgICBlbHNlIGlmICh0eXBlIGluc3RhbmNlb2YgWm9kVW5kZWZpbmVkKSB7XG4gICAgICAgIHJldHVybiBbdW5kZWZpbmVkXTtcbiAgICB9XG4gICAgZWxzZSBpZiAodHlwZSBpbnN0YW5jZW9mIFpvZE51bGwpIHtcbiAgICAgICAgcmV0dXJuIFtudWxsXTtcbiAgICB9XG4gICAgZWxzZSBpZiAodHlwZSBpbnN0YW5jZW9mIFpvZE9wdGlvbmFsKSB7XG4gICAgICAgIHJldHVybiBbdW5kZWZpbmVkLCAuLi5nZXREaXNjcmltaW5hdG9yKHR5cGUudW53cmFwKCkpXTtcbiAgICB9XG4gICAgZWxzZSBpZiAodHlwZSBpbnN0YW5jZW9mIFpvZE51bGxhYmxlKSB7XG4gICAgICAgIHJldHVybiBbbnVsbCwgLi4uZ2V0RGlzY3JpbWluYXRvcih0eXBlLnVud3JhcCgpKV07XG4gICAgfVxuICAgIGVsc2UgaWYgKHR5cGUgaW5zdGFuY2VvZiBab2RCcmFuZGVkKSB7XG4gICAgICAgIHJldHVybiBnZXREaXNjcmltaW5hdG9yKHR5cGUudW53cmFwKCkpO1xuICAgIH1cbiAgICBlbHNlIGlmICh0eXBlIGluc3RhbmNlb2YgWm9kUmVhZG9ubHkpIHtcbiAgICAgICAgcmV0dXJuIGdldERpc2NyaW1pbmF0b3IodHlwZS51bndyYXAoKSk7XG4gICAgfVxuICAgIGVsc2UgaWYgKHR5cGUgaW5zdGFuY2VvZiBab2RDYXRjaCkge1xuICAgICAgICByZXR1cm4gZ2V0RGlzY3JpbWluYXRvcih0eXBlLl9kZWYuaW5uZXJUeXBlKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHJldHVybiBbXTtcbiAgICB9XG59O1xuY2xhc3MgWm9kRGlzY3JpbWluYXRlZFVuaW9uIGV4dGVuZHMgWm9kVHlwZSB7XG4gICAgX3BhcnNlKGlucHV0KSB7XG4gICAgICAgIGNvbnN0IHsgY3R4IH0gPSB0aGlzLl9wcm9jZXNzSW5wdXRQYXJhbXMoaW5wdXQpO1xuICAgICAgICBpZiAoY3R4LnBhcnNlZFR5cGUgIT09IFpvZFBhcnNlZFR5cGUub2JqZWN0KSB7XG4gICAgICAgICAgICBhZGRJc3N1ZVRvQ29udGV4dChjdHgsIHtcbiAgICAgICAgICAgICAgICBjb2RlOiBab2RJc3N1ZUNvZGUuaW52YWxpZF90eXBlLFxuICAgICAgICAgICAgICAgIGV4cGVjdGVkOiBab2RQYXJzZWRUeXBlLm9iamVjdCxcbiAgICAgICAgICAgICAgICByZWNlaXZlZDogY3R4LnBhcnNlZFR5cGUsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiBJTlZBTElEO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGRpc2NyaW1pbmF0b3IgPSB0aGlzLmRpc2NyaW1pbmF0b3I7XG4gICAgICAgIGNvbnN0IGRpc2NyaW1pbmF0b3JWYWx1ZSA9IGN0eC5kYXRhW2Rpc2NyaW1pbmF0b3JdO1xuICAgICAgICBjb25zdCBvcHRpb24gPSB0aGlzLm9wdGlvbnNNYXAuZ2V0KGRpc2NyaW1pbmF0b3JWYWx1ZSk7XG4gICAgICAgIGlmICghb3B0aW9uKSB7XG4gICAgICAgICAgICBhZGRJc3N1ZVRvQ29udGV4dChjdHgsIHtcbiAgICAgICAgICAgICAgICBjb2RlOiBab2RJc3N1ZUNvZGUuaW52YWxpZF91bmlvbl9kaXNjcmltaW5hdG9yLFxuICAgICAgICAgICAgICAgIG9wdGlvbnM6IEFycmF5LmZyb20odGhpcy5vcHRpb25zTWFwLmtleXMoKSksXG4gICAgICAgICAgICAgICAgcGF0aDogW2Rpc2NyaW1pbmF0b3JdLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gSU5WQUxJRDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY3R4LmNvbW1vbi5hc3luYykge1xuICAgICAgICAgICAgcmV0dXJuIG9wdGlvbi5fcGFyc2VBc3luYyh7XG4gICAgICAgICAgICAgICAgZGF0YTogY3R4LmRhdGEsXG4gICAgICAgICAgICAgICAgcGF0aDogY3R4LnBhdGgsXG4gICAgICAgICAgICAgICAgcGFyZW50OiBjdHgsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBvcHRpb24uX3BhcnNlU3luYyh7XG4gICAgICAgICAgICAgICAgZGF0YTogY3R4LmRhdGEsXG4gICAgICAgICAgICAgICAgcGF0aDogY3R4LnBhdGgsXG4gICAgICAgICAgICAgICAgcGFyZW50OiBjdHgsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBnZXQgZGlzY3JpbWluYXRvcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RlZi5kaXNjcmltaW5hdG9yO1xuICAgIH1cbiAgICBnZXQgb3B0aW9ucygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RlZi5vcHRpb25zO1xuICAgIH1cbiAgICBnZXQgb3B0aW9uc01hcCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RlZi5vcHRpb25zTWFwO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBUaGUgY29uc3RydWN0b3Igb2YgdGhlIGRpc2NyaW1pbmF0ZWQgdW5pb24gc2NoZW1hLiBJdHMgYmVoYXZpb3VyIGlzIHZlcnkgc2ltaWxhciB0byB0aGF0IG9mIHRoZSBub3JtYWwgei51bmlvbigpIGNvbnN0cnVjdG9yLlxuICAgICAqIEhvd2V2ZXIsIGl0IG9ubHkgYWxsb3dzIGEgdW5pb24gb2Ygb2JqZWN0cywgYWxsIG9mIHdoaWNoIG5lZWQgdG8gc2hhcmUgYSBkaXNjcmltaW5hdG9yIHByb3BlcnR5LiBUaGlzIHByb3BlcnR5IG11c3RcbiAgICAgKiBoYXZlIGEgZGlmZmVyZW50IHZhbHVlIGZvciBlYWNoIG9iamVjdCBpbiB0aGUgdW5pb24uXG4gICAgICogQHBhcmFtIGRpc2NyaW1pbmF0b3IgdGhlIG5hbWUgb2YgdGhlIGRpc2NyaW1pbmF0b3IgcHJvcGVydHlcbiAgICAgKiBAcGFyYW0gdHlwZXMgYW4gYXJyYXkgb2Ygb2JqZWN0IHNjaGVtYXNcbiAgICAgKiBAcGFyYW0gcGFyYW1zXG4gICAgICovXG4gICAgc3RhdGljIGNyZWF0ZShkaXNjcmltaW5hdG9yLCBvcHRpb25zLCBwYXJhbXMpIHtcbiAgICAgICAgLy8gR2V0IGFsbCB0aGUgdmFsaWQgZGlzY3JpbWluYXRvciB2YWx1ZXNcbiAgICAgICAgY29uc3Qgb3B0aW9uc01hcCA9IG5ldyBNYXAoKTtcbiAgICAgICAgLy8gdHJ5IHtcbiAgICAgICAgZm9yIChjb25zdCB0eXBlIG9mIG9wdGlvbnMpIHtcbiAgICAgICAgICAgIGNvbnN0IGRpc2NyaW1pbmF0b3JWYWx1ZXMgPSBnZXREaXNjcmltaW5hdG9yKHR5cGUuc2hhcGVbZGlzY3JpbWluYXRvcl0pO1xuICAgICAgICAgICAgaWYgKCFkaXNjcmltaW5hdG9yVmFsdWVzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgQSBkaXNjcmltaW5hdG9yIHZhbHVlIGZvciBrZXkgXFxgJHtkaXNjcmltaW5hdG9yfVxcYCBjb3VsZCBub3QgYmUgZXh0cmFjdGVkIGZyb20gYWxsIHNjaGVtYSBvcHRpb25zYCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHZhbHVlIG9mIGRpc2NyaW1pbmF0b3JWYWx1ZXMpIHtcbiAgICAgICAgICAgICAgICBpZiAob3B0aW9uc01hcC5oYXModmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgRGlzY3JpbWluYXRvciBwcm9wZXJ0eSAke1N0cmluZyhkaXNjcmltaW5hdG9yKX0gaGFzIGR1cGxpY2F0ZSB2YWx1ZSAke1N0cmluZyh2YWx1ZSl9YCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIG9wdGlvbnNNYXAuc2V0KHZhbHVlLCB0eXBlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbmV3IFpvZERpc2NyaW1pbmF0ZWRVbmlvbih7XG4gICAgICAgICAgICB0eXBlTmFtZTogWm9kRmlyc3RQYXJ0eVR5cGVLaW5kLlpvZERpc2NyaW1pbmF0ZWRVbmlvbixcbiAgICAgICAgICAgIGRpc2NyaW1pbmF0b3IsXG4gICAgICAgICAgICBvcHRpb25zLFxuICAgICAgICAgICAgb3B0aW9uc01hcCxcbiAgICAgICAgICAgIC4uLnByb2Nlc3NDcmVhdGVQYXJhbXMocGFyYW1zKSxcbiAgICAgICAgfSk7XG4gICAgfVxufVxuZnVuY3Rpb24gbWVyZ2VWYWx1ZXMoYSwgYikge1xuICAgIGNvbnN0IGFUeXBlID0gZ2V0UGFyc2VkVHlwZShhKTtcbiAgICBjb25zdCBiVHlwZSA9IGdldFBhcnNlZFR5cGUoYik7XG4gICAgaWYgKGEgPT09IGIpIHtcbiAgICAgICAgcmV0dXJuIHsgdmFsaWQ6IHRydWUsIGRhdGE6IGEgfTtcbiAgICB9XG4gICAgZWxzZSBpZiAoYVR5cGUgPT09IFpvZFBhcnNlZFR5cGUub2JqZWN0ICYmIGJUeXBlID09PSBab2RQYXJzZWRUeXBlLm9iamVjdCkge1xuICAgICAgICBjb25zdCBiS2V5cyA9IHV0aWwub2JqZWN0S2V5cyhiKTtcbiAgICAgICAgY29uc3Qgc2hhcmVkS2V5cyA9IHV0aWxcbiAgICAgICAgICAgIC5vYmplY3RLZXlzKGEpXG4gICAgICAgICAgICAuZmlsdGVyKChrZXkpID0+IGJLZXlzLmluZGV4T2Yoa2V5KSAhPT0gLTEpO1xuICAgICAgICBjb25zdCBuZXdPYmogPSB7IC4uLmEsIC4uLmIgfTtcbiAgICAgICAgZm9yIChjb25zdCBrZXkgb2Ygc2hhcmVkS2V5cykge1xuICAgICAgICAgICAgY29uc3Qgc2hhcmVkVmFsdWUgPSBtZXJnZVZhbHVlcyhhW2tleV0sIGJba2V5XSk7XG4gICAgICAgICAgICBpZiAoIXNoYXJlZFZhbHVlLnZhbGlkKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHsgdmFsaWQ6IGZhbHNlIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBuZXdPYmpba2V5XSA9IHNoYXJlZFZhbHVlLmRhdGE7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHsgdmFsaWQ6IHRydWUsIGRhdGE6IG5ld09iaiB9O1xuICAgIH1cbiAgICBlbHNlIGlmIChhVHlwZSA9PT0gWm9kUGFyc2VkVHlwZS5hcnJheSAmJiBiVHlwZSA9PT0gWm9kUGFyc2VkVHlwZS5hcnJheSkge1xuICAgICAgICBpZiAoYS5sZW5ndGggIT09IGIubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4geyB2YWxpZDogZmFsc2UgfTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBuZXdBcnJheSA9IFtdO1xuICAgICAgICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgYS5sZW5ndGg7IGluZGV4KyspIHtcbiAgICAgICAgICAgIGNvbnN0IGl0ZW1BID0gYVtpbmRleF07XG4gICAgICAgICAgICBjb25zdCBpdGVtQiA9IGJbaW5kZXhdO1xuICAgICAgICAgICAgY29uc3Qgc2hhcmVkVmFsdWUgPSBtZXJnZVZhbHVlcyhpdGVtQSwgaXRlbUIpO1xuICAgICAgICAgICAgaWYgKCFzaGFyZWRWYWx1ZS52YWxpZCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB7IHZhbGlkOiBmYWxzZSB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbmV3QXJyYXkucHVzaChzaGFyZWRWYWx1ZS5kYXRhKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geyB2YWxpZDogdHJ1ZSwgZGF0YTogbmV3QXJyYXkgfTtcbiAgICB9XG4gICAgZWxzZSBpZiAoYVR5cGUgPT09IFpvZFBhcnNlZFR5cGUuZGF0ZSAmJlxuICAgICAgICBiVHlwZSA9PT0gWm9kUGFyc2VkVHlwZS5kYXRlICYmXG4gICAgICAgICthID09PSArYikge1xuICAgICAgICByZXR1cm4geyB2YWxpZDogdHJ1ZSwgZGF0YTogYSB9O1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgcmV0dXJuIHsgdmFsaWQ6IGZhbHNlIH07XG4gICAgfVxufVxuY2xhc3MgWm9kSW50ZXJzZWN0aW9uIGV4dGVuZHMgWm9kVHlwZSB7XG4gICAgX3BhcnNlKGlucHV0KSB7XG4gICAgICAgIGNvbnN0IHsgc3RhdHVzLCBjdHggfSA9IHRoaXMuX3Byb2Nlc3NJbnB1dFBhcmFtcyhpbnB1dCk7XG4gICAgICAgIGNvbnN0IGhhbmRsZVBhcnNlZCA9IChwYXJzZWRMZWZ0LCBwYXJzZWRSaWdodCkgPT4ge1xuICAgICAgICAgICAgaWYgKGlzQWJvcnRlZChwYXJzZWRMZWZ0KSB8fCBpc0Fib3J0ZWQocGFyc2VkUmlnaHQpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIElOVkFMSUQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBtZXJnZWQgPSBtZXJnZVZhbHVlcyhwYXJzZWRMZWZ0LnZhbHVlLCBwYXJzZWRSaWdodC52YWx1ZSk7XG4gICAgICAgICAgICBpZiAoIW1lcmdlZC52YWxpZCkge1xuICAgICAgICAgICAgICAgIGFkZElzc3VlVG9Db250ZXh0KGN0eCwge1xuICAgICAgICAgICAgICAgICAgICBjb2RlOiBab2RJc3N1ZUNvZGUuaW52YWxpZF9pbnRlcnNlY3Rpb25fdHlwZXMsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIElOVkFMSUQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaXNEaXJ0eShwYXJzZWRMZWZ0KSB8fCBpc0RpcnR5KHBhcnNlZFJpZ2h0KSkge1xuICAgICAgICAgICAgICAgIHN0YXR1cy5kaXJ0eSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHsgc3RhdHVzOiBzdGF0dXMudmFsdWUsIHZhbHVlOiBtZXJnZWQuZGF0YSB9O1xuICAgICAgICB9O1xuICAgICAgICBpZiAoY3R4LmNvbW1vbi5hc3luYykge1xuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UuYWxsKFtcbiAgICAgICAgICAgICAgICB0aGlzLl9kZWYubGVmdC5fcGFyc2VBc3luYyh7XG4gICAgICAgICAgICAgICAgICAgIGRhdGE6IGN0eC5kYXRhLFxuICAgICAgICAgICAgICAgICAgICBwYXRoOiBjdHgucGF0aCxcbiAgICAgICAgICAgICAgICAgICAgcGFyZW50OiBjdHgsXG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgdGhpcy5fZGVmLnJpZ2h0Ll9wYXJzZUFzeW5jKHtcbiAgICAgICAgICAgICAgICAgICAgZGF0YTogY3R4LmRhdGEsXG4gICAgICAgICAgICAgICAgICAgIHBhdGg6IGN0eC5wYXRoLFxuICAgICAgICAgICAgICAgICAgICBwYXJlbnQ6IGN0eCxcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIF0pLnRoZW4oKFtsZWZ0LCByaWdodF0pID0+IGhhbmRsZVBhcnNlZChsZWZ0LCByaWdodCkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGhhbmRsZVBhcnNlZCh0aGlzLl9kZWYubGVmdC5fcGFyc2VTeW5jKHtcbiAgICAgICAgICAgICAgICBkYXRhOiBjdHguZGF0YSxcbiAgICAgICAgICAgICAgICBwYXRoOiBjdHgucGF0aCxcbiAgICAgICAgICAgICAgICBwYXJlbnQ6IGN0eCxcbiAgICAgICAgICAgIH0pLCB0aGlzLl9kZWYucmlnaHQuX3BhcnNlU3luYyh7XG4gICAgICAgICAgICAgICAgZGF0YTogY3R4LmRhdGEsXG4gICAgICAgICAgICAgICAgcGF0aDogY3R4LnBhdGgsXG4gICAgICAgICAgICAgICAgcGFyZW50OiBjdHgsXG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH1cbiAgICB9XG59XG5ab2RJbnRlcnNlY3Rpb24uY3JlYXRlID0gKGxlZnQsIHJpZ2h0LCBwYXJhbXMpID0+IHtcbiAgICByZXR1cm4gbmV3IFpvZEludGVyc2VjdGlvbih7XG4gICAgICAgIGxlZnQ6IGxlZnQsXG4gICAgICAgIHJpZ2h0OiByaWdodCxcbiAgICAgICAgdHlwZU5hbWU6IFpvZEZpcnN0UGFydHlUeXBlS2luZC5ab2RJbnRlcnNlY3Rpb24sXG4gICAgICAgIC4uLnByb2Nlc3NDcmVhdGVQYXJhbXMocGFyYW1zKSxcbiAgICB9KTtcbn07XG5jbGFzcyBab2RUdXBsZSBleHRlbmRzIFpvZFR5cGUge1xuICAgIF9wYXJzZShpbnB1dCkge1xuICAgICAgICBjb25zdCB7IHN0YXR1cywgY3R4IH0gPSB0aGlzLl9wcm9jZXNzSW5wdXRQYXJhbXMoaW5wdXQpO1xuICAgICAgICBpZiAoY3R4LnBhcnNlZFR5cGUgIT09IFpvZFBhcnNlZFR5cGUuYXJyYXkpIHtcbiAgICAgICAgICAgIGFkZElzc3VlVG9Db250ZXh0KGN0eCwge1xuICAgICAgICAgICAgICAgIGNvZGU6IFpvZElzc3VlQ29kZS5pbnZhbGlkX3R5cGUsXG4gICAgICAgICAgICAgICAgZXhwZWN0ZWQ6IFpvZFBhcnNlZFR5cGUuYXJyYXksXG4gICAgICAgICAgICAgICAgcmVjZWl2ZWQ6IGN0eC5wYXJzZWRUeXBlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gSU5WQUxJRDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY3R4LmRhdGEubGVuZ3RoIDwgdGhpcy5fZGVmLml0ZW1zLmxlbmd0aCkge1xuICAgICAgICAgICAgYWRkSXNzdWVUb0NvbnRleHQoY3R4LCB7XG4gICAgICAgICAgICAgICAgY29kZTogWm9kSXNzdWVDb2RlLnRvb19zbWFsbCxcbiAgICAgICAgICAgICAgICBtaW5pbXVtOiB0aGlzLl9kZWYuaXRlbXMubGVuZ3RoLFxuICAgICAgICAgICAgICAgIGluY2x1c2l2ZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICBleGFjdDogZmFsc2UsXG4gICAgICAgICAgICAgICAgdHlwZTogXCJhcnJheVwiLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gSU5WQUxJRDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCByZXN0ID0gdGhpcy5fZGVmLnJlc3Q7XG4gICAgICAgIGlmICghcmVzdCAmJiBjdHguZGF0YS5sZW5ndGggPiB0aGlzLl9kZWYuaXRlbXMubGVuZ3RoKSB7XG4gICAgICAgICAgICBhZGRJc3N1ZVRvQ29udGV4dChjdHgsIHtcbiAgICAgICAgICAgICAgICBjb2RlOiBab2RJc3N1ZUNvZGUudG9vX2JpZyxcbiAgICAgICAgICAgICAgICBtYXhpbXVtOiB0aGlzLl9kZWYuaXRlbXMubGVuZ3RoLFxuICAgICAgICAgICAgICAgIGluY2x1c2l2ZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICBleGFjdDogZmFsc2UsXG4gICAgICAgICAgICAgICAgdHlwZTogXCJhcnJheVwiLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBzdGF0dXMuZGlydHkoKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBpdGVtcyA9IFsuLi5jdHguZGF0YV1cbiAgICAgICAgICAgIC5tYXAoKGl0ZW0sIGl0ZW1JbmRleCkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgc2NoZW1hID0gdGhpcy5fZGVmLml0ZW1zW2l0ZW1JbmRleF0gfHwgdGhpcy5fZGVmLnJlc3Q7XG4gICAgICAgICAgICBpZiAoIXNjaGVtYSlcbiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgIHJldHVybiBzY2hlbWEuX3BhcnNlKG5ldyBQYXJzZUlucHV0TGF6eVBhdGgoY3R4LCBpdGVtLCBjdHgucGF0aCwgaXRlbUluZGV4KSk7XG4gICAgICAgIH0pXG4gICAgICAgICAgICAuZmlsdGVyKCh4KSA9PiAhIXgpOyAvLyBmaWx0ZXIgbnVsbHNcbiAgICAgICAgaWYgKGN0eC5jb21tb24uYXN5bmMpIHtcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLmFsbChpdGVtcykudGhlbigocmVzdWx0cykgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiBQYXJzZVN0YXR1cy5tZXJnZUFycmF5KHN0YXR1cywgcmVzdWx0cyk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBQYXJzZVN0YXR1cy5tZXJnZUFycmF5KHN0YXR1cywgaXRlbXMpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGdldCBpdGVtcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RlZi5pdGVtcztcbiAgICB9XG4gICAgcmVzdChyZXN0KSB7XG4gICAgICAgIHJldHVybiBuZXcgWm9kVHVwbGUoe1xuICAgICAgICAgICAgLi4udGhpcy5fZGVmLFxuICAgICAgICAgICAgcmVzdCxcbiAgICAgICAgfSk7XG4gICAgfVxufVxuWm9kVHVwbGUuY3JlYXRlID0gKHNjaGVtYXMsIHBhcmFtcykgPT4ge1xuICAgIGlmICghQXJyYXkuaXNBcnJheShzY2hlbWFzKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJZb3UgbXVzdCBwYXNzIGFuIGFycmF5IG9mIHNjaGVtYXMgdG8gei50dXBsZShbIC4uLiBdKVwiKTtcbiAgICB9XG4gICAgcmV0dXJuIG5ldyBab2RUdXBsZSh7XG4gICAgICAgIGl0ZW1zOiBzY2hlbWFzLFxuICAgICAgICB0eXBlTmFtZTogWm9kRmlyc3RQYXJ0eVR5cGVLaW5kLlpvZFR1cGxlLFxuICAgICAgICByZXN0OiBudWxsLFxuICAgICAgICAuLi5wcm9jZXNzQ3JlYXRlUGFyYW1zKHBhcmFtcyksXG4gICAgfSk7XG59O1xuY2xhc3MgWm9kUmVjb3JkIGV4dGVuZHMgWm9kVHlwZSB7XG4gICAgZ2V0IGtleVNjaGVtYSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RlZi5rZXlUeXBlO1xuICAgIH1cbiAgICBnZXQgdmFsdWVTY2hlbWEoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kZWYudmFsdWVUeXBlO1xuICAgIH1cbiAgICBfcGFyc2UoaW5wdXQpIHtcbiAgICAgICAgY29uc3QgeyBzdGF0dXMsIGN0eCB9ID0gdGhpcy5fcHJvY2Vzc0lucHV0UGFyYW1zKGlucHV0KTtcbiAgICAgICAgaWYgKGN0eC5wYXJzZWRUeXBlICE9PSBab2RQYXJzZWRUeXBlLm9iamVjdCkge1xuICAgICAgICAgICAgYWRkSXNzdWVUb0NvbnRleHQoY3R4LCB7XG4gICAgICAgICAgICAgICAgY29kZTogWm9kSXNzdWVDb2RlLmludmFsaWRfdHlwZSxcbiAgICAgICAgICAgICAgICBleHBlY3RlZDogWm9kUGFyc2VkVHlwZS5vYmplY3QsXG4gICAgICAgICAgICAgICAgcmVjZWl2ZWQ6IGN0eC5wYXJzZWRUeXBlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gSU5WQUxJRDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBwYWlycyA9IFtdO1xuICAgICAgICBjb25zdCBrZXlUeXBlID0gdGhpcy5fZGVmLmtleVR5cGU7XG4gICAgICAgIGNvbnN0IHZhbHVlVHlwZSA9IHRoaXMuX2RlZi52YWx1ZVR5cGU7XG4gICAgICAgIGZvciAoY29uc3Qga2V5IGluIGN0eC5kYXRhKSB7XG4gICAgICAgICAgICBwYWlycy5wdXNoKHtcbiAgICAgICAgICAgICAgICBrZXk6IGtleVR5cGUuX3BhcnNlKG5ldyBQYXJzZUlucHV0TGF6eVBhdGgoY3R4LCBrZXksIGN0eC5wYXRoLCBrZXkpKSxcbiAgICAgICAgICAgICAgICB2YWx1ZTogdmFsdWVUeXBlLl9wYXJzZShuZXcgUGFyc2VJbnB1dExhenlQYXRoKGN0eCwgY3R4LmRhdGFba2V5XSwgY3R4LnBhdGgsIGtleSkpLFxuICAgICAgICAgICAgICAgIGFsd2F5c1NldDoga2V5IGluIGN0eC5kYXRhLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGN0eC5jb21tb24uYXN5bmMpIHtcbiAgICAgICAgICAgIHJldHVybiBQYXJzZVN0YXR1cy5tZXJnZU9iamVjdEFzeW5jKHN0YXR1cywgcGFpcnMpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIFBhcnNlU3RhdHVzLm1lcmdlT2JqZWN0U3luYyhzdGF0dXMsIHBhaXJzKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBnZXQgZWxlbWVudCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RlZi52YWx1ZVR5cGU7XG4gICAgfVxuICAgIHN0YXRpYyBjcmVhdGUoZmlyc3QsIHNlY29uZCwgdGhpcmQpIHtcbiAgICAgICAgaWYgKHNlY29uZCBpbnN0YW5jZW9mIFpvZFR5cGUpIHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgWm9kUmVjb3JkKHtcbiAgICAgICAgICAgICAgICBrZXlUeXBlOiBmaXJzdCxcbiAgICAgICAgICAgICAgICB2YWx1ZVR5cGU6IHNlY29uZCxcbiAgICAgICAgICAgICAgICB0eXBlTmFtZTogWm9kRmlyc3RQYXJ0eVR5cGVLaW5kLlpvZFJlY29yZCxcbiAgICAgICAgICAgICAgICAuLi5wcm9jZXNzQ3JlYXRlUGFyYW1zKHRoaXJkKSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuZXcgWm9kUmVjb3JkKHtcbiAgICAgICAgICAgIGtleVR5cGU6IFpvZFN0cmluZy5jcmVhdGUoKSxcbiAgICAgICAgICAgIHZhbHVlVHlwZTogZmlyc3QsXG4gICAgICAgICAgICB0eXBlTmFtZTogWm9kRmlyc3RQYXJ0eVR5cGVLaW5kLlpvZFJlY29yZCxcbiAgICAgICAgICAgIC4uLnByb2Nlc3NDcmVhdGVQYXJhbXMoc2Vjb25kKSxcbiAgICAgICAgfSk7XG4gICAgfVxufVxuY2xhc3MgWm9kTWFwIGV4dGVuZHMgWm9kVHlwZSB7XG4gICAgZ2V0IGtleVNjaGVtYSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RlZi5rZXlUeXBlO1xuICAgIH1cbiAgICBnZXQgdmFsdWVTY2hlbWEoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kZWYudmFsdWVUeXBlO1xuICAgIH1cbiAgICBfcGFyc2UoaW5wdXQpIHtcbiAgICAgICAgY29uc3QgeyBzdGF0dXMsIGN0eCB9ID0gdGhpcy5fcHJvY2Vzc0lucHV0UGFyYW1zKGlucHV0KTtcbiAgICAgICAgaWYgKGN0eC5wYXJzZWRUeXBlICE9PSBab2RQYXJzZWRUeXBlLm1hcCkge1xuICAgICAgICAgICAgYWRkSXNzdWVUb0NvbnRleHQoY3R4LCB7XG4gICAgICAgICAgICAgICAgY29kZTogWm9kSXNzdWVDb2RlLmludmFsaWRfdHlwZSxcbiAgICAgICAgICAgICAgICBleHBlY3RlZDogWm9kUGFyc2VkVHlwZS5tYXAsXG4gICAgICAgICAgICAgICAgcmVjZWl2ZWQ6IGN0eC5wYXJzZWRUeXBlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gSU5WQUxJRDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBrZXlUeXBlID0gdGhpcy5fZGVmLmtleVR5cGU7XG4gICAgICAgIGNvbnN0IHZhbHVlVHlwZSA9IHRoaXMuX2RlZi52YWx1ZVR5cGU7XG4gICAgICAgIGNvbnN0IHBhaXJzID0gWy4uLmN0eC5kYXRhLmVudHJpZXMoKV0ubWFwKChba2V5LCB2YWx1ZV0sIGluZGV4KSA9PiB7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIGtleToga2V5VHlwZS5fcGFyc2UobmV3IFBhcnNlSW5wdXRMYXp5UGF0aChjdHgsIGtleSwgY3R4LnBhdGgsIFtpbmRleCwgXCJrZXlcIl0pKSxcbiAgICAgICAgICAgICAgICB2YWx1ZTogdmFsdWVUeXBlLl9wYXJzZShuZXcgUGFyc2VJbnB1dExhenlQYXRoKGN0eCwgdmFsdWUsIGN0eC5wYXRoLCBbaW5kZXgsIFwidmFsdWVcIl0pKSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0pO1xuICAgICAgICBpZiAoY3R4LmNvbW1vbi5hc3luYykge1xuICAgICAgICAgICAgY29uc3QgZmluYWxNYXAgPSBuZXcgTWFwKCk7XG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCkudGhlbihhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCBwYWlyIG9mIHBhaXJzKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGtleSA9IGF3YWl0IHBhaXIua2V5O1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGF3YWl0IHBhaXIudmFsdWU7XG4gICAgICAgICAgICAgICAgICAgIGlmIChrZXkuc3RhdHVzID09PSBcImFib3J0ZWRcIiB8fCB2YWx1ZS5zdGF0dXMgPT09IFwiYWJvcnRlZFwiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gSU5WQUxJRDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoa2V5LnN0YXR1cyA9PT0gXCJkaXJ0eVwiIHx8IHZhbHVlLnN0YXR1cyA9PT0gXCJkaXJ0eVwiKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXMuZGlydHkoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBmaW5hbE1hcC5zZXQoa2V5LnZhbHVlLCB2YWx1ZS52YWx1ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiB7IHN0YXR1czogc3RhdHVzLnZhbHVlLCB2YWx1ZTogZmluYWxNYXAgfTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgZmluYWxNYXAgPSBuZXcgTWFwKCk7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHBhaXIgb2YgcGFpcnMpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBrZXkgPSBwYWlyLmtleTtcbiAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IHBhaXIudmFsdWU7XG4gICAgICAgICAgICAgICAgaWYgKGtleS5zdGF0dXMgPT09IFwiYWJvcnRlZFwiIHx8IHZhbHVlLnN0YXR1cyA9PT0gXCJhYm9ydGVkXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIElOVkFMSUQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChrZXkuc3RhdHVzID09PSBcImRpcnR5XCIgfHwgdmFsdWUuc3RhdHVzID09PSBcImRpcnR5XCIpIHtcbiAgICAgICAgICAgICAgICAgICAgc3RhdHVzLmRpcnR5KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGZpbmFsTWFwLnNldChrZXkudmFsdWUsIHZhbHVlLnZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB7IHN0YXR1czogc3RhdHVzLnZhbHVlLCB2YWx1ZTogZmluYWxNYXAgfTtcbiAgICAgICAgfVxuICAgIH1cbn1cblpvZE1hcC5jcmVhdGUgPSAoa2V5VHlwZSwgdmFsdWVUeXBlLCBwYXJhbXMpID0+IHtcbiAgICByZXR1cm4gbmV3IFpvZE1hcCh7XG4gICAgICAgIHZhbHVlVHlwZSxcbiAgICAgICAga2V5VHlwZSxcbiAgICAgICAgdHlwZU5hbWU6IFpvZEZpcnN0UGFydHlUeXBlS2luZC5ab2RNYXAsXG4gICAgICAgIC4uLnByb2Nlc3NDcmVhdGVQYXJhbXMocGFyYW1zKSxcbiAgICB9KTtcbn07XG5jbGFzcyBab2RTZXQgZXh0ZW5kcyBab2RUeXBlIHtcbiAgICBfcGFyc2UoaW5wdXQpIHtcbiAgICAgICAgY29uc3QgeyBzdGF0dXMsIGN0eCB9ID0gdGhpcy5fcHJvY2Vzc0lucHV0UGFyYW1zKGlucHV0KTtcbiAgICAgICAgaWYgKGN0eC5wYXJzZWRUeXBlICE9PSBab2RQYXJzZWRUeXBlLnNldCkge1xuICAgICAgICAgICAgYWRkSXNzdWVUb0NvbnRleHQoY3R4LCB7XG4gICAgICAgICAgICAgICAgY29kZTogWm9kSXNzdWVDb2RlLmludmFsaWRfdHlwZSxcbiAgICAgICAgICAgICAgICBleHBlY3RlZDogWm9kUGFyc2VkVHlwZS5zZXQsXG4gICAgICAgICAgICAgICAgcmVjZWl2ZWQ6IGN0eC5wYXJzZWRUeXBlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gSU5WQUxJRDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBkZWYgPSB0aGlzLl9kZWY7XG4gICAgICAgIGlmIChkZWYubWluU2l6ZSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgaWYgKGN0eC5kYXRhLnNpemUgPCBkZWYubWluU2l6ZS52YWx1ZSkge1xuICAgICAgICAgICAgICAgIGFkZElzc3VlVG9Db250ZXh0KGN0eCwge1xuICAgICAgICAgICAgICAgICAgICBjb2RlOiBab2RJc3N1ZUNvZGUudG9vX3NtYWxsLFxuICAgICAgICAgICAgICAgICAgICBtaW5pbXVtOiBkZWYubWluU2l6ZS52YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJzZXRcIixcbiAgICAgICAgICAgICAgICAgICAgaW5jbHVzaXZlOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICBleGFjdDogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGRlZi5taW5TaXplLm1lc3NhZ2UsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgc3RhdHVzLmRpcnR5KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGRlZi5tYXhTaXplICE9PSBudWxsKSB7XG4gICAgICAgICAgICBpZiAoY3R4LmRhdGEuc2l6ZSA+IGRlZi5tYXhTaXplLnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgYWRkSXNzdWVUb0NvbnRleHQoY3R4LCB7XG4gICAgICAgICAgICAgICAgICAgIGNvZGU6IFpvZElzc3VlQ29kZS50b29fYmlnLFxuICAgICAgICAgICAgICAgICAgICBtYXhpbXVtOiBkZWYubWF4U2l6ZS52YWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJzZXRcIixcbiAgICAgICAgICAgICAgICAgICAgaW5jbHVzaXZlOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICBleGFjdDogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIG1lc3NhZ2U6IGRlZi5tYXhTaXplLm1lc3NhZ2UsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgc3RhdHVzLmRpcnR5KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdmFsdWVUeXBlID0gdGhpcy5fZGVmLnZhbHVlVHlwZTtcbiAgICAgICAgZnVuY3Rpb24gZmluYWxpemVTZXQoZWxlbWVudHMpIHtcbiAgICAgICAgICAgIGNvbnN0IHBhcnNlZFNldCA9IG5ldyBTZXQoKTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgZWxlbWVudCBvZiBlbGVtZW50cykge1xuICAgICAgICAgICAgICAgIGlmIChlbGVtZW50LnN0YXR1cyA9PT0gXCJhYm9ydGVkXCIpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBJTlZBTElEO1xuICAgICAgICAgICAgICAgIGlmIChlbGVtZW50LnN0YXR1cyA9PT0gXCJkaXJ0eVwiKVxuICAgICAgICAgICAgICAgICAgICBzdGF0dXMuZGlydHkoKTtcbiAgICAgICAgICAgICAgICBwYXJzZWRTZXQuYWRkKGVsZW1lbnQudmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHsgc3RhdHVzOiBzdGF0dXMudmFsdWUsIHZhbHVlOiBwYXJzZWRTZXQgfTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBlbGVtZW50cyA9IFsuLi5jdHguZGF0YS52YWx1ZXMoKV0ubWFwKChpdGVtLCBpKSA9PiB2YWx1ZVR5cGUuX3BhcnNlKG5ldyBQYXJzZUlucHV0TGF6eVBhdGgoY3R4LCBpdGVtLCBjdHgucGF0aCwgaSkpKTtcbiAgICAgICAgaWYgKGN0eC5jb21tb24uYXN5bmMpIHtcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLmFsbChlbGVtZW50cykudGhlbigoZWxlbWVudHMpID0+IGZpbmFsaXplU2V0KGVsZW1lbnRzKSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gZmluYWxpemVTZXQoZWxlbWVudHMpO1xuICAgICAgICB9XG4gICAgfVxuICAgIG1pbihtaW5TaXplLCBtZXNzYWdlKSB7XG4gICAgICAgIHJldHVybiBuZXcgWm9kU2V0KHtcbiAgICAgICAgICAgIC4uLnRoaXMuX2RlZixcbiAgICAgICAgICAgIG1pblNpemU6IHsgdmFsdWU6IG1pblNpemUsIG1lc3NhZ2U6IGVycm9yVXRpbC50b1N0cmluZyhtZXNzYWdlKSB9LFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgbWF4KG1heFNpemUsIG1lc3NhZ2UpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBab2RTZXQoe1xuICAgICAgICAgICAgLi4udGhpcy5fZGVmLFxuICAgICAgICAgICAgbWF4U2l6ZTogeyB2YWx1ZTogbWF4U2l6ZSwgbWVzc2FnZTogZXJyb3JVdGlsLnRvU3RyaW5nKG1lc3NhZ2UpIH0sXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBzaXplKHNpemUsIG1lc3NhZ2UpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubWluKHNpemUsIG1lc3NhZ2UpLm1heChzaXplLCBtZXNzYWdlKTtcbiAgICB9XG4gICAgbm9uZW1wdHkobWVzc2FnZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5taW4oMSwgbWVzc2FnZSk7XG4gICAgfVxufVxuWm9kU2V0LmNyZWF0ZSA9ICh2YWx1ZVR5cGUsIHBhcmFtcykgPT4ge1xuICAgIHJldHVybiBuZXcgWm9kU2V0KHtcbiAgICAgICAgdmFsdWVUeXBlLFxuICAgICAgICBtaW5TaXplOiBudWxsLFxuICAgICAgICBtYXhTaXplOiBudWxsLFxuICAgICAgICB0eXBlTmFtZTogWm9kRmlyc3RQYXJ0eVR5cGVLaW5kLlpvZFNldCxcbiAgICAgICAgLi4ucHJvY2Vzc0NyZWF0ZVBhcmFtcyhwYXJhbXMpLFxuICAgIH0pO1xufTtcbmNsYXNzIFpvZEZ1bmN0aW9uIGV4dGVuZHMgWm9kVHlwZSB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XG4gICAgICAgIHRoaXMudmFsaWRhdGUgPSB0aGlzLmltcGxlbWVudDtcbiAgICB9XG4gICAgX3BhcnNlKGlucHV0KSB7XG4gICAgICAgIGNvbnN0IHsgY3R4IH0gPSB0aGlzLl9wcm9jZXNzSW5wdXRQYXJhbXMoaW5wdXQpO1xuICAgICAgICBpZiAoY3R4LnBhcnNlZFR5cGUgIT09IFpvZFBhcnNlZFR5cGUuZnVuY3Rpb24pIHtcbiAgICAgICAgICAgIGFkZElzc3VlVG9Db250ZXh0KGN0eCwge1xuICAgICAgICAgICAgICAgIGNvZGU6IFpvZElzc3VlQ29kZS5pbnZhbGlkX3R5cGUsXG4gICAgICAgICAgICAgICAgZXhwZWN0ZWQ6IFpvZFBhcnNlZFR5cGUuZnVuY3Rpb24sXG4gICAgICAgICAgICAgICAgcmVjZWl2ZWQ6IGN0eC5wYXJzZWRUeXBlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gSU5WQUxJRDtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBtYWtlQXJnc0lzc3VlKGFyZ3MsIGVycm9yKSB7XG4gICAgICAgICAgICByZXR1cm4gbWFrZUlzc3VlKHtcbiAgICAgICAgICAgICAgICBkYXRhOiBhcmdzLFxuICAgICAgICAgICAgICAgIHBhdGg6IGN0eC5wYXRoLFxuICAgICAgICAgICAgICAgIGVycm9yTWFwczogW1xuICAgICAgICAgICAgICAgICAgICBjdHguY29tbW9uLmNvbnRleHR1YWxFcnJvck1hcCxcbiAgICAgICAgICAgICAgICAgICAgY3R4LnNjaGVtYUVycm9yTWFwLFxuICAgICAgICAgICAgICAgICAgICBnZXRFcnJvck1hcCgpLFxuICAgICAgICAgICAgICAgICAgICBlcnJvck1hcCxcbiAgICAgICAgICAgICAgICBdLmZpbHRlcigoeCkgPT4gISF4KSxcbiAgICAgICAgICAgICAgICBpc3N1ZURhdGE6IHtcbiAgICAgICAgICAgICAgICAgICAgY29kZTogWm9kSXNzdWVDb2RlLmludmFsaWRfYXJndW1lbnRzLFxuICAgICAgICAgICAgICAgICAgICBhcmd1bWVudHNFcnJvcjogZXJyb3IsXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIG1ha2VSZXR1cm5zSXNzdWUocmV0dXJucywgZXJyb3IpIHtcbiAgICAgICAgICAgIHJldHVybiBtYWtlSXNzdWUoe1xuICAgICAgICAgICAgICAgIGRhdGE6IHJldHVybnMsXG4gICAgICAgICAgICAgICAgcGF0aDogY3R4LnBhdGgsXG4gICAgICAgICAgICAgICAgZXJyb3JNYXBzOiBbXG4gICAgICAgICAgICAgICAgICAgIGN0eC5jb21tb24uY29udGV4dHVhbEVycm9yTWFwLFxuICAgICAgICAgICAgICAgICAgICBjdHguc2NoZW1hRXJyb3JNYXAsXG4gICAgICAgICAgICAgICAgICAgIGdldEVycm9yTWFwKCksXG4gICAgICAgICAgICAgICAgICAgIGVycm9yTWFwLFxuICAgICAgICAgICAgICAgIF0uZmlsdGVyKCh4KSA9PiAhIXgpLFxuICAgICAgICAgICAgICAgIGlzc3VlRGF0YToge1xuICAgICAgICAgICAgICAgICAgICBjb2RlOiBab2RJc3N1ZUNvZGUuaW52YWxpZF9yZXR1cm5fdHlwZSxcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuVHlwZUVycm9yOiBlcnJvcixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgcGFyYW1zID0geyBlcnJvck1hcDogY3R4LmNvbW1vbi5jb250ZXh0dWFsRXJyb3JNYXAgfTtcbiAgICAgICAgY29uc3QgZm4gPSBjdHguZGF0YTtcbiAgICAgICAgaWYgKHRoaXMuX2RlZi5yZXR1cm5zIGluc3RhbmNlb2YgWm9kUHJvbWlzZSkge1xuICAgICAgICAgICAgLy8gV291bGQgbG92ZSBhIHdheSB0byBhdm9pZCBkaXNhYmxpbmcgdGhpcyBydWxlLCBidXQgd2UgbmVlZFxuICAgICAgICAgICAgLy8gYW4gYWxpYXMgKHVzaW5nIGFuIGFycm93IGZ1bmN0aW9uIHdhcyB3aGF0IGNhdXNlZCAyNjUxKS5cbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdGhpcy1hbGlhc1xuICAgICAgICAgICAgY29uc3QgbWUgPSB0aGlzO1xuICAgICAgICAgICAgcmV0dXJuIE9LKGFzeW5jIGZ1bmN0aW9uICguLi5hcmdzKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZXJyb3IgPSBuZXcgWm9kRXJyb3IoW10pO1xuICAgICAgICAgICAgICAgIGNvbnN0IHBhcnNlZEFyZ3MgPSBhd2FpdCBtZS5fZGVmLmFyZ3NcbiAgICAgICAgICAgICAgICAgICAgLnBhcnNlQXN5bmMoYXJncywgcGFyYW1zKVxuICAgICAgICAgICAgICAgICAgICAuY2F0Y2goKGUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgZXJyb3IuYWRkSXNzdWUobWFrZUFyZ3NJc3N1ZShhcmdzLCBlKSk7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IGVycm9yO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IFJlZmxlY3QuYXBwbHkoZm4sIHRoaXMsIHBhcnNlZEFyZ3MpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHBhcnNlZFJldHVybnMgPSBhd2FpdCBtZS5fZGVmLnJldHVybnMuX2RlZi50eXBlXG4gICAgICAgICAgICAgICAgICAgIC5wYXJzZUFzeW5jKHJlc3VsdCwgcGFyYW1zKVxuICAgICAgICAgICAgICAgICAgICAuY2F0Y2goKGUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgZXJyb3IuYWRkSXNzdWUobWFrZVJldHVybnNJc3N1ZShyZXN1bHQsIGUpKTtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlZFJldHVybnM7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIC8vIFdvdWxkIGxvdmUgYSB3YXkgdG8gYXZvaWQgZGlzYWJsaW5nIHRoaXMgcnVsZSwgYnV0IHdlIG5lZWRcbiAgICAgICAgICAgIC8vIGFuIGFsaWFzICh1c2luZyBhbiBhcnJvdyBmdW5jdGlvbiB3YXMgd2hhdCBjYXVzZWQgMjY1MSkuXG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXRoaXMtYWxpYXNcbiAgICAgICAgICAgIGNvbnN0IG1lID0gdGhpcztcbiAgICAgICAgICAgIHJldHVybiBPSyhmdW5jdGlvbiAoLi4uYXJncykge1xuICAgICAgICAgICAgICAgIGNvbnN0IHBhcnNlZEFyZ3MgPSBtZS5fZGVmLmFyZ3Muc2FmZVBhcnNlKGFyZ3MsIHBhcmFtcyk7XG4gICAgICAgICAgICAgICAgaWYgKCFwYXJzZWRBcmdzLnN1Y2Nlc3MpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFpvZEVycm9yKFttYWtlQXJnc0lzc3VlKGFyZ3MsIHBhcnNlZEFyZ3MuZXJyb3IpXSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IFJlZmxlY3QuYXBwbHkoZm4sIHRoaXMsIHBhcnNlZEFyZ3MuZGF0YSk7XG4gICAgICAgICAgICAgICAgY29uc3QgcGFyc2VkUmV0dXJucyA9IG1lLl9kZWYucmV0dXJucy5zYWZlUGFyc2UocmVzdWx0LCBwYXJhbXMpO1xuICAgICAgICAgICAgICAgIGlmICghcGFyc2VkUmV0dXJucy5zdWNjZXNzKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBab2RFcnJvcihbbWFrZVJldHVybnNJc3N1ZShyZXN1bHQsIHBhcnNlZFJldHVybnMuZXJyb3IpXSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBwYXJzZWRSZXR1cm5zLmRhdGE7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBwYXJhbWV0ZXJzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGVmLmFyZ3M7XG4gICAgfVxuICAgIHJldHVyblR5cGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kZWYucmV0dXJucztcbiAgICB9XG4gICAgYXJncyguLi5pdGVtcykge1xuICAgICAgICByZXR1cm4gbmV3IFpvZEZ1bmN0aW9uKHtcbiAgICAgICAgICAgIC4uLnRoaXMuX2RlZixcbiAgICAgICAgICAgIGFyZ3M6IFpvZFR1cGxlLmNyZWF0ZShpdGVtcykucmVzdChab2RVbmtub3duLmNyZWF0ZSgpKSxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybnMocmV0dXJuVHlwZSkge1xuICAgICAgICByZXR1cm4gbmV3IFpvZEZ1bmN0aW9uKHtcbiAgICAgICAgICAgIC4uLnRoaXMuX2RlZixcbiAgICAgICAgICAgIHJldHVybnM6IHJldHVyblR5cGUsXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBpbXBsZW1lbnQoZnVuYykge1xuICAgICAgICBjb25zdCB2YWxpZGF0ZWRGdW5jID0gdGhpcy5wYXJzZShmdW5jKTtcbiAgICAgICAgcmV0dXJuIHZhbGlkYXRlZEZ1bmM7XG4gICAgfVxuICAgIHN0cmljdEltcGxlbWVudChmdW5jKSB7XG4gICAgICAgIGNvbnN0IHZhbGlkYXRlZEZ1bmMgPSB0aGlzLnBhcnNlKGZ1bmMpO1xuICAgICAgICByZXR1cm4gdmFsaWRhdGVkRnVuYztcbiAgICB9XG4gICAgc3RhdGljIGNyZWF0ZShhcmdzLCByZXR1cm5zLCBwYXJhbXMpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBab2RGdW5jdGlvbih7XG4gICAgICAgICAgICBhcmdzOiAoYXJnc1xuICAgICAgICAgICAgICAgID8gYXJnc1xuICAgICAgICAgICAgICAgIDogWm9kVHVwbGUuY3JlYXRlKFtdKS5yZXN0KFpvZFVua25vd24uY3JlYXRlKCkpKSxcbiAgICAgICAgICAgIHJldHVybnM6IHJldHVybnMgfHwgWm9kVW5rbm93bi5jcmVhdGUoKSxcbiAgICAgICAgICAgIHR5cGVOYW1lOiBab2RGaXJzdFBhcnR5VHlwZUtpbmQuWm9kRnVuY3Rpb24sXG4gICAgICAgICAgICAuLi5wcm9jZXNzQ3JlYXRlUGFyYW1zKHBhcmFtcyksXG4gICAgICAgIH0pO1xuICAgIH1cbn1cbmNsYXNzIFpvZExhenkgZXh0ZW5kcyBab2RUeXBlIHtcbiAgICBnZXQgc2NoZW1hKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGVmLmdldHRlcigpO1xuICAgIH1cbiAgICBfcGFyc2UoaW5wdXQpIHtcbiAgICAgICAgY29uc3QgeyBjdHggfSA9IHRoaXMuX3Byb2Nlc3NJbnB1dFBhcmFtcyhpbnB1dCk7XG4gICAgICAgIGNvbnN0IGxhenlTY2hlbWEgPSB0aGlzLl9kZWYuZ2V0dGVyKCk7XG4gICAgICAgIHJldHVybiBsYXp5U2NoZW1hLl9wYXJzZSh7IGRhdGE6IGN0eC5kYXRhLCBwYXRoOiBjdHgucGF0aCwgcGFyZW50OiBjdHggfSk7XG4gICAgfVxufVxuWm9kTGF6eS5jcmVhdGUgPSAoZ2V0dGVyLCBwYXJhbXMpID0+IHtcbiAgICByZXR1cm4gbmV3IFpvZExhenkoe1xuICAgICAgICBnZXR0ZXI6IGdldHRlcixcbiAgICAgICAgdHlwZU5hbWU6IFpvZEZpcnN0UGFydHlUeXBlS2luZC5ab2RMYXp5LFxuICAgICAgICAuLi5wcm9jZXNzQ3JlYXRlUGFyYW1zKHBhcmFtcyksXG4gICAgfSk7XG59O1xuY2xhc3MgWm9kTGl0ZXJhbCBleHRlbmRzIFpvZFR5cGUge1xuICAgIF9wYXJzZShpbnB1dCkge1xuICAgICAgICBpZiAoaW5wdXQuZGF0YSAhPT0gdGhpcy5fZGVmLnZhbHVlKSB7XG4gICAgICAgICAgICBjb25zdCBjdHggPSB0aGlzLl9nZXRPclJldHVybkN0eChpbnB1dCk7XG4gICAgICAgICAgICBhZGRJc3N1ZVRvQ29udGV4dChjdHgsIHtcbiAgICAgICAgICAgICAgICByZWNlaXZlZDogY3R4LmRhdGEsXG4gICAgICAgICAgICAgICAgY29kZTogWm9kSXNzdWVDb2RlLmludmFsaWRfbGl0ZXJhbCxcbiAgICAgICAgICAgICAgICBleHBlY3RlZDogdGhpcy5fZGVmLnZhbHVlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gSU5WQUxJRDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geyBzdGF0dXM6IFwidmFsaWRcIiwgdmFsdWU6IGlucHV0LmRhdGEgfTtcbiAgICB9XG4gICAgZ2V0IHZhbHVlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGVmLnZhbHVlO1xuICAgIH1cbn1cblpvZExpdGVyYWwuY3JlYXRlID0gKHZhbHVlLCBwYXJhbXMpID0+IHtcbiAgICByZXR1cm4gbmV3IFpvZExpdGVyYWwoe1xuICAgICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICAgIHR5cGVOYW1lOiBab2RGaXJzdFBhcnR5VHlwZUtpbmQuWm9kTGl0ZXJhbCxcbiAgICAgICAgLi4ucHJvY2Vzc0NyZWF0ZVBhcmFtcyhwYXJhbXMpLFxuICAgIH0pO1xufTtcbmZ1bmN0aW9uIGNyZWF0ZVpvZEVudW0odmFsdWVzLCBwYXJhbXMpIHtcbiAgICByZXR1cm4gbmV3IFpvZEVudW0oe1xuICAgICAgICB2YWx1ZXMsXG4gICAgICAgIHR5cGVOYW1lOiBab2RGaXJzdFBhcnR5VHlwZUtpbmQuWm9kRW51bSxcbiAgICAgICAgLi4ucHJvY2Vzc0NyZWF0ZVBhcmFtcyhwYXJhbXMpLFxuICAgIH0pO1xufVxuY2xhc3MgWm9kRW51bSBleHRlbmRzIFpvZFR5cGUge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlciguLi5hcmd1bWVudHMpO1xuICAgICAgICBfWm9kRW51bV9jYWNoZS5zZXQodGhpcywgdm9pZCAwKTtcbiAgICB9XG4gICAgX3BhcnNlKGlucHV0KSB7XG4gICAgICAgIGlmICh0eXBlb2YgaW5wdXQuZGF0YSAhPT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgY29uc3QgY3R4ID0gdGhpcy5fZ2V0T3JSZXR1cm5DdHgoaW5wdXQpO1xuICAgICAgICAgICAgY29uc3QgZXhwZWN0ZWRWYWx1ZXMgPSB0aGlzLl9kZWYudmFsdWVzO1xuICAgICAgICAgICAgYWRkSXNzdWVUb0NvbnRleHQoY3R4LCB7XG4gICAgICAgICAgICAgICAgZXhwZWN0ZWQ6IHV0aWwuam9pblZhbHVlcyhleHBlY3RlZFZhbHVlcyksXG4gICAgICAgICAgICAgICAgcmVjZWl2ZWQ6IGN0eC5wYXJzZWRUeXBlLFxuICAgICAgICAgICAgICAgIGNvZGU6IFpvZElzc3VlQ29kZS5pbnZhbGlkX3R5cGUsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiBJTlZBTElEO1xuICAgICAgICB9XG4gICAgICAgIGlmICghX19jbGFzc1ByaXZhdGVGaWVsZEdldCh0aGlzLCBfWm9kRW51bV9jYWNoZSwgXCJmXCIpKSB7XG4gICAgICAgICAgICBfX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KHRoaXMsIF9ab2RFbnVtX2NhY2hlLCBuZXcgU2V0KHRoaXMuX2RlZi52YWx1ZXMpLCBcImZcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ab2RFbnVtX2NhY2hlLCBcImZcIikuaGFzKGlucHV0LmRhdGEpKSB7XG4gICAgICAgICAgICBjb25zdCBjdHggPSB0aGlzLl9nZXRPclJldHVybkN0eChpbnB1dCk7XG4gICAgICAgICAgICBjb25zdCBleHBlY3RlZFZhbHVlcyA9IHRoaXMuX2RlZi52YWx1ZXM7XG4gICAgICAgICAgICBhZGRJc3N1ZVRvQ29udGV4dChjdHgsIHtcbiAgICAgICAgICAgICAgICByZWNlaXZlZDogY3R4LmRhdGEsXG4gICAgICAgICAgICAgICAgY29kZTogWm9kSXNzdWVDb2RlLmludmFsaWRfZW51bV92YWx1ZSxcbiAgICAgICAgICAgICAgICBvcHRpb25zOiBleHBlY3RlZFZhbHVlcyxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIElOVkFMSUQ7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIE9LKGlucHV0LmRhdGEpO1xuICAgIH1cbiAgICBnZXQgb3B0aW9ucygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RlZi52YWx1ZXM7XG4gICAgfVxuICAgIGdldCBlbnVtKCkge1xuICAgICAgICBjb25zdCBlbnVtVmFsdWVzID0ge307XG4gICAgICAgIGZvciAoY29uc3QgdmFsIG9mIHRoaXMuX2RlZi52YWx1ZXMpIHtcbiAgICAgICAgICAgIGVudW1WYWx1ZXNbdmFsXSA9IHZhbDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZW51bVZhbHVlcztcbiAgICB9XG4gICAgZ2V0IFZhbHVlcygpIHtcbiAgICAgICAgY29uc3QgZW51bVZhbHVlcyA9IHt9O1xuICAgICAgICBmb3IgKGNvbnN0IHZhbCBvZiB0aGlzLl9kZWYudmFsdWVzKSB7XG4gICAgICAgICAgICBlbnVtVmFsdWVzW3ZhbF0gPSB2YWw7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGVudW1WYWx1ZXM7XG4gICAgfVxuICAgIGdldCBFbnVtKCkge1xuICAgICAgICBjb25zdCBlbnVtVmFsdWVzID0ge307XG4gICAgICAgIGZvciAoY29uc3QgdmFsIG9mIHRoaXMuX2RlZi52YWx1ZXMpIHtcbiAgICAgICAgICAgIGVudW1WYWx1ZXNbdmFsXSA9IHZhbDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZW51bVZhbHVlcztcbiAgICB9XG4gICAgZXh0cmFjdCh2YWx1ZXMsIG5ld0RlZiA9IHRoaXMuX2RlZikge1xuICAgICAgICByZXR1cm4gWm9kRW51bS5jcmVhdGUodmFsdWVzLCB7XG4gICAgICAgICAgICAuLi50aGlzLl9kZWYsXG4gICAgICAgICAgICAuLi5uZXdEZWYsXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBleGNsdWRlKHZhbHVlcywgbmV3RGVmID0gdGhpcy5fZGVmKSB7XG4gICAgICAgIHJldHVybiBab2RFbnVtLmNyZWF0ZSh0aGlzLm9wdGlvbnMuZmlsdGVyKChvcHQpID0+ICF2YWx1ZXMuaW5jbHVkZXMob3B0KSksIHtcbiAgICAgICAgICAgIC4uLnRoaXMuX2RlZixcbiAgICAgICAgICAgIC4uLm5ld0RlZixcbiAgICAgICAgfSk7XG4gICAgfVxufVxuX1pvZEVudW1fY2FjaGUgPSBuZXcgV2Vha01hcCgpO1xuWm9kRW51bS5jcmVhdGUgPSBjcmVhdGVab2RFbnVtO1xuY2xhc3MgWm9kTmF0aXZlRW51bSBleHRlbmRzIFpvZFR5cGUge1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlciguLi5hcmd1bWVudHMpO1xuICAgICAgICBfWm9kTmF0aXZlRW51bV9jYWNoZS5zZXQodGhpcywgdm9pZCAwKTtcbiAgICB9XG4gICAgX3BhcnNlKGlucHV0KSB7XG4gICAgICAgIGNvbnN0IG5hdGl2ZUVudW1WYWx1ZXMgPSB1dGlsLmdldFZhbGlkRW51bVZhbHVlcyh0aGlzLl9kZWYudmFsdWVzKTtcbiAgICAgICAgY29uc3QgY3R4ID0gdGhpcy5fZ2V0T3JSZXR1cm5DdHgoaW5wdXQpO1xuICAgICAgICBpZiAoY3R4LnBhcnNlZFR5cGUgIT09IFpvZFBhcnNlZFR5cGUuc3RyaW5nICYmXG4gICAgICAgICAgICBjdHgucGFyc2VkVHlwZSAhPT0gWm9kUGFyc2VkVHlwZS5udW1iZXIpIHtcbiAgICAgICAgICAgIGNvbnN0IGV4cGVjdGVkVmFsdWVzID0gdXRpbC5vYmplY3RWYWx1ZXMobmF0aXZlRW51bVZhbHVlcyk7XG4gICAgICAgICAgICBhZGRJc3N1ZVRvQ29udGV4dChjdHgsIHtcbiAgICAgICAgICAgICAgICBleHBlY3RlZDogdXRpbC5qb2luVmFsdWVzKGV4cGVjdGVkVmFsdWVzKSxcbiAgICAgICAgICAgICAgICByZWNlaXZlZDogY3R4LnBhcnNlZFR5cGUsXG4gICAgICAgICAgICAgICAgY29kZTogWm9kSXNzdWVDb2RlLmludmFsaWRfdHlwZSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuIElOVkFMSUQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ab2ROYXRpdmVFbnVtX2NhY2hlLCBcImZcIikpIHtcbiAgICAgICAgICAgIF9fY2xhc3NQcml2YXRlRmllbGRTZXQodGhpcywgX1pvZE5hdGl2ZUVudW1fY2FjaGUsIG5ldyBTZXQodXRpbC5nZXRWYWxpZEVudW1WYWx1ZXModGhpcy5fZGVmLnZhbHVlcykpLCBcImZcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHRoaXMsIF9ab2ROYXRpdmVFbnVtX2NhY2hlLCBcImZcIikuaGFzKGlucHV0LmRhdGEpKSB7XG4gICAgICAgICAgICBjb25zdCBleHBlY3RlZFZhbHVlcyA9IHV0aWwub2JqZWN0VmFsdWVzKG5hdGl2ZUVudW1WYWx1ZXMpO1xuICAgICAgICAgICAgYWRkSXNzdWVUb0NvbnRleHQoY3R4LCB7XG4gICAgICAgICAgICAgICAgcmVjZWl2ZWQ6IGN0eC5kYXRhLFxuICAgICAgICAgICAgICAgIGNvZGU6IFpvZElzc3VlQ29kZS5pbnZhbGlkX2VudW1fdmFsdWUsXG4gICAgICAgICAgICAgICAgb3B0aW9uczogZXhwZWN0ZWRWYWx1ZXMsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiBJTlZBTElEO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBPSyhpbnB1dC5kYXRhKTtcbiAgICB9XG4gICAgZ2V0IGVudW0oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kZWYudmFsdWVzO1xuICAgIH1cbn1cbl9ab2ROYXRpdmVFbnVtX2NhY2hlID0gbmV3IFdlYWtNYXAoKTtcblpvZE5hdGl2ZUVudW0uY3JlYXRlID0gKHZhbHVlcywgcGFyYW1zKSA9PiB7XG4gICAgcmV0dXJuIG5ldyBab2ROYXRpdmVFbnVtKHtcbiAgICAgICAgdmFsdWVzOiB2YWx1ZXMsXG4gICAgICAgIHR5cGVOYW1lOiBab2RGaXJzdFBhcnR5VHlwZUtpbmQuWm9kTmF0aXZlRW51bSxcbiAgICAgICAgLi4ucHJvY2Vzc0NyZWF0ZVBhcmFtcyhwYXJhbXMpLFxuICAgIH0pO1xufTtcbmNsYXNzIFpvZFByb21pc2UgZXh0ZW5kcyBab2RUeXBlIHtcbiAgICB1bndyYXAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kZWYudHlwZTtcbiAgICB9XG4gICAgX3BhcnNlKGlucHV0KSB7XG4gICAgICAgIGNvbnN0IHsgY3R4IH0gPSB0aGlzLl9wcm9jZXNzSW5wdXRQYXJhbXMoaW5wdXQpO1xuICAgICAgICBpZiAoY3R4LnBhcnNlZFR5cGUgIT09IFpvZFBhcnNlZFR5cGUucHJvbWlzZSAmJlxuICAgICAgICAgICAgY3R4LmNvbW1vbi5hc3luYyA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgIGFkZElzc3VlVG9Db250ZXh0KGN0eCwge1xuICAgICAgICAgICAgICAgIGNvZGU6IFpvZElzc3VlQ29kZS5pbnZhbGlkX3R5cGUsXG4gICAgICAgICAgICAgICAgZXhwZWN0ZWQ6IFpvZFBhcnNlZFR5cGUucHJvbWlzZSxcbiAgICAgICAgICAgICAgICByZWNlaXZlZDogY3R4LnBhcnNlZFR5cGUsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybiBJTlZBTElEO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHByb21pc2lmaWVkID0gY3R4LnBhcnNlZFR5cGUgPT09IFpvZFBhcnNlZFR5cGUucHJvbWlzZVxuICAgICAgICAgICAgPyBjdHguZGF0YVxuICAgICAgICAgICAgOiBQcm9taXNlLnJlc29sdmUoY3R4LmRhdGEpO1xuICAgICAgICByZXR1cm4gT0socHJvbWlzaWZpZWQudGhlbigoZGF0YSkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2RlZi50eXBlLnBhcnNlQXN5bmMoZGF0YSwge1xuICAgICAgICAgICAgICAgIHBhdGg6IGN0eC5wYXRoLFxuICAgICAgICAgICAgICAgIGVycm9yTWFwOiBjdHguY29tbW9uLmNvbnRleHR1YWxFcnJvck1hcCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KSk7XG4gICAgfVxufVxuWm9kUHJvbWlzZS5jcmVhdGUgPSAoc2NoZW1hLCBwYXJhbXMpID0+IHtcbiAgICByZXR1cm4gbmV3IFpvZFByb21pc2Uoe1xuICAgICAgICB0eXBlOiBzY2hlbWEsXG4gICAgICAgIHR5cGVOYW1lOiBab2RGaXJzdFBhcnR5VHlwZUtpbmQuWm9kUHJvbWlzZSxcbiAgICAgICAgLi4ucHJvY2Vzc0NyZWF0ZVBhcmFtcyhwYXJhbXMpLFxuICAgIH0pO1xufTtcbmNsYXNzIFpvZEVmZmVjdHMgZXh0ZW5kcyBab2RUeXBlIHtcbiAgICBpbm5lclR5cGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kZWYuc2NoZW1hO1xuICAgIH1cbiAgICBzb3VyY2VUeXBlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGVmLnNjaGVtYS5fZGVmLnR5cGVOYW1lID09PSBab2RGaXJzdFBhcnR5VHlwZUtpbmQuWm9kRWZmZWN0c1xuICAgICAgICAgICAgPyB0aGlzLl9kZWYuc2NoZW1hLnNvdXJjZVR5cGUoKVxuICAgICAgICAgICAgOiB0aGlzLl9kZWYuc2NoZW1hO1xuICAgIH1cbiAgICBfcGFyc2UoaW5wdXQpIHtcbiAgICAgICAgY29uc3QgeyBzdGF0dXMsIGN0eCB9ID0gdGhpcy5fcHJvY2Vzc0lucHV0UGFyYW1zKGlucHV0KTtcbiAgICAgICAgY29uc3QgZWZmZWN0ID0gdGhpcy5fZGVmLmVmZmVjdCB8fCBudWxsO1xuICAgICAgICBjb25zdCBjaGVja0N0eCA9IHtcbiAgICAgICAgICAgIGFkZElzc3VlOiAoYXJnKSA9PiB7XG4gICAgICAgICAgICAgICAgYWRkSXNzdWVUb0NvbnRleHQoY3R4LCBhcmcpO1xuICAgICAgICAgICAgICAgIGlmIChhcmcuZmF0YWwpIHtcbiAgICAgICAgICAgICAgICAgICAgc3RhdHVzLmFib3J0KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBzdGF0dXMuZGlydHkoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZ2V0IHBhdGgoKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGN0eC5wYXRoO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICAgICAgY2hlY2tDdHguYWRkSXNzdWUgPSBjaGVja0N0eC5hZGRJc3N1ZS5iaW5kKGNoZWNrQ3R4KTtcbiAgICAgICAgaWYgKGVmZmVjdC50eXBlID09PSBcInByZXByb2Nlc3NcIikge1xuICAgICAgICAgICAgY29uc3QgcHJvY2Vzc2VkID0gZWZmZWN0LnRyYW5zZm9ybShjdHguZGF0YSwgY2hlY2tDdHgpO1xuICAgICAgICAgICAgaWYgKGN0eC5jb21tb24uYXN5bmMpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHByb2Nlc3NlZCkudGhlbihhc3luYyAocHJvY2Vzc2VkKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzdGF0dXMudmFsdWUgPT09IFwiYWJvcnRlZFwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIElOVkFMSUQ7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMuX2RlZi5zY2hlbWEuX3BhcnNlQXN5bmMoe1xuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YTogcHJvY2Vzc2VkLFxuICAgICAgICAgICAgICAgICAgICAgICAgcGF0aDogY3R4LnBhdGgsXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnQ6IGN0eCxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXN1bHQuc3RhdHVzID09PSBcImFib3J0ZWRcIilcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBJTlZBTElEO1xuICAgICAgICAgICAgICAgICAgICBpZiAocmVzdWx0LnN0YXR1cyA9PT0gXCJkaXJ0eVwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIERJUlRZKHJlc3VsdC52YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzdGF0dXMudmFsdWUgPT09IFwiZGlydHlcIilcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBESVJUWShyZXN1bHQudmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKHN0YXR1cy52YWx1ZSA9PT0gXCJhYm9ydGVkXCIpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBJTlZBTElEO1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMuX2RlZi5zY2hlbWEuX3BhcnNlU3luYyh7XG4gICAgICAgICAgICAgICAgICAgIGRhdGE6IHByb2Nlc3NlZCxcbiAgICAgICAgICAgICAgICAgICAgcGF0aDogY3R4LnBhdGgsXG4gICAgICAgICAgICAgICAgICAgIHBhcmVudDogY3R4LFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGlmIChyZXN1bHQuc3RhdHVzID09PSBcImFib3J0ZWRcIilcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIElOVkFMSUQ7XG4gICAgICAgICAgICAgICAgaWYgKHJlc3VsdC5zdGF0dXMgPT09IFwiZGlydHlcIilcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIERJUlRZKHJlc3VsdC52YWx1ZSk7XG4gICAgICAgICAgICAgICAgaWYgKHN0YXR1cy52YWx1ZSA9PT0gXCJkaXJ0eVwiKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gRElSVFkocmVzdWx0LnZhbHVlKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChlZmZlY3QudHlwZSA9PT0gXCJyZWZpbmVtZW50XCIpIHtcbiAgICAgICAgICAgIGNvbnN0IGV4ZWN1dGVSZWZpbmVtZW50ID0gKGFjYykgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGVmZmVjdC5yZWZpbmVtZW50KGFjYywgY2hlY2tDdHgpO1xuICAgICAgICAgICAgICAgIGlmIChjdHguY29tbW9uLmFzeW5jKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUocmVzdWx0KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHJlc3VsdCBpbnN0YW5jZW9mIFByb21pc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQXN5bmMgcmVmaW5lbWVudCBlbmNvdW50ZXJlZCBkdXJpbmcgc3luY2hyb25vdXMgcGFyc2Ugb3BlcmF0aW9uLiBVc2UgLnBhcnNlQXN5bmMgaW5zdGVhZC5cIik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBhY2M7XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgaWYgKGN0eC5jb21tb24uYXN5bmMgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgaW5uZXIgPSB0aGlzLl9kZWYuc2NoZW1hLl9wYXJzZVN5bmMoe1xuICAgICAgICAgICAgICAgICAgICBkYXRhOiBjdHguZGF0YSxcbiAgICAgICAgICAgICAgICAgICAgcGF0aDogY3R4LnBhdGgsXG4gICAgICAgICAgICAgICAgICAgIHBhcmVudDogY3R4LFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGlmIChpbm5lci5zdGF0dXMgPT09IFwiYWJvcnRlZFwiKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gSU5WQUxJRDtcbiAgICAgICAgICAgICAgICBpZiAoaW5uZXIuc3RhdHVzID09PSBcImRpcnR5XCIpXG4gICAgICAgICAgICAgICAgICAgIHN0YXR1cy5kaXJ0eSgpO1xuICAgICAgICAgICAgICAgIC8vIHJldHVybiB2YWx1ZSBpcyBpZ25vcmVkXG4gICAgICAgICAgICAgICAgZXhlY3V0ZVJlZmluZW1lbnQoaW5uZXIudmFsdWUpO1xuICAgICAgICAgICAgICAgIHJldHVybiB7IHN0YXR1czogc3RhdHVzLnZhbHVlLCB2YWx1ZTogaW5uZXIudmFsdWUgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9kZWYuc2NoZW1hXG4gICAgICAgICAgICAgICAgICAgIC5fcGFyc2VBc3luYyh7IGRhdGE6IGN0eC5kYXRhLCBwYXRoOiBjdHgucGF0aCwgcGFyZW50OiBjdHggfSlcbiAgICAgICAgICAgICAgICAgICAgLnRoZW4oKGlubmVyKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpbm5lci5zdGF0dXMgPT09IFwiYWJvcnRlZFwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIElOVkFMSUQ7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpbm5lci5zdGF0dXMgPT09IFwiZGlydHlcIilcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1cy5kaXJ0eSgpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXhlY3V0ZVJlZmluZW1lbnQoaW5uZXIudmFsdWUpLnRoZW4oKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgc3RhdHVzOiBzdGF0dXMudmFsdWUsIHZhbHVlOiBpbm5lci52YWx1ZSB9O1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoZWZmZWN0LnR5cGUgPT09IFwidHJhbnNmb3JtXCIpIHtcbiAgICAgICAgICAgIGlmIChjdHguY29tbW9uLmFzeW5jID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGJhc2UgPSB0aGlzLl9kZWYuc2NoZW1hLl9wYXJzZVN5bmMoe1xuICAgICAgICAgICAgICAgICAgICBkYXRhOiBjdHguZGF0YSxcbiAgICAgICAgICAgICAgICAgICAgcGF0aDogY3R4LnBhdGgsXG4gICAgICAgICAgICAgICAgICAgIHBhcmVudDogY3R4LFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGlmICghaXNWYWxpZChiYXNlKSlcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGJhc2U7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gZWZmZWN0LnRyYW5zZm9ybShiYXNlLnZhbHVlLCBjaGVja0N0eCk7XG4gICAgICAgICAgICAgICAgaWYgKHJlc3VsdCBpbnN0YW5jZW9mIFByb21pc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBBc3luY2hyb25vdXMgdHJhbnNmb3JtIGVuY291bnRlcmVkIGR1cmluZyBzeW5jaHJvbm91cyBwYXJzZSBvcGVyYXRpb24uIFVzZSAucGFyc2VBc3luYyBpbnN0ZWFkLmApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4geyBzdGF0dXM6IHN0YXR1cy52YWx1ZSwgdmFsdWU6IHJlc3VsdCB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2RlZi5zY2hlbWFcbiAgICAgICAgICAgICAgICAgICAgLl9wYXJzZUFzeW5jKHsgZGF0YTogY3R4LmRhdGEsIHBhdGg6IGN0eC5wYXRoLCBwYXJlbnQ6IGN0eCB9KVxuICAgICAgICAgICAgICAgICAgICAudGhlbigoYmFzZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWlzVmFsaWQoYmFzZSkpXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYmFzZTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShlZmZlY3QudHJhbnNmb3JtKGJhc2UudmFsdWUsIGNoZWNrQ3R4KSkudGhlbigocmVzdWx0KSA9PiAoeyBzdGF0dXM6IHN0YXR1cy52YWx1ZSwgdmFsdWU6IHJlc3VsdCB9KSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdXRpbC5hc3NlcnROZXZlcihlZmZlY3QpO1xuICAgIH1cbn1cblpvZEVmZmVjdHMuY3JlYXRlID0gKHNjaGVtYSwgZWZmZWN0LCBwYXJhbXMpID0+IHtcbiAgICByZXR1cm4gbmV3IFpvZEVmZmVjdHMoe1xuICAgICAgICBzY2hlbWEsXG4gICAgICAgIHR5cGVOYW1lOiBab2RGaXJzdFBhcnR5VHlwZUtpbmQuWm9kRWZmZWN0cyxcbiAgICAgICAgZWZmZWN0LFxuICAgICAgICAuLi5wcm9jZXNzQ3JlYXRlUGFyYW1zKHBhcmFtcyksXG4gICAgfSk7XG59O1xuWm9kRWZmZWN0cy5jcmVhdGVXaXRoUHJlcHJvY2VzcyA9IChwcmVwcm9jZXNzLCBzY2hlbWEsIHBhcmFtcykgPT4ge1xuICAgIHJldHVybiBuZXcgWm9kRWZmZWN0cyh7XG4gICAgICAgIHNjaGVtYSxcbiAgICAgICAgZWZmZWN0OiB7IHR5cGU6IFwicHJlcHJvY2Vzc1wiLCB0cmFuc2Zvcm06IHByZXByb2Nlc3MgfSxcbiAgICAgICAgdHlwZU5hbWU6IFpvZEZpcnN0UGFydHlUeXBlS2luZC5ab2RFZmZlY3RzLFxuICAgICAgICAuLi5wcm9jZXNzQ3JlYXRlUGFyYW1zKHBhcmFtcyksXG4gICAgfSk7XG59O1xuY2xhc3MgWm9kT3B0aW9uYWwgZXh0ZW5kcyBab2RUeXBlIHtcbiAgICBfcGFyc2UoaW5wdXQpIHtcbiAgICAgICAgY29uc3QgcGFyc2VkVHlwZSA9IHRoaXMuX2dldFR5cGUoaW5wdXQpO1xuICAgICAgICBpZiAocGFyc2VkVHlwZSA9PT0gWm9kUGFyc2VkVHlwZS51bmRlZmluZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBPSyh1bmRlZmluZWQpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLl9kZWYuaW5uZXJUeXBlLl9wYXJzZShpbnB1dCk7XG4gICAgfVxuICAgIHVud3JhcCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RlZi5pbm5lclR5cGU7XG4gICAgfVxufVxuWm9kT3B0aW9uYWwuY3JlYXRlID0gKHR5cGUsIHBhcmFtcykgPT4ge1xuICAgIHJldHVybiBuZXcgWm9kT3B0aW9uYWwoe1xuICAgICAgICBpbm5lclR5cGU6IHR5cGUsXG4gICAgICAgIHR5cGVOYW1lOiBab2RGaXJzdFBhcnR5VHlwZUtpbmQuWm9kT3B0aW9uYWwsXG4gICAgICAgIC4uLnByb2Nlc3NDcmVhdGVQYXJhbXMocGFyYW1zKSxcbiAgICB9KTtcbn07XG5jbGFzcyBab2ROdWxsYWJsZSBleHRlbmRzIFpvZFR5cGUge1xuICAgIF9wYXJzZShpbnB1dCkge1xuICAgICAgICBjb25zdCBwYXJzZWRUeXBlID0gdGhpcy5fZ2V0VHlwZShpbnB1dCk7XG4gICAgICAgIGlmIChwYXJzZWRUeXBlID09PSBab2RQYXJzZWRUeXBlLm51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiBPSyhudWxsKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5fZGVmLmlubmVyVHlwZS5fcGFyc2UoaW5wdXQpO1xuICAgIH1cbiAgICB1bndyYXAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9kZWYuaW5uZXJUeXBlO1xuICAgIH1cbn1cblpvZE51bGxhYmxlLmNyZWF0ZSA9ICh0eXBlLCBwYXJhbXMpID0+IHtcbiAgICByZXR1cm4gbmV3IFpvZE51bGxhYmxlKHtcbiAgICAgICAgaW5uZXJUeXBlOiB0eXBlLFxuICAgICAgICB0eXBlTmFtZTogWm9kRmlyc3RQYXJ0eVR5cGVLaW5kLlpvZE51bGxhYmxlLFxuICAgICAgICAuLi5wcm9jZXNzQ3JlYXRlUGFyYW1zKHBhcmFtcyksXG4gICAgfSk7XG59O1xuY2xhc3MgWm9kRGVmYXVsdCBleHRlbmRzIFpvZFR5cGUge1xuICAgIF9wYXJzZShpbnB1dCkge1xuICAgICAgICBjb25zdCB7IGN0eCB9ID0gdGhpcy5fcHJvY2Vzc0lucHV0UGFyYW1zKGlucHV0KTtcbiAgICAgICAgbGV0IGRhdGEgPSBjdHguZGF0YTtcbiAgICAgICAgaWYgKGN0eC5wYXJzZWRUeXBlID09PSBab2RQYXJzZWRUeXBlLnVuZGVmaW5lZCkge1xuICAgICAgICAgICAgZGF0YSA9IHRoaXMuX2RlZi5kZWZhdWx0VmFsdWUoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy5fZGVmLmlubmVyVHlwZS5fcGFyc2Uoe1xuICAgICAgICAgICAgZGF0YSxcbiAgICAgICAgICAgIHBhdGg6IGN0eC5wYXRoLFxuICAgICAgICAgICAgcGFyZW50OiBjdHgsXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICByZW1vdmVEZWZhdWx0KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGVmLmlubmVyVHlwZTtcbiAgICB9XG59XG5ab2REZWZhdWx0LmNyZWF0ZSA9ICh0eXBlLCBwYXJhbXMpID0+IHtcbiAgICByZXR1cm4gbmV3IFpvZERlZmF1bHQoe1xuICAgICAgICBpbm5lclR5cGU6IHR5cGUsXG4gICAgICAgIHR5cGVOYW1lOiBab2RGaXJzdFBhcnR5VHlwZUtpbmQuWm9kRGVmYXVsdCxcbiAgICAgICAgZGVmYXVsdFZhbHVlOiB0eXBlb2YgcGFyYW1zLmRlZmF1bHQgPT09IFwiZnVuY3Rpb25cIlxuICAgICAgICAgICAgPyBwYXJhbXMuZGVmYXVsdFxuICAgICAgICAgICAgOiAoKSA9PiBwYXJhbXMuZGVmYXVsdCxcbiAgICAgICAgLi4ucHJvY2Vzc0NyZWF0ZVBhcmFtcyhwYXJhbXMpLFxuICAgIH0pO1xufTtcbmNsYXNzIFpvZENhdGNoIGV4dGVuZHMgWm9kVHlwZSB7XG4gICAgX3BhcnNlKGlucHV0KSB7XG4gICAgICAgIGNvbnN0IHsgY3R4IH0gPSB0aGlzLl9wcm9jZXNzSW5wdXRQYXJhbXMoaW5wdXQpO1xuICAgICAgICAvLyBuZXdDdHggaXMgdXNlZCB0byBub3QgY29sbGVjdCBpc3N1ZXMgZnJvbSBpbm5lciB0eXBlcyBpbiBjdHhcbiAgICAgICAgY29uc3QgbmV3Q3R4ID0ge1xuICAgICAgICAgICAgLi4uY3R4LFxuICAgICAgICAgICAgY29tbW9uOiB7XG4gICAgICAgICAgICAgICAgLi4uY3R4LmNvbW1vbixcbiAgICAgICAgICAgICAgICBpc3N1ZXM6IFtdLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gdGhpcy5fZGVmLmlubmVyVHlwZS5fcGFyc2Uoe1xuICAgICAgICAgICAgZGF0YTogbmV3Q3R4LmRhdGEsXG4gICAgICAgICAgICBwYXRoOiBuZXdDdHgucGF0aCxcbiAgICAgICAgICAgIHBhcmVudDoge1xuICAgICAgICAgICAgICAgIC4uLm5ld0N0eCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgICAgICBpZiAoaXNBc3luYyhyZXN1bHQpKSB7XG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0LnRoZW4oKHJlc3VsdCkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIHN0YXR1czogXCJ2YWxpZFwiLFxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogcmVzdWx0LnN0YXR1cyA9PT0gXCJ2YWxpZFwiXG4gICAgICAgICAgICAgICAgICAgICAgICA/IHJlc3VsdC52YWx1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgOiB0aGlzLl9kZWYuY2F0Y2hWYWx1ZSh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0IGVycm9yKCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFpvZEVycm9yKG5ld0N0eC5jb21tb24uaXNzdWVzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0OiBuZXdDdHguZGF0YSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgc3RhdHVzOiBcInZhbGlkXCIsXG4gICAgICAgICAgICAgICAgdmFsdWU6IHJlc3VsdC5zdGF0dXMgPT09IFwidmFsaWRcIlxuICAgICAgICAgICAgICAgICAgICA/IHJlc3VsdC52YWx1ZVxuICAgICAgICAgICAgICAgICAgICA6IHRoaXMuX2RlZi5jYXRjaFZhbHVlKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGdldCBlcnJvcigpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbmV3IFpvZEVycm9yKG5ld0N0eC5jb21tb24uaXNzdWVzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBpbnB1dDogbmV3Q3R4LmRhdGEsXG4gICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZW1vdmVDYXRjaCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RlZi5pbm5lclR5cGU7XG4gICAgfVxufVxuWm9kQ2F0Y2guY3JlYXRlID0gKHR5cGUsIHBhcmFtcykgPT4ge1xuICAgIHJldHVybiBuZXcgWm9kQ2F0Y2goe1xuICAgICAgICBpbm5lclR5cGU6IHR5cGUsXG4gICAgICAgIHR5cGVOYW1lOiBab2RGaXJzdFBhcnR5VHlwZUtpbmQuWm9kQ2F0Y2gsXG4gICAgICAgIGNhdGNoVmFsdWU6IHR5cGVvZiBwYXJhbXMuY2F0Y2ggPT09IFwiZnVuY3Rpb25cIiA/IHBhcmFtcy5jYXRjaCA6ICgpID0+IHBhcmFtcy5jYXRjaCxcbiAgICAgICAgLi4ucHJvY2Vzc0NyZWF0ZVBhcmFtcyhwYXJhbXMpLFxuICAgIH0pO1xufTtcbmNsYXNzIFpvZE5hTiBleHRlbmRzIFpvZFR5cGUge1xuICAgIF9wYXJzZShpbnB1dCkge1xuICAgICAgICBjb25zdCBwYXJzZWRUeXBlID0gdGhpcy5fZ2V0VHlwZShpbnB1dCk7XG4gICAgICAgIGlmIChwYXJzZWRUeXBlICE9PSBab2RQYXJzZWRUeXBlLm5hbikge1xuICAgICAgICAgICAgY29uc3QgY3R4ID0gdGhpcy5fZ2V0T3JSZXR1cm5DdHgoaW5wdXQpO1xuICAgICAgICAgICAgYWRkSXNzdWVUb0NvbnRleHQoY3R4LCB7XG4gICAgICAgICAgICAgICAgY29kZTogWm9kSXNzdWVDb2RlLmludmFsaWRfdHlwZSxcbiAgICAgICAgICAgICAgICBleHBlY3RlZDogWm9kUGFyc2VkVHlwZS5uYW4sXG4gICAgICAgICAgICAgICAgcmVjZWl2ZWQ6IGN0eC5wYXJzZWRUeXBlLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gSU5WQUxJRDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geyBzdGF0dXM6IFwidmFsaWRcIiwgdmFsdWU6IGlucHV0LmRhdGEgfTtcbiAgICB9XG59XG5ab2ROYU4uY3JlYXRlID0gKHBhcmFtcykgPT4ge1xuICAgIHJldHVybiBuZXcgWm9kTmFOKHtcbiAgICAgICAgdHlwZU5hbWU6IFpvZEZpcnN0UGFydHlUeXBlS2luZC5ab2ROYU4sXG4gICAgICAgIC4uLnByb2Nlc3NDcmVhdGVQYXJhbXMocGFyYW1zKSxcbiAgICB9KTtcbn07XG5jb25zdCBCUkFORCA9IFN5bWJvbChcInpvZF9icmFuZFwiKTtcbmNsYXNzIFpvZEJyYW5kZWQgZXh0ZW5kcyBab2RUeXBlIHtcbiAgICBfcGFyc2UoaW5wdXQpIHtcbiAgICAgICAgY29uc3QgeyBjdHggfSA9IHRoaXMuX3Byb2Nlc3NJbnB1dFBhcmFtcyhpbnB1dCk7XG4gICAgICAgIGNvbnN0IGRhdGEgPSBjdHguZGF0YTtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RlZi50eXBlLl9wYXJzZSh7XG4gICAgICAgICAgICBkYXRhLFxuICAgICAgICAgICAgcGF0aDogY3R4LnBhdGgsXG4gICAgICAgICAgICBwYXJlbnQ6IGN0eCxcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIHVud3JhcCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RlZi50eXBlO1xuICAgIH1cbn1cbmNsYXNzIFpvZFBpcGVsaW5lIGV4dGVuZHMgWm9kVHlwZSB7XG4gICAgX3BhcnNlKGlucHV0KSB7XG4gICAgICAgIGNvbnN0IHsgc3RhdHVzLCBjdHggfSA9IHRoaXMuX3Byb2Nlc3NJbnB1dFBhcmFtcyhpbnB1dCk7XG4gICAgICAgIGlmIChjdHguY29tbW9uLmFzeW5jKSB7XG4gICAgICAgICAgICBjb25zdCBoYW5kbGVBc3luYyA9IGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBpblJlc3VsdCA9IGF3YWl0IHRoaXMuX2RlZi5pbi5fcGFyc2VBc3luYyh7XG4gICAgICAgICAgICAgICAgICAgIGRhdGE6IGN0eC5kYXRhLFxuICAgICAgICAgICAgICAgICAgICBwYXRoOiBjdHgucGF0aCxcbiAgICAgICAgICAgICAgICAgICAgcGFyZW50OiBjdHgsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgaWYgKGluUmVzdWx0LnN0YXR1cyA9PT0gXCJhYm9ydGVkXCIpXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBJTlZBTElEO1xuICAgICAgICAgICAgICAgIGlmIChpblJlc3VsdC5zdGF0dXMgPT09IFwiZGlydHlcIikge1xuICAgICAgICAgICAgICAgICAgICBzdGF0dXMuZGlydHkoKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIERJUlRZKGluUmVzdWx0LnZhbHVlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9kZWYub3V0Ll9wYXJzZUFzeW5jKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6IGluUmVzdWx0LnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgcGF0aDogY3R4LnBhdGgsXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnQ6IGN0eCxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHJldHVybiBoYW5kbGVBc3luYygpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgaW5SZXN1bHQgPSB0aGlzLl9kZWYuaW4uX3BhcnNlU3luYyh7XG4gICAgICAgICAgICAgICAgZGF0YTogY3R4LmRhdGEsXG4gICAgICAgICAgICAgICAgcGF0aDogY3R4LnBhdGgsXG4gICAgICAgICAgICAgICAgcGFyZW50OiBjdHgsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGlmIChpblJlc3VsdC5zdGF0dXMgPT09IFwiYWJvcnRlZFwiKVxuICAgICAgICAgICAgICAgIHJldHVybiBJTlZBTElEO1xuICAgICAgICAgICAgaWYgKGluUmVzdWx0LnN0YXR1cyA9PT0gXCJkaXJ0eVwiKSB7XG4gICAgICAgICAgICAgICAgc3RhdHVzLmRpcnR5KCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgc3RhdHVzOiBcImRpcnR5XCIsXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiBpblJlc3VsdC52YWx1ZSxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2RlZi5vdXQuX3BhcnNlU3luYyh7XG4gICAgICAgICAgICAgICAgICAgIGRhdGE6IGluUmVzdWx0LnZhbHVlLFxuICAgICAgICAgICAgICAgICAgICBwYXRoOiBjdHgucGF0aCxcbiAgICAgICAgICAgICAgICAgICAgcGFyZW50OiBjdHgsXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgc3RhdGljIGNyZWF0ZShhLCBiKSB7XG4gICAgICAgIHJldHVybiBuZXcgWm9kUGlwZWxpbmUoe1xuICAgICAgICAgICAgaW46IGEsXG4gICAgICAgICAgICBvdXQ6IGIsXG4gICAgICAgICAgICB0eXBlTmFtZTogWm9kRmlyc3RQYXJ0eVR5cGVLaW5kLlpvZFBpcGVsaW5lLFxuICAgICAgICB9KTtcbiAgICB9XG59XG5jbGFzcyBab2RSZWFkb25seSBleHRlbmRzIFpvZFR5cGUge1xuICAgIF9wYXJzZShpbnB1dCkge1xuICAgICAgICBjb25zdCByZXN1bHQgPSB0aGlzLl9kZWYuaW5uZXJUeXBlLl9wYXJzZShpbnB1dCk7XG4gICAgICAgIGNvbnN0IGZyZWV6ZSA9IChkYXRhKSA9PiB7XG4gICAgICAgICAgICBpZiAoaXNWYWxpZChkYXRhKSkge1xuICAgICAgICAgICAgICAgIGRhdGEudmFsdWUgPSBPYmplY3QuZnJlZXplKGRhdGEudmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgICAgIH07XG4gICAgICAgIHJldHVybiBpc0FzeW5jKHJlc3VsdClcbiAgICAgICAgICAgID8gcmVzdWx0LnRoZW4oKGRhdGEpID0+IGZyZWV6ZShkYXRhKSlcbiAgICAgICAgICAgIDogZnJlZXplKHJlc3VsdCk7XG4gICAgfVxuICAgIHVud3JhcCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RlZi5pbm5lclR5cGU7XG4gICAgfVxufVxuWm9kUmVhZG9ubHkuY3JlYXRlID0gKHR5cGUsIHBhcmFtcykgPT4ge1xuICAgIHJldHVybiBuZXcgWm9kUmVhZG9ubHkoe1xuICAgICAgICBpbm5lclR5cGU6IHR5cGUsXG4gICAgICAgIHR5cGVOYW1lOiBab2RGaXJzdFBhcnR5VHlwZUtpbmQuWm9kUmVhZG9ubHksXG4gICAgICAgIC4uLnByb2Nlc3NDcmVhdGVQYXJhbXMocGFyYW1zKSxcbiAgICB9KTtcbn07XG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4vLy8vLy8vLy8vICAgICAgICAgICAgICAgICAgICAvLy8vLy8vLy8vXG4vLy8vLy8vLy8vICAgICAgei5jdXN0b20gICAgICAvLy8vLy8vLy8vXG4vLy8vLy8vLy8vICAgICAgICAgICAgICAgICAgICAvLy8vLy8vLy8vXG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG4vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXG5mdW5jdGlvbiBjbGVhblBhcmFtcyhwYXJhbXMsIGRhdGEpIHtcbiAgICBjb25zdCBwID0gdHlwZW9mIHBhcmFtcyA9PT0gXCJmdW5jdGlvblwiXG4gICAgICAgID8gcGFyYW1zKGRhdGEpXG4gICAgICAgIDogdHlwZW9mIHBhcmFtcyA9PT0gXCJzdHJpbmdcIlxuICAgICAgICAgICAgPyB7IG1lc3NhZ2U6IHBhcmFtcyB9XG4gICAgICAgICAgICA6IHBhcmFtcztcbiAgICBjb25zdCBwMiA9IHR5cGVvZiBwID09PSBcInN0cmluZ1wiID8geyBtZXNzYWdlOiBwIH0gOiBwO1xuICAgIHJldHVybiBwMjtcbn1cbmZ1bmN0aW9uIGN1c3RvbShjaGVjaywgX3BhcmFtcyA9IHt9LCBcbi8qKlxuICogQGRlcHJlY2F0ZWRcbiAqXG4gKiBQYXNzIGBmYXRhbGAgaW50byB0aGUgcGFyYW1zIG9iamVjdCBpbnN0ZWFkOlxuICpcbiAqIGBgYHRzXG4gKiB6LnN0cmluZygpLmN1c3RvbSgodmFsKSA9PiB2YWwubGVuZ3RoID4gNSwgeyBmYXRhbDogZmFsc2UgfSlcbiAqIGBgYFxuICpcbiAqL1xuZmF0YWwpIHtcbiAgICBpZiAoY2hlY2spXG4gICAgICAgIHJldHVybiBab2RBbnkuY3JlYXRlKCkuc3VwZXJSZWZpbmUoKGRhdGEsIGN0eCkgPT4ge1xuICAgICAgICAgICAgdmFyIF9hLCBfYjtcbiAgICAgICAgICAgIGNvbnN0IHIgPSBjaGVjayhkYXRhKTtcbiAgICAgICAgICAgIGlmIChyIGluc3RhbmNlb2YgUHJvbWlzZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiByLnRoZW4oKHIpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIF9hLCBfYjtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwYXJhbXMgPSBjbGVhblBhcmFtcyhfcGFyYW1zLCBkYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9mYXRhbCA9IChfYiA9IChfYSA9IHBhcmFtcy5mYXRhbCkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogZmF0YWwpICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICBjdHguYWRkSXNzdWUoeyBjb2RlOiBcImN1c3RvbVwiLCAuLi5wYXJhbXMsIGZhdGFsOiBfZmF0YWwgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICghcikge1xuICAgICAgICAgICAgICAgIGNvbnN0IHBhcmFtcyA9IGNsZWFuUGFyYW1zKF9wYXJhbXMsIGRhdGEpO1xuICAgICAgICAgICAgICAgIGNvbnN0IF9mYXRhbCA9IChfYiA9IChfYSA9IHBhcmFtcy5mYXRhbCkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogZmF0YWwpICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6IHRydWU7XG4gICAgICAgICAgICAgICAgY3R4LmFkZElzc3VlKHsgY29kZTogXCJjdXN0b21cIiwgLi4ucGFyYW1zLCBmYXRhbDogX2ZhdGFsIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9KTtcbiAgICByZXR1cm4gWm9kQW55LmNyZWF0ZSgpO1xufVxuY29uc3QgbGF0ZSA9IHtcbiAgICBvYmplY3Q6IFpvZE9iamVjdC5sYXp5Y3JlYXRlLFxufTtcbnZhciBab2RGaXJzdFBhcnR5VHlwZUtpbmQ7XG4oZnVuY3Rpb24gKFpvZEZpcnN0UGFydHlUeXBlS2luZCkge1xuICAgIFpvZEZpcnN0UGFydHlUeXBlS2luZFtcIlpvZFN0cmluZ1wiXSA9IFwiWm9kU3RyaW5nXCI7XG4gICAgWm9kRmlyc3RQYXJ0eVR5cGVLaW5kW1wiWm9kTnVtYmVyXCJdID0gXCJab2ROdW1iZXJcIjtcbiAgICBab2RGaXJzdFBhcnR5VHlwZUtpbmRbXCJab2ROYU5cIl0gPSBcIlpvZE5hTlwiO1xuICAgIFpvZEZpcnN0UGFydHlUeXBlS2luZFtcIlpvZEJpZ0ludFwiXSA9IFwiWm9kQmlnSW50XCI7XG4gICAgWm9kRmlyc3RQYXJ0eVR5cGVLaW5kW1wiWm9kQm9vbGVhblwiXSA9IFwiWm9kQm9vbGVhblwiO1xuICAgIFpvZEZpcnN0UGFydHlUeXBlS2luZFtcIlpvZERhdGVcIl0gPSBcIlpvZERhdGVcIjtcbiAgICBab2RGaXJzdFBhcnR5VHlwZUtpbmRbXCJab2RTeW1ib2xcIl0gPSBcIlpvZFN5bWJvbFwiO1xuICAgIFpvZEZpcnN0UGFydHlUeXBlS2luZFtcIlpvZFVuZGVmaW5lZFwiXSA9IFwiWm9kVW5kZWZpbmVkXCI7XG4gICAgWm9kRmlyc3RQYXJ0eVR5cGVLaW5kW1wiWm9kTnVsbFwiXSA9IFwiWm9kTnVsbFwiO1xuICAgIFpvZEZpcnN0UGFydHlUeXBlS2luZFtcIlpvZEFueVwiXSA9IFwiWm9kQW55XCI7XG4gICAgWm9kRmlyc3RQYXJ0eVR5cGVLaW5kW1wiWm9kVW5rbm93blwiXSA9IFwiWm9kVW5rbm93blwiO1xuICAgIFpvZEZpcnN0UGFydHlUeXBlS2luZFtcIlpvZE5ldmVyXCJdID0gXCJab2ROZXZlclwiO1xuICAgIFpvZEZpcnN0UGFydHlUeXBlS2luZFtcIlpvZFZvaWRcIl0gPSBcIlpvZFZvaWRcIjtcbiAgICBab2RGaXJzdFBhcnR5VHlwZUtpbmRbXCJab2RBcnJheVwiXSA9IFwiWm9kQXJyYXlcIjtcbiAgICBab2RGaXJzdFBhcnR5VHlwZUtpbmRbXCJab2RPYmplY3RcIl0gPSBcIlpvZE9iamVjdFwiO1xuICAgIFpvZEZpcnN0UGFydHlUeXBlS2luZFtcIlpvZFVuaW9uXCJdID0gXCJab2RVbmlvblwiO1xuICAgIFpvZEZpcnN0UGFydHlUeXBlS2luZFtcIlpvZERpc2NyaW1pbmF0ZWRVbmlvblwiXSA9IFwiWm9kRGlzY3JpbWluYXRlZFVuaW9uXCI7XG4gICAgWm9kRmlyc3RQYXJ0eVR5cGVLaW5kW1wiWm9kSW50ZXJzZWN0aW9uXCJdID0gXCJab2RJbnRlcnNlY3Rpb25cIjtcbiAgICBab2RGaXJzdFBhcnR5VHlwZUtpbmRbXCJab2RUdXBsZVwiXSA9IFwiWm9kVHVwbGVcIjtcbiAgICBab2RGaXJzdFBhcnR5VHlwZUtpbmRbXCJab2RSZWNvcmRcIl0gPSBcIlpvZFJlY29yZFwiO1xuICAgIFpvZEZpcnN0UGFydHlUeXBlS2luZFtcIlpvZE1hcFwiXSA9IFwiWm9kTWFwXCI7XG4gICAgWm9kRmlyc3RQYXJ0eVR5cGVLaW5kW1wiWm9kU2V0XCJdID0gXCJab2RTZXRcIjtcbiAgICBab2RGaXJzdFBhcnR5VHlwZUtpbmRbXCJab2RGdW5jdGlvblwiXSA9IFwiWm9kRnVuY3Rpb25cIjtcbiAgICBab2RGaXJzdFBhcnR5VHlwZUtpbmRbXCJab2RMYXp5XCJdID0gXCJab2RMYXp5XCI7XG4gICAgWm9kRmlyc3RQYXJ0eVR5cGVLaW5kW1wiWm9kTGl0ZXJhbFwiXSA9IFwiWm9kTGl0ZXJhbFwiO1xuICAgIFpvZEZpcnN0UGFydHlUeXBlS2luZFtcIlpvZEVudW1cIl0gPSBcIlpvZEVudW1cIjtcbiAgICBab2RGaXJzdFBhcnR5VHlwZUtpbmRbXCJab2RFZmZlY3RzXCJdID0gXCJab2RFZmZlY3RzXCI7XG4gICAgWm9kRmlyc3RQYXJ0eVR5cGVLaW5kW1wiWm9kTmF0aXZlRW51bVwiXSA9IFwiWm9kTmF0aXZlRW51bVwiO1xuICAgIFpvZEZpcnN0UGFydHlUeXBlS2luZFtcIlpvZE9wdGlvbmFsXCJdID0gXCJab2RPcHRpb25hbFwiO1xuICAgIFpvZEZpcnN0UGFydHlUeXBlS2luZFtcIlpvZE51bGxhYmxlXCJdID0gXCJab2ROdWxsYWJsZVwiO1xuICAgIFpvZEZpcnN0UGFydHlUeXBlS2luZFtcIlpvZERlZmF1bHRcIl0gPSBcIlpvZERlZmF1bHRcIjtcbiAgICBab2RGaXJzdFBhcnR5VHlwZUtpbmRbXCJab2RDYXRjaFwiXSA9IFwiWm9kQ2F0Y2hcIjtcbiAgICBab2RGaXJzdFBhcnR5VHlwZUtpbmRbXCJab2RQcm9taXNlXCJdID0gXCJab2RQcm9taXNlXCI7XG4gICAgWm9kRmlyc3RQYXJ0eVR5cGVLaW5kW1wiWm9kQnJhbmRlZFwiXSA9IFwiWm9kQnJhbmRlZFwiO1xuICAgIFpvZEZpcnN0UGFydHlUeXBlS2luZFtcIlpvZFBpcGVsaW5lXCJdID0gXCJab2RQaXBlbGluZVwiO1xuICAgIFpvZEZpcnN0UGFydHlUeXBlS2luZFtcIlpvZFJlYWRvbmx5XCJdID0gXCJab2RSZWFkb25seVwiO1xufSkoWm9kRmlyc3RQYXJ0eVR5cGVLaW5kIHx8IChab2RGaXJzdFBhcnR5VHlwZUtpbmQgPSB7fSkpO1xuY29uc3QgaW5zdGFuY2VPZlR5cGUgPSAoXG4vLyBjb25zdCBpbnN0YW5jZU9mVHlwZSA9IDxUIGV4dGVuZHMgbmV3ICguLi5hcmdzOiBhbnlbXSkgPT4gYW55PihcbmNscywgcGFyYW1zID0ge1xuICAgIG1lc3NhZ2U6IGBJbnB1dCBub3QgaW5zdGFuY2Ugb2YgJHtjbHMubmFtZX1gLFxufSkgPT4gY3VzdG9tKChkYXRhKSA9PiBkYXRhIGluc3RhbmNlb2YgY2xzLCBwYXJhbXMpO1xuY29uc3Qgc3RyaW5nVHlwZSA9IFpvZFN0cmluZy5jcmVhdGU7XG5jb25zdCBudW1iZXJUeXBlID0gWm9kTnVtYmVyLmNyZWF0ZTtcbmNvbnN0IG5hblR5cGUgPSBab2ROYU4uY3JlYXRlO1xuY29uc3QgYmlnSW50VHlwZSA9IFpvZEJpZ0ludC5jcmVhdGU7XG5jb25zdCBib29sZWFuVHlwZSA9IFpvZEJvb2xlYW4uY3JlYXRlO1xuY29uc3QgZGF0ZVR5cGUgPSBab2REYXRlLmNyZWF0ZTtcbmNvbnN0IHN5bWJvbFR5cGUgPSBab2RTeW1ib2wuY3JlYXRlO1xuY29uc3QgdW5kZWZpbmVkVHlwZSA9IFpvZFVuZGVmaW5lZC5jcmVhdGU7XG5jb25zdCBudWxsVHlwZSA9IFpvZE51bGwuY3JlYXRlO1xuY29uc3QgYW55VHlwZSA9IFpvZEFueS5jcmVhdGU7XG5jb25zdCB1bmtub3duVHlwZSA9IFpvZFVua25vd24uY3JlYXRlO1xuY29uc3QgbmV2ZXJUeXBlID0gWm9kTmV2ZXIuY3JlYXRlO1xuY29uc3Qgdm9pZFR5cGUgPSBab2RWb2lkLmNyZWF0ZTtcbmNvbnN0IGFycmF5VHlwZSA9IFpvZEFycmF5LmNyZWF0ZTtcbmNvbnN0IG9iamVjdFR5cGUgPSBab2RPYmplY3QuY3JlYXRlO1xuY29uc3Qgc3RyaWN0T2JqZWN0VHlwZSA9IFpvZE9iamVjdC5zdHJpY3RDcmVhdGU7XG5jb25zdCB1bmlvblR5cGUgPSBab2RVbmlvbi5jcmVhdGU7XG5jb25zdCBkaXNjcmltaW5hdGVkVW5pb25UeXBlID0gWm9kRGlzY3JpbWluYXRlZFVuaW9uLmNyZWF0ZTtcbmNvbnN0IGludGVyc2VjdGlvblR5cGUgPSBab2RJbnRlcnNlY3Rpb24uY3JlYXRlO1xuY29uc3QgdHVwbGVUeXBlID0gWm9kVHVwbGUuY3JlYXRlO1xuY29uc3QgcmVjb3JkVHlwZSA9IFpvZFJlY29yZC5jcmVhdGU7XG5jb25zdCBtYXBUeXBlID0gWm9kTWFwLmNyZWF0ZTtcbmNvbnN0IHNldFR5cGUgPSBab2RTZXQuY3JlYXRlO1xuY29uc3QgZnVuY3Rpb25UeXBlID0gWm9kRnVuY3Rpb24uY3JlYXRlO1xuY29uc3QgbGF6eVR5cGUgPSBab2RMYXp5LmNyZWF0ZTtcbmNvbnN0IGxpdGVyYWxUeXBlID0gWm9kTGl0ZXJhbC5jcmVhdGU7XG5jb25zdCBlbnVtVHlwZSA9IFpvZEVudW0uY3JlYXRlO1xuY29uc3QgbmF0aXZlRW51bVR5cGUgPSBab2ROYXRpdmVFbnVtLmNyZWF0ZTtcbmNvbnN0IHByb21pc2VUeXBlID0gWm9kUHJvbWlzZS5jcmVhdGU7XG5jb25zdCBlZmZlY3RzVHlwZSA9IFpvZEVmZmVjdHMuY3JlYXRlO1xuY29uc3Qgb3B0aW9uYWxUeXBlID0gWm9kT3B0aW9uYWwuY3JlYXRlO1xuY29uc3QgbnVsbGFibGVUeXBlID0gWm9kTnVsbGFibGUuY3JlYXRlO1xuY29uc3QgcHJlcHJvY2Vzc1R5cGUgPSBab2RFZmZlY3RzLmNyZWF0ZVdpdGhQcmVwcm9jZXNzO1xuY29uc3QgcGlwZWxpbmVUeXBlID0gWm9kUGlwZWxpbmUuY3JlYXRlO1xuY29uc3Qgb3N0cmluZyA9ICgpID0+IHN0cmluZ1R5cGUoKS5vcHRpb25hbCgpO1xuY29uc3Qgb251bWJlciA9ICgpID0+IG51bWJlclR5cGUoKS5vcHRpb25hbCgpO1xuY29uc3Qgb2Jvb2xlYW4gPSAoKSA9PiBib29sZWFuVHlwZSgpLm9wdGlvbmFsKCk7XG5jb25zdCBjb2VyY2UgPSB7XG4gICAgc3RyaW5nOiAoKGFyZykgPT4gWm9kU3RyaW5nLmNyZWF0ZSh7IC4uLmFyZywgY29lcmNlOiB0cnVlIH0pKSxcbiAgICBudW1iZXI6ICgoYXJnKSA9PiBab2ROdW1iZXIuY3JlYXRlKHsgLi4uYXJnLCBjb2VyY2U6IHRydWUgfSkpLFxuICAgIGJvb2xlYW46ICgoYXJnKSA9PiBab2RCb29sZWFuLmNyZWF0ZSh7XG4gICAgICAgIC4uLmFyZyxcbiAgICAgICAgY29lcmNlOiB0cnVlLFxuICAgIH0pKSxcbiAgICBiaWdpbnQ6ICgoYXJnKSA9PiBab2RCaWdJbnQuY3JlYXRlKHsgLi4uYXJnLCBjb2VyY2U6IHRydWUgfSkpLFxuICAgIGRhdGU6ICgoYXJnKSA9PiBab2REYXRlLmNyZWF0ZSh7IC4uLmFyZywgY29lcmNlOiB0cnVlIH0pKSxcbn07XG5jb25zdCBORVZFUiA9IElOVkFMSUQ7XG5cbnZhciB6ID0gLyojX19QVVJFX18qL09iamVjdC5mcmVlemUoe1xuICAgIF9fcHJvdG9fXzogbnVsbCxcbiAgICBkZWZhdWx0RXJyb3JNYXA6IGVycm9yTWFwLFxuICAgIHNldEVycm9yTWFwOiBzZXRFcnJvck1hcCxcbiAgICBnZXRFcnJvck1hcDogZ2V0RXJyb3JNYXAsXG4gICAgbWFrZUlzc3VlOiBtYWtlSXNzdWUsXG4gICAgRU1QVFlfUEFUSDogRU1QVFlfUEFUSCxcbiAgICBhZGRJc3N1ZVRvQ29udGV4dDogYWRkSXNzdWVUb0NvbnRleHQsXG4gICAgUGFyc2VTdGF0dXM6IFBhcnNlU3RhdHVzLFxuICAgIElOVkFMSUQ6IElOVkFMSUQsXG4gICAgRElSVFk6IERJUlRZLFxuICAgIE9LOiBPSyxcbiAgICBpc0Fib3J0ZWQ6IGlzQWJvcnRlZCxcbiAgICBpc0RpcnR5OiBpc0RpcnR5LFxuICAgIGlzVmFsaWQ6IGlzVmFsaWQsXG4gICAgaXNBc3luYzogaXNBc3luYyxcbiAgICBnZXQgdXRpbCAoKSB7IHJldHVybiB1dGlsOyB9LFxuICAgIGdldCBvYmplY3RVdGlsICgpIHsgcmV0dXJuIG9iamVjdFV0aWw7IH0sXG4gICAgWm9kUGFyc2VkVHlwZTogWm9kUGFyc2VkVHlwZSxcbiAgICBnZXRQYXJzZWRUeXBlOiBnZXRQYXJzZWRUeXBlLFxuICAgIFpvZFR5cGU6IFpvZFR5cGUsXG4gICAgZGF0ZXRpbWVSZWdleDogZGF0ZXRpbWVSZWdleCxcbiAgICBab2RTdHJpbmc6IFpvZFN0cmluZyxcbiAgICBab2ROdW1iZXI6IFpvZE51bWJlcixcbiAgICBab2RCaWdJbnQ6IFpvZEJpZ0ludCxcbiAgICBab2RCb29sZWFuOiBab2RCb29sZWFuLFxuICAgIFpvZERhdGU6IFpvZERhdGUsXG4gICAgWm9kU3ltYm9sOiBab2RTeW1ib2wsXG4gICAgWm9kVW5kZWZpbmVkOiBab2RVbmRlZmluZWQsXG4gICAgWm9kTnVsbDogWm9kTnVsbCxcbiAgICBab2RBbnk6IFpvZEFueSxcbiAgICBab2RVbmtub3duOiBab2RVbmtub3duLFxuICAgIFpvZE5ldmVyOiBab2ROZXZlcixcbiAgICBab2RWb2lkOiBab2RWb2lkLFxuICAgIFpvZEFycmF5OiBab2RBcnJheSxcbiAgICBab2RPYmplY3Q6IFpvZE9iamVjdCxcbiAgICBab2RVbmlvbjogWm9kVW5pb24sXG4gICAgWm9kRGlzY3JpbWluYXRlZFVuaW9uOiBab2REaXNjcmltaW5hdGVkVW5pb24sXG4gICAgWm9kSW50ZXJzZWN0aW9uOiBab2RJbnRlcnNlY3Rpb24sXG4gICAgWm9kVHVwbGU6IFpvZFR1cGxlLFxuICAgIFpvZFJlY29yZDogWm9kUmVjb3JkLFxuICAgIFpvZE1hcDogWm9kTWFwLFxuICAgIFpvZFNldDogWm9kU2V0LFxuICAgIFpvZEZ1bmN0aW9uOiBab2RGdW5jdGlvbixcbiAgICBab2RMYXp5OiBab2RMYXp5LFxuICAgIFpvZExpdGVyYWw6IFpvZExpdGVyYWwsXG4gICAgWm9kRW51bTogWm9kRW51bSxcbiAgICBab2ROYXRpdmVFbnVtOiBab2ROYXRpdmVFbnVtLFxuICAgIFpvZFByb21pc2U6IFpvZFByb21pc2UsXG4gICAgWm9kRWZmZWN0czogWm9kRWZmZWN0cyxcbiAgICBab2RUcmFuc2Zvcm1lcjogWm9kRWZmZWN0cyxcbiAgICBab2RPcHRpb25hbDogWm9kT3B0aW9uYWwsXG4gICAgWm9kTnVsbGFibGU6IFpvZE51bGxhYmxlLFxuICAgIFpvZERlZmF1bHQ6IFpvZERlZmF1bHQsXG4gICAgWm9kQ2F0Y2g6IFpvZENhdGNoLFxuICAgIFpvZE5hTjogWm9kTmFOLFxuICAgIEJSQU5EOiBCUkFORCxcbiAgICBab2RCcmFuZGVkOiBab2RCcmFuZGVkLFxuICAgIFpvZFBpcGVsaW5lOiBab2RQaXBlbGluZSxcbiAgICBab2RSZWFkb25seTogWm9kUmVhZG9ubHksXG4gICAgY3VzdG9tOiBjdXN0b20sXG4gICAgU2NoZW1hOiBab2RUeXBlLFxuICAgIFpvZFNjaGVtYTogWm9kVHlwZSxcbiAgICBsYXRlOiBsYXRlLFxuICAgIGdldCBab2RGaXJzdFBhcnR5VHlwZUtpbmQgKCkgeyByZXR1cm4gWm9kRmlyc3RQYXJ0eVR5cGVLaW5kOyB9LFxuICAgIGNvZXJjZTogY29lcmNlLFxuICAgIGFueTogYW55VHlwZSxcbiAgICBhcnJheTogYXJyYXlUeXBlLFxuICAgIGJpZ2ludDogYmlnSW50VHlwZSxcbiAgICBib29sZWFuOiBib29sZWFuVHlwZSxcbiAgICBkYXRlOiBkYXRlVHlwZSxcbiAgICBkaXNjcmltaW5hdGVkVW5pb246IGRpc2NyaW1pbmF0ZWRVbmlvblR5cGUsXG4gICAgZWZmZWN0OiBlZmZlY3RzVHlwZSxcbiAgICAnZW51bSc6IGVudW1UeXBlLFxuICAgICdmdW5jdGlvbic6IGZ1bmN0aW9uVHlwZSxcbiAgICAnaW5zdGFuY2VvZic6IGluc3RhbmNlT2ZUeXBlLFxuICAgIGludGVyc2VjdGlvbjogaW50ZXJzZWN0aW9uVHlwZSxcbiAgICBsYXp5OiBsYXp5VHlwZSxcbiAgICBsaXRlcmFsOiBsaXRlcmFsVHlwZSxcbiAgICBtYXA6IG1hcFR5cGUsXG4gICAgbmFuOiBuYW5UeXBlLFxuICAgIG5hdGl2ZUVudW06IG5hdGl2ZUVudW1UeXBlLFxuICAgIG5ldmVyOiBuZXZlclR5cGUsXG4gICAgJ251bGwnOiBudWxsVHlwZSxcbiAgICBudWxsYWJsZTogbnVsbGFibGVUeXBlLFxuICAgIG51bWJlcjogbnVtYmVyVHlwZSxcbiAgICBvYmplY3Q6IG9iamVjdFR5cGUsXG4gICAgb2Jvb2xlYW46IG9ib29sZWFuLFxuICAgIG9udW1iZXI6IG9udW1iZXIsXG4gICAgb3B0aW9uYWw6IG9wdGlvbmFsVHlwZSxcbiAgICBvc3RyaW5nOiBvc3RyaW5nLFxuICAgIHBpcGVsaW5lOiBwaXBlbGluZVR5cGUsXG4gICAgcHJlcHJvY2VzczogcHJlcHJvY2Vzc1R5cGUsXG4gICAgcHJvbWlzZTogcHJvbWlzZVR5cGUsXG4gICAgcmVjb3JkOiByZWNvcmRUeXBlLFxuICAgIHNldDogc2V0VHlwZSxcbiAgICBzdHJpY3RPYmplY3Q6IHN0cmljdE9iamVjdFR5cGUsXG4gICAgc3RyaW5nOiBzdHJpbmdUeXBlLFxuICAgIHN5bWJvbDogc3ltYm9sVHlwZSxcbiAgICB0cmFuc2Zvcm1lcjogZWZmZWN0c1R5cGUsXG4gICAgdHVwbGU6IHR1cGxlVHlwZSxcbiAgICAndW5kZWZpbmVkJzogdW5kZWZpbmVkVHlwZSxcbiAgICB1bmlvbjogdW5pb25UeXBlLFxuICAgIHVua25vd246IHVua25vd25UeXBlLFxuICAgICd2b2lkJzogdm9pZFR5cGUsXG4gICAgTkVWRVI6IE5FVkVSLFxuICAgIFpvZElzc3VlQ29kZTogWm9kSXNzdWVDb2RlLFxuICAgIHF1b3RlbGVzc0pzb246IHF1b3RlbGVzc0pzb24sXG4gICAgWm9kRXJyb3I6IFpvZEVycm9yXG59KTtcblxuZXhwb3J0IHsgQlJBTkQsIERJUlRZLCBFTVBUWV9QQVRILCBJTlZBTElELCBORVZFUiwgT0ssIFBhcnNlU3RhdHVzLCBab2RUeXBlIGFzIFNjaGVtYSwgWm9kQW55LCBab2RBcnJheSwgWm9kQmlnSW50LCBab2RCb29sZWFuLCBab2RCcmFuZGVkLCBab2RDYXRjaCwgWm9kRGF0ZSwgWm9kRGVmYXVsdCwgWm9kRGlzY3JpbWluYXRlZFVuaW9uLCBab2RFZmZlY3RzLCBab2RFbnVtLCBab2RFcnJvciwgWm9kRmlyc3RQYXJ0eVR5cGVLaW5kLCBab2RGdW5jdGlvbiwgWm9kSW50ZXJzZWN0aW9uLCBab2RJc3N1ZUNvZGUsIFpvZExhenksIFpvZExpdGVyYWwsIFpvZE1hcCwgWm9kTmFOLCBab2ROYXRpdmVFbnVtLCBab2ROZXZlciwgWm9kTnVsbCwgWm9kTnVsbGFibGUsIFpvZE51bWJlciwgWm9kT2JqZWN0LCBab2RPcHRpb25hbCwgWm9kUGFyc2VkVHlwZSwgWm9kUGlwZWxpbmUsIFpvZFByb21pc2UsIFpvZFJlYWRvbmx5LCBab2RSZWNvcmQsIFpvZFR5cGUgYXMgWm9kU2NoZW1hLCBab2RTZXQsIFpvZFN0cmluZywgWm9kU3ltYm9sLCBab2RFZmZlY3RzIGFzIFpvZFRyYW5zZm9ybWVyLCBab2RUdXBsZSwgWm9kVHlwZSwgWm9kVW5kZWZpbmVkLCBab2RVbmlvbiwgWm9kVW5rbm93biwgWm9kVm9pZCwgYWRkSXNzdWVUb0NvbnRleHQsIGFueVR5cGUgYXMgYW55LCBhcnJheVR5cGUgYXMgYXJyYXksIGJpZ0ludFR5cGUgYXMgYmlnaW50LCBib29sZWFuVHlwZSBhcyBib29sZWFuLCBjb2VyY2UsIGN1c3RvbSwgZGF0ZVR5cGUgYXMgZGF0ZSwgZGF0ZXRpbWVSZWdleCwgeiBhcyBkZWZhdWx0LCBlcnJvck1hcCBhcyBkZWZhdWx0RXJyb3JNYXAsIGRpc2NyaW1pbmF0ZWRVbmlvblR5cGUgYXMgZGlzY3JpbWluYXRlZFVuaW9uLCBlZmZlY3RzVHlwZSBhcyBlZmZlY3QsIGVudW1UeXBlIGFzIGVudW0sIGZ1bmN0aW9uVHlwZSBhcyBmdW5jdGlvbiwgZ2V0RXJyb3JNYXAsIGdldFBhcnNlZFR5cGUsIGluc3RhbmNlT2ZUeXBlIGFzIGluc3RhbmNlb2YsIGludGVyc2VjdGlvblR5cGUgYXMgaW50ZXJzZWN0aW9uLCBpc0Fib3J0ZWQsIGlzQXN5bmMsIGlzRGlydHksIGlzVmFsaWQsIGxhdGUsIGxhenlUeXBlIGFzIGxhenksIGxpdGVyYWxUeXBlIGFzIGxpdGVyYWwsIG1ha2VJc3N1ZSwgbWFwVHlwZSBhcyBtYXAsIG5hblR5cGUgYXMgbmFuLCBuYXRpdmVFbnVtVHlwZSBhcyBuYXRpdmVFbnVtLCBuZXZlclR5cGUgYXMgbmV2ZXIsIG51bGxUeXBlIGFzIG51bGwsIG51bGxhYmxlVHlwZSBhcyBudWxsYWJsZSwgbnVtYmVyVHlwZSBhcyBudW1iZXIsIG9iamVjdFR5cGUgYXMgb2JqZWN0LCBvYmplY3RVdGlsLCBvYm9vbGVhbiwgb251bWJlciwgb3B0aW9uYWxUeXBlIGFzIG9wdGlvbmFsLCBvc3RyaW5nLCBwaXBlbGluZVR5cGUgYXMgcGlwZWxpbmUsIHByZXByb2Nlc3NUeXBlIGFzIHByZXByb2Nlc3MsIHByb21pc2VUeXBlIGFzIHByb21pc2UsIHF1b3RlbGVzc0pzb24sIHJlY29yZFR5cGUgYXMgcmVjb3JkLCBzZXRUeXBlIGFzIHNldCwgc2V0RXJyb3JNYXAsIHN0cmljdE9iamVjdFR5cGUgYXMgc3RyaWN0T2JqZWN0LCBzdHJpbmdUeXBlIGFzIHN0cmluZywgc3ltYm9sVHlwZSBhcyBzeW1ib2wsIGVmZmVjdHNUeXBlIGFzIHRyYW5zZm9ybWVyLCB0dXBsZVR5cGUgYXMgdHVwbGUsIHVuZGVmaW5lZFR5cGUgYXMgdW5kZWZpbmVkLCB1bmlvblR5cGUgYXMgdW5pb24sIHVua25vd25UeXBlIGFzIHVua25vd24sIHV0aWwsIHZvaWRUeXBlIGFzIHZvaWQsIHogfTtcbiIsIG51bGwsIG51bGwsICJpbXBvcnQgeyBTQ0hFTUVTIH0gZnJvbSBcIi4vdXJpXCI7XG5cbmltcG9ydCBodHRwIGZyb20gXCIuL3NjaGVtZXMvaHR0cFwiO1xuU0NIRU1FU1todHRwLnNjaGVtZV0gPSBodHRwO1xuXG5pbXBvcnQgaHR0cHMgZnJvbSBcIi4vc2NoZW1lcy9odHRwc1wiO1xuU0NIRU1FU1todHRwcy5zY2hlbWVdID0gaHR0cHM7XG5cbmltcG9ydCB3cyBmcm9tIFwiLi9zY2hlbWVzL3dzXCI7XG5TQ0hFTUVTW3dzLnNjaGVtZV0gPSB3cztcblxuaW1wb3J0IHdzcyBmcm9tIFwiLi9zY2hlbWVzL3dzc1wiO1xuU0NIRU1FU1t3c3Muc2NoZW1lXSA9IHdzcztcblxuaW1wb3J0IG1haWx0byBmcm9tIFwiLi9zY2hlbWVzL21haWx0b1wiO1xuU0NIRU1FU1ttYWlsdG8uc2NoZW1lXSA9IG1haWx0bztcblxuaW1wb3J0IHVybiBmcm9tIFwiLi9zY2hlbWVzL3VyblwiO1xuU0NIRU1FU1t1cm4uc2NoZW1lXSA9IHVybjtcblxuaW1wb3J0IHV1aWQgZnJvbSBcIi4vc2NoZW1lcy91cm4tdXVpZFwiO1xuU0NIRU1FU1t1dWlkLnNjaGVtZV0gPSB1dWlkO1xuXG5leHBvcnQgKiBmcm9tIFwiLi91cmlcIjtcbiIsICJpbXBvcnQgeyBVUklTY2hlbWVIYW5kbGVyLCBVUklDb21wb25lbnRzLCBVUklPcHRpb25zIH0gZnJvbSBcIi4uL3VyaVwiO1xuaW1wb3J0IHsgVVJOQ29tcG9uZW50cyB9IGZyb20gXCIuL3VyblwiO1xuaW1wb3J0IHsgU0NIRU1FUyB9IGZyb20gXCIuLi91cmlcIjtcblxuZXhwb3J0IGludGVyZmFjZSBVVUlEQ29tcG9uZW50cyBleHRlbmRzIFVSTkNvbXBvbmVudHMge1xuXHR1dWlkPzogc3RyaW5nO1xufVxuXG5jb25zdCBVVUlEID0gL15bMC05QS1GYS1mXXs4fSg/OlxcLVswLTlBLUZhLWZdezR9KXszfVxcLVswLTlBLUZhLWZdezEyfSQvO1xuY29uc3QgVVVJRF9QQVJTRSA9IC9eWzAtOUEtRmEtZlxcLV17MzZ9LztcblxuLy9SRkMgNDEyMlxuY29uc3QgaGFuZGxlcjpVUklTY2hlbWVIYW5kbGVyPFVVSURDb21wb25lbnRzLCBVUklPcHRpb25zLCBVUk5Db21wb25lbnRzPiA9IHtcblx0c2NoZW1lIDogXCJ1cm46dXVpZFwiLFxuXG5cdHBhcnNlIDogZnVuY3Rpb24gKHVybkNvbXBvbmVudHM6VVJOQ29tcG9uZW50cywgb3B0aW9uczpVUklPcHRpb25zKTpVVUlEQ29tcG9uZW50cyB7XG5cdFx0Y29uc3QgdXVpZENvbXBvbmVudHMgPSB1cm5Db21wb25lbnRzIGFzIFVVSURDb21wb25lbnRzO1xuXHRcdHV1aWRDb21wb25lbnRzLnV1aWQgPSB1dWlkQ29tcG9uZW50cy5uc3M7XG5cdFx0dXVpZENvbXBvbmVudHMubnNzID0gdW5kZWZpbmVkO1xuXG5cdFx0aWYgKCFvcHRpb25zLnRvbGVyYW50ICYmICghdXVpZENvbXBvbmVudHMudXVpZCB8fCAhdXVpZENvbXBvbmVudHMudXVpZC5tYXRjaChVVUlEKSkpIHtcblx0XHRcdHV1aWRDb21wb25lbnRzLmVycm9yID0gdXVpZENvbXBvbmVudHMuZXJyb3IgfHwgXCJVVUlEIGlzIG5vdCB2YWxpZC5cIjtcblx0XHR9XG5cblx0XHRyZXR1cm4gdXVpZENvbXBvbmVudHM7XG5cdH0sXG5cblx0c2VyaWFsaXplIDogZnVuY3Rpb24gKHV1aWRDb21wb25lbnRzOlVVSURDb21wb25lbnRzLCBvcHRpb25zOlVSSU9wdGlvbnMpOlVSTkNvbXBvbmVudHMge1xuXHRcdGNvbnN0IHVybkNvbXBvbmVudHMgPSB1dWlkQ29tcG9uZW50cyBhcyBVUk5Db21wb25lbnRzO1xuXHRcdC8vbm9ybWFsaXplIFVVSURcblx0XHR1cm5Db21wb25lbnRzLm5zcyA9ICh1dWlkQ29tcG9uZW50cy51dWlkIHx8IFwiXCIpLnRvTG93ZXJDYXNlKCk7XG5cdFx0cmV0dXJuIHVybkNvbXBvbmVudHM7XG5cdH0sXG59O1xuXG5leHBvcnQgZGVmYXVsdCBoYW5kbGVyOyIsICJpbXBvcnQgeyBVUklTY2hlbWVIYW5kbGVyLCBVUklDb21wb25lbnRzLCBVUklPcHRpb25zIH0gZnJvbSBcIi4uL3VyaVwiO1xuaW1wb3J0IHsgcGN0RW5jQ2hhciwgU0NIRU1FUyB9IGZyb20gXCIuLi91cmlcIjtcblxuZXhwb3J0IGludGVyZmFjZSBVUk5Db21wb25lbnRzIGV4dGVuZHMgVVJJQ29tcG9uZW50cyB7XG5cdG5pZD86c3RyaW5nO1xuXHRuc3M/OnN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBVUk5PcHRpb25zIGV4dGVuZHMgVVJJT3B0aW9ucyB7XG5cdG5pZD86c3RyaW5nO1xufVxuXG5jb25zdCBOSUQkID0gXCIoPzpbMC05QS1aYS16XVswLTlBLVphLXpcXFxcLV17MSwzMX0pXCI7XG5jb25zdCBQQ1RfRU5DT0RFRCQgPSBcIig/OlxcXFwlWzAtOUEtRmEtZl17Mn0pXCI7XG5jb25zdCBUUkFOUyQkID0gXCJbMC05QS1aYS16XFxcXChcXFxcKVxcXFwrXFxcXCxcXFxcLVxcXFwuXFxcXDpcXFxcPVxcXFxAXFxcXDtcXFxcJFxcXFxfXFxcXCFcXFxcKlxcXFwnXFxcXC9cXFxcP1xcXFwjXVwiO1xuY29uc3QgTlNTJCA9IFwiKD86KD86XCIgKyBQQ1RfRU5DT0RFRCQgKyBcInxcIiArIFRSQU5TJCQgKyBcIikrKVwiO1xuY29uc3QgVVJOX1NDSEVNRSA9IG5ldyBSZWdFeHAoXCJedXJuXFxcXDooXCIgKyBOSUQkICsgXCIpJFwiKTtcbmNvbnN0IFVSTl9QQVRIID0gbmV3IFJlZ0V4cChcIl4oXCIgKyBOSUQkICsgXCIpXFxcXDooXCIgKyBOU1MkICsgXCIpJFwiKTtcbmNvbnN0IFVSTl9QQVJTRSA9IC9eKFteXFw6XSspXFw6KC4qKS87XG5jb25zdCBVUk5fRVhDTFVERUQgPSAvW1xceDAwLVxceDIwXFxcXFxcXCJcXCZcXDxcXD5cXFtcXF1cXF5cXGBcXHtcXHxcXH1cXH5cXHg3Ri1cXHhGRl0vZztcblxuLy9SRkMgMjE0MVxuY29uc3QgaGFuZGxlcjpVUklTY2hlbWVIYW5kbGVyPFVSTkNvbXBvbmVudHMsVVJOT3B0aW9ucz4gPSB7XG5cdHNjaGVtZSA6IFwidXJuXCIsXG5cblx0cGFyc2UgOiBmdW5jdGlvbiAoY29tcG9uZW50czpVUklDb21wb25lbnRzLCBvcHRpb25zOlVSTk9wdGlvbnMpOlVSTkNvbXBvbmVudHMge1xuXHRcdGNvbnN0IG1hdGNoZXMgPSBjb21wb25lbnRzLnBhdGggJiYgY29tcG9uZW50cy5wYXRoLm1hdGNoKFVSTl9QQVJTRSk7XG5cdFx0bGV0IHVybkNvbXBvbmVudHMgPSBjb21wb25lbnRzIGFzIFVSTkNvbXBvbmVudHM7XG5cblx0XHRpZiAobWF0Y2hlcykge1xuXHRcdFx0Y29uc3Qgc2NoZW1lID0gb3B0aW9ucy5zY2hlbWUgfHwgdXJuQ29tcG9uZW50cy5zY2hlbWUgfHwgXCJ1cm5cIjtcblx0XHRcdGNvbnN0IG5pZCA9IG1hdGNoZXNbMV0udG9Mb3dlckNhc2UoKTtcblx0XHRcdGNvbnN0IG5zcyA9IG1hdGNoZXNbMl07XG5cdFx0XHRjb25zdCB1cm5TY2hlbWUgPSBgJHtzY2hlbWV9OiR7b3B0aW9ucy5uaWQgfHwgbmlkfWA7XG5cdFx0XHRjb25zdCBzY2hlbWVIYW5kbGVyID0gU0NIRU1FU1t1cm5TY2hlbWVdO1xuXG5cdFx0XHR1cm5Db21wb25lbnRzLm5pZCA9IG5pZDtcblx0XHRcdHVybkNvbXBvbmVudHMubnNzID0gbnNzO1xuXHRcdFx0dXJuQ29tcG9uZW50cy5wYXRoID0gdW5kZWZpbmVkO1xuXG5cdFx0XHRpZiAoc2NoZW1lSGFuZGxlcikge1xuXHRcdFx0XHR1cm5Db21wb25lbnRzID0gc2NoZW1lSGFuZGxlci5wYXJzZSh1cm5Db21wb25lbnRzLCBvcHRpb25zKSBhcyBVUk5Db21wb25lbnRzO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHR1cm5Db21wb25lbnRzLmVycm9yID0gdXJuQ29tcG9uZW50cy5lcnJvciB8fCBcIlVSTiBjYW4gbm90IGJlIHBhcnNlZC5cIjtcblx0XHR9XG5cblx0XHRyZXR1cm4gdXJuQ29tcG9uZW50cztcblx0fSxcblxuXHRzZXJpYWxpemUgOiBmdW5jdGlvbiAodXJuQ29tcG9uZW50czpVUk5Db21wb25lbnRzLCBvcHRpb25zOlVSTk9wdGlvbnMpOlVSSUNvbXBvbmVudHMge1xuXHRcdGNvbnN0IHNjaGVtZSA9IG9wdGlvbnMuc2NoZW1lIHx8IHVybkNvbXBvbmVudHMuc2NoZW1lIHx8IFwidXJuXCI7XG5cdFx0Y29uc3QgbmlkID0gdXJuQ29tcG9uZW50cy5uaWQ7XG5cdFx0Y29uc3QgdXJuU2NoZW1lID0gYCR7c2NoZW1lfToke29wdGlvbnMubmlkIHx8IG5pZH1gO1xuXHRcdGNvbnN0IHNjaGVtZUhhbmRsZXIgPSBTQ0hFTUVTW3VyblNjaGVtZV07XG5cblx0XHRpZiAoc2NoZW1lSGFuZGxlcikge1xuXHRcdFx0dXJuQ29tcG9uZW50cyA9IHNjaGVtZUhhbmRsZXIuc2VyaWFsaXplKHVybkNvbXBvbmVudHMsIG9wdGlvbnMpIGFzIFVSTkNvbXBvbmVudHM7XG5cdFx0fVxuXG5cdFx0Y29uc3QgdXJpQ29tcG9uZW50cyA9IHVybkNvbXBvbmVudHMgYXMgVVJJQ29tcG9uZW50cztcblx0XHRjb25zdCBuc3MgPSB1cm5Db21wb25lbnRzLm5zcztcblx0XHR1cmlDb21wb25lbnRzLnBhdGggPSBgJHtuaWQgfHwgb3B0aW9ucy5uaWR9OiR7bnNzfWA7XG5cblx0XHRyZXR1cm4gdXJpQ29tcG9uZW50cztcblx0fSxcbn07XG5cbmV4cG9ydCBkZWZhdWx0IGhhbmRsZXI7IiwgImltcG9ydCB7IFVSSVNjaGVtZUhhbmRsZXIsIFVSSUNvbXBvbmVudHMsIFVSSU9wdGlvbnMgfSBmcm9tIFwiLi4vdXJpXCI7XG5pbXBvcnQgeyBwY3RFbmNDaGFyLCBwY3REZWNDaGFycywgdW5lc2NhcGVDb21wb25lbnQgfSBmcm9tIFwiLi4vdXJpXCI7XG5pbXBvcnQgcHVueWNvZGUgZnJvbSBcInB1bnljb2RlXCI7XG5pbXBvcnQgeyBtZXJnZSwgc3ViZXhwLCB0b1VwcGVyQ2FzZSwgdG9BcnJheSB9IGZyb20gXCIuLi91dGlsXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgTWFpbHRvSGVhZGVycyB7XG5cdFtoZm5hbWU6c3RyaW5nXTpzdHJpbmdcbn1cblxuZXhwb3J0IGludGVyZmFjZSBNYWlsdG9Db21wb25lbnRzIGV4dGVuZHMgVVJJQ29tcG9uZW50cyB7XG5cdHRvOkFycmF5PHN0cmluZz4sXG5cdGhlYWRlcnM/Ok1haWx0b0hlYWRlcnMsXG5cdHN1YmplY3Q/OnN0cmluZyxcblx0Ym9keT86c3RyaW5nXG59XG5cbmNvbnN0IE86TWFpbHRvSGVhZGVycyA9IHt9O1xuY29uc3QgaXNJUkkgPSB0cnVlO1xuXG4vL1JGQyAzOTg2XG5jb25zdCBVTlJFU0VSVkVEJCQgPSBcIltBLVphLXowLTlcXFxcLVxcXFwuXFxcXF9cXFxcflwiICsgKGlzSVJJID8gXCJcXFxceEEwLVxcXFx1MjAwRFxcXFx1MjAxMC1cXFxcdTIwMjlcXFxcdTIwMkYtXFxcXHVEN0ZGXFxcXHVGOTAwLVxcXFx1RkRDRlxcXFx1RkRGMC1cXFxcdUZGRUZcIiA6IFwiXCIpICsgXCJdXCI7XG5jb25zdCBIRVhESUckJCA9IFwiWzAtOUEtRmEtZl1cIjsgIC8vY2FzZS1pbnNlbnNpdGl2ZVxuY29uc3QgUENUX0VOQ09ERUQkID0gc3ViZXhwKHN1YmV4cChcIiVbRUZlZl1cIiArIEhFWERJRyQkICsgXCIlXCIgKyBIRVhESUckJCArIEhFWERJRyQkICsgXCIlXCIgKyBIRVhESUckJCArIEhFWERJRyQkKSArIFwifFwiICsgc3ViZXhwKFwiJVs4OUEtRmEtZl1cIiArIEhFWERJRyQkICsgXCIlXCIgKyBIRVhESUckJCArIEhFWERJRyQkKSArIFwifFwiICsgc3ViZXhwKFwiJVwiICsgSEVYRElHJCQgKyBIRVhESUckJCkpOyAgLy9leHBhbmRlZFxuXG4vL1JGQyA1MzIyLCBleGNlcHQgdGhlc2Ugc3ltYm9scyBhcyBwZXIgUkZDIDYwNjg6IEAgOiAvID8gIyBbIF0gJiA7ID1cbi8vY29uc3QgQVRFWFQkJCA9IFwiW0EtWmEtejAtOVxcXFwhXFxcXCNcXFxcJFxcXFwlXFxcXCZcXFxcJ1xcXFwqXFxcXCtcXFxcLVxcXFwvXFxcXD1cXFxcP1xcXFxeXFxcXF9cXFxcYFxcXFx7XFxcXHxcXFxcfVxcXFx+XVwiO1xuLy9jb25zdCBXU1AkJCA9IFwiW1xcXFx4MjBcXFxceDA5XVwiO1xuLy9jb25zdCBPQlNfUVRFWFQkJCA9IFwiW1xcXFx4MDEtXFxcXHgwOFxcXFx4MEJcXFxceDBDXFxcXHgwRS1cXFxceDFGXFxcXHg3Rl1cIjsgIC8vKCVkMS04IC8gJWQxMS0xMiAvICVkMTQtMzEgLyAlZDEyNylcbi8vY29uc3QgUVRFWFQkJCA9IG1lcmdlKFwiW1xcXFx4MjFcXFxceDIzLVxcXFx4NUJcXFxceDVELVxcXFx4N0VdXCIsIE9CU19RVEVYVCQkKTsgIC8vJWQzMyAvICVkMzUtOTEgLyAlZDkzLTEyNiAvIG9icy1xdGV4dFxuLy9jb25zdCBWQ0hBUiQkID0gXCJbXFxcXHgyMS1cXFxceDdFXVwiO1xuLy9jb25zdCBXU1AkJCA9IFwiW1xcXFx4MjBcXFxceDA5XVwiO1xuLy9jb25zdCBPQlNfUVAkID0gc3ViZXhwKFwiXFxcXFxcXFxcIiArIG1lcmdlKFwiW1xcXFx4MDBcXFxceDBEXFxcXHgwQV1cIiwgT0JTX1FURVhUJCQpKTsgIC8vJWQwIC8gQ1IgLyBMRiAvIG9icy1xdGV4dFxuLy9jb25zdCBGV1MkID0gc3ViZXhwKHN1YmV4cChXU1AkJCArIFwiKlwiICsgXCJcXFxceDBEXFxcXHgwQVwiKSArIFwiP1wiICsgV1NQJCQgKyBcIitcIik7XG4vL2NvbnN0IFFVT1RFRF9QQUlSJCA9IHN1YmV4cChzdWJleHAoXCJcXFxcXFxcXFwiICsgc3ViZXhwKFZDSEFSJCQgKyBcInxcIiArIFdTUCQkKSkgKyBcInxcIiArIE9CU19RUCQpO1xuLy9jb25zdCBRVU9URURfU1RSSU5HJCA9IHN1YmV4cCgnXFxcXFwiJyArIHN1YmV4cChGV1MkICsgXCI/XCIgKyBRQ09OVEVOVCQpICsgXCIqXCIgKyBGV1MkICsgXCI/XCIgKyAnXFxcXFwiJyk7XG5jb25zdCBBVEVYVCQkID0gXCJbQS1aYS16MC05XFxcXCFcXFxcJFxcXFwlXFxcXCdcXFxcKlxcXFwrXFxcXC1cXFxcXlxcXFxfXFxcXGBcXFxce1xcXFx8XFxcXH1cXFxcfl1cIjtcbmNvbnN0IFFURVhUJCQgPSBcIltcXFxcIVxcXFwkXFxcXCVcXFxcJ1xcXFwoXFxcXClcXFxcKlxcXFwrXFxcXCxcXFxcLVxcXFwuMC05XFxcXDxcXFxcPkEtWlxcXFx4NUUtXFxcXHg3RV1cIjtcbmNvbnN0IFZDSEFSJCQgPSBtZXJnZShRVEVYVCQkLCBcIltcXFxcXFxcIlxcXFxcXFxcXVwiKTtcbmNvbnN0IERPVF9BVE9NX1RFWFQkID0gc3ViZXhwKEFURVhUJCQgKyBcIitcIiArIHN1YmV4cChcIlxcXFwuXCIgKyBBVEVYVCQkICsgXCIrXCIpICsgXCIqXCIpO1xuY29uc3QgUVVPVEVEX1BBSVIkID0gc3ViZXhwKFwiXFxcXFxcXFxcIiArIFZDSEFSJCQpO1xuY29uc3QgUUNPTlRFTlQkID0gc3ViZXhwKFFURVhUJCQgKyBcInxcIiArIFFVT1RFRF9QQUlSJCk7XG5jb25zdCBRVU9URURfU1RSSU5HJCA9IHN1YmV4cCgnXFxcXFwiJyArIFFDT05URU5UJCArIFwiKlwiICsgJ1xcXFxcIicpO1xuXG4vL1JGQyA2MDY4XG5jb25zdCBEVEVYVF9OT19PQlMkJCA9IFwiW1xcXFx4MjEtXFxcXHg1QVxcXFx4NUUtXFxcXHg3RV1cIjsgIC8vJWQzMy05MCAvICVkOTQtMTI2XG5jb25zdCBTT01FX0RFTElNUyQkID0gXCJbXFxcXCFcXFxcJFxcXFwnXFxcXChcXFxcKVxcXFwqXFxcXCtcXFxcLFxcXFw7XFxcXDpcXFxcQF1cIjtcbmNvbnN0IFFDSEFSJCA9IHN1YmV4cChVTlJFU0VSVkVEJCQgKyBcInxcIiArIFBDVF9FTkNPREVEJCArIFwifFwiICsgU09NRV9ERUxJTVMkJCk7XG5jb25zdCBET01BSU4kID0gc3ViZXhwKERPVF9BVE9NX1RFWFQkICsgXCJ8XCIgKyBcIlxcXFxbXCIgKyBEVEVYVF9OT19PQlMkJCArIFwiKlwiICsgXCJcXFxcXVwiKTtcbmNvbnN0IExPQ0FMX1BBUlQkID0gc3ViZXhwKERPVF9BVE9NX1RFWFQkICsgXCJ8XCIgKyBRVU9URURfU1RSSU5HJCk7XG5jb25zdCBBRERSX1NQRUMkID0gc3ViZXhwKExPQ0FMX1BBUlQkICsgXCJcXFxcQFwiICsgRE9NQUlOJCk7XG5jb25zdCBUTyQgPSBzdWJleHAoQUREUl9TUEVDJCArIHN1YmV4cChcIlxcXFwsXCIgKyBBRERSX1NQRUMkKSArIFwiKlwiKTtcbmNvbnN0IEhGTkFNRSQgPSBzdWJleHAoUUNIQVIkICsgXCIqXCIpO1xuY29uc3QgSEZWQUxVRSQgPSBIRk5BTUUkO1xuY29uc3QgSEZJRUxEJCA9IHN1YmV4cChIRk5BTUUkICsgXCJcXFxcPVwiICsgSEZWQUxVRSQpO1xuY29uc3QgSEZJRUxEUzIkID0gc3ViZXhwKEhGSUVMRCQgKyBzdWJleHAoXCJcXFxcJlwiICsgSEZJRUxEJCkgKyBcIipcIik7XG5jb25zdCBIRklFTERTJCA9IHN1YmV4cChcIlxcXFw/XCIgKyBIRklFTERTMiQpO1xuY29uc3QgTUFJTFRPX1VSSSA9IG5ldyBSZWdFeHAoXCJebWFpbHRvXFxcXDpcIiArIFRPJCArIFwiP1wiICsgSEZJRUxEUyQgKyBcIj8kXCIpO1xuXG5jb25zdCBVTlJFU0VSVkVEID0gbmV3IFJlZ0V4cChVTlJFU0VSVkVEJCQsIFwiZ1wiKTtcbmNvbnN0IFBDVF9FTkNPREVEID0gbmV3IFJlZ0V4cChQQ1RfRU5DT0RFRCQsIFwiZ1wiKTtcbmNvbnN0IE5PVF9MT0NBTF9QQVJUID0gbmV3IFJlZ0V4cChtZXJnZShcIlteXVwiLCBBVEVYVCQkLCBcIltcXFxcLl1cIiwgJ1tcXFxcXCJdJywgVkNIQVIkJCksIFwiZ1wiKTtcbmNvbnN0IE5PVF9ET01BSU4gPSBuZXcgUmVnRXhwKG1lcmdlKFwiW15dXCIsIEFURVhUJCQsIFwiW1xcXFwuXVwiLCBcIltcXFxcW11cIiwgRFRFWFRfTk9fT0JTJCQsIFwiW1xcXFxdXVwiKSwgXCJnXCIpO1xuY29uc3QgTk9UX0hGTkFNRSA9IG5ldyBSZWdFeHAobWVyZ2UoXCJbXl1cIiwgVU5SRVNFUlZFRCQkLCBTT01FX0RFTElNUyQkKSwgXCJnXCIpO1xuY29uc3QgTk9UX0hGVkFMVUUgPSBOT1RfSEZOQU1FO1xuY29uc3QgVE8gPSBuZXcgUmVnRXhwKFwiXlwiICsgVE8kICsgXCIkXCIpO1xuY29uc3QgSEZJRUxEUyA9IG5ldyBSZWdFeHAoXCJeXCIgKyBIRklFTERTMiQgKyBcIiRcIik7XG5cbmZ1bmN0aW9uIGRlY29kZVVucmVzZXJ2ZWQoc3RyOnN0cmluZyk6c3RyaW5nIHtcblx0Y29uc3QgZGVjU3RyID0gcGN0RGVjQ2hhcnMoc3RyKTtcblx0cmV0dXJuICghZGVjU3RyLm1hdGNoKFVOUkVTRVJWRUQpID8gc3RyIDogZGVjU3RyKTtcbn1cblxuY29uc3QgaGFuZGxlcjpVUklTY2hlbWVIYW5kbGVyPE1haWx0b0NvbXBvbmVudHM+ID0gIHtcblx0c2NoZW1lIDogXCJtYWlsdG9cIixcblxuXHRwYXJzZSA6IGZ1bmN0aW9uIChjb21wb25lbnRzOlVSSUNvbXBvbmVudHMsIG9wdGlvbnM6VVJJT3B0aW9ucyk6TWFpbHRvQ29tcG9uZW50cyB7XG5cdFx0Y29uc3QgbWFpbHRvQ29tcG9uZW50cyA9IGNvbXBvbmVudHMgYXMgTWFpbHRvQ29tcG9uZW50cztcblx0XHRjb25zdCB0byA9IG1haWx0b0NvbXBvbmVudHMudG8gPSAobWFpbHRvQ29tcG9uZW50cy5wYXRoID8gbWFpbHRvQ29tcG9uZW50cy5wYXRoLnNwbGl0KFwiLFwiKSA6IFtdKTtcblx0XHRtYWlsdG9Db21wb25lbnRzLnBhdGggPSB1bmRlZmluZWQ7XG5cblx0XHRpZiAobWFpbHRvQ29tcG9uZW50cy5xdWVyeSkge1xuXHRcdFx0bGV0IHVua25vd25IZWFkZXJzID0gZmFsc2Vcblx0XHRcdGNvbnN0IGhlYWRlcnM6TWFpbHRvSGVhZGVycyA9IHt9O1xuXHRcdFx0Y29uc3QgaGZpZWxkcyA9IG1haWx0b0NvbXBvbmVudHMucXVlcnkuc3BsaXQoXCImXCIpO1xuXG5cdFx0XHRmb3IgKGxldCB4ID0gMCwgeGwgPSBoZmllbGRzLmxlbmd0aDsgeCA8IHhsOyArK3gpIHtcblx0XHRcdFx0Y29uc3QgaGZpZWxkID0gaGZpZWxkc1t4XS5zcGxpdChcIj1cIik7XG5cblx0XHRcdFx0c3dpdGNoIChoZmllbGRbMF0pIHtcblx0XHRcdFx0XHRjYXNlIFwidG9cIjpcblx0XHRcdFx0XHRcdGNvbnN0IHRvQWRkcnMgPSBoZmllbGRbMV0uc3BsaXQoXCIsXCIpO1xuXHRcdFx0XHRcdFx0Zm9yIChsZXQgeCA9IDAsIHhsID0gdG9BZGRycy5sZW5ndGg7IHggPCB4bDsgKyt4KSB7XG5cdFx0XHRcdFx0XHRcdHRvLnB1c2godG9BZGRyc1t4XSk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRjYXNlIFwic3ViamVjdFwiOlxuXHRcdFx0XHRcdFx0bWFpbHRvQ29tcG9uZW50cy5zdWJqZWN0ID0gdW5lc2NhcGVDb21wb25lbnQoaGZpZWxkWzFdLCBvcHRpb25zKTtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdGNhc2UgXCJib2R5XCI6XG5cdFx0XHRcdFx0XHRtYWlsdG9Db21wb25lbnRzLmJvZHkgPSB1bmVzY2FwZUNvbXBvbmVudChoZmllbGRbMV0sIG9wdGlvbnMpO1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHRcdHVua25vd25IZWFkZXJzID0gdHJ1ZTtcblx0XHRcdFx0XHRcdGhlYWRlcnNbdW5lc2NhcGVDb21wb25lbnQoaGZpZWxkWzBdLCBvcHRpb25zKV0gPSB1bmVzY2FwZUNvbXBvbmVudChoZmllbGRbMV0sIG9wdGlvbnMpO1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0aWYgKHVua25vd25IZWFkZXJzKSBtYWlsdG9Db21wb25lbnRzLmhlYWRlcnMgPSBoZWFkZXJzO1xuXHRcdH1cblxuXHRcdG1haWx0b0NvbXBvbmVudHMucXVlcnkgPSB1bmRlZmluZWQ7XG5cblx0XHRmb3IgKGxldCB4ID0gMCwgeGwgPSB0by5sZW5ndGg7IHggPCB4bDsgKyt4KSB7XG5cdFx0XHRjb25zdCBhZGRyID0gdG9beF0uc3BsaXQoXCJAXCIpO1xuXG5cdFx0XHRhZGRyWzBdID0gdW5lc2NhcGVDb21wb25lbnQoYWRkclswXSk7XG5cblx0XHRcdGlmICghb3B0aW9ucy51bmljb2RlU3VwcG9ydCkge1xuXHRcdFx0XHQvL2NvbnZlcnQgVW5pY29kZSBJRE4gLT4gQVNDSUkgSUROXG5cdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0YWRkclsxXSA9IHB1bnljb2RlLnRvQVNDSUkodW5lc2NhcGVDb21wb25lbnQoYWRkclsxXSwgb3B0aW9ucykudG9Mb3dlckNhc2UoKSk7XG5cdFx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0XHRtYWlsdG9Db21wb25lbnRzLmVycm9yID0gbWFpbHRvQ29tcG9uZW50cy5lcnJvciB8fCBcIkVtYWlsIGFkZHJlc3MncyBkb21haW4gbmFtZSBjYW4gbm90IGJlIGNvbnZlcnRlZCB0byBBU0NJSSB2aWEgcHVueWNvZGU6IFwiICsgZTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0YWRkclsxXSA9IHVuZXNjYXBlQ29tcG9uZW50KGFkZHJbMV0sIG9wdGlvbnMpLnRvTG93ZXJDYXNlKCk7XG5cdFx0XHR9XG5cblx0XHRcdHRvW3hdID0gYWRkci5qb2luKFwiQFwiKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gbWFpbHRvQ29tcG9uZW50cztcblx0fSxcblxuXHRzZXJpYWxpemUgOiBmdW5jdGlvbiAobWFpbHRvQ29tcG9uZW50czpNYWlsdG9Db21wb25lbnRzLCBvcHRpb25zOlVSSU9wdGlvbnMpOlVSSUNvbXBvbmVudHMge1xuXHRcdGNvbnN0IGNvbXBvbmVudHMgPSBtYWlsdG9Db21wb25lbnRzIGFzIFVSSUNvbXBvbmVudHM7XG5cdFx0Y29uc3QgdG8gPSB0b0FycmF5KG1haWx0b0NvbXBvbmVudHMudG8pO1xuXHRcdGlmICh0bykge1xuXHRcdFx0Zm9yIChsZXQgeCA9IDAsIHhsID0gdG8ubGVuZ3RoOyB4IDwgeGw7ICsreCkge1xuXHRcdFx0XHRjb25zdCB0b0FkZHIgPSBTdHJpbmcodG9beF0pO1xuXHRcdFx0XHRjb25zdCBhdElkeCA9IHRvQWRkci5sYXN0SW5kZXhPZihcIkBcIik7XG5cdFx0XHRcdGNvbnN0IGxvY2FsUGFydCA9ICh0b0FkZHIuc2xpY2UoMCwgYXRJZHgpKS5yZXBsYWNlKFBDVF9FTkNPREVELCBkZWNvZGVVbnJlc2VydmVkKS5yZXBsYWNlKFBDVF9FTkNPREVELCB0b1VwcGVyQ2FzZSkucmVwbGFjZShOT1RfTE9DQUxfUEFSVCwgcGN0RW5jQ2hhcik7XG5cdFx0XHRcdGxldCBkb21haW4gPSB0b0FkZHIuc2xpY2UoYXRJZHggKyAxKTtcblxuXHRcdFx0XHQvL2NvbnZlcnQgSUROIHZpYSBwdW55Y29kZVxuXHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdGRvbWFpbiA9ICghb3B0aW9ucy5pcmkgPyBwdW55Y29kZS50b0FTQ0lJKHVuZXNjYXBlQ29tcG9uZW50KGRvbWFpbiwgb3B0aW9ucykudG9Mb3dlckNhc2UoKSkgOiBwdW55Y29kZS50b1VuaWNvZGUoZG9tYWluKSk7XG5cdFx0XHRcdH0gY2F0Y2ggKGUpIHtcblx0XHRcdFx0XHRjb21wb25lbnRzLmVycm9yID0gY29tcG9uZW50cy5lcnJvciB8fCBcIkVtYWlsIGFkZHJlc3MncyBkb21haW4gbmFtZSBjYW4gbm90IGJlIGNvbnZlcnRlZCB0byBcIiArICghb3B0aW9ucy5pcmkgPyBcIkFTQ0lJXCIgOiBcIlVuaWNvZGVcIikgKyBcIiB2aWEgcHVueWNvZGU6IFwiICsgZTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHRvW3hdID0gbG9jYWxQYXJ0ICsgXCJAXCIgKyBkb21haW47XG5cdFx0XHR9XG5cblx0XHRcdGNvbXBvbmVudHMucGF0aCA9IHRvLmpvaW4oXCIsXCIpO1xuXHRcdH1cblxuXHRcdGNvbnN0IGhlYWRlcnMgPSBtYWlsdG9Db21wb25lbnRzLmhlYWRlcnMgPSBtYWlsdG9Db21wb25lbnRzLmhlYWRlcnMgfHwge307XG5cblx0XHRpZiAobWFpbHRvQ29tcG9uZW50cy5zdWJqZWN0KSBoZWFkZXJzW1wic3ViamVjdFwiXSA9IG1haWx0b0NvbXBvbmVudHMuc3ViamVjdDtcblx0XHRpZiAobWFpbHRvQ29tcG9uZW50cy5ib2R5KSBoZWFkZXJzW1wiYm9keVwiXSA9IG1haWx0b0NvbXBvbmVudHMuYm9keTtcblxuXHRcdGNvbnN0IGZpZWxkcyA9IFtdO1xuXHRcdGZvciAoY29uc3QgbmFtZSBpbiBoZWFkZXJzKSB7XG5cdFx0XHRpZiAoaGVhZGVyc1tuYW1lXSAhPT0gT1tuYW1lXSkge1xuXHRcdFx0XHRmaWVsZHMucHVzaChcblx0XHRcdFx0XHRuYW1lLnJlcGxhY2UoUENUX0VOQ09ERUQsIGRlY29kZVVucmVzZXJ2ZWQpLnJlcGxhY2UoUENUX0VOQ09ERUQsIHRvVXBwZXJDYXNlKS5yZXBsYWNlKE5PVF9IRk5BTUUsIHBjdEVuY0NoYXIpICtcblx0XHRcdFx0XHRcIj1cIiArXG5cdFx0XHRcdFx0aGVhZGVyc1tuYW1lXS5yZXBsYWNlKFBDVF9FTkNPREVELCBkZWNvZGVVbnJlc2VydmVkKS5yZXBsYWNlKFBDVF9FTkNPREVELCB0b1VwcGVyQ2FzZSkucmVwbGFjZShOT1RfSEZWQUxVRSwgcGN0RW5jQ2hhcilcblx0XHRcdFx0KTtcblx0XHRcdH1cblx0XHR9XG5cdFx0aWYgKGZpZWxkcy5sZW5ndGgpIHtcblx0XHRcdGNvbXBvbmVudHMucXVlcnkgPSBmaWVsZHMuam9pbihcIiZcIik7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGNvbXBvbmVudHM7XG5cdH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgaGFuZGxlcjsiLCAiaW1wb3J0IHsgVVJJU2NoZW1lSGFuZGxlciwgVVJJQ29tcG9uZW50cywgVVJJT3B0aW9ucyB9IGZyb20gXCIuLi91cmlcIjtcbmltcG9ydCB3cyBmcm9tIFwiLi93c1wiO1xuXG5jb25zdCBoYW5kbGVyOlVSSVNjaGVtZUhhbmRsZXIgPSB7XG5cdHNjaGVtZSA6IFwid3NzXCIsXG5cdGRvbWFpbkhvc3QgOiB3cy5kb21haW5Ib3N0LFxuXHRwYXJzZSA6IHdzLnBhcnNlLFxuXHRzZXJpYWxpemUgOiB3cy5zZXJpYWxpemVcbn1cblxuZXhwb3J0IGRlZmF1bHQgaGFuZGxlcjsiLCAiaW1wb3J0IHsgVVJJU2NoZW1lSGFuZGxlciwgVVJJQ29tcG9uZW50cywgVVJJT3B0aW9ucyB9IGZyb20gXCIuLi91cmlcIjtcblxuZXhwb3J0IGludGVyZmFjZSBXU0NvbXBvbmVudHMgZXh0ZW5kcyBVUklDb21wb25lbnRzIHtcblx0cmVzb3VyY2VOYW1lPzogc3RyaW5nO1xuXHRzZWN1cmU/OiBib29sZWFuO1xufVxuXG5mdW5jdGlvbiBpc1NlY3VyZSh3c0NvbXBvbmVudHM6V1NDb21wb25lbnRzKTpib29sZWFuIHtcblx0cmV0dXJuIHR5cGVvZiB3c0NvbXBvbmVudHMuc2VjdXJlID09PSAnYm9vbGVhbicgPyB3c0NvbXBvbmVudHMuc2VjdXJlIDogU3RyaW5nKHdzQ29tcG9uZW50cy5zY2hlbWUpLnRvTG93ZXJDYXNlKCkgPT09IFwid3NzXCI7XG59XG5cbi8vUkZDIDY0NTVcbmNvbnN0IGhhbmRsZXI6VVJJU2NoZW1lSGFuZGxlciA9IHtcblx0c2NoZW1lIDogXCJ3c1wiLFxuXG5cdGRvbWFpbkhvc3QgOiB0cnVlLFxuXG5cdHBhcnNlIDogZnVuY3Rpb24gKGNvbXBvbmVudHM6VVJJQ29tcG9uZW50cywgb3B0aW9uczpVUklPcHRpb25zKTpXU0NvbXBvbmVudHMge1xuXHRcdGNvbnN0IHdzQ29tcG9uZW50cyA9IGNvbXBvbmVudHMgYXMgV1NDb21wb25lbnRzO1xuXG5cdFx0Ly9pbmRpY2F0ZSBpZiB0aGUgc2VjdXJlIGZsYWcgaXMgc2V0XG5cdFx0d3NDb21wb25lbnRzLnNlY3VyZSA9IGlzU2VjdXJlKHdzQ29tcG9uZW50cyk7XG5cblx0XHQvL2NvbnN0cnVjdCByZXNvdWNlIG5hbWVcblx0XHR3c0NvbXBvbmVudHMucmVzb3VyY2VOYW1lID0gKHdzQ29tcG9uZW50cy5wYXRoIHx8ICcvJykgKyAod3NDb21wb25lbnRzLnF1ZXJ5ID8gJz8nICsgd3NDb21wb25lbnRzLnF1ZXJ5IDogJycpO1xuXHRcdHdzQ29tcG9uZW50cy5wYXRoID0gdW5kZWZpbmVkO1xuXHRcdHdzQ29tcG9uZW50cy5xdWVyeSA9IHVuZGVmaW5lZDtcblxuXHRcdHJldHVybiB3c0NvbXBvbmVudHM7XG5cdH0sXG5cblx0c2VyaWFsaXplIDogZnVuY3Rpb24gKHdzQ29tcG9uZW50czpXU0NvbXBvbmVudHMsIG9wdGlvbnM6VVJJT3B0aW9ucyk6VVJJQ29tcG9uZW50cyB7XG5cdFx0Ly9ub3JtYWxpemUgdGhlIGRlZmF1bHQgcG9ydFxuXHRcdGlmICh3c0NvbXBvbmVudHMucG9ydCA9PT0gKGlzU2VjdXJlKHdzQ29tcG9uZW50cykgPyA0NDMgOiA4MCkgfHwgd3NDb21wb25lbnRzLnBvcnQgPT09IFwiXCIpIHtcblx0XHRcdHdzQ29tcG9uZW50cy5wb3J0ID0gdW5kZWZpbmVkO1xuXHRcdH1cblxuXHRcdC8vZW5zdXJlIHNjaGVtZSBtYXRjaGVzIHNlY3VyZSBmbGFnXG5cdFx0aWYgKHR5cGVvZiB3c0NvbXBvbmVudHMuc2VjdXJlID09PSAnYm9vbGVhbicpIHtcblx0XHRcdHdzQ29tcG9uZW50cy5zY2hlbWUgPSAod3NDb21wb25lbnRzLnNlY3VyZSA/ICd3c3MnIDogJ3dzJyk7XG5cdFx0XHR3c0NvbXBvbmVudHMuc2VjdXJlID0gdW5kZWZpbmVkO1xuXHRcdH1cblxuXHRcdC8vcmVjb25zdHJ1Y3QgcGF0aCBmcm9tIHJlc291cmNlIG5hbWVcblx0XHRpZiAod3NDb21wb25lbnRzLnJlc291cmNlTmFtZSkge1xuXHRcdFx0Y29uc3QgW3BhdGgsIHF1ZXJ5XSA9IHdzQ29tcG9uZW50cy5yZXNvdXJjZU5hbWUuc3BsaXQoJz8nKTtcblx0XHRcdHdzQ29tcG9uZW50cy5wYXRoID0gKHBhdGggJiYgcGF0aCAhPT0gJy8nID8gcGF0aCA6IHVuZGVmaW5lZCk7XG5cdFx0XHR3c0NvbXBvbmVudHMucXVlcnkgPSBxdWVyeTtcblx0XHRcdHdzQ29tcG9uZW50cy5yZXNvdXJjZU5hbWUgPSB1bmRlZmluZWQ7XG5cdFx0fVxuXG5cdFx0Ly9mb3JiaWQgZnJhZ21lbnQgY29tcG9uZW50XG5cdFx0d3NDb21wb25lbnRzLmZyYWdtZW50ID0gdW5kZWZpbmVkO1xuXG5cdFx0cmV0dXJuIHdzQ29tcG9uZW50cztcblx0fVxufTtcblxuZXhwb3J0IGRlZmF1bHQgaGFuZGxlcjsiLCAiaW1wb3J0IHsgVVJJU2NoZW1lSGFuZGxlciwgVVJJQ29tcG9uZW50cywgVVJJT3B0aW9ucyB9IGZyb20gXCIuLi91cmlcIjtcbmltcG9ydCBodHRwIGZyb20gXCIuL2h0dHBcIjtcblxuY29uc3QgaGFuZGxlcjpVUklTY2hlbWVIYW5kbGVyID0ge1xuXHRzY2hlbWUgOiBcImh0dHBzXCIsXG5cdGRvbWFpbkhvc3QgOiBodHRwLmRvbWFpbkhvc3QsXG5cdHBhcnNlIDogaHR0cC5wYXJzZSxcblx0c2VyaWFsaXplIDogaHR0cC5zZXJpYWxpemVcbn1cblxuZXhwb3J0IGRlZmF1bHQgaGFuZGxlcjsiLCAiaW1wb3J0IHsgVVJJU2NoZW1lSGFuZGxlciwgVVJJQ29tcG9uZW50cywgVVJJT3B0aW9ucyB9IGZyb20gXCIuLi91cmlcIjtcblxuY29uc3QgaGFuZGxlcjpVUklTY2hlbWVIYW5kbGVyID0ge1xuXHRzY2hlbWUgOiBcImh0dHBcIixcblxuXHRkb21haW5Ib3N0IDogdHJ1ZSxcblxuXHRwYXJzZSA6IGZ1bmN0aW9uIChjb21wb25lbnRzOlVSSUNvbXBvbmVudHMsIG9wdGlvbnM6VVJJT3B0aW9ucyk6VVJJQ29tcG9uZW50cyB7XG5cdFx0Ly9yZXBvcnQgbWlzc2luZyBob3N0XG5cdFx0aWYgKCFjb21wb25lbnRzLmhvc3QpIHtcblx0XHRcdGNvbXBvbmVudHMuZXJyb3IgPSBjb21wb25lbnRzLmVycm9yIHx8IFwiSFRUUCBVUklzIG11c3QgaGF2ZSBhIGhvc3QuXCI7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGNvbXBvbmVudHM7XG5cdH0sXG5cblx0c2VyaWFsaXplIDogZnVuY3Rpb24gKGNvbXBvbmVudHM6VVJJQ29tcG9uZW50cywgb3B0aW9uczpVUklPcHRpb25zKTpVUklDb21wb25lbnRzIHtcblx0XHRjb25zdCBzZWN1cmUgPSBTdHJpbmcoY29tcG9uZW50cy5zY2hlbWUpLnRvTG93ZXJDYXNlKCkgPT09IFwiaHR0cHNcIjtcblxuXHRcdC8vbm9ybWFsaXplIHRoZSBkZWZhdWx0IHBvcnRcblx0XHRpZiAoY29tcG9uZW50cy5wb3J0ID09PSAoc2VjdXJlID8gNDQzIDogODApIHx8IGNvbXBvbmVudHMucG9ydCA9PT0gXCJcIikge1xuXHRcdFx0Y29tcG9uZW50cy5wb3J0ID0gdW5kZWZpbmVkO1xuXHRcdH1cblx0XHRcblx0XHQvL25vcm1hbGl6ZSB0aGUgZW1wdHkgcGF0aFxuXHRcdGlmICghY29tcG9uZW50cy5wYXRoKSB7XG5cdFx0XHRjb21wb25lbnRzLnBhdGggPSBcIi9cIjtcblx0XHR9XG5cblx0XHQvL05PVEU6IFdlIGRvIG5vdCBwYXJzZSBxdWVyeSBzdHJpbmdzIGZvciBIVFRQIFVSSXNcblx0XHQvL2FzIFdXVyBGb3JtIFVybCBFbmNvZGVkIHF1ZXJ5IHN0cmluZ3MgYXJlIHBhcnQgb2YgdGhlIEhUTUw0KyBzcGVjLFxuXHRcdC8vYW5kIG5vdCB0aGUgSFRUUCBzcGVjLlxuXG5cdFx0cmV0dXJuIGNvbXBvbmVudHM7XG5cdH1cbn07XG5cbmV4cG9ydCBkZWZhdWx0IGhhbmRsZXI7IiwgIi8qKlxuICogVVJJLmpzXG4gKlxuICogQGZpbGVvdmVydmlldyBBbiBSRkMgMzk4NiBjb21wbGlhbnQsIHNjaGVtZSBleHRlbmRhYmxlIFVSSSBwYXJzaW5nL3ZhbGlkYXRpbmcvcmVzb2x2aW5nIGxpYnJhcnkgZm9yIEphdmFTY3JpcHQuXG4gKiBAYXV0aG9yIDxhIGhyZWY9XCJtYWlsdG86Z2FyeS5jb3VydEBnbWFpbC5jb21cIj5HYXJ5IENvdXJ0PC9hPlxuICogQHNlZSBodHRwOi8vZ2l0aHViLmNvbS9nYXJ5Y291cnQvdXJpLWpzXG4gKi9cblxuLyoqXG4gKiBDb3B5cmlnaHQgMjAxMSBHYXJ5IENvdXJ0LiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICpcbiAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sIGFyZVxuICogcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6XG4gKlxuICogICAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2ZcbiAqICAgICAgIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci5cbiAqXG4gKiAgICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdFxuICogICAgICAgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHNcbiAqICAgICAgIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi5cbiAqXG4gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEdBUlkgQ09VUlQgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEXG4gKiBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EXG4gKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgR0FSWSBDT1VSVCBPUlxuICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1JcbiAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1JcbiAqIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT05cbiAqIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkdcbiAqIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRlxuICogQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuXG4gKlxuICogVGhlIHZpZXdzIGFuZCBjb25jbHVzaW9ucyBjb250YWluZWQgaW4gdGhlIHNvZnR3YXJlIGFuZCBkb2N1bWVudGF0aW9uIGFyZSB0aG9zZSBvZiB0aGVcbiAqIGF1dGhvcnMgYW5kIHNob3VsZCBub3QgYmUgaW50ZXJwcmV0ZWQgYXMgcmVwcmVzZW50aW5nIG9mZmljaWFsIHBvbGljaWVzLCBlaXRoZXIgZXhwcmVzc2VkXG4gKiBvciBpbXBsaWVkLCBvZiBHYXJ5IENvdXJ0LlxuICovXG5cbmltcG9ydCBVUklfUFJPVE9DT0wgZnJvbSBcIi4vcmVnZXhwcy11cmlcIjtcbmltcG9ydCBJUklfUFJPVE9DT0wgZnJvbSBcIi4vcmVnZXhwcy1pcmlcIjtcbmltcG9ydCBwdW55Y29kZSBmcm9tIFwicHVueWNvZGVcIjtcbmltcG9ydCB7IHRvVXBwZXJDYXNlLCB0eXBlT2YsIGFzc2lnbiB9IGZyb20gXCIuL3V0aWxcIjtcblxuZXhwb3J0IGludGVyZmFjZSBVUklDb21wb25lbnRzIHtcblx0c2NoZW1lPzpzdHJpbmc7XG5cdHVzZXJpbmZvPzpzdHJpbmc7XG5cdGhvc3Q/OnN0cmluZztcblx0cG9ydD86bnVtYmVyfHN0cmluZztcblx0cGF0aD86c3RyaW5nO1xuXHRxdWVyeT86c3RyaW5nO1xuXHRmcmFnbWVudD86c3RyaW5nO1xuXHRyZWZlcmVuY2U/OnN0cmluZztcblx0ZXJyb3I/OnN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBVUklPcHRpb25zIHtcblx0c2NoZW1lPzpzdHJpbmc7XG5cdHJlZmVyZW5jZT86c3RyaW5nO1xuXHR0b2xlcmFudD86Ym9vbGVhbjtcblx0YWJzb2x1dGVQYXRoPzpib29sZWFuO1xuXHRpcmk/OmJvb2xlYW47XG5cdHVuaWNvZGVTdXBwb3J0Pzpib29sZWFuO1xuXHRkb21haW5Ib3N0Pzpib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFVSSVNjaGVtZUhhbmRsZXI8Q29tcG9uZW50cyBleHRlbmRzIFVSSUNvbXBvbmVudHMgPSBVUklDb21wb25lbnRzLCBPcHRpb25zIGV4dGVuZHMgVVJJT3B0aW9ucyA9IFVSSU9wdGlvbnMsIFBhcmVudENvbXBvbmVudHMgZXh0ZW5kcyBVUklDb21wb25lbnRzID0gVVJJQ29tcG9uZW50cz4ge1xuXHRzY2hlbWU6c3RyaW5nO1xuXHRwYXJzZShjb21wb25lbnRzOlBhcmVudENvbXBvbmVudHMsIG9wdGlvbnM6T3B0aW9ucyk6Q29tcG9uZW50cztcblx0c2VyaWFsaXplKGNvbXBvbmVudHM6Q29tcG9uZW50cywgb3B0aW9uczpPcHRpb25zKTpQYXJlbnRDb21wb25lbnRzO1xuXHR1bmljb2RlU3VwcG9ydD86Ym9vbGVhbjtcblx0ZG9tYWluSG9zdD86Ym9vbGVhbjtcblx0YWJzb2x1dGVQYXRoPzpib29sZWFuO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFVSSVJlZ0V4cHMge1xuXHROT1RfU0NIRU1FIDogUmVnRXhwLFxuXHROT1RfVVNFUklORk8gOiBSZWdFeHAsXG5cdE5PVF9IT1NUIDogUmVnRXhwLFxuXHROT1RfUEFUSCA6IFJlZ0V4cCxcblx0Tk9UX1BBVEhfTk9TQ0hFTUUgOiBSZWdFeHAsXG5cdE5PVF9RVUVSWSA6IFJlZ0V4cCxcblx0Tk9UX0ZSQUdNRU5UIDogUmVnRXhwLFxuXHRFU0NBUEUgOiBSZWdFeHAsXG5cdFVOUkVTRVJWRUQgOiBSZWdFeHAsXG5cdE9USEVSX0NIQVJTIDogUmVnRXhwLFxuXHRQQ1RfRU5DT0RFRCA6IFJlZ0V4cCxcblx0SVBWNEFERFJFU1MgOiBSZWdFeHAsXG5cdElQVjZBRERSRVNTIDogUmVnRXhwLFxufVxuXG5leHBvcnQgY29uc3QgU0NIRU1FUzp7W3NjaGVtZTpzdHJpbmddOlVSSVNjaGVtZUhhbmRsZXJ9ID0ge307XG5cbmV4cG9ydCBmdW5jdGlvbiBwY3RFbmNDaGFyKGNocjpzdHJpbmcpOnN0cmluZyB7XG5cdGNvbnN0IGMgPSBjaHIuY2hhckNvZGVBdCgwKTtcblx0bGV0IGU6c3RyaW5nO1xuXG5cdGlmIChjIDwgMTYpIGUgPSBcIiUwXCIgKyBjLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpO1xuXHRlbHNlIGlmIChjIDwgMTI4KSBlID0gXCIlXCIgKyBjLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpO1xuXHRlbHNlIGlmIChjIDwgMjA0OCkgZSA9IFwiJVwiICsgKChjID4+IDYpIHwgMTkyKS50b1N0cmluZygxNikudG9VcHBlckNhc2UoKSArIFwiJVwiICsgKChjICYgNjMpIHwgMTI4KS50b1N0cmluZygxNikudG9VcHBlckNhc2UoKTtcblx0ZWxzZSBlID0gXCIlXCIgKyAoKGMgPj4gMTIpIHwgMjI0KS50b1N0cmluZygxNikudG9VcHBlckNhc2UoKSArIFwiJVwiICsgKCgoYyA+PiA2KSAmIDYzKSB8IDEyOCkudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCkgKyBcIiVcIiArICgoYyAmIDYzKSB8IDEyOCkudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCk7XG5cblx0cmV0dXJuIGU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwY3REZWNDaGFycyhzdHI6c3RyaW5nKTpzdHJpbmcge1xuXHRsZXQgbmV3U3RyID0gXCJcIjtcblx0bGV0IGkgPSAwO1xuXHRjb25zdCBpbCA9IHN0ci5sZW5ndGg7XG5cblx0d2hpbGUgKGkgPCBpbCkge1xuXHRcdGNvbnN0IGMgPSBwYXJzZUludChzdHIuc3Vic3RyKGkgKyAxLCAyKSwgMTYpO1xuXG5cdFx0aWYgKGMgPCAxMjgpIHtcblx0XHRcdG5ld1N0ciArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGMpO1xuXHRcdFx0aSArPSAzO1xuXHRcdH1cblx0XHRlbHNlIGlmIChjID49IDE5NCAmJiBjIDwgMjI0KSB7XG5cdFx0XHRpZiAoKGlsIC0gaSkgPj0gNikge1xuXHRcdFx0XHRjb25zdCBjMiA9IHBhcnNlSW50KHN0ci5zdWJzdHIoaSArIDQsIDIpLCAxNik7XG5cdFx0XHRcdG5ld1N0ciArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKCgoYyAmIDMxKSA8PCA2KSB8IChjMiAmIDYzKSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRuZXdTdHIgKz0gc3RyLnN1YnN0cihpLCA2KTtcblx0XHRcdH1cblx0XHRcdGkgKz0gNjtcblx0XHR9XG5cdFx0ZWxzZSBpZiAoYyA+PSAyMjQpIHtcblx0XHRcdGlmICgoaWwgLSBpKSA+PSA5KSB7XG5cdFx0XHRcdGNvbnN0IGMyID0gcGFyc2VJbnQoc3RyLnN1YnN0cihpICsgNCwgMiksIDE2KTtcblx0XHRcdFx0Y29uc3QgYzMgPSBwYXJzZUludChzdHIuc3Vic3RyKGkgKyA3LCAyKSwgMTYpO1xuXHRcdFx0XHRuZXdTdHIgKz0gU3RyaW5nLmZyb21DaGFyQ29kZSgoKGMgJiAxNSkgPDwgMTIpIHwgKChjMiAmIDYzKSA8PCA2KSB8IChjMyAmIDYzKSk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRuZXdTdHIgKz0gc3RyLnN1YnN0cihpLCA5KTtcblx0XHRcdH1cblx0XHRcdGkgKz0gOTtcblx0XHR9XG5cdFx0ZWxzZSB7XG5cdFx0XHRuZXdTdHIgKz0gc3RyLnN1YnN0cihpLCAzKTtcblx0XHRcdGkgKz0gMztcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gbmV3U3RyO1xufVxuXG5mdW5jdGlvbiBfbm9ybWFsaXplQ29tcG9uZW50RW5jb2RpbmcoY29tcG9uZW50czpVUklDb21wb25lbnRzLCBwcm90b2NvbDpVUklSZWdFeHBzKSB7XG5cdGZ1bmN0aW9uIGRlY29kZVVucmVzZXJ2ZWQoc3RyOnN0cmluZyk6c3RyaW5nIHtcblx0XHRjb25zdCBkZWNTdHIgPSBwY3REZWNDaGFycyhzdHIpO1xuXHRcdHJldHVybiAoIWRlY1N0ci5tYXRjaChwcm90b2NvbC5VTlJFU0VSVkVEKSA/IHN0ciA6IGRlY1N0cik7XG5cdH1cblxuXHRpZiAoY29tcG9uZW50cy5zY2hlbWUpIGNvbXBvbmVudHMuc2NoZW1lID0gU3RyaW5nKGNvbXBvbmVudHMuc2NoZW1lKS5yZXBsYWNlKHByb3RvY29sLlBDVF9FTkNPREVELCBkZWNvZGVVbnJlc2VydmVkKS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UocHJvdG9jb2wuTk9UX1NDSEVNRSwgXCJcIik7XG5cdGlmIChjb21wb25lbnRzLnVzZXJpbmZvICE9PSB1bmRlZmluZWQpIGNvbXBvbmVudHMudXNlcmluZm8gPSBTdHJpbmcoY29tcG9uZW50cy51c2VyaW5mbykucmVwbGFjZShwcm90b2NvbC5QQ1RfRU5DT0RFRCwgZGVjb2RlVW5yZXNlcnZlZCkucmVwbGFjZShwcm90b2NvbC5OT1RfVVNFUklORk8sIHBjdEVuY0NoYXIpLnJlcGxhY2UocHJvdG9jb2wuUENUX0VOQ09ERUQsIHRvVXBwZXJDYXNlKTtcblx0aWYgKGNvbXBvbmVudHMuaG9zdCAhPT0gdW5kZWZpbmVkKSBjb21wb25lbnRzLmhvc3QgPSBTdHJpbmcoY29tcG9uZW50cy5ob3N0KS5yZXBsYWNlKHByb3RvY29sLlBDVF9FTkNPREVELCBkZWNvZGVVbnJlc2VydmVkKS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UocHJvdG9jb2wuTk9UX0hPU1QsIHBjdEVuY0NoYXIpLnJlcGxhY2UocHJvdG9jb2wuUENUX0VOQ09ERUQsIHRvVXBwZXJDYXNlKTtcblx0aWYgKGNvbXBvbmVudHMucGF0aCAhPT0gdW5kZWZpbmVkKSBjb21wb25lbnRzLnBhdGggPSBTdHJpbmcoY29tcG9uZW50cy5wYXRoKS5yZXBsYWNlKHByb3RvY29sLlBDVF9FTkNPREVELCBkZWNvZGVVbnJlc2VydmVkKS5yZXBsYWNlKChjb21wb25lbnRzLnNjaGVtZSA/IHByb3RvY29sLk5PVF9QQVRIIDogcHJvdG9jb2wuTk9UX1BBVEhfTk9TQ0hFTUUpLCBwY3RFbmNDaGFyKS5yZXBsYWNlKHByb3RvY29sLlBDVF9FTkNPREVELCB0b1VwcGVyQ2FzZSk7XG5cdGlmIChjb21wb25lbnRzLnF1ZXJ5ICE9PSB1bmRlZmluZWQpIGNvbXBvbmVudHMucXVlcnkgPSBTdHJpbmcoY29tcG9uZW50cy5xdWVyeSkucmVwbGFjZShwcm90b2NvbC5QQ1RfRU5DT0RFRCwgZGVjb2RlVW5yZXNlcnZlZCkucmVwbGFjZShwcm90b2NvbC5OT1RfUVVFUlksIHBjdEVuY0NoYXIpLnJlcGxhY2UocHJvdG9jb2wuUENUX0VOQ09ERUQsIHRvVXBwZXJDYXNlKTtcblx0aWYgKGNvbXBvbmVudHMuZnJhZ21lbnQgIT09IHVuZGVmaW5lZCkgY29tcG9uZW50cy5mcmFnbWVudCA9IFN0cmluZyhjb21wb25lbnRzLmZyYWdtZW50KS5yZXBsYWNlKHByb3RvY29sLlBDVF9FTkNPREVELCBkZWNvZGVVbnJlc2VydmVkKS5yZXBsYWNlKHByb3RvY29sLk5PVF9GUkFHTUVOVCwgcGN0RW5jQ2hhcikucmVwbGFjZShwcm90b2NvbC5QQ1RfRU5DT0RFRCwgdG9VcHBlckNhc2UpO1xuXG5cdHJldHVybiBjb21wb25lbnRzO1xufTtcblxuZnVuY3Rpb24gX3N0cmlwTGVhZGluZ1plcm9zKHN0cjpzdHJpbmcpOnN0cmluZyB7XG5cdHJldHVybiBzdHIucmVwbGFjZSgvXjAqKC4qKS8sIFwiJDFcIikgfHwgXCIwXCI7XG59XG5cbmZ1bmN0aW9uIF9ub3JtYWxpemVJUHY0KGhvc3Q6c3RyaW5nLCBwcm90b2NvbDpVUklSZWdFeHBzKTpzdHJpbmcge1xuXHRjb25zdCBtYXRjaGVzID0gaG9zdC5tYXRjaChwcm90b2NvbC5JUFY0QUREUkVTUykgfHwgW107XG5cdGNvbnN0IFssIGFkZHJlc3NdID0gbWF0Y2hlcztcblx0XG5cdGlmIChhZGRyZXNzKSB7XG5cdFx0cmV0dXJuIGFkZHJlc3Muc3BsaXQoXCIuXCIpLm1hcChfc3RyaXBMZWFkaW5nWmVyb3MpLmpvaW4oXCIuXCIpO1xuXHR9IGVsc2Uge1xuXHRcdHJldHVybiBob3N0O1xuXHR9XG59XG5cbmZ1bmN0aW9uIF9ub3JtYWxpemVJUHY2KGhvc3Q6c3RyaW5nLCBwcm90b2NvbDpVUklSZWdFeHBzKTpzdHJpbmcge1xuXHRjb25zdCBtYXRjaGVzID0gaG9zdC5tYXRjaChwcm90b2NvbC5JUFY2QUREUkVTUykgfHwgW107XG5cdGNvbnN0IFssIGFkZHJlc3MsIHpvbmVdID0gbWF0Y2hlcztcblxuXHRpZiAoYWRkcmVzcykge1xuXHRcdGNvbnN0IFtsYXN0LCBmaXJzdF0gPSBhZGRyZXNzLnRvTG93ZXJDYXNlKCkuc3BsaXQoJzo6JykucmV2ZXJzZSgpO1xuXHRcdGNvbnN0IGZpcnN0RmllbGRzID0gZmlyc3QgPyBmaXJzdC5zcGxpdChcIjpcIikubWFwKF9zdHJpcExlYWRpbmdaZXJvcykgOiBbXTtcblx0XHRjb25zdCBsYXN0RmllbGRzID0gbGFzdC5zcGxpdChcIjpcIikubWFwKF9zdHJpcExlYWRpbmdaZXJvcyk7XG5cdFx0Y29uc3QgaXNMYXN0RmllbGRJUHY0QWRkcmVzcyA9IHByb3RvY29sLklQVjRBRERSRVNTLnRlc3QobGFzdEZpZWxkc1tsYXN0RmllbGRzLmxlbmd0aCAtIDFdKTtcblx0XHRjb25zdCBmaWVsZENvdW50ID0gaXNMYXN0RmllbGRJUHY0QWRkcmVzcyA/IDcgOiA4O1xuXHRcdGNvbnN0IGxhc3RGaWVsZHNTdGFydCA9IGxhc3RGaWVsZHMubGVuZ3RoIC0gZmllbGRDb3VudDtcblx0XHRjb25zdCBmaWVsZHMgPSBBcnJheTxzdHJpbmc+KGZpZWxkQ291bnQpO1xuXG5cdFx0Zm9yIChsZXQgeCA9IDA7IHggPCBmaWVsZENvdW50OyArK3gpIHtcblx0XHRcdGZpZWxkc1t4XSA9IGZpcnN0RmllbGRzW3hdIHx8IGxhc3RGaWVsZHNbbGFzdEZpZWxkc1N0YXJ0ICsgeF0gfHwgJyc7XG5cdFx0fVxuXG5cdFx0aWYgKGlzTGFzdEZpZWxkSVB2NEFkZHJlc3MpIHtcblx0XHRcdGZpZWxkc1tmaWVsZENvdW50IC0gMV0gPSBfbm9ybWFsaXplSVB2NChmaWVsZHNbZmllbGRDb3VudCAtIDFdLCBwcm90b2NvbCk7XG5cdFx0fVxuXG5cdFx0Y29uc3QgYWxsWmVyb0ZpZWxkcyA9IGZpZWxkcy5yZWR1Y2U8QXJyYXk8e2luZGV4Om51bWJlcixsZW5ndGg6bnVtYmVyfT4+KChhY2MsIGZpZWxkLCBpbmRleCkgPT4ge1xuXHRcdFx0aWYgKCFmaWVsZCB8fCBmaWVsZCA9PT0gXCIwXCIpIHtcblx0XHRcdFx0Y29uc3QgbGFzdExvbmdlc3QgPSBhY2NbYWNjLmxlbmd0aCAtIDFdO1xuXHRcdFx0XHRpZiAobGFzdExvbmdlc3QgJiYgbGFzdExvbmdlc3QuaW5kZXggKyBsYXN0TG9uZ2VzdC5sZW5ndGggPT09IGluZGV4KSB7XG5cdFx0XHRcdFx0bGFzdExvbmdlc3QubGVuZ3RoKys7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0YWNjLnB1c2goeyBpbmRleCwgbGVuZ3RoIDogMSB9KTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIGFjYztcblx0XHR9LCBbXSk7XG5cblx0XHRjb25zdCBsb25nZXN0WmVyb0ZpZWxkcyA9IGFsbFplcm9GaWVsZHMuc29ydCgoYSwgYikgPT4gYi5sZW5ndGggLSBhLmxlbmd0aClbMF07XG5cblx0XHRsZXQgbmV3SG9zdDpzdHJpbmc7XG5cdFx0aWYgKGxvbmdlc3RaZXJvRmllbGRzICYmIGxvbmdlc3RaZXJvRmllbGRzLmxlbmd0aCA+IDEpIHtcblx0XHRcdGNvbnN0IG5ld0ZpcnN0ID0gZmllbGRzLnNsaWNlKDAsIGxvbmdlc3RaZXJvRmllbGRzLmluZGV4KSA7XG5cdFx0XHRjb25zdCBuZXdMYXN0ID0gZmllbGRzLnNsaWNlKGxvbmdlc3RaZXJvRmllbGRzLmluZGV4ICsgbG9uZ2VzdFplcm9GaWVsZHMubGVuZ3RoKTtcblx0XHRcdG5ld0hvc3QgPSBuZXdGaXJzdC5qb2luKFwiOlwiKSArIFwiOjpcIiArIG5ld0xhc3Quam9pbihcIjpcIik7XG5cdFx0fSBlbHNlIHtcblx0XHRcdG5ld0hvc3QgPSBmaWVsZHMuam9pbihcIjpcIik7XG5cdFx0fVxuXG5cdFx0aWYgKHpvbmUpIHtcblx0XHRcdG5ld0hvc3QgKz0gXCIlXCIgKyB6b25lO1xuXHRcdH1cblxuXHRcdHJldHVybiBuZXdIb3N0O1xuXHR9IGVsc2Uge1xuXHRcdHJldHVybiBob3N0O1xuXHR9XG59XG5cbmNvbnN0IFVSSV9QQVJTRSA9IC9eKD86KFteOlxcLz8jXSspOik/KD86XFwvXFwvKCg/OihbXlxcLz8jQF0qKUApPyhcXFtbXlxcLz8jXFxdXStcXF18W15cXC8/IzpdKikoPzpcXDooXFxkKikpPykpPyhbXj8jXSopKD86XFw/KFteI10qKSk/KD86IygoPzoufFxcbnxcXHIpKikpPy9pO1xuY29uc3QgTk9fTUFUQ0hfSVNfVU5ERUZJTkVEID0gKDxSZWdFeHBNYXRjaEFycmF5PihcIlwiKS5tYXRjaCgvKCl7MH0vKSlbMV0gPT09IHVuZGVmaW5lZDtcblxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlKHVyaVN0cmluZzpzdHJpbmcsIG9wdGlvbnM6VVJJT3B0aW9ucyA9IHt9KTpVUklDb21wb25lbnRzIHtcblx0Y29uc3QgY29tcG9uZW50czpVUklDb21wb25lbnRzID0ge307XG5cdGNvbnN0IHByb3RvY29sID0gKG9wdGlvbnMuaXJpICE9PSBmYWxzZSA/IElSSV9QUk9UT0NPTCA6IFVSSV9QUk9UT0NPTCk7XG5cblx0aWYgKG9wdGlvbnMucmVmZXJlbmNlID09PSBcInN1ZmZpeFwiKSB1cmlTdHJpbmcgPSAob3B0aW9ucy5zY2hlbWUgPyBvcHRpb25zLnNjaGVtZSArIFwiOlwiIDogXCJcIikgKyBcIi8vXCIgKyB1cmlTdHJpbmc7XG5cblx0Y29uc3QgbWF0Y2hlcyA9IHVyaVN0cmluZy5tYXRjaChVUklfUEFSU0UpO1xuXG5cdGlmIChtYXRjaGVzKSB7XG5cdFx0aWYgKE5PX01BVENIX0lTX1VOREVGSU5FRCkge1xuXHRcdFx0Ly9zdG9yZSBlYWNoIGNvbXBvbmVudFxuXHRcdFx0Y29tcG9uZW50cy5zY2hlbWUgPSBtYXRjaGVzWzFdO1xuXHRcdFx0Y29tcG9uZW50cy51c2VyaW5mbyA9IG1hdGNoZXNbM107XG5cdFx0XHRjb21wb25lbnRzLmhvc3QgPSBtYXRjaGVzWzRdO1xuXHRcdFx0Y29tcG9uZW50cy5wb3J0ID0gcGFyc2VJbnQobWF0Y2hlc1s1XSwgMTApO1xuXHRcdFx0Y29tcG9uZW50cy5wYXRoID0gbWF0Y2hlc1s2XSB8fCBcIlwiO1xuXHRcdFx0Y29tcG9uZW50cy5xdWVyeSA9IG1hdGNoZXNbN107XG5cdFx0XHRjb21wb25lbnRzLmZyYWdtZW50ID0gbWF0Y2hlc1s4XTtcblxuXHRcdFx0Ly9maXggcG9ydCBudW1iZXJcblx0XHRcdGlmIChpc05hTihjb21wb25lbnRzLnBvcnQpKSB7XG5cdFx0XHRcdGNvbXBvbmVudHMucG9ydCA9IG1hdGNoZXNbNV07XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHsgIC8vSUUgRklYIGZvciBpbXByb3BlciBSZWdFeHAgbWF0Y2hpbmdcblx0XHRcdC8vc3RvcmUgZWFjaCBjb21wb25lbnRcblx0XHRcdGNvbXBvbmVudHMuc2NoZW1lID0gbWF0Y2hlc1sxXSB8fCB1bmRlZmluZWQ7XG5cdFx0XHRjb21wb25lbnRzLnVzZXJpbmZvID0gKHVyaVN0cmluZy5pbmRleE9mKFwiQFwiKSAhPT0gLTEgPyBtYXRjaGVzWzNdIDogdW5kZWZpbmVkKTtcblx0XHRcdGNvbXBvbmVudHMuaG9zdCA9ICh1cmlTdHJpbmcuaW5kZXhPZihcIi8vXCIpICE9PSAtMSA/IG1hdGNoZXNbNF0gOiB1bmRlZmluZWQpO1xuXHRcdFx0Y29tcG9uZW50cy5wb3J0ID0gcGFyc2VJbnQobWF0Y2hlc1s1XSwgMTApO1xuXHRcdFx0Y29tcG9uZW50cy5wYXRoID0gbWF0Y2hlc1s2XSB8fCBcIlwiO1xuXHRcdFx0Y29tcG9uZW50cy5xdWVyeSA9ICh1cmlTdHJpbmcuaW5kZXhPZihcIj9cIikgIT09IC0xID8gbWF0Y2hlc1s3XSA6IHVuZGVmaW5lZCk7XG5cdFx0XHRjb21wb25lbnRzLmZyYWdtZW50ID0gKHVyaVN0cmluZy5pbmRleE9mKFwiI1wiKSAhPT0gLTEgPyBtYXRjaGVzWzhdIDogdW5kZWZpbmVkKTtcblxuXHRcdFx0Ly9maXggcG9ydCBudW1iZXJcblx0XHRcdGlmIChpc05hTihjb21wb25lbnRzLnBvcnQpKSB7XG5cdFx0XHRcdGNvbXBvbmVudHMucG9ydCA9ICh1cmlTdHJpbmcubWF0Y2goL1xcL1xcLyg/Oi58XFxuKSpcXDooPzpcXC98XFw/fFxcI3wkKS8pID8gbWF0Y2hlc1s0XSA6IHVuZGVmaW5lZCk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKGNvbXBvbmVudHMuaG9zdCkge1xuXHRcdFx0Ly9ub3JtYWxpemUgSVAgaG9zdHNcblx0XHRcdGNvbXBvbmVudHMuaG9zdCA9IF9ub3JtYWxpemVJUHY2KF9ub3JtYWxpemVJUHY0KGNvbXBvbmVudHMuaG9zdCwgcHJvdG9jb2wpLCBwcm90b2NvbCk7XG5cdFx0fVxuXG5cdFx0Ly9kZXRlcm1pbmUgcmVmZXJlbmNlIHR5cGVcblx0XHRpZiAoY29tcG9uZW50cy5zY2hlbWUgPT09IHVuZGVmaW5lZCAmJiBjb21wb25lbnRzLnVzZXJpbmZvID09PSB1bmRlZmluZWQgJiYgY29tcG9uZW50cy5ob3N0ID09PSB1bmRlZmluZWQgJiYgY29tcG9uZW50cy5wb3J0ID09PSB1bmRlZmluZWQgJiYgIWNvbXBvbmVudHMucGF0aCAmJiBjb21wb25lbnRzLnF1ZXJ5ID09PSB1bmRlZmluZWQpIHtcblx0XHRcdGNvbXBvbmVudHMucmVmZXJlbmNlID0gXCJzYW1lLWRvY3VtZW50XCI7XG5cdFx0fSBlbHNlIGlmIChjb21wb25lbnRzLnNjaGVtZSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRjb21wb25lbnRzLnJlZmVyZW5jZSA9IFwicmVsYXRpdmVcIjtcblx0XHR9IGVsc2UgaWYgKGNvbXBvbmVudHMuZnJhZ21lbnQgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0Y29tcG9uZW50cy5yZWZlcmVuY2UgPSBcImFic29sdXRlXCI7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGNvbXBvbmVudHMucmVmZXJlbmNlID0gXCJ1cmlcIjtcblx0XHR9XG5cblx0XHQvL2NoZWNrIGZvciByZWZlcmVuY2UgZXJyb3JzXG5cdFx0aWYgKG9wdGlvbnMucmVmZXJlbmNlICYmIG9wdGlvbnMucmVmZXJlbmNlICE9PSBcInN1ZmZpeFwiICYmIG9wdGlvbnMucmVmZXJlbmNlICE9PSBjb21wb25lbnRzLnJlZmVyZW5jZSkge1xuXHRcdFx0Y29tcG9uZW50cy5lcnJvciA9IGNvbXBvbmVudHMuZXJyb3IgfHwgXCJVUkkgaXMgbm90IGEgXCIgKyBvcHRpb25zLnJlZmVyZW5jZSArIFwiIHJlZmVyZW5jZS5cIjtcblx0XHR9XG5cblx0XHQvL2ZpbmQgc2NoZW1lIGhhbmRsZXJcblx0XHRjb25zdCBzY2hlbWVIYW5kbGVyID0gU0NIRU1FU1sob3B0aW9ucy5zY2hlbWUgfHwgY29tcG9uZW50cy5zY2hlbWUgfHwgXCJcIikudG9Mb3dlckNhc2UoKV07XG5cblx0XHQvL2NoZWNrIGlmIHNjaGVtZSBjYW4ndCBoYW5kbGUgSVJJc1xuXHRcdGlmICghb3B0aW9ucy51bmljb2RlU3VwcG9ydCAmJiAoIXNjaGVtZUhhbmRsZXIgfHwgIXNjaGVtZUhhbmRsZXIudW5pY29kZVN1cHBvcnQpKSB7XG5cdFx0XHQvL2lmIGhvc3QgY29tcG9uZW50IGlzIGEgZG9tYWluIG5hbWVcblx0XHRcdGlmIChjb21wb25lbnRzLmhvc3QgJiYgKG9wdGlvbnMuZG9tYWluSG9zdCB8fCAoc2NoZW1lSGFuZGxlciAmJiBzY2hlbWVIYW5kbGVyLmRvbWFpbkhvc3QpKSkge1xuXHRcdFx0XHQvL2NvbnZlcnQgVW5pY29kZSBJRE4gLT4gQVNDSUkgSUROXG5cdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0Y29tcG9uZW50cy5ob3N0ID0gcHVueWNvZGUudG9BU0NJSShjb21wb25lbnRzLmhvc3QucmVwbGFjZShwcm90b2NvbC5QQ1RfRU5DT0RFRCwgcGN0RGVjQ2hhcnMpLnRvTG93ZXJDYXNlKCkpO1xuXHRcdFx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRcdFx0Y29tcG9uZW50cy5lcnJvciA9IGNvbXBvbmVudHMuZXJyb3IgfHwgXCJIb3N0J3MgZG9tYWluIG5hbWUgY2FuIG5vdCBiZSBjb252ZXJ0ZWQgdG8gQVNDSUkgdmlhIHB1bnljb2RlOiBcIiArIGU7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdC8vY29udmVydCBJUkkgLT4gVVJJXG5cdFx0XHRfbm9ybWFsaXplQ29tcG9uZW50RW5jb2RpbmcoY29tcG9uZW50cywgVVJJX1BST1RPQ09MKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0Ly9ub3JtYWxpemUgZW5jb2RpbmdzXG5cdFx0XHRfbm9ybWFsaXplQ29tcG9uZW50RW5jb2RpbmcoY29tcG9uZW50cywgcHJvdG9jb2wpO1xuXHRcdH1cblxuXHRcdC8vcGVyZm9ybSBzY2hlbWUgc3BlY2lmaWMgcGFyc2luZ1xuXHRcdGlmIChzY2hlbWVIYW5kbGVyICYmIHNjaGVtZUhhbmRsZXIucGFyc2UpIHtcblx0XHRcdHNjaGVtZUhhbmRsZXIucGFyc2UoY29tcG9uZW50cywgb3B0aW9ucyk7XG5cdFx0fVxuXHR9IGVsc2Uge1xuXHRcdGNvbXBvbmVudHMuZXJyb3IgPSBjb21wb25lbnRzLmVycm9yIHx8IFwiVVJJIGNhbiBub3QgYmUgcGFyc2VkLlwiO1xuXHR9XG5cblx0cmV0dXJuIGNvbXBvbmVudHM7XG59O1xuXG5mdW5jdGlvbiBfcmVjb21wb3NlQXV0aG9yaXR5KGNvbXBvbmVudHM6VVJJQ29tcG9uZW50cywgb3B0aW9uczpVUklPcHRpb25zKTpzdHJpbmd8dW5kZWZpbmVkIHtcblx0Y29uc3QgcHJvdG9jb2wgPSAob3B0aW9ucy5pcmkgIT09IGZhbHNlID8gSVJJX1BST1RPQ09MIDogVVJJX1BST1RPQ09MKTtcblx0Y29uc3QgdXJpVG9rZW5zOkFycmF5PHN0cmluZz4gPSBbXTtcblxuXHRpZiAoY29tcG9uZW50cy51c2VyaW5mbyAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0dXJpVG9rZW5zLnB1c2goY29tcG9uZW50cy51c2VyaW5mbyk7XG5cdFx0dXJpVG9rZW5zLnB1c2goXCJAXCIpO1xuXHR9XG5cblx0aWYgKGNvbXBvbmVudHMuaG9zdCAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0Ly9ub3JtYWxpemUgSVAgaG9zdHMsIGFkZCBicmFja2V0cyBhbmQgZXNjYXBlIHpvbmUgc2VwYXJhdG9yIGZvciBJUHY2XG5cdFx0dXJpVG9rZW5zLnB1c2goX25vcm1hbGl6ZUlQdjYoX25vcm1hbGl6ZUlQdjQoU3RyaW5nKGNvbXBvbmVudHMuaG9zdCksIHByb3RvY29sKSwgcHJvdG9jb2wpLnJlcGxhY2UocHJvdG9jb2wuSVBWNkFERFJFU1MsIChfLCAkMSwgJDIpID0+IFwiW1wiICsgJDEgKyAoJDIgPyBcIiUyNVwiICsgJDIgOiBcIlwiKSArIFwiXVwiKSk7XG5cdH1cblxuXHRpZiAodHlwZW9mIGNvbXBvbmVudHMucG9ydCA9PT0gXCJudW1iZXJcIiB8fCB0eXBlb2YgY29tcG9uZW50cy5wb3J0ID09PSBcInN0cmluZ1wiKSB7XG5cdFx0dXJpVG9rZW5zLnB1c2goXCI6XCIpO1xuXHRcdHVyaVRva2Vucy5wdXNoKFN0cmluZyhjb21wb25lbnRzLnBvcnQpKTtcblx0fVxuXG5cdHJldHVybiB1cmlUb2tlbnMubGVuZ3RoID8gdXJpVG9rZW5zLmpvaW4oXCJcIikgOiB1bmRlZmluZWQ7XG59O1xuXG5jb25zdCBSRFMxID0gL15cXC5cXC4/XFwvLztcbmNvbnN0IFJEUzIgPSAvXlxcL1xcLihcXC98JCkvO1xuY29uc3QgUkRTMyA9IC9eXFwvXFwuXFwuKFxcL3wkKS87XG5jb25zdCBSRFM0ID0gL15cXC5cXC4/JC87XG5jb25zdCBSRFM1ID0gL15cXC8/KD86LnxcXG4pKj8oPz1cXC98JCkvO1xuXG5leHBvcnQgZnVuY3Rpb24gcmVtb3ZlRG90U2VnbWVudHMoaW5wdXQ6c3RyaW5nKTpzdHJpbmcge1xuXHRjb25zdCBvdXRwdXQ6QXJyYXk8c3RyaW5nPiA9IFtdO1xuXG5cdHdoaWxlIChpbnB1dC5sZW5ndGgpIHtcblx0XHRpZiAoaW5wdXQubWF0Y2goUkRTMSkpIHtcblx0XHRcdGlucHV0ID0gaW5wdXQucmVwbGFjZShSRFMxLCBcIlwiKTtcblx0XHR9IGVsc2UgaWYgKGlucHV0Lm1hdGNoKFJEUzIpKSB7XG5cdFx0XHRpbnB1dCA9IGlucHV0LnJlcGxhY2UoUkRTMiwgXCIvXCIpO1xuXHRcdH0gZWxzZSBpZiAoaW5wdXQubWF0Y2goUkRTMykpIHtcblx0XHRcdGlucHV0ID0gaW5wdXQucmVwbGFjZShSRFMzLCBcIi9cIik7XG5cdFx0XHRvdXRwdXQucG9wKCk7XG5cdFx0fSBlbHNlIGlmIChpbnB1dCA9PT0gXCIuXCIgfHwgaW5wdXQgPT09IFwiLi5cIikge1xuXHRcdFx0aW5wdXQgPSBcIlwiO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRjb25zdCBpbSA9IGlucHV0Lm1hdGNoKFJEUzUpO1xuXHRcdFx0aWYgKGltKSB7XG5cdFx0XHRcdGNvbnN0IHMgPSBpbVswXTtcblx0XHRcdFx0aW5wdXQgPSBpbnB1dC5zbGljZShzLmxlbmd0aCk7XG5cdFx0XHRcdG91dHB1dC5wdXNoKHMpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiVW5leHBlY3RlZCBkb3Qgc2VnbWVudCBjb25kaXRpb25cIik7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIG91dHB1dC5qb2luKFwiXCIpO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIHNlcmlhbGl6ZShjb21wb25lbnRzOlVSSUNvbXBvbmVudHMsIG9wdGlvbnM6VVJJT3B0aW9ucyA9IHt9KTpzdHJpbmcge1xuXHRjb25zdCBwcm90b2NvbCA9IChvcHRpb25zLmlyaSA/IElSSV9QUk9UT0NPTCA6IFVSSV9QUk9UT0NPTCk7XG5cdGNvbnN0IHVyaVRva2VuczpBcnJheTxzdHJpbmc+ID0gW107XG5cblx0Ly9maW5kIHNjaGVtZSBoYW5kbGVyXG5cdGNvbnN0IHNjaGVtZUhhbmRsZXIgPSBTQ0hFTUVTWyhvcHRpb25zLnNjaGVtZSB8fCBjb21wb25lbnRzLnNjaGVtZSB8fCBcIlwiKS50b0xvd2VyQ2FzZSgpXTtcblxuXHQvL3BlcmZvcm0gc2NoZW1lIHNwZWNpZmljIHNlcmlhbGl6YXRpb25cblx0aWYgKHNjaGVtZUhhbmRsZXIgJiYgc2NoZW1lSGFuZGxlci5zZXJpYWxpemUpIHNjaGVtZUhhbmRsZXIuc2VyaWFsaXplKGNvbXBvbmVudHMsIG9wdGlvbnMpO1xuXG5cdGlmIChjb21wb25lbnRzLmhvc3QpIHtcblx0XHQvL2lmIGhvc3QgY29tcG9uZW50IGlzIGFuIElQdjYgYWRkcmVzc1xuXHRcdGlmIChwcm90b2NvbC5JUFY2QUREUkVTUy50ZXN0KGNvbXBvbmVudHMuaG9zdCkpIHtcblx0XHRcdC8vVE9ETzogbm9ybWFsaXplIElQdjYgYWRkcmVzcyBhcyBwZXIgUkZDIDU5NTJcblx0XHR9XG5cblx0XHQvL2lmIGhvc3QgY29tcG9uZW50IGlzIGEgZG9tYWluIG5hbWVcblx0XHRlbHNlIGlmIChvcHRpb25zLmRvbWFpbkhvc3QgfHwgKHNjaGVtZUhhbmRsZXIgJiYgc2NoZW1lSGFuZGxlci5kb21haW5Ib3N0KSkge1xuXHRcdFx0Ly9jb252ZXJ0IElETiB2aWEgcHVueWNvZGVcblx0XHRcdHRyeSB7XG5cdFx0XHRcdGNvbXBvbmVudHMuaG9zdCA9ICghb3B0aW9ucy5pcmkgPyBwdW55Y29kZS50b0FTQ0lJKGNvbXBvbmVudHMuaG9zdC5yZXBsYWNlKHByb3RvY29sLlBDVF9FTkNPREVELCBwY3REZWNDaGFycykudG9Mb3dlckNhc2UoKSkgOiBwdW55Y29kZS50b1VuaWNvZGUoY29tcG9uZW50cy5ob3N0KSk7XG5cdFx0XHR9IGNhdGNoIChlKSB7XG5cdFx0XHRcdGNvbXBvbmVudHMuZXJyb3IgPSBjb21wb25lbnRzLmVycm9yIHx8IFwiSG9zdCdzIGRvbWFpbiBuYW1lIGNhbiBub3QgYmUgY29udmVydGVkIHRvIFwiICsgKCFvcHRpb25zLmlyaSA/IFwiQVNDSUlcIiA6IFwiVW5pY29kZVwiKSArIFwiIHZpYSBwdW55Y29kZTogXCIgKyBlO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8vbm9ybWFsaXplIGVuY29kaW5nXG5cdF9ub3JtYWxpemVDb21wb25lbnRFbmNvZGluZyhjb21wb25lbnRzLCBwcm90b2NvbCk7XG5cblx0aWYgKG9wdGlvbnMucmVmZXJlbmNlICE9PSBcInN1ZmZpeFwiICYmIGNvbXBvbmVudHMuc2NoZW1lKSB7XG5cdFx0dXJpVG9rZW5zLnB1c2goY29tcG9uZW50cy5zY2hlbWUpO1xuXHRcdHVyaVRva2Vucy5wdXNoKFwiOlwiKTtcblx0fVxuXG5cdGNvbnN0IGF1dGhvcml0eSA9IF9yZWNvbXBvc2VBdXRob3JpdHkoY29tcG9uZW50cywgb3B0aW9ucyk7XG5cdGlmIChhdXRob3JpdHkgIT09IHVuZGVmaW5lZCkge1xuXHRcdGlmIChvcHRpb25zLnJlZmVyZW5jZSAhPT0gXCJzdWZmaXhcIikge1xuXHRcdFx0dXJpVG9rZW5zLnB1c2goXCIvL1wiKTtcblx0XHR9XG5cblx0XHR1cmlUb2tlbnMucHVzaChhdXRob3JpdHkpO1xuXG5cdFx0aWYgKGNvbXBvbmVudHMucGF0aCAmJiBjb21wb25lbnRzLnBhdGguY2hhckF0KDApICE9PSBcIi9cIikge1xuXHRcdFx0dXJpVG9rZW5zLnB1c2goXCIvXCIpO1xuXHRcdH1cblx0fVxuXG5cdGlmIChjb21wb25lbnRzLnBhdGggIT09IHVuZGVmaW5lZCkge1xuXHRcdGxldCBzID0gY29tcG9uZW50cy5wYXRoO1xuXG5cdFx0aWYgKCFvcHRpb25zLmFic29sdXRlUGF0aCAmJiAoIXNjaGVtZUhhbmRsZXIgfHwgIXNjaGVtZUhhbmRsZXIuYWJzb2x1dGVQYXRoKSkge1xuXHRcdFx0cyA9IHJlbW92ZURvdFNlZ21lbnRzKHMpO1xuXHRcdH1cblxuXHRcdGlmIChhdXRob3JpdHkgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0cyA9IHMucmVwbGFjZSgvXlxcL1xcLy8sIFwiLyUyRlwiKTsgIC8vZG9uJ3QgYWxsb3cgdGhlIHBhdGggdG8gc3RhcnQgd2l0aCBcIi8vXCJcblx0XHR9XG5cblx0XHR1cmlUb2tlbnMucHVzaChzKTtcblx0fVxuXG5cdGlmIChjb21wb25lbnRzLnF1ZXJ5ICE9PSB1bmRlZmluZWQpIHtcblx0XHR1cmlUb2tlbnMucHVzaChcIj9cIik7XG5cdFx0dXJpVG9rZW5zLnB1c2goY29tcG9uZW50cy5xdWVyeSk7XG5cdH1cblxuXHRpZiAoY29tcG9uZW50cy5mcmFnbWVudCAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0dXJpVG9rZW5zLnB1c2goXCIjXCIpO1xuXHRcdHVyaVRva2Vucy5wdXNoKGNvbXBvbmVudHMuZnJhZ21lbnQpO1xuXHR9XG5cblx0cmV0dXJuIHVyaVRva2Vucy5qb2luKFwiXCIpOyAgLy9tZXJnZSB0b2tlbnMgaW50byBhIHN0cmluZ1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVDb21wb25lbnRzKGJhc2U6VVJJQ29tcG9uZW50cywgcmVsYXRpdmU6VVJJQ29tcG9uZW50cywgb3B0aW9uczpVUklPcHRpb25zID0ge30sIHNraXBOb3JtYWxpemF0aW9uPzpib29sZWFuKTpVUklDb21wb25lbnRzIHtcblx0Y29uc3QgdGFyZ2V0OlVSSUNvbXBvbmVudHMgPSB7fTtcblxuXHRpZiAoIXNraXBOb3JtYWxpemF0aW9uKSB7XG5cdFx0YmFzZSA9IHBhcnNlKHNlcmlhbGl6ZShiYXNlLCBvcHRpb25zKSwgb3B0aW9ucyk7ICAvL25vcm1hbGl6ZSBiYXNlIGNvbXBvbmVudHNcblx0XHRyZWxhdGl2ZSA9IHBhcnNlKHNlcmlhbGl6ZShyZWxhdGl2ZSwgb3B0aW9ucyksIG9wdGlvbnMpOyAgLy9ub3JtYWxpemUgcmVsYXRpdmUgY29tcG9uZW50c1xuXHR9XG5cdG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuXG5cdGlmICghb3B0aW9ucy50b2xlcmFudCAmJiByZWxhdGl2ZS5zY2hlbWUpIHtcblx0XHR0YXJnZXQuc2NoZW1lID0gcmVsYXRpdmUuc2NoZW1lO1xuXHRcdC8vdGFyZ2V0LmF1dGhvcml0eSA9IHJlbGF0aXZlLmF1dGhvcml0eTtcblx0XHR0YXJnZXQudXNlcmluZm8gPSByZWxhdGl2ZS51c2VyaW5mbztcblx0XHR0YXJnZXQuaG9zdCA9IHJlbGF0aXZlLmhvc3Q7XG5cdFx0dGFyZ2V0LnBvcnQgPSByZWxhdGl2ZS5wb3J0O1xuXHRcdHRhcmdldC5wYXRoID0gcmVtb3ZlRG90U2VnbWVudHMocmVsYXRpdmUucGF0aCB8fCBcIlwiKTtcblx0XHR0YXJnZXQucXVlcnkgPSByZWxhdGl2ZS5xdWVyeTtcblx0fSBlbHNlIHtcblx0XHRpZiAocmVsYXRpdmUudXNlcmluZm8gIT09IHVuZGVmaW5lZCB8fCByZWxhdGl2ZS5ob3N0ICE9PSB1bmRlZmluZWQgfHwgcmVsYXRpdmUucG9ydCAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHQvL3RhcmdldC5hdXRob3JpdHkgPSByZWxhdGl2ZS5hdXRob3JpdHk7XG5cdFx0XHR0YXJnZXQudXNlcmluZm8gPSByZWxhdGl2ZS51c2VyaW5mbztcblx0XHRcdHRhcmdldC5ob3N0ID0gcmVsYXRpdmUuaG9zdDtcblx0XHRcdHRhcmdldC5wb3J0ID0gcmVsYXRpdmUucG9ydDtcblx0XHRcdHRhcmdldC5wYXRoID0gcmVtb3ZlRG90U2VnbWVudHMocmVsYXRpdmUucGF0aCB8fCBcIlwiKTtcblx0XHRcdHRhcmdldC5xdWVyeSA9IHJlbGF0aXZlLnF1ZXJ5O1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRpZiAoIXJlbGF0aXZlLnBhdGgpIHtcblx0XHRcdFx0dGFyZ2V0LnBhdGggPSBiYXNlLnBhdGg7XG5cdFx0XHRcdGlmIChyZWxhdGl2ZS5xdWVyeSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdFx0dGFyZ2V0LnF1ZXJ5ID0gcmVsYXRpdmUucXVlcnk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0dGFyZ2V0LnF1ZXJ5ID0gYmFzZS5xdWVyeTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0aWYgKHJlbGF0aXZlLnBhdGguY2hhckF0KDApID09PSBcIi9cIikge1xuXHRcdFx0XHRcdHRhcmdldC5wYXRoID0gcmVtb3ZlRG90U2VnbWVudHMocmVsYXRpdmUucGF0aCk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0aWYgKChiYXNlLnVzZXJpbmZvICE9PSB1bmRlZmluZWQgfHwgYmFzZS5ob3N0ICE9PSB1bmRlZmluZWQgfHwgYmFzZS5wb3J0ICE9PSB1bmRlZmluZWQpICYmICFiYXNlLnBhdGgpIHtcblx0XHRcdFx0XHRcdHRhcmdldC5wYXRoID0gXCIvXCIgKyByZWxhdGl2ZS5wYXRoO1xuXHRcdFx0XHRcdH0gZWxzZSBpZiAoIWJhc2UucGF0aCkge1xuXHRcdFx0XHRcdFx0dGFyZ2V0LnBhdGggPSByZWxhdGl2ZS5wYXRoO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHR0YXJnZXQucGF0aCA9IGJhc2UucGF0aC5zbGljZSgwLCBiYXNlLnBhdGgubGFzdEluZGV4T2YoXCIvXCIpICsgMSkgKyByZWxhdGl2ZS5wYXRoO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHR0YXJnZXQucGF0aCA9IHJlbW92ZURvdFNlZ21lbnRzKHRhcmdldC5wYXRoKTtcblx0XHRcdFx0fVxuXHRcdFx0XHR0YXJnZXQucXVlcnkgPSByZWxhdGl2ZS5xdWVyeTtcblx0XHRcdH1cblx0XHRcdC8vdGFyZ2V0LmF1dGhvcml0eSA9IGJhc2UuYXV0aG9yaXR5O1xuXHRcdFx0dGFyZ2V0LnVzZXJpbmZvID0gYmFzZS51c2VyaW5mbztcblx0XHRcdHRhcmdldC5ob3N0ID0gYmFzZS5ob3N0O1xuXHRcdFx0dGFyZ2V0LnBvcnQgPSBiYXNlLnBvcnQ7XG5cdFx0fVxuXHRcdHRhcmdldC5zY2hlbWUgPSBiYXNlLnNjaGVtZTtcblx0fVxuXG5cdHRhcmdldC5mcmFnbWVudCA9IHJlbGF0aXZlLmZyYWdtZW50O1xuXG5cdHJldHVybiB0YXJnZXQ7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gcmVzb2x2ZShiYXNlVVJJOnN0cmluZywgcmVsYXRpdmVVUkk6c3RyaW5nLCBvcHRpb25zPzpVUklPcHRpb25zKTpzdHJpbmcge1xuXHRjb25zdCBzY2hlbWVsZXNzT3B0aW9ucyA9IGFzc2lnbih7IHNjaGVtZSA6ICdudWxsJyB9LCBvcHRpb25zKTtcblx0cmV0dXJuIHNlcmlhbGl6ZShyZXNvbHZlQ29tcG9uZW50cyhwYXJzZShiYXNlVVJJLCBzY2hlbWVsZXNzT3B0aW9ucyksIHBhcnNlKHJlbGF0aXZlVVJJLCBzY2hlbWVsZXNzT3B0aW9ucyksIHNjaGVtZWxlc3NPcHRpb25zLCB0cnVlKSwgc2NoZW1lbGVzc09wdGlvbnMpO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIG5vcm1hbGl6ZSh1cmk6c3RyaW5nLCBvcHRpb25zPzpVUklPcHRpb25zKTpzdHJpbmc7XG5leHBvcnQgZnVuY3Rpb24gbm9ybWFsaXplKHVyaTpVUklDb21wb25lbnRzLCBvcHRpb25zPzpVUklPcHRpb25zKTpVUklDb21wb25lbnRzO1xuZXhwb3J0IGZ1bmN0aW9uIG5vcm1hbGl6ZSh1cmk6YW55LCBvcHRpb25zPzpVUklPcHRpb25zKTphbnkge1xuXHRpZiAodHlwZW9mIHVyaSA9PT0gXCJzdHJpbmdcIikge1xuXHRcdHVyaSA9IHNlcmlhbGl6ZShwYXJzZSh1cmksIG9wdGlvbnMpLCBvcHRpb25zKTtcblx0fSBlbHNlIGlmICh0eXBlT2YodXJpKSA9PT0gXCJvYmplY3RcIikge1xuXHRcdHVyaSA9IHBhcnNlKHNlcmlhbGl6ZSg8VVJJQ29tcG9uZW50cz51cmksIG9wdGlvbnMpLCBvcHRpb25zKTtcblx0fVxuXG5cdHJldHVybiB1cmk7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gZXF1YWwodXJpQTpzdHJpbmcsIHVyaUI6c3RyaW5nLCBvcHRpb25zPzogVVJJT3B0aW9ucyk6Ym9vbGVhbjtcbmV4cG9ydCBmdW5jdGlvbiBlcXVhbCh1cmlBOlVSSUNvbXBvbmVudHMsIHVyaUI6VVJJQ29tcG9uZW50cywgb3B0aW9ucz86VVJJT3B0aW9ucyk6Ym9vbGVhbjtcbmV4cG9ydCBmdW5jdGlvbiBlcXVhbCh1cmlBOmFueSwgdXJpQjphbnksIG9wdGlvbnM/OlVSSU9wdGlvbnMpOmJvb2xlYW4ge1xuXHRpZiAodHlwZW9mIHVyaUEgPT09IFwic3RyaW5nXCIpIHtcblx0XHR1cmlBID0gc2VyaWFsaXplKHBhcnNlKHVyaUEsIG9wdGlvbnMpLCBvcHRpb25zKTtcblx0fSBlbHNlIGlmICh0eXBlT2YodXJpQSkgPT09IFwib2JqZWN0XCIpIHtcblx0XHR1cmlBID0gc2VyaWFsaXplKDxVUklDb21wb25lbnRzPnVyaUEsIG9wdGlvbnMpO1xuXHR9XG5cblx0aWYgKHR5cGVvZiB1cmlCID09PSBcInN0cmluZ1wiKSB7XG5cdFx0dXJpQiA9IHNlcmlhbGl6ZShwYXJzZSh1cmlCLCBvcHRpb25zKSwgb3B0aW9ucyk7XG5cdH0gZWxzZSBpZiAodHlwZU9mKHVyaUIpID09PSBcIm9iamVjdFwiKSB7XG5cdFx0dXJpQiA9IHNlcmlhbGl6ZSg8VVJJQ29tcG9uZW50cz51cmlCLCBvcHRpb25zKTtcblx0fVxuXG5cdHJldHVybiB1cmlBID09PSB1cmlCO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIGVzY2FwZUNvbXBvbmVudChzdHI6c3RyaW5nLCBvcHRpb25zPzpVUklPcHRpb25zKTpzdHJpbmcge1xuXHRyZXR1cm4gc3RyICYmIHN0ci50b1N0cmluZygpLnJlcGxhY2UoKCFvcHRpb25zIHx8ICFvcHRpb25zLmlyaSA/IFVSSV9QUk9UT0NPTC5FU0NBUEUgOiBJUklfUFJPVE9DT0wuRVNDQVBFKSwgcGN0RW5jQ2hhcik7XG59O1xuXG5leHBvcnQgZnVuY3Rpb24gdW5lc2NhcGVDb21wb25lbnQoc3RyOnN0cmluZywgb3B0aW9ucz86VVJJT3B0aW9ucyk6c3RyaW5nIHtcblx0cmV0dXJuIHN0ciAmJiBzdHIudG9TdHJpbmcoKS5yZXBsYWNlKCghb3B0aW9ucyB8fCAhb3B0aW9ucy5pcmkgPyBVUklfUFJPVE9DT0wuUENUX0VOQ09ERUQgOiBJUklfUFJPVE9DT0wuUENUX0VOQ09ERUQpLCBwY3REZWNDaGFycyk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcblxuLyoqIEhpZ2hlc3QgcG9zaXRpdmUgc2lnbmVkIDMyLWJpdCBmbG9hdCB2YWx1ZSAqL1xuY29uc3QgbWF4SW50ID0gMjE0NzQ4MzY0NzsgLy8gYWthLiAweDdGRkZGRkZGIG9yIDJeMzEtMVxuXG4vKiogQm9vdHN0cmluZyBwYXJhbWV0ZXJzICovXG5jb25zdCBiYXNlID0gMzY7XG5jb25zdCB0TWluID0gMTtcbmNvbnN0IHRNYXggPSAyNjtcbmNvbnN0IHNrZXcgPSAzODtcbmNvbnN0IGRhbXAgPSA3MDA7XG5jb25zdCBpbml0aWFsQmlhcyA9IDcyO1xuY29uc3QgaW5pdGlhbE4gPSAxMjg7IC8vIDB4ODBcbmNvbnN0IGRlbGltaXRlciA9ICctJzsgLy8gJ1xceDJEJ1xuXG4vKiogUmVndWxhciBleHByZXNzaW9ucyAqL1xuY29uc3QgcmVnZXhQdW55Y29kZSA9IC9eeG4tLS87XG5jb25zdCByZWdleE5vbkFTQ0lJID0gL1teXFwwLVxceDdFXS87IC8vIG5vbi1BU0NJSSBjaGFyc1xuY29uc3QgcmVnZXhTZXBhcmF0b3JzID0gL1tcXHgyRVxcdTMwMDJcXHVGRjBFXFx1RkY2MV0vZzsgLy8gUkZDIDM0OTAgc2VwYXJhdG9yc1xuXG4vKiogRXJyb3IgbWVzc2FnZXMgKi9cbmNvbnN0IGVycm9ycyA9IHtcblx0J292ZXJmbG93JzogJ092ZXJmbG93OiBpbnB1dCBuZWVkcyB3aWRlciBpbnRlZ2VycyB0byBwcm9jZXNzJyxcblx0J25vdC1iYXNpYyc6ICdJbGxlZ2FsIGlucHV0ID49IDB4ODAgKG5vdCBhIGJhc2ljIGNvZGUgcG9pbnQpJyxcblx0J2ludmFsaWQtaW5wdXQnOiAnSW52YWxpZCBpbnB1dCdcbn07XG5cbi8qKiBDb252ZW5pZW5jZSBzaG9ydGN1dHMgKi9cbmNvbnN0IGJhc2VNaW51c1RNaW4gPSBiYXNlIC0gdE1pbjtcbmNvbnN0IGZsb29yID0gTWF0aC5mbG9vcjtcbmNvbnN0IHN0cmluZ0Zyb21DaGFyQ29kZSA9IFN0cmluZy5mcm9tQ2hhckNvZGU7XG5cbi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qL1xuXG4vKipcbiAqIEEgZ2VuZXJpYyBlcnJvciB1dGlsaXR5IGZ1bmN0aW9uLlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7U3RyaW5nfSB0eXBlIFRoZSBlcnJvciB0eXBlLlxuICogQHJldHVybnMge0Vycm9yfSBUaHJvd3MgYSBgUmFuZ2VFcnJvcmAgd2l0aCB0aGUgYXBwbGljYWJsZSBlcnJvciBtZXNzYWdlLlxuICovXG5mdW5jdGlvbiBlcnJvcih0eXBlKSB7XG5cdHRocm93IG5ldyBSYW5nZUVycm9yKGVycm9yc1t0eXBlXSk7XG59XG5cbi8qKlxuICogQSBnZW5lcmljIGBBcnJheSNtYXBgIHV0aWxpdHkgZnVuY3Rpb24uXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtBcnJheX0gYXJyYXkgVGhlIGFycmF5IHRvIGl0ZXJhdGUgb3Zlci5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrIFRoZSBmdW5jdGlvbiB0aGF0IGdldHMgY2FsbGVkIGZvciBldmVyeSBhcnJheVxuICogaXRlbS5cbiAqIEByZXR1cm5zIHtBcnJheX0gQSBuZXcgYXJyYXkgb2YgdmFsdWVzIHJldHVybmVkIGJ5IHRoZSBjYWxsYmFjayBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gbWFwKGFycmF5LCBmbikge1xuXHRjb25zdCByZXN1bHQgPSBbXTtcblx0bGV0IGxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcblx0d2hpbGUgKGxlbmd0aC0tKSB7XG5cdFx0cmVzdWx0W2xlbmd0aF0gPSBmbihhcnJheVtsZW5ndGhdKTtcblx0fVxuXHRyZXR1cm4gcmVzdWx0O1xufVxuXG4vKipcbiAqIEEgc2ltcGxlIGBBcnJheSNtYXBgLWxpa2Ugd3JhcHBlciB0byB3b3JrIHdpdGggZG9tYWluIG5hbWUgc3RyaW5ncyBvciBlbWFpbFxuICogYWRkcmVzc2VzLlxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7U3RyaW5nfSBkb21haW4gVGhlIGRvbWFpbiBuYW1lIG9yIGVtYWlsIGFkZHJlc3MuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBUaGUgZnVuY3Rpb24gdGhhdCBnZXRzIGNhbGxlZCBmb3IgZXZlcnlcbiAqIGNoYXJhY3Rlci5cbiAqIEByZXR1cm5zIHtBcnJheX0gQSBuZXcgc3RyaW5nIG9mIGNoYXJhY3RlcnMgcmV0dXJuZWQgYnkgdGhlIGNhbGxiYWNrXG4gKiBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gbWFwRG9tYWluKHN0cmluZywgZm4pIHtcblx0Y29uc3QgcGFydHMgPSBzdHJpbmcuc3BsaXQoJ0AnKTtcblx0bGV0IHJlc3VsdCA9ICcnO1xuXHRpZiAocGFydHMubGVuZ3RoID4gMSkge1xuXHRcdC8vIEluIGVtYWlsIGFkZHJlc3Nlcywgb25seSB0aGUgZG9tYWluIG5hbWUgc2hvdWxkIGJlIHB1bnljb2RlZC4gTGVhdmVcblx0XHQvLyB0aGUgbG9jYWwgcGFydCAoaS5lLiBldmVyeXRoaW5nIHVwIHRvIGBAYCkgaW50YWN0LlxuXHRcdHJlc3VsdCA9IHBhcnRzWzBdICsgJ0AnO1xuXHRcdHN0cmluZyA9IHBhcnRzWzFdO1xuXHR9XG5cdC8vIEF2b2lkIGBzcGxpdChyZWdleClgIGZvciBJRTggY29tcGF0aWJpbGl0eS4gU2VlICMxNy5cblx0c3RyaW5nID0gc3RyaW5nLnJlcGxhY2UocmVnZXhTZXBhcmF0b3JzLCAnXFx4MkUnKTtcblx0Y29uc3QgbGFiZWxzID0gc3RyaW5nLnNwbGl0KCcuJyk7XG5cdGNvbnN0IGVuY29kZWQgPSBtYXAobGFiZWxzLCBmbikuam9pbignLicpO1xuXHRyZXR1cm4gcmVzdWx0ICsgZW5jb2RlZDtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGFuIGFycmF5IGNvbnRhaW5pbmcgdGhlIG51bWVyaWMgY29kZSBwb2ludHMgb2YgZWFjaCBVbmljb2RlXG4gKiBjaGFyYWN0ZXIgaW4gdGhlIHN0cmluZy4gV2hpbGUgSmF2YVNjcmlwdCB1c2VzIFVDUy0yIGludGVybmFsbHksXG4gKiB0aGlzIGZ1bmN0aW9uIHdpbGwgY29udmVydCBhIHBhaXIgb2Ygc3Vycm9nYXRlIGhhbHZlcyAoZWFjaCBvZiB3aGljaFxuICogVUNTLTIgZXhwb3NlcyBhcyBzZXBhcmF0ZSBjaGFyYWN0ZXJzKSBpbnRvIGEgc2luZ2xlIGNvZGUgcG9pbnQsXG4gKiBtYXRjaGluZyBVVEYtMTYuXG4gKiBAc2VlIGBwdW55Y29kZS51Y3MyLmVuY29kZWBcbiAqIEBzZWUgPGh0dHBzOi8vbWF0aGlhc2J5bmVucy5iZS9ub3Rlcy9qYXZhc2NyaXB0LWVuY29kaW5nPlxuICogQG1lbWJlck9mIHB1bnljb2RlLnVjczJcbiAqIEBuYW1lIGRlY29kZVxuICogQHBhcmFtIHtTdHJpbmd9IHN0cmluZyBUaGUgVW5pY29kZSBpbnB1dCBzdHJpbmcgKFVDUy0yKS5cbiAqIEByZXR1cm5zIHtBcnJheX0gVGhlIG5ldyBhcnJheSBvZiBjb2RlIHBvaW50cy5cbiAqL1xuZnVuY3Rpb24gdWNzMmRlY29kZShzdHJpbmcpIHtcblx0Y29uc3Qgb3V0cHV0ID0gW107XG5cdGxldCBjb3VudGVyID0gMDtcblx0Y29uc3QgbGVuZ3RoID0gc3RyaW5nLmxlbmd0aDtcblx0d2hpbGUgKGNvdW50ZXIgPCBsZW5ndGgpIHtcblx0XHRjb25zdCB2YWx1ZSA9IHN0cmluZy5jaGFyQ29kZUF0KGNvdW50ZXIrKyk7XG5cdFx0aWYgKHZhbHVlID49IDB4RDgwMCAmJiB2YWx1ZSA8PSAweERCRkYgJiYgY291bnRlciA8IGxlbmd0aCkge1xuXHRcdFx0Ly8gSXQncyBhIGhpZ2ggc3Vycm9nYXRlLCBhbmQgdGhlcmUgaXMgYSBuZXh0IGNoYXJhY3Rlci5cblx0XHRcdGNvbnN0IGV4dHJhID0gc3RyaW5nLmNoYXJDb2RlQXQoY291bnRlcisrKTtcblx0XHRcdGlmICgoZXh0cmEgJiAweEZDMDApID09IDB4REMwMCkgeyAvLyBMb3cgc3Vycm9nYXRlLlxuXHRcdFx0XHRvdXRwdXQucHVzaCgoKHZhbHVlICYgMHgzRkYpIDw8IDEwKSArIChleHRyYSAmIDB4M0ZGKSArIDB4MTAwMDApO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Ly8gSXQncyBhbiB1bm1hdGNoZWQgc3Vycm9nYXRlOyBvbmx5IGFwcGVuZCB0aGlzIGNvZGUgdW5pdCwgaW4gY2FzZSB0aGVcblx0XHRcdFx0Ly8gbmV4dCBjb2RlIHVuaXQgaXMgdGhlIGhpZ2ggc3Vycm9nYXRlIG9mIGEgc3Vycm9nYXRlIHBhaXIuXG5cdFx0XHRcdG91dHB1dC5wdXNoKHZhbHVlKTtcblx0XHRcdFx0Y291bnRlci0tO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRvdXRwdXQucHVzaCh2YWx1ZSk7XG5cdFx0fVxuXHR9XG5cdHJldHVybiBvdXRwdXQ7XG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIHN0cmluZyBiYXNlZCBvbiBhbiBhcnJheSBvZiBudW1lcmljIGNvZGUgcG9pbnRzLlxuICogQHNlZSBgcHVueWNvZGUudWNzMi5kZWNvZGVgXG4gKiBAbWVtYmVyT2YgcHVueWNvZGUudWNzMlxuICogQG5hbWUgZW5jb2RlXG4gKiBAcGFyYW0ge0FycmF5fSBjb2RlUG9pbnRzIFRoZSBhcnJheSBvZiBudW1lcmljIGNvZGUgcG9pbnRzLlxuICogQHJldHVybnMge1N0cmluZ30gVGhlIG5ldyBVbmljb2RlIHN0cmluZyAoVUNTLTIpLlxuICovXG5jb25zdCB1Y3MyZW5jb2RlID0gYXJyYXkgPT4gU3RyaW5nLmZyb21Db2RlUG9pbnQoLi4uYXJyYXkpO1xuXG4vKipcbiAqIENvbnZlcnRzIGEgYmFzaWMgY29kZSBwb2ludCBpbnRvIGEgZGlnaXQvaW50ZWdlci5cbiAqIEBzZWUgYGRpZ2l0VG9CYXNpYygpYFxuICogQHByaXZhdGVcbiAqIEBwYXJhbSB7TnVtYmVyfSBjb2RlUG9pbnQgVGhlIGJhc2ljIG51bWVyaWMgY29kZSBwb2ludCB2YWx1ZS5cbiAqIEByZXR1cm5zIHtOdW1iZXJ9IFRoZSBudW1lcmljIHZhbHVlIG9mIGEgYmFzaWMgY29kZSBwb2ludCAoZm9yIHVzZSBpblxuICogcmVwcmVzZW50aW5nIGludGVnZXJzKSBpbiB0aGUgcmFuZ2UgYDBgIHRvIGBiYXNlIC0gMWAsIG9yIGBiYXNlYCBpZlxuICogdGhlIGNvZGUgcG9pbnQgZG9lcyBub3QgcmVwcmVzZW50IGEgdmFsdWUuXG4gKi9cbmNvbnN0IGJhc2ljVG9EaWdpdCA9IGZ1bmN0aW9uKGNvZGVQb2ludCkge1xuXHRpZiAoY29kZVBvaW50IC0gMHgzMCA8IDB4MEEpIHtcblx0XHRyZXR1cm4gY29kZVBvaW50IC0gMHgxNjtcblx0fVxuXHRpZiAoY29kZVBvaW50IC0gMHg0MSA8IDB4MUEpIHtcblx0XHRyZXR1cm4gY29kZVBvaW50IC0gMHg0MTtcblx0fVxuXHRpZiAoY29kZVBvaW50IC0gMHg2MSA8IDB4MUEpIHtcblx0XHRyZXR1cm4gY29kZVBvaW50IC0gMHg2MTtcblx0fVxuXHRyZXR1cm4gYmFzZTtcbn07XG5cbi8qKlxuICogQ29udmVydHMgYSBkaWdpdC9pbnRlZ2VyIGludG8gYSBiYXNpYyBjb2RlIHBvaW50LlxuICogQHNlZSBgYmFzaWNUb0RpZ2l0KClgXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIHtOdW1iZXJ9IGRpZ2l0IFRoZSBudW1lcmljIHZhbHVlIG9mIGEgYmFzaWMgY29kZSBwb2ludC5cbiAqIEByZXR1cm5zIHtOdW1iZXJ9IFRoZSBiYXNpYyBjb2RlIHBvaW50IHdob3NlIHZhbHVlICh3aGVuIHVzZWQgZm9yXG4gKiByZXByZXNlbnRpbmcgaW50ZWdlcnMpIGlzIGBkaWdpdGAsIHdoaWNoIG5lZWRzIHRvIGJlIGluIHRoZSByYW5nZVxuICogYDBgIHRvIGBiYXNlIC0gMWAuIElmIGBmbGFnYCBpcyBub24temVybywgdGhlIHVwcGVyY2FzZSBmb3JtIGlzXG4gKiB1c2VkOyBlbHNlLCB0aGUgbG93ZXJjYXNlIGZvcm0gaXMgdXNlZC4gVGhlIGJlaGF2aW9yIGlzIHVuZGVmaW5lZFxuICogaWYgYGZsYWdgIGlzIG5vbi16ZXJvIGFuZCBgZGlnaXRgIGhhcyBubyB1cHBlcmNhc2UgZm9ybS5cbiAqL1xuY29uc3QgZGlnaXRUb0Jhc2ljID0gZnVuY3Rpb24oZGlnaXQsIGZsYWcpIHtcblx0Ly8gIDAuLjI1IG1hcCB0byBBU0NJSSBhLi56IG9yIEEuLlpcblx0Ly8gMjYuLjM1IG1hcCB0byBBU0NJSSAwLi45XG5cdHJldHVybiBkaWdpdCArIDIyICsgNzUgKiAoZGlnaXQgPCAyNikgLSAoKGZsYWcgIT0gMCkgPDwgNSk7XG59O1xuXG4vKipcbiAqIEJpYXMgYWRhcHRhdGlvbiBmdW5jdGlvbiBhcyBwZXIgc2VjdGlvbiAzLjQgb2YgUkZDIDM0OTIuXG4gKiBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMzQ5MiNzZWN0aW9uLTMuNFxuICogQHByaXZhdGVcbiAqL1xuY29uc3QgYWRhcHQgPSBmdW5jdGlvbihkZWx0YSwgbnVtUG9pbnRzLCBmaXJzdFRpbWUpIHtcblx0bGV0IGsgPSAwO1xuXHRkZWx0YSA9IGZpcnN0VGltZSA/IGZsb29yKGRlbHRhIC8gZGFtcCkgOiBkZWx0YSA+PiAxO1xuXHRkZWx0YSArPSBmbG9vcihkZWx0YSAvIG51bVBvaW50cyk7XG5cdGZvciAoLyogbm8gaW5pdGlhbGl6YXRpb24gKi87IGRlbHRhID4gYmFzZU1pbnVzVE1pbiAqIHRNYXggPj4gMTsgayArPSBiYXNlKSB7XG5cdFx0ZGVsdGEgPSBmbG9vcihkZWx0YSAvIGJhc2VNaW51c1RNaW4pO1xuXHR9XG5cdHJldHVybiBmbG9vcihrICsgKGJhc2VNaW51c1RNaW4gKyAxKSAqIGRlbHRhIC8gKGRlbHRhICsgc2tldykpO1xufTtcblxuLyoqXG4gKiBDb252ZXJ0cyBhIFB1bnljb2RlIHN0cmluZyBvZiBBU0NJSS1vbmx5IHN5bWJvbHMgdG8gYSBzdHJpbmcgb2YgVW5pY29kZVxuICogc3ltYm9scy5cbiAqIEBtZW1iZXJPZiBwdW55Y29kZVxuICogQHBhcmFtIHtTdHJpbmd9IGlucHV0IFRoZSBQdW55Y29kZSBzdHJpbmcgb2YgQVNDSUktb25seSBzeW1ib2xzLlxuICogQHJldHVybnMge1N0cmluZ30gVGhlIHJlc3VsdGluZyBzdHJpbmcgb2YgVW5pY29kZSBzeW1ib2xzLlxuICovXG5jb25zdCBkZWNvZGUgPSBmdW5jdGlvbihpbnB1dCkge1xuXHQvLyBEb24ndCB1c2UgVUNTLTIuXG5cdGNvbnN0IG91dHB1dCA9IFtdO1xuXHRjb25zdCBpbnB1dExlbmd0aCA9IGlucHV0Lmxlbmd0aDtcblx0bGV0IGkgPSAwO1xuXHRsZXQgbiA9IGluaXRpYWxOO1xuXHRsZXQgYmlhcyA9IGluaXRpYWxCaWFzO1xuXG5cdC8vIEhhbmRsZSB0aGUgYmFzaWMgY29kZSBwb2ludHM6IGxldCBgYmFzaWNgIGJlIHRoZSBudW1iZXIgb2YgaW5wdXQgY29kZVxuXHQvLyBwb2ludHMgYmVmb3JlIHRoZSBsYXN0IGRlbGltaXRlciwgb3IgYDBgIGlmIHRoZXJlIGlzIG5vbmUsIHRoZW4gY29weVxuXHQvLyB0aGUgZmlyc3QgYmFzaWMgY29kZSBwb2ludHMgdG8gdGhlIG91dHB1dC5cblxuXHRsZXQgYmFzaWMgPSBpbnB1dC5sYXN0SW5kZXhPZihkZWxpbWl0ZXIpO1xuXHRpZiAoYmFzaWMgPCAwKSB7XG5cdFx0YmFzaWMgPSAwO1xuXHR9XG5cblx0Zm9yIChsZXQgaiA9IDA7IGogPCBiYXNpYzsgKytqKSB7XG5cdFx0Ly8gaWYgaXQncyBub3QgYSBiYXNpYyBjb2RlIHBvaW50XG5cdFx0aWYgKGlucHV0LmNoYXJDb2RlQXQoaikgPj0gMHg4MCkge1xuXHRcdFx0ZXJyb3IoJ25vdC1iYXNpYycpO1xuXHRcdH1cblx0XHRvdXRwdXQucHVzaChpbnB1dC5jaGFyQ29kZUF0KGopKTtcblx0fVxuXG5cdC8vIE1haW4gZGVjb2RpbmcgbG9vcDogc3RhcnQganVzdCBhZnRlciB0aGUgbGFzdCBkZWxpbWl0ZXIgaWYgYW55IGJhc2ljIGNvZGVcblx0Ly8gcG9pbnRzIHdlcmUgY29waWVkOyBzdGFydCBhdCB0aGUgYmVnaW5uaW5nIG90aGVyd2lzZS5cblxuXHRmb3IgKGxldCBpbmRleCA9IGJhc2ljID4gMCA/IGJhc2ljICsgMSA6IDA7IGluZGV4IDwgaW5wdXRMZW5ndGg7IC8qIG5vIGZpbmFsIGV4cHJlc3Npb24gKi8pIHtcblxuXHRcdC8vIGBpbmRleGAgaXMgdGhlIGluZGV4IG9mIHRoZSBuZXh0IGNoYXJhY3RlciB0byBiZSBjb25zdW1lZC5cblx0XHQvLyBEZWNvZGUgYSBnZW5lcmFsaXplZCB2YXJpYWJsZS1sZW5ndGggaW50ZWdlciBpbnRvIGBkZWx0YWAsXG5cdFx0Ly8gd2hpY2ggZ2V0cyBhZGRlZCB0byBgaWAuIFRoZSBvdmVyZmxvdyBjaGVja2luZyBpcyBlYXNpZXJcblx0XHQvLyBpZiB3ZSBpbmNyZWFzZSBgaWAgYXMgd2UgZ28sIHRoZW4gc3VidHJhY3Qgb2ZmIGl0cyBzdGFydGluZ1xuXHRcdC8vIHZhbHVlIGF0IHRoZSBlbmQgdG8gb2J0YWluIGBkZWx0YWAuXG5cdFx0bGV0IG9sZGkgPSBpO1xuXHRcdGZvciAobGV0IHcgPSAxLCBrID0gYmFzZTsgLyogbm8gY29uZGl0aW9uICovOyBrICs9IGJhc2UpIHtcblxuXHRcdFx0aWYgKGluZGV4ID49IGlucHV0TGVuZ3RoKSB7XG5cdFx0XHRcdGVycm9yKCdpbnZhbGlkLWlucHV0Jyk7XG5cdFx0XHR9XG5cblx0XHRcdGNvbnN0IGRpZ2l0ID0gYmFzaWNUb0RpZ2l0KGlucHV0LmNoYXJDb2RlQXQoaW5kZXgrKykpO1xuXG5cdFx0XHRpZiAoZGlnaXQgPj0gYmFzZSB8fCBkaWdpdCA+IGZsb29yKChtYXhJbnQgLSBpKSAvIHcpKSB7XG5cdFx0XHRcdGVycm9yKCdvdmVyZmxvdycpO1xuXHRcdFx0fVxuXG5cdFx0XHRpICs9IGRpZ2l0ICogdztcblx0XHRcdGNvbnN0IHQgPSBrIDw9IGJpYXMgPyB0TWluIDogKGsgPj0gYmlhcyArIHRNYXggPyB0TWF4IDogayAtIGJpYXMpO1xuXG5cdFx0XHRpZiAoZGlnaXQgPCB0KSB7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXG5cdFx0XHRjb25zdCBiYXNlTWludXNUID0gYmFzZSAtIHQ7XG5cdFx0XHRpZiAodyA+IGZsb29yKG1heEludCAvIGJhc2VNaW51c1QpKSB7XG5cdFx0XHRcdGVycm9yKCdvdmVyZmxvdycpO1xuXHRcdFx0fVxuXG5cdFx0XHR3ICo9IGJhc2VNaW51c1Q7XG5cblx0XHR9XG5cblx0XHRjb25zdCBvdXQgPSBvdXRwdXQubGVuZ3RoICsgMTtcblx0XHRiaWFzID0gYWRhcHQoaSAtIG9sZGksIG91dCwgb2xkaSA9PSAwKTtcblxuXHRcdC8vIGBpYCB3YXMgc3VwcG9zZWQgdG8gd3JhcCBhcm91bmQgZnJvbSBgb3V0YCB0byBgMGAsXG5cdFx0Ly8gaW5jcmVtZW50aW5nIGBuYCBlYWNoIHRpbWUsIHNvIHdlJ2xsIGZpeCB0aGF0IG5vdzpcblx0XHRpZiAoZmxvb3IoaSAvIG91dCkgPiBtYXhJbnQgLSBuKSB7XG5cdFx0XHRlcnJvcignb3ZlcmZsb3cnKTtcblx0XHR9XG5cblx0XHRuICs9IGZsb29yKGkgLyBvdXQpO1xuXHRcdGkgJT0gb3V0O1xuXG5cdFx0Ly8gSW5zZXJ0IGBuYCBhdCBwb3NpdGlvbiBgaWAgb2YgdGhlIG91dHB1dC5cblx0XHRvdXRwdXQuc3BsaWNlKGkrKywgMCwgbik7XG5cblx0fVxuXG5cdHJldHVybiBTdHJpbmcuZnJvbUNvZGVQb2ludCguLi5vdXRwdXQpO1xufTtcblxuLyoqXG4gKiBDb252ZXJ0cyBhIHN0cmluZyBvZiBVbmljb2RlIHN5bWJvbHMgKGUuZy4gYSBkb21haW4gbmFtZSBsYWJlbCkgdG8gYVxuICogUHVueWNvZGUgc3RyaW5nIG9mIEFTQ0lJLW9ubHkgc3ltYm9scy5cbiAqIEBtZW1iZXJPZiBwdW55Y29kZVxuICogQHBhcmFtIHtTdHJpbmd9IGlucHV0IFRoZSBzdHJpbmcgb2YgVW5pY29kZSBzeW1ib2xzLlxuICogQHJldHVybnMge1N0cmluZ30gVGhlIHJlc3VsdGluZyBQdW55Y29kZSBzdHJpbmcgb2YgQVNDSUktb25seSBzeW1ib2xzLlxuICovXG5jb25zdCBlbmNvZGUgPSBmdW5jdGlvbihpbnB1dCkge1xuXHRjb25zdCBvdXRwdXQgPSBbXTtcblxuXHQvLyBDb252ZXJ0IHRoZSBpbnB1dCBpbiBVQ1MtMiB0byBhbiBhcnJheSBvZiBVbmljb2RlIGNvZGUgcG9pbnRzLlxuXHRpbnB1dCA9IHVjczJkZWNvZGUoaW5wdXQpO1xuXG5cdC8vIENhY2hlIHRoZSBsZW5ndGguXG5cdGxldCBpbnB1dExlbmd0aCA9IGlucHV0Lmxlbmd0aDtcblxuXHQvLyBJbml0aWFsaXplIHRoZSBzdGF0ZS5cblx0bGV0IG4gPSBpbml0aWFsTjtcblx0bGV0IGRlbHRhID0gMDtcblx0bGV0IGJpYXMgPSBpbml0aWFsQmlhcztcblxuXHQvLyBIYW5kbGUgdGhlIGJhc2ljIGNvZGUgcG9pbnRzLlxuXHRmb3IgKGNvbnN0IGN1cnJlbnRWYWx1ZSBvZiBpbnB1dCkge1xuXHRcdGlmIChjdXJyZW50VmFsdWUgPCAweDgwKSB7XG5cdFx0XHRvdXRwdXQucHVzaChzdHJpbmdGcm9tQ2hhckNvZGUoY3VycmVudFZhbHVlKSk7XG5cdFx0fVxuXHR9XG5cblx0bGV0IGJhc2ljTGVuZ3RoID0gb3V0cHV0Lmxlbmd0aDtcblx0bGV0IGhhbmRsZWRDUENvdW50ID0gYmFzaWNMZW5ndGg7XG5cblx0Ly8gYGhhbmRsZWRDUENvdW50YCBpcyB0aGUgbnVtYmVyIG9mIGNvZGUgcG9pbnRzIHRoYXQgaGF2ZSBiZWVuIGhhbmRsZWQ7XG5cdC8vIGBiYXNpY0xlbmd0aGAgaXMgdGhlIG51bWJlciBvZiBiYXNpYyBjb2RlIHBvaW50cy5cblxuXHQvLyBGaW5pc2ggdGhlIGJhc2ljIHN0cmluZyB3aXRoIGEgZGVsaW1pdGVyIHVubGVzcyBpdCdzIGVtcHR5LlxuXHRpZiAoYmFzaWNMZW5ndGgpIHtcblx0XHRvdXRwdXQucHVzaChkZWxpbWl0ZXIpO1xuXHR9XG5cblx0Ly8gTWFpbiBlbmNvZGluZyBsb29wOlxuXHR3aGlsZSAoaGFuZGxlZENQQ291bnQgPCBpbnB1dExlbmd0aCkge1xuXG5cdFx0Ly8gQWxsIG5vbi1iYXNpYyBjb2RlIHBvaW50cyA8IG4gaGF2ZSBiZWVuIGhhbmRsZWQgYWxyZWFkeS4gRmluZCB0aGUgbmV4dFxuXHRcdC8vIGxhcmdlciBvbmU6XG5cdFx0bGV0IG0gPSBtYXhJbnQ7XG5cdFx0Zm9yIChjb25zdCBjdXJyZW50VmFsdWUgb2YgaW5wdXQpIHtcblx0XHRcdGlmIChjdXJyZW50VmFsdWUgPj0gbiAmJiBjdXJyZW50VmFsdWUgPCBtKSB7XG5cdFx0XHRcdG0gPSBjdXJyZW50VmFsdWU7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gSW5jcmVhc2UgYGRlbHRhYCBlbm91Z2ggdG8gYWR2YW5jZSB0aGUgZGVjb2RlcidzIDxuLGk+IHN0YXRlIHRvIDxtLDA+LFxuXHRcdC8vIGJ1dCBndWFyZCBhZ2FpbnN0IG92ZXJmbG93LlxuXHRcdGNvbnN0IGhhbmRsZWRDUENvdW50UGx1c09uZSA9IGhhbmRsZWRDUENvdW50ICsgMTtcblx0XHRpZiAobSAtIG4gPiBmbG9vcigobWF4SW50IC0gZGVsdGEpIC8gaGFuZGxlZENQQ291bnRQbHVzT25lKSkge1xuXHRcdFx0ZXJyb3IoJ292ZXJmbG93Jyk7XG5cdFx0fVxuXG5cdFx0ZGVsdGEgKz0gKG0gLSBuKSAqIGhhbmRsZWRDUENvdW50UGx1c09uZTtcblx0XHRuID0gbTtcblxuXHRcdGZvciAoY29uc3QgY3VycmVudFZhbHVlIG9mIGlucHV0KSB7XG5cdFx0XHRpZiAoY3VycmVudFZhbHVlIDwgbiAmJiArK2RlbHRhID4gbWF4SW50KSB7XG5cdFx0XHRcdGVycm9yKCdvdmVyZmxvdycpO1xuXHRcdFx0fVxuXHRcdFx0aWYgKGN1cnJlbnRWYWx1ZSA9PSBuKSB7XG5cdFx0XHRcdC8vIFJlcHJlc2VudCBkZWx0YSBhcyBhIGdlbmVyYWxpemVkIHZhcmlhYmxlLWxlbmd0aCBpbnRlZ2VyLlxuXHRcdFx0XHRsZXQgcSA9IGRlbHRhO1xuXHRcdFx0XHRmb3IgKGxldCBrID0gYmFzZTsgLyogbm8gY29uZGl0aW9uICovOyBrICs9IGJhc2UpIHtcblx0XHRcdFx0XHRjb25zdCB0ID0gayA8PSBiaWFzID8gdE1pbiA6IChrID49IGJpYXMgKyB0TWF4ID8gdE1heCA6IGsgLSBiaWFzKTtcblx0XHRcdFx0XHRpZiAocSA8IHQpIHtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRjb25zdCBxTWludXNUID0gcSAtIHQ7XG5cdFx0XHRcdFx0Y29uc3QgYmFzZU1pbnVzVCA9IGJhc2UgLSB0O1xuXHRcdFx0XHRcdG91dHB1dC5wdXNoKFxuXHRcdFx0XHRcdFx0c3RyaW5nRnJvbUNoYXJDb2RlKGRpZ2l0VG9CYXNpYyh0ICsgcU1pbnVzVCAlIGJhc2VNaW51c1QsIDApKVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0cSA9IGZsb29yKHFNaW51c1QgLyBiYXNlTWludXNUKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdG91dHB1dC5wdXNoKHN0cmluZ0Zyb21DaGFyQ29kZShkaWdpdFRvQmFzaWMocSwgMCkpKTtcblx0XHRcdFx0YmlhcyA9IGFkYXB0KGRlbHRhLCBoYW5kbGVkQ1BDb3VudFBsdXNPbmUsIGhhbmRsZWRDUENvdW50ID09IGJhc2ljTGVuZ3RoKTtcblx0XHRcdFx0ZGVsdGEgPSAwO1xuXHRcdFx0XHQrK2hhbmRsZWRDUENvdW50O1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdCsrZGVsdGE7XG5cdFx0KytuO1xuXG5cdH1cblx0cmV0dXJuIG91dHB1dC5qb2luKCcnKTtcbn07XG5cbi8qKlxuICogQ29udmVydHMgYSBQdW55Y29kZSBzdHJpbmcgcmVwcmVzZW50aW5nIGEgZG9tYWluIG5hbWUgb3IgYW4gZW1haWwgYWRkcmVzc1xuICogdG8gVW5pY29kZS4gT25seSB0aGUgUHVueWNvZGVkIHBhcnRzIG9mIHRoZSBpbnB1dCB3aWxsIGJlIGNvbnZlcnRlZCwgaS5lLlxuICogaXQgZG9lc24ndCBtYXR0ZXIgaWYgeW91IGNhbGwgaXQgb24gYSBzdHJpbmcgdGhhdCBoYXMgYWxyZWFkeSBiZWVuXG4gKiBjb252ZXJ0ZWQgdG8gVW5pY29kZS5cbiAqIEBtZW1iZXJPZiBwdW55Y29kZVxuICogQHBhcmFtIHtTdHJpbmd9IGlucHV0IFRoZSBQdW55Y29kZWQgZG9tYWluIG5hbWUgb3IgZW1haWwgYWRkcmVzcyB0b1xuICogY29udmVydCB0byBVbmljb2RlLlxuICogQHJldHVybnMge1N0cmluZ30gVGhlIFVuaWNvZGUgcmVwcmVzZW50YXRpb24gb2YgdGhlIGdpdmVuIFB1bnljb2RlXG4gKiBzdHJpbmcuXG4gKi9cbmNvbnN0IHRvVW5pY29kZSA9IGZ1bmN0aW9uKGlucHV0KSB7XG5cdHJldHVybiBtYXBEb21haW4oaW5wdXQsIGZ1bmN0aW9uKHN0cmluZykge1xuXHRcdHJldHVybiByZWdleFB1bnljb2RlLnRlc3Qoc3RyaW5nKVxuXHRcdFx0PyBkZWNvZGUoc3RyaW5nLnNsaWNlKDQpLnRvTG93ZXJDYXNlKCkpXG5cdFx0XHQ6IHN0cmluZztcblx0fSk7XG59O1xuXG4vKipcbiAqIENvbnZlcnRzIGEgVW5pY29kZSBzdHJpbmcgcmVwcmVzZW50aW5nIGEgZG9tYWluIG5hbWUgb3IgYW4gZW1haWwgYWRkcmVzcyB0b1xuICogUHVueWNvZGUuIE9ubHkgdGhlIG5vbi1BU0NJSSBwYXJ0cyBvZiB0aGUgZG9tYWluIG5hbWUgd2lsbCBiZSBjb252ZXJ0ZWQsXG4gKiBpLmUuIGl0IGRvZXNuJ3QgbWF0dGVyIGlmIHlvdSBjYWxsIGl0IHdpdGggYSBkb21haW4gdGhhdCdzIGFscmVhZHkgaW5cbiAqIEFTQ0lJLlxuICogQG1lbWJlck9mIHB1bnljb2RlXG4gKiBAcGFyYW0ge1N0cmluZ30gaW5wdXQgVGhlIGRvbWFpbiBuYW1lIG9yIGVtYWlsIGFkZHJlc3MgdG8gY29udmVydCwgYXMgYVxuICogVW5pY29kZSBzdHJpbmcuXG4gKiBAcmV0dXJucyB7U3RyaW5nfSBUaGUgUHVueWNvZGUgcmVwcmVzZW50YXRpb24gb2YgdGhlIGdpdmVuIGRvbWFpbiBuYW1lIG9yXG4gKiBlbWFpbCBhZGRyZXNzLlxuICovXG5jb25zdCB0b0FTQ0lJID0gZnVuY3Rpb24oaW5wdXQpIHtcblx0cmV0dXJuIG1hcERvbWFpbihpbnB1dCwgZnVuY3Rpb24oc3RyaW5nKSB7XG5cdFx0cmV0dXJuIHJlZ2V4Tm9uQVNDSUkudGVzdChzdHJpbmcpXG5cdFx0XHQ/ICd4bi0tJyArIGVuY29kZShzdHJpbmcpXG5cdFx0XHQ6IHN0cmluZztcblx0fSk7XG59O1xuXG4vKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi9cblxuLyoqIERlZmluZSB0aGUgcHVibGljIEFQSSAqL1xuY29uc3QgcHVueWNvZGUgPSB7XG5cdC8qKlxuXHQgKiBBIHN0cmluZyByZXByZXNlbnRpbmcgdGhlIGN1cnJlbnQgUHVueWNvZGUuanMgdmVyc2lvbiBudW1iZXIuXG5cdCAqIEBtZW1iZXJPZiBwdW55Y29kZVxuXHQgKiBAdHlwZSBTdHJpbmdcblx0ICovXG5cdCd2ZXJzaW9uJzogJzIuMS4wJyxcblx0LyoqXG5cdCAqIEFuIG9iamVjdCBvZiBtZXRob2RzIHRvIGNvbnZlcnQgZnJvbSBKYXZhU2NyaXB0J3MgaW50ZXJuYWwgY2hhcmFjdGVyXG5cdCAqIHJlcHJlc2VudGF0aW9uIChVQ1MtMikgdG8gVW5pY29kZSBjb2RlIHBvaW50cywgYW5kIGJhY2suXG5cdCAqIEBzZWUgPGh0dHBzOi8vbWF0aGlhc2J5bmVucy5iZS9ub3Rlcy9qYXZhc2NyaXB0LWVuY29kaW5nPlxuXHQgKiBAbWVtYmVyT2YgcHVueWNvZGVcblx0ICogQHR5cGUgT2JqZWN0XG5cdCAqL1xuXHQndWNzMic6IHtcblx0XHQnZGVjb2RlJzogdWNzMmRlY29kZSxcblx0XHQnZW5jb2RlJzogdWNzMmVuY29kZVxuXHR9LFxuXHQnZGVjb2RlJzogZGVjb2RlLFxuXHQnZW5jb2RlJzogZW5jb2RlLFxuXHQndG9BU0NJSSc6IHRvQVNDSUksXG5cdCd0b1VuaWNvZGUnOiB0b1VuaWNvZGVcbn07XG5cbmV4cG9ydCBkZWZhdWx0IHB1bnljb2RlO1xuIiwgImltcG9ydCB7IFVSSVJlZ0V4cHMgfSBmcm9tIFwiLi91cmlcIjtcbmltcG9ydCB7IGJ1aWxkRXhwcyB9IGZyb20gXCIuL3JlZ2V4cHMtdXJpXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGJ1aWxkRXhwcyh0cnVlKTtcbiIsICJpbXBvcnQgeyBVUklSZWdFeHBzIH0gZnJvbSBcIi4vdXJpXCI7XG5pbXBvcnQgeyBtZXJnZSwgc3ViZXhwIH0gZnJvbSBcIi4vdXRpbFwiO1xuXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRFeHBzKGlzSVJJOmJvb2xlYW4pOlVSSVJlZ0V4cHMge1xuXHRjb25zdFxuXHRcdEFMUEhBJCQgPSBcIltBLVphLXpdXCIsXG5cdFx0Q1IkID0gXCJbXFxcXHgwRF1cIixcblx0XHRESUdJVCQkID0gXCJbMC05XVwiLFxuXHRcdERRVU9URSQkID0gXCJbXFxcXHgyMl1cIixcblx0XHRIRVhESUckJCA9IG1lcmdlKERJR0lUJCQsIFwiW0EtRmEtZl1cIiksICAvL2Nhc2UtaW5zZW5zaXRpdmVcblx0XHRMRiQkID0gXCJbXFxcXHgwQV1cIixcblx0XHRTUCQkID0gXCJbXFxcXHgyMF1cIixcblx0XHRQQ1RfRU5DT0RFRCQgPSBzdWJleHAoc3ViZXhwKFwiJVtFRmVmXVwiICsgSEVYRElHJCQgKyBcIiVcIiArIEhFWERJRyQkICsgSEVYRElHJCQgKyBcIiVcIiArIEhFWERJRyQkICsgSEVYRElHJCQpICsgXCJ8XCIgKyBzdWJleHAoXCIlWzg5QS1GYS1mXVwiICsgSEVYRElHJCQgKyBcIiVcIiArIEhFWERJRyQkICsgSEVYRElHJCQpICsgXCJ8XCIgKyBzdWJleHAoXCIlXCIgKyBIRVhESUckJCArIEhFWERJRyQkKSksICAvL2V4cGFuZGVkXG5cdFx0R0VOX0RFTElNUyQkID0gXCJbXFxcXDpcXFxcL1xcXFw/XFxcXCNcXFxcW1xcXFxdXFxcXEBdXCIsXG5cdFx0U1VCX0RFTElNUyQkID0gXCJbXFxcXCFcXFxcJFxcXFwmXFxcXCdcXFxcKFxcXFwpXFxcXCpcXFxcK1xcXFwsXFxcXDtcXFxcPV1cIixcblx0XHRSRVNFUlZFRCQkID0gbWVyZ2UoR0VOX0RFTElNUyQkLCBTVUJfREVMSU1TJCQpLFxuXHRcdFVDU0NIQVIkJCA9IGlzSVJJID8gXCJbXFxcXHhBMC1cXFxcdTIwMERcXFxcdTIwMTAtXFxcXHUyMDI5XFxcXHUyMDJGLVxcXFx1RDdGRlxcXFx1RjkwMC1cXFxcdUZEQ0ZcXFxcdUZERjAtXFxcXHVGRkVGXVwiIDogXCJbXVwiLCAgLy9zdWJzZXQsIGV4Y2x1ZGVzIGJpZGkgY29udHJvbCBjaGFyYWN0ZXJzXG5cdFx0SVBSSVZBVEUkJCA9IGlzSVJJID8gXCJbXFxcXHVFMDAwLVxcXFx1RjhGRl1cIiA6IFwiW11cIiwgIC8vc3Vic2V0XG5cdFx0VU5SRVNFUlZFRCQkID0gbWVyZ2UoQUxQSEEkJCwgRElHSVQkJCwgXCJbXFxcXC1cXFxcLlxcXFxfXFxcXH5dXCIsIFVDU0NIQVIkJCksXG5cdFx0U0NIRU1FJCA9IHN1YmV4cChBTFBIQSQkICsgbWVyZ2UoQUxQSEEkJCwgRElHSVQkJCwgXCJbXFxcXCtcXFxcLVxcXFwuXVwiKSArIFwiKlwiKSxcblx0XHRVU0VSSU5GTyQgPSBzdWJleHAoc3ViZXhwKFBDVF9FTkNPREVEJCArIFwifFwiICsgbWVyZ2UoVU5SRVNFUlZFRCQkLCBTVUJfREVMSU1TJCQsIFwiW1xcXFw6XVwiKSkgKyBcIipcIiksXG5cdFx0REVDX09DVEVUJCA9IHN1YmV4cChzdWJleHAoXCIyNVswLTVdXCIpICsgXCJ8XCIgKyBzdWJleHAoXCIyWzAtNF1cIiArIERJR0lUJCQpICsgXCJ8XCIgKyBzdWJleHAoXCIxXCIgKyBESUdJVCQkICsgRElHSVQkJCkgKyBcInxcIiArIHN1YmV4cChcIlsxLTldXCIgKyBESUdJVCQkKSArIFwifFwiICsgRElHSVQkJCksXG5cdFx0REVDX09DVEVUX1JFTEFYRUQkID0gc3ViZXhwKHN1YmV4cChcIjI1WzAtNV1cIikgKyBcInxcIiArIHN1YmV4cChcIjJbMC00XVwiICsgRElHSVQkJCkgKyBcInxcIiArIHN1YmV4cChcIjFcIiArIERJR0lUJCQgKyBESUdJVCQkKSArIFwifFwiICsgc3ViZXhwKFwiMD9bMS05XVwiICsgRElHSVQkJCkgKyBcInwwPzA/XCIgKyBESUdJVCQkKSwgIC8vcmVsYXhlZCBwYXJzaW5nIHJ1bGVzXG5cdFx0SVBWNEFERFJFU1MkID0gc3ViZXhwKERFQ19PQ1RFVF9SRUxBWEVEJCArIFwiXFxcXC5cIiArIERFQ19PQ1RFVF9SRUxBWEVEJCArIFwiXFxcXC5cIiArIERFQ19PQ1RFVF9SRUxBWEVEJCArIFwiXFxcXC5cIiArIERFQ19PQ1RFVF9SRUxBWEVEJCksXG5cdFx0SDE2JCA9IHN1YmV4cChIRVhESUckJCArIFwiezEsNH1cIiksXG5cdFx0TFMzMiQgPSBzdWJleHAoc3ViZXhwKEgxNiQgKyBcIlxcXFw6XCIgKyBIMTYkKSArIFwifFwiICsgSVBWNEFERFJFU1MkKSxcblx0XHRJUFY2QUREUkVTUzEkID0gc3ViZXhwKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YmV4cChIMTYkICsgXCJcXFxcOlwiKSArIFwiezZ9XCIgKyBMUzMyJCksIC8vICAgICAgICAgICAgICAgICAgICAgICAgICAgNiggaDE2IFwiOlwiICkgbHMzMlxuXHRcdElQVjZBRERSRVNTMiQgPSBzdWJleHAoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiXFxcXDpcXFxcOlwiICsgc3ViZXhwKEgxNiQgKyBcIlxcXFw6XCIpICsgXCJ7NX1cIiArIExTMzIkKSwgLy8gICAgICAgICAgICAgICAgICAgICAgXCI6OlwiIDUoIGgxNiBcIjpcIiApIGxzMzJcblx0XHRJUFY2QUREUkVTUzMkID0gc3ViZXhwKHN1YmV4cCggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIMTYkKSArIFwiP1xcXFw6XFxcXDpcIiArIHN1YmV4cChIMTYkICsgXCJcXFxcOlwiKSArIFwiezR9XCIgKyBMUzMyJCksIC8vWyAgICAgICAgICAgICAgIGgxNiBdIFwiOjpcIiA0KCBoMTYgXCI6XCIgKSBsczMyXG5cdFx0SVBWNkFERFJFU1M0JCA9IHN1YmV4cChzdWJleHAoc3ViZXhwKEgxNiQgKyBcIlxcXFw6XCIpICsgXCJ7MCwxfVwiICsgSDE2JCkgKyBcIj9cXFxcOlxcXFw6XCIgKyBzdWJleHAoSDE2JCArIFwiXFxcXDpcIikgKyBcInszfVwiICsgTFMzMiQpLCAvL1sgKjEoIGgxNiBcIjpcIiApIGgxNiBdIFwiOjpcIiAzKCBoMTYgXCI6XCIgKSBsczMyXG5cdFx0SVBWNkFERFJFU1M1JCA9IHN1YmV4cChzdWJleHAoc3ViZXhwKEgxNiQgKyBcIlxcXFw6XCIpICsgXCJ7MCwyfVwiICsgSDE2JCkgKyBcIj9cXFxcOlxcXFw6XCIgKyBzdWJleHAoSDE2JCArIFwiXFxcXDpcIikgKyBcInsyfVwiICsgTFMzMiQpLCAvL1sgKjIoIGgxNiBcIjpcIiApIGgxNiBdIFwiOjpcIiAyKCBoMTYgXCI6XCIgKSBsczMyXG5cdFx0SVBWNkFERFJFU1M2JCA9IHN1YmV4cChzdWJleHAoc3ViZXhwKEgxNiQgKyBcIlxcXFw6XCIpICsgXCJ7MCwzfVwiICsgSDE2JCkgKyBcIj9cXFxcOlxcXFw6XCIgKyAgICAgICAgSDE2JCArIFwiXFxcXDpcIiAgICAgICAgICArIExTMzIkKSwgLy9bICozKCBoMTYgXCI6XCIgKSBoMTYgXSBcIjo6XCIgICAgaDE2IFwiOlwiICAgbHMzMlxuXHRcdElQVjZBRERSRVNTNyQgPSBzdWJleHAoc3ViZXhwKHN1YmV4cChIMTYkICsgXCJcXFxcOlwiKSArIFwiezAsNH1cIiArIEgxNiQpICsgXCI/XFxcXDpcXFxcOlwiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArIExTMzIkKSwgLy9bICo0KCBoMTYgXCI6XCIgKSBoMTYgXSBcIjo6XCIgICAgICAgICAgICAgIGxzMzJcblx0XHRJUFY2QUREUkVTUzgkID0gc3ViZXhwKHN1YmV4cChzdWJleHAoSDE2JCArIFwiXFxcXDpcIikgKyBcInswLDV9XCIgKyBIMTYkKSArIFwiP1xcXFw6XFxcXDpcIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBIMTYkICksIC8vWyAqNSggaDE2IFwiOlwiICkgaDE2IF0gXCI6OlwiICAgICAgICAgICAgICBoMTZcblx0XHRJUFY2QUREUkVTUzkkID0gc3ViZXhwKHN1YmV4cChzdWJleHAoSDE2JCArIFwiXFxcXDpcIikgKyBcInswLDZ9XCIgKyBIMTYkKSArIFwiP1xcXFw6XFxcXDpcIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICksIC8vWyAqNiggaDE2IFwiOlwiICkgaDE2IF0gXCI6OlwiXG5cdFx0SVBWNkFERFJFU1MkID0gc3ViZXhwKFtJUFY2QUREUkVTUzEkLCBJUFY2QUREUkVTUzIkLCBJUFY2QUREUkVTUzMkLCBJUFY2QUREUkVTUzQkLCBJUFY2QUREUkVTUzUkLCBJUFY2QUREUkVTUzYkLCBJUFY2QUREUkVTUzckLCBJUFY2QUREUkVTUzgkLCBJUFY2QUREUkVTUzkkXS5qb2luKFwifFwiKSksXG5cdFx0Wk9ORUlEJCA9IHN1YmV4cChzdWJleHAoVU5SRVNFUlZFRCQkICsgXCJ8XCIgKyBQQ1RfRU5DT0RFRCQpICsgXCIrXCIpLCAgLy9SRkMgNjg3NFxuXHRcdElQVjZBRERSWiQgPSBzdWJleHAoSVBWNkFERFJFU1MkICsgXCJcXFxcJTI1XCIgKyBaT05FSUQkKSwgIC8vUkZDIDY4NzRcblx0XHRJUFY2QUREUlpfUkVMQVhFRCQgPSBzdWJleHAoSVBWNkFERFJFU1MkICsgc3ViZXhwKFwiXFxcXCUyNXxcXFxcJSg/IVwiICsgSEVYRElHJCQgKyBcInsyfSlcIikgKyBaT05FSUQkKSwgIC8vUkZDIDY4NzQsIHdpdGggcmVsYXhlZCBwYXJzaW5nIHJ1bGVzXG5cdFx0SVBWRlVUVVJFJCA9IHN1YmV4cChcIlt2Vl1cIiArIEhFWERJRyQkICsgXCIrXFxcXC5cIiArIG1lcmdlKFVOUkVTRVJWRUQkJCwgU1VCX0RFTElNUyQkLCBcIltcXFxcOl1cIikgKyBcIitcIiksXG5cdFx0SVBfTElURVJBTCQgPSBzdWJleHAoXCJcXFxcW1wiICsgc3ViZXhwKElQVjZBRERSWl9SRUxBWEVEJCArIFwifFwiICsgSVBWNkFERFJFU1MkICsgXCJ8XCIgKyBJUFZGVVRVUkUkKSArIFwiXFxcXF1cIiksICAvL1JGQyA2ODc0XG5cdFx0UkVHX05BTUUkID0gc3ViZXhwKHN1YmV4cChQQ1RfRU5DT0RFRCQgKyBcInxcIiArIG1lcmdlKFVOUkVTRVJWRUQkJCwgU1VCX0RFTElNUyQkKSkgKyBcIipcIiksXG5cdFx0SE9TVCQgPSBzdWJleHAoSVBfTElURVJBTCQgKyBcInxcIiArIElQVjRBRERSRVNTJCArIFwiKD8hXCIgKyBSRUdfTkFNRSQgKyBcIilcIiArIFwifFwiICsgUkVHX05BTUUkKSxcblx0XHRQT1JUJCA9IHN1YmV4cChESUdJVCQkICsgXCIqXCIpLFxuXHRcdEFVVEhPUklUWSQgPSBzdWJleHAoc3ViZXhwKFVTRVJJTkZPJCArIFwiQFwiKSArIFwiP1wiICsgSE9TVCQgKyBzdWJleHAoXCJcXFxcOlwiICsgUE9SVCQpICsgXCI/XCIpLFxuXHRcdFBDSEFSJCA9IHN1YmV4cChQQ1RfRU5DT0RFRCQgKyBcInxcIiArIG1lcmdlKFVOUkVTRVJWRUQkJCwgU1VCX0RFTElNUyQkLCBcIltcXFxcOlxcXFxAXVwiKSksXG5cdFx0U0VHTUVOVCQgPSBzdWJleHAoUENIQVIkICsgXCIqXCIpLFxuXHRcdFNFR01FTlRfTlokID0gc3ViZXhwKFBDSEFSJCArIFwiK1wiKSxcblx0XHRTRUdNRU5UX05aX05DJCA9IHN1YmV4cChzdWJleHAoUENUX0VOQ09ERUQkICsgXCJ8XCIgKyBtZXJnZShVTlJFU0VSVkVEJCQsIFNVQl9ERUxJTVMkJCwgXCJbXFxcXEBdXCIpKSArIFwiK1wiKSxcblx0XHRQQVRIX0FCRU1QVFkkID0gc3ViZXhwKHN1YmV4cChcIlxcXFwvXCIgKyBTRUdNRU5UJCkgKyBcIipcIiksXG5cdFx0UEFUSF9BQlNPTFVURSQgPSBzdWJleHAoXCJcXFxcL1wiICsgc3ViZXhwKFNFR01FTlRfTlokICsgUEFUSF9BQkVNUFRZJCkgKyBcIj9cIiksICAvL3NpbXBsaWZpZWRcblx0XHRQQVRIX05PU0NIRU1FJCA9IHN1YmV4cChTRUdNRU5UX05aX05DJCArIFBBVEhfQUJFTVBUWSQpLCAgLy9zaW1wbGlmaWVkXG5cdFx0UEFUSF9ST09UTEVTUyQgPSBzdWJleHAoU0VHTUVOVF9OWiQgKyBQQVRIX0FCRU1QVFkkKSwgIC8vc2ltcGxpZmllZFxuXHRcdFBBVEhfRU1QVFkkID0gXCIoPyFcIiArIFBDSEFSJCArIFwiKVwiLFxuXHRcdFBBVEgkID0gc3ViZXhwKFBBVEhfQUJFTVBUWSQgKyBcInxcIiArIFBBVEhfQUJTT0xVVEUkICsgXCJ8XCIgKyBQQVRIX05PU0NIRU1FJCArIFwifFwiICsgUEFUSF9ST09UTEVTUyQgKyBcInxcIiArIFBBVEhfRU1QVFkkKSxcblx0XHRRVUVSWSQgPSBzdWJleHAoc3ViZXhwKFBDSEFSJCArIFwifFwiICsgbWVyZ2UoXCJbXFxcXC9cXFxcP11cIiwgSVBSSVZBVEUkJCkpICsgXCIqXCIpLFxuXHRcdEZSQUdNRU5UJCA9IHN1YmV4cChzdWJleHAoUENIQVIkICsgXCJ8W1xcXFwvXFxcXD9dXCIpICsgXCIqXCIpLFxuXHRcdEhJRVJfUEFSVCQgPSBzdWJleHAoc3ViZXhwKFwiXFxcXC9cXFxcL1wiICsgQVVUSE9SSVRZJCArIFBBVEhfQUJFTVBUWSQpICsgXCJ8XCIgKyBQQVRIX0FCU09MVVRFJCArIFwifFwiICsgUEFUSF9ST09UTEVTUyQgKyBcInxcIiArIFBBVEhfRU1QVFkkKSxcblx0XHRVUkkkID0gc3ViZXhwKFNDSEVNRSQgKyBcIlxcXFw6XCIgKyBISUVSX1BBUlQkICsgc3ViZXhwKFwiXFxcXD9cIiArIFFVRVJZJCkgKyBcIj9cIiArIHN1YmV4cChcIlxcXFwjXCIgKyBGUkFHTUVOVCQpICsgXCI/XCIpLFxuXHRcdFJFTEFUSVZFX1BBUlQkID0gc3ViZXhwKHN1YmV4cChcIlxcXFwvXFxcXC9cIiArIEFVVEhPUklUWSQgKyBQQVRIX0FCRU1QVFkkKSArIFwifFwiICsgUEFUSF9BQlNPTFVURSQgKyBcInxcIiArIFBBVEhfTk9TQ0hFTUUkICsgXCJ8XCIgKyBQQVRIX0VNUFRZJCksXG5cdFx0UkVMQVRJVkUkID0gc3ViZXhwKFJFTEFUSVZFX1BBUlQkICsgc3ViZXhwKFwiXFxcXD9cIiArIFFVRVJZJCkgKyBcIj9cIiArIHN1YmV4cChcIlxcXFwjXCIgKyBGUkFHTUVOVCQpICsgXCI/XCIpLFxuXHRcdFVSSV9SRUZFUkVOQ0UkID0gc3ViZXhwKFVSSSQgKyBcInxcIiArIFJFTEFUSVZFJCksXG5cdFx0QUJTT0xVVEVfVVJJJCA9IHN1YmV4cChTQ0hFTUUkICsgXCJcXFxcOlwiICsgSElFUl9QQVJUJCArIHN1YmV4cChcIlxcXFw/XCIgKyBRVUVSWSQpICsgXCI/XCIpLFxuXG5cdFx0R0VORVJJQ19SRUYkID0gXCJeKFwiICsgU0NIRU1FJCArIFwiKVxcXFw6XCIgKyBzdWJleHAoc3ViZXhwKFwiXFxcXC9cXFxcLyhcIiArIHN1YmV4cChcIihcIiArIFVTRVJJTkZPJCArIFwiKUBcIikgKyBcIj8oXCIgKyBIT1NUJCArIFwiKVwiICsgc3ViZXhwKFwiXFxcXDooXCIgKyBQT1JUJCArIFwiKVwiKSArIFwiPylcIikgKyBcIj8oXCIgKyBQQVRIX0FCRU1QVFkkICsgXCJ8XCIgKyBQQVRIX0FCU09MVVRFJCArIFwifFwiICsgUEFUSF9ST09UTEVTUyQgKyBcInxcIiArIFBBVEhfRU1QVFkkICsgXCIpXCIpICsgc3ViZXhwKFwiXFxcXD8oXCIgKyBRVUVSWSQgKyBcIilcIikgKyBcIj9cIiArIHN1YmV4cChcIlxcXFwjKFwiICsgRlJBR01FTlQkICsgXCIpXCIpICsgXCI/JFwiLFxuXHRcdFJFTEFUSVZFX1JFRiQgPSBcIl4oKXswfVwiICsgc3ViZXhwKHN1YmV4cChcIlxcXFwvXFxcXC8oXCIgKyBzdWJleHAoXCIoXCIgKyBVU0VSSU5GTyQgKyBcIilAXCIpICsgXCI/KFwiICsgSE9TVCQgKyBcIilcIiArIHN1YmV4cChcIlxcXFw6KFwiICsgUE9SVCQgKyBcIilcIikgKyBcIj8pXCIpICsgXCI/KFwiICsgUEFUSF9BQkVNUFRZJCArIFwifFwiICsgUEFUSF9BQlNPTFVURSQgKyBcInxcIiArIFBBVEhfTk9TQ0hFTUUkICsgXCJ8XCIgKyBQQVRIX0VNUFRZJCArIFwiKVwiKSArIHN1YmV4cChcIlxcXFw/KFwiICsgUVVFUlkkICsgXCIpXCIpICsgXCI/XCIgKyBzdWJleHAoXCJcXFxcIyhcIiArIEZSQUdNRU5UJCArIFwiKVwiKSArIFwiPyRcIixcblx0XHRBQlNPTFVURV9SRUYkID0gXCJeKFwiICsgU0NIRU1FJCArIFwiKVxcXFw6XCIgKyBzdWJleHAoc3ViZXhwKFwiXFxcXC9cXFxcLyhcIiArIHN1YmV4cChcIihcIiArIFVTRVJJTkZPJCArIFwiKUBcIikgKyBcIj8oXCIgKyBIT1NUJCArIFwiKVwiICsgc3ViZXhwKFwiXFxcXDooXCIgKyBQT1JUJCArIFwiKVwiKSArIFwiPylcIikgKyBcIj8oXCIgKyBQQVRIX0FCRU1QVFkkICsgXCJ8XCIgKyBQQVRIX0FCU09MVVRFJCArIFwifFwiICsgUEFUSF9ST09UTEVTUyQgKyBcInxcIiArIFBBVEhfRU1QVFkkICsgXCIpXCIpICsgc3ViZXhwKFwiXFxcXD8oXCIgKyBRVUVSWSQgKyBcIilcIikgKyBcIj8kXCIsXG5cdFx0U0FNRURPQ19SRUYkID0gXCJeXCIgKyBzdWJleHAoXCJcXFxcIyhcIiArIEZSQUdNRU5UJCArIFwiKVwiKSArIFwiPyRcIixcblx0XHRBVVRIT1JJVFlfUkVGJCA9IFwiXlwiICsgc3ViZXhwKFwiKFwiICsgVVNFUklORk8kICsgXCIpQFwiKSArIFwiPyhcIiArIEhPU1QkICsgXCIpXCIgKyBzdWJleHAoXCJcXFxcOihcIiArIFBPUlQkICsgXCIpXCIpICsgXCI/JFwiXG5cdDtcblxuXHRyZXR1cm4ge1xuXHRcdE5PVF9TQ0hFTUUgOiBuZXcgUmVnRXhwKG1lcmdlKFwiW15dXCIsIEFMUEhBJCQsIERJR0lUJCQsIFwiW1xcXFwrXFxcXC1cXFxcLl1cIiksIFwiZ1wiKSxcblx0XHROT1RfVVNFUklORk8gOiBuZXcgUmVnRXhwKG1lcmdlKFwiW15cXFxcJVxcXFw6XVwiLCBVTlJFU0VSVkVEJCQsIFNVQl9ERUxJTVMkJCksIFwiZ1wiKSxcblx0XHROT1RfSE9TVCA6IG5ldyBSZWdFeHAobWVyZ2UoXCJbXlxcXFwlXFxcXFtcXFxcXVxcXFw6XVwiLCBVTlJFU0VSVkVEJCQsIFNVQl9ERUxJTVMkJCksIFwiZ1wiKSxcblx0XHROT1RfUEFUSCA6IG5ldyBSZWdFeHAobWVyZ2UoXCJbXlxcXFwlXFxcXC9cXFxcOlxcXFxAXVwiLCBVTlJFU0VSVkVEJCQsIFNVQl9ERUxJTVMkJCksIFwiZ1wiKSxcblx0XHROT1RfUEFUSF9OT1NDSEVNRSA6IG5ldyBSZWdFeHAobWVyZ2UoXCJbXlxcXFwlXFxcXC9cXFxcQF1cIiwgVU5SRVNFUlZFRCQkLCBTVUJfREVMSU1TJCQpLCBcImdcIiksXG5cdFx0Tk9UX1FVRVJZIDogbmV3IFJlZ0V4cChtZXJnZShcIlteXFxcXCVdXCIsIFVOUkVTRVJWRUQkJCwgU1VCX0RFTElNUyQkLCBcIltcXFxcOlxcXFxAXFxcXC9cXFxcP11cIiwgSVBSSVZBVEUkJCksIFwiZ1wiKSxcblx0XHROT1RfRlJBR01FTlQgOiBuZXcgUmVnRXhwKG1lcmdlKFwiW15cXFxcJV1cIiwgVU5SRVNFUlZFRCQkLCBTVUJfREVMSU1TJCQsIFwiW1xcXFw6XFxcXEBcXFxcL1xcXFw/XVwiKSwgXCJnXCIpLFxuXHRcdEVTQ0FQRSA6IG5ldyBSZWdFeHAobWVyZ2UoXCJbXl1cIiwgVU5SRVNFUlZFRCQkLCBTVUJfREVMSU1TJCQpLCBcImdcIiksXG5cdFx0VU5SRVNFUlZFRCA6IG5ldyBSZWdFeHAoVU5SRVNFUlZFRCQkLCBcImdcIiksXG5cdFx0T1RIRVJfQ0hBUlMgOiBuZXcgUmVnRXhwKG1lcmdlKFwiW15cXFxcJV1cIiwgVU5SRVNFUlZFRCQkLCBSRVNFUlZFRCQkKSwgXCJnXCIpLFxuXHRcdFBDVF9FTkNPREVEIDogbmV3IFJlZ0V4cChQQ1RfRU5DT0RFRCQsIFwiZ1wiKSxcblx0XHRJUFY0QUREUkVTUyA6IG5ldyBSZWdFeHAoXCJeKFwiICsgSVBWNEFERFJFU1MkICsgXCIpJFwiKSxcblx0XHRJUFY2QUREUkVTUyA6IG5ldyBSZWdFeHAoXCJeXFxcXFs/KFwiICsgSVBWNkFERFJFU1MkICsgXCIpXCIgKyBzdWJleHAoc3ViZXhwKFwiXFxcXCUyNXxcXFxcJSg/IVwiICsgSEVYRElHJCQgKyBcInsyfSlcIikgKyBcIihcIiArIFpPTkVJRCQgKyBcIilcIikgKyBcIj9cXFxcXT8kXCIpICAvL1JGQyA2ODc0LCB3aXRoIHJlbGF4ZWQgcGFyc2luZyBydWxlc1xuXHR9O1xufVxuXG5leHBvcnQgZGVmYXVsdCBidWlsZEV4cHMoZmFsc2UpO1xuIiwgImV4cG9ydCBmdW5jdGlvbiBtZXJnZSguLi5zZXRzOkFycmF5PHN0cmluZz4pOnN0cmluZyB7XG5cdGlmIChzZXRzLmxlbmd0aCA+IDEpIHtcblx0XHRzZXRzWzBdID0gc2V0c1swXS5zbGljZSgwLCAtMSk7XG5cdFx0Y29uc3QgeGwgPSBzZXRzLmxlbmd0aCAtIDE7XG5cdFx0Zm9yIChsZXQgeCA9IDE7IHggPCB4bDsgKyt4KSB7XG5cdFx0XHRzZXRzW3hdID0gc2V0c1t4XS5zbGljZSgxLCAtMSk7XG5cdFx0fVxuXHRcdHNldHNbeGxdID0gc2V0c1t4bF0uc2xpY2UoMSk7XG5cdFx0cmV0dXJuIHNldHMuam9pbignJyk7XG5cdH0gZWxzZSB7XG5cdFx0cmV0dXJuIHNldHNbMF07XG5cdH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN1YmV4cChzdHI6c3RyaW5nKTpzdHJpbmcge1xuXHRyZXR1cm4gXCIoPzpcIiArIHN0ciArIFwiKVwiO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdHlwZU9mKG86YW55KTpzdHJpbmcge1xuXHRyZXR1cm4gbyA9PT0gdW5kZWZpbmVkID8gXCJ1bmRlZmluZWRcIiA6IChvID09PSBudWxsID8gXCJudWxsXCIgOiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobykuc3BsaXQoXCIgXCIpLnBvcCgpLnNwbGl0KFwiXVwiKS5zaGlmdCgpLnRvTG93ZXJDYXNlKCkpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdG9VcHBlckNhc2Uoc3RyOnN0cmluZyk6c3RyaW5nIHtcblx0cmV0dXJuIHN0ci50b1VwcGVyQ2FzZSgpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gdG9BcnJheShvYmo6YW55KTpBcnJheTxhbnk+IHtcblx0cmV0dXJuIG9iaiAhPT0gdW5kZWZpbmVkICYmIG9iaiAhPT0gbnVsbCA/IChvYmogaW5zdGFuY2VvZiBBcnJheSA/IG9iaiA6ICh0eXBlb2Ygb2JqLmxlbmd0aCAhPT0gXCJudW1iZXJcIiB8fCBvYmouc3BsaXQgfHwgb2JqLnNldEludGVydmFsIHx8IG9iai5jYWxsID8gW29ial0gOiBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChvYmopKSkgOiBbXTtcbn1cblxuXG5leHBvcnQgZnVuY3Rpb24gYXNzaWduKHRhcmdldDogb2JqZWN0LCBzb3VyY2U6IGFueSk6IGFueSB7XG5cdGNvbnN0IG9iaiA9IHRhcmdldCBhcyBhbnk7XG5cdGlmIChzb3VyY2UpIHtcblx0XHRmb3IgKGNvbnN0IGtleSBpbiBzb3VyY2UpIHtcblx0XHRcdG9ialtrZXldID0gc291cmNlW2tleV07XG5cdFx0fVxuXHR9XG5cdHJldHVybiBvYmo7XG59IiwgIid1c2Ugc3RyaWN0JztcblxuLy8gZG8gbm90IGVkaXQgLmpzIGZpbGVzIGRpcmVjdGx5IC0gZWRpdCBzcmMvaW5kZXguanN0XG5cblxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGVxdWFsKGEsIGIpIHtcbiAgaWYgKGEgPT09IGIpIHJldHVybiB0cnVlO1xuXG4gIGlmIChhICYmIGIgJiYgdHlwZW9mIGEgPT0gJ29iamVjdCcgJiYgdHlwZW9mIGIgPT0gJ29iamVjdCcpIHtcbiAgICBpZiAoYS5jb25zdHJ1Y3RvciAhPT0gYi5jb25zdHJ1Y3RvcikgcmV0dXJuIGZhbHNlO1xuXG4gICAgdmFyIGxlbmd0aCwgaSwga2V5cztcbiAgICBpZiAoQXJyYXkuaXNBcnJheShhKSkge1xuICAgICAgbGVuZ3RoID0gYS5sZW5ndGg7XG4gICAgICBpZiAobGVuZ3RoICE9IGIubGVuZ3RoKSByZXR1cm4gZmFsc2U7XG4gICAgICBmb3IgKGkgPSBsZW5ndGg7IGktLSAhPT0gMDspXG4gICAgICAgIGlmICghZXF1YWwoYVtpXSwgYltpXSkpIHJldHVybiBmYWxzZTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuXG5cbiAgICBpZiAoYS5jb25zdHJ1Y3RvciA9PT0gUmVnRXhwKSByZXR1cm4gYS5zb3VyY2UgPT09IGIuc291cmNlICYmIGEuZmxhZ3MgPT09IGIuZmxhZ3M7XG4gICAgaWYgKGEudmFsdWVPZiAhPT0gT2JqZWN0LnByb3RvdHlwZS52YWx1ZU9mKSByZXR1cm4gYS52YWx1ZU9mKCkgPT09IGIudmFsdWVPZigpO1xuICAgIGlmIChhLnRvU3RyaW5nICE9PSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nKSByZXR1cm4gYS50b1N0cmluZygpID09PSBiLnRvU3RyaW5nKCk7XG5cbiAgICBrZXlzID0gT2JqZWN0LmtleXMoYSk7XG4gICAgbGVuZ3RoID0ga2V5cy5sZW5ndGg7XG4gICAgaWYgKGxlbmd0aCAhPT0gT2JqZWN0LmtleXMoYikubGVuZ3RoKSByZXR1cm4gZmFsc2U7XG5cbiAgICBmb3IgKGkgPSBsZW5ndGg7IGktLSAhPT0gMDspXG4gICAgICBpZiAoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChiLCBrZXlzW2ldKSkgcmV0dXJuIGZhbHNlO1xuXG4gICAgZm9yIChpID0gbGVuZ3RoOyBpLS0gIT09IDA7KSB7XG4gICAgICB2YXIga2V5ID0ga2V5c1tpXTtcblxuICAgICAgaWYgKCFlcXVhbChhW2tleV0sIGJba2V5XSkpIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8vIHRydWUgaWYgYm90aCBOYU4sIGZhbHNlIG90aGVyd2lzZVxuICByZXR1cm4gYSE9PWEgJiYgYiE9PWI7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcblxuLy8gaHR0cHM6Ly9tYXRoaWFzYnluZW5zLmJlL25vdGVzL2phdmFzY3JpcHQtZW5jb2Rpbmdcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9iZXN0aWVqcy9wdW55Y29kZS5qcyAtIHB1bnljb2RlLnVjczIuZGVjb2RlXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIHVjczJsZW5ndGgoc3RyKSB7XG4gIHZhciBsZW5ndGggPSAwXG4gICAgLCBsZW4gPSBzdHIubGVuZ3RoXG4gICAgLCBwb3MgPSAwXG4gICAgLCB2YWx1ZTtcbiAgd2hpbGUgKHBvcyA8IGxlbikge1xuICAgIGxlbmd0aCsrO1xuICAgIHZhbHVlID0gc3RyLmNoYXJDb2RlQXQocG9zKyspO1xuICAgIGlmICh2YWx1ZSA+PSAweEQ4MDAgJiYgdmFsdWUgPD0gMHhEQkZGICYmIHBvcyA8IGxlbikge1xuICAgICAgLy8gaGlnaCBzdXJyb2dhdGUsIGFuZCB0aGVyZSBpcyBhIG5leHQgY2hhcmFjdGVyXG4gICAgICB2YWx1ZSA9IHN0ci5jaGFyQ29kZUF0KHBvcyk7XG4gICAgICBpZiAoKHZhbHVlICYgMHhGQzAwKSA9PSAweERDMDApIHBvcysrOyAvLyBsb3cgc3Vycm9nYXRlXG4gICAgfVxuICB9XG4gIHJldHVybiBsZW5ndGg7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcblxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgY29weTogY29weSxcbiAgY2hlY2tEYXRhVHlwZTogY2hlY2tEYXRhVHlwZSxcbiAgY2hlY2tEYXRhVHlwZXM6IGNoZWNrRGF0YVR5cGVzLFxuICBjb2VyY2VUb1R5cGVzOiBjb2VyY2VUb1R5cGVzLFxuICB0b0hhc2g6IHRvSGFzaCxcbiAgZ2V0UHJvcGVydHk6IGdldFByb3BlcnR5LFxuICBlc2NhcGVRdW90ZXM6IGVzY2FwZVF1b3RlcyxcbiAgZXF1YWw6IHJlcXVpcmUoJ2Zhc3QtZGVlcC1lcXVhbCcpLFxuICB1Y3MybGVuZ3RoOiByZXF1aXJlKCcuL3VjczJsZW5ndGgnKSxcbiAgdmFyT2NjdXJlbmNlczogdmFyT2NjdXJlbmNlcyxcbiAgdmFyUmVwbGFjZTogdmFyUmVwbGFjZSxcbiAgc2NoZW1hSGFzUnVsZXM6IHNjaGVtYUhhc1J1bGVzLFxuICBzY2hlbWFIYXNSdWxlc0V4Y2VwdDogc2NoZW1hSGFzUnVsZXNFeGNlcHQsXG4gIHNjaGVtYVVua25vd25SdWxlczogc2NoZW1hVW5rbm93blJ1bGVzLFxuICB0b1F1b3RlZFN0cmluZzogdG9RdW90ZWRTdHJpbmcsXG4gIGdldFBhdGhFeHByOiBnZXRQYXRoRXhwcixcbiAgZ2V0UGF0aDogZ2V0UGF0aCxcbiAgZ2V0RGF0YTogZ2V0RGF0YSxcbiAgdW5lc2NhcGVGcmFnbWVudDogdW5lc2NhcGVGcmFnbWVudCxcbiAgdW5lc2NhcGVKc29uUG9pbnRlcjogdW5lc2NhcGVKc29uUG9pbnRlcixcbiAgZXNjYXBlRnJhZ21lbnQ6IGVzY2FwZUZyYWdtZW50LFxuICBlc2NhcGVKc29uUG9pbnRlcjogZXNjYXBlSnNvblBvaW50ZXJcbn07XG5cblxuZnVuY3Rpb24gY29weShvLCB0bykge1xuICB0byA9IHRvIHx8IHt9O1xuICBmb3IgKHZhciBrZXkgaW4gbykgdG9ba2V5XSA9IG9ba2V5XTtcbiAgcmV0dXJuIHRvO1xufVxuXG5cbmZ1bmN0aW9uIGNoZWNrRGF0YVR5cGUoZGF0YVR5cGUsIGRhdGEsIHN0cmljdE51bWJlcnMsIG5lZ2F0ZSkge1xuICB2YXIgRVFVQUwgPSBuZWdhdGUgPyAnICE9PSAnIDogJyA9PT0gJ1xuICAgICwgQU5EID0gbmVnYXRlID8gJyB8fCAnIDogJyAmJiAnXG4gICAgLCBPSyA9IG5lZ2F0ZSA/ICchJyA6ICcnXG4gICAgLCBOT1QgPSBuZWdhdGUgPyAnJyA6ICchJztcbiAgc3dpdGNoIChkYXRhVHlwZSkge1xuICAgIGNhc2UgJ251bGwnOiByZXR1cm4gZGF0YSArIEVRVUFMICsgJ251bGwnO1xuICAgIGNhc2UgJ2FycmF5JzogcmV0dXJuIE9LICsgJ0FycmF5LmlzQXJyYXkoJyArIGRhdGEgKyAnKSc7XG4gICAgY2FzZSAnb2JqZWN0JzogcmV0dXJuICcoJyArIE9LICsgZGF0YSArIEFORCArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICd0eXBlb2YgJyArIGRhdGEgKyBFUVVBTCArICdcIm9iamVjdFwiJyArIEFORCArXG4gICAgICAgICAgICAgICAgICAgICAgICAgIE5PVCArICdBcnJheS5pc0FycmF5KCcgKyBkYXRhICsgJykpJztcbiAgICBjYXNlICdpbnRlZ2VyJzogcmV0dXJuICcodHlwZW9mICcgKyBkYXRhICsgRVFVQUwgKyAnXCJudW1iZXJcIicgKyBBTkQgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgTk9UICsgJygnICsgZGF0YSArICcgJSAxKScgK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgQU5EICsgZGF0YSArIEVRVUFMICsgZGF0YSArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAoc3RyaWN0TnVtYmVycyA/IChBTkQgKyBPSyArICdpc0Zpbml0ZSgnICsgZGF0YSArICcpJykgOiAnJykgKyAnKSc7XG4gICAgY2FzZSAnbnVtYmVyJzogcmV0dXJuICcodHlwZW9mICcgKyBkYXRhICsgRVFVQUwgKyAnXCInICsgZGF0YVR5cGUgKyAnXCInICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKHN0cmljdE51bWJlcnMgPyAoQU5EICsgT0sgKyAnaXNGaW5pdGUoJyArIGRhdGEgKyAnKScpIDogJycpICsgJyknO1xuICAgIGRlZmF1bHQ6IHJldHVybiAndHlwZW9mICcgKyBkYXRhICsgRVFVQUwgKyAnXCInICsgZGF0YVR5cGUgKyAnXCInO1xuICB9XG59XG5cblxuZnVuY3Rpb24gY2hlY2tEYXRhVHlwZXMoZGF0YVR5cGVzLCBkYXRhLCBzdHJpY3ROdW1iZXJzKSB7XG4gIHN3aXRjaCAoZGF0YVR5cGVzLmxlbmd0aCkge1xuICAgIGNhc2UgMTogcmV0dXJuIGNoZWNrRGF0YVR5cGUoZGF0YVR5cGVzWzBdLCBkYXRhLCBzdHJpY3ROdW1iZXJzLCB0cnVlKTtcbiAgICBkZWZhdWx0OlxuICAgICAgdmFyIGNvZGUgPSAnJztcbiAgICAgIHZhciB0eXBlcyA9IHRvSGFzaChkYXRhVHlwZXMpO1xuICAgICAgaWYgKHR5cGVzLmFycmF5ICYmIHR5cGVzLm9iamVjdCkge1xuICAgICAgICBjb2RlID0gdHlwZXMubnVsbCA/ICcoJzogJyghJyArIGRhdGEgKyAnIHx8ICc7XG4gICAgICAgIGNvZGUgKz0gJ3R5cGVvZiAnICsgZGF0YSArICcgIT09IFwib2JqZWN0XCIpJztcbiAgICAgICAgZGVsZXRlIHR5cGVzLm51bGw7XG4gICAgICAgIGRlbGV0ZSB0eXBlcy5hcnJheTtcbiAgICAgICAgZGVsZXRlIHR5cGVzLm9iamVjdDtcbiAgICAgIH1cbiAgICAgIGlmICh0eXBlcy5udW1iZXIpIGRlbGV0ZSB0eXBlcy5pbnRlZ2VyO1xuICAgICAgZm9yICh2YXIgdCBpbiB0eXBlcylcbiAgICAgICAgY29kZSArPSAoY29kZSA/ICcgJiYgJyA6ICcnICkgKyBjaGVja0RhdGFUeXBlKHQsIGRhdGEsIHN0cmljdE51bWJlcnMsIHRydWUpO1xuXG4gICAgICByZXR1cm4gY29kZTtcbiAgfVxufVxuXG5cbnZhciBDT0VSQ0VfVE9fVFlQRVMgPSB0b0hhc2goWyAnc3RyaW5nJywgJ251bWJlcicsICdpbnRlZ2VyJywgJ2Jvb2xlYW4nLCAnbnVsbCcgXSk7XG5mdW5jdGlvbiBjb2VyY2VUb1R5cGVzKG9wdGlvbkNvZXJjZVR5cGVzLCBkYXRhVHlwZXMpIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkoZGF0YVR5cGVzKSkge1xuICAgIHZhciB0eXBlcyA9IFtdO1xuICAgIGZvciAodmFyIGk9MDsgaTxkYXRhVHlwZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciB0ID0gZGF0YVR5cGVzW2ldO1xuICAgICAgaWYgKENPRVJDRV9UT19UWVBFU1t0XSkgdHlwZXNbdHlwZXMubGVuZ3RoXSA9IHQ7XG4gICAgICBlbHNlIGlmIChvcHRpb25Db2VyY2VUeXBlcyA9PT0gJ2FycmF5JyAmJiB0ID09PSAnYXJyYXknKSB0eXBlc1t0eXBlcy5sZW5ndGhdID0gdDtcbiAgICB9XG4gICAgaWYgKHR5cGVzLmxlbmd0aCkgcmV0dXJuIHR5cGVzO1xuICB9IGVsc2UgaWYgKENPRVJDRV9UT19UWVBFU1tkYXRhVHlwZXNdKSB7XG4gICAgcmV0dXJuIFtkYXRhVHlwZXNdO1xuICB9IGVsc2UgaWYgKG9wdGlvbkNvZXJjZVR5cGVzID09PSAnYXJyYXknICYmIGRhdGFUeXBlcyA9PT0gJ2FycmF5Jykge1xuICAgIHJldHVybiBbJ2FycmF5J107XG4gIH1cbn1cblxuXG5mdW5jdGlvbiB0b0hhc2goYXJyKSB7XG4gIHZhciBoYXNoID0ge307XG4gIGZvciAodmFyIGk9MDsgaTxhcnIubGVuZ3RoOyBpKyspIGhhc2hbYXJyW2ldXSA9IHRydWU7XG4gIHJldHVybiBoYXNoO1xufVxuXG5cbnZhciBJREVOVElGSUVSID0gL15bYS16JF9dW2EteiRfMC05XSokL2k7XG52YXIgU0lOR0xFX1FVT1RFID0gLyd8XFxcXC9nO1xuZnVuY3Rpb24gZ2V0UHJvcGVydHkoa2V5KSB7XG4gIHJldHVybiB0eXBlb2Yga2V5ID09ICdudW1iZXInXG4gICAgICAgICAgPyAnWycgKyBrZXkgKyAnXSdcbiAgICAgICAgICA6IElERU5USUZJRVIudGVzdChrZXkpXG4gICAgICAgICAgICA/ICcuJyArIGtleVxuICAgICAgICAgICAgOiBcIlsnXCIgKyBlc2NhcGVRdW90ZXMoa2V5KSArIFwiJ11cIjtcbn1cblxuXG5mdW5jdGlvbiBlc2NhcGVRdW90ZXMoc3RyKSB7XG4gIHJldHVybiBzdHIucmVwbGFjZShTSU5HTEVfUVVPVEUsICdcXFxcJCYnKVxuICAgICAgICAgICAgLnJlcGxhY2UoL1xcbi9nLCAnXFxcXG4nKVxuICAgICAgICAgICAgLnJlcGxhY2UoL1xcci9nLCAnXFxcXHInKVxuICAgICAgICAgICAgLnJlcGxhY2UoL1xcZi9nLCAnXFxcXGYnKVxuICAgICAgICAgICAgLnJlcGxhY2UoL1xcdC9nLCAnXFxcXHQnKTtcbn1cblxuXG5mdW5jdGlvbiB2YXJPY2N1cmVuY2VzKHN0ciwgZGF0YVZhcikge1xuICBkYXRhVmFyICs9ICdbXjAtOV0nO1xuICB2YXIgbWF0Y2hlcyA9IHN0ci5tYXRjaChuZXcgUmVnRXhwKGRhdGFWYXIsICdnJykpO1xuICByZXR1cm4gbWF0Y2hlcyA/IG1hdGNoZXMubGVuZ3RoIDogMDtcbn1cblxuXG5mdW5jdGlvbiB2YXJSZXBsYWNlKHN0ciwgZGF0YVZhciwgZXhwcikge1xuICBkYXRhVmFyICs9ICcoW14wLTldKSc7XG4gIGV4cHIgPSBleHByLnJlcGxhY2UoL1xcJC9nLCAnJCQkJCcpO1xuICByZXR1cm4gc3RyLnJlcGxhY2UobmV3IFJlZ0V4cChkYXRhVmFyLCAnZycpLCBleHByICsgJyQxJyk7XG59XG5cblxuZnVuY3Rpb24gc2NoZW1hSGFzUnVsZXMoc2NoZW1hLCBydWxlcykge1xuICBpZiAodHlwZW9mIHNjaGVtYSA9PSAnYm9vbGVhbicpIHJldHVybiAhc2NoZW1hO1xuICBmb3IgKHZhciBrZXkgaW4gc2NoZW1hKSBpZiAocnVsZXNba2V5XSkgcmV0dXJuIHRydWU7XG59XG5cblxuZnVuY3Rpb24gc2NoZW1hSGFzUnVsZXNFeGNlcHQoc2NoZW1hLCBydWxlcywgZXhjZXB0S2V5d29yZCkge1xuICBpZiAodHlwZW9mIHNjaGVtYSA9PSAnYm9vbGVhbicpIHJldHVybiAhc2NoZW1hICYmIGV4Y2VwdEtleXdvcmQgIT0gJ25vdCc7XG4gIGZvciAodmFyIGtleSBpbiBzY2hlbWEpIGlmIChrZXkgIT0gZXhjZXB0S2V5d29yZCAmJiBydWxlc1trZXldKSByZXR1cm4gdHJ1ZTtcbn1cblxuXG5mdW5jdGlvbiBzY2hlbWFVbmtub3duUnVsZXMoc2NoZW1hLCBydWxlcykge1xuICBpZiAodHlwZW9mIHNjaGVtYSA9PSAnYm9vbGVhbicpIHJldHVybjtcbiAgZm9yICh2YXIga2V5IGluIHNjaGVtYSkgaWYgKCFydWxlc1trZXldKSByZXR1cm4ga2V5O1xufVxuXG5cbmZ1bmN0aW9uIHRvUXVvdGVkU3RyaW5nKHN0cikge1xuICByZXR1cm4gJ1xcJycgKyBlc2NhcGVRdW90ZXMoc3RyKSArICdcXCcnO1xufVxuXG5cbmZ1bmN0aW9uIGdldFBhdGhFeHByKGN1cnJlbnRQYXRoLCBleHByLCBqc29uUG9pbnRlcnMsIGlzTnVtYmVyKSB7XG4gIHZhciBwYXRoID0ganNvblBvaW50ZXJzIC8vIGZhbHNlIGJ5IGRlZmF1bHRcbiAgICAgICAgICAgICAgPyAnXFwnL1xcJyArICcgKyBleHByICsgKGlzTnVtYmVyID8gJycgOiAnLnJlcGxhY2UoL34vZywgXFwnfjBcXCcpLnJlcGxhY2UoL1xcXFwvL2csIFxcJ34xXFwnKScpXG4gICAgICAgICAgICAgIDogKGlzTnVtYmVyID8gJ1xcJ1tcXCcgKyAnICsgZXhwciArICcgKyBcXCddXFwnJyA6ICdcXCdbXFxcXFxcJ1xcJyArICcgKyBleHByICsgJyArIFxcJ1xcXFxcXCddXFwnJyk7XG4gIHJldHVybiBqb2luUGF0aHMoY3VycmVudFBhdGgsIHBhdGgpO1xufVxuXG5cbmZ1bmN0aW9uIGdldFBhdGgoY3VycmVudFBhdGgsIHByb3AsIGpzb25Qb2ludGVycykge1xuICB2YXIgcGF0aCA9IGpzb25Qb2ludGVycyAvLyBmYWxzZSBieSBkZWZhdWx0XG4gICAgICAgICAgICAgID8gdG9RdW90ZWRTdHJpbmcoJy8nICsgZXNjYXBlSnNvblBvaW50ZXIocHJvcCkpXG4gICAgICAgICAgICAgIDogdG9RdW90ZWRTdHJpbmcoZ2V0UHJvcGVydHkocHJvcCkpO1xuICByZXR1cm4gam9pblBhdGhzKGN1cnJlbnRQYXRoLCBwYXRoKTtcbn1cblxuXG52YXIgSlNPTl9QT0lOVEVSID0gL15cXC8oPzpbXn5dfH4wfH4xKSokLztcbnZhciBSRUxBVElWRV9KU09OX1BPSU5URVIgPSAvXihbMC05XSspKCN8XFwvKD86W15+XXx+MHx+MSkqKT8kLztcbmZ1bmN0aW9uIGdldERhdGEoJGRhdGEsIGx2bCwgcGF0aHMpIHtcbiAgdmFyIHVwLCBqc29uUG9pbnRlciwgZGF0YSwgbWF0Y2hlcztcbiAgaWYgKCRkYXRhID09PSAnJykgcmV0dXJuICdyb290RGF0YSc7XG4gIGlmICgkZGF0YVswXSA9PSAnLycpIHtcbiAgICBpZiAoIUpTT05fUE9JTlRFUi50ZXN0KCRkYXRhKSkgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIEpTT04tcG9pbnRlcjogJyArICRkYXRhKTtcbiAgICBqc29uUG9pbnRlciA9ICRkYXRhO1xuICAgIGRhdGEgPSAncm9vdERhdGEnO1xuICB9IGVsc2Uge1xuICAgIG1hdGNoZXMgPSAkZGF0YS5tYXRjaChSRUxBVElWRV9KU09OX1BPSU5URVIpO1xuICAgIGlmICghbWF0Y2hlcykgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIEpTT04tcG9pbnRlcjogJyArICRkYXRhKTtcbiAgICB1cCA9ICttYXRjaGVzWzFdO1xuICAgIGpzb25Qb2ludGVyID0gbWF0Y2hlc1syXTtcbiAgICBpZiAoanNvblBvaW50ZXIgPT0gJyMnKSB7XG4gICAgICBpZiAodXAgPj0gbHZsKSB0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBhY2Nlc3MgcHJvcGVydHkvaW5kZXggJyArIHVwICsgJyBsZXZlbHMgdXAsIGN1cnJlbnQgbGV2ZWwgaXMgJyArIGx2bCk7XG4gICAgICByZXR1cm4gcGF0aHNbbHZsIC0gdXBdO1xuICAgIH1cblxuICAgIGlmICh1cCA+IGx2bCkgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgYWNjZXNzIGRhdGEgJyArIHVwICsgJyBsZXZlbHMgdXAsIGN1cnJlbnQgbGV2ZWwgaXMgJyArIGx2bCk7XG4gICAgZGF0YSA9ICdkYXRhJyArICgobHZsIC0gdXApIHx8ICcnKTtcbiAgICBpZiAoIWpzb25Qb2ludGVyKSByZXR1cm4gZGF0YTtcbiAgfVxuXG4gIHZhciBleHByID0gZGF0YTtcbiAgdmFyIHNlZ21lbnRzID0ganNvblBvaW50ZXIuc3BsaXQoJy8nKTtcbiAgZm9yICh2YXIgaT0wOyBpPHNlZ21lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIHNlZ21lbnQgPSBzZWdtZW50c1tpXTtcbiAgICBpZiAoc2VnbWVudCkge1xuICAgICAgZGF0YSArPSBnZXRQcm9wZXJ0eSh1bmVzY2FwZUpzb25Qb2ludGVyKHNlZ21lbnQpKTtcbiAgICAgIGV4cHIgKz0gJyAmJiAnICsgZGF0YTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGV4cHI7XG59XG5cblxuZnVuY3Rpb24gam9pblBhdGhzIChhLCBiKSB7XG4gIGlmIChhID09ICdcIlwiJykgcmV0dXJuIGI7XG4gIHJldHVybiAoYSArICcgKyAnICsgYikucmVwbGFjZSgvKFteXFxcXF0pJyBcXCsgJy9nLCAnJDEnKTtcbn1cblxuXG5mdW5jdGlvbiB1bmVzY2FwZUZyYWdtZW50KHN0cikge1xuICByZXR1cm4gdW5lc2NhcGVKc29uUG9pbnRlcihkZWNvZGVVUklDb21wb25lbnQoc3RyKSk7XG59XG5cblxuZnVuY3Rpb24gZXNjYXBlRnJhZ21lbnQoc3RyKSB7XG4gIHJldHVybiBlbmNvZGVVUklDb21wb25lbnQoZXNjYXBlSnNvblBvaW50ZXIoc3RyKSk7XG59XG5cblxuZnVuY3Rpb24gZXNjYXBlSnNvblBvaW50ZXIoc3RyKSB7XG4gIHJldHVybiBzdHIucmVwbGFjZSgvfi9nLCAnfjAnKS5yZXBsYWNlKC9cXC8vZywgJ34xJyk7XG59XG5cblxuZnVuY3Rpb24gdW5lc2NhcGVKc29uUG9pbnRlcihzdHIpIHtcbiAgcmV0dXJuIHN0ci5yZXBsYWNlKC9+MS9nLCAnLycpLnJlcGxhY2UoL34wL2csICd+Jyk7XG59XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbCA9IHJlcXVpcmUoJy4vdXRpbCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IFNjaGVtYU9iamVjdDtcblxuZnVuY3Rpb24gU2NoZW1hT2JqZWN0KG9iaikge1xuICB1dGlsLmNvcHkob2JqLCB0aGlzKTtcbn1cbiIsICIndXNlIHN0cmljdCc7XG5cbnZhciB0cmF2ZXJzZSA9IG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHNjaGVtYSwgb3B0cywgY2IpIHtcbiAgLy8gTGVnYWN5IHN1cHBvcnQgZm9yIHYwLjMuMSBhbmQgZWFybGllci5cbiAgaWYgKHR5cGVvZiBvcHRzID09ICdmdW5jdGlvbicpIHtcbiAgICBjYiA9IG9wdHM7XG4gICAgb3B0cyA9IHt9O1xuICB9XG5cbiAgY2IgPSBvcHRzLmNiIHx8IGNiO1xuICB2YXIgcHJlID0gKHR5cGVvZiBjYiA9PSAnZnVuY3Rpb24nKSA/IGNiIDogY2IucHJlIHx8IGZ1bmN0aW9uKCkge307XG4gIHZhciBwb3N0ID0gY2IucG9zdCB8fCBmdW5jdGlvbigpIHt9O1xuXG4gIF90cmF2ZXJzZShvcHRzLCBwcmUsIHBvc3QsIHNjaGVtYSwgJycsIHNjaGVtYSk7XG59O1xuXG5cbnRyYXZlcnNlLmtleXdvcmRzID0ge1xuICBhZGRpdGlvbmFsSXRlbXM6IHRydWUsXG4gIGl0ZW1zOiB0cnVlLFxuICBjb250YWluczogdHJ1ZSxcbiAgYWRkaXRpb25hbFByb3BlcnRpZXM6IHRydWUsXG4gIHByb3BlcnR5TmFtZXM6IHRydWUsXG4gIG5vdDogdHJ1ZVxufTtcblxudHJhdmVyc2UuYXJyYXlLZXl3b3JkcyA9IHtcbiAgaXRlbXM6IHRydWUsXG4gIGFsbE9mOiB0cnVlLFxuICBhbnlPZjogdHJ1ZSxcbiAgb25lT2Y6IHRydWVcbn07XG5cbnRyYXZlcnNlLnByb3BzS2V5d29yZHMgPSB7XG4gIGRlZmluaXRpb25zOiB0cnVlLFxuICBwcm9wZXJ0aWVzOiB0cnVlLFxuICBwYXR0ZXJuUHJvcGVydGllczogdHJ1ZSxcbiAgZGVwZW5kZW5jaWVzOiB0cnVlXG59O1xuXG50cmF2ZXJzZS5za2lwS2V5d29yZHMgPSB7XG4gIGRlZmF1bHQ6IHRydWUsXG4gIGVudW06IHRydWUsXG4gIGNvbnN0OiB0cnVlLFxuICByZXF1aXJlZDogdHJ1ZSxcbiAgbWF4aW11bTogdHJ1ZSxcbiAgbWluaW11bTogdHJ1ZSxcbiAgZXhjbHVzaXZlTWF4aW11bTogdHJ1ZSxcbiAgZXhjbHVzaXZlTWluaW11bTogdHJ1ZSxcbiAgbXVsdGlwbGVPZjogdHJ1ZSxcbiAgbWF4TGVuZ3RoOiB0cnVlLFxuICBtaW5MZW5ndGg6IHRydWUsXG4gIHBhdHRlcm46IHRydWUsXG4gIGZvcm1hdDogdHJ1ZSxcbiAgbWF4SXRlbXM6IHRydWUsXG4gIG1pbkl0ZW1zOiB0cnVlLFxuICB1bmlxdWVJdGVtczogdHJ1ZSxcbiAgbWF4UHJvcGVydGllczogdHJ1ZSxcbiAgbWluUHJvcGVydGllczogdHJ1ZVxufTtcblxuXG5mdW5jdGlvbiBfdHJhdmVyc2Uob3B0cywgcHJlLCBwb3N0LCBzY2hlbWEsIGpzb25QdHIsIHJvb3RTY2hlbWEsIHBhcmVudEpzb25QdHIsIHBhcmVudEtleXdvcmQsIHBhcmVudFNjaGVtYSwga2V5SW5kZXgpIHtcbiAgaWYgKHNjaGVtYSAmJiB0eXBlb2Ygc2NoZW1hID09ICdvYmplY3QnICYmICFBcnJheS5pc0FycmF5KHNjaGVtYSkpIHtcbiAgICBwcmUoc2NoZW1hLCBqc29uUHRyLCByb290U2NoZW1hLCBwYXJlbnRKc29uUHRyLCBwYXJlbnRLZXl3b3JkLCBwYXJlbnRTY2hlbWEsIGtleUluZGV4KTtcbiAgICBmb3IgKHZhciBrZXkgaW4gc2NoZW1hKSB7XG4gICAgICB2YXIgc2NoID0gc2NoZW1hW2tleV07XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShzY2gpKSB7XG4gICAgICAgIGlmIChrZXkgaW4gdHJhdmVyc2UuYXJyYXlLZXl3b3Jkcykge1xuICAgICAgICAgIGZvciAodmFyIGk9MDsgaTxzY2gubGVuZ3RoOyBpKyspXG4gICAgICAgICAgICBfdHJhdmVyc2Uob3B0cywgcHJlLCBwb3N0LCBzY2hbaV0sIGpzb25QdHIgKyAnLycgKyBrZXkgKyAnLycgKyBpLCByb290U2NoZW1hLCBqc29uUHRyLCBrZXksIHNjaGVtYSwgaSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoa2V5IGluIHRyYXZlcnNlLnByb3BzS2V5d29yZHMpIHtcbiAgICAgICAgaWYgKHNjaCAmJiB0eXBlb2Ygc2NoID09ICdvYmplY3QnKSB7XG4gICAgICAgICAgZm9yICh2YXIgcHJvcCBpbiBzY2gpXG4gICAgICAgICAgICBfdHJhdmVyc2Uob3B0cywgcHJlLCBwb3N0LCBzY2hbcHJvcF0sIGpzb25QdHIgKyAnLycgKyBrZXkgKyAnLycgKyBlc2NhcGVKc29uUHRyKHByb3ApLCByb290U2NoZW1hLCBqc29uUHRyLCBrZXksIHNjaGVtYSwgcHJvcCk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoa2V5IGluIHRyYXZlcnNlLmtleXdvcmRzIHx8IChvcHRzLmFsbEtleXMgJiYgIShrZXkgaW4gdHJhdmVyc2Uuc2tpcEtleXdvcmRzKSkpIHtcbiAgICAgICAgX3RyYXZlcnNlKG9wdHMsIHByZSwgcG9zdCwgc2NoLCBqc29uUHRyICsgJy8nICsga2V5LCByb290U2NoZW1hLCBqc29uUHRyLCBrZXksIHNjaGVtYSk7XG4gICAgICB9XG4gICAgfVxuICAgIHBvc3Qoc2NoZW1hLCBqc29uUHRyLCByb290U2NoZW1hLCBwYXJlbnRKc29uUHRyLCBwYXJlbnRLZXl3b3JkLCBwYXJlbnRTY2hlbWEsIGtleUluZGV4KTtcbiAgfVxufVxuXG5cbmZ1bmN0aW9uIGVzY2FwZUpzb25QdHIoc3RyKSB7XG4gIHJldHVybiBzdHIucmVwbGFjZSgvfi9nLCAnfjAnKS5yZXBsYWNlKC9cXC8vZywgJ34xJyk7XG59XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG52YXIgVVJJID0gcmVxdWlyZSgndXJpLWpzJylcbiAgLCBlcXVhbCA9IHJlcXVpcmUoJ2Zhc3QtZGVlcC1lcXVhbCcpXG4gICwgdXRpbCA9IHJlcXVpcmUoJy4vdXRpbCcpXG4gICwgU2NoZW1hT2JqZWN0ID0gcmVxdWlyZSgnLi9zY2hlbWFfb2JqJylcbiAgLCB0cmF2ZXJzZSA9IHJlcXVpcmUoJ2pzb24tc2NoZW1hLXRyYXZlcnNlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gcmVzb2x2ZTtcblxucmVzb2x2ZS5ub3JtYWxpemVJZCA9IG5vcm1hbGl6ZUlkO1xucmVzb2x2ZS5mdWxsUGF0aCA9IGdldEZ1bGxQYXRoO1xucmVzb2x2ZS51cmwgPSByZXNvbHZlVXJsO1xucmVzb2x2ZS5pZHMgPSByZXNvbHZlSWRzO1xucmVzb2x2ZS5pbmxpbmVSZWYgPSBpbmxpbmVSZWY7XG5yZXNvbHZlLnNjaGVtYSA9IHJlc29sdmVTY2hlbWE7XG5cbi8qKlxuICogW3Jlc29sdmUgYW5kIGNvbXBpbGUgdGhlIHJlZmVyZW5jZXMgKCRyZWYpXVxuICogQHRoaXMgICBBanZcbiAqIEBwYXJhbSAge0Z1bmN0aW9ufSBjb21waWxlIHJlZmVyZW5jZSB0byBzY2hlbWEgY29tcGlsYXRpb24gZnVuY2l0b24gKGxvY2FsQ29tcGlsZSlcbiAqIEBwYXJhbSAge09iamVjdH0gcm9vdCBvYmplY3Qgd2l0aCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgcm9vdCBzY2hlbWEgZm9yIHRoZSBjdXJyZW50IHNjaGVtYVxuICogQHBhcmFtICB7U3RyaW5nfSByZWYgcmVmZXJlbmNlIHRvIHJlc29sdmVcbiAqIEByZXR1cm4ge09iamVjdHxGdW5jdGlvbn0gc2NoZW1hIG9iamVjdCAoaWYgdGhlIHNjaGVtYSBjYW4gYmUgaW5saW5lZCkgb3IgdmFsaWRhdGlvbiBmdW5jdGlvblxuICovXG5mdW5jdGlvbiByZXNvbHZlKGNvbXBpbGUsIHJvb3QsIHJlZikge1xuICAvKiBqc2hpbnQgdmFsaWR0aGlzOiB0cnVlICovXG4gIHZhciByZWZWYWwgPSB0aGlzLl9yZWZzW3JlZl07XG4gIGlmICh0eXBlb2YgcmVmVmFsID09ICdzdHJpbmcnKSB7XG4gICAgaWYgKHRoaXMuX3JlZnNbcmVmVmFsXSkgcmVmVmFsID0gdGhpcy5fcmVmc1tyZWZWYWxdO1xuICAgIGVsc2UgcmV0dXJuIHJlc29sdmUuY2FsbCh0aGlzLCBjb21waWxlLCByb290LCByZWZWYWwpO1xuICB9XG5cbiAgcmVmVmFsID0gcmVmVmFsIHx8IHRoaXMuX3NjaGVtYXNbcmVmXTtcbiAgaWYgKHJlZlZhbCBpbnN0YW5jZW9mIFNjaGVtYU9iamVjdCkge1xuICAgIHJldHVybiBpbmxpbmVSZWYocmVmVmFsLnNjaGVtYSwgdGhpcy5fb3B0cy5pbmxpbmVSZWZzKVxuICAgICAgICAgICAgPyByZWZWYWwuc2NoZW1hXG4gICAgICAgICAgICA6IHJlZlZhbC52YWxpZGF0ZSB8fCB0aGlzLl9jb21waWxlKHJlZlZhbCk7XG4gIH1cblxuICB2YXIgcmVzID0gcmVzb2x2ZVNjaGVtYS5jYWxsKHRoaXMsIHJvb3QsIHJlZik7XG4gIHZhciBzY2hlbWEsIHYsIGJhc2VJZDtcbiAgaWYgKHJlcykge1xuICAgIHNjaGVtYSA9IHJlcy5zY2hlbWE7XG4gICAgcm9vdCA9IHJlcy5yb290O1xuICAgIGJhc2VJZCA9IHJlcy5iYXNlSWQ7XG4gIH1cblxuICBpZiAoc2NoZW1hIGluc3RhbmNlb2YgU2NoZW1hT2JqZWN0KSB7XG4gICAgdiA9IHNjaGVtYS52YWxpZGF0ZSB8fCBjb21waWxlLmNhbGwodGhpcywgc2NoZW1hLnNjaGVtYSwgcm9vdCwgdW5kZWZpbmVkLCBiYXNlSWQpO1xuICB9IGVsc2UgaWYgKHNjaGVtYSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgdiA9IGlubGluZVJlZihzY2hlbWEsIHRoaXMuX29wdHMuaW5saW5lUmVmcylcbiAgICAgICAgPyBzY2hlbWFcbiAgICAgICAgOiBjb21waWxlLmNhbGwodGhpcywgc2NoZW1hLCByb290LCB1bmRlZmluZWQsIGJhc2VJZCk7XG4gIH1cblxuICByZXR1cm4gdjtcbn1cblxuXG4vKipcbiAqIFJlc29sdmUgc2NoZW1hLCBpdHMgcm9vdCBhbmQgYmFzZUlkXG4gKiBAdGhpcyBBanZcbiAqIEBwYXJhbSAge09iamVjdH0gcm9vdCByb290IG9iamVjdCB3aXRoIHByb3BlcnRpZXMgc2NoZW1hLCByZWZWYWwsIHJlZnNcbiAqIEBwYXJhbSAge1N0cmluZ30gcmVmICByZWZlcmVuY2UgdG8gcmVzb2x2ZVxuICogQHJldHVybiB7T2JqZWN0fSBvYmplY3Qgd2l0aCBwcm9wZXJ0aWVzIHNjaGVtYSwgcm9vdCwgYmFzZUlkXG4gKi9cbmZ1bmN0aW9uIHJlc29sdmVTY2hlbWEocm9vdCwgcmVmKSB7XG4gIC8qIGpzaGludCB2YWxpZHRoaXM6IHRydWUgKi9cbiAgdmFyIHAgPSBVUkkucGFyc2UocmVmKVxuICAgICwgcmVmUGF0aCA9IF9nZXRGdWxsUGF0aChwKVxuICAgICwgYmFzZUlkID0gZ2V0RnVsbFBhdGgodGhpcy5fZ2V0SWQocm9vdC5zY2hlbWEpKTtcbiAgaWYgKE9iamVjdC5rZXlzKHJvb3Quc2NoZW1hKS5sZW5ndGggPT09IDAgfHwgcmVmUGF0aCAhPT0gYmFzZUlkKSB7XG4gICAgdmFyIGlkID0gbm9ybWFsaXplSWQocmVmUGF0aCk7XG4gICAgdmFyIHJlZlZhbCA9IHRoaXMuX3JlZnNbaWRdO1xuICAgIGlmICh0eXBlb2YgcmVmVmFsID09ICdzdHJpbmcnKSB7XG4gICAgICByZXR1cm4gcmVzb2x2ZVJlY3Vyc2l2ZS5jYWxsKHRoaXMsIHJvb3QsIHJlZlZhbCwgcCk7XG4gICAgfSBlbHNlIGlmIChyZWZWYWwgaW5zdGFuY2VvZiBTY2hlbWFPYmplY3QpIHtcbiAgICAgIGlmICghcmVmVmFsLnZhbGlkYXRlKSB0aGlzLl9jb21waWxlKHJlZlZhbCk7XG4gICAgICByb290ID0gcmVmVmFsO1xuICAgIH0gZWxzZSB7XG4gICAgICByZWZWYWwgPSB0aGlzLl9zY2hlbWFzW2lkXTtcbiAgICAgIGlmIChyZWZWYWwgaW5zdGFuY2VvZiBTY2hlbWFPYmplY3QpIHtcbiAgICAgICAgaWYgKCFyZWZWYWwudmFsaWRhdGUpIHRoaXMuX2NvbXBpbGUocmVmVmFsKTtcbiAgICAgICAgaWYgKGlkID09IG5vcm1hbGl6ZUlkKHJlZikpXG4gICAgICAgICAgcmV0dXJuIHsgc2NoZW1hOiByZWZWYWwsIHJvb3Q6IHJvb3QsIGJhc2VJZDogYmFzZUlkIH07XG4gICAgICAgIHJvb3QgPSByZWZWYWw7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgfVxuICAgIGlmICghcm9vdC5zY2hlbWEpIHJldHVybjtcbiAgICBiYXNlSWQgPSBnZXRGdWxsUGF0aCh0aGlzLl9nZXRJZChyb290LnNjaGVtYSkpO1xuICB9XG4gIHJldHVybiBnZXRKc29uUG9pbnRlci5jYWxsKHRoaXMsIHAsIGJhc2VJZCwgcm9vdC5zY2hlbWEsIHJvb3QpO1xufVxuXG5cbi8qIEB0aGlzIEFqdiAqL1xuZnVuY3Rpb24gcmVzb2x2ZVJlY3Vyc2l2ZShyb290LCByZWYsIHBhcnNlZFJlZikge1xuICAvKiBqc2hpbnQgdmFsaWR0aGlzOiB0cnVlICovXG4gIHZhciByZXMgPSByZXNvbHZlU2NoZW1hLmNhbGwodGhpcywgcm9vdCwgcmVmKTtcbiAgaWYgKHJlcykge1xuICAgIHZhciBzY2hlbWEgPSByZXMuc2NoZW1hO1xuICAgIHZhciBiYXNlSWQgPSByZXMuYmFzZUlkO1xuICAgIHJvb3QgPSByZXMucm9vdDtcbiAgICB2YXIgaWQgPSB0aGlzLl9nZXRJZChzY2hlbWEpO1xuICAgIGlmIChpZCkgYmFzZUlkID0gcmVzb2x2ZVVybChiYXNlSWQsIGlkKTtcbiAgICByZXR1cm4gZ2V0SnNvblBvaW50ZXIuY2FsbCh0aGlzLCBwYXJzZWRSZWYsIGJhc2VJZCwgc2NoZW1hLCByb290KTtcbiAgfVxufVxuXG5cbnZhciBQUkVWRU5UX1NDT1BFX0NIQU5HRSA9IHV0aWwudG9IYXNoKFsncHJvcGVydGllcycsICdwYXR0ZXJuUHJvcGVydGllcycsICdlbnVtJywgJ2RlcGVuZGVuY2llcycsICdkZWZpbml0aW9ucyddKTtcbi8qIEB0aGlzIEFqdiAqL1xuZnVuY3Rpb24gZ2V0SnNvblBvaW50ZXIocGFyc2VkUmVmLCBiYXNlSWQsIHNjaGVtYSwgcm9vdCkge1xuICAvKiBqc2hpbnQgdmFsaWR0aGlzOiB0cnVlICovXG4gIHBhcnNlZFJlZi5mcmFnbWVudCA9IHBhcnNlZFJlZi5mcmFnbWVudCB8fCAnJztcbiAgaWYgKHBhcnNlZFJlZi5mcmFnbWVudC5zbGljZSgwLDEpICE9ICcvJykgcmV0dXJuO1xuICB2YXIgcGFydHMgPSBwYXJzZWRSZWYuZnJhZ21lbnQuc3BsaXQoJy8nKTtcblxuICBmb3IgKHZhciBpID0gMTsgaSA8IHBhcnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIHBhcnQgPSBwYXJ0c1tpXTtcbiAgICBpZiAocGFydCkge1xuICAgICAgcGFydCA9IHV0aWwudW5lc2NhcGVGcmFnbWVudChwYXJ0KTtcbiAgICAgIHNjaGVtYSA9IHNjaGVtYVtwYXJ0XTtcbiAgICAgIGlmIChzY2hlbWEgPT09IHVuZGVmaW5lZCkgYnJlYWs7XG4gICAgICB2YXIgaWQ7XG4gICAgICBpZiAoIVBSRVZFTlRfU0NPUEVfQ0hBTkdFW3BhcnRdKSB7XG4gICAgICAgIGlkID0gdGhpcy5fZ2V0SWQoc2NoZW1hKTtcbiAgICAgICAgaWYgKGlkKSBiYXNlSWQgPSByZXNvbHZlVXJsKGJhc2VJZCwgaWQpO1xuICAgICAgICBpZiAoc2NoZW1hLiRyZWYpIHtcbiAgICAgICAgICB2YXIgJHJlZiA9IHJlc29sdmVVcmwoYmFzZUlkLCBzY2hlbWEuJHJlZik7XG4gICAgICAgICAgdmFyIHJlcyA9IHJlc29sdmVTY2hlbWEuY2FsbCh0aGlzLCByb290LCAkcmVmKTtcbiAgICAgICAgICBpZiAocmVzKSB7XG4gICAgICAgICAgICBzY2hlbWEgPSByZXMuc2NoZW1hO1xuICAgICAgICAgICAgcm9vdCA9IHJlcy5yb290O1xuICAgICAgICAgICAgYmFzZUlkID0gcmVzLmJhc2VJZDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgaWYgKHNjaGVtYSAhPT0gdW5kZWZpbmVkICYmIHNjaGVtYSAhPT0gcm9vdC5zY2hlbWEpXG4gICAgcmV0dXJuIHsgc2NoZW1hOiBzY2hlbWEsIHJvb3Q6IHJvb3QsIGJhc2VJZDogYmFzZUlkIH07XG59XG5cblxudmFyIFNJTVBMRV9JTkxJTkVEID0gdXRpbC50b0hhc2goW1xuICAndHlwZScsICdmb3JtYXQnLCAncGF0dGVybicsXG4gICdtYXhMZW5ndGgnLCAnbWluTGVuZ3RoJyxcbiAgJ21heFByb3BlcnRpZXMnLCAnbWluUHJvcGVydGllcycsXG4gICdtYXhJdGVtcycsICdtaW5JdGVtcycsXG4gICdtYXhpbXVtJywgJ21pbmltdW0nLFxuICAndW5pcXVlSXRlbXMnLCAnbXVsdGlwbGVPZicsXG4gICdyZXF1aXJlZCcsICdlbnVtJ1xuXSk7XG5mdW5jdGlvbiBpbmxpbmVSZWYoc2NoZW1hLCBsaW1pdCkge1xuICBpZiAobGltaXQgPT09IGZhbHNlKSByZXR1cm4gZmFsc2U7XG4gIGlmIChsaW1pdCA9PT0gdW5kZWZpbmVkIHx8IGxpbWl0ID09PSB0cnVlKSByZXR1cm4gY2hlY2tOb1JlZihzY2hlbWEpO1xuICBlbHNlIGlmIChsaW1pdCkgcmV0dXJuIGNvdW50S2V5cyhzY2hlbWEpIDw9IGxpbWl0O1xufVxuXG5cbmZ1bmN0aW9uIGNoZWNrTm9SZWYoc2NoZW1hKSB7XG4gIHZhciBpdGVtO1xuICBpZiAoQXJyYXkuaXNBcnJheShzY2hlbWEpKSB7XG4gICAgZm9yICh2YXIgaT0wOyBpPHNjaGVtYS5sZW5ndGg7IGkrKykge1xuICAgICAgaXRlbSA9IHNjaGVtYVtpXTtcbiAgICAgIGlmICh0eXBlb2YgaXRlbSA9PSAnb2JqZWN0JyAmJiAhY2hlY2tOb1JlZihpdGVtKSkgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBmb3IgKHZhciBrZXkgaW4gc2NoZW1hKSB7XG4gICAgICBpZiAoa2V5ID09ICckcmVmJykgcmV0dXJuIGZhbHNlO1xuICAgICAgaXRlbSA9IHNjaGVtYVtrZXldO1xuICAgICAgaWYgKHR5cGVvZiBpdGVtID09ICdvYmplY3QnICYmICFjaGVja05vUmVmKGl0ZW0pKSByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG4gIHJldHVybiB0cnVlO1xufVxuXG5cbmZ1bmN0aW9uIGNvdW50S2V5cyhzY2hlbWEpIHtcbiAgdmFyIGNvdW50ID0gMCwgaXRlbTtcbiAgaWYgKEFycmF5LmlzQXJyYXkoc2NoZW1hKSkge1xuICAgIGZvciAodmFyIGk9MDsgaTxzY2hlbWEubGVuZ3RoOyBpKyspIHtcbiAgICAgIGl0ZW0gPSBzY2hlbWFbaV07XG4gICAgICBpZiAodHlwZW9mIGl0ZW0gPT0gJ29iamVjdCcpIGNvdW50ICs9IGNvdW50S2V5cyhpdGVtKTtcbiAgICAgIGlmIChjb3VudCA9PSBJbmZpbml0eSkgcmV0dXJuIEluZmluaXR5O1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBmb3IgKHZhciBrZXkgaW4gc2NoZW1hKSB7XG4gICAgICBpZiAoa2V5ID09ICckcmVmJykgcmV0dXJuIEluZmluaXR5O1xuICAgICAgaWYgKFNJTVBMRV9JTkxJTkVEW2tleV0pIHtcbiAgICAgICAgY291bnQrKztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGl0ZW0gPSBzY2hlbWFba2V5XTtcbiAgICAgICAgaWYgKHR5cGVvZiBpdGVtID09ICdvYmplY3QnKSBjb3VudCArPSBjb3VudEtleXMoaXRlbSkgKyAxO1xuICAgICAgICBpZiAoY291bnQgPT0gSW5maW5pdHkpIHJldHVybiBJbmZpbml0eTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIGNvdW50O1xufVxuXG5cbmZ1bmN0aW9uIGdldEZ1bGxQYXRoKGlkLCBub3JtYWxpemUpIHtcbiAgaWYgKG5vcm1hbGl6ZSAhPT0gZmFsc2UpIGlkID0gbm9ybWFsaXplSWQoaWQpO1xuICB2YXIgcCA9IFVSSS5wYXJzZShpZCk7XG4gIHJldHVybiBfZ2V0RnVsbFBhdGgocCk7XG59XG5cblxuZnVuY3Rpb24gX2dldEZ1bGxQYXRoKHApIHtcbiAgcmV0dXJuIFVSSS5zZXJpYWxpemUocCkuc3BsaXQoJyMnKVswXSArICcjJztcbn1cblxuXG52YXIgVFJBSUxJTkdfU0xBU0hfSEFTSCA9IC8jXFwvPyQvO1xuZnVuY3Rpb24gbm9ybWFsaXplSWQoaWQpIHtcbiAgcmV0dXJuIGlkID8gaWQucmVwbGFjZShUUkFJTElOR19TTEFTSF9IQVNILCAnJykgOiAnJztcbn1cblxuXG5mdW5jdGlvbiByZXNvbHZlVXJsKGJhc2VJZCwgaWQpIHtcbiAgaWQgPSBub3JtYWxpemVJZChpZCk7XG4gIHJldHVybiBVUkkucmVzb2x2ZShiYXNlSWQsIGlkKTtcbn1cblxuXG4vKiBAdGhpcyBBanYgKi9cbmZ1bmN0aW9uIHJlc29sdmVJZHMoc2NoZW1hKSB7XG4gIHZhciBzY2hlbWFJZCA9IG5vcm1hbGl6ZUlkKHRoaXMuX2dldElkKHNjaGVtYSkpO1xuICB2YXIgYmFzZUlkcyA9IHsnJzogc2NoZW1hSWR9O1xuICB2YXIgZnVsbFBhdGhzID0geycnOiBnZXRGdWxsUGF0aChzY2hlbWFJZCwgZmFsc2UpfTtcbiAgdmFyIGxvY2FsUmVmcyA9IHt9O1xuICB2YXIgc2VsZiA9IHRoaXM7XG5cbiAgdHJhdmVyc2Uoc2NoZW1hLCB7YWxsS2V5czogdHJ1ZX0sIGZ1bmN0aW9uKHNjaCwganNvblB0ciwgcm9vdFNjaGVtYSwgcGFyZW50SnNvblB0ciwgcGFyZW50S2V5d29yZCwgcGFyZW50U2NoZW1hLCBrZXlJbmRleCkge1xuICAgIGlmIChqc29uUHRyID09PSAnJykgcmV0dXJuO1xuICAgIHZhciBpZCA9IHNlbGYuX2dldElkKHNjaCk7XG4gICAgdmFyIGJhc2VJZCA9IGJhc2VJZHNbcGFyZW50SnNvblB0cl07XG4gICAgdmFyIGZ1bGxQYXRoID0gZnVsbFBhdGhzW3BhcmVudEpzb25QdHJdICsgJy8nICsgcGFyZW50S2V5d29yZDtcbiAgICBpZiAoa2V5SW5kZXggIT09IHVuZGVmaW5lZClcbiAgICAgIGZ1bGxQYXRoICs9ICcvJyArICh0eXBlb2Yga2V5SW5kZXggPT0gJ251bWJlcicgPyBrZXlJbmRleCA6IHV0aWwuZXNjYXBlRnJhZ21lbnQoa2V5SW5kZXgpKTtcblxuICAgIGlmICh0eXBlb2YgaWQgPT0gJ3N0cmluZycpIHtcbiAgICAgIGlkID0gYmFzZUlkID0gbm9ybWFsaXplSWQoYmFzZUlkID8gVVJJLnJlc29sdmUoYmFzZUlkLCBpZCkgOiBpZCk7XG5cbiAgICAgIHZhciByZWZWYWwgPSBzZWxmLl9yZWZzW2lkXTtcbiAgICAgIGlmICh0eXBlb2YgcmVmVmFsID09ICdzdHJpbmcnKSByZWZWYWwgPSBzZWxmLl9yZWZzW3JlZlZhbF07XG4gICAgICBpZiAocmVmVmFsICYmIHJlZlZhbC5zY2hlbWEpIHtcbiAgICAgICAgaWYgKCFlcXVhbChzY2gsIHJlZlZhbC5zY2hlbWEpKVxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignaWQgXCInICsgaWQgKyAnXCIgcmVzb2x2ZXMgdG8gbW9yZSB0aGFuIG9uZSBzY2hlbWEnKTtcbiAgICAgIH0gZWxzZSBpZiAoaWQgIT0gbm9ybWFsaXplSWQoZnVsbFBhdGgpKSB7XG4gICAgICAgIGlmIChpZFswXSA9PSAnIycpIHtcbiAgICAgICAgICBpZiAobG9jYWxSZWZzW2lkXSAmJiAhZXF1YWwoc2NoLCBsb2NhbFJlZnNbaWRdKSlcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignaWQgXCInICsgaWQgKyAnXCIgcmVzb2x2ZXMgdG8gbW9yZSB0aGFuIG9uZSBzY2hlbWEnKTtcbiAgICAgICAgICBsb2NhbFJlZnNbaWRdID0gc2NoO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHNlbGYuX3JlZnNbaWRdID0gZnVsbFBhdGg7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgYmFzZUlkc1tqc29uUHRyXSA9IGJhc2VJZDtcbiAgICBmdWxsUGF0aHNbanNvblB0cl0gPSBmdWxsUGF0aDtcbiAgfSk7XG5cbiAgcmV0dXJuIGxvY2FsUmVmcztcbn1cbiIsICIndXNlIHN0cmljdCc7XG5cbnZhciByZXNvbHZlID0gcmVxdWlyZSgnLi9yZXNvbHZlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBWYWxpZGF0aW9uOiBlcnJvclN1YmNsYXNzKFZhbGlkYXRpb25FcnJvciksXG4gIE1pc3NpbmdSZWY6IGVycm9yU3ViY2xhc3MoTWlzc2luZ1JlZkVycm9yKVxufTtcblxuXG5mdW5jdGlvbiBWYWxpZGF0aW9uRXJyb3IoZXJyb3JzKSB7XG4gIHRoaXMubWVzc2FnZSA9ICd2YWxpZGF0aW9uIGZhaWxlZCc7XG4gIHRoaXMuZXJyb3JzID0gZXJyb3JzO1xuICB0aGlzLmFqdiA9IHRoaXMudmFsaWRhdGlvbiA9IHRydWU7XG59XG5cblxuTWlzc2luZ1JlZkVycm9yLm1lc3NhZ2UgPSBmdW5jdGlvbiAoYmFzZUlkLCByZWYpIHtcbiAgcmV0dXJuICdjYW5cXCd0IHJlc29sdmUgcmVmZXJlbmNlICcgKyByZWYgKyAnIGZyb20gaWQgJyArIGJhc2VJZDtcbn07XG5cblxuZnVuY3Rpb24gTWlzc2luZ1JlZkVycm9yKGJhc2VJZCwgcmVmLCBtZXNzYWdlKSB7XG4gIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2UgfHwgTWlzc2luZ1JlZkVycm9yLm1lc3NhZ2UoYmFzZUlkLCByZWYpO1xuICB0aGlzLm1pc3NpbmdSZWYgPSByZXNvbHZlLnVybChiYXNlSWQsIHJlZik7XG4gIHRoaXMubWlzc2luZ1NjaGVtYSA9IHJlc29sdmUubm9ybWFsaXplSWQocmVzb2x2ZS5mdWxsUGF0aCh0aGlzLm1pc3NpbmdSZWYpKTtcbn1cblxuXG5mdW5jdGlvbiBlcnJvclN1YmNsYXNzKFN1YmNsYXNzKSB7XG4gIFN1YmNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoRXJyb3IucHJvdG90eXBlKTtcbiAgU3ViY2xhc3MucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gU3ViY2xhc3M7XG4gIHJldHVybiBTdWJjbGFzcztcbn1cbiIsICIndXNlIHN0cmljdCc7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGRhdGEsIG9wdHMpIHtcbiAgICBpZiAoIW9wdHMpIG9wdHMgPSB7fTtcbiAgICBpZiAodHlwZW9mIG9wdHMgPT09ICdmdW5jdGlvbicpIG9wdHMgPSB7IGNtcDogb3B0cyB9O1xuICAgIHZhciBjeWNsZXMgPSAodHlwZW9mIG9wdHMuY3ljbGVzID09PSAnYm9vbGVhbicpID8gb3B0cy5jeWNsZXMgOiBmYWxzZTtcblxuICAgIHZhciBjbXAgPSBvcHRzLmNtcCAmJiAoZnVuY3Rpb24gKGYpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChub2RlKSB7XG4gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gKGEsIGIpIHtcbiAgICAgICAgICAgICAgICB2YXIgYW9iaiA9IHsga2V5OiBhLCB2YWx1ZTogbm9kZVthXSB9O1xuICAgICAgICAgICAgICAgIHZhciBib2JqID0geyBrZXk6IGIsIHZhbHVlOiBub2RlW2JdIH07XG4gICAgICAgICAgICAgICAgcmV0dXJuIGYoYW9iaiwgYm9iaik7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9O1xuICAgIH0pKG9wdHMuY21wKTtcblxuICAgIHZhciBzZWVuID0gW107XG4gICAgcmV0dXJuIChmdW5jdGlvbiBzdHJpbmdpZnkgKG5vZGUpIHtcbiAgICAgICAgaWYgKG5vZGUgJiYgbm9kZS50b0pTT04gJiYgdHlwZW9mIG5vZGUudG9KU09OID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBub2RlID0gbm9kZS50b0pTT04oKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChub2RlID09PSB1bmRlZmluZWQpIHJldHVybjtcbiAgICAgICAgaWYgKHR5cGVvZiBub2RlID09ICdudW1iZXInKSByZXR1cm4gaXNGaW5pdGUobm9kZSkgPyAnJyArIG5vZGUgOiAnbnVsbCc7XG4gICAgICAgIGlmICh0eXBlb2Ygbm9kZSAhPT0gJ29iamVjdCcpIHJldHVybiBKU09OLnN0cmluZ2lmeShub2RlKTtcblxuICAgICAgICB2YXIgaSwgb3V0O1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShub2RlKSkge1xuICAgICAgICAgICAgb3V0ID0gJ1snO1xuICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IG5vZGUubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBpZiAoaSkgb3V0ICs9ICcsJztcbiAgICAgICAgICAgICAgICBvdXQgKz0gc3RyaW5naWZ5KG5vZGVbaV0pIHx8ICdudWxsJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBvdXQgKyAnXSc7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobm9kZSA9PT0gbnVsbCkgcmV0dXJuICdudWxsJztcblxuICAgICAgICBpZiAoc2Vlbi5pbmRleE9mKG5vZGUpICE9PSAtMSkge1xuICAgICAgICAgICAgaWYgKGN5Y2xlcykgcmV0dXJuIEpTT04uc3RyaW5naWZ5KCdfX2N5Y2xlX18nKTtcbiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0NvbnZlcnRpbmcgY2lyY3VsYXIgc3RydWN0dXJlIHRvIEpTT04nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBzZWVuSW5kZXggPSBzZWVuLnB1c2gobm9kZSkgLSAxO1xuICAgICAgICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKG5vZGUpLnNvcnQoY21wICYmIGNtcChub2RlKSk7XG4gICAgICAgIG91dCA9ICcnO1xuICAgICAgICBmb3IgKGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdmFyIGtleSA9IGtleXNbaV07XG4gICAgICAgICAgICB2YXIgdmFsdWUgPSBzdHJpbmdpZnkobm9kZVtrZXldKTtcblxuICAgICAgICAgICAgaWYgKCF2YWx1ZSkgY29udGludWU7XG4gICAgICAgICAgICBpZiAob3V0KSBvdXQgKz0gJywnO1xuICAgICAgICAgICAgb3V0ICs9IEpTT04uc3RyaW5naWZ5KGtleSkgKyAnOicgKyB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgICBzZWVuLnNwbGljZShzZWVuSW5kZXgsIDEpO1xuICAgICAgICByZXR1cm4gJ3snICsgb3V0ICsgJ30nO1xuICAgIH0pKGRhdGEpO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGdlbmVyYXRlX3ZhbGlkYXRlKGl0LCAka2V5d29yZCwgJHJ1bGVUeXBlKSB7XG4gIHZhciBvdXQgPSAnJztcbiAgdmFyICRhc3luYyA9IGl0LnNjaGVtYS4kYXN5bmMgPT09IHRydWUsXG4gICAgJHJlZktleXdvcmRzID0gaXQudXRpbC5zY2hlbWFIYXNSdWxlc0V4Y2VwdChpdC5zY2hlbWEsIGl0LlJVTEVTLmFsbCwgJyRyZWYnKSxcbiAgICAkaWQgPSBpdC5zZWxmLl9nZXRJZChpdC5zY2hlbWEpO1xuICBpZiAoaXQub3B0cy5zdHJpY3RLZXl3b3Jkcykge1xuICAgIHZhciAkdW5rbm93bkt3ZCA9IGl0LnV0aWwuc2NoZW1hVW5rbm93blJ1bGVzKGl0LnNjaGVtYSwgaXQuUlVMRVMua2V5d29yZHMpO1xuICAgIGlmICgkdW5rbm93bkt3ZCkge1xuICAgICAgdmFyICRrZXl3b3Jkc01zZyA9ICd1bmtub3duIGtleXdvcmQ6ICcgKyAkdW5rbm93bkt3ZDtcbiAgICAgIGlmIChpdC5vcHRzLnN0cmljdEtleXdvcmRzID09PSAnbG9nJykgaXQubG9nZ2VyLndhcm4oJGtleXdvcmRzTXNnKTtcbiAgICAgIGVsc2UgdGhyb3cgbmV3IEVycm9yKCRrZXl3b3Jkc01zZyk7XG4gICAgfVxuICB9XG4gIGlmIChpdC5pc1RvcCkge1xuICAgIG91dCArPSAnIHZhciB2YWxpZGF0ZSA9ICc7XG4gICAgaWYgKCRhc3luYykge1xuICAgICAgaXQuYXN5bmMgPSB0cnVlO1xuICAgICAgb3V0ICs9ICdhc3luYyAnO1xuICAgIH1cbiAgICBvdXQgKz0gJ2Z1bmN0aW9uKGRhdGEsIGRhdGFQYXRoLCBwYXJlbnREYXRhLCBwYXJlbnREYXRhUHJvcGVydHksIHJvb3REYXRhKSB7IFxcJ3VzZSBzdHJpY3RcXCc7ICc7XG4gICAgaWYgKCRpZCAmJiAoaXQub3B0cy5zb3VyY2VDb2RlIHx8IGl0Lm9wdHMucHJvY2Vzc0NvZGUpKSB7XG4gICAgICBvdXQgKz0gJyAnICsgKCcvXFwqIyBzb3VyY2VVUkw9JyArICRpZCArICcgKi8nKSArICcgJztcbiAgICB9XG4gIH1cbiAgaWYgKHR5cGVvZiBpdC5zY2hlbWEgPT0gJ2Jvb2xlYW4nIHx8ICEoJHJlZktleXdvcmRzIHx8IGl0LnNjaGVtYS4kcmVmKSkge1xuICAgIHZhciAka2V5d29yZCA9ICdmYWxzZSBzY2hlbWEnO1xuICAgIHZhciAkbHZsID0gaXQubGV2ZWw7XG4gICAgdmFyICRkYXRhTHZsID0gaXQuZGF0YUxldmVsO1xuICAgIHZhciAkc2NoZW1hID0gaXQuc2NoZW1hWyRrZXl3b3JkXTtcbiAgICB2YXIgJHNjaGVtYVBhdGggPSBpdC5zY2hlbWFQYXRoICsgaXQudXRpbC5nZXRQcm9wZXJ0eSgka2V5d29yZCk7XG4gICAgdmFyICRlcnJTY2hlbWFQYXRoID0gaXQuZXJyU2NoZW1hUGF0aCArICcvJyArICRrZXl3b3JkO1xuICAgIHZhciAkYnJlYWtPbkVycm9yID0gIWl0Lm9wdHMuYWxsRXJyb3JzO1xuICAgIHZhciAkZXJyb3JLZXl3b3JkO1xuICAgIHZhciAkZGF0YSA9ICdkYXRhJyArICgkZGF0YUx2bCB8fCAnJyk7XG4gICAgdmFyICR2YWxpZCA9ICd2YWxpZCcgKyAkbHZsO1xuICAgIGlmIChpdC5zY2hlbWEgPT09IGZhbHNlKSB7XG4gICAgICBpZiAoaXQuaXNUb3ApIHtcbiAgICAgICAgJGJyZWFrT25FcnJvciA9IHRydWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvdXQgKz0gJyB2YXIgJyArICgkdmFsaWQpICsgJyA9IGZhbHNlOyAnO1xuICAgICAgfVxuICAgICAgdmFyICQkb3V0U3RhY2sgPSAkJG91dFN0YWNrIHx8IFtdO1xuICAgICAgJCRvdXRTdGFjay5wdXNoKG91dCk7XG4gICAgICBvdXQgPSAnJzsgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICAgIGlmIChpdC5jcmVhdGVFcnJvcnMgIT09IGZhbHNlKSB7XG4gICAgICAgIG91dCArPSAnIHsga2V5d29yZDogXFwnJyArICgkZXJyb3JLZXl3b3JkIHx8ICdmYWxzZSBzY2hlbWEnKSArICdcXCcgLCBkYXRhUGF0aDogKGRhdGFQYXRoIHx8IFxcJ1xcJykgKyAnICsgKGl0LmVycm9yUGF0aCkgKyAnICwgc2NoZW1hUGF0aDogJyArIChpdC51dGlsLnRvUXVvdGVkU3RyaW5nKCRlcnJTY2hlbWFQYXRoKSkgKyAnICwgcGFyYW1zOiB7fSAnO1xuICAgICAgICBpZiAoaXQub3B0cy5tZXNzYWdlcyAhPT0gZmFsc2UpIHtcbiAgICAgICAgICBvdXQgKz0gJyAsIG1lc3NhZ2U6IFxcJ2Jvb2xlYW4gc2NoZW1hIGlzIGZhbHNlXFwnICc7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGl0Lm9wdHMudmVyYm9zZSkge1xuICAgICAgICAgIG91dCArPSAnICwgc2NoZW1hOiBmYWxzZSAsIHBhcmVudFNjaGVtYTogdmFsaWRhdGUuc2NoZW1hJyArIChpdC5zY2hlbWFQYXRoKSArICcgLCBkYXRhOiAnICsgKCRkYXRhKSArICcgJztcbiAgICAgICAgfVxuICAgICAgICBvdXQgKz0gJyB9ICc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvdXQgKz0gJyB7fSAnO1xuICAgICAgfVxuICAgICAgdmFyIF9fZXJyID0gb3V0O1xuICAgICAgb3V0ID0gJCRvdXRTdGFjay5wb3AoKTtcbiAgICAgIGlmICghaXQuY29tcG9zaXRlUnVsZSAmJiAkYnJlYWtPbkVycm9yKSB7XG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAgICBpZiAoaXQuYXN5bmMpIHtcbiAgICAgICAgICBvdXQgKz0gJyB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKFsnICsgKF9fZXJyKSArICddKTsgJztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBvdXQgKz0gJyB2YWxpZGF0ZS5lcnJvcnMgPSBbJyArIChfX2VycikgKyAnXTsgcmV0dXJuIGZhbHNlOyAnO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvdXQgKz0gJyB2YXIgZXJyID0gJyArIChfX2VycikgKyAnOyAgaWYgKHZFcnJvcnMgPT09IG51bGwpIHZFcnJvcnMgPSBbZXJyXTsgZWxzZSB2RXJyb3JzLnB1c2goZXJyKTsgZXJyb3JzKys7ICc7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChpdC5pc1RvcCkge1xuICAgICAgICBpZiAoJGFzeW5jKSB7XG4gICAgICAgICAgb3V0ICs9ICcgcmV0dXJuIGRhdGE7ICc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgb3V0ICs9ICcgdmFsaWRhdGUuZXJyb3JzID0gbnVsbDsgcmV0dXJuIHRydWU7ICc7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG91dCArPSAnIHZhciAnICsgKCR2YWxpZCkgKyAnID0gdHJ1ZTsgJztcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGl0LmlzVG9wKSB7XG4gICAgICBvdXQgKz0gJyB9OyByZXR1cm4gdmFsaWRhdGU7ICc7XG4gICAgfVxuICAgIHJldHVybiBvdXQ7XG4gIH1cbiAgaWYgKGl0LmlzVG9wKSB7XG4gICAgdmFyICR0b3AgPSBpdC5pc1RvcCxcbiAgICAgICRsdmwgPSBpdC5sZXZlbCA9IDAsXG4gICAgICAkZGF0YUx2bCA9IGl0LmRhdGFMZXZlbCA9IDAsXG4gICAgICAkZGF0YSA9ICdkYXRhJztcbiAgICBpdC5yb290SWQgPSBpdC5yZXNvbHZlLmZ1bGxQYXRoKGl0LnNlbGYuX2dldElkKGl0LnJvb3Quc2NoZW1hKSk7XG4gICAgaXQuYmFzZUlkID0gaXQuYmFzZUlkIHx8IGl0LnJvb3RJZDtcbiAgICBkZWxldGUgaXQuaXNUb3A7XG4gICAgaXQuZGF0YVBhdGhBcnIgPSBbXCJcIl07XG4gICAgaWYgKGl0LnNjaGVtYS5kZWZhdWx0ICE9PSB1bmRlZmluZWQgJiYgaXQub3B0cy51c2VEZWZhdWx0cyAmJiBpdC5vcHRzLnN0cmljdERlZmF1bHRzKSB7XG4gICAgICB2YXIgJGRlZmF1bHRNc2cgPSAnZGVmYXVsdCBpcyBpZ25vcmVkIGluIHRoZSBzY2hlbWEgcm9vdCc7XG4gICAgICBpZiAoaXQub3B0cy5zdHJpY3REZWZhdWx0cyA9PT0gJ2xvZycpIGl0LmxvZ2dlci53YXJuKCRkZWZhdWx0TXNnKTtcbiAgICAgIGVsc2UgdGhyb3cgbmV3IEVycm9yKCRkZWZhdWx0TXNnKTtcbiAgICB9XG4gICAgb3V0ICs9ICcgdmFyIHZFcnJvcnMgPSBudWxsOyAnO1xuICAgIG91dCArPSAnIHZhciBlcnJvcnMgPSAwOyAgICAgJztcbiAgICBvdXQgKz0gJyBpZiAocm9vdERhdGEgPT09IHVuZGVmaW5lZCkgcm9vdERhdGEgPSBkYXRhOyAnO1xuICB9IGVsc2Uge1xuICAgIHZhciAkbHZsID0gaXQubGV2ZWwsXG4gICAgICAkZGF0YUx2bCA9IGl0LmRhdGFMZXZlbCxcbiAgICAgICRkYXRhID0gJ2RhdGEnICsgKCRkYXRhTHZsIHx8ICcnKTtcbiAgICBpZiAoJGlkKSBpdC5iYXNlSWQgPSBpdC5yZXNvbHZlLnVybChpdC5iYXNlSWQsICRpZCk7XG4gICAgaWYgKCRhc3luYyAmJiAhaXQuYXN5bmMpIHRocm93IG5ldyBFcnJvcignYXN5bmMgc2NoZW1hIGluIHN5bmMgc2NoZW1hJyk7XG4gICAgb3V0ICs9ICcgdmFyIGVycnNfJyArICgkbHZsKSArICcgPSBlcnJvcnM7JztcbiAgfVxuICB2YXIgJHZhbGlkID0gJ3ZhbGlkJyArICRsdmwsXG4gICAgJGJyZWFrT25FcnJvciA9ICFpdC5vcHRzLmFsbEVycm9ycyxcbiAgICAkY2xvc2luZ0JyYWNlczEgPSAnJyxcbiAgICAkY2xvc2luZ0JyYWNlczIgPSAnJztcbiAgdmFyICRlcnJvcktleXdvcmQ7XG4gIHZhciAkdHlwZVNjaGVtYSA9IGl0LnNjaGVtYS50eXBlLFxuICAgICR0eXBlSXNBcnJheSA9IEFycmF5LmlzQXJyYXkoJHR5cGVTY2hlbWEpO1xuICBpZiAoJHR5cGVTY2hlbWEgJiYgaXQub3B0cy5udWxsYWJsZSAmJiBpdC5zY2hlbWEubnVsbGFibGUgPT09IHRydWUpIHtcbiAgICBpZiAoJHR5cGVJc0FycmF5KSB7XG4gICAgICBpZiAoJHR5cGVTY2hlbWEuaW5kZXhPZignbnVsbCcpID09IC0xKSAkdHlwZVNjaGVtYSA9ICR0eXBlU2NoZW1hLmNvbmNhdCgnbnVsbCcpO1xuICAgIH0gZWxzZSBpZiAoJHR5cGVTY2hlbWEgIT0gJ251bGwnKSB7XG4gICAgICAkdHlwZVNjaGVtYSA9IFskdHlwZVNjaGVtYSwgJ251bGwnXTtcbiAgICAgICR0eXBlSXNBcnJheSA9IHRydWU7XG4gICAgfVxuICB9XG4gIGlmICgkdHlwZUlzQXJyYXkgJiYgJHR5cGVTY2hlbWEubGVuZ3RoID09IDEpIHtcbiAgICAkdHlwZVNjaGVtYSA9ICR0eXBlU2NoZW1hWzBdO1xuICAgICR0eXBlSXNBcnJheSA9IGZhbHNlO1xuICB9XG4gIGlmIChpdC5zY2hlbWEuJHJlZiAmJiAkcmVmS2V5d29yZHMpIHtcbiAgICBpZiAoaXQub3B0cy5leHRlbmRSZWZzID09ICdmYWlsJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCckcmVmOiB2YWxpZGF0aW9uIGtleXdvcmRzIHVzZWQgaW4gc2NoZW1hIGF0IHBhdGggXCInICsgaXQuZXJyU2NoZW1hUGF0aCArICdcIiAoc2VlIG9wdGlvbiBleHRlbmRSZWZzKScpO1xuICAgIH0gZWxzZSBpZiAoaXQub3B0cy5leHRlbmRSZWZzICE9PSB0cnVlKSB7XG4gICAgICAkcmVmS2V5d29yZHMgPSBmYWxzZTtcbiAgICAgIGl0LmxvZ2dlci53YXJuKCckcmVmOiBrZXl3b3JkcyBpZ25vcmVkIGluIHNjaGVtYSBhdCBwYXRoIFwiJyArIGl0LmVyclNjaGVtYVBhdGggKyAnXCInKTtcbiAgICB9XG4gIH1cbiAgaWYgKGl0LnNjaGVtYS4kY29tbWVudCAmJiBpdC5vcHRzLiRjb21tZW50KSB7XG4gICAgb3V0ICs9ICcgJyArIChpdC5SVUxFUy5hbGwuJGNvbW1lbnQuY29kZShpdCwgJyRjb21tZW50JykpO1xuICB9XG4gIGlmICgkdHlwZVNjaGVtYSkge1xuICAgIGlmIChpdC5vcHRzLmNvZXJjZVR5cGVzKSB7XG4gICAgICB2YXIgJGNvZXJjZVRvVHlwZXMgPSBpdC51dGlsLmNvZXJjZVRvVHlwZXMoaXQub3B0cy5jb2VyY2VUeXBlcywgJHR5cGVTY2hlbWEpO1xuICAgIH1cbiAgICB2YXIgJHJ1bGVzR3JvdXAgPSBpdC5SVUxFUy50eXBlc1skdHlwZVNjaGVtYV07XG4gICAgaWYgKCRjb2VyY2VUb1R5cGVzIHx8ICR0eXBlSXNBcnJheSB8fCAkcnVsZXNHcm91cCA9PT0gdHJ1ZSB8fCAoJHJ1bGVzR3JvdXAgJiYgISRzaG91bGRVc2VHcm91cCgkcnVsZXNHcm91cCkpKSB7XG4gICAgICB2YXIgJHNjaGVtYVBhdGggPSBpdC5zY2hlbWFQYXRoICsgJy50eXBlJyxcbiAgICAgICAgJGVyclNjaGVtYVBhdGggPSBpdC5lcnJTY2hlbWFQYXRoICsgJy90eXBlJztcbiAgICAgIHZhciAkc2NoZW1hUGF0aCA9IGl0LnNjaGVtYVBhdGggKyAnLnR5cGUnLFxuICAgICAgICAkZXJyU2NoZW1hUGF0aCA9IGl0LmVyclNjaGVtYVBhdGggKyAnL3R5cGUnLFxuICAgICAgICAkbWV0aG9kID0gJHR5cGVJc0FycmF5ID8gJ2NoZWNrRGF0YVR5cGVzJyA6ICdjaGVja0RhdGFUeXBlJztcbiAgICAgIG91dCArPSAnIGlmICgnICsgKGl0LnV0aWxbJG1ldGhvZF0oJHR5cGVTY2hlbWEsICRkYXRhLCBpdC5vcHRzLnN0cmljdE51bWJlcnMsIHRydWUpKSArICcpIHsgJztcbiAgICAgIGlmICgkY29lcmNlVG9UeXBlcykge1xuICAgICAgICB2YXIgJGRhdGFUeXBlID0gJ2RhdGFUeXBlJyArICRsdmwsXG4gICAgICAgICAgJGNvZXJjZWQgPSAnY29lcmNlZCcgKyAkbHZsO1xuICAgICAgICBvdXQgKz0gJyB2YXIgJyArICgkZGF0YVR5cGUpICsgJyA9IHR5cGVvZiAnICsgKCRkYXRhKSArICc7IHZhciAnICsgKCRjb2VyY2VkKSArICcgPSB1bmRlZmluZWQ7ICc7XG4gICAgICAgIGlmIChpdC5vcHRzLmNvZXJjZVR5cGVzID09ICdhcnJheScpIHtcbiAgICAgICAgICBvdXQgKz0gJyBpZiAoJyArICgkZGF0YVR5cGUpICsgJyA9PSBcXCdvYmplY3RcXCcgJiYgQXJyYXkuaXNBcnJheSgnICsgKCRkYXRhKSArICcpICYmICcgKyAoJGRhdGEpICsgJy5sZW5ndGggPT0gMSkgeyAnICsgKCRkYXRhKSArICcgPSAnICsgKCRkYXRhKSArICdbMF07ICcgKyAoJGRhdGFUeXBlKSArICcgPSB0eXBlb2YgJyArICgkZGF0YSkgKyAnOyBpZiAoJyArIChpdC51dGlsLmNoZWNrRGF0YVR5cGUoaXQuc2NoZW1hLnR5cGUsICRkYXRhLCBpdC5vcHRzLnN0cmljdE51bWJlcnMpKSArICcpICcgKyAoJGNvZXJjZWQpICsgJyA9ICcgKyAoJGRhdGEpICsgJzsgfSAnO1xuICAgICAgICB9XG4gICAgICAgIG91dCArPSAnIGlmICgnICsgKCRjb2VyY2VkKSArICcgIT09IHVuZGVmaW5lZCkgOyAnO1xuICAgICAgICB2YXIgYXJyMSA9ICRjb2VyY2VUb1R5cGVzO1xuICAgICAgICBpZiAoYXJyMSkge1xuICAgICAgICAgIHZhciAkdHlwZSwgJGkgPSAtMSxcbiAgICAgICAgICAgIGwxID0gYXJyMS5sZW5ndGggLSAxO1xuICAgICAgICAgIHdoaWxlICgkaSA8IGwxKSB7XG4gICAgICAgICAgICAkdHlwZSA9IGFycjFbJGkgKz0gMV07XG4gICAgICAgICAgICBpZiAoJHR5cGUgPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgb3V0ICs9ICcgZWxzZSBpZiAoJyArICgkZGF0YVR5cGUpICsgJyA9PSBcXCdudW1iZXJcXCcgfHwgJyArICgkZGF0YVR5cGUpICsgJyA9PSBcXCdib29sZWFuXFwnKSAnICsgKCRjb2VyY2VkKSArICcgPSBcXCdcXCcgKyAnICsgKCRkYXRhKSArICc7IGVsc2UgaWYgKCcgKyAoJGRhdGEpICsgJyA9PT0gbnVsbCkgJyArICgkY29lcmNlZCkgKyAnID0gXFwnXFwnOyAnO1xuICAgICAgICAgICAgfSBlbHNlIGlmICgkdHlwZSA9PSAnbnVtYmVyJyB8fCAkdHlwZSA9PSAnaW50ZWdlcicpIHtcbiAgICAgICAgICAgICAgb3V0ICs9ICcgZWxzZSBpZiAoJyArICgkZGF0YVR5cGUpICsgJyA9PSBcXCdib29sZWFuXFwnIHx8ICcgKyAoJGRhdGEpICsgJyA9PT0gbnVsbCB8fCAoJyArICgkZGF0YVR5cGUpICsgJyA9PSBcXCdzdHJpbmdcXCcgJiYgJyArICgkZGF0YSkgKyAnICYmICcgKyAoJGRhdGEpICsgJyA9PSArJyArICgkZGF0YSkgKyAnICc7XG4gICAgICAgICAgICAgIGlmICgkdHlwZSA9PSAnaW50ZWdlcicpIHtcbiAgICAgICAgICAgICAgICBvdXQgKz0gJyAmJiAhKCcgKyAoJGRhdGEpICsgJyAlIDEpJztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBvdXQgKz0gJykpICcgKyAoJGNvZXJjZWQpICsgJyA9ICsnICsgKCRkYXRhKSArICc7ICc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKCR0eXBlID09ICdib29sZWFuJykge1xuICAgICAgICAgICAgICBvdXQgKz0gJyBlbHNlIGlmICgnICsgKCRkYXRhKSArICcgPT09IFxcJ2ZhbHNlXFwnIHx8ICcgKyAoJGRhdGEpICsgJyA9PT0gMCB8fCAnICsgKCRkYXRhKSArICcgPT09IG51bGwpICcgKyAoJGNvZXJjZWQpICsgJyA9IGZhbHNlOyBlbHNlIGlmICgnICsgKCRkYXRhKSArICcgPT09IFxcJ3RydWVcXCcgfHwgJyArICgkZGF0YSkgKyAnID09PSAxKSAnICsgKCRjb2VyY2VkKSArICcgPSB0cnVlOyAnO1xuICAgICAgICAgICAgfSBlbHNlIGlmICgkdHlwZSA9PSAnbnVsbCcpIHtcbiAgICAgICAgICAgICAgb3V0ICs9ICcgZWxzZSBpZiAoJyArICgkZGF0YSkgKyAnID09PSBcXCdcXCcgfHwgJyArICgkZGF0YSkgKyAnID09PSAwIHx8ICcgKyAoJGRhdGEpICsgJyA9PT0gZmFsc2UpICcgKyAoJGNvZXJjZWQpICsgJyA9IG51bGw7ICc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGl0Lm9wdHMuY29lcmNlVHlwZXMgPT0gJ2FycmF5JyAmJiAkdHlwZSA9PSAnYXJyYXknKSB7XG4gICAgICAgICAgICAgIG91dCArPSAnIGVsc2UgaWYgKCcgKyAoJGRhdGFUeXBlKSArICcgPT0gXFwnc3RyaW5nXFwnIHx8ICcgKyAoJGRhdGFUeXBlKSArICcgPT0gXFwnbnVtYmVyXFwnIHx8ICcgKyAoJGRhdGFUeXBlKSArICcgPT0gXFwnYm9vbGVhblxcJyB8fCAnICsgKCRkYXRhKSArICcgPT0gbnVsbCkgJyArICgkY29lcmNlZCkgKyAnID0gWycgKyAoJGRhdGEpICsgJ107ICc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIG91dCArPSAnIGVsc2UgeyAgICc7XG4gICAgICAgIHZhciAkJG91dFN0YWNrID0gJCRvdXRTdGFjayB8fCBbXTtcbiAgICAgICAgJCRvdXRTdGFjay5wdXNoKG91dCk7XG4gICAgICAgIG91dCA9ICcnOyAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgICAgICBpZiAoaXQuY3JlYXRlRXJyb3JzICE9PSBmYWxzZSkge1xuICAgICAgICAgIG91dCArPSAnIHsga2V5d29yZDogXFwnJyArICgkZXJyb3JLZXl3b3JkIHx8ICd0eXBlJykgKyAnXFwnICwgZGF0YVBhdGg6IChkYXRhUGF0aCB8fCBcXCdcXCcpICsgJyArIChpdC5lcnJvclBhdGgpICsgJyAsIHNjaGVtYVBhdGg6ICcgKyAoaXQudXRpbC50b1F1b3RlZFN0cmluZygkZXJyU2NoZW1hUGF0aCkpICsgJyAsIHBhcmFtczogeyB0eXBlOiBcXCcnO1xuICAgICAgICAgIGlmICgkdHlwZUlzQXJyYXkpIHtcbiAgICAgICAgICAgIG91dCArPSAnJyArICgkdHlwZVNjaGVtYS5qb2luKFwiLFwiKSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG91dCArPSAnJyArICgkdHlwZVNjaGVtYSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIG91dCArPSAnXFwnIH0gJztcbiAgICAgICAgICBpZiAoaXQub3B0cy5tZXNzYWdlcyAhPT0gZmFsc2UpIHtcbiAgICAgICAgICAgIG91dCArPSAnICwgbWVzc2FnZTogXFwnc2hvdWxkIGJlICc7XG4gICAgICAgICAgICBpZiAoJHR5cGVJc0FycmF5KSB7XG4gICAgICAgICAgICAgIG91dCArPSAnJyArICgkdHlwZVNjaGVtYS5qb2luKFwiLFwiKSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBvdXQgKz0gJycgKyAoJHR5cGVTY2hlbWEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgb3V0ICs9ICdcXCcgJztcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGl0Lm9wdHMudmVyYm9zZSkge1xuICAgICAgICAgICAgb3V0ICs9ICcgLCBzY2hlbWE6IHZhbGlkYXRlLnNjaGVtYScgKyAoJHNjaGVtYVBhdGgpICsgJyAsIHBhcmVudFNjaGVtYTogdmFsaWRhdGUuc2NoZW1hJyArIChpdC5zY2hlbWFQYXRoKSArICcgLCBkYXRhOiAnICsgKCRkYXRhKSArICcgJztcbiAgICAgICAgICB9XG4gICAgICAgICAgb3V0ICs9ICcgfSAnO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG91dCArPSAnIHt9ICc7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIF9fZXJyID0gb3V0O1xuICAgICAgICBvdXQgPSAkJG91dFN0YWNrLnBvcCgpO1xuICAgICAgICBpZiAoIWl0LmNvbXBvc2l0ZVJ1bGUgJiYgJGJyZWFrT25FcnJvcikge1xuICAgICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAgICAgIGlmIChpdC5hc3luYykge1xuICAgICAgICAgICAgb3V0ICs9ICcgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihbJyArIChfX2VycikgKyAnXSk7ICc7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG91dCArPSAnIHZhbGlkYXRlLmVycm9ycyA9IFsnICsgKF9fZXJyKSArICddOyByZXR1cm4gZmFsc2U7ICc7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG91dCArPSAnIHZhciBlcnIgPSAnICsgKF9fZXJyKSArICc7ICBpZiAodkVycm9ycyA9PT0gbnVsbCkgdkVycm9ycyA9IFtlcnJdOyBlbHNlIHZFcnJvcnMucHVzaChlcnIpOyBlcnJvcnMrKzsgJztcbiAgICAgICAgfVxuICAgICAgICBvdXQgKz0gJyB9IGlmICgnICsgKCRjb2VyY2VkKSArICcgIT09IHVuZGVmaW5lZCkgeyAgJztcbiAgICAgICAgdmFyICRwYXJlbnREYXRhID0gJGRhdGFMdmwgPyAnZGF0YScgKyAoKCRkYXRhTHZsIC0gMSkgfHwgJycpIDogJ3BhcmVudERhdGEnLFxuICAgICAgICAgICRwYXJlbnREYXRhUHJvcGVydHkgPSAkZGF0YUx2bCA/IGl0LmRhdGFQYXRoQXJyWyRkYXRhTHZsXSA6ICdwYXJlbnREYXRhUHJvcGVydHknO1xuICAgICAgICBvdXQgKz0gJyAnICsgKCRkYXRhKSArICcgPSAnICsgKCRjb2VyY2VkKSArICc7ICc7XG4gICAgICAgIGlmICghJGRhdGFMdmwpIHtcbiAgICAgICAgICBvdXQgKz0gJ2lmICgnICsgKCRwYXJlbnREYXRhKSArICcgIT09IHVuZGVmaW5lZCknO1xuICAgICAgICB9XG4gICAgICAgIG91dCArPSAnICcgKyAoJHBhcmVudERhdGEpICsgJ1snICsgKCRwYXJlbnREYXRhUHJvcGVydHkpICsgJ10gPSAnICsgKCRjb2VyY2VkKSArICc7IH0gJztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciAkJG91dFN0YWNrID0gJCRvdXRTdGFjayB8fCBbXTtcbiAgICAgICAgJCRvdXRTdGFjay5wdXNoKG91dCk7XG4gICAgICAgIG91dCA9ICcnOyAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgICAgICBpZiAoaXQuY3JlYXRlRXJyb3JzICE9PSBmYWxzZSkge1xuICAgICAgICAgIG91dCArPSAnIHsga2V5d29yZDogXFwnJyArICgkZXJyb3JLZXl3b3JkIHx8ICd0eXBlJykgKyAnXFwnICwgZGF0YVBhdGg6IChkYXRhUGF0aCB8fCBcXCdcXCcpICsgJyArIChpdC5lcnJvclBhdGgpICsgJyAsIHNjaGVtYVBhdGg6ICcgKyAoaXQudXRpbC50b1F1b3RlZFN0cmluZygkZXJyU2NoZW1hUGF0aCkpICsgJyAsIHBhcmFtczogeyB0eXBlOiBcXCcnO1xuICAgICAgICAgIGlmICgkdHlwZUlzQXJyYXkpIHtcbiAgICAgICAgICAgIG91dCArPSAnJyArICgkdHlwZVNjaGVtYS5qb2luKFwiLFwiKSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG91dCArPSAnJyArICgkdHlwZVNjaGVtYSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIG91dCArPSAnXFwnIH0gJztcbiAgICAgICAgICBpZiAoaXQub3B0cy5tZXNzYWdlcyAhPT0gZmFsc2UpIHtcbiAgICAgICAgICAgIG91dCArPSAnICwgbWVzc2FnZTogXFwnc2hvdWxkIGJlICc7XG4gICAgICAgICAgICBpZiAoJHR5cGVJc0FycmF5KSB7XG4gICAgICAgICAgICAgIG91dCArPSAnJyArICgkdHlwZVNjaGVtYS5qb2luKFwiLFwiKSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBvdXQgKz0gJycgKyAoJHR5cGVTY2hlbWEpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgb3V0ICs9ICdcXCcgJztcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGl0Lm9wdHMudmVyYm9zZSkge1xuICAgICAgICAgICAgb3V0ICs9ICcgLCBzY2hlbWE6IHZhbGlkYXRlLnNjaGVtYScgKyAoJHNjaGVtYVBhdGgpICsgJyAsIHBhcmVudFNjaGVtYTogdmFsaWRhdGUuc2NoZW1hJyArIChpdC5zY2hlbWFQYXRoKSArICcgLCBkYXRhOiAnICsgKCRkYXRhKSArICcgJztcbiAgICAgICAgICB9XG4gICAgICAgICAgb3V0ICs9ICcgfSAnO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG91dCArPSAnIHt9ICc7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIF9fZXJyID0gb3V0O1xuICAgICAgICBvdXQgPSAkJG91dFN0YWNrLnBvcCgpO1xuICAgICAgICBpZiAoIWl0LmNvbXBvc2l0ZVJ1bGUgJiYgJGJyZWFrT25FcnJvcikge1xuICAgICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAgICAgIGlmIChpdC5hc3luYykge1xuICAgICAgICAgICAgb3V0ICs9ICcgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihbJyArIChfX2VycikgKyAnXSk7ICc7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG91dCArPSAnIHZhbGlkYXRlLmVycm9ycyA9IFsnICsgKF9fZXJyKSArICddOyByZXR1cm4gZmFsc2U7ICc7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG91dCArPSAnIHZhciBlcnIgPSAnICsgKF9fZXJyKSArICc7ICBpZiAodkVycm9ycyA9PT0gbnVsbCkgdkVycm9ycyA9IFtlcnJdOyBlbHNlIHZFcnJvcnMucHVzaChlcnIpOyBlcnJvcnMrKzsgJztcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgb3V0ICs9ICcgfSAnO1xuICAgIH1cbiAgfVxuICBpZiAoaXQuc2NoZW1hLiRyZWYgJiYgISRyZWZLZXl3b3Jkcykge1xuICAgIG91dCArPSAnICcgKyAoaXQuUlVMRVMuYWxsLiRyZWYuY29kZShpdCwgJyRyZWYnKSkgKyAnICc7XG4gICAgaWYgKCRicmVha09uRXJyb3IpIHtcbiAgICAgIG91dCArPSAnIH0gaWYgKGVycm9ycyA9PT0gJztcbiAgICAgIGlmICgkdG9wKSB7XG4gICAgICAgIG91dCArPSAnMCc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvdXQgKz0gJ2VycnNfJyArICgkbHZsKTtcbiAgICAgIH1cbiAgICAgIG91dCArPSAnKSB7ICc7XG4gICAgICAkY2xvc2luZ0JyYWNlczIgKz0gJ30nO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB2YXIgYXJyMiA9IGl0LlJVTEVTO1xuICAgIGlmIChhcnIyKSB7XG4gICAgICB2YXIgJHJ1bGVzR3JvdXAsIGkyID0gLTEsXG4gICAgICAgIGwyID0gYXJyMi5sZW5ndGggLSAxO1xuICAgICAgd2hpbGUgKGkyIDwgbDIpIHtcbiAgICAgICAgJHJ1bGVzR3JvdXAgPSBhcnIyW2kyICs9IDFdO1xuICAgICAgICBpZiAoJHNob3VsZFVzZUdyb3VwKCRydWxlc0dyb3VwKSkge1xuICAgICAgICAgIGlmICgkcnVsZXNHcm91cC50eXBlKSB7XG4gICAgICAgICAgICBvdXQgKz0gJyBpZiAoJyArIChpdC51dGlsLmNoZWNrRGF0YVR5cGUoJHJ1bGVzR3JvdXAudHlwZSwgJGRhdGEsIGl0Lm9wdHMuc3RyaWN0TnVtYmVycykpICsgJykgeyAnO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoaXQub3B0cy51c2VEZWZhdWx0cykge1xuICAgICAgICAgICAgaWYgKCRydWxlc0dyb3VwLnR5cGUgPT0gJ29iamVjdCcgJiYgaXQuc2NoZW1hLnByb3BlcnRpZXMpIHtcbiAgICAgICAgICAgICAgdmFyICRzY2hlbWEgPSBpdC5zY2hlbWEucHJvcGVydGllcyxcbiAgICAgICAgICAgICAgICAkc2NoZW1hS2V5cyA9IE9iamVjdC5rZXlzKCRzY2hlbWEpO1xuICAgICAgICAgICAgICB2YXIgYXJyMyA9ICRzY2hlbWFLZXlzO1xuICAgICAgICAgICAgICBpZiAoYXJyMykge1xuICAgICAgICAgICAgICAgIHZhciAkcHJvcGVydHlLZXksIGkzID0gLTEsXG4gICAgICAgICAgICAgICAgICBsMyA9IGFycjMubGVuZ3RoIC0gMTtcbiAgICAgICAgICAgICAgICB3aGlsZSAoaTMgPCBsMykge1xuICAgICAgICAgICAgICAgICAgJHByb3BlcnR5S2V5ID0gYXJyM1tpMyArPSAxXTtcbiAgICAgICAgICAgICAgICAgIHZhciAkc2NoID0gJHNjaGVtYVskcHJvcGVydHlLZXldO1xuICAgICAgICAgICAgICAgICAgaWYgKCRzY2guZGVmYXVsdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciAkcGFzc0RhdGEgPSAkZGF0YSArIGl0LnV0aWwuZ2V0UHJvcGVydHkoJHByb3BlcnR5S2V5KTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGl0LmNvbXBvc2l0ZVJ1bGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICBpZiAoaXQub3B0cy5zdHJpY3REZWZhdWx0cykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyICRkZWZhdWx0TXNnID0gJ2RlZmF1bHQgaXMgaWdub3JlZCBmb3I6ICcgKyAkcGFzc0RhdGE7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXQub3B0cy5zdHJpY3REZWZhdWx0cyA9PT0gJ2xvZycpIGl0LmxvZ2dlci53YXJuKCRkZWZhdWx0TXNnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgdGhyb3cgbmV3IEVycm9yKCRkZWZhdWx0TXNnKTtcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgb3V0ICs9ICcgaWYgKCcgKyAoJHBhc3NEYXRhKSArICcgPT09IHVuZGVmaW5lZCAnO1xuICAgICAgICAgICAgICAgICAgICAgIGlmIChpdC5vcHRzLnVzZURlZmF1bHRzID09ICdlbXB0eScpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG91dCArPSAnIHx8ICcgKyAoJHBhc3NEYXRhKSArICcgPT09IG51bGwgfHwgJyArICgkcGFzc0RhdGEpICsgJyA9PT0gXFwnXFwnICc7XG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgIG91dCArPSAnICkgJyArICgkcGFzc0RhdGEpICsgJyA9ICc7XG4gICAgICAgICAgICAgICAgICAgICAgaWYgKGl0Lm9wdHMudXNlRGVmYXVsdHMgPT0gJ3NoYXJlZCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG91dCArPSAnICcgKyAoaXQudXNlRGVmYXVsdCgkc2NoLmRlZmF1bHQpKSArICcgJztcbiAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgb3V0ICs9ICcgJyArIChKU09OLnN0cmluZ2lmeSgkc2NoLmRlZmF1bHQpKSArICcgJztcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgb3V0ICs9ICc7ICc7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAoJHJ1bGVzR3JvdXAudHlwZSA9PSAnYXJyYXknICYmIEFycmF5LmlzQXJyYXkoaXQuc2NoZW1hLml0ZW1zKSkge1xuICAgICAgICAgICAgICB2YXIgYXJyNCA9IGl0LnNjaGVtYS5pdGVtcztcbiAgICAgICAgICAgICAgaWYgKGFycjQpIHtcbiAgICAgICAgICAgICAgICB2YXIgJHNjaCwgJGkgPSAtMSxcbiAgICAgICAgICAgICAgICAgIGw0ID0gYXJyNC5sZW5ndGggLSAxO1xuICAgICAgICAgICAgICAgIHdoaWxlICgkaSA8IGw0KSB7XG4gICAgICAgICAgICAgICAgICAkc2NoID0gYXJyNFskaSArPSAxXTtcbiAgICAgICAgICAgICAgICAgIGlmICgkc2NoLmRlZmF1bHQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgJHBhc3NEYXRhID0gJGRhdGEgKyAnWycgKyAkaSArICddJztcbiAgICAgICAgICAgICAgICAgICAgaWYgKGl0LmNvbXBvc2l0ZVJ1bGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICBpZiAoaXQub3B0cy5zdHJpY3REZWZhdWx0cykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyICRkZWZhdWx0TXNnID0gJ2RlZmF1bHQgaXMgaWdub3JlZCBmb3I6ICcgKyAkcGFzc0RhdGE7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXQub3B0cy5zdHJpY3REZWZhdWx0cyA9PT0gJ2xvZycpIGl0LmxvZ2dlci53YXJuKCRkZWZhdWx0TXNnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgdGhyb3cgbmV3IEVycm9yKCRkZWZhdWx0TXNnKTtcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgb3V0ICs9ICcgaWYgKCcgKyAoJHBhc3NEYXRhKSArICcgPT09IHVuZGVmaW5lZCAnO1xuICAgICAgICAgICAgICAgICAgICAgIGlmIChpdC5vcHRzLnVzZURlZmF1bHRzID09ICdlbXB0eScpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG91dCArPSAnIHx8ICcgKyAoJHBhc3NEYXRhKSArICcgPT09IG51bGwgfHwgJyArICgkcGFzc0RhdGEpICsgJyA9PT0gXFwnXFwnICc7XG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgIG91dCArPSAnICkgJyArICgkcGFzc0RhdGEpICsgJyA9ICc7XG4gICAgICAgICAgICAgICAgICAgICAgaWYgKGl0Lm9wdHMudXNlRGVmYXVsdHMgPT0gJ3NoYXJlZCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG91dCArPSAnICcgKyAoaXQudXNlRGVmYXVsdCgkc2NoLmRlZmF1bHQpKSArICcgJztcbiAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgb3V0ICs9ICcgJyArIChKU09OLnN0cmluZ2lmeSgkc2NoLmRlZmF1bHQpKSArICcgJztcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgb3V0ICs9ICc7ICc7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgdmFyIGFycjUgPSAkcnVsZXNHcm91cC5ydWxlcztcbiAgICAgICAgICBpZiAoYXJyNSkge1xuICAgICAgICAgICAgdmFyICRydWxlLCBpNSA9IC0xLFxuICAgICAgICAgICAgICBsNSA9IGFycjUubGVuZ3RoIC0gMTtcbiAgICAgICAgICAgIHdoaWxlIChpNSA8IGw1KSB7XG4gICAgICAgICAgICAgICRydWxlID0gYXJyNVtpNSArPSAxXTtcbiAgICAgICAgICAgICAgaWYgKCRzaG91bGRVc2VSdWxlKCRydWxlKSkge1xuICAgICAgICAgICAgICAgIHZhciAkY29kZSA9ICRydWxlLmNvZGUoaXQsICRydWxlLmtleXdvcmQsICRydWxlc0dyb3VwLnR5cGUpO1xuICAgICAgICAgICAgICAgIGlmICgkY29kZSkge1xuICAgICAgICAgICAgICAgICAgb3V0ICs9ICcgJyArICgkY29kZSkgKyAnICc7XG4gICAgICAgICAgICAgICAgICBpZiAoJGJyZWFrT25FcnJvcikge1xuICAgICAgICAgICAgICAgICAgICAkY2xvc2luZ0JyYWNlczEgKz0gJ30nO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoJGJyZWFrT25FcnJvcikge1xuICAgICAgICAgICAgb3V0ICs9ICcgJyArICgkY2xvc2luZ0JyYWNlczEpICsgJyAnO1xuICAgICAgICAgICAgJGNsb3NpbmdCcmFjZXMxID0gJyc7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICgkcnVsZXNHcm91cC50eXBlKSB7XG4gICAgICAgICAgICBvdXQgKz0gJyB9ICc7XG4gICAgICAgICAgICBpZiAoJHR5cGVTY2hlbWEgJiYgJHR5cGVTY2hlbWEgPT09ICRydWxlc0dyb3VwLnR5cGUgJiYgISRjb2VyY2VUb1R5cGVzKSB7XG4gICAgICAgICAgICAgIG91dCArPSAnIGVsc2UgeyAnO1xuICAgICAgICAgICAgICB2YXIgJHNjaGVtYVBhdGggPSBpdC5zY2hlbWFQYXRoICsgJy50eXBlJyxcbiAgICAgICAgICAgICAgICAkZXJyU2NoZW1hUGF0aCA9IGl0LmVyclNjaGVtYVBhdGggKyAnL3R5cGUnO1xuICAgICAgICAgICAgICB2YXIgJCRvdXRTdGFjayA9ICQkb3V0U3RhY2sgfHwgW107XG4gICAgICAgICAgICAgICQkb3V0U3RhY2sucHVzaChvdXQpO1xuICAgICAgICAgICAgICBvdXQgPSAnJzsgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICAgICAgICAgICAgaWYgKGl0LmNyZWF0ZUVycm9ycyAhPT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICBvdXQgKz0gJyB7IGtleXdvcmQ6IFxcJycgKyAoJGVycm9yS2V5d29yZCB8fCAndHlwZScpICsgJ1xcJyAsIGRhdGFQYXRoOiAoZGF0YVBhdGggfHwgXFwnXFwnKSArICcgKyAoaXQuZXJyb3JQYXRoKSArICcgLCBzY2hlbWFQYXRoOiAnICsgKGl0LnV0aWwudG9RdW90ZWRTdHJpbmcoJGVyclNjaGVtYVBhdGgpKSArICcgLCBwYXJhbXM6IHsgdHlwZTogXFwnJztcbiAgICAgICAgICAgICAgICBpZiAoJHR5cGVJc0FycmF5KSB7XG4gICAgICAgICAgICAgICAgICBvdXQgKz0gJycgKyAoJHR5cGVTY2hlbWEuam9pbihcIixcIikpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICBvdXQgKz0gJycgKyAoJHR5cGVTY2hlbWEpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBvdXQgKz0gJ1xcJyB9ICc7XG4gICAgICAgICAgICAgICAgaWYgKGl0Lm9wdHMubWVzc2FnZXMgIT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgICBvdXQgKz0gJyAsIG1lc3NhZ2U6IFxcJ3Nob3VsZCBiZSAnO1xuICAgICAgICAgICAgICAgICAgaWYgKCR0eXBlSXNBcnJheSkge1xuICAgICAgICAgICAgICAgICAgICBvdXQgKz0gJycgKyAoJHR5cGVTY2hlbWEuam9pbihcIixcIikpO1xuICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgb3V0ICs9ICcnICsgKCR0eXBlU2NoZW1hKTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIG91dCArPSAnXFwnICc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChpdC5vcHRzLnZlcmJvc2UpIHtcbiAgICAgICAgICAgICAgICAgIG91dCArPSAnICwgc2NoZW1hOiB2YWxpZGF0ZS5zY2hlbWEnICsgKCRzY2hlbWFQYXRoKSArICcgLCBwYXJlbnRTY2hlbWE6IHZhbGlkYXRlLnNjaGVtYScgKyAoaXQuc2NoZW1hUGF0aCkgKyAnICwgZGF0YTogJyArICgkZGF0YSkgKyAnICc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIG91dCArPSAnIH0gJztcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBvdXQgKz0gJyB7fSAnO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHZhciBfX2VyciA9IG91dDtcbiAgICAgICAgICAgICAgb3V0ID0gJCRvdXRTdGFjay5wb3AoKTtcbiAgICAgICAgICAgICAgaWYgKCFpdC5jb21wb3NpdGVSdWxlICYmICRicmVha09uRXJyb3IpIHtcbiAgICAgICAgICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICAgICAgICAgICAgICBpZiAoaXQuYXN5bmMpIHtcbiAgICAgICAgICAgICAgICAgIG91dCArPSAnIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoWycgKyAoX19lcnIpICsgJ10pOyAnO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICBvdXQgKz0gJyB2YWxpZGF0ZS5lcnJvcnMgPSBbJyArIChfX2VycikgKyAnXTsgcmV0dXJuIGZhbHNlOyAnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBvdXQgKz0gJyB2YXIgZXJyID0gJyArIChfX2VycikgKyAnOyAgaWYgKHZFcnJvcnMgPT09IG51bGwpIHZFcnJvcnMgPSBbZXJyXTsgZWxzZSB2RXJyb3JzLnB1c2goZXJyKTsgZXJyb3JzKys7ICc7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgb3V0ICs9ICcgfSAnO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoJGJyZWFrT25FcnJvcikge1xuICAgICAgICAgICAgb3V0ICs9ICcgaWYgKGVycm9ycyA9PT0gJztcbiAgICAgICAgICAgIGlmICgkdG9wKSB7XG4gICAgICAgICAgICAgIG91dCArPSAnMCc7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBvdXQgKz0gJ2VycnNfJyArICgkbHZsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG91dCArPSAnKSB7ICc7XG4gICAgICAgICAgICAkY2xvc2luZ0JyYWNlczIgKz0gJ30nO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuICBpZiAoJGJyZWFrT25FcnJvcikge1xuICAgIG91dCArPSAnICcgKyAoJGNsb3NpbmdCcmFjZXMyKSArICcgJztcbiAgfVxuICBpZiAoJHRvcCkge1xuICAgIGlmICgkYXN5bmMpIHtcbiAgICAgIG91dCArPSAnIGlmIChlcnJvcnMgPT09IDApIHJldHVybiBkYXRhOyAgICAgICAgICAgJztcbiAgICAgIG91dCArPSAnIGVsc2UgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcih2RXJyb3JzKTsgJztcbiAgICB9IGVsc2Uge1xuICAgICAgb3V0ICs9ICcgdmFsaWRhdGUuZXJyb3JzID0gdkVycm9yczsgJztcbiAgICAgIG91dCArPSAnIHJldHVybiBlcnJvcnMgPT09IDA7ICAgICAgICc7XG4gICAgfVxuICAgIG91dCArPSAnIH07IHJldHVybiB2YWxpZGF0ZTsnO1xuICB9IGVsc2Uge1xuICAgIG91dCArPSAnIHZhciAnICsgKCR2YWxpZCkgKyAnID0gZXJyb3JzID09PSBlcnJzXycgKyAoJGx2bCkgKyAnOyc7XG4gIH1cblxuICBmdW5jdGlvbiAkc2hvdWxkVXNlR3JvdXAoJHJ1bGVzR3JvdXApIHtcbiAgICB2YXIgcnVsZXMgPSAkcnVsZXNHcm91cC5ydWxlcztcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJ1bGVzLmxlbmd0aDsgaSsrKVxuICAgICAgaWYgKCRzaG91bGRVc2VSdWxlKHJ1bGVzW2ldKSkgcmV0dXJuIHRydWU7XG4gIH1cblxuICBmdW5jdGlvbiAkc2hvdWxkVXNlUnVsZSgkcnVsZSkge1xuICAgIHJldHVybiBpdC5zY2hlbWFbJHJ1bGUua2V5d29yZF0gIT09IHVuZGVmaW5lZCB8fCAoJHJ1bGUuaW1wbGVtZW50cyAmJiAkcnVsZUltcGxlbWVudHNTb21lS2V5d29yZCgkcnVsZSkpO1xuICB9XG5cbiAgZnVuY3Rpb24gJHJ1bGVJbXBsZW1lbnRzU29tZUtleXdvcmQoJHJ1bGUpIHtcbiAgICB2YXIgaW1wbCA9ICRydWxlLmltcGxlbWVudHM7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBpbXBsLmxlbmd0aDsgaSsrKVxuICAgICAgaWYgKGl0LnNjaGVtYVtpbXBsW2ldXSAhPT0gdW5kZWZpbmVkKSByZXR1cm4gdHJ1ZTtcbiAgfVxuICByZXR1cm4gb3V0O1xufVxuIiwgIid1c2Ugc3RyaWN0JztcblxudmFyIHJlc29sdmUgPSByZXF1aXJlKCcuL3Jlc29sdmUnKVxuICAsIHV0aWwgPSByZXF1aXJlKCcuL3V0aWwnKVxuICAsIGVycm9yQ2xhc3NlcyA9IHJlcXVpcmUoJy4vZXJyb3JfY2xhc3NlcycpXG4gICwgc3RhYmxlU3RyaW5naWZ5ID0gcmVxdWlyZSgnZmFzdC1qc29uLXN0YWJsZS1zdHJpbmdpZnknKTtcblxudmFyIHZhbGlkYXRlR2VuZXJhdG9yID0gcmVxdWlyZSgnLi4vZG90anMvdmFsaWRhdGUnKTtcblxuLyoqXG4gKiBGdW5jdGlvbnMgYmVsb3cgYXJlIHVzZWQgaW5zaWRlIGNvbXBpbGVkIHZhbGlkYXRpb25zIGZ1bmN0aW9uXG4gKi9cblxudmFyIHVjczJsZW5ndGggPSB1dGlsLnVjczJsZW5ndGg7XG52YXIgZXF1YWwgPSByZXF1aXJlKCdmYXN0LWRlZXAtZXF1YWwnKTtcblxuLy8gdGhpcyBlcnJvciBpcyB0aHJvd24gYnkgYXN5bmMgc2NoZW1hcyB0byByZXR1cm4gdmFsaWRhdGlvbiBlcnJvcnMgdmlhIGV4Y2VwdGlvblxudmFyIFZhbGlkYXRpb25FcnJvciA9IGVycm9yQ2xhc3Nlcy5WYWxpZGF0aW9uO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGNvbXBpbGU7XG5cblxuLyoqXG4gKiBDb21waWxlcyBzY2hlbWEgdG8gdmFsaWRhdGlvbiBmdW5jdGlvblxuICogQHRoaXMgICBBanZcbiAqIEBwYXJhbSAge09iamVjdH0gc2NoZW1hIHNjaGVtYSBvYmplY3RcbiAqIEBwYXJhbSAge09iamVjdH0gcm9vdCBvYmplY3Qgd2l0aCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgcm9vdCBzY2hlbWEgZm9yIHRoaXMgc2NoZW1hXG4gKiBAcGFyYW0gIHtPYmplY3R9IGxvY2FsUmVmcyB0aGUgaGFzaCBvZiBsb2NhbCByZWZlcmVuY2VzIGluc2lkZSB0aGUgc2NoZW1hIChjcmVhdGVkIGJ5IHJlc29sdmUuaWQpLCB1c2VkIGZvciBpbmxpbmUgcmVzb2x1dGlvblxuICogQHBhcmFtICB7U3RyaW5nfSBiYXNlSWQgYmFzZSBJRCBmb3IgSURzIGluIHRoZSBzY2hlbWFcbiAqIEByZXR1cm4ge0Z1bmN0aW9ufSB2YWxpZGF0aW9uIGZ1bmN0aW9uXG4gKi9cbmZ1bmN0aW9uIGNvbXBpbGUoc2NoZW1hLCByb290LCBsb2NhbFJlZnMsIGJhc2VJZCkge1xuICAvKiBqc2hpbnQgdmFsaWR0aGlzOiB0cnVlLCBldmlsOiB0cnVlICovXG4gIC8qIGVzbGludCBuby1zaGFkb3c6IDAgKi9cbiAgdmFyIHNlbGYgPSB0aGlzXG4gICAgLCBvcHRzID0gdGhpcy5fb3B0c1xuICAgICwgcmVmVmFsID0gWyB1bmRlZmluZWQgXVxuICAgICwgcmVmcyA9IHt9XG4gICAgLCBwYXR0ZXJucyA9IFtdXG4gICAgLCBwYXR0ZXJuc0hhc2ggPSB7fVxuICAgICwgZGVmYXVsdHMgPSBbXVxuICAgICwgZGVmYXVsdHNIYXNoID0ge31cbiAgICAsIGN1c3RvbVJ1bGVzID0gW107XG5cbiAgcm9vdCA9IHJvb3QgfHwgeyBzY2hlbWE6IHNjaGVtYSwgcmVmVmFsOiByZWZWYWwsIHJlZnM6IHJlZnMgfTtcblxuICB2YXIgYyA9IGNoZWNrQ29tcGlsaW5nLmNhbGwodGhpcywgc2NoZW1hLCByb290LCBiYXNlSWQpO1xuICB2YXIgY29tcGlsYXRpb24gPSB0aGlzLl9jb21waWxhdGlvbnNbYy5pbmRleF07XG4gIGlmIChjLmNvbXBpbGluZykgcmV0dXJuIChjb21waWxhdGlvbi5jYWxsVmFsaWRhdGUgPSBjYWxsVmFsaWRhdGUpO1xuXG4gIHZhciBmb3JtYXRzID0gdGhpcy5fZm9ybWF0cztcbiAgdmFyIFJVTEVTID0gdGhpcy5SVUxFUztcblxuICB0cnkge1xuICAgIHZhciB2ID0gbG9jYWxDb21waWxlKHNjaGVtYSwgcm9vdCwgbG9jYWxSZWZzLCBiYXNlSWQpO1xuICAgIGNvbXBpbGF0aW9uLnZhbGlkYXRlID0gdjtcbiAgICB2YXIgY3YgPSBjb21waWxhdGlvbi5jYWxsVmFsaWRhdGU7XG4gICAgaWYgKGN2KSB7XG4gICAgICBjdi5zY2hlbWEgPSB2LnNjaGVtYTtcbiAgICAgIGN2LmVycm9ycyA9IG51bGw7XG4gICAgICBjdi5yZWZzID0gdi5yZWZzO1xuICAgICAgY3YucmVmVmFsID0gdi5yZWZWYWw7XG4gICAgICBjdi5yb290ID0gdi5yb290O1xuICAgICAgY3YuJGFzeW5jID0gdi4kYXN5bmM7XG4gICAgICBpZiAob3B0cy5zb3VyY2VDb2RlKSBjdi5zb3VyY2UgPSB2LnNvdXJjZTtcbiAgICB9XG4gICAgcmV0dXJuIHY7XG4gIH0gZmluYWxseSB7XG4gICAgZW5kQ29tcGlsaW5nLmNhbGwodGhpcywgc2NoZW1hLCByb290LCBiYXNlSWQpO1xuICB9XG5cbiAgLyogQHRoaXMgICB7Kn0gLSBjdXN0b20gY29udGV4dCwgc2VlIHBhc3NDb250ZXh0IG9wdGlvbiAqL1xuICBmdW5jdGlvbiBjYWxsVmFsaWRhdGUoKSB7XG4gICAgLyoganNoaW50IHZhbGlkdGhpczogdHJ1ZSAqL1xuICAgIHZhciB2YWxpZGF0ZSA9IGNvbXBpbGF0aW9uLnZhbGlkYXRlO1xuICAgIHZhciByZXN1bHQgPSB2YWxpZGF0ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIGNhbGxWYWxpZGF0ZS5lcnJvcnMgPSB2YWxpZGF0ZS5lcnJvcnM7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIGZ1bmN0aW9uIGxvY2FsQ29tcGlsZShfc2NoZW1hLCBfcm9vdCwgbG9jYWxSZWZzLCBiYXNlSWQpIHtcbiAgICB2YXIgaXNSb290ID0gIV9yb290IHx8IChfcm9vdCAmJiBfcm9vdC5zY2hlbWEgPT0gX3NjaGVtYSk7XG4gICAgaWYgKF9yb290LnNjaGVtYSAhPSByb290LnNjaGVtYSlcbiAgICAgIHJldHVybiBjb21waWxlLmNhbGwoc2VsZiwgX3NjaGVtYSwgX3Jvb3QsIGxvY2FsUmVmcywgYmFzZUlkKTtcblxuICAgIHZhciAkYXN5bmMgPSBfc2NoZW1hLiRhc3luYyA9PT0gdHJ1ZTtcblxuICAgIHZhciBzb3VyY2VDb2RlID0gdmFsaWRhdGVHZW5lcmF0b3Ioe1xuICAgICAgaXNUb3A6IHRydWUsXG4gICAgICBzY2hlbWE6IF9zY2hlbWEsXG4gICAgICBpc1Jvb3Q6IGlzUm9vdCxcbiAgICAgIGJhc2VJZDogYmFzZUlkLFxuICAgICAgcm9vdDogX3Jvb3QsXG4gICAgICBzY2hlbWFQYXRoOiAnJyxcbiAgICAgIGVyclNjaGVtYVBhdGg6ICcjJyxcbiAgICAgIGVycm9yUGF0aDogJ1wiXCInLFxuICAgICAgTWlzc2luZ1JlZkVycm9yOiBlcnJvckNsYXNzZXMuTWlzc2luZ1JlZixcbiAgICAgIFJVTEVTOiBSVUxFUyxcbiAgICAgIHZhbGlkYXRlOiB2YWxpZGF0ZUdlbmVyYXRvcixcbiAgICAgIHV0aWw6IHV0aWwsXG4gICAgICByZXNvbHZlOiByZXNvbHZlLFxuICAgICAgcmVzb2x2ZVJlZjogcmVzb2x2ZVJlZixcbiAgICAgIHVzZVBhdHRlcm46IHVzZVBhdHRlcm4sXG4gICAgICB1c2VEZWZhdWx0OiB1c2VEZWZhdWx0LFxuICAgICAgdXNlQ3VzdG9tUnVsZTogdXNlQ3VzdG9tUnVsZSxcbiAgICAgIG9wdHM6IG9wdHMsXG4gICAgICBmb3JtYXRzOiBmb3JtYXRzLFxuICAgICAgbG9nZ2VyOiBzZWxmLmxvZ2dlcixcbiAgICAgIHNlbGY6IHNlbGZcbiAgICB9KTtcblxuICAgIHNvdXJjZUNvZGUgPSB2YXJzKHJlZlZhbCwgcmVmVmFsQ29kZSkgKyB2YXJzKHBhdHRlcm5zLCBwYXR0ZXJuQ29kZSlcbiAgICAgICAgICAgICAgICAgICArIHZhcnMoZGVmYXVsdHMsIGRlZmF1bHRDb2RlKSArIHZhcnMoY3VzdG9tUnVsZXMsIGN1c3RvbVJ1bGVDb2RlKVxuICAgICAgICAgICAgICAgICAgICsgc291cmNlQ29kZTtcblxuICAgIGlmIChvcHRzLnByb2Nlc3NDb2RlKSBzb3VyY2VDb2RlID0gb3B0cy5wcm9jZXNzQ29kZShzb3VyY2VDb2RlLCBfc2NoZW1hKTtcbiAgICAvLyBjb25zb2xlLmxvZygnXFxuXFxuXFxuICoqKiBcXG4nLCBKU09OLnN0cmluZ2lmeShzb3VyY2VDb2RlKSk7XG4gICAgdmFyIHZhbGlkYXRlO1xuICAgIHRyeSB7XG4gICAgICB2YXIgbWFrZVZhbGlkYXRlID0gbmV3IEZ1bmN0aW9uKFxuICAgICAgICAnc2VsZicsXG4gICAgICAgICdSVUxFUycsXG4gICAgICAgICdmb3JtYXRzJyxcbiAgICAgICAgJ3Jvb3QnLFxuICAgICAgICAncmVmVmFsJyxcbiAgICAgICAgJ2RlZmF1bHRzJyxcbiAgICAgICAgJ2N1c3RvbVJ1bGVzJyxcbiAgICAgICAgJ2VxdWFsJyxcbiAgICAgICAgJ3VjczJsZW5ndGgnLFxuICAgICAgICAnVmFsaWRhdGlvbkVycm9yJyxcbiAgICAgICAgc291cmNlQ29kZVxuICAgICAgKTtcblxuICAgICAgdmFsaWRhdGUgPSBtYWtlVmFsaWRhdGUoXG4gICAgICAgIHNlbGYsXG4gICAgICAgIFJVTEVTLFxuICAgICAgICBmb3JtYXRzLFxuICAgICAgICByb290LFxuICAgICAgICByZWZWYWwsXG4gICAgICAgIGRlZmF1bHRzLFxuICAgICAgICBjdXN0b21SdWxlcyxcbiAgICAgICAgZXF1YWwsXG4gICAgICAgIHVjczJsZW5ndGgsXG4gICAgICAgIFZhbGlkYXRpb25FcnJvclxuICAgICAgKTtcblxuICAgICAgcmVmVmFsWzBdID0gdmFsaWRhdGU7XG4gICAgfSBjYXRjaChlKSB7XG4gICAgICBzZWxmLmxvZ2dlci5lcnJvcignRXJyb3IgY29tcGlsaW5nIHNjaGVtYSwgZnVuY3Rpb24gY29kZTonLCBzb3VyY2VDb2RlKTtcbiAgICAgIHRocm93IGU7XG4gICAgfVxuXG4gICAgdmFsaWRhdGUuc2NoZW1hID0gX3NjaGVtYTtcbiAgICB2YWxpZGF0ZS5lcnJvcnMgPSBudWxsO1xuICAgIHZhbGlkYXRlLnJlZnMgPSByZWZzO1xuICAgIHZhbGlkYXRlLnJlZlZhbCA9IHJlZlZhbDtcbiAgICB2YWxpZGF0ZS5yb290ID0gaXNSb290ID8gdmFsaWRhdGUgOiBfcm9vdDtcbiAgICBpZiAoJGFzeW5jKSB2YWxpZGF0ZS4kYXN5bmMgPSB0cnVlO1xuICAgIGlmIChvcHRzLnNvdXJjZUNvZGUgPT09IHRydWUpIHtcbiAgICAgIHZhbGlkYXRlLnNvdXJjZSA9IHtcbiAgICAgICAgY29kZTogc291cmNlQ29kZSxcbiAgICAgICAgcGF0dGVybnM6IHBhdHRlcm5zLFxuICAgICAgICBkZWZhdWx0czogZGVmYXVsdHNcbiAgICAgIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbGlkYXRlO1xuICB9XG5cbiAgZnVuY3Rpb24gcmVzb2x2ZVJlZihiYXNlSWQsIHJlZiwgaXNSb290KSB7XG4gICAgcmVmID0gcmVzb2x2ZS51cmwoYmFzZUlkLCByZWYpO1xuICAgIHZhciByZWZJbmRleCA9IHJlZnNbcmVmXTtcbiAgICB2YXIgX3JlZlZhbCwgcmVmQ29kZTtcbiAgICBpZiAocmVmSW5kZXggIT09IHVuZGVmaW5lZCkge1xuICAgICAgX3JlZlZhbCA9IHJlZlZhbFtyZWZJbmRleF07XG4gICAgICByZWZDb2RlID0gJ3JlZlZhbFsnICsgcmVmSW5kZXggKyAnXSc7XG4gICAgICByZXR1cm4gcmVzb2x2ZWRSZWYoX3JlZlZhbCwgcmVmQ29kZSk7XG4gICAgfVxuICAgIGlmICghaXNSb290ICYmIHJvb3QucmVmcykge1xuICAgICAgdmFyIHJvb3RSZWZJZCA9IHJvb3QucmVmc1tyZWZdO1xuICAgICAgaWYgKHJvb3RSZWZJZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIF9yZWZWYWwgPSByb290LnJlZlZhbFtyb290UmVmSWRdO1xuICAgICAgICByZWZDb2RlID0gYWRkTG9jYWxSZWYocmVmLCBfcmVmVmFsKTtcbiAgICAgICAgcmV0dXJuIHJlc29sdmVkUmVmKF9yZWZWYWwsIHJlZkNvZGUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJlZkNvZGUgPSBhZGRMb2NhbFJlZihyZWYpO1xuICAgIHZhciB2ID0gcmVzb2x2ZS5jYWxsKHNlbGYsIGxvY2FsQ29tcGlsZSwgcm9vdCwgcmVmKTtcbiAgICBpZiAodiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB2YXIgbG9jYWxTY2hlbWEgPSBsb2NhbFJlZnMgJiYgbG9jYWxSZWZzW3JlZl07XG4gICAgICBpZiAobG9jYWxTY2hlbWEpIHtcbiAgICAgICAgdiA9IHJlc29sdmUuaW5saW5lUmVmKGxvY2FsU2NoZW1hLCBvcHRzLmlubGluZVJlZnMpXG4gICAgICAgICAgICA/IGxvY2FsU2NoZW1hXG4gICAgICAgICAgICA6IGNvbXBpbGUuY2FsbChzZWxmLCBsb2NhbFNjaGVtYSwgcm9vdCwgbG9jYWxSZWZzLCBiYXNlSWQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh2ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJlbW92ZUxvY2FsUmVmKHJlZik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlcGxhY2VMb2NhbFJlZihyZWYsIHYpO1xuICAgICAgcmV0dXJuIHJlc29sdmVkUmVmKHYsIHJlZkNvZGUpO1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIGFkZExvY2FsUmVmKHJlZiwgdikge1xuICAgIHZhciByZWZJZCA9IHJlZlZhbC5sZW5ndGg7XG4gICAgcmVmVmFsW3JlZklkXSA9IHY7XG4gICAgcmVmc1tyZWZdID0gcmVmSWQ7XG4gICAgcmV0dXJuICdyZWZWYWwnICsgcmVmSWQ7XG4gIH1cblxuICBmdW5jdGlvbiByZW1vdmVMb2NhbFJlZihyZWYpIHtcbiAgICBkZWxldGUgcmVmc1tyZWZdO1xuICB9XG5cbiAgZnVuY3Rpb24gcmVwbGFjZUxvY2FsUmVmKHJlZiwgdikge1xuICAgIHZhciByZWZJZCA9IHJlZnNbcmVmXTtcbiAgICByZWZWYWxbcmVmSWRdID0gdjtcbiAgfVxuXG4gIGZ1bmN0aW9uIHJlc29sdmVkUmVmKHJlZlZhbCwgY29kZSkge1xuICAgIHJldHVybiB0eXBlb2YgcmVmVmFsID09ICdvYmplY3QnIHx8IHR5cGVvZiByZWZWYWwgPT0gJ2Jvb2xlYW4nXG4gICAgICAgICAgICA/IHsgY29kZTogY29kZSwgc2NoZW1hOiByZWZWYWwsIGlubGluZTogdHJ1ZSB9XG4gICAgICAgICAgICA6IHsgY29kZTogY29kZSwgJGFzeW5jOiByZWZWYWwgJiYgISFyZWZWYWwuJGFzeW5jIH07XG4gIH1cblxuICBmdW5jdGlvbiB1c2VQYXR0ZXJuKHJlZ2V4U3RyKSB7XG4gICAgdmFyIGluZGV4ID0gcGF0dGVybnNIYXNoW3JlZ2V4U3RyXTtcbiAgICBpZiAoaW5kZXggPT09IHVuZGVmaW5lZCkge1xuICAgICAgaW5kZXggPSBwYXR0ZXJuc0hhc2hbcmVnZXhTdHJdID0gcGF0dGVybnMubGVuZ3RoO1xuICAgICAgcGF0dGVybnNbaW5kZXhdID0gcmVnZXhTdHI7XG4gICAgfVxuICAgIHJldHVybiAncGF0dGVybicgKyBpbmRleDtcbiAgfVxuXG4gIGZ1bmN0aW9uIHVzZURlZmF1bHQodmFsdWUpIHtcbiAgICBzd2l0Y2ggKHR5cGVvZiB2YWx1ZSkge1xuICAgICAgY2FzZSAnYm9vbGVhbic6XG4gICAgICBjYXNlICdudW1iZXInOlxuICAgICAgICByZXR1cm4gJycgKyB2YWx1ZTtcbiAgICAgIGNhc2UgJ3N0cmluZyc6XG4gICAgICAgIHJldHVybiB1dGlsLnRvUXVvdGVkU3RyaW5nKHZhbHVlKTtcbiAgICAgIGNhc2UgJ29iamVjdCc6XG4gICAgICAgIGlmICh2YWx1ZSA9PT0gbnVsbCkgcmV0dXJuICdudWxsJztcbiAgICAgICAgdmFyIHZhbHVlU3RyID0gc3RhYmxlU3RyaW5naWZ5KHZhbHVlKTtcbiAgICAgICAgdmFyIGluZGV4ID0gZGVmYXVsdHNIYXNoW3ZhbHVlU3RyXTtcbiAgICAgICAgaWYgKGluZGV4ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBpbmRleCA9IGRlZmF1bHRzSGFzaFt2YWx1ZVN0cl0gPSBkZWZhdWx0cy5sZW5ndGg7XG4gICAgICAgICAgZGVmYXVsdHNbaW5kZXhdID0gdmFsdWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuICdkZWZhdWx0JyArIGluZGV4O1xuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHVzZUN1c3RvbVJ1bGUocnVsZSwgc2NoZW1hLCBwYXJlbnRTY2hlbWEsIGl0KSB7XG4gICAgaWYgKHNlbGYuX29wdHMudmFsaWRhdGVTY2hlbWEgIT09IGZhbHNlKSB7XG4gICAgICB2YXIgZGVwcyA9IHJ1bGUuZGVmaW5pdGlvbi5kZXBlbmRlbmNpZXM7XG4gICAgICBpZiAoZGVwcyAmJiAhZGVwcy5ldmVyeShmdW5jdGlvbihrZXl3b3JkKSB7XG4gICAgICAgIHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocGFyZW50U2NoZW1hLCBrZXl3b3JkKTtcbiAgICAgIH0pKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3BhcmVudCBzY2hlbWEgbXVzdCBoYXZlIGFsbCByZXF1aXJlZCBrZXl3b3JkczogJyArIGRlcHMuam9pbignLCcpKTtcblxuICAgICAgdmFyIHZhbGlkYXRlU2NoZW1hID0gcnVsZS5kZWZpbml0aW9uLnZhbGlkYXRlU2NoZW1hO1xuICAgICAgaWYgKHZhbGlkYXRlU2NoZW1hKSB7XG4gICAgICAgIHZhciB2YWxpZCA9IHZhbGlkYXRlU2NoZW1hKHNjaGVtYSk7XG4gICAgICAgIGlmICghdmFsaWQpIHtcbiAgICAgICAgICB2YXIgbWVzc2FnZSA9ICdrZXl3b3JkIHNjaGVtYSBpcyBpbnZhbGlkOiAnICsgc2VsZi5lcnJvcnNUZXh0KHZhbGlkYXRlU2NoZW1hLmVycm9ycyk7XG4gICAgICAgICAgaWYgKHNlbGYuX29wdHMudmFsaWRhdGVTY2hlbWEgPT0gJ2xvZycpIHNlbGYubG9nZ2VyLmVycm9yKG1lc3NhZ2UpO1xuICAgICAgICAgIGVsc2UgdGhyb3cgbmV3IEVycm9yKG1lc3NhZ2UpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgdmFyIGNvbXBpbGUgPSBydWxlLmRlZmluaXRpb24uY29tcGlsZVxuICAgICAgLCBpbmxpbmUgPSBydWxlLmRlZmluaXRpb24uaW5saW5lXG4gICAgICAsIG1hY3JvID0gcnVsZS5kZWZpbml0aW9uLm1hY3JvO1xuXG4gICAgdmFyIHZhbGlkYXRlO1xuICAgIGlmIChjb21waWxlKSB7XG4gICAgICB2YWxpZGF0ZSA9IGNvbXBpbGUuY2FsbChzZWxmLCBzY2hlbWEsIHBhcmVudFNjaGVtYSwgaXQpO1xuICAgIH0gZWxzZSBpZiAobWFjcm8pIHtcbiAgICAgIHZhbGlkYXRlID0gbWFjcm8uY2FsbChzZWxmLCBzY2hlbWEsIHBhcmVudFNjaGVtYSwgaXQpO1xuICAgICAgaWYgKG9wdHMudmFsaWRhdGVTY2hlbWEgIT09IGZhbHNlKSBzZWxmLnZhbGlkYXRlU2NoZW1hKHZhbGlkYXRlLCB0cnVlKTtcbiAgICB9IGVsc2UgaWYgKGlubGluZSkge1xuICAgICAgdmFsaWRhdGUgPSBpbmxpbmUuY2FsbChzZWxmLCBpdCwgcnVsZS5rZXl3b3JkLCBzY2hlbWEsIHBhcmVudFNjaGVtYSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhbGlkYXRlID0gcnVsZS5kZWZpbml0aW9uLnZhbGlkYXRlO1xuICAgICAgaWYgKCF2YWxpZGF0ZSkgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh2YWxpZGF0ZSA9PT0gdW5kZWZpbmVkKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdjdXN0b20ga2V5d29yZCBcIicgKyBydWxlLmtleXdvcmQgKyAnXCJmYWlsZWQgdG8gY29tcGlsZScpO1xuXG4gICAgdmFyIGluZGV4ID0gY3VzdG9tUnVsZXMubGVuZ3RoO1xuICAgIGN1c3RvbVJ1bGVzW2luZGV4XSA9IHZhbGlkYXRlO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIGNvZGU6ICdjdXN0b21SdWxlJyArIGluZGV4LFxuICAgICAgdmFsaWRhdGU6IHZhbGlkYXRlXG4gICAgfTtcbiAgfVxufVxuXG5cbi8qKlxuICogQ2hlY2tzIGlmIHRoZSBzY2hlbWEgaXMgY3VycmVudGx5IGNvbXBpbGVkXG4gKiBAdGhpcyAgIEFqdlxuICogQHBhcmFtICB7T2JqZWN0fSBzY2hlbWEgc2NoZW1hIHRvIGNvbXBpbGVcbiAqIEBwYXJhbSAge09iamVjdH0gcm9vdCByb290IG9iamVjdFxuICogQHBhcmFtICB7U3RyaW5nfSBiYXNlSWQgYmFzZSBzY2hlbWEgSURcbiAqIEByZXR1cm4ge09iamVjdH0gb2JqZWN0IHdpdGggcHJvcGVydGllcyBcImluZGV4XCIgKGNvbXBpbGF0aW9uIGluZGV4KSBhbmQgXCJjb21waWxpbmdcIiAoYm9vbGVhbilcbiAqL1xuZnVuY3Rpb24gY2hlY2tDb21waWxpbmcoc2NoZW1hLCByb290LCBiYXNlSWQpIHtcbiAgLyoganNoaW50IHZhbGlkdGhpczogdHJ1ZSAqL1xuICB2YXIgaW5kZXggPSBjb21wSW5kZXguY2FsbCh0aGlzLCBzY2hlbWEsIHJvb3QsIGJhc2VJZCk7XG4gIGlmIChpbmRleCA+PSAwKSByZXR1cm4geyBpbmRleDogaW5kZXgsIGNvbXBpbGluZzogdHJ1ZSB9O1xuICBpbmRleCA9IHRoaXMuX2NvbXBpbGF0aW9ucy5sZW5ndGg7XG4gIHRoaXMuX2NvbXBpbGF0aW9uc1tpbmRleF0gPSB7XG4gICAgc2NoZW1hOiBzY2hlbWEsXG4gICAgcm9vdDogcm9vdCxcbiAgICBiYXNlSWQ6IGJhc2VJZFxuICB9O1xuICByZXR1cm4geyBpbmRleDogaW5kZXgsIGNvbXBpbGluZzogZmFsc2UgfTtcbn1cblxuXG4vKipcbiAqIFJlbW92ZXMgdGhlIHNjaGVtYSBmcm9tIHRoZSBjdXJyZW50bHkgY29tcGlsZWQgbGlzdFxuICogQHRoaXMgICBBanZcbiAqIEBwYXJhbSAge09iamVjdH0gc2NoZW1hIHNjaGVtYSB0byBjb21waWxlXG4gKiBAcGFyYW0gIHtPYmplY3R9IHJvb3Qgcm9vdCBvYmplY3RcbiAqIEBwYXJhbSAge1N0cmluZ30gYmFzZUlkIGJhc2Ugc2NoZW1hIElEXG4gKi9cbmZ1bmN0aW9uIGVuZENvbXBpbGluZyhzY2hlbWEsIHJvb3QsIGJhc2VJZCkge1xuICAvKiBqc2hpbnQgdmFsaWR0aGlzOiB0cnVlICovXG4gIHZhciBpID0gY29tcEluZGV4LmNhbGwodGhpcywgc2NoZW1hLCByb290LCBiYXNlSWQpO1xuICBpZiAoaSA+PSAwKSB0aGlzLl9jb21waWxhdGlvbnMuc3BsaWNlKGksIDEpO1xufVxuXG5cbi8qKlxuICogSW5kZXggb2Ygc2NoZW1hIGNvbXBpbGF0aW9uIGluIHRoZSBjdXJyZW50bHkgY29tcGlsZWQgbGlzdFxuICogQHRoaXMgICBBanZcbiAqIEBwYXJhbSAge09iamVjdH0gc2NoZW1hIHNjaGVtYSB0byBjb21waWxlXG4gKiBAcGFyYW0gIHtPYmplY3R9IHJvb3Qgcm9vdCBvYmplY3RcbiAqIEBwYXJhbSAge1N0cmluZ30gYmFzZUlkIGJhc2Ugc2NoZW1hIElEXG4gKiBAcmV0dXJuIHtJbnRlZ2VyfSBjb21waWxhdGlvbiBpbmRleFxuICovXG5mdW5jdGlvbiBjb21wSW5kZXgoc2NoZW1hLCByb290LCBiYXNlSWQpIHtcbiAgLyoganNoaW50IHZhbGlkdGhpczogdHJ1ZSAqL1xuICBmb3IgKHZhciBpPTA7IGk8dGhpcy5fY29tcGlsYXRpb25zLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGMgPSB0aGlzLl9jb21waWxhdGlvbnNbaV07XG4gICAgaWYgKGMuc2NoZW1hID09IHNjaGVtYSAmJiBjLnJvb3QgPT0gcm9vdCAmJiBjLmJhc2VJZCA9PSBiYXNlSWQpIHJldHVybiBpO1xuICB9XG4gIHJldHVybiAtMTtcbn1cblxuXG5mdW5jdGlvbiBwYXR0ZXJuQ29kZShpLCBwYXR0ZXJucykge1xuICByZXR1cm4gJ3ZhciBwYXR0ZXJuJyArIGkgKyAnID0gbmV3IFJlZ0V4cCgnICsgdXRpbC50b1F1b3RlZFN0cmluZyhwYXR0ZXJuc1tpXSkgKyAnKTsnO1xufVxuXG5cbmZ1bmN0aW9uIGRlZmF1bHRDb2RlKGkpIHtcbiAgcmV0dXJuICd2YXIgZGVmYXVsdCcgKyBpICsgJyA9IGRlZmF1bHRzWycgKyBpICsgJ107Jztcbn1cblxuXG5mdW5jdGlvbiByZWZWYWxDb2RlKGksIHJlZlZhbCkge1xuICByZXR1cm4gcmVmVmFsW2ldID09PSB1bmRlZmluZWQgPyAnJyA6ICd2YXIgcmVmVmFsJyArIGkgKyAnID0gcmVmVmFsWycgKyBpICsgJ107Jztcbn1cblxuXG5mdW5jdGlvbiBjdXN0b21SdWxlQ29kZShpKSB7XG4gIHJldHVybiAndmFyIGN1c3RvbVJ1bGUnICsgaSArICcgPSBjdXN0b21SdWxlc1snICsgaSArICddOyc7XG59XG5cblxuZnVuY3Rpb24gdmFycyhhcnIsIHN0YXRlbWVudCkge1xuICBpZiAoIWFyci5sZW5ndGgpIHJldHVybiAnJztcbiAgdmFyIGNvZGUgPSAnJztcbiAgZm9yICh2YXIgaT0wOyBpPGFyci5sZW5ndGg7IGkrKylcbiAgICBjb2RlICs9IHN0YXRlbWVudChpLCBhcnIpO1xuICByZXR1cm4gY29kZTtcbn1cbiIsICIndXNlIHN0cmljdCc7XG5cblxudmFyIENhY2hlID0gbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBDYWNoZSgpIHtcbiAgdGhpcy5fY2FjaGUgPSB7fTtcbn07XG5cblxuQ2FjaGUucHJvdG90eXBlLnB1dCA9IGZ1bmN0aW9uIENhY2hlX3B1dChrZXksIHZhbHVlKSB7XG4gIHRoaXMuX2NhY2hlW2tleV0gPSB2YWx1ZTtcbn07XG5cblxuQ2FjaGUucHJvdG90eXBlLmdldCA9IGZ1bmN0aW9uIENhY2hlX2dldChrZXkpIHtcbiAgcmV0dXJuIHRoaXMuX2NhY2hlW2tleV07XG59O1xuXG5cbkNhY2hlLnByb3RvdHlwZS5kZWwgPSBmdW5jdGlvbiBDYWNoZV9kZWwoa2V5KSB7XG4gIGRlbGV0ZSB0aGlzLl9jYWNoZVtrZXldO1xufTtcblxuXG5DYWNoZS5wcm90b3R5cGUuY2xlYXIgPSBmdW5jdGlvbiBDYWNoZV9jbGVhcigpIHtcbiAgdGhpcy5fY2FjaGUgPSB7fTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbCA9IHJlcXVpcmUoJy4vdXRpbCcpO1xuXG52YXIgREFURSA9IC9eKFxcZFxcZFxcZFxcZCktKFxcZFxcZCktKFxcZFxcZCkkLztcbnZhciBEQVlTID0gWzAsMzEsMjgsMzEsMzAsMzEsMzAsMzEsMzEsMzAsMzEsMzAsMzFdO1xudmFyIFRJTUUgPSAvXihcXGRcXGQpOihcXGRcXGQpOihcXGRcXGQpKFxcLlxcZCspPyh6fFsrLV1cXGRcXGQoPzo6P1xcZFxcZCk/KT8kL2k7XG52YXIgSE9TVE5BTUUgPSAvXig/PS57MSwyNTN9XFwuPyQpW2EtejAtOV0oPzpbYS16MC05LV17MCw2MX1bYS16MC05XSk/KD86XFwuW2EtejAtOV0oPzpbLTAtOWEtel17MCw2MX1bMC05YS16XSk/KSpcXC4/JC9pO1xudmFyIFVSSSA9IC9eKD86W2Etel1bYS16MC05K1xcLS5dKjopKD86XFwvP1xcLyg/Oig/OlthLXowLTlcXC0uX34hJCYnKCkqKyw7PTpdfCVbMC05YS1mXXsyfSkqQCk/KD86XFxbKD86KD86KD86KD86WzAtOWEtZl17MSw0fTopezZ9fDo6KD86WzAtOWEtZl17MSw0fTopezV9fCg/OlswLTlhLWZdezEsNH0pPzo6KD86WzAtOWEtZl17MSw0fTopezR9fCg/Oig/OlswLTlhLWZdezEsNH06KXswLDF9WzAtOWEtZl17MSw0fSk/OjooPzpbMC05YS1mXXsxLDR9Oil7M318KD86KD86WzAtOWEtZl17MSw0fTopezAsMn1bMC05YS1mXXsxLDR9KT86Oig/OlswLTlhLWZdezEsNH06KXsyfXwoPzooPzpbMC05YS1mXXsxLDR9Oil7MCwzfVswLTlhLWZdezEsNH0pPzo6WzAtOWEtZl17MSw0fTp8KD86KD86WzAtOWEtZl17MSw0fTopezAsNH1bMC05YS1mXXsxLDR9KT86OikoPzpbMC05YS1mXXsxLDR9OlswLTlhLWZdezEsNH18KD86KD86MjVbMC01XXwyWzAtNF1cXGR8WzAxXT9cXGRcXGQ/KVxcLil7M30oPzoyNVswLTVdfDJbMC00XVxcZHxbMDFdP1xcZFxcZD8pKXwoPzooPzpbMC05YS1mXXsxLDR9Oil7MCw1fVswLTlhLWZdezEsNH0pPzo6WzAtOWEtZl17MSw0fXwoPzooPzpbMC05YS1mXXsxLDR9Oil7MCw2fVswLTlhLWZdezEsNH0pPzo6KXxbVnZdWzAtOWEtZl0rXFwuW2EtejAtOVxcLS5ffiEkJicoKSorLDs9Ol0rKVxcXXwoPzooPzoyNVswLTVdfDJbMC00XVxcZHxbMDFdP1xcZFxcZD8pXFwuKXszfSg/OjI1WzAtNV18MlswLTRdXFxkfFswMV0/XFxkXFxkPyl8KD86W2EtejAtOVxcLS5ffiEkJicoKSorLDs9XXwlWzAtOWEtZl17Mn0pKikoPzo6XFxkKik/KD86XFwvKD86W2EtejAtOVxcLS5ffiEkJicoKSorLDs9OkBdfCVbMC05YS1mXXsyfSkqKSp8XFwvKD86KD86W2EtejAtOVxcLS5ffiEkJicoKSorLDs9OkBdfCVbMC05YS1mXXsyfSkrKD86XFwvKD86W2EtejAtOVxcLS5ffiEkJicoKSorLDs9OkBdfCVbMC05YS1mXXsyfSkqKSopP3woPzpbYS16MC05XFwtLl9+ISQmJygpKissOz06QF18JVswLTlhLWZdezJ9KSsoPzpcXC8oPzpbYS16MC05XFwtLl9+ISQmJygpKissOz06QF18JVswLTlhLWZdezJ9KSopKikoPzpcXD8oPzpbYS16MC05XFwtLl9+ISQmJygpKissOz06QC8/XXwlWzAtOWEtZl17Mn0pKik/KD86Iyg/OlthLXowLTlcXC0uX34hJCYnKCkqKyw7PTpALz9dfCVbMC05YS1mXXsyfSkqKT8kL2k7XG52YXIgVVJJUkVGID0gL14oPzpbYS16XVthLXowLTkrXFwtLl0qOik/KD86XFwvP1xcLyg/Oig/OlthLXowLTlcXC0uX34hJCYnKCkqKyw7PTpdfCVbMC05YS1mXXsyfSkqQCk/KD86XFxbKD86KD86KD86KD86WzAtOWEtZl17MSw0fTopezZ9fDo6KD86WzAtOWEtZl17MSw0fTopezV9fCg/OlswLTlhLWZdezEsNH0pPzo6KD86WzAtOWEtZl17MSw0fTopezR9fCg/Oig/OlswLTlhLWZdezEsNH06KXswLDF9WzAtOWEtZl17MSw0fSk/OjooPzpbMC05YS1mXXsxLDR9Oil7M318KD86KD86WzAtOWEtZl17MSw0fTopezAsMn1bMC05YS1mXXsxLDR9KT86Oig/OlswLTlhLWZdezEsNH06KXsyfXwoPzooPzpbMC05YS1mXXsxLDR9Oil7MCwzfVswLTlhLWZdezEsNH0pPzo6WzAtOWEtZl17MSw0fTp8KD86KD86WzAtOWEtZl17MSw0fTopezAsNH1bMC05YS1mXXsxLDR9KT86OikoPzpbMC05YS1mXXsxLDR9OlswLTlhLWZdezEsNH18KD86KD86MjVbMC01XXwyWzAtNF1cXGR8WzAxXT9cXGRcXGQ/KVxcLil7M30oPzoyNVswLTVdfDJbMC00XVxcZHxbMDFdP1xcZFxcZD8pKXwoPzooPzpbMC05YS1mXXsxLDR9Oil7MCw1fVswLTlhLWZdezEsNH0pPzo6WzAtOWEtZl17MSw0fXwoPzooPzpbMC05YS1mXXsxLDR9Oil7MCw2fVswLTlhLWZdezEsNH0pPzo6KXxbVnZdWzAtOWEtZl0rXFwuW2EtejAtOVxcLS5ffiEkJicoKSorLDs9Ol0rKVxcXXwoPzooPzoyNVswLTVdfDJbMC00XVxcZHxbMDFdP1xcZFxcZD8pXFwuKXszfSg/OjI1WzAtNV18MlswLTRdXFxkfFswMV0/XFxkXFxkPyl8KD86W2EtejAtOVxcLS5ffiEkJidcIigpKissOz1dfCVbMC05YS1mXXsyfSkqKSg/OjpcXGQqKT8oPzpcXC8oPzpbYS16MC05XFwtLl9+ISQmJ1wiKCkqKyw7PTpAXXwlWzAtOWEtZl17Mn0pKikqfFxcLyg/Oig/OlthLXowLTlcXC0uX34hJCYnXCIoKSorLDs9OkBdfCVbMC05YS1mXXsyfSkrKD86XFwvKD86W2EtejAtOVxcLS5ffiEkJidcIigpKissOz06QF18JVswLTlhLWZdezJ9KSopKik/fCg/OlthLXowLTlcXC0uX34hJCYnXCIoKSorLDs9OkBdfCVbMC05YS1mXXsyfSkrKD86XFwvKD86W2EtejAtOVxcLS5ffiEkJidcIigpKissOz06QF18JVswLTlhLWZdezJ9KSopKik/KD86XFw/KD86W2EtejAtOVxcLS5ffiEkJidcIigpKissOz06QC8/XXwlWzAtOWEtZl17Mn0pKik/KD86Iyg/OlthLXowLTlcXC0uX34hJCYnXCIoKSorLDs9OkAvP118JVswLTlhLWZdezJ9KSopPyQvaTtcbi8vIHVyaS10ZW1wbGF0ZTogaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzY1NzBcbnZhciBVUklURU1QTEFURSA9IC9eKD86KD86W15cXHgwMC1cXHgyMFwiJzw+JVxcXFxeYHt8fV18JVswLTlhLWZdezJ9KXxcXHtbKyMuLzs/Jj0sIUB8XT8oPzpbYS16MC05X118JVswLTlhLWZdezJ9KSsoPzo6WzEtOV1bMC05XXswLDN9fFxcKik/KD86LCg/OlthLXowLTlfXXwlWzAtOWEtZl17Mn0pKyg/OjpbMS05XVswLTldezAsM318XFwqKT8pKlxcfSkqJC9pO1xuLy8gRm9yIHRoZSBzb3VyY2U6IGh0dHBzOi8vZ2lzdC5naXRodWIuY29tL2RwZXJpbmkvNzI5Mjk0XG4vLyBGb3IgdGVzdCBjYXNlczogaHR0cHM6Ly9tYXRoaWFzYnluZW5zLmJlL2RlbW8vdXJsLXJlZ2V4XG4vLyBAdG9kbyBEZWxldGUgY3VycmVudCBVUkwgaW4gZmF2b3VyIG9mIHRoZSBjb21tZW50ZWQgb3V0IFVSTCBydWxlIHdoZW4gdGhpcyBpc3N1ZSBpcyBmaXhlZCBodHRwczovL2dpdGh1Yi5jb20vZXNsaW50L2VzbGludC9pc3N1ZXMvNzk4My5cbi8vIHZhciBVUkwgPSAvXig/Oig/Omh0dHBzP3xmdHApOlxcL1xcLykoPzpcXFMrKD86OlxcUyopP0ApPyg/Oig/ITEwKD86XFwuXFxkezEsM30pezN9KSg/ITEyNyg/OlxcLlxcZHsxLDN9KXszfSkoPyExNjlcXC4yNTQoPzpcXC5cXGR7MSwzfSl7Mn0pKD8hMTkyXFwuMTY4KD86XFwuXFxkezEsM30pezJ9KSg/ITE3MlxcLig/OjFbNi05XXwyXFxkfDNbMC0xXSkoPzpcXC5cXGR7MSwzfSl7Mn0pKD86WzEtOV1cXGQ/fDFcXGRcXGR8MlswMV1cXGR8MjJbMC0zXSkoPzpcXC4oPzoxP1xcZHsxLDJ9fDJbMC00XVxcZHwyNVswLTVdKSl7Mn0oPzpcXC4oPzpbMS05XVxcZD98MVxcZFxcZHwyWzAtNF1cXGR8MjVbMC00XSkpfCg/Oig/OlthLXpcXHV7MDBhMX0tXFx1e2ZmZmZ9MC05XSstKSpbYS16XFx1ezAwYTF9LVxcdXtmZmZmfTAtOV0rKSg/OlxcLig/OlthLXpcXHV7MDBhMX0tXFx1e2ZmZmZ9MC05XSstKSpbYS16XFx1ezAwYTF9LVxcdXtmZmZmfTAtOV0rKSooPzpcXC4oPzpbYS16XFx1ezAwYTF9LVxcdXtmZmZmfV17Mix9KSkpKD86OlxcZHsyLDV9KT8oPzpcXC9bXlxcc10qKT8kL2l1O1xudmFyIFVSTCA9IC9eKD86KD86aHR0cFtzXFx1MDE3Rl0/fGZ0cCk6XFwvXFwvKSg/Oig/OltcXDAtXFx4MDhcXHgwRS1cXHgxRiEtXFx4OUZcXHhBMS1cXHUxNjdGXFx1MTY4MS1cXHUxRkZGXFx1MjAwQi1cXHUyMDI3XFx1MjAyQS1cXHUyMDJFXFx1MjAzMC1cXHUyMDVFXFx1MjA2MC1cXHUyRkZGXFx1MzAwMS1cXHVEN0ZGXFx1RTAwMC1cXHVGRUZFXFx1RkYwMC1cXHVGRkZGXXxbXFx1RDgwMC1cXHVEQkZGXVtcXHVEQzAwLVxcdURGRkZdfFtcXHVEODAwLVxcdURCRkZdKD8hW1xcdURDMDAtXFx1REZGRl0pfCg/OlteXFx1RDgwMC1cXHVEQkZGXXxeKVtcXHVEQzAwLVxcdURGRkZdKSsoPzo6KD86W1xcMC1cXHgwOFxceDBFLVxceDFGIS1cXHg5RlxceEExLVxcdTE2N0ZcXHUxNjgxLVxcdTFGRkZcXHUyMDBCLVxcdTIwMjdcXHUyMDJBLVxcdTIwMkVcXHUyMDMwLVxcdTIwNUVcXHUyMDYwLVxcdTJGRkZcXHUzMDAxLVxcdUQ3RkZcXHVFMDAwLVxcdUZFRkVcXHVGRjAwLVxcdUZGRkZdfFtcXHVEODAwLVxcdURCRkZdW1xcdURDMDAtXFx1REZGRl18W1xcdUQ4MDAtXFx1REJGRl0oPyFbXFx1REMwMC1cXHVERkZGXSl8KD86W15cXHVEODAwLVxcdURCRkZdfF4pW1xcdURDMDAtXFx1REZGRl0pKik/QCk/KD86KD8hMTAoPzpcXC5bMC05XXsxLDN9KXszfSkoPyExMjcoPzpcXC5bMC05XXsxLDN9KXszfSkoPyExNjlcXC4yNTQoPzpcXC5bMC05XXsxLDN9KXsyfSkoPyExOTJcXC4xNjgoPzpcXC5bMC05XXsxLDN9KXsyfSkoPyExNzJcXC4oPzoxWzYtOV18MlswLTldfDNbMDFdKSg/OlxcLlswLTldezEsM30pezJ9KSg/OlsxLTldWzAtOV0/fDFbMC05XVswLTldfDJbMDFdWzAtOV18MjJbMC0zXSkoPzpcXC4oPzoxP1swLTldezEsMn18MlswLTRdWzAtOV18MjVbMC01XSkpezJ9KD86XFwuKD86WzEtOV1bMC05XT98MVswLTldWzAtOV18MlswLTRdWzAtOV18MjVbMC00XSkpfCg/Oig/Oig/OlswLTlhLXpcXHhBMS1cXHVEN0ZGXFx1RTAwMC1cXHVGRkZGXXxbXFx1RDgwMC1cXHVEQkZGXSg/IVtcXHVEQzAwLVxcdURGRkZdKXwoPzpbXlxcdUQ4MDAtXFx1REJGRl18XilbXFx1REMwMC1cXHVERkZGXSkrLSkqKD86WzAtOWEtelxceEExLVxcdUQ3RkZcXHVFMDAwLVxcdUZGRkZdfFtcXHVEODAwLVxcdURCRkZdKD8hW1xcdURDMDAtXFx1REZGRl0pfCg/OlteXFx1RDgwMC1cXHVEQkZGXXxeKVtcXHVEQzAwLVxcdURGRkZdKSspKD86XFwuKD86KD86WzAtOWEtelxceEExLVxcdUQ3RkZcXHVFMDAwLVxcdUZGRkZdfFtcXHVEODAwLVxcdURCRkZdKD8hW1xcdURDMDAtXFx1REZGRl0pfCg/OlteXFx1RDgwMC1cXHVEQkZGXXxeKVtcXHVEQzAwLVxcdURGRkZdKSstKSooPzpbMC05YS16XFx4QTEtXFx1RDdGRlxcdUUwMDAtXFx1RkZGRl18W1xcdUQ4MDAtXFx1REJGRl0oPyFbXFx1REMwMC1cXHVERkZGXSl8KD86W15cXHVEODAwLVxcdURCRkZdfF4pW1xcdURDMDAtXFx1REZGRl0pKykqKD86XFwuKD86KD86W2EtelxceEExLVxcdUQ3RkZcXHVFMDAwLVxcdUZGRkZdfFtcXHVEODAwLVxcdURCRkZdKD8hW1xcdURDMDAtXFx1REZGRl0pfCg/OlteXFx1RDgwMC1cXHVEQkZGXXxeKVtcXHVEQzAwLVxcdURGRkZdKXsyLH0pKSkoPzo6WzAtOV17Miw1fSk/KD86XFwvKD86W1xcMC1cXHgwOFxceDBFLVxceDFGIS1cXHg5RlxceEExLVxcdTE2N0ZcXHUxNjgxLVxcdTFGRkZcXHUyMDBCLVxcdTIwMjdcXHUyMDJBLVxcdTIwMkVcXHUyMDMwLVxcdTIwNUVcXHUyMDYwLVxcdTJGRkZcXHUzMDAxLVxcdUQ3RkZcXHVFMDAwLVxcdUZFRkVcXHVGRjAwLVxcdUZGRkZdfFtcXHVEODAwLVxcdURCRkZdW1xcdURDMDAtXFx1REZGRl18W1xcdUQ4MDAtXFx1REJGRl0oPyFbXFx1REMwMC1cXHVERkZGXSl8KD86W15cXHVEODAwLVxcdURCRkZdfF4pW1xcdURDMDAtXFx1REZGRl0pKik/JC9pO1xudmFyIFVVSUQgPSAvXig/OnVybjp1dWlkOik/WzAtOWEtZl17OH0tKD86WzAtOWEtZl17NH0tKXszfVswLTlhLWZdezEyfSQvaTtcbnZhciBKU09OX1BPSU5URVIgPSAvXig/OlxcLyg/Oltefi9dfH4wfH4xKSopKiQvO1xudmFyIEpTT05fUE9JTlRFUl9VUklfRlJBR01FTlQgPSAvXiMoPzpcXC8oPzpbYS16MC05X1xcLS4hJCYnKCkqKyw7Oj1AXXwlWzAtOWEtZl17Mn18fjB8fjEpKikqJC9pO1xudmFyIFJFTEFUSVZFX0pTT05fUE9JTlRFUiA9IC9eKD86MHxbMS05XVswLTldKikoPzojfCg/OlxcLyg/Oltefi9dfH4wfH4xKSopKikkLztcblxuXG5tb2R1bGUuZXhwb3J0cyA9IGZvcm1hdHM7XG5cbmZ1bmN0aW9uIGZvcm1hdHMobW9kZSkge1xuICBtb2RlID0gbW9kZSA9PSAnZnVsbCcgPyAnZnVsbCcgOiAnZmFzdCc7XG4gIHJldHVybiB1dGlsLmNvcHkoZm9ybWF0c1ttb2RlXSk7XG59XG5cblxuZm9ybWF0cy5mYXN0ID0ge1xuICAvLyBkYXRlOiBodHRwOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmMzMzM5I3NlY3Rpb24tNS42XG4gIGRhdGU6IC9eXFxkXFxkXFxkXFxkLVswLTFdXFxkLVswLTNdXFxkJC8sXG4gIC8vIGRhdGUtdGltZTogaHR0cDovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMzMzOSNzZWN0aW9uLTUuNlxuICB0aW1lOiAvXig/OlswLTJdXFxkOlswLTVdXFxkOlswLTVdXFxkfDIzOjU5OjYwKSg/OlxcLlxcZCspPyg/Onp8WystXVxcZFxcZCg/Ojo/XFxkXFxkKT8pPyQvaSxcbiAgJ2RhdGUtdGltZSc6IC9eXFxkXFxkXFxkXFxkLVswLTFdXFxkLVswLTNdXFxkW3RcXHNdKD86WzAtMl1cXGQ6WzAtNV1cXGQ6WzAtNV1cXGR8MjM6NTk6NjApKD86XFwuXFxkKyk/KD86enxbKy1dXFxkXFxkKD86Oj9cXGRcXGQpPykkL2ksXG4gIC8vIHVyaTogaHR0cHM6Ly9naXRodWIuY29tL21hZmludG9zaC9pcy1teS1qc29uLXZhbGlkL2Jsb2IvbWFzdGVyL2Zvcm1hdHMuanNcbiAgdXJpOiAvXig/OlthLXpdW2EtejAtOStcXC0uXSo6KSg/OlxcLz9cXC8pP1teXFxzXSokL2ksXG4gICd1cmktcmVmZXJlbmNlJzogL14oPzooPzpbYS16XVthLXowLTkrXFwtLl0qOik/XFwvP1xcLyk/KD86W15cXFxcXFxzI11bXlxccyNdKik/KD86I1teXFxcXFxcc10qKT8kL2ksXG4gICd1cmktdGVtcGxhdGUnOiBVUklURU1QTEFURSxcbiAgdXJsOiBVUkwsXG4gIC8vIGVtYWlsIChzb3VyY2VzIGZyb20ganNlbiB2YWxpZGF0b3IpOlxuICAvLyBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzIwMTMyMy91c2luZy1hLXJlZ3VsYXItZXhwcmVzc2lvbi10by12YWxpZGF0ZS1hbi1lbWFpbC1hZGRyZXNzI2Fuc3dlci04ODI5MzYzXG4gIC8vIGh0dHA6Ly93d3cudzMub3JnL1RSL2h0bWw1L2Zvcm1zLmh0bWwjdmFsaWQtZS1tYWlsLWFkZHJlc3MgKHNlYXJjaCBmb3IgJ3dpbGxmdWwgdmlvbGF0aW9uJylcbiAgZW1haWw6IC9eW2EtejAtOS4hIyQlJicqKy89P15fYHt8fX4tXStAW2EtejAtOV0oPzpbYS16MC05LV17MCw2MX1bYS16MC05XSk/KD86XFwuW2EtejAtOV0oPzpbYS16MC05LV17MCw2MX1bYS16MC05XSk/KSokL2ksXG4gIGhvc3RuYW1lOiBIT1NUTkFNRSxcbiAgLy8gb3B0aW1pemVkIGh0dHBzOi8vd3d3LnNhZmFyaWJvb2tzb25saW5lLmNvbS9saWJyYXJ5L3ZpZXcvcmVndWxhci1leHByZXNzaW9ucy1jb29rYm9vay85NzgwNTk2ODAyODM3L2NoMDdzMTYuaHRtbFxuICBpcHY0OiAvXig/Oig/OjI1WzAtNV18MlswLTRdXFxkfFswMV0/XFxkXFxkPylcXC4pezN9KD86MjVbMC01XXwyWzAtNF1cXGR8WzAxXT9cXGRcXGQ/KSQvLFxuICAvLyBvcHRpbWl6ZWQgaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy81MzQ5Ny9yZWd1bGFyLWV4cHJlc3Npb24tdGhhdC1tYXRjaGVzLXZhbGlkLWlwdjYtYWRkcmVzc2VzXG4gIGlwdjY6IC9eXFxzKig/Oig/Oig/OlswLTlhLWZdezEsNH06KXs3fSg/OlswLTlhLWZdezEsNH18OikpfCg/Oig/OlswLTlhLWZdezEsNH06KXs2fSg/OjpbMC05YS1mXXsxLDR9fCg/Oig/OjI1WzAtNV18MlswLTRdXFxkfDFcXGRcXGR8WzEtOV0/XFxkKSg/OlxcLig/OjI1WzAtNV18MlswLTRdXFxkfDFcXGRcXGR8WzEtOV0/XFxkKSl7M30pfDopKXwoPzooPzpbMC05YS1mXXsxLDR9Oil7NX0oPzooPzooPzo6WzAtOWEtZl17MSw0fSl7MSwyfSl8Oig/Oig/OjI1WzAtNV18MlswLTRdXFxkfDFcXGRcXGR8WzEtOV0/XFxkKSg/OlxcLig/OjI1WzAtNV18MlswLTRdXFxkfDFcXGRcXGR8WzEtOV0/XFxkKSl7M30pfDopKXwoPzooPzpbMC05YS1mXXsxLDR9Oil7NH0oPzooPzooPzo6WzAtOWEtZl17MSw0fSl7MSwzfSl8KD86KD86OlswLTlhLWZdezEsNH0pPzooPzooPzoyNVswLTVdfDJbMC00XVxcZHwxXFxkXFxkfFsxLTldP1xcZCkoPzpcXC4oPzoyNVswLTVdfDJbMC00XVxcZHwxXFxkXFxkfFsxLTldP1xcZCkpezN9KSl8OikpfCg/Oig/OlswLTlhLWZdezEsNH06KXszfSg/Oig/Oig/OjpbMC05YS1mXXsxLDR9KXsxLDR9KXwoPzooPzo6WzAtOWEtZl17MSw0fSl7MCwyfTooPzooPzoyNVswLTVdfDJbMC00XVxcZHwxXFxkXFxkfFsxLTldP1xcZCkoPzpcXC4oPzoyNVswLTVdfDJbMC00XVxcZHwxXFxkXFxkfFsxLTldP1xcZCkpezN9KSl8OikpfCg/Oig/OlswLTlhLWZdezEsNH06KXsyfSg/Oig/Oig/OjpbMC05YS1mXXsxLDR9KXsxLDV9KXwoPzooPzo6WzAtOWEtZl17MSw0fSl7MCwzfTooPzooPzoyNVswLTVdfDJbMC00XVxcZHwxXFxkXFxkfFsxLTldP1xcZCkoPzpcXC4oPzoyNVswLTVdfDJbMC00XVxcZHwxXFxkXFxkfFsxLTldP1xcZCkpezN9KSl8OikpfCg/Oig/OlswLTlhLWZdezEsNH06KXsxfSg/Oig/Oig/OjpbMC05YS1mXXsxLDR9KXsxLDZ9KXwoPzooPzo6WzAtOWEtZl17MSw0fSl7MCw0fTooPzooPzoyNVswLTVdfDJbMC00XVxcZHwxXFxkXFxkfFsxLTldP1xcZCkoPzpcXC4oPzoyNVswLTVdfDJbMC00XVxcZHwxXFxkXFxkfFsxLTldP1xcZCkpezN9KSl8OikpfCg/OjooPzooPzooPzo6WzAtOWEtZl17MSw0fSl7MSw3fSl8KD86KD86OlswLTlhLWZdezEsNH0pezAsNX06KD86KD86MjVbMC01XXwyWzAtNF1cXGR8MVxcZFxcZHxbMS05XT9cXGQpKD86XFwuKD86MjVbMC01XXwyWzAtNF1cXGR8MVxcZFxcZHxbMS05XT9cXGQpKXszfSkpfDopKSkoPzolLispP1xccyokL2ksXG4gIHJlZ2V4OiByZWdleCxcbiAgLy8gdXVpZDogaHR0cDovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNDEyMlxuICB1dWlkOiBVVUlELFxuICAvLyBKU09OLXBvaW50ZXI6IGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM2OTAxXG4gIC8vIHVyaSBmcmFnbWVudDogaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzM5ODYjYXBwZW5kaXgtQVxuICAnanNvbi1wb2ludGVyJzogSlNPTl9QT0lOVEVSLFxuICAnanNvbi1wb2ludGVyLXVyaS1mcmFnbWVudCc6IEpTT05fUE9JTlRFUl9VUklfRlJBR01FTlQsXG4gIC8vIHJlbGF0aXZlIEpTT04tcG9pbnRlcjogaHR0cDovL3Rvb2xzLmlldGYub3JnL2h0bWwvZHJhZnQtbHVmZi1yZWxhdGl2ZS1qc29uLXBvaW50ZXItMDBcbiAgJ3JlbGF0aXZlLWpzb24tcG9pbnRlcic6IFJFTEFUSVZFX0pTT05fUE9JTlRFUlxufTtcblxuXG5mb3JtYXRzLmZ1bGwgPSB7XG4gIGRhdGU6IGRhdGUsXG4gIHRpbWU6IHRpbWUsXG4gICdkYXRlLXRpbWUnOiBkYXRlX3RpbWUsXG4gIHVyaTogdXJpLFxuICAndXJpLXJlZmVyZW5jZSc6IFVSSVJFRixcbiAgJ3VyaS10ZW1wbGF0ZSc6IFVSSVRFTVBMQVRFLFxuICB1cmw6IFVSTCxcbiAgZW1haWw6IC9eW2EtejAtOSEjJCUmJyorLz0/Xl9ge3x9fi1dKyg/OlxcLlthLXowLTkhIyQlJicqKy89P15fYHt8fX4tXSspKkAoPzpbYS16MC05XSg/OlthLXowLTktXSpbYS16MC05XSk/XFwuKStbYS16MC05XSg/OlthLXowLTktXSpbYS16MC05XSk/JC9pLFxuICBob3N0bmFtZTogSE9TVE5BTUUsXG4gIGlwdjQ6IC9eKD86KD86MjVbMC01XXwyWzAtNF1cXGR8WzAxXT9cXGRcXGQ/KVxcLil7M30oPzoyNVswLTVdfDJbMC00XVxcZHxbMDFdP1xcZFxcZD8pJC8sXG4gIGlwdjY6IC9eXFxzKig/Oig/Oig/OlswLTlhLWZdezEsNH06KXs3fSg/OlswLTlhLWZdezEsNH18OikpfCg/Oig/OlswLTlhLWZdezEsNH06KXs2fSg/OjpbMC05YS1mXXsxLDR9fCg/Oig/OjI1WzAtNV18MlswLTRdXFxkfDFcXGRcXGR8WzEtOV0/XFxkKSg/OlxcLig/OjI1WzAtNV18MlswLTRdXFxkfDFcXGRcXGR8WzEtOV0/XFxkKSl7M30pfDopKXwoPzooPzpbMC05YS1mXXsxLDR9Oil7NX0oPzooPzooPzo6WzAtOWEtZl17MSw0fSl7MSwyfSl8Oig/Oig/OjI1WzAtNV18MlswLTRdXFxkfDFcXGRcXGR8WzEtOV0/XFxkKSg/OlxcLig/OjI1WzAtNV18MlswLTRdXFxkfDFcXGRcXGR8WzEtOV0/XFxkKSl7M30pfDopKXwoPzooPzpbMC05YS1mXXsxLDR9Oil7NH0oPzooPzooPzo6WzAtOWEtZl17MSw0fSl7MSwzfSl8KD86KD86OlswLTlhLWZdezEsNH0pPzooPzooPzoyNVswLTVdfDJbMC00XVxcZHwxXFxkXFxkfFsxLTldP1xcZCkoPzpcXC4oPzoyNVswLTVdfDJbMC00XVxcZHwxXFxkXFxkfFsxLTldP1xcZCkpezN9KSl8OikpfCg/Oig/OlswLTlhLWZdezEsNH06KXszfSg/Oig/Oig/OjpbMC05YS1mXXsxLDR9KXsxLDR9KXwoPzooPzo6WzAtOWEtZl17MSw0fSl7MCwyfTooPzooPzoyNVswLTVdfDJbMC00XVxcZHwxXFxkXFxkfFsxLTldP1xcZCkoPzpcXC4oPzoyNVswLTVdfDJbMC00XVxcZHwxXFxkXFxkfFsxLTldP1xcZCkpezN9KSl8OikpfCg/Oig/OlswLTlhLWZdezEsNH06KXsyfSg/Oig/Oig/OjpbMC05YS1mXXsxLDR9KXsxLDV9KXwoPzooPzo6WzAtOWEtZl17MSw0fSl7MCwzfTooPzooPzoyNVswLTVdfDJbMC00XVxcZHwxXFxkXFxkfFsxLTldP1xcZCkoPzpcXC4oPzoyNVswLTVdfDJbMC00XVxcZHwxXFxkXFxkfFsxLTldP1xcZCkpezN9KSl8OikpfCg/Oig/OlswLTlhLWZdezEsNH06KXsxfSg/Oig/Oig/OjpbMC05YS1mXXsxLDR9KXsxLDZ9KXwoPzooPzo6WzAtOWEtZl17MSw0fSl7MCw0fTooPzooPzoyNVswLTVdfDJbMC00XVxcZHwxXFxkXFxkfFsxLTldP1xcZCkoPzpcXC4oPzoyNVswLTVdfDJbMC00XVxcZHwxXFxkXFxkfFsxLTldP1xcZCkpezN9KSl8OikpfCg/OjooPzooPzooPzo6WzAtOWEtZl17MSw0fSl7MSw3fSl8KD86KD86OlswLTlhLWZdezEsNH0pezAsNX06KD86KD86MjVbMC01XXwyWzAtNF1cXGR8MVxcZFxcZHxbMS05XT9cXGQpKD86XFwuKD86MjVbMC01XXwyWzAtNF1cXGR8MVxcZFxcZHxbMS05XT9cXGQpKXszfSkpfDopKSkoPzolLispP1xccyokL2ksXG4gIHJlZ2V4OiByZWdleCxcbiAgdXVpZDogVVVJRCxcbiAgJ2pzb24tcG9pbnRlcic6IEpTT05fUE9JTlRFUixcbiAgJ2pzb24tcG9pbnRlci11cmktZnJhZ21lbnQnOiBKU09OX1BPSU5URVJfVVJJX0ZSQUdNRU5ULFxuICAncmVsYXRpdmUtanNvbi1wb2ludGVyJzogUkVMQVRJVkVfSlNPTl9QT0lOVEVSXG59O1xuXG5cbmZ1bmN0aW9uIGlzTGVhcFllYXIoeWVhcikge1xuICAvLyBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMzMzOSNhcHBlbmRpeC1DXG4gIHJldHVybiB5ZWFyICUgNCA9PT0gMCAmJiAoeWVhciAlIDEwMCAhPT0gMCB8fCB5ZWFyICUgNDAwID09PSAwKTtcbn1cblxuXG5mdW5jdGlvbiBkYXRlKHN0cikge1xuICAvLyBmdWxsLWRhdGUgZnJvbSBodHRwOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmMzMzM5I3NlY3Rpb24tNS42XG4gIHZhciBtYXRjaGVzID0gc3RyLm1hdGNoKERBVEUpO1xuICBpZiAoIW1hdGNoZXMpIHJldHVybiBmYWxzZTtcblxuICB2YXIgeWVhciA9ICttYXRjaGVzWzFdO1xuICB2YXIgbW9udGggPSArbWF0Y2hlc1syXTtcbiAgdmFyIGRheSA9ICttYXRjaGVzWzNdO1xuXG4gIHJldHVybiBtb250aCA+PSAxICYmIG1vbnRoIDw9IDEyICYmIGRheSA+PSAxICYmXG4gICAgICAgICAgZGF5IDw9IChtb250aCA9PSAyICYmIGlzTGVhcFllYXIoeWVhcikgPyAyOSA6IERBWVNbbW9udGhdKTtcbn1cblxuXG5mdW5jdGlvbiB0aW1lKHN0ciwgZnVsbCkge1xuICB2YXIgbWF0Y2hlcyA9IHN0ci5tYXRjaChUSU1FKTtcbiAgaWYgKCFtYXRjaGVzKSByZXR1cm4gZmFsc2U7XG5cbiAgdmFyIGhvdXIgPSBtYXRjaGVzWzFdO1xuICB2YXIgbWludXRlID0gbWF0Y2hlc1syXTtcbiAgdmFyIHNlY29uZCA9IG1hdGNoZXNbM107XG4gIHZhciB0aW1lWm9uZSA9IG1hdGNoZXNbNV07XG4gIHJldHVybiAoKGhvdXIgPD0gMjMgJiYgbWludXRlIDw9IDU5ICYmIHNlY29uZCA8PSA1OSkgfHxcbiAgICAgICAgICAoaG91ciA9PSAyMyAmJiBtaW51dGUgPT0gNTkgJiYgc2Vjb25kID09IDYwKSkgJiZcbiAgICAgICAgICghZnVsbCB8fCB0aW1lWm9uZSk7XG59XG5cblxudmFyIERBVEVfVElNRV9TRVBBUkFUT1IgPSAvdHxcXHMvaTtcbmZ1bmN0aW9uIGRhdGVfdGltZShzdHIpIHtcbiAgLy8gaHR0cDovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMzMzOSNzZWN0aW9uLTUuNlxuICB2YXIgZGF0ZVRpbWUgPSBzdHIuc3BsaXQoREFURV9USU1FX1NFUEFSQVRPUik7XG4gIHJldHVybiBkYXRlVGltZS5sZW5ndGggPT0gMiAmJiBkYXRlKGRhdGVUaW1lWzBdKSAmJiB0aW1lKGRhdGVUaW1lWzFdLCB0cnVlKTtcbn1cblxuXG52YXIgTk9UX1VSSV9GUkFHTUVOVCA9IC9cXC98Oi87XG5mdW5jdGlvbiB1cmkoc3RyKSB7XG4gIC8vIGh0dHA6Ly9qbXJ3YXJlLmNvbS9hcnRpY2xlcy8yMDA5L3VyaV9yZWdleHAvVVJJX3JlZ2V4Lmh0bWwgKyBvcHRpb25hbCBwcm90b2NvbCArIHJlcXVpcmVkIFwiLlwiXG4gIHJldHVybiBOT1RfVVJJX0ZSQUdNRU5ULnRlc3Qoc3RyKSAmJiBVUkkudGVzdChzdHIpO1xufVxuXG5cbnZhciBaX0FOQ0hPUiA9IC9bXlxcXFxdXFxcXFovO1xuZnVuY3Rpb24gcmVnZXgoc3RyKSB7XG4gIGlmIChaX0FOQ0hPUi50ZXN0KHN0cikpIHJldHVybiBmYWxzZTtcbiAgdHJ5IHtcbiAgICBuZXcgUmVnRXhwKHN0cik7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0gY2F0Y2goZSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuIiwgIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZ2VuZXJhdGVfcmVmKGl0LCAka2V5d29yZCwgJHJ1bGVUeXBlKSB7XG4gIHZhciBvdXQgPSAnICc7XG4gIHZhciAkbHZsID0gaXQubGV2ZWw7XG4gIHZhciAkZGF0YUx2bCA9IGl0LmRhdGFMZXZlbDtcbiAgdmFyICRzY2hlbWEgPSBpdC5zY2hlbWFbJGtleXdvcmRdO1xuICB2YXIgJGVyclNjaGVtYVBhdGggPSBpdC5lcnJTY2hlbWFQYXRoICsgJy8nICsgJGtleXdvcmQ7XG4gIHZhciAkYnJlYWtPbkVycm9yID0gIWl0Lm9wdHMuYWxsRXJyb3JzO1xuICB2YXIgJGRhdGEgPSAnZGF0YScgKyAoJGRhdGFMdmwgfHwgJycpO1xuICB2YXIgJHZhbGlkID0gJ3ZhbGlkJyArICRsdmw7XG4gIHZhciAkYXN5bmMsICRyZWZDb2RlO1xuICBpZiAoJHNjaGVtYSA9PSAnIycgfHwgJHNjaGVtYSA9PSAnIy8nKSB7XG4gICAgaWYgKGl0LmlzUm9vdCkge1xuICAgICAgJGFzeW5jID0gaXQuYXN5bmM7XG4gICAgICAkcmVmQ29kZSA9ICd2YWxpZGF0ZSc7XG4gICAgfSBlbHNlIHtcbiAgICAgICRhc3luYyA9IGl0LnJvb3Quc2NoZW1hLiRhc3luYyA9PT0gdHJ1ZTtcbiAgICAgICRyZWZDb2RlID0gJ3Jvb3QucmVmVmFsWzBdJztcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgdmFyICRyZWZWYWwgPSBpdC5yZXNvbHZlUmVmKGl0LmJhc2VJZCwgJHNjaGVtYSwgaXQuaXNSb290KTtcbiAgICBpZiAoJHJlZlZhbCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICB2YXIgJG1lc3NhZ2UgPSBpdC5NaXNzaW5nUmVmRXJyb3IubWVzc2FnZShpdC5iYXNlSWQsICRzY2hlbWEpO1xuICAgICAgaWYgKGl0Lm9wdHMubWlzc2luZ1JlZnMgPT0gJ2ZhaWwnKSB7XG4gICAgICAgIGl0LmxvZ2dlci5lcnJvcigkbWVzc2FnZSk7XG4gICAgICAgIHZhciAkJG91dFN0YWNrID0gJCRvdXRTdGFjayB8fCBbXTtcbiAgICAgICAgJCRvdXRTdGFjay5wdXNoKG91dCk7XG4gICAgICAgIG91dCA9ICcnOyAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgICAgICBpZiAoaXQuY3JlYXRlRXJyb3JzICE9PSBmYWxzZSkge1xuICAgICAgICAgIG91dCArPSAnIHsga2V5d29yZDogXFwnJyArICgnJHJlZicpICsgJ1xcJyAsIGRhdGFQYXRoOiAoZGF0YVBhdGggfHwgXFwnXFwnKSArICcgKyAoaXQuZXJyb3JQYXRoKSArICcgLCBzY2hlbWFQYXRoOiAnICsgKGl0LnV0aWwudG9RdW90ZWRTdHJpbmcoJGVyclNjaGVtYVBhdGgpKSArICcgLCBwYXJhbXM6IHsgcmVmOiBcXCcnICsgKGl0LnV0aWwuZXNjYXBlUXVvdGVzKCRzY2hlbWEpKSArICdcXCcgfSAnO1xuICAgICAgICAgIGlmIChpdC5vcHRzLm1lc3NhZ2VzICE9PSBmYWxzZSkge1xuICAgICAgICAgICAgb3V0ICs9ICcgLCBtZXNzYWdlOiBcXCdjYW5cXFxcXFwndCByZXNvbHZlIHJlZmVyZW5jZSAnICsgKGl0LnV0aWwuZXNjYXBlUXVvdGVzKCRzY2hlbWEpKSArICdcXCcgJztcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGl0Lm9wdHMudmVyYm9zZSkge1xuICAgICAgICAgICAgb3V0ICs9ICcgLCBzY2hlbWE6ICcgKyAoaXQudXRpbC50b1F1b3RlZFN0cmluZygkc2NoZW1hKSkgKyAnICwgcGFyZW50U2NoZW1hOiB2YWxpZGF0ZS5zY2hlbWEnICsgKGl0LnNjaGVtYVBhdGgpICsgJyAsIGRhdGE6ICcgKyAoJGRhdGEpICsgJyAnO1xuICAgICAgICAgIH1cbiAgICAgICAgICBvdXQgKz0gJyB9ICc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgb3V0ICs9ICcge30gJztcbiAgICAgICAgfVxuICAgICAgICB2YXIgX19lcnIgPSBvdXQ7XG4gICAgICAgIG91dCA9ICQkb3V0U3RhY2sucG9wKCk7XG4gICAgICAgIGlmICghaXQuY29tcG9zaXRlUnVsZSAmJiAkYnJlYWtPbkVycm9yKSB7XG4gICAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICAgICAgaWYgKGl0LmFzeW5jKSB7XG4gICAgICAgICAgICBvdXQgKz0gJyB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKFsnICsgKF9fZXJyKSArICddKTsgJztcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgb3V0ICs9ICcgdmFsaWRhdGUuZXJyb3JzID0gWycgKyAoX19lcnIpICsgJ107IHJldHVybiBmYWxzZTsgJztcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgb3V0ICs9ICcgdmFyIGVyciA9ICcgKyAoX19lcnIpICsgJzsgIGlmICh2RXJyb3JzID09PSBudWxsKSB2RXJyb3JzID0gW2Vycl07IGVsc2UgdkVycm9ycy5wdXNoKGVycik7IGVycm9ycysrOyAnO1xuICAgICAgICB9XG4gICAgICAgIGlmICgkYnJlYWtPbkVycm9yKSB7XG4gICAgICAgICAgb3V0ICs9ICcgaWYgKGZhbHNlKSB7ICc7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoaXQub3B0cy5taXNzaW5nUmVmcyA9PSAnaWdub3JlJykge1xuICAgICAgICBpdC5sb2dnZXIud2FybigkbWVzc2FnZSk7XG4gICAgICAgIGlmICgkYnJlYWtPbkVycm9yKSB7XG4gICAgICAgICAgb3V0ICs9ICcgaWYgKHRydWUpIHsgJztcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IGl0Lk1pc3NpbmdSZWZFcnJvcihpdC5iYXNlSWQsICRzY2hlbWEsICRtZXNzYWdlKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKCRyZWZWYWwuaW5saW5lKSB7XG4gICAgICB2YXIgJGl0ID0gaXQudXRpbC5jb3B5KGl0KTtcbiAgICAgICRpdC5sZXZlbCsrO1xuICAgICAgdmFyICRuZXh0VmFsaWQgPSAndmFsaWQnICsgJGl0LmxldmVsO1xuICAgICAgJGl0LnNjaGVtYSA9ICRyZWZWYWwuc2NoZW1hO1xuICAgICAgJGl0LnNjaGVtYVBhdGggPSAnJztcbiAgICAgICRpdC5lcnJTY2hlbWFQYXRoID0gJHNjaGVtYTtcbiAgICAgIHZhciAkY29kZSA9IGl0LnZhbGlkYXRlKCRpdCkucmVwbGFjZSgvdmFsaWRhdGVcXC5zY2hlbWEvZywgJHJlZlZhbC5jb2RlKTtcbiAgICAgIG91dCArPSAnICcgKyAoJGNvZGUpICsgJyAnO1xuICAgICAgaWYgKCRicmVha09uRXJyb3IpIHtcbiAgICAgICAgb3V0ICs9ICcgaWYgKCcgKyAoJG5leHRWYWxpZCkgKyAnKSB7ICc7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgICRhc3luYyA9ICRyZWZWYWwuJGFzeW5jID09PSB0cnVlIHx8IChpdC5hc3luYyAmJiAkcmVmVmFsLiRhc3luYyAhPT0gZmFsc2UpO1xuICAgICAgJHJlZkNvZGUgPSAkcmVmVmFsLmNvZGU7XG4gICAgfVxuICB9XG4gIGlmICgkcmVmQ29kZSkge1xuICAgIHZhciAkJG91dFN0YWNrID0gJCRvdXRTdGFjayB8fCBbXTtcbiAgICAkJG91dFN0YWNrLnB1c2gob3V0KTtcbiAgICBvdXQgPSAnJztcbiAgICBpZiAoaXQub3B0cy5wYXNzQ29udGV4dCkge1xuICAgICAgb3V0ICs9ICcgJyArICgkcmVmQ29kZSkgKyAnLmNhbGwodGhpcywgJztcbiAgICB9IGVsc2Uge1xuICAgICAgb3V0ICs9ICcgJyArICgkcmVmQ29kZSkgKyAnKCAnO1xuICAgIH1cbiAgICBvdXQgKz0gJyAnICsgKCRkYXRhKSArICcsIChkYXRhUGF0aCB8fCBcXCdcXCcpJztcbiAgICBpZiAoaXQuZXJyb3JQYXRoICE9ICdcIlwiJykge1xuICAgICAgb3V0ICs9ICcgKyAnICsgKGl0LmVycm9yUGF0aCk7XG4gICAgfVxuICAgIHZhciAkcGFyZW50RGF0YSA9ICRkYXRhTHZsID8gJ2RhdGEnICsgKCgkZGF0YUx2bCAtIDEpIHx8ICcnKSA6ICdwYXJlbnREYXRhJyxcbiAgICAgICRwYXJlbnREYXRhUHJvcGVydHkgPSAkZGF0YUx2bCA/IGl0LmRhdGFQYXRoQXJyWyRkYXRhTHZsXSA6ICdwYXJlbnREYXRhUHJvcGVydHknO1xuICAgIG91dCArPSAnICwgJyArICgkcGFyZW50RGF0YSkgKyAnICwgJyArICgkcGFyZW50RGF0YVByb3BlcnR5KSArICcsIHJvb3REYXRhKSAgJztcbiAgICB2YXIgX19jYWxsVmFsaWRhdGUgPSBvdXQ7XG4gICAgb3V0ID0gJCRvdXRTdGFjay5wb3AoKTtcbiAgICBpZiAoJGFzeW5jKSB7XG4gICAgICBpZiAoIWl0LmFzeW5jKSB0aHJvdyBuZXcgRXJyb3IoJ2FzeW5jIHNjaGVtYSByZWZlcmVuY2VkIGJ5IHN5bmMgc2NoZW1hJyk7XG4gICAgICBpZiAoJGJyZWFrT25FcnJvcikge1xuICAgICAgICBvdXQgKz0gJyB2YXIgJyArICgkdmFsaWQpICsgJzsgJztcbiAgICAgIH1cbiAgICAgIG91dCArPSAnIHRyeSB7IGF3YWl0ICcgKyAoX19jYWxsVmFsaWRhdGUpICsgJzsgJztcbiAgICAgIGlmICgkYnJlYWtPbkVycm9yKSB7XG4gICAgICAgIG91dCArPSAnICcgKyAoJHZhbGlkKSArICcgPSB0cnVlOyAnO1xuICAgICAgfVxuICAgICAgb3V0ICs9ICcgfSBjYXRjaCAoZSkgeyBpZiAoIShlIGluc3RhbmNlb2YgVmFsaWRhdGlvbkVycm9yKSkgdGhyb3cgZTsgaWYgKHZFcnJvcnMgPT09IG51bGwpIHZFcnJvcnMgPSBlLmVycm9yczsgZWxzZSB2RXJyb3JzID0gdkVycm9ycy5jb25jYXQoZS5lcnJvcnMpOyBlcnJvcnMgPSB2RXJyb3JzLmxlbmd0aDsgJztcbiAgICAgIGlmICgkYnJlYWtPbkVycm9yKSB7XG4gICAgICAgIG91dCArPSAnICcgKyAoJHZhbGlkKSArICcgPSBmYWxzZTsgJztcbiAgICAgIH1cbiAgICAgIG91dCArPSAnIH0gJztcbiAgICAgIGlmICgkYnJlYWtPbkVycm9yKSB7XG4gICAgICAgIG91dCArPSAnIGlmICgnICsgKCR2YWxpZCkgKyAnKSB7ICc7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIG91dCArPSAnIGlmICghJyArIChfX2NhbGxWYWxpZGF0ZSkgKyAnKSB7IGlmICh2RXJyb3JzID09PSBudWxsKSB2RXJyb3JzID0gJyArICgkcmVmQ29kZSkgKyAnLmVycm9yczsgZWxzZSB2RXJyb3JzID0gdkVycm9ycy5jb25jYXQoJyArICgkcmVmQ29kZSkgKyAnLmVycm9ycyk7IGVycm9ycyA9IHZFcnJvcnMubGVuZ3RoOyB9ICc7XG4gICAgICBpZiAoJGJyZWFrT25FcnJvcikge1xuICAgICAgICBvdXQgKz0gJyBlbHNlIHsgJztcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIG91dDtcbn1cbiIsICIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGdlbmVyYXRlX2FsbE9mKGl0LCAka2V5d29yZCwgJHJ1bGVUeXBlKSB7XG4gIHZhciBvdXQgPSAnICc7XG4gIHZhciAkc2NoZW1hID0gaXQuc2NoZW1hWyRrZXl3b3JkXTtcbiAgdmFyICRzY2hlbWFQYXRoID0gaXQuc2NoZW1hUGF0aCArIGl0LnV0aWwuZ2V0UHJvcGVydHkoJGtleXdvcmQpO1xuICB2YXIgJGVyclNjaGVtYVBhdGggPSBpdC5lcnJTY2hlbWFQYXRoICsgJy8nICsgJGtleXdvcmQ7XG4gIHZhciAkYnJlYWtPbkVycm9yID0gIWl0Lm9wdHMuYWxsRXJyb3JzO1xuICB2YXIgJGl0ID0gaXQudXRpbC5jb3B5KGl0KTtcbiAgdmFyICRjbG9zaW5nQnJhY2VzID0gJyc7XG4gICRpdC5sZXZlbCsrO1xuICB2YXIgJG5leHRWYWxpZCA9ICd2YWxpZCcgKyAkaXQubGV2ZWw7XG4gIHZhciAkY3VycmVudEJhc2VJZCA9ICRpdC5iYXNlSWQsXG4gICAgJGFsbFNjaGVtYXNFbXB0eSA9IHRydWU7XG4gIHZhciBhcnIxID0gJHNjaGVtYTtcbiAgaWYgKGFycjEpIHtcbiAgICB2YXIgJHNjaCwgJGkgPSAtMSxcbiAgICAgIGwxID0gYXJyMS5sZW5ndGggLSAxO1xuICAgIHdoaWxlICgkaSA8IGwxKSB7XG4gICAgICAkc2NoID0gYXJyMVskaSArPSAxXTtcbiAgICAgIGlmICgoaXQub3B0cy5zdHJpY3RLZXl3b3JkcyA/ICh0eXBlb2YgJHNjaCA9PSAnb2JqZWN0JyAmJiBPYmplY3Qua2V5cygkc2NoKS5sZW5ndGggPiAwKSB8fCAkc2NoID09PSBmYWxzZSA6IGl0LnV0aWwuc2NoZW1hSGFzUnVsZXMoJHNjaCwgaXQuUlVMRVMuYWxsKSkpIHtcbiAgICAgICAgJGFsbFNjaGVtYXNFbXB0eSA9IGZhbHNlO1xuICAgICAgICAkaXQuc2NoZW1hID0gJHNjaDtcbiAgICAgICAgJGl0LnNjaGVtYVBhdGggPSAkc2NoZW1hUGF0aCArICdbJyArICRpICsgJ10nO1xuICAgICAgICAkaXQuZXJyU2NoZW1hUGF0aCA9ICRlcnJTY2hlbWFQYXRoICsgJy8nICsgJGk7XG4gICAgICAgIG91dCArPSAnICAnICsgKGl0LnZhbGlkYXRlKCRpdCkpICsgJyAnO1xuICAgICAgICAkaXQuYmFzZUlkID0gJGN1cnJlbnRCYXNlSWQ7XG4gICAgICAgIGlmICgkYnJlYWtPbkVycm9yKSB7XG4gICAgICAgICAgb3V0ICs9ICcgaWYgKCcgKyAoJG5leHRWYWxpZCkgKyAnKSB7ICc7XG4gICAgICAgICAgJGNsb3NpbmdCcmFjZXMgKz0gJ30nO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGlmICgkYnJlYWtPbkVycm9yKSB7XG4gICAgaWYgKCRhbGxTY2hlbWFzRW1wdHkpIHtcbiAgICAgIG91dCArPSAnIGlmICh0cnVlKSB7ICc7XG4gICAgfSBlbHNlIHtcbiAgICAgIG91dCArPSAnICcgKyAoJGNsb3NpbmdCcmFjZXMuc2xpY2UoMCwgLTEpKSArICcgJztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG91dDtcbn1cbiIsICIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGdlbmVyYXRlX2FueU9mKGl0LCAka2V5d29yZCwgJHJ1bGVUeXBlKSB7XG4gIHZhciBvdXQgPSAnICc7XG4gIHZhciAkbHZsID0gaXQubGV2ZWw7XG4gIHZhciAkZGF0YUx2bCA9IGl0LmRhdGFMZXZlbDtcbiAgdmFyICRzY2hlbWEgPSBpdC5zY2hlbWFbJGtleXdvcmRdO1xuICB2YXIgJHNjaGVtYVBhdGggPSBpdC5zY2hlbWFQYXRoICsgaXQudXRpbC5nZXRQcm9wZXJ0eSgka2V5d29yZCk7XG4gIHZhciAkZXJyU2NoZW1hUGF0aCA9IGl0LmVyclNjaGVtYVBhdGggKyAnLycgKyAka2V5d29yZDtcbiAgdmFyICRicmVha09uRXJyb3IgPSAhaXQub3B0cy5hbGxFcnJvcnM7XG4gIHZhciAkZGF0YSA9ICdkYXRhJyArICgkZGF0YUx2bCB8fCAnJyk7XG4gIHZhciAkdmFsaWQgPSAndmFsaWQnICsgJGx2bDtcbiAgdmFyICRlcnJzID0gJ2VycnNfXycgKyAkbHZsO1xuICB2YXIgJGl0ID0gaXQudXRpbC5jb3B5KGl0KTtcbiAgdmFyICRjbG9zaW5nQnJhY2VzID0gJyc7XG4gICRpdC5sZXZlbCsrO1xuICB2YXIgJG5leHRWYWxpZCA9ICd2YWxpZCcgKyAkaXQubGV2ZWw7XG4gIHZhciAkbm9FbXB0eVNjaGVtYSA9ICRzY2hlbWEuZXZlcnkoZnVuY3Rpb24oJHNjaCkge1xuICAgIHJldHVybiAoaXQub3B0cy5zdHJpY3RLZXl3b3JkcyA/ICh0eXBlb2YgJHNjaCA9PSAnb2JqZWN0JyAmJiBPYmplY3Qua2V5cygkc2NoKS5sZW5ndGggPiAwKSB8fCAkc2NoID09PSBmYWxzZSA6IGl0LnV0aWwuc2NoZW1hSGFzUnVsZXMoJHNjaCwgaXQuUlVMRVMuYWxsKSk7XG4gIH0pO1xuICBpZiAoJG5vRW1wdHlTY2hlbWEpIHtcbiAgICB2YXIgJGN1cnJlbnRCYXNlSWQgPSAkaXQuYmFzZUlkO1xuICAgIG91dCArPSAnIHZhciAnICsgKCRlcnJzKSArICcgPSBlcnJvcnM7IHZhciAnICsgKCR2YWxpZCkgKyAnID0gZmFsc2U7ICAnO1xuICAgIHZhciAkd2FzQ29tcG9zaXRlID0gaXQuY29tcG9zaXRlUnVsZTtcbiAgICBpdC5jb21wb3NpdGVSdWxlID0gJGl0LmNvbXBvc2l0ZVJ1bGUgPSB0cnVlO1xuICAgIHZhciBhcnIxID0gJHNjaGVtYTtcbiAgICBpZiAoYXJyMSkge1xuICAgICAgdmFyICRzY2gsICRpID0gLTEsXG4gICAgICAgIGwxID0gYXJyMS5sZW5ndGggLSAxO1xuICAgICAgd2hpbGUgKCRpIDwgbDEpIHtcbiAgICAgICAgJHNjaCA9IGFycjFbJGkgKz0gMV07XG4gICAgICAgICRpdC5zY2hlbWEgPSAkc2NoO1xuICAgICAgICAkaXQuc2NoZW1hUGF0aCA9ICRzY2hlbWFQYXRoICsgJ1snICsgJGkgKyAnXSc7XG4gICAgICAgICRpdC5lcnJTY2hlbWFQYXRoID0gJGVyclNjaGVtYVBhdGggKyAnLycgKyAkaTtcbiAgICAgICAgb3V0ICs9ICcgICcgKyAoaXQudmFsaWRhdGUoJGl0KSkgKyAnICc7XG4gICAgICAgICRpdC5iYXNlSWQgPSAkY3VycmVudEJhc2VJZDtcbiAgICAgICAgb3V0ICs9ICcgJyArICgkdmFsaWQpICsgJyA9ICcgKyAoJHZhbGlkKSArICcgfHwgJyArICgkbmV4dFZhbGlkKSArICc7IGlmICghJyArICgkdmFsaWQpICsgJykgeyAnO1xuICAgICAgICAkY2xvc2luZ0JyYWNlcyArPSAnfSc7XG4gICAgICB9XG4gICAgfVxuICAgIGl0LmNvbXBvc2l0ZVJ1bGUgPSAkaXQuY29tcG9zaXRlUnVsZSA9ICR3YXNDb21wb3NpdGU7XG4gICAgb3V0ICs9ICcgJyArICgkY2xvc2luZ0JyYWNlcykgKyAnIGlmICghJyArICgkdmFsaWQpICsgJykgeyAgIHZhciBlcnIgPSAgICc7IC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgaWYgKGl0LmNyZWF0ZUVycm9ycyAhPT0gZmFsc2UpIHtcbiAgICAgIG91dCArPSAnIHsga2V5d29yZDogXFwnJyArICgnYW55T2YnKSArICdcXCcgLCBkYXRhUGF0aDogKGRhdGFQYXRoIHx8IFxcJ1xcJykgKyAnICsgKGl0LmVycm9yUGF0aCkgKyAnICwgc2NoZW1hUGF0aDogJyArIChpdC51dGlsLnRvUXVvdGVkU3RyaW5nKCRlcnJTY2hlbWFQYXRoKSkgKyAnICwgcGFyYW1zOiB7fSAnO1xuICAgICAgaWYgKGl0Lm9wdHMubWVzc2FnZXMgIT09IGZhbHNlKSB7XG4gICAgICAgIG91dCArPSAnICwgbWVzc2FnZTogXFwnc2hvdWxkIG1hdGNoIHNvbWUgc2NoZW1hIGluIGFueU9mXFwnICc7XG4gICAgICB9XG4gICAgICBpZiAoaXQub3B0cy52ZXJib3NlKSB7XG4gICAgICAgIG91dCArPSAnICwgc2NoZW1hOiB2YWxpZGF0ZS5zY2hlbWEnICsgKCRzY2hlbWFQYXRoKSArICcgLCBwYXJlbnRTY2hlbWE6IHZhbGlkYXRlLnNjaGVtYScgKyAoaXQuc2NoZW1hUGF0aCkgKyAnICwgZGF0YTogJyArICgkZGF0YSkgKyAnICc7XG4gICAgICB9XG4gICAgICBvdXQgKz0gJyB9ICc7XG4gICAgfSBlbHNlIHtcbiAgICAgIG91dCArPSAnIHt9ICc7XG4gICAgfVxuICAgIG91dCArPSAnOyAgaWYgKHZFcnJvcnMgPT09IG51bGwpIHZFcnJvcnMgPSBbZXJyXTsgZWxzZSB2RXJyb3JzLnB1c2goZXJyKTsgZXJyb3JzKys7ICc7XG4gICAgaWYgKCFpdC5jb21wb3NpdGVSdWxlICYmICRicmVha09uRXJyb3IpIHtcbiAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAgaWYgKGl0LmFzeW5jKSB7XG4gICAgICAgIG91dCArPSAnIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IodkVycm9ycyk7ICc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvdXQgKz0gJyB2YWxpZGF0ZS5lcnJvcnMgPSB2RXJyb3JzOyByZXR1cm4gZmFsc2U7ICc7XG4gICAgICB9XG4gICAgfVxuICAgIG91dCArPSAnIH0gZWxzZSB7ICBlcnJvcnMgPSAnICsgKCRlcnJzKSArICc7IGlmICh2RXJyb3JzICE9PSBudWxsKSB7IGlmICgnICsgKCRlcnJzKSArICcpIHZFcnJvcnMubGVuZ3RoID0gJyArICgkZXJycykgKyAnOyBlbHNlIHZFcnJvcnMgPSBudWxsOyB9ICc7XG4gICAgaWYgKGl0Lm9wdHMuYWxsRXJyb3JzKSB7XG4gICAgICBvdXQgKz0gJyB9ICc7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGlmICgkYnJlYWtPbkVycm9yKSB7XG4gICAgICBvdXQgKz0gJyBpZiAodHJ1ZSkgeyAnO1xuICAgIH1cbiAgfVxuICByZXR1cm4gb3V0O1xufVxuIiwgIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZ2VuZXJhdGVfY29tbWVudChpdCwgJGtleXdvcmQsICRydWxlVHlwZSkge1xuICB2YXIgb3V0ID0gJyAnO1xuICB2YXIgJHNjaGVtYSA9IGl0LnNjaGVtYVska2V5d29yZF07XG4gIHZhciAkZXJyU2NoZW1hUGF0aCA9IGl0LmVyclNjaGVtYVBhdGggKyAnLycgKyAka2V5d29yZDtcbiAgdmFyICRicmVha09uRXJyb3IgPSAhaXQub3B0cy5hbGxFcnJvcnM7XG4gIHZhciAkY29tbWVudCA9IGl0LnV0aWwudG9RdW90ZWRTdHJpbmcoJHNjaGVtYSk7XG4gIGlmIChpdC5vcHRzLiRjb21tZW50ID09PSB0cnVlKSB7XG4gICAgb3V0ICs9ICcgY29uc29sZS5sb2coJyArICgkY29tbWVudCkgKyAnKTsnO1xuICB9IGVsc2UgaWYgKHR5cGVvZiBpdC5vcHRzLiRjb21tZW50ID09ICdmdW5jdGlvbicpIHtcbiAgICBvdXQgKz0gJyBzZWxmLl9vcHRzLiRjb21tZW50KCcgKyAoJGNvbW1lbnQpICsgJywgJyArIChpdC51dGlsLnRvUXVvdGVkU3RyaW5nKCRlcnJTY2hlbWFQYXRoKSkgKyAnLCB2YWxpZGF0ZS5yb290LnNjaGVtYSk7JztcbiAgfVxuICByZXR1cm4gb3V0O1xufVxuIiwgIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZ2VuZXJhdGVfY29uc3QoaXQsICRrZXl3b3JkLCAkcnVsZVR5cGUpIHtcbiAgdmFyIG91dCA9ICcgJztcbiAgdmFyICRsdmwgPSBpdC5sZXZlbDtcbiAgdmFyICRkYXRhTHZsID0gaXQuZGF0YUxldmVsO1xuICB2YXIgJHNjaGVtYSA9IGl0LnNjaGVtYVska2V5d29yZF07XG4gIHZhciAkc2NoZW1hUGF0aCA9IGl0LnNjaGVtYVBhdGggKyBpdC51dGlsLmdldFByb3BlcnR5KCRrZXl3b3JkKTtcbiAgdmFyICRlcnJTY2hlbWFQYXRoID0gaXQuZXJyU2NoZW1hUGF0aCArICcvJyArICRrZXl3b3JkO1xuICB2YXIgJGJyZWFrT25FcnJvciA9ICFpdC5vcHRzLmFsbEVycm9ycztcbiAgdmFyICRkYXRhID0gJ2RhdGEnICsgKCRkYXRhTHZsIHx8ICcnKTtcbiAgdmFyICR2YWxpZCA9ICd2YWxpZCcgKyAkbHZsO1xuICB2YXIgJGlzRGF0YSA9IGl0Lm9wdHMuJGRhdGEgJiYgJHNjaGVtYSAmJiAkc2NoZW1hLiRkYXRhLFxuICAgICRzY2hlbWFWYWx1ZTtcbiAgaWYgKCRpc0RhdGEpIHtcbiAgICBvdXQgKz0gJyB2YXIgc2NoZW1hJyArICgkbHZsKSArICcgPSAnICsgKGl0LnV0aWwuZ2V0RGF0YSgkc2NoZW1hLiRkYXRhLCAkZGF0YUx2bCwgaXQuZGF0YVBhdGhBcnIpKSArICc7ICc7XG4gICAgJHNjaGVtYVZhbHVlID0gJ3NjaGVtYScgKyAkbHZsO1xuICB9IGVsc2Uge1xuICAgICRzY2hlbWFWYWx1ZSA9ICRzY2hlbWE7XG4gIH1cbiAgaWYgKCEkaXNEYXRhKSB7XG4gICAgb3V0ICs9ICcgdmFyIHNjaGVtYScgKyAoJGx2bCkgKyAnID0gdmFsaWRhdGUuc2NoZW1hJyArICgkc2NoZW1hUGF0aCkgKyAnOyc7XG4gIH1cbiAgb3V0ICs9ICd2YXIgJyArICgkdmFsaWQpICsgJyA9IGVxdWFsKCcgKyAoJGRhdGEpICsgJywgc2NoZW1hJyArICgkbHZsKSArICcpOyBpZiAoIScgKyAoJHZhbGlkKSArICcpIHsgICAnO1xuICB2YXIgJCRvdXRTdGFjayA9ICQkb3V0U3RhY2sgfHwgW107XG4gICQkb3V0U3RhY2sucHVzaChvdXQpO1xuICBvdXQgPSAnJzsgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgaWYgKGl0LmNyZWF0ZUVycm9ycyAhPT0gZmFsc2UpIHtcbiAgICBvdXQgKz0gJyB7IGtleXdvcmQ6IFxcJycgKyAoJ2NvbnN0JykgKyAnXFwnICwgZGF0YVBhdGg6IChkYXRhUGF0aCB8fCBcXCdcXCcpICsgJyArIChpdC5lcnJvclBhdGgpICsgJyAsIHNjaGVtYVBhdGg6ICcgKyAoaXQudXRpbC50b1F1b3RlZFN0cmluZygkZXJyU2NoZW1hUGF0aCkpICsgJyAsIHBhcmFtczogeyBhbGxvd2VkVmFsdWU6IHNjaGVtYScgKyAoJGx2bCkgKyAnIH0gJztcbiAgICBpZiAoaXQub3B0cy5tZXNzYWdlcyAhPT0gZmFsc2UpIHtcbiAgICAgIG91dCArPSAnICwgbWVzc2FnZTogXFwnc2hvdWxkIGJlIGVxdWFsIHRvIGNvbnN0YW50XFwnICc7XG4gICAgfVxuICAgIGlmIChpdC5vcHRzLnZlcmJvc2UpIHtcbiAgICAgIG91dCArPSAnICwgc2NoZW1hOiB2YWxpZGF0ZS5zY2hlbWEnICsgKCRzY2hlbWFQYXRoKSArICcgLCBwYXJlbnRTY2hlbWE6IHZhbGlkYXRlLnNjaGVtYScgKyAoaXQuc2NoZW1hUGF0aCkgKyAnICwgZGF0YTogJyArICgkZGF0YSkgKyAnICc7XG4gICAgfVxuICAgIG91dCArPSAnIH0gJztcbiAgfSBlbHNlIHtcbiAgICBvdXQgKz0gJyB7fSAnO1xuICB9XG4gIHZhciBfX2VyciA9IG91dDtcbiAgb3V0ID0gJCRvdXRTdGFjay5wb3AoKTtcbiAgaWYgKCFpdC5jb21wb3NpdGVSdWxlICYmICRicmVha09uRXJyb3IpIHtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICBpZiAoaXQuYXN5bmMpIHtcbiAgICAgIG91dCArPSAnIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoWycgKyAoX19lcnIpICsgJ10pOyAnO1xuICAgIH0gZWxzZSB7XG4gICAgICBvdXQgKz0gJyB2YWxpZGF0ZS5lcnJvcnMgPSBbJyArIChfX2VycikgKyAnXTsgcmV0dXJuIGZhbHNlOyAnO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBvdXQgKz0gJyB2YXIgZXJyID0gJyArIChfX2VycikgKyAnOyAgaWYgKHZFcnJvcnMgPT09IG51bGwpIHZFcnJvcnMgPSBbZXJyXTsgZWxzZSB2RXJyb3JzLnB1c2goZXJyKTsgZXJyb3JzKys7ICc7XG4gIH1cbiAgb3V0ICs9ICcgfSc7XG4gIGlmICgkYnJlYWtPbkVycm9yKSB7XG4gICAgb3V0ICs9ICcgZWxzZSB7ICc7XG4gIH1cbiAgcmV0dXJuIG91dDtcbn1cbiIsICIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGdlbmVyYXRlX2NvbnRhaW5zKGl0LCAka2V5d29yZCwgJHJ1bGVUeXBlKSB7XG4gIHZhciBvdXQgPSAnICc7XG4gIHZhciAkbHZsID0gaXQubGV2ZWw7XG4gIHZhciAkZGF0YUx2bCA9IGl0LmRhdGFMZXZlbDtcbiAgdmFyICRzY2hlbWEgPSBpdC5zY2hlbWFbJGtleXdvcmRdO1xuICB2YXIgJHNjaGVtYVBhdGggPSBpdC5zY2hlbWFQYXRoICsgaXQudXRpbC5nZXRQcm9wZXJ0eSgka2V5d29yZCk7XG4gIHZhciAkZXJyU2NoZW1hUGF0aCA9IGl0LmVyclNjaGVtYVBhdGggKyAnLycgKyAka2V5d29yZDtcbiAgdmFyICRicmVha09uRXJyb3IgPSAhaXQub3B0cy5hbGxFcnJvcnM7XG4gIHZhciAkZGF0YSA9ICdkYXRhJyArICgkZGF0YUx2bCB8fCAnJyk7XG4gIHZhciAkdmFsaWQgPSAndmFsaWQnICsgJGx2bDtcbiAgdmFyICRlcnJzID0gJ2VycnNfXycgKyAkbHZsO1xuICB2YXIgJGl0ID0gaXQudXRpbC5jb3B5KGl0KTtcbiAgdmFyICRjbG9zaW5nQnJhY2VzID0gJyc7XG4gICRpdC5sZXZlbCsrO1xuICB2YXIgJG5leHRWYWxpZCA9ICd2YWxpZCcgKyAkaXQubGV2ZWw7XG4gIHZhciAkaWR4ID0gJ2knICsgJGx2bCxcbiAgICAkZGF0YU54dCA9ICRpdC5kYXRhTGV2ZWwgPSBpdC5kYXRhTGV2ZWwgKyAxLFxuICAgICRuZXh0RGF0YSA9ICdkYXRhJyArICRkYXRhTnh0LFxuICAgICRjdXJyZW50QmFzZUlkID0gaXQuYmFzZUlkLFxuICAgICRub25FbXB0eVNjaGVtYSA9IChpdC5vcHRzLnN0cmljdEtleXdvcmRzID8gKHR5cGVvZiAkc2NoZW1hID09ICdvYmplY3QnICYmIE9iamVjdC5rZXlzKCRzY2hlbWEpLmxlbmd0aCA+IDApIHx8ICRzY2hlbWEgPT09IGZhbHNlIDogaXQudXRpbC5zY2hlbWFIYXNSdWxlcygkc2NoZW1hLCBpdC5SVUxFUy5hbGwpKTtcbiAgb3V0ICs9ICd2YXIgJyArICgkZXJycykgKyAnID0gZXJyb3JzO3ZhciAnICsgKCR2YWxpZCkgKyAnOyc7XG4gIGlmICgkbm9uRW1wdHlTY2hlbWEpIHtcbiAgICB2YXIgJHdhc0NvbXBvc2l0ZSA9IGl0LmNvbXBvc2l0ZVJ1bGU7XG4gICAgaXQuY29tcG9zaXRlUnVsZSA9ICRpdC5jb21wb3NpdGVSdWxlID0gdHJ1ZTtcbiAgICAkaXQuc2NoZW1hID0gJHNjaGVtYTtcbiAgICAkaXQuc2NoZW1hUGF0aCA9ICRzY2hlbWFQYXRoO1xuICAgICRpdC5lcnJTY2hlbWFQYXRoID0gJGVyclNjaGVtYVBhdGg7XG4gICAgb3V0ICs9ICcgdmFyICcgKyAoJG5leHRWYWxpZCkgKyAnID0gZmFsc2U7IGZvciAodmFyICcgKyAoJGlkeCkgKyAnID0gMDsgJyArICgkaWR4KSArICcgPCAnICsgKCRkYXRhKSArICcubGVuZ3RoOyAnICsgKCRpZHgpICsgJysrKSB7ICc7XG4gICAgJGl0LmVycm9yUGF0aCA9IGl0LnV0aWwuZ2V0UGF0aEV4cHIoaXQuZXJyb3JQYXRoLCAkaWR4LCBpdC5vcHRzLmpzb25Qb2ludGVycywgdHJ1ZSk7XG4gICAgdmFyICRwYXNzRGF0YSA9ICRkYXRhICsgJ1snICsgJGlkeCArICddJztcbiAgICAkaXQuZGF0YVBhdGhBcnJbJGRhdGFOeHRdID0gJGlkeDtcbiAgICB2YXIgJGNvZGUgPSBpdC52YWxpZGF0ZSgkaXQpO1xuICAgICRpdC5iYXNlSWQgPSAkY3VycmVudEJhc2VJZDtcbiAgICBpZiAoaXQudXRpbC52YXJPY2N1cmVuY2VzKCRjb2RlLCAkbmV4dERhdGEpIDwgMikge1xuICAgICAgb3V0ICs9ICcgJyArIChpdC51dGlsLnZhclJlcGxhY2UoJGNvZGUsICRuZXh0RGF0YSwgJHBhc3NEYXRhKSkgKyAnICc7XG4gICAgfSBlbHNlIHtcbiAgICAgIG91dCArPSAnIHZhciAnICsgKCRuZXh0RGF0YSkgKyAnID0gJyArICgkcGFzc0RhdGEpICsgJzsgJyArICgkY29kZSkgKyAnICc7XG4gICAgfVxuICAgIG91dCArPSAnIGlmICgnICsgKCRuZXh0VmFsaWQpICsgJykgYnJlYWs7IH0gICc7XG4gICAgaXQuY29tcG9zaXRlUnVsZSA9ICRpdC5jb21wb3NpdGVSdWxlID0gJHdhc0NvbXBvc2l0ZTtcbiAgICBvdXQgKz0gJyAnICsgKCRjbG9zaW5nQnJhY2VzKSArICcgaWYgKCEnICsgKCRuZXh0VmFsaWQpICsgJykgeyc7XG4gIH0gZWxzZSB7XG4gICAgb3V0ICs9ICcgaWYgKCcgKyAoJGRhdGEpICsgJy5sZW5ndGggPT0gMCkgeyc7XG4gIH1cbiAgdmFyICQkb3V0U3RhY2sgPSAkJG91dFN0YWNrIHx8IFtdO1xuICAkJG91dFN0YWNrLnB1c2gob3V0KTtcbiAgb3V0ID0gJyc7IC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gIGlmIChpdC5jcmVhdGVFcnJvcnMgIT09IGZhbHNlKSB7XG4gICAgb3V0ICs9ICcgeyBrZXl3b3JkOiBcXCcnICsgKCdjb250YWlucycpICsgJ1xcJyAsIGRhdGFQYXRoOiAoZGF0YVBhdGggfHwgXFwnXFwnKSArICcgKyAoaXQuZXJyb3JQYXRoKSArICcgLCBzY2hlbWFQYXRoOiAnICsgKGl0LnV0aWwudG9RdW90ZWRTdHJpbmcoJGVyclNjaGVtYVBhdGgpKSArICcgLCBwYXJhbXM6IHt9ICc7XG4gICAgaWYgKGl0Lm9wdHMubWVzc2FnZXMgIT09IGZhbHNlKSB7XG4gICAgICBvdXQgKz0gJyAsIG1lc3NhZ2U6IFxcJ3Nob3VsZCBjb250YWluIGEgdmFsaWQgaXRlbVxcJyAnO1xuICAgIH1cbiAgICBpZiAoaXQub3B0cy52ZXJib3NlKSB7XG4gICAgICBvdXQgKz0gJyAsIHNjaGVtYTogdmFsaWRhdGUuc2NoZW1hJyArICgkc2NoZW1hUGF0aCkgKyAnICwgcGFyZW50U2NoZW1hOiB2YWxpZGF0ZS5zY2hlbWEnICsgKGl0LnNjaGVtYVBhdGgpICsgJyAsIGRhdGE6ICcgKyAoJGRhdGEpICsgJyAnO1xuICAgIH1cbiAgICBvdXQgKz0gJyB9ICc7XG4gIH0gZWxzZSB7XG4gICAgb3V0ICs9ICcge30gJztcbiAgfVxuICB2YXIgX19lcnIgPSBvdXQ7XG4gIG91dCA9ICQkb3V0U3RhY2sucG9wKCk7XG4gIGlmICghaXQuY29tcG9zaXRlUnVsZSAmJiAkYnJlYWtPbkVycm9yKSB7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgaWYgKGl0LmFzeW5jKSB7XG4gICAgICBvdXQgKz0gJyB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKFsnICsgKF9fZXJyKSArICddKTsgJztcbiAgICB9IGVsc2Uge1xuICAgICAgb3V0ICs9ICcgdmFsaWRhdGUuZXJyb3JzID0gWycgKyAoX19lcnIpICsgJ107IHJldHVybiBmYWxzZTsgJztcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgb3V0ICs9ICcgdmFyIGVyciA9ICcgKyAoX19lcnIpICsgJzsgIGlmICh2RXJyb3JzID09PSBudWxsKSB2RXJyb3JzID0gW2Vycl07IGVsc2UgdkVycm9ycy5wdXNoKGVycik7IGVycm9ycysrOyAnO1xuICB9XG4gIG91dCArPSAnIH0gZWxzZSB7ICc7XG4gIGlmICgkbm9uRW1wdHlTY2hlbWEpIHtcbiAgICBvdXQgKz0gJyAgZXJyb3JzID0gJyArICgkZXJycykgKyAnOyBpZiAodkVycm9ycyAhPT0gbnVsbCkgeyBpZiAoJyArICgkZXJycykgKyAnKSB2RXJyb3JzLmxlbmd0aCA9ICcgKyAoJGVycnMpICsgJzsgZWxzZSB2RXJyb3JzID0gbnVsbDsgfSAnO1xuICB9XG4gIGlmIChpdC5vcHRzLmFsbEVycm9ycykge1xuICAgIG91dCArPSAnIH0gJztcbiAgfVxuICByZXR1cm4gb3V0O1xufVxuIiwgIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZ2VuZXJhdGVfZGVwZW5kZW5jaWVzKGl0LCAka2V5d29yZCwgJHJ1bGVUeXBlKSB7XG4gIHZhciBvdXQgPSAnICc7XG4gIHZhciAkbHZsID0gaXQubGV2ZWw7XG4gIHZhciAkZGF0YUx2bCA9IGl0LmRhdGFMZXZlbDtcbiAgdmFyICRzY2hlbWEgPSBpdC5zY2hlbWFbJGtleXdvcmRdO1xuICB2YXIgJHNjaGVtYVBhdGggPSBpdC5zY2hlbWFQYXRoICsgaXQudXRpbC5nZXRQcm9wZXJ0eSgka2V5d29yZCk7XG4gIHZhciAkZXJyU2NoZW1hUGF0aCA9IGl0LmVyclNjaGVtYVBhdGggKyAnLycgKyAka2V5d29yZDtcbiAgdmFyICRicmVha09uRXJyb3IgPSAhaXQub3B0cy5hbGxFcnJvcnM7XG4gIHZhciAkZGF0YSA9ICdkYXRhJyArICgkZGF0YUx2bCB8fCAnJyk7XG4gIHZhciAkZXJycyA9ICdlcnJzX18nICsgJGx2bDtcbiAgdmFyICRpdCA9IGl0LnV0aWwuY29weShpdCk7XG4gIHZhciAkY2xvc2luZ0JyYWNlcyA9ICcnO1xuICAkaXQubGV2ZWwrKztcbiAgdmFyICRuZXh0VmFsaWQgPSAndmFsaWQnICsgJGl0LmxldmVsO1xuICB2YXIgJHNjaGVtYURlcHMgPSB7fSxcbiAgICAkcHJvcGVydHlEZXBzID0ge30sXG4gICAgJG93blByb3BlcnRpZXMgPSBpdC5vcHRzLm93blByb3BlcnRpZXM7XG4gIGZvciAoJHByb3BlcnR5IGluICRzY2hlbWEpIHtcbiAgICBpZiAoJHByb3BlcnR5ID09ICdfX3Byb3RvX18nKSBjb250aW51ZTtcbiAgICB2YXIgJHNjaCA9ICRzY2hlbWFbJHByb3BlcnR5XTtcbiAgICB2YXIgJGRlcHMgPSBBcnJheS5pc0FycmF5KCRzY2gpID8gJHByb3BlcnR5RGVwcyA6ICRzY2hlbWFEZXBzO1xuICAgICRkZXBzWyRwcm9wZXJ0eV0gPSAkc2NoO1xuICB9XG4gIG91dCArPSAndmFyICcgKyAoJGVycnMpICsgJyA9IGVycm9yczsnO1xuICB2YXIgJGN1cnJlbnRFcnJvclBhdGggPSBpdC5lcnJvclBhdGg7XG4gIG91dCArPSAndmFyIG1pc3NpbmcnICsgKCRsdmwpICsgJzsnO1xuICBmb3IgKHZhciAkcHJvcGVydHkgaW4gJHByb3BlcnR5RGVwcykge1xuICAgICRkZXBzID0gJHByb3BlcnR5RGVwc1skcHJvcGVydHldO1xuICAgIGlmICgkZGVwcy5sZW5ndGgpIHtcbiAgICAgIG91dCArPSAnIGlmICggJyArICgkZGF0YSkgKyAoaXQudXRpbC5nZXRQcm9wZXJ0eSgkcHJvcGVydHkpKSArICcgIT09IHVuZGVmaW5lZCAnO1xuICAgICAgaWYgKCRvd25Qcm9wZXJ0aWVzKSB7XG4gICAgICAgIG91dCArPSAnICYmIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCgnICsgKCRkYXRhKSArICcsIFxcJycgKyAoaXQudXRpbC5lc2NhcGVRdW90ZXMoJHByb3BlcnR5KSkgKyAnXFwnKSAnO1xuICAgICAgfVxuICAgICAgaWYgKCRicmVha09uRXJyb3IpIHtcbiAgICAgICAgb3V0ICs9ICcgJiYgKCAnO1xuICAgICAgICB2YXIgYXJyMSA9ICRkZXBzO1xuICAgICAgICBpZiAoYXJyMSkge1xuICAgICAgICAgIHZhciAkcHJvcGVydHlLZXksICRpID0gLTEsXG4gICAgICAgICAgICBsMSA9IGFycjEubGVuZ3RoIC0gMTtcbiAgICAgICAgICB3aGlsZSAoJGkgPCBsMSkge1xuICAgICAgICAgICAgJHByb3BlcnR5S2V5ID0gYXJyMVskaSArPSAxXTtcbiAgICAgICAgICAgIGlmICgkaSkge1xuICAgICAgICAgICAgICBvdXQgKz0gJyB8fCAnO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyICRwcm9wID0gaXQudXRpbC5nZXRQcm9wZXJ0eSgkcHJvcGVydHlLZXkpLFxuICAgICAgICAgICAgICAkdXNlRGF0YSA9ICRkYXRhICsgJHByb3A7XG4gICAgICAgICAgICBvdXQgKz0gJyAoICggJyArICgkdXNlRGF0YSkgKyAnID09PSB1bmRlZmluZWQgJztcbiAgICAgICAgICAgIGlmICgkb3duUHJvcGVydGllcykge1xuICAgICAgICAgICAgICBvdXQgKz0gJyB8fCAhIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCgnICsgKCRkYXRhKSArICcsIFxcJycgKyAoaXQudXRpbC5lc2NhcGVRdW90ZXMoJHByb3BlcnR5S2V5KSkgKyAnXFwnKSAnO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgb3V0ICs9ICcpICYmIChtaXNzaW5nJyArICgkbHZsKSArICcgPSAnICsgKGl0LnV0aWwudG9RdW90ZWRTdHJpbmcoaXQub3B0cy5qc29uUG9pbnRlcnMgPyAkcHJvcGVydHlLZXkgOiAkcHJvcCkpICsgJykgKSAnO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBvdXQgKz0gJykpIHsgICc7XG4gICAgICAgIHZhciAkcHJvcGVydHlQYXRoID0gJ21pc3NpbmcnICsgJGx2bCxcbiAgICAgICAgICAkbWlzc2luZ1Byb3BlcnR5ID0gJ1xcJyArICcgKyAkcHJvcGVydHlQYXRoICsgJyArIFxcJyc7XG4gICAgICAgIGlmIChpdC5vcHRzLl9lcnJvckRhdGFQYXRoUHJvcGVydHkpIHtcbiAgICAgICAgICBpdC5lcnJvclBhdGggPSBpdC5vcHRzLmpzb25Qb2ludGVycyA/IGl0LnV0aWwuZ2V0UGF0aEV4cHIoJGN1cnJlbnRFcnJvclBhdGgsICRwcm9wZXJ0eVBhdGgsIHRydWUpIDogJGN1cnJlbnRFcnJvclBhdGggKyAnICsgJyArICRwcm9wZXJ0eVBhdGg7XG4gICAgICAgIH1cbiAgICAgICAgdmFyICQkb3V0U3RhY2sgPSAkJG91dFN0YWNrIHx8IFtdO1xuICAgICAgICAkJG91dFN0YWNrLnB1c2gob3V0KTtcbiAgICAgICAgb3V0ID0gJyc7IC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgICAgIGlmIChpdC5jcmVhdGVFcnJvcnMgIT09IGZhbHNlKSB7XG4gICAgICAgICAgb3V0ICs9ICcgeyBrZXl3b3JkOiBcXCcnICsgKCdkZXBlbmRlbmNpZXMnKSArICdcXCcgLCBkYXRhUGF0aDogKGRhdGFQYXRoIHx8IFxcJ1xcJykgKyAnICsgKGl0LmVycm9yUGF0aCkgKyAnICwgc2NoZW1hUGF0aDogJyArIChpdC51dGlsLnRvUXVvdGVkU3RyaW5nKCRlcnJTY2hlbWFQYXRoKSkgKyAnICwgcGFyYW1zOiB7IHByb3BlcnR5OiBcXCcnICsgKGl0LnV0aWwuZXNjYXBlUXVvdGVzKCRwcm9wZXJ0eSkpICsgJ1xcJywgbWlzc2luZ1Byb3BlcnR5OiBcXCcnICsgKCRtaXNzaW5nUHJvcGVydHkpICsgJ1xcJywgZGVwc0NvdW50OiAnICsgKCRkZXBzLmxlbmd0aCkgKyAnLCBkZXBzOiBcXCcnICsgKGl0LnV0aWwuZXNjYXBlUXVvdGVzKCRkZXBzLmxlbmd0aCA9PSAxID8gJGRlcHNbMF0gOiAkZGVwcy5qb2luKFwiLCBcIikpKSArICdcXCcgfSAnO1xuICAgICAgICAgIGlmIChpdC5vcHRzLm1lc3NhZ2VzICE9PSBmYWxzZSkge1xuICAgICAgICAgICAgb3V0ICs9ICcgLCBtZXNzYWdlOiBcXCdzaG91bGQgaGF2ZSAnO1xuICAgICAgICAgICAgaWYgKCRkZXBzLmxlbmd0aCA9PSAxKSB7XG4gICAgICAgICAgICAgIG91dCArPSAncHJvcGVydHkgJyArIChpdC51dGlsLmVzY2FwZVF1b3RlcygkZGVwc1swXSkpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgb3V0ICs9ICdwcm9wZXJ0aWVzICcgKyAoaXQudXRpbC5lc2NhcGVRdW90ZXMoJGRlcHMuam9pbihcIiwgXCIpKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBvdXQgKz0gJyB3aGVuIHByb3BlcnR5ICcgKyAoaXQudXRpbC5lc2NhcGVRdW90ZXMoJHByb3BlcnR5KSkgKyAnIGlzIHByZXNlbnRcXCcgJztcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGl0Lm9wdHMudmVyYm9zZSkge1xuICAgICAgICAgICAgb3V0ICs9ICcgLCBzY2hlbWE6IHZhbGlkYXRlLnNjaGVtYScgKyAoJHNjaGVtYVBhdGgpICsgJyAsIHBhcmVudFNjaGVtYTogdmFsaWRhdGUuc2NoZW1hJyArIChpdC5zY2hlbWFQYXRoKSArICcgLCBkYXRhOiAnICsgKCRkYXRhKSArICcgJztcbiAgICAgICAgICB9XG4gICAgICAgICAgb3V0ICs9ICcgfSAnO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG91dCArPSAnIHt9ICc7XG4gICAgICAgIH1cbiAgICAgICAgdmFyIF9fZXJyID0gb3V0O1xuICAgICAgICBvdXQgPSAkJG91dFN0YWNrLnBvcCgpO1xuICAgICAgICBpZiAoIWl0LmNvbXBvc2l0ZVJ1bGUgJiYgJGJyZWFrT25FcnJvcikge1xuICAgICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAgICAgIGlmIChpdC5hc3luYykge1xuICAgICAgICAgICAgb3V0ICs9ICcgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihbJyArIChfX2VycikgKyAnXSk7ICc7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG91dCArPSAnIHZhbGlkYXRlLmVycm9ycyA9IFsnICsgKF9fZXJyKSArICddOyByZXR1cm4gZmFsc2U7ICc7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG91dCArPSAnIHZhciBlcnIgPSAnICsgKF9fZXJyKSArICc7ICBpZiAodkVycm9ycyA9PT0gbnVsbCkgdkVycm9ycyA9IFtlcnJdOyBlbHNlIHZFcnJvcnMucHVzaChlcnIpOyBlcnJvcnMrKzsgJztcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb3V0ICs9ICcgKSB7ICc7XG4gICAgICAgIHZhciBhcnIyID0gJGRlcHM7XG4gICAgICAgIGlmIChhcnIyKSB7XG4gICAgICAgICAgdmFyICRwcm9wZXJ0eUtleSwgaTIgPSAtMSxcbiAgICAgICAgICAgIGwyID0gYXJyMi5sZW5ndGggLSAxO1xuICAgICAgICAgIHdoaWxlIChpMiA8IGwyKSB7XG4gICAgICAgICAgICAkcHJvcGVydHlLZXkgPSBhcnIyW2kyICs9IDFdO1xuICAgICAgICAgICAgdmFyICRwcm9wID0gaXQudXRpbC5nZXRQcm9wZXJ0eSgkcHJvcGVydHlLZXkpLFxuICAgICAgICAgICAgICAkbWlzc2luZ1Byb3BlcnR5ID0gaXQudXRpbC5lc2NhcGVRdW90ZXMoJHByb3BlcnR5S2V5KSxcbiAgICAgICAgICAgICAgJHVzZURhdGEgPSAkZGF0YSArICRwcm9wO1xuICAgICAgICAgICAgaWYgKGl0Lm9wdHMuX2Vycm9yRGF0YVBhdGhQcm9wZXJ0eSkge1xuICAgICAgICAgICAgICBpdC5lcnJvclBhdGggPSBpdC51dGlsLmdldFBhdGgoJGN1cnJlbnRFcnJvclBhdGgsICRwcm9wZXJ0eUtleSwgaXQub3B0cy5qc29uUG9pbnRlcnMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgb3V0ICs9ICcgaWYgKCAnICsgKCR1c2VEYXRhKSArICcgPT09IHVuZGVmaW5lZCAnO1xuICAgICAgICAgICAgaWYgKCRvd25Qcm9wZXJ0aWVzKSB7XG4gICAgICAgICAgICAgIG91dCArPSAnIHx8ICEgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKCcgKyAoJGRhdGEpICsgJywgXFwnJyArIChpdC51dGlsLmVzY2FwZVF1b3RlcygkcHJvcGVydHlLZXkpKSArICdcXCcpICc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBvdXQgKz0gJykgeyAgdmFyIGVyciA9ICAgJzsgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICAgICAgICAgIGlmIChpdC5jcmVhdGVFcnJvcnMgIT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgIG91dCArPSAnIHsga2V5d29yZDogXFwnJyArICgnZGVwZW5kZW5jaWVzJykgKyAnXFwnICwgZGF0YVBhdGg6IChkYXRhUGF0aCB8fCBcXCdcXCcpICsgJyArIChpdC5lcnJvclBhdGgpICsgJyAsIHNjaGVtYVBhdGg6ICcgKyAoaXQudXRpbC50b1F1b3RlZFN0cmluZygkZXJyU2NoZW1hUGF0aCkpICsgJyAsIHBhcmFtczogeyBwcm9wZXJ0eTogXFwnJyArIChpdC51dGlsLmVzY2FwZVF1b3RlcygkcHJvcGVydHkpKSArICdcXCcsIG1pc3NpbmdQcm9wZXJ0eTogXFwnJyArICgkbWlzc2luZ1Byb3BlcnR5KSArICdcXCcsIGRlcHNDb3VudDogJyArICgkZGVwcy5sZW5ndGgpICsgJywgZGVwczogXFwnJyArIChpdC51dGlsLmVzY2FwZVF1b3RlcygkZGVwcy5sZW5ndGggPT0gMSA/ICRkZXBzWzBdIDogJGRlcHMuam9pbihcIiwgXCIpKSkgKyAnXFwnIH0gJztcbiAgICAgICAgICAgICAgaWYgKGl0Lm9wdHMubWVzc2FnZXMgIT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgb3V0ICs9ICcgLCBtZXNzYWdlOiBcXCdzaG91bGQgaGF2ZSAnO1xuICAgICAgICAgICAgICAgIGlmICgkZGVwcy5sZW5ndGggPT0gMSkge1xuICAgICAgICAgICAgICAgICAgb3V0ICs9ICdwcm9wZXJ0eSAnICsgKGl0LnV0aWwuZXNjYXBlUXVvdGVzKCRkZXBzWzBdKSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIG91dCArPSAncHJvcGVydGllcyAnICsgKGl0LnV0aWwuZXNjYXBlUXVvdGVzKCRkZXBzLmpvaW4oXCIsIFwiKSkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBvdXQgKz0gJyB3aGVuIHByb3BlcnR5ICcgKyAoaXQudXRpbC5lc2NhcGVRdW90ZXMoJHByb3BlcnR5KSkgKyAnIGlzIHByZXNlbnRcXCcgJztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBpZiAoaXQub3B0cy52ZXJib3NlKSB7XG4gICAgICAgICAgICAgICAgb3V0ICs9ICcgLCBzY2hlbWE6IHZhbGlkYXRlLnNjaGVtYScgKyAoJHNjaGVtYVBhdGgpICsgJyAsIHBhcmVudFNjaGVtYTogdmFsaWRhdGUuc2NoZW1hJyArIChpdC5zY2hlbWFQYXRoKSArICcgLCBkYXRhOiAnICsgKCRkYXRhKSArICcgJztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBvdXQgKz0gJyB9ICc7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBvdXQgKz0gJyB7fSAnO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgb3V0ICs9ICc7ICBpZiAodkVycm9ycyA9PT0gbnVsbCkgdkVycm9ycyA9IFtlcnJdOyBlbHNlIHZFcnJvcnMucHVzaChlcnIpOyBlcnJvcnMrKzsgfSAnO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgb3V0ICs9ICcgfSAgICc7XG4gICAgICBpZiAoJGJyZWFrT25FcnJvcikge1xuICAgICAgICAkY2xvc2luZ0JyYWNlcyArPSAnfSc7XG4gICAgICAgIG91dCArPSAnIGVsc2UgeyAnO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBpdC5lcnJvclBhdGggPSAkY3VycmVudEVycm9yUGF0aDtcbiAgdmFyICRjdXJyZW50QmFzZUlkID0gJGl0LmJhc2VJZDtcbiAgZm9yICh2YXIgJHByb3BlcnR5IGluICRzY2hlbWFEZXBzKSB7XG4gICAgdmFyICRzY2ggPSAkc2NoZW1hRGVwc1skcHJvcGVydHldO1xuICAgIGlmICgoaXQub3B0cy5zdHJpY3RLZXl3b3JkcyA/ICh0eXBlb2YgJHNjaCA9PSAnb2JqZWN0JyAmJiBPYmplY3Qua2V5cygkc2NoKS5sZW5ndGggPiAwKSB8fCAkc2NoID09PSBmYWxzZSA6IGl0LnV0aWwuc2NoZW1hSGFzUnVsZXMoJHNjaCwgaXQuUlVMRVMuYWxsKSkpIHtcbiAgICAgIG91dCArPSAnICcgKyAoJG5leHRWYWxpZCkgKyAnID0gdHJ1ZTsgaWYgKCAnICsgKCRkYXRhKSArIChpdC51dGlsLmdldFByb3BlcnR5KCRwcm9wZXJ0eSkpICsgJyAhPT0gdW5kZWZpbmVkICc7XG4gICAgICBpZiAoJG93blByb3BlcnRpZXMpIHtcbiAgICAgICAgb3V0ICs9ICcgJiYgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKCcgKyAoJGRhdGEpICsgJywgXFwnJyArIChpdC51dGlsLmVzY2FwZVF1b3RlcygkcHJvcGVydHkpKSArICdcXCcpICc7XG4gICAgICB9XG4gICAgICBvdXQgKz0gJykgeyAnO1xuICAgICAgJGl0LnNjaGVtYSA9ICRzY2g7XG4gICAgICAkaXQuc2NoZW1hUGF0aCA9ICRzY2hlbWFQYXRoICsgaXQudXRpbC5nZXRQcm9wZXJ0eSgkcHJvcGVydHkpO1xuICAgICAgJGl0LmVyclNjaGVtYVBhdGggPSAkZXJyU2NoZW1hUGF0aCArICcvJyArIGl0LnV0aWwuZXNjYXBlRnJhZ21lbnQoJHByb3BlcnR5KTtcbiAgICAgIG91dCArPSAnICAnICsgKGl0LnZhbGlkYXRlKCRpdCkpICsgJyAnO1xuICAgICAgJGl0LmJhc2VJZCA9ICRjdXJyZW50QmFzZUlkO1xuICAgICAgb3V0ICs9ICcgfSAgJztcbiAgICAgIGlmICgkYnJlYWtPbkVycm9yKSB7XG4gICAgICAgIG91dCArPSAnIGlmICgnICsgKCRuZXh0VmFsaWQpICsgJykgeyAnO1xuICAgICAgICAkY2xvc2luZ0JyYWNlcyArPSAnfSc7XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGlmICgkYnJlYWtPbkVycm9yKSB7XG4gICAgb3V0ICs9ICcgICAnICsgKCRjbG9zaW5nQnJhY2VzKSArICcgaWYgKCcgKyAoJGVycnMpICsgJyA9PSBlcnJvcnMpIHsnO1xuICB9XG4gIHJldHVybiBvdXQ7XG59XG4iLCAiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBnZW5lcmF0ZV9lbnVtKGl0LCAka2V5d29yZCwgJHJ1bGVUeXBlKSB7XG4gIHZhciBvdXQgPSAnICc7XG4gIHZhciAkbHZsID0gaXQubGV2ZWw7XG4gIHZhciAkZGF0YUx2bCA9IGl0LmRhdGFMZXZlbDtcbiAgdmFyICRzY2hlbWEgPSBpdC5zY2hlbWFbJGtleXdvcmRdO1xuICB2YXIgJHNjaGVtYVBhdGggPSBpdC5zY2hlbWFQYXRoICsgaXQudXRpbC5nZXRQcm9wZXJ0eSgka2V5d29yZCk7XG4gIHZhciAkZXJyU2NoZW1hUGF0aCA9IGl0LmVyclNjaGVtYVBhdGggKyAnLycgKyAka2V5d29yZDtcbiAgdmFyICRicmVha09uRXJyb3IgPSAhaXQub3B0cy5hbGxFcnJvcnM7XG4gIHZhciAkZGF0YSA9ICdkYXRhJyArICgkZGF0YUx2bCB8fCAnJyk7XG4gIHZhciAkdmFsaWQgPSAndmFsaWQnICsgJGx2bDtcbiAgdmFyICRpc0RhdGEgPSBpdC5vcHRzLiRkYXRhICYmICRzY2hlbWEgJiYgJHNjaGVtYS4kZGF0YSxcbiAgICAkc2NoZW1hVmFsdWU7XG4gIGlmICgkaXNEYXRhKSB7XG4gICAgb3V0ICs9ICcgdmFyIHNjaGVtYScgKyAoJGx2bCkgKyAnID0gJyArIChpdC51dGlsLmdldERhdGEoJHNjaGVtYS4kZGF0YSwgJGRhdGFMdmwsIGl0LmRhdGFQYXRoQXJyKSkgKyAnOyAnO1xuICAgICRzY2hlbWFWYWx1ZSA9ICdzY2hlbWEnICsgJGx2bDtcbiAgfSBlbHNlIHtcbiAgICAkc2NoZW1hVmFsdWUgPSAkc2NoZW1hO1xuICB9XG4gIHZhciAkaSA9ICdpJyArICRsdmwsXG4gICAgJHZTY2hlbWEgPSAnc2NoZW1hJyArICRsdmw7XG4gIGlmICghJGlzRGF0YSkge1xuICAgIG91dCArPSAnIHZhciAnICsgKCR2U2NoZW1hKSArICcgPSB2YWxpZGF0ZS5zY2hlbWEnICsgKCRzY2hlbWFQYXRoKSArICc7JztcbiAgfVxuICBvdXQgKz0gJ3ZhciAnICsgKCR2YWxpZCkgKyAnOyc7XG4gIGlmICgkaXNEYXRhKSB7XG4gICAgb3V0ICs9ICcgaWYgKHNjaGVtYScgKyAoJGx2bCkgKyAnID09PSB1bmRlZmluZWQpICcgKyAoJHZhbGlkKSArICcgPSB0cnVlOyBlbHNlIGlmICghQXJyYXkuaXNBcnJheShzY2hlbWEnICsgKCRsdmwpICsgJykpICcgKyAoJHZhbGlkKSArICcgPSBmYWxzZTsgZWxzZSB7JztcbiAgfVxuICBvdXQgKz0gJycgKyAoJHZhbGlkKSArICcgPSBmYWxzZTtmb3IgKHZhciAnICsgKCRpKSArICc9MDsgJyArICgkaSkgKyAnPCcgKyAoJHZTY2hlbWEpICsgJy5sZW5ndGg7ICcgKyAoJGkpICsgJysrKSBpZiAoZXF1YWwoJyArICgkZGF0YSkgKyAnLCAnICsgKCR2U2NoZW1hKSArICdbJyArICgkaSkgKyAnXSkpIHsgJyArICgkdmFsaWQpICsgJyA9IHRydWU7IGJyZWFrOyB9JztcbiAgaWYgKCRpc0RhdGEpIHtcbiAgICBvdXQgKz0gJyAgfSAgJztcbiAgfVxuICBvdXQgKz0gJyBpZiAoIScgKyAoJHZhbGlkKSArICcpIHsgICAnO1xuICB2YXIgJCRvdXRTdGFjayA9ICQkb3V0U3RhY2sgfHwgW107XG4gICQkb3V0U3RhY2sucHVzaChvdXQpO1xuICBvdXQgPSAnJzsgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgaWYgKGl0LmNyZWF0ZUVycm9ycyAhPT0gZmFsc2UpIHtcbiAgICBvdXQgKz0gJyB7IGtleXdvcmQ6IFxcJycgKyAoJ2VudW0nKSArICdcXCcgLCBkYXRhUGF0aDogKGRhdGFQYXRoIHx8IFxcJ1xcJykgKyAnICsgKGl0LmVycm9yUGF0aCkgKyAnICwgc2NoZW1hUGF0aDogJyArIChpdC51dGlsLnRvUXVvdGVkU3RyaW5nKCRlcnJTY2hlbWFQYXRoKSkgKyAnICwgcGFyYW1zOiB7IGFsbG93ZWRWYWx1ZXM6IHNjaGVtYScgKyAoJGx2bCkgKyAnIH0gJztcbiAgICBpZiAoaXQub3B0cy5tZXNzYWdlcyAhPT0gZmFsc2UpIHtcbiAgICAgIG91dCArPSAnICwgbWVzc2FnZTogXFwnc2hvdWxkIGJlIGVxdWFsIHRvIG9uZSBvZiB0aGUgYWxsb3dlZCB2YWx1ZXNcXCcgJztcbiAgICB9XG4gICAgaWYgKGl0Lm9wdHMudmVyYm9zZSkge1xuICAgICAgb3V0ICs9ICcgLCBzY2hlbWE6IHZhbGlkYXRlLnNjaGVtYScgKyAoJHNjaGVtYVBhdGgpICsgJyAsIHBhcmVudFNjaGVtYTogdmFsaWRhdGUuc2NoZW1hJyArIChpdC5zY2hlbWFQYXRoKSArICcgLCBkYXRhOiAnICsgKCRkYXRhKSArICcgJztcbiAgICB9XG4gICAgb3V0ICs9ICcgfSAnO1xuICB9IGVsc2Uge1xuICAgIG91dCArPSAnIHt9ICc7XG4gIH1cbiAgdmFyIF9fZXJyID0gb3V0O1xuICBvdXQgPSAkJG91dFN0YWNrLnBvcCgpO1xuICBpZiAoIWl0LmNvbXBvc2l0ZVJ1bGUgJiYgJGJyZWFrT25FcnJvcikge1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgIGlmIChpdC5hc3luYykge1xuICAgICAgb3V0ICs9ICcgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihbJyArIChfX2VycikgKyAnXSk7ICc7XG4gICAgfSBlbHNlIHtcbiAgICAgIG91dCArPSAnIHZhbGlkYXRlLmVycm9ycyA9IFsnICsgKF9fZXJyKSArICddOyByZXR1cm4gZmFsc2U7ICc7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIG91dCArPSAnIHZhciBlcnIgPSAnICsgKF9fZXJyKSArICc7ICBpZiAodkVycm9ycyA9PT0gbnVsbCkgdkVycm9ycyA9IFtlcnJdOyBlbHNlIHZFcnJvcnMucHVzaChlcnIpOyBlcnJvcnMrKzsgJztcbiAgfVxuICBvdXQgKz0gJyB9JztcbiAgaWYgKCRicmVha09uRXJyb3IpIHtcbiAgICBvdXQgKz0gJyBlbHNlIHsgJztcbiAgfVxuICByZXR1cm4gb3V0O1xufVxuIiwgIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZ2VuZXJhdGVfZm9ybWF0KGl0LCAka2V5d29yZCwgJHJ1bGVUeXBlKSB7XG4gIHZhciBvdXQgPSAnICc7XG4gIHZhciAkbHZsID0gaXQubGV2ZWw7XG4gIHZhciAkZGF0YUx2bCA9IGl0LmRhdGFMZXZlbDtcbiAgdmFyICRzY2hlbWEgPSBpdC5zY2hlbWFbJGtleXdvcmRdO1xuICB2YXIgJHNjaGVtYVBhdGggPSBpdC5zY2hlbWFQYXRoICsgaXQudXRpbC5nZXRQcm9wZXJ0eSgka2V5d29yZCk7XG4gIHZhciAkZXJyU2NoZW1hUGF0aCA9IGl0LmVyclNjaGVtYVBhdGggKyAnLycgKyAka2V5d29yZDtcbiAgdmFyICRicmVha09uRXJyb3IgPSAhaXQub3B0cy5hbGxFcnJvcnM7XG4gIHZhciAkZGF0YSA9ICdkYXRhJyArICgkZGF0YUx2bCB8fCAnJyk7XG4gIGlmIChpdC5vcHRzLmZvcm1hdCA9PT0gZmFsc2UpIHtcbiAgICBpZiAoJGJyZWFrT25FcnJvcikge1xuICAgICAgb3V0ICs9ICcgaWYgKHRydWUpIHsgJztcbiAgICB9XG4gICAgcmV0dXJuIG91dDtcbiAgfVxuICB2YXIgJGlzRGF0YSA9IGl0Lm9wdHMuJGRhdGEgJiYgJHNjaGVtYSAmJiAkc2NoZW1hLiRkYXRhLFxuICAgICRzY2hlbWFWYWx1ZTtcbiAgaWYgKCRpc0RhdGEpIHtcbiAgICBvdXQgKz0gJyB2YXIgc2NoZW1hJyArICgkbHZsKSArICcgPSAnICsgKGl0LnV0aWwuZ2V0RGF0YSgkc2NoZW1hLiRkYXRhLCAkZGF0YUx2bCwgaXQuZGF0YVBhdGhBcnIpKSArICc7ICc7XG4gICAgJHNjaGVtYVZhbHVlID0gJ3NjaGVtYScgKyAkbHZsO1xuICB9IGVsc2Uge1xuICAgICRzY2hlbWFWYWx1ZSA9ICRzY2hlbWE7XG4gIH1cbiAgdmFyICR1bmtub3duRm9ybWF0cyA9IGl0Lm9wdHMudW5rbm93bkZvcm1hdHMsXG4gICAgJGFsbG93VW5rbm93biA9IEFycmF5LmlzQXJyYXkoJHVua25vd25Gb3JtYXRzKTtcbiAgaWYgKCRpc0RhdGEpIHtcbiAgICB2YXIgJGZvcm1hdCA9ICdmb3JtYXQnICsgJGx2bCxcbiAgICAgICRpc09iamVjdCA9ICdpc09iamVjdCcgKyAkbHZsLFxuICAgICAgJGZvcm1hdFR5cGUgPSAnZm9ybWF0VHlwZScgKyAkbHZsO1xuICAgIG91dCArPSAnIHZhciAnICsgKCRmb3JtYXQpICsgJyA9IGZvcm1hdHNbJyArICgkc2NoZW1hVmFsdWUpICsgJ107IHZhciAnICsgKCRpc09iamVjdCkgKyAnID0gdHlwZW9mICcgKyAoJGZvcm1hdCkgKyAnID09IFxcJ29iamVjdFxcJyAmJiAhKCcgKyAoJGZvcm1hdCkgKyAnIGluc3RhbmNlb2YgUmVnRXhwKSAmJiAnICsgKCRmb3JtYXQpICsgJy52YWxpZGF0ZTsgdmFyICcgKyAoJGZvcm1hdFR5cGUpICsgJyA9ICcgKyAoJGlzT2JqZWN0KSArICcgJiYgJyArICgkZm9ybWF0KSArICcudHlwZSB8fCBcXCdzdHJpbmdcXCc7IGlmICgnICsgKCRpc09iamVjdCkgKyAnKSB7ICc7XG4gICAgaWYgKGl0LmFzeW5jKSB7XG4gICAgICBvdXQgKz0gJyB2YXIgYXN5bmMnICsgKCRsdmwpICsgJyA9ICcgKyAoJGZvcm1hdCkgKyAnLmFzeW5jOyAnO1xuICAgIH1cbiAgICBvdXQgKz0gJyAnICsgKCRmb3JtYXQpICsgJyA9ICcgKyAoJGZvcm1hdCkgKyAnLnZhbGlkYXRlOyB9IGlmICggICc7XG4gICAgaWYgKCRpc0RhdGEpIHtcbiAgICAgIG91dCArPSAnICgnICsgKCRzY2hlbWFWYWx1ZSkgKyAnICE9PSB1bmRlZmluZWQgJiYgdHlwZW9mICcgKyAoJHNjaGVtYVZhbHVlKSArICcgIT0gXFwnc3RyaW5nXFwnKSB8fCAnO1xuICAgIH1cbiAgICBvdXQgKz0gJyAoJztcbiAgICBpZiAoJHVua25vd25Gb3JtYXRzICE9ICdpZ25vcmUnKSB7XG4gICAgICBvdXQgKz0gJyAoJyArICgkc2NoZW1hVmFsdWUpICsgJyAmJiAhJyArICgkZm9ybWF0KSArICcgJztcbiAgICAgIGlmICgkYWxsb3dVbmtub3duKSB7XG4gICAgICAgIG91dCArPSAnICYmIHNlbGYuX29wdHMudW5rbm93bkZvcm1hdHMuaW5kZXhPZignICsgKCRzY2hlbWFWYWx1ZSkgKyAnKSA9PSAtMSAnO1xuICAgICAgfVxuICAgICAgb3V0ICs9ICcpIHx8ICc7XG4gICAgfVxuICAgIG91dCArPSAnICgnICsgKCRmb3JtYXQpICsgJyAmJiAnICsgKCRmb3JtYXRUeXBlKSArICcgPT0gXFwnJyArICgkcnVsZVR5cGUpICsgJ1xcJyAmJiAhKHR5cGVvZiAnICsgKCRmb3JtYXQpICsgJyA9PSBcXCdmdW5jdGlvblxcJyA/ICc7XG4gICAgaWYgKGl0LmFzeW5jKSB7XG4gICAgICBvdXQgKz0gJyAoYXN5bmMnICsgKCRsdmwpICsgJyA/IGF3YWl0ICcgKyAoJGZvcm1hdCkgKyAnKCcgKyAoJGRhdGEpICsgJykgOiAnICsgKCRmb3JtYXQpICsgJygnICsgKCRkYXRhKSArICcpKSAnO1xuICAgIH0gZWxzZSB7XG4gICAgICBvdXQgKz0gJyAnICsgKCRmb3JtYXQpICsgJygnICsgKCRkYXRhKSArICcpICc7XG4gICAgfVxuICAgIG91dCArPSAnIDogJyArICgkZm9ybWF0KSArICcudGVzdCgnICsgKCRkYXRhKSArICcpKSkpKSB7JztcbiAgfSBlbHNlIHtcbiAgICB2YXIgJGZvcm1hdCA9IGl0LmZvcm1hdHNbJHNjaGVtYV07XG4gICAgaWYgKCEkZm9ybWF0KSB7XG4gICAgICBpZiAoJHVua25vd25Gb3JtYXRzID09ICdpZ25vcmUnKSB7XG4gICAgICAgIGl0LmxvZ2dlci53YXJuKCd1bmtub3duIGZvcm1hdCBcIicgKyAkc2NoZW1hICsgJ1wiIGlnbm9yZWQgaW4gc2NoZW1hIGF0IHBhdGggXCInICsgaXQuZXJyU2NoZW1hUGF0aCArICdcIicpO1xuICAgICAgICBpZiAoJGJyZWFrT25FcnJvcikge1xuICAgICAgICAgIG91dCArPSAnIGlmICh0cnVlKSB7ICc7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG91dDtcbiAgICAgIH0gZWxzZSBpZiAoJGFsbG93VW5rbm93biAmJiAkdW5rbm93bkZvcm1hdHMuaW5kZXhPZigkc2NoZW1hKSA+PSAwKSB7XG4gICAgICAgIGlmICgkYnJlYWtPbkVycm9yKSB7XG4gICAgICAgICAgb3V0ICs9ICcgaWYgKHRydWUpIHsgJztcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gb3V0O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCd1bmtub3duIGZvcm1hdCBcIicgKyAkc2NoZW1hICsgJ1wiIGlzIHVzZWQgaW4gc2NoZW1hIGF0IHBhdGggXCInICsgaXQuZXJyU2NoZW1hUGF0aCArICdcIicpO1xuICAgICAgfVxuICAgIH1cbiAgICB2YXIgJGlzT2JqZWN0ID0gdHlwZW9mICRmb3JtYXQgPT0gJ29iamVjdCcgJiYgISgkZm9ybWF0IGluc3RhbmNlb2YgUmVnRXhwKSAmJiAkZm9ybWF0LnZhbGlkYXRlO1xuICAgIHZhciAkZm9ybWF0VHlwZSA9ICRpc09iamVjdCAmJiAkZm9ybWF0LnR5cGUgfHwgJ3N0cmluZyc7XG4gICAgaWYgKCRpc09iamVjdCkge1xuICAgICAgdmFyICRhc3luYyA9ICRmb3JtYXQuYXN5bmMgPT09IHRydWU7XG4gICAgICAkZm9ybWF0ID0gJGZvcm1hdC52YWxpZGF0ZTtcbiAgICB9XG4gICAgaWYgKCRmb3JtYXRUeXBlICE9ICRydWxlVHlwZSkge1xuICAgICAgaWYgKCRicmVha09uRXJyb3IpIHtcbiAgICAgICAgb3V0ICs9ICcgaWYgKHRydWUpIHsgJztcbiAgICAgIH1cbiAgICAgIHJldHVybiBvdXQ7XG4gICAgfVxuICAgIGlmICgkYXN5bmMpIHtcbiAgICAgIGlmICghaXQuYXN5bmMpIHRocm93IG5ldyBFcnJvcignYXN5bmMgZm9ybWF0IGluIHN5bmMgc2NoZW1hJyk7XG4gICAgICB2YXIgJGZvcm1hdFJlZiA9ICdmb3JtYXRzJyArIGl0LnV0aWwuZ2V0UHJvcGVydHkoJHNjaGVtYSkgKyAnLnZhbGlkYXRlJztcbiAgICAgIG91dCArPSAnIGlmICghKGF3YWl0ICcgKyAoJGZvcm1hdFJlZikgKyAnKCcgKyAoJGRhdGEpICsgJykpKSB7ICc7XG4gICAgfSBlbHNlIHtcbiAgICAgIG91dCArPSAnIGlmICghICc7XG4gICAgICB2YXIgJGZvcm1hdFJlZiA9ICdmb3JtYXRzJyArIGl0LnV0aWwuZ2V0UHJvcGVydHkoJHNjaGVtYSk7XG4gICAgICBpZiAoJGlzT2JqZWN0KSAkZm9ybWF0UmVmICs9ICcudmFsaWRhdGUnO1xuICAgICAgaWYgKHR5cGVvZiAkZm9ybWF0ID09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgb3V0ICs9ICcgJyArICgkZm9ybWF0UmVmKSArICcoJyArICgkZGF0YSkgKyAnKSAnO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb3V0ICs9ICcgJyArICgkZm9ybWF0UmVmKSArICcudGVzdCgnICsgKCRkYXRhKSArICcpICc7XG4gICAgICB9XG4gICAgICBvdXQgKz0gJykgeyAnO1xuICAgIH1cbiAgfVxuICB2YXIgJCRvdXRTdGFjayA9ICQkb3V0U3RhY2sgfHwgW107XG4gICQkb3V0U3RhY2sucHVzaChvdXQpO1xuICBvdXQgPSAnJzsgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgaWYgKGl0LmNyZWF0ZUVycm9ycyAhPT0gZmFsc2UpIHtcbiAgICBvdXQgKz0gJyB7IGtleXdvcmQ6IFxcJycgKyAoJ2Zvcm1hdCcpICsgJ1xcJyAsIGRhdGFQYXRoOiAoZGF0YVBhdGggfHwgXFwnXFwnKSArICcgKyAoaXQuZXJyb3JQYXRoKSArICcgLCBzY2hlbWFQYXRoOiAnICsgKGl0LnV0aWwudG9RdW90ZWRTdHJpbmcoJGVyclNjaGVtYVBhdGgpKSArICcgLCBwYXJhbXM6IHsgZm9ybWF0OiAgJztcbiAgICBpZiAoJGlzRGF0YSkge1xuICAgICAgb3V0ICs9ICcnICsgKCRzY2hlbWFWYWx1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG91dCArPSAnJyArIChpdC51dGlsLnRvUXVvdGVkU3RyaW5nKCRzY2hlbWEpKTtcbiAgICB9XG4gICAgb3V0ICs9ICcgIH0gJztcbiAgICBpZiAoaXQub3B0cy5tZXNzYWdlcyAhPT0gZmFsc2UpIHtcbiAgICAgIG91dCArPSAnICwgbWVzc2FnZTogXFwnc2hvdWxkIG1hdGNoIGZvcm1hdCBcIic7XG4gICAgICBpZiAoJGlzRGF0YSkge1xuICAgICAgICBvdXQgKz0gJ1xcJyArICcgKyAoJHNjaGVtYVZhbHVlKSArICcgKyBcXCcnO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb3V0ICs9ICcnICsgKGl0LnV0aWwuZXNjYXBlUXVvdGVzKCRzY2hlbWEpKTtcbiAgICAgIH1cbiAgICAgIG91dCArPSAnXCJcXCcgJztcbiAgICB9XG4gICAgaWYgKGl0Lm9wdHMudmVyYm9zZSkge1xuICAgICAgb3V0ICs9ICcgLCBzY2hlbWE6ICAnO1xuICAgICAgaWYgKCRpc0RhdGEpIHtcbiAgICAgICAgb3V0ICs9ICd2YWxpZGF0ZS5zY2hlbWEnICsgKCRzY2hlbWFQYXRoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG91dCArPSAnJyArIChpdC51dGlsLnRvUXVvdGVkU3RyaW5nKCRzY2hlbWEpKTtcbiAgICAgIH1cbiAgICAgIG91dCArPSAnICAgICAgICAgLCBwYXJlbnRTY2hlbWE6IHZhbGlkYXRlLnNjaGVtYScgKyAoaXQuc2NoZW1hUGF0aCkgKyAnICwgZGF0YTogJyArICgkZGF0YSkgKyAnICc7XG4gICAgfVxuICAgIG91dCArPSAnIH0gJztcbiAgfSBlbHNlIHtcbiAgICBvdXQgKz0gJyB7fSAnO1xuICB9XG4gIHZhciBfX2VyciA9IG91dDtcbiAgb3V0ID0gJCRvdXRTdGFjay5wb3AoKTtcbiAgaWYgKCFpdC5jb21wb3NpdGVSdWxlICYmICRicmVha09uRXJyb3IpIHtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICBpZiAoaXQuYXN5bmMpIHtcbiAgICAgIG91dCArPSAnIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoWycgKyAoX19lcnIpICsgJ10pOyAnO1xuICAgIH0gZWxzZSB7XG4gICAgICBvdXQgKz0gJyB2YWxpZGF0ZS5lcnJvcnMgPSBbJyArIChfX2VycikgKyAnXTsgcmV0dXJuIGZhbHNlOyAnO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBvdXQgKz0gJyB2YXIgZXJyID0gJyArIChfX2VycikgKyAnOyAgaWYgKHZFcnJvcnMgPT09IG51bGwpIHZFcnJvcnMgPSBbZXJyXTsgZWxzZSB2RXJyb3JzLnB1c2goZXJyKTsgZXJyb3JzKys7ICc7XG4gIH1cbiAgb3V0ICs9ICcgfSAnO1xuICBpZiAoJGJyZWFrT25FcnJvcikge1xuICAgIG91dCArPSAnIGVsc2UgeyAnO1xuICB9XG4gIHJldHVybiBvdXQ7XG59XG4iLCAiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBnZW5lcmF0ZV9pZihpdCwgJGtleXdvcmQsICRydWxlVHlwZSkge1xuICB2YXIgb3V0ID0gJyAnO1xuICB2YXIgJGx2bCA9IGl0LmxldmVsO1xuICB2YXIgJGRhdGFMdmwgPSBpdC5kYXRhTGV2ZWw7XG4gIHZhciAkc2NoZW1hID0gaXQuc2NoZW1hWyRrZXl3b3JkXTtcbiAgdmFyICRzY2hlbWFQYXRoID0gaXQuc2NoZW1hUGF0aCArIGl0LnV0aWwuZ2V0UHJvcGVydHkoJGtleXdvcmQpO1xuICB2YXIgJGVyclNjaGVtYVBhdGggPSBpdC5lcnJTY2hlbWFQYXRoICsgJy8nICsgJGtleXdvcmQ7XG4gIHZhciAkYnJlYWtPbkVycm9yID0gIWl0Lm9wdHMuYWxsRXJyb3JzO1xuICB2YXIgJGRhdGEgPSAnZGF0YScgKyAoJGRhdGFMdmwgfHwgJycpO1xuICB2YXIgJHZhbGlkID0gJ3ZhbGlkJyArICRsdmw7XG4gIHZhciAkZXJycyA9ICdlcnJzX18nICsgJGx2bDtcbiAgdmFyICRpdCA9IGl0LnV0aWwuY29weShpdCk7XG4gICRpdC5sZXZlbCsrO1xuICB2YXIgJG5leHRWYWxpZCA9ICd2YWxpZCcgKyAkaXQubGV2ZWw7XG4gIHZhciAkdGhlblNjaCA9IGl0LnNjaGVtYVsndGhlbiddLFxuICAgICRlbHNlU2NoID0gaXQuc2NoZW1hWydlbHNlJ10sXG4gICAgJHRoZW5QcmVzZW50ID0gJHRoZW5TY2ggIT09IHVuZGVmaW5lZCAmJiAoaXQub3B0cy5zdHJpY3RLZXl3b3JkcyA/ICh0eXBlb2YgJHRoZW5TY2ggPT0gJ29iamVjdCcgJiYgT2JqZWN0LmtleXMoJHRoZW5TY2gpLmxlbmd0aCA+IDApIHx8ICR0aGVuU2NoID09PSBmYWxzZSA6IGl0LnV0aWwuc2NoZW1hSGFzUnVsZXMoJHRoZW5TY2gsIGl0LlJVTEVTLmFsbCkpLFxuICAgICRlbHNlUHJlc2VudCA9ICRlbHNlU2NoICE9PSB1bmRlZmluZWQgJiYgKGl0Lm9wdHMuc3RyaWN0S2V5d29yZHMgPyAodHlwZW9mICRlbHNlU2NoID09ICdvYmplY3QnICYmIE9iamVjdC5rZXlzKCRlbHNlU2NoKS5sZW5ndGggPiAwKSB8fCAkZWxzZVNjaCA9PT0gZmFsc2UgOiBpdC51dGlsLnNjaGVtYUhhc1J1bGVzKCRlbHNlU2NoLCBpdC5SVUxFUy5hbGwpKSxcbiAgICAkY3VycmVudEJhc2VJZCA9ICRpdC5iYXNlSWQ7XG4gIGlmICgkdGhlblByZXNlbnQgfHwgJGVsc2VQcmVzZW50KSB7XG4gICAgdmFyICRpZkNsYXVzZTtcbiAgICAkaXQuY3JlYXRlRXJyb3JzID0gZmFsc2U7XG4gICAgJGl0LnNjaGVtYSA9ICRzY2hlbWE7XG4gICAgJGl0LnNjaGVtYVBhdGggPSAkc2NoZW1hUGF0aDtcbiAgICAkaXQuZXJyU2NoZW1hUGF0aCA9ICRlcnJTY2hlbWFQYXRoO1xuICAgIG91dCArPSAnIHZhciAnICsgKCRlcnJzKSArICcgPSBlcnJvcnM7IHZhciAnICsgKCR2YWxpZCkgKyAnID0gdHJ1ZTsgICc7XG4gICAgdmFyICR3YXNDb21wb3NpdGUgPSBpdC5jb21wb3NpdGVSdWxlO1xuICAgIGl0LmNvbXBvc2l0ZVJ1bGUgPSAkaXQuY29tcG9zaXRlUnVsZSA9IHRydWU7XG4gICAgb3V0ICs9ICcgICcgKyAoaXQudmFsaWRhdGUoJGl0KSkgKyAnICc7XG4gICAgJGl0LmJhc2VJZCA9ICRjdXJyZW50QmFzZUlkO1xuICAgICRpdC5jcmVhdGVFcnJvcnMgPSB0cnVlO1xuICAgIG91dCArPSAnICBlcnJvcnMgPSAnICsgKCRlcnJzKSArICc7IGlmICh2RXJyb3JzICE9PSBudWxsKSB7IGlmICgnICsgKCRlcnJzKSArICcpIHZFcnJvcnMubGVuZ3RoID0gJyArICgkZXJycykgKyAnOyBlbHNlIHZFcnJvcnMgPSBudWxsOyB9ICAnO1xuICAgIGl0LmNvbXBvc2l0ZVJ1bGUgPSAkaXQuY29tcG9zaXRlUnVsZSA9ICR3YXNDb21wb3NpdGU7XG4gICAgaWYgKCR0aGVuUHJlc2VudCkge1xuICAgICAgb3V0ICs9ICcgaWYgKCcgKyAoJG5leHRWYWxpZCkgKyAnKSB7ICAnO1xuICAgICAgJGl0LnNjaGVtYSA9IGl0LnNjaGVtYVsndGhlbiddO1xuICAgICAgJGl0LnNjaGVtYVBhdGggPSBpdC5zY2hlbWFQYXRoICsgJy50aGVuJztcbiAgICAgICRpdC5lcnJTY2hlbWFQYXRoID0gaXQuZXJyU2NoZW1hUGF0aCArICcvdGhlbic7XG4gICAgICBvdXQgKz0gJyAgJyArIChpdC52YWxpZGF0ZSgkaXQpKSArICcgJztcbiAgICAgICRpdC5iYXNlSWQgPSAkY3VycmVudEJhc2VJZDtcbiAgICAgIG91dCArPSAnICcgKyAoJHZhbGlkKSArICcgPSAnICsgKCRuZXh0VmFsaWQpICsgJzsgJztcbiAgICAgIGlmICgkdGhlblByZXNlbnQgJiYgJGVsc2VQcmVzZW50KSB7XG4gICAgICAgICRpZkNsYXVzZSA9ICdpZkNsYXVzZScgKyAkbHZsO1xuICAgICAgICBvdXQgKz0gJyB2YXIgJyArICgkaWZDbGF1c2UpICsgJyA9IFxcJ3RoZW5cXCc7ICc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAkaWZDbGF1c2UgPSAnXFwndGhlblxcJyc7XG4gICAgICB9XG4gICAgICBvdXQgKz0gJyB9ICc7XG4gICAgICBpZiAoJGVsc2VQcmVzZW50KSB7XG4gICAgICAgIG91dCArPSAnIGVsc2UgeyAnO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBvdXQgKz0gJyBpZiAoIScgKyAoJG5leHRWYWxpZCkgKyAnKSB7ICc7XG4gICAgfVxuICAgIGlmICgkZWxzZVByZXNlbnQpIHtcbiAgICAgICRpdC5zY2hlbWEgPSBpdC5zY2hlbWFbJ2Vsc2UnXTtcbiAgICAgICRpdC5zY2hlbWFQYXRoID0gaXQuc2NoZW1hUGF0aCArICcuZWxzZSc7XG4gICAgICAkaXQuZXJyU2NoZW1hUGF0aCA9IGl0LmVyclNjaGVtYVBhdGggKyAnL2Vsc2UnO1xuICAgICAgb3V0ICs9ICcgICcgKyAoaXQudmFsaWRhdGUoJGl0KSkgKyAnICc7XG4gICAgICAkaXQuYmFzZUlkID0gJGN1cnJlbnRCYXNlSWQ7XG4gICAgICBvdXQgKz0gJyAnICsgKCR2YWxpZCkgKyAnID0gJyArICgkbmV4dFZhbGlkKSArICc7ICc7XG4gICAgICBpZiAoJHRoZW5QcmVzZW50ICYmICRlbHNlUHJlc2VudCkge1xuICAgICAgICAkaWZDbGF1c2UgPSAnaWZDbGF1c2UnICsgJGx2bDtcbiAgICAgICAgb3V0ICs9ICcgdmFyICcgKyAoJGlmQ2xhdXNlKSArICcgPSBcXCdlbHNlXFwnOyAnO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgJGlmQ2xhdXNlID0gJ1xcJ2Vsc2VcXCcnO1xuICAgICAgfVxuICAgICAgb3V0ICs9ICcgfSAnO1xuICAgIH1cbiAgICBvdXQgKz0gJyBpZiAoIScgKyAoJHZhbGlkKSArICcpIHsgICB2YXIgZXJyID0gICAnOyAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgIGlmIChpdC5jcmVhdGVFcnJvcnMgIT09IGZhbHNlKSB7XG4gICAgICBvdXQgKz0gJyB7IGtleXdvcmQ6IFxcJycgKyAoJ2lmJykgKyAnXFwnICwgZGF0YVBhdGg6IChkYXRhUGF0aCB8fCBcXCdcXCcpICsgJyArIChpdC5lcnJvclBhdGgpICsgJyAsIHNjaGVtYVBhdGg6ICcgKyAoaXQudXRpbC50b1F1b3RlZFN0cmluZygkZXJyU2NoZW1hUGF0aCkpICsgJyAsIHBhcmFtczogeyBmYWlsaW5nS2V5d29yZDogJyArICgkaWZDbGF1c2UpICsgJyB9ICc7XG4gICAgICBpZiAoaXQub3B0cy5tZXNzYWdlcyAhPT0gZmFsc2UpIHtcbiAgICAgICAgb3V0ICs9ICcgLCBtZXNzYWdlOiBcXCdzaG91bGQgbWF0Y2ggXCJcXCcgKyAnICsgKCRpZkNsYXVzZSkgKyAnICsgXFwnXCIgc2NoZW1hXFwnICc7XG4gICAgICB9XG4gICAgICBpZiAoaXQub3B0cy52ZXJib3NlKSB7XG4gICAgICAgIG91dCArPSAnICwgc2NoZW1hOiB2YWxpZGF0ZS5zY2hlbWEnICsgKCRzY2hlbWFQYXRoKSArICcgLCBwYXJlbnRTY2hlbWE6IHZhbGlkYXRlLnNjaGVtYScgKyAoaXQuc2NoZW1hUGF0aCkgKyAnICwgZGF0YTogJyArICgkZGF0YSkgKyAnICc7XG4gICAgICB9XG4gICAgICBvdXQgKz0gJyB9ICc7XG4gICAgfSBlbHNlIHtcbiAgICAgIG91dCArPSAnIHt9ICc7XG4gICAgfVxuICAgIG91dCArPSAnOyAgaWYgKHZFcnJvcnMgPT09IG51bGwpIHZFcnJvcnMgPSBbZXJyXTsgZWxzZSB2RXJyb3JzLnB1c2goZXJyKTsgZXJyb3JzKys7ICc7XG4gICAgaWYgKCFpdC5jb21wb3NpdGVSdWxlICYmICRicmVha09uRXJyb3IpIHtcbiAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAgaWYgKGl0LmFzeW5jKSB7XG4gICAgICAgIG91dCArPSAnIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IodkVycm9ycyk7ICc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvdXQgKz0gJyB2YWxpZGF0ZS5lcnJvcnMgPSB2RXJyb3JzOyByZXR1cm4gZmFsc2U7ICc7XG4gICAgICB9XG4gICAgfVxuICAgIG91dCArPSAnIH0gICAnO1xuICAgIGlmICgkYnJlYWtPbkVycm9yKSB7XG4gICAgICBvdXQgKz0gJyBlbHNlIHsgJztcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgaWYgKCRicmVha09uRXJyb3IpIHtcbiAgICAgIG91dCArPSAnIGlmICh0cnVlKSB7ICc7XG4gICAgfVxuICB9XG4gIHJldHVybiBvdXQ7XG59XG4iLCAiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBnZW5lcmF0ZV9pdGVtcyhpdCwgJGtleXdvcmQsICRydWxlVHlwZSkge1xuICB2YXIgb3V0ID0gJyAnO1xuICB2YXIgJGx2bCA9IGl0LmxldmVsO1xuICB2YXIgJGRhdGFMdmwgPSBpdC5kYXRhTGV2ZWw7XG4gIHZhciAkc2NoZW1hID0gaXQuc2NoZW1hWyRrZXl3b3JkXTtcbiAgdmFyICRzY2hlbWFQYXRoID0gaXQuc2NoZW1hUGF0aCArIGl0LnV0aWwuZ2V0UHJvcGVydHkoJGtleXdvcmQpO1xuICB2YXIgJGVyclNjaGVtYVBhdGggPSBpdC5lcnJTY2hlbWFQYXRoICsgJy8nICsgJGtleXdvcmQ7XG4gIHZhciAkYnJlYWtPbkVycm9yID0gIWl0Lm9wdHMuYWxsRXJyb3JzO1xuICB2YXIgJGRhdGEgPSAnZGF0YScgKyAoJGRhdGFMdmwgfHwgJycpO1xuICB2YXIgJHZhbGlkID0gJ3ZhbGlkJyArICRsdmw7XG4gIHZhciAkZXJycyA9ICdlcnJzX18nICsgJGx2bDtcbiAgdmFyICRpdCA9IGl0LnV0aWwuY29weShpdCk7XG4gIHZhciAkY2xvc2luZ0JyYWNlcyA9ICcnO1xuICAkaXQubGV2ZWwrKztcbiAgdmFyICRuZXh0VmFsaWQgPSAndmFsaWQnICsgJGl0LmxldmVsO1xuICB2YXIgJGlkeCA9ICdpJyArICRsdmwsXG4gICAgJGRhdGFOeHQgPSAkaXQuZGF0YUxldmVsID0gaXQuZGF0YUxldmVsICsgMSxcbiAgICAkbmV4dERhdGEgPSAnZGF0YScgKyAkZGF0YU54dCxcbiAgICAkY3VycmVudEJhc2VJZCA9IGl0LmJhc2VJZDtcbiAgb3V0ICs9ICd2YXIgJyArICgkZXJycykgKyAnID0gZXJyb3JzO3ZhciAnICsgKCR2YWxpZCkgKyAnOyc7XG4gIGlmIChBcnJheS5pc0FycmF5KCRzY2hlbWEpKSB7XG4gICAgdmFyICRhZGRpdGlvbmFsSXRlbXMgPSBpdC5zY2hlbWEuYWRkaXRpb25hbEl0ZW1zO1xuICAgIGlmICgkYWRkaXRpb25hbEl0ZW1zID09PSBmYWxzZSkge1xuICAgICAgb3V0ICs9ICcgJyArICgkdmFsaWQpICsgJyA9ICcgKyAoJGRhdGEpICsgJy5sZW5ndGggPD0gJyArICgkc2NoZW1hLmxlbmd0aCkgKyAnOyAnO1xuICAgICAgdmFyICRjdXJyRXJyU2NoZW1hUGF0aCA9ICRlcnJTY2hlbWFQYXRoO1xuICAgICAgJGVyclNjaGVtYVBhdGggPSBpdC5lcnJTY2hlbWFQYXRoICsgJy9hZGRpdGlvbmFsSXRlbXMnO1xuICAgICAgb3V0ICs9ICcgIGlmICghJyArICgkdmFsaWQpICsgJykgeyAgICc7XG4gICAgICB2YXIgJCRvdXRTdGFjayA9ICQkb3V0U3RhY2sgfHwgW107XG4gICAgICAkJG91dFN0YWNrLnB1c2gob3V0KTtcbiAgICAgIG91dCA9ICcnOyAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgICAgaWYgKGl0LmNyZWF0ZUVycm9ycyAhPT0gZmFsc2UpIHtcbiAgICAgICAgb3V0ICs9ICcgeyBrZXl3b3JkOiBcXCcnICsgKCdhZGRpdGlvbmFsSXRlbXMnKSArICdcXCcgLCBkYXRhUGF0aDogKGRhdGFQYXRoIHx8IFxcJ1xcJykgKyAnICsgKGl0LmVycm9yUGF0aCkgKyAnICwgc2NoZW1hUGF0aDogJyArIChpdC51dGlsLnRvUXVvdGVkU3RyaW5nKCRlcnJTY2hlbWFQYXRoKSkgKyAnICwgcGFyYW1zOiB7IGxpbWl0OiAnICsgKCRzY2hlbWEubGVuZ3RoKSArICcgfSAnO1xuICAgICAgICBpZiAoaXQub3B0cy5tZXNzYWdlcyAhPT0gZmFsc2UpIHtcbiAgICAgICAgICBvdXQgKz0gJyAsIG1lc3NhZ2U6IFxcJ3Nob3VsZCBOT1QgaGF2ZSBtb3JlIHRoYW4gJyArICgkc2NoZW1hLmxlbmd0aCkgKyAnIGl0ZW1zXFwnICc7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGl0Lm9wdHMudmVyYm9zZSkge1xuICAgICAgICAgIG91dCArPSAnICwgc2NoZW1hOiBmYWxzZSAsIHBhcmVudFNjaGVtYTogdmFsaWRhdGUuc2NoZW1hJyArIChpdC5zY2hlbWFQYXRoKSArICcgLCBkYXRhOiAnICsgKCRkYXRhKSArICcgJztcbiAgICAgICAgfVxuICAgICAgICBvdXQgKz0gJyB9ICc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvdXQgKz0gJyB7fSAnO1xuICAgICAgfVxuICAgICAgdmFyIF9fZXJyID0gb3V0O1xuICAgICAgb3V0ID0gJCRvdXRTdGFjay5wb3AoKTtcbiAgICAgIGlmICghaXQuY29tcG9zaXRlUnVsZSAmJiAkYnJlYWtPbkVycm9yKSB7XG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAgICBpZiAoaXQuYXN5bmMpIHtcbiAgICAgICAgICBvdXQgKz0gJyB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKFsnICsgKF9fZXJyKSArICddKTsgJztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBvdXQgKz0gJyB2YWxpZGF0ZS5lcnJvcnMgPSBbJyArIChfX2VycikgKyAnXTsgcmV0dXJuIGZhbHNlOyAnO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvdXQgKz0gJyB2YXIgZXJyID0gJyArIChfX2VycikgKyAnOyAgaWYgKHZFcnJvcnMgPT09IG51bGwpIHZFcnJvcnMgPSBbZXJyXTsgZWxzZSB2RXJyb3JzLnB1c2goZXJyKTsgZXJyb3JzKys7ICc7XG4gICAgICB9XG4gICAgICBvdXQgKz0gJyB9ICc7XG4gICAgICAkZXJyU2NoZW1hUGF0aCA9ICRjdXJyRXJyU2NoZW1hUGF0aDtcbiAgICAgIGlmICgkYnJlYWtPbkVycm9yKSB7XG4gICAgICAgICRjbG9zaW5nQnJhY2VzICs9ICd9JztcbiAgICAgICAgb3V0ICs9ICcgZWxzZSB7ICc7XG4gICAgICB9XG4gICAgfVxuICAgIHZhciBhcnIxID0gJHNjaGVtYTtcbiAgICBpZiAoYXJyMSkge1xuICAgICAgdmFyICRzY2gsICRpID0gLTEsXG4gICAgICAgIGwxID0gYXJyMS5sZW5ndGggLSAxO1xuICAgICAgd2hpbGUgKCRpIDwgbDEpIHtcbiAgICAgICAgJHNjaCA9IGFycjFbJGkgKz0gMV07XG4gICAgICAgIGlmICgoaXQub3B0cy5zdHJpY3RLZXl3b3JkcyA/ICh0eXBlb2YgJHNjaCA9PSAnb2JqZWN0JyAmJiBPYmplY3Qua2V5cygkc2NoKS5sZW5ndGggPiAwKSB8fCAkc2NoID09PSBmYWxzZSA6IGl0LnV0aWwuc2NoZW1hSGFzUnVsZXMoJHNjaCwgaXQuUlVMRVMuYWxsKSkpIHtcbiAgICAgICAgICBvdXQgKz0gJyAnICsgKCRuZXh0VmFsaWQpICsgJyA9IHRydWU7IGlmICgnICsgKCRkYXRhKSArICcubGVuZ3RoID4gJyArICgkaSkgKyAnKSB7ICc7XG4gICAgICAgICAgdmFyICRwYXNzRGF0YSA9ICRkYXRhICsgJ1snICsgJGkgKyAnXSc7XG4gICAgICAgICAgJGl0LnNjaGVtYSA9ICRzY2g7XG4gICAgICAgICAgJGl0LnNjaGVtYVBhdGggPSAkc2NoZW1hUGF0aCArICdbJyArICRpICsgJ10nO1xuICAgICAgICAgICRpdC5lcnJTY2hlbWFQYXRoID0gJGVyclNjaGVtYVBhdGggKyAnLycgKyAkaTtcbiAgICAgICAgICAkaXQuZXJyb3JQYXRoID0gaXQudXRpbC5nZXRQYXRoRXhwcihpdC5lcnJvclBhdGgsICRpLCBpdC5vcHRzLmpzb25Qb2ludGVycywgdHJ1ZSk7XG4gICAgICAgICAgJGl0LmRhdGFQYXRoQXJyWyRkYXRhTnh0XSA9ICRpO1xuICAgICAgICAgIHZhciAkY29kZSA9IGl0LnZhbGlkYXRlKCRpdCk7XG4gICAgICAgICAgJGl0LmJhc2VJZCA9ICRjdXJyZW50QmFzZUlkO1xuICAgICAgICAgIGlmIChpdC51dGlsLnZhck9jY3VyZW5jZXMoJGNvZGUsICRuZXh0RGF0YSkgPCAyKSB7XG4gICAgICAgICAgICBvdXQgKz0gJyAnICsgKGl0LnV0aWwudmFyUmVwbGFjZSgkY29kZSwgJG5leHREYXRhLCAkcGFzc0RhdGEpKSArICcgJztcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgb3V0ICs9ICcgdmFyICcgKyAoJG5leHREYXRhKSArICcgPSAnICsgKCRwYXNzRGF0YSkgKyAnOyAnICsgKCRjb2RlKSArICcgJztcbiAgICAgICAgICB9XG4gICAgICAgICAgb3V0ICs9ICcgfSAgJztcbiAgICAgICAgICBpZiAoJGJyZWFrT25FcnJvcikge1xuICAgICAgICAgICAgb3V0ICs9ICcgaWYgKCcgKyAoJG5leHRWYWxpZCkgKyAnKSB7ICc7XG4gICAgICAgICAgICAkY2xvc2luZ0JyYWNlcyArPSAnfSc7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGlmICh0eXBlb2YgJGFkZGl0aW9uYWxJdGVtcyA9PSAnb2JqZWN0JyAmJiAoaXQub3B0cy5zdHJpY3RLZXl3b3JkcyA/ICh0eXBlb2YgJGFkZGl0aW9uYWxJdGVtcyA9PSAnb2JqZWN0JyAmJiBPYmplY3Qua2V5cygkYWRkaXRpb25hbEl0ZW1zKS5sZW5ndGggPiAwKSB8fCAkYWRkaXRpb25hbEl0ZW1zID09PSBmYWxzZSA6IGl0LnV0aWwuc2NoZW1hSGFzUnVsZXMoJGFkZGl0aW9uYWxJdGVtcywgaXQuUlVMRVMuYWxsKSkpIHtcbiAgICAgICRpdC5zY2hlbWEgPSAkYWRkaXRpb25hbEl0ZW1zO1xuICAgICAgJGl0LnNjaGVtYVBhdGggPSBpdC5zY2hlbWFQYXRoICsgJy5hZGRpdGlvbmFsSXRlbXMnO1xuICAgICAgJGl0LmVyclNjaGVtYVBhdGggPSBpdC5lcnJTY2hlbWFQYXRoICsgJy9hZGRpdGlvbmFsSXRlbXMnO1xuICAgICAgb3V0ICs9ICcgJyArICgkbmV4dFZhbGlkKSArICcgPSB0cnVlOyBpZiAoJyArICgkZGF0YSkgKyAnLmxlbmd0aCA+ICcgKyAoJHNjaGVtYS5sZW5ndGgpICsgJykgeyAgZm9yICh2YXIgJyArICgkaWR4KSArICcgPSAnICsgKCRzY2hlbWEubGVuZ3RoKSArICc7ICcgKyAoJGlkeCkgKyAnIDwgJyArICgkZGF0YSkgKyAnLmxlbmd0aDsgJyArICgkaWR4KSArICcrKykgeyAnO1xuICAgICAgJGl0LmVycm9yUGF0aCA9IGl0LnV0aWwuZ2V0UGF0aEV4cHIoaXQuZXJyb3JQYXRoLCAkaWR4LCBpdC5vcHRzLmpzb25Qb2ludGVycywgdHJ1ZSk7XG4gICAgICB2YXIgJHBhc3NEYXRhID0gJGRhdGEgKyAnWycgKyAkaWR4ICsgJ10nO1xuICAgICAgJGl0LmRhdGFQYXRoQXJyWyRkYXRhTnh0XSA9ICRpZHg7XG4gICAgICB2YXIgJGNvZGUgPSBpdC52YWxpZGF0ZSgkaXQpO1xuICAgICAgJGl0LmJhc2VJZCA9ICRjdXJyZW50QmFzZUlkO1xuICAgICAgaWYgKGl0LnV0aWwudmFyT2NjdXJlbmNlcygkY29kZSwgJG5leHREYXRhKSA8IDIpIHtcbiAgICAgICAgb3V0ICs9ICcgJyArIChpdC51dGlsLnZhclJlcGxhY2UoJGNvZGUsICRuZXh0RGF0YSwgJHBhc3NEYXRhKSkgKyAnICc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvdXQgKz0gJyB2YXIgJyArICgkbmV4dERhdGEpICsgJyA9ICcgKyAoJHBhc3NEYXRhKSArICc7ICcgKyAoJGNvZGUpICsgJyAnO1xuICAgICAgfVxuICAgICAgaWYgKCRicmVha09uRXJyb3IpIHtcbiAgICAgICAgb3V0ICs9ICcgaWYgKCEnICsgKCRuZXh0VmFsaWQpICsgJykgYnJlYWs7ICc7XG4gICAgICB9XG4gICAgICBvdXQgKz0gJyB9IH0gICc7XG4gICAgICBpZiAoJGJyZWFrT25FcnJvcikge1xuICAgICAgICBvdXQgKz0gJyBpZiAoJyArICgkbmV4dFZhbGlkKSArICcpIHsgJztcbiAgICAgICAgJGNsb3NpbmdCcmFjZXMgKz0gJ30nO1xuICAgICAgfVxuICAgIH1cbiAgfSBlbHNlIGlmICgoaXQub3B0cy5zdHJpY3RLZXl3b3JkcyA/ICh0eXBlb2YgJHNjaGVtYSA9PSAnb2JqZWN0JyAmJiBPYmplY3Qua2V5cygkc2NoZW1hKS5sZW5ndGggPiAwKSB8fCAkc2NoZW1hID09PSBmYWxzZSA6IGl0LnV0aWwuc2NoZW1hSGFzUnVsZXMoJHNjaGVtYSwgaXQuUlVMRVMuYWxsKSkpIHtcbiAgICAkaXQuc2NoZW1hID0gJHNjaGVtYTtcbiAgICAkaXQuc2NoZW1hUGF0aCA9ICRzY2hlbWFQYXRoO1xuICAgICRpdC5lcnJTY2hlbWFQYXRoID0gJGVyclNjaGVtYVBhdGg7XG4gICAgb3V0ICs9ICcgIGZvciAodmFyICcgKyAoJGlkeCkgKyAnID0gJyArICgwKSArICc7ICcgKyAoJGlkeCkgKyAnIDwgJyArICgkZGF0YSkgKyAnLmxlbmd0aDsgJyArICgkaWR4KSArICcrKykgeyAnO1xuICAgICRpdC5lcnJvclBhdGggPSBpdC51dGlsLmdldFBhdGhFeHByKGl0LmVycm9yUGF0aCwgJGlkeCwgaXQub3B0cy5qc29uUG9pbnRlcnMsIHRydWUpO1xuICAgIHZhciAkcGFzc0RhdGEgPSAkZGF0YSArICdbJyArICRpZHggKyAnXSc7XG4gICAgJGl0LmRhdGFQYXRoQXJyWyRkYXRhTnh0XSA9ICRpZHg7XG4gICAgdmFyICRjb2RlID0gaXQudmFsaWRhdGUoJGl0KTtcbiAgICAkaXQuYmFzZUlkID0gJGN1cnJlbnRCYXNlSWQ7XG4gICAgaWYgKGl0LnV0aWwudmFyT2NjdXJlbmNlcygkY29kZSwgJG5leHREYXRhKSA8IDIpIHtcbiAgICAgIG91dCArPSAnICcgKyAoaXQudXRpbC52YXJSZXBsYWNlKCRjb2RlLCAkbmV4dERhdGEsICRwYXNzRGF0YSkpICsgJyAnO1xuICAgIH0gZWxzZSB7XG4gICAgICBvdXQgKz0gJyB2YXIgJyArICgkbmV4dERhdGEpICsgJyA9ICcgKyAoJHBhc3NEYXRhKSArICc7ICcgKyAoJGNvZGUpICsgJyAnO1xuICAgIH1cbiAgICBpZiAoJGJyZWFrT25FcnJvcikge1xuICAgICAgb3V0ICs9ICcgaWYgKCEnICsgKCRuZXh0VmFsaWQpICsgJykgYnJlYWs7ICc7XG4gICAgfVxuICAgIG91dCArPSAnIH0nO1xuICB9XG4gIGlmICgkYnJlYWtPbkVycm9yKSB7XG4gICAgb3V0ICs9ICcgJyArICgkY2xvc2luZ0JyYWNlcykgKyAnIGlmICgnICsgKCRlcnJzKSArICcgPT0gZXJyb3JzKSB7JztcbiAgfVxuICByZXR1cm4gb3V0O1xufVxuIiwgIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZ2VuZXJhdGVfX2xpbWl0KGl0LCAka2V5d29yZCwgJHJ1bGVUeXBlKSB7XG4gIHZhciBvdXQgPSAnICc7XG4gIHZhciAkbHZsID0gaXQubGV2ZWw7XG4gIHZhciAkZGF0YUx2bCA9IGl0LmRhdGFMZXZlbDtcbiAgdmFyICRzY2hlbWEgPSBpdC5zY2hlbWFbJGtleXdvcmRdO1xuICB2YXIgJHNjaGVtYVBhdGggPSBpdC5zY2hlbWFQYXRoICsgaXQudXRpbC5nZXRQcm9wZXJ0eSgka2V5d29yZCk7XG4gIHZhciAkZXJyU2NoZW1hUGF0aCA9IGl0LmVyclNjaGVtYVBhdGggKyAnLycgKyAka2V5d29yZDtcbiAgdmFyICRicmVha09uRXJyb3IgPSAhaXQub3B0cy5hbGxFcnJvcnM7XG4gIHZhciAkZXJyb3JLZXl3b3JkO1xuICB2YXIgJGRhdGEgPSAnZGF0YScgKyAoJGRhdGFMdmwgfHwgJycpO1xuICB2YXIgJGlzRGF0YSA9IGl0Lm9wdHMuJGRhdGEgJiYgJHNjaGVtYSAmJiAkc2NoZW1hLiRkYXRhLFxuICAgICRzY2hlbWFWYWx1ZTtcbiAgaWYgKCRpc0RhdGEpIHtcbiAgICBvdXQgKz0gJyB2YXIgc2NoZW1hJyArICgkbHZsKSArICcgPSAnICsgKGl0LnV0aWwuZ2V0RGF0YSgkc2NoZW1hLiRkYXRhLCAkZGF0YUx2bCwgaXQuZGF0YVBhdGhBcnIpKSArICc7ICc7XG4gICAgJHNjaGVtYVZhbHVlID0gJ3NjaGVtYScgKyAkbHZsO1xuICB9IGVsc2Uge1xuICAgICRzY2hlbWFWYWx1ZSA9ICRzY2hlbWE7XG4gIH1cbiAgdmFyICRpc01heCA9ICRrZXl3b3JkID09ICdtYXhpbXVtJyxcbiAgICAkZXhjbHVzaXZlS2V5d29yZCA9ICRpc01heCA/ICdleGNsdXNpdmVNYXhpbXVtJyA6ICdleGNsdXNpdmVNaW5pbXVtJyxcbiAgICAkc2NoZW1hRXhjbCA9IGl0LnNjaGVtYVskZXhjbHVzaXZlS2V5d29yZF0sXG4gICAgJGlzRGF0YUV4Y2wgPSBpdC5vcHRzLiRkYXRhICYmICRzY2hlbWFFeGNsICYmICRzY2hlbWFFeGNsLiRkYXRhLFxuICAgICRvcCA9ICRpc01heCA/ICc8JyA6ICc+JyxcbiAgICAkbm90T3AgPSAkaXNNYXggPyAnPicgOiAnPCcsXG4gICAgJGVycm9yS2V5d29yZCA9IHVuZGVmaW5lZDtcbiAgaWYgKCEoJGlzRGF0YSB8fCB0eXBlb2YgJHNjaGVtYSA9PSAnbnVtYmVyJyB8fCAkc2NoZW1hID09PSB1bmRlZmluZWQpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCRrZXl3b3JkICsgJyBtdXN0IGJlIG51bWJlcicpO1xuICB9XG4gIGlmICghKCRpc0RhdGFFeGNsIHx8ICRzY2hlbWFFeGNsID09PSB1bmRlZmluZWQgfHwgdHlwZW9mICRzY2hlbWFFeGNsID09ICdudW1iZXInIHx8IHR5cGVvZiAkc2NoZW1hRXhjbCA9PSAnYm9vbGVhbicpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCRleGNsdXNpdmVLZXl3b3JkICsgJyBtdXN0IGJlIG51bWJlciBvciBib29sZWFuJyk7XG4gIH1cbiAgaWYgKCRpc0RhdGFFeGNsKSB7XG4gICAgdmFyICRzY2hlbWFWYWx1ZUV4Y2wgPSBpdC51dGlsLmdldERhdGEoJHNjaGVtYUV4Y2wuJGRhdGEsICRkYXRhTHZsLCBpdC5kYXRhUGF0aEFyciksXG4gICAgICAkZXhjbHVzaXZlID0gJ2V4Y2x1c2l2ZScgKyAkbHZsLFxuICAgICAgJGV4Y2xUeXBlID0gJ2V4Y2xUeXBlJyArICRsdmwsXG4gICAgICAkZXhjbElzTnVtYmVyID0gJ2V4Y2xJc051bWJlcicgKyAkbHZsLFxuICAgICAgJG9wRXhwciA9ICdvcCcgKyAkbHZsLFxuICAgICAgJG9wU3RyID0gJ1xcJyArICcgKyAkb3BFeHByICsgJyArIFxcJyc7XG4gICAgb3V0ICs9ICcgdmFyIHNjaGVtYUV4Y2wnICsgKCRsdmwpICsgJyA9ICcgKyAoJHNjaGVtYVZhbHVlRXhjbCkgKyAnOyAnO1xuICAgICRzY2hlbWFWYWx1ZUV4Y2wgPSAnc2NoZW1hRXhjbCcgKyAkbHZsO1xuICAgIG91dCArPSAnIHZhciAnICsgKCRleGNsdXNpdmUpICsgJzsgdmFyICcgKyAoJGV4Y2xUeXBlKSArICcgPSB0eXBlb2YgJyArICgkc2NoZW1hVmFsdWVFeGNsKSArICc7IGlmICgnICsgKCRleGNsVHlwZSkgKyAnICE9IFxcJ2Jvb2xlYW5cXCcgJiYgJyArICgkZXhjbFR5cGUpICsgJyAhPSBcXCd1bmRlZmluZWRcXCcgJiYgJyArICgkZXhjbFR5cGUpICsgJyAhPSBcXCdudW1iZXJcXCcpIHsgJztcbiAgICB2YXIgJGVycm9yS2V5d29yZCA9ICRleGNsdXNpdmVLZXl3b3JkO1xuICAgIHZhciAkJG91dFN0YWNrID0gJCRvdXRTdGFjayB8fCBbXTtcbiAgICAkJG91dFN0YWNrLnB1c2gob3V0KTtcbiAgICBvdXQgPSAnJzsgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICBpZiAoaXQuY3JlYXRlRXJyb3JzICE9PSBmYWxzZSkge1xuICAgICAgb3V0ICs9ICcgeyBrZXl3b3JkOiBcXCcnICsgKCRlcnJvcktleXdvcmQgfHwgJ19leGNsdXNpdmVMaW1pdCcpICsgJ1xcJyAsIGRhdGFQYXRoOiAoZGF0YVBhdGggfHwgXFwnXFwnKSArICcgKyAoaXQuZXJyb3JQYXRoKSArICcgLCBzY2hlbWFQYXRoOiAnICsgKGl0LnV0aWwudG9RdW90ZWRTdHJpbmcoJGVyclNjaGVtYVBhdGgpKSArICcgLCBwYXJhbXM6IHt9ICc7XG4gICAgICBpZiAoaXQub3B0cy5tZXNzYWdlcyAhPT0gZmFsc2UpIHtcbiAgICAgICAgb3V0ICs9ICcgLCBtZXNzYWdlOiBcXCcnICsgKCRleGNsdXNpdmVLZXl3b3JkKSArICcgc2hvdWxkIGJlIGJvb2xlYW5cXCcgJztcbiAgICAgIH1cbiAgICAgIGlmIChpdC5vcHRzLnZlcmJvc2UpIHtcbiAgICAgICAgb3V0ICs9ICcgLCBzY2hlbWE6IHZhbGlkYXRlLnNjaGVtYScgKyAoJHNjaGVtYVBhdGgpICsgJyAsIHBhcmVudFNjaGVtYTogdmFsaWRhdGUuc2NoZW1hJyArIChpdC5zY2hlbWFQYXRoKSArICcgLCBkYXRhOiAnICsgKCRkYXRhKSArICcgJztcbiAgICAgIH1cbiAgICAgIG91dCArPSAnIH0gJztcbiAgICB9IGVsc2Uge1xuICAgICAgb3V0ICs9ICcge30gJztcbiAgICB9XG4gICAgdmFyIF9fZXJyID0gb3V0O1xuICAgIG91dCA9ICQkb3V0U3RhY2sucG9wKCk7XG4gICAgaWYgKCFpdC5jb21wb3NpdGVSdWxlICYmICRicmVha09uRXJyb3IpIHtcbiAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAgaWYgKGl0LmFzeW5jKSB7XG4gICAgICAgIG91dCArPSAnIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoWycgKyAoX19lcnIpICsgJ10pOyAnO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb3V0ICs9ICcgdmFsaWRhdGUuZXJyb3JzID0gWycgKyAoX19lcnIpICsgJ107IHJldHVybiBmYWxzZTsgJztcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgb3V0ICs9ICcgdmFyIGVyciA9ICcgKyAoX19lcnIpICsgJzsgIGlmICh2RXJyb3JzID09PSBudWxsKSB2RXJyb3JzID0gW2Vycl07IGVsc2UgdkVycm9ycy5wdXNoKGVycik7IGVycm9ycysrOyAnO1xuICAgIH1cbiAgICBvdXQgKz0gJyB9IGVsc2UgaWYgKCAnO1xuICAgIGlmICgkaXNEYXRhKSB7XG4gICAgICBvdXQgKz0gJyAoJyArICgkc2NoZW1hVmFsdWUpICsgJyAhPT0gdW5kZWZpbmVkICYmIHR5cGVvZiAnICsgKCRzY2hlbWFWYWx1ZSkgKyAnICE9IFxcJ251bWJlclxcJykgfHwgJztcbiAgICB9XG4gICAgb3V0ICs9ICcgJyArICgkZXhjbFR5cGUpICsgJyA9PSBcXCdudW1iZXJcXCcgPyAoICgnICsgKCRleGNsdXNpdmUpICsgJyA9ICcgKyAoJHNjaGVtYVZhbHVlKSArICcgPT09IHVuZGVmaW5lZCB8fCAnICsgKCRzY2hlbWFWYWx1ZUV4Y2wpICsgJyAnICsgKCRvcCkgKyAnPSAnICsgKCRzY2hlbWFWYWx1ZSkgKyAnKSA/ICcgKyAoJGRhdGEpICsgJyAnICsgKCRub3RPcCkgKyAnPSAnICsgKCRzY2hlbWFWYWx1ZUV4Y2wpICsgJyA6ICcgKyAoJGRhdGEpICsgJyAnICsgKCRub3RPcCkgKyAnICcgKyAoJHNjaGVtYVZhbHVlKSArICcgKSA6ICggKCcgKyAoJGV4Y2x1c2l2ZSkgKyAnID0gJyArICgkc2NoZW1hVmFsdWVFeGNsKSArICcgPT09IHRydWUpID8gJyArICgkZGF0YSkgKyAnICcgKyAoJG5vdE9wKSArICc9ICcgKyAoJHNjaGVtYVZhbHVlKSArICcgOiAnICsgKCRkYXRhKSArICcgJyArICgkbm90T3ApICsgJyAnICsgKCRzY2hlbWFWYWx1ZSkgKyAnICkgfHwgJyArICgkZGF0YSkgKyAnICE9PSAnICsgKCRkYXRhKSArICcpIHsgdmFyIG9wJyArICgkbHZsKSArICcgPSAnICsgKCRleGNsdXNpdmUpICsgJyA/IFxcJycgKyAoJG9wKSArICdcXCcgOiBcXCcnICsgKCRvcCkgKyAnPVxcJzsgJztcbiAgICBpZiAoJHNjaGVtYSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAkZXJyb3JLZXl3b3JkID0gJGV4Y2x1c2l2ZUtleXdvcmQ7XG4gICAgICAkZXJyU2NoZW1hUGF0aCA9IGl0LmVyclNjaGVtYVBhdGggKyAnLycgKyAkZXhjbHVzaXZlS2V5d29yZDtcbiAgICAgICRzY2hlbWFWYWx1ZSA9ICRzY2hlbWFWYWx1ZUV4Y2w7XG4gICAgICAkaXNEYXRhID0gJGlzRGF0YUV4Y2w7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHZhciAkZXhjbElzTnVtYmVyID0gdHlwZW9mICRzY2hlbWFFeGNsID09ICdudW1iZXInLFxuICAgICAgJG9wU3RyID0gJG9wO1xuICAgIGlmICgkZXhjbElzTnVtYmVyICYmICRpc0RhdGEpIHtcbiAgICAgIHZhciAkb3BFeHByID0gJ1xcJycgKyAkb3BTdHIgKyAnXFwnJztcbiAgICAgIG91dCArPSAnIGlmICggJztcbiAgICAgIGlmICgkaXNEYXRhKSB7XG4gICAgICAgIG91dCArPSAnICgnICsgKCRzY2hlbWFWYWx1ZSkgKyAnICE9PSB1bmRlZmluZWQgJiYgdHlwZW9mICcgKyAoJHNjaGVtYVZhbHVlKSArICcgIT0gXFwnbnVtYmVyXFwnKSB8fCAnO1xuICAgICAgfVxuICAgICAgb3V0ICs9ICcgKCAnICsgKCRzY2hlbWFWYWx1ZSkgKyAnID09PSB1bmRlZmluZWQgfHwgJyArICgkc2NoZW1hRXhjbCkgKyAnICcgKyAoJG9wKSArICc9ICcgKyAoJHNjaGVtYVZhbHVlKSArICcgPyAnICsgKCRkYXRhKSArICcgJyArICgkbm90T3ApICsgJz0gJyArICgkc2NoZW1hRXhjbCkgKyAnIDogJyArICgkZGF0YSkgKyAnICcgKyAoJG5vdE9wKSArICcgJyArICgkc2NoZW1hVmFsdWUpICsgJyApIHx8ICcgKyAoJGRhdGEpICsgJyAhPT0gJyArICgkZGF0YSkgKyAnKSB7ICc7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICgkZXhjbElzTnVtYmVyICYmICRzY2hlbWEgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAkZXhjbHVzaXZlID0gdHJ1ZTtcbiAgICAgICAgJGVycm9yS2V5d29yZCA9ICRleGNsdXNpdmVLZXl3b3JkO1xuICAgICAgICAkZXJyU2NoZW1hUGF0aCA9IGl0LmVyclNjaGVtYVBhdGggKyAnLycgKyAkZXhjbHVzaXZlS2V5d29yZDtcbiAgICAgICAgJHNjaGVtYVZhbHVlID0gJHNjaGVtYUV4Y2w7XG4gICAgICAgICRub3RPcCArPSAnPSc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpZiAoJGV4Y2xJc051bWJlcikgJHNjaGVtYVZhbHVlID0gTWF0aFskaXNNYXggPyAnbWluJyA6ICdtYXgnXSgkc2NoZW1hRXhjbCwgJHNjaGVtYSk7XG4gICAgICAgIGlmICgkc2NoZW1hRXhjbCA9PT0gKCRleGNsSXNOdW1iZXIgPyAkc2NoZW1hVmFsdWUgOiB0cnVlKSkge1xuICAgICAgICAgICRleGNsdXNpdmUgPSB0cnVlO1xuICAgICAgICAgICRlcnJvcktleXdvcmQgPSAkZXhjbHVzaXZlS2V5d29yZDtcbiAgICAgICAgICAkZXJyU2NoZW1hUGF0aCA9IGl0LmVyclNjaGVtYVBhdGggKyAnLycgKyAkZXhjbHVzaXZlS2V5d29yZDtcbiAgICAgICAgICAkbm90T3AgKz0gJz0nO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICRleGNsdXNpdmUgPSBmYWxzZTtcbiAgICAgICAgICAkb3BTdHIgKz0gJz0nO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICB2YXIgJG9wRXhwciA9ICdcXCcnICsgJG9wU3RyICsgJ1xcJyc7XG4gICAgICBvdXQgKz0gJyBpZiAoICc7XG4gICAgICBpZiAoJGlzRGF0YSkge1xuICAgICAgICBvdXQgKz0gJyAoJyArICgkc2NoZW1hVmFsdWUpICsgJyAhPT0gdW5kZWZpbmVkICYmIHR5cGVvZiAnICsgKCRzY2hlbWFWYWx1ZSkgKyAnICE9IFxcJ251bWJlclxcJykgfHwgJztcbiAgICAgIH1cbiAgICAgIG91dCArPSAnICcgKyAoJGRhdGEpICsgJyAnICsgKCRub3RPcCkgKyAnICcgKyAoJHNjaGVtYVZhbHVlKSArICcgfHwgJyArICgkZGF0YSkgKyAnICE9PSAnICsgKCRkYXRhKSArICcpIHsgJztcbiAgICB9XG4gIH1cbiAgJGVycm9yS2V5d29yZCA9ICRlcnJvcktleXdvcmQgfHwgJGtleXdvcmQ7XG4gIHZhciAkJG91dFN0YWNrID0gJCRvdXRTdGFjayB8fCBbXTtcbiAgJCRvdXRTdGFjay5wdXNoKG91dCk7XG4gIG91dCA9ICcnOyAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICBpZiAoaXQuY3JlYXRlRXJyb3JzICE9PSBmYWxzZSkge1xuICAgIG91dCArPSAnIHsga2V5d29yZDogXFwnJyArICgkZXJyb3JLZXl3b3JkIHx8ICdfbGltaXQnKSArICdcXCcgLCBkYXRhUGF0aDogKGRhdGFQYXRoIHx8IFxcJ1xcJykgKyAnICsgKGl0LmVycm9yUGF0aCkgKyAnICwgc2NoZW1hUGF0aDogJyArIChpdC51dGlsLnRvUXVvdGVkU3RyaW5nKCRlcnJTY2hlbWFQYXRoKSkgKyAnICwgcGFyYW1zOiB7IGNvbXBhcmlzb246ICcgKyAoJG9wRXhwcikgKyAnLCBsaW1pdDogJyArICgkc2NoZW1hVmFsdWUpICsgJywgZXhjbHVzaXZlOiAnICsgKCRleGNsdXNpdmUpICsgJyB9ICc7XG4gICAgaWYgKGl0Lm9wdHMubWVzc2FnZXMgIT09IGZhbHNlKSB7XG4gICAgICBvdXQgKz0gJyAsIG1lc3NhZ2U6IFxcJ3Nob3VsZCBiZSAnICsgKCRvcFN0cikgKyAnICc7XG4gICAgICBpZiAoJGlzRGF0YSkge1xuICAgICAgICBvdXQgKz0gJ1xcJyArICcgKyAoJHNjaGVtYVZhbHVlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG91dCArPSAnJyArICgkc2NoZW1hVmFsdWUpICsgJ1xcJyc7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChpdC5vcHRzLnZlcmJvc2UpIHtcbiAgICAgIG91dCArPSAnICwgc2NoZW1hOiAgJztcbiAgICAgIGlmICgkaXNEYXRhKSB7XG4gICAgICAgIG91dCArPSAndmFsaWRhdGUuc2NoZW1hJyArICgkc2NoZW1hUGF0aCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvdXQgKz0gJycgKyAoJHNjaGVtYSk7XG4gICAgICB9XG4gICAgICBvdXQgKz0gJyAgICAgICAgICwgcGFyZW50U2NoZW1hOiB2YWxpZGF0ZS5zY2hlbWEnICsgKGl0LnNjaGVtYVBhdGgpICsgJyAsIGRhdGE6ICcgKyAoJGRhdGEpICsgJyAnO1xuICAgIH1cbiAgICBvdXQgKz0gJyB9ICc7XG4gIH0gZWxzZSB7XG4gICAgb3V0ICs9ICcge30gJztcbiAgfVxuICB2YXIgX19lcnIgPSBvdXQ7XG4gIG91dCA9ICQkb3V0U3RhY2sucG9wKCk7XG4gIGlmICghaXQuY29tcG9zaXRlUnVsZSAmJiAkYnJlYWtPbkVycm9yKSB7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgaWYgKGl0LmFzeW5jKSB7XG4gICAgICBvdXQgKz0gJyB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKFsnICsgKF9fZXJyKSArICddKTsgJztcbiAgICB9IGVsc2Uge1xuICAgICAgb3V0ICs9ICcgdmFsaWRhdGUuZXJyb3JzID0gWycgKyAoX19lcnIpICsgJ107IHJldHVybiBmYWxzZTsgJztcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgb3V0ICs9ICcgdmFyIGVyciA9ICcgKyAoX19lcnIpICsgJzsgIGlmICh2RXJyb3JzID09PSBudWxsKSB2RXJyb3JzID0gW2Vycl07IGVsc2UgdkVycm9ycy5wdXNoKGVycik7IGVycm9ycysrOyAnO1xuICB9XG4gIG91dCArPSAnIH0gJztcbiAgaWYgKCRicmVha09uRXJyb3IpIHtcbiAgICBvdXQgKz0gJyBlbHNlIHsgJztcbiAgfVxuICByZXR1cm4gb3V0O1xufVxuIiwgIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZ2VuZXJhdGVfX2xpbWl0SXRlbXMoaXQsICRrZXl3b3JkLCAkcnVsZVR5cGUpIHtcbiAgdmFyIG91dCA9ICcgJztcbiAgdmFyICRsdmwgPSBpdC5sZXZlbDtcbiAgdmFyICRkYXRhTHZsID0gaXQuZGF0YUxldmVsO1xuICB2YXIgJHNjaGVtYSA9IGl0LnNjaGVtYVska2V5d29yZF07XG4gIHZhciAkc2NoZW1hUGF0aCA9IGl0LnNjaGVtYVBhdGggKyBpdC51dGlsLmdldFByb3BlcnR5KCRrZXl3b3JkKTtcbiAgdmFyICRlcnJTY2hlbWFQYXRoID0gaXQuZXJyU2NoZW1hUGF0aCArICcvJyArICRrZXl3b3JkO1xuICB2YXIgJGJyZWFrT25FcnJvciA9ICFpdC5vcHRzLmFsbEVycm9ycztcbiAgdmFyICRlcnJvcktleXdvcmQ7XG4gIHZhciAkZGF0YSA9ICdkYXRhJyArICgkZGF0YUx2bCB8fCAnJyk7XG4gIHZhciAkaXNEYXRhID0gaXQub3B0cy4kZGF0YSAmJiAkc2NoZW1hICYmICRzY2hlbWEuJGRhdGEsXG4gICAgJHNjaGVtYVZhbHVlO1xuICBpZiAoJGlzRGF0YSkge1xuICAgIG91dCArPSAnIHZhciBzY2hlbWEnICsgKCRsdmwpICsgJyA9ICcgKyAoaXQudXRpbC5nZXREYXRhKCRzY2hlbWEuJGRhdGEsICRkYXRhTHZsLCBpdC5kYXRhUGF0aEFycikpICsgJzsgJztcbiAgICAkc2NoZW1hVmFsdWUgPSAnc2NoZW1hJyArICRsdmw7XG4gIH0gZWxzZSB7XG4gICAgJHNjaGVtYVZhbHVlID0gJHNjaGVtYTtcbiAgfVxuICBpZiAoISgkaXNEYXRhIHx8IHR5cGVvZiAkc2NoZW1hID09ICdudW1iZXInKSkge1xuICAgIHRocm93IG5ldyBFcnJvcigka2V5d29yZCArICcgbXVzdCBiZSBudW1iZXInKTtcbiAgfVxuICB2YXIgJG9wID0gJGtleXdvcmQgPT0gJ21heEl0ZW1zJyA/ICc+JyA6ICc8JztcbiAgb3V0ICs9ICdpZiAoICc7XG4gIGlmICgkaXNEYXRhKSB7XG4gICAgb3V0ICs9ICcgKCcgKyAoJHNjaGVtYVZhbHVlKSArICcgIT09IHVuZGVmaW5lZCAmJiB0eXBlb2YgJyArICgkc2NoZW1hVmFsdWUpICsgJyAhPSBcXCdudW1iZXJcXCcpIHx8ICc7XG4gIH1cbiAgb3V0ICs9ICcgJyArICgkZGF0YSkgKyAnLmxlbmd0aCAnICsgKCRvcCkgKyAnICcgKyAoJHNjaGVtYVZhbHVlKSArICcpIHsgJztcbiAgdmFyICRlcnJvcktleXdvcmQgPSAka2V5d29yZDtcbiAgdmFyICQkb3V0U3RhY2sgPSAkJG91dFN0YWNrIHx8IFtdO1xuICAkJG91dFN0YWNrLnB1c2gob3V0KTtcbiAgb3V0ID0gJyc7IC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gIGlmIChpdC5jcmVhdGVFcnJvcnMgIT09IGZhbHNlKSB7XG4gICAgb3V0ICs9ICcgeyBrZXl3b3JkOiBcXCcnICsgKCRlcnJvcktleXdvcmQgfHwgJ19saW1pdEl0ZW1zJykgKyAnXFwnICwgZGF0YVBhdGg6IChkYXRhUGF0aCB8fCBcXCdcXCcpICsgJyArIChpdC5lcnJvclBhdGgpICsgJyAsIHNjaGVtYVBhdGg6ICcgKyAoaXQudXRpbC50b1F1b3RlZFN0cmluZygkZXJyU2NoZW1hUGF0aCkpICsgJyAsIHBhcmFtczogeyBsaW1pdDogJyArICgkc2NoZW1hVmFsdWUpICsgJyB9ICc7XG4gICAgaWYgKGl0Lm9wdHMubWVzc2FnZXMgIT09IGZhbHNlKSB7XG4gICAgICBvdXQgKz0gJyAsIG1lc3NhZ2U6IFxcJ3Nob3VsZCBOT1QgaGF2ZSAnO1xuICAgICAgaWYgKCRrZXl3b3JkID09ICdtYXhJdGVtcycpIHtcbiAgICAgICAgb3V0ICs9ICdtb3JlJztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG91dCArPSAnZmV3ZXInO1xuICAgICAgfVxuICAgICAgb3V0ICs9ICcgdGhhbiAnO1xuICAgICAgaWYgKCRpc0RhdGEpIHtcbiAgICAgICAgb3V0ICs9ICdcXCcgKyAnICsgKCRzY2hlbWFWYWx1ZSkgKyAnICsgXFwnJztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG91dCArPSAnJyArICgkc2NoZW1hKTtcbiAgICAgIH1cbiAgICAgIG91dCArPSAnIGl0ZW1zXFwnICc7XG4gICAgfVxuICAgIGlmIChpdC5vcHRzLnZlcmJvc2UpIHtcbiAgICAgIG91dCArPSAnICwgc2NoZW1hOiAgJztcbiAgICAgIGlmICgkaXNEYXRhKSB7XG4gICAgICAgIG91dCArPSAndmFsaWRhdGUuc2NoZW1hJyArICgkc2NoZW1hUGF0aCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvdXQgKz0gJycgKyAoJHNjaGVtYSk7XG4gICAgICB9XG4gICAgICBvdXQgKz0gJyAgICAgICAgICwgcGFyZW50U2NoZW1hOiB2YWxpZGF0ZS5zY2hlbWEnICsgKGl0LnNjaGVtYVBhdGgpICsgJyAsIGRhdGE6ICcgKyAoJGRhdGEpICsgJyAnO1xuICAgIH1cbiAgICBvdXQgKz0gJyB9ICc7XG4gIH0gZWxzZSB7XG4gICAgb3V0ICs9ICcge30gJztcbiAgfVxuICB2YXIgX19lcnIgPSBvdXQ7XG4gIG91dCA9ICQkb3V0U3RhY2sucG9wKCk7XG4gIGlmICghaXQuY29tcG9zaXRlUnVsZSAmJiAkYnJlYWtPbkVycm9yKSB7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgaWYgKGl0LmFzeW5jKSB7XG4gICAgICBvdXQgKz0gJyB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKFsnICsgKF9fZXJyKSArICddKTsgJztcbiAgICB9IGVsc2Uge1xuICAgICAgb3V0ICs9ICcgdmFsaWRhdGUuZXJyb3JzID0gWycgKyAoX19lcnIpICsgJ107IHJldHVybiBmYWxzZTsgJztcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgb3V0ICs9ICcgdmFyIGVyciA9ICcgKyAoX19lcnIpICsgJzsgIGlmICh2RXJyb3JzID09PSBudWxsKSB2RXJyb3JzID0gW2Vycl07IGVsc2UgdkVycm9ycy5wdXNoKGVycik7IGVycm9ycysrOyAnO1xuICB9XG4gIG91dCArPSAnfSAnO1xuICBpZiAoJGJyZWFrT25FcnJvcikge1xuICAgIG91dCArPSAnIGVsc2UgeyAnO1xuICB9XG4gIHJldHVybiBvdXQ7XG59XG4iLCAiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBnZW5lcmF0ZV9fbGltaXRMZW5ndGgoaXQsICRrZXl3b3JkLCAkcnVsZVR5cGUpIHtcbiAgdmFyIG91dCA9ICcgJztcbiAgdmFyICRsdmwgPSBpdC5sZXZlbDtcbiAgdmFyICRkYXRhTHZsID0gaXQuZGF0YUxldmVsO1xuICB2YXIgJHNjaGVtYSA9IGl0LnNjaGVtYVska2V5d29yZF07XG4gIHZhciAkc2NoZW1hUGF0aCA9IGl0LnNjaGVtYVBhdGggKyBpdC51dGlsLmdldFByb3BlcnR5KCRrZXl3b3JkKTtcbiAgdmFyICRlcnJTY2hlbWFQYXRoID0gaXQuZXJyU2NoZW1hUGF0aCArICcvJyArICRrZXl3b3JkO1xuICB2YXIgJGJyZWFrT25FcnJvciA9ICFpdC5vcHRzLmFsbEVycm9ycztcbiAgdmFyICRlcnJvcktleXdvcmQ7XG4gIHZhciAkZGF0YSA9ICdkYXRhJyArICgkZGF0YUx2bCB8fCAnJyk7XG4gIHZhciAkaXNEYXRhID0gaXQub3B0cy4kZGF0YSAmJiAkc2NoZW1hICYmICRzY2hlbWEuJGRhdGEsXG4gICAgJHNjaGVtYVZhbHVlO1xuICBpZiAoJGlzRGF0YSkge1xuICAgIG91dCArPSAnIHZhciBzY2hlbWEnICsgKCRsdmwpICsgJyA9ICcgKyAoaXQudXRpbC5nZXREYXRhKCRzY2hlbWEuJGRhdGEsICRkYXRhTHZsLCBpdC5kYXRhUGF0aEFycikpICsgJzsgJztcbiAgICAkc2NoZW1hVmFsdWUgPSAnc2NoZW1hJyArICRsdmw7XG4gIH0gZWxzZSB7XG4gICAgJHNjaGVtYVZhbHVlID0gJHNjaGVtYTtcbiAgfVxuICBpZiAoISgkaXNEYXRhIHx8IHR5cGVvZiAkc2NoZW1hID09ICdudW1iZXInKSkge1xuICAgIHRocm93IG5ldyBFcnJvcigka2V5d29yZCArICcgbXVzdCBiZSBudW1iZXInKTtcbiAgfVxuICB2YXIgJG9wID0gJGtleXdvcmQgPT0gJ21heExlbmd0aCcgPyAnPicgOiAnPCc7XG4gIG91dCArPSAnaWYgKCAnO1xuICBpZiAoJGlzRGF0YSkge1xuICAgIG91dCArPSAnICgnICsgKCRzY2hlbWFWYWx1ZSkgKyAnICE9PSB1bmRlZmluZWQgJiYgdHlwZW9mICcgKyAoJHNjaGVtYVZhbHVlKSArICcgIT0gXFwnbnVtYmVyXFwnKSB8fCAnO1xuICB9XG4gIGlmIChpdC5vcHRzLnVuaWNvZGUgPT09IGZhbHNlKSB7XG4gICAgb3V0ICs9ICcgJyArICgkZGF0YSkgKyAnLmxlbmd0aCAnO1xuICB9IGVsc2Uge1xuICAgIG91dCArPSAnIHVjczJsZW5ndGgoJyArICgkZGF0YSkgKyAnKSAnO1xuICB9XG4gIG91dCArPSAnICcgKyAoJG9wKSArICcgJyArICgkc2NoZW1hVmFsdWUpICsgJykgeyAnO1xuICB2YXIgJGVycm9yS2V5d29yZCA9ICRrZXl3b3JkO1xuICB2YXIgJCRvdXRTdGFjayA9ICQkb3V0U3RhY2sgfHwgW107XG4gICQkb3V0U3RhY2sucHVzaChvdXQpO1xuICBvdXQgPSAnJzsgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgaWYgKGl0LmNyZWF0ZUVycm9ycyAhPT0gZmFsc2UpIHtcbiAgICBvdXQgKz0gJyB7IGtleXdvcmQ6IFxcJycgKyAoJGVycm9yS2V5d29yZCB8fCAnX2xpbWl0TGVuZ3RoJykgKyAnXFwnICwgZGF0YVBhdGg6IChkYXRhUGF0aCB8fCBcXCdcXCcpICsgJyArIChpdC5lcnJvclBhdGgpICsgJyAsIHNjaGVtYVBhdGg6ICcgKyAoaXQudXRpbC50b1F1b3RlZFN0cmluZygkZXJyU2NoZW1hUGF0aCkpICsgJyAsIHBhcmFtczogeyBsaW1pdDogJyArICgkc2NoZW1hVmFsdWUpICsgJyB9ICc7XG4gICAgaWYgKGl0Lm9wdHMubWVzc2FnZXMgIT09IGZhbHNlKSB7XG4gICAgICBvdXQgKz0gJyAsIG1lc3NhZ2U6IFxcJ3Nob3VsZCBOT1QgYmUgJztcbiAgICAgIGlmICgka2V5d29yZCA9PSAnbWF4TGVuZ3RoJykge1xuICAgICAgICBvdXQgKz0gJ2xvbmdlcic7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvdXQgKz0gJ3Nob3J0ZXInO1xuICAgICAgfVxuICAgICAgb3V0ICs9ICcgdGhhbiAnO1xuICAgICAgaWYgKCRpc0RhdGEpIHtcbiAgICAgICAgb3V0ICs9ICdcXCcgKyAnICsgKCRzY2hlbWFWYWx1ZSkgKyAnICsgXFwnJztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG91dCArPSAnJyArICgkc2NoZW1hKTtcbiAgICAgIH1cbiAgICAgIG91dCArPSAnIGNoYXJhY3RlcnNcXCcgJztcbiAgICB9XG4gICAgaWYgKGl0Lm9wdHMudmVyYm9zZSkge1xuICAgICAgb3V0ICs9ICcgLCBzY2hlbWE6ICAnO1xuICAgICAgaWYgKCRpc0RhdGEpIHtcbiAgICAgICAgb3V0ICs9ICd2YWxpZGF0ZS5zY2hlbWEnICsgKCRzY2hlbWFQYXRoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG91dCArPSAnJyArICgkc2NoZW1hKTtcbiAgICAgIH1cbiAgICAgIG91dCArPSAnICAgICAgICAgLCBwYXJlbnRTY2hlbWE6IHZhbGlkYXRlLnNjaGVtYScgKyAoaXQuc2NoZW1hUGF0aCkgKyAnICwgZGF0YTogJyArICgkZGF0YSkgKyAnICc7XG4gICAgfVxuICAgIG91dCArPSAnIH0gJztcbiAgfSBlbHNlIHtcbiAgICBvdXQgKz0gJyB7fSAnO1xuICB9XG4gIHZhciBfX2VyciA9IG91dDtcbiAgb3V0ID0gJCRvdXRTdGFjay5wb3AoKTtcbiAgaWYgKCFpdC5jb21wb3NpdGVSdWxlICYmICRicmVha09uRXJyb3IpIHtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICBpZiAoaXQuYXN5bmMpIHtcbiAgICAgIG91dCArPSAnIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoWycgKyAoX19lcnIpICsgJ10pOyAnO1xuICAgIH0gZWxzZSB7XG4gICAgICBvdXQgKz0gJyB2YWxpZGF0ZS5lcnJvcnMgPSBbJyArIChfX2VycikgKyAnXTsgcmV0dXJuIGZhbHNlOyAnO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBvdXQgKz0gJyB2YXIgZXJyID0gJyArIChfX2VycikgKyAnOyAgaWYgKHZFcnJvcnMgPT09IG51bGwpIHZFcnJvcnMgPSBbZXJyXTsgZWxzZSB2RXJyb3JzLnB1c2goZXJyKTsgZXJyb3JzKys7ICc7XG4gIH1cbiAgb3V0ICs9ICd9ICc7XG4gIGlmICgkYnJlYWtPbkVycm9yKSB7XG4gICAgb3V0ICs9ICcgZWxzZSB7ICc7XG4gIH1cbiAgcmV0dXJuIG91dDtcbn1cbiIsICIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGdlbmVyYXRlX19saW1pdFByb3BlcnRpZXMoaXQsICRrZXl3b3JkLCAkcnVsZVR5cGUpIHtcbiAgdmFyIG91dCA9ICcgJztcbiAgdmFyICRsdmwgPSBpdC5sZXZlbDtcbiAgdmFyICRkYXRhTHZsID0gaXQuZGF0YUxldmVsO1xuICB2YXIgJHNjaGVtYSA9IGl0LnNjaGVtYVska2V5d29yZF07XG4gIHZhciAkc2NoZW1hUGF0aCA9IGl0LnNjaGVtYVBhdGggKyBpdC51dGlsLmdldFByb3BlcnR5KCRrZXl3b3JkKTtcbiAgdmFyICRlcnJTY2hlbWFQYXRoID0gaXQuZXJyU2NoZW1hUGF0aCArICcvJyArICRrZXl3b3JkO1xuICB2YXIgJGJyZWFrT25FcnJvciA9ICFpdC5vcHRzLmFsbEVycm9ycztcbiAgdmFyICRlcnJvcktleXdvcmQ7XG4gIHZhciAkZGF0YSA9ICdkYXRhJyArICgkZGF0YUx2bCB8fCAnJyk7XG4gIHZhciAkaXNEYXRhID0gaXQub3B0cy4kZGF0YSAmJiAkc2NoZW1hICYmICRzY2hlbWEuJGRhdGEsXG4gICAgJHNjaGVtYVZhbHVlO1xuICBpZiAoJGlzRGF0YSkge1xuICAgIG91dCArPSAnIHZhciBzY2hlbWEnICsgKCRsdmwpICsgJyA9ICcgKyAoaXQudXRpbC5nZXREYXRhKCRzY2hlbWEuJGRhdGEsICRkYXRhTHZsLCBpdC5kYXRhUGF0aEFycikpICsgJzsgJztcbiAgICAkc2NoZW1hVmFsdWUgPSAnc2NoZW1hJyArICRsdmw7XG4gIH0gZWxzZSB7XG4gICAgJHNjaGVtYVZhbHVlID0gJHNjaGVtYTtcbiAgfVxuICBpZiAoISgkaXNEYXRhIHx8IHR5cGVvZiAkc2NoZW1hID09ICdudW1iZXInKSkge1xuICAgIHRocm93IG5ldyBFcnJvcigka2V5d29yZCArICcgbXVzdCBiZSBudW1iZXInKTtcbiAgfVxuICB2YXIgJG9wID0gJGtleXdvcmQgPT0gJ21heFByb3BlcnRpZXMnID8gJz4nIDogJzwnO1xuICBvdXQgKz0gJ2lmICggJztcbiAgaWYgKCRpc0RhdGEpIHtcbiAgICBvdXQgKz0gJyAoJyArICgkc2NoZW1hVmFsdWUpICsgJyAhPT0gdW5kZWZpbmVkICYmIHR5cGVvZiAnICsgKCRzY2hlbWFWYWx1ZSkgKyAnICE9IFxcJ251bWJlclxcJykgfHwgJztcbiAgfVxuICBvdXQgKz0gJyBPYmplY3Qua2V5cygnICsgKCRkYXRhKSArICcpLmxlbmd0aCAnICsgKCRvcCkgKyAnICcgKyAoJHNjaGVtYVZhbHVlKSArICcpIHsgJztcbiAgdmFyICRlcnJvcktleXdvcmQgPSAka2V5d29yZDtcbiAgdmFyICQkb3V0U3RhY2sgPSAkJG91dFN0YWNrIHx8IFtdO1xuICAkJG91dFN0YWNrLnB1c2gob3V0KTtcbiAgb3V0ID0gJyc7IC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gIGlmIChpdC5jcmVhdGVFcnJvcnMgIT09IGZhbHNlKSB7XG4gICAgb3V0ICs9ICcgeyBrZXl3b3JkOiBcXCcnICsgKCRlcnJvcktleXdvcmQgfHwgJ19saW1pdFByb3BlcnRpZXMnKSArICdcXCcgLCBkYXRhUGF0aDogKGRhdGFQYXRoIHx8IFxcJ1xcJykgKyAnICsgKGl0LmVycm9yUGF0aCkgKyAnICwgc2NoZW1hUGF0aDogJyArIChpdC51dGlsLnRvUXVvdGVkU3RyaW5nKCRlcnJTY2hlbWFQYXRoKSkgKyAnICwgcGFyYW1zOiB7IGxpbWl0OiAnICsgKCRzY2hlbWFWYWx1ZSkgKyAnIH0gJztcbiAgICBpZiAoaXQub3B0cy5tZXNzYWdlcyAhPT0gZmFsc2UpIHtcbiAgICAgIG91dCArPSAnICwgbWVzc2FnZTogXFwnc2hvdWxkIE5PVCBoYXZlICc7XG4gICAgICBpZiAoJGtleXdvcmQgPT0gJ21heFByb3BlcnRpZXMnKSB7XG4gICAgICAgIG91dCArPSAnbW9yZSc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvdXQgKz0gJ2Zld2VyJztcbiAgICAgIH1cbiAgICAgIG91dCArPSAnIHRoYW4gJztcbiAgICAgIGlmICgkaXNEYXRhKSB7XG4gICAgICAgIG91dCArPSAnXFwnICsgJyArICgkc2NoZW1hVmFsdWUpICsgJyArIFxcJyc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvdXQgKz0gJycgKyAoJHNjaGVtYSk7XG4gICAgICB9XG4gICAgICBvdXQgKz0gJyBwcm9wZXJ0aWVzXFwnICc7XG4gICAgfVxuICAgIGlmIChpdC5vcHRzLnZlcmJvc2UpIHtcbiAgICAgIG91dCArPSAnICwgc2NoZW1hOiAgJztcbiAgICAgIGlmICgkaXNEYXRhKSB7XG4gICAgICAgIG91dCArPSAndmFsaWRhdGUuc2NoZW1hJyArICgkc2NoZW1hUGF0aCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvdXQgKz0gJycgKyAoJHNjaGVtYSk7XG4gICAgICB9XG4gICAgICBvdXQgKz0gJyAgICAgICAgICwgcGFyZW50U2NoZW1hOiB2YWxpZGF0ZS5zY2hlbWEnICsgKGl0LnNjaGVtYVBhdGgpICsgJyAsIGRhdGE6ICcgKyAoJGRhdGEpICsgJyAnO1xuICAgIH1cbiAgICBvdXQgKz0gJyB9ICc7XG4gIH0gZWxzZSB7XG4gICAgb3V0ICs9ICcge30gJztcbiAgfVxuICB2YXIgX19lcnIgPSBvdXQ7XG4gIG91dCA9ICQkb3V0U3RhY2sucG9wKCk7XG4gIGlmICghaXQuY29tcG9zaXRlUnVsZSAmJiAkYnJlYWtPbkVycm9yKSB7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgaWYgKGl0LmFzeW5jKSB7XG4gICAgICBvdXQgKz0gJyB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKFsnICsgKF9fZXJyKSArICddKTsgJztcbiAgICB9IGVsc2Uge1xuICAgICAgb3V0ICs9ICcgdmFsaWRhdGUuZXJyb3JzID0gWycgKyAoX19lcnIpICsgJ107IHJldHVybiBmYWxzZTsgJztcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgb3V0ICs9ICcgdmFyIGVyciA9ICcgKyAoX19lcnIpICsgJzsgIGlmICh2RXJyb3JzID09PSBudWxsKSB2RXJyb3JzID0gW2Vycl07IGVsc2UgdkVycm9ycy5wdXNoKGVycik7IGVycm9ycysrOyAnO1xuICB9XG4gIG91dCArPSAnfSAnO1xuICBpZiAoJGJyZWFrT25FcnJvcikge1xuICAgIG91dCArPSAnIGVsc2UgeyAnO1xuICB9XG4gIHJldHVybiBvdXQ7XG59XG4iLCAiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBnZW5lcmF0ZV9tdWx0aXBsZU9mKGl0LCAka2V5d29yZCwgJHJ1bGVUeXBlKSB7XG4gIHZhciBvdXQgPSAnICc7XG4gIHZhciAkbHZsID0gaXQubGV2ZWw7XG4gIHZhciAkZGF0YUx2bCA9IGl0LmRhdGFMZXZlbDtcbiAgdmFyICRzY2hlbWEgPSBpdC5zY2hlbWFbJGtleXdvcmRdO1xuICB2YXIgJHNjaGVtYVBhdGggPSBpdC5zY2hlbWFQYXRoICsgaXQudXRpbC5nZXRQcm9wZXJ0eSgka2V5d29yZCk7XG4gIHZhciAkZXJyU2NoZW1hUGF0aCA9IGl0LmVyclNjaGVtYVBhdGggKyAnLycgKyAka2V5d29yZDtcbiAgdmFyICRicmVha09uRXJyb3IgPSAhaXQub3B0cy5hbGxFcnJvcnM7XG4gIHZhciAkZGF0YSA9ICdkYXRhJyArICgkZGF0YUx2bCB8fCAnJyk7XG4gIHZhciAkaXNEYXRhID0gaXQub3B0cy4kZGF0YSAmJiAkc2NoZW1hICYmICRzY2hlbWEuJGRhdGEsXG4gICAgJHNjaGVtYVZhbHVlO1xuICBpZiAoJGlzRGF0YSkge1xuICAgIG91dCArPSAnIHZhciBzY2hlbWEnICsgKCRsdmwpICsgJyA9ICcgKyAoaXQudXRpbC5nZXREYXRhKCRzY2hlbWEuJGRhdGEsICRkYXRhTHZsLCBpdC5kYXRhUGF0aEFycikpICsgJzsgJztcbiAgICAkc2NoZW1hVmFsdWUgPSAnc2NoZW1hJyArICRsdmw7XG4gIH0gZWxzZSB7XG4gICAgJHNjaGVtYVZhbHVlID0gJHNjaGVtYTtcbiAgfVxuICBpZiAoISgkaXNEYXRhIHx8IHR5cGVvZiAkc2NoZW1hID09ICdudW1iZXInKSkge1xuICAgIHRocm93IG5ldyBFcnJvcigka2V5d29yZCArICcgbXVzdCBiZSBudW1iZXInKTtcbiAgfVxuICBvdXQgKz0gJ3ZhciBkaXZpc2lvbicgKyAoJGx2bCkgKyAnO2lmICgnO1xuICBpZiAoJGlzRGF0YSkge1xuICAgIG91dCArPSAnICcgKyAoJHNjaGVtYVZhbHVlKSArICcgIT09IHVuZGVmaW5lZCAmJiAoIHR5cGVvZiAnICsgKCRzY2hlbWFWYWx1ZSkgKyAnICE9IFxcJ251bWJlclxcJyB8fCAnO1xuICB9XG4gIG91dCArPSAnIChkaXZpc2lvbicgKyAoJGx2bCkgKyAnID0gJyArICgkZGF0YSkgKyAnIC8gJyArICgkc2NoZW1hVmFsdWUpICsgJywgJztcbiAgaWYgKGl0Lm9wdHMubXVsdGlwbGVPZlByZWNpc2lvbikge1xuICAgIG91dCArPSAnIE1hdGguYWJzKE1hdGgucm91bmQoZGl2aXNpb24nICsgKCRsdmwpICsgJykgLSBkaXZpc2lvbicgKyAoJGx2bCkgKyAnKSA+IDFlLScgKyAoaXQub3B0cy5tdWx0aXBsZU9mUHJlY2lzaW9uKSArICcgJztcbiAgfSBlbHNlIHtcbiAgICBvdXQgKz0gJyBkaXZpc2lvbicgKyAoJGx2bCkgKyAnICE9PSBwYXJzZUludChkaXZpc2lvbicgKyAoJGx2bCkgKyAnKSAnO1xuICB9XG4gIG91dCArPSAnICkgJztcbiAgaWYgKCRpc0RhdGEpIHtcbiAgICBvdXQgKz0gJyAgKSAgJztcbiAgfVxuICBvdXQgKz0gJyApIHsgICAnO1xuICB2YXIgJCRvdXRTdGFjayA9ICQkb3V0U3RhY2sgfHwgW107XG4gICQkb3V0U3RhY2sucHVzaChvdXQpO1xuICBvdXQgPSAnJzsgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgaWYgKGl0LmNyZWF0ZUVycm9ycyAhPT0gZmFsc2UpIHtcbiAgICBvdXQgKz0gJyB7IGtleXdvcmQ6IFxcJycgKyAoJ211bHRpcGxlT2YnKSArICdcXCcgLCBkYXRhUGF0aDogKGRhdGFQYXRoIHx8IFxcJ1xcJykgKyAnICsgKGl0LmVycm9yUGF0aCkgKyAnICwgc2NoZW1hUGF0aDogJyArIChpdC51dGlsLnRvUXVvdGVkU3RyaW5nKCRlcnJTY2hlbWFQYXRoKSkgKyAnICwgcGFyYW1zOiB7IG11bHRpcGxlT2Y6ICcgKyAoJHNjaGVtYVZhbHVlKSArICcgfSAnO1xuICAgIGlmIChpdC5vcHRzLm1lc3NhZ2VzICE9PSBmYWxzZSkge1xuICAgICAgb3V0ICs9ICcgLCBtZXNzYWdlOiBcXCdzaG91bGQgYmUgbXVsdGlwbGUgb2YgJztcbiAgICAgIGlmICgkaXNEYXRhKSB7XG4gICAgICAgIG91dCArPSAnXFwnICsgJyArICgkc2NoZW1hVmFsdWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb3V0ICs9ICcnICsgKCRzY2hlbWFWYWx1ZSkgKyAnXFwnJztcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGl0Lm9wdHMudmVyYm9zZSkge1xuICAgICAgb3V0ICs9ICcgLCBzY2hlbWE6ICAnO1xuICAgICAgaWYgKCRpc0RhdGEpIHtcbiAgICAgICAgb3V0ICs9ICd2YWxpZGF0ZS5zY2hlbWEnICsgKCRzY2hlbWFQYXRoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG91dCArPSAnJyArICgkc2NoZW1hKTtcbiAgICAgIH1cbiAgICAgIG91dCArPSAnICAgICAgICAgLCBwYXJlbnRTY2hlbWE6IHZhbGlkYXRlLnNjaGVtYScgKyAoaXQuc2NoZW1hUGF0aCkgKyAnICwgZGF0YTogJyArICgkZGF0YSkgKyAnICc7XG4gICAgfVxuICAgIG91dCArPSAnIH0gJztcbiAgfSBlbHNlIHtcbiAgICBvdXQgKz0gJyB7fSAnO1xuICB9XG4gIHZhciBfX2VyciA9IG91dDtcbiAgb3V0ID0gJCRvdXRTdGFjay5wb3AoKTtcbiAgaWYgKCFpdC5jb21wb3NpdGVSdWxlICYmICRicmVha09uRXJyb3IpIHtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICBpZiAoaXQuYXN5bmMpIHtcbiAgICAgIG91dCArPSAnIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoWycgKyAoX19lcnIpICsgJ10pOyAnO1xuICAgIH0gZWxzZSB7XG4gICAgICBvdXQgKz0gJyB2YWxpZGF0ZS5lcnJvcnMgPSBbJyArIChfX2VycikgKyAnXTsgcmV0dXJuIGZhbHNlOyAnO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBvdXQgKz0gJyB2YXIgZXJyID0gJyArIChfX2VycikgKyAnOyAgaWYgKHZFcnJvcnMgPT09IG51bGwpIHZFcnJvcnMgPSBbZXJyXTsgZWxzZSB2RXJyb3JzLnB1c2goZXJyKTsgZXJyb3JzKys7ICc7XG4gIH1cbiAgb3V0ICs9ICd9ICc7XG4gIGlmICgkYnJlYWtPbkVycm9yKSB7XG4gICAgb3V0ICs9ICcgZWxzZSB7ICc7XG4gIH1cbiAgcmV0dXJuIG91dDtcbn1cbiIsICIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGdlbmVyYXRlX25vdChpdCwgJGtleXdvcmQsICRydWxlVHlwZSkge1xuICB2YXIgb3V0ID0gJyAnO1xuICB2YXIgJGx2bCA9IGl0LmxldmVsO1xuICB2YXIgJGRhdGFMdmwgPSBpdC5kYXRhTGV2ZWw7XG4gIHZhciAkc2NoZW1hID0gaXQuc2NoZW1hWyRrZXl3b3JkXTtcbiAgdmFyICRzY2hlbWFQYXRoID0gaXQuc2NoZW1hUGF0aCArIGl0LnV0aWwuZ2V0UHJvcGVydHkoJGtleXdvcmQpO1xuICB2YXIgJGVyclNjaGVtYVBhdGggPSBpdC5lcnJTY2hlbWFQYXRoICsgJy8nICsgJGtleXdvcmQ7XG4gIHZhciAkYnJlYWtPbkVycm9yID0gIWl0Lm9wdHMuYWxsRXJyb3JzO1xuICB2YXIgJGRhdGEgPSAnZGF0YScgKyAoJGRhdGFMdmwgfHwgJycpO1xuICB2YXIgJGVycnMgPSAnZXJyc19fJyArICRsdmw7XG4gIHZhciAkaXQgPSBpdC51dGlsLmNvcHkoaXQpO1xuICAkaXQubGV2ZWwrKztcbiAgdmFyICRuZXh0VmFsaWQgPSAndmFsaWQnICsgJGl0LmxldmVsO1xuICBpZiAoKGl0Lm9wdHMuc3RyaWN0S2V5d29yZHMgPyAodHlwZW9mICRzY2hlbWEgPT0gJ29iamVjdCcgJiYgT2JqZWN0LmtleXMoJHNjaGVtYSkubGVuZ3RoID4gMCkgfHwgJHNjaGVtYSA9PT0gZmFsc2UgOiBpdC51dGlsLnNjaGVtYUhhc1J1bGVzKCRzY2hlbWEsIGl0LlJVTEVTLmFsbCkpKSB7XG4gICAgJGl0LnNjaGVtYSA9ICRzY2hlbWE7XG4gICAgJGl0LnNjaGVtYVBhdGggPSAkc2NoZW1hUGF0aDtcbiAgICAkaXQuZXJyU2NoZW1hUGF0aCA9ICRlcnJTY2hlbWFQYXRoO1xuICAgIG91dCArPSAnIHZhciAnICsgKCRlcnJzKSArICcgPSBlcnJvcnM7ICAnO1xuICAgIHZhciAkd2FzQ29tcG9zaXRlID0gaXQuY29tcG9zaXRlUnVsZTtcbiAgICBpdC5jb21wb3NpdGVSdWxlID0gJGl0LmNvbXBvc2l0ZVJ1bGUgPSB0cnVlO1xuICAgICRpdC5jcmVhdGVFcnJvcnMgPSBmYWxzZTtcbiAgICB2YXIgJGFsbEVycm9yc09wdGlvbjtcbiAgICBpZiAoJGl0Lm9wdHMuYWxsRXJyb3JzKSB7XG4gICAgICAkYWxsRXJyb3JzT3B0aW9uID0gJGl0Lm9wdHMuYWxsRXJyb3JzO1xuICAgICAgJGl0Lm9wdHMuYWxsRXJyb3JzID0gZmFsc2U7XG4gICAgfVxuICAgIG91dCArPSAnICcgKyAoaXQudmFsaWRhdGUoJGl0KSkgKyAnICc7XG4gICAgJGl0LmNyZWF0ZUVycm9ycyA9IHRydWU7XG4gICAgaWYgKCRhbGxFcnJvcnNPcHRpb24pICRpdC5vcHRzLmFsbEVycm9ycyA9ICRhbGxFcnJvcnNPcHRpb247XG4gICAgaXQuY29tcG9zaXRlUnVsZSA9ICRpdC5jb21wb3NpdGVSdWxlID0gJHdhc0NvbXBvc2l0ZTtcbiAgICBvdXQgKz0gJyBpZiAoJyArICgkbmV4dFZhbGlkKSArICcpIHsgICAnO1xuICAgIHZhciAkJG91dFN0YWNrID0gJCRvdXRTdGFjayB8fCBbXTtcbiAgICAkJG91dFN0YWNrLnB1c2gob3V0KTtcbiAgICBvdXQgPSAnJzsgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICBpZiAoaXQuY3JlYXRlRXJyb3JzICE9PSBmYWxzZSkge1xuICAgICAgb3V0ICs9ICcgeyBrZXl3b3JkOiBcXCcnICsgKCdub3QnKSArICdcXCcgLCBkYXRhUGF0aDogKGRhdGFQYXRoIHx8IFxcJ1xcJykgKyAnICsgKGl0LmVycm9yUGF0aCkgKyAnICwgc2NoZW1hUGF0aDogJyArIChpdC51dGlsLnRvUXVvdGVkU3RyaW5nKCRlcnJTY2hlbWFQYXRoKSkgKyAnICwgcGFyYW1zOiB7fSAnO1xuICAgICAgaWYgKGl0Lm9wdHMubWVzc2FnZXMgIT09IGZhbHNlKSB7XG4gICAgICAgIG91dCArPSAnICwgbWVzc2FnZTogXFwnc2hvdWxkIE5PVCBiZSB2YWxpZFxcJyAnO1xuICAgICAgfVxuICAgICAgaWYgKGl0Lm9wdHMudmVyYm9zZSkge1xuICAgICAgICBvdXQgKz0gJyAsIHNjaGVtYTogdmFsaWRhdGUuc2NoZW1hJyArICgkc2NoZW1hUGF0aCkgKyAnICwgcGFyZW50U2NoZW1hOiB2YWxpZGF0ZS5zY2hlbWEnICsgKGl0LnNjaGVtYVBhdGgpICsgJyAsIGRhdGE6ICcgKyAoJGRhdGEpICsgJyAnO1xuICAgICAgfVxuICAgICAgb3V0ICs9ICcgfSAnO1xuICAgIH0gZWxzZSB7XG4gICAgICBvdXQgKz0gJyB7fSAnO1xuICAgIH1cbiAgICB2YXIgX19lcnIgPSBvdXQ7XG4gICAgb3V0ID0gJCRvdXRTdGFjay5wb3AoKTtcbiAgICBpZiAoIWl0LmNvbXBvc2l0ZVJ1bGUgJiYgJGJyZWFrT25FcnJvcikge1xuICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICBpZiAoaXQuYXN5bmMpIHtcbiAgICAgICAgb3V0ICs9ICcgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihbJyArIChfX2VycikgKyAnXSk7ICc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvdXQgKz0gJyB2YWxpZGF0ZS5lcnJvcnMgPSBbJyArIChfX2VycikgKyAnXTsgcmV0dXJuIGZhbHNlOyAnO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBvdXQgKz0gJyB2YXIgZXJyID0gJyArIChfX2VycikgKyAnOyAgaWYgKHZFcnJvcnMgPT09IG51bGwpIHZFcnJvcnMgPSBbZXJyXTsgZWxzZSB2RXJyb3JzLnB1c2goZXJyKTsgZXJyb3JzKys7ICc7XG4gICAgfVxuICAgIG91dCArPSAnIH0gZWxzZSB7ICBlcnJvcnMgPSAnICsgKCRlcnJzKSArICc7IGlmICh2RXJyb3JzICE9PSBudWxsKSB7IGlmICgnICsgKCRlcnJzKSArICcpIHZFcnJvcnMubGVuZ3RoID0gJyArICgkZXJycykgKyAnOyBlbHNlIHZFcnJvcnMgPSBudWxsOyB9ICc7XG4gICAgaWYgKGl0Lm9wdHMuYWxsRXJyb3JzKSB7XG4gICAgICBvdXQgKz0gJyB9ICc7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIG91dCArPSAnICB2YXIgZXJyID0gICAnOyAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgIGlmIChpdC5jcmVhdGVFcnJvcnMgIT09IGZhbHNlKSB7XG4gICAgICBvdXQgKz0gJyB7IGtleXdvcmQ6IFxcJycgKyAoJ25vdCcpICsgJ1xcJyAsIGRhdGFQYXRoOiAoZGF0YVBhdGggfHwgXFwnXFwnKSArICcgKyAoaXQuZXJyb3JQYXRoKSArICcgLCBzY2hlbWFQYXRoOiAnICsgKGl0LnV0aWwudG9RdW90ZWRTdHJpbmcoJGVyclNjaGVtYVBhdGgpKSArICcgLCBwYXJhbXM6IHt9ICc7XG4gICAgICBpZiAoaXQub3B0cy5tZXNzYWdlcyAhPT0gZmFsc2UpIHtcbiAgICAgICAgb3V0ICs9ICcgLCBtZXNzYWdlOiBcXCdzaG91bGQgTk9UIGJlIHZhbGlkXFwnICc7XG4gICAgICB9XG4gICAgICBpZiAoaXQub3B0cy52ZXJib3NlKSB7XG4gICAgICAgIG91dCArPSAnICwgc2NoZW1hOiB2YWxpZGF0ZS5zY2hlbWEnICsgKCRzY2hlbWFQYXRoKSArICcgLCBwYXJlbnRTY2hlbWE6IHZhbGlkYXRlLnNjaGVtYScgKyAoaXQuc2NoZW1hUGF0aCkgKyAnICwgZGF0YTogJyArICgkZGF0YSkgKyAnICc7XG4gICAgICB9XG4gICAgICBvdXQgKz0gJyB9ICc7XG4gICAgfSBlbHNlIHtcbiAgICAgIG91dCArPSAnIHt9ICc7XG4gICAgfVxuICAgIG91dCArPSAnOyAgaWYgKHZFcnJvcnMgPT09IG51bGwpIHZFcnJvcnMgPSBbZXJyXTsgZWxzZSB2RXJyb3JzLnB1c2goZXJyKTsgZXJyb3JzKys7ICc7XG4gICAgaWYgKCRicmVha09uRXJyb3IpIHtcbiAgICAgIG91dCArPSAnIGlmIChmYWxzZSkgeyAnO1xuICAgIH1cbiAgfVxuICByZXR1cm4gb3V0O1xufVxuIiwgIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZ2VuZXJhdGVfb25lT2YoaXQsICRrZXl3b3JkLCAkcnVsZVR5cGUpIHtcbiAgdmFyIG91dCA9ICcgJztcbiAgdmFyICRsdmwgPSBpdC5sZXZlbDtcbiAgdmFyICRkYXRhTHZsID0gaXQuZGF0YUxldmVsO1xuICB2YXIgJHNjaGVtYSA9IGl0LnNjaGVtYVska2V5d29yZF07XG4gIHZhciAkc2NoZW1hUGF0aCA9IGl0LnNjaGVtYVBhdGggKyBpdC51dGlsLmdldFByb3BlcnR5KCRrZXl3b3JkKTtcbiAgdmFyICRlcnJTY2hlbWFQYXRoID0gaXQuZXJyU2NoZW1hUGF0aCArICcvJyArICRrZXl3b3JkO1xuICB2YXIgJGJyZWFrT25FcnJvciA9ICFpdC5vcHRzLmFsbEVycm9ycztcbiAgdmFyICRkYXRhID0gJ2RhdGEnICsgKCRkYXRhTHZsIHx8ICcnKTtcbiAgdmFyICR2YWxpZCA9ICd2YWxpZCcgKyAkbHZsO1xuICB2YXIgJGVycnMgPSAnZXJyc19fJyArICRsdmw7XG4gIHZhciAkaXQgPSBpdC51dGlsLmNvcHkoaXQpO1xuICB2YXIgJGNsb3NpbmdCcmFjZXMgPSAnJztcbiAgJGl0LmxldmVsKys7XG4gIHZhciAkbmV4dFZhbGlkID0gJ3ZhbGlkJyArICRpdC5sZXZlbDtcbiAgdmFyICRjdXJyZW50QmFzZUlkID0gJGl0LmJhc2VJZCxcbiAgICAkcHJldlZhbGlkID0gJ3ByZXZWYWxpZCcgKyAkbHZsLFxuICAgICRwYXNzaW5nU2NoZW1hcyA9ICdwYXNzaW5nU2NoZW1hcycgKyAkbHZsO1xuICBvdXQgKz0gJ3ZhciAnICsgKCRlcnJzKSArICcgPSBlcnJvcnMgLCAnICsgKCRwcmV2VmFsaWQpICsgJyA9IGZhbHNlICwgJyArICgkdmFsaWQpICsgJyA9IGZhbHNlICwgJyArICgkcGFzc2luZ1NjaGVtYXMpICsgJyA9IG51bGw7ICc7XG4gIHZhciAkd2FzQ29tcG9zaXRlID0gaXQuY29tcG9zaXRlUnVsZTtcbiAgaXQuY29tcG9zaXRlUnVsZSA9ICRpdC5jb21wb3NpdGVSdWxlID0gdHJ1ZTtcbiAgdmFyIGFycjEgPSAkc2NoZW1hO1xuICBpZiAoYXJyMSkge1xuICAgIHZhciAkc2NoLCAkaSA9IC0xLFxuICAgICAgbDEgPSBhcnIxLmxlbmd0aCAtIDE7XG4gICAgd2hpbGUgKCRpIDwgbDEpIHtcbiAgICAgICRzY2ggPSBhcnIxWyRpICs9IDFdO1xuICAgICAgaWYgKChpdC5vcHRzLnN0cmljdEtleXdvcmRzID8gKHR5cGVvZiAkc2NoID09ICdvYmplY3QnICYmIE9iamVjdC5rZXlzKCRzY2gpLmxlbmd0aCA+IDApIHx8ICRzY2ggPT09IGZhbHNlIDogaXQudXRpbC5zY2hlbWFIYXNSdWxlcygkc2NoLCBpdC5SVUxFUy5hbGwpKSkge1xuICAgICAgICAkaXQuc2NoZW1hID0gJHNjaDtcbiAgICAgICAgJGl0LnNjaGVtYVBhdGggPSAkc2NoZW1hUGF0aCArICdbJyArICRpICsgJ10nO1xuICAgICAgICAkaXQuZXJyU2NoZW1hUGF0aCA9ICRlcnJTY2hlbWFQYXRoICsgJy8nICsgJGk7XG4gICAgICAgIG91dCArPSAnICAnICsgKGl0LnZhbGlkYXRlKCRpdCkpICsgJyAnO1xuICAgICAgICAkaXQuYmFzZUlkID0gJGN1cnJlbnRCYXNlSWQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvdXQgKz0gJyB2YXIgJyArICgkbmV4dFZhbGlkKSArICcgPSB0cnVlOyAnO1xuICAgICAgfVxuICAgICAgaWYgKCRpKSB7XG4gICAgICAgIG91dCArPSAnIGlmICgnICsgKCRuZXh0VmFsaWQpICsgJyAmJiAnICsgKCRwcmV2VmFsaWQpICsgJykgeyAnICsgKCR2YWxpZCkgKyAnID0gZmFsc2U7ICcgKyAoJHBhc3NpbmdTY2hlbWFzKSArICcgPSBbJyArICgkcGFzc2luZ1NjaGVtYXMpICsgJywgJyArICgkaSkgKyAnXTsgfSBlbHNlIHsgJztcbiAgICAgICAgJGNsb3NpbmdCcmFjZXMgKz0gJ30nO1xuICAgICAgfVxuICAgICAgb3V0ICs9ICcgaWYgKCcgKyAoJG5leHRWYWxpZCkgKyAnKSB7ICcgKyAoJHZhbGlkKSArICcgPSAnICsgKCRwcmV2VmFsaWQpICsgJyA9IHRydWU7ICcgKyAoJHBhc3NpbmdTY2hlbWFzKSArICcgPSAnICsgKCRpKSArICc7IH0nO1xuICAgIH1cbiAgfVxuICBpdC5jb21wb3NpdGVSdWxlID0gJGl0LmNvbXBvc2l0ZVJ1bGUgPSAkd2FzQ29tcG9zaXRlO1xuICBvdXQgKz0gJycgKyAoJGNsb3NpbmdCcmFjZXMpICsgJ2lmICghJyArICgkdmFsaWQpICsgJykgeyAgIHZhciBlcnIgPSAgICc7IC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gIGlmIChpdC5jcmVhdGVFcnJvcnMgIT09IGZhbHNlKSB7XG4gICAgb3V0ICs9ICcgeyBrZXl3b3JkOiBcXCcnICsgKCdvbmVPZicpICsgJ1xcJyAsIGRhdGFQYXRoOiAoZGF0YVBhdGggfHwgXFwnXFwnKSArICcgKyAoaXQuZXJyb3JQYXRoKSArICcgLCBzY2hlbWFQYXRoOiAnICsgKGl0LnV0aWwudG9RdW90ZWRTdHJpbmcoJGVyclNjaGVtYVBhdGgpKSArICcgLCBwYXJhbXM6IHsgcGFzc2luZ1NjaGVtYXM6ICcgKyAoJHBhc3NpbmdTY2hlbWFzKSArICcgfSAnO1xuICAgIGlmIChpdC5vcHRzLm1lc3NhZ2VzICE9PSBmYWxzZSkge1xuICAgICAgb3V0ICs9ICcgLCBtZXNzYWdlOiBcXCdzaG91bGQgbWF0Y2ggZXhhY3RseSBvbmUgc2NoZW1hIGluIG9uZU9mXFwnICc7XG4gICAgfVxuICAgIGlmIChpdC5vcHRzLnZlcmJvc2UpIHtcbiAgICAgIG91dCArPSAnICwgc2NoZW1hOiB2YWxpZGF0ZS5zY2hlbWEnICsgKCRzY2hlbWFQYXRoKSArICcgLCBwYXJlbnRTY2hlbWE6IHZhbGlkYXRlLnNjaGVtYScgKyAoaXQuc2NoZW1hUGF0aCkgKyAnICwgZGF0YTogJyArICgkZGF0YSkgKyAnICc7XG4gICAgfVxuICAgIG91dCArPSAnIH0gJztcbiAgfSBlbHNlIHtcbiAgICBvdXQgKz0gJyB7fSAnO1xuICB9XG4gIG91dCArPSAnOyAgaWYgKHZFcnJvcnMgPT09IG51bGwpIHZFcnJvcnMgPSBbZXJyXTsgZWxzZSB2RXJyb3JzLnB1c2goZXJyKTsgZXJyb3JzKys7ICc7XG4gIGlmICghaXQuY29tcG9zaXRlUnVsZSAmJiAkYnJlYWtPbkVycm9yKSB7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgaWYgKGl0LmFzeW5jKSB7XG4gICAgICBvdXQgKz0gJyB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKHZFcnJvcnMpOyAnO1xuICAgIH0gZWxzZSB7XG4gICAgICBvdXQgKz0gJyB2YWxpZGF0ZS5lcnJvcnMgPSB2RXJyb3JzOyByZXR1cm4gZmFsc2U7ICc7XG4gICAgfVxuICB9XG4gIG91dCArPSAnfSBlbHNlIHsgIGVycm9ycyA9ICcgKyAoJGVycnMpICsgJzsgaWYgKHZFcnJvcnMgIT09IG51bGwpIHsgaWYgKCcgKyAoJGVycnMpICsgJykgdkVycm9ycy5sZW5ndGggPSAnICsgKCRlcnJzKSArICc7IGVsc2UgdkVycm9ycyA9IG51bGw7IH0nO1xuICBpZiAoaXQub3B0cy5hbGxFcnJvcnMpIHtcbiAgICBvdXQgKz0gJyB9ICc7XG4gIH1cbiAgcmV0dXJuIG91dDtcbn1cbiIsICIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGdlbmVyYXRlX3BhdHRlcm4oaXQsICRrZXl3b3JkLCAkcnVsZVR5cGUpIHtcbiAgdmFyIG91dCA9ICcgJztcbiAgdmFyICRsdmwgPSBpdC5sZXZlbDtcbiAgdmFyICRkYXRhTHZsID0gaXQuZGF0YUxldmVsO1xuICB2YXIgJHNjaGVtYSA9IGl0LnNjaGVtYVska2V5d29yZF07XG4gIHZhciAkc2NoZW1hUGF0aCA9IGl0LnNjaGVtYVBhdGggKyBpdC51dGlsLmdldFByb3BlcnR5KCRrZXl3b3JkKTtcbiAgdmFyICRlcnJTY2hlbWFQYXRoID0gaXQuZXJyU2NoZW1hUGF0aCArICcvJyArICRrZXl3b3JkO1xuICB2YXIgJGJyZWFrT25FcnJvciA9ICFpdC5vcHRzLmFsbEVycm9ycztcbiAgdmFyICRkYXRhID0gJ2RhdGEnICsgKCRkYXRhTHZsIHx8ICcnKTtcbiAgdmFyICRpc0RhdGEgPSBpdC5vcHRzLiRkYXRhICYmICRzY2hlbWEgJiYgJHNjaGVtYS4kZGF0YSxcbiAgICAkc2NoZW1hVmFsdWU7XG4gIGlmICgkaXNEYXRhKSB7XG4gICAgb3V0ICs9ICcgdmFyIHNjaGVtYScgKyAoJGx2bCkgKyAnID0gJyArIChpdC51dGlsLmdldERhdGEoJHNjaGVtYS4kZGF0YSwgJGRhdGFMdmwsIGl0LmRhdGFQYXRoQXJyKSkgKyAnOyAnO1xuICAgICRzY2hlbWFWYWx1ZSA9ICdzY2hlbWEnICsgJGx2bDtcbiAgfSBlbHNlIHtcbiAgICAkc2NoZW1hVmFsdWUgPSAkc2NoZW1hO1xuICB9XG4gIHZhciAkcmVnZXhwID0gJGlzRGF0YSA/ICcobmV3IFJlZ0V4cCgnICsgJHNjaGVtYVZhbHVlICsgJykpJyA6IGl0LnVzZVBhdHRlcm4oJHNjaGVtYSk7XG4gIG91dCArPSAnaWYgKCAnO1xuICBpZiAoJGlzRGF0YSkge1xuICAgIG91dCArPSAnICgnICsgKCRzY2hlbWFWYWx1ZSkgKyAnICE9PSB1bmRlZmluZWQgJiYgdHlwZW9mICcgKyAoJHNjaGVtYVZhbHVlKSArICcgIT0gXFwnc3RyaW5nXFwnKSB8fCAnO1xuICB9XG4gIG91dCArPSAnICEnICsgKCRyZWdleHApICsgJy50ZXN0KCcgKyAoJGRhdGEpICsgJykgKSB7ICAgJztcbiAgdmFyICQkb3V0U3RhY2sgPSAkJG91dFN0YWNrIHx8IFtdO1xuICAkJG91dFN0YWNrLnB1c2gob3V0KTtcbiAgb3V0ID0gJyc7IC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gIGlmIChpdC5jcmVhdGVFcnJvcnMgIT09IGZhbHNlKSB7XG4gICAgb3V0ICs9ICcgeyBrZXl3b3JkOiBcXCcnICsgKCdwYXR0ZXJuJykgKyAnXFwnICwgZGF0YVBhdGg6IChkYXRhUGF0aCB8fCBcXCdcXCcpICsgJyArIChpdC5lcnJvclBhdGgpICsgJyAsIHNjaGVtYVBhdGg6ICcgKyAoaXQudXRpbC50b1F1b3RlZFN0cmluZygkZXJyU2NoZW1hUGF0aCkpICsgJyAsIHBhcmFtczogeyBwYXR0ZXJuOiAgJztcbiAgICBpZiAoJGlzRGF0YSkge1xuICAgICAgb3V0ICs9ICcnICsgKCRzY2hlbWFWYWx1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG91dCArPSAnJyArIChpdC51dGlsLnRvUXVvdGVkU3RyaW5nKCRzY2hlbWEpKTtcbiAgICB9XG4gICAgb3V0ICs9ICcgIH0gJztcbiAgICBpZiAoaXQub3B0cy5tZXNzYWdlcyAhPT0gZmFsc2UpIHtcbiAgICAgIG91dCArPSAnICwgbWVzc2FnZTogXFwnc2hvdWxkIG1hdGNoIHBhdHRlcm4gXCInO1xuICAgICAgaWYgKCRpc0RhdGEpIHtcbiAgICAgICAgb3V0ICs9ICdcXCcgKyAnICsgKCRzY2hlbWFWYWx1ZSkgKyAnICsgXFwnJztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG91dCArPSAnJyArIChpdC51dGlsLmVzY2FwZVF1b3Rlcygkc2NoZW1hKSk7XG4gICAgICB9XG4gICAgICBvdXQgKz0gJ1wiXFwnICc7XG4gICAgfVxuICAgIGlmIChpdC5vcHRzLnZlcmJvc2UpIHtcbiAgICAgIG91dCArPSAnICwgc2NoZW1hOiAgJztcbiAgICAgIGlmICgkaXNEYXRhKSB7XG4gICAgICAgIG91dCArPSAndmFsaWRhdGUuc2NoZW1hJyArICgkc2NoZW1hUGF0aCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvdXQgKz0gJycgKyAoaXQudXRpbC50b1F1b3RlZFN0cmluZygkc2NoZW1hKSk7XG4gICAgICB9XG4gICAgICBvdXQgKz0gJyAgICAgICAgICwgcGFyZW50U2NoZW1hOiB2YWxpZGF0ZS5zY2hlbWEnICsgKGl0LnNjaGVtYVBhdGgpICsgJyAsIGRhdGE6ICcgKyAoJGRhdGEpICsgJyAnO1xuICAgIH1cbiAgICBvdXQgKz0gJyB9ICc7XG4gIH0gZWxzZSB7XG4gICAgb3V0ICs9ICcge30gJztcbiAgfVxuICB2YXIgX19lcnIgPSBvdXQ7XG4gIG91dCA9ICQkb3V0U3RhY2sucG9wKCk7XG4gIGlmICghaXQuY29tcG9zaXRlUnVsZSAmJiAkYnJlYWtPbkVycm9yKSB7XG4gICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgaWYgKGl0LmFzeW5jKSB7XG4gICAgICBvdXQgKz0gJyB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKFsnICsgKF9fZXJyKSArICddKTsgJztcbiAgICB9IGVsc2Uge1xuICAgICAgb3V0ICs9ICcgdmFsaWRhdGUuZXJyb3JzID0gWycgKyAoX19lcnIpICsgJ107IHJldHVybiBmYWxzZTsgJztcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgb3V0ICs9ICcgdmFyIGVyciA9ICcgKyAoX19lcnIpICsgJzsgIGlmICh2RXJyb3JzID09PSBudWxsKSB2RXJyb3JzID0gW2Vycl07IGVsc2UgdkVycm9ycy5wdXNoKGVycik7IGVycm9ycysrOyAnO1xuICB9XG4gIG91dCArPSAnfSAnO1xuICBpZiAoJGJyZWFrT25FcnJvcikge1xuICAgIG91dCArPSAnIGVsc2UgeyAnO1xuICB9XG4gIHJldHVybiBvdXQ7XG59XG4iLCAiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBnZW5lcmF0ZV9wcm9wZXJ0aWVzKGl0LCAka2V5d29yZCwgJHJ1bGVUeXBlKSB7XG4gIHZhciBvdXQgPSAnICc7XG4gIHZhciAkbHZsID0gaXQubGV2ZWw7XG4gIHZhciAkZGF0YUx2bCA9IGl0LmRhdGFMZXZlbDtcbiAgdmFyICRzY2hlbWEgPSBpdC5zY2hlbWFbJGtleXdvcmRdO1xuICB2YXIgJHNjaGVtYVBhdGggPSBpdC5zY2hlbWFQYXRoICsgaXQudXRpbC5nZXRQcm9wZXJ0eSgka2V5d29yZCk7XG4gIHZhciAkZXJyU2NoZW1hUGF0aCA9IGl0LmVyclNjaGVtYVBhdGggKyAnLycgKyAka2V5d29yZDtcbiAgdmFyICRicmVha09uRXJyb3IgPSAhaXQub3B0cy5hbGxFcnJvcnM7XG4gIHZhciAkZGF0YSA9ICdkYXRhJyArICgkZGF0YUx2bCB8fCAnJyk7XG4gIHZhciAkZXJycyA9ICdlcnJzX18nICsgJGx2bDtcbiAgdmFyICRpdCA9IGl0LnV0aWwuY29weShpdCk7XG4gIHZhciAkY2xvc2luZ0JyYWNlcyA9ICcnO1xuICAkaXQubGV2ZWwrKztcbiAgdmFyICRuZXh0VmFsaWQgPSAndmFsaWQnICsgJGl0LmxldmVsO1xuICB2YXIgJGtleSA9ICdrZXknICsgJGx2bCxcbiAgICAkaWR4ID0gJ2lkeCcgKyAkbHZsLFxuICAgICRkYXRhTnh0ID0gJGl0LmRhdGFMZXZlbCA9IGl0LmRhdGFMZXZlbCArIDEsXG4gICAgJG5leHREYXRhID0gJ2RhdGEnICsgJGRhdGFOeHQsXG4gICAgJGRhdGFQcm9wZXJ0aWVzID0gJ2RhdGFQcm9wZXJ0aWVzJyArICRsdmw7XG4gIHZhciAkc2NoZW1hS2V5cyA9IE9iamVjdC5rZXlzKCRzY2hlbWEgfHwge30pLmZpbHRlcihub3RQcm90byksXG4gICAgJHBQcm9wZXJ0aWVzID0gaXQuc2NoZW1hLnBhdHRlcm5Qcm9wZXJ0aWVzIHx8IHt9LFxuICAgICRwUHJvcGVydHlLZXlzID0gT2JqZWN0LmtleXMoJHBQcm9wZXJ0aWVzKS5maWx0ZXIobm90UHJvdG8pLFxuICAgICRhUHJvcGVydGllcyA9IGl0LnNjaGVtYS5hZGRpdGlvbmFsUHJvcGVydGllcyxcbiAgICAkc29tZVByb3BlcnRpZXMgPSAkc2NoZW1hS2V5cy5sZW5ndGggfHwgJHBQcm9wZXJ0eUtleXMubGVuZ3RoLFxuICAgICRub0FkZGl0aW9uYWwgPSAkYVByb3BlcnRpZXMgPT09IGZhbHNlLFxuICAgICRhZGRpdGlvbmFsSXNTY2hlbWEgPSB0eXBlb2YgJGFQcm9wZXJ0aWVzID09ICdvYmplY3QnICYmIE9iamVjdC5rZXlzKCRhUHJvcGVydGllcykubGVuZ3RoLFxuICAgICRyZW1vdmVBZGRpdGlvbmFsID0gaXQub3B0cy5yZW1vdmVBZGRpdGlvbmFsLFxuICAgICRjaGVja0FkZGl0aW9uYWwgPSAkbm9BZGRpdGlvbmFsIHx8ICRhZGRpdGlvbmFsSXNTY2hlbWEgfHwgJHJlbW92ZUFkZGl0aW9uYWwsXG4gICAgJG93blByb3BlcnRpZXMgPSBpdC5vcHRzLm93blByb3BlcnRpZXMsXG4gICAgJGN1cnJlbnRCYXNlSWQgPSBpdC5iYXNlSWQ7XG4gIHZhciAkcmVxdWlyZWQgPSBpdC5zY2hlbWEucmVxdWlyZWQ7XG4gIGlmICgkcmVxdWlyZWQgJiYgIShpdC5vcHRzLiRkYXRhICYmICRyZXF1aXJlZC4kZGF0YSkgJiYgJHJlcXVpcmVkLmxlbmd0aCA8IGl0Lm9wdHMubG9vcFJlcXVpcmVkKSB7XG4gICAgdmFyICRyZXF1aXJlZEhhc2ggPSBpdC51dGlsLnRvSGFzaCgkcmVxdWlyZWQpO1xuICB9XG5cbiAgZnVuY3Rpb24gbm90UHJvdG8ocCkge1xuICAgIHJldHVybiBwICE9PSAnX19wcm90b19fJztcbiAgfVxuICBvdXQgKz0gJ3ZhciAnICsgKCRlcnJzKSArICcgPSBlcnJvcnM7dmFyICcgKyAoJG5leHRWYWxpZCkgKyAnID0gdHJ1ZTsnO1xuICBpZiAoJG93blByb3BlcnRpZXMpIHtcbiAgICBvdXQgKz0gJyB2YXIgJyArICgkZGF0YVByb3BlcnRpZXMpICsgJyA9IHVuZGVmaW5lZDsnO1xuICB9XG4gIGlmICgkY2hlY2tBZGRpdGlvbmFsKSB7XG4gICAgaWYgKCRvd25Qcm9wZXJ0aWVzKSB7XG4gICAgICBvdXQgKz0gJyAnICsgKCRkYXRhUHJvcGVydGllcykgKyAnID0gJyArICgkZGF0YVByb3BlcnRpZXMpICsgJyB8fCBPYmplY3Qua2V5cygnICsgKCRkYXRhKSArICcpOyBmb3IgKHZhciAnICsgKCRpZHgpICsgJz0wOyAnICsgKCRpZHgpICsgJzwnICsgKCRkYXRhUHJvcGVydGllcykgKyAnLmxlbmd0aDsgJyArICgkaWR4KSArICcrKykgeyB2YXIgJyArICgka2V5KSArICcgPSAnICsgKCRkYXRhUHJvcGVydGllcykgKyAnWycgKyAoJGlkeCkgKyAnXTsgJztcbiAgICB9IGVsc2Uge1xuICAgICAgb3V0ICs9ICcgZm9yICh2YXIgJyArICgka2V5KSArICcgaW4gJyArICgkZGF0YSkgKyAnKSB7ICc7XG4gICAgfVxuICAgIGlmICgkc29tZVByb3BlcnRpZXMpIHtcbiAgICAgIG91dCArPSAnIHZhciBpc0FkZGl0aW9uYWwnICsgKCRsdmwpICsgJyA9ICEoZmFsc2UgJztcbiAgICAgIGlmICgkc2NoZW1hS2V5cy5sZW5ndGgpIHtcbiAgICAgICAgaWYgKCRzY2hlbWFLZXlzLmxlbmd0aCA+IDgpIHtcbiAgICAgICAgICBvdXQgKz0gJyB8fCB2YWxpZGF0ZS5zY2hlbWEnICsgKCRzY2hlbWFQYXRoKSArICcuaGFzT3duUHJvcGVydHkoJyArICgka2V5KSArICcpICc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdmFyIGFycjEgPSAkc2NoZW1hS2V5cztcbiAgICAgICAgICBpZiAoYXJyMSkge1xuICAgICAgICAgICAgdmFyICRwcm9wZXJ0eUtleSwgaTEgPSAtMSxcbiAgICAgICAgICAgICAgbDEgPSBhcnIxLmxlbmd0aCAtIDE7XG4gICAgICAgICAgICB3aGlsZSAoaTEgPCBsMSkge1xuICAgICAgICAgICAgICAkcHJvcGVydHlLZXkgPSBhcnIxW2kxICs9IDFdO1xuICAgICAgICAgICAgICBvdXQgKz0gJyB8fCAnICsgKCRrZXkpICsgJyA9PSAnICsgKGl0LnV0aWwudG9RdW90ZWRTdHJpbmcoJHByb3BlcnR5S2V5KSkgKyAnICc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoJHBQcm9wZXJ0eUtleXMubGVuZ3RoKSB7XG4gICAgICAgIHZhciBhcnIyID0gJHBQcm9wZXJ0eUtleXM7XG4gICAgICAgIGlmIChhcnIyKSB7XG4gICAgICAgICAgdmFyICRwUHJvcGVydHksICRpID0gLTEsXG4gICAgICAgICAgICBsMiA9IGFycjIubGVuZ3RoIC0gMTtcbiAgICAgICAgICB3aGlsZSAoJGkgPCBsMikge1xuICAgICAgICAgICAgJHBQcm9wZXJ0eSA9IGFycjJbJGkgKz0gMV07XG4gICAgICAgICAgICBvdXQgKz0gJyB8fCAnICsgKGl0LnVzZVBhdHRlcm4oJHBQcm9wZXJ0eSkpICsgJy50ZXN0KCcgKyAoJGtleSkgKyAnKSAnO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgb3V0ICs9ICcgKTsgaWYgKGlzQWRkaXRpb25hbCcgKyAoJGx2bCkgKyAnKSB7ICc7XG4gICAgfVxuICAgIGlmICgkcmVtb3ZlQWRkaXRpb25hbCA9PSAnYWxsJykge1xuICAgICAgb3V0ICs9ICcgZGVsZXRlICcgKyAoJGRhdGEpICsgJ1snICsgKCRrZXkpICsgJ107ICc7XG4gICAgfSBlbHNlIHtcbiAgICAgIHZhciAkY3VycmVudEVycm9yUGF0aCA9IGl0LmVycm9yUGF0aDtcbiAgICAgIHZhciAkYWRkaXRpb25hbFByb3BlcnR5ID0gJ1xcJyArICcgKyAka2V5ICsgJyArIFxcJyc7XG4gICAgICBpZiAoaXQub3B0cy5fZXJyb3JEYXRhUGF0aFByb3BlcnR5KSB7XG4gICAgICAgIGl0LmVycm9yUGF0aCA9IGl0LnV0aWwuZ2V0UGF0aEV4cHIoaXQuZXJyb3JQYXRoLCAka2V5LCBpdC5vcHRzLmpzb25Qb2ludGVycyk7XG4gICAgICB9XG4gICAgICBpZiAoJG5vQWRkaXRpb25hbCkge1xuICAgICAgICBpZiAoJHJlbW92ZUFkZGl0aW9uYWwpIHtcbiAgICAgICAgICBvdXQgKz0gJyBkZWxldGUgJyArICgkZGF0YSkgKyAnWycgKyAoJGtleSkgKyAnXTsgJztcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBvdXQgKz0gJyAnICsgKCRuZXh0VmFsaWQpICsgJyA9IGZhbHNlOyAnO1xuICAgICAgICAgIHZhciAkY3VyckVyclNjaGVtYVBhdGggPSAkZXJyU2NoZW1hUGF0aDtcbiAgICAgICAgICAkZXJyU2NoZW1hUGF0aCA9IGl0LmVyclNjaGVtYVBhdGggKyAnL2FkZGl0aW9uYWxQcm9wZXJ0aWVzJztcbiAgICAgICAgICB2YXIgJCRvdXRTdGFjayA9ICQkb3V0U3RhY2sgfHwgW107XG4gICAgICAgICAgJCRvdXRTdGFjay5wdXNoKG91dCk7XG4gICAgICAgICAgb3V0ID0gJyc7IC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgICAgICAgaWYgKGl0LmNyZWF0ZUVycm9ycyAhPT0gZmFsc2UpIHtcbiAgICAgICAgICAgIG91dCArPSAnIHsga2V5d29yZDogXFwnJyArICgnYWRkaXRpb25hbFByb3BlcnRpZXMnKSArICdcXCcgLCBkYXRhUGF0aDogKGRhdGFQYXRoIHx8IFxcJ1xcJykgKyAnICsgKGl0LmVycm9yUGF0aCkgKyAnICwgc2NoZW1hUGF0aDogJyArIChpdC51dGlsLnRvUXVvdGVkU3RyaW5nKCRlcnJTY2hlbWFQYXRoKSkgKyAnICwgcGFyYW1zOiB7IGFkZGl0aW9uYWxQcm9wZXJ0eTogXFwnJyArICgkYWRkaXRpb25hbFByb3BlcnR5KSArICdcXCcgfSAnO1xuICAgICAgICAgICAgaWYgKGl0Lm9wdHMubWVzc2FnZXMgIT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgIG91dCArPSAnICwgbWVzc2FnZTogXFwnJztcbiAgICAgICAgICAgICAgaWYgKGl0Lm9wdHMuX2Vycm9yRGF0YVBhdGhQcm9wZXJ0eSkge1xuICAgICAgICAgICAgICAgIG91dCArPSAnaXMgYW4gaW52YWxpZCBhZGRpdGlvbmFsIHByb3BlcnR5JztcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBvdXQgKz0gJ3Nob3VsZCBOT1QgaGF2ZSBhZGRpdGlvbmFsIHByb3BlcnRpZXMnO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIG91dCArPSAnXFwnICc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoaXQub3B0cy52ZXJib3NlKSB7XG4gICAgICAgICAgICAgIG91dCArPSAnICwgc2NoZW1hOiBmYWxzZSAsIHBhcmVudFNjaGVtYTogdmFsaWRhdGUuc2NoZW1hJyArIChpdC5zY2hlbWFQYXRoKSArICcgLCBkYXRhOiAnICsgKCRkYXRhKSArICcgJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG91dCArPSAnIH0gJztcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgb3V0ICs9ICcge30gJztcbiAgICAgICAgICB9XG4gICAgICAgICAgdmFyIF9fZXJyID0gb3V0O1xuICAgICAgICAgIG91dCA9ICQkb3V0U3RhY2sucG9wKCk7XG4gICAgICAgICAgaWYgKCFpdC5jb21wb3NpdGVSdWxlICYmICRicmVha09uRXJyb3IpIHtcbiAgICAgICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAgICAgICAgaWYgKGl0LmFzeW5jKSB7XG4gICAgICAgICAgICAgIG91dCArPSAnIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoWycgKyAoX19lcnIpICsgJ10pOyAnO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgb3V0ICs9ICcgdmFsaWRhdGUuZXJyb3JzID0gWycgKyAoX19lcnIpICsgJ107IHJldHVybiBmYWxzZTsgJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgb3V0ICs9ICcgdmFyIGVyciA9ICcgKyAoX19lcnIpICsgJzsgIGlmICh2RXJyb3JzID09PSBudWxsKSB2RXJyb3JzID0gW2Vycl07IGVsc2UgdkVycm9ycy5wdXNoKGVycik7IGVycm9ycysrOyAnO1xuICAgICAgICAgIH1cbiAgICAgICAgICAkZXJyU2NoZW1hUGF0aCA9ICRjdXJyRXJyU2NoZW1hUGF0aDtcbiAgICAgICAgICBpZiAoJGJyZWFrT25FcnJvcikge1xuICAgICAgICAgICAgb3V0ICs9ICcgYnJlYWs7ICc7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKCRhZGRpdGlvbmFsSXNTY2hlbWEpIHtcbiAgICAgICAgaWYgKCRyZW1vdmVBZGRpdGlvbmFsID09ICdmYWlsaW5nJykge1xuICAgICAgICAgIG91dCArPSAnIHZhciAnICsgKCRlcnJzKSArICcgPSBlcnJvcnM7ICAnO1xuICAgICAgICAgIHZhciAkd2FzQ29tcG9zaXRlID0gaXQuY29tcG9zaXRlUnVsZTtcbiAgICAgICAgICBpdC5jb21wb3NpdGVSdWxlID0gJGl0LmNvbXBvc2l0ZVJ1bGUgPSB0cnVlO1xuICAgICAgICAgICRpdC5zY2hlbWEgPSAkYVByb3BlcnRpZXM7XG4gICAgICAgICAgJGl0LnNjaGVtYVBhdGggPSBpdC5zY2hlbWFQYXRoICsgJy5hZGRpdGlvbmFsUHJvcGVydGllcyc7XG4gICAgICAgICAgJGl0LmVyclNjaGVtYVBhdGggPSBpdC5lcnJTY2hlbWFQYXRoICsgJy9hZGRpdGlvbmFsUHJvcGVydGllcyc7XG4gICAgICAgICAgJGl0LmVycm9yUGF0aCA9IGl0Lm9wdHMuX2Vycm9yRGF0YVBhdGhQcm9wZXJ0eSA/IGl0LmVycm9yUGF0aCA6IGl0LnV0aWwuZ2V0UGF0aEV4cHIoaXQuZXJyb3JQYXRoLCAka2V5LCBpdC5vcHRzLmpzb25Qb2ludGVycyk7XG4gICAgICAgICAgdmFyICRwYXNzRGF0YSA9ICRkYXRhICsgJ1snICsgJGtleSArICddJztcbiAgICAgICAgICAkaXQuZGF0YVBhdGhBcnJbJGRhdGFOeHRdID0gJGtleTtcbiAgICAgICAgICB2YXIgJGNvZGUgPSBpdC52YWxpZGF0ZSgkaXQpO1xuICAgICAgICAgICRpdC5iYXNlSWQgPSAkY3VycmVudEJhc2VJZDtcbiAgICAgICAgICBpZiAoaXQudXRpbC52YXJPY2N1cmVuY2VzKCRjb2RlLCAkbmV4dERhdGEpIDwgMikge1xuICAgICAgICAgICAgb3V0ICs9ICcgJyArIChpdC51dGlsLnZhclJlcGxhY2UoJGNvZGUsICRuZXh0RGF0YSwgJHBhc3NEYXRhKSkgKyAnICc7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG91dCArPSAnIHZhciAnICsgKCRuZXh0RGF0YSkgKyAnID0gJyArICgkcGFzc0RhdGEpICsgJzsgJyArICgkY29kZSkgKyAnICc7XG4gICAgICAgICAgfVxuICAgICAgICAgIG91dCArPSAnIGlmICghJyArICgkbmV4dFZhbGlkKSArICcpIHsgZXJyb3JzID0gJyArICgkZXJycykgKyAnOyBpZiAodmFsaWRhdGUuZXJyb3JzICE9PSBudWxsKSB7IGlmIChlcnJvcnMpIHZhbGlkYXRlLmVycm9ycy5sZW5ndGggPSBlcnJvcnM7IGVsc2UgdmFsaWRhdGUuZXJyb3JzID0gbnVsbDsgfSBkZWxldGUgJyArICgkZGF0YSkgKyAnWycgKyAoJGtleSkgKyAnXTsgfSAgJztcbiAgICAgICAgICBpdC5jb21wb3NpdGVSdWxlID0gJGl0LmNvbXBvc2l0ZVJ1bGUgPSAkd2FzQ29tcG9zaXRlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICRpdC5zY2hlbWEgPSAkYVByb3BlcnRpZXM7XG4gICAgICAgICAgJGl0LnNjaGVtYVBhdGggPSBpdC5zY2hlbWFQYXRoICsgJy5hZGRpdGlvbmFsUHJvcGVydGllcyc7XG4gICAgICAgICAgJGl0LmVyclNjaGVtYVBhdGggPSBpdC5lcnJTY2hlbWFQYXRoICsgJy9hZGRpdGlvbmFsUHJvcGVydGllcyc7XG4gICAgICAgICAgJGl0LmVycm9yUGF0aCA9IGl0Lm9wdHMuX2Vycm9yRGF0YVBhdGhQcm9wZXJ0eSA/IGl0LmVycm9yUGF0aCA6IGl0LnV0aWwuZ2V0UGF0aEV4cHIoaXQuZXJyb3JQYXRoLCAka2V5LCBpdC5vcHRzLmpzb25Qb2ludGVycyk7XG4gICAgICAgICAgdmFyICRwYXNzRGF0YSA9ICRkYXRhICsgJ1snICsgJGtleSArICddJztcbiAgICAgICAgICAkaXQuZGF0YVBhdGhBcnJbJGRhdGFOeHRdID0gJGtleTtcbiAgICAgICAgICB2YXIgJGNvZGUgPSBpdC52YWxpZGF0ZSgkaXQpO1xuICAgICAgICAgICRpdC5iYXNlSWQgPSAkY3VycmVudEJhc2VJZDtcbiAgICAgICAgICBpZiAoaXQudXRpbC52YXJPY2N1cmVuY2VzKCRjb2RlLCAkbmV4dERhdGEpIDwgMikge1xuICAgICAgICAgICAgb3V0ICs9ICcgJyArIChpdC51dGlsLnZhclJlcGxhY2UoJGNvZGUsICRuZXh0RGF0YSwgJHBhc3NEYXRhKSkgKyAnICc7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG91dCArPSAnIHZhciAnICsgKCRuZXh0RGF0YSkgKyAnID0gJyArICgkcGFzc0RhdGEpICsgJzsgJyArICgkY29kZSkgKyAnICc7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICgkYnJlYWtPbkVycm9yKSB7XG4gICAgICAgICAgICBvdXQgKz0gJyBpZiAoIScgKyAoJG5leHRWYWxpZCkgKyAnKSBicmVhazsgJztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGl0LmVycm9yUGF0aCA9ICRjdXJyZW50RXJyb3JQYXRoO1xuICAgIH1cbiAgICBpZiAoJHNvbWVQcm9wZXJ0aWVzKSB7XG4gICAgICBvdXQgKz0gJyB9ICc7XG4gICAgfVxuICAgIG91dCArPSAnIH0gICc7XG4gICAgaWYgKCRicmVha09uRXJyb3IpIHtcbiAgICAgIG91dCArPSAnIGlmICgnICsgKCRuZXh0VmFsaWQpICsgJykgeyAnO1xuICAgICAgJGNsb3NpbmdCcmFjZXMgKz0gJ30nO1xuICAgIH1cbiAgfVxuICB2YXIgJHVzZURlZmF1bHRzID0gaXQub3B0cy51c2VEZWZhdWx0cyAmJiAhaXQuY29tcG9zaXRlUnVsZTtcbiAgaWYgKCRzY2hlbWFLZXlzLmxlbmd0aCkge1xuICAgIHZhciBhcnIzID0gJHNjaGVtYUtleXM7XG4gICAgaWYgKGFycjMpIHtcbiAgICAgIHZhciAkcHJvcGVydHlLZXksIGkzID0gLTEsXG4gICAgICAgIGwzID0gYXJyMy5sZW5ndGggLSAxO1xuICAgICAgd2hpbGUgKGkzIDwgbDMpIHtcbiAgICAgICAgJHByb3BlcnR5S2V5ID0gYXJyM1tpMyArPSAxXTtcbiAgICAgICAgdmFyICRzY2ggPSAkc2NoZW1hWyRwcm9wZXJ0eUtleV07XG4gICAgICAgIGlmICgoaXQub3B0cy5zdHJpY3RLZXl3b3JkcyA/ICh0eXBlb2YgJHNjaCA9PSAnb2JqZWN0JyAmJiBPYmplY3Qua2V5cygkc2NoKS5sZW5ndGggPiAwKSB8fCAkc2NoID09PSBmYWxzZSA6IGl0LnV0aWwuc2NoZW1hSGFzUnVsZXMoJHNjaCwgaXQuUlVMRVMuYWxsKSkpIHtcbiAgICAgICAgICB2YXIgJHByb3AgPSBpdC51dGlsLmdldFByb3BlcnR5KCRwcm9wZXJ0eUtleSksXG4gICAgICAgICAgICAkcGFzc0RhdGEgPSAkZGF0YSArICRwcm9wLFxuICAgICAgICAgICAgJGhhc0RlZmF1bHQgPSAkdXNlRGVmYXVsdHMgJiYgJHNjaC5kZWZhdWx0ICE9PSB1bmRlZmluZWQ7XG4gICAgICAgICAgJGl0LnNjaGVtYSA9ICRzY2g7XG4gICAgICAgICAgJGl0LnNjaGVtYVBhdGggPSAkc2NoZW1hUGF0aCArICRwcm9wO1xuICAgICAgICAgICRpdC5lcnJTY2hlbWFQYXRoID0gJGVyclNjaGVtYVBhdGggKyAnLycgKyBpdC51dGlsLmVzY2FwZUZyYWdtZW50KCRwcm9wZXJ0eUtleSk7XG4gICAgICAgICAgJGl0LmVycm9yUGF0aCA9IGl0LnV0aWwuZ2V0UGF0aChpdC5lcnJvclBhdGgsICRwcm9wZXJ0eUtleSwgaXQub3B0cy5qc29uUG9pbnRlcnMpO1xuICAgICAgICAgICRpdC5kYXRhUGF0aEFyclskZGF0YU54dF0gPSBpdC51dGlsLnRvUXVvdGVkU3RyaW5nKCRwcm9wZXJ0eUtleSk7XG4gICAgICAgICAgdmFyICRjb2RlID0gaXQudmFsaWRhdGUoJGl0KTtcbiAgICAgICAgICAkaXQuYmFzZUlkID0gJGN1cnJlbnRCYXNlSWQ7XG4gICAgICAgICAgaWYgKGl0LnV0aWwudmFyT2NjdXJlbmNlcygkY29kZSwgJG5leHREYXRhKSA8IDIpIHtcbiAgICAgICAgICAgICRjb2RlID0gaXQudXRpbC52YXJSZXBsYWNlKCRjb2RlLCAkbmV4dERhdGEsICRwYXNzRGF0YSk7XG4gICAgICAgICAgICB2YXIgJHVzZURhdGEgPSAkcGFzc0RhdGE7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHZhciAkdXNlRGF0YSA9ICRuZXh0RGF0YTtcbiAgICAgICAgICAgIG91dCArPSAnIHZhciAnICsgKCRuZXh0RGF0YSkgKyAnID0gJyArICgkcGFzc0RhdGEpICsgJzsgJztcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKCRoYXNEZWZhdWx0KSB7XG4gICAgICAgICAgICBvdXQgKz0gJyAnICsgKCRjb2RlKSArICcgJztcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgaWYgKCRyZXF1aXJlZEhhc2ggJiYgJHJlcXVpcmVkSGFzaFskcHJvcGVydHlLZXldKSB7XG4gICAgICAgICAgICAgIG91dCArPSAnIGlmICggJyArICgkdXNlRGF0YSkgKyAnID09PSB1bmRlZmluZWQgJztcbiAgICAgICAgICAgICAgaWYgKCRvd25Qcm9wZXJ0aWVzKSB7XG4gICAgICAgICAgICAgICAgb3V0ICs9ICcgfHwgISBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoJyArICgkZGF0YSkgKyAnLCBcXCcnICsgKGl0LnV0aWwuZXNjYXBlUXVvdGVzKCRwcm9wZXJ0eUtleSkpICsgJ1xcJykgJztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBvdXQgKz0gJykgeyAnICsgKCRuZXh0VmFsaWQpICsgJyA9IGZhbHNlOyAnO1xuICAgICAgICAgICAgICB2YXIgJGN1cnJlbnRFcnJvclBhdGggPSBpdC5lcnJvclBhdGgsXG4gICAgICAgICAgICAgICAgJGN1cnJFcnJTY2hlbWFQYXRoID0gJGVyclNjaGVtYVBhdGgsXG4gICAgICAgICAgICAgICAgJG1pc3NpbmdQcm9wZXJ0eSA9IGl0LnV0aWwuZXNjYXBlUXVvdGVzKCRwcm9wZXJ0eUtleSk7XG4gICAgICAgICAgICAgIGlmIChpdC5vcHRzLl9lcnJvckRhdGFQYXRoUHJvcGVydHkpIHtcbiAgICAgICAgICAgICAgICBpdC5lcnJvclBhdGggPSBpdC51dGlsLmdldFBhdGgoJGN1cnJlbnRFcnJvclBhdGgsICRwcm9wZXJ0eUtleSwgaXQub3B0cy5qc29uUG9pbnRlcnMpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICRlcnJTY2hlbWFQYXRoID0gaXQuZXJyU2NoZW1hUGF0aCArICcvcmVxdWlyZWQnO1xuICAgICAgICAgICAgICB2YXIgJCRvdXRTdGFjayA9ICQkb3V0U3RhY2sgfHwgW107XG4gICAgICAgICAgICAgICQkb3V0U3RhY2sucHVzaChvdXQpO1xuICAgICAgICAgICAgICBvdXQgPSAnJzsgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICAgICAgICAgICAgaWYgKGl0LmNyZWF0ZUVycm9ycyAhPT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICBvdXQgKz0gJyB7IGtleXdvcmQ6IFxcJycgKyAoJ3JlcXVpcmVkJykgKyAnXFwnICwgZGF0YVBhdGg6IChkYXRhUGF0aCB8fCBcXCdcXCcpICsgJyArIChpdC5lcnJvclBhdGgpICsgJyAsIHNjaGVtYVBhdGg6ICcgKyAoaXQudXRpbC50b1F1b3RlZFN0cmluZygkZXJyU2NoZW1hUGF0aCkpICsgJyAsIHBhcmFtczogeyBtaXNzaW5nUHJvcGVydHk6IFxcJycgKyAoJG1pc3NpbmdQcm9wZXJ0eSkgKyAnXFwnIH0gJztcbiAgICAgICAgICAgICAgICBpZiAoaXQub3B0cy5tZXNzYWdlcyAhPT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICAgIG91dCArPSAnICwgbWVzc2FnZTogXFwnJztcbiAgICAgICAgICAgICAgICAgIGlmIChpdC5vcHRzLl9lcnJvckRhdGFQYXRoUHJvcGVydHkpIHtcbiAgICAgICAgICAgICAgICAgICAgb3V0ICs9ICdpcyBhIHJlcXVpcmVkIHByb3BlcnR5JztcbiAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIG91dCArPSAnc2hvdWxkIGhhdmUgcmVxdWlyZWQgcHJvcGVydHkgXFxcXFxcJycgKyAoJG1pc3NpbmdQcm9wZXJ0eSkgKyAnXFxcXFxcJyc7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBvdXQgKz0gJ1xcJyAnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoaXQub3B0cy52ZXJib3NlKSB7XG4gICAgICAgICAgICAgICAgICBvdXQgKz0gJyAsIHNjaGVtYTogdmFsaWRhdGUuc2NoZW1hJyArICgkc2NoZW1hUGF0aCkgKyAnICwgcGFyZW50U2NoZW1hOiB2YWxpZGF0ZS5zY2hlbWEnICsgKGl0LnNjaGVtYVBhdGgpICsgJyAsIGRhdGE6ICcgKyAoJGRhdGEpICsgJyAnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBvdXQgKz0gJyB9ICc7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgb3V0ICs9ICcge30gJztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB2YXIgX19lcnIgPSBvdXQ7XG4gICAgICAgICAgICAgIG91dCA9ICQkb3V0U3RhY2sucG9wKCk7XG4gICAgICAgICAgICAgIGlmICghaXQuY29tcG9zaXRlUnVsZSAmJiAkYnJlYWtPbkVycm9yKSB7XG4gICAgICAgICAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICAgICAgICAgICAgaWYgKGl0LmFzeW5jKSB7XG4gICAgICAgICAgICAgICAgICBvdXQgKz0gJyB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKFsnICsgKF9fZXJyKSArICddKTsgJztcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgb3V0ICs9ICcgdmFsaWRhdGUuZXJyb3JzID0gWycgKyAoX19lcnIpICsgJ107IHJldHVybiBmYWxzZTsgJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgb3V0ICs9ICcgdmFyIGVyciA9ICcgKyAoX19lcnIpICsgJzsgIGlmICh2RXJyb3JzID09PSBudWxsKSB2RXJyb3JzID0gW2Vycl07IGVsc2UgdkVycm9ycy5wdXNoKGVycik7IGVycm9ycysrOyAnO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICRlcnJTY2hlbWFQYXRoID0gJGN1cnJFcnJTY2hlbWFQYXRoO1xuICAgICAgICAgICAgICBpdC5lcnJvclBhdGggPSAkY3VycmVudEVycm9yUGF0aDtcbiAgICAgICAgICAgICAgb3V0ICs9ICcgfSBlbHNlIHsgJztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGlmICgkYnJlYWtPbkVycm9yKSB7XG4gICAgICAgICAgICAgICAgb3V0ICs9ICcgaWYgKCAnICsgKCR1c2VEYXRhKSArICcgPT09IHVuZGVmaW5lZCAnO1xuICAgICAgICAgICAgICAgIGlmICgkb3duUHJvcGVydGllcykge1xuICAgICAgICAgICAgICAgICAgb3V0ICs9ICcgfHwgISBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoJyArICgkZGF0YSkgKyAnLCBcXCcnICsgKGl0LnV0aWwuZXNjYXBlUXVvdGVzKCRwcm9wZXJ0eUtleSkpICsgJ1xcJykgJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgb3V0ICs9ICcpIHsgJyArICgkbmV4dFZhbGlkKSArICcgPSB0cnVlOyB9IGVsc2UgeyAnO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIG91dCArPSAnIGlmICgnICsgKCR1c2VEYXRhKSArICcgIT09IHVuZGVmaW5lZCAnO1xuICAgICAgICAgICAgICAgIGlmICgkb3duUHJvcGVydGllcykge1xuICAgICAgICAgICAgICAgICAgb3V0ICs9ICcgJiYgICBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoJyArICgkZGF0YSkgKyAnLCBcXCcnICsgKGl0LnV0aWwuZXNjYXBlUXVvdGVzKCRwcm9wZXJ0eUtleSkpICsgJ1xcJykgJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgb3V0ICs9ICcgKSB7ICc7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG91dCArPSAnICcgKyAoJGNvZGUpICsgJyB9ICc7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICgkYnJlYWtPbkVycm9yKSB7XG4gICAgICAgICAgb3V0ICs9ICcgaWYgKCcgKyAoJG5leHRWYWxpZCkgKyAnKSB7ICc7XG4gICAgICAgICAgJGNsb3NpbmdCcmFjZXMgKz0gJ30nO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGlmICgkcFByb3BlcnR5S2V5cy5sZW5ndGgpIHtcbiAgICB2YXIgYXJyNCA9ICRwUHJvcGVydHlLZXlzO1xuICAgIGlmIChhcnI0KSB7XG4gICAgICB2YXIgJHBQcm9wZXJ0eSwgaTQgPSAtMSxcbiAgICAgICAgbDQgPSBhcnI0Lmxlbmd0aCAtIDE7XG4gICAgICB3aGlsZSAoaTQgPCBsNCkge1xuICAgICAgICAkcFByb3BlcnR5ID0gYXJyNFtpNCArPSAxXTtcbiAgICAgICAgdmFyICRzY2ggPSAkcFByb3BlcnRpZXNbJHBQcm9wZXJ0eV07XG4gICAgICAgIGlmICgoaXQub3B0cy5zdHJpY3RLZXl3b3JkcyA/ICh0eXBlb2YgJHNjaCA9PSAnb2JqZWN0JyAmJiBPYmplY3Qua2V5cygkc2NoKS5sZW5ndGggPiAwKSB8fCAkc2NoID09PSBmYWxzZSA6IGl0LnV0aWwuc2NoZW1hSGFzUnVsZXMoJHNjaCwgaXQuUlVMRVMuYWxsKSkpIHtcbiAgICAgICAgICAkaXQuc2NoZW1hID0gJHNjaDtcbiAgICAgICAgICAkaXQuc2NoZW1hUGF0aCA9IGl0LnNjaGVtYVBhdGggKyAnLnBhdHRlcm5Qcm9wZXJ0aWVzJyArIGl0LnV0aWwuZ2V0UHJvcGVydHkoJHBQcm9wZXJ0eSk7XG4gICAgICAgICAgJGl0LmVyclNjaGVtYVBhdGggPSBpdC5lcnJTY2hlbWFQYXRoICsgJy9wYXR0ZXJuUHJvcGVydGllcy8nICsgaXQudXRpbC5lc2NhcGVGcmFnbWVudCgkcFByb3BlcnR5KTtcbiAgICAgICAgICBpZiAoJG93blByb3BlcnRpZXMpIHtcbiAgICAgICAgICAgIG91dCArPSAnICcgKyAoJGRhdGFQcm9wZXJ0aWVzKSArICcgPSAnICsgKCRkYXRhUHJvcGVydGllcykgKyAnIHx8IE9iamVjdC5rZXlzKCcgKyAoJGRhdGEpICsgJyk7IGZvciAodmFyICcgKyAoJGlkeCkgKyAnPTA7ICcgKyAoJGlkeCkgKyAnPCcgKyAoJGRhdGFQcm9wZXJ0aWVzKSArICcubGVuZ3RoOyAnICsgKCRpZHgpICsgJysrKSB7IHZhciAnICsgKCRrZXkpICsgJyA9ICcgKyAoJGRhdGFQcm9wZXJ0aWVzKSArICdbJyArICgkaWR4KSArICddOyAnO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBvdXQgKz0gJyBmb3IgKHZhciAnICsgKCRrZXkpICsgJyBpbiAnICsgKCRkYXRhKSArICcpIHsgJztcbiAgICAgICAgICB9XG4gICAgICAgICAgb3V0ICs9ICcgaWYgKCcgKyAoaXQudXNlUGF0dGVybigkcFByb3BlcnR5KSkgKyAnLnRlc3QoJyArICgka2V5KSArICcpKSB7ICc7XG4gICAgICAgICAgJGl0LmVycm9yUGF0aCA9IGl0LnV0aWwuZ2V0UGF0aEV4cHIoaXQuZXJyb3JQYXRoLCAka2V5LCBpdC5vcHRzLmpzb25Qb2ludGVycyk7XG4gICAgICAgICAgdmFyICRwYXNzRGF0YSA9ICRkYXRhICsgJ1snICsgJGtleSArICddJztcbiAgICAgICAgICAkaXQuZGF0YVBhdGhBcnJbJGRhdGFOeHRdID0gJGtleTtcbiAgICAgICAgICB2YXIgJGNvZGUgPSBpdC52YWxpZGF0ZSgkaXQpO1xuICAgICAgICAgICRpdC5iYXNlSWQgPSAkY3VycmVudEJhc2VJZDtcbiAgICAgICAgICBpZiAoaXQudXRpbC52YXJPY2N1cmVuY2VzKCRjb2RlLCAkbmV4dERhdGEpIDwgMikge1xuICAgICAgICAgICAgb3V0ICs9ICcgJyArIChpdC51dGlsLnZhclJlcGxhY2UoJGNvZGUsICRuZXh0RGF0YSwgJHBhc3NEYXRhKSkgKyAnICc7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG91dCArPSAnIHZhciAnICsgKCRuZXh0RGF0YSkgKyAnID0gJyArICgkcGFzc0RhdGEpICsgJzsgJyArICgkY29kZSkgKyAnICc7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICgkYnJlYWtPbkVycm9yKSB7XG4gICAgICAgICAgICBvdXQgKz0gJyBpZiAoIScgKyAoJG5leHRWYWxpZCkgKyAnKSBicmVhazsgJztcbiAgICAgICAgICB9XG4gICAgICAgICAgb3V0ICs9ICcgfSAnO1xuICAgICAgICAgIGlmICgkYnJlYWtPbkVycm9yKSB7XG4gICAgICAgICAgICBvdXQgKz0gJyBlbHNlICcgKyAoJG5leHRWYWxpZCkgKyAnID0gdHJ1ZTsgJztcbiAgICAgICAgICB9XG4gICAgICAgICAgb3V0ICs9ICcgfSAgJztcbiAgICAgICAgICBpZiAoJGJyZWFrT25FcnJvcikge1xuICAgICAgICAgICAgb3V0ICs9ICcgaWYgKCcgKyAoJG5leHRWYWxpZCkgKyAnKSB7ICc7XG4gICAgICAgICAgICAkY2xvc2luZ0JyYWNlcyArPSAnfSc7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG4gIGlmICgkYnJlYWtPbkVycm9yKSB7XG4gICAgb3V0ICs9ICcgJyArICgkY2xvc2luZ0JyYWNlcykgKyAnIGlmICgnICsgKCRlcnJzKSArICcgPT0gZXJyb3JzKSB7JztcbiAgfVxuICByZXR1cm4gb3V0O1xufVxuIiwgIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZ2VuZXJhdGVfcHJvcGVydHlOYW1lcyhpdCwgJGtleXdvcmQsICRydWxlVHlwZSkge1xuICB2YXIgb3V0ID0gJyAnO1xuICB2YXIgJGx2bCA9IGl0LmxldmVsO1xuICB2YXIgJGRhdGFMdmwgPSBpdC5kYXRhTGV2ZWw7XG4gIHZhciAkc2NoZW1hID0gaXQuc2NoZW1hWyRrZXl3b3JkXTtcbiAgdmFyICRzY2hlbWFQYXRoID0gaXQuc2NoZW1hUGF0aCArIGl0LnV0aWwuZ2V0UHJvcGVydHkoJGtleXdvcmQpO1xuICB2YXIgJGVyclNjaGVtYVBhdGggPSBpdC5lcnJTY2hlbWFQYXRoICsgJy8nICsgJGtleXdvcmQ7XG4gIHZhciAkYnJlYWtPbkVycm9yID0gIWl0Lm9wdHMuYWxsRXJyb3JzO1xuICB2YXIgJGRhdGEgPSAnZGF0YScgKyAoJGRhdGFMdmwgfHwgJycpO1xuICB2YXIgJGVycnMgPSAnZXJyc19fJyArICRsdmw7XG4gIHZhciAkaXQgPSBpdC51dGlsLmNvcHkoaXQpO1xuICB2YXIgJGNsb3NpbmdCcmFjZXMgPSAnJztcbiAgJGl0LmxldmVsKys7XG4gIHZhciAkbmV4dFZhbGlkID0gJ3ZhbGlkJyArICRpdC5sZXZlbDtcbiAgb3V0ICs9ICd2YXIgJyArICgkZXJycykgKyAnID0gZXJyb3JzOyc7XG4gIGlmICgoaXQub3B0cy5zdHJpY3RLZXl3b3JkcyA/ICh0eXBlb2YgJHNjaGVtYSA9PSAnb2JqZWN0JyAmJiBPYmplY3Qua2V5cygkc2NoZW1hKS5sZW5ndGggPiAwKSB8fCAkc2NoZW1hID09PSBmYWxzZSA6IGl0LnV0aWwuc2NoZW1hSGFzUnVsZXMoJHNjaGVtYSwgaXQuUlVMRVMuYWxsKSkpIHtcbiAgICAkaXQuc2NoZW1hID0gJHNjaGVtYTtcbiAgICAkaXQuc2NoZW1hUGF0aCA9ICRzY2hlbWFQYXRoO1xuICAgICRpdC5lcnJTY2hlbWFQYXRoID0gJGVyclNjaGVtYVBhdGg7XG4gICAgdmFyICRrZXkgPSAna2V5JyArICRsdmwsXG4gICAgICAkaWR4ID0gJ2lkeCcgKyAkbHZsLFxuICAgICAgJGkgPSAnaScgKyAkbHZsLFxuICAgICAgJGludmFsaWROYW1lID0gJ1xcJyArICcgKyAka2V5ICsgJyArIFxcJycsXG4gICAgICAkZGF0YU54dCA9ICRpdC5kYXRhTGV2ZWwgPSBpdC5kYXRhTGV2ZWwgKyAxLFxuICAgICAgJG5leHREYXRhID0gJ2RhdGEnICsgJGRhdGFOeHQsXG4gICAgICAkZGF0YVByb3BlcnRpZXMgPSAnZGF0YVByb3BlcnRpZXMnICsgJGx2bCxcbiAgICAgICRvd25Qcm9wZXJ0aWVzID0gaXQub3B0cy5vd25Qcm9wZXJ0aWVzLFxuICAgICAgJGN1cnJlbnRCYXNlSWQgPSBpdC5iYXNlSWQ7XG4gICAgaWYgKCRvd25Qcm9wZXJ0aWVzKSB7XG4gICAgICBvdXQgKz0gJyB2YXIgJyArICgkZGF0YVByb3BlcnRpZXMpICsgJyA9IHVuZGVmaW5lZDsgJztcbiAgICB9XG4gICAgaWYgKCRvd25Qcm9wZXJ0aWVzKSB7XG4gICAgICBvdXQgKz0gJyAnICsgKCRkYXRhUHJvcGVydGllcykgKyAnID0gJyArICgkZGF0YVByb3BlcnRpZXMpICsgJyB8fCBPYmplY3Qua2V5cygnICsgKCRkYXRhKSArICcpOyBmb3IgKHZhciAnICsgKCRpZHgpICsgJz0wOyAnICsgKCRpZHgpICsgJzwnICsgKCRkYXRhUHJvcGVydGllcykgKyAnLmxlbmd0aDsgJyArICgkaWR4KSArICcrKykgeyB2YXIgJyArICgka2V5KSArICcgPSAnICsgKCRkYXRhUHJvcGVydGllcykgKyAnWycgKyAoJGlkeCkgKyAnXTsgJztcbiAgICB9IGVsc2Uge1xuICAgICAgb3V0ICs9ICcgZm9yICh2YXIgJyArICgka2V5KSArICcgaW4gJyArICgkZGF0YSkgKyAnKSB7ICc7XG4gICAgfVxuICAgIG91dCArPSAnIHZhciBzdGFydEVycnMnICsgKCRsdmwpICsgJyA9IGVycm9yczsgJztcbiAgICB2YXIgJHBhc3NEYXRhID0gJGtleTtcbiAgICB2YXIgJHdhc0NvbXBvc2l0ZSA9IGl0LmNvbXBvc2l0ZVJ1bGU7XG4gICAgaXQuY29tcG9zaXRlUnVsZSA9ICRpdC5jb21wb3NpdGVSdWxlID0gdHJ1ZTtcbiAgICB2YXIgJGNvZGUgPSBpdC52YWxpZGF0ZSgkaXQpO1xuICAgICRpdC5iYXNlSWQgPSAkY3VycmVudEJhc2VJZDtcbiAgICBpZiAoaXQudXRpbC52YXJPY2N1cmVuY2VzKCRjb2RlLCAkbmV4dERhdGEpIDwgMikge1xuICAgICAgb3V0ICs9ICcgJyArIChpdC51dGlsLnZhclJlcGxhY2UoJGNvZGUsICRuZXh0RGF0YSwgJHBhc3NEYXRhKSkgKyAnICc7XG4gICAgfSBlbHNlIHtcbiAgICAgIG91dCArPSAnIHZhciAnICsgKCRuZXh0RGF0YSkgKyAnID0gJyArICgkcGFzc0RhdGEpICsgJzsgJyArICgkY29kZSkgKyAnICc7XG4gICAgfVxuICAgIGl0LmNvbXBvc2l0ZVJ1bGUgPSAkaXQuY29tcG9zaXRlUnVsZSA9ICR3YXNDb21wb3NpdGU7XG4gICAgb3V0ICs9ICcgaWYgKCEnICsgKCRuZXh0VmFsaWQpICsgJykgeyBmb3IgKHZhciAnICsgKCRpKSArICc9c3RhcnRFcnJzJyArICgkbHZsKSArICc7ICcgKyAoJGkpICsgJzxlcnJvcnM7ICcgKyAoJGkpICsgJysrKSB7IHZFcnJvcnNbJyArICgkaSkgKyAnXS5wcm9wZXJ0eU5hbWUgPSAnICsgKCRrZXkpICsgJzsgfSAgIHZhciBlcnIgPSAgICc7IC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgaWYgKGl0LmNyZWF0ZUVycm9ycyAhPT0gZmFsc2UpIHtcbiAgICAgIG91dCArPSAnIHsga2V5d29yZDogXFwnJyArICgncHJvcGVydHlOYW1lcycpICsgJ1xcJyAsIGRhdGFQYXRoOiAoZGF0YVBhdGggfHwgXFwnXFwnKSArICcgKyAoaXQuZXJyb3JQYXRoKSArICcgLCBzY2hlbWFQYXRoOiAnICsgKGl0LnV0aWwudG9RdW90ZWRTdHJpbmcoJGVyclNjaGVtYVBhdGgpKSArICcgLCBwYXJhbXM6IHsgcHJvcGVydHlOYW1lOiBcXCcnICsgKCRpbnZhbGlkTmFtZSkgKyAnXFwnIH0gJztcbiAgICAgIGlmIChpdC5vcHRzLm1lc3NhZ2VzICE9PSBmYWxzZSkge1xuICAgICAgICBvdXQgKz0gJyAsIG1lc3NhZ2U6IFxcJ3Byb3BlcnR5IG5hbWUgXFxcXFxcJycgKyAoJGludmFsaWROYW1lKSArICdcXFxcXFwnIGlzIGludmFsaWRcXCcgJztcbiAgICAgIH1cbiAgICAgIGlmIChpdC5vcHRzLnZlcmJvc2UpIHtcbiAgICAgICAgb3V0ICs9ICcgLCBzY2hlbWE6IHZhbGlkYXRlLnNjaGVtYScgKyAoJHNjaGVtYVBhdGgpICsgJyAsIHBhcmVudFNjaGVtYTogdmFsaWRhdGUuc2NoZW1hJyArIChpdC5zY2hlbWFQYXRoKSArICcgLCBkYXRhOiAnICsgKCRkYXRhKSArICcgJztcbiAgICAgIH1cbiAgICAgIG91dCArPSAnIH0gJztcbiAgICB9IGVsc2Uge1xuICAgICAgb3V0ICs9ICcge30gJztcbiAgICB9XG4gICAgb3V0ICs9ICc7ICBpZiAodkVycm9ycyA9PT0gbnVsbCkgdkVycm9ycyA9IFtlcnJdOyBlbHNlIHZFcnJvcnMucHVzaChlcnIpOyBlcnJvcnMrKzsgJztcbiAgICBpZiAoIWl0LmNvbXBvc2l0ZVJ1bGUgJiYgJGJyZWFrT25FcnJvcikge1xuICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICBpZiAoaXQuYXN5bmMpIHtcbiAgICAgICAgb3V0ICs9ICcgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcih2RXJyb3JzKTsgJztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG91dCArPSAnIHZhbGlkYXRlLmVycm9ycyA9IHZFcnJvcnM7IHJldHVybiBmYWxzZTsgJztcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKCRicmVha09uRXJyb3IpIHtcbiAgICAgIG91dCArPSAnIGJyZWFrOyAnO1xuICAgIH1cbiAgICBvdXQgKz0gJyB9IH0nO1xuICB9XG4gIGlmICgkYnJlYWtPbkVycm9yKSB7XG4gICAgb3V0ICs9ICcgJyArICgkY2xvc2luZ0JyYWNlcykgKyAnIGlmICgnICsgKCRlcnJzKSArICcgPT0gZXJyb3JzKSB7JztcbiAgfVxuICByZXR1cm4gb3V0O1xufVxuIiwgIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZ2VuZXJhdGVfcmVxdWlyZWQoaXQsICRrZXl3b3JkLCAkcnVsZVR5cGUpIHtcbiAgdmFyIG91dCA9ICcgJztcbiAgdmFyICRsdmwgPSBpdC5sZXZlbDtcbiAgdmFyICRkYXRhTHZsID0gaXQuZGF0YUxldmVsO1xuICB2YXIgJHNjaGVtYSA9IGl0LnNjaGVtYVska2V5d29yZF07XG4gIHZhciAkc2NoZW1hUGF0aCA9IGl0LnNjaGVtYVBhdGggKyBpdC51dGlsLmdldFByb3BlcnR5KCRrZXl3b3JkKTtcbiAgdmFyICRlcnJTY2hlbWFQYXRoID0gaXQuZXJyU2NoZW1hUGF0aCArICcvJyArICRrZXl3b3JkO1xuICB2YXIgJGJyZWFrT25FcnJvciA9ICFpdC5vcHRzLmFsbEVycm9ycztcbiAgdmFyICRkYXRhID0gJ2RhdGEnICsgKCRkYXRhTHZsIHx8ICcnKTtcbiAgdmFyICR2YWxpZCA9ICd2YWxpZCcgKyAkbHZsO1xuICB2YXIgJGlzRGF0YSA9IGl0Lm9wdHMuJGRhdGEgJiYgJHNjaGVtYSAmJiAkc2NoZW1hLiRkYXRhLFxuICAgICRzY2hlbWFWYWx1ZTtcbiAgaWYgKCRpc0RhdGEpIHtcbiAgICBvdXQgKz0gJyB2YXIgc2NoZW1hJyArICgkbHZsKSArICcgPSAnICsgKGl0LnV0aWwuZ2V0RGF0YSgkc2NoZW1hLiRkYXRhLCAkZGF0YUx2bCwgaXQuZGF0YVBhdGhBcnIpKSArICc7ICc7XG4gICAgJHNjaGVtYVZhbHVlID0gJ3NjaGVtYScgKyAkbHZsO1xuICB9IGVsc2Uge1xuICAgICRzY2hlbWFWYWx1ZSA9ICRzY2hlbWE7XG4gIH1cbiAgdmFyICR2U2NoZW1hID0gJ3NjaGVtYScgKyAkbHZsO1xuICBpZiAoISRpc0RhdGEpIHtcbiAgICBpZiAoJHNjaGVtYS5sZW5ndGggPCBpdC5vcHRzLmxvb3BSZXF1aXJlZCAmJiBpdC5zY2hlbWEucHJvcGVydGllcyAmJiBPYmplY3Qua2V5cyhpdC5zY2hlbWEucHJvcGVydGllcykubGVuZ3RoKSB7XG4gICAgICB2YXIgJHJlcXVpcmVkID0gW107XG4gICAgICB2YXIgYXJyMSA9ICRzY2hlbWE7XG4gICAgICBpZiAoYXJyMSkge1xuICAgICAgICB2YXIgJHByb3BlcnR5LCBpMSA9IC0xLFxuICAgICAgICAgIGwxID0gYXJyMS5sZW5ndGggLSAxO1xuICAgICAgICB3aGlsZSAoaTEgPCBsMSkge1xuICAgICAgICAgICRwcm9wZXJ0eSA9IGFycjFbaTEgKz0gMV07XG4gICAgICAgICAgdmFyICRwcm9wZXJ0eVNjaCA9IGl0LnNjaGVtYS5wcm9wZXJ0aWVzWyRwcm9wZXJ0eV07XG4gICAgICAgICAgaWYgKCEoJHByb3BlcnR5U2NoICYmIChpdC5vcHRzLnN0cmljdEtleXdvcmRzID8gKHR5cGVvZiAkcHJvcGVydHlTY2ggPT0gJ29iamVjdCcgJiYgT2JqZWN0LmtleXMoJHByb3BlcnR5U2NoKS5sZW5ndGggPiAwKSB8fCAkcHJvcGVydHlTY2ggPT09IGZhbHNlIDogaXQudXRpbC5zY2hlbWFIYXNSdWxlcygkcHJvcGVydHlTY2gsIGl0LlJVTEVTLmFsbCkpKSkge1xuICAgICAgICAgICAgJHJlcXVpcmVkWyRyZXF1aXJlZC5sZW5ndGhdID0gJHByb3BlcnR5O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgJHJlcXVpcmVkID0gJHNjaGVtYTtcbiAgICB9XG4gIH1cbiAgaWYgKCRpc0RhdGEgfHwgJHJlcXVpcmVkLmxlbmd0aCkge1xuICAgIHZhciAkY3VycmVudEVycm9yUGF0aCA9IGl0LmVycm9yUGF0aCxcbiAgICAgICRsb29wUmVxdWlyZWQgPSAkaXNEYXRhIHx8ICRyZXF1aXJlZC5sZW5ndGggPj0gaXQub3B0cy5sb29wUmVxdWlyZWQsXG4gICAgICAkb3duUHJvcGVydGllcyA9IGl0Lm9wdHMub3duUHJvcGVydGllcztcbiAgICBpZiAoJGJyZWFrT25FcnJvcikge1xuICAgICAgb3V0ICs9ICcgdmFyIG1pc3NpbmcnICsgKCRsdmwpICsgJzsgJztcbiAgICAgIGlmICgkbG9vcFJlcXVpcmVkKSB7XG4gICAgICAgIGlmICghJGlzRGF0YSkge1xuICAgICAgICAgIG91dCArPSAnIHZhciAnICsgKCR2U2NoZW1hKSArICcgPSB2YWxpZGF0ZS5zY2hlbWEnICsgKCRzY2hlbWFQYXRoKSArICc7ICc7XG4gICAgICAgIH1cbiAgICAgICAgdmFyICRpID0gJ2knICsgJGx2bCxcbiAgICAgICAgICAkcHJvcGVydHlQYXRoID0gJ3NjaGVtYScgKyAkbHZsICsgJ1snICsgJGkgKyAnXScsXG4gICAgICAgICAgJG1pc3NpbmdQcm9wZXJ0eSA9ICdcXCcgKyAnICsgJHByb3BlcnR5UGF0aCArICcgKyBcXCcnO1xuICAgICAgICBpZiAoaXQub3B0cy5fZXJyb3JEYXRhUGF0aFByb3BlcnR5KSB7XG4gICAgICAgICAgaXQuZXJyb3JQYXRoID0gaXQudXRpbC5nZXRQYXRoRXhwcigkY3VycmVudEVycm9yUGF0aCwgJHByb3BlcnR5UGF0aCwgaXQub3B0cy5qc29uUG9pbnRlcnMpO1xuICAgICAgICB9XG4gICAgICAgIG91dCArPSAnIHZhciAnICsgKCR2YWxpZCkgKyAnID0gdHJ1ZTsgJztcbiAgICAgICAgaWYgKCRpc0RhdGEpIHtcbiAgICAgICAgICBvdXQgKz0gJyBpZiAoc2NoZW1hJyArICgkbHZsKSArICcgPT09IHVuZGVmaW5lZCkgJyArICgkdmFsaWQpICsgJyA9IHRydWU7IGVsc2UgaWYgKCFBcnJheS5pc0FycmF5KHNjaGVtYScgKyAoJGx2bCkgKyAnKSkgJyArICgkdmFsaWQpICsgJyA9IGZhbHNlOyBlbHNlIHsnO1xuICAgICAgICB9XG4gICAgICAgIG91dCArPSAnIGZvciAodmFyICcgKyAoJGkpICsgJyA9IDA7ICcgKyAoJGkpICsgJyA8ICcgKyAoJHZTY2hlbWEpICsgJy5sZW5ndGg7ICcgKyAoJGkpICsgJysrKSB7ICcgKyAoJHZhbGlkKSArICcgPSAnICsgKCRkYXRhKSArICdbJyArICgkdlNjaGVtYSkgKyAnWycgKyAoJGkpICsgJ11dICE9PSB1bmRlZmluZWQgJztcbiAgICAgICAgaWYgKCRvd25Qcm9wZXJ0aWVzKSB7XG4gICAgICAgICAgb3V0ICs9ICcgJiYgICBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoJyArICgkZGF0YSkgKyAnLCAnICsgKCR2U2NoZW1hKSArICdbJyArICgkaSkgKyAnXSkgJztcbiAgICAgICAgfVxuICAgICAgICBvdXQgKz0gJzsgaWYgKCEnICsgKCR2YWxpZCkgKyAnKSBicmVhazsgfSAnO1xuICAgICAgICBpZiAoJGlzRGF0YSkge1xuICAgICAgICAgIG91dCArPSAnICB9ICAnO1xuICAgICAgICB9XG4gICAgICAgIG91dCArPSAnICBpZiAoIScgKyAoJHZhbGlkKSArICcpIHsgICAnO1xuICAgICAgICB2YXIgJCRvdXRTdGFjayA9ICQkb3V0U3RhY2sgfHwgW107XG4gICAgICAgICQkb3V0U3RhY2sucHVzaChvdXQpO1xuICAgICAgICBvdXQgPSAnJzsgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICAgICAgaWYgKGl0LmNyZWF0ZUVycm9ycyAhPT0gZmFsc2UpIHtcbiAgICAgICAgICBvdXQgKz0gJyB7IGtleXdvcmQ6IFxcJycgKyAoJ3JlcXVpcmVkJykgKyAnXFwnICwgZGF0YVBhdGg6IChkYXRhUGF0aCB8fCBcXCdcXCcpICsgJyArIChpdC5lcnJvclBhdGgpICsgJyAsIHNjaGVtYVBhdGg6ICcgKyAoaXQudXRpbC50b1F1b3RlZFN0cmluZygkZXJyU2NoZW1hUGF0aCkpICsgJyAsIHBhcmFtczogeyBtaXNzaW5nUHJvcGVydHk6IFxcJycgKyAoJG1pc3NpbmdQcm9wZXJ0eSkgKyAnXFwnIH0gJztcbiAgICAgICAgICBpZiAoaXQub3B0cy5tZXNzYWdlcyAhPT0gZmFsc2UpIHtcbiAgICAgICAgICAgIG91dCArPSAnICwgbWVzc2FnZTogXFwnJztcbiAgICAgICAgICAgIGlmIChpdC5vcHRzLl9lcnJvckRhdGFQYXRoUHJvcGVydHkpIHtcbiAgICAgICAgICAgICAgb3V0ICs9ICdpcyBhIHJlcXVpcmVkIHByb3BlcnR5JztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIG91dCArPSAnc2hvdWxkIGhhdmUgcmVxdWlyZWQgcHJvcGVydHkgXFxcXFxcJycgKyAoJG1pc3NpbmdQcm9wZXJ0eSkgKyAnXFxcXFxcJyc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBvdXQgKz0gJ1xcJyAnO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoaXQub3B0cy52ZXJib3NlKSB7XG4gICAgICAgICAgICBvdXQgKz0gJyAsIHNjaGVtYTogdmFsaWRhdGUuc2NoZW1hJyArICgkc2NoZW1hUGF0aCkgKyAnICwgcGFyZW50U2NoZW1hOiB2YWxpZGF0ZS5zY2hlbWEnICsgKGl0LnNjaGVtYVBhdGgpICsgJyAsIGRhdGE6ICcgKyAoJGRhdGEpICsgJyAnO1xuICAgICAgICAgIH1cbiAgICAgICAgICBvdXQgKz0gJyB9ICc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgb3V0ICs9ICcge30gJztcbiAgICAgICAgfVxuICAgICAgICB2YXIgX19lcnIgPSBvdXQ7XG4gICAgICAgIG91dCA9ICQkb3V0U3RhY2sucG9wKCk7XG4gICAgICAgIGlmICghaXQuY29tcG9zaXRlUnVsZSAmJiAkYnJlYWtPbkVycm9yKSB7XG4gICAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICAgICAgaWYgKGl0LmFzeW5jKSB7XG4gICAgICAgICAgICBvdXQgKz0gJyB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKFsnICsgKF9fZXJyKSArICddKTsgJztcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgb3V0ICs9ICcgdmFsaWRhdGUuZXJyb3JzID0gWycgKyAoX19lcnIpICsgJ107IHJldHVybiBmYWxzZTsgJztcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgb3V0ICs9ICcgdmFyIGVyciA9ICcgKyAoX19lcnIpICsgJzsgIGlmICh2RXJyb3JzID09PSBudWxsKSB2RXJyb3JzID0gW2Vycl07IGVsc2UgdkVycm9ycy5wdXNoKGVycik7IGVycm9ycysrOyAnO1xuICAgICAgICB9XG4gICAgICAgIG91dCArPSAnIH0gZWxzZSB7ICc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvdXQgKz0gJyBpZiAoICc7XG4gICAgICAgIHZhciBhcnIyID0gJHJlcXVpcmVkO1xuICAgICAgICBpZiAoYXJyMikge1xuICAgICAgICAgIHZhciAkcHJvcGVydHlLZXksICRpID0gLTEsXG4gICAgICAgICAgICBsMiA9IGFycjIubGVuZ3RoIC0gMTtcbiAgICAgICAgICB3aGlsZSAoJGkgPCBsMikge1xuICAgICAgICAgICAgJHByb3BlcnR5S2V5ID0gYXJyMlskaSArPSAxXTtcbiAgICAgICAgICAgIGlmICgkaSkge1xuICAgICAgICAgICAgICBvdXQgKz0gJyB8fCAnO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyICRwcm9wID0gaXQudXRpbC5nZXRQcm9wZXJ0eSgkcHJvcGVydHlLZXkpLFxuICAgICAgICAgICAgICAkdXNlRGF0YSA9ICRkYXRhICsgJHByb3A7XG4gICAgICAgICAgICBvdXQgKz0gJyAoICggJyArICgkdXNlRGF0YSkgKyAnID09PSB1bmRlZmluZWQgJztcbiAgICAgICAgICAgIGlmICgkb3duUHJvcGVydGllcykge1xuICAgICAgICAgICAgICBvdXQgKz0gJyB8fCAhIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCgnICsgKCRkYXRhKSArICcsIFxcJycgKyAoaXQudXRpbC5lc2NhcGVRdW90ZXMoJHByb3BlcnR5S2V5KSkgKyAnXFwnKSAnO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgb3V0ICs9ICcpICYmIChtaXNzaW5nJyArICgkbHZsKSArICcgPSAnICsgKGl0LnV0aWwudG9RdW90ZWRTdHJpbmcoaXQub3B0cy5qc29uUG9pbnRlcnMgPyAkcHJvcGVydHlLZXkgOiAkcHJvcCkpICsgJykgKSAnO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBvdXQgKz0gJykgeyAgJztcbiAgICAgICAgdmFyICRwcm9wZXJ0eVBhdGggPSAnbWlzc2luZycgKyAkbHZsLFxuICAgICAgICAgICRtaXNzaW5nUHJvcGVydHkgPSAnXFwnICsgJyArICRwcm9wZXJ0eVBhdGggKyAnICsgXFwnJztcbiAgICAgICAgaWYgKGl0Lm9wdHMuX2Vycm9yRGF0YVBhdGhQcm9wZXJ0eSkge1xuICAgICAgICAgIGl0LmVycm9yUGF0aCA9IGl0Lm9wdHMuanNvblBvaW50ZXJzID8gaXQudXRpbC5nZXRQYXRoRXhwcigkY3VycmVudEVycm9yUGF0aCwgJHByb3BlcnR5UGF0aCwgdHJ1ZSkgOiAkY3VycmVudEVycm9yUGF0aCArICcgKyAnICsgJHByb3BlcnR5UGF0aDtcbiAgICAgICAgfVxuICAgICAgICB2YXIgJCRvdXRTdGFjayA9ICQkb3V0U3RhY2sgfHwgW107XG4gICAgICAgICQkb3V0U3RhY2sucHVzaChvdXQpO1xuICAgICAgICBvdXQgPSAnJzsgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICAgICAgaWYgKGl0LmNyZWF0ZUVycm9ycyAhPT0gZmFsc2UpIHtcbiAgICAgICAgICBvdXQgKz0gJyB7IGtleXdvcmQ6IFxcJycgKyAoJ3JlcXVpcmVkJykgKyAnXFwnICwgZGF0YVBhdGg6IChkYXRhUGF0aCB8fCBcXCdcXCcpICsgJyArIChpdC5lcnJvclBhdGgpICsgJyAsIHNjaGVtYVBhdGg6ICcgKyAoaXQudXRpbC50b1F1b3RlZFN0cmluZygkZXJyU2NoZW1hUGF0aCkpICsgJyAsIHBhcmFtczogeyBtaXNzaW5nUHJvcGVydHk6IFxcJycgKyAoJG1pc3NpbmdQcm9wZXJ0eSkgKyAnXFwnIH0gJztcbiAgICAgICAgICBpZiAoaXQub3B0cy5tZXNzYWdlcyAhPT0gZmFsc2UpIHtcbiAgICAgICAgICAgIG91dCArPSAnICwgbWVzc2FnZTogXFwnJztcbiAgICAgICAgICAgIGlmIChpdC5vcHRzLl9lcnJvckRhdGFQYXRoUHJvcGVydHkpIHtcbiAgICAgICAgICAgICAgb3V0ICs9ICdpcyBhIHJlcXVpcmVkIHByb3BlcnR5JztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIG91dCArPSAnc2hvdWxkIGhhdmUgcmVxdWlyZWQgcHJvcGVydHkgXFxcXFxcJycgKyAoJG1pc3NpbmdQcm9wZXJ0eSkgKyAnXFxcXFxcJyc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBvdXQgKz0gJ1xcJyAnO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoaXQub3B0cy52ZXJib3NlKSB7XG4gICAgICAgICAgICBvdXQgKz0gJyAsIHNjaGVtYTogdmFsaWRhdGUuc2NoZW1hJyArICgkc2NoZW1hUGF0aCkgKyAnICwgcGFyZW50U2NoZW1hOiB2YWxpZGF0ZS5zY2hlbWEnICsgKGl0LnNjaGVtYVBhdGgpICsgJyAsIGRhdGE6ICcgKyAoJGRhdGEpICsgJyAnO1xuICAgICAgICAgIH1cbiAgICAgICAgICBvdXQgKz0gJyB9ICc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgb3V0ICs9ICcge30gJztcbiAgICAgICAgfVxuICAgICAgICB2YXIgX19lcnIgPSBvdXQ7XG4gICAgICAgIG91dCA9ICQkb3V0U3RhY2sucG9wKCk7XG4gICAgICAgIGlmICghaXQuY29tcG9zaXRlUnVsZSAmJiAkYnJlYWtPbkVycm9yKSB7XG4gICAgICAgICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgICAgICAgaWYgKGl0LmFzeW5jKSB7XG4gICAgICAgICAgICBvdXQgKz0gJyB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKFsnICsgKF9fZXJyKSArICddKTsgJztcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgb3V0ICs9ICcgdmFsaWRhdGUuZXJyb3JzID0gWycgKyAoX19lcnIpICsgJ107IHJldHVybiBmYWxzZTsgJztcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgb3V0ICs9ICcgdmFyIGVyciA9ICcgKyAoX19lcnIpICsgJzsgIGlmICh2RXJyb3JzID09PSBudWxsKSB2RXJyb3JzID0gW2Vycl07IGVsc2UgdkVycm9ycy5wdXNoKGVycik7IGVycm9ycysrOyAnO1xuICAgICAgICB9XG4gICAgICAgIG91dCArPSAnIH0gZWxzZSB7ICc7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICgkbG9vcFJlcXVpcmVkKSB7XG4gICAgICAgIGlmICghJGlzRGF0YSkge1xuICAgICAgICAgIG91dCArPSAnIHZhciAnICsgKCR2U2NoZW1hKSArICcgPSB2YWxpZGF0ZS5zY2hlbWEnICsgKCRzY2hlbWFQYXRoKSArICc7ICc7XG4gICAgICAgIH1cbiAgICAgICAgdmFyICRpID0gJ2knICsgJGx2bCxcbiAgICAgICAgICAkcHJvcGVydHlQYXRoID0gJ3NjaGVtYScgKyAkbHZsICsgJ1snICsgJGkgKyAnXScsXG4gICAgICAgICAgJG1pc3NpbmdQcm9wZXJ0eSA9ICdcXCcgKyAnICsgJHByb3BlcnR5UGF0aCArICcgKyBcXCcnO1xuICAgICAgICBpZiAoaXQub3B0cy5fZXJyb3JEYXRhUGF0aFByb3BlcnR5KSB7XG4gICAgICAgICAgaXQuZXJyb3JQYXRoID0gaXQudXRpbC5nZXRQYXRoRXhwcigkY3VycmVudEVycm9yUGF0aCwgJHByb3BlcnR5UGF0aCwgaXQub3B0cy5qc29uUG9pbnRlcnMpO1xuICAgICAgICB9XG4gICAgICAgIGlmICgkaXNEYXRhKSB7XG4gICAgICAgICAgb3V0ICs9ICcgaWYgKCcgKyAoJHZTY2hlbWEpICsgJyAmJiAhQXJyYXkuaXNBcnJheSgnICsgKCR2U2NoZW1hKSArICcpKSB7ICB2YXIgZXJyID0gICAnOyAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgICAgICAgIGlmIChpdC5jcmVhdGVFcnJvcnMgIT09IGZhbHNlKSB7XG4gICAgICAgICAgICBvdXQgKz0gJyB7IGtleXdvcmQ6IFxcJycgKyAoJ3JlcXVpcmVkJykgKyAnXFwnICwgZGF0YVBhdGg6IChkYXRhUGF0aCB8fCBcXCdcXCcpICsgJyArIChpdC5lcnJvclBhdGgpICsgJyAsIHNjaGVtYVBhdGg6ICcgKyAoaXQudXRpbC50b1F1b3RlZFN0cmluZygkZXJyU2NoZW1hUGF0aCkpICsgJyAsIHBhcmFtczogeyBtaXNzaW5nUHJvcGVydHk6IFxcJycgKyAoJG1pc3NpbmdQcm9wZXJ0eSkgKyAnXFwnIH0gJztcbiAgICAgICAgICAgIGlmIChpdC5vcHRzLm1lc3NhZ2VzICE9PSBmYWxzZSkge1xuICAgICAgICAgICAgICBvdXQgKz0gJyAsIG1lc3NhZ2U6IFxcJyc7XG4gICAgICAgICAgICAgIGlmIChpdC5vcHRzLl9lcnJvckRhdGFQYXRoUHJvcGVydHkpIHtcbiAgICAgICAgICAgICAgICBvdXQgKz0gJ2lzIGEgcmVxdWlyZWQgcHJvcGVydHknO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIG91dCArPSAnc2hvdWxkIGhhdmUgcmVxdWlyZWQgcHJvcGVydHkgXFxcXFxcJycgKyAoJG1pc3NpbmdQcm9wZXJ0eSkgKyAnXFxcXFxcJyc7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgb3V0ICs9ICdcXCcgJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChpdC5vcHRzLnZlcmJvc2UpIHtcbiAgICAgICAgICAgICAgb3V0ICs9ICcgLCBzY2hlbWE6IHZhbGlkYXRlLnNjaGVtYScgKyAoJHNjaGVtYVBhdGgpICsgJyAsIHBhcmVudFNjaGVtYTogdmFsaWRhdGUuc2NoZW1hJyArIChpdC5zY2hlbWFQYXRoKSArICcgLCBkYXRhOiAnICsgKCRkYXRhKSArICcgJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG91dCArPSAnIH0gJztcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgb3V0ICs9ICcge30gJztcbiAgICAgICAgICB9XG4gICAgICAgICAgb3V0ICs9ICc7ICBpZiAodkVycm9ycyA9PT0gbnVsbCkgdkVycm9ycyA9IFtlcnJdOyBlbHNlIHZFcnJvcnMucHVzaChlcnIpOyBlcnJvcnMrKzsgfSBlbHNlIGlmICgnICsgKCR2U2NoZW1hKSArICcgIT09IHVuZGVmaW5lZCkgeyAnO1xuICAgICAgICB9XG4gICAgICAgIG91dCArPSAnIGZvciAodmFyICcgKyAoJGkpICsgJyA9IDA7ICcgKyAoJGkpICsgJyA8ICcgKyAoJHZTY2hlbWEpICsgJy5sZW5ndGg7ICcgKyAoJGkpICsgJysrKSB7IGlmICgnICsgKCRkYXRhKSArICdbJyArICgkdlNjaGVtYSkgKyAnWycgKyAoJGkpICsgJ11dID09PSB1bmRlZmluZWQgJztcbiAgICAgICAgaWYgKCRvd25Qcm9wZXJ0aWVzKSB7XG4gICAgICAgICAgb3V0ICs9ICcgfHwgISBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoJyArICgkZGF0YSkgKyAnLCAnICsgKCR2U2NoZW1hKSArICdbJyArICgkaSkgKyAnXSkgJztcbiAgICAgICAgfVxuICAgICAgICBvdXQgKz0gJykgeyAgdmFyIGVyciA9ICAgJzsgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICAgICAgaWYgKGl0LmNyZWF0ZUVycm9ycyAhPT0gZmFsc2UpIHtcbiAgICAgICAgICBvdXQgKz0gJyB7IGtleXdvcmQ6IFxcJycgKyAoJ3JlcXVpcmVkJykgKyAnXFwnICwgZGF0YVBhdGg6IChkYXRhUGF0aCB8fCBcXCdcXCcpICsgJyArIChpdC5lcnJvclBhdGgpICsgJyAsIHNjaGVtYVBhdGg6ICcgKyAoaXQudXRpbC50b1F1b3RlZFN0cmluZygkZXJyU2NoZW1hUGF0aCkpICsgJyAsIHBhcmFtczogeyBtaXNzaW5nUHJvcGVydHk6IFxcJycgKyAoJG1pc3NpbmdQcm9wZXJ0eSkgKyAnXFwnIH0gJztcbiAgICAgICAgICBpZiAoaXQub3B0cy5tZXNzYWdlcyAhPT0gZmFsc2UpIHtcbiAgICAgICAgICAgIG91dCArPSAnICwgbWVzc2FnZTogXFwnJztcbiAgICAgICAgICAgIGlmIChpdC5vcHRzLl9lcnJvckRhdGFQYXRoUHJvcGVydHkpIHtcbiAgICAgICAgICAgICAgb3V0ICs9ICdpcyBhIHJlcXVpcmVkIHByb3BlcnR5JztcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIG91dCArPSAnc2hvdWxkIGhhdmUgcmVxdWlyZWQgcHJvcGVydHkgXFxcXFxcJycgKyAoJG1pc3NpbmdQcm9wZXJ0eSkgKyAnXFxcXFxcJyc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBvdXQgKz0gJ1xcJyAnO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoaXQub3B0cy52ZXJib3NlKSB7XG4gICAgICAgICAgICBvdXQgKz0gJyAsIHNjaGVtYTogdmFsaWRhdGUuc2NoZW1hJyArICgkc2NoZW1hUGF0aCkgKyAnICwgcGFyZW50U2NoZW1hOiB2YWxpZGF0ZS5zY2hlbWEnICsgKGl0LnNjaGVtYVBhdGgpICsgJyAsIGRhdGE6ICcgKyAoJGRhdGEpICsgJyAnO1xuICAgICAgICAgIH1cbiAgICAgICAgICBvdXQgKz0gJyB9ICc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgb3V0ICs9ICcge30gJztcbiAgICAgICAgfVxuICAgICAgICBvdXQgKz0gJzsgIGlmICh2RXJyb3JzID09PSBudWxsKSB2RXJyb3JzID0gW2Vycl07IGVsc2UgdkVycm9ycy5wdXNoKGVycik7IGVycm9ycysrOyB9IH0gJztcbiAgICAgICAgaWYgKCRpc0RhdGEpIHtcbiAgICAgICAgICBvdXQgKz0gJyAgfSAgJztcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFyIGFycjMgPSAkcmVxdWlyZWQ7XG4gICAgICAgIGlmIChhcnIzKSB7XG4gICAgICAgICAgdmFyICRwcm9wZXJ0eUtleSwgaTMgPSAtMSxcbiAgICAgICAgICAgIGwzID0gYXJyMy5sZW5ndGggLSAxO1xuICAgICAgICAgIHdoaWxlIChpMyA8IGwzKSB7XG4gICAgICAgICAgICAkcHJvcGVydHlLZXkgPSBhcnIzW2kzICs9IDFdO1xuICAgICAgICAgICAgdmFyICRwcm9wID0gaXQudXRpbC5nZXRQcm9wZXJ0eSgkcHJvcGVydHlLZXkpLFxuICAgICAgICAgICAgICAkbWlzc2luZ1Byb3BlcnR5ID0gaXQudXRpbC5lc2NhcGVRdW90ZXMoJHByb3BlcnR5S2V5KSxcbiAgICAgICAgICAgICAgJHVzZURhdGEgPSAkZGF0YSArICRwcm9wO1xuICAgICAgICAgICAgaWYgKGl0Lm9wdHMuX2Vycm9yRGF0YVBhdGhQcm9wZXJ0eSkge1xuICAgICAgICAgICAgICBpdC5lcnJvclBhdGggPSBpdC51dGlsLmdldFBhdGgoJGN1cnJlbnRFcnJvclBhdGgsICRwcm9wZXJ0eUtleSwgaXQub3B0cy5qc29uUG9pbnRlcnMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgb3V0ICs9ICcgaWYgKCAnICsgKCR1c2VEYXRhKSArICcgPT09IHVuZGVmaW5lZCAnO1xuICAgICAgICAgICAgaWYgKCRvd25Qcm9wZXJ0aWVzKSB7XG4gICAgICAgICAgICAgIG91dCArPSAnIHx8ICEgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKCcgKyAoJGRhdGEpICsgJywgXFwnJyArIChpdC51dGlsLmVzY2FwZVF1b3RlcygkcHJvcGVydHlLZXkpKSArICdcXCcpICc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBvdXQgKz0gJykgeyAgdmFyIGVyciA9ICAgJzsgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgICAgICAgICAgIGlmIChpdC5jcmVhdGVFcnJvcnMgIT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgIG91dCArPSAnIHsga2V5d29yZDogXFwnJyArICgncmVxdWlyZWQnKSArICdcXCcgLCBkYXRhUGF0aDogKGRhdGFQYXRoIHx8IFxcJ1xcJykgKyAnICsgKGl0LmVycm9yUGF0aCkgKyAnICwgc2NoZW1hUGF0aDogJyArIChpdC51dGlsLnRvUXVvdGVkU3RyaW5nKCRlcnJTY2hlbWFQYXRoKSkgKyAnICwgcGFyYW1zOiB7IG1pc3NpbmdQcm9wZXJ0eTogXFwnJyArICgkbWlzc2luZ1Byb3BlcnR5KSArICdcXCcgfSAnO1xuICAgICAgICAgICAgICBpZiAoaXQub3B0cy5tZXNzYWdlcyAhPT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICBvdXQgKz0gJyAsIG1lc3NhZ2U6IFxcJyc7XG4gICAgICAgICAgICAgICAgaWYgKGl0Lm9wdHMuX2Vycm9yRGF0YVBhdGhQcm9wZXJ0eSkge1xuICAgICAgICAgICAgICAgICAgb3V0ICs9ICdpcyBhIHJlcXVpcmVkIHByb3BlcnR5JztcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgb3V0ICs9ICdzaG91bGQgaGF2ZSByZXF1aXJlZCBwcm9wZXJ0eSBcXFxcXFwnJyArICgkbWlzc2luZ1Byb3BlcnR5KSArICdcXFxcXFwnJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgb3V0ICs9ICdcXCcgJztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBpZiAoaXQub3B0cy52ZXJib3NlKSB7XG4gICAgICAgICAgICAgICAgb3V0ICs9ICcgLCBzY2hlbWE6IHZhbGlkYXRlLnNjaGVtYScgKyAoJHNjaGVtYVBhdGgpICsgJyAsIHBhcmVudFNjaGVtYTogdmFsaWRhdGUuc2NoZW1hJyArIChpdC5zY2hlbWFQYXRoKSArICcgLCBkYXRhOiAnICsgKCRkYXRhKSArICcgJztcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBvdXQgKz0gJyB9ICc7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBvdXQgKz0gJyB7fSAnO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgb3V0ICs9ICc7ICBpZiAodkVycm9ycyA9PT0gbnVsbCkgdkVycm9ycyA9IFtlcnJdOyBlbHNlIHZFcnJvcnMucHVzaChlcnIpOyBlcnJvcnMrKzsgfSAnO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBpdC5lcnJvclBhdGggPSAkY3VycmVudEVycm9yUGF0aDtcbiAgfSBlbHNlIGlmICgkYnJlYWtPbkVycm9yKSB7XG4gICAgb3V0ICs9ICcgaWYgKHRydWUpIHsnO1xuICB9XG4gIHJldHVybiBvdXQ7XG59XG4iLCAiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBnZW5lcmF0ZV91bmlxdWVJdGVtcyhpdCwgJGtleXdvcmQsICRydWxlVHlwZSkge1xuICB2YXIgb3V0ID0gJyAnO1xuICB2YXIgJGx2bCA9IGl0LmxldmVsO1xuICB2YXIgJGRhdGFMdmwgPSBpdC5kYXRhTGV2ZWw7XG4gIHZhciAkc2NoZW1hID0gaXQuc2NoZW1hWyRrZXl3b3JkXTtcbiAgdmFyICRzY2hlbWFQYXRoID0gaXQuc2NoZW1hUGF0aCArIGl0LnV0aWwuZ2V0UHJvcGVydHkoJGtleXdvcmQpO1xuICB2YXIgJGVyclNjaGVtYVBhdGggPSBpdC5lcnJTY2hlbWFQYXRoICsgJy8nICsgJGtleXdvcmQ7XG4gIHZhciAkYnJlYWtPbkVycm9yID0gIWl0Lm9wdHMuYWxsRXJyb3JzO1xuICB2YXIgJGRhdGEgPSAnZGF0YScgKyAoJGRhdGFMdmwgfHwgJycpO1xuICB2YXIgJHZhbGlkID0gJ3ZhbGlkJyArICRsdmw7XG4gIHZhciAkaXNEYXRhID0gaXQub3B0cy4kZGF0YSAmJiAkc2NoZW1hICYmICRzY2hlbWEuJGRhdGEsXG4gICAgJHNjaGVtYVZhbHVlO1xuICBpZiAoJGlzRGF0YSkge1xuICAgIG91dCArPSAnIHZhciBzY2hlbWEnICsgKCRsdmwpICsgJyA9ICcgKyAoaXQudXRpbC5nZXREYXRhKCRzY2hlbWEuJGRhdGEsICRkYXRhTHZsLCBpdC5kYXRhUGF0aEFycikpICsgJzsgJztcbiAgICAkc2NoZW1hVmFsdWUgPSAnc2NoZW1hJyArICRsdmw7XG4gIH0gZWxzZSB7XG4gICAgJHNjaGVtYVZhbHVlID0gJHNjaGVtYTtcbiAgfVxuICBpZiAoKCRzY2hlbWEgfHwgJGlzRGF0YSkgJiYgaXQub3B0cy51bmlxdWVJdGVtcyAhPT0gZmFsc2UpIHtcbiAgICBpZiAoJGlzRGF0YSkge1xuICAgICAgb3V0ICs9ICcgdmFyICcgKyAoJHZhbGlkKSArICc7IGlmICgnICsgKCRzY2hlbWFWYWx1ZSkgKyAnID09PSBmYWxzZSB8fCAnICsgKCRzY2hlbWFWYWx1ZSkgKyAnID09PSB1bmRlZmluZWQpICcgKyAoJHZhbGlkKSArICcgPSB0cnVlOyBlbHNlIGlmICh0eXBlb2YgJyArICgkc2NoZW1hVmFsdWUpICsgJyAhPSBcXCdib29sZWFuXFwnKSAnICsgKCR2YWxpZCkgKyAnID0gZmFsc2U7IGVsc2UgeyAnO1xuICAgIH1cbiAgICBvdXQgKz0gJyB2YXIgaSA9ICcgKyAoJGRhdGEpICsgJy5sZW5ndGggLCAnICsgKCR2YWxpZCkgKyAnID0gdHJ1ZSAsIGo7IGlmIChpID4gMSkgeyAnO1xuICAgIHZhciAkaXRlbVR5cGUgPSBpdC5zY2hlbWEuaXRlbXMgJiYgaXQuc2NoZW1hLml0ZW1zLnR5cGUsXG4gICAgICAkdHlwZUlzQXJyYXkgPSBBcnJheS5pc0FycmF5KCRpdGVtVHlwZSk7XG4gICAgaWYgKCEkaXRlbVR5cGUgfHwgJGl0ZW1UeXBlID09ICdvYmplY3QnIHx8ICRpdGVtVHlwZSA9PSAnYXJyYXknIHx8ICgkdHlwZUlzQXJyYXkgJiYgKCRpdGVtVHlwZS5pbmRleE9mKCdvYmplY3QnKSA+PSAwIHx8ICRpdGVtVHlwZS5pbmRleE9mKCdhcnJheScpID49IDApKSkge1xuICAgICAgb3V0ICs9ICcgb3V0ZXI6IGZvciAoO2ktLTspIHsgZm9yIChqID0gaTsgai0tOykgeyBpZiAoZXF1YWwoJyArICgkZGF0YSkgKyAnW2ldLCAnICsgKCRkYXRhKSArICdbal0pKSB7ICcgKyAoJHZhbGlkKSArICcgPSBmYWxzZTsgYnJlYWsgb3V0ZXI7IH0gfSB9ICc7XG4gICAgfSBlbHNlIHtcbiAgICAgIG91dCArPSAnIHZhciBpdGVtSW5kaWNlcyA9IHt9LCBpdGVtOyBmb3IgKDtpLS07KSB7IHZhciBpdGVtID0gJyArICgkZGF0YSkgKyAnW2ldOyAnO1xuICAgICAgdmFyICRtZXRob2QgPSAnY2hlY2tEYXRhVHlwZScgKyAoJHR5cGVJc0FycmF5ID8gJ3MnIDogJycpO1xuICAgICAgb3V0ICs9ICcgaWYgKCcgKyAoaXQudXRpbFskbWV0aG9kXSgkaXRlbVR5cGUsICdpdGVtJywgaXQub3B0cy5zdHJpY3ROdW1iZXJzLCB0cnVlKSkgKyAnKSBjb250aW51ZTsgJztcbiAgICAgIGlmICgkdHlwZUlzQXJyYXkpIHtcbiAgICAgICAgb3V0ICs9ICcgaWYgKHR5cGVvZiBpdGVtID09IFxcJ3N0cmluZ1xcJykgaXRlbSA9IFxcJ1wiXFwnICsgaXRlbTsgJztcbiAgICAgIH1cbiAgICAgIG91dCArPSAnIGlmICh0eXBlb2YgaXRlbUluZGljZXNbaXRlbV0gPT0gXFwnbnVtYmVyXFwnKSB7ICcgKyAoJHZhbGlkKSArICcgPSBmYWxzZTsgaiA9IGl0ZW1JbmRpY2VzW2l0ZW1dOyBicmVhazsgfSBpdGVtSW5kaWNlc1tpdGVtXSA9IGk7IH0gJztcbiAgICB9XG4gICAgb3V0ICs9ICcgfSAnO1xuICAgIGlmICgkaXNEYXRhKSB7XG4gICAgICBvdXQgKz0gJyAgfSAgJztcbiAgICB9XG4gICAgb3V0ICs9ICcgaWYgKCEnICsgKCR2YWxpZCkgKyAnKSB7ICAgJztcbiAgICB2YXIgJCRvdXRTdGFjayA9ICQkb3V0U3RhY2sgfHwgW107XG4gICAgJCRvdXRTdGFjay5wdXNoKG91dCk7XG4gICAgb3V0ID0gJyc7IC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gICAgaWYgKGl0LmNyZWF0ZUVycm9ycyAhPT0gZmFsc2UpIHtcbiAgICAgIG91dCArPSAnIHsga2V5d29yZDogXFwnJyArICgndW5pcXVlSXRlbXMnKSArICdcXCcgLCBkYXRhUGF0aDogKGRhdGFQYXRoIHx8IFxcJ1xcJykgKyAnICsgKGl0LmVycm9yUGF0aCkgKyAnICwgc2NoZW1hUGF0aDogJyArIChpdC51dGlsLnRvUXVvdGVkU3RyaW5nKCRlcnJTY2hlbWFQYXRoKSkgKyAnICwgcGFyYW1zOiB7IGk6IGksIGo6IGogfSAnO1xuICAgICAgaWYgKGl0Lm9wdHMubWVzc2FnZXMgIT09IGZhbHNlKSB7XG4gICAgICAgIG91dCArPSAnICwgbWVzc2FnZTogXFwnc2hvdWxkIE5PVCBoYXZlIGR1cGxpY2F0ZSBpdGVtcyAoaXRlbXMgIyMgXFwnICsgaiArIFxcJyBhbmQgXFwnICsgaSArIFxcJyBhcmUgaWRlbnRpY2FsKVxcJyAnO1xuICAgICAgfVxuICAgICAgaWYgKGl0Lm9wdHMudmVyYm9zZSkge1xuICAgICAgICBvdXQgKz0gJyAsIHNjaGVtYTogICc7XG4gICAgICAgIGlmICgkaXNEYXRhKSB7XG4gICAgICAgICAgb3V0ICs9ICd2YWxpZGF0ZS5zY2hlbWEnICsgKCRzY2hlbWFQYXRoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBvdXQgKz0gJycgKyAoJHNjaGVtYSk7XG4gICAgICAgIH1cbiAgICAgICAgb3V0ICs9ICcgICAgICAgICAsIHBhcmVudFNjaGVtYTogdmFsaWRhdGUuc2NoZW1hJyArIChpdC5zY2hlbWFQYXRoKSArICcgLCBkYXRhOiAnICsgKCRkYXRhKSArICcgJztcbiAgICAgIH1cbiAgICAgIG91dCArPSAnIH0gJztcbiAgICB9IGVsc2Uge1xuICAgICAgb3V0ICs9ICcge30gJztcbiAgICB9XG4gICAgdmFyIF9fZXJyID0gb3V0O1xuICAgIG91dCA9ICQkb3V0U3RhY2sucG9wKCk7XG4gICAgaWYgKCFpdC5jb21wb3NpdGVSdWxlICYmICRicmVha09uRXJyb3IpIHtcbiAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAgaWYgKGl0LmFzeW5jKSB7XG4gICAgICAgIG91dCArPSAnIHRocm93IG5ldyBWYWxpZGF0aW9uRXJyb3IoWycgKyAoX19lcnIpICsgJ10pOyAnO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb3V0ICs9ICcgdmFsaWRhdGUuZXJyb3JzID0gWycgKyAoX19lcnIpICsgJ107IHJldHVybiBmYWxzZTsgJztcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgb3V0ICs9ICcgdmFyIGVyciA9ICcgKyAoX19lcnIpICsgJzsgIGlmICh2RXJyb3JzID09PSBudWxsKSB2RXJyb3JzID0gW2Vycl07IGVsc2UgdkVycm9ycy5wdXNoKGVycik7IGVycm9ycysrOyAnO1xuICAgIH1cbiAgICBvdXQgKz0gJyB9ICc7XG4gICAgaWYgKCRicmVha09uRXJyb3IpIHtcbiAgICAgIG91dCArPSAnIGVsc2UgeyAnO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBpZiAoJGJyZWFrT25FcnJvcikge1xuICAgICAgb3V0ICs9ICcgaWYgKHRydWUpIHsgJztcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG91dDtcbn1cbiIsICIndXNlIHN0cmljdCc7XG5cbi8vYWxsIHJlcXVpcmVzIG11c3QgYmUgZXhwbGljaXQgYmVjYXVzZSBicm93c2VyaWZ5IHdvbid0IHdvcmsgd2l0aCBkeW5hbWljIHJlcXVpcmVzXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgJyRyZWYnOiByZXF1aXJlKCcuL3JlZicpLFxuICBhbGxPZjogcmVxdWlyZSgnLi9hbGxPZicpLFxuICBhbnlPZjogcmVxdWlyZSgnLi9hbnlPZicpLFxuICAnJGNvbW1lbnQnOiByZXF1aXJlKCcuL2NvbW1lbnQnKSxcbiAgY29uc3Q6IHJlcXVpcmUoJy4vY29uc3QnKSxcbiAgY29udGFpbnM6IHJlcXVpcmUoJy4vY29udGFpbnMnKSxcbiAgZGVwZW5kZW5jaWVzOiByZXF1aXJlKCcuL2RlcGVuZGVuY2llcycpLFxuICAnZW51bSc6IHJlcXVpcmUoJy4vZW51bScpLFxuICBmb3JtYXQ6IHJlcXVpcmUoJy4vZm9ybWF0JyksXG4gICdpZic6IHJlcXVpcmUoJy4vaWYnKSxcbiAgaXRlbXM6IHJlcXVpcmUoJy4vaXRlbXMnKSxcbiAgbWF4aW11bTogcmVxdWlyZSgnLi9fbGltaXQnKSxcbiAgbWluaW11bTogcmVxdWlyZSgnLi9fbGltaXQnKSxcbiAgbWF4SXRlbXM6IHJlcXVpcmUoJy4vX2xpbWl0SXRlbXMnKSxcbiAgbWluSXRlbXM6IHJlcXVpcmUoJy4vX2xpbWl0SXRlbXMnKSxcbiAgbWF4TGVuZ3RoOiByZXF1aXJlKCcuL19saW1pdExlbmd0aCcpLFxuICBtaW5MZW5ndGg6IHJlcXVpcmUoJy4vX2xpbWl0TGVuZ3RoJyksXG4gIG1heFByb3BlcnRpZXM6IHJlcXVpcmUoJy4vX2xpbWl0UHJvcGVydGllcycpLFxuICBtaW5Qcm9wZXJ0aWVzOiByZXF1aXJlKCcuL19saW1pdFByb3BlcnRpZXMnKSxcbiAgbXVsdGlwbGVPZjogcmVxdWlyZSgnLi9tdWx0aXBsZU9mJyksXG4gIG5vdDogcmVxdWlyZSgnLi9ub3QnKSxcbiAgb25lT2Y6IHJlcXVpcmUoJy4vb25lT2YnKSxcbiAgcGF0dGVybjogcmVxdWlyZSgnLi9wYXR0ZXJuJyksXG4gIHByb3BlcnRpZXM6IHJlcXVpcmUoJy4vcHJvcGVydGllcycpLFxuICBwcm9wZXJ0eU5hbWVzOiByZXF1aXJlKCcuL3Byb3BlcnR5TmFtZXMnKSxcbiAgcmVxdWlyZWQ6IHJlcXVpcmUoJy4vcmVxdWlyZWQnKSxcbiAgdW5pcXVlSXRlbXM6IHJlcXVpcmUoJy4vdW5pcXVlSXRlbXMnKSxcbiAgdmFsaWRhdGU6IHJlcXVpcmUoJy4vdmFsaWRhdGUnKVxufTtcbiIsICIndXNlIHN0cmljdCc7XG5cbnZhciBydWxlTW9kdWxlcyA9IHJlcXVpcmUoJy4uL2RvdGpzJylcbiAgLCB0b0hhc2ggPSByZXF1aXJlKCcuL3V0aWwnKS50b0hhc2g7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gcnVsZXMoKSB7XG4gIHZhciBSVUxFUyA9IFtcbiAgICB7IHR5cGU6ICdudW1iZXInLFxuICAgICAgcnVsZXM6IFsgeyAnbWF4aW11bSc6IFsnZXhjbHVzaXZlTWF4aW11bSddIH0sXG4gICAgICAgICAgICAgICB7ICdtaW5pbXVtJzogWydleGNsdXNpdmVNaW5pbXVtJ10gfSwgJ211bHRpcGxlT2YnLCAnZm9ybWF0J10gfSxcbiAgICB7IHR5cGU6ICdzdHJpbmcnLFxuICAgICAgcnVsZXM6IFsgJ21heExlbmd0aCcsICdtaW5MZW5ndGgnLCAncGF0dGVybicsICdmb3JtYXQnIF0gfSxcbiAgICB7IHR5cGU6ICdhcnJheScsXG4gICAgICBydWxlczogWyAnbWF4SXRlbXMnLCAnbWluSXRlbXMnLCAnaXRlbXMnLCAnY29udGFpbnMnLCAndW5pcXVlSXRlbXMnIF0gfSxcbiAgICB7IHR5cGU6ICdvYmplY3QnLFxuICAgICAgcnVsZXM6IFsgJ21heFByb3BlcnRpZXMnLCAnbWluUHJvcGVydGllcycsICdyZXF1aXJlZCcsICdkZXBlbmRlbmNpZXMnLCAncHJvcGVydHlOYW1lcycsXG4gICAgICAgICAgICAgICB7ICdwcm9wZXJ0aWVzJzogWydhZGRpdGlvbmFsUHJvcGVydGllcycsICdwYXR0ZXJuUHJvcGVydGllcyddIH0gXSB9LFxuICAgIHsgcnVsZXM6IFsgJyRyZWYnLCAnY29uc3QnLCAnZW51bScsICdub3QnLCAnYW55T2YnLCAnb25lT2YnLCAnYWxsT2YnLCAnaWYnIF0gfVxuICBdO1xuXG4gIHZhciBBTEwgPSBbICd0eXBlJywgJyRjb21tZW50JyBdO1xuICB2YXIgS0VZV09SRFMgPSBbXG4gICAgJyRzY2hlbWEnLCAnJGlkJywgJ2lkJywgJyRkYXRhJywgJyRhc3luYycsICd0aXRsZScsXG4gICAgJ2Rlc2NyaXB0aW9uJywgJ2RlZmF1bHQnLCAnZGVmaW5pdGlvbnMnLFxuICAgICdleGFtcGxlcycsICdyZWFkT25seScsICd3cml0ZU9ubHknLFxuICAgICdjb250ZW50TWVkaWFUeXBlJywgJ2NvbnRlbnRFbmNvZGluZycsXG4gICAgJ2FkZGl0aW9uYWxJdGVtcycsICd0aGVuJywgJ2Vsc2UnXG4gIF07XG4gIHZhciBUWVBFUyA9IFsgJ251bWJlcicsICdpbnRlZ2VyJywgJ3N0cmluZycsICdhcnJheScsICdvYmplY3QnLCAnYm9vbGVhbicsICdudWxsJyBdO1xuICBSVUxFUy5hbGwgPSB0b0hhc2goQUxMKTtcbiAgUlVMRVMudHlwZXMgPSB0b0hhc2goVFlQRVMpO1xuXG4gIFJVTEVTLmZvckVhY2goZnVuY3Rpb24gKGdyb3VwKSB7XG4gICAgZ3JvdXAucnVsZXMgPSBncm91cC5ydWxlcy5tYXAoZnVuY3Rpb24gKGtleXdvcmQpIHtcbiAgICAgIHZhciBpbXBsS2V5d29yZHM7XG4gICAgICBpZiAodHlwZW9mIGtleXdvcmQgPT0gJ29iamVjdCcpIHtcbiAgICAgICAgdmFyIGtleSA9IE9iamVjdC5rZXlzKGtleXdvcmQpWzBdO1xuICAgICAgICBpbXBsS2V5d29yZHMgPSBrZXl3b3JkW2tleV07XG4gICAgICAgIGtleXdvcmQgPSBrZXk7XG4gICAgICAgIGltcGxLZXl3b3Jkcy5mb3JFYWNoKGZ1bmN0aW9uIChrKSB7XG4gICAgICAgICAgQUxMLnB1c2goayk7XG4gICAgICAgICAgUlVMRVMuYWxsW2tdID0gdHJ1ZTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBBTEwucHVzaChrZXl3b3JkKTtcbiAgICAgIHZhciBydWxlID0gUlVMRVMuYWxsW2tleXdvcmRdID0ge1xuICAgICAgICBrZXl3b3JkOiBrZXl3b3JkLFxuICAgICAgICBjb2RlOiBydWxlTW9kdWxlc1trZXl3b3JkXSxcbiAgICAgICAgaW1wbGVtZW50czogaW1wbEtleXdvcmRzXG4gICAgICB9O1xuICAgICAgcmV0dXJuIHJ1bGU7XG4gICAgfSk7XG5cbiAgICBSVUxFUy5hbGwuJGNvbW1lbnQgPSB7XG4gICAgICBrZXl3b3JkOiAnJGNvbW1lbnQnLFxuICAgICAgY29kZTogcnVsZU1vZHVsZXMuJGNvbW1lbnRcbiAgICB9O1xuXG4gICAgaWYgKGdyb3VwLnR5cGUpIFJVTEVTLnR5cGVzW2dyb3VwLnR5cGVdID0gZ3JvdXA7XG4gIH0pO1xuXG4gIFJVTEVTLmtleXdvcmRzID0gdG9IYXNoKEFMTC5jb25jYXQoS0VZV09SRFMpKTtcbiAgUlVMRVMuY3VzdG9tID0ge307XG5cbiAgcmV0dXJuIFJVTEVTO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG5cbnZhciBLRVlXT1JEUyA9IFtcbiAgJ211bHRpcGxlT2YnLFxuICAnbWF4aW11bScsXG4gICdleGNsdXNpdmVNYXhpbXVtJyxcbiAgJ21pbmltdW0nLFxuICAnZXhjbHVzaXZlTWluaW11bScsXG4gICdtYXhMZW5ndGgnLFxuICAnbWluTGVuZ3RoJyxcbiAgJ3BhdHRlcm4nLFxuICAnYWRkaXRpb25hbEl0ZW1zJyxcbiAgJ21heEl0ZW1zJyxcbiAgJ21pbkl0ZW1zJyxcbiAgJ3VuaXF1ZUl0ZW1zJyxcbiAgJ21heFByb3BlcnRpZXMnLFxuICAnbWluUHJvcGVydGllcycsXG4gICdyZXF1aXJlZCcsXG4gICdhZGRpdGlvbmFsUHJvcGVydGllcycsXG4gICdlbnVtJyxcbiAgJ2Zvcm1hdCcsXG4gICdjb25zdCdcbl07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG1ldGFTY2hlbWEsIGtleXdvcmRzSnNvblBvaW50ZXJzKSB7XG4gIGZvciAodmFyIGk9MDsgaTxrZXl3b3Jkc0pzb25Qb2ludGVycy5sZW5ndGg7IGkrKykge1xuICAgIG1ldGFTY2hlbWEgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KG1ldGFTY2hlbWEpKTtcbiAgICB2YXIgc2VnbWVudHMgPSBrZXl3b3Jkc0pzb25Qb2ludGVyc1tpXS5zcGxpdCgnLycpO1xuICAgIHZhciBrZXl3b3JkcyA9IG1ldGFTY2hlbWE7XG4gICAgdmFyIGo7XG4gICAgZm9yIChqPTE7IGo8c2VnbWVudHMubGVuZ3RoOyBqKyspXG4gICAgICBrZXl3b3JkcyA9IGtleXdvcmRzW3NlZ21lbnRzW2pdXTtcblxuICAgIGZvciAoaj0wOyBqPEtFWVdPUkRTLmxlbmd0aDsgaisrKSB7XG4gICAgICB2YXIga2V5ID0gS0VZV09SRFNbal07XG4gICAgICB2YXIgc2NoZW1hID0ga2V5d29yZHNba2V5XTtcbiAgICAgIGlmIChzY2hlbWEpIHtcbiAgICAgICAga2V5d29yZHNba2V5XSA9IHtcbiAgICAgICAgICBhbnlPZjogW1xuICAgICAgICAgICAgc2NoZW1hLFxuICAgICAgICAgICAgeyAkcmVmOiAnaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL2Fqdi12YWxpZGF0b3IvYWp2L21hc3Rlci9saWIvcmVmcy9kYXRhLmpzb24jJyB9XG4gICAgICAgICAgXVxuICAgICAgICB9O1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBtZXRhU2NoZW1hO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG5cbnZhciBNaXNzaW5nUmVmRXJyb3IgPSByZXF1aXJlKCcuL2Vycm9yX2NsYXNzZXMnKS5NaXNzaW5nUmVmO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGNvbXBpbGVBc3luYztcblxuXG4vKipcbiAqIENyZWF0ZXMgdmFsaWRhdGluZyBmdW5jdGlvbiBmb3IgcGFzc2VkIHNjaGVtYSB3aXRoIGFzeW5jaHJvbm91cyBsb2FkaW5nIG9mIG1pc3Npbmcgc2NoZW1hcy5cbiAqIGBsb2FkU2NoZW1hYCBvcHRpb24gc2hvdWxkIGJlIGEgZnVuY3Rpb24gdGhhdCBhY2NlcHRzIHNjaGVtYSB1cmkgYW5kIHJldHVybnMgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHdpdGggdGhlIHNjaGVtYS5cbiAqIEB0aGlzICBBanZcbiAqIEBwYXJhbSB7T2JqZWN0fSAgIHNjaGVtYSBzY2hlbWEgb2JqZWN0XG4gKiBAcGFyYW0ge0Jvb2xlYW59ICBtZXRhIG9wdGlvbmFsIHRydWUgdG8gY29tcGlsZSBtZXRhLXNjaGVtYTsgdGhpcyBwYXJhbWV0ZXIgY2FuIGJlIHNraXBwZWRcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrIGFuIG9wdGlvbmFsIG5vZGUtc3R5bGUgY2FsbGJhY2ssIGl0IGlzIGNhbGxlZCB3aXRoIDIgcGFyYW1ldGVyczogZXJyb3IgKG9yIG51bGwpIGFuZCB2YWxpZGF0aW5nIGZ1bmN0aW9uLlxuICogQHJldHVybiB7UHJvbWlzZX0gcHJvbWlzZSB0aGF0IHJlc29sdmVzIHdpdGggYSB2YWxpZGF0aW5nIGZ1bmN0aW9uLlxuICovXG5mdW5jdGlvbiBjb21waWxlQXN5bmMoc2NoZW1hLCBtZXRhLCBjYWxsYmFjaykge1xuICAvKiBlc2xpbnQgbm8tc2hhZG93OiAwICovXG4gIC8qIGdsb2JhbCBQcm9taXNlICovXG4gIC8qIGpzaGludCB2YWxpZHRoaXM6IHRydWUgKi9cbiAgdmFyIHNlbGYgPSB0aGlzO1xuICBpZiAodHlwZW9mIHRoaXMuX29wdHMubG9hZFNjaGVtYSAhPSAnZnVuY3Rpb24nKVxuICAgIHRocm93IG5ldyBFcnJvcignb3B0aW9ucy5sb2FkU2NoZW1hIHNob3VsZCBiZSBhIGZ1bmN0aW9uJyk7XG5cbiAgaWYgKHR5cGVvZiBtZXRhID09ICdmdW5jdGlvbicpIHtcbiAgICBjYWxsYmFjayA9IG1ldGE7XG4gICAgbWV0YSA9IHVuZGVmaW5lZDtcbiAgfVxuXG4gIHZhciBwID0gbG9hZE1ldGFTY2hlbWFPZihzY2hlbWEpLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgIHZhciBzY2hlbWFPYmogPSBzZWxmLl9hZGRTY2hlbWEoc2NoZW1hLCB1bmRlZmluZWQsIG1ldGEpO1xuICAgIHJldHVybiBzY2hlbWFPYmoudmFsaWRhdGUgfHwgX2NvbXBpbGVBc3luYyhzY2hlbWFPYmopO1xuICB9KTtcblxuICBpZiAoY2FsbGJhY2spIHtcbiAgICBwLnRoZW4oXG4gICAgICBmdW5jdGlvbih2KSB7IGNhbGxiYWNrKG51bGwsIHYpOyB9LFxuICAgICAgY2FsbGJhY2tcbiAgICApO1xuICB9XG5cbiAgcmV0dXJuIHA7XG5cblxuICBmdW5jdGlvbiBsb2FkTWV0YVNjaGVtYU9mKHNjaCkge1xuICAgIHZhciAkc2NoZW1hID0gc2NoLiRzY2hlbWE7XG4gICAgcmV0dXJuICRzY2hlbWEgJiYgIXNlbGYuZ2V0U2NoZW1hKCRzY2hlbWEpXG4gICAgICAgICAgICA/IGNvbXBpbGVBc3luYy5jYWxsKHNlbGYsIHsgJHJlZjogJHNjaGVtYSB9LCB0cnVlKVxuICAgICAgICAgICAgOiBQcm9taXNlLnJlc29sdmUoKTtcbiAgfVxuXG5cbiAgZnVuY3Rpb24gX2NvbXBpbGVBc3luYyhzY2hlbWFPYmopIHtcbiAgICB0cnkgeyByZXR1cm4gc2VsZi5fY29tcGlsZShzY2hlbWFPYmopOyB9XG4gICAgY2F0Y2goZSkge1xuICAgICAgaWYgKGUgaW5zdGFuY2VvZiBNaXNzaW5nUmVmRXJyb3IpIHJldHVybiBsb2FkTWlzc2luZ1NjaGVtYShlKTtcbiAgICAgIHRocm93IGU7XG4gICAgfVxuXG5cbiAgICBmdW5jdGlvbiBsb2FkTWlzc2luZ1NjaGVtYShlKSB7XG4gICAgICB2YXIgcmVmID0gZS5taXNzaW5nU2NoZW1hO1xuICAgICAgaWYgKGFkZGVkKHJlZikpIHRocm93IG5ldyBFcnJvcignU2NoZW1hICcgKyByZWYgKyAnIGlzIGxvYWRlZCBidXQgJyArIGUubWlzc2luZ1JlZiArICcgY2Fubm90IGJlIHJlc29sdmVkJyk7XG5cbiAgICAgIHZhciBzY2hlbWFQcm9taXNlID0gc2VsZi5fbG9hZGluZ1NjaGVtYXNbcmVmXTtcbiAgICAgIGlmICghc2NoZW1hUHJvbWlzZSkge1xuICAgICAgICBzY2hlbWFQcm9taXNlID0gc2VsZi5fbG9hZGluZ1NjaGVtYXNbcmVmXSA9IHNlbGYuX29wdHMubG9hZFNjaGVtYShyZWYpO1xuICAgICAgICBzY2hlbWFQcm9taXNlLnRoZW4ocmVtb3ZlUHJvbWlzZSwgcmVtb3ZlUHJvbWlzZSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBzY2hlbWFQcm9taXNlLnRoZW4oZnVuY3Rpb24gKHNjaCkge1xuICAgICAgICBpZiAoIWFkZGVkKHJlZikpIHtcbiAgICAgICAgICByZXR1cm4gbG9hZE1ldGFTY2hlbWFPZihzY2gpLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaWYgKCFhZGRlZChyZWYpKSBzZWxmLmFkZFNjaGVtYShzY2gsIHJlZiwgdW5kZWZpbmVkLCBtZXRhKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSkudGhlbihmdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIF9jb21waWxlQXN5bmMoc2NoZW1hT2JqKTtcbiAgICAgIH0pO1xuXG4gICAgICBmdW5jdGlvbiByZW1vdmVQcm9taXNlKCkge1xuICAgICAgICBkZWxldGUgc2VsZi5fbG9hZGluZ1NjaGVtYXNbcmVmXTtcbiAgICAgIH1cblxuICAgICAgZnVuY3Rpb24gYWRkZWQocmVmKSB7XG4gICAgICAgIHJldHVybiBzZWxmLl9yZWZzW3JlZl0gfHwgc2VsZi5fc2NoZW1hc1tyZWZdO1xuICAgICAgfVxuICAgIH1cbiAgfVxufVxuIiwgIid1c2Ugc3RyaWN0Jztcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gZ2VuZXJhdGVfY3VzdG9tKGl0LCAka2V5d29yZCwgJHJ1bGVUeXBlKSB7XG4gIHZhciBvdXQgPSAnICc7XG4gIHZhciAkbHZsID0gaXQubGV2ZWw7XG4gIHZhciAkZGF0YUx2bCA9IGl0LmRhdGFMZXZlbDtcbiAgdmFyICRzY2hlbWEgPSBpdC5zY2hlbWFbJGtleXdvcmRdO1xuICB2YXIgJHNjaGVtYVBhdGggPSBpdC5zY2hlbWFQYXRoICsgaXQudXRpbC5nZXRQcm9wZXJ0eSgka2V5d29yZCk7XG4gIHZhciAkZXJyU2NoZW1hUGF0aCA9IGl0LmVyclNjaGVtYVBhdGggKyAnLycgKyAka2V5d29yZDtcbiAgdmFyICRicmVha09uRXJyb3IgPSAhaXQub3B0cy5hbGxFcnJvcnM7XG4gIHZhciAkZXJyb3JLZXl3b3JkO1xuICB2YXIgJGRhdGEgPSAnZGF0YScgKyAoJGRhdGFMdmwgfHwgJycpO1xuICB2YXIgJHZhbGlkID0gJ3ZhbGlkJyArICRsdmw7XG4gIHZhciAkZXJycyA9ICdlcnJzX18nICsgJGx2bDtcbiAgdmFyICRpc0RhdGEgPSBpdC5vcHRzLiRkYXRhICYmICRzY2hlbWEgJiYgJHNjaGVtYS4kZGF0YSxcbiAgICAkc2NoZW1hVmFsdWU7XG4gIGlmICgkaXNEYXRhKSB7XG4gICAgb3V0ICs9ICcgdmFyIHNjaGVtYScgKyAoJGx2bCkgKyAnID0gJyArIChpdC51dGlsLmdldERhdGEoJHNjaGVtYS4kZGF0YSwgJGRhdGFMdmwsIGl0LmRhdGFQYXRoQXJyKSkgKyAnOyAnO1xuICAgICRzY2hlbWFWYWx1ZSA9ICdzY2hlbWEnICsgJGx2bDtcbiAgfSBlbHNlIHtcbiAgICAkc2NoZW1hVmFsdWUgPSAkc2NoZW1hO1xuICB9XG4gIHZhciAkcnVsZSA9IHRoaXMsXG4gICAgJGRlZmluaXRpb24gPSAnZGVmaW5pdGlvbicgKyAkbHZsLFxuICAgICRyRGVmID0gJHJ1bGUuZGVmaW5pdGlvbixcbiAgICAkY2xvc2luZ0JyYWNlcyA9ICcnO1xuICB2YXIgJGNvbXBpbGUsICRpbmxpbmUsICRtYWNybywgJHJ1bGVWYWxpZGF0ZSwgJHZhbGlkYXRlQ29kZTtcbiAgaWYgKCRpc0RhdGEgJiYgJHJEZWYuJGRhdGEpIHtcbiAgICAkdmFsaWRhdGVDb2RlID0gJ2tleXdvcmRWYWxpZGF0ZScgKyAkbHZsO1xuICAgIHZhciAkdmFsaWRhdGVTY2hlbWEgPSAkckRlZi52YWxpZGF0ZVNjaGVtYTtcbiAgICBvdXQgKz0gJyB2YXIgJyArICgkZGVmaW5pdGlvbikgKyAnID0gUlVMRVMuY3VzdG9tW1xcJycgKyAoJGtleXdvcmQpICsgJ1xcJ10uZGVmaW5pdGlvbjsgdmFyICcgKyAoJHZhbGlkYXRlQ29kZSkgKyAnID0gJyArICgkZGVmaW5pdGlvbikgKyAnLnZhbGlkYXRlOyc7XG4gIH0gZWxzZSB7XG4gICAgJHJ1bGVWYWxpZGF0ZSA9IGl0LnVzZUN1c3RvbVJ1bGUoJHJ1bGUsICRzY2hlbWEsIGl0LnNjaGVtYSwgaXQpO1xuICAgIGlmICghJHJ1bGVWYWxpZGF0ZSkgcmV0dXJuO1xuICAgICRzY2hlbWFWYWx1ZSA9ICd2YWxpZGF0ZS5zY2hlbWEnICsgJHNjaGVtYVBhdGg7XG4gICAgJHZhbGlkYXRlQ29kZSA9ICRydWxlVmFsaWRhdGUuY29kZTtcbiAgICAkY29tcGlsZSA9ICRyRGVmLmNvbXBpbGU7XG4gICAgJGlubGluZSA9ICRyRGVmLmlubGluZTtcbiAgICAkbWFjcm8gPSAkckRlZi5tYWNybztcbiAgfVxuICB2YXIgJHJ1bGVFcnJzID0gJHZhbGlkYXRlQ29kZSArICcuZXJyb3JzJyxcbiAgICAkaSA9ICdpJyArICRsdmwsXG4gICAgJHJ1bGVFcnIgPSAncnVsZUVycicgKyAkbHZsLFxuICAgICRhc3luY0tleXdvcmQgPSAkckRlZi5hc3luYztcbiAgaWYgKCRhc3luY0tleXdvcmQgJiYgIWl0LmFzeW5jKSB0aHJvdyBuZXcgRXJyb3IoJ2FzeW5jIGtleXdvcmQgaW4gc3luYyBzY2hlbWEnKTtcbiAgaWYgKCEoJGlubGluZSB8fCAkbWFjcm8pKSB7XG4gICAgb3V0ICs9ICcnICsgKCRydWxlRXJycykgKyAnID0gbnVsbDsnO1xuICB9XG4gIG91dCArPSAndmFyICcgKyAoJGVycnMpICsgJyA9IGVycm9yczt2YXIgJyArICgkdmFsaWQpICsgJzsnO1xuICBpZiAoJGlzRGF0YSAmJiAkckRlZi4kZGF0YSkge1xuICAgICRjbG9zaW5nQnJhY2VzICs9ICd9JztcbiAgICBvdXQgKz0gJyBpZiAoJyArICgkc2NoZW1hVmFsdWUpICsgJyA9PT0gdW5kZWZpbmVkKSB7ICcgKyAoJHZhbGlkKSArICcgPSB0cnVlOyB9IGVsc2UgeyAnO1xuICAgIGlmICgkdmFsaWRhdGVTY2hlbWEpIHtcbiAgICAgICRjbG9zaW5nQnJhY2VzICs9ICd9JztcbiAgICAgIG91dCArPSAnICcgKyAoJHZhbGlkKSArICcgPSAnICsgKCRkZWZpbml0aW9uKSArICcudmFsaWRhdGVTY2hlbWEoJyArICgkc2NoZW1hVmFsdWUpICsgJyk7IGlmICgnICsgKCR2YWxpZCkgKyAnKSB7ICc7XG4gICAgfVxuICB9XG4gIGlmICgkaW5saW5lKSB7XG4gICAgaWYgKCRyRGVmLnN0YXRlbWVudHMpIHtcbiAgICAgIG91dCArPSAnICcgKyAoJHJ1bGVWYWxpZGF0ZS52YWxpZGF0ZSkgKyAnICc7XG4gICAgfSBlbHNlIHtcbiAgICAgIG91dCArPSAnICcgKyAoJHZhbGlkKSArICcgPSAnICsgKCRydWxlVmFsaWRhdGUudmFsaWRhdGUpICsgJzsgJztcbiAgICB9XG4gIH0gZWxzZSBpZiAoJG1hY3JvKSB7XG4gICAgdmFyICRpdCA9IGl0LnV0aWwuY29weShpdCk7XG4gICAgdmFyICRjbG9zaW5nQnJhY2VzID0gJyc7XG4gICAgJGl0LmxldmVsKys7XG4gICAgdmFyICRuZXh0VmFsaWQgPSAndmFsaWQnICsgJGl0LmxldmVsO1xuICAgICRpdC5zY2hlbWEgPSAkcnVsZVZhbGlkYXRlLnZhbGlkYXRlO1xuICAgICRpdC5zY2hlbWFQYXRoID0gJyc7XG4gICAgdmFyICR3YXNDb21wb3NpdGUgPSBpdC5jb21wb3NpdGVSdWxlO1xuICAgIGl0LmNvbXBvc2l0ZVJ1bGUgPSAkaXQuY29tcG9zaXRlUnVsZSA9IHRydWU7XG4gICAgdmFyICRjb2RlID0gaXQudmFsaWRhdGUoJGl0KS5yZXBsYWNlKC92YWxpZGF0ZVxcLnNjaGVtYS9nLCAkdmFsaWRhdGVDb2RlKTtcbiAgICBpdC5jb21wb3NpdGVSdWxlID0gJGl0LmNvbXBvc2l0ZVJ1bGUgPSAkd2FzQ29tcG9zaXRlO1xuICAgIG91dCArPSAnICcgKyAoJGNvZGUpO1xuICB9IGVsc2Uge1xuICAgIHZhciAkJG91dFN0YWNrID0gJCRvdXRTdGFjayB8fCBbXTtcbiAgICAkJG91dFN0YWNrLnB1c2gob3V0KTtcbiAgICBvdXQgPSAnJztcbiAgICBvdXQgKz0gJyAgJyArICgkdmFsaWRhdGVDb2RlKSArICcuY2FsbCggJztcbiAgICBpZiAoaXQub3B0cy5wYXNzQ29udGV4dCkge1xuICAgICAgb3V0ICs9ICd0aGlzJztcbiAgICB9IGVsc2Uge1xuICAgICAgb3V0ICs9ICdzZWxmJztcbiAgICB9XG4gICAgaWYgKCRjb21waWxlIHx8ICRyRGVmLnNjaGVtYSA9PT0gZmFsc2UpIHtcbiAgICAgIG91dCArPSAnICwgJyArICgkZGF0YSkgKyAnICc7XG4gICAgfSBlbHNlIHtcbiAgICAgIG91dCArPSAnICwgJyArICgkc2NoZW1hVmFsdWUpICsgJyAsICcgKyAoJGRhdGEpICsgJyAsIHZhbGlkYXRlLnNjaGVtYScgKyAoaXQuc2NoZW1hUGF0aCkgKyAnICc7XG4gICAgfVxuICAgIG91dCArPSAnICwgKGRhdGFQYXRoIHx8IFxcJ1xcJyknO1xuICAgIGlmIChpdC5lcnJvclBhdGggIT0gJ1wiXCInKSB7XG4gICAgICBvdXQgKz0gJyArICcgKyAoaXQuZXJyb3JQYXRoKTtcbiAgICB9XG4gICAgdmFyICRwYXJlbnREYXRhID0gJGRhdGFMdmwgPyAnZGF0YScgKyAoKCRkYXRhTHZsIC0gMSkgfHwgJycpIDogJ3BhcmVudERhdGEnLFxuICAgICAgJHBhcmVudERhdGFQcm9wZXJ0eSA9ICRkYXRhTHZsID8gaXQuZGF0YVBhdGhBcnJbJGRhdGFMdmxdIDogJ3BhcmVudERhdGFQcm9wZXJ0eSc7XG4gICAgb3V0ICs9ICcgLCAnICsgKCRwYXJlbnREYXRhKSArICcgLCAnICsgKCRwYXJlbnREYXRhUHJvcGVydHkpICsgJyAsIHJvb3REYXRhICkgICc7XG4gICAgdmFyIGRlZl9jYWxsUnVsZVZhbGlkYXRlID0gb3V0O1xuICAgIG91dCA9ICQkb3V0U3RhY2sucG9wKCk7XG4gICAgaWYgKCRyRGVmLmVycm9ycyA9PT0gZmFsc2UpIHtcbiAgICAgIG91dCArPSAnICcgKyAoJHZhbGlkKSArICcgPSAnO1xuICAgICAgaWYgKCRhc3luY0tleXdvcmQpIHtcbiAgICAgICAgb3V0ICs9ICdhd2FpdCAnO1xuICAgICAgfVxuICAgICAgb3V0ICs9ICcnICsgKGRlZl9jYWxsUnVsZVZhbGlkYXRlKSArICc7ICc7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICgkYXN5bmNLZXl3b3JkKSB7XG4gICAgICAgICRydWxlRXJycyA9ICdjdXN0b21FcnJvcnMnICsgJGx2bDtcbiAgICAgICAgb3V0ICs9ICcgdmFyICcgKyAoJHJ1bGVFcnJzKSArICcgPSBudWxsOyB0cnkgeyAnICsgKCR2YWxpZCkgKyAnID0gYXdhaXQgJyArIChkZWZfY2FsbFJ1bGVWYWxpZGF0ZSkgKyAnOyB9IGNhdGNoIChlKSB7ICcgKyAoJHZhbGlkKSArICcgPSBmYWxzZTsgaWYgKGUgaW5zdGFuY2VvZiBWYWxpZGF0aW9uRXJyb3IpICcgKyAoJHJ1bGVFcnJzKSArICcgPSBlLmVycm9yczsgZWxzZSB0aHJvdyBlOyB9ICc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvdXQgKz0gJyAnICsgKCRydWxlRXJycykgKyAnID0gbnVsbDsgJyArICgkdmFsaWQpICsgJyA9ICcgKyAoZGVmX2NhbGxSdWxlVmFsaWRhdGUpICsgJzsgJztcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgaWYgKCRyRGVmLm1vZGlmeWluZykge1xuICAgIG91dCArPSAnIGlmICgnICsgKCRwYXJlbnREYXRhKSArICcpICcgKyAoJGRhdGEpICsgJyA9ICcgKyAoJHBhcmVudERhdGEpICsgJ1snICsgKCRwYXJlbnREYXRhUHJvcGVydHkpICsgJ107JztcbiAgfVxuICBvdXQgKz0gJycgKyAoJGNsb3NpbmdCcmFjZXMpO1xuICBpZiAoJHJEZWYudmFsaWQpIHtcbiAgICBpZiAoJGJyZWFrT25FcnJvcikge1xuICAgICAgb3V0ICs9ICcgaWYgKHRydWUpIHsgJztcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgb3V0ICs9ICcgaWYgKCAnO1xuICAgIGlmICgkckRlZi52YWxpZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBvdXQgKz0gJyAhJztcbiAgICAgIGlmICgkbWFjcm8pIHtcbiAgICAgICAgb3V0ICs9ICcnICsgKCRuZXh0VmFsaWQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb3V0ICs9ICcnICsgKCR2YWxpZCk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIG91dCArPSAnICcgKyAoISRyRGVmLnZhbGlkKSArICcgJztcbiAgICB9XG4gICAgb3V0ICs9ICcpIHsgJztcbiAgICAkZXJyb3JLZXl3b3JkID0gJHJ1bGUua2V5d29yZDtcbiAgICB2YXIgJCRvdXRTdGFjayA9ICQkb3V0U3RhY2sgfHwgW107XG4gICAgJCRvdXRTdGFjay5wdXNoKG91dCk7XG4gICAgb3V0ID0gJyc7XG4gICAgdmFyICQkb3V0U3RhY2sgPSAkJG91dFN0YWNrIHx8IFtdO1xuICAgICQkb3V0U3RhY2sucHVzaChvdXQpO1xuICAgIG91dCA9ICcnOyAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgIGlmIChpdC5jcmVhdGVFcnJvcnMgIT09IGZhbHNlKSB7XG4gICAgICBvdXQgKz0gJyB7IGtleXdvcmQ6IFxcJycgKyAoJGVycm9yS2V5d29yZCB8fCAnY3VzdG9tJykgKyAnXFwnICwgZGF0YVBhdGg6IChkYXRhUGF0aCB8fCBcXCdcXCcpICsgJyArIChpdC5lcnJvclBhdGgpICsgJyAsIHNjaGVtYVBhdGg6ICcgKyAoaXQudXRpbC50b1F1b3RlZFN0cmluZygkZXJyU2NoZW1hUGF0aCkpICsgJyAsIHBhcmFtczogeyBrZXl3b3JkOiBcXCcnICsgKCRydWxlLmtleXdvcmQpICsgJ1xcJyB9ICc7XG4gICAgICBpZiAoaXQub3B0cy5tZXNzYWdlcyAhPT0gZmFsc2UpIHtcbiAgICAgICAgb3V0ICs9ICcgLCBtZXNzYWdlOiBcXCdzaG91bGQgcGFzcyBcIicgKyAoJHJ1bGUua2V5d29yZCkgKyAnXCIga2V5d29yZCB2YWxpZGF0aW9uXFwnICc7XG4gICAgICB9XG4gICAgICBpZiAoaXQub3B0cy52ZXJib3NlKSB7XG4gICAgICAgIG91dCArPSAnICwgc2NoZW1hOiB2YWxpZGF0ZS5zY2hlbWEnICsgKCRzY2hlbWFQYXRoKSArICcgLCBwYXJlbnRTY2hlbWE6IHZhbGlkYXRlLnNjaGVtYScgKyAoaXQuc2NoZW1hUGF0aCkgKyAnICwgZGF0YTogJyArICgkZGF0YSkgKyAnICc7XG4gICAgICB9XG4gICAgICBvdXQgKz0gJyB9ICc7XG4gICAgfSBlbHNlIHtcbiAgICAgIG91dCArPSAnIHt9ICc7XG4gICAgfVxuICAgIHZhciBfX2VyciA9IG91dDtcbiAgICBvdXQgPSAkJG91dFN0YWNrLnBvcCgpO1xuICAgIGlmICghaXQuY29tcG9zaXRlUnVsZSAmJiAkYnJlYWtPbkVycm9yKSB7XG4gICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWYgKi9cbiAgICAgIGlmIChpdC5hc3luYykge1xuICAgICAgICBvdXQgKz0gJyB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKFsnICsgKF9fZXJyKSArICddKTsgJztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG91dCArPSAnIHZhbGlkYXRlLmVycm9ycyA9IFsnICsgKF9fZXJyKSArICddOyByZXR1cm4gZmFsc2U7ICc7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIG91dCArPSAnIHZhciBlcnIgPSAnICsgKF9fZXJyKSArICc7ICBpZiAodkVycm9ycyA9PT0gbnVsbCkgdkVycm9ycyA9IFtlcnJdOyBlbHNlIHZFcnJvcnMucHVzaChlcnIpOyBlcnJvcnMrKzsgJztcbiAgICB9XG4gICAgdmFyIGRlZl9jdXN0b21FcnJvciA9IG91dDtcbiAgICBvdXQgPSAkJG91dFN0YWNrLnBvcCgpO1xuICAgIGlmICgkaW5saW5lKSB7XG4gICAgICBpZiAoJHJEZWYuZXJyb3JzKSB7XG4gICAgICAgIGlmICgkckRlZi5lcnJvcnMgIT0gJ2Z1bGwnKSB7XG4gICAgICAgICAgb3V0ICs9ICcgIGZvciAodmFyICcgKyAoJGkpICsgJz0nICsgKCRlcnJzKSArICc7ICcgKyAoJGkpICsgJzxlcnJvcnM7ICcgKyAoJGkpICsgJysrKSB7IHZhciAnICsgKCRydWxlRXJyKSArICcgPSB2RXJyb3JzWycgKyAoJGkpICsgJ107IGlmICgnICsgKCRydWxlRXJyKSArICcuZGF0YVBhdGggPT09IHVuZGVmaW5lZCkgJyArICgkcnVsZUVycikgKyAnLmRhdGFQYXRoID0gKGRhdGFQYXRoIHx8IFxcJ1xcJykgKyAnICsgKGl0LmVycm9yUGF0aCkgKyAnOyBpZiAoJyArICgkcnVsZUVycikgKyAnLnNjaGVtYVBhdGggPT09IHVuZGVmaW5lZCkgeyAnICsgKCRydWxlRXJyKSArICcuc2NoZW1hUGF0aCA9IFwiJyArICgkZXJyU2NoZW1hUGF0aCkgKyAnXCI7IH0gJztcbiAgICAgICAgICBpZiAoaXQub3B0cy52ZXJib3NlKSB7XG4gICAgICAgICAgICBvdXQgKz0gJyAnICsgKCRydWxlRXJyKSArICcuc2NoZW1hID0gJyArICgkc2NoZW1hVmFsdWUpICsgJzsgJyArICgkcnVsZUVycikgKyAnLmRhdGEgPSAnICsgKCRkYXRhKSArICc7ICc7XG4gICAgICAgICAgfVxuICAgICAgICAgIG91dCArPSAnIH0gJztcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKCRyRGVmLmVycm9ycyA9PT0gZmFsc2UpIHtcbiAgICAgICAgICBvdXQgKz0gJyAnICsgKGRlZl9jdXN0b21FcnJvcikgKyAnICc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgb3V0ICs9ICcgaWYgKCcgKyAoJGVycnMpICsgJyA9PSBlcnJvcnMpIHsgJyArIChkZWZfY3VzdG9tRXJyb3IpICsgJyB9IGVsc2UgeyAgZm9yICh2YXIgJyArICgkaSkgKyAnPScgKyAoJGVycnMpICsgJzsgJyArICgkaSkgKyAnPGVycm9yczsgJyArICgkaSkgKyAnKyspIHsgdmFyICcgKyAoJHJ1bGVFcnIpICsgJyA9IHZFcnJvcnNbJyArICgkaSkgKyAnXTsgaWYgKCcgKyAoJHJ1bGVFcnIpICsgJy5kYXRhUGF0aCA9PT0gdW5kZWZpbmVkKSAnICsgKCRydWxlRXJyKSArICcuZGF0YVBhdGggPSAoZGF0YVBhdGggfHwgXFwnXFwnKSArICcgKyAoaXQuZXJyb3JQYXRoKSArICc7IGlmICgnICsgKCRydWxlRXJyKSArICcuc2NoZW1hUGF0aCA9PT0gdW5kZWZpbmVkKSB7ICcgKyAoJHJ1bGVFcnIpICsgJy5zY2hlbWFQYXRoID0gXCInICsgKCRlcnJTY2hlbWFQYXRoKSArICdcIjsgfSAnO1xuICAgICAgICAgIGlmIChpdC5vcHRzLnZlcmJvc2UpIHtcbiAgICAgICAgICAgIG91dCArPSAnICcgKyAoJHJ1bGVFcnIpICsgJy5zY2hlbWEgPSAnICsgKCRzY2hlbWFWYWx1ZSkgKyAnOyAnICsgKCRydWxlRXJyKSArICcuZGF0YSA9ICcgKyAoJGRhdGEpICsgJzsgJztcbiAgICAgICAgICB9XG4gICAgICAgICAgb3V0ICs9ICcgfSB9ICc7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKCRtYWNybykge1xuICAgICAgb3V0ICs9ICcgICB2YXIgZXJyID0gICAnOyAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZSAqL1xuICAgICAgaWYgKGl0LmNyZWF0ZUVycm9ycyAhPT0gZmFsc2UpIHtcbiAgICAgICAgb3V0ICs9ICcgeyBrZXl3b3JkOiBcXCcnICsgKCRlcnJvcktleXdvcmQgfHwgJ2N1c3RvbScpICsgJ1xcJyAsIGRhdGFQYXRoOiAoZGF0YVBhdGggfHwgXFwnXFwnKSArICcgKyAoaXQuZXJyb3JQYXRoKSArICcgLCBzY2hlbWFQYXRoOiAnICsgKGl0LnV0aWwudG9RdW90ZWRTdHJpbmcoJGVyclNjaGVtYVBhdGgpKSArICcgLCBwYXJhbXM6IHsga2V5d29yZDogXFwnJyArICgkcnVsZS5rZXl3b3JkKSArICdcXCcgfSAnO1xuICAgICAgICBpZiAoaXQub3B0cy5tZXNzYWdlcyAhPT0gZmFsc2UpIHtcbiAgICAgICAgICBvdXQgKz0gJyAsIG1lc3NhZ2U6IFxcJ3Nob3VsZCBwYXNzIFwiJyArICgkcnVsZS5rZXl3b3JkKSArICdcIiBrZXl3b3JkIHZhbGlkYXRpb25cXCcgJztcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXQub3B0cy52ZXJib3NlKSB7XG4gICAgICAgICAgb3V0ICs9ICcgLCBzY2hlbWE6IHZhbGlkYXRlLnNjaGVtYScgKyAoJHNjaGVtYVBhdGgpICsgJyAsIHBhcmVudFNjaGVtYTogdmFsaWRhdGUuc2NoZW1hJyArIChpdC5zY2hlbWFQYXRoKSArICcgLCBkYXRhOiAnICsgKCRkYXRhKSArICcgJztcbiAgICAgICAgfVxuICAgICAgICBvdXQgKz0gJyB9ICc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvdXQgKz0gJyB7fSAnO1xuICAgICAgfVxuICAgICAgb3V0ICs9ICc7ICBpZiAodkVycm9ycyA9PT0gbnVsbCkgdkVycm9ycyA9IFtlcnJdOyBlbHNlIHZFcnJvcnMucHVzaChlcnIpOyBlcnJvcnMrKzsgJztcbiAgICAgIGlmICghaXQuY29tcG9zaXRlUnVsZSAmJiAkYnJlYWtPbkVycm9yKSB7XG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgICAgICBpZiAoaXQuYXN5bmMpIHtcbiAgICAgICAgICBvdXQgKz0gJyB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKHZFcnJvcnMpOyAnO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG91dCArPSAnIHZhbGlkYXRlLmVycm9ycyA9IHZFcnJvcnM7IHJldHVybiBmYWxzZTsgJztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoJHJEZWYuZXJyb3JzID09PSBmYWxzZSkge1xuICAgICAgICBvdXQgKz0gJyAnICsgKGRlZl9jdXN0b21FcnJvcikgKyAnICc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvdXQgKz0gJyBpZiAoQXJyYXkuaXNBcnJheSgnICsgKCRydWxlRXJycykgKyAnKSkgeyBpZiAodkVycm9ycyA9PT0gbnVsbCkgdkVycm9ycyA9ICcgKyAoJHJ1bGVFcnJzKSArICc7IGVsc2UgdkVycm9ycyA9IHZFcnJvcnMuY29uY2F0KCcgKyAoJHJ1bGVFcnJzKSArICcpOyBlcnJvcnMgPSB2RXJyb3JzLmxlbmd0aDsgIGZvciAodmFyICcgKyAoJGkpICsgJz0nICsgKCRlcnJzKSArICc7ICcgKyAoJGkpICsgJzxlcnJvcnM7ICcgKyAoJGkpICsgJysrKSB7IHZhciAnICsgKCRydWxlRXJyKSArICcgPSB2RXJyb3JzWycgKyAoJGkpICsgJ107IGlmICgnICsgKCRydWxlRXJyKSArICcuZGF0YVBhdGggPT09IHVuZGVmaW5lZCkgJyArICgkcnVsZUVycikgKyAnLmRhdGFQYXRoID0gKGRhdGFQYXRoIHx8IFxcJ1xcJykgKyAnICsgKGl0LmVycm9yUGF0aCkgKyAnOyAgJyArICgkcnVsZUVycikgKyAnLnNjaGVtYVBhdGggPSBcIicgKyAoJGVyclNjaGVtYVBhdGgpICsgJ1wiOyAgJztcbiAgICAgICAgaWYgKGl0Lm9wdHMudmVyYm9zZSkge1xuICAgICAgICAgIG91dCArPSAnICcgKyAoJHJ1bGVFcnIpICsgJy5zY2hlbWEgPSAnICsgKCRzY2hlbWFWYWx1ZSkgKyAnOyAnICsgKCRydWxlRXJyKSArICcuZGF0YSA9ICcgKyAoJGRhdGEpICsgJzsgJztcbiAgICAgICAgfVxuICAgICAgICBvdXQgKz0gJyB9IH0gZWxzZSB7ICcgKyAoZGVmX2N1c3RvbUVycm9yKSArICcgfSAnO1xuICAgICAgfVxuICAgIH1cbiAgICBvdXQgKz0gJyB9ICc7XG4gICAgaWYgKCRicmVha09uRXJyb3IpIHtcbiAgICAgIG91dCArPSAnIGVsc2UgeyAnO1xuICAgIH1cbiAgfVxuICByZXR1cm4gb3V0O1xufVxuIiwgIntcbiAgICBcIiRzY2hlbWFcIjogXCJodHRwOi8vanNvbi1zY2hlbWEub3JnL2RyYWZ0LTA3L3NjaGVtYSNcIixcbiAgICBcIiRpZFwiOiBcImh0dHA6Ly9qc29uLXNjaGVtYS5vcmcvZHJhZnQtMDcvc2NoZW1hI1wiLFxuICAgIFwidGl0bGVcIjogXCJDb3JlIHNjaGVtYSBtZXRhLXNjaGVtYVwiLFxuICAgIFwiZGVmaW5pdGlvbnNcIjoge1xuICAgICAgICBcInNjaGVtYUFycmF5XCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXG4gICAgICAgICAgICBcIm1pbkl0ZW1zXCI6IDEsXG4gICAgICAgICAgICBcIml0ZW1zXCI6IHsgXCIkcmVmXCI6IFwiI1wiIH1cbiAgICAgICAgfSxcbiAgICAgICAgXCJub25OZWdhdGl2ZUludGVnZXJcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiaW50ZWdlclwiLFxuICAgICAgICAgICAgXCJtaW5pbXVtXCI6IDBcbiAgICAgICAgfSxcbiAgICAgICAgXCJub25OZWdhdGl2ZUludGVnZXJEZWZhdWx0MFwiOiB7XG4gICAgICAgICAgICBcImFsbE9mXCI6IFtcbiAgICAgICAgICAgICAgICB7IFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvbm9uTmVnYXRpdmVJbnRlZ2VyXCIgfSxcbiAgICAgICAgICAgICAgICB7IFwiZGVmYXVsdFwiOiAwIH1cbiAgICAgICAgICAgIF1cbiAgICAgICAgfSxcbiAgICAgICAgXCJzaW1wbGVUeXBlc1wiOiB7XG4gICAgICAgICAgICBcImVudW1cIjogW1xuICAgICAgICAgICAgICAgIFwiYXJyYXlcIixcbiAgICAgICAgICAgICAgICBcImJvb2xlYW5cIixcbiAgICAgICAgICAgICAgICBcImludGVnZXJcIixcbiAgICAgICAgICAgICAgICBcIm51bGxcIixcbiAgICAgICAgICAgICAgICBcIm51bWJlclwiLFxuICAgICAgICAgICAgICAgIFwib2JqZWN0XCIsXG4gICAgICAgICAgICAgICAgXCJzdHJpbmdcIlxuICAgICAgICAgICAgXVxuICAgICAgICB9LFxuICAgICAgICBcInN0cmluZ0FycmF5XCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcImFycmF5XCIsXG4gICAgICAgICAgICBcIml0ZW1zXCI6IHsgXCJ0eXBlXCI6IFwic3RyaW5nXCIgfSxcbiAgICAgICAgICAgIFwidW5pcXVlSXRlbXNcIjogdHJ1ZSxcbiAgICAgICAgICAgIFwiZGVmYXVsdFwiOiBbXVxuICAgICAgICB9XG4gICAgfSxcbiAgICBcInR5cGVcIjogW1wib2JqZWN0XCIsIFwiYm9vbGVhblwiXSxcbiAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICBcIiRpZFwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZm9ybWF0XCI6IFwidXJpLXJlZmVyZW5jZVwiXG4gICAgICAgIH0sXG4gICAgICAgIFwiJHNjaGVtYVwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZm9ybWF0XCI6IFwidXJpXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCIkcmVmXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiLFxuICAgICAgICAgICAgXCJmb3JtYXRcIjogXCJ1cmktcmVmZXJlbmNlXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCIkY29tbWVudFwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIlxuICAgICAgICB9LFxuICAgICAgICBcInRpdGxlXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcInN0cmluZ1wiXG4gICAgICAgIH0sXG4gICAgICAgIFwiZGVzY3JpcHRpb25cIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJkZWZhdWx0XCI6IHRydWUsXG4gICAgICAgIFwicmVhZE9ubHlcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiYm9vbGVhblwiLFxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IGZhbHNlXG4gICAgICAgIH0sXG4gICAgICAgIFwiZXhhbXBsZXNcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwiYXJyYXlcIixcbiAgICAgICAgICAgIFwiaXRlbXNcIjogdHJ1ZVxuICAgICAgICB9LFxuICAgICAgICBcIm11bHRpcGxlT2ZcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwibnVtYmVyXCIsXG4gICAgICAgICAgICBcImV4Y2x1c2l2ZU1pbmltdW1cIjogMFxuICAgICAgICB9LFxuICAgICAgICBcIm1heGltdW1cIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwibnVtYmVyXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJleGNsdXNpdmVNYXhpbXVtXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcIm51bWJlclwiXG4gICAgICAgIH0sXG4gICAgICAgIFwibWluaW11bVwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJudW1iZXJcIlxuICAgICAgICB9LFxuICAgICAgICBcImV4Y2x1c2l2ZU1pbmltdW1cIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwibnVtYmVyXCJcbiAgICAgICAgfSxcbiAgICAgICAgXCJtYXhMZW5ndGhcIjogeyBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL25vbk5lZ2F0aXZlSW50ZWdlclwiIH0sXG4gICAgICAgIFwibWluTGVuZ3RoXCI6IHsgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9ub25OZWdhdGl2ZUludGVnZXJEZWZhdWx0MFwiIH0sXG4gICAgICAgIFwicGF0dGVyblwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJzdHJpbmdcIixcbiAgICAgICAgICAgIFwiZm9ybWF0XCI6IFwicmVnZXhcIlxuICAgICAgICB9LFxuICAgICAgICBcImFkZGl0aW9uYWxJdGVtc1wiOiB7IFwiJHJlZlwiOiBcIiNcIiB9LFxuICAgICAgICBcIml0ZW1zXCI6IHtcbiAgICAgICAgICAgIFwiYW55T2ZcIjogW1xuICAgICAgICAgICAgICAgIHsgXCIkcmVmXCI6IFwiI1wiIH0sXG4gICAgICAgICAgICAgICAgeyBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL3NjaGVtYUFycmF5XCIgfVxuICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIFwiZGVmYXVsdFwiOiB0cnVlXG4gICAgICAgIH0sXG4gICAgICAgIFwibWF4SXRlbXNcIjogeyBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL25vbk5lZ2F0aXZlSW50ZWdlclwiIH0sXG4gICAgICAgIFwibWluSXRlbXNcIjogeyBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL25vbk5lZ2F0aXZlSW50ZWdlckRlZmF1bHQwXCIgfSxcbiAgICAgICAgXCJ1bmlxdWVJdGVtc1wiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJib29sZWFuXCIsXG4gICAgICAgICAgICBcImRlZmF1bHRcIjogZmFsc2VcbiAgICAgICAgfSxcbiAgICAgICAgXCJjb250YWluc1wiOiB7IFwiJHJlZlwiOiBcIiNcIiB9LFxuICAgICAgICBcIm1heFByb3BlcnRpZXNcIjogeyBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL25vbk5lZ2F0aXZlSW50ZWdlclwiIH0sXG4gICAgICAgIFwibWluUHJvcGVydGllc1wiOiB7IFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvbm9uTmVnYXRpdmVJbnRlZ2VyRGVmYXVsdDBcIiB9LFxuICAgICAgICBcInJlcXVpcmVkXCI6IHsgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9zdHJpbmdBcnJheVwiIH0sXG4gICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogeyBcIiRyZWZcIjogXCIjXCIgfSxcbiAgICAgICAgXCJkZWZpbml0aW9uc1wiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogeyBcIiRyZWZcIjogXCIjXCIgfSxcbiAgICAgICAgICAgIFwiZGVmYXVsdFwiOiB7fVxuICAgICAgICB9LFxuICAgICAgICBcInByb3BlcnRpZXNcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgICAgICAgICBcImFkZGl0aW9uYWxQcm9wZXJ0aWVzXCI6IHsgXCIkcmVmXCI6IFwiI1wiIH0sXG4gICAgICAgICAgICBcImRlZmF1bHRcIjoge31cbiAgICAgICAgfSxcbiAgICAgICAgXCJwYXR0ZXJuUHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJvYmplY3RcIixcbiAgICAgICAgICAgIFwiYWRkaXRpb25hbFByb3BlcnRpZXNcIjogeyBcIiRyZWZcIjogXCIjXCIgfSxcbiAgICAgICAgICAgIFwicHJvcGVydHlOYW1lc1wiOiB7IFwiZm9ybWF0XCI6IFwicmVnZXhcIiB9LFxuICAgICAgICAgICAgXCJkZWZhdWx0XCI6IHt9XG4gICAgICAgIH0sXG4gICAgICAgIFwiZGVwZW5kZW5jaWVzXCI6IHtcbiAgICAgICAgICAgIFwidHlwZVwiOiBcIm9iamVjdFwiLFxuICAgICAgICAgICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiB7XG4gICAgICAgICAgICAgICAgXCJhbnlPZlwiOiBbXG4gICAgICAgICAgICAgICAgICAgIHsgXCIkcmVmXCI6IFwiI1wiIH0sXG4gICAgICAgICAgICAgICAgICAgIHsgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9zdHJpbmdBcnJheVwiIH1cbiAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIFwicHJvcGVydHlOYW1lc1wiOiB7IFwiJHJlZlwiOiBcIiNcIiB9LFxuICAgICAgICBcImNvbnN0XCI6IHRydWUsXG4gICAgICAgIFwiZW51bVwiOiB7XG4gICAgICAgICAgICBcInR5cGVcIjogXCJhcnJheVwiLFxuICAgICAgICAgICAgXCJpdGVtc1wiOiB0cnVlLFxuICAgICAgICAgICAgXCJtaW5JdGVtc1wiOiAxLFxuICAgICAgICAgICAgXCJ1bmlxdWVJdGVtc1wiOiB0cnVlXG4gICAgICAgIH0sXG4gICAgICAgIFwidHlwZVwiOiB7XG4gICAgICAgICAgICBcImFueU9mXCI6IFtcbiAgICAgICAgICAgICAgICB7IFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvc2ltcGxlVHlwZXNcIiB9LFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgXCJ0eXBlXCI6IFwiYXJyYXlcIixcbiAgICAgICAgICAgICAgICAgICAgXCJpdGVtc1wiOiB7IFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvc2ltcGxlVHlwZXNcIiB9LFxuICAgICAgICAgICAgICAgICAgICBcIm1pbkl0ZW1zXCI6IDEsXG4gICAgICAgICAgICAgICAgICAgIFwidW5pcXVlSXRlbXNcIjogdHJ1ZVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF1cbiAgICAgICAgfSxcbiAgICAgICAgXCJmb3JtYXRcIjogeyBcInR5cGVcIjogXCJzdHJpbmdcIiB9LFxuICAgICAgICBcImNvbnRlbnRNZWRpYVR5cGVcIjogeyBcInR5cGVcIjogXCJzdHJpbmdcIiB9LFxuICAgICAgICBcImNvbnRlbnRFbmNvZGluZ1wiOiB7IFwidHlwZVwiOiBcInN0cmluZ1wiIH0sXG4gICAgICAgIFwiaWZcIjoge1wiJHJlZlwiOiBcIiNcIn0sXG4gICAgICAgIFwidGhlblwiOiB7XCIkcmVmXCI6IFwiI1wifSxcbiAgICAgICAgXCJlbHNlXCI6IHtcIiRyZWZcIjogXCIjXCJ9LFxuICAgICAgICBcImFsbE9mXCI6IHsgXCIkcmVmXCI6IFwiIy9kZWZpbml0aW9ucy9zY2hlbWFBcnJheVwiIH0sXG4gICAgICAgIFwiYW55T2ZcIjogeyBcIiRyZWZcIjogXCIjL2RlZmluaXRpb25zL3NjaGVtYUFycmF5XCIgfSxcbiAgICAgICAgXCJvbmVPZlwiOiB7IFwiJHJlZlwiOiBcIiMvZGVmaW5pdGlvbnMvc2NoZW1hQXJyYXlcIiB9LFxuICAgICAgICBcIm5vdFwiOiB7IFwiJHJlZlwiOiBcIiNcIiB9XG4gICAgfSxcbiAgICBcImRlZmF1bHRcIjogdHJ1ZVxufVxuIiwgIid1c2Ugc3RyaWN0JztcblxudmFyIG1ldGFTY2hlbWEgPSByZXF1aXJlKCcuL3JlZnMvanNvbi1zY2hlbWEtZHJhZnQtMDcuanNvbicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgJGlkOiAnaHR0cHM6Ly9naXRodWIuY29tL2Fqdi12YWxpZGF0b3IvYWp2L2Jsb2IvbWFzdGVyL2xpYi9kZWZpbml0aW9uX3NjaGVtYS5qcycsXG4gIGRlZmluaXRpb25zOiB7XG4gICAgc2ltcGxlVHlwZXM6IG1ldGFTY2hlbWEuZGVmaW5pdGlvbnMuc2ltcGxlVHlwZXNcbiAgfSxcbiAgdHlwZTogJ29iamVjdCcsXG4gIGRlcGVuZGVuY2llczoge1xuICAgIHNjaGVtYTogWyd2YWxpZGF0ZSddLFxuICAgICRkYXRhOiBbJ3ZhbGlkYXRlJ10sXG4gICAgc3RhdGVtZW50czogWydpbmxpbmUnXSxcbiAgICB2YWxpZDoge25vdDoge3JlcXVpcmVkOiBbJ21hY3JvJ119fVxuICB9LFxuICBwcm9wZXJ0aWVzOiB7XG4gICAgdHlwZTogbWV0YVNjaGVtYS5wcm9wZXJ0aWVzLnR5cGUsXG4gICAgc2NoZW1hOiB7dHlwZTogJ2Jvb2xlYW4nfSxcbiAgICBzdGF0ZW1lbnRzOiB7dHlwZTogJ2Jvb2xlYW4nfSxcbiAgICBkZXBlbmRlbmNpZXM6IHtcbiAgICAgIHR5cGU6ICdhcnJheScsXG4gICAgICBpdGVtczoge3R5cGU6ICdzdHJpbmcnfVxuICAgIH0sXG4gICAgbWV0YVNjaGVtYToge3R5cGU6ICdvYmplY3QnfSxcbiAgICBtb2RpZnlpbmc6IHt0eXBlOiAnYm9vbGVhbid9LFxuICAgIHZhbGlkOiB7dHlwZTogJ2Jvb2xlYW4nfSxcbiAgICAkZGF0YToge3R5cGU6ICdib29sZWFuJ30sXG4gICAgYXN5bmM6IHt0eXBlOiAnYm9vbGVhbid9LFxuICAgIGVycm9yczoge1xuICAgICAgYW55T2Y6IFtcbiAgICAgICAge3R5cGU6ICdib29sZWFuJ30sXG4gICAgICAgIHtjb25zdDogJ2Z1bGwnfVxuICAgICAgXVxuICAgIH1cbiAgfVxufTtcbiIsICIndXNlIHN0cmljdCc7XG5cbnZhciBJREVOVElGSUVSID0gL15bYS16XyRdW2EtejAtOV8kLV0qJC9pO1xudmFyIGN1c3RvbVJ1bGVDb2RlID0gcmVxdWlyZSgnLi9kb3Rqcy9jdXN0b20nKTtcbnZhciBkZWZpbml0aW9uU2NoZW1hID0gcmVxdWlyZSgnLi9kZWZpbml0aW9uX3NjaGVtYScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgYWRkOiBhZGRLZXl3b3JkLFxuICBnZXQ6IGdldEtleXdvcmQsXG4gIHJlbW92ZTogcmVtb3ZlS2V5d29yZCxcbiAgdmFsaWRhdGU6IHZhbGlkYXRlS2V5d29yZFxufTtcblxuXG4vKipcbiAqIERlZmluZSBjdXN0b20ga2V5d29yZFxuICogQHRoaXMgIEFqdlxuICogQHBhcmFtIHtTdHJpbmd9IGtleXdvcmQgY3VzdG9tIGtleXdvcmQsIHNob3VsZCBiZSB1bmlxdWUgKGluY2x1ZGluZyBkaWZmZXJlbnQgZnJvbSBhbGwgc3RhbmRhcmQsIGN1c3RvbSBhbmQgbWFjcm8ga2V5d29yZHMpLlxuICogQHBhcmFtIHtPYmplY3R9IGRlZmluaXRpb24ga2V5d29yZCBkZWZpbml0aW9uIG9iamVjdCB3aXRoIHByb3BlcnRpZXMgYHR5cGVgICh0eXBlKHMpIHdoaWNoIHRoZSBrZXl3b3JkIGFwcGxpZXMgdG8pLCBgdmFsaWRhdGVgIG9yIGBjb21waWxlYC5cbiAqIEByZXR1cm4ge0Fqdn0gdGhpcyBmb3IgbWV0aG9kIGNoYWluaW5nXG4gKi9cbmZ1bmN0aW9uIGFkZEtleXdvcmQoa2V5d29yZCwgZGVmaW5pdGlvbikge1xuICAvKiBqc2hpbnQgdmFsaWR0aGlzOiB0cnVlICovXG4gIC8qIGVzbGludCBuby1zaGFkb3c6IDAgKi9cbiAgdmFyIFJVTEVTID0gdGhpcy5SVUxFUztcbiAgaWYgKFJVTEVTLmtleXdvcmRzW2tleXdvcmRdKVxuICAgIHRocm93IG5ldyBFcnJvcignS2V5d29yZCAnICsga2V5d29yZCArICcgaXMgYWxyZWFkeSBkZWZpbmVkJyk7XG5cbiAgaWYgKCFJREVOVElGSUVSLnRlc3Qoa2V5d29yZCkpXG4gICAgdGhyb3cgbmV3IEVycm9yKCdLZXl3b3JkICcgKyBrZXl3b3JkICsgJyBpcyBub3QgYSB2YWxpZCBpZGVudGlmaWVyJyk7XG5cbiAgaWYgKGRlZmluaXRpb24pIHtcbiAgICB0aGlzLnZhbGlkYXRlS2V5d29yZChkZWZpbml0aW9uLCB0cnVlKTtcblxuICAgIHZhciBkYXRhVHlwZSA9IGRlZmluaXRpb24udHlwZTtcbiAgICBpZiAoQXJyYXkuaXNBcnJheShkYXRhVHlwZSkpIHtcbiAgICAgIGZvciAodmFyIGk9MDsgaTxkYXRhVHlwZS5sZW5ndGg7IGkrKylcbiAgICAgICAgX2FkZFJ1bGUoa2V5d29yZCwgZGF0YVR5cGVbaV0sIGRlZmluaXRpb24pO1xuICAgIH0gZWxzZSB7XG4gICAgICBfYWRkUnVsZShrZXl3b3JkLCBkYXRhVHlwZSwgZGVmaW5pdGlvbik7XG4gICAgfVxuXG4gICAgdmFyIG1ldGFTY2hlbWEgPSBkZWZpbml0aW9uLm1ldGFTY2hlbWE7XG4gICAgaWYgKG1ldGFTY2hlbWEpIHtcbiAgICAgIGlmIChkZWZpbml0aW9uLiRkYXRhICYmIHRoaXMuX29wdHMuJGRhdGEpIHtcbiAgICAgICAgbWV0YVNjaGVtYSA9IHtcbiAgICAgICAgICBhbnlPZjogW1xuICAgICAgICAgICAgbWV0YVNjaGVtYSxcbiAgICAgICAgICAgIHsgJyRyZWYnOiAnaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL2Fqdi12YWxpZGF0b3IvYWp2L21hc3Rlci9saWIvcmVmcy9kYXRhLmpzb24jJyB9XG4gICAgICAgICAgXVxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgZGVmaW5pdGlvbi52YWxpZGF0ZVNjaGVtYSA9IHRoaXMuY29tcGlsZShtZXRhU2NoZW1hLCB0cnVlKTtcbiAgICB9XG4gIH1cblxuICBSVUxFUy5rZXl3b3Jkc1trZXl3b3JkXSA9IFJVTEVTLmFsbFtrZXl3b3JkXSA9IHRydWU7XG5cblxuICBmdW5jdGlvbiBfYWRkUnVsZShrZXl3b3JkLCBkYXRhVHlwZSwgZGVmaW5pdGlvbikge1xuICAgIHZhciBydWxlR3JvdXA7XG4gICAgZm9yICh2YXIgaT0wOyBpPFJVTEVTLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgcmcgPSBSVUxFU1tpXTtcbiAgICAgIGlmIChyZy50eXBlID09IGRhdGFUeXBlKSB7XG4gICAgICAgIHJ1bGVHcm91cCA9IHJnO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoIXJ1bGVHcm91cCkge1xuICAgICAgcnVsZUdyb3VwID0geyB0eXBlOiBkYXRhVHlwZSwgcnVsZXM6IFtdIH07XG4gICAgICBSVUxFUy5wdXNoKHJ1bGVHcm91cCk7XG4gICAgfVxuXG4gICAgdmFyIHJ1bGUgPSB7XG4gICAgICBrZXl3b3JkOiBrZXl3b3JkLFxuICAgICAgZGVmaW5pdGlvbjogZGVmaW5pdGlvbixcbiAgICAgIGN1c3RvbTogdHJ1ZSxcbiAgICAgIGNvZGU6IGN1c3RvbVJ1bGVDb2RlLFxuICAgICAgaW1wbGVtZW50czogZGVmaW5pdGlvbi5pbXBsZW1lbnRzXG4gICAgfTtcbiAgICBydWxlR3JvdXAucnVsZXMucHVzaChydWxlKTtcbiAgICBSVUxFUy5jdXN0b21ba2V5d29yZF0gPSBydWxlO1xuICB9XG5cbiAgcmV0dXJuIHRoaXM7XG59XG5cblxuLyoqXG4gKiBHZXQga2V5d29yZFxuICogQHRoaXMgIEFqdlxuICogQHBhcmFtIHtTdHJpbmd9IGtleXdvcmQgcHJlLWRlZmluZWQgb3IgY3VzdG9tIGtleXdvcmQuXG4gKiBAcmV0dXJuIHtPYmplY3R8Qm9vbGVhbn0gY3VzdG9tIGtleXdvcmQgZGVmaW5pdGlvbiwgYHRydWVgIGlmIGl0IGlzIGEgcHJlZGVmaW5lZCBrZXl3b3JkLCBgZmFsc2VgIG90aGVyd2lzZS5cbiAqL1xuZnVuY3Rpb24gZ2V0S2V5d29yZChrZXl3b3JkKSB7XG4gIC8qIGpzaGludCB2YWxpZHRoaXM6IHRydWUgKi9cbiAgdmFyIHJ1bGUgPSB0aGlzLlJVTEVTLmN1c3RvbVtrZXl3b3JkXTtcbiAgcmV0dXJuIHJ1bGUgPyBydWxlLmRlZmluaXRpb24gOiB0aGlzLlJVTEVTLmtleXdvcmRzW2tleXdvcmRdIHx8IGZhbHNlO1xufVxuXG5cbi8qKlxuICogUmVtb3ZlIGtleXdvcmRcbiAqIEB0aGlzICBBanZcbiAqIEBwYXJhbSB7U3RyaW5nfSBrZXl3b3JkIHByZS1kZWZpbmVkIG9yIGN1c3RvbSBrZXl3b3JkLlxuICogQHJldHVybiB7QWp2fSB0aGlzIGZvciBtZXRob2QgY2hhaW5pbmdcbiAqL1xuZnVuY3Rpb24gcmVtb3ZlS2V5d29yZChrZXl3b3JkKSB7XG4gIC8qIGpzaGludCB2YWxpZHRoaXM6IHRydWUgKi9cbiAgdmFyIFJVTEVTID0gdGhpcy5SVUxFUztcbiAgZGVsZXRlIFJVTEVTLmtleXdvcmRzW2tleXdvcmRdO1xuICBkZWxldGUgUlVMRVMuYWxsW2tleXdvcmRdO1xuICBkZWxldGUgUlVMRVMuY3VzdG9tW2tleXdvcmRdO1xuICBmb3IgKHZhciBpPTA7IGk8UlVMRVMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgcnVsZXMgPSBSVUxFU1tpXS5ydWxlcztcbiAgICBmb3IgKHZhciBqPTA7IGo8cnVsZXMubGVuZ3RoOyBqKyspIHtcbiAgICAgIGlmIChydWxlc1tqXS5rZXl3b3JkID09IGtleXdvcmQpIHtcbiAgICAgICAgcnVsZXMuc3BsaWNlKGosIDEpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRoaXM7XG59XG5cblxuLyoqXG4gKiBWYWxpZGF0ZSBrZXl3b3JkIGRlZmluaXRpb25cbiAqIEB0aGlzICBBanZcbiAqIEBwYXJhbSB7T2JqZWN0fSBkZWZpbml0aW9uIGtleXdvcmQgZGVmaW5pdGlvbiBvYmplY3QuXG4gKiBAcGFyYW0ge0Jvb2xlYW59IHRocm93RXJyb3IgdHJ1ZSB0byB0aHJvdyBleGNlcHRpb24gaWYgZGVmaW5pdGlvbiBpcyBpbnZhbGlkXG4gKiBAcmV0dXJuIHtib29sZWFufSB2YWxpZGF0aW9uIHJlc3VsdFxuICovXG5mdW5jdGlvbiB2YWxpZGF0ZUtleXdvcmQoZGVmaW5pdGlvbiwgdGhyb3dFcnJvcikge1xuICB2YWxpZGF0ZUtleXdvcmQuZXJyb3JzID0gbnVsbDtcbiAgdmFyIHYgPSB0aGlzLl92YWxpZGF0ZUtleXdvcmQgPSB0aGlzLl92YWxpZGF0ZUtleXdvcmRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCB0aGlzLmNvbXBpbGUoZGVmaW5pdGlvblNjaGVtYSwgdHJ1ZSk7XG5cbiAgaWYgKHYoZGVmaW5pdGlvbikpIHJldHVybiB0cnVlO1xuICB2YWxpZGF0ZUtleXdvcmQuZXJyb3JzID0gdi5lcnJvcnM7XG4gIGlmICh0aHJvd0Vycm9yKVxuICAgIHRocm93IG5ldyBFcnJvcignY3VzdG9tIGtleXdvcmQgZGVmaW5pdGlvbiBpcyBpbnZhbGlkOiAnICArIHRoaXMuZXJyb3JzVGV4dCh2LmVycm9ycykpO1xuICBlbHNlXG4gICAgcmV0dXJuIGZhbHNlO1xufVxuIiwgIntcbiAgICBcIiRzY2hlbWFcIjogXCJodHRwOi8vanNvbi1zY2hlbWEub3JnL2RyYWZ0LTA3L3NjaGVtYSNcIixcbiAgICBcIiRpZFwiOiBcImh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9hanYtdmFsaWRhdG9yL2Fqdi9tYXN0ZXIvbGliL3JlZnMvZGF0YS5qc29uI1wiLFxuICAgIFwiZGVzY3JpcHRpb25cIjogXCJNZXRhLXNjaGVtYSBmb3IgJGRhdGEgcmVmZXJlbmNlIChKU09OIFNjaGVtYSBleHRlbnNpb24gcHJvcG9zYWwpXCIsXG4gICAgXCJ0eXBlXCI6IFwib2JqZWN0XCIsXG4gICAgXCJyZXF1aXJlZFwiOiBbIFwiJGRhdGFcIiBdLFxuICAgIFwicHJvcGVydGllc1wiOiB7XG4gICAgICAgIFwiJGRhdGFcIjoge1xuICAgICAgICAgICAgXCJ0eXBlXCI6IFwic3RyaW5nXCIsXG4gICAgICAgICAgICBcImFueU9mXCI6IFtcbiAgICAgICAgICAgICAgICB7IFwiZm9ybWF0XCI6IFwicmVsYXRpdmUtanNvbi1wb2ludGVyXCIgfSwgXG4gICAgICAgICAgICAgICAgeyBcImZvcm1hdFwiOiBcImpzb24tcG9pbnRlclwiIH1cbiAgICAgICAgICAgIF1cbiAgICAgICAgfVxuICAgIH0sXG4gICAgXCJhZGRpdGlvbmFsUHJvcGVydGllc1wiOiBmYWxzZVxufVxuIiwgIid1c2Ugc3RyaWN0JztcblxudmFyIGNvbXBpbGVTY2hlbWEgPSByZXF1aXJlKCcuL2NvbXBpbGUnKVxuICAsIHJlc29sdmUgPSByZXF1aXJlKCcuL2NvbXBpbGUvcmVzb2x2ZScpXG4gICwgQ2FjaGUgPSByZXF1aXJlKCcuL2NhY2hlJylcbiAgLCBTY2hlbWFPYmplY3QgPSByZXF1aXJlKCcuL2NvbXBpbGUvc2NoZW1hX29iaicpXG4gICwgc3RhYmxlU3RyaW5naWZ5ID0gcmVxdWlyZSgnZmFzdC1qc29uLXN0YWJsZS1zdHJpbmdpZnknKVxuICAsIGZvcm1hdHMgPSByZXF1aXJlKCcuL2NvbXBpbGUvZm9ybWF0cycpXG4gICwgcnVsZXMgPSByZXF1aXJlKCcuL2NvbXBpbGUvcnVsZXMnKVxuICAsICRkYXRhTWV0YVNjaGVtYSA9IHJlcXVpcmUoJy4vZGF0YScpXG4gICwgdXRpbCA9IHJlcXVpcmUoJy4vY29tcGlsZS91dGlsJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gQWp2O1xuXG5BanYucHJvdG90eXBlLnZhbGlkYXRlID0gdmFsaWRhdGU7XG5BanYucHJvdG90eXBlLmNvbXBpbGUgPSBjb21waWxlO1xuQWp2LnByb3RvdHlwZS5hZGRTY2hlbWEgPSBhZGRTY2hlbWE7XG5BanYucHJvdG90eXBlLmFkZE1ldGFTY2hlbWEgPSBhZGRNZXRhU2NoZW1hO1xuQWp2LnByb3RvdHlwZS52YWxpZGF0ZVNjaGVtYSA9IHZhbGlkYXRlU2NoZW1hO1xuQWp2LnByb3RvdHlwZS5nZXRTY2hlbWEgPSBnZXRTY2hlbWE7XG5BanYucHJvdG90eXBlLnJlbW92ZVNjaGVtYSA9IHJlbW92ZVNjaGVtYTtcbkFqdi5wcm90b3R5cGUuYWRkRm9ybWF0ID0gYWRkRm9ybWF0O1xuQWp2LnByb3RvdHlwZS5lcnJvcnNUZXh0ID0gZXJyb3JzVGV4dDtcblxuQWp2LnByb3RvdHlwZS5fYWRkU2NoZW1hID0gX2FkZFNjaGVtYTtcbkFqdi5wcm90b3R5cGUuX2NvbXBpbGUgPSBfY29tcGlsZTtcblxuQWp2LnByb3RvdHlwZS5jb21waWxlQXN5bmMgPSByZXF1aXJlKCcuL2NvbXBpbGUvYXN5bmMnKTtcbnZhciBjdXN0b21LZXl3b3JkID0gcmVxdWlyZSgnLi9rZXl3b3JkJyk7XG5BanYucHJvdG90eXBlLmFkZEtleXdvcmQgPSBjdXN0b21LZXl3b3JkLmFkZDtcbkFqdi5wcm90b3R5cGUuZ2V0S2V5d29yZCA9IGN1c3RvbUtleXdvcmQuZ2V0O1xuQWp2LnByb3RvdHlwZS5yZW1vdmVLZXl3b3JkID0gY3VzdG9tS2V5d29yZC5yZW1vdmU7XG5BanYucHJvdG90eXBlLnZhbGlkYXRlS2V5d29yZCA9IGN1c3RvbUtleXdvcmQudmFsaWRhdGU7XG5cbnZhciBlcnJvckNsYXNzZXMgPSByZXF1aXJlKCcuL2NvbXBpbGUvZXJyb3JfY2xhc3NlcycpO1xuQWp2LlZhbGlkYXRpb25FcnJvciA9IGVycm9yQ2xhc3Nlcy5WYWxpZGF0aW9uO1xuQWp2Lk1pc3NpbmdSZWZFcnJvciA9IGVycm9yQ2xhc3Nlcy5NaXNzaW5nUmVmO1xuQWp2LiRkYXRhTWV0YVNjaGVtYSA9ICRkYXRhTWV0YVNjaGVtYTtcblxudmFyIE1FVEFfU0NIRU1BX0lEID0gJ2h0dHA6Ly9qc29uLXNjaGVtYS5vcmcvZHJhZnQtMDcvc2NoZW1hJztcblxudmFyIE1FVEFfSUdOT1JFX09QVElPTlMgPSBbICdyZW1vdmVBZGRpdGlvbmFsJywgJ3VzZURlZmF1bHRzJywgJ2NvZXJjZVR5cGVzJywgJ3N0cmljdERlZmF1bHRzJyBdO1xudmFyIE1FVEFfU1VQUE9SVF9EQVRBID0gWycvcHJvcGVydGllcyddO1xuXG4vKipcbiAqIENyZWF0ZXMgdmFsaWRhdG9yIGluc3RhbmNlLlxuICogVXNhZ2U6IGBBanYob3B0cylgXG4gKiBAcGFyYW0ge09iamVjdH0gb3B0cyBvcHRpb25hbCBvcHRpb25zXG4gKiBAcmV0dXJuIHtPYmplY3R9IGFqdiBpbnN0YW5jZVxuICovXG5mdW5jdGlvbiBBanYob3B0cykge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgQWp2KSkgcmV0dXJuIG5ldyBBanYob3B0cyk7XG4gIG9wdHMgPSB0aGlzLl9vcHRzID0gdXRpbC5jb3B5KG9wdHMpIHx8IHt9O1xuICBzZXRMb2dnZXIodGhpcyk7XG4gIHRoaXMuX3NjaGVtYXMgPSB7fTtcbiAgdGhpcy5fcmVmcyA9IHt9O1xuICB0aGlzLl9mcmFnbWVudHMgPSB7fTtcbiAgdGhpcy5fZm9ybWF0cyA9IGZvcm1hdHMob3B0cy5mb3JtYXQpO1xuXG4gIHRoaXMuX2NhY2hlID0gb3B0cy5jYWNoZSB8fCBuZXcgQ2FjaGU7XG4gIHRoaXMuX2xvYWRpbmdTY2hlbWFzID0ge307XG4gIHRoaXMuX2NvbXBpbGF0aW9ucyA9IFtdO1xuICB0aGlzLlJVTEVTID0gcnVsZXMoKTtcbiAgdGhpcy5fZ2V0SWQgPSBjaG9vc2VHZXRJZChvcHRzKTtcblxuICBvcHRzLmxvb3BSZXF1aXJlZCA9IG9wdHMubG9vcFJlcXVpcmVkIHx8IEluZmluaXR5O1xuICBpZiAob3B0cy5lcnJvckRhdGFQYXRoID09ICdwcm9wZXJ0eScpIG9wdHMuX2Vycm9yRGF0YVBhdGhQcm9wZXJ0eSA9IHRydWU7XG4gIGlmIChvcHRzLnNlcmlhbGl6ZSA9PT0gdW5kZWZpbmVkKSBvcHRzLnNlcmlhbGl6ZSA9IHN0YWJsZVN0cmluZ2lmeTtcbiAgdGhpcy5fbWV0YU9wdHMgPSBnZXRNZXRhU2NoZW1hT3B0aW9ucyh0aGlzKTtcblxuICBpZiAob3B0cy5mb3JtYXRzKSBhZGRJbml0aWFsRm9ybWF0cyh0aGlzKTtcbiAgaWYgKG9wdHMua2V5d29yZHMpIGFkZEluaXRpYWxLZXl3b3Jkcyh0aGlzKTtcbiAgYWRkRGVmYXVsdE1ldGFTY2hlbWEodGhpcyk7XG4gIGlmICh0eXBlb2Ygb3B0cy5tZXRhID09ICdvYmplY3QnKSB0aGlzLmFkZE1ldGFTY2hlbWEob3B0cy5tZXRhKTtcbiAgaWYgKG9wdHMubnVsbGFibGUpIHRoaXMuYWRkS2V5d29yZCgnbnVsbGFibGUnLCB7bWV0YVNjaGVtYToge3R5cGU6ICdib29sZWFuJ319KTtcbiAgYWRkSW5pdGlhbFNjaGVtYXModGhpcyk7XG59XG5cblxuXG4vKipcbiAqIFZhbGlkYXRlIGRhdGEgdXNpbmcgc2NoZW1hXG4gKiBTY2hlbWEgd2lsbCBiZSBjb21waWxlZCBhbmQgY2FjaGVkICh1c2luZyBzZXJpYWxpemVkIEpTT04gYXMga2V5LiBbZmFzdC1qc29uLXN0YWJsZS1zdHJpbmdpZnldKGh0dHBzOi8vZ2l0aHViLmNvbS9lcG9iZXJlemtpbi9mYXN0LWpzb24tc3RhYmxlLXN0cmluZ2lmeSkgaXMgdXNlZCB0byBzZXJpYWxpemUuXG4gKiBAdGhpcyAgIEFqdlxuICogQHBhcmFtICB7U3RyaW5nfE9iamVjdH0gc2NoZW1hS2V5UmVmIGtleSwgcmVmIG9yIHNjaGVtYSBvYmplY3RcbiAqIEBwYXJhbSAge0FueX0gZGF0YSB0byBiZSB2YWxpZGF0ZWRcbiAqIEByZXR1cm4ge0Jvb2xlYW59IHZhbGlkYXRpb24gcmVzdWx0LiBFcnJvcnMgZnJvbSB0aGUgbGFzdCB2YWxpZGF0aW9uIHdpbGwgYmUgYXZhaWxhYmxlIGluIGBhanYuZXJyb3JzYCAoYW5kIGFsc28gaW4gY29tcGlsZWQgc2NoZW1hOiBgc2NoZW1hLmVycm9yc2ApLlxuICovXG5mdW5jdGlvbiB2YWxpZGF0ZShzY2hlbWFLZXlSZWYsIGRhdGEpIHtcbiAgdmFyIHY7XG4gIGlmICh0eXBlb2Ygc2NoZW1hS2V5UmVmID09ICdzdHJpbmcnKSB7XG4gICAgdiA9IHRoaXMuZ2V0U2NoZW1hKHNjaGVtYUtleVJlZik7XG4gICAgaWYgKCF2KSB0aHJvdyBuZXcgRXJyb3IoJ25vIHNjaGVtYSB3aXRoIGtleSBvciByZWYgXCInICsgc2NoZW1hS2V5UmVmICsgJ1wiJyk7XG4gIH0gZWxzZSB7XG4gICAgdmFyIHNjaGVtYU9iaiA9IHRoaXMuX2FkZFNjaGVtYShzY2hlbWFLZXlSZWYpO1xuICAgIHYgPSBzY2hlbWFPYmoudmFsaWRhdGUgfHwgdGhpcy5fY29tcGlsZShzY2hlbWFPYmopO1xuICB9XG5cbiAgdmFyIHZhbGlkID0gdihkYXRhKTtcbiAgaWYgKHYuJGFzeW5jICE9PSB0cnVlKSB0aGlzLmVycm9ycyA9IHYuZXJyb3JzO1xuICByZXR1cm4gdmFsaWQ7XG59XG5cblxuLyoqXG4gKiBDcmVhdGUgdmFsaWRhdGluZyBmdW5jdGlvbiBmb3IgcGFzc2VkIHNjaGVtYS5cbiAqIEB0aGlzICAgQWp2XG4gKiBAcGFyYW0gIHtPYmplY3R9IHNjaGVtYSBzY2hlbWEgb2JqZWN0XG4gKiBAcGFyYW0gIHtCb29sZWFufSBfbWV0YSB0cnVlIGlmIHNjaGVtYSBpcyBhIG1ldGEtc2NoZW1hLiBVc2VkIGludGVybmFsbHkgdG8gY29tcGlsZSBtZXRhIHNjaGVtYXMgb2YgY3VzdG9tIGtleXdvcmRzLlxuICogQHJldHVybiB7RnVuY3Rpb259IHZhbGlkYXRpbmcgZnVuY3Rpb25cbiAqL1xuZnVuY3Rpb24gY29tcGlsZShzY2hlbWEsIF9tZXRhKSB7XG4gIHZhciBzY2hlbWFPYmogPSB0aGlzLl9hZGRTY2hlbWEoc2NoZW1hLCB1bmRlZmluZWQsIF9tZXRhKTtcbiAgcmV0dXJuIHNjaGVtYU9iai52YWxpZGF0ZSB8fCB0aGlzLl9jb21waWxlKHNjaGVtYU9iaik7XG59XG5cblxuLyoqXG4gKiBBZGRzIHNjaGVtYSB0byB0aGUgaW5zdGFuY2UuXG4gKiBAdGhpcyAgIEFqdlxuICogQHBhcmFtIHtPYmplY3R8QXJyYXl9IHNjaGVtYSBzY2hlbWEgb3IgYXJyYXkgb2Ygc2NoZW1hcy4gSWYgYXJyYXkgaXMgcGFzc2VkLCBga2V5YCBhbmQgb3RoZXIgcGFyYW1ldGVycyB3aWxsIGJlIGlnbm9yZWQuXG4gKiBAcGFyYW0ge1N0cmluZ30ga2V5IE9wdGlvbmFsIHNjaGVtYSBrZXkuIENhbiBiZSBwYXNzZWQgdG8gYHZhbGlkYXRlYCBtZXRob2QgaW5zdGVhZCBvZiBzY2hlbWEgb2JqZWN0IG9yIGlkL3JlZi4gT25lIHNjaGVtYSBwZXIgaW5zdGFuY2UgY2FuIGhhdmUgZW1wdHkgYGlkYCBhbmQgYGtleWAuXG4gKiBAcGFyYW0ge0Jvb2xlYW59IF9za2lwVmFsaWRhdGlvbiB0cnVlIHRvIHNraXAgc2NoZW1hIHZhbGlkYXRpb24uIFVzZWQgaW50ZXJuYWxseSwgb3B0aW9uIHZhbGlkYXRlU2NoZW1hIHNob3VsZCBiZSB1c2VkIGluc3RlYWQuXG4gKiBAcGFyYW0ge0Jvb2xlYW59IF9tZXRhIHRydWUgaWYgc2NoZW1hIGlzIGEgbWV0YS1zY2hlbWEuIFVzZWQgaW50ZXJuYWxseSwgYWRkTWV0YVNjaGVtYSBzaG91bGQgYmUgdXNlZCBpbnN0ZWFkLlxuICogQHJldHVybiB7QWp2fSB0aGlzIGZvciBtZXRob2QgY2hhaW5pbmdcbiAqL1xuZnVuY3Rpb24gYWRkU2NoZW1hKHNjaGVtYSwga2V5LCBfc2tpcFZhbGlkYXRpb24sIF9tZXRhKSB7XG4gIGlmIChBcnJheS5pc0FycmF5KHNjaGVtYSkpe1xuICAgIGZvciAodmFyIGk9MDsgaTxzY2hlbWEubGVuZ3RoOyBpKyspIHRoaXMuYWRkU2NoZW1hKHNjaGVtYVtpXSwgdW5kZWZpbmVkLCBfc2tpcFZhbGlkYXRpb24sIF9tZXRhKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuICB2YXIgaWQgPSB0aGlzLl9nZXRJZChzY2hlbWEpO1xuICBpZiAoaWQgIT09IHVuZGVmaW5lZCAmJiB0eXBlb2YgaWQgIT0gJ3N0cmluZycpXG4gICAgdGhyb3cgbmV3IEVycm9yKCdzY2hlbWEgaWQgbXVzdCBiZSBzdHJpbmcnKTtcbiAga2V5ID0gcmVzb2x2ZS5ub3JtYWxpemVJZChrZXkgfHwgaWQpO1xuICBjaGVja1VuaXF1ZSh0aGlzLCBrZXkpO1xuICB0aGlzLl9zY2hlbWFzW2tleV0gPSB0aGlzLl9hZGRTY2hlbWEoc2NoZW1hLCBfc2tpcFZhbGlkYXRpb24sIF9tZXRhLCB0cnVlKTtcbiAgcmV0dXJuIHRoaXM7XG59XG5cblxuLyoqXG4gKiBBZGQgc2NoZW1hIHRoYXQgd2lsbCBiZSB1c2VkIHRvIHZhbGlkYXRlIG90aGVyIHNjaGVtYXNcbiAqIG9wdGlvbnMgaW4gTUVUQV9JR05PUkVfT1BUSU9OUyBhcmUgYWx3YXkgc2V0IHRvIGZhbHNlXG4gKiBAdGhpcyAgIEFqdlxuICogQHBhcmFtIHtPYmplY3R9IHNjaGVtYSBzY2hlbWEgb2JqZWN0XG4gKiBAcGFyYW0ge1N0cmluZ30ga2V5IG9wdGlvbmFsIHNjaGVtYSBrZXlcbiAqIEBwYXJhbSB7Qm9vbGVhbn0gc2tpcFZhbGlkYXRpb24gdHJ1ZSB0byBza2lwIHNjaGVtYSB2YWxpZGF0aW9uLCBjYW4gYmUgdXNlZCB0byBvdmVycmlkZSB2YWxpZGF0ZVNjaGVtYSBvcHRpb24gZm9yIG1ldGEtc2NoZW1hXG4gKiBAcmV0dXJuIHtBanZ9IHRoaXMgZm9yIG1ldGhvZCBjaGFpbmluZ1xuICovXG5mdW5jdGlvbiBhZGRNZXRhU2NoZW1hKHNjaGVtYSwga2V5LCBza2lwVmFsaWRhdGlvbikge1xuICB0aGlzLmFkZFNjaGVtYShzY2hlbWEsIGtleSwgc2tpcFZhbGlkYXRpb24sIHRydWUpO1xuICByZXR1cm4gdGhpcztcbn1cblxuXG4vKipcbiAqIFZhbGlkYXRlIHNjaGVtYVxuICogQHRoaXMgICBBanZcbiAqIEBwYXJhbSB7T2JqZWN0fSBzY2hlbWEgc2NoZW1hIHRvIHZhbGlkYXRlXG4gKiBAcGFyYW0ge0Jvb2xlYW59IHRocm93T3JMb2dFcnJvciBwYXNzIHRydWUgdG8gdGhyb3cgKG9yIGxvZykgYW4gZXJyb3IgaWYgaW52YWxpZFxuICogQHJldHVybiB7Qm9vbGVhbn0gdHJ1ZSBpZiBzY2hlbWEgaXMgdmFsaWRcbiAqL1xuZnVuY3Rpb24gdmFsaWRhdGVTY2hlbWEoc2NoZW1hLCB0aHJvd09yTG9nRXJyb3IpIHtcbiAgdmFyICRzY2hlbWEgPSBzY2hlbWEuJHNjaGVtYTtcbiAgaWYgKCRzY2hlbWEgIT09IHVuZGVmaW5lZCAmJiB0eXBlb2YgJHNjaGVtYSAhPSAnc3RyaW5nJylcbiAgICB0aHJvdyBuZXcgRXJyb3IoJyRzY2hlbWEgbXVzdCBiZSBhIHN0cmluZycpO1xuICAkc2NoZW1hID0gJHNjaGVtYSB8fCB0aGlzLl9vcHRzLmRlZmF1bHRNZXRhIHx8IGRlZmF1bHRNZXRhKHRoaXMpO1xuICBpZiAoISRzY2hlbWEpIHtcbiAgICB0aGlzLmxvZ2dlci53YXJuKCdtZXRhLXNjaGVtYSBub3QgYXZhaWxhYmxlJyk7XG4gICAgdGhpcy5lcnJvcnMgPSBudWxsO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIHZhciB2YWxpZCA9IHRoaXMudmFsaWRhdGUoJHNjaGVtYSwgc2NoZW1hKTtcbiAgaWYgKCF2YWxpZCAmJiB0aHJvd09yTG9nRXJyb3IpIHtcbiAgICB2YXIgbWVzc2FnZSA9ICdzY2hlbWEgaXMgaW52YWxpZDogJyArIHRoaXMuZXJyb3JzVGV4dCgpO1xuICAgIGlmICh0aGlzLl9vcHRzLnZhbGlkYXRlU2NoZW1hID09ICdsb2cnKSB0aGlzLmxvZ2dlci5lcnJvcihtZXNzYWdlKTtcbiAgICBlbHNlIHRocm93IG5ldyBFcnJvcihtZXNzYWdlKTtcbiAgfVxuICByZXR1cm4gdmFsaWQ7XG59XG5cblxuZnVuY3Rpb24gZGVmYXVsdE1ldGEoc2VsZikge1xuICB2YXIgbWV0YSA9IHNlbGYuX29wdHMubWV0YTtcbiAgc2VsZi5fb3B0cy5kZWZhdWx0TWV0YSA9IHR5cGVvZiBtZXRhID09ICdvYmplY3QnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBzZWxmLl9nZXRJZChtZXRhKSB8fCBtZXRhXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBzZWxmLmdldFNjaGVtYShNRVRBX1NDSEVNQV9JRClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gTUVUQV9TQ0hFTUFfSURcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogdW5kZWZpbmVkO1xuICByZXR1cm4gc2VsZi5fb3B0cy5kZWZhdWx0TWV0YTtcbn1cblxuXG4vKipcbiAqIEdldCBjb21waWxlZCBzY2hlbWEgZnJvbSB0aGUgaW5zdGFuY2UgYnkgYGtleWAgb3IgYHJlZmAuXG4gKiBAdGhpcyAgIEFqdlxuICogQHBhcmFtICB7U3RyaW5nfSBrZXlSZWYgYGtleWAgdGhhdCB3YXMgcGFzc2VkIHRvIGBhZGRTY2hlbWFgIG9yIGZ1bGwgc2NoZW1hIHJlZmVyZW5jZSAoYHNjaGVtYS5pZGAgb3IgcmVzb2x2ZWQgaWQpLlxuICogQHJldHVybiB7RnVuY3Rpb259IHNjaGVtYSB2YWxpZGF0aW5nIGZ1bmN0aW9uICh3aXRoIHByb3BlcnR5IGBzY2hlbWFgKS5cbiAqL1xuZnVuY3Rpb24gZ2V0U2NoZW1hKGtleVJlZikge1xuICB2YXIgc2NoZW1hT2JqID0gX2dldFNjaGVtYU9iaih0aGlzLCBrZXlSZWYpO1xuICBzd2l0Y2ggKHR5cGVvZiBzY2hlbWFPYmopIHtcbiAgICBjYXNlICdvYmplY3QnOiByZXR1cm4gc2NoZW1hT2JqLnZhbGlkYXRlIHx8IHRoaXMuX2NvbXBpbGUoc2NoZW1hT2JqKTtcbiAgICBjYXNlICdzdHJpbmcnOiByZXR1cm4gdGhpcy5nZXRTY2hlbWEoc2NoZW1hT2JqKTtcbiAgICBjYXNlICd1bmRlZmluZWQnOiByZXR1cm4gX2dldFNjaGVtYUZyYWdtZW50KHRoaXMsIGtleVJlZik7XG4gIH1cbn1cblxuXG5mdW5jdGlvbiBfZ2V0U2NoZW1hRnJhZ21lbnQoc2VsZiwgcmVmKSB7XG4gIHZhciByZXMgPSByZXNvbHZlLnNjaGVtYS5jYWxsKHNlbGYsIHsgc2NoZW1hOiB7fSB9LCByZWYpO1xuICBpZiAocmVzKSB7XG4gICAgdmFyIHNjaGVtYSA9IHJlcy5zY2hlbWFcbiAgICAgICwgcm9vdCA9IHJlcy5yb290XG4gICAgICAsIGJhc2VJZCA9IHJlcy5iYXNlSWQ7XG4gICAgdmFyIHYgPSBjb21waWxlU2NoZW1hLmNhbGwoc2VsZiwgc2NoZW1hLCByb290LCB1bmRlZmluZWQsIGJhc2VJZCk7XG4gICAgc2VsZi5fZnJhZ21lbnRzW3JlZl0gPSBuZXcgU2NoZW1hT2JqZWN0KHtcbiAgICAgIHJlZjogcmVmLFxuICAgICAgZnJhZ21lbnQ6IHRydWUsXG4gICAgICBzY2hlbWE6IHNjaGVtYSxcbiAgICAgIHJvb3Q6IHJvb3QsXG4gICAgICBiYXNlSWQ6IGJhc2VJZCxcbiAgICAgIHZhbGlkYXRlOiB2XG4gICAgfSk7XG4gICAgcmV0dXJuIHY7XG4gIH1cbn1cblxuXG5mdW5jdGlvbiBfZ2V0U2NoZW1hT2JqKHNlbGYsIGtleVJlZikge1xuICBrZXlSZWYgPSByZXNvbHZlLm5vcm1hbGl6ZUlkKGtleVJlZik7XG4gIHJldHVybiBzZWxmLl9zY2hlbWFzW2tleVJlZl0gfHwgc2VsZi5fcmVmc1trZXlSZWZdIHx8IHNlbGYuX2ZyYWdtZW50c1trZXlSZWZdO1xufVxuXG5cbi8qKlxuICogUmVtb3ZlIGNhY2hlZCBzY2hlbWEocykuXG4gKiBJZiBubyBwYXJhbWV0ZXIgaXMgcGFzc2VkIGFsbCBzY2hlbWFzIGJ1dCBtZXRhLXNjaGVtYXMgYXJlIHJlbW92ZWQuXG4gKiBJZiBSZWdFeHAgaXMgcGFzc2VkIGFsbCBzY2hlbWFzIHdpdGgga2V5L2lkIG1hdGNoaW5nIHBhdHRlcm4gYnV0IG1ldGEtc2NoZW1hcyBhcmUgcmVtb3ZlZC5cbiAqIEV2ZW4gaWYgc2NoZW1hIGlzIHJlZmVyZW5jZWQgYnkgb3RoZXIgc2NoZW1hcyBpdCBzdGlsbCBjYW4gYmUgcmVtb3ZlZCBhcyBvdGhlciBzY2hlbWFzIGhhdmUgbG9jYWwgcmVmZXJlbmNlcy5cbiAqIEB0aGlzICAgQWp2XG4gKiBAcGFyYW0gIHtTdHJpbmd8T2JqZWN0fFJlZ0V4cH0gc2NoZW1hS2V5UmVmIGtleSwgcmVmLCBwYXR0ZXJuIHRvIG1hdGNoIGtleS9yZWYgb3Igc2NoZW1hIG9iamVjdFxuICogQHJldHVybiB7QWp2fSB0aGlzIGZvciBtZXRob2QgY2hhaW5pbmdcbiAqL1xuZnVuY3Rpb24gcmVtb3ZlU2NoZW1hKHNjaGVtYUtleVJlZikge1xuICBpZiAoc2NoZW1hS2V5UmVmIGluc3RhbmNlb2YgUmVnRXhwKSB7XG4gICAgX3JlbW92ZUFsbFNjaGVtYXModGhpcywgdGhpcy5fc2NoZW1hcywgc2NoZW1hS2V5UmVmKTtcbiAgICBfcmVtb3ZlQWxsU2NoZW1hcyh0aGlzLCB0aGlzLl9yZWZzLCBzY2hlbWFLZXlSZWYpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG4gIHN3aXRjaCAodHlwZW9mIHNjaGVtYUtleVJlZikge1xuICAgIGNhc2UgJ3VuZGVmaW5lZCc6XG4gICAgICBfcmVtb3ZlQWxsU2NoZW1hcyh0aGlzLCB0aGlzLl9zY2hlbWFzKTtcbiAgICAgIF9yZW1vdmVBbGxTY2hlbWFzKHRoaXMsIHRoaXMuX3JlZnMpO1xuICAgICAgdGhpcy5fY2FjaGUuY2xlYXIoKTtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIGNhc2UgJ3N0cmluZyc6XG4gICAgICB2YXIgc2NoZW1hT2JqID0gX2dldFNjaGVtYU9iaih0aGlzLCBzY2hlbWFLZXlSZWYpO1xuICAgICAgaWYgKHNjaGVtYU9iaikgdGhpcy5fY2FjaGUuZGVsKHNjaGVtYU9iai5jYWNoZUtleSk7XG4gICAgICBkZWxldGUgdGhpcy5fc2NoZW1hc1tzY2hlbWFLZXlSZWZdO1xuICAgICAgZGVsZXRlIHRoaXMuX3JlZnNbc2NoZW1hS2V5UmVmXTtcbiAgICAgIHJldHVybiB0aGlzO1xuICAgIGNhc2UgJ29iamVjdCc6XG4gICAgICB2YXIgc2VyaWFsaXplID0gdGhpcy5fb3B0cy5zZXJpYWxpemU7XG4gICAgICB2YXIgY2FjaGVLZXkgPSBzZXJpYWxpemUgPyBzZXJpYWxpemUoc2NoZW1hS2V5UmVmKSA6IHNjaGVtYUtleVJlZjtcbiAgICAgIHRoaXMuX2NhY2hlLmRlbChjYWNoZUtleSk7XG4gICAgICB2YXIgaWQgPSB0aGlzLl9nZXRJZChzY2hlbWFLZXlSZWYpO1xuICAgICAgaWYgKGlkKSB7XG4gICAgICAgIGlkID0gcmVzb2x2ZS5ub3JtYWxpemVJZChpZCk7XG4gICAgICAgIGRlbGV0ZSB0aGlzLl9zY2hlbWFzW2lkXTtcbiAgICAgICAgZGVsZXRlIHRoaXMuX3JlZnNbaWRdO1xuICAgICAgfVxuICB9XG4gIHJldHVybiB0aGlzO1xufVxuXG5cbmZ1bmN0aW9uIF9yZW1vdmVBbGxTY2hlbWFzKHNlbGYsIHNjaGVtYXMsIHJlZ2V4KSB7XG4gIGZvciAodmFyIGtleVJlZiBpbiBzY2hlbWFzKSB7XG4gICAgdmFyIHNjaGVtYU9iaiA9IHNjaGVtYXNba2V5UmVmXTtcbiAgICBpZiAoIXNjaGVtYU9iai5tZXRhICYmICghcmVnZXggfHwgcmVnZXgudGVzdChrZXlSZWYpKSkge1xuICAgICAgc2VsZi5fY2FjaGUuZGVsKHNjaGVtYU9iai5jYWNoZUtleSk7XG4gICAgICBkZWxldGUgc2NoZW1hc1trZXlSZWZdO1xuICAgIH1cbiAgfVxufVxuXG5cbi8qIEB0aGlzICAgQWp2ICovXG5mdW5jdGlvbiBfYWRkU2NoZW1hKHNjaGVtYSwgc2tpcFZhbGlkYXRpb24sIG1ldGEsIHNob3VsZEFkZFNjaGVtYSkge1xuICBpZiAodHlwZW9mIHNjaGVtYSAhPSAnb2JqZWN0JyAmJiB0eXBlb2Ygc2NoZW1hICE9ICdib29sZWFuJylcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3NjaGVtYSBzaG91bGQgYmUgb2JqZWN0IG9yIGJvb2xlYW4nKTtcbiAgdmFyIHNlcmlhbGl6ZSA9IHRoaXMuX29wdHMuc2VyaWFsaXplO1xuICB2YXIgY2FjaGVLZXkgPSBzZXJpYWxpemUgPyBzZXJpYWxpemUoc2NoZW1hKSA6IHNjaGVtYTtcbiAgdmFyIGNhY2hlZCA9IHRoaXMuX2NhY2hlLmdldChjYWNoZUtleSk7XG4gIGlmIChjYWNoZWQpIHJldHVybiBjYWNoZWQ7XG5cbiAgc2hvdWxkQWRkU2NoZW1hID0gc2hvdWxkQWRkU2NoZW1hIHx8IHRoaXMuX29wdHMuYWRkVXNlZFNjaGVtYSAhPT0gZmFsc2U7XG5cbiAgdmFyIGlkID0gcmVzb2x2ZS5ub3JtYWxpemVJZCh0aGlzLl9nZXRJZChzY2hlbWEpKTtcbiAgaWYgKGlkICYmIHNob3VsZEFkZFNjaGVtYSkgY2hlY2tVbmlxdWUodGhpcywgaWQpO1xuXG4gIHZhciB3aWxsVmFsaWRhdGUgPSB0aGlzLl9vcHRzLnZhbGlkYXRlU2NoZW1hICE9PSBmYWxzZSAmJiAhc2tpcFZhbGlkYXRpb247XG4gIHZhciByZWN1cnNpdmVNZXRhO1xuICBpZiAod2lsbFZhbGlkYXRlICYmICEocmVjdXJzaXZlTWV0YSA9IGlkICYmIGlkID09IHJlc29sdmUubm9ybWFsaXplSWQoc2NoZW1hLiRzY2hlbWEpKSlcbiAgICB0aGlzLnZhbGlkYXRlU2NoZW1hKHNjaGVtYSwgdHJ1ZSk7XG5cbiAgdmFyIGxvY2FsUmVmcyA9IHJlc29sdmUuaWRzLmNhbGwodGhpcywgc2NoZW1hKTtcblxuICB2YXIgc2NoZW1hT2JqID0gbmV3IFNjaGVtYU9iamVjdCh7XG4gICAgaWQ6IGlkLFxuICAgIHNjaGVtYTogc2NoZW1hLFxuICAgIGxvY2FsUmVmczogbG9jYWxSZWZzLFxuICAgIGNhY2hlS2V5OiBjYWNoZUtleSxcbiAgICBtZXRhOiBtZXRhXG4gIH0pO1xuXG4gIGlmIChpZFswXSAhPSAnIycgJiYgc2hvdWxkQWRkU2NoZW1hKSB0aGlzLl9yZWZzW2lkXSA9IHNjaGVtYU9iajtcbiAgdGhpcy5fY2FjaGUucHV0KGNhY2hlS2V5LCBzY2hlbWFPYmopO1xuXG4gIGlmICh3aWxsVmFsaWRhdGUgJiYgcmVjdXJzaXZlTWV0YSkgdGhpcy52YWxpZGF0ZVNjaGVtYShzY2hlbWEsIHRydWUpO1xuXG4gIHJldHVybiBzY2hlbWFPYmo7XG59XG5cblxuLyogQHRoaXMgICBBanYgKi9cbmZ1bmN0aW9uIF9jb21waWxlKHNjaGVtYU9iaiwgcm9vdCkge1xuICBpZiAoc2NoZW1hT2JqLmNvbXBpbGluZykge1xuICAgIHNjaGVtYU9iai52YWxpZGF0ZSA9IGNhbGxWYWxpZGF0ZTtcbiAgICBjYWxsVmFsaWRhdGUuc2NoZW1hID0gc2NoZW1hT2JqLnNjaGVtYTtcbiAgICBjYWxsVmFsaWRhdGUuZXJyb3JzID0gbnVsbDtcbiAgICBjYWxsVmFsaWRhdGUucm9vdCA9IHJvb3QgPyByb290IDogY2FsbFZhbGlkYXRlO1xuICAgIGlmIChzY2hlbWFPYmouc2NoZW1hLiRhc3luYyA9PT0gdHJ1ZSlcbiAgICAgIGNhbGxWYWxpZGF0ZS4kYXN5bmMgPSB0cnVlO1xuICAgIHJldHVybiBjYWxsVmFsaWRhdGU7XG4gIH1cbiAgc2NoZW1hT2JqLmNvbXBpbGluZyA9IHRydWU7XG5cbiAgdmFyIGN1cnJlbnRPcHRzO1xuICBpZiAoc2NoZW1hT2JqLm1ldGEpIHtcbiAgICBjdXJyZW50T3B0cyA9IHRoaXMuX29wdHM7XG4gICAgdGhpcy5fb3B0cyA9IHRoaXMuX21ldGFPcHRzO1xuICB9XG5cbiAgdmFyIHY7XG4gIHRyeSB7IHYgPSBjb21waWxlU2NoZW1hLmNhbGwodGhpcywgc2NoZW1hT2JqLnNjaGVtYSwgcm9vdCwgc2NoZW1hT2JqLmxvY2FsUmVmcyk7IH1cbiAgY2F0Y2goZSkge1xuICAgIGRlbGV0ZSBzY2hlbWFPYmoudmFsaWRhdGU7XG4gICAgdGhyb3cgZTtcbiAgfVxuICBmaW5hbGx5IHtcbiAgICBzY2hlbWFPYmouY29tcGlsaW5nID0gZmFsc2U7XG4gICAgaWYgKHNjaGVtYU9iai5tZXRhKSB0aGlzLl9vcHRzID0gY3VycmVudE9wdHM7XG4gIH1cblxuICBzY2hlbWFPYmoudmFsaWRhdGUgPSB2O1xuICBzY2hlbWFPYmoucmVmcyA9IHYucmVmcztcbiAgc2NoZW1hT2JqLnJlZlZhbCA9IHYucmVmVmFsO1xuICBzY2hlbWFPYmoucm9vdCA9IHYucm9vdDtcbiAgcmV0dXJuIHY7XG5cblxuICAvKiBAdGhpcyAgIHsqfSAtIGN1c3RvbSBjb250ZXh0LCBzZWUgcGFzc0NvbnRleHQgb3B0aW9uICovXG4gIGZ1bmN0aW9uIGNhbGxWYWxpZGF0ZSgpIHtcbiAgICAvKiBqc2hpbnQgdmFsaWR0aGlzOiB0cnVlICovXG4gICAgdmFyIF92YWxpZGF0ZSA9IHNjaGVtYU9iai52YWxpZGF0ZTtcbiAgICB2YXIgcmVzdWx0ID0gX3ZhbGlkYXRlLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgY2FsbFZhbGlkYXRlLmVycm9ycyA9IF92YWxpZGF0ZS5lcnJvcnM7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxufVxuXG5cbmZ1bmN0aW9uIGNob29zZUdldElkKG9wdHMpIHtcbiAgc3dpdGNoIChvcHRzLnNjaGVtYUlkKSB7XG4gICAgY2FzZSAnYXV0byc6IHJldHVybiBfZ2V0JElkT3JJZDtcbiAgICBjYXNlICdpZCc6IHJldHVybiBfZ2V0SWQ7XG4gICAgZGVmYXVsdDogcmV0dXJuIF9nZXQkSWQ7XG4gIH1cbn1cblxuLyogQHRoaXMgICBBanYgKi9cbmZ1bmN0aW9uIF9nZXRJZChzY2hlbWEpIHtcbiAgaWYgKHNjaGVtYS4kaWQpIHRoaXMubG9nZ2VyLndhcm4oJ3NjaGVtYSAkaWQgaWdub3JlZCcsIHNjaGVtYS4kaWQpO1xuICByZXR1cm4gc2NoZW1hLmlkO1xufVxuXG4vKiBAdGhpcyAgIEFqdiAqL1xuZnVuY3Rpb24gX2dldCRJZChzY2hlbWEpIHtcbiAgaWYgKHNjaGVtYS5pZCkgdGhpcy5sb2dnZXIud2Fybignc2NoZW1hIGlkIGlnbm9yZWQnLCBzY2hlbWEuaWQpO1xuICByZXR1cm4gc2NoZW1hLiRpZDtcbn1cblxuXG5mdW5jdGlvbiBfZ2V0JElkT3JJZChzY2hlbWEpIHtcbiAgaWYgKHNjaGVtYS4kaWQgJiYgc2NoZW1hLmlkICYmIHNjaGVtYS4kaWQgIT0gc2NoZW1hLmlkKVxuICAgIHRocm93IG5ldyBFcnJvcignc2NoZW1hICRpZCBpcyBkaWZmZXJlbnQgZnJvbSBpZCcpO1xuICByZXR1cm4gc2NoZW1hLiRpZCB8fCBzY2hlbWEuaWQ7XG59XG5cblxuLyoqXG4gKiBDb252ZXJ0IGFycmF5IG9mIGVycm9yIG1lc3NhZ2Ugb2JqZWN0cyB0byBzdHJpbmdcbiAqIEB0aGlzICAgQWp2XG4gKiBAcGFyYW0gIHtBcnJheTxPYmplY3Q+fSBlcnJvcnMgb3B0aW9uYWwgYXJyYXkgb2YgdmFsaWRhdGlvbiBlcnJvcnMsIGlmIG5vdCBwYXNzZWQgZXJyb3JzIGZyb20gdGhlIGluc3RhbmNlIGFyZSB1c2VkLlxuICogQHBhcmFtICB7T2JqZWN0fSBvcHRpb25zIG9wdGlvbmFsIG9wdGlvbnMgd2l0aCBwcm9wZXJ0aWVzIGBzZXBhcmF0b3JgIGFuZCBgZGF0YVZhcmAuXG4gKiBAcmV0dXJuIHtTdHJpbmd9IGh1bWFuIHJlYWRhYmxlIHN0cmluZyB3aXRoIGFsbCBlcnJvcnMgZGVzY3JpcHRpb25zXG4gKi9cbmZ1bmN0aW9uIGVycm9yc1RleHQoZXJyb3JzLCBvcHRpb25zKSB7XG4gIGVycm9ycyA9IGVycm9ycyB8fCB0aGlzLmVycm9ycztcbiAgaWYgKCFlcnJvcnMpIHJldHVybiAnTm8gZXJyb3JzJztcbiAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gIHZhciBzZXBhcmF0b3IgPSBvcHRpb25zLnNlcGFyYXRvciA9PT0gdW5kZWZpbmVkID8gJywgJyA6IG9wdGlvbnMuc2VwYXJhdG9yO1xuICB2YXIgZGF0YVZhciA9IG9wdGlvbnMuZGF0YVZhciA9PT0gdW5kZWZpbmVkID8gJ2RhdGEnIDogb3B0aW9ucy5kYXRhVmFyO1xuXG4gIHZhciB0ZXh0ID0gJyc7XG4gIGZvciAodmFyIGk9MDsgaTxlcnJvcnMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgZSA9IGVycm9yc1tpXTtcbiAgICBpZiAoZSkgdGV4dCArPSBkYXRhVmFyICsgZS5kYXRhUGF0aCArICcgJyArIGUubWVzc2FnZSArIHNlcGFyYXRvcjtcbiAgfVxuICByZXR1cm4gdGV4dC5zbGljZSgwLCAtc2VwYXJhdG9yLmxlbmd0aCk7XG59XG5cblxuLyoqXG4gKiBBZGQgY3VzdG9tIGZvcm1hdFxuICogQHRoaXMgICBBanZcbiAqIEBwYXJhbSB7U3RyaW5nfSBuYW1lIGZvcm1hdCBuYW1lXG4gKiBAcGFyYW0ge1N0cmluZ3xSZWdFeHB8RnVuY3Rpb259IGZvcm1hdCBzdHJpbmcgaXMgY29udmVydGVkIHRvIFJlZ0V4cDsgZnVuY3Rpb24gc2hvdWxkIHJldHVybiBib29sZWFuICh0cnVlIHdoZW4gdmFsaWQpXG4gKiBAcmV0dXJuIHtBanZ9IHRoaXMgZm9yIG1ldGhvZCBjaGFpbmluZ1xuICovXG5mdW5jdGlvbiBhZGRGb3JtYXQobmFtZSwgZm9ybWF0KSB7XG4gIGlmICh0eXBlb2YgZm9ybWF0ID09ICdzdHJpbmcnKSBmb3JtYXQgPSBuZXcgUmVnRXhwKGZvcm1hdCk7XG4gIHRoaXMuX2Zvcm1hdHNbbmFtZV0gPSBmb3JtYXQ7XG4gIHJldHVybiB0aGlzO1xufVxuXG5cbmZ1bmN0aW9uIGFkZERlZmF1bHRNZXRhU2NoZW1hKHNlbGYpIHtcbiAgdmFyICRkYXRhU2NoZW1hO1xuICBpZiAoc2VsZi5fb3B0cy4kZGF0YSkge1xuICAgICRkYXRhU2NoZW1hID0gcmVxdWlyZSgnLi9yZWZzL2RhdGEuanNvbicpO1xuICAgIHNlbGYuYWRkTWV0YVNjaGVtYSgkZGF0YVNjaGVtYSwgJGRhdGFTY2hlbWEuJGlkLCB0cnVlKTtcbiAgfVxuICBpZiAoc2VsZi5fb3B0cy5tZXRhID09PSBmYWxzZSkgcmV0dXJuO1xuICB2YXIgbWV0YVNjaGVtYSA9IHJlcXVpcmUoJy4vcmVmcy9qc29uLXNjaGVtYS1kcmFmdC0wNy5qc29uJyk7XG4gIGlmIChzZWxmLl9vcHRzLiRkYXRhKSBtZXRhU2NoZW1hID0gJGRhdGFNZXRhU2NoZW1hKG1ldGFTY2hlbWEsIE1FVEFfU1VQUE9SVF9EQVRBKTtcbiAgc2VsZi5hZGRNZXRhU2NoZW1hKG1ldGFTY2hlbWEsIE1FVEFfU0NIRU1BX0lELCB0cnVlKTtcbiAgc2VsZi5fcmVmc1snaHR0cDovL2pzb24tc2NoZW1hLm9yZy9zY2hlbWEnXSA9IE1FVEFfU0NIRU1BX0lEO1xufVxuXG5cbmZ1bmN0aW9uIGFkZEluaXRpYWxTY2hlbWFzKHNlbGYpIHtcbiAgdmFyIG9wdHNTY2hlbWFzID0gc2VsZi5fb3B0cy5zY2hlbWFzO1xuICBpZiAoIW9wdHNTY2hlbWFzKSByZXR1cm47XG4gIGlmIChBcnJheS5pc0FycmF5KG9wdHNTY2hlbWFzKSkgc2VsZi5hZGRTY2hlbWEob3B0c1NjaGVtYXMpO1xuICBlbHNlIGZvciAodmFyIGtleSBpbiBvcHRzU2NoZW1hcykgc2VsZi5hZGRTY2hlbWEob3B0c1NjaGVtYXNba2V5XSwga2V5KTtcbn1cblxuXG5mdW5jdGlvbiBhZGRJbml0aWFsRm9ybWF0cyhzZWxmKSB7XG4gIGZvciAodmFyIG5hbWUgaW4gc2VsZi5fb3B0cy5mb3JtYXRzKSB7XG4gICAgdmFyIGZvcm1hdCA9IHNlbGYuX29wdHMuZm9ybWF0c1tuYW1lXTtcbiAgICBzZWxmLmFkZEZvcm1hdChuYW1lLCBmb3JtYXQpO1xuICB9XG59XG5cblxuZnVuY3Rpb24gYWRkSW5pdGlhbEtleXdvcmRzKHNlbGYpIHtcbiAgZm9yICh2YXIgbmFtZSBpbiBzZWxmLl9vcHRzLmtleXdvcmRzKSB7XG4gICAgdmFyIGtleXdvcmQgPSBzZWxmLl9vcHRzLmtleXdvcmRzW25hbWVdO1xuICAgIHNlbGYuYWRkS2V5d29yZChuYW1lLCBrZXl3b3JkKTtcbiAgfVxufVxuXG5cbmZ1bmN0aW9uIGNoZWNrVW5pcXVlKHNlbGYsIGlkKSB7XG4gIGlmIChzZWxmLl9zY2hlbWFzW2lkXSB8fCBzZWxmLl9yZWZzW2lkXSlcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3NjaGVtYSB3aXRoIGtleSBvciBpZCBcIicgKyBpZCArICdcIiBhbHJlYWR5IGV4aXN0cycpO1xufVxuXG5cbmZ1bmN0aW9uIGdldE1ldGFTY2hlbWFPcHRpb25zKHNlbGYpIHtcbiAgdmFyIG1ldGFPcHRzID0gdXRpbC5jb3B5KHNlbGYuX29wdHMpO1xuICBmb3IgKHZhciBpPTA7IGk8TUVUQV9JR05PUkVfT1BUSU9OUy5sZW5ndGg7IGkrKylcbiAgICBkZWxldGUgbWV0YU9wdHNbTUVUQV9JR05PUkVfT1BUSU9OU1tpXV07XG4gIHJldHVybiBtZXRhT3B0cztcbn1cblxuXG5mdW5jdGlvbiBzZXRMb2dnZXIoc2VsZikge1xuICB2YXIgbG9nZ2VyID0gc2VsZi5fb3B0cy5sb2dnZXI7XG4gIGlmIChsb2dnZXIgPT09IGZhbHNlKSB7XG4gICAgc2VsZi5sb2dnZXIgPSB7bG9nOiBub29wLCB3YXJuOiBub29wLCBlcnJvcjogbm9vcH07XG4gIH0gZWxzZSB7XG4gICAgaWYgKGxvZ2dlciA9PT0gdW5kZWZpbmVkKSBsb2dnZXIgPSBjb25zb2xlO1xuICAgIGlmICghKHR5cGVvZiBsb2dnZXIgPT0gJ29iamVjdCcgJiYgbG9nZ2VyLmxvZyAmJiBsb2dnZXIud2FybiAmJiBsb2dnZXIuZXJyb3IpKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdsb2dnZXIgbXVzdCBpbXBsZW1lbnQgbG9nLCB3YXJuIGFuZCBlcnJvciBtZXRob2RzJyk7XG4gICAgc2VsZi5sb2dnZXIgPSBsb2dnZXI7XG4gIH1cbn1cblxuXG5mdW5jdGlvbiBub29wKCkge31cbiIsIG51bGwsICIndXNlIHN0cmljdCc7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGJpbmQoZm4sIHRoaXNBcmcpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIHdyYXAoKSB7XG4gICAgcmV0dXJuIGZuLmFwcGx5KHRoaXNBcmcsIGFyZ3VtZW50cyk7XG4gIH07XG59XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgYmluZCBmcm9tICcuL2hlbHBlcnMvYmluZC5qcyc7XG5cbi8vIHV0aWxzIGlzIGEgbGlicmFyeSBvZiBnZW5lcmljIGhlbHBlciBmdW5jdGlvbnMgbm9uLXNwZWNpZmljIHRvIGF4aW9zXG5cbmNvbnN0IHt0b1N0cmluZ30gPSBPYmplY3QucHJvdG90eXBlO1xuY29uc3Qge2dldFByb3RvdHlwZU9mfSA9IE9iamVjdDtcblxuY29uc3Qga2luZE9mID0gKGNhY2hlID0+IHRoaW5nID0+IHtcbiAgICBjb25zdCBzdHIgPSB0b1N0cmluZy5jYWxsKHRoaW5nKTtcbiAgICByZXR1cm4gY2FjaGVbc3RyXSB8fCAoY2FjaGVbc3RyXSA9IHN0ci5zbGljZSg4LCAtMSkudG9Mb3dlckNhc2UoKSk7XG59KShPYmplY3QuY3JlYXRlKG51bGwpKTtcblxuY29uc3Qga2luZE9mVGVzdCA9ICh0eXBlKSA9PiB7XG4gIHR5cGUgPSB0eXBlLnRvTG93ZXJDYXNlKCk7XG4gIHJldHVybiAodGhpbmcpID0+IGtpbmRPZih0aGluZykgPT09IHR5cGVcbn1cblxuY29uc3QgdHlwZU9mVGVzdCA9IHR5cGUgPT4gdGhpbmcgPT4gdHlwZW9mIHRoaW5nID09PSB0eXBlO1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGFuIEFycmF5XG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGFuIEFycmF5LCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3Qge2lzQXJyYXl9ID0gQXJyYXk7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgdW5kZWZpbmVkXG4gKlxuICogQHBhcmFtIHsqfSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB0aGUgdmFsdWUgaXMgdW5kZWZpbmVkLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3QgaXNVbmRlZmluZWQgPSB0eXBlT2ZUZXN0KCd1bmRlZmluZWQnKTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIEJ1ZmZlclxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBCdWZmZXIsIG90aGVyd2lzZSBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0J1ZmZlcih2YWwpIHtcbiAgcmV0dXJuIHZhbCAhPT0gbnVsbCAmJiAhaXNVbmRlZmluZWQodmFsKSAmJiB2YWwuY29uc3RydWN0b3IgIT09IG51bGwgJiYgIWlzVW5kZWZpbmVkKHZhbC5jb25zdHJ1Y3RvcilcbiAgICAmJiBpc0Z1bmN0aW9uKHZhbC5jb25zdHJ1Y3Rvci5pc0J1ZmZlcikgJiYgdmFsLmNvbnN0cnVjdG9yLmlzQnVmZmVyKHZhbCk7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYW4gQXJyYXlCdWZmZXJcbiAqXG4gKiBAcGFyYW0geyp9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGFuIEFycmF5QnVmZmVyLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3QgaXNBcnJheUJ1ZmZlciA9IGtpbmRPZlRlc3QoJ0FycmF5QnVmZmVyJyk7XG5cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIHZpZXcgb24gYW4gQXJyYXlCdWZmZXJcbiAqXG4gKiBAcGFyYW0geyp9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgdmlldyBvbiBhbiBBcnJheUJ1ZmZlciwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzQXJyYXlCdWZmZXJWaWV3KHZhbCkge1xuICBsZXQgcmVzdWx0O1xuICBpZiAoKHR5cGVvZiBBcnJheUJ1ZmZlciAhPT0gJ3VuZGVmaW5lZCcpICYmIChBcnJheUJ1ZmZlci5pc1ZpZXcpKSB7XG4gICAgcmVzdWx0ID0gQXJyYXlCdWZmZXIuaXNWaWV3KHZhbCk7XG4gIH0gZWxzZSB7XG4gICAgcmVzdWx0ID0gKHZhbCkgJiYgKHZhbC5idWZmZXIpICYmIChpc0FycmF5QnVmZmVyKHZhbC5idWZmZXIpKTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgU3RyaW5nXG4gKlxuICogQHBhcmFtIHsqfSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIFN0cmluZywgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IGlzU3RyaW5nID0gdHlwZU9mVGVzdCgnc3RyaW5nJyk7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBGdW5jdGlvblxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIEZ1bmN0aW9uLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3QgaXNGdW5jdGlvbiA9IHR5cGVPZlRlc3QoJ2Z1bmN0aW9uJyk7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBOdW1iZXJcbiAqXG4gKiBAcGFyYW0geyp9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgTnVtYmVyLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3QgaXNOdW1iZXIgPSB0eXBlT2ZUZXN0KCdudW1iZXInKTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhbiBPYmplY3RcbiAqXG4gKiBAcGFyYW0geyp9IHRoaW5nIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYW4gT2JqZWN0LCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3QgaXNPYmplY3QgPSAodGhpbmcpID0+IHRoaW5nICE9PSBudWxsICYmIHR5cGVvZiB0aGluZyA9PT0gJ29iamVjdCc7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBCb29sZWFuXG4gKlxuICogQHBhcmFtIHsqfSB0aGluZyBUaGUgdmFsdWUgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBCb29sZWFuLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3QgaXNCb29sZWFuID0gdGhpbmcgPT4gdGhpbmcgPT09IHRydWUgfHwgdGhpbmcgPT09IGZhbHNlO1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgcGxhaW4gT2JqZWN0XG4gKlxuICogQHBhcmFtIHsqfSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIHBsYWluIE9iamVjdCwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IGlzUGxhaW5PYmplY3QgPSAodmFsKSA9PiB7XG4gIGlmIChraW5kT2YodmFsKSAhPT0gJ29iamVjdCcpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBjb25zdCBwcm90b3R5cGUgPSBnZXRQcm90b3R5cGVPZih2YWwpO1xuICByZXR1cm4gKHByb3RvdHlwZSA9PT0gbnVsbCB8fCBwcm90b3R5cGUgPT09IE9iamVjdC5wcm90b3R5cGUgfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKHByb3RvdHlwZSkgPT09IG51bGwpICYmICEoU3ltYm9sLnRvU3RyaW5nVGFnIGluIHZhbCkgJiYgIShTeW1ib2wuaXRlcmF0b3IgaW4gdmFsKTtcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIERhdGVcbiAqXG4gKiBAcGFyYW0geyp9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgRGF0ZSwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IGlzRGF0ZSA9IGtpbmRPZlRlc3QoJ0RhdGUnKTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIEZpbGVcbiAqXG4gKiBAcGFyYW0geyp9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgRmlsZSwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IGlzRmlsZSA9IGtpbmRPZlRlc3QoJ0ZpbGUnKTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIEJsb2JcbiAqXG4gKiBAcGFyYW0geyp9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgQmxvYiwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IGlzQmxvYiA9IGtpbmRPZlRlc3QoJ0Jsb2InKTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIEZpbGVMaXN0XG4gKlxuICogQHBhcmFtIHsqfSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIEZpbGUsIG90aGVyd2lzZSBmYWxzZVxuICovXG5jb25zdCBpc0ZpbGVMaXN0ID0ga2luZE9mVGVzdCgnRmlsZUxpc3QnKTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIFN0cmVhbVxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBTdHJlYW0sIG90aGVyd2lzZSBmYWxzZVxuICovXG5jb25zdCBpc1N0cmVhbSA9ICh2YWwpID0+IGlzT2JqZWN0KHZhbCkgJiYgaXNGdW5jdGlvbih2YWwucGlwZSk7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBGb3JtRGF0YVxuICpcbiAqIEBwYXJhbSB7Kn0gdGhpbmcgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhbiBGb3JtRGF0YSwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmNvbnN0IGlzRm9ybURhdGEgPSAodGhpbmcpID0+IHtcbiAgbGV0IGtpbmQ7XG4gIHJldHVybiB0aGluZyAmJiAoXG4gICAgKHR5cGVvZiBGb3JtRGF0YSA9PT0gJ2Z1bmN0aW9uJyAmJiB0aGluZyBpbnN0YW5jZW9mIEZvcm1EYXRhKSB8fCAoXG4gICAgICBpc0Z1bmN0aW9uKHRoaW5nLmFwcGVuZCkgJiYgKFxuICAgICAgICAoa2luZCA9IGtpbmRPZih0aGluZykpID09PSAnZm9ybWRhdGEnIHx8XG4gICAgICAgIC8vIGRldGVjdCBmb3JtLWRhdGEgaW5zdGFuY2VcbiAgICAgICAgKGtpbmQgPT09ICdvYmplY3QnICYmIGlzRnVuY3Rpb24odGhpbmcudG9TdHJpbmcpICYmIHRoaW5nLnRvU3RyaW5nKCkgPT09ICdbb2JqZWN0IEZvcm1EYXRhXScpXG4gICAgICApXG4gICAgKVxuICApXG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBVUkxTZWFyY2hQYXJhbXMgb2JqZWN0XG4gKlxuICogQHBhcmFtIHsqfSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIFVSTFNlYXJjaFBhcmFtcyBvYmplY3QsIG90aGVyd2lzZSBmYWxzZVxuICovXG5jb25zdCBpc1VSTFNlYXJjaFBhcmFtcyA9IGtpbmRPZlRlc3QoJ1VSTFNlYXJjaFBhcmFtcycpO1xuXG5jb25zdCBbaXNSZWFkYWJsZVN0cmVhbSwgaXNSZXF1ZXN0LCBpc1Jlc3BvbnNlLCBpc0hlYWRlcnNdID0gWydSZWFkYWJsZVN0cmVhbScsICdSZXF1ZXN0JywgJ1Jlc3BvbnNlJywgJ0hlYWRlcnMnXS5tYXAoa2luZE9mVGVzdCk7XG5cbi8qKlxuICogVHJpbSBleGNlc3Mgd2hpdGVzcGFjZSBvZmYgdGhlIGJlZ2lubmluZyBhbmQgZW5kIG9mIGEgc3RyaW5nXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IHN0ciBUaGUgU3RyaW5nIHRvIHRyaW1cbiAqXG4gKiBAcmV0dXJucyB7U3RyaW5nfSBUaGUgU3RyaW5nIGZyZWVkIG9mIGV4Y2VzcyB3aGl0ZXNwYWNlXG4gKi9cbmNvbnN0IHRyaW0gPSAoc3RyKSA9PiBzdHIudHJpbSA/XG4gIHN0ci50cmltKCkgOiBzdHIucmVwbGFjZSgvXltcXHNcXHVGRUZGXFx4QTBdK3xbXFxzXFx1RkVGRlxceEEwXSskL2csICcnKTtcblxuLyoqXG4gKiBJdGVyYXRlIG92ZXIgYW4gQXJyYXkgb3IgYW4gT2JqZWN0IGludm9raW5nIGEgZnVuY3Rpb24gZm9yIGVhY2ggaXRlbS5cbiAqXG4gKiBJZiBgb2JqYCBpcyBhbiBBcnJheSBjYWxsYmFjayB3aWxsIGJlIGNhbGxlZCBwYXNzaW5nXG4gKiB0aGUgdmFsdWUsIGluZGV4LCBhbmQgY29tcGxldGUgYXJyYXkgZm9yIGVhY2ggaXRlbS5cbiAqXG4gKiBJZiAnb2JqJyBpcyBhbiBPYmplY3QgY2FsbGJhY2sgd2lsbCBiZSBjYWxsZWQgcGFzc2luZ1xuICogdGhlIHZhbHVlLCBrZXksIGFuZCBjb21wbGV0ZSBvYmplY3QgZm9yIGVhY2ggcHJvcGVydHkuXG4gKlxuICogQHBhcmFtIHtPYmplY3R8QXJyYXl9IG9iaiBUaGUgb2JqZWN0IHRvIGl0ZXJhdGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIFRoZSBjYWxsYmFjayB0byBpbnZva2UgZm9yIGVhY2ggaXRlbVxuICpcbiAqIEBwYXJhbSB7Qm9vbGVhbn0gW2FsbE93bktleXMgPSBmYWxzZV1cbiAqIEByZXR1cm5zIHthbnl9XG4gKi9cbmZ1bmN0aW9uIGZvckVhY2gob2JqLCBmbiwge2FsbE93bktleXMgPSBmYWxzZX0gPSB7fSkge1xuICAvLyBEb24ndCBib3RoZXIgaWYgbm8gdmFsdWUgcHJvdmlkZWRcbiAgaWYgKG9iaiA9PT0gbnVsbCB8fCB0eXBlb2Ygb2JqID09PSAndW5kZWZpbmVkJykge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGxldCBpO1xuICBsZXQgbDtcblxuICAvLyBGb3JjZSBhbiBhcnJheSBpZiBub3QgYWxyZWFkeSBzb21ldGhpbmcgaXRlcmFibGVcbiAgaWYgKHR5cGVvZiBvYmogIT09ICdvYmplY3QnKSB7XG4gICAgLyplc2xpbnQgbm8tcGFyYW0tcmVhc3NpZ246MCovXG4gICAgb2JqID0gW29ial07XG4gIH1cblxuICBpZiAoaXNBcnJheShvYmopKSB7XG4gICAgLy8gSXRlcmF0ZSBvdmVyIGFycmF5IHZhbHVlc1xuICAgIGZvciAoaSA9IDAsIGwgPSBvYmoubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgICBmbi5jYWxsKG51bGwsIG9ialtpXSwgaSwgb2JqKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgLy8gSXRlcmF0ZSBvdmVyIG9iamVjdCBrZXlzXG4gICAgY29uc3Qga2V5cyA9IGFsbE93bktleXMgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhvYmopIDogT2JqZWN0LmtleXMob2JqKTtcbiAgICBjb25zdCBsZW4gPSBrZXlzLmxlbmd0aDtcbiAgICBsZXQga2V5O1xuXG4gICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICBrZXkgPSBrZXlzW2ldO1xuICAgICAgZm4uY2FsbChudWxsLCBvYmpba2V5XSwga2V5LCBvYmopO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBmaW5kS2V5KG9iaiwga2V5KSB7XG4gIGtleSA9IGtleS50b0xvd2VyQ2FzZSgpO1xuICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMob2JqKTtcbiAgbGV0IGkgPSBrZXlzLmxlbmd0aDtcbiAgbGV0IF9rZXk7XG4gIHdoaWxlIChpLS0gPiAwKSB7XG4gICAgX2tleSA9IGtleXNbaV07XG4gICAgaWYgKGtleSA9PT0gX2tleS50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICByZXR1cm4gX2tleTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59XG5cbmNvbnN0IF9nbG9iYWwgPSAoKCkgPT4ge1xuICAvKmVzbGludCBuby11bmRlZjowKi9cbiAgaWYgKHR5cGVvZiBnbG9iYWxUaGlzICE9PSBcInVuZGVmaW5lZFwiKSByZXR1cm4gZ2xvYmFsVGhpcztcbiAgcmV0dXJuIHR5cGVvZiBzZWxmICE9PSBcInVuZGVmaW5lZFwiID8gc2VsZiA6ICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyA/IHdpbmRvdyA6IGdsb2JhbClcbn0pKCk7XG5cbmNvbnN0IGlzQ29udGV4dERlZmluZWQgPSAoY29udGV4dCkgPT4gIWlzVW5kZWZpbmVkKGNvbnRleHQpICYmIGNvbnRleHQgIT09IF9nbG9iYWw7XG5cbi8qKlxuICogQWNjZXB0cyB2YXJhcmdzIGV4cGVjdGluZyBlYWNoIGFyZ3VtZW50IHRvIGJlIGFuIG9iamVjdCwgdGhlblxuICogaW1tdXRhYmx5IG1lcmdlcyB0aGUgcHJvcGVydGllcyBvZiBlYWNoIG9iamVjdCBhbmQgcmV0dXJucyByZXN1bHQuXG4gKlxuICogV2hlbiBtdWx0aXBsZSBvYmplY3RzIGNvbnRhaW4gdGhlIHNhbWUga2V5IHRoZSBsYXRlciBvYmplY3QgaW5cbiAqIHRoZSBhcmd1bWVudHMgbGlzdCB3aWxsIHRha2UgcHJlY2VkZW5jZS5cbiAqXG4gKiBFeGFtcGxlOlxuICpcbiAqIGBgYGpzXG4gKiB2YXIgcmVzdWx0ID0gbWVyZ2Uoe2ZvbzogMTIzfSwge2ZvbzogNDU2fSk7XG4gKiBjb25zb2xlLmxvZyhyZXN1bHQuZm9vKTsgLy8gb3V0cHV0cyA0NTZcbiAqIGBgYFxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmoxIE9iamVjdCB0byBtZXJnZVxuICpcbiAqIEByZXR1cm5zIHtPYmplY3R9IFJlc3VsdCBvZiBhbGwgbWVyZ2UgcHJvcGVydGllc1xuICovXG5mdW5jdGlvbiBtZXJnZSgvKiBvYmoxLCBvYmoyLCBvYmozLCAuLi4gKi8pIHtcbiAgY29uc3Qge2Nhc2VsZXNzfSA9IGlzQ29udGV4dERlZmluZWQodGhpcykgJiYgdGhpcyB8fCB7fTtcbiAgY29uc3QgcmVzdWx0ID0ge307XG4gIGNvbnN0IGFzc2lnblZhbHVlID0gKHZhbCwga2V5KSA9PiB7XG4gICAgY29uc3QgdGFyZ2V0S2V5ID0gY2FzZWxlc3MgJiYgZmluZEtleShyZXN1bHQsIGtleSkgfHwga2V5O1xuICAgIGlmIChpc1BsYWluT2JqZWN0KHJlc3VsdFt0YXJnZXRLZXldKSAmJiBpc1BsYWluT2JqZWN0KHZhbCkpIHtcbiAgICAgIHJlc3VsdFt0YXJnZXRLZXldID0gbWVyZ2UocmVzdWx0W3RhcmdldEtleV0sIHZhbCk7XG4gICAgfSBlbHNlIGlmIChpc1BsYWluT2JqZWN0KHZhbCkpIHtcbiAgICAgIHJlc3VsdFt0YXJnZXRLZXldID0gbWVyZ2Uoe30sIHZhbCk7XG4gICAgfSBlbHNlIGlmIChpc0FycmF5KHZhbCkpIHtcbiAgICAgIHJlc3VsdFt0YXJnZXRLZXldID0gdmFsLnNsaWNlKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlc3VsdFt0YXJnZXRLZXldID0gdmFsO1xuICAgIH1cbiAgfVxuXG4gIGZvciAobGV0IGkgPSAwLCBsID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IGw7IGkrKykge1xuICAgIGFyZ3VtZW50c1tpXSAmJiBmb3JFYWNoKGFyZ3VtZW50c1tpXSwgYXNzaWduVmFsdWUpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG5cbi8qKlxuICogRXh0ZW5kcyBvYmplY3QgYSBieSBtdXRhYmx5IGFkZGluZyB0byBpdCB0aGUgcHJvcGVydGllcyBvZiBvYmplY3QgYi5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gYSBUaGUgb2JqZWN0IHRvIGJlIGV4dGVuZGVkXG4gKiBAcGFyYW0ge09iamVjdH0gYiBUaGUgb2JqZWN0IHRvIGNvcHkgcHJvcGVydGllcyBmcm9tXG4gKiBAcGFyYW0ge09iamVjdH0gdGhpc0FyZyBUaGUgb2JqZWN0IHRvIGJpbmQgZnVuY3Rpb24gdG9cbiAqXG4gKiBAcGFyYW0ge0Jvb2xlYW59IFthbGxPd25LZXlzXVxuICogQHJldHVybnMge09iamVjdH0gVGhlIHJlc3VsdGluZyB2YWx1ZSBvZiBvYmplY3QgYVxuICovXG5jb25zdCBleHRlbmQgPSAoYSwgYiwgdGhpc0FyZywge2FsbE93bktleXN9PSB7fSkgPT4ge1xuICBmb3JFYWNoKGIsICh2YWwsIGtleSkgPT4ge1xuICAgIGlmICh0aGlzQXJnICYmIGlzRnVuY3Rpb24odmFsKSkge1xuICAgICAgYVtrZXldID0gYmluZCh2YWwsIHRoaXNBcmcpO1xuICAgIH0gZWxzZSB7XG4gICAgICBhW2tleV0gPSB2YWw7XG4gICAgfVxuICB9LCB7YWxsT3duS2V5c30pO1xuICByZXR1cm4gYTtcbn1cblxuLyoqXG4gKiBSZW1vdmUgYnl0ZSBvcmRlciBtYXJrZXIuIFRoaXMgY2F0Y2hlcyBFRiBCQiBCRiAodGhlIFVURi04IEJPTSlcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gY29udGVudCB3aXRoIEJPTVxuICpcbiAqIEByZXR1cm5zIHtzdHJpbmd9IGNvbnRlbnQgdmFsdWUgd2l0aG91dCBCT01cbiAqL1xuY29uc3Qgc3RyaXBCT00gPSAoY29udGVudCkgPT4ge1xuICBpZiAoY29udGVudC5jaGFyQ29kZUF0KDApID09PSAweEZFRkYpIHtcbiAgICBjb250ZW50ID0gY29udGVudC5zbGljZSgxKTtcbiAgfVxuICByZXR1cm4gY29udGVudDtcbn1cblxuLyoqXG4gKiBJbmhlcml0IHRoZSBwcm90b3R5cGUgbWV0aG9kcyBmcm9tIG9uZSBjb25zdHJ1Y3RvciBpbnRvIGFub3RoZXJcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IGNvbnN0cnVjdG9yXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBzdXBlckNvbnN0cnVjdG9yXG4gKiBAcGFyYW0ge29iamVjdH0gW3Byb3BzXVxuICogQHBhcmFtIHtvYmplY3R9IFtkZXNjcmlwdG9yc11cbiAqXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuY29uc3QgaW5oZXJpdHMgPSAoY29uc3RydWN0b3IsIHN1cGVyQ29uc3RydWN0b3IsIHByb3BzLCBkZXNjcmlwdG9ycykgPT4ge1xuICBjb25zdHJ1Y3Rvci5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ29uc3RydWN0b3IucHJvdG90eXBlLCBkZXNjcmlwdG9ycyk7XG4gIGNvbnN0cnVjdG9yLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IGNvbnN0cnVjdG9yO1xuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoY29uc3RydWN0b3IsICdzdXBlcicsIHtcbiAgICB2YWx1ZTogc3VwZXJDb25zdHJ1Y3Rvci5wcm90b3R5cGVcbiAgfSk7XG4gIHByb3BzICYmIE9iamVjdC5hc3NpZ24oY29uc3RydWN0b3IucHJvdG90eXBlLCBwcm9wcyk7XG59XG5cbi8qKlxuICogUmVzb2x2ZSBvYmplY3Qgd2l0aCBkZWVwIHByb3RvdHlwZSBjaGFpbiB0byBhIGZsYXQgb2JqZWN0XG4gKiBAcGFyYW0ge09iamVjdH0gc291cmNlT2JqIHNvdXJjZSBvYmplY3RcbiAqIEBwYXJhbSB7T2JqZWN0fSBbZGVzdE9ial1cbiAqIEBwYXJhbSB7RnVuY3Rpb258Qm9vbGVhbn0gW2ZpbHRlcl1cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtwcm9wRmlsdGVyXVxuICpcbiAqIEByZXR1cm5zIHtPYmplY3R9XG4gKi9cbmNvbnN0IHRvRmxhdE9iamVjdCA9IChzb3VyY2VPYmosIGRlc3RPYmosIGZpbHRlciwgcHJvcEZpbHRlcikgPT4ge1xuICBsZXQgcHJvcHM7XG4gIGxldCBpO1xuICBsZXQgcHJvcDtcbiAgY29uc3QgbWVyZ2VkID0ge307XG5cbiAgZGVzdE9iaiA9IGRlc3RPYmogfHwge307XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1lcS1udWxsLGVxZXFlcVxuICBpZiAoc291cmNlT2JqID09IG51bGwpIHJldHVybiBkZXN0T2JqO1xuXG4gIGRvIHtcbiAgICBwcm9wcyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHNvdXJjZU9iaik7XG4gICAgaSA9IHByb3BzLmxlbmd0aDtcbiAgICB3aGlsZSAoaS0tID4gMCkge1xuICAgICAgcHJvcCA9IHByb3BzW2ldO1xuICAgICAgaWYgKCghcHJvcEZpbHRlciB8fCBwcm9wRmlsdGVyKHByb3AsIHNvdXJjZU9iaiwgZGVzdE9iaikpICYmICFtZXJnZWRbcHJvcF0pIHtcbiAgICAgICAgZGVzdE9ialtwcm9wXSA9IHNvdXJjZU9ialtwcm9wXTtcbiAgICAgICAgbWVyZ2VkW3Byb3BdID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgc291cmNlT2JqID0gZmlsdGVyICE9PSBmYWxzZSAmJiBnZXRQcm90b3R5cGVPZihzb3VyY2VPYmopO1xuICB9IHdoaWxlIChzb3VyY2VPYmogJiYgKCFmaWx0ZXIgfHwgZmlsdGVyKHNvdXJjZU9iaiwgZGVzdE9iaikpICYmIHNvdXJjZU9iaiAhPT0gT2JqZWN0LnByb3RvdHlwZSk7XG5cbiAgcmV0dXJuIGRlc3RPYmo7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lcyB3aGV0aGVyIGEgc3RyaW5nIGVuZHMgd2l0aCB0aGUgY2hhcmFjdGVycyBvZiBhIHNwZWNpZmllZCBzdHJpbmdcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gc3RyXG4gKiBAcGFyYW0ge1N0cmluZ30gc2VhcmNoU3RyaW5nXG4gKiBAcGFyYW0ge051bWJlcn0gW3Bvc2l0aW9uPSAwXVxuICpcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5jb25zdCBlbmRzV2l0aCA9IChzdHIsIHNlYXJjaFN0cmluZywgcG9zaXRpb24pID0+IHtcbiAgc3RyID0gU3RyaW5nKHN0cik7XG4gIGlmIChwb3NpdGlvbiA9PT0gdW5kZWZpbmVkIHx8IHBvc2l0aW9uID4gc3RyLmxlbmd0aCkge1xuICAgIHBvc2l0aW9uID0gc3RyLmxlbmd0aDtcbiAgfVxuICBwb3NpdGlvbiAtPSBzZWFyY2hTdHJpbmcubGVuZ3RoO1xuICBjb25zdCBsYXN0SW5kZXggPSBzdHIuaW5kZXhPZihzZWFyY2hTdHJpbmcsIHBvc2l0aW9uKTtcbiAgcmV0dXJuIGxhc3RJbmRleCAhPT0gLTEgJiYgbGFzdEluZGV4ID09PSBwb3NpdGlvbjtcbn1cblxuXG4vKipcbiAqIFJldHVybnMgbmV3IGFycmF5IGZyb20gYXJyYXkgbGlrZSBvYmplY3Qgb3IgbnVsbCBpZiBmYWlsZWRcbiAqXG4gKiBAcGFyYW0geyp9IFt0aGluZ11cbiAqXG4gKiBAcmV0dXJucyB7P0FycmF5fVxuICovXG5jb25zdCB0b0FycmF5ID0gKHRoaW5nKSA9PiB7XG4gIGlmICghdGhpbmcpIHJldHVybiBudWxsO1xuICBpZiAoaXNBcnJheSh0aGluZykpIHJldHVybiB0aGluZztcbiAgbGV0IGkgPSB0aGluZy5sZW5ndGg7XG4gIGlmICghaXNOdW1iZXIoaSkpIHJldHVybiBudWxsO1xuICBjb25zdCBhcnIgPSBuZXcgQXJyYXkoaSk7XG4gIHdoaWxlIChpLS0gPiAwKSB7XG4gICAgYXJyW2ldID0gdGhpbmdbaV07XG4gIH1cbiAgcmV0dXJuIGFycjtcbn1cblxuLyoqXG4gKiBDaGVja2luZyBpZiB0aGUgVWludDhBcnJheSBleGlzdHMgYW5kIGlmIGl0IGRvZXMsIGl0IHJldHVybnMgYSBmdW5jdGlvbiB0aGF0IGNoZWNrcyBpZiB0aGVcbiAqIHRoaW5nIHBhc3NlZCBpbiBpcyBhbiBpbnN0YW5jZSBvZiBVaW50OEFycmF5XG4gKlxuICogQHBhcmFtIHtUeXBlZEFycmF5fVxuICpcbiAqIEByZXR1cm5zIHtBcnJheX1cbiAqL1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGZ1bmMtbmFtZXNcbmNvbnN0IGlzVHlwZWRBcnJheSA9IChUeXBlZEFycmF5ID0+IHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGZ1bmMtbmFtZXNcbiAgcmV0dXJuIHRoaW5nID0+IHtcbiAgICByZXR1cm4gVHlwZWRBcnJheSAmJiB0aGluZyBpbnN0YW5jZW9mIFR5cGVkQXJyYXk7XG4gIH07XG59KSh0eXBlb2YgVWludDhBcnJheSAhPT0gJ3VuZGVmaW5lZCcgJiYgZ2V0UHJvdG90eXBlT2YoVWludDhBcnJheSkpO1xuXG4vKipcbiAqIEZvciBlYWNoIGVudHJ5IGluIHRoZSBvYmplY3QsIGNhbGwgdGhlIGZ1bmN0aW9uIHdpdGggdGhlIGtleSBhbmQgdmFsdWUuXG4gKlxuICogQHBhcmFtIHtPYmplY3Q8YW55LCBhbnk+fSBvYmogLSBUaGUgb2JqZWN0IHRvIGl0ZXJhdGUgb3Zlci5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIC0gVGhlIGZ1bmN0aW9uIHRvIGNhbGwgZm9yIGVhY2ggZW50cnkuXG4gKlxuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmNvbnN0IGZvckVhY2hFbnRyeSA9IChvYmosIGZuKSA9PiB7XG4gIGNvbnN0IGdlbmVyYXRvciA9IG9iaiAmJiBvYmpbU3ltYm9sLml0ZXJhdG9yXTtcblxuICBjb25zdCBpdGVyYXRvciA9IGdlbmVyYXRvci5jYWxsKG9iaik7XG5cbiAgbGV0IHJlc3VsdDtcblxuICB3aGlsZSAoKHJlc3VsdCA9IGl0ZXJhdG9yLm5leHQoKSkgJiYgIXJlc3VsdC5kb25lKSB7XG4gICAgY29uc3QgcGFpciA9IHJlc3VsdC52YWx1ZTtcbiAgICBmbi5jYWxsKG9iaiwgcGFpclswXSwgcGFpclsxXSk7XG4gIH1cbn1cblxuLyoqXG4gKiBJdCB0YWtlcyBhIHJlZ3VsYXIgZXhwcmVzc2lvbiBhbmQgYSBzdHJpbmcsIGFuZCByZXR1cm5zIGFuIGFycmF5IG9mIGFsbCB0aGUgbWF0Y2hlc1xuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSByZWdFeHAgLSBUaGUgcmVndWxhciBleHByZXNzaW9uIHRvIG1hdGNoIGFnYWluc3QuXG4gKiBAcGFyYW0ge3N0cmluZ30gc3RyIC0gVGhlIHN0cmluZyB0byBzZWFyY2guXG4gKlxuICogQHJldHVybnMge0FycmF5PGJvb2xlYW4+fVxuICovXG5jb25zdCBtYXRjaEFsbCA9IChyZWdFeHAsIHN0cikgPT4ge1xuICBsZXQgbWF0Y2hlcztcbiAgY29uc3QgYXJyID0gW107XG5cbiAgd2hpbGUgKChtYXRjaGVzID0gcmVnRXhwLmV4ZWMoc3RyKSkgIT09IG51bGwpIHtcbiAgICBhcnIucHVzaChtYXRjaGVzKTtcbiAgfVxuXG4gIHJldHVybiBhcnI7XG59XG5cbi8qIENoZWNraW5nIGlmIHRoZSBraW5kT2ZUZXN0IGZ1bmN0aW9uIHJldHVybnMgdHJ1ZSB3aGVuIHBhc3NlZCBhbiBIVE1MRm9ybUVsZW1lbnQuICovXG5jb25zdCBpc0hUTUxGb3JtID0ga2luZE9mVGVzdCgnSFRNTEZvcm1FbGVtZW50Jyk7XG5cbmNvbnN0IHRvQ2FtZWxDYXNlID0gc3RyID0+IHtcbiAgcmV0dXJuIHN0ci50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL1stX1xcc10oW2EtelxcZF0pKFxcdyopL2csXG4gICAgZnVuY3Rpb24gcmVwbGFjZXIobSwgcDEsIHAyKSB7XG4gICAgICByZXR1cm4gcDEudG9VcHBlckNhc2UoKSArIHAyO1xuICAgIH1cbiAgKTtcbn07XG5cbi8qIENyZWF0aW5nIGEgZnVuY3Rpb24gdGhhdCB3aWxsIGNoZWNrIGlmIGFuIG9iamVjdCBoYXMgYSBwcm9wZXJ0eS4gKi9cbmNvbnN0IGhhc093blByb3BlcnR5ID0gKCh7aGFzT3duUHJvcGVydHl9KSA9PiAob2JqLCBwcm9wKSA9PiBoYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwgcHJvcCkpKE9iamVjdC5wcm90b3R5cGUpO1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgUmVnRXhwIG9iamVjdFxuICpcbiAqIEBwYXJhbSB7Kn0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBSZWdFeHAgb2JqZWN0LCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuY29uc3QgaXNSZWdFeHAgPSBraW5kT2ZUZXN0KCdSZWdFeHAnKTtcblxuY29uc3QgcmVkdWNlRGVzY3JpcHRvcnMgPSAob2JqLCByZWR1Y2VyKSA9PiB7XG4gIGNvbnN0IGRlc2NyaXB0b3JzID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMob2JqKTtcbiAgY29uc3QgcmVkdWNlZERlc2NyaXB0b3JzID0ge307XG5cbiAgZm9yRWFjaChkZXNjcmlwdG9ycywgKGRlc2NyaXB0b3IsIG5hbWUpID0+IHtcbiAgICBsZXQgcmV0O1xuICAgIGlmICgocmV0ID0gcmVkdWNlcihkZXNjcmlwdG9yLCBuYW1lLCBvYmopKSAhPT0gZmFsc2UpIHtcbiAgICAgIHJlZHVjZWREZXNjcmlwdG9yc1tuYW1lXSA9IHJldCB8fCBkZXNjcmlwdG9yO1xuICAgIH1cbiAgfSk7XG5cbiAgT2JqZWN0LmRlZmluZVByb3BlcnRpZXMob2JqLCByZWR1Y2VkRGVzY3JpcHRvcnMpO1xufVxuXG4vKipcbiAqIE1ha2VzIGFsbCBtZXRob2RzIHJlYWQtb25seVxuICogQHBhcmFtIHtPYmplY3R9IG9ialxuICovXG5cbmNvbnN0IGZyZWV6ZU1ldGhvZHMgPSAob2JqKSA9PiB7XG4gIHJlZHVjZURlc2NyaXB0b3JzKG9iaiwgKGRlc2NyaXB0b3IsIG5hbWUpID0+IHtcbiAgICAvLyBza2lwIHJlc3RyaWN0ZWQgcHJvcHMgaW4gc3RyaWN0IG1vZGVcbiAgICBpZiAoaXNGdW5jdGlvbihvYmopICYmIFsnYXJndW1lbnRzJywgJ2NhbGxlcicsICdjYWxsZWUnXS5pbmRleE9mKG5hbWUpICE9PSAtMSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIGNvbnN0IHZhbHVlID0gb2JqW25hbWVdO1xuXG4gICAgaWYgKCFpc0Z1bmN0aW9uKHZhbHVlKSkgcmV0dXJuO1xuXG4gICAgZGVzY3JpcHRvci5lbnVtZXJhYmxlID0gZmFsc2U7XG5cbiAgICBpZiAoJ3dyaXRhYmxlJyBpbiBkZXNjcmlwdG9yKSB7XG4gICAgICBkZXNjcmlwdG9yLndyaXRhYmxlID0gZmFsc2U7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKCFkZXNjcmlwdG9yLnNldCkge1xuICAgICAgZGVzY3JpcHRvci5zZXQgPSAoKSA9PiB7XG4gICAgICAgIHRocm93IEVycm9yKCdDYW4gbm90IHJld3JpdGUgcmVhZC1vbmx5IG1ldGhvZCBcXCcnICsgbmFtZSArICdcXCcnKTtcbiAgICAgIH07XG4gICAgfVxuICB9KTtcbn1cblxuY29uc3QgdG9PYmplY3RTZXQgPSAoYXJyYXlPclN0cmluZywgZGVsaW1pdGVyKSA9PiB7XG4gIGNvbnN0IG9iaiA9IHt9O1xuXG4gIGNvbnN0IGRlZmluZSA9IChhcnIpID0+IHtcbiAgICBhcnIuZm9yRWFjaCh2YWx1ZSA9PiB7XG4gICAgICBvYmpbdmFsdWVdID0gdHJ1ZTtcbiAgICB9KTtcbiAgfVxuXG4gIGlzQXJyYXkoYXJyYXlPclN0cmluZykgPyBkZWZpbmUoYXJyYXlPclN0cmluZykgOiBkZWZpbmUoU3RyaW5nKGFycmF5T3JTdHJpbmcpLnNwbGl0KGRlbGltaXRlcikpO1xuXG4gIHJldHVybiBvYmo7XG59XG5cbmNvbnN0IG5vb3AgPSAoKSA9PiB7fVxuXG5jb25zdCB0b0Zpbml0ZU51bWJlciA9ICh2YWx1ZSwgZGVmYXVsdFZhbHVlKSA9PiB7XG4gIHJldHVybiB2YWx1ZSAhPSBudWxsICYmIE51bWJlci5pc0Zpbml0ZSh2YWx1ZSA9ICt2YWx1ZSkgPyB2YWx1ZSA6IGRlZmF1bHRWYWx1ZTtcbn1cblxuLyoqXG4gKiBJZiB0aGUgdGhpbmcgaXMgYSBGb3JtRGF0YSBvYmplY3QsIHJldHVybiB0cnVlLCBvdGhlcndpc2UgcmV0dXJuIGZhbHNlLlxuICpcbiAqIEBwYXJhbSB7dW5rbm93bn0gdGhpbmcgLSBUaGUgdGhpbmcgdG8gY2hlY2suXG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIGlzU3BlY0NvbXBsaWFudEZvcm0odGhpbmcpIHtcbiAgcmV0dXJuICEhKHRoaW5nICYmIGlzRnVuY3Rpb24odGhpbmcuYXBwZW5kKSAmJiB0aGluZ1tTeW1ib2wudG9TdHJpbmdUYWddID09PSAnRm9ybURhdGEnICYmIHRoaW5nW1N5bWJvbC5pdGVyYXRvcl0pO1xufVxuXG5jb25zdCB0b0pTT05PYmplY3QgPSAob2JqKSA9PiB7XG4gIGNvbnN0IHN0YWNrID0gbmV3IEFycmF5KDEwKTtcblxuICBjb25zdCB2aXNpdCA9IChzb3VyY2UsIGkpID0+IHtcblxuICAgIGlmIChpc09iamVjdChzb3VyY2UpKSB7XG4gICAgICBpZiAoc3RhY2suaW5kZXhPZihzb3VyY2UpID49IDApIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZighKCd0b0pTT04nIGluIHNvdXJjZSkpIHtcbiAgICAgICAgc3RhY2tbaV0gPSBzb3VyY2U7XG4gICAgICAgIGNvbnN0IHRhcmdldCA9IGlzQXJyYXkoc291cmNlKSA/IFtdIDoge307XG5cbiAgICAgICAgZm9yRWFjaChzb3VyY2UsICh2YWx1ZSwga2V5KSA9PiB7XG4gICAgICAgICAgY29uc3QgcmVkdWNlZFZhbHVlID0gdmlzaXQodmFsdWUsIGkgKyAxKTtcbiAgICAgICAgICAhaXNVbmRlZmluZWQocmVkdWNlZFZhbHVlKSAmJiAodGFyZ2V0W2tleV0gPSByZWR1Y2VkVmFsdWUpO1xuICAgICAgICB9KTtcblxuICAgICAgICBzdGFja1tpXSA9IHVuZGVmaW5lZDtcblxuICAgICAgICByZXR1cm4gdGFyZ2V0O1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBzb3VyY2U7XG4gIH1cblxuICByZXR1cm4gdmlzaXQob2JqLCAwKTtcbn1cblxuY29uc3QgaXNBc3luY0ZuID0ga2luZE9mVGVzdCgnQXN5bmNGdW5jdGlvbicpO1xuXG5jb25zdCBpc1RoZW5hYmxlID0gKHRoaW5nKSA9PlxuICB0aGluZyAmJiAoaXNPYmplY3QodGhpbmcpIHx8IGlzRnVuY3Rpb24odGhpbmcpKSAmJiBpc0Z1bmN0aW9uKHRoaW5nLnRoZW4pICYmIGlzRnVuY3Rpb24odGhpbmcuY2F0Y2gpO1xuXG4vLyBvcmlnaW5hbCBjb2RlXG4vLyBodHRwczovL2dpdGh1Yi5jb20vRGlnaXRhbEJyYWluSlMvQXhpb3NQcm9taXNlL2Jsb2IvMTZkZWFiMTM3MTBlYzA5Nzc5OTIyMTMxZjNmYTU5NTQzMjBmODNhYi9saWIvdXRpbHMuanMjTDExLUwzNFxuXG5jb25zdCBfc2V0SW1tZWRpYXRlID0gKChzZXRJbW1lZGlhdGVTdXBwb3J0ZWQsIHBvc3RNZXNzYWdlU3VwcG9ydGVkKSA9PiB7XG4gIGlmIChzZXRJbW1lZGlhdGVTdXBwb3J0ZWQpIHtcbiAgICByZXR1cm4gc2V0SW1tZWRpYXRlO1xuICB9XG5cbiAgcmV0dXJuIHBvc3RNZXNzYWdlU3VwcG9ydGVkID8gKCh0b2tlbiwgY2FsbGJhY2tzKSA9PiB7XG4gICAgX2dsb2JhbC5hZGRFdmVudExpc3RlbmVyKFwibWVzc2FnZVwiLCAoe3NvdXJjZSwgZGF0YX0pID0+IHtcbiAgICAgIGlmIChzb3VyY2UgPT09IF9nbG9iYWwgJiYgZGF0YSA9PT0gdG9rZW4pIHtcbiAgICAgICAgY2FsbGJhY2tzLmxlbmd0aCAmJiBjYWxsYmFja3Muc2hpZnQoKSgpO1xuICAgICAgfVxuICAgIH0sIGZhbHNlKTtcblxuICAgIHJldHVybiAoY2IpID0+IHtcbiAgICAgIGNhbGxiYWNrcy5wdXNoKGNiKTtcbiAgICAgIF9nbG9iYWwucG9zdE1lc3NhZ2UodG9rZW4sIFwiKlwiKTtcbiAgICB9XG4gIH0pKGBheGlvc0Ake01hdGgucmFuZG9tKCl9YCwgW10pIDogKGNiKSA9PiBzZXRUaW1lb3V0KGNiKTtcbn0pKFxuICB0eXBlb2Ygc2V0SW1tZWRpYXRlID09PSAnZnVuY3Rpb24nLFxuICBpc0Z1bmN0aW9uKF9nbG9iYWwucG9zdE1lc3NhZ2UpXG4pO1xuXG5jb25zdCBhc2FwID0gdHlwZW9mIHF1ZXVlTWljcm90YXNrICE9PSAndW5kZWZpbmVkJyA/XG4gIHF1ZXVlTWljcm90YXNrLmJpbmQoX2dsb2JhbCkgOiAoIHR5cGVvZiBwcm9jZXNzICE9PSAndW5kZWZpbmVkJyAmJiBwcm9jZXNzLm5leHRUaWNrIHx8IF9zZXRJbW1lZGlhdGUpO1xuXG4vLyAqKioqKioqKioqKioqKioqKioqKipcblxuZXhwb3J0IGRlZmF1bHQge1xuICBpc0FycmF5LFxuICBpc0FycmF5QnVmZmVyLFxuICBpc0J1ZmZlcixcbiAgaXNGb3JtRGF0YSxcbiAgaXNBcnJheUJ1ZmZlclZpZXcsXG4gIGlzU3RyaW5nLFxuICBpc051bWJlcixcbiAgaXNCb29sZWFuLFxuICBpc09iamVjdCxcbiAgaXNQbGFpbk9iamVjdCxcbiAgaXNSZWFkYWJsZVN0cmVhbSxcbiAgaXNSZXF1ZXN0LFxuICBpc1Jlc3BvbnNlLFxuICBpc0hlYWRlcnMsXG4gIGlzVW5kZWZpbmVkLFxuICBpc0RhdGUsXG4gIGlzRmlsZSxcbiAgaXNCbG9iLFxuICBpc1JlZ0V4cCxcbiAgaXNGdW5jdGlvbixcbiAgaXNTdHJlYW0sXG4gIGlzVVJMU2VhcmNoUGFyYW1zLFxuICBpc1R5cGVkQXJyYXksXG4gIGlzRmlsZUxpc3QsXG4gIGZvckVhY2gsXG4gIG1lcmdlLFxuICBleHRlbmQsXG4gIHRyaW0sXG4gIHN0cmlwQk9NLFxuICBpbmhlcml0cyxcbiAgdG9GbGF0T2JqZWN0LFxuICBraW5kT2YsXG4gIGtpbmRPZlRlc3QsXG4gIGVuZHNXaXRoLFxuICB0b0FycmF5LFxuICBmb3JFYWNoRW50cnksXG4gIG1hdGNoQWxsLFxuICBpc0hUTUxGb3JtLFxuICBoYXNPd25Qcm9wZXJ0eSxcbiAgaGFzT3duUHJvcDogaGFzT3duUHJvcGVydHksIC8vIGFuIGFsaWFzIHRvIGF2b2lkIEVTTGludCBuby1wcm90b3R5cGUtYnVpbHRpbnMgZGV0ZWN0aW9uXG4gIHJlZHVjZURlc2NyaXB0b3JzLFxuICBmcmVlemVNZXRob2RzLFxuICB0b09iamVjdFNldCxcbiAgdG9DYW1lbENhc2UsXG4gIG5vb3AsXG4gIHRvRmluaXRlTnVtYmVyLFxuICBmaW5kS2V5LFxuICBnbG9iYWw6IF9nbG9iYWwsXG4gIGlzQ29udGV4dERlZmluZWQsXG4gIGlzU3BlY0NvbXBsaWFudEZvcm0sXG4gIHRvSlNPTk9iamVjdCxcbiAgaXNBc3luY0ZuLFxuICBpc1RoZW5hYmxlLFxuICBzZXRJbW1lZGlhdGU6IF9zZXRJbW1lZGlhdGUsXG4gIGFzYXBcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgdXRpbHMgZnJvbSAnLi4vdXRpbHMuanMnO1xuXG4vKipcbiAqIENyZWF0ZSBhbiBFcnJvciB3aXRoIHRoZSBzcGVjaWZpZWQgbWVzc2FnZSwgY29uZmlnLCBlcnJvciBjb2RlLCByZXF1ZXN0IGFuZCByZXNwb25zZS5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gbWVzc2FnZSBUaGUgZXJyb3IgbWVzc2FnZS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBbY29kZV0gVGhlIGVycm9yIGNvZGUgKGZvciBleGFtcGxlLCAnRUNPTk5BQk9SVEVEJykuXG4gKiBAcGFyYW0ge09iamVjdH0gW2NvbmZpZ10gVGhlIGNvbmZpZy5cbiAqIEBwYXJhbSB7T2JqZWN0fSBbcmVxdWVzdF0gVGhlIHJlcXVlc3QuXG4gKiBAcGFyYW0ge09iamVjdH0gW3Jlc3BvbnNlXSBUaGUgcmVzcG9uc2UuXG4gKlxuICogQHJldHVybnMge0Vycm9yfSBUaGUgY3JlYXRlZCBlcnJvci5cbiAqL1xuZnVuY3Rpb24gQXhpb3NFcnJvcihtZXNzYWdlLCBjb2RlLCBjb25maWcsIHJlcXVlc3QsIHJlc3BvbnNlKSB7XG4gIEVycm9yLmNhbGwodGhpcyk7XG5cbiAgaWYgKEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKSB7XG4gICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgdGhpcy5jb25zdHJ1Y3Rvcik7XG4gIH0gZWxzZSB7XG4gICAgdGhpcy5zdGFjayA9IChuZXcgRXJyb3IoKSkuc3RhY2s7XG4gIH1cblxuICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlO1xuICB0aGlzLm5hbWUgPSAnQXhpb3NFcnJvcic7XG4gIGNvZGUgJiYgKHRoaXMuY29kZSA9IGNvZGUpO1xuICBjb25maWcgJiYgKHRoaXMuY29uZmlnID0gY29uZmlnKTtcbiAgcmVxdWVzdCAmJiAodGhpcy5yZXF1ZXN0ID0gcmVxdWVzdCk7XG4gIGlmIChyZXNwb25zZSkge1xuICAgIHRoaXMucmVzcG9uc2UgPSByZXNwb25zZTtcbiAgICB0aGlzLnN0YXR1cyA9IHJlc3BvbnNlLnN0YXR1cyA/IHJlc3BvbnNlLnN0YXR1cyA6IG51bGw7XG4gIH1cbn1cblxudXRpbHMuaW5oZXJpdHMoQXhpb3NFcnJvciwgRXJyb3IsIHtcbiAgdG9KU09OOiBmdW5jdGlvbiB0b0pTT04oKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIC8vIFN0YW5kYXJkXG4gICAgICBtZXNzYWdlOiB0aGlzLm1lc3NhZ2UsXG4gICAgICBuYW1lOiB0aGlzLm5hbWUsXG4gICAgICAvLyBNaWNyb3NvZnRcbiAgICAgIGRlc2NyaXB0aW9uOiB0aGlzLmRlc2NyaXB0aW9uLFxuICAgICAgbnVtYmVyOiB0aGlzLm51bWJlcixcbiAgICAgIC8vIE1vemlsbGFcbiAgICAgIGZpbGVOYW1lOiB0aGlzLmZpbGVOYW1lLFxuICAgICAgbGluZU51bWJlcjogdGhpcy5saW5lTnVtYmVyLFxuICAgICAgY29sdW1uTnVtYmVyOiB0aGlzLmNvbHVtbk51bWJlcixcbiAgICAgIHN0YWNrOiB0aGlzLnN0YWNrLFxuICAgICAgLy8gQXhpb3NcbiAgICAgIGNvbmZpZzogdXRpbHMudG9KU09OT2JqZWN0KHRoaXMuY29uZmlnKSxcbiAgICAgIGNvZGU6IHRoaXMuY29kZSxcbiAgICAgIHN0YXR1czogdGhpcy5zdGF0dXNcbiAgICB9O1xuICB9XG59KTtcblxuY29uc3QgcHJvdG90eXBlID0gQXhpb3NFcnJvci5wcm90b3R5cGU7XG5jb25zdCBkZXNjcmlwdG9ycyA9IHt9O1xuXG5bXG4gICdFUlJfQkFEX09QVElPTl9WQUxVRScsXG4gICdFUlJfQkFEX09QVElPTicsXG4gICdFQ09OTkFCT1JURUQnLFxuICAnRVRJTUVET1VUJyxcbiAgJ0VSUl9ORVRXT1JLJyxcbiAgJ0VSUl9GUl9UT09fTUFOWV9SRURJUkVDVFMnLFxuICAnRVJSX0RFUFJFQ0FURUQnLFxuICAnRVJSX0JBRF9SRVNQT05TRScsXG4gICdFUlJfQkFEX1JFUVVFU1QnLFxuICAnRVJSX0NBTkNFTEVEJyxcbiAgJ0VSUl9OT1RfU1VQUE9SVCcsXG4gICdFUlJfSU5WQUxJRF9VUkwnXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZnVuYy1uYW1lc1xuXS5mb3JFYWNoKGNvZGUgPT4ge1xuICBkZXNjcmlwdG9yc1tjb2RlXSA9IHt2YWx1ZTogY29kZX07XG59KTtcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQXhpb3NFcnJvciwgZGVzY3JpcHRvcnMpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KHByb3RvdHlwZSwgJ2lzQXhpb3NFcnJvcicsIHt2YWx1ZTogdHJ1ZX0pO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZnVuYy1uYW1lc1xuQXhpb3NFcnJvci5mcm9tID0gKGVycm9yLCBjb2RlLCBjb25maWcsIHJlcXVlc3QsIHJlc3BvbnNlLCBjdXN0b21Qcm9wcykgPT4ge1xuICBjb25zdCBheGlvc0Vycm9yID0gT2JqZWN0LmNyZWF0ZShwcm90b3R5cGUpO1xuXG4gIHV0aWxzLnRvRmxhdE9iamVjdChlcnJvciwgYXhpb3NFcnJvciwgZnVuY3Rpb24gZmlsdGVyKG9iaikge1xuICAgIHJldHVybiBvYmogIT09IEVycm9yLnByb3RvdHlwZTtcbiAgfSwgcHJvcCA9PiB7XG4gICAgcmV0dXJuIHByb3AgIT09ICdpc0F4aW9zRXJyb3InO1xuICB9KTtcblxuICBBeGlvc0Vycm9yLmNhbGwoYXhpb3NFcnJvciwgZXJyb3IubWVzc2FnZSwgY29kZSwgY29uZmlnLCByZXF1ZXN0LCByZXNwb25zZSk7XG5cbiAgYXhpb3NFcnJvci5jYXVzZSA9IGVycm9yO1xuXG4gIGF4aW9zRXJyb3IubmFtZSA9IGVycm9yLm5hbWU7XG5cbiAgY3VzdG9tUHJvcHMgJiYgT2JqZWN0LmFzc2lnbihheGlvc0Vycm9yLCBjdXN0b21Qcm9wcyk7XG5cbiAgcmV0dXJuIGF4aW9zRXJyb3I7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBBeGlvc0Vycm9yO1xuIiwgInZhciBTdHJlYW0gPSByZXF1aXJlKCdzdHJlYW0nKS5TdHJlYW07XG52YXIgdXRpbCA9IHJlcXVpcmUoJ3V0aWwnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBEZWxheWVkU3RyZWFtO1xuZnVuY3Rpb24gRGVsYXllZFN0cmVhbSgpIHtcbiAgdGhpcy5zb3VyY2UgPSBudWxsO1xuICB0aGlzLmRhdGFTaXplID0gMDtcbiAgdGhpcy5tYXhEYXRhU2l6ZSA9IDEwMjQgKiAxMDI0O1xuICB0aGlzLnBhdXNlU3RyZWFtID0gdHJ1ZTtcblxuICB0aGlzLl9tYXhEYXRhU2l6ZUV4Y2VlZGVkID0gZmFsc2U7XG4gIHRoaXMuX3JlbGVhc2VkID0gZmFsc2U7XG4gIHRoaXMuX2J1ZmZlcmVkRXZlbnRzID0gW107XG59XG51dGlsLmluaGVyaXRzKERlbGF5ZWRTdHJlYW0sIFN0cmVhbSk7XG5cbkRlbGF5ZWRTdHJlYW0uY3JlYXRlID0gZnVuY3Rpb24oc291cmNlLCBvcHRpb25zKSB7XG4gIHZhciBkZWxheWVkU3RyZWFtID0gbmV3IHRoaXMoKTtcblxuICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiAgZm9yICh2YXIgb3B0aW9uIGluIG9wdGlvbnMpIHtcbiAgICBkZWxheWVkU3RyZWFtW29wdGlvbl0gPSBvcHRpb25zW29wdGlvbl07XG4gIH1cblxuICBkZWxheWVkU3RyZWFtLnNvdXJjZSA9IHNvdXJjZTtcblxuICB2YXIgcmVhbEVtaXQgPSBzb3VyY2UuZW1pdDtcbiAgc291cmNlLmVtaXQgPSBmdW5jdGlvbigpIHtcbiAgICBkZWxheWVkU3RyZWFtLl9oYW5kbGVFbWl0KGFyZ3VtZW50cyk7XG4gICAgcmV0dXJuIHJlYWxFbWl0LmFwcGx5KHNvdXJjZSwgYXJndW1lbnRzKTtcbiAgfTtcblxuICBzb3VyY2Uub24oJ2Vycm9yJywgZnVuY3Rpb24oKSB7fSk7XG4gIGlmIChkZWxheWVkU3RyZWFtLnBhdXNlU3RyZWFtKSB7XG4gICAgc291cmNlLnBhdXNlKCk7XG4gIH1cblxuICByZXR1cm4gZGVsYXllZFN0cmVhbTtcbn07XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShEZWxheWVkU3RyZWFtLnByb3RvdHlwZSwgJ3JlYWRhYmxlJywge1xuICBjb25maWd1cmFibGU6IHRydWUsXG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuc291cmNlLnJlYWRhYmxlO1xuICB9XG59KTtcblxuRGVsYXllZFN0cmVhbS5wcm90b3R5cGUuc2V0RW5jb2RpbmcgPSBmdW5jdGlvbigpIHtcbiAgcmV0dXJuIHRoaXMuc291cmNlLnNldEVuY29kaW5nLmFwcGx5KHRoaXMuc291cmNlLCBhcmd1bWVudHMpO1xufTtcblxuRGVsYXllZFN0cmVhbS5wcm90b3R5cGUucmVzdW1lID0gZnVuY3Rpb24oKSB7XG4gIGlmICghdGhpcy5fcmVsZWFzZWQpIHtcbiAgICB0aGlzLnJlbGVhc2UoKTtcbiAgfVxuXG4gIHRoaXMuc291cmNlLnJlc3VtZSgpO1xufTtcblxuRGVsYXllZFN0cmVhbS5wcm90b3R5cGUucGF1c2UgPSBmdW5jdGlvbigpIHtcbiAgdGhpcy5zb3VyY2UucGF1c2UoKTtcbn07XG5cbkRlbGF5ZWRTdHJlYW0ucHJvdG90eXBlLnJlbGVhc2UgPSBmdW5jdGlvbigpIHtcbiAgdGhpcy5fcmVsZWFzZWQgPSB0cnVlO1xuXG4gIHRoaXMuX2J1ZmZlcmVkRXZlbnRzLmZvckVhY2goZnVuY3Rpb24oYXJncykge1xuICAgIHRoaXMuZW1pdC5hcHBseSh0aGlzLCBhcmdzKTtcbiAgfS5iaW5kKHRoaXMpKTtcbiAgdGhpcy5fYnVmZmVyZWRFdmVudHMgPSBbXTtcbn07XG5cbkRlbGF5ZWRTdHJlYW0ucHJvdG90eXBlLnBpcGUgPSBmdW5jdGlvbigpIHtcbiAgdmFyIHIgPSBTdHJlYW0ucHJvdG90eXBlLnBpcGUuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgdGhpcy5yZXN1bWUoKTtcbiAgcmV0dXJuIHI7XG59O1xuXG5EZWxheWVkU3RyZWFtLnByb3RvdHlwZS5faGFuZGxlRW1pdCA9IGZ1bmN0aW9uKGFyZ3MpIHtcbiAgaWYgKHRoaXMuX3JlbGVhc2VkKSB7XG4gICAgdGhpcy5lbWl0LmFwcGx5KHRoaXMsIGFyZ3MpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmIChhcmdzWzBdID09PSAnZGF0YScpIHtcbiAgICB0aGlzLmRhdGFTaXplICs9IGFyZ3NbMV0ubGVuZ3RoO1xuICAgIHRoaXMuX2NoZWNrSWZNYXhEYXRhU2l6ZUV4Y2VlZGVkKCk7XG4gIH1cblxuICB0aGlzLl9idWZmZXJlZEV2ZW50cy5wdXNoKGFyZ3MpO1xufTtcblxuRGVsYXllZFN0cmVhbS5wcm90b3R5cGUuX2NoZWNrSWZNYXhEYXRhU2l6ZUV4Y2VlZGVkID0gZnVuY3Rpb24oKSB7XG4gIGlmICh0aGlzLl9tYXhEYXRhU2l6ZUV4Y2VlZGVkKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKHRoaXMuZGF0YVNpemUgPD0gdGhpcy5tYXhEYXRhU2l6ZSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHRoaXMuX21heERhdGFTaXplRXhjZWVkZWQgPSB0cnVlO1xuICB2YXIgbWVzc2FnZSA9XG4gICAgJ0RlbGF5ZWRTdHJlYW0jbWF4RGF0YVNpemUgb2YgJyArIHRoaXMubWF4RGF0YVNpemUgKyAnIGJ5dGVzIGV4Y2VlZGVkLidcbiAgdGhpcy5lbWl0KCdlcnJvcicsIG5ldyBFcnJvcihtZXNzYWdlKSk7XG59O1xuIiwgInZhciB1dGlsID0gcmVxdWlyZSgndXRpbCcpO1xudmFyIFN0cmVhbSA9IHJlcXVpcmUoJ3N0cmVhbScpLlN0cmVhbTtcbnZhciBEZWxheWVkU3RyZWFtID0gcmVxdWlyZSgnZGVsYXllZC1zdHJlYW0nKTtcblxubW9kdWxlLmV4cG9ydHMgPSBDb21iaW5lZFN0cmVhbTtcbmZ1bmN0aW9uIENvbWJpbmVkU3RyZWFtKCkge1xuICB0aGlzLndyaXRhYmxlID0gZmFsc2U7XG4gIHRoaXMucmVhZGFibGUgPSB0cnVlO1xuICB0aGlzLmRhdGFTaXplID0gMDtcbiAgdGhpcy5tYXhEYXRhU2l6ZSA9IDIgKiAxMDI0ICogMTAyNDtcbiAgdGhpcy5wYXVzZVN0cmVhbXMgPSB0cnVlO1xuXG4gIHRoaXMuX3JlbGVhc2VkID0gZmFsc2U7XG4gIHRoaXMuX3N0cmVhbXMgPSBbXTtcbiAgdGhpcy5fY3VycmVudFN0cmVhbSA9IG51bGw7XG4gIHRoaXMuX2luc2lkZUxvb3AgPSBmYWxzZTtcbiAgdGhpcy5fcGVuZGluZ05leHQgPSBmYWxzZTtcbn1cbnV0aWwuaW5oZXJpdHMoQ29tYmluZWRTdHJlYW0sIFN0cmVhbSk7XG5cbkNvbWJpbmVkU3RyZWFtLmNyZWF0ZSA9IGZ1bmN0aW9uKG9wdGlvbnMpIHtcbiAgdmFyIGNvbWJpbmVkU3RyZWFtID0gbmV3IHRoaXMoKTtcblxuICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiAgZm9yICh2YXIgb3B0aW9uIGluIG9wdGlvbnMpIHtcbiAgICBjb21iaW5lZFN0cmVhbVtvcHRpb25dID0gb3B0aW9uc1tvcHRpb25dO1xuICB9XG5cbiAgcmV0dXJuIGNvbWJpbmVkU3RyZWFtO1xufTtcblxuQ29tYmluZWRTdHJlYW0uaXNTdHJlYW1MaWtlID0gZnVuY3Rpb24oc3RyZWFtKSB7XG4gIHJldHVybiAodHlwZW9mIHN0cmVhbSAhPT0gJ2Z1bmN0aW9uJylcbiAgICAmJiAodHlwZW9mIHN0cmVhbSAhPT0gJ3N0cmluZycpXG4gICAgJiYgKHR5cGVvZiBzdHJlYW0gIT09ICdib29sZWFuJylcbiAgICAmJiAodHlwZW9mIHN0cmVhbSAhPT0gJ251bWJlcicpXG4gICAgJiYgKCFCdWZmZXIuaXNCdWZmZXIoc3RyZWFtKSk7XG59O1xuXG5Db21iaW5lZFN0cmVhbS5wcm90b3R5cGUuYXBwZW5kID0gZnVuY3Rpb24oc3RyZWFtKSB7XG4gIHZhciBpc1N0cmVhbUxpa2UgPSBDb21iaW5lZFN0cmVhbS5pc1N0cmVhbUxpa2Uoc3RyZWFtKTtcblxuICBpZiAoaXNTdHJlYW1MaWtlKSB7XG4gICAgaWYgKCEoc3RyZWFtIGluc3RhbmNlb2YgRGVsYXllZFN0cmVhbSkpIHtcbiAgICAgIHZhciBuZXdTdHJlYW0gPSBEZWxheWVkU3RyZWFtLmNyZWF0ZShzdHJlYW0sIHtcbiAgICAgICAgbWF4RGF0YVNpemU6IEluZmluaXR5LFxuICAgICAgICBwYXVzZVN0cmVhbTogdGhpcy5wYXVzZVN0cmVhbXMsXG4gICAgICB9KTtcbiAgICAgIHN0cmVhbS5vbignZGF0YScsIHRoaXMuX2NoZWNrRGF0YVNpemUuYmluZCh0aGlzKSk7XG4gICAgICBzdHJlYW0gPSBuZXdTdHJlYW07XG4gICAgfVxuXG4gICAgdGhpcy5faGFuZGxlRXJyb3JzKHN0cmVhbSk7XG5cbiAgICBpZiAodGhpcy5wYXVzZVN0cmVhbXMpIHtcbiAgICAgIHN0cmVhbS5wYXVzZSgpO1xuICAgIH1cbiAgfVxuXG4gIHRoaXMuX3N0cmVhbXMucHVzaChzdHJlYW0pO1xuICByZXR1cm4gdGhpcztcbn07XG5cbkNvbWJpbmVkU3RyZWFtLnByb3RvdHlwZS5waXBlID0gZnVuY3Rpb24oZGVzdCwgb3B0aW9ucykge1xuICBTdHJlYW0ucHJvdG90eXBlLnBpcGUuY2FsbCh0aGlzLCBkZXN0LCBvcHRpb25zKTtcbiAgdGhpcy5yZXN1bWUoKTtcbiAgcmV0dXJuIGRlc3Q7XG59O1xuXG5Db21iaW5lZFN0cmVhbS5wcm90b3R5cGUuX2dldE5leHQgPSBmdW5jdGlvbigpIHtcbiAgdGhpcy5fY3VycmVudFN0cmVhbSA9IG51bGw7XG5cbiAgaWYgKHRoaXMuX2luc2lkZUxvb3ApIHtcbiAgICB0aGlzLl9wZW5kaW5nTmV4dCA9IHRydWU7XG4gICAgcmV0dXJuOyAvLyBkZWZlciBjYWxsXG4gIH1cblxuICB0aGlzLl9pbnNpZGVMb29wID0gdHJ1ZTtcbiAgdHJ5IHtcbiAgICBkbyB7XG4gICAgICB0aGlzLl9wZW5kaW5nTmV4dCA9IGZhbHNlO1xuICAgICAgdGhpcy5fcmVhbEdldE5leHQoKTtcbiAgICB9IHdoaWxlICh0aGlzLl9wZW5kaW5nTmV4dCk7XG4gIH0gZmluYWxseSB7XG4gICAgdGhpcy5faW5zaWRlTG9vcCA9IGZhbHNlO1xuICB9XG59O1xuXG5Db21iaW5lZFN0cmVhbS5wcm90b3R5cGUuX3JlYWxHZXROZXh0ID0gZnVuY3Rpb24oKSB7XG4gIHZhciBzdHJlYW0gPSB0aGlzLl9zdHJlYW1zLnNoaWZ0KCk7XG5cblxuICBpZiAodHlwZW9mIHN0cmVhbSA9PSAndW5kZWZpbmVkJykge1xuICAgIHRoaXMuZW5kKCk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYgKHR5cGVvZiBzdHJlYW0gIT09ICdmdW5jdGlvbicpIHtcbiAgICB0aGlzLl9waXBlTmV4dChzdHJlYW0pO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciBnZXRTdHJlYW0gPSBzdHJlYW07XG4gIGdldFN0cmVhbShmdW5jdGlvbihzdHJlYW0pIHtcbiAgICB2YXIgaXNTdHJlYW1MaWtlID0gQ29tYmluZWRTdHJlYW0uaXNTdHJlYW1MaWtlKHN0cmVhbSk7XG4gICAgaWYgKGlzU3RyZWFtTGlrZSkge1xuICAgICAgc3RyZWFtLm9uKCdkYXRhJywgdGhpcy5fY2hlY2tEYXRhU2l6ZS5iaW5kKHRoaXMpKTtcbiAgICAgIHRoaXMuX2hhbmRsZUVycm9ycyhzdHJlYW0pO1xuICAgIH1cblxuICAgIHRoaXMuX3BpcGVOZXh0KHN0cmVhbSk7XG4gIH0uYmluZCh0aGlzKSk7XG59O1xuXG5Db21iaW5lZFN0cmVhbS5wcm90b3R5cGUuX3BpcGVOZXh0ID0gZnVuY3Rpb24oc3RyZWFtKSB7XG4gIHRoaXMuX2N1cnJlbnRTdHJlYW0gPSBzdHJlYW07XG5cbiAgdmFyIGlzU3RyZWFtTGlrZSA9IENvbWJpbmVkU3RyZWFtLmlzU3RyZWFtTGlrZShzdHJlYW0pO1xuICBpZiAoaXNTdHJlYW1MaWtlKSB7XG4gICAgc3RyZWFtLm9uKCdlbmQnLCB0aGlzLl9nZXROZXh0LmJpbmQodGhpcykpO1xuICAgIHN0cmVhbS5waXBlKHRoaXMsIHtlbmQ6IGZhbHNlfSk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIHZhbHVlID0gc3RyZWFtO1xuICB0aGlzLndyaXRlKHZhbHVlKTtcbiAgdGhpcy5fZ2V0TmV4dCgpO1xufTtcblxuQ29tYmluZWRTdHJlYW0ucHJvdG90eXBlLl9oYW5kbGVFcnJvcnMgPSBmdW5jdGlvbihzdHJlYW0pIHtcbiAgdmFyIHNlbGYgPSB0aGlzO1xuICBzdHJlYW0ub24oJ2Vycm9yJywgZnVuY3Rpb24oZXJyKSB7XG4gICAgc2VsZi5fZW1pdEVycm9yKGVycik7XG4gIH0pO1xufTtcblxuQ29tYmluZWRTdHJlYW0ucHJvdG90eXBlLndyaXRlID0gZnVuY3Rpb24oZGF0YSkge1xuICB0aGlzLmVtaXQoJ2RhdGEnLCBkYXRhKTtcbn07XG5cbkNvbWJpbmVkU3RyZWFtLnByb3RvdHlwZS5wYXVzZSA9IGZ1bmN0aW9uKCkge1xuICBpZiAoIXRoaXMucGF1c2VTdHJlYW1zKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgaWYodGhpcy5wYXVzZVN0cmVhbXMgJiYgdGhpcy5fY3VycmVudFN0cmVhbSAmJiB0eXBlb2YodGhpcy5fY3VycmVudFN0cmVhbS5wYXVzZSkgPT0gJ2Z1bmN0aW9uJykgdGhpcy5fY3VycmVudFN0cmVhbS5wYXVzZSgpO1xuICB0aGlzLmVtaXQoJ3BhdXNlJyk7XG59O1xuXG5Db21iaW5lZFN0cmVhbS5wcm90b3R5cGUucmVzdW1lID0gZnVuY3Rpb24oKSB7XG4gIGlmICghdGhpcy5fcmVsZWFzZWQpIHtcbiAgICB0aGlzLl9yZWxlYXNlZCA9IHRydWU7XG4gICAgdGhpcy53cml0YWJsZSA9IHRydWU7XG4gICAgdGhpcy5fZ2V0TmV4dCgpO1xuICB9XG5cbiAgaWYodGhpcy5wYXVzZVN0cmVhbXMgJiYgdGhpcy5fY3VycmVudFN0cmVhbSAmJiB0eXBlb2YodGhpcy5fY3VycmVudFN0cmVhbS5yZXN1bWUpID09ICdmdW5jdGlvbicpIHRoaXMuX2N1cnJlbnRTdHJlYW0ucmVzdW1lKCk7XG4gIHRoaXMuZW1pdCgncmVzdW1lJyk7XG59O1xuXG5Db21iaW5lZFN0cmVhbS5wcm90b3R5cGUuZW5kID0gZnVuY3Rpb24oKSB7XG4gIHRoaXMuX3Jlc2V0KCk7XG4gIHRoaXMuZW1pdCgnZW5kJyk7XG59O1xuXG5Db21iaW5lZFN0cmVhbS5wcm90b3R5cGUuZGVzdHJveSA9IGZ1bmN0aW9uKCkge1xuICB0aGlzLl9yZXNldCgpO1xuICB0aGlzLmVtaXQoJ2Nsb3NlJyk7XG59O1xuXG5Db21iaW5lZFN0cmVhbS5wcm90b3R5cGUuX3Jlc2V0ID0gZnVuY3Rpb24oKSB7XG4gIHRoaXMud3JpdGFibGUgPSBmYWxzZTtcbiAgdGhpcy5fc3RyZWFtcyA9IFtdO1xuICB0aGlzLl9jdXJyZW50U3RyZWFtID0gbnVsbDtcbn07XG5cbkNvbWJpbmVkU3RyZWFtLnByb3RvdHlwZS5fY2hlY2tEYXRhU2l6ZSA9IGZ1bmN0aW9uKCkge1xuICB0aGlzLl91cGRhdGVEYXRhU2l6ZSgpO1xuICBpZiAodGhpcy5kYXRhU2l6ZSA8PSB0aGlzLm1heERhdGFTaXplKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIG1lc3NhZ2UgPVxuICAgICdEZWxheWVkU3RyZWFtI21heERhdGFTaXplIG9mICcgKyB0aGlzLm1heERhdGFTaXplICsgJyBieXRlcyBleGNlZWRlZC4nO1xuICB0aGlzLl9lbWl0RXJyb3IobmV3IEVycm9yKG1lc3NhZ2UpKTtcbn07XG5cbkNvbWJpbmVkU3RyZWFtLnByb3RvdHlwZS5fdXBkYXRlRGF0YVNpemUgPSBmdW5jdGlvbigpIHtcbiAgdGhpcy5kYXRhU2l6ZSA9IDA7XG5cbiAgdmFyIHNlbGYgPSB0aGlzO1xuICB0aGlzLl9zdHJlYW1zLmZvckVhY2goZnVuY3Rpb24oc3RyZWFtKSB7XG4gICAgaWYgKCFzdHJlYW0uZGF0YVNpemUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBzZWxmLmRhdGFTaXplICs9IHN0cmVhbS5kYXRhU2l6ZTtcbiAgfSk7XG5cbiAgaWYgKHRoaXMuX2N1cnJlbnRTdHJlYW0gJiYgdGhpcy5fY3VycmVudFN0cmVhbS5kYXRhU2l6ZSkge1xuICAgIHRoaXMuZGF0YVNpemUgKz0gdGhpcy5fY3VycmVudFN0cmVhbS5kYXRhU2l6ZTtcbiAgfVxufTtcblxuQ29tYmluZWRTdHJlYW0ucHJvdG90eXBlLl9lbWl0RXJyb3IgPSBmdW5jdGlvbihlcnIpIHtcbiAgdGhpcy5fcmVzZXQoKTtcbiAgdGhpcy5lbWl0KCdlcnJvcicsIGVycik7XG59O1xuIiwgIntcbiAgXCJhcHBsaWNhdGlvbi8xZC1pbnRlcmxlYXZlZC1wYXJpdHlmZWNcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vM2dwZGFzaC1xb2UtcmVwb3J0K3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjaGFyc2V0XCI6IFwiVVRGLThcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vM2dwcC1pbXMreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vM2dwcGhhbCtqc29uXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vM2dwcGhhbGZvcm1zK2pzb25cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9hMmxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vYWNlK2Nib3JcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vYWN0aXZlbWVzc2FnZVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9hY3Rpdml0eStqc29uXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vYWx0by1jb3N0bWFwK2pzb25cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9hbHRvLWNvc3RtYXBmaWx0ZXIranNvblwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL2FsdG8tZGlyZWN0b3J5K2pzb25cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9hbHRvLWVuZHBvaW50Y29zdCtqc29uXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vYWx0by1lbmRwb2ludGNvc3RwYXJhbXMranNvblwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL2FsdG8tZW5kcG9pbnRwcm9wK2pzb25cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9hbHRvLWVuZHBvaW50cHJvcHBhcmFtcytqc29uXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vYWx0by1lcnJvcitqc29uXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vYWx0by1uZXR3b3JrbWFwK2pzb25cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9hbHRvLW5ldHdvcmttYXBmaWx0ZXIranNvblwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL2FsdG8tdXBkYXRlc3RyZWFtY29udHJvbCtqc29uXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vYWx0by11cGRhdGVzdHJlYW1wYXJhbXMranNvblwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL2FtbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9hbmRyZXctaW5zZXRcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJlelwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL2FwcGxlZmlsZVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9hcHBsaXh3YXJlXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJhd1wiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL2F0K2p3dFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9hdGZcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vYXRmeFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9hdG9tK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiYXRvbVwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL2F0b21jYXQreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJhdG9tY2F0XCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vYXRvbWRlbGV0ZWQreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJhdG9tZGVsZXRlZFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL2F0b21pY21haWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vYXRvbXN2Yyt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImF0b21zdmNcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9hdHNjLWR3ZCt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImR3ZFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL2F0c2MtZHluYW1pYy1ldmVudC1tZXNzYWdlXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL2F0c2MtaGVsZCt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImhlbGRcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9hdHNjLXJkdCtqc29uXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vYXRzYy1yc2F0K3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wicnNhdFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL2F0eG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL2F1dGgtcG9saWN5K3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL2JhY25ldC14ZGQremlwXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiBmYWxzZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL2JhdGNoLXNtdHBcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vYmRvY1wiOiB7XG4gICAgXCJjb21wcmVzc2libGVcIjogZmFsc2UsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImJkb2NcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9iZWVwK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjaGFyc2V0XCI6IFwiVVRGLThcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vY2FsZW5kYXIranNvblwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL2NhbGVuZGFyK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wieGNzXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vY2FsbC1jb21wbGV0aW9uXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL2NhbHMtMTg0MFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9jYXB0aXZlK2pzb25cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9jYm9yXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL2Nib3Itc2VxXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL2NjY2V4XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL2NjbXAreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vY2N4bWwreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJjY3htbFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL2NkZngreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJjZGZ4XCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vY2RtaS1jYXBhYmlsaXR5XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiY2RtaWFcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9jZG1pLWNvbnRhaW5lclwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImNkbWljXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vY2RtaS1kb21haW5cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJjZG1pZFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL2NkbWktb2JqZWN0XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiY2RtaW9cIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9jZG1pLXF1ZXVlXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiY2RtaXFcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9jZG5pXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL2NlYVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9jZWEtMjAxOCt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9jZWxsbWwreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vY2Z3XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL2NpdHkranNvblwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL2NsclwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9jbHVlK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL2NsdWVfaW5mbyt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9jbXNcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vY25ycCt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9jb2FwLWdyb3VwK2pzb25cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9jb2FwLXBheWxvYWRcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vY29tbW9uZ3JvdW5kXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL2NvbmZlcmVuY2UtaW5mbyt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9jb3NlXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL2Nvc2Uta2V5XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL2Nvc2Uta2V5LXNldFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9jcGwreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJjcGxcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9jc3JhdHRyc1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9jc3RhK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL2NzdGFkYXRhK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL2Nzdm0ranNvblwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL2N1LXNlZW1lXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJjdVwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL2N3dFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9jeWJlcmNhc2hcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vZGFydFwiOiB7XG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL2Rhc2greG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJtcGRcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9kYXNoLXBhdGNoK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wibXBwXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vZGFzaGRlbHRhXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL2Rhdm1vdW50K3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiZGF2bW91bnRcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9kY2EtcmZ0XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL2RjZFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9kZWMtZHhcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vZGlhbG9nLWluZm8reG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vZGljb21cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vZGljb20ranNvblwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL2RpY29tK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL2RpaVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9kaXRcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vZG5zXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL2Rucytqc29uXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vZG5zLW1lc3NhZ2VcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vZG9jYm9vayt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiZGJrXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vZG90cytjYm9yXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL2Rza3BwK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL2Rzc2MrZGVyXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiZHNzY1wiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL2Rzc2MreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ4ZHNzY1wiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL2R2Y3NcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vZWNtYXNjcmlwdFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiZXNcIixcImVjbWFcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9lZGktY29uc2VudFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9lZGkteDEyXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiBmYWxzZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL2VkaWZhY3RcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IGZhbHNlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vZWZpXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL2VsbStqc29uXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNoYXJzZXRcIjogXCJVVEYtOFwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9lbG0reG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vZW1lcmdlbmN5Y2FsbGRhdGEuY2FwK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjaGFyc2V0XCI6IFwiVVRGLThcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vZW1lcmdlbmN5Y2FsbGRhdGEuY29tbWVudCt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9lbWVyZ2VuY3ljYWxsZGF0YS5jb250cm9sK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL2VtZXJnZW5jeWNhbGxkYXRhLmRldmljZWluZm8reG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vZW1lcmdlbmN5Y2FsbGRhdGEuZWNhbGwubXNkXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL2VtZXJnZW5jeWNhbGxkYXRhLnByb3ZpZGVyaW5mbyt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9lbWVyZ2VuY3ljYWxsZGF0YS5zZXJ2aWNlaW5mbyt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9lbWVyZ2VuY3ljYWxsZGF0YS5zdWJzY3JpYmVyaW5mbyt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9lbWVyZ2VuY3ljYWxsZGF0YS52ZWRzK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL2VtbWEreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJlbW1hXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vZW1vdGlvbm1sK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiZW1vdGlvbm1sXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vZW5jYXBydHBcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vZXBwK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL2VwdWIremlwXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiBmYWxzZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiZXB1YlwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL2VzaG9wXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL2V4aVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImV4aVwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL2V4cGVjdC1jdC1yZXBvcnQranNvblwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL2V4cHJlc3NcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJleHBcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9mYXN0aW5mb3NldFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9mYXN0c29hcFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9mZHQreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJmZHRcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9maGlyK2pzb25cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY2hhcnNldFwiOiBcIlVURi04XCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL2ZoaXIreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNoYXJzZXRcIjogXCJVVEYtOFwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9maWRvLnRydXN0ZWQtYXBwcytqc29uXCI6IHtcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vZml0c1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9mbGV4ZmVjXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL2ZvbnQtc2ZudFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9mb250LXRkcGZyXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wicGZyXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vZm9udC13b2ZmXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiBmYWxzZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL2ZyYW1ld29yay1hdHRyaWJ1dGVzK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL2dlbytqc29uXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJnZW9qc29uXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vZ2VvK2pzb24tc2VxXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL2dlb3BhY2thZ2Urc3FsaXRlM1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9nZW94YWNtbCt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9nbHRmLWJ1ZmZlclwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9nbWwreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJnbWxcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9ncHgreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImdweFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL2d4ZlwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiZ3hmXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vZ3ppcFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogZmFsc2UsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImd6XCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vaDIyNFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9oZWxkK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL2hqc29uXCI6IHtcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiaGpzb25cIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9odHRwXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL2h5cGVyc3R1ZGlvXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wic3RrXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vaWJlLWtleS1yZXF1ZXN0K3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL2liZS1wa2ctcmVwbHkreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vaWJlLXBwLWRhdGFcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vaWdlc1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9pbS1pc2NvbXBvc2luZyt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY2hhcnNldFwiOiBcIlVURi04XCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL2luZGV4XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL2luZGV4LmNtZFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9pbmRleC5vYmpcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vaW5kZXgucmVzcG9uc2VcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vaW5kZXgudm5kXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL2lua21sK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiaW5rXCIsXCJpbmttbFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL2lvdHBcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vaXBmaXhcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJpcGZpeFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL2lwcFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9pc3VwXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL2l0cyt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIml0c1wiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL2phdmEtYXJjaGl2ZVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiBmYWxzZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiamFyXCIsXCJ3YXJcIixcImVhclwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL2phdmEtc2VyaWFsaXplZC1vYmplY3RcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogZmFsc2UsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInNlclwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL2phdmEtdm1cIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogZmFsc2UsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImNsYXNzXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vamF2YXNjcmlwdFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjaGFyc2V0XCI6IFwiVVRGLThcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJqc1wiLFwibWpzXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vamYyZmVlZCtqc29uXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vam9zZVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9qb3NlK2pzb25cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9qcmQranNvblwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL2pzY2FsZW5kYXIranNvblwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL2pzb25cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY2hhcnNldFwiOiBcIlVURi04XCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wianNvblwiLFwibWFwXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vanNvbi1wYXRjaCtqc29uXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vanNvbi1zZXFcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vanNvbjVcIjoge1xuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJqc29uNVwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL2pzb25tbCtqc29uXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImpzb25tbFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL2p3aytqc29uXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vandrLXNldCtqc29uXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vand0XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL2twbWwtcmVxdWVzdCt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9rcG1sLXJlc3BvbnNlK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL2xkK2pzb25cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImpzb25sZFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL2xncit4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImxnclwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL2xpbmstZm9ybWF0XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL2xvYWQtY29udHJvbCt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9sb3N0K3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wibG9zdHhtbFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL2xvc3RzeW5jK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL2xwZit6aXBcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IGZhbHNlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vbHhmXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL21hYy1iaW5oZXg0MFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImhxeFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL21hYy1jb21wYWN0cHJvXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJjcHRcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9tYWN3cml0ZWlpXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL21hZHMreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJtYWRzXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vbWFuaWZlc3QranNvblwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjaGFyc2V0XCI6IFwiVVRGLThcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ3ZWJtYW5pZmVzdFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL21hcmNcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJtcmNcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9tYXJjeG1sK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wibXJjeFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL21hdGhlbWF0aWNhXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wibWFcIixcIm5iXCIsXCJtYlwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL21hdGhtbCt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIm1hdGhtbFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL21hdGhtbC1jb250ZW50K3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL21hdGhtbC1wcmVzZW50YXRpb24reG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vbWJtcy1hc3NvY2lhdGVkLXByb2NlZHVyZS1kZXNjcmlwdGlvbit4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9tYm1zLWRlcmVnaXN0ZXIreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vbWJtcy1lbnZlbG9wZSt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9tYm1zLW1zayt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9tYm1zLW1zay1yZXNwb25zZSt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9tYm1zLXByb3RlY3Rpb24tZGVzY3JpcHRpb24reG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vbWJtcy1yZWNlcHRpb24tcmVwb3J0K3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL21ibXMtcmVnaXN0ZXIreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vbWJtcy1yZWdpc3Rlci1yZXNwb25zZSt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9tYm1zLXNjaGVkdWxlK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL21ibXMtdXNlci1zZXJ2aWNlLWRlc2NyaXB0aW9uK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL21ib3hcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJtYm94XCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vbWVkaWEtcG9saWN5LWRhdGFzZXQreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJtcGZcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9tZWRpYV9jb250cm9sK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL21lZGlhc2VydmVyY29udHJvbCt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIm1zY21sXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vbWVyZ2UtcGF0Y2granNvblwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL21ldGFsaW5rK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJtZXRhbGlua1wiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL21ldGFsaW5rNCt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIm1ldGE0XCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vbWV0cyt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIm1ldHNcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9tZjRcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vbWlrZXlcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vbWlwY1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9taXNzaW5nLWJsb2NrcytjYm9yLXNlcVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9tbXQtYWVpK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wibWFlaVwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL21tdC11c2QreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJtdXNkXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vbW9kcyt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIm1vZHNcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9tb3NzLWtleXNcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vbW9zcy1zaWduYXR1cmVcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vbW9zc2tleS1kYXRhXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL21vc3NrZXktcmVxdWVzdFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9tcDIxXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wibTIxXCIsXCJtcDIxXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vbXA0XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wibXA0c1wiLFwibTRwXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vbXBlZzQtZ2VuZXJpY1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9tcGVnNC1pb2RcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vbXBlZzQtaW9kLXhtdFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9tcmItY29uc3VtZXIreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vbXJiLXB1Ymxpc2greG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vbXNjLWl2cit4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY2hhcnNldFwiOiBcIlVURi04XCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL21zYy1taXhlcit4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY2hhcnNldFwiOiBcIlVURi04XCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL21zd29yZFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogZmFsc2UsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImRvY1wiLFwiZG90XCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vbXVkK2pzb25cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9tdWx0aXBhcnQtY29yZVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9teGZcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJteGZcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9uLXF1YWRzXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wibnFcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9uLXRyaXBsZXNcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJudFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL25hc2RhdGFcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vbmV3cy1jaGVja2dyb3Vwc1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjaGFyc2V0XCI6IFwiVVMtQVNDSUlcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL25ld3MtZ3JvdXBpbmZvXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNoYXJzZXRcIjogXCJVUy1BU0NJSVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vbmV3cy10cmFuc21pc3Npb25cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vbmxzbWwreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vbm9kZVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImNqc1wiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL25zc1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9vYXV0aC1hdXRoei1yZXErand0XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL29ibGl2aW91cy1kbnMtbWVzc2FnZVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9vY3NwLXJlcXVlc3RcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vb2NzcC1yZXNwb25zZVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW1cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IGZhbHNlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJiaW5cIixcImRtc1wiLFwibHJmXCIsXCJtYXJcIixcInNvXCIsXCJkaXN0XCIsXCJkaXN0elwiLFwicGtnXCIsXCJicGtcIixcImR1bXBcIixcImVsY1wiLFwiZGVwbG95XCIsXCJleGVcIixcImRsbFwiLFwiZGViXCIsXCJkbWdcIixcImlzb1wiLFwiaW1nXCIsXCJtc2lcIixcIm1zcFwiLFwibXNtXCIsXCJidWZmZXJcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9vZGFcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJvZGFcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9vZG0reG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vb2R4XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL29lYnBzLXBhY2thZ2UreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJvcGZcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9vZ2dcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IGZhbHNlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJvZ3hcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9vbWRvYyt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wib21kb2NcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9vbmVub3RlXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJvbmV0b2NcIixcIm9uZXRvYzJcIixcIm9uZXRtcFwiLFwib25lcGtnXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vb3BjLW5vZGVzZXQreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vb3Njb3JlXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL294cHNcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJveHBzXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vcDIxXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3AyMSt6aXBcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IGZhbHNlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vcDJwLW92ZXJsYXkreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJyZWxvXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vcGFyaXR5ZmVjXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3Bhc3Nwb3J0XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3BhdGNoLW9wcy1lcnJvcit4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInhlclwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3BkZlwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogZmFsc2UsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInBkZlwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3BkeFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9wZW0tY2VydGlmaWNhdGUtY2hhaW5cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vcGdwLWVuY3J5cHRlZFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogZmFsc2UsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInBncFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3BncC1rZXlzXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiYXNjXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vcGdwLXNpZ25hdHVyZVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImFzY1wiLFwic2lnXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vcGljcy1ydWxlc1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wicHJmXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vcGlkZit4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY2hhcnNldFwiOiBcIlVURi04XCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3BpZGYtZGlmZit4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY2hhcnNldFwiOiBcIlVURi04XCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3BrY3MxMFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInAxMFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3BrY3MxMlwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9wa2NzNy1taW1lXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wicDdtXCIsXCJwN2NcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9wa2NzNy1zaWduYXR1cmVcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJwN3NcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9wa2NzOFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInA4XCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vcGtjczgtZW5jcnlwdGVkXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3BraXgtYXR0ci1jZXJ0XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiYWNcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9wa2l4LWNlcnRcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJjZXJcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9wa2l4LWNybFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImNybFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3BraXgtcGtpcGF0aFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInBraXBhdGhcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9wa2l4Y21wXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wicGtpXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vcGxzK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wicGxzXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vcG9jLXNldHRpbmdzK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjaGFyc2V0XCI6IFwiVVRGLThcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vcG9zdHNjcmlwdFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiYWlcIixcImVwc1wiLFwicHNcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9wcHNwLXRyYWNrZXIranNvblwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3Byb2JsZW0ranNvblwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3Byb2JsZW0reG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vcHJvdmVuYW5jZSt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInByb3Z4XCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vcHJzLmFsdmVzdHJhbmQudGl0cmF4LXNoZWV0XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3Bycy5jd3dcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJjd3dcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9wcnMuY3luXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNoYXJzZXRcIjogXCI3LUJJVFwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vcHJzLmhwdWIremlwXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiBmYWxzZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3Bycy5ucHJlbmRcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vcHJzLnBsdWNrZXJcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vcHJzLnJkZi14bWwtY3J5cHRcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vcHJzLnhzZit4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9wc2tjK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wicHNrY3htbFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3B2ZCtqc29uXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vcXNpZ1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9yYW1sK3lhbWxcIjoge1xuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInJhbWxcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9yYXB0b3JmZWNcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vcmRhcCtqc29uXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vcmRmK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wicmRmXCIsXCJvd2xcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9yZWdpbmZvK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wicmlmXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vcmVsYXgtbmctY29tcGFjdC1zeW50YXhcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJybmNcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9yZW1vdGUtcHJpbnRpbmdcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vcmVwdXRvbitqc29uXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vcmVzb3VyY2UtbGlzdHMreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJybFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3Jlc291cmNlLWxpc3RzLWRpZmYreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJybGRcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9yZmMreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vcmlzY29zXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3JsbWkreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vcmxzLXNlcnZpY2VzK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wicnNcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9yb3V0ZS1hcGQreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJyYXBkXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vcm91dGUtcy10c2lkK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wic2xzXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vcm91dGUtdXNkK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wicnVzZFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3Jwa2ktZ2hvc3RidXN0ZXJzXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiZ2JyXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vcnBraS1tYW5pZmVzdFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIm1mdFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3Jwa2ktcHVibGljYXRpb25cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vcnBraS1yb2FcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJyb2FcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9ycGtpLXVwZG93blwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9yc2QreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInJzZFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3Jzcyt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wicnNzXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vcnRmXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJydGZcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9ydHBsb29wYmFja1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9ydHhcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vc2FtbGFzc2VydGlvbit4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9zYW1sbWV0YWRhdGEreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vc2FyaWYranNvblwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3NhcmlmLWV4dGVybmFsLXByb3BlcnRpZXMranNvblwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3NiZVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9zYm1sK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wic2JtbFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3NjYWlwK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3NjaW0ranNvblwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3NjdnAtY3YtcmVxdWVzdFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInNjcVwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3NjdnAtY3YtcmVzcG9uc2VcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJzY3NcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9zY3ZwLXZwLXJlcXVlc3RcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJzcHFcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9zY3ZwLXZwLXJlc3BvbnNlXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wic3BwXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vc2RwXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wic2RwXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vc2VjZXZlbnQrand0XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3Nlbm1sK2Nib3JcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vc2VubWwranNvblwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3Nlbm1sK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wic2VubWx4XCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vc2VubWwtZXRjaCtjYm9yXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3Nlbm1sLWV0Y2granNvblwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3Nlbm1sLWV4aVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9zZW5zbWwrY2JvclwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9zZW5zbWwranNvblwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3NlbnNtbCt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInNlbnNtbHhcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9zZW5zbWwtZXhpXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3NlcCt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9zZXAtZXhpXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3Nlc3Npb24taW5mb1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9zZXQtcGF5bWVudFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9zZXQtcGF5bWVudC1pbml0aWF0aW9uXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wic2V0cGF5XCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vc2V0LXJlZ2lzdHJhdGlvblwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9zZXQtcmVnaXN0cmF0aW9uLWluaXRpYXRpb25cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJzZXRyZWdcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9zZ21sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3NnbWwtb3Blbi1jYXRhbG9nXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3NoZit4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInNoZlwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3NpZXZlXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wic2l2XCIsXCJzaWV2ZVwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3NpbXBsZS1maWx0ZXIreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vc2ltcGxlLW1lc3NhZ2Utc3VtbWFyeVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9zaW1wbGVzeW1ib2xjb250YWluZXJcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vc2lwY1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9zbGF0ZVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9zbWlsXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3NtaWwreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJzbWlcIixcInNtaWxcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9zbXB0ZTMzNm1cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vc29hcCtmYXN0aW5mb3NldFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9zb2FwK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3NwYXJxbC1xdWVyeVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInJxXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vc3BhcnFsLXJlc3VsdHMreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJzcnhcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9zcGR4K2pzb25cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9zcGlyaXRzLWV2ZW50K3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3NxbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9zcmdzXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiZ3JhbVwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3NyZ3MreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJncnhtbFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3NydSt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInNydVwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3NzZGwreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInNzZGxcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi9zc21sK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wic3NtbFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3N0aXgranNvblwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3N3aWQreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJzd2lkdGFnXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdGFtcC1hcGV4LXVwZGF0ZVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi90YW1wLWFwZXgtdXBkYXRlLWNvbmZpcm1cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdGFtcC1jb21tdW5pdHktdXBkYXRlXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3RhbXAtY29tbXVuaXR5LXVwZGF0ZS1jb25maXJtXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3RhbXAtZXJyb3JcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdGFtcC1zZXF1ZW5jZS1hZGp1c3RcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdGFtcC1zZXF1ZW5jZS1hZGp1c3QtY29uZmlybVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi90YW1wLXN0YXR1cy1xdWVyeVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi90YW1wLXN0YXR1cy1yZXNwb25zZVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi90YW1wLXVwZGF0ZVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi90YW1wLXVwZGF0ZS1jb25maXJtXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3RhclwiOiB7XG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3RheGlpK2pzb25cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi90ZCtqc29uXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdGVpK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1widGVpXCIsXCJ0ZWljb3JwdXNcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi90ZXRyYV9pc2lcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdGhyYXVkK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1widGZpXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdGltZXN0YW1wLXF1ZXJ5XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3RpbWVzdGFtcC1yZXBseVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi90aW1lc3RhbXBlZC1kYXRhXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1widHNkXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdGxzcnB0K2d6aXBcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdGxzcnB0K2pzb25cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi90bmF1dGhsaXN0XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3Rva2VuLWludHJvc3BlY3Rpb24rand0XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3RvbWxcIjoge1xuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInRvbWxcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi90cmlja2xlLWljZS1zZHBmcmFnXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3RyaWdcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ0cmlnXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdHRtbCt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInR0bWxcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi90dmUtdHJpZ2dlclwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi90emlmXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3R6aWYtbGVhcFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi91Ympzb25cIjoge1xuICAgIFwiY29tcHJlc3NpYmxlXCI6IGZhbHNlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ1YmpcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi91bHBmZWNcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdXJjLWdycHNoZWV0K3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3VyYy1yZXNzaGVldCt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInJzaGVldFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3VyYy10YXJnZXRkZXNjK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1widGRcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi91cmMtdWlzb2NrZXRkZXNjK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZjYXJkK2pzb25cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92Y2FyZCt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92ZW1taVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92aXZpZGVuY2Uuc2NyaXB0ZmlsZVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC4xMDAwbWluZHMuZGVjaXNpb24tbW9kZWwreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCIxa21cIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuM2dwcC1wcm9zZSt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuM2dwcC1wcm9zZS1wYzNjaCt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuM2dwcC12MngtbG9jYWwtc2VydmljZS1pbmZvcm1hdGlvblwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuM2dwcC41Z25hc1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuM2dwcC5hY2Nlc3MtdHJhbnNmZXItZXZlbnRzK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC4zZ3BwLmJzZit4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuM2dwcC5nbW9wK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC4zZ3BwLmd0cGNcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLjNncHAuaW50ZXJ3b3JraW5nLWRhdGFcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLjNncHAubHBwXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC4zZ3BwLm1jLXNpZ25hbGxpbmctZWFyXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC4zZ3BwLm1jZGF0YS1hZmZpbGlhdGlvbi1jb21tYW5kK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC4zZ3BwLm1jZGF0YS1pbmZvK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC4zZ3BwLm1jZGF0YS1wYXlsb2FkXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC4zZ3BwLm1jZGF0YS1zZXJ2aWNlLWNvbmZpZyt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuM2dwcC5tY2RhdGEtc2lnbmFsbGluZ1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuM2dwcC5tY2RhdGEtdWUtY29uZmlnK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC4zZ3BwLm1jZGF0YS11c2VyLXByb2ZpbGUreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLjNncHAubWNwdHQtYWZmaWxpYXRpb24tY29tbWFuZCt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuM2dwcC5tY3B0dC1mbG9vci1yZXF1ZXN0K3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC4zZ3BwLm1jcHR0LWluZm8reG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLjNncHAubWNwdHQtbG9jYXRpb24taW5mbyt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuM2dwcC5tY3B0dC1tYm1zLXVzYWdlLWluZm8reG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLjNncHAubWNwdHQtc2VydmljZS1jb25maWcreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLjNncHAubWNwdHQtc2lnbmVkK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC4zZ3BwLm1jcHR0LXVlLWNvbmZpZyt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuM2dwcC5tY3B0dC11ZS1pbml0LWNvbmZpZyt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuM2dwcC5tY3B0dC11c2VyLXByb2ZpbGUreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLjNncHAubWN2aWRlby1hZmZpbGlhdGlvbi1jb21tYW5kK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC4zZ3BwLm1jdmlkZW8tYWZmaWxpYXRpb24taW5mbyt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuM2dwcC5tY3ZpZGVvLWluZm8reG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLjNncHAubWN2aWRlby1sb2NhdGlvbi1pbmZvK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC4zZ3BwLm1jdmlkZW8tbWJtcy11c2FnZS1pbmZvK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC4zZ3BwLm1jdmlkZW8tc2VydmljZS1jb25maWcreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLjNncHAubWN2aWRlby10cmFuc21pc3Npb24tcmVxdWVzdCt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuM2dwcC5tY3ZpZGVvLXVlLWNvbmZpZyt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuM2dwcC5tY3ZpZGVvLXVzZXItcHJvZmlsZSt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuM2dwcC5taWQtY2FsbCt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuM2dwcC5uZ2FwXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC4zZ3BwLnBmY3BcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLjNncHAucGljLWJ3LWxhcmdlXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wicGxiXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLjNncHAucGljLWJ3LXNtYWxsXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wicHNiXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLjNncHAucGljLWJ3LXZhclwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInB2YlwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC4zZ3BwLnMxYXBcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLjNncHAuc21zXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC4zZ3BwLnNtcyt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuM2dwcC5zcnZjYy1leHQreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLjNncHAuc3J2Y2MtaW5mbyt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuM2dwcC5zdGF0ZS1hbmQtZXZlbnQtaW5mbyt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuM2dwcC51c3NkK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC4zZ3BwMi5iY21jc2luZm8reG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLjNncHAyLnNtc1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuM2dwcDIudGNhcFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInRjYXBcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuM2xpZ2h0c3NvZnR3YXJlLmltYWdlc2NhbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuM20ucG9zdC1pdC1ub3Rlc1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInB3blwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5hY2NwYWMuc2ltcGx5LmFzb1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImFzb1wiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5hY2NwYWMuc2ltcGx5LmltcFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImltcFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5hY3Vjb2JvbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImFjdVwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5hY3Vjb3JwXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiYXRjXCIsXCJhY3V0Y1wiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5hZG9iZS5haXItYXBwbGljYXRpb24taW5zdGFsbGVyLXBhY2thZ2UremlwXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IGZhbHNlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJhaXJcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuYWRvYmUuZmxhc2gubW92aWVcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmFkb2JlLmZvcm1zY2VudHJhbC5mY2R0XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiZmNkdFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5hZG9iZS5meHBcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJmeHBcIixcImZ4cGxcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuYWRvYmUucGFydGlhbC11cGxvYWRcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmFkb2JlLnhkcCt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInhkcFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5hZG9iZS54ZmRmXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wieGZkZlwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5hZXRoZXIuaW1wXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5hZnBjLmFmcGxpbmVkYXRhXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5hZnBjLmFmcGxpbmVkYXRhLXBhZ2VkZWZcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmFmcGMuY21vY2EtY21yZXNvdXJjZVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuYWZwYy5mb2NhLWNoYXJzZXRcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmFmcGMuZm9jYS1jb2RlZGZvbnRcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmFmcGMuZm9jYS1jb2RlcGFnZVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuYWZwYy5tb2RjYVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuYWZwYy5tb2RjYS1jbXRhYmxlXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5hZnBjLm1vZGNhLWZvcm1kZWZcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmFmcGMubW9kY2EtbWVkaXVtbWFwXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5hZnBjLm1vZGNhLW9iamVjdGNvbnRhaW5lclwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuYWZwYy5tb2RjYS1vdmVybGF5XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5hZnBjLm1vZGNhLXBhZ2VzZWdtZW50XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5hZ2VcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJhZ2VcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuYWgtYmFyY29kZVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuYWhlYWQuc3BhY2VcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJhaGVhZFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5haXJ6aXAuZmlsZXNlY3VyZS5hemZcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJhemZcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuYWlyemlwLmZpbGVzZWN1cmUuYXpzXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiYXpzXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmFtYWRldXMranNvblwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5hbWF6b24uZWJvb2tcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImF6d1wiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5hbWF6b24ubW9iaTgtZWJvb2tcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmFtZXJpY2FuZHluYW1pY3MuYWNjXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiYWNjXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmFtaWdhLmFtaVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImFtaVwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5hbXVuZHNlbi5tYXplK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5hbmRyb2lkLm90YVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuYW5kcm9pZC5wYWNrYWdlLWFyY2hpdmVcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogZmFsc2UsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImFwa1wiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5hbmtpXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5hbnNlci13ZWItY2VydGlmaWNhdGUtaXNzdWUtaW5pdGlhdGlvblwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImNpaVwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5hbnNlci13ZWItZnVuZHMtdHJhbnNmZXItaW5pdGlhdGlvblwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiZnRpXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmFudGl4LmdhbWUtY29tcG9uZW50XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiYXR4XCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmFwYWNoZS5hcnJvdy5maWxlXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5hcGFjaGUuYXJyb3cuc3RyZWFtXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5hcGFjaGUudGhyaWZ0LmJpbmFyeVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuYXBhY2hlLnRocmlmdC5jb21wYWN0XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5hcGFjaGUudGhyaWZ0Lmpzb25cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmFwaStqc29uXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmFwbGV4dG9yLndhcnJwK2pzb25cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuYXBvdGhla2VuZGUucmVzZXJ2YXRpb24ranNvblwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5hcHBsZS5pbnN0YWxsZXIreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJtcGtnXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmFwcGxlLmtleW5vdGVcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJrZXlcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuYXBwbGUubXBlZ3VybFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIm0zdThcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuYXBwbGUubnVtYmVyc1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIm51bWJlcnNcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuYXBwbGUucGFnZXNcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJwYWdlc1wiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5hcHBsZS5wa3Bhc3NcIjoge1xuICAgIFwiY29tcHJlc3NpYmxlXCI6IGZhbHNlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJwa3Bhc3NcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuYXJhc3RyYS5zd2lcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmFyaXN0YW5ldHdvcmtzLnN3aVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInN3aVwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5hcnRpc2FuK2pzb25cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuYXJ0c3F1YXJlXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5hc3RyYWVhLXNvZnR3YXJlLmlvdGFcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJpb3RhXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmF1ZGlvZ3JhcGhcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJhZXBcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuYXV0b3BhY2thZ2VcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmF2YWxvbitqc29uXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmF2aXN0YXIreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmJhbHNhbWlxLmJtbWwreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJibW1sXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmJhbHNhbWlxLmJtcHJcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmJhbmFuYS1hY2NvdW50aW5nXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5iYmYudXNwLmVycm9yXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5iYmYudXNwLm1zZ1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuYmJmLnVzcC5tc2cranNvblwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5iZWtpdHp1ci1zdGVjaCtqc29uXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmJpbnQubWVkLWNvbnRlbnRcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmJpb3BheC5yZGYreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmJsaW5rLWlkYi12YWx1ZS13cmFwcGVyXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5ibHVlaWNlLm11bHRpcGFzc1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIm1wbVwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5ibHVldG9vdGguZXAub29iXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5ibHVldG9vdGgubGUub29iXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5ibWlcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJibWlcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuYnBmXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5icGYzXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5idXNpbmVzc29iamVjdHNcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJyZXBcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuYnl1LnVhcGkranNvblwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5jYWItanNjcmlwdFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuY2Fub24tY3BkbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuY2Fub24tbGlwc1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuY2FwYXN5c3RlbXMtcGcranNvblwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5jZW5kaW8udGhpbmxpbmMuY2xpZW50Y29uZlwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuY2VudHVyeS1zeXN0ZW1zLnRjcF9zdHJlYW1cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmNoZW1kcmF3K3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiY2R4bWxcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuY2hlc3MtcGduXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5jaGlwbnV0cy5rYXJhb2tlLW1tZFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIm1tZFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5jaWVkaVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuY2luZGVyZWxsYVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImNkeVwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5jaXJwYWNrLmlzZG4tZXh0XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5jaXRhdGlvbnN0eWxlcy5zdHlsZSt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImNzbFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5jbGF5bW9yZVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImNsYVwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5jbG9hbnRvLnJwOVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInJwOVwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5jbG9uay5jNGdyb3VwXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiYzRnXCIsXCJjNGRcIixcImM0ZlwiLFwiYzRwXCIsXCJjNHVcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuY2x1ZXRydXN0LmNhcnRvbW9iaWxlLWNvbmZpZ1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImMxMWFtY1wiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5jbHVldHJ1c3QuY2FydG9tb2JpbGUtY29uZmlnLXBrZ1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImMxMWFtelwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5jb2ZmZWVzY3JpcHRcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmNvbGxhYmlvLnhvZG9jdW1lbnRzLmRvY3VtZW50XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5jb2xsYWJpby54b2RvY3VtZW50cy5kb2N1bWVudC10ZW1wbGF0ZVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuY29sbGFiaW8ueG9kb2N1bWVudHMucHJlc2VudGF0aW9uXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5jb2xsYWJpby54b2RvY3VtZW50cy5wcmVzZW50YXRpb24tdGVtcGxhdGVcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmNvbGxhYmlvLnhvZG9jdW1lbnRzLnNwcmVhZHNoZWV0XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5jb2xsYWJpby54b2RvY3VtZW50cy5zcHJlYWRzaGVldC10ZW1wbGF0ZVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuY29sbGVjdGlvbitqc29uXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmNvbGxlY3Rpb24uZG9jK2pzb25cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuY29sbGVjdGlvbi5uZXh0K2pzb25cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuY29taWNib29rK3ppcFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogZmFsc2VcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuY29taWNib29rLXJhclwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuY29tbWVyY2UtYmF0dGVsbGVcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmNvbW1vbnNwYWNlXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiY3NwXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmNvbnRhY3QuY21zZ1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImNkYmNtc2dcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuY29yZW9zLmlnbml0aW9uK2pzb25cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuY29zbW9jYWxsZXJcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJjbWNcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuY3JpY2suY2xpY2tlclwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImNsa3hcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuY3JpY2suY2xpY2tlci5rZXlib2FyZFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImNsa2tcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuY3JpY2suY2xpY2tlci5wYWxldHRlXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiY2xrcFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5jcmljay5jbGlja2VyLnRlbXBsYXRlXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiY2xrdFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5jcmljay5jbGlja2VyLndvcmRiYW5rXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiY2xrd1wiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5jcml0aWNhbHRvb2xzLndicyt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIndic1wiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5jcnlwdGlpLnBpcGUranNvblwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5jcnlwdG8tc2hhZGUtZmlsZVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuY3J5cHRvbWF0b3IuZW5jcnlwdGVkXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5jcnlwdG9tYXRvci52YXVsdFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuY3RjLXBvc21sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wicG1sXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmN0Y3Qud3MreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmN1cHMtcGRmXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5jdXBzLXBvc3RzY3JpcHRcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmN1cHMtcHBkXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wicHBkXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmN1cHMtcmFzdGVyXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5jdXBzLXJhd1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuY3VybFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuY3VybC5jYXJcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImNhclwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5jdXJsLnBjdXJsXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJwY3VybFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5jeWFuLmRlYW4ucm9vdCt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuY3liYW5rXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5jeWNsb25lZHgranNvblwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5jeWNsb25lZHgreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmQybC5jb3Vyc2VwYWNrYWdlMXAwK3ppcFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogZmFsc2VcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuZDNtLWRhdGFzZXRcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmQzbS1wcm9ibGVtXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5kYXJ0XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJkYXJ0XCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmRhdGEtdmlzaW9uLnJkelwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInJkelwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5kYXRhcGFja2FnZStqc29uXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmRhdGFyZXNvdXJjZStqc29uXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmRiZlwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImRiZlwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5kZWJpYW4uYmluYXJ5LXBhY2thZ2VcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmRlY2UuZGF0YVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInV2ZlwiLFwidXZ2ZlwiLFwidXZkXCIsXCJ1dnZkXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmRlY2UudHRtbCt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInV2dFwiLFwidXZ2dFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5kZWNlLnVuc3BlY2lmaWVkXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1widXZ4XCIsXCJ1dnZ4XCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmRlY2UuemlwXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1widXZ6XCIsXCJ1dnZ6XCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmRlbm92by5mY3NlbGF5b3V0LWxpbmtcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJmZV9sYXVuY2hcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuZGVzbXVtZS5tb3ZpZVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuZGlyLWJpLnBsYXRlLWRsLW5vc3VmZml4XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5kbS5kZWxlZ2F0aW9uK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5kbmFcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJkbmFcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuZG9jdW1lbnQranNvblwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5kb2xieS5tbHBcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIm1scFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5kb2xieS5tb2JpbGUuMVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuZG9sYnkubW9iaWxlLjJcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmRvcmVtaXIuc2NvcmVjbG91ZC1iaW5hcnktZG9jdW1lbnRcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmRwZ3JhcGhcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJkcGdcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuZHJlYW1mYWN0b3J5XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiZGZhY1wiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5kcml2ZStqc29uXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmRzLWtleXBvaW50XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJrcHh4XCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmR0Zy5sb2NhbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuZHRnLmxvY2FsLmZsYXNoXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5kdGcubG9jYWwuaHRtbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuZHZiLmFpdFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImFpdFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5kdmIuZHZiaXNsK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5kdmIuZHZialwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuZHZiLmVzZ2NvbnRhaW5lclwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuZHZiLmlwZGNkZnRub3RpZmFjY2Vzc1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuZHZiLmlwZGNlc2dhY2Nlc3NcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmR2Yi5pcGRjZXNnYWNjZXNzMlwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuZHZiLmlwZGNlc2dwZGRcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmR2Yi5pcGRjcm9hbWluZ1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuZHZiLmlwdHYuYWxmZWMtYmFzZVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuZHZiLmlwdHYuYWxmZWMtZW5oYW5jZW1lbnRcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmR2Yi5ub3RpZi1hZ2dyZWdhdGUtcm9vdCt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuZHZiLm5vdGlmLWNvbnRhaW5lcit4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuZHZiLm5vdGlmLWdlbmVyaWMreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmR2Yi5ub3RpZi1pYS1tc2dsaXN0K3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5kdmIubm90aWYtaWEtcmVnaXN0cmF0aW9uLXJlcXVlc3QreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmR2Yi5ub3RpZi1pYS1yZWdpc3RyYXRpb24tcmVzcG9uc2UreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmR2Yi5ub3RpZi1pbml0K3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5kdmIucGZyXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5kdmIuc2VydmljZVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInN2Y1wiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5keHJcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmR5bmFnZW9cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJnZW9cIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuZHpyXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5lYXN5a2FyYW9rZS5jZGdkb3dubG9hZFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuZWNkaXMtdXBkYXRlXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5lY2lwLnJscFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuZWNsaXBzZS5kaXR0bytqc29uXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmVjb3dpbi5jaGFydFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIm1hZ1wiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5lY293aW4uZmlsZXJlcXVlc3RcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmVjb3dpbi5maWxldXBkYXRlXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5lY293aW4uc2VyaWVzXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5lY293aW4uc2VyaWVzcmVxdWVzdFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuZWNvd2luLnNlcmllc3VwZGF0ZVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuZWZpLmltZ1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuZWZpLmlzb1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuZW1jbGllbnQuYWNjZXNzcmVxdWVzdCt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuZW5saXZlblwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIm5tbFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5lbnBoYXNlLmVudm95XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5lcHJpbnRzLmRhdGEreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmVwc29uLmVzZlwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImVzZlwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5lcHNvbi5tc2ZcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJtc2ZcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuZXBzb24ucXVpY2thbmltZVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInFhbVwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5lcHNvbi5zYWx0XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wic2x0XCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmVwc29uLnNzZlwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInNzZlwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5lcmljc3Nvbi5xdWlja2NhbGxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmVzcGFzcy1lc3Bhc3MremlwXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiBmYWxzZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5lc3ppZ25vMyt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImVzM1wiLFwiZXQzXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmV0c2kuYW9jK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5ldHNpLmFzaWMtZSt6aXBcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IGZhbHNlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmV0c2kuYXNpYy1zK3ppcFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogZmFsc2VcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuZXRzaS5jdWcreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmV0c2kuaXB0dmNvbW1hbmQreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmV0c2kuaXB0dmRpc2NvdmVyeSt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuZXRzaS5pcHR2cHJvZmlsZSt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuZXRzaS5pcHR2c2FkLWJjK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5ldHNpLmlwdHZzYWQtY29kK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5ldHNpLmlwdHZzYWQtbnB2cit4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuZXRzaS5pcHR2c2VydmljZSt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuZXRzaS5pcHR2c3luYyt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuZXRzaS5pcHR2dWVwcm9maWxlK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5ldHNpLm1jaWQreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmV0c2kubWhlZzVcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmV0c2kub3ZlcmxvYWQtY29udHJvbC1wb2xpY3ktZGF0YXNldCt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuZXRzaS5wc3RuK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5ldHNpLnNjaSt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuZXRzaS5zaW1zZXJ2cyt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuZXRzaS50aW1lc3RhbXAtdG9rZW5cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmV0c2kudHNsK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5ldHNpLnRzbC5kZXJcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmV1Lmthc3Bhcmlhbi5jYXIranNvblwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5ldWRvcmEuZGF0YVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuZXZvbHYuZWNpZy5wcm9maWxlXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5ldm9sdi5lY2lnLnNldHRpbmdzXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5ldm9sdi5lY2lnLnRoZW1lXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5leHN0cmVhbS1lbXBvd2VyK3ppcFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogZmFsc2VcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuZXhzdHJlYW0tcGFja2FnZVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuZXpwaXgtYWxidW1cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJlejJcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuZXpwaXgtcGFja2FnZVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImV6M1wiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5mLXNlY3VyZS5tb2JpbGVcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmZhbWlseXNlYXJjaC5nZWRjb20remlwXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiBmYWxzZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5mYXN0Y29weS1kaXNrLWltYWdlXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5mZGZcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJmZGZcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuZmRzbi5tc2VlZFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIm1zZWVkXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmZkc24uc2VlZFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInNlZWRcIixcImRhdGFsZXNzXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmZmc25zXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5maWNsYWIuZmxiK3ppcFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogZmFsc2VcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuZmlsbWl0LnpmY1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuZmludHNcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmZpcmVtb25rZXlzLmNsb3VkY2VsbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuZmxvZ3JhcGhpdFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImdwaFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5mbHV4dGltZS5jbGlwXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiZnRjXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmZvbnQtZm9udGZvcmdlLXNmZFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuZnJhbWVtYWtlclwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImZtXCIsXCJmcmFtZVwiLFwibWFrZXJcIixcImJvb2tcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuZnJvZ2Fucy5mbmNcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJmbmNcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuZnJvZ2Fucy5sdGZcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJsdGZcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuZnNjLndlYmxhdW5jaFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImZzY1wiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5mdWppZmlsbS5mYi5kb2N1d29ya3NcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmZ1amlmaWxtLmZiLmRvY3V3b3Jrcy5iaW5kZXJcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmZ1amlmaWxtLmZiLmRvY3V3b3Jrcy5jb250YWluZXJcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmZ1amlmaWxtLmZiLmpmaSt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuZnVqaXRzdS5vYXN5c1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIm9hc1wiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5mdWppdHN1Lm9hc3lzMlwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIm9hMlwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5mdWppdHN1Lm9hc3lzM1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIm9hM1wiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5mdWppdHN1Lm9hc3lzZ3BcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJmZzVcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuZnVqaXRzdS5vYXN5c3Byc1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImJoMlwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5mdWppeGVyb3guYXJ0LWV4XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5mdWppeGVyb3guYXJ0NFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuZnVqaXhlcm94LmRkZFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImRkZFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5mdWppeGVyb3guZG9jdXdvcmtzXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wieGR3XCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmZ1aml4ZXJveC5kb2N1d29ya3MuYmluZGVyXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wieGJkXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmZ1aml4ZXJveC5kb2N1d29ya3MuY29udGFpbmVyXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5mdWppeGVyb3guaGJwbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuZnV0LW1pc25ldFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuZnV0b2luK2Nib3JcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmZ1dG9pbitqc29uXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmZ1enp5c2hlZXRcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJmenNcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuZ2Vub21hdGl4LnR1eGVkb1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInR4ZFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5nZW50aWNzLmdyZCtqc29uXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmdlbytqc29uXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmdlb2N1YmUreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmdlb2dlYnJhLmZpbGVcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJnZ2JcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuZ2VvZ2VicmEuc2xpZGVzXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5nZW9nZWJyYS50b29sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiZ2d0XCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmdlb21ldHJ5LWV4cGxvcmVyXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiZ2V4XCIsXCJncmVcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuZ2VvbmV4dFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImd4dFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5nZW9wbGFuXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiZzJ3XCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmdlb3NwYWNlXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiZzN3XCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmdlcmJlclwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuZ2xvYmFscGxhdGZvcm0uY2FyZC1jb250ZW50LW1ndFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuZ2xvYmFscGxhdGZvcm0uY2FyZC1jb250ZW50LW1ndC1yZXNwb25zZVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuZ214XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiZ214XCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmdvb2dsZS1hcHBzLmRvY3VtZW50XCI6IHtcbiAgICBcImNvbXByZXNzaWJsZVwiOiBmYWxzZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiZ2RvY1wiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5nb29nbGUtYXBwcy5wcmVzZW50YXRpb25cIjoge1xuICAgIFwiY29tcHJlc3NpYmxlXCI6IGZhbHNlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJnc2xpZGVzXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmdvb2dsZS1hcHBzLnNwcmVhZHNoZWV0XCI6IHtcbiAgICBcImNvbXByZXNzaWJsZVwiOiBmYWxzZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiZ3NoZWV0XCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmdvb2dsZS1lYXJ0aC5rbWwreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJrbWxcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuZ29vZ2xlLWVhcnRoLmttelwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogZmFsc2UsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImttelwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5nb3Yuc2suZS1mb3JtK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5nb3Yuc2suZS1mb3JtK3ppcFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogZmFsc2VcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuZ292LnNrLnhtbGRhdGFjb250YWluZXIreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmdyYWZlcVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImdxZlwiLFwiZ3FzXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmdyaWRtcFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuZ3Jvb3ZlLWFjY291bnRcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJnYWNcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuZ3Jvb3ZlLWhlbHBcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJnaGZcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuZ3Jvb3ZlLWlkZW50aXR5LW1lc3NhZ2VcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJnaW1cIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuZ3Jvb3ZlLWluamVjdG9yXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiZ3J2XCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmdyb292ZS10b29sLW1lc3NhZ2VcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJndG1cIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuZ3Jvb3ZlLXRvb2wtdGVtcGxhdGVcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ0cGxcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuZ3Jvb3ZlLXZjYXJkXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1widmNnXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmhhbCtqc29uXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmhhbCt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImhhbFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5oYW5kaGVsZC1lbnRlcnRhaW5tZW50K3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiem1tXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmhiY2lcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJoYmNpXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmhjK2pzb25cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuaGNsLWJpcmVwb3J0c1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuaGR0XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5oZXJva3UranNvblwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5oaGUubGVzc29uLXBsYXllclwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImxlc1wiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5obDdjZGEreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNoYXJzZXRcIjogXCJVVEYtOFwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuaGw3djIreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNoYXJzZXRcIjogXCJVVEYtOFwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuaHAtaHBnbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImhwZ2xcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuaHAtaHBpZFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImhwaWRcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuaHAtaHBzXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiaHBzXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmhwLWpseXRcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJqbHRcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuaHAtcGNsXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wicGNsXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmhwLXBjbHhsXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wicGNseGxcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuaHR0cGhvbmVcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmh5ZHJvc3RhdGl4LnNvZi1kYXRhXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wic2ZkLWhkc3R4XCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmh5cGVyK2pzb25cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuaHlwZXItaXRlbStqc29uXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmh5cGVyZHJpdmUranNvblwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5oem4tM2QtY3Jvc3N3b3JkXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5pYm0uYWZwbGluZWRhdGFcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmlibS5lbGVjdHJvbmljLW1lZGlhXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5pYm0ubWluaXBheVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIm1weVwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5pYm0ubW9kY2FwXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiYWZwXCIsXCJsaXN0YWZwXCIsXCJsaXN0MzgyMFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5pYm0ucmlnaHRzLW1hbmFnZW1lbnRcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJpcm1cIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuaWJtLnNlY3VyZS1jb250YWluZXJcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJzY1wiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5pY2Nwcm9maWxlXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiaWNjXCIsXCJpY21cIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuaWVlZS4xOTA1XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5pZ2xvYWRlclwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImlnbFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5pbWFnZW1ldGVyLmZvbGRlcit6aXBcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IGZhbHNlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmltYWdlbWV0ZXIuaW1hZ2UremlwXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiBmYWxzZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5pbW1lcnZpc2lvbi1pdnBcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJpdnBcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuaW1tZXJ2aXNpb24taXZ1XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiaXZ1XCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmltcy5pbXNjY3YxcDFcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmltcy5pbXNjY3YxcDJcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmltcy5pbXNjY3YxcDNcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmltcy5saXMudjIucmVzdWx0K2pzb25cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuaW1zLmx0aS52Mi50b29sY29uc3VtZXJwcm9maWxlK2pzb25cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuaW1zLmx0aS52Mi50b29scHJveHkranNvblwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5pbXMubHRpLnYyLnRvb2xwcm94eS5pZCtqc29uXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmltcy5sdGkudjIudG9vbHNldHRpbmdzK2pzb25cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuaW1zLmx0aS52Mi50b29sc2V0dGluZ3Muc2ltcGxlK2pzb25cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuaW5mb3JtZWRjb250cm9sLnJtcyt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuaW5mb3JtaXgtdmlzaW9uYXJ5XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5pbmZvdGVjaC5wcm9qZWN0XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5pbmZvdGVjaC5wcm9qZWN0K3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5pbm5vcGF0aC53YW1wLm5vdGlmaWNhdGlvblwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuaW5zb3JzLmlnbVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImlnbVwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5pbnRlcmNvbi5mb3JtbmV0XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wieHB3XCIsXCJ4cHhcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuaW50ZXJnZW9cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJpMmdcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuaW50ZXJ0cnVzdC5kaWdpYm94XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5pbnRlcnRydXN0Lm5uY3BcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmludHUucWJvXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wicWJvXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmludHUucWZ4XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wicWZ4XCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmlwdGMuZzIuY2F0YWxvZ2l0ZW0reG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmlwdGMuZzIuY29uY2VwdGl0ZW0reG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmlwdGMuZzIua25vd2xlZGdlaXRlbSt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuaXB0Yy5nMi5uZXdzaXRlbSt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuaXB0Yy5nMi5uZXdzbWVzc2FnZSt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuaXB0Yy5nMi5wYWNrYWdlaXRlbSt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuaXB0Yy5nMi5wbGFubmluZ2l0ZW0reG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmlwdW5wbHVnZ2VkLnJjcHJvZmlsZVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInJjcHJvZmlsZVwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5pcmVwb3NpdG9yeS5wYWNrYWdlK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiaXJwXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmlzLXhwclwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInhwclwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5pc2FjLmZjc1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImZjc1wiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5pc28xMTc4My0xMCt6aXBcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IGZhbHNlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmphbVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImphbVwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5qYXBhbm5ldC1kaXJlY3Rvcnktc2VydmljZVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuamFwYW5uZXQtanBuc3RvcmUtd2FrZXVwXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5qYXBhbm5ldC1wYXltZW50LXdha2V1cFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuamFwYW5uZXQtcmVnaXN0cmF0aW9uXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5qYXBhbm5ldC1yZWdpc3RyYXRpb24td2FrZXVwXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5qYXBhbm5ldC1zZXRzdG9yZS13YWtldXBcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmphcGFubmV0LXZlcmlmaWNhdGlvblwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuamFwYW5uZXQtdmVyaWZpY2F0aW9uLXdha2V1cFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuamNwLmphdmFtZS5taWRsZXQtcm1zXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wicm1zXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmppc3BcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJqaXNwXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmpvb3N0LmpvZGEtYXJjaGl2ZVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImpvZGFcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuanNrLmlzZG4tbmduXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5rYWhvb3R6XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wia3R6XCIsXCJrdHJcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQua2RlLmthcmJvblwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImthcmJvblwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5rZGUua2NoYXJ0XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiY2hydFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5rZGUua2Zvcm11bGFcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJrZm9cIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQua2RlLmtpdmlvXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiZmx3XCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmtkZS5rb250b3VyXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wia29uXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmtkZS5rcHJlc2VudGVyXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wia3ByXCIsXCJrcHRcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQua2RlLmtzcHJlYWRcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJrc3BcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQua2RlLmt3b3JkXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wia3dkXCIsXCJrd3RcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQua2VuYW1lYWFwcFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImh0a2VcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQua2lkc3BpcmF0aW9uXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wia2lhXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmtpbmFyXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wia25lXCIsXCJrbnBcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQua29hblwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInNrcFwiLFwic2tkXCIsXCJza3RcIixcInNrbVwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5rb2Rhay1kZXNjcmlwdG9yXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wic3NlXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmxhc1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQubGFzLmxhcytqc29uXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmxhcy5sYXMreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJsYXN4bWxcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQubGFzemlwXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5sZWFwK2pzb25cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQubGliZXJ0eS1yZXF1ZXN0K3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5sbGFtYWdyYXBoaWNzLmxpZmUtYmFsYW5jZS5kZXNrdG9wXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wibGJkXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmxsYW1hZ3JhcGhpY3MubGlmZS1iYWxhbmNlLmV4Y2hhbmdlK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wibGJlXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmxvZ2lwaXBlLmNpcmN1aXQremlwXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiBmYWxzZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5sb29tXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5sb3R1cy0xLTItM1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIjEyM1wiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5sb3R1cy1hcHByb2FjaFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImFwclwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5sb3R1cy1mcmVlbGFuY2VcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJwcmVcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQubG90dXMtbm90ZXNcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJuc2ZcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQubG90dXMtb3JnYW5pemVyXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wib3JnXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLmxvdHVzLXNjcmVlbmNhbVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInNjbVwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5sb3R1cy13b3JkcHJvXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wibHdwXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm1hY3BvcnRzLnBvcnRwa2dcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJwb3J0cGtnXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm1hcGJveC12ZWN0b3ItdGlsZVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIm12dFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5tYXJsaW4uZHJtLmFjdGlvbnRva2VuK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5tYXJsaW4uZHJtLmNvbmZ0b2tlbit4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQubWFybGluLmRybS5saWNlbnNlK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5tYXJsaW4uZHJtLm1kY2ZcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm1hc29uK2pzb25cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQubWF4YXIuYXJjaGl2ZS4zdHoremlwXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiBmYWxzZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5tYXhtaW5kLm1heG1pbmQtZGJcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm1jZFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIm1jZFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5tZWRjYWxjZGF0YVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIm1jMVwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5tZWRpYXN0YXRpb24uY2RrZXlcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJjZGtleVwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5tZXJpZGlhbi1zbGluZ3Nob3RcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm1mZXJcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJtd2ZcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQubWZtcFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIm1mbVwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5taWNybytqc29uXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm1pY3JvZ3JhZnguZmxvXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiZmxvXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm1pY3JvZ3JhZnguaWd4XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiaWd4XCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm1pY3Jvc29mdC5wb3J0YWJsZS1leGVjdXRhYmxlXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5taWNyb3NvZnQud2luZG93cy50aHVtYm5haWwtY2FjaGVcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm1pZWxlK2pzb25cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQubWlmXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wibWlmXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm1pbmlzb2Z0LWhwMzAwMC1zYXZlXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5taXRzdWJpc2hpLm1pc3R5LWd1YXJkLnRydXN0d2ViXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5tb2JpdXMuZGFmXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiZGFmXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm1vYml1cy5kaXNcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJkaXNcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQubW9iaXVzLm1ia1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIm1ia1wiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5tb2JpdXMubXF5XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wibXF5XCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm1vYml1cy5tc2xcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJtc2xcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQubW9iaXVzLnBsY1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInBsY1wiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5tb2JpdXMudHhmXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1widHhmXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm1vcGh1bi5hcHBsaWNhdGlvblwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIm1wblwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5tb3BodW4uY2VydGlmaWNhdGVcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJtcGNcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQubW90b3JvbGEuZmxleHN1aXRlXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5tb3Rvcm9sYS5mbGV4c3VpdGUuYWRzaVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQubW90b3JvbGEuZmxleHN1aXRlLmZpc1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQubW90b3JvbGEuZmxleHN1aXRlLmdvdGFwXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5tb3Rvcm9sYS5mbGV4c3VpdGUua21yXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5tb3Rvcm9sYS5mbGV4c3VpdGUudHRjXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5tb3Rvcm9sYS5mbGV4c3VpdGUud2VtXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5tb3Rvcm9sYS5pcHJtXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5tb3ppbGxhLnh1bCt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInh1bFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5tcy0zbWZkb2N1bWVudFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQubXMtYXJ0Z2FscnlcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJjaWxcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQubXMtYXNmXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5tcy1jYWItY29tcHJlc3NlZFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImNhYlwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5tcy1jb2xvci5pY2Nwcm9maWxlXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiBmYWxzZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wieGxzXCIsXCJ4bG1cIixcInhsYVwiLFwieGxjXCIsXCJ4bHRcIixcInhsd1wiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbC5hZGRpbi5tYWNyb2VuYWJsZWQuMTJcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ4bGFtXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLnNoZWV0LmJpbmFyeS5tYWNyb2VuYWJsZWQuMTJcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ4bHNiXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm1zLWV4Y2VsLnNoZWV0Lm1hY3JvZW5hYmxlZC4xMlwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInhsc21cIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQubXMtZXhjZWwudGVtcGxhdGUubWFjcm9lbmFibGVkLjEyXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wieGx0bVwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5tcy1mb250b2JqZWN0XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJlb3RcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQubXMtaHRtbGhlbHBcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJjaG1cIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQubXMtaW1zXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiaW1zXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm1zLWxybVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImxybVwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5tcy1vZmZpY2UuYWN0aXZleCt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQubXMtb2ZmaWNldGhlbWVcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ0aG14XCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm1zLW9wZW50eXBlXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQubXMtb3V0bG9va1wiOiB7XG4gICAgXCJjb21wcmVzc2libGVcIjogZmFsc2UsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIm1zZ1wiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5tcy1wYWNrYWdlLm9iZnVzY2F0ZWQtb3BlbnR5cGVcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQubXMtcGtpLnNlY2NhdFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiY2F0XCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm1zLXBraS5zdGxcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInN0bFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5tcy1wbGF5cmVhZHkuaW5pdGlhdG9yK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5tcy1wb3dlcnBvaW50XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiBmYWxzZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wicHB0XCIsXCJwcHNcIixcInBvdFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5tcy1wb3dlcnBvaW50LmFkZGluLm1hY3JvZW5hYmxlZC4xMlwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInBwYW1cIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQubXMtcG93ZXJwb2ludC5wcmVzZW50YXRpb24ubWFjcm9lbmFibGVkLjEyXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wicHB0bVwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5tcy1wb3dlcnBvaW50LnNsaWRlLm1hY3JvZW5hYmxlZC4xMlwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInNsZG1cIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQubXMtcG93ZXJwb2ludC5zbGlkZXNob3cubWFjcm9lbmFibGVkLjEyXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wicHBzbVwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5tcy1wb3dlcnBvaW50LnRlbXBsYXRlLm1hY3JvZW5hYmxlZC4xMlwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInBvdG1cIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQubXMtcHJpbnRkZXZpY2VjYXBhYmlsaXRpZXMreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm1zLXByaW50aW5nLnByaW50dGlja2V0K3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm1zLXByaW50c2NoZW1hdGlja2V0K3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5tcy1wcm9qZWN0XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wibXBwXCIsXCJtcHRcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQubXMtdG5lZlwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQubXMtd2luZG93cy5kZXZpY2VwYWlyaW5nXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5tcy13aW5kb3dzLm53cHJpbnRpbmcub29iXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5tcy13aW5kb3dzLnByaW50ZXJwYWlyaW5nXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5tcy13aW5kb3dzLndzZC5vb2JcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm1zLXdtZHJtLmxpYy1jaGxnLXJlcVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQubXMtd21kcm0ubGljLXJlc3BcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm1zLXdtZHJtLm1ldGVyLWNobGctcmVxXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5tcy13bWRybS5tZXRlci1yZXNwXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5tcy13b3JkLmRvY3VtZW50Lm1hY3JvZW5hYmxlZC4xMlwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImRvY21cIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQubXMtd29yZC50ZW1wbGF0ZS5tYWNyb2VuYWJsZWQuMTJcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJkb3RtXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm1zLXdvcmtzXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wid3BzXCIsXCJ3a3NcIixcIndjbVwiLFwid2RiXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm1zLXdwbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIndwbFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5tcy14cHNkb2N1bWVudFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogZmFsc2UsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInhwc1wiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5tc2EtZGlzay1pbWFnZVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQubXNlcVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIm1zZXFcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQubXNpZ25cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm11bHRpYWQuY3JlYXRvclwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQubXVsdGlhZC5jcmVhdG9yLmNpZlwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQubXVzaWMtbmlmZlwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQubXVzaWNpYW5cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJtdXNcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQubXV2ZWUuc3R5bGVcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJtc3R5XCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm15bmZjXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1widGFnbGV0XCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm5hY2FtYXIueWJyaWQranNvblwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5uY2QuY29udHJvbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQubmNkLnJlZmVyZW5jZVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQubmVhcnN0Lmluditqc29uXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm5lYnVtaW5kLmxpbmVcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm5lcnZhbmFcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm5ldGZweFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQubmV1cm9sYW5ndWFnZS5ubHVcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJubHVcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQubmltblwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQubmludGVuZG8ubml0cm8ucm9tXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5uaW50ZW5kby5zbmVzLnJvbVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQubml0ZlwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIm50ZlwiLFwibml0ZlwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5ub2JsZW5ldC1kaXJlY3RvcnlcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJubmRcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQubm9ibGVuZXQtc2VhbGVyXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wibm5zXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm5vYmxlbmV0LXdlYlwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIm5ud1wiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5ub2tpYS5jYXRhbG9nc1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQubm9raWEuY29ubWwrd2J4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm5va2lhLmNvbm1sK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5ub2tpYS5pcHR2LmNvbmZpZyt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQubm9raWEuaXNkcy1yYWRpby1wcmVzZXRzXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5ub2tpYS5sYW5kbWFyayt3YnhtbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQubm9raWEubGFuZG1hcmsreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm5va2lhLmxhbmRtYXJrY29sbGVjdGlvbit4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQubm9raWEubi1nYWdlLmFjK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiYWNcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQubm9raWEubi1nYWdlLmRhdGFcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJuZ2RhdFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5ub2tpYS5uLWdhZ2Uuc3ltYmlhbi5pbnN0YWxsXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wibi1nYWdlXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm5va2lhLm5jZFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQubm9raWEucGNkK3dieG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5ub2tpYS5wY2QreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm5va2lhLnJhZGlvLXByZXNldFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInJwc3RcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQubm9raWEucmFkaW8tcHJlc2V0c1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInJwc3NcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQubm92YWRpZ20uZWRtXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiZWRtXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm5vdmFkaWdtLmVkeFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImVkeFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5ub3ZhZGlnbS5leHRcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJleHRcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQubnR0LWxvY2FsLmNvbnRlbnQtc2hhcmVcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm50dC1sb2NhbC5maWxlLXRyYW5zZmVyXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5udHQtbG9jYWwub2d3X3JlbW90ZS1hY2Nlc3NcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm50dC1sb2NhbC5zaXAtdGFfcmVtb3RlXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5udHQtbG9jYWwuc2lwLXRhX3RjcF9zdHJlYW1cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9hc2lzLm9wZW5kb2N1bWVudC5jaGFydFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIm9kY1wiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5vYXNpcy5vcGVuZG9jdW1lbnQuY2hhcnQtdGVtcGxhdGVcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJvdGNcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQub2FzaXMub3BlbmRvY3VtZW50LmRhdGFiYXNlXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wib2RiXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9hc2lzLm9wZW5kb2N1bWVudC5mb3JtdWxhXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wib2RmXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9hc2lzLm9wZW5kb2N1bWVudC5mb3JtdWxhLXRlbXBsYXRlXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wib2RmdFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5vYXNpcy5vcGVuZG9jdW1lbnQuZ3JhcGhpY3NcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IGZhbHNlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJvZGdcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQub2FzaXMub3BlbmRvY3VtZW50LmdyYXBoaWNzLXRlbXBsYXRlXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wib3RnXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9hc2lzLm9wZW5kb2N1bWVudC5pbWFnZVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIm9kaVwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5vYXNpcy5vcGVuZG9jdW1lbnQuaW1hZ2UtdGVtcGxhdGVcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJvdGlcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQub2FzaXMub3BlbmRvY3VtZW50LnByZXNlbnRhdGlvblwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogZmFsc2UsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIm9kcFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5vYXNpcy5vcGVuZG9jdW1lbnQucHJlc2VudGF0aW9uLXRlbXBsYXRlXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wib3RwXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9hc2lzLm9wZW5kb2N1bWVudC5zcHJlYWRzaGVldFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogZmFsc2UsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIm9kc1wiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5vYXNpcy5vcGVuZG9jdW1lbnQuc3ByZWFkc2hlZXQtdGVtcGxhdGVcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJvdHNcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQub2FzaXMub3BlbmRvY3VtZW50LnRleHRcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IGZhbHNlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJvZHRcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQub2FzaXMub3BlbmRvY3VtZW50LnRleHQtbWFzdGVyXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wib2RtXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9hc2lzLm9wZW5kb2N1bWVudC50ZXh0LXRlbXBsYXRlXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wib3R0XCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9hc2lzLm9wZW5kb2N1bWVudC50ZXh0LXdlYlwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIm90aFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5vYm5cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9jZitjYm9yXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5vY2kuaW1hZ2UubWFuaWZlc3QudjEranNvblwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5vZnRuLmwxMG4ranNvblwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5vaXBmLmNvbnRlbnRhY2Nlc3Nkb3dubG9hZCt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQub2lwZi5jb250ZW50YWNjZXNzc3RyZWFtaW5nK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5vaXBmLmNzcGctaGV4YmluYXJ5XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5vaXBmLmRhZS5zdmcreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9pcGYuZGFlLnhodG1sK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5vaXBmLm1pcHB2Y29udHJvbG1lc3NhZ2UreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9pcGYucGFlLmdlbVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQub2lwZi5zcGRpc2NvdmVyeSt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQub2lwZi5zcGRsaXN0K3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5vaXBmLnVlcHJvZmlsZSt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQub2lwZi51c2VycHJvZmlsZSt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQub2xwYy1zdWdhclwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInhvXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9tYS1zY3dzLWNvbmZpZ1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQub21hLXNjd3MtaHR0cC1yZXF1ZXN0XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5vbWEtc2N3cy1odHRwLXJlc3BvbnNlXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5vbWEuYmNhc3QuYXNzb2NpYXRlZC1wcm9jZWR1cmUtcGFyYW1ldGVyK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5vbWEuYmNhc3QuZHJtLXRyaWdnZXIreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9tYS5iY2FzdC5pbWQreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9tYS5iY2FzdC5sdGttXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5vbWEuYmNhc3Qubm90aWZpY2F0aW9uK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5vbWEuYmNhc3QucHJvdmlzaW9uaW5ndHJpZ2dlclwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQub21hLmJjYXN0LnNnYm9vdFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQub21hLmJjYXN0LnNnZGQreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9tYS5iY2FzdC5zZ2R1XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5vbWEuYmNhc3Quc2ltcGxlLXN5bWJvbC1jb250YWluZXJcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9tYS5iY2FzdC5zbWFydGNhcmQtdHJpZ2dlcit4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQub21hLmJjYXN0LnNwcm92K3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5vbWEuYmNhc3Quc3RrbVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQub21hLmNhYi1hZGRyZXNzLWJvb2sreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9tYS5jYWItZmVhdHVyZS1oYW5kbGVyK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5vbWEuY2FiLXBjYyt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQub21hLmNhYi1zdWJzLWludml0ZSt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQub21hLmNhYi11c2VyLXByZWZzK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5vbWEuZGNkXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5vbWEuZGNkY1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQub21hLmRkMit4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImRkMlwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5vbWEuZHJtLnJpc2QreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9tYS5ncm91cC11c2FnZS1saXN0K3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5vbWEubHdtMm0rY2JvclwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQub21hLmx3bTJtK2pzb25cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQub21hLmx3bTJtK3RsdlwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQub21hLnBhbCt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQub21hLnBvYy5kZXRhaWxlZC1wcm9ncmVzcy1yZXBvcnQreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9tYS5wb2MuZmluYWwtcmVwb3J0K3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5vbWEucG9jLmdyb3Vwcyt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQub21hLnBvYy5pbnZvY2F0aW9uLWRlc2NyaXB0b3IreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9tYS5wb2Mub3B0aW1pemVkLXByb2dyZXNzLXJlcG9ydCt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQub21hLnB1c2hcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9tYS5zY2lkbS5tZXNzYWdlcyt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQub21hLnhjYXAtZGlyZWN0b3J5K3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5vbWFkcy1lbWFpbCt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY2hhcnNldFwiOiBcIlVURi04XCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5vbWFkcy1maWxlK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjaGFyc2V0XCI6IFwiVVRGLThcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9tYWRzLWZvbGRlcit4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY2hhcnNldFwiOiBcIlVURi04XCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5vbWFsb2Mtc3VwbC1pbml0XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5vbmVwYWdlclwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQub25lcGFnZXJ0YW1wXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5vbmVwYWdlcnRhbXhcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9uZXBhZ2VydGF0XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5vbmVwYWdlcnRhdHBcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9uZXBhZ2VydGF0eFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQub3BlbmJsb3guZ2FtZSt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIm9iZ3hcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQub3BlbmJsb3guZ2FtZS1iaW5hcnlcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9wZW5leWUub2ViXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5vcGVub2ZmaWNlb3JnLmV4dGVuc2lvblwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wib3h0XCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9wZW5zdHJlZXRtYXAuZGF0YSt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIm9zbVwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5vcGVudGltZXN0YW1wcy5vdHNcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LmN1c3RvbS1wcm9wZXJ0aWVzK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5jdXN0b214bWxwcm9wZXJ0aWVzK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5kcmF3aW5nK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5kcmF3aW5nbWwuY2hhcnQreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LmRyYXdpbmdtbC5jaGFydHNoYXBlcyt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuZHJhd2luZ21sLmRpYWdyYW1jb2xvcnMreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LmRyYXdpbmdtbC5kaWFncmFtZGF0YSt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuZHJhd2luZ21sLmRpYWdyYW1sYXlvdXQreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LmRyYXdpbmdtbC5kaWFncmFtc3R5bGUreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LmV4dGVuZGVkLXByb3BlcnRpZXMreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnByZXNlbnRhdGlvbm1sLmNvbW1lbnRhdXRob3JzK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5wcmVzZW50YXRpb25tbC5jb21tZW50cyt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQucHJlc2VudGF0aW9ubWwuaGFuZG91dG1hc3Rlcit4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQucHJlc2VudGF0aW9ubWwubm90ZXNtYXN0ZXIreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnByZXNlbnRhdGlvbm1sLm5vdGVzc2xpZGUreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnByZXNlbnRhdGlvbm1sLnByZXNlbnRhdGlvblwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogZmFsc2UsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInBwdHhcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQucHJlc2VudGF0aW9ubWwucHJlc2VudGF0aW9uLm1haW4reG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnByZXNlbnRhdGlvbm1sLnByZXNwcm9wcyt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQucHJlc2VudGF0aW9ubWwuc2xpZGVcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJzbGR4XCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnByZXNlbnRhdGlvbm1sLnNsaWRlK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5wcmVzZW50YXRpb25tbC5zbGlkZWxheW91dCt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQucHJlc2VudGF0aW9ubWwuc2xpZGVtYXN0ZXIreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnByZXNlbnRhdGlvbm1sLnNsaWRlc2hvd1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInBwc3hcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQucHJlc2VudGF0aW9ubWwuc2xpZGVzaG93Lm1haW4reG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnByZXNlbnRhdGlvbm1sLnNsaWRldXBkYXRlaW5mbyt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQucHJlc2VudGF0aW9ubWwudGFibGVzdHlsZXMreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnByZXNlbnRhdGlvbm1sLnRhZ3MreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnByZXNlbnRhdGlvbm1sLnRlbXBsYXRlXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wicG90eFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5wcmVzZW50YXRpb25tbC50ZW1wbGF0ZS5tYWluK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5wcmVzZW50YXRpb25tbC52aWV3cHJvcHMreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwuY2FsY2NoYWluK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLmNoYXJ0c2hlZXQreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwuY29tbWVudHMreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwuY29ubmVjdGlvbnMreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwuZGlhbG9nc2hlZXQreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwuZXh0ZXJuYWxsaW5rK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnBpdm90Y2FjaGVkZWZpbml0aW9uK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnBpdm90Y2FjaGVyZWNvcmRzK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnBpdm90dGFibGUreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwucXVlcnl0YWJsZSt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5yZXZpc2lvbmhlYWRlcnMreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwucmV2aXNpb25sb2creG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwuc2hhcmVkc3RyaW5ncyt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5zaGVldFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogZmFsc2UsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInhsc3hcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC5zaGVldC5tYWluK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnNoZWV0bWV0YWRhdGEreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwuc3R5bGVzK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnRhYmxlK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnRhYmxlc2luZ2xlY2VsbHMreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwudGVtcGxhdGVcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ4bHR4XCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwudGVtcGxhdGUubWFpbit4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQuc3ByZWFkc2hlZXRtbC51c2VybmFtZXMreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwudm9sYXRpbGVkZXBlbmRlbmNpZXMreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwud29ya3NoZWV0K3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC50aGVtZSt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQudGhlbWVvdmVycmlkZSt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQudm1sZHJhd2luZ1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQud29yZHByb2Nlc3NpbmdtbC5jb21tZW50cyt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQud29yZHByb2Nlc3NpbmdtbC5kb2N1bWVudFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogZmFsc2UsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImRvY3hcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQud29yZHByb2Nlc3NpbmdtbC5kb2N1bWVudC5nbG9zc2FyeSt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQud29yZHByb2Nlc3NpbmdtbC5kb2N1bWVudC5tYWluK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC53b3JkcHJvY2Vzc2luZ21sLmVuZG5vdGVzK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC53b3JkcHJvY2Vzc2luZ21sLmZvbnR0YWJsZSt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQud29yZHByb2Nlc3NpbmdtbC5mb290ZXIreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LndvcmRwcm9jZXNzaW5nbWwuZm9vdG5vdGVzK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC53b3JkcHJvY2Vzc2luZ21sLm51bWJlcmluZyt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQud29yZHByb2Nlc3NpbmdtbC5zZXR0aW5ncyt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQud29yZHByb2Nlc3NpbmdtbC5zdHlsZXMreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LndvcmRwcm9jZXNzaW5nbWwudGVtcGxhdGVcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJkb3R4XCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LndvcmRwcm9jZXNzaW5nbWwudGVtcGxhdGUubWFpbit4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtb2ZmaWNlZG9jdW1lbnQud29yZHByb2Nlc3NpbmdtbC53ZWJzZXR0aW5ncyt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQub3BlbnhtbGZvcm1hdHMtcGFja2FnZS5jb3JlLXByb3BlcnRpZXMreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLXBhY2thZ2UuZGlnaXRhbC1zaWduYXR1cmUteG1sc2lnbmF0dXJlK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1wYWNrYWdlLnJlbGF0aW9uc2hpcHMreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9yYWNsZS5yZXNvdXJjZStqc29uXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9yYW5nZS5pbmRhdGFcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9zYS5uZXRkZXBsb3lcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9zZ2VvLm1hcGd1aWRlLnBhY2thZ2VcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJtZ3BcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQub3NnaS5idW5kbGVcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLm9zZ2kuZHBcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJkcFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5vc2dpLnN1YnN5c3RlbVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImVzYVwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5vdHBzLmN0LWtpcCt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQub3hsaS5jb3VudGdyYXBoXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5wYWdlcmR1dHkranNvblwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5wYWxtXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wicGRiXCIsXCJwcWFcIixcIm9wcmNcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQucGFub3BseVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQucGFvcy54bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnBhdGVudGRpdmVcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnBhdGllbnRlY29tbXNkb2NcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnBhd2FhZmlsZVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInBhd1wiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5wY29zXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5wZy5mb3JtYXRcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJzdHJcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQucGcub3Nhc2xpXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiZWk2XCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnBpYWNjZXNzLmFwcGxpY2F0aW9uLWxpY2VuY2VcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnBpY3NlbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImVmaWZcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQucG1pLndpZGdldFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIndnXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnBvYy5ncm91cC1hZHZlcnRpc2VtZW50K3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5wb2NrZXRsZWFyblwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInBsZlwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5wb3dlcmJ1aWxkZXI2XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wicGJkXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnBvd2VyYnVpbGRlcjYtc1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQucG93ZXJidWlsZGVyN1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQucG93ZXJidWlsZGVyNy1zXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5wb3dlcmJ1aWxkZXI3NVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQucG93ZXJidWlsZGVyNzUtc1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQucHJlbWluZXRcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnByZXZpZXdzeXN0ZW1zLmJveFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImJveFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5wcm90ZXVzLm1hZ2F6aW5lXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wibWd6XCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnBzZnNcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnB1Ymxpc2hhcmUtZGVsdGEtdHJlZVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInFwc1wiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5wdmkucHRpZDFcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJwdGlkXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnB3Zy1tdWx0aXBsZXhlZFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQucHdnLXhodG1sLXByaW50K3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5xdWFsY29tbS5icmV3LWFwcC1yZXNcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnF1YXJhbnRhaW5lbmV0XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5xdWFyay5xdWFya3hwcmVzc1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInF4ZFwiLFwicXh0XCIsXCJxd2RcIixcInF3dFwiLFwicXhsXCIsXCJxeGJcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQucXVvYmplY3QtcXVveGRvY3VtZW50XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5yYWRpc3lzLm1vbWwreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnJhZGlzeXMubXNtbCt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQucmFkaXN5cy5tc21sLWF1ZGl0K3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5yYWRpc3lzLm1zbWwtYXVkaXQtY29uZit4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQucmFkaXN5cy5tc21sLWF1ZGl0LWNvbm4reG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnJhZGlzeXMubXNtbC1hdWRpdC1kaWFsb2creG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnJhZGlzeXMubXNtbC1hdWRpdC1zdHJlYW0reG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnJhZGlzeXMubXNtbC1jb25mK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5yYWRpc3lzLm1zbWwtZGlhbG9nK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5yYWRpc3lzLm1zbWwtZGlhbG9nLWJhc2UreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnJhZGlzeXMubXNtbC1kaWFsb2ctZmF4LWRldGVjdCt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQucmFkaXN5cy5tc21sLWRpYWxvZy1mYXgtc2VuZHJlY3YreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnJhZGlzeXMubXNtbC1kaWFsb2ctZ3JvdXAreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnJhZGlzeXMubXNtbC1kaWFsb2ctc3BlZWNoK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5yYWRpc3lzLm1zbWwtZGlhbG9nLXRyYW5zZm9ybSt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQucmFpbnN0b3IuZGF0YVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQucmFwaWRcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnJhclwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInJhclwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5yZWFsdm5jLmJlZFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImJlZFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5yZWNvcmRhcmUubXVzaWN4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJteGxcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQucmVjb3JkYXJlLm11c2ljeG1sK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wibXVzaWN4bWxcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQucmVubGVhcm4ucmxwcmludFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQucmVzaWxpZW50LmxvZ2ljXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5yZXN0ZnVsK2pzb25cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQucmlnLmNyeXB0b25vdGVcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJjcnlwdG9ub3RlXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnJpbS5jb2RcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImNvZFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5ybi1yZWFsbWVkaWFcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInJtXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnJuLXJlYWxtZWRpYS12YnJcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInJtdmJcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQucm91dGU2Ni5saW5rNjYreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJsaW5rNjZcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQucnMtMjc0eFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQucnVja3VzLmRvd25sb2FkXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5zM3Ntc1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuc2FpbGluZ3RyYWNrZXIudHJhY2tcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJzdFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5zYXJcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnNibS5jaWRcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnNibS5taWQyXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5zY3JpYnVzXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5zZWFsZWQuM2RmXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5zZWFsZWQuY3NmXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5zZWFsZWQuZG9jXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5zZWFsZWQuZW1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5zZWFsZWQubWh0XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5zZWFsZWQubmV0XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5zZWFsZWQucHB0XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5zZWFsZWQudGlmZlwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuc2VhbGVkLnhsc1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuc2VhbGVkbWVkaWEuc29mdHNlYWwuaHRtbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuc2VhbGVkbWVkaWEuc29mdHNlYWwucGRmXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5zZWVtYWlsXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wic2VlXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnNlaXMranNvblwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5zZW1hXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wic2VtYVwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5zZW1kXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wic2VtZFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5zZW1mXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wic2VtZlwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5zaGFkZS1zYXZlLWZpbGVcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnNoYW5hLmluZm9ybWVkLmZvcm1kYXRhXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiaWZtXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnNoYW5hLmluZm9ybWVkLmZvcm10ZW1wbGF0ZVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIml0cFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5zaGFuYS5pbmZvcm1lZC5pbnRlcmNoYW5nZVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImlpZlwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5zaGFuYS5pbmZvcm1lZC5wYWNrYWdlXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiaXBrXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnNob290cHJvb2YranNvblwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5zaG9wa2ljaytqc29uXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnNocFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuc2h4XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5zaWdyb2suc2Vzc2lvblwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuc2ltdGVjaC1taW5kbWFwcGVyXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1widHdkXCIsXCJ0d2RzXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnNpcmVuK2pzb25cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuc21hZlwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIm1tZlwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5zbWFydC5ub3RlYm9va1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuc21hcnQudGVhY2hlclwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInRlYWNoZXJcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuc25lc2Rldi1wYWdlLXRhYmxlXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5zb2Z0d2FyZTYwMi5maWxsZXIuZm9ybSt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImZvXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnNvZnR3YXJlNjAyLmZpbGxlci5mb3JtLXhtbC16aXBcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnNvbGVudC5zZGttK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wic2RrbVwiLFwic2RrZFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5zcG90ZmlyZS5keHBcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJkeHBcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuc3BvdGZpcmUuc2ZzXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wic2ZzXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnNxbGl0ZTNcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnNzcy1jb2RcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnNzcy1kdGZcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnNzcy1udGZcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnN0YXJkaXZpc2lvbi5jYWxjXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJzZGNcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuc3RhcmRpdmlzaW9uLmRyYXdcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInNkYVwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5zdGFyZGl2aXNpb24uaW1wcmVzc1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wic2RkXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnN0YXJkaXZpc2lvbi5tYXRoXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJzbWZcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuc3RhcmRpdmlzaW9uLndyaXRlclwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wic2R3XCIsXCJ2b3JcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuc3RhcmRpdmlzaW9uLndyaXRlci1nbG9iYWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInNnbFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5zdGVwbWFuaWEucGFja2FnZVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInNtemlwXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnN0ZXBtYW5pYS5zdGVwY2hhcnRcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJzbVwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5zdHJlZXQtc3RyZWFtXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5zdW4ud2FkbCt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIndhZGxcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuc3VuLnhtbC5jYWxjXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJzeGNcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuc3VuLnhtbC5jYWxjLnRlbXBsYXRlXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJzdGNcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuc3VuLnhtbC5kcmF3XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJzeGRcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuc3VuLnhtbC5kcmF3LnRlbXBsYXRlXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJzdGRcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuc3VuLnhtbC5pbXByZXNzXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJzeGlcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuc3VuLnhtbC5pbXByZXNzLnRlbXBsYXRlXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJzdGlcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuc3VuLnhtbC5tYXRoXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJzeG1cIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuc3VuLnhtbC53cml0ZXJcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInN4d1wiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5zdW4ueG1sLndyaXRlci5nbG9iYWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInN4Z1wiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5zdW4ueG1sLndyaXRlci50ZW1wbGF0ZVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wic3R3XCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnN1cy1jYWxlbmRhclwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInN1c1wiLFwic3VzcFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5zdmRcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJzdmRcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuc3dpZnR2aWV3LWljc1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuc3ljbGUreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnN5ZnQranNvblwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5zeW1iaWFuLmluc3RhbGxcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInNpc1wiLFwic2lzeFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5zeW5jbWwreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNoYXJzZXRcIjogXCJVVEYtOFwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInhzbVwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5zeW5jbWwuZG0rd2J4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY2hhcnNldFwiOiBcIlVURi04XCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImJkbVwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5zeW5jbWwuZG0reG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNoYXJzZXRcIjogXCJVVEYtOFwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInhkbVwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5zeW5jbWwuZG0ubm90aWZpY2F0aW9uXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC5zeW5jbWwuZG1kZGYrd2J4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnN5bmNtbC5kbWRkZit4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY2hhcnNldFwiOiBcIlVURi04XCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiZGRmXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnN5bmNtbC5kbXRuZHMrd2J4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnN5bmNtbC5kbXRuZHMreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNoYXJzZXRcIjogXCJVVEYtOFwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQuc3luY21sLmRzLm5vdGlmaWNhdGlvblwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQudGFibGVzY2hlbWEranNvblwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC50YW8uaW50ZW50LW1vZHVsZS1hcmNoaXZlXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1widGFvXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnRjcGR1bXAucGNhcFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInBjYXBcIixcImNhcFwiLFwiZG1wXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnRoaW5rLWNlbGwucHB0dGMranNvblwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC50bWQubWVkaWFmbGV4LmFwaSt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQudG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC50bW9iaWxlLWxpdmV0dlwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInRtb1wiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC50cmkub25lc291cmNlXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC50cmlkLnRwdFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInRwdFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC50cmlzY2FwZS5teHNcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJteHNcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQudHJ1ZWFwcFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInRyYVwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC50cnVlZG9jXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC51Ymlzb2Z0LndlYnBsYXllclwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQudWZkbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInVmZFwiLFwidWZkbFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC51aXEudGhlbWVcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ1dHpcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQudW1hamluXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1widW1qXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnVuaXR5XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1widW5pdHl3ZWJcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQudW9tbCt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInVvbWxcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQudXBsYW5ldC5hbGVydFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQudXBsYW5ldC5hbGVydC13YnhtbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQudXBsYW5ldC5iZWFyZXItY2hvaWNlXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC51cGxhbmV0LmJlYXJlci1jaG9pY2Utd2J4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnVwbGFuZXQuY2FjaGVvcFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQudXBsYW5ldC5jYWNoZW9wLXdieG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC51cGxhbmV0LmNoYW5uZWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnVwbGFuZXQuY2hhbm5lbC13YnhtbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQudXBsYW5ldC5saXN0XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC51cGxhbmV0Lmxpc3Qtd2J4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnVwbGFuZXQubGlzdGNtZFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQudXBsYW5ldC5saXN0Y21kLXdieG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC51cGxhbmV0LnNpZ25hbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQudXJpLW1hcFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQudmFsdmUuc291cmNlLm1hdGVyaWFsXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC52Y3hcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ2Y3hcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQudmQtc3R1ZHlcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnZlY3RvcndvcmtzXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC52ZWwranNvblwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC52ZXJpbWF0cml4LnZjYXNcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnZlcml0b25lLmFpb24ranNvblwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC52ZXJ5YW50LnRoaW5cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnZlcy5lbmNyeXB0ZWRcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnZpZHNvZnQudmlkY29uZmVyZW5jZVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQudmlzaW9cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ2c2RcIixcInZzdFwiLFwidnNzXCIsXCJ2c3dcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQudmlzaW9uYXJ5XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1widmlzXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnZpdmlkZW5jZS5zY3JpcHRmaWxlXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC52c2ZcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ2c2ZcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQud2FwLnNpY1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQud2FwLnNsY1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQud2FwLndieG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNoYXJzZXRcIjogXCJVVEYtOFwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ3YnhtbFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC53YXAud21sY1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIndtbGNcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQud2FwLndtbHNjcmlwdGNcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ3bWxzY1wiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC53ZWJ0dXJib1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInd0YlwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC53ZmEuZHBwXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC53ZmEucDJwXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC53ZmEud3NjXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC53aW5kb3dzLmRldmljZXBhaXJpbmdcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLndtY1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQud21mLmJvb3RzdHJhcFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQud29sZnJhbS5tYXRoZW1hdGljYVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQud29sZnJhbS5tYXRoZW1hdGljYS5wYWNrYWdlXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC53b2xmcmFtLnBsYXllclwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIm5icFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC53b3JkcGVyZmVjdFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIndwZFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC53cWRcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ3cWRcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQud3JxLWhwMzAwMC1sYWJlbGxlZFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQud3Quc3RmXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wic3RmXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnd2LmNzcCt3YnhtbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQud3YuY3NwK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC53di5zc3AreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnhhY21sK2pzb25cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQueGFyYVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInhhclwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC54ZmRsXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wieGZkbFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC54ZmRsLndlYmZvcm1cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnhtaSt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQueG1waWUuY3BrZ1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQueG1waWUuZHBrZ1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQueG1waWUucGxhblwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQueG1waWUucHBrZ1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQueG1waWUueGxpbVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi92bmQueWFtYWhhLmh2LWRpY1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImh2ZFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC55YW1haGEuaHYtc2NyaXB0XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiaHZzXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnlhbWFoYS5odi12b2ljZVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImh2cFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC55YW1haGEub3BlbnNjb3JlZm9ybWF0XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wib3NmXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnlhbWFoYS5vcGVuc2NvcmVmb3JtYXQub3NmcHZnK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wib3NmcHZnXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnlhbWFoYS5yZW1vdGUtc2V0dXBcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnlhbWFoYS5zbWFmLWF1ZGlvXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wic2FmXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnlhbWFoYS5zbWFmLXBocmFzZVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInNwZlwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC55YW1haGEudGhyb3VnaC1uZ25cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnlhbWFoYS50dW5uZWwtdWRwZW5jYXBcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnlhb3dlbWVcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnllbGxvd3JpdmVyLWN1c3RvbS1tZW51XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiY21wXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnlvdXR1YmUueXRcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm5kLnp1bFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInppclwiLFwiemlyelwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZuZC56emF6ei5kZWNrK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiemF6XCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm9pY2V4bWwreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ2eG1sXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vdm91Y2hlci1jbXMranNvblwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ZxLXJ0Y3B4clwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi93YXNtXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ3YXNtXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vd2F0Y2hlcmluZm8reG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ3aWZcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi93ZWJwdXNoLW9wdGlvbnMranNvblwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3dob2lzcHAtcXVlcnlcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vd2hvaXNwcC1yZXNwb25zZVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi93aWRnZXRcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ3Z3RcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi93aW5obHBcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImhscFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3dpdGFcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vd29yZHBlcmZlY3Q1LjFcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24vd3NkbCt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIndzZGxcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi93c3BvbGljeSt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIndzcG9saWN5XCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24veC03ei1jb21wcmVzc2VkXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IGZhbHNlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCI3elwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3gtYWJpd29yZFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiYWJ3XCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24veC1hY2UtY29tcHJlc3NlZFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiYWNlXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24veC1hbWZcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi94LWFwcGxlLWRpc2tpbWFnZVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiZG1nXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24veC1hcmpcIjoge1xuICAgIFwiY29tcHJlc3NpYmxlXCI6IGZhbHNlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJhcmpcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi94LWF1dGhvcndhcmUtYmluXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJhYWJcIixcIngzMlwiLFwidTMyXCIsXCJ2b3hcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi94LWF1dGhvcndhcmUtbWFwXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJhYW1cIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi94LWF1dGhvcndhcmUtc2VnXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJhYXNcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi94LWJjcGlvXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJiY3Bpb1wiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3gtYmRvY1wiOiB7XG4gICAgXCJjb21wcmVzc2libGVcIjogZmFsc2UsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImJkb2NcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi94LWJpdHRvcnJlbnRcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInRvcnJlbnRcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi94LWJsb3JiXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJibGJcIixcImJsb3JiXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24veC1iemlwXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IGZhbHNlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJielwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3gtYnppcDJcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogZmFsc2UsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImJ6MlwiLFwiYm96XCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24veC1jYnJcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImNiclwiLFwiY2JhXCIsXCJjYnRcIixcImNielwiLFwiY2I3XCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24veC1jZGxpbmtcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInZjZFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3gtY2ZzLWNvbXByZXNzZWRcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImNmc1wiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3gtY2hhdFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiY2hhdFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3gtY2hlc3MtcGduXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJwZ25cIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi94LWNocm9tZS1leHRlbnNpb25cIjoge1xuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJjcnhcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi94LWNvY29hXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcIm5naW54XCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImNjb1wiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3gtY29tcHJlc3NcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi94LWNvbmZlcmVuY2VcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIm5zY1wiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3gtY3Bpb1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiY3Bpb1wiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3gtY3NoXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJjc2hcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi94LWRlYlwiOiB7XG4gICAgXCJjb21wcmVzc2libGVcIjogZmFsc2VcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi94LWRlYmlhbi1wYWNrYWdlXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJkZWJcIixcInVkZWJcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi94LWRnYy1jb21wcmVzc2VkXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJkZ2NcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi94LWRpcmVjdG9yXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJkaXJcIixcImRjclwiLFwiZHhyXCIsXCJjc3RcIixcImNjdFwiLFwiY3h0XCIsXCJ3M2RcIixcImZnZFwiLFwic3dhXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24veC1kb29tXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ3YWRcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi94LWR0Ym5jeCt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wibmN4XCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24veC1kdGJvb2sreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImR0YlwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3gtZHRicmVzb3VyY2UreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInJlc1wiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3gtZHZpXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IGZhbHNlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJkdmlcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi94LWVudm95XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJldnlcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi94LWV2YVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiZXZhXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24veC1mb250LWJkZlwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiYmRmXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24veC1mb250LWRvc1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3gtZm9udC1mcmFtZW1ha2VyXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24veC1mb250LWdob3N0c2NyaXB0XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJnc2ZcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi94LWZvbnQtbGliZ3J4XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24veC1mb250LWxpbnV4LXBzZlwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wicHNmXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24veC1mb250LXBjZlwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wicGNmXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24veC1mb250LXNuZlwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wic25mXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24veC1mb250LXNwZWVkb1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3gtZm9udC1zdW5vcy1uZXdzXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24veC1mb250LXR5cGUxXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJwZmFcIixcInBmYlwiLFwicGZtXCIsXCJhZm1cIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi94LWZvbnQtdmZvbnRcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi94LWZyZWVhcmNcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImFyY1wiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3gtZnV0dXJlc3BsYXNoXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJzcGxcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi94LWdjYS1jb21wcmVzc2VkXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJnY2FcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi94LWdsdWx4XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ1bHhcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi94LWdudW1lcmljXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJnbnVtZXJpY1wiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3gtZ3JhbXBzLXhtbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiZ3JhbXBzXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24veC1ndGFyXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJndGFyXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24veC1nemlwXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24veC1oZGZcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImhkZlwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3gtaHR0cGQtcGhwXCI6IHtcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJwaHBcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi94LWluc3RhbGwtaW5zdHJ1Y3Rpb25zXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJpbnN0YWxsXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24veC1pc285NjYwLWltYWdlXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJpc29cIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi94LWl3b3JrLWtleW5vdGUtc2Zma2V5XCI6IHtcbiAgICBcImV4dGVuc2lvbnNcIjogW1wia2V5XCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24veC1pd29yay1udW1iZXJzLXNmZm51bWJlcnNcIjoge1xuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJudW1iZXJzXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24veC1pd29yay1wYWdlcy1zZmZwYWdlc1wiOiB7XG4gICAgXCJleHRlbnNpb25zXCI6IFtcInBhZ2VzXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24veC1qYXZhLWFyY2hpdmUtZGlmZlwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJuZ2lueFwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJqYXJkaWZmXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24veC1qYXZhLWpubHAtZmlsZVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiBmYWxzZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiam5scFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3gtamF2YXNjcmlwdFwiOiB7XG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3gta2VlcGFzczJcIjoge1xuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJrZGJ4XCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24veC1sYXRleFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiBmYWxzZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wibGF0ZXhcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi94LWx1YS1ieXRlY29kZVwiOiB7XG4gICAgXCJleHRlbnNpb25zXCI6IFtcImx1YWNcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi94LWx6aC1jb21wcmVzc2VkXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJsemhcIixcImxoYVwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3gtbWFrZXNlbGZcIjoge1xuICAgIFwic291cmNlXCI6IFwibmdpbnhcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wicnVuXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24veC1taWVcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIm1pZVwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3gtbW9iaXBvY2tldC1lYm9va1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wicHJjXCIsXCJtb2JpXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24veC1tcGVndXJsXCI6IHtcbiAgICBcImNvbXByZXNzaWJsZVwiOiBmYWxzZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3gtbXMtYXBwbGljYXRpb25cIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImFwcGxpY2F0aW9uXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24veC1tcy1zaG9ydGN1dFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wibG5rXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24veC1tcy13bWRcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIndtZFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3gtbXMtd216XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ3bXpcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi94LW1zLXhiYXBcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInhiYXBcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi94LW1zYWNjZXNzXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJtZGJcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi94LW1zYmluZGVyXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJvYmRcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi94LW1zY2FyZGZpbGVcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImNyZFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3gtbXNjbGlwXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJjbHBcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi94LW1zZG9zLXByb2dyYW1cIjoge1xuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJleGVcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi94LW1zZG93bmxvYWRcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImV4ZVwiLFwiZGxsXCIsXCJjb21cIixcImJhdFwiLFwibXNpXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24veC1tc21lZGlhdmlld1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wibXZiXCIsXCJtMTNcIixcIm0xNFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3gtbXNtZXRhZmlsZVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wid21mXCIsXCJ3bXpcIixcImVtZlwiLFwiZW16XCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24veC1tc21vbmV5XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJtbnlcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi94LW1zcHVibGlzaGVyXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJwdWJcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi94LW1zc2NoZWR1bGVcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInNjZFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3gtbXN0ZXJtaW5hbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1widHJtXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24veC1tc3dyaXRlXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ3cmlcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi94LW5ldGNkZlwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wibmNcIixcImNkZlwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3gtbnMtcHJveHktYXV0b2NvbmZpZ1wiOiB7XG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wicGFjXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24veC1uemJcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIm56YlwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3gtcGVybFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJuZ2lueFwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJwbFwiLFwicG1cIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi94LXBpbG90XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcIm5naW54XCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInByY1wiLFwicGRiXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24veC1wa2NzMTJcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogZmFsc2UsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInAxMlwiLFwicGZ4XCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24veC1wa2NzNy1jZXJ0aWZpY2F0ZXNcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInA3YlwiLFwic3BjXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24veC1wa2NzNy1jZXJ0cmVxcmVzcFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wicDdyXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24veC1wa2ktbWVzc2FnZVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi94LXJhci1jb21wcmVzc2VkXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IGZhbHNlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJyYXJcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi94LXJlZGhhdC1wYWNrYWdlLW1hbmFnZXJcIjoge1xuICAgIFwic291cmNlXCI6IFwibmdpbnhcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wicnBtXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24veC1yZXNlYXJjaC1pbmZvLXN5c3RlbXNcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInJpc1wiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3gtc2VhXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcIm5naW54XCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInNlYVwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3gtc2hcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wic2hcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi94LXNoYXJcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInNoYXJcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi94LXNob2Nrd2F2ZS1mbGFzaFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiBmYWxzZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wic3dmXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24veC1zaWx2ZXJsaWdodC1hcHBcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInhhcFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3gtc3FsXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJzcWxcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi94LXN0dWZmaXRcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogZmFsc2UsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInNpdFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3gtc3R1ZmZpdHhcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInNpdHhcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi94LXN1YnJpcFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wic3J0XCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24veC1zdjRjcGlvXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJzdjRjcGlvXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24veC1zdjRjcmNcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInN2NGNyY1wiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3gtdDN2bS1pbWFnZVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1widDNcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi94LXRhZHNcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImdhbVwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3gtdGFyXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInRhclwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3gtdGNsXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ0Y2xcIixcInRrXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24veC10ZXhcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInRleFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3gtdGV4LXRmbVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1widGZtXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24veC10ZXhpbmZvXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ0ZXhpbmZvXCIsXCJ0ZXhpXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24veC10Z2lmXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJvYmpcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi94LXVzdGFyXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ1c3RhclwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3gtdmlydHVhbGJveC1oZGRcIjoge1xuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImhkZFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3gtdmlydHVhbGJveC1vdmFcIjoge1xuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIm92YVwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3gtdmlydHVhbGJveC1vdmZcIjoge1xuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIm92ZlwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3gtdmlydHVhbGJveC12Ym94XCI6IHtcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ2Ym94XCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24veC12aXJ0dWFsYm94LXZib3gtZXh0cGFja1wiOiB7XG4gICAgXCJjb21wcmVzc2libGVcIjogZmFsc2UsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInZib3gtZXh0cGFja1wiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3gtdmlydHVhbGJveC12ZGlcIjoge1xuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInZkaVwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3gtdmlydHVhbGJveC12aGRcIjoge1xuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInZoZFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3gtdmlydHVhbGJveC12bWRrXCI6IHtcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ2bWRrXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24veC13YWlzLXNvdXJjZVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wic3JjXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24veC13ZWItYXBwLW1hbmlmZXN0K2pzb25cIjoge1xuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIndlYmFwcFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3gteDUwOS1jYS1jZXJ0XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiZGVyXCIsXCJjcnRcIixcInBlbVwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3gteDUwOS1jYS1yYS1jZXJ0XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3gteDUwOS1uZXh0LWNhLWNlcnRcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24veC14ZmlnXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJmaWdcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi94LXhsaWZmK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ4bGZcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi94LXhwaW5zdGFsbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiBmYWxzZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wieHBpXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24veC14elwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wieHpcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi94LXptYWNoaW5lXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ6MVwiLFwiejJcIixcInozXCIsXCJ6NFwiLFwiejVcIixcIno2XCIsXCJ6N1wiLFwiejhcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi94NDAwLWJwXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImFwcGxpY2F0aW9uL3hhY21sK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3hhbWwreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInhhbWxcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi94Y2FwLWF0dCt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInhhdlwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3hjYXAtY2Fwcyt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInhjYVwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3hjYXAtZGlmZit4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInhkZlwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3hjYXAtZWwreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ4ZWxcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi94Y2FwLWVycm9yK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3hjYXAtbnMreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ4bnNcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi94Y29uLWNvbmZlcmVuY2UtaW5mbyt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi94Y29uLWNvbmZlcmVuY2UtaW5mby1kaWZmK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3hlbmMreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ4ZW5jXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24veGh0bWwreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ4aHRtbFwiLFwieGh0XCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24veGh0bWwtdm9pY2UreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi94bGlmZit4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInhsZlwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wieG1sXCIsXCJ4c2xcIixcInhzZFwiLFwicm5nXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24veG1sLWR0ZFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiZHRkXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24veG1sLWV4dGVybmFsLXBhcnNlZC1lbnRpdHlcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24veG1sLXBhdGNoK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3htcHAreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwiYXBwbGljYXRpb24veG9wK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wieG9wXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24veHByb2MreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInhwbFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3hzbHQreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ4c2xcIixcInhzbHRcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi94c3BmK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ4c3BmXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24veHYreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJteG1sXCIsXCJ4aHZtbFwiLFwieHZtbFwiLFwieHZtXCJdXG4gIH0sXG4gIFwiYXBwbGljYXRpb24veWFuZ1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInlhbmdcIl1cbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi95YW5nLWRhdGEranNvblwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3lhbmctZGF0YSt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi95YW5nLXBhdGNoK2pzb25cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWVcbiAgfSxcbiAgXCJhcHBsaWNhdGlvbi95YW5nLXBhdGNoK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3lpbit4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInlpblwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3ppcFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogZmFsc2UsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInppcFwiXVxuICB9LFxuICBcImFwcGxpY2F0aW9uL3psaWJcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXBwbGljYXRpb24venN0ZFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhdWRpby8xZC1pbnRlcmxlYXZlZC1wYXJpdHlmZWNcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXVkaW8vMzJrYWRwY21cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXVkaW8vM2dwcFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogZmFsc2UsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIjNncHBcIl1cbiAgfSxcbiAgXCJhdWRpby8zZ3BwMlwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhdWRpby9hYWNcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXVkaW8vYWMzXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImF1ZGlvL2FkcGNtXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJhZHBcIl1cbiAgfSxcbiAgXCJhdWRpby9hbXJcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJhbXJcIl1cbiAgfSxcbiAgXCJhdWRpby9hbXItd2JcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXVkaW8vYW1yLXdiK1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhdWRpby9hcHR4XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImF1ZGlvL2FzY1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhdWRpby9hdHJhYy1hZHZhbmNlZC1sb3NzbGVzc1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhdWRpby9hdHJhYy14XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImF1ZGlvL2F0cmFjM1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhdWRpby9iYXNpY1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogZmFsc2UsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImF1XCIsXCJzbmRcIl1cbiAgfSxcbiAgXCJhdWRpby9idjE2XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImF1ZGlvL2J2MzJcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXVkaW8vY2xlYXJtb2RlXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImF1ZGlvL2NuXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImF1ZGlvL2RhdDEyXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImF1ZGlvL2Rsc1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhdWRpby9kc3ItZXMyMDExMDhcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXVkaW8vZHNyLWVzMjAyMDUwXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImF1ZGlvL2Rzci1lczIwMjIxMVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhdWRpby9kc3ItZXMyMDIyMTJcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXVkaW8vZHZcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXVkaW8vZHZpNFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhdWRpby9lYWMzXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImF1ZGlvL2VuY2FwcnRwXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImF1ZGlvL2V2cmNcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXVkaW8vZXZyYy1xY3BcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXVkaW8vZXZyYzBcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXVkaW8vZXZyYzFcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXVkaW8vZXZyY2JcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXVkaW8vZXZyY2IwXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImF1ZGlvL2V2cmNiMVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhdWRpby9ldnJjbndcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXVkaW8vZXZyY253MFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhdWRpby9ldnJjbncxXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImF1ZGlvL2V2cmN3YlwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhdWRpby9ldnJjd2IwXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImF1ZGlvL2V2cmN3YjFcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXVkaW8vZXZzXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImF1ZGlvL2ZsZXhmZWNcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXVkaW8vZndkcmVkXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImF1ZGlvL2c3MTEtMFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhdWRpby9nNzE5XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImF1ZGlvL2c3MjJcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXVkaW8vZzcyMjFcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXVkaW8vZzcyM1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhdWRpby9nNzI2LTE2XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImF1ZGlvL2c3MjYtMjRcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXVkaW8vZzcyNi0zMlwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhdWRpby9nNzI2LTQwXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImF1ZGlvL2c3MjhcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXVkaW8vZzcyOVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhdWRpby9nNzI5MVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhdWRpby9nNzI5ZFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhdWRpby9nNzI5ZVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhdWRpby9nc21cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXVkaW8vZ3NtLWVmclwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhdWRpby9nc20taHItMDhcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXVkaW8vaWxiY1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhdWRpby9pcC1tcl92Mi41XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImF1ZGlvL2lzYWNcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCJcbiAgfSxcbiAgXCJhdWRpby9sMTZcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXVkaW8vbDIwXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImF1ZGlvL2wyNFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogZmFsc2VcbiAgfSxcbiAgXCJhdWRpby9sOFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhdWRpby9scGNcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXVkaW8vbWVscFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhdWRpby9tZWxwMTIwMFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhdWRpby9tZWxwMjQwMFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhdWRpby9tZWxwNjAwXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImF1ZGlvL21oYXNcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXVkaW8vbWlkaVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wibWlkXCIsXCJtaWRpXCIsXCJrYXJcIixcInJtaVwiXVxuICB9LFxuICBcImF1ZGlvL21vYmlsZS14bWZcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJteG1mXCJdXG4gIH0sXG4gIFwiYXVkaW8vbXAzXCI6IHtcbiAgICBcImNvbXByZXNzaWJsZVwiOiBmYWxzZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wibXAzXCJdXG4gIH0sXG4gIFwiYXVkaW8vbXA0XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiBmYWxzZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wibTRhXCIsXCJtcDRhXCJdXG4gIH0sXG4gIFwiYXVkaW8vbXA0YS1sYXRtXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImF1ZGlvL21wYVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhdWRpby9tcGEtcm9idXN0XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImF1ZGlvL21wZWdcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IGZhbHNlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJtcGdhXCIsXCJtcDJcIixcIm1wMmFcIixcIm1wM1wiLFwibTJhXCIsXCJtM2FcIl1cbiAgfSxcbiAgXCJhdWRpby9tcGVnNC1nZW5lcmljXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImF1ZGlvL211c2VwYWNrXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiXG4gIH0sXG4gIFwiYXVkaW8vb2dnXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiBmYWxzZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wib2dhXCIsXCJvZ2dcIixcInNweFwiLFwib3B1c1wiXVxuICB9LFxuICBcImF1ZGlvL29wdXNcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXVkaW8vcGFyaXR5ZmVjXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImF1ZGlvL3BjbWFcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXVkaW8vcGNtYS13YlwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhdWRpby9wY211XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImF1ZGlvL3BjbXUtd2JcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXVkaW8vcHJzLnNpZFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhdWRpby9xY2VscFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhdWRpby9yYXB0b3JmZWNcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXVkaW8vcmVkXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImF1ZGlvL3J0cC1lbmMtYWVzY20xMjhcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXVkaW8vcnRwLW1pZGlcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXVkaW8vcnRwbG9vcGJhY2tcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXVkaW8vcnR4XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImF1ZGlvL3MzbVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiczNtXCJdXG4gIH0sXG4gIFwiYXVkaW8vc2NpcFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhdWRpby9zaWxrXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJzaWxcIl1cbiAgfSxcbiAgXCJhdWRpby9zbXZcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXVkaW8vc212LXFjcFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhdWRpby9zbXYwXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImF1ZGlvL3NvZmFcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXVkaW8vc3AtbWlkaVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhdWRpby9zcGVleFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhdWRpby90MTQwY1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhdWRpby90MzhcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXVkaW8vdGVsZXBob25lLWV2ZW50XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImF1ZGlvL3RldHJhX2FjZWxwXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImF1ZGlvL3RldHJhX2FjZWxwX2JiXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImF1ZGlvL3RvbmVcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXVkaW8vdHN2Y2lzXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImF1ZGlvL3VlbWNsaXBcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXVkaW8vdWxwZmVjXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImF1ZGlvL3VzYWNcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXVkaW8vdmR2aVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhdWRpby92bXItd2JcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXVkaW8vdm5kLjNncHAuaXVmcFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhdWRpby92bmQuNHNiXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImF1ZGlvL3ZuZC5hdWRpb2tvelwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhdWRpby92bmQuY2VscFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhdWRpby92bmQuY2lzY28ubnNlXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImF1ZGlvL3ZuZC5jbWxlcy5yYWRpby1ldmVudHNcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXVkaW8vdm5kLmNucy5hbnAxXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImF1ZGlvL3ZuZC5jbnMuaW5mMVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhdWRpby92bmQuZGVjZS5hdWRpb1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInV2YVwiLFwidXZ2YVwiXVxuICB9LFxuICBcImF1ZGlvL3ZuZC5kaWdpdGFsLXdpbmRzXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiZW9sXCJdXG4gIH0sXG4gIFwiYXVkaW8vdm5kLmRsbmEuYWR0c1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhdWRpby92bmQuZG9sYnkuaGVhYWMuMVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhdWRpby92bmQuZG9sYnkuaGVhYWMuMlwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhdWRpby92bmQuZG9sYnkubWxwXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImF1ZGlvL3ZuZC5kb2xieS5tcHNcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXVkaW8vdm5kLmRvbGJ5LnBsMlwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhdWRpby92bmQuZG9sYnkucGwyeFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhdWRpby92bmQuZG9sYnkucGwyelwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhdWRpby92bmQuZG9sYnkucHVsc2UuMVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhdWRpby92bmQuZHJhXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiZHJhXCJdXG4gIH0sXG4gIFwiYXVkaW8vdm5kLmR0c1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImR0c1wiXVxuICB9LFxuICBcImF1ZGlvL3ZuZC5kdHMuaGRcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJkdHNoZFwiXVxuICB9LFxuICBcImF1ZGlvL3ZuZC5kdHMudWhkXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImF1ZGlvL3ZuZC5kdmIuZmlsZVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhdWRpby92bmQuZXZlcmFkLnBsalwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhdWRpby92bmQuaG5zLmF1ZGlvXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImF1ZGlvL3ZuZC5sdWNlbnQudm9pY2VcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJsdnBcIl1cbiAgfSxcbiAgXCJhdWRpby92bmQubXMtcGxheXJlYWR5Lm1lZGlhLnB5YVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInB5YVwiXVxuICB9LFxuICBcImF1ZGlvL3ZuZC5ub2tpYS5tb2JpbGUteG1mXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImF1ZGlvL3ZuZC5ub3J0ZWwudmJrXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImF1ZGlvL3ZuZC5udWVyYS5lY2VscDQ4MDBcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJlY2VscDQ4MDBcIl1cbiAgfSxcbiAgXCJhdWRpby92bmQubnVlcmEuZWNlbHA3NDcwXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiZWNlbHA3NDcwXCJdXG4gIH0sXG4gIFwiYXVkaW8vdm5kLm51ZXJhLmVjZWxwOTYwMFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImVjZWxwOTYwMFwiXVxuICB9LFxuICBcImF1ZGlvL3ZuZC5vY3RlbC5zYmNcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXVkaW8vdm5kLnByZXNvbnVzLm11bHRpdHJhY2tcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXVkaW8vdm5kLnFjZWxwXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImF1ZGlvL3ZuZC5yaGV0b3JleC4zMmthZHBjbVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhdWRpby92bmQucmlwXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wicmlwXCJdXG4gIH0sXG4gIFwiYXVkaW8vdm5kLnJuLXJlYWxhdWRpb1wiOiB7XG4gICAgXCJjb21wcmVzc2libGVcIjogZmFsc2VcbiAgfSxcbiAgXCJhdWRpby92bmQuc2VhbGVkbWVkaWEuc29mdHNlYWwubXBlZ1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJhdWRpby92bmQudm14LmN2c2RcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXVkaW8vdm5kLndhdmVcIjoge1xuICAgIFwiY29tcHJlc3NpYmxlXCI6IGZhbHNlXG4gIH0sXG4gIFwiYXVkaW8vdm9yYmlzXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiBmYWxzZVxuICB9LFxuICBcImF1ZGlvL3ZvcmJpcy1jb25maWdcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiYXVkaW8vd2F2XCI6IHtcbiAgICBcImNvbXByZXNzaWJsZVwiOiBmYWxzZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wid2F2XCJdXG4gIH0sXG4gIFwiYXVkaW8vd2F2ZVwiOiB7XG4gICAgXCJjb21wcmVzc2libGVcIjogZmFsc2UsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIndhdlwiXVxuICB9LFxuICBcImF1ZGlvL3dlYm1cIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogZmFsc2UsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIndlYmFcIl1cbiAgfSxcbiAgXCJhdWRpby94LWFhY1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiBmYWxzZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiYWFjXCJdXG4gIH0sXG4gIFwiYXVkaW8veC1haWZmXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJhaWZcIixcImFpZmZcIixcImFpZmNcIl1cbiAgfSxcbiAgXCJhdWRpby94LWNhZlwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiBmYWxzZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiY2FmXCJdXG4gIH0sXG4gIFwiYXVkaW8veC1mbGFjXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJmbGFjXCJdXG4gIH0sXG4gIFwiYXVkaW8veC1tNGFcIjoge1xuICAgIFwic291cmNlXCI6IFwibmdpbnhcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wibTRhXCJdXG4gIH0sXG4gIFwiYXVkaW8veC1tYXRyb3NrYVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wibWthXCJdXG4gIH0sXG4gIFwiYXVkaW8veC1tcGVndXJsXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJtM3VcIl1cbiAgfSxcbiAgXCJhdWRpby94LW1zLXdheFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wid2F4XCJdXG4gIH0sXG4gIFwiYXVkaW8veC1tcy13bWFcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIndtYVwiXVxuICB9LFxuICBcImF1ZGlvL3gtcG4tcmVhbGF1ZGlvXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJyYW1cIixcInJhXCJdXG4gIH0sXG4gIFwiYXVkaW8veC1wbi1yZWFsYXVkaW8tcGx1Z2luXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJybXBcIl1cbiAgfSxcbiAgXCJhdWRpby94LXJlYWxhdWRpb1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJuZ2lueFwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJyYVwiXVxuICB9LFxuICBcImF1ZGlvL3gtdHRhXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiXG4gIH0sXG4gIFwiYXVkaW8veC13YXZcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIndhdlwiXVxuICB9LFxuICBcImF1ZGlvL3htXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ4bVwiXVxuICB9LFxuICBcImNoZW1pY2FsL3gtY2R4XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJjZHhcIl1cbiAgfSxcbiAgXCJjaGVtaWNhbC94LWNpZlwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiY2lmXCJdXG4gIH0sXG4gIFwiY2hlbWljYWwveC1jbWRmXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJjbWRmXCJdXG4gIH0sXG4gIFwiY2hlbWljYWwveC1jbWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImNtbFwiXVxuICB9LFxuICBcImNoZW1pY2FsL3gtY3NtbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiY3NtbFwiXVxuICB9LFxuICBcImNoZW1pY2FsL3gtcGRiXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiXG4gIH0sXG4gIFwiY2hlbWljYWwveC14eXpcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInh5elwiXVxuICB9LFxuICBcImZvbnQvY29sbGVjdGlvblwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInR0Y1wiXVxuICB9LFxuICBcImZvbnQvb3RmXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJvdGZcIl1cbiAgfSxcbiAgXCJmb250L3NmbnRcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiZm9udC90dGZcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInR0ZlwiXVxuICB9LFxuICBcImZvbnQvd29mZlwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIndvZmZcIl1cbiAgfSxcbiAgXCJmb250L3dvZmYyXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wid29mZjJcIl1cbiAgfSxcbiAgXCJpbWFnZS9hY2VzXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiZXhyXCJdXG4gIH0sXG4gIFwiaW1hZ2UvYXBuZ1wiOiB7XG4gICAgXCJjb21wcmVzc2libGVcIjogZmFsc2UsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImFwbmdcIl1cbiAgfSxcbiAgXCJpbWFnZS9hdmNpXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiYXZjaVwiXVxuICB9LFxuICBcImltYWdlL2F2Y3NcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJhdmNzXCJdXG4gIH0sXG4gIFwiaW1hZ2UvYXZpZlwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogZmFsc2UsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImF2aWZcIl1cbiAgfSxcbiAgXCJpbWFnZS9ibXBcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImJtcFwiXVxuICB9LFxuICBcImltYWdlL2NnbVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImNnbVwiXVxuICB9LFxuICBcImltYWdlL2RpY29tLXJsZVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImRybGVcIl1cbiAgfSxcbiAgXCJpbWFnZS9lbWZcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJlbWZcIl1cbiAgfSxcbiAgXCJpbWFnZS9maXRzXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiZml0c1wiXVxuICB9LFxuICBcImltYWdlL2czZmF4XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiZzNcIl1cbiAgfSxcbiAgXCJpbWFnZS9naWZcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IGZhbHNlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJnaWZcIl1cbiAgfSxcbiAgXCJpbWFnZS9oZWljXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiaGVpY1wiXVxuICB9LFxuICBcImltYWdlL2hlaWMtc2VxdWVuY2VcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJoZWljc1wiXVxuICB9LFxuICBcImltYWdlL2hlaWZcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJoZWlmXCJdXG4gIH0sXG4gIFwiaW1hZ2UvaGVpZi1zZXF1ZW5jZVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImhlaWZzXCJdXG4gIH0sXG4gIFwiaW1hZ2UvaGVqMmtcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJoZWoyXCJdXG4gIH0sXG4gIFwiaW1hZ2UvaHNqMlwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImhzajJcIl1cbiAgfSxcbiAgXCJpbWFnZS9pZWZcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJpZWZcIl1cbiAgfSxcbiAgXCJpbWFnZS9qbHNcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJqbHNcIl1cbiAgfSxcbiAgXCJpbWFnZS9qcDJcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IGZhbHNlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJqcDJcIixcImpwZzJcIl1cbiAgfSxcbiAgXCJpbWFnZS9qcGVnXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiBmYWxzZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wianBlZ1wiLFwianBnXCIsXCJqcGVcIl1cbiAgfSxcbiAgXCJpbWFnZS9qcGhcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJqcGhcIl1cbiAgfSxcbiAgXCJpbWFnZS9qcGhjXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiamhjXCJdXG4gIH0sXG4gIFwiaW1hZ2UvanBtXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiBmYWxzZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wianBtXCJdXG4gIH0sXG4gIFwiaW1hZ2UvanB4XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiBmYWxzZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wianB4XCIsXCJqcGZcIl1cbiAgfSxcbiAgXCJpbWFnZS9qeHJcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJqeHJcIl1cbiAgfSxcbiAgXCJpbWFnZS9qeHJhXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wianhyYVwiXVxuICB9LFxuICBcImltYWdlL2p4cnNcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJqeHJzXCJdXG4gIH0sXG4gIFwiaW1hZ2UvanhzXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wianhzXCJdXG4gIH0sXG4gIFwiaW1hZ2UvanhzY1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImp4c2NcIl1cbiAgfSxcbiAgXCJpbWFnZS9qeHNpXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wianhzaVwiXVxuICB9LFxuICBcImltYWdlL2p4c3NcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJqeHNzXCJdXG4gIH0sXG4gIFwiaW1hZ2Uva3R4XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wia3R4XCJdXG4gIH0sXG4gIFwiaW1hZ2Uva3R4MlwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImt0eDJcIl1cbiAgfSxcbiAgXCJpbWFnZS9uYXBscHNcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiaW1hZ2UvcGpwZWdcIjoge1xuICAgIFwiY29tcHJlc3NpYmxlXCI6IGZhbHNlXG4gIH0sXG4gIFwiaW1hZ2UvcG5nXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiBmYWxzZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wicG5nXCJdXG4gIH0sXG4gIFwiaW1hZ2UvcHJzLmJ0aWZcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJidGlmXCJdXG4gIH0sXG4gIFwiaW1hZ2UvcHJzLnB0aVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInB0aVwiXVxuICB9LFxuICBcImltYWdlL3B3Zy1yYXN0ZXJcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiaW1hZ2Uvc2dpXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJzZ2lcIl1cbiAgfSxcbiAgXCJpbWFnZS9zdmcreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJzdmdcIixcInN2Z3pcIl1cbiAgfSxcbiAgXCJpbWFnZS90MzhcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ0MzhcIl1cbiAgfSxcbiAgXCJpbWFnZS90aWZmXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiBmYWxzZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1widGlmXCIsXCJ0aWZmXCJdXG4gIH0sXG4gIFwiaW1hZ2UvdGlmZi1meFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInRmeFwiXVxuICB9LFxuICBcImltYWdlL3ZuZC5hZG9iZS5waG90b3Nob3BcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInBzZFwiXVxuICB9LFxuICBcImltYWdlL3ZuZC5haXJ6aXAuYWNjZWxlcmF0b3IuYXp2XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiYXp2XCJdXG4gIH0sXG4gIFwiaW1hZ2Uvdm5kLmNucy5pbmYyXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImltYWdlL3ZuZC5kZWNlLmdyYXBoaWNcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ1dmlcIixcInV2dmlcIixcInV2Z1wiLFwidXZ2Z1wiXVxuICB9LFxuICBcImltYWdlL3ZuZC5kanZ1XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiZGp2dVwiLFwiZGp2XCJdXG4gIH0sXG4gIFwiaW1hZ2Uvdm5kLmR2Yi5zdWJ0aXRsZVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInN1YlwiXVxuICB9LFxuICBcImltYWdlL3ZuZC5kd2dcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJkd2dcIl1cbiAgfSxcbiAgXCJpbWFnZS92bmQuZHhmXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiZHhmXCJdXG4gIH0sXG4gIFwiaW1hZ2Uvdm5kLmZhc3RiaWRzaGVldFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImZic1wiXVxuICB9LFxuICBcImltYWdlL3ZuZC5mcHhcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJmcHhcIl1cbiAgfSxcbiAgXCJpbWFnZS92bmQuZnN0XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiZnN0XCJdXG4gIH0sXG4gIFwiaW1hZ2Uvdm5kLmZ1aml4ZXJveC5lZG1pY3MtbW1yXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wibW1yXCJdXG4gIH0sXG4gIFwiaW1hZ2Uvdm5kLmZ1aml4ZXJveC5lZG1pY3MtcmxjXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wicmxjXCJdXG4gIH0sXG4gIFwiaW1hZ2Uvdm5kLmdsb2JhbGdyYXBoaWNzLnBnYlwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJpbWFnZS92bmQubWljcm9zb2Z0Lmljb25cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImljb1wiXVxuICB9LFxuICBcImltYWdlL3ZuZC5taXhcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiaW1hZ2Uvdm5kLm1vemlsbGEuYXBuZ1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJpbWFnZS92bmQubXMtZGRzXCI6IHtcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJkZHNcIl1cbiAgfSxcbiAgXCJpbWFnZS92bmQubXMtbW9kaVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIm1kaVwiXVxuICB9LFxuICBcImltYWdlL3ZuZC5tcy1waG90b1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wid2RwXCJdXG4gIH0sXG4gIFwiaW1hZ2Uvdm5kLm5ldC1mcHhcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJucHhcIl1cbiAgfSxcbiAgXCJpbWFnZS92bmQucGNvLmIxNlwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImIxNlwiXVxuICB9LFxuICBcImltYWdlL3ZuZC5yYWRpYW5jZVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJpbWFnZS92bmQuc2VhbGVkLnBuZ1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJpbWFnZS92bmQuc2VhbGVkbWVkaWEuc29mdHNlYWwuZ2lmXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcImltYWdlL3ZuZC5zZWFsZWRtZWRpYS5zb2Z0c2VhbC5qcGdcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwiaW1hZ2Uvdm5kLnN2ZlwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJpbWFnZS92bmQudGVuY2VudC50YXBcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ0YXBcIl1cbiAgfSxcbiAgXCJpbWFnZS92bmQudmFsdmUuc291cmNlLnRleHR1cmVcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ2dGZcIl1cbiAgfSxcbiAgXCJpbWFnZS92bmQud2FwLndibXBcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ3Ym1wXCJdXG4gIH0sXG4gIFwiaW1hZ2Uvdm5kLnhpZmZcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ4aWZcIl1cbiAgfSxcbiAgXCJpbWFnZS92bmQuemJydXNoLnBjeFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInBjeFwiXVxuICB9LFxuICBcImltYWdlL3dlYnBcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIndlYnBcIl1cbiAgfSxcbiAgXCJpbWFnZS93bWZcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ3bWZcIl1cbiAgfSxcbiAgXCJpbWFnZS94LTNkc1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiM2RzXCJdXG4gIH0sXG4gIFwiaW1hZ2UveC1jbXUtcmFzdGVyXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJyYXNcIl1cbiAgfSxcbiAgXCJpbWFnZS94LWNteFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiY214XCJdXG4gIH0sXG4gIFwiaW1hZ2UveC1mcmVlaGFuZFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiZmhcIixcImZoY1wiLFwiZmg0XCIsXCJmaDVcIixcImZoN1wiXVxuICB9LFxuICBcImltYWdlL3gtaWNvblwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJpY29cIl1cbiAgfSxcbiAgXCJpbWFnZS94LWpuZ1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJuZ2lueFwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJqbmdcIl1cbiAgfSxcbiAgXCJpbWFnZS94LW1yc2lkLWltYWdlXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJzaWRcIl1cbiAgfSxcbiAgXCJpbWFnZS94LW1zLWJtcFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJuZ2lueFwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImJtcFwiXVxuICB9LFxuICBcImltYWdlL3gtcGN4XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJwY3hcIl1cbiAgfSxcbiAgXCJpbWFnZS94LXBpY3RcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInBpY1wiLFwicGN0XCJdXG4gIH0sXG4gIFwiaW1hZ2UveC1wb3J0YWJsZS1hbnltYXBcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInBubVwiXVxuICB9LFxuICBcImltYWdlL3gtcG9ydGFibGUtYml0bWFwXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJwYm1cIl1cbiAgfSxcbiAgXCJpbWFnZS94LXBvcnRhYmxlLWdyYXltYXBcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInBnbVwiXVxuICB9LFxuICBcImltYWdlL3gtcG9ydGFibGUtcGl4bWFwXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJwcG1cIl1cbiAgfSxcbiAgXCJpbWFnZS94LXJnYlwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wicmdiXCJdXG4gIH0sXG4gIFwiaW1hZ2UveC10Z2FcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInRnYVwiXVxuICB9LFxuICBcImltYWdlL3gteGJpdG1hcFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wieGJtXCJdXG4gIH0sXG4gIFwiaW1hZ2UveC14Y2ZcIjoge1xuICAgIFwiY29tcHJlc3NpYmxlXCI6IGZhbHNlXG4gIH0sXG4gIFwiaW1hZ2UveC14cGl4bWFwXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ4cG1cIl1cbiAgfSxcbiAgXCJpbWFnZS94LXh3aW5kb3dkdW1wXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ4d2RcIl1cbiAgfSxcbiAgXCJtZXNzYWdlL2NwaW1cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwibWVzc2FnZS9kZWxpdmVyeS1zdGF0dXNcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwibWVzc2FnZS9kaXNwb3NpdGlvbi1ub3RpZmljYXRpb25cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXG4gICAgICBcImRpc3Bvc2l0aW9uLW5vdGlmaWNhdGlvblwiXG4gICAgXVxuICB9LFxuICBcIm1lc3NhZ2UvZXh0ZXJuYWwtYm9keVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJtZXNzYWdlL2ZlZWRiYWNrLXJlcG9ydFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJtZXNzYWdlL2dsb2JhbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInU4bXNnXCJdXG4gIH0sXG4gIFwibWVzc2FnZS9nbG9iYWwtZGVsaXZlcnktc3RhdHVzXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1widThkc25cIl1cbiAgfSxcbiAgXCJtZXNzYWdlL2dsb2JhbC1kaXNwb3NpdGlvbi1ub3RpZmljYXRpb25cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ1OG1kblwiXVxuICB9LFxuICBcIm1lc3NhZ2UvZ2xvYmFsLWhlYWRlcnNcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ1OGhkclwiXVxuICB9LFxuICBcIm1lc3NhZ2UvaHR0cFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogZmFsc2VcbiAgfSxcbiAgXCJtZXNzYWdlL2ltZG4reG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwibWVzc2FnZS9uZXdzXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcIm1lc3NhZ2UvcGFydGlhbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogZmFsc2VcbiAgfSxcbiAgXCJtZXNzYWdlL3JmYzgyMlwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiZW1sXCIsXCJtaW1lXCJdXG4gIH0sXG4gIFwibWVzc2FnZS9zLWh0dHBcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwibWVzc2FnZS9zaXBcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwibWVzc2FnZS9zaXBmcmFnXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcIm1lc3NhZ2UvdHJhY2tpbmctc3RhdHVzXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcIm1lc3NhZ2Uvdm5kLnNpLnNpbXBcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwibWVzc2FnZS92bmQud2ZhLndzY1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIndzY1wiXVxuICB9LFxuICBcIm1vZGVsLzNtZlwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIjNtZlwiXVxuICB9LFxuICBcIm1vZGVsL2U1N1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJtb2RlbC9nbHRmK2pzb25cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImdsdGZcIl1cbiAgfSxcbiAgXCJtb2RlbC9nbHRmLWJpbmFyeVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiZ2xiXCJdXG4gIH0sXG4gIFwibW9kZWwvaWdlc1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogZmFsc2UsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImlnc1wiLFwiaWdlc1wiXVxuICB9LFxuICBcIm1vZGVsL21lc2hcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IGZhbHNlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJtc2hcIixcIm1lc2hcIixcInNpbG9cIl1cbiAgfSxcbiAgXCJtb2RlbC9tdGxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJtdGxcIl1cbiAgfSxcbiAgXCJtb2RlbC9vYmpcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJvYmpcIl1cbiAgfSxcbiAgXCJtb2RlbC9zdGVwXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcIm1vZGVsL3N0ZXAreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJzdHB4XCJdXG4gIH0sXG4gIFwibW9kZWwvc3RlcCt6aXBcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IGZhbHNlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJzdHB6XCJdXG4gIH0sXG4gIFwibW9kZWwvc3RlcC14bWwremlwXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiBmYWxzZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wic3RweHpcIl1cbiAgfSxcbiAgXCJtb2RlbC9zdGxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJzdGxcIl1cbiAgfSxcbiAgXCJtb2RlbC92bmQuY29sbGFkYSt4bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImRhZVwiXVxuICB9LFxuICBcIm1vZGVsL3ZuZC5kd2ZcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJkd2ZcIl1cbiAgfSxcbiAgXCJtb2RlbC92bmQuZmxhdGxhbmQuM2RtbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJtb2RlbC92bmQuZ2RsXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiZ2RsXCJdXG4gIH0sXG4gIFwibW9kZWwvdm5kLmdzLWdkbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIlxuICB9LFxuICBcIm1vZGVsL3ZuZC5ncy5nZGxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwibW9kZWwvdm5kLmd0d1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImd0d1wiXVxuICB9LFxuICBcIm1vZGVsL3ZuZC5tb21sK3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcIm1vZGVsL3ZuZC5tdHNcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJtdHNcIl1cbiAgfSxcbiAgXCJtb2RlbC92bmQub3BlbmdleFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIm9nZXhcIl1cbiAgfSxcbiAgXCJtb2RlbC92bmQucGFyYXNvbGlkLnRyYW5zbWl0LmJpbmFyeVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInhfYlwiXVxuICB9LFxuICBcIm1vZGVsL3ZuZC5wYXJhc29saWQudHJhbnNtaXQudGV4dFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInhfdFwiXVxuICB9LFxuICBcIm1vZGVsL3ZuZC5weXRoYS5weW94XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcIm1vZGVsL3ZuZC5yb3NldHRlLmFubm90YXRlZC1kYXRhLW1vZGVsXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcIm1vZGVsL3ZuZC5zYXAudmRzXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1widmRzXCJdXG4gIH0sXG4gIFwibW9kZWwvdm5kLnVzZHoremlwXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiBmYWxzZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1widXNkelwiXVxuICB9LFxuICBcIm1vZGVsL3ZuZC52YWx2ZS5zb3VyY2UuY29tcGlsZWQtbWFwXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiYnNwXCJdXG4gIH0sXG4gIFwibW9kZWwvdm5kLnZ0dVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInZ0dVwiXVxuICB9LFxuICBcIm1vZGVsL3ZybWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IGZhbHNlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ3cmxcIixcInZybWxcIl1cbiAgfSxcbiAgXCJtb2RlbC94M2QrYmluYXJ5XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IGZhbHNlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ4M2RiXCIsXCJ4M2RielwiXVxuICB9LFxuICBcIm1vZGVsL3gzZCtmYXN0aW5mb3NldFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIngzZGJcIl1cbiAgfSxcbiAgXCJtb2RlbC94M2QrdnJtbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiBmYWxzZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wieDNkdlwiLFwieDNkdnpcIl1cbiAgfSxcbiAgXCJtb2RlbC94M2QreG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ4M2RcIixcIngzZHpcIl1cbiAgfSxcbiAgXCJtb2RlbC94M2QtdnJtbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIngzZHZcIl1cbiAgfSxcbiAgXCJtdWx0aXBhcnQvYWx0ZXJuYXRpdmVcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IGZhbHNlXG4gIH0sXG4gIFwibXVsdGlwYXJ0L2FwcGxlZG91YmxlXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcIm11bHRpcGFydC9ieXRlcmFuZ2VzXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcIm11bHRpcGFydC9kaWdlc3RcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwibXVsdGlwYXJ0L2VuY3J5cHRlZFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogZmFsc2VcbiAgfSxcbiAgXCJtdWx0aXBhcnQvZm9ybS1kYXRhXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiBmYWxzZVxuICB9LFxuICBcIm11bHRpcGFydC9oZWFkZXItc2V0XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcIm11bHRpcGFydC9taXhlZFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJtdWx0aXBhcnQvbXVsdGlsaW5ndWFsXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcIm11bHRpcGFydC9wYXJhbGxlbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJtdWx0aXBhcnQvcmVsYXRlZFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogZmFsc2VcbiAgfSxcbiAgXCJtdWx0aXBhcnQvcmVwb3J0XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcIm11bHRpcGFydC9zaWduZWRcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IGZhbHNlXG4gIH0sXG4gIFwibXVsdGlwYXJ0L3ZuZC5iaW50Lm1lZC1wbHVzXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcIm11bHRpcGFydC92b2ljZS1tZXNzYWdlXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcIm11bHRpcGFydC94LW1peGVkLXJlcGxhY2VcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwidGV4dC8xZC1pbnRlcmxlYXZlZC1wYXJpdHlmZWNcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwidGV4dC9jYWNoZS1tYW5pZmVzdFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiYXBwY2FjaGVcIixcIm1hbmlmZXN0XCJdXG4gIH0sXG4gIFwidGV4dC9jYWxlbmRhclwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImljc1wiLFwiaWZiXCJdXG4gIH0sXG4gIFwidGV4dC9jYWxlbmRlclwiOiB7XG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcInRleHQvY21kXCI6IHtcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwidGV4dC9jb2ZmZWVzY3JpcHRcIjoge1xuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJjb2ZmZWVcIixcImxpdGNvZmZlZVwiXVxuICB9LFxuICBcInRleHQvY3FsXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcInRleHQvY3FsLWV4cHJlc3Npb25cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwidGV4dC9jcWwtaWRlbnRpZmllclwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJ0ZXh0L2Nzc1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjaGFyc2V0XCI6IFwiVVRGLThcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJjc3NcIl1cbiAgfSxcbiAgXCJ0ZXh0L2NzdlwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiY3N2XCJdXG4gIH0sXG4gIFwidGV4dC9jc3Ytc2NoZW1hXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcInRleHQvZGlyZWN0b3J5XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcInRleHQvZG5zXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcInRleHQvZWNtYXNjcmlwdFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJ0ZXh0L2VuY2FwcnRwXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcInRleHQvZW5yaWNoZWRcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwidGV4dC9maGlycGF0aFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJ0ZXh0L2ZsZXhmZWNcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwidGV4dC9md2RyZWRcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwidGV4dC9nZmYzXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcInRleHQvZ3JhbW1hci1yZWYtbGlzdFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJ0ZXh0L2h0bWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImh0bWxcIixcImh0bVwiLFwic2h0bWxcIl1cbiAgfSxcbiAgXCJ0ZXh0L2phZGVcIjoge1xuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJqYWRlXCJdXG4gIH0sXG4gIFwidGV4dC9qYXZhc2NyaXB0XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwidGV4dC9qY3ItY25kXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcInRleHQvanN4XCI6IHtcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJqc3hcIl1cbiAgfSxcbiAgXCJ0ZXh0L2xlc3NcIjoge1xuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImxlc3NcIl1cbiAgfSxcbiAgXCJ0ZXh0L21hcmtkb3duXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJtYXJrZG93blwiLFwibWRcIl1cbiAgfSxcbiAgXCJ0ZXh0L21hdGhtbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJuZ2lueFwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJtbWxcIl1cbiAgfSxcbiAgXCJ0ZXh0L21keFwiOiB7XG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wibWR4XCJdXG4gIH0sXG4gIFwidGV4dC9taXphclwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJ0ZXh0L24zXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNoYXJzZXRcIjogXCJVVEYtOFwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIm4zXCJdXG4gIH0sXG4gIFwidGV4dC9wYXJhbWV0ZXJzXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNoYXJzZXRcIjogXCJVVEYtOFwiXG4gIH0sXG4gIFwidGV4dC9wYXJpdHlmZWNcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwidGV4dC9wbGFpblwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1widHh0XCIsXCJ0ZXh0XCIsXCJjb25mXCIsXCJkZWZcIixcImxpc3RcIixcImxvZ1wiLFwiaW5cIixcImluaVwiXVxuICB9LFxuICBcInRleHQvcHJvdmVuYW5jZS1ub3RhdGlvblwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjaGFyc2V0XCI6IFwiVVRGLThcIlxuICB9LFxuICBcInRleHQvcHJzLmZhbGxlbnN0ZWluLnJzdFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJ0ZXh0L3Bycy5saW5lcy50YWdcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJkc2NcIl1cbiAgfSxcbiAgXCJ0ZXh0L3Bycy5wcm9wLmxvZ2ljXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcInRleHQvcmFwdG9yZmVjXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcInRleHQvcmVkXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcInRleHQvcmZjODIyLWhlYWRlcnNcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwidGV4dC9yaWNodGV4dFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wicnR4XCJdXG4gIH0sXG4gIFwidGV4dC9ydGZcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInJ0ZlwiXVxuICB9LFxuICBcInRleHQvcnRwLWVuYy1hZXNjbTEyOFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJ0ZXh0L3J0cGxvb3BiYWNrXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcInRleHQvcnR4XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcInRleHQvc2dtbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInNnbWxcIixcInNnbVwiXVxuICB9LFxuICBcInRleHQvc2hhY2xjXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcInRleHQvc2hleFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInNoZXhcIl1cbiAgfSxcbiAgXCJ0ZXh0L3NsaW1cIjoge1xuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJzbGltXCIsXCJzbG1cIl1cbiAgfSxcbiAgXCJ0ZXh0L3NwZHhcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJzcGR4XCJdXG4gIH0sXG4gIFwidGV4dC9zdHJpbmdzXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcInRleHQvc3R5bHVzXCI6IHtcbiAgICBcImV4dGVuc2lvbnNcIjogW1wic3R5bHVzXCIsXCJzdHlsXCJdXG4gIH0sXG4gIFwidGV4dC90MTQwXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcInRleHQvdGFiLXNlcGFyYXRlZC12YWx1ZXNcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInRzdlwiXVxuICB9LFxuICBcInRleHQvdHJvZmZcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ0XCIsXCJ0clwiLFwicm9mZlwiLFwibWFuXCIsXCJtZVwiLFwibXNcIl1cbiAgfSxcbiAgXCJ0ZXh0L3R1cnRsZVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjaGFyc2V0XCI6IFwiVVRGLThcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1widHRsXCJdXG4gIH0sXG4gIFwidGV4dC91bHBmZWNcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwidGV4dC91cmktbGlzdFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1widXJpXCIsXCJ1cmlzXCIsXCJ1cmxzXCJdXG4gIH0sXG4gIFwidGV4dC92Y2FyZFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1widmNhcmRcIl1cbiAgfSxcbiAgXCJ0ZXh0L3ZuZC5hXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcInRleHQvdm5kLmFiY1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJ0ZXh0L3ZuZC5hc2NpaS1hcnRcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwidGV4dC92bmQuY3VybFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImN1cmxcIl1cbiAgfSxcbiAgXCJ0ZXh0L3ZuZC5jdXJsLmRjdXJsXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJkY3VybFwiXVxuICB9LFxuICBcInRleHQvdm5kLmN1cmwubWN1cmxcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIm1jdXJsXCJdXG4gIH0sXG4gIFwidGV4dC92bmQuY3VybC5zY3VybFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wic2N1cmxcIl1cbiAgfSxcbiAgXCJ0ZXh0L3ZuZC5kZWJpYW4uY29weXJpZ2h0XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImNoYXJzZXRcIjogXCJVVEYtOFwiXG4gIH0sXG4gIFwidGV4dC92bmQuZG1jbGllbnRzY3JpcHRcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwidGV4dC92bmQuZHZiLnN1YnRpdGxlXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wic3ViXCJdXG4gIH0sXG4gIFwidGV4dC92bmQuZXNtZXJ0ZWMudGhlbWUtZGVzY3JpcHRvclwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjaGFyc2V0XCI6IFwiVVRGLThcIlxuICB9LFxuICBcInRleHQvdm5kLmZhbWlseXNlYXJjaC5nZWRjb21cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJnZWRcIl1cbiAgfSxcbiAgXCJ0ZXh0L3ZuZC5maWNsYWIuZmx0XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcInRleHQvdm5kLmZseVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImZseVwiXVxuICB9LFxuICBcInRleHQvdm5kLmZtaS5mbGV4c3RvclwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImZseFwiXVxuICB9LFxuICBcInRleHQvdm5kLmdtbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJ0ZXh0L3ZuZC5ncmFwaHZpelwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImd2XCJdXG4gIH0sXG4gIFwidGV4dC92bmQuaGFuc1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJ0ZXh0L3ZuZC5oZ2xcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwidGV4dC92bmQuaW4zZC4zZG1sXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiM2RtbFwiXVxuICB9LFxuICBcInRleHQvdm5kLmluM2Quc3BvdFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInNwb3RcIl1cbiAgfSxcbiAgXCJ0ZXh0L3ZuZC5pcHRjLm5ld3NtbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJ0ZXh0L3ZuZC5pcHRjLm5pdGZcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwidGV4dC92bmQubGF0ZXgtelwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJ0ZXh0L3ZuZC5tb3Rvcm9sYS5yZWZsZXhcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwidGV4dC92bmQubXMtbWVkaWFwYWNrYWdlXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcInRleHQvdm5kLm5ldDJwaG9uZS5jb21tY2VudGVyLmNvbW1hbmRcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwidGV4dC92bmQucmFkaXN5cy5tc21sLWJhc2ljLWxheW91dFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJ0ZXh0L3ZuZC5zZW54LndhcnBzY3JpcHRcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwidGV4dC92bmQuc2kudXJpY2F0YWxvZ3VlXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcInRleHQvdm5kLnNvc2lcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwidGV4dC92bmQuc3VuLmoybWUuYXBwLWRlc2NyaXB0b3JcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY2hhcnNldFwiOiBcIlVURi04XCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImphZFwiXVxuICB9LFxuICBcInRleHQvdm5kLnRyb2xsdGVjaC5saW5ndWlzdFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjaGFyc2V0XCI6IFwiVVRGLThcIlxuICB9LFxuICBcInRleHQvdm5kLndhcC5zaVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJ0ZXh0L3ZuZC53YXAuc2xcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwidGV4dC92bmQud2FwLndtbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIndtbFwiXVxuICB9LFxuICBcInRleHQvdm5kLndhcC53bWxzY3JpcHRcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ3bWxzXCJdXG4gIH0sXG4gIFwidGV4dC92dHRcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiY2hhcnNldFwiOiBcIlVURi04XCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1widnR0XCJdXG4gIH0sXG4gIFwidGV4dC94LWFzbVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wic1wiLFwiYXNtXCJdXG4gIH0sXG4gIFwidGV4dC94LWNcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImNcIixcImNjXCIsXCJjeHhcIixcImNwcFwiLFwiaFwiLFwiaGhcIixcImRpY1wiXVxuICB9LFxuICBcInRleHQveC1jb21wb25lbnRcIjoge1xuICAgIFwic291cmNlXCI6IFwibmdpbnhcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiaHRjXCJdXG4gIH0sXG4gIFwidGV4dC94LWZvcnRyYW5cIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImZcIixcImZvclwiLFwiZjc3XCIsXCJmOTBcIl1cbiAgfSxcbiAgXCJ0ZXh0L3gtZ3d0LXJwY1wiOiB7XG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcInRleHQveC1oYW5kbGViYXJzLXRlbXBsYXRlXCI6IHtcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiaGJzXCJdXG4gIH0sXG4gIFwidGV4dC94LWphdmEtc291cmNlXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJqYXZhXCJdXG4gIH0sXG4gIFwidGV4dC94LWpxdWVyeS10bXBsXCI6IHtcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH0sXG4gIFwidGV4dC94LWx1YVwiOiB7XG4gICAgXCJleHRlbnNpb25zXCI6IFtcImx1YVwiXVxuICB9LFxuICBcInRleHQveC1tYXJrZG93blwiOiB7XG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wibWtkXCJdXG4gIH0sXG4gIFwidGV4dC94LW5mb1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wibmZvXCJdXG4gIH0sXG4gIFwidGV4dC94LW9wbWxcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIm9wbWxcIl1cbiAgfSxcbiAgXCJ0ZXh0L3gtb3JnXCI6IHtcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJvcmdcIl1cbiAgfSxcbiAgXCJ0ZXh0L3gtcGFzY2FsXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJwXCIsXCJwYXNcIl1cbiAgfSxcbiAgXCJ0ZXh0L3gtcHJvY2Vzc2luZ1wiOiB7XG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wicGRlXCJdXG4gIH0sXG4gIFwidGV4dC94LXNhc3NcIjoge1xuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJzYXNzXCJdXG4gIH0sXG4gIFwidGV4dC94LXNjc3NcIjoge1xuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJzY3NzXCJdXG4gIH0sXG4gIFwidGV4dC94LXNldGV4dFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiZXR4XCJdXG4gIH0sXG4gIFwidGV4dC94LXNmdlwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wic2Z2XCJdXG4gIH0sXG4gIFwidGV4dC94LXN1c2UteW1wXCI6IHtcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ5bXBcIl1cbiAgfSxcbiAgXCJ0ZXh0L3gtdXVlbmNvZGVcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInV1XCJdXG4gIH0sXG4gIFwidGV4dC94LXZjYWxlbmRhclwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1widmNzXCJdXG4gIH0sXG4gIFwidGV4dC94LXZjYXJkXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ2Y2ZcIl1cbiAgfSxcbiAgXCJ0ZXh0L3htbFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wieG1sXCJdXG4gIH0sXG4gIFwidGV4dC94bWwtZXh0ZXJuYWwtcGFyc2VkLWVudGl0eVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJ0ZXh0L3lhbWxcIjoge1xuICAgIFwiY29tcHJlc3NpYmxlXCI6IHRydWUsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInlhbWxcIixcInltbFwiXVxuICB9LFxuICBcInZpZGVvLzFkLWludGVybGVhdmVkLXBhcml0eWZlY1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJ2aWRlby8zZ3BwXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiM2dwXCIsXCIzZ3BwXCJdXG4gIH0sXG4gIFwidmlkZW8vM2dwcC10dFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJ2aWRlby8zZ3BwMlwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIjNnMlwiXVxuICB9LFxuICBcInZpZGVvL2F2MVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJ2aWRlby9ibXBlZ1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJ2aWRlby9idDY1NlwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJ2aWRlby9jZWxiXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcInZpZGVvL2R2XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcInZpZGVvL2VuY2FwcnRwXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcInZpZGVvL2ZmdjFcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwidmlkZW8vZmxleGZlY1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJ2aWRlby9oMjYxXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiaDI2MVwiXVxuICB9LFxuICBcInZpZGVvL2gyNjNcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJoMjYzXCJdXG4gIH0sXG4gIFwidmlkZW8vaDI2My0xOTk4XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcInZpZGVvL2gyNjMtMjAwMFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJ2aWRlby9oMjY0XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiaDI2NFwiXVxuICB9LFxuICBcInZpZGVvL2gyNjQtcmNkb1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJ2aWRlby9oMjY0LXN2Y1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJ2aWRlby9oMjY1XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcInZpZGVvL2lzby5zZWdtZW50XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wibTRzXCJdXG4gIH0sXG4gIFwidmlkZW8vanBlZ1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImpwZ3ZcIl1cbiAgfSxcbiAgXCJ2aWRlby9qcGVnMjAwMFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJ2aWRlby9qcG1cIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImpwbVwiLFwianBnbVwiXVxuICB9LFxuICBcInZpZGVvL2p4c3ZcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwidmlkZW8vbWoyXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wibWoyXCIsXCJtanAyXCJdXG4gIH0sXG4gIFwidmlkZW8vbXAxc1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJ2aWRlby9tcDJwXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcInZpZGVvL21wMnRcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ0c1wiXVxuICB9LFxuICBcInZpZGVvL21wNFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogZmFsc2UsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIm1wNFwiLFwibXA0dlwiLFwibXBnNFwiXVxuICB9LFxuICBcInZpZGVvL21wNHYtZXNcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwidmlkZW8vbXBlZ1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogZmFsc2UsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIm1wZWdcIixcIm1wZ1wiLFwibXBlXCIsXCJtMXZcIixcIm0ydlwiXVxuICB9LFxuICBcInZpZGVvL21wZWc0LWdlbmVyaWNcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwidmlkZW8vbXB2XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcInZpZGVvL252XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcInZpZGVvL29nZ1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogZmFsc2UsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIm9ndlwiXVxuICB9LFxuICBcInZpZGVvL3Bhcml0eWZlY1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJ2aWRlby9wb2ludGVyXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcInZpZGVvL3F1aWNrdGltZVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogZmFsc2UsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInF0XCIsXCJtb3ZcIl1cbiAgfSxcbiAgXCJ2aWRlby9yYXB0b3JmZWNcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwidmlkZW8vcmF3XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcInZpZGVvL3J0cC1lbmMtYWVzY20xMjhcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwidmlkZW8vcnRwbG9vcGJhY2tcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwidmlkZW8vcnR4XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcInZpZGVvL3NjaXBcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwidmlkZW8vc21wdGUyOTFcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwidmlkZW8vc21wdGUyOTJtXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcInZpZGVvL3VscGZlY1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJ2aWRlby92YzFcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwidmlkZW8vdmMyXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcInZpZGVvL3ZuZC5jY3R2XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcInZpZGVvL3ZuZC5kZWNlLmhkXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1widXZoXCIsXCJ1dnZoXCJdXG4gIH0sXG4gIFwidmlkZW8vdm5kLmRlY2UubW9iaWxlXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1widXZtXCIsXCJ1dnZtXCJdXG4gIH0sXG4gIFwidmlkZW8vdm5kLmRlY2UubXA0XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcInZpZGVvL3ZuZC5kZWNlLnBkXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1widXZwXCIsXCJ1dnZwXCJdXG4gIH0sXG4gIFwidmlkZW8vdm5kLmRlY2Uuc2RcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ1dnNcIixcInV2dnNcIl1cbiAgfSxcbiAgXCJ2aWRlby92bmQuZGVjZS52aWRlb1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInV2dlwiLFwidXZ2dlwiXVxuICB9LFxuICBcInZpZGVvL3ZuZC5kaXJlY3R2Lm1wZWdcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwidmlkZW8vdm5kLmRpcmVjdHYubXBlZy10dHNcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwidmlkZW8vdm5kLmRsbmEubXBlZy10dHNcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwidmlkZW8vdm5kLmR2Yi5maWxlXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiZHZiXCJdXG4gIH0sXG4gIFwidmlkZW8vdm5kLmZ2dFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImZ2dFwiXVxuICB9LFxuICBcInZpZGVvL3ZuZC5obnMudmlkZW9cIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwidmlkZW8vdm5kLmlwdHZmb3J1bS4xZHBhcml0eWZlYy0xMDEwXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcInZpZGVvL3ZuZC5pcHR2Zm9ydW0uMWRwYXJpdHlmZWMtMjAwNVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJ2aWRlby92bmQuaXB0dmZvcnVtLjJkcGFyaXR5ZmVjLTEwMTBcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwidmlkZW8vdm5kLmlwdHZmb3J1bS4yZHBhcml0eWZlYy0yMDA1XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcInZpZGVvL3ZuZC5pcHR2Zm9ydW0udHRzYXZjXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcInZpZGVvL3ZuZC5pcHR2Zm9ydW0udHRzbXBlZzJcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwidmlkZW8vdm5kLm1vdG9yb2xhLnZpZGVvXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcInZpZGVvL3ZuZC5tb3Rvcm9sYS52aWRlb3BcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwidmlkZW8vdm5kLm1wZWd1cmxcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJteHVcIixcIm00dVwiXVxuICB9LFxuICBcInZpZGVvL3ZuZC5tcy1wbGF5cmVhZHkubWVkaWEucHl2XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wicHl2XCJdXG4gIH0sXG4gIFwidmlkZW8vdm5kLm5va2lhLmludGVybGVhdmVkLW11bHRpbWVkaWFcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwidmlkZW8vdm5kLm5va2lhLm1wNHZyXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcInZpZGVvL3ZuZC5ub2tpYS52aWRlb3ZvaXBcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwidmlkZW8vdm5kLm9iamVjdHZpZGVvXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcInZpZGVvL3ZuZC5yYWRnYW1ldHRvb2xzLmJpbmtcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwidmlkZW8vdm5kLnJhZGdhbWV0dG9vbHMuc21hY2tlclwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJ2aWRlby92bmQuc2VhbGVkLm1wZWcxXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcInZpZGVvL3ZuZC5zZWFsZWQubXBlZzRcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwidmlkZW8vdm5kLnNlYWxlZC5zd2ZcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwidmlkZW8vdm5kLnNlYWxlZG1lZGlhLnNvZnRzZWFsLm1vdlwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJ2aWRlby92bmQudXZ2dS5tcDRcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ1dnVcIixcInV2dnVcIl1cbiAgfSxcbiAgXCJ2aWRlby92bmQudml2b1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcInZpdlwiXVxuICB9LFxuICBcInZpZGVvL3ZuZC55b3V0dWJlLnl0XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImlhbmFcIlxuICB9LFxuICBcInZpZGVvL3ZwOFwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJpYW5hXCJcbiAgfSxcbiAgXCJ2aWRlby92cDlcIjoge1xuICAgIFwic291cmNlXCI6IFwiaWFuYVwiXG4gIH0sXG4gIFwidmlkZW8vd2VibVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiBmYWxzZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wid2VibVwiXVxuICB9LFxuICBcInZpZGVvL3gtZjR2XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJmNHZcIl1cbiAgfSxcbiAgXCJ2aWRlby94LWZsaVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiZmxpXCJdXG4gIH0sXG4gIFwidmlkZW8veC1mbHZcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJjb21wcmVzc2libGVcIjogZmFsc2UsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImZsdlwiXVxuICB9LFxuICBcInZpZGVvL3gtbTR2XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJtNHZcIl1cbiAgfSxcbiAgXCJ2aWRlby94LW1hdHJvc2thXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiY29tcHJlc3NpYmxlXCI6IGZhbHNlLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJta3ZcIixcIm1rM2RcIixcIm1rc1wiXVxuICB9LFxuICBcInZpZGVvL3gtbW5nXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJtbmdcIl1cbiAgfSxcbiAgXCJ2aWRlby94LW1zLWFzZlwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiYXNmXCIsXCJhc3hcIl1cbiAgfSxcbiAgXCJ2aWRlby94LW1zLXZvYlwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1widm9iXCJdXG4gIH0sXG4gIFwidmlkZW8veC1tcy13bVwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wid21cIl1cbiAgfSxcbiAgXCJ2aWRlby94LW1zLXdtdlwiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImNvbXByZXNzaWJsZVwiOiBmYWxzZSxcbiAgICBcImV4dGVuc2lvbnNcIjogW1wid212XCJdXG4gIH0sXG4gIFwidmlkZW8veC1tcy13bXhcIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcIndteFwiXVxuICB9LFxuICBcInZpZGVvL3gtbXMtd3Z4XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJ3dnhcIl1cbiAgfSxcbiAgXCJ2aWRlby94LW1zdmlkZW9cIjoge1xuICAgIFwic291cmNlXCI6IFwiYXBhY2hlXCIsXG4gICAgXCJleHRlbnNpb25zXCI6IFtcImF2aVwiXVxuICB9LFxuICBcInZpZGVvL3gtc2dpLW1vdmllXCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJtb3ZpZVwiXVxuICB9LFxuICBcInZpZGVvL3gtc212XCI6IHtcbiAgICBcInNvdXJjZVwiOiBcImFwYWNoZVwiLFxuICAgIFwiZXh0ZW5zaW9uc1wiOiBbXCJzbXZcIl1cbiAgfSxcbiAgXCJ4LWNvbmZlcmVuY2UveC1jb29sdGFsa1wiOiB7XG4gICAgXCJzb3VyY2VcIjogXCJhcGFjaGVcIixcbiAgICBcImV4dGVuc2lvbnNcIjogW1wiaWNlXCJdXG4gIH0sXG4gIFwieC1zaGFkZXIveC1mcmFnbWVudFwiOiB7XG4gICAgXCJjb21wcmVzc2libGVcIjogdHJ1ZVxuICB9LFxuICBcIngtc2hhZGVyL3gtdmVydGV4XCI6IHtcbiAgICBcImNvbXByZXNzaWJsZVwiOiB0cnVlXG4gIH1cbn1cbiIsICIvKiFcbiAqIG1pbWUtZGJcbiAqIENvcHlyaWdodChjKSAyMDE0IEpvbmF0aGFuIE9uZ1xuICogQ29weXJpZ2h0KGMpIDIwMTUtMjAyMiBEb3VnbGFzIENocmlzdG9waGVyIFdpbHNvblxuICogTUlUIExpY2Vuc2VkXG4gKi9cblxuLyoqXG4gKiBNb2R1bGUgZXhwb3J0cy5cbiAqL1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vZGIuanNvbicpXG4iLCAiLyohXG4gKiBtaW1lLXR5cGVzXG4gKiBDb3B5cmlnaHQoYykgMjAxNCBKb25hdGhhbiBPbmdcbiAqIENvcHlyaWdodChjKSAyMDE1IERvdWdsYXMgQ2hyaXN0b3BoZXIgV2lsc29uXG4gKiBNSVQgTGljZW5zZWRcbiAqL1xuXG4ndXNlIHN0cmljdCdcblxuLyoqXG4gKiBNb2R1bGUgZGVwZW5kZW5jaWVzLlxuICogQHByaXZhdGVcbiAqL1xuXG52YXIgZGIgPSByZXF1aXJlKCdtaW1lLWRiJylcbnZhciBleHRuYW1lID0gcmVxdWlyZSgncGF0aCcpLmV4dG5hbWVcblxuLyoqXG4gKiBNb2R1bGUgdmFyaWFibGVzLlxuICogQHByaXZhdGVcbiAqL1xuXG52YXIgRVhUUkFDVF9UWVBFX1JFR0VYUCA9IC9eXFxzKihbXjtcXHNdKikoPzo7fFxcc3wkKS9cbnZhciBURVhUX1RZUEVfUkVHRVhQID0gL150ZXh0XFwvL2lcblxuLyoqXG4gKiBNb2R1bGUgZXhwb3J0cy5cbiAqIEBwdWJsaWNcbiAqL1xuXG5leHBvcnRzLmNoYXJzZXQgPSBjaGFyc2V0XG5leHBvcnRzLmNoYXJzZXRzID0geyBsb29rdXA6IGNoYXJzZXQgfVxuZXhwb3J0cy5jb250ZW50VHlwZSA9IGNvbnRlbnRUeXBlXG5leHBvcnRzLmV4dGVuc2lvbiA9IGV4dGVuc2lvblxuZXhwb3J0cy5leHRlbnNpb25zID0gT2JqZWN0LmNyZWF0ZShudWxsKVxuZXhwb3J0cy5sb29rdXAgPSBsb29rdXBcbmV4cG9ydHMudHlwZXMgPSBPYmplY3QuY3JlYXRlKG51bGwpXG5cbi8vIFBvcHVsYXRlIHRoZSBleHRlbnNpb25zL3R5cGVzIG1hcHNcbnBvcHVsYXRlTWFwcyhleHBvcnRzLmV4dGVuc2lvbnMsIGV4cG9ydHMudHlwZXMpXG5cbi8qKlxuICogR2V0IHRoZSBkZWZhdWx0IGNoYXJzZXQgZm9yIGEgTUlNRSB0eXBlLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSB0eXBlXG4gKiBAcmV0dXJuIHtib29sZWFufHN0cmluZ31cbiAqL1xuXG5mdW5jdGlvbiBjaGFyc2V0ICh0eXBlKSB7XG4gIGlmICghdHlwZSB8fCB0eXBlb2YgdHlwZSAhPT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIC8vIFRPRE86IHVzZSBtZWRpYS10eXBlclxuICB2YXIgbWF0Y2ggPSBFWFRSQUNUX1RZUEVfUkVHRVhQLmV4ZWModHlwZSlcbiAgdmFyIG1pbWUgPSBtYXRjaCAmJiBkYlttYXRjaFsxXS50b0xvd2VyQ2FzZSgpXVxuXG4gIGlmIChtaW1lICYmIG1pbWUuY2hhcnNldCkge1xuICAgIHJldHVybiBtaW1lLmNoYXJzZXRcbiAgfVxuXG4gIC8vIGRlZmF1bHQgdGV4dC8qIHRvIHV0Zi04XG4gIGlmIChtYXRjaCAmJiBURVhUX1RZUEVfUkVHRVhQLnRlc3QobWF0Y2hbMV0pKSB7XG4gICAgcmV0dXJuICdVVEYtOCdcbiAgfVxuXG4gIHJldHVybiBmYWxzZVxufVxuXG4vKipcbiAqIENyZWF0ZSBhIGZ1bGwgQ29udGVudC1UeXBlIGhlYWRlciBnaXZlbiBhIE1JTUUgdHlwZSBvciBleHRlbnNpb24uXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHN0clxuICogQHJldHVybiB7Ym9vbGVhbnxzdHJpbmd9XG4gKi9cblxuZnVuY3Rpb24gY29udGVudFR5cGUgKHN0cikge1xuICAvLyBUT0RPOiBzaG91bGQgdGhpcyBldmVuIGJlIGluIHRoaXMgbW9kdWxlP1xuICBpZiAoIXN0ciB8fCB0eXBlb2Ygc3RyICE9PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgdmFyIG1pbWUgPSBzdHIuaW5kZXhPZignLycpID09PSAtMVxuICAgID8gZXhwb3J0cy5sb29rdXAoc3RyKVxuICAgIDogc3RyXG5cbiAgaWYgKCFtaW1lKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICAvLyBUT0RPOiB1c2UgY29udGVudC10eXBlIG9yIG90aGVyIG1vZHVsZVxuICBpZiAobWltZS5pbmRleE9mKCdjaGFyc2V0JykgPT09IC0xKSB7XG4gICAgdmFyIGNoYXJzZXQgPSBleHBvcnRzLmNoYXJzZXQobWltZSlcbiAgICBpZiAoY2hhcnNldCkgbWltZSArPSAnOyBjaGFyc2V0PScgKyBjaGFyc2V0LnRvTG93ZXJDYXNlKClcbiAgfVxuXG4gIHJldHVybiBtaW1lXG59XG5cbi8qKlxuICogR2V0IHRoZSBkZWZhdWx0IGV4dGVuc2lvbiBmb3IgYSBNSU1FIHR5cGUuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHR5cGVcbiAqIEByZXR1cm4ge2Jvb2xlYW58c3RyaW5nfVxuICovXG5cbmZ1bmN0aW9uIGV4dGVuc2lvbiAodHlwZSkge1xuICBpZiAoIXR5cGUgfHwgdHlwZW9mIHR5cGUgIT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICAvLyBUT0RPOiB1c2UgbWVkaWEtdHlwZXJcbiAgdmFyIG1hdGNoID0gRVhUUkFDVF9UWVBFX1JFR0VYUC5leGVjKHR5cGUpXG5cbiAgLy8gZ2V0IGV4dGVuc2lvbnNcbiAgdmFyIGV4dHMgPSBtYXRjaCAmJiBleHBvcnRzLmV4dGVuc2lvbnNbbWF0Y2hbMV0udG9Mb3dlckNhc2UoKV1cblxuICBpZiAoIWV4dHMgfHwgIWV4dHMubGVuZ3RoKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICByZXR1cm4gZXh0c1swXVxufVxuXG4vKipcbiAqIExvb2t1cCB0aGUgTUlNRSB0eXBlIGZvciBhIGZpbGUgcGF0aC9leHRlbnNpb24uXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHBhdGhcbiAqIEByZXR1cm4ge2Jvb2xlYW58c3RyaW5nfVxuICovXG5cbmZ1bmN0aW9uIGxvb2t1cCAocGF0aCkge1xuICBpZiAoIXBhdGggfHwgdHlwZW9mIHBhdGggIT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICAvLyBnZXQgdGhlIGV4dGVuc2lvbiAoXCJleHRcIiBvciBcIi5leHRcIiBvciBmdWxsIHBhdGgpXG4gIHZhciBleHRlbnNpb24gPSBleHRuYW1lKCd4LicgKyBwYXRoKVxuICAgIC50b0xvd2VyQ2FzZSgpXG4gICAgLnN1YnN0cigxKVxuXG4gIGlmICghZXh0ZW5zaW9uKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICByZXR1cm4gZXhwb3J0cy50eXBlc1tleHRlbnNpb25dIHx8IGZhbHNlXG59XG5cbi8qKlxuICogUG9wdWxhdGUgdGhlIGV4dGVuc2lvbnMgYW5kIHR5cGVzIG1hcHMuXG4gKiBAcHJpdmF0ZVxuICovXG5cbmZ1bmN0aW9uIHBvcHVsYXRlTWFwcyAoZXh0ZW5zaW9ucywgdHlwZXMpIHtcbiAgLy8gc291cmNlIHByZWZlcmVuY2UgKGxlYXN0IC0+IG1vc3QpXG4gIHZhciBwcmVmZXJlbmNlID0gWyduZ2lueCcsICdhcGFjaGUnLCB1bmRlZmluZWQsICdpYW5hJ11cblxuICBPYmplY3Qua2V5cyhkYikuZm9yRWFjaChmdW5jdGlvbiBmb3JFYWNoTWltZVR5cGUgKHR5cGUpIHtcbiAgICB2YXIgbWltZSA9IGRiW3R5cGVdXG4gICAgdmFyIGV4dHMgPSBtaW1lLmV4dGVuc2lvbnNcblxuICAgIGlmICghZXh0cyB8fCAhZXh0cy5sZW5ndGgpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIC8vIG1pbWUgLT4gZXh0ZW5zaW9uc1xuICAgIGV4dGVuc2lvbnNbdHlwZV0gPSBleHRzXG5cbiAgICAvLyBleHRlbnNpb24gLT4gbWltZVxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZXh0cy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGV4dGVuc2lvbiA9IGV4dHNbaV1cblxuICAgICAgaWYgKHR5cGVzW2V4dGVuc2lvbl0pIHtcbiAgICAgICAgdmFyIGZyb20gPSBwcmVmZXJlbmNlLmluZGV4T2YoZGJbdHlwZXNbZXh0ZW5zaW9uXV0uc291cmNlKVxuICAgICAgICB2YXIgdG8gPSBwcmVmZXJlbmNlLmluZGV4T2YobWltZS5zb3VyY2UpXG5cbiAgICAgICAgaWYgKHR5cGVzW2V4dGVuc2lvbl0gIT09ICdhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0nICYmXG4gICAgICAgICAgKGZyb20gPiB0byB8fCAoZnJvbSA9PT0gdG8gJiYgdHlwZXNbZXh0ZW5zaW9uXS5zdWJzdHIoMCwgMTIpID09PSAnYXBwbGljYXRpb24vJykpKSB7XG4gICAgICAgICAgLy8gc2tpcCB0aGUgcmVtYXBwaW5nXG4gICAgICAgICAgY29udGludWVcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBzZXQgdGhlIGV4dGVuc2lvbiAtPiBtaW1lXG4gICAgICB0eXBlc1tleHRlbnNpb25dID0gdHlwZVxuICAgIH1cbiAgfSlcbn1cbiIsICJtb2R1bGUuZXhwb3J0cyA9IGRlZmVyO1xuXG4vKipcbiAqIFJ1bnMgcHJvdmlkZWQgZnVuY3Rpb24gb24gbmV4dCBpdGVyYXRpb24gb2YgdGhlIGV2ZW50IGxvb3BcbiAqXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBmbiAtIGZ1bmN0aW9uIHRvIHJ1blxuICovXG5mdW5jdGlvbiBkZWZlcihmbilcbntcbiAgdmFyIG5leHRUaWNrID0gdHlwZW9mIHNldEltbWVkaWF0ZSA9PSAnZnVuY3Rpb24nXG4gICAgPyBzZXRJbW1lZGlhdGVcbiAgICA6IChcbiAgICAgIHR5cGVvZiBwcm9jZXNzID09ICdvYmplY3QnICYmIHR5cGVvZiBwcm9jZXNzLm5leHRUaWNrID09ICdmdW5jdGlvbidcbiAgICAgID8gcHJvY2Vzcy5uZXh0VGlja1xuICAgICAgOiBudWxsXG4gICAgKTtcblxuICBpZiAobmV4dFRpY2spXG4gIHtcbiAgICBuZXh0VGljayhmbik7XG4gIH1cbiAgZWxzZVxuICB7XG4gICAgc2V0VGltZW91dChmbiwgMCk7XG4gIH1cbn1cbiIsICJ2YXIgZGVmZXIgPSByZXF1aXJlKCcuL2RlZmVyLmpzJyk7XG5cbi8vIEFQSVxubW9kdWxlLmV4cG9ydHMgPSBhc3luYztcblxuLyoqXG4gKiBSdW5zIHByb3ZpZGVkIGNhbGxiYWNrIGFzeW5jaHJvbm91c2x5XG4gKiBldmVuIGlmIGNhbGxiYWNrIGl0c2VsZiBpcyBub3RcbiAqXG4gKiBAcGFyYW0gICB7ZnVuY3Rpb259IGNhbGxiYWNrIC0gY2FsbGJhY2sgdG8gaW52b2tlXG4gKiBAcmV0dXJucyB7ZnVuY3Rpb259IC0gYXVnbWVudGVkIGNhbGxiYWNrXG4gKi9cbmZ1bmN0aW9uIGFzeW5jKGNhbGxiYWNrKVxue1xuICB2YXIgaXNBc3luYyA9IGZhbHNlO1xuXG4gIC8vIGNoZWNrIGlmIGFzeW5jIGhhcHBlbmVkXG4gIGRlZmVyKGZ1bmN0aW9uKCkgeyBpc0FzeW5jID0gdHJ1ZTsgfSk7XG5cbiAgcmV0dXJuIGZ1bmN0aW9uIGFzeW5jX2NhbGxiYWNrKGVyciwgcmVzdWx0KVxuICB7XG4gICAgaWYgKGlzQXN5bmMpXG4gICAge1xuICAgICAgY2FsbGJhY2soZXJyLCByZXN1bHQpO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgZGVmZXIoZnVuY3Rpb24gbmV4dFRpY2tfY2FsbGJhY2soKVxuICAgICAge1xuICAgICAgICBjYWxsYmFjayhlcnIsIHJlc3VsdCk7XG4gICAgICB9KTtcbiAgICB9XG4gIH07XG59XG4iLCAiLy8gQVBJXG5tb2R1bGUuZXhwb3J0cyA9IGFib3J0O1xuXG4vKipcbiAqIEFib3J0cyBsZWZ0b3ZlciBhY3RpdmUgam9ic1xuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSBzdGF0ZSAtIGN1cnJlbnQgc3RhdGUgb2JqZWN0XG4gKi9cbmZ1bmN0aW9uIGFib3J0KHN0YXRlKVxue1xuICBPYmplY3Qua2V5cyhzdGF0ZS5qb2JzKS5mb3JFYWNoKGNsZWFuLmJpbmQoc3RhdGUpKTtcblxuICAvLyByZXNldCBsZWZ0b3ZlciBqb2JzXG4gIHN0YXRlLmpvYnMgPSB7fTtcbn1cblxuLyoqXG4gKiBDbGVhbnMgdXAgbGVmdG92ZXIgam9iIGJ5IGludm9raW5nIGFib3J0IGZ1bmN0aW9uIGZvciB0aGUgcHJvdmlkZWQgam9iIGlkXG4gKlxuICogQHRoaXMgIHN0YXRlXG4gKiBAcGFyYW0ge3N0cmluZ3xudW1iZXJ9IGtleSAtIGpvYiBpZCB0byBhYm9ydFxuICovXG5mdW5jdGlvbiBjbGVhbihrZXkpXG57XG4gIGlmICh0eXBlb2YgdGhpcy5qb2JzW2tleV0gPT0gJ2Z1bmN0aW9uJylcbiAge1xuICAgIHRoaXMuam9ic1trZXldKCk7XG4gIH1cbn1cbiIsICJ2YXIgYXN5bmMgPSByZXF1aXJlKCcuL2FzeW5jLmpzJylcbiAgLCBhYm9ydCA9IHJlcXVpcmUoJy4vYWJvcnQuanMnKVxuICA7XG5cbi8vIEFQSVxubW9kdWxlLmV4cG9ydHMgPSBpdGVyYXRlO1xuXG4vKipcbiAqIEl0ZXJhdGVzIG92ZXIgZWFjaCBqb2Igb2JqZWN0XG4gKlxuICogQHBhcmFtIHthcnJheXxvYmplY3R9IGxpc3QgLSBhcnJheSBvciBvYmplY3QgKG5hbWVkIGxpc3QpIHRvIGl0ZXJhdGUgb3ZlclxuICogQHBhcmFtIHtmdW5jdGlvbn0gaXRlcmF0b3IgLSBpdGVyYXRvciB0byBydW5cbiAqIEBwYXJhbSB7b2JqZWN0fSBzdGF0ZSAtIGN1cnJlbnQgam9iIHN0YXR1c1xuICogQHBhcmFtIHtmdW5jdGlvbn0gY2FsbGJhY2sgLSBpbnZva2VkIHdoZW4gYWxsIGVsZW1lbnRzIHByb2Nlc3NlZFxuICovXG5mdW5jdGlvbiBpdGVyYXRlKGxpc3QsIGl0ZXJhdG9yLCBzdGF0ZSwgY2FsbGJhY2spXG57XG4gIC8vIHN0b3JlIGN1cnJlbnQgaW5kZXhcbiAgdmFyIGtleSA9IHN0YXRlWydrZXllZExpc3QnXSA/IHN0YXRlWydrZXllZExpc3QnXVtzdGF0ZS5pbmRleF0gOiBzdGF0ZS5pbmRleDtcblxuICBzdGF0ZS5qb2JzW2tleV0gPSBydW5Kb2IoaXRlcmF0b3IsIGtleSwgbGlzdFtrZXldLCBmdW5jdGlvbihlcnJvciwgb3V0cHV0KVxuICB7XG4gICAgLy8gZG9uJ3QgcmVwZWF0IHlvdXJzZWxmXG4gICAgLy8gc2tpcCBzZWNvbmRhcnkgY2FsbGJhY2tzXG4gICAgaWYgKCEoa2V5IGluIHN0YXRlLmpvYnMpKVxuICAgIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBjbGVhbiB1cCBqb2JzXG4gICAgZGVsZXRlIHN0YXRlLmpvYnNba2V5XTtcblxuICAgIGlmIChlcnJvcilcbiAgICB7XG4gICAgICAvLyBkb24ndCBwcm9jZXNzIHJlc3Qgb2YgdGhlIHJlc3VsdHNcbiAgICAgIC8vIHN0b3Agc3RpbGwgYWN0aXZlIGpvYnNcbiAgICAgIC8vIGFuZCByZXNldCB0aGUgbGlzdFxuICAgICAgYWJvcnQoc3RhdGUpO1xuICAgIH1cbiAgICBlbHNlXG4gICAge1xuICAgICAgc3RhdGUucmVzdWx0c1trZXldID0gb3V0cHV0O1xuICAgIH1cblxuICAgIC8vIHJldHVybiBzYWx2YWdlZCByZXN1bHRzXG4gICAgY2FsbGJhY2soZXJyb3IsIHN0YXRlLnJlc3VsdHMpO1xuICB9KTtcbn1cblxuLyoqXG4gKiBSdW5zIGl0ZXJhdG9yIG92ZXIgcHJvdmlkZWQgam9iIGVsZW1lbnRcbiAqXG4gKiBAcGFyYW0gICB7ZnVuY3Rpb259IGl0ZXJhdG9yIC0gaXRlcmF0b3IgdG8gaW52b2tlXG4gKiBAcGFyYW0gICB7c3RyaW5nfG51bWJlcn0ga2V5IC0ga2V5L2luZGV4IG9mIHRoZSBlbGVtZW50IGluIHRoZSBsaXN0IG9mIGpvYnNcbiAqIEBwYXJhbSAgIHttaXhlZH0gaXRlbSAtIGpvYiBkZXNjcmlwdGlvblxuICogQHBhcmFtICAge2Z1bmN0aW9ufSBjYWxsYmFjayAtIGludm9rZWQgYWZ0ZXIgaXRlcmF0b3IgaXMgZG9uZSB3aXRoIHRoZSBqb2JcbiAqIEByZXR1cm5zIHtmdW5jdGlvbnxtaXhlZH0gLSBqb2IgYWJvcnQgZnVuY3Rpb24gb3Igc29tZXRoaW5nIGVsc2VcbiAqL1xuZnVuY3Rpb24gcnVuSm9iKGl0ZXJhdG9yLCBrZXksIGl0ZW0sIGNhbGxiYWNrKVxue1xuICB2YXIgYWJvcnRlcjtcblxuICAvLyBhbGxvdyBzaG9ydGN1dCBpZiBpdGVyYXRvciBleHBlY3RzIG9ubHkgdHdvIGFyZ3VtZW50c1xuICBpZiAoaXRlcmF0b3IubGVuZ3RoID09IDIpXG4gIHtcbiAgICBhYm9ydGVyID0gaXRlcmF0b3IoaXRlbSwgYXN5bmMoY2FsbGJhY2spKTtcbiAgfVxuICAvLyBvdGhlcndpc2UgZ28gd2l0aCBmdWxsIHRocmVlIGFyZ3VtZW50c1xuICBlbHNlXG4gIHtcbiAgICBhYm9ydGVyID0gaXRlcmF0b3IoaXRlbSwga2V5LCBhc3luYyhjYWxsYmFjaykpO1xuICB9XG5cbiAgcmV0dXJuIGFib3J0ZXI7XG59XG4iLCAiLy8gQVBJXG5tb2R1bGUuZXhwb3J0cyA9IHN0YXRlO1xuXG4vKipcbiAqIENyZWF0ZXMgaW5pdGlhbCBzdGF0ZSBvYmplY3RcbiAqIGZvciBpdGVyYXRpb24gb3ZlciBsaXN0XG4gKlxuICogQHBhcmFtICAge2FycmF5fG9iamVjdH0gbGlzdCAtIGxpc3QgdG8gaXRlcmF0ZSBvdmVyXG4gKiBAcGFyYW0gICB7ZnVuY3Rpb258bnVsbH0gc29ydE1ldGhvZCAtIGZ1bmN0aW9uIHRvIHVzZSBmb3Iga2V5cyBzb3J0LFxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3IgYG51bGxgIHRvIGtlZXAgdGhlbSBhcyBpc1xuICogQHJldHVybnMge29iamVjdH0gLSBpbml0aWFsIHN0YXRlIG9iamVjdFxuICovXG5mdW5jdGlvbiBzdGF0ZShsaXN0LCBzb3J0TWV0aG9kKVxue1xuICB2YXIgaXNOYW1lZExpc3QgPSAhQXJyYXkuaXNBcnJheShsaXN0KVxuICAgICwgaW5pdFN0YXRlID1cbiAgICB7XG4gICAgICBpbmRleCAgICA6IDAsXG4gICAgICBrZXllZExpc3Q6IGlzTmFtZWRMaXN0IHx8IHNvcnRNZXRob2QgPyBPYmplY3Qua2V5cyhsaXN0KSA6IG51bGwsXG4gICAgICBqb2JzICAgICA6IHt9LFxuICAgICAgcmVzdWx0cyAgOiBpc05hbWVkTGlzdCA/IHt9IDogW10sXG4gICAgICBzaXplICAgICA6IGlzTmFtZWRMaXN0ID8gT2JqZWN0LmtleXMobGlzdCkubGVuZ3RoIDogbGlzdC5sZW5ndGhcbiAgICB9XG4gICAgO1xuXG4gIGlmIChzb3J0TWV0aG9kKVxuICB7XG4gICAgLy8gc29ydCBhcnJheSBrZXlzIGJhc2VkIG9uIGl0J3MgdmFsdWVzXG4gICAgLy8gc29ydCBvYmplY3QncyBrZXlzIGp1c3Qgb24gb3duIG1lcml0XG4gICAgaW5pdFN0YXRlLmtleWVkTGlzdC5zb3J0KGlzTmFtZWRMaXN0ID8gc29ydE1ldGhvZCA6IGZ1bmN0aW9uKGEsIGIpXG4gICAge1xuICAgICAgcmV0dXJuIHNvcnRNZXRob2QobGlzdFthXSwgbGlzdFtiXSk7XG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gaW5pdFN0YXRlO1xufVxuIiwgInZhciBhYm9ydCA9IHJlcXVpcmUoJy4vYWJvcnQuanMnKVxuICAsIGFzeW5jID0gcmVxdWlyZSgnLi9hc3luYy5qcycpXG4gIDtcblxuLy8gQVBJXG5tb2R1bGUuZXhwb3J0cyA9IHRlcm1pbmF0b3I7XG5cbi8qKlxuICogVGVybWluYXRlcyBqb2JzIGluIHRoZSBhdHRhY2hlZCBzdGF0ZSBjb250ZXh0XG4gKlxuICogQHRoaXMgIEFzeW5jS2l0U3RhdGUjXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBjYWxsYmFjayAtIGZpbmFsIGNhbGxiYWNrIHRvIGludm9rZSBhZnRlciB0ZXJtaW5hdGlvblxuICovXG5mdW5jdGlvbiB0ZXJtaW5hdG9yKGNhbGxiYWNrKVxue1xuICBpZiAoIU9iamVjdC5rZXlzKHRoaXMuam9icykubGVuZ3RoKVxuICB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLy8gZmFzdCBmb3J3YXJkIGl0ZXJhdGlvbiBpbmRleFxuICB0aGlzLmluZGV4ID0gdGhpcy5zaXplO1xuXG4gIC8vIGFib3J0IGpvYnNcbiAgYWJvcnQodGhpcyk7XG5cbiAgLy8gc2VuZCBiYWNrIHJlc3VsdHMgd2UgaGF2ZSBzbyBmYXJcbiAgYXN5bmMoY2FsbGJhY2spKG51bGwsIHRoaXMucmVzdWx0cyk7XG59XG4iLCAidmFyIGl0ZXJhdGUgICAgPSByZXF1aXJlKCcuL2xpYi9pdGVyYXRlLmpzJylcbiAgLCBpbml0U3RhdGUgID0gcmVxdWlyZSgnLi9saWIvc3RhdGUuanMnKVxuICAsIHRlcm1pbmF0b3IgPSByZXF1aXJlKCcuL2xpYi90ZXJtaW5hdG9yLmpzJylcbiAgO1xuXG4vLyBQdWJsaWMgQVBJXG5tb2R1bGUuZXhwb3J0cyA9IHBhcmFsbGVsO1xuXG4vKipcbiAqIFJ1bnMgaXRlcmF0b3Igb3ZlciBwcm92aWRlZCBhcnJheSBlbGVtZW50cyBpbiBwYXJhbGxlbFxuICpcbiAqIEBwYXJhbSAgIHthcnJheXxvYmplY3R9IGxpc3QgLSBhcnJheSBvciBvYmplY3QgKG5hbWVkIGxpc3QpIHRvIGl0ZXJhdGUgb3ZlclxuICogQHBhcmFtICAge2Z1bmN0aW9ufSBpdGVyYXRvciAtIGl0ZXJhdG9yIHRvIHJ1blxuICogQHBhcmFtICAge2Z1bmN0aW9ufSBjYWxsYmFjayAtIGludm9rZWQgd2hlbiBhbGwgZWxlbWVudHMgcHJvY2Vzc2VkXG4gKiBAcmV0dXJucyB7ZnVuY3Rpb259IC0gam9icyB0ZXJtaW5hdG9yXG4gKi9cbmZ1bmN0aW9uIHBhcmFsbGVsKGxpc3QsIGl0ZXJhdG9yLCBjYWxsYmFjaylcbntcbiAgdmFyIHN0YXRlID0gaW5pdFN0YXRlKGxpc3QpO1xuXG4gIHdoaWxlIChzdGF0ZS5pbmRleCA8IChzdGF0ZVsna2V5ZWRMaXN0J10gfHwgbGlzdCkubGVuZ3RoKVxuICB7XG4gICAgaXRlcmF0ZShsaXN0LCBpdGVyYXRvciwgc3RhdGUsIGZ1bmN0aW9uKGVycm9yLCByZXN1bHQpXG4gICAge1xuICAgICAgaWYgKGVycm9yKVxuICAgICAge1xuICAgICAgICBjYWxsYmFjayhlcnJvciwgcmVzdWx0KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICAvLyBsb29rcyBsaWtlIGl0J3MgdGhlIGxhc3Qgb25lXG4gICAgICBpZiAoT2JqZWN0LmtleXMoc3RhdGUuam9icykubGVuZ3RoID09PSAwKVxuICAgICAge1xuICAgICAgICBjYWxsYmFjayhudWxsLCBzdGF0ZS5yZXN1bHRzKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgc3RhdGUuaW5kZXgrKztcbiAgfVxuXG4gIHJldHVybiB0ZXJtaW5hdG9yLmJpbmQoc3RhdGUsIGNhbGxiYWNrKTtcbn1cbiIsICJ2YXIgaXRlcmF0ZSAgICA9IHJlcXVpcmUoJy4vbGliL2l0ZXJhdGUuanMnKVxuICAsIGluaXRTdGF0ZSAgPSByZXF1aXJlKCcuL2xpYi9zdGF0ZS5qcycpXG4gICwgdGVybWluYXRvciA9IHJlcXVpcmUoJy4vbGliL3Rlcm1pbmF0b3IuanMnKVxuICA7XG5cbi8vIFB1YmxpYyBBUElcbm1vZHVsZS5leHBvcnRzID0gc2VyaWFsT3JkZXJlZDtcbi8vIHNvcnRpbmcgaGVscGVyc1xubW9kdWxlLmV4cG9ydHMuYXNjZW5kaW5nICA9IGFzY2VuZGluZztcbm1vZHVsZS5leHBvcnRzLmRlc2NlbmRpbmcgPSBkZXNjZW5kaW5nO1xuXG4vKipcbiAqIFJ1bnMgaXRlcmF0b3Igb3ZlciBwcm92aWRlZCBzb3J0ZWQgYXJyYXkgZWxlbWVudHMgaW4gc2VyaWVzXG4gKlxuICogQHBhcmFtICAge2FycmF5fG9iamVjdH0gbGlzdCAtIGFycmF5IG9yIG9iamVjdCAobmFtZWQgbGlzdCkgdG8gaXRlcmF0ZSBvdmVyXG4gKiBAcGFyYW0gICB7ZnVuY3Rpb259IGl0ZXJhdG9yIC0gaXRlcmF0b3IgdG8gcnVuXG4gKiBAcGFyYW0gICB7ZnVuY3Rpb259IHNvcnRNZXRob2QgLSBjdXN0b20gc29ydCBmdW5jdGlvblxuICogQHBhcmFtICAge2Z1bmN0aW9ufSBjYWxsYmFjayAtIGludm9rZWQgd2hlbiBhbGwgZWxlbWVudHMgcHJvY2Vzc2VkXG4gKiBAcmV0dXJucyB7ZnVuY3Rpb259IC0gam9icyB0ZXJtaW5hdG9yXG4gKi9cbmZ1bmN0aW9uIHNlcmlhbE9yZGVyZWQobGlzdCwgaXRlcmF0b3IsIHNvcnRNZXRob2QsIGNhbGxiYWNrKVxue1xuICB2YXIgc3RhdGUgPSBpbml0U3RhdGUobGlzdCwgc29ydE1ldGhvZCk7XG5cbiAgaXRlcmF0ZShsaXN0LCBpdGVyYXRvciwgc3RhdGUsIGZ1bmN0aW9uIGl0ZXJhdG9ySGFuZGxlcihlcnJvciwgcmVzdWx0KVxuICB7XG4gICAgaWYgKGVycm9yKVxuICAgIHtcbiAgICAgIGNhbGxiYWNrKGVycm9yLCByZXN1bHQpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHN0YXRlLmluZGV4Kys7XG5cbiAgICAvLyBhcmUgd2UgdGhlcmUgeWV0P1xuICAgIGlmIChzdGF0ZS5pbmRleCA8IChzdGF0ZVsna2V5ZWRMaXN0J10gfHwgbGlzdCkubGVuZ3RoKVxuICAgIHtcbiAgICAgIGl0ZXJhdGUobGlzdCwgaXRlcmF0b3IsIHN0YXRlLCBpdGVyYXRvckhhbmRsZXIpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIGRvbmUgaGVyZVxuICAgIGNhbGxiYWNrKG51bGwsIHN0YXRlLnJlc3VsdHMpO1xuICB9KTtcblxuICByZXR1cm4gdGVybWluYXRvci5iaW5kKHN0YXRlLCBjYWxsYmFjayk7XG59XG5cbi8qXG4gKiAtLSBTb3J0IG1ldGhvZHNcbiAqL1xuXG4vKipcbiAqIHNvcnQgaGVscGVyIHRvIHNvcnQgYXJyYXkgZWxlbWVudHMgaW4gYXNjZW5kaW5nIG9yZGVyXG4gKlxuICogQHBhcmFtICAge21peGVkfSBhIC0gYW4gaXRlbSB0byBjb21wYXJlXG4gKiBAcGFyYW0gICB7bWl4ZWR9IGIgLSBhbiBpdGVtIHRvIGNvbXBhcmVcbiAqIEByZXR1cm5zIHtudW1iZXJ9IC0gY29tcGFyaXNvbiByZXN1bHRcbiAqL1xuZnVuY3Rpb24gYXNjZW5kaW5nKGEsIGIpXG57XG4gIHJldHVybiBhIDwgYiA/IC0xIDogYSA+IGIgPyAxIDogMDtcbn1cblxuLyoqXG4gKiBzb3J0IGhlbHBlciB0byBzb3J0IGFycmF5IGVsZW1lbnRzIGluIGRlc2NlbmRpbmcgb3JkZXJcbiAqXG4gKiBAcGFyYW0gICB7bWl4ZWR9IGEgLSBhbiBpdGVtIHRvIGNvbXBhcmVcbiAqIEBwYXJhbSAgIHttaXhlZH0gYiAtIGFuIGl0ZW0gdG8gY29tcGFyZVxuICogQHJldHVybnMge251bWJlcn0gLSBjb21wYXJpc29uIHJlc3VsdFxuICovXG5mdW5jdGlvbiBkZXNjZW5kaW5nKGEsIGIpXG57XG4gIHJldHVybiAtMSAqIGFzY2VuZGluZyhhLCBiKTtcbn1cbiIsICJ2YXIgc2VyaWFsT3JkZXJlZCA9IHJlcXVpcmUoJy4vc2VyaWFsT3JkZXJlZC5qcycpO1xuXG4vLyBQdWJsaWMgQVBJXG5tb2R1bGUuZXhwb3J0cyA9IHNlcmlhbDtcblxuLyoqXG4gKiBSdW5zIGl0ZXJhdG9yIG92ZXIgcHJvdmlkZWQgYXJyYXkgZWxlbWVudHMgaW4gc2VyaWVzXG4gKlxuICogQHBhcmFtICAge2FycmF5fG9iamVjdH0gbGlzdCAtIGFycmF5IG9yIG9iamVjdCAobmFtZWQgbGlzdCkgdG8gaXRlcmF0ZSBvdmVyXG4gKiBAcGFyYW0gICB7ZnVuY3Rpb259IGl0ZXJhdG9yIC0gaXRlcmF0b3IgdG8gcnVuXG4gKiBAcGFyYW0gICB7ZnVuY3Rpb259IGNhbGxiYWNrIC0gaW52b2tlZCB3aGVuIGFsbCBlbGVtZW50cyBwcm9jZXNzZWRcbiAqIEByZXR1cm5zIHtmdW5jdGlvbn0gLSBqb2JzIHRlcm1pbmF0b3JcbiAqL1xuZnVuY3Rpb24gc2VyaWFsKGxpc3QsIGl0ZXJhdG9yLCBjYWxsYmFjaylcbntcbiAgcmV0dXJuIHNlcmlhbE9yZGVyZWQobGlzdCwgaXRlcmF0b3IsIG51bGwsIGNhbGxiYWNrKTtcbn1cbiIsICJtb2R1bGUuZXhwb3J0cyA9XG57XG4gIHBhcmFsbGVsICAgICAgOiByZXF1aXJlKCcuL3BhcmFsbGVsLmpzJyksXG4gIHNlcmlhbCAgICAgICAgOiByZXF1aXJlKCcuL3NlcmlhbC5qcycpLFxuICBzZXJpYWxPcmRlcmVkIDogcmVxdWlyZSgnLi9zZXJpYWxPcmRlcmVkLmpzJylcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG4vKiogQHR5cGUge2ltcG9ydCgnLicpfSAqL1xubW9kdWxlLmV4cG9ydHMgPSBPYmplY3Q7XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG4vKiogQHR5cGUge2ltcG9ydCgnLicpfSAqL1xubW9kdWxlLmV4cG9ydHMgPSBFcnJvcjtcbiIsICIndXNlIHN0cmljdCc7XG5cbi8qKiBAdHlwZSB7aW1wb3J0KCcuL2V2YWwnKX0gKi9cbm1vZHVsZS5leHBvcnRzID0gRXZhbEVycm9yO1xuIiwgIid1c2Ugc3RyaWN0JztcblxuLyoqIEB0eXBlIHtpbXBvcnQoJy4vcmFuZ2UnKX0gKi9cbm1vZHVsZS5leHBvcnRzID0gUmFuZ2VFcnJvcjtcbiIsICIndXNlIHN0cmljdCc7XG5cbi8qKiBAdHlwZSB7aW1wb3J0KCcuL3JlZicpfSAqL1xubW9kdWxlLmV4cG9ydHMgPSBSZWZlcmVuY2VFcnJvcjtcbiIsICIndXNlIHN0cmljdCc7XG5cbi8qKiBAdHlwZSB7aW1wb3J0KCcuL3N5bnRheCcpfSAqL1xubW9kdWxlLmV4cG9ydHMgPSBTeW50YXhFcnJvcjtcbiIsICIndXNlIHN0cmljdCc7XG5cbi8qKiBAdHlwZSB7aW1wb3J0KCcuL3R5cGUnKX0gKi9cbm1vZHVsZS5leHBvcnRzID0gVHlwZUVycm9yO1xuIiwgIid1c2Ugc3RyaWN0JztcblxuLyoqIEB0eXBlIHtpbXBvcnQoJy4vdXJpJyl9ICovXG5tb2R1bGUuZXhwb3J0cyA9IFVSSUVycm9yO1xuIiwgIid1c2Ugc3RyaWN0JztcblxuLyoqIEB0eXBlIHtpbXBvcnQoJy4vYWJzJyl9ICovXG5tb2R1bGUuZXhwb3J0cyA9IE1hdGguYWJzO1xuIiwgIid1c2Ugc3RyaWN0JztcblxuLyoqIEB0eXBlIHtpbXBvcnQoJy4vZmxvb3InKX0gKi9cbm1vZHVsZS5leHBvcnRzID0gTWF0aC5mbG9vcjtcbiIsICIndXNlIHN0cmljdCc7XG5cbi8qKiBAdHlwZSB7aW1wb3J0KCcuL21heCcpfSAqL1xubW9kdWxlLmV4cG9ydHMgPSBNYXRoLm1heDtcbiIsICIndXNlIHN0cmljdCc7XG5cbi8qKiBAdHlwZSB7aW1wb3J0KCcuL21pbicpfSAqL1xubW9kdWxlLmV4cG9ydHMgPSBNYXRoLm1pbjtcbiIsICIndXNlIHN0cmljdCc7XG5cbi8qKiBAdHlwZSB7aW1wb3J0KCcuL3BvdycpfSAqL1xubW9kdWxlLmV4cG9ydHMgPSBNYXRoLnBvdztcbiIsICIndXNlIHN0cmljdCc7XG5cbi8qKiBAdHlwZSB7aW1wb3J0KCcuL3JvdW5kJyl9ICovXG5tb2R1bGUuZXhwb3J0cyA9IE1hdGgucm91bmQ7XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG4vKiogQHR5cGUge2ltcG9ydCgnLi9pc05hTicpfSAqL1xubW9kdWxlLmV4cG9ydHMgPSBOdW1iZXIuaXNOYU4gfHwgZnVuY3Rpb24gaXNOYU4oYSkge1xuXHRyZXR1cm4gYSAhPT0gYTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG52YXIgJGlzTmFOID0gcmVxdWlyZSgnLi9pc05hTicpO1xuXG4vKiogQHR5cGUge2ltcG9ydCgnLi9zaWduJyl9ICovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIHNpZ24obnVtYmVyKSB7XG5cdGlmICgkaXNOYU4obnVtYmVyKSB8fCBudW1iZXIgPT09IDApIHtcblx0XHRyZXR1cm4gbnVtYmVyO1xuXHR9XG5cdHJldHVybiBudW1iZXIgPCAwID8gLTEgOiArMTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG4vKiogQHR5cGUge2ltcG9ydCgnLi9nT1BEJyl9ICovXG5tb2R1bGUuZXhwb3J0cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG4vKiogQHR5cGUge2ltcG9ydCgnLicpfSAqL1xudmFyICRnT1BEID0gcmVxdWlyZSgnLi9nT1BEJyk7XG5cbmlmICgkZ09QRCkge1xuXHR0cnkge1xuXHRcdCRnT1BEKFtdLCAnbGVuZ3RoJyk7XG5cdH0gY2F0Y2ggKGUpIHtcblx0XHQvLyBJRSA4IGhhcyBhIGJyb2tlbiBnT1BEXG5cdFx0JGdPUEQgPSBudWxsO1xuXHR9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gJGdPUEQ7XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG4vKiogQHR5cGUge2ltcG9ydCgnLicpfSAqL1xudmFyICRkZWZpbmVQcm9wZXJ0eSA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSB8fCBmYWxzZTtcbmlmICgkZGVmaW5lUHJvcGVydHkpIHtcblx0dHJ5IHtcblx0XHQkZGVmaW5lUHJvcGVydHkoe30sICdhJywgeyB2YWx1ZTogMSB9KTtcblx0fSBjYXRjaCAoZSkge1xuXHRcdC8vIElFIDggaGFzIGEgYnJva2VuIGRlZmluZVByb3BlcnR5XG5cdFx0JGRlZmluZVByb3BlcnR5ID0gZmFsc2U7XG5cdH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSAkZGVmaW5lUHJvcGVydHk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG4vKiogQHR5cGUge2ltcG9ydCgnLi9zaGFtcycpfSAqL1xuLyogZXNsaW50IGNvbXBsZXhpdHk6IFsyLCAxOF0sIG1heC1zdGF0ZW1lbnRzOiBbMiwgMzNdICovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGhhc1N5bWJvbHMoKSB7XG5cdGlmICh0eXBlb2YgU3ltYm9sICE9PSAnZnVuY3Rpb24nIHx8IHR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzICE9PSAnZnVuY3Rpb24nKSB7IHJldHVybiBmYWxzZTsgfVxuXHRpZiAodHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PT0gJ3N5bWJvbCcpIHsgcmV0dXJuIHRydWU7IH1cblxuXHQvKiogQHR5cGUge3sgW2sgaW4gc3ltYm9sXT86IHVua25vd24gfX0gKi9cblx0dmFyIG9iaiA9IHt9O1xuXHR2YXIgc3ltID0gU3ltYm9sKCd0ZXN0Jyk7XG5cdHZhciBzeW1PYmogPSBPYmplY3Qoc3ltKTtcblx0aWYgKHR5cGVvZiBzeW0gPT09ICdzdHJpbmcnKSB7IHJldHVybiBmYWxzZTsgfVxuXG5cdGlmIChPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoc3ltKSAhPT0gJ1tvYmplY3QgU3ltYm9sXScpIHsgcmV0dXJuIGZhbHNlOyB9XG5cdGlmIChPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoc3ltT2JqKSAhPT0gJ1tvYmplY3QgU3ltYm9sXScpIHsgcmV0dXJuIGZhbHNlOyB9XG5cblx0Ly8gdGVtcCBkaXNhYmxlZCBwZXIgaHR0cHM6Ly9naXRodWIuY29tL2xqaGFyYi9vYmplY3QuYXNzaWduL2lzc3Vlcy8xN1xuXHQvLyBpZiAoc3ltIGluc3RhbmNlb2YgU3ltYm9sKSB7IHJldHVybiBmYWxzZTsgfVxuXHQvLyB0ZW1wIGRpc2FibGVkIHBlciBodHRwczovL2dpdGh1Yi5jb20vV2ViUmVmbGVjdGlvbi9nZXQtb3duLXByb3BlcnR5LXN5bWJvbHMvaXNzdWVzLzRcblx0Ly8gaWYgKCEoc3ltT2JqIGluc3RhbmNlb2YgU3ltYm9sKSkgeyByZXR1cm4gZmFsc2U7IH1cblxuXHQvLyBpZiAodHlwZW9mIFN5bWJvbC5wcm90b3R5cGUudG9TdHJpbmcgIT09ICdmdW5jdGlvbicpIHsgcmV0dXJuIGZhbHNlOyB9XG5cdC8vIGlmIChTdHJpbmcoc3ltKSAhPT0gU3ltYm9sLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHN5bSkpIHsgcmV0dXJuIGZhbHNlOyB9XG5cblx0dmFyIHN5bVZhbCA9IDQyO1xuXHRvYmpbc3ltXSA9IHN5bVZhbDtcblx0Zm9yICh2YXIgXyBpbiBvYmopIHsgcmV0dXJuIGZhbHNlOyB9IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tcmVzdHJpY3RlZC1zeW50YXgsIG5vLXVucmVhY2hhYmxlLWxvb3Bcblx0aWYgKHR5cGVvZiBPYmplY3Qua2V5cyA9PT0gJ2Z1bmN0aW9uJyAmJiBPYmplY3Qua2V5cyhvYmopLmxlbmd0aCAhPT0gMCkgeyByZXR1cm4gZmFsc2U7IH1cblxuXHRpZiAodHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzID09PSAnZnVuY3Rpb24nICYmIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKG9iaikubGVuZ3RoICE9PSAwKSB7IHJldHVybiBmYWxzZTsgfVxuXG5cdHZhciBzeW1zID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhvYmopO1xuXHRpZiAoc3ltcy5sZW5ndGggIT09IDEgfHwgc3ltc1swXSAhPT0gc3ltKSB7IHJldHVybiBmYWxzZTsgfVxuXG5cdGlmICghT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKG9iaiwgc3ltKSkgeyByZXR1cm4gZmFsc2U7IH1cblxuXHRpZiAodHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPT09ICdmdW5jdGlvbicpIHtcblx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tZXh0cmEtcGFyZW5zXG5cdFx0dmFyIGRlc2NyaXB0b3IgPSAvKiogQHR5cGUge1Byb3BlcnR5RGVzY3JpcHRvcn0gKi8gKE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqLCBzeW0pKTtcblx0XHRpZiAoZGVzY3JpcHRvci52YWx1ZSAhPT0gc3ltVmFsIHx8IGRlc2NyaXB0b3IuZW51bWVyYWJsZSAhPT0gdHJ1ZSkgeyByZXR1cm4gZmFsc2U7IH1cblx0fVxuXG5cdHJldHVybiB0cnVlO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG5cbnZhciBvcmlnU3ltYm9sID0gdHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgU3ltYm9sO1xudmFyIGhhc1N5bWJvbFNoYW0gPSByZXF1aXJlKCcuL3NoYW1zJyk7XG5cbi8qKiBAdHlwZSB7aW1wb3J0KCcuJyl9ICovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGhhc05hdGl2ZVN5bWJvbHMoKSB7XG5cdGlmICh0eXBlb2Ygb3JpZ1N5bWJvbCAhPT0gJ2Z1bmN0aW9uJykgeyByZXR1cm4gZmFsc2U7IH1cblx0aWYgKHR5cGVvZiBTeW1ib2wgIT09ICdmdW5jdGlvbicpIHsgcmV0dXJuIGZhbHNlOyB9XG5cdGlmICh0eXBlb2Ygb3JpZ1N5bWJvbCgnZm9vJykgIT09ICdzeW1ib2wnKSB7IHJldHVybiBmYWxzZTsgfVxuXHRpZiAodHlwZW9mIFN5bWJvbCgnYmFyJykgIT09ICdzeW1ib2wnKSB7IHJldHVybiBmYWxzZTsgfVxuXG5cdHJldHVybiBoYXNTeW1ib2xTaGFtKCk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcblxuLyoqIEB0eXBlIHtpbXBvcnQoJy4vUmVmbGVjdC5nZXRQcm90b3R5cGVPZicpfSAqL1xubW9kdWxlLmV4cG9ydHMgPSAodHlwZW9mIFJlZmxlY3QgIT09ICd1bmRlZmluZWQnICYmIFJlZmxlY3QuZ2V0UHJvdG90eXBlT2YpIHx8IG51bGw7XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG52YXIgJE9iamVjdCA9IHJlcXVpcmUoJ2VzLW9iamVjdC1hdG9tcycpO1xuXG4vKiogQHR5cGUge2ltcG9ydCgnLi9PYmplY3QuZ2V0UHJvdG90eXBlT2YnKX0gKi9cbm1vZHVsZS5leHBvcnRzID0gJE9iamVjdC5nZXRQcm90b3R5cGVPZiB8fCBudWxsO1xuIiwgIid1c2Ugc3RyaWN0JztcblxuLyogZXNsaW50IG5vLWludmFsaWQtdGhpczogMSAqL1xuXG52YXIgRVJST1JfTUVTU0FHRSA9ICdGdW5jdGlvbi5wcm90b3R5cGUuYmluZCBjYWxsZWQgb24gaW5jb21wYXRpYmxlICc7XG52YXIgdG9TdHIgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO1xudmFyIG1heCA9IE1hdGgubWF4O1xudmFyIGZ1bmNUeXBlID0gJ1tvYmplY3QgRnVuY3Rpb25dJztcblxudmFyIGNvbmNhdHR5ID0gZnVuY3Rpb24gY29uY2F0dHkoYSwgYikge1xuICAgIHZhciBhcnIgPSBbXTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYS5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgICBhcnJbaV0gPSBhW2ldO1xuICAgIH1cbiAgICBmb3IgKHZhciBqID0gMDsgaiA8IGIubGVuZ3RoOyBqICs9IDEpIHtcbiAgICAgICAgYXJyW2ogKyBhLmxlbmd0aF0gPSBiW2pdO1xuICAgIH1cblxuICAgIHJldHVybiBhcnI7XG59O1xuXG52YXIgc2xpY3kgPSBmdW5jdGlvbiBzbGljeShhcnJMaWtlLCBvZmZzZXQpIHtcbiAgICB2YXIgYXJyID0gW107XG4gICAgZm9yICh2YXIgaSA9IG9mZnNldCB8fCAwLCBqID0gMDsgaSA8IGFyckxpa2UubGVuZ3RoOyBpICs9IDEsIGogKz0gMSkge1xuICAgICAgICBhcnJbal0gPSBhcnJMaWtlW2ldO1xuICAgIH1cbiAgICByZXR1cm4gYXJyO1xufTtcblxudmFyIGpvaW55ID0gZnVuY3Rpb24gKGFyciwgam9pbmVyKSB7XG4gICAgdmFyIHN0ciA9ICcnO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICAgIHN0ciArPSBhcnJbaV07XG4gICAgICAgIGlmIChpICsgMSA8IGFyci5sZW5ndGgpIHtcbiAgICAgICAgICAgIHN0ciArPSBqb2luZXI7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHN0cjtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gYmluZCh0aGF0KSB7XG4gICAgdmFyIHRhcmdldCA9IHRoaXM7XG4gICAgaWYgKHR5cGVvZiB0YXJnZXQgIT09ICdmdW5jdGlvbicgfHwgdG9TdHIuYXBwbHkodGFyZ2V0KSAhPT0gZnVuY1R5cGUpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihFUlJPUl9NRVNTQUdFICsgdGFyZ2V0KTtcbiAgICB9XG4gICAgdmFyIGFyZ3MgPSBzbGljeShhcmd1bWVudHMsIDEpO1xuXG4gICAgdmFyIGJvdW5kO1xuICAgIHZhciBiaW5kZXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICh0aGlzIGluc3RhbmNlb2YgYm91bmQpIHtcbiAgICAgICAgICAgIHZhciByZXN1bHQgPSB0YXJnZXQuYXBwbHkoXG4gICAgICAgICAgICAgICAgdGhpcyxcbiAgICAgICAgICAgICAgICBjb25jYXR0eShhcmdzLCBhcmd1bWVudHMpXG4gICAgICAgICAgICApO1xuICAgICAgICAgICAgaWYgKE9iamVjdChyZXN1bHQpID09PSByZXN1bHQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRhcmdldC5hcHBseShcbiAgICAgICAgICAgIHRoYXQsXG4gICAgICAgICAgICBjb25jYXR0eShhcmdzLCBhcmd1bWVudHMpXG4gICAgICAgICk7XG5cbiAgICB9O1xuXG4gICAgdmFyIGJvdW5kTGVuZ3RoID0gbWF4KDAsIHRhcmdldC5sZW5ndGggLSBhcmdzLmxlbmd0aCk7XG4gICAgdmFyIGJvdW5kQXJncyA9IFtdO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYm91bmRMZW5ndGg7IGkrKykge1xuICAgICAgICBib3VuZEFyZ3NbaV0gPSAnJCcgKyBpO1xuICAgIH1cblxuICAgIGJvdW5kID0gRnVuY3Rpb24oJ2JpbmRlcicsICdyZXR1cm4gZnVuY3Rpb24gKCcgKyBqb2lueShib3VuZEFyZ3MsICcsJykgKyAnKXsgcmV0dXJuIGJpbmRlci5hcHBseSh0aGlzLGFyZ3VtZW50cyk7IH0nKShiaW5kZXIpO1xuXG4gICAgaWYgKHRhcmdldC5wcm90b3R5cGUpIHtcbiAgICAgICAgdmFyIEVtcHR5ID0gZnVuY3Rpb24gRW1wdHkoKSB7fTtcbiAgICAgICAgRW1wdHkucHJvdG90eXBlID0gdGFyZ2V0LnByb3RvdHlwZTtcbiAgICAgICAgYm91bmQucHJvdG90eXBlID0gbmV3IEVtcHR5KCk7XG4gICAgICAgIEVtcHR5LnByb3RvdHlwZSA9IG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIGJvdW5kO1xufTtcbiIsICIndXNlIHN0cmljdCc7XG5cbnZhciBpbXBsZW1lbnRhdGlvbiA9IHJlcXVpcmUoJy4vaW1wbGVtZW50YXRpb24nKTtcblxubW9kdWxlLmV4cG9ydHMgPSBGdW5jdGlvbi5wcm90b3R5cGUuYmluZCB8fCBpbXBsZW1lbnRhdGlvbjtcbiIsICIndXNlIHN0cmljdCc7XG5cbi8qKiBAdHlwZSB7aW1wb3J0KCcuL2Z1bmN0aW9uQ2FsbCcpfSAqL1xubW9kdWxlLmV4cG9ydHMgPSBGdW5jdGlvbi5wcm90b3R5cGUuY2FsbDtcbiIsICIndXNlIHN0cmljdCc7XG5cbi8qKiBAdHlwZSB7aW1wb3J0KCcuL2Z1bmN0aW9uQXBwbHknKX0gKi9cbm1vZHVsZS5leHBvcnRzID0gRnVuY3Rpb24ucHJvdG90eXBlLmFwcGx5O1xuIiwgIid1c2Ugc3RyaWN0JztcblxuLyoqIEB0eXBlIHtpbXBvcnQoJy4vcmVmbGVjdEFwcGx5Jyl9ICovXG5tb2R1bGUuZXhwb3J0cyA9IHR5cGVvZiBSZWZsZWN0ICE9PSAndW5kZWZpbmVkJyAmJiBSZWZsZWN0ICYmIFJlZmxlY3QuYXBwbHk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG52YXIgYmluZCA9IHJlcXVpcmUoJ2Z1bmN0aW9uLWJpbmQnKTtcblxudmFyICRhcHBseSA9IHJlcXVpcmUoJy4vZnVuY3Rpb25BcHBseScpO1xudmFyICRjYWxsID0gcmVxdWlyZSgnLi9mdW5jdGlvbkNhbGwnKTtcbnZhciAkcmVmbGVjdEFwcGx5ID0gcmVxdWlyZSgnLi9yZWZsZWN0QXBwbHknKTtcblxuLyoqIEB0eXBlIHtpbXBvcnQoJy4vYWN0dWFsQXBwbHknKX0gKi9cbm1vZHVsZS5leHBvcnRzID0gJHJlZmxlY3RBcHBseSB8fCBiaW5kLmNhbGwoJGNhbGwsICRhcHBseSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG52YXIgYmluZCA9IHJlcXVpcmUoJ2Z1bmN0aW9uLWJpbmQnKTtcbnZhciAkVHlwZUVycm9yID0gcmVxdWlyZSgnZXMtZXJyb3JzL3R5cGUnKTtcblxudmFyICRjYWxsID0gcmVxdWlyZSgnLi9mdW5jdGlvbkNhbGwnKTtcbnZhciAkYWN0dWFsQXBwbHkgPSByZXF1aXJlKCcuL2FjdHVhbEFwcGx5Jyk7XG5cbi8qKiBAdHlwZSB7KGFyZ3M6IFtGdW5jdGlvbiwgdGhpc0FyZz86IHVua25vd24sIC4uLmFyZ3M6IHVua25vd25bXV0pID0+IEZ1bmN0aW9ufSBUT0RPIEZJWE1FLCBmaW5kIGEgd2F5IHRvIHVzZSBpbXBvcnQoJy4nKSAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBjYWxsQmluZEJhc2ljKGFyZ3MpIHtcblx0aWYgKGFyZ3MubGVuZ3RoIDwgMSB8fCB0eXBlb2YgYXJnc1swXSAhPT0gJ2Z1bmN0aW9uJykge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdhIGZ1bmN0aW9uIGlzIHJlcXVpcmVkJyk7XG5cdH1cblx0cmV0dXJuICRhY3R1YWxBcHBseShiaW5kLCAkY2FsbCwgYXJncyk7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcblxudmFyIGNhbGxCaW5kID0gcmVxdWlyZSgnY2FsbC1iaW5kLWFwcGx5LWhlbHBlcnMnKTtcbnZhciBnT1BEID0gcmVxdWlyZSgnZ29wZCcpO1xuXG52YXIgaGFzUHJvdG9BY2Nlc3NvcjtcbnRyeSB7XG5cdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1leHRyYS1wYXJlbnMsIG5vLXByb3RvXG5cdGhhc1Byb3RvQWNjZXNzb3IgPSAvKiogQHR5cGUge3sgX19wcm90b19fPzogdHlwZW9mIEFycmF5LnByb3RvdHlwZSB9fSAqLyAoW10pLl9fcHJvdG9fXyA9PT0gQXJyYXkucHJvdG90eXBlO1xufSBjYXRjaCAoZSkge1xuXHRpZiAoIWUgfHwgdHlwZW9mIGUgIT09ICdvYmplY3QnIHx8ICEoJ2NvZGUnIGluIGUpIHx8IGUuY29kZSAhPT0gJ0VSUl9QUk9UT19BQ0NFU1MnKSB7XG5cdFx0dGhyb3cgZTtcblx0fVxufVxuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tZXh0cmEtcGFyZW5zXG52YXIgZGVzYyA9ICEhaGFzUHJvdG9BY2Nlc3NvciAmJiBnT1BEICYmIGdPUEQoT2JqZWN0LnByb3RvdHlwZSwgLyoqIEB0eXBlIHtrZXlvZiB0eXBlb2YgT2JqZWN0LnByb3RvdHlwZX0gKi8gKCdfX3Byb3RvX18nKSk7XG5cbnZhciAkT2JqZWN0ID0gT2JqZWN0O1xudmFyICRnZXRQcm90b3R5cGVPZiA9ICRPYmplY3QuZ2V0UHJvdG90eXBlT2Y7XG5cbi8qKiBAdHlwZSB7aW1wb3J0KCcuL2dldCcpfSAqL1xubW9kdWxlLmV4cG9ydHMgPSBkZXNjICYmIHR5cGVvZiBkZXNjLmdldCA9PT0gJ2Z1bmN0aW9uJ1xuXHQ/IGNhbGxCaW5kKFtkZXNjLmdldF0pXG5cdDogdHlwZW9mICRnZXRQcm90b3R5cGVPZiA9PT0gJ2Z1bmN0aW9uJ1xuXHRcdD8gLyoqIEB0eXBlIHtpbXBvcnQoJy4vZ2V0Jyl9ICovIGZ1bmN0aW9uIGdldER1bmRlcih2YWx1ZSkge1xuXHRcdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVxZXFlcVxuXHRcdFx0cmV0dXJuICRnZXRQcm90b3R5cGVPZih2YWx1ZSA9PSBudWxsID8gdmFsdWUgOiAkT2JqZWN0KHZhbHVlKSk7XG5cdFx0fVxuXHRcdDogZmFsc2U7XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG52YXIgcmVmbGVjdEdldFByb3RvID0gcmVxdWlyZSgnLi9SZWZsZWN0LmdldFByb3RvdHlwZU9mJyk7XG52YXIgb3JpZ2luYWxHZXRQcm90byA9IHJlcXVpcmUoJy4vT2JqZWN0LmdldFByb3RvdHlwZU9mJyk7XG5cbnZhciBnZXREdW5kZXJQcm90byA9IHJlcXVpcmUoJ2R1bmRlci1wcm90by9nZXQnKTtcblxuLyoqIEB0eXBlIHtpbXBvcnQoJy4nKX0gKi9cbm1vZHVsZS5leHBvcnRzID0gcmVmbGVjdEdldFByb3RvXG5cdD8gZnVuY3Rpb24gZ2V0UHJvdG8oTykge1xuXHRcdC8vIEB0cy1leHBlY3QtZXJyb3IgVFMgY2FuJ3QgbmFycm93IGluc2lkZSBhIGNsb3N1cmUsIGZvciBzb21lIHJlYXNvblxuXHRcdHJldHVybiByZWZsZWN0R2V0UHJvdG8oTyk7XG5cdH1cblx0OiBvcmlnaW5hbEdldFByb3RvXG5cdFx0PyBmdW5jdGlvbiBnZXRQcm90byhPKSB7XG5cdFx0XHRpZiAoIU8gfHwgKHR5cGVvZiBPICE9PSAnb2JqZWN0JyAmJiB0eXBlb2YgTyAhPT0gJ2Z1bmN0aW9uJykpIHtcblx0XHRcdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignZ2V0UHJvdG86IG5vdCBhbiBvYmplY3QnKTtcblx0XHRcdH1cblx0XHRcdC8vIEB0cy1leHBlY3QtZXJyb3IgVFMgY2FuJ3QgbmFycm93IGluc2lkZSBhIGNsb3N1cmUsIGZvciBzb21lIHJlYXNvblxuXHRcdFx0cmV0dXJuIG9yaWdpbmFsR2V0UHJvdG8oTyk7XG5cdFx0fVxuXHRcdDogZ2V0RHVuZGVyUHJvdG9cblx0XHRcdD8gZnVuY3Rpb24gZ2V0UHJvdG8oTykge1xuXHRcdFx0XHQvLyBAdHMtZXhwZWN0LWVycm9yIFRTIGNhbid0IG5hcnJvdyBpbnNpZGUgYSBjbG9zdXJlLCBmb3Igc29tZSByZWFzb25cblx0XHRcdFx0cmV0dXJuIGdldER1bmRlclByb3RvKE8pO1xuXHRcdFx0fVxuXHRcdFx0OiBudWxsO1xuIiwgIid1c2Ugc3RyaWN0JztcblxudmFyIGNhbGwgPSBGdW5jdGlvbi5wcm90b3R5cGUuY2FsbDtcbnZhciAkaGFzT3duID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcbnZhciBiaW5kID0gcmVxdWlyZSgnZnVuY3Rpb24tYmluZCcpO1xuXG4vKiogQHR5cGUge2ltcG9ydCgnLicpfSAqL1xubW9kdWxlLmV4cG9ydHMgPSBiaW5kLmNhbGwoY2FsbCwgJGhhc093bik7XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdW5kZWZpbmVkO1xuXG52YXIgJE9iamVjdCA9IHJlcXVpcmUoJ2VzLW9iamVjdC1hdG9tcycpO1xuXG52YXIgJEVycm9yID0gcmVxdWlyZSgnZXMtZXJyb3JzJyk7XG52YXIgJEV2YWxFcnJvciA9IHJlcXVpcmUoJ2VzLWVycm9ycy9ldmFsJyk7XG52YXIgJFJhbmdlRXJyb3IgPSByZXF1aXJlKCdlcy1lcnJvcnMvcmFuZ2UnKTtcbnZhciAkUmVmZXJlbmNlRXJyb3IgPSByZXF1aXJlKCdlcy1lcnJvcnMvcmVmJyk7XG52YXIgJFN5bnRheEVycm9yID0gcmVxdWlyZSgnZXMtZXJyb3JzL3N5bnRheCcpO1xudmFyICRUeXBlRXJyb3IgPSByZXF1aXJlKCdlcy1lcnJvcnMvdHlwZScpO1xudmFyICRVUklFcnJvciA9IHJlcXVpcmUoJ2VzLWVycm9ycy91cmknKTtcblxudmFyIGFicyA9IHJlcXVpcmUoJ21hdGgtaW50cmluc2ljcy9hYnMnKTtcbnZhciBmbG9vciA9IHJlcXVpcmUoJ21hdGgtaW50cmluc2ljcy9mbG9vcicpO1xudmFyIG1heCA9IHJlcXVpcmUoJ21hdGgtaW50cmluc2ljcy9tYXgnKTtcbnZhciBtaW4gPSByZXF1aXJlKCdtYXRoLWludHJpbnNpY3MvbWluJyk7XG52YXIgcG93ID0gcmVxdWlyZSgnbWF0aC1pbnRyaW5zaWNzL3BvdycpO1xudmFyIHJvdW5kID0gcmVxdWlyZSgnbWF0aC1pbnRyaW5zaWNzL3JvdW5kJyk7XG52YXIgc2lnbiA9IHJlcXVpcmUoJ21hdGgtaW50cmluc2ljcy9zaWduJyk7XG5cbnZhciAkRnVuY3Rpb24gPSBGdW5jdGlvbjtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbnNpc3RlbnQtcmV0dXJuXG52YXIgZ2V0RXZhbGxlZENvbnN0cnVjdG9yID0gZnVuY3Rpb24gKGV4cHJlc3Npb25TeW50YXgpIHtcblx0dHJ5IHtcblx0XHRyZXR1cm4gJEZ1bmN0aW9uKCdcInVzZSBzdHJpY3RcIjsgcmV0dXJuICgnICsgZXhwcmVzc2lvblN5bnRheCArICcpLmNvbnN0cnVjdG9yOycpKCk7XG5cdH0gY2F0Y2ggKGUpIHt9XG59O1xuXG52YXIgJGdPUEQgPSByZXF1aXJlKCdnb3BkJyk7XG52YXIgJGRlZmluZVByb3BlcnR5ID0gcmVxdWlyZSgnZXMtZGVmaW5lLXByb3BlcnR5Jyk7XG5cbnZhciB0aHJvd1R5cGVFcnJvciA9IGZ1bmN0aW9uICgpIHtcblx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoKTtcbn07XG52YXIgVGhyb3dUeXBlRXJyb3IgPSAkZ09QRFxuXHQ/IChmdW5jdGlvbiAoKSB7XG5cdFx0dHJ5IHtcblx0XHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtZXhwcmVzc2lvbnMsIG5vLWNhbGxlciwgbm8tcmVzdHJpY3RlZC1wcm9wZXJ0aWVzXG5cdFx0XHRhcmd1bWVudHMuY2FsbGVlOyAvLyBJRSA4IGRvZXMgbm90IHRocm93IGhlcmVcblx0XHRcdHJldHVybiB0aHJvd1R5cGVFcnJvcjtcblx0XHR9IGNhdGNoIChjYWxsZWVUaHJvd3MpIHtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdC8vIElFIDggdGhyb3dzIG9uIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoYXJndW1lbnRzLCAnJylcblx0XHRcdFx0cmV0dXJuICRnT1BEKGFyZ3VtZW50cywgJ2NhbGxlZScpLmdldDtcblx0XHRcdH0gY2F0Y2ggKGdPUER0aHJvd3MpIHtcblx0XHRcdFx0cmV0dXJuIHRocm93VHlwZUVycm9yO1xuXHRcdFx0fVxuXHRcdH1cblx0fSgpKVxuXHQ6IHRocm93VHlwZUVycm9yO1xuXG52YXIgaGFzU3ltYm9scyA9IHJlcXVpcmUoJ2hhcy1zeW1ib2xzJykoKTtcblxudmFyIGdldFByb3RvID0gcmVxdWlyZSgnZ2V0LXByb3RvJyk7XG52YXIgJE9iamVjdEdQTyA9IHJlcXVpcmUoJ2dldC1wcm90by9PYmplY3QuZ2V0UHJvdG90eXBlT2YnKTtcbnZhciAkUmVmbGVjdEdQTyA9IHJlcXVpcmUoJ2dldC1wcm90by9SZWZsZWN0LmdldFByb3RvdHlwZU9mJyk7XG5cbnZhciAkYXBwbHkgPSByZXF1aXJlKCdjYWxsLWJpbmQtYXBwbHktaGVscGVycy9mdW5jdGlvbkFwcGx5Jyk7XG52YXIgJGNhbGwgPSByZXF1aXJlKCdjYWxsLWJpbmQtYXBwbHktaGVscGVycy9mdW5jdGlvbkNhbGwnKTtcblxudmFyIG5lZWRzRXZhbCA9IHt9O1xuXG52YXIgVHlwZWRBcnJheSA9IHR5cGVvZiBVaW50OEFycmF5ID09PSAndW5kZWZpbmVkJyB8fCAhZ2V0UHJvdG8gPyB1bmRlZmluZWQgOiBnZXRQcm90byhVaW50OEFycmF5KTtcblxudmFyIElOVFJJTlNJQ1MgPSB7XG5cdF9fcHJvdG9fXzogbnVsbCxcblx0JyVBZ2dyZWdhdGVFcnJvciUnOiB0eXBlb2YgQWdncmVnYXRlRXJyb3IgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogQWdncmVnYXRlRXJyb3IsXG5cdCclQXJyYXklJzogQXJyYXksXG5cdCclQXJyYXlCdWZmZXIlJzogdHlwZW9mIEFycmF5QnVmZmVyID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IEFycmF5QnVmZmVyLFxuXHQnJUFycmF5SXRlcmF0b3JQcm90b3R5cGUlJzogaGFzU3ltYm9scyAmJiBnZXRQcm90byA/IGdldFByb3RvKFtdW1N5bWJvbC5pdGVyYXRvcl0oKSkgOiB1bmRlZmluZWQsXG5cdCclQXN5bmNGcm9tU3luY0l0ZXJhdG9yUHJvdG90eXBlJSc6IHVuZGVmaW5lZCxcblx0JyVBc3luY0Z1bmN0aW9uJSc6IG5lZWRzRXZhbCxcblx0JyVBc3luY0dlbmVyYXRvciUnOiBuZWVkc0V2YWwsXG5cdCclQXN5bmNHZW5lcmF0b3JGdW5jdGlvbiUnOiBuZWVkc0V2YWwsXG5cdCclQXN5bmNJdGVyYXRvclByb3RvdHlwZSUnOiBuZWVkc0V2YWwsXG5cdCclQXRvbWljcyUnOiB0eXBlb2YgQXRvbWljcyA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBBdG9taWNzLFxuXHQnJUJpZ0ludCUnOiB0eXBlb2YgQmlnSW50ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IEJpZ0ludCxcblx0JyVCaWdJbnQ2NEFycmF5JSc6IHR5cGVvZiBCaWdJbnQ2NEFycmF5ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IEJpZ0ludDY0QXJyYXksXG5cdCclQmlnVWludDY0QXJyYXklJzogdHlwZW9mIEJpZ1VpbnQ2NEFycmF5ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IEJpZ1VpbnQ2NEFycmF5LFxuXHQnJUJvb2xlYW4lJzogQm9vbGVhbixcblx0JyVEYXRhVmlldyUnOiB0eXBlb2YgRGF0YVZpZXcgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogRGF0YVZpZXcsXG5cdCclRGF0ZSUnOiBEYXRlLFxuXHQnJWRlY29kZVVSSSUnOiBkZWNvZGVVUkksXG5cdCclZGVjb2RlVVJJQ29tcG9uZW50JSc6IGRlY29kZVVSSUNvbXBvbmVudCxcblx0JyVlbmNvZGVVUkklJzogZW5jb2RlVVJJLFxuXHQnJWVuY29kZVVSSUNvbXBvbmVudCUnOiBlbmNvZGVVUklDb21wb25lbnQsXG5cdCclRXJyb3IlJzogJEVycm9yLFxuXHQnJWV2YWwlJzogZXZhbCwgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1ldmFsXG5cdCclRXZhbEVycm9yJSc6ICRFdmFsRXJyb3IsXG5cdCclRmxvYXQxNkFycmF5JSc6IHR5cGVvZiBGbG9hdDE2QXJyYXkgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogRmxvYXQxNkFycmF5LFxuXHQnJUZsb2F0MzJBcnJheSUnOiB0eXBlb2YgRmxvYXQzMkFycmF5ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IEZsb2F0MzJBcnJheSxcblx0JyVGbG9hdDY0QXJyYXklJzogdHlwZW9mIEZsb2F0NjRBcnJheSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBGbG9hdDY0QXJyYXksXG5cdCclRmluYWxpemF0aW9uUmVnaXN0cnklJzogdHlwZW9mIEZpbmFsaXphdGlvblJlZ2lzdHJ5ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IEZpbmFsaXphdGlvblJlZ2lzdHJ5LFxuXHQnJUZ1bmN0aW9uJSc6ICRGdW5jdGlvbixcblx0JyVHZW5lcmF0b3JGdW5jdGlvbiUnOiBuZWVkc0V2YWwsXG5cdCclSW50OEFycmF5JSc6IHR5cGVvZiBJbnQ4QXJyYXkgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogSW50OEFycmF5LFxuXHQnJUludDE2QXJyYXklJzogdHlwZW9mIEludDE2QXJyYXkgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogSW50MTZBcnJheSxcblx0JyVJbnQzMkFycmF5JSc6IHR5cGVvZiBJbnQzMkFycmF5ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IEludDMyQXJyYXksXG5cdCclaXNGaW5pdGUlJzogaXNGaW5pdGUsXG5cdCclaXNOYU4lJzogaXNOYU4sXG5cdCclSXRlcmF0b3JQcm90b3R5cGUlJzogaGFzU3ltYm9scyAmJiBnZXRQcm90byA/IGdldFByb3RvKGdldFByb3RvKFtdW1N5bWJvbC5pdGVyYXRvcl0oKSkpIDogdW5kZWZpbmVkLFxuXHQnJUpTT04lJzogdHlwZW9mIEpTT04gPT09ICdvYmplY3QnID8gSlNPTiA6IHVuZGVmaW5lZCxcblx0JyVNYXAlJzogdHlwZW9mIE1hcCA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBNYXAsXG5cdCclTWFwSXRlcmF0b3JQcm90b3R5cGUlJzogdHlwZW9mIE1hcCA9PT0gJ3VuZGVmaW5lZCcgfHwgIWhhc1N5bWJvbHMgfHwgIWdldFByb3RvID8gdW5kZWZpbmVkIDogZ2V0UHJvdG8obmV3IE1hcCgpW1N5bWJvbC5pdGVyYXRvcl0oKSksXG5cdCclTWF0aCUnOiBNYXRoLFxuXHQnJU51bWJlciUnOiBOdW1iZXIsXG5cdCclT2JqZWN0JSc6ICRPYmplY3QsXG5cdCclT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvciUnOiAkZ09QRCxcblx0JyVwYXJzZUZsb2F0JSc6IHBhcnNlRmxvYXQsXG5cdCclcGFyc2VJbnQlJzogcGFyc2VJbnQsXG5cdCclUHJvbWlzZSUnOiB0eXBlb2YgUHJvbWlzZSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBQcm9taXNlLFxuXHQnJVByb3h5JSc6IHR5cGVvZiBQcm94eSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBQcm94eSxcblx0JyVSYW5nZUVycm9yJSc6ICRSYW5nZUVycm9yLFxuXHQnJVJlZmVyZW5jZUVycm9yJSc6ICRSZWZlcmVuY2VFcnJvcixcblx0JyVSZWZsZWN0JSc6IHR5cGVvZiBSZWZsZWN0ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IFJlZmxlY3QsXG5cdCclUmVnRXhwJSc6IFJlZ0V4cCxcblx0JyVTZXQlJzogdHlwZW9mIFNldCA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBTZXQsXG5cdCclU2V0SXRlcmF0b3JQcm90b3R5cGUlJzogdHlwZW9mIFNldCA9PT0gJ3VuZGVmaW5lZCcgfHwgIWhhc1N5bWJvbHMgfHwgIWdldFByb3RvID8gdW5kZWZpbmVkIDogZ2V0UHJvdG8obmV3IFNldCgpW1N5bWJvbC5pdGVyYXRvcl0oKSksXG5cdCclU2hhcmVkQXJyYXlCdWZmZXIlJzogdHlwZW9mIFNoYXJlZEFycmF5QnVmZmVyID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IFNoYXJlZEFycmF5QnVmZmVyLFxuXHQnJVN0cmluZyUnOiBTdHJpbmcsXG5cdCclU3RyaW5nSXRlcmF0b3JQcm90b3R5cGUlJzogaGFzU3ltYm9scyAmJiBnZXRQcm90byA/IGdldFByb3RvKCcnW1N5bWJvbC5pdGVyYXRvcl0oKSkgOiB1bmRlZmluZWQsXG5cdCclU3ltYm9sJSc6IGhhc1N5bWJvbHMgPyBTeW1ib2wgOiB1bmRlZmluZWQsXG5cdCclU3ludGF4RXJyb3IlJzogJFN5bnRheEVycm9yLFxuXHQnJVRocm93VHlwZUVycm9yJSc6IFRocm93VHlwZUVycm9yLFxuXHQnJVR5cGVkQXJyYXklJzogVHlwZWRBcnJheSxcblx0JyVUeXBlRXJyb3IlJzogJFR5cGVFcnJvcixcblx0JyVVaW50OEFycmF5JSc6IHR5cGVvZiBVaW50OEFycmF5ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IFVpbnQ4QXJyYXksXG5cdCclVWludDhDbGFtcGVkQXJyYXklJzogdHlwZW9mIFVpbnQ4Q2xhbXBlZEFycmF5ID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IFVpbnQ4Q2xhbXBlZEFycmF5LFxuXHQnJVVpbnQxNkFycmF5JSc6IHR5cGVvZiBVaW50MTZBcnJheSA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBVaW50MTZBcnJheSxcblx0JyVVaW50MzJBcnJheSUnOiB0eXBlb2YgVWludDMyQXJyYXkgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogVWludDMyQXJyYXksXG5cdCclVVJJRXJyb3IlJzogJFVSSUVycm9yLFxuXHQnJVdlYWtNYXAlJzogdHlwZW9mIFdlYWtNYXAgPT09ICd1bmRlZmluZWQnID8gdW5kZWZpbmVkIDogV2Vha01hcCxcblx0JyVXZWFrUmVmJSc6IHR5cGVvZiBXZWFrUmVmID09PSAndW5kZWZpbmVkJyA/IHVuZGVmaW5lZCA6IFdlYWtSZWYsXG5cdCclV2Vha1NldCUnOiB0eXBlb2YgV2Vha1NldCA9PT0gJ3VuZGVmaW5lZCcgPyB1bmRlZmluZWQgOiBXZWFrU2V0LFxuXG5cdCclRnVuY3Rpb24ucHJvdG90eXBlLmNhbGwlJzogJGNhbGwsXG5cdCclRnVuY3Rpb24ucHJvdG90eXBlLmFwcGx5JSc6ICRhcHBseSxcblx0JyVPYmplY3QuZGVmaW5lUHJvcGVydHklJzogJGRlZmluZVByb3BlcnR5LFxuXHQnJU9iamVjdC5nZXRQcm90b3R5cGVPZiUnOiAkT2JqZWN0R1BPLFxuXHQnJU1hdGguYWJzJSc6IGFicyxcblx0JyVNYXRoLmZsb29yJSc6IGZsb29yLFxuXHQnJU1hdGgubWF4JSc6IG1heCxcblx0JyVNYXRoLm1pbiUnOiBtaW4sXG5cdCclTWF0aC5wb3clJzogcG93LFxuXHQnJU1hdGgucm91bmQlJzogcm91bmQsXG5cdCclTWF0aC5zaWduJSc6IHNpZ24sXG5cdCclUmVmbGVjdC5nZXRQcm90b3R5cGVPZiUnOiAkUmVmbGVjdEdQT1xufTtcblxuaWYgKGdldFByb3RvKSB7XG5cdHRyeSB7XG5cdFx0bnVsbC5lcnJvcjsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bnVzZWQtZXhwcmVzc2lvbnNcblx0fSBjYXRjaCAoZSkge1xuXHRcdC8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLXNoYWRvd3JlYWxtL3B1bGwvMzg0I2lzc3VlY29tbWVudC0xMzY0MjY0MjI5XG5cdFx0dmFyIGVycm9yUHJvdG8gPSBnZXRQcm90byhnZXRQcm90byhlKSk7XG5cdFx0SU5UUklOU0lDU1snJUVycm9yLnByb3RvdHlwZSUnXSA9IGVycm9yUHJvdG87XG5cdH1cbn1cblxudmFyIGRvRXZhbCA9IGZ1bmN0aW9uIGRvRXZhbChuYW1lKSB7XG5cdHZhciB2YWx1ZTtcblx0aWYgKG5hbWUgPT09ICclQXN5bmNGdW5jdGlvbiUnKSB7XG5cdFx0dmFsdWUgPSBnZXRFdmFsbGVkQ29uc3RydWN0b3IoJ2FzeW5jIGZ1bmN0aW9uICgpIHt9Jyk7XG5cdH0gZWxzZSBpZiAobmFtZSA9PT0gJyVHZW5lcmF0b3JGdW5jdGlvbiUnKSB7XG5cdFx0dmFsdWUgPSBnZXRFdmFsbGVkQ29uc3RydWN0b3IoJ2Z1bmN0aW9uKiAoKSB7fScpO1xuXHR9IGVsc2UgaWYgKG5hbWUgPT09ICclQXN5bmNHZW5lcmF0b3JGdW5jdGlvbiUnKSB7XG5cdFx0dmFsdWUgPSBnZXRFdmFsbGVkQ29uc3RydWN0b3IoJ2FzeW5jIGZ1bmN0aW9uKiAoKSB7fScpO1xuXHR9IGVsc2UgaWYgKG5hbWUgPT09ICclQXN5bmNHZW5lcmF0b3IlJykge1xuXHRcdHZhciBmbiA9IGRvRXZhbCgnJUFzeW5jR2VuZXJhdG9yRnVuY3Rpb24lJyk7XG5cdFx0aWYgKGZuKSB7XG5cdFx0XHR2YWx1ZSA9IGZuLnByb3RvdHlwZTtcblx0XHR9XG5cdH0gZWxzZSBpZiAobmFtZSA9PT0gJyVBc3luY0l0ZXJhdG9yUHJvdG90eXBlJScpIHtcblx0XHR2YXIgZ2VuID0gZG9FdmFsKCclQXN5bmNHZW5lcmF0b3IlJyk7XG5cdFx0aWYgKGdlbiAmJiBnZXRQcm90bykge1xuXHRcdFx0dmFsdWUgPSBnZXRQcm90byhnZW4ucHJvdG90eXBlKTtcblx0XHR9XG5cdH1cblxuXHRJTlRSSU5TSUNTW25hbWVdID0gdmFsdWU7XG5cblx0cmV0dXJuIHZhbHVlO1xufTtcblxudmFyIExFR0FDWV9BTElBU0VTID0ge1xuXHRfX3Byb3RvX186IG51bGwsXG5cdCclQXJyYXlCdWZmZXJQcm90b3R5cGUlJzogWydBcnJheUJ1ZmZlcicsICdwcm90b3R5cGUnXSxcblx0JyVBcnJheVByb3RvdHlwZSUnOiBbJ0FycmF5JywgJ3Byb3RvdHlwZSddLFxuXHQnJUFycmF5UHJvdG9fZW50cmllcyUnOiBbJ0FycmF5JywgJ3Byb3RvdHlwZScsICdlbnRyaWVzJ10sXG5cdCclQXJyYXlQcm90b19mb3JFYWNoJSc6IFsnQXJyYXknLCAncHJvdG90eXBlJywgJ2ZvckVhY2gnXSxcblx0JyVBcnJheVByb3RvX2tleXMlJzogWydBcnJheScsICdwcm90b3R5cGUnLCAna2V5cyddLFxuXHQnJUFycmF5UHJvdG9fdmFsdWVzJSc6IFsnQXJyYXknLCAncHJvdG90eXBlJywgJ3ZhbHVlcyddLFxuXHQnJUFzeW5jRnVuY3Rpb25Qcm90b3R5cGUlJzogWydBc3luY0Z1bmN0aW9uJywgJ3Byb3RvdHlwZSddLFxuXHQnJUFzeW5jR2VuZXJhdG9yJSc6IFsnQXN5bmNHZW5lcmF0b3JGdW5jdGlvbicsICdwcm90b3R5cGUnXSxcblx0JyVBc3luY0dlbmVyYXRvclByb3RvdHlwZSUnOiBbJ0FzeW5jR2VuZXJhdG9yRnVuY3Rpb24nLCAncHJvdG90eXBlJywgJ3Byb3RvdHlwZSddLFxuXHQnJUJvb2xlYW5Qcm90b3R5cGUlJzogWydCb29sZWFuJywgJ3Byb3RvdHlwZSddLFxuXHQnJURhdGFWaWV3UHJvdG90eXBlJSc6IFsnRGF0YVZpZXcnLCAncHJvdG90eXBlJ10sXG5cdCclRGF0ZVByb3RvdHlwZSUnOiBbJ0RhdGUnLCAncHJvdG90eXBlJ10sXG5cdCclRXJyb3JQcm90b3R5cGUlJzogWydFcnJvcicsICdwcm90b3R5cGUnXSxcblx0JyVFdmFsRXJyb3JQcm90b3R5cGUlJzogWydFdmFsRXJyb3InLCAncHJvdG90eXBlJ10sXG5cdCclRmxvYXQzMkFycmF5UHJvdG90eXBlJSc6IFsnRmxvYXQzMkFycmF5JywgJ3Byb3RvdHlwZSddLFxuXHQnJUZsb2F0NjRBcnJheVByb3RvdHlwZSUnOiBbJ0Zsb2F0NjRBcnJheScsICdwcm90b3R5cGUnXSxcblx0JyVGdW5jdGlvblByb3RvdHlwZSUnOiBbJ0Z1bmN0aW9uJywgJ3Byb3RvdHlwZSddLFxuXHQnJUdlbmVyYXRvciUnOiBbJ0dlbmVyYXRvckZ1bmN0aW9uJywgJ3Byb3RvdHlwZSddLFxuXHQnJUdlbmVyYXRvclByb3RvdHlwZSUnOiBbJ0dlbmVyYXRvckZ1bmN0aW9uJywgJ3Byb3RvdHlwZScsICdwcm90b3R5cGUnXSxcblx0JyVJbnQ4QXJyYXlQcm90b3R5cGUlJzogWydJbnQ4QXJyYXknLCAncHJvdG90eXBlJ10sXG5cdCclSW50MTZBcnJheVByb3RvdHlwZSUnOiBbJ0ludDE2QXJyYXknLCAncHJvdG90eXBlJ10sXG5cdCclSW50MzJBcnJheVByb3RvdHlwZSUnOiBbJ0ludDMyQXJyYXknLCAncHJvdG90eXBlJ10sXG5cdCclSlNPTlBhcnNlJSc6IFsnSlNPTicsICdwYXJzZSddLFxuXHQnJUpTT05TdHJpbmdpZnklJzogWydKU09OJywgJ3N0cmluZ2lmeSddLFxuXHQnJU1hcFByb3RvdHlwZSUnOiBbJ01hcCcsICdwcm90b3R5cGUnXSxcblx0JyVOdW1iZXJQcm90b3R5cGUlJzogWydOdW1iZXInLCAncHJvdG90eXBlJ10sXG5cdCclT2JqZWN0UHJvdG90eXBlJSc6IFsnT2JqZWN0JywgJ3Byb3RvdHlwZSddLFxuXHQnJU9ialByb3RvX3RvU3RyaW5nJSc6IFsnT2JqZWN0JywgJ3Byb3RvdHlwZScsICd0b1N0cmluZyddLFxuXHQnJU9ialByb3RvX3ZhbHVlT2YlJzogWydPYmplY3QnLCAncHJvdG90eXBlJywgJ3ZhbHVlT2YnXSxcblx0JyVQcm9taXNlUHJvdG90eXBlJSc6IFsnUHJvbWlzZScsICdwcm90b3R5cGUnXSxcblx0JyVQcm9taXNlUHJvdG9fdGhlbiUnOiBbJ1Byb21pc2UnLCAncHJvdG90eXBlJywgJ3RoZW4nXSxcblx0JyVQcm9taXNlX2FsbCUnOiBbJ1Byb21pc2UnLCAnYWxsJ10sXG5cdCclUHJvbWlzZV9yZWplY3QlJzogWydQcm9taXNlJywgJ3JlamVjdCddLFxuXHQnJVByb21pc2VfcmVzb2x2ZSUnOiBbJ1Byb21pc2UnLCAncmVzb2x2ZSddLFxuXHQnJVJhbmdlRXJyb3JQcm90b3R5cGUlJzogWydSYW5nZUVycm9yJywgJ3Byb3RvdHlwZSddLFxuXHQnJVJlZmVyZW5jZUVycm9yUHJvdG90eXBlJSc6IFsnUmVmZXJlbmNlRXJyb3InLCAncHJvdG90eXBlJ10sXG5cdCclUmVnRXhwUHJvdG90eXBlJSc6IFsnUmVnRXhwJywgJ3Byb3RvdHlwZSddLFxuXHQnJVNldFByb3RvdHlwZSUnOiBbJ1NldCcsICdwcm90b3R5cGUnXSxcblx0JyVTaGFyZWRBcnJheUJ1ZmZlclByb3RvdHlwZSUnOiBbJ1NoYXJlZEFycmF5QnVmZmVyJywgJ3Byb3RvdHlwZSddLFxuXHQnJVN0cmluZ1Byb3RvdHlwZSUnOiBbJ1N0cmluZycsICdwcm90b3R5cGUnXSxcblx0JyVTeW1ib2xQcm90b3R5cGUlJzogWydTeW1ib2wnLCAncHJvdG90eXBlJ10sXG5cdCclU3ludGF4RXJyb3JQcm90b3R5cGUlJzogWydTeW50YXhFcnJvcicsICdwcm90b3R5cGUnXSxcblx0JyVUeXBlZEFycmF5UHJvdG90eXBlJSc6IFsnVHlwZWRBcnJheScsICdwcm90b3R5cGUnXSxcblx0JyVUeXBlRXJyb3JQcm90b3R5cGUlJzogWydUeXBlRXJyb3InLCAncHJvdG90eXBlJ10sXG5cdCclVWludDhBcnJheVByb3RvdHlwZSUnOiBbJ1VpbnQ4QXJyYXknLCAncHJvdG90eXBlJ10sXG5cdCclVWludDhDbGFtcGVkQXJyYXlQcm90b3R5cGUlJzogWydVaW50OENsYW1wZWRBcnJheScsICdwcm90b3R5cGUnXSxcblx0JyVVaW50MTZBcnJheVByb3RvdHlwZSUnOiBbJ1VpbnQxNkFycmF5JywgJ3Byb3RvdHlwZSddLFxuXHQnJVVpbnQzMkFycmF5UHJvdG90eXBlJSc6IFsnVWludDMyQXJyYXknLCAncHJvdG90eXBlJ10sXG5cdCclVVJJRXJyb3JQcm90b3R5cGUlJzogWydVUklFcnJvcicsICdwcm90b3R5cGUnXSxcblx0JyVXZWFrTWFwUHJvdG90eXBlJSc6IFsnV2Vha01hcCcsICdwcm90b3R5cGUnXSxcblx0JyVXZWFrU2V0UHJvdG90eXBlJSc6IFsnV2Vha1NldCcsICdwcm90b3R5cGUnXVxufTtcblxudmFyIGJpbmQgPSByZXF1aXJlKCdmdW5jdGlvbi1iaW5kJyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnaGFzb3duJyk7XG52YXIgJGNvbmNhdCA9IGJpbmQuY2FsbCgkY2FsbCwgQXJyYXkucHJvdG90eXBlLmNvbmNhdCk7XG52YXIgJHNwbGljZUFwcGx5ID0gYmluZC5jYWxsKCRhcHBseSwgQXJyYXkucHJvdG90eXBlLnNwbGljZSk7XG52YXIgJHJlcGxhY2UgPSBiaW5kLmNhbGwoJGNhbGwsIFN0cmluZy5wcm90b3R5cGUucmVwbGFjZSk7XG52YXIgJHN0clNsaWNlID0gYmluZC5jYWxsKCRjYWxsLCBTdHJpbmcucHJvdG90eXBlLnNsaWNlKTtcbnZhciAkZXhlYyA9IGJpbmQuY2FsbCgkY2FsbCwgUmVnRXhwLnByb3RvdHlwZS5leGVjKTtcblxuLyogYWRhcHRlZCBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9sb2Rhc2gvbG9kYXNoL2Jsb2IvNC4xNy4xNS9kaXN0L2xvZGFzaC5qcyNMNjczNS1MNjc0NCAqL1xudmFyIHJlUHJvcE5hbWUgPSAvW14lLltcXF1dK3xcXFsoPzooLT9cXGQrKD86XFwuXFxkKyk/KXwoW1wiJ10pKCg/Oig/IVxcMilbXlxcXFxdfFxcXFwuKSo/KVxcMilcXF18KD89KD86XFwufFxcW1xcXSkoPzpcXC58XFxbXFxdfCUkKSkvZztcbnZhciByZUVzY2FwZUNoYXIgPSAvXFxcXChcXFxcKT8vZzsgLyoqIFVzZWQgdG8gbWF0Y2ggYmFja3NsYXNoZXMgaW4gcHJvcGVydHkgcGF0aHMuICovXG52YXIgc3RyaW5nVG9QYXRoID0gZnVuY3Rpb24gc3RyaW5nVG9QYXRoKHN0cmluZykge1xuXHR2YXIgZmlyc3QgPSAkc3RyU2xpY2Uoc3RyaW5nLCAwLCAxKTtcblx0dmFyIGxhc3QgPSAkc3RyU2xpY2Uoc3RyaW5nLCAtMSk7XG5cdGlmIChmaXJzdCA9PT0gJyUnICYmIGxhc3QgIT09ICclJykge1xuXHRcdHRocm93IG5ldyAkU3ludGF4RXJyb3IoJ2ludmFsaWQgaW50cmluc2ljIHN5bnRheCwgZXhwZWN0ZWQgY2xvc2luZyBgJWAnKTtcblx0fSBlbHNlIGlmIChsYXN0ID09PSAnJScgJiYgZmlyc3QgIT09ICclJykge1xuXHRcdHRocm93IG5ldyAkU3ludGF4RXJyb3IoJ2ludmFsaWQgaW50cmluc2ljIHN5bnRheCwgZXhwZWN0ZWQgb3BlbmluZyBgJWAnKTtcblx0fVxuXHR2YXIgcmVzdWx0ID0gW107XG5cdCRyZXBsYWNlKHN0cmluZywgcmVQcm9wTmFtZSwgZnVuY3Rpb24gKG1hdGNoLCBudW1iZXIsIHF1b3RlLCBzdWJTdHJpbmcpIHtcblx0XHRyZXN1bHRbcmVzdWx0Lmxlbmd0aF0gPSBxdW90ZSA/ICRyZXBsYWNlKHN1YlN0cmluZywgcmVFc2NhcGVDaGFyLCAnJDEnKSA6IG51bWJlciB8fCBtYXRjaDtcblx0fSk7XG5cdHJldHVybiByZXN1bHQ7XG59O1xuLyogZW5kIGFkYXB0YXRpb24gKi9cblxudmFyIGdldEJhc2VJbnRyaW5zaWMgPSBmdW5jdGlvbiBnZXRCYXNlSW50cmluc2ljKG5hbWUsIGFsbG93TWlzc2luZykge1xuXHR2YXIgaW50cmluc2ljTmFtZSA9IG5hbWU7XG5cdHZhciBhbGlhcztcblx0aWYgKGhhc093bihMRUdBQ1lfQUxJQVNFUywgaW50cmluc2ljTmFtZSkpIHtcblx0XHRhbGlhcyA9IExFR0FDWV9BTElBU0VTW2ludHJpbnNpY05hbWVdO1xuXHRcdGludHJpbnNpY05hbWUgPSAnJScgKyBhbGlhc1swXSArICclJztcblx0fVxuXG5cdGlmIChoYXNPd24oSU5UUklOU0lDUywgaW50cmluc2ljTmFtZSkpIHtcblx0XHR2YXIgdmFsdWUgPSBJTlRSSU5TSUNTW2ludHJpbnNpY05hbWVdO1xuXHRcdGlmICh2YWx1ZSA9PT0gbmVlZHNFdmFsKSB7XG5cdFx0XHR2YWx1ZSA9IGRvRXZhbChpbnRyaW5zaWNOYW1lKTtcblx0XHR9XG5cdFx0aWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3VuZGVmaW5lZCcgJiYgIWFsbG93TWlzc2luZykge1xuXHRcdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ2ludHJpbnNpYyAnICsgbmFtZSArICcgZXhpc3RzLCBidXQgaXMgbm90IGF2YWlsYWJsZS4gUGxlYXNlIGZpbGUgYW4gaXNzdWUhJyk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHtcblx0XHRcdGFsaWFzOiBhbGlhcyxcblx0XHRcdG5hbWU6IGludHJpbnNpY05hbWUsXG5cdFx0XHR2YWx1ZTogdmFsdWVcblx0XHR9O1xuXHR9XG5cblx0dGhyb3cgbmV3ICRTeW50YXhFcnJvcignaW50cmluc2ljICcgKyBuYW1lICsgJyBkb2VzIG5vdCBleGlzdCEnKTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gR2V0SW50cmluc2ljKG5hbWUsIGFsbG93TWlzc2luZykge1xuXHRpZiAodHlwZW9mIG5hbWUgIT09ICdzdHJpbmcnIHx8IG5hbWUubGVuZ3RoID09PSAwKSB7XG5cdFx0dGhyb3cgbmV3ICRUeXBlRXJyb3IoJ2ludHJpbnNpYyBuYW1lIG11c3QgYmUgYSBub24tZW1wdHkgc3RyaW5nJyk7XG5cdH1cblx0aWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIHR5cGVvZiBhbGxvd01pc3NpbmcgIT09ICdib29sZWFuJykge1xuXHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdcImFsbG93TWlzc2luZ1wiIGFyZ3VtZW50IG11c3QgYmUgYSBib29sZWFuJyk7XG5cdH1cblxuXHRpZiAoJGV4ZWMoL14lP1teJV0qJT8kLywgbmFtZSkgPT09IG51bGwpIHtcblx0XHR0aHJvdyBuZXcgJFN5bnRheEVycm9yKCdgJWAgbWF5IG5vdCBiZSBwcmVzZW50IGFueXdoZXJlIGJ1dCBhdCB0aGUgYmVnaW5uaW5nIGFuZCBlbmQgb2YgdGhlIGludHJpbnNpYyBuYW1lJyk7XG5cdH1cblx0dmFyIHBhcnRzID0gc3RyaW5nVG9QYXRoKG5hbWUpO1xuXHR2YXIgaW50cmluc2ljQmFzZU5hbWUgPSBwYXJ0cy5sZW5ndGggPiAwID8gcGFydHNbMF0gOiAnJztcblxuXHR2YXIgaW50cmluc2ljID0gZ2V0QmFzZUludHJpbnNpYygnJScgKyBpbnRyaW5zaWNCYXNlTmFtZSArICclJywgYWxsb3dNaXNzaW5nKTtcblx0dmFyIGludHJpbnNpY1JlYWxOYW1lID0gaW50cmluc2ljLm5hbWU7XG5cdHZhciB2YWx1ZSA9IGludHJpbnNpYy52YWx1ZTtcblx0dmFyIHNraXBGdXJ0aGVyQ2FjaGluZyA9IGZhbHNlO1xuXG5cdHZhciBhbGlhcyA9IGludHJpbnNpYy5hbGlhcztcblx0aWYgKGFsaWFzKSB7XG5cdFx0aW50cmluc2ljQmFzZU5hbWUgPSBhbGlhc1swXTtcblx0XHQkc3BsaWNlQXBwbHkocGFydHMsICRjb25jYXQoWzAsIDFdLCBhbGlhcykpO1xuXHR9XG5cblx0Zm9yICh2YXIgaSA9IDEsIGlzT3duID0gdHJ1ZTsgaSA8IHBhcnRzLmxlbmd0aDsgaSArPSAxKSB7XG5cdFx0dmFyIHBhcnQgPSBwYXJ0c1tpXTtcblx0XHR2YXIgZmlyc3QgPSAkc3RyU2xpY2UocGFydCwgMCwgMSk7XG5cdFx0dmFyIGxhc3QgPSAkc3RyU2xpY2UocGFydCwgLTEpO1xuXHRcdGlmIChcblx0XHRcdChcblx0XHRcdFx0KGZpcnN0ID09PSAnXCInIHx8IGZpcnN0ID09PSBcIidcIiB8fCBmaXJzdCA9PT0gJ2AnKVxuXHRcdFx0XHR8fCAobGFzdCA9PT0gJ1wiJyB8fCBsYXN0ID09PSBcIidcIiB8fCBsYXN0ID09PSAnYCcpXG5cdFx0XHQpXG5cdFx0XHQmJiBmaXJzdCAhPT0gbGFzdFxuXHRcdCkge1xuXHRcdFx0dGhyb3cgbmV3ICRTeW50YXhFcnJvcigncHJvcGVydHkgbmFtZXMgd2l0aCBxdW90ZXMgbXVzdCBoYXZlIG1hdGNoaW5nIHF1b3RlcycpO1xuXHRcdH1cblx0XHRpZiAocGFydCA9PT0gJ2NvbnN0cnVjdG9yJyB8fCAhaXNPd24pIHtcblx0XHRcdHNraXBGdXJ0aGVyQ2FjaGluZyA9IHRydWU7XG5cdFx0fVxuXG5cdFx0aW50cmluc2ljQmFzZU5hbWUgKz0gJy4nICsgcGFydDtcblx0XHRpbnRyaW5zaWNSZWFsTmFtZSA9ICclJyArIGludHJpbnNpY0Jhc2VOYW1lICsgJyUnO1xuXG5cdFx0aWYgKGhhc093bihJTlRSSU5TSUNTLCBpbnRyaW5zaWNSZWFsTmFtZSkpIHtcblx0XHRcdHZhbHVlID0gSU5UUklOU0lDU1tpbnRyaW5zaWNSZWFsTmFtZV07XG5cdFx0fSBlbHNlIGlmICh2YWx1ZSAhPSBudWxsKSB7XG5cdFx0XHRpZiAoIShwYXJ0IGluIHZhbHVlKSkge1xuXHRcdFx0XHRpZiAoIWFsbG93TWlzc2luZykge1xuXHRcdFx0XHRcdHRocm93IG5ldyAkVHlwZUVycm9yKCdiYXNlIGludHJpbnNpYyBmb3IgJyArIG5hbWUgKyAnIGV4aXN0cywgYnV0IHRoZSBwcm9wZXJ0eSBpcyBub3QgYXZhaWxhYmxlLicpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiB2b2lkIHVuZGVmaW5lZDtcblx0XHRcdH1cblx0XHRcdGlmICgkZ09QRCAmJiAoaSArIDEpID49IHBhcnRzLmxlbmd0aCkge1xuXHRcdFx0XHR2YXIgZGVzYyA9ICRnT1BEKHZhbHVlLCBwYXJ0KTtcblx0XHRcdFx0aXNPd24gPSAhIWRlc2M7XG5cblx0XHRcdFx0Ly8gQnkgY29udmVudGlvbiwgd2hlbiBhIGRhdGEgcHJvcGVydHkgaXMgY29udmVydGVkIHRvIGFuIGFjY2Vzc29yXG5cdFx0XHRcdC8vIHByb3BlcnR5IHRvIGVtdWxhdGUgYSBkYXRhIHByb3BlcnR5IHRoYXQgZG9lcyBub3Qgc3VmZmVyIGZyb21cblx0XHRcdFx0Ly8gdGhlIG92ZXJyaWRlIG1pc3Rha2UsIHRoYXQgYWNjZXNzb3IncyBnZXR0ZXIgaXMgbWFya2VkIHdpdGhcblx0XHRcdFx0Ly8gYW4gYG9yaWdpbmFsVmFsdWVgIHByb3BlcnR5LiBIZXJlLCB3aGVuIHdlIGRldGVjdCB0aGlzLCB3ZVxuXHRcdFx0XHQvLyB1cGhvbGQgdGhlIGlsbHVzaW9uIGJ5IHByZXRlbmRpbmcgdG8gc2VlIHRoYXQgb3JpZ2luYWwgZGF0YVxuXHRcdFx0XHQvLyBwcm9wZXJ0eSwgaS5lLiwgcmV0dXJuaW5nIHRoZSB2YWx1ZSByYXRoZXIgdGhhbiB0aGUgZ2V0dGVyXG5cdFx0XHRcdC8vIGl0c2VsZi5cblx0XHRcdFx0aWYgKGlzT3duICYmICdnZXQnIGluIGRlc2MgJiYgISgnb3JpZ2luYWxWYWx1ZScgaW4gZGVzYy5nZXQpKSB7XG5cdFx0XHRcdFx0dmFsdWUgPSBkZXNjLmdldDtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHR2YWx1ZSA9IHZhbHVlW3BhcnRdO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRpc093biA9IGhhc093bih2YWx1ZSwgcGFydCk7XG5cdFx0XHRcdHZhbHVlID0gdmFsdWVbcGFydF07XG5cdFx0XHR9XG5cblx0XHRcdGlmIChpc093biAmJiAhc2tpcEZ1cnRoZXJDYWNoaW5nKSB7XG5cdFx0XHRcdElOVFJJTlNJQ1NbaW50cmluc2ljUmVhbE5hbWVdID0gdmFsdWU7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cdHJldHVybiB2YWx1ZTtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG52YXIgaGFzU3ltYm9scyA9IHJlcXVpcmUoJ2hhcy1zeW1ib2xzL3NoYW1zJyk7XG5cbi8qKiBAdHlwZSB7aW1wb3J0KCcuJyl9ICovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGhhc1RvU3RyaW5nVGFnU2hhbXMoKSB7XG5cdHJldHVybiBoYXNTeW1ib2xzKCkgJiYgISFTeW1ib2wudG9TdHJpbmdUYWc7XG59O1xuIiwgIid1c2Ugc3RyaWN0JztcblxudmFyIEdldEludHJpbnNpYyA9IHJlcXVpcmUoJ2dldC1pbnRyaW5zaWMnKTtcblxudmFyICRkZWZpbmVQcm9wZXJ0eSA9IEdldEludHJpbnNpYygnJU9iamVjdC5kZWZpbmVQcm9wZXJ0eSUnLCB0cnVlKTtcblxudmFyIGhhc1RvU3RyaW5nVGFnID0gcmVxdWlyZSgnaGFzLXRvc3RyaW5ndGFnL3NoYW1zJykoKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCdoYXNvd24nKTtcbnZhciAkVHlwZUVycm9yID0gcmVxdWlyZSgnZXMtZXJyb3JzL3R5cGUnKTtcblxudmFyIHRvU3RyaW5nVGFnID0gaGFzVG9TdHJpbmdUYWcgPyBTeW1ib2wudG9TdHJpbmdUYWcgOiBudWxsO1xuXG4vKiogQHR5cGUge2ltcG9ydCgnLicpfSAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBzZXRUb1N0cmluZ1RhZyhvYmplY3QsIHZhbHVlKSB7XG5cdHZhciBvdmVycmlkZUlmU2V0ID0gYXJndW1lbnRzLmxlbmd0aCA+IDIgJiYgISFhcmd1bWVudHNbMl0gJiYgYXJndW1lbnRzWzJdLmZvcmNlO1xuXHR2YXIgbm9uQ29uZmlndXJhYmxlID0gYXJndW1lbnRzLmxlbmd0aCA+IDIgJiYgISFhcmd1bWVudHNbMl0gJiYgYXJndW1lbnRzWzJdLm5vbkNvbmZpZ3VyYWJsZTtcblx0aWYgKFxuXHRcdCh0eXBlb2Ygb3ZlcnJpZGVJZlNldCAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIG92ZXJyaWRlSWZTZXQgIT09ICdib29sZWFuJylcblx0XHR8fCAodHlwZW9mIG5vbkNvbmZpZ3VyYWJsZSAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIG5vbkNvbmZpZ3VyYWJsZSAhPT0gJ2Jvb2xlYW4nKVxuXHQpIHtcblx0XHR0aHJvdyBuZXcgJFR5cGVFcnJvcignaWYgcHJvdmlkZWQsIHRoZSBgb3ZlcnJpZGVJZlNldGAgYW5kIGBub25Db25maWd1cmFibGVgIG9wdGlvbnMgbXVzdCBiZSBib29sZWFucycpO1xuXHR9XG5cdGlmICh0b1N0cmluZ1RhZyAmJiAob3ZlcnJpZGVJZlNldCB8fCAhaGFzT3duKG9iamVjdCwgdG9TdHJpbmdUYWcpKSkge1xuXHRcdGlmICgkZGVmaW5lUHJvcGVydHkpIHtcblx0XHRcdCRkZWZpbmVQcm9wZXJ0eShvYmplY3QsIHRvU3RyaW5nVGFnLCB7XG5cdFx0XHRcdGNvbmZpZ3VyYWJsZTogIW5vbkNvbmZpZ3VyYWJsZSxcblx0XHRcdFx0ZW51bWVyYWJsZTogZmFsc2UsXG5cdFx0XHRcdHZhbHVlOiB2YWx1ZSxcblx0XHRcdFx0d3JpdGFibGU6IGZhbHNlXG5cdFx0XHR9KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0b2JqZWN0W3RvU3RyaW5nVGFnXSA9IHZhbHVlOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG5cdFx0fVxuXHR9XG59O1xuIiwgIi8vIHBvcHVsYXRlcyBtaXNzaW5nIHZhbHVlc1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihkc3QsIHNyYykge1xuXG4gIE9iamVjdC5rZXlzKHNyYykuZm9yRWFjaChmdW5jdGlvbihwcm9wKVxuICB7XG4gICAgZHN0W3Byb3BdID0gZHN0W3Byb3BdIHx8IHNyY1twcm9wXTtcbiAgfSk7XG5cbiAgcmV0dXJuIGRzdDtcbn07XG4iLCAidmFyIENvbWJpbmVkU3RyZWFtID0gcmVxdWlyZSgnY29tYmluZWQtc3RyZWFtJyk7XG52YXIgdXRpbCA9IHJlcXVpcmUoJ3V0aWwnKTtcbnZhciBwYXRoID0gcmVxdWlyZSgncGF0aCcpO1xudmFyIGh0dHAgPSByZXF1aXJlKCdodHRwJyk7XG52YXIgaHR0cHMgPSByZXF1aXJlKCdodHRwcycpO1xudmFyIHBhcnNlVXJsID0gcmVxdWlyZSgndXJsJykucGFyc2U7XG52YXIgZnMgPSByZXF1aXJlKCdmcycpO1xudmFyIFN0cmVhbSA9IHJlcXVpcmUoJ3N0cmVhbScpLlN0cmVhbTtcbnZhciBtaW1lID0gcmVxdWlyZSgnbWltZS10eXBlcycpO1xudmFyIGFzeW5ja2l0ID0gcmVxdWlyZSgnYXN5bmNraXQnKTtcbnZhciBzZXRUb1N0cmluZ1RhZyA9IHJlcXVpcmUoJ2VzLXNldC10b3N0cmluZ3RhZycpO1xudmFyIHBvcHVsYXRlID0gcmVxdWlyZSgnLi9wb3B1bGF0ZS5qcycpO1xuXG4vLyBQdWJsaWMgQVBJXG5tb2R1bGUuZXhwb3J0cyA9IEZvcm1EYXRhO1xuXG4vLyBtYWtlIGl0IGEgU3RyZWFtXG51dGlsLmluaGVyaXRzKEZvcm1EYXRhLCBDb21iaW5lZFN0cmVhbSk7XG5cbi8qKlxuICogQ3JlYXRlIHJlYWRhYmxlIFwibXVsdGlwYXJ0L2Zvcm0tZGF0YVwiIHN0cmVhbXMuXG4gKiBDYW4gYmUgdXNlZCB0byBzdWJtaXQgZm9ybXNcbiAqIGFuZCBmaWxlIHVwbG9hZHMgdG8gb3RoZXIgd2ViIGFwcGxpY2F0aW9ucy5cbiAqXG4gKiBAY29uc3RydWN0b3JcbiAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zIC0gUHJvcGVydGllcyB0byBiZSBhZGRlZC9vdmVycmlkZW4gZm9yIEZvcm1EYXRhIGFuZCBDb21iaW5lZFN0cmVhbVxuICovXG5mdW5jdGlvbiBGb3JtRGF0YShvcHRpb25zKSB7XG4gIGlmICghKHRoaXMgaW5zdGFuY2VvZiBGb3JtRGF0YSkpIHtcbiAgICByZXR1cm4gbmV3IEZvcm1EYXRhKG9wdGlvbnMpO1xuICB9XG5cbiAgdGhpcy5fb3ZlcmhlYWRMZW5ndGggPSAwO1xuICB0aGlzLl92YWx1ZUxlbmd0aCA9IDA7XG4gIHRoaXMuX3ZhbHVlc1RvTWVhc3VyZSA9IFtdO1xuXG4gIENvbWJpbmVkU3RyZWFtLmNhbGwodGhpcyk7XG5cbiAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gIGZvciAodmFyIG9wdGlvbiBpbiBvcHRpb25zKSB7XG4gICAgdGhpc1tvcHRpb25dID0gb3B0aW9uc1tvcHRpb25dO1xuICB9XG59XG5cbkZvcm1EYXRhLkxJTkVfQlJFQUsgPSAnXFxyXFxuJztcbkZvcm1EYXRhLkRFRkFVTFRfQ09OVEVOVF9UWVBFID0gJ2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSc7XG5cbkZvcm1EYXRhLnByb3RvdHlwZS5hcHBlbmQgPSBmdW5jdGlvbihmaWVsZCwgdmFsdWUsIG9wdGlvbnMpIHtcblxuICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuICAvLyBhbGxvdyBmaWxlbmFtZSBhcyBzaW5nbGUgb3B0aW9uXG4gIGlmICh0eXBlb2Ygb3B0aW9ucyA9PSAnc3RyaW5nJykge1xuICAgIG9wdGlvbnMgPSB7ZmlsZW5hbWU6IG9wdGlvbnN9O1xuICB9XG5cbiAgdmFyIGFwcGVuZCA9IENvbWJpbmVkU3RyZWFtLnByb3RvdHlwZS5hcHBlbmQuYmluZCh0aGlzKTtcblxuICAvLyBhbGwgdGhhdCBzdHJlYW15IGJ1c2luZXNzIGNhbid0IGhhbmRsZSBudW1iZXJzXG4gIGlmICh0eXBlb2YgdmFsdWUgPT0gJ251bWJlcicpIHtcbiAgICB2YWx1ZSA9ICcnICsgdmFsdWU7XG4gIH1cblxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vZmVsaXhnZS9ub2RlLWZvcm0tZGF0YS9pc3N1ZXMvMzhcbiAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgLy8gUGxlYXNlIGNvbnZlcnQgeW91ciBhcnJheSBpbnRvIHN0cmluZ1xuICAgIC8vIHRoZSB3YXkgd2ViIHNlcnZlciBleHBlY3RzIGl0XG4gICAgdGhpcy5fZXJyb3IobmV3IEVycm9yKCdBcnJheXMgYXJlIG5vdCBzdXBwb3J0ZWQuJykpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciBoZWFkZXIgPSB0aGlzLl9tdWx0aVBhcnRIZWFkZXIoZmllbGQsIHZhbHVlLCBvcHRpb25zKTtcbiAgdmFyIGZvb3RlciA9IHRoaXMuX211bHRpUGFydEZvb3RlcigpO1xuXG4gIGFwcGVuZChoZWFkZXIpO1xuICBhcHBlbmQodmFsdWUpO1xuICBhcHBlbmQoZm9vdGVyKTtcblxuICAvLyBwYXNzIGFsb25nIG9wdGlvbnMua25vd25MZW5ndGhcbiAgdGhpcy5fdHJhY2tMZW5ndGgoaGVhZGVyLCB2YWx1ZSwgb3B0aW9ucyk7XG59O1xuXG5Gb3JtRGF0YS5wcm90b3R5cGUuX3RyYWNrTGVuZ3RoID0gZnVuY3Rpb24oaGVhZGVyLCB2YWx1ZSwgb3B0aW9ucykge1xuICB2YXIgdmFsdWVMZW5ndGggPSAwO1xuXG4gIC8vIHVzZWQgdy8gZ2V0TGVuZ3RoU3luYygpLCB3aGVuIGxlbmd0aCBpcyBrbm93bi5cbiAgLy8gZS5nLiBmb3Igc3RyZWFtaW5nIGRpcmVjdGx5IGZyb20gYSByZW1vdGUgc2VydmVyLFxuICAvLyB3LyBhIGtub3duIGZpbGUgYSBzaXplLCBhbmQgbm90IHdhbnRpbmcgdG8gd2FpdCBmb3JcbiAgLy8gaW5jb21pbmcgZmlsZSB0byBmaW5pc2ggdG8gZ2V0IGl0cyBzaXplLlxuICBpZiAob3B0aW9ucy5rbm93bkxlbmd0aCAhPSBudWxsKSB7XG4gICAgdmFsdWVMZW5ndGggKz0gK29wdGlvbnMua25vd25MZW5ndGg7XG4gIH0gZWxzZSBpZiAoQnVmZmVyLmlzQnVmZmVyKHZhbHVlKSkge1xuICAgIHZhbHVlTGVuZ3RoID0gdmFsdWUubGVuZ3RoO1xuICB9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICB2YWx1ZUxlbmd0aCA9IEJ1ZmZlci5ieXRlTGVuZ3RoKHZhbHVlKTtcbiAgfVxuXG4gIHRoaXMuX3ZhbHVlTGVuZ3RoICs9IHZhbHVlTGVuZ3RoO1xuXG4gIC8vIEBjaGVjayB3aHkgYWRkIENSTEY/IGRvZXMgdGhpcyBhY2NvdW50IGZvciBjdXN0b20vbXVsdGlwbGUgQ1JMRnM/XG4gIHRoaXMuX292ZXJoZWFkTGVuZ3RoICs9XG4gICAgQnVmZmVyLmJ5dGVMZW5ndGgoaGVhZGVyKSArXG4gICAgRm9ybURhdGEuTElORV9CUkVBSy5sZW5ndGg7XG5cbiAgLy8gZW1wdHkgb3IgZWl0aGVyIGRvZXNuJ3QgaGF2ZSBwYXRoIG9yIG5vdCBhbiBodHRwIHJlc3BvbnNlIG9yIG5vdCBhIHN0cmVhbVxuICBpZiAoIXZhbHVlIHx8ICggIXZhbHVlLnBhdGggJiYgISh2YWx1ZS5yZWFkYWJsZSAmJiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodmFsdWUsICdodHRwVmVyc2lvbicpKSAmJiAhKHZhbHVlIGluc3RhbmNlb2YgU3RyZWFtKSkpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvLyBubyBuZWVkIHRvIGJvdGhlciB3aXRoIHRoZSBsZW5ndGhcbiAgaWYgKCFvcHRpb25zLmtub3duTGVuZ3RoKSB7XG4gICAgdGhpcy5fdmFsdWVzVG9NZWFzdXJlLnB1c2godmFsdWUpO1xuICB9XG59O1xuXG5Gb3JtRGF0YS5wcm90b3R5cGUuX2xlbmd0aFJldHJpZXZlciA9IGZ1bmN0aW9uKHZhbHVlLCBjYWxsYmFjaykge1xuICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHZhbHVlLCAnZmQnKSkge1xuXG4gICAgLy8gdGFrZSByZWFkIHJhbmdlIGludG8gYSBhY2NvdW50XG4gICAgLy8gYGVuZGAgPSBJbmZpbml0eSBcdTIwMTM+IHJlYWQgZmlsZSB0aWxsIHRoZSBlbmRcbiAgICAvL1xuICAgIC8vIFRPRE86IExvb2tzIGxpa2UgdGhlcmUgaXMgYnVnIGluIE5vZGUgZnMuY3JlYXRlUmVhZFN0cmVhbVxuICAgIC8vIGl0IGRvZXNuJ3QgcmVzcGVjdCBgZW5kYCBvcHRpb25zIHdpdGhvdXQgYHN0YXJ0YCBvcHRpb25zXG4gICAgLy8gRml4IGl0IHdoZW4gbm9kZSBmaXhlcyBpdC5cbiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vam95ZW50L25vZGUvaXNzdWVzLzc4MTlcbiAgICBpZiAodmFsdWUuZW5kICE9IHVuZGVmaW5lZCAmJiB2YWx1ZS5lbmQgIT0gSW5maW5pdHkgJiYgdmFsdWUuc3RhcnQgIT0gdW5kZWZpbmVkKSB7XG5cbiAgICAgIC8vIHdoZW4gZW5kIHNwZWNpZmllZFxuICAgICAgLy8gbm8gbmVlZCB0byBjYWxjdWxhdGUgcmFuZ2VcbiAgICAgIC8vIGluY2x1c2l2ZSwgc3RhcnRzIHdpdGggMFxuICAgICAgY2FsbGJhY2sobnVsbCwgdmFsdWUuZW5kICsgMSAtICh2YWx1ZS5zdGFydCA/IHZhbHVlLnN0YXJ0IDogMCkpO1xuXG4gICAgLy8gbm90IHRoYXQgZmFzdCBzbm9vcHlcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gc3RpbGwgbmVlZCB0byBmZXRjaCBmaWxlIHNpemUgZnJvbSBmc1xuICAgICAgZnMuc3RhdCh2YWx1ZS5wYXRoLCBmdW5jdGlvbihlcnIsIHN0YXQpIHtcblxuICAgICAgICB2YXIgZmlsZVNpemU7XG5cbiAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gdXBkYXRlIGZpbmFsIHNpemUgYmFzZWQgb24gdGhlIHJhbmdlIG9wdGlvbnNcbiAgICAgICAgZmlsZVNpemUgPSBzdGF0LnNpemUgLSAodmFsdWUuc3RhcnQgPyB2YWx1ZS5zdGFydCA6IDApO1xuICAgICAgICBjYWxsYmFjayhudWxsLCBmaWxlU2l6ZSk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgLy8gb3IgaHR0cCByZXNwb25zZVxuICB9IGVsc2UgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh2YWx1ZSwgJ2h0dHBWZXJzaW9uJykpIHtcbiAgICBjYWxsYmFjayhudWxsLCArdmFsdWUuaGVhZGVyc1snY29udGVudC1sZW5ndGgnXSk7XG5cbiAgLy8gb3IgcmVxdWVzdCBzdHJlYW0gaHR0cDovL2dpdGh1Yi5jb20vbWlrZWFsL3JlcXVlc3RcbiAgfSBlbHNlIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodmFsdWUsICdodHRwTW9kdWxlJykpIHtcbiAgICAvLyB3YWl0IHRpbGwgcmVzcG9uc2UgY29tZSBiYWNrXG4gICAgdmFsdWUub24oJ3Jlc3BvbnNlJywgZnVuY3Rpb24ocmVzcG9uc2UpIHtcbiAgICAgIHZhbHVlLnBhdXNlKCk7XG4gICAgICBjYWxsYmFjayhudWxsLCArcmVzcG9uc2UuaGVhZGVyc1snY29udGVudC1sZW5ndGgnXSk7XG4gICAgfSk7XG4gICAgdmFsdWUucmVzdW1lKCk7XG5cbiAgLy8gc29tZXRoaW5nIGVsc2VcbiAgfSBlbHNlIHtcbiAgICBjYWxsYmFjaygnVW5rbm93biBzdHJlYW0nKTtcbiAgfVxufTtcblxuRm9ybURhdGEucHJvdG90eXBlLl9tdWx0aVBhcnRIZWFkZXIgPSBmdW5jdGlvbihmaWVsZCwgdmFsdWUsIG9wdGlvbnMpIHtcbiAgLy8gY3VzdG9tIGhlYWRlciBzcGVjaWZpZWQgKGFzIHN0cmluZyk/XG4gIC8vIGl0IGJlY29tZXMgcmVzcG9uc2libGUgZm9yIGJvdW5kYXJ5XG4gIC8vIChlLmcuIHRvIGhhbmRsZSBleHRyYSBDUkxGcyBvbiAuTkVUIHNlcnZlcnMpXG4gIGlmICh0eXBlb2Ygb3B0aW9ucy5oZWFkZXIgPT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gb3B0aW9ucy5oZWFkZXI7XG4gIH1cblxuICB2YXIgY29udGVudERpc3Bvc2l0aW9uID0gdGhpcy5fZ2V0Q29udGVudERpc3Bvc2l0aW9uKHZhbHVlLCBvcHRpb25zKTtcbiAgdmFyIGNvbnRlbnRUeXBlID0gdGhpcy5fZ2V0Q29udGVudFR5cGUodmFsdWUsIG9wdGlvbnMpO1xuXG4gIHZhciBjb250ZW50cyA9ICcnO1xuICB2YXIgaGVhZGVycyAgPSB7XG4gICAgLy8gYWRkIGN1c3RvbSBkaXNwb3NpdGlvbiBhcyB0aGlyZCBlbGVtZW50IG9yIGtlZXAgaXQgdHdvIGVsZW1lbnRzIGlmIG5vdFxuICAgICdDb250ZW50LURpc3Bvc2l0aW9uJzogWydmb3JtLWRhdGEnLCAnbmFtZT1cIicgKyBmaWVsZCArICdcIiddLmNvbmNhdChjb250ZW50RGlzcG9zaXRpb24gfHwgW10pLFxuICAgIC8vIGlmIG5vIGNvbnRlbnQgdHlwZS4gYWxsb3cgaXQgdG8gYmUgZW1wdHkgYXJyYXlcbiAgICAnQ29udGVudC1UeXBlJzogW10uY29uY2F0KGNvbnRlbnRUeXBlIHx8IFtdKVxuICB9O1xuXG4gIC8vIGFsbG93IGN1c3RvbSBoZWFkZXJzLlxuICBpZiAodHlwZW9mIG9wdGlvbnMuaGVhZGVyID09ICdvYmplY3QnKSB7XG4gICAgcG9wdWxhdGUoaGVhZGVycywgb3B0aW9ucy5oZWFkZXIpO1xuICB9XG5cbiAgdmFyIGhlYWRlcjtcbiAgZm9yICh2YXIgcHJvcCBpbiBoZWFkZXJzKSB7XG4gICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChoZWFkZXJzLCBwcm9wKSkge1xuICAgICAgaGVhZGVyID0gaGVhZGVyc1twcm9wXTtcblxuICAgICAgLy8gc2tpcCBudWxsaXNoIGhlYWRlcnMuXG4gICAgICBpZiAoaGVhZGVyID09IG51bGwpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIC8vIGNvbnZlcnQgYWxsIGhlYWRlcnMgdG8gYXJyYXlzLlxuICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGhlYWRlcikpIHtcbiAgICAgICAgaGVhZGVyID0gW2hlYWRlcl07XG4gICAgICB9XG5cbiAgICAgIC8vIGFkZCBub24tZW1wdHkgaGVhZGVycy5cbiAgICAgIGlmIChoZWFkZXIubGVuZ3RoKSB7XG4gICAgICAgIGNvbnRlbnRzICs9IHByb3AgKyAnOiAnICsgaGVhZGVyLmpvaW4oJzsgJykgKyBGb3JtRGF0YS5MSU5FX0JSRUFLO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiAnLS0nICsgdGhpcy5nZXRCb3VuZGFyeSgpICsgRm9ybURhdGEuTElORV9CUkVBSyArIGNvbnRlbnRzICsgRm9ybURhdGEuTElORV9CUkVBSztcbn07XG5cbkZvcm1EYXRhLnByb3RvdHlwZS5fZ2V0Q29udGVudERpc3Bvc2l0aW9uID0gZnVuY3Rpb24odmFsdWUsIG9wdGlvbnMpIHtcblxuICB2YXIgZmlsZW5hbWVcbiAgICAsIGNvbnRlbnREaXNwb3NpdGlvblxuICAgIDtcblxuICBpZiAodHlwZW9mIG9wdGlvbnMuZmlsZXBhdGggPT09ICdzdHJpbmcnKSB7XG4gICAgLy8gY3VzdG9tIGZpbGVwYXRoIGZvciByZWxhdGl2ZSBwYXRoc1xuICAgIGZpbGVuYW1lID0gcGF0aC5ub3JtYWxpemUob3B0aW9ucy5maWxlcGF0aCkucmVwbGFjZSgvXFxcXC9nLCAnLycpO1xuICB9IGVsc2UgaWYgKG9wdGlvbnMuZmlsZW5hbWUgfHwgdmFsdWUubmFtZSB8fCB2YWx1ZS5wYXRoKSB7XG4gICAgLy8gY3VzdG9tIGZpbGVuYW1lIHRha2UgcHJlY2VkZW5jZVxuICAgIC8vIGZvcm1pZGFibGUgYW5kIHRoZSBicm93c2VyIGFkZCBhIG5hbWUgcHJvcGVydHlcbiAgICAvLyBmcy0gYW5kIHJlcXVlc3QtIHN0cmVhbXMgaGF2ZSBwYXRoIHByb3BlcnR5XG4gICAgZmlsZW5hbWUgPSBwYXRoLmJhc2VuYW1lKG9wdGlvbnMuZmlsZW5hbWUgfHwgdmFsdWUubmFtZSB8fCB2YWx1ZS5wYXRoKTtcbiAgfSBlbHNlIGlmICh2YWx1ZS5yZWFkYWJsZSAmJiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodmFsdWUsICdodHRwVmVyc2lvbicpKSB7XG4gICAgLy8gb3IgdHJ5IGh0dHAgcmVzcG9uc2VcbiAgICBmaWxlbmFtZSA9IHBhdGguYmFzZW5hbWUodmFsdWUuY2xpZW50Ll9odHRwTWVzc2FnZS5wYXRoIHx8ICcnKTtcbiAgfVxuXG4gIGlmIChmaWxlbmFtZSkge1xuICAgIGNvbnRlbnREaXNwb3NpdGlvbiA9ICdmaWxlbmFtZT1cIicgKyBmaWxlbmFtZSArICdcIic7XG4gIH1cblxuICByZXR1cm4gY29udGVudERpc3Bvc2l0aW9uO1xufTtcblxuRm9ybURhdGEucHJvdG90eXBlLl9nZXRDb250ZW50VHlwZSA9IGZ1bmN0aW9uKHZhbHVlLCBvcHRpb25zKSB7XG5cbiAgLy8gdXNlIGN1c3RvbSBjb250ZW50LXR5cGUgYWJvdmUgYWxsXG4gIHZhciBjb250ZW50VHlwZSA9IG9wdGlvbnMuY29udGVudFR5cGU7XG5cbiAgLy8gb3IgdHJ5IGBuYW1lYCBmcm9tIGZvcm1pZGFibGUsIGJyb3dzZXJcbiAgaWYgKCFjb250ZW50VHlwZSAmJiB2YWx1ZS5uYW1lKSB7XG4gICAgY29udGVudFR5cGUgPSBtaW1lLmxvb2t1cCh2YWx1ZS5uYW1lKTtcbiAgfVxuXG4gIC8vIG9yIHRyeSBgcGF0aGAgZnJvbSBmcy0sIHJlcXVlc3QtIHN0cmVhbXNcbiAgaWYgKCFjb250ZW50VHlwZSAmJiB2YWx1ZS5wYXRoKSB7XG4gICAgY29udGVudFR5cGUgPSBtaW1lLmxvb2t1cCh2YWx1ZS5wYXRoKTtcbiAgfVxuXG4gIC8vIG9yIGlmIGl0J3MgaHR0cC1yZXBvbnNlXG4gIGlmICghY29udGVudFR5cGUgJiYgdmFsdWUucmVhZGFibGUgJiYgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHZhbHVlLCAnaHR0cFZlcnNpb24nKSkge1xuICAgIGNvbnRlbnRUeXBlID0gdmFsdWUuaGVhZGVyc1snY29udGVudC10eXBlJ107XG4gIH1cblxuICAvLyBvciBndWVzcyBpdCBmcm9tIHRoZSBmaWxlcGF0aCBvciBmaWxlbmFtZVxuICBpZiAoIWNvbnRlbnRUeXBlICYmIChvcHRpb25zLmZpbGVwYXRoIHx8IG9wdGlvbnMuZmlsZW5hbWUpKSB7XG4gICAgY29udGVudFR5cGUgPSBtaW1lLmxvb2t1cChvcHRpb25zLmZpbGVwYXRoIHx8IG9wdGlvbnMuZmlsZW5hbWUpO1xuICB9XG5cbiAgLy8gZmFsbGJhY2sgdG8gdGhlIGRlZmF1bHQgY29udGVudCB0eXBlIGlmIGB2YWx1ZWAgaXMgbm90IHNpbXBsZSB2YWx1ZVxuICBpZiAoIWNvbnRlbnRUeXBlICYmIHR5cGVvZiB2YWx1ZSA9PSAnb2JqZWN0Jykge1xuICAgIGNvbnRlbnRUeXBlID0gRm9ybURhdGEuREVGQVVMVF9DT05URU5UX1RZUEU7XG4gIH1cblxuICByZXR1cm4gY29udGVudFR5cGU7XG59O1xuXG5Gb3JtRGF0YS5wcm90b3R5cGUuX211bHRpUGFydEZvb3RlciA9IGZ1bmN0aW9uKCkge1xuICByZXR1cm4gZnVuY3Rpb24obmV4dCkge1xuICAgIHZhciBmb290ZXIgPSBGb3JtRGF0YS5MSU5FX0JSRUFLO1xuXG4gICAgdmFyIGxhc3RQYXJ0ID0gKHRoaXMuX3N0cmVhbXMubGVuZ3RoID09PSAwKTtcbiAgICBpZiAobGFzdFBhcnQpIHtcbiAgICAgIGZvb3RlciArPSB0aGlzLl9sYXN0Qm91bmRhcnkoKTtcbiAgICB9XG5cbiAgICBuZXh0KGZvb3Rlcik7XG4gIH0uYmluZCh0aGlzKTtcbn07XG5cbkZvcm1EYXRhLnByb3RvdHlwZS5fbGFzdEJvdW5kYXJ5ID0gZnVuY3Rpb24oKSB7XG4gIHJldHVybiAnLS0nICsgdGhpcy5nZXRCb3VuZGFyeSgpICsgJy0tJyArIEZvcm1EYXRhLkxJTkVfQlJFQUs7XG59O1xuXG5Gb3JtRGF0YS5wcm90b3R5cGUuZ2V0SGVhZGVycyA9IGZ1bmN0aW9uKHVzZXJIZWFkZXJzKSB7XG4gIHZhciBoZWFkZXI7XG4gIHZhciBmb3JtSGVhZGVycyA9IHtcbiAgICAnY29udGVudC10eXBlJzogJ211bHRpcGFydC9mb3JtLWRhdGE7IGJvdW5kYXJ5PScgKyB0aGlzLmdldEJvdW5kYXJ5KClcbiAgfTtcblxuICBmb3IgKGhlYWRlciBpbiB1c2VySGVhZGVycykge1xuICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodXNlckhlYWRlcnMsIGhlYWRlcikpIHtcbiAgICAgIGZvcm1IZWFkZXJzW2hlYWRlci50b0xvd2VyQ2FzZSgpXSA9IHVzZXJIZWFkZXJzW2hlYWRlcl07XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGZvcm1IZWFkZXJzO1xufTtcblxuRm9ybURhdGEucHJvdG90eXBlLnNldEJvdW5kYXJ5ID0gZnVuY3Rpb24oYm91bmRhcnkpIHtcbiAgdGhpcy5fYm91bmRhcnkgPSBib3VuZGFyeTtcbn07XG5cbkZvcm1EYXRhLnByb3RvdHlwZS5nZXRCb3VuZGFyeSA9IGZ1bmN0aW9uKCkge1xuICBpZiAoIXRoaXMuX2JvdW5kYXJ5KSB7XG4gICAgdGhpcy5fZ2VuZXJhdGVCb3VuZGFyeSgpO1xuICB9XG5cbiAgcmV0dXJuIHRoaXMuX2JvdW5kYXJ5O1xufTtcblxuRm9ybURhdGEucHJvdG90eXBlLmdldEJ1ZmZlciA9IGZ1bmN0aW9uKCkge1xuICB2YXIgZGF0YUJ1ZmZlciA9IG5ldyBCdWZmZXIuYWxsb2MoMCk7XG4gIHZhciBib3VuZGFyeSA9IHRoaXMuZ2V0Qm91bmRhcnkoKTtcblxuICAvLyBDcmVhdGUgdGhlIGZvcm0gY29udGVudC4gQWRkIExpbmUgYnJlYWtzIHRvIHRoZSBlbmQgb2YgZGF0YS5cbiAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IHRoaXMuX3N0cmVhbXMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICBpZiAodHlwZW9mIHRoaXMuX3N0cmVhbXNbaV0gIT09ICdmdW5jdGlvbicpIHtcblxuICAgICAgLy8gQWRkIGNvbnRlbnQgdG8gdGhlIGJ1ZmZlci5cbiAgICAgIGlmKEJ1ZmZlci5pc0J1ZmZlcih0aGlzLl9zdHJlYW1zW2ldKSkge1xuICAgICAgICBkYXRhQnVmZmVyID0gQnVmZmVyLmNvbmNhdCggW2RhdGFCdWZmZXIsIHRoaXMuX3N0cmVhbXNbaV1dKTtcbiAgICAgIH1lbHNlIHtcbiAgICAgICAgZGF0YUJ1ZmZlciA9IEJ1ZmZlci5jb25jYXQoIFtkYXRhQnVmZmVyLCBCdWZmZXIuZnJvbSh0aGlzLl9zdHJlYW1zW2ldKV0pO1xuICAgICAgfVxuXG4gICAgICAvLyBBZGQgYnJlYWsgYWZ0ZXIgY29udGVudC5cbiAgICAgIGlmICh0eXBlb2YgdGhpcy5fc3RyZWFtc1tpXSAhPT0gJ3N0cmluZycgfHwgdGhpcy5fc3RyZWFtc1tpXS5zdWJzdHJpbmcoIDIsIGJvdW5kYXJ5Lmxlbmd0aCArIDIgKSAhPT0gYm91bmRhcnkpIHtcbiAgICAgICAgZGF0YUJ1ZmZlciA9IEJ1ZmZlci5jb25jYXQoIFtkYXRhQnVmZmVyLCBCdWZmZXIuZnJvbShGb3JtRGF0YS5MSU5FX0JSRUFLKV0gKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyBBZGQgdGhlIGZvb3RlciBhbmQgcmV0dXJuIHRoZSBCdWZmZXIgb2JqZWN0LlxuICByZXR1cm4gQnVmZmVyLmNvbmNhdCggW2RhdGFCdWZmZXIsIEJ1ZmZlci5mcm9tKHRoaXMuX2xhc3RCb3VuZGFyeSgpKV0gKTtcbn07XG5cbkZvcm1EYXRhLnByb3RvdHlwZS5fZ2VuZXJhdGVCb3VuZGFyeSA9IGZ1bmN0aW9uKCkge1xuICAvLyBUaGlzIGdlbmVyYXRlcyBhIDUwIGNoYXJhY3RlciBib3VuZGFyeSBzaW1pbGFyIHRvIHRob3NlIHVzZWQgYnkgRmlyZWZveC5cbiAgLy8gVGhleSBhcmUgb3B0aW1pemVkIGZvciBib3llci1tb29yZSBwYXJzaW5nLlxuICB2YXIgYm91bmRhcnkgPSAnLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0nO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IDI0OyBpKyspIHtcbiAgICBib3VuZGFyeSArPSBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAxMCkudG9TdHJpbmcoMTYpO1xuICB9XG5cbiAgdGhpcy5fYm91bmRhcnkgPSBib3VuZGFyeTtcbn07XG5cbi8vIE5vdGU6IGdldExlbmd0aFN5bmMgRE9FU04nVCBjYWxjdWxhdGUgc3RyZWFtcyBsZW5ndGhcbi8vIEFzIHdvcmthcm91bmQgb25lIGNhbiBjYWxjdWxhdGUgZmlsZSBzaXplIG1hbnVhbGx5XG4vLyBhbmQgYWRkIGl0IGFzIGtub3duTGVuZ3RoIG9wdGlvblxuRm9ybURhdGEucHJvdG90eXBlLmdldExlbmd0aFN5bmMgPSBmdW5jdGlvbigpIHtcbiAgdmFyIGtub3duTGVuZ3RoID0gdGhpcy5fb3ZlcmhlYWRMZW5ndGggKyB0aGlzLl92YWx1ZUxlbmd0aDtcblxuICAvLyBEb24ndCBnZXQgY29uZnVzZWQsIHRoZXJlIGFyZSAzIFwiaW50ZXJuYWxcIiBzdHJlYW1zIGZvciBlYWNoIGtleXZhbCBwYWlyXG4gIC8vIHNvIGl0IGJhc2ljYWxseSBjaGVja3MgaWYgdGhlcmUgaXMgYW55IHZhbHVlIGFkZGVkIHRvIHRoZSBmb3JtXG4gIGlmICh0aGlzLl9zdHJlYW1zLmxlbmd0aCkge1xuICAgIGtub3duTGVuZ3RoICs9IHRoaXMuX2xhc3RCb3VuZGFyeSgpLmxlbmd0aDtcbiAgfVxuXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mb3JtLWRhdGEvZm9ybS1kYXRhL2lzc3Vlcy80MFxuICBpZiAoIXRoaXMuaGFzS25vd25MZW5ndGgoKSkge1xuICAgIC8vIFNvbWUgYXN5bmMgbGVuZ3RoIHJldHJpZXZlcnMgYXJlIHByZXNlbnRcbiAgICAvLyB0aGVyZWZvcmUgc3luY2hyb25vdXMgbGVuZ3RoIGNhbGN1bGF0aW9uIGlzIGZhbHNlLlxuICAgIC8vIFBsZWFzZSB1c2UgZ2V0TGVuZ3RoKGNhbGxiYWNrKSB0byBnZXQgcHJvcGVyIGxlbmd0aFxuICAgIHRoaXMuX2Vycm9yKG5ldyBFcnJvcignQ2Fubm90IGNhbGN1bGF0ZSBwcm9wZXIgbGVuZ3RoIGluIHN5bmNocm9ub3VzIHdheS4nKSk7XG4gIH1cblxuICByZXR1cm4ga25vd25MZW5ndGg7XG59O1xuXG4vLyBQdWJsaWMgQVBJIHRvIGNoZWNrIGlmIGxlbmd0aCBvZiBhZGRlZCB2YWx1ZXMgaXMga25vd25cbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mb3JtLWRhdGEvZm9ybS1kYXRhL2lzc3Vlcy8xOTZcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9mb3JtLWRhdGEvZm9ybS1kYXRhL2lzc3Vlcy8yNjJcbkZvcm1EYXRhLnByb3RvdHlwZS5oYXNLbm93bkxlbmd0aCA9IGZ1bmN0aW9uKCkge1xuICB2YXIgaGFzS25vd25MZW5ndGggPSB0cnVlO1xuXG4gIGlmICh0aGlzLl92YWx1ZXNUb01lYXN1cmUubGVuZ3RoKSB7XG4gICAgaGFzS25vd25MZW5ndGggPSBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiBoYXNLbm93bkxlbmd0aDtcbn07XG5cbkZvcm1EYXRhLnByb3RvdHlwZS5nZXRMZW5ndGggPSBmdW5jdGlvbihjYikge1xuICB2YXIga25vd25MZW5ndGggPSB0aGlzLl9vdmVyaGVhZExlbmd0aCArIHRoaXMuX3ZhbHVlTGVuZ3RoO1xuXG4gIGlmICh0aGlzLl9zdHJlYW1zLmxlbmd0aCkge1xuICAgIGtub3duTGVuZ3RoICs9IHRoaXMuX2xhc3RCb3VuZGFyeSgpLmxlbmd0aDtcbiAgfVxuXG4gIGlmICghdGhpcy5fdmFsdWVzVG9NZWFzdXJlLmxlbmd0aCkge1xuICAgIHByb2Nlc3MubmV4dFRpY2soY2IuYmluZCh0aGlzLCBudWxsLCBrbm93bkxlbmd0aCkpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGFzeW5ja2l0LnBhcmFsbGVsKHRoaXMuX3ZhbHVlc1RvTWVhc3VyZSwgdGhpcy5fbGVuZ3RoUmV0cmlldmVyLCBmdW5jdGlvbihlcnIsIHZhbHVlcykge1xuICAgIGlmIChlcnIpIHtcbiAgICAgIGNiKGVycik7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdmFsdWVzLmZvckVhY2goZnVuY3Rpb24obGVuZ3RoKSB7XG4gICAgICBrbm93bkxlbmd0aCArPSBsZW5ndGg7XG4gICAgfSk7XG5cbiAgICBjYihudWxsLCBrbm93bkxlbmd0aCk7XG4gIH0pO1xufTtcblxuRm9ybURhdGEucHJvdG90eXBlLnN1Ym1pdCA9IGZ1bmN0aW9uKHBhcmFtcywgY2IpIHtcbiAgdmFyIHJlcXVlc3RcbiAgICAsIG9wdGlvbnNcbiAgICAsIGRlZmF1bHRzID0ge21ldGhvZDogJ3Bvc3QnfVxuICAgIDtcblxuICAvLyBwYXJzZSBwcm92aWRlZCB1cmwgaWYgaXQncyBzdHJpbmdcbiAgLy8gb3IgdHJlYXQgaXQgYXMgb3B0aW9ucyBvYmplY3RcbiAgaWYgKHR5cGVvZiBwYXJhbXMgPT0gJ3N0cmluZycpIHtcblxuICAgIHBhcmFtcyA9IHBhcnNlVXJsKHBhcmFtcyk7XG4gICAgb3B0aW9ucyA9IHBvcHVsYXRlKHtcbiAgICAgIHBvcnQ6IHBhcmFtcy5wb3J0LFxuICAgICAgcGF0aDogcGFyYW1zLnBhdGhuYW1lLFxuICAgICAgaG9zdDogcGFyYW1zLmhvc3RuYW1lLFxuICAgICAgcHJvdG9jb2w6IHBhcmFtcy5wcm90b2NvbFxuICAgIH0sIGRlZmF1bHRzKTtcblxuICAvLyB1c2UgY3VzdG9tIHBhcmFtc1xuICB9IGVsc2Uge1xuXG4gICAgb3B0aW9ucyA9IHBvcHVsYXRlKHBhcmFtcywgZGVmYXVsdHMpO1xuICAgIC8vIGlmIG5vIHBvcnQgcHJvdmlkZWQgdXNlIGRlZmF1bHQgb25lXG4gICAgaWYgKCFvcHRpb25zLnBvcnQpIHtcbiAgICAgIG9wdGlvbnMucG9ydCA9IG9wdGlvbnMucHJvdG9jb2wgPT0gJ2h0dHBzOicgPyA0NDMgOiA4MDtcbiAgICB9XG4gIH1cblxuICAvLyBwdXQgdGhhdCBnb29kIGNvZGUgaW4gZ2V0SGVhZGVycyB0byBzb21lIHVzZVxuICBvcHRpb25zLmhlYWRlcnMgPSB0aGlzLmdldEhlYWRlcnMocGFyYW1zLmhlYWRlcnMpO1xuXG4gIC8vIGh0dHBzIGlmIHNwZWNpZmllZCwgZmFsbGJhY2sgdG8gaHR0cCBpbiBhbnkgb3RoZXIgY2FzZVxuICBpZiAob3B0aW9ucy5wcm90b2NvbCA9PSAnaHR0cHM6Jykge1xuICAgIHJlcXVlc3QgPSBodHRwcy5yZXF1ZXN0KG9wdGlvbnMpO1xuICB9IGVsc2Uge1xuICAgIHJlcXVlc3QgPSBodHRwLnJlcXVlc3Qob3B0aW9ucyk7XG4gIH1cblxuICAvLyBnZXQgY29udGVudCBsZW5ndGggYW5kIGZpcmUgYXdheVxuICB0aGlzLmdldExlbmd0aChmdW5jdGlvbihlcnIsIGxlbmd0aCkge1xuICAgIGlmIChlcnIgJiYgZXJyICE9PSAnVW5rbm93biBzdHJlYW0nKSB7XG4gICAgICB0aGlzLl9lcnJvcihlcnIpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIGFkZCBjb250ZW50IGxlbmd0aFxuICAgIGlmIChsZW5ndGgpIHtcbiAgICAgIHJlcXVlc3Quc2V0SGVhZGVyKCdDb250ZW50LUxlbmd0aCcsIGxlbmd0aCk7XG4gICAgfVxuXG4gICAgdGhpcy5waXBlKHJlcXVlc3QpO1xuICAgIGlmIChjYikge1xuICAgICAgdmFyIG9uUmVzcG9uc2U7XG5cbiAgICAgIHZhciBjYWxsYmFjayA9IGZ1bmN0aW9uIChlcnJvciwgcmVzcG9uY2UpIHtcbiAgICAgICAgcmVxdWVzdC5yZW1vdmVMaXN0ZW5lcignZXJyb3InLCBjYWxsYmFjayk7XG4gICAgICAgIHJlcXVlc3QucmVtb3ZlTGlzdGVuZXIoJ3Jlc3BvbnNlJywgb25SZXNwb25zZSk7XG5cbiAgICAgICAgcmV0dXJuIGNiLmNhbGwodGhpcywgZXJyb3IsIHJlc3BvbmNlKTtcbiAgICAgIH07XG5cbiAgICAgIG9uUmVzcG9uc2UgPSBjYWxsYmFjay5iaW5kKHRoaXMsIG51bGwpO1xuXG4gICAgICByZXF1ZXN0Lm9uKCdlcnJvcicsIGNhbGxiYWNrKTtcbiAgICAgIHJlcXVlc3Qub24oJ3Jlc3BvbnNlJywgb25SZXNwb25zZSk7XG4gICAgfVxuICB9LmJpbmQodGhpcykpO1xuXG4gIHJldHVybiByZXF1ZXN0O1xufTtcblxuRm9ybURhdGEucHJvdG90eXBlLl9lcnJvciA9IGZ1bmN0aW9uKGVycikge1xuICBpZiAoIXRoaXMuZXJyb3IpIHtcbiAgICB0aGlzLmVycm9yID0gZXJyO1xuICAgIHRoaXMucGF1c2UoKTtcbiAgICB0aGlzLmVtaXQoJ2Vycm9yJywgZXJyKTtcbiAgfVxufTtcblxuRm9ybURhdGEucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gJ1tvYmplY3QgRm9ybURhdGFdJztcbn07XG5zZXRUb1N0cmluZ1RhZyhGb3JtRGF0YSwgJ0Zvcm1EYXRhJyk7XG4iLCAiaW1wb3J0IEZvcm1EYXRhIGZyb20gJ2Zvcm0tZGF0YSc7XG5cbmV4cG9ydCBkZWZhdWx0IEZvcm1EYXRhO1xuIiwgIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IHV0aWxzIGZyb20gJy4uL3V0aWxzLmpzJztcbmltcG9ydCBBeGlvc0Vycm9yIGZyb20gJy4uL2NvcmUvQXhpb3NFcnJvci5qcyc7XG4vLyB0ZW1wb3JhcnkgaG90Zml4IHRvIGF2b2lkIGNpcmN1bGFyIHJlZmVyZW5jZXMgdW50aWwgQXhpb3NVUkxTZWFyY2hQYXJhbXMgaXMgcmVmYWN0b3JlZFxuaW1wb3J0IFBsYXRmb3JtRm9ybURhdGEgZnJvbSAnLi4vcGxhdGZvcm0vbm9kZS9jbGFzc2VzL0Zvcm1EYXRhLmpzJztcblxuLyoqXG4gKiBEZXRlcm1pbmVzIGlmIHRoZSBnaXZlbiB0aGluZyBpcyBhIGFycmF5IG9yIGpzIG9iamVjdC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gdGhpbmcgLSBUaGUgb2JqZWN0IG9yIGFycmF5IHRvIGJlIHZpc2l0ZWQuXG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIGlzVmlzaXRhYmxlKHRoaW5nKSB7XG4gIHJldHVybiB1dGlscy5pc1BsYWluT2JqZWN0KHRoaW5nKSB8fCB1dGlscy5pc0FycmF5KHRoaW5nKTtcbn1cblxuLyoqXG4gKiBJdCByZW1vdmVzIHRoZSBicmFja2V0cyBmcm9tIHRoZSBlbmQgb2YgYSBzdHJpbmdcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5IC0gVGhlIGtleSBvZiB0aGUgcGFyYW1ldGVyLlxuICpcbiAqIEByZXR1cm5zIHtzdHJpbmd9IHRoZSBrZXkgd2l0aG91dCB0aGUgYnJhY2tldHMuXG4gKi9cbmZ1bmN0aW9uIHJlbW92ZUJyYWNrZXRzKGtleSkge1xuICByZXR1cm4gdXRpbHMuZW5kc1dpdGgoa2V5LCAnW10nKSA/IGtleS5zbGljZSgwLCAtMikgOiBrZXk7XG59XG5cbi8qKlxuICogSXQgdGFrZXMgYSBwYXRoLCBhIGtleSwgYW5kIGEgYm9vbGVhbiwgYW5kIHJldHVybnMgYSBzdHJpbmdcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gcGF0aCAtIFRoZSBwYXRoIHRvIHRoZSBjdXJyZW50IGtleS5cbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXkgLSBUaGUga2V5IG9mIHRoZSBjdXJyZW50IG9iamVjdCBiZWluZyBpdGVyYXRlZCBvdmVyLlxuICogQHBhcmFtIHtzdHJpbmd9IGRvdHMgLSBJZiB0cnVlLCB0aGUga2V5IHdpbGwgYmUgcmVuZGVyZWQgd2l0aCBkb3RzIGluc3RlYWQgb2YgYnJhY2tldHMuXG4gKlxuICogQHJldHVybnMge3N0cmluZ30gVGhlIHBhdGggdG8gdGhlIGN1cnJlbnQga2V5LlxuICovXG5mdW5jdGlvbiByZW5kZXJLZXkocGF0aCwga2V5LCBkb3RzKSB7XG4gIGlmICghcGF0aCkgcmV0dXJuIGtleTtcbiAgcmV0dXJuIHBhdGguY29uY2F0KGtleSkubWFwKGZ1bmN0aW9uIGVhY2godG9rZW4sIGkpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cbiAgICB0b2tlbiA9IHJlbW92ZUJyYWNrZXRzKHRva2VuKTtcbiAgICByZXR1cm4gIWRvdHMgJiYgaSA/ICdbJyArIHRva2VuICsgJ10nIDogdG9rZW47XG4gIH0pLmpvaW4oZG90cyA/ICcuJyA6ICcnKTtcbn1cblxuLyoqXG4gKiBJZiB0aGUgYXJyYXkgaXMgYW4gYXJyYXkgYW5kIG5vbmUgb2YgaXRzIGVsZW1lbnRzIGFyZSB2aXNpdGFibGUsIHRoZW4gaXQncyBhIGZsYXQgYXJyYXkuXG4gKlxuICogQHBhcmFtIHtBcnJheTxhbnk+fSBhcnIgLSBUaGUgYXJyYXkgdG8gY2hlY2tcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuZnVuY3Rpb24gaXNGbGF0QXJyYXkoYXJyKSB7XG4gIHJldHVybiB1dGlscy5pc0FycmF5KGFycikgJiYgIWFyci5zb21lKGlzVmlzaXRhYmxlKTtcbn1cblxuY29uc3QgcHJlZGljYXRlcyA9IHV0aWxzLnRvRmxhdE9iamVjdCh1dGlscywge30sIG51bGwsIGZ1bmN0aW9uIGZpbHRlcihwcm9wKSB7XG4gIHJldHVybiAvXmlzW0EtWl0vLnRlc3QocHJvcCk7XG59KTtcblxuLyoqXG4gKiBDb252ZXJ0IGEgZGF0YSBvYmplY3QgdG8gRm9ybURhdGFcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gb2JqXG4gKiBAcGFyYW0gez9PYmplY3R9IFtmb3JtRGF0YV1cbiAqIEBwYXJhbSB7P09iamVjdH0gW29wdGlvbnNdXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBbb3B0aW9ucy52aXNpdG9yXVxuICogQHBhcmFtIHtCb29sZWFufSBbb3B0aW9ucy5tZXRhVG9rZW5zID0gdHJ1ZV1cbiAqIEBwYXJhbSB7Qm9vbGVhbn0gW29wdGlvbnMuZG90cyA9IGZhbHNlXVxuICogQHBhcmFtIHs/Qm9vbGVhbn0gW29wdGlvbnMuaW5kZXhlcyA9IGZhbHNlXVxuICpcbiAqIEByZXR1cm5zIHtPYmplY3R9XG4gKiovXG5cbi8qKlxuICogSXQgY29udmVydHMgYW4gb2JqZWN0IGludG8gYSBGb3JtRGF0YSBvYmplY3RcbiAqXG4gKiBAcGFyYW0ge09iamVjdDxhbnksIGFueT59IG9iaiAtIFRoZSBvYmplY3QgdG8gY29udmVydCB0byBmb3JtIGRhdGEuXG4gKiBAcGFyYW0ge3N0cmluZ30gZm9ybURhdGEgLSBUaGUgRm9ybURhdGEgb2JqZWN0IHRvIGFwcGVuZCB0by5cbiAqIEBwYXJhbSB7T2JqZWN0PHN0cmluZywgYW55Pn0gb3B0aW9uc1xuICpcbiAqIEByZXR1cm5zXG4gKi9cbmZ1bmN0aW9uIHRvRm9ybURhdGEob2JqLCBmb3JtRGF0YSwgb3B0aW9ucykge1xuICBpZiAoIXV0aWxzLmlzT2JqZWN0KG9iaikpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCd0YXJnZXQgbXVzdCBiZSBhbiBvYmplY3QnKTtcbiAgfVxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICBmb3JtRGF0YSA9IGZvcm1EYXRhIHx8IG5ldyAoUGxhdGZvcm1Gb3JtRGF0YSB8fCBGb3JtRGF0YSkoKTtcblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cbiAgb3B0aW9ucyA9IHV0aWxzLnRvRmxhdE9iamVjdChvcHRpb25zLCB7XG4gICAgbWV0YVRva2VuczogdHJ1ZSxcbiAgICBkb3RzOiBmYWxzZSxcbiAgICBpbmRleGVzOiBmYWxzZVxuICB9LCBmYWxzZSwgZnVuY3Rpb24gZGVmaW5lZChvcHRpb24sIHNvdXJjZSkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1lcS1udWxsLGVxZXFlcVxuICAgIHJldHVybiAhdXRpbHMuaXNVbmRlZmluZWQoc291cmNlW29wdGlvbl0pO1xuICB9KTtcblxuICBjb25zdCBtZXRhVG9rZW5zID0gb3B0aW9ucy5tZXRhVG9rZW5zO1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdXNlLWJlZm9yZS1kZWZpbmVcbiAgY29uc3QgdmlzaXRvciA9IG9wdGlvbnMudmlzaXRvciB8fCBkZWZhdWx0VmlzaXRvcjtcbiAgY29uc3QgZG90cyA9IG9wdGlvbnMuZG90cztcbiAgY29uc3QgaW5kZXhlcyA9IG9wdGlvbnMuaW5kZXhlcztcbiAgY29uc3QgX0Jsb2IgPSBvcHRpb25zLkJsb2IgfHwgdHlwZW9mIEJsb2IgIT09ICd1bmRlZmluZWQnICYmIEJsb2I7XG4gIGNvbnN0IHVzZUJsb2IgPSBfQmxvYiAmJiB1dGlscy5pc1NwZWNDb21wbGlhbnRGb3JtKGZvcm1EYXRhKTtcblxuICBpZiAoIXV0aWxzLmlzRnVuY3Rpb24odmlzaXRvcikpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCd2aXNpdG9yIG11c3QgYmUgYSBmdW5jdGlvbicpO1xuICB9XG5cbiAgZnVuY3Rpb24gY29udmVydFZhbHVlKHZhbHVlKSB7XG4gICAgaWYgKHZhbHVlID09PSBudWxsKSByZXR1cm4gJyc7XG5cbiAgICBpZiAodXRpbHMuaXNEYXRlKHZhbHVlKSkge1xuICAgICAgcmV0dXJuIHZhbHVlLnRvSVNPU3RyaW5nKCk7XG4gICAgfVxuXG4gICAgaWYgKCF1c2VCbG9iICYmIHV0aWxzLmlzQmxvYih2YWx1ZSkpIHtcbiAgICAgIHRocm93IG5ldyBBeGlvc0Vycm9yKCdCbG9iIGlzIG5vdCBzdXBwb3J0ZWQuIFVzZSBhIEJ1ZmZlciBpbnN0ZWFkLicpO1xuICAgIH1cblxuICAgIGlmICh1dGlscy5pc0FycmF5QnVmZmVyKHZhbHVlKSB8fCB1dGlscy5pc1R5cGVkQXJyYXkodmFsdWUpKSB7XG4gICAgICByZXR1cm4gdXNlQmxvYiAmJiB0eXBlb2YgQmxvYiA9PT0gJ2Z1bmN0aW9uJyA/IG5ldyBCbG9iKFt2YWx1ZV0pIDogQnVmZmVyLmZyb20odmFsdWUpO1xuICAgIH1cblxuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWZhdWx0IHZpc2l0b3IuXG4gICAqXG4gICAqIEBwYXJhbSB7Kn0gdmFsdWVcbiAgICogQHBhcmFtIHtTdHJpbmd8TnVtYmVyfSBrZXlcbiAgICogQHBhcmFtIHtBcnJheTxTdHJpbmd8TnVtYmVyPn0gcGF0aFxuICAgKiBAdGhpcyB7Rm9ybURhdGF9XG4gICAqXG4gICAqIEByZXR1cm5zIHtib29sZWFufSByZXR1cm4gdHJ1ZSB0byB2aXNpdCB0aGUgZWFjaCBwcm9wIG9mIHRoZSB2YWx1ZSByZWN1cnNpdmVseVxuICAgKi9cbiAgZnVuY3Rpb24gZGVmYXVsdFZpc2l0b3IodmFsdWUsIGtleSwgcGF0aCkge1xuICAgIGxldCBhcnIgPSB2YWx1ZTtcblxuICAgIGlmICh2YWx1ZSAmJiAhcGF0aCAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnKSB7XG4gICAgICBpZiAodXRpbHMuZW5kc1dpdGgoa2V5LCAne30nKSkge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cbiAgICAgICAga2V5ID0gbWV0YVRva2VucyA/IGtleSA6IGtleS5zbGljZSgwLCAtMik7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICAgICAgICB2YWx1ZSA9IEpTT04uc3RyaW5naWZ5KHZhbHVlKTtcbiAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICh1dGlscy5pc0FycmF5KHZhbHVlKSAmJiBpc0ZsYXRBcnJheSh2YWx1ZSkpIHx8XG4gICAgICAgICgodXRpbHMuaXNGaWxlTGlzdCh2YWx1ZSkgfHwgdXRpbHMuZW5kc1dpdGgoa2V5LCAnW10nKSkgJiYgKGFyciA9IHV0aWxzLnRvQXJyYXkodmFsdWUpKVxuICAgICAgICApKSB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICAgICAgICBrZXkgPSByZW1vdmVCcmFja2V0cyhrZXkpO1xuXG4gICAgICAgIGFyci5mb3JFYWNoKGZ1bmN0aW9uIGVhY2goZWwsIGluZGV4KSB7XG4gICAgICAgICAgISh1dGlscy5pc1VuZGVmaW5lZChlbCkgfHwgZWwgPT09IG51bGwpICYmIGZvcm1EYXRhLmFwcGVuZChcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1uZXN0ZWQtdGVybmFyeVxuICAgICAgICAgICAgaW5kZXhlcyA9PT0gdHJ1ZSA/IHJlbmRlcktleShba2V5XSwgaW5kZXgsIGRvdHMpIDogKGluZGV4ZXMgPT09IG51bGwgPyBrZXkgOiBrZXkgKyAnW10nKSxcbiAgICAgICAgICAgIGNvbnZlcnRWYWx1ZShlbClcbiAgICAgICAgICApO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChpc1Zpc2l0YWJsZSh2YWx1ZSkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGZvcm1EYXRhLmFwcGVuZChyZW5kZXJLZXkocGF0aCwga2V5LCBkb3RzKSwgY29udmVydFZhbHVlKHZhbHVlKSk7XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBjb25zdCBzdGFjayA9IFtdO1xuXG4gIGNvbnN0IGV4cG9zZWRIZWxwZXJzID0gT2JqZWN0LmFzc2lnbihwcmVkaWNhdGVzLCB7XG4gICAgZGVmYXVsdFZpc2l0b3IsXG4gICAgY29udmVydFZhbHVlLFxuICAgIGlzVmlzaXRhYmxlXG4gIH0pO1xuXG4gIGZ1bmN0aW9uIGJ1aWxkKHZhbHVlLCBwYXRoKSB7XG4gICAgaWYgKHV0aWxzLmlzVW5kZWZpbmVkKHZhbHVlKSkgcmV0dXJuO1xuXG4gICAgaWYgKHN0YWNrLmluZGV4T2YodmFsdWUpICE9PSAtMSkge1xuICAgICAgdGhyb3cgRXJyb3IoJ0NpcmN1bGFyIHJlZmVyZW5jZSBkZXRlY3RlZCBpbiAnICsgcGF0aC5qb2luKCcuJykpO1xuICAgIH1cblxuICAgIHN0YWNrLnB1c2godmFsdWUpO1xuXG4gICAgdXRpbHMuZm9yRWFjaCh2YWx1ZSwgZnVuY3Rpb24gZWFjaChlbCwga2V5KSB7XG4gICAgICBjb25zdCByZXN1bHQgPSAhKHV0aWxzLmlzVW5kZWZpbmVkKGVsKSB8fCBlbCA9PT0gbnVsbCkgJiYgdmlzaXRvci5jYWxsKFxuICAgICAgICBmb3JtRGF0YSwgZWwsIHV0aWxzLmlzU3RyaW5nKGtleSkgPyBrZXkudHJpbSgpIDoga2V5LCBwYXRoLCBleHBvc2VkSGVscGVyc1xuICAgICAgKTtcblxuICAgICAgaWYgKHJlc3VsdCA9PT0gdHJ1ZSkge1xuICAgICAgICBidWlsZChlbCwgcGF0aCA/IHBhdGguY29uY2F0KGtleSkgOiBba2V5XSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBzdGFjay5wb3AoKTtcbiAgfVxuXG4gIGlmICghdXRpbHMuaXNPYmplY3Qob2JqKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2RhdGEgbXVzdCBiZSBhbiBvYmplY3QnKTtcbiAgfVxuXG4gIGJ1aWxkKG9iaik7XG5cbiAgcmV0dXJuIGZvcm1EYXRhO1xufVxuXG5leHBvcnQgZGVmYXVsdCB0b0Zvcm1EYXRhO1xuIiwgIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IHRvRm9ybURhdGEgZnJvbSAnLi90b0Zvcm1EYXRhLmpzJztcblxuLyoqXG4gKiBJdCBlbmNvZGVzIGEgc3RyaW5nIGJ5IHJlcGxhY2luZyBhbGwgY2hhcmFjdGVycyB0aGF0IGFyZSBub3QgaW4gdGhlIHVucmVzZXJ2ZWQgc2V0IHdpdGhcbiAqIHRoZWlyIHBlcmNlbnQtZW5jb2RlZCBlcXVpdmFsZW50c1xuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBzdHIgLSBUaGUgc3RyaW5nIHRvIGVuY29kZS5cbiAqXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgZW5jb2RlZCBzdHJpbmcuXG4gKi9cbmZ1bmN0aW9uIGVuY29kZShzdHIpIHtcbiAgY29uc3QgY2hhck1hcCA9IHtcbiAgICAnISc6ICclMjEnLFxuICAgIFwiJ1wiOiAnJTI3JyxcbiAgICAnKCc6ICclMjgnLFxuICAgICcpJzogJyUyOScsXG4gICAgJ34nOiAnJTdFJyxcbiAgICAnJTIwJzogJysnLFxuICAgICclMDAnOiAnXFx4MDAnXG4gIH07XG4gIHJldHVybiBlbmNvZGVVUklDb21wb25lbnQoc3RyKS5yZXBsYWNlKC9bIScoKX5dfCUyMHwlMDAvZywgZnVuY3Rpb24gcmVwbGFjZXIobWF0Y2gpIHtcbiAgICByZXR1cm4gY2hhck1hcFttYXRjaF07XG4gIH0pO1xufVxuXG4vKipcbiAqIEl0IHRha2VzIGEgcGFyYW1zIG9iamVjdCBhbmQgY29udmVydHMgaXQgdG8gYSBGb3JtRGF0YSBvYmplY3RcbiAqXG4gKiBAcGFyYW0ge09iamVjdDxzdHJpbmcsIGFueT59IHBhcmFtcyAtIFRoZSBwYXJhbWV0ZXJzIHRvIGJlIGNvbnZlcnRlZCB0byBhIEZvcm1EYXRhIG9iamVjdC5cbiAqIEBwYXJhbSB7T2JqZWN0PHN0cmluZywgYW55Pn0gb3B0aW9ucyAtIFRoZSBvcHRpb25zIG9iamVjdCBwYXNzZWQgdG8gdGhlIEF4aW9zIGNvbnN0cnVjdG9yLlxuICpcbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5mdW5jdGlvbiBBeGlvc1VSTFNlYXJjaFBhcmFtcyhwYXJhbXMsIG9wdGlvbnMpIHtcbiAgdGhpcy5fcGFpcnMgPSBbXTtcblxuICBwYXJhbXMgJiYgdG9Gb3JtRGF0YShwYXJhbXMsIHRoaXMsIG9wdGlvbnMpO1xufVxuXG5jb25zdCBwcm90b3R5cGUgPSBBeGlvc1VSTFNlYXJjaFBhcmFtcy5wcm90b3R5cGU7XG5cbnByb3RvdHlwZS5hcHBlbmQgPSBmdW5jdGlvbiBhcHBlbmQobmFtZSwgdmFsdWUpIHtcbiAgdGhpcy5fcGFpcnMucHVzaChbbmFtZSwgdmFsdWVdKTtcbn07XG5cbnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uIHRvU3RyaW5nKGVuY29kZXIpIHtcbiAgY29uc3QgX2VuY29kZSA9IGVuY29kZXIgPyBmdW5jdGlvbih2YWx1ZSkge1xuICAgIHJldHVybiBlbmNvZGVyLmNhbGwodGhpcywgdmFsdWUsIGVuY29kZSk7XG4gIH0gOiBlbmNvZGU7XG5cbiAgcmV0dXJuIHRoaXMuX3BhaXJzLm1hcChmdW5jdGlvbiBlYWNoKHBhaXIpIHtcbiAgICByZXR1cm4gX2VuY29kZShwYWlyWzBdKSArICc9JyArIF9lbmNvZGUocGFpclsxXSk7XG4gIH0sICcnKS5qb2luKCcmJyk7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBBeGlvc1VSTFNlYXJjaFBhcmFtcztcbiIsICIndXNlIHN0cmljdCc7XG5cbmltcG9ydCB1dGlscyBmcm9tICcuLi91dGlscy5qcyc7XG5pbXBvcnQgQXhpb3NVUkxTZWFyY2hQYXJhbXMgZnJvbSAnLi4vaGVscGVycy9BeGlvc1VSTFNlYXJjaFBhcmFtcy5qcyc7XG5cbi8qKlxuICogSXQgcmVwbGFjZXMgYWxsIGluc3RhbmNlcyBvZiB0aGUgY2hhcmFjdGVycyBgOmAsIGAkYCwgYCxgLCBgK2AsIGBbYCwgYW5kIGBdYCB3aXRoIHRoZWlyXG4gKiBVUkkgZW5jb2RlZCBjb3VudGVycGFydHNcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsIFRoZSB2YWx1ZSB0byBiZSBlbmNvZGVkLlxuICpcbiAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBlbmNvZGVkIHZhbHVlLlxuICovXG5mdW5jdGlvbiBlbmNvZGUodmFsKSB7XG4gIHJldHVybiBlbmNvZGVVUklDb21wb25lbnQodmFsKS5cbiAgICByZXBsYWNlKC8lM0EvZ2ksICc6JykuXG4gICAgcmVwbGFjZSgvJTI0L2csICckJykuXG4gICAgcmVwbGFjZSgvJTJDL2dpLCAnLCcpLlxuICAgIHJlcGxhY2UoLyUyMC9nLCAnKycpLlxuICAgIHJlcGxhY2UoLyU1Qi9naSwgJ1snKS5cbiAgICByZXBsYWNlKC8lNUQvZ2ksICddJyk7XG59XG5cbi8qKlxuICogQnVpbGQgYSBVUkwgYnkgYXBwZW5kaW5nIHBhcmFtcyB0byB0aGUgZW5kXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IHVybCBUaGUgYmFzZSBvZiB0aGUgdXJsIChlLmcuLCBodHRwOi8vd3d3Lmdvb2dsZS5jb20pXG4gKiBAcGFyYW0ge29iamVjdH0gW3BhcmFtc10gVGhlIHBhcmFtcyB0byBiZSBhcHBlbmRlZFxuICogQHBhcmFtIHs/KG9iamVjdHxGdW5jdGlvbil9IG9wdGlvbnNcbiAqXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgZm9ybWF0dGVkIHVybFxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBidWlsZFVSTCh1cmwsIHBhcmFtcywgb3B0aW9ucykge1xuICAvKmVzbGludCBuby1wYXJhbS1yZWFzc2lnbjowKi9cbiAgaWYgKCFwYXJhbXMpIHtcbiAgICByZXR1cm4gdXJsO1xuICB9XG4gIFxuICBjb25zdCBfZW5jb2RlID0gb3B0aW9ucyAmJiBvcHRpb25zLmVuY29kZSB8fCBlbmNvZGU7XG5cbiAgaWYgKHV0aWxzLmlzRnVuY3Rpb24ob3B0aW9ucykpIHtcbiAgICBvcHRpb25zID0ge1xuICAgICAgc2VyaWFsaXplOiBvcHRpb25zXG4gICAgfTtcbiAgfSBcblxuICBjb25zdCBzZXJpYWxpemVGbiA9IG9wdGlvbnMgJiYgb3B0aW9ucy5zZXJpYWxpemU7XG5cbiAgbGV0IHNlcmlhbGl6ZWRQYXJhbXM7XG5cbiAgaWYgKHNlcmlhbGl6ZUZuKSB7XG4gICAgc2VyaWFsaXplZFBhcmFtcyA9IHNlcmlhbGl6ZUZuKHBhcmFtcywgb3B0aW9ucyk7XG4gIH0gZWxzZSB7XG4gICAgc2VyaWFsaXplZFBhcmFtcyA9IHV0aWxzLmlzVVJMU2VhcmNoUGFyYW1zKHBhcmFtcykgP1xuICAgICAgcGFyYW1zLnRvU3RyaW5nKCkgOlxuICAgICAgbmV3IEF4aW9zVVJMU2VhcmNoUGFyYW1zKHBhcmFtcywgb3B0aW9ucykudG9TdHJpbmcoX2VuY29kZSk7XG4gIH1cblxuICBpZiAoc2VyaWFsaXplZFBhcmFtcykge1xuICAgIGNvbnN0IGhhc2htYXJrSW5kZXggPSB1cmwuaW5kZXhPZihcIiNcIik7XG5cbiAgICBpZiAoaGFzaG1hcmtJbmRleCAhPT0gLTEpIHtcbiAgICAgIHVybCA9IHVybC5zbGljZSgwLCBoYXNobWFya0luZGV4KTtcbiAgICB9XG4gICAgdXJsICs9ICh1cmwuaW5kZXhPZignPycpID09PSAtMSA/ICc/JyA6ICcmJykgKyBzZXJpYWxpemVkUGFyYW1zO1xuICB9XG5cbiAgcmV0dXJuIHVybDtcbn1cbiIsICIndXNlIHN0cmljdCc7XG5cbmltcG9ydCB1dGlscyBmcm9tICcuLy4uL3V0aWxzLmpzJztcblxuY2xhc3MgSW50ZXJjZXB0b3JNYW5hZ2VyIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5oYW5kbGVycyA9IFtdO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBhIG5ldyBpbnRlcmNlcHRvciB0byB0aGUgc3RhY2tcbiAgICpcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gZnVsZmlsbGVkIFRoZSBmdW5jdGlvbiB0byBoYW5kbGUgYHRoZW5gIGZvciBhIGBQcm9taXNlYFxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSByZWplY3RlZCBUaGUgZnVuY3Rpb24gdG8gaGFuZGxlIGByZWplY3RgIGZvciBhIGBQcm9taXNlYFxuICAgKlxuICAgKiBAcmV0dXJuIHtOdW1iZXJ9IEFuIElEIHVzZWQgdG8gcmVtb3ZlIGludGVyY2VwdG9yIGxhdGVyXG4gICAqL1xuICB1c2UoZnVsZmlsbGVkLCByZWplY3RlZCwgb3B0aW9ucykge1xuICAgIHRoaXMuaGFuZGxlcnMucHVzaCh7XG4gICAgICBmdWxmaWxsZWQsXG4gICAgICByZWplY3RlZCxcbiAgICAgIHN5bmNocm9ub3VzOiBvcHRpb25zID8gb3B0aW9ucy5zeW5jaHJvbm91cyA6IGZhbHNlLFxuICAgICAgcnVuV2hlbjogb3B0aW9ucyA/IG9wdGlvbnMucnVuV2hlbiA6IG51bGxcbiAgICB9KTtcbiAgICByZXR1cm4gdGhpcy5oYW5kbGVycy5sZW5ndGggLSAxO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZSBhbiBpbnRlcmNlcHRvciBmcm9tIHRoZSBzdGFja1xuICAgKlxuICAgKiBAcGFyYW0ge051bWJlcn0gaWQgVGhlIElEIHRoYXQgd2FzIHJldHVybmVkIGJ5IGB1c2VgXG4gICAqXG4gICAqIEByZXR1cm5zIHtCb29sZWFufSBgdHJ1ZWAgaWYgdGhlIGludGVyY2VwdG9yIHdhcyByZW1vdmVkLCBgZmFsc2VgIG90aGVyd2lzZVxuICAgKi9cbiAgZWplY3QoaWQpIHtcbiAgICBpZiAodGhpcy5oYW5kbGVyc1tpZF0pIHtcbiAgICAgIHRoaXMuaGFuZGxlcnNbaWRdID0gbnVsbDtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ2xlYXIgYWxsIGludGVyY2VwdG9ycyBmcm9tIHRoZSBzdGFja1xuICAgKlxuICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICovXG4gIGNsZWFyKCkge1xuICAgIGlmICh0aGlzLmhhbmRsZXJzKSB7XG4gICAgICB0aGlzLmhhbmRsZXJzID0gW107XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEl0ZXJhdGUgb3ZlciBhbGwgdGhlIHJlZ2lzdGVyZWQgaW50ZXJjZXB0b3JzXG4gICAqXG4gICAqIFRoaXMgbWV0aG9kIGlzIHBhcnRpY3VsYXJseSB1c2VmdWwgZm9yIHNraXBwaW5nIG92ZXIgYW55XG4gICAqIGludGVyY2VwdG9ycyB0aGF0IG1heSBoYXZlIGJlY29tZSBgbnVsbGAgY2FsbGluZyBgZWplY3RgLlxuICAgKlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiBUaGUgZnVuY3Rpb24gdG8gY2FsbCBmb3IgZWFjaCBpbnRlcmNlcHRvclxuICAgKlxuICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICovXG4gIGZvckVhY2goZm4pIHtcbiAgICB1dGlscy5mb3JFYWNoKHRoaXMuaGFuZGxlcnMsIGZ1bmN0aW9uIGZvckVhY2hIYW5kbGVyKGgpIHtcbiAgICAgIGlmIChoICE9PSBudWxsKSB7XG4gICAgICAgIGZuKGgpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IEludGVyY2VwdG9yTWFuYWdlcjtcbiIsICIndXNlIHN0cmljdCc7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgc2lsZW50SlNPTlBhcnNpbmc6IHRydWUsXG4gIGZvcmNlZEpTT05QYXJzaW5nOiB0cnVlLFxuICBjbGFyaWZ5VGltZW91dEVycm9yOiBmYWxzZVxufTtcbiIsICIndXNlIHN0cmljdCc7XG5cbmltcG9ydCB1cmwgZnJvbSAndXJsJztcbmV4cG9ydCBkZWZhdWx0IHVybC5VUkxTZWFyY2hQYXJhbXM7XG4iLCAiaW1wb3J0IGNyeXB0byBmcm9tICdjcnlwdG8nO1xuaW1wb3J0IFVSTFNlYXJjaFBhcmFtcyBmcm9tICcuL2NsYXNzZXMvVVJMU2VhcmNoUGFyYW1zLmpzJ1xuaW1wb3J0IEZvcm1EYXRhIGZyb20gJy4vY2xhc3Nlcy9Gb3JtRGF0YS5qcydcblxuY29uc3QgQUxQSEEgPSAnYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXonXG5cbmNvbnN0IERJR0lUID0gJzAxMjM0NTY3ODknO1xuXG5jb25zdCBBTFBIQUJFVCA9IHtcbiAgRElHSVQsXG4gIEFMUEhBLFxuICBBTFBIQV9ESUdJVDogQUxQSEEgKyBBTFBIQS50b1VwcGVyQ2FzZSgpICsgRElHSVRcbn1cblxuY29uc3QgZ2VuZXJhdGVTdHJpbmcgPSAoc2l6ZSA9IDE2LCBhbHBoYWJldCA9IEFMUEhBQkVULkFMUEhBX0RJR0lUKSA9PiB7XG4gIGxldCBzdHIgPSAnJztcbiAgY29uc3Qge2xlbmd0aH0gPSBhbHBoYWJldDtcbiAgY29uc3QgcmFuZG9tVmFsdWVzID0gbmV3IFVpbnQzMkFycmF5KHNpemUpO1xuICBjcnlwdG8ucmFuZG9tRmlsbFN5bmMocmFuZG9tVmFsdWVzKTtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBzaXplOyBpKyspIHtcbiAgICBzdHIgKz0gYWxwaGFiZXRbcmFuZG9tVmFsdWVzW2ldICUgbGVuZ3RoXTtcbiAgfVxuXG4gIHJldHVybiBzdHI7XG59XG5cblxuZXhwb3J0IGRlZmF1bHQge1xuICBpc05vZGU6IHRydWUsXG4gIGNsYXNzZXM6IHtcbiAgICBVUkxTZWFyY2hQYXJhbXMsXG4gICAgRm9ybURhdGEsXG4gICAgQmxvYjogdHlwZW9mIEJsb2IgIT09ICd1bmRlZmluZWQnICYmIEJsb2IgfHwgbnVsbFxuICB9LFxuICBBTFBIQUJFVCxcbiAgZ2VuZXJhdGVTdHJpbmcsXG4gIHByb3RvY29sczogWyAnaHR0cCcsICdodHRwcycsICdmaWxlJywgJ2RhdGEnIF1cbn07XG4iLCAiY29uc3QgaGFzQnJvd3NlckVudiA9IHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiBkb2N1bWVudCAhPT0gJ3VuZGVmaW5lZCc7XG5cbmNvbnN0IF9uYXZpZ2F0b3IgPSB0eXBlb2YgbmF2aWdhdG9yID09PSAnb2JqZWN0JyAmJiBuYXZpZ2F0b3IgfHwgdW5kZWZpbmVkO1xuXG4vKipcbiAqIERldGVybWluZSBpZiB3ZSdyZSBydW5uaW5nIGluIGEgc3RhbmRhcmQgYnJvd3NlciBlbnZpcm9ubWVudFxuICpcbiAqIFRoaXMgYWxsb3dzIGF4aW9zIHRvIHJ1biBpbiBhIHdlYiB3b3JrZXIsIGFuZCByZWFjdC1uYXRpdmUuXG4gKiBCb3RoIGVudmlyb25tZW50cyBzdXBwb3J0IFhNTEh0dHBSZXF1ZXN0LCBidXQgbm90IGZ1bGx5IHN0YW5kYXJkIGdsb2JhbHMuXG4gKlxuICogd2ViIHdvcmtlcnM6XG4gKiAgdHlwZW9mIHdpbmRvdyAtPiB1bmRlZmluZWRcbiAqICB0eXBlb2YgZG9jdW1lbnQgLT4gdW5kZWZpbmVkXG4gKlxuICogcmVhY3QtbmF0aXZlOlxuICogIG5hdmlnYXRvci5wcm9kdWN0IC0+ICdSZWFjdE5hdGl2ZSdcbiAqIG5hdGl2ZXNjcmlwdFxuICogIG5hdmlnYXRvci5wcm9kdWN0IC0+ICdOYXRpdmVTY3JpcHQnIG9yICdOUydcbiAqXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuY29uc3QgaGFzU3RhbmRhcmRCcm93c2VyRW52ID0gaGFzQnJvd3NlckVudiAmJlxuICAoIV9uYXZpZ2F0b3IgfHwgWydSZWFjdE5hdGl2ZScsICdOYXRpdmVTY3JpcHQnLCAnTlMnXS5pbmRleE9mKF9uYXZpZ2F0b3IucHJvZHVjdCkgPCAwKTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgd2UncmUgcnVubmluZyBpbiBhIHN0YW5kYXJkIGJyb3dzZXIgd2ViV29ya2VyIGVudmlyb25tZW50XG4gKlxuICogQWx0aG91Z2ggdGhlIGBpc1N0YW5kYXJkQnJvd3NlckVudmAgbWV0aG9kIGluZGljYXRlcyB0aGF0XG4gKiBgYWxsb3dzIGF4aW9zIHRvIHJ1biBpbiBhIHdlYiB3b3JrZXJgLCB0aGUgV2ViV29ya2VyIHdpbGwgc3RpbGwgYmVcbiAqIGZpbHRlcmVkIG91dCBkdWUgdG8gaXRzIGp1ZGdtZW50IHN0YW5kYXJkXG4gKiBgdHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIGRvY3VtZW50ICE9PSAndW5kZWZpbmVkJ2AuXG4gKiBUaGlzIGxlYWRzIHRvIGEgcHJvYmxlbSB3aGVuIGF4aW9zIHBvc3QgYEZvcm1EYXRhYCBpbiB3ZWJXb3JrZXJcbiAqL1xuY29uc3QgaGFzU3RhbmRhcmRCcm93c2VyV2ViV29ya2VyRW52ID0gKCgpID0+IHtcbiAgcmV0dXJuIChcbiAgICB0eXBlb2YgV29ya2VyR2xvYmFsU2NvcGUgIT09ICd1bmRlZmluZWQnICYmXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVuZGVmXG4gICAgc2VsZiBpbnN0YW5jZW9mIFdvcmtlckdsb2JhbFNjb3BlICYmXG4gICAgdHlwZW9mIHNlbGYuaW1wb3J0U2NyaXB0cyA9PT0gJ2Z1bmN0aW9uJ1xuICApO1xufSkoKTtcblxuY29uc3Qgb3JpZ2luID0gaGFzQnJvd3NlckVudiAmJiB3aW5kb3cubG9jYXRpb24uaHJlZiB8fCAnaHR0cDovL2xvY2FsaG9zdCc7XG5cbmV4cG9ydCB7XG4gIGhhc0Jyb3dzZXJFbnYsXG4gIGhhc1N0YW5kYXJkQnJvd3NlcldlYldvcmtlckVudixcbiAgaGFzU3RhbmRhcmRCcm93c2VyRW52LFxuICBfbmF2aWdhdG9yIGFzIG5hdmlnYXRvcixcbiAgb3JpZ2luXG59XG4iLCAiaW1wb3J0IHBsYXRmb3JtIGZyb20gJy4vbm9kZS9pbmRleC5qcyc7XG5pbXBvcnQgKiBhcyB1dGlscyBmcm9tICcuL2NvbW1vbi91dGlscy5qcyc7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgLi4udXRpbHMsXG4gIC4uLnBsYXRmb3JtXG59XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgdXRpbHMgZnJvbSAnLi4vdXRpbHMuanMnO1xuaW1wb3J0IHRvRm9ybURhdGEgZnJvbSAnLi90b0Zvcm1EYXRhLmpzJztcbmltcG9ydCBwbGF0Zm9ybSBmcm9tICcuLi9wbGF0Zm9ybS9pbmRleC5qcyc7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHRvVVJMRW5jb2RlZEZvcm0oZGF0YSwgb3B0aW9ucykge1xuICByZXR1cm4gdG9Gb3JtRGF0YShkYXRhLCBuZXcgcGxhdGZvcm0uY2xhc3Nlcy5VUkxTZWFyY2hQYXJhbXMoKSwgT2JqZWN0LmFzc2lnbih7XG4gICAgdmlzaXRvcjogZnVuY3Rpb24odmFsdWUsIGtleSwgcGF0aCwgaGVscGVycykge1xuICAgICAgaWYgKHBsYXRmb3JtLmlzTm9kZSAmJiB1dGlscy5pc0J1ZmZlcih2YWx1ZSkpIHtcbiAgICAgICAgdGhpcy5hcHBlbmQoa2V5LCB2YWx1ZS50b1N0cmluZygnYmFzZTY0JykpO1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBoZWxwZXJzLmRlZmF1bHRWaXNpdG9yLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgfVxuICB9LCBvcHRpb25zKSk7XG59XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgdXRpbHMgZnJvbSAnLi4vdXRpbHMuanMnO1xuXG4vKipcbiAqIEl0IHRha2VzIGEgc3RyaW5nIGxpa2UgYGZvb1t4XVt5XVt6XWAgYW5kIHJldHVybnMgYW4gYXJyYXkgbGlrZSBgWydmb28nLCAneCcsICd5JywgJ3onXVxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIC0gVGhlIG5hbWUgb2YgdGhlIHByb3BlcnR5IHRvIGdldC5cbiAqXG4gKiBAcmV0dXJucyBBbiBhcnJheSBvZiBzdHJpbmdzLlxuICovXG5mdW5jdGlvbiBwYXJzZVByb3BQYXRoKG5hbWUpIHtcbiAgLy8gZm9vW3hdW3ldW3pdXG4gIC8vIGZvby54LnkuelxuICAvLyBmb28teC15LXpcbiAgLy8gZm9vIHggeSB6XG4gIHJldHVybiB1dGlscy5tYXRjaEFsbCgvXFx3K3xcXFsoXFx3KildL2csIG5hbWUpLm1hcChtYXRjaCA9PiB7XG4gICAgcmV0dXJuIG1hdGNoWzBdID09PSAnW10nID8gJycgOiBtYXRjaFsxXSB8fCBtYXRjaFswXTtcbiAgfSk7XG59XG5cbi8qKlxuICogQ29udmVydCBhbiBhcnJheSB0byBhbiBvYmplY3QuXG4gKlxuICogQHBhcmFtIHtBcnJheTxhbnk+fSBhcnIgLSBUaGUgYXJyYXkgdG8gY29udmVydCB0byBhbiBvYmplY3QuXG4gKlxuICogQHJldHVybnMgQW4gb2JqZWN0IHdpdGggdGhlIHNhbWUga2V5cyBhbmQgdmFsdWVzIGFzIHRoZSBhcnJheS5cbiAqL1xuZnVuY3Rpb24gYXJyYXlUb09iamVjdChhcnIpIHtcbiAgY29uc3Qgb2JqID0ge307XG4gIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhhcnIpO1xuICBsZXQgaTtcbiAgY29uc3QgbGVuID0ga2V5cy5sZW5ndGg7XG4gIGxldCBrZXk7XG4gIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgIGtleSA9IGtleXNbaV07XG4gICAgb2JqW2tleV0gPSBhcnJba2V5XTtcbiAgfVxuICByZXR1cm4gb2JqO1xufVxuXG4vKipcbiAqIEl0IHRha2VzIGEgRm9ybURhdGEgb2JqZWN0IGFuZCByZXR1cm5zIGEgSmF2YVNjcmlwdCBvYmplY3RcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gZm9ybURhdGEgVGhlIEZvcm1EYXRhIG9iamVjdCB0byBjb252ZXJ0IHRvIEpTT04uXG4gKlxuICogQHJldHVybnMge09iamVjdDxzdHJpbmcsIGFueT4gfCBudWxsfSBUaGUgY29udmVydGVkIG9iamVjdC5cbiAqL1xuZnVuY3Rpb24gZm9ybURhdGFUb0pTT04oZm9ybURhdGEpIHtcbiAgZnVuY3Rpb24gYnVpbGRQYXRoKHBhdGgsIHZhbHVlLCB0YXJnZXQsIGluZGV4KSB7XG4gICAgbGV0IG5hbWUgPSBwYXRoW2luZGV4KytdO1xuXG4gICAgaWYgKG5hbWUgPT09ICdfX3Byb3RvX18nKSByZXR1cm4gdHJ1ZTtcblxuICAgIGNvbnN0IGlzTnVtZXJpY0tleSA9IE51bWJlci5pc0Zpbml0ZSgrbmFtZSk7XG4gICAgY29uc3QgaXNMYXN0ID0gaW5kZXggPj0gcGF0aC5sZW5ndGg7XG4gICAgbmFtZSA9ICFuYW1lICYmIHV0aWxzLmlzQXJyYXkodGFyZ2V0KSA/IHRhcmdldC5sZW5ndGggOiBuYW1lO1xuXG4gICAgaWYgKGlzTGFzdCkge1xuICAgICAgaWYgKHV0aWxzLmhhc093blByb3AodGFyZ2V0LCBuYW1lKSkge1xuICAgICAgICB0YXJnZXRbbmFtZV0gPSBbdGFyZ2V0W25hbWVdLCB2YWx1ZV07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0YXJnZXRbbmFtZV0gPSB2YWx1ZTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuICFpc051bWVyaWNLZXk7XG4gICAgfVxuXG4gICAgaWYgKCF0YXJnZXRbbmFtZV0gfHwgIXV0aWxzLmlzT2JqZWN0KHRhcmdldFtuYW1lXSkpIHtcbiAgICAgIHRhcmdldFtuYW1lXSA9IFtdO1xuICAgIH1cblxuICAgIGNvbnN0IHJlc3VsdCA9IGJ1aWxkUGF0aChwYXRoLCB2YWx1ZSwgdGFyZ2V0W25hbWVdLCBpbmRleCk7XG5cbiAgICBpZiAocmVzdWx0ICYmIHV0aWxzLmlzQXJyYXkodGFyZ2V0W25hbWVdKSkge1xuICAgICAgdGFyZ2V0W25hbWVdID0gYXJyYXlUb09iamVjdCh0YXJnZXRbbmFtZV0pO1xuICAgIH1cblxuICAgIHJldHVybiAhaXNOdW1lcmljS2V5O1xuICB9XG5cbiAgaWYgKHV0aWxzLmlzRm9ybURhdGEoZm9ybURhdGEpICYmIHV0aWxzLmlzRnVuY3Rpb24oZm9ybURhdGEuZW50cmllcykpIHtcbiAgICBjb25zdCBvYmogPSB7fTtcblxuICAgIHV0aWxzLmZvckVhY2hFbnRyeShmb3JtRGF0YSwgKG5hbWUsIHZhbHVlKSA9PiB7XG4gICAgICBidWlsZFBhdGgocGFyc2VQcm9wUGF0aChuYW1lKSwgdmFsdWUsIG9iaiwgMCk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gb2JqO1xuICB9XG5cbiAgcmV0dXJuIG51bGw7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZvcm1EYXRhVG9KU09OO1xuIiwgIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IHV0aWxzIGZyb20gJy4uL3V0aWxzLmpzJztcbmltcG9ydCBBeGlvc0Vycm9yIGZyb20gJy4uL2NvcmUvQXhpb3NFcnJvci5qcyc7XG5pbXBvcnQgdHJhbnNpdGlvbmFsRGVmYXVsdHMgZnJvbSAnLi90cmFuc2l0aW9uYWwuanMnO1xuaW1wb3J0IHRvRm9ybURhdGEgZnJvbSAnLi4vaGVscGVycy90b0Zvcm1EYXRhLmpzJztcbmltcG9ydCB0b1VSTEVuY29kZWRGb3JtIGZyb20gJy4uL2hlbHBlcnMvdG9VUkxFbmNvZGVkRm9ybS5qcyc7XG5pbXBvcnQgcGxhdGZvcm0gZnJvbSAnLi4vcGxhdGZvcm0vaW5kZXguanMnO1xuaW1wb3J0IGZvcm1EYXRhVG9KU09OIGZyb20gJy4uL2hlbHBlcnMvZm9ybURhdGFUb0pTT04uanMnO1xuXG4vKipcbiAqIEl0IHRha2VzIGEgc3RyaW5nLCB0cmllcyB0byBwYXJzZSBpdCwgYW5kIGlmIGl0IGZhaWxzLCBpdCByZXR1cm5zIHRoZSBzdHJpbmdpZmllZCB2ZXJzaW9uXG4gKiBvZiB0aGUgaW5wdXRcbiAqXG4gKiBAcGFyYW0ge2FueX0gcmF3VmFsdWUgLSBUaGUgdmFsdWUgdG8gYmUgc3RyaW5naWZpZWQuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBwYXJzZXIgLSBBIGZ1bmN0aW9uIHRoYXQgcGFyc2VzIGEgc3RyaW5nIGludG8gYSBKYXZhU2NyaXB0IG9iamVjdC5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IGVuY29kZXIgLSBBIGZ1bmN0aW9uIHRoYXQgdGFrZXMgYSB2YWx1ZSBhbmQgcmV0dXJucyBhIHN0cmluZy5cbiAqXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBBIHN0cmluZ2lmaWVkIHZlcnNpb24gb2YgdGhlIHJhd1ZhbHVlLlxuICovXG5mdW5jdGlvbiBzdHJpbmdpZnlTYWZlbHkocmF3VmFsdWUsIHBhcnNlciwgZW5jb2Rlcikge1xuICBpZiAodXRpbHMuaXNTdHJpbmcocmF3VmFsdWUpKSB7XG4gICAgdHJ5IHtcbiAgICAgIChwYXJzZXIgfHwgSlNPTi5wYXJzZSkocmF3VmFsdWUpO1xuICAgICAgcmV0dXJuIHV0aWxzLnRyaW0ocmF3VmFsdWUpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGlmIChlLm5hbWUgIT09ICdTeW50YXhFcnJvcicpIHtcbiAgICAgICAgdGhyb3cgZTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gKGVuY29kZXIgfHwgSlNPTi5zdHJpbmdpZnkpKHJhd1ZhbHVlKTtcbn1cblxuY29uc3QgZGVmYXVsdHMgPSB7XG5cbiAgdHJhbnNpdGlvbmFsOiB0cmFuc2l0aW9uYWxEZWZhdWx0cyxcblxuICBhZGFwdGVyOiBbJ3hocicsICdodHRwJywgJ2ZldGNoJ10sXG5cbiAgdHJhbnNmb3JtUmVxdWVzdDogW2Z1bmN0aW9uIHRyYW5zZm9ybVJlcXVlc3QoZGF0YSwgaGVhZGVycykge1xuICAgIGNvbnN0IGNvbnRlbnRUeXBlID0gaGVhZGVycy5nZXRDb250ZW50VHlwZSgpIHx8ICcnO1xuICAgIGNvbnN0IGhhc0pTT05Db250ZW50VHlwZSA9IGNvbnRlbnRUeXBlLmluZGV4T2YoJ2FwcGxpY2F0aW9uL2pzb24nKSA+IC0xO1xuICAgIGNvbnN0IGlzT2JqZWN0UGF5bG9hZCA9IHV0aWxzLmlzT2JqZWN0KGRhdGEpO1xuXG4gICAgaWYgKGlzT2JqZWN0UGF5bG9hZCAmJiB1dGlscy5pc0hUTUxGb3JtKGRhdGEpKSB7XG4gICAgICBkYXRhID0gbmV3IEZvcm1EYXRhKGRhdGEpO1xuICAgIH1cblxuICAgIGNvbnN0IGlzRm9ybURhdGEgPSB1dGlscy5pc0Zvcm1EYXRhKGRhdGEpO1xuXG4gICAgaWYgKGlzRm9ybURhdGEpIHtcbiAgICAgIHJldHVybiBoYXNKU09OQ29udGVudFR5cGUgPyBKU09OLnN0cmluZ2lmeShmb3JtRGF0YVRvSlNPTihkYXRhKSkgOiBkYXRhO1xuICAgIH1cblxuICAgIGlmICh1dGlscy5pc0FycmF5QnVmZmVyKGRhdGEpIHx8XG4gICAgICB1dGlscy5pc0J1ZmZlcihkYXRhKSB8fFxuICAgICAgdXRpbHMuaXNTdHJlYW0oZGF0YSkgfHxcbiAgICAgIHV0aWxzLmlzRmlsZShkYXRhKSB8fFxuICAgICAgdXRpbHMuaXNCbG9iKGRhdGEpIHx8XG4gICAgICB1dGlscy5pc1JlYWRhYmxlU3RyZWFtKGRhdGEpXG4gICAgKSB7XG4gICAgICByZXR1cm4gZGF0YTtcbiAgICB9XG4gICAgaWYgKHV0aWxzLmlzQXJyYXlCdWZmZXJWaWV3KGRhdGEpKSB7XG4gICAgICByZXR1cm4gZGF0YS5idWZmZXI7XG4gICAgfVxuICAgIGlmICh1dGlscy5pc1VSTFNlYXJjaFBhcmFtcyhkYXRhKSkge1xuICAgICAgaGVhZGVycy5zZXRDb250ZW50VHlwZSgnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkO2NoYXJzZXQ9dXRmLTgnLCBmYWxzZSk7XG4gICAgICByZXR1cm4gZGF0YS50b1N0cmluZygpO1xuICAgIH1cblxuICAgIGxldCBpc0ZpbGVMaXN0O1xuXG4gICAgaWYgKGlzT2JqZWN0UGF5bG9hZCkge1xuICAgICAgaWYgKGNvbnRlbnRUeXBlLmluZGV4T2YoJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCcpID4gLTEpIHtcbiAgICAgICAgcmV0dXJuIHRvVVJMRW5jb2RlZEZvcm0oZGF0YSwgdGhpcy5mb3JtU2VyaWFsaXplcikudG9TdHJpbmcoKTtcbiAgICAgIH1cblxuICAgICAgaWYgKChpc0ZpbGVMaXN0ID0gdXRpbHMuaXNGaWxlTGlzdChkYXRhKSkgfHwgY29udGVudFR5cGUuaW5kZXhPZignbXVsdGlwYXJ0L2Zvcm0tZGF0YScpID4gLTEpIHtcbiAgICAgICAgY29uc3QgX0Zvcm1EYXRhID0gdGhpcy5lbnYgJiYgdGhpcy5lbnYuRm9ybURhdGE7XG5cbiAgICAgICAgcmV0dXJuIHRvRm9ybURhdGEoXG4gICAgICAgICAgaXNGaWxlTGlzdCA/IHsnZmlsZXNbXSc6IGRhdGF9IDogZGF0YSxcbiAgICAgICAgICBfRm9ybURhdGEgJiYgbmV3IF9Gb3JtRGF0YSgpLFxuICAgICAgICAgIHRoaXMuZm9ybVNlcmlhbGl6ZXJcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoaXNPYmplY3RQYXlsb2FkIHx8IGhhc0pTT05Db250ZW50VHlwZSApIHtcbiAgICAgIGhlYWRlcnMuc2V0Q29udGVudFR5cGUoJ2FwcGxpY2F0aW9uL2pzb24nLCBmYWxzZSk7XG4gICAgICByZXR1cm4gc3RyaW5naWZ5U2FmZWx5KGRhdGEpO1xuICAgIH1cblxuICAgIHJldHVybiBkYXRhO1xuICB9XSxcblxuICB0cmFuc2Zvcm1SZXNwb25zZTogW2Z1bmN0aW9uIHRyYW5zZm9ybVJlc3BvbnNlKGRhdGEpIHtcbiAgICBjb25zdCB0cmFuc2l0aW9uYWwgPSB0aGlzLnRyYW5zaXRpb25hbCB8fCBkZWZhdWx0cy50cmFuc2l0aW9uYWw7XG4gICAgY29uc3QgZm9yY2VkSlNPTlBhcnNpbmcgPSB0cmFuc2l0aW9uYWwgJiYgdHJhbnNpdGlvbmFsLmZvcmNlZEpTT05QYXJzaW5nO1xuICAgIGNvbnN0IEpTT05SZXF1ZXN0ZWQgPSB0aGlzLnJlc3BvbnNlVHlwZSA9PT0gJ2pzb24nO1xuXG4gICAgaWYgKHV0aWxzLmlzUmVzcG9uc2UoZGF0YSkgfHwgdXRpbHMuaXNSZWFkYWJsZVN0cmVhbShkYXRhKSkge1xuICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuXG4gICAgaWYgKGRhdGEgJiYgdXRpbHMuaXNTdHJpbmcoZGF0YSkgJiYgKChmb3JjZWRKU09OUGFyc2luZyAmJiAhdGhpcy5yZXNwb25zZVR5cGUpIHx8IEpTT05SZXF1ZXN0ZWQpKSB7XG4gICAgICBjb25zdCBzaWxlbnRKU09OUGFyc2luZyA9IHRyYW5zaXRpb25hbCAmJiB0cmFuc2l0aW9uYWwuc2lsZW50SlNPTlBhcnNpbmc7XG4gICAgICBjb25zdCBzdHJpY3RKU09OUGFyc2luZyA9ICFzaWxlbnRKU09OUGFyc2luZyAmJiBKU09OUmVxdWVzdGVkO1xuXG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gSlNPTi5wYXJzZShkYXRhKTtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgaWYgKHN0cmljdEpTT05QYXJzaW5nKSB7XG4gICAgICAgICAgaWYgKGUubmFtZSA9PT0gJ1N5bnRheEVycm9yJykge1xuICAgICAgICAgICAgdGhyb3cgQXhpb3NFcnJvci5mcm9tKGUsIEF4aW9zRXJyb3IuRVJSX0JBRF9SRVNQT05TRSwgdGhpcywgbnVsbCwgdGhpcy5yZXNwb25zZSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRocm93IGU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZGF0YTtcbiAgfV0sXG5cbiAgLyoqXG4gICAqIEEgdGltZW91dCBpbiBtaWxsaXNlY29uZHMgdG8gYWJvcnQgYSByZXF1ZXN0LiBJZiBzZXQgdG8gMCAoZGVmYXVsdCkgYVxuICAgKiB0aW1lb3V0IGlzIG5vdCBjcmVhdGVkLlxuICAgKi9cbiAgdGltZW91dDogMCxcblxuICB4c3JmQ29va2llTmFtZTogJ1hTUkYtVE9LRU4nLFxuICB4c3JmSGVhZGVyTmFtZTogJ1gtWFNSRi1UT0tFTicsXG5cbiAgbWF4Q29udGVudExlbmd0aDogLTEsXG4gIG1heEJvZHlMZW5ndGg6IC0xLFxuXG4gIGVudjoge1xuICAgIEZvcm1EYXRhOiBwbGF0Zm9ybS5jbGFzc2VzLkZvcm1EYXRhLFxuICAgIEJsb2I6IHBsYXRmb3JtLmNsYXNzZXMuQmxvYlxuICB9LFxuXG4gIHZhbGlkYXRlU3RhdHVzOiBmdW5jdGlvbiB2YWxpZGF0ZVN0YXR1cyhzdGF0dXMpIHtcbiAgICByZXR1cm4gc3RhdHVzID49IDIwMCAmJiBzdGF0dXMgPCAzMDA7XG4gIH0sXG5cbiAgaGVhZGVyczoge1xuICAgIGNvbW1vbjoge1xuICAgICAgJ0FjY2VwdCc6ICdhcHBsaWNhdGlvbi9qc29uLCB0ZXh0L3BsYWluLCAqLyonLFxuICAgICAgJ0NvbnRlbnQtVHlwZSc6IHVuZGVmaW5lZFxuICAgIH1cbiAgfVxufTtcblxudXRpbHMuZm9yRWFjaChbJ2RlbGV0ZScsICdnZXQnLCAnaGVhZCcsICdwb3N0JywgJ3B1dCcsICdwYXRjaCddLCAobWV0aG9kKSA9PiB7XG4gIGRlZmF1bHRzLmhlYWRlcnNbbWV0aG9kXSA9IHt9O1xufSk7XG5cbmV4cG9ydCBkZWZhdWx0IGRlZmF1bHRzO1xuIiwgIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IHV0aWxzIGZyb20gJy4vLi4vdXRpbHMuanMnO1xuXG4vLyBSYXdBeGlvc0hlYWRlcnMgd2hvc2UgZHVwbGljYXRlcyBhcmUgaWdub3JlZCBieSBub2RlXG4vLyBjLmYuIGh0dHBzOi8vbm9kZWpzLm9yZy9hcGkvaHR0cC5odG1sI2h0dHBfbWVzc2FnZV9oZWFkZXJzXG5jb25zdCBpZ25vcmVEdXBsaWNhdGVPZiA9IHV0aWxzLnRvT2JqZWN0U2V0KFtcbiAgJ2FnZScsICdhdXRob3JpemF0aW9uJywgJ2NvbnRlbnQtbGVuZ3RoJywgJ2NvbnRlbnQtdHlwZScsICdldGFnJyxcbiAgJ2V4cGlyZXMnLCAnZnJvbScsICdob3N0JywgJ2lmLW1vZGlmaWVkLXNpbmNlJywgJ2lmLXVubW9kaWZpZWQtc2luY2UnLFxuICAnbGFzdC1tb2RpZmllZCcsICdsb2NhdGlvbicsICdtYXgtZm9yd2FyZHMnLCAncHJveHktYXV0aG9yaXphdGlvbicsXG4gICdyZWZlcmVyJywgJ3JldHJ5LWFmdGVyJywgJ3VzZXItYWdlbnQnXG5dKTtcblxuLyoqXG4gKiBQYXJzZSBoZWFkZXJzIGludG8gYW4gb2JqZWN0XG4gKlxuICogYGBgXG4gKiBEYXRlOiBXZWQsIDI3IEF1ZyAyMDE0IDA4OjU4OjQ5IEdNVFxuICogQ29udGVudC1UeXBlOiBhcHBsaWNhdGlvbi9qc29uXG4gKiBDb25uZWN0aW9uOiBrZWVwLWFsaXZlXG4gKiBUcmFuc2Zlci1FbmNvZGluZzogY2h1bmtlZFxuICogYGBgXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IHJhd0hlYWRlcnMgSGVhZGVycyBuZWVkaW5nIHRvIGJlIHBhcnNlZFxuICpcbiAqIEByZXR1cm5zIHtPYmplY3R9IEhlYWRlcnMgcGFyc2VkIGludG8gYW4gb2JqZWN0XG4gKi9cbmV4cG9ydCBkZWZhdWx0IHJhd0hlYWRlcnMgPT4ge1xuICBjb25zdCBwYXJzZWQgPSB7fTtcbiAgbGV0IGtleTtcbiAgbGV0IHZhbDtcbiAgbGV0IGk7XG5cbiAgcmF3SGVhZGVycyAmJiByYXdIZWFkZXJzLnNwbGl0KCdcXG4nKS5mb3JFYWNoKGZ1bmN0aW9uIHBhcnNlcihsaW5lKSB7XG4gICAgaSA9IGxpbmUuaW5kZXhPZignOicpO1xuICAgIGtleSA9IGxpbmUuc3Vic3RyaW5nKDAsIGkpLnRyaW0oKS50b0xvd2VyQ2FzZSgpO1xuICAgIHZhbCA9IGxpbmUuc3Vic3RyaW5nKGkgKyAxKS50cmltKCk7XG5cbiAgICBpZiAoIWtleSB8fCAocGFyc2VkW2tleV0gJiYgaWdub3JlRHVwbGljYXRlT2Zba2V5XSkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoa2V5ID09PSAnc2V0LWNvb2tpZScpIHtcbiAgICAgIGlmIChwYXJzZWRba2V5XSkge1xuICAgICAgICBwYXJzZWRba2V5XS5wdXNoKHZhbCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwYXJzZWRba2V5XSA9IFt2YWxdO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBwYXJzZWRba2V5XSA9IHBhcnNlZFtrZXldID8gcGFyc2VkW2tleV0gKyAnLCAnICsgdmFsIDogdmFsO1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIHBhcnNlZDtcbn07XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgdXRpbHMgZnJvbSAnLi4vdXRpbHMuanMnO1xuaW1wb3J0IHBhcnNlSGVhZGVycyBmcm9tICcuLi9oZWxwZXJzL3BhcnNlSGVhZGVycy5qcyc7XG5cbmNvbnN0ICRpbnRlcm5hbHMgPSBTeW1ib2woJ2ludGVybmFscycpO1xuXG5mdW5jdGlvbiBub3JtYWxpemVIZWFkZXIoaGVhZGVyKSB7XG4gIHJldHVybiBoZWFkZXIgJiYgU3RyaW5nKGhlYWRlcikudHJpbSgpLnRvTG93ZXJDYXNlKCk7XG59XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZVZhbHVlKHZhbHVlKSB7XG4gIGlmICh2YWx1ZSA9PT0gZmFsc2UgfHwgdmFsdWUgPT0gbnVsbCkge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuXG4gIHJldHVybiB1dGlscy5pc0FycmF5KHZhbHVlKSA/IHZhbHVlLm1hcChub3JtYWxpemVWYWx1ZSkgOiBTdHJpbmcodmFsdWUpO1xufVxuXG5mdW5jdGlvbiBwYXJzZVRva2VucyhzdHIpIHtcbiAgY29uc3QgdG9rZW5zID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgY29uc3QgdG9rZW5zUkUgPSAvKFteXFxzLDs9XSspXFxzKig/Oj1cXHMqKFteLDtdKykpPy9nO1xuICBsZXQgbWF0Y2g7XG5cbiAgd2hpbGUgKChtYXRjaCA9IHRva2Vuc1JFLmV4ZWMoc3RyKSkpIHtcbiAgICB0b2tlbnNbbWF0Y2hbMV1dID0gbWF0Y2hbMl07XG4gIH1cblxuICByZXR1cm4gdG9rZW5zO1xufVxuXG5jb25zdCBpc1ZhbGlkSGVhZGVyTmFtZSA9IChzdHIpID0+IC9eWy1fYS16QS1aMC05XmB8fiwhIyQlJicqKy5dKyQvLnRlc3Qoc3RyLnRyaW0oKSk7XG5cbmZ1bmN0aW9uIG1hdGNoSGVhZGVyVmFsdWUoY29udGV4dCwgdmFsdWUsIGhlYWRlciwgZmlsdGVyLCBpc0hlYWRlck5hbWVGaWx0ZXIpIHtcbiAgaWYgKHV0aWxzLmlzRnVuY3Rpb24oZmlsdGVyKSkge1xuICAgIHJldHVybiBmaWx0ZXIuY2FsbCh0aGlzLCB2YWx1ZSwgaGVhZGVyKTtcbiAgfVxuXG4gIGlmIChpc0hlYWRlck5hbWVGaWx0ZXIpIHtcbiAgICB2YWx1ZSA9IGhlYWRlcjtcbiAgfVxuXG4gIGlmICghdXRpbHMuaXNTdHJpbmcodmFsdWUpKSByZXR1cm47XG5cbiAgaWYgKHV0aWxzLmlzU3RyaW5nKGZpbHRlcikpIHtcbiAgICByZXR1cm4gdmFsdWUuaW5kZXhPZihmaWx0ZXIpICE9PSAtMTtcbiAgfVxuXG4gIGlmICh1dGlscy5pc1JlZ0V4cChmaWx0ZXIpKSB7XG4gICAgcmV0dXJuIGZpbHRlci50ZXN0KHZhbHVlKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBmb3JtYXRIZWFkZXIoaGVhZGVyKSB7XG4gIHJldHVybiBoZWFkZXIudHJpbSgpXG4gICAgLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvKFthLXpcXGRdKShcXHcqKS9nLCAodywgY2hhciwgc3RyKSA9PiB7XG4gICAgICByZXR1cm4gY2hhci50b1VwcGVyQ2FzZSgpICsgc3RyO1xuICAgIH0pO1xufVxuXG5mdW5jdGlvbiBidWlsZEFjY2Vzc29ycyhvYmosIGhlYWRlcikge1xuICBjb25zdCBhY2Nlc3Nvck5hbWUgPSB1dGlscy50b0NhbWVsQ2FzZSgnICcgKyBoZWFkZXIpO1xuXG4gIFsnZ2V0JywgJ3NldCcsICdoYXMnXS5mb3JFYWNoKG1ldGhvZE5hbWUgPT4ge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIG1ldGhvZE5hbWUgKyBhY2Nlc3Nvck5hbWUsIHtcbiAgICAgIHZhbHVlOiBmdW5jdGlvbihhcmcxLCBhcmcyLCBhcmczKSB7XG4gICAgICAgIHJldHVybiB0aGlzW21ldGhvZE5hbWVdLmNhbGwodGhpcywgaGVhZGVyLCBhcmcxLCBhcmcyLCBhcmczKTtcbiAgICAgIH0sXG4gICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KTtcbiAgfSk7XG59XG5cbmNsYXNzIEF4aW9zSGVhZGVycyB7XG4gIGNvbnN0cnVjdG9yKGhlYWRlcnMpIHtcbiAgICBoZWFkZXJzICYmIHRoaXMuc2V0KGhlYWRlcnMpO1xuICB9XG5cbiAgc2V0KGhlYWRlciwgdmFsdWVPclJld3JpdGUsIHJld3JpdGUpIHtcbiAgICBjb25zdCBzZWxmID0gdGhpcztcblxuICAgIGZ1bmN0aW9uIHNldEhlYWRlcihfdmFsdWUsIF9oZWFkZXIsIF9yZXdyaXRlKSB7XG4gICAgICBjb25zdCBsSGVhZGVyID0gbm9ybWFsaXplSGVhZGVyKF9oZWFkZXIpO1xuXG4gICAgICBpZiAoIWxIZWFkZXIpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdoZWFkZXIgbmFtZSBtdXN0IGJlIGEgbm9uLWVtcHR5IHN0cmluZycpO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBrZXkgPSB1dGlscy5maW5kS2V5KHNlbGYsIGxIZWFkZXIpO1xuXG4gICAgICBpZigha2V5IHx8IHNlbGZba2V5XSA9PT0gdW5kZWZpbmVkIHx8IF9yZXdyaXRlID09PSB0cnVlIHx8IChfcmV3cml0ZSA9PT0gdW5kZWZpbmVkICYmIHNlbGZba2V5XSAhPT0gZmFsc2UpKSB7XG4gICAgICAgIHNlbGZba2V5IHx8IF9oZWFkZXJdID0gbm9ybWFsaXplVmFsdWUoX3ZhbHVlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBzZXRIZWFkZXJzID0gKGhlYWRlcnMsIF9yZXdyaXRlKSA9PlxuICAgICAgdXRpbHMuZm9yRWFjaChoZWFkZXJzLCAoX3ZhbHVlLCBfaGVhZGVyKSA9PiBzZXRIZWFkZXIoX3ZhbHVlLCBfaGVhZGVyLCBfcmV3cml0ZSkpO1xuXG4gICAgaWYgKHV0aWxzLmlzUGxhaW5PYmplY3QoaGVhZGVyKSB8fCBoZWFkZXIgaW5zdGFuY2VvZiB0aGlzLmNvbnN0cnVjdG9yKSB7XG4gICAgICBzZXRIZWFkZXJzKGhlYWRlciwgdmFsdWVPclJld3JpdGUpXG4gICAgfSBlbHNlIGlmKHV0aWxzLmlzU3RyaW5nKGhlYWRlcikgJiYgKGhlYWRlciA9IGhlYWRlci50cmltKCkpICYmICFpc1ZhbGlkSGVhZGVyTmFtZShoZWFkZXIpKSB7XG4gICAgICBzZXRIZWFkZXJzKHBhcnNlSGVhZGVycyhoZWFkZXIpLCB2YWx1ZU9yUmV3cml0ZSk7XG4gICAgfSBlbHNlIGlmICh1dGlscy5pc0hlYWRlcnMoaGVhZGVyKSkge1xuICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgaGVhZGVyLmVudHJpZXMoKSkge1xuICAgICAgICBzZXRIZWFkZXIodmFsdWUsIGtleSwgcmV3cml0ZSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGhlYWRlciAhPSBudWxsICYmIHNldEhlYWRlcih2YWx1ZU9yUmV3cml0ZSwgaGVhZGVyLCByZXdyaXRlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIGdldChoZWFkZXIsIHBhcnNlcikge1xuICAgIGhlYWRlciA9IG5vcm1hbGl6ZUhlYWRlcihoZWFkZXIpO1xuXG4gICAgaWYgKGhlYWRlcikge1xuICAgICAgY29uc3Qga2V5ID0gdXRpbHMuZmluZEtleSh0aGlzLCBoZWFkZXIpO1xuXG4gICAgICBpZiAoa2V5KSB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gdGhpc1trZXldO1xuXG4gICAgICAgIGlmICghcGFyc2VyKSB7XG4gICAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHBhcnNlciA9PT0gdHJ1ZSkge1xuICAgICAgICAgIHJldHVybiBwYXJzZVRva2Vucyh2YWx1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodXRpbHMuaXNGdW5jdGlvbihwYXJzZXIpKSB7XG4gICAgICAgICAgcmV0dXJuIHBhcnNlci5jYWxsKHRoaXMsIHZhbHVlLCBrZXkpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHV0aWxzLmlzUmVnRXhwKHBhcnNlcikpIHtcbiAgICAgICAgICByZXR1cm4gcGFyc2VyLmV4ZWModmFsdWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigncGFyc2VyIG11c3QgYmUgYm9vbGVhbnxyZWdleHB8ZnVuY3Rpb24nKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBoYXMoaGVhZGVyLCBtYXRjaGVyKSB7XG4gICAgaGVhZGVyID0gbm9ybWFsaXplSGVhZGVyKGhlYWRlcik7XG5cbiAgICBpZiAoaGVhZGVyKSB7XG4gICAgICBjb25zdCBrZXkgPSB1dGlscy5maW5kS2V5KHRoaXMsIGhlYWRlcik7XG5cbiAgICAgIHJldHVybiAhIShrZXkgJiYgdGhpc1trZXldICE9PSB1bmRlZmluZWQgJiYgKCFtYXRjaGVyIHx8IG1hdGNoSGVhZGVyVmFsdWUodGhpcywgdGhpc1trZXldLCBrZXksIG1hdGNoZXIpKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgZGVsZXRlKGhlYWRlciwgbWF0Y2hlcikge1xuICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuICAgIGxldCBkZWxldGVkID0gZmFsc2U7XG5cbiAgICBmdW5jdGlvbiBkZWxldGVIZWFkZXIoX2hlYWRlcikge1xuICAgICAgX2hlYWRlciA9IG5vcm1hbGl6ZUhlYWRlcihfaGVhZGVyKTtcblxuICAgICAgaWYgKF9oZWFkZXIpIHtcbiAgICAgICAgY29uc3Qga2V5ID0gdXRpbHMuZmluZEtleShzZWxmLCBfaGVhZGVyKTtcblxuICAgICAgICBpZiAoa2V5ICYmICghbWF0Y2hlciB8fCBtYXRjaEhlYWRlclZhbHVlKHNlbGYsIHNlbGZba2V5XSwga2V5LCBtYXRjaGVyKSkpIHtcbiAgICAgICAgICBkZWxldGUgc2VsZltrZXldO1xuXG4gICAgICAgICAgZGVsZXRlZCA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodXRpbHMuaXNBcnJheShoZWFkZXIpKSB7XG4gICAgICBoZWFkZXIuZm9yRWFjaChkZWxldGVIZWFkZXIpO1xuICAgIH0gZWxzZSB7XG4gICAgICBkZWxldGVIZWFkZXIoaGVhZGVyKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZGVsZXRlZDtcbiAgfVxuXG4gIGNsZWFyKG1hdGNoZXIpIHtcbiAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXModGhpcyk7XG4gICAgbGV0IGkgPSBrZXlzLmxlbmd0aDtcbiAgICBsZXQgZGVsZXRlZCA9IGZhbHNlO1xuXG4gICAgd2hpbGUgKGktLSkge1xuICAgICAgY29uc3Qga2V5ID0ga2V5c1tpXTtcbiAgICAgIGlmKCFtYXRjaGVyIHx8IG1hdGNoSGVhZGVyVmFsdWUodGhpcywgdGhpc1trZXldLCBrZXksIG1hdGNoZXIsIHRydWUpKSB7XG4gICAgICAgIGRlbGV0ZSB0aGlzW2tleV07XG4gICAgICAgIGRlbGV0ZWQgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBkZWxldGVkO1xuICB9XG5cbiAgbm9ybWFsaXplKGZvcm1hdCkge1xuICAgIGNvbnN0IHNlbGYgPSB0aGlzO1xuICAgIGNvbnN0IGhlYWRlcnMgPSB7fTtcblxuICAgIHV0aWxzLmZvckVhY2godGhpcywgKHZhbHVlLCBoZWFkZXIpID0+IHtcbiAgICAgIGNvbnN0IGtleSA9IHV0aWxzLmZpbmRLZXkoaGVhZGVycywgaGVhZGVyKTtcblxuICAgICAgaWYgKGtleSkge1xuICAgICAgICBzZWxmW2tleV0gPSBub3JtYWxpemVWYWx1ZSh2YWx1ZSk7XG4gICAgICAgIGRlbGV0ZSBzZWxmW2hlYWRlcl07XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgbm9ybWFsaXplZCA9IGZvcm1hdCA/IGZvcm1hdEhlYWRlcihoZWFkZXIpIDogU3RyaW5nKGhlYWRlcikudHJpbSgpO1xuXG4gICAgICBpZiAobm9ybWFsaXplZCAhPT0gaGVhZGVyKSB7XG4gICAgICAgIGRlbGV0ZSBzZWxmW2hlYWRlcl07XG4gICAgICB9XG5cbiAgICAgIHNlbGZbbm9ybWFsaXplZF0gPSBub3JtYWxpemVWYWx1ZSh2YWx1ZSk7XG5cbiAgICAgIGhlYWRlcnNbbm9ybWFsaXplZF0gPSB0cnVlO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICBjb25jYXQoLi4udGFyZ2V0cykge1xuICAgIHJldHVybiB0aGlzLmNvbnN0cnVjdG9yLmNvbmNhdCh0aGlzLCAuLi50YXJnZXRzKTtcbiAgfVxuXG4gIHRvSlNPTihhc1N0cmluZ3MpIHtcbiAgICBjb25zdCBvYmogPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuXG4gICAgdXRpbHMuZm9yRWFjaCh0aGlzLCAodmFsdWUsIGhlYWRlcikgPT4ge1xuICAgICAgdmFsdWUgIT0gbnVsbCAmJiB2YWx1ZSAhPT0gZmFsc2UgJiYgKG9ialtoZWFkZXJdID0gYXNTdHJpbmdzICYmIHV0aWxzLmlzQXJyYXkodmFsdWUpID8gdmFsdWUuam9pbignLCAnKSA6IHZhbHVlKTtcbiAgICB9KTtcblxuICAgIHJldHVybiBvYmo7XG4gIH1cblxuICBbU3ltYm9sLml0ZXJhdG9yXSgpIHtcbiAgICByZXR1cm4gT2JqZWN0LmVudHJpZXModGhpcy50b0pTT04oKSlbU3ltYm9sLml0ZXJhdG9yXSgpO1xuICB9XG5cbiAgdG9TdHJpbmcoKSB7XG4gICAgcmV0dXJuIE9iamVjdC5lbnRyaWVzKHRoaXMudG9KU09OKCkpLm1hcCgoW2hlYWRlciwgdmFsdWVdKSA9PiBoZWFkZXIgKyAnOiAnICsgdmFsdWUpLmpvaW4oJ1xcbicpO1xuICB9XG5cbiAgZ2V0IFtTeW1ib2wudG9TdHJpbmdUYWddKCkge1xuICAgIHJldHVybiAnQXhpb3NIZWFkZXJzJztcbiAgfVxuXG4gIHN0YXRpYyBmcm9tKHRoaW5nKSB7XG4gICAgcmV0dXJuIHRoaW5nIGluc3RhbmNlb2YgdGhpcyA/IHRoaW5nIDogbmV3IHRoaXModGhpbmcpO1xuICB9XG5cbiAgc3RhdGljIGNvbmNhdChmaXJzdCwgLi4udGFyZ2V0cykge1xuICAgIGNvbnN0IGNvbXB1dGVkID0gbmV3IHRoaXMoZmlyc3QpO1xuXG4gICAgdGFyZ2V0cy5mb3JFYWNoKCh0YXJnZXQpID0+IGNvbXB1dGVkLnNldCh0YXJnZXQpKTtcblxuICAgIHJldHVybiBjb21wdXRlZDtcbiAgfVxuXG4gIHN0YXRpYyBhY2Nlc3NvcihoZWFkZXIpIHtcbiAgICBjb25zdCBpbnRlcm5hbHMgPSB0aGlzWyRpbnRlcm5hbHNdID0gKHRoaXNbJGludGVybmFsc10gPSB7XG4gICAgICBhY2Nlc3NvcnM6IHt9XG4gICAgfSk7XG5cbiAgICBjb25zdCBhY2Nlc3NvcnMgPSBpbnRlcm5hbHMuYWNjZXNzb3JzO1xuICAgIGNvbnN0IHByb3RvdHlwZSA9IHRoaXMucHJvdG90eXBlO1xuXG4gICAgZnVuY3Rpb24gZGVmaW5lQWNjZXNzb3IoX2hlYWRlcikge1xuICAgICAgY29uc3QgbEhlYWRlciA9IG5vcm1hbGl6ZUhlYWRlcihfaGVhZGVyKTtcblxuICAgICAgaWYgKCFhY2Nlc3NvcnNbbEhlYWRlcl0pIHtcbiAgICAgICAgYnVpbGRBY2Nlc3NvcnMocHJvdG90eXBlLCBfaGVhZGVyKTtcbiAgICAgICAgYWNjZXNzb3JzW2xIZWFkZXJdID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB1dGlscy5pc0FycmF5KGhlYWRlcikgPyBoZWFkZXIuZm9yRWFjaChkZWZpbmVBY2Nlc3NvcikgOiBkZWZpbmVBY2Nlc3NvcihoZWFkZXIpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cbn1cblxuQXhpb3NIZWFkZXJzLmFjY2Vzc29yKFsnQ29udGVudC1UeXBlJywgJ0NvbnRlbnQtTGVuZ3RoJywgJ0FjY2VwdCcsICdBY2NlcHQtRW5jb2RpbmcnLCAnVXNlci1BZ2VudCcsICdBdXRob3JpemF0aW9uJ10pO1xuXG4vLyByZXNlcnZlZCBuYW1lcyBob3RmaXhcbnV0aWxzLnJlZHVjZURlc2NyaXB0b3JzKEF4aW9zSGVhZGVycy5wcm90b3R5cGUsICh7dmFsdWV9LCBrZXkpID0+IHtcbiAgbGV0IG1hcHBlZCA9IGtleVswXS50b1VwcGVyQ2FzZSgpICsga2V5LnNsaWNlKDEpOyAvLyBtYXAgYHNldGAgPT4gYFNldGBcbiAgcmV0dXJuIHtcbiAgICBnZXQ6ICgpID0+IHZhbHVlLFxuICAgIHNldChoZWFkZXJWYWx1ZSkge1xuICAgICAgdGhpc1ttYXBwZWRdID0gaGVhZGVyVmFsdWU7XG4gICAgfVxuICB9XG59KTtcblxudXRpbHMuZnJlZXplTWV0aG9kcyhBeGlvc0hlYWRlcnMpO1xuXG5leHBvcnQgZGVmYXVsdCBBeGlvc0hlYWRlcnM7XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgdXRpbHMgZnJvbSAnLi8uLi91dGlscy5qcyc7XG5pbXBvcnQgZGVmYXVsdHMgZnJvbSAnLi4vZGVmYXVsdHMvaW5kZXguanMnO1xuaW1wb3J0IEF4aW9zSGVhZGVycyBmcm9tICcuLi9jb3JlL0F4aW9zSGVhZGVycy5qcyc7XG5cbi8qKlxuICogVHJhbnNmb3JtIHRoZSBkYXRhIGZvciBhIHJlcXVlc3Qgb3IgYSByZXNwb25zZVxuICpcbiAqIEBwYXJhbSB7QXJyYXl8RnVuY3Rpb259IGZucyBBIHNpbmdsZSBmdW5jdGlvbiBvciBBcnJheSBvZiBmdW5jdGlvbnNcbiAqIEBwYXJhbSB7P09iamVjdH0gcmVzcG9uc2UgVGhlIHJlc3BvbnNlIG9iamVjdFxuICpcbiAqIEByZXR1cm5zIHsqfSBUaGUgcmVzdWx0aW5nIHRyYW5zZm9ybWVkIGRhdGFcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdHJhbnNmb3JtRGF0YShmbnMsIHJlc3BvbnNlKSB7XG4gIGNvbnN0IGNvbmZpZyA9IHRoaXMgfHwgZGVmYXVsdHM7XG4gIGNvbnN0IGNvbnRleHQgPSByZXNwb25zZSB8fCBjb25maWc7XG4gIGNvbnN0IGhlYWRlcnMgPSBBeGlvc0hlYWRlcnMuZnJvbShjb250ZXh0LmhlYWRlcnMpO1xuICBsZXQgZGF0YSA9IGNvbnRleHQuZGF0YTtcblxuICB1dGlscy5mb3JFYWNoKGZucywgZnVuY3Rpb24gdHJhbnNmb3JtKGZuKSB7XG4gICAgZGF0YSA9IGZuLmNhbGwoY29uZmlnLCBkYXRhLCBoZWFkZXJzLm5vcm1hbGl6ZSgpLCByZXNwb25zZSA/IHJlc3BvbnNlLnN0YXR1cyA6IHVuZGVmaW5lZCk7XG4gIH0pO1xuXG4gIGhlYWRlcnMubm9ybWFsaXplKCk7XG5cbiAgcmV0dXJuIGRhdGE7XG59XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBpc0NhbmNlbCh2YWx1ZSkge1xuICByZXR1cm4gISEodmFsdWUgJiYgdmFsdWUuX19DQU5DRUxfXyk7XG59XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgQXhpb3NFcnJvciBmcm9tICcuLi9jb3JlL0F4aW9zRXJyb3IuanMnO1xuaW1wb3J0IHV0aWxzIGZyb20gJy4uL3V0aWxzLmpzJztcblxuLyoqXG4gKiBBIGBDYW5jZWxlZEVycm9yYCBpcyBhbiBvYmplY3QgdGhhdCBpcyB0aHJvd24gd2hlbiBhbiBvcGVyYXRpb24gaXMgY2FuY2VsZWQuXG4gKlxuICogQHBhcmFtIHtzdHJpbmc9fSBtZXNzYWdlIFRoZSBtZXNzYWdlLlxuICogQHBhcmFtIHtPYmplY3Q9fSBjb25maWcgVGhlIGNvbmZpZy5cbiAqIEBwYXJhbSB7T2JqZWN0PX0gcmVxdWVzdCBUaGUgcmVxdWVzdC5cbiAqXG4gKiBAcmV0dXJucyB7Q2FuY2VsZWRFcnJvcn0gVGhlIGNyZWF0ZWQgZXJyb3IuXG4gKi9cbmZ1bmN0aW9uIENhbmNlbGVkRXJyb3IobWVzc2FnZSwgY29uZmlnLCByZXF1ZXN0KSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1lcS1udWxsLGVxZXFlcVxuICBBeGlvc0Vycm9yLmNhbGwodGhpcywgbWVzc2FnZSA9PSBudWxsID8gJ2NhbmNlbGVkJyA6IG1lc3NhZ2UsIEF4aW9zRXJyb3IuRVJSX0NBTkNFTEVELCBjb25maWcsIHJlcXVlc3QpO1xuICB0aGlzLm5hbWUgPSAnQ2FuY2VsZWRFcnJvcic7XG59XG5cbnV0aWxzLmluaGVyaXRzKENhbmNlbGVkRXJyb3IsIEF4aW9zRXJyb3IsIHtcbiAgX19DQU5DRUxfXzogdHJ1ZVxufSk7XG5cbmV4cG9ydCBkZWZhdWx0IENhbmNlbGVkRXJyb3I7XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgQXhpb3NFcnJvciBmcm9tICcuL0F4aW9zRXJyb3IuanMnO1xuXG4vKipcbiAqIFJlc29sdmUgb3IgcmVqZWN0IGEgUHJvbWlzZSBiYXNlZCBvbiByZXNwb25zZSBzdGF0dXMuXG4gKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gcmVzb2x2ZSBBIGZ1bmN0aW9uIHRoYXQgcmVzb2x2ZXMgdGhlIHByb21pc2UuXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSByZWplY3QgQSBmdW5jdGlvbiB0aGF0IHJlamVjdHMgdGhlIHByb21pc2UuXG4gKiBAcGFyYW0ge29iamVjdH0gcmVzcG9uc2UgVGhlIHJlc3BvbnNlLlxuICpcbiAqIEByZXR1cm5zIHtvYmplY3R9IFRoZSByZXNwb25zZS5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gc2V0dGxlKHJlc29sdmUsIHJlamVjdCwgcmVzcG9uc2UpIHtcbiAgY29uc3QgdmFsaWRhdGVTdGF0dXMgPSByZXNwb25zZS5jb25maWcudmFsaWRhdGVTdGF0dXM7XG4gIGlmICghcmVzcG9uc2Uuc3RhdHVzIHx8ICF2YWxpZGF0ZVN0YXR1cyB8fCB2YWxpZGF0ZVN0YXR1cyhyZXNwb25zZS5zdGF0dXMpKSB7XG4gICAgcmVzb2x2ZShyZXNwb25zZSk7XG4gIH0gZWxzZSB7XG4gICAgcmVqZWN0KG5ldyBBeGlvc0Vycm9yKFxuICAgICAgJ1JlcXVlc3QgZmFpbGVkIHdpdGggc3RhdHVzIGNvZGUgJyArIHJlc3BvbnNlLnN0YXR1cyxcbiAgICAgIFtBeGlvc0Vycm9yLkVSUl9CQURfUkVRVUVTVCwgQXhpb3NFcnJvci5FUlJfQkFEX1JFU1BPTlNFXVtNYXRoLmZsb29yKHJlc3BvbnNlLnN0YXR1cyAvIDEwMCkgLSA0XSxcbiAgICAgIHJlc3BvbnNlLmNvbmZpZyxcbiAgICAgIHJlc3BvbnNlLnJlcXVlc3QsXG4gICAgICByZXNwb25zZVxuICAgICkpO1xuICB9XG59XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG4vKipcbiAqIERldGVybWluZXMgd2hldGhlciB0aGUgc3BlY2lmaWVkIFVSTCBpcyBhYnNvbHV0ZVxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSB1cmwgVGhlIFVSTCB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdGhlIHNwZWNpZmllZCBVUkwgaXMgYWJzb2x1dGUsIG90aGVyd2lzZSBmYWxzZVxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBpc0Fic29sdXRlVVJMKHVybCkge1xuICAvLyBBIFVSTCBpcyBjb25zaWRlcmVkIGFic29sdXRlIGlmIGl0IGJlZ2lucyB3aXRoIFwiPHNjaGVtZT46Ly9cIiBvciBcIi8vXCIgKHByb3RvY29sLXJlbGF0aXZlIFVSTCkuXG4gIC8vIFJGQyAzOTg2IGRlZmluZXMgc2NoZW1lIG5hbWUgYXMgYSBzZXF1ZW5jZSBvZiBjaGFyYWN0ZXJzIGJlZ2lubmluZyB3aXRoIGEgbGV0dGVyIGFuZCBmb2xsb3dlZFxuICAvLyBieSBhbnkgY29tYmluYXRpb24gb2YgbGV0dGVycywgZGlnaXRzLCBwbHVzLCBwZXJpb2QsIG9yIGh5cGhlbi5cbiAgcmV0dXJuIC9eKFthLXpdW2EtelxcZCtcXC0uXSo6KT9cXC9cXC8vaS50ZXN0KHVybCk7XG59XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgVVJMIGJ5IGNvbWJpbmluZyB0aGUgc3BlY2lmaWVkIFVSTHNcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gYmFzZVVSTCBUaGUgYmFzZSBVUkxcbiAqIEBwYXJhbSB7c3RyaW5nfSByZWxhdGl2ZVVSTCBUaGUgcmVsYXRpdmUgVVJMXG4gKlxuICogQHJldHVybnMge3N0cmluZ30gVGhlIGNvbWJpbmVkIFVSTFxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBjb21iaW5lVVJMcyhiYXNlVVJMLCByZWxhdGl2ZVVSTCkge1xuICByZXR1cm4gcmVsYXRpdmVVUkxcbiAgICA/IGJhc2VVUkwucmVwbGFjZSgvXFwvP1xcLyQvLCAnJykgKyAnLycgKyByZWxhdGl2ZVVSTC5yZXBsYWNlKC9eXFwvKy8sICcnKVxuICAgIDogYmFzZVVSTDtcbn1cbiIsICIndXNlIHN0cmljdCc7XG5cbmltcG9ydCBpc0Fic29sdXRlVVJMIGZyb20gJy4uL2hlbHBlcnMvaXNBYnNvbHV0ZVVSTC5qcyc7XG5pbXBvcnQgY29tYmluZVVSTHMgZnJvbSAnLi4vaGVscGVycy9jb21iaW5lVVJMcy5qcyc7XG5cbi8qKlxuICogQ3JlYXRlcyBhIG5ldyBVUkwgYnkgY29tYmluaW5nIHRoZSBiYXNlVVJMIHdpdGggdGhlIHJlcXVlc3RlZFVSTCxcbiAqIG9ubHkgd2hlbiB0aGUgcmVxdWVzdGVkVVJMIGlzIG5vdCBhbHJlYWR5IGFuIGFic29sdXRlIFVSTC5cbiAqIElmIHRoZSByZXF1ZXN0VVJMIGlzIGFic29sdXRlLCB0aGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIHJlcXVlc3RlZFVSTCB1bnRvdWNoZWQuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGJhc2VVUkwgVGhlIGJhc2UgVVJMXG4gKiBAcGFyYW0ge3N0cmluZ30gcmVxdWVzdGVkVVJMIEFic29sdXRlIG9yIHJlbGF0aXZlIFVSTCB0byBjb21iaW5lXG4gKlxuICogQHJldHVybnMge3N0cmluZ30gVGhlIGNvbWJpbmVkIGZ1bGwgcGF0aFxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBidWlsZEZ1bGxQYXRoKGJhc2VVUkwsIHJlcXVlc3RlZFVSTCwgYWxsb3dBYnNvbHV0ZVVybHMpIHtcbiAgbGV0IGlzUmVsYXRpdmVVcmwgPSAhaXNBYnNvbHV0ZVVSTChyZXF1ZXN0ZWRVUkwpO1xuICBpZiAoYmFzZVVSTCAmJiAoaXNSZWxhdGl2ZVVybCB8fCBhbGxvd0Fic29sdXRlVXJscyA9PSBmYWxzZSkpIHtcbiAgICByZXR1cm4gY29tYmluZVVSTHMoYmFzZVVSTCwgcmVxdWVzdGVkVVJMKTtcbiAgfVxuICByZXR1cm4gcmVxdWVzdGVkVVJMO1xufVxuIiwgIid1c2Ugc3RyaWN0JztcblxudmFyIHBhcnNlVXJsID0gcmVxdWlyZSgndXJsJykucGFyc2U7XG5cbnZhciBERUZBVUxUX1BPUlRTID0ge1xuICBmdHA6IDIxLFxuICBnb3BoZXI6IDcwLFxuICBodHRwOiA4MCxcbiAgaHR0cHM6IDQ0MyxcbiAgd3M6IDgwLFxuICB3c3M6IDQ0Myxcbn07XG5cbnZhciBzdHJpbmdFbmRzV2l0aCA9IFN0cmluZy5wcm90b3R5cGUuZW5kc1dpdGggfHwgZnVuY3Rpb24ocykge1xuICByZXR1cm4gcy5sZW5ndGggPD0gdGhpcy5sZW5ndGggJiZcbiAgICB0aGlzLmluZGV4T2YocywgdGhpcy5sZW5ndGggLSBzLmxlbmd0aCkgIT09IC0xO1xufTtcblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ3xvYmplY3R9IHVybCAtIFRoZSBVUkwsIG9yIHRoZSByZXN1bHQgZnJvbSB1cmwucGFyc2UuXG4gKiBAcmV0dXJuIHtzdHJpbmd9IFRoZSBVUkwgb2YgdGhlIHByb3h5IHRoYXQgc2hvdWxkIGhhbmRsZSB0aGUgcmVxdWVzdCB0byB0aGVcbiAqICBnaXZlbiBVUkwuIElmIG5vIHByb3h5IGlzIHNldCwgdGhpcyB3aWxsIGJlIGFuIGVtcHR5IHN0cmluZy5cbiAqL1xuZnVuY3Rpb24gZ2V0UHJveHlGb3JVcmwodXJsKSB7XG4gIHZhciBwYXJzZWRVcmwgPSB0eXBlb2YgdXJsID09PSAnc3RyaW5nJyA/IHBhcnNlVXJsKHVybCkgOiB1cmwgfHwge307XG4gIHZhciBwcm90byA9IHBhcnNlZFVybC5wcm90b2NvbDtcbiAgdmFyIGhvc3RuYW1lID0gcGFyc2VkVXJsLmhvc3Q7XG4gIHZhciBwb3J0ID0gcGFyc2VkVXJsLnBvcnQ7XG4gIGlmICh0eXBlb2YgaG9zdG5hbWUgIT09ICdzdHJpbmcnIHx8ICFob3N0bmFtZSB8fCB0eXBlb2YgcHJvdG8gIT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuICcnOyAgLy8gRG9uJ3QgcHJveHkgVVJMcyB3aXRob3V0IGEgdmFsaWQgc2NoZW1lIG9yIGhvc3QuXG4gIH1cblxuICBwcm90byA9IHByb3RvLnNwbGl0KCc6JywgMSlbMF07XG4gIC8vIFN0cmlwcGluZyBwb3J0cyBpbiB0aGlzIHdheSBpbnN0ZWFkIG9mIHVzaW5nIHBhcnNlZFVybC5ob3N0bmFtZSB0byBtYWtlXG4gIC8vIHN1cmUgdGhhdCB0aGUgYnJhY2tldHMgYXJvdW5kIElQdjYgYWRkcmVzc2VzIGFyZSBrZXB0LlxuICBob3N0bmFtZSA9IGhvc3RuYW1lLnJlcGxhY2UoLzpcXGQqJC8sICcnKTtcbiAgcG9ydCA9IHBhcnNlSW50KHBvcnQpIHx8IERFRkFVTFRfUE9SVFNbcHJvdG9dIHx8IDA7XG4gIGlmICghc2hvdWxkUHJveHkoaG9zdG5hbWUsIHBvcnQpKSB7XG4gICAgcmV0dXJuICcnOyAgLy8gRG9uJ3QgcHJveHkgVVJMcyB0aGF0IG1hdGNoIE5PX1BST1hZLlxuICB9XG5cbiAgdmFyIHByb3h5ID1cbiAgICBnZXRFbnYoJ25wbV9jb25maWdfJyArIHByb3RvICsgJ19wcm94eScpIHx8XG4gICAgZ2V0RW52KHByb3RvICsgJ19wcm94eScpIHx8XG4gICAgZ2V0RW52KCducG1fY29uZmlnX3Byb3h5JykgfHxcbiAgICBnZXRFbnYoJ2FsbF9wcm94eScpO1xuICBpZiAocHJveHkgJiYgcHJveHkuaW5kZXhPZignOi8vJykgPT09IC0xKSB7XG4gICAgLy8gTWlzc2luZyBzY2hlbWUgaW4gcHJveHksIGRlZmF1bHQgdG8gdGhlIHJlcXVlc3RlZCBVUkwncyBzY2hlbWUuXG4gICAgcHJveHkgPSBwcm90byArICc6Ly8nICsgcHJveHk7XG4gIH1cbiAgcmV0dXJuIHByb3h5O1xufVxuXG4vKipcbiAqIERldGVybWluZXMgd2hldGhlciBhIGdpdmVuIFVSTCBzaG91bGQgYmUgcHJveGllZC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gaG9zdG5hbWUgLSBUaGUgaG9zdCBuYW1lIG9mIHRoZSBVUkwuXG4gKiBAcGFyYW0ge251bWJlcn0gcG9ydCAtIFRoZSBlZmZlY3RpdmUgcG9ydCBvZiB0aGUgVVJMLlxuICogQHJldHVybnMge2Jvb2xlYW59IFdoZXRoZXIgdGhlIGdpdmVuIFVSTCBzaG91bGQgYmUgcHJveGllZC5cbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIHNob3VsZFByb3h5KGhvc3RuYW1lLCBwb3J0KSB7XG4gIHZhciBOT19QUk9YWSA9XG4gICAgKGdldEVudignbnBtX2NvbmZpZ19ub19wcm94eScpIHx8IGdldEVudignbm9fcHJveHknKSkudG9Mb3dlckNhc2UoKTtcbiAgaWYgKCFOT19QUk9YWSkge1xuICAgIHJldHVybiB0cnVlOyAgLy8gQWx3YXlzIHByb3h5IGlmIE5PX1BST1hZIGlzIG5vdCBzZXQuXG4gIH1cbiAgaWYgKE5PX1BST1hZID09PSAnKicpIHtcbiAgICByZXR1cm4gZmFsc2U7ICAvLyBOZXZlciBwcm94eSBpZiB3aWxkY2FyZCBpcyBzZXQuXG4gIH1cblxuICByZXR1cm4gTk9fUFJPWFkuc3BsaXQoL1ssXFxzXS8pLmV2ZXJ5KGZ1bmN0aW9uKHByb3h5KSB7XG4gICAgaWYgKCFwcm94eSkge1xuICAgICAgcmV0dXJuIHRydWU7ICAvLyBTa2lwIHplcm8tbGVuZ3RoIGhvc3RzLlxuICAgIH1cbiAgICB2YXIgcGFyc2VkUHJveHkgPSBwcm94eS5tYXRjaCgvXiguKyk6KFxcZCspJC8pO1xuICAgIHZhciBwYXJzZWRQcm94eUhvc3RuYW1lID0gcGFyc2VkUHJveHkgPyBwYXJzZWRQcm94eVsxXSA6IHByb3h5O1xuICAgIHZhciBwYXJzZWRQcm94eVBvcnQgPSBwYXJzZWRQcm94eSA/IHBhcnNlSW50KHBhcnNlZFByb3h5WzJdKSA6IDA7XG4gICAgaWYgKHBhcnNlZFByb3h5UG9ydCAmJiBwYXJzZWRQcm94eVBvcnQgIT09IHBvcnQpIHtcbiAgICAgIHJldHVybiB0cnVlOyAgLy8gU2tpcCBpZiBwb3J0cyBkb24ndCBtYXRjaC5cbiAgICB9XG5cbiAgICBpZiAoIS9eWy4qXS8udGVzdChwYXJzZWRQcm94eUhvc3RuYW1lKSkge1xuICAgICAgLy8gTm8gd2lsZGNhcmRzLCBzbyBzdG9wIHByb3h5aW5nIGlmIHRoZXJlIGlzIGFuIGV4YWN0IG1hdGNoLlxuICAgICAgcmV0dXJuIGhvc3RuYW1lICE9PSBwYXJzZWRQcm94eUhvc3RuYW1lO1xuICAgIH1cblxuICAgIGlmIChwYXJzZWRQcm94eUhvc3RuYW1lLmNoYXJBdCgwKSA9PT0gJyonKSB7XG4gICAgICAvLyBSZW1vdmUgbGVhZGluZyB3aWxkY2FyZC5cbiAgICAgIHBhcnNlZFByb3h5SG9zdG5hbWUgPSBwYXJzZWRQcm94eUhvc3RuYW1lLnNsaWNlKDEpO1xuICAgIH1cbiAgICAvLyBTdG9wIHByb3h5aW5nIGlmIHRoZSBob3N0bmFtZSBlbmRzIHdpdGggdGhlIG5vX3Byb3h5IGhvc3QuXG4gICAgcmV0dXJuICFzdHJpbmdFbmRzV2l0aC5jYWxsKGhvc3RuYW1lLCBwYXJzZWRQcm94eUhvc3RuYW1lKTtcbiAgfSk7XG59XG5cbi8qKlxuICogR2V0IHRoZSB2YWx1ZSBmb3IgYW4gZW52aXJvbm1lbnQgdmFyaWFibGUuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGtleSAtIFRoZSBuYW1lIG9mIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZS5cbiAqIEByZXR1cm4ge3N0cmluZ30gVGhlIHZhbHVlIG9mIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZS5cbiAqIEBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGdldEVudihrZXkpIHtcbiAgcmV0dXJuIHByb2Nlc3MuZW52W2tleS50b0xvd2VyQ2FzZSgpXSB8fCBwcm9jZXNzLmVudltrZXkudG9VcHBlckNhc2UoKV0gfHwgJyc7XG59XG5cbmV4cG9ydHMuZ2V0UHJveHlGb3JVcmwgPSBnZXRQcm94eUZvclVybDtcbiIsICIvKipcbiAqIEhlbHBlcnMuXG4gKi9cblxudmFyIHMgPSAxMDAwO1xudmFyIG0gPSBzICogNjA7XG52YXIgaCA9IG0gKiA2MDtcbnZhciBkID0gaCAqIDI0O1xudmFyIHcgPSBkICogNztcbnZhciB5ID0gZCAqIDM2NS4yNTtcblxuLyoqXG4gKiBQYXJzZSBvciBmb3JtYXQgdGhlIGdpdmVuIGB2YWxgLlxuICpcbiAqIE9wdGlvbnM6XG4gKlxuICogIC0gYGxvbmdgIHZlcmJvc2UgZm9ybWF0dGluZyBbZmFsc2VdXG4gKlxuICogQHBhcmFtIHtTdHJpbmd8TnVtYmVyfSB2YWxcbiAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc11cbiAqIEB0aHJvd3Mge0Vycm9yfSB0aHJvdyBhbiBlcnJvciBpZiB2YWwgaXMgbm90IGEgbm9uLWVtcHR5IHN0cmluZyBvciBhIG51bWJlclxuICogQHJldHVybiB7U3RyaW5nfE51bWJlcn1cbiAqIEBhcGkgcHVibGljXG4gKi9cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAodmFsLCBvcHRpb25zKSB7XG4gIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICB2YXIgdHlwZSA9IHR5cGVvZiB2YWw7XG4gIGlmICh0eXBlID09PSAnc3RyaW5nJyAmJiB2YWwubGVuZ3RoID4gMCkge1xuICAgIHJldHVybiBwYXJzZSh2YWwpO1xuICB9IGVsc2UgaWYgKHR5cGUgPT09ICdudW1iZXInICYmIGlzRmluaXRlKHZhbCkpIHtcbiAgICByZXR1cm4gb3B0aW9ucy5sb25nID8gZm10TG9uZyh2YWwpIDogZm10U2hvcnQodmFsKTtcbiAgfVxuICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgJ3ZhbCBpcyBub3QgYSBub24tZW1wdHkgc3RyaW5nIG9yIGEgdmFsaWQgbnVtYmVyLiB2YWw9JyArXG4gICAgICBKU09OLnN0cmluZ2lmeSh2YWwpXG4gICk7XG59O1xuXG4vKipcbiAqIFBhcnNlIHRoZSBnaXZlbiBgc3RyYCBhbmQgcmV0dXJuIG1pbGxpc2Vjb25kcy5cbiAqXG4gKiBAcGFyYW0ge1N0cmluZ30gc3RyXG4gKiBAcmV0dXJuIHtOdW1iZXJ9XG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuXG5mdW5jdGlvbiBwYXJzZShzdHIpIHtcbiAgc3RyID0gU3RyaW5nKHN0cik7XG4gIGlmIChzdHIubGVuZ3RoID4gMTAwKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIHZhciBtYXRjaCA9IC9eKC0/KD86XFxkKyk/XFwuP1xcZCspICoobWlsbGlzZWNvbmRzP3xtc2Vjcz98bXN8c2Vjb25kcz98c2Vjcz98c3xtaW51dGVzP3xtaW5zP3xtfGhvdXJzP3xocnM/fGh8ZGF5cz98ZHx3ZWVrcz98d3x5ZWFycz98eXJzP3x5KT8kL2kuZXhlYyhcbiAgICBzdHJcbiAgKTtcbiAgaWYgKCFtYXRjaCkge1xuICAgIHJldHVybjtcbiAgfVxuICB2YXIgbiA9IHBhcnNlRmxvYXQobWF0Y2hbMV0pO1xuICB2YXIgdHlwZSA9IChtYXRjaFsyXSB8fCAnbXMnKS50b0xvd2VyQ2FzZSgpO1xuICBzd2l0Y2ggKHR5cGUpIHtcbiAgICBjYXNlICd5ZWFycyc6XG4gICAgY2FzZSAneWVhcic6XG4gICAgY2FzZSAneXJzJzpcbiAgICBjYXNlICd5cic6XG4gICAgY2FzZSAneSc6XG4gICAgICByZXR1cm4gbiAqIHk7XG4gICAgY2FzZSAnd2Vla3MnOlxuICAgIGNhc2UgJ3dlZWsnOlxuICAgIGNhc2UgJ3cnOlxuICAgICAgcmV0dXJuIG4gKiB3O1xuICAgIGNhc2UgJ2RheXMnOlxuICAgIGNhc2UgJ2RheSc6XG4gICAgY2FzZSAnZCc6XG4gICAgICByZXR1cm4gbiAqIGQ7XG4gICAgY2FzZSAnaG91cnMnOlxuICAgIGNhc2UgJ2hvdXInOlxuICAgIGNhc2UgJ2hycyc6XG4gICAgY2FzZSAnaHInOlxuICAgIGNhc2UgJ2gnOlxuICAgICAgcmV0dXJuIG4gKiBoO1xuICAgIGNhc2UgJ21pbnV0ZXMnOlxuICAgIGNhc2UgJ21pbnV0ZSc6XG4gICAgY2FzZSAnbWlucyc6XG4gICAgY2FzZSAnbWluJzpcbiAgICBjYXNlICdtJzpcbiAgICAgIHJldHVybiBuICogbTtcbiAgICBjYXNlICdzZWNvbmRzJzpcbiAgICBjYXNlICdzZWNvbmQnOlxuICAgIGNhc2UgJ3NlY3MnOlxuICAgIGNhc2UgJ3NlYyc6XG4gICAgY2FzZSAncyc6XG4gICAgICByZXR1cm4gbiAqIHM7XG4gICAgY2FzZSAnbWlsbGlzZWNvbmRzJzpcbiAgICBjYXNlICdtaWxsaXNlY29uZCc6XG4gICAgY2FzZSAnbXNlY3MnOlxuICAgIGNhc2UgJ21zZWMnOlxuICAgIGNhc2UgJ21zJzpcbiAgICAgIHJldHVybiBuO1xuICAgIGRlZmF1bHQ6XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG59XG5cbi8qKlxuICogU2hvcnQgZm9ybWF0IGZvciBgbXNgLlxuICpcbiAqIEBwYXJhbSB7TnVtYmVyfSBtc1xuICogQHJldHVybiB7U3RyaW5nfVxuICogQGFwaSBwcml2YXRlXG4gKi9cblxuZnVuY3Rpb24gZm10U2hvcnQobXMpIHtcbiAgdmFyIG1zQWJzID0gTWF0aC5hYnMobXMpO1xuICBpZiAobXNBYnMgPj0gZCkge1xuICAgIHJldHVybiBNYXRoLnJvdW5kKG1zIC8gZCkgKyAnZCc7XG4gIH1cbiAgaWYgKG1zQWJzID49IGgpIHtcbiAgICByZXR1cm4gTWF0aC5yb3VuZChtcyAvIGgpICsgJ2gnO1xuICB9XG4gIGlmIChtc0FicyA+PSBtKSB7XG4gICAgcmV0dXJuIE1hdGgucm91bmQobXMgLyBtKSArICdtJztcbiAgfVxuICBpZiAobXNBYnMgPj0gcykge1xuICAgIHJldHVybiBNYXRoLnJvdW5kKG1zIC8gcykgKyAncyc7XG4gIH1cbiAgcmV0dXJuIG1zICsgJ21zJztcbn1cblxuLyoqXG4gKiBMb25nIGZvcm1hdCBmb3IgYG1zYC5cbiAqXG4gKiBAcGFyYW0ge051bWJlcn0gbXNcbiAqIEByZXR1cm4ge1N0cmluZ31cbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cbmZ1bmN0aW9uIGZtdExvbmcobXMpIHtcbiAgdmFyIG1zQWJzID0gTWF0aC5hYnMobXMpO1xuICBpZiAobXNBYnMgPj0gZCkge1xuICAgIHJldHVybiBwbHVyYWwobXMsIG1zQWJzLCBkLCAnZGF5Jyk7XG4gIH1cbiAgaWYgKG1zQWJzID49IGgpIHtcbiAgICByZXR1cm4gcGx1cmFsKG1zLCBtc0FicywgaCwgJ2hvdXInKTtcbiAgfVxuICBpZiAobXNBYnMgPj0gbSkge1xuICAgIHJldHVybiBwbHVyYWwobXMsIG1zQWJzLCBtLCAnbWludXRlJyk7XG4gIH1cbiAgaWYgKG1zQWJzID49IHMpIHtcbiAgICByZXR1cm4gcGx1cmFsKG1zLCBtc0FicywgcywgJ3NlY29uZCcpO1xuICB9XG4gIHJldHVybiBtcyArICcgbXMnO1xufVxuXG4vKipcbiAqIFBsdXJhbGl6YXRpb24gaGVscGVyLlxuICovXG5cbmZ1bmN0aW9uIHBsdXJhbChtcywgbXNBYnMsIG4sIG5hbWUpIHtcbiAgdmFyIGlzUGx1cmFsID0gbXNBYnMgPj0gbiAqIDEuNTtcbiAgcmV0dXJuIE1hdGgucm91bmQobXMgLyBuKSArICcgJyArIG5hbWUgKyAoaXNQbHVyYWwgPyAncycgOiAnJyk7XG59XG4iLCAiXG4vKipcbiAqIFRoaXMgaXMgdGhlIGNvbW1vbiBsb2dpYyBmb3IgYm90aCB0aGUgTm9kZS5qcyBhbmQgd2ViIGJyb3dzZXJcbiAqIGltcGxlbWVudGF0aW9ucyBvZiBgZGVidWcoKWAuXG4gKi9cblxuZnVuY3Rpb24gc2V0dXAoZW52KSB7XG5cdGNyZWF0ZURlYnVnLmRlYnVnID0gY3JlYXRlRGVidWc7XG5cdGNyZWF0ZURlYnVnLmRlZmF1bHQgPSBjcmVhdGVEZWJ1Zztcblx0Y3JlYXRlRGVidWcuY29lcmNlID0gY29lcmNlO1xuXHRjcmVhdGVEZWJ1Zy5kaXNhYmxlID0gZGlzYWJsZTtcblx0Y3JlYXRlRGVidWcuZW5hYmxlID0gZW5hYmxlO1xuXHRjcmVhdGVEZWJ1Zy5lbmFibGVkID0gZW5hYmxlZDtcblx0Y3JlYXRlRGVidWcuaHVtYW5pemUgPSByZXF1aXJlKCdtcycpO1xuXHRjcmVhdGVEZWJ1Zy5kZXN0cm95ID0gZGVzdHJveTtcblxuXHRPYmplY3Qua2V5cyhlbnYpLmZvckVhY2goa2V5ID0+IHtcblx0XHRjcmVhdGVEZWJ1Z1trZXldID0gZW52W2tleV07XG5cdH0pO1xuXG5cdC8qKlxuXHQqIFRoZSBjdXJyZW50bHkgYWN0aXZlIGRlYnVnIG1vZGUgbmFtZXMsIGFuZCBuYW1lcyB0byBza2lwLlxuXHQqL1xuXG5cdGNyZWF0ZURlYnVnLm5hbWVzID0gW107XG5cdGNyZWF0ZURlYnVnLnNraXBzID0gW107XG5cblx0LyoqXG5cdCogTWFwIG9mIHNwZWNpYWwgXCIlblwiIGhhbmRsaW5nIGZ1bmN0aW9ucywgZm9yIHRoZSBkZWJ1ZyBcImZvcm1hdFwiIGFyZ3VtZW50LlxuXHQqXG5cdCogVmFsaWQga2V5IG5hbWVzIGFyZSBhIHNpbmdsZSwgbG93ZXIgb3IgdXBwZXItY2FzZSBsZXR0ZXIsIGkuZS4gXCJuXCIgYW5kIFwiTlwiLlxuXHQqL1xuXHRjcmVhdGVEZWJ1Zy5mb3JtYXR0ZXJzID0ge307XG5cblx0LyoqXG5cdCogU2VsZWN0cyBhIGNvbG9yIGZvciBhIGRlYnVnIG5hbWVzcGFjZVxuXHQqIEBwYXJhbSB7U3RyaW5nfSBuYW1lc3BhY2UgVGhlIG5hbWVzcGFjZSBzdHJpbmcgZm9yIHRoZSBkZWJ1ZyBpbnN0YW5jZSB0byBiZSBjb2xvcmVkXG5cdCogQHJldHVybiB7TnVtYmVyfFN0cmluZ30gQW4gQU5TSSBjb2xvciBjb2RlIGZvciB0aGUgZ2l2ZW4gbmFtZXNwYWNlXG5cdCogQGFwaSBwcml2YXRlXG5cdCovXG5cdGZ1bmN0aW9uIHNlbGVjdENvbG9yKG5hbWVzcGFjZSkge1xuXHRcdGxldCBoYXNoID0gMDtcblxuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgbmFtZXNwYWNlLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRoYXNoID0gKChoYXNoIDw8IDUpIC0gaGFzaCkgKyBuYW1lc3BhY2UuY2hhckNvZGVBdChpKTtcblx0XHRcdGhhc2ggfD0gMDsgLy8gQ29udmVydCB0byAzMmJpdCBpbnRlZ2VyXG5cdFx0fVxuXG5cdFx0cmV0dXJuIGNyZWF0ZURlYnVnLmNvbG9yc1tNYXRoLmFicyhoYXNoKSAlIGNyZWF0ZURlYnVnLmNvbG9ycy5sZW5ndGhdO1xuXHR9XG5cdGNyZWF0ZURlYnVnLnNlbGVjdENvbG9yID0gc2VsZWN0Q29sb3I7XG5cblx0LyoqXG5cdCogQ3JlYXRlIGEgZGVidWdnZXIgd2l0aCB0aGUgZ2l2ZW4gYG5hbWVzcGFjZWAuXG5cdCpcblx0KiBAcGFyYW0ge1N0cmluZ30gbmFtZXNwYWNlXG5cdCogQHJldHVybiB7RnVuY3Rpb259XG5cdCogQGFwaSBwdWJsaWNcblx0Ki9cblx0ZnVuY3Rpb24gY3JlYXRlRGVidWcobmFtZXNwYWNlKSB7XG5cdFx0bGV0IHByZXZUaW1lO1xuXHRcdGxldCBlbmFibGVPdmVycmlkZSA9IG51bGw7XG5cdFx0bGV0IG5hbWVzcGFjZXNDYWNoZTtcblx0XHRsZXQgZW5hYmxlZENhY2hlO1xuXG5cdFx0ZnVuY3Rpb24gZGVidWcoLi4uYXJncykge1xuXHRcdFx0Ly8gRGlzYWJsZWQ/XG5cdFx0XHRpZiAoIWRlYnVnLmVuYWJsZWQpIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHRjb25zdCBzZWxmID0gZGVidWc7XG5cblx0XHRcdC8vIFNldCBgZGlmZmAgdGltZXN0YW1wXG5cdFx0XHRjb25zdCBjdXJyID0gTnVtYmVyKG5ldyBEYXRlKCkpO1xuXHRcdFx0Y29uc3QgbXMgPSBjdXJyIC0gKHByZXZUaW1lIHx8IGN1cnIpO1xuXHRcdFx0c2VsZi5kaWZmID0gbXM7XG5cdFx0XHRzZWxmLnByZXYgPSBwcmV2VGltZTtcblx0XHRcdHNlbGYuY3VyciA9IGN1cnI7XG5cdFx0XHRwcmV2VGltZSA9IGN1cnI7XG5cblx0XHRcdGFyZ3NbMF0gPSBjcmVhdGVEZWJ1Zy5jb2VyY2UoYXJnc1swXSk7XG5cblx0XHRcdGlmICh0eXBlb2YgYXJnc1swXSAhPT0gJ3N0cmluZycpIHtcblx0XHRcdFx0Ly8gQW55dGhpbmcgZWxzZSBsZXQncyBpbnNwZWN0IHdpdGggJU9cblx0XHRcdFx0YXJncy51bnNoaWZ0KCclTycpO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBBcHBseSBhbnkgYGZvcm1hdHRlcnNgIHRyYW5zZm9ybWF0aW9uc1xuXHRcdFx0bGV0IGluZGV4ID0gMDtcblx0XHRcdGFyZ3NbMF0gPSBhcmdzWzBdLnJlcGxhY2UoLyUoW2EtekEtWiVdKS9nLCAobWF0Y2gsIGZvcm1hdCkgPT4ge1xuXHRcdFx0XHQvLyBJZiB3ZSBlbmNvdW50ZXIgYW4gZXNjYXBlZCAlIHRoZW4gZG9uJ3QgaW5jcmVhc2UgdGhlIGFycmF5IGluZGV4XG5cdFx0XHRcdGlmIChtYXRjaCA9PT0gJyUlJykge1xuXHRcdFx0XHRcdHJldHVybiAnJSc7XG5cdFx0XHRcdH1cblx0XHRcdFx0aW5kZXgrKztcblx0XHRcdFx0Y29uc3QgZm9ybWF0dGVyID0gY3JlYXRlRGVidWcuZm9ybWF0dGVyc1tmb3JtYXRdO1xuXHRcdFx0XHRpZiAodHlwZW9mIGZvcm1hdHRlciA9PT0gJ2Z1bmN0aW9uJykge1xuXHRcdFx0XHRcdGNvbnN0IHZhbCA9IGFyZ3NbaW5kZXhdO1xuXHRcdFx0XHRcdG1hdGNoID0gZm9ybWF0dGVyLmNhbGwoc2VsZiwgdmFsKTtcblxuXHRcdFx0XHRcdC8vIE5vdyB3ZSBuZWVkIHRvIHJlbW92ZSBgYXJnc1tpbmRleF1gIHNpbmNlIGl0J3MgaW5saW5lZCBpbiB0aGUgYGZvcm1hdGBcblx0XHRcdFx0XHRhcmdzLnNwbGljZShpbmRleCwgMSk7XG5cdFx0XHRcdFx0aW5kZXgtLTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gbWF0Y2g7XG5cdFx0XHR9KTtcblxuXHRcdFx0Ly8gQXBwbHkgZW52LXNwZWNpZmljIGZvcm1hdHRpbmcgKGNvbG9ycywgZXRjLilcblx0XHRcdGNyZWF0ZURlYnVnLmZvcm1hdEFyZ3MuY2FsbChzZWxmLCBhcmdzKTtcblxuXHRcdFx0Y29uc3QgbG9nRm4gPSBzZWxmLmxvZyB8fCBjcmVhdGVEZWJ1Zy5sb2c7XG5cdFx0XHRsb2dGbi5hcHBseShzZWxmLCBhcmdzKTtcblx0XHR9XG5cblx0XHRkZWJ1Zy5uYW1lc3BhY2UgPSBuYW1lc3BhY2U7XG5cdFx0ZGVidWcudXNlQ29sb3JzID0gY3JlYXRlRGVidWcudXNlQ29sb3JzKCk7XG5cdFx0ZGVidWcuY29sb3IgPSBjcmVhdGVEZWJ1Zy5zZWxlY3RDb2xvcihuYW1lc3BhY2UpO1xuXHRcdGRlYnVnLmV4dGVuZCA9IGV4dGVuZDtcblx0XHRkZWJ1Zy5kZXN0cm95ID0gY3JlYXRlRGVidWcuZGVzdHJveTsgLy8gWFhYIFRlbXBvcmFyeS4gV2lsbCBiZSByZW1vdmVkIGluIHRoZSBuZXh0IG1ham9yIHJlbGVhc2UuXG5cblx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZGVidWcsICdlbmFibGVkJywge1xuXHRcdFx0ZW51bWVyYWJsZTogdHJ1ZSxcblx0XHRcdGNvbmZpZ3VyYWJsZTogZmFsc2UsXG5cdFx0XHRnZXQ6ICgpID0+IHtcblx0XHRcdFx0aWYgKGVuYWJsZU92ZXJyaWRlICE9PSBudWxsKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGVuYWJsZU92ZXJyaWRlO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmIChuYW1lc3BhY2VzQ2FjaGUgIT09IGNyZWF0ZURlYnVnLm5hbWVzcGFjZXMpIHtcblx0XHRcdFx0XHRuYW1lc3BhY2VzQ2FjaGUgPSBjcmVhdGVEZWJ1Zy5uYW1lc3BhY2VzO1xuXHRcdFx0XHRcdGVuYWJsZWRDYWNoZSA9IGNyZWF0ZURlYnVnLmVuYWJsZWQobmFtZXNwYWNlKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiBlbmFibGVkQ2FjaGU7XG5cdFx0XHR9LFxuXHRcdFx0c2V0OiB2ID0+IHtcblx0XHRcdFx0ZW5hYmxlT3ZlcnJpZGUgPSB2O1xuXHRcdFx0fVxuXHRcdH0pO1xuXG5cdFx0Ly8gRW52LXNwZWNpZmljIGluaXRpYWxpemF0aW9uIGxvZ2ljIGZvciBkZWJ1ZyBpbnN0YW5jZXNcblx0XHRpZiAodHlwZW9mIGNyZWF0ZURlYnVnLmluaXQgPT09ICdmdW5jdGlvbicpIHtcblx0XHRcdGNyZWF0ZURlYnVnLmluaXQoZGVidWcpO1xuXHRcdH1cblxuXHRcdHJldHVybiBkZWJ1Zztcblx0fVxuXG5cdGZ1bmN0aW9uIGV4dGVuZChuYW1lc3BhY2UsIGRlbGltaXRlcikge1xuXHRcdGNvbnN0IG5ld0RlYnVnID0gY3JlYXRlRGVidWcodGhpcy5uYW1lc3BhY2UgKyAodHlwZW9mIGRlbGltaXRlciA9PT0gJ3VuZGVmaW5lZCcgPyAnOicgOiBkZWxpbWl0ZXIpICsgbmFtZXNwYWNlKTtcblx0XHRuZXdEZWJ1Zy5sb2cgPSB0aGlzLmxvZztcblx0XHRyZXR1cm4gbmV3RGVidWc7XG5cdH1cblxuXHQvKipcblx0KiBFbmFibGVzIGEgZGVidWcgbW9kZSBieSBuYW1lc3BhY2VzLiBUaGlzIGNhbiBpbmNsdWRlIG1vZGVzXG5cdCogc2VwYXJhdGVkIGJ5IGEgY29sb24gYW5kIHdpbGRjYXJkcy5cblx0KlxuXHQqIEBwYXJhbSB7U3RyaW5nfSBuYW1lc3BhY2VzXG5cdCogQGFwaSBwdWJsaWNcblx0Ki9cblx0ZnVuY3Rpb24gZW5hYmxlKG5hbWVzcGFjZXMpIHtcblx0XHRjcmVhdGVEZWJ1Zy5zYXZlKG5hbWVzcGFjZXMpO1xuXHRcdGNyZWF0ZURlYnVnLm5hbWVzcGFjZXMgPSBuYW1lc3BhY2VzO1xuXG5cdFx0Y3JlYXRlRGVidWcubmFtZXMgPSBbXTtcblx0XHRjcmVhdGVEZWJ1Zy5za2lwcyA9IFtdO1xuXG5cdFx0Y29uc3Qgc3BsaXQgPSAodHlwZW9mIG5hbWVzcGFjZXMgPT09ICdzdHJpbmcnID8gbmFtZXNwYWNlcyA6ICcnKVxuXHRcdFx0LnRyaW0oKVxuXHRcdFx0LnJlcGxhY2UoJyAnLCAnLCcpXG5cdFx0XHQuc3BsaXQoJywnKVxuXHRcdFx0LmZpbHRlcihCb29sZWFuKTtcblxuXHRcdGZvciAoY29uc3QgbnMgb2Ygc3BsaXQpIHtcblx0XHRcdGlmIChuc1swXSA9PT0gJy0nKSB7XG5cdFx0XHRcdGNyZWF0ZURlYnVnLnNraXBzLnB1c2gobnMuc2xpY2UoMSkpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Y3JlYXRlRGVidWcubmFtZXMucHVzaChucyk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0LyoqXG5cdCAqIENoZWNrcyBpZiB0aGUgZ2l2ZW4gc3RyaW5nIG1hdGNoZXMgYSBuYW1lc3BhY2UgdGVtcGxhdGUsIGhvbm9yaW5nXG5cdCAqIGFzdGVyaXNrcyBhcyB3aWxkY2FyZHMuXG5cdCAqXG5cdCAqIEBwYXJhbSB7U3RyaW5nfSBzZWFyY2hcblx0ICogQHBhcmFtIHtTdHJpbmd9IHRlbXBsYXRlXG5cdCAqIEByZXR1cm4ge0Jvb2xlYW59XG5cdCAqL1xuXHRmdW5jdGlvbiBtYXRjaGVzVGVtcGxhdGUoc2VhcmNoLCB0ZW1wbGF0ZSkge1xuXHRcdGxldCBzZWFyY2hJbmRleCA9IDA7XG5cdFx0bGV0IHRlbXBsYXRlSW5kZXggPSAwO1xuXHRcdGxldCBzdGFySW5kZXggPSAtMTtcblx0XHRsZXQgbWF0Y2hJbmRleCA9IDA7XG5cblx0XHR3aGlsZSAoc2VhcmNoSW5kZXggPCBzZWFyY2gubGVuZ3RoKSB7XG5cdFx0XHRpZiAodGVtcGxhdGVJbmRleCA8IHRlbXBsYXRlLmxlbmd0aCAmJiAodGVtcGxhdGVbdGVtcGxhdGVJbmRleF0gPT09IHNlYXJjaFtzZWFyY2hJbmRleF0gfHwgdGVtcGxhdGVbdGVtcGxhdGVJbmRleF0gPT09ICcqJykpIHtcblx0XHRcdFx0Ly8gTWF0Y2ggY2hhcmFjdGVyIG9yIHByb2NlZWQgd2l0aCB3aWxkY2FyZFxuXHRcdFx0XHRpZiAodGVtcGxhdGVbdGVtcGxhdGVJbmRleF0gPT09ICcqJykge1xuXHRcdFx0XHRcdHN0YXJJbmRleCA9IHRlbXBsYXRlSW5kZXg7XG5cdFx0XHRcdFx0bWF0Y2hJbmRleCA9IHNlYXJjaEluZGV4O1xuXHRcdFx0XHRcdHRlbXBsYXRlSW5kZXgrKzsgLy8gU2tpcCB0aGUgJyonXG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0c2VhcmNoSW5kZXgrKztcblx0XHRcdFx0XHR0ZW1wbGF0ZUluZGV4Kys7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSBpZiAoc3RhckluZGV4ICE9PSAtMSkgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLW5lZ2F0ZWQtY29uZGl0aW9uXG5cdFx0XHRcdC8vIEJhY2t0cmFjayB0byB0aGUgbGFzdCAnKicgYW5kIHRyeSB0byBtYXRjaCBtb3JlIGNoYXJhY3RlcnNcblx0XHRcdFx0dGVtcGxhdGVJbmRleCA9IHN0YXJJbmRleCArIDE7XG5cdFx0XHRcdG1hdGNoSW5kZXgrKztcblx0XHRcdFx0c2VhcmNoSW5kZXggPSBtYXRjaEluZGV4O1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0cmV0dXJuIGZhbHNlOyAvLyBObyBtYXRjaFxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIEhhbmRsZSB0cmFpbGluZyAnKicgaW4gdGVtcGxhdGVcblx0XHR3aGlsZSAodGVtcGxhdGVJbmRleCA8IHRlbXBsYXRlLmxlbmd0aCAmJiB0ZW1wbGF0ZVt0ZW1wbGF0ZUluZGV4XSA9PT0gJyonKSB7XG5cdFx0XHR0ZW1wbGF0ZUluZGV4Kys7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRlbXBsYXRlSW5kZXggPT09IHRlbXBsYXRlLmxlbmd0aDtcblx0fVxuXG5cdC8qKlxuXHQqIERpc2FibGUgZGVidWcgb3V0cHV0LlxuXHQqXG5cdCogQHJldHVybiB7U3RyaW5nfSBuYW1lc3BhY2VzXG5cdCogQGFwaSBwdWJsaWNcblx0Ki9cblx0ZnVuY3Rpb24gZGlzYWJsZSgpIHtcblx0XHRjb25zdCBuYW1lc3BhY2VzID0gW1xuXHRcdFx0Li4uY3JlYXRlRGVidWcubmFtZXMsXG5cdFx0XHQuLi5jcmVhdGVEZWJ1Zy5za2lwcy5tYXAobmFtZXNwYWNlID0+ICctJyArIG5hbWVzcGFjZSlcblx0XHRdLmpvaW4oJywnKTtcblx0XHRjcmVhdGVEZWJ1Zy5lbmFibGUoJycpO1xuXHRcdHJldHVybiBuYW1lc3BhY2VzO1xuXHR9XG5cblx0LyoqXG5cdCogUmV0dXJucyB0cnVlIGlmIHRoZSBnaXZlbiBtb2RlIG5hbWUgaXMgZW5hYmxlZCwgZmFsc2Ugb3RoZXJ3aXNlLlxuXHQqXG5cdCogQHBhcmFtIHtTdHJpbmd9IG5hbWVcblx0KiBAcmV0dXJuIHtCb29sZWFufVxuXHQqIEBhcGkgcHVibGljXG5cdCovXG5cdGZ1bmN0aW9uIGVuYWJsZWQobmFtZSkge1xuXHRcdGZvciAoY29uc3Qgc2tpcCBvZiBjcmVhdGVEZWJ1Zy5za2lwcykge1xuXHRcdFx0aWYgKG1hdGNoZXNUZW1wbGF0ZShuYW1lLCBza2lwKSkge1xuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Zm9yIChjb25zdCBucyBvZiBjcmVhdGVEZWJ1Zy5uYW1lcykge1xuXHRcdFx0aWYgKG1hdGNoZXNUZW1wbGF0ZShuYW1lLCBucykpIHtcblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0LyoqXG5cdCogQ29lcmNlIGB2YWxgLlxuXHQqXG5cdCogQHBhcmFtIHtNaXhlZH0gdmFsXG5cdCogQHJldHVybiB7TWl4ZWR9XG5cdCogQGFwaSBwcml2YXRlXG5cdCovXG5cdGZ1bmN0aW9uIGNvZXJjZSh2YWwpIHtcblx0XHRpZiAodmFsIGluc3RhbmNlb2YgRXJyb3IpIHtcblx0XHRcdHJldHVybiB2YWwuc3RhY2sgfHwgdmFsLm1lc3NhZ2U7XG5cdFx0fVxuXHRcdHJldHVybiB2YWw7XG5cdH1cblxuXHQvKipcblx0KiBYWFggRE8gTk9UIFVTRS4gVGhpcyBpcyBhIHRlbXBvcmFyeSBzdHViIGZ1bmN0aW9uLlxuXHQqIFhYWCBJdCBXSUxMIGJlIHJlbW92ZWQgaW4gdGhlIG5leHQgbWFqb3IgcmVsZWFzZS5cblx0Ki9cblx0ZnVuY3Rpb24gZGVzdHJveSgpIHtcblx0XHRjb25zb2xlLndhcm4oJ0luc3RhbmNlIG1ldGhvZCBgZGVidWcuZGVzdHJveSgpYCBpcyBkZXByZWNhdGVkIGFuZCBubyBsb25nZXIgZG9lcyBhbnl0aGluZy4gSXQgd2lsbCBiZSByZW1vdmVkIGluIHRoZSBuZXh0IG1ham9yIHZlcnNpb24gb2YgYGRlYnVnYC4nKTtcblx0fVxuXG5cdGNyZWF0ZURlYnVnLmVuYWJsZShjcmVhdGVEZWJ1Zy5sb2FkKCkpO1xuXG5cdHJldHVybiBjcmVhdGVEZWJ1Zztcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzZXR1cDtcbiIsICIvKiBlc2xpbnQtZW52IGJyb3dzZXIgKi9cblxuLyoqXG4gKiBUaGlzIGlzIHRoZSB3ZWIgYnJvd3NlciBpbXBsZW1lbnRhdGlvbiBvZiBgZGVidWcoKWAuXG4gKi9cblxuZXhwb3J0cy5mb3JtYXRBcmdzID0gZm9ybWF0QXJncztcbmV4cG9ydHMuc2F2ZSA9IHNhdmU7XG5leHBvcnRzLmxvYWQgPSBsb2FkO1xuZXhwb3J0cy51c2VDb2xvcnMgPSB1c2VDb2xvcnM7XG5leHBvcnRzLnN0b3JhZ2UgPSBsb2NhbHN0b3JhZ2UoKTtcbmV4cG9ydHMuZGVzdHJveSA9ICgoKSA9PiB7XG5cdGxldCB3YXJuZWQgPSBmYWxzZTtcblxuXHRyZXR1cm4gKCkgPT4ge1xuXHRcdGlmICghd2FybmVkKSB7XG5cdFx0XHR3YXJuZWQgPSB0cnVlO1xuXHRcdFx0Y29uc29sZS53YXJuKCdJbnN0YW5jZSBtZXRob2QgYGRlYnVnLmRlc3Ryb3koKWAgaXMgZGVwcmVjYXRlZCBhbmQgbm8gbG9uZ2VyIGRvZXMgYW55dGhpbmcuIEl0IHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgbmV4dCBtYWpvciB2ZXJzaW9uIG9mIGBkZWJ1Z2AuJyk7XG5cdFx0fVxuXHR9O1xufSkoKTtcblxuLyoqXG4gKiBDb2xvcnMuXG4gKi9cblxuZXhwb3J0cy5jb2xvcnMgPSBbXG5cdCcjMDAwMENDJyxcblx0JyMwMDAwRkYnLFxuXHQnIzAwMzNDQycsXG5cdCcjMDAzM0ZGJyxcblx0JyMwMDY2Q0MnLFxuXHQnIzAwNjZGRicsXG5cdCcjMDA5OUNDJyxcblx0JyMwMDk5RkYnLFxuXHQnIzAwQ0MwMCcsXG5cdCcjMDBDQzMzJyxcblx0JyMwMENDNjYnLFxuXHQnIzAwQ0M5OScsXG5cdCcjMDBDQ0NDJyxcblx0JyMwMENDRkYnLFxuXHQnIzMzMDBDQycsXG5cdCcjMzMwMEZGJyxcblx0JyMzMzMzQ0MnLFxuXHQnIzMzMzNGRicsXG5cdCcjMzM2NkNDJyxcblx0JyMzMzY2RkYnLFxuXHQnIzMzOTlDQycsXG5cdCcjMzM5OUZGJyxcblx0JyMzM0NDMDAnLFxuXHQnIzMzQ0MzMycsXG5cdCcjMzNDQzY2Jyxcblx0JyMzM0NDOTknLFxuXHQnIzMzQ0NDQycsXG5cdCcjMzNDQ0ZGJyxcblx0JyM2NjAwQ0MnLFxuXHQnIzY2MDBGRicsXG5cdCcjNjYzM0NDJyxcblx0JyM2NjMzRkYnLFxuXHQnIzY2Q0MwMCcsXG5cdCcjNjZDQzMzJyxcblx0JyM5OTAwQ0MnLFxuXHQnIzk5MDBGRicsXG5cdCcjOTkzM0NDJyxcblx0JyM5OTMzRkYnLFxuXHQnIzk5Q0MwMCcsXG5cdCcjOTlDQzMzJyxcblx0JyNDQzAwMDAnLFxuXHQnI0NDMDAzMycsXG5cdCcjQ0MwMDY2Jyxcblx0JyNDQzAwOTknLFxuXHQnI0NDMDBDQycsXG5cdCcjQ0MwMEZGJyxcblx0JyNDQzMzMDAnLFxuXHQnI0NDMzMzMycsXG5cdCcjQ0MzMzY2Jyxcblx0JyNDQzMzOTknLFxuXHQnI0NDMzNDQycsXG5cdCcjQ0MzM0ZGJyxcblx0JyNDQzY2MDAnLFxuXHQnI0NDNjYzMycsXG5cdCcjQ0M5OTAwJyxcblx0JyNDQzk5MzMnLFxuXHQnI0NDQ0MwMCcsXG5cdCcjQ0NDQzMzJyxcblx0JyNGRjAwMDAnLFxuXHQnI0ZGMDAzMycsXG5cdCcjRkYwMDY2Jyxcblx0JyNGRjAwOTknLFxuXHQnI0ZGMDBDQycsXG5cdCcjRkYwMEZGJyxcblx0JyNGRjMzMDAnLFxuXHQnI0ZGMzMzMycsXG5cdCcjRkYzMzY2Jyxcblx0JyNGRjMzOTknLFxuXHQnI0ZGMzNDQycsXG5cdCcjRkYzM0ZGJyxcblx0JyNGRjY2MDAnLFxuXHQnI0ZGNjYzMycsXG5cdCcjRkY5OTAwJyxcblx0JyNGRjk5MzMnLFxuXHQnI0ZGQ0MwMCcsXG5cdCcjRkZDQzMzJ1xuXTtcblxuLyoqXG4gKiBDdXJyZW50bHkgb25seSBXZWJLaXQtYmFzZWQgV2ViIEluc3BlY3RvcnMsIEZpcmVmb3ggPj0gdjMxLFxuICogYW5kIHRoZSBGaXJlYnVnIGV4dGVuc2lvbiAoYW55IEZpcmVmb3ggdmVyc2lvbikgYXJlIGtub3duXG4gKiB0byBzdXBwb3J0IFwiJWNcIiBDU1MgY3VzdG9taXphdGlvbnMuXG4gKlxuICogVE9ETzogYWRkIGEgYGxvY2FsU3RvcmFnZWAgdmFyaWFibGUgdG8gZXhwbGljaXRseSBlbmFibGUvZGlzYWJsZSBjb2xvcnNcbiAqL1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29tcGxleGl0eVxuZnVuY3Rpb24gdXNlQ29sb3JzKCkge1xuXHQvLyBOQjogSW4gYW4gRWxlY3Ryb24gcHJlbG9hZCBzY3JpcHQsIGRvY3VtZW50IHdpbGwgYmUgZGVmaW5lZCBidXQgbm90IGZ1bGx5XG5cdC8vIGluaXRpYWxpemVkLiBTaW5jZSB3ZSBrbm93IHdlJ3JlIGluIENocm9tZSwgd2UnbGwganVzdCBkZXRlY3QgdGhpcyBjYXNlXG5cdC8vIGV4cGxpY2l0bHlcblx0aWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHdpbmRvdy5wcm9jZXNzICYmICh3aW5kb3cucHJvY2Vzcy50eXBlID09PSAncmVuZGVyZXInIHx8IHdpbmRvdy5wcm9jZXNzLl9fbndqcykpIHtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXG5cdC8vIEludGVybmV0IEV4cGxvcmVyIGFuZCBFZGdlIGRvIG5vdCBzdXBwb3J0IGNvbG9ycy5cblx0aWYgKHR5cGVvZiBuYXZpZ2F0b3IgIT09ICd1bmRlZmluZWQnICYmIG5hdmlnYXRvci51c2VyQWdlbnQgJiYgbmF2aWdhdG9yLnVzZXJBZ2VudC50b0xvd2VyQ2FzZSgpLm1hdGNoKC8oZWRnZXx0cmlkZW50KVxcLyhcXGQrKS8pKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0bGV0IG07XG5cblx0Ly8gSXMgd2Via2l0PyBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vYS8xNjQ1OTYwNi8zNzY3NzNcblx0Ly8gZG9jdW1lbnQgaXMgdW5kZWZpbmVkIGluIHJlYWN0LW5hdGl2ZTogaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlYWN0LW5hdGl2ZS9wdWxsLzE2MzJcblx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXJldHVybi1hc3NpZ25cblx0cmV0dXJuICh0eXBlb2YgZG9jdW1lbnQgIT09ICd1bmRlZmluZWQnICYmIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCAmJiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc3R5bGUgJiYgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnN0eWxlLldlYmtpdEFwcGVhcmFuY2UpIHx8XG5cdFx0Ly8gSXMgZmlyZWJ1Zz8gaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL2EvMzk4MTIwLzM3Njc3M1xuXHRcdCh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB3aW5kb3cuY29uc29sZSAmJiAod2luZG93LmNvbnNvbGUuZmlyZWJ1ZyB8fCAod2luZG93LmNvbnNvbGUuZXhjZXB0aW9uICYmIHdpbmRvdy5jb25zb2xlLnRhYmxlKSkpIHx8XG5cdFx0Ly8gSXMgZmlyZWZveCA+PSB2MzE/XG5cdFx0Ly8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9Ub29scy9XZWJfQ29uc29sZSNTdHlsaW5nX21lc3NhZ2VzXG5cdFx0KHR5cGVvZiBuYXZpZ2F0b3IgIT09ICd1bmRlZmluZWQnICYmIG5hdmlnYXRvci51c2VyQWdlbnQgJiYgKG0gPSBuYXZpZ2F0b3IudXNlckFnZW50LnRvTG93ZXJDYXNlKCkubWF0Y2goL2ZpcmVmb3hcXC8oXFxkKykvKSkgJiYgcGFyc2VJbnQobVsxXSwgMTApID49IDMxKSB8fFxuXHRcdC8vIERvdWJsZSBjaGVjayB3ZWJraXQgaW4gdXNlckFnZW50IGp1c3QgaW4gY2FzZSB3ZSBhcmUgaW4gYSB3b3JrZXJcblx0XHQodHlwZW9mIG5hdmlnYXRvciAhPT0gJ3VuZGVmaW5lZCcgJiYgbmF2aWdhdG9yLnVzZXJBZ2VudCAmJiBuYXZpZ2F0b3IudXNlckFnZW50LnRvTG93ZXJDYXNlKCkubWF0Y2goL2FwcGxld2Via2l0XFwvKFxcZCspLykpO1xufVxuXG4vKipcbiAqIENvbG9yaXplIGxvZyBhcmd1bWVudHMgaWYgZW5hYmxlZC5cbiAqXG4gKiBAYXBpIHB1YmxpY1xuICovXG5cbmZ1bmN0aW9uIGZvcm1hdEFyZ3MoYXJncykge1xuXHRhcmdzWzBdID0gKHRoaXMudXNlQ29sb3JzID8gJyVjJyA6ICcnKSArXG5cdFx0dGhpcy5uYW1lc3BhY2UgK1xuXHRcdCh0aGlzLnVzZUNvbG9ycyA/ICcgJWMnIDogJyAnKSArXG5cdFx0YXJnc1swXSArXG5cdFx0KHRoaXMudXNlQ29sb3JzID8gJyVjICcgOiAnICcpICtcblx0XHQnKycgKyBtb2R1bGUuZXhwb3J0cy5odW1hbml6ZSh0aGlzLmRpZmYpO1xuXG5cdGlmICghdGhpcy51c2VDb2xvcnMpIHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHRjb25zdCBjID0gJ2NvbG9yOiAnICsgdGhpcy5jb2xvcjtcblx0YXJncy5zcGxpY2UoMSwgMCwgYywgJ2NvbG9yOiBpbmhlcml0Jyk7XG5cblx0Ly8gVGhlIGZpbmFsIFwiJWNcIiBpcyBzb21ld2hhdCB0cmlja3ksIGJlY2F1c2UgdGhlcmUgY291bGQgYmUgb3RoZXJcblx0Ly8gYXJndW1lbnRzIHBhc3NlZCBlaXRoZXIgYmVmb3JlIG9yIGFmdGVyIHRoZSAlYywgc28gd2UgbmVlZCB0b1xuXHQvLyBmaWd1cmUgb3V0IHRoZSBjb3JyZWN0IGluZGV4IHRvIGluc2VydCB0aGUgQ1NTIGludG9cblx0bGV0IGluZGV4ID0gMDtcblx0bGV0IGxhc3RDID0gMDtcblx0YXJnc1swXS5yZXBsYWNlKC8lW2EtekEtWiVdL2csIG1hdGNoID0+IHtcblx0XHRpZiAobWF0Y2ggPT09ICclJScpIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cdFx0aW5kZXgrKztcblx0XHRpZiAobWF0Y2ggPT09ICclYycpIHtcblx0XHRcdC8vIFdlIG9ubHkgYXJlIGludGVyZXN0ZWQgaW4gdGhlICpsYXN0KiAlY1xuXHRcdFx0Ly8gKHRoZSB1c2VyIG1heSBoYXZlIHByb3ZpZGVkIHRoZWlyIG93bilcblx0XHRcdGxhc3RDID0gaW5kZXg7XG5cdFx0fVxuXHR9KTtcblxuXHRhcmdzLnNwbGljZShsYXN0QywgMCwgYyk7XG59XG5cbi8qKlxuICogSW52b2tlcyBgY29uc29sZS5kZWJ1ZygpYCB3aGVuIGF2YWlsYWJsZS5cbiAqIE5vLW9wIHdoZW4gYGNvbnNvbGUuZGVidWdgIGlzIG5vdCBhIFwiZnVuY3Rpb25cIi5cbiAqIElmIGBjb25zb2xlLmRlYnVnYCBpcyBub3QgYXZhaWxhYmxlLCBmYWxscyBiYWNrXG4gKiB0byBgY29uc29sZS5sb2dgLlxuICpcbiAqIEBhcGkgcHVibGljXG4gKi9cbmV4cG9ydHMubG9nID0gY29uc29sZS5kZWJ1ZyB8fCBjb25zb2xlLmxvZyB8fCAoKCkgPT4ge30pO1xuXG4vKipcbiAqIFNhdmUgYG5hbWVzcGFjZXNgLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBuYW1lc3BhY2VzXG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gc2F2ZShuYW1lc3BhY2VzKSB7XG5cdHRyeSB7XG5cdFx0aWYgKG5hbWVzcGFjZXMpIHtcblx0XHRcdGV4cG9ydHMuc3RvcmFnZS5zZXRJdGVtKCdkZWJ1ZycsIG5hbWVzcGFjZXMpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRleHBvcnRzLnN0b3JhZ2UucmVtb3ZlSXRlbSgnZGVidWcnKTtcblx0XHR9XG5cdH0gY2F0Y2ggKGVycm9yKSB7XG5cdFx0Ly8gU3dhbGxvd1xuXHRcdC8vIFhYWCAoQFFpeC0pIHNob3VsZCB3ZSBiZSBsb2dnaW5nIHRoZXNlP1xuXHR9XG59XG5cbi8qKlxuICogTG9hZCBgbmFtZXNwYWNlc2AuXG4gKlxuICogQHJldHVybiB7U3RyaW5nfSByZXR1cm5zIHRoZSBwcmV2aW91c2x5IHBlcnNpc3RlZCBkZWJ1ZyBtb2Rlc1xuICogQGFwaSBwcml2YXRlXG4gKi9cbmZ1bmN0aW9uIGxvYWQoKSB7XG5cdGxldCByO1xuXHR0cnkge1xuXHRcdHIgPSBleHBvcnRzLnN0b3JhZ2UuZ2V0SXRlbSgnZGVidWcnKTtcblx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHQvLyBTd2FsbG93XG5cdFx0Ly8gWFhYIChAUWl4LSkgc2hvdWxkIHdlIGJlIGxvZ2dpbmcgdGhlc2U/XG5cdH1cblxuXHQvLyBJZiBkZWJ1ZyBpc24ndCBzZXQgaW4gTFMsIGFuZCB3ZSdyZSBpbiBFbGVjdHJvbiwgdHJ5IHRvIGxvYWQgJERFQlVHXG5cdGlmICghciAmJiB0eXBlb2YgcHJvY2VzcyAhPT0gJ3VuZGVmaW5lZCcgJiYgJ2VudicgaW4gcHJvY2Vzcykge1xuXHRcdHIgPSBwcm9jZXNzLmVudi5ERUJVRztcblx0fVxuXG5cdHJldHVybiByO1xufVxuXG4vKipcbiAqIExvY2Fsc3RvcmFnZSBhdHRlbXB0cyB0byByZXR1cm4gdGhlIGxvY2Fsc3RvcmFnZS5cbiAqXG4gKiBUaGlzIGlzIG5lY2Vzc2FyeSBiZWNhdXNlIHNhZmFyaSB0aHJvd3NcbiAqIHdoZW4gYSB1c2VyIGRpc2FibGVzIGNvb2tpZXMvbG9jYWxzdG9yYWdlXG4gKiBhbmQgeW91IGF0dGVtcHQgdG8gYWNjZXNzIGl0LlxuICpcbiAqIEByZXR1cm4ge0xvY2FsU3RvcmFnZX1cbiAqIEBhcGkgcHJpdmF0ZVxuICovXG5cbmZ1bmN0aW9uIGxvY2Fsc3RvcmFnZSgpIHtcblx0dHJ5IHtcblx0XHQvLyBUVk1MS2l0IChBcHBsZSBUViBKUyBSdW50aW1lKSBkb2VzIG5vdCBoYXZlIGEgd2luZG93IG9iamVjdCwganVzdCBsb2NhbFN0b3JhZ2UgaW4gdGhlIGdsb2JhbCBjb250ZXh0XG5cdFx0Ly8gVGhlIEJyb3dzZXIgYWxzbyBoYXMgbG9jYWxTdG9yYWdlIGluIHRoZSBnbG9iYWwgY29udGV4dC5cblx0XHRyZXR1cm4gbG9jYWxTdG9yYWdlO1xuXHR9IGNhdGNoIChlcnJvcikge1xuXHRcdC8vIFN3YWxsb3dcblx0XHQvLyBYWFggKEBRaXgtKSBzaG91bGQgd2UgYmUgbG9nZ2luZyB0aGVzZT9cblx0fVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vY29tbW9uJykoZXhwb3J0cyk7XG5cbmNvbnN0IHtmb3JtYXR0ZXJzfSA9IG1vZHVsZS5leHBvcnRzO1xuXG4vKipcbiAqIE1hcCAlaiB0byBgSlNPTi5zdHJpbmdpZnkoKWAsIHNpbmNlIG5vIFdlYiBJbnNwZWN0b3JzIGRvIHRoYXQgYnkgZGVmYXVsdC5cbiAqL1xuXG5mb3JtYXR0ZXJzLmogPSBmdW5jdGlvbiAodikge1xuXHR0cnkge1xuXHRcdHJldHVybiBKU09OLnN0cmluZ2lmeSh2KTtcblx0fSBjYXRjaCAoZXJyb3IpIHtcblx0XHRyZXR1cm4gJ1tVbmV4cGVjdGVkSlNPTlBhcnNlRXJyb3JdOiAnICsgZXJyb3IubWVzc2FnZTtcblx0fVxufTtcbiIsICIvKipcbiAqIE1vZHVsZSBkZXBlbmRlbmNpZXMuXG4gKi9cblxuY29uc3QgdHR5ID0gcmVxdWlyZSgndHR5Jyk7XG5jb25zdCB1dGlsID0gcmVxdWlyZSgndXRpbCcpO1xuXG4vKipcbiAqIFRoaXMgaXMgdGhlIE5vZGUuanMgaW1wbGVtZW50YXRpb24gb2YgYGRlYnVnKClgLlxuICovXG5cbmV4cG9ydHMuaW5pdCA9IGluaXQ7XG5leHBvcnRzLmxvZyA9IGxvZztcbmV4cG9ydHMuZm9ybWF0QXJncyA9IGZvcm1hdEFyZ3M7XG5leHBvcnRzLnNhdmUgPSBzYXZlO1xuZXhwb3J0cy5sb2FkID0gbG9hZDtcbmV4cG9ydHMudXNlQ29sb3JzID0gdXNlQ29sb3JzO1xuZXhwb3J0cy5kZXN0cm95ID0gdXRpbC5kZXByZWNhdGUoXG5cdCgpID0+IHt9LFxuXHQnSW5zdGFuY2UgbWV0aG9kIGBkZWJ1Zy5kZXN0cm95KClgIGlzIGRlcHJlY2F0ZWQgYW5kIG5vIGxvbmdlciBkb2VzIGFueXRoaW5nLiBJdCB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIG5leHQgbWFqb3IgdmVyc2lvbiBvZiBgZGVidWdgLidcbik7XG5cbi8qKlxuICogQ29sb3JzLlxuICovXG5cbmV4cG9ydHMuY29sb3JzID0gWzYsIDIsIDMsIDQsIDUsIDFdO1xuXG50cnkge1xuXHQvLyBPcHRpb25hbCBkZXBlbmRlbmN5IChhcyBpbiwgZG9lc24ndCBuZWVkIHRvIGJlIGluc3RhbGxlZCwgTk9UIGxpa2Ugb3B0aW9uYWxEZXBlbmRlbmNpZXMgaW4gcGFja2FnZS5qc29uKVxuXHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLWV4dHJhbmVvdXMtZGVwZW5kZW5jaWVzXG5cdGNvbnN0IHN1cHBvcnRzQ29sb3IgPSByZXF1aXJlKCdzdXBwb3J0cy1jb2xvcicpO1xuXG5cdGlmIChzdXBwb3J0c0NvbG9yICYmIChzdXBwb3J0c0NvbG9yLnN0ZGVyciB8fCBzdXBwb3J0c0NvbG9yKS5sZXZlbCA+PSAyKSB7XG5cdFx0ZXhwb3J0cy5jb2xvcnMgPSBbXG5cdFx0XHQyMCxcblx0XHRcdDIxLFxuXHRcdFx0MjYsXG5cdFx0XHQyNyxcblx0XHRcdDMyLFxuXHRcdFx0MzMsXG5cdFx0XHQzOCxcblx0XHRcdDM5LFxuXHRcdFx0NDAsXG5cdFx0XHQ0MSxcblx0XHRcdDQyLFxuXHRcdFx0NDMsXG5cdFx0XHQ0NCxcblx0XHRcdDQ1LFxuXHRcdFx0NTYsXG5cdFx0XHQ1Nyxcblx0XHRcdDYyLFxuXHRcdFx0NjMsXG5cdFx0XHQ2OCxcblx0XHRcdDY5LFxuXHRcdFx0NzQsXG5cdFx0XHQ3NSxcblx0XHRcdDc2LFxuXHRcdFx0NzcsXG5cdFx0XHQ3OCxcblx0XHRcdDc5LFxuXHRcdFx0ODAsXG5cdFx0XHQ4MSxcblx0XHRcdDkyLFxuXHRcdFx0OTMsXG5cdFx0XHQ5OCxcblx0XHRcdDk5LFxuXHRcdFx0MTEyLFxuXHRcdFx0MTEzLFxuXHRcdFx0MTI4LFxuXHRcdFx0MTI5LFxuXHRcdFx0MTM0LFxuXHRcdFx0MTM1LFxuXHRcdFx0MTQ4LFxuXHRcdFx0MTQ5LFxuXHRcdFx0MTYwLFxuXHRcdFx0MTYxLFxuXHRcdFx0MTYyLFxuXHRcdFx0MTYzLFxuXHRcdFx0MTY0LFxuXHRcdFx0MTY1LFxuXHRcdFx0MTY2LFxuXHRcdFx0MTY3LFxuXHRcdFx0MTY4LFxuXHRcdFx0MTY5LFxuXHRcdFx0MTcwLFxuXHRcdFx0MTcxLFxuXHRcdFx0MTcyLFxuXHRcdFx0MTczLFxuXHRcdFx0MTc4LFxuXHRcdFx0MTc5LFxuXHRcdFx0MTg0LFxuXHRcdFx0MTg1LFxuXHRcdFx0MTk2LFxuXHRcdFx0MTk3LFxuXHRcdFx0MTk4LFxuXHRcdFx0MTk5LFxuXHRcdFx0MjAwLFxuXHRcdFx0MjAxLFxuXHRcdFx0MjAyLFxuXHRcdFx0MjAzLFxuXHRcdFx0MjA0LFxuXHRcdFx0MjA1LFxuXHRcdFx0MjA2LFxuXHRcdFx0MjA3LFxuXHRcdFx0MjA4LFxuXHRcdFx0MjA5LFxuXHRcdFx0MjE0LFxuXHRcdFx0MjE1LFxuXHRcdFx0MjIwLFxuXHRcdFx0MjIxXG5cdFx0XTtcblx0fVxufSBjYXRjaCAoZXJyb3IpIHtcblx0Ly8gU3dhbGxvdyAtIHdlIG9ubHkgY2FyZSBpZiBgc3VwcG9ydHMtY29sb3JgIGlzIGF2YWlsYWJsZTsgaXQgZG9lc24ndCBoYXZlIHRvIGJlLlxufVxuXG4vKipcbiAqIEJ1aWxkIHVwIHRoZSBkZWZhdWx0IGBpbnNwZWN0T3B0c2Agb2JqZWN0IGZyb20gdGhlIGVudmlyb25tZW50IHZhcmlhYmxlcy5cbiAqXG4gKiAgICQgREVCVUdfQ09MT1JTPW5vIERFQlVHX0RFUFRIPTEwIERFQlVHX1NIT1dfSElEREVOPWVuYWJsZWQgbm9kZSBzY3JpcHQuanNcbiAqL1xuXG5leHBvcnRzLmluc3BlY3RPcHRzID0gT2JqZWN0LmtleXMocHJvY2Vzcy5lbnYpLmZpbHRlcihrZXkgPT4ge1xuXHRyZXR1cm4gL15kZWJ1Z18vaS50ZXN0KGtleSk7XG59KS5yZWR1Y2UoKG9iaiwga2V5KSA9PiB7XG5cdC8vIENhbWVsLWNhc2Vcblx0Y29uc3QgcHJvcCA9IGtleVxuXHRcdC5zdWJzdHJpbmcoNilcblx0XHQudG9Mb3dlckNhc2UoKVxuXHRcdC5yZXBsYWNlKC9fKFthLXpdKS9nLCAoXywgaykgPT4ge1xuXHRcdFx0cmV0dXJuIGsudG9VcHBlckNhc2UoKTtcblx0XHR9KTtcblxuXHQvLyBDb2VyY2Ugc3RyaW5nIHZhbHVlIGludG8gSlMgdmFsdWVcblx0bGV0IHZhbCA9IHByb2Nlc3MuZW52W2tleV07XG5cdGlmICgvXih5ZXN8b258dHJ1ZXxlbmFibGVkKSQvaS50ZXN0KHZhbCkpIHtcblx0XHR2YWwgPSB0cnVlO1xuXHR9IGVsc2UgaWYgKC9eKG5vfG9mZnxmYWxzZXxkaXNhYmxlZCkkL2kudGVzdCh2YWwpKSB7XG5cdFx0dmFsID0gZmFsc2U7XG5cdH0gZWxzZSBpZiAodmFsID09PSAnbnVsbCcpIHtcblx0XHR2YWwgPSBudWxsO1xuXHR9IGVsc2Uge1xuXHRcdHZhbCA9IE51bWJlcih2YWwpO1xuXHR9XG5cblx0b2JqW3Byb3BdID0gdmFsO1xuXHRyZXR1cm4gb2JqO1xufSwge30pO1xuXG4vKipcbiAqIElzIHN0ZG91dCBhIFRUWT8gQ29sb3JlZCBvdXRwdXQgaXMgZW5hYmxlZCB3aGVuIGB0cnVlYC5cbiAqL1xuXG5mdW5jdGlvbiB1c2VDb2xvcnMoKSB7XG5cdHJldHVybiAnY29sb3JzJyBpbiBleHBvcnRzLmluc3BlY3RPcHRzID9cblx0XHRCb29sZWFuKGV4cG9ydHMuaW5zcGVjdE9wdHMuY29sb3JzKSA6XG5cdFx0dHR5LmlzYXR0eShwcm9jZXNzLnN0ZGVyci5mZCk7XG59XG5cbi8qKlxuICogQWRkcyBBTlNJIGNvbG9yIGVzY2FwZSBjb2RlcyBpZiBlbmFibGVkLlxuICpcbiAqIEBhcGkgcHVibGljXG4gKi9cblxuZnVuY3Rpb24gZm9ybWF0QXJncyhhcmdzKSB7XG5cdGNvbnN0IHtuYW1lc3BhY2U6IG5hbWUsIHVzZUNvbG9yc30gPSB0aGlzO1xuXG5cdGlmICh1c2VDb2xvcnMpIHtcblx0XHRjb25zdCBjID0gdGhpcy5jb2xvcjtcblx0XHRjb25zdCBjb2xvckNvZGUgPSAnXFx1MDAxQlszJyArIChjIDwgOCA/IGMgOiAnODs1OycgKyBjKTtcblx0XHRjb25zdCBwcmVmaXggPSBgICAke2NvbG9yQ29kZX07MW0ke25hbWV9IFxcdTAwMUJbMG1gO1xuXG5cdFx0YXJnc1swXSA9IHByZWZpeCArIGFyZ3NbMF0uc3BsaXQoJ1xcbicpLmpvaW4oJ1xcbicgKyBwcmVmaXgpO1xuXHRcdGFyZ3MucHVzaChjb2xvckNvZGUgKyAnbSsnICsgbW9kdWxlLmV4cG9ydHMuaHVtYW5pemUodGhpcy5kaWZmKSArICdcXHUwMDFCWzBtJyk7XG5cdH0gZWxzZSB7XG5cdFx0YXJnc1swXSA9IGdldERhdGUoKSArIG5hbWUgKyAnICcgKyBhcmdzWzBdO1xuXHR9XG59XG5cbmZ1bmN0aW9uIGdldERhdGUoKSB7XG5cdGlmIChleHBvcnRzLmluc3BlY3RPcHRzLmhpZGVEYXRlKSB7XG5cdFx0cmV0dXJuICcnO1xuXHR9XG5cdHJldHVybiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCkgKyAnICc7XG59XG5cbi8qKlxuICogSW52b2tlcyBgdXRpbC5mb3JtYXRXaXRoT3B0aW9ucygpYCB3aXRoIHRoZSBzcGVjaWZpZWQgYXJndW1lbnRzIGFuZCB3cml0ZXMgdG8gc3RkZXJyLlxuICovXG5cbmZ1bmN0aW9uIGxvZyguLi5hcmdzKSB7XG5cdHJldHVybiBwcm9jZXNzLnN0ZGVyci53cml0ZSh1dGlsLmZvcm1hdFdpdGhPcHRpb25zKGV4cG9ydHMuaW5zcGVjdE9wdHMsIC4uLmFyZ3MpICsgJ1xcbicpO1xufVxuXG4vKipcbiAqIFNhdmUgYG5hbWVzcGFjZXNgLlxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBuYW1lc3BhY2VzXG4gKiBAYXBpIHByaXZhdGVcbiAqL1xuZnVuY3Rpb24gc2F2ZShuYW1lc3BhY2VzKSB7XG5cdGlmIChuYW1lc3BhY2VzKSB7XG5cdFx0cHJvY2Vzcy5lbnYuREVCVUcgPSBuYW1lc3BhY2VzO1xuXHR9IGVsc2Uge1xuXHRcdC8vIElmIHlvdSBzZXQgYSBwcm9jZXNzLmVudiBmaWVsZCB0byBudWxsIG9yIHVuZGVmaW5lZCwgaXQgZ2V0cyBjYXN0IHRvIHRoZVxuXHRcdC8vIHN0cmluZyAnbnVsbCcgb3IgJ3VuZGVmaW5lZCcuIEp1c3QgZGVsZXRlIGluc3RlYWQuXG5cdFx0ZGVsZXRlIHByb2Nlc3MuZW52LkRFQlVHO1xuXHR9XG59XG5cbi8qKlxuICogTG9hZCBgbmFtZXNwYWNlc2AuXG4gKlxuICogQHJldHVybiB7U3RyaW5nfSByZXR1cm5zIHRoZSBwcmV2aW91c2x5IHBlcnNpc3RlZCBkZWJ1ZyBtb2Rlc1xuICogQGFwaSBwcml2YXRlXG4gKi9cblxuZnVuY3Rpb24gbG9hZCgpIHtcblx0cmV0dXJuIHByb2Nlc3MuZW52LkRFQlVHO1xufVxuXG4vKipcbiAqIEluaXQgbG9naWMgZm9yIGBkZWJ1Z2AgaW5zdGFuY2VzLlxuICpcbiAqIENyZWF0ZSBhIG5ldyBgaW5zcGVjdE9wdHNgIG9iamVjdCBpbiBjYXNlIGB1c2VDb2xvcnNgIGlzIHNldFxuICogZGlmZmVyZW50bHkgZm9yIGEgcGFydGljdWxhciBgZGVidWdgIGluc3RhbmNlLlxuICovXG5cbmZ1bmN0aW9uIGluaXQoZGVidWcpIHtcblx0ZGVidWcuaW5zcGVjdE9wdHMgPSB7fTtcblxuXHRjb25zdCBrZXlzID0gT2JqZWN0LmtleXMoZXhwb3J0cy5pbnNwZWN0T3B0cyk7XG5cdGZvciAobGV0IGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKykge1xuXHRcdGRlYnVnLmluc3BlY3RPcHRzW2tleXNbaV1dID0gZXhwb3J0cy5pbnNwZWN0T3B0c1trZXlzW2ldXTtcblx0fVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vY29tbW9uJykoZXhwb3J0cyk7XG5cbmNvbnN0IHtmb3JtYXR0ZXJzfSA9IG1vZHVsZS5leHBvcnRzO1xuXG4vKipcbiAqIE1hcCAlbyB0byBgdXRpbC5pbnNwZWN0KClgLCBhbGwgb24gYSBzaW5nbGUgbGluZS5cbiAqL1xuXG5mb3JtYXR0ZXJzLm8gPSBmdW5jdGlvbiAodikge1xuXHR0aGlzLmluc3BlY3RPcHRzLmNvbG9ycyA9IHRoaXMudXNlQ29sb3JzO1xuXHRyZXR1cm4gdXRpbC5pbnNwZWN0KHYsIHRoaXMuaW5zcGVjdE9wdHMpXG5cdFx0LnNwbGl0KCdcXG4nKVxuXHRcdC5tYXAoc3RyID0+IHN0ci50cmltKCkpXG5cdFx0LmpvaW4oJyAnKTtcbn07XG5cbi8qKlxuICogTWFwICVPIHRvIGB1dGlsLmluc3BlY3QoKWAsIGFsbG93aW5nIG11bHRpcGxlIGxpbmVzIGlmIG5lZWRlZC5cbiAqL1xuXG5mb3JtYXR0ZXJzLk8gPSBmdW5jdGlvbiAodikge1xuXHR0aGlzLmluc3BlY3RPcHRzLmNvbG9ycyA9IHRoaXMudXNlQ29sb3JzO1xuXHRyZXR1cm4gdXRpbC5pbnNwZWN0KHYsIHRoaXMuaW5zcGVjdE9wdHMpO1xufTtcbiIsICIvKipcbiAqIERldGVjdCBFbGVjdHJvbiByZW5kZXJlciAvIG53anMgcHJvY2Vzcywgd2hpY2ggaXMgbm9kZSwgYnV0IHdlIHNob3VsZFxuICogdHJlYXQgYXMgYSBicm93c2VyLlxuICovXG5cbmlmICh0eXBlb2YgcHJvY2VzcyA9PT0gJ3VuZGVmaW5lZCcgfHwgcHJvY2Vzcy50eXBlID09PSAncmVuZGVyZXInIHx8IHByb2Nlc3MuYnJvd3NlciA9PT0gdHJ1ZSB8fCBwcm9jZXNzLl9fbndqcykge1xuXHRtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vYnJvd3Nlci5qcycpO1xufSBlbHNlIHtcblx0bW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL25vZGUuanMnKTtcbn1cbiIsICJ2YXIgZGVidWc7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKCkge1xuICBpZiAoIWRlYnVnKSB7XG4gICAgdHJ5IHtcbiAgICAgIC8qIGVzbGludCBnbG9iYWwtcmVxdWlyZTogb2ZmICovXG4gICAgICBkZWJ1ZyA9IHJlcXVpcmUoXCJkZWJ1Z1wiKShcImZvbGxvdy1yZWRpcmVjdHNcIik7XG4gICAgfVxuICAgIGNhdGNoIChlcnJvcikgeyAvKiAqLyB9XG4gICAgaWYgKHR5cGVvZiBkZWJ1ZyAhPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICBkZWJ1ZyA9IGZ1bmN0aW9uICgpIHsgLyogKi8gfTtcbiAgICB9XG4gIH1cbiAgZGVidWcuYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbn07XG4iLCAidmFyIHVybCA9IHJlcXVpcmUoXCJ1cmxcIik7XG52YXIgVVJMID0gdXJsLlVSTDtcbnZhciBodHRwID0gcmVxdWlyZShcImh0dHBcIik7XG52YXIgaHR0cHMgPSByZXF1aXJlKFwiaHR0cHNcIik7XG52YXIgV3JpdGFibGUgPSByZXF1aXJlKFwic3RyZWFtXCIpLldyaXRhYmxlO1xudmFyIGFzc2VydCA9IHJlcXVpcmUoXCJhc3NlcnRcIik7XG52YXIgZGVidWcgPSByZXF1aXJlKFwiLi9kZWJ1Z1wiKTtcblxuLy8gUHJldmVudGl2ZSBwbGF0Zm9ybSBkZXRlY3Rpb25cbi8vIGlzdGFuYnVsIGlnbm9yZSBuZXh0XG4oZnVuY3Rpb24gZGV0ZWN0VW5zdXBwb3J0ZWRFbnZpcm9ubWVudCgpIHtcbiAgdmFyIGxvb2tzTGlrZU5vZGUgPSB0eXBlb2YgcHJvY2VzcyAhPT0gXCJ1bmRlZmluZWRcIjtcbiAgdmFyIGxvb2tzTGlrZUJyb3dzZXIgPSB0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiICYmIHR5cGVvZiBkb2N1bWVudCAhPT0gXCJ1bmRlZmluZWRcIjtcbiAgdmFyIGxvb2tzTGlrZVY4ID0gaXNGdW5jdGlvbihFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSk7XG4gIGlmICghbG9va3NMaWtlTm9kZSAmJiAobG9va3NMaWtlQnJvd3NlciB8fCAhbG9va3NMaWtlVjgpKSB7XG4gICAgY29uc29sZS53YXJuKFwiVGhlIGZvbGxvdy1yZWRpcmVjdHMgcGFja2FnZSBzaG91bGQgYmUgZXhjbHVkZWQgZnJvbSBicm93c2VyIGJ1aWxkcy5cIik7XG4gIH1cbn0oKSk7XG5cbi8vIFdoZXRoZXIgdG8gdXNlIHRoZSBuYXRpdmUgVVJMIG9iamVjdCBvciB0aGUgbGVnYWN5IHVybCBtb2R1bGVcbnZhciB1c2VOYXRpdmVVUkwgPSBmYWxzZTtcbnRyeSB7XG4gIGFzc2VydChuZXcgVVJMKFwiXCIpKTtcbn1cbmNhdGNoIChlcnJvcikge1xuICB1c2VOYXRpdmVVUkwgPSBlcnJvci5jb2RlID09PSBcIkVSUl9JTlZBTElEX1VSTFwiO1xufVxuXG4vLyBVUkwgZmllbGRzIHRvIHByZXNlcnZlIGluIGNvcHkgb3BlcmF0aW9uc1xudmFyIHByZXNlcnZlZFVybEZpZWxkcyA9IFtcbiAgXCJhdXRoXCIsXG4gIFwiaG9zdFwiLFxuICBcImhvc3RuYW1lXCIsXG4gIFwiaHJlZlwiLFxuICBcInBhdGhcIixcbiAgXCJwYXRobmFtZVwiLFxuICBcInBvcnRcIixcbiAgXCJwcm90b2NvbFwiLFxuICBcInF1ZXJ5XCIsXG4gIFwic2VhcmNoXCIsXG4gIFwiaGFzaFwiLFxuXTtcblxuLy8gQ3JlYXRlIGhhbmRsZXJzIHRoYXQgcGFzcyBldmVudHMgZnJvbSBuYXRpdmUgcmVxdWVzdHNcbnZhciBldmVudHMgPSBbXCJhYm9ydFwiLCBcImFib3J0ZWRcIiwgXCJjb25uZWN0XCIsIFwiZXJyb3JcIiwgXCJzb2NrZXRcIiwgXCJ0aW1lb3V0XCJdO1xudmFyIGV2ZW50SGFuZGxlcnMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuZXZlbnRzLmZvckVhY2goZnVuY3Rpb24gKGV2ZW50KSB7XG4gIGV2ZW50SGFuZGxlcnNbZXZlbnRdID0gZnVuY3Rpb24gKGFyZzEsIGFyZzIsIGFyZzMpIHtcbiAgICB0aGlzLl9yZWRpcmVjdGFibGUuZW1pdChldmVudCwgYXJnMSwgYXJnMiwgYXJnMyk7XG4gIH07XG59KTtcblxuLy8gRXJyb3IgdHlwZXMgd2l0aCBjb2Rlc1xudmFyIEludmFsaWRVcmxFcnJvciA9IGNyZWF0ZUVycm9yVHlwZShcbiAgXCJFUlJfSU5WQUxJRF9VUkxcIixcbiAgXCJJbnZhbGlkIFVSTFwiLFxuICBUeXBlRXJyb3Jcbik7XG52YXIgUmVkaXJlY3Rpb25FcnJvciA9IGNyZWF0ZUVycm9yVHlwZShcbiAgXCJFUlJfRlJfUkVESVJFQ1RJT05fRkFJTFVSRVwiLFxuICBcIlJlZGlyZWN0ZWQgcmVxdWVzdCBmYWlsZWRcIlxuKTtcbnZhciBUb29NYW55UmVkaXJlY3RzRXJyb3IgPSBjcmVhdGVFcnJvclR5cGUoXG4gIFwiRVJSX0ZSX1RPT19NQU5ZX1JFRElSRUNUU1wiLFxuICBcIk1heGltdW0gbnVtYmVyIG9mIHJlZGlyZWN0cyBleGNlZWRlZFwiLFxuICBSZWRpcmVjdGlvbkVycm9yXG4pO1xudmFyIE1heEJvZHlMZW5ndGhFeGNlZWRlZEVycm9yID0gY3JlYXRlRXJyb3JUeXBlKFxuICBcIkVSUl9GUl9NQVhfQk9EWV9MRU5HVEhfRVhDRUVERURcIixcbiAgXCJSZXF1ZXN0IGJvZHkgbGFyZ2VyIHRoYW4gbWF4Qm9keUxlbmd0aCBsaW1pdFwiXG4pO1xudmFyIFdyaXRlQWZ0ZXJFbmRFcnJvciA9IGNyZWF0ZUVycm9yVHlwZShcbiAgXCJFUlJfU1RSRUFNX1dSSVRFX0FGVEVSX0VORFwiLFxuICBcIndyaXRlIGFmdGVyIGVuZFwiXG4pO1xuXG4vLyBpc3RhbmJ1bCBpZ25vcmUgbmV4dFxudmFyIGRlc3Ryb3kgPSBXcml0YWJsZS5wcm90b3R5cGUuZGVzdHJveSB8fCBub29wO1xuXG4vLyBBbiBIVFRQKFMpIHJlcXVlc3QgdGhhdCBjYW4gYmUgcmVkaXJlY3RlZFxuZnVuY3Rpb24gUmVkaXJlY3RhYmxlUmVxdWVzdChvcHRpb25zLCByZXNwb25zZUNhbGxiYWNrKSB7XG4gIC8vIEluaXRpYWxpemUgdGhlIHJlcXVlc3RcbiAgV3JpdGFibGUuY2FsbCh0aGlzKTtcbiAgdGhpcy5fc2FuaXRpemVPcHRpb25zKG9wdGlvbnMpO1xuICB0aGlzLl9vcHRpb25zID0gb3B0aW9ucztcbiAgdGhpcy5fZW5kZWQgPSBmYWxzZTtcbiAgdGhpcy5fZW5kaW5nID0gZmFsc2U7XG4gIHRoaXMuX3JlZGlyZWN0Q291bnQgPSAwO1xuICB0aGlzLl9yZWRpcmVjdHMgPSBbXTtcbiAgdGhpcy5fcmVxdWVzdEJvZHlMZW5ndGggPSAwO1xuICB0aGlzLl9yZXF1ZXN0Qm9keUJ1ZmZlcnMgPSBbXTtcblxuICAvLyBBdHRhY2ggYSBjYWxsYmFjayBpZiBwYXNzZWRcbiAgaWYgKHJlc3BvbnNlQ2FsbGJhY2spIHtcbiAgICB0aGlzLm9uKFwicmVzcG9uc2VcIiwgcmVzcG9uc2VDYWxsYmFjayk7XG4gIH1cblxuICAvLyBSZWFjdCB0byByZXNwb25zZXMgb2YgbmF0aXZlIHJlcXVlc3RzXG4gIHZhciBzZWxmID0gdGhpcztcbiAgdGhpcy5fb25OYXRpdmVSZXNwb25zZSA9IGZ1bmN0aW9uIChyZXNwb25zZSkge1xuICAgIHRyeSB7XG4gICAgICBzZWxmLl9wcm9jZXNzUmVzcG9uc2UocmVzcG9uc2UpO1xuICAgIH1cbiAgICBjYXRjaCAoY2F1c2UpIHtcbiAgICAgIHNlbGYuZW1pdChcImVycm9yXCIsIGNhdXNlIGluc3RhbmNlb2YgUmVkaXJlY3Rpb25FcnJvciA/XG4gICAgICAgIGNhdXNlIDogbmV3IFJlZGlyZWN0aW9uRXJyb3IoeyBjYXVzZTogY2F1c2UgfSkpO1xuICAgIH1cbiAgfTtcblxuICAvLyBQZXJmb3JtIHRoZSBmaXJzdCByZXF1ZXN0XG4gIHRoaXMuX3BlcmZvcm1SZXF1ZXN0KCk7XG59XG5SZWRpcmVjdGFibGVSZXF1ZXN0LnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoV3JpdGFibGUucHJvdG90eXBlKTtcblxuUmVkaXJlY3RhYmxlUmVxdWVzdC5wcm90b3R5cGUuYWJvcnQgPSBmdW5jdGlvbiAoKSB7XG4gIGRlc3Ryb3lSZXF1ZXN0KHRoaXMuX2N1cnJlbnRSZXF1ZXN0KTtcbiAgdGhpcy5fY3VycmVudFJlcXVlc3QuYWJvcnQoKTtcbiAgdGhpcy5lbWl0KFwiYWJvcnRcIik7XG59O1xuXG5SZWRpcmVjdGFibGVSZXF1ZXN0LnByb3RvdHlwZS5kZXN0cm95ID0gZnVuY3Rpb24gKGVycm9yKSB7XG4gIGRlc3Ryb3lSZXF1ZXN0KHRoaXMuX2N1cnJlbnRSZXF1ZXN0LCBlcnJvcik7XG4gIGRlc3Ryb3kuY2FsbCh0aGlzLCBlcnJvcik7XG4gIHJldHVybiB0aGlzO1xufTtcblxuLy8gV3JpdGVzIGJ1ZmZlcmVkIGRhdGEgdG8gdGhlIGN1cnJlbnQgbmF0aXZlIHJlcXVlc3RcblJlZGlyZWN0YWJsZVJlcXVlc3QucHJvdG90eXBlLndyaXRlID0gZnVuY3Rpb24gKGRhdGEsIGVuY29kaW5nLCBjYWxsYmFjaykge1xuICAvLyBXcml0aW5nIGlzIG5vdCBhbGxvd2VkIGlmIGVuZCBoYXMgYmVlbiBjYWxsZWRcbiAgaWYgKHRoaXMuX2VuZGluZykge1xuICAgIHRocm93IG5ldyBXcml0ZUFmdGVyRW5kRXJyb3IoKTtcbiAgfVxuXG4gIC8vIFZhbGlkYXRlIGlucHV0IGFuZCBzaGlmdCBwYXJhbWV0ZXJzIGlmIG5lY2Vzc2FyeVxuICBpZiAoIWlzU3RyaW5nKGRhdGEpICYmICFpc0J1ZmZlcihkYXRhKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJkYXRhIHNob3VsZCBiZSBhIHN0cmluZywgQnVmZmVyIG9yIFVpbnQ4QXJyYXlcIik7XG4gIH1cbiAgaWYgKGlzRnVuY3Rpb24oZW5jb2RpbmcpKSB7XG4gICAgY2FsbGJhY2sgPSBlbmNvZGluZztcbiAgICBlbmNvZGluZyA9IG51bGw7XG4gIH1cblxuICAvLyBJZ25vcmUgZW1wdHkgYnVmZmVycywgc2luY2Ugd3JpdGluZyB0aGVtIGRvZXNuJ3QgaW52b2tlIHRoZSBjYWxsYmFja1xuICAvLyBodHRwczovL2dpdGh1Yi5jb20vbm9kZWpzL25vZGUvaXNzdWVzLzIyMDY2XG4gIGlmIChkYXRhLmxlbmd0aCA9PT0gMCkge1xuICAgIGlmIChjYWxsYmFjaykge1xuICAgICAgY2FsbGJhY2soKTtcbiAgICB9XG4gICAgcmV0dXJuO1xuICB9XG4gIC8vIE9ubHkgd3JpdGUgd2hlbiB3ZSBkb24ndCBleGNlZWQgdGhlIG1heGltdW0gYm9keSBsZW5ndGhcbiAgaWYgKHRoaXMuX3JlcXVlc3RCb2R5TGVuZ3RoICsgZGF0YS5sZW5ndGggPD0gdGhpcy5fb3B0aW9ucy5tYXhCb2R5TGVuZ3RoKSB7XG4gICAgdGhpcy5fcmVxdWVzdEJvZHlMZW5ndGggKz0gZGF0YS5sZW5ndGg7XG4gICAgdGhpcy5fcmVxdWVzdEJvZHlCdWZmZXJzLnB1c2goeyBkYXRhOiBkYXRhLCBlbmNvZGluZzogZW5jb2RpbmcgfSk7XG4gICAgdGhpcy5fY3VycmVudFJlcXVlc3Qud3JpdGUoZGF0YSwgZW5jb2RpbmcsIGNhbGxiYWNrKTtcbiAgfVxuICAvLyBFcnJvciB3aGVuIHdlIGV4Y2VlZCB0aGUgbWF4aW11bSBib2R5IGxlbmd0aFxuICBlbHNlIHtcbiAgICB0aGlzLmVtaXQoXCJlcnJvclwiLCBuZXcgTWF4Qm9keUxlbmd0aEV4Y2VlZGVkRXJyb3IoKSk7XG4gICAgdGhpcy5hYm9ydCgpO1xuICB9XG59O1xuXG4vLyBFbmRzIHRoZSBjdXJyZW50IG5hdGl2ZSByZXF1ZXN0XG5SZWRpcmVjdGFibGVSZXF1ZXN0LnByb3RvdHlwZS5lbmQgPSBmdW5jdGlvbiAoZGF0YSwgZW5jb2RpbmcsIGNhbGxiYWNrKSB7XG4gIC8vIFNoaWZ0IHBhcmFtZXRlcnMgaWYgbmVjZXNzYXJ5XG4gIGlmIChpc0Z1bmN0aW9uKGRhdGEpKSB7XG4gICAgY2FsbGJhY2sgPSBkYXRhO1xuICAgIGRhdGEgPSBlbmNvZGluZyA9IG51bGw7XG4gIH1cbiAgZWxzZSBpZiAoaXNGdW5jdGlvbihlbmNvZGluZykpIHtcbiAgICBjYWxsYmFjayA9IGVuY29kaW5nO1xuICAgIGVuY29kaW5nID0gbnVsbDtcbiAgfVxuXG4gIC8vIFdyaXRlIGRhdGEgaWYgbmVlZGVkIGFuZCBlbmRcbiAgaWYgKCFkYXRhKSB7XG4gICAgdGhpcy5fZW5kZWQgPSB0aGlzLl9lbmRpbmcgPSB0cnVlO1xuICAgIHRoaXMuX2N1cnJlbnRSZXF1ZXN0LmVuZChudWxsLCBudWxsLCBjYWxsYmFjayk7XG4gIH1cbiAgZWxzZSB7XG4gICAgdmFyIHNlbGYgPSB0aGlzO1xuICAgIHZhciBjdXJyZW50UmVxdWVzdCA9IHRoaXMuX2N1cnJlbnRSZXF1ZXN0O1xuICAgIHRoaXMud3JpdGUoZGF0YSwgZW5jb2RpbmcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIHNlbGYuX2VuZGVkID0gdHJ1ZTtcbiAgICAgIGN1cnJlbnRSZXF1ZXN0LmVuZChudWxsLCBudWxsLCBjYWxsYmFjayk7XG4gICAgfSk7XG4gICAgdGhpcy5fZW5kaW5nID0gdHJ1ZTtcbiAgfVxufTtcblxuLy8gU2V0cyBhIGhlYWRlciB2YWx1ZSBvbiB0aGUgY3VycmVudCBuYXRpdmUgcmVxdWVzdFxuUmVkaXJlY3RhYmxlUmVxdWVzdC5wcm90b3R5cGUuc2V0SGVhZGVyID0gZnVuY3Rpb24gKG5hbWUsIHZhbHVlKSB7XG4gIHRoaXMuX29wdGlvbnMuaGVhZGVyc1tuYW1lXSA9IHZhbHVlO1xuICB0aGlzLl9jdXJyZW50UmVxdWVzdC5zZXRIZWFkZXIobmFtZSwgdmFsdWUpO1xufTtcblxuLy8gQ2xlYXJzIGEgaGVhZGVyIHZhbHVlIG9uIHRoZSBjdXJyZW50IG5hdGl2ZSByZXF1ZXN0XG5SZWRpcmVjdGFibGVSZXF1ZXN0LnByb3RvdHlwZS5yZW1vdmVIZWFkZXIgPSBmdW5jdGlvbiAobmFtZSkge1xuICBkZWxldGUgdGhpcy5fb3B0aW9ucy5oZWFkZXJzW25hbWVdO1xuICB0aGlzLl9jdXJyZW50UmVxdWVzdC5yZW1vdmVIZWFkZXIobmFtZSk7XG59O1xuXG4vLyBHbG9iYWwgdGltZW91dCBmb3IgYWxsIHVuZGVybHlpbmcgcmVxdWVzdHNcblJlZGlyZWN0YWJsZVJlcXVlc3QucHJvdG90eXBlLnNldFRpbWVvdXQgPSBmdW5jdGlvbiAobXNlY3MsIGNhbGxiYWNrKSB7XG4gIHZhciBzZWxmID0gdGhpcztcblxuICAvLyBEZXN0cm95cyB0aGUgc29ja2V0IG9uIHRpbWVvdXRcbiAgZnVuY3Rpb24gZGVzdHJveU9uVGltZW91dChzb2NrZXQpIHtcbiAgICBzb2NrZXQuc2V0VGltZW91dChtc2Vjcyk7XG4gICAgc29ja2V0LnJlbW92ZUxpc3RlbmVyKFwidGltZW91dFwiLCBzb2NrZXQuZGVzdHJveSk7XG4gICAgc29ja2V0LmFkZExpc3RlbmVyKFwidGltZW91dFwiLCBzb2NrZXQuZGVzdHJveSk7XG4gIH1cblxuICAvLyBTZXRzIHVwIGEgdGltZXIgdG8gdHJpZ2dlciBhIHRpbWVvdXQgZXZlbnRcbiAgZnVuY3Rpb24gc3RhcnRUaW1lcihzb2NrZXQpIHtcbiAgICBpZiAoc2VsZi5fdGltZW91dCkge1xuICAgICAgY2xlYXJUaW1lb3V0KHNlbGYuX3RpbWVvdXQpO1xuICAgIH1cbiAgICBzZWxmLl90aW1lb3V0ID0gc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICBzZWxmLmVtaXQoXCJ0aW1lb3V0XCIpO1xuICAgICAgY2xlYXJUaW1lcigpO1xuICAgIH0sIG1zZWNzKTtcbiAgICBkZXN0cm95T25UaW1lb3V0KHNvY2tldCk7XG4gIH1cblxuICAvLyBTdG9wcyBhIHRpbWVvdXQgZnJvbSB0cmlnZ2VyaW5nXG4gIGZ1bmN0aW9uIGNsZWFyVGltZXIoKSB7XG4gICAgLy8gQ2xlYXIgdGhlIHRpbWVvdXRcbiAgICBpZiAoc2VsZi5fdGltZW91dCkge1xuICAgICAgY2xlYXJUaW1lb3V0KHNlbGYuX3RpbWVvdXQpO1xuICAgICAgc2VsZi5fdGltZW91dCA9IG51bGw7XG4gICAgfVxuXG4gICAgLy8gQ2xlYW4gdXAgYWxsIGF0dGFjaGVkIGxpc3RlbmVyc1xuICAgIHNlbGYucmVtb3ZlTGlzdGVuZXIoXCJhYm9ydFwiLCBjbGVhclRpbWVyKTtcbiAgICBzZWxmLnJlbW92ZUxpc3RlbmVyKFwiZXJyb3JcIiwgY2xlYXJUaW1lcik7XG4gICAgc2VsZi5yZW1vdmVMaXN0ZW5lcihcInJlc3BvbnNlXCIsIGNsZWFyVGltZXIpO1xuICAgIHNlbGYucmVtb3ZlTGlzdGVuZXIoXCJjbG9zZVwiLCBjbGVhclRpbWVyKTtcbiAgICBpZiAoY2FsbGJhY2spIHtcbiAgICAgIHNlbGYucmVtb3ZlTGlzdGVuZXIoXCJ0aW1lb3V0XCIsIGNhbGxiYWNrKTtcbiAgICB9XG4gICAgaWYgKCFzZWxmLnNvY2tldCkge1xuICAgICAgc2VsZi5fY3VycmVudFJlcXVlc3QucmVtb3ZlTGlzdGVuZXIoXCJzb2NrZXRcIiwgc3RhcnRUaW1lcik7XG4gICAgfVxuICB9XG5cbiAgLy8gQXR0YWNoIGNhbGxiYWNrIGlmIHBhc3NlZFxuICBpZiAoY2FsbGJhY2spIHtcbiAgICB0aGlzLm9uKFwidGltZW91dFwiLCBjYWxsYmFjayk7XG4gIH1cblxuICAvLyBTdGFydCB0aGUgdGltZXIgaWYgb3Igd2hlbiB0aGUgc29ja2V0IGlzIG9wZW5lZFxuICBpZiAodGhpcy5zb2NrZXQpIHtcbiAgICBzdGFydFRpbWVyKHRoaXMuc29ja2V0KTtcbiAgfVxuICBlbHNlIHtcbiAgICB0aGlzLl9jdXJyZW50UmVxdWVzdC5vbmNlKFwic29ja2V0XCIsIHN0YXJ0VGltZXIpO1xuICB9XG5cbiAgLy8gQ2xlYW4gdXAgb24gZXZlbnRzXG4gIHRoaXMub24oXCJzb2NrZXRcIiwgZGVzdHJveU9uVGltZW91dCk7XG4gIHRoaXMub24oXCJhYm9ydFwiLCBjbGVhclRpbWVyKTtcbiAgdGhpcy5vbihcImVycm9yXCIsIGNsZWFyVGltZXIpO1xuICB0aGlzLm9uKFwicmVzcG9uc2VcIiwgY2xlYXJUaW1lcik7XG4gIHRoaXMub24oXCJjbG9zZVwiLCBjbGVhclRpbWVyKTtcblxuICByZXR1cm4gdGhpcztcbn07XG5cbi8vIFByb3h5IGFsbCBvdGhlciBwdWJsaWMgQ2xpZW50UmVxdWVzdCBtZXRob2RzXG5bXG4gIFwiZmx1c2hIZWFkZXJzXCIsIFwiZ2V0SGVhZGVyXCIsXG4gIFwic2V0Tm9EZWxheVwiLCBcInNldFNvY2tldEtlZXBBbGl2ZVwiLFxuXS5mb3JFYWNoKGZ1bmN0aW9uIChtZXRob2QpIHtcbiAgUmVkaXJlY3RhYmxlUmVxdWVzdC5wcm90b3R5cGVbbWV0aG9kXSA9IGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgcmV0dXJuIHRoaXMuX2N1cnJlbnRSZXF1ZXN0W21ldGhvZF0oYSwgYik7XG4gIH07XG59KTtcblxuLy8gUHJveHkgYWxsIHB1YmxpYyBDbGllbnRSZXF1ZXN0IHByb3BlcnRpZXNcbltcImFib3J0ZWRcIiwgXCJjb25uZWN0aW9uXCIsIFwic29ja2V0XCJdLmZvckVhY2goZnVuY3Rpb24gKHByb3BlcnR5KSB7XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShSZWRpcmVjdGFibGVSZXF1ZXN0LnByb3RvdHlwZSwgcHJvcGVydHksIHtcbiAgICBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXMuX2N1cnJlbnRSZXF1ZXN0W3Byb3BlcnR5XTsgfSxcbiAgfSk7XG59KTtcblxuUmVkaXJlY3RhYmxlUmVxdWVzdC5wcm90b3R5cGUuX3Nhbml0aXplT3B0aW9ucyA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gIC8vIEVuc3VyZSBoZWFkZXJzIGFyZSBhbHdheXMgcHJlc2VudFxuICBpZiAoIW9wdGlvbnMuaGVhZGVycykge1xuICAgIG9wdGlvbnMuaGVhZGVycyA9IHt9O1xuICB9XG5cbiAgLy8gU2luY2UgaHR0cC5yZXF1ZXN0IHRyZWF0cyBob3N0IGFzIGFuIGFsaWFzIG9mIGhvc3RuYW1lLFxuICAvLyBidXQgdGhlIHVybCBtb2R1bGUgaW50ZXJwcmV0cyBob3N0IGFzIGhvc3RuYW1lIHBsdXMgcG9ydCxcbiAgLy8gZWxpbWluYXRlIHRoZSBob3N0IHByb3BlcnR5IHRvIGF2b2lkIGNvbmZ1c2lvbi5cbiAgaWYgKG9wdGlvbnMuaG9zdCkge1xuICAgIC8vIFVzZSBob3N0bmFtZSBpZiBzZXQsIGJlY2F1c2UgaXQgaGFzIHByZWNlZGVuY2VcbiAgICBpZiAoIW9wdGlvbnMuaG9zdG5hbWUpIHtcbiAgICAgIG9wdGlvbnMuaG9zdG5hbWUgPSBvcHRpb25zLmhvc3Q7XG4gICAgfVxuICAgIGRlbGV0ZSBvcHRpb25zLmhvc3Q7XG4gIH1cblxuICAvLyBDb21wbGV0ZSB0aGUgVVJMIG9iamVjdCB3aGVuIG5lY2Vzc2FyeVxuICBpZiAoIW9wdGlvbnMucGF0aG5hbWUgJiYgb3B0aW9ucy5wYXRoKSB7XG4gICAgdmFyIHNlYXJjaFBvcyA9IG9wdGlvbnMucGF0aC5pbmRleE9mKFwiP1wiKTtcbiAgICBpZiAoc2VhcmNoUG9zIDwgMCkge1xuICAgICAgb3B0aW9ucy5wYXRobmFtZSA9IG9wdGlvbnMucGF0aDtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICBvcHRpb25zLnBhdGhuYW1lID0gb3B0aW9ucy5wYXRoLnN1YnN0cmluZygwLCBzZWFyY2hQb3MpO1xuICAgICAgb3B0aW9ucy5zZWFyY2ggPSBvcHRpb25zLnBhdGguc3Vic3RyaW5nKHNlYXJjaFBvcyk7XG4gICAgfVxuICB9XG59O1xuXG5cbi8vIEV4ZWN1dGVzIHRoZSBuZXh0IG5hdGl2ZSByZXF1ZXN0IChpbml0aWFsIG9yIHJlZGlyZWN0KVxuUmVkaXJlY3RhYmxlUmVxdWVzdC5wcm90b3R5cGUuX3BlcmZvcm1SZXF1ZXN0ID0gZnVuY3Rpb24gKCkge1xuICAvLyBMb2FkIHRoZSBuYXRpdmUgcHJvdG9jb2xcbiAgdmFyIHByb3RvY29sID0gdGhpcy5fb3B0aW9ucy5wcm90b2NvbDtcbiAgdmFyIG5hdGl2ZVByb3RvY29sID0gdGhpcy5fb3B0aW9ucy5uYXRpdmVQcm90b2NvbHNbcHJvdG9jb2xdO1xuICBpZiAoIW5hdGl2ZVByb3RvY29sKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlVuc3VwcG9ydGVkIHByb3RvY29sIFwiICsgcHJvdG9jb2wpO1xuICB9XG5cbiAgLy8gSWYgc3BlY2lmaWVkLCB1c2UgdGhlIGFnZW50IGNvcnJlc3BvbmRpbmcgdG8gdGhlIHByb3RvY29sXG4gIC8vIChIVFRQIGFuZCBIVFRQUyB1c2UgZGlmZmVyZW50IHR5cGVzIG9mIGFnZW50cylcbiAgaWYgKHRoaXMuX29wdGlvbnMuYWdlbnRzKSB7XG4gICAgdmFyIHNjaGVtZSA9IHByb3RvY29sLnNsaWNlKDAsIC0xKTtcbiAgICB0aGlzLl9vcHRpb25zLmFnZW50ID0gdGhpcy5fb3B0aW9ucy5hZ2VudHNbc2NoZW1lXTtcbiAgfVxuXG4gIC8vIENyZWF0ZSB0aGUgbmF0aXZlIHJlcXVlc3QgYW5kIHNldCB1cCBpdHMgZXZlbnQgaGFuZGxlcnNcbiAgdmFyIHJlcXVlc3QgPSB0aGlzLl9jdXJyZW50UmVxdWVzdCA9XG4gICAgICAgIG5hdGl2ZVByb3RvY29sLnJlcXVlc3QodGhpcy5fb3B0aW9ucywgdGhpcy5fb25OYXRpdmVSZXNwb25zZSk7XG4gIHJlcXVlc3QuX3JlZGlyZWN0YWJsZSA9IHRoaXM7XG4gIGZvciAodmFyIGV2ZW50IG9mIGV2ZW50cykge1xuICAgIHJlcXVlc3Qub24oZXZlbnQsIGV2ZW50SGFuZGxlcnNbZXZlbnRdKTtcbiAgfVxuXG4gIC8vIFJGQzcyMzBcdTAwQTc1LjMuMTogV2hlbiBtYWtpbmcgYSByZXF1ZXN0IGRpcmVjdGx5IHRvIGFuIG9yaWdpbiBzZXJ2ZXIsIFtcdTIwMjZdXG4gIC8vIGEgY2xpZW50IE1VU1Qgc2VuZCBvbmx5IHRoZSBhYnNvbHV0ZSBwYXRoIFtcdTIwMjZdIGFzIHRoZSByZXF1ZXN0LXRhcmdldC5cbiAgdGhpcy5fY3VycmVudFVybCA9IC9eXFwvLy50ZXN0KHRoaXMuX29wdGlvbnMucGF0aCkgP1xuICAgIHVybC5mb3JtYXQodGhpcy5fb3B0aW9ucykgOlxuICAgIC8vIFdoZW4gbWFraW5nIGEgcmVxdWVzdCB0byBhIHByb3h5LCBbXHUyMDI2XVxuICAgIC8vIGEgY2xpZW50IE1VU1Qgc2VuZCB0aGUgdGFyZ2V0IFVSSSBpbiBhYnNvbHV0ZS1mb3JtIFtcdTIwMjZdLlxuICAgIHRoaXMuX29wdGlvbnMucGF0aDtcblxuICAvLyBFbmQgYSByZWRpcmVjdGVkIHJlcXVlc3RcbiAgLy8gKFRoZSBmaXJzdCByZXF1ZXN0IG11c3QgYmUgZW5kZWQgZXhwbGljaXRseSB3aXRoIFJlZGlyZWN0YWJsZVJlcXVlc3QjZW5kKVxuICBpZiAodGhpcy5faXNSZWRpcmVjdCkge1xuICAgIC8vIFdyaXRlIHRoZSByZXF1ZXN0IGVudGl0eSBhbmQgZW5kXG4gICAgdmFyIGkgPSAwO1xuICAgIHZhciBzZWxmID0gdGhpcztcbiAgICB2YXIgYnVmZmVycyA9IHRoaXMuX3JlcXVlc3RCb2R5QnVmZmVycztcbiAgICAoZnVuY3Rpb24gd3JpdGVOZXh0KGVycm9yKSB7XG4gICAgICAvLyBPbmx5IHdyaXRlIGlmIHRoaXMgcmVxdWVzdCBoYXMgbm90IGJlZW4gcmVkaXJlY3RlZCB5ZXRcbiAgICAgIC8vIGlzdGFuYnVsIGlnbm9yZSBlbHNlXG4gICAgICBpZiAocmVxdWVzdCA9PT0gc2VsZi5fY3VycmVudFJlcXVlc3QpIHtcbiAgICAgICAgLy8gUmVwb3J0IGFueSB3cml0ZSBlcnJvcnNcbiAgICAgICAgLy8gaXN0YW5idWwgaWdub3JlIGlmXG4gICAgICAgIGlmIChlcnJvcikge1xuICAgICAgICAgIHNlbGYuZW1pdChcImVycm9yXCIsIGVycm9yKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBXcml0ZSB0aGUgbmV4dCBidWZmZXIgaWYgdGhlcmUgYXJlIHN0aWxsIGxlZnRcbiAgICAgICAgZWxzZSBpZiAoaSA8IGJ1ZmZlcnMubGVuZ3RoKSB7XG4gICAgICAgICAgdmFyIGJ1ZmZlciA9IGJ1ZmZlcnNbaSsrXTtcbiAgICAgICAgICAvLyBpc3RhbmJ1bCBpZ25vcmUgZWxzZVxuICAgICAgICAgIGlmICghcmVxdWVzdC5maW5pc2hlZCkge1xuICAgICAgICAgICAgcmVxdWVzdC53cml0ZShidWZmZXIuZGF0YSwgYnVmZmVyLmVuY29kaW5nLCB3cml0ZU5leHQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBFbmQgdGhlIHJlcXVlc3QgaWYgYGVuZGAgaGFzIGJlZW4gY2FsbGVkIG9uIHVzXG4gICAgICAgIGVsc2UgaWYgKHNlbGYuX2VuZGVkKSB7XG4gICAgICAgICAgcmVxdWVzdC5lbmQoKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0oKSk7XG4gIH1cbn07XG5cbi8vIFByb2Nlc3NlcyBhIHJlc3BvbnNlIGZyb20gdGhlIGN1cnJlbnQgbmF0aXZlIHJlcXVlc3RcblJlZGlyZWN0YWJsZVJlcXVlc3QucHJvdG90eXBlLl9wcm9jZXNzUmVzcG9uc2UgPSBmdW5jdGlvbiAocmVzcG9uc2UpIHtcbiAgLy8gU3RvcmUgdGhlIHJlZGlyZWN0ZWQgcmVzcG9uc2VcbiAgdmFyIHN0YXR1c0NvZGUgPSByZXNwb25zZS5zdGF0dXNDb2RlO1xuICBpZiAodGhpcy5fb3B0aW9ucy50cmFja1JlZGlyZWN0cykge1xuICAgIHRoaXMuX3JlZGlyZWN0cy5wdXNoKHtcbiAgICAgIHVybDogdGhpcy5fY3VycmVudFVybCxcbiAgICAgIGhlYWRlcnM6IHJlc3BvbnNlLmhlYWRlcnMsXG4gICAgICBzdGF0dXNDb2RlOiBzdGF0dXNDb2RlLFxuICAgIH0pO1xuICB9XG5cbiAgLy8gUkZDNzIzMVx1MDBBNzYuNDogVGhlIDN4eCAoUmVkaXJlY3Rpb24pIGNsYXNzIG9mIHN0YXR1cyBjb2RlIGluZGljYXRlc1xuICAvLyB0aGF0IGZ1cnRoZXIgYWN0aW9uIG5lZWRzIHRvIGJlIHRha2VuIGJ5IHRoZSB1c2VyIGFnZW50IGluIG9yZGVyIHRvXG4gIC8vIGZ1bGZpbGwgdGhlIHJlcXVlc3QuIElmIGEgTG9jYXRpb24gaGVhZGVyIGZpZWxkIGlzIHByb3ZpZGVkLFxuICAvLyB0aGUgdXNlciBhZ2VudCBNQVkgYXV0b21hdGljYWxseSByZWRpcmVjdCBpdHMgcmVxdWVzdCB0byB0aGUgVVJJXG4gIC8vIHJlZmVyZW5jZWQgYnkgdGhlIExvY2F0aW9uIGZpZWxkIHZhbHVlLFxuICAvLyBldmVuIGlmIHRoZSBzcGVjaWZpYyBzdGF0dXMgY29kZSBpcyBub3QgdW5kZXJzdG9vZC5cblxuICAvLyBJZiB0aGUgcmVzcG9uc2UgaXMgbm90IGEgcmVkaXJlY3Q7IHJldHVybiBpdCBhcy1pc1xuICB2YXIgbG9jYXRpb24gPSByZXNwb25zZS5oZWFkZXJzLmxvY2F0aW9uO1xuICBpZiAoIWxvY2F0aW9uIHx8IHRoaXMuX29wdGlvbnMuZm9sbG93UmVkaXJlY3RzID09PSBmYWxzZSB8fFxuICAgICAgc3RhdHVzQ29kZSA8IDMwMCB8fCBzdGF0dXNDb2RlID49IDQwMCkge1xuICAgIHJlc3BvbnNlLnJlc3BvbnNlVXJsID0gdGhpcy5fY3VycmVudFVybDtcbiAgICByZXNwb25zZS5yZWRpcmVjdHMgPSB0aGlzLl9yZWRpcmVjdHM7XG4gICAgdGhpcy5lbWl0KFwicmVzcG9uc2VcIiwgcmVzcG9uc2UpO1xuXG4gICAgLy8gQ2xlYW4gdXBcbiAgICB0aGlzLl9yZXF1ZXN0Qm9keUJ1ZmZlcnMgPSBbXTtcbiAgICByZXR1cm47XG4gIH1cblxuICAvLyBUaGUgcmVzcG9uc2UgaXMgYSByZWRpcmVjdCwgc28gYWJvcnQgdGhlIGN1cnJlbnQgcmVxdWVzdFxuICBkZXN0cm95UmVxdWVzdCh0aGlzLl9jdXJyZW50UmVxdWVzdCk7XG4gIC8vIERpc2NhcmQgdGhlIHJlbWFpbmRlciBvZiB0aGUgcmVzcG9uc2UgdG8gYXZvaWQgd2FpdGluZyBmb3IgZGF0YVxuICByZXNwb25zZS5kZXN0cm95KCk7XG5cbiAgLy8gUkZDNzIzMVx1MDBBNzYuNDogQSBjbGllbnQgU0hPVUxEIGRldGVjdCBhbmQgaW50ZXJ2ZW5lXG4gIC8vIGluIGN5Y2xpY2FsIHJlZGlyZWN0aW9ucyAoaS5lLiwgXCJpbmZpbml0ZVwiIHJlZGlyZWN0aW9uIGxvb3BzKS5cbiAgaWYgKCsrdGhpcy5fcmVkaXJlY3RDb3VudCA+IHRoaXMuX29wdGlvbnMubWF4UmVkaXJlY3RzKSB7XG4gICAgdGhyb3cgbmV3IFRvb01hbnlSZWRpcmVjdHNFcnJvcigpO1xuICB9XG5cbiAgLy8gU3RvcmUgdGhlIHJlcXVlc3QgaGVhZGVycyBpZiBhcHBsaWNhYmxlXG4gIHZhciByZXF1ZXN0SGVhZGVycztcbiAgdmFyIGJlZm9yZVJlZGlyZWN0ID0gdGhpcy5fb3B0aW9ucy5iZWZvcmVSZWRpcmVjdDtcbiAgaWYgKGJlZm9yZVJlZGlyZWN0KSB7XG4gICAgcmVxdWVzdEhlYWRlcnMgPSBPYmplY3QuYXNzaWduKHtcbiAgICAgIC8vIFRoZSBIb3N0IGhlYWRlciB3YXMgc2V0IGJ5IG5hdGl2ZVByb3RvY29sLnJlcXVlc3RcbiAgICAgIEhvc3Q6IHJlc3BvbnNlLnJlcS5nZXRIZWFkZXIoXCJob3N0XCIpLFxuICAgIH0sIHRoaXMuX29wdGlvbnMuaGVhZGVycyk7XG4gIH1cblxuICAvLyBSRkM3MjMxXHUwMEE3Ni40OiBBdXRvbWF0aWMgcmVkaXJlY3Rpb24gbmVlZHMgdG8gZG9uZSB3aXRoXG4gIC8vIGNhcmUgZm9yIG1ldGhvZHMgbm90IGtub3duIHRvIGJlIHNhZmUsIFtcdTIwMjZdXG4gIC8vIFJGQzcyMzFcdTAwQTc2LjQuMlx1MjAxMzM6IEZvciBoaXN0b3JpY2FsIHJlYXNvbnMsIGEgdXNlciBhZ2VudCBNQVkgY2hhbmdlXG4gIC8vIHRoZSByZXF1ZXN0IG1ldGhvZCBmcm9tIFBPU1QgdG8gR0VUIGZvciB0aGUgc3Vic2VxdWVudCByZXF1ZXN0LlxuICB2YXIgbWV0aG9kID0gdGhpcy5fb3B0aW9ucy5tZXRob2Q7XG4gIGlmICgoc3RhdHVzQ29kZSA9PT0gMzAxIHx8IHN0YXR1c0NvZGUgPT09IDMwMikgJiYgdGhpcy5fb3B0aW9ucy5tZXRob2QgPT09IFwiUE9TVFwiIHx8XG4gICAgICAvLyBSRkM3MjMxXHUwMEE3Ni40LjQ6IFRoZSAzMDMgKFNlZSBPdGhlcikgc3RhdHVzIGNvZGUgaW5kaWNhdGVzIHRoYXRcbiAgICAgIC8vIHRoZSBzZXJ2ZXIgaXMgcmVkaXJlY3RpbmcgdGhlIHVzZXIgYWdlbnQgdG8gYSBkaWZmZXJlbnQgcmVzb3VyY2UgW1x1MjAyNl1cbiAgICAgIC8vIEEgdXNlciBhZ2VudCBjYW4gcGVyZm9ybSBhIHJldHJpZXZhbCByZXF1ZXN0IHRhcmdldGluZyB0aGF0IFVSSVxuICAgICAgLy8gKGEgR0VUIG9yIEhFQUQgcmVxdWVzdCBpZiB1c2luZyBIVFRQKSBbXHUyMDI2XVxuICAgICAgKHN0YXR1c0NvZGUgPT09IDMwMykgJiYgIS9eKD86R0VUfEhFQUQpJC8udGVzdCh0aGlzLl9vcHRpb25zLm1ldGhvZCkpIHtcbiAgICB0aGlzLl9vcHRpb25zLm1ldGhvZCA9IFwiR0VUXCI7XG4gICAgLy8gRHJvcCBhIHBvc3NpYmxlIGVudGl0eSBhbmQgaGVhZGVycyByZWxhdGVkIHRvIGl0XG4gICAgdGhpcy5fcmVxdWVzdEJvZHlCdWZmZXJzID0gW107XG4gICAgcmVtb3ZlTWF0Y2hpbmdIZWFkZXJzKC9eY29udGVudC0vaSwgdGhpcy5fb3B0aW9ucy5oZWFkZXJzKTtcbiAgfVxuXG4gIC8vIERyb3AgdGhlIEhvc3QgaGVhZGVyLCBhcyB0aGUgcmVkaXJlY3QgbWlnaHQgbGVhZCB0byBhIGRpZmZlcmVudCBob3N0XG4gIHZhciBjdXJyZW50SG9zdEhlYWRlciA9IHJlbW92ZU1hdGNoaW5nSGVhZGVycygvXmhvc3QkL2ksIHRoaXMuX29wdGlvbnMuaGVhZGVycyk7XG5cbiAgLy8gSWYgdGhlIHJlZGlyZWN0IGlzIHJlbGF0aXZlLCBjYXJyeSBvdmVyIHRoZSBob3N0IG9mIHRoZSBsYXN0IHJlcXVlc3RcbiAgdmFyIGN1cnJlbnRVcmxQYXJ0cyA9IHBhcnNlVXJsKHRoaXMuX2N1cnJlbnRVcmwpO1xuICB2YXIgY3VycmVudEhvc3QgPSBjdXJyZW50SG9zdEhlYWRlciB8fCBjdXJyZW50VXJsUGFydHMuaG9zdDtcbiAgdmFyIGN1cnJlbnRVcmwgPSAvXlxcdys6Ly50ZXN0KGxvY2F0aW9uKSA/IHRoaXMuX2N1cnJlbnRVcmwgOlxuICAgIHVybC5mb3JtYXQoT2JqZWN0LmFzc2lnbihjdXJyZW50VXJsUGFydHMsIHsgaG9zdDogY3VycmVudEhvc3QgfSkpO1xuXG4gIC8vIENyZWF0ZSB0aGUgcmVkaXJlY3RlZCByZXF1ZXN0XG4gIHZhciByZWRpcmVjdFVybCA9IHJlc29sdmVVcmwobG9jYXRpb24sIGN1cnJlbnRVcmwpO1xuICBkZWJ1ZyhcInJlZGlyZWN0aW5nIHRvXCIsIHJlZGlyZWN0VXJsLmhyZWYpO1xuICB0aGlzLl9pc1JlZGlyZWN0ID0gdHJ1ZTtcbiAgc3ByZWFkVXJsT2JqZWN0KHJlZGlyZWN0VXJsLCB0aGlzLl9vcHRpb25zKTtcblxuICAvLyBEcm9wIGNvbmZpZGVudGlhbCBoZWFkZXJzIHdoZW4gcmVkaXJlY3RpbmcgdG8gYSBsZXNzIHNlY3VyZSBwcm90b2NvbFxuICAvLyBvciB0byBhIGRpZmZlcmVudCBkb21haW4gdGhhdCBpcyBub3QgYSBzdXBlcmRvbWFpblxuICBpZiAocmVkaXJlY3RVcmwucHJvdG9jb2wgIT09IGN1cnJlbnRVcmxQYXJ0cy5wcm90b2NvbCAmJlxuICAgICByZWRpcmVjdFVybC5wcm90b2NvbCAhPT0gXCJodHRwczpcIiB8fFxuICAgICByZWRpcmVjdFVybC5ob3N0ICE9PSBjdXJyZW50SG9zdCAmJlxuICAgICAhaXNTdWJkb21haW4ocmVkaXJlY3RVcmwuaG9zdCwgY3VycmVudEhvc3QpKSB7XG4gICAgcmVtb3ZlTWF0Y2hpbmdIZWFkZXJzKC9eKD86KD86cHJveHktKT9hdXRob3JpemF0aW9ufGNvb2tpZSkkL2ksIHRoaXMuX29wdGlvbnMuaGVhZGVycyk7XG4gIH1cblxuICAvLyBFdmFsdWF0ZSB0aGUgYmVmb3JlUmVkaXJlY3QgY2FsbGJhY2tcbiAgaWYgKGlzRnVuY3Rpb24oYmVmb3JlUmVkaXJlY3QpKSB7XG4gICAgdmFyIHJlc3BvbnNlRGV0YWlscyA9IHtcbiAgICAgIGhlYWRlcnM6IHJlc3BvbnNlLmhlYWRlcnMsXG4gICAgICBzdGF0dXNDb2RlOiBzdGF0dXNDb2RlLFxuICAgIH07XG4gICAgdmFyIHJlcXVlc3REZXRhaWxzID0ge1xuICAgICAgdXJsOiBjdXJyZW50VXJsLFxuICAgICAgbWV0aG9kOiBtZXRob2QsXG4gICAgICBoZWFkZXJzOiByZXF1ZXN0SGVhZGVycyxcbiAgICB9O1xuICAgIGJlZm9yZVJlZGlyZWN0KHRoaXMuX29wdGlvbnMsIHJlc3BvbnNlRGV0YWlscywgcmVxdWVzdERldGFpbHMpO1xuICAgIHRoaXMuX3Nhbml0aXplT3B0aW9ucyh0aGlzLl9vcHRpb25zKTtcbiAgfVxuXG4gIC8vIFBlcmZvcm0gdGhlIHJlZGlyZWN0ZWQgcmVxdWVzdFxuICB0aGlzLl9wZXJmb3JtUmVxdWVzdCgpO1xufTtcblxuLy8gV3JhcHMgdGhlIGtleS92YWx1ZSBvYmplY3Qgb2YgcHJvdG9jb2xzIHdpdGggcmVkaXJlY3QgZnVuY3Rpb25hbGl0eVxuZnVuY3Rpb24gd3JhcChwcm90b2NvbHMpIHtcbiAgLy8gRGVmYXVsdCBzZXR0aW5nc1xuICB2YXIgZXhwb3J0cyA9IHtcbiAgICBtYXhSZWRpcmVjdHM6IDIxLFxuICAgIG1heEJvZHlMZW5ndGg6IDEwICogMTAyNCAqIDEwMjQsXG4gIH07XG5cbiAgLy8gV3JhcCBlYWNoIHByb3RvY29sXG4gIHZhciBuYXRpdmVQcm90b2NvbHMgPSB7fTtcbiAgT2JqZWN0LmtleXMocHJvdG9jb2xzKS5mb3JFYWNoKGZ1bmN0aW9uIChzY2hlbWUpIHtcbiAgICB2YXIgcHJvdG9jb2wgPSBzY2hlbWUgKyBcIjpcIjtcbiAgICB2YXIgbmF0aXZlUHJvdG9jb2wgPSBuYXRpdmVQcm90b2NvbHNbcHJvdG9jb2xdID0gcHJvdG9jb2xzW3NjaGVtZV07XG4gICAgdmFyIHdyYXBwZWRQcm90b2NvbCA9IGV4cG9ydHNbc2NoZW1lXSA9IE9iamVjdC5jcmVhdGUobmF0aXZlUHJvdG9jb2wpO1xuXG4gICAgLy8gRXhlY3V0ZXMgYSByZXF1ZXN0LCBmb2xsb3dpbmcgcmVkaXJlY3RzXG4gICAgZnVuY3Rpb24gcmVxdWVzdChpbnB1dCwgb3B0aW9ucywgY2FsbGJhY2spIHtcbiAgICAgIC8vIFBhcnNlIHBhcmFtZXRlcnMsIGVuc3VyaW5nIHRoYXQgaW5wdXQgaXMgYW4gb2JqZWN0XG4gICAgICBpZiAoaXNVUkwoaW5wdXQpKSB7XG4gICAgICAgIGlucHV0ID0gc3ByZWFkVXJsT2JqZWN0KGlucHV0KTtcbiAgICAgIH1cbiAgICAgIGVsc2UgaWYgKGlzU3RyaW5nKGlucHV0KSkge1xuICAgICAgICBpbnB1dCA9IHNwcmVhZFVybE9iamVjdChwYXJzZVVybChpbnB1dCkpO1xuICAgICAgfVxuICAgICAgZWxzZSB7XG4gICAgICAgIGNhbGxiYWNrID0gb3B0aW9ucztcbiAgICAgICAgb3B0aW9ucyA9IHZhbGlkYXRlVXJsKGlucHV0KTtcbiAgICAgICAgaW5wdXQgPSB7IHByb3RvY29sOiBwcm90b2NvbCB9O1xuICAgICAgfVxuICAgICAgaWYgKGlzRnVuY3Rpb24ob3B0aW9ucykpIHtcbiAgICAgICAgY2FsbGJhY2sgPSBvcHRpb25zO1xuICAgICAgICBvcHRpb25zID0gbnVsbDtcbiAgICAgIH1cblxuICAgICAgLy8gU2V0IGRlZmF1bHRzXG4gICAgICBvcHRpb25zID0gT2JqZWN0LmFzc2lnbih7XG4gICAgICAgIG1heFJlZGlyZWN0czogZXhwb3J0cy5tYXhSZWRpcmVjdHMsXG4gICAgICAgIG1heEJvZHlMZW5ndGg6IGV4cG9ydHMubWF4Qm9keUxlbmd0aCxcbiAgICAgIH0sIGlucHV0LCBvcHRpb25zKTtcbiAgICAgIG9wdGlvbnMubmF0aXZlUHJvdG9jb2xzID0gbmF0aXZlUHJvdG9jb2xzO1xuICAgICAgaWYgKCFpc1N0cmluZyhvcHRpb25zLmhvc3QpICYmICFpc1N0cmluZyhvcHRpb25zLmhvc3RuYW1lKSkge1xuICAgICAgICBvcHRpb25zLmhvc3RuYW1lID0gXCI6OjFcIjtcbiAgICAgIH1cblxuICAgICAgYXNzZXJ0LmVxdWFsKG9wdGlvbnMucHJvdG9jb2wsIHByb3RvY29sLCBcInByb3RvY29sIG1pc21hdGNoXCIpO1xuICAgICAgZGVidWcoXCJvcHRpb25zXCIsIG9wdGlvbnMpO1xuICAgICAgcmV0dXJuIG5ldyBSZWRpcmVjdGFibGVSZXF1ZXN0KG9wdGlvbnMsIGNhbGxiYWNrKTtcbiAgICB9XG5cbiAgICAvLyBFeGVjdXRlcyBhIEdFVCByZXF1ZXN0LCBmb2xsb3dpbmcgcmVkaXJlY3RzXG4gICAgZnVuY3Rpb24gZ2V0KGlucHV0LCBvcHRpb25zLCBjYWxsYmFjaykge1xuICAgICAgdmFyIHdyYXBwZWRSZXF1ZXN0ID0gd3JhcHBlZFByb3RvY29sLnJlcXVlc3QoaW5wdXQsIG9wdGlvbnMsIGNhbGxiYWNrKTtcbiAgICAgIHdyYXBwZWRSZXF1ZXN0LmVuZCgpO1xuICAgICAgcmV0dXJuIHdyYXBwZWRSZXF1ZXN0O1xuICAgIH1cblxuICAgIC8vIEV4cG9zZSB0aGUgcHJvcGVydGllcyBvbiB0aGUgd3JhcHBlZCBwcm90b2NvbFxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKHdyYXBwZWRQcm90b2NvbCwge1xuICAgICAgcmVxdWVzdDogeyB2YWx1ZTogcmVxdWVzdCwgY29uZmlndXJhYmxlOiB0cnVlLCBlbnVtZXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9LFxuICAgICAgZ2V0OiB7IHZhbHVlOiBnZXQsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgZW51bWVyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUgfSxcbiAgICB9KTtcbiAgfSk7XG4gIHJldHVybiBleHBvcnRzO1xufVxuXG5mdW5jdGlvbiBub29wKCkgeyAvKiBlbXB0eSAqLyB9XG5cbmZ1bmN0aW9uIHBhcnNlVXJsKGlucHV0KSB7XG4gIHZhciBwYXJzZWQ7XG4gIC8vIGlzdGFuYnVsIGlnbm9yZSBlbHNlXG4gIGlmICh1c2VOYXRpdmVVUkwpIHtcbiAgICBwYXJzZWQgPSBuZXcgVVJMKGlucHV0KTtcbiAgfVxuICBlbHNlIHtcbiAgICAvLyBFbnN1cmUgdGhlIFVSTCBpcyB2YWxpZCBhbmQgYWJzb2x1dGVcbiAgICBwYXJzZWQgPSB2YWxpZGF0ZVVybCh1cmwucGFyc2UoaW5wdXQpKTtcbiAgICBpZiAoIWlzU3RyaW5nKHBhcnNlZC5wcm90b2NvbCkpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkVXJsRXJyb3IoeyBpbnB1dCB9KTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHBhcnNlZDtcbn1cblxuZnVuY3Rpb24gcmVzb2x2ZVVybChyZWxhdGl2ZSwgYmFzZSkge1xuICAvLyBpc3RhbmJ1bCBpZ25vcmUgbmV4dFxuICByZXR1cm4gdXNlTmF0aXZlVVJMID8gbmV3IFVSTChyZWxhdGl2ZSwgYmFzZSkgOiBwYXJzZVVybCh1cmwucmVzb2x2ZShiYXNlLCByZWxhdGl2ZSkpO1xufVxuXG5mdW5jdGlvbiB2YWxpZGF0ZVVybChpbnB1dCkge1xuICBpZiAoL15cXFsvLnRlc3QoaW5wdXQuaG9zdG5hbWUpICYmICEvXlxcW1s6MC05YS1mXStcXF0kL2kudGVzdChpbnB1dC5ob3N0bmFtZSkpIHtcbiAgICB0aHJvdyBuZXcgSW52YWxpZFVybEVycm9yKHsgaW5wdXQ6IGlucHV0LmhyZWYgfHwgaW5wdXQgfSk7XG4gIH1cbiAgaWYgKC9eXFxbLy50ZXN0KGlucHV0Lmhvc3QpICYmICEvXlxcW1s6MC05YS1mXStcXF0oOlxcZCspPyQvaS50ZXN0KGlucHV0Lmhvc3QpKSB7XG4gICAgdGhyb3cgbmV3IEludmFsaWRVcmxFcnJvcih7IGlucHV0OiBpbnB1dC5ocmVmIHx8IGlucHV0IH0pO1xuICB9XG4gIHJldHVybiBpbnB1dDtcbn1cblxuZnVuY3Rpb24gc3ByZWFkVXJsT2JqZWN0KHVybE9iamVjdCwgdGFyZ2V0KSB7XG4gIHZhciBzcHJlYWQgPSB0YXJnZXQgfHwge307XG4gIGZvciAodmFyIGtleSBvZiBwcmVzZXJ2ZWRVcmxGaWVsZHMpIHtcbiAgICBzcHJlYWRba2V5XSA9IHVybE9iamVjdFtrZXldO1xuICB9XG5cbiAgLy8gRml4IElQdjYgaG9zdG5hbWVcbiAgaWYgKHNwcmVhZC5ob3N0bmFtZS5zdGFydHNXaXRoKFwiW1wiKSkge1xuICAgIHNwcmVhZC5ob3N0bmFtZSA9IHNwcmVhZC5ob3N0bmFtZS5zbGljZSgxLCAtMSk7XG4gIH1cbiAgLy8gRW5zdXJlIHBvcnQgaXMgYSBudW1iZXJcbiAgaWYgKHNwcmVhZC5wb3J0ICE9PSBcIlwiKSB7XG4gICAgc3ByZWFkLnBvcnQgPSBOdW1iZXIoc3ByZWFkLnBvcnQpO1xuICB9XG4gIC8vIENvbmNhdGVuYXRlIHBhdGhcbiAgc3ByZWFkLnBhdGggPSBzcHJlYWQuc2VhcmNoID8gc3ByZWFkLnBhdGhuYW1lICsgc3ByZWFkLnNlYXJjaCA6IHNwcmVhZC5wYXRobmFtZTtcblxuICByZXR1cm4gc3ByZWFkO1xufVxuXG5mdW5jdGlvbiByZW1vdmVNYXRjaGluZ0hlYWRlcnMocmVnZXgsIGhlYWRlcnMpIHtcbiAgdmFyIGxhc3RWYWx1ZTtcbiAgZm9yICh2YXIgaGVhZGVyIGluIGhlYWRlcnMpIHtcbiAgICBpZiAocmVnZXgudGVzdChoZWFkZXIpKSB7XG4gICAgICBsYXN0VmFsdWUgPSBoZWFkZXJzW2hlYWRlcl07XG4gICAgICBkZWxldGUgaGVhZGVyc1toZWFkZXJdO1xuICAgIH1cbiAgfVxuICByZXR1cm4gKGxhc3RWYWx1ZSA9PT0gbnVsbCB8fCB0eXBlb2YgbGFzdFZhbHVlID09PSBcInVuZGVmaW5lZFwiKSA/XG4gICAgdW5kZWZpbmVkIDogU3RyaW5nKGxhc3RWYWx1ZSkudHJpbSgpO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVFcnJvclR5cGUoY29kZSwgbWVzc2FnZSwgYmFzZUNsYXNzKSB7XG4gIC8vIENyZWF0ZSBjb25zdHJ1Y3RvclxuICBmdW5jdGlvbiBDdXN0b21FcnJvcihwcm9wZXJ0aWVzKSB7XG4gICAgLy8gaXN0YW5idWwgaWdub3JlIGVsc2VcbiAgICBpZiAoaXNGdW5jdGlvbihFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSkpIHtcbiAgICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsIHRoaXMuY29uc3RydWN0b3IpO1xuICAgIH1cbiAgICBPYmplY3QuYXNzaWduKHRoaXMsIHByb3BlcnRpZXMgfHwge30pO1xuICAgIHRoaXMuY29kZSA9IGNvZGU7XG4gICAgdGhpcy5tZXNzYWdlID0gdGhpcy5jYXVzZSA/IG1lc3NhZ2UgKyBcIjogXCIgKyB0aGlzLmNhdXNlLm1lc3NhZ2UgOiBtZXNzYWdlO1xuICB9XG5cbiAgLy8gQXR0YWNoIGNvbnN0cnVjdG9yIGFuZCBzZXQgZGVmYXVsdCBwcm9wZXJ0aWVzXG4gIEN1c3RvbUVycm9yLnByb3RvdHlwZSA9IG5ldyAoYmFzZUNsYXNzIHx8IEVycm9yKSgpO1xuICBPYmplY3QuZGVmaW5lUHJvcGVydGllcyhDdXN0b21FcnJvci5wcm90b3R5cGUsIHtcbiAgICBjb25zdHJ1Y3Rvcjoge1xuICAgICAgdmFsdWU6IEN1c3RvbUVycm9yLFxuICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgfSxcbiAgICBuYW1lOiB7XG4gICAgICB2YWx1ZTogXCJFcnJvciBbXCIgKyBjb2RlICsgXCJdXCIsXG4gICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICB9LFxuICB9KTtcbiAgcmV0dXJuIEN1c3RvbUVycm9yO1xufVxuXG5mdW5jdGlvbiBkZXN0cm95UmVxdWVzdChyZXF1ZXN0LCBlcnJvcikge1xuICBmb3IgKHZhciBldmVudCBvZiBldmVudHMpIHtcbiAgICByZXF1ZXN0LnJlbW92ZUxpc3RlbmVyKGV2ZW50LCBldmVudEhhbmRsZXJzW2V2ZW50XSk7XG4gIH1cbiAgcmVxdWVzdC5vbihcImVycm9yXCIsIG5vb3ApO1xuICByZXF1ZXN0LmRlc3Ryb3koZXJyb3IpO1xufVxuXG5mdW5jdGlvbiBpc1N1YmRvbWFpbihzdWJkb21haW4sIGRvbWFpbikge1xuICBhc3NlcnQoaXNTdHJpbmcoc3ViZG9tYWluKSAmJiBpc1N0cmluZyhkb21haW4pKTtcbiAgdmFyIGRvdCA9IHN1YmRvbWFpbi5sZW5ndGggLSBkb21haW4ubGVuZ3RoIC0gMTtcbiAgcmV0dXJuIGRvdCA+IDAgJiYgc3ViZG9tYWluW2RvdF0gPT09IFwiLlwiICYmIHN1YmRvbWFpbi5lbmRzV2l0aChkb21haW4pO1xufVxuXG5mdW5jdGlvbiBpc1N0cmluZyh2YWx1ZSkge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiIHx8IHZhbHVlIGluc3RhbmNlb2YgU3RyaW5nO1xufVxuXG5mdW5jdGlvbiBpc0Z1bmN0aW9uKHZhbHVlKSB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT09IFwiZnVuY3Rpb25cIjtcbn1cblxuZnVuY3Rpb24gaXNCdWZmZXIodmFsdWUpIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gXCJvYmplY3RcIiAmJiAoXCJsZW5ndGhcIiBpbiB2YWx1ZSk7XG59XG5cbmZ1bmN0aW9uIGlzVVJMKHZhbHVlKSB7XG4gIHJldHVybiBVUkwgJiYgdmFsdWUgaW5zdGFuY2VvZiBVUkw7XG59XG5cbi8vIEV4cG9ydHNcbm1vZHVsZS5leHBvcnRzID0gd3JhcCh7IGh0dHA6IGh0dHAsIGh0dHBzOiBodHRwcyB9KTtcbm1vZHVsZS5leHBvcnRzLndyYXAgPSB3cmFwO1xuIiwgImV4cG9ydCBjb25zdCBWRVJTSU9OID0gXCIxLjguNFwiOyIsICIndXNlIHN0cmljdCc7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHBhcnNlUHJvdG9jb2wodXJsKSB7XG4gIGNvbnN0IG1hdGNoID0gL14oWy0rXFx3XXsxLDI1fSkoOj9cXC9cXC98OikvLmV4ZWModXJsKTtcbiAgcmV0dXJuIG1hdGNoICYmIG1hdGNoWzFdIHx8ICcnO1xufVxuIiwgIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IEF4aW9zRXJyb3IgZnJvbSAnLi4vY29yZS9BeGlvc0Vycm9yLmpzJztcbmltcG9ydCBwYXJzZVByb3RvY29sIGZyb20gJy4vcGFyc2VQcm90b2NvbC5qcyc7XG5pbXBvcnQgcGxhdGZvcm0gZnJvbSAnLi4vcGxhdGZvcm0vaW5kZXguanMnO1xuXG5jb25zdCBEQVRBX1VSTF9QQVRURVJOID0gL14oPzooW147XSspOyk/KD86W147XSs7KT8oYmFzZTY0fCksKFtcXHNcXFNdKikkLztcblxuLyoqXG4gKiBQYXJzZSBkYXRhIHVyaSB0byBhIEJ1ZmZlciBvciBCbG9iXG4gKlxuICogQHBhcmFtIHtTdHJpbmd9IHVyaVxuICogQHBhcmFtIHs/Qm9vbGVhbn0gYXNCbG9iXG4gKiBAcGFyYW0gez9PYmplY3R9IG9wdGlvbnNcbiAqIEBwYXJhbSB7P0Z1bmN0aW9ufSBvcHRpb25zLkJsb2JcbiAqXG4gKiBAcmV0dXJucyB7QnVmZmVyfEJsb2J9XG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGZyb21EYXRhVVJJKHVyaSwgYXNCbG9iLCBvcHRpb25zKSB7XG4gIGNvbnN0IF9CbG9iID0gb3B0aW9ucyAmJiBvcHRpb25zLkJsb2IgfHwgcGxhdGZvcm0uY2xhc3Nlcy5CbG9iO1xuICBjb25zdCBwcm90b2NvbCA9IHBhcnNlUHJvdG9jb2wodXJpKTtcblxuICBpZiAoYXNCbG9iID09PSB1bmRlZmluZWQgJiYgX0Jsb2IpIHtcbiAgICBhc0Jsb2IgPSB0cnVlO1xuICB9XG5cbiAgaWYgKHByb3RvY29sID09PSAnZGF0YScpIHtcbiAgICB1cmkgPSBwcm90b2NvbC5sZW5ndGggPyB1cmkuc2xpY2UocHJvdG9jb2wubGVuZ3RoICsgMSkgOiB1cmk7XG5cbiAgICBjb25zdCBtYXRjaCA9IERBVEFfVVJMX1BBVFRFUk4uZXhlYyh1cmkpO1xuXG4gICAgaWYgKCFtYXRjaCkge1xuICAgICAgdGhyb3cgbmV3IEF4aW9zRXJyb3IoJ0ludmFsaWQgVVJMJywgQXhpb3NFcnJvci5FUlJfSU5WQUxJRF9VUkwpO1xuICAgIH1cblxuICAgIGNvbnN0IG1pbWUgPSBtYXRjaFsxXTtcbiAgICBjb25zdCBpc0Jhc2U2NCA9IG1hdGNoWzJdO1xuICAgIGNvbnN0IGJvZHkgPSBtYXRjaFszXTtcbiAgICBjb25zdCBidWZmZXIgPSBCdWZmZXIuZnJvbShkZWNvZGVVUklDb21wb25lbnQoYm9keSksIGlzQmFzZTY0ID8gJ2Jhc2U2NCcgOiAndXRmOCcpO1xuXG4gICAgaWYgKGFzQmxvYikge1xuICAgICAgaWYgKCFfQmxvYikge1xuICAgICAgICB0aHJvdyBuZXcgQXhpb3NFcnJvcignQmxvYiBpcyBub3Qgc3VwcG9ydGVkJywgQXhpb3NFcnJvci5FUlJfTk9UX1NVUFBPUlQpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gbmV3IF9CbG9iKFtidWZmZXJdLCB7dHlwZTogbWltZX0pO1xuICAgIH1cblxuICAgIHJldHVybiBidWZmZXI7XG4gIH1cblxuICB0aHJvdyBuZXcgQXhpb3NFcnJvcignVW5zdXBwb3J0ZWQgcHJvdG9jb2wgJyArIHByb3RvY29sLCBBeGlvc0Vycm9yLkVSUl9OT1RfU1VQUE9SVCk7XG59XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgc3RyZWFtIGZyb20gJ3N0cmVhbSc7XG5pbXBvcnQgdXRpbHMgZnJvbSAnLi4vdXRpbHMuanMnO1xuXG5jb25zdCBrSW50ZXJuYWxzID0gU3ltYm9sKCdpbnRlcm5hbHMnKTtcblxuY2xhc3MgQXhpb3NUcmFuc2Zvcm1TdHJlYW0gZXh0ZW5kcyBzdHJlYW0uVHJhbnNmb3Jte1xuICBjb25zdHJ1Y3RvcihvcHRpb25zKSB7XG4gICAgb3B0aW9ucyA9IHV0aWxzLnRvRmxhdE9iamVjdChvcHRpb25zLCB7XG4gICAgICBtYXhSYXRlOiAwLFxuICAgICAgY2h1bmtTaXplOiA2NCAqIDEwMjQsXG4gICAgICBtaW5DaHVua1NpemU6IDEwMCxcbiAgICAgIHRpbWVXaW5kb3c6IDUwMCxcbiAgICAgIHRpY2tzUmF0ZTogMixcbiAgICAgIHNhbXBsZXNDb3VudDogMTVcbiAgICB9LCBudWxsLCAocHJvcCwgc291cmNlKSA9PiB7XG4gICAgICByZXR1cm4gIXV0aWxzLmlzVW5kZWZpbmVkKHNvdXJjZVtwcm9wXSk7XG4gICAgfSk7XG5cbiAgICBzdXBlcih7XG4gICAgICByZWFkYWJsZUhpZ2hXYXRlck1hcms6IG9wdGlvbnMuY2h1bmtTaXplXG4gICAgfSk7XG5cbiAgICBjb25zdCBpbnRlcm5hbHMgPSB0aGlzW2tJbnRlcm5hbHNdID0ge1xuICAgICAgdGltZVdpbmRvdzogb3B0aW9ucy50aW1lV2luZG93LFxuICAgICAgY2h1bmtTaXplOiBvcHRpb25zLmNodW5rU2l6ZSxcbiAgICAgIG1heFJhdGU6IG9wdGlvbnMubWF4UmF0ZSxcbiAgICAgIG1pbkNodW5rU2l6ZTogb3B0aW9ucy5taW5DaHVua1NpemUsXG4gICAgICBieXRlc1NlZW46IDAsXG4gICAgICBpc0NhcHR1cmVkOiBmYWxzZSxcbiAgICAgIG5vdGlmaWVkQnl0ZXNMb2FkZWQ6IDAsXG4gICAgICB0czogRGF0ZS5ub3coKSxcbiAgICAgIGJ5dGVzOiAwLFxuICAgICAgb25SZWFkQ2FsbGJhY2s6IG51bGxcbiAgICB9O1xuXG4gICAgdGhpcy5vbignbmV3TGlzdGVuZXInLCBldmVudCA9PiB7XG4gICAgICBpZiAoZXZlbnQgPT09ICdwcm9ncmVzcycpIHtcbiAgICAgICAgaWYgKCFpbnRlcm5hbHMuaXNDYXB0dXJlZCkge1xuICAgICAgICAgIGludGVybmFscy5pc0NhcHR1cmVkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgX3JlYWQoc2l6ZSkge1xuICAgIGNvbnN0IGludGVybmFscyA9IHRoaXNba0ludGVybmFsc107XG5cbiAgICBpZiAoaW50ZXJuYWxzLm9uUmVhZENhbGxiYWNrKSB7XG4gICAgICBpbnRlcm5hbHMub25SZWFkQ2FsbGJhY2soKTtcbiAgICB9XG5cbiAgICByZXR1cm4gc3VwZXIuX3JlYWQoc2l6ZSk7XG4gIH1cblxuICBfdHJhbnNmb3JtKGNodW5rLCBlbmNvZGluZywgY2FsbGJhY2spIHtcbiAgICBjb25zdCBpbnRlcm5hbHMgPSB0aGlzW2tJbnRlcm5hbHNdO1xuICAgIGNvbnN0IG1heFJhdGUgPSBpbnRlcm5hbHMubWF4UmF0ZTtcblxuICAgIGNvbnN0IHJlYWRhYmxlSGlnaFdhdGVyTWFyayA9IHRoaXMucmVhZGFibGVIaWdoV2F0ZXJNYXJrO1xuXG4gICAgY29uc3QgdGltZVdpbmRvdyA9IGludGVybmFscy50aW1lV2luZG93O1xuXG4gICAgY29uc3QgZGl2aWRlciA9IDEwMDAgLyB0aW1lV2luZG93O1xuICAgIGNvbnN0IGJ5dGVzVGhyZXNob2xkID0gKG1heFJhdGUgLyBkaXZpZGVyKTtcbiAgICBjb25zdCBtaW5DaHVua1NpemUgPSBpbnRlcm5hbHMubWluQ2h1bmtTaXplICE9PSBmYWxzZSA/IE1hdGgubWF4KGludGVybmFscy5taW5DaHVua1NpemUsIGJ5dGVzVGhyZXNob2xkICogMC4wMSkgOiAwO1xuXG4gICAgY29uc3QgcHVzaENodW5rID0gKF9jaHVuaywgX2NhbGxiYWNrKSA9PiB7XG4gICAgICBjb25zdCBieXRlcyA9IEJ1ZmZlci5ieXRlTGVuZ3RoKF9jaHVuayk7XG4gICAgICBpbnRlcm5hbHMuYnl0ZXNTZWVuICs9IGJ5dGVzO1xuICAgICAgaW50ZXJuYWxzLmJ5dGVzICs9IGJ5dGVzO1xuXG4gICAgICBpbnRlcm5hbHMuaXNDYXB0dXJlZCAmJiB0aGlzLmVtaXQoJ3Byb2dyZXNzJywgaW50ZXJuYWxzLmJ5dGVzU2Vlbik7XG5cbiAgICAgIGlmICh0aGlzLnB1c2goX2NodW5rKSkge1xuICAgICAgICBwcm9jZXNzLm5leHRUaWNrKF9jYWxsYmFjayk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpbnRlcm5hbHMub25SZWFkQ2FsbGJhY2sgPSAoKSA9PiB7XG4gICAgICAgICAgaW50ZXJuYWxzLm9uUmVhZENhbGxiYWNrID0gbnVsbDtcbiAgICAgICAgICBwcm9jZXNzLm5leHRUaWNrKF9jYWxsYmFjayk7XG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgdHJhbnNmb3JtQ2h1bmsgPSAoX2NodW5rLCBfY2FsbGJhY2spID0+IHtcbiAgICAgIGNvbnN0IGNodW5rU2l6ZSA9IEJ1ZmZlci5ieXRlTGVuZ3RoKF9jaHVuayk7XG4gICAgICBsZXQgY2h1bmtSZW1haW5kZXIgPSBudWxsO1xuICAgICAgbGV0IG1heENodW5rU2l6ZSA9IHJlYWRhYmxlSGlnaFdhdGVyTWFyaztcbiAgICAgIGxldCBieXRlc0xlZnQ7XG4gICAgICBsZXQgcGFzc2VkID0gMDtcblxuICAgICAgaWYgKG1heFJhdGUpIHtcbiAgICAgICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcblxuICAgICAgICBpZiAoIWludGVybmFscy50cyB8fCAocGFzc2VkID0gKG5vdyAtIGludGVybmFscy50cykpID49IHRpbWVXaW5kb3cpIHtcbiAgICAgICAgICBpbnRlcm5hbHMudHMgPSBub3c7XG4gICAgICAgICAgYnl0ZXNMZWZ0ID0gYnl0ZXNUaHJlc2hvbGQgLSBpbnRlcm5hbHMuYnl0ZXM7XG4gICAgICAgICAgaW50ZXJuYWxzLmJ5dGVzID0gYnl0ZXNMZWZ0IDwgMCA/IC1ieXRlc0xlZnQgOiAwO1xuICAgICAgICAgIHBhc3NlZCA9IDA7XG4gICAgICAgIH1cblxuICAgICAgICBieXRlc0xlZnQgPSBieXRlc1RocmVzaG9sZCAtIGludGVybmFscy5ieXRlcztcbiAgICAgIH1cblxuICAgICAgaWYgKG1heFJhdGUpIHtcbiAgICAgICAgaWYgKGJ5dGVzTGVmdCA8PSAwKSB7XG4gICAgICAgICAgLy8gbmV4dCB0aW1lIHdpbmRvd1xuICAgICAgICAgIHJldHVybiBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIF9jYWxsYmFjayhudWxsLCBfY2h1bmspO1xuICAgICAgICAgIH0sIHRpbWVXaW5kb3cgLSBwYXNzZWQpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGJ5dGVzTGVmdCA8IG1heENodW5rU2l6ZSkge1xuICAgICAgICAgIG1heENodW5rU2l6ZSA9IGJ5dGVzTGVmdDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAobWF4Q2h1bmtTaXplICYmIGNodW5rU2l6ZSA+IG1heENodW5rU2l6ZSAmJiAoY2h1bmtTaXplIC0gbWF4Q2h1bmtTaXplKSA+IG1pbkNodW5rU2l6ZSkge1xuICAgICAgICBjaHVua1JlbWFpbmRlciA9IF9jaHVuay5zdWJhcnJheShtYXhDaHVua1NpemUpO1xuICAgICAgICBfY2h1bmsgPSBfY2h1bmsuc3ViYXJyYXkoMCwgbWF4Q2h1bmtTaXplKTtcbiAgICAgIH1cblxuICAgICAgcHVzaENodW5rKF9jaHVuaywgY2h1bmtSZW1haW5kZXIgPyAoKSA9PiB7XG4gICAgICAgIHByb2Nlc3MubmV4dFRpY2soX2NhbGxiYWNrLCBudWxsLCBjaHVua1JlbWFpbmRlcik7XG4gICAgICB9IDogX2NhbGxiYWNrKTtcbiAgICB9O1xuXG4gICAgdHJhbnNmb3JtQ2h1bmsoY2h1bmssIGZ1bmN0aW9uIHRyYW5zZm9ybU5leHRDaHVuayhlcnIsIF9jaHVuaykge1xuICAgICAgaWYgKGVycikge1xuICAgICAgICByZXR1cm4gY2FsbGJhY2soZXJyKTtcbiAgICAgIH1cblxuICAgICAgaWYgKF9jaHVuaykge1xuICAgICAgICB0cmFuc2Zvcm1DaHVuayhfY2h1bmssIHRyYW5zZm9ybU5leHRDaHVuayk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjYWxsYmFjayhudWxsKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBBeGlvc1RyYW5zZm9ybVN0cmVhbTtcbiIsICJjb25zdCB7YXN5bmNJdGVyYXRvcn0gPSBTeW1ib2w7XG5cbmNvbnN0IHJlYWRCbG9iID0gYXN5bmMgZnVuY3Rpb24qIChibG9iKSB7XG4gIGlmIChibG9iLnN0cmVhbSkge1xuICAgIHlpZWxkKiBibG9iLnN0cmVhbSgpXG4gIH0gZWxzZSBpZiAoYmxvYi5hcnJheUJ1ZmZlcikge1xuICAgIHlpZWxkIGF3YWl0IGJsb2IuYXJyYXlCdWZmZXIoKVxuICB9IGVsc2UgaWYgKGJsb2JbYXN5bmNJdGVyYXRvcl0pIHtcbiAgICB5aWVsZCogYmxvYlthc3luY0l0ZXJhdG9yXSgpO1xuICB9IGVsc2Uge1xuICAgIHlpZWxkIGJsb2I7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgcmVhZEJsb2I7XG4iLCAiaW1wb3J0IHV0aWwgZnJvbSAndXRpbCc7XG5pbXBvcnQge1JlYWRhYmxlfSBmcm9tICdzdHJlYW0nO1xuaW1wb3J0IHV0aWxzIGZyb20gXCIuLi91dGlscy5qc1wiO1xuaW1wb3J0IHJlYWRCbG9iIGZyb20gXCIuL3JlYWRCbG9iLmpzXCI7XG5pbXBvcnQgcGxhdGZvcm0gZnJvbSBcIi4uL3BsYXRmb3JtL2luZGV4LmpzXCI7XG5cbmNvbnN0IEJPVU5EQVJZX0FMUEhBQkVUID0gcGxhdGZvcm0uQUxQSEFCRVQuQUxQSEFfRElHSVQgKyAnLV8nO1xuXG5jb25zdCB0ZXh0RW5jb2RlciA9IHR5cGVvZiBUZXh0RW5jb2RlciA9PT0gJ2Z1bmN0aW9uJyA/IG5ldyBUZXh0RW5jb2RlcigpIDogbmV3IHV0aWwuVGV4dEVuY29kZXIoKTtcblxuY29uc3QgQ1JMRiA9ICdcXHJcXG4nO1xuY29uc3QgQ1JMRl9CWVRFUyA9IHRleHRFbmNvZGVyLmVuY29kZShDUkxGKTtcbmNvbnN0IENSTEZfQllURVNfQ09VTlQgPSAyO1xuXG5jbGFzcyBGb3JtRGF0YVBhcnQge1xuICBjb25zdHJ1Y3RvcihuYW1lLCB2YWx1ZSkge1xuICAgIGNvbnN0IHtlc2NhcGVOYW1lfSA9IHRoaXMuY29uc3RydWN0b3I7XG4gICAgY29uc3QgaXNTdHJpbmdWYWx1ZSA9IHV0aWxzLmlzU3RyaW5nKHZhbHVlKTtcblxuICAgIGxldCBoZWFkZXJzID0gYENvbnRlbnQtRGlzcG9zaXRpb246IGZvcm0tZGF0YTsgbmFtZT1cIiR7ZXNjYXBlTmFtZShuYW1lKX1cIiR7XG4gICAgICAhaXNTdHJpbmdWYWx1ZSAmJiB2YWx1ZS5uYW1lID8gYDsgZmlsZW5hbWU9XCIke2VzY2FwZU5hbWUodmFsdWUubmFtZSl9XCJgIDogJydcbiAgICB9JHtDUkxGfWA7XG5cbiAgICBpZiAoaXNTdHJpbmdWYWx1ZSkge1xuICAgICAgdmFsdWUgPSB0ZXh0RW5jb2Rlci5lbmNvZGUoU3RyaW5nKHZhbHVlKS5yZXBsYWNlKC9cXHI/XFxufFxcclxcbj8vZywgQ1JMRikpO1xuICAgIH0gZWxzZSB7XG4gICAgICBoZWFkZXJzICs9IGBDb250ZW50LVR5cGU6ICR7dmFsdWUudHlwZSB8fCBcImFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbVwifSR7Q1JMRn1gXG4gICAgfVxuXG4gICAgdGhpcy5oZWFkZXJzID0gdGV4dEVuY29kZXIuZW5jb2RlKGhlYWRlcnMgKyBDUkxGKTtcblxuICAgIHRoaXMuY29udGVudExlbmd0aCA9IGlzU3RyaW5nVmFsdWUgPyB2YWx1ZS5ieXRlTGVuZ3RoIDogdmFsdWUuc2l6ZTtcblxuICAgIHRoaXMuc2l6ZSA9IHRoaXMuaGVhZGVycy5ieXRlTGVuZ3RoICsgdGhpcy5jb250ZW50TGVuZ3RoICsgQ1JMRl9CWVRFU19DT1VOVDtcblxuICAgIHRoaXMubmFtZSA9IG5hbWU7XG4gICAgdGhpcy52YWx1ZSA9IHZhbHVlO1xuICB9XG5cbiAgYXN5bmMgKmVuY29kZSgpe1xuICAgIHlpZWxkIHRoaXMuaGVhZGVycztcblxuICAgIGNvbnN0IHt2YWx1ZX0gPSB0aGlzO1xuXG4gICAgaWYodXRpbHMuaXNUeXBlZEFycmF5KHZhbHVlKSkge1xuICAgICAgeWllbGQgdmFsdWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHlpZWxkKiByZWFkQmxvYih2YWx1ZSk7XG4gICAgfVxuXG4gICAgeWllbGQgQ1JMRl9CWVRFUztcbiAgfVxuXG4gIHN0YXRpYyBlc2NhcGVOYW1lKG5hbWUpIHtcbiAgICAgIHJldHVybiBTdHJpbmcobmFtZSkucmVwbGFjZSgvW1xcclxcblwiXS9nLCAobWF0Y2gpID0+ICh7XG4gICAgICAgICdcXHInIDogJyUwRCcsXG4gICAgICAgICdcXG4nIDogJyUwQScsXG4gICAgICAgICdcIicgOiAnJTIyJyxcbiAgICAgIH1bbWF0Y2hdKSk7XG4gIH1cbn1cblxuY29uc3QgZm9ybURhdGFUb1N0cmVhbSA9IChmb3JtLCBoZWFkZXJzSGFuZGxlciwgb3B0aW9ucykgPT4ge1xuICBjb25zdCB7XG4gICAgdGFnID0gJ2Zvcm0tZGF0YS1ib3VuZGFyeScsXG4gICAgc2l6ZSA9IDI1LFxuICAgIGJvdW5kYXJ5ID0gdGFnICsgJy0nICsgcGxhdGZvcm0uZ2VuZXJhdGVTdHJpbmcoc2l6ZSwgQk9VTkRBUllfQUxQSEFCRVQpXG4gIH0gPSBvcHRpb25zIHx8IHt9O1xuXG4gIGlmKCF1dGlscy5pc0Zvcm1EYXRhKGZvcm0pKSB7XG4gICAgdGhyb3cgVHlwZUVycm9yKCdGb3JtRGF0YSBpbnN0YW5jZSByZXF1aXJlZCcpO1xuICB9XG5cbiAgaWYgKGJvdW5kYXJ5Lmxlbmd0aCA8IDEgfHwgYm91bmRhcnkubGVuZ3RoID4gNzApIHtcbiAgICB0aHJvdyBFcnJvcignYm91bmRhcnkgbXVzdCBiZSAxMC03MCBjaGFyYWN0ZXJzIGxvbmcnKVxuICB9XG5cbiAgY29uc3QgYm91bmRhcnlCeXRlcyA9IHRleHRFbmNvZGVyLmVuY29kZSgnLS0nICsgYm91bmRhcnkgKyBDUkxGKTtcbiAgY29uc3QgZm9vdGVyQnl0ZXMgPSB0ZXh0RW5jb2Rlci5lbmNvZGUoJy0tJyArIGJvdW5kYXJ5ICsgJy0tJyArIENSTEYgKyBDUkxGKTtcbiAgbGV0IGNvbnRlbnRMZW5ndGggPSBmb290ZXJCeXRlcy5ieXRlTGVuZ3RoO1xuXG4gIGNvbnN0IHBhcnRzID0gQXJyYXkuZnJvbShmb3JtLmVudHJpZXMoKSkubWFwKChbbmFtZSwgdmFsdWVdKSA9PiB7XG4gICAgY29uc3QgcGFydCA9IG5ldyBGb3JtRGF0YVBhcnQobmFtZSwgdmFsdWUpO1xuICAgIGNvbnRlbnRMZW5ndGggKz0gcGFydC5zaXplO1xuICAgIHJldHVybiBwYXJ0O1xuICB9KTtcblxuICBjb250ZW50TGVuZ3RoICs9IGJvdW5kYXJ5Qnl0ZXMuYnl0ZUxlbmd0aCAqIHBhcnRzLmxlbmd0aDtcblxuICBjb250ZW50TGVuZ3RoID0gdXRpbHMudG9GaW5pdGVOdW1iZXIoY29udGVudExlbmd0aCk7XG5cbiAgY29uc3QgY29tcHV0ZWRIZWFkZXJzID0ge1xuICAgICdDb250ZW50LVR5cGUnOiBgbXVsdGlwYXJ0L2Zvcm0tZGF0YTsgYm91bmRhcnk9JHtib3VuZGFyeX1gXG4gIH1cblxuICBpZiAoTnVtYmVyLmlzRmluaXRlKGNvbnRlbnRMZW5ndGgpKSB7XG4gICAgY29tcHV0ZWRIZWFkZXJzWydDb250ZW50LUxlbmd0aCddID0gY29udGVudExlbmd0aDtcbiAgfVxuXG4gIGhlYWRlcnNIYW5kbGVyICYmIGhlYWRlcnNIYW5kbGVyKGNvbXB1dGVkSGVhZGVycyk7XG5cbiAgcmV0dXJuIFJlYWRhYmxlLmZyb20oKGFzeW5jIGZ1bmN0aW9uICooKSB7XG4gICAgZm9yKGNvbnN0IHBhcnQgb2YgcGFydHMpIHtcbiAgICAgIHlpZWxkIGJvdW5kYXJ5Qnl0ZXM7XG4gICAgICB5aWVsZCogcGFydC5lbmNvZGUoKTtcbiAgICB9XG5cbiAgICB5aWVsZCBmb290ZXJCeXRlcztcbiAgfSkoKSk7XG59O1xuXG5leHBvcnQgZGVmYXVsdCBmb3JtRGF0YVRvU3RyZWFtO1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgc3RyZWFtIGZyb20gXCJzdHJlYW1cIjtcblxuY2xhc3MgWmxpYkhlYWRlclRyYW5zZm9ybVN0cmVhbSBleHRlbmRzIHN0cmVhbS5UcmFuc2Zvcm0ge1xuICBfX3RyYW5zZm9ybShjaHVuaywgZW5jb2RpbmcsIGNhbGxiYWNrKSB7XG4gICAgdGhpcy5wdXNoKGNodW5rKTtcbiAgICBjYWxsYmFjaygpO1xuICB9XG5cbiAgX3RyYW5zZm9ybShjaHVuaywgZW5jb2RpbmcsIGNhbGxiYWNrKSB7XG4gICAgaWYgKGNodW5rLmxlbmd0aCAhPT0gMCkge1xuICAgICAgdGhpcy5fdHJhbnNmb3JtID0gdGhpcy5fX3RyYW5zZm9ybTtcblxuICAgICAgLy8gQWRkIERlZmF1bHQgQ29tcHJlc3Npb24gaGVhZGVycyBpZiBubyB6bGliIGhlYWRlcnMgYXJlIHByZXNlbnRcbiAgICAgIGlmIChjaHVua1swXSAhPT0gMTIwKSB7IC8vIEhleDogNzhcbiAgICAgICAgY29uc3QgaGVhZGVyID0gQnVmZmVyLmFsbG9jKDIpO1xuICAgICAgICBoZWFkZXJbMF0gPSAxMjA7IC8vIEhleDogNzhcbiAgICAgICAgaGVhZGVyWzFdID0gMTU2OyAvLyBIZXg6IDlDIFxuICAgICAgICB0aGlzLnB1c2goaGVhZGVyLCBlbmNvZGluZyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5fX3RyYW5zZm9ybShjaHVuaywgZW5jb2RpbmcsIGNhbGxiYWNrKTtcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBabGliSGVhZGVyVHJhbnNmb3JtU3RyZWFtO1xuIiwgImltcG9ydCB1dGlscyBmcm9tIFwiLi4vdXRpbHMuanNcIjtcblxuY29uc3QgY2FsbGJhY2tpZnkgPSAoZm4sIHJlZHVjZXIpID0+IHtcbiAgcmV0dXJuIHV0aWxzLmlzQXN5bmNGbihmbikgPyBmdW5jdGlvbiAoLi4uYXJncykge1xuICAgIGNvbnN0IGNiID0gYXJncy5wb3AoKTtcbiAgICBmbi5hcHBseSh0aGlzLCBhcmdzKS50aGVuKCh2YWx1ZSkgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmVkdWNlciA/IGNiKG51bGwsIC4uLnJlZHVjZXIodmFsdWUpKSA6IGNiKG51bGwsIHZhbHVlKTtcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBjYihlcnIpO1xuICAgICAgfVxuICAgIH0sIGNiKTtcbiAgfSA6IGZuO1xufVxuXG5leHBvcnQgZGVmYXVsdCBjYWxsYmFja2lmeTtcbiIsICIndXNlIHN0cmljdCc7XG5cbi8qKlxuICogQ2FsY3VsYXRlIGRhdGEgbWF4UmF0ZVxuICogQHBhcmFtIHtOdW1iZXJ9IFtzYW1wbGVzQ291bnQ9IDEwXVxuICogQHBhcmFtIHtOdW1iZXJ9IFttaW49IDEwMDBdXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259XG4gKi9cbmZ1bmN0aW9uIHNwZWVkb21ldGVyKHNhbXBsZXNDb3VudCwgbWluKSB7XG4gIHNhbXBsZXNDb3VudCA9IHNhbXBsZXNDb3VudCB8fCAxMDtcbiAgY29uc3QgYnl0ZXMgPSBuZXcgQXJyYXkoc2FtcGxlc0NvdW50KTtcbiAgY29uc3QgdGltZXN0YW1wcyA9IG5ldyBBcnJheShzYW1wbGVzQ291bnQpO1xuICBsZXQgaGVhZCA9IDA7XG4gIGxldCB0YWlsID0gMDtcbiAgbGV0IGZpcnN0U2FtcGxlVFM7XG5cbiAgbWluID0gbWluICE9PSB1bmRlZmluZWQgPyBtaW4gOiAxMDAwO1xuXG4gIHJldHVybiBmdW5jdGlvbiBwdXNoKGNodW5rTGVuZ3RoKSB7XG4gICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcblxuICAgIGNvbnN0IHN0YXJ0ZWRBdCA9IHRpbWVzdGFtcHNbdGFpbF07XG5cbiAgICBpZiAoIWZpcnN0U2FtcGxlVFMpIHtcbiAgICAgIGZpcnN0U2FtcGxlVFMgPSBub3c7XG4gICAgfVxuXG4gICAgYnl0ZXNbaGVhZF0gPSBjaHVua0xlbmd0aDtcbiAgICB0aW1lc3RhbXBzW2hlYWRdID0gbm93O1xuXG4gICAgbGV0IGkgPSB0YWlsO1xuICAgIGxldCBieXRlc0NvdW50ID0gMDtcblxuICAgIHdoaWxlIChpICE9PSBoZWFkKSB7XG4gICAgICBieXRlc0NvdW50ICs9IGJ5dGVzW2krK107XG4gICAgICBpID0gaSAlIHNhbXBsZXNDb3VudDtcbiAgICB9XG5cbiAgICBoZWFkID0gKGhlYWQgKyAxKSAlIHNhbXBsZXNDb3VudDtcblxuICAgIGlmIChoZWFkID09PSB0YWlsKSB7XG4gICAgICB0YWlsID0gKHRhaWwgKyAxKSAlIHNhbXBsZXNDb3VudDtcbiAgICB9XG5cbiAgICBpZiAobm93IC0gZmlyc3RTYW1wbGVUUyA8IG1pbikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHBhc3NlZCA9IHN0YXJ0ZWRBdCAmJiBub3cgLSBzdGFydGVkQXQ7XG5cbiAgICByZXR1cm4gcGFzc2VkID8gTWF0aC5yb3VuZChieXRlc0NvdW50ICogMTAwMCAvIHBhc3NlZCkgOiB1bmRlZmluZWQ7XG4gIH07XG59XG5cbmV4cG9ydCBkZWZhdWx0IHNwZWVkb21ldGVyO1xuIiwgIi8qKlxuICogVGhyb3R0bGUgZGVjb3JhdG9yXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmblxuICogQHBhcmFtIHtOdW1iZXJ9IGZyZXFcbiAqIEByZXR1cm4ge0Z1bmN0aW9ufVxuICovXG5mdW5jdGlvbiB0aHJvdHRsZShmbiwgZnJlcSkge1xuICBsZXQgdGltZXN0YW1wID0gMDtcbiAgbGV0IHRocmVzaG9sZCA9IDEwMDAgLyBmcmVxO1xuICBsZXQgbGFzdEFyZ3M7XG4gIGxldCB0aW1lcjtcblxuICBjb25zdCBpbnZva2UgPSAoYXJncywgbm93ID0gRGF0ZS5ub3coKSkgPT4ge1xuICAgIHRpbWVzdGFtcCA9IG5vdztcbiAgICBsYXN0QXJncyA9IG51bGw7XG4gICAgaWYgKHRpbWVyKSB7XG4gICAgICBjbGVhclRpbWVvdXQodGltZXIpO1xuICAgICAgdGltZXIgPSBudWxsO1xuICAgIH1cbiAgICBmbi5hcHBseShudWxsLCBhcmdzKTtcbiAgfVxuXG4gIGNvbnN0IHRocm90dGxlZCA9ICguLi5hcmdzKSA9PiB7XG4gICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgICBjb25zdCBwYXNzZWQgPSBub3cgLSB0aW1lc3RhbXA7XG4gICAgaWYgKCBwYXNzZWQgPj0gdGhyZXNob2xkKSB7XG4gICAgICBpbnZva2UoYXJncywgbm93KTtcbiAgICB9IGVsc2Uge1xuICAgICAgbGFzdEFyZ3MgPSBhcmdzO1xuICAgICAgaWYgKCF0aW1lcikge1xuICAgICAgICB0aW1lciA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIHRpbWVyID0gbnVsbDtcbiAgICAgICAgICBpbnZva2UobGFzdEFyZ3MpXG4gICAgICAgIH0sIHRocmVzaG9sZCAtIHBhc3NlZCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgY29uc3QgZmx1c2ggPSAoKSA9PiBsYXN0QXJncyAmJiBpbnZva2UobGFzdEFyZ3MpO1xuXG4gIHJldHVybiBbdGhyb3R0bGVkLCBmbHVzaF07XG59XG5cbmV4cG9ydCBkZWZhdWx0IHRocm90dGxlO1xuIiwgImltcG9ydCBzcGVlZG9tZXRlciBmcm9tIFwiLi9zcGVlZG9tZXRlci5qc1wiO1xuaW1wb3J0IHRocm90dGxlIGZyb20gXCIuL3Rocm90dGxlLmpzXCI7XG5pbXBvcnQgdXRpbHMgZnJvbSBcIi4uL3V0aWxzLmpzXCI7XG5cbmV4cG9ydCBjb25zdCBwcm9ncmVzc0V2ZW50UmVkdWNlciA9IChsaXN0ZW5lciwgaXNEb3dubG9hZFN0cmVhbSwgZnJlcSA9IDMpID0+IHtcbiAgbGV0IGJ5dGVzTm90aWZpZWQgPSAwO1xuICBjb25zdCBfc3BlZWRvbWV0ZXIgPSBzcGVlZG9tZXRlcig1MCwgMjUwKTtcblxuICByZXR1cm4gdGhyb3R0bGUoZSA9PiB7XG4gICAgY29uc3QgbG9hZGVkID0gZS5sb2FkZWQ7XG4gICAgY29uc3QgdG90YWwgPSBlLmxlbmd0aENvbXB1dGFibGUgPyBlLnRvdGFsIDogdW5kZWZpbmVkO1xuICAgIGNvbnN0IHByb2dyZXNzQnl0ZXMgPSBsb2FkZWQgLSBieXRlc05vdGlmaWVkO1xuICAgIGNvbnN0IHJhdGUgPSBfc3BlZWRvbWV0ZXIocHJvZ3Jlc3NCeXRlcyk7XG4gICAgY29uc3QgaW5SYW5nZSA9IGxvYWRlZCA8PSB0b3RhbDtcblxuICAgIGJ5dGVzTm90aWZpZWQgPSBsb2FkZWQ7XG5cbiAgICBjb25zdCBkYXRhID0ge1xuICAgICAgbG9hZGVkLFxuICAgICAgdG90YWwsXG4gICAgICBwcm9ncmVzczogdG90YWwgPyAobG9hZGVkIC8gdG90YWwpIDogdW5kZWZpbmVkLFxuICAgICAgYnl0ZXM6IHByb2dyZXNzQnl0ZXMsXG4gICAgICByYXRlOiByYXRlID8gcmF0ZSA6IHVuZGVmaW5lZCxcbiAgICAgIGVzdGltYXRlZDogcmF0ZSAmJiB0b3RhbCAmJiBpblJhbmdlID8gKHRvdGFsIC0gbG9hZGVkKSAvIHJhdGUgOiB1bmRlZmluZWQsXG4gICAgICBldmVudDogZSxcbiAgICAgIGxlbmd0aENvbXB1dGFibGU6IHRvdGFsICE9IG51bGwsXG4gICAgICBbaXNEb3dubG9hZFN0cmVhbSA/ICdkb3dubG9hZCcgOiAndXBsb2FkJ106IHRydWVcbiAgICB9O1xuXG4gICAgbGlzdGVuZXIoZGF0YSk7XG4gIH0sIGZyZXEpO1xufVxuXG5leHBvcnQgY29uc3QgcHJvZ3Jlc3NFdmVudERlY29yYXRvciA9ICh0b3RhbCwgdGhyb3R0bGVkKSA9PiB7XG4gIGNvbnN0IGxlbmd0aENvbXB1dGFibGUgPSB0b3RhbCAhPSBudWxsO1xuXG4gIHJldHVybiBbKGxvYWRlZCkgPT4gdGhyb3R0bGVkWzBdKHtcbiAgICBsZW5ndGhDb21wdXRhYmxlLFxuICAgIHRvdGFsLFxuICAgIGxvYWRlZFxuICB9KSwgdGhyb3R0bGVkWzFdXTtcbn1cblxuZXhwb3J0IGNvbnN0IGFzeW5jRGVjb3JhdG9yID0gKGZuKSA9PiAoLi4uYXJncykgPT4gdXRpbHMuYXNhcCgoKSA9PiBmbiguLi5hcmdzKSk7XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgdXRpbHMgZnJvbSAnLi8uLi91dGlscy5qcyc7XG5pbXBvcnQgc2V0dGxlIGZyb20gJy4vLi4vY29yZS9zZXR0bGUuanMnO1xuaW1wb3J0IGJ1aWxkRnVsbFBhdGggZnJvbSAnLi4vY29yZS9idWlsZEZ1bGxQYXRoLmpzJztcbmltcG9ydCBidWlsZFVSTCBmcm9tICcuLy4uL2hlbHBlcnMvYnVpbGRVUkwuanMnO1xuaW1wb3J0IHByb3h5RnJvbUVudiBmcm9tICdwcm94eS1mcm9tLWVudic7XG5pbXBvcnQgaHR0cCBmcm9tICdodHRwJztcbmltcG9ydCBodHRwcyBmcm9tICdodHRwcyc7XG5pbXBvcnQgdXRpbCBmcm9tICd1dGlsJztcbmltcG9ydCBmb2xsb3dSZWRpcmVjdHMgZnJvbSAnZm9sbG93LXJlZGlyZWN0cyc7XG5pbXBvcnQgemxpYiBmcm9tICd6bGliJztcbmltcG9ydCB7VkVSU0lPTn0gZnJvbSAnLi4vZW52L2RhdGEuanMnO1xuaW1wb3J0IHRyYW5zaXRpb25hbERlZmF1bHRzIGZyb20gJy4uL2RlZmF1bHRzL3RyYW5zaXRpb25hbC5qcyc7XG5pbXBvcnQgQXhpb3NFcnJvciBmcm9tICcuLi9jb3JlL0F4aW9zRXJyb3IuanMnO1xuaW1wb3J0IENhbmNlbGVkRXJyb3IgZnJvbSAnLi4vY2FuY2VsL0NhbmNlbGVkRXJyb3IuanMnO1xuaW1wb3J0IHBsYXRmb3JtIGZyb20gJy4uL3BsYXRmb3JtL2luZGV4LmpzJztcbmltcG9ydCBmcm9tRGF0YVVSSSBmcm9tICcuLi9oZWxwZXJzL2Zyb21EYXRhVVJJLmpzJztcbmltcG9ydCBzdHJlYW0gZnJvbSAnc3RyZWFtJztcbmltcG9ydCBBeGlvc0hlYWRlcnMgZnJvbSAnLi4vY29yZS9BeGlvc0hlYWRlcnMuanMnO1xuaW1wb3J0IEF4aW9zVHJhbnNmb3JtU3RyZWFtIGZyb20gJy4uL2hlbHBlcnMvQXhpb3NUcmFuc2Zvcm1TdHJlYW0uanMnO1xuaW1wb3J0IHtFdmVudEVtaXR0ZXJ9IGZyb20gJ2V2ZW50cyc7XG5pbXBvcnQgZm9ybURhdGFUb1N0cmVhbSBmcm9tIFwiLi4vaGVscGVycy9mb3JtRGF0YVRvU3RyZWFtLmpzXCI7XG5pbXBvcnQgcmVhZEJsb2IgZnJvbSBcIi4uL2hlbHBlcnMvcmVhZEJsb2IuanNcIjtcbmltcG9ydCBabGliSGVhZGVyVHJhbnNmb3JtU3RyZWFtIGZyb20gJy4uL2hlbHBlcnMvWmxpYkhlYWRlclRyYW5zZm9ybVN0cmVhbS5qcyc7XG5pbXBvcnQgY2FsbGJhY2tpZnkgZnJvbSBcIi4uL2hlbHBlcnMvY2FsbGJhY2tpZnkuanNcIjtcbmltcG9ydCB7cHJvZ3Jlc3NFdmVudFJlZHVjZXIsIHByb2dyZXNzRXZlbnREZWNvcmF0b3IsIGFzeW5jRGVjb3JhdG9yfSBmcm9tIFwiLi4vaGVscGVycy9wcm9ncmVzc0V2ZW50UmVkdWNlci5qc1wiO1xuXG5jb25zdCB6bGliT3B0aW9ucyA9IHtcbiAgZmx1c2g6IHpsaWIuY29uc3RhbnRzLlpfU1lOQ19GTFVTSCxcbiAgZmluaXNoRmx1c2g6IHpsaWIuY29uc3RhbnRzLlpfU1lOQ19GTFVTSFxufTtcblxuY29uc3QgYnJvdGxpT3B0aW9ucyA9IHtcbiAgZmx1c2g6IHpsaWIuY29uc3RhbnRzLkJST1RMSV9PUEVSQVRJT05fRkxVU0gsXG4gIGZpbmlzaEZsdXNoOiB6bGliLmNvbnN0YW50cy5CUk9UTElfT1BFUkFUSU9OX0ZMVVNIXG59XG5cbmNvbnN0IGlzQnJvdGxpU3VwcG9ydGVkID0gdXRpbHMuaXNGdW5jdGlvbih6bGliLmNyZWF0ZUJyb3RsaURlY29tcHJlc3MpO1xuXG5jb25zdCB7aHR0cDogaHR0cEZvbGxvdywgaHR0cHM6IGh0dHBzRm9sbG93fSA9IGZvbGxvd1JlZGlyZWN0cztcblxuY29uc3QgaXNIdHRwcyA9IC9odHRwczo/LztcblxuY29uc3Qgc3VwcG9ydGVkUHJvdG9jb2xzID0gcGxhdGZvcm0ucHJvdG9jb2xzLm1hcChwcm90b2NvbCA9PiB7XG4gIHJldHVybiBwcm90b2NvbCArICc6Jztcbn0pO1xuXG5jb25zdCBmbHVzaE9uRmluaXNoID0gKHN0cmVhbSwgW3Rocm90dGxlZCwgZmx1c2hdKSA9PiB7XG4gIHN0cmVhbVxuICAgIC5vbignZW5kJywgZmx1c2gpXG4gICAgLm9uKCdlcnJvcicsIGZsdXNoKTtcblxuICByZXR1cm4gdGhyb3R0bGVkO1xufVxuXG4vKipcbiAqIElmIHRoZSBwcm94eSBvciBjb25maWcgYmVmb3JlUmVkaXJlY3RzIGZ1bmN0aW9ucyBhcmUgZGVmaW5lZCwgY2FsbCB0aGVtIHdpdGggdGhlIG9wdGlvbnNcbiAqIG9iamVjdC5cbiAqXG4gKiBAcGFyYW0ge09iamVjdDxzdHJpbmcsIGFueT59IG9wdGlvbnMgLSBUaGUgb3B0aW9ucyBvYmplY3QgdGhhdCB3YXMgcGFzc2VkIHRvIHRoZSByZXF1ZXN0LlxuICpcbiAqIEByZXR1cm5zIHtPYmplY3Q8c3RyaW5nLCBhbnk+fVxuICovXG5mdW5jdGlvbiBkaXNwYXRjaEJlZm9yZVJlZGlyZWN0KG9wdGlvbnMsIHJlc3BvbnNlRGV0YWlscykge1xuICBpZiAob3B0aW9ucy5iZWZvcmVSZWRpcmVjdHMucHJveHkpIHtcbiAgICBvcHRpb25zLmJlZm9yZVJlZGlyZWN0cy5wcm94eShvcHRpb25zKTtcbiAgfVxuICBpZiAob3B0aW9ucy5iZWZvcmVSZWRpcmVjdHMuY29uZmlnKSB7XG4gICAgb3B0aW9ucy5iZWZvcmVSZWRpcmVjdHMuY29uZmlnKG9wdGlvbnMsIHJlc3BvbnNlRGV0YWlscyk7XG4gIH1cbn1cblxuLyoqXG4gKiBJZiB0aGUgcHJveHkgb3IgY29uZmlnIGFmdGVyUmVkaXJlY3RzIGZ1bmN0aW9ucyBhcmUgZGVmaW5lZCwgY2FsbCB0aGVtIHdpdGggdGhlIG9wdGlvbnNcbiAqXG4gKiBAcGFyYW0ge2h0dHAuQ2xpZW50UmVxdWVzdEFyZ3N9IG9wdGlvbnNcbiAqIEBwYXJhbSB7QXhpb3NQcm94eUNvbmZpZ30gY29uZmlnUHJveHkgY29uZmlndXJhdGlvbiBmcm9tIEF4aW9zIG9wdGlvbnMgb2JqZWN0XG4gKiBAcGFyYW0ge3N0cmluZ30gbG9jYXRpb25cbiAqXG4gKiBAcmV0dXJucyB7aHR0cC5DbGllbnRSZXF1ZXN0QXJnc31cbiAqL1xuZnVuY3Rpb24gc2V0UHJveHkob3B0aW9ucywgY29uZmlnUHJveHksIGxvY2F0aW9uKSB7XG4gIGxldCBwcm94eSA9IGNvbmZpZ1Byb3h5O1xuICBpZiAoIXByb3h5ICYmIHByb3h5ICE9PSBmYWxzZSkge1xuICAgIGNvbnN0IHByb3h5VXJsID0gcHJveHlGcm9tRW52LmdldFByb3h5Rm9yVXJsKGxvY2F0aW9uKTtcbiAgICBpZiAocHJveHlVcmwpIHtcbiAgICAgIHByb3h5ID0gbmV3IFVSTChwcm94eVVybCk7XG4gICAgfVxuICB9XG4gIGlmIChwcm94eSkge1xuICAgIC8vIEJhc2ljIHByb3h5IGF1dGhvcml6YXRpb25cbiAgICBpZiAocHJveHkudXNlcm5hbWUpIHtcbiAgICAgIHByb3h5LmF1dGggPSAocHJveHkudXNlcm5hbWUgfHwgJycpICsgJzonICsgKHByb3h5LnBhc3N3b3JkIHx8ICcnKTtcbiAgICB9XG5cbiAgICBpZiAocHJveHkuYXV0aCkge1xuICAgICAgLy8gU3VwcG9ydCBwcm94eSBhdXRoIG9iamVjdCBmb3JtXG4gICAgICBpZiAocHJveHkuYXV0aC51c2VybmFtZSB8fCBwcm94eS5hdXRoLnBhc3N3b3JkKSB7XG4gICAgICAgIHByb3h5LmF1dGggPSAocHJveHkuYXV0aC51c2VybmFtZSB8fCAnJykgKyAnOicgKyAocHJveHkuYXV0aC5wYXNzd29yZCB8fCAnJyk7XG4gICAgICB9XG4gICAgICBjb25zdCBiYXNlNjQgPSBCdWZmZXJcbiAgICAgICAgLmZyb20ocHJveHkuYXV0aCwgJ3V0ZjgnKVxuICAgICAgICAudG9TdHJpbmcoJ2Jhc2U2NCcpO1xuICAgICAgb3B0aW9ucy5oZWFkZXJzWydQcm94eS1BdXRob3JpemF0aW9uJ10gPSAnQmFzaWMgJyArIGJhc2U2NDtcbiAgICB9XG5cbiAgICBvcHRpb25zLmhlYWRlcnMuaG9zdCA9IG9wdGlvbnMuaG9zdG5hbWUgKyAob3B0aW9ucy5wb3J0ID8gJzonICsgb3B0aW9ucy5wb3J0IDogJycpO1xuICAgIGNvbnN0IHByb3h5SG9zdCA9IHByb3h5Lmhvc3RuYW1lIHx8IHByb3h5Lmhvc3Q7XG4gICAgb3B0aW9ucy5ob3N0bmFtZSA9IHByb3h5SG9zdDtcbiAgICAvLyBSZXBsYWNlICdob3N0JyBzaW5jZSBvcHRpb25zIGlzIG5vdCBhIFVSTCBvYmplY3RcbiAgICBvcHRpb25zLmhvc3QgPSBwcm94eUhvc3Q7XG4gICAgb3B0aW9ucy5wb3J0ID0gcHJveHkucG9ydDtcbiAgICBvcHRpb25zLnBhdGggPSBsb2NhdGlvbjtcbiAgICBpZiAocHJveHkucHJvdG9jb2wpIHtcbiAgICAgIG9wdGlvbnMucHJvdG9jb2wgPSBwcm94eS5wcm90b2NvbC5pbmNsdWRlcygnOicpID8gcHJveHkucHJvdG9jb2wgOiBgJHtwcm94eS5wcm90b2NvbH06YDtcbiAgICB9XG4gIH1cblxuICBvcHRpb25zLmJlZm9yZVJlZGlyZWN0cy5wcm94eSA9IGZ1bmN0aW9uIGJlZm9yZVJlZGlyZWN0KHJlZGlyZWN0T3B0aW9ucykge1xuICAgIC8vIENvbmZpZ3VyZSBwcm94eSBmb3IgcmVkaXJlY3RlZCByZXF1ZXN0LCBwYXNzaW5nIHRoZSBvcmlnaW5hbCBjb25maWcgcHJveHkgdG8gYXBwbHlcbiAgICAvLyB0aGUgZXhhY3Qgc2FtZSBsb2dpYyBhcyBpZiB0aGUgcmVkaXJlY3RlZCByZXF1ZXN0IHdhcyBwZXJmb3JtZWQgYnkgYXhpb3MgZGlyZWN0bHkuXG4gICAgc2V0UHJveHkocmVkaXJlY3RPcHRpb25zLCBjb25maWdQcm94eSwgcmVkaXJlY3RPcHRpb25zLmhyZWYpO1xuICB9O1xufVxuXG5jb25zdCBpc0h0dHBBZGFwdGVyU3VwcG9ydGVkID0gdHlwZW9mIHByb2Nlc3MgIT09ICd1bmRlZmluZWQnICYmIHV0aWxzLmtpbmRPZihwcm9jZXNzKSA9PT0gJ3Byb2Nlc3MnO1xuXG4vLyB0ZW1wb3JhcnkgaG90Zml4XG5cbmNvbnN0IHdyYXBBc3luYyA9IChhc3luY0V4ZWN1dG9yKSA9PiB7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgbGV0IG9uRG9uZTtcbiAgICBsZXQgaXNEb25lO1xuXG4gICAgY29uc3QgZG9uZSA9ICh2YWx1ZSwgaXNSZWplY3RlZCkgPT4ge1xuICAgICAgaWYgKGlzRG9uZSkgcmV0dXJuO1xuICAgICAgaXNEb25lID0gdHJ1ZTtcbiAgICAgIG9uRG9uZSAmJiBvbkRvbmUodmFsdWUsIGlzUmVqZWN0ZWQpO1xuICAgIH1cblxuICAgIGNvbnN0IF9yZXNvbHZlID0gKHZhbHVlKSA9PiB7XG4gICAgICBkb25lKHZhbHVlKTtcbiAgICAgIHJlc29sdmUodmFsdWUpO1xuICAgIH07XG5cbiAgICBjb25zdCBfcmVqZWN0ID0gKHJlYXNvbikgPT4ge1xuICAgICAgZG9uZShyZWFzb24sIHRydWUpO1xuICAgICAgcmVqZWN0KHJlYXNvbik7XG4gICAgfVxuXG4gICAgYXN5bmNFeGVjdXRvcihfcmVzb2x2ZSwgX3JlamVjdCwgKG9uRG9uZUhhbmRsZXIpID0+IChvbkRvbmUgPSBvbkRvbmVIYW5kbGVyKSkuY2F0Y2goX3JlamVjdCk7XG4gIH0pXG59O1xuXG5jb25zdCByZXNvbHZlRmFtaWx5ID0gKHthZGRyZXNzLCBmYW1pbHl9KSA9PiB7XG4gIGlmICghdXRpbHMuaXNTdHJpbmcoYWRkcmVzcykpIHtcbiAgICB0aHJvdyBUeXBlRXJyb3IoJ2FkZHJlc3MgbXVzdCBiZSBhIHN0cmluZycpO1xuICB9XG4gIHJldHVybiAoe1xuICAgIGFkZHJlc3MsXG4gICAgZmFtaWx5OiBmYW1pbHkgfHwgKGFkZHJlc3MuaW5kZXhPZignLicpIDwgMCA/IDYgOiA0KVxuICB9KTtcbn1cblxuY29uc3QgYnVpbGRBZGRyZXNzRW50cnkgPSAoYWRkcmVzcywgZmFtaWx5KSA9PiByZXNvbHZlRmFtaWx5KHV0aWxzLmlzT2JqZWN0KGFkZHJlc3MpID8gYWRkcmVzcyA6IHthZGRyZXNzLCBmYW1pbHl9KTtcblxuLyplc2xpbnQgY29uc2lzdGVudC1yZXR1cm46MCovXG5leHBvcnQgZGVmYXVsdCBpc0h0dHBBZGFwdGVyU3VwcG9ydGVkICYmIGZ1bmN0aW9uIGh0dHBBZGFwdGVyKGNvbmZpZykge1xuICByZXR1cm4gd3JhcEFzeW5jKGFzeW5jIGZ1bmN0aW9uIGRpc3BhdGNoSHR0cFJlcXVlc3QocmVzb2x2ZSwgcmVqZWN0LCBvbkRvbmUpIHtcbiAgICBsZXQge2RhdGEsIGxvb2t1cCwgZmFtaWx5fSA9IGNvbmZpZztcbiAgICBjb25zdCB7cmVzcG9uc2VUeXBlLCByZXNwb25zZUVuY29kaW5nfSA9IGNvbmZpZztcbiAgICBjb25zdCBtZXRob2QgPSBjb25maWcubWV0aG9kLnRvVXBwZXJDYXNlKCk7XG4gICAgbGV0IGlzRG9uZTtcbiAgICBsZXQgcmVqZWN0ZWQgPSBmYWxzZTtcbiAgICBsZXQgcmVxO1xuXG4gICAgaWYgKGxvb2t1cCkge1xuICAgICAgY29uc3QgX2xvb2t1cCA9IGNhbGxiYWNraWZ5KGxvb2t1cCwgKHZhbHVlKSA9PiB1dGlscy5pc0FycmF5KHZhbHVlKSA/IHZhbHVlIDogW3ZhbHVlXSk7XG4gICAgICAvLyBob3RmaXggdG8gc3VwcG9ydCBvcHQuYWxsIG9wdGlvbiB3aGljaCBpcyByZXF1aXJlZCBmb3Igbm9kZSAyMC54XG4gICAgICBsb29rdXAgPSAoaG9zdG5hbWUsIG9wdCwgY2IpID0+IHtcbiAgICAgICAgX2xvb2t1cChob3N0bmFtZSwgb3B0LCAoZXJyLCBhcmcwLCBhcmcxKSA9PiB7XG4gICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgcmV0dXJuIGNiKGVycik7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29uc3QgYWRkcmVzc2VzID0gdXRpbHMuaXNBcnJheShhcmcwKSA/IGFyZzAubWFwKGFkZHIgPT4gYnVpbGRBZGRyZXNzRW50cnkoYWRkcikpIDogW2J1aWxkQWRkcmVzc0VudHJ5KGFyZzAsIGFyZzEpXTtcblxuICAgICAgICAgIG9wdC5hbGwgPyBjYihlcnIsIGFkZHJlc3NlcykgOiBjYihlcnIsIGFkZHJlc3Nlc1swXS5hZGRyZXNzLCBhZGRyZXNzZXNbMF0uZmFtaWx5KTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gdGVtcG9yYXJ5IGludGVybmFsIGVtaXR0ZXIgdW50aWwgdGhlIEF4aW9zUmVxdWVzdCBjbGFzcyB3aWxsIGJlIGltcGxlbWVudGVkXG4gICAgY29uc3QgZW1pdHRlciA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICAgIGNvbnN0IG9uRmluaXNoZWQgPSAoKSA9PiB7XG4gICAgICBpZiAoY29uZmlnLmNhbmNlbFRva2VuKSB7XG4gICAgICAgIGNvbmZpZy5jYW5jZWxUb2tlbi51bnN1YnNjcmliZShhYm9ydCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChjb25maWcuc2lnbmFsKSB7XG4gICAgICAgIGNvbmZpZy5zaWduYWwucmVtb3ZlRXZlbnRMaXN0ZW5lcignYWJvcnQnLCBhYm9ydCk7XG4gICAgICB9XG5cbiAgICAgIGVtaXR0ZXIucmVtb3ZlQWxsTGlzdGVuZXJzKCk7XG4gICAgfVxuXG4gICAgb25Eb25lKCh2YWx1ZSwgaXNSZWplY3RlZCkgPT4ge1xuICAgICAgaXNEb25lID0gdHJ1ZTtcbiAgICAgIGlmIChpc1JlamVjdGVkKSB7XG4gICAgICAgIHJlamVjdGVkID0gdHJ1ZTtcbiAgICAgICAgb25GaW5pc2hlZCgpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgZnVuY3Rpb24gYWJvcnQocmVhc29uKSB7XG4gICAgICBlbWl0dGVyLmVtaXQoJ2Fib3J0JywgIXJlYXNvbiB8fCByZWFzb24udHlwZSA/IG5ldyBDYW5jZWxlZEVycm9yKG51bGwsIGNvbmZpZywgcmVxKSA6IHJlYXNvbik7XG4gICAgfVxuXG4gICAgZW1pdHRlci5vbmNlKCdhYm9ydCcsIHJlamVjdCk7XG5cbiAgICBpZiAoY29uZmlnLmNhbmNlbFRva2VuIHx8IGNvbmZpZy5zaWduYWwpIHtcbiAgICAgIGNvbmZpZy5jYW5jZWxUb2tlbiAmJiBjb25maWcuY2FuY2VsVG9rZW4uc3Vic2NyaWJlKGFib3J0KTtcbiAgICAgIGlmIChjb25maWcuc2lnbmFsKSB7XG4gICAgICAgIGNvbmZpZy5zaWduYWwuYWJvcnRlZCA/IGFib3J0KCkgOiBjb25maWcuc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoJ2Fib3J0JywgYWJvcnQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFBhcnNlIHVybFxuICAgIGNvbnN0IGZ1bGxQYXRoID0gYnVpbGRGdWxsUGF0aChjb25maWcuYmFzZVVSTCwgY29uZmlnLnVybCwgY29uZmlnLmFsbG93QWJzb2x1dGVVcmxzKTtcbiAgICBjb25zdCBwYXJzZWQgPSBuZXcgVVJMKGZ1bGxQYXRoLCBwbGF0Zm9ybS5oYXNCcm93c2VyRW52ID8gcGxhdGZvcm0ub3JpZ2luIDogdW5kZWZpbmVkKTtcbiAgICBjb25zdCBwcm90b2NvbCA9IHBhcnNlZC5wcm90b2NvbCB8fCBzdXBwb3J0ZWRQcm90b2NvbHNbMF07XG5cbiAgICBpZiAocHJvdG9jb2wgPT09ICdkYXRhOicpIHtcbiAgICAgIGxldCBjb252ZXJ0ZWREYXRhO1xuXG4gICAgICBpZiAobWV0aG9kICE9PSAnR0VUJykge1xuICAgICAgICByZXR1cm4gc2V0dGxlKHJlc29sdmUsIHJlamVjdCwge1xuICAgICAgICAgIHN0YXR1czogNDA1LFxuICAgICAgICAgIHN0YXR1c1RleHQ6ICdtZXRob2Qgbm90IGFsbG93ZWQnLFxuICAgICAgICAgIGhlYWRlcnM6IHt9LFxuICAgICAgICAgIGNvbmZpZ1xuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgdHJ5IHtcbiAgICAgICAgY29udmVydGVkRGF0YSA9IGZyb21EYXRhVVJJKGNvbmZpZy51cmwsIHJlc3BvbnNlVHlwZSA9PT0gJ2Jsb2InLCB7XG4gICAgICAgICAgQmxvYjogY29uZmlnLmVudiAmJiBjb25maWcuZW52LkJsb2JcbiAgICAgICAgfSk7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgdGhyb3cgQXhpb3NFcnJvci5mcm9tKGVyciwgQXhpb3NFcnJvci5FUlJfQkFEX1JFUVVFU1QsIGNvbmZpZyk7XG4gICAgICB9XG5cbiAgICAgIGlmIChyZXNwb25zZVR5cGUgPT09ICd0ZXh0Jykge1xuICAgICAgICBjb252ZXJ0ZWREYXRhID0gY29udmVydGVkRGF0YS50b1N0cmluZyhyZXNwb25zZUVuY29kaW5nKTtcblxuICAgICAgICBpZiAoIXJlc3BvbnNlRW5jb2RpbmcgfHwgcmVzcG9uc2VFbmNvZGluZyA9PT0gJ3V0ZjgnKSB7XG4gICAgICAgICAgY29udmVydGVkRGF0YSA9IHV0aWxzLnN0cmlwQk9NKGNvbnZlcnRlZERhdGEpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHJlc3BvbnNlVHlwZSA9PT0gJ3N0cmVhbScpIHtcbiAgICAgICAgY29udmVydGVkRGF0YSA9IHN0cmVhbS5SZWFkYWJsZS5mcm9tKGNvbnZlcnRlZERhdGEpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gc2V0dGxlKHJlc29sdmUsIHJlamVjdCwge1xuICAgICAgICBkYXRhOiBjb252ZXJ0ZWREYXRhLFxuICAgICAgICBzdGF0dXM6IDIwMCxcbiAgICAgICAgc3RhdHVzVGV4dDogJ09LJyxcbiAgICAgICAgaGVhZGVyczogbmV3IEF4aW9zSGVhZGVycygpLFxuICAgICAgICBjb25maWdcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmIChzdXBwb3J0ZWRQcm90b2NvbHMuaW5kZXhPZihwcm90b2NvbCkgPT09IC0xKSB7XG4gICAgICByZXR1cm4gcmVqZWN0KG5ldyBBeGlvc0Vycm9yKFxuICAgICAgICAnVW5zdXBwb3J0ZWQgcHJvdG9jb2wgJyArIHByb3RvY29sLFxuICAgICAgICBBeGlvc0Vycm9yLkVSUl9CQURfUkVRVUVTVCxcbiAgICAgICAgY29uZmlnXG4gICAgICApKTtcbiAgICB9XG5cbiAgICBjb25zdCBoZWFkZXJzID0gQXhpb3NIZWFkZXJzLmZyb20oY29uZmlnLmhlYWRlcnMpLm5vcm1hbGl6ZSgpO1xuXG4gICAgLy8gU2V0IFVzZXItQWdlbnQgKHJlcXVpcmVkIGJ5IHNvbWUgc2VydmVycylcbiAgICAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL2F4aW9zL2F4aW9zL2lzc3Vlcy82OVxuICAgIC8vIFVzZXItQWdlbnQgaXMgc3BlY2lmaWVkOyBoYW5kbGUgY2FzZSB3aGVyZSBubyBVQSBoZWFkZXIgaXMgZGVzaXJlZFxuICAgIC8vIE9ubHkgc2V0IGhlYWRlciBpZiBpdCBoYXNuJ3QgYmVlbiBzZXQgaW4gY29uZmlnXG4gICAgaGVhZGVycy5zZXQoJ1VzZXItQWdlbnQnLCAnYXhpb3MvJyArIFZFUlNJT04sIGZhbHNlKTtcblxuICAgIGNvbnN0IHtvblVwbG9hZFByb2dyZXNzLCBvbkRvd25sb2FkUHJvZ3Jlc3N9ID0gY29uZmlnO1xuICAgIGNvbnN0IG1heFJhdGUgPSBjb25maWcubWF4UmF0ZTtcbiAgICBsZXQgbWF4VXBsb2FkUmF0ZSA9IHVuZGVmaW5lZDtcbiAgICBsZXQgbWF4RG93bmxvYWRSYXRlID0gdW5kZWZpbmVkO1xuXG4gICAgLy8gc3VwcG9ydCBmb3Igc3BlYyBjb21wbGlhbnQgRm9ybURhdGEgb2JqZWN0c1xuICAgIGlmICh1dGlscy5pc1NwZWNDb21wbGlhbnRGb3JtKGRhdGEpKSB7XG4gICAgICBjb25zdCB1c2VyQm91bmRhcnkgPSBoZWFkZXJzLmdldENvbnRlbnRUeXBlKC9ib3VuZGFyeT0oWy1fXFx3XFxkXXsxMCw3MH0pL2kpO1xuXG4gICAgICBkYXRhID0gZm9ybURhdGFUb1N0cmVhbShkYXRhLCAoZm9ybUhlYWRlcnMpID0+IHtcbiAgICAgICAgaGVhZGVycy5zZXQoZm9ybUhlYWRlcnMpO1xuICAgICAgfSwge1xuICAgICAgICB0YWc6IGBheGlvcy0ke1ZFUlNJT059LWJvdW5kYXJ5YCxcbiAgICAgICAgYm91bmRhcnk6IHVzZXJCb3VuZGFyeSAmJiB1c2VyQm91bmRhcnlbMV0gfHwgdW5kZWZpbmVkXG4gICAgICB9KTtcbiAgICAgIC8vIHN1cHBvcnQgZm9yIGh0dHBzOi8vd3d3Lm5wbWpzLmNvbS9wYWNrYWdlL2Zvcm0tZGF0YSBhcGlcbiAgICB9IGVsc2UgaWYgKHV0aWxzLmlzRm9ybURhdGEoZGF0YSkgJiYgdXRpbHMuaXNGdW5jdGlvbihkYXRhLmdldEhlYWRlcnMpKSB7XG4gICAgICBoZWFkZXJzLnNldChkYXRhLmdldEhlYWRlcnMoKSk7XG5cbiAgICAgIGlmICghaGVhZGVycy5oYXNDb250ZW50TGVuZ3RoKCkpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCBrbm93bkxlbmd0aCA9IGF3YWl0IHV0aWwucHJvbWlzaWZ5KGRhdGEuZ2V0TGVuZ3RoKS5jYWxsKGRhdGEpO1xuICAgICAgICAgIE51bWJlci5pc0Zpbml0ZShrbm93bkxlbmd0aCkgJiYga25vd25MZW5ndGggPj0gMCAmJiBoZWFkZXJzLnNldENvbnRlbnRMZW5ndGgoa25vd25MZW5ndGgpO1xuICAgICAgICAgIC8qZXNsaW50IG5vLWVtcHR5OjAqL1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHV0aWxzLmlzQmxvYihkYXRhKSB8fCB1dGlscy5pc0ZpbGUoZGF0YSkpIHtcbiAgICAgIGRhdGEuc2l6ZSAmJiBoZWFkZXJzLnNldENvbnRlbnRUeXBlKGRhdGEudHlwZSB8fCAnYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtJyk7XG4gICAgICBoZWFkZXJzLnNldENvbnRlbnRMZW5ndGgoZGF0YS5zaXplIHx8IDApO1xuICAgICAgZGF0YSA9IHN0cmVhbS5SZWFkYWJsZS5mcm9tKHJlYWRCbG9iKGRhdGEpKTtcbiAgICB9IGVsc2UgaWYgKGRhdGEgJiYgIXV0aWxzLmlzU3RyZWFtKGRhdGEpKSB7XG4gICAgICBpZiAoQnVmZmVyLmlzQnVmZmVyKGRhdGEpKSB7XG4gICAgICAgIC8vIE5vdGhpbmcgdG8gZG8uLi5cbiAgICAgIH0gZWxzZSBpZiAodXRpbHMuaXNBcnJheUJ1ZmZlcihkYXRhKSkge1xuICAgICAgICBkYXRhID0gQnVmZmVyLmZyb20obmV3IFVpbnQ4QXJyYXkoZGF0YSkpO1xuICAgICAgfSBlbHNlIGlmICh1dGlscy5pc1N0cmluZyhkYXRhKSkge1xuICAgICAgICBkYXRhID0gQnVmZmVyLmZyb20oZGF0YSwgJ3V0Zi04Jyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gcmVqZWN0KG5ldyBBeGlvc0Vycm9yKFxuICAgICAgICAgICdEYXRhIGFmdGVyIHRyYW5zZm9ybWF0aW9uIG11c3QgYmUgYSBzdHJpbmcsIGFuIEFycmF5QnVmZmVyLCBhIEJ1ZmZlciwgb3IgYSBTdHJlYW0nLFxuICAgICAgICAgIEF4aW9zRXJyb3IuRVJSX0JBRF9SRVFVRVNULFxuICAgICAgICAgIGNvbmZpZ1xuICAgICAgICApKTtcbiAgICAgIH1cblxuICAgICAgLy8gQWRkIENvbnRlbnQtTGVuZ3RoIGhlYWRlciBpZiBkYXRhIGV4aXN0c1xuICAgICAgaGVhZGVycy5zZXRDb250ZW50TGVuZ3RoKGRhdGEubGVuZ3RoLCBmYWxzZSk7XG5cbiAgICAgIGlmIChjb25maWcubWF4Qm9keUxlbmd0aCA+IC0xICYmIGRhdGEubGVuZ3RoID4gY29uZmlnLm1heEJvZHlMZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIHJlamVjdChuZXcgQXhpb3NFcnJvcihcbiAgICAgICAgICAnUmVxdWVzdCBib2R5IGxhcmdlciB0aGFuIG1heEJvZHlMZW5ndGggbGltaXQnLFxuICAgICAgICAgIEF4aW9zRXJyb3IuRVJSX0JBRF9SRVFVRVNULFxuICAgICAgICAgIGNvbmZpZ1xuICAgICAgICApKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBjb250ZW50TGVuZ3RoID0gdXRpbHMudG9GaW5pdGVOdW1iZXIoaGVhZGVycy5nZXRDb250ZW50TGVuZ3RoKCkpO1xuXG4gICAgaWYgKHV0aWxzLmlzQXJyYXkobWF4UmF0ZSkpIHtcbiAgICAgIG1heFVwbG9hZFJhdGUgPSBtYXhSYXRlWzBdO1xuICAgICAgbWF4RG93bmxvYWRSYXRlID0gbWF4UmF0ZVsxXTtcbiAgICB9IGVsc2Uge1xuICAgICAgbWF4VXBsb2FkUmF0ZSA9IG1heERvd25sb2FkUmF0ZSA9IG1heFJhdGU7XG4gICAgfVxuXG4gICAgaWYgKGRhdGEgJiYgKG9uVXBsb2FkUHJvZ3Jlc3MgfHwgbWF4VXBsb2FkUmF0ZSkpIHtcbiAgICAgIGlmICghdXRpbHMuaXNTdHJlYW0oZGF0YSkpIHtcbiAgICAgICAgZGF0YSA9IHN0cmVhbS5SZWFkYWJsZS5mcm9tKGRhdGEsIHtvYmplY3RNb2RlOiBmYWxzZX0pO1xuICAgICAgfVxuXG4gICAgICBkYXRhID0gc3RyZWFtLnBpcGVsaW5lKFtkYXRhLCBuZXcgQXhpb3NUcmFuc2Zvcm1TdHJlYW0oe1xuICAgICAgICBtYXhSYXRlOiB1dGlscy50b0Zpbml0ZU51bWJlcihtYXhVcGxvYWRSYXRlKVxuICAgICAgfSldLCB1dGlscy5ub29wKTtcblxuICAgICAgb25VcGxvYWRQcm9ncmVzcyAmJiBkYXRhLm9uKCdwcm9ncmVzcycsIGZsdXNoT25GaW5pc2goXG4gICAgICAgIGRhdGEsXG4gICAgICAgIHByb2dyZXNzRXZlbnREZWNvcmF0b3IoXG4gICAgICAgICAgY29udGVudExlbmd0aCxcbiAgICAgICAgICBwcm9ncmVzc0V2ZW50UmVkdWNlcihhc3luY0RlY29yYXRvcihvblVwbG9hZFByb2dyZXNzKSwgZmFsc2UsIDMpXG4gICAgICAgIClcbiAgICAgICkpO1xuICAgIH1cblxuICAgIC8vIEhUVFAgYmFzaWMgYXV0aGVudGljYXRpb25cbiAgICBsZXQgYXV0aCA9IHVuZGVmaW5lZDtcbiAgICBpZiAoY29uZmlnLmF1dGgpIHtcbiAgICAgIGNvbnN0IHVzZXJuYW1lID0gY29uZmlnLmF1dGgudXNlcm5hbWUgfHwgJyc7XG4gICAgICBjb25zdCBwYXNzd29yZCA9IGNvbmZpZy5hdXRoLnBhc3N3b3JkIHx8ICcnO1xuICAgICAgYXV0aCA9IHVzZXJuYW1lICsgJzonICsgcGFzc3dvcmQ7XG4gICAgfVxuXG4gICAgaWYgKCFhdXRoICYmIHBhcnNlZC51c2VybmFtZSkge1xuICAgICAgY29uc3QgdXJsVXNlcm5hbWUgPSBwYXJzZWQudXNlcm5hbWU7XG4gICAgICBjb25zdCB1cmxQYXNzd29yZCA9IHBhcnNlZC5wYXNzd29yZDtcbiAgICAgIGF1dGggPSB1cmxVc2VybmFtZSArICc6JyArIHVybFBhc3N3b3JkO1xuICAgIH1cblxuICAgIGF1dGggJiYgaGVhZGVycy5kZWxldGUoJ2F1dGhvcml6YXRpb24nKTtcblxuICAgIGxldCBwYXRoO1xuXG4gICAgdHJ5IHtcbiAgICAgIHBhdGggPSBidWlsZFVSTChcbiAgICAgICAgcGFyc2VkLnBhdGhuYW1lICsgcGFyc2VkLnNlYXJjaCxcbiAgICAgICAgY29uZmlnLnBhcmFtcyxcbiAgICAgICAgY29uZmlnLnBhcmFtc1NlcmlhbGl6ZXJcbiAgICAgICkucmVwbGFjZSgvXlxcPy8sICcnKTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGNvbnN0IGN1c3RvbUVyciA9IG5ldyBFcnJvcihlcnIubWVzc2FnZSk7XG4gICAgICBjdXN0b21FcnIuY29uZmlnID0gY29uZmlnO1xuICAgICAgY3VzdG9tRXJyLnVybCA9IGNvbmZpZy51cmw7XG4gICAgICBjdXN0b21FcnIuZXhpc3RzID0gdHJ1ZTtcbiAgICAgIHJldHVybiByZWplY3QoY3VzdG9tRXJyKTtcbiAgICB9XG5cbiAgICBoZWFkZXJzLnNldChcbiAgICAgICdBY2NlcHQtRW5jb2RpbmcnLFxuICAgICAgJ2d6aXAsIGNvbXByZXNzLCBkZWZsYXRlJyArIChpc0Jyb3RsaVN1cHBvcnRlZCA/ICcsIGJyJyA6ICcnKSwgZmFsc2VcbiAgICAgICk7XG5cbiAgICBjb25zdCBvcHRpb25zID0ge1xuICAgICAgcGF0aCxcbiAgICAgIG1ldGhvZDogbWV0aG9kLFxuICAgICAgaGVhZGVyczogaGVhZGVycy50b0pTT04oKSxcbiAgICAgIGFnZW50czogeyBodHRwOiBjb25maWcuaHR0cEFnZW50LCBodHRwczogY29uZmlnLmh0dHBzQWdlbnQgfSxcbiAgICAgIGF1dGgsXG4gICAgICBwcm90b2NvbCxcbiAgICAgIGZhbWlseSxcbiAgICAgIGJlZm9yZVJlZGlyZWN0OiBkaXNwYXRjaEJlZm9yZVJlZGlyZWN0LFxuICAgICAgYmVmb3JlUmVkaXJlY3RzOiB7fVxuICAgIH07XG5cbiAgICAvLyBjYWNoZWFibGUtbG9va3VwIGludGVncmF0aW9uIGhvdGZpeFxuICAgICF1dGlscy5pc1VuZGVmaW5lZChsb29rdXApICYmIChvcHRpb25zLmxvb2t1cCA9IGxvb2t1cCk7XG5cbiAgICBpZiAoY29uZmlnLnNvY2tldFBhdGgpIHtcbiAgICAgIG9wdGlvbnMuc29ja2V0UGF0aCA9IGNvbmZpZy5zb2NrZXRQYXRoO1xuICAgIH0gZWxzZSB7XG4gICAgICBvcHRpb25zLmhvc3RuYW1lID0gcGFyc2VkLmhvc3RuYW1lLnN0YXJ0c1dpdGgoXCJbXCIpID8gcGFyc2VkLmhvc3RuYW1lLnNsaWNlKDEsIC0xKSA6IHBhcnNlZC5ob3N0bmFtZTtcbiAgICAgIG9wdGlvbnMucG9ydCA9IHBhcnNlZC5wb3J0O1xuICAgICAgc2V0UHJveHkob3B0aW9ucywgY29uZmlnLnByb3h5LCBwcm90b2NvbCArICcvLycgKyBwYXJzZWQuaG9zdG5hbWUgKyAocGFyc2VkLnBvcnQgPyAnOicgKyBwYXJzZWQucG9ydCA6ICcnKSArIG9wdGlvbnMucGF0aCk7XG4gICAgfVxuXG4gICAgbGV0IHRyYW5zcG9ydDtcbiAgICBjb25zdCBpc0h0dHBzUmVxdWVzdCA9IGlzSHR0cHMudGVzdChvcHRpb25zLnByb3RvY29sKTtcbiAgICBvcHRpb25zLmFnZW50ID0gaXNIdHRwc1JlcXVlc3QgPyBjb25maWcuaHR0cHNBZ2VudCA6IGNvbmZpZy5odHRwQWdlbnQ7XG4gICAgaWYgKGNvbmZpZy50cmFuc3BvcnQpIHtcbiAgICAgIHRyYW5zcG9ydCA9IGNvbmZpZy50cmFuc3BvcnQ7XG4gICAgfSBlbHNlIGlmIChjb25maWcubWF4UmVkaXJlY3RzID09PSAwKSB7XG4gICAgICB0cmFuc3BvcnQgPSBpc0h0dHBzUmVxdWVzdCA/IGh0dHBzIDogaHR0cDtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKGNvbmZpZy5tYXhSZWRpcmVjdHMpIHtcbiAgICAgICAgb3B0aW9ucy5tYXhSZWRpcmVjdHMgPSBjb25maWcubWF4UmVkaXJlY3RzO1xuICAgICAgfVxuICAgICAgaWYgKGNvbmZpZy5iZWZvcmVSZWRpcmVjdCkge1xuICAgICAgICBvcHRpb25zLmJlZm9yZVJlZGlyZWN0cy5jb25maWcgPSBjb25maWcuYmVmb3JlUmVkaXJlY3Q7XG4gICAgICB9XG4gICAgICB0cmFuc3BvcnQgPSBpc0h0dHBzUmVxdWVzdCA/IGh0dHBzRm9sbG93IDogaHR0cEZvbGxvdztcbiAgICB9XG5cbiAgICBpZiAoY29uZmlnLm1heEJvZHlMZW5ndGggPiAtMSkge1xuICAgICAgb3B0aW9ucy5tYXhCb2R5TGVuZ3RoID0gY29uZmlnLm1heEJvZHlMZW5ndGg7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIGZvbGxvdy1yZWRpcmVjdHMgZG9lcyBub3Qgc2tpcCBjb21wYXJpc29uLCBzbyBpdCBzaG91bGQgYWx3YXlzIHN1Y2NlZWQgZm9yIGF4aW9zIC0xIHVubGltaXRlZFxuICAgICAgb3B0aW9ucy5tYXhCb2R5TGVuZ3RoID0gSW5maW5pdHk7XG4gICAgfVxuXG4gICAgaWYgKGNvbmZpZy5pbnNlY3VyZUhUVFBQYXJzZXIpIHtcbiAgICAgIG9wdGlvbnMuaW5zZWN1cmVIVFRQUGFyc2VyID0gY29uZmlnLmluc2VjdXJlSFRUUFBhcnNlcjtcbiAgICB9XG5cbiAgICAvLyBDcmVhdGUgdGhlIHJlcXVlc3RcbiAgICByZXEgPSB0cmFuc3BvcnQucmVxdWVzdChvcHRpb25zLCBmdW5jdGlvbiBoYW5kbGVSZXNwb25zZShyZXMpIHtcbiAgICAgIGlmIChyZXEuZGVzdHJveWVkKSByZXR1cm47XG5cbiAgICAgIGNvbnN0IHN0cmVhbXMgPSBbcmVzXTtcblxuICAgICAgY29uc3QgcmVzcG9uc2VMZW5ndGggPSArcmVzLmhlYWRlcnNbJ2NvbnRlbnQtbGVuZ3RoJ107XG5cbiAgICAgIGlmIChvbkRvd25sb2FkUHJvZ3Jlc3MgfHwgbWF4RG93bmxvYWRSYXRlKSB7XG4gICAgICAgIGNvbnN0IHRyYW5zZm9ybVN0cmVhbSA9IG5ldyBBeGlvc1RyYW5zZm9ybVN0cmVhbSh7XG4gICAgICAgICAgbWF4UmF0ZTogdXRpbHMudG9GaW5pdGVOdW1iZXIobWF4RG93bmxvYWRSYXRlKVxuICAgICAgICB9KTtcblxuICAgICAgICBvbkRvd25sb2FkUHJvZ3Jlc3MgJiYgdHJhbnNmb3JtU3RyZWFtLm9uKCdwcm9ncmVzcycsIGZsdXNoT25GaW5pc2goXG4gICAgICAgICAgdHJhbnNmb3JtU3RyZWFtLFxuICAgICAgICAgIHByb2dyZXNzRXZlbnREZWNvcmF0b3IoXG4gICAgICAgICAgICByZXNwb25zZUxlbmd0aCxcbiAgICAgICAgICAgIHByb2dyZXNzRXZlbnRSZWR1Y2VyKGFzeW5jRGVjb3JhdG9yKG9uRG93bmxvYWRQcm9ncmVzcyksIHRydWUsIDMpXG4gICAgICAgICAgKVxuICAgICAgICApKTtcblxuICAgICAgICBzdHJlYW1zLnB1c2godHJhbnNmb3JtU3RyZWFtKTtcbiAgICAgIH1cblxuICAgICAgLy8gZGVjb21wcmVzcyB0aGUgcmVzcG9uc2UgYm9keSB0cmFuc3BhcmVudGx5IGlmIHJlcXVpcmVkXG4gICAgICBsZXQgcmVzcG9uc2VTdHJlYW0gPSByZXM7XG5cbiAgICAgIC8vIHJldHVybiB0aGUgbGFzdCByZXF1ZXN0IGluIGNhc2Ugb2YgcmVkaXJlY3RzXG4gICAgICBjb25zdCBsYXN0UmVxdWVzdCA9IHJlcy5yZXEgfHwgcmVxO1xuXG4gICAgICAvLyBpZiBkZWNvbXByZXNzIGRpc2FibGVkIHdlIHNob3VsZCBub3QgZGVjb21wcmVzc1xuICAgICAgaWYgKGNvbmZpZy5kZWNvbXByZXNzICE9PSBmYWxzZSAmJiByZXMuaGVhZGVyc1snY29udGVudC1lbmNvZGluZyddKSB7XG4gICAgICAgIC8vIGlmIG5vIGNvbnRlbnQsIGJ1dCBoZWFkZXJzIHN0aWxsIHNheSB0aGF0IGl0IGlzIGVuY29kZWQsXG4gICAgICAgIC8vIHJlbW92ZSB0aGUgaGVhZGVyIG5vdCBjb25mdXNlIGRvd25zdHJlYW0gb3BlcmF0aW9uc1xuICAgICAgICBpZiAobWV0aG9kID09PSAnSEVBRCcgfHwgcmVzLnN0YXR1c0NvZGUgPT09IDIwNCkge1xuICAgICAgICAgIGRlbGV0ZSByZXMuaGVhZGVyc1snY29udGVudC1lbmNvZGluZyddO1xuICAgICAgICB9XG5cbiAgICAgICAgc3dpdGNoICgocmVzLmhlYWRlcnNbJ2NvbnRlbnQtZW5jb2RpbmcnXSB8fCAnJykudG9Mb3dlckNhc2UoKSkge1xuICAgICAgICAvKmVzbGludCBkZWZhdWx0LWNhc2U6MCovXG4gICAgICAgIGNhc2UgJ2d6aXAnOlxuICAgICAgICBjYXNlICd4LWd6aXAnOlxuICAgICAgICBjYXNlICdjb21wcmVzcyc6XG4gICAgICAgIGNhc2UgJ3gtY29tcHJlc3MnOlxuICAgICAgICAgIC8vIGFkZCB0aGUgdW56aXBwZXIgdG8gdGhlIGJvZHkgc3RyZWFtIHByb2Nlc3NpbmcgcGlwZWxpbmVcbiAgICAgICAgICBzdHJlYW1zLnB1c2goemxpYi5jcmVhdGVVbnppcCh6bGliT3B0aW9ucykpO1xuXG4gICAgICAgICAgLy8gcmVtb3ZlIHRoZSBjb250ZW50LWVuY29kaW5nIGluIG9yZGVyIHRvIG5vdCBjb25mdXNlIGRvd25zdHJlYW0gb3BlcmF0aW9uc1xuICAgICAgICAgIGRlbGV0ZSByZXMuaGVhZGVyc1snY29udGVudC1lbmNvZGluZyddO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBjYXNlICdkZWZsYXRlJzpcbiAgICAgICAgICBzdHJlYW1zLnB1c2gobmV3IFpsaWJIZWFkZXJUcmFuc2Zvcm1TdHJlYW0oKSk7XG5cbiAgICAgICAgICAvLyBhZGQgdGhlIHVuemlwcGVyIHRvIHRoZSBib2R5IHN0cmVhbSBwcm9jZXNzaW5nIHBpcGVsaW5lXG4gICAgICAgICAgc3RyZWFtcy5wdXNoKHpsaWIuY3JlYXRlVW56aXAoemxpYk9wdGlvbnMpKTtcblxuICAgICAgICAgIC8vIHJlbW92ZSB0aGUgY29udGVudC1lbmNvZGluZyBpbiBvcmRlciB0byBub3QgY29uZnVzZSBkb3duc3RyZWFtIG9wZXJhdGlvbnNcbiAgICAgICAgICBkZWxldGUgcmVzLmhlYWRlcnNbJ2NvbnRlbnQtZW5jb2RpbmcnXTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSAnYnInOlxuICAgICAgICAgIGlmIChpc0Jyb3RsaVN1cHBvcnRlZCkge1xuICAgICAgICAgICAgc3RyZWFtcy5wdXNoKHpsaWIuY3JlYXRlQnJvdGxpRGVjb21wcmVzcyhicm90bGlPcHRpb25zKSk7XG4gICAgICAgICAgICBkZWxldGUgcmVzLmhlYWRlcnNbJ2NvbnRlbnQtZW5jb2RpbmcnXTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmVzcG9uc2VTdHJlYW0gPSBzdHJlYW1zLmxlbmd0aCA+IDEgPyBzdHJlYW0ucGlwZWxpbmUoc3RyZWFtcywgdXRpbHMubm9vcCkgOiBzdHJlYW1zWzBdO1xuXG4gICAgICBjb25zdCBvZmZMaXN0ZW5lcnMgPSBzdHJlYW0uZmluaXNoZWQocmVzcG9uc2VTdHJlYW0sICgpID0+IHtcbiAgICAgICAgb2ZmTGlzdGVuZXJzKCk7XG4gICAgICAgIG9uRmluaXNoZWQoKTtcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCByZXNwb25zZSA9IHtcbiAgICAgICAgc3RhdHVzOiByZXMuc3RhdHVzQ29kZSxcbiAgICAgICAgc3RhdHVzVGV4dDogcmVzLnN0YXR1c01lc3NhZ2UsXG4gICAgICAgIGhlYWRlcnM6IG5ldyBBeGlvc0hlYWRlcnMocmVzLmhlYWRlcnMpLFxuICAgICAgICBjb25maWcsXG4gICAgICAgIHJlcXVlc3Q6IGxhc3RSZXF1ZXN0XG4gICAgICB9O1xuXG4gICAgICBpZiAocmVzcG9uc2VUeXBlID09PSAnc3RyZWFtJykge1xuICAgICAgICByZXNwb25zZS5kYXRhID0gcmVzcG9uc2VTdHJlYW07XG4gICAgICAgIHNldHRsZShyZXNvbHZlLCByZWplY3QsIHJlc3BvbnNlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlQnVmZmVyID0gW107XG4gICAgICAgIGxldCB0b3RhbFJlc3BvbnNlQnl0ZXMgPSAwO1xuXG4gICAgICAgIHJlc3BvbnNlU3RyZWFtLm9uKCdkYXRhJywgZnVuY3Rpb24gaGFuZGxlU3RyZWFtRGF0YShjaHVuaykge1xuICAgICAgICAgIHJlc3BvbnNlQnVmZmVyLnB1c2goY2h1bmspO1xuICAgICAgICAgIHRvdGFsUmVzcG9uc2VCeXRlcyArPSBjaHVuay5sZW5ndGg7XG5cbiAgICAgICAgICAvLyBtYWtlIHN1cmUgdGhlIGNvbnRlbnQgbGVuZ3RoIGlzIG5vdCBvdmVyIHRoZSBtYXhDb250ZW50TGVuZ3RoIGlmIHNwZWNpZmllZFxuICAgICAgICAgIGlmIChjb25maWcubWF4Q29udGVudExlbmd0aCA+IC0xICYmIHRvdGFsUmVzcG9uc2VCeXRlcyA+IGNvbmZpZy5tYXhDb250ZW50TGVuZ3RoKSB7XG4gICAgICAgICAgICAvLyBzdHJlYW0uZGVzdHJveSgpIGVtaXQgYWJvcnRlZCBldmVudCBiZWZvcmUgY2FsbGluZyByZWplY3QoKSBvbiBOb2RlLmpzIHYxNlxuICAgICAgICAgICAgcmVqZWN0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgcmVzcG9uc2VTdHJlYW0uZGVzdHJveSgpO1xuICAgICAgICAgICAgcmVqZWN0KG5ldyBBeGlvc0Vycm9yKCdtYXhDb250ZW50TGVuZ3RoIHNpemUgb2YgJyArIGNvbmZpZy5tYXhDb250ZW50TGVuZ3RoICsgJyBleGNlZWRlZCcsXG4gICAgICAgICAgICAgIEF4aW9zRXJyb3IuRVJSX0JBRF9SRVNQT05TRSwgY29uZmlnLCBsYXN0UmVxdWVzdCkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmVzcG9uc2VTdHJlYW0ub24oJ2Fib3J0ZWQnLCBmdW5jdGlvbiBoYW5kbGVyU3RyZWFtQWJvcnRlZCgpIHtcbiAgICAgICAgICBpZiAocmVqZWN0ZWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCBlcnIgPSBuZXcgQXhpb3NFcnJvcihcbiAgICAgICAgICAgICdzdHJlYW0gaGFzIGJlZW4gYWJvcnRlZCcsXG4gICAgICAgICAgICBBeGlvc0Vycm9yLkVSUl9CQURfUkVTUE9OU0UsXG4gICAgICAgICAgICBjb25maWcsXG4gICAgICAgICAgICBsYXN0UmVxdWVzdFxuICAgICAgICAgICk7XG4gICAgICAgICAgcmVzcG9uc2VTdHJlYW0uZGVzdHJveShlcnIpO1xuICAgICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgICB9KTtcblxuICAgICAgICByZXNwb25zZVN0cmVhbS5vbignZXJyb3InLCBmdW5jdGlvbiBoYW5kbGVTdHJlYW1FcnJvcihlcnIpIHtcbiAgICAgICAgICBpZiAocmVxLmRlc3Ryb3llZCkgcmV0dXJuO1xuICAgICAgICAgIHJlamVjdChBeGlvc0Vycm9yLmZyb20oZXJyLCBudWxsLCBjb25maWcsIGxhc3RSZXF1ZXN0KSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJlc3BvbnNlU3RyZWFtLm9uKCdlbmQnLCBmdW5jdGlvbiBoYW5kbGVTdHJlYW1FbmQoKSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGxldCByZXNwb25zZURhdGEgPSByZXNwb25zZUJ1ZmZlci5sZW5ndGggPT09IDEgPyByZXNwb25zZUJ1ZmZlclswXSA6IEJ1ZmZlci5jb25jYXQocmVzcG9uc2VCdWZmZXIpO1xuICAgICAgICAgICAgaWYgKHJlc3BvbnNlVHlwZSAhPT0gJ2FycmF5YnVmZmVyJykge1xuICAgICAgICAgICAgICByZXNwb25zZURhdGEgPSByZXNwb25zZURhdGEudG9TdHJpbmcocmVzcG9uc2VFbmNvZGluZyk7XG4gICAgICAgICAgICAgIGlmICghcmVzcG9uc2VFbmNvZGluZyB8fCByZXNwb25zZUVuY29kaW5nID09PSAndXRmOCcpIHtcbiAgICAgICAgICAgICAgICByZXNwb25zZURhdGEgPSB1dGlscy5zdHJpcEJPTShyZXNwb25zZURhdGEpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXNwb25zZS5kYXRhID0gcmVzcG9uc2VEYXRhO1xuICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgcmV0dXJuIHJlamVjdChBeGlvc0Vycm9yLmZyb20oZXJyLCBudWxsLCBjb25maWcsIHJlc3BvbnNlLnJlcXVlc3QsIHJlc3BvbnNlKSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHNldHRsZShyZXNvbHZlLCByZWplY3QsIHJlc3BvbnNlKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIGVtaXR0ZXIub25jZSgnYWJvcnQnLCBlcnIgPT4ge1xuICAgICAgICBpZiAoIXJlc3BvbnNlU3RyZWFtLmRlc3Ryb3llZCkge1xuICAgICAgICAgIHJlc3BvbnNlU3RyZWFtLmVtaXQoJ2Vycm9yJywgZXJyKTtcbiAgICAgICAgICByZXNwb25zZVN0cmVhbS5kZXN0cm95KCk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuXG4gICAgZW1pdHRlci5vbmNlKCdhYm9ydCcsIGVyciA9PiB7XG4gICAgICByZWplY3QoZXJyKTtcbiAgICAgIHJlcS5kZXN0cm95KGVycik7XG4gICAgfSk7XG5cbiAgICAvLyBIYW5kbGUgZXJyb3JzXG4gICAgcmVxLm9uKCdlcnJvcicsIGZ1bmN0aW9uIGhhbmRsZVJlcXVlc3RFcnJvcihlcnIpIHtcbiAgICAgIC8vIEB0b2RvIHJlbW92ZVxuICAgICAgLy8gaWYgKHJlcS5hYm9ydGVkICYmIGVyci5jb2RlICE9PSBBeGlvc0Vycm9yLkVSUl9GUl9UT09fTUFOWV9SRURJUkVDVFMpIHJldHVybjtcbiAgICAgIHJlamVjdChBeGlvc0Vycm9yLmZyb20oZXJyLCBudWxsLCBjb25maWcsIHJlcSkpO1xuICAgIH0pO1xuXG4gICAgLy8gc2V0IHRjcCBrZWVwIGFsaXZlIHRvIHByZXZlbnQgZHJvcCBjb25uZWN0aW9uIGJ5IHBlZXJcbiAgICByZXEub24oJ3NvY2tldCcsIGZ1bmN0aW9uIGhhbmRsZVJlcXVlc3RTb2NrZXQoc29ja2V0KSB7XG4gICAgICAvLyBkZWZhdWx0IGludGVydmFsIG9mIHNlbmRpbmcgYWNrIHBhY2tldCBpcyAxIG1pbnV0ZVxuICAgICAgc29ja2V0LnNldEtlZXBBbGl2ZSh0cnVlLCAxMDAwICogNjApO1xuICAgIH0pO1xuXG4gICAgLy8gSGFuZGxlIHJlcXVlc3QgdGltZW91dFxuICAgIGlmIChjb25maWcudGltZW91dCkge1xuICAgICAgLy8gVGhpcyBpcyBmb3JjaW5nIGEgaW50IHRpbWVvdXQgdG8gYXZvaWQgcHJvYmxlbXMgaWYgdGhlIGByZXFgIGludGVyZmFjZSBkb2Vzbid0IGhhbmRsZSBvdGhlciB0eXBlcy5cbiAgICAgIGNvbnN0IHRpbWVvdXQgPSBwYXJzZUludChjb25maWcudGltZW91dCwgMTApO1xuXG4gICAgICBpZiAoTnVtYmVyLmlzTmFOKHRpbWVvdXQpKSB7XG4gICAgICAgIHJlamVjdChuZXcgQXhpb3NFcnJvcihcbiAgICAgICAgICAnZXJyb3IgdHJ5aW5nIHRvIHBhcnNlIGBjb25maWcudGltZW91dGAgdG8gaW50JyxcbiAgICAgICAgICBBeGlvc0Vycm9yLkVSUl9CQURfT1BUSU9OX1ZBTFVFLFxuICAgICAgICAgIGNvbmZpZyxcbiAgICAgICAgICByZXFcbiAgICAgICAgKSk7XG5cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICAvLyBTb21ldGltZSwgdGhlIHJlc3BvbnNlIHdpbGwgYmUgdmVyeSBzbG93LCBhbmQgZG9lcyBub3QgcmVzcG9uZCwgdGhlIGNvbm5lY3QgZXZlbnQgd2lsbCBiZSBibG9jayBieSBldmVudCBsb29wIHN5c3RlbS5cbiAgICAgIC8vIEFuZCB0aW1lciBjYWxsYmFjayB3aWxsIGJlIGZpcmVkLCBhbmQgYWJvcnQoKSB3aWxsIGJlIGludm9rZWQgYmVmb3JlIGNvbm5lY3Rpb24sIHRoZW4gZ2V0IFwic29ja2V0IGhhbmcgdXBcIiBhbmQgY29kZSBFQ09OTlJFU0VULlxuICAgICAgLy8gQXQgdGhpcyB0aW1lLCBpZiB3ZSBoYXZlIGEgbGFyZ2UgbnVtYmVyIG9mIHJlcXVlc3QsIG5vZGVqcyB3aWxsIGhhbmcgdXAgc29tZSBzb2NrZXQgb24gYmFja2dyb3VuZC4gYW5kIHRoZSBudW1iZXIgd2lsbCB1cCBhbmQgdXAuXG4gICAgICAvLyBBbmQgdGhlbiB0aGVzZSBzb2NrZXQgd2hpY2ggYmUgaGFuZyB1cCB3aWxsIGRldm91cmluZyBDUFUgbGl0dGxlIGJ5IGxpdHRsZS5cbiAgICAgIC8vIENsaWVudFJlcXVlc3Quc2V0VGltZW91dCB3aWxsIGJlIGZpcmVkIG9uIHRoZSBzcGVjaWZ5IG1pbGxpc2Vjb25kcywgYW5kIGNhbiBtYWtlIHN1cmUgdGhhdCBhYm9ydCgpIHdpbGwgYmUgZmlyZWQgYWZ0ZXIgY29ubmVjdC5cbiAgICAgIHJlcS5zZXRUaW1lb3V0KHRpbWVvdXQsIGZ1bmN0aW9uIGhhbmRsZVJlcXVlc3RUaW1lb3V0KCkge1xuICAgICAgICBpZiAoaXNEb25lKSByZXR1cm47XG4gICAgICAgIGxldCB0aW1lb3V0RXJyb3JNZXNzYWdlID0gY29uZmlnLnRpbWVvdXQgPyAndGltZW91dCBvZiAnICsgY29uZmlnLnRpbWVvdXQgKyAnbXMgZXhjZWVkZWQnIDogJ3RpbWVvdXQgZXhjZWVkZWQnO1xuICAgICAgICBjb25zdCB0cmFuc2l0aW9uYWwgPSBjb25maWcudHJhbnNpdGlvbmFsIHx8IHRyYW5zaXRpb25hbERlZmF1bHRzO1xuICAgICAgICBpZiAoY29uZmlnLnRpbWVvdXRFcnJvck1lc3NhZ2UpIHtcbiAgICAgICAgICB0aW1lb3V0RXJyb3JNZXNzYWdlID0gY29uZmlnLnRpbWVvdXRFcnJvck1lc3NhZ2U7XG4gICAgICAgIH1cbiAgICAgICAgcmVqZWN0KG5ldyBBeGlvc0Vycm9yKFxuICAgICAgICAgIHRpbWVvdXRFcnJvck1lc3NhZ2UsXG4gICAgICAgICAgdHJhbnNpdGlvbmFsLmNsYXJpZnlUaW1lb3V0RXJyb3IgPyBBeGlvc0Vycm9yLkVUSU1FRE9VVCA6IEF4aW9zRXJyb3IuRUNPTk5BQk9SVEVELFxuICAgICAgICAgIGNvbmZpZyxcbiAgICAgICAgICByZXFcbiAgICAgICAgKSk7XG4gICAgICAgIGFib3J0KCk7XG4gICAgICB9KTtcbiAgICB9XG5cblxuICAgIC8vIFNlbmQgdGhlIHJlcXVlc3RcbiAgICBpZiAodXRpbHMuaXNTdHJlYW0oZGF0YSkpIHtcbiAgICAgIGxldCBlbmRlZCA9IGZhbHNlO1xuICAgICAgbGV0IGVycm9yZWQgPSBmYWxzZTtcblxuICAgICAgZGF0YS5vbignZW5kJywgKCkgPT4ge1xuICAgICAgICBlbmRlZCA9IHRydWU7XG4gICAgICB9KTtcblxuICAgICAgZGF0YS5vbmNlKCdlcnJvcicsIGVyciA9PiB7XG4gICAgICAgIGVycm9yZWQgPSB0cnVlO1xuICAgICAgICByZXEuZGVzdHJveShlcnIpO1xuICAgICAgfSk7XG5cbiAgICAgIGRhdGEub24oJ2Nsb3NlJywgKCkgPT4ge1xuICAgICAgICBpZiAoIWVuZGVkICYmICFlcnJvcmVkKSB7XG4gICAgICAgICAgYWJvcnQobmV3IENhbmNlbGVkRXJyb3IoJ1JlcXVlc3Qgc3RyZWFtIGhhcyBiZWVuIGFib3J0ZWQnLCBjb25maWcsIHJlcSkpO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgZGF0YS5waXBlKHJlcSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlcS5lbmQoZGF0YSk7XG4gICAgfVxuICB9KTtcbn1cblxuZXhwb3J0IGNvbnN0IF9fc2V0UHJveHkgPSBzZXRQcm94eTtcbiIsICJpbXBvcnQgcGxhdGZvcm0gZnJvbSAnLi4vcGxhdGZvcm0vaW5kZXguanMnO1xuXG5leHBvcnQgZGVmYXVsdCBwbGF0Zm9ybS5oYXNTdGFuZGFyZEJyb3dzZXJFbnYgPyAoKG9yaWdpbiwgaXNNU0lFKSA9PiAodXJsKSA9PiB7XG4gIHVybCA9IG5ldyBVUkwodXJsLCBwbGF0Zm9ybS5vcmlnaW4pO1xuXG4gIHJldHVybiAoXG4gICAgb3JpZ2luLnByb3RvY29sID09PSB1cmwucHJvdG9jb2wgJiZcbiAgICBvcmlnaW4uaG9zdCA9PT0gdXJsLmhvc3QgJiZcbiAgICAoaXNNU0lFIHx8IG9yaWdpbi5wb3J0ID09PSB1cmwucG9ydClcbiAgKTtcbn0pKFxuICBuZXcgVVJMKHBsYXRmb3JtLm9yaWdpbiksXG4gIHBsYXRmb3JtLm5hdmlnYXRvciAmJiAvKG1zaWV8dHJpZGVudCkvaS50ZXN0KHBsYXRmb3JtLm5hdmlnYXRvci51c2VyQWdlbnQpXG4pIDogKCkgPT4gdHJ1ZTtcbiIsICJpbXBvcnQgdXRpbHMgZnJvbSAnLi8uLi91dGlscy5qcyc7XG5pbXBvcnQgcGxhdGZvcm0gZnJvbSAnLi4vcGxhdGZvcm0vaW5kZXguanMnO1xuXG5leHBvcnQgZGVmYXVsdCBwbGF0Zm9ybS5oYXNTdGFuZGFyZEJyb3dzZXJFbnYgP1xuXG4gIC8vIFN0YW5kYXJkIGJyb3dzZXIgZW52cyBzdXBwb3J0IGRvY3VtZW50LmNvb2tpZVxuICB7XG4gICAgd3JpdGUobmFtZSwgdmFsdWUsIGV4cGlyZXMsIHBhdGgsIGRvbWFpbiwgc2VjdXJlKSB7XG4gICAgICBjb25zdCBjb29raWUgPSBbbmFtZSArICc9JyArIGVuY29kZVVSSUNvbXBvbmVudCh2YWx1ZSldO1xuXG4gICAgICB1dGlscy5pc051bWJlcihleHBpcmVzKSAmJiBjb29raWUucHVzaCgnZXhwaXJlcz0nICsgbmV3IERhdGUoZXhwaXJlcykudG9HTVRTdHJpbmcoKSk7XG5cbiAgICAgIHV0aWxzLmlzU3RyaW5nKHBhdGgpICYmIGNvb2tpZS5wdXNoKCdwYXRoPScgKyBwYXRoKTtcblxuICAgICAgdXRpbHMuaXNTdHJpbmcoZG9tYWluKSAmJiBjb29raWUucHVzaCgnZG9tYWluPScgKyBkb21haW4pO1xuXG4gICAgICBzZWN1cmUgPT09IHRydWUgJiYgY29va2llLnB1c2goJ3NlY3VyZScpO1xuXG4gICAgICBkb2N1bWVudC5jb29raWUgPSBjb29raWUuam9pbignOyAnKTtcbiAgICB9LFxuXG4gICAgcmVhZChuYW1lKSB7XG4gICAgICBjb25zdCBtYXRjaCA9IGRvY3VtZW50LmNvb2tpZS5tYXRjaChuZXcgUmVnRXhwKCcoXnw7XFxcXHMqKSgnICsgbmFtZSArICcpPShbXjtdKiknKSk7XG4gICAgICByZXR1cm4gKG1hdGNoID8gZGVjb2RlVVJJQ29tcG9uZW50KG1hdGNoWzNdKSA6IG51bGwpO1xuICAgIH0sXG5cbiAgICByZW1vdmUobmFtZSkge1xuICAgICAgdGhpcy53cml0ZShuYW1lLCAnJywgRGF0ZS5ub3coKSAtIDg2NDAwMDAwKTtcbiAgICB9XG4gIH1cblxuICA6XG5cbiAgLy8gTm9uLXN0YW5kYXJkIGJyb3dzZXIgZW52ICh3ZWIgd29ya2VycywgcmVhY3QtbmF0aXZlKSBsYWNrIG5lZWRlZCBzdXBwb3J0LlxuICB7XG4gICAgd3JpdGUoKSB7fSxcbiAgICByZWFkKCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfSxcbiAgICByZW1vdmUoKSB7fVxuICB9O1xuXG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgdXRpbHMgZnJvbSAnLi4vdXRpbHMuanMnO1xuaW1wb3J0IEF4aW9zSGVhZGVycyBmcm9tIFwiLi9BeGlvc0hlYWRlcnMuanNcIjtcblxuY29uc3QgaGVhZGVyc1RvT2JqZWN0ID0gKHRoaW5nKSA9PiB0aGluZyBpbnN0YW5jZW9mIEF4aW9zSGVhZGVycyA/IHsgLi4udGhpbmcgfSA6IHRoaW5nO1xuXG4vKipcbiAqIENvbmZpZy1zcGVjaWZpYyBtZXJnZS1mdW5jdGlvbiB3aGljaCBjcmVhdGVzIGEgbmV3IGNvbmZpZy1vYmplY3RcbiAqIGJ5IG1lcmdpbmcgdHdvIGNvbmZpZ3VyYXRpb24gb2JqZWN0cyB0b2dldGhlci5cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gY29uZmlnMVxuICogQHBhcmFtIHtPYmplY3R9IGNvbmZpZzJcbiAqXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBOZXcgb2JqZWN0IHJlc3VsdGluZyBmcm9tIG1lcmdpbmcgY29uZmlnMiB0byBjb25maWcxXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIG1lcmdlQ29uZmlnKGNvbmZpZzEsIGNvbmZpZzIpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gIGNvbmZpZzIgPSBjb25maWcyIHx8IHt9O1xuICBjb25zdCBjb25maWcgPSB7fTtcblxuICBmdW5jdGlvbiBnZXRNZXJnZWRWYWx1ZSh0YXJnZXQsIHNvdXJjZSwgcHJvcCwgY2FzZWxlc3MpIHtcbiAgICBpZiAodXRpbHMuaXNQbGFpbk9iamVjdCh0YXJnZXQpICYmIHV0aWxzLmlzUGxhaW5PYmplY3Qoc291cmNlKSkge1xuICAgICAgcmV0dXJuIHV0aWxzLm1lcmdlLmNhbGwoe2Nhc2VsZXNzfSwgdGFyZ2V0LCBzb3VyY2UpO1xuICAgIH0gZWxzZSBpZiAodXRpbHMuaXNQbGFpbk9iamVjdChzb3VyY2UpKSB7XG4gICAgICByZXR1cm4gdXRpbHMubWVyZ2Uoe30sIHNvdXJjZSk7XG4gICAgfSBlbHNlIGlmICh1dGlscy5pc0FycmF5KHNvdXJjZSkpIHtcbiAgICAgIHJldHVybiBzb3VyY2Uuc2xpY2UoKTtcbiAgICB9XG4gICAgcmV0dXJuIHNvdXJjZTtcbiAgfVxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb25zaXN0ZW50LXJldHVyblxuICBmdW5jdGlvbiBtZXJnZURlZXBQcm9wZXJ0aWVzKGEsIGIsIHByb3AgLCBjYXNlbGVzcykge1xuICAgIGlmICghdXRpbHMuaXNVbmRlZmluZWQoYikpIHtcbiAgICAgIHJldHVybiBnZXRNZXJnZWRWYWx1ZShhLCBiLCBwcm9wICwgY2FzZWxlc3MpO1xuICAgIH0gZWxzZSBpZiAoIXV0aWxzLmlzVW5kZWZpbmVkKGEpKSB7XG4gICAgICByZXR1cm4gZ2V0TWVyZ2VkVmFsdWUodW5kZWZpbmVkLCBhLCBwcm9wICwgY2FzZWxlc3MpO1xuICAgIH1cbiAgfVxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb25zaXN0ZW50LXJldHVyblxuICBmdW5jdGlvbiB2YWx1ZUZyb21Db25maWcyKGEsIGIpIHtcbiAgICBpZiAoIXV0aWxzLmlzVW5kZWZpbmVkKGIpKSB7XG4gICAgICByZXR1cm4gZ2V0TWVyZ2VkVmFsdWUodW5kZWZpbmVkLCBiKTtcbiAgICB9XG4gIH1cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29uc2lzdGVudC1yZXR1cm5cbiAgZnVuY3Rpb24gZGVmYXVsdFRvQ29uZmlnMihhLCBiKSB7XG4gICAgaWYgKCF1dGlscy5pc1VuZGVmaW5lZChiKSkge1xuICAgICAgcmV0dXJuIGdldE1lcmdlZFZhbHVlKHVuZGVmaW5lZCwgYik7XG4gICAgfSBlbHNlIGlmICghdXRpbHMuaXNVbmRlZmluZWQoYSkpIHtcbiAgICAgIHJldHVybiBnZXRNZXJnZWRWYWx1ZSh1bmRlZmluZWQsIGEpO1xuICAgIH1cbiAgfVxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb25zaXN0ZW50LXJldHVyblxuICBmdW5jdGlvbiBtZXJnZURpcmVjdEtleXMoYSwgYiwgcHJvcCkge1xuICAgIGlmIChwcm9wIGluIGNvbmZpZzIpIHtcbiAgICAgIHJldHVybiBnZXRNZXJnZWRWYWx1ZShhLCBiKTtcbiAgICB9IGVsc2UgaWYgKHByb3AgaW4gY29uZmlnMSkge1xuICAgICAgcmV0dXJuIGdldE1lcmdlZFZhbHVlKHVuZGVmaW5lZCwgYSk7XG4gICAgfVxuICB9XG5cbiAgY29uc3QgbWVyZ2VNYXAgPSB7XG4gICAgdXJsOiB2YWx1ZUZyb21Db25maWcyLFxuICAgIG1ldGhvZDogdmFsdWVGcm9tQ29uZmlnMixcbiAgICBkYXRhOiB2YWx1ZUZyb21Db25maWcyLFxuICAgIGJhc2VVUkw6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgdHJhbnNmb3JtUmVxdWVzdDogZGVmYXVsdFRvQ29uZmlnMixcbiAgICB0cmFuc2Zvcm1SZXNwb25zZTogZGVmYXVsdFRvQ29uZmlnMixcbiAgICBwYXJhbXNTZXJpYWxpemVyOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIHRpbWVvdXQ6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgdGltZW91dE1lc3NhZ2U6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgd2l0aENyZWRlbnRpYWxzOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIHdpdGhYU1JGVG9rZW46IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgYWRhcHRlcjogZGVmYXVsdFRvQ29uZmlnMixcbiAgICByZXNwb25zZVR5cGU6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgeHNyZkNvb2tpZU5hbWU6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgeHNyZkhlYWRlck5hbWU6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgb25VcGxvYWRQcm9ncmVzczogZGVmYXVsdFRvQ29uZmlnMixcbiAgICBvbkRvd25sb2FkUHJvZ3Jlc3M6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgZGVjb21wcmVzczogZGVmYXVsdFRvQ29uZmlnMixcbiAgICBtYXhDb250ZW50TGVuZ3RoOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIG1heEJvZHlMZW5ndGg6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgYmVmb3JlUmVkaXJlY3Q6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgdHJhbnNwb3J0OiBkZWZhdWx0VG9Db25maWcyLFxuICAgIGh0dHBBZ2VudDogZGVmYXVsdFRvQ29uZmlnMixcbiAgICBodHRwc0FnZW50OiBkZWZhdWx0VG9Db25maWcyLFxuICAgIGNhbmNlbFRva2VuOiBkZWZhdWx0VG9Db25maWcyLFxuICAgIHNvY2tldFBhdGg6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgcmVzcG9uc2VFbmNvZGluZzogZGVmYXVsdFRvQ29uZmlnMixcbiAgICB2YWxpZGF0ZVN0YXR1czogbWVyZ2VEaXJlY3RLZXlzLFxuICAgIGhlYWRlcnM6IChhLCBiICwgcHJvcCkgPT4gbWVyZ2VEZWVwUHJvcGVydGllcyhoZWFkZXJzVG9PYmplY3QoYSksIGhlYWRlcnNUb09iamVjdChiKSxwcm9wLCB0cnVlKVxuICB9O1xuXG4gIHV0aWxzLmZvckVhY2goT2JqZWN0LmtleXMoT2JqZWN0LmFzc2lnbih7fSwgY29uZmlnMSwgY29uZmlnMikpLCBmdW5jdGlvbiBjb21wdXRlQ29uZmlnVmFsdWUocHJvcCkge1xuICAgIGNvbnN0IG1lcmdlID0gbWVyZ2VNYXBbcHJvcF0gfHwgbWVyZ2VEZWVwUHJvcGVydGllcztcbiAgICBjb25zdCBjb25maWdWYWx1ZSA9IG1lcmdlKGNvbmZpZzFbcHJvcF0sIGNvbmZpZzJbcHJvcF0sIHByb3ApO1xuICAgICh1dGlscy5pc1VuZGVmaW5lZChjb25maWdWYWx1ZSkgJiYgbWVyZ2UgIT09IG1lcmdlRGlyZWN0S2V5cykgfHwgKGNvbmZpZ1twcm9wXSA9IGNvbmZpZ1ZhbHVlKTtcbiAgfSk7XG5cbiAgcmV0dXJuIGNvbmZpZztcbn1cbiIsICJpbXBvcnQgcGxhdGZvcm0gZnJvbSBcIi4uL3BsYXRmb3JtL2luZGV4LmpzXCI7XG5pbXBvcnQgdXRpbHMgZnJvbSBcIi4uL3V0aWxzLmpzXCI7XG5pbXBvcnQgaXNVUkxTYW1lT3JpZ2luIGZyb20gXCIuL2lzVVJMU2FtZU9yaWdpbi5qc1wiO1xuaW1wb3J0IGNvb2tpZXMgZnJvbSBcIi4vY29va2llcy5qc1wiO1xuaW1wb3J0IGJ1aWxkRnVsbFBhdGggZnJvbSBcIi4uL2NvcmUvYnVpbGRGdWxsUGF0aC5qc1wiO1xuaW1wb3J0IG1lcmdlQ29uZmlnIGZyb20gXCIuLi9jb3JlL21lcmdlQ29uZmlnLmpzXCI7XG5pbXBvcnQgQXhpb3NIZWFkZXJzIGZyb20gXCIuLi9jb3JlL0F4aW9zSGVhZGVycy5qc1wiO1xuaW1wb3J0IGJ1aWxkVVJMIGZyb20gXCIuL2J1aWxkVVJMLmpzXCI7XG5cbmV4cG9ydCBkZWZhdWx0IChjb25maWcpID0+IHtcbiAgY29uc3QgbmV3Q29uZmlnID0gbWVyZ2VDb25maWcoe30sIGNvbmZpZyk7XG5cbiAgbGV0IHtkYXRhLCB3aXRoWFNSRlRva2VuLCB4c3JmSGVhZGVyTmFtZSwgeHNyZkNvb2tpZU5hbWUsIGhlYWRlcnMsIGF1dGh9ID0gbmV3Q29uZmlnO1xuXG4gIG5ld0NvbmZpZy5oZWFkZXJzID0gaGVhZGVycyA9IEF4aW9zSGVhZGVycy5mcm9tKGhlYWRlcnMpO1xuXG4gIG5ld0NvbmZpZy51cmwgPSBidWlsZFVSTChidWlsZEZ1bGxQYXRoKG5ld0NvbmZpZy5iYXNlVVJMLCBuZXdDb25maWcudXJsLCBuZXdDb25maWcuYWxsb3dBYnNvbHV0ZVVybHMpLCBjb25maWcucGFyYW1zLCBjb25maWcucGFyYW1zU2VyaWFsaXplcik7XG5cbiAgLy8gSFRUUCBiYXNpYyBhdXRoZW50aWNhdGlvblxuICBpZiAoYXV0aCkge1xuICAgIGhlYWRlcnMuc2V0KCdBdXRob3JpemF0aW9uJywgJ0Jhc2ljICcgK1xuICAgICAgYnRvYSgoYXV0aC51c2VybmFtZSB8fCAnJykgKyAnOicgKyAoYXV0aC5wYXNzd29yZCA/IHVuZXNjYXBlKGVuY29kZVVSSUNvbXBvbmVudChhdXRoLnBhc3N3b3JkKSkgOiAnJykpXG4gICAgKTtcbiAgfVxuXG4gIGxldCBjb250ZW50VHlwZTtcblxuICBpZiAodXRpbHMuaXNGb3JtRGF0YShkYXRhKSkge1xuICAgIGlmIChwbGF0Zm9ybS5oYXNTdGFuZGFyZEJyb3dzZXJFbnYgfHwgcGxhdGZvcm0uaGFzU3RhbmRhcmRCcm93c2VyV2ViV29ya2VyRW52KSB7XG4gICAgICBoZWFkZXJzLnNldENvbnRlbnRUeXBlKHVuZGVmaW5lZCk7IC8vIExldCB0aGUgYnJvd3NlciBzZXQgaXRcbiAgICB9IGVsc2UgaWYgKChjb250ZW50VHlwZSA9IGhlYWRlcnMuZ2V0Q29udGVudFR5cGUoKSkgIT09IGZhbHNlKSB7XG4gICAgICAvLyBmaXggc2VtaWNvbG9uIGR1cGxpY2F0aW9uIGlzc3VlIGZvciBSZWFjdE5hdGl2ZSBGb3JtRGF0YSBpbXBsZW1lbnRhdGlvblxuICAgICAgY29uc3QgW3R5cGUsIC4uLnRva2Vuc10gPSBjb250ZW50VHlwZSA/IGNvbnRlbnRUeXBlLnNwbGl0KCc7JykubWFwKHRva2VuID0+IHRva2VuLnRyaW0oKSkuZmlsdGVyKEJvb2xlYW4pIDogW107XG4gICAgICBoZWFkZXJzLnNldENvbnRlbnRUeXBlKFt0eXBlIHx8ICdtdWx0aXBhcnQvZm9ybS1kYXRhJywgLi4udG9rZW5zXS5qb2luKCc7ICcpKTtcbiAgICB9XG4gIH1cblxuICAvLyBBZGQgeHNyZiBoZWFkZXJcbiAgLy8gVGhpcyBpcyBvbmx5IGRvbmUgaWYgcnVubmluZyBpbiBhIHN0YW5kYXJkIGJyb3dzZXIgZW52aXJvbm1lbnQuXG4gIC8vIFNwZWNpZmljYWxseSBub3QgaWYgd2UncmUgaW4gYSB3ZWIgd29ya2VyLCBvciByZWFjdC1uYXRpdmUuXG5cbiAgaWYgKHBsYXRmb3JtLmhhc1N0YW5kYXJkQnJvd3NlckVudikge1xuICAgIHdpdGhYU1JGVG9rZW4gJiYgdXRpbHMuaXNGdW5jdGlvbih3aXRoWFNSRlRva2VuKSAmJiAod2l0aFhTUkZUb2tlbiA9IHdpdGhYU1JGVG9rZW4obmV3Q29uZmlnKSk7XG5cbiAgICBpZiAod2l0aFhTUkZUb2tlbiB8fCAod2l0aFhTUkZUb2tlbiAhPT0gZmFsc2UgJiYgaXNVUkxTYW1lT3JpZ2luKG5ld0NvbmZpZy51cmwpKSkge1xuICAgICAgLy8gQWRkIHhzcmYgaGVhZGVyXG4gICAgICBjb25zdCB4c3JmVmFsdWUgPSB4c3JmSGVhZGVyTmFtZSAmJiB4c3JmQ29va2llTmFtZSAmJiBjb29raWVzLnJlYWQoeHNyZkNvb2tpZU5hbWUpO1xuXG4gICAgICBpZiAoeHNyZlZhbHVlKSB7XG4gICAgICAgIGhlYWRlcnMuc2V0KHhzcmZIZWFkZXJOYW1lLCB4c3JmVmFsdWUpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBuZXdDb25maWc7XG59XG5cbiIsICJpbXBvcnQgdXRpbHMgZnJvbSAnLi8uLi91dGlscy5qcyc7XG5pbXBvcnQgc2V0dGxlIGZyb20gJy4vLi4vY29yZS9zZXR0bGUuanMnO1xuaW1wb3J0IHRyYW5zaXRpb25hbERlZmF1bHRzIGZyb20gJy4uL2RlZmF1bHRzL3RyYW5zaXRpb25hbC5qcyc7XG5pbXBvcnQgQXhpb3NFcnJvciBmcm9tICcuLi9jb3JlL0F4aW9zRXJyb3IuanMnO1xuaW1wb3J0IENhbmNlbGVkRXJyb3IgZnJvbSAnLi4vY2FuY2VsL0NhbmNlbGVkRXJyb3IuanMnO1xuaW1wb3J0IHBhcnNlUHJvdG9jb2wgZnJvbSAnLi4vaGVscGVycy9wYXJzZVByb3RvY29sLmpzJztcbmltcG9ydCBwbGF0Zm9ybSBmcm9tICcuLi9wbGF0Zm9ybS9pbmRleC5qcyc7XG5pbXBvcnQgQXhpb3NIZWFkZXJzIGZyb20gJy4uL2NvcmUvQXhpb3NIZWFkZXJzLmpzJztcbmltcG9ydCB7cHJvZ3Jlc3NFdmVudFJlZHVjZXJ9IGZyb20gJy4uL2hlbHBlcnMvcHJvZ3Jlc3NFdmVudFJlZHVjZXIuanMnO1xuaW1wb3J0IHJlc29sdmVDb25maWcgZnJvbSBcIi4uL2hlbHBlcnMvcmVzb2x2ZUNvbmZpZy5qc1wiO1xuXG5jb25zdCBpc1hIUkFkYXB0ZXJTdXBwb3J0ZWQgPSB0eXBlb2YgWE1MSHR0cFJlcXVlc3QgIT09ICd1bmRlZmluZWQnO1xuXG5leHBvcnQgZGVmYXVsdCBpc1hIUkFkYXB0ZXJTdXBwb3J0ZWQgJiYgZnVuY3Rpb24gKGNvbmZpZykge1xuICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gZGlzcGF0Y2hYaHJSZXF1ZXN0KHJlc29sdmUsIHJlamVjdCkge1xuICAgIGNvbnN0IF9jb25maWcgPSByZXNvbHZlQ29uZmlnKGNvbmZpZyk7XG4gICAgbGV0IHJlcXVlc3REYXRhID0gX2NvbmZpZy5kYXRhO1xuICAgIGNvbnN0IHJlcXVlc3RIZWFkZXJzID0gQXhpb3NIZWFkZXJzLmZyb20oX2NvbmZpZy5oZWFkZXJzKS5ub3JtYWxpemUoKTtcbiAgICBsZXQge3Jlc3BvbnNlVHlwZSwgb25VcGxvYWRQcm9ncmVzcywgb25Eb3dubG9hZFByb2dyZXNzfSA9IF9jb25maWc7XG4gICAgbGV0IG9uQ2FuY2VsZWQ7XG4gICAgbGV0IHVwbG9hZFRocm90dGxlZCwgZG93bmxvYWRUaHJvdHRsZWQ7XG4gICAgbGV0IGZsdXNoVXBsb2FkLCBmbHVzaERvd25sb2FkO1xuXG4gICAgZnVuY3Rpb24gZG9uZSgpIHtcbiAgICAgIGZsdXNoVXBsb2FkICYmIGZsdXNoVXBsb2FkKCk7IC8vIGZsdXNoIGV2ZW50c1xuICAgICAgZmx1c2hEb3dubG9hZCAmJiBmbHVzaERvd25sb2FkKCk7IC8vIGZsdXNoIGV2ZW50c1xuXG4gICAgICBfY29uZmlnLmNhbmNlbFRva2VuICYmIF9jb25maWcuY2FuY2VsVG9rZW4udW5zdWJzY3JpYmUob25DYW5jZWxlZCk7XG5cbiAgICAgIF9jb25maWcuc2lnbmFsICYmIF9jb25maWcuc2lnbmFsLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2Fib3J0Jywgb25DYW5jZWxlZCk7XG4gICAgfVxuXG4gICAgbGV0IHJlcXVlc3QgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcblxuICAgIHJlcXVlc3Qub3BlbihfY29uZmlnLm1ldGhvZC50b1VwcGVyQ2FzZSgpLCBfY29uZmlnLnVybCwgdHJ1ZSk7XG5cbiAgICAvLyBTZXQgdGhlIHJlcXVlc3QgdGltZW91dCBpbiBNU1xuICAgIHJlcXVlc3QudGltZW91dCA9IF9jb25maWcudGltZW91dDtcblxuICAgIGZ1bmN0aW9uIG9ubG9hZGVuZCgpIHtcbiAgICAgIGlmICghcmVxdWVzdCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICAvLyBQcmVwYXJlIHRoZSByZXNwb25zZVxuICAgICAgY29uc3QgcmVzcG9uc2VIZWFkZXJzID0gQXhpb3NIZWFkZXJzLmZyb20oXG4gICAgICAgICdnZXRBbGxSZXNwb25zZUhlYWRlcnMnIGluIHJlcXVlc3QgJiYgcmVxdWVzdC5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKVxuICAgICAgKTtcbiAgICAgIGNvbnN0IHJlc3BvbnNlRGF0YSA9ICFyZXNwb25zZVR5cGUgfHwgcmVzcG9uc2VUeXBlID09PSAndGV4dCcgfHwgcmVzcG9uc2VUeXBlID09PSAnanNvbicgP1xuICAgICAgICByZXF1ZXN0LnJlc3BvbnNlVGV4dCA6IHJlcXVlc3QucmVzcG9uc2U7XG4gICAgICBjb25zdCByZXNwb25zZSA9IHtcbiAgICAgICAgZGF0YTogcmVzcG9uc2VEYXRhLFxuICAgICAgICBzdGF0dXM6IHJlcXVlc3Quc3RhdHVzLFxuICAgICAgICBzdGF0dXNUZXh0OiByZXF1ZXN0LnN0YXR1c1RleHQsXG4gICAgICAgIGhlYWRlcnM6IHJlc3BvbnNlSGVhZGVycyxcbiAgICAgICAgY29uZmlnLFxuICAgICAgICByZXF1ZXN0XG4gICAgICB9O1xuXG4gICAgICBzZXR0bGUoZnVuY3Rpb24gX3Jlc29sdmUodmFsdWUpIHtcbiAgICAgICAgcmVzb2x2ZSh2YWx1ZSk7XG4gICAgICAgIGRvbmUoKTtcbiAgICAgIH0sIGZ1bmN0aW9uIF9yZWplY3QoZXJyKSB7XG4gICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgICBkb25lKCk7XG4gICAgICB9LCByZXNwb25zZSk7XG5cbiAgICAgIC8vIENsZWFuIHVwIHJlcXVlc3RcbiAgICAgIHJlcXVlc3QgPSBudWxsO1xuICAgIH1cblxuICAgIGlmICgnb25sb2FkZW5kJyBpbiByZXF1ZXN0KSB7XG4gICAgICAvLyBVc2Ugb25sb2FkZW5kIGlmIGF2YWlsYWJsZVxuICAgICAgcmVxdWVzdC5vbmxvYWRlbmQgPSBvbmxvYWRlbmQ7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIExpc3RlbiBmb3IgcmVhZHkgc3RhdGUgdG8gZW11bGF0ZSBvbmxvYWRlbmRcbiAgICAgIHJlcXVlc3Qub25yZWFkeXN0YXRlY2hhbmdlID0gZnVuY3Rpb24gaGFuZGxlTG9hZCgpIHtcbiAgICAgICAgaWYgKCFyZXF1ZXN0IHx8IHJlcXVlc3QucmVhZHlTdGF0ZSAhPT0gNCkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFRoZSByZXF1ZXN0IGVycm9yZWQgb3V0IGFuZCB3ZSBkaWRuJ3QgZ2V0IGEgcmVzcG9uc2UsIHRoaXMgd2lsbCBiZVxuICAgICAgICAvLyBoYW5kbGVkIGJ5IG9uZXJyb3IgaW5zdGVhZFxuICAgICAgICAvLyBXaXRoIG9uZSBleGNlcHRpb246IHJlcXVlc3QgdGhhdCB1c2luZyBmaWxlOiBwcm90b2NvbCwgbW9zdCBicm93c2Vyc1xuICAgICAgICAvLyB3aWxsIHJldHVybiBzdGF0dXMgYXMgMCBldmVuIHRob3VnaCBpdCdzIGEgc3VjY2Vzc2Z1bCByZXF1ZXN0XG4gICAgICAgIGlmIChyZXF1ZXN0LnN0YXR1cyA9PT0gMCAmJiAhKHJlcXVlc3QucmVzcG9uc2VVUkwgJiYgcmVxdWVzdC5yZXNwb25zZVVSTC5pbmRleE9mKCdmaWxlOicpID09PSAwKSkge1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICAvLyByZWFkeXN0YXRlIGhhbmRsZXIgaXMgY2FsbGluZyBiZWZvcmUgb25lcnJvciBvciBvbnRpbWVvdXQgaGFuZGxlcnMsXG4gICAgICAgIC8vIHNvIHdlIHNob3VsZCBjYWxsIG9ubG9hZGVuZCBvbiB0aGUgbmV4dCAndGljaydcbiAgICAgICAgc2V0VGltZW91dChvbmxvYWRlbmQpO1xuICAgICAgfTtcbiAgICB9XG5cbiAgICAvLyBIYW5kbGUgYnJvd3NlciByZXF1ZXN0IGNhbmNlbGxhdGlvbiAoYXMgb3Bwb3NlZCB0byBhIG1hbnVhbCBjYW5jZWxsYXRpb24pXG4gICAgcmVxdWVzdC5vbmFib3J0ID0gZnVuY3Rpb24gaGFuZGxlQWJvcnQoKSB7XG4gICAgICBpZiAoIXJlcXVlc3QpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICByZWplY3QobmV3IEF4aW9zRXJyb3IoJ1JlcXVlc3QgYWJvcnRlZCcsIEF4aW9zRXJyb3IuRUNPTk5BQk9SVEVELCBjb25maWcsIHJlcXVlc3QpKTtcblxuICAgICAgLy8gQ2xlYW4gdXAgcmVxdWVzdFxuICAgICAgcmVxdWVzdCA9IG51bGw7XG4gICAgfTtcblxuICAgIC8vIEhhbmRsZSBsb3cgbGV2ZWwgbmV0d29yayBlcnJvcnNcbiAgICByZXF1ZXN0Lm9uZXJyb3IgPSBmdW5jdGlvbiBoYW5kbGVFcnJvcigpIHtcbiAgICAgIC8vIFJlYWwgZXJyb3JzIGFyZSBoaWRkZW4gZnJvbSB1cyBieSB0aGUgYnJvd3NlclxuICAgICAgLy8gb25lcnJvciBzaG91bGQgb25seSBmaXJlIGlmIGl0J3MgYSBuZXR3b3JrIGVycm9yXG4gICAgICByZWplY3QobmV3IEF4aW9zRXJyb3IoJ05ldHdvcmsgRXJyb3InLCBBeGlvc0Vycm9yLkVSUl9ORVRXT1JLLCBjb25maWcsIHJlcXVlc3QpKTtcblxuICAgICAgLy8gQ2xlYW4gdXAgcmVxdWVzdFxuICAgICAgcmVxdWVzdCA9IG51bGw7XG4gICAgfTtcblxuICAgIC8vIEhhbmRsZSB0aW1lb3V0XG4gICAgcmVxdWVzdC5vbnRpbWVvdXQgPSBmdW5jdGlvbiBoYW5kbGVUaW1lb3V0KCkge1xuICAgICAgbGV0IHRpbWVvdXRFcnJvck1lc3NhZ2UgPSBfY29uZmlnLnRpbWVvdXQgPyAndGltZW91dCBvZiAnICsgX2NvbmZpZy50aW1lb3V0ICsgJ21zIGV4Y2VlZGVkJyA6ICd0aW1lb3V0IGV4Y2VlZGVkJztcbiAgICAgIGNvbnN0IHRyYW5zaXRpb25hbCA9IF9jb25maWcudHJhbnNpdGlvbmFsIHx8IHRyYW5zaXRpb25hbERlZmF1bHRzO1xuICAgICAgaWYgKF9jb25maWcudGltZW91dEVycm9yTWVzc2FnZSkge1xuICAgICAgICB0aW1lb3V0RXJyb3JNZXNzYWdlID0gX2NvbmZpZy50aW1lb3V0RXJyb3JNZXNzYWdlO1xuICAgICAgfVxuICAgICAgcmVqZWN0KG5ldyBBeGlvc0Vycm9yKFxuICAgICAgICB0aW1lb3V0RXJyb3JNZXNzYWdlLFxuICAgICAgICB0cmFuc2l0aW9uYWwuY2xhcmlmeVRpbWVvdXRFcnJvciA/IEF4aW9zRXJyb3IuRVRJTUVET1VUIDogQXhpb3NFcnJvci5FQ09OTkFCT1JURUQsXG4gICAgICAgIGNvbmZpZyxcbiAgICAgICAgcmVxdWVzdCkpO1xuXG4gICAgICAvLyBDbGVhbiB1cCByZXF1ZXN0XG4gICAgICByZXF1ZXN0ID0gbnVsbDtcbiAgICB9O1xuXG4gICAgLy8gUmVtb3ZlIENvbnRlbnQtVHlwZSBpZiBkYXRhIGlzIHVuZGVmaW5lZFxuICAgIHJlcXVlc3REYXRhID09PSB1bmRlZmluZWQgJiYgcmVxdWVzdEhlYWRlcnMuc2V0Q29udGVudFR5cGUobnVsbCk7XG5cbiAgICAvLyBBZGQgaGVhZGVycyB0byB0aGUgcmVxdWVzdFxuICAgIGlmICgnc2V0UmVxdWVzdEhlYWRlcicgaW4gcmVxdWVzdCkge1xuICAgICAgdXRpbHMuZm9yRWFjaChyZXF1ZXN0SGVhZGVycy50b0pTT04oKSwgZnVuY3Rpb24gc2V0UmVxdWVzdEhlYWRlcih2YWwsIGtleSkge1xuICAgICAgICByZXF1ZXN0LnNldFJlcXVlc3RIZWFkZXIoa2V5LCB2YWwpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gQWRkIHdpdGhDcmVkZW50aWFscyB0byByZXF1ZXN0IGlmIG5lZWRlZFxuICAgIGlmICghdXRpbHMuaXNVbmRlZmluZWQoX2NvbmZpZy53aXRoQ3JlZGVudGlhbHMpKSB7XG4gICAgICByZXF1ZXN0LndpdGhDcmVkZW50aWFscyA9ICEhX2NvbmZpZy53aXRoQ3JlZGVudGlhbHM7XG4gICAgfVxuXG4gICAgLy8gQWRkIHJlc3BvbnNlVHlwZSB0byByZXF1ZXN0IGlmIG5lZWRlZFxuICAgIGlmIChyZXNwb25zZVR5cGUgJiYgcmVzcG9uc2VUeXBlICE9PSAnanNvbicpIHtcbiAgICAgIHJlcXVlc3QucmVzcG9uc2VUeXBlID0gX2NvbmZpZy5yZXNwb25zZVR5cGU7XG4gICAgfVxuXG4gICAgLy8gSGFuZGxlIHByb2dyZXNzIGlmIG5lZWRlZFxuICAgIGlmIChvbkRvd25sb2FkUHJvZ3Jlc3MpIHtcbiAgICAgIChbZG93bmxvYWRUaHJvdHRsZWQsIGZsdXNoRG93bmxvYWRdID0gcHJvZ3Jlc3NFdmVudFJlZHVjZXIob25Eb3dubG9hZFByb2dyZXNzLCB0cnVlKSk7XG4gICAgICByZXF1ZXN0LmFkZEV2ZW50TGlzdGVuZXIoJ3Byb2dyZXNzJywgZG93bmxvYWRUaHJvdHRsZWQpO1xuICAgIH1cblxuICAgIC8vIE5vdCBhbGwgYnJvd3NlcnMgc3VwcG9ydCB1cGxvYWQgZXZlbnRzXG4gICAgaWYgKG9uVXBsb2FkUHJvZ3Jlc3MgJiYgcmVxdWVzdC51cGxvYWQpIHtcbiAgICAgIChbdXBsb2FkVGhyb3R0bGVkLCBmbHVzaFVwbG9hZF0gPSBwcm9ncmVzc0V2ZW50UmVkdWNlcihvblVwbG9hZFByb2dyZXNzKSk7XG5cbiAgICAgIHJlcXVlc3QudXBsb2FkLmFkZEV2ZW50TGlzdGVuZXIoJ3Byb2dyZXNzJywgdXBsb2FkVGhyb3R0bGVkKTtcblxuICAgICAgcmVxdWVzdC51cGxvYWQuYWRkRXZlbnRMaXN0ZW5lcignbG9hZGVuZCcsIGZsdXNoVXBsb2FkKTtcbiAgICB9XG5cbiAgICBpZiAoX2NvbmZpZy5jYW5jZWxUb2tlbiB8fCBfY29uZmlnLnNpZ25hbCkge1xuICAgICAgLy8gSGFuZGxlIGNhbmNlbGxhdGlvblxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGZ1bmMtbmFtZXNcbiAgICAgIG9uQ2FuY2VsZWQgPSBjYW5jZWwgPT4ge1xuICAgICAgICBpZiAoIXJlcXVlc3QpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgcmVqZWN0KCFjYW5jZWwgfHwgY2FuY2VsLnR5cGUgPyBuZXcgQ2FuY2VsZWRFcnJvcihudWxsLCBjb25maWcsIHJlcXVlc3QpIDogY2FuY2VsKTtcbiAgICAgICAgcmVxdWVzdC5hYm9ydCgpO1xuICAgICAgICByZXF1ZXN0ID0gbnVsbDtcbiAgICAgIH07XG5cbiAgICAgIF9jb25maWcuY2FuY2VsVG9rZW4gJiYgX2NvbmZpZy5jYW5jZWxUb2tlbi5zdWJzY3JpYmUob25DYW5jZWxlZCk7XG4gICAgICBpZiAoX2NvbmZpZy5zaWduYWwpIHtcbiAgICAgICAgX2NvbmZpZy5zaWduYWwuYWJvcnRlZCA/IG9uQ2FuY2VsZWQoKSA6IF9jb25maWcuc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoJ2Fib3J0Jywgb25DYW5jZWxlZCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgcHJvdG9jb2wgPSBwYXJzZVByb3RvY29sKF9jb25maWcudXJsKTtcblxuICAgIGlmIChwcm90b2NvbCAmJiBwbGF0Zm9ybS5wcm90b2NvbHMuaW5kZXhPZihwcm90b2NvbCkgPT09IC0xKSB7XG4gICAgICByZWplY3QobmV3IEF4aW9zRXJyb3IoJ1Vuc3VwcG9ydGVkIHByb3RvY29sICcgKyBwcm90b2NvbCArICc6JywgQXhpb3NFcnJvci5FUlJfQkFEX1JFUVVFU1QsIGNvbmZpZykpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuXG4gICAgLy8gU2VuZCB0aGUgcmVxdWVzdFxuICAgIHJlcXVlc3Quc2VuZChyZXF1ZXN0RGF0YSB8fCBudWxsKTtcbiAgfSk7XG59XG4iLCAiaW1wb3J0IENhbmNlbGVkRXJyb3IgZnJvbSBcIi4uL2NhbmNlbC9DYW5jZWxlZEVycm9yLmpzXCI7XG5pbXBvcnQgQXhpb3NFcnJvciBmcm9tIFwiLi4vY29yZS9BeGlvc0Vycm9yLmpzXCI7XG5pbXBvcnQgdXRpbHMgZnJvbSAnLi4vdXRpbHMuanMnO1xuXG5jb25zdCBjb21wb3NlU2lnbmFscyA9IChzaWduYWxzLCB0aW1lb3V0KSA9PiB7XG4gIGNvbnN0IHtsZW5ndGh9ID0gKHNpZ25hbHMgPSBzaWduYWxzID8gc2lnbmFscy5maWx0ZXIoQm9vbGVhbikgOiBbXSk7XG5cbiAgaWYgKHRpbWVvdXQgfHwgbGVuZ3RoKSB7XG4gICAgbGV0IGNvbnRyb2xsZXIgPSBuZXcgQWJvcnRDb250cm9sbGVyKCk7XG5cbiAgICBsZXQgYWJvcnRlZDtcblxuICAgIGNvbnN0IG9uYWJvcnQgPSBmdW5jdGlvbiAocmVhc29uKSB7XG4gICAgICBpZiAoIWFib3J0ZWQpIHtcbiAgICAgICAgYWJvcnRlZCA9IHRydWU7XG4gICAgICAgIHVuc3Vic2NyaWJlKCk7XG4gICAgICAgIGNvbnN0IGVyciA9IHJlYXNvbiBpbnN0YW5jZW9mIEVycm9yID8gcmVhc29uIDogdGhpcy5yZWFzb247XG4gICAgICAgIGNvbnRyb2xsZXIuYWJvcnQoZXJyIGluc3RhbmNlb2YgQXhpb3NFcnJvciA/IGVyciA6IG5ldyBDYW5jZWxlZEVycm9yKGVyciBpbnN0YW5jZW9mIEVycm9yID8gZXJyLm1lc3NhZ2UgOiBlcnIpKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBsZXQgdGltZXIgPSB0aW1lb3V0ICYmIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGltZXIgPSBudWxsO1xuICAgICAgb25hYm9ydChuZXcgQXhpb3NFcnJvcihgdGltZW91dCAke3RpbWVvdXR9IG9mIG1zIGV4Y2VlZGVkYCwgQXhpb3NFcnJvci5FVElNRURPVVQpKVxuICAgIH0sIHRpbWVvdXQpXG5cbiAgICBjb25zdCB1bnN1YnNjcmliZSA9ICgpID0+IHtcbiAgICAgIGlmIChzaWduYWxzKSB7XG4gICAgICAgIHRpbWVyICYmIGNsZWFyVGltZW91dCh0aW1lcik7XG4gICAgICAgIHRpbWVyID0gbnVsbDtcbiAgICAgICAgc2lnbmFscy5mb3JFYWNoKHNpZ25hbCA9PiB7XG4gICAgICAgICAgc2lnbmFsLnVuc3Vic2NyaWJlID8gc2lnbmFsLnVuc3Vic2NyaWJlKG9uYWJvcnQpIDogc2lnbmFsLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2Fib3J0Jywgb25hYm9ydCk7XG4gICAgICAgIH0pO1xuICAgICAgICBzaWduYWxzID0gbnVsbDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBzaWduYWxzLmZvckVhY2goKHNpZ25hbCkgPT4gc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoJ2Fib3J0Jywgb25hYm9ydCkpO1xuXG4gICAgY29uc3Qge3NpZ25hbH0gPSBjb250cm9sbGVyO1xuXG4gICAgc2lnbmFsLnVuc3Vic2NyaWJlID0gKCkgPT4gdXRpbHMuYXNhcCh1bnN1YnNjcmliZSk7XG5cbiAgICByZXR1cm4gc2lnbmFsO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IGNvbXBvc2VTaWduYWxzO1xuIiwgIlxuZXhwb3J0IGNvbnN0IHN0cmVhbUNodW5rID0gZnVuY3Rpb24qIChjaHVuaywgY2h1bmtTaXplKSB7XG4gIGxldCBsZW4gPSBjaHVuay5ieXRlTGVuZ3RoO1xuXG4gIGlmICghY2h1bmtTaXplIHx8IGxlbiA8IGNodW5rU2l6ZSkge1xuICAgIHlpZWxkIGNodW5rO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGxldCBwb3MgPSAwO1xuICBsZXQgZW5kO1xuXG4gIHdoaWxlIChwb3MgPCBsZW4pIHtcbiAgICBlbmQgPSBwb3MgKyBjaHVua1NpemU7XG4gICAgeWllbGQgY2h1bmsuc2xpY2UocG9zLCBlbmQpO1xuICAgIHBvcyA9IGVuZDtcbiAgfVxufVxuXG5leHBvcnQgY29uc3QgcmVhZEJ5dGVzID0gYXN5bmMgZnVuY3Rpb24qIChpdGVyYWJsZSwgY2h1bmtTaXplKSB7XG4gIGZvciBhd2FpdCAoY29uc3QgY2h1bmsgb2YgcmVhZFN0cmVhbShpdGVyYWJsZSkpIHtcbiAgICB5aWVsZCogc3RyZWFtQ2h1bmsoY2h1bmssIGNodW5rU2l6ZSk7XG4gIH1cbn1cblxuY29uc3QgcmVhZFN0cmVhbSA9IGFzeW5jIGZ1bmN0aW9uKiAoc3RyZWFtKSB7XG4gIGlmIChzdHJlYW1bU3ltYm9sLmFzeW5jSXRlcmF0b3JdKSB7XG4gICAgeWllbGQqIHN0cmVhbTtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCByZWFkZXIgPSBzdHJlYW0uZ2V0UmVhZGVyKCk7XG4gIHRyeSB7XG4gICAgZm9yICg7Oykge1xuICAgICAgY29uc3Qge2RvbmUsIHZhbHVlfSA9IGF3YWl0IHJlYWRlci5yZWFkKCk7XG4gICAgICBpZiAoZG9uZSkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICAgIHlpZWxkIHZhbHVlO1xuICAgIH1cbiAgfSBmaW5hbGx5IHtcbiAgICBhd2FpdCByZWFkZXIuY2FuY2VsKCk7XG4gIH1cbn1cblxuZXhwb3J0IGNvbnN0IHRyYWNrU3RyZWFtID0gKHN0cmVhbSwgY2h1bmtTaXplLCBvblByb2dyZXNzLCBvbkZpbmlzaCkgPT4ge1xuICBjb25zdCBpdGVyYXRvciA9IHJlYWRCeXRlcyhzdHJlYW0sIGNodW5rU2l6ZSk7XG5cbiAgbGV0IGJ5dGVzID0gMDtcbiAgbGV0IGRvbmU7XG4gIGxldCBfb25GaW5pc2ggPSAoZSkgPT4ge1xuICAgIGlmICghZG9uZSkge1xuICAgICAgZG9uZSA9IHRydWU7XG4gICAgICBvbkZpbmlzaCAmJiBvbkZpbmlzaChlKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbmV3IFJlYWRhYmxlU3RyZWFtKHtcbiAgICBhc3luYyBwdWxsKGNvbnRyb2xsZXIpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHtkb25lLCB2YWx1ZX0gPSBhd2FpdCBpdGVyYXRvci5uZXh0KCk7XG5cbiAgICAgICAgaWYgKGRvbmUpIHtcbiAgICAgICAgIF9vbkZpbmlzaCgpO1xuICAgICAgICAgIGNvbnRyb2xsZXIuY2xvc2UoKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgbGVuID0gdmFsdWUuYnl0ZUxlbmd0aDtcbiAgICAgICAgaWYgKG9uUHJvZ3Jlc3MpIHtcbiAgICAgICAgICBsZXQgbG9hZGVkQnl0ZXMgPSBieXRlcyArPSBsZW47XG4gICAgICAgICAgb25Qcm9ncmVzcyhsb2FkZWRCeXRlcyk7XG4gICAgICAgIH1cbiAgICAgICAgY29udHJvbGxlci5lbnF1ZXVlKG5ldyBVaW50OEFycmF5KHZhbHVlKSk7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgX29uRmluaXNoKGVycik7XG4gICAgICAgIHRocm93IGVycjtcbiAgICAgIH1cbiAgICB9LFxuICAgIGNhbmNlbChyZWFzb24pIHtcbiAgICAgIF9vbkZpbmlzaChyZWFzb24pO1xuICAgICAgcmV0dXJuIGl0ZXJhdG9yLnJldHVybigpO1xuICAgIH1cbiAgfSwge1xuICAgIGhpZ2hXYXRlck1hcms6IDJcbiAgfSlcbn1cbiIsICJpbXBvcnQgcGxhdGZvcm0gZnJvbSBcIi4uL3BsYXRmb3JtL2luZGV4LmpzXCI7XG5pbXBvcnQgdXRpbHMgZnJvbSBcIi4uL3V0aWxzLmpzXCI7XG5pbXBvcnQgQXhpb3NFcnJvciBmcm9tIFwiLi4vY29yZS9BeGlvc0Vycm9yLmpzXCI7XG5pbXBvcnQgY29tcG9zZVNpZ25hbHMgZnJvbSBcIi4uL2hlbHBlcnMvY29tcG9zZVNpZ25hbHMuanNcIjtcbmltcG9ydCB7dHJhY2tTdHJlYW19IGZyb20gXCIuLi9oZWxwZXJzL3RyYWNrU3RyZWFtLmpzXCI7XG5pbXBvcnQgQXhpb3NIZWFkZXJzIGZyb20gXCIuLi9jb3JlL0F4aW9zSGVhZGVycy5qc1wiO1xuaW1wb3J0IHtwcm9ncmVzc0V2ZW50UmVkdWNlciwgcHJvZ3Jlc3NFdmVudERlY29yYXRvciwgYXN5bmNEZWNvcmF0b3J9IGZyb20gXCIuLi9oZWxwZXJzL3Byb2dyZXNzRXZlbnRSZWR1Y2VyLmpzXCI7XG5pbXBvcnQgcmVzb2x2ZUNvbmZpZyBmcm9tIFwiLi4vaGVscGVycy9yZXNvbHZlQ29uZmlnLmpzXCI7XG5pbXBvcnQgc2V0dGxlIGZyb20gXCIuLi9jb3JlL3NldHRsZS5qc1wiO1xuXG5jb25zdCBpc0ZldGNoU3VwcG9ydGVkID0gdHlwZW9mIGZldGNoID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBSZXF1ZXN0ID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBSZXNwb25zZSA9PT0gJ2Z1bmN0aW9uJztcbmNvbnN0IGlzUmVhZGFibGVTdHJlYW1TdXBwb3J0ZWQgPSBpc0ZldGNoU3VwcG9ydGVkICYmIHR5cGVvZiBSZWFkYWJsZVN0cmVhbSA9PT0gJ2Z1bmN0aW9uJztcblxuLy8gdXNlZCBvbmx5IGluc2lkZSB0aGUgZmV0Y2ggYWRhcHRlclxuY29uc3QgZW5jb2RlVGV4dCA9IGlzRmV0Y2hTdXBwb3J0ZWQgJiYgKHR5cGVvZiBUZXh0RW5jb2RlciA9PT0gJ2Z1bmN0aW9uJyA/XG4gICAgKChlbmNvZGVyKSA9PiAoc3RyKSA9PiBlbmNvZGVyLmVuY29kZShzdHIpKShuZXcgVGV4dEVuY29kZXIoKSkgOlxuICAgIGFzeW5jIChzdHIpID0+IG5ldyBVaW50OEFycmF5KGF3YWl0IG5ldyBSZXNwb25zZShzdHIpLmFycmF5QnVmZmVyKCkpXG4pO1xuXG5jb25zdCB0ZXN0ID0gKGZuLCAuLi5hcmdzKSA9PiB7XG4gIHRyeSB7XG4gICAgcmV0dXJuICEhZm4oLi4uYXJncyk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxufVxuXG5jb25zdCBzdXBwb3J0c1JlcXVlc3RTdHJlYW0gPSBpc1JlYWRhYmxlU3RyZWFtU3VwcG9ydGVkICYmIHRlc3QoKCkgPT4ge1xuICBsZXQgZHVwbGV4QWNjZXNzZWQgPSBmYWxzZTtcblxuICBjb25zdCBoYXNDb250ZW50VHlwZSA9IG5ldyBSZXF1ZXN0KHBsYXRmb3JtLm9yaWdpbiwge1xuICAgIGJvZHk6IG5ldyBSZWFkYWJsZVN0cmVhbSgpLFxuICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgIGdldCBkdXBsZXgoKSB7XG4gICAgICBkdXBsZXhBY2Nlc3NlZCA9IHRydWU7XG4gICAgICByZXR1cm4gJ2hhbGYnO1xuICAgIH0sXG4gIH0pLmhlYWRlcnMuaGFzKCdDb250ZW50LVR5cGUnKTtcblxuICByZXR1cm4gZHVwbGV4QWNjZXNzZWQgJiYgIWhhc0NvbnRlbnRUeXBlO1xufSk7XG5cbmNvbnN0IERFRkFVTFRfQ0hVTktfU0laRSA9IDY0ICogMTAyNDtcblxuY29uc3Qgc3VwcG9ydHNSZXNwb25zZVN0cmVhbSA9IGlzUmVhZGFibGVTdHJlYW1TdXBwb3J0ZWQgJiZcbiAgdGVzdCgoKSA9PiB1dGlscy5pc1JlYWRhYmxlU3RyZWFtKG5ldyBSZXNwb25zZSgnJykuYm9keSkpO1xuXG5cbmNvbnN0IHJlc29sdmVycyA9IHtcbiAgc3RyZWFtOiBzdXBwb3J0c1Jlc3BvbnNlU3RyZWFtICYmICgocmVzKSA9PiByZXMuYm9keSlcbn07XG5cbmlzRmV0Y2hTdXBwb3J0ZWQgJiYgKCgocmVzKSA9PiB7XG4gIFsndGV4dCcsICdhcnJheUJ1ZmZlcicsICdibG9iJywgJ2Zvcm1EYXRhJywgJ3N0cmVhbSddLmZvckVhY2godHlwZSA9PiB7XG4gICAgIXJlc29sdmVyc1t0eXBlXSAmJiAocmVzb2x2ZXJzW3R5cGVdID0gdXRpbHMuaXNGdW5jdGlvbihyZXNbdHlwZV0pID8gKHJlcykgPT4gcmVzW3R5cGVdKCkgOlxuICAgICAgKF8sIGNvbmZpZykgPT4ge1xuICAgICAgICB0aHJvdyBuZXcgQXhpb3NFcnJvcihgUmVzcG9uc2UgdHlwZSAnJHt0eXBlfScgaXMgbm90IHN1cHBvcnRlZGAsIEF4aW9zRXJyb3IuRVJSX05PVF9TVVBQT1JULCBjb25maWcpO1xuICAgICAgfSlcbiAgfSk7XG59KShuZXcgUmVzcG9uc2UpKTtcblxuY29uc3QgZ2V0Qm9keUxlbmd0aCA9IGFzeW5jIChib2R5KSA9PiB7XG4gIGlmIChib2R5ID09IG51bGwpIHtcbiAgICByZXR1cm4gMDtcbiAgfVxuXG4gIGlmKHV0aWxzLmlzQmxvYihib2R5KSkge1xuICAgIHJldHVybiBib2R5LnNpemU7XG4gIH1cblxuICBpZih1dGlscy5pc1NwZWNDb21wbGlhbnRGb3JtKGJvZHkpKSB7XG4gICAgY29uc3QgX3JlcXVlc3QgPSBuZXcgUmVxdWVzdChwbGF0Zm9ybS5vcmlnaW4sIHtcbiAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgYm9keSxcbiAgICB9KTtcbiAgICByZXR1cm4gKGF3YWl0IF9yZXF1ZXN0LmFycmF5QnVmZmVyKCkpLmJ5dGVMZW5ndGg7XG4gIH1cblxuICBpZih1dGlscy5pc0FycmF5QnVmZmVyVmlldyhib2R5KSB8fCB1dGlscy5pc0FycmF5QnVmZmVyKGJvZHkpKSB7XG4gICAgcmV0dXJuIGJvZHkuYnl0ZUxlbmd0aDtcbiAgfVxuXG4gIGlmKHV0aWxzLmlzVVJMU2VhcmNoUGFyYW1zKGJvZHkpKSB7XG4gICAgYm9keSA9IGJvZHkgKyAnJztcbiAgfVxuXG4gIGlmKHV0aWxzLmlzU3RyaW5nKGJvZHkpKSB7XG4gICAgcmV0dXJuIChhd2FpdCBlbmNvZGVUZXh0KGJvZHkpKS5ieXRlTGVuZ3RoO1xuICB9XG59XG5cbmNvbnN0IHJlc29sdmVCb2R5TGVuZ3RoID0gYXN5bmMgKGhlYWRlcnMsIGJvZHkpID0+IHtcbiAgY29uc3QgbGVuZ3RoID0gdXRpbHMudG9GaW5pdGVOdW1iZXIoaGVhZGVycy5nZXRDb250ZW50TGVuZ3RoKCkpO1xuXG4gIHJldHVybiBsZW5ndGggPT0gbnVsbCA/IGdldEJvZHlMZW5ndGgoYm9keSkgOiBsZW5ndGg7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGlzRmV0Y2hTdXBwb3J0ZWQgJiYgKGFzeW5jIChjb25maWcpID0+IHtcbiAgbGV0IHtcbiAgICB1cmwsXG4gICAgbWV0aG9kLFxuICAgIGRhdGEsXG4gICAgc2lnbmFsLFxuICAgIGNhbmNlbFRva2VuLFxuICAgIHRpbWVvdXQsXG4gICAgb25Eb3dubG9hZFByb2dyZXNzLFxuICAgIG9uVXBsb2FkUHJvZ3Jlc3MsXG4gICAgcmVzcG9uc2VUeXBlLFxuICAgIGhlYWRlcnMsXG4gICAgd2l0aENyZWRlbnRpYWxzID0gJ3NhbWUtb3JpZ2luJyxcbiAgICBmZXRjaE9wdGlvbnNcbiAgfSA9IHJlc29sdmVDb25maWcoY29uZmlnKTtcblxuICByZXNwb25zZVR5cGUgPSByZXNwb25zZVR5cGUgPyAocmVzcG9uc2VUeXBlICsgJycpLnRvTG93ZXJDYXNlKCkgOiAndGV4dCc7XG5cbiAgbGV0IGNvbXBvc2VkU2lnbmFsID0gY29tcG9zZVNpZ25hbHMoW3NpZ25hbCwgY2FuY2VsVG9rZW4gJiYgY2FuY2VsVG9rZW4udG9BYm9ydFNpZ25hbCgpXSwgdGltZW91dCk7XG5cbiAgbGV0IHJlcXVlc3Q7XG5cbiAgY29uc3QgdW5zdWJzY3JpYmUgPSBjb21wb3NlZFNpZ25hbCAmJiBjb21wb3NlZFNpZ25hbC51bnN1YnNjcmliZSAmJiAoKCkgPT4ge1xuICAgICAgY29tcG9zZWRTaWduYWwudW5zdWJzY3JpYmUoKTtcbiAgfSk7XG5cbiAgbGV0IHJlcXVlc3RDb250ZW50TGVuZ3RoO1xuXG4gIHRyeSB7XG4gICAgaWYgKFxuICAgICAgb25VcGxvYWRQcm9ncmVzcyAmJiBzdXBwb3J0c1JlcXVlc3RTdHJlYW0gJiYgbWV0aG9kICE9PSAnZ2V0JyAmJiBtZXRob2QgIT09ICdoZWFkJyAmJlxuICAgICAgKHJlcXVlc3RDb250ZW50TGVuZ3RoID0gYXdhaXQgcmVzb2x2ZUJvZHlMZW5ndGgoaGVhZGVycywgZGF0YSkpICE9PSAwXG4gICAgKSB7XG4gICAgICBsZXQgX3JlcXVlc3QgPSBuZXcgUmVxdWVzdCh1cmwsIHtcbiAgICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICAgIGJvZHk6IGRhdGEsXG4gICAgICAgIGR1cGxleDogXCJoYWxmXCJcbiAgICAgIH0pO1xuXG4gICAgICBsZXQgY29udGVudFR5cGVIZWFkZXI7XG5cbiAgICAgIGlmICh1dGlscy5pc0Zvcm1EYXRhKGRhdGEpICYmIChjb250ZW50VHlwZUhlYWRlciA9IF9yZXF1ZXN0LmhlYWRlcnMuZ2V0KCdjb250ZW50LXR5cGUnKSkpIHtcbiAgICAgICAgaGVhZGVycy5zZXRDb250ZW50VHlwZShjb250ZW50VHlwZUhlYWRlcilcbiAgICAgIH1cblxuICAgICAgaWYgKF9yZXF1ZXN0LmJvZHkpIHtcbiAgICAgICAgY29uc3QgW29uUHJvZ3Jlc3MsIGZsdXNoXSA9IHByb2dyZXNzRXZlbnREZWNvcmF0b3IoXG4gICAgICAgICAgcmVxdWVzdENvbnRlbnRMZW5ndGgsXG4gICAgICAgICAgcHJvZ3Jlc3NFdmVudFJlZHVjZXIoYXN5bmNEZWNvcmF0b3Iob25VcGxvYWRQcm9ncmVzcykpXG4gICAgICAgICk7XG5cbiAgICAgICAgZGF0YSA9IHRyYWNrU3RyZWFtKF9yZXF1ZXN0LmJvZHksIERFRkFVTFRfQ0hVTktfU0laRSwgb25Qcm9ncmVzcywgZmx1c2gpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICghdXRpbHMuaXNTdHJpbmcod2l0aENyZWRlbnRpYWxzKSkge1xuICAgICAgd2l0aENyZWRlbnRpYWxzID0gd2l0aENyZWRlbnRpYWxzID8gJ2luY2x1ZGUnIDogJ29taXQnO1xuICAgIH1cblxuICAgIC8vIENsb3VkZmxhcmUgV29ya2VycyB0aHJvd3Mgd2hlbiBjcmVkZW50aWFscyBhcmUgZGVmaW5lZFxuICAgIC8vIHNlZSBodHRwczovL2dpdGh1Yi5jb20vY2xvdWRmbGFyZS93b3JrZXJkL2lzc3Vlcy85MDJcbiAgICBjb25zdCBpc0NyZWRlbnRpYWxzU3VwcG9ydGVkID0gXCJjcmVkZW50aWFsc1wiIGluIFJlcXVlc3QucHJvdG90eXBlO1xuICAgIHJlcXVlc3QgPSBuZXcgUmVxdWVzdCh1cmwsIHtcbiAgICAgIC4uLmZldGNoT3B0aW9ucyxcbiAgICAgIHNpZ25hbDogY29tcG9zZWRTaWduYWwsXG4gICAgICBtZXRob2Q6IG1ldGhvZC50b1VwcGVyQ2FzZSgpLFxuICAgICAgaGVhZGVyczogaGVhZGVycy5ub3JtYWxpemUoKS50b0pTT04oKSxcbiAgICAgIGJvZHk6IGRhdGEsXG4gICAgICBkdXBsZXg6IFwiaGFsZlwiLFxuICAgICAgY3JlZGVudGlhbHM6IGlzQ3JlZGVudGlhbHNTdXBwb3J0ZWQgPyB3aXRoQ3JlZGVudGlhbHMgOiB1bmRlZmluZWRcbiAgICB9KTtcblxuICAgIGxldCByZXNwb25zZSA9IGF3YWl0IGZldGNoKHJlcXVlc3QpO1xuXG4gICAgY29uc3QgaXNTdHJlYW1SZXNwb25zZSA9IHN1cHBvcnRzUmVzcG9uc2VTdHJlYW0gJiYgKHJlc3BvbnNlVHlwZSA9PT0gJ3N0cmVhbScgfHwgcmVzcG9uc2VUeXBlID09PSAncmVzcG9uc2UnKTtcblxuICAgIGlmIChzdXBwb3J0c1Jlc3BvbnNlU3RyZWFtICYmIChvbkRvd25sb2FkUHJvZ3Jlc3MgfHwgKGlzU3RyZWFtUmVzcG9uc2UgJiYgdW5zdWJzY3JpYmUpKSkge1xuICAgICAgY29uc3Qgb3B0aW9ucyA9IHt9O1xuXG4gICAgICBbJ3N0YXR1cycsICdzdGF0dXNUZXh0JywgJ2hlYWRlcnMnXS5mb3JFYWNoKHByb3AgPT4ge1xuICAgICAgICBvcHRpb25zW3Byb3BdID0gcmVzcG9uc2VbcHJvcF07XG4gICAgICB9KTtcblxuICAgICAgY29uc3QgcmVzcG9uc2VDb250ZW50TGVuZ3RoID0gdXRpbHMudG9GaW5pdGVOdW1iZXIocmVzcG9uc2UuaGVhZGVycy5nZXQoJ2NvbnRlbnQtbGVuZ3RoJykpO1xuXG4gICAgICBjb25zdCBbb25Qcm9ncmVzcywgZmx1c2hdID0gb25Eb3dubG9hZFByb2dyZXNzICYmIHByb2dyZXNzRXZlbnREZWNvcmF0b3IoXG4gICAgICAgIHJlc3BvbnNlQ29udGVudExlbmd0aCxcbiAgICAgICAgcHJvZ3Jlc3NFdmVudFJlZHVjZXIoYXN5bmNEZWNvcmF0b3Iob25Eb3dubG9hZFByb2dyZXNzKSwgdHJ1ZSlcbiAgICAgICkgfHwgW107XG5cbiAgICAgIHJlc3BvbnNlID0gbmV3IFJlc3BvbnNlKFxuICAgICAgICB0cmFja1N0cmVhbShyZXNwb25zZS5ib2R5LCBERUZBVUxUX0NIVU5LX1NJWkUsIG9uUHJvZ3Jlc3MsICgpID0+IHtcbiAgICAgICAgICBmbHVzaCAmJiBmbHVzaCgpO1xuICAgICAgICAgIHVuc3Vic2NyaWJlICYmIHVuc3Vic2NyaWJlKCk7XG4gICAgICAgIH0pLFxuICAgICAgICBvcHRpb25zXG4gICAgICApO1xuICAgIH1cblxuICAgIHJlc3BvbnNlVHlwZSA9IHJlc3BvbnNlVHlwZSB8fCAndGV4dCc7XG5cbiAgICBsZXQgcmVzcG9uc2VEYXRhID0gYXdhaXQgcmVzb2x2ZXJzW3V0aWxzLmZpbmRLZXkocmVzb2x2ZXJzLCByZXNwb25zZVR5cGUpIHx8ICd0ZXh0J10ocmVzcG9uc2UsIGNvbmZpZyk7XG5cbiAgICAhaXNTdHJlYW1SZXNwb25zZSAmJiB1bnN1YnNjcmliZSAmJiB1bnN1YnNjcmliZSgpO1xuXG4gICAgcmV0dXJuIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIHNldHRsZShyZXNvbHZlLCByZWplY3QsIHtcbiAgICAgICAgZGF0YTogcmVzcG9uc2VEYXRhLFxuICAgICAgICBoZWFkZXJzOiBBeGlvc0hlYWRlcnMuZnJvbShyZXNwb25zZS5oZWFkZXJzKSxcbiAgICAgICAgc3RhdHVzOiByZXNwb25zZS5zdGF0dXMsXG4gICAgICAgIHN0YXR1c1RleHQ6IHJlc3BvbnNlLnN0YXR1c1RleHQsXG4gICAgICAgIGNvbmZpZyxcbiAgICAgICAgcmVxdWVzdFxuICAgICAgfSlcbiAgICB9KVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICB1bnN1YnNjcmliZSAmJiB1bnN1YnNjcmliZSgpO1xuXG4gICAgaWYgKGVyciAmJiBlcnIubmFtZSA9PT0gJ1R5cGVFcnJvcicgJiYgL2ZldGNoL2kudGVzdChlcnIubWVzc2FnZSkpIHtcbiAgICAgIHRocm93IE9iamVjdC5hc3NpZ24oXG4gICAgICAgIG5ldyBBeGlvc0Vycm9yKCdOZXR3b3JrIEVycm9yJywgQXhpb3NFcnJvci5FUlJfTkVUV09SSywgY29uZmlnLCByZXF1ZXN0KSxcbiAgICAgICAge1xuICAgICAgICAgIGNhdXNlOiBlcnIuY2F1c2UgfHwgZXJyXG4gICAgICAgIH1cbiAgICAgIClcbiAgICB9XG5cbiAgICB0aHJvdyBBeGlvc0Vycm9yLmZyb20oZXJyLCBlcnIgJiYgZXJyLmNvZGUsIGNvbmZpZywgcmVxdWVzdCk7XG4gIH1cbn0pO1xuXG5cbiIsICJpbXBvcnQgdXRpbHMgZnJvbSAnLi4vdXRpbHMuanMnO1xuaW1wb3J0IGh0dHBBZGFwdGVyIGZyb20gJy4vaHR0cC5qcyc7XG5pbXBvcnQgeGhyQWRhcHRlciBmcm9tICcuL3hoci5qcyc7XG5pbXBvcnQgZmV0Y2hBZGFwdGVyIGZyb20gJy4vZmV0Y2guanMnO1xuaW1wb3J0IEF4aW9zRXJyb3IgZnJvbSBcIi4uL2NvcmUvQXhpb3NFcnJvci5qc1wiO1xuXG5jb25zdCBrbm93bkFkYXB0ZXJzID0ge1xuICBodHRwOiBodHRwQWRhcHRlcixcbiAgeGhyOiB4aHJBZGFwdGVyLFxuICBmZXRjaDogZmV0Y2hBZGFwdGVyXG59XG5cbnV0aWxzLmZvckVhY2goa25vd25BZGFwdGVycywgKGZuLCB2YWx1ZSkgPT4ge1xuICBpZiAoZm4pIHtcbiAgICB0cnkge1xuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGZuLCAnbmFtZScsIHt2YWx1ZX0pO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1lbXB0eVxuICAgIH1cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZm4sICdhZGFwdGVyTmFtZScsIHt2YWx1ZX0pO1xuICB9XG59KTtcblxuY29uc3QgcmVuZGVyUmVhc29uID0gKHJlYXNvbikgPT4gYC0gJHtyZWFzb259YDtcblxuY29uc3QgaXNSZXNvbHZlZEhhbmRsZSA9IChhZGFwdGVyKSA9PiB1dGlscy5pc0Z1bmN0aW9uKGFkYXB0ZXIpIHx8IGFkYXB0ZXIgPT09IG51bGwgfHwgYWRhcHRlciA9PT0gZmFsc2U7XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgZ2V0QWRhcHRlcjogKGFkYXB0ZXJzKSA9PiB7XG4gICAgYWRhcHRlcnMgPSB1dGlscy5pc0FycmF5KGFkYXB0ZXJzKSA/IGFkYXB0ZXJzIDogW2FkYXB0ZXJzXTtcblxuICAgIGNvbnN0IHtsZW5ndGh9ID0gYWRhcHRlcnM7XG4gICAgbGV0IG5hbWVPckFkYXB0ZXI7XG4gICAgbGV0IGFkYXB0ZXI7XG5cbiAgICBjb25zdCByZWplY3RlZFJlYXNvbnMgPSB7fTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgIG5hbWVPckFkYXB0ZXIgPSBhZGFwdGVyc1tpXTtcbiAgICAgIGxldCBpZDtcblxuICAgICAgYWRhcHRlciA9IG5hbWVPckFkYXB0ZXI7XG5cbiAgICAgIGlmICghaXNSZXNvbHZlZEhhbmRsZShuYW1lT3JBZGFwdGVyKSkge1xuICAgICAgICBhZGFwdGVyID0ga25vd25BZGFwdGVyc1soaWQgPSBTdHJpbmcobmFtZU9yQWRhcHRlcikpLnRvTG93ZXJDYXNlKCldO1xuXG4gICAgICAgIGlmIChhZGFwdGVyID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgQXhpb3NFcnJvcihgVW5rbm93biBhZGFwdGVyICcke2lkfSdgKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoYWRhcHRlcikge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgcmVqZWN0ZWRSZWFzb25zW2lkIHx8ICcjJyArIGldID0gYWRhcHRlcjtcbiAgICB9XG5cbiAgICBpZiAoIWFkYXB0ZXIpIHtcblxuICAgICAgY29uc3QgcmVhc29ucyA9IE9iamVjdC5lbnRyaWVzKHJlamVjdGVkUmVhc29ucylcbiAgICAgICAgLm1hcCgoW2lkLCBzdGF0ZV0pID0+IGBhZGFwdGVyICR7aWR9IGAgK1xuICAgICAgICAgIChzdGF0ZSA9PT0gZmFsc2UgPyAnaXMgbm90IHN1cHBvcnRlZCBieSB0aGUgZW52aXJvbm1lbnQnIDogJ2lzIG5vdCBhdmFpbGFibGUgaW4gdGhlIGJ1aWxkJylcbiAgICAgICAgKTtcblxuICAgICAgbGV0IHMgPSBsZW5ndGggP1xuICAgICAgICAocmVhc29ucy5sZW5ndGggPiAxID8gJ3NpbmNlIDpcXG4nICsgcmVhc29ucy5tYXAocmVuZGVyUmVhc29uKS5qb2luKCdcXG4nKSA6ICcgJyArIHJlbmRlclJlYXNvbihyZWFzb25zWzBdKSkgOlxuICAgICAgICAnYXMgbm8gYWRhcHRlciBzcGVjaWZpZWQnO1xuXG4gICAgICB0aHJvdyBuZXcgQXhpb3NFcnJvcihcbiAgICAgICAgYFRoZXJlIGlzIG5vIHN1aXRhYmxlIGFkYXB0ZXIgdG8gZGlzcGF0Y2ggdGhlIHJlcXVlc3QgYCArIHMsXG4gICAgICAgICdFUlJfTk9UX1NVUFBPUlQnXG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiBhZGFwdGVyO1xuICB9LFxuICBhZGFwdGVyczoga25vd25BZGFwdGVyc1xufVxuIiwgIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IHRyYW5zZm9ybURhdGEgZnJvbSAnLi90cmFuc2Zvcm1EYXRhLmpzJztcbmltcG9ydCBpc0NhbmNlbCBmcm9tICcuLi9jYW5jZWwvaXNDYW5jZWwuanMnO1xuaW1wb3J0IGRlZmF1bHRzIGZyb20gJy4uL2RlZmF1bHRzL2luZGV4LmpzJztcbmltcG9ydCBDYW5jZWxlZEVycm9yIGZyb20gJy4uL2NhbmNlbC9DYW5jZWxlZEVycm9yLmpzJztcbmltcG9ydCBBeGlvc0hlYWRlcnMgZnJvbSAnLi4vY29yZS9BeGlvc0hlYWRlcnMuanMnO1xuaW1wb3J0IGFkYXB0ZXJzIGZyb20gXCIuLi9hZGFwdGVycy9hZGFwdGVycy5qc1wiO1xuXG4vKipcbiAqIFRocm93cyBhIGBDYW5jZWxlZEVycm9yYCBpZiBjYW5jZWxsYXRpb24gaGFzIGJlZW4gcmVxdWVzdGVkLlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBjb25maWcgVGhlIGNvbmZpZyB0aGF0IGlzIHRvIGJlIHVzZWQgZm9yIHRoZSByZXF1ZXN0XG4gKlxuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmZ1bmN0aW9uIHRocm93SWZDYW5jZWxsYXRpb25SZXF1ZXN0ZWQoY29uZmlnKSB7XG4gIGlmIChjb25maWcuY2FuY2VsVG9rZW4pIHtcbiAgICBjb25maWcuY2FuY2VsVG9rZW4udGhyb3dJZlJlcXVlc3RlZCgpO1xuICB9XG5cbiAgaWYgKGNvbmZpZy5zaWduYWwgJiYgY29uZmlnLnNpZ25hbC5hYm9ydGVkKSB7XG4gICAgdGhyb3cgbmV3IENhbmNlbGVkRXJyb3IobnVsbCwgY29uZmlnKTtcbiAgfVxufVxuXG4vKipcbiAqIERpc3BhdGNoIGEgcmVxdWVzdCB0byB0aGUgc2VydmVyIHVzaW5nIHRoZSBjb25maWd1cmVkIGFkYXB0ZXIuXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IGNvbmZpZyBUaGUgY29uZmlnIHRoYXQgaXMgdG8gYmUgdXNlZCBmb3IgdGhlIHJlcXVlc3RcbiAqXG4gKiBAcmV0dXJucyB7UHJvbWlzZX0gVGhlIFByb21pc2UgdG8gYmUgZnVsZmlsbGVkXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGRpc3BhdGNoUmVxdWVzdChjb25maWcpIHtcbiAgdGhyb3dJZkNhbmNlbGxhdGlvblJlcXVlc3RlZChjb25maWcpO1xuXG4gIGNvbmZpZy5oZWFkZXJzID0gQXhpb3NIZWFkZXJzLmZyb20oY29uZmlnLmhlYWRlcnMpO1xuXG4gIC8vIFRyYW5zZm9ybSByZXF1ZXN0IGRhdGFcbiAgY29uZmlnLmRhdGEgPSB0cmFuc2Zvcm1EYXRhLmNhbGwoXG4gICAgY29uZmlnLFxuICAgIGNvbmZpZy50cmFuc2Zvcm1SZXF1ZXN0XG4gICk7XG5cbiAgaWYgKFsncG9zdCcsICdwdXQnLCAncGF0Y2gnXS5pbmRleE9mKGNvbmZpZy5tZXRob2QpICE9PSAtMSkge1xuICAgIGNvbmZpZy5oZWFkZXJzLnNldENvbnRlbnRUeXBlKCdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnLCBmYWxzZSk7XG4gIH1cblxuICBjb25zdCBhZGFwdGVyID0gYWRhcHRlcnMuZ2V0QWRhcHRlcihjb25maWcuYWRhcHRlciB8fCBkZWZhdWx0cy5hZGFwdGVyKTtcblxuICByZXR1cm4gYWRhcHRlcihjb25maWcpLnRoZW4oZnVuY3Rpb24gb25BZGFwdGVyUmVzb2x1dGlvbihyZXNwb25zZSkge1xuICAgIHRocm93SWZDYW5jZWxsYXRpb25SZXF1ZXN0ZWQoY29uZmlnKTtcblxuICAgIC8vIFRyYW5zZm9ybSByZXNwb25zZSBkYXRhXG4gICAgcmVzcG9uc2UuZGF0YSA9IHRyYW5zZm9ybURhdGEuY2FsbChcbiAgICAgIGNvbmZpZyxcbiAgICAgIGNvbmZpZy50cmFuc2Zvcm1SZXNwb25zZSxcbiAgICAgIHJlc3BvbnNlXG4gICAgKTtcblxuICAgIHJlc3BvbnNlLmhlYWRlcnMgPSBBeGlvc0hlYWRlcnMuZnJvbShyZXNwb25zZS5oZWFkZXJzKTtcblxuICAgIHJldHVybiByZXNwb25zZTtcbiAgfSwgZnVuY3Rpb24gb25BZGFwdGVyUmVqZWN0aW9uKHJlYXNvbikge1xuICAgIGlmICghaXNDYW5jZWwocmVhc29uKSkge1xuICAgICAgdGhyb3dJZkNhbmNlbGxhdGlvblJlcXVlc3RlZChjb25maWcpO1xuXG4gICAgICAvLyBUcmFuc2Zvcm0gcmVzcG9uc2UgZGF0YVxuICAgICAgaWYgKHJlYXNvbiAmJiByZWFzb24ucmVzcG9uc2UpIHtcbiAgICAgICAgcmVhc29uLnJlc3BvbnNlLmRhdGEgPSB0cmFuc2Zvcm1EYXRhLmNhbGwoXG4gICAgICAgICAgY29uZmlnLFxuICAgICAgICAgIGNvbmZpZy50cmFuc2Zvcm1SZXNwb25zZSxcbiAgICAgICAgICByZWFzb24ucmVzcG9uc2VcbiAgICAgICAgKTtcbiAgICAgICAgcmVhc29uLnJlc3BvbnNlLmhlYWRlcnMgPSBBeGlvc0hlYWRlcnMuZnJvbShyZWFzb24ucmVzcG9uc2UuaGVhZGVycyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIFByb21pc2UucmVqZWN0KHJlYXNvbik7XG4gIH0pO1xufVxuIiwgIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IHtWRVJTSU9OfSBmcm9tICcuLi9lbnYvZGF0YS5qcyc7XG5pbXBvcnQgQXhpb3NFcnJvciBmcm9tICcuLi9jb3JlL0F4aW9zRXJyb3IuanMnO1xuXG5jb25zdCB2YWxpZGF0b3JzID0ge307XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzXG5bJ29iamVjdCcsICdib29sZWFuJywgJ251bWJlcicsICdmdW5jdGlvbicsICdzdHJpbmcnLCAnc3ltYm9sJ10uZm9yRWFjaCgodHlwZSwgaSkgPT4ge1xuICB2YWxpZGF0b3JzW3R5cGVdID0gZnVuY3Rpb24gdmFsaWRhdG9yKHRoaW5nKSB7XG4gICAgcmV0dXJuIHR5cGVvZiB0aGluZyA9PT0gdHlwZSB8fCAnYScgKyAoaSA8IDEgPyAnbiAnIDogJyAnKSArIHR5cGU7XG4gIH07XG59KTtcblxuY29uc3QgZGVwcmVjYXRlZFdhcm5pbmdzID0ge307XG5cbi8qKlxuICogVHJhbnNpdGlvbmFsIG9wdGlvbiB2YWxpZGF0b3JcbiAqXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufGJvb2xlYW4/fSB2YWxpZGF0b3IgLSBzZXQgdG8gZmFsc2UgaWYgdGhlIHRyYW5zaXRpb25hbCBvcHRpb24gaGFzIGJlZW4gcmVtb3ZlZFxuICogQHBhcmFtIHtzdHJpbmc/fSB2ZXJzaW9uIC0gZGVwcmVjYXRlZCB2ZXJzaW9uIC8gcmVtb3ZlZCBzaW5jZSB2ZXJzaW9uXG4gKiBAcGFyYW0ge3N0cmluZz99IG1lc3NhZ2UgLSBzb21lIG1lc3NhZ2Ugd2l0aCBhZGRpdGlvbmFsIGluZm9cbiAqXG4gKiBAcmV0dXJucyB7ZnVuY3Rpb259XG4gKi9cbnZhbGlkYXRvcnMudHJhbnNpdGlvbmFsID0gZnVuY3Rpb24gdHJhbnNpdGlvbmFsKHZhbGlkYXRvciwgdmVyc2lvbiwgbWVzc2FnZSkge1xuICBmdW5jdGlvbiBmb3JtYXRNZXNzYWdlKG9wdCwgZGVzYykge1xuICAgIHJldHVybiAnW0F4aW9zIHYnICsgVkVSU0lPTiArICddIFRyYW5zaXRpb25hbCBvcHRpb24gXFwnJyArIG9wdCArICdcXCcnICsgZGVzYyArIChtZXNzYWdlID8gJy4gJyArIG1lc3NhZ2UgOiAnJyk7XG4gIH1cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZnVuYy1uYW1lc1xuICByZXR1cm4gKHZhbHVlLCBvcHQsIG9wdHMpID0+IHtcbiAgICBpZiAodmFsaWRhdG9yID09PSBmYWxzZSkge1xuICAgICAgdGhyb3cgbmV3IEF4aW9zRXJyb3IoXG4gICAgICAgIGZvcm1hdE1lc3NhZ2Uob3B0LCAnIGhhcyBiZWVuIHJlbW92ZWQnICsgKHZlcnNpb24gPyAnIGluICcgKyB2ZXJzaW9uIDogJycpKSxcbiAgICAgICAgQXhpb3NFcnJvci5FUlJfREVQUkVDQVRFRFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAodmVyc2lvbiAmJiAhZGVwcmVjYXRlZFdhcm5pbmdzW29wdF0pIHtcbiAgICAgIGRlcHJlY2F0ZWRXYXJuaW5nc1tvcHRdID0gdHJ1ZTtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICBjb25zb2xlLndhcm4oXG4gICAgICAgIGZvcm1hdE1lc3NhZ2UoXG4gICAgICAgICAgb3B0LFxuICAgICAgICAgICcgaGFzIGJlZW4gZGVwcmVjYXRlZCBzaW5jZSB2JyArIHZlcnNpb24gKyAnIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIG5lYXIgZnV0dXJlJ1xuICAgICAgICApXG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiB2YWxpZGF0b3IgPyB2YWxpZGF0b3IodmFsdWUsIG9wdCwgb3B0cykgOiB0cnVlO1xuICB9O1xufTtcblxudmFsaWRhdG9ycy5zcGVsbGluZyA9IGZ1bmN0aW9uIHNwZWxsaW5nKGNvcnJlY3RTcGVsbGluZykge1xuICByZXR1cm4gKHZhbHVlLCBvcHQpID0+IHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgIGNvbnNvbGUud2FybihgJHtvcHR9IGlzIGxpa2VseSBhIG1pc3NwZWxsaW5nIG9mICR7Y29ycmVjdFNwZWxsaW5nfWApO1xuICAgIHJldHVybiB0cnVlO1xuICB9XG59O1xuXG4vKipcbiAqIEFzc2VydCBvYmplY3QncyBwcm9wZXJ0aWVzIHR5cGVcbiAqXG4gKiBAcGFyYW0ge29iamVjdH0gb3B0aW9uc1xuICogQHBhcmFtIHtvYmplY3R9IHNjaGVtYVxuICogQHBhcmFtIHtib29sZWFuP30gYWxsb3dVbmtub3duXG4gKlxuICogQHJldHVybnMge29iamVjdH1cbiAqL1xuXG5mdW5jdGlvbiBhc3NlcnRPcHRpb25zKG9wdGlvbnMsIHNjaGVtYSwgYWxsb3dVbmtub3duKSB7XG4gIGlmICh0eXBlb2Ygb3B0aW9ucyAhPT0gJ29iamVjdCcpIHtcbiAgICB0aHJvdyBuZXcgQXhpb3NFcnJvcignb3B0aW9ucyBtdXN0IGJlIGFuIG9iamVjdCcsIEF4aW9zRXJyb3IuRVJSX0JBRF9PUFRJT05fVkFMVUUpO1xuICB9XG4gIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhvcHRpb25zKTtcbiAgbGV0IGkgPSBrZXlzLmxlbmd0aDtcbiAgd2hpbGUgKGktLSA+IDApIHtcbiAgICBjb25zdCBvcHQgPSBrZXlzW2ldO1xuICAgIGNvbnN0IHZhbGlkYXRvciA9IHNjaGVtYVtvcHRdO1xuICAgIGlmICh2YWxpZGF0b3IpIHtcbiAgICAgIGNvbnN0IHZhbHVlID0gb3B0aW9uc1tvcHRdO1xuICAgICAgY29uc3QgcmVzdWx0ID0gdmFsdWUgPT09IHVuZGVmaW5lZCB8fCB2YWxpZGF0b3IodmFsdWUsIG9wdCwgb3B0aW9ucyk7XG4gICAgICBpZiAocmVzdWx0ICE9PSB0cnVlKSB7XG4gICAgICAgIHRocm93IG5ldyBBeGlvc0Vycm9yKCdvcHRpb24gJyArIG9wdCArICcgbXVzdCBiZSAnICsgcmVzdWx0LCBBeGlvc0Vycm9yLkVSUl9CQURfT1BUSU9OX1ZBTFVFKTtcbiAgICAgIH1cbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBpZiAoYWxsb3dVbmtub3duICE9PSB0cnVlKSB7XG4gICAgICB0aHJvdyBuZXcgQXhpb3NFcnJvcignVW5rbm93biBvcHRpb24gJyArIG9wdCwgQXhpb3NFcnJvci5FUlJfQkFEX09QVElPTik7XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgYXNzZXJ0T3B0aW9ucyxcbiAgdmFsaWRhdG9yc1xufTtcbiIsICIndXNlIHN0cmljdCc7XG5cbmltcG9ydCB1dGlscyBmcm9tICcuLy4uL3V0aWxzLmpzJztcbmltcG9ydCBidWlsZFVSTCBmcm9tICcuLi9oZWxwZXJzL2J1aWxkVVJMLmpzJztcbmltcG9ydCBJbnRlcmNlcHRvck1hbmFnZXIgZnJvbSAnLi9JbnRlcmNlcHRvck1hbmFnZXIuanMnO1xuaW1wb3J0IGRpc3BhdGNoUmVxdWVzdCBmcm9tICcuL2Rpc3BhdGNoUmVxdWVzdC5qcyc7XG5pbXBvcnQgbWVyZ2VDb25maWcgZnJvbSAnLi9tZXJnZUNvbmZpZy5qcyc7XG5pbXBvcnQgYnVpbGRGdWxsUGF0aCBmcm9tICcuL2J1aWxkRnVsbFBhdGguanMnO1xuaW1wb3J0IHZhbGlkYXRvciBmcm9tICcuLi9oZWxwZXJzL3ZhbGlkYXRvci5qcyc7XG5pbXBvcnQgQXhpb3NIZWFkZXJzIGZyb20gJy4vQXhpb3NIZWFkZXJzLmpzJztcblxuY29uc3QgdmFsaWRhdG9ycyA9IHZhbGlkYXRvci52YWxpZGF0b3JzO1xuXG4vKipcbiAqIENyZWF0ZSBhIG5ldyBpbnN0YW5jZSBvZiBBeGlvc1xuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBpbnN0YW5jZUNvbmZpZyBUaGUgZGVmYXVsdCBjb25maWcgZm9yIHRoZSBpbnN0YW5jZVxuICpcbiAqIEByZXR1cm4ge0F4aW9zfSBBIG5ldyBpbnN0YW5jZSBvZiBBeGlvc1xuICovXG5jbGFzcyBBeGlvcyB7XG4gIGNvbnN0cnVjdG9yKGluc3RhbmNlQ29uZmlnKSB7XG4gICAgdGhpcy5kZWZhdWx0cyA9IGluc3RhbmNlQ29uZmlnO1xuICAgIHRoaXMuaW50ZXJjZXB0b3JzID0ge1xuICAgICAgcmVxdWVzdDogbmV3IEludGVyY2VwdG9yTWFuYWdlcigpLFxuICAgICAgcmVzcG9uc2U6IG5ldyBJbnRlcmNlcHRvck1hbmFnZXIoKVxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogRGlzcGF0Y2ggYSByZXF1ZXN0XG4gICAqXG4gICAqIEBwYXJhbSB7U3RyaW5nfE9iamVjdH0gY29uZmlnT3JVcmwgVGhlIGNvbmZpZyBzcGVjaWZpYyBmb3IgdGhpcyByZXF1ZXN0IChtZXJnZWQgd2l0aCB0aGlzLmRlZmF1bHRzKVxuICAgKiBAcGFyYW0gez9PYmplY3R9IGNvbmZpZ1xuICAgKlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZX0gVGhlIFByb21pc2UgdG8gYmUgZnVsZmlsbGVkXG4gICAqL1xuICBhc3luYyByZXF1ZXN0KGNvbmZpZ09yVXJsLCBjb25maWcpIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuX3JlcXVlc3QoY29uZmlnT3JVcmwsIGNvbmZpZyk7XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBpZiAoZXJyIGluc3RhbmNlb2YgRXJyb3IpIHtcbiAgICAgICAgbGV0IGR1bW15ID0ge307XG5cbiAgICAgICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UgPyBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZShkdW1teSkgOiAoZHVtbXkgPSBuZXcgRXJyb3IoKSk7XG5cbiAgICAgICAgLy8gc2xpY2Ugb2ZmIHRoZSBFcnJvcjogLi4uIGxpbmVcbiAgICAgICAgY29uc3Qgc3RhY2sgPSBkdW1teS5zdGFjayA/IGR1bW15LnN0YWNrLnJlcGxhY2UoL14uK1xcbi8sICcnKSA6ICcnO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGlmICghZXJyLnN0YWNrKSB7XG4gICAgICAgICAgICBlcnIuc3RhY2sgPSBzdGFjaztcbiAgICAgICAgICAgIC8vIG1hdGNoIHdpdGhvdXQgdGhlIDIgdG9wIHN0YWNrIGxpbmVzXG4gICAgICAgICAgfSBlbHNlIGlmIChzdGFjayAmJiAhU3RyaW5nKGVyci5zdGFjaykuZW5kc1dpdGgoc3RhY2sucmVwbGFjZSgvXi4rXFxuLitcXG4vLCAnJykpKSB7XG4gICAgICAgICAgICBlcnIuc3RhY2sgKz0gJ1xcbicgKyBzdGFja1xuICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgIC8vIGlnbm9yZSB0aGUgY2FzZSB3aGVyZSBcInN0YWNrXCIgaXMgYW4gdW4td3JpdGFibGUgcHJvcGVydHlcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB0aHJvdyBlcnI7XG4gICAgfVxuICB9XG5cbiAgX3JlcXVlc3QoY29uZmlnT3JVcmwsIGNvbmZpZykge1xuICAgIC8qZXNsaW50IG5vLXBhcmFtLXJlYXNzaWduOjAqL1xuICAgIC8vIEFsbG93IGZvciBheGlvcygnZXhhbXBsZS91cmwnWywgY29uZmlnXSkgYSBsYSBmZXRjaCBBUElcbiAgICBpZiAodHlwZW9mIGNvbmZpZ09yVXJsID09PSAnc3RyaW5nJykge1xuICAgICAgY29uZmlnID0gY29uZmlnIHx8IHt9O1xuICAgICAgY29uZmlnLnVybCA9IGNvbmZpZ09yVXJsO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25maWcgPSBjb25maWdPclVybCB8fCB7fTtcbiAgICB9XG5cbiAgICBjb25maWcgPSBtZXJnZUNvbmZpZyh0aGlzLmRlZmF1bHRzLCBjb25maWcpO1xuXG4gICAgY29uc3Qge3RyYW5zaXRpb25hbCwgcGFyYW1zU2VyaWFsaXplciwgaGVhZGVyc30gPSBjb25maWc7XG5cbiAgICBpZiAodHJhbnNpdGlvbmFsICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHZhbGlkYXRvci5hc3NlcnRPcHRpb25zKHRyYW5zaXRpb25hbCwge1xuICAgICAgICBzaWxlbnRKU09OUGFyc2luZzogdmFsaWRhdG9ycy50cmFuc2l0aW9uYWwodmFsaWRhdG9ycy5ib29sZWFuKSxcbiAgICAgICAgZm9yY2VkSlNPTlBhcnNpbmc6IHZhbGlkYXRvcnMudHJhbnNpdGlvbmFsKHZhbGlkYXRvcnMuYm9vbGVhbiksXG4gICAgICAgIGNsYXJpZnlUaW1lb3V0RXJyb3I6IHZhbGlkYXRvcnMudHJhbnNpdGlvbmFsKHZhbGlkYXRvcnMuYm9vbGVhbilcbiAgICAgIH0sIGZhbHNlKTtcbiAgICB9XG5cbiAgICBpZiAocGFyYW1zU2VyaWFsaXplciAhPSBudWxsKSB7XG4gICAgICBpZiAodXRpbHMuaXNGdW5jdGlvbihwYXJhbXNTZXJpYWxpemVyKSkge1xuICAgICAgICBjb25maWcucGFyYW1zU2VyaWFsaXplciA9IHtcbiAgICAgICAgICBzZXJpYWxpemU6IHBhcmFtc1NlcmlhbGl6ZXJcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdmFsaWRhdG9yLmFzc2VydE9wdGlvbnMocGFyYW1zU2VyaWFsaXplciwge1xuICAgICAgICAgIGVuY29kZTogdmFsaWRhdG9ycy5mdW5jdGlvbixcbiAgICAgICAgICBzZXJpYWxpemU6IHZhbGlkYXRvcnMuZnVuY3Rpb25cbiAgICAgICAgfSwgdHJ1ZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gU2V0IGNvbmZpZy5hbGxvd0Fic29sdXRlVXJsc1xuICAgIGlmIChjb25maWcuYWxsb3dBYnNvbHV0ZVVybHMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gZG8gbm90aGluZ1xuICAgIH0gZWxzZSBpZiAodGhpcy5kZWZhdWx0cy5hbGxvd0Fic29sdXRlVXJscyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb25maWcuYWxsb3dBYnNvbHV0ZVVybHMgPSB0aGlzLmRlZmF1bHRzLmFsbG93QWJzb2x1dGVVcmxzO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25maWcuYWxsb3dBYnNvbHV0ZVVybHMgPSB0cnVlO1xuICAgIH1cblxuICAgIHZhbGlkYXRvci5hc3NlcnRPcHRpb25zKGNvbmZpZywge1xuICAgICAgYmFzZVVybDogdmFsaWRhdG9ycy5zcGVsbGluZygnYmFzZVVSTCcpLFxuICAgICAgd2l0aFhzcmZUb2tlbjogdmFsaWRhdG9ycy5zcGVsbGluZygnd2l0aFhTUkZUb2tlbicpXG4gICAgfSwgdHJ1ZSk7XG5cbiAgICAvLyBTZXQgY29uZmlnLm1ldGhvZFxuICAgIGNvbmZpZy5tZXRob2QgPSAoY29uZmlnLm1ldGhvZCB8fCB0aGlzLmRlZmF1bHRzLm1ldGhvZCB8fCAnZ2V0JykudG9Mb3dlckNhc2UoKTtcblxuICAgIC8vIEZsYXR0ZW4gaGVhZGVyc1xuICAgIGxldCBjb250ZXh0SGVhZGVycyA9IGhlYWRlcnMgJiYgdXRpbHMubWVyZ2UoXG4gICAgICBoZWFkZXJzLmNvbW1vbixcbiAgICAgIGhlYWRlcnNbY29uZmlnLm1ldGhvZF1cbiAgICApO1xuXG4gICAgaGVhZGVycyAmJiB1dGlscy5mb3JFYWNoKFxuICAgICAgWydkZWxldGUnLCAnZ2V0JywgJ2hlYWQnLCAncG9zdCcsICdwdXQnLCAncGF0Y2gnLCAnY29tbW9uJ10sXG4gICAgICAobWV0aG9kKSA9PiB7XG4gICAgICAgIGRlbGV0ZSBoZWFkZXJzW21ldGhvZF07XG4gICAgICB9XG4gICAgKTtcblxuICAgIGNvbmZpZy5oZWFkZXJzID0gQXhpb3NIZWFkZXJzLmNvbmNhdChjb250ZXh0SGVhZGVycywgaGVhZGVycyk7XG5cbiAgICAvLyBmaWx0ZXIgb3V0IHNraXBwZWQgaW50ZXJjZXB0b3JzXG4gICAgY29uc3QgcmVxdWVzdEludGVyY2VwdG9yQ2hhaW4gPSBbXTtcbiAgICBsZXQgc3luY2hyb25vdXNSZXF1ZXN0SW50ZXJjZXB0b3JzID0gdHJ1ZTtcbiAgICB0aGlzLmludGVyY2VwdG9ycy5yZXF1ZXN0LmZvckVhY2goZnVuY3Rpb24gdW5zaGlmdFJlcXVlc3RJbnRlcmNlcHRvcnMoaW50ZXJjZXB0b3IpIHtcbiAgICAgIGlmICh0eXBlb2YgaW50ZXJjZXB0b3IucnVuV2hlbiA9PT0gJ2Z1bmN0aW9uJyAmJiBpbnRlcmNlcHRvci5ydW5XaGVuKGNvbmZpZykgPT09IGZhbHNlKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgc3luY2hyb25vdXNSZXF1ZXN0SW50ZXJjZXB0b3JzID0gc3luY2hyb25vdXNSZXF1ZXN0SW50ZXJjZXB0b3JzICYmIGludGVyY2VwdG9yLnN5bmNocm9ub3VzO1xuXG4gICAgICByZXF1ZXN0SW50ZXJjZXB0b3JDaGFpbi51bnNoaWZ0KGludGVyY2VwdG9yLmZ1bGZpbGxlZCwgaW50ZXJjZXB0b3IucmVqZWN0ZWQpO1xuICAgIH0pO1xuXG4gICAgY29uc3QgcmVzcG9uc2VJbnRlcmNlcHRvckNoYWluID0gW107XG4gICAgdGhpcy5pbnRlcmNlcHRvcnMucmVzcG9uc2UuZm9yRWFjaChmdW5jdGlvbiBwdXNoUmVzcG9uc2VJbnRlcmNlcHRvcnMoaW50ZXJjZXB0b3IpIHtcbiAgICAgIHJlc3BvbnNlSW50ZXJjZXB0b3JDaGFpbi5wdXNoKGludGVyY2VwdG9yLmZ1bGZpbGxlZCwgaW50ZXJjZXB0b3IucmVqZWN0ZWQpO1xuICAgIH0pO1xuXG4gICAgbGV0IHByb21pc2U7XG4gICAgbGV0IGkgPSAwO1xuICAgIGxldCBsZW47XG5cbiAgICBpZiAoIXN5bmNocm9ub3VzUmVxdWVzdEludGVyY2VwdG9ycykge1xuICAgICAgY29uc3QgY2hhaW4gPSBbZGlzcGF0Y2hSZXF1ZXN0LmJpbmQodGhpcyksIHVuZGVmaW5lZF07XG4gICAgICBjaGFpbi51bnNoaWZ0LmFwcGx5KGNoYWluLCByZXF1ZXN0SW50ZXJjZXB0b3JDaGFpbik7XG4gICAgICBjaGFpbi5wdXNoLmFwcGx5KGNoYWluLCByZXNwb25zZUludGVyY2VwdG9yQ2hhaW4pO1xuICAgICAgbGVuID0gY2hhaW4ubGVuZ3RoO1xuXG4gICAgICBwcm9taXNlID0gUHJvbWlzZS5yZXNvbHZlKGNvbmZpZyk7XG5cbiAgICAgIHdoaWxlIChpIDwgbGVuKSB7XG4gICAgICAgIHByb21pc2UgPSBwcm9taXNlLnRoZW4oY2hhaW5baSsrXSwgY2hhaW5baSsrXSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBwcm9taXNlO1xuICAgIH1cblxuICAgIGxlbiA9IHJlcXVlc3RJbnRlcmNlcHRvckNoYWluLmxlbmd0aDtcblxuICAgIGxldCBuZXdDb25maWcgPSBjb25maWc7XG5cbiAgICBpID0gMDtcblxuICAgIHdoaWxlIChpIDwgbGVuKSB7XG4gICAgICBjb25zdCBvbkZ1bGZpbGxlZCA9IHJlcXVlc3RJbnRlcmNlcHRvckNoYWluW2krK107XG4gICAgICBjb25zdCBvblJlamVjdGVkID0gcmVxdWVzdEludGVyY2VwdG9yQ2hhaW5baSsrXTtcbiAgICAgIHRyeSB7XG4gICAgICAgIG5ld0NvbmZpZyA9IG9uRnVsZmlsbGVkKG5ld0NvbmZpZyk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBvblJlamVjdGVkLmNhbGwodGhpcywgZXJyb3IpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgcHJvbWlzZSA9IGRpc3BhdGNoUmVxdWVzdC5jYWxsKHRoaXMsIG5ld0NvbmZpZyk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChlcnJvcik7XG4gICAgfVxuXG4gICAgaSA9IDA7XG4gICAgbGVuID0gcmVzcG9uc2VJbnRlcmNlcHRvckNoYWluLmxlbmd0aDtcblxuICAgIHdoaWxlIChpIDwgbGVuKSB7XG4gICAgICBwcm9taXNlID0gcHJvbWlzZS50aGVuKHJlc3BvbnNlSW50ZXJjZXB0b3JDaGFpbltpKytdLCByZXNwb25zZUludGVyY2VwdG9yQ2hhaW5baSsrXSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHByb21pc2U7XG4gIH1cblxuICBnZXRVcmkoY29uZmlnKSB7XG4gICAgY29uZmlnID0gbWVyZ2VDb25maWcodGhpcy5kZWZhdWx0cywgY29uZmlnKTtcbiAgICBjb25zdCBmdWxsUGF0aCA9IGJ1aWxkRnVsbFBhdGgoY29uZmlnLmJhc2VVUkwsIGNvbmZpZy51cmwsIGNvbmZpZy5hbGxvd0Fic29sdXRlVXJscyk7XG4gICAgcmV0dXJuIGJ1aWxkVVJMKGZ1bGxQYXRoLCBjb25maWcucGFyYW1zLCBjb25maWcucGFyYW1zU2VyaWFsaXplcik7XG4gIH1cbn1cblxuLy8gUHJvdmlkZSBhbGlhc2VzIGZvciBzdXBwb3J0ZWQgcmVxdWVzdCBtZXRob2RzXG51dGlscy5mb3JFYWNoKFsnZGVsZXRlJywgJ2dldCcsICdoZWFkJywgJ29wdGlvbnMnXSwgZnVuY3Rpb24gZm9yRWFjaE1ldGhvZE5vRGF0YShtZXRob2QpIHtcbiAgLyplc2xpbnQgZnVuYy1uYW1lczowKi9cbiAgQXhpb3MucHJvdG90eXBlW21ldGhvZF0gPSBmdW5jdGlvbih1cmwsIGNvbmZpZykge1xuICAgIHJldHVybiB0aGlzLnJlcXVlc3QobWVyZ2VDb25maWcoY29uZmlnIHx8IHt9LCB7XG4gICAgICBtZXRob2QsXG4gICAgICB1cmwsXG4gICAgICBkYXRhOiAoY29uZmlnIHx8IHt9KS5kYXRhXG4gICAgfSkpO1xuICB9O1xufSk7XG5cbnV0aWxzLmZvckVhY2goWydwb3N0JywgJ3B1dCcsICdwYXRjaCddLCBmdW5jdGlvbiBmb3JFYWNoTWV0aG9kV2l0aERhdGEobWV0aG9kKSB7XG4gIC8qZXNsaW50IGZ1bmMtbmFtZXM6MCovXG5cbiAgZnVuY3Rpb24gZ2VuZXJhdGVIVFRQTWV0aG9kKGlzRm9ybSkge1xuICAgIHJldHVybiBmdW5jdGlvbiBodHRwTWV0aG9kKHVybCwgZGF0YSwgY29uZmlnKSB7XG4gICAgICByZXR1cm4gdGhpcy5yZXF1ZXN0KG1lcmdlQ29uZmlnKGNvbmZpZyB8fCB7fSwge1xuICAgICAgICBtZXRob2QsXG4gICAgICAgIGhlYWRlcnM6IGlzRm9ybSA/IHtcbiAgICAgICAgICAnQ29udGVudC1UeXBlJzogJ211bHRpcGFydC9mb3JtLWRhdGEnXG4gICAgICAgIH0gOiB7fSxcbiAgICAgICAgdXJsLFxuICAgICAgICBkYXRhXG4gICAgICB9KSk7XG4gICAgfTtcbiAgfVxuXG4gIEF4aW9zLnByb3RvdHlwZVttZXRob2RdID0gZ2VuZXJhdGVIVFRQTWV0aG9kKCk7XG5cbiAgQXhpb3MucHJvdG90eXBlW21ldGhvZCArICdGb3JtJ10gPSBnZW5lcmF0ZUhUVFBNZXRob2QodHJ1ZSk7XG59KTtcblxuZXhwb3J0IGRlZmF1bHQgQXhpb3M7XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG5pbXBvcnQgQ2FuY2VsZWRFcnJvciBmcm9tICcuL0NhbmNlbGVkRXJyb3IuanMnO1xuXG4vKipcbiAqIEEgYENhbmNlbFRva2VuYCBpcyBhbiBvYmplY3QgdGhhdCBjYW4gYmUgdXNlZCB0byByZXF1ZXN0IGNhbmNlbGxhdGlvbiBvZiBhbiBvcGVyYXRpb24uXG4gKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gZXhlY3V0b3IgVGhlIGV4ZWN1dG9yIGZ1bmN0aW9uLlxuICpcbiAqIEByZXR1cm5zIHtDYW5jZWxUb2tlbn1cbiAqL1xuY2xhc3MgQ2FuY2VsVG9rZW4ge1xuICBjb25zdHJ1Y3RvcihleGVjdXRvcikge1xuICAgIGlmICh0eXBlb2YgZXhlY3V0b3IgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2V4ZWN1dG9yIG11c3QgYmUgYSBmdW5jdGlvbi4nKTtcbiAgICB9XG5cbiAgICBsZXQgcmVzb2x2ZVByb21pc2U7XG5cbiAgICB0aGlzLnByb21pc2UgPSBuZXcgUHJvbWlzZShmdW5jdGlvbiBwcm9taXNlRXhlY3V0b3IocmVzb2x2ZSkge1xuICAgICAgcmVzb2x2ZVByb21pc2UgPSByZXNvbHZlO1xuICAgIH0pO1xuXG4gICAgY29uc3QgdG9rZW4gPSB0aGlzO1xuXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGZ1bmMtbmFtZXNcbiAgICB0aGlzLnByb21pc2UudGhlbihjYW5jZWwgPT4ge1xuICAgICAgaWYgKCF0b2tlbi5fbGlzdGVuZXJzKSByZXR1cm47XG5cbiAgICAgIGxldCBpID0gdG9rZW4uX2xpc3RlbmVycy5sZW5ndGg7XG5cbiAgICAgIHdoaWxlIChpLS0gPiAwKSB7XG4gICAgICAgIHRva2VuLl9saXN0ZW5lcnNbaV0oY2FuY2VsKTtcbiAgICAgIH1cbiAgICAgIHRva2VuLl9saXN0ZW5lcnMgPSBudWxsO1xuICAgIH0pO1xuXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGZ1bmMtbmFtZXNcbiAgICB0aGlzLnByb21pc2UudGhlbiA9IG9uZnVsZmlsbGVkID0+IHtcbiAgICAgIGxldCBfcmVzb2x2ZTtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzXG4gICAgICBjb25zdCBwcm9taXNlID0gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XG4gICAgICAgIHRva2VuLnN1YnNjcmliZShyZXNvbHZlKTtcbiAgICAgICAgX3Jlc29sdmUgPSByZXNvbHZlO1xuICAgICAgfSkudGhlbihvbmZ1bGZpbGxlZCk7XG5cbiAgICAgIHByb21pc2UuY2FuY2VsID0gZnVuY3Rpb24gcmVqZWN0KCkge1xuICAgICAgICB0b2tlbi51bnN1YnNjcmliZShfcmVzb2x2ZSk7XG4gICAgICB9O1xuXG4gICAgICByZXR1cm4gcHJvbWlzZTtcbiAgICB9O1xuXG4gICAgZXhlY3V0b3IoZnVuY3Rpb24gY2FuY2VsKG1lc3NhZ2UsIGNvbmZpZywgcmVxdWVzdCkge1xuICAgICAgaWYgKHRva2VuLnJlYXNvbikge1xuICAgICAgICAvLyBDYW5jZWxsYXRpb24gaGFzIGFscmVhZHkgYmVlbiByZXF1ZXN0ZWRcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB0b2tlbi5yZWFzb24gPSBuZXcgQ2FuY2VsZWRFcnJvcihtZXNzYWdlLCBjb25maWcsIHJlcXVlc3QpO1xuICAgICAgcmVzb2x2ZVByb21pc2UodG9rZW4ucmVhc29uKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaHJvd3MgYSBgQ2FuY2VsZWRFcnJvcmAgaWYgY2FuY2VsbGF0aW9uIGhhcyBiZWVuIHJlcXVlc3RlZC5cbiAgICovXG4gIHRocm93SWZSZXF1ZXN0ZWQoKSB7XG4gICAgaWYgKHRoaXMucmVhc29uKSB7XG4gICAgICB0aHJvdyB0aGlzLnJlYXNvbjtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogU3Vic2NyaWJlIHRvIHRoZSBjYW5jZWwgc2lnbmFsXG4gICAqL1xuXG4gIHN1YnNjcmliZShsaXN0ZW5lcikge1xuICAgIGlmICh0aGlzLnJlYXNvbikge1xuICAgICAgbGlzdGVuZXIodGhpcy5yZWFzb24pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLl9saXN0ZW5lcnMpIHtcbiAgICAgIHRoaXMuX2xpc3RlbmVycy5wdXNoKGxpc3RlbmVyKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fbGlzdGVuZXJzID0gW2xpc3RlbmVyXTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVW5zdWJzY3JpYmUgZnJvbSB0aGUgY2FuY2VsIHNpZ25hbFxuICAgKi9cblxuICB1bnN1YnNjcmliZShsaXN0ZW5lcikge1xuICAgIGlmICghdGhpcy5fbGlzdGVuZXJzKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IGluZGV4ID0gdGhpcy5fbGlzdGVuZXJzLmluZGV4T2YobGlzdGVuZXIpO1xuICAgIGlmIChpbmRleCAhPT0gLTEpIHtcbiAgICAgIHRoaXMuX2xpc3RlbmVycy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgIH1cbiAgfVxuXG4gIHRvQWJvcnRTaWduYWwoKSB7XG4gICAgY29uc3QgY29udHJvbGxlciA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTtcblxuICAgIGNvbnN0IGFib3J0ID0gKGVycikgPT4ge1xuICAgICAgY29udHJvbGxlci5hYm9ydChlcnIpO1xuICAgIH07XG5cbiAgICB0aGlzLnN1YnNjcmliZShhYm9ydCk7XG5cbiAgICBjb250cm9sbGVyLnNpZ25hbC51bnN1YnNjcmliZSA9ICgpID0+IHRoaXMudW5zdWJzY3JpYmUoYWJvcnQpO1xuXG4gICAgcmV0dXJuIGNvbnRyb2xsZXIuc2lnbmFsO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYW4gb2JqZWN0IHRoYXQgY29udGFpbnMgYSBuZXcgYENhbmNlbFRva2VuYCBhbmQgYSBmdW5jdGlvbiB0aGF0LCB3aGVuIGNhbGxlZCxcbiAgICogY2FuY2VscyB0aGUgYENhbmNlbFRva2VuYC5cbiAgICovXG4gIHN0YXRpYyBzb3VyY2UoKSB7XG4gICAgbGV0IGNhbmNlbDtcbiAgICBjb25zdCB0b2tlbiA9IG5ldyBDYW5jZWxUb2tlbihmdW5jdGlvbiBleGVjdXRvcihjKSB7XG4gICAgICBjYW5jZWwgPSBjO1xuICAgIH0pO1xuICAgIHJldHVybiB7XG4gICAgICB0b2tlbixcbiAgICAgIGNhbmNlbFxuICAgIH07XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgQ2FuY2VsVG9rZW47XG4iLCAiJ3VzZSBzdHJpY3QnO1xuXG4vKipcbiAqIFN5bnRhY3RpYyBzdWdhciBmb3IgaW52b2tpbmcgYSBmdW5jdGlvbiBhbmQgZXhwYW5kaW5nIGFuIGFycmF5IGZvciBhcmd1bWVudHMuXG4gKlxuICogQ29tbW9uIHVzZSBjYXNlIHdvdWxkIGJlIHRvIHVzZSBgRnVuY3Rpb24ucHJvdG90eXBlLmFwcGx5YC5cbiAqXG4gKiAgYGBganNcbiAqICBmdW5jdGlvbiBmKHgsIHksIHopIHt9XG4gKiAgdmFyIGFyZ3MgPSBbMSwgMiwgM107XG4gKiAgZi5hcHBseShudWxsLCBhcmdzKTtcbiAqICBgYGBcbiAqXG4gKiBXaXRoIGBzcHJlYWRgIHRoaXMgZXhhbXBsZSBjYW4gYmUgcmUtd3JpdHRlbi5cbiAqXG4gKiAgYGBganNcbiAqICBzcHJlYWQoZnVuY3Rpb24oeCwgeSwgeikge30pKFsxLCAyLCAzXSk7XG4gKiAgYGBgXG4gKlxuICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2tcbiAqXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259XG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHNwcmVhZChjYWxsYmFjaykge1xuICByZXR1cm4gZnVuY3Rpb24gd3JhcChhcnIpIHtcbiAgICByZXR1cm4gY2FsbGJhY2suYXBwbHkobnVsbCwgYXJyKTtcbiAgfTtcbn1cbiIsICIndXNlIHN0cmljdCc7XG5cbmltcG9ydCB1dGlscyBmcm9tICcuLy4uL3V0aWxzLmpzJztcblxuLyoqXG4gKiBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIHBheWxvYWQgaXMgYW4gZXJyb3IgdGhyb3duIGJ5IEF4aW9zXG4gKlxuICogQHBhcmFtIHsqfSBwYXlsb2FkIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKlxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdGhlIHBheWxvYWQgaXMgYW4gZXJyb3IgdGhyb3duIGJ5IEF4aW9zLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gaXNBeGlvc0Vycm9yKHBheWxvYWQpIHtcbiAgcmV0dXJuIHV0aWxzLmlzT2JqZWN0KHBheWxvYWQpICYmIChwYXlsb2FkLmlzQXhpb3NFcnJvciA9PT0gdHJ1ZSk7XG59XG4iLCAiY29uc3QgSHR0cFN0YXR1c0NvZGUgPSB7XG4gIENvbnRpbnVlOiAxMDAsXG4gIFN3aXRjaGluZ1Byb3RvY29sczogMTAxLFxuICBQcm9jZXNzaW5nOiAxMDIsXG4gIEVhcmx5SGludHM6IDEwMyxcbiAgT2s6IDIwMCxcbiAgQ3JlYXRlZDogMjAxLFxuICBBY2NlcHRlZDogMjAyLFxuICBOb25BdXRob3JpdGF0aXZlSW5mb3JtYXRpb246IDIwMyxcbiAgTm9Db250ZW50OiAyMDQsXG4gIFJlc2V0Q29udGVudDogMjA1LFxuICBQYXJ0aWFsQ29udGVudDogMjA2LFxuICBNdWx0aVN0YXR1czogMjA3LFxuICBBbHJlYWR5UmVwb3J0ZWQ6IDIwOCxcbiAgSW1Vc2VkOiAyMjYsXG4gIE11bHRpcGxlQ2hvaWNlczogMzAwLFxuICBNb3ZlZFBlcm1hbmVudGx5OiAzMDEsXG4gIEZvdW5kOiAzMDIsXG4gIFNlZU90aGVyOiAzMDMsXG4gIE5vdE1vZGlmaWVkOiAzMDQsXG4gIFVzZVByb3h5OiAzMDUsXG4gIFVudXNlZDogMzA2LFxuICBUZW1wb3JhcnlSZWRpcmVjdDogMzA3LFxuICBQZXJtYW5lbnRSZWRpcmVjdDogMzA4LFxuICBCYWRSZXF1ZXN0OiA0MDAsXG4gIFVuYXV0aG9yaXplZDogNDAxLFxuICBQYXltZW50UmVxdWlyZWQ6IDQwMixcbiAgRm9yYmlkZGVuOiA0MDMsXG4gIE5vdEZvdW5kOiA0MDQsXG4gIE1ldGhvZE5vdEFsbG93ZWQ6IDQwNSxcbiAgTm90QWNjZXB0YWJsZTogNDA2LFxuICBQcm94eUF1dGhlbnRpY2F0aW9uUmVxdWlyZWQ6IDQwNyxcbiAgUmVxdWVzdFRpbWVvdXQ6IDQwOCxcbiAgQ29uZmxpY3Q6IDQwOSxcbiAgR29uZTogNDEwLFxuICBMZW5ndGhSZXF1aXJlZDogNDExLFxuICBQcmVjb25kaXRpb25GYWlsZWQ6IDQxMixcbiAgUGF5bG9hZFRvb0xhcmdlOiA0MTMsXG4gIFVyaVRvb0xvbmc6IDQxNCxcbiAgVW5zdXBwb3J0ZWRNZWRpYVR5cGU6IDQxNSxcbiAgUmFuZ2VOb3RTYXRpc2ZpYWJsZTogNDE2LFxuICBFeHBlY3RhdGlvbkZhaWxlZDogNDE3LFxuICBJbUFUZWFwb3Q6IDQxOCxcbiAgTWlzZGlyZWN0ZWRSZXF1ZXN0OiA0MjEsXG4gIFVucHJvY2Vzc2FibGVFbnRpdHk6IDQyMixcbiAgTG9ja2VkOiA0MjMsXG4gIEZhaWxlZERlcGVuZGVuY3k6IDQyNCxcbiAgVG9vRWFybHk6IDQyNSxcbiAgVXBncmFkZVJlcXVpcmVkOiA0MjYsXG4gIFByZWNvbmRpdGlvblJlcXVpcmVkOiA0MjgsXG4gIFRvb01hbnlSZXF1ZXN0czogNDI5LFxuICBSZXF1ZXN0SGVhZGVyRmllbGRzVG9vTGFyZ2U6IDQzMSxcbiAgVW5hdmFpbGFibGVGb3JMZWdhbFJlYXNvbnM6IDQ1MSxcbiAgSW50ZXJuYWxTZXJ2ZXJFcnJvcjogNTAwLFxuICBOb3RJbXBsZW1lbnRlZDogNTAxLFxuICBCYWRHYXRld2F5OiA1MDIsXG4gIFNlcnZpY2VVbmF2YWlsYWJsZTogNTAzLFxuICBHYXRld2F5VGltZW91dDogNTA0LFxuICBIdHRwVmVyc2lvbk5vdFN1cHBvcnRlZDogNTA1LFxuICBWYXJpYW50QWxzb05lZ290aWF0ZXM6IDUwNixcbiAgSW5zdWZmaWNpZW50U3RvcmFnZTogNTA3LFxuICBMb29wRGV0ZWN0ZWQ6IDUwOCxcbiAgTm90RXh0ZW5kZWQ6IDUxMCxcbiAgTmV0d29ya0F1dGhlbnRpY2F0aW9uUmVxdWlyZWQ6IDUxMSxcbn07XG5cbk9iamVjdC5lbnRyaWVzKEh0dHBTdGF0dXNDb2RlKS5mb3JFYWNoKChba2V5LCB2YWx1ZV0pID0+IHtcbiAgSHR0cFN0YXR1c0NvZGVbdmFsdWVdID0ga2V5O1xufSk7XG5cbmV4cG9ydCBkZWZhdWx0IEh0dHBTdGF0dXNDb2RlO1xuIiwgIid1c2Ugc3RyaWN0JztcblxuaW1wb3J0IHV0aWxzIGZyb20gJy4vdXRpbHMuanMnO1xuaW1wb3J0IGJpbmQgZnJvbSAnLi9oZWxwZXJzL2JpbmQuanMnO1xuaW1wb3J0IEF4aW9zIGZyb20gJy4vY29yZS9BeGlvcy5qcyc7XG5pbXBvcnQgbWVyZ2VDb25maWcgZnJvbSAnLi9jb3JlL21lcmdlQ29uZmlnLmpzJztcbmltcG9ydCBkZWZhdWx0cyBmcm9tICcuL2RlZmF1bHRzL2luZGV4LmpzJztcbmltcG9ydCBmb3JtRGF0YVRvSlNPTiBmcm9tICcuL2hlbHBlcnMvZm9ybURhdGFUb0pTT04uanMnO1xuaW1wb3J0IENhbmNlbGVkRXJyb3IgZnJvbSAnLi9jYW5jZWwvQ2FuY2VsZWRFcnJvci5qcyc7XG5pbXBvcnQgQ2FuY2VsVG9rZW4gZnJvbSAnLi9jYW5jZWwvQ2FuY2VsVG9rZW4uanMnO1xuaW1wb3J0IGlzQ2FuY2VsIGZyb20gJy4vY2FuY2VsL2lzQ2FuY2VsLmpzJztcbmltcG9ydCB7VkVSU0lPTn0gZnJvbSAnLi9lbnYvZGF0YS5qcyc7XG5pbXBvcnQgdG9Gb3JtRGF0YSBmcm9tICcuL2hlbHBlcnMvdG9Gb3JtRGF0YS5qcyc7XG5pbXBvcnQgQXhpb3NFcnJvciBmcm9tICcuL2NvcmUvQXhpb3NFcnJvci5qcyc7XG5pbXBvcnQgc3ByZWFkIGZyb20gJy4vaGVscGVycy9zcHJlYWQuanMnO1xuaW1wb3J0IGlzQXhpb3NFcnJvciBmcm9tICcuL2hlbHBlcnMvaXNBeGlvc0Vycm9yLmpzJztcbmltcG9ydCBBeGlvc0hlYWRlcnMgZnJvbSBcIi4vY29yZS9BeGlvc0hlYWRlcnMuanNcIjtcbmltcG9ydCBhZGFwdGVycyBmcm9tICcuL2FkYXB0ZXJzL2FkYXB0ZXJzLmpzJztcbmltcG9ydCBIdHRwU3RhdHVzQ29kZSBmcm9tICcuL2hlbHBlcnMvSHR0cFN0YXR1c0NvZGUuanMnO1xuXG4vKipcbiAqIENyZWF0ZSBhbiBpbnN0YW5jZSBvZiBBeGlvc1xuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBkZWZhdWx0Q29uZmlnIFRoZSBkZWZhdWx0IGNvbmZpZyBmb3IgdGhlIGluc3RhbmNlXG4gKlxuICogQHJldHVybnMge0F4aW9zfSBBIG5ldyBpbnN0YW5jZSBvZiBBeGlvc1xuICovXG5mdW5jdGlvbiBjcmVhdGVJbnN0YW5jZShkZWZhdWx0Q29uZmlnKSB7XG4gIGNvbnN0IGNvbnRleHQgPSBuZXcgQXhpb3MoZGVmYXVsdENvbmZpZyk7XG4gIGNvbnN0IGluc3RhbmNlID0gYmluZChBeGlvcy5wcm90b3R5cGUucmVxdWVzdCwgY29udGV4dCk7XG5cbiAgLy8gQ29weSBheGlvcy5wcm90b3R5cGUgdG8gaW5zdGFuY2VcbiAgdXRpbHMuZXh0ZW5kKGluc3RhbmNlLCBBeGlvcy5wcm90b3R5cGUsIGNvbnRleHQsIHthbGxPd25LZXlzOiB0cnVlfSk7XG5cbiAgLy8gQ29weSBjb250ZXh0IHRvIGluc3RhbmNlXG4gIHV0aWxzLmV4dGVuZChpbnN0YW5jZSwgY29udGV4dCwgbnVsbCwge2FsbE93bktleXM6IHRydWV9KTtcblxuICAvLyBGYWN0b3J5IGZvciBjcmVhdGluZyBuZXcgaW5zdGFuY2VzXG4gIGluc3RhbmNlLmNyZWF0ZSA9IGZ1bmN0aW9uIGNyZWF0ZShpbnN0YW5jZUNvbmZpZykge1xuICAgIHJldHVybiBjcmVhdGVJbnN0YW5jZShtZXJnZUNvbmZpZyhkZWZhdWx0Q29uZmlnLCBpbnN0YW5jZUNvbmZpZykpO1xuICB9O1xuXG4gIHJldHVybiBpbnN0YW5jZTtcbn1cblxuLy8gQ3JlYXRlIHRoZSBkZWZhdWx0IGluc3RhbmNlIHRvIGJlIGV4cG9ydGVkXG5jb25zdCBheGlvcyA9IGNyZWF0ZUluc3RhbmNlKGRlZmF1bHRzKTtcblxuLy8gRXhwb3NlIEF4aW9zIGNsYXNzIHRvIGFsbG93IGNsYXNzIGluaGVyaXRhbmNlXG5heGlvcy5BeGlvcyA9IEF4aW9zO1xuXG4vLyBFeHBvc2UgQ2FuY2VsICYgQ2FuY2VsVG9rZW5cbmF4aW9zLkNhbmNlbGVkRXJyb3IgPSBDYW5jZWxlZEVycm9yO1xuYXhpb3MuQ2FuY2VsVG9rZW4gPSBDYW5jZWxUb2tlbjtcbmF4aW9zLmlzQ2FuY2VsID0gaXNDYW5jZWw7XG5heGlvcy5WRVJTSU9OID0gVkVSU0lPTjtcbmF4aW9zLnRvRm9ybURhdGEgPSB0b0Zvcm1EYXRhO1xuXG4vLyBFeHBvc2UgQXhpb3NFcnJvciBjbGFzc1xuYXhpb3MuQXhpb3NFcnJvciA9IEF4aW9zRXJyb3I7XG5cbi8vIGFsaWFzIGZvciBDYW5jZWxlZEVycm9yIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5XG5heGlvcy5DYW5jZWwgPSBheGlvcy5DYW5jZWxlZEVycm9yO1xuXG4vLyBFeHBvc2UgYWxsL3NwcmVhZFxuYXhpb3MuYWxsID0gZnVuY3Rpb24gYWxsKHByb21pc2VzKSB7XG4gIHJldHVybiBQcm9taXNlLmFsbChwcm9taXNlcyk7XG59O1xuXG5heGlvcy5zcHJlYWQgPSBzcHJlYWQ7XG5cbi8vIEV4cG9zZSBpc0F4aW9zRXJyb3JcbmF4aW9zLmlzQXhpb3NFcnJvciA9IGlzQXhpb3NFcnJvcjtcblxuLy8gRXhwb3NlIG1lcmdlQ29uZmlnXG5heGlvcy5tZXJnZUNvbmZpZyA9IG1lcmdlQ29uZmlnO1xuXG5heGlvcy5BeGlvc0hlYWRlcnMgPSBBeGlvc0hlYWRlcnM7XG5cbmF4aW9zLmZvcm1Ub0pTT04gPSB0aGluZyA9PiBmb3JtRGF0YVRvSlNPTih1dGlscy5pc0hUTUxGb3JtKHRoaW5nKSA/IG5ldyBGb3JtRGF0YSh0aGluZykgOiB0aGluZyk7XG5cbmF4aW9zLmdldEFkYXB0ZXIgPSBhZGFwdGVycy5nZXRBZGFwdGVyO1xuXG5heGlvcy5IdHRwU3RhdHVzQ29kZSA9IEh0dHBTdGF0dXNDb2RlO1xuXG5heGlvcy5kZWZhdWx0ID0gYXhpb3M7XG5cbi8vIHRoaXMgbW9kdWxlIHNob3VsZCBvbmx5IGhhdmUgYSBkZWZhdWx0IGV4cG9ydFxuZXhwb3J0IGRlZmF1bHQgYXhpb3NcbiIsICJpbXBvcnQgYXhpb3MgZnJvbSAnLi9saWIvYXhpb3MuanMnO1xuXG4vLyBUaGlzIG1vZHVsZSBpcyBpbnRlbmRlZCB0byB1bndyYXAgQXhpb3MgZGVmYXVsdCBleHBvcnQgYXMgbmFtZWQuXG4vLyBLZWVwIHRvcC1sZXZlbCBleHBvcnQgc2FtZSB3aXRoIHN0YXRpYyBwcm9wZXJ0aWVzXG4vLyBzbyB0aGF0IGl0IGNhbiBrZWVwIHNhbWUgd2l0aCBlcyBtb2R1bGUgb3IgY2pzXG5jb25zdCB7XG4gIEF4aW9zLFxuICBBeGlvc0Vycm9yLFxuICBDYW5jZWxlZEVycm9yLFxuICBpc0NhbmNlbCxcbiAgQ2FuY2VsVG9rZW4sXG4gIFZFUlNJT04sXG4gIGFsbCxcbiAgQ2FuY2VsLFxuICBpc0F4aW9zRXJyb3IsXG4gIHNwcmVhZCxcbiAgdG9Gb3JtRGF0YSxcbiAgQXhpb3NIZWFkZXJzLFxuICBIdHRwU3RhdHVzQ29kZSxcbiAgZm9ybVRvSlNPTixcbiAgZ2V0QWRhcHRlcixcbiAgbWVyZ2VDb25maWdcbn0gPSBheGlvcztcblxuZXhwb3J0IHtcbiAgYXhpb3MgYXMgZGVmYXVsdCxcbiAgQXhpb3MsXG4gIEF4aW9zRXJyb3IsXG4gIENhbmNlbGVkRXJyb3IsXG4gIGlzQ2FuY2VsLFxuICBDYW5jZWxUb2tlbixcbiAgVkVSU0lPTixcbiAgYWxsLFxuICBDYW5jZWwsXG4gIGlzQXhpb3NFcnJvcixcbiAgc3ByZWFkLFxuICB0b0Zvcm1EYXRhLFxuICBBeGlvc0hlYWRlcnMsXG4gIEh0dHBTdGF0dXNDb2RlLFxuICBmb3JtVG9KU09OLFxuICBnZXRBZGFwdGVyLFxuICBtZXJnZUNvbmZpZ1xufVxuIiwgImltcG9ydCB0eXBlIHsgRG9tSGFuZGxlck9wdGlvbnMgfSBmcm9tICdkb21oYW5kbGVyJztcbmltcG9ydCB0eXBlIHsgUGFyc2VyT3B0aW9ucyBhcyBIVE1MUGFyc2VyMlBhcnNlck9wdGlvbnMgfSBmcm9tICdodG1scGFyc2VyMic7XG5pbXBvcnQgdHlwZSB7IFBhcnNlck9wdGlvbnMgYXMgUGFyc2U1UGFyc2VyT3B0aW9ucyB9IGZyb20gJ3BhcnNlNSc7XG5pbXBvcnQgdHlwZSB7IEh0bWxwYXJzZXIyVHJlZUFkYXB0ZXJNYXAgfSBmcm9tICdwYXJzZTUtaHRtbHBhcnNlcjItdHJlZS1hZGFwdGVyJztcbmltcG9ydCB0eXBlIHsgT3B0aW9ucyBhcyBTZWxlY3RPcHRpb25zIH0gZnJvbSAnY2hlZXJpby1zZWxlY3QnO1xuXG4vKipcbiAqIE9wdGlvbnMgYWNjZXB0ZWQgYnkgaHRtbHBhcnNlcjIsIHRoZSBkZWZhdWx0IHBhcnNlciBmb3IgWE1MLlxuICpcbiAqIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL2ZiNTUvaHRtbHBhcnNlcjIvd2lraS9QYXJzZXItb3B0aW9uc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIEhUTUxQYXJzZXIyT3B0aW9uc1xuICBleHRlbmRzIERvbUhhbmRsZXJPcHRpb25zLFxuICAgIEhUTUxQYXJzZXIyUGFyc2VyT3B0aW9ucyB7fVxuXG4vKipcbiAqIE9wdGlvbnMgYWNjZXB0ZWQgYnkgQ2hlZXJpby5cbiAqXG4gKiBQbGVhc2Ugbm90ZSB0aGF0IHBhcnNlci1zcGVjaWZpYyBvcHRpb25zIGFyZSBfb25seSByZWNvZ25pemVkXyBpZiB0aGVcbiAqIHJlbGV2YW50IHBhcnNlciBpcyB1c2VkLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENoZWVyaW9PcHRpb25zXG4gIGV4dGVuZHMgUGFyc2U1UGFyc2VyT3B0aW9uczxIdG1scGFyc2VyMlRyZWVBZGFwdGVyTWFwPiB7XG4gIC8qKlxuICAgKiBSZWNvbW1lbmRlZCB3YXkgb2YgY29uZmlndXJpbmcgaHRtbHBhcnNlcjIgd2hlbiB3YW50aW5nIHRvIHBhcnNlIFhNTC5cbiAgICpcbiAgICogVGhpcyB3aWxsIHN3aXRjaCBDaGVlcmlvIHRvIHVzZSBodG1scGFyc2VyMi5cbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHhtbD86IEhUTUxQYXJzZXIyT3B0aW9ucyB8IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEVuYWJsZSB4bWwgbW9kZSwgd2hpY2ggd2lsbCBzd2l0Y2ggQ2hlZXJpbyB0byB1c2UgaHRtbHBhcnNlcjIuXG4gICAqXG4gICAqIEBkZXByZWNhdGVkIFBsZWFzZSB1c2UgdGhlIGB4bWxgIG9wdGlvbiBpbnN0ZWFkLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgeG1sTW9kZT86IGJvb2xlYW47XG5cbiAgLyoqIFRoZSBiYXNlIFVSSSBmb3IgdGhlIGRvY3VtZW50LiBVc2VkIHRvIHJlc29sdmUgdGhlIGBocmVmYCBhbmQgYHNyY2AgcHJvcHMuICovXG4gIGJhc2VVUkk/OiBzdHJpbmcgfCBVUkw7XG5cbiAgLyoqXG4gICAqIElzIHRoZSBkb2N1bWVudCBpbiBxdWlya3MgbW9kZT9cbiAgICpcbiAgICogVGhpcyB3aWxsIGxlYWQgdG8gYC5jbGFzc05hbWVgIGFuZCBgI2lkYCBiZWluZyBjYXNlLWluc2Vuc2l0aXZlLlxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcXVpcmtzTW9kZT86IFNlbGVjdE9wdGlvbnNbJ3F1aXJrc01vZGUnXTtcbiAgLyoqXG4gICAqIEV4dGVuc2lvbiBwb2ludCBmb3IgcHNldWRvLWNsYXNzZXMuXG4gICAqXG4gICAqIE1hcHMgZnJvbSBuYW1lcyB0byBlaXRoZXIgc3RyaW5ncyBvZiBmdW5jdGlvbnMuXG4gICAqXG4gICAqIC0gQSBzdHJpbmcgdmFsdWUgaXMgYSBzZWxlY3RvciB0aGF0IHRoZSBlbGVtZW50IG11c3QgbWF0Y2ggdG8gYmUgc2VsZWN0ZWQuXG4gICAqIC0gQSBmdW5jdGlvbiBpcyBjYWxsZWQgd2l0aCB0aGUgZWxlbWVudCBhcyBpdHMgZmlyc3QgYXJndW1lbnQsIGFuZCBvcHRpb25hbFxuICAgKiAgIHBhcmFtZXRlcnMgc2Vjb25kLiBJZiBpdCByZXR1cm5zIHRydWUsIHRoZSBlbGVtZW50IGlzIHNlbGVjdGVkLlxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKlxuICAgKiBgYGBqc1xuICAgKiBjb25zdCAkID0gY2hlZXJpby5sb2FkKFxuICAgKiAgICc8ZGl2IGNsYXNzPVwiZm9vXCI+PC9kaXY+PGRpdiBkYXRhLWJhcj1cImJvb1wiPjwvZGl2PicsXG4gICAqICAge1xuICAgKiAgICAgcHNldWRvczoge1xuICAgKiAgICAgICAvLyBgOmZvb2AgaXMgYW4gYWxpYXMgZm9yIGBkaXYuZm9vYFxuICAgKiAgICAgICBmb286ICdkaXYuZm9vJyxcbiAgICogICAgICAgLy8gYDpiYXIodmFsKWAgaXMgZXF1aXZhbGVudCB0byBgW2RhdGEtYmFyPXZhbCBzXWBcbiAgICogICAgICAgYmFyOiAoZWwsIHZhbCkgPT4gZWwuYXR0cmlic1snZGF0YS1iYXInXSA9PT0gdmFsLFxuICAgKiAgICAgfSxcbiAgICogICB9LFxuICAgKiApO1xuICAgKlxuICAgKiAkKCc6Zm9vJykubGVuZ3RoOyAvLyAxXG4gICAqICQoJ2RpdjpiYXIoYm9vKScpLmxlbmd0aDsgLy8gMVxuICAgKiAkKCdkaXY6YmFyKGJheiknKS5sZW5ndGg7IC8vIDBcbiAgICogYGBgXG4gICAqL1xuICBwc2V1ZG9zPzogU2VsZWN0T3B0aW9uc1sncHNldWRvcyddO1xufVxuXG4vKiogSW50ZXJuYWwgb3B0aW9ucyBmb3IgQ2hlZXJpby4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSW50ZXJuYWxPcHRpb25zXG4gIGV4dGVuZHMgSFRNTFBhcnNlcjJPcHRpb25zLFxuICAgIE9taXQ8Q2hlZXJpb09wdGlvbnMsICd4bWwnPiB7XG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIHVzZSBodG1scGFyc2VyMi5cbiAgICpcbiAgICogVGhpcyBpcyBzZXQgdG8gdHJ1ZSBpZiBgeG1sYCBpcyBzZXQgdG8gdHJ1ZS5cbiAgICovXG4gIF91c2VIdG1sUGFyc2VyMj86IGJvb2xlYW47XG59XG5cbmNvbnN0IGRlZmF1bHRPcHRzOiBJbnRlcm5hbE9wdGlvbnMgPSB7XG4gIF91c2VIdG1sUGFyc2VyMjogZmFsc2UsXG59O1xuXG4vKipcbiAqIEZsYXR0ZW4gdGhlIG9wdGlvbnMgZm9yIENoZWVyaW8uXG4gKlxuICogVGhpcyB3aWxsIHNldCBgX3VzZUh0bWxQYXJzZXIyYCB0byB0cnVlIGlmIGB4bWxgIGlzIHNldCB0byB0cnVlLlxuICpcbiAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIG9wdGlvbnMgdG8gZmxhdHRlbi5cbiAqIEBwYXJhbSBiYXNlT3B0aW9ucyAtIFRoZSBiYXNlIG9wdGlvbnMgdG8gdXNlLlxuICogQHJldHVybnMgVGhlIGZsYXR0ZW5lZCBvcHRpb25zLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZmxhdHRlbk9wdGlvbnMoXG4gIG9wdGlvbnM/OiBDaGVlcmlvT3B0aW9ucyB8IG51bGwsXG4gIGJhc2VPcHRpb25zPzogSW50ZXJuYWxPcHRpb25zLFxuKTogSW50ZXJuYWxPcHRpb25zIHtcbiAgaWYgKCFvcHRpb25zKSB7XG4gICAgcmV0dXJuIGJhc2VPcHRpb25zID8/IGRlZmF1bHRPcHRzO1xuICB9XG5cbiAgY29uc3Qgb3B0czogSW50ZXJuYWxPcHRpb25zID0ge1xuICAgIF91c2VIdG1sUGFyc2VyMjogISFvcHRpb25zLnhtbE1vZGUsXG4gICAgLi4uYmFzZU9wdGlvbnMsXG4gICAgLi4ub3B0aW9ucyxcbiAgfTtcblxuICBpZiAob3B0aW9ucy54bWwpIHtcbiAgICBvcHRzLl91c2VIdG1sUGFyc2VyMiA9IHRydWU7XG4gICAgb3B0cy54bWxNb2RlID0gdHJ1ZTtcblxuICAgIGlmIChvcHRpb25zLnhtbCAhPT0gdHJ1ZSkge1xuICAgICAgT2JqZWN0LmFzc2lnbihvcHRzLCBvcHRpb25zLnhtbCk7XG4gICAgfVxuICB9IGVsc2UgaWYgKG9wdGlvbnMueG1sTW9kZSkge1xuICAgIG9wdHMuX3VzZUh0bWxQYXJzZXIyID0gdHJ1ZTtcbiAgfVxuXG4gIHJldHVybiBvcHRzO1xufVxuIiwgIi8qKiBUeXBlcyBvZiBlbGVtZW50cyBmb3VuZCBpbiBodG1scGFyc2VyMidzIERPTSAqL1xuZXhwb3J0IHZhciBFbGVtZW50VHlwZTtcbihmdW5jdGlvbiAoRWxlbWVudFR5cGUpIHtcbiAgICAvKiogVHlwZSBmb3IgdGhlIHJvb3QgZWxlbWVudCBvZiBhIGRvY3VtZW50ICovXG4gICAgRWxlbWVudFR5cGVbXCJSb290XCJdID0gXCJyb290XCI7XG4gICAgLyoqIFR5cGUgZm9yIFRleHQgKi9cbiAgICBFbGVtZW50VHlwZVtcIlRleHRcIl0gPSBcInRleHRcIjtcbiAgICAvKiogVHlwZSBmb3IgPD8gLi4uID8+ICovXG4gICAgRWxlbWVudFR5cGVbXCJEaXJlY3RpdmVcIl0gPSBcImRpcmVjdGl2ZVwiO1xuICAgIC8qKiBUeXBlIGZvciA8IS0tIC4uLiAtLT4gKi9cbiAgICBFbGVtZW50VHlwZVtcIkNvbW1lbnRcIl0gPSBcImNvbW1lbnRcIjtcbiAgICAvKiogVHlwZSBmb3IgPHNjcmlwdD4gdGFncyAqL1xuICAgIEVsZW1lbnRUeXBlW1wiU2NyaXB0XCJdID0gXCJzY3JpcHRcIjtcbiAgICAvKiogVHlwZSBmb3IgPHN0eWxlPiB0YWdzICovXG4gICAgRWxlbWVudFR5cGVbXCJTdHlsZVwiXSA9IFwic3R5bGVcIjtcbiAgICAvKiogVHlwZSBmb3IgQW55IHRhZyAqL1xuICAgIEVsZW1lbnRUeXBlW1wiVGFnXCJdID0gXCJ0YWdcIjtcbiAgICAvKiogVHlwZSBmb3IgPCFbQ0RBVEFbIC4uLiBdXT4gKi9cbiAgICBFbGVtZW50VHlwZVtcIkNEQVRBXCJdID0gXCJjZGF0YVwiO1xuICAgIC8qKiBUeXBlIGZvciA8IWRvY3R5cGUgLi4uPiAqL1xuICAgIEVsZW1lbnRUeXBlW1wiRG9jdHlwZVwiXSA9IFwiZG9jdHlwZVwiO1xufSkoRWxlbWVudFR5cGUgfHwgKEVsZW1lbnRUeXBlID0ge30pKTtcbi8qKlxuICogVGVzdHMgd2hldGhlciBhbiBlbGVtZW50IGlzIGEgdGFnIG9yIG5vdC5cbiAqXG4gKiBAcGFyYW0gZWxlbSBFbGVtZW50IHRvIHRlc3RcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzVGFnKGVsZW0pIHtcbiAgICByZXR1cm4gKGVsZW0udHlwZSA9PT0gRWxlbWVudFR5cGUuVGFnIHx8XG4gICAgICAgIGVsZW0udHlwZSA9PT0gRWxlbWVudFR5cGUuU2NyaXB0IHx8XG4gICAgICAgIGVsZW0udHlwZSA9PT0gRWxlbWVudFR5cGUuU3R5bGUpO1xufVxuLy8gRXhwb3J0cyBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHlcbi8qKiBUeXBlIGZvciB0aGUgcm9vdCBlbGVtZW50IG9mIGEgZG9jdW1lbnQgKi9cbmV4cG9ydCBjb25zdCBSb290ID0gRWxlbWVudFR5cGUuUm9vdDtcbi8qKiBUeXBlIGZvciBUZXh0ICovXG5leHBvcnQgY29uc3QgVGV4dCA9IEVsZW1lbnRUeXBlLlRleHQ7XG4vKiogVHlwZSBmb3IgPD8gLi4uID8+ICovXG5leHBvcnQgY29uc3QgRGlyZWN0aXZlID0gRWxlbWVudFR5cGUuRGlyZWN0aXZlO1xuLyoqIFR5cGUgZm9yIDwhLS0gLi4uIC0tPiAqL1xuZXhwb3J0IGNvbnN0IENvbW1lbnQgPSBFbGVtZW50VHlwZS5Db21tZW50O1xuLyoqIFR5cGUgZm9yIDxzY3JpcHQ+IHRhZ3MgKi9cbmV4cG9ydCBjb25zdCBTY3JpcHQgPSBFbGVtZW50VHlwZS5TY3JpcHQ7XG4vKiogVHlwZSBmb3IgPHN0eWxlPiB0YWdzICovXG5leHBvcnQgY29uc3QgU3R5bGUgPSBFbGVtZW50VHlwZS5TdHlsZTtcbi8qKiBUeXBlIGZvciBBbnkgdGFnICovXG5leHBvcnQgY29uc3QgVGFnID0gRWxlbWVudFR5cGUuVGFnO1xuLyoqIFR5cGUgZm9yIDwhW0NEQVRBWyAuLi4gXV0+ICovXG5leHBvcnQgY29uc3QgQ0RBVEEgPSBFbGVtZW50VHlwZS5DREFUQTtcbi8qKiBUeXBlIGZvciA8IWRvY3R5cGUgLi4uPiAqL1xuZXhwb3J0IGNvbnN0IERvY3R5cGUgPSBFbGVtZW50VHlwZS5Eb2N0eXBlO1xuIiwgImltcG9ydCB7IEVsZW1lbnRUeXBlLCBpc1RhZyBhcyBpc1RhZ1JhdyB9IGZyb20gXCJkb21lbGVtZW50dHlwZVwiO1xuLyoqXG4gKiBUaGlzIG9iamVjdCB3aWxsIGJlIHVzZWQgYXMgdGhlIHByb3RvdHlwZSBmb3IgTm9kZXMgd2hlbiBjcmVhdGluZyBhXG4gKiBET00tTGV2ZWwtMS1jb21wbGlhbnQgc3RydWN0dXJlLlxuICovXG5leHBvcnQgY2xhc3MgTm9kZSB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIC8qKiBQYXJlbnQgb2YgdGhlIG5vZGUgKi9cbiAgICAgICAgdGhpcy5wYXJlbnQgPSBudWxsO1xuICAgICAgICAvKiogUHJldmlvdXMgc2libGluZyAqL1xuICAgICAgICB0aGlzLnByZXYgPSBudWxsO1xuICAgICAgICAvKiogTmV4dCBzaWJsaW5nICovXG4gICAgICAgIHRoaXMubmV4dCA9IG51bGw7XG4gICAgICAgIC8qKiBUaGUgc3RhcnQgaW5kZXggb2YgdGhlIG5vZGUuIFJlcXVpcmVzIGB3aXRoU3RhcnRJbmRpY2VzYCBvbiB0aGUgaGFuZGxlciB0byBiZSBgdHJ1ZS4gKi9cbiAgICAgICAgdGhpcy5zdGFydEluZGV4ID0gbnVsbDtcbiAgICAgICAgLyoqIFRoZSBlbmQgaW5kZXggb2YgdGhlIG5vZGUuIFJlcXVpcmVzIGB3aXRoRW5kSW5kaWNlc2Agb24gdGhlIGhhbmRsZXIgdG8gYmUgYHRydWUuICovXG4gICAgICAgIHRoaXMuZW5kSW5kZXggPSBudWxsO1xuICAgIH1cbiAgICAvLyBSZWFkLXdyaXRlIGFsaWFzZXMgZm9yIHByb3BlcnRpZXNcbiAgICAvKipcbiAgICAgKiBTYW1lIGFzIHtAbGluayBwYXJlbnR9LlxuICAgICAqIFtET00gc3BlY10oaHR0cHM6Ly9kb20uc3BlYy53aGF0d2cub3JnKS1jb21wYXRpYmxlIGFsaWFzLlxuICAgICAqL1xuICAgIGdldCBwYXJlbnROb2RlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5wYXJlbnQ7XG4gICAgfVxuICAgIHNldCBwYXJlbnROb2RlKHBhcmVudCkge1xuICAgICAgICB0aGlzLnBhcmVudCA9IHBhcmVudDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogU2FtZSBhcyB7QGxpbmsgcHJldn0uXG4gICAgICogW0RPTSBzcGVjXShodHRwczovL2RvbS5zcGVjLndoYXR3Zy5vcmcpLWNvbXBhdGlibGUgYWxpYXMuXG4gICAgICovXG4gICAgZ2V0IHByZXZpb3VzU2libGluZygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucHJldjtcbiAgICB9XG4gICAgc2V0IHByZXZpb3VzU2libGluZyhwcmV2KSB7XG4gICAgICAgIHRoaXMucHJldiA9IHByZXY7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFNhbWUgYXMge0BsaW5rIG5leHR9LlxuICAgICAqIFtET00gc3BlY10oaHR0cHM6Ly9kb20uc3BlYy53aGF0d2cub3JnKS1jb21wYXRpYmxlIGFsaWFzLlxuICAgICAqL1xuICAgIGdldCBuZXh0U2libGluZygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubmV4dDtcbiAgICB9XG4gICAgc2V0IG5leHRTaWJsaW5nKG5leHQpIHtcbiAgICAgICAgdGhpcy5uZXh0ID0gbmV4dDtcbiAgICB9XG4gICAgLyoqXG4gICAgICogQ2xvbmUgdGhpcyBub2RlLCBhbmQgb3B0aW9uYWxseSBpdHMgY2hpbGRyZW4uXG4gICAgICpcbiAgICAgKiBAcGFyYW0gcmVjdXJzaXZlIENsb25lIGNoaWxkIG5vZGVzIGFzIHdlbGwuXG4gICAgICogQHJldHVybnMgQSBjbG9uZSBvZiB0aGUgbm9kZS5cbiAgICAgKi9cbiAgICBjbG9uZU5vZGUocmVjdXJzaXZlID0gZmFsc2UpIHtcbiAgICAgICAgcmV0dXJuIGNsb25lTm9kZSh0aGlzLCByZWN1cnNpdmUpO1xuICAgIH1cbn1cbi8qKlxuICogQSBub2RlIHRoYXQgY29udGFpbnMgc29tZSBkYXRhLlxuICovXG5leHBvcnQgY2xhc3MgRGF0YU5vZGUgZXh0ZW5kcyBOb2RlIHtcbiAgICAvKipcbiAgICAgKiBAcGFyYW0gZGF0YSBUaGUgY29udGVudCBvZiB0aGUgZGF0YSBub2RlXG4gICAgICovXG4gICAgY29uc3RydWN0b3IoZGF0YSkge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLmRhdGEgPSBkYXRhO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBTYW1lIGFzIHtAbGluayBkYXRhfS5cbiAgICAgKiBbRE9NIHNwZWNdKGh0dHBzOi8vZG9tLnNwZWMud2hhdHdnLm9yZyktY29tcGF0aWJsZSBhbGlhcy5cbiAgICAgKi9cbiAgICBnZXQgbm9kZVZhbHVlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5kYXRhO1xuICAgIH1cbiAgICBzZXQgbm9kZVZhbHVlKGRhdGEpIHtcbiAgICAgICAgdGhpcy5kYXRhID0gZGF0YTtcbiAgICB9XG59XG4vKipcbiAqIFRleHQgd2l0aGluIHRoZSBkb2N1bWVudC5cbiAqL1xuZXhwb3J0IGNsYXNzIFRleHQgZXh0ZW5kcyBEYXRhTm9kZSB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XG4gICAgICAgIHRoaXMudHlwZSA9IEVsZW1lbnRUeXBlLlRleHQ7XG4gICAgfVxuICAgIGdldCBub2RlVHlwZSgpIHtcbiAgICAgICAgcmV0dXJuIDM7XG4gICAgfVxufVxuLyoqXG4gKiBDb21tZW50cyB3aXRoaW4gdGhlIGRvY3VtZW50LlxuICovXG5leHBvcnQgY2xhc3MgQ29tbWVudCBleHRlbmRzIERhdGFOb2RlIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTtcbiAgICAgICAgdGhpcy50eXBlID0gRWxlbWVudFR5cGUuQ29tbWVudDtcbiAgICB9XG4gICAgZ2V0IG5vZGVUeXBlKCkge1xuICAgICAgICByZXR1cm4gODtcbiAgICB9XG59XG4vKipcbiAqIFByb2Nlc3NpbmcgaW5zdHJ1Y3Rpb25zLCBpbmNsdWRpbmcgZG9jIHR5cGVzLlxuICovXG5leHBvcnQgY2xhc3MgUHJvY2Vzc2luZ0luc3RydWN0aW9uIGV4dGVuZHMgRGF0YU5vZGUge1xuICAgIGNvbnN0cnVjdG9yKG5hbWUsIGRhdGEpIHtcbiAgICAgICAgc3VwZXIoZGF0YSk7XG4gICAgICAgIHRoaXMubmFtZSA9IG5hbWU7XG4gICAgICAgIHRoaXMudHlwZSA9IEVsZW1lbnRUeXBlLkRpcmVjdGl2ZTtcbiAgICB9XG4gICAgZ2V0IG5vZGVUeXBlKCkge1xuICAgICAgICByZXR1cm4gMTtcbiAgICB9XG59XG4vKipcbiAqIEEgYE5vZGVgIHRoYXQgY2FuIGhhdmUgY2hpbGRyZW4uXG4gKi9cbmV4cG9ydCBjbGFzcyBOb2RlV2l0aENoaWxkcmVuIGV4dGVuZHMgTm9kZSB7XG4gICAgLyoqXG4gICAgICogQHBhcmFtIGNoaWxkcmVuIENoaWxkcmVuIG9mIHRoZSBub2RlLiBPbmx5IGNlcnRhaW4gbm9kZSB0eXBlcyBjYW4gaGF2ZSBjaGlsZHJlbi5cbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvcihjaGlsZHJlbikge1xuICAgICAgICBzdXBlcigpO1xuICAgICAgICB0aGlzLmNoaWxkcmVuID0gY2hpbGRyZW47XG4gICAgfVxuICAgIC8vIEFsaWFzZXNcbiAgICAvKiogRmlyc3QgY2hpbGQgb2YgdGhlIG5vZGUuICovXG4gICAgZ2V0IGZpcnN0Q2hpbGQoKSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgcmV0dXJuIChfYSA9IHRoaXMuY2hpbGRyZW5bMF0pICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IG51bGw7XG4gICAgfVxuICAgIC8qKiBMYXN0IGNoaWxkIG9mIHRoZSBub2RlLiAqL1xuICAgIGdldCBsYXN0Q2hpbGQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNoaWxkcmVuLmxlbmd0aCA+IDBcbiAgICAgICAgICAgID8gdGhpcy5jaGlsZHJlblt0aGlzLmNoaWxkcmVuLmxlbmd0aCAtIDFdXG4gICAgICAgICAgICA6IG51bGw7XG4gICAgfVxuICAgIC8qKlxuICAgICAqIFNhbWUgYXMge0BsaW5rIGNoaWxkcmVufS5cbiAgICAgKiBbRE9NIHNwZWNdKGh0dHBzOi8vZG9tLnNwZWMud2hhdHdnLm9yZyktY29tcGF0aWJsZSBhbGlhcy5cbiAgICAgKi9cbiAgICBnZXQgY2hpbGROb2RlcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY2hpbGRyZW47XG4gICAgfVxuICAgIHNldCBjaGlsZE5vZGVzKGNoaWxkcmVuKSB7XG4gICAgICAgIHRoaXMuY2hpbGRyZW4gPSBjaGlsZHJlbjtcbiAgICB9XG59XG5leHBvcnQgY2xhc3MgQ0RBVEEgZXh0ZW5kcyBOb2RlV2l0aENoaWxkcmVuIHtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTtcbiAgICAgICAgdGhpcy50eXBlID0gRWxlbWVudFR5cGUuQ0RBVEE7XG4gICAgfVxuICAgIGdldCBub2RlVHlwZSgpIHtcbiAgICAgICAgcmV0dXJuIDQ7XG4gICAgfVxufVxuLyoqXG4gKiBUaGUgcm9vdCBub2RlIG9mIHRoZSBkb2N1bWVudC5cbiAqL1xuZXhwb3J0IGNsYXNzIERvY3VtZW50IGV4dGVuZHMgTm9kZVdpdGhDaGlsZHJlbiB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7XG4gICAgICAgIHRoaXMudHlwZSA9IEVsZW1lbnRUeXBlLlJvb3Q7XG4gICAgfVxuICAgIGdldCBub2RlVHlwZSgpIHtcbiAgICAgICAgcmV0dXJuIDk7XG4gICAgfVxufVxuLyoqXG4gKiBBbiBlbGVtZW50IHdpdGhpbiB0aGUgRE9NLlxuICovXG5leHBvcnQgY2xhc3MgRWxlbWVudCBleHRlbmRzIE5vZGVXaXRoQ2hpbGRyZW4ge1xuICAgIC8qKlxuICAgICAqIEBwYXJhbSBuYW1lIE5hbWUgb2YgdGhlIHRhZywgZWcuIGBkaXZgLCBgc3BhbmAuXG4gICAgICogQHBhcmFtIGF0dHJpYnMgT2JqZWN0IG1hcHBpbmcgYXR0cmlidXRlIG5hbWVzIHRvIGF0dHJpYnV0ZSB2YWx1ZXMuXG4gICAgICogQHBhcmFtIGNoaWxkcmVuIENoaWxkcmVuIG9mIHRoZSBub2RlLlxuICAgICAqL1xuICAgIGNvbnN0cnVjdG9yKG5hbWUsIGF0dHJpYnMsIGNoaWxkcmVuID0gW10sIHR5cGUgPSBuYW1lID09PSBcInNjcmlwdFwiXG4gICAgICAgID8gRWxlbWVudFR5cGUuU2NyaXB0XG4gICAgICAgIDogbmFtZSA9PT0gXCJzdHlsZVwiXG4gICAgICAgICAgICA/IEVsZW1lbnRUeXBlLlN0eWxlXG4gICAgICAgICAgICA6IEVsZW1lbnRUeXBlLlRhZykge1xuICAgICAgICBzdXBlcihjaGlsZHJlbik7XG4gICAgICAgIHRoaXMubmFtZSA9IG5hbWU7XG4gICAgICAgIHRoaXMuYXR0cmlicyA9IGF0dHJpYnM7XG4gICAgICAgIHRoaXMudHlwZSA9IHR5cGU7XG4gICAgfVxuICAgIGdldCBub2RlVHlwZSgpIHtcbiAgICAgICAgcmV0dXJuIDE7XG4gICAgfVxuICAgIC8vIERPTSBMZXZlbCAxIGFsaWFzZXNcbiAgICAvKipcbiAgICAgKiBTYW1lIGFzIHtAbGluayBuYW1lfS5cbiAgICAgKiBbRE9NIHNwZWNdKGh0dHBzOi8vZG9tLnNwZWMud2hhdHdnLm9yZyktY29tcGF0aWJsZSBhbGlhcy5cbiAgICAgKi9cbiAgICBnZXQgdGFnTmFtZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMubmFtZTtcbiAgICB9XG4gICAgc2V0IHRhZ05hbWUobmFtZSkge1xuICAgICAgICB0aGlzLm5hbWUgPSBuYW1lO1xuICAgIH1cbiAgICBnZXQgYXR0cmlidXRlcygpIHtcbiAgICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKHRoaXMuYXR0cmlicykubWFwKChuYW1lKSA9PiB7XG4gICAgICAgICAgICB2YXIgX2EsIF9iO1xuICAgICAgICAgICAgcmV0dXJuICh7XG4gICAgICAgICAgICAgICAgbmFtZSxcbiAgICAgICAgICAgICAgICB2YWx1ZTogdGhpcy5hdHRyaWJzW25hbWVdLFxuICAgICAgICAgICAgICAgIG5hbWVzcGFjZTogKF9hID0gdGhpc1tcIngtYXR0cmlic05hbWVzcGFjZVwiXSkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hW25hbWVdLFxuICAgICAgICAgICAgICAgIHByZWZpeDogKF9iID0gdGhpc1tcIngtYXR0cmlic1ByZWZpeFwiXSkgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iW25hbWVdLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cbn1cbi8qKlxuICogQHBhcmFtIG5vZGUgTm9kZSB0byBjaGVjay5cbiAqIEByZXR1cm5zIGB0cnVlYCBpZiB0aGUgbm9kZSBpcyBhIGBFbGVtZW50YCwgYGZhbHNlYCBvdGhlcndpc2UuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc1RhZyhub2RlKSB7XG4gICAgcmV0dXJuIGlzVGFnUmF3KG5vZGUpO1xufVxuLyoqXG4gKiBAcGFyYW0gbm9kZSBOb2RlIHRvIGNoZWNrLlxuICogQHJldHVybnMgYHRydWVgIGlmIHRoZSBub2RlIGhhcyB0aGUgdHlwZSBgQ0RBVEFgLCBgZmFsc2VgIG90aGVyd2lzZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzQ0RBVEEobm9kZSkge1xuICAgIHJldHVybiBub2RlLnR5cGUgPT09IEVsZW1lbnRUeXBlLkNEQVRBO1xufVxuLyoqXG4gKiBAcGFyYW0gbm9kZSBOb2RlIHRvIGNoZWNrLlxuICogQHJldHVybnMgYHRydWVgIGlmIHRoZSBub2RlIGhhcyB0aGUgdHlwZSBgVGV4dGAsIGBmYWxzZWAgb3RoZXJ3aXNlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNUZXh0KG5vZGUpIHtcbiAgICByZXR1cm4gbm9kZS50eXBlID09PSBFbGVtZW50VHlwZS5UZXh0O1xufVxuLyoqXG4gKiBAcGFyYW0gbm9kZSBOb2RlIHRvIGNoZWNrLlxuICogQHJldHVybnMgYHRydWVgIGlmIHRoZSBub2RlIGhhcyB0aGUgdHlwZSBgQ29tbWVudGAsIGBmYWxzZWAgb3RoZXJ3aXNlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNDb21tZW50KG5vZGUpIHtcbiAgICByZXR1cm4gbm9kZS50eXBlID09PSBFbGVtZW50VHlwZS5Db21tZW50O1xufVxuLyoqXG4gKiBAcGFyYW0gbm9kZSBOb2RlIHRvIGNoZWNrLlxuICogQHJldHVybnMgYHRydWVgIGlmIHRoZSBub2RlIGhhcyB0aGUgdHlwZSBgUHJvY2Vzc2luZ0luc3RydWN0aW9uYCwgYGZhbHNlYCBvdGhlcndpc2UuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0RpcmVjdGl2ZShub2RlKSB7XG4gICAgcmV0dXJuIG5vZGUudHlwZSA9PT0gRWxlbWVudFR5cGUuRGlyZWN0aXZlO1xufVxuLyoqXG4gKiBAcGFyYW0gbm9kZSBOb2RlIHRvIGNoZWNrLlxuICogQHJldHVybnMgYHRydWVgIGlmIHRoZSBub2RlIGhhcyB0aGUgdHlwZSBgUHJvY2Vzc2luZ0luc3RydWN0aW9uYCwgYGZhbHNlYCBvdGhlcndpc2UuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0RvY3VtZW50KG5vZGUpIHtcbiAgICByZXR1cm4gbm9kZS50eXBlID09PSBFbGVtZW50VHlwZS5Sb290O1xufVxuLyoqXG4gKiBAcGFyYW0gbm9kZSBOb2RlIHRvIGNoZWNrLlxuICogQHJldHVybnMgYHRydWVgIGlmIHRoZSBub2RlIGhhcyBjaGlsZHJlbiwgYGZhbHNlYCBvdGhlcndpc2UuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBoYXNDaGlsZHJlbihub2RlKSB7XG4gICAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChub2RlLCBcImNoaWxkcmVuXCIpO1xufVxuLyoqXG4gKiBDbG9uZSBhIG5vZGUsIGFuZCBvcHRpb25hbGx5IGl0cyBjaGlsZHJlbi5cbiAqXG4gKiBAcGFyYW0gcmVjdXJzaXZlIENsb25lIGNoaWxkIG5vZGVzIGFzIHdlbGwuXG4gKiBAcmV0dXJucyBBIGNsb25lIG9mIHRoZSBub2RlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY2xvbmVOb2RlKG5vZGUsIHJlY3Vyc2l2ZSA9IGZhbHNlKSB7XG4gICAgbGV0IHJlc3VsdDtcbiAgICBpZiAoaXNUZXh0KG5vZGUpKSB7XG4gICAgICAgIHJlc3VsdCA9IG5ldyBUZXh0KG5vZGUuZGF0YSk7XG4gICAgfVxuICAgIGVsc2UgaWYgKGlzQ29tbWVudChub2RlKSkge1xuICAgICAgICByZXN1bHQgPSBuZXcgQ29tbWVudChub2RlLmRhdGEpO1xuICAgIH1cbiAgICBlbHNlIGlmIChpc1RhZyhub2RlKSkge1xuICAgICAgICBjb25zdCBjaGlsZHJlbiA9IHJlY3Vyc2l2ZSA/IGNsb25lQ2hpbGRyZW4obm9kZS5jaGlsZHJlbikgOiBbXTtcbiAgICAgICAgY29uc3QgY2xvbmUgPSBuZXcgRWxlbWVudChub2RlLm5hbWUsIHsgLi4ubm9kZS5hdHRyaWJzIH0sIGNoaWxkcmVuKTtcbiAgICAgICAgY2hpbGRyZW4uZm9yRWFjaCgoY2hpbGQpID0+IChjaGlsZC5wYXJlbnQgPSBjbG9uZSkpO1xuICAgICAgICBpZiAobm9kZS5uYW1lc3BhY2UgIT0gbnVsbCkge1xuICAgICAgICAgICAgY2xvbmUubmFtZXNwYWNlID0gbm9kZS5uYW1lc3BhY2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5vZGVbXCJ4LWF0dHJpYnNOYW1lc3BhY2VcIl0pIHtcbiAgICAgICAgICAgIGNsb25lW1wieC1hdHRyaWJzTmFtZXNwYWNlXCJdID0geyAuLi5ub2RlW1wieC1hdHRyaWJzTmFtZXNwYWNlXCJdIH07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG5vZGVbXCJ4LWF0dHJpYnNQcmVmaXhcIl0pIHtcbiAgICAgICAgICAgIGNsb25lW1wieC1hdHRyaWJzUHJlZml4XCJdID0geyAuLi5ub2RlW1wieC1hdHRyaWJzUHJlZml4XCJdIH07XG4gICAgICAgIH1cbiAgICAgICAgcmVzdWx0ID0gY2xvbmU7XG4gICAgfVxuICAgIGVsc2UgaWYgKGlzQ0RBVEEobm9kZSkpIHtcbiAgICAgICAgY29uc3QgY2hpbGRyZW4gPSByZWN1cnNpdmUgPyBjbG9uZUNoaWxkcmVuKG5vZGUuY2hpbGRyZW4pIDogW107XG4gICAgICAgIGNvbnN0IGNsb25lID0gbmV3IENEQVRBKGNoaWxkcmVuKTtcbiAgICAgICAgY2hpbGRyZW4uZm9yRWFjaCgoY2hpbGQpID0+IChjaGlsZC5wYXJlbnQgPSBjbG9uZSkpO1xuICAgICAgICByZXN1bHQgPSBjbG9uZTtcbiAgICB9XG4gICAgZWxzZSBpZiAoaXNEb2N1bWVudChub2RlKSkge1xuICAgICAgICBjb25zdCBjaGlsZHJlbiA9IHJlY3Vyc2l2ZSA/IGNsb25lQ2hpbGRyZW4obm9kZS5jaGlsZHJlbikgOiBbXTtcbiAgICAgICAgY29uc3QgY2xvbmUgPSBuZXcgRG9jdW1lbnQoY2hpbGRyZW4pO1xuICAgICAgICBjaGlsZHJlbi5mb3JFYWNoKChjaGlsZCkgPT4gKGNoaWxkLnBhcmVudCA9IGNsb25lKSk7XG4gICAgICAgIGlmIChub2RlW1wieC1tb2RlXCJdKSB7XG4gICAgICAgICAgICBjbG9uZVtcIngtbW9kZVwiXSA9IG5vZGVbXCJ4LW1vZGVcIl07XG4gICAgICAgIH1cbiAgICAgICAgcmVzdWx0ID0gY2xvbmU7XG4gICAgfVxuICAgIGVsc2UgaWYgKGlzRGlyZWN0aXZlKG5vZGUpKSB7XG4gICAgICAgIGNvbnN0IGluc3RydWN0aW9uID0gbmV3IFByb2Nlc3NpbmdJbnN0cnVjdGlvbihub2RlLm5hbWUsIG5vZGUuZGF0YSk7XG4gICAgICAgIGlmIChub2RlW1wieC1uYW1lXCJdICE9IG51bGwpIHtcbiAgICAgICAgICAgIGluc3RydWN0aW9uW1wieC1uYW1lXCJdID0gbm9kZVtcIngtbmFtZVwiXTtcbiAgICAgICAgICAgIGluc3RydWN0aW9uW1wieC1wdWJsaWNJZFwiXSA9IG5vZGVbXCJ4LXB1YmxpY0lkXCJdO1xuICAgICAgICAgICAgaW5zdHJ1Y3Rpb25bXCJ4LXN5c3RlbUlkXCJdID0gbm9kZVtcIngtc3lzdGVtSWRcIl07XG4gICAgICAgIH1cbiAgICAgICAgcmVzdWx0ID0gaW5zdHJ1Y3Rpb247XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYE5vdCBpbXBsZW1lbnRlZCB5ZXQ6ICR7bm9kZS50eXBlfWApO1xuICAgIH1cbiAgICByZXN1bHQuc3RhcnRJbmRleCA9IG5vZGUuc3RhcnRJbmRleDtcbiAgICByZXN1bHQuZW5kSW5kZXggPSBub2RlLmVuZEluZGV4O1xuICAgIGlmIChub2RlLnNvdXJjZUNvZGVMb2NhdGlvbiAhPSBudWxsKSB7XG4gICAgICAgIHJlc3VsdC5zb3VyY2VDb2RlTG9jYXRpb24gPSBub2RlLnNvdXJjZUNvZGVMb2NhdGlvbjtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbn1cbmZ1bmN0aW9uIGNsb25lQ2hpbGRyZW4oY2hpbGRzKSB7XG4gICAgY29uc3QgY2hpbGRyZW4gPSBjaGlsZHMubWFwKChjaGlsZCkgPT4gY2xvbmVOb2RlKGNoaWxkLCB0cnVlKSk7XG4gICAgZm9yIChsZXQgaSA9IDE7IGkgPCBjaGlsZHJlbi5sZW5ndGg7IGkrKykge1xuICAgICAgICBjaGlsZHJlbltpXS5wcmV2ID0gY2hpbGRyZW5baSAtIDFdO1xuICAgICAgICBjaGlsZHJlbltpIC0gMV0ubmV4dCA9IGNoaWxkcmVuW2ldO1xuICAgIH1cbiAgICByZXR1cm4gY2hpbGRyZW47XG59XG4iLCAiaW1wb3J0IHsgRWxlbWVudFR5cGUgfSBmcm9tIFwiZG9tZWxlbWVudHR5cGVcIjtcbmltcG9ydCB7IEVsZW1lbnQsIFRleHQsIENvbW1lbnQsIENEQVRBLCBEb2N1bWVudCwgUHJvY2Vzc2luZ0luc3RydWN0aW9uLCB9IGZyb20gXCIuL25vZGUuanNcIjtcbmV4cG9ydCAqIGZyb20gXCIuL25vZGUuanNcIjtcbi8vIERlZmF1bHQgb3B0aW9uc1xuY29uc3QgZGVmYXVsdE9wdHMgPSB7XG4gICAgd2l0aFN0YXJ0SW5kaWNlczogZmFsc2UsXG4gICAgd2l0aEVuZEluZGljZXM6IGZhbHNlLFxuICAgIHhtbE1vZGU6IGZhbHNlLFxufTtcbmV4cG9ydCBjbGFzcyBEb21IYW5kbGVyIHtcbiAgICAvKipcbiAgICAgKiBAcGFyYW0gY2FsbGJhY2sgQ2FsbGVkIG9uY2UgcGFyc2luZyBoYXMgY29tcGxldGVkLlxuICAgICAqIEBwYXJhbSBvcHRpb25zIFNldHRpbmdzIGZvciB0aGUgaGFuZGxlci5cbiAgICAgKiBAcGFyYW0gZWxlbWVudENCIENhbGxiYWNrIHdoZW5ldmVyIGEgdGFnIGlzIGNsb3NlZC5cbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvcihjYWxsYmFjaywgb3B0aW9ucywgZWxlbWVudENCKSB7XG4gICAgICAgIC8qKiBUaGUgZWxlbWVudHMgb2YgdGhlIERPTSAqL1xuICAgICAgICB0aGlzLmRvbSA9IFtdO1xuICAgICAgICAvKiogVGhlIHJvb3QgZWxlbWVudCBmb3IgdGhlIERPTSAqL1xuICAgICAgICB0aGlzLnJvb3QgPSBuZXcgRG9jdW1lbnQodGhpcy5kb20pO1xuICAgICAgICAvKiogSW5kaWNhdGVkIHdoZXRoZXIgcGFyc2luZyBoYXMgYmVlbiBjb21wbGV0ZWQuICovXG4gICAgICAgIHRoaXMuZG9uZSA9IGZhbHNlO1xuICAgICAgICAvKiogU3RhY2sgb2Ygb3BlbiB0YWdzLiAqL1xuICAgICAgICB0aGlzLnRhZ1N0YWNrID0gW3RoaXMucm9vdF07XG4gICAgICAgIC8qKiBBIGRhdGEgbm9kZSB0aGF0IGlzIHN0aWxsIGJlaW5nIHdyaXR0ZW4gdG8uICovXG4gICAgICAgIHRoaXMubGFzdE5vZGUgPSBudWxsO1xuICAgICAgICAvKiogUmVmZXJlbmNlIHRvIHRoZSBwYXJzZXIgaW5zdGFuY2UuIFVzZWQgZm9yIGxvY2F0aW9uIGluZm9ybWF0aW9uLiAqL1xuICAgICAgICB0aGlzLnBhcnNlciA9IG51bGw7XG4gICAgICAgIC8vIE1ha2UgaXQgcG9zc2libGUgdG8gc2tpcCBhcmd1bWVudHMsIGZvciBiYWNrd2FyZHMtY29tcGF0aWJpbGl0eVxuICAgICAgICBpZiAodHlwZW9mIG9wdGlvbnMgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgZWxlbWVudENCID0gb3B0aW9ucztcbiAgICAgICAgICAgIG9wdGlvbnMgPSBkZWZhdWx0T3B0cztcbiAgICAgICAgfVxuICAgICAgICBpZiAodHlwZW9mIGNhbGxiYWNrID09PSBcIm9iamVjdFwiKSB7XG4gICAgICAgICAgICBvcHRpb25zID0gY2FsbGJhY2s7XG4gICAgICAgICAgICBjYWxsYmFjayA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNhbGxiYWNrID0gY2FsbGJhY2sgIT09IG51bGwgJiYgY2FsbGJhY2sgIT09IHZvaWQgMCA/IGNhbGxiYWNrIDogbnVsbDtcbiAgICAgICAgdGhpcy5vcHRpb25zID0gb3B0aW9ucyAhPT0gbnVsbCAmJiBvcHRpb25zICE9PSB2b2lkIDAgPyBvcHRpb25zIDogZGVmYXVsdE9wdHM7XG4gICAgICAgIHRoaXMuZWxlbWVudENCID0gZWxlbWVudENCICE9PSBudWxsICYmIGVsZW1lbnRDQiAhPT0gdm9pZCAwID8gZWxlbWVudENCIDogbnVsbDtcbiAgICB9XG4gICAgb25wYXJzZXJpbml0KHBhcnNlcikge1xuICAgICAgICB0aGlzLnBhcnNlciA9IHBhcnNlcjtcbiAgICB9XG4gICAgLy8gUmVzZXRzIHRoZSBoYW5kbGVyIGJhY2sgdG8gc3RhcnRpbmcgc3RhdGVcbiAgICBvbnJlc2V0KCkge1xuICAgICAgICB0aGlzLmRvbSA9IFtdO1xuICAgICAgICB0aGlzLnJvb3QgPSBuZXcgRG9jdW1lbnQodGhpcy5kb20pO1xuICAgICAgICB0aGlzLmRvbmUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy50YWdTdGFjayA9IFt0aGlzLnJvb3RdO1xuICAgICAgICB0aGlzLmxhc3ROb2RlID0gbnVsbDtcbiAgICAgICAgdGhpcy5wYXJzZXIgPSBudWxsO1xuICAgIH1cbiAgICAvLyBTaWduYWxzIHRoZSBoYW5kbGVyIHRoYXQgcGFyc2luZyBpcyBkb25lXG4gICAgb25lbmQoKSB7XG4gICAgICAgIGlmICh0aGlzLmRvbmUpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIHRoaXMuZG9uZSA9IHRydWU7XG4gICAgICAgIHRoaXMucGFyc2VyID0gbnVsbDtcbiAgICAgICAgdGhpcy5oYW5kbGVDYWxsYmFjayhudWxsKTtcbiAgICB9XG4gICAgb25lcnJvcihlcnJvcikge1xuICAgICAgICB0aGlzLmhhbmRsZUNhbGxiYWNrKGVycm9yKTtcbiAgICB9XG4gICAgb25jbG9zZXRhZygpIHtcbiAgICAgICAgdGhpcy5sYXN0Tm9kZSA9IG51bGw7XG4gICAgICAgIGNvbnN0IGVsZW0gPSB0aGlzLnRhZ1N0YWNrLnBvcCgpO1xuICAgICAgICBpZiAodGhpcy5vcHRpb25zLndpdGhFbmRJbmRpY2VzKSB7XG4gICAgICAgICAgICBlbGVtLmVuZEluZGV4ID0gdGhpcy5wYXJzZXIuZW5kSW5kZXg7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuZWxlbWVudENCKVxuICAgICAgICAgICAgdGhpcy5lbGVtZW50Q0IoZWxlbSk7XG4gICAgfVxuICAgIG9ub3BlbnRhZyhuYW1lLCBhdHRyaWJzKSB7XG4gICAgICAgIGNvbnN0IHR5cGUgPSB0aGlzLm9wdGlvbnMueG1sTW9kZSA/IEVsZW1lbnRUeXBlLlRhZyA6IHVuZGVmaW5lZDtcbiAgICAgICAgY29uc3QgZWxlbWVudCA9IG5ldyBFbGVtZW50KG5hbWUsIGF0dHJpYnMsIHVuZGVmaW5lZCwgdHlwZSk7XG4gICAgICAgIHRoaXMuYWRkTm9kZShlbGVtZW50KTtcbiAgICAgICAgdGhpcy50YWdTdGFjay5wdXNoKGVsZW1lbnQpO1xuICAgIH1cbiAgICBvbnRleHQoZGF0YSkge1xuICAgICAgICBjb25zdCB7IGxhc3ROb2RlIH0gPSB0aGlzO1xuICAgICAgICBpZiAobGFzdE5vZGUgJiYgbGFzdE5vZGUudHlwZSA9PT0gRWxlbWVudFR5cGUuVGV4dCkge1xuICAgICAgICAgICAgbGFzdE5vZGUuZGF0YSArPSBkYXRhO1xuICAgICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy53aXRoRW5kSW5kaWNlcykge1xuICAgICAgICAgICAgICAgIGxhc3ROb2RlLmVuZEluZGV4ID0gdGhpcy5wYXJzZXIuZW5kSW5kZXg7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBub2RlID0gbmV3IFRleHQoZGF0YSk7XG4gICAgICAgICAgICB0aGlzLmFkZE5vZGUobm9kZSk7XG4gICAgICAgICAgICB0aGlzLmxhc3ROb2RlID0gbm9kZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBvbmNvbW1lbnQoZGF0YSkge1xuICAgICAgICBpZiAodGhpcy5sYXN0Tm9kZSAmJiB0aGlzLmxhc3ROb2RlLnR5cGUgPT09IEVsZW1lbnRUeXBlLkNvbW1lbnQpIHtcbiAgICAgICAgICAgIHRoaXMubGFzdE5vZGUuZGF0YSArPSBkYXRhO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG5vZGUgPSBuZXcgQ29tbWVudChkYXRhKTtcbiAgICAgICAgdGhpcy5hZGROb2RlKG5vZGUpO1xuICAgICAgICB0aGlzLmxhc3ROb2RlID0gbm9kZTtcbiAgICB9XG4gICAgb25jb21tZW50ZW5kKCkge1xuICAgICAgICB0aGlzLmxhc3ROb2RlID0gbnVsbDtcbiAgICB9XG4gICAgb25jZGF0YXN0YXJ0KCkge1xuICAgICAgICBjb25zdCB0ZXh0ID0gbmV3IFRleHQoXCJcIik7XG4gICAgICAgIGNvbnN0IG5vZGUgPSBuZXcgQ0RBVEEoW3RleHRdKTtcbiAgICAgICAgdGhpcy5hZGROb2RlKG5vZGUpO1xuICAgICAgICB0ZXh0LnBhcmVudCA9IG5vZGU7XG4gICAgICAgIHRoaXMubGFzdE5vZGUgPSB0ZXh0O1xuICAgIH1cbiAgICBvbmNkYXRhZW5kKCkge1xuICAgICAgICB0aGlzLmxhc3ROb2RlID0gbnVsbDtcbiAgICB9XG4gICAgb25wcm9jZXNzaW5naW5zdHJ1Y3Rpb24obmFtZSwgZGF0YSkge1xuICAgICAgICBjb25zdCBub2RlID0gbmV3IFByb2Nlc3NpbmdJbnN0cnVjdGlvbihuYW1lLCBkYXRhKTtcbiAgICAgICAgdGhpcy5hZGROb2RlKG5vZGUpO1xuICAgIH1cbiAgICBoYW5kbGVDYWxsYmFjayhlcnJvcikge1xuICAgICAgICBpZiAodHlwZW9mIHRoaXMuY2FsbGJhY2sgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgICAgdGhpcy5jYWxsYmFjayhlcnJvciwgdGhpcy5kb20pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGVycm9yKSB7XG4gICAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgfVxuICAgIH1cbiAgICBhZGROb2RlKG5vZGUpIHtcbiAgICAgICAgY29uc3QgcGFyZW50ID0gdGhpcy50YWdTdGFja1t0aGlzLnRhZ1N0YWNrLmxlbmd0aCAtIDFdO1xuICAgICAgICBjb25zdCBwcmV2aW91c1NpYmxpbmcgPSBwYXJlbnQuY2hpbGRyZW5bcGFyZW50LmNoaWxkcmVuLmxlbmd0aCAtIDFdO1xuICAgICAgICBpZiAodGhpcy5vcHRpb25zLndpdGhTdGFydEluZGljZXMpIHtcbiAgICAgICAgICAgIG5vZGUuc3RhcnRJbmRleCA9IHRoaXMucGFyc2VyLnN0YXJ0SW5kZXg7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy53aXRoRW5kSW5kaWNlcykge1xuICAgICAgICAgICAgbm9kZS5lbmRJbmRleCA9IHRoaXMucGFyc2VyLmVuZEluZGV4O1xuICAgICAgICB9XG4gICAgICAgIHBhcmVudC5jaGlsZHJlbi5wdXNoKG5vZGUpO1xuICAgICAgICBpZiAocHJldmlvdXNTaWJsaW5nKSB7XG4gICAgICAgICAgICBub2RlLnByZXYgPSBwcmV2aW91c1NpYmxpbmc7XG4gICAgICAgICAgICBwcmV2aW91c1NpYmxpbmcubmV4dCA9IG5vZGU7XG4gICAgICAgIH1cbiAgICAgICAgbm9kZS5wYXJlbnQgPSBwYXJlbnQ7XG4gICAgICAgIHRoaXMubGFzdE5vZGUgPSBudWxsO1xuICAgIH1cbn1cbmV4cG9ydCBkZWZhdWx0IERvbUhhbmRsZXI7XG4iLCBudWxsLCBudWxsLCBudWxsLCBudWxsLCBudWxsLCBudWxsLCBudWxsLCBudWxsLCAiZXhwb3J0IGNvbnN0IGVsZW1lbnROYW1lcyA9IG5ldyBNYXAoW1xuICAgIFwiYWx0R2x5cGhcIixcbiAgICBcImFsdEdseXBoRGVmXCIsXG4gICAgXCJhbHRHbHlwaEl0ZW1cIixcbiAgICBcImFuaW1hdGVDb2xvclwiLFxuICAgIFwiYW5pbWF0ZU1vdGlvblwiLFxuICAgIFwiYW5pbWF0ZVRyYW5zZm9ybVwiLFxuICAgIFwiY2xpcFBhdGhcIixcbiAgICBcImZlQmxlbmRcIixcbiAgICBcImZlQ29sb3JNYXRyaXhcIixcbiAgICBcImZlQ29tcG9uZW50VHJhbnNmZXJcIixcbiAgICBcImZlQ29tcG9zaXRlXCIsXG4gICAgXCJmZUNvbnZvbHZlTWF0cml4XCIsXG4gICAgXCJmZURpZmZ1c2VMaWdodGluZ1wiLFxuICAgIFwiZmVEaXNwbGFjZW1lbnRNYXBcIixcbiAgICBcImZlRGlzdGFudExpZ2h0XCIsXG4gICAgXCJmZURyb3BTaGFkb3dcIixcbiAgICBcImZlRmxvb2RcIixcbiAgICBcImZlRnVuY0FcIixcbiAgICBcImZlRnVuY0JcIixcbiAgICBcImZlRnVuY0dcIixcbiAgICBcImZlRnVuY1JcIixcbiAgICBcImZlR2F1c3NpYW5CbHVyXCIsXG4gICAgXCJmZUltYWdlXCIsXG4gICAgXCJmZU1lcmdlXCIsXG4gICAgXCJmZU1lcmdlTm9kZVwiLFxuICAgIFwiZmVNb3JwaG9sb2d5XCIsXG4gICAgXCJmZU9mZnNldFwiLFxuICAgIFwiZmVQb2ludExpZ2h0XCIsXG4gICAgXCJmZVNwZWN1bGFyTGlnaHRpbmdcIixcbiAgICBcImZlU3BvdExpZ2h0XCIsXG4gICAgXCJmZVRpbGVcIixcbiAgICBcImZlVHVyYnVsZW5jZVwiLFxuICAgIFwiZm9yZWlnbk9iamVjdFwiLFxuICAgIFwiZ2x5cGhSZWZcIixcbiAgICBcImxpbmVhckdyYWRpZW50XCIsXG4gICAgXCJyYWRpYWxHcmFkaWVudFwiLFxuICAgIFwidGV4dFBhdGhcIixcbl0ubWFwKCh2YWwpID0+IFt2YWwudG9Mb3dlckNhc2UoKSwgdmFsXSkpO1xuZXhwb3J0IGNvbnN0IGF0dHJpYnV0ZU5hbWVzID0gbmV3IE1hcChbXG4gICAgXCJkZWZpbml0aW9uVVJMXCIsXG4gICAgXCJhdHRyaWJ1dGVOYW1lXCIsXG4gICAgXCJhdHRyaWJ1dGVUeXBlXCIsXG4gICAgXCJiYXNlRnJlcXVlbmN5XCIsXG4gICAgXCJiYXNlUHJvZmlsZVwiLFxuICAgIFwiY2FsY01vZGVcIixcbiAgICBcImNsaXBQYXRoVW5pdHNcIixcbiAgICBcImRpZmZ1c2VDb25zdGFudFwiLFxuICAgIFwiZWRnZU1vZGVcIixcbiAgICBcImZpbHRlclVuaXRzXCIsXG4gICAgXCJnbHlwaFJlZlwiLFxuICAgIFwiZ3JhZGllbnRUcmFuc2Zvcm1cIixcbiAgICBcImdyYWRpZW50VW5pdHNcIixcbiAgICBcImtlcm5lbE1hdHJpeFwiLFxuICAgIFwia2VybmVsVW5pdExlbmd0aFwiLFxuICAgIFwia2V5UG9pbnRzXCIsXG4gICAgXCJrZXlTcGxpbmVzXCIsXG4gICAgXCJrZXlUaW1lc1wiLFxuICAgIFwibGVuZ3RoQWRqdXN0XCIsXG4gICAgXCJsaW1pdGluZ0NvbmVBbmdsZVwiLFxuICAgIFwibWFya2VySGVpZ2h0XCIsXG4gICAgXCJtYXJrZXJVbml0c1wiLFxuICAgIFwibWFya2VyV2lkdGhcIixcbiAgICBcIm1hc2tDb250ZW50VW5pdHNcIixcbiAgICBcIm1hc2tVbml0c1wiLFxuICAgIFwibnVtT2N0YXZlc1wiLFxuICAgIFwicGF0aExlbmd0aFwiLFxuICAgIFwicGF0dGVybkNvbnRlbnRVbml0c1wiLFxuICAgIFwicGF0dGVyblRyYW5zZm9ybVwiLFxuICAgIFwicGF0dGVyblVuaXRzXCIsXG4gICAgXCJwb2ludHNBdFhcIixcbiAgICBcInBvaW50c0F0WVwiLFxuICAgIFwicG9pbnRzQXRaXCIsXG4gICAgXCJwcmVzZXJ2ZUFscGhhXCIsXG4gICAgXCJwcmVzZXJ2ZUFzcGVjdFJhdGlvXCIsXG4gICAgXCJwcmltaXRpdmVVbml0c1wiLFxuICAgIFwicmVmWFwiLFxuICAgIFwicmVmWVwiLFxuICAgIFwicmVwZWF0Q291bnRcIixcbiAgICBcInJlcGVhdER1clwiLFxuICAgIFwicmVxdWlyZWRFeHRlbnNpb25zXCIsXG4gICAgXCJyZXF1aXJlZEZlYXR1cmVzXCIsXG4gICAgXCJzcGVjdWxhckNvbnN0YW50XCIsXG4gICAgXCJzcGVjdWxhckV4cG9uZW50XCIsXG4gICAgXCJzcHJlYWRNZXRob2RcIixcbiAgICBcInN0YXJ0T2Zmc2V0XCIsXG4gICAgXCJzdGREZXZpYXRpb25cIixcbiAgICBcInN0aXRjaFRpbGVzXCIsXG4gICAgXCJzdXJmYWNlU2NhbGVcIixcbiAgICBcInN5c3RlbUxhbmd1YWdlXCIsXG4gICAgXCJ0YWJsZVZhbHVlc1wiLFxuICAgIFwidGFyZ2V0WFwiLFxuICAgIFwidGFyZ2V0WVwiLFxuICAgIFwidGV4dExlbmd0aFwiLFxuICAgIFwidmlld0JveFwiLFxuICAgIFwidmlld1RhcmdldFwiLFxuICAgIFwieENoYW5uZWxTZWxlY3RvclwiLFxuICAgIFwieUNoYW5uZWxTZWxlY3RvclwiLFxuICAgIFwiem9vbUFuZFBhblwiLFxuXS5tYXAoKHZhbCkgPT4gW3ZhbC50b0xvd2VyQ2FzZSgpLCB2YWxdKSk7XG4iLCAiLypcbiAqIE1vZHVsZSBkZXBlbmRlbmNpZXNcbiAqL1xuaW1wb3J0ICogYXMgRWxlbWVudFR5cGUgZnJvbSBcImRvbWVsZW1lbnR0eXBlXCI7XG5pbXBvcnQgeyBlbmNvZGVYTUwsIGVzY2FwZUF0dHJpYnV0ZSwgZXNjYXBlVGV4dCB9IGZyb20gXCJlbnRpdGllc1wiO1xuLyoqXG4gKiBNaXhlZC1jYXNlIFNWRyBhbmQgTWF0aE1MIHRhZ3MgJiBhdHRyaWJ1dGVzXG4gKiByZWNvZ25pemVkIGJ5IHRoZSBIVE1MIHBhcnNlci5cbiAqXG4gKiBAc2VlIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL3BhcnNpbmcuaHRtbCNwYXJzaW5nLW1haW4taW5mb3JlaWduXG4gKi9cbmltcG9ydCB7IGVsZW1lbnROYW1lcywgYXR0cmlidXRlTmFtZXMgfSBmcm9tIFwiLi9mb3JlaWduTmFtZXMuanNcIjtcbmNvbnN0IHVuZW5jb2RlZEVsZW1lbnRzID0gbmV3IFNldChbXG4gICAgXCJzdHlsZVwiLFxuICAgIFwic2NyaXB0XCIsXG4gICAgXCJ4bXBcIixcbiAgICBcImlmcmFtZVwiLFxuICAgIFwibm9lbWJlZFwiLFxuICAgIFwibm9mcmFtZXNcIixcbiAgICBcInBsYWludGV4dFwiLFxuICAgIFwibm9zY3JpcHRcIixcbl0pO1xuZnVuY3Rpb24gcmVwbGFjZVF1b3Rlcyh2YWx1ZSkge1xuICAgIHJldHVybiB2YWx1ZS5yZXBsYWNlKC9cIi9nLCBcIiZxdW90O1wiKTtcbn1cbi8qKlxuICogRm9ybWF0IGF0dHJpYnV0ZXNcbiAqL1xuZnVuY3Rpb24gZm9ybWF0QXR0cmlidXRlcyhhdHRyaWJ1dGVzLCBvcHRzKSB7XG4gICAgdmFyIF9hO1xuICAgIGlmICghYXR0cmlidXRlcylcbiAgICAgICAgcmV0dXJuO1xuICAgIGNvbnN0IGVuY29kZSA9ICgoX2EgPSBvcHRzLmVuY29kZUVudGl0aWVzKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBvcHRzLmRlY29kZUVudGl0aWVzKSA9PT0gZmFsc2VcbiAgICAgICAgPyByZXBsYWNlUXVvdGVzXG4gICAgICAgIDogb3B0cy54bWxNb2RlIHx8IG9wdHMuZW5jb2RlRW50aXRpZXMgIT09IFwidXRmOFwiXG4gICAgICAgICAgICA/IGVuY29kZVhNTFxuICAgICAgICAgICAgOiBlc2NhcGVBdHRyaWJ1dGU7XG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKGF0dHJpYnV0ZXMpXG4gICAgICAgIC5tYXAoKGtleSkgPT4ge1xuICAgICAgICB2YXIgX2EsIF9iO1xuICAgICAgICBjb25zdCB2YWx1ZSA9IChfYSA9IGF0dHJpYnV0ZXNba2V5XSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogXCJcIjtcbiAgICAgICAgaWYgKG9wdHMueG1sTW9kZSA9PT0gXCJmb3JlaWduXCIpIHtcbiAgICAgICAgICAgIC8qIEZpeCB1cCBtaXhlZC1jYXNlIGF0dHJpYnV0ZSBuYW1lcyAqL1xuICAgICAgICAgICAga2V5ID0gKF9iID0gYXR0cmlidXRlTmFtZXMuZ2V0KGtleSkpICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6IGtleTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIW9wdHMuZW1wdHlBdHRycyAmJiAhb3B0cy54bWxNb2RlICYmIHZhbHVlID09PSBcIlwiKSB7XG4gICAgICAgICAgICByZXR1cm4ga2V5O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBgJHtrZXl9PVwiJHtlbmNvZGUodmFsdWUpfVwiYDtcbiAgICB9KVxuICAgICAgICAuam9pbihcIiBcIik7XG59XG4vKipcbiAqIFNlbGYtZW5jbG9zaW5nIHRhZ3NcbiAqL1xuY29uc3Qgc2luZ2xlVGFnID0gbmV3IFNldChbXG4gICAgXCJhcmVhXCIsXG4gICAgXCJiYXNlXCIsXG4gICAgXCJiYXNlZm9udFwiLFxuICAgIFwiYnJcIixcbiAgICBcImNvbFwiLFxuICAgIFwiY29tbWFuZFwiLFxuICAgIFwiZW1iZWRcIixcbiAgICBcImZyYW1lXCIsXG4gICAgXCJoclwiLFxuICAgIFwiaW1nXCIsXG4gICAgXCJpbnB1dFwiLFxuICAgIFwiaXNpbmRleFwiLFxuICAgIFwia2V5Z2VuXCIsXG4gICAgXCJsaW5rXCIsXG4gICAgXCJtZXRhXCIsXG4gICAgXCJwYXJhbVwiLFxuICAgIFwic291cmNlXCIsXG4gICAgXCJ0cmFja1wiLFxuICAgIFwid2JyXCIsXG5dKTtcbi8qKlxuICogUmVuZGVycyBhIERPTSBub2RlIG9yIGFuIGFycmF5IG9mIERPTSBub2RlcyB0byBhIHN0cmluZy5cbiAqXG4gKiBDYW4gYmUgdGhvdWdodCBvZiBhcyB0aGUgZXF1aXZhbGVudCBvZiB0aGUgYG91dGVySFRNTGAgb2YgdGhlIHBhc3NlZCBub2RlKHMpLlxuICpcbiAqIEBwYXJhbSBub2RlIE5vZGUgdG8gYmUgcmVuZGVyZWQuXG4gKiBAcGFyYW0gb3B0aW9ucyBDaGFuZ2VzIHNlcmlhbGl6YXRpb24gYmVoYXZpb3JcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlbmRlcihub2RlLCBvcHRpb25zID0ge30pIHtcbiAgICBjb25zdCBub2RlcyA9IFwibGVuZ3RoXCIgaW4gbm9kZSA/IG5vZGUgOiBbbm9kZV07XG4gICAgbGV0IG91dHB1dCA9IFwiXCI7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBub2Rlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBvdXRwdXQgKz0gcmVuZGVyTm9kZShub2Rlc1tpXSwgb3B0aW9ucyk7XG4gICAgfVxuICAgIHJldHVybiBvdXRwdXQ7XG59XG5leHBvcnQgZGVmYXVsdCByZW5kZXI7XG5mdW5jdGlvbiByZW5kZXJOb2RlKG5vZGUsIG9wdGlvbnMpIHtcbiAgICBzd2l0Y2ggKG5vZGUudHlwZSkge1xuICAgICAgICBjYXNlIEVsZW1lbnRUeXBlLlJvb3Q6XG4gICAgICAgICAgICByZXR1cm4gcmVuZGVyKG5vZGUuY2hpbGRyZW4sIG9wdGlvbnMpO1xuICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIFdlIGRvbid0IHVzZSBgRG9jdHlwZWAgeWV0XG4gICAgICAgIGNhc2UgRWxlbWVudFR5cGUuRG9jdHlwZTpcbiAgICAgICAgY2FzZSBFbGVtZW50VHlwZS5EaXJlY3RpdmU6XG4gICAgICAgICAgICByZXR1cm4gcmVuZGVyRGlyZWN0aXZlKG5vZGUpO1xuICAgICAgICBjYXNlIEVsZW1lbnRUeXBlLkNvbW1lbnQ6XG4gICAgICAgICAgICByZXR1cm4gcmVuZGVyQ29tbWVudChub2RlKTtcbiAgICAgICAgY2FzZSBFbGVtZW50VHlwZS5DREFUQTpcbiAgICAgICAgICAgIHJldHVybiByZW5kZXJDZGF0YShub2RlKTtcbiAgICAgICAgY2FzZSBFbGVtZW50VHlwZS5TY3JpcHQ6XG4gICAgICAgIGNhc2UgRWxlbWVudFR5cGUuU3R5bGU6XG4gICAgICAgIGNhc2UgRWxlbWVudFR5cGUuVGFnOlxuICAgICAgICAgICAgcmV0dXJuIHJlbmRlclRhZyhub2RlLCBvcHRpb25zKTtcbiAgICAgICAgY2FzZSBFbGVtZW50VHlwZS5UZXh0OlxuICAgICAgICAgICAgcmV0dXJuIHJlbmRlclRleHQobm9kZSwgb3B0aW9ucyk7XG4gICAgfVxufVxuY29uc3QgZm9yZWlnbk1vZGVJbnRlZ3JhdGlvblBvaW50cyA9IG5ldyBTZXQoW1xuICAgIFwibWlcIixcbiAgICBcIm1vXCIsXG4gICAgXCJtblwiLFxuICAgIFwibXNcIixcbiAgICBcIm10ZXh0XCIsXG4gICAgXCJhbm5vdGF0aW9uLXhtbFwiLFxuICAgIFwiZm9yZWlnbk9iamVjdFwiLFxuICAgIFwiZGVzY1wiLFxuICAgIFwidGl0bGVcIixcbl0pO1xuY29uc3QgZm9yZWlnbkVsZW1lbnRzID0gbmV3IFNldChbXCJzdmdcIiwgXCJtYXRoXCJdKTtcbmZ1bmN0aW9uIHJlbmRlclRhZyhlbGVtLCBvcHRzKSB7XG4gICAgdmFyIF9hO1xuICAgIC8vIEhhbmRsZSBTVkcgLyBNYXRoTUwgaW4gSFRNTFxuICAgIGlmIChvcHRzLnhtbE1vZGUgPT09IFwiZm9yZWlnblwiKSB7XG4gICAgICAgIC8qIEZpeCB1cCBtaXhlZC1jYXNlIGVsZW1lbnQgbmFtZXMgKi9cbiAgICAgICAgZWxlbS5uYW1lID0gKF9hID0gZWxlbWVudE5hbWVzLmdldChlbGVtLm5hbWUpKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBlbGVtLm5hbWU7XG4gICAgICAgIC8qIEV4aXQgZm9yZWlnbiBtb2RlIGF0IGludGVncmF0aW9uIHBvaW50cyAqL1xuICAgICAgICBpZiAoZWxlbS5wYXJlbnQgJiZcbiAgICAgICAgICAgIGZvcmVpZ25Nb2RlSW50ZWdyYXRpb25Qb2ludHMuaGFzKGVsZW0ucGFyZW50Lm5hbWUpKSB7XG4gICAgICAgICAgICBvcHRzID0geyAuLi5vcHRzLCB4bWxNb2RlOiBmYWxzZSB9O1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmICghb3B0cy54bWxNb2RlICYmIGZvcmVpZ25FbGVtZW50cy5oYXMoZWxlbS5uYW1lKSkge1xuICAgICAgICBvcHRzID0geyAuLi5vcHRzLCB4bWxNb2RlOiBcImZvcmVpZ25cIiB9O1xuICAgIH1cbiAgICBsZXQgdGFnID0gYDwke2VsZW0ubmFtZX1gO1xuICAgIGNvbnN0IGF0dHJpYnMgPSBmb3JtYXRBdHRyaWJ1dGVzKGVsZW0uYXR0cmlicywgb3B0cyk7XG4gICAgaWYgKGF0dHJpYnMpIHtcbiAgICAgICAgdGFnICs9IGAgJHthdHRyaWJzfWA7XG4gICAgfVxuICAgIGlmIChlbGVtLmNoaWxkcmVuLmxlbmd0aCA9PT0gMCAmJlxuICAgICAgICAob3B0cy54bWxNb2RlXG4gICAgICAgICAgICA/IC8vIEluIFhNTCBtb2RlIG9yIGZvcmVpZ24gbW9kZSwgYW5kIHVzZXIgaGFzbid0IGV4cGxpY2l0bHkgdHVybmVkIG9mZiBzZWxmLWNsb3NpbmcgdGFnc1xuICAgICAgICAgICAgICAgIG9wdHMuc2VsZkNsb3NpbmdUYWdzICE9PSBmYWxzZVxuICAgICAgICAgICAgOiAvLyBVc2VyIGV4cGxpY2l0bHkgYXNrZWQgZm9yIHNlbGYtY2xvc2luZyB0YWdzLCBldmVuIGluIEhUTUwgbW9kZVxuICAgICAgICAgICAgICAgIG9wdHMuc2VsZkNsb3NpbmdUYWdzICYmIHNpbmdsZVRhZy5oYXMoZWxlbS5uYW1lKSkpIHtcbiAgICAgICAgaWYgKCFvcHRzLnhtbE1vZGUpXG4gICAgICAgICAgICB0YWcgKz0gXCIgXCI7XG4gICAgICAgIHRhZyArPSBcIi8+XCI7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICB0YWcgKz0gXCI+XCI7XG4gICAgICAgIGlmIChlbGVtLmNoaWxkcmVuLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHRhZyArPSByZW5kZXIoZWxlbS5jaGlsZHJlbiwgb3B0cyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9wdHMueG1sTW9kZSB8fCAhc2luZ2xlVGFnLmhhcyhlbGVtLm5hbWUpKSB7XG4gICAgICAgICAgICB0YWcgKz0gYDwvJHtlbGVtLm5hbWV9PmA7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRhZztcbn1cbmZ1bmN0aW9uIHJlbmRlckRpcmVjdGl2ZShlbGVtKSB7XG4gICAgcmV0dXJuIGA8JHtlbGVtLmRhdGF9PmA7XG59XG5mdW5jdGlvbiByZW5kZXJUZXh0KGVsZW0sIG9wdHMpIHtcbiAgICB2YXIgX2E7XG4gICAgbGV0IGRhdGEgPSBlbGVtLmRhdGEgfHwgXCJcIjtcbiAgICAvLyBJZiBlbnRpdGllcyB3ZXJlbid0IGRlY29kZWQsIG5vIG5lZWQgdG8gZW5jb2RlIHRoZW0gYmFja1xuICAgIGlmICgoKF9hID0gb3B0cy5lbmNvZGVFbnRpdGllcykgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogb3B0cy5kZWNvZGVFbnRpdGllcykgIT09IGZhbHNlICYmXG4gICAgICAgICEoIW9wdHMueG1sTW9kZSAmJlxuICAgICAgICAgICAgZWxlbS5wYXJlbnQgJiZcbiAgICAgICAgICAgIHVuZW5jb2RlZEVsZW1lbnRzLmhhcyhlbGVtLnBhcmVudC5uYW1lKSkpIHtcbiAgICAgICAgZGF0YSA9XG4gICAgICAgICAgICBvcHRzLnhtbE1vZGUgfHwgb3B0cy5lbmNvZGVFbnRpdGllcyAhPT0gXCJ1dGY4XCJcbiAgICAgICAgICAgICAgICA/IGVuY29kZVhNTChkYXRhKVxuICAgICAgICAgICAgICAgIDogZXNjYXBlVGV4dChkYXRhKTtcbiAgICB9XG4gICAgcmV0dXJuIGRhdGE7XG59XG5mdW5jdGlvbiByZW5kZXJDZGF0YShlbGVtKSB7XG4gICAgcmV0dXJuIGA8IVtDREFUQVske2VsZW0uY2hpbGRyZW5bMF0uZGF0YX1dXT5gO1xufVxuZnVuY3Rpb24gcmVuZGVyQ29tbWVudChlbGVtKSB7XG4gICAgcmV0dXJuIGA8IS0tJHtlbGVtLmRhdGF9LS0+YDtcbn1cbiIsIG51bGwsIG51bGwsIG51bGwsIG51bGwsIG51bGwsIG51bGwsIG51bGwsIG51bGwsICJpbXBvcnQgdHlwZSB7IEJhc2ljQWNjZXB0ZWRFbGVtcyB9IGZyb20gJy4vdHlwZXMuanMnO1xuaW1wb3J0IHR5cGUgeyBDaGVlcmlvQVBJIH0gZnJvbSAnLi9sb2FkLmpzJztcbmltcG9ydCB0eXBlIHsgQ2hlZXJpbyB9IGZyb20gJy4vY2hlZXJpby5qcyc7XG5pbXBvcnQgdHlwZSB7IEFueU5vZGUsIERvY3VtZW50IH0gZnJvbSAnZG9taGFuZGxlcic7XG5pbXBvcnQgeyB0ZXh0Q29udGVudCB9IGZyb20gJ2RvbXV0aWxzJztcbmltcG9ydCB7XG4gIHR5cGUgSW50ZXJuYWxPcHRpb25zLFxuICB0eXBlIENoZWVyaW9PcHRpb25zLFxuICBmbGF0dGVuT3B0aW9ucyBhcyBmbGF0dGVuT3B0aW9ucyxcbn0gZnJvbSAnLi9vcHRpb25zLmpzJztcbmltcG9ydCB0eXBlIHsgRXh0cmFjdGVkTWFwLCBFeHRyYWN0TWFwIH0gZnJvbSAnLi9hcGkvZXh0cmFjdC5qcyc7XG5cbi8qKlxuICogSGVscGVyIGZ1bmN0aW9uIHRvIHJlbmRlciBhIERPTS5cbiAqXG4gKiBAcGFyYW0gdGhhdCAtIENoZWVyaW8gaW5zdGFuY2UgdG8gcmVuZGVyLlxuICogQHBhcmFtIGRvbSAtIFRoZSBET00gdG8gcmVuZGVyLiBEZWZhdWx0cyB0byBgdGhhdGAncyByb290LlxuICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25zIGZvciByZW5kZXJpbmcuXG4gKiBAcmV0dXJucyBUaGUgcmVuZGVyZWQgZG9jdW1lbnQuXG4gKi9cbmZ1bmN0aW9uIHJlbmRlcihcbiAgdGhhdDogQ2hlZXJpb0FQSSxcbiAgZG9tOiBCYXNpY0FjY2VwdGVkRWxlbXM8QW55Tm9kZT4gfCB1bmRlZmluZWQsXG4gIG9wdGlvbnM6IEludGVybmFsT3B0aW9ucyxcbik6IHN0cmluZyB7XG4gIGlmICghdGhhdCkgcmV0dXJuICcnO1xuXG4gIHJldHVybiB0aGF0KGRvbSA/PyB0aGF0Ll9yb290LmNoaWxkcmVuLCBudWxsLCB1bmRlZmluZWQsIG9wdGlvbnMpLnRvU3RyaW5nKCk7XG59XG5cbi8qKlxuICogQ2hlY2tzIGlmIGEgcGFzc2VkIG9iamVjdCBpcyBhbiBvcHRpb25zIG9iamVjdC5cbiAqXG4gKiBAcGFyYW0gZG9tIC0gT2JqZWN0IHRvIGNoZWNrIGlmIGl0IGlzIGFuIG9wdGlvbnMgb2JqZWN0LlxuICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25zIG9iamVjdC5cbiAqIEByZXR1cm5zIFdoZXRoZXIgdGhlIG9iamVjdCBpcyBhbiBvcHRpb25zIG9iamVjdC5cbiAqL1xuZnVuY3Rpb24gaXNPcHRpb25zKFxuICBkb20/OiBCYXNpY0FjY2VwdGVkRWxlbXM8QW55Tm9kZT4gfCBDaGVlcmlvT3B0aW9ucyB8IG51bGwsXG4gIG9wdGlvbnM/OiBDaGVlcmlvT3B0aW9ucyxcbik6IGRvbSBpcyBDaGVlcmlvT3B0aW9ucyB7XG4gIHJldHVybiAoXG4gICAgIW9wdGlvbnMgJiZcbiAgICB0eXBlb2YgZG9tID09PSAnb2JqZWN0JyAmJlxuICAgIGRvbSAhPSBudWxsICYmXG4gICAgISgnbGVuZ3RoJyBpbiBkb20pICYmXG4gICAgISgndHlwZScgaW4gZG9tKVxuICApO1xufVxuXG4vKipcbiAqIFJlbmRlcnMgdGhlIGRvY3VtZW50LlxuICpcbiAqIEBjYXRlZ29yeSBTdGF0aWNcbiAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9ucyBmb3IgdGhlIHJlbmRlcmVyLlxuICogQHJldHVybnMgVGhlIHJlbmRlcmVkIGRvY3VtZW50LlxuICovXG5leHBvcnQgZnVuY3Rpb24gaHRtbCh0aGlzOiBDaGVlcmlvQVBJLCBvcHRpb25zPzogQ2hlZXJpb09wdGlvbnMpOiBzdHJpbmc7XG4vKipcbiAqIFJlbmRlcnMgdGhlIGRvY3VtZW50LlxuICpcbiAqIEBjYXRlZ29yeSBTdGF0aWNcbiAqIEBwYXJhbSBkb20gLSBFbGVtZW50IHRvIHJlbmRlci5cbiAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9ucyBmb3IgdGhlIHJlbmRlcmVyLlxuICogQHJldHVybnMgVGhlIHJlbmRlcmVkIGRvY3VtZW50LlxuICovXG5leHBvcnQgZnVuY3Rpb24gaHRtbChcbiAgdGhpczogQ2hlZXJpb0FQSSxcbiAgZG9tPzogQmFzaWNBY2NlcHRlZEVsZW1zPEFueU5vZGU+LFxuICBvcHRpb25zPzogQ2hlZXJpb09wdGlvbnMsXG4pOiBzdHJpbmc7XG5leHBvcnQgZnVuY3Rpb24gaHRtbChcbiAgdGhpczogQ2hlZXJpb0FQSSxcbiAgZG9tPzogQmFzaWNBY2NlcHRlZEVsZW1zPEFueU5vZGU+IHwgQ2hlZXJpb09wdGlvbnMsXG4gIG9wdGlvbnM/OiBDaGVlcmlvT3B0aW9ucyxcbik6IHN0cmluZyB7XG4gIC8qXG4gICAqIEJlIGZsZXhpYmxlIGFib3V0IHBhcmFtZXRlcnMsIHNvbWV0aW1lcyB3ZSBjYWxsIGh0bWwoKSxcbiAgICogd2l0aCBvcHRpb25zIGFzIG9ubHkgcGFyYW1ldGVyXG4gICAqIGNoZWNrIGRvbSBhcmd1bWVudCBmb3IgZG9tIGVsZW1lbnQgc3BlY2lmaWMgcHJvcGVydGllc1xuICAgKiBhc3N1bWUgdGhlcmUgaXMgbm8gJ2xlbmd0aCcgb3IgJ3R5cGUnIHByb3BlcnRpZXMgaW4gdGhlIG9wdGlvbnMgb2JqZWN0XG4gICAqL1xuICBjb25zdCB0b1JlbmRlciA9IGlzT3B0aW9ucyhkb20pID8gKChvcHRpb25zID0gZG9tKSwgdW5kZWZpbmVkKSA6IGRvbTtcblxuICAvKlxuICAgKiBTb21ldGltZXMgYCQuaHRtbCgpYCBpcyB1c2VkIHdpdGhvdXQgcHJlbG9hZGluZyBodG1sLFxuICAgKiBzbyBmYWxsYmFjayBub24tZXhpc3Rpbmcgb3B0aW9ucyB0byB0aGUgZGVmYXVsdCBvbmVzLlxuICAgKi9cbiAgY29uc3Qgb3B0cyA9IHtcbiAgICAuLi50aGlzPy5fb3B0aW9ucyxcbiAgICAuLi5mbGF0dGVuT3B0aW9ucyhvcHRpb25zKSxcbiAgfTtcblxuICByZXR1cm4gcmVuZGVyKHRoaXMsIHRvUmVuZGVyLCBvcHRzKTtcbn1cblxuLyoqXG4gKiBSZW5kZXIgdGhlIGRvY3VtZW50IGFzIFhNTC5cbiAqXG4gKiBAY2F0ZWdvcnkgU3RhdGljXG4gKiBAcGFyYW0gZG9tIC0gRWxlbWVudCB0byByZW5kZXIuXG4gKiBAcmV0dXJucyBUSGUgcmVuZGVyZWQgZG9jdW1lbnQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB4bWwoXG4gIHRoaXM6IENoZWVyaW9BUEksXG4gIGRvbT86IEJhc2ljQWNjZXB0ZWRFbGVtczxBbnlOb2RlPixcbik6IHN0cmluZyB7XG4gIGNvbnN0IG9wdGlvbnMgPSB7IC4uLnRoaXMuX29wdGlvbnMsIHhtbE1vZGU6IHRydWUgfTtcblxuICByZXR1cm4gcmVuZGVyKHRoaXMsIGRvbSwgb3B0aW9ucyk7XG59XG5cbi8qKlxuICogUmVuZGVyIHRoZSBkb2N1bWVudCBhcyB0ZXh0LlxuICpcbiAqIFRoaXMgcmV0dXJucyB0aGUgYHRleHRDb250ZW50YCBvZiB0aGUgcGFzc2VkIGVsZW1lbnRzLiBUaGUgcmVzdWx0IHdpbGxcbiAqIGluY2x1ZGUgdGhlIGNvbnRlbnRzIG9mIGA8c2NyaXB0PmAgYW5kIGA8c3R5bGU+YCBlbGVtZW50cy4gVG8gYXZvaWQgdGhpcywgdXNlXG4gKiBgLnByb3AoJ2lubmVyVGV4dCcpYCBpbnN0ZWFkLlxuICpcbiAqIEBjYXRlZ29yeSBTdGF0aWNcbiAqIEBwYXJhbSBlbGVtZW50cyAtIEVsZW1lbnRzIHRvIHJlbmRlci5cbiAqIEByZXR1cm5zIFRoZSByZW5kZXJlZCBkb2N1bWVudC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRleHQoXG4gIHRoaXM6IENoZWVyaW9BUEkgfCB2b2lkLFxuICBlbGVtZW50cz86IEFycmF5TGlrZTxBbnlOb2RlPixcbik6IHN0cmluZyB7XG4gIGNvbnN0IGVsZW1zID0gZWxlbWVudHMgPz8gKHRoaXMgPyB0aGlzLnJvb3QoKSA6IFtdKTtcblxuICBsZXQgcmV0ID0gJyc7XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBlbGVtcy5sZW5ndGg7IGkrKykge1xuICAgIHJldCArPSB0ZXh0Q29udGVudChlbGVtc1tpXSk7XG4gIH1cblxuICByZXR1cm4gcmV0O1xufVxuXG4vKipcbiAqIFBhcnNlcyBhIHN0cmluZyBpbnRvIGFuIGFycmF5IG9mIERPTSBub2Rlcy4gVGhlIGBjb250ZXh0YCBhcmd1bWVudCBoYXMgbm9cbiAqIG1lYW5pbmcgZm9yIENoZWVyaW8sIGJ1dCBpdCBpcyBtYWludGFpbmVkIGZvciBBUEkgY29tcGF0aWJpbGl0eSB3aXRoIGpRdWVyeS5cbiAqXG4gKiBAY2F0ZWdvcnkgU3RhdGljXG4gKiBAcGFyYW0gZGF0YSAtIE1hcmt1cCB0aGF0IHdpbGwgYmUgcGFyc2VkLlxuICogQHBhcmFtIGNvbnRleHQgLSBXaWxsIGJlIGlnbm9yZWQuIElmIGl0IGlzIGEgYm9vbGVhbiBpdCB3aWxsIGJlIHVzZWQgYXMgdGhlXG4gKiAgIHZhbHVlIG9mIGBrZWVwU2NyaXB0c2AuXG4gKiBAcGFyYW0ga2VlcFNjcmlwdHMgLSBJZiBmYWxzZSBhbGwgc2NyaXB0cyB3aWxsIGJlIHJlbW92ZWQuXG4gKiBAcmV0dXJucyBUaGUgcGFyc2VkIERPTS5cbiAqIEBhbGlhcyBDaGVlcmlvLnBhcnNlSFRNTFxuICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9hcGkuanF1ZXJ5LmNvbS9qUXVlcnkucGFyc2VIVE1ML31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlSFRNTChcbiAgdGhpczogQ2hlZXJpb0FQSSxcbiAgZGF0YTogc3RyaW5nLFxuICBjb250ZXh0PzogdW5rbm93biB8IGJvb2xlYW4sXG4gIGtlZXBTY3JpcHRzPzogYm9vbGVhbixcbik6IEFueU5vZGVbXTtcbmV4cG9ydCBmdW5jdGlvbiBwYXJzZUhUTUwodGhpczogQ2hlZXJpb0FQSSwgZGF0YT86ICcnIHwgbnVsbCk6IG51bGw7XG5leHBvcnQgZnVuY3Rpb24gcGFyc2VIVE1MKFxuICB0aGlzOiBDaGVlcmlvQVBJLFxuICBkYXRhPzogc3RyaW5nIHwgbnVsbCxcbiAgY29udGV4dD86IHVua25vd24gfCBib29sZWFuLFxuICBrZWVwU2NyaXB0cyA9IHR5cGVvZiBjb250ZXh0ID09PSAnYm9vbGVhbicgPyBjb250ZXh0IDogZmFsc2UsXG4pOiBBbnlOb2RlW10gfCBudWxsIHtcbiAgaWYgKCFkYXRhIHx8IHR5cGVvZiBkYXRhICE9PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgaWYgKHR5cGVvZiBjb250ZXh0ID09PSAnYm9vbGVhbicpIHtcbiAgICBrZWVwU2NyaXB0cyA9IGNvbnRleHQ7XG4gIH1cblxuICBjb25zdCBwYXJzZWQgPSB0aGlzLmxvYWQoZGF0YSwgdGhpcy5fb3B0aW9ucywgZmFsc2UpO1xuICBpZiAoIWtlZXBTY3JpcHRzKSB7XG4gICAgcGFyc2VkKCdzY3JpcHQnKS5yZW1vdmUoKTtcbiAgfVxuXG4gIC8qXG4gICAqIFRoZSBgY2hpbGRyZW5gIGFycmF5IGlzIHVzZWQgYnkgQ2hlZXJpbyBpbnRlcm5hbGx5IHRvIGdyb3VwIGVsZW1lbnRzIHRoYXRcbiAgICogc2hhcmUgdGhlIHNhbWUgcGFyZW50cy4gV2hlbiBub2RlcyBjcmVhdGVkIHRocm91Z2ggYHBhcnNlSFRNTGAgYXJlXG4gICAqIGluc2VydGVkIGludG8gcHJldmlvdXNseS1leGlzdGluZyBET00gc3RydWN0dXJlcywgdGhleSB3aWxsIGJlIHJlbW92ZWRcbiAgICogZnJvbSB0aGUgYGNoaWxkcmVuYCBhcnJheS4gVGhlIHJlc3VsdHMgb2YgYHBhcnNlSFRNTGAgc2hvdWxkIHJlbWFpblxuICAgKiBjb25zdGFudCBhY3Jvc3MgdGhlc2Ugb3BlcmF0aW9ucywgc28gYSBzaGFsbG93IGNvcHkgc2hvdWxkIGJlIHJldHVybmVkLlxuICAgKi9cbiAgcmV0dXJuIFsuLi5wYXJzZWQucm9vdCgpWzBdLmNoaWxkcmVuXTtcbn1cblxuLyoqXG4gKiBTb21ldGltZXMgeW91IG5lZWQgdG8gd29yayB3aXRoIHRoZSB0b3AtbGV2ZWwgcm9vdCBlbGVtZW50LiBUbyBxdWVyeSBpdCwgeW91XG4gKiBjYW4gdXNlIGAkLnJvb3QoKWAuXG4gKlxuICogQGNhdGVnb3J5IFN0YXRpY1xuICogQGV4YW1wbGVcbiAqXG4gKiBgYGBqc1xuICogJC5yb290KCkuYXBwZW5kKCc8dWwgaWQ9XCJ2ZWdldGFibGVzXCI+PC91bD4nKS5odG1sKCk7XG4gKiAvLz0+IDx1bCBpZD1cImZydWl0c1wiPi4uLjwvdWw+PHVsIGlkPVwidmVnZXRhYmxlc1wiPjwvdWw+XG4gKiBgYGBcbiAqXG4gKiBAcmV0dXJucyBDaGVlcmlvIGluc3RhbmNlIHdyYXBwaW5nIHRoZSByb290IG5vZGUuXG4gKiBAYWxpYXMgQ2hlZXJpby5yb290XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByb290KHRoaXM6IENoZWVyaW9BUEkpOiBDaGVlcmlvPERvY3VtZW50PiB7XG4gIHJldHVybiB0aGlzKHRoaXMuX3Jvb3QpO1xufVxuXG4vKipcbiAqIENoZWNrcyB0byBzZWUgaWYgdGhlIGBjb250YWluZWRgIERPTSBlbGVtZW50IGlzIGEgZGVzY2VuZGFudCBvZiB0aGVcbiAqIGBjb250YWluZXJgIERPTSBlbGVtZW50LlxuICpcbiAqIEBjYXRlZ29yeSBTdGF0aWNcbiAqIEBwYXJhbSBjb250YWluZXIgLSBQb3RlbnRpYWwgcGFyZW50IG5vZGUuXG4gKiBAcGFyYW0gY29udGFpbmVkIC0gUG90ZW50aWFsIGNoaWxkIG5vZGUuXG4gKiBAcmV0dXJucyBJbmRpY2F0ZXMgaWYgdGhlIG5vZGVzIGNvbnRhaW4gb25lIGFub3RoZXIuXG4gKiBAYWxpYXMgQ2hlZXJpby5jb250YWluc1xuICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9hcGkuanF1ZXJ5LmNvbS9qUXVlcnkuY29udGFpbnMvfVxuICovXG5leHBvcnQgZnVuY3Rpb24gY29udGFpbnMoY29udGFpbmVyOiBBbnlOb2RlLCBjb250YWluZWQ6IEFueU5vZGUpOiBib29sZWFuIHtcbiAgLy8gQWNjb3JkaW5nIHRvIHRoZSBqUXVlcnkgQVBJLCBhbiBlbGVtZW50IGRvZXMgbm90IFwiY29udGFpblwiIGl0c2VsZlxuICBpZiAoY29udGFpbmVkID09PSBjb250YWluZXIpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICAvKlxuICAgKiBTdGVwIHVwIHRoZSBkZXNjZW5kYW50cywgc3RvcHBpbmcgd2hlbiB0aGUgcm9vdCBlbGVtZW50IGlzIHJlYWNoZWRcbiAgICogKHNpZ25hbGVkIGJ5IGAucGFyZW50YCByZXR1cm5pbmcgYSByZWZlcmVuY2UgdG8gdGhlIHNhbWUgb2JqZWN0KVxuICAgKi9cbiAgbGV0IG5leHQ6IEFueU5vZGUgfCBudWxsID0gY29udGFpbmVkO1xuICB3aGlsZSAobmV4dCAmJiBuZXh0ICE9PSBuZXh0LnBhcmVudCkge1xuICAgIG5leHQgPSBuZXh0LnBhcmVudDtcbiAgICBpZiAobmV4dCA9PT0gY29udGFpbmVyKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59XG5cbi8qKlxuICogRXh0cmFjdCBtdWx0aXBsZSB2YWx1ZXMgZnJvbSBhIGRvY3VtZW50LCBhbmQgc3RvcmUgdGhlbSBpbiBhbiBvYmplY3QuXG4gKlxuICogQGNhdGVnb3J5IFN0YXRpY1xuICogQHBhcmFtIG1hcCAtIEFuIG9iamVjdCBjb250YWluaW5nIGtleS12YWx1ZSBwYWlycy4gVGhlIGtleXMgYXJlIHRoZSBuYW1lcyBvZlxuICogICB0aGUgcHJvcGVydGllcyB0byBiZSBjcmVhdGVkIG9uIHRoZSBvYmplY3QsIGFuZCB0aGUgdmFsdWVzIGFyZSB0aGVcbiAqICAgc2VsZWN0b3JzIHRvIGJlIHVzZWQgdG8gZXh0cmFjdCB0aGUgdmFsdWVzLlxuICogQHJldHVybnMgQW4gb2JqZWN0IGNvbnRhaW5pbmcgdGhlIGV4dHJhY3RlZCB2YWx1ZXMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBleHRyYWN0PE0gZXh0ZW5kcyBFeHRyYWN0TWFwPihcbiAgdGhpczogQ2hlZXJpb0FQSSxcbiAgbWFwOiBNLFxuKTogRXh0cmFjdGVkTWFwPE0+IHtcbiAgcmV0dXJuIHRoaXMucm9vdCgpLmV4dHJhY3QobWFwKTtcbn1cblxudHlwZSBXcml0YWJsZTxUPiA9IHsgLXJlYWRvbmx5IFtQIGluIGtleW9mIFRdOiBUW1BdIH07XG5cbi8qKlxuICogJC5tZXJnZSgpLlxuICpcbiAqIEBjYXRlZ29yeSBTdGF0aWNcbiAqIEBwYXJhbSBhcnIxIC0gRmlyc3QgYXJyYXkuXG4gKiBAcGFyYW0gYXJyMiAtIFNlY29uZCBhcnJheS5cbiAqIEByZXR1cm5zIGBhcnIxYCwgd2l0aCBlbGVtZW50cyBvZiBgYXJyMmAgaW5zZXJ0ZWQuXG4gKiBAYWxpYXMgQ2hlZXJpby5tZXJnZVxuICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9hcGkuanF1ZXJ5LmNvbS9qUXVlcnkubWVyZ2UvfVxuICovXG5leHBvcnQgZnVuY3Rpb24gbWVyZ2U8VD4oXG4gIGFycjE6IFdyaXRhYmxlPEFycmF5TGlrZTxUPj4sXG4gIGFycjI6IEFycmF5TGlrZTxUPixcbik6IEFycmF5TGlrZTxUPiB8IHVuZGVmaW5lZCB7XG4gIGlmICghaXNBcnJheUxpa2UoYXJyMSkgfHwgIWlzQXJyYXlMaWtlKGFycjIpKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIGxldCBuZXdMZW5ndGggPSBhcnIxLmxlbmd0aDtcbiAgY29uc3QgbGVuID0gK2FycjIubGVuZ3RoO1xuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICBhcnIxW25ld0xlbmd0aCsrXSA9IGFycjJbaV07XG4gIH1cbiAgYXJyMS5sZW5ndGggPSBuZXdMZW5ndGg7XG4gIHJldHVybiBhcnIxO1xufVxuXG4vKipcbiAqIENoZWNrcyBpZiBhbiBvYmplY3QgaXMgYXJyYXktbGlrZS5cbiAqXG4gKiBAY2F0ZWdvcnkgU3RhdGljXG4gKiBAcGFyYW0gaXRlbSAtIEl0ZW0gdG8gY2hlY2suXG4gKiBAcmV0dXJucyBJbmRpY2F0ZXMgaWYgdGhlIGl0ZW0gaXMgYXJyYXktbGlrZS5cbiAqL1xuZnVuY3Rpb24gaXNBcnJheUxpa2UoaXRlbTogdW5rbm93bik6IGl0ZW0gaXMgQXJyYXlMaWtlPHVua25vd24+IHtcbiAgaWYgKEFycmF5LmlzQXJyYXkoaXRlbSkpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIGlmIChcbiAgICB0eXBlb2YgaXRlbSAhPT0gJ29iamVjdCcgfHxcbiAgICBpdGVtID09PSBudWxsIHx8XG4gICAgISgnbGVuZ3RoJyBpbiBpdGVtKSB8fFxuICAgIHR5cGVvZiBpdGVtLmxlbmd0aCAhPT0gJ251bWJlcicgfHxcbiAgICBpdGVtLmxlbmd0aCA8IDBcbiAgKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBpdGVtLmxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKCEoaSBpbiBpdGVtKSkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuICByZXR1cm4gdHJ1ZTtcbn1cbiIsICJpbXBvcnQgdHlwZSB7IEFueU5vZGUgfSBmcm9tICdkb21oYW5kbGVyJztcbmltcG9ydCB0eXBlIHsgQ2hlZXJpbyB9IGZyb20gJy4vY2hlZXJpby5qcyc7XG5cbi8qKlxuICogQ2hlY2tzIGlmIGFuIG9iamVjdCBpcyBhIENoZWVyaW8gaW5zdGFuY2UuXG4gKlxuICogQGNhdGVnb3J5IFV0aWxzXG4gKiBAcGFyYW0gbWF5YmVDaGVlcmlvIC0gVGhlIG9iamVjdCB0byBjaGVjay5cbiAqIEByZXR1cm5zIFdoZXRoZXIgdGhlIG9iamVjdCBpcyBhIENoZWVyaW8gaW5zdGFuY2UuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0NoZWVyaW88VD4obWF5YmVDaGVlcmlvOiBhbnkpOiBtYXliZUNoZWVyaW8gaXMgQ2hlZXJpbzxUPiB7XG4gIHJldHVybiBtYXliZUNoZWVyaW8uY2hlZXJpbyAhPSBudWxsO1xufVxuXG4vKipcbiAqIENvbnZlcnQgYSBzdHJpbmcgdG8gY2FtZWwgY2FzZSBub3RhdGlvbi5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQGNhdGVnb3J5IFV0aWxzXG4gKiBAcGFyYW0gc3RyIC0gVGhlIHN0cmluZyB0byBiZSBjb252ZXJ0ZWQuXG4gKiBAcmV0dXJucyBTdHJpbmcgaW4gY2FtZWwgY2FzZSBub3RhdGlvbi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNhbWVsQ2FzZShzdHI6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiBzdHIucmVwbGFjZSgvWy5fLV0oXFx3fCQpL2csIChfLCB4KSA9PiB4LnRvVXBwZXJDYXNlKCkpO1xufVxuXG4vKipcbiAqIENvbnZlcnQgYSBzdHJpbmcgZnJvbSBjYW1lbCBjYXNlIHRvIFwiQ1NTIGNhc2VcIiwgd2hlcmUgd29yZCBib3VuZGFyaWVzIGFyZVxuICogZGVzY3JpYmVkIGJ5IGh5cGhlbnMgKFwiLVwiKSBhbmQgYWxsIGNoYXJhY3RlcnMgYXJlIGxvd2VyLWNhc2UuXG4gKlxuICogQHByaXZhdGVcbiAqIEBjYXRlZ29yeSBVdGlsc1xuICogQHBhcmFtIHN0ciAtIFRoZSBzdHJpbmcgdG8gYmUgY29udmVydGVkLlxuICogQHJldHVybnMgU3RyaW5nIGluIFwiQ1NTIGNhc2VcIi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNzc0Nhc2Uoc3RyOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gc3RyLnJlcGxhY2UoL1tBLVpdL2csICctJCYnKS50b0xvd2VyQ2FzZSgpO1xufVxuXG4vKipcbiAqIEl0ZXJhdGUgb3ZlciBlYWNoIERPTSBlbGVtZW50IHdpdGhvdXQgY3JlYXRpbmcgaW50ZXJtZWRpYXJ5IENoZWVyaW9cbiAqIGluc3RhbmNlcy5cbiAqXG4gKiBUaGlzIGlzIGluZGVudGVkIGZvciB1c2UgaW50ZXJuYWxseSB0byBhdm9pZCBvdGhlcndpc2UgdW5uZWNlc3NhcnkgbWVtb3J5XG4gKiBwcmVzc3VyZSBpbnRyb2R1Y2VkIGJ5IF9tYWtlLlxuICpcbiAqIEBjYXRlZ29yeSBVdGlsc1xuICogQHBhcmFtIGFycmF5IC0gVGhlIGFycmF5IHRvIGl0ZXJhdGUgb3Zlci5cbiAqIEBwYXJhbSBmbiAtIEZ1bmN0aW9uIHRvIGNhbGwuXG4gKiBAcmV0dXJucyBUaGUgb3JpZ2luYWwgaW5zdGFuY2UuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkb21FYWNoPFxuICBUIGV4dGVuZHMgQW55Tm9kZSxcbiAgQXJyIGV4dGVuZHMgQXJyYXlMaWtlPFQ+ID0gQ2hlZXJpbzxUPixcbj4oYXJyYXk6IEFyciwgZm46IChlbGVtOiBULCBpbmRleDogbnVtYmVyKSA9PiB2b2lkKTogQXJyIHtcbiAgY29uc3QgbGVuID0gYXJyYXkubGVuZ3RoO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbjsgaSsrKSBmbihhcnJheVtpXSwgaSk7XG4gIHJldHVybiBhcnJheTtcbn1cblxuY29uc3QgZW51bSBDaGFyYWN0ZXJDb2RlcyB7XG4gIExvd2VyQSA9IDk3LFxuICBMb3dlclogPSAxMjIsXG4gIFVwcGVyQSA9IDY1LFxuICBVcHBlclogPSA5MCxcbiAgRXhjbGFtYXRpb24gPSAzMyxcbn1cblxuLyoqXG4gKiBDaGVjayBpZiBzdHJpbmcgaXMgSFRNTC5cbiAqXG4gKiBUZXN0cyBmb3IgYSBgPGAgd2l0aGluIGEgc3RyaW5nLCBpbW1lZGlhdGUgZm9sbG93ZWQgYnkgYSBsZXR0ZXIgYW5kXG4gKiBldmVudHVhbGx5IGZvbGxvd2VkIGJ5IGEgYD5gLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAY2F0ZWdvcnkgVXRpbHNcbiAqIEBwYXJhbSBzdHIgLSBUaGUgc3RyaW5nIHRvIGNoZWNrLlxuICogQHJldHVybnMgSW5kaWNhdGVzIGlmIGBzdHJgIGlzIEhUTUwuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpc0h0bWwoc3RyOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgY29uc3QgdGFnU3RhcnQgPSBzdHIuaW5kZXhPZignPCcpO1xuXG4gIGlmICh0YWdTdGFydCA8IDAgfHwgdGFnU3RhcnQgPiBzdHIubGVuZ3RoIC0gMykgcmV0dXJuIGZhbHNlO1xuXG4gIGNvbnN0IHRhZ0NoYXIgPSBzdHIuY2hhckNvZGVBdCh0YWdTdGFydCArIDEpO1xuXG4gIHJldHVybiAoXG4gICAgKCh0YWdDaGFyID49IENoYXJhY3RlckNvZGVzLkxvd2VyQSAmJiB0YWdDaGFyIDw9IENoYXJhY3RlckNvZGVzLkxvd2VyWikgfHxcbiAgICAgICh0YWdDaGFyID49IENoYXJhY3RlckNvZGVzLlVwcGVyQSAmJiB0YWdDaGFyIDw9IENoYXJhY3RlckNvZGVzLlVwcGVyWikgfHxcbiAgICAgIHRhZ0NoYXIgPT09IENoYXJhY3RlckNvZGVzLkV4Y2xhbWF0aW9uKSAmJlxuICAgIHN0ci5pbmNsdWRlcygnPicsIHRhZ1N0YXJ0ICsgMilcbiAgKTtcbn1cbiIsICIvKipcbiAqIE1ldGhvZHMgZm9yIGdldHRpbmcgYW5kIG1vZGlmeWluZyBhdHRyaWJ1dGVzLlxuICpcbiAqIEBtb2R1bGUgY2hlZXJpby9hdHRyaWJ1dGVzXG4gKi9cblxuaW1wb3J0IHsgdGV4dCB9IGZyb20gJy4uL3N0YXRpYy5qcyc7XG5pbXBvcnQgeyBkb21FYWNoLCBjYW1lbENhc2UsIGNzc0Nhc2UgfSBmcm9tICcuLi91dGlscy5qcyc7XG5pbXBvcnQgeyBpc1RhZywgdHlwZSBBbnlOb2RlLCB0eXBlIEVsZW1lbnQgfSBmcm9tICdkb21oYW5kbGVyJztcbmltcG9ydCB0eXBlIHsgQ2hlZXJpbyB9IGZyb20gJy4uL2NoZWVyaW8uanMnO1xuaW1wb3J0IHsgaW5uZXJUZXh0LCB0ZXh0Q29udGVudCB9IGZyb20gJ2RvbXV0aWxzJztcbmNvbnN0IGhhc093biA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG5jb25zdCByc3BhY2UgPSAvXFxzKy87XG5jb25zdCBkYXRhQXR0clByZWZpeCA9ICdkYXRhLSc7XG5cbi8vIEF0dHJpYnV0ZXMgdGhhdCBhcmUgYm9vbGVhbnNcbmNvbnN0IHJib29sZWFuID1cbiAgL14oPzphdXRvZm9jdXN8YXV0b3BsYXl8YXN5bmN8Y2hlY2tlZHxjb250cm9sc3xkZWZlcnxkaXNhYmxlZHxoaWRkZW58bG9vcHxtdWx0aXBsZXxvcGVufHJlYWRvbmx5fHJlcXVpcmVkfHNjb3BlZHxzZWxlY3RlZCkkL2k7XG4vLyBNYXRjaGVzIHN0cmluZ3MgdGhhdCBsb29rIGxpa2UgSlNPTiBvYmplY3RzIG9yIGFycmF5c1xuY29uc3QgcmJyYWNlID0gL157W15dKn0kfF5cXFtbXl0qXSQvO1xuXG4vKipcbiAqIEdldHMgYSBub2RlJ3MgYXR0cmlidXRlLiBGb3IgYm9vbGVhbiBhdHRyaWJ1dGVzLCBpdCB3aWxsIHJldHVybiB0aGUgdmFsdWUnc1xuICogbmFtZSBzaG91bGQgaXQgYmUgc2V0LlxuICpcbiAqIEFsc28gc3VwcG9ydHMgZ2V0dGluZyB0aGUgYHZhbHVlYCBvZiBzZXZlcmFsIGZvcm0gZWxlbWVudHMuXG4gKlxuICogQHByaXZhdGVcbiAqIEBjYXRlZ29yeSBBdHRyaWJ1dGVzXG4gKiBAcGFyYW0gZWxlbSAtIEVsZW1lbnQgdG8gZ2V0IHRoZSBhdHRyaWJ1dGUgb2YuXG4gKiBAcGFyYW0gbmFtZSAtIE5hbWUgb2YgdGhlIGF0dHJpYnV0ZS5cbiAqIEBwYXJhbSB4bWxNb2RlIC0gRGlzYWJsZSBoYW5kbGluZyBvZiBzcGVjaWFsIEhUTUwgYXR0cmlidXRlcy5cbiAqIEByZXR1cm5zIFRoZSBhdHRyaWJ1dGUncyB2YWx1ZS5cbiAqL1xuZnVuY3Rpb24gZ2V0QXR0cihcbiAgZWxlbTogQW55Tm9kZSxcbiAgbmFtZTogdW5kZWZpbmVkLFxuICB4bWxNb2RlPzogYm9vbGVhbixcbik6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gfCB1bmRlZmluZWQ7XG5mdW5jdGlvbiBnZXRBdHRyKFxuICBlbGVtOiBBbnlOb2RlLFxuICBuYW1lOiBzdHJpbmcsXG4gIHhtbE1vZGU/OiBib29sZWFuLFxuKTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuZnVuY3Rpb24gZ2V0QXR0cihcbiAgZWxlbTogQW55Tm9kZSxcbiAgbmFtZTogc3RyaW5nIHwgdW5kZWZpbmVkLFxuICB4bWxNb2RlPzogYm9vbGVhbixcbik6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gfCBzdHJpbmcgfCB1bmRlZmluZWQge1xuICBpZiAoIWVsZW0gfHwgIWlzVGFnKGVsZW0pKSByZXR1cm4gdW5kZWZpbmVkO1xuXG4gIGVsZW0uYXR0cmlicyA/Pz0ge307XG5cbiAgLy8gUmV0dXJuIHRoZSBlbnRpcmUgYXR0cmlicyBvYmplY3QgaWYgbm8gYXR0cmlidXRlIHNwZWNpZmllZFxuICBpZiAoIW5hbWUpIHtcbiAgICByZXR1cm4gZWxlbS5hdHRyaWJzO1xuICB9XG5cbiAgaWYgKGhhc093bi5jYWxsKGVsZW0uYXR0cmlicywgbmFtZSkpIHtcbiAgICAvLyBHZXQgdGhlIChkZWNvZGVkKSBhdHRyaWJ1dGVcbiAgICByZXR1cm4gIXhtbE1vZGUgJiYgcmJvb2xlYW4udGVzdChuYW1lKSA/IG5hbWUgOiBlbGVtLmF0dHJpYnNbbmFtZV07XG4gIH1cblxuICAvLyBNaW1pYyB0aGUgRE9NIGFuZCByZXR1cm4gdGV4dCBjb250ZW50IGFzIHZhbHVlIGZvciBgb3B0aW9uJ3NgXG4gIGlmIChlbGVtLm5hbWUgPT09ICdvcHRpb24nICYmIG5hbWUgPT09ICd2YWx1ZScpIHtcbiAgICByZXR1cm4gdGV4dChlbGVtLmNoaWxkcmVuKTtcbiAgfVxuXG4gIC8vIE1pbWljIERPTSB3aXRoIGRlZmF1bHQgdmFsdWUgZm9yIHJhZGlvcy9jaGVja2JveGVzXG4gIGlmIChcbiAgICBlbGVtLm5hbWUgPT09ICdpbnB1dCcgJiZcbiAgICAoZWxlbS5hdHRyaWJzWyd0eXBlJ10gPT09ICdyYWRpbycgfHwgZWxlbS5hdHRyaWJzWyd0eXBlJ10gPT09ICdjaGVja2JveCcpICYmXG4gICAgbmFtZSA9PT0gJ3ZhbHVlJ1xuICApIHtcbiAgICByZXR1cm4gJ29uJztcbiAgfVxuXG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogU2V0cyB0aGUgdmFsdWUgb2YgYW4gYXR0cmlidXRlLiBUaGUgYXR0cmlidXRlIHdpbGwgYmUgZGVsZXRlZCBpZiB0aGUgdmFsdWUgaXNcbiAqIGBudWxsYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGVsIC0gVGhlIGVsZW1lbnQgdG8gc2V0IHRoZSBhdHRyaWJ1dGUgb24uXG4gKiBAcGFyYW0gbmFtZSAtIFRoZSBhdHRyaWJ1dGUncyBuYW1lLlxuICogQHBhcmFtIHZhbHVlIC0gVGhlIGF0dHJpYnV0ZSdzIHZhbHVlLlxuICovXG5mdW5jdGlvbiBzZXRBdHRyKGVsOiBFbGVtZW50LCBuYW1lOiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcgfCBudWxsKSB7XG4gIGlmICh2YWx1ZSA9PT0gbnVsbCkge1xuICAgIHJlbW92ZUF0dHJpYnV0ZShlbCwgbmFtZSk7XG4gIH0gZWxzZSB7XG4gICAgZWwuYXR0cmlic1tuYW1lXSA9IGAke3ZhbHVlfWA7XG4gIH1cbn1cblxuLyoqXG4gKiBNZXRob2QgZm9yIGdldHRpbmcgYXR0cmlidXRlcy4gR2V0cyB0aGUgYXR0cmlidXRlIHZhbHVlIGZvciBvbmx5IHRoZSBmaXJzdFxuICogZWxlbWVudCBpbiB0aGUgbWF0Y2hlZCBzZXQuXG4gKlxuICogQGNhdGVnb3J5IEF0dHJpYnV0ZXNcbiAqIEBleGFtcGxlXG4gKlxuICogYGBganNcbiAqICQoJ3VsJykuYXR0cignaWQnKTtcbiAqIC8vPT4gZnJ1aXRzXG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0gbmFtZSAtIE5hbWUgb2YgdGhlIGF0dHJpYnV0ZS5cbiAqIEByZXR1cm5zIFRoZSBhdHRyaWJ1dGUncyB2YWx1ZS5cbiAqIEBzZWUge0BsaW5rIGh0dHBzOi8vYXBpLmpxdWVyeS5jb20vYXR0ci99XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhdHRyPFQgZXh0ZW5kcyBBbnlOb2RlPihcbiAgdGhpczogQ2hlZXJpbzxUPixcbiAgbmFtZTogc3RyaW5nLFxuKTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuLyoqXG4gKiBNZXRob2QgZm9yIGdldHRpbmcgYWxsIGF0dHJpYnV0ZXMgYW5kIHRoZWlyIHZhbHVlcyBvZiB0aGUgZmlyc3QgZWxlbWVudCBpblxuICogdGhlIG1hdGNoZWQgc2V0LlxuICpcbiAqIEBjYXRlZ29yeSBBdHRyaWJ1dGVzXG4gKiBAZXhhbXBsZVxuICpcbiAqIGBgYGpzXG4gKiAkKCd1bCcpLmF0dHIoKTtcbiAqIC8vPT4geyBpZDogJ2ZydWl0cycgfVxuICogYGBgXG4gKlxuICogQHJldHVybnMgVGhlIGF0dHJpYnV0ZSdzIHZhbHVlcy5cbiAqIEBzZWUge0BsaW5rIGh0dHBzOi8vYXBpLmpxdWVyeS5jb20vYXR0ci99XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhdHRyPFQgZXh0ZW5kcyBBbnlOb2RlPihcbiAgdGhpczogQ2hlZXJpbzxUPixcbik6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4gfCB1bmRlZmluZWQ7XG4vKipcbiAqIE1ldGhvZCBmb3Igc2V0dGluZyBhdHRyaWJ1dGVzLiBTZXRzIHRoZSBhdHRyaWJ1dGUgdmFsdWUgZm9yIG9ubHkgdGhlIGZpcnN0XG4gKiBlbGVtZW50IGluIHRoZSBtYXRjaGVkIHNldC4gSWYgeW91IHNldCBhbiBhdHRyaWJ1dGUncyB2YWx1ZSB0byBgbnVsbGAsIHlvdVxuICogcmVtb3ZlIHRoYXQgYXR0cmlidXRlLiBZb3UgbWF5IGFsc28gcGFzcyBhIGBtYXBgIGFuZCBgZnVuY3Rpb25gLlxuICpcbiAqIEBjYXRlZ29yeSBBdHRyaWJ1dGVzXG4gKiBAZXhhbXBsZVxuICpcbiAqIGBgYGpzXG4gKiAkKCcuYXBwbGUnKS5hdHRyKCdpZCcsICdmYXZvcml0ZScpLmh0bWwoKTtcbiAqIC8vPT4gPGxpIGNsYXNzPVwiYXBwbGVcIiBpZD1cImZhdm9yaXRlXCI+QXBwbGU8L2xpPlxuICogYGBgXG4gKlxuICogQHBhcmFtIG5hbWUgLSBOYW1lIG9mIHRoZSBhdHRyaWJ1dGUuXG4gKiBAcGFyYW0gdmFsdWUgLSBUaGUgbmV3IHZhbHVlIG9mIHRoZSBhdHRyaWJ1dGUuXG4gKiBAcmV0dXJucyBUaGUgaW5zdGFuY2UgaXRzZWxmLlxuICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9hcGkuanF1ZXJ5LmNvbS9hdHRyL31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGF0dHI8VCBleHRlbmRzIEFueU5vZGU+KFxuICB0aGlzOiBDaGVlcmlvPFQ+LFxuICBuYW1lOiBzdHJpbmcsXG4gIHZhbHVlPzpcbiAgICB8IHN0cmluZ1xuICAgIHwgbnVsbFxuICAgIHwgKCh0aGlzOiBFbGVtZW50LCBpOiBudW1iZXIsIGF0dHJpYjogc3RyaW5nKSA9PiBzdHJpbmcgfCBudWxsKSxcbik6IENoZWVyaW88VD47XG4vKipcbiAqIE1ldGhvZCBmb3Igc2V0dGluZyBtdWx0aXBsZSBhdHRyaWJ1dGVzIGF0IG9uY2UuIFNldHMgdGhlIGF0dHJpYnV0ZSB2YWx1ZSBmb3JcbiAqIG9ubHkgdGhlIGZpcnN0IGVsZW1lbnQgaW4gdGhlIG1hdGNoZWQgc2V0LiBJZiB5b3Ugc2V0IGFuIGF0dHJpYnV0ZSdzIHZhbHVlIHRvXG4gKiBgbnVsbGAsIHlvdSByZW1vdmUgdGhhdCBhdHRyaWJ1dGUuXG4gKlxuICogQGNhdGVnb3J5IEF0dHJpYnV0ZXNcbiAqIEBleGFtcGxlXG4gKlxuICogYGBganNcbiAqICQoJy5hcHBsZScpLmF0dHIoeyBpZDogJ2Zhdm9yaXRlJyB9KS5odG1sKCk7XG4gKiAvLz0+IDxsaSBjbGFzcz1cImFwcGxlXCIgaWQ9XCJmYXZvcml0ZVwiPkFwcGxlPC9saT5cbiAqIGBgYFxuICpcbiAqIEBwYXJhbSB2YWx1ZXMgLSBNYXAgb2YgYXR0cmlidXRlIG5hbWVzIGFuZCB2YWx1ZXMuXG4gKiBAcmV0dXJucyBUaGUgaW5zdGFuY2UgaXRzZWxmLlxuICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9hcGkuanF1ZXJ5LmNvbS9hdHRyL31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGF0dHI8VCBleHRlbmRzIEFueU5vZGU+KFxuICB0aGlzOiBDaGVlcmlvPFQ+LFxuICB2YWx1ZXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IG51bGw+LFxuKTogQ2hlZXJpbzxUPjtcbmV4cG9ydCBmdW5jdGlvbiBhdHRyPFQgZXh0ZW5kcyBBbnlOb2RlPihcbiAgdGhpczogQ2hlZXJpbzxUPixcbiAgbmFtZT86IHN0cmluZyB8IFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IG51bGw+LFxuICB2YWx1ZT86XG4gICAgfCBzdHJpbmdcbiAgICB8IG51bGxcbiAgICB8ICgodGhpczogRWxlbWVudCwgaTogbnVtYmVyLCBhdHRyaWI6IHN0cmluZykgPT4gc3RyaW5nIHwgbnVsbCksXG4pOiBzdHJpbmcgfCBDaGVlcmlvPFQ+IHwgdW5kZWZpbmVkIHwgUmVjb3JkPHN0cmluZywgc3RyaW5nPiB7XG4gIC8vIFNldCB0aGUgdmFsdWUgKHdpdGggYXR0ciBtYXAgc3VwcG9ydClcbiAgaWYgKHR5cGVvZiBuYW1lID09PSAnb2JqZWN0JyB8fCB2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgaWYgKHR5cGVvZiBuYW1lICE9PSAnc3RyaW5nJykge1xuICAgICAgICB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdCYWQgY29tYmluYXRpb24gb2YgYXJndW1lbnRzLicpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gZG9tRWFjaCh0aGlzLCAoZWwsIGkpID0+IHtcbiAgICAgICAgaWYgKGlzVGFnKGVsKSkgc2V0QXR0cihlbCwgbmFtZSwgdmFsdWUuY2FsbChlbCwgaSwgZWwuYXR0cmlic1tuYW1lXSkpO1xuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBkb21FYWNoKHRoaXMsIChlbCkgPT4ge1xuICAgICAgaWYgKCFpc1RhZyhlbCkpIHJldHVybjtcblxuICAgICAgaWYgKHR5cGVvZiBuYW1lID09PSAnb2JqZWN0Jykge1xuICAgICAgICBmb3IgKGNvbnN0IG9iak5hbWUgb2YgT2JqZWN0LmtleXMobmFtZSkpIHtcbiAgICAgICAgICBjb25zdCBvYmpWYWx1ZSA9IG5hbWVbb2JqTmFtZV07XG4gICAgICAgICAgc2V0QXR0cihlbCwgb2JqTmFtZSwgb2JqVmFsdWUpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzZXRBdHRyKGVsLCBuYW1lIGFzIHN0cmluZywgdmFsdWUgYXMgc3RyaW5nKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiBhcmd1bWVudHMubGVuZ3RoID4gMVxuICAgID8gdGhpc1xuICAgIDogZ2V0QXR0cih0aGlzWzBdLCBuYW1lIGFzIHN0cmluZywgdGhpcy5vcHRpb25zLnhtbE1vZGUpO1xufVxuXG4vKipcbiAqIEdldHMgYSBub2RlJ3MgcHJvcC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQGNhdGVnb3J5IEF0dHJpYnV0ZXNcbiAqIEBwYXJhbSBlbCAtIEVsZW1lbnQgdG8gZ2V0IHRoZSBwcm9wIG9mLlxuICogQHBhcmFtIG5hbWUgLSBOYW1lIG9mIHRoZSBwcm9wLlxuICogQHBhcmFtIHhtbE1vZGUgLSBEaXNhYmxlIGhhbmRsaW5nIG9mIHNwZWNpYWwgSFRNTCBhdHRyaWJ1dGVzLlxuICogQHJldHVybnMgVGhlIHByb3AncyB2YWx1ZS5cbiAqL1xuZnVuY3Rpb24gZ2V0UHJvcChcbiAgZWw6IEVsZW1lbnQsXG4gIG5hbWU6IHN0cmluZyxcbiAgeG1sTW9kZT86IGJvb2xlYW4sXG4pOiBzdHJpbmcgfCB1bmRlZmluZWQgfCBFbGVtZW50W2tleW9mIEVsZW1lbnRdIHtcbiAgcmV0dXJuIG5hbWUgaW4gZWxcbiAgICA/IC8vIEB0cy1leHBlY3QtZXJyb3IgVFMgZG9lc24ndCBsaWtlIHVzIGFjY2Vzc2luZyB0aGUgdmFsdWUgZGlyZWN0bHkgaGVyZS5cbiAgICAgIGVsW25hbWVdXG4gICAgOiAheG1sTW9kZSAmJiByYm9vbGVhbi50ZXN0KG5hbWUpXG4gICAgICA/IGdldEF0dHIoZWwsIG5hbWUsIGZhbHNlKSAhPT0gdW5kZWZpbmVkXG4gICAgICA6IGdldEF0dHIoZWwsIG5hbWUsIHhtbE1vZGUpO1xufVxuXG4vKipcbiAqIFNldHMgdGhlIHZhbHVlIG9mIGEgcHJvcC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGVsIC0gVGhlIGVsZW1lbnQgdG8gc2V0IHRoZSBwcm9wIG9uLlxuICogQHBhcmFtIG5hbWUgLSBUaGUgcHJvcCdzIG5hbWUuXG4gKiBAcGFyYW0gdmFsdWUgLSBUaGUgcHJvcCdzIHZhbHVlLlxuICogQHBhcmFtIHhtbE1vZGUgLSBEaXNhYmxlIGhhbmRsaW5nIG9mIHNwZWNpYWwgSFRNTCBhdHRyaWJ1dGVzLlxuICovXG5mdW5jdGlvbiBzZXRQcm9wKGVsOiBFbGVtZW50LCBuYW1lOiBzdHJpbmcsIHZhbHVlOiB1bmtub3duLCB4bWxNb2RlPzogYm9vbGVhbikge1xuICBpZiAobmFtZSBpbiBlbCkge1xuICAgIC8vIEB0cy1leHBlY3QtZXJyb3IgT3ZlcnJpZGluZyB2YWx1ZVxuICAgIGVsW25hbWVdID0gdmFsdWU7XG4gIH0gZWxzZSB7XG4gICAgc2V0QXR0cihcbiAgICAgIGVsLFxuICAgICAgbmFtZSxcbiAgICAgICF4bWxNb2RlICYmIHJib29sZWFuLnRlc3QobmFtZSkgPyAodmFsdWUgPyAnJyA6IG51bGwpIDogYCR7dmFsdWV9YCxcbiAgICApO1xuICB9XG59XG5cbmludGVyZmFjZSBTdHlsZVByb3Age1xuICBsZW5ndGg6IG51bWJlcjtcbiAgW2tleTogc3RyaW5nXTogc3RyaW5nIHwgbnVtYmVyO1xuICBbaW5kZXg6IG51bWJlcl06IHN0cmluZztcbn1cblxuLyoqXG4gKiBNZXRob2QgZm9yIGdldHRpbmcgYW5kIHNldHRpbmcgcHJvcGVydGllcy4gR2V0cyB0aGUgcHJvcGVydHkgdmFsdWUgZm9yIG9ubHlcbiAqIHRoZSBmaXJzdCBlbGVtZW50IGluIHRoZSBtYXRjaGVkIHNldC5cbiAqXG4gKiBAY2F0ZWdvcnkgQXR0cmlidXRlc1xuICogQGV4YW1wbGVcbiAqXG4gKiBgYGBqc1xuICogJCgnaW5wdXRbdHlwZT1cImNoZWNrYm94XCJdJykucHJvcCgnY2hlY2tlZCcpO1xuICogLy89PiBmYWxzZVxuICpcbiAqICQoJ2lucHV0W3R5cGU9XCJjaGVja2JveFwiXScpLnByb3AoJ2NoZWNrZWQnLCB0cnVlKS52YWwoKTtcbiAqIC8vPT4gb2tcbiAqIGBgYFxuICpcbiAqIEBwYXJhbSBuYW1lIC0gTmFtZSBvZiB0aGUgcHJvcGVydHkuXG4gKiBAcmV0dXJucyBJZiBgdmFsdWVgIGlzIHNwZWNpZmllZCB0aGUgaW5zdGFuY2UgaXRzZWxmLCBvdGhlcndpc2UgdGhlIHByb3Anc1xuICogICB2YWx1ZS5cbiAqIEBzZWUge0BsaW5rIGh0dHBzOi8vYXBpLmpxdWVyeS5jb20vcHJvcC99XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwcm9wPFQgZXh0ZW5kcyBBbnlOb2RlPihcbiAgdGhpczogQ2hlZXJpbzxUPixcbiAgbmFtZTogJ3RhZ05hbWUnIHwgJ25vZGVOYW1lJyxcbik6IHN0cmluZyB8IHVuZGVmaW5lZDtcbmV4cG9ydCBmdW5jdGlvbiBwcm9wPFQgZXh0ZW5kcyBBbnlOb2RlPihcbiAgdGhpczogQ2hlZXJpbzxUPixcbiAgbmFtZTogJ2lubmVySFRNTCcgfCAnb3V0ZXJIVE1MJyB8ICdpbm5lclRleHQnIHwgJ3RleHRDb250ZW50Jyxcbik6IHN0cmluZyB8IG51bGw7XG4vKipcbiAqIEdldCBhIHBhcnNlZCBDU1Mgc3R5bGUgb2JqZWN0LlxuICpcbiAqIEBwYXJhbSBuYW1lIC0gTmFtZSBvZiB0aGUgcHJvcGVydHkuXG4gKiBAcmV0dXJucyBUaGUgc3R5bGUgb2JqZWN0LCBvciBgdW5kZWZpbmVkYCBpZiB0aGUgZWxlbWVudCBoYXMgbm8gYHN0eWxlYFxuICogICBhdHRyaWJ1dGUuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwcm9wPFQgZXh0ZW5kcyBBbnlOb2RlPihcbiAgdGhpczogQ2hlZXJpbzxUPixcbiAgbmFtZTogJ3N0eWxlJyxcbik6IFN0eWxlUHJvcCB8IHVuZGVmaW5lZDtcbi8qKlxuICogUmVzb2x2ZSBgaHJlZmAgb3IgYHNyY2Agb2Ygc3VwcG9ydGVkIGVsZW1lbnRzLiBSZXF1aXJlcyB0aGUgYGJhc2VVUklgIG9wdGlvblxuICogdG8gYmUgc2V0LCBhbmQgYSBnbG9iYWwgYFVSTGAgb2JqZWN0IHRvIGJlIHBhcnQgb2YgdGhlIGVudmlyb25tZW50LlxuICpcbiAqIEBleGFtcGxlIFdpdGggYGJhc2VVUklgIHNldCB0byBgJ2h0dHBzOi8vZXhhbXBsZS5jb20nYDpcbiAqXG4gKiBgYGBqc1xuICogJCgnPGltZyBzcmM9XCJpbWFnZS5wbmdcIj4nKS5wcm9wKCdzcmMnKTtcbiAqIC8vPT4gJ2h0dHBzOi8vZXhhbXBsZS5jb20vaW1hZ2UucG5nJ1xuICogYGBgXG4gKlxuICogQHBhcmFtIG5hbWUgLSBOYW1lIG9mIHRoZSBwcm9wZXJ0eS5cbiAqIEByZXR1cm5zIFRoZSByZXNvbHZlZCBVUkwsIG9yIGB1bmRlZmluZWRgIGlmIHRoZSBlbGVtZW50IGlzIG5vdCBzdXBwb3J0ZWQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwcm9wPFQgZXh0ZW5kcyBBbnlOb2RlPihcbiAgdGhpczogQ2hlZXJpbzxUPixcbiAgbmFtZTogJ2hyZWYnIHwgJ3NyYycsXG4pOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4vKipcbiAqIEdldCBhIHByb3BlcnR5IG9mIGFuIGVsZW1lbnQuXG4gKlxuICogQHBhcmFtIG5hbWUgLSBOYW1lIG9mIHRoZSBwcm9wZXJ0eS5cbiAqIEByZXR1cm5zIFRoZSBwcm9wZXJ0eSdzIHZhbHVlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcHJvcDxUIGV4dGVuZHMgQW55Tm9kZSwgSyBleHRlbmRzIGtleW9mIEVsZW1lbnQ+KFxuICB0aGlzOiBDaGVlcmlvPFQ+LFxuICBuYW1lOiBLLFxuKTogRWxlbWVudFtLXTtcbi8qKlxuICogU2V0IGEgcHJvcGVydHkgb2YgYW4gZWxlbWVudC5cbiAqXG4gKiBAcGFyYW0gbmFtZSAtIE5hbWUgb2YgdGhlIHByb3BlcnR5LlxuICogQHBhcmFtIHZhbHVlIC0gVmFsdWUgdG8gc2V0IHRoZSBwcm9wZXJ0eSB0by5cbiAqIEByZXR1cm5zIFRoZSBpbnN0YW5jZSBpdHNlbGYuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBwcm9wPFQgZXh0ZW5kcyBBbnlOb2RlLCBLIGV4dGVuZHMga2V5b2YgRWxlbWVudD4oXG4gIHRoaXM6IENoZWVyaW88VD4sXG4gIG5hbWU6IEssXG4gIHZhbHVlOlxuICAgIHwgRWxlbWVudFtLXVxuICAgIHwgKCh0aGlzOiBFbGVtZW50LCBpOiBudW1iZXIsIHByb3A6IEspID0+IEVsZW1lbnRba2V5b2YgRWxlbWVudF0pLFxuKTogQ2hlZXJpbzxUPjtcbi8qKlxuICogU2V0IG11bHRpcGxlIHByb3BlcnRpZXMgb2YgYW4gZWxlbWVudC5cbiAqXG4gKiBAZXhhbXBsZVxuICpcbiAqIGBgYGpzXG4gKiAkKCdpbnB1dFt0eXBlPVwiY2hlY2tib3hcIl0nKS5wcm9wKHtcbiAqICAgY2hlY2tlZDogdHJ1ZSxcbiAqICAgZGlzYWJsZWQ6IGZhbHNlLFxuICogfSk7XG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0gbWFwIC0gT2JqZWN0IG9mIHByb3BlcnRpZXMgdG8gc2V0LlxuICogQHJldHVybnMgVGhlIGluc3RhbmNlIGl0c2VsZi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHByb3A8VCBleHRlbmRzIEFueU5vZGU+KFxuICB0aGlzOiBDaGVlcmlvPFQ+LFxuICBtYXA6IFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IEVsZW1lbnRba2V5b2YgRWxlbWVudF0gfCBib29sZWFuPixcbik6IENoZWVyaW88VD47XG4vKipcbiAqIFNldCBhIHByb3BlcnR5IG9mIGFuIGVsZW1lbnQuXG4gKlxuICogQHBhcmFtIG5hbWUgLSBOYW1lIG9mIHRoZSBwcm9wZXJ0eS5cbiAqIEBwYXJhbSB2YWx1ZSAtIFZhbHVlIHRvIHNldCB0aGUgcHJvcGVydHkgdG8uXG4gKiBAcmV0dXJucyBUaGUgaW5zdGFuY2UgaXRzZWxmLlxuICovXG5leHBvcnQgZnVuY3Rpb24gcHJvcDxUIGV4dGVuZHMgQW55Tm9kZT4oXG4gIHRoaXM6IENoZWVyaW88VD4sXG4gIG5hbWU6IHN0cmluZyxcbiAgdmFsdWU6XG4gICAgfCBzdHJpbmdcbiAgICB8IGJvb2xlYW5cbiAgICB8IG51bGxcbiAgICB8ICgodGhpczogRWxlbWVudCwgaTogbnVtYmVyLCBwcm9wOiBzdHJpbmcpID0+IHN0cmluZyB8IGJvb2xlYW4pLFxuKTogQ2hlZXJpbzxUPjtcbi8qKlxuICogR2V0IGEgcHJvcGVydHkgb2YgYW4gZWxlbWVudC5cbiAqXG4gKiBAcGFyYW0gbmFtZSAtIFRoZSBwcm9wZXJ0eSdzIG5hbWUuXG4gKiBAcmV0dXJucyBUaGUgcHJvcGVydHkncyB2YWx1ZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHByb3A8VCBleHRlbmRzIEFueU5vZGU+KHRoaXM6IENoZWVyaW88VD4sIG5hbWU6IHN0cmluZyk6IHN0cmluZztcbmV4cG9ydCBmdW5jdGlvbiBwcm9wPFQgZXh0ZW5kcyBBbnlOb2RlPihcbiAgdGhpczogQ2hlZXJpbzxUPixcbiAgbmFtZTogc3RyaW5nIHwgUmVjb3JkPHN0cmluZywgc3RyaW5nIHwgRWxlbWVudFtrZXlvZiBFbGVtZW50XSB8IGJvb2xlYW4+LFxuICB2YWx1ZT86XG4gICAgfCAoKFxuICAgICAgICB0aGlzOiBFbGVtZW50LFxuICAgICAgICBpOiBudW1iZXIsXG4gICAgICAgIHByb3A6IHN0cmluZyB8IHVuZGVmaW5lZCxcbiAgICAgICkgPT4gc3RyaW5nIHwgRWxlbWVudFtrZXlvZiBFbGVtZW50XSB8IGJvb2xlYW4pXG4gICAgfCB1bmtub3duLFxuKTogQ2hlZXJpbzxUPiB8IHN0cmluZyB8IHVuZGVmaW5lZCB8IG51bGwgfCBFbGVtZW50W2tleW9mIEVsZW1lbnRdIHwgU3R5bGVQcm9wIHtcbiAgaWYgKHR5cGVvZiBuYW1lID09PSAnc3RyaW5nJyAmJiB2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgY29uc3QgZWwgPSB0aGlzWzBdO1xuXG4gICAgaWYgKCFlbCB8fCAhaXNUYWcoZWwpKSByZXR1cm4gdW5kZWZpbmVkO1xuXG4gICAgc3dpdGNoIChuYW1lKSB7XG4gICAgICBjYXNlICdzdHlsZSc6IHtcbiAgICAgICAgY29uc3QgcHJvcGVydHkgPSB0aGlzLmNzcygpIGFzIFN0eWxlUHJvcDtcbiAgICAgICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKHByb3BlcnR5KTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgcHJvcGVydHlbaV0gPSBrZXlzW2ldO1xuICAgICAgICB9XG5cbiAgICAgICAgcHJvcGVydHkubGVuZ3RoID0ga2V5cy5sZW5ndGg7XG5cbiAgICAgICAgcmV0dXJuIHByb3BlcnR5O1xuICAgICAgfVxuICAgICAgY2FzZSAndGFnTmFtZSc6XG4gICAgICBjYXNlICdub2RlTmFtZSc6IHtcbiAgICAgICAgcmV0dXJuIGVsLm5hbWUudG9VcHBlckNhc2UoKTtcbiAgICAgIH1cblxuICAgICAgY2FzZSAnaHJlZic6XG4gICAgICBjYXNlICdzcmMnOiB7XG4gICAgICAgIGNvbnN0IHByb3AgPSBlbC5hdHRyaWJzPy5bbmFtZV07XG5cbiAgICAgICAgaWYgKFxuICAgICAgICAgIHR5cGVvZiBVUkwgIT09ICd1bmRlZmluZWQnICYmXG4gICAgICAgICAgKChuYW1lID09PSAnaHJlZicgJiYgKGVsLnRhZ05hbWUgPT09ICdhJyB8fCBlbC50YWdOYW1lID09PSAnbGluaycpKSB8fFxuICAgICAgICAgICAgKG5hbWUgPT09ICdzcmMnICYmXG4gICAgICAgICAgICAgIChlbC50YWdOYW1lID09PSAnaW1nJyB8fFxuICAgICAgICAgICAgICAgIGVsLnRhZ05hbWUgPT09ICdpZnJhbWUnIHx8XG4gICAgICAgICAgICAgICAgZWwudGFnTmFtZSA9PT0gJ2F1ZGlvJyB8fFxuICAgICAgICAgICAgICAgIGVsLnRhZ05hbWUgPT09ICd2aWRlbycgfHxcbiAgICAgICAgICAgICAgICBlbC50YWdOYW1lID09PSAnc291cmNlJykpKSAmJlxuICAgICAgICAgIHByb3AgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgIHRoaXMub3B0aW9ucy5iYXNlVVJJXG4gICAgICAgICkge1xuICAgICAgICAgIHJldHVybiBuZXcgVVJMKHByb3AsIHRoaXMub3B0aW9ucy5iYXNlVVJJKS5ocmVmO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHByb3A7XG4gICAgICB9XG5cbiAgICAgIGNhc2UgJ2lubmVyVGV4dCc6IHtcbiAgICAgICAgcmV0dXJuIGlubmVyVGV4dChlbCk7XG4gICAgICB9XG5cbiAgICAgIGNhc2UgJ3RleHRDb250ZW50Jzoge1xuICAgICAgICByZXR1cm4gdGV4dENvbnRlbnQoZWwpO1xuICAgICAgfVxuXG4gICAgICBjYXNlICdvdXRlckhUTUwnOiB7XG4gICAgICAgIHJldHVybiB0aGlzLmNsb25lKCkud3JhcCgnPGNvbnRhaW5lciAvPicpLnBhcmVudCgpLmh0bWwoKTtcbiAgICAgIH1cblxuICAgICAgY2FzZSAnaW5uZXJIVE1MJzoge1xuICAgICAgICByZXR1cm4gdGhpcy5odG1sKCk7XG4gICAgICB9XG5cbiAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgcmV0dXJuIGdldFByb3AoZWwsIG5hbWUsIHRoaXMub3B0aW9ucy54bWxNb2RlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpZiAodHlwZW9mIG5hbWUgPT09ICdvYmplY3QnIHx8IHZhbHVlICE9PSB1bmRlZmluZWQpIHtcbiAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBpZiAodHlwZW9mIG5hbWUgPT09ICdvYmplY3QnKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0JhZCBjb21iaW5hdGlvbiBvZiBhcmd1bWVudHMuJyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gZG9tRWFjaCh0aGlzLCAoZWwsIGkpID0+IHtcbiAgICAgICAgaWYgKGlzVGFnKGVsKSkge1xuICAgICAgICAgIHNldFByb3AoXG4gICAgICAgICAgICBlbCxcbiAgICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgICB2YWx1ZS5jYWxsKGVsLCBpLCBnZXRQcm9wKGVsLCBuYW1lLCB0aGlzLm9wdGlvbnMueG1sTW9kZSkpLFxuICAgICAgICAgICAgdGhpcy5vcHRpb25zLnhtbE1vZGUsXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGRvbUVhY2godGhpcywgKGVsKSA9PiB7XG4gICAgICBpZiAoIWlzVGFnKGVsKSkgcmV0dXJuO1xuXG4gICAgICBpZiAodHlwZW9mIG5hbWUgPT09ICdvYmplY3QnKSB7XG4gICAgICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKG5hbWUpKSB7XG4gICAgICAgICAgY29uc3QgdmFsID0gbmFtZVtrZXldO1xuICAgICAgICAgIHNldFByb3AoZWwsIGtleSwgdmFsLCB0aGlzLm9wdGlvbnMueG1sTW9kZSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHNldFByb3AoZWwsIG5hbWUsIHZhbHVlLCB0aGlzLm9wdGlvbnMueG1sTW9kZSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gdW5kZWZpbmVkO1xufVxuXG4vKipcbiAqIEFuIGVsZW1lbnQgd2l0aCBhIGRhdGEgYXR0cmlidXRlLlxuICpcbiAqIEBwcml2YXRlXG4gKi9cbmludGVyZmFjZSBEYXRhRWxlbWVudCBleHRlbmRzIEVsZW1lbnQge1xuICAvKiogVGhlIGRhdGEgYXR0cmlidXRlLiAqL1xuICBkYXRhPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj47XG59XG5cbi8qKlxuICogU2V0cyB0aGUgdmFsdWUgb2YgYSBkYXRhIGF0dHJpYnV0ZS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIGVsZW0gLSBUaGUgZWxlbWVudCB0byBzZXQgdGhlIGRhdGEgYXR0cmlidXRlIG9uLlxuICogQHBhcmFtIG5hbWUgLSBUaGUgZGF0YSBhdHRyaWJ1dGUncyBuYW1lLlxuICogQHBhcmFtIHZhbHVlIC0gVGhlIGRhdGEgYXR0cmlidXRlJ3MgdmFsdWUuXG4gKi9cbmZ1bmN0aW9uIHNldERhdGEoXG4gIGVsZW06IERhdGFFbGVtZW50LFxuICBuYW1lOiBzdHJpbmcgfCBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbiAgdmFsdWU/OiB1bmtub3duLFxuKSB7XG4gIGVsZW0uZGF0YSA/Pz0ge307XG5cbiAgaWYgKHR5cGVvZiBuYW1lID09PSAnb2JqZWN0JykgT2JqZWN0LmFzc2lnbihlbGVtLmRhdGEsIG5hbWUpO1xuICBlbHNlIGlmICh0eXBlb2YgbmFtZSA9PT0gJ3N0cmluZycgJiYgdmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgIGVsZW0uZGF0YVtuYW1lXSA9IHZhbHVlO1xuICB9XG59XG5cbi8qKlxuICogUmVhZCBfYWxsXyBIVE1MNSBgZGF0YS0qYCBhdHRyaWJ1dGVzIGZyb20gdGhlIGVxdWl2YWxlbnQgSFRNTDUgYGRhdGEtKmBcbiAqIGF0dHJpYnV0ZSwgYW5kIGNhY2hlIHRoZSB2YWx1ZSBpbiB0aGUgbm9kZSdzIGludGVybmFsIGRhdGEgc3RvcmUuXG4gKlxuICogQHByaXZhdGVcbiAqIEBjYXRlZ29yeSBBdHRyaWJ1dGVzXG4gKiBAcGFyYW0gZWwgLSBFbGVtZW50IHRvIGdldCB0aGUgZGF0YSBhdHRyaWJ1dGUgb2YuXG4gKiBAcmV0dXJucyBBIG1hcCB3aXRoIGFsbCBvZiB0aGUgZGF0YSBhdHRyaWJ1dGVzLlxuICovXG5mdW5jdGlvbiByZWFkQWxsRGF0YShlbDogRGF0YUVsZW1lbnQpOiB1bmtub3duIHtcbiAgZm9yIChjb25zdCBkb21OYW1lIG9mIE9iamVjdC5rZXlzKGVsLmF0dHJpYnMpKSB7XG4gICAgaWYgKCFkb21OYW1lLnN0YXJ0c1dpdGgoZGF0YUF0dHJQcmVmaXgpKSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBjb25zdCBqc05hbWUgPSBjYW1lbENhc2UoZG9tTmFtZS5zbGljZShkYXRhQXR0clByZWZpeC5sZW5ndGgpKTtcblxuICAgIGlmICghaGFzT3duLmNhbGwoZWwuZGF0YSwganNOYW1lKSkge1xuICAgICAgZWwuZGF0YSFbanNOYW1lXSA9IHBhcnNlRGF0YVZhbHVlKGVsLmF0dHJpYnNbZG9tTmFtZV0pO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBlbC5kYXRhO1xufVxuXG4vKipcbiAqIFJlYWQgdGhlIHNwZWNpZmllZCBhdHRyaWJ1dGUgZnJvbSB0aGUgZXF1aXZhbGVudCBIVE1MNSBgZGF0YS0qYCBhdHRyaWJ1dGUsXG4gKiBhbmQgKGlmIHByZXNlbnQpIGNhY2hlIHRoZSB2YWx1ZSBpbiB0aGUgbm9kZSdzIGludGVybmFsIGRhdGEgc3RvcmUuXG4gKlxuICogQHByaXZhdGVcbiAqIEBjYXRlZ29yeSBBdHRyaWJ1dGVzXG4gKiBAcGFyYW0gZWwgLSBFbGVtZW50IHRvIGdldCB0aGUgZGF0YSBhdHRyaWJ1dGUgb2YuXG4gKiBAcGFyYW0gbmFtZSAtIE5hbWUgb2YgdGhlIGRhdGEgYXR0cmlidXRlLlxuICogQHJldHVybnMgVGhlIGRhdGEgYXR0cmlidXRlJ3MgdmFsdWUuXG4gKi9cbmZ1bmN0aW9uIHJlYWREYXRhKGVsOiBEYXRhRWxlbWVudCwgbmFtZTogc3RyaW5nKTogdW5rbm93biB7XG4gIGNvbnN0IGRvbU5hbWUgPSBkYXRhQXR0clByZWZpeCArIGNzc0Nhc2UobmFtZSk7XG4gIGNvbnN0IGRhdGEgPSBlbC5kYXRhITtcblxuICBpZiAoaGFzT3duLmNhbGwoZGF0YSwgbmFtZSkpIHtcbiAgICByZXR1cm4gZGF0YVtuYW1lXTtcbiAgfVxuXG4gIGlmIChoYXNPd24uY2FsbChlbC5hdHRyaWJzLCBkb21OYW1lKSkge1xuICAgIHJldHVybiAoZGF0YVtuYW1lXSA9IHBhcnNlRGF0YVZhbHVlKGVsLmF0dHJpYnNbZG9tTmFtZV0pKTtcbiAgfVxuXG4gIHJldHVybiB1bmRlZmluZWQ7XG59XG5cbi8qKlxuICogQ29lcmNlIHN0cmluZyBkYXRhLSogYXR0cmlidXRlcyB0byB0aGVpciBjb3JyZXNwb25kaW5nIEphdmFTY3JpcHQgcHJpbWl0aXZlcy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQGNhdGVnb3J5IEF0dHJpYnV0ZXNcbiAqIEBwYXJhbSB2YWx1ZSAtIFRoZSB2YWx1ZSB0byBwYXJzZS5cbiAqIEByZXR1cm5zIFRoZSBwYXJzZWQgdmFsdWUuXG4gKi9cbmZ1bmN0aW9uIHBhcnNlRGF0YVZhbHVlKHZhbHVlOiBzdHJpbmcpOiB1bmtub3duIHtcbiAgaWYgKHZhbHVlID09PSAnbnVsbCcpIHJldHVybiBudWxsO1xuICBpZiAodmFsdWUgPT09ICd0cnVlJykgcmV0dXJuIHRydWU7XG4gIGlmICh2YWx1ZSA9PT0gJ2ZhbHNlJykgcmV0dXJuIGZhbHNlO1xuICBjb25zdCBudW0gPSBOdW1iZXIodmFsdWUpO1xuICBpZiAodmFsdWUgPT09IFN0cmluZyhudW0pKSByZXR1cm4gbnVtO1xuICBpZiAocmJyYWNlLnRlc3QodmFsdWUpKSB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBKU09OLnBhcnNlKHZhbHVlKTtcbiAgICB9IGNhdGNoIHtcbiAgICAgIC8qIElnbm9yZSAqL1xuICAgIH1cbiAgfVxuICByZXR1cm4gdmFsdWU7XG59XG5cbi8qKlxuICogTWV0aG9kIGZvciBnZXR0aW5nIGRhdGEgYXR0cmlidXRlcywgZm9yIG9ubHkgdGhlIGZpcnN0IGVsZW1lbnQgaW4gdGhlIG1hdGNoZWRcbiAqIHNldC5cbiAqXG4gKiBAY2F0ZWdvcnkgQXR0cmlidXRlc1xuICogQGV4YW1wbGVcbiAqXG4gKiBgYGBqc1xuICogJCgnPGRpdiBkYXRhLWFwcGxlLWNvbG9yPVwicmVkXCI+PC9kaXY+JykuZGF0YSgnYXBwbGUtY29sb3InKTtcbiAqIC8vPT4gJ3JlZCdcbiAqIGBgYFxuICpcbiAqIEBwYXJhbSBuYW1lIC0gTmFtZSBvZiB0aGUgZGF0YSBhdHRyaWJ1dGUuXG4gKiBAcmV0dXJucyBUaGUgZGF0YSBhdHRyaWJ1dGUncyB2YWx1ZSwgb3IgYHVuZGVmaW5lZGAgaWYgdGhlIGF0dHJpYnV0ZSBkb2VzIG5vdFxuICogICBleGlzdC5cbiAqIEBzZWUge0BsaW5rIGh0dHBzOi8vYXBpLmpxdWVyeS5jb20vZGF0YS99XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkYXRhPFQgZXh0ZW5kcyBBbnlOb2RlPihcbiAgdGhpczogQ2hlZXJpbzxUPixcbiAgbmFtZTogc3RyaW5nLFxuKTogdW5rbm93biB8IHVuZGVmaW5lZDtcbi8qKlxuICogTWV0aG9kIGZvciBnZXR0aW5nIGFsbCBvZiBhbiBlbGVtZW50J3MgZGF0YSBhdHRyaWJ1dGVzLCBmb3Igb25seSB0aGUgZmlyc3RcbiAqIGVsZW1lbnQgaW4gdGhlIG1hdGNoZWQgc2V0LlxuICpcbiAqIEBjYXRlZ29yeSBBdHRyaWJ1dGVzXG4gKiBAZXhhbXBsZVxuICpcbiAqIGBgYGpzXG4gKiAkKCc8ZGl2IGRhdGEtYXBwbGUtY29sb3I9XCJyZWRcIj48L2Rpdj4nKS5kYXRhKCk7XG4gKiAvLz0+IHsgYXBwbGVDb2xvcjogJ3JlZCcgfVxuICogYGBgXG4gKlxuICogQHJldHVybnMgQSBtYXAgd2l0aCBhbGwgb2YgdGhlIGRhdGEgYXR0cmlidXRlcy5cbiAqIEBzZWUge0BsaW5rIGh0dHBzOi8vYXBpLmpxdWVyeS5jb20vZGF0YS99XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkYXRhPFQgZXh0ZW5kcyBBbnlOb2RlPihcbiAgdGhpczogQ2hlZXJpbzxUPixcbik6IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuLyoqXG4gKiBNZXRob2QgZm9yIHNldHRpbmcgZGF0YSBhdHRyaWJ1dGVzLCBmb3Igb25seSB0aGUgZmlyc3QgZWxlbWVudCBpbiB0aGUgbWF0Y2hlZFxuICogc2V0LlxuICpcbiAqIEBjYXRlZ29yeSBBdHRyaWJ1dGVzXG4gKiBAZXhhbXBsZVxuICpcbiAqIGBgYGpzXG4gKiBjb25zdCBhcHBsZSA9ICQoJy5hcHBsZScpLmRhdGEoJ2tpbmQnLCAnbWFjJyk7XG4gKlxuICogYXBwbGUuZGF0YSgna2luZCcpO1xuICogLy89PiAnbWFjJ1xuICogYGBgXG4gKlxuICogQHBhcmFtIG5hbWUgLSBOYW1lIG9mIHRoZSBkYXRhIGF0dHJpYnV0ZS5cbiAqIEBwYXJhbSB2YWx1ZSAtIFRoZSBuZXcgdmFsdWUuXG4gKiBAcmV0dXJucyBUaGUgaW5zdGFuY2UgaXRzZWxmLlxuICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9hcGkuanF1ZXJ5LmNvbS9kYXRhL31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGRhdGE8VCBleHRlbmRzIEFueU5vZGU+KFxuICB0aGlzOiBDaGVlcmlvPFQ+LFxuICBuYW1lOiBzdHJpbmcsXG4gIHZhbHVlOiB1bmtub3duLFxuKTogQ2hlZXJpbzxUPjtcbi8qKlxuICogTWV0aG9kIGZvciBzZXR0aW5nIG11bHRpcGxlIGRhdGEgYXR0cmlidXRlcyBhdCBvbmNlLCBmb3Igb25seSB0aGUgZmlyc3RcbiAqIGVsZW1lbnQgaW4gdGhlIG1hdGNoZWQgc2V0LlxuICpcbiAqIEBjYXRlZ29yeSBBdHRyaWJ1dGVzXG4gKiBAZXhhbXBsZVxuICpcbiAqIGBgYGpzXG4gKiBjb25zdCBhcHBsZSA9ICQoJy5hcHBsZScpLmRhdGEoeyBraW5kOiAnbWFjJyB9KTtcbiAqXG4gKiBhcHBsZS5kYXRhKCdraW5kJyk7XG4gKiAvLz0+ICdtYWMnXG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0gdmFsdWVzIC0gTWFwIG9mIG5hbWVzIHRvIHZhbHVlcy5cbiAqIEByZXR1cm5zIFRoZSBpbnN0YW5jZSBpdHNlbGYuXG4gKiBAc2VlIHtAbGluayBodHRwczovL2FwaS5qcXVlcnkuY29tL2RhdGEvfVxuICovXG5leHBvcnQgZnVuY3Rpb24gZGF0YTxUIGV4dGVuZHMgQW55Tm9kZT4oXG4gIHRoaXM6IENoZWVyaW88VD4sXG4gIHZhbHVlczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4pOiBDaGVlcmlvPFQ+O1xuZXhwb3J0IGZ1bmN0aW9uIGRhdGE8VCBleHRlbmRzIEFueU5vZGU+KFxuICB0aGlzOiBDaGVlcmlvPFQ+LFxuICBuYW1lPzogc3RyaW5nIHwgUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4gIHZhbHVlPzogdW5rbm93bixcbik6IHVua25vd24gfCBDaGVlcmlvPFQ+IHwgdW5kZWZpbmVkIHwgUmVjb3JkPHN0cmluZywgdW5rbm93bj4ge1xuICBjb25zdCBlbGVtID0gdGhpc1swXTtcblxuICBpZiAoIWVsZW0gfHwgIWlzVGFnKGVsZW0pKSByZXR1cm47XG5cbiAgY29uc3QgZGF0YUVsOiBEYXRhRWxlbWVudCA9IGVsZW07XG4gIGRhdGFFbC5kYXRhID8/PSB7fTtcblxuICAvLyBSZXR1cm4gdGhlIGVudGlyZSBkYXRhIG9iamVjdCBpZiBubyBkYXRhIHNwZWNpZmllZFxuICBpZiAobmFtZSA9PSBudWxsKSB7XG4gICAgcmV0dXJuIHJlYWRBbGxEYXRhKGRhdGFFbCk7XG4gIH1cblxuICAvLyBTZXQgdGhlIHZhbHVlICh3aXRoIGF0dHIgbWFwIHN1cHBvcnQpXG4gIGlmICh0eXBlb2YgbmFtZSA9PT0gJ29iamVjdCcgfHwgdmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgIGRvbUVhY2godGhpcywgKGVsKSA9PiB7XG4gICAgICBpZiAoaXNUYWcoZWwpKSB7XG4gICAgICAgIGlmICh0eXBlb2YgbmFtZSA9PT0gJ29iamVjdCcpIHNldERhdGEoZWwsIG5hbWUpO1xuICAgICAgICBlbHNlIHNldERhdGEoZWwsIG5hbWUsIHZhbHVlIGFzIHVua25vd24pO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgcmV0dXJuIHJlYWREYXRhKGRhdGFFbCwgbmFtZSk7XG59XG5cbi8qKlxuICogTWV0aG9kIGZvciBnZXR0aW5nIHRoZSB2YWx1ZSBvZiBpbnB1dCwgc2VsZWN0LCBhbmQgdGV4dGFyZWEuIE5vdGU6IFN1cHBvcnRcbiAqIGZvciBgbWFwYCwgYW5kIGBmdW5jdGlvbmAgaGFzIG5vdCBiZWVuIGFkZGVkIHlldC5cbiAqXG4gKiBAY2F0ZWdvcnkgQXR0cmlidXRlc1xuICogQGV4YW1wbGVcbiAqXG4gKiBgYGBqc1xuICogJCgnaW5wdXRbdHlwZT1cInRleHRcIl0nKS52YWwoKTtcbiAqIC8vPT4gaW5wdXRfdGV4dFxuICogYGBgXG4gKlxuICogQHJldHVybnMgVGhlIHZhbHVlLlxuICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9hcGkuanF1ZXJ5LmNvbS92YWwvfVxuICovXG5leHBvcnQgZnVuY3Rpb24gdmFsPFQgZXh0ZW5kcyBBbnlOb2RlPihcbiAgdGhpczogQ2hlZXJpbzxUPixcbik6IHN0cmluZyB8IHVuZGVmaW5lZCB8IHN0cmluZ1tdO1xuLyoqXG4gKiBNZXRob2QgZm9yIHNldHRpbmcgdGhlIHZhbHVlIG9mIGlucHV0LCBzZWxlY3QsIGFuZCB0ZXh0YXJlYS4gTm90ZTogU3VwcG9ydFxuICogZm9yIGBtYXBgLCBhbmQgYGZ1bmN0aW9uYCBoYXMgbm90IGJlZW4gYWRkZWQgeWV0LlxuICpcbiAqIEBjYXRlZ29yeSBBdHRyaWJ1dGVzXG4gKiBAZXhhbXBsZVxuICpcbiAqIGBgYGpzXG4gKiAkKCdpbnB1dFt0eXBlPVwidGV4dFwiXScpLnZhbCgndGVzdCcpLmh0bWwoKTtcbiAqIC8vPT4gPGlucHV0IHR5cGU9XCJ0ZXh0XCIgdmFsdWU9XCJ0ZXN0XCIvPlxuICogYGBgXG4gKlxuICogQHBhcmFtIHZhbHVlIC0gVGhlIG5ldyB2YWx1ZS5cbiAqIEByZXR1cm5zIFRoZSBpbnN0YW5jZSBpdHNlbGYuXG4gKiBAc2VlIHtAbGluayBodHRwczovL2FwaS5qcXVlcnkuY29tL3ZhbC99XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB2YWw8VCBleHRlbmRzIEFueU5vZGU+KFxuICB0aGlzOiBDaGVlcmlvPFQ+LFxuICB2YWx1ZTogc3RyaW5nIHwgc3RyaW5nW10sXG4pOiBDaGVlcmlvPFQ+O1xuZXhwb3J0IGZ1bmN0aW9uIHZhbDxUIGV4dGVuZHMgQW55Tm9kZT4oXG4gIHRoaXM6IENoZWVyaW88VD4sXG4gIHZhbHVlPzogc3RyaW5nIHwgc3RyaW5nW10sXG4pOiBzdHJpbmcgfCBzdHJpbmdbXSB8IENoZWVyaW88VD4gfCB1bmRlZmluZWQge1xuICBjb25zdCBxdWVyeWluZyA9IGFyZ3VtZW50cy5sZW5ndGggPT09IDA7XG4gIGNvbnN0IGVsZW1lbnQgPSB0aGlzWzBdO1xuXG4gIGlmICghZWxlbWVudCB8fCAhaXNUYWcoZWxlbWVudCkpIHJldHVybiBxdWVyeWluZyA/IHVuZGVmaW5lZCA6IHRoaXM7XG5cbiAgc3dpdGNoIChlbGVtZW50Lm5hbWUpIHtcbiAgICBjYXNlICd0ZXh0YXJlYSc6IHtcbiAgICAgIHJldHVybiB0aGlzLnRleHQodmFsdWUgYXMgc3RyaW5nKTtcbiAgICB9XG4gICAgY2FzZSAnc2VsZWN0Jzoge1xuICAgICAgY29uc3Qgb3B0aW9uID0gdGhpcy5maW5kKCdvcHRpb246c2VsZWN0ZWQnKTtcbiAgICAgIGlmICghcXVlcnlpbmcpIHtcbiAgICAgICAgaWYgKHRoaXMuYXR0cignbXVsdGlwbGUnKSA9PSBudWxsICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuZmluZCgnb3B0aW9uJykucmVtb3ZlQXR0cignc2VsZWN0ZWQnKTtcblxuICAgICAgICBjb25zdCB2YWx1ZXMgPSB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnID8gdmFsdWUgOiBbdmFsdWVdO1xuICAgICAgICBmb3IgKGNvbnN0IHZhbCBvZiB2YWx1ZXMpIHtcbiAgICAgICAgICB0aGlzLmZpbmQoYG9wdGlvblt2YWx1ZT1cIiR7dmFsfVwiXWApLmF0dHIoJ3NlbGVjdGVkJywgJycpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzLmF0dHIoJ211bHRpcGxlJylcbiAgICAgICAgPyBvcHRpb24udG9BcnJheSgpLm1hcCgoZWwpID0+IHRleHQoZWwuY2hpbGRyZW4pKVxuICAgICAgICA6IG9wdGlvbi5hdHRyKCd2YWx1ZScpO1xuICAgIH1cbiAgICBjYXNlICdpbnB1dCc6XG4gICAgY2FzZSAnb3B0aW9uJzoge1xuICAgICAgcmV0dXJuIHF1ZXJ5aW5nXG4gICAgICAgID8gdGhpcy5hdHRyKCd2YWx1ZScpXG4gICAgICAgIDogdGhpcy5hdHRyKCd2YWx1ZScsIHZhbHVlIGFzIHN0cmluZyk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuLyoqXG4gKiBSZW1vdmUgYW4gYXR0cmlidXRlLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gZWxlbSAtIE5vZGUgdG8gcmVtb3ZlIGF0dHJpYnV0ZSBmcm9tLlxuICogQHBhcmFtIG5hbWUgLSBOYW1lIG9mIHRoZSBhdHRyaWJ1dGUgdG8gcmVtb3ZlLlxuICovXG5mdW5jdGlvbiByZW1vdmVBdHRyaWJ1dGUoZWxlbTogRWxlbWVudCwgbmFtZTogc3RyaW5nKSB7XG4gIGlmICghZWxlbS5hdHRyaWJzIHx8ICFoYXNPd24uY2FsbChlbGVtLmF0dHJpYnMsIG5hbWUpKSByZXR1cm47XG5cbiAgZGVsZXRlIGVsZW0uYXR0cmlic1tuYW1lXTtcbn1cblxuLyoqXG4gKiBTcGxpdHMgYSBzcGFjZS1zZXBhcmF0ZWQgbGlzdCBvZiBuYW1lcyB0byBpbmRpdmlkdWFsIG5hbWVzLlxuICpcbiAqIEBjYXRlZ29yeSBBdHRyaWJ1dGVzXG4gKiBAcGFyYW0gbmFtZXMgLSBOYW1lcyB0byBzcGxpdC5cbiAqIEByZXR1cm5zIC0gU3BsaXQgbmFtZXMuXG4gKi9cbmZ1bmN0aW9uIHNwbGl0TmFtZXMobmFtZXM/OiBzdHJpbmcpOiBzdHJpbmdbXSB7XG4gIHJldHVybiBuYW1lcyA/IG5hbWVzLnRyaW0oKS5zcGxpdChyc3BhY2UpIDogW107XG59XG5cbi8qKlxuICogTWV0aG9kIGZvciByZW1vdmluZyBhdHRyaWJ1dGVzIGJ5IGBuYW1lYC5cbiAqXG4gKiBAY2F0ZWdvcnkgQXR0cmlidXRlc1xuICogQGV4YW1wbGVcbiAqXG4gKiBgYGBqc1xuICogJCgnLnBlYXInKS5yZW1vdmVBdHRyKCdjbGFzcycpLmh0bWwoKTtcbiAqIC8vPT4gPGxpPlBlYXI8L2xpPlxuICpcbiAqICQoJy5hcHBsZScpLmF0dHIoJ2lkJywgJ2Zhdm9yaXRlJyk7XG4gKiAkKCcuYXBwbGUnKS5yZW1vdmVBdHRyKCdpZCBjbGFzcycpLmh0bWwoKTtcbiAqIC8vPT4gPGxpPkFwcGxlPC9saT5cbiAqIGBgYFxuICpcbiAqIEBwYXJhbSBuYW1lIC0gTmFtZSBvZiB0aGUgYXR0cmlidXRlLlxuICogQHJldHVybnMgVGhlIGluc3RhbmNlIGl0c2VsZi5cbiAqIEBzZWUge0BsaW5rIGh0dHBzOi8vYXBpLmpxdWVyeS5jb20vcmVtb3ZlQXR0ci99XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZW1vdmVBdHRyPFQgZXh0ZW5kcyBBbnlOb2RlPihcbiAgdGhpczogQ2hlZXJpbzxUPixcbiAgbmFtZTogc3RyaW5nLFxuKTogQ2hlZXJpbzxUPiB7XG4gIGNvbnN0IGF0dHJOYW1lcyA9IHNwbGl0TmFtZXMobmFtZSk7XG5cbiAgZm9yIChjb25zdCBhdHRyTmFtZSBvZiBhdHRyTmFtZXMpIHtcbiAgICBkb21FYWNoKHRoaXMsIChlbGVtKSA9PiB7XG4gICAgICBpZiAoaXNUYWcoZWxlbSkpIHJlbW92ZUF0dHJpYnV0ZShlbGVtLCBhdHRyTmFtZSk7XG4gICAgfSk7XG4gIH1cblxuICByZXR1cm4gdGhpcztcbn1cblxuLyoqXG4gKiBDaGVjayB0byBzZWUgaWYgX2FueV8gb2YgdGhlIG1hdGNoZWQgZWxlbWVudHMgaGF2ZSB0aGUgZ2l2ZW4gYGNsYXNzTmFtZWAuXG4gKlxuICogQGNhdGVnb3J5IEF0dHJpYnV0ZXNcbiAqIEBleGFtcGxlXG4gKlxuICogYGBganNcbiAqICQoJy5wZWFyJykuaGFzQ2xhc3MoJ3BlYXInKTtcbiAqIC8vPT4gdHJ1ZVxuICpcbiAqICQoJ2FwcGxlJykuaGFzQ2xhc3MoJ2ZydWl0Jyk7XG4gKiAvLz0+IGZhbHNlXG4gKlxuICogJCgnbGknKS5oYXNDbGFzcygncGVhcicpO1xuICogLy89PiB0cnVlXG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0gY2xhc3NOYW1lIC0gTmFtZSBvZiB0aGUgY2xhc3MuXG4gKiBAcmV0dXJucyBJbmRpY2F0ZXMgaWYgYW4gZWxlbWVudCBoYXMgdGhlIGdpdmVuIGBjbGFzc05hbWVgLlxuICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9hcGkuanF1ZXJ5LmNvbS9oYXNDbGFzcy99XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBoYXNDbGFzczxUIGV4dGVuZHMgQW55Tm9kZT4oXG4gIHRoaXM6IENoZWVyaW88VD4sXG4gIGNsYXNzTmFtZTogc3RyaW5nLFxuKTogYm9vbGVhbiB7XG4gIHJldHVybiB0aGlzLnRvQXJyYXkoKS5zb21lKChlbGVtKSA9PiB7XG4gICAgY29uc3QgY2xhenogPSBpc1RhZyhlbGVtKSAmJiBlbGVtLmF0dHJpYnNbJ2NsYXNzJ107XG4gICAgbGV0IGlkeCA9IC0xO1xuXG4gICAgaWYgKGNsYXp6ICYmIGNsYXNzTmFtZS5sZW5ndGggPiAwKSB7XG4gICAgICB3aGlsZSAoKGlkeCA9IGNsYXp6LmluZGV4T2YoY2xhc3NOYW1lLCBpZHggKyAxKSkgPiAtMSkge1xuICAgICAgICBjb25zdCBlbmQgPSBpZHggKyBjbGFzc05hbWUubGVuZ3RoO1xuXG4gICAgICAgIGlmIChcbiAgICAgICAgICAoaWR4ID09PSAwIHx8IHJzcGFjZS50ZXN0KGNsYXp6W2lkeCAtIDFdKSkgJiZcbiAgICAgICAgICAoZW5kID09PSBjbGF6ei5sZW5ndGggfHwgcnNwYWNlLnRlc3QoY2xhenpbZW5kXSkpXG4gICAgICAgICkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9KTtcbn1cblxuLyoqXG4gKiBBZGRzIGNsYXNzKGVzKSB0byBhbGwgb2YgdGhlIG1hdGNoZWQgZWxlbWVudHMuIEFsc28gYWNjZXB0cyBhIGBmdW5jdGlvbmAuXG4gKlxuICogQGNhdGVnb3J5IEF0dHJpYnV0ZXNcbiAqIEBleGFtcGxlXG4gKlxuICogYGBganNcbiAqICQoJy5wZWFyJykuYWRkQ2xhc3MoJ2ZydWl0JykuaHRtbCgpO1xuICogLy89PiA8bGkgY2xhc3M9XCJwZWFyIGZydWl0XCI+UGVhcjwvbGk+XG4gKlxuICogJCgnLmFwcGxlJykuYWRkQ2xhc3MoJ2ZydWl0IHJlZCcpLmh0bWwoKTtcbiAqIC8vPT4gPGxpIGNsYXNzPVwiYXBwbGUgZnJ1aXQgcmVkXCI+QXBwbGU8L2xpPlxuICogYGBgXG4gKlxuICogQHBhcmFtIHZhbHVlIC0gTmFtZSBvZiBuZXcgY2xhc3MuXG4gKiBAcmV0dXJucyBUaGUgaW5zdGFuY2UgaXRzZWxmLlxuICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9hcGkuanF1ZXJ5LmNvbS9hZGRDbGFzcy99XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhZGRDbGFzczxUIGV4dGVuZHMgQW55Tm9kZSwgUiBleHRlbmRzIEFycmF5TGlrZTxUPj4oXG4gIHRoaXM6IFIsXG4gIHZhbHVlPzpcbiAgICB8IHN0cmluZ1xuICAgIHwgKCh0aGlzOiBFbGVtZW50LCBpOiBudW1iZXIsIGNsYXNzTmFtZTogc3RyaW5nKSA9PiBzdHJpbmcgfCB1bmRlZmluZWQpLFxuKTogUiB7XG4gIC8vIFN1cHBvcnQgZnVuY3Rpb25zXG4gIGlmICh0eXBlb2YgdmFsdWUgPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gZG9tRWFjaCh0aGlzLCAoZWwsIGkpID0+IHtcbiAgICAgIGlmIChpc1RhZyhlbCkpIHtcbiAgICAgICAgY29uc3QgY2xhc3NOYW1lID0gZWwuYXR0cmlic1snY2xhc3MnXSB8fCAnJztcbiAgICAgICAgYWRkQ2xhc3MuY2FsbChbZWxdLCB2YWx1ZS5jYWxsKGVsLCBpLCBjbGFzc05hbWUpKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8vIFJldHVybiBpZiBubyB2YWx1ZSBvciBub3QgYSBzdHJpbmcgb3IgZnVuY3Rpb25cbiAgaWYgKCF2YWx1ZSB8fCB0eXBlb2YgdmFsdWUgIT09ICdzdHJpbmcnKSByZXR1cm4gdGhpcztcblxuICBjb25zdCBjbGFzc05hbWVzID0gdmFsdWUuc3BsaXQocnNwYWNlKTtcbiAgY29uc3QgbnVtRWxlbWVudHMgPSB0aGlzLmxlbmd0aDtcblxuICBmb3IgKGxldCBpID0gMDsgaSA8IG51bUVsZW1lbnRzOyBpKyspIHtcbiAgICBjb25zdCBlbCA9IHRoaXNbaV07XG4gICAgLy8gSWYgc2VsZWN0ZWQgZWxlbWVudCBpc24ndCBhIHRhZywgbW92ZSBvblxuICAgIGlmICghaXNUYWcoZWwpKSBjb250aW51ZTtcblxuICAgIC8vIElmIHdlIGRvbid0IGFscmVhZHkgaGF2ZSBjbGFzc2VzIFx1MjAxNCBhbHdheXMgc2V0IHhtbE1vZGUgdG8gZmFsc2UgaGVyZSwgYXMgaXQgZG9lc24ndCBtYXR0ZXIgZm9yIGNsYXNzZXNcbiAgICBjb25zdCBjbGFzc05hbWUgPSBnZXRBdHRyKGVsLCAnY2xhc3MnLCBmYWxzZSk7XG5cbiAgICBpZiAoY2xhc3NOYW1lKSB7XG4gICAgICBsZXQgc2V0Q2xhc3MgPSBgICR7Y2xhc3NOYW1lfSBgO1xuXG4gICAgICAvLyBDaGVjayBpZiBjbGFzcyBhbHJlYWR5IGV4aXN0c1xuICAgICAgZm9yIChjb25zdCBjbiBvZiBjbGFzc05hbWVzKSB7XG4gICAgICAgIGNvbnN0IGFwcGVuZENsYXNzID0gYCR7Y259IGA7XG4gICAgICAgIGlmICghc2V0Q2xhc3MuaW5jbHVkZXMoYCAke2FwcGVuZENsYXNzfWApKSBzZXRDbGFzcyArPSBhcHBlbmRDbGFzcztcbiAgICAgIH1cblxuICAgICAgc2V0QXR0cihlbCwgJ2NsYXNzJywgc2V0Q2xhc3MudHJpbSgpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgc2V0QXR0cihlbCwgJ2NsYXNzJywgY2xhc3NOYW1lcy5qb2luKCcgJykudHJpbSgpKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdGhpcztcbn1cblxuLyoqXG4gKiBSZW1vdmVzIG9uZSBvciBtb3JlIHNwYWNlLXNlcGFyYXRlZCBjbGFzc2VzIGZyb20gdGhlIHNlbGVjdGVkIGVsZW1lbnRzLiBJZiBub1xuICogYGNsYXNzTmFtZWAgaXMgZGVmaW5lZCwgYWxsIGNsYXNzZXMgd2lsbCBiZSByZW1vdmVkLiBBbHNvIGFjY2VwdHMgYVxuICogYGZ1bmN0aW9uYC5cbiAqXG4gKiBAY2F0ZWdvcnkgQXR0cmlidXRlc1xuICogQGV4YW1wbGVcbiAqXG4gKiBgYGBqc1xuICogJCgnLnBlYXInKS5yZW1vdmVDbGFzcygncGVhcicpLmh0bWwoKTtcbiAqIC8vPT4gPGxpIGNsYXNzPVwiXCI+UGVhcjwvbGk+XG4gKlxuICogJCgnLmFwcGxlJykuYWRkQ2xhc3MoJ3JlZCcpLnJlbW92ZUNsYXNzKCkuaHRtbCgpO1xuICogLy89PiA8bGkgY2xhc3M9XCJcIj5BcHBsZTwvbGk+XG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0gbmFtZSAtIE5hbWUgb2YgdGhlIGNsYXNzLiBJZiBub3Qgc3BlY2lmaWVkLCByZW1vdmVzIGFsbCBlbGVtZW50cy5cbiAqIEByZXR1cm5zIFRoZSBpbnN0YW5jZSBpdHNlbGYuXG4gKiBAc2VlIHtAbGluayBodHRwczovL2FwaS5qcXVlcnkuY29tL3JlbW92ZUNsYXNzL31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlbW92ZUNsYXNzPFQgZXh0ZW5kcyBBbnlOb2RlLCBSIGV4dGVuZHMgQXJyYXlMaWtlPFQ+PihcbiAgdGhpczogUixcbiAgbmFtZT86XG4gICAgfCBzdHJpbmdcbiAgICB8ICgodGhpczogRWxlbWVudCwgaTogbnVtYmVyLCBjbGFzc05hbWU6IHN0cmluZykgPT4gc3RyaW5nIHwgdW5kZWZpbmVkKSxcbik6IFIge1xuICAvLyBIYW5kbGUgaWYgdmFsdWUgaXMgYSBmdW5jdGlvblxuICBpZiAodHlwZW9mIG5hbWUgPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gZG9tRWFjaCh0aGlzLCAoZWwsIGkpID0+IHtcbiAgICAgIGlmIChpc1RhZyhlbCkpIHtcbiAgICAgICAgcmVtb3ZlQ2xhc3MuY2FsbChbZWxdLCBuYW1lLmNhbGwoZWwsIGksIGVsLmF0dHJpYnNbJ2NsYXNzJ10gfHwgJycpKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIGNvbnN0IGNsYXNzZXMgPSBzcGxpdE5hbWVzKG5hbWUpO1xuICBjb25zdCBudW1DbGFzc2VzID0gY2xhc3Nlcy5sZW5ndGg7XG4gIGNvbnN0IHJlbW92ZUFsbCA9IGFyZ3VtZW50cy5sZW5ndGggPT09IDA7XG5cbiAgcmV0dXJuIGRvbUVhY2godGhpcywgKGVsKSA9PiB7XG4gICAgaWYgKCFpc1RhZyhlbCkpIHJldHVybjtcblxuICAgIGlmIChyZW1vdmVBbGwpIHtcbiAgICAgIC8vIFNob3J0IGNpcmN1aXQgdGhlIHJlbW92ZSBhbGwgY2FzZSBhcyB0aGlzIGlzIHRoZSBuaWNlIG9uZVxuICAgICAgZWwuYXR0cmlic1snY2xhc3MnXSA9ICcnO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBlbENsYXNzZXMgPSBzcGxpdE5hbWVzKGVsLmF0dHJpYnNbJ2NsYXNzJ10pO1xuICAgICAgbGV0IGNoYW5nZWQgPSBmYWxzZTtcblxuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBudW1DbGFzc2VzOyBqKyspIHtcbiAgICAgICAgY29uc3QgaW5kZXggPSBlbENsYXNzZXMuaW5kZXhPZihjbGFzc2VzW2pdKTtcblxuICAgICAgICBpZiAoaW5kZXggPj0gMCkge1xuICAgICAgICAgIGVsQ2xhc3Nlcy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICAgIGNoYW5nZWQgPSB0cnVlO1xuXG4gICAgICAgICAgLypcbiAgICAgICAgICAgKiBXZSBoYXZlIHRvIGRvIGFub3RoZXIgcGFzcyB0byBlbnN1cmUgdGhhdCB0aGVyZSBhcmUgbm90IGR1cGxpY2F0ZVxuICAgICAgICAgICAqIGNsYXNzZXMgbGlzdGVkXG4gICAgICAgICAgICovXG4gICAgICAgICAgai0tO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoY2hhbmdlZCkge1xuICAgICAgICBlbC5hdHRyaWJzWydjbGFzcyddID0gZWxDbGFzc2VzLmpvaW4oJyAnKTtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xufVxuXG4vKipcbiAqIEFkZCBvciByZW1vdmUgY2xhc3MoZXMpIGZyb20gdGhlIG1hdGNoZWQgZWxlbWVudHMsIGRlcGVuZGluZyBvbiBlaXRoZXIgdGhlXG4gKiBjbGFzcydzIHByZXNlbmNlIG9yIHRoZSB2YWx1ZSBvZiB0aGUgc3dpdGNoIGFyZ3VtZW50LiBBbHNvIGFjY2VwdHMgYVxuICogYGZ1bmN0aW9uYC5cbiAqXG4gKiBAY2F0ZWdvcnkgQXR0cmlidXRlc1xuICogQGV4YW1wbGVcbiAqXG4gKiBgYGBqc1xuICogJCgnLmFwcGxlLmdyZWVuJykudG9nZ2xlQ2xhc3MoJ2ZydWl0IGdyZWVuIHJlZCcpLmh0bWwoKTtcbiAqIC8vPT4gPGxpIGNsYXNzPVwiYXBwbGUgZnJ1aXQgcmVkXCI+QXBwbGU8L2xpPlxuICpcbiAqICQoJy5hcHBsZS5ncmVlbicpLnRvZ2dsZUNsYXNzKCdmcnVpdCBncmVlbiByZWQnLCB0cnVlKS5odG1sKCk7XG4gKiAvLz0+IDxsaSBjbGFzcz1cImFwcGxlIGdyZWVuIGZydWl0IHJlZFwiPkFwcGxlPC9saT5cbiAqIGBgYFxuICpcbiAqIEBwYXJhbSB2YWx1ZSAtIE5hbWUgb2YgdGhlIGNsYXNzLiBDYW4gYWxzbyBiZSBhIGZ1bmN0aW9uLlxuICogQHBhcmFtIHN0YXRlVmFsIC0gSWYgc3BlY2lmaWVkIHRoZSBzdGF0ZSBvZiB0aGUgY2xhc3MuXG4gKiBAcmV0dXJucyBUaGUgaW5zdGFuY2UgaXRzZWxmLlxuICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9hcGkuanF1ZXJ5LmNvbS90b2dnbGVDbGFzcy99XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0b2dnbGVDbGFzczxUIGV4dGVuZHMgQW55Tm9kZSwgUiBleHRlbmRzIEFycmF5TGlrZTxUPj4oXG4gIHRoaXM6IFIsXG4gIHZhbHVlPzpcbiAgICB8IHN0cmluZ1xuICAgIHwgKChcbiAgICAgICAgdGhpczogRWxlbWVudCxcbiAgICAgICAgaTogbnVtYmVyLFxuICAgICAgICBjbGFzc05hbWU6IHN0cmluZyxcbiAgICAgICAgc3RhdGVWYWw/OiBib29sZWFuLFxuICAgICAgKSA9PiBzdHJpbmcpLFxuICBzdGF0ZVZhbD86IGJvb2xlYW4sXG4pOiBSIHtcbiAgLy8gU3VwcG9ydCBmdW5jdGlvbnNcbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiBkb21FYWNoKHRoaXMsIChlbCwgaSkgPT4ge1xuICAgICAgaWYgKGlzVGFnKGVsKSkge1xuICAgICAgICB0b2dnbGVDbGFzcy5jYWxsKFxuICAgICAgICAgIFtlbF0sXG4gICAgICAgICAgdmFsdWUuY2FsbChlbCwgaSwgZWwuYXR0cmlic1snY2xhc3MnXSB8fCAnJywgc3RhdGVWYWwpLFxuICAgICAgICAgIHN0YXRlVmFsLFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgLy8gUmV0dXJuIGlmIG5vIHZhbHVlIG9yIG5vdCBhIHN0cmluZyBvciBmdW5jdGlvblxuICBpZiAoIXZhbHVlIHx8IHR5cGVvZiB2YWx1ZSAhPT0gJ3N0cmluZycpIHJldHVybiB0aGlzO1xuXG4gIGNvbnN0IGNsYXNzTmFtZXMgPSB2YWx1ZS5zcGxpdChyc3BhY2UpO1xuICBjb25zdCBudW1DbGFzc2VzID0gY2xhc3NOYW1lcy5sZW5ndGg7XG4gIGNvbnN0IHN0YXRlID0gdHlwZW9mIHN0YXRlVmFsID09PSAnYm9vbGVhbicgPyAoc3RhdGVWYWwgPyAxIDogLTEpIDogMDtcbiAgY29uc3QgbnVtRWxlbWVudHMgPSB0aGlzLmxlbmd0aDtcblxuICBmb3IgKGxldCBpID0gMDsgaSA8IG51bUVsZW1lbnRzOyBpKyspIHtcbiAgICBjb25zdCBlbCA9IHRoaXNbaV07XG4gICAgLy8gSWYgc2VsZWN0ZWQgZWxlbWVudCBpc24ndCBhIHRhZywgbW92ZSBvblxuICAgIGlmICghaXNUYWcoZWwpKSBjb250aW51ZTtcblxuICAgIGNvbnN0IGVsZW1lbnRDbGFzc2VzID0gc3BsaXROYW1lcyhlbC5hdHRyaWJzWydjbGFzcyddKTtcblxuICAgIC8vIENoZWNrIGlmIGNsYXNzIGFscmVhZHkgZXhpc3RzXG4gICAgZm9yIChsZXQgaiA9IDA7IGogPCBudW1DbGFzc2VzOyBqKyspIHtcbiAgICAgIC8vIENoZWNrIGlmIHRoZSBjbGFzcyBuYW1lIGlzIGN1cnJlbnRseSBkZWZpbmVkXG4gICAgICBjb25zdCBpbmRleCA9IGVsZW1lbnRDbGFzc2VzLmluZGV4T2YoY2xhc3NOYW1lc1tqXSk7XG5cbiAgICAgIC8vIEFkZCBpZiBzdGF0ZVZhbHVlID09PSB0cnVlIG9yIHdlIGFyZSB0b2dnbGluZyBhbmQgdGhlcmUgaXMgbm8gdmFsdWVcbiAgICAgIGlmIChzdGF0ZSA+PSAwICYmIGluZGV4IDwgMCkge1xuICAgICAgICBlbGVtZW50Q2xhc3Nlcy5wdXNoKGNsYXNzTmFtZXNbal0pO1xuICAgICAgfSBlbHNlIGlmIChzdGF0ZSA8PSAwICYmIGluZGV4ID49IDApIHtcbiAgICAgICAgLy8gT3RoZXJ3aXNlIHJlbW92ZSBidXQgb25seSBpZiB0aGUgaXRlbSBleGlzdHNcbiAgICAgICAgZWxlbWVudENsYXNzZXMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBlbC5hdHRyaWJzWydjbGFzcyddID0gZWxlbWVudENsYXNzZXMuam9pbignICcpO1xuICB9XG5cbiAgcmV0dXJuIHRoaXM7XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLkF0dHJpYnV0ZUFjdGlvbiA9IGV4cG9ydHMuSWdub3JlQ2FzZU1vZGUgPSBleHBvcnRzLlNlbGVjdG9yVHlwZSA9IHZvaWQgMDtcbnZhciBTZWxlY3RvclR5cGU7XG4oZnVuY3Rpb24gKFNlbGVjdG9yVHlwZSkge1xuICAgIFNlbGVjdG9yVHlwZVtcIkF0dHJpYnV0ZVwiXSA9IFwiYXR0cmlidXRlXCI7XG4gICAgU2VsZWN0b3JUeXBlW1wiUHNldWRvXCJdID0gXCJwc2V1ZG9cIjtcbiAgICBTZWxlY3RvclR5cGVbXCJQc2V1ZG9FbGVtZW50XCJdID0gXCJwc2V1ZG8tZWxlbWVudFwiO1xuICAgIFNlbGVjdG9yVHlwZVtcIlRhZ1wiXSA9IFwidGFnXCI7XG4gICAgU2VsZWN0b3JUeXBlW1wiVW5pdmVyc2FsXCJdID0gXCJ1bml2ZXJzYWxcIjtcbiAgICAvLyBUcmF2ZXJzYWxzXG4gICAgU2VsZWN0b3JUeXBlW1wiQWRqYWNlbnRcIl0gPSBcImFkamFjZW50XCI7XG4gICAgU2VsZWN0b3JUeXBlW1wiQ2hpbGRcIl0gPSBcImNoaWxkXCI7XG4gICAgU2VsZWN0b3JUeXBlW1wiRGVzY2VuZGFudFwiXSA9IFwiZGVzY2VuZGFudFwiO1xuICAgIFNlbGVjdG9yVHlwZVtcIlBhcmVudFwiXSA9IFwicGFyZW50XCI7XG4gICAgU2VsZWN0b3JUeXBlW1wiU2libGluZ1wiXSA9IFwic2libGluZ1wiO1xuICAgIFNlbGVjdG9yVHlwZVtcIkNvbHVtbkNvbWJpbmF0b3JcIl0gPSBcImNvbHVtbi1jb21iaW5hdG9yXCI7XG59KShTZWxlY3RvclR5cGUgPSBleHBvcnRzLlNlbGVjdG9yVHlwZSB8fCAoZXhwb3J0cy5TZWxlY3RvclR5cGUgPSB7fSkpO1xuLyoqXG4gKiBNb2RlcyBmb3IgaWdub3JlIGNhc2UuXG4gKlxuICogVGhpcyBjb3VsZCBiZSB1cGRhdGVkIHRvIGFuIGVudW0sIGFuZCB0aGUgb2JqZWN0IGlzXG4gKiB0aGUgY3VycmVudCBzdGFuZC1pbiB0aGF0IHdpbGwgYWxsb3cgY29kZSB0byBiZSB1cGRhdGVkXG4gKiB3aXRob3V0IGJpZyBjaGFuZ2VzLlxuICovXG5leHBvcnRzLklnbm9yZUNhc2VNb2RlID0ge1xuICAgIFVua25vd246IG51bGwsXG4gICAgUXVpcmtzTW9kZTogXCJxdWlya3NcIixcbiAgICBJZ25vcmVDYXNlOiB0cnVlLFxuICAgIENhc2VTZW5zaXRpdmU6IGZhbHNlLFxufTtcbnZhciBBdHRyaWJ1dGVBY3Rpb247XG4oZnVuY3Rpb24gKEF0dHJpYnV0ZUFjdGlvbikge1xuICAgIEF0dHJpYnV0ZUFjdGlvbltcIkFueVwiXSA9IFwiYW55XCI7XG4gICAgQXR0cmlidXRlQWN0aW9uW1wiRWxlbWVudFwiXSA9IFwiZWxlbWVudFwiO1xuICAgIEF0dHJpYnV0ZUFjdGlvbltcIkVuZFwiXSA9IFwiZW5kXCI7XG4gICAgQXR0cmlidXRlQWN0aW9uW1wiRXF1YWxzXCJdID0gXCJlcXVhbHNcIjtcbiAgICBBdHRyaWJ1dGVBY3Rpb25bXCJFeGlzdHNcIl0gPSBcImV4aXN0c1wiO1xuICAgIEF0dHJpYnV0ZUFjdGlvbltcIkh5cGhlblwiXSA9IFwiaHlwaGVuXCI7XG4gICAgQXR0cmlidXRlQWN0aW9uW1wiTm90XCJdID0gXCJub3RcIjtcbiAgICBBdHRyaWJ1dGVBY3Rpb25bXCJTdGFydFwiXSA9IFwic3RhcnRcIjtcbn0pKEF0dHJpYnV0ZUFjdGlvbiA9IGV4cG9ydHMuQXR0cmlidXRlQWN0aW9uIHx8IChleHBvcnRzLkF0dHJpYnV0ZUFjdGlvbiA9IHt9KSk7XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHsgdmFsdWU6IHRydWUgfSk7XG5leHBvcnRzLnBhcnNlID0gZXhwb3J0cy5pc1RyYXZlcnNhbCA9IHZvaWQgMDtcbnZhciB0eXBlc18xID0gcmVxdWlyZShcIi4vdHlwZXNcIik7XG52YXIgcmVOYW1lID0gL15bXlxcXFwjXT8oPzpcXFxcKD86W1xcZGEtZl17MSw2fVxccz98Lil8W1xcd1xcLVxcdTAwYjAtXFx1RkZGRl0pKy87XG52YXIgcmVFc2NhcGUgPSAvXFxcXChbXFxkYS1mXXsxLDZ9XFxzP3woXFxzKXwuKS9naTtcbnZhciBhY3Rpb25UeXBlcyA9IG5ldyBNYXAoW1xuICAgIFsxMjYgLyogVGlsZGUgKi8sIHR5cGVzXzEuQXR0cmlidXRlQWN0aW9uLkVsZW1lbnRdLFxuICAgIFs5NCAvKiBDaXJjdW1mbGV4ICovLCB0eXBlc18xLkF0dHJpYnV0ZUFjdGlvbi5TdGFydF0sXG4gICAgWzM2IC8qIERvbGxhciAqLywgdHlwZXNfMS5BdHRyaWJ1dGVBY3Rpb24uRW5kXSxcbiAgICBbNDIgLyogQXN0ZXJpc2sgKi8sIHR5cGVzXzEuQXR0cmlidXRlQWN0aW9uLkFueV0sXG4gICAgWzMzIC8qIEV4Y2xhbWF0aW9uTWFyayAqLywgdHlwZXNfMS5BdHRyaWJ1dGVBY3Rpb24uTm90XSxcbiAgICBbMTI0IC8qIFBpcGUgKi8sIHR5cGVzXzEuQXR0cmlidXRlQWN0aW9uLkh5cGhlbl0sXG5dKTtcbi8vIFBzZXVkb3MsIHdob3NlIGRhdGEgcHJvcGVydHkgaXMgcGFyc2VkIGFzIHdlbGwuXG52YXIgdW5wYWNrUHNldWRvcyA9IG5ldyBTZXQoW1xuICAgIFwiaGFzXCIsXG4gICAgXCJub3RcIixcbiAgICBcIm1hdGNoZXNcIixcbiAgICBcImlzXCIsXG4gICAgXCJ3aGVyZVwiLFxuICAgIFwiaG9zdFwiLFxuICAgIFwiaG9zdC1jb250ZXh0XCIsXG5dKTtcbi8qKlxuICogQ2hlY2tzIHdoZXRoZXIgYSBzcGVjaWZpYyBzZWxlY3RvciBpcyBhIHRyYXZlcnNhbC5cbiAqIFRoaXMgaXMgdXNlZnVsIGVnLiBpbiBzd2FwcGluZyB0aGUgb3JkZXIgb2YgZWxlbWVudHMgdGhhdFxuICogYXJlIG5vdCB0cmF2ZXJzYWxzLlxuICpcbiAqIEBwYXJhbSBzZWxlY3RvciBTZWxlY3RvciB0byBjaGVjay5cbiAqL1xuZnVuY3Rpb24gaXNUcmF2ZXJzYWwoc2VsZWN0b3IpIHtcbiAgICBzd2l0Y2ggKHNlbGVjdG9yLnR5cGUpIHtcbiAgICAgICAgY2FzZSB0eXBlc18xLlNlbGVjdG9yVHlwZS5BZGphY2VudDpcbiAgICAgICAgY2FzZSB0eXBlc18xLlNlbGVjdG9yVHlwZS5DaGlsZDpcbiAgICAgICAgY2FzZSB0eXBlc18xLlNlbGVjdG9yVHlwZS5EZXNjZW5kYW50OlxuICAgICAgICBjYXNlIHR5cGVzXzEuU2VsZWN0b3JUeXBlLlBhcmVudDpcbiAgICAgICAgY2FzZSB0eXBlc18xLlNlbGVjdG9yVHlwZS5TaWJsaW5nOlxuICAgICAgICBjYXNlIHR5cGVzXzEuU2VsZWN0b3JUeXBlLkNvbHVtbkNvbWJpbmF0b3I6XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG59XG5leHBvcnRzLmlzVHJhdmVyc2FsID0gaXNUcmF2ZXJzYWw7XG52YXIgc3RyaXBRdW90ZXNGcm9tUHNldWRvcyA9IG5ldyBTZXQoW1wiY29udGFpbnNcIiwgXCJpY29udGFpbnNcIl0pO1xuLy8gVW5lc2NhcGUgZnVuY3Rpb24gdGFrZW4gZnJvbSBodHRwczovL2dpdGh1Yi5jb20vanF1ZXJ5L3NpenpsZS9ibG9iL21hc3Rlci9zcmMvc2l6emxlLmpzI0wxNTJcbmZ1bmN0aW9uIGZ1bmVzY2FwZShfLCBlc2NhcGVkLCBlc2NhcGVkV2hpdGVzcGFjZSkge1xuICAgIHZhciBoaWdoID0gcGFyc2VJbnQoZXNjYXBlZCwgMTYpIC0gMHgxMDAwMDtcbiAgICAvLyBOYU4gbWVhbnMgbm9uLWNvZGVwb2ludFxuICAgIHJldHVybiBoaWdoICE9PSBoaWdoIHx8IGVzY2FwZWRXaGl0ZXNwYWNlXG4gICAgICAgID8gZXNjYXBlZFxuICAgICAgICA6IGhpZ2ggPCAwXG4gICAgICAgICAgICA/IC8vIEJNUCBjb2RlcG9pbnRcbiAgICAgICAgICAgICAgICBTdHJpbmcuZnJvbUNoYXJDb2RlKGhpZ2ggKyAweDEwMDAwKVxuICAgICAgICAgICAgOiAvLyBTdXBwbGVtZW50YWwgUGxhbmUgY29kZXBvaW50IChzdXJyb2dhdGUgcGFpcilcbiAgICAgICAgICAgICAgICBTdHJpbmcuZnJvbUNoYXJDb2RlKChoaWdoID4+IDEwKSB8IDB4ZDgwMCwgKGhpZ2ggJiAweDNmZikgfCAweGRjMDApO1xufVxuZnVuY3Rpb24gdW5lc2NhcGVDU1Moc3RyKSB7XG4gICAgcmV0dXJuIHN0ci5yZXBsYWNlKHJlRXNjYXBlLCBmdW5lc2NhcGUpO1xufVxuZnVuY3Rpb24gaXNRdW90ZShjKSB7XG4gICAgcmV0dXJuIGMgPT09IDM5IC8qIFNpbmdsZVF1b3RlICovIHx8IGMgPT09IDM0IC8qIERvdWJsZVF1b3RlICovO1xufVxuZnVuY3Rpb24gaXNXaGl0ZXNwYWNlKGMpIHtcbiAgICByZXR1cm4gKGMgPT09IDMyIC8qIFNwYWNlICovIHx8XG4gICAgICAgIGMgPT09IDkgLyogVGFiICovIHx8XG4gICAgICAgIGMgPT09IDEwIC8qIE5ld0xpbmUgKi8gfHxcbiAgICAgICAgYyA9PT0gMTIgLyogRm9ybUZlZWQgKi8gfHxcbiAgICAgICAgYyA9PT0gMTMgLyogQ2FycmlhZ2VSZXR1cm4gKi8pO1xufVxuLyoqXG4gKiBQYXJzZXMgYHNlbGVjdG9yYCwgb3B0aW9uYWxseSB3aXRoIHRoZSBwYXNzZWQgYG9wdGlvbnNgLlxuICpcbiAqIEBwYXJhbSBzZWxlY3RvciBTZWxlY3RvciB0byBwYXJzZS5cbiAqIEBwYXJhbSBvcHRpb25zIE9wdGlvbnMgZm9yIHBhcnNpbmcuXG4gKiBAcmV0dXJucyBSZXR1cm5zIGEgdHdvLWRpbWVuc2lvbmFsIGFycmF5LlxuICogVGhlIGZpcnN0IGRpbWVuc2lvbiByZXByZXNlbnRzIHNlbGVjdG9ycyBzZXBhcmF0ZWQgYnkgY29tbWFzIChlZy4gYHN1YjEsIHN1YjJgKSxcbiAqIHRoZSBzZWNvbmQgY29udGFpbnMgdGhlIHJlbGV2YW50IHRva2VucyBmb3IgdGhhdCBzZWxlY3Rvci5cbiAqL1xuZnVuY3Rpb24gcGFyc2Uoc2VsZWN0b3IpIHtcbiAgICB2YXIgc3Vic2VsZWN0cyA9IFtdO1xuICAgIHZhciBlbmRJbmRleCA9IHBhcnNlU2VsZWN0b3Ioc3Vic2VsZWN0cywgXCJcIi5jb25jYXQoc2VsZWN0b3IpLCAwKTtcbiAgICBpZiAoZW5kSW5kZXggPCBzZWxlY3Rvci5sZW5ndGgpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVW5tYXRjaGVkIHNlbGVjdG9yOiBcIi5jb25jYXQoc2VsZWN0b3Iuc2xpY2UoZW5kSW5kZXgpKSk7XG4gICAgfVxuICAgIHJldHVybiBzdWJzZWxlY3RzO1xufVxuZXhwb3J0cy5wYXJzZSA9IHBhcnNlO1xuZnVuY3Rpb24gcGFyc2VTZWxlY3RvcihzdWJzZWxlY3RzLCBzZWxlY3Rvciwgc2VsZWN0b3JJbmRleCkge1xuICAgIHZhciB0b2tlbnMgPSBbXTtcbiAgICBmdW5jdGlvbiBnZXROYW1lKG9mZnNldCkge1xuICAgICAgICB2YXIgbWF0Y2ggPSBzZWxlY3Rvci5zbGljZShzZWxlY3RvckluZGV4ICsgb2Zmc2V0KS5tYXRjaChyZU5hbWUpO1xuICAgICAgICBpZiAoIW1hdGNoKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJFeHBlY3RlZCBuYW1lLCBmb3VuZCBcIi5jb25jYXQoc2VsZWN0b3Iuc2xpY2Uoc2VsZWN0b3JJbmRleCkpKTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgbmFtZSA9IG1hdGNoWzBdO1xuICAgICAgICBzZWxlY3RvckluZGV4ICs9IG9mZnNldCArIG5hbWUubGVuZ3RoO1xuICAgICAgICByZXR1cm4gdW5lc2NhcGVDU1MobmFtZSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIHN0cmlwV2hpdGVzcGFjZShvZmZzZXQpIHtcbiAgICAgICAgc2VsZWN0b3JJbmRleCArPSBvZmZzZXQ7XG4gICAgICAgIHdoaWxlIChzZWxlY3RvckluZGV4IDwgc2VsZWN0b3IubGVuZ3RoICYmXG4gICAgICAgICAgICBpc1doaXRlc3BhY2Uoc2VsZWN0b3IuY2hhckNvZGVBdChzZWxlY3RvckluZGV4KSkpIHtcbiAgICAgICAgICAgIHNlbGVjdG9ySW5kZXgrKztcbiAgICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiByZWFkVmFsdWVXaXRoUGFyZW50aGVzaXMoKSB7XG4gICAgICAgIHNlbGVjdG9ySW5kZXggKz0gMTtcbiAgICAgICAgdmFyIHN0YXJ0ID0gc2VsZWN0b3JJbmRleDtcbiAgICAgICAgdmFyIGNvdW50ZXIgPSAxO1xuICAgICAgICBmb3IgKDsgY291bnRlciA+IDAgJiYgc2VsZWN0b3JJbmRleCA8IHNlbGVjdG9yLmxlbmd0aDsgc2VsZWN0b3JJbmRleCsrKSB7XG4gICAgICAgICAgICBpZiAoc2VsZWN0b3IuY2hhckNvZGVBdChzZWxlY3RvckluZGV4KSA9PT1cbiAgICAgICAgICAgICAgICA0MCAvKiBMZWZ0UGFyZW50aGVzaXMgKi8gJiZcbiAgICAgICAgICAgICAgICAhaXNFc2NhcGVkKHNlbGVjdG9ySW5kZXgpKSB7XG4gICAgICAgICAgICAgICAgY291bnRlcisrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoc2VsZWN0b3IuY2hhckNvZGVBdChzZWxlY3RvckluZGV4KSA9PT1cbiAgICAgICAgICAgICAgICA0MSAvKiBSaWdodFBhcmVudGhlc2lzICovICYmXG4gICAgICAgICAgICAgICAgIWlzRXNjYXBlZChzZWxlY3RvckluZGV4KSkge1xuICAgICAgICAgICAgICAgIGNvdW50ZXItLTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoY291bnRlcikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiUGFyZW50aGVzaXMgbm90IG1hdGNoZWRcIik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHVuZXNjYXBlQ1NTKHNlbGVjdG9yLnNsaWNlKHN0YXJ0LCBzZWxlY3RvckluZGV4IC0gMSkpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBpc0VzY2FwZWQocG9zKSB7XG4gICAgICAgIHZhciBzbGFzaENvdW50ID0gMDtcbiAgICAgICAgd2hpbGUgKHNlbGVjdG9yLmNoYXJDb2RlQXQoLS1wb3MpID09PSA5MiAvKiBCYWNrU2xhc2ggKi8pXG4gICAgICAgICAgICBzbGFzaENvdW50Kys7XG4gICAgICAgIHJldHVybiAoc2xhc2hDb3VudCAmIDEpID09PSAxO1xuICAgIH1cbiAgICBmdW5jdGlvbiBlbnN1cmVOb3RUcmF2ZXJzYWwoKSB7XG4gICAgICAgIGlmICh0b2tlbnMubGVuZ3RoID4gMCAmJiBpc1RyYXZlcnNhbCh0b2tlbnNbdG9rZW5zLmxlbmd0aCAtIDFdKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRGlkIG5vdCBleHBlY3Qgc3VjY2Vzc2l2ZSB0cmF2ZXJzYWxzLlwiKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBhZGRUcmF2ZXJzYWwodHlwZSkge1xuICAgICAgICBpZiAodG9rZW5zLmxlbmd0aCA+IDAgJiZcbiAgICAgICAgICAgIHRva2Vuc1t0b2tlbnMubGVuZ3RoIC0gMV0udHlwZSA9PT0gdHlwZXNfMS5TZWxlY3RvclR5cGUuRGVzY2VuZGFudCkge1xuICAgICAgICAgICAgdG9rZW5zW3Rva2Vucy5sZW5ndGggLSAxXS50eXBlID0gdHlwZTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBlbnN1cmVOb3RUcmF2ZXJzYWwoKTtcbiAgICAgICAgdG9rZW5zLnB1c2goeyB0eXBlOiB0eXBlIH0pO1xuICAgIH1cbiAgICBmdW5jdGlvbiBhZGRTcGVjaWFsQXR0cmlidXRlKG5hbWUsIGFjdGlvbikge1xuICAgICAgICB0b2tlbnMucHVzaCh7XG4gICAgICAgICAgICB0eXBlOiB0eXBlc18xLlNlbGVjdG9yVHlwZS5BdHRyaWJ1dGUsXG4gICAgICAgICAgICBuYW1lOiBuYW1lLFxuICAgICAgICAgICAgYWN0aW9uOiBhY3Rpb24sXG4gICAgICAgICAgICB2YWx1ZTogZ2V0TmFtZSgxKSxcbiAgICAgICAgICAgIG5hbWVzcGFjZTogbnVsbCxcbiAgICAgICAgICAgIGlnbm9yZUNhc2U6IFwicXVpcmtzXCIsXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBXZSBoYXZlIGZpbmlzaGVkIHBhcnNpbmcgdGhlIGN1cnJlbnQgcGFydCBvZiB0aGUgc2VsZWN0b3IuXG4gICAgICpcbiAgICAgKiBSZW1vdmUgZGVzY2VuZGFudCB0b2tlbnMgYXQgdGhlIGVuZCBpZiB0aGV5IGV4aXN0LFxuICAgICAqIGFuZCByZXR1cm4gdGhlIGxhc3QgaW5kZXgsIHNvIHRoYXQgcGFyc2luZyBjYW4gYmVcbiAgICAgKiBwaWNrZWQgdXAgZnJvbSBoZXJlLlxuICAgICAqL1xuICAgIGZ1bmN0aW9uIGZpbmFsaXplU3Vic2VsZWN0b3IoKSB7XG4gICAgICAgIGlmICh0b2tlbnMubGVuZ3RoICYmXG4gICAgICAgICAgICB0b2tlbnNbdG9rZW5zLmxlbmd0aCAtIDFdLnR5cGUgPT09IHR5cGVzXzEuU2VsZWN0b3JUeXBlLkRlc2NlbmRhbnQpIHtcbiAgICAgICAgICAgIHRva2Vucy5wb3AoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodG9rZW5zLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRW1wdHkgc3ViLXNlbGVjdG9yXCIpO1xuICAgICAgICB9XG4gICAgICAgIHN1YnNlbGVjdHMucHVzaCh0b2tlbnMpO1xuICAgIH1cbiAgICBzdHJpcFdoaXRlc3BhY2UoMCk7XG4gICAgaWYgKHNlbGVjdG9yLmxlbmd0aCA9PT0gc2VsZWN0b3JJbmRleCkge1xuICAgICAgICByZXR1cm4gc2VsZWN0b3JJbmRleDtcbiAgICB9XG4gICAgbG9vcDogd2hpbGUgKHNlbGVjdG9ySW5kZXggPCBzZWxlY3Rvci5sZW5ndGgpIHtcbiAgICAgICAgdmFyIGZpcnN0Q2hhciA9IHNlbGVjdG9yLmNoYXJDb2RlQXQoc2VsZWN0b3JJbmRleCk7XG4gICAgICAgIHN3aXRjaCAoZmlyc3RDaGFyKSB7XG4gICAgICAgICAgICAvLyBXaGl0ZXNwYWNlXG4gICAgICAgICAgICBjYXNlIDMyIC8qIFNwYWNlICovOlxuICAgICAgICAgICAgY2FzZSA5IC8qIFRhYiAqLzpcbiAgICAgICAgICAgIGNhc2UgMTAgLyogTmV3TGluZSAqLzpcbiAgICAgICAgICAgIGNhc2UgMTIgLyogRm9ybUZlZWQgKi86XG4gICAgICAgICAgICBjYXNlIDEzIC8qIENhcnJpYWdlUmV0dXJuICovOiB7XG4gICAgICAgICAgICAgICAgaWYgKHRva2Vucy5sZW5ndGggPT09IDAgfHxcbiAgICAgICAgICAgICAgICAgICAgdG9rZW5zWzBdLnR5cGUgIT09IHR5cGVzXzEuU2VsZWN0b3JUeXBlLkRlc2NlbmRhbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgZW5zdXJlTm90VHJhdmVyc2FsKCk7XG4gICAgICAgICAgICAgICAgICAgIHRva2Vucy5wdXNoKHsgdHlwZTogdHlwZXNfMS5TZWxlY3RvclR5cGUuRGVzY2VuZGFudCB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgc3RyaXBXaGl0ZXNwYWNlKDEpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gVHJhdmVyc2Fsc1xuICAgICAgICAgICAgY2FzZSA2MiAvKiBHcmVhdGVyVGhhbiAqLzoge1xuICAgICAgICAgICAgICAgIGFkZFRyYXZlcnNhbCh0eXBlc18xLlNlbGVjdG9yVHlwZS5DaGlsZCk7XG4gICAgICAgICAgICAgICAgc3RyaXBXaGl0ZXNwYWNlKDEpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSA2MCAvKiBMZXNzVGhhbiAqLzoge1xuICAgICAgICAgICAgICAgIGFkZFRyYXZlcnNhbCh0eXBlc18xLlNlbGVjdG9yVHlwZS5QYXJlbnQpO1xuICAgICAgICAgICAgICAgIHN0cmlwV2hpdGVzcGFjZSgxKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgMTI2IC8qIFRpbGRlICovOiB7XG4gICAgICAgICAgICAgICAgYWRkVHJhdmVyc2FsKHR5cGVzXzEuU2VsZWN0b3JUeXBlLlNpYmxpbmcpO1xuICAgICAgICAgICAgICAgIHN0cmlwV2hpdGVzcGFjZSgxKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgNDMgLyogUGx1cyAqLzoge1xuICAgICAgICAgICAgICAgIGFkZFRyYXZlcnNhbCh0eXBlc18xLlNlbGVjdG9yVHlwZS5BZGphY2VudCk7XG4gICAgICAgICAgICAgICAgc3RyaXBXaGl0ZXNwYWNlKDEpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gU3BlY2lhbCBhdHRyaWJ1dGUgc2VsZWN0b3JzOiAuY2xhc3MsICNpZFxuICAgICAgICAgICAgY2FzZSA0NiAvKiBQZXJpb2QgKi86IHtcbiAgICAgICAgICAgICAgICBhZGRTcGVjaWFsQXR0cmlidXRlKFwiY2xhc3NcIiwgdHlwZXNfMS5BdHRyaWJ1dGVBY3Rpb24uRWxlbWVudCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIDM1IC8qIEhhc2ggKi86IHtcbiAgICAgICAgICAgICAgICBhZGRTcGVjaWFsQXR0cmlidXRlKFwiaWRcIiwgdHlwZXNfMS5BdHRyaWJ1dGVBY3Rpb24uRXF1YWxzKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgOTEgLyogTGVmdFNxdWFyZUJyYWNrZXQgKi86IHtcbiAgICAgICAgICAgICAgICBzdHJpcFdoaXRlc3BhY2UoMSk7XG4gICAgICAgICAgICAgICAgLy8gRGV0ZXJtaW5lIGF0dHJpYnV0ZSBuYW1lIGFuZCBuYW1lc3BhY2VcbiAgICAgICAgICAgICAgICB2YXIgbmFtZV8xID0gdm9pZCAwO1xuICAgICAgICAgICAgICAgIHZhciBuYW1lc3BhY2UgPSBudWxsO1xuICAgICAgICAgICAgICAgIGlmIChzZWxlY3Rvci5jaGFyQ29kZUF0KHNlbGVjdG9ySW5kZXgpID09PSAxMjQgLyogUGlwZSAqLykge1xuICAgICAgICAgICAgICAgICAgICAvLyBFcXVpdmFsZW50IHRvIG5vIG5hbWVzcGFjZVxuICAgICAgICAgICAgICAgICAgICBuYW1lXzEgPSBnZXROYW1lKDEpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChzZWxlY3Rvci5zdGFydHNXaXRoKFwiKnxcIiwgc2VsZWN0b3JJbmRleCkpIHtcbiAgICAgICAgICAgICAgICAgICAgbmFtZXNwYWNlID0gXCIqXCI7XG4gICAgICAgICAgICAgICAgICAgIG5hbWVfMSA9IGdldE5hbWUoMik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBuYW1lXzEgPSBnZXROYW1lKDApO1xuICAgICAgICAgICAgICAgICAgICBpZiAoc2VsZWN0b3IuY2hhckNvZGVBdChzZWxlY3RvckluZGV4KSA9PT0gMTI0IC8qIFBpcGUgKi8gJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdG9yLmNoYXJDb2RlQXQoc2VsZWN0b3JJbmRleCArIDEpICE9PVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYxIC8qIEVxdWFsICovKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lc3BhY2UgPSBuYW1lXzE7XG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lXzEgPSBnZXROYW1lKDEpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHN0cmlwV2hpdGVzcGFjZSgwKTtcbiAgICAgICAgICAgICAgICAvLyBEZXRlcm1pbmUgY29tcGFyaXNvbiBvcGVyYXRpb25cbiAgICAgICAgICAgICAgICB2YXIgYWN0aW9uID0gdHlwZXNfMS5BdHRyaWJ1dGVBY3Rpb24uRXhpc3RzO1xuICAgICAgICAgICAgICAgIHZhciBwb3NzaWJsZUFjdGlvbiA9IGFjdGlvblR5cGVzLmdldChzZWxlY3Rvci5jaGFyQ29kZUF0KHNlbGVjdG9ySW5kZXgpKTtcbiAgICAgICAgICAgICAgICBpZiAocG9zc2libGVBY3Rpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgYWN0aW9uID0gcG9zc2libGVBY3Rpb247XG4gICAgICAgICAgICAgICAgICAgIGlmIChzZWxlY3Rvci5jaGFyQ29kZUF0KHNlbGVjdG9ySW5kZXggKyAxKSAhPT1cbiAgICAgICAgICAgICAgICAgICAgICAgIDYxIC8qIEVxdWFsICovKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJFeHBlY3RlZCBgPWBcIik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgc3RyaXBXaGl0ZXNwYWNlKDIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChzZWxlY3Rvci5jaGFyQ29kZUF0KHNlbGVjdG9ySW5kZXgpID09PSA2MSAvKiBFcXVhbCAqLykge1xuICAgICAgICAgICAgICAgICAgICBhY3Rpb24gPSB0eXBlc18xLkF0dHJpYnV0ZUFjdGlvbi5FcXVhbHM7XG4gICAgICAgICAgICAgICAgICAgIHN0cmlwV2hpdGVzcGFjZSgxKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gRGV0ZXJtaW5lIHZhbHVlXG4gICAgICAgICAgICAgICAgdmFyIHZhbHVlID0gXCJcIjtcbiAgICAgICAgICAgICAgICB2YXIgaWdub3JlQ2FzZSA9IG51bGw7XG4gICAgICAgICAgICAgICAgaWYgKGFjdGlvbiAhPT0gXCJleGlzdHNcIikge1xuICAgICAgICAgICAgICAgICAgICBpZiAoaXNRdW90ZShzZWxlY3Rvci5jaGFyQ29kZUF0KHNlbGVjdG9ySW5kZXgpKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHF1b3RlID0gc2VsZWN0b3IuY2hhckNvZGVBdChzZWxlY3RvckluZGV4KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzZWN0aW9uRW5kID0gc2VsZWN0b3JJbmRleCArIDE7XG4gICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoc2VjdGlvbkVuZCA8IHNlbGVjdG9yLmxlbmd0aCAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzZWxlY3Rvci5jaGFyQ29kZUF0KHNlY3Rpb25FbmQpICE9PSBxdW90ZSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc0VzY2FwZWQoc2VjdGlvbkVuZCkpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VjdGlvbkVuZCArPSAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNlbGVjdG9yLmNoYXJDb2RlQXQoc2VjdGlvbkVuZCkgIT09IHF1b3RlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQXR0cmlidXRlIHZhbHVlIGRpZG4ndCBlbmRcIik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHVuZXNjYXBlQ1NTKHNlbGVjdG9yLnNsaWNlKHNlbGVjdG9ySW5kZXggKyAxLCBzZWN0aW9uRW5kKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RvckluZGV4ID0gc2VjdGlvbkVuZCArIDE7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgdmFsdWVTdGFydCA9IHNlbGVjdG9ySW5kZXg7XG4gICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoc2VsZWN0b3JJbmRleCA8IHNlbGVjdG9yLmxlbmd0aCAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoIWlzV2hpdGVzcGFjZShzZWxlY3Rvci5jaGFyQ29kZUF0KHNlbGVjdG9ySW5kZXgpKSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3Rvci5jaGFyQ29kZUF0KHNlbGVjdG9ySW5kZXgpICE9PVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOTMgLyogUmlnaHRTcXVhcmVCcmFja2V0ICovKSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc0VzY2FwZWQoc2VsZWN0b3JJbmRleCkpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0b3JJbmRleCArPSAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSB1bmVzY2FwZUNTUyhzZWxlY3Rvci5zbGljZSh2YWx1ZVN0YXJ0LCBzZWxlY3RvckluZGV4KSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgc3RyaXBXaGl0ZXNwYWNlKDApO1xuICAgICAgICAgICAgICAgICAgICAvLyBTZWUgaWYgd2UgaGF2ZSBhIGZvcmNlIGlnbm9yZSBmbGFnXG4gICAgICAgICAgICAgICAgICAgIHZhciBmb3JjZUlnbm9yZSA9IHNlbGVjdG9yLmNoYXJDb2RlQXQoc2VsZWN0b3JJbmRleCkgfCAweDIwO1xuICAgICAgICAgICAgICAgICAgICAvLyBJZiB0aGUgZm9yY2VJZ25vcmUgZmxhZyBpcyBzZXQgKGVpdGhlciBgaWAgb3IgYHNgKSwgdXNlIHRoYXQgdmFsdWVcbiAgICAgICAgICAgICAgICAgICAgaWYgKGZvcmNlSWdub3JlID09PSAxMTUgLyogTG93ZXJTICovKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZ25vcmVDYXNlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdHJpcFdoaXRlc3BhY2UoMSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoZm9yY2VJZ25vcmUgPT09IDEwNSAvKiBMb3dlckkgKi8pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlnbm9yZUNhc2UgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgc3RyaXBXaGl0ZXNwYWNlKDEpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChzZWxlY3Rvci5jaGFyQ29kZUF0KHNlbGVjdG9ySW5kZXgpICE9PVxuICAgICAgICAgICAgICAgICAgICA5MyAvKiBSaWdodFNxdWFyZUJyYWNrZXQgKi8pIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQXR0cmlidXRlIHNlbGVjdG9yIGRpZG4ndCB0ZXJtaW5hdGVcIik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHNlbGVjdG9ySW5kZXggKz0gMTtcbiAgICAgICAgICAgICAgICB2YXIgYXR0cmlidXRlU2VsZWN0b3IgPSB7XG4gICAgICAgICAgICAgICAgICAgIHR5cGU6IHR5cGVzXzEuU2VsZWN0b3JUeXBlLkF0dHJpYnV0ZSxcbiAgICAgICAgICAgICAgICAgICAgbmFtZTogbmFtZV8xLFxuICAgICAgICAgICAgICAgICAgICBhY3Rpb246IGFjdGlvbixcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgICAgICAgICAgICAgICBuYW1lc3BhY2U6IG5hbWVzcGFjZSxcbiAgICAgICAgICAgICAgICAgICAgaWdub3JlQ2FzZTogaWdub3JlQ2FzZSxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIHRva2Vucy5wdXNoKGF0dHJpYnV0ZVNlbGVjdG9yKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgNTggLyogQ29sb24gKi86IHtcbiAgICAgICAgICAgICAgICBpZiAoc2VsZWN0b3IuY2hhckNvZGVBdChzZWxlY3RvckluZGV4ICsgMSkgPT09IDU4IC8qIENvbG9uICovKSB7XG4gICAgICAgICAgICAgICAgICAgIHRva2Vucy5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IHR5cGVzXzEuU2VsZWN0b3JUeXBlLlBzZXVkb0VsZW1lbnQsXG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBnZXROYW1lKDIpLnRvTG93ZXJDYXNlKCksXG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhOiBzZWxlY3Rvci5jaGFyQ29kZUF0KHNlbGVjdG9ySW5kZXgpID09PVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQwIC8qIExlZnRQYXJlbnRoZXNpcyAqL1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gcmVhZFZhbHVlV2l0aFBhcmVudGhlc2lzKClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IG51bGwsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdmFyIG5hbWVfMiA9IGdldE5hbWUoMSkudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgICAgICAgICB2YXIgZGF0YSA9IG51bGw7XG4gICAgICAgICAgICAgICAgaWYgKHNlbGVjdG9yLmNoYXJDb2RlQXQoc2VsZWN0b3JJbmRleCkgPT09XG4gICAgICAgICAgICAgICAgICAgIDQwIC8qIExlZnRQYXJlbnRoZXNpcyAqLykge1xuICAgICAgICAgICAgICAgICAgICBpZiAodW5wYWNrUHNldWRvcy5oYXMobmFtZV8yKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzUXVvdGUoc2VsZWN0b3IuY2hhckNvZGVBdChzZWxlY3RvckluZGV4ICsgMSkpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiUHNldWRvLXNlbGVjdG9yIFwiLmNvbmNhdChuYW1lXzIsIFwiIGNhbm5vdCBiZSBxdW90ZWRcIikpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0b3JJbmRleCA9IHBhcnNlU2VsZWN0b3IoZGF0YSwgc2VsZWN0b3IsIHNlbGVjdG9ySW5kZXggKyAxKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzZWxlY3Rvci5jaGFyQ29kZUF0KHNlbGVjdG9ySW5kZXgpICE9PVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQxIC8qIFJpZ2h0UGFyZW50aGVzaXMgKi8pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJNaXNzaW5nIGNsb3NpbmcgcGFyZW50aGVzaXMgaW4gOlwiLmNvbmNhdChuYW1lXzIsIFwiIChcIikuY29uY2F0KHNlbGVjdG9yLCBcIilcIikpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0b3JJbmRleCArPSAxO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSA9IHJlYWRWYWx1ZVdpdGhQYXJlbnRoZXNpcygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0cmlwUXVvdGVzRnJvbVBzZXVkb3MuaGFzKG5hbWVfMikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcXVvdCA9IGRhdGEuY2hhckNvZGVBdCgwKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocXVvdCA9PT0gZGF0YS5jaGFyQ29kZUF0KGRhdGEubGVuZ3RoIC0gMSkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNRdW90ZShxdW90KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhID0gZGF0YS5zbGljZSgxLCAtMSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSA9IHVuZXNjYXBlQ1NTKGRhdGEpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRva2Vucy5wdXNoKHsgdHlwZTogdHlwZXNfMS5TZWxlY3RvclR5cGUuUHNldWRvLCBuYW1lOiBuYW1lXzIsIGRhdGE6IGRhdGEgfSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIDQ0IC8qIENvbW1hICovOiB7XG4gICAgICAgICAgICAgICAgZmluYWxpemVTdWJzZWxlY3RvcigpO1xuICAgICAgICAgICAgICAgIHRva2VucyA9IFtdO1xuICAgICAgICAgICAgICAgIHN0cmlwV2hpdGVzcGFjZSgxKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgICAgICBpZiAoc2VsZWN0b3Iuc3RhcnRzV2l0aChcIi8qXCIsIHNlbGVjdG9ySW5kZXgpKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBlbmRJbmRleCA9IHNlbGVjdG9yLmluZGV4T2YoXCIqL1wiLCBzZWxlY3RvckluZGV4ICsgMik7XG4gICAgICAgICAgICAgICAgICAgIGlmIChlbmRJbmRleCA8IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkNvbW1lbnQgd2FzIG5vdCB0ZXJtaW5hdGVkXCIpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHNlbGVjdG9ySW5kZXggPSBlbmRJbmRleCArIDI7XG4gICAgICAgICAgICAgICAgICAgIC8vIFJlbW92ZSBsZWFkaW5nIHdoaXRlc3BhY2VcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRva2Vucy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0cmlwV2hpdGVzcGFjZSgwKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdmFyIG5hbWVzcGFjZSA9IG51bGw7XG4gICAgICAgICAgICAgICAgdmFyIG5hbWVfMyA9IHZvaWQgMDtcbiAgICAgICAgICAgICAgICBpZiAoZmlyc3RDaGFyID09PSA0MiAvKiBBc3RlcmlzayAqLykge1xuICAgICAgICAgICAgICAgICAgICBzZWxlY3RvckluZGV4ICs9IDE7XG4gICAgICAgICAgICAgICAgICAgIG5hbWVfMyA9IFwiKlwiO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChmaXJzdENoYXIgPT09IDEyNCAvKiBQaXBlICovKSB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWVfMyA9IFwiXCI7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzZWxlY3Rvci5jaGFyQ29kZUF0KHNlbGVjdG9ySW5kZXggKyAxKSA9PT0gMTI0IC8qIFBpcGUgKi8pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGFkZFRyYXZlcnNhbCh0eXBlc18xLlNlbGVjdG9yVHlwZS5Db2x1bW5Db21iaW5hdG9yKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0cmlwV2hpdGVzcGFjZSgyKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHJlTmFtZS50ZXN0KHNlbGVjdG9yLnNsaWNlKHNlbGVjdG9ySW5kZXgpKSkge1xuICAgICAgICAgICAgICAgICAgICBuYW1lXzMgPSBnZXROYW1lKDApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWsgbG9vcDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHNlbGVjdG9yLmNoYXJDb2RlQXQoc2VsZWN0b3JJbmRleCkgPT09IDEyNCAvKiBQaXBlICovICYmXG4gICAgICAgICAgICAgICAgICAgIHNlbGVjdG9yLmNoYXJDb2RlQXQoc2VsZWN0b3JJbmRleCArIDEpICE9PSAxMjQgLyogUGlwZSAqLykge1xuICAgICAgICAgICAgICAgICAgICBuYW1lc3BhY2UgPSBuYW1lXzM7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzZWxlY3Rvci5jaGFyQ29kZUF0KHNlbGVjdG9ySW5kZXggKyAxKSA9PT1cbiAgICAgICAgICAgICAgICAgICAgICAgIDQyIC8qIEFzdGVyaXNrICovKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lXzMgPSBcIipcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdG9ySW5kZXggKz0gMjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWVfMyA9IGdldE5hbWUoMSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdG9rZW5zLnB1c2gobmFtZV8zID09PSBcIipcIlxuICAgICAgICAgICAgICAgICAgICA/IHsgdHlwZTogdHlwZXNfMS5TZWxlY3RvclR5cGUuVW5pdmVyc2FsLCBuYW1lc3BhY2U6IG5hbWVzcGFjZSB9XG4gICAgICAgICAgICAgICAgICAgIDogeyB0eXBlOiB0eXBlc18xLlNlbGVjdG9yVHlwZS5UYWcsIG5hbWU6IG5hbWVfMywgbmFtZXNwYWNlOiBuYW1lc3BhY2UgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgZmluYWxpemVTdWJzZWxlY3RvcigpO1xuICAgIHJldHVybiBzZWxlY3RvckluZGV4O1xufVxuIiwgIlwidXNlIHN0cmljdFwiO1xudmFyIF9fc3ByZWFkQXJyYXkgPSAodGhpcyAmJiB0aGlzLl9fc3ByZWFkQXJyYXkpIHx8IGZ1bmN0aW9uICh0bywgZnJvbSwgcGFjaykge1xuICAgIGlmIChwYWNrIHx8IGFyZ3VtZW50cy5sZW5ndGggPT09IDIpIGZvciAodmFyIGkgPSAwLCBsID0gZnJvbS5sZW5ndGgsIGFyOyBpIDwgbDsgaSsrKSB7XG4gICAgICAgIGlmIChhciB8fCAhKGkgaW4gZnJvbSkpIHtcbiAgICAgICAgICAgIGlmICghYXIpIGFyID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZnJvbSwgMCwgaSk7XG4gICAgICAgICAgICBhcltpXSA9IGZyb21baV07XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRvLmNvbmNhdChhciB8fCBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChmcm9tKSk7XG59O1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5zdHJpbmdpZnkgPSB2b2lkIDA7XG52YXIgdHlwZXNfMSA9IHJlcXVpcmUoXCIuL3R5cGVzXCIpO1xudmFyIGF0dHJpYlZhbENoYXJzID0gW1wiXFxcXFwiLCAnXCInXTtcbnZhciBwc2V1ZG9WYWxDaGFycyA9IF9fc3ByZWFkQXJyYXkoX19zcHJlYWRBcnJheShbXSwgYXR0cmliVmFsQ2hhcnMsIHRydWUpLCBbXCIoXCIsIFwiKVwiXSwgZmFsc2UpO1xudmFyIGNoYXJzVG9Fc2NhcGVJbkF0dHJpYnV0ZVZhbHVlID0gbmV3IFNldChhdHRyaWJWYWxDaGFycy5tYXAoZnVuY3Rpb24gKGMpIHsgcmV0dXJuIGMuY2hhckNvZGVBdCgwKTsgfSkpO1xudmFyIGNoYXJzVG9Fc2NhcGVJblBzZXVkb1ZhbHVlID0gbmV3IFNldChwc2V1ZG9WYWxDaGFycy5tYXAoZnVuY3Rpb24gKGMpIHsgcmV0dXJuIGMuY2hhckNvZGVBdCgwKTsgfSkpO1xudmFyIGNoYXJzVG9Fc2NhcGVJbk5hbWUgPSBuZXcgU2V0KF9fc3ByZWFkQXJyYXkoX19zcHJlYWRBcnJheShbXSwgcHNldWRvVmFsQ2hhcnMsIHRydWUpLCBbXG4gICAgXCJ+XCIsXG4gICAgXCJeXCIsXG4gICAgXCIkXCIsXG4gICAgXCIqXCIsXG4gICAgXCIrXCIsXG4gICAgXCIhXCIsXG4gICAgXCJ8XCIsXG4gICAgXCI6XCIsXG4gICAgXCJbXCIsXG4gICAgXCJdXCIsXG4gICAgXCIgXCIsXG4gICAgXCIuXCIsXG5dLCBmYWxzZSkubWFwKGZ1bmN0aW9uIChjKSB7IHJldHVybiBjLmNoYXJDb2RlQXQoMCk7IH0pKTtcbi8qKlxuICogVHVybnMgYHNlbGVjdG9yYCBiYWNrIGludG8gYSBzdHJpbmcuXG4gKlxuICogQHBhcmFtIHNlbGVjdG9yIFNlbGVjdG9yIHRvIHN0cmluZ2lmeS5cbiAqL1xuZnVuY3Rpb24gc3RyaW5naWZ5KHNlbGVjdG9yKSB7XG4gICAgcmV0dXJuIHNlbGVjdG9yXG4gICAgICAgIC5tYXAoZnVuY3Rpb24gKHRva2VuKSB7IHJldHVybiB0b2tlbi5tYXAoc3RyaW5naWZ5VG9rZW4pLmpvaW4oXCJcIik7IH0pXG4gICAgICAgIC5qb2luKFwiLCBcIik7XG59XG5leHBvcnRzLnN0cmluZ2lmeSA9IHN0cmluZ2lmeTtcbmZ1bmN0aW9uIHN0cmluZ2lmeVRva2VuKHRva2VuLCBpbmRleCwgYXJyKSB7XG4gICAgc3dpdGNoICh0b2tlbi50eXBlKSB7XG4gICAgICAgIC8vIFNpbXBsZSB0eXBlc1xuICAgICAgICBjYXNlIHR5cGVzXzEuU2VsZWN0b3JUeXBlLkNoaWxkOlxuICAgICAgICAgICAgcmV0dXJuIGluZGV4ID09PSAwID8gXCI+IFwiIDogXCIgPiBcIjtcbiAgICAgICAgY2FzZSB0eXBlc18xLlNlbGVjdG9yVHlwZS5QYXJlbnQ6XG4gICAgICAgICAgICByZXR1cm4gaW5kZXggPT09IDAgPyBcIjwgXCIgOiBcIiA8IFwiO1xuICAgICAgICBjYXNlIHR5cGVzXzEuU2VsZWN0b3JUeXBlLlNpYmxpbmc6XG4gICAgICAgICAgICByZXR1cm4gaW5kZXggPT09IDAgPyBcIn4gXCIgOiBcIiB+IFwiO1xuICAgICAgICBjYXNlIHR5cGVzXzEuU2VsZWN0b3JUeXBlLkFkamFjZW50OlxuICAgICAgICAgICAgcmV0dXJuIGluZGV4ID09PSAwID8gXCIrIFwiIDogXCIgKyBcIjtcbiAgICAgICAgY2FzZSB0eXBlc18xLlNlbGVjdG9yVHlwZS5EZXNjZW5kYW50OlxuICAgICAgICAgICAgcmV0dXJuIFwiIFwiO1xuICAgICAgICBjYXNlIHR5cGVzXzEuU2VsZWN0b3JUeXBlLkNvbHVtbkNvbWJpbmF0b3I6XG4gICAgICAgICAgICByZXR1cm4gaW5kZXggPT09IDAgPyBcInx8IFwiIDogXCIgfHwgXCI7XG4gICAgICAgIGNhc2UgdHlwZXNfMS5TZWxlY3RvclR5cGUuVW5pdmVyc2FsOlxuICAgICAgICAgICAgLy8gUmV0dXJuIGFuIGVtcHR5IHN0cmluZyBpZiB0aGUgc2VsZWN0b3IgaXNuJ3QgbmVlZGVkLlxuICAgICAgICAgICAgcmV0dXJuIHRva2VuLm5hbWVzcGFjZSA9PT0gXCIqXCIgJiZcbiAgICAgICAgICAgICAgICBpbmRleCArIDEgPCBhcnIubGVuZ3RoICYmXG4gICAgICAgICAgICAgICAgXCJuYW1lXCIgaW4gYXJyW2luZGV4ICsgMV1cbiAgICAgICAgICAgICAgICA/IFwiXCJcbiAgICAgICAgICAgICAgICA6IFwiXCIuY29uY2F0KGdldE5hbWVzcGFjZSh0b2tlbi5uYW1lc3BhY2UpLCBcIipcIik7XG4gICAgICAgIGNhc2UgdHlwZXNfMS5TZWxlY3RvclR5cGUuVGFnOlxuICAgICAgICAgICAgcmV0dXJuIGdldE5hbWVzcGFjZWROYW1lKHRva2VuKTtcbiAgICAgICAgY2FzZSB0eXBlc18xLlNlbGVjdG9yVHlwZS5Qc2V1ZG9FbGVtZW50OlxuICAgICAgICAgICAgcmV0dXJuIFwiOjpcIi5jb25jYXQoZXNjYXBlTmFtZSh0b2tlbi5uYW1lLCBjaGFyc1RvRXNjYXBlSW5OYW1lKSkuY29uY2F0KHRva2VuLmRhdGEgPT09IG51bGxcbiAgICAgICAgICAgICAgICA/IFwiXCJcbiAgICAgICAgICAgICAgICA6IFwiKFwiLmNvbmNhdChlc2NhcGVOYW1lKHRva2VuLmRhdGEsIGNoYXJzVG9Fc2NhcGVJblBzZXVkb1ZhbHVlKSwgXCIpXCIpKTtcbiAgICAgICAgY2FzZSB0eXBlc18xLlNlbGVjdG9yVHlwZS5Qc2V1ZG86XG4gICAgICAgICAgICByZXR1cm4gXCI6XCIuY29uY2F0KGVzY2FwZU5hbWUodG9rZW4ubmFtZSwgY2hhcnNUb0VzY2FwZUluTmFtZSkpLmNvbmNhdCh0b2tlbi5kYXRhID09PSBudWxsXG4gICAgICAgICAgICAgICAgPyBcIlwiXG4gICAgICAgICAgICAgICAgOiBcIihcIi5jb25jYXQodHlwZW9mIHRva2VuLmRhdGEgPT09IFwic3RyaW5nXCJcbiAgICAgICAgICAgICAgICAgICAgPyBlc2NhcGVOYW1lKHRva2VuLmRhdGEsIGNoYXJzVG9Fc2NhcGVJblBzZXVkb1ZhbHVlKVxuICAgICAgICAgICAgICAgICAgICA6IHN0cmluZ2lmeSh0b2tlbi5kYXRhKSwgXCIpXCIpKTtcbiAgICAgICAgY2FzZSB0eXBlc18xLlNlbGVjdG9yVHlwZS5BdHRyaWJ1dGU6IHtcbiAgICAgICAgICAgIGlmICh0b2tlbi5uYW1lID09PSBcImlkXCIgJiZcbiAgICAgICAgICAgICAgICB0b2tlbi5hY3Rpb24gPT09IHR5cGVzXzEuQXR0cmlidXRlQWN0aW9uLkVxdWFscyAmJlxuICAgICAgICAgICAgICAgIHRva2VuLmlnbm9yZUNhc2UgPT09IFwicXVpcmtzXCIgJiZcbiAgICAgICAgICAgICAgICAhdG9rZW4ubmFtZXNwYWNlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFwiI1wiLmNvbmNhdChlc2NhcGVOYW1lKHRva2VuLnZhbHVlLCBjaGFyc1RvRXNjYXBlSW5OYW1lKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodG9rZW4ubmFtZSA9PT0gXCJjbGFzc1wiICYmXG4gICAgICAgICAgICAgICAgdG9rZW4uYWN0aW9uID09PSB0eXBlc18xLkF0dHJpYnV0ZUFjdGlvbi5FbGVtZW50ICYmXG4gICAgICAgICAgICAgICAgdG9rZW4uaWdub3JlQ2FzZSA9PT0gXCJxdWlya3NcIiAmJlxuICAgICAgICAgICAgICAgICF0b2tlbi5uYW1lc3BhY2UpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gXCIuXCIuY29uY2F0KGVzY2FwZU5hbWUodG9rZW4udmFsdWUsIGNoYXJzVG9Fc2NhcGVJbk5hbWUpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBuYW1lXzEgPSBnZXROYW1lc3BhY2VkTmFtZSh0b2tlbik7XG4gICAgICAgICAgICBpZiAodG9rZW4uYWN0aW9uID09PSB0eXBlc18xLkF0dHJpYnV0ZUFjdGlvbi5FeGlzdHMpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJbXCIuY29uY2F0KG5hbWVfMSwgXCJdXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIFwiW1wiLmNvbmNhdChuYW1lXzEpLmNvbmNhdChnZXRBY3Rpb25WYWx1ZSh0b2tlbi5hY3Rpb24pLCBcIj1cXFwiXCIpLmNvbmNhdChlc2NhcGVOYW1lKHRva2VuLnZhbHVlLCBjaGFyc1RvRXNjYXBlSW5BdHRyaWJ1dGVWYWx1ZSksIFwiXFxcIlwiKS5jb25jYXQodG9rZW4uaWdub3JlQ2FzZSA9PT0gbnVsbCA/IFwiXCIgOiB0b2tlbi5pZ25vcmVDYXNlID8gXCIgaVwiIDogXCIgc1wiLCBcIl1cIik7XG4gICAgICAgIH1cbiAgICB9XG59XG5mdW5jdGlvbiBnZXRBY3Rpb25WYWx1ZShhY3Rpb24pIHtcbiAgICBzd2l0Y2ggKGFjdGlvbikge1xuICAgICAgICBjYXNlIHR5cGVzXzEuQXR0cmlidXRlQWN0aW9uLkVxdWFsczpcbiAgICAgICAgICAgIHJldHVybiBcIlwiO1xuICAgICAgICBjYXNlIHR5cGVzXzEuQXR0cmlidXRlQWN0aW9uLkVsZW1lbnQ6XG4gICAgICAgICAgICByZXR1cm4gXCJ+XCI7XG4gICAgICAgIGNhc2UgdHlwZXNfMS5BdHRyaWJ1dGVBY3Rpb24uU3RhcnQ6XG4gICAgICAgICAgICByZXR1cm4gXCJeXCI7XG4gICAgICAgIGNhc2UgdHlwZXNfMS5BdHRyaWJ1dGVBY3Rpb24uRW5kOlxuICAgICAgICAgICAgcmV0dXJuIFwiJFwiO1xuICAgICAgICBjYXNlIHR5cGVzXzEuQXR0cmlidXRlQWN0aW9uLkFueTpcbiAgICAgICAgICAgIHJldHVybiBcIipcIjtcbiAgICAgICAgY2FzZSB0eXBlc18xLkF0dHJpYnV0ZUFjdGlvbi5Ob3Q6XG4gICAgICAgICAgICByZXR1cm4gXCIhXCI7XG4gICAgICAgIGNhc2UgdHlwZXNfMS5BdHRyaWJ1dGVBY3Rpb24uSHlwaGVuOlxuICAgICAgICAgICAgcmV0dXJuIFwifFwiO1xuICAgICAgICBjYXNlIHR5cGVzXzEuQXR0cmlidXRlQWN0aW9uLkV4aXN0czpcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlNob3VsZG4ndCBiZSBoZXJlXCIpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGdldE5hbWVzcGFjZWROYW1lKHRva2VuKSB7XG4gICAgcmV0dXJuIFwiXCIuY29uY2F0KGdldE5hbWVzcGFjZSh0b2tlbi5uYW1lc3BhY2UpKS5jb25jYXQoZXNjYXBlTmFtZSh0b2tlbi5uYW1lLCBjaGFyc1RvRXNjYXBlSW5OYW1lKSk7XG59XG5mdW5jdGlvbiBnZXROYW1lc3BhY2UobmFtZXNwYWNlKSB7XG4gICAgcmV0dXJuIG5hbWVzcGFjZSAhPT0gbnVsbFxuICAgICAgICA/IFwiXCIuY29uY2F0KG5hbWVzcGFjZSA9PT0gXCIqXCJcbiAgICAgICAgICAgID8gXCIqXCJcbiAgICAgICAgICAgIDogZXNjYXBlTmFtZShuYW1lc3BhY2UsIGNoYXJzVG9Fc2NhcGVJbk5hbWUpLCBcInxcIilcbiAgICAgICAgOiBcIlwiO1xufVxuZnVuY3Rpb24gZXNjYXBlTmFtZShzdHIsIGNoYXJzVG9Fc2NhcGUpIHtcbiAgICB2YXIgbGFzdElkeCA9IDA7XG4gICAgdmFyIHJldCA9IFwiXCI7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdHIubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKGNoYXJzVG9Fc2NhcGUuaGFzKHN0ci5jaGFyQ29kZUF0KGkpKSkge1xuICAgICAgICAgICAgcmV0ICs9IFwiXCIuY29uY2F0KHN0ci5zbGljZShsYXN0SWR4LCBpKSwgXCJcXFxcXCIpLmNvbmNhdChzdHIuY2hhckF0KGkpKTtcbiAgICAgICAgICAgIGxhc3RJZHggPSBpICsgMTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmV0Lmxlbmd0aCA+IDAgPyByZXQgKyBzdHIuc2xpY2UobGFzdElkeCkgOiBzdHI7XG59XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19jcmVhdGVCaW5kaW5nID0gKHRoaXMgJiYgdGhpcy5fX2NyZWF0ZUJpbmRpbmcpIHx8IChPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcbiAgICB2YXIgZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobSwgayk7XG4gICAgaWYgKCFkZXNjIHx8IChcImdldFwiIGluIGRlc2MgPyAhbS5fX2VzTW9kdWxlIDogZGVzYy53cml0YWJsZSB8fCBkZXNjLmNvbmZpZ3VyYWJsZSkpIHtcbiAgICAgIGRlc2MgPSB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24oKSB7IHJldHVybiBtW2tdOyB9IH07XG4gICAgfVxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBrMiwgZGVzYyk7XG59KSA6IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gICAgb1trMl0gPSBtW2tdO1xufSkpO1xudmFyIF9fZXhwb3J0U3RhciA9ICh0aGlzICYmIHRoaXMuX19leHBvcnRTdGFyKSB8fCBmdW5jdGlvbihtLCBleHBvcnRzKSB7XG4gICAgZm9yICh2YXIgcCBpbiBtKSBpZiAocCAhPT0gXCJkZWZhdWx0XCIgJiYgIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChleHBvcnRzLCBwKSkgX19jcmVhdGVCaW5kaW5nKGV4cG9ydHMsIG0sIHApO1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuc3RyaW5naWZ5ID0gZXhwb3J0cy5wYXJzZSA9IGV4cG9ydHMuaXNUcmF2ZXJzYWwgPSB2b2lkIDA7XG5fX2V4cG9ydFN0YXIocmVxdWlyZShcIi4vdHlwZXNcIiksIGV4cG9ydHMpO1xudmFyIHBhcnNlXzEgPSByZXF1aXJlKFwiLi9wYXJzZVwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcImlzVHJhdmVyc2FsXCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiBwYXJzZV8xLmlzVHJhdmVyc2FsOyB9IH0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwicGFyc2VcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHBhcnNlXzEucGFyc2U7IH0gfSk7XG52YXIgc3RyaW5naWZ5XzEgPSByZXF1aXJlKFwiLi9zdHJpbmdpZnlcIik7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJzdHJpbmdpZnlcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHN0cmluZ2lmeV8xLnN0cmluZ2lmeTsgfSB9KTtcbiIsICJtb2R1bGUuZXhwb3J0cyA9IHtcblx0dHJ1ZUZ1bmM6IGZ1bmN0aW9uIHRydWVGdW5jKCl7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH0sXG5cdGZhbHNlRnVuYzogZnVuY3Rpb24gZmFsc2VGdW5jKCl7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG59OyIsIG51bGwsIG51bGwsIG51bGwsIG51bGwsIG51bGwsIG51bGwsIG51bGwsIG51bGwsIG51bGwsIG51bGwsIG51bGwsIG51bGwsIG51bGwsIG51bGwsIG51bGwsIG51bGwsICIvKipcbiAqIE1ldGhvZHMgZm9yIHRyYXZlcnNpbmcgdGhlIERPTSBzdHJ1Y3R1cmUuXG4gKlxuICogQG1vZHVsZSBjaGVlcmlvL3RyYXZlcnNpbmdcbiAqL1xuXG5pbXBvcnQge1xuICBpc1RhZyxcbiAgdHlwZSBBbnlOb2RlLFxuICB0eXBlIEVsZW1lbnQsXG4gIGhhc0NoaWxkcmVuLFxuICBpc0RvY3VtZW50LFxuICB0eXBlIERvY3VtZW50LFxufSBmcm9tICdkb21oYW5kbGVyJztcbmltcG9ydCB0eXBlIHsgQ2hlZXJpbyB9IGZyb20gJy4uL2NoZWVyaW8uanMnO1xuaW1wb3J0ICogYXMgc2VsZWN0IGZyb20gJ2NoZWVyaW8tc2VsZWN0JztcbmltcG9ydCB7IGRvbUVhY2gsIGlzQ2hlZXJpbyB9IGZyb20gJy4uL3V0aWxzLmpzJztcbmltcG9ydCB7IGNvbnRhaW5zIH0gZnJvbSAnLi4vc3RhdGljLmpzJztcbmltcG9ydCB7XG4gIGdldENoaWxkcmVuLFxuICBnZXRTaWJsaW5ncyxcbiAgbmV4dEVsZW1lbnRTaWJsaW5nLFxuICBwcmV2RWxlbWVudFNpYmxpbmcsXG4gIHVuaXF1ZVNvcnQsXG59IGZyb20gJ2RvbXV0aWxzJztcbmltcG9ydCB0eXBlIHsgRmlsdGVyRnVuY3Rpb24sIEFjY2VwdGVkRmlsdGVycyB9IGZyb20gJy4uL3R5cGVzLmpzJztcbmNvbnN0IHJlU2libGluZ1NlbGVjdG9yID0gL15cXHMqWyt+XS87XG5cbi8qKlxuICogR2V0IHRoZSBkZXNjZW5kYW50cyBvZiBlYWNoIGVsZW1lbnQgaW4gdGhlIGN1cnJlbnQgc2V0IG9mIG1hdGNoZWQgZWxlbWVudHMsXG4gKiBmaWx0ZXJlZCBieSBhIHNlbGVjdG9yLCBqUXVlcnkgb2JqZWN0LCBvciBlbGVtZW50LlxuICpcbiAqIEBjYXRlZ29yeSBUcmF2ZXJzaW5nXG4gKiBAZXhhbXBsZVxuICpcbiAqIGBgYGpzXG4gKiAkKCcjZnJ1aXRzJykuZmluZCgnbGknKS5sZW5ndGg7XG4gKiAvLz0+IDNcbiAqICQoJyNmcnVpdHMnKS5maW5kKCQoJy5hcHBsZScpKS5sZW5ndGg7XG4gKiAvLz0+IDFcbiAqIGBgYFxuICpcbiAqIEBwYXJhbSBzZWxlY3Rvck9ySGF5c3RhY2sgLSBFbGVtZW50IHRvIGxvb2sgZm9yLlxuICogQHJldHVybnMgVGhlIGZvdW5kIGVsZW1lbnRzLlxuICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9hcGkuanF1ZXJ5LmNvbS9maW5kL31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZpbmQ8VCBleHRlbmRzIEFueU5vZGU+KFxuICB0aGlzOiBDaGVlcmlvPFQ+LFxuICBzZWxlY3Rvck9ySGF5c3RhY2s/OiBzdHJpbmcgfCBDaGVlcmlvPEVsZW1lbnQ+IHwgRWxlbWVudCxcbik6IENoZWVyaW88RWxlbWVudD4ge1xuICBpZiAoIXNlbGVjdG9yT3JIYXlzdGFjaykge1xuICAgIHJldHVybiB0aGlzLl9tYWtlKFtdKTtcbiAgfVxuXG4gIGlmICh0eXBlb2Ygc2VsZWN0b3JPckhheXN0YWNrICE9PSAnc3RyaW5nJykge1xuICAgIGNvbnN0IGhheXN0YWNrID0gaXNDaGVlcmlvKHNlbGVjdG9yT3JIYXlzdGFjaylcbiAgICAgID8gc2VsZWN0b3JPckhheXN0YWNrLnRvQXJyYXkoKVxuICAgICAgOiBbc2VsZWN0b3JPckhheXN0YWNrXTtcblxuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLnRvQXJyYXkoKTtcblxuICAgIHJldHVybiB0aGlzLl9tYWtlKFxuICAgICAgaGF5c3RhY2suZmlsdGVyKChlbGVtKSA9PiBjb250ZXh0LnNvbWUoKG5vZGUpID0+IGNvbnRhaW5zKG5vZGUsIGVsZW0pKSksXG4gICAgKTtcbiAgfVxuXG4gIHJldHVybiB0aGlzLl9maW5kQnlTZWxlY3RvcihzZWxlY3Rvck9ySGF5c3RhY2ssIE51bWJlci5QT1NJVElWRV9JTkZJTklUWSk7XG59XG5cbi8qKlxuICogRmluZCBlbGVtZW50cyBieSBhIHNwZWNpZmljIHNlbGVjdG9yLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAY2F0ZWdvcnkgVHJhdmVyc2luZ1xuICogQHBhcmFtIHNlbGVjdG9yIC0gU2VsZWN0b3IgdG8gZmlsdGVyIGJ5LlxuICogQHBhcmFtIGxpbWl0IC0gTWF4aW11bSBudW1iZXIgb2YgZWxlbWVudHMgdG8gbWF0Y2guXG4gKiBAcmV0dXJucyBUaGUgZm91bmQgZWxlbWVudHMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBfZmluZEJ5U2VsZWN0b3I8VCBleHRlbmRzIEFueU5vZGU+KFxuICB0aGlzOiBDaGVlcmlvPFQ+LFxuICBzZWxlY3Rvcjogc3RyaW5nLFxuICBsaW1pdDogbnVtYmVyLFxuKTogQ2hlZXJpbzxFbGVtZW50PiB7XG4gIGNvbnN0IGNvbnRleHQgPSB0aGlzLnRvQXJyYXkoKTtcblxuICBjb25zdCBlbGVtcyA9IHJlU2libGluZ1NlbGVjdG9yLnRlc3Qoc2VsZWN0b3IpXG4gICAgPyBjb250ZXh0XG4gICAgOiB0aGlzLmNoaWxkcmVuKCkudG9BcnJheSgpO1xuXG4gIGNvbnN0IG9wdGlvbnMgPSB7XG4gICAgY29udGV4dCxcbiAgICByb290OiB0aGlzLl9yb290Py5bMF0sXG5cbiAgICAvLyBQYXNzIG9wdGlvbnMgdGhhdCBhcmUgcmVjb2duaXplZCBieSBgY2hlZXJpby1zZWxlY3RgXG4gICAgeG1sTW9kZTogdGhpcy5vcHRpb25zLnhtbE1vZGUsXG4gICAgbG93ZXJDYXNlVGFnczogdGhpcy5vcHRpb25zLmxvd2VyQ2FzZVRhZ3MsXG4gICAgbG93ZXJDYXNlQXR0cmlidXRlTmFtZXM6IHRoaXMub3B0aW9ucy5sb3dlckNhc2VBdHRyaWJ1dGVOYW1lcyxcbiAgICBwc2V1ZG9zOiB0aGlzLm9wdGlvbnMucHNldWRvcyxcbiAgICBxdWlya3NNb2RlOiB0aGlzLm9wdGlvbnMucXVpcmtzTW9kZSxcbiAgfTtcblxuICByZXR1cm4gdGhpcy5fbWFrZShzZWxlY3Quc2VsZWN0KHNlbGVjdG9yLCBlbGVtcywgb3B0aW9ucywgbGltaXQpKTtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgbWF0Y2hlciwgdXNpbmcgYSBwYXJ0aWN1bGFyIG1hcHBpbmcgZnVuY3Rpb24uIE1hdGNoZXJzIHByb3ZpZGUgYVxuICogZnVuY3Rpb24gdGhhdCBmaW5kcyBlbGVtZW50cyB1c2luZyBhIGdlbmVyYXRpbmcgZnVuY3Rpb24sIHN1cHBvcnRpbmdcbiAqIGZpbHRlcmluZy5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQHBhcmFtIG1hdGNoTWFwIC0gTWFwcGluZyBmdW5jdGlvbi5cbiAqIEByZXR1cm5zIC0gRnVuY3Rpb24gZm9yIHdyYXBwaW5nIGdlbmVyYXRpbmcgZnVuY3Rpb25zLlxuICovXG5mdW5jdGlvbiBfZ2V0TWF0Y2hlcjxQPihcbiAgbWF0Y2hNYXA6IChmbjogKGVsZW06IEFueU5vZGUpID0+IFAsIGVsZW1zOiBDaGVlcmlvPEFueU5vZGU+KSA9PiBFbGVtZW50W10sXG4pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIChcbiAgICBmbjogKGVsZW06IEFueU5vZGUpID0+IFAsXG4gICAgLi4ucG9zdEZuczogKChlbGVtczogRWxlbWVudFtdKSA9PiBFbGVtZW50W10pW11cbiAgKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIDxUIGV4dGVuZHMgQW55Tm9kZT4oXG4gICAgICB0aGlzOiBDaGVlcmlvPFQ+LFxuICAgICAgc2VsZWN0b3I/OiBBY2NlcHRlZEZpbHRlcnM8RWxlbWVudD4sXG4gICAgKTogQ2hlZXJpbzxFbGVtZW50PiB7XG4gICAgICBsZXQgbWF0Y2hlZDogRWxlbWVudFtdID0gbWF0Y2hNYXAoZm4sIHRoaXMpO1xuXG4gICAgICBpZiAoc2VsZWN0b3IpIHtcbiAgICAgICAgbWF0Y2hlZCA9IGZpbHRlckFycmF5KFxuICAgICAgICAgIG1hdGNoZWQsXG4gICAgICAgICAgc2VsZWN0b3IsXG4gICAgICAgICAgdGhpcy5vcHRpb25zLnhtbE1vZGUsXG4gICAgICAgICAgdGhpcy5fcm9vdD8uWzBdLFxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcy5fbWFrZShcbiAgICAgICAgLy8gUG9zdCBwcm9jZXNzaW5nIGlzIG9ubHkgbmVjZXNzYXJ5IGlmIHRoZXJlIGlzIG1vcmUgdGhhbiBvbmUgZWxlbWVudC5cbiAgICAgICAgdGhpcy5sZW5ndGggPiAxICYmIG1hdGNoZWQubGVuZ3RoID4gMVxuICAgICAgICAgID8gcG9zdEZucy5yZWR1Y2UoKGVsZW1zLCBmbikgPT4gZm4oZWxlbXMpLCBtYXRjaGVkKVxuICAgICAgICAgIDogbWF0Y2hlZCxcbiAgICAgICk7XG4gICAgfTtcbiAgfTtcbn1cblxuLyoqIE1hdGNoZXIgdGhhdCBhZGRzIG11bHRpcGxlIGVsZW1lbnRzIGZvciBlYWNoIGVudHJ5IGluIHRoZSBpbnB1dC4gKi9cbmNvbnN0IF9tYXRjaGVyID0gX2dldE1hdGNoZXIoKGZuOiAoZWxlbTogQW55Tm9kZSkgPT4gRWxlbWVudFtdLCBlbGVtcykgPT4ge1xuICBsZXQgcmV0OiBFbGVtZW50W10gPSBbXTtcblxuICBmb3IgKGxldCBpID0gMDsgaSA8IGVsZW1zLmxlbmd0aDsgaSsrKSB7XG4gICAgY29uc3QgdmFsdWUgPSBmbihlbGVtc1tpXSk7XG4gICAgaWYgKHZhbHVlLmxlbmd0aCA+IDApIHJldCA9IHJldC5jb25jYXQodmFsdWUpO1xuICB9XG5cbiAgcmV0dXJuIHJldDtcbn0pO1xuXG4vKiogTWF0Y2hlciB0aGF0IGFkZHMgYXQgbW9zdCBvbmUgZWxlbWVudCBmb3IgZWFjaCBlbnRyeSBpbiB0aGUgaW5wdXQuICovXG5jb25zdCBfc2luZ2xlTWF0Y2hlciA9IF9nZXRNYXRjaGVyKFxuICAoZm46IChlbGVtOiBBbnlOb2RlKSA9PiBFbGVtZW50IHwgbnVsbCwgZWxlbXMpID0+IHtcbiAgICBjb25zdCByZXQ6IEVsZW1lbnRbXSA9IFtdO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBlbGVtcy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgdmFsdWUgPSBmbihlbGVtc1tpXSk7XG4gICAgICBpZiAodmFsdWUgIT09IG51bGwpIHtcbiAgICAgICAgcmV0LnB1c2godmFsdWUpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmV0O1xuICB9LFxuKTtcblxuLyoqXG4gKiBNYXRjaGVyIHRoYXQgc3VwcG9ydHMgdHJhdmVyc2luZyB1bnRpbCBhIGNvbmRpdGlvbiBpcyBtZXQuXG4gKlxuICogQHBhcmFtIG5leHRFbGVtIC0gRnVuY3Rpb24gdGhhdCByZXR1cm5zIHRoZSBuZXh0IGVsZW1lbnQuXG4gKiBAcGFyYW0gcG9zdEZucyAtIFBvc3QgcHJvY2Vzc2luZyBmdW5jdGlvbnMuXG4gKiBAcmV0dXJucyBBIGZ1bmN0aW9uIHVzYWJsZSBmb3IgYCpVbnRpbGAgbWV0aG9kcy5cbiAqL1xuZnVuY3Rpb24gX21hdGNoVW50aWwoXG4gIG5leHRFbGVtOiAoZWxlbTogQW55Tm9kZSkgPT4gRWxlbWVudCB8IG51bGwsXG4gIC4uLnBvc3RGbnM6ICgoZWxlbXM6IEVsZW1lbnRbXSkgPT4gRWxlbWVudFtdKVtdXG4pIHtcbiAgLy8gV2UgdXNlIGEgdmFyaWFibGUgaGVyZSB0aGF0IGlzIHVzZWQgZnJvbSB3aXRoaW4gdGhlIG1hdGNoZXIuXG4gIGxldCBtYXRjaGVzOiAoKGVsOiBFbGVtZW50LCBpOiBudW1iZXIpID0+IGJvb2xlYW4pIHwgbnVsbCA9IG51bGw7XG5cbiAgY29uc3QgaW5uZXJNYXRjaGVyID0gX2dldE1hdGNoZXIoXG4gICAgKG5leHRFbGVtOiAoZWxlbTogQW55Tm9kZSkgPT4gRWxlbWVudCB8IG51bGwsIGVsZW1zKSA9PiB7XG4gICAgICBjb25zdCBtYXRjaGVkOiBFbGVtZW50W10gPSBbXTtcblxuICAgICAgZG9tRWFjaChlbGVtcywgKGVsZW0pID0+IHtcbiAgICAgICAgZm9yIChsZXQgbmV4dDsgKG5leHQgPSBuZXh0RWxlbShlbGVtKSk7IGVsZW0gPSBuZXh0KSB7XG4gICAgICAgICAgLy8gRklYTUU6IGBtYXRjaGVkYCBtaWdodCBjb250YWluIGR1cGxpY2F0ZXMgaGVyZSBhbmQgdGhlIGluZGV4IGlzIHRvbyBsYXJnZS5cbiAgICAgICAgICBpZiAobWF0Y2hlcz8uKG5leHQsIG1hdGNoZWQubGVuZ3RoKSkgYnJlYWs7XG4gICAgICAgICAgbWF0Y2hlZC5wdXNoKG5leHQpO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIG1hdGNoZWQ7XG4gICAgfSxcbiAgKShuZXh0RWxlbSwgLi4ucG9zdEZucyk7XG5cbiAgcmV0dXJuIGZ1bmN0aW9uIDxUIGV4dGVuZHMgQW55Tm9kZT4oXG4gICAgdGhpczogQ2hlZXJpbzxUPixcbiAgICBzZWxlY3Rvcj86IEFjY2VwdGVkRmlsdGVyczxFbGVtZW50PiB8IG51bGwsXG4gICAgZmlsdGVyU2VsZWN0b3I/OiBBY2NlcHRlZEZpbHRlcnM8RWxlbWVudD4sXG4gICk6IENoZWVyaW88RWxlbWVudD4ge1xuICAgIC8vIE92ZXJyaWRlIGBtYXRjaGVzYCB2YXJpYWJsZSB3aXRoIHRoZSBuZXcgdGFyZ2V0LlxuICAgIG1hdGNoZXMgPVxuICAgICAgdHlwZW9mIHNlbGVjdG9yID09PSAnc3RyaW5nJ1xuICAgICAgICA/IChlbGVtOiBFbGVtZW50KSA9PiBzZWxlY3QuaXMoZWxlbSwgc2VsZWN0b3IsIHRoaXMub3B0aW9ucylcbiAgICAgICAgOiBzZWxlY3RvclxuICAgICAgICAgID8gZ2V0RmlsdGVyRm4oc2VsZWN0b3IpXG4gICAgICAgICAgOiBudWxsO1xuXG4gICAgY29uc3QgcmV0ID0gaW5uZXJNYXRjaGVyLmNhbGwodGhpcywgZmlsdGVyU2VsZWN0b3IpO1xuXG4gICAgLy8gU2V0IGBtYXRjaGVzYCB0byBgbnVsbGAsIHNvIHdlIGRvbid0IHdhc3RlIG1lbW9yeS5cbiAgICBtYXRjaGVzID0gbnVsbDtcblxuICAgIHJldHVybiByZXQ7XG4gIH07XG59XG5cbmZ1bmN0aW9uIF9yZW1vdmVEdXBsaWNhdGVzPFQgZXh0ZW5kcyBBbnlOb2RlPihlbGVtczogVFtdKTogVFtdIHtcbiAgcmV0dXJuIGVsZW1zLmxlbmd0aCA+IDEgPyBBcnJheS5mcm9tKG5ldyBTZXQ8VD4oZWxlbXMpKSA6IGVsZW1zO1xufVxuXG4vKipcbiAqIEdldCB0aGUgcGFyZW50IG9mIGVhY2ggZWxlbWVudCBpbiB0aGUgY3VycmVudCBzZXQgb2YgbWF0Y2hlZCBlbGVtZW50cyxcbiAqIG9wdGlvbmFsbHkgZmlsdGVyZWQgYnkgYSBzZWxlY3Rvci5cbiAqXG4gKiBAY2F0ZWdvcnkgVHJhdmVyc2luZ1xuICogQGV4YW1wbGVcbiAqXG4gKiBgYGBqc1xuICogJCgnLnBlYXInKS5wYXJlbnQoKS5hdHRyKCdpZCcpO1xuICogLy89PiBmcnVpdHNcbiAqIGBgYFxuICpcbiAqIEBwYXJhbSBzZWxlY3RvciAtIElmIHNwZWNpZmllZCBmaWx0ZXIgZm9yIHBhcmVudC5cbiAqIEByZXR1cm5zIFRoZSBwYXJlbnRzLlxuICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9hcGkuanF1ZXJ5LmNvbS9wYXJlbnQvfVxuICovXG5leHBvcnQgY29uc3QgcGFyZW50OiA8VCBleHRlbmRzIEFueU5vZGU+KFxuICB0aGlzOiBDaGVlcmlvPFQ+LFxuICBzZWxlY3Rvcj86IEFjY2VwdGVkRmlsdGVyczxFbGVtZW50PixcbikgPT4gQ2hlZXJpbzxFbGVtZW50PiA9IF9zaW5nbGVNYXRjaGVyKFxuICAoeyBwYXJlbnQgfSkgPT4gKHBhcmVudCAmJiAhaXNEb2N1bWVudChwYXJlbnQpID8gKHBhcmVudCBhcyBFbGVtZW50KSA6IG51bGwpLFxuICBfcmVtb3ZlRHVwbGljYXRlcyxcbik7XG5cbi8qKlxuICogR2V0IGEgc2V0IG9mIHBhcmVudHMgZmlsdGVyZWQgYnkgYHNlbGVjdG9yYCBvZiBlYWNoIGVsZW1lbnQgaW4gdGhlIGN1cnJlbnRcbiAqIHNldCBvZiBtYXRjaCBlbGVtZW50cy5cbiAqXG4gKiBAY2F0ZWdvcnkgVHJhdmVyc2luZ1xuICogQGV4YW1wbGVcbiAqXG4gKiBgYGBqc1xuICogJCgnLm9yYW5nZScpLnBhcmVudHMoKS5sZW5ndGg7XG4gKiAvLz0+IDJcbiAqICQoJy5vcmFuZ2UnKS5wYXJlbnRzKCcjZnJ1aXRzJykubGVuZ3RoO1xuICogLy89PiAxXG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0gc2VsZWN0b3IgLSBJZiBzcGVjaWZpZWQgZmlsdGVyIGZvciBwYXJlbnRzLlxuICogQHJldHVybnMgVGhlIHBhcmVudHMuXG4gKiBAc2VlIHtAbGluayBodHRwczovL2FwaS5qcXVlcnkuY29tL3BhcmVudHMvfVxuICovXG5leHBvcnQgY29uc3QgcGFyZW50czogPFQgZXh0ZW5kcyBBbnlOb2RlPihcbiAgdGhpczogQ2hlZXJpbzxUPixcbiAgc2VsZWN0b3I/OiBBY2NlcHRlZEZpbHRlcnM8RWxlbWVudD4sXG4pID0+IENoZWVyaW88RWxlbWVudD4gPSBfbWF0Y2hlcihcbiAgKGVsZW0pID0+IHtcbiAgICBjb25zdCBtYXRjaGVkID0gW107XG4gICAgd2hpbGUgKGVsZW0ucGFyZW50ICYmICFpc0RvY3VtZW50KGVsZW0ucGFyZW50KSkge1xuICAgICAgbWF0Y2hlZC5wdXNoKGVsZW0ucGFyZW50IGFzIEVsZW1lbnQpO1xuICAgICAgZWxlbSA9IGVsZW0ucGFyZW50O1xuICAgIH1cbiAgICByZXR1cm4gbWF0Y2hlZDtcbiAgfSxcbiAgdW5pcXVlU29ydCxcbiAgKGVsZW1zKSA9PiBlbGVtcy5yZXZlcnNlKCksXG4pO1xuXG4vKipcbiAqIEdldCB0aGUgYW5jZXN0b3JzIG9mIGVhY2ggZWxlbWVudCBpbiB0aGUgY3VycmVudCBzZXQgb2YgbWF0Y2hlZCBlbGVtZW50cywgdXBcbiAqIHRvIGJ1dCBub3QgaW5jbHVkaW5nIHRoZSBlbGVtZW50IG1hdGNoZWQgYnkgdGhlIHNlbGVjdG9yLCBET00gbm9kZSwgb3JcbiAqIGNoZWVyaW8gb2JqZWN0LlxuICpcbiAqIEBjYXRlZ29yeSBUcmF2ZXJzaW5nXG4gKiBAZXhhbXBsZVxuICpcbiAqIGBgYGpzXG4gKiAkKCcub3JhbmdlJykucGFyZW50c1VudGlsKCcjZm9vZCcpLmxlbmd0aDtcbiAqIC8vPT4gMVxuICogYGBgXG4gKlxuICogQHBhcmFtIHNlbGVjdG9yIC0gU2VsZWN0b3IgZm9yIGVsZW1lbnQgdG8gc3RvcCBhdC5cbiAqIEBwYXJhbSBmaWx0ZXJTZWxlY3RvciAtIE9wdGlvbmFsIGZpbHRlciBmb3IgcGFyZW50cy5cbiAqIEByZXR1cm5zIFRoZSBwYXJlbnRzLlxuICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9hcGkuanF1ZXJ5LmNvbS9wYXJlbnRzVW50aWwvfVxuICovXG5leHBvcnQgY29uc3QgcGFyZW50c1VudGlsOiA8VCBleHRlbmRzIEFueU5vZGU+KFxuICB0aGlzOiBDaGVlcmlvPFQ+LFxuICBzZWxlY3Rvcj86IEFjY2VwdGVkRmlsdGVyczxFbGVtZW50PiB8IG51bGwsXG4gIGZpbHRlclNlbGVjdG9yPzogQWNjZXB0ZWRGaWx0ZXJzPEVsZW1lbnQ+LFxuKSA9PiBDaGVlcmlvPEVsZW1lbnQ+ID0gX21hdGNoVW50aWwoXG4gICh7IHBhcmVudCB9KSA9PiAocGFyZW50ICYmICFpc0RvY3VtZW50KHBhcmVudCkgPyAocGFyZW50IGFzIEVsZW1lbnQpIDogbnVsbCksXG4gIHVuaXF1ZVNvcnQsXG4gIChlbGVtcykgPT4gZWxlbXMucmV2ZXJzZSgpLFxuKTtcblxuLyoqXG4gKiBGb3IgZWFjaCBlbGVtZW50IGluIHRoZSBzZXQsIGdldCB0aGUgZmlyc3QgZWxlbWVudCB0aGF0IG1hdGNoZXMgdGhlIHNlbGVjdG9yXG4gKiBieSB0ZXN0aW5nIHRoZSBlbGVtZW50IGl0c2VsZiBhbmQgdHJhdmVyc2luZyB1cCB0aHJvdWdoIGl0cyBhbmNlc3RvcnMgaW4gdGhlXG4gKiBET00gdHJlZS5cbiAqXG4gKiBAY2F0ZWdvcnkgVHJhdmVyc2luZ1xuICogQGV4YW1wbGVcbiAqXG4gKiBgYGBqc1xuICogJCgnLm9yYW5nZScpLmNsb3Nlc3QoKTtcbiAqIC8vPT4gW11cbiAqXG4gKiAkKCcub3JhbmdlJykuY2xvc2VzdCgnLmFwcGxlJyk7XG4gKiAvLyA9PiBbXVxuICpcbiAqICQoJy5vcmFuZ2UnKS5jbG9zZXN0KCdsaScpO1xuICogLy89PiBbPGxpIGNsYXNzPVwib3JhbmdlXCI+T3JhbmdlPC9saT5dXG4gKlxuICogJCgnLm9yYW5nZScpLmNsb3Nlc3QoJyNmcnVpdHMnKTtcbiAqIC8vPT4gWzx1bCBpZD1cImZydWl0c1wiPiAuLi4gPC91bD5dXG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0gc2VsZWN0b3IgLSBTZWxlY3RvciBmb3IgdGhlIGVsZW1lbnQgdG8gZmluZC5cbiAqIEByZXR1cm5zIFRoZSBjbG9zZXN0IG5vZGVzLlxuICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9hcGkuanF1ZXJ5LmNvbS9jbG9zZXN0L31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNsb3Nlc3Q8VCBleHRlbmRzIEFueU5vZGU+KFxuICB0aGlzOiBDaGVlcmlvPFQ+LFxuICBzZWxlY3Rvcj86IEFjY2VwdGVkRmlsdGVyczxFbGVtZW50Pixcbik6IENoZWVyaW88QW55Tm9kZT4ge1xuICBjb25zdCBzZXQ6IEFueU5vZGVbXSA9IFtdO1xuXG4gIGlmICghc2VsZWN0b3IpIHtcbiAgICByZXR1cm4gdGhpcy5fbWFrZShzZXQpO1xuICB9XG5cbiAgY29uc3Qgc2VsZWN0T3B0cyA9IHtcbiAgICB4bWxNb2RlOiB0aGlzLm9wdGlvbnMueG1sTW9kZSxcbiAgICByb290OiB0aGlzLl9yb290Py5bMF0sXG4gIH07XG5cbiAgY29uc3Qgc2VsZWN0Rm4gPVxuICAgIHR5cGVvZiBzZWxlY3RvciA9PT0gJ3N0cmluZydcbiAgICAgID8gKGVsZW06IEVsZW1lbnQpID0+IHNlbGVjdC5pcyhlbGVtLCBzZWxlY3Rvciwgc2VsZWN0T3B0cylcbiAgICAgIDogZ2V0RmlsdGVyRm4oc2VsZWN0b3IpO1xuXG4gIGRvbUVhY2godGhpcywgKGVsZW06IEFueU5vZGUgfCBudWxsKSA9PiB7XG4gICAgaWYgKGVsZW0gJiYgIWlzRG9jdW1lbnQoZWxlbSkgJiYgIWlzVGFnKGVsZW0pKSB7XG4gICAgICBlbGVtID0gZWxlbS5wYXJlbnQ7XG4gICAgfVxuICAgIHdoaWxlIChlbGVtICYmIGlzVGFnKGVsZW0pKSB7XG4gICAgICBpZiAoc2VsZWN0Rm4oZWxlbSwgMCkpIHtcbiAgICAgICAgLy8gRG8gbm90IGFkZCBkdXBsaWNhdGUgZWxlbWVudHMgdG8gdGhlIHNldFxuICAgICAgICBpZiAoIXNldC5pbmNsdWRlcyhlbGVtKSkge1xuICAgICAgICAgIHNldC5wdXNoKGVsZW0pO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgZWxlbSA9IGVsZW0ucGFyZW50O1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIHRoaXMuX21ha2Uoc2V0KTtcbn1cblxuLyoqXG4gKiBHZXRzIHRoZSBuZXh0IHNpYmxpbmcgb2YgZWFjaCBzZWxlY3RlZCBlbGVtZW50LCBvcHRpb25hbGx5IGZpbHRlcmVkIGJ5IGFcbiAqIHNlbGVjdG9yLlxuICpcbiAqIEBjYXRlZ29yeSBUcmF2ZXJzaW5nXG4gKiBAZXhhbXBsZVxuICpcbiAqIGBgYGpzXG4gKiAkKCcuYXBwbGUnKS5uZXh0KCkuaGFzQ2xhc3MoJ29yYW5nZScpO1xuICogLy89PiB0cnVlXG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0gc2VsZWN0b3IgLSBJZiBzcGVjaWZpZWQgZmlsdGVyIGZvciBzaWJsaW5nLlxuICogQHJldHVybnMgVGhlIG5leHQgbm9kZXMuXG4gKiBAc2VlIHtAbGluayBodHRwczovL2FwaS5qcXVlcnkuY29tL25leHQvfVxuICovXG5leHBvcnQgY29uc3QgbmV4dDogPFQgZXh0ZW5kcyBBbnlOb2RlPihcbiAgdGhpczogQ2hlZXJpbzxUPixcbiAgc2VsZWN0b3I/OiBBY2NlcHRlZEZpbHRlcnM8RWxlbWVudD4sXG4pID0+IENoZWVyaW88RWxlbWVudD4gPSBfc2luZ2xlTWF0Y2hlcigoZWxlbSkgPT4gbmV4dEVsZW1lbnRTaWJsaW5nKGVsZW0pKTtcblxuLyoqXG4gKiBHZXRzIGFsbCB0aGUgZm9sbG93aW5nIHNpYmxpbmdzIG9mIHRoZSBlYWNoIHNlbGVjdGVkIGVsZW1lbnQsIG9wdGlvbmFsbHlcbiAqIGZpbHRlcmVkIGJ5IGEgc2VsZWN0b3IuXG4gKlxuICogQGNhdGVnb3J5IFRyYXZlcnNpbmdcbiAqIEBleGFtcGxlXG4gKlxuICogYGBganNcbiAqICQoJy5hcHBsZScpLm5leHRBbGwoKTtcbiAqIC8vPT4gWzxsaSBjbGFzcz1cIm9yYW5nZVwiPk9yYW5nZTwvbGk+LCA8bGkgY2xhc3M9XCJwZWFyXCI+UGVhcjwvbGk+XVxuICogJCgnLmFwcGxlJykubmV4dEFsbCgnLm9yYW5nZScpO1xuICogLy89PiBbPGxpIGNsYXNzPVwib3JhbmdlXCI+T3JhbmdlPC9saT5dXG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0gc2VsZWN0b3IgLSBJZiBzcGVjaWZpZWQgZmlsdGVyIGZvciBzaWJsaW5ncy5cbiAqIEByZXR1cm5zIFRoZSBuZXh0IG5vZGVzLlxuICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9hcGkuanF1ZXJ5LmNvbS9uZXh0QWxsL31cbiAqL1xuZXhwb3J0IGNvbnN0IG5leHRBbGw6IDxUIGV4dGVuZHMgQW55Tm9kZT4oXG4gIHRoaXM6IENoZWVyaW88VD4sXG4gIHNlbGVjdG9yPzogQWNjZXB0ZWRGaWx0ZXJzPEVsZW1lbnQ+LFxuKSA9PiBDaGVlcmlvPEVsZW1lbnQ+ID0gX21hdGNoZXIoKGVsZW0pID0+IHtcbiAgY29uc3QgbWF0Y2hlZCA9IFtdO1xuICB3aGlsZSAoZWxlbS5uZXh0KSB7XG4gICAgZWxlbSA9IGVsZW0ubmV4dDtcbiAgICBpZiAoaXNUYWcoZWxlbSkpIG1hdGNoZWQucHVzaChlbGVtKTtcbiAgfVxuICByZXR1cm4gbWF0Y2hlZDtcbn0sIF9yZW1vdmVEdXBsaWNhdGVzKTtcblxuLyoqXG4gKiBHZXRzIGFsbCB0aGUgZm9sbG93aW5nIHNpYmxpbmdzIHVwIHRvIGJ1dCBub3QgaW5jbHVkaW5nIHRoZSBlbGVtZW50IG1hdGNoZWRcbiAqIGJ5IHRoZSBzZWxlY3Rvciwgb3B0aW9uYWxseSBmaWx0ZXJlZCBieSBhbm90aGVyIHNlbGVjdG9yLlxuICpcbiAqIEBjYXRlZ29yeSBUcmF2ZXJzaW5nXG4gKiBAZXhhbXBsZVxuICpcbiAqIGBgYGpzXG4gKiAkKCcuYXBwbGUnKS5uZXh0VW50aWwoJy5wZWFyJyk7XG4gKiAvLz0+IFs8bGkgY2xhc3M9XCJvcmFuZ2VcIj5PcmFuZ2U8L2xpPl1cbiAqIGBgYFxuICpcbiAqIEBwYXJhbSBzZWxlY3RvciAtIFNlbGVjdG9yIGZvciBlbGVtZW50IHRvIHN0b3AgYXQuXG4gKiBAcGFyYW0gZmlsdGVyU2VsZWN0b3IgLSBJZiBzcGVjaWZpZWQgZmlsdGVyIGZvciBzaWJsaW5ncy5cbiAqIEByZXR1cm5zIFRoZSBuZXh0IG5vZGVzLlxuICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9hcGkuanF1ZXJ5LmNvbS9uZXh0VW50aWwvfVxuICovXG5leHBvcnQgY29uc3QgbmV4dFVudGlsOiA8VCBleHRlbmRzIEFueU5vZGU+KFxuICB0aGlzOiBDaGVlcmlvPFQ+LFxuICBzZWxlY3Rvcj86IEFjY2VwdGVkRmlsdGVyczxFbGVtZW50PiB8IG51bGwsXG4gIGZpbHRlclNlbGVjdG9yPzogQWNjZXB0ZWRGaWx0ZXJzPEVsZW1lbnQ+LFxuKSA9PiBDaGVlcmlvPEVsZW1lbnQ+ID0gX21hdGNoVW50aWwoXG4gIChlbCkgPT4gbmV4dEVsZW1lbnRTaWJsaW5nKGVsKSxcbiAgX3JlbW92ZUR1cGxpY2F0ZXMsXG4pO1xuXG4vKipcbiAqIEdldHMgdGhlIHByZXZpb3VzIHNpYmxpbmcgb2YgZWFjaCBzZWxlY3RlZCBlbGVtZW50IG9wdGlvbmFsbHkgZmlsdGVyZWQgYnkgYVxuICogc2VsZWN0b3IuXG4gKlxuICogQGNhdGVnb3J5IFRyYXZlcnNpbmdcbiAqIEBleGFtcGxlXG4gKlxuICogYGBganNcbiAqICQoJy5vcmFuZ2UnKS5wcmV2KCkuaGFzQ2xhc3MoJ2FwcGxlJyk7XG4gKiAvLz0+IHRydWVcbiAqIGBgYFxuICpcbiAqIEBwYXJhbSBzZWxlY3RvciAtIElmIHNwZWNpZmllZCBmaWx0ZXIgZm9yIHNpYmxpbmdzLlxuICogQHJldHVybnMgVGhlIHByZXZpb3VzIG5vZGVzLlxuICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9hcGkuanF1ZXJ5LmNvbS9wcmV2L31cbiAqL1xuZXhwb3J0IGNvbnN0IHByZXY6IDxUIGV4dGVuZHMgQW55Tm9kZT4oXG4gIHRoaXM6IENoZWVyaW88VD4sXG4gIHNlbGVjdG9yPzogQWNjZXB0ZWRGaWx0ZXJzPEVsZW1lbnQ+LFxuKSA9PiBDaGVlcmlvPEVsZW1lbnQ+ID0gX3NpbmdsZU1hdGNoZXIoKGVsZW0pID0+IHByZXZFbGVtZW50U2libGluZyhlbGVtKSk7XG5cbi8qKlxuICogR2V0cyBhbGwgdGhlIHByZWNlZGluZyBzaWJsaW5ncyBvZiBlYWNoIHNlbGVjdGVkIGVsZW1lbnQsIG9wdGlvbmFsbHkgZmlsdGVyZWRcbiAqIGJ5IGEgc2VsZWN0b3IuXG4gKlxuICogQGNhdGVnb3J5IFRyYXZlcnNpbmdcbiAqIEBleGFtcGxlXG4gKlxuICogYGBganNcbiAqICQoJy5wZWFyJykucHJldkFsbCgpO1xuICogLy89PiBbPGxpIGNsYXNzPVwib3JhbmdlXCI+T3JhbmdlPC9saT4sIDxsaSBjbGFzcz1cImFwcGxlXCI+QXBwbGU8L2xpPl1cbiAqXG4gKiAkKCcucGVhcicpLnByZXZBbGwoJy5vcmFuZ2UnKTtcbiAqIC8vPT4gWzxsaSBjbGFzcz1cIm9yYW5nZVwiPk9yYW5nZTwvbGk+XVxuICogYGBgXG4gKlxuICogQHBhcmFtIHNlbGVjdG9yIC0gSWYgc3BlY2lmaWVkIGZpbHRlciBmb3Igc2libGluZ3MuXG4gKiBAcmV0dXJucyBUaGUgcHJldmlvdXMgbm9kZXMuXG4gKiBAc2VlIHtAbGluayBodHRwczovL2FwaS5qcXVlcnkuY29tL3ByZXZBbGwvfVxuICovXG5leHBvcnQgY29uc3QgcHJldkFsbDogPFQgZXh0ZW5kcyBBbnlOb2RlPihcbiAgdGhpczogQ2hlZXJpbzxUPixcbiAgc2VsZWN0b3I/OiBBY2NlcHRlZEZpbHRlcnM8RWxlbWVudD4sXG4pID0+IENoZWVyaW88RWxlbWVudD4gPSBfbWF0Y2hlcigoZWxlbSkgPT4ge1xuICBjb25zdCBtYXRjaGVkID0gW107XG4gIHdoaWxlIChlbGVtLnByZXYpIHtcbiAgICBlbGVtID0gZWxlbS5wcmV2O1xuICAgIGlmIChpc1RhZyhlbGVtKSkgbWF0Y2hlZC5wdXNoKGVsZW0pO1xuICB9XG4gIHJldHVybiBtYXRjaGVkO1xufSwgX3JlbW92ZUR1cGxpY2F0ZXMpO1xuXG4vKipcbiAqIEdldHMgYWxsIHRoZSBwcmVjZWRpbmcgc2libGluZ3MgdXAgdG8gYnV0IG5vdCBpbmNsdWRpbmcgdGhlIGVsZW1lbnQgbWF0Y2hlZFxuICogYnkgdGhlIHNlbGVjdG9yLCBvcHRpb25hbGx5IGZpbHRlcmVkIGJ5IGFub3RoZXIgc2VsZWN0b3IuXG4gKlxuICogQGNhdGVnb3J5IFRyYXZlcnNpbmdcbiAqIEBleGFtcGxlXG4gKlxuICogYGBganNcbiAqICQoJy5wZWFyJykucHJldlVudGlsKCcuYXBwbGUnKTtcbiAqIC8vPT4gWzxsaSBjbGFzcz1cIm9yYW5nZVwiPk9yYW5nZTwvbGk+XVxuICogYGBgXG4gKlxuICogQHBhcmFtIHNlbGVjdG9yIC0gU2VsZWN0b3IgZm9yIGVsZW1lbnQgdG8gc3RvcCBhdC5cbiAqIEBwYXJhbSBmaWx0ZXJTZWxlY3RvciAtIElmIHNwZWNpZmllZCBmaWx0ZXIgZm9yIHNpYmxpbmdzLlxuICogQHJldHVybnMgVGhlIHByZXZpb3VzIG5vZGVzLlxuICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9hcGkuanF1ZXJ5LmNvbS9wcmV2VW50aWwvfVxuICovXG5leHBvcnQgY29uc3QgcHJldlVudGlsOiA8VCBleHRlbmRzIEFueU5vZGU+KFxuICB0aGlzOiBDaGVlcmlvPFQ+LFxuICBzZWxlY3Rvcj86IEFjY2VwdGVkRmlsdGVyczxFbGVtZW50PiB8IG51bGwsXG4gIGZpbHRlclNlbGVjdG9yPzogQWNjZXB0ZWRGaWx0ZXJzPEVsZW1lbnQ+LFxuKSA9PiBDaGVlcmlvPEVsZW1lbnQ+ID0gX21hdGNoVW50aWwoXG4gIChlbCkgPT4gcHJldkVsZW1lbnRTaWJsaW5nKGVsKSxcbiAgX3JlbW92ZUR1cGxpY2F0ZXMsXG4pO1xuXG4vKipcbiAqIEdldCB0aGUgc2libGluZ3Mgb2YgZWFjaCBlbGVtZW50IChleGNsdWRpbmcgdGhlIGVsZW1lbnQpIGluIHRoZSBzZXQgb2ZcbiAqIG1hdGNoZWQgZWxlbWVudHMsIG9wdGlvbmFsbHkgZmlsdGVyZWQgYnkgYSBzZWxlY3Rvci5cbiAqXG4gKiBAY2F0ZWdvcnkgVHJhdmVyc2luZ1xuICogQGV4YW1wbGVcbiAqXG4gKiBgYGBqc1xuICogJCgnLnBlYXInKS5zaWJsaW5ncygpLmxlbmd0aDtcbiAqIC8vPT4gMlxuICpcbiAqICQoJy5wZWFyJykuc2libGluZ3MoJy5vcmFuZ2UnKS5sZW5ndGg7XG4gKiAvLz0+IDFcbiAqIGBgYFxuICpcbiAqIEBwYXJhbSBzZWxlY3RvciAtIElmIHNwZWNpZmllZCBmaWx0ZXIgZm9yIHNpYmxpbmdzLlxuICogQHJldHVybnMgVGhlIHNpYmxpbmdzLlxuICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9hcGkuanF1ZXJ5LmNvbS9zaWJsaW5ncy99XG4gKi9cbmV4cG9ydCBjb25zdCBzaWJsaW5nczogPFQgZXh0ZW5kcyBBbnlOb2RlPihcbiAgdGhpczogQ2hlZXJpbzxUPixcbiAgc2VsZWN0b3I/OiBBY2NlcHRlZEZpbHRlcnM8RWxlbWVudD4sXG4pID0+IENoZWVyaW88RWxlbWVudD4gPSBfbWF0Y2hlcihcbiAgKGVsZW0pID0+XG4gICAgZ2V0U2libGluZ3MoZWxlbSkuZmlsdGVyKChlbCk6IGVsIGlzIEVsZW1lbnQgPT4gaXNUYWcoZWwpICYmIGVsICE9PSBlbGVtKSxcbiAgdW5pcXVlU29ydCxcbik7XG5cbi8qKlxuICogR2V0cyB0aGUgZWxlbWVudCBjaGlsZHJlbiBvZiBlYWNoIGVsZW1lbnQgaW4gdGhlIHNldCBvZiBtYXRjaGVkIGVsZW1lbnRzLlxuICpcbiAqIEBjYXRlZ29yeSBUcmF2ZXJzaW5nXG4gKiBAZXhhbXBsZVxuICpcbiAqIGBgYGpzXG4gKiAkKCcjZnJ1aXRzJykuY2hpbGRyZW4oKS5sZW5ndGg7XG4gKiAvLz0+IDNcbiAqXG4gKiAkKCcjZnJ1aXRzJykuY2hpbGRyZW4oJy5wZWFyJykudGV4dCgpO1xuICogLy89PiBQZWFyXG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0gc2VsZWN0b3IgLSBJZiBzcGVjaWZpZWQgZmlsdGVyIGZvciBjaGlsZHJlbi5cbiAqIEByZXR1cm5zIFRoZSBjaGlsZHJlbi5cbiAqIEBzZWUge0BsaW5rIGh0dHBzOi8vYXBpLmpxdWVyeS5jb20vY2hpbGRyZW4vfVxuICovXG5leHBvcnQgY29uc3QgY2hpbGRyZW46IDxUIGV4dGVuZHMgQW55Tm9kZT4oXG4gIHRoaXM6IENoZWVyaW88VD4sXG4gIHNlbGVjdG9yPzogQWNjZXB0ZWRGaWx0ZXJzPEVsZW1lbnQ+LFxuKSA9PiBDaGVlcmlvPEVsZW1lbnQ+ID0gX21hdGNoZXIoXG4gIChlbGVtKSA9PiBnZXRDaGlsZHJlbihlbGVtKS5maWx0ZXIoaXNUYWcpLFxuICBfcmVtb3ZlRHVwbGljYXRlcyxcbik7XG5cbi8qKlxuICogR2V0cyB0aGUgY2hpbGRyZW4gb2YgZWFjaCBlbGVtZW50IGluIHRoZSBzZXQgb2YgbWF0Y2hlZCBlbGVtZW50cywgaW5jbHVkaW5nXG4gKiB0ZXh0IGFuZCBjb21tZW50IG5vZGVzLlxuICpcbiAqIEBjYXRlZ29yeSBUcmF2ZXJzaW5nXG4gKiBAZXhhbXBsZVxuICpcbiAqIGBgYGpzXG4gKiAkKCcjZnJ1aXRzJykuY29udGVudHMoKS5sZW5ndGg7XG4gKiAvLz0+IDNcbiAqIGBgYFxuICpcbiAqIEByZXR1cm5zIFRoZSBjaGlsZHJlbi5cbiAqIEBzZWUge0BsaW5rIGh0dHBzOi8vYXBpLmpxdWVyeS5jb20vY29udGVudHMvfVxuICovXG5leHBvcnQgZnVuY3Rpb24gY29udGVudHM8VCBleHRlbmRzIEFueU5vZGU+KFxuICB0aGlzOiBDaGVlcmlvPFQ+LFxuKTogQ2hlZXJpbzxBbnlOb2RlPiB7XG4gIGNvbnN0IGVsZW1zID0gdGhpcy50b0FycmF5KCkucmVkdWNlPEFueU5vZGVbXT4oXG4gICAgKG5ld0VsZW1zLCBlbGVtKSA9PlxuICAgICAgaGFzQ2hpbGRyZW4oZWxlbSkgPyBuZXdFbGVtcy5jb25jYXQoZWxlbS5jaGlsZHJlbikgOiBuZXdFbGVtcyxcbiAgICBbXSxcbiAgKTtcbiAgcmV0dXJuIHRoaXMuX21ha2UoZWxlbXMpO1xufVxuXG4vKipcbiAqIEl0ZXJhdGVzIG92ZXIgYSBjaGVlcmlvIG9iamVjdCwgZXhlY3V0aW5nIGEgZnVuY3Rpb24gZm9yIGVhY2ggbWF0Y2hlZFxuICogZWxlbWVudC4gV2hlbiB0aGUgY2FsbGJhY2sgaXMgZmlyZWQsIHRoZSBmdW5jdGlvbiBpcyBmaXJlZCBpbiB0aGUgY29udGV4dCBvZlxuICogdGhlIERPTSBlbGVtZW50LCBzbyBgdGhpc2AgcmVmZXJzIHRvIHRoZSBjdXJyZW50IGVsZW1lbnQsIHdoaWNoIGlzIGVxdWl2YWxlbnRcbiAqIHRvIHRoZSBmdW5jdGlvbiBwYXJhbWV0ZXIgYGVsZW1lbnRgLiBUbyBicmVhayBvdXQgb2YgdGhlIGBlYWNoYCBsb29wIGVhcmx5LFxuICogcmV0dXJuIHdpdGggYGZhbHNlYC5cbiAqXG4gKiBAY2F0ZWdvcnkgVHJhdmVyc2luZ1xuICogQGV4YW1wbGVcbiAqXG4gKiBgYGBqc1xuICogY29uc3QgZnJ1aXRzID0gW107XG4gKlxuICogJCgnbGknKS5lYWNoKGZ1bmN0aW9uIChpLCBlbGVtKSB7XG4gKiAgIGZydWl0c1tpXSA9ICQodGhpcykudGV4dCgpO1xuICogfSk7XG4gKlxuICogZnJ1aXRzLmpvaW4oJywgJyk7XG4gKiAvLz0+IEFwcGxlLCBPcmFuZ2UsIFBlYXJcbiAqIGBgYFxuICpcbiAqIEBwYXJhbSBmbiAtIEZ1bmN0aW9uIHRvIGV4ZWN1dGUuXG4gKiBAcmV0dXJucyBUaGUgaW5zdGFuY2UgaXRzZWxmLCB1c2VmdWwgZm9yIGNoYWluaW5nLlxuICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9hcGkuanF1ZXJ5LmNvbS9lYWNoL31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGVhY2g8VD4oXG4gIHRoaXM6IENoZWVyaW88VD4sXG4gIGZuOiAodGhpczogVCwgaTogbnVtYmVyLCBlbDogVCkgPT4gdm9pZCB8IGJvb2xlYW4sXG4pOiBDaGVlcmlvPFQ+IHtcbiAgbGV0IGkgPSAwO1xuICBjb25zdCBsZW4gPSB0aGlzLmxlbmd0aDtcbiAgd2hpbGUgKGkgPCBsZW4gJiYgZm4uY2FsbCh0aGlzW2ldLCBpLCB0aGlzW2ldKSAhPT0gZmFsc2UpICsraTtcbiAgcmV0dXJuIHRoaXM7XG59XG5cbi8qKlxuICogUGFzcyBlYWNoIGVsZW1lbnQgaW4gdGhlIGN1cnJlbnQgbWF0Y2hlZCBzZXQgdGhyb3VnaCBhIGZ1bmN0aW9uLCBwcm9kdWNpbmcgYVxuICogbmV3IENoZWVyaW8gb2JqZWN0IGNvbnRhaW5pbmcgdGhlIHJldHVybiB2YWx1ZXMuIFRoZSBmdW5jdGlvbiBjYW4gcmV0dXJuIGFuXG4gKiBpbmRpdmlkdWFsIGRhdGEgaXRlbSBvciBhbiBhcnJheSBvZiBkYXRhIGl0ZW1zIHRvIGJlIGluc2VydGVkIGludG8gdGhlXG4gKiByZXN1bHRpbmcgc2V0LiBJZiBhbiBhcnJheSBpcyByZXR1cm5lZCwgdGhlIGVsZW1lbnRzIGluc2lkZSB0aGUgYXJyYXkgYXJlXG4gKiBpbnNlcnRlZCBpbnRvIHRoZSBzZXQuIElmIHRoZSBmdW5jdGlvbiByZXR1cm5zIG51bGwgb3IgdW5kZWZpbmVkLCBubyBlbGVtZW50XG4gKiB3aWxsIGJlIGluc2VydGVkLlxuICpcbiAqIEBjYXRlZ29yeSBUcmF2ZXJzaW5nXG4gKiBAZXhhbXBsZVxuICpcbiAqIGBgYGpzXG4gKiAkKCdsaScpXG4gKiAgIC5tYXAoZnVuY3Rpb24gKGksIGVsKSB7XG4gKiAgICAgLy8gdGhpcyA9PT0gZWxcbiAqICAgICByZXR1cm4gJCh0aGlzKS50ZXh0KCk7XG4gKiAgIH0pXG4gKiAgIC50b0FycmF5KClcbiAqICAgLmpvaW4oJyAnKTtcbiAqIC8vPT4gXCJhcHBsZSBvcmFuZ2UgcGVhclwiXG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0gZm4gLSBGdW5jdGlvbiB0byBleGVjdXRlLlxuICogQHJldHVybnMgVGhlIG1hcHBlZCBlbGVtZW50cywgd3JhcHBlZCBpbiBhIENoZWVyaW8gY29sbGVjdGlvbi5cbiAqIEBzZWUge0BsaW5rIGh0dHBzOi8vYXBpLmpxdWVyeS5jb20vbWFwL31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1hcDxULCBNPihcbiAgdGhpczogQ2hlZXJpbzxUPixcbiAgZm46ICh0aGlzOiBULCBpOiBudW1iZXIsIGVsOiBUKSA9PiBNW10gfCBNIHwgbnVsbCB8IHVuZGVmaW5lZCxcbik6IENoZWVyaW88TT4ge1xuICBsZXQgZWxlbXM6IE1bXSA9IFtdO1xuICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCBlbCA9IHRoaXNbaV07XG4gICAgY29uc3QgdmFsID0gZm4uY2FsbChlbCwgaSwgZWwpO1xuICAgIGlmICh2YWwgIT0gbnVsbCkge1xuICAgICAgZWxlbXMgPSBlbGVtcy5jb25jYXQodmFsKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRoaXMuX21ha2UoZWxlbXMpO1xufVxuXG4vKipcbiAqIENyZWF0ZXMgYSBmdW5jdGlvbiB0byB0ZXN0IGlmIGEgZmlsdGVyIGlzIG1hdGNoZWQuXG4gKlxuICogQHBhcmFtIG1hdGNoIC0gQSBmaWx0ZXIuXG4gKiBAcmV0dXJucyBBIGZ1bmN0aW9uIHRoYXQgZGV0ZXJtaW5lcyBpZiBhIGZpbHRlciBoYXMgYmVlbiBtYXRjaGVkLlxuICovXG5mdW5jdGlvbiBnZXRGaWx0ZXJGbjxUPihcbiAgbWF0Y2g6IEZpbHRlckZ1bmN0aW9uPFQ+IHwgQ2hlZXJpbzxUPiB8IFQsXG4pOiAoZWw6IFQsIGk6IG51bWJlcikgPT4gYm9vbGVhbiB7XG4gIGlmICh0eXBlb2YgbWF0Y2ggPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gKGVsLCBpKSA9PiAobWF0Y2ggYXMgRmlsdGVyRnVuY3Rpb248VD4pLmNhbGwoZWwsIGksIGVsKTtcbiAgfVxuICBpZiAoaXNDaGVlcmlvPFQ+KG1hdGNoKSkge1xuICAgIHJldHVybiAoZWwpID0+IEFycmF5LnByb3RvdHlwZS5pbmNsdWRlcy5jYWxsKG1hdGNoLCBlbCk7XG4gIH1cbiAgcmV0dXJuIGZ1bmN0aW9uIChlbCkge1xuICAgIHJldHVybiBtYXRjaCA9PT0gZWw7XG4gIH07XG59XG5cbi8qKlxuICogSXRlcmF0ZXMgb3ZlciBhIGNoZWVyaW8gb2JqZWN0LCByZWR1Y2luZyB0aGUgc2V0IG9mIHNlbGVjdG9yIGVsZW1lbnRzIHRvXG4gKiB0aG9zZSB0aGF0IG1hdGNoIHRoZSBzZWxlY3RvciBvciBwYXNzIHRoZSBmdW5jdGlvbidzIHRlc3QuXG4gKlxuICogVGhpcyBpcyB0aGUgZGVmaW5pdGlvbiBmb3IgdXNpbmcgdHlwZSBndWFyZHM7IGhhdmUgYSBsb29rIGJlbG93IGZvciBvdGhlclxuICogd2F5cyB0byBpbnZva2UgdGhpcyBtZXRob2QuIFRoZSBmdW5jdGlvbiBpcyBleGVjdXRlZCBpbiB0aGUgY29udGV4dCBvZiB0aGVcbiAqIHNlbGVjdGVkIGVsZW1lbnQsIHNvIGB0aGlzYCByZWZlcnMgdG8gdGhlIGN1cnJlbnQgZWxlbWVudC5cbiAqXG4gKiBAY2F0ZWdvcnkgVHJhdmVyc2luZ1xuICogQGV4YW1wbGUgPGNhcHRpb24+RnVuY3Rpb248L2NhcHRpb24+XG4gKlxuICogYGBganNcbiAqICQoJ2xpJylcbiAqICAgLmZpbHRlcihmdW5jdGlvbiAoaSwgZWwpIHtcbiAqICAgICAvLyB0aGlzID09PSBlbFxuICogICAgIHJldHVybiAkKHRoaXMpLmF0dHIoJ2NsYXNzJykgPT09ICdvcmFuZ2UnO1xuICogICB9KVxuICogICAuYXR0cignY2xhc3MnKTsgLy89PiBvcmFuZ2VcbiAqIGBgYFxuICpcbiAqIEBwYXJhbSBtYXRjaCAtIFZhbHVlIHRvIGxvb2sgZm9yLCBmb2xsb3dpbmcgdGhlIHJ1bGVzIGFib3ZlLlxuICogQHJldHVybnMgVGhlIGZpbHRlcmVkIGNvbGxlY3Rpb24uXG4gKiBAc2VlIHtAbGluayBodHRwczovL2FwaS5qcXVlcnkuY29tL2ZpbHRlci99XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmaWx0ZXI8VCwgUyBleHRlbmRzIFQ+KFxuICB0aGlzOiBDaGVlcmlvPFQ+LFxuICBtYXRjaDogKHRoaXM6IFQsIGluZGV4OiBudW1iZXIsIHZhbHVlOiBUKSA9PiB2YWx1ZSBpcyBTLFxuKTogQ2hlZXJpbzxTPjtcbi8qKlxuICogSXRlcmF0ZXMgb3ZlciBhIGNoZWVyaW8gb2JqZWN0LCByZWR1Y2luZyB0aGUgc2V0IG9mIHNlbGVjdG9yIGVsZW1lbnRzIHRvXG4gKiB0aG9zZSB0aGF0IG1hdGNoIHRoZSBzZWxlY3RvciBvciBwYXNzIHRoZSBmdW5jdGlvbidzIHRlc3QuXG4gKlxuICogLSBXaGVuIGEgQ2hlZXJpbyBzZWxlY3Rpb24gaXMgc3BlY2lmaWVkLCByZXR1cm4gb25seSB0aGUgZWxlbWVudHMgY29udGFpbmVkIGluXG4gKiAgIHRoYXQgc2VsZWN0aW9uLlxuICogLSBXaGVuIGFuIGVsZW1lbnQgaXMgc3BlY2lmaWVkLCByZXR1cm4gb25seSB0aGF0IGVsZW1lbnQgKGlmIGl0IGlzIGNvbnRhaW5lZCBpblxuICogICB0aGUgb3JpZ2luYWwgc2VsZWN0aW9uKS5cbiAqIC0gSWYgdXNpbmcgdGhlIGZ1bmN0aW9uIG1ldGhvZCwgdGhlIGZ1bmN0aW9uIGlzIGV4ZWN1dGVkIGluIHRoZSBjb250ZXh0IG9mIHRoZVxuICogICBzZWxlY3RlZCBlbGVtZW50LCBzbyBgdGhpc2AgcmVmZXJzIHRvIHRoZSBjdXJyZW50IGVsZW1lbnQuXG4gKlxuICogQGNhdGVnb3J5IFRyYXZlcnNpbmdcbiAqIEBleGFtcGxlIDxjYXB0aW9uPlNlbGVjdG9yPC9jYXB0aW9uPlxuICpcbiAqIGBgYGpzXG4gKiAkKCdsaScpLmZpbHRlcignLm9yYW5nZScpLmF0dHIoJ2NsYXNzJyk7XG4gKiAvLz0+IG9yYW5nZVxuICogYGBgXG4gKlxuICogQGV4YW1wbGUgPGNhcHRpb24+RnVuY3Rpb248L2NhcHRpb24+XG4gKlxuICogYGBganNcbiAqICQoJ2xpJylcbiAqICAgLmZpbHRlcihmdW5jdGlvbiAoaSwgZWwpIHtcbiAqICAgICAvLyB0aGlzID09PSBlbFxuICogICAgIHJldHVybiAkKHRoaXMpLmF0dHIoJ2NsYXNzJykgPT09ICdvcmFuZ2UnO1xuICogICB9KVxuICogICAuYXR0cignY2xhc3MnKTsgLy89PiBvcmFuZ2VcbiAqIGBgYFxuICpcbiAqIEBwYXJhbSBtYXRjaCAtIFZhbHVlIHRvIGxvb2sgZm9yLCBmb2xsb3dpbmcgdGhlIHJ1bGVzIGFib3ZlLiBTZWVcbiAqICAge0BsaW5rIEFjY2VwdGVkRmlsdGVyc30uXG4gKiBAcmV0dXJucyBUaGUgZmlsdGVyZWQgY29sbGVjdGlvbi5cbiAqIEBzZWUge0BsaW5rIGh0dHBzOi8vYXBpLmpxdWVyeS5jb20vZmlsdGVyL31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGZpbHRlcjxULCBTIGV4dGVuZHMgQWNjZXB0ZWRGaWx0ZXJzPFQ+PihcbiAgdGhpczogQ2hlZXJpbzxUPixcbiAgbWF0Y2g6IFMsXG4pOiBDaGVlcmlvPFMgZXh0ZW5kcyBzdHJpbmcgPyBFbGVtZW50IDogVD47XG5leHBvcnQgZnVuY3Rpb24gZmlsdGVyPFQ+KFxuICB0aGlzOiBDaGVlcmlvPFQ+LFxuICBtYXRjaDogQWNjZXB0ZWRGaWx0ZXJzPFQ+LFxuKTogQ2hlZXJpbzx1bmtub3duPiB7XG4gIHJldHVybiB0aGlzLl9tYWtlPHVua25vd24+KFxuICAgIGZpbHRlckFycmF5KHRoaXMudG9BcnJheSgpLCBtYXRjaCwgdGhpcy5vcHRpb25zLnhtbE1vZGUsIHRoaXMuX3Jvb3Q/LlswXSksXG4gICk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmaWx0ZXJBcnJheTxUPihcbiAgbm9kZXM6IFRbXSxcbiAgbWF0Y2g6IEFjY2VwdGVkRmlsdGVyczxUPixcbiAgeG1sTW9kZT86IGJvb2xlYW4sXG4gIHJvb3Q/OiBEb2N1bWVudCxcbik6IEVsZW1lbnRbXSB8IFRbXSB7XG4gIHJldHVybiB0eXBlb2YgbWF0Y2ggPT09ICdzdHJpbmcnXG4gICAgPyBzZWxlY3QuZmlsdGVyKG1hdGNoLCBub2RlcyBhcyB1bmtub3duIGFzIEFueU5vZGVbXSwgeyB4bWxNb2RlLCByb290IH0pXG4gICAgOiBub2Rlcy5maWx0ZXIoZ2V0RmlsdGVyRm48VD4obWF0Y2gpKTtcbn1cblxuLyoqXG4gKiBDaGVja3MgdGhlIGN1cnJlbnQgbGlzdCBvZiBlbGVtZW50cyBhbmQgcmV0dXJucyBgdHJ1ZWAgaWYgX2FueV8gb2YgdGhlXG4gKiBlbGVtZW50cyBtYXRjaCB0aGUgc2VsZWN0b3IuIElmIHVzaW5nIGFuIGVsZW1lbnQgb3IgQ2hlZXJpbyBzZWxlY3Rpb24sXG4gKiByZXR1cm5zIGB0cnVlYCBpZiBfYW55XyBvZiB0aGUgZWxlbWVudHMgbWF0Y2guIElmIHVzaW5nIGEgcHJlZGljYXRlIGZ1bmN0aW9uLFxuICogdGhlIGZ1bmN0aW9uIGlzIGV4ZWN1dGVkIGluIHRoZSBjb250ZXh0IG9mIHRoZSBzZWxlY3RlZCBlbGVtZW50LCBzbyBgdGhpc2BcbiAqIHJlZmVycyB0byB0aGUgY3VycmVudCBlbGVtZW50LlxuICpcbiAqIEBjYXRlZ29yeSBUcmF2ZXJzaW5nXG4gKiBAcGFyYW0gc2VsZWN0b3IgLSBTZWxlY3RvciBmb3IgdGhlIHNlbGVjdGlvbi5cbiAqIEByZXR1cm5zIFdoZXRoZXIgb3Igbm90IHRoZSBzZWxlY3RvciBtYXRjaGVzIGFuIGVsZW1lbnQgb2YgdGhlIGluc3RhbmNlLlxuICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9hcGkuanF1ZXJ5LmNvbS9pcy99XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpczxUPihcbiAgdGhpczogQ2hlZXJpbzxUPixcbiAgc2VsZWN0b3I/OiBBY2NlcHRlZEZpbHRlcnM8VD4sXG4pOiBib29sZWFuIHtcbiAgY29uc3Qgbm9kZXMgPSB0aGlzLnRvQXJyYXkoKTtcbiAgcmV0dXJuIHR5cGVvZiBzZWxlY3RvciA9PT0gJ3N0cmluZydcbiAgICA/IHNlbGVjdC5zb21lKFxuICAgICAgICAobm9kZXMgYXMgdW5rbm93biBhcyBBbnlOb2RlW10pLmZpbHRlcihpc1RhZyksXG4gICAgICAgIHNlbGVjdG9yLFxuICAgICAgICB0aGlzLm9wdGlvbnMsXG4gICAgICApXG4gICAgOiBzZWxlY3RvclxuICAgICAgPyBub2Rlcy5zb21lKGdldEZpbHRlckZuPFQ+KHNlbGVjdG9yKSlcbiAgICAgIDogZmFsc2U7XG59XG5cbi8qKlxuICogUmVtb3ZlIGVsZW1lbnRzIGZyb20gdGhlIHNldCBvZiBtYXRjaGVkIGVsZW1lbnRzLiBHaXZlbiBhIENoZWVyaW8gb2JqZWN0IHRoYXRcbiAqIHJlcHJlc2VudHMgYSBzZXQgb2YgRE9NIGVsZW1lbnRzLCB0aGUgYC5ub3QoKWAgbWV0aG9kIGNvbnN0cnVjdHMgYSBuZXdcbiAqIENoZWVyaW8gb2JqZWN0IGZyb20gYSBzdWJzZXQgb2YgdGhlIG1hdGNoaW5nIGVsZW1lbnRzLiBUaGUgc3VwcGxpZWQgc2VsZWN0b3JcbiAqIGlzIHRlc3RlZCBhZ2FpbnN0IGVhY2ggZWxlbWVudDsgdGhlIGVsZW1lbnRzIHRoYXQgZG9uJ3QgbWF0Y2ggdGhlIHNlbGVjdG9yXG4gKiB3aWxsIGJlIGluY2x1ZGVkIGluIHRoZSByZXN1bHQuXG4gKlxuICogVGhlIGAubm90KClgIG1ldGhvZCBjYW4gdGFrZSBhIGZ1bmN0aW9uIGFzIGl0cyBhcmd1bWVudCBpbiB0aGUgc2FtZSB3YXkgdGhhdFxuICogYC5maWx0ZXIoKWAgZG9lcy4gRWxlbWVudHMgZm9yIHdoaWNoIHRoZSBmdW5jdGlvbiByZXR1cm5zIGB0cnVlYCBhcmUgZXhjbHVkZWRcbiAqIGZyb20gdGhlIGZpbHRlcmVkIHNldDsgYWxsIG90aGVyIGVsZW1lbnRzIGFyZSBpbmNsdWRlZC5cbiAqXG4gKiBAY2F0ZWdvcnkgVHJhdmVyc2luZ1xuICogQGV4YW1wbGUgPGNhcHRpb24+U2VsZWN0b3I8L2NhcHRpb24+XG4gKlxuICogYGBganNcbiAqICQoJ2xpJykubm90KCcuYXBwbGUnKS5sZW5ndGg7XG4gKiAvLz0+IDJcbiAqIGBgYFxuICpcbiAqIEBleGFtcGxlIDxjYXB0aW9uPkZ1bmN0aW9uPC9jYXB0aW9uPlxuICpcbiAqIGBgYGpzXG4gKiAkKCdsaScpLm5vdChmdW5jdGlvbiAoaSwgZWwpIHtcbiAqICAgLy8gdGhpcyA9PT0gZWxcbiAqICAgcmV0dXJuICQodGhpcykuYXR0cignY2xhc3MnKSA9PT0gJ29yYW5nZSc7XG4gKiB9KS5sZW5ndGg7IC8vPT4gMlxuICogYGBgXG4gKlxuICogQHBhcmFtIG1hdGNoIC0gVmFsdWUgdG8gbG9vayBmb3IsIGZvbGxvd2luZyB0aGUgcnVsZXMgYWJvdmUuXG4gKiBAcmV0dXJucyBUaGUgZmlsdGVyZWQgY29sbGVjdGlvbi5cbiAqIEBzZWUge0BsaW5rIGh0dHBzOi8vYXBpLmpxdWVyeS5jb20vbm90L31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG5vdDxUIGV4dGVuZHMgQW55Tm9kZT4oXG4gIHRoaXM6IENoZWVyaW88VD4sXG4gIG1hdGNoOiBBY2NlcHRlZEZpbHRlcnM8VD4sXG4pOiBDaGVlcmlvPFQ+IHtcbiAgbGV0IG5vZGVzID0gdGhpcy50b0FycmF5KCk7XG5cbiAgaWYgKHR5cGVvZiBtYXRjaCA9PT0gJ3N0cmluZycpIHtcbiAgICBjb25zdCBtYXRjaGVzID0gbmV3IFNldDxBbnlOb2RlPihzZWxlY3QuZmlsdGVyKG1hdGNoLCBub2RlcywgdGhpcy5vcHRpb25zKSk7XG4gICAgbm9kZXMgPSBub2Rlcy5maWx0ZXIoKGVsKSA9PiAhbWF0Y2hlcy5oYXMoZWwpKTtcbiAgfSBlbHNlIHtcbiAgICBjb25zdCBmaWx0ZXJGbiA9IGdldEZpbHRlckZuKG1hdGNoKTtcbiAgICBub2RlcyA9IG5vZGVzLmZpbHRlcigoZWwsIGkpID0+ICFmaWx0ZXJGbihlbCwgaSkpO1xuICB9XG5cbiAgcmV0dXJuIHRoaXMuX21ha2Uobm9kZXMpO1xufVxuXG4vKipcbiAqIEZpbHRlcnMgdGhlIHNldCBvZiBtYXRjaGVkIGVsZW1lbnRzIHRvIG9ubHkgdGhvc2Ugd2hpY2ggaGF2ZSB0aGUgZ2l2ZW4gRE9NXG4gKiBlbGVtZW50IGFzIGEgZGVzY2VuZGFudCBvciB3aGljaCBoYXZlIGEgZGVzY2VuZGFudCB0aGF0IG1hdGNoZXMgdGhlIGdpdmVuXG4gKiBzZWxlY3Rvci4gRXF1aXZhbGVudCB0byBgLmZpbHRlcignOmhhcyhzZWxlY3RvciknKWAuXG4gKlxuICogQGNhdGVnb3J5IFRyYXZlcnNpbmdcbiAqIEBleGFtcGxlIDxjYXB0aW9uPlNlbGVjdG9yPC9jYXB0aW9uPlxuICpcbiAqIGBgYGpzXG4gKiAkKCd1bCcpLmhhcygnLnBlYXInKS5hdHRyKCdpZCcpO1xuICogLy89PiBmcnVpdHNcbiAqIGBgYFxuICpcbiAqIEBleGFtcGxlIDxjYXB0aW9uPkVsZW1lbnQ8L2NhcHRpb24+XG4gKlxuICogYGBganNcbiAqICQoJ3VsJykuaGFzKCQoJy5wZWFyJylbMF0pLmF0dHIoJ2lkJyk7XG4gKiAvLz0+IGZydWl0c1xuICogYGBgXG4gKlxuICogQHBhcmFtIHNlbGVjdG9yT3JIYXlzdGFjayAtIEVsZW1lbnQgdG8gbG9vayBmb3IuXG4gKiBAcmV0dXJucyBUaGUgZmlsdGVyZWQgY29sbGVjdGlvbi5cbiAqIEBzZWUge0BsaW5rIGh0dHBzOi8vYXBpLmpxdWVyeS5jb20vaGFzL31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGhhcyhcbiAgdGhpczogQ2hlZXJpbzxBbnlOb2RlIHwgRWxlbWVudD4sXG4gIHNlbGVjdG9yT3JIYXlzdGFjazogc3RyaW5nIHwgQ2hlZXJpbzxFbGVtZW50PiB8IEVsZW1lbnQsXG4pOiBDaGVlcmlvPEFueU5vZGUgfCBFbGVtZW50PiB7XG4gIHJldHVybiB0aGlzLmZpbHRlcihcbiAgICB0eXBlb2Ygc2VsZWN0b3JPckhheXN0YWNrID09PSAnc3RyaW5nJ1xuICAgICAgPyAvLyBVc2luZyB0aGUgYDpoYXNgIHNlbGVjdG9yIGhlcmUgc2hvcnQtY2lyY3VpdHMgc2VhcmNoZXMuXG4gICAgICAgIGA6aGFzKCR7c2VsZWN0b3JPckhheXN0YWNrfSlgXG4gICAgICA6IChfLCBlbCkgPT4gdGhpcy5fbWFrZShlbCkuZmluZChzZWxlY3Rvck9ySGF5c3RhY2spLmxlbmd0aCA+IDAsXG4gICk7XG59XG5cbi8qKlxuICogV2lsbCBzZWxlY3QgdGhlIGZpcnN0IGVsZW1lbnQgb2YgYSBjaGVlcmlvIG9iamVjdC5cbiAqXG4gKiBAY2F0ZWdvcnkgVHJhdmVyc2luZ1xuICogQGV4YW1wbGVcbiAqXG4gKiBgYGBqc1xuICogJCgnI2ZydWl0cycpLmNoaWxkcmVuKCkuZmlyc3QoKS50ZXh0KCk7XG4gKiAvLz0+IEFwcGxlXG4gKiBgYGBcbiAqXG4gKiBAcmV0dXJucyBUaGUgZmlyc3QgZWxlbWVudC5cbiAqIEBzZWUge0BsaW5rIGh0dHBzOi8vYXBpLmpxdWVyeS5jb20vZmlyc3QvfVxuICovXG5leHBvcnQgZnVuY3Rpb24gZmlyc3Q8VCBleHRlbmRzIEFueU5vZGU+KHRoaXM6IENoZWVyaW88VD4pOiBDaGVlcmlvPFQ+IHtcbiAgcmV0dXJuIHRoaXMubGVuZ3RoID4gMSA/IHRoaXMuX21ha2UodGhpc1swXSkgOiB0aGlzO1xufVxuXG4vKipcbiAqIFdpbGwgc2VsZWN0IHRoZSBsYXN0IGVsZW1lbnQgb2YgYSBjaGVlcmlvIG9iamVjdC5cbiAqXG4gKiBAY2F0ZWdvcnkgVHJhdmVyc2luZ1xuICogQGV4YW1wbGVcbiAqXG4gKiBgYGBqc1xuICogJCgnI2ZydWl0cycpLmNoaWxkcmVuKCkubGFzdCgpLnRleHQoKTtcbiAqIC8vPT4gUGVhclxuICogYGBgXG4gKlxuICogQHJldHVybnMgVGhlIGxhc3QgZWxlbWVudC5cbiAqIEBzZWUge0BsaW5rIGh0dHBzOi8vYXBpLmpxdWVyeS5jb20vbGFzdC99XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsYXN0PFQ+KHRoaXM6IENoZWVyaW88VD4pOiBDaGVlcmlvPFQ+IHtcbiAgcmV0dXJuIHRoaXMubGVuZ3RoID4gMCA/IHRoaXMuX21ha2UodGhpc1t0aGlzLmxlbmd0aCAtIDFdKSA6IHRoaXM7XG59XG5cbi8qKlxuICogUmVkdWNlIHRoZSBzZXQgb2YgbWF0Y2hlZCBlbGVtZW50cyB0byB0aGUgb25lIGF0IHRoZSBzcGVjaWZpZWQgaW5kZXguIFVzZVxuICogYC5lcSgtaSlgIHRvIGNvdW50IGJhY2t3YXJkcyBmcm9tIHRoZSBsYXN0IHNlbGVjdGVkIGVsZW1lbnQuXG4gKlxuICogQGNhdGVnb3J5IFRyYXZlcnNpbmdcbiAqIEBleGFtcGxlXG4gKlxuICogYGBganNcbiAqICQoJ2xpJykuZXEoMCkudGV4dCgpO1xuICogLy89PiBBcHBsZVxuICpcbiAqICQoJ2xpJykuZXEoLTEpLnRleHQoKTtcbiAqIC8vPT4gUGVhclxuICogYGBgXG4gKlxuICogQHBhcmFtIGkgLSBJbmRleCBvZiB0aGUgZWxlbWVudCB0byBzZWxlY3QuXG4gKiBAcmV0dXJucyBUaGUgZWxlbWVudCBhdCB0aGUgYGlgdGggcG9zaXRpb24uXG4gKiBAc2VlIHtAbGluayBodHRwczovL2FwaS5qcXVlcnkuY29tL2VxL31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGVxPFQ+KHRoaXM6IENoZWVyaW88VD4sIGk6IG51bWJlcik6IENoZWVyaW88VD4ge1xuICBpID0gK2k7XG5cbiAgLy8gVXNlIHRoZSBmaXJzdCBpZGVudGl0eSBvcHRpbWl6YXRpb24gaWYgcG9zc2libGVcbiAgaWYgKGkgPT09IDAgJiYgdGhpcy5sZW5ndGggPD0gMSkgcmV0dXJuIHRoaXM7XG5cbiAgaWYgKGkgPCAwKSBpID0gdGhpcy5sZW5ndGggKyBpO1xuICByZXR1cm4gdGhpcy5fbWFrZSh0aGlzW2ldID8/IFtdKTtcbn1cblxuLyoqXG4gKiBSZXRyaWV2ZSBvbmUgb2YgdGhlIGVsZW1lbnRzIG1hdGNoZWQgYnkgdGhlIENoZWVyaW8gb2JqZWN0LCBhdCB0aGUgYGlgdGhcbiAqIHBvc2l0aW9uLlxuICpcbiAqIEBjYXRlZ29yeSBUcmF2ZXJzaW5nXG4gKiBAZXhhbXBsZVxuICpcbiAqIGBgYGpzXG4gKiAkKCdsaScpLmdldCgwKS50YWdOYW1lO1xuICogLy89PiBsaVxuICogYGBgXG4gKlxuICogQHBhcmFtIGkgLSBFbGVtZW50IHRvIHJldHJpZXZlLlxuICogQHJldHVybnMgVGhlIGVsZW1lbnQgYXQgdGhlIGBpYHRoIHBvc2l0aW9uLlxuICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9hcGkuanF1ZXJ5LmNvbS9nZXQvfVxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0PFQ+KHRoaXM6IENoZWVyaW88VD4sIGk6IG51bWJlcik6IFQgfCB1bmRlZmluZWQ7XG4vKipcbiAqIFJldHJpZXZlIGFsbCBlbGVtZW50cyBtYXRjaGVkIGJ5IHRoZSBDaGVlcmlvIG9iamVjdCwgYXMgYW4gYXJyYXkuXG4gKlxuICogQGNhdGVnb3J5IFRyYXZlcnNpbmdcbiAqIEBleGFtcGxlXG4gKlxuICogYGBganNcbiAqICQoJ2xpJykuZ2V0KCkubGVuZ3RoO1xuICogLy89PiAzXG4gKiBgYGBcbiAqXG4gKiBAcmV0dXJucyBBbGwgZWxlbWVudHMgbWF0Y2hlZCBieSB0aGUgQ2hlZXJpbyBvYmplY3QuXG4gKiBAc2VlIHtAbGluayBodHRwczovL2FwaS5qcXVlcnkuY29tL2dldC99XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXQ8VD4odGhpczogQ2hlZXJpbzxUPik6IFRbXTtcbmV4cG9ydCBmdW5jdGlvbiBnZXQ8VD4odGhpczogQ2hlZXJpbzxUPiwgaT86IG51bWJlcik6IFQgfCBUW10ge1xuICBpZiAoaSA9PSBudWxsKSB7XG4gICAgcmV0dXJuIHRoaXMudG9BcnJheSgpO1xuICB9XG4gIHJldHVybiB0aGlzW2kgPCAwID8gdGhpcy5sZW5ndGggKyBpIDogaV07XG59XG5cbi8qKlxuICogUmV0cmlldmUgYWxsIHRoZSBET00gZWxlbWVudHMgY29udGFpbmVkIGluIHRoZSBqUXVlcnkgc2V0IGFzIGFuIGFycmF5LlxuICpcbiAqIEBleGFtcGxlXG4gKlxuICogYGBganNcbiAqICQoJ2xpJykudG9BcnJheSgpO1xuICogLy89PiBbIHsuLi59LCB7Li4ufSwgey4uLn0gXVxuICogYGBgXG4gKlxuICogQHJldHVybnMgVGhlIGNvbnRhaW5lZCBpdGVtcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRvQXJyYXk8VD4odGhpczogQ2hlZXJpbzxUPik6IFRbXSB7XG4gIHJldHVybiBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCh0aGlzKTtcbn1cblxuLyoqXG4gKiBTZWFyY2ggZm9yIGEgZ2l2ZW4gZWxlbWVudCBmcm9tIGFtb25nIHRoZSBtYXRjaGVkIGVsZW1lbnRzLlxuICpcbiAqIEBjYXRlZ29yeSBUcmF2ZXJzaW5nXG4gKiBAZXhhbXBsZVxuICpcbiAqIGBgYGpzXG4gKiAkKCcucGVhcicpLmluZGV4KCk7XG4gKiAvLz0+IDIgJCgnLm9yYW5nZScpLmluZGV4KCdsaScpO1xuICogLy89PiAxXG4gKiAkKCcuYXBwbGUnKS5pbmRleCgkKCcjZnJ1aXQsIGxpJykpO1xuICogLy89PiAxXG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0gc2VsZWN0b3JPck5lZWRsZSAtIEVsZW1lbnQgdG8gbG9vayBmb3IuXG4gKiBAcmV0dXJucyBUaGUgaW5kZXggb2YgdGhlIGVsZW1lbnQuXG4gKiBAc2VlIHtAbGluayBodHRwczovL2FwaS5qcXVlcnkuY29tL2luZGV4L31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGluZGV4PFQgZXh0ZW5kcyBBbnlOb2RlPihcbiAgdGhpczogQ2hlZXJpbzxUPixcbiAgc2VsZWN0b3JPck5lZWRsZT86IHN0cmluZyB8IENoZWVyaW88QW55Tm9kZT4gfCBBbnlOb2RlLFxuKTogbnVtYmVyIHtcbiAgbGV0ICRoYXlzdGFjazogQ2hlZXJpbzxBbnlOb2RlPjtcbiAgbGV0IG5lZWRsZTogQW55Tm9kZTtcblxuICBpZiAoc2VsZWN0b3JPck5lZWRsZSA9PSBudWxsKSB7XG4gICAgJGhheXN0YWNrID0gdGhpcy5wYXJlbnQoKS5jaGlsZHJlbigpO1xuICAgIG5lZWRsZSA9IHRoaXNbMF07XG4gIH0gZWxzZSBpZiAodHlwZW9mIHNlbGVjdG9yT3JOZWVkbGUgPT09ICdzdHJpbmcnKSB7XG4gICAgJGhheXN0YWNrID0gdGhpcy5fbWFrZTxBbnlOb2RlPihzZWxlY3Rvck9yTmVlZGxlKTtcbiAgICBuZWVkbGUgPSB0aGlzWzBdO1xuICB9IGVsc2Uge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdGhpcy1hbGlhcywgdW5pY29ybi9uby10aGlzLWFzc2lnbm1lbnRcbiAgICAkaGF5c3RhY2sgPSB0aGlzO1xuICAgIG5lZWRsZSA9IGlzQ2hlZXJpbyhzZWxlY3Rvck9yTmVlZGxlKVxuICAgICAgPyBzZWxlY3Rvck9yTmVlZGxlWzBdXG4gICAgICA6IHNlbGVjdG9yT3JOZWVkbGU7XG4gIH1cblxuICByZXR1cm4gQXJyYXkucHJvdG90eXBlLmluZGV4T2YuY2FsbCgkaGF5c3RhY2ssIG5lZWRsZSk7XG59XG5cbi8qKlxuICogR2V0cyB0aGUgZWxlbWVudHMgbWF0Y2hpbmcgdGhlIHNwZWNpZmllZCByYW5nZSAoMC1iYXNlZCBwb3NpdGlvbikuXG4gKlxuICogQGNhdGVnb3J5IFRyYXZlcnNpbmdcbiAqIEBleGFtcGxlXG4gKlxuICogYGBganNcbiAqICQoJ2xpJykuc2xpY2UoMSkuZXEoMCkudGV4dCgpO1xuICogLy89PiAnT3JhbmdlJ1xuICpcbiAqICQoJ2xpJykuc2xpY2UoMSwgMikubGVuZ3RoO1xuICogLy89PiAxXG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0gc3RhcnQgLSBBIHBvc2l0aW9uIGF0IHdoaWNoIHRoZSBlbGVtZW50cyBiZWdpbiB0byBiZSBzZWxlY3RlZC4gSWZcbiAqICAgbmVnYXRpdmUsIGl0IGluZGljYXRlcyBhbiBvZmZzZXQgZnJvbSB0aGUgZW5kIG9mIHRoZSBzZXQuXG4gKiBAcGFyYW0gZW5kIC0gQSBwb3NpdGlvbiBhdCB3aGljaCB0aGUgZWxlbWVudHMgc3RvcCBiZWluZyBzZWxlY3RlZC4gSWZcbiAqICAgbmVnYXRpdmUsIGl0IGluZGljYXRlcyBhbiBvZmZzZXQgZnJvbSB0aGUgZW5kIG9mIHRoZSBzZXQuIElmIG9taXR0ZWQsIHRoZVxuICogICByYW5nZSBjb250aW51ZXMgdW50aWwgdGhlIGVuZCBvZiB0aGUgc2V0LlxuICogQHJldHVybnMgVGhlIGVsZW1lbnRzIG1hdGNoaW5nIHRoZSBzcGVjaWZpZWQgcmFuZ2UuXG4gKiBAc2VlIHtAbGluayBodHRwczovL2FwaS5qcXVlcnkuY29tL3NsaWNlL31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNsaWNlPFQ+KFxuICB0aGlzOiBDaGVlcmlvPFQ+LFxuICBzdGFydD86IG51bWJlcixcbiAgZW5kPzogbnVtYmVyLFxuKTogQ2hlZXJpbzxUPiB7XG4gIHJldHVybiB0aGlzLl9tYWtlKEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHRoaXMsIHN0YXJ0LCBlbmQpKTtcbn1cblxuLyoqXG4gKiBFbmQgdGhlIG1vc3QgcmVjZW50IGZpbHRlcmluZyBvcGVyYXRpb24gaW4gdGhlIGN1cnJlbnQgY2hhaW4gYW5kIHJldHVybiB0aGVcbiAqIHNldCBvZiBtYXRjaGVkIGVsZW1lbnRzIHRvIGl0cyBwcmV2aW91cyBzdGF0ZS5cbiAqXG4gKiBAY2F0ZWdvcnkgVHJhdmVyc2luZ1xuICogQGV4YW1wbGVcbiAqXG4gKiBgYGBqc1xuICogJCgnbGknKS5lcSgwKS5lbmQoKS5sZW5ndGg7XG4gKiAvLz0+IDNcbiAqIGBgYFxuICpcbiAqIEByZXR1cm5zIFRoZSBwcmV2aW91cyBzdGF0ZSBvZiB0aGUgc2V0IG9mIG1hdGNoZWQgZWxlbWVudHMuXG4gKiBAc2VlIHtAbGluayBodHRwczovL2FwaS5qcXVlcnkuY29tL2VuZC99XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBlbmQ8VD4odGhpczogQ2hlZXJpbzxUPik6IENoZWVyaW88QW55Tm9kZT4ge1xuICByZXR1cm4gdGhpcy5wcmV2T2JqZWN0ID8/IHRoaXMuX21ha2UoW10pO1xufVxuXG4vKipcbiAqIEFkZCBlbGVtZW50cyB0byB0aGUgc2V0IG9mIG1hdGNoZWQgZWxlbWVudHMuXG4gKlxuICogQGNhdGVnb3J5IFRyYXZlcnNpbmdcbiAqIEBleGFtcGxlXG4gKlxuICogYGBganNcbiAqICQoJy5hcHBsZScpLmFkZCgnLm9yYW5nZScpLmxlbmd0aDtcbiAqIC8vPT4gMlxuICogYGBgXG4gKlxuICogQHBhcmFtIG90aGVyIC0gRWxlbWVudHMgdG8gYWRkLlxuICogQHBhcmFtIGNvbnRleHQgLSBPcHRpb25hbGx5IHRoZSBjb250ZXh0IG9mIHRoZSBuZXcgc2VsZWN0aW9uLlxuICogQHJldHVybnMgVGhlIGNvbWJpbmVkIHNldC5cbiAqIEBzZWUge0BsaW5rIGh0dHBzOi8vYXBpLmpxdWVyeS5jb20vYWRkL31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFkZDxTIGV4dGVuZHMgQW55Tm9kZSwgVCBleHRlbmRzIEFueU5vZGU+KFxuICB0aGlzOiBDaGVlcmlvPFQ+LFxuICBvdGhlcjogc3RyaW5nIHwgQ2hlZXJpbzxTPiB8IFMgfCBTW10sXG4gIGNvbnRleHQ/OiBDaGVlcmlvPFM+IHwgc3RyaW5nLFxuKTogQ2hlZXJpbzxTIHwgVD4ge1xuICBjb25zdCBzZWxlY3Rpb24gPSB0aGlzLl9tYWtlKG90aGVyLCBjb250ZXh0KTtcbiAgY29uc3QgY29udGVudHMgPSB1bmlxdWVTb3J0KFsuLi50aGlzLmdldCgpLCAuLi5zZWxlY3Rpb24uZ2V0KCldKTtcbiAgcmV0dXJuIHRoaXMuX21ha2UoY29udGVudHMpO1xufVxuXG4vKipcbiAqIEFkZCB0aGUgcHJldmlvdXMgc2V0IG9mIGVsZW1lbnRzIG9uIHRoZSBzdGFjayB0byB0aGUgY3VycmVudCBzZXQsIG9wdGlvbmFsbHlcbiAqIGZpbHRlcmVkIGJ5IGEgc2VsZWN0b3IuXG4gKlxuICogQGNhdGVnb3J5IFRyYXZlcnNpbmdcbiAqIEBleGFtcGxlXG4gKlxuICogYGBganNcbiAqICQoJ2xpJykuZXEoMCkuYWRkQmFjaygnLm9yYW5nZScpLmxlbmd0aDtcbiAqIC8vPT4gMlxuICogYGBgXG4gKlxuICogQHBhcmFtIHNlbGVjdG9yIC0gU2VsZWN0b3IgZm9yIHRoZSBlbGVtZW50cyB0byBhZGQuXG4gKiBAcmV0dXJucyBUaGUgY29tYmluZWQgc2V0LlxuICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9hcGkuanF1ZXJ5LmNvbS9hZGRCYWNrL31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFkZEJhY2s8VCBleHRlbmRzIEFueU5vZGU+KFxuICB0aGlzOiBDaGVlcmlvPFQ+LFxuICBzZWxlY3Rvcj86IHN0cmluZyxcbik6IENoZWVyaW88QW55Tm9kZT4ge1xuICByZXR1cm4gdGhpcy5wcmV2T2JqZWN0XG4gICAgPyB0aGlzLmFkZChzZWxlY3RvciA/IHRoaXMucHJldk9iamVjdC5maWx0ZXIoc2VsZWN0b3IpIDogdGhpcy5wcmV2T2JqZWN0KVxuICAgIDogdGhpcztcbn1cbiIsICJpbXBvcnQgeyByZW1vdmVFbGVtZW50IH0gZnJvbSAnZG9tdXRpbHMnO1xuaW1wb3J0IHtcbiAgdHlwZSBBbnlOb2RlLFxuICBEb2N1bWVudCxcbiAgdHlwZSBQYXJlbnROb2RlLFxuICBpc0RvY3VtZW50IGFzIGNoZWNrSXNEb2N1bWVudCxcbn0gZnJvbSAnZG9taGFuZGxlcic7XG5pbXBvcnQgdHlwZSB7IEludGVybmFsT3B0aW9ucyB9IGZyb20gJy4vb3B0aW9ucy5qcyc7XG5cbi8qKlxuICogR2V0IHRoZSBwYXJzZSBmdW5jdGlvbiB3aXRoIG9wdGlvbnMuXG4gKlxuICogQHBhcmFtIHBhcnNlciAtIFRoZSBwYXJzZXIgZnVuY3Rpb24uXG4gKiBAcmV0dXJucyBUaGUgcGFyc2UgZnVuY3Rpb24gd2l0aCBvcHRpb25zLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0UGFyc2UoXG4gIHBhcnNlcjogKFxuICAgIGNvbnRlbnQ6IHN0cmluZyxcbiAgICBvcHRpb25zOiBJbnRlcm5hbE9wdGlvbnMsXG4gICAgaXNEb2N1bWVudDogYm9vbGVhbixcbiAgICBjb250ZXh0OiBQYXJlbnROb2RlIHwgbnVsbCxcbiAgKSA9PiBEb2N1bWVudCxcbikge1xuICAvKipcbiAgICogUGFyc2UgYSBIVE1MIHN0cmluZyBvciBhIG5vZGUuXG4gICAqXG4gICAqIEBwYXJhbSBjb250ZW50IC0gVGhlIEhUTUwgc3RyaW5nIG9yIG5vZGUuXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIHBhcnNlciBvcHRpb25zLlxuICAgKiBAcGFyYW0gaXNEb2N1bWVudCAtIElmIGBjb250ZW50YCBpcyBhIGRvY3VtZW50LlxuICAgKiBAcGFyYW0gY29udGV4dCAtIFRoZSBjb250ZXh0IG5vZGUgaW4gdGhlIERPTSB0cmVlLlxuICAgKiBAcmV0dXJucyBUaGUgcGFyc2VkIGRvY3VtZW50IG5vZGUuXG4gICAqL1xuICByZXR1cm4gZnVuY3Rpb24gcGFyc2UoXG4gICAgY29udGVudDogc3RyaW5nIHwgRG9jdW1lbnQgfCBBbnlOb2RlIHwgQW55Tm9kZVtdIHwgQnVmZmVyLFxuICAgIG9wdGlvbnM6IEludGVybmFsT3B0aW9ucyxcbiAgICBpc0RvY3VtZW50OiBib29sZWFuLFxuICAgIGNvbnRleHQ6IFBhcmVudE5vZGUgfCBudWxsLFxuICApOiBEb2N1bWVudCB7XG4gICAgaWYgKHR5cGVvZiBCdWZmZXIgIT09ICd1bmRlZmluZWQnICYmIEJ1ZmZlci5pc0J1ZmZlcihjb250ZW50KSkge1xuICAgICAgY29udGVudCA9IGNvbnRlbnQudG9TdHJpbmcoKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGNvbnRlbnQgPT09ICdzdHJpbmcnKSB7XG4gICAgICByZXR1cm4gcGFyc2VyKGNvbnRlbnQsIG9wdGlvbnMsIGlzRG9jdW1lbnQsIGNvbnRleHQpO1xuICAgIH1cblxuICAgIGNvbnN0IGRvYyA9IGNvbnRlbnQgYXMgQW55Tm9kZSB8IEFueU5vZGVbXSB8IERvY3VtZW50O1xuXG4gICAgaWYgKCFBcnJheS5pc0FycmF5KGRvYykgJiYgY2hlY2tJc0RvY3VtZW50KGRvYykpIHtcbiAgICAgIC8vIElmIGBkb2NgIGlzIGFscmVhZHkgYSByb290LCBqdXN0IHJldHVybiBpdFxuICAgICAgcmV0dXJuIGRvYztcbiAgICB9XG5cbiAgICAvLyBBZGQgY29uZW50IHRvIG5ldyByb290IGVsZW1lbnRcbiAgICBjb25zdCByb290ID0gbmV3IERvY3VtZW50KFtdKTtcblxuICAgIC8vIFVwZGF0ZSB0aGUgRE9NIHVzaW5nIHRoZSByb290XG4gICAgdXBkYXRlKGRvYywgcm9vdCk7XG5cbiAgICByZXR1cm4gcm9vdDtcbiAgfTtcbn1cblxuLyoqXG4gKiBVcGRhdGUgdGhlIGRvbSBzdHJ1Y3R1cmUsIGZvciBvbmUgY2hhbmdlZCBsYXllci5cbiAqXG4gKiBAcGFyYW0gbmV3Q2hpbGRzIC0gVGhlIG5ldyBjaGlsZHJlbi5cbiAqIEBwYXJhbSBwYXJlbnQgLSBUaGUgbmV3IHBhcmVudC5cbiAqIEByZXR1cm5zIFRoZSBwYXJlbnQgbm9kZS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVwZGF0ZShcbiAgbmV3Q2hpbGRzOiBBbnlOb2RlW10gfCBBbnlOb2RlLFxuICBwYXJlbnQ6IFBhcmVudE5vZGUgfCBudWxsLFxuKTogUGFyZW50Tm9kZSB8IG51bGwge1xuICAvLyBOb3JtYWxpemVcbiAgY29uc3QgYXJyID0gQXJyYXkuaXNBcnJheShuZXdDaGlsZHMpID8gbmV3Q2hpbGRzIDogW25ld0NoaWxkc107XG5cbiAgLy8gVXBkYXRlIHBhcmVudFxuICBpZiAocGFyZW50KSB7XG4gICAgcGFyZW50LmNoaWxkcmVuID0gYXJyO1xuICB9IGVsc2Uge1xuICAgIHBhcmVudCA9IG51bGw7XG4gIH1cblxuICAvLyBVcGRhdGUgbmVpZ2hib3JzXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgYXJyLmxlbmd0aDsgaSsrKSB7XG4gICAgY29uc3Qgbm9kZSA9IGFycltpXTtcblxuICAgIC8vIENsZWFubHkgcmVtb3ZlIGV4aXN0aW5nIG5vZGVzIGZyb20gdGhlaXIgcHJldmlvdXMgc3RydWN0dXJlcy5cbiAgICBpZiAobm9kZS5wYXJlbnQgJiYgbm9kZS5wYXJlbnQuY2hpbGRyZW4gIT09IGFycikge1xuICAgICAgcmVtb3ZlRWxlbWVudChub2RlKTtcbiAgICB9XG5cbiAgICBpZiAocGFyZW50KSB7XG4gICAgICBub2RlLnByZXYgPSBhcnJbaSAtIDFdIHx8IG51bGw7XG4gICAgICBub2RlLm5leHQgPSBhcnJbaSArIDFdIHx8IG51bGw7XG4gICAgfSBlbHNlIHtcbiAgICAgIG5vZGUucHJldiA9IG5vZGUubmV4dCA9IG51bGw7XG4gICAgfVxuXG4gICAgbm9kZS5wYXJlbnQgPSBwYXJlbnQ7XG4gIH1cblxuICByZXR1cm4gcGFyZW50O1xufVxuIiwgIi8qKlxuICogTWV0aG9kcyBmb3IgbW9kaWZ5aW5nIHRoZSBET00gc3RydWN0dXJlLlxuICpcbiAqIEBtb2R1bGUgY2hlZXJpby9tYW5pcHVsYXRpb25cbiAqL1xuXG5pbXBvcnQge1xuICBpc1RhZyxcbiAgVGV4dCxcbiAgaGFzQ2hpbGRyZW4sXG4gIGNsb25lTm9kZSxcbiAgRG9jdW1lbnQsXG4gIHR5cGUgUGFyZW50Tm9kZSxcbiAgdHlwZSBBbnlOb2RlLFxuICB0eXBlIEVsZW1lbnQsXG59IGZyb20gJ2RvbWhhbmRsZXInO1xuaW1wb3J0IHsgdXBkYXRlIGFzIHVwZGF0ZURPTSB9IGZyb20gJy4uL3BhcnNlLmpzJztcbmltcG9ydCB7IHRleHQgYXMgc3RhdGljVGV4dCB9IGZyb20gJy4uL3N0YXRpYy5qcyc7XG5pbXBvcnQgeyBkb21FYWNoLCBpc0h0bWwsIGlzQ2hlZXJpbyB9IGZyb20gJy4uL3V0aWxzLmpzJztcbmltcG9ydCB7IHJlbW92ZUVsZW1lbnQgfSBmcm9tICdkb211dGlscyc7XG5pbXBvcnQgdHlwZSB7IENoZWVyaW8gfSBmcm9tICcuLi9jaGVlcmlvLmpzJztcbmltcG9ydCB0eXBlIHsgQmFzaWNBY2NlcHRlZEVsZW1zLCBBY2NlcHRlZEVsZW1zIH0gZnJvbSAnLi4vdHlwZXMuanMnO1xuXG4vKipcbiAqIENyZWF0ZSBhbiBhcnJheSBvZiBub2RlcywgcmVjdXJzaW5nIGludG8gYXJyYXlzIGFuZCBwYXJzaW5nIHN0cmluZ3MgaWZcbiAqIG5lY2Vzc2FyeS5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQGNhdGVnb3J5IE1hbmlwdWxhdGlvblxuICogQHBhcmFtIGVsZW0gLSBFbGVtZW50cyB0byBtYWtlIGFuIGFycmF5IG9mLlxuICogQHBhcmFtIGNsb25lIC0gT3B0aW9uYWxseSBjbG9uZSBub2Rlcy5cbiAqIEByZXR1cm5zIFRoZSBhcnJheSBvZiBub2Rlcy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIF9tYWtlRG9tQXJyYXk8VCBleHRlbmRzIEFueU5vZGU+KFxuICB0aGlzOiBDaGVlcmlvPFQ+LFxuICBlbGVtPzogQmFzaWNBY2NlcHRlZEVsZW1zPEFueU5vZGU+IHwgQmFzaWNBY2NlcHRlZEVsZW1zPEFueU5vZGU+W10sXG4gIGNsb25lPzogYm9vbGVhbixcbik6IEFueU5vZGVbXSB7XG4gIGlmIChlbGVtID09IG51bGwpIHtcbiAgICByZXR1cm4gW107XG4gIH1cblxuICBpZiAodHlwZW9mIGVsZW0gPT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIHRoaXMuX3BhcnNlKGVsZW0sIHRoaXMub3B0aW9ucywgZmFsc2UsIG51bGwpLmNoaWxkcmVuLnNsaWNlKDApO1xuICB9XG5cbiAgaWYgKCdsZW5ndGgnIGluIGVsZW0pIHtcbiAgICBpZiAoZWxlbS5sZW5ndGggPT09IDEpIHtcbiAgICAgIHJldHVybiB0aGlzLl9tYWtlRG9tQXJyYXkoZWxlbVswXSwgY2xvbmUpO1xuICAgIH1cblxuICAgIGNvbnN0IHJlc3VsdDogQW55Tm9kZVtdID0gW107XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGVsZW0ubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IGVsID0gZWxlbVtpXTtcblxuICAgICAgaWYgKHR5cGVvZiBlbCA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgaWYgKGVsID09IG51bGwpIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghKCdsZW5ndGgnIGluIGVsKSkge1xuICAgICAgICAgIHJlc3VsdC5wdXNoKGNsb25lID8gY2xvbmVOb2RlKGVsLCB0cnVlKSA6IGVsKTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXN1bHQucHVzaCguLi50aGlzLl9tYWtlRG9tQXJyYXkoZWwsIGNsb25lKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIHJldHVybiBbY2xvbmUgPyBjbG9uZU5vZGUoZWxlbSwgdHJ1ZSkgOiBlbGVtXTtcbn1cblxuZnVuY3Rpb24gX2luc2VydChcbiAgY29uY2F0ZW5hdG9yOiAoXG4gICAgZG9tOiBBbnlOb2RlW10sXG4gICAgY2hpbGRyZW46IEFueU5vZGVbXSxcbiAgICBwYXJlbnQ6IFBhcmVudE5vZGUsXG4gICkgPT4gdm9pZCxcbikge1xuICByZXR1cm4gZnVuY3Rpb24gPFQgZXh0ZW5kcyBBbnlOb2RlPihcbiAgICB0aGlzOiBDaGVlcmlvPFQ+LFxuICAgIC4uLmVsZW1zOlxuICAgICAgfCBbXG4gICAgICAgICAgKFxuICAgICAgICAgICAgdGhpczogQW55Tm9kZSxcbiAgICAgICAgICAgIGk6IG51bWJlcixcbiAgICAgICAgICAgIGh0bWw6IHN0cmluZyxcbiAgICAgICAgICApID0+IEJhc2ljQWNjZXB0ZWRFbGVtczxBbnlOb2RlPixcbiAgICAgICAgXVxuICAgICAgfCBCYXNpY0FjY2VwdGVkRWxlbXM8QW55Tm9kZT5bXVxuICApIHtcbiAgICBjb25zdCBsYXN0SWR4ID0gdGhpcy5sZW5ndGggLSAxO1xuXG4gICAgcmV0dXJuIGRvbUVhY2godGhpcywgKGVsLCBpKSA9PiB7XG4gICAgICBpZiAoIWhhc0NoaWxkcmVuKGVsKSkgcmV0dXJuO1xuXG4gICAgICBjb25zdCBkb21TcmMgPVxuICAgICAgICB0eXBlb2YgZWxlbXNbMF0gPT09ICdmdW5jdGlvbidcbiAgICAgICAgICA/IGVsZW1zWzBdLmNhbGwoZWwsIGksIHRoaXMuX3JlbmRlcihlbC5jaGlsZHJlbikpXG4gICAgICAgICAgOiAoZWxlbXMgYXMgQmFzaWNBY2NlcHRlZEVsZW1zPEFueU5vZGU+W10pO1xuXG4gICAgICBjb25zdCBkb20gPSB0aGlzLl9tYWtlRG9tQXJyYXkoZG9tU3JjLCBpIDwgbGFzdElkeCk7XG4gICAgICBjb25jYXRlbmF0b3IoZG9tLCBlbC5jaGlsZHJlbiwgZWwpO1xuICAgIH0pO1xuICB9O1xufVxuXG4vKipcbiAqIE1vZGlmeSBhbiBhcnJheSBpbi1wbGFjZSwgcmVtb3Zpbmcgc29tZSBudW1iZXIgb2YgZWxlbWVudHMgYW5kIGFkZGluZyBuZXdcbiAqIGVsZW1lbnRzIGRpcmVjdGx5IGZvbGxvd2luZyB0aGVtLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAY2F0ZWdvcnkgTWFuaXB1bGF0aW9uXG4gKiBAcGFyYW0gYXJyYXkgLSBUYXJnZXQgYXJyYXkgdG8gc3BsaWNlLlxuICogQHBhcmFtIHNwbGljZUlkeCAtIEluZGV4IGF0IHdoaWNoIHRvIGJlZ2luIGNoYW5naW5nIHRoZSBhcnJheS5cbiAqIEBwYXJhbSBzcGxpY2VDb3VudCAtIE51bWJlciBvZiBlbGVtZW50cyB0byByZW1vdmUgZnJvbSB0aGUgYXJyYXkuXG4gKiBAcGFyYW0gbmV3RWxlbXMgLSBFbGVtZW50cyB0byBpbnNlcnQgaW50byB0aGUgYXJyYXkuXG4gKiBAcGFyYW0gcGFyZW50IC0gVGhlIHBhcmVudCBvZiB0aGUgbm9kZS5cbiAqIEByZXR1cm5zIFRoZSBzcGxpY2VkIGFycmF5LlxuICovXG5mdW5jdGlvbiB1bmlxdWVTcGxpY2UoXG4gIGFycmF5OiBBbnlOb2RlW10sXG4gIHNwbGljZUlkeDogbnVtYmVyLFxuICBzcGxpY2VDb3VudDogbnVtYmVyLFxuICBuZXdFbGVtczogQW55Tm9kZVtdLFxuICBwYXJlbnQ6IFBhcmVudE5vZGUsXG4pOiBBbnlOb2RlW10ge1xuICBjb25zdCBzcGxpY2VBcmdzOiBQYXJhbWV0ZXJzPHR5cGVvZiBBcnJheS5wcm90b3R5cGUuc3BsaWNlPiA9IFtcbiAgICBzcGxpY2VJZHgsXG4gICAgc3BsaWNlQ291bnQsXG4gICAgLi4ubmV3RWxlbXMsXG4gIF07XG4gIGNvbnN0IHByZXYgPSBzcGxpY2VJZHggPT09IDAgPyBudWxsIDogYXJyYXlbc3BsaWNlSWR4IC0gMV07XG4gIGNvbnN0IG5leHQgPVxuICAgIHNwbGljZUlkeCArIHNwbGljZUNvdW50ID49IGFycmF5Lmxlbmd0aFxuICAgICAgPyBudWxsXG4gICAgICA6IGFycmF5W3NwbGljZUlkeCArIHNwbGljZUNvdW50XTtcblxuICAvKlxuICAgKiBCZWZvcmUgc3BsaWNpbmcgaW4gbmV3IGVsZW1lbnRzLCBlbnN1cmUgdGhleSBkbyBub3QgYWxyZWFkeSBhcHBlYXIgaW4gdGhlXG4gICAqIGN1cnJlbnQgYXJyYXkuXG4gICAqL1xuICBmb3IgKGxldCBpZHggPSAwOyBpZHggPCBuZXdFbGVtcy5sZW5ndGg7ICsraWR4KSB7XG4gICAgY29uc3Qgbm9kZSA9IG5ld0VsZW1zW2lkeF07XG4gICAgY29uc3Qgb2xkUGFyZW50ID0gbm9kZS5wYXJlbnQ7XG5cbiAgICBpZiAob2xkUGFyZW50KSB7XG4gICAgICBjb25zdCBvbGRTaWJsaW5nczogQW55Tm9kZVtdID0gb2xkUGFyZW50LmNoaWxkcmVuO1xuICAgICAgY29uc3QgcHJldklkeCA9IG9sZFNpYmxpbmdzLmluZGV4T2Yobm9kZSk7XG5cbiAgICAgIGlmIChwcmV2SWR4ID4gLTEpIHtcbiAgICAgICAgb2xkUGFyZW50LmNoaWxkcmVuLnNwbGljZShwcmV2SWR4LCAxKTtcbiAgICAgICAgaWYgKHBhcmVudCA9PT0gb2xkUGFyZW50ICYmIHNwbGljZUlkeCA+IHByZXZJZHgpIHtcbiAgICAgICAgICBzcGxpY2VBcmdzWzBdLS07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBub2RlLnBhcmVudCA9IHBhcmVudDtcblxuICAgIGlmIChub2RlLnByZXYpIHtcbiAgICAgIG5vZGUucHJldi5uZXh0ID0gbm9kZS5uZXh0ID8/IG51bGw7XG4gICAgfVxuXG4gICAgaWYgKG5vZGUubmV4dCkge1xuICAgICAgbm9kZS5uZXh0LnByZXYgPSBub2RlLnByZXYgPz8gbnVsbDtcbiAgICB9XG5cbiAgICBub2RlLnByZXYgPSBpZHggPT09IDAgPyBwcmV2IDogbmV3RWxlbXNbaWR4IC0gMV07XG4gICAgbm9kZS5uZXh0ID0gaWR4ID09PSBuZXdFbGVtcy5sZW5ndGggLSAxID8gbmV4dCA6IG5ld0VsZW1zW2lkeCArIDFdO1xuICB9XG5cbiAgaWYgKHByZXYpIHtcbiAgICBwcmV2Lm5leHQgPSBuZXdFbGVtc1swXTtcbiAgfVxuICBpZiAobmV4dCkge1xuICAgIG5leHQucHJldiA9IG5ld0VsZW1zW25ld0VsZW1zLmxlbmd0aCAtIDFdO1xuICB9XG4gIHJldHVybiBhcnJheS5zcGxpY2UoLi4uc3BsaWNlQXJncyk7XG59XG5cbi8qKlxuICogSW5zZXJ0IGV2ZXJ5IGVsZW1lbnQgaW4gdGhlIHNldCBvZiBtYXRjaGVkIGVsZW1lbnRzIHRvIHRoZSBlbmQgb2YgdGhlIHRhcmdldC5cbiAqXG4gKiBAY2F0ZWdvcnkgTWFuaXB1bGF0aW9uXG4gKiBAZXhhbXBsZVxuICpcbiAqIGBgYGpzXG4gKiAkKCc8bGkgY2xhc3M9XCJwbHVtXCI+UGx1bTwvbGk+JykuYXBwZW5kVG8oJyNmcnVpdHMnKTtcbiAqICQuaHRtbCgpO1xuICogLy89PiAgPHVsIGlkPVwiZnJ1aXRzXCI+XG4gKiAvLyAgICAgIDxsaSBjbGFzcz1cImFwcGxlXCI+QXBwbGU8L2xpPlxuICogLy8gICAgICA8bGkgY2xhc3M9XCJvcmFuZ2VcIj5PcmFuZ2U8L2xpPlxuICogLy8gICAgICA8bGkgY2xhc3M9XCJwZWFyXCI+UGVhcjwvbGk+XG4gKiAvLyAgICAgIDxsaSBjbGFzcz1cInBsdW1cIj5QbHVtPC9saT5cbiAqIC8vICAgIDwvdWw+XG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0gdGFyZ2V0IC0gRWxlbWVudCB0byBhcHBlbmQgZWxlbWVudHMgdG8uXG4gKiBAcmV0dXJucyBUaGUgaW5zdGFuY2UgaXRzZWxmLlxuICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9hcGkuanF1ZXJ5LmNvbS9hcHBlbmRUby99XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhcHBlbmRUbzxUIGV4dGVuZHMgQW55Tm9kZT4oXG4gIHRoaXM6IENoZWVyaW88VD4sXG4gIHRhcmdldDogQmFzaWNBY2NlcHRlZEVsZW1zPEFueU5vZGU+LFxuKTogQ2hlZXJpbzxUPiB7XG4gIGNvbnN0IGFwcGVuZFRhcmdldCA9IGlzQ2hlZXJpbzxUPih0YXJnZXQpID8gdGFyZ2V0IDogdGhpcy5fbWFrZSh0YXJnZXQpO1xuXG4gIGFwcGVuZFRhcmdldC5hcHBlbmQodGhpcyk7XG5cbiAgcmV0dXJuIHRoaXM7XG59XG5cbi8qKlxuICogSW5zZXJ0IGV2ZXJ5IGVsZW1lbnQgaW4gdGhlIHNldCBvZiBtYXRjaGVkIGVsZW1lbnRzIHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlXG4gKiB0YXJnZXQuXG4gKlxuICogQGNhdGVnb3J5IE1hbmlwdWxhdGlvblxuICogQGV4YW1wbGVcbiAqXG4gKiBgYGBqc1xuICogJCgnPGxpIGNsYXNzPVwicGx1bVwiPlBsdW08L2xpPicpLnByZXBlbmRUbygnI2ZydWl0cycpO1xuICogJC5odG1sKCk7XG4gKiAvLz0+ICA8dWwgaWQ9XCJmcnVpdHNcIj5cbiAqIC8vICAgICAgPGxpIGNsYXNzPVwicGx1bVwiPlBsdW08L2xpPlxuICogLy8gICAgICA8bGkgY2xhc3M9XCJhcHBsZVwiPkFwcGxlPC9saT5cbiAqIC8vICAgICAgPGxpIGNsYXNzPVwib3JhbmdlXCI+T3JhbmdlPC9saT5cbiAqIC8vICAgICAgPGxpIGNsYXNzPVwicGVhclwiPlBlYXI8L2xpPlxuICogLy8gICAgPC91bD5cbiAqIGBgYFxuICpcbiAqIEBwYXJhbSB0YXJnZXQgLSBFbGVtZW50IHRvIHByZXBlbmQgZWxlbWVudHMgdG8uXG4gKiBAcmV0dXJucyBUaGUgaW5zdGFuY2UgaXRzZWxmLlxuICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9hcGkuanF1ZXJ5LmNvbS9wcmVwZW5kVG8vfVxuICovXG5leHBvcnQgZnVuY3Rpb24gcHJlcGVuZFRvPFQgZXh0ZW5kcyBBbnlOb2RlPihcbiAgdGhpczogQ2hlZXJpbzxUPixcbiAgdGFyZ2V0OiBCYXNpY0FjY2VwdGVkRWxlbXM8QW55Tm9kZT4sXG4pOiBDaGVlcmlvPFQ+IHtcbiAgY29uc3QgcHJlcGVuZFRhcmdldCA9IGlzQ2hlZXJpbzxUPih0YXJnZXQpID8gdGFyZ2V0IDogdGhpcy5fbWFrZSh0YXJnZXQpO1xuXG4gIHByZXBlbmRUYXJnZXQucHJlcGVuZCh0aGlzKTtcblxuICByZXR1cm4gdGhpcztcbn1cblxuLyoqXG4gKiBJbnNlcnRzIGNvbnRlbnQgYXMgdGhlIF9sYXN0XyBjaGlsZCBvZiBlYWNoIG9mIHRoZSBzZWxlY3RlZCBlbGVtZW50cy5cbiAqXG4gKiBAY2F0ZWdvcnkgTWFuaXB1bGF0aW9uXG4gKiBAZXhhbXBsZVxuICpcbiAqIGBgYGpzXG4gKiAkKCd1bCcpLmFwcGVuZCgnPGxpIGNsYXNzPVwicGx1bVwiPlBsdW08L2xpPicpO1xuICogJC5odG1sKCk7XG4gKiAvLz0+ICA8dWwgaWQ9XCJmcnVpdHNcIj5cbiAqIC8vICAgICAgPGxpIGNsYXNzPVwiYXBwbGVcIj5BcHBsZTwvbGk+XG4gKiAvLyAgICAgIDxsaSBjbGFzcz1cIm9yYW5nZVwiPk9yYW5nZTwvbGk+XG4gKiAvLyAgICAgIDxsaSBjbGFzcz1cInBlYXJcIj5QZWFyPC9saT5cbiAqIC8vICAgICAgPGxpIGNsYXNzPVwicGx1bVwiPlBsdW08L2xpPlxuICogLy8gICAgPC91bD5cbiAqIGBgYFxuICpcbiAqIEBzZWUge0BsaW5rIGh0dHBzOi8vYXBpLmpxdWVyeS5jb20vYXBwZW5kL31cbiAqL1xuZXhwb3J0IGNvbnN0IGFwcGVuZDogPFQgZXh0ZW5kcyBBbnlOb2RlPihcbiAgdGhpczogQ2hlZXJpbzxUPixcbiAgLi4uZWxlbXM6XG4gICAgfCBbKHRoaXM6IEFueU5vZGUsIGk6IG51bWJlciwgaHRtbDogc3RyaW5nKSA9PiBCYXNpY0FjY2VwdGVkRWxlbXM8QW55Tm9kZT5dXG4gICAgfCBCYXNpY0FjY2VwdGVkRWxlbXM8QW55Tm9kZT5bXVxuKSA9PiBDaGVlcmlvPFQ+ID0gX2luc2VydCgoZG9tLCBjaGlsZHJlbiwgcGFyZW50KSA9PiB7XG4gIHVuaXF1ZVNwbGljZShjaGlsZHJlbiwgY2hpbGRyZW4ubGVuZ3RoLCAwLCBkb20sIHBhcmVudCk7XG59KTtcblxuLyoqXG4gKiBJbnNlcnRzIGNvbnRlbnQgYXMgdGhlIF9maXJzdF8gY2hpbGQgb2YgZWFjaCBvZiB0aGUgc2VsZWN0ZWQgZWxlbWVudHMuXG4gKlxuICogQGNhdGVnb3J5IE1hbmlwdWxhdGlvblxuICogQGV4YW1wbGVcbiAqXG4gKiBgYGBqc1xuICogJCgndWwnKS5wcmVwZW5kKCc8bGkgY2xhc3M9XCJwbHVtXCI+UGx1bTwvbGk+Jyk7XG4gKiAkLmh0bWwoKTtcbiAqIC8vPT4gIDx1bCBpZD1cImZydWl0c1wiPlxuICogLy8gICAgICA8bGkgY2xhc3M9XCJwbHVtXCI+UGx1bTwvbGk+XG4gKiAvLyAgICAgIDxsaSBjbGFzcz1cImFwcGxlXCI+QXBwbGU8L2xpPlxuICogLy8gICAgICA8bGkgY2xhc3M9XCJvcmFuZ2VcIj5PcmFuZ2U8L2xpPlxuICogLy8gICAgICA8bGkgY2xhc3M9XCJwZWFyXCI+UGVhcjwvbGk+XG4gKiAvLyAgICA8L3VsPlxuICogYGBgXG4gKlxuICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9hcGkuanF1ZXJ5LmNvbS9wcmVwZW5kL31cbiAqL1xuZXhwb3J0IGNvbnN0IHByZXBlbmQ6IDxUIGV4dGVuZHMgQW55Tm9kZT4oXG4gIHRoaXM6IENoZWVyaW88VD4sXG4gIC4uLmVsZW1zOlxuICAgIHwgWyh0aGlzOiBBbnlOb2RlLCBpOiBudW1iZXIsIGh0bWw6IHN0cmluZykgPT4gQmFzaWNBY2NlcHRlZEVsZW1zPEFueU5vZGU+XVxuICAgIHwgQmFzaWNBY2NlcHRlZEVsZW1zPEFueU5vZGU+W11cbikgPT4gQ2hlZXJpbzxUPiA9IF9pbnNlcnQoKGRvbSwgY2hpbGRyZW4sIHBhcmVudCkgPT4ge1xuICB1bmlxdWVTcGxpY2UoY2hpbGRyZW4sIDAsIDAsIGRvbSwgcGFyZW50KTtcbn0pO1xuXG5mdW5jdGlvbiBfd3JhcChcbiAgaW5zZXJ0OiAoXG4gICAgZWw6IEFueU5vZGUsXG4gICAgZWxJbnNlcnRMb2NhdGlvbjogUGFyZW50Tm9kZSxcbiAgICB3cmFwcGVyRG9tOiBQYXJlbnROb2RlW10sXG4gICkgPT4gdm9pZCxcbikge1xuICByZXR1cm4gZnVuY3Rpb24gPFQgZXh0ZW5kcyBBbnlOb2RlPihcbiAgICB0aGlzOiBDaGVlcmlvPFQ+LFxuICAgIHdyYXBwZXI6IEFjY2VwdGVkRWxlbXM8QW55Tm9kZT4sXG4gICkge1xuICAgIGNvbnN0IGxhc3RJZHggPSB0aGlzLmxlbmd0aCAtIDE7XG4gICAgY29uc3QgbGFzdFBhcmVudCA9IHRoaXMucGFyZW50cygpLmxhc3QoKTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgZWwgPSB0aGlzW2ldO1xuXG4gICAgICBjb25zdCB3cmFwID1cbiAgICAgICAgdHlwZW9mIHdyYXBwZXIgPT09ICdmdW5jdGlvbidcbiAgICAgICAgICA/IHdyYXBwZXIuY2FsbChlbCwgaSwgZWwpXG4gICAgICAgICAgOiB0eXBlb2Ygd3JhcHBlciA9PT0gJ3N0cmluZycgJiYgIWlzSHRtbCh3cmFwcGVyKVxuICAgICAgICAgICAgPyBsYXN0UGFyZW50LmZpbmQod3JhcHBlcikuY2xvbmUoKVxuICAgICAgICAgICAgOiB3cmFwcGVyO1xuXG4gICAgICBjb25zdCBbd3JhcHBlckRvbV0gPSB0aGlzLl9tYWtlRG9tQXJyYXkod3JhcCwgaSA8IGxhc3RJZHgpO1xuXG4gICAgICBpZiAoIXdyYXBwZXJEb20gfHwgIWhhc0NoaWxkcmVuKHdyYXBwZXJEb20pKSBjb250aW51ZTtcblxuICAgICAgbGV0IGVsSW5zZXJ0TG9jYXRpb24gPSB3cmFwcGVyRG9tO1xuXG4gICAgICAvKlxuICAgICAgICogRmluZCB0aGUgZGVlcGVzdCBjaGlsZC4gT25seSBjb25zaWRlciB0aGUgZmlyc3QgdGFnIGNoaWxkIG9mIGVhY2ggbm9kZVxuICAgICAgICogKGlnbm9yZSB0ZXh0KTsgc3RvcCBpZiBubyBjaGlsZHJlbiBhcmUgZm91bmQuXG4gICAgICAgKi9cbiAgICAgIGxldCBqID0gMDtcblxuICAgICAgd2hpbGUgKGogPCBlbEluc2VydExvY2F0aW9uLmNoaWxkcmVuLmxlbmd0aCkge1xuICAgICAgICBjb25zdCBjaGlsZCA9IGVsSW5zZXJ0TG9jYXRpb24uY2hpbGRyZW5bal07XG4gICAgICAgIGlmIChpc1RhZyhjaGlsZCkpIHtcbiAgICAgICAgICBlbEluc2VydExvY2F0aW9uID0gY2hpbGQ7XG4gICAgICAgICAgaiA9IDA7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaisrO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGluc2VydChlbCwgZWxJbnNlcnRMb2NhdGlvbiwgW3dyYXBwZXJEb21dKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfTtcbn1cblxuLyoqXG4gKiBUaGUgLndyYXAoKSBmdW5jdGlvbiBjYW4gdGFrZSBhbnkgc3RyaW5nIG9yIG9iamVjdCB0aGF0IGNvdWxkIGJlIHBhc3NlZCB0b1xuICogdGhlICQoKSBmYWN0b3J5IGZ1bmN0aW9uIHRvIHNwZWNpZnkgYSBET00gc3RydWN0dXJlLiBUaGlzIHN0cnVjdHVyZSBtYXkgYmVcbiAqIG5lc3RlZCBzZXZlcmFsIGxldmVscyBkZWVwLCBidXQgc2hvdWxkIGNvbnRhaW4gb25seSBvbmUgaW5tb3N0IGVsZW1lbnQuIEFcbiAqIGNvcHkgb2YgdGhpcyBzdHJ1Y3R1cmUgd2lsbCBiZSB3cmFwcGVkIGFyb3VuZCBlYWNoIG9mIHRoZSBlbGVtZW50cyBpbiB0aGUgc2V0XG4gKiBvZiBtYXRjaGVkIGVsZW1lbnRzLiBUaGlzIG1ldGhvZCByZXR1cm5zIHRoZSBvcmlnaW5hbCBzZXQgb2YgZWxlbWVudHMgZm9yXG4gKiBjaGFpbmluZyBwdXJwb3Nlcy5cbiAqXG4gKiBAY2F0ZWdvcnkgTWFuaXB1bGF0aW9uXG4gKiBAZXhhbXBsZVxuICpcbiAqIGBgYGpzXG4gKiBjb25zdCByZWRGcnVpdCA9ICQoJzxkaXYgY2xhc3M9XCJyZWQtZnJ1aXRcIj48L2Rpdj4nKTtcbiAqICQoJy5hcHBsZScpLndyYXAocmVkRnJ1aXQpO1xuICpcbiAqIC8vPT4gPHVsIGlkPVwiZnJ1aXRzXCI+XG4gKiAvLyAgICAgPGRpdiBjbGFzcz1cInJlZC1mcnVpdFwiPlxuICogLy8gICAgICA8bGkgY2xhc3M9XCJhcHBsZVwiPkFwcGxlPC9saT5cbiAqIC8vICAgICA8L2Rpdj5cbiAqIC8vICAgICA8bGkgY2xhc3M9XCJvcmFuZ2VcIj5PcmFuZ2U8L2xpPlxuICogLy8gICAgIDxsaSBjbGFzcz1cInBsdW1cIj5QbHVtPC9saT5cbiAqIC8vICAgPC91bD5cbiAqXG4gKiBjb25zdCBoZWFsdGh5ID0gJCgnPGRpdiBjbGFzcz1cImhlYWx0aHlcIj48L2Rpdj4nKTtcbiAqICQoJ2xpJykud3JhcChoZWFsdGh5KTtcbiAqXG4gKiAvLz0+IDx1bCBpZD1cImZydWl0c1wiPlxuICogLy8gICAgIDxkaXYgY2xhc3M9XCJoZWFsdGh5XCI+XG4gKiAvLyAgICAgICA8bGkgY2xhc3M9XCJhcHBsZVwiPkFwcGxlPC9saT5cbiAqIC8vICAgICA8L2Rpdj5cbiAqIC8vICAgICA8ZGl2IGNsYXNzPVwiaGVhbHRoeVwiPlxuICogLy8gICAgICAgPGxpIGNsYXNzPVwib3JhbmdlXCI+T3JhbmdlPC9saT5cbiAqIC8vICAgICA8L2Rpdj5cbiAqIC8vICAgICA8ZGl2IGNsYXNzPVwiaGVhbHRoeVwiPlxuICogLy8gICAgICAgIDxsaSBjbGFzcz1cInBsdW1cIj5QbHVtPC9saT5cbiAqIC8vICAgICA8L2Rpdj5cbiAqIC8vICAgPC91bD5cbiAqIGBgYFxuICpcbiAqIEBwYXJhbSB3cmFwcGVyIC0gVGhlIERPTSBzdHJ1Y3R1cmUgdG8gd3JhcCBhcm91bmQgZWFjaCBlbGVtZW50IGluIHRoZVxuICogICBzZWxlY3Rpb24uXG4gKiBAc2VlIHtAbGluayBodHRwczovL2FwaS5qcXVlcnkuY29tL3dyYXAvfVxuICovXG5leHBvcnQgY29uc3Qgd3JhcDogPFQgZXh0ZW5kcyBBbnlOb2RlPihcbiAgdGhpczogQ2hlZXJpbzxUPixcbiAgd3JhcHBlcjogQWNjZXB0ZWRFbGVtczxBbnlOb2RlPixcbikgPT4gQ2hlZXJpbzxUPiA9IF93cmFwKChlbCwgZWxJbnNlcnRMb2NhdGlvbiwgd3JhcHBlckRvbSkgPT4ge1xuICBjb25zdCB7IHBhcmVudCB9ID0gZWw7XG5cbiAgaWYgKCFwYXJlbnQpIHJldHVybjtcblxuICBjb25zdCBzaWJsaW5nczogQW55Tm9kZVtdID0gcGFyZW50LmNoaWxkcmVuO1xuICBjb25zdCBpbmRleCA9IHNpYmxpbmdzLmluZGV4T2YoZWwpO1xuXG4gIHVwZGF0ZURPTShbZWxdLCBlbEluc2VydExvY2F0aW9uKTtcbiAgLypcbiAgICogVGhlIHByZXZpb3VzIG9wZXJhdGlvbiByZW1vdmVkIHRoZSBjdXJyZW50IGVsZW1lbnQgZnJvbSB0aGUgYHNpYmxpbmdzYFxuICAgKiBhcnJheSwgc28gdGhlIGBkb21gIGFycmF5IGNhbiBiZSBpbnNlcnRlZCB3aXRob3V0IHJlbW92aW5nIGFueVxuICAgKiBhZGRpdGlvbmFsIGVsZW1lbnRzLlxuICAgKi9cbiAgdW5pcXVlU3BsaWNlKHNpYmxpbmdzLCBpbmRleCwgMCwgd3JhcHBlckRvbSwgcGFyZW50KTtcbn0pO1xuXG4vKipcbiAqIFRoZSAud3JhcElubmVyKCkgZnVuY3Rpb24gY2FuIHRha2UgYW55IHN0cmluZyBvciBvYmplY3QgdGhhdCBjb3VsZCBiZSBwYXNzZWRcbiAqIHRvIHRoZSAkKCkgZmFjdG9yeSBmdW5jdGlvbiB0byBzcGVjaWZ5IGEgRE9NIHN0cnVjdHVyZS4gVGhpcyBzdHJ1Y3R1cmUgbWF5IGJlXG4gKiBuZXN0ZWQgc2V2ZXJhbCBsZXZlbHMgZGVlcCwgYnV0IHNob3VsZCBjb250YWluIG9ubHkgb25lIGlubW9zdCBlbGVtZW50LiBUaGVcbiAqIHN0cnVjdHVyZSB3aWxsIGJlIHdyYXBwZWQgYXJvdW5kIHRoZSBjb250ZW50IG9mIGVhY2ggb2YgdGhlIGVsZW1lbnRzIGluIHRoZVxuICogc2V0IG9mIG1hdGNoZWQgZWxlbWVudHMuXG4gKlxuICogQGNhdGVnb3J5IE1hbmlwdWxhdGlvblxuICogQGV4YW1wbGVcbiAqXG4gKiBgYGBqc1xuICogY29uc3QgcmVkRnJ1aXQgPSAkKCc8ZGl2IGNsYXNzPVwicmVkLWZydWl0XCI+PC9kaXY+Jyk7XG4gKiAkKCcuYXBwbGUnKS53cmFwSW5uZXIocmVkRnJ1aXQpO1xuICpcbiAqIC8vPT4gPHVsIGlkPVwiZnJ1aXRzXCI+XG4gKiAvLyAgICAgPGxpIGNsYXNzPVwiYXBwbGVcIj5cbiAqIC8vICAgICAgIDxkaXYgY2xhc3M9XCJyZWQtZnJ1aXRcIj5BcHBsZTwvZGl2PlxuICogLy8gICAgIDwvbGk+XG4gKiAvLyAgICAgPGxpIGNsYXNzPVwib3JhbmdlXCI+T3JhbmdlPC9saT5cbiAqIC8vICAgICA8bGkgY2xhc3M9XCJwZWFyXCI+UGVhcjwvbGk+XG4gKiAvLyAgIDwvdWw+XG4gKlxuICogY29uc3QgaGVhbHRoeSA9ICQoJzxkaXYgY2xhc3M9XCJoZWFsdGh5XCI+PC9kaXY+Jyk7XG4gKiAkKCdsaScpLndyYXBJbm5lcihoZWFsdGh5KTtcbiAqXG4gKiAvLz0+IDx1bCBpZD1cImZydWl0c1wiPlxuICogLy8gICAgIDxsaSBjbGFzcz1cImFwcGxlXCI+XG4gKiAvLyAgICAgICA8ZGl2IGNsYXNzPVwiaGVhbHRoeVwiPkFwcGxlPC9kaXY+XG4gKiAvLyAgICAgPC9saT5cbiAqIC8vICAgICA8bGkgY2xhc3M9XCJvcmFuZ2VcIj5cbiAqIC8vICAgICAgIDxkaXYgY2xhc3M9XCJoZWFsdGh5XCI+T3JhbmdlPC9kaXY+XG4gKiAvLyAgICAgPC9saT5cbiAqIC8vICAgICA8bGkgY2xhc3M9XCJwZWFyXCI+XG4gKiAvLyAgICAgICA8ZGl2IGNsYXNzPVwiaGVhbHRoeVwiPlBlYXI8L2Rpdj5cbiAqIC8vICAgICA8L2xpPlxuICogLy8gICA8L3VsPlxuICogYGBgXG4gKlxuICogQHBhcmFtIHdyYXBwZXIgLSBUaGUgRE9NIHN0cnVjdHVyZSB0byB3cmFwIGFyb3VuZCB0aGUgY29udGVudCBvZiBlYWNoIGVsZW1lbnRcbiAqICAgaW4gdGhlIHNlbGVjdGlvbi5cbiAqIEByZXR1cm5zIFRoZSBpbnN0YW5jZSBpdHNlbGYsIGZvciBjaGFpbmluZy5cbiAqIEBzZWUge0BsaW5rIGh0dHBzOi8vYXBpLmpxdWVyeS5jb20vd3JhcElubmVyL31cbiAqL1xuZXhwb3J0IGNvbnN0IHdyYXBJbm5lcjogPFQgZXh0ZW5kcyBBbnlOb2RlPihcbiAgdGhpczogQ2hlZXJpbzxUPixcbiAgd3JhcHBlcjogQWNjZXB0ZWRFbGVtczxBbnlOb2RlPixcbikgPT4gQ2hlZXJpbzxUPiA9IF93cmFwKChlbCwgZWxJbnNlcnRMb2NhdGlvbiwgd3JhcHBlckRvbSkgPT4ge1xuICBpZiAoIWhhc0NoaWxkcmVuKGVsKSkgcmV0dXJuO1xuICB1cGRhdGVET00oZWwuY2hpbGRyZW4sIGVsSW5zZXJ0TG9jYXRpb24pO1xuICB1cGRhdGVET00od3JhcHBlckRvbSwgZWwpO1xufSk7XG5cbi8qKlxuICogVGhlIC51bndyYXAoKSBmdW5jdGlvbiwgcmVtb3ZlcyB0aGUgcGFyZW50cyBvZiB0aGUgc2V0IG9mIG1hdGNoZWQgZWxlbWVudHNcbiAqIGZyb20gdGhlIERPTSwgbGVhdmluZyB0aGUgbWF0Y2hlZCBlbGVtZW50cyBpbiB0aGVpciBwbGFjZS5cbiAqXG4gKiBAY2F0ZWdvcnkgTWFuaXB1bGF0aW9uXG4gKiBAZXhhbXBsZSA8Y2FwdGlvbj53aXRob3V0IHNlbGVjdG9yPC9jYXB0aW9uPlxuICpcbiAqIGBgYGpzXG4gKiBjb25zdCAkID0gY2hlZXJpby5sb2FkKFxuICogICAnPGRpdiBpZD10ZXN0PlxcbiAgPGRpdj48cD5IZWxsbzwvcD48L2Rpdj5cXG4gIDxkaXY+PHA+V29ybGQ8L3A+PC9kaXY+XFxuPC9kaXY+JyxcbiAqICk7XG4gKiAkKCcjdGVzdCBwJykudW53cmFwKCk7XG4gKlxuICogLy89PiA8ZGl2IGlkPXRlc3Q+XG4gKiAvLyAgICAgPHA+SGVsbG88L3A+XG4gKiAvLyAgICAgPHA+V29ybGQ8L3A+XG4gKiAvLyAgIDwvZGl2PlxuICogYGBgXG4gKlxuICogQGV4YW1wbGUgPGNhcHRpb24+d2l0aCBzZWxlY3RvcjwvY2FwdGlvbj5cbiAqXG4gKiBgYGBqc1xuICogY29uc3QgJCA9IGNoZWVyaW8ubG9hZChcbiAqICAgJzxkaXYgaWQ9dGVzdD5cXG4gIDxwPkhlbGxvPC9wPlxcbiAgPGI+PHA+V29ybGQ8L3A+PC9iPlxcbjwvZGl2PicsXG4gKiApO1xuICogJCgnI3Rlc3QgcCcpLnVud3JhcCgnYicpO1xuICpcbiAqIC8vPT4gPGRpdiBpZD10ZXN0PlxuICogLy8gICAgIDxwPkhlbGxvPC9wPlxuICogLy8gICAgIDxwPldvcmxkPC9wPlxuICogLy8gICA8L2Rpdj5cbiAqIGBgYFxuICpcbiAqIEBwYXJhbSBzZWxlY3RvciAtIEEgc2VsZWN0b3IgdG8gY2hlY2sgdGhlIHBhcmVudCBlbGVtZW50IGFnYWluc3QuIElmIGFuXG4gKiAgIGVsZW1lbnQncyBwYXJlbnQgZG9lcyBub3QgbWF0Y2ggdGhlIHNlbGVjdG9yLCB0aGUgZWxlbWVudCB3b24ndCBiZVxuICogICB1bndyYXBwZWQuXG4gKiBAcmV0dXJucyBUaGUgaW5zdGFuY2UgaXRzZWxmLCBmb3IgY2hhaW5pbmcuXG4gKiBAc2VlIHtAbGluayBodHRwczovL2FwaS5qcXVlcnkuY29tL3Vud3JhcC99XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB1bndyYXA8VCBleHRlbmRzIEFueU5vZGU+KFxuICB0aGlzOiBDaGVlcmlvPFQ+LFxuICBzZWxlY3Rvcj86IHN0cmluZyxcbik6IENoZWVyaW88VD4ge1xuICB0aGlzLnBhcmVudChzZWxlY3RvcilcbiAgICAubm90KCdib2R5JylcbiAgICAuZWFjaCgoXywgZWwpID0+IHtcbiAgICAgIHRoaXMuX21ha2UoZWwpLnJlcGxhY2VXaXRoKGVsLmNoaWxkcmVuKTtcbiAgICB9KTtcbiAgcmV0dXJuIHRoaXM7XG59XG5cbi8qKlxuICogVGhlIC53cmFwQWxsKCkgZnVuY3Rpb24gY2FuIHRha2UgYW55IHN0cmluZyBvciBvYmplY3QgdGhhdCBjb3VsZCBiZSBwYXNzZWQgdG9cbiAqIHRoZSAkKCkgZnVuY3Rpb24gdG8gc3BlY2lmeSBhIERPTSBzdHJ1Y3R1cmUuIFRoaXMgc3RydWN0dXJlIG1heSBiZSBuZXN0ZWRcbiAqIHNldmVyYWwgbGV2ZWxzIGRlZXAsIGJ1dCBzaG91bGQgY29udGFpbiBvbmx5IG9uZSBpbm1vc3QgZWxlbWVudC4gVGhlXG4gKiBzdHJ1Y3R1cmUgd2lsbCBiZSB3cmFwcGVkIGFyb3VuZCBhbGwgb2YgdGhlIGVsZW1lbnRzIGluIHRoZSBzZXQgb2YgbWF0Y2hlZFxuICogZWxlbWVudHMsIGFzIGEgc2luZ2xlIGdyb3VwLlxuICpcbiAqIEBjYXRlZ29yeSBNYW5pcHVsYXRpb25cbiAqIEBleGFtcGxlIDxjYXB0aW9uPldpdGggbWFya3VwIHBhc3NlZCB0byBgd3JhcEFsbGA8L2NhcHRpb24+XG4gKlxuICogYGBganNcbiAqIGNvbnN0ICQgPSBjaGVlcmlvLmxvYWQoXG4gKiAgICc8ZGl2IGNsYXNzPVwiY29udGFpbmVyXCI+PGRpdiBjbGFzcz1cImlubmVyXCI+Rmlyc3Q8L2Rpdj48ZGl2IGNsYXNzPVwiaW5uZXJcIj5TZWNvbmQ8L2Rpdj48L2Rpdj4nLFxuICogKTtcbiAqICQoJy5pbm5lcicpLndyYXBBbGwoXCI8ZGl2IGNsYXNzPSduZXcnPjwvZGl2PlwiKTtcbiAqXG4gKiAvLz0+IDxkaXYgY2xhc3M9XCJjb250YWluZXJcIj5cbiAqIC8vICAgICA8ZGl2IGNsYXNzPSduZXcnPlxuICogLy8gICAgICAgPGRpdiBjbGFzcz1cImlubmVyXCI+Rmlyc3Q8L2Rpdj5cbiAqIC8vICAgICAgIDxkaXYgY2xhc3M9XCJpbm5lclwiPlNlY29uZDwvZGl2PlxuICogLy8gICAgIDwvZGl2PlxuICogLy8gICA8L2Rpdj5cbiAqIGBgYFxuICpcbiAqIEBleGFtcGxlIDxjYXB0aW9uPldpdGggYW4gZXhpc3RpbmcgY2hlZXJpbyBpbnN0YW5jZTwvY2FwdGlvbj5cbiAqXG4gKiBgYGBqc1xuICogY29uc3QgJCA9IGNoZWVyaW8ubG9hZChcbiAqICAgJzxzcGFuPlNwYW4gMTwvc3Bhbj48c3Ryb25nPlN0cm9uZzwvc3Ryb25nPjxzcGFuPlNwYW4gMjwvc3Bhbj4nLFxuICogKTtcbiAqIGNvbnN0IHdyYXAgPSAkKCc8ZGl2PjxwPjxlbT48Yj48L2I+PC9lbT48L3A+PC9kaXY+Jyk7XG4gKiAkKCdzcGFuJykud3JhcEFsbCh3cmFwKTtcbiAqXG4gKiAvLz0+IDxkaXY+XG4gKiAvLyAgICAgPHA+XG4gKiAvLyAgICAgICA8ZW0+XG4gKiAvLyAgICAgICAgIDxiPlxuICogLy8gICAgICAgICAgIDxzcGFuPlNwYW4gMTwvc3Bhbj5cbiAqIC8vICAgICAgICAgICA8c3Bhbj5TcGFuIDI8L3NwYW4+XG4gKiAvLyAgICAgICAgIDwvYj5cbiAqIC8vICAgICAgIDwvZW0+XG4gKiAvLyAgICAgPC9wPlxuICogLy8gICA8L2Rpdj5cbiAqIC8vICAgPHN0cm9uZz5TdHJvbmc8L3N0cm9uZz5cbiAqIGBgYFxuICpcbiAqIEBwYXJhbSB3cmFwcGVyIC0gVGhlIERPTSBzdHJ1Y3R1cmUgdG8gd3JhcCBhcm91bmQgYWxsIG1hdGNoZWQgZWxlbWVudHMgaW4gdGhlXG4gKiAgIHNlbGVjdGlvbi5cbiAqIEByZXR1cm5zIFRoZSBpbnN0YW5jZSBpdHNlbGYuXG4gKiBAc2VlIHtAbGluayBodHRwczovL2FwaS5qcXVlcnkuY29tL3dyYXBBbGwvfVxuICovXG5leHBvcnQgZnVuY3Rpb24gd3JhcEFsbDxUIGV4dGVuZHMgQW55Tm9kZT4oXG4gIHRoaXM6IENoZWVyaW88VD4sXG4gIHdyYXBwZXI6IEFjY2VwdGVkRWxlbXM8VD4sXG4pOiBDaGVlcmlvPFQ+IHtcbiAgY29uc3QgZWwgPSB0aGlzWzBdO1xuICBpZiAoZWwpIHtcbiAgICBjb25zdCB3cmFwOiBDaGVlcmlvPEFueU5vZGU+ID0gdGhpcy5fbWFrZShcbiAgICAgIHR5cGVvZiB3cmFwcGVyID09PSAnZnVuY3Rpb24nID8gd3JhcHBlci5jYWxsKGVsLCAwLCBlbCkgOiB3cmFwcGVyLFxuICAgICkuaW5zZXJ0QmVmb3JlKGVsKTtcblxuICAgIC8vIElmIGh0bWwgaXMgZ2l2ZW4gYXMgd3JhcHBlciwgd3JhcCBtYXkgY29udGFpbiB0ZXh0IGVsZW1lbnRzXG4gICAgbGV0IGVsSW5zZXJ0TG9jYXRpb246IEVsZW1lbnQgfCB1bmRlZmluZWQ7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHdyYXAubGVuZ3RoOyBpKyspIHtcbiAgICAgIGlmICh3cmFwW2ldLnR5cGUgPT09ICd0YWcnKSBlbEluc2VydExvY2F0aW9uID0gd3JhcFtpXSBhcyBFbGVtZW50O1xuICAgIH1cblxuICAgIGxldCBqID0gMDtcblxuICAgIC8qXG4gICAgICogRmluZCB0aGUgZGVlcGVzdCBjaGlsZC4gT25seSBjb25zaWRlciB0aGUgZmlyc3QgdGFnIGNoaWxkIG9mIGVhY2ggbm9kZVxuICAgICAqIChpZ25vcmUgdGV4dCk7IHN0b3AgaWYgbm8gY2hpbGRyZW4gYXJlIGZvdW5kLlxuICAgICAqL1xuICAgIHdoaWxlIChlbEluc2VydExvY2F0aW9uICYmIGogPCBlbEluc2VydExvY2F0aW9uLmNoaWxkcmVuLmxlbmd0aCkge1xuICAgICAgY29uc3QgY2hpbGQgPSBlbEluc2VydExvY2F0aW9uLmNoaWxkcmVuW2pdO1xuICAgICAgaWYgKGNoaWxkLnR5cGUgPT09ICd0YWcnKSB7XG4gICAgICAgIGVsSW5zZXJ0TG9jYXRpb24gPSBjaGlsZCBhcyBFbGVtZW50O1xuICAgICAgICBqID0gMDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGorKztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoZWxJbnNlcnRMb2NhdGlvbikgdGhpcy5fbWFrZShlbEluc2VydExvY2F0aW9uKS5hcHBlbmQodGhpcyk7XG4gIH1cbiAgcmV0dXJuIHRoaXM7XG59XG5cbi8qKlxuICogSW5zZXJ0IGNvbnRlbnQgbmV4dCB0byBlYWNoIGVsZW1lbnQgaW4gdGhlIHNldCBvZiBtYXRjaGVkIGVsZW1lbnRzLlxuICpcbiAqIEBjYXRlZ29yeSBNYW5pcHVsYXRpb25cbiAqIEBleGFtcGxlXG4gKlxuICogYGBganNcbiAqICQoJy5hcHBsZScpLmFmdGVyKCc8bGkgY2xhc3M9XCJwbHVtXCI+UGx1bTwvbGk+Jyk7XG4gKiAkLmh0bWwoKTtcbiAqIC8vPT4gIDx1bCBpZD1cImZydWl0c1wiPlxuICogLy8gICAgICA8bGkgY2xhc3M9XCJhcHBsZVwiPkFwcGxlPC9saT5cbiAqIC8vICAgICAgPGxpIGNsYXNzPVwicGx1bVwiPlBsdW08L2xpPlxuICogLy8gICAgICA8bGkgY2xhc3M9XCJvcmFuZ2VcIj5PcmFuZ2U8L2xpPlxuICogLy8gICAgICA8bGkgY2xhc3M9XCJwZWFyXCI+UGVhcjwvbGk+XG4gKiAvLyAgICA8L3VsPlxuICogYGBgXG4gKlxuICogQHBhcmFtIGVsZW1zIC0gSFRNTCBzdHJpbmcsIERPTSBlbGVtZW50LCBhcnJheSBvZiBET00gZWxlbWVudHMgb3IgQ2hlZXJpbyB0b1xuICogICBpbnNlcnQgYWZ0ZXIgZWFjaCBlbGVtZW50IGluIHRoZSBzZXQgb2YgbWF0Y2hlZCBlbGVtZW50cy5cbiAqIEByZXR1cm5zIFRoZSBpbnN0YW5jZSBpdHNlbGYuXG4gKiBAc2VlIHtAbGluayBodHRwczovL2FwaS5qcXVlcnkuY29tL2FmdGVyL31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFmdGVyPFQgZXh0ZW5kcyBBbnlOb2RlPihcbiAgdGhpczogQ2hlZXJpbzxUPixcbiAgLi4uZWxlbXM6XG4gICAgfCBbKHRoaXM6IEFueU5vZGUsIGk6IG51bWJlciwgaHRtbDogc3RyaW5nKSA9PiBCYXNpY0FjY2VwdGVkRWxlbXM8QW55Tm9kZT5dXG4gICAgfCBCYXNpY0FjY2VwdGVkRWxlbXM8QW55Tm9kZT5bXVxuKTogQ2hlZXJpbzxUPiB7XG4gIGNvbnN0IGxhc3RJZHggPSB0aGlzLmxlbmd0aCAtIDE7XG5cbiAgcmV0dXJuIGRvbUVhY2godGhpcywgKGVsLCBpKSA9PiB7XG4gICAgaWYgKCFoYXNDaGlsZHJlbihlbCkgfHwgIWVsLnBhcmVudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHNpYmxpbmdzOiBBbnlOb2RlW10gPSBlbC5wYXJlbnQuY2hpbGRyZW47XG4gICAgY29uc3QgaW5kZXggPSBzaWJsaW5ncy5pbmRleE9mKGVsKTtcblxuICAgIC8vIElmIG5vdCBmb3VuZCwgbW92ZSBvblxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gICAgaWYgKGluZGV4IDwgMCkgcmV0dXJuO1xuXG4gICAgY29uc3QgZG9tU3JjID1cbiAgICAgIHR5cGVvZiBlbGVtc1swXSA9PT0gJ2Z1bmN0aW9uJ1xuICAgICAgICA/IGVsZW1zWzBdLmNhbGwoZWwsIGksIHRoaXMuX3JlbmRlcihlbC5jaGlsZHJlbikpXG4gICAgICAgIDogKGVsZW1zIGFzIEJhc2ljQWNjZXB0ZWRFbGVtczxBbnlOb2RlPltdKTtcblxuICAgIGNvbnN0IGRvbSA9IHRoaXMuX21ha2VEb21BcnJheShkb21TcmMsIGkgPCBsYXN0SWR4KTtcblxuICAgIC8vIEFkZCBlbGVtZW50IGFmdGVyIGB0aGlzYCBlbGVtZW50XG4gICAgdW5pcXVlU3BsaWNlKHNpYmxpbmdzLCBpbmRleCArIDEsIDAsIGRvbSwgZWwucGFyZW50KTtcbiAgfSk7XG59XG5cbi8qKlxuICogSW5zZXJ0IGV2ZXJ5IGVsZW1lbnQgaW4gdGhlIHNldCBvZiBtYXRjaGVkIGVsZW1lbnRzIGFmdGVyIHRoZSB0YXJnZXQuXG4gKlxuICogQGNhdGVnb3J5IE1hbmlwdWxhdGlvblxuICogQGV4YW1wbGVcbiAqXG4gKiBgYGBqc1xuICogJCgnPGxpIGNsYXNzPVwicGx1bVwiPlBsdW08L2xpPicpLmluc2VydEFmdGVyKCcuYXBwbGUnKTtcbiAqICQuaHRtbCgpO1xuICogLy89PiAgPHVsIGlkPVwiZnJ1aXRzXCI+XG4gKiAvLyAgICAgIDxsaSBjbGFzcz1cImFwcGxlXCI+QXBwbGU8L2xpPlxuICogLy8gICAgICA8bGkgY2xhc3M9XCJwbHVtXCI+UGx1bTwvbGk+XG4gKiAvLyAgICAgIDxsaSBjbGFzcz1cIm9yYW5nZVwiPk9yYW5nZTwvbGk+XG4gKiAvLyAgICAgIDxsaSBjbGFzcz1cInBlYXJcIj5QZWFyPC9saT5cbiAqIC8vICAgIDwvdWw+XG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0gdGFyZ2V0IC0gRWxlbWVudCB0byBpbnNlcnQgZWxlbWVudHMgYWZ0ZXIuXG4gKiBAcmV0dXJucyBUaGUgc2V0IG9mIG5ld2x5IGluc2VydGVkIGVsZW1lbnRzLlxuICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9hcGkuanF1ZXJ5LmNvbS9pbnNlcnRBZnRlci99XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpbnNlcnRBZnRlcjxUIGV4dGVuZHMgQW55Tm9kZT4oXG4gIHRoaXM6IENoZWVyaW88VD4sXG4gIHRhcmdldDogQmFzaWNBY2NlcHRlZEVsZW1zPEFueU5vZGU+LFxuKTogQ2hlZXJpbzxUPiB7XG4gIGlmICh0eXBlb2YgdGFyZ2V0ID09PSAnc3RyaW5nJykge1xuICAgIHRhcmdldCA9IHRoaXMuX21ha2U8QW55Tm9kZT4odGFyZ2V0KTtcbiAgfVxuXG4gIHRoaXMucmVtb3ZlKCk7XG5cbiAgY29uc3QgY2xvbmVzOiBUW10gPSBbXTtcblxuICBmb3IgKGNvbnN0IGVsIG9mIHRoaXMuX21ha2VEb21BcnJheSh0YXJnZXQpKSB7XG4gICAgY29uc3QgY2xvbmVkU2VsZiA9IHRoaXMuY2xvbmUoKS50b0FycmF5KCk7XG4gICAgY29uc3QgeyBwYXJlbnQgfSA9IGVsO1xuICAgIGlmICghcGFyZW50KSB7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG5cbiAgICBjb25zdCBzaWJsaW5nczogQW55Tm9kZVtdID0gcGFyZW50LmNoaWxkcmVuO1xuICAgIGNvbnN0IGluZGV4ID0gc2libGluZ3MuaW5kZXhPZihlbCk7XG5cbiAgICAvLyBJZiBub3QgZm91bmQsIG1vdmUgb25cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgIGlmIChpbmRleCA8IDApIGNvbnRpbnVlO1xuXG4gICAgLy8gQWRkIGNsb25lZCBgdGhpc2AgZWxlbWVudChzKSBhZnRlciB0YXJnZXQgZWxlbWVudFxuICAgIHVuaXF1ZVNwbGljZShzaWJsaW5ncywgaW5kZXggKyAxLCAwLCBjbG9uZWRTZWxmLCBwYXJlbnQpO1xuICAgIGNsb25lcy5wdXNoKC4uLmNsb25lZFNlbGYpO1xuICB9XG5cbiAgcmV0dXJuIHRoaXMuX21ha2UoY2xvbmVzKTtcbn1cblxuLyoqXG4gKiBJbnNlcnQgY29udGVudCBwcmV2aW91cyB0byBlYWNoIGVsZW1lbnQgaW4gdGhlIHNldCBvZiBtYXRjaGVkIGVsZW1lbnRzLlxuICpcbiAqIEBjYXRlZ29yeSBNYW5pcHVsYXRpb25cbiAqIEBleGFtcGxlXG4gKlxuICogYGBganNcbiAqICQoJy5hcHBsZScpLmJlZm9yZSgnPGxpIGNsYXNzPVwicGx1bVwiPlBsdW08L2xpPicpO1xuICogJC5odG1sKCk7XG4gKiAvLz0+ICA8dWwgaWQ9XCJmcnVpdHNcIj5cbiAqIC8vICAgICAgPGxpIGNsYXNzPVwicGx1bVwiPlBsdW08L2xpPlxuICogLy8gICAgICA8bGkgY2xhc3M9XCJhcHBsZVwiPkFwcGxlPC9saT5cbiAqIC8vICAgICAgPGxpIGNsYXNzPVwib3JhbmdlXCI+T3JhbmdlPC9saT5cbiAqIC8vICAgICAgPGxpIGNsYXNzPVwicGVhclwiPlBlYXI8L2xpPlxuICogLy8gICAgPC91bD5cbiAqIGBgYFxuICpcbiAqIEBwYXJhbSBlbGVtcyAtIEhUTUwgc3RyaW5nLCBET00gZWxlbWVudCwgYXJyYXkgb2YgRE9NIGVsZW1lbnRzIG9yIENoZWVyaW8gdG9cbiAqICAgaW5zZXJ0IGJlZm9yZSBlYWNoIGVsZW1lbnQgaW4gdGhlIHNldCBvZiBtYXRjaGVkIGVsZW1lbnRzLlxuICogQHJldHVybnMgVGhlIGluc3RhbmNlIGl0c2VsZi5cbiAqIEBzZWUge0BsaW5rIGh0dHBzOi8vYXBpLmpxdWVyeS5jb20vYmVmb3JlL31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJlZm9yZTxUIGV4dGVuZHMgQW55Tm9kZT4oXG4gIHRoaXM6IENoZWVyaW88VD4sXG4gIC4uLmVsZW1zOlxuICAgIHwgWyh0aGlzOiBBbnlOb2RlLCBpOiBudW1iZXIsIGh0bWw6IHN0cmluZykgPT4gQmFzaWNBY2NlcHRlZEVsZW1zPEFueU5vZGU+XVxuICAgIHwgQmFzaWNBY2NlcHRlZEVsZW1zPEFueU5vZGU+W11cbik6IENoZWVyaW88VD4ge1xuICBjb25zdCBsYXN0SWR4ID0gdGhpcy5sZW5ndGggLSAxO1xuXG4gIHJldHVybiBkb21FYWNoKHRoaXMsIChlbCwgaSkgPT4ge1xuICAgIGlmICghaGFzQ2hpbGRyZW4oZWwpIHx8ICFlbC5wYXJlbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBzaWJsaW5nczogQW55Tm9kZVtdID0gZWwucGFyZW50LmNoaWxkcmVuO1xuICAgIGNvbnN0IGluZGV4ID0gc2libGluZ3MuaW5kZXhPZihlbCk7XG5cbiAgICAvLyBJZiBub3QgZm91bmQsIG1vdmUgb25cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgIGlmIChpbmRleCA8IDApIHJldHVybjtcblxuICAgIGNvbnN0IGRvbVNyYyA9XG4gICAgICB0eXBlb2YgZWxlbXNbMF0gPT09ICdmdW5jdGlvbidcbiAgICAgICAgPyBlbGVtc1swXS5jYWxsKGVsLCBpLCB0aGlzLl9yZW5kZXIoZWwuY2hpbGRyZW4pKVxuICAgICAgICA6IChlbGVtcyBhcyBCYXNpY0FjY2VwdGVkRWxlbXM8QW55Tm9kZT5bXSk7XG5cbiAgICBjb25zdCBkb20gPSB0aGlzLl9tYWtlRG9tQXJyYXkoZG9tU3JjLCBpIDwgbGFzdElkeCk7XG5cbiAgICAvLyBBZGQgZWxlbWVudCBiZWZvcmUgYGVsYCBlbGVtZW50XG4gICAgdW5pcXVlU3BsaWNlKHNpYmxpbmdzLCBpbmRleCwgMCwgZG9tLCBlbC5wYXJlbnQpO1xuICB9KTtcbn1cblxuLyoqXG4gKiBJbnNlcnQgZXZlcnkgZWxlbWVudCBpbiB0aGUgc2V0IG9mIG1hdGNoZWQgZWxlbWVudHMgYmVmb3JlIHRoZSB0YXJnZXQuXG4gKlxuICogQGNhdGVnb3J5IE1hbmlwdWxhdGlvblxuICogQGV4YW1wbGVcbiAqXG4gKiBgYGBqc1xuICogJCgnPGxpIGNsYXNzPVwicGx1bVwiPlBsdW08L2xpPicpLmluc2VydEJlZm9yZSgnLmFwcGxlJyk7XG4gKiAkLmh0bWwoKTtcbiAqIC8vPT4gIDx1bCBpZD1cImZydWl0c1wiPlxuICogLy8gICAgICA8bGkgY2xhc3M9XCJwbHVtXCI+UGx1bTwvbGk+XG4gKiAvLyAgICAgIDxsaSBjbGFzcz1cImFwcGxlXCI+QXBwbGU8L2xpPlxuICogLy8gICAgICA8bGkgY2xhc3M9XCJvcmFuZ2VcIj5PcmFuZ2U8L2xpPlxuICogLy8gICAgICA8bGkgY2xhc3M9XCJwZWFyXCI+UGVhcjwvbGk+XG4gKiAvLyAgICA8L3VsPlxuICogYGBgXG4gKlxuICogQHBhcmFtIHRhcmdldCAtIEVsZW1lbnQgdG8gaW5zZXJ0IGVsZW1lbnRzIGJlZm9yZS5cbiAqIEByZXR1cm5zIFRoZSBzZXQgb2YgbmV3bHkgaW5zZXJ0ZWQgZWxlbWVudHMuXG4gKiBAc2VlIHtAbGluayBodHRwczovL2FwaS5qcXVlcnkuY29tL2luc2VydEJlZm9yZS99XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpbnNlcnRCZWZvcmU8VCBleHRlbmRzIEFueU5vZGU+KFxuICB0aGlzOiBDaGVlcmlvPFQ+LFxuICB0YXJnZXQ6IEJhc2ljQWNjZXB0ZWRFbGVtczxBbnlOb2RlPixcbik6IENoZWVyaW88VD4ge1xuICBjb25zdCB0YXJnZXRBcnIgPSB0aGlzLl9tYWtlPEFueU5vZGU+KHRhcmdldCk7XG5cbiAgdGhpcy5yZW1vdmUoKTtcblxuICBjb25zdCBjbG9uZXM6IFRbXSA9IFtdO1xuXG4gIGRvbUVhY2godGFyZ2V0QXJyLCAoZWwpID0+IHtcbiAgICBjb25zdCBjbG9uZWRTZWxmID0gdGhpcy5jbG9uZSgpLnRvQXJyYXkoKTtcbiAgICBjb25zdCB7IHBhcmVudCB9ID0gZWw7XG4gICAgaWYgKCFwYXJlbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBzaWJsaW5nczogQW55Tm9kZVtdID0gcGFyZW50LmNoaWxkcmVuO1xuICAgIGNvbnN0IGluZGV4ID0gc2libGluZ3MuaW5kZXhPZihlbCk7XG5cbiAgICAvLyBJZiBub3QgZm91bmQsIG1vdmUgb25cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgIGlmIChpbmRleCA8IDApIHJldHVybjtcblxuICAgIC8vIEFkZCBjbG9uZWQgYHRoaXNgIGVsZW1lbnQocykgYWZ0ZXIgdGFyZ2V0IGVsZW1lbnRcbiAgICB1bmlxdWVTcGxpY2Uoc2libGluZ3MsIGluZGV4LCAwLCBjbG9uZWRTZWxmLCBwYXJlbnQpO1xuICAgIGNsb25lcy5wdXNoKC4uLmNsb25lZFNlbGYpO1xuICB9KTtcblxuICByZXR1cm4gdGhpcy5fbWFrZShjbG9uZXMpO1xufVxuXG4vKipcbiAqIFJlbW92ZXMgdGhlIHNldCBvZiBtYXRjaGVkIGVsZW1lbnRzIGZyb20gdGhlIERPTSBhbmQgYWxsIHRoZWlyIGNoaWxkcmVuLlxuICogYHNlbGVjdG9yYCBmaWx0ZXJzIHRoZSBzZXQgb2YgbWF0Y2hlZCBlbGVtZW50cyB0byBiZSByZW1vdmVkLlxuICpcbiAqIEBjYXRlZ29yeSBNYW5pcHVsYXRpb25cbiAqIEBleGFtcGxlXG4gKlxuICogYGBganNcbiAqICQoJy5wZWFyJykucmVtb3ZlKCk7XG4gKiAkLmh0bWwoKTtcbiAqIC8vPT4gIDx1bCBpZD1cImZydWl0c1wiPlxuICogLy8gICAgICA8bGkgY2xhc3M9XCJhcHBsZVwiPkFwcGxlPC9saT5cbiAqIC8vICAgICAgPGxpIGNsYXNzPVwib3JhbmdlXCI+T3JhbmdlPC9saT5cbiAqIC8vICAgIDwvdWw+XG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0gc2VsZWN0b3IgLSBPcHRpb25hbCBzZWxlY3RvciBmb3IgZWxlbWVudHMgdG8gcmVtb3ZlLlxuICogQHJldHVybnMgVGhlIGluc3RhbmNlIGl0c2VsZi5cbiAqIEBzZWUge0BsaW5rIGh0dHBzOi8vYXBpLmpxdWVyeS5jb20vcmVtb3ZlL31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHJlbW92ZTxUIGV4dGVuZHMgQW55Tm9kZT4oXG4gIHRoaXM6IENoZWVyaW88VD4sXG4gIHNlbGVjdG9yPzogc3RyaW5nLFxuKTogQ2hlZXJpbzxUPiB7XG4gIC8vIEZpbHRlciBpZiB3ZSBoYXZlIHNlbGVjdG9yXG4gIGNvbnN0IGVsZW1zID0gc2VsZWN0b3IgPyB0aGlzLmZpbHRlcihzZWxlY3RvcikgOiB0aGlzO1xuXG4gIGRvbUVhY2goZWxlbXMsIChlbCkgPT4ge1xuICAgIHJlbW92ZUVsZW1lbnQoZWwpO1xuICAgIGVsLnByZXYgPSBlbC5uZXh0ID0gZWwucGFyZW50ID0gbnVsbDtcbiAgfSk7XG5cbiAgcmV0dXJuIHRoaXM7XG59XG5cbi8qKlxuICogUmVwbGFjZXMgbWF0Y2hlZCBlbGVtZW50cyB3aXRoIGBjb250ZW50YC5cbiAqXG4gKiBAY2F0ZWdvcnkgTWFuaXB1bGF0aW9uXG4gKiBAZXhhbXBsZVxuICpcbiAqIGBgYGpzXG4gKiBjb25zdCBwbHVtID0gJCgnPGxpIGNsYXNzPVwicGx1bVwiPlBsdW08L2xpPicpO1xuICogJCgnLnBlYXInKS5yZXBsYWNlV2l0aChwbHVtKTtcbiAqICQuaHRtbCgpO1xuICogLy89PiA8dWwgaWQ9XCJmcnVpdHNcIj5cbiAqIC8vICAgICA8bGkgY2xhc3M9XCJhcHBsZVwiPkFwcGxlPC9saT5cbiAqIC8vICAgICA8bGkgY2xhc3M9XCJvcmFuZ2VcIj5PcmFuZ2U8L2xpPlxuICogLy8gICAgIDxsaSBjbGFzcz1cInBsdW1cIj5QbHVtPC9saT5cbiAqIC8vICAgPC91bD5cbiAqIGBgYFxuICpcbiAqIEBwYXJhbSBjb250ZW50IC0gUmVwbGFjZW1lbnQgZm9yIG1hdGNoZWQgZWxlbWVudHMuXG4gKiBAcmV0dXJucyBUaGUgaW5zdGFuY2UgaXRzZWxmLlxuICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9hcGkuanF1ZXJ5LmNvbS9yZXBsYWNlV2l0aC99XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZXBsYWNlV2l0aDxUIGV4dGVuZHMgQW55Tm9kZT4oXG4gIHRoaXM6IENoZWVyaW88VD4sXG4gIGNvbnRlbnQ6IEFjY2VwdGVkRWxlbXM8QW55Tm9kZT4sXG4pOiBDaGVlcmlvPFQ+IHtcbiAgcmV0dXJuIGRvbUVhY2godGhpcywgKGVsLCBpKSA9PiB7XG4gICAgY29uc3QgeyBwYXJlbnQgfSA9IGVsO1xuICAgIGlmICghcGFyZW50KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3Qgc2libGluZ3M6IEFueU5vZGVbXSA9IHBhcmVudC5jaGlsZHJlbjtcbiAgICBjb25zdCBjb250ID1cbiAgICAgIHR5cGVvZiBjb250ZW50ID09PSAnZnVuY3Rpb24nID8gY29udGVudC5jYWxsKGVsLCBpLCBlbCkgOiBjb250ZW50O1xuICAgIGNvbnN0IGRvbSA9IHRoaXMuX21ha2VEb21BcnJheShjb250KTtcblxuICAgIC8qXG4gICAgICogSW4gdGhlIGNhc2UgdGhhdCBgZG9tYCBjb250YWlucyBub2RlcyB0aGF0IGFscmVhZHkgZXhpc3QgaW4gb3RoZXJcbiAgICAgKiBzdHJ1Y3R1cmVzLCBlbnN1cmUgdGhvc2Ugbm9kZXMgYXJlIHByb3Blcmx5IHJlbW92ZWQuXG4gICAgICovXG4gICAgdXBkYXRlRE9NKGRvbSwgbnVsbCk7XG5cbiAgICBjb25zdCBpbmRleCA9IHNpYmxpbmdzLmluZGV4T2YoZWwpO1xuXG4gICAgLy8gQ29tcGxldGVseSByZW1vdmUgb2xkIGVsZW1lbnRcbiAgICB1bmlxdWVTcGxpY2Uoc2libGluZ3MsIGluZGV4LCAxLCBkb20sIHBhcmVudCk7XG5cbiAgICBpZiAoIWRvbS5pbmNsdWRlcyhlbCkpIHtcbiAgICAgIGVsLnBhcmVudCA9IGVsLnByZXYgPSBlbC5uZXh0ID0gbnVsbDtcbiAgICB9XG4gIH0pO1xufVxuXG4vKipcbiAqIFJlbW92ZXMgYWxsIGNoaWxkcmVuIGZyb20gZWFjaCBpdGVtIGluIHRoZSBzZWxlY3Rpb24uIFRleHQgbm9kZXMgYW5kIGNvbW1lbnRcbiAqIG5vZGVzIGFyZSBsZWZ0IGFzIGlzLlxuICpcbiAqIEBjYXRlZ29yeSBNYW5pcHVsYXRpb25cbiAqIEBleGFtcGxlXG4gKlxuICogYGBganNcbiAqICQoJ3VsJykuZW1wdHkoKTtcbiAqICQuaHRtbCgpO1xuICogLy89PiAgPHVsIGlkPVwiZnJ1aXRzXCI+PC91bD5cbiAqIGBgYFxuICpcbiAqIEByZXR1cm5zIFRoZSBpbnN0YW5jZSBpdHNlbGYuXG4gKiBAc2VlIHtAbGluayBodHRwczovL2FwaS5qcXVlcnkuY29tL2VtcHR5L31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGVtcHR5PFQgZXh0ZW5kcyBBbnlOb2RlPih0aGlzOiBDaGVlcmlvPFQ+KTogQ2hlZXJpbzxUPiB7XG4gIHJldHVybiBkb21FYWNoKHRoaXMsIChlbCkgPT4ge1xuICAgIGlmICghaGFzQ2hpbGRyZW4oZWwpKSByZXR1cm47XG4gICAgZm9yIChjb25zdCBjaGlsZCBvZiBlbC5jaGlsZHJlbikge1xuICAgICAgY2hpbGQubmV4dCA9IGNoaWxkLnByZXYgPSBjaGlsZC5wYXJlbnQgPSBudWxsO1xuICAgIH1cblxuICAgIGVsLmNoaWxkcmVuLmxlbmd0aCA9IDA7XG4gIH0pO1xufVxuXG4vKipcbiAqIEdldHMgYW4gSFRNTCBjb250ZW50IHN0cmluZyBmcm9tIHRoZSBmaXJzdCBzZWxlY3RlZCBlbGVtZW50LlxuICpcbiAqIEBjYXRlZ29yeSBNYW5pcHVsYXRpb25cbiAqIEBleGFtcGxlXG4gKlxuICogYGBganNcbiAqICQoJy5vcmFuZ2UnKS5odG1sKCk7XG4gKiAvLz0+IE9yYW5nZVxuICpcbiAqICQoJyNmcnVpdHMnKS5odG1sKCc8bGkgY2xhc3M9XCJtYW5nb1wiPk1hbmdvPC9saT4nKS5odG1sKCk7XG4gKiAvLz0+IDxsaSBjbGFzcz1cIm1hbmdvXCI+TWFuZ288L2xpPlxuICogYGBgXG4gKlxuICogQHJldHVybnMgVGhlIEhUTUwgY29udGVudCBzdHJpbmcuXG4gKiBAc2VlIHtAbGluayBodHRwczovL2FwaS5qcXVlcnkuY29tL2h0bWwvfVxuICovXG5leHBvcnQgZnVuY3Rpb24gaHRtbDxUIGV4dGVuZHMgQW55Tm9kZT4odGhpczogQ2hlZXJpbzxUPik6IHN0cmluZyB8IG51bGw7XG4vKipcbiAqIFJlcGxhY2VzIGVhY2ggc2VsZWN0ZWQgZWxlbWVudCdzIGNvbnRlbnQgd2l0aCB0aGUgc3BlY2lmaWVkIGNvbnRlbnQuXG4gKlxuICogQGNhdGVnb3J5IE1hbmlwdWxhdGlvblxuICogQGV4YW1wbGVcbiAqXG4gKiBgYGBqc1xuICogJCgnLm9yYW5nZScpLmh0bWwoJzxsaSBjbGFzcz1cIm1hbmdvXCI+TWFuZ288L2xpPicpLmh0bWwoKTtcbiAqIC8vPT4gPGxpIGNsYXNzPVwibWFuZ29cIj5NYW5nbzwvbGk+XG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0gc3RyIC0gVGhlIGNvbnRlbnQgdG8gcmVwbGFjZSBzZWxlY3Rpb24ncyBjb250ZW50cyB3aXRoLlxuICogQHJldHVybnMgVGhlIGluc3RhbmNlIGl0c2VsZi5cbiAqIEBzZWUge0BsaW5rIGh0dHBzOi8vYXBpLmpxdWVyeS5jb20vaHRtbC99XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBodG1sPFQgZXh0ZW5kcyBBbnlOb2RlPihcbiAgdGhpczogQ2hlZXJpbzxUPixcbiAgc3RyOiBzdHJpbmcgfCBDaGVlcmlvPFQ+LFxuKTogQ2hlZXJpbzxUPjtcbmV4cG9ydCBmdW5jdGlvbiBodG1sPFQgZXh0ZW5kcyBBbnlOb2RlPihcbiAgdGhpczogQ2hlZXJpbzxUPixcbiAgc3RyPzogc3RyaW5nIHwgQ2hlZXJpbzxBbnlOb2RlPixcbik6IENoZWVyaW88VD4gfCBzdHJpbmcgfCBudWxsIHtcbiAgaWYgKHN0ciA9PT0gdW5kZWZpbmVkKSB7XG4gICAgY29uc3QgZWwgPSB0aGlzWzBdO1xuICAgIGlmICghZWwgfHwgIWhhc0NoaWxkcmVuKGVsKSkgcmV0dXJuIG51bGw7XG4gICAgcmV0dXJuIHRoaXMuX3JlbmRlcihlbC5jaGlsZHJlbik7XG4gIH1cblxuICByZXR1cm4gZG9tRWFjaCh0aGlzLCAoZWwpID0+IHtcbiAgICBpZiAoIWhhc0NoaWxkcmVuKGVsKSkgcmV0dXJuO1xuICAgIGZvciAoY29uc3QgY2hpbGQgb2YgZWwuY2hpbGRyZW4pIHtcbiAgICAgIGNoaWxkLm5leHQgPSBjaGlsZC5wcmV2ID0gY2hpbGQucGFyZW50ID0gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCBjb250ZW50ID0gaXNDaGVlcmlvKHN0cilcbiAgICAgID8gc3RyLnRvQXJyYXkoKVxuICAgICAgOiB0aGlzLl9wYXJzZShgJHtzdHJ9YCwgdGhpcy5vcHRpb25zLCBmYWxzZSwgZWwpLmNoaWxkcmVuO1xuXG4gICAgdXBkYXRlRE9NKGNvbnRlbnQsIGVsKTtcbiAgfSk7XG59XG5cbi8qKlxuICogVHVybnMgdGhlIGNvbGxlY3Rpb24gdG8gYSBzdHJpbmcuIEFsaWFzIGZvciBgLmh0bWwoKWAuXG4gKlxuICogQGNhdGVnb3J5IE1hbmlwdWxhdGlvblxuICogQHJldHVybnMgVGhlIHJlbmRlcmVkIGRvY3VtZW50LlxuICovXG5leHBvcnQgZnVuY3Rpb24gdG9TdHJpbmc8VCBleHRlbmRzIEFueU5vZGU+KHRoaXM6IENoZWVyaW88VD4pOiBzdHJpbmcge1xuICByZXR1cm4gdGhpcy5fcmVuZGVyKHRoaXMpO1xufVxuXG4vKipcbiAqIEdldCB0aGUgY29tYmluZWQgdGV4dCBjb250ZW50cyBvZiBlYWNoIGVsZW1lbnQgaW4gdGhlIHNldCBvZiBtYXRjaGVkXG4gKiBlbGVtZW50cywgaW5jbHVkaW5nIHRoZWlyIGRlc2NlbmRhbnRzLlxuICpcbiAqIEBjYXRlZ29yeSBNYW5pcHVsYXRpb25cbiAqIEBleGFtcGxlXG4gKlxuICogYGBganNcbiAqICQoJy5vcmFuZ2UnKS50ZXh0KCk7XG4gKiAvLz0+IE9yYW5nZVxuICpcbiAqICQoJ3VsJykudGV4dCgpO1xuICogLy89PiAgQXBwbGVcbiAqIC8vICAgIE9yYW5nZVxuICogLy8gICAgUGVhclxuICogYGBgXG4gKlxuICogQHJldHVybnMgVGhlIHRleHQgY29udGVudHMgb2YgdGhlIGNvbGxlY3Rpb24uXG4gKiBAc2VlIHtAbGluayBodHRwczovL2FwaS5qcXVlcnkuY29tL3RleHQvfVxuICovXG5leHBvcnQgZnVuY3Rpb24gdGV4dDxUIGV4dGVuZHMgQW55Tm9kZT4odGhpczogQ2hlZXJpbzxUPik6IHN0cmluZztcbi8qKlxuICogU2V0IHRoZSBjb250ZW50IG9mIGVhY2ggZWxlbWVudCBpbiB0aGUgc2V0IG9mIG1hdGNoZWQgZWxlbWVudHMgdG8gdGhlXG4gKiBzcGVjaWZpZWQgdGV4dC5cbiAqXG4gKiBAY2F0ZWdvcnkgTWFuaXB1bGF0aW9uXG4gKiBAZXhhbXBsZVxuICpcbiAqIGBgYGpzXG4gKiAkKCcub3JhbmdlJykudGV4dCgnT3JhbmdlJyk7XG4gKiAvLz0+IDxkaXYgY2xhc3M9XCJvcmFuZ2VcIj5PcmFuZ2U8L2Rpdj5cbiAqIGBgYFxuICpcbiAqIEBwYXJhbSBzdHIgLSBUaGUgdGV4dCB0byBzZXQgYXMgdGhlIGNvbnRlbnQgb2YgZWFjaCBtYXRjaGVkIGVsZW1lbnQuXG4gKiBAcmV0dXJucyBUaGUgaW5zdGFuY2UgaXRzZWxmLlxuICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9hcGkuanF1ZXJ5LmNvbS90ZXh0L31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRleHQ8VCBleHRlbmRzIEFueU5vZGU+KFxuICB0aGlzOiBDaGVlcmlvPFQ+LFxuICBzdHI6IHN0cmluZyB8ICgodGhpczogQW55Tm9kZSwgaTogbnVtYmVyLCB0ZXh0OiBzdHJpbmcpID0+IHN0cmluZyksXG4pOiBDaGVlcmlvPFQ+O1xuZXhwb3J0IGZ1bmN0aW9uIHRleHQ8VCBleHRlbmRzIEFueU5vZGU+KFxuICB0aGlzOiBDaGVlcmlvPFQ+LFxuICBzdHI/OiBzdHJpbmcgfCAoKHRoaXM6IEFueU5vZGUsIGk6IG51bWJlciwgdGV4dDogc3RyaW5nKSA9PiBzdHJpbmcpLFxuKTogQ2hlZXJpbzxUPiB8IHN0cmluZyB7XG4gIC8vIElmIGBzdHJgIGlzIHVuZGVmaW5lZCwgYWN0IGFzIGEgXCJnZXR0ZXJcIlxuICBpZiAoc3RyID09PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gc3RhdGljVGV4dCh0aGlzKTtcbiAgfVxuICBpZiAodHlwZW9mIHN0ciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIC8vIEZ1bmN0aW9uIHN1cHBvcnRcbiAgICByZXR1cm4gZG9tRWFjaCh0aGlzLCAoZWwsIGkpID0+XG4gICAgICB0aGlzLl9tYWtlKGVsKS50ZXh0KHN0ci5jYWxsKGVsLCBpLCBzdGF0aWNUZXh0KFtlbF0pKSksXG4gICAgKTtcbiAgfVxuXG4gIC8vIEFwcGVuZCB0ZXh0IG5vZGUgdG8gZWFjaCBzZWxlY3RlZCBlbGVtZW50c1xuICByZXR1cm4gZG9tRWFjaCh0aGlzLCAoZWwpID0+IHtcbiAgICBpZiAoIWhhc0NoaWxkcmVuKGVsKSkgcmV0dXJuO1xuICAgIGZvciAoY29uc3QgY2hpbGQgb2YgZWwuY2hpbGRyZW4pIHtcbiAgICAgIGNoaWxkLm5leHQgPSBjaGlsZC5wcmV2ID0gY2hpbGQucGFyZW50ID0gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCB0ZXh0Tm9kZSA9IG5ldyBUZXh0KGAke3N0cn1gKTtcblxuICAgIHVwZGF0ZURPTSh0ZXh0Tm9kZSwgZWwpO1xuICB9KTtcbn1cblxuLyoqXG4gKiBDbG9uZSB0aGUgY2hlZXJpbyBvYmplY3QuXG4gKlxuICogQGNhdGVnb3J5IE1hbmlwdWxhdGlvblxuICogQGV4YW1wbGVcbiAqXG4gKiBgYGBqc1xuICogY29uc3QgbW9yZUZydWl0ID0gJCgnI2ZydWl0cycpLmNsb25lKCk7XG4gKiBgYGBcbiAqXG4gKiBAcmV0dXJucyBUaGUgY2xvbmVkIG9iamVjdC5cbiAqIEBzZWUge0BsaW5rIGh0dHBzOi8vYXBpLmpxdWVyeS5jb20vY2xvbmUvfVxuICovXG5leHBvcnQgZnVuY3Rpb24gY2xvbmU8VCBleHRlbmRzIEFueU5vZGU+KHRoaXM6IENoZWVyaW88VD4pOiBDaGVlcmlvPFQ+IHtcbiAgY29uc3QgY2xvbmUgPSBBcnJheS5wcm90b3R5cGUubWFwLmNhbGwodGhpcy5nZXQoKSwgKGVsKSA9PlxuICAgIGNsb25lTm9kZShlbCwgdHJ1ZSksXG4gICkgYXMgVFtdO1xuXG4gIC8vIEFkZCBhIHJvb3Qgbm9kZSBhcm91bmQgdGhlIGNsb25lZCBub2Rlc1xuICBjb25zdCByb290ID0gbmV3IERvY3VtZW50KGNsb25lKTtcbiAgZm9yIChjb25zdCBub2RlIG9mIGNsb25lKSB7XG4gICAgbm9kZS5wYXJlbnQgPSByb290O1xuICB9XG5cbiAgcmV0dXJuIHRoaXMuX21ha2UoY2xvbmUpO1xufVxuIiwgImltcG9ydCB7IGRvbUVhY2ggfSBmcm9tICcuLi91dGlscy5qcyc7XG5pbXBvcnQgeyBpc1RhZywgdHlwZSBFbGVtZW50LCB0eXBlIEFueU5vZGUgfSBmcm9tICdkb21oYW5kbGVyJztcbmltcG9ydCB0eXBlIHsgQ2hlZXJpbyB9IGZyb20gJy4uL2NoZWVyaW8uanMnO1xuXG4vKipcbiAqIEdldCB0aGUgdmFsdWUgb2YgYSBzdHlsZSBwcm9wZXJ0eSBmb3IgdGhlIGZpcnN0IGVsZW1lbnQgaW4gdGhlIHNldCBvZiBtYXRjaGVkXG4gKiBlbGVtZW50cy5cbiAqXG4gKiBAY2F0ZWdvcnkgQ1NTXG4gKiBAcGFyYW0gbmFtZXMgLSBPcHRpb25hbGx5IHRoZSBuYW1lcyBvZiB0aGUgcHJvcGVydGllcyBvZiBpbnRlcmVzdC5cbiAqIEByZXR1cm5zIEEgbWFwIG9mIGFsbCBvZiB0aGUgc3R5bGUgcHJvcGVydGllcy5cbiAqIEBzZWUge0BsaW5rIGh0dHBzOi8vYXBpLmpxdWVyeS5jb20vY3NzL31cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNzczxUIGV4dGVuZHMgQW55Tm9kZT4oXG4gIHRoaXM6IENoZWVyaW88VD4sXG4gIG5hbWVzPzogc3RyaW5nW10sXG4pOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+IHwgdW5kZWZpbmVkO1xuLyoqXG4gKiBHZXQgdGhlIHZhbHVlIG9mIGEgc3R5bGUgcHJvcGVydHkgZm9yIHRoZSBmaXJzdCBlbGVtZW50IGluIHRoZSBzZXQgb2YgbWF0Y2hlZFxuICogZWxlbWVudHMuXG4gKlxuICogQGNhdGVnb3J5IENTU1xuICogQHBhcmFtIG5hbWUgLSBUaGUgbmFtZSBvZiB0aGUgcHJvcGVydHkuXG4gKiBAcmV0dXJucyBUaGUgcHJvcGVydHkgdmFsdWUgZm9yIHRoZSBnaXZlbiBuYW1lLlxuICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9hcGkuanF1ZXJ5LmNvbS9jc3MvfVxuICovXG5leHBvcnQgZnVuY3Rpb24gY3NzPFQgZXh0ZW5kcyBBbnlOb2RlPihcbiAgdGhpczogQ2hlZXJpbzxUPixcbiAgbmFtZTogc3RyaW5nLFxuKTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuLyoqXG4gKiBTZXQgb25lIENTUyBwcm9wZXJ0eSBmb3IgZXZlcnkgbWF0Y2hlZCBlbGVtZW50LlxuICpcbiAqIEBjYXRlZ29yeSBDU1NcbiAqIEBwYXJhbSBwcm9wIC0gVGhlIG5hbWUgb2YgdGhlIHByb3BlcnR5LlxuICogQHBhcmFtIHZhbCAtIFRoZSBuZXcgdmFsdWUuXG4gKiBAcmV0dXJucyBUaGUgaW5zdGFuY2UgaXRzZWxmLlxuICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9hcGkuanF1ZXJ5LmNvbS9jc3MvfVxuICovXG5leHBvcnQgZnVuY3Rpb24gY3NzPFQgZXh0ZW5kcyBBbnlOb2RlPihcbiAgdGhpczogQ2hlZXJpbzxUPixcbiAgcHJvcDogc3RyaW5nLFxuICB2YWw6XG4gICAgfCBzdHJpbmdcbiAgICB8ICgodGhpczogRWxlbWVudCwgaTogbnVtYmVyLCBzdHlsZTogc3RyaW5nKSA9PiBzdHJpbmcgfCB1bmRlZmluZWQpLFxuKTogQ2hlZXJpbzxUPjtcbi8qKlxuICogU2V0IG11bHRpcGxlIENTUyBwcm9wZXJ0aWVzIGZvciBldmVyeSBtYXRjaGVkIGVsZW1lbnQuXG4gKlxuICogQGNhdGVnb3J5IENTU1xuICogQHBhcmFtIG1hcCAtIEEgbWFwIG9mIHByb3BlcnR5IG5hbWVzIGFuZCB2YWx1ZXMuXG4gKiBAcmV0dXJucyBUaGUgaW5zdGFuY2UgaXRzZWxmLlxuICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9hcGkuanF1ZXJ5LmNvbS9jc3MvfVxuICovXG5leHBvcnQgZnVuY3Rpb24gY3NzPFQgZXh0ZW5kcyBBbnlOb2RlPihcbiAgdGhpczogQ2hlZXJpbzxUPixcbiAgbWFwOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+LFxuKTogQ2hlZXJpbzxUPjtcbi8qKlxuICogU2V0IG11bHRpcGxlIENTUyBwcm9wZXJ0aWVzIGZvciBldmVyeSBtYXRjaGVkIGVsZW1lbnQuXG4gKlxuICogQGNhdGVnb3J5IENTU1xuICogQHBhcmFtIHByb3AgLSBUaGUgbmFtZXMgb2YgdGhlIHByb3BlcnRpZXMuXG4gKiBAcGFyYW0gdmFsIC0gVGhlIG5ldyB2YWx1ZXMuXG4gKiBAcmV0dXJucyBUaGUgaW5zdGFuY2UgaXRzZWxmLlxuICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9hcGkuanF1ZXJ5LmNvbS9jc3MvfVxuICovXG5leHBvcnQgZnVuY3Rpb24gY3NzPFQgZXh0ZW5kcyBBbnlOb2RlPihcbiAgdGhpczogQ2hlZXJpbzxUPixcbiAgcHJvcD86IHN0cmluZyB8IHN0cmluZ1tdIHwgUmVjb3JkPHN0cmluZywgc3RyaW5nPixcbiAgdmFsPzpcbiAgICB8IHN0cmluZ1xuICAgIHwgKCh0aGlzOiBFbGVtZW50LCBpOiBudW1iZXIsIHN0eWxlOiBzdHJpbmcpID0+IHN0cmluZyB8IHVuZGVmaW5lZCksXG4pOiBDaGVlcmlvPFQ+IHwgUmVjb3JkPHN0cmluZywgc3RyaW5nPiB8IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gIGlmIChcbiAgICAocHJvcCAhPSBudWxsICYmIHZhbCAhPSBudWxsKSB8fFxuICAgIC8vIFdoZW4gYHByb3BgIGlzIGEgXCJwbGFpblwiIG9iamVjdFxuICAgICh0eXBlb2YgcHJvcCA9PT0gJ29iamVjdCcgJiYgIUFycmF5LmlzQXJyYXkocHJvcCkpXG4gICkge1xuICAgIHJldHVybiBkb21FYWNoKHRoaXMsIChlbCwgaSkgPT4ge1xuICAgICAgaWYgKGlzVGFnKGVsKSkge1xuICAgICAgICAvLyBgcHJvcGAgY2FuJ3QgYmUgYW4gYXJyYXkgaGVyZSBhbnltb3JlLlxuICAgICAgICBzZXRDc3MoZWwsIHByb3AgYXMgc3RyaW5nLCB2YWwsIGkpO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgaWYgKHRoaXMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIHJldHVybiBnZXRDc3ModGhpc1swXSwgcHJvcCBhcyBzdHJpbmcpO1xufVxuXG4vKipcbiAqIFNldCBzdHlsZXMgb2YgYWxsIGVsZW1lbnRzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAcGFyYW0gZWwgLSBFbGVtZW50IHRvIHNldCBzdHlsZSBvZi5cbiAqIEBwYXJhbSBwcm9wIC0gTmFtZSBvZiBwcm9wZXJ0eS5cbiAqIEBwYXJhbSB2YWx1ZSAtIFZhbHVlIHRvIHNldCBwcm9wZXJ0eSB0by5cbiAqIEBwYXJhbSBpZHggLSBPcHRpb25hbCBpbmRleCB3aXRoaW4gdGhlIHNlbGVjdGlvbi5cbiAqL1xuZnVuY3Rpb24gc2V0Q3NzKFxuICBlbDogRWxlbWVudCxcbiAgcHJvcDogc3RyaW5nIHwgUmVjb3JkPHN0cmluZywgc3RyaW5nPixcbiAgdmFsdWU6XG4gICAgfCBzdHJpbmdcbiAgICB8ICgodGhpczogRWxlbWVudCwgaTogbnVtYmVyLCBzdHlsZTogc3RyaW5nKSA9PiBzdHJpbmcgfCB1bmRlZmluZWQpXG4gICAgfCB1bmRlZmluZWQsXG4gIGlkeDogbnVtYmVyLFxuKSB7XG4gIGlmICh0eXBlb2YgcHJvcCA9PT0gJ3N0cmluZycpIHtcbiAgICBjb25zdCBzdHlsZXMgPSBnZXRDc3MoZWwpO1xuXG4gICAgY29uc3QgdmFsID1cbiAgICAgIHR5cGVvZiB2YWx1ZSA9PT0gJ2Z1bmN0aW9uJyA/IHZhbHVlLmNhbGwoZWwsIGlkeCwgc3R5bGVzW3Byb3BdKSA6IHZhbHVlO1xuXG4gICAgaWYgKHZhbCA9PT0gJycpIHtcbiAgICAgIGRlbGV0ZSBzdHlsZXNbcHJvcF07XG4gICAgfSBlbHNlIGlmICh2YWwgIT0gbnVsbCkge1xuICAgICAgc3R5bGVzW3Byb3BdID0gdmFsO1xuICAgIH1cblxuICAgIGVsLmF0dHJpYnNbJ3N0eWxlJ10gPSBzdHJpbmdpZnkoc3R5bGVzKTtcbiAgfSBlbHNlIGlmICh0eXBlb2YgcHJvcCA9PT0gJ29iamVjdCcpIHtcbiAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMocHJvcCk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBrID0ga2V5c1tpXTtcbiAgICAgIHNldENzcyhlbCwgaywgcHJvcFtrXSwgaSk7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogR2V0IHRoZSBwYXJzZWQgc3R5bGVzIG9mIHRoZSBmaXJzdCBlbGVtZW50LlxuICpcbiAqIEBwcml2YXRlXG4gKiBAY2F0ZWdvcnkgQ1NTXG4gKiBAcGFyYW0gZWwgLSBFbGVtZW50IHRvIGdldCBzdHlsZXMgZnJvbS5cbiAqIEBwYXJhbSBwcm9wcyAtIE9wdGlvbmFsbHkgdGhlIG5hbWVzIG9mIHRoZSBwcm9wZXJ0aWVzIG9mIGludGVyZXN0LlxuICogQHJldHVybnMgVGhlIHBhcnNlZCBzdHlsZXMuXG4gKi9cbmZ1bmN0aW9uIGdldENzcyhlbDogQW55Tm9kZSwgcHJvcHM/OiBzdHJpbmdbXSk6IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4vKipcbiAqIEdldCBhIHByb3BlcnR5IGZyb20gdGhlIHBhcnNlZCBzdHlsZXMgb2YgdGhlIGZpcnN0IGVsZW1lbnQuXG4gKlxuICogQHByaXZhdGVcbiAqIEBjYXRlZ29yeSBDU1NcbiAqIEBwYXJhbSBlbCAtIEVsZW1lbnQgdG8gZ2V0IHN0eWxlcyBmcm9tLlxuICogQHBhcmFtIHByb3AgLSBOYW1lIG9mIHRoZSBwcm9wLlxuICogQHJldHVybnMgVGhlIHZhbHVlIG9mIHRoZSBwcm9wZXJ0eS5cbiAqL1xuZnVuY3Rpb24gZ2V0Q3NzKGVsOiBBbnlOb2RlLCBwcm9wOiBzdHJpbmcpOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5mdW5jdGlvbiBnZXRDc3MoXG4gIGVsOiBBbnlOb2RlLFxuICBwcm9wPzogc3RyaW5nIHwgc3RyaW5nW10sXG4pOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+IHwgc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgaWYgKCFlbCB8fCAhaXNUYWcoZWwpKSByZXR1cm47XG5cbiAgY29uc3Qgc3R5bGVzID0gcGFyc2UoZWwuYXR0cmlic1snc3R5bGUnXSk7XG4gIGlmICh0eXBlb2YgcHJvcCA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gc3R5bGVzW3Byb3BdO1xuICB9XG4gIGlmIChBcnJheS5pc0FycmF5KHByb3ApKSB7XG4gICAgY29uc3QgbmV3U3R5bGVzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge307XG4gICAgZm9yIChjb25zdCBpdGVtIG9mIHByb3ApIHtcbiAgICAgIGlmIChzdHlsZXNbaXRlbV0gIT0gbnVsbCkge1xuICAgICAgICBuZXdTdHlsZXNbaXRlbV0gPSBzdHlsZXNbaXRlbV07XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBuZXdTdHlsZXM7XG4gIH1cbiAgcmV0dXJuIHN0eWxlcztcbn1cblxuLyoqXG4gKiBTdHJpbmdpZnkgYG9iamAgdG8gc3R5bGVzLlxuICpcbiAqIEBwcml2YXRlXG4gKiBAY2F0ZWdvcnkgQ1NTXG4gKiBAcGFyYW0gb2JqIC0gT2JqZWN0IHRvIHN0cmluZ2lmeS5cbiAqIEByZXR1cm5zIFRoZSBzZXJpYWxpemVkIHN0eWxlcy5cbiAqL1xuZnVuY3Rpb24gc3RyaW5naWZ5KG9iajogUmVjb3JkPHN0cmluZywgc3RyaW5nPik6IHN0cmluZyB7XG4gIHJldHVybiBPYmplY3Qua2V5cyhvYmopLnJlZHVjZShcbiAgICAoc3RyLCBwcm9wKSA9PiBgJHtzdHJ9JHtzdHIgPyAnICcgOiAnJ30ke3Byb3B9OiAke29ialtwcm9wXX07YCxcbiAgICAnJyxcbiAgKTtcbn1cblxuLyoqXG4gKiBQYXJzZSBgc3R5bGVzYC5cbiAqXG4gKiBAcHJpdmF0ZVxuICogQGNhdGVnb3J5IENTU1xuICogQHBhcmFtIHN0eWxlcyAtIFN0eWxlcyB0byBiZSBwYXJzZWQuXG4gKiBAcmV0dXJucyBUaGUgcGFyc2VkIHN0eWxlcy5cbiAqL1xuZnVuY3Rpb24gcGFyc2Uoc3R5bGVzOiBzdHJpbmcpOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+IHtcbiAgc3R5bGVzID0gKHN0eWxlcyB8fCAnJykudHJpbSgpO1xuXG4gIGlmICghc3R5bGVzKSByZXR1cm4ge307XG5cbiAgY29uc3Qgb2JqOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge307XG5cbiAgbGV0IGtleTogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gIGZvciAoY29uc3Qgc3RyIG9mIHN0eWxlcy5zcGxpdCgnOycpKSB7XG4gICAgY29uc3QgbiA9IHN0ci5pbmRleE9mKCc6Jyk7XG4gICAgLy8gSWYgdGhlcmUgaXMgbm8gOiwgb3IgaWYgaXQgaXMgdGhlIGZpcnN0L2xhc3QgY2hhcmFjdGVyLCBhZGQgdG8gdGhlIHByZXZpb3VzIGl0ZW0ncyB2YWx1ZVxuICAgIGlmIChuIDwgMSB8fCBuID09PSBzdHIubGVuZ3RoIC0gMSkge1xuICAgICAgY29uc3QgdHJpbW1lZCA9IHN0ci50cmltRW5kKCk7XG4gICAgICBpZiAodHJpbW1lZC5sZW5ndGggPiAwICYmIGtleSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIG9ialtrZXldICs9IGA7JHt0cmltbWVkfWA7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGtleSA9IHN0ci5zbGljZSgwLCBuKS50cmltKCk7XG4gICAgICBvYmpba2V5XSA9IHN0ci5zbGljZShuICsgMSkudHJpbSgpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBvYmo7XG59XG4iLCAiaW1wb3J0IHsgaXNUYWcsIHR5cGUgQW55Tm9kZSB9IGZyb20gJ2RvbWhhbmRsZXInO1xuaW1wb3J0IHR5cGUgeyBDaGVlcmlvIH0gZnJvbSAnLi4vY2hlZXJpby5qcyc7XG5cbi8qXG4gKiBodHRwczovL2dpdGh1Yi5jb20vanF1ZXJ5L2pxdWVyeS9ibG9iLzIuMS4zL3NyYy9tYW5pcHVsYXRpb24vdmFyL3JjaGVja2FibGVUeXBlLmpzXG4gKiBodHRwczovL2dpdGh1Yi5jb20vanF1ZXJ5L2pxdWVyeS9ibG9iLzIuMS4zL3NyYy9zZXJpYWxpemUuanNcbiAqL1xuY29uc3Qgc3VibWl0dGFibGVTZWxlY3RvciA9ICdpbnB1dCxzZWxlY3QsdGV4dGFyZWEsa2V5Z2VuJztcbmNvbnN0IHIyMCA9IC8lMjAvZztcbmNvbnN0IHJDUkxGID0gL1xccj9cXG4vZztcblxuLyoqXG4gKiBFbmNvZGUgYSBzZXQgb2YgZm9ybSBlbGVtZW50cyBhcyBhIHN0cmluZyBmb3Igc3VibWlzc2lvbi5cbiAqXG4gKiBAY2F0ZWdvcnkgRm9ybXNcbiAqIEBleGFtcGxlXG4gKlxuICogYGBganNcbiAqICQoJzxmb3JtPjxpbnB1dCBuYW1lPVwiZm9vXCIgdmFsdWU9XCJiYXJcIiAvPjwvZm9ybT4nKS5zZXJpYWxpemUoKTtcbiAqIC8vPT4gJ2Zvbz1iYXInXG4gKiBgYGBcbiAqXG4gKiBAcmV0dXJucyBUaGUgc2VyaWFsaXplZCBmb3JtLlxuICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9hcGkuanF1ZXJ5LmNvbS9zZXJpYWxpemUvfVxuICovXG5leHBvcnQgZnVuY3Rpb24gc2VyaWFsaXplPFQgZXh0ZW5kcyBBbnlOb2RlPih0aGlzOiBDaGVlcmlvPFQ+KTogc3RyaW5nIHtcbiAgLy8gQ29udmVydCBmb3JtIGVsZW1lbnRzIGludG8gbmFtZS92YWx1ZSBvYmplY3RzXG4gIGNvbnN0IGFyciA9IHRoaXMuc2VyaWFsaXplQXJyYXkoKTtcblxuICAvLyBTZXJpYWxpemUgZWFjaCBlbGVtZW50IGludG8gYSBrZXkvdmFsdWUgc3RyaW5nXG4gIGNvbnN0IHJldEFyciA9IGFyci5tYXAoXG4gICAgKGRhdGEpID0+XG4gICAgICBgJHtlbmNvZGVVUklDb21wb25lbnQoZGF0YS5uYW1lKX09JHtlbmNvZGVVUklDb21wb25lbnQoZGF0YS52YWx1ZSl9YCxcbiAgKTtcblxuICAvLyBSZXR1cm4gdGhlIHJlc3VsdGluZyBzZXJpYWxpemF0aW9uXG4gIHJldHVybiByZXRBcnIuam9pbignJicpLnJlcGxhY2UocjIwLCAnKycpO1xufVxuXG4vKipcbiAqIEVuY29kZSBhIHNldCBvZiBmb3JtIGVsZW1lbnRzIGFzIGFuIGFycmF5IG9mIG5hbWVzIGFuZCB2YWx1ZXMuXG4gKlxuICogQGNhdGVnb3J5IEZvcm1zXG4gKiBAZXhhbXBsZVxuICpcbiAqIGBgYGpzXG4gKiAkKCc8Zm9ybT48aW5wdXQgbmFtZT1cImZvb1wiIHZhbHVlPVwiYmFyXCIgLz48L2Zvcm0+Jykuc2VyaWFsaXplQXJyYXkoKTtcbiAqIC8vPT4gWyB7IG5hbWU6ICdmb28nLCB2YWx1ZTogJ2JhcicgfSBdXG4gKiBgYGBcbiAqXG4gKiBAcmV0dXJucyBUaGUgc2VyaWFsaXplZCBmb3JtLlxuICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9hcGkuanF1ZXJ5LmNvbS9zZXJpYWxpemVBcnJheS99XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXJpYWxpemVBcnJheTxUIGV4dGVuZHMgQW55Tm9kZT4oXG4gIHRoaXM6IENoZWVyaW88VD4sXG4pOiB7XG4gIG5hbWU6IHN0cmluZztcbiAgdmFsdWU6IHN0cmluZztcbn1bXSB7XG4gIC8vIFJlc29sdmUgYWxsIGZvcm0gZWxlbWVudHMgZnJvbSBlaXRoZXIgZm9ybXMgb3IgY29sbGVjdGlvbnMgb2YgZm9ybSBlbGVtZW50c1xuICByZXR1cm4gdGhpcy5tYXAoKF8sIGVsZW0pID0+IHtcbiAgICBjb25zdCAkZWxlbSA9IHRoaXMuX21ha2UoZWxlbSk7XG4gICAgaWYgKGlzVGFnKGVsZW0pICYmIGVsZW0ubmFtZSA9PT0gJ2Zvcm0nKSB7XG4gICAgICByZXR1cm4gJGVsZW0uZmluZChzdWJtaXR0YWJsZVNlbGVjdG9yKS50b0FycmF5KCk7XG4gICAgfVxuICAgIHJldHVybiAkZWxlbS5maWx0ZXIoc3VibWl0dGFibGVTZWxlY3RvcikudG9BcnJheSgpO1xuICB9KVxuICAgIC5maWx0ZXIoXG4gICAgICAvLyBWZXJpZnkgZWxlbWVudHMgaGF2ZSBhIG5hbWUgKGBhdHRyLm5hbWVgKSBhbmQgYXJlIG5vdCBkaXNhYmxlZCAoYDplbmFibGVkYClcbiAgICAgICdbbmFtZSE9XCJcIl06ZW5hYmxlZCcgK1xuICAgICAgICAvLyBBbmQgY2Fubm90IGJlIGNsaWNrZWQgKGBbdHlwZT1zdWJtaXRdYCkgb3IgYXJlIHVzZWQgaW4gYHgtd3d3LWZvcm0tdXJsZW5jb2RlZGAgKGBbdHlwZT1maWxlXWApXG4gICAgICAgICc6bm90KDpzdWJtaXQsIDpidXR0b24sIDppbWFnZSwgOnJlc2V0LCA6ZmlsZSknICtcbiAgICAgICAgLy8gQW5kIGFyZSBlaXRoZXIgY2hlY2tlZC9kb24ndCBoYXZlIGEgY2hlY2thYmxlIHN0YXRlXG4gICAgICAgICc6bWF0Y2hlcyhbY2hlY2tlZF0sIDpub3QoOmNoZWNrYm94LCA6cmFkaW8pKScsXG4gICAgICAvLyBDb252ZXJ0IGVhY2ggb2YgdGhlIGVsZW1lbnRzIHRvIGl0cyB2YWx1ZShzKVxuICAgIClcbiAgICAubWFwPFxuICAgICAgQW55Tm9kZSxcbiAgICAgIHtcbiAgICAgICAgbmFtZTogc3RyaW5nO1xuICAgICAgICB2YWx1ZTogc3RyaW5nO1xuICAgICAgfVxuICAgID4oKF8sIGVsZW0pID0+IHtcbiAgICAgIGNvbnN0ICRlbGVtID0gdGhpcy5fbWFrZShlbGVtKTtcbiAgICAgIGNvbnN0IG5hbWUgPSAkZWxlbS5hdHRyKCduYW1lJykgYXMgc3RyaW5nOyAvLyBXZSBoYXZlIGZpbHRlcmVkIGZvciBlbGVtZW50cyB3aXRoIGEgbmFtZSBiZWZvcmUuXG4gICAgICAvLyBJZiB0aGVyZSBpcyBubyB2YWx1ZSBzZXQgKGUuZy4gYHVuZGVmaW5lZGAsIGBudWxsYCksIHRoZW4gZGVmYXVsdCB2YWx1ZSB0byBlbXB0eVxuICAgICAgY29uc3QgdmFsdWUgPSAkZWxlbS52YWwoKSA/PyAnJztcblxuICAgICAgLy8gSWYgd2UgaGF2ZSBhbiBhcnJheSBvZiB2YWx1ZXMgKGUuZy4gYDxzZWxlY3QgbXVsdGlwbGU+YCksIHJldHVybiBhbiBhcnJheSBvZiBrZXkvdmFsdWUgcGFpcnNcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlKSkge1xuICAgICAgICByZXR1cm4gdmFsdWUubWFwKCh2YWwpID0+XG4gICAgICAgICAgLypcbiAgICAgICAgICAgKiBXZSB0cmltIHJlcGxhY2UgYW55IGxpbmUgZW5kaW5ncyAoZS5nLiBgXFxyYCBvciBgXFxyXFxuYCB3aXRoIGBcXHJcXG5gKSB0byBndWFyYW50ZWUgY29uc2lzdGVuY3kgYWNyb3NzIHBsYXRmb3Jtc1xuICAgICAgICAgICAqIFRoZXNlIGNhbiBvY2N1ciBpbnNpZGUgb2YgYDx0ZXh0YXJlYT4nc2BcbiAgICAgICAgICAgKi9cbiAgICAgICAgICAoeyBuYW1lLCB2YWx1ZTogdmFsLnJlcGxhY2UockNSTEYsICdcXHJcXG4nKSB9KSxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIC8vIE90aGVyd2lzZSAoZS5nLiBgPGlucHV0IHR5cGU9XCJ0ZXh0XCI+YCwgcmV0dXJuIG9ubHkgb25lIGtleS92YWx1ZSBwYWlyXG4gICAgICByZXR1cm4geyBuYW1lLCB2YWx1ZTogdmFsdWUucmVwbGFjZShyQ1JMRiwgJ1xcclxcbicpIH07XG4gICAgfSlcbiAgICAudG9BcnJheSgpO1xufVxuIiwgImltcG9ydCB0eXBlIHsgQW55Tm9kZSwgRWxlbWVudCB9IGZyb20gJ2RvbWhhbmRsZXInO1xuaW1wb3J0IHR5cGUgeyBDaGVlcmlvIH0gZnJvbSAnLi4vY2hlZXJpby5qcyc7XG5pbXBvcnQgdHlwZSB7IHByb3AgfSBmcm9tICcuL2F0dHJpYnV0ZXMuanMnO1xuXG50eXBlIEV4dHJhY3REZXNjcmlwdG9yRm4gPSAoXG4gIGVsOiBFbGVtZW50LFxuICBrZXk6IHN0cmluZyxcbiAgLy8gVE9ETzogVGhpcyBjb3VsZCBiZSB0eXBlZCB3aXRoIEV4dHJhY3RlZE1hcFxuICBvYmo6IFJlY29yZDxzdHJpbmcsIHVua25vd24+LFxuKSA9PiB1bmtub3duO1xuXG5pbnRlcmZhY2UgRXh0cmFjdERlc2NyaXB0b3Ige1xuICBzZWxlY3Rvcjogc3RyaW5nO1xuICB2YWx1ZT86IHN0cmluZyB8IEV4dHJhY3REZXNjcmlwdG9yRm4gfCBFeHRyYWN0TWFwO1xufVxuXG50eXBlIEV4dHJhY3RWYWx1ZSA9IHN0cmluZyB8IEV4dHJhY3REZXNjcmlwdG9yIHwgW3N0cmluZyB8IEV4dHJhY3REZXNjcmlwdG9yXTtcblxuZXhwb3J0IGludGVyZmFjZSBFeHRyYWN0TWFwIHtcbiAgW2tleTogc3RyaW5nXTogRXh0cmFjdFZhbHVlO1xufVxuXG50eXBlIEV4dHJhY3RlZFZhbHVlPFYgZXh0ZW5kcyBFeHRyYWN0VmFsdWUsIE0gZXh0ZW5kcyBFeHRyYWN0TWFwPiA9IFYgZXh0ZW5kcyBbXG4gIHN0cmluZyB8IEV4dHJhY3REZXNjcmlwdG9yLFxuXVxuICA/IE5vbk51bGxhYmxlPEV4dHJhY3RlZFZhbHVlPFZbMF0sIE0+PltdXG4gIDogViBleHRlbmRzIHN0cmluZ1xuICAgID8gc3RyaW5nIHwgdW5kZWZpbmVkXG4gICAgOiBWIGV4dGVuZHMgRXh0cmFjdERlc2NyaXB0b3JcbiAgICAgID8gVlsndmFsdWUnXSBleHRlbmRzIEV4dHJhY3RNYXBcbiAgICAgICAgPyBFeHRyYWN0ZWRNYXA8VlsndmFsdWUnXT4gfCB1bmRlZmluZWRcbiAgICAgICAgOiBWWyd2YWx1ZSddIGV4dGVuZHMgRXh0cmFjdERlc2NyaXB0b3JGblxuICAgICAgICAgID8gUmV0dXJuVHlwZTxWWyd2YWx1ZSddPiB8IHVuZGVmaW5lZFxuICAgICAgICAgIDogUmV0dXJuVHlwZTx0eXBlb2YgcHJvcD4gfCB1bmRlZmluZWRcbiAgICAgIDogbmV2ZXI7XG5cbmV4cG9ydCB0eXBlIEV4dHJhY3RlZE1hcDxNIGV4dGVuZHMgRXh0cmFjdE1hcD4gPSB7XG4gIFtrZXkgaW4ga2V5b2YgTV06IEV4dHJhY3RlZFZhbHVlPE1ba2V5XSwgTT47XG59O1xuXG5mdW5jdGlvbiBnZXRFeHRyYWN0RGVzY3IoXG4gIGRlc2NyOiBzdHJpbmcgfCBFeHRyYWN0RGVzY3JpcHRvcixcbik6IFJlcXVpcmVkPEV4dHJhY3REZXNjcmlwdG9yPiB7XG4gIGlmICh0eXBlb2YgZGVzY3IgPT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIHsgc2VsZWN0b3I6IGRlc2NyLCB2YWx1ZTogJ3RleHRDb250ZW50JyB9O1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBzZWxlY3RvcjogZGVzY3Iuc2VsZWN0b3IsXG4gICAgdmFsdWU6IGRlc2NyLnZhbHVlID8/ICd0ZXh0Q29udGVudCcsXG4gIH07XG59XG5cbi8qKlxuICogRXh0cmFjdCBtdWx0aXBsZSB2YWx1ZXMgZnJvbSBhIGRvY3VtZW50LCBhbmQgc3RvcmUgdGhlbSBpbiBhbiBvYmplY3QuXG4gKlxuICogQHBhcmFtIG1hcCAtIEFuIG9iamVjdCBjb250YWluaW5nIGtleS12YWx1ZSBwYWlycy4gVGhlIGtleXMgYXJlIHRoZSBuYW1lcyBvZlxuICogICB0aGUgcHJvcGVydGllcyB0byBiZSBjcmVhdGVkIG9uIHRoZSBvYmplY3QsIGFuZCB0aGUgdmFsdWVzIGFyZSB0aGVcbiAqICAgc2VsZWN0b3JzIHRvIGJlIHVzZWQgdG8gZXh0cmFjdCB0aGUgdmFsdWVzLlxuICogQHJldHVybnMgQW4gb2JqZWN0IGNvbnRhaW5pbmcgdGhlIGV4dHJhY3RlZCB2YWx1ZXMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBleHRyYWN0PE0gZXh0ZW5kcyBFeHRyYWN0TWFwLCBUIGV4dGVuZHMgQW55Tm9kZT4oXG4gIHRoaXM6IENoZWVyaW88VD4sXG4gIG1hcDogTSxcbik6IEV4dHJhY3RlZE1hcDxNPiB7XG4gIGNvbnN0IHJldDogUmVjb3JkPHN0cmluZywgdW5rbm93bj4gPSB7fTtcblxuICBmb3IgKGNvbnN0IGtleSBpbiBtYXApIHtcbiAgICBjb25zdCBkZXNjciA9IG1hcFtrZXldO1xuICAgIGNvbnN0IGlzQXJyYXkgPSBBcnJheS5pc0FycmF5KGRlc2NyKTtcblxuICAgIGNvbnN0IHsgc2VsZWN0b3IsIHZhbHVlIH0gPSBnZXRFeHRyYWN0RGVzY3IoaXNBcnJheSA/IGRlc2NyWzBdIDogZGVzY3IpO1xuXG4gICAgY29uc3QgZm46IEV4dHJhY3REZXNjcmlwdG9yRm4gPVxuICAgICAgdHlwZW9mIHZhbHVlID09PSAnZnVuY3Rpb24nXG4gICAgICAgID8gdmFsdWVcbiAgICAgICAgOiB0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnXG4gICAgICAgICAgPyAoZWw6IEVsZW1lbnQpID0+IHRoaXMuX21ha2UoZWwpLnByb3AodmFsdWUpXG4gICAgICAgICAgOiAoZWw6IEVsZW1lbnQpID0+IHRoaXMuX21ha2UoZWwpLmV4dHJhY3QodmFsdWUpO1xuXG4gICAgaWYgKGlzQXJyYXkpIHtcbiAgICAgIHJldFtrZXldID0gdGhpcy5fZmluZEJ5U2VsZWN0b3Ioc2VsZWN0b3IsIE51bWJlci5QT1NJVElWRV9JTkZJTklUWSlcbiAgICAgICAgLm1hcCgoXywgZWwpID0+IGZuKGVsLCBrZXksIHJldCkpXG4gICAgICAgIC5nZXQoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgJCA9IHRoaXMuX2ZpbmRCeVNlbGVjdG9yKHNlbGVjdG9yLCAxKTtcbiAgICAgIHJldFtrZXldID0gJC5sZW5ndGggPiAwID8gZm4oJFswXSwga2V5LCByZXQpIDogdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiByZXQgYXMgRXh0cmFjdGVkTWFwPE0+O1xufVxuIiwgIi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnNhZmUtZGVjbGFyYXRpb24tbWVyZ2luZyAqL1xuaW1wb3J0IHR5cGUgeyBJbnRlcm5hbE9wdGlvbnMgfSBmcm9tICcuL29wdGlvbnMuanMnO1xuaW1wb3J0IHR5cGUgeyBBbnlOb2RlLCBEb2N1bWVudCwgUGFyZW50Tm9kZSB9IGZyb20gJ2RvbWhhbmRsZXInO1xuaW1wb3J0IHR5cGUgeyBCYXNpY0FjY2VwdGVkRWxlbXMgfSBmcm9tICcuL3R5cGVzLmpzJztcblxuaW1wb3J0ICogYXMgQXR0cmlidXRlcyBmcm9tICcuL2FwaS9hdHRyaWJ1dGVzLmpzJztcbmltcG9ydCAqIGFzIFRyYXZlcnNpbmcgZnJvbSAnLi9hcGkvdHJhdmVyc2luZy5qcyc7XG5pbXBvcnQgKiBhcyBNYW5pcHVsYXRpb24gZnJvbSAnLi9hcGkvbWFuaXB1bGF0aW9uLmpzJztcbmltcG9ydCAqIGFzIENzcyBmcm9tICcuL2FwaS9jc3MuanMnO1xuaW1wb3J0ICogYXMgRm9ybXMgZnJvbSAnLi9hcGkvZm9ybXMuanMnO1xuaW1wb3J0ICogYXMgRXh0cmFjdCBmcm9tICcuL2FwaS9leHRyYWN0LmpzJztcblxudHlwZSBNZXRob2RzVHlwZSA9IHR5cGVvZiBBdHRyaWJ1dGVzICZcbiAgdHlwZW9mIFRyYXZlcnNpbmcgJlxuICB0eXBlb2YgTWFuaXB1bGF0aW9uICZcbiAgdHlwZW9mIENzcyAmXG4gIHR5cGVvZiBGb3JtcyAmXG4gIHR5cGVvZiBFeHRyYWN0O1xuXG4vKipcbiAqIFRoZSBjaGVlcmlvIGNsYXNzIGlzIHRoZSBjZW50cmFsIGNsYXNzIG9mIHRoZSBsaWJyYXJ5LiBJdCB3cmFwcyBhIHNldCBvZlxuICogZWxlbWVudHMgYW5kIHByb3ZpZGVzIGFuIEFQSSBmb3IgdHJhdmVyc2luZywgbW9kaWZ5aW5nLCBhbmQgaW50ZXJhY3Rpbmcgd2l0aFxuICogdGhlIHNldC5cbiAqXG4gKiBMb2FkaW5nIGEgZG9jdW1lbnQgd2lsbCByZXR1cm4gdGhlIENoZWVyaW8gY2xhc3MgYm91bmQgdG8gdGhlIHJvb3QgZWxlbWVudCBvZlxuICogdGhlIGRvY3VtZW50LiBUaGUgY2xhc3Mgd2lsbCBiZSBpbnN0YW50aWF0ZWQgd2hlbiBxdWVyeWluZyB0aGUgZG9jdW1lbnQgKHdoZW5cbiAqIGNhbGxpbmcgYCQoJ3NlbGVjdG9yJylgKS5cbiAqXG4gKiBAZXhhbXBsZSBUaGlzIGlzIHRoZSBIVE1MIG1hcmt1cCB3ZSB3aWxsIGJlIHVzaW5nIGluIGFsbCBvZiB0aGUgQVBJIGV4YW1wbGVzOlxuICpcbiAqIGBgYGh0bWxcbiAqIDx1bCBpZD1cImZydWl0c1wiPlxuICogICA8bGkgY2xhc3M9XCJhcHBsZVwiPkFwcGxlPC9saT5cbiAqICAgPGxpIGNsYXNzPVwib3JhbmdlXCI+T3JhbmdlPC9saT5cbiAqICAgPGxpIGNsYXNzPVwicGVhclwiPlBlYXI8L2xpPlxuICogPC91bD5cbiAqIGBgYFxuICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQ2hlZXJpbzxUPiBpbXBsZW1lbnRzIEFycmF5TGlrZTxUPiB7XG4gIGxlbmd0aCA9IDA7XG4gIFtpbmRleDogbnVtYmVyXTogVDtcblxuICBvcHRpb25zOiBJbnRlcm5hbE9wdGlvbnM7XG4gIC8qKlxuICAgKiBUaGUgcm9vdCBvZiB0aGUgZG9jdW1lbnQuIENhbiBiZSBzZXQgYnkgdXNpbmcgdGhlIGByb290YCBhcmd1bWVudCBvZiB0aGVcbiAgICogY29uc3RydWN0b3IuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfcm9vdDogQ2hlZXJpbzxEb2N1bWVudD4gfCBudWxsO1xuXG4gIC8qKlxuICAgKiBJbnN0YW5jZSBvZiBjaGVlcmlvLiBNZXRob2RzIGFyZSBzcGVjaWZpZWQgaW4gdGhlIG1vZHVsZXMuIFVzYWdlIG9mIHRoaXNcbiAgICogY29uc3RydWN0b3IgaXMgbm90IHJlY29tbWVuZGVkLiBQbGVhc2UgdXNlIGAkLmxvYWRgIGluc3RlYWQuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqIEBwYXJhbSBlbGVtZW50cyAtIFRoZSBuZXcgc2VsZWN0aW9uLlxuICAgKiBAcGFyYW0gcm9vdCAtIFNldHMgdGhlIHJvb3Qgbm9kZS5cbiAgICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25zIGZvciB0aGUgaW5zdGFuY2UuXG4gICAqL1xuICBjb25zdHJ1Y3RvcihcbiAgICBlbGVtZW50czogQXJyYXlMaWtlPFQ+IHwgdW5kZWZpbmVkLFxuICAgIHJvb3Q6IENoZWVyaW88RG9jdW1lbnQ+IHwgbnVsbCxcbiAgICBvcHRpb25zOiBJbnRlcm5hbE9wdGlvbnMsXG4gICkge1xuICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7XG4gICAgdGhpcy5fcm9vdCA9IHJvb3Q7XG5cbiAgICBpZiAoZWxlbWVudHMpIHtcbiAgICAgIGZvciAobGV0IGlkeCA9IDA7IGlkeCA8IGVsZW1lbnRzLmxlbmd0aDsgaWR4KyspIHtcbiAgICAgICAgdGhpc1tpZHhdID0gZWxlbWVudHNbaWR4XTtcbiAgICAgIH1cbiAgICAgIHRoaXMubGVuZ3RoID0gZWxlbWVudHMubGVuZ3RoO1xuICAgIH1cbiAgfVxuXG4gIHByZXZPYmplY3Q6IENoZWVyaW88YW55PiB8IHVuZGVmaW5lZDtcbiAgLyoqXG4gICAqIE1ha2UgYSBjaGVlcmlvIG9iamVjdC5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHBhcmFtIGRvbSAtIFRoZSBjb250ZW50cyBvZiB0aGUgbmV3IG9iamVjdC5cbiAgICogQHBhcmFtIGNvbnRleHQgLSBUaGUgY29udGV4dCBvZiB0aGUgbmV3IG9iamVjdC5cbiAgICogQHJldHVybnMgVGhlIG5ldyBjaGVlcmlvIG9iamVjdC5cbiAgICovXG4gIGFic3RyYWN0IF9tYWtlPFQ+KFxuICAgIGRvbTogQXJyYXlMaWtlPFQ+IHwgVCB8IHN0cmluZyxcbiAgICBjb250ZXh0PzogQmFzaWNBY2NlcHRlZEVsZW1zPEFueU5vZGU+LFxuICApOiBDaGVlcmlvPFQ+O1xuXG4gIC8qKlxuICAgKiBQYXJzZXMgc29tZSBjb250ZW50LlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0gY29udGVudCAtIENvbnRlbnQgdG8gcGFyc2UuXG4gICAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9ucyBmb3IgcGFyc2luZy5cbiAgICogQHBhcmFtIGlzRG9jdW1lbnQgLSBBbGxvd3MgcGFyc2VyIHRvIGJlIHN3aXRjaGVkIHRvIGZyYWdtZW50IG1vZGUuXG4gICAqIEByZXR1cm5zIEEgZG9jdW1lbnQgY29udGFpbmluZyB0aGUgYGNvbnRlbnRgLlxuICAgKi9cbiAgYWJzdHJhY3QgX3BhcnNlKFxuICAgIGNvbnRlbnQ6IHN0cmluZyB8IERvY3VtZW50IHwgQW55Tm9kZSB8IEFueU5vZGVbXSB8IEJ1ZmZlcixcbiAgICBvcHRpb25zOiBJbnRlcm5hbE9wdGlvbnMsXG4gICAgaXNEb2N1bWVudDogYm9vbGVhbixcbiAgICBjb250ZXh0OiBQYXJlbnROb2RlIHwgbnVsbCxcbiAgKTogRG9jdW1lbnQ7XG5cbiAgLyoqXG4gICAqIFJlbmRlciBhbiBlbGVtZW50IG9yIGEgc2V0IG9mIGVsZW1lbnRzLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKiBAcGFyYW0gZG9tIC0gRE9NIHRvIHJlbmRlci5cbiAgICogQHJldHVybnMgVGhlIHJlbmRlcmVkIERPTS5cbiAgICovXG4gIGFic3RyYWN0IF9yZW5kZXIoZG9tOiBBbnlOb2RlIHwgQXJyYXlMaWtlPEFueU5vZGU+KTogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENoZWVyaW88VD4gZXh0ZW5kcyBNZXRob2RzVHlwZSwgSXRlcmFibGU8VD4ge1xuICBjaGVlcmlvOiAnW2NoZWVyaW8gb2JqZWN0XSc7XG5cbiAgc3BsaWNlOiB0eXBlb2YgQXJyYXkucHJvdG90eXBlLnNwbGljZTtcbn1cblxuLyoqIFNldCBhIHNpZ25hdHVyZSBvZiB0aGUgb2JqZWN0LiAqL1xuQ2hlZXJpby5wcm90b3R5cGUuY2hlZXJpbyA9ICdbY2hlZXJpbyBvYmplY3RdJztcblxuLypcbiAqIE1ha2UgY2hlZXJpbyBhbiBhcnJheS1saWtlIG9iamVjdFxuICovXG5DaGVlcmlvLnByb3RvdHlwZS5zcGxpY2UgPSBBcnJheS5wcm90b3R5cGUuc3BsaWNlO1xuXG4vLyBTdXBwb3J0IGZvciAoY29uc3QgZWxlbWVudCBvZiAkKC4uLikpIGl0ZXJhdGlvbjpcbkNoZWVyaW8ucHJvdG90eXBlW1N5bWJvbC5pdGVyYXRvcl0gPSBBcnJheS5wcm90b3R5cGVbU3ltYm9sLml0ZXJhdG9yXTtcblxuLy8gUGx1ZyBpbiB0aGUgQVBJXG5PYmplY3QuYXNzaWduKFxuICBDaGVlcmlvLnByb3RvdHlwZSxcbiAgQXR0cmlidXRlcyxcbiAgVHJhdmVyc2luZyxcbiAgTWFuaXB1bGF0aW9uLFxuICBDc3MsXG4gIEZvcm1zLFxuICBFeHRyYWN0LFxuKTtcbiIsICJpbXBvcnQge1xuICB0eXBlIENoZWVyaW9PcHRpb25zLFxuICB0eXBlIEludGVybmFsT3B0aW9ucyxcbiAgZmxhdHRlbk9wdGlvbnMsXG59IGZyb20gJy4vb3B0aW9ucy5qcyc7XG5pbXBvcnQgKiBhcyBzdGF0aWNNZXRob2RzIGZyb20gJy4vc3RhdGljLmpzJztcbmltcG9ydCB7IENoZWVyaW8gfSBmcm9tICcuL2NoZWVyaW8uanMnO1xuaW1wb3J0IHsgaXNIdG1sLCBpc0NoZWVyaW8gfSBmcm9tICcuL3V0aWxzLmpzJztcbmltcG9ydCB0eXBlIHsgQW55Tm9kZSwgRG9jdW1lbnQsIEVsZW1lbnQsIFBhcmVudE5vZGUgfSBmcm9tICdkb21oYW5kbGVyJztcbmltcG9ydCB0eXBlIHsgU2VsZWN0b3JUeXBlLCBCYXNpY0FjY2VwdGVkRWxlbXMgfSBmcm9tICcuL3R5cGVzLmpzJztcblxudHlwZSBTdGF0aWNUeXBlID0gdHlwZW9mIHN0YXRpY01ldGhvZHM7XG5cbi8qKlxuICogQSBxdWVyeWluZyBmdW5jdGlvbiwgYm91bmQgdG8gYSBkb2N1bWVudCBjcmVhdGVkIGZyb20gdGhlIHByb3ZpZGVkIG1hcmt1cC5cbiAqXG4gKiBBbHNvIHByb3ZpZGVzIHNldmVyYWwgaGVscGVyIG1ldGhvZHMgZm9yIGRlYWxpbmcgd2l0aCB0aGUgZG9jdW1lbnQgYXMgYVxuICogd2hvbGUuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ2hlZXJpb0FQSSBleHRlbmRzIFN0YXRpY1R5cGUge1xuICAvKipcbiAgICogVGhpcyBzZWxlY3RvciBtZXRob2QgaXMgdGhlIHN0YXJ0aW5nIHBvaW50IGZvciB0cmF2ZXJzaW5nIGFuZCBtYW5pcHVsYXRpbmdcbiAgICogdGhlIGRvY3VtZW50LiBMaWtlIGpRdWVyeSwgaXQncyB0aGUgcHJpbWFyeSBtZXRob2QgZm9yIHNlbGVjdGluZyBlbGVtZW50c1xuICAgKiBpbiB0aGUgZG9jdW1lbnQuXG4gICAqXG4gICAqIGBzZWxlY3RvcmAgc2VhcmNoZXMgd2l0aGluIHRoZSBgY29udGV4dGAgc2NvcGUsIHdoaWNoIHNlYXJjaGVzIHdpdGhpbiB0aGVcbiAgICogYHJvb3RgIHNjb3BlLlxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKlxuICAgKiBgYGBqc1xuICAgKiAkKCd1bCAucGVhcicpLmF0dHIoJ2NsYXNzJyk7XG4gICAqIC8vPT4gcGVhclxuICAgKlxuICAgKiAkKCdsaVtjbGFzcz1vcmFuZ2VdJykuaHRtbCgpO1xuICAgKiAvLz0+IE9yYW5nZVxuICAgKlxuICAgKiAkKCcuYXBwbGUnLCAnI2ZydWl0cycpLnRleHQoKTtcbiAgICogLy89PiBBcHBsZVxuICAgKiBgYGBcbiAgICpcbiAgICogT3B0aW9uYWxseSwgeW91IGNhbiBhbHNvIGxvYWQgSFRNTCBieSBwYXNzaW5nIHRoZSBzdHJpbmcgYXMgdGhlIHNlbGVjdG9yOlxuICAgKlxuICAgKiBgYGBqc1xuICAgKiAkKCc8dWwgaWQ9XCJmcnVpdHNcIj4uLi48L3VsPicpO1xuICAgKiBgYGBcbiAgICpcbiAgICogT3IgdGhlIGNvbnRleHQ6XG4gICAqXG4gICAqIGBgYGpzXG4gICAqICQoJ3VsJywgJzx1bCBpZD1cImZydWl0c1wiPi4uLjwvdWw+Jyk7XG4gICAqIGBgYFxuICAgKlxuICAgKiBPciBhcyB0aGUgcm9vdDpcbiAgICpcbiAgICogYGBganNcbiAgICogJCgnbGknLCAndWwnLCAnPHVsIGlkPVwiZnJ1aXRzXCI+Li4uPC91bD4nKTtcbiAgICogYGBgXG4gICAqXG4gICAqIEBwYXJhbSBzZWxlY3RvciAtIEVpdGhlciBhIHNlbGVjdG9yIHRvIGxvb2sgZm9yIHdpdGhpbiB0aGUgZG9jdW1lbnQsIG9yIHRoZVxuICAgKiAgIGNvbnRlbnRzIG9mIGEgbmV3IENoZWVyaW8gaW5zdGFuY2UuXG4gICAqIEBwYXJhbSBjb250ZXh0IC0gRWl0aGVyIGEgc2VsZWN0b3IgdG8gbG9vayBmb3Igd2l0aGluIHRoZSByb290LCBvciB0aGVcbiAgICogICBjb250ZW50cyBvZiB0aGUgZG9jdW1lbnQgdG8gcXVlcnkuXG4gICAqIEBwYXJhbSByb290IC0gT3B0aW9uYWwgSFRNTCBkb2N1bWVudCBzdHJpbmcuXG4gICAqL1xuICA8VCBleHRlbmRzIEFueU5vZGUsIFMgZXh0ZW5kcyBzdHJpbmc+KFxuICAgIHNlbGVjdG9yPzogUyB8IEJhc2ljQWNjZXB0ZWRFbGVtczxUPixcbiAgICBjb250ZXh0PzogQmFzaWNBY2NlcHRlZEVsZW1zPEFueU5vZGU+IHwgbnVsbCxcbiAgICByb290PzogQmFzaWNBY2NlcHRlZEVsZW1zPERvY3VtZW50PixcbiAgICBvcHRpb25zPzogQ2hlZXJpb09wdGlvbnMsXG4gICk6IENoZWVyaW88UyBleHRlbmRzIFNlbGVjdG9yVHlwZSA/IEVsZW1lbnQgOiBUPjtcblxuICAvKipcbiAgICogVGhlIHJvb3QgdGhlIGRvY3VtZW50IHdhcyBvcmlnaW5hbGx5IGxvYWRlZCB3aXRoLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX3Jvb3Q6IERvY3VtZW50O1xuXG4gIC8qKlxuICAgKiBUaGUgb3B0aW9ucyB0aGUgZG9jdW1lbnQgd2FzIG9yaWdpbmFsbHkgbG9hZGVkIHdpdGguXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfb3B0aW9uczogSW50ZXJuYWxPcHRpb25zO1xuXG4gIC8qKiBNaW1pYyBqUXVlcnkncyBwcm90b3R5cGUgYWxpYXMgZm9yIHBsdWdpbiBhdXRob3JzLiAqL1xuICBmbjogdHlwZW9mIENoZWVyaW8ucHJvdG90eXBlO1xuXG4gIC8qKlxuICAgKiBUaGUgYC5sb2FkYCBzdGF0aWMgbWV0aG9kIGRlZmluZWQgb24gdGhlIFwibG9hZGVkXCIgQ2hlZXJpbyBmYWN0b3J5IGZ1bmN0aW9uXG4gICAqIGlzIGRlcHJlY2F0ZWQuIFVzZXJzIGFyZSBlbmNvdXJhZ2VkIHRvIGluc3RlYWQgdXNlIHRoZSBgbG9hZGAgZnVuY3Rpb25cbiAgICogZXhwb3J0ZWQgYnkgdGhlIENoZWVyaW8gbW9kdWxlLlxuICAgKlxuICAgKiBAZGVwcmVjYXRlZCBVc2UgdGhlIGBsb2FkYCBmdW5jdGlvbiBleHBvcnRlZCBieSB0aGUgQ2hlZXJpbyBtb2R1bGUuXG4gICAqIEBjYXRlZ29yeSBEZXByZWNhdGVkXG4gICAqIEBleGFtcGxlXG4gICAqXG4gICAqIGBgYGpzXG4gICAqIGNvbnN0ICQgPSBjaGVlcmlvLmxvYWQoJzxoMT5IZWxsbywgPHNwYW4+d29ybGQ8L3NwYW4+LjwvaDE+Jyk7XG4gICAqIGBgYFxuICAgKi9cbiAgbG9hZDogUmV0dXJuVHlwZTx0eXBlb2YgZ2V0TG9hZD47XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRMb2FkKFxuICBwYXJzZTogdHlwZW9mIENoZWVyaW8ucHJvdG90eXBlLl9wYXJzZSxcbiAgcmVuZGVyOiAoXG4gICAgZG9tOiBBbnlOb2RlIHwgQXJyYXlMaWtlPEFueU5vZGU+LFxuICAgIG9wdGlvbnM6IEludGVybmFsT3B0aW9ucyxcbiAgKSA9PiBzdHJpbmcsXG4pIHtcbiAgLyoqXG4gICAqIENyZWF0ZSBhIHF1ZXJ5aW5nIGZ1bmN0aW9uLCBib3VuZCB0byBhIGRvY3VtZW50IGNyZWF0ZWQgZnJvbSB0aGUgcHJvdmlkZWRcbiAgICogbWFya3VwLlxuICAgKlxuICAgKiBOb3RlIHRoYXQgc2ltaWxhciB0byB3ZWIgYnJvd3NlciBjb250ZXh0cywgdGhpcyBvcGVyYXRpb24gbWF5IGludHJvZHVjZVxuICAgKiBgPGh0bWw+YCwgYDxoZWFkPmAsIGFuZCBgPGJvZHk+YCBlbGVtZW50czsgc2V0IGBpc0RvY3VtZW50YCB0byBgZmFsc2VgIHRvXG4gICAqIHN3aXRjaCB0byBmcmFnbWVudCBtb2RlIGFuZCBkaXNhYmxlIHRoaXMuXG4gICAqXG4gICAqIEBwYXJhbSBjb250ZW50IC0gTWFya3VwIHRvIGJlIGxvYWRlZC5cbiAgICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25zIGZvciB0aGUgY3JlYXRlZCBpbnN0YW5jZS5cbiAgICogQHBhcmFtIGlzRG9jdW1lbnQgLSBBbGxvd3MgcGFyc2VyIHRvIGJlIHN3aXRjaGVkIHRvIGZyYWdtZW50IG1vZGUuXG4gICAqIEByZXR1cm5zIFRoZSBsb2FkZWQgZG9jdW1lbnQuXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vY2hlZXJpby5qcy5vcmcjbG9hZGluZ30gZm9yIGFkZGl0aW9uYWwgdXNhZ2UgaW5mb3JtYXRpb24uXG4gICAqL1xuICByZXR1cm4gZnVuY3Rpb24gbG9hZChcbiAgICBjb250ZW50OiBzdHJpbmcgfCBBbnlOb2RlIHwgQW55Tm9kZVtdIHwgQnVmZmVyLFxuICAgIG9wdGlvbnM/OiBDaGVlcmlvT3B0aW9ucyB8IG51bGwsXG4gICAgaXNEb2N1bWVudCA9IHRydWUsXG4gICk6IENoZWVyaW9BUEkge1xuICAgIGlmICgoY29udGVudCBhcyBzdHJpbmcgfCBudWxsKSA9PSBudWxsKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2NoZWVyaW8ubG9hZCgpIGV4cGVjdHMgYSBzdHJpbmcnKTtcbiAgICB9XG5cbiAgICBjb25zdCBpbnRlcm5hbE9wdHMgPSBmbGF0dGVuT3B0aW9ucyhvcHRpb25zKTtcbiAgICBjb25zdCBpbml0aWFsUm9vdCA9IHBhcnNlKGNvbnRlbnQsIGludGVybmFsT3B0cywgaXNEb2N1bWVudCwgbnVsbCk7XG5cbiAgICAvKipcbiAgICAgKiBDcmVhdGUgYW4gZXh0ZW5kZWQgY2xhc3MgaGVyZSwgc28gdGhhdCBleHRlbnNpb25zIG9ubHkgbGl2ZSBvbiBvbmVcbiAgICAgKiBpbnN0YW5jZS5cbiAgICAgKi9cbiAgICBjbGFzcyBMb2FkZWRDaGVlcmlvPFQ+IGV4dGVuZHMgQ2hlZXJpbzxUPiB7XG4gICAgICBfbWFrZTxUPihcbiAgICAgICAgc2VsZWN0b3I/OiBBcnJheUxpa2U8VD4gfCBUIHwgc3RyaW5nLFxuICAgICAgICBjb250ZXh0PzogQmFzaWNBY2NlcHRlZEVsZW1zPEFueU5vZGU+IHwgbnVsbCxcbiAgICAgICk6IENoZWVyaW88VD4ge1xuICAgICAgICBjb25zdCBjaGVlcmlvID0gaW5pdGlhbGl6ZShzZWxlY3RvciwgY29udGV4dCk7XG4gICAgICAgIGNoZWVyaW8ucHJldk9iamVjdCA9IHRoaXM7XG5cbiAgICAgICAgcmV0dXJuIGNoZWVyaW87XG4gICAgICB9XG5cbiAgICAgIF9wYXJzZShcbiAgICAgICAgY29udGVudDogc3RyaW5nIHwgRG9jdW1lbnQgfCBBbnlOb2RlIHwgQW55Tm9kZVtdIHwgQnVmZmVyLFxuICAgICAgICBvcHRpb25zOiBJbnRlcm5hbE9wdGlvbnMsXG4gICAgICAgIGlzRG9jdW1lbnQ6IGJvb2xlYW4sXG4gICAgICAgIGNvbnRleHQ6IFBhcmVudE5vZGUgfCBudWxsLFxuICAgICAgKSB7XG4gICAgICAgIHJldHVybiBwYXJzZShjb250ZW50LCBvcHRpb25zLCBpc0RvY3VtZW50LCBjb250ZXh0KTtcbiAgICAgIH1cblxuICAgICAgX3JlbmRlcihkb206IEFueU5vZGUgfCBBcnJheUxpa2U8QW55Tm9kZT4pOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gcmVuZGVyKGRvbSwgdGhpcy5vcHRpb25zKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpbml0aWFsaXplPFQgPSBBbnlOb2RlLCBTIGV4dGVuZHMgc3RyaW5nID0gc3RyaW5nPihcbiAgICAgIHNlbGVjdG9yPzogQXJyYXlMaWtlPFQ+IHwgVCB8IFMsXG4gICAgICBjb250ZXh0PzogQmFzaWNBY2NlcHRlZEVsZW1zPEFueU5vZGU+IHwgbnVsbCxcbiAgICAgIHJvb3Q6IEJhc2ljQWNjZXB0ZWRFbGVtczxEb2N1bWVudD4gPSBpbml0aWFsUm9vdCxcbiAgICAgIG9wdHM/OiBDaGVlcmlvT3B0aW9ucyxcbiAgICApOiBDaGVlcmlvPFMgZXh0ZW5kcyBTZWxlY3RvclR5cGUgPyBFbGVtZW50IDogVD4ge1xuICAgICAgdHlwZSBSZXN1bHQgPSBTIGV4dGVuZHMgU2VsZWN0b3JUeXBlID8gRWxlbWVudCA6IFQ7XG5cbiAgICAgIC8vICQoJClcbiAgICAgIGlmIChzZWxlY3RvciAmJiBpc0NoZWVyaW88UmVzdWx0PihzZWxlY3RvcikpIHJldHVybiBzZWxlY3RvcjtcblxuICAgICAgY29uc3Qgb3B0aW9ucyA9IGZsYXR0ZW5PcHRpb25zKG9wdHMsIGludGVybmFsT3B0cyk7XG4gICAgICBjb25zdCByID1cbiAgICAgICAgdHlwZW9mIHJvb3QgPT09ICdzdHJpbmcnXG4gICAgICAgICAgPyBbcGFyc2Uocm9vdCwgb3B0aW9ucywgZmFsc2UsIG51bGwpXVxuICAgICAgICAgIDogJ2xlbmd0aCcgaW4gcm9vdFxuICAgICAgICAgICAgPyByb290XG4gICAgICAgICAgICA6IFtyb290XTtcbiAgICAgIGNvbnN0IHJvb3RJbnN0YW5jZSA9IGlzQ2hlZXJpbzxEb2N1bWVudD4ocilcbiAgICAgICAgPyByXG4gICAgICAgIDogbmV3IExvYWRlZENoZWVyaW88RG9jdW1lbnQ+KHIsIG51bGwsIG9wdGlvbnMpO1xuICAgICAgLy8gQWRkIGEgY3ljbGljIHJlZmVyZW5jZSwgc28gdGhhdCBjYWxsaW5nIG1ldGhvZHMgb24gYF9yb290YCBuZXZlciBmYWlscy5cbiAgICAgIHJvb3RJbnN0YW5jZS5fcm9vdCA9IHJvb3RJbnN0YW5jZTtcblxuICAgICAgLy8gJCgpLCAkKG51bGwpLCAkKHVuZGVmaW5lZCksICQoZmFsc2UpXG4gICAgICBpZiAoIXNlbGVjdG9yKSB7XG4gICAgICAgIHJldHVybiBuZXcgTG9hZGVkQ2hlZXJpbzxSZXN1bHQ+KHVuZGVmaW5lZCwgcm9vdEluc3RhbmNlLCBvcHRpb25zKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZWxlbWVudHM6IEFueU5vZGVbXSB8IHVuZGVmaW5lZCA9XG4gICAgICAgIHR5cGVvZiBzZWxlY3RvciA9PT0gJ3N0cmluZycgJiYgaXNIdG1sKHNlbGVjdG9yKVxuICAgICAgICAgID8gLy8gJCg8aHRtbD4pXG4gICAgICAgICAgICBwYXJzZShzZWxlY3Rvciwgb3B0aW9ucywgZmFsc2UsIG51bGwpLmNoaWxkcmVuXG4gICAgICAgICAgOiBpc05vZGUoc2VsZWN0b3IpXG4gICAgICAgICAgICA/IC8vICQoZG9tKVxuICAgICAgICAgICAgICBbc2VsZWN0b3JdXG4gICAgICAgICAgICA6IEFycmF5LmlzQXJyYXkoc2VsZWN0b3IpXG4gICAgICAgICAgICAgID8gLy8gJChbZG9tXSlcbiAgICAgICAgICAgICAgICBzZWxlY3RvclxuICAgICAgICAgICAgICA6IHVuZGVmaW5lZDtcblxuICAgICAgY29uc3QgaW5zdGFuY2UgPSBuZXcgTG9hZGVkQ2hlZXJpbyhlbGVtZW50cywgcm9vdEluc3RhbmNlLCBvcHRpb25zKTtcblxuICAgICAgaWYgKGVsZW1lbnRzKSB7XG4gICAgICAgIHJldHVybiBpbnN0YW5jZSBhcyBhbnk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2Ygc2VsZWN0b3IgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1VuZXhwZWN0ZWQgdHlwZSBvZiBzZWxlY3RvcicpO1xuICAgICAgfVxuXG4gICAgICAvLyBXZSBrbm93IHRoYXQgb3VyIHNlbGVjdG9yIGlzIGEgc3RyaW5nIG5vdy5cbiAgICAgIGxldCBzZWFyY2ggPSBzZWxlY3RvcjtcblxuICAgICAgY29uc3Qgc2VhcmNoQ29udGV4dDogQ2hlZXJpbzxBbnlOb2RlPiB8IHVuZGVmaW5lZCA9IGNvbnRleHRcbiAgICAgICAgPyAvLyBJZiB3ZSBkb24ndCBoYXZlIGEgY29udGV4dCwgbWF5YmUgd2UgaGF2ZSBhIHJvb3QsIGZyb20gbG9hZGluZ1xuICAgICAgICAgIHR5cGVvZiBjb250ZXh0ID09PSAnc3RyaW5nJ1xuICAgICAgICAgID8gaXNIdG1sKGNvbnRleHQpXG4gICAgICAgICAgICA/IC8vICQoJ2xpJywgJzx1bD4uLi48L3VsPicpXG4gICAgICAgICAgICAgIG5ldyBMb2FkZWRDaGVlcmlvPERvY3VtZW50PihcbiAgICAgICAgICAgICAgICBbcGFyc2UoY29udGV4dCwgb3B0aW9ucywgZmFsc2UsIG51bGwpXSxcbiAgICAgICAgICAgICAgICByb290SW5zdGFuY2UsXG4gICAgICAgICAgICAgICAgb3B0aW9ucyxcbiAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgOiAvLyAkKCdsaScsICd1bCcpXG4gICAgICAgICAgICAgICgoc2VhcmNoID0gYCR7Y29udGV4dH0gJHtzZWFyY2h9YCBhcyBTKSwgcm9vdEluc3RhbmNlKVxuICAgICAgICAgIDogaXNDaGVlcmlvPEFueU5vZGU+KGNvbnRleHQpXG4gICAgICAgICAgICA/IC8vICQoJ2xpJywgJClcbiAgICAgICAgICAgICAgY29udGV4dFxuICAgICAgICAgICAgOiAvLyAkKCdsaScsIG5vZGUpLCAkKCdsaScsIFtub2Rlc10pXG4gICAgICAgICAgICAgIG5ldyBMb2FkZWRDaGVlcmlvPEFueU5vZGU+KFxuICAgICAgICAgICAgICAgIEFycmF5LmlzQXJyYXkoY29udGV4dCkgPyBjb250ZXh0IDogW2NvbnRleHRdLFxuICAgICAgICAgICAgICAgIHJvb3RJbnN0YW5jZSxcbiAgICAgICAgICAgICAgICBvcHRpb25zLFxuICAgICAgICAgICAgICApXG4gICAgICAgIDogcm9vdEluc3RhbmNlO1xuXG4gICAgICAvLyBJZiB3ZSBzdGlsbCBkb24ndCBoYXZlIGEgY29udGV4dCwgcmV0dXJuXG4gICAgICBpZiAoIXNlYXJjaENvbnRleHQpIHJldHVybiBpbnN0YW5jZSBhcyBhbnk7XG5cbiAgICAgIC8qXG4gICAgICAgKiAjaWQsIC5jbGFzcywgdGFnXG4gICAgICAgKi9cbiAgICAgIHJldHVybiBzZWFyY2hDb250ZXh0LmZpbmQoc2VhcmNoKSBhcyBDaGVlcmlvPFJlc3VsdD47XG4gICAgfVxuXG4gICAgLy8gQWRkIGluIHN0YXRpYyBtZXRob2RzICYgcHJvcGVydGllc1xuICAgIE9iamVjdC5hc3NpZ24oaW5pdGlhbGl6ZSwgc3RhdGljTWV0aG9kcywge1xuICAgICAgbG9hZCxcbiAgICAgIC8vIGBfcm9vdGAgYW5kIGBfb3B0aW9uc2AgYXJlIHVzZWQgaW4gc3RhdGljIG1ldGhvZHMuXG4gICAgICBfcm9vdDogaW5pdGlhbFJvb3QsXG4gICAgICBfb3B0aW9uczogaW50ZXJuYWxPcHRzLFxuICAgICAgLy8gQWRkIGBmbmAgZm9yIHBsdWdpbnNcbiAgICAgIGZuOiBMb2FkZWRDaGVlcmlvLnByb3RvdHlwZSxcbiAgICAgIC8vIEFkZCB0aGUgcHJvdG90eXBlIGhlcmUgdG8gbWFpbnRhaW4gYGluc3RhbmNlb2ZgIGJlaGF2aW9yLlxuICAgICAgcHJvdG90eXBlOiBMb2FkZWRDaGVlcmlvLnByb3RvdHlwZSxcbiAgICB9KTtcblxuICAgIHJldHVybiBpbml0aWFsaXplIGFzIENoZWVyaW9BUEk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIGlzTm9kZShvYmo6IGFueSk6IG9iaiBpcyBBbnlOb2RlIHtcbiAgcmV0dXJuIChcbiAgICAhIW9iai5uYW1lIHx8XG4gICAgb2JqLnR5cGUgPT09ICdyb290JyB8fFxuICAgIG9iai50eXBlID09PSAndGV4dCcgfHxcbiAgICBvYmoudHlwZSA9PT0gJ2NvbW1lbnQnXG4gICk7XG59XG4iLCAiY29uc3QgVU5ERUZJTkVEX0NPREVfUE9JTlRTID0gbmV3IFNldChbXG4gICAgNjU1MzQsIDY1NTM1LCAxMzEwNzAsIDEzMTA3MSwgMTk2NjA2LCAxOTY2MDcsIDI2MjE0MiwgMjYyMTQzLCAzMjc2NzgsIDMyNzY3OSwgMzkzMjE0LFxuICAgIDM5MzIxNSwgNDU4NzUwLCA0NTg3NTEsIDUyNDI4NiwgNTI0Mjg3LCA1ODk4MjIsIDU4OTgyMywgNjU1MzU4LCA2NTUzNTksIDcyMDg5NCxcbiAgICA3MjA4OTUsIDc4NjQzMCwgNzg2NDMxLCA4NTE5NjYsIDg1MTk2NywgOTE3NTAyLCA5MTc1MDMsIDk4MzAzOCwgOTgzMDM5LCAxMDQ4NTc0LFxuICAgIDEwNDg1NzUsIDExMTQxMTAsIDExMTQxMTEsXG5dKTtcbmV4cG9ydCBjb25zdCBSRVBMQUNFTUVOVF9DSEFSQUNURVIgPSAnXFx1RkZGRCc7XG5leHBvcnQgdmFyIENPREVfUE9JTlRTO1xuKGZ1bmN0aW9uIChDT0RFX1BPSU5UUykge1xuICAgIENPREVfUE9JTlRTW0NPREVfUE9JTlRTW1wiRU9GXCJdID0gLTFdID0gXCJFT0ZcIjtcbiAgICBDT0RFX1BPSU5UU1tDT0RFX1BPSU5UU1tcIk5VTExcIl0gPSAwXSA9IFwiTlVMTFwiO1xuICAgIENPREVfUE9JTlRTW0NPREVfUE9JTlRTW1wiVEFCVUxBVElPTlwiXSA9IDldID0gXCJUQUJVTEFUSU9OXCI7XG4gICAgQ09ERV9QT0lOVFNbQ09ERV9QT0lOVFNbXCJDQVJSSUFHRV9SRVRVUk5cIl0gPSAxM10gPSBcIkNBUlJJQUdFX1JFVFVSTlwiO1xuICAgIENPREVfUE9JTlRTW0NPREVfUE9JTlRTW1wiTElORV9GRUVEXCJdID0gMTBdID0gXCJMSU5FX0ZFRURcIjtcbiAgICBDT0RFX1BPSU5UU1tDT0RFX1BPSU5UU1tcIkZPUk1fRkVFRFwiXSA9IDEyXSA9IFwiRk9STV9GRUVEXCI7XG4gICAgQ09ERV9QT0lOVFNbQ09ERV9QT0lOVFNbXCJTUEFDRVwiXSA9IDMyXSA9IFwiU1BBQ0VcIjtcbiAgICBDT0RFX1BPSU5UU1tDT0RFX1BPSU5UU1tcIkVYQ0xBTUFUSU9OX01BUktcIl0gPSAzM10gPSBcIkVYQ0xBTUFUSU9OX01BUktcIjtcbiAgICBDT0RFX1BPSU5UU1tDT0RFX1BPSU5UU1tcIlFVT1RBVElPTl9NQVJLXCJdID0gMzRdID0gXCJRVU9UQVRJT05fTUFSS1wiO1xuICAgIENPREVfUE9JTlRTW0NPREVfUE9JTlRTW1wiQU1QRVJTQU5EXCJdID0gMzhdID0gXCJBTVBFUlNBTkRcIjtcbiAgICBDT0RFX1BPSU5UU1tDT0RFX1BPSU5UU1tcIkFQT1NUUk9QSEVcIl0gPSAzOV0gPSBcIkFQT1NUUk9QSEVcIjtcbiAgICBDT0RFX1BPSU5UU1tDT0RFX1BPSU5UU1tcIkhZUEhFTl9NSU5VU1wiXSA9IDQ1XSA9IFwiSFlQSEVOX01JTlVTXCI7XG4gICAgQ09ERV9QT0lOVFNbQ09ERV9QT0lOVFNbXCJTT0xJRFVTXCJdID0gNDddID0gXCJTT0xJRFVTXCI7XG4gICAgQ09ERV9QT0lOVFNbQ09ERV9QT0lOVFNbXCJESUdJVF8wXCJdID0gNDhdID0gXCJESUdJVF8wXCI7XG4gICAgQ09ERV9QT0lOVFNbQ09ERV9QT0lOVFNbXCJESUdJVF85XCJdID0gNTddID0gXCJESUdJVF85XCI7XG4gICAgQ09ERV9QT0lOVFNbQ09ERV9QT0lOVFNbXCJTRU1JQ09MT05cIl0gPSA1OV0gPSBcIlNFTUlDT0xPTlwiO1xuICAgIENPREVfUE9JTlRTW0NPREVfUE9JTlRTW1wiTEVTU19USEFOX1NJR05cIl0gPSA2MF0gPSBcIkxFU1NfVEhBTl9TSUdOXCI7XG4gICAgQ09ERV9QT0lOVFNbQ09ERV9QT0lOVFNbXCJFUVVBTFNfU0lHTlwiXSA9IDYxXSA9IFwiRVFVQUxTX1NJR05cIjtcbiAgICBDT0RFX1BPSU5UU1tDT0RFX1BPSU5UU1tcIkdSRUFURVJfVEhBTl9TSUdOXCJdID0gNjJdID0gXCJHUkVBVEVSX1RIQU5fU0lHTlwiO1xuICAgIENPREVfUE9JTlRTW0NPREVfUE9JTlRTW1wiUVVFU1RJT05fTUFSS1wiXSA9IDYzXSA9IFwiUVVFU1RJT05fTUFSS1wiO1xuICAgIENPREVfUE9JTlRTW0NPREVfUE9JTlRTW1wiTEFUSU5fQ0FQSVRBTF9BXCJdID0gNjVdID0gXCJMQVRJTl9DQVBJVEFMX0FcIjtcbiAgICBDT0RFX1BPSU5UU1tDT0RFX1BPSU5UU1tcIkxBVElOX0NBUElUQUxfWlwiXSA9IDkwXSA9IFwiTEFUSU5fQ0FQSVRBTF9aXCI7XG4gICAgQ09ERV9QT0lOVFNbQ09ERV9QT0lOVFNbXCJSSUdIVF9TUVVBUkVfQlJBQ0tFVFwiXSA9IDkzXSA9IFwiUklHSFRfU1FVQVJFX0JSQUNLRVRcIjtcbiAgICBDT0RFX1BPSU5UU1tDT0RFX1BPSU5UU1tcIkdSQVZFX0FDQ0VOVFwiXSA9IDk2XSA9IFwiR1JBVkVfQUNDRU5UXCI7XG4gICAgQ09ERV9QT0lOVFNbQ09ERV9QT0lOVFNbXCJMQVRJTl9TTUFMTF9BXCJdID0gOTddID0gXCJMQVRJTl9TTUFMTF9BXCI7XG4gICAgQ09ERV9QT0lOVFNbQ09ERV9QT0lOVFNbXCJMQVRJTl9TTUFMTF9aXCJdID0gMTIyXSA9IFwiTEFUSU5fU01BTExfWlwiO1xufSkoQ09ERV9QT0lOVFMgfHwgKENPREVfUE9JTlRTID0ge30pKTtcbmV4cG9ydCBjb25zdCBTRVFVRU5DRVMgPSB7XG4gICAgREFTSF9EQVNIOiAnLS0nLFxuICAgIENEQVRBX1NUQVJUOiAnW0NEQVRBWycsXG4gICAgRE9DVFlQRTogJ2RvY3R5cGUnLFxuICAgIFNDUklQVDogJ3NjcmlwdCcsXG4gICAgUFVCTElDOiAncHVibGljJyxcbiAgICBTWVNURU06ICdzeXN0ZW0nLFxufTtcbi8vU3Vycm9nYXRlc1xuZXhwb3J0IGZ1bmN0aW9uIGlzU3Vycm9nYXRlKGNwKSB7XG4gICAgcmV0dXJuIGNwID49IDU1Mjk2ICYmIGNwIDw9IDU3MzQzO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGlzU3Vycm9nYXRlUGFpcihjcCkge1xuICAgIHJldHVybiBjcCA+PSA1NjMyMCAmJiBjcCA8PSA1NzM0Mztcbn1cbmV4cG9ydCBmdW5jdGlvbiBnZXRTdXJyb2dhdGVQYWlyQ29kZVBvaW50KGNwMSwgY3AyKSB7XG4gICAgcmV0dXJuIChjcDEgLSA1NTI5NikgKiAxMDI0ICsgOTIxNiArIGNwMjtcbn1cbi8vTk9URTogZXhjbHVkaW5nIE5VTEwgYW5kIEFTQ0lJIHdoaXRlc3BhY2VcbmV4cG9ydCBmdW5jdGlvbiBpc0NvbnRyb2xDb2RlUG9pbnQoY3ApIHtcbiAgICByZXR1cm4gKChjcCAhPT0gMHgyMCAmJiBjcCAhPT0gMHgwYSAmJiBjcCAhPT0gMHgwZCAmJiBjcCAhPT0gMHgwOSAmJiBjcCAhPT0gMHgwYyAmJiBjcCA+PSAweDAxICYmIGNwIDw9IDB4MWYpIHx8XG4gICAgICAgIChjcCA+PSAweDdmICYmIGNwIDw9IDB4OWYpKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc1VuZGVmaW5lZENvZGVQb2ludChjcCkge1xuICAgIHJldHVybiAoY3AgPj0gNjQ5NzYgJiYgY3AgPD0gNjUwMDcpIHx8IFVOREVGSU5FRF9DT0RFX1BPSU5UUy5oYXMoY3ApO1xufVxuIiwgImV4cG9ydCB2YXIgRVJSO1xuKGZ1bmN0aW9uIChFUlIpIHtcbiAgICBFUlJbXCJjb250cm9sQ2hhcmFjdGVySW5JbnB1dFN0cmVhbVwiXSA9IFwiY29udHJvbC1jaGFyYWN0ZXItaW4taW5wdXQtc3RyZWFtXCI7XG4gICAgRVJSW1wibm9uY2hhcmFjdGVySW5JbnB1dFN0cmVhbVwiXSA9IFwibm9uY2hhcmFjdGVyLWluLWlucHV0LXN0cmVhbVwiO1xuICAgIEVSUltcInN1cnJvZ2F0ZUluSW5wdXRTdHJlYW1cIl0gPSBcInN1cnJvZ2F0ZS1pbi1pbnB1dC1zdHJlYW1cIjtcbiAgICBFUlJbXCJub25Wb2lkSHRtbEVsZW1lbnRTdGFydFRhZ1dpdGhUcmFpbGluZ1NvbGlkdXNcIl0gPSBcIm5vbi12b2lkLWh0bWwtZWxlbWVudC1zdGFydC10YWctd2l0aC10cmFpbGluZy1zb2xpZHVzXCI7XG4gICAgRVJSW1wiZW5kVGFnV2l0aEF0dHJpYnV0ZXNcIl0gPSBcImVuZC10YWctd2l0aC1hdHRyaWJ1dGVzXCI7XG4gICAgRVJSW1wiZW5kVGFnV2l0aFRyYWlsaW5nU29saWR1c1wiXSA9IFwiZW5kLXRhZy13aXRoLXRyYWlsaW5nLXNvbGlkdXNcIjtcbiAgICBFUlJbXCJ1bmV4cGVjdGVkU29saWR1c0luVGFnXCJdID0gXCJ1bmV4cGVjdGVkLXNvbGlkdXMtaW4tdGFnXCI7XG4gICAgRVJSW1widW5leHBlY3RlZE51bGxDaGFyYWN0ZXJcIl0gPSBcInVuZXhwZWN0ZWQtbnVsbC1jaGFyYWN0ZXJcIjtcbiAgICBFUlJbXCJ1bmV4cGVjdGVkUXVlc3Rpb25NYXJrSW5zdGVhZE9mVGFnTmFtZVwiXSA9IFwidW5leHBlY3RlZC1xdWVzdGlvbi1tYXJrLWluc3RlYWQtb2YtdGFnLW5hbWVcIjtcbiAgICBFUlJbXCJpbnZhbGlkRmlyc3RDaGFyYWN0ZXJPZlRhZ05hbWVcIl0gPSBcImludmFsaWQtZmlyc3QtY2hhcmFjdGVyLW9mLXRhZy1uYW1lXCI7XG4gICAgRVJSW1widW5leHBlY3RlZEVxdWFsc1NpZ25CZWZvcmVBdHRyaWJ1dGVOYW1lXCJdID0gXCJ1bmV4cGVjdGVkLWVxdWFscy1zaWduLWJlZm9yZS1hdHRyaWJ1dGUtbmFtZVwiO1xuICAgIEVSUltcIm1pc3NpbmdFbmRUYWdOYW1lXCJdID0gXCJtaXNzaW5nLWVuZC10YWctbmFtZVwiO1xuICAgIEVSUltcInVuZXhwZWN0ZWRDaGFyYWN0ZXJJbkF0dHJpYnV0ZU5hbWVcIl0gPSBcInVuZXhwZWN0ZWQtY2hhcmFjdGVyLWluLWF0dHJpYnV0ZS1uYW1lXCI7XG4gICAgRVJSW1widW5rbm93bk5hbWVkQ2hhcmFjdGVyUmVmZXJlbmNlXCJdID0gXCJ1bmtub3duLW5hbWVkLWNoYXJhY3Rlci1yZWZlcmVuY2VcIjtcbiAgICBFUlJbXCJtaXNzaW5nU2VtaWNvbG9uQWZ0ZXJDaGFyYWN0ZXJSZWZlcmVuY2VcIl0gPSBcIm1pc3Npbmctc2VtaWNvbG9uLWFmdGVyLWNoYXJhY3Rlci1yZWZlcmVuY2VcIjtcbiAgICBFUlJbXCJ1bmV4cGVjdGVkQ2hhcmFjdGVyQWZ0ZXJEb2N0eXBlU3lzdGVtSWRlbnRpZmllclwiXSA9IFwidW5leHBlY3RlZC1jaGFyYWN0ZXItYWZ0ZXItZG9jdHlwZS1zeXN0ZW0taWRlbnRpZmllclwiO1xuICAgIEVSUltcInVuZXhwZWN0ZWRDaGFyYWN0ZXJJblVucXVvdGVkQXR0cmlidXRlVmFsdWVcIl0gPSBcInVuZXhwZWN0ZWQtY2hhcmFjdGVyLWluLXVucXVvdGVkLWF0dHJpYnV0ZS12YWx1ZVwiO1xuICAgIEVSUltcImVvZkJlZm9yZVRhZ05hbWVcIl0gPSBcImVvZi1iZWZvcmUtdGFnLW5hbWVcIjtcbiAgICBFUlJbXCJlb2ZJblRhZ1wiXSA9IFwiZW9mLWluLXRhZ1wiO1xuICAgIEVSUltcIm1pc3NpbmdBdHRyaWJ1dGVWYWx1ZVwiXSA9IFwibWlzc2luZy1hdHRyaWJ1dGUtdmFsdWVcIjtcbiAgICBFUlJbXCJtaXNzaW5nV2hpdGVzcGFjZUJldHdlZW5BdHRyaWJ1dGVzXCJdID0gXCJtaXNzaW5nLXdoaXRlc3BhY2UtYmV0d2Vlbi1hdHRyaWJ1dGVzXCI7XG4gICAgRVJSW1wibWlzc2luZ1doaXRlc3BhY2VBZnRlckRvY3R5cGVQdWJsaWNLZXl3b3JkXCJdID0gXCJtaXNzaW5nLXdoaXRlc3BhY2UtYWZ0ZXItZG9jdHlwZS1wdWJsaWMta2V5d29yZFwiO1xuICAgIEVSUltcIm1pc3NpbmdXaGl0ZXNwYWNlQmV0d2VlbkRvY3R5cGVQdWJsaWNBbmRTeXN0ZW1JZGVudGlmaWVyc1wiXSA9IFwibWlzc2luZy13aGl0ZXNwYWNlLWJldHdlZW4tZG9jdHlwZS1wdWJsaWMtYW5kLXN5c3RlbS1pZGVudGlmaWVyc1wiO1xuICAgIEVSUltcIm1pc3NpbmdXaGl0ZXNwYWNlQWZ0ZXJEb2N0eXBlU3lzdGVtS2V5d29yZFwiXSA9IFwibWlzc2luZy13aGl0ZXNwYWNlLWFmdGVyLWRvY3R5cGUtc3lzdGVtLWtleXdvcmRcIjtcbiAgICBFUlJbXCJtaXNzaW5nUXVvdGVCZWZvcmVEb2N0eXBlUHVibGljSWRlbnRpZmllclwiXSA9IFwibWlzc2luZy1xdW90ZS1iZWZvcmUtZG9jdHlwZS1wdWJsaWMtaWRlbnRpZmllclwiO1xuICAgIEVSUltcIm1pc3NpbmdRdW90ZUJlZm9yZURvY3R5cGVTeXN0ZW1JZGVudGlmaWVyXCJdID0gXCJtaXNzaW5nLXF1b3RlLWJlZm9yZS1kb2N0eXBlLXN5c3RlbS1pZGVudGlmaWVyXCI7XG4gICAgRVJSW1wibWlzc2luZ0RvY3R5cGVQdWJsaWNJZGVudGlmaWVyXCJdID0gXCJtaXNzaW5nLWRvY3R5cGUtcHVibGljLWlkZW50aWZpZXJcIjtcbiAgICBFUlJbXCJtaXNzaW5nRG9jdHlwZVN5c3RlbUlkZW50aWZpZXJcIl0gPSBcIm1pc3NpbmctZG9jdHlwZS1zeXN0ZW0taWRlbnRpZmllclwiO1xuICAgIEVSUltcImFicnVwdERvY3R5cGVQdWJsaWNJZGVudGlmaWVyXCJdID0gXCJhYnJ1cHQtZG9jdHlwZS1wdWJsaWMtaWRlbnRpZmllclwiO1xuICAgIEVSUltcImFicnVwdERvY3R5cGVTeXN0ZW1JZGVudGlmaWVyXCJdID0gXCJhYnJ1cHQtZG9jdHlwZS1zeXN0ZW0taWRlbnRpZmllclwiO1xuICAgIEVSUltcImNkYXRhSW5IdG1sQ29udGVudFwiXSA9IFwiY2RhdGEtaW4taHRtbC1jb250ZW50XCI7XG4gICAgRVJSW1wiaW5jb3JyZWN0bHlPcGVuZWRDb21tZW50XCJdID0gXCJpbmNvcnJlY3RseS1vcGVuZWQtY29tbWVudFwiO1xuICAgIEVSUltcImVvZkluU2NyaXB0SHRtbENvbW1lbnRMaWtlVGV4dFwiXSA9IFwiZW9mLWluLXNjcmlwdC1odG1sLWNvbW1lbnQtbGlrZS10ZXh0XCI7XG4gICAgRVJSW1wiZW9mSW5Eb2N0eXBlXCJdID0gXCJlb2YtaW4tZG9jdHlwZVwiO1xuICAgIEVSUltcIm5lc3RlZENvbW1lbnRcIl0gPSBcIm5lc3RlZC1jb21tZW50XCI7XG4gICAgRVJSW1wiYWJydXB0Q2xvc2luZ09mRW1wdHlDb21tZW50XCJdID0gXCJhYnJ1cHQtY2xvc2luZy1vZi1lbXB0eS1jb21tZW50XCI7XG4gICAgRVJSW1wiZW9mSW5Db21tZW50XCJdID0gXCJlb2YtaW4tY29tbWVudFwiO1xuICAgIEVSUltcImluY29ycmVjdGx5Q2xvc2VkQ29tbWVudFwiXSA9IFwiaW5jb3JyZWN0bHktY2xvc2VkLWNvbW1lbnRcIjtcbiAgICBFUlJbXCJlb2ZJbkNkYXRhXCJdID0gXCJlb2YtaW4tY2RhdGFcIjtcbiAgICBFUlJbXCJhYnNlbmNlT2ZEaWdpdHNJbk51bWVyaWNDaGFyYWN0ZXJSZWZlcmVuY2VcIl0gPSBcImFic2VuY2Utb2YtZGlnaXRzLWluLW51bWVyaWMtY2hhcmFjdGVyLXJlZmVyZW5jZVwiO1xuICAgIEVSUltcIm51bGxDaGFyYWN0ZXJSZWZlcmVuY2VcIl0gPSBcIm51bGwtY2hhcmFjdGVyLXJlZmVyZW5jZVwiO1xuICAgIEVSUltcInN1cnJvZ2F0ZUNoYXJhY3RlclJlZmVyZW5jZVwiXSA9IFwic3Vycm9nYXRlLWNoYXJhY3Rlci1yZWZlcmVuY2VcIjtcbiAgICBFUlJbXCJjaGFyYWN0ZXJSZWZlcmVuY2VPdXRzaWRlVW5pY29kZVJhbmdlXCJdID0gXCJjaGFyYWN0ZXItcmVmZXJlbmNlLW91dHNpZGUtdW5pY29kZS1yYW5nZVwiO1xuICAgIEVSUltcImNvbnRyb2xDaGFyYWN0ZXJSZWZlcmVuY2VcIl0gPSBcImNvbnRyb2wtY2hhcmFjdGVyLXJlZmVyZW5jZVwiO1xuICAgIEVSUltcIm5vbmNoYXJhY3RlckNoYXJhY3RlclJlZmVyZW5jZVwiXSA9IFwibm9uY2hhcmFjdGVyLWNoYXJhY3Rlci1yZWZlcmVuY2VcIjtcbiAgICBFUlJbXCJtaXNzaW5nV2hpdGVzcGFjZUJlZm9yZURvY3R5cGVOYW1lXCJdID0gXCJtaXNzaW5nLXdoaXRlc3BhY2UtYmVmb3JlLWRvY3R5cGUtbmFtZVwiO1xuICAgIEVSUltcIm1pc3NpbmdEb2N0eXBlTmFtZVwiXSA9IFwibWlzc2luZy1kb2N0eXBlLW5hbWVcIjtcbiAgICBFUlJbXCJpbnZhbGlkQ2hhcmFjdGVyU2VxdWVuY2VBZnRlckRvY3R5cGVOYW1lXCJdID0gXCJpbnZhbGlkLWNoYXJhY3Rlci1zZXF1ZW5jZS1hZnRlci1kb2N0eXBlLW5hbWVcIjtcbiAgICBFUlJbXCJkdXBsaWNhdGVBdHRyaWJ1dGVcIl0gPSBcImR1cGxpY2F0ZS1hdHRyaWJ1dGVcIjtcbiAgICBFUlJbXCJub25Db25mb3JtaW5nRG9jdHlwZVwiXSA9IFwibm9uLWNvbmZvcm1pbmctZG9jdHlwZVwiO1xuICAgIEVSUltcIm1pc3NpbmdEb2N0eXBlXCJdID0gXCJtaXNzaW5nLWRvY3R5cGVcIjtcbiAgICBFUlJbXCJtaXNwbGFjZWREb2N0eXBlXCJdID0gXCJtaXNwbGFjZWQtZG9jdHlwZVwiO1xuICAgIEVSUltcImVuZFRhZ1dpdGhvdXRNYXRjaGluZ09wZW5FbGVtZW50XCJdID0gXCJlbmQtdGFnLXdpdGhvdXQtbWF0Y2hpbmctb3Blbi1lbGVtZW50XCI7XG4gICAgRVJSW1wiY2xvc2luZ09mRWxlbWVudFdpdGhPcGVuQ2hpbGRFbGVtZW50c1wiXSA9IFwiY2xvc2luZy1vZi1lbGVtZW50LXdpdGgtb3Blbi1jaGlsZC1lbGVtZW50c1wiO1xuICAgIEVSUltcImRpc2FsbG93ZWRDb250ZW50SW5Ob3NjcmlwdEluSGVhZFwiXSA9IFwiZGlzYWxsb3dlZC1jb250ZW50LWluLW5vc2NyaXB0LWluLWhlYWRcIjtcbiAgICBFUlJbXCJvcGVuRWxlbWVudHNMZWZ0QWZ0ZXJFb2ZcIl0gPSBcIm9wZW4tZWxlbWVudHMtbGVmdC1hZnRlci1lb2ZcIjtcbiAgICBFUlJbXCJhYmFuZG9uZWRIZWFkRWxlbWVudENoaWxkXCJdID0gXCJhYmFuZG9uZWQtaGVhZC1lbGVtZW50LWNoaWxkXCI7XG4gICAgRVJSW1wibWlzcGxhY2VkU3RhcnRUYWdGb3JIZWFkRWxlbWVudFwiXSA9IFwibWlzcGxhY2VkLXN0YXJ0LXRhZy1mb3ItaGVhZC1lbGVtZW50XCI7XG4gICAgRVJSW1wibmVzdGVkTm9zY3JpcHRJbkhlYWRcIl0gPSBcIm5lc3RlZC1ub3NjcmlwdC1pbi1oZWFkXCI7XG4gICAgRVJSW1wiZW9mSW5FbGVtZW50VGhhdENhbkNvbnRhaW5Pbmx5VGV4dFwiXSA9IFwiZW9mLWluLWVsZW1lbnQtdGhhdC1jYW4tY29udGFpbi1vbmx5LXRleHRcIjtcbn0pKEVSUiB8fCAoRVJSID0ge30pKTtcbiIsICJpbXBvcnQgeyBDT0RFX1BPSU5UUyBhcyAkLCBnZXRTdXJyb2dhdGVQYWlyQ29kZVBvaW50LCBpc0NvbnRyb2xDb2RlUG9pbnQsIGlzU3Vycm9nYXRlLCBpc1N1cnJvZ2F0ZVBhaXIsIGlzVW5kZWZpbmVkQ29kZVBvaW50LCB9IGZyb20gJy4uL2NvbW1vbi91bmljb2RlLmpzJztcbmltcG9ydCB7IEVSUiB9IGZyb20gJy4uL2NvbW1vbi9lcnJvci1jb2Rlcy5qcyc7XG4vL0NvbnN0XG5jb25zdCBERUZBVUxUX0JVRkZFUl9XQVRFUkxJTkUgPSAxIDw8IDE2O1xuLy9QcmVwcm9jZXNzb3Jcbi8vTk9URTogSFRNTCBpbnB1dCBwcmVwcm9jZXNzaW5nXG4vLyhzZWU6IGh0dHA6Ly93d3cud2hhdHdnLm9yZy9zcGVjcy93ZWItYXBwcy9jdXJyZW50LXdvcmsvbXVsdGlwYWdlL3BhcnNpbmcuaHRtbCNwcmVwcm9jZXNzaW5nLXRoZS1pbnB1dC1zdHJlYW0pXG5leHBvcnQgY2xhc3MgUHJlcHJvY2Vzc29yIHtcbiAgICBjb25zdHJ1Y3RvcihoYW5kbGVyKSB7XG4gICAgICAgIHRoaXMuaGFuZGxlciA9IGhhbmRsZXI7XG4gICAgICAgIHRoaXMuaHRtbCA9ICcnO1xuICAgICAgICB0aGlzLnBvcyA9IC0xO1xuICAgICAgICAvLyBOT1RFOiBJbml0aWFsIGBsYXN0R2FwUG9zYCBpcyAtMiwgdG8gZW5zdXJlIGBjb2xgIG9uIGluaXRpYWxpc2F0aW9uIGlzIDBcbiAgICAgICAgdGhpcy5sYXN0R2FwUG9zID0gLTI7XG4gICAgICAgIHRoaXMuZ2FwU3RhY2sgPSBbXTtcbiAgICAgICAgdGhpcy5za2lwTmV4dE5ld0xpbmUgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5sYXN0Q2h1bmtXcml0dGVuID0gZmFsc2U7XG4gICAgICAgIHRoaXMuZW5kT2ZDaHVua0hpdCA9IGZhbHNlO1xuICAgICAgICB0aGlzLmJ1ZmZlcldhdGVybGluZSA9IERFRkFVTFRfQlVGRkVSX1dBVEVSTElORTtcbiAgICAgICAgdGhpcy5pc0VvbCA9IGZhbHNlO1xuICAgICAgICB0aGlzLmxpbmVTdGFydFBvcyA9IDA7XG4gICAgICAgIHRoaXMuZHJvcHBlZEJ1ZmZlclNpemUgPSAwO1xuICAgICAgICB0aGlzLmxpbmUgPSAxO1xuICAgICAgICAvL05PVEU6IGF2b2lkIHJlcG9ydGluZyBlcnJvcnMgdHdpY2Ugb24gYWR2YW5jZS9yZXRyZWF0XG4gICAgICAgIHRoaXMubGFzdEVyck9mZnNldCA9IC0xO1xuICAgIH1cbiAgICAvKiogVGhlIGNvbHVtbiBvbiB0aGUgY3VycmVudCBsaW5lLiBJZiB3ZSBqdXN0IHNhdyBhIGdhcCAoZWcuIGEgc3Vycm9nYXRlIHBhaXIpLCByZXR1cm4gdGhlIGluZGV4IGJlZm9yZS4gKi9cbiAgICBnZXQgY29sKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5wb3MgLSB0aGlzLmxpbmVTdGFydFBvcyArIE51bWJlcih0aGlzLmxhc3RHYXBQb3MgIT09IHRoaXMucG9zKTtcbiAgICB9XG4gICAgZ2V0IG9mZnNldCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZHJvcHBlZEJ1ZmZlclNpemUgKyB0aGlzLnBvcztcbiAgICB9XG4gICAgZ2V0RXJyb3IoY29kZSwgY3BPZmZzZXQpIHtcbiAgICAgICAgY29uc3QgeyBsaW5lLCBjb2wsIG9mZnNldCB9ID0gdGhpcztcbiAgICAgICAgY29uc3Qgc3RhcnRDb2wgPSBjb2wgKyBjcE9mZnNldDtcbiAgICAgICAgY29uc3Qgc3RhcnRPZmZzZXQgPSBvZmZzZXQgKyBjcE9mZnNldDtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGNvZGUsXG4gICAgICAgICAgICBzdGFydExpbmU6IGxpbmUsXG4gICAgICAgICAgICBlbmRMaW5lOiBsaW5lLFxuICAgICAgICAgICAgc3RhcnRDb2wsXG4gICAgICAgICAgICBlbmRDb2w6IHN0YXJ0Q29sLFxuICAgICAgICAgICAgc3RhcnRPZmZzZXQsXG4gICAgICAgICAgICBlbmRPZmZzZXQ6IHN0YXJ0T2Zmc2V0LFxuICAgICAgICB9O1xuICAgIH1cbiAgICBfZXJyKGNvZGUpIHtcbiAgICAgICAgaWYgKHRoaXMuaGFuZGxlci5vblBhcnNlRXJyb3IgJiYgdGhpcy5sYXN0RXJyT2Zmc2V0ICE9PSB0aGlzLm9mZnNldCkge1xuICAgICAgICAgICAgdGhpcy5sYXN0RXJyT2Zmc2V0ID0gdGhpcy5vZmZzZXQ7XG4gICAgICAgICAgICB0aGlzLmhhbmRsZXIub25QYXJzZUVycm9yKHRoaXMuZ2V0RXJyb3IoY29kZSwgMCkpO1xuICAgICAgICB9XG4gICAgfVxuICAgIF9hZGRHYXAoKSB7XG4gICAgICAgIHRoaXMuZ2FwU3RhY2sucHVzaCh0aGlzLmxhc3RHYXBQb3MpO1xuICAgICAgICB0aGlzLmxhc3RHYXBQb3MgPSB0aGlzLnBvcztcbiAgICB9XG4gICAgX3Byb2Nlc3NTdXJyb2dhdGUoY3ApIHtcbiAgICAgICAgLy9OT1RFOiB0cnkgdG8gcGVlayBhIHN1cnJvZ2F0ZSBwYWlyXG4gICAgICAgIGlmICh0aGlzLnBvcyAhPT0gdGhpcy5odG1sLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICAgIGNvbnN0IG5leHRDcCA9IHRoaXMuaHRtbC5jaGFyQ29kZUF0KHRoaXMucG9zICsgMSk7XG4gICAgICAgICAgICBpZiAoaXNTdXJyb2dhdGVQYWlyKG5leHRDcCkpIHtcbiAgICAgICAgICAgICAgICAvL05PVEU6IHdlIGhhdmUgYSBzdXJyb2dhdGUgcGFpci4gUGVlayBwYWlyIGNoYXJhY3RlciBhbmQgcmVjYWxjdWxhdGUgY29kZSBwb2ludC5cbiAgICAgICAgICAgICAgICB0aGlzLnBvcysrO1xuICAgICAgICAgICAgICAgIC8vTk9URTogYWRkIGEgZ2FwIHRoYXQgc2hvdWxkIGJlIGF2b2lkZWQgZHVyaW5nIHJldHJlYXRcbiAgICAgICAgICAgICAgICB0aGlzLl9hZGRHYXAoKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gZ2V0U3Vycm9nYXRlUGFpckNvZGVQb2ludChjcCwgbmV4dENwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvL05PVEU6IHdlIGFyZSBhdCB0aGUgZW5kIG9mIGEgY2h1bmssIHRoZXJlZm9yZSB3ZSBjYW4ndCBpbmZlciB0aGUgc3Vycm9nYXRlIHBhaXIgeWV0LlxuICAgICAgICBlbHNlIGlmICghdGhpcy5sYXN0Q2h1bmtXcml0dGVuKSB7XG4gICAgICAgICAgICB0aGlzLmVuZE9mQ2h1bmtIaXQgPSB0cnVlO1xuICAgICAgICAgICAgcmV0dXJuICQuRU9GO1xuICAgICAgICB9XG4gICAgICAgIC8vTk9URTogaXNvbGF0ZWQgc3Vycm9nYXRlXG4gICAgICAgIHRoaXMuX2VycihFUlIuc3Vycm9nYXRlSW5JbnB1dFN0cmVhbSk7XG4gICAgICAgIHJldHVybiBjcDtcbiAgICB9XG4gICAgd2lsbERyb3BQYXJzZWRDaHVuaygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucG9zID4gdGhpcy5idWZmZXJXYXRlcmxpbmU7XG4gICAgfVxuICAgIGRyb3BQYXJzZWRDaHVuaygpIHtcbiAgICAgICAgaWYgKHRoaXMud2lsbERyb3BQYXJzZWRDaHVuaygpKSB7XG4gICAgICAgICAgICB0aGlzLmh0bWwgPSB0aGlzLmh0bWwuc3Vic3RyaW5nKHRoaXMucG9zKTtcbiAgICAgICAgICAgIHRoaXMubGluZVN0YXJ0UG9zIC09IHRoaXMucG9zO1xuICAgICAgICAgICAgdGhpcy5kcm9wcGVkQnVmZmVyU2l6ZSArPSB0aGlzLnBvcztcbiAgICAgICAgICAgIHRoaXMucG9zID0gMDtcbiAgICAgICAgICAgIHRoaXMubGFzdEdhcFBvcyA9IC0yO1xuICAgICAgICAgICAgdGhpcy5nYXBTdGFjay5sZW5ndGggPSAwO1xuICAgICAgICB9XG4gICAgfVxuICAgIHdyaXRlKGNodW5rLCBpc0xhc3RDaHVuaykge1xuICAgICAgICBpZiAodGhpcy5odG1sLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHRoaXMuaHRtbCArPSBjaHVuaztcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuaHRtbCA9IGNodW5rO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuZW5kT2ZDaHVua0hpdCA9IGZhbHNlO1xuICAgICAgICB0aGlzLmxhc3RDaHVua1dyaXR0ZW4gPSBpc0xhc3RDaHVuaztcbiAgICB9XG4gICAgaW5zZXJ0SHRtbEF0Q3VycmVudFBvcyhjaHVuaykge1xuICAgICAgICB0aGlzLmh0bWwgPSB0aGlzLmh0bWwuc3Vic3RyaW5nKDAsIHRoaXMucG9zICsgMSkgKyBjaHVuayArIHRoaXMuaHRtbC5zdWJzdHJpbmcodGhpcy5wb3MgKyAxKTtcbiAgICAgICAgdGhpcy5lbmRPZkNodW5rSGl0ID0gZmFsc2U7XG4gICAgfVxuICAgIHN0YXJ0c1dpdGgocGF0dGVybiwgY2FzZVNlbnNpdGl2ZSkge1xuICAgICAgICAvLyBDaGVjayBpZiBvdXIgYnVmZmVyIGhhcyBlbm91Z2ggY2hhcmFjdGVyc1xuICAgICAgICBpZiAodGhpcy5wb3MgKyBwYXR0ZXJuLmxlbmd0aCA+IHRoaXMuaHRtbC5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRoaXMuZW5kT2ZDaHVua0hpdCA9ICF0aGlzLmxhc3RDaHVua1dyaXR0ZW47XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNhc2VTZW5zaXRpdmUpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmh0bWwuc3RhcnRzV2l0aChwYXR0ZXJuLCB0aGlzLnBvcyk7XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwYXR0ZXJuLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBjcCA9IHRoaXMuaHRtbC5jaGFyQ29kZUF0KHRoaXMucG9zICsgaSkgfCAweDIwO1xuICAgICAgICAgICAgaWYgKGNwICE9PSBwYXR0ZXJuLmNoYXJDb2RlQXQoaSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHBlZWsob2Zmc2V0KSB7XG4gICAgICAgIGNvbnN0IHBvcyA9IHRoaXMucG9zICsgb2Zmc2V0O1xuICAgICAgICBpZiAocG9zID49IHRoaXMuaHRtbC5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRoaXMuZW5kT2ZDaHVua0hpdCA9ICF0aGlzLmxhc3RDaHVua1dyaXR0ZW47XG4gICAgICAgICAgICByZXR1cm4gJC5FT0Y7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY29kZSA9IHRoaXMuaHRtbC5jaGFyQ29kZUF0KHBvcyk7XG4gICAgICAgIHJldHVybiBjb2RlID09PSAkLkNBUlJJQUdFX1JFVFVSTiA/ICQuTElORV9GRUVEIDogY29kZTtcbiAgICB9XG4gICAgYWR2YW5jZSgpIHtcbiAgICAgICAgdGhpcy5wb3MrKztcbiAgICAgICAgLy9OT1RFOiBMRiBzaG91bGQgYmUgaW4gdGhlIGxhc3QgY29sdW1uIG9mIHRoZSBsaW5lXG4gICAgICAgIGlmICh0aGlzLmlzRW9sKSB7XG4gICAgICAgICAgICB0aGlzLmlzRW9sID0gZmFsc2U7XG4gICAgICAgICAgICB0aGlzLmxpbmUrKztcbiAgICAgICAgICAgIHRoaXMubGluZVN0YXJ0UG9zID0gdGhpcy5wb3M7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMucG9zID49IHRoaXMuaHRtbC5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRoaXMuZW5kT2ZDaHVua0hpdCA9ICF0aGlzLmxhc3RDaHVua1dyaXR0ZW47XG4gICAgICAgICAgICByZXR1cm4gJC5FT0Y7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGNwID0gdGhpcy5odG1sLmNoYXJDb2RlQXQodGhpcy5wb3MpO1xuICAgICAgICAvL05PVEU6IGFsbCBVKzAwMEQgQ0FSUklBR0UgUkVUVVJOIChDUikgY2hhcmFjdGVycyBtdXN0IGJlIGNvbnZlcnRlZCB0byBVKzAwMEEgTElORSBGRUVEIChMRikgY2hhcmFjdGVyc1xuICAgICAgICBpZiAoY3AgPT09ICQuQ0FSUklBR0VfUkVUVVJOKSB7XG4gICAgICAgICAgICB0aGlzLmlzRW9sID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuc2tpcE5leHROZXdMaW5lID0gdHJ1ZTtcbiAgICAgICAgICAgIHJldHVybiAkLkxJTkVfRkVFRDtcbiAgICAgICAgfVxuICAgICAgICAvL05PVEU6IGFueSBVKzAwMEEgTElORSBGRUVEIChMRikgY2hhcmFjdGVycyB0aGF0IGltbWVkaWF0ZWx5IGZvbGxvdyBhIFUrMDAwRCBDQVJSSUFHRSBSRVRVUk4gKENSKSBjaGFyYWN0ZXJcbiAgICAgICAgLy9tdXN0IGJlIGlnbm9yZWQuXG4gICAgICAgIGlmIChjcCA9PT0gJC5MSU5FX0ZFRUQpIHtcbiAgICAgICAgICAgIHRoaXMuaXNFb2wgPSB0cnVlO1xuICAgICAgICAgICAgaWYgKHRoaXMuc2tpcE5leHROZXdMaW5lKSB7XG4gICAgICAgICAgICAgICAgLy8gYGxpbmVgIHdpbGwgYmUgYnVtcGVkIGFnYWluIGluIHRoZSByZWN1cnNpdmUgY2FsbC5cbiAgICAgICAgICAgICAgICB0aGlzLmxpbmUtLTtcbiAgICAgICAgICAgICAgICB0aGlzLnNraXBOZXh0TmV3TGluZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIHRoaXMuX2FkZEdhcCgpO1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmFkdmFuY2UoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNraXBOZXh0TmV3TGluZSA9IGZhbHNlO1xuICAgICAgICBpZiAoaXNTdXJyb2dhdGUoY3ApKSB7XG4gICAgICAgICAgICBjcCA9IHRoaXMuX3Byb2Nlc3NTdXJyb2dhdGUoY3ApO1xuICAgICAgICB9XG4gICAgICAgIC8vT1BUSU1JWkFUSU9OOiBmaXJzdCBjaGVjayBpZiBjb2RlIHBvaW50IGlzIGluIHRoZSBjb21tb24gYWxsb3dlZFxuICAgICAgICAvL3JhbmdlIChBU0NJSSBhbHBoYW51bWVyaWMsIHdoaXRlc3BhY2VzLCBiaWcgY2h1bmsgb2YgQk1QKVxuICAgICAgICAvL2JlZm9yZSBnb2luZyBpbnRvIGRldGFpbGVkIHBlcmZvcm1hbmNlIGNvc3QgdmFsaWRhdGlvbi5cbiAgICAgICAgY29uc3QgaXNDb21tb25WYWxpZFJhbmdlID0gdGhpcy5oYW5kbGVyLm9uUGFyc2VFcnJvciA9PT0gbnVsbCB8fFxuICAgICAgICAgICAgKGNwID4gMHgxZiAmJiBjcCA8IDB4N2YpIHx8XG4gICAgICAgICAgICBjcCA9PT0gJC5MSU5FX0ZFRUQgfHxcbiAgICAgICAgICAgIGNwID09PSAkLkNBUlJJQUdFX1JFVFVSTiB8fFxuICAgICAgICAgICAgKGNwID4gMHg5ZiAmJiBjcCA8IDY0OTc2KTtcbiAgICAgICAgaWYgKCFpc0NvbW1vblZhbGlkUmFuZ2UpIHtcbiAgICAgICAgICAgIHRoaXMuX2NoZWNrRm9yUHJvYmxlbWF0aWNDaGFyYWN0ZXJzKGNwKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY3A7XG4gICAgfVxuICAgIF9jaGVja0ZvclByb2JsZW1hdGljQ2hhcmFjdGVycyhjcCkge1xuICAgICAgICBpZiAoaXNDb250cm9sQ29kZVBvaW50KGNwKSkge1xuICAgICAgICAgICAgdGhpcy5fZXJyKEVSUi5jb250cm9sQ2hhcmFjdGVySW5JbnB1dFN0cmVhbSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoaXNVbmRlZmluZWRDb2RlUG9pbnQoY3ApKSB7XG4gICAgICAgICAgICB0aGlzLl9lcnIoRVJSLm5vbmNoYXJhY3RlckluSW5wdXRTdHJlYW0pO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHJlYXQoY291bnQpIHtcbiAgICAgICAgdGhpcy5wb3MgLT0gY291bnQ7XG4gICAgICAgIHdoaWxlICh0aGlzLnBvcyA8IHRoaXMubGFzdEdhcFBvcykge1xuICAgICAgICAgICAgdGhpcy5sYXN0R2FwUG9zID0gdGhpcy5nYXBTdGFjay5wb3AoKTtcbiAgICAgICAgICAgIHRoaXMucG9zLS07XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5pc0VvbCA9IGZhbHNlO1xuICAgIH1cbn1cbiIsICJleHBvcnQgdmFyIFRva2VuVHlwZTtcbihmdW5jdGlvbiAoVG9rZW5UeXBlKSB7XG4gICAgVG9rZW5UeXBlW1Rva2VuVHlwZVtcIkNIQVJBQ1RFUlwiXSA9IDBdID0gXCJDSEFSQUNURVJcIjtcbiAgICBUb2tlblR5cGVbVG9rZW5UeXBlW1wiTlVMTF9DSEFSQUNURVJcIl0gPSAxXSA9IFwiTlVMTF9DSEFSQUNURVJcIjtcbiAgICBUb2tlblR5cGVbVG9rZW5UeXBlW1wiV0hJVEVTUEFDRV9DSEFSQUNURVJcIl0gPSAyXSA9IFwiV0hJVEVTUEFDRV9DSEFSQUNURVJcIjtcbiAgICBUb2tlblR5cGVbVG9rZW5UeXBlW1wiU1RBUlRfVEFHXCJdID0gM10gPSBcIlNUQVJUX1RBR1wiO1xuICAgIFRva2VuVHlwZVtUb2tlblR5cGVbXCJFTkRfVEFHXCJdID0gNF0gPSBcIkVORF9UQUdcIjtcbiAgICBUb2tlblR5cGVbVG9rZW5UeXBlW1wiQ09NTUVOVFwiXSA9IDVdID0gXCJDT01NRU5UXCI7XG4gICAgVG9rZW5UeXBlW1Rva2VuVHlwZVtcIkRPQ1RZUEVcIl0gPSA2XSA9IFwiRE9DVFlQRVwiO1xuICAgIFRva2VuVHlwZVtUb2tlblR5cGVbXCJFT0ZcIl0gPSA3XSA9IFwiRU9GXCI7XG4gICAgVG9rZW5UeXBlW1Rva2VuVHlwZVtcIkhJQkVSTkFUSU9OXCJdID0gOF0gPSBcIkhJQkVSTkFUSU9OXCI7XG59KShUb2tlblR5cGUgfHwgKFRva2VuVHlwZSA9IHt9KSk7XG5leHBvcnQgZnVuY3Rpb24gZ2V0VG9rZW5BdHRyKHRva2VuLCBhdHRyTmFtZSkge1xuICAgIGZvciAobGV0IGkgPSB0b2tlbi5hdHRycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgICBpZiAodG9rZW4uYXR0cnNbaV0ubmFtZSA9PT0gYXR0ck5hbWUpIHtcbiAgICAgICAgICAgIHJldHVybiB0b2tlbi5hdHRyc1tpXS52YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbn1cbiIsICIvKiogQWxsIHZhbGlkIG5hbWVzcGFjZXMgaW4gSFRNTC4gKi9cbmV4cG9ydCB2YXIgTlM7XG4oZnVuY3Rpb24gKE5TKSB7XG4gICAgTlNbXCJIVE1MXCJdID0gXCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sXCI7XG4gICAgTlNbXCJNQVRITUxcIl0gPSBcImh0dHA6Ly93d3cudzMub3JnLzE5OTgvTWF0aC9NYXRoTUxcIjtcbiAgICBOU1tcIlNWR1wiXSA9IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIjtcbiAgICBOU1tcIlhMSU5LXCJdID0gXCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rXCI7XG4gICAgTlNbXCJYTUxcIl0gPSBcImh0dHA6Ly93d3cudzMub3JnL1hNTC8xOTk4L25hbWVzcGFjZVwiO1xuICAgIE5TW1wiWE1MTlNcIl0gPSBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAveG1sbnMvXCI7XG59KShOUyB8fCAoTlMgPSB7fSkpO1xuZXhwb3J0IHZhciBBVFRSUztcbihmdW5jdGlvbiAoQVRUUlMpIHtcbiAgICBBVFRSU1tcIlRZUEVcIl0gPSBcInR5cGVcIjtcbiAgICBBVFRSU1tcIkFDVElPTlwiXSA9IFwiYWN0aW9uXCI7XG4gICAgQVRUUlNbXCJFTkNPRElOR1wiXSA9IFwiZW5jb2RpbmdcIjtcbiAgICBBVFRSU1tcIlBST01QVFwiXSA9IFwicHJvbXB0XCI7XG4gICAgQVRUUlNbXCJOQU1FXCJdID0gXCJuYW1lXCI7XG4gICAgQVRUUlNbXCJDT0xPUlwiXSA9IFwiY29sb3JcIjtcbiAgICBBVFRSU1tcIkZBQ0VcIl0gPSBcImZhY2VcIjtcbiAgICBBVFRSU1tcIlNJWkVcIl0gPSBcInNpemVcIjtcbn0pKEFUVFJTIHx8IChBVFRSUyA9IHt9KSk7XG4vKipcbiAqIFRoZSBtb2RlIG9mIHRoZSBkb2N1bWVudC5cbiAqXG4gKiBAc2VlIHtAbGluayBodHRwczovL2RvbS5zcGVjLndoYXR3Zy5vcmcvI2NvbmNlcHQtZG9jdW1lbnQtbGltaXRlZC1xdWlya3N9XG4gKi9cbmV4cG9ydCB2YXIgRE9DVU1FTlRfTU9ERTtcbihmdW5jdGlvbiAoRE9DVU1FTlRfTU9ERSkge1xuICAgIERPQ1VNRU5UX01PREVbXCJOT19RVUlSS1NcIl0gPSBcIm5vLXF1aXJrc1wiO1xuICAgIERPQ1VNRU5UX01PREVbXCJRVUlSS1NcIl0gPSBcInF1aXJrc1wiO1xuICAgIERPQ1VNRU5UX01PREVbXCJMSU1JVEVEX1FVSVJLU1wiXSA9IFwibGltaXRlZC1xdWlya3NcIjtcbn0pKERPQ1VNRU5UX01PREUgfHwgKERPQ1VNRU5UX01PREUgPSB7fSkpO1xuZXhwb3J0IHZhciBUQUdfTkFNRVM7XG4oZnVuY3Rpb24gKFRBR19OQU1FUykge1xuICAgIFRBR19OQU1FU1tcIkFcIl0gPSBcImFcIjtcbiAgICBUQUdfTkFNRVNbXCJBRERSRVNTXCJdID0gXCJhZGRyZXNzXCI7XG4gICAgVEFHX05BTUVTW1wiQU5OT1RBVElPTl9YTUxcIl0gPSBcImFubm90YXRpb24teG1sXCI7XG4gICAgVEFHX05BTUVTW1wiQVBQTEVUXCJdID0gXCJhcHBsZXRcIjtcbiAgICBUQUdfTkFNRVNbXCJBUkVBXCJdID0gXCJhcmVhXCI7XG4gICAgVEFHX05BTUVTW1wiQVJUSUNMRVwiXSA9IFwiYXJ0aWNsZVwiO1xuICAgIFRBR19OQU1FU1tcIkFTSURFXCJdID0gXCJhc2lkZVwiO1xuICAgIFRBR19OQU1FU1tcIkJcIl0gPSBcImJcIjtcbiAgICBUQUdfTkFNRVNbXCJCQVNFXCJdID0gXCJiYXNlXCI7XG4gICAgVEFHX05BTUVTW1wiQkFTRUZPTlRcIl0gPSBcImJhc2Vmb250XCI7XG4gICAgVEFHX05BTUVTW1wiQkdTT1VORFwiXSA9IFwiYmdzb3VuZFwiO1xuICAgIFRBR19OQU1FU1tcIkJJR1wiXSA9IFwiYmlnXCI7XG4gICAgVEFHX05BTUVTW1wiQkxPQ0tRVU9URVwiXSA9IFwiYmxvY2txdW90ZVwiO1xuICAgIFRBR19OQU1FU1tcIkJPRFlcIl0gPSBcImJvZHlcIjtcbiAgICBUQUdfTkFNRVNbXCJCUlwiXSA9IFwiYnJcIjtcbiAgICBUQUdfTkFNRVNbXCJCVVRUT05cIl0gPSBcImJ1dHRvblwiO1xuICAgIFRBR19OQU1FU1tcIkNBUFRJT05cIl0gPSBcImNhcHRpb25cIjtcbiAgICBUQUdfTkFNRVNbXCJDRU5URVJcIl0gPSBcImNlbnRlclwiO1xuICAgIFRBR19OQU1FU1tcIkNPREVcIl0gPSBcImNvZGVcIjtcbiAgICBUQUdfTkFNRVNbXCJDT0xcIl0gPSBcImNvbFwiO1xuICAgIFRBR19OQU1FU1tcIkNPTEdST1VQXCJdID0gXCJjb2xncm91cFwiO1xuICAgIFRBR19OQU1FU1tcIkREXCJdID0gXCJkZFwiO1xuICAgIFRBR19OQU1FU1tcIkRFU0NcIl0gPSBcImRlc2NcIjtcbiAgICBUQUdfTkFNRVNbXCJERVRBSUxTXCJdID0gXCJkZXRhaWxzXCI7XG4gICAgVEFHX05BTUVTW1wiRElBTE9HXCJdID0gXCJkaWFsb2dcIjtcbiAgICBUQUdfTkFNRVNbXCJESVJcIl0gPSBcImRpclwiO1xuICAgIFRBR19OQU1FU1tcIkRJVlwiXSA9IFwiZGl2XCI7XG4gICAgVEFHX05BTUVTW1wiRExcIl0gPSBcImRsXCI7XG4gICAgVEFHX05BTUVTW1wiRFRcIl0gPSBcImR0XCI7XG4gICAgVEFHX05BTUVTW1wiRU1cIl0gPSBcImVtXCI7XG4gICAgVEFHX05BTUVTW1wiRU1CRURcIl0gPSBcImVtYmVkXCI7XG4gICAgVEFHX05BTUVTW1wiRklFTERTRVRcIl0gPSBcImZpZWxkc2V0XCI7XG4gICAgVEFHX05BTUVTW1wiRklHQ0FQVElPTlwiXSA9IFwiZmlnY2FwdGlvblwiO1xuICAgIFRBR19OQU1FU1tcIkZJR1VSRVwiXSA9IFwiZmlndXJlXCI7XG4gICAgVEFHX05BTUVTW1wiRk9OVFwiXSA9IFwiZm9udFwiO1xuICAgIFRBR19OQU1FU1tcIkZPT1RFUlwiXSA9IFwiZm9vdGVyXCI7XG4gICAgVEFHX05BTUVTW1wiRk9SRUlHTl9PQkpFQ1RcIl0gPSBcImZvcmVpZ25PYmplY3RcIjtcbiAgICBUQUdfTkFNRVNbXCJGT1JNXCJdID0gXCJmb3JtXCI7XG4gICAgVEFHX05BTUVTW1wiRlJBTUVcIl0gPSBcImZyYW1lXCI7XG4gICAgVEFHX05BTUVTW1wiRlJBTUVTRVRcIl0gPSBcImZyYW1lc2V0XCI7XG4gICAgVEFHX05BTUVTW1wiSDFcIl0gPSBcImgxXCI7XG4gICAgVEFHX05BTUVTW1wiSDJcIl0gPSBcImgyXCI7XG4gICAgVEFHX05BTUVTW1wiSDNcIl0gPSBcImgzXCI7XG4gICAgVEFHX05BTUVTW1wiSDRcIl0gPSBcImg0XCI7XG4gICAgVEFHX05BTUVTW1wiSDVcIl0gPSBcImg1XCI7XG4gICAgVEFHX05BTUVTW1wiSDZcIl0gPSBcImg2XCI7XG4gICAgVEFHX05BTUVTW1wiSEVBRFwiXSA9IFwiaGVhZFwiO1xuICAgIFRBR19OQU1FU1tcIkhFQURFUlwiXSA9IFwiaGVhZGVyXCI7XG4gICAgVEFHX05BTUVTW1wiSEdST1VQXCJdID0gXCJoZ3JvdXBcIjtcbiAgICBUQUdfTkFNRVNbXCJIUlwiXSA9IFwiaHJcIjtcbiAgICBUQUdfTkFNRVNbXCJIVE1MXCJdID0gXCJodG1sXCI7XG4gICAgVEFHX05BTUVTW1wiSVwiXSA9IFwiaVwiO1xuICAgIFRBR19OQU1FU1tcIklNR1wiXSA9IFwiaW1nXCI7XG4gICAgVEFHX05BTUVTW1wiSU1BR0VcIl0gPSBcImltYWdlXCI7XG4gICAgVEFHX05BTUVTW1wiSU5QVVRcIl0gPSBcImlucHV0XCI7XG4gICAgVEFHX05BTUVTW1wiSUZSQU1FXCJdID0gXCJpZnJhbWVcIjtcbiAgICBUQUdfTkFNRVNbXCJLRVlHRU5cIl0gPSBcImtleWdlblwiO1xuICAgIFRBR19OQU1FU1tcIkxBQkVMXCJdID0gXCJsYWJlbFwiO1xuICAgIFRBR19OQU1FU1tcIkxJXCJdID0gXCJsaVwiO1xuICAgIFRBR19OQU1FU1tcIkxJTktcIl0gPSBcImxpbmtcIjtcbiAgICBUQUdfTkFNRVNbXCJMSVNUSU5HXCJdID0gXCJsaXN0aW5nXCI7XG4gICAgVEFHX05BTUVTW1wiTUFJTlwiXSA9IFwibWFpblwiO1xuICAgIFRBR19OQU1FU1tcIk1BTElHTk1BUktcIl0gPSBcIm1hbGlnbm1hcmtcIjtcbiAgICBUQUdfTkFNRVNbXCJNQVJRVUVFXCJdID0gXCJtYXJxdWVlXCI7XG4gICAgVEFHX05BTUVTW1wiTUFUSFwiXSA9IFwibWF0aFwiO1xuICAgIFRBR19OQU1FU1tcIk1FTlVcIl0gPSBcIm1lbnVcIjtcbiAgICBUQUdfTkFNRVNbXCJNRVRBXCJdID0gXCJtZXRhXCI7XG4gICAgVEFHX05BTUVTW1wiTUdMWVBIXCJdID0gXCJtZ2x5cGhcIjtcbiAgICBUQUdfTkFNRVNbXCJNSVwiXSA9IFwibWlcIjtcbiAgICBUQUdfTkFNRVNbXCJNT1wiXSA9IFwibW9cIjtcbiAgICBUQUdfTkFNRVNbXCJNTlwiXSA9IFwibW5cIjtcbiAgICBUQUdfTkFNRVNbXCJNU1wiXSA9IFwibXNcIjtcbiAgICBUQUdfTkFNRVNbXCJNVEVYVFwiXSA9IFwibXRleHRcIjtcbiAgICBUQUdfTkFNRVNbXCJOQVZcIl0gPSBcIm5hdlwiO1xuICAgIFRBR19OQU1FU1tcIk5PQlJcIl0gPSBcIm5vYnJcIjtcbiAgICBUQUdfTkFNRVNbXCJOT0ZSQU1FU1wiXSA9IFwibm9mcmFtZXNcIjtcbiAgICBUQUdfTkFNRVNbXCJOT0VNQkVEXCJdID0gXCJub2VtYmVkXCI7XG4gICAgVEFHX05BTUVTW1wiTk9TQ1JJUFRcIl0gPSBcIm5vc2NyaXB0XCI7XG4gICAgVEFHX05BTUVTW1wiT0JKRUNUXCJdID0gXCJvYmplY3RcIjtcbiAgICBUQUdfTkFNRVNbXCJPTFwiXSA9IFwib2xcIjtcbiAgICBUQUdfTkFNRVNbXCJPUFRHUk9VUFwiXSA9IFwib3B0Z3JvdXBcIjtcbiAgICBUQUdfTkFNRVNbXCJPUFRJT05cIl0gPSBcIm9wdGlvblwiO1xuICAgIFRBR19OQU1FU1tcIlBcIl0gPSBcInBcIjtcbiAgICBUQUdfTkFNRVNbXCJQQVJBTVwiXSA9IFwicGFyYW1cIjtcbiAgICBUQUdfTkFNRVNbXCJQTEFJTlRFWFRcIl0gPSBcInBsYWludGV4dFwiO1xuICAgIFRBR19OQU1FU1tcIlBSRVwiXSA9IFwicHJlXCI7XG4gICAgVEFHX05BTUVTW1wiUkJcIl0gPSBcInJiXCI7XG4gICAgVEFHX05BTUVTW1wiUlBcIl0gPSBcInJwXCI7XG4gICAgVEFHX05BTUVTW1wiUlRcIl0gPSBcInJ0XCI7XG4gICAgVEFHX05BTUVTW1wiUlRDXCJdID0gXCJydGNcIjtcbiAgICBUQUdfTkFNRVNbXCJSVUJZXCJdID0gXCJydWJ5XCI7XG4gICAgVEFHX05BTUVTW1wiU1wiXSA9IFwic1wiO1xuICAgIFRBR19OQU1FU1tcIlNDUklQVFwiXSA9IFwic2NyaXB0XCI7XG4gICAgVEFHX05BTUVTW1wiU0VBUkNIXCJdID0gXCJzZWFyY2hcIjtcbiAgICBUQUdfTkFNRVNbXCJTRUNUSU9OXCJdID0gXCJzZWN0aW9uXCI7XG4gICAgVEFHX05BTUVTW1wiU0VMRUNUXCJdID0gXCJzZWxlY3RcIjtcbiAgICBUQUdfTkFNRVNbXCJTT1VSQ0VcIl0gPSBcInNvdXJjZVwiO1xuICAgIFRBR19OQU1FU1tcIlNNQUxMXCJdID0gXCJzbWFsbFwiO1xuICAgIFRBR19OQU1FU1tcIlNQQU5cIl0gPSBcInNwYW5cIjtcbiAgICBUQUdfTkFNRVNbXCJTVFJJS0VcIl0gPSBcInN0cmlrZVwiO1xuICAgIFRBR19OQU1FU1tcIlNUUk9OR1wiXSA9IFwic3Ryb25nXCI7XG4gICAgVEFHX05BTUVTW1wiU1RZTEVcIl0gPSBcInN0eWxlXCI7XG4gICAgVEFHX05BTUVTW1wiU1VCXCJdID0gXCJzdWJcIjtcbiAgICBUQUdfTkFNRVNbXCJTVU1NQVJZXCJdID0gXCJzdW1tYXJ5XCI7XG4gICAgVEFHX05BTUVTW1wiU1VQXCJdID0gXCJzdXBcIjtcbiAgICBUQUdfTkFNRVNbXCJUQUJMRVwiXSA9IFwidGFibGVcIjtcbiAgICBUQUdfTkFNRVNbXCJUQk9EWVwiXSA9IFwidGJvZHlcIjtcbiAgICBUQUdfTkFNRVNbXCJURU1QTEFURVwiXSA9IFwidGVtcGxhdGVcIjtcbiAgICBUQUdfTkFNRVNbXCJURVhUQVJFQVwiXSA9IFwidGV4dGFyZWFcIjtcbiAgICBUQUdfTkFNRVNbXCJURk9PVFwiXSA9IFwidGZvb3RcIjtcbiAgICBUQUdfTkFNRVNbXCJURFwiXSA9IFwidGRcIjtcbiAgICBUQUdfTkFNRVNbXCJUSFwiXSA9IFwidGhcIjtcbiAgICBUQUdfTkFNRVNbXCJUSEVBRFwiXSA9IFwidGhlYWRcIjtcbiAgICBUQUdfTkFNRVNbXCJUSVRMRVwiXSA9IFwidGl0bGVcIjtcbiAgICBUQUdfTkFNRVNbXCJUUlwiXSA9IFwidHJcIjtcbiAgICBUQUdfTkFNRVNbXCJUUkFDS1wiXSA9IFwidHJhY2tcIjtcbiAgICBUQUdfTkFNRVNbXCJUVFwiXSA9IFwidHRcIjtcbiAgICBUQUdfTkFNRVNbXCJVXCJdID0gXCJ1XCI7XG4gICAgVEFHX05BTUVTW1wiVUxcIl0gPSBcInVsXCI7XG4gICAgVEFHX05BTUVTW1wiU1ZHXCJdID0gXCJzdmdcIjtcbiAgICBUQUdfTkFNRVNbXCJWQVJcIl0gPSBcInZhclwiO1xuICAgIFRBR19OQU1FU1tcIldCUlwiXSA9IFwid2JyXCI7XG4gICAgVEFHX05BTUVTW1wiWE1QXCJdID0gXCJ4bXBcIjtcbn0pKFRBR19OQU1FUyB8fCAoVEFHX05BTUVTID0ge30pKTtcbi8qKlxuICogVGFnIElEcyBhcmUgbnVtZXJpYyBJRHMgZm9yIGtub3duIHRhZyBuYW1lcy5cbiAqXG4gKiBXZSB1c2UgdGFnIElEcyB0byBpbXByb3ZlIHRoZSBwZXJmb3JtYW5jZSBvZiB0YWcgbmFtZSBjb21wYXJpc29ucy5cbiAqL1xuZXhwb3J0IHZhciBUQUdfSUQ7XG4oZnVuY3Rpb24gKFRBR19JRCkge1xuICAgIFRBR19JRFtUQUdfSURbXCJVTktOT1dOXCJdID0gMF0gPSBcIlVOS05PV05cIjtcbiAgICBUQUdfSURbVEFHX0lEW1wiQVwiXSA9IDFdID0gXCJBXCI7XG4gICAgVEFHX0lEW1RBR19JRFtcIkFERFJFU1NcIl0gPSAyXSA9IFwiQUREUkVTU1wiO1xuICAgIFRBR19JRFtUQUdfSURbXCJBTk5PVEFUSU9OX1hNTFwiXSA9IDNdID0gXCJBTk5PVEFUSU9OX1hNTFwiO1xuICAgIFRBR19JRFtUQUdfSURbXCJBUFBMRVRcIl0gPSA0XSA9IFwiQVBQTEVUXCI7XG4gICAgVEFHX0lEW1RBR19JRFtcIkFSRUFcIl0gPSA1XSA9IFwiQVJFQVwiO1xuICAgIFRBR19JRFtUQUdfSURbXCJBUlRJQ0xFXCJdID0gNl0gPSBcIkFSVElDTEVcIjtcbiAgICBUQUdfSURbVEFHX0lEW1wiQVNJREVcIl0gPSA3XSA9IFwiQVNJREVcIjtcbiAgICBUQUdfSURbVEFHX0lEW1wiQlwiXSA9IDhdID0gXCJCXCI7XG4gICAgVEFHX0lEW1RBR19JRFtcIkJBU0VcIl0gPSA5XSA9IFwiQkFTRVwiO1xuICAgIFRBR19JRFtUQUdfSURbXCJCQVNFRk9OVFwiXSA9IDEwXSA9IFwiQkFTRUZPTlRcIjtcbiAgICBUQUdfSURbVEFHX0lEW1wiQkdTT1VORFwiXSA9IDExXSA9IFwiQkdTT1VORFwiO1xuICAgIFRBR19JRFtUQUdfSURbXCJCSUdcIl0gPSAxMl0gPSBcIkJJR1wiO1xuICAgIFRBR19JRFtUQUdfSURbXCJCTE9DS1FVT1RFXCJdID0gMTNdID0gXCJCTE9DS1FVT1RFXCI7XG4gICAgVEFHX0lEW1RBR19JRFtcIkJPRFlcIl0gPSAxNF0gPSBcIkJPRFlcIjtcbiAgICBUQUdfSURbVEFHX0lEW1wiQlJcIl0gPSAxNV0gPSBcIkJSXCI7XG4gICAgVEFHX0lEW1RBR19JRFtcIkJVVFRPTlwiXSA9IDE2XSA9IFwiQlVUVE9OXCI7XG4gICAgVEFHX0lEW1RBR19JRFtcIkNBUFRJT05cIl0gPSAxN10gPSBcIkNBUFRJT05cIjtcbiAgICBUQUdfSURbVEFHX0lEW1wiQ0VOVEVSXCJdID0gMThdID0gXCJDRU5URVJcIjtcbiAgICBUQUdfSURbVEFHX0lEW1wiQ09ERVwiXSA9IDE5XSA9IFwiQ09ERVwiO1xuICAgIFRBR19JRFtUQUdfSURbXCJDT0xcIl0gPSAyMF0gPSBcIkNPTFwiO1xuICAgIFRBR19JRFtUQUdfSURbXCJDT0xHUk9VUFwiXSA9IDIxXSA9IFwiQ09MR1JPVVBcIjtcbiAgICBUQUdfSURbVEFHX0lEW1wiRERcIl0gPSAyMl0gPSBcIkREXCI7XG4gICAgVEFHX0lEW1RBR19JRFtcIkRFU0NcIl0gPSAyM10gPSBcIkRFU0NcIjtcbiAgICBUQUdfSURbVEFHX0lEW1wiREVUQUlMU1wiXSA9IDI0XSA9IFwiREVUQUlMU1wiO1xuICAgIFRBR19JRFtUQUdfSURbXCJESUFMT0dcIl0gPSAyNV0gPSBcIkRJQUxPR1wiO1xuICAgIFRBR19JRFtUQUdfSURbXCJESVJcIl0gPSAyNl0gPSBcIkRJUlwiO1xuICAgIFRBR19JRFtUQUdfSURbXCJESVZcIl0gPSAyN10gPSBcIkRJVlwiO1xuICAgIFRBR19JRFtUQUdfSURbXCJETFwiXSA9IDI4XSA9IFwiRExcIjtcbiAgICBUQUdfSURbVEFHX0lEW1wiRFRcIl0gPSAyOV0gPSBcIkRUXCI7XG4gICAgVEFHX0lEW1RBR19JRFtcIkVNXCJdID0gMzBdID0gXCJFTVwiO1xuICAgIFRBR19JRFtUQUdfSURbXCJFTUJFRFwiXSA9IDMxXSA9IFwiRU1CRURcIjtcbiAgICBUQUdfSURbVEFHX0lEW1wiRklFTERTRVRcIl0gPSAzMl0gPSBcIkZJRUxEU0VUXCI7XG4gICAgVEFHX0lEW1RBR19JRFtcIkZJR0NBUFRJT05cIl0gPSAzM10gPSBcIkZJR0NBUFRJT05cIjtcbiAgICBUQUdfSURbVEFHX0lEW1wiRklHVVJFXCJdID0gMzRdID0gXCJGSUdVUkVcIjtcbiAgICBUQUdfSURbVEFHX0lEW1wiRk9OVFwiXSA9IDM1XSA9IFwiRk9OVFwiO1xuICAgIFRBR19JRFtUQUdfSURbXCJGT09URVJcIl0gPSAzNl0gPSBcIkZPT1RFUlwiO1xuICAgIFRBR19JRFtUQUdfSURbXCJGT1JFSUdOX09CSkVDVFwiXSA9IDM3XSA9IFwiRk9SRUlHTl9PQkpFQ1RcIjtcbiAgICBUQUdfSURbVEFHX0lEW1wiRk9STVwiXSA9IDM4XSA9IFwiRk9STVwiO1xuICAgIFRBR19JRFtUQUdfSURbXCJGUkFNRVwiXSA9IDM5XSA9IFwiRlJBTUVcIjtcbiAgICBUQUdfSURbVEFHX0lEW1wiRlJBTUVTRVRcIl0gPSA0MF0gPSBcIkZSQU1FU0VUXCI7XG4gICAgVEFHX0lEW1RBR19JRFtcIkgxXCJdID0gNDFdID0gXCJIMVwiO1xuICAgIFRBR19JRFtUQUdfSURbXCJIMlwiXSA9IDQyXSA9IFwiSDJcIjtcbiAgICBUQUdfSURbVEFHX0lEW1wiSDNcIl0gPSA0M10gPSBcIkgzXCI7XG4gICAgVEFHX0lEW1RBR19JRFtcIkg0XCJdID0gNDRdID0gXCJINFwiO1xuICAgIFRBR19JRFtUQUdfSURbXCJINVwiXSA9IDQ1XSA9IFwiSDVcIjtcbiAgICBUQUdfSURbVEFHX0lEW1wiSDZcIl0gPSA0Nl0gPSBcIkg2XCI7XG4gICAgVEFHX0lEW1RBR19JRFtcIkhFQURcIl0gPSA0N10gPSBcIkhFQURcIjtcbiAgICBUQUdfSURbVEFHX0lEW1wiSEVBREVSXCJdID0gNDhdID0gXCJIRUFERVJcIjtcbiAgICBUQUdfSURbVEFHX0lEW1wiSEdST1VQXCJdID0gNDldID0gXCJIR1JPVVBcIjtcbiAgICBUQUdfSURbVEFHX0lEW1wiSFJcIl0gPSA1MF0gPSBcIkhSXCI7XG4gICAgVEFHX0lEW1RBR19JRFtcIkhUTUxcIl0gPSA1MV0gPSBcIkhUTUxcIjtcbiAgICBUQUdfSURbVEFHX0lEW1wiSVwiXSA9IDUyXSA9IFwiSVwiO1xuICAgIFRBR19JRFtUQUdfSURbXCJJTUdcIl0gPSA1M10gPSBcIklNR1wiO1xuICAgIFRBR19JRFtUQUdfSURbXCJJTUFHRVwiXSA9IDU0XSA9IFwiSU1BR0VcIjtcbiAgICBUQUdfSURbVEFHX0lEW1wiSU5QVVRcIl0gPSA1NV0gPSBcIklOUFVUXCI7XG4gICAgVEFHX0lEW1RBR19JRFtcIklGUkFNRVwiXSA9IDU2XSA9IFwiSUZSQU1FXCI7XG4gICAgVEFHX0lEW1RBR19JRFtcIktFWUdFTlwiXSA9IDU3XSA9IFwiS0VZR0VOXCI7XG4gICAgVEFHX0lEW1RBR19JRFtcIkxBQkVMXCJdID0gNThdID0gXCJMQUJFTFwiO1xuICAgIFRBR19JRFtUQUdfSURbXCJMSVwiXSA9IDU5XSA9IFwiTElcIjtcbiAgICBUQUdfSURbVEFHX0lEW1wiTElOS1wiXSA9IDYwXSA9IFwiTElOS1wiO1xuICAgIFRBR19JRFtUQUdfSURbXCJMSVNUSU5HXCJdID0gNjFdID0gXCJMSVNUSU5HXCI7XG4gICAgVEFHX0lEW1RBR19JRFtcIk1BSU5cIl0gPSA2Ml0gPSBcIk1BSU5cIjtcbiAgICBUQUdfSURbVEFHX0lEW1wiTUFMSUdOTUFSS1wiXSA9IDYzXSA9IFwiTUFMSUdOTUFSS1wiO1xuICAgIFRBR19JRFtUQUdfSURbXCJNQVJRVUVFXCJdID0gNjRdID0gXCJNQVJRVUVFXCI7XG4gICAgVEFHX0lEW1RBR19JRFtcIk1BVEhcIl0gPSA2NV0gPSBcIk1BVEhcIjtcbiAgICBUQUdfSURbVEFHX0lEW1wiTUVOVVwiXSA9IDY2XSA9IFwiTUVOVVwiO1xuICAgIFRBR19JRFtUQUdfSURbXCJNRVRBXCJdID0gNjddID0gXCJNRVRBXCI7XG4gICAgVEFHX0lEW1RBR19JRFtcIk1HTFlQSFwiXSA9IDY4XSA9IFwiTUdMWVBIXCI7XG4gICAgVEFHX0lEW1RBR19JRFtcIk1JXCJdID0gNjldID0gXCJNSVwiO1xuICAgIFRBR19JRFtUQUdfSURbXCJNT1wiXSA9IDcwXSA9IFwiTU9cIjtcbiAgICBUQUdfSURbVEFHX0lEW1wiTU5cIl0gPSA3MV0gPSBcIk1OXCI7XG4gICAgVEFHX0lEW1RBR19JRFtcIk1TXCJdID0gNzJdID0gXCJNU1wiO1xuICAgIFRBR19JRFtUQUdfSURbXCJNVEVYVFwiXSA9IDczXSA9IFwiTVRFWFRcIjtcbiAgICBUQUdfSURbVEFHX0lEW1wiTkFWXCJdID0gNzRdID0gXCJOQVZcIjtcbiAgICBUQUdfSURbVEFHX0lEW1wiTk9CUlwiXSA9IDc1XSA9IFwiTk9CUlwiO1xuICAgIFRBR19JRFtUQUdfSURbXCJOT0ZSQU1FU1wiXSA9IDc2XSA9IFwiTk9GUkFNRVNcIjtcbiAgICBUQUdfSURbVEFHX0lEW1wiTk9FTUJFRFwiXSA9IDc3XSA9IFwiTk9FTUJFRFwiO1xuICAgIFRBR19JRFtUQUdfSURbXCJOT1NDUklQVFwiXSA9IDc4XSA9IFwiTk9TQ1JJUFRcIjtcbiAgICBUQUdfSURbVEFHX0lEW1wiT0JKRUNUXCJdID0gNzldID0gXCJPQkpFQ1RcIjtcbiAgICBUQUdfSURbVEFHX0lEW1wiT0xcIl0gPSA4MF0gPSBcIk9MXCI7XG4gICAgVEFHX0lEW1RBR19JRFtcIk9QVEdST1VQXCJdID0gODFdID0gXCJPUFRHUk9VUFwiO1xuICAgIFRBR19JRFtUQUdfSURbXCJPUFRJT05cIl0gPSA4Ml0gPSBcIk9QVElPTlwiO1xuICAgIFRBR19JRFtUQUdfSURbXCJQXCJdID0gODNdID0gXCJQXCI7XG4gICAgVEFHX0lEW1RBR19JRFtcIlBBUkFNXCJdID0gODRdID0gXCJQQVJBTVwiO1xuICAgIFRBR19JRFtUQUdfSURbXCJQTEFJTlRFWFRcIl0gPSA4NV0gPSBcIlBMQUlOVEVYVFwiO1xuICAgIFRBR19JRFtUQUdfSURbXCJQUkVcIl0gPSA4Nl0gPSBcIlBSRVwiO1xuICAgIFRBR19JRFtUQUdfSURbXCJSQlwiXSA9IDg3XSA9IFwiUkJcIjtcbiAgICBUQUdfSURbVEFHX0lEW1wiUlBcIl0gPSA4OF0gPSBcIlJQXCI7XG4gICAgVEFHX0lEW1RBR19JRFtcIlJUXCJdID0gODldID0gXCJSVFwiO1xuICAgIFRBR19JRFtUQUdfSURbXCJSVENcIl0gPSA5MF0gPSBcIlJUQ1wiO1xuICAgIFRBR19JRFtUQUdfSURbXCJSVUJZXCJdID0gOTFdID0gXCJSVUJZXCI7XG4gICAgVEFHX0lEW1RBR19JRFtcIlNcIl0gPSA5Ml0gPSBcIlNcIjtcbiAgICBUQUdfSURbVEFHX0lEW1wiU0NSSVBUXCJdID0gOTNdID0gXCJTQ1JJUFRcIjtcbiAgICBUQUdfSURbVEFHX0lEW1wiU0VBUkNIXCJdID0gOTRdID0gXCJTRUFSQ0hcIjtcbiAgICBUQUdfSURbVEFHX0lEW1wiU0VDVElPTlwiXSA9IDk1XSA9IFwiU0VDVElPTlwiO1xuICAgIFRBR19JRFtUQUdfSURbXCJTRUxFQ1RcIl0gPSA5Nl0gPSBcIlNFTEVDVFwiO1xuICAgIFRBR19JRFtUQUdfSURbXCJTT1VSQ0VcIl0gPSA5N10gPSBcIlNPVVJDRVwiO1xuICAgIFRBR19JRFtUQUdfSURbXCJTTUFMTFwiXSA9IDk4XSA9IFwiU01BTExcIjtcbiAgICBUQUdfSURbVEFHX0lEW1wiU1BBTlwiXSA9IDk5XSA9IFwiU1BBTlwiO1xuICAgIFRBR19JRFtUQUdfSURbXCJTVFJJS0VcIl0gPSAxMDBdID0gXCJTVFJJS0VcIjtcbiAgICBUQUdfSURbVEFHX0lEW1wiU1RST05HXCJdID0gMTAxXSA9IFwiU1RST05HXCI7XG4gICAgVEFHX0lEW1RBR19JRFtcIlNUWUxFXCJdID0gMTAyXSA9IFwiU1RZTEVcIjtcbiAgICBUQUdfSURbVEFHX0lEW1wiU1VCXCJdID0gMTAzXSA9IFwiU1VCXCI7XG4gICAgVEFHX0lEW1RBR19JRFtcIlNVTU1BUllcIl0gPSAxMDRdID0gXCJTVU1NQVJZXCI7XG4gICAgVEFHX0lEW1RBR19JRFtcIlNVUFwiXSA9IDEwNV0gPSBcIlNVUFwiO1xuICAgIFRBR19JRFtUQUdfSURbXCJUQUJMRVwiXSA9IDEwNl0gPSBcIlRBQkxFXCI7XG4gICAgVEFHX0lEW1RBR19JRFtcIlRCT0RZXCJdID0gMTA3XSA9IFwiVEJPRFlcIjtcbiAgICBUQUdfSURbVEFHX0lEW1wiVEVNUExBVEVcIl0gPSAxMDhdID0gXCJURU1QTEFURVwiO1xuICAgIFRBR19JRFtUQUdfSURbXCJURVhUQVJFQVwiXSA9IDEwOV0gPSBcIlRFWFRBUkVBXCI7XG4gICAgVEFHX0lEW1RBR19JRFtcIlRGT09UXCJdID0gMTEwXSA9IFwiVEZPT1RcIjtcbiAgICBUQUdfSURbVEFHX0lEW1wiVERcIl0gPSAxMTFdID0gXCJURFwiO1xuICAgIFRBR19JRFtUQUdfSURbXCJUSFwiXSA9IDExMl0gPSBcIlRIXCI7XG4gICAgVEFHX0lEW1RBR19JRFtcIlRIRUFEXCJdID0gMTEzXSA9IFwiVEhFQURcIjtcbiAgICBUQUdfSURbVEFHX0lEW1wiVElUTEVcIl0gPSAxMTRdID0gXCJUSVRMRVwiO1xuICAgIFRBR19JRFtUQUdfSURbXCJUUlwiXSA9IDExNV0gPSBcIlRSXCI7XG4gICAgVEFHX0lEW1RBR19JRFtcIlRSQUNLXCJdID0gMTE2XSA9IFwiVFJBQ0tcIjtcbiAgICBUQUdfSURbVEFHX0lEW1wiVFRcIl0gPSAxMTddID0gXCJUVFwiO1xuICAgIFRBR19JRFtUQUdfSURbXCJVXCJdID0gMTE4XSA9IFwiVVwiO1xuICAgIFRBR19JRFtUQUdfSURbXCJVTFwiXSA9IDExOV0gPSBcIlVMXCI7XG4gICAgVEFHX0lEW1RBR19JRFtcIlNWR1wiXSA9IDEyMF0gPSBcIlNWR1wiO1xuICAgIFRBR19JRFtUQUdfSURbXCJWQVJcIl0gPSAxMjFdID0gXCJWQVJcIjtcbiAgICBUQUdfSURbVEFHX0lEW1wiV0JSXCJdID0gMTIyXSA9IFwiV0JSXCI7XG4gICAgVEFHX0lEW1RBR19JRFtcIlhNUFwiXSA9IDEyM10gPSBcIlhNUFwiO1xufSkoVEFHX0lEIHx8IChUQUdfSUQgPSB7fSkpO1xuY29uc3QgVEFHX05BTUVfVE9fSUQgPSBuZXcgTWFwKFtcbiAgICBbVEFHX05BTUVTLkEsIFRBR19JRC5BXSxcbiAgICBbVEFHX05BTUVTLkFERFJFU1MsIFRBR19JRC5BRERSRVNTXSxcbiAgICBbVEFHX05BTUVTLkFOTk9UQVRJT05fWE1MLCBUQUdfSUQuQU5OT1RBVElPTl9YTUxdLFxuICAgIFtUQUdfTkFNRVMuQVBQTEVULCBUQUdfSUQuQVBQTEVUXSxcbiAgICBbVEFHX05BTUVTLkFSRUEsIFRBR19JRC5BUkVBXSxcbiAgICBbVEFHX05BTUVTLkFSVElDTEUsIFRBR19JRC5BUlRJQ0xFXSxcbiAgICBbVEFHX05BTUVTLkFTSURFLCBUQUdfSUQuQVNJREVdLFxuICAgIFtUQUdfTkFNRVMuQiwgVEFHX0lELkJdLFxuICAgIFtUQUdfTkFNRVMuQkFTRSwgVEFHX0lELkJBU0VdLFxuICAgIFtUQUdfTkFNRVMuQkFTRUZPTlQsIFRBR19JRC5CQVNFRk9OVF0sXG4gICAgW1RBR19OQU1FUy5CR1NPVU5ELCBUQUdfSUQuQkdTT1VORF0sXG4gICAgW1RBR19OQU1FUy5CSUcsIFRBR19JRC5CSUddLFxuICAgIFtUQUdfTkFNRVMuQkxPQ0tRVU9URSwgVEFHX0lELkJMT0NLUVVPVEVdLFxuICAgIFtUQUdfTkFNRVMuQk9EWSwgVEFHX0lELkJPRFldLFxuICAgIFtUQUdfTkFNRVMuQlIsIFRBR19JRC5CUl0sXG4gICAgW1RBR19OQU1FUy5CVVRUT04sIFRBR19JRC5CVVRUT05dLFxuICAgIFtUQUdfTkFNRVMuQ0FQVElPTiwgVEFHX0lELkNBUFRJT05dLFxuICAgIFtUQUdfTkFNRVMuQ0VOVEVSLCBUQUdfSUQuQ0VOVEVSXSxcbiAgICBbVEFHX05BTUVTLkNPREUsIFRBR19JRC5DT0RFXSxcbiAgICBbVEFHX05BTUVTLkNPTCwgVEFHX0lELkNPTF0sXG4gICAgW1RBR19OQU1FUy5DT0xHUk9VUCwgVEFHX0lELkNPTEdST1VQXSxcbiAgICBbVEFHX05BTUVTLkRELCBUQUdfSUQuRERdLFxuICAgIFtUQUdfTkFNRVMuREVTQywgVEFHX0lELkRFU0NdLFxuICAgIFtUQUdfTkFNRVMuREVUQUlMUywgVEFHX0lELkRFVEFJTFNdLFxuICAgIFtUQUdfTkFNRVMuRElBTE9HLCBUQUdfSUQuRElBTE9HXSxcbiAgICBbVEFHX05BTUVTLkRJUiwgVEFHX0lELkRJUl0sXG4gICAgW1RBR19OQU1FUy5ESVYsIFRBR19JRC5ESVZdLFxuICAgIFtUQUdfTkFNRVMuREwsIFRBR19JRC5ETF0sXG4gICAgW1RBR19OQU1FUy5EVCwgVEFHX0lELkRUXSxcbiAgICBbVEFHX05BTUVTLkVNLCBUQUdfSUQuRU1dLFxuICAgIFtUQUdfTkFNRVMuRU1CRUQsIFRBR19JRC5FTUJFRF0sXG4gICAgW1RBR19OQU1FUy5GSUVMRFNFVCwgVEFHX0lELkZJRUxEU0VUXSxcbiAgICBbVEFHX05BTUVTLkZJR0NBUFRJT04sIFRBR19JRC5GSUdDQVBUSU9OXSxcbiAgICBbVEFHX05BTUVTLkZJR1VSRSwgVEFHX0lELkZJR1VSRV0sXG4gICAgW1RBR19OQU1FUy5GT05ULCBUQUdfSUQuRk9OVF0sXG4gICAgW1RBR19OQU1FUy5GT09URVIsIFRBR19JRC5GT09URVJdLFxuICAgIFtUQUdfTkFNRVMuRk9SRUlHTl9PQkpFQ1QsIFRBR19JRC5GT1JFSUdOX09CSkVDVF0sXG4gICAgW1RBR19OQU1FUy5GT1JNLCBUQUdfSUQuRk9STV0sXG4gICAgW1RBR19OQU1FUy5GUkFNRSwgVEFHX0lELkZSQU1FXSxcbiAgICBbVEFHX05BTUVTLkZSQU1FU0VULCBUQUdfSUQuRlJBTUVTRVRdLFxuICAgIFtUQUdfTkFNRVMuSDEsIFRBR19JRC5IMV0sXG4gICAgW1RBR19OQU1FUy5IMiwgVEFHX0lELkgyXSxcbiAgICBbVEFHX05BTUVTLkgzLCBUQUdfSUQuSDNdLFxuICAgIFtUQUdfTkFNRVMuSDQsIFRBR19JRC5INF0sXG4gICAgW1RBR19OQU1FUy5INSwgVEFHX0lELkg1XSxcbiAgICBbVEFHX05BTUVTLkg2LCBUQUdfSUQuSDZdLFxuICAgIFtUQUdfTkFNRVMuSEVBRCwgVEFHX0lELkhFQURdLFxuICAgIFtUQUdfTkFNRVMuSEVBREVSLCBUQUdfSUQuSEVBREVSXSxcbiAgICBbVEFHX05BTUVTLkhHUk9VUCwgVEFHX0lELkhHUk9VUF0sXG4gICAgW1RBR19OQU1FUy5IUiwgVEFHX0lELkhSXSxcbiAgICBbVEFHX05BTUVTLkhUTUwsIFRBR19JRC5IVE1MXSxcbiAgICBbVEFHX05BTUVTLkksIFRBR19JRC5JXSxcbiAgICBbVEFHX05BTUVTLklNRywgVEFHX0lELklNR10sXG4gICAgW1RBR19OQU1FUy5JTUFHRSwgVEFHX0lELklNQUdFXSxcbiAgICBbVEFHX05BTUVTLklOUFVULCBUQUdfSUQuSU5QVVRdLFxuICAgIFtUQUdfTkFNRVMuSUZSQU1FLCBUQUdfSUQuSUZSQU1FXSxcbiAgICBbVEFHX05BTUVTLktFWUdFTiwgVEFHX0lELktFWUdFTl0sXG4gICAgW1RBR19OQU1FUy5MQUJFTCwgVEFHX0lELkxBQkVMXSxcbiAgICBbVEFHX05BTUVTLkxJLCBUQUdfSUQuTEldLFxuICAgIFtUQUdfTkFNRVMuTElOSywgVEFHX0lELkxJTktdLFxuICAgIFtUQUdfTkFNRVMuTElTVElORywgVEFHX0lELkxJU1RJTkddLFxuICAgIFtUQUdfTkFNRVMuTUFJTiwgVEFHX0lELk1BSU5dLFxuICAgIFtUQUdfTkFNRVMuTUFMSUdOTUFSSywgVEFHX0lELk1BTElHTk1BUktdLFxuICAgIFtUQUdfTkFNRVMuTUFSUVVFRSwgVEFHX0lELk1BUlFVRUVdLFxuICAgIFtUQUdfTkFNRVMuTUFUSCwgVEFHX0lELk1BVEhdLFxuICAgIFtUQUdfTkFNRVMuTUVOVSwgVEFHX0lELk1FTlVdLFxuICAgIFtUQUdfTkFNRVMuTUVUQSwgVEFHX0lELk1FVEFdLFxuICAgIFtUQUdfTkFNRVMuTUdMWVBILCBUQUdfSUQuTUdMWVBIXSxcbiAgICBbVEFHX05BTUVTLk1JLCBUQUdfSUQuTUldLFxuICAgIFtUQUdfTkFNRVMuTU8sIFRBR19JRC5NT10sXG4gICAgW1RBR19OQU1FUy5NTiwgVEFHX0lELk1OXSxcbiAgICBbVEFHX05BTUVTLk1TLCBUQUdfSUQuTVNdLFxuICAgIFtUQUdfTkFNRVMuTVRFWFQsIFRBR19JRC5NVEVYVF0sXG4gICAgW1RBR19OQU1FUy5OQVYsIFRBR19JRC5OQVZdLFxuICAgIFtUQUdfTkFNRVMuTk9CUiwgVEFHX0lELk5PQlJdLFxuICAgIFtUQUdfTkFNRVMuTk9GUkFNRVMsIFRBR19JRC5OT0ZSQU1FU10sXG4gICAgW1RBR19OQU1FUy5OT0VNQkVELCBUQUdfSUQuTk9FTUJFRF0sXG4gICAgW1RBR19OQU1FUy5OT1NDUklQVCwgVEFHX0lELk5PU0NSSVBUXSxcbiAgICBbVEFHX05BTUVTLk9CSkVDVCwgVEFHX0lELk9CSkVDVF0sXG4gICAgW1RBR19OQU1FUy5PTCwgVEFHX0lELk9MXSxcbiAgICBbVEFHX05BTUVTLk9QVEdST1VQLCBUQUdfSUQuT1BUR1JPVVBdLFxuICAgIFtUQUdfTkFNRVMuT1BUSU9OLCBUQUdfSUQuT1BUSU9OXSxcbiAgICBbVEFHX05BTUVTLlAsIFRBR19JRC5QXSxcbiAgICBbVEFHX05BTUVTLlBBUkFNLCBUQUdfSUQuUEFSQU1dLFxuICAgIFtUQUdfTkFNRVMuUExBSU5URVhULCBUQUdfSUQuUExBSU5URVhUXSxcbiAgICBbVEFHX05BTUVTLlBSRSwgVEFHX0lELlBSRV0sXG4gICAgW1RBR19OQU1FUy5SQiwgVEFHX0lELlJCXSxcbiAgICBbVEFHX05BTUVTLlJQLCBUQUdfSUQuUlBdLFxuICAgIFtUQUdfTkFNRVMuUlQsIFRBR19JRC5SVF0sXG4gICAgW1RBR19OQU1FUy5SVEMsIFRBR19JRC5SVENdLFxuICAgIFtUQUdfTkFNRVMuUlVCWSwgVEFHX0lELlJVQlldLFxuICAgIFtUQUdfTkFNRVMuUywgVEFHX0lELlNdLFxuICAgIFtUQUdfTkFNRVMuU0NSSVBULCBUQUdfSUQuU0NSSVBUXSxcbiAgICBbVEFHX05BTUVTLlNFQVJDSCwgVEFHX0lELlNFQVJDSF0sXG4gICAgW1RBR19OQU1FUy5TRUNUSU9OLCBUQUdfSUQuU0VDVElPTl0sXG4gICAgW1RBR19OQU1FUy5TRUxFQ1QsIFRBR19JRC5TRUxFQ1RdLFxuICAgIFtUQUdfTkFNRVMuU09VUkNFLCBUQUdfSUQuU09VUkNFXSxcbiAgICBbVEFHX05BTUVTLlNNQUxMLCBUQUdfSUQuU01BTExdLFxuICAgIFtUQUdfTkFNRVMuU1BBTiwgVEFHX0lELlNQQU5dLFxuICAgIFtUQUdfTkFNRVMuU1RSSUtFLCBUQUdfSUQuU1RSSUtFXSxcbiAgICBbVEFHX05BTUVTLlNUUk9ORywgVEFHX0lELlNUUk9OR10sXG4gICAgW1RBR19OQU1FUy5TVFlMRSwgVEFHX0lELlNUWUxFXSxcbiAgICBbVEFHX05BTUVTLlNVQiwgVEFHX0lELlNVQl0sXG4gICAgW1RBR19OQU1FUy5TVU1NQVJZLCBUQUdfSUQuU1VNTUFSWV0sXG4gICAgW1RBR19OQU1FUy5TVVAsIFRBR19JRC5TVVBdLFxuICAgIFtUQUdfTkFNRVMuVEFCTEUsIFRBR19JRC5UQUJMRV0sXG4gICAgW1RBR19OQU1FUy5UQk9EWSwgVEFHX0lELlRCT0RZXSxcbiAgICBbVEFHX05BTUVTLlRFTVBMQVRFLCBUQUdfSUQuVEVNUExBVEVdLFxuICAgIFtUQUdfTkFNRVMuVEVYVEFSRUEsIFRBR19JRC5URVhUQVJFQV0sXG4gICAgW1RBR19OQU1FUy5URk9PVCwgVEFHX0lELlRGT09UXSxcbiAgICBbVEFHX05BTUVTLlRELCBUQUdfSUQuVERdLFxuICAgIFtUQUdfTkFNRVMuVEgsIFRBR19JRC5USF0sXG4gICAgW1RBR19OQU1FUy5USEVBRCwgVEFHX0lELlRIRUFEXSxcbiAgICBbVEFHX05BTUVTLlRJVExFLCBUQUdfSUQuVElUTEVdLFxuICAgIFtUQUdfTkFNRVMuVFIsIFRBR19JRC5UUl0sXG4gICAgW1RBR19OQU1FUy5UUkFDSywgVEFHX0lELlRSQUNLXSxcbiAgICBbVEFHX05BTUVTLlRULCBUQUdfSUQuVFRdLFxuICAgIFtUQUdfTkFNRVMuVSwgVEFHX0lELlVdLFxuICAgIFtUQUdfTkFNRVMuVUwsIFRBR19JRC5VTF0sXG4gICAgW1RBR19OQU1FUy5TVkcsIFRBR19JRC5TVkddLFxuICAgIFtUQUdfTkFNRVMuVkFSLCBUQUdfSUQuVkFSXSxcbiAgICBbVEFHX05BTUVTLldCUiwgVEFHX0lELldCUl0sXG4gICAgW1RBR19OQU1FUy5YTVAsIFRBR19JRC5YTVBdLFxuXSk7XG5leHBvcnQgZnVuY3Rpb24gZ2V0VGFnSUQodGFnTmFtZSkge1xuICAgIHZhciBfYTtcbiAgICByZXR1cm4gKF9hID0gVEFHX05BTUVfVE9fSUQuZ2V0KHRhZ05hbWUpKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBUQUdfSUQuVU5LTk9XTjtcbn1cbmNvbnN0ICQgPSBUQUdfSUQ7XG5leHBvcnQgY29uc3QgU1BFQ0lBTF9FTEVNRU5UUyA9IHtcbiAgICBbTlMuSFRNTF06IG5ldyBTZXQoW1xuICAgICAgICAkLkFERFJFU1MsXG4gICAgICAgICQuQVBQTEVULFxuICAgICAgICAkLkFSRUEsXG4gICAgICAgICQuQVJUSUNMRSxcbiAgICAgICAgJC5BU0lERSxcbiAgICAgICAgJC5CQVNFLFxuICAgICAgICAkLkJBU0VGT05ULFxuICAgICAgICAkLkJHU09VTkQsXG4gICAgICAgICQuQkxPQ0tRVU9URSxcbiAgICAgICAgJC5CT0RZLFxuICAgICAgICAkLkJSLFxuICAgICAgICAkLkJVVFRPTixcbiAgICAgICAgJC5DQVBUSU9OLFxuICAgICAgICAkLkNFTlRFUixcbiAgICAgICAgJC5DT0wsXG4gICAgICAgICQuQ09MR1JPVVAsXG4gICAgICAgICQuREQsXG4gICAgICAgICQuREVUQUlMUyxcbiAgICAgICAgJC5ESVIsXG4gICAgICAgICQuRElWLFxuICAgICAgICAkLkRMLFxuICAgICAgICAkLkRULFxuICAgICAgICAkLkVNQkVELFxuICAgICAgICAkLkZJRUxEU0VULFxuICAgICAgICAkLkZJR0NBUFRJT04sXG4gICAgICAgICQuRklHVVJFLFxuICAgICAgICAkLkZPT1RFUixcbiAgICAgICAgJC5GT1JNLFxuICAgICAgICAkLkZSQU1FLFxuICAgICAgICAkLkZSQU1FU0VULFxuICAgICAgICAkLkgxLFxuICAgICAgICAkLkgyLFxuICAgICAgICAkLkgzLFxuICAgICAgICAkLkg0LFxuICAgICAgICAkLkg1LFxuICAgICAgICAkLkg2LFxuICAgICAgICAkLkhFQUQsXG4gICAgICAgICQuSEVBREVSLFxuICAgICAgICAkLkhHUk9VUCxcbiAgICAgICAgJC5IUixcbiAgICAgICAgJC5IVE1MLFxuICAgICAgICAkLklGUkFNRSxcbiAgICAgICAgJC5JTUcsXG4gICAgICAgICQuSU5QVVQsXG4gICAgICAgICQuTEksXG4gICAgICAgICQuTElOSyxcbiAgICAgICAgJC5MSVNUSU5HLFxuICAgICAgICAkLk1BSU4sXG4gICAgICAgICQuTUFSUVVFRSxcbiAgICAgICAgJC5NRU5VLFxuICAgICAgICAkLk1FVEEsXG4gICAgICAgICQuTkFWLFxuICAgICAgICAkLk5PRU1CRUQsXG4gICAgICAgICQuTk9GUkFNRVMsXG4gICAgICAgICQuTk9TQ1JJUFQsXG4gICAgICAgICQuT0JKRUNULFxuICAgICAgICAkLk9MLFxuICAgICAgICAkLlAsXG4gICAgICAgICQuUEFSQU0sXG4gICAgICAgICQuUExBSU5URVhULFxuICAgICAgICAkLlBSRSxcbiAgICAgICAgJC5TQ1JJUFQsXG4gICAgICAgICQuU0VDVElPTixcbiAgICAgICAgJC5TRUxFQ1QsXG4gICAgICAgICQuU09VUkNFLFxuICAgICAgICAkLlNUWUxFLFxuICAgICAgICAkLlNVTU1BUlksXG4gICAgICAgICQuVEFCTEUsXG4gICAgICAgICQuVEJPRFksXG4gICAgICAgICQuVEQsXG4gICAgICAgICQuVEVNUExBVEUsXG4gICAgICAgICQuVEVYVEFSRUEsXG4gICAgICAgICQuVEZPT1QsXG4gICAgICAgICQuVEgsXG4gICAgICAgICQuVEhFQUQsXG4gICAgICAgICQuVElUTEUsXG4gICAgICAgICQuVFIsXG4gICAgICAgICQuVFJBQ0ssXG4gICAgICAgICQuVUwsXG4gICAgICAgICQuV0JSLFxuICAgICAgICAkLlhNUCxcbiAgICBdKSxcbiAgICBbTlMuTUFUSE1MXTogbmV3IFNldChbJC5NSSwgJC5NTywgJC5NTiwgJC5NUywgJC5NVEVYVCwgJC5BTk5PVEFUSU9OX1hNTF0pLFxuICAgIFtOUy5TVkddOiBuZXcgU2V0KFskLlRJVExFLCAkLkZPUkVJR05fT0JKRUNULCAkLkRFU0NdKSxcbiAgICBbTlMuWExJTktdOiBuZXcgU2V0KCksXG4gICAgW05TLlhNTF06IG5ldyBTZXQoKSxcbiAgICBbTlMuWE1MTlNdOiBuZXcgU2V0KCksXG59O1xuZXhwb3J0IGNvbnN0IE5VTUJFUkVEX0hFQURFUlMgPSBuZXcgU2V0KFskLkgxLCAkLkgyLCAkLkgzLCAkLkg0LCAkLkg1LCAkLkg2XSk7XG5jb25zdCBVTkVTQ0FQRURfVEVYVCA9IG5ldyBTZXQoW1xuICAgIFRBR19OQU1FUy5TVFlMRSxcbiAgICBUQUdfTkFNRVMuU0NSSVBULFxuICAgIFRBR19OQU1FUy5YTVAsXG4gICAgVEFHX05BTUVTLklGUkFNRSxcbiAgICBUQUdfTkFNRVMuTk9FTUJFRCxcbiAgICBUQUdfTkFNRVMuTk9GUkFNRVMsXG4gICAgVEFHX05BTUVTLlBMQUlOVEVYVCxcbl0pO1xuZXhwb3J0IGZ1bmN0aW9uIGhhc1VuZXNjYXBlZFRleHQodG4sIHNjcmlwdGluZ0VuYWJsZWQpIHtcbiAgICByZXR1cm4gVU5FU0NBUEVEX1RFWFQuaGFzKHRuKSB8fCAoc2NyaXB0aW5nRW5hYmxlZCAmJiB0biA9PT0gVEFHX05BTUVTLk5PU0NSSVBUKTtcbn1cbiIsICJpbXBvcnQgeyBQcmVwcm9jZXNzb3IgfSBmcm9tICcuL3ByZXByb2Nlc3Nvci5qcyc7XG5pbXBvcnQgeyBDT0RFX1BPSU5UUyBhcyAkLCBTRVFVRU5DRVMgYXMgJCQsIFJFUExBQ0VNRU5UX0NIQVJBQ1RFUiwgaXNTdXJyb2dhdGUsIGlzVW5kZWZpbmVkQ29kZVBvaW50LCBpc0NvbnRyb2xDb2RlUG9pbnQsIH0gZnJvbSAnLi4vY29tbW9uL3VuaWNvZGUuanMnO1xuaW1wb3J0IHsgVG9rZW5UeXBlLCBnZXRUb2tlbkF0dHIsIH0gZnJvbSAnLi4vY29tbW9uL3Rva2VuLmpzJztcbmltcG9ydCB7IGh0bWxEZWNvZGVUcmVlLCBFbnRpdHlEZWNvZGVyLCBEZWNvZGluZ01vZGUgfSBmcm9tICdlbnRpdGllcy9saWIvZGVjb2RlLmpzJztcbmltcG9ydCB7IEVSUiB9IGZyb20gJy4uL2NvbW1vbi9lcnJvci1jb2Rlcy5qcyc7XG5pbXBvcnQgeyBUQUdfSUQsIGdldFRhZ0lEIH0gZnJvbSAnLi4vY29tbW9uL2h0bWwuanMnO1xuLy9TdGF0ZXNcbnZhciBTdGF0ZTtcbihmdW5jdGlvbiAoU3RhdGUpIHtcbiAgICBTdGF0ZVtTdGF0ZVtcIkRBVEFcIl0gPSAwXSA9IFwiREFUQVwiO1xuICAgIFN0YXRlW1N0YXRlW1wiUkNEQVRBXCJdID0gMV0gPSBcIlJDREFUQVwiO1xuICAgIFN0YXRlW1N0YXRlW1wiUkFXVEVYVFwiXSA9IDJdID0gXCJSQVdURVhUXCI7XG4gICAgU3RhdGVbU3RhdGVbXCJTQ1JJUFRfREFUQVwiXSA9IDNdID0gXCJTQ1JJUFRfREFUQVwiO1xuICAgIFN0YXRlW1N0YXRlW1wiUExBSU5URVhUXCJdID0gNF0gPSBcIlBMQUlOVEVYVFwiO1xuICAgIFN0YXRlW1N0YXRlW1wiVEFHX09QRU5cIl0gPSA1XSA9IFwiVEFHX09QRU5cIjtcbiAgICBTdGF0ZVtTdGF0ZVtcIkVORF9UQUdfT1BFTlwiXSA9IDZdID0gXCJFTkRfVEFHX09QRU5cIjtcbiAgICBTdGF0ZVtTdGF0ZVtcIlRBR19OQU1FXCJdID0gN10gPSBcIlRBR19OQU1FXCI7XG4gICAgU3RhdGVbU3RhdGVbXCJSQ0RBVEFfTEVTU19USEFOX1NJR05cIl0gPSA4XSA9IFwiUkNEQVRBX0xFU1NfVEhBTl9TSUdOXCI7XG4gICAgU3RhdGVbU3RhdGVbXCJSQ0RBVEFfRU5EX1RBR19PUEVOXCJdID0gOV0gPSBcIlJDREFUQV9FTkRfVEFHX09QRU5cIjtcbiAgICBTdGF0ZVtTdGF0ZVtcIlJDREFUQV9FTkRfVEFHX05BTUVcIl0gPSAxMF0gPSBcIlJDREFUQV9FTkRfVEFHX05BTUVcIjtcbiAgICBTdGF0ZVtTdGF0ZVtcIlJBV1RFWFRfTEVTU19USEFOX1NJR05cIl0gPSAxMV0gPSBcIlJBV1RFWFRfTEVTU19USEFOX1NJR05cIjtcbiAgICBTdGF0ZVtTdGF0ZVtcIlJBV1RFWFRfRU5EX1RBR19PUEVOXCJdID0gMTJdID0gXCJSQVdURVhUX0VORF9UQUdfT1BFTlwiO1xuICAgIFN0YXRlW1N0YXRlW1wiUkFXVEVYVF9FTkRfVEFHX05BTUVcIl0gPSAxM10gPSBcIlJBV1RFWFRfRU5EX1RBR19OQU1FXCI7XG4gICAgU3RhdGVbU3RhdGVbXCJTQ1JJUFRfREFUQV9MRVNTX1RIQU5fU0lHTlwiXSA9IDE0XSA9IFwiU0NSSVBUX0RBVEFfTEVTU19USEFOX1NJR05cIjtcbiAgICBTdGF0ZVtTdGF0ZVtcIlNDUklQVF9EQVRBX0VORF9UQUdfT1BFTlwiXSA9IDE1XSA9IFwiU0NSSVBUX0RBVEFfRU5EX1RBR19PUEVOXCI7XG4gICAgU3RhdGVbU3RhdGVbXCJTQ1JJUFRfREFUQV9FTkRfVEFHX05BTUVcIl0gPSAxNl0gPSBcIlNDUklQVF9EQVRBX0VORF9UQUdfTkFNRVwiO1xuICAgIFN0YXRlW1N0YXRlW1wiU0NSSVBUX0RBVEFfRVNDQVBFX1NUQVJUXCJdID0gMTddID0gXCJTQ1JJUFRfREFUQV9FU0NBUEVfU1RBUlRcIjtcbiAgICBTdGF0ZVtTdGF0ZVtcIlNDUklQVF9EQVRBX0VTQ0FQRV9TVEFSVF9EQVNIXCJdID0gMThdID0gXCJTQ1JJUFRfREFUQV9FU0NBUEVfU1RBUlRfREFTSFwiO1xuICAgIFN0YXRlW1N0YXRlW1wiU0NSSVBUX0RBVEFfRVNDQVBFRFwiXSA9IDE5XSA9IFwiU0NSSVBUX0RBVEFfRVNDQVBFRFwiO1xuICAgIFN0YXRlW1N0YXRlW1wiU0NSSVBUX0RBVEFfRVNDQVBFRF9EQVNIXCJdID0gMjBdID0gXCJTQ1JJUFRfREFUQV9FU0NBUEVEX0RBU0hcIjtcbiAgICBTdGF0ZVtTdGF0ZVtcIlNDUklQVF9EQVRBX0VTQ0FQRURfREFTSF9EQVNIXCJdID0gMjFdID0gXCJTQ1JJUFRfREFUQV9FU0NBUEVEX0RBU0hfREFTSFwiO1xuICAgIFN0YXRlW1N0YXRlW1wiU0NSSVBUX0RBVEFfRVNDQVBFRF9MRVNTX1RIQU5fU0lHTlwiXSA9IDIyXSA9IFwiU0NSSVBUX0RBVEFfRVNDQVBFRF9MRVNTX1RIQU5fU0lHTlwiO1xuICAgIFN0YXRlW1N0YXRlW1wiU0NSSVBUX0RBVEFfRVNDQVBFRF9FTkRfVEFHX09QRU5cIl0gPSAyM10gPSBcIlNDUklQVF9EQVRBX0VTQ0FQRURfRU5EX1RBR19PUEVOXCI7XG4gICAgU3RhdGVbU3RhdGVbXCJTQ1JJUFRfREFUQV9FU0NBUEVEX0VORF9UQUdfTkFNRVwiXSA9IDI0XSA9IFwiU0NSSVBUX0RBVEFfRVNDQVBFRF9FTkRfVEFHX05BTUVcIjtcbiAgICBTdGF0ZVtTdGF0ZVtcIlNDUklQVF9EQVRBX0RPVUJMRV9FU0NBUEVfU1RBUlRcIl0gPSAyNV0gPSBcIlNDUklQVF9EQVRBX0RPVUJMRV9FU0NBUEVfU1RBUlRcIjtcbiAgICBTdGF0ZVtTdGF0ZVtcIlNDUklQVF9EQVRBX0RPVUJMRV9FU0NBUEVEXCJdID0gMjZdID0gXCJTQ1JJUFRfREFUQV9ET1VCTEVfRVNDQVBFRFwiO1xuICAgIFN0YXRlW1N0YXRlW1wiU0NSSVBUX0RBVEFfRE9VQkxFX0VTQ0FQRURfREFTSFwiXSA9IDI3XSA9IFwiU0NSSVBUX0RBVEFfRE9VQkxFX0VTQ0FQRURfREFTSFwiO1xuICAgIFN0YXRlW1N0YXRlW1wiU0NSSVBUX0RBVEFfRE9VQkxFX0VTQ0FQRURfREFTSF9EQVNIXCJdID0gMjhdID0gXCJTQ1JJUFRfREFUQV9ET1VCTEVfRVNDQVBFRF9EQVNIX0RBU0hcIjtcbiAgICBTdGF0ZVtTdGF0ZVtcIlNDUklQVF9EQVRBX0RPVUJMRV9FU0NBUEVEX0xFU1NfVEhBTl9TSUdOXCJdID0gMjldID0gXCJTQ1JJUFRfREFUQV9ET1VCTEVfRVNDQVBFRF9MRVNTX1RIQU5fU0lHTlwiO1xuICAgIFN0YXRlW1N0YXRlW1wiU0NSSVBUX0RBVEFfRE9VQkxFX0VTQ0FQRV9FTkRcIl0gPSAzMF0gPSBcIlNDUklQVF9EQVRBX0RPVUJMRV9FU0NBUEVfRU5EXCI7XG4gICAgU3RhdGVbU3RhdGVbXCJCRUZPUkVfQVRUUklCVVRFX05BTUVcIl0gPSAzMV0gPSBcIkJFRk9SRV9BVFRSSUJVVEVfTkFNRVwiO1xuICAgIFN0YXRlW1N0YXRlW1wiQVRUUklCVVRFX05BTUVcIl0gPSAzMl0gPSBcIkFUVFJJQlVURV9OQU1FXCI7XG4gICAgU3RhdGVbU3RhdGVbXCJBRlRFUl9BVFRSSUJVVEVfTkFNRVwiXSA9IDMzXSA9IFwiQUZURVJfQVRUUklCVVRFX05BTUVcIjtcbiAgICBTdGF0ZVtTdGF0ZVtcIkJFRk9SRV9BVFRSSUJVVEVfVkFMVUVcIl0gPSAzNF0gPSBcIkJFRk9SRV9BVFRSSUJVVEVfVkFMVUVcIjtcbiAgICBTdGF0ZVtTdGF0ZVtcIkFUVFJJQlVURV9WQUxVRV9ET1VCTEVfUVVPVEVEXCJdID0gMzVdID0gXCJBVFRSSUJVVEVfVkFMVUVfRE9VQkxFX1FVT1RFRFwiO1xuICAgIFN0YXRlW1N0YXRlW1wiQVRUUklCVVRFX1ZBTFVFX1NJTkdMRV9RVU9URURcIl0gPSAzNl0gPSBcIkFUVFJJQlVURV9WQUxVRV9TSU5HTEVfUVVPVEVEXCI7XG4gICAgU3RhdGVbU3RhdGVbXCJBVFRSSUJVVEVfVkFMVUVfVU5RVU9URURcIl0gPSAzN10gPSBcIkFUVFJJQlVURV9WQUxVRV9VTlFVT1RFRFwiO1xuICAgIFN0YXRlW1N0YXRlW1wiQUZURVJfQVRUUklCVVRFX1ZBTFVFX1FVT1RFRFwiXSA9IDM4XSA9IFwiQUZURVJfQVRUUklCVVRFX1ZBTFVFX1FVT1RFRFwiO1xuICAgIFN0YXRlW1N0YXRlW1wiU0VMRl9DTE9TSU5HX1NUQVJUX1RBR1wiXSA9IDM5XSA9IFwiU0VMRl9DTE9TSU5HX1NUQVJUX1RBR1wiO1xuICAgIFN0YXRlW1N0YXRlW1wiQk9HVVNfQ09NTUVOVFwiXSA9IDQwXSA9IFwiQk9HVVNfQ09NTUVOVFwiO1xuICAgIFN0YXRlW1N0YXRlW1wiTUFSS1VQX0RFQ0xBUkFUSU9OX09QRU5cIl0gPSA0MV0gPSBcIk1BUktVUF9ERUNMQVJBVElPTl9PUEVOXCI7XG4gICAgU3RhdGVbU3RhdGVbXCJDT01NRU5UX1NUQVJUXCJdID0gNDJdID0gXCJDT01NRU5UX1NUQVJUXCI7XG4gICAgU3RhdGVbU3RhdGVbXCJDT01NRU5UX1NUQVJUX0RBU0hcIl0gPSA0M10gPSBcIkNPTU1FTlRfU1RBUlRfREFTSFwiO1xuICAgIFN0YXRlW1N0YXRlW1wiQ09NTUVOVFwiXSA9IDQ0XSA9IFwiQ09NTUVOVFwiO1xuICAgIFN0YXRlW1N0YXRlW1wiQ09NTUVOVF9MRVNTX1RIQU5fU0lHTlwiXSA9IDQ1XSA9IFwiQ09NTUVOVF9MRVNTX1RIQU5fU0lHTlwiO1xuICAgIFN0YXRlW1N0YXRlW1wiQ09NTUVOVF9MRVNTX1RIQU5fU0lHTl9CQU5HXCJdID0gNDZdID0gXCJDT01NRU5UX0xFU1NfVEhBTl9TSUdOX0JBTkdcIjtcbiAgICBTdGF0ZVtTdGF0ZVtcIkNPTU1FTlRfTEVTU19USEFOX1NJR05fQkFOR19EQVNIXCJdID0gNDddID0gXCJDT01NRU5UX0xFU1NfVEhBTl9TSUdOX0JBTkdfREFTSFwiO1xuICAgIFN0YXRlW1N0YXRlW1wiQ09NTUVOVF9MRVNTX1RIQU5fU0lHTl9CQU5HX0RBU0hfREFTSFwiXSA9IDQ4XSA9IFwiQ09NTUVOVF9MRVNTX1RIQU5fU0lHTl9CQU5HX0RBU0hfREFTSFwiO1xuICAgIFN0YXRlW1N0YXRlW1wiQ09NTUVOVF9FTkRfREFTSFwiXSA9IDQ5XSA9IFwiQ09NTUVOVF9FTkRfREFTSFwiO1xuICAgIFN0YXRlW1N0YXRlW1wiQ09NTUVOVF9FTkRcIl0gPSA1MF0gPSBcIkNPTU1FTlRfRU5EXCI7XG4gICAgU3RhdGVbU3RhdGVbXCJDT01NRU5UX0VORF9CQU5HXCJdID0gNTFdID0gXCJDT01NRU5UX0VORF9CQU5HXCI7XG4gICAgU3RhdGVbU3RhdGVbXCJET0NUWVBFXCJdID0gNTJdID0gXCJET0NUWVBFXCI7XG4gICAgU3RhdGVbU3RhdGVbXCJCRUZPUkVfRE9DVFlQRV9OQU1FXCJdID0gNTNdID0gXCJCRUZPUkVfRE9DVFlQRV9OQU1FXCI7XG4gICAgU3RhdGVbU3RhdGVbXCJET0NUWVBFX05BTUVcIl0gPSA1NF0gPSBcIkRPQ1RZUEVfTkFNRVwiO1xuICAgIFN0YXRlW1N0YXRlW1wiQUZURVJfRE9DVFlQRV9OQU1FXCJdID0gNTVdID0gXCJBRlRFUl9ET0NUWVBFX05BTUVcIjtcbiAgICBTdGF0ZVtTdGF0ZVtcIkFGVEVSX0RPQ1RZUEVfUFVCTElDX0tFWVdPUkRcIl0gPSA1Nl0gPSBcIkFGVEVSX0RPQ1RZUEVfUFVCTElDX0tFWVdPUkRcIjtcbiAgICBTdGF0ZVtTdGF0ZVtcIkJFRk9SRV9ET0NUWVBFX1BVQkxJQ19JREVOVElGSUVSXCJdID0gNTddID0gXCJCRUZPUkVfRE9DVFlQRV9QVUJMSUNfSURFTlRJRklFUlwiO1xuICAgIFN0YXRlW1N0YXRlW1wiRE9DVFlQRV9QVUJMSUNfSURFTlRJRklFUl9ET1VCTEVfUVVPVEVEXCJdID0gNThdID0gXCJET0NUWVBFX1BVQkxJQ19JREVOVElGSUVSX0RPVUJMRV9RVU9URURcIjtcbiAgICBTdGF0ZVtTdGF0ZVtcIkRPQ1RZUEVfUFVCTElDX0lERU5USUZJRVJfU0lOR0xFX1FVT1RFRFwiXSA9IDU5XSA9IFwiRE9DVFlQRV9QVUJMSUNfSURFTlRJRklFUl9TSU5HTEVfUVVPVEVEXCI7XG4gICAgU3RhdGVbU3RhdGVbXCJBRlRFUl9ET0NUWVBFX1BVQkxJQ19JREVOVElGSUVSXCJdID0gNjBdID0gXCJBRlRFUl9ET0NUWVBFX1BVQkxJQ19JREVOVElGSUVSXCI7XG4gICAgU3RhdGVbU3RhdGVbXCJCRVRXRUVOX0RPQ1RZUEVfUFVCTElDX0FORF9TWVNURU1fSURFTlRJRklFUlNcIl0gPSA2MV0gPSBcIkJFVFdFRU5fRE9DVFlQRV9QVUJMSUNfQU5EX1NZU1RFTV9JREVOVElGSUVSU1wiO1xuICAgIFN0YXRlW1N0YXRlW1wiQUZURVJfRE9DVFlQRV9TWVNURU1fS0VZV09SRFwiXSA9IDYyXSA9IFwiQUZURVJfRE9DVFlQRV9TWVNURU1fS0VZV09SRFwiO1xuICAgIFN0YXRlW1N0YXRlW1wiQkVGT1JFX0RPQ1RZUEVfU1lTVEVNX0lERU5USUZJRVJcIl0gPSA2M10gPSBcIkJFRk9SRV9ET0NUWVBFX1NZU1RFTV9JREVOVElGSUVSXCI7XG4gICAgU3RhdGVbU3RhdGVbXCJET0NUWVBFX1NZU1RFTV9JREVOVElGSUVSX0RPVUJMRV9RVU9URURcIl0gPSA2NF0gPSBcIkRPQ1RZUEVfU1lTVEVNX0lERU5USUZJRVJfRE9VQkxFX1FVT1RFRFwiO1xuICAgIFN0YXRlW1N0YXRlW1wiRE9DVFlQRV9TWVNURU1fSURFTlRJRklFUl9TSU5HTEVfUVVPVEVEXCJdID0gNjVdID0gXCJET0NUWVBFX1NZU1RFTV9JREVOVElGSUVSX1NJTkdMRV9RVU9URURcIjtcbiAgICBTdGF0ZVtTdGF0ZVtcIkFGVEVSX0RPQ1RZUEVfU1lTVEVNX0lERU5USUZJRVJcIl0gPSA2Nl0gPSBcIkFGVEVSX0RPQ1RZUEVfU1lTVEVNX0lERU5USUZJRVJcIjtcbiAgICBTdGF0ZVtTdGF0ZVtcIkJPR1VTX0RPQ1RZUEVcIl0gPSA2N10gPSBcIkJPR1VTX0RPQ1RZUEVcIjtcbiAgICBTdGF0ZVtTdGF0ZVtcIkNEQVRBX1NFQ1RJT05cIl0gPSA2OF0gPSBcIkNEQVRBX1NFQ1RJT05cIjtcbiAgICBTdGF0ZVtTdGF0ZVtcIkNEQVRBX1NFQ1RJT05fQlJBQ0tFVFwiXSA9IDY5XSA9IFwiQ0RBVEFfU0VDVElPTl9CUkFDS0VUXCI7XG4gICAgU3RhdGVbU3RhdGVbXCJDREFUQV9TRUNUSU9OX0VORFwiXSA9IDcwXSA9IFwiQ0RBVEFfU0VDVElPTl9FTkRcIjtcbiAgICBTdGF0ZVtTdGF0ZVtcIkNIQVJBQ1RFUl9SRUZFUkVOQ0VcIl0gPSA3MV0gPSBcIkNIQVJBQ1RFUl9SRUZFUkVOQ0VcIjtcbiAgICBTdGF0ZVtTdGF0ZVtcIkFNQklHVU9VU19BTVBFUlNBTkRcIl0gPSA3Ml0gPSBcIkFNQklHVU9VU19BTVBFUlNBTkRcIjtcbn0pKFN0YXRlIHx8IChTdGF0ZSA9IHt9KSk7XG4vL1Rva2VuaXplciBpbml0aWFsIHN0YXRlcyBmb3IgZGlmZmVyZW50IG1vZGVzXG5leHBvcnQgY29uc3QgVG9rZW5pemVyTW9kZSA9IHtcbiAgICBEQVRBOiBTdGF0ZS5EQVRBLFxuICAgIFJDREFUQTogU3RhdGUuUkNEQVRBLFxuICAgIFJBV1RFWFQ6IFN0YXRlLlJBV1RFWFQsXG4gICAgU0NSSVBUX0RBVEE6IFN0YXRlLlNDUklQVF9EQVRBLFxuICAgIFBMQUlOVEVYVDogU3RhdGUuUExBSU5URVhULFxuICAgIENEQVRBX1NFQ1RJT046IFN0YXRlLkNEQVRBX1NFQ1RJT04sXG59O1xuLy9VdGlsc1xuLy9PUFRJTUlaQVRJT046IHRoZXNlIHV0aWxpdHkgZnVuY3Rpb25zIHNob3VsZCBub3QgYmUgbW92ZWQgb3V0IG9mIHRoaXMgbW9kdWxlLiBWOCBDcmFua3NoYWZ0IHdpbGwgbm90IGlubGluZVxuLy90aGlzIGZ1bmN0aW9ucyBpZiB0aGV5IHdpbGwgYmUgc2l0dWF0ZWQgaW4gYW5vdGhlciBtb2R1bGUgZHVlIHRvIGNvbnRleHQgc3dpdGNoLlxuLy9BbHdheXMgcGVyZm9ybSBpbmxpbmluZyBjaGVjayBiZWZvcmUgbW9kaWZ5aW5nIHRoaXMgZnVuY3Rpb25zICgnbm9kZSAtLXRyYWNlLWlubGluaW5nJykuXG5mdW5jdGlvbiBpc0FzY2lpRGlnaXQoY3ApIHtcbiAgICByZXR1cm4gY3AgPj0gJC5ESUdJVF8wICYmIGNwIDw9ICQuRElHSVRfOTtcbn1cbmZ1bmN0aW9uIGlzQXNjaWlVcHBlcihjcCkge1xuICAgIHJldHVybiBjcCA+PSAkLkxBVElOX0NBUElUQUxfQSAmJiBjcCA8PSAkLkxBVElOX0NBUElUQUxfWjtcbn1cbmZ1bmN0aW9uIGlzQXNjaWlMb3dlcihjcCkge1xuICAgIHJldHVybiBjcCA+PSAkLkxBVElOX1NNQUxMX0EgJiYgY3AgPD0gJC5MQVRJTl9TTUFMTF9aO1xufVxuZnVuY3Rpb24gaXNBc2NpaUxldHRlcihjcCkge1xuICAgIHJldHVybiBpc0FzY2lpTG93ZXIoY3ApIHx8IGlzQXNjaWlVcHBlcihjcCk7XG59XG5mdW5jdGlvbiBpc0FzY2lpQWxwaGFOdW1lcmljKGNwKSB7XG4gICAgcmV0dXJuIGlzQXNjaWlMZXR0ZXIoY3ApIHx8IGlzQXNjaWlEaWdpdChjcCk7XG59XG5mdW5jdGlvbiB0b0FzY2lpTG93ZXIoY3ApIHtcbiAgICByZXR1cm4gY3AgKyAzMjtcbn1cbmZ1bmN0aW9uIGlzV2hpdGVzcGFjZShjcCkge1xuICAgIHJldHVybiBjcCA9PT0gJC5TUEFDRSB8fCBjcCA9PT0gJC5MSU5FX0ZFRUQgfHwgY3AgPT09ICQuVEFCVUxBVElPTiB8fCBjcCA9PT0gJC5GT1JNX0ZFRUQ7XG59XG5mdW5jdGlvbiBpc1NjcmlwdERhdGFEb3VibGVFc2NhcGVTZXF1ZW5jZUVuZChjcCkge1xuICAgIHJldHVybiBpc1doaXRlc3BhY2UoY3ApIHx8IGNwID09PSAkLlNPTElEVVMgfHwgY3AgPT09ICQuR1JFQVRFUl9USEFOX1NJR047XG59XG5mdW5jdGlvbiBnZXRFcnJvckZvck51bWVyaWNDaGFyYWN0ZXJSZWZlcmVuY2UoY29kZSkge1xuICAgIGlmIChjb2RlID09PSAkLk5VTEwpIHtcbiAgICAgICAgcmV0dXJuIEVSUi5udWxsQ2hhcmFjdGVyUmVmZXJlbmNlO1xuICAgIH1cbiAgICBlbHNlIGlmIChjb2RlID4gMTExNDExMSkge1xuICAgICAgICByZXR1cm4gRVJSLmNoYXJhY3RlclJlZmVyZW5jZU91dHNpZGVVbmljb2RlUmFuZ2U7XG4gICAgfVxuICAgIGVsc2UgaWYgKGlzU3Vycm9nYXRlKGNvZGUpKSB7XG4gICAgICAgIHJldHVybiBFUlIuc3Vycm9nYXRlQ2hhcmFjdGVyUmVmZXJlbmNlO1xuICAgIH1cbiAgICBlbHNlIGlmIChpc1VuZGVmaW5lZENvZGVQb2ludChjb2RlKSkge1xuICAgICAgICByZXR1cm4gRVJSLm5vbmNoYXJhY3RlckNoYXJhY3RlclJlZmVyZW5jZTtcbiAgICB9XG4gICAgZWxzZSBpZiAoaXNDb250cm9sQ29kZVBvaW50KGNvZGUpIHx8IGNvZGUgPT09ICQuQ0FSUklBR0VfUkVUVVJOKSB7XG4gICAgICAgIHJldHVybiBFUlIuY29udHJvbENoYXJhY3RlclJlZmVyZW5jZTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG59XG4vL1Rva2VuaXplclxuZXhwb3J0IGNsYXNzIFRva2VuaXplciB7XG4gICAgY29uc3RydWN0b3Iob3B0aW9ucywgaGFuZGxlcikge1xuICAgICAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xuICAgICAgICB0aGlzLmhhbmRsZXIgPSBoYW5kbGVyO1xuICAgICAgICB0aGlzLnBhdXNlZCA9IGZhbHNlO1xuICAgICAgICAvKiogRW5zdXJlcyB0aGF0IHRoZSBwYXJzaW5nIGxvb3AgaXNuJ3QgcnVuIG11bHRpcGxlIHRpbWVzIGF0IG9uY2UuICovXG4gICAgICAgIHRoaXMuaW5Mb29wID0gZmFsc2U7XG4gICAgICAgIC8qKlxuICAgICAgICAgKiBJbmRpY2F0ZXMgdGhhdCB0aGUgY3VycmVudCBhZGp1c3RlZCBub2RlIGV4aXN0cywgaXMgbm90IGFuIGVsZW1lbnQgaW4gdGhlIEhUTUwgbmFtZXNwYWNlLFxuICAgICAgICAgKiBhbmQgdGhhdCBpdCBpcyBub3QgYW4gaW50ZWdyYXRpb24gcG9pbnQgZm9yIGVpdGhlciBNYXRoTUwgb3IgSFRNTC5cbiAgICAgICAgICpcbiAgICAgICAgICogQHNlZSB7QGxpbmsgaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2UvcGFyc2luZy5odG1sI3RyZWUtY29uc3RydWN0aW9ufVxuICAgICAgICAgKi9cbiAgICAgICAgdGhpcy5pbkZvcmVpZ25Ob2RlID0gZmFsc2U7XG4gICAgICAgIHRoaXMubGFzdFN0YXJ0VGFnTmFtZSA9ICcnO1xuICAgICAgICB0aGlzLmFjdGl2ZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLnN0YXRlID0gU3RhdGUuREFUQTtcbiAgICAgICAgdGhpcy5yZXR1cm5TdGF0ZSA9IFN0YXRlLkRBVEE7XG4gICAgICAgIHRoaXMuZW50aXR5U3RhcnRQb3MgPSAwO1xuICAgICAgICB0aGlzLmNvbnN1bWVkQWZ0ZXJTbmFwc2hvdCA9IC0xO1xuICAgICAgICB0aGlzLmN1cnJlbnRDaGFyYWN0ZXJUb2tlbiA9IG51bGw7XG4gICAgICAgIHRoaXMuY3VycmVudFRva2VuID0gbnVsbDtcbiAgICAgICAgdGhpcy5jdXJyZW50QXR0ciA9IHsgbmFtZTogJycsIHZhbHVlOiAnJyB9O1xuICAgICAgICB0aGlzLnByZXByb2Nlc3NvciA9IG5ldyBQcmVwcm9jZXNzb3IoaGFuZGxlcik7XG4gICAgICAgIHRoaXMuY3VycmVudExvY2F0aW9uID0gdGhpcy5nZXRDdXJyZW50TG9jYXRpb24oLTEpO1xuICAgICAgICB0aGlzLmVudGl0eURlY29kZXIgPSBuZXcgRW50aXR5RGVjb2RlcihodG1sRGVjb2RlVHJlZSwgKGNwLCBjb25zdW1lZCkgPT4ge1xuICAgICAgICAgICAgLy8gTm90ZTogU2V0IGBwb3NgIF9iZWZvcmVfIGZsdXNoaW5nLCBhcyBmbHVzaGluZyBtaWdodCBkcm9wXG4gICAgICAgICAgICAvLyB0aGUgY3VycmVudCBjaHVuayBhbmQgaW52YWxpZGF0ZSBgZW50aXR5U3RhcnRQb3NgLlxuICAgICAgICAgICAgdGhpcy5wcmVwcm9jZXNzb3IucG9zID0gdGhpcy5lbnRpdHlTdGFydFBvcyArIGNvbnN1bWVkIC0gMTtcbiAgICAgICAgICAgIHRoaXMuX2ZsdXNoQ29kZVBvaW50Q29uc3VtZWRBc0NoYXJhY3RlclJlZmVyZW5jZShjcCk7XG4gICAgICAgIH0sIGhhbmRsZXIub25QYXJzZUVycm9yXG4gICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICBtaXNzaW5nU2VtaWNvbG9uQWZ0ZXJDaGFyYWN0ZXJSZWZlcmVuY2U6ICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZXJyKEVSUi5taXNzaW5nU2VtaWNvbG9uQWZ0ZXJDaGFyYWN0ZXJSZWZlcmVuY2UsIDEpO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgYWJzZW5jZU9mRGlnaXRzSW5OdW1lcmljQ2hhcmFjdGVyUmVmZXJlbmNlOiAoY29uc3VtZWQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZXJyKEVSUi5hYnNlbmNlT2ZEaWdpdHNJbk51bWVyaWNDaGFyYWN0ZXJSZWZlcmVuY2UsIHRoaXMuZW50aXR5U3RhcnRQb3MgLSB0aGlzLnByZXByb2Nlc3Nvci5wb3MgKyBjb25zdW1lZCk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB2YWxpZGF0ZU51bWVyaWNDaGFyYWN0ZXJSZWZlcmVuY2U6IChjb2RlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGVycm9yID0gZ2V0RXJyb3JGb3JOdW1lcmljQ2hhcmFjdGVyUmVmZXJlbmNlKGNvZGUpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoZXJyb3IpXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9lcnIoZXJyb3IsIDEpO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICA6IHVuZGVmaW5lZCk7XG4gICAgfVxuICAgIC8vRXJyb3JzXG4gICAgX2Vycihjb2RlLCBjcE9mZnNldCA9IDApIHtcbiAgICAgICAgdmFyIF9hLCBfYjtcbiAgICAgICAgKF9iID0gKF9hID0gdGhpcy5oYW5kbGVyKS5vblBhcnNlRXJyb3IpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5jYWxsKF9hLCB0aGlzLnByZXByb2Nlc3Nvci5nZXRFcnJvcihjb2RlLCBjcE9mZnNldCkpO1xuICAgIH1cbiAgICAvLyBOT1RFOiBgb2Zmc2V0YCBtYXkgbmV2ZXIgcnVuIGFjcm9zcyBsaW5lIGJvdW5kYXJpZXMuXG4gICAgZ2V0Q3VycmVudExvY2F0aW9uKG9mZnNldCkge1xuICAgICAgICBpZiAoIXRoaXMub3B0aW9ucy5zb3VyY2VDb2RlTG9jYXRpb25JbmZvKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgc3RhcnRMaW5lOiB0aGlzLnByZXByb2Nlc3Nvci5saW5lLFxuICAgICAgICAgICAgc3RhcnRDb2w6IHRoaXMucHJlcHJvY2Vzc29yLmNvbCAtIG9mZnNldCxcbiAgICAgICAgICAgIHN0YXJ0T2Zmc2V0OiB0aGlzLnByZXByb2Nlc3Nvci5vZmZzZXQgLSBvZmZzZXQsXG4gICAgICAgICAgICBlbmRMaW5lOiAtMSxcbiAgICAgICAgICAgIGVuZENvbDogLTEsXG4gICAgICAgICAgICBlbmRPZmZzZXQ6IC0xLFxuICAgICAgICB9O1xuICAgIH1cbiAgICBfcnVuUGFyc2luZ0xvb3AoKSB7XG4gICAgICAgIGlmICh0aGlzLmluTG9vcClcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgdGhpcy5pbkxvb3AgPSB0cnVlO1xuICAgICAgICB3aGlsZSAodGhpcy5hY3RpdmUgJiYgIXRoaXMucGF1c2VkKSB7XG4gICAgICAgICAgICB0aGlzLmNvbnN1bWVkQWZ0ZXJTbmFwc2hvdCA9IDA7XG4gICAgICAgICAgICBjb25zdCBjcCA9IHRoaXMuX2NvbnN1bWUoKTtcbiAgICAgICAgICAgIGlmICghdGhpcy5fZW5zdXJlSGliZXJuYXRpb24oKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2NhbGxTdGF0ZShjcCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5pbkxvb3AgPSBmYWxzZTtcbiAgICB9XG4gICAgLy9BUElcbiAgICBwYXVzZSgpIHtcbiAgICAgICAgdGhpcy5wYXVzZWQgPSB0cnVlO1xuICAgIH1cbiAgICByZXN1bWUod3JpdGVDYWxsYmFjaykge1xuICAgICAgICBpZiAoIXRoaXMucGF1c2VkKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1BhcnNlciB3YXMgYWxyZWFkeSByZXN1bWVkJyk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5wYXVzZWQgPSBmYWxzZTtcbiAgICAgICAgLy8gTmVjZXNzYXJ5IGZvciBzeW5jaHJvbm91cyByZXN1bWUuXG4gICAgICAgIGlmICh0aGlzLmluTG9vcClcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgdGhpcy5fcnVuUGFyc2luZ0xvb3AoKTtcbiAgICAgICAgaWYgKCF0aGlzLnBhdXNlZCkge1xuICAgICAgICAgICAgd3JpdGVDYWxsYmFjayA9PT0gbnVsbCB8fCB3cml0ZUNhbGxiYWNrID09PSB2b2lkIDAgPyB2b2lkIDAgOiB3cml0ZUNhbGxiYWNrKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgd3JpdGUoY2h1bmssIGlzTGFzdENodW5rLCB3cml0ZUNhbGxiYWNrKSB7XG4gICAgICAgIHRoaXMuYWN0aXZlID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5wcmVwcm9jZXNzb3Iud3JpdGUoY2h1bmssIGlzTGFzdENodW5rKTtcbiAgICAgICAgdGhpcy5fcnVuUGFyc2luZ0xvb3AoKTtcbiAgICAgICAgaWYgKCF0aGlzLnBhdXNlZCkge1xuICAgICAgICAgICAgd3JpdGVDYWxsYmFjayA9PT0gbnVsbCB8fCB3cml0ZUNhbGxiYWNrID09PSB2b2lkIDAgPyB2b2lkIDAgOiB3cml0ZUNhbGxiYWNrKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaW5zZXJ0SHRtbEF0Q3VycmVudFBvcyhjaHVuaykge1xuICAgICAgICB0aGlzLmFjdGl2ZSA9IHRydWU7XG4gICAgICAgIHRoaXMucHJlcHJvY2Vzc29yLmluc2VydEh0bWxBdEN1cnJlbnRQb3MoY2h1bmspO1xuICAgICAgICB0aGlzLl9ydW5QYXJzaW5nTG9vcCgpO1xuICAgIH1cbiAgICAvL0hpYmVybmF0aW9uXG4gICAgX2Vuc3VyZUhpYmVybmF0aW9uKCkge1xuICAgICAgICBpZiAodGhpcy5wcmVwcm9jZXNzb3IuZW5kT2ZDaHVua0hpdCkge1xuICAgICAgICAgICAgdGhpcy5wcmVwcm9jZXNzb3IucmV0cmVhdCh0aGlzLmNvbnN1bWVkQWZ0ZXJTbmFwc2hvdCk7XG4gICAgICAgICAgICB0aGlzLmNvbnN1bWVkQWZ0ZXJTbmFwc2hvdCA9IDA7XG4gICAgICAgICAgICB0aGlzLmFjdGl2ZSA9IGZhbHNlO1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICAvL0NvbnN1bXB0aW9uXG4gICAgX2NvbnN1bWUoKSB7XG4gICAgICAgIHRoaXMuY29uc3VtZWRBZnRlclNuYXBzaG90Kys7XG4gICAgICAgIHJldHVybiB0aGlzLnByZXByb2Nlc3Nvci5hZHZhbmNlKCk7XG4gICAgfVxuICAgIF9hZHZhbmNlQnkoY291bnQpIHtcbiAgICAgICAgdGhpcy5jb25zdW1lZEFmdGVyU25hcHNob3QgKz0gY291bnQ7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY291bnQ7IGkrKykge1xuICAgICAgICAgICAgdGhpcy5wcmVwcm9jZXNzb3IuYWR2YW5jZSgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIF9jb25zdW1lU2VxdWVuY2VJZk1hdGNoKHBhdHRlcm4sIGNhc2VTZW5zaXRpdmUpIHtcbiAgICAgICAgaWYgKHRoaXMucHJlcHJvY2Vzc29yLnN0YXJ0c1dpdGgocGF0dGVybiwgY2FzZVNlbnNpdGl2ZSkpIHtcbiAgICAgICAgICAgIC8vIFdlIHdpbGwgYWxyZWFkeSBoYXZlIGNvbnN1bWVkIG9uZSBjaGFyYWN0ZXIgYmVmb3JlIGNhbGxpbmcgdGhpcyBtZXRob2QuXG4gICAgICAgICAgICB0aGlzLl9hZHZhbmNlQnkocGF0dGVybi5sZW5ndGggLSAxKTtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgLy9Ub2tlbiBjcmVhdGlvblxuICAgIF9jcmVhdGVTdGFydFRhZ1Rva2VuKCkge1xuICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbiA9IHtcbiAgICAgICAgICAgIHR5cGU6IFRva2VuVHlwZS5TVEFSVF9UQUcsXG4gICAgICAgICAgICB0YWdOYW1lOiAnJyxcbiAgICAgICAgICAgIHRhZ0lEOiBUQUdfSUQuVU5LTk9XTixcbiAgICAgICAgICAgIHNlbGZDbG9zaW5nOiBmYWxzZSxcbiAgICAgICAgICAgIGFja1NlbGZDbG9zaW5nOiBmYWxzZSxcbiAgICAgICAgICAgIGF0dHJzOiBbXSxcbiAgICAgICAgICAgIGxvY2F0aW9uOiB0aGlzLmdldEN1cnJlbnRMb2NhdGlvbigxKSxcbiAgICAgICAgfTtcbiAgICB9XG4gICAgX2NyZWF0ZUVuZFRhZ1Rva2VuKCkge1xuICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbiA9IHtcbiAgICAgICAgICAgIHR5cGU6IFRva2VuVHlwZS5FTkRfVEFHLFxuICAgICAgICAgICAgdGFnTmFtZTogJycsXG4gICAgICAgICAgICB0YWdJRDogVEFHX0lELlVOS05PV04sXG4gICAgICAgICAgICBzZWxmQ2xvc2luZzogZmFsc2UsXG4gICAgICAgICAgICBhY2tTZWxmQ2xvc2luZzogZmFsc2UsXG4gICAgICAgICAgICBhdHRyczogW10sXG4gICAgICAgICAgICBsb2NhdGlvbjogdGhpcy5nZXRDdXJyZW50TG9jYXRpb24oMiksXG4gICAgICAgIH07XG4gICAgfVxuICAgIF9jcmVhdGVDb21tZW50VG9rZW4ob2Zmc2V0KSB7XG4gICAgICAgIHRoaXMuY3VycmVudFRva2VuID0ge1xuICAgICAgICAgICAgdHlwZTogVG9rZW5UeXBlLkNPTU1FTlQsXG4gICAgICAgICAgICBkYXRhOiAnJyxcbiAgICAgICAgICAgIGxvY2F0aW9uOiB0aGlzLmdldEN1cnJlbnRMb2NhdGlvbihvZmZzZXQpLFxuICAgICAgICB9O1xuICAgIH1cbiAgICBfY3JlYXRlRG9jdHlwZVRva2VuKGluaXRpYWxOYW1lKSB7XG4gICAgICAgIHRoaXMuY3VycmVudFRva2VuID0ge1xuICAgICAgICAgICAgdHlwZTogVG9rZW5UeXBlLkRPQ1RZUEUsXG4gICAgICAgICAgICBuYW1lOiBpbml0aWFsTmFtZSxcbiAgICAgICAgICAgIGZvcmNlUXVpcmtzOiBmYWxzZSxcbiAgICAgICAgICAgIHB1YmxpY0lkOiBudWxsLFxuICAgICAgICAgICAgc3lzdGVtSWQ6IG51bGwsXG4gICAgICAgICAgICBsb2NhdGlvbjogdGhpcy5jdXJyZW50TG9jYXRpb24sXG4gICAgICAgIH07XG4gICAgfVxuICAgIF9jcmVhdGVDaGFyYWN0ZXJUb2tlbih0eXBlLCBjaGFycykge1xuICAgICAgICB0aGlzLmN1cnJlbnRDaGFyYWN0ZXJUb2tlbiA9IHtcbiAgICAgICAgICAgIHR5cGUsXG4gICAgICAgICAgICBjaGFycyxcbiAgICAgICAgICAgIGxvY2F0aW9uOiB0aGlzLmN1cnJlbnRMb2NhdGlvbixcbiAgICAgICAgfTtcbiAgICB9XG4gICAgLy9UYWcgYXR0cmlidXRlc1xuICAgIF9jcmVhdGVBdHRyKGF0dHJOYW1lRmlyc3RDaCkge1xuICAgICAgICB0aGlzLmN1cnJlbnRBdHRyID0ge1xuICAgICAgICAgICAgbmFtZTogYXR0ck5hbWVGaXJzdENoLFxuICAgICAgICAgICAgdmFsdWU6ICcnLFxuICAgICAgICB9O1xuICAgICAgICB0aGlzLmN1cnJlbnRMb2NhdGlvbiA9IHRoaXMuZ2V0Q3VycmVudExvY2F0aW9uKDApO1xuICAgIH1cbiAgICBfbGVhdmVBdHRyTmFtZSgpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICB2YXIgX2I7XG4gICAgICAgIGNvbnN0IHRva2VuID0gdGhpcy5jdXJyZW50VG9rZW47XG4gICAgICAgIGlmIChnZXRUb2tlbkF0dHIodG9rZW4sIHRoaXMuY3VycmVudEF0dHIubmFtZSkgPT09IG51bGwpIHtcbiAgICAgICAgICAgIHRva2VuLmF0dHJzLnB1c2godGhpcy5jdXJyZW50QXR0cik7XG4gICAgICAgICAgICBpZiAodG9rZW4ubG9jYXRpb24gJiYgdGhpcy5jdXJyZW50TG9jYXRpb24pIHtcbiAgICAgICAgICAgICAgICBjb25zdCBhdHRyTG9jYXRpb25zID0gKChfYSA9IChfYiA9IHRva2VuLmxvY2F0aW9uKS5hdHRycykgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogKF9iLmF0dHJzID0gT2JqZWN0LmNyZWF0ZShudWxsKSkpO1xuICAgICAgICAgICAgICAgIGF0dHJMb2NhdGlvbnNbdGhpcy5jdXJyZW50QXR0ci5uYW1lXSA9IHRoaXMuY3VycmVudExvY2F0aW9uO1xuICAgICAgICAgICAgICAgIC8vIFNldCBlbmQgbG9jYXRpb25cbiAgICAgICAgICAgICAgICB0aGlzLl9sZWF2ZUF0dHJWYWx1ZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fZXJyKEVSUi5kdXBsaWNhdGVBdHRyaWJ1dGUpO1xuICAgICAgICB9XG4gICAgfVxuICAgIF9sZWF2ZUF0dHJWYWx1ZSgpIHtcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudExvY2F0aW9uKSB7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRMb2NhdGlvbi5lbmRMaW5lID0gdGhpcy5wcmVwcm9jZXNzb3IubGluZTtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudExvY2F0aW9uLmVuZENvbCA9IHRoaXMucHJlcHJvY2Vzc29yLmNvbDtcbiAgICAgICAgICAgIHRoaXMuY3VycmVudExvY2F0aW9uLmVuZE9mZnNldCA9IHRoaXMucHJlcHJvY2Vzc29yLm9mZnNldDtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvL1Rva2VuIGVtaXNzaW9uXG4gICAgcHJlcGFyZVRva2VuKGN0KSB7XG4gICAgICAgIHRoaXMuX2VtaXRDdXJyZW50Q2hhcmFjdGVyVG9rZW4oY3QubG9jYXRpb24pO1xuICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbiA9IG51bGw7XG4gICAgICAgIGlmIChjdC5sb2NhdGlvbikge1xuICAgICAgICAgICAgY3QubG9jYXRpb24uZW5kTGluZSA9IHRoaXMucHJlcHJvY2Vzc29yLmxpbmU7XG4gICAgICAgICAgICBjdC5sb2NhdGlvbi5lbmRDb2wgPSB0aGlzLnByZXByb2Nlc3Nvci5jb2wgKyAxO1xuICAgICAgICAgICAgY3QubG9jYXRpb24uZW5kT2Zmc2V0ID0gdGhpcy5wcmVwcm9jZXNzb3Iub2Zmc2V0ICsgMTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmN1cnJlbnRMb2NhdGlvbiA9IHRoaXMuZ2V0Q3VycmVudExvY2F0aW9uKC0xKTtcbiAgICB9XG4gICAgZW1pdEN1cnJlbnRUYWdUb2tlbigpIHtcbiAgICAgICAgY29uc3QgY3QgPSB0aGlzLmN1cnJlbnRUb2tlbjtcbiAgICAgICAgdGhpcy5wcmVwYXJlVG9rZW4oY3QpO1xuICAgICAgICBjdC50YWdJRCA9IGdldFRhZ0lEKGN0LnRhZ05hbWUpO1xuICAgICAgICBpZiAoY3QudHlwZSA9PT0gVG9rZW5UeXBlLlNUQVJUX1RBRykge1xuICAgICAgICAgICAgdGhpcy5sYXN0U3RhcnRUYWdOYW1lID0gY3QudGFnTmFtZTtcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlci5vblN0YXJ0VGFnKGN0KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGlmIChjdC5hdHRycy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZXJyKEVSUi5lbmRUYWdXaXRoQXR0cmlidXRlcyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoY3Quc2VsZkNsb3NpbmcpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9lcnIoRVJSLmVuZFRhZ1dpdGhUcmFpbGluZ1NvbGlkdXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5oYW5kbGVyLm9uRW5kVGFnKGN0KTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnByZXByb2Nlc3Nvci5kcm9wUGFyc2VkQ2h1bmsoKTtcbiAgICB9XG4gICAgZW1pdEN1cnJlbnRDb21tZW50KGN0KSB7XG4gICAgICAgIHRoaXMucHJlcGFyZVRva2VuKGN0KTtcbiAgICAgICAgdGhpcy5oYW5kbGVyLm9uQ29tbWVudChjdCk7XG4gICAgICAgIHRoaXMucHJlcHJvY2Vzc29yLmRyb3BQYXJzZWRDaHVuaygpO1xuICAgIH1cbiAgICBlbWl0Q3VycmVudERvY3R5cGUoY3QpIHtcbiAgICAgICAgdGhpcy5wcmVwYXJlVG9rZW4oY3QpO1xuICAgICAgICB0aGlzLmhhbmRsZXIub25Eb2N0eXBlKGN0KTtcbiAgICAgICAgdGhpcy5wcmVwcm9jZXNzb3IuZHJvcFBhcnNlZENodW5rKCk7XG4gICAgfVxuICAgIF9lbWl0Q3VycmVudENoYXJhY3RlclRva2VuKG5leHRMb2NhdGlvbikge1xuICAgICAgICBpZiAodGhpcy5jdXJyZW50Q2hhcmFjdGVyVG9rZW4pIHtcbiAgICAgICAgICAgIC8vTk9URTogaWYgd2UgaGF2ZSBhIHBlbmRpbmcgY2hhcmFjdGVyIHRva2VuLCBtYWtlIGl0J3MgZW5kIGxvY2F0aW9uIGVxdWFsIHRvIHRoZVxuICAgICAgICAgICAgLy9jdXJyZW50IHRva2VuJ3Mgc3RhcnQgbG9jYXRpb24uXG4gICAgICAgICAgICBpZiAobmV4dExvY2F0aW9uICYmIHRoaXMuY3VycmVudENoYXJhY3RlclRva2VuLmxvY2F0aW9uKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50Q2hhcmFjdGVyVG9rZW4ubG9jYXRpb24uZW5kTGluZSA9IG5leHRMb2NhdGlvbi5zdGFydExpbmU7XG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50Q2hhcmFjdGVyVG9rZW4ubG9jYXRpb24uZW5kQ29sID0gbmV4dExvY2F0aW9uLnN0YXJ0Q29sO1xuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudENoYXJhY3RlclRva2VuLmxvY2F0aW9uLmVuZE9mZnNldCA9IG5leHRMb2NhdGlvbi5zdGFydE9mZnNldDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHN3aXRjaCAodGhpcy5jdXJyZW50Q2hhcmFjdGVyVG9rZW4udHlwZSkge1xuICAgICAgICAgICAgICAgIGNhc2UgVG9rZW5UeXBlLkNIQVJBQ1RFUjoge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmhhbmRsZXIub25DaGFyYWN0ZXIodGhpcy5jdXJyZW50Q2hhcmFjdGVyVG9rZW4pO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FzZSBUb2tlblR5cGUuTlVMTF9DSEFSQUNURVI6IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVyLm9uTnVsbENoYXJhY3Rlcih0aGlzLmN1cnJlbnRDaGFyYWN0ZXJUb2tlbik7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXNlIFRva2VuVHlwZS5XSElURVNQQUNFX0NIQVJBQ1RFUjoge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmhhbmRsZXIub25XaGl0ZXNwYWNlQ2hhcmFjdGVyKHRoaXMuY3VycmVudENoYXJhY3RlclRva2VuKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5jdXJyZW50Q2hhcmFjdGVyVG9rZW4gPSBudWxsO1xuICAgICAgICB9XG4gICAgfVxuICAgIF9lbWl0RU9GVG9rZW4oKSB7XG4gICAgICAgIGNvbnN0IGxvY2F0aW9uID0gdGhpcy5nZXRDdXJyZW50TG9jYXRpb24oMCk7XG4gICAgICAgIGlmIChsb2NhdGlvbikge1xuICAgICAgICAgICAgbG9jYXRpb24uZW5kTGluZSA9IGxvY2F0aW9uLnN0YXJ0TGluZTtcbiAgICAgICAgICAgIGxvY2F0aW9uLmVuZENvbCA9IGxvY2F0aW9uLnN0YXJ0Q29sO1xuICAgICAgICAgICAgbG9jYXRpb24uZW5kT2Zmc2V0ID0gbG9jYXRpb24uc3RhcnRPZmZzZXQ7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fZW1pdEN1cnJlbnRDaGFyYWN0ZXJUb2tlbihsb2NhdGlvbik7XG4gICAgICAgIHRoaXMuaGFuZGxlci5vbkVvZih7IHR5cGU6IFRva2VuVHlwZS5FT0YsIGxvY2F0aW9uIH0pO1xuICAgICAgICB0aGlzLmFjdGl2ZSA9IGZhbHNlO1xuICAgIH1cbiAgICAvL0NoYXJhY3RlcnMgZW1pc3Npb25cbiAgICAvL09QVElNSVpBVElPTjogVGhlIHNwZWNpZmljYXRpb24gdXNlcyBvbmx5IG9uZSB0eXBlIG9mIGNoYXJhY3RlciB0b2tlbiAob25lIHRva2VuIHBlciBjaGFyYWN0ZXIpLlxuICAgIC8vVGhpcyBjYXVzZXMgYSBodWdlIG1lbW9yeSBvdmVyaGVhZCBhbmQgYSBsb3Qgb2YgdW5uZWNlc3NhcnkgcGFyc2VyIGxvb3BzLiBwYXJzZTUgdXNlcyAzIGdyb3VwcyBvZiBjaGFyYWN0ZXJzLlxuICAgIC8vSWYgd2UgaGF2ZSBhIHNlcXVlbmNlIG9mIGNoYXJhY3RlcnMgdGhhdCBiZWxvbmcgdG8gdGhlIHNhbWUgZ3JvdXAsIHRoZSBwYXJzZXIgY2FuIHByb2Nlc3MgaXRcbiAgICAvL2FzIGEgc2luZ2xlIHNvbGlkIGNoYXJhY3RlciB0b2tlbi5cbiAgICAvL1NvLCB0aGVyZSBhcmUgMyB0eXBlcyBvZiBjaGFyYWN0ZXIgdG9rZW5zIGluIHBhcnNlNTpcbiAgICAvLzEpVG9rZW5UeXBlLk5VTExfQ0hBUkFDVEVSIC0gXFx1MDAwMC1jaGFyYWN0ZXIgc2VxdWVuY2VzIChlLmcuICdcXHUwMDAwXFx1MDAwMFxcdTAwMDAnKVxuICAgIC8vMilUb2tlblR5cGUuV0hJVEVTUEFDRV9DSEFSQUNURVIgLSBhbnkgd2hpdGVzcGFjZS9uZXctbGluZSBjaGFyYWN0ZXIgc2VxdWVuY2VzIChlLmcuICdcXG4gIFxcclxcdCAgIFxcZicpXG4gICAgLy8zKVRva2VuVHlwZS5DSEFSQUNURVIgLSBhbnkgY2hhcmFjdGVyIHNlcXVlbmNlIHdoaWNoIGRvbid0IGJlbG9uZyB0byBncm91cHMgMSBhbmQgMiAoZS5nLiAnYWJjZGVmMTIzNEBAIyQlXicpXG4gICAgX2FwcGVuZENoYXJUb0N1cnJlbnRDaGFyYWN0ZXJUb2tlbih0eXBlLCBjaCkge1xuICAgICAgICBpZiAodGhpcy5jdXJyZW50Q2hhcmFjdGVyVG9rZW4pIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmN1cnJlbnRDaGFyYWN0ZXJUb2tlbi50eXBlID09PSB0eXBlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50Q2hhcmFjdGVyVG9rZW4uY2hhcnMgKz0gY2g7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50TG9jYXRpb24gPSB0aGlzLmdldEN1cnJlbnRMb2NhdGlvbigwKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9lbWl0Q3VycmVudENoYXJhY3RlclRva2VuKHRoaXMuY3VycmVudExvY2F0aW9uKTtcbiAgICAgICAgICAgICAgICB0aGlzLnByZXByb2Nlc3Nvci5kcm9wUGFyc2VkQ2h1bmsoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9jcmVhdGVDaGFyYWN0ZXJUb2tlbih0eXBlLCBjaCk7XG4gICAgfVxuICAgIF9lbWl0Q29kZVBvaW50KGNwKSB7XG4gICAgICAgIGNvbnN0IHR5cGUgPSBpc1doaXRlc3BhY2UoY3ApXG4gICAgICAgICAgICA/IFRva2VuVHlwZS5XSElURVNQQUNFX0NIQVJBQ1RFUlxuICAgICAgICAgICAgOiBjcCA9PT0gJC5OVUxMXG4gICAgICAgICAgICAgICAgPyBUb2tlblR5cGUuTlVMTF9DSEFSQUNURVJcbiAgICAgICAgICAgICAgICA6IFRva2VuVHlwZS5DSEFSQUNURVI7XG4gICAgICAgIHRoaXMuX2FwcGVuZENoYXJUb0N1cnJlbnRDaGFyYWN0ZXJUb2tlbih0eXBlLCBTdHJpbmcuZnJvbUNvZGVQb2ludChjcCkpO1xuICAgIH1cbiAgICAvL05PVEU6IHVzZWQgd2hlbiB3ZSBlbWl0IGNoYXJhY3RlcnMgZXhwbGljaXRseS5cbiAgICAvL1RoaXMgaXMgYWx3YXlzIGZvciBub24td2hpdGVzcGFjZSBhbmQgbm9uLW51bGwgY2hhcmFjdGVycywgd2hpY2ggYWxsb3dzIHVzIHRvIGF2b2lkIGFkZGl0aW9uYWwgY2hlY2tzLlxuICAgIF9lbWl0Q2hhcnMoY2gpIHtcbiAgICAgICAgdGhpcy5fYXBwZW5kQ2hhclRvQ3VycmVudENoYXJhY3RlclRva2VuKFRva2VuVHlwZS5DSEFSQUNURVIsIGNoKTtcbiAgICB9XG4gICAgLy8gQ2hhcmFjdGVyIHJlZmVyZW5jZSBoZWxwZXJzXG4gICAgX3N0YXJ0Q2hhcmFjdGVyUmVmZXJlbmNlKCkge1xuICAgICAgICB0aGlzLnJldHVyblN0YXRlID0gdGhpcy5zdGF0ZTtcbiAgICAgICAgdGhpcy5zdGF0ZSA9IFN0YXRlLkNIQVJBQ1RFUl9SRUZFUkVOQ0U7XG4gICAgICAgIHRoaXMuZW50aXR5U3RhcnRQb3MgPSB0aGlzLnByZXByb2Nlc3Nvci5wb3M7XG4gICAgICAgIHRoaXMuZW50aXR5RGVjb2Rlci5zdGFydEVudGl0eSh0aGlzLl9pc0NoYXJhY3RlclJlZmVyZW5jZUluQXR0cmlidXRlKCkgPyBEZWNvZGluZ01vZGUuQXR0cmlidXRlIDogRGVjb2RpbmdNb2RlLkxlZ2FjeSk7XG4gICAgfVxuICAgIF9pc0NoYXJhY3RlclJlZmVyZW5jZUluQXR0cmlidXRlKCkge1xuICAgICAgICByZXR1cm4gKHRoaXMucmV0dXJuU3RhdGUgPT09IFN0YXRlLkFUVFJJQlVURV9WQUxVRV9ET1VCTEVfUVVPVEVEIHx8XG4gICAgICAgICAgICB0aGlzLnJldHVyblN0YXRlID09PSBTdGF0ZS5BVFRSSUJVVEVfVkFMVUVfU0lOR0xFX1FVT1RFRCB8fFxuICAgICAgICAgICAgdGhpcy5yZXR1cm5TdGF0ZSA9PT0gU3RhdGUuQVRUUklCVVRFX1ZBTFVFX1VOUVVPVEVEKTtcbiAgICB9XG4gICAgX2ZsdXNoQ29kZVBvaW50Q29uc3VtZWRBc0NoYXJhY3RlclJlZmVyZW5jZShjcCkge1xuICAgICAgICBpZiAodGhpcy5faXNDaGFyYWN0ZXJSZWZlcmVuY2VJbkF0dHJpYnV0ZSgpKSB7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRBdHRyLnZhbHVlICs9IFN0cmluZy5mcm9tQ29kZVBvaW50KGNwKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX2VtaXRDb2RlUG9pbnQoY3ApO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8vIENhbGxpbmcgc3RhdGVzIHRoaXMgd2F5IHR1cm5zIG91dCB0byBiZSBtdWNoIGZhc3RlciB0aGFuIGFueSBvdGhlciBhcHByb2FjaC5cbiAgICBfY2FsbFN0YXRlKGNwKSB7XG4gICAgICAgIHN3aXRjaCAodGhpcy5zdGF0ZSkge1xuICAgICAgICAgICAgY2FzZSBTdGF0ZS5EQVRBOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fc3RhdGVEYXRhKGNwKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgU3RhdGUuUkNEQVRBOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fc3RhdGVSY2RhdGEoY3ApO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBTdGF0ZS5SQVdURVhUOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fc3RhdGVSYXd0ZXh0KGNwKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgU3RhdGUuU0NSSVBUX0RBVEE6IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9zdGF0ZVNjcmlwdERhdGEoY3ApO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBTdGF0ZS5QTEFJTlRFWFQ6IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9zdGF0ZVBsYWludGV4dChjcCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFN0YXRlLlRBR19PUEVOOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fc3RhdGVUYWdPcGVuKGNwKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgU3RhdGUuRU5EX1RBR19PUEVOOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fc3RhdGVFbmRUYWdPcGVuKGNwKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgU3RhdGUuVEFHX05BTUU6IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9zdGF0ZVRhZ05hbWUoY3ApO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBTdGF0ZS5SQ0RBVEFfTEVTU19USEFOX1NJR046IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9zdGF0ZVJjZGF0YUxlc3NUaGFuU2lnbihjcCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFN0YXRlLlJDREFUQV9FTkRfVEFHX09QRU46IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9zdGF0ZVJjZGF0YUVuZFRhZ09wZW4oY3ApO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBTdGF0ZS5SQ0RBVEFfRU5EX1RBR19OQU1FOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fc3RhdGVSY2RhdGFFbmRUYWdOYW1lKGNwKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgU3RhdGUuUkFXVEVYVF9MRVNTX1RIQU5fU0lHTjoge1xuICAgICAgICAgICAgICAgIHRoaXMuX3N0YXRlUmF3dGV4dExlc3NUaGFuU2lnbihjcCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFN0YXRlLlJBV1RFWFRfRU5EX1RBR19PUEVOOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fc3RhdGVSYXd0ZXh0RW5kVGFnT3BlbihjcCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFN0YXRlLlJBV1RFWFRfRU5EX1RBR19OQU1FOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fc3RhdGVSYXd0ZXh0RW5kVGFnTmFtZShjcCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFN0YXRlLlNDUklQVF9EQVRBX0xFU1NfVEhBTl9TSUdOOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fc3RhdGVTY3JpcHREYXRhTGVzc1RoYW5TaWduKGNwKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgU3RhdGUuU0NSSVBUX0RBVEFfRU5EX1RBR19PUEVOOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fc3RhdGVTY3JpcHREYXRhRW5kVGFnT3BlbihjcCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFN0YXRlLlNDUklQVF9EQVRBX0VORF9UQUdfTkFNRToge1xuICAgICAgICAgICAgICAgIHRoaXMuX3N0YXRlU2NyaXB0RGF0YUVuZFRhZ05hbWUoY3ApO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBTdGF0ZS5TQ1JJUFRfREFUQV9FU0NBUEVfU1RBUlQ6IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9zdGF0ZVNjcmlwdERhdGFFc2NhcGVTdGFydChjcCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFN0YXRlLlNDUklQVF9EQVRBX0VTQ0FQRV9TVEFSVF9EQVNIOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fc3RhdGVTY3JpcHREYXRhRXNjYXBlU3RhcnREYXNoKGNwKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgU3RhdGUuU0NSSVBUX0RBVEFfRVNDQVBFRDoge1xuICAgICAgICAgICAgICAgIHRoaXMuX3N0YXRlU2NyaXB0RGF0YUVzY2FwZWQoY3ApO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBTdGF0ZS5TQ1JJUFRfREFUQV9FU0NBUEVEX0RBU0g6IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9zdGF0ZVNjcmlwdERhdGFFc2NhcGVkRGFzaChjcCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFN0YXRlLlNDUklQVF9EQVRBX0VTQ0FQRURfREFTSF9EQVNIOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fc3RhdGVTY3JpcHREYXRhRXNjYXBlZERhc2hEYXNoKGNwKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgU3RhdGUuU0NSSVBUX0RBVEFfRVNDQVBFRF9MRVNTX1RIQU5fU0lHTjoge1xuICAgICAgICAgICAgICAgIHRoaXMuX3N0YXRlU2NyaXB0RGF0YUVzY2FwZWRMZXNzVGhhblNpZ24oY3ApO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBTdGF0ZS5TQ1JJUFRfREFUQV9FU0NBUEVEX0VORF9UQUdfT1BFTjoge1xuICAgICAgICAgICAgICAgIHRoaXMuX3N0YXRlU2NyaXB0RGF0YUVzY2FwZWRFbmRUYWdPcGVuKGNwKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgU3RhdGUuU0NSSVBUX0RBVEFfRVNDQVBFRF9FTkRfVEFHX05BTUU6IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9zdGF0ZVNjcmlwdERhdGFFc2NhcGVkRW5kVGFnTmFtZShjcCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFN0YXRlLlNDUklQVF9EQVRBX0RPVUJMRV9FU0NBUEVfU1RBUlQ6IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9zdGF0ZVNjcmlwdERhdGFEb3VibGVFc2NhcGVTdGFydChjcCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFN0YXRlLlNDUklQVF9EQVRBX0RPVUJMRV9FU0NBUEVEOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fc3RhdGVTY3JpcHREYXRhRG91YmxlRXNjYXBlZChjcCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFN0YXRlLlNDUklQVF9EQVRBX0RPVUJMRV9FU0NBUEVEX0RBU0g6IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9zdGF0ZVNjcmlwdERhdGFEb3VibGVFc2NhcGVkRGFzaChjcCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFN0YXRlLlNDUklQVF9EQVRBX0RPVUJMRV9FU0NBUEVEX0RBU0hfREFTSDoge1xuICAgICAgICAgICAgICAgIHRoaXMuX3N0YXRlU2NyaXB0RGF0YURvdWJsZUVzY2FwZWREYXNoRGFzaChjcCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFN0YXRlLlNDUklQVF9EQVRBX0RPVUJMRV9FU0NBUEVEX0xFU1NfVEhBTl9TSUdOOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fc3RhdGVTY3JpcHREYXRhRG91YmxlRXNjYXBlZExlc3NUaGFuU2lnbihjcCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFN0YXRlLlNDUklQVF9EQVRBX0RPVUJMRV9FU0NBUEVfRU5EOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fc3RhdGVTY3JpcHREYXRhRG91YmxlRXNjYXBlRW5kKGNwKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgU3RhdGUuQkVGT1JFX0FUVFJJQlVURV9OQU1FOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fc3RhdGVCZWZvcmVBdHRyaWJ1dGVOYW1lKGNwKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgU3RhdGUuQVRUUklCVVRFX05BTUU6IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9zdGF0ZUF0dHJpYnV0ZU5hbWUoY3ApO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBTdGF0ZS5BRlRFUl9BVFRSSUJVVEVfTkFNRToge1xuICAgICAgICAgICAgICAgIHRoaXMuX3N0YXRlQWZ0ZXJBdHRyaWJ1dGVOYW1lKGNwKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgU3RhdGUuQkVGT1JFX0FUVFJJQlVURV9WQUxVRToge1xuICAgICAgICAgICAgICAgIHRoaXMuX3N0YXRlQmVmb3JlQXR0cmlidXRlVmFsdWUoY3ApO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBTdGF0ZS5BVFRSSUJVVEVfVkFMVUVfRE9VQkxFX1FVT1RFRDoge1xuICAgICAgICAgICAgICAgIHRoaXMuX3N0YXRlQXR0cmlidXRlVmFsdWVEb3VibGVRdW90ZWQoY3ApO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBTdGF0ZS5BVFRSSUJVVEVfVkFMVUVfU0lOR0xFX1FVT1RFRDoge1xuICAgICAgICAgICAgICAgIHRoaXMuX3N0YXRlQXR0cmlidXRlVmFsdWVTaW5nbGVRdW90ZWQoY3ApO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBTdGF0ZS5BVFRSSUJVVEVfVkFMVUVfVU5RVU9URUQ6IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9zdGF0ZUF0dHJpYnV0ZVZhbHVlVW5xdW90ZWQoY3ApO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBTdGF0ZS5BRlRFUl9BVFRSSUJVVEVfVkFMVUVfUVVPVEVEOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fc3RhdGVBZnRlckF0dHJpYnV0ZVZhbHVlUXVvdGVkKGNwKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgU3RhdGUuU0VMRl9DTE9TSU5HX1NUQVJUX1RBRzoge1xuICAgICAgICAgICAgICAgIHRoaXMuX3N0YXRlU2VsZkNsb3NpbmdTdGFydFRhZyhjcCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFN0YXRlLkJPR1VTX0NPTU1FTlQ6IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9zdGF0ZUJvZ3VzQ29tbWVudChjcCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFN0YXRlLk1BUktVUF9ERUNMQVJBVElPTl9PUEVOOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fc3RhdGVNYXJrdXBEZWNsYXJhdGlvbk9wZW4oY3ApO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBTdGF0ZS5DT01NRU5UX1NUQVJUOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fc3RhdGVDb21tZW50U3RhcnQoY3ApO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBTdGF0ZS5DT01NRU5UX1NUQVJUX0RBU0g6IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9zdGF0ZUNvbW1lbnRTdGFydERhc2goY3ApO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBTdGF0ZS5DT01NRU5UOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fc3RhdGVDb21tZW50KGNwKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgU3RhdGUuQ09NTUVOVF9MRVNTX1RIQU5fU0lHTjoge1xuICAgICAgICAgICAgICAgIHRoaXMuX3N0YXRlQ29tbWVudExlc3NUaGFuU2lnbihjcCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFN0YXRlLkNPTU1FTlRfTEVTU19USEFOX1NJR05fQkFORzoge1xuICAgICAgICAgICAgICAgIHRoaXMuX3N0YXRlQ29tbWVudExlc3NUaGFuU2lnbkJhbmcoY3ApO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBTdGF0ZS5DT01NRU5UX0xFU1NfVEhBTl9TSUdOX0JBTkdfREFTSDoge1xuICAgICAgICAgICAgICAgIHRoaXMuX3N0YXRlQ29tbWVudExlc3NUaGFuU2lnbkJhbmdEYXNoKGNwKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgU3RhdGUuQ09NTUVOVF9MRVNTX1RIQU5fU0lHTl9CQU5HX0RBU0hfREFTSDoge1xuICAgICAgICAgICAgICAgIHRoaXMuX3N0YXRlQ29tbWVudExlc3NUaGFuU2lnbkJhbmdEYXNoRGFzaChjcCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFN0YXRlLkNPTU1FTlRfRU5EX0RBU0g6IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9zdGF0ZUNvbW1lbnRFbmREYXNoKGNwKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgU3RhdGUuQ09NTUVOVF9FTkQ6IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9zdGF0ZUNvbW1lbnRFbmQoY3ApO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBTdGF0ZS5DT01NRU5UX0VORF9CQU5HOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fc3RhdGVDb21tZW50RW5kQmFuZyhjcCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFN0YXRlLkRPQ1RZUEU6IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9zdGF0ZURvY3R5cGUoY3ApO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBTdGF0ZS5CRUZPUkVfRE9DVFlQRV9OQU1FOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fc3RhdGVCZWZvcmVEb2N0eXBlTmFtZShjcCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFN0YXRlLkRPQ1RZUEVfTkFNRToge1xuICAgICAgICAgICAgICAgIHRoaXMuX3N0YXRlRG9jdHlwZU5hbWUoY3ApO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBTdGF0ZS5BRlRFUl9ET0NUWVBFX05BTUU6IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9zdGF0ZUFmdGVyRG9jdHlwZU5hbWUoY3ApO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBTdGF0ZS5BRlRFUl9ET0NUWVBFX1BVQkxJQ19LRVlXT1JEOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fc3RhdGVBZnRlckRvY3R5cGVQdWJsaWNLZXl3b3JkKGNwKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgU3RhdGUuQkVGT1JFX0RPQ1RZUEVfUFVCTElDX0lERU5USUZJRVI6IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9zdGF0ZUJlZm9yZURvY3R5cGVQdWJsaWNJZGVudGlmaWVyKGNwKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgU3RhdGUuRE9DVFlQRV9QVUJMSUNfSURFTlRJRklFUl9ET1VCTEVfUVVPVEVEOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fc3RhdGVEb2N0eXBlUHVibGljSWRlbnRpZmllckRvdWJsZVF1b3RlZChjcCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFN0YXRlLkRPQ1RZUEVfUFVCTElDX0lERU5USUZJRVJfU0lOR0xFX1FVT1RFRDoge1xuICAgICAgICAgICAgICAgIHRoaXMuX3N0YXRlRG9jdHlwZVB1YmxpY0lkZW50aWZpZXJTaW5nbGVRdW90ZWQoY3ApO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBTdGF0ZS5BRlRFUl9ET0NUWVBFX1BVQkxJQ19JREVOVElGSUVSOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fc3RhdGVBZnRlckRvY3R5cGVQdWJsaWNJZGVudGlmaWVyKGNwKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgU3RhdGUuQkVUV0VFTl9ET0NUWVBFX1BVQkxJQ19BTkRfU1lTVEVNX0lERU5USUZJRVJTOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fc3RhdGVCZXR3ZWVuRG9jdHlwZVB1YmxpY0FuZFN5c3RlbUlkZW50aWZpZXJzKGNwKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgU3RhdGUuQUZURVJfRE9DVFlQRV9TWVNURU1fS0VZV09SRDoge1xuICAgICAgICAgICAgICAgIHRoaXMuX3N0YXRlQWZ0ZXJEb2N0eXBlU3lzdGVtS2V5d29yZChjcCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFN0YXRlLkJFRk9SRV9ET0NUWVBFX1NZU1RFTV9JREVOVElGSUVSOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fc3RhdGVCZWZvcmVEb2N0eXBlU3lzdGVtSWRlbnRpZmllcihjcCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFN0YXRlLkRPQ1RZUEVfU1lTVEVNX0lERU5USUZJRVJfRE9VQkxFX1FVT1RFRDoge1xuICAgICAgICAgICAgICAgIHRoaXMuX3N0YXRlRG9jdHlwZVN5c3RlbUlkZW50aWZpZXJEb3VibGVRdW90ZWQoY3ApO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBTdGF0ZS5ET0NUWVBFX1NZU1RFTV9JREVOVElGSUVSX1NJTkdMRV9RVU9URUQ6IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9zdGF0ZURvY3R5cGVTeXN0ZW1JZGVudGlmaWVyU2luZ2xlUXVvdGVkKGNwKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgU3RhdGUuQUZURVJfRE9DVFlQRV9TWVNURU1fSURFTlRJRklFUjoge1xuICAgICAgICAgICAgICAgIHRoaXMuX3N0YXRlQWZ0ZXJEb2N0eXBlU3lzdGVtSWRlbnRpZmllcihjcCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFN0YXRlLkJPR1VTX0RPQ1RZUEU6IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9zdGF0ZUJvZ3VzRG9jdHlwZShjcCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFN0YXRlLkNEQVRBX1NFQ1RJT046IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9zdGF0ZUNkYXRhU2VjdGlvbihjcCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFN0YXRlLkNEQVRBX1NFQ1RJT05fQlJBQ0tFVDoge1xuICAgICAgICAgICAgICAgIHRoaXMuX3N0YXRlQ2RhdGFTZWN0aW9uQnJhY2tldChjcCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFN0YXRlLkNEQVRBX1NFQ1RJT05fRU5EOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fc3RhdGVDZGF0YVNlY3Rpb25FbmQoY3ApO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBTdGF0ZS5DSEFSQUNURVJfUkVGRVJFTkNFOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fc3RhdGVDaGFyYWN0ZXJSZWZlcmVuY2UoKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgU3RhdGUuQU1CSUdVT1VTX0FNUEVSU0FORDoge1xuICAgICAgICAgICAgICAgIHRoaXMuX3N0YXRlQW1iaWd1b3VzQW1wZXJzYW5kKGNwKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Vua25vd24gc3RhdGUnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBTdGF0ZSBtYWNoaW5lXG4gICAgLy8gRGF0YSBzdGF0ZVxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgX3N0YXRlRGF0YShjcCkge1xuICAgICAgICBzd2l0Y2ggKGNwKSB7XG4gICAgICAgICAgICBjYXNlICQuTEVTU19USEFOX1NJR046IHtcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gU3RhdGUuVEFHX09QRU47XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlICQuQU1QRVJTQU5EOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fc3RhcnRDaGFyYWN0ZXJSZWZlcmVuY2UoKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgJC5OVUxMOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZXJyKEVSUi51bmV4cGVjdGVkTnVsbENoYXJhY3Rlcik7XG4gICAgICAgICAgICAgICAgdGhpcy5fZW1pdENvZGVQb2ludChjcCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlICQuRU9GOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZW1pdEVPRlRva2VuKCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZW1pdENvZGVQb2ludChjcCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gIFJDREFUQSBzdGF0ZVxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgX3N0YXRlUmNkYXRhKGNwKSB7XG4gICAgICAgIHN3aXRjaCAoY3ApIHtcbiAgICAgICAgICAgIGNhc2UgJC5BTVBFUlNBTkQ6IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9zdGFydENoYXJhY3RlclJlZmVyZW5jZSgpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSAkLkxFU1NfVEhBTl9TSUdOOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IFN0YXRlLlJDREFUQV9MRVNTX1RIQU5fU0lHTjtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgJC5OVUxMOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZXJyKEVSUi51bmV4cGVjdGVkTnVsbENoYXJhY3Rlcik7XG4gICAgICAgICAgICAgICAgdGhpcy5fZW1pdENoYXJzKFJFUExBQ0VNRU5UX0NIQVJBQ1RFUik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlICQuRU9GOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZW1pdEVPRlRva2VuKCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZW1pdENvZGVQb2ludChjcCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gUkFXVEVYVCBzdGF0ZVxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgX3N0YXRlUmF3dGV4dChjcCkge1xuICAgICAgICBzd2l0Y2ggKGNwKSB7XG4gICAgICAgICAgICBjYXNlICQuTEVTU19USEFOX1NJR046IHtcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gU3RhdGUuUkFXVEVYVF9MRVNTX1RIQU5fU0lHTjtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgJC5OVUxMOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZXJyKEVSUi51bmV4cGVjdGVkTnVsbENoYXJhY3Rlcik7XG4gICAgICAgICAgICAgICAgdGhpcy5fZW1pdENoYXJzKFJFUExBQ0VNRU5UX0NIQVJBQ1RFUik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlICQuRU9GOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZW1pdEVPRlRva2VuKCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZW1pdENvZGVQb2ludChjcCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gU2NyaXB0IGRhdGEgc3RhdGVcbiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIF9zdGF0ZVNjcmlwdERhdGEoY3ApIHtcbiAgICAgICAgc3dpdGNoIChjcCkge1xuICAgICAgICAgICAgY2FzZSAkLkxFU1NfVEhBTl9TSUdOOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IFN0YXRlLlNDUklQVF9EQVRBX0xFU1NfVEhBTl9TSUdOO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSAkLk5VTEw6IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9lcnIoRVJSLnVuZXhwZWN0ZWROdWxsQ2hhcmFjdGVyKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9lbWl0Q2hhcnMoUkVQTEFDRU1FTlRfQ0hBUkFDVEVSKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgJC5FT0Y6IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9lbWl0RU9GVG9rZW4oKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9lbWl0Q29kZVBvaW50KGNwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBQTEFJTlRFWFQgc3RhdGVcbiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIF9zdGF0ZVBsYWludGV4dChjcCkge1xuICAgICAgICBzd2l0Y2ggKGNwKSB7XG4gICAgICAgICAgICBjYXNlICQuTlVMTDoge1xuICAgICAgICAgICAgICAgIHRoaXMuX2VycihFUlIudW5leHBlY3RlZE51bGxDaGFyYWN0ZXIpO1xuICAgICAgICAgICAgICAgIHRoaXMuX2VtaXRDaGFycyhSRVBMQUNFTUVOVF9DSEFSQUNURVIpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSAkLkVPRjoge1xuICAgICAgICAgICAgICAgIHRoaXMuX2VtaXRFT0ZUb2tlbigpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgICAgIHRoaXMuX2VtaXRDb2RlUG9pbnQoY3ApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIC8vIFRhZyBvcGVuIHN0YXRlXG4gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICBfc3RhdGVUYWdPcGVuKGNwKSB7XG4gICAgICAgIGlmIChpc0FzY2lpTGV0dGVyKGNwKSkge1xuICAgICAgICAgICAgdGhpcy5fY3JlYXRlU3RhcnRUYWdUb2tlbigpO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IFN0YXRlLlRBR19OQU1FO1xuICAgICAgICAgICAgdGhpcy5fc3RhdGVUYWdOYW1lKGNwKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgICAgICBzd2l0Y2ggKGNwKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAkLkVYQ0xBTUFUSU9OX01BUks6IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IFN0YXRlLk1BUktVUF9ERUNMQVJBVElPTl9PUEVOO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FzZSAkLlNPTElEVVM6IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IFN0YXRlLkVORF9UQUdfT1BFTjtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhc2UgJC5RVUVTVElPTl9NQVJLOiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2VycihFUlIudW5leHBlY3RlZFF1ZXN0aW9uTWFya0luc3RlYWRPZlRhZ05hbWUpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jcmVhdGVDb21tZW50VG9rZW4oMSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBTdGF0ZS5CT0dVU19DT01NRU5UO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9zdGF0ZUJvZ3VzQ29tbWVudChjcCk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXNlICQuRU9GOiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2VycihFUlIuZW9mQmVmb3JlVGFnTmFtZSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2VtaXRDaGFycygnPCcpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9lbWl0RU9GVG9rZW4oKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZXJyKEVSUi5pbnZhbGlkRmlyc3RDaGFyYWN0ZXJPZlRhZ05hbWUpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9lbWl0Q2hhcnMoJzwnKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IFN0YXRlLkRBVEE7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3N0YXRlRGF0YShjcCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgIH1cbiAgICAvLyBFbmQgdGFnIG9wZW4gc3RhdGVcbiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIF9zdGF0ZUVuZFRhZ09wZW4oY3ApIHtcbiAgICAgICAgaWYgKGlzQXNjaWlMZXR0ZXIoY3ApKSB7XG4gICAgICAgICAgICB0aGlzLl9jcmVhdGVFbmRUYWdUb2tlbigpO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IFN0YXRlLlRBR19OQU1FO1xuICAgICAgICAgICAgdGhpcy5fc3RhdGVUYWdOYW1lKGNwKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgICAgICBzd2l0Y2ggKGNwKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAkLkdSRUFURVJfVEhBTl9TSUdOOiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2VycihFUlIubWlzc2luZ0VuZFRhZ05hbWUpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gU3RhdGUuREFUQTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhc2UgJC5FT0Y6IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZXJyKEVSUi5lb2ZCZWZvcmVUYWdOYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZW1pdENoYXJzKCc8LycpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9lbWl0RU9GVG9rZW4oKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZXJyKEVSUi5pbnZhbGlkRmlyc3RDaGFyYWN0ZXJPZlRhZ05hbWUpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jcmVhdGVDb21tZW50VG9rZW4oMik7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBTdGF0ZS5CT0dVU19DT01NRU5UO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9zdGF0ZUJvZ3VzQ29tbWVudChjcCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgIH1cbiAgICAvLyBUYWcgbmFtZSBzdGF0ZVxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgX3N0YXRlVGFnTmFtZShjcCkge1xuICAgICAgICBjb25zdCB0b2tlbiA9IHRoaXMuY3VycmVudFRva2VuO1xuICAgICAgICBzd2l0Y2ggKGNwKSB7XG4gICAgICAgICAgICBjYXNlICQuU1BBQ0U6XG4gICAgICAgICAgICBjYXNlICQuTElORV9GRUVEOlxuICAgICAgICAgICAgY2FzZSAkLlRBQlVMQVRJT046XG4gICAgICAgICAgICBjYXNlICQuRk9STV9GRUVEOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IFN0YXRlLkJFRk9SRV9BVFRSSUJVVEVfTkFNRTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgJC5TT0xJRFVTOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IFN0YXRlLlNFTEZfQ0xPU0lOR19TVEFSVF9UQUc7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlICQuR1JFQVRFUl9USEFOX1NJR046IHtcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gU3RhdGUuREFUQTtcbiAgICAgICAgICAgICAgICB0aGlzLmVtaXRDdXJyZW50VGFnVG9rZW4oKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgJC5OVUxMOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZXJyKEVSUi51bmV4cGVjdGVkTnVsbENoYXJhY3Rlcik7XG4gICAgICAgICAgICAgICAgdG9rZW4udGFnTmFtZSArPSBSRVBMQUNFTUVOVF9DSEFSQUNURVI7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlICQuRU9GOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZXJyKEVSUi5lb2ZJblRhZyk7XG4gICAgICAgICAgICAgICAgdGhpcy5fZW1pdEVPRlRva2VuKCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICAgICAgdG9rZW4udGFnTmFtZSArPSBTdHJpbmcuZnJvbUNvZGVQb2ludChpc0FzY2lpVXBwZXIoY3ApID8gdG9Bc2NpaUxvd2VyKGNwKSA6IGNwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBSQ0RBVEEgbGVzcy10aGFuIHNpZ24gc3RhdGVcbiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIF9zdGF0ZVJjZGF0YUxlc3NUaGFuU2lnbihjcCkge1xuICAgICAgICBpZiAoY3AgPT09ICQuU09MSURVUykge1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IFN0YXRlLlJDREFUQV9FTkRfVEFHX09QRU47XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl9lbWl0Q2hhcnMoJzwnKTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBTdGF0ZS5SQ0RBVEE7XG4gICAgICAgICAgICB0aGlzLl9zdGF0ZVJjZGF0YShjcCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gUkNEQVRBIGVuZCB0YWcgb3BlbiBzdGF0ZVxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgX3N0YXRlUmNkYXRhRW5kVGFnT3BlbihjcCkge1xuICAgICAgICBpZiAoaXNBc2NpaUxldHRlcihjcCkpIHtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBTdGF0ZS5SQ0RBVEFfRU5EX1RBR19OQU1FO1xuICAgICAgICAgICAgdGhpcy5fc3RhdGVSY2RhdGFFbmRUYWdOYW1lKGNwKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX2VtaXRDaGFycygnPC8nKTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBTdGF0ZS5SQ0RBVEE7XG4gICAgICAgICAgICB0aGlzLl9zdGF0ZVJjZGF0YShjcCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaGFuZGxlU3BlY2lhbEVuZFRhZyhfY3ApIHtcbiAgICAgICAgaWYgKCF0aGlzLnByZXByb2Nlc3Nvci5zdGFydHNXaXRoKHRoaXMubGFzdFN0YXJ0VGFnTmFtZSwgZmFsc2UpKSB7XG4gICAgICAgICAgICByZXR1cm4gIXRoaXMuX2Vuc3VyZUhpYmVybmF0aW9uKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fY3JlYXRlRW5kVGFnVG9rZW4oKTtcbiAgICAgICAgY29uc3QgdG9rZW4gPSB0aGlzLmN1cnJlbnRUb2tlbjtcbiAgICAgICAgdG9rZW4udGFnTmFtZSA9IHRoaXMubGFzdFN0YXJ0VGFnTmFtZTtcbiAgICAgICAgY29uc3QgY3AgPSB0aGlzLnByZXByb2Nlc3Nvci5wZWVrKHRoaXMubGFzdFN0YXJ0VGFnTmFtZS5sZW5ndGgpO1xuICAgICAgICBzd2l0Y2ggKGNwKSB7XG4gICAgICAgICAgICBjYXNlICQuU1BBQ0U6XG4gICAgICAgICAgICBjYXNlICQuTElORV9GRUVEOlxuICAgICAgICAgICAgY2FzZSAkLlRBQlVMQVRJT046XG4gICAgICAgICAgICBjYXNlICQuRk9STV9GRUVEOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fYWR2YW5jZUJ5KHRoaXMubGFzdFN0YXJ0VGFnTmFtZS5sZW5ndGgpO1xuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBTdGF0ZS5CRUZPUkVfQVRUUklCVVRFX05BTUU7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSAkLlNPTElEVVM6IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9hZHZhbmNlQnkodGhpcy5sYXN0U3RhcnRUYWdOYW1lLmxlbmd0aCk7XG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IFN0YXRlLlNFTEZfQ0xPU0lOR19TVEFSVF9UQUc7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSAkLkdSRUFURVJfVEhBTl9TSUdOOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fYWR2YW5jZUJ5KHRoaXMubGFzdFN0YXJ0VGFnTmFtZS5sZW5ndGgpO1xuICAgICAgICAgICAgICAgIHRoaXMuZW1pdEN1cnJlbnRUYWdUb2tlbigpO1xuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBTdGF0ZS5EQVRBO1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gIXRoaXMuX2Vuc3VyZUhpYmVybmF0aW9uKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gUkNEQVRBIGVuZCB0YWcgbmFtZSBzdGF0ZVxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgX3N0YXRlUmNkYXRhRW5kVGFnTmFtZShjcCkge1xuICAgICAgICBpZiAodGhpcy5oYW5kbGVTcGVjaWFsRW5kVGFnKGNwKSkge1xuICAgICAgICAgICAgdGhpcy5fZW1pdENoYXJzKCc8LycpO1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IFN0YXRlLlJDREFUQTtcbiAgICAgICAgICAgIHRoaXMuX3N0YXRlUmNkYXRhKGNwKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBSQVdURVhUIGxlc3MtdGhhbiBzaWduIHN0YXRlXG4gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICBfc3RhdGVSYXd0ZXh0TGVzc1RoYW5TaWduKGNwKSB7XG4gICAgICAgIGlmIChjcCA9PT0gJC5TT0xJRFVTKSB7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gU3RhdGUuUkFXVEVYVF9FTkRfVEFHX09QRU47XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl9lbWl0Q2hhcnMoJzwnKTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBTdGF0ZS5SQVdURVhUO1xuICAgICAgICAgICAgdGhpcy5fc3RhdGVSYXd0ZXh0KGNwKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBSQVdURVhUIGVuZCB0YWcgb3BlbiBzdGF0ZVxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgX3N0YXRlUmF3dGV4dEVuZFRhZ09wZW4oY3ApIHtcbiAgICAgICAgaWYgKGlzQXNjaWlMZXR0ZXIoY3ApKSB7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gU3RhdGUuUkFXVEVYVF9FTkRfVEFHX05BTUU7XG4gICAgICAgICAgICB0aGlzLl9zdGF0ZVJhd3RleHRFbmRUYWdOYW1lKGNwKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX2VtaXRDaGFycygnPC8nKTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBTdGF0ZS5SQVdURVhUO1xuICAgICAgICAgICAgdGhpcy5fc3RhdGVSYXd0ZXh0KGNwKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBSQVdURVhUIGVuZCB0YWcgbmFtZSBzdGF0ZVxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgX3N0YXRlUmF3dGV4dEVuZFRhZ05hbWUoY3ApIHtcbiAgICAgICAgaWYgKHRoaXMuaGFuZGxlU3BlY2lhbEVuZFRhZyhjcCkpIHtcbiAgICAgICAgICAgIHRoaXMuX2VtaXRDaGFycygnPC8nKTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBTdGF0ZS5SQVdURVhUO1xuICAgICAgICAgICAgdGhpcy5fc3RhdGVSYXd0ZXh0KGNwKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBTY3JpcHQgZGF0YSBsZXNzLXRoYW4gc2lnbiBzdGF0ZVxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgX3N0YXRlU2NyaXB0RGF0YUxlc3NUaGFuU2lnbihjcCkge1xuICAgICAgICBzd2l0Y2ggKGNwKSB7XG4gICAgICAgICAgICBjYXNlICQuU09MSURVUzoge1xuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBTdGF0ZS5TQ1JJUFRfREFUQV9FTkRfVEFHX09QRU47XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlICQuRVhDTEFNQVRJT05fTUFSSzoge1xuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBTdGF0ZS5TQ1JJUFRfREFUQV9FU0NBUEVfU1RBUlQ7XG4gICAgICAgICAgICAgICAgdGhpcy5fZW1pdENoYXJzKCc8IScpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgICAgIHRoaXMuX2VtaXRDaGFycygnPCcpO1xuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBTdGF0ZS5TQ1JJUFRfREFUQTtcbiAgICAgICAgICAgICAgICB0aGlzLl9zdGF0ZVNjcmlwdERhdGEoY3ApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIC8vIFNjcmlwdCBkYXRhIGVuZCB0YWcgb3BlbiBzdGF0ZVxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgX3N0YXRlU2NyaXB0RGF0YUVuZFRhZ09wZW4oY3ApIHtcbiAgICAgICAgaWYgKGlzQXNjaWlMZXR0ZXIoY3ApKSB7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gU3RhdGUuU0NSSVBUX0RBVEFfRU5EX1RBR19OQU1FO1xuICAgICAgICAgICAgdGhpcy5fc3RhdGVTY3JpcHREYXRhRW5kVGFnTmFtZShjcCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl9lbWl0Q2hhcnMoJzwvJyk7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gU3RhdGUuU0NSSVBUX0RBVEE7XG4gICAgICAgICAgICB0aGlzLl9zdGF0ZVNjcmlwdERhdGEoY3ApO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8vIFNjcmlwdCBkYXRhIGVuZCB0YWcgbmFtZSBzdGF0ZVxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgX3N0YXRlU2NyaXB0RGF0YUVuZFRhZ05hbWUoY3ApIHtcbiAgICAgICAgaWYgKHRoaXMuaGFuZGxlU3BlY2lhbEVuZFRhZyhjcCkpIHtcbiAgICAgICAgICAgIHRoaXMuX2VtaXRDaGFycygnPC8nKTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBTdGF0ZS5TQ1JJUFRfREFUQTtcbiAgICAgICAgICAgIHRoaXMuX3N0YXRlU2NyaXB0RGF0YShjcCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gU2NyaXB0IGRhdGEgZXNjYXBlIHN0YXJ0IHN0YXRlXG4gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICBfc3RhdGVTY3JpcHREYXRhRXNjYXBlU3RhcnQoY3ApIHtcbiAgICAgICAgaWYgKGNwID09PSAkLkhZUEhFTl9NSU5VUykge1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IFN0YXRlLlNDUklQVF9EQVRBX0VTQ0FQRV9TVEFSVF9EQVNIO1xuICAgICAgICAgICAgdGhpcy5fZW1pdENoYXJzKCctJyk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gU3RhdGUuU0NSSVBUX0RBVEE7XG4gICAgICAgICAgICB0aGlzLl9zdGF0ZVNjcmlwdERhdGEoY3ApO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8vIFNjcmlwdCBkYXRhIGVzY2FwZSBzdGFydCBkYXNoIHN0YXRlXG4gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICBfc3RhdGVTY3JpcHREYXRhRXNjYXBlU3RhcnREYXNoKGNwKSB7XG4gICAgICAgIGlmIChjcCA9PT0gJC5IWVBIRU5fTUlOVVMpIHtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBTdGF0ZS5TQ1JJUFRfREFUQV9FU0NBUEVEX0RBU0hfREFTSDtcbiAgICAgICAgICAgIHRoaXMuX2VtaXRDaGFycygnLScpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IFN0YXRlLlNDUklQVF9EQVRBO1xuICAgICAgICAgICAgdGhpcy5fc3RhdGVTY3JpcHREYXRhKGNwKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBTY3JpcHQgZGF0YSBlc2NhcGVkIHN0YXRlXG4gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICBfc3RhdGVTY3JpcHREYXRhRXNjYXBlZChjcCkge1xuICAgICAgICBzd2l0Y2ggKGNwKSB7XG4gICAgICAgICAgICBjYXNlICQuSFlQSEVOX01JTlVTOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IFN0YXRlLlNDUklQVF9EQVRBX0VTQ0FQRURfREFTSDtcbiAgICAgICAgICAgICAgICB0aGlzLl9lbWl0Q2hhcnMoJy0nKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgJC5MRVNTX1RIQU5fU0lHTjoge1xuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBTdGF0ZS5TQ1JJUFRfREFUQV9FU0NBUEVEX0xFU1NfVEhBTl9TSUdOO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSAkLk5VTEw6IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9lcnIoRVJSLnVuZXhwZWN0ZWROdWxsQ2hhcmFjdGVyKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9lbWl0Q2hhcnMoUkVQTEFDRU1FTlRfQ0hBUkFDVEVSKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgJC5FT0Y6IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9lcnIoRVJSLmVvZkluU2NyaXB0SHRtbENvbW1lbnRMaWtlVGV4dCk7XG4gICAgICAgICAgICAgICAgdGhpcy5fZW1pdEVPRlRva2VuKCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZW1pdENvZGVQb2ludChjcCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gU2NyaXB0IGRhdGEgZXNjYXBlZCBkYXNoIHN0YXRlXG4gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICBfc3RhdGVTY3JpcHREYXRhRXNjYXBlZERhc2goY3ApIHtcbiAgICAgICAgc3dpdGNoIChjcCkge1xuICAgICAgICAgICAgY2FzZSAkLkhZUEhFTl9NSU5VUzoge1xuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBTdGF0ZS5TQ1JJUFRfREFUQV9FU0NBUEVEX0RBU0hfREFTSDtcbiAgICAgICAgICAgICAgICB0aGlzLl9lbWl0Q2hhcnMoJy0nKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgJC5MRVNTX1RIQU5fU0lHTjoge1xuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBTdGF0ZS5TQ1JJUFRfREFUQV9FU0NBUEVEX0xFU1NfVEhBTl9TSUdOO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSAkLk5VTEw6IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9lcnIoRVJSLnVuZXhwZWN0ZWROdWxsQ2hhcmFjdGVyKTtcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gU3RhdGUuU0NSSVBUX0RBVEFfRVNDQVBFRDtcbiAgICAgICAgICAgICAgICB0aGlzLl9lbWl0Q2hhcnMoUkVQTEFDRU1FTlRfQ0hBUkFDVEVSKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgJC5FT0Y6IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9lcnIoRVJSLmVvZkluU2NyaXB0SHRtbENvbW1lbnRMaWtlVGV4dCk7XG4gICAgICAgICAgICAgICAgdGhpcy5fZW1pdEVPRlRva2VuKCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IFN0YXRlLlNDUklQVF9EQVRBX0VTQ0FQRUQ7XG4gICAgICAgICAgICAgICAgdGhpcy5fZW1pdENvZGVQb2ludChjcCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gU2NyaXB0IGRhdGEgZXNjYXBlZCBkYXNoIGRhc2ggc3RhdGVcbiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIF9zdGF0ZVNjcmlwdERhdGFFc2NhcGVkRGFzaERhc2goY3ApIHtcbiAgICAgICAgc3dpdGNoIChjcCkge1xuICAgICAgICAgICAgY2FzZSAkLkhZUEhFTl9NSU5VUzoge1xuICAgICAgICAgICAgICAgIHRoaXMuX2VtaXRDaGFycygnLScpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSAkLkxFU1NfVEhBTl9TSUdOOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IFN0YXRlLlNDUklQVF9EQVRBX0VTQ0FQRURfTEVTU19USEFOX1NJR047XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlICQuR1JFQVRFUl9USEFOX1NJR046IHtcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gU3RhdGUuU0NSSVBUX0RBVEE7XG4gICAgICAgICAgICAgICAgdGhpcy5fZW1pdENoYXJzKCc+Jyk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlICQuTlVMTDoge1xuICAgICAgICAgICAgICAgIHRoaXMuX2VycihFUlIudW5leHBlY3RlZE51bGxDaGFyYWN0ZXIpO1xuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBTdGF0ZS5TQ1JJUFRfREFUQV9FU0NBUEVEO1xuICAgICAgICAgICAgICAgIHRoaXMuX2VtaXRDaGFycyhSRVBMQUNFTUVOVF9DSEFSQUNURVIpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSAkLkVPRjoge1xuICAgICAgICAgICAgICAgIHRoaXMuX2VycihFUlIuZW9mSW5TY3JpcHRIdG1sQ29tbWVudExpa2VUZXh0KTtcbiAgICAgICAgICAgICAgICB0aGlzLl9lbWl0RU9GVG9rZW4oKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gU3RhdGUuU0NSSVBUX0RBVEFfRVNDQVBFRDtcbiAgICAgICAgICAgICAgICB0aGlzLl9lbWl0Q29kZVBvaW50KGNwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBTY3JpcHQgZGF0YSBlc2NhcGVkIGxlc3MtdGhhbiBzaWduIHN0YXRlXG4gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICBfc3RhdGVTY3JpcHREYXRhRXNjYXBlZExlc3NUaGFuU2lnbihjcCkge1xuICAgICAgICBpZiAoY3AgPT09ICQuU09MSURVUykge1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IFN0YXRlLlNDUklQVF9EQVRBX0VTQ0FQRURfRU5EX1RBR19PUEVOO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGlzQXNjaWlMZXR0ZXIoY3ApKSB7XG4gICAgICAgICAgICB0aGlzLl9lbWl0Q2hhcnMoJzwnKTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBTdGF0ZS5TQ1JJUFRfREFUQV9ET1VCTEVfRVNDQVBFX1NUQVJUO1xuICAgICAgICAgICAgdGhpcy5fc3RhdGVTY3JpcHREYXRhRG91YmxlRXNjYXBlU3RhcnQoY3ApO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fZW1pdENoYXJzKCc8Jyk7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gU3RhdGUuU0NSSVBUX0RBVEFfRVNDQVBFRDtcbiAgICAgICAgICAgIHRoaXMuX3N0YXRlU2NyaXB0RGF0YUVzY2FwZWQoY3ApO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8vIFNjcmlwdCBkYXRhIGVzY2FwZWQgZW5kIHRhZyBvcGVuIHN0YXRlXG4gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICBfc3RhdGVTY3JpcHREYXRhRXNjYXBlZEVuZFRhZ09wZW4oY3ApIHtcbiAgICAgICAgaWYgKGlzQXNjaWlMZXR0ZXIoY3ApKSB7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gU3RhdGUuU0NSSVBUX0RBVEFfRVNDQVBFRF9FTkRfVEFHX05BTUU7XG4gICAgICAgICAgICB0aGlzLl9zdGF0ZVNjcmlwdERhdGFFc2NhcGVkRW5kVGFnTmFtZShjcCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl9lbWl0Q2hhcnMoJzwvJyk7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gU3RhdGUuU0NSSVBUX0RBVEFfRVNDQVBFRDtcbiAgICAgICAgICAgIHRoaXMuX3N0YXRlU2NyaXB0RGF0YUVzY2FwZWQoY3ApO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8vIFNjcmlwdCBkYXRhIGVzY2FwZWQgZW5kIHRhZyBuYW1lIHN0YXRlXG4gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICBfc3RhdGVTY3JpcHREYXRhRXNjYXBlZEVuZFRhZ05hbWUoY3ApIHtcbiAgICAgICAgaWYgKHRoaXMuaGFuZGxlU3BlY2lhbEVuZFRhZyhjcCkpIHtcbiAgICAgICAgICAgIHRoaXMuX2VtaXRDaGFycygnPC8nKTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBTdGF0ZS5TQ1JJUFRfREFUQV9FU0NBUEVEO1xuICAgICAgICAgICAgdGhpcy5fc3RhdGVTY3JpcHREYXRhRXNjYXBlZChjcCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gU2NyaXB0IGRhdGEgZG91YmxlIGVzY2FwZSBzdGFydCBzdGF0ZVxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgX3N0YXRlU2NyaXB0RGF0YURvdWJsZUVzY2FwZVN0YXJ0KGNwKSB7XG4gICAgICAgIGlmICh0aGlzLnByZXByb2Nlc3Nvci5zdGFydHNXaXRoKCQkLlNDUklQVCwgZmFsc2UpICYmXG4gICAgICAgICAgICBpc1NjcmlwdERhdGFEb3VibGVFc2NhcGVTZXF1ZW5jZUVuZCh0aGlzLnByZXByb2Nlc3Nvci5wZWVrKCQkLlNDUklQVC5sZW5ndGgpKSkge1xuICAgICAgICAgICAgdGhpcy5fZW1pdENvZGVQb2ludChjcCk7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8ICQkLlNDUklQVC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIHRoaXMuX2VtaXRDb2RlUG9pbnQodGhpcy5fY29uc3VtZSgpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBTdGF0ZS5TQ1JJUFRfREFUQV9ET1VCTEVfRVNDQVBFRDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICghdGhpcy5fZW5zdXJlSGliZXJuYXRpb24oKSkge1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IFN0YXRlLlNDUklQVF9EQVRBX0VTQ0FQRUQ7XG4gICAgICAgICAgICB0aGlzLl9zdGF0ZVNjcmlwdERhdGFFc2NhcGVkKGNwKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBTY3JpcHQgZGF0YSBkb3VibGUgZXNjYXBlZCBzdGF0ZVxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgX3N0YXRlU2NyaXB0RGF0YURvdWJsZUVzY2FwZWQoY3ApIHtcbiAgICAgICAgc3dpdGNoIChjcCkge1xuICAgICAgICAgICAgY2FzZSAkLkhZUEhFTl9NSU5VUzoge1xuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBTdGF0ZS5TQ1JJUFRfREFUQV9ET1VCTEVfRVNDQVBFRF9EQVNIO1xuICAgICAgICAgICAgICAgIHRoaXMuX2VtaXRDaGFycygnLScpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSAkLkxFU1NfVEhBTl9TSUdOOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IFN0YXRlLlNDUklQVF9EQVRBX0RPVUJMRV9FU0NBUEVEX0xFU1NfVEhBTl9TSUdOO1xuICAgICAgICAgICAgICAgIHRoaXMuX2VtaXRDaGFycygnPCcpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSAkLk5VTEw6IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9lcnIoRVJSLnVuZXhwZWN0ZWROdWxsQ2hhcmFjdGVyKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9lbWl0Q2hhcnMoUkVQTEFDRU1FTlRfQ0hBUkFDVEVSKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgJC5FT0Y6IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9lcnIoRVJSLmVvZkluU2NyaXB0SHRtbENvbW1lbnRMaWtlVGV4dCk7XG4gICAgICAgICAgICAgICAgdGhpcy5fZW1pdEVPRlRva2VuKCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZW1pdENvZGVQb2ludChjcCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gU2NyaXB0IGRhdGEgZG91YmxlIGVzY2FwZWQgZGFzaCBzdGF0ZVxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgX3N0YXRlU2NyaXB0RGF0YURvdWJsZUVzY2FwZWREYXNoKGNwKSB7XG4gICAgICAgIHN3aXRjaCAoY3ApIHtcbiAgICAgICAgICAgIGNhc2UgJC5IWVBIRU5fTUlOVVM6IHtcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gU3RhdGUuU0NSSVBUX0RBVEFfRE9VQkxFX0VTQ0FQRURfREFTSF9EQVNIO1xuICAgICAgICAgICAgICAgIHRoaXMuX2VtaXRDaGFycygnLScpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSAkLkxFU1NfVEhBTl9TSUdOOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IFN0YXRlLlNDUklQVF9EQVRBX0RPVUJMRV9FU0NBUEVEX0xFU1NfVEhBTl9TSUdOO1xuICAgICAgICAgICAgICAgIHRoaXMuX2VtaXRDaGFycygnPCcpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSAkLk5VTEw6IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9lcnIoRVJSLnVuZXhwZWN0ZWROdWxsQ2hhcmFjdGVyKTtcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gU3RhdGUuU0NSSVBUX0RBVEFfRE9VQkxFX0VTQ0FQRUQ7XG4gICAgICAgICAgICAgICAgdGhpcy5fZW1pdENoYXJzKFJFUExBQ0VNRU5UX0NIQVJBQ1RFUik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlICQuRU9GOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZXJyKEVSUi5lb2ZJblNjcmlwdEh0bWxDb21tZW50TGlrZVRleHQpO1xuICAgICAgICAgICAgICAgIHRoaXMuX2VtaXRFT0ZUb2tlbigpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBTdGF0ZS5TQ1JJUFRfREFUQV9ET1VCTEVfRVNDQVBFRDtcbiAgICAgICAgICAgICAgICB0aGlzLl9lbWl0Q29kZVBvaW50KGNwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBTY3JpcHQgZGF0YSBkb3VibGUgZXNjYXBlZCBkYXNoIGRhc2ggc3RhdGVcbiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIF9zdGF0ZVNjcmlwdERhdGFEb3VibGVFc2NhcGVkRGFzaERhc2goY3ApIHtcbiAgICAgICAgc3dpdGNoIChjcCkge1xuICAgICAgICAgICAgY2FzZSAkLkhZUEhFTl9NSU5VUzoge1xuICAgICAgICAgICAgICAgIHRoaXMuX2VtaXRDaGFycygnLScpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSAkLkxFU1NfVEhBTl9TSUdOOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IFN0YXRlLlNDUklQVF9EQVRBX0RPVUJMRV9FU0NBUEVEX0xFU1NfVEhBTl9TSUdOO1xuICAgICAgICAgICAgICAgIHRoaXMuX2VtaXRDaGFycygnPCcpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSAkLkdSRUFURVJfVEhBTl9TSUdOOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IFN0YXRlLlNDUklQVF9EQVRBO1xuICAgICAgICAgICAgICAgIHRoaXMuX2VtaXRDaGFycygnPicpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSAkLk5VTEw6IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9lcnIoRVJSLnVuZXhwZWN0ZWROdWxsQ2hhcmFjdGVyKTtcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gU3RhdGUuU0NSSVBUX0RBVEFfRE9VQkxFX0VTQ0FQRUQ7XG4gICAgICAgICAgICAgICAgdGhpcy5fZW1pdENoYXJzKFJFUExBQ0VNRU5UX0NIQVJBQ1RFUik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlICQuRU9GOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZXJyKEVSUi5lb2ZJblNjcmlwdEh0bWxDb21tZW50TGlrZVRleHQpO1xuICAgICAgICAgICAgICAgIHRoaXMuX2VtaXRFT0ZUb2tlbigpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBTdGF0ZS5TQ1JJUFRfREFUQV9ET1VCTEVfRVNDQVBFRDtcbiAgICAgICAgICAgICAgICB0aGlzLl9lbWl0Q29kZVBvaW50KGNwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBTY3JpcHQgZGF0YSBkb3VibGUgZXNjYXBlZCBsZXNzLXRoYW4gc2lnbiBzdGF0ZVxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgX3N0YXRlU2NyaXB0RGF0YURvdWJsZUVzY2FwZWRMZXNzVGhhblNpZ24oY3ApIHtcbiAgICAgICAgaWYgKGNwID09PSAkLlNPTElEVVMpIHtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBTdGF0ZS5TQ1JJUFRfREFUQV9ET1VCTEVfRVNDQVBFX0VORDtcbiAgICAgICAgICAgIHRoaXMuX2VtaXRDaGFycygnLycpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IFN0YXRlLlNDUklQVF9EQVRBX0RPVUJMRV9FU0NBUEVEO1xuICAgICAgICAgICAgdGhpcy5fc3RhdGVTY3JpcHREYXRhRG91YmxlRXNjYXBlZChjcCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gU2NyaXB0IGRhdGEgZG91YmxlIGVzY2FwZSBlbmQgc3RhdGVcbiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIF9zdGF0ZVNjcmlwdERhdGFEb3VibGVFc2NhcGVFbmQoY3ApIHtcbiAgICAgICAgaWYgKHRoaXMucHJlcHJvY2Vzc29yLnN0YXJ0c1dpdGgoJCQuU0NSSVBULCBmYWxzZSkgJiZcbiAgICAgICAgICAgIGlzU2NyaXB0RGF0YURvdWJsZUVzY2FwZVNlcXVlbmNlRW5kKHRoaXMucHJlcHJvY2Vzc29yLnBlZWsoJCQuU0NSSVBULmxlbmd0aCkpKSB7XG4gICAgICAgICAgICB0aGlzLl9lbWl0Q29kZVBvaW50KGNwKTtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgJCQuU0NSSVBULmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZW1pdENvZGVQb2ludCh0aGlzLl9jb25zdW1lKCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IFN0YXRlLlNDUklQVF9EQVRBX0VTQ0FQRUQ7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoIXRoaXMuX2Vuc3VyZUhpYmVybmF0aW9uKCkpIHtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBTdGF0ZS5TQ1JJUFRfREFUQV9ET1VCTEVfRVNDQVBFRDtcbiAgICAgICAgICAgIHRoaXMuX3N0YXRlU2NyaXB0RGF0YURvdWJsZUVzY2FwZWQoY3ApO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8vIEJlZm9yZSBhdHRyaWJ1dGUgbmFtZSBzdGF0ZVxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgX3N0YXRlQmVmb3JlQXR0cmlidXRlTmFtZShjcCkge1xuICAgICAgICBzd2l0Y2ggKGNwKSB7XG4gICAgICAgICAgICBjYXNlICQuU1BBQ0U6XG4gICAgICAgICAgICBjYXNlICQuTElORV9GRUVEOlxuICAgICAgICAgICAgY2FzZSAkLlRBQlVMQVRJT046XG4gICAgICAgICAgICBjYXNlICQuRk9STV9GRUVEOiB7XG4gICAgICAgICAgICAgICAgLy8gSWdub3JlIHdoaXRlc3BhY2VcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgJC5TT0xJRFVTOlxuICAgICAgICAgICAgY2FzZSAkLkdSRUFURVJfVEhBTl9TSUdOOlxuICAgICAgICAgICAgY2FzZSAkLkVPRjoge1xuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBTdGF0ZS5BRlRFUl9BVFRSSUJVVEVfTkFNRTtcbiAgICAgICAgICAgICAgICB0aGlzLl9zdGF0ZUFmdGVyQXR0cmlidXRlTmFtZShjcCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlICQuRVFVQUxTX1NJR046IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9lcnIoRVJSLnVuZXhwZWN0ZWRFcXVhbHNTaWduQmVmb3JlQXR0cmlidXRlTmFtZSk7XG4gICAgICAgICAgICAgICAgdGhpcy5fY3JlYXRlQXR0cignPScpO1xuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBTdGF0ZS5BVFRSSUJVVEVfTkFNRTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9jcmVhdGVBdHRyKCcnKTtcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gU3RhdGUuQVRUUklCVVRFX05BTUU7XG4gICAgICAgICAgICAgICAgdGhpcy5fc3RhdGVBdHRyaWJ1dGVOYW1lKGNwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBBdHRyaWJ1dGUgbmFtZSBzdGF0ZVxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgX3N0YXRlQXR0cmlidXRlTmFtZShjcCkge1xuICAgICAgICBzd2l0Y2ggKGNwKSB7XG4gICAgICAgICAgICBjYXNlICQuU1BBQ0U6XG4gICAgICAgICAgICBjYXNlICQuTElORV9GRUVEOlxuICAgICAgICAgICAgY2FzZSAkLlRBQlVMQVRJT046XG4gICAgICAgICAgICBjYXNlICQuRk9STV9GRUVEOlxuICAgICAgICAgICAgY2FzZSAkLlNPTElEVVM6XG4gICAgICAgICAgICBjYXNlICQuR1JFQVRFUl9USEFOX1NJR046XG4gICAgICAgICAgICBjYXNlICQuRU9GOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fbGVhdmVBdHRyTmFtZSgpO1xuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBTdGF0ZS5BRlRFUl9BVFRSSUJVVEVfTkFNRTtcbiAgICAgICAgICAgICAgICB0aGlzLl9zdGF0ZUFmdGVyQXR0cmlidXRlTmFtZShjcCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlICQuRVFVQUxTX1NJR046IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9sZWF2ZUF0dHJOYW1lKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IFN0YXRlLkJFRk9SRV9BVFRSSUJVVEVfVkFMVUU7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlICQuUVVPVEFUSU9OX01BUks6XG4gICAgICAgICAgICBjYXNlICQuQVBPU1RST1BIRTpcbiAgICAgICAgICAgIGNhc2UgJC5MRVNTX1RIQU5fU0lHTjoge1xuICAgICAgICAgICAgICAgIHRoaXMuX2VycihFUlIudW5leHBlY3RlZENoYXJhY3RlckluQXR0cmlidXRlTmFtZSk7XG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50QXR0ci5uYW1lICs9IFN0cmluZy5mcm9tQ29kZVBvaW50KGNwKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgJC5OVUxMOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZXJyKEVSUi51bmV4cGVjdGVkTnVsbENoYXJhY3Rlcik7XG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50QXR0ci5uYW1lICs9IFJFUExBQ0VNRU5UX0NIQVJBQ1RFUjtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRBdHRyLm5hbWUgKz0gU3RyaW5nLmZyb21Db2RlUG9pbnQoaXNBc2NpaVVwcGVyKGNwKSA/IHRvQXNjaWlMb3dlcihjcCkgOiBjcCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gQWZ0ZXIgYXR0cmlidXRlIG5hbWUgc3RhdGVcbiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIF9zdGF0ZUFmdGVyQXR0cmlidXRlTmFtZShjcCkge1xuICAgICAgICBzd2l0Y2ggKGNwKSB7XG4gICAgICAgICAgICBjYXNlICQuU1BBQ0U6XG4gICAgICAgICAgICBjYXNlICQuTElORV9GRUVEOlxuICAgICAgICAgICAgY2FzZSAkLlRBQlVMQVRJT046XG4gICAgICAgICAgICBjYXNlICQuRk9STV9GRUVEOiB7XG4gICAgICAgICAgICAgICAgLy8gSWdub3JlIHdoaXRlc3BhY2VcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgJC5TT0xJRFVTOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IFN0YXRlLlNFTEZfQ0xPU0lOR19TVEFSVF9UQUc7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlICQuRVFVQUxTX1NJR046IHtcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gU3RhdGUuQkVGT1JFX0FUVFJJQlVURV9WQUxVRTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgJC5HUkVBVEVSX1RIQU5fU0lHTjoge1xuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBTdGF0ZS5EQVRBO1xuICAgICAgICAgICAgICAgIHRoaXMuZW1pdEN1cnJlbnRUYWdUb2tlbigpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSAkLkVPRjoge1xuICAgICAgICAgICAgICAgIHRoaXMuX2VycihFUlIuZW9mSW5UYWcpO1xuICAgICAgICAgICAgICAgIHRoaXMuX2VtaXRFT0ZUb2tlbigpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgICAgIHRoaXMuX2NyZWF0ZUF0dHIoJycpO1xuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBTdGF0ZS5BVFRSSUJVVEVfTkFNRTtcbiAgICAgICAgICAgICAgICB0aGlzLl9zdGF0ZUF0dHJpYnV0ZU5hbWUoY3ApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIC8vIEJlZm9yZSBhdHRyaWJ1dGUgdmFsdWUgc3RhdGVcbiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIF9zdGF0ZUJlZm9yZUF0dHJpYnV0ZVZhbHVlKGNwKSB7XG4gICAgICAgIHN3aXRjaCAoY3ApIHtcbiAgICAgICAgICAgIGNhc2UgJC5TUEFDRTpcbiAgICAgICAgICAgIGNhc2UgJC5MSU5FX0ZFRUQ6XG4gICAgICAgICAgICBjYXNlICQuVEFCVUxBVElPTjpcbiAgICAgICAgICAgIGNhc2UgJC5GT1JNX0ZFRUQ6IHtcbiAgICAgICAgICAgICAgICAvLyBJZ25vcmUgd2hpdGVzcGFjZVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSAkLlFVT1RBVElPTl9NQVJLOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IFN0YXRlLkFUVFJJQlVURV9WQUxVRV9ET1VCTEVfUVVPVEVEO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSAkLkFQT1NUUk9QSEU6IHtcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gU3RhdGUuQVRUUklCVVRFX1ZBTFVFX1NJTkdMRV9RVU9URUQ7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlICQuR1JFQVRFUl9USEFOX1NJR046IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9lcnIoRVJSLm1pc3NpbmdBdHRyaWJ1dGVWYWx1ZSk7XG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IFN0YXRlLkRBVEE7XG4gICAgICAgICAgICAgICAgdGhpcy5lbWl0Q3VycmVudFRhZ1Rva2VuKCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IFN0YXRlLkFUVFJJQlVURV9WQUxVRV9VTlFVT1RFRDtcbiAgICAgICAgICAgICAgICB0aGlzLl9zdGF0ZUF0dHJpYnV0ZVZhbHVlVW5xdW90ZWQoY3ApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIC8vIEF0dHJpYnV0ZSB2YWx1ZSAoZG91YmxlLXF1b3RlZCkgc3RhdGVcbiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIF9zdGF0ZUF0dHJpYnV0ZVZhbHVlRG91YmxlUXVvdGVkKGNwKSB7XG4gICAgICAgIHN3aXRjaCAoY3ApIHtcbiAgICAgICAgICAgIGNhc2UgJC5RVU9UQVRJT05fTUFSSzoge1xuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBTdGF0ZS5BRlRFUl9BVFRSSUJVVEVfVkFMVUVfUVVPVEVEO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSAkLkFNUEVSU0FORDoge1xuICAgICAgICAgICAgICAgIHRoaXMuX3N0YXJ0Q2hhcmFjdGVyUmVmZXJlbmNlKCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlICQuTlVMTDoge1xuICAgICAgICAgICAgICAgIHRoaXMuX2VycihFUlIudW5leHBlY3RlZE51bGxDaGFyYWN0ZXIpO1xuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudEF0dHIudmFsdWUgKz0gUkVQTEFDRU1FTlRfQ0hBUkFDVEVSO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSAkLkVPRjoge1xuICAgICAgICAgICAgICAgIHRoaXMuX2VycihFUlIuZW9mSW5UYWcpO1xuICAgICAgICAgICAgICAgIHRoaXMuX2VtaXRFT0ZUb2tlbigpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudEF0dHIudmFsdWUgKz0gU3RyaW5nLmZyb21Db2RlUG9pbnQoY3ApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIC8vIEF0dHJpYnV0ZSB2YWx1ZSAoc2luZ2xlLXF1b3RlZCkgc3RhdGVcbiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIF9zdGF0ZUF0dHJpYnV0ZVZhbHVlU2luZ2xlUXVvdGVkKGNwKSB7XG4gICAgICAgIHN3aXRjaCAoY3ApIHtcbiAgICAgICAgICAgIGNhc2UgJC5BUE9TVFJPUEhFOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IFN0YXRlLkFGVEVSX0FUVFJJQlVURV9WQUxVRV9RVU9URUQ7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlICQuQU1QRVJTQU5EOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fc3RhcnRDaGFyYWN0ZXJSZWZlcmVuY2UoKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgJC5OVUxMOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZXJyKEVSUi51bmV4cGVjdGVkTnVsbENoYXJhY3Rlcik7XG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50QXR0ci52YWx1ZSArPSBSRVBMQUNFTUVOVF9DSEFSQUNURVI7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlICQuRU9GOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZXJyKEVSUi5lb2ZJblRhZyk7XG4gICAgICAgICAgICAgICAgdGhpcy5fZW1pdEVPRlRva2VuKCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50QXR0ci52YWx1ZSArPSBTdHJpbmcuZnJvbUNvZGVQb2ludChjcCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gQXR0cmlidXRlIHZhbHVlICh1bnF1b3RlZCkgc3RhdGVcbiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIF9zdGF0ZUF0dHJpYnV0ZVZhbHVlVW5xdW90ZWQoY3ApIHtcbiAgICAgICAgc3dpdGNoIChjcCkge1xuICAgICAgICAgICAgY2FzZSAkLlNQQUNFOlxuICAgICAgICAgICAgY2FzZSAkLkxJTkVfRkVFRDpcbiAgICAgICAgICAgIGNhc2UgJC5UQUJVTEFUSU9OOlxuICAgICAgICAgICAgY2FzZSAkLkZPUk1fRkVFRDoge1xuICAgICAgICAgICAgICAgIHRoaXMuX2xlYXZlQXR0clZhbHVlKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IFN0YXRlLkJFRk9SRV9BVFRSSUJVVEVfTkFNRTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgJC5BTVBFUlNBTkQ6IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9zdGFydENoYXJhY3RlclJlZmVyZW5jZSgpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSAkLkdSRUFURVJfVEhBTl9TSUdOOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fbGVhdmVBdHRyVmFsdWUoKTtcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gU3RhdGUuREFUQTtcbiAgICAgICAgICAgICAgICB0aGlzLmVtaXRDdXJyZW50VGFnVG9rZW4oKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgJC5OVUxMOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZXJyKEVSUi51bmV4cGVjdGVkTnVsbENoYXJhY3Rlcik7XG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50QXR0ci52YWx1ZSArPSBSRVBMQUNFTUVOVF9DSEFSQUNURVI7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlICQuUVVPVEFUSU9OX01BUks6XG4gICAgICAgICAgICBjYXNlICQuQVBPU1RST1BIRTpcbiAgICAgICAgICAgIGNhc2UgJC5MRVNTX1RIQU5fU0lHTjpcbiAgICAgICAgICAgIGNhc2UgJC5FUVVBTFNfU0lHTjpcbiAgICAgICAgICAgIGNhc2UgJC5HUkFWRV9BQ0NFTlQ6IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9lcnIoRVJSLnVuZXhwZWN0ZWRDaGFyYWN0ZXJJblVucXVvdGVkQXR0cmlidXRlVmFsdWUpO1xuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudEF0dHIudmFsdWUgKz0gU3RyaW5nLmZyb21Db2RlUG9pbnQoY3ApO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSAkLkVPRjoge1xuICAgICAgICAgICAgICAgIHRoaXMuX2VycihFUlIuZW9mSW5UYWcpO1xuICAgICAgICAgICAgICAgIHRoaXMuX2VtaXRFT0ZUb2tlbigpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudEF0dHIudmFsdWUgKz0gU3RyaW5nLmZyb21Db2RlUG9pbnQoY3ApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIC8vIEFmdGVyIGF0dHJpYnV0ZSB2YWx1ZSAocXVvdGVkKSBzdGF0ZVxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgX3N0YXRlQWZ0ZXJBdHRyaWJ1dGVWYWx1ZVF1b3RlZChjcCkge1xuICAgICAgICBzd2l0Y2ggKGNwKSB7XG4gICAgICAgICAgICBjYXNlICQuU1BBQ0U6XG4gICAgICAgICAgICBjYXNlICQuTElORV9GRUVEOlxuICAgICAgICAgICAgY2FzZSAkLlRBQlVMQVRJT046XG4gICAgICAgICAgICBjYXNlICQuRk9STV9GRUVEOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fbGVhdmVBdHRyVmFsdWUoKTtcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gU3RhdGUuQkVGT1JFX0FUVFJJQlVURV9OQU1FO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSAkLlNPTElEVVM6IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9sZWF2ZUF0dHJWYWx1ZSgpO1xuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBTdGF0ZS5TRUxGX0NMT1NJTkdfU1RBUlRfVEFHO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSAkLkdSRUFURVJfVEhBTl9TSUdOOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fbGVhdmVBdHRyVmFsdWUoKTtcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gU3RhdGUuREFUQTtcbiAgICAgICAgICAgICAgICB0aGlzLmVtaXRDdXJyZW50VGFnVG9rZW4oKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgJC5FT0Y6IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9lcnIoRVJSLmVvZkluVGFnKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9lbWl0RU9GVG9rZW4oKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9lcnIoRVJSLm1pc3NpbmdXaGl0ZXNwYWNlQmV0d2VlbkF0dHJpYnV0ZXMpO1xuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBTdGF0ZS5CRUZPUkVfQVRUUklCVVRFX05BTUU7XG4gICAgICAgICAgICAgICAgdGhpcy5fc3RhdGVCZWZvcmVBdHRyaWJ1dGVOYW1lKGNwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBTZWxmLWNsb3Npbmcgc3RhcnQgdGFnIHN0YXRlXG4gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICBfc3RhdGVTZWxmQ2xvc2luZ1N0YXJ0VGFnKGNwKSB7XG4gICAgICAgIHN3aXRjaCAoY3ApIHtcbiAgICAgICAgICAgIGNhc2UgJC5HUkVBVEVSX1RIQU5fU0lHTjoge1xuICAgICAgICAgICAgICAgIGNvbnN0IHRva2VuID0gdGhpcy5jdXJyZW50VG9rZW47XG4gICAgICAgICAgICAgICAgdG9rZW4uc2VsZkNsb3NpbmcgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBTdGF0ZS5EQVRBO1xuICAgICAgICAgICAgICAgIHRoaXMuZW1pdEN1cnJlbnRUYWdUb2tlbigpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSAkLkVPRjoge1xuICAgICAgICAgICAgICAgIHRoaXMuX2VycihFUlIuZW9mSW5UYWcpO1xuICAgICAgICAgICAgICAgIHRoaXMuX2VtaXRFT0ZUb2tlbigpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgICAgIHRoaXMuX2VycihFUlIudW5leHBlY3RlZFNvbGlkdXNJblRhZyk7XG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IFN0YXRlLkJFRk9SRV9BVFRSSUJVVEVfTkFNRTtcbiAgICAgICAgICAgICAgICB0aGlzLl9zdGF0ZUJlZm9yZUF0dHJpYnV0ZU5hbWUoY3ApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIC8vIEJvZ3VzIGNvbW1lbnQgc3RhdGVcbiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIF9zdGF0ZUJvZ3VzQ29tbWVudChjcCkge1xuICAgICAgICBjb25zdCB0b2tlbiA9IHRoaXMuY3VycmVudFRva2VuO1xuICAgICAgICBzd2l0Y2ggKGNwKSB7XG4gICAgICAgICAgICBjYXNlICQuR1JFQVRFUl9USEFOX1NJR046IHtcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gU3RhdGUuREFUQTtcbiAgICAgICAgICAgICAgICB0aGlzLmVtaXRDdXJyZW50Q29tbWVudCh0b2tlbik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlICQuRU9GOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5lbWl0Q3VycmVudENvbW1lbnQodG9rZW4pO1xuICAgICAgICAgICAgICAgIHRoaXMuX2VtaXRFT0ZUb2tlbigpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSAkLk5VTEw6IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9lcnIoRVJSLnVuZXhwZWN0ZWROdWxsQ2hhcmFjdGVyKTtcbiAgICAgICAgICAgICAgICB0b2tlbi5kYXRhICs9IFJFUExBQ0VNRU5UX0NIQVJBQ1RFUjtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgICAgICB0b2tlbi5kYXRhICs9IFN0cmluZy5mcm9tQ29kZVBvaW50KGNwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBNYXJrdXAgZGVjbGFyYXRpb24gb3BlbiBzdGF0ZVxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgX3N0YXRlTWFya3VwRGVjbGFyYXRpb25PcGVuKGNwKSB7XG4gICAgICAgIGlmICh0aGlzLl9jb25zdW1lU2VxdWVuY2VJZk1hdGNoKCQkLkRBU0hfREFTSCwgdHJ1ZSkpIHtcbiAgICAgICAgICAgIHRoaXMuX2NyZWF0ZUNvbW1lbnRUb2tlbigkJC5EQVNIX0RBU0gubGVuZ3RoICsgMSk7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gU3RhdGUuQ09NTUVOVF9TVEFSVDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0aGlzLl9jb25zdW1lU2VxdWVuY2VJZk1hdGNoKCQkLkRPQ1RZUEUsIGZhbHNlKSkge1xuICAgICAgICAgICAgLy8gTk9URTogRG9jdHlwZXMgdG9rZW5zIGFyZSBjcmVhdGVkIHdpdGhvdXQgZml4ZWQgb2Zmc2V0cy4gV2Uga2VlcCB0cmFjayBvZiB0aGUgbW9tZW50IGEgZG9jdHlwZSAqbWlnaHQqIHN0YXJ0IGhlcmUuXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRMb2NhdGlvbiA9IHRoaXMuZ2V0Q3VycmVudExvY2F0aW9uKCQkLkRPQ1RZUEUubGVuZ3RoICsgMSk7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gU3RhdGUuRE9DVFlQRTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0aGlzLl9jb25zdW1lU2VxdWVuY2VJZk1hdGNoKCQkLkNEQVRBX1NUQVJULCB0cnVlKSkge1xuICAgICAgICAgICAgaWYgKHRoaXMuaW5Gb3JlaWduTm9kZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBTdGF0ZS5DREFUQV9TRUNUSU9OO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZXJyKEVSUi5jZGF0YUluSHRtbENvbnRlbnQpO1xuICAgICAgICAgICAgICAgIHRoaXMuX2NyZWF0ZUNvbW1lbnRUb2tlbigkJC5DREFUQV9TVEFSVC5sZW5ndGggKyAxKTtcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbi5kYXRhID0gJ1tDREFUQVsnO1xuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBTdGF0ZS5CT0dVU19DT01NRU5UO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vTk9URTogU2VxdWVuY2UgbG9va3VwcyBjYW4gYmUgYWJydXB0ZWQgYnkgaGliZXJuYXRpb24uIEluIHRoYXQgY2FzZSwgbG9va3VwXG4gICAgICAgIC8vcmVzdWx0cyBhcmUgbm8gbG9uZ2VyIHZhbGlkIGFuZCB3ZSB3aWxsIG5lZWQgdG8gc3RhcnQgb3Zlci5cbiAgICAgICAgZWxzZSBpZiAoIXRoaXMuX2Vuc3VyZUhpYmVybmF0aW9uKCkpIHtcbiAgICAgICAgICAgIHRoaXMuX2VycihFUlIuaW5jb3JyZWN0bHlPcGVuZWRDb21tZW50KTtcbiAgICAgICAgICAgIHRoaXMuX2NyZWF0ZUNvbW1lbnRUb2tlbigyKTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBTdGF0ZS5CT0dVU19DT01NRU5UO1xuICAgICAgICAgICAgdGhpcy5fc3RhdGVCb2d1c0NvbW1lbnQoY3ApO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8vIENvbW1lbnQgc3RhcnQgc3RhdGVcbiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIF9zdGF0ZUNvbW1lbnRTdGFydChjcCkge1xuICAgICAgICBzd2l0Y2ggKGNwKSB7XG4gICAgICAgICAgICBjYXNlICQuSFlQSEVOX01JTlVTOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IFN0YXRlLkNPTU1FTlRfU1RBUlRfREFTSDtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgJC5HUkVBVEVSX1RIQU5fU0lHTjoge1xuICAgICAgICAgICAgICAgIHRoaXMuX2VycihFUlIuYWJydXB0Q2xvc2luZ09mRW1wdHlDb21tZW50KTtcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gU3RhdGUuREFUQTtcbiAgICAgICAgICAgICAgICBjb25zdCB0b2tlbiA9IHRoaXMuY3VycmVudFRva2VuO1xuICAgICAgICAgICAgICAgIHRoaXMuZW1pdEN1cnJlbnRDb21tZW50KHRva2VuKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gU3RhdGUuQ09NTUVOVDtcbiAgICAgICAgICAgICAgICB0aGlzLl9zdGF0ZUNvbW1lbnQoY3ApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIC8vIENvbW1lbnQgc3RhcnQgZGFzaCBzdGF0ZVxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgX3N0YXRlQ29tbWVudFN0YXJ0RGFzaChjcCkge1xuICAgICAgICBjb25zdCB0b2tlbiA9IHRoaXMuY3VycmVudFRva2VuO1xuICAgICAgICBzd2l0Y2ggKGNwKSB7XG4gICAgICAgICAgICBjYXNlICQuSFlQSEVOX01JTlVTOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IFN0YXRlLkNPTU1FTlRfRU5EO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSAkLkdSRUFURVJfVEhBTl9TSUdOOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZXJyKEVSUi5hYnJ1cHRDbG9zaW5nT2ZFbXB0eUNvbW1lbnQpO1xuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBTdGF0ZS5EQVRBO1xuICAgICAgICAgICAgICAgIHRoaXMuZW1pdEN1cnJlbnRDb21tZW50KHRva2VuKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgJC5FT0Y6IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9lcnIoRVJSLmVvZkluQ29tbWVudCk7XG4gICAgICAgICAgICAgICAgdGhpcy5lbWl0Q3VycmVudENvbW1lbnQodG9rZW4pO1xuICAgICAgICAgICAgICAgIHRoaXMuX2VtaXRFT0ZUb2tlbigpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgICAgIHRva2VuLmRhdGEgKz0gJy0nO1xuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBTdGF0ZS5DT01NRU5UO1xuICAgICAgICAgICAgICAgIHRoaXMuX3N0YXRlQ29tbWVudChjcCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gQ29tbWVudCBzdGF0ZVxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgX3N0YXRlQ29tbWVudChjcCkge1xuICAgICAgICBjb25zdCB0b2tlbiA9IHRoaXMuY3VycmVudFRva2VuO1xuICAgICAgICBzd2l0Y2ggKGNwKSB7XG4gICAgICAgICAgICBjYXNlICQuSFlQSEVOX01JTlVTOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IFN0YXRlLkNPTU1FTlRfRU5EX0RBU0g7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlICQuTEVTU19USEFOX1NJR046IHtcbiAgICAgICAgICAgICAgICB0b2tlbi5kYXRhICs9ICc8JztcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gU3RhdGUuQ09NTUVOVF9MRVNTX1RIQU5fU0lHTjtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgJC5OVUxMOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZXJyKEVSUi51bmV4cGVjdGVkTnVsbENoYXJhY3Rlcik7XG4gICAgICAgICAgICAgICAgdG9rZW4uZGF0YSArPSBSRVBMQUNFTUVOVF9DSEFSQUNURVI7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlICQuRU9GOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZXJyKEVSUi5lb2ZJbkNvbW1lbnQpO1xuICAgICAgICAgICAgICAgIHRoaXMuZW1pdEN1cnJlbnRDb21tZW50KHRva2VuKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9lbWl0RU9GVG9rZW4oKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgICAgICB0b2tlbi5kYXRhICs9IFN0cmluZy5mcm9tQ29kZVBvaW50KGNwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBDb21tZW50IGxlc3MtdGhhbiBzaWduIHN0YXRlXG4gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICBfc3RhdGVDb21tZW50TGVzc1RoYW5TaWduKGNwKSB7XG4gICAgICAgIGNvbnN0IHRva2VuID0gdGhpcy5jdXJyZW50VG9rZW47XG4gICAgICAgIHN3aXRjaCAoY3ApIHtcbiAgICAgICAgICAgIGNhc2UgJC5FWENMQU1BVElPTl9NQVJLOiB7XG4gICAgICAgICAgICAgICAgdG9rZW4uZGF0YSArPSAnISc7XG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IFN0YXRlLkNPTU1FTlRfTEVTU19USEFOX1NJR05fQkFORztcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgJC5MRVNTX1RIQU5fU0lHTjoge1xuICAgICAgICAgICAgICAgIHRva2VuLmRhdGEgKz0gJzwnO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBTdGF0ZS5DT01NRU5UO1xuICAgICAgICAgICAgICAgIHRoaXMuX3N0YXRlQ29tbWVudChjcCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gQ29tbWVudCBsZXNzLXRoYW4gc2lnbiBiYW5nIHN0YXRlXG4gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICBfc3RhdGVDb21tZW50TGVzc1RoYW5TaWduQmFuZyhjcCkge1xuICAgICAgICBpZiAoY3AgPT09ICQuSFlQSEVOX01JTlVTKSB7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gU3RhdGUuQ09NTUVOVF9MRVNTX1RIQU5fU0lHTl9CQU5HX0RBU0g7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gU3RhdGUuQ09NTUVOVDtcbiAgICAgICAgICAgIHRoaXMuX3N0YXRlQ29tbWVudChjcCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gQ29tbWVudCBsZXNzLXRoYW4gc2lnbiBiYW5nIGRhc2ggc3RhdGVcbiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIF9zdGF0ZUNvbW1lbnRMZXNzVGhhblNpZ25CYW5nRGFzaChjcCkge1xuICAgICAgICBpZiAoY3AgPT09ICQuSFlQSEVOX01JTlVTKSB7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gU3RhdGUuQ09NTUVOVF9MRVNTX1RIQU5fU0lHTl9CQU5HX0RBU0hfREFTSDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBTdGF0ZS5DT01NRU5UX0VORF9EQVNIO1xuICAgICAgICAgICAgdGhpcy5fc3RhdGVDb21tZW50RW5kRGFzaChjcCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gQ29tbWVudCBsZXNzLXRoYW4gc2lnbiBiYW5nIGRhc2ggZGFzaCBzdGF0ZVxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgX3N0YXRlQ29tbWVudExlc3NUaGFuU2lnbkJhbmdEYXNoRGFzaChjcCkge1xuICAgICAgICBpZiAoY3AgIT09ICQuR1JFQVRFUl9USEFOX1NJR04gJiYgY3AgIT09ICQuRU9GKSB7XG4gICAgICAgICAgICB0aGlzLl9lcnIoRVJSLm5lc3RlZENvbW1lbnQpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc3RhdGUgPSBTdGF0ZS5DT01NRU5UX0VORDtcbiAgICAgICAgdGhpcy5fc3RhdGVDb21tZW50RW5kKGNwKTtcbiAgICB9XG4gICAgLy8gQ29tbWVudCBlbmQgZGFzaCBzdGF0ZVxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgX3N0YXRlQ29tbWVudEVuZERhc2goY3ApIHtcbiAgICAgICAgY29uc3QgdG9rZW4gPSB0aGlzLmN1cnJlbnRUb2tlbjtcbiAgICAgICAgc3dpdGNoIChjcCkge1xuICAgICAgICAgICAgY2FzZSAkLkhZUEhFTl9NSU5VUzoge1xuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBTdGF0ZS5DT01NRU5UX0VORDtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgJC5FT0Y6IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9lcnIoRVJSLmVvZkluQ29tbWVudCk7XG4gICAgICAgICAgICAgICAgdGhpcy5lbWl0Q3VycmVudENvbW1lbnQodG9rZW4pO1xuICAgICAgICAgICAgICAgIHRoaXMuX2VtaXRFT0ZUb2tlbigpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgICAgIHRva2VuLmRhdGEgKz0gJy0nO1xuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBTdGF0ZS5DT01NRU5UO1xuICAgICAgICAgICAgICAgIHRoaXMuX3N0YXRlQ29tbWVudChjcCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gQ29tbWVudCBlbmQgc3RhdGVcbiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIF9zdGF0ZUNvbW1lbnRFbmQoY3ApIHtcbiAgICAgICAgY29uc3QgdG9rZW4gPSB0aGlzLmN1cnJlbnRUb2tlbjtcbiAgICAgICAgc3dpdGNoIChjcCkge1xuICAgICAgICAgICAgY2FzZSAkLkdSRUFURVJfVEhBTl9TSUdOOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IFN0YXRlLkRBVEE7XG4gICAgICAgICAgICAgICAgdGhpcy5lbWl0Q3VycmVudENvbW1lbnQodG9rZW4pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSAkLkVYQ0xBTUFUSU9OX01BUks6IHtcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gU3RhdGUuQ09NTUVOVF9FTkRfQkFORztcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgJC5IWVBIRU5fTUlOVVM6IHtcbiAgICAgICAgICAgICAgICB0b2tlbi5kYXRhICs9ICctJztcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgJC5FT0Y6IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9lcnIoRVJSLmVvZkluQ29tbWVudCk7XG4gICAgICAgICAgICAgICAgdGhpcy5lbWl0Q3VycmVudENvbW1lbnQodG9rZW4pO1xuICAgICAgICAgICAgICAgIHRoaXMuX2VtaXRFT0ZUb2tlbigpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgICAgIHRva2VuLmRhdGEgKz0gJy0tJztcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gU3RhdGUuQ09NTUVOVDtcbiAgICAgICAgICAgICAgICB0aGlzLl9zdGF0ZUNvbW1lbnQoY3ApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIC8vIENvbW1lbnQgZW5kIGJhbmcgc3RhdGVcbiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIF9zdGF0ZUNvbW1lbnRFbmRCYW5nKGNwKSB7XG4gICAgICAgIGNvbnN0IHRva2VuID0gdGhpcy5jdXJyZW50VG9rZW47XG4gICAgICAgIHN3aXRjaCAoY3ApIHtcbiAgICAgICAgICAgIGNhc2UgJC5IWVBIRU5fTUlOVVM6IHtcbiAgICAgICAgICAgICAgICB0b2tlbi5kYXRhICs9ICctLSEnO1xuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBTdGF0ZS5DT01NRU5UX0VORF9EQVNIO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSAkLkdSRUFURVJfVEhBTl9TSUdOOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZXJyKEVSUi5pbmNvcnJlY3RseUNsb3NlZENvbW1lbnQpO1xuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBTdGF0ZS5EQVRBO1xuICAgICAgICAgICAgICAgIHRoaXMuZW1pdEN1cnJlbnRDb21tZW50KHRva2VuKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgJC5FT0Y6IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9lcnIoRVJSLmVvZkluQ29tbWVudCk7XG4gICAgICAgICAgICAgICAgdGhpcy5lbWl0Q3VycmVudENvbW1lbnQodG9rZW4pO1xuICAgICAgICAgICAgICAgIHRoaXMuX2VtaXRFT0ZUb2tlbigpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgICAgIHRva2VuLmRhdGEgKz0gJy0tISc7XG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IFN0YXRlLkNPTU1FTlQ7XG4gICAgICAgICAgICAgICAgdGhpcy5fc3RhdGVDb21tZW50KGNwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBET0NUWVBFIHN0YXRlXG4gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICBfc3RhdGVEb2N0eXBlKGNwKSB7XG4gICAgICAgIHN3aXRjaCAoY3ApIHtcbiAgICAgICAgICAgIGNhc2UgJC5TUEFDRTpcbiAgICAgICAgICAgIGNhc2UgJC5MSU5FX0ZFRUQ6XG4gICAgICAgICAgICBjYXNlICQuVEFCVUxBVElPTjpcbiAgICAgICAgICAgIGNhc2UgJC5GT1JNX0ZFRUQ6IHtcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gU3RhdGUuQkVGT1JFX0RPQ1RZUEVfTkFNRTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgJC5HUkVBVEVSX1RIQU5fU0lHTjoge1xuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBTdGF0ZS5CRUZPUkVfRE9DVFlQRV9OQU1FO1xuICAgICAgICAgICAgICAgIHRoaXMuX3N0YXRlQmVmb3JlRG9jdHlwZU5hbWUoY3ApO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSAkLkVPRjoge1xuICAgICAgICAgICAgICAgIHRoaXMuX2VycihFUlIuZW9mSW5Eb2N0eXBlKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9jcmVhdGVEb2N0eXBlVG9rZW4obnVsbCk7XG4gICAgICAgICAgICAgICAgY29uc3QgdG9rZW4gPSB0aGlzLmN1cnJlbnRUb2tlbjtcbiAgICAgICAgICAgICAgICB0b2tlbi5mb3JjZVF1aXJrcyA9IHRydWU7XG4gICAgICAgICAgICAgICAgdGhpcy5lbWl0Q3VycmVudERvY3R5cGUodG9rZW4pO1xuICAgICAgICAgICAgICAgIHRoaXMuX2VtaXRFT0ZUb2tlbigpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgICAgIHRoaXMuX2VycihFUlIubWlzc2luZ1doaXRlc3BhY2VCZWZvcmVEb2N0eXBlTmFtZSk7XG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IFN0YXRlLkJFRk9SRV9ET0NUWVBFX05BTUU7XG4gICAgICAgICAgICAgICAgdGhpcy5fc3RhdGVCZWZvcmVEb2N0eXBlTmFtZShjcCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gQmVmb3JlIERPQ1RZUEUgbmFtZSBzdGF0ZVxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgX3N0YXRlQmVmb3JlRG9jdHlwZU5hbWUoY3ApIHtcbiAgICAgICAgaWYgKGlzQXNjaWlVcHBlcihjcCkpIHtcbiAgICAgICAgICAgIHRoaXMuX2NyZWF0ZURvY3R5cGVUb2tlbihTdHJpbmcuZnJvbUNoYXJDb2RlKHRvQXNjaWlMb3dlcihjcCkpKTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBTdGF0ZS5ET0NUWVBFX05BTUU7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgc3dpdGNoIChjcCkge1xuICAgICAgICAgICAgICAgIGNhc2UgJC5TUEFDRTpcbiAgICAgICAgICAgICAgICBjYXNlICQuTElORV9GRUVEOlxuICAgICAgICAgICAgICAgIGNhc2UgJC5UQUJVTEFUSU9OOlxuICAgICAgICAgICAgICAgIGNhc2UgJC5GT1JNX0ZFRUQ6IHtcbiAgICAgICAgICAgICAgICAgICAgLy8gSWdub3JlIHdoaXRlc3BhY2VcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhc2UgJC5OVUxMOiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2VycihFUlIudW5leHBlY3RlZE51bGxDaGFyYWN0ZXIpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jcmVhdGVEb2N0eXBlVG9rZW4oUkVQTEFDRU1FTlRfQ0hBUkFDVEVSKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IFN0YXRlLkRPQ1RZUEVfTkFNRTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhc2UgJC5HUkVBVEVSX1RIQU5fU0lHTjoge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9lcnIoRVJSLm1pc3NpbmdEb2N0eXBlTmFtZSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NyZWF0ZURvY3R5cGVUb2tlbihudWxsKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdG9rZW4gPSB0aGlzLmN1cnJlbnRUb2tlbjtcbiAgICAgICAgICAgICAgICAgICAgdG9rZW4uZm9yY2VRdWlya3MgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmVtaXRDdXJyZW50RG9jdHlwZSh0b2tlbik7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBTdGF0ZS5EQVRBO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FzZSAkLkVPRjoge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9lcnIoRVJSLmVvZkluRG9jdHlwZSk7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2NyZWF0ZURvY3R5cGVUb2tlbihudWxsKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdG9rZW4gPSB0aGlzLmN1cnJlbnRUb2tlbjtcbiAgICAgICAgICAgICAgICAgICAgdG9rZW4uZm9yY2VRdWlya3MgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmVtaXRDdXJyZW50RG9jdHlwZSh0b2tlbik7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2VtaXRFT0ZUb2tlbigpO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9jcmVhdGVEb2N0eXBlVG9rZW4oU3RyaW5nLmZyb21Db2RlUG9pbnQoY3ApKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IFN0YXRlLkRPQ1RZUEVfTkFNRTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgfVxuICAgIC8vIERPQ1RZUEUgbmFtZSBzdGF0ZVxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgX3N0YXRlRG9jdHlwZU5hbWUoY3ApIHtcbiAgICAgICAgY29uc3QgdG9rZW4gPSB0aGlzLmN1cnJlbnRUb2tlbjtcbiAgICAgICAgc3dpdGNoIChjcCkge1xuICAgICAgICAgICAgY2FzZSAkLlNQQUNFOlxuICAgICAgICAgICAgY2FzZSAkLkxJTkVfRkVFRDpcbiAgICAgICAgICAgIGNhc2UgJC5UQUJVTEFUSU9OOlxuICAgICAgICAgICAgY2FzZSAkLkZPUk1fRkVFRDoge1xuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBTdGF0ZS5BRlRFUl9ET0NUWVBFX05BTUU7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlICQuR1JFQVRFUl9USEFOX1NJR046IHtcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gU3RhdGUuREFUQTtcbiAgICAgICAgICAgICAgICB0aGlzLmVtaXRDdXJyZW50RG9jdHlwZSh0b2tlbik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlICQuTlVMTDoge1xuICAgICAgICAgICAgICAgIHRoaXMuX2VycihFUlIudW5leHBlY3RlZE51bGxDaGFyYWN0ZXIpO1xuICAgICAgICAgICAgICAgIHRva2VuLm5hbWUgKz0gUkVQTEFDRU1FTlRfQ0hBUkFDVEVSO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSAkLkVPRjoge1xuICAgICAgICAgICAgICAgIHRoaXMuX2VycihFUlIuZW9mSW5Eb2N0eXBlKTtcbiAgICAgICAgICAgICAgICB0b2tlbi5mb3JjZVF1aXJrcyA9IHRydWU7XG4gICAgICAgICAgICAgICAgdGhpcy5lbWl0Q3VycmVudERvY3R5cGUodG9rZW4pO1xuICAgICAgICAgICAgICAgIHRoaXMuX2VtaXRFT0ZUb2tlbigpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgICAgIHRva2VuLm5hbWUgKz0gU3RyaW5nLmZyb21Db2RlUG9pbnQoaXNBc2NpaVVwcGVyKGNwKSA/IHRvQXNjaWlMb3dlcihjcCkgOiBjcCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gQWZ0ZXIgRE9DVFlQRSBuYW1lIHN0YXRlXG4gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICBfc3RhdGVBZnRlckRvY3R5cGVOYW1lKGNwKSB7XG4gICAgICAgIGNvbnN0IHRva2VuID0gdGhpcy5jdXJyZW50VG9rZW47XG4gICAgICAgIHN3aXRjaCAoY3ApIHtcbiAgICAgICAgICAgIGNhc2UgJC5TUEFDRTpcbiAgICAgICAgICAgIGNhc2UgJC5MSU5FX0ZFRUQ6XG4gICAgICAgICAgICBjYXNlICQuVEFCVUxBVElPTjpcbiAgICAgICAgICAgIGNhc2UgJC5GT1JNX0ZFRUQ6IHtcbiAgICAgICAgICAgICAgICAvLyBJZ25vcmUgd2hpdGVzcGFjZVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSAkLkdSRUFURVJfVEhBTl9TSUdOOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IFN0YXRlLkRBVEE7XG4gICAgICAgICAgICAgICAgdGhpcy5lbWl0Q3VycmVudERvY3R5cGUodG9rZW4pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSAkLkVPRjoge1xuICAgICAgICAgICAgICAgIHRoaXMuX2VycihFUlIuZW9mSW5Eb2N0eXBlKTtcbiAgICAgICAgICAgICAgICB0b2tlbi5mb3JjZVF1aXJrcyA9IHRydWU7XG4gICAgICAgICAgICAgICAgdGhpcy5lbWl0Q3VycmVudERvY3R5cGUodG9rZW4pO1xuICAgICAgICAgICAgICAgIHRoaXMuX2VtaXRFT0ZUb2tlbigpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLl9jb25zdW1lU2VxdWVuY2VJZk1hdGNoKCQkLlBVQkxJQywgZmFsc2UpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBTdGF0ZS5BRlRFUl9ET0NUWVBFX1BVQkxJQ19LRVlXT1JEO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmICh0aGlzLl9jb25zdW1lU2VxdWVuY2VJZk1hdGNoKCQkLlNZU1RFTSwgZmFsc2UpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBTdGF0ZS5BRlRFUl9ET0NUWVBFX1NZU1RFTV9LRVlXT1JEO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvL05PVEU6IHNlcXVlbmNlIGxvb2t1cCBjYW4gYmUgYWJydXB0ZWQgYnkgaGliZXJuYXRpb24uIEluIHRoYXQgY2FzZSBsb29rdXBcbiAgICAgICAgICAgICAgICAvL3Jlc3VsdHMgYXJlIG5vIGxvbmdlciB2YWxpZCBhbmQgd2Ugd2lsbCBuZWVkIHRvIHN0YXJ0IG92ZXIuXG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoIXRoaXMuX2Vuc3VyZUhpYmVybmF0aW9uKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZXJyKEVSUi5pbnZhbGlkQ2hhcmFjdGVyU2VxdWVuY2VBZnRlckRvY3R5cGVOYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgdG9rZW4uZm9yY2VRdWlya3MgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gU3RhdGUuQk9HVVNfRE9DVFlQRTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fc3RhdGVCb2d1c0RvY3R5cGUoY3ApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBBZnRlciBET0NUWVBFIHB1YmxpYyBrZXl3b3JkIHN0YXRlXG4gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICBfc3RhdGVBZnRlckRvY3R5cGVQdWJsaWNLZXl3b3JkKGNwKSB7XG4gICAgICAgIGNvbnN0IHRva2VuID0gdGhpcy5jdXJyZW50VG9rZW47XG4gICAgICAgIHN3aXRjaCAoY3ApIHtcbiAgICAgICAgICAgIGNhc2UgJC5TUEFDRTpcbiAgICAgICAgICAgIGNhc2UgJC5MSU5FX0ZFRUQ6XG4gICAgICAgICAgICBjYXNlICQuVEFCVUxBVElPTjpcbiAgICAgICAgICAgIGNhc2UgJC5GT1JNX0ZFRUQ6IHtcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gU3RhdGUuQkVGT1JFX0RPQ1RZUEVfUFVCTElDX0lERU5USUZJRVI7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlICQuUVVPVEFUSU9OX01BUks6IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9lcnIoRVJSLm1pc3NpbmdXaGl0ZXNwYWNlQWZ0ZXJEb2N0eXBlUHVibGljS2V5d29yZCk7XG4gICAgICAgICAgICAgICAgdG9rZW4ucHVibGljSWQgPSAnJztcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gU3RhdGUuRE9DVFlQRV9QVUJMSUNfSURFTlRJRklFUl9ET1VCTEVfUVVPVEVEO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSAkLkFQT1NUUk9QSEU6IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9lcnIoRVJSLm1pc3NpbmdXaGl0ZXNwYWNlQWZ0ZXJEb2N0eXBlUHVibGljS2V5d29yZCk7XG4gICAgICAgICAgICAgICAgdG9rZW4ucHVibGljSWQgPSAnJztcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gU3RhdGUuRE9DVFlQRV9QVUJMSUNfSURFTlRJRklFUl9TSU5HTEVfUVVPVEVEO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSAkLkdSRUFURVJfVEhBTl9TSUdOOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZXJyKEVSUi5taXNzaW5nRG9jdHlwZVB1YmxpY0lkZW50aWZpZXIpO1xuICAgICAgICAgICAgICAgIHRva2VuLmZvcmNlUXVpcmtzID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gU3RhdGUuREFUQTtcbiAgICAgICAgICAgICAgICB0aGlzLmVtaXRDdXJyZW50RG9jdHlwZSh0b2tlbik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlICQuRU9GOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZXJyKEVSUi5lb2ZJbkRvY3R5cGUpO1xuICAgICAgICAgICAgICAgIHRva2VuLmZvcmNlUXVpcmtzID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB0aGlzLmVtaXRDdXJyZW50RG9jdHlwZSh0b2tlbik7XG4gICAgICAgICAgICAgICAgdGhpcy5fZW1pdEVPRlRva2VuKCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZXJyKEVSUi5taXNzaW5nUXVvdGVCZWZvcmVEb2N0eXBlUHVibGljSWRlbnRpZmllcik7XG4gICAgICAgICAgICAgICAgdG9rZW4uZm9yY2VRdWlya3MgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBTdGF0ZS5CT0dVU19ET0NUWVBFO1xuICAgICAgICAgICAgICAgIHRoaXMuX3N0YXRlQm9ndXNEb2N0eXBlKGNwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBCZWZvcmUgRE9DVFlQRSBwdWJsaWMgaWRlbnRpZmllciBzdGF0ZVxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgX3N0YXRlQmVmb3JlRG9jdHlwZVB1YmxpY0lkZW50aWZpZXIoY3ApIHtcbiAgICAgICAgY29uc3QgdG9rZW4gPSB0aGlzLmN1cnJlbnRUb2tlbjtcbiAgICAgICAgc3dpdGNoIChjcCkge1xuICAgICAgICAgICAgY2FzZSAkLlNQQUNFOlxuICAgICAgICAgICAgY2FzZSAkLkxJTkVfRkVFRDpcbiAgICAgICAgICAgIGNhc2UgJC5UQUJVTEFUSU9OOlxuICAgICAgICAgICAgY2FzZSAkLkZPUk1fRkVFRDoge1xuICAgICAgICAgICAgICAgIC8vIElnbm9yZSB3aGl0ZXNwYWNlXG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlICQuUVVPVEFUSU9OX01BUks6IHtcbiAgICAgICAgICAgICAgICB0b2tlbi5wdWJsaWNJZCA9ICcnO1xuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBTdGF0ZS5ET0NUWVBFX1BVQkxJQ19JREVOVElGSUVSX0RPVUJMRV9RVU9URUQ7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlICQuQVBPU1RST1BIRToge1xuICAgICAgICAgICAgICAgIHRva2VuLnB1YmxpY0lkID0gJyc7XG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IFN0YXRlLkRPQ1RZUEVfUFVCTElDX0lERU5USUZJRVJfU0lOR0xFX1FVT1RFRDtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgJC5HUkVBVEVSX1RIQU5fU0lHTjoge1xuICAgICAgICAgICAgICAgIHRoaXMuX2VycihFUlIubWlzc2luZ0RvY3R5cGVQdWJsaWNJZGVudGlmaWVyKTtcbiAgICAgICAgICAgICAgICB0b2tlbi5mb3JjZVF1aXJrcyA9IHRydWU7XG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IFN0YXRlLkRBVEE7XG4gICAgICAgICAgICAgICAgdGhpcy5lbWl0Q3VycmVudERvY3R5cGUodG9rZW4pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSAkLkVPRjoge1xuICAgICAgICAgICAgICAgIHRoaXMuX2VycihFUlIuZW9mSW5Eb2N0eXBlKTtcbiAgICAgICAgICAgICAgICB0b2tlbi5mb3JjZVF1aXJrcyA9IHRydWU7XG4gICAgICAgICAgICAgICAgdGhpcy5lbWl0Q3VycmVudERvY3R5cGUodG9rZW4pO1xuICAgICAgICAgICAgICAgIHRoaXMuX2VtaXRFT0ZUb2tlbigpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgICAgIHRoaXMuX2VycihFUlIubWlzc2luZ1F1b3RlQmVmb3JlRG9jdHlwZVB1YmxpY0lkZW50aWZpZXIpO1xuICAgICAgICAgICAgICAgIHRva2VuLmZvcmNlUXVpcmtzID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gU3RhdGUuQk9HVVNfRE9DVFlQRTtcbiAgICAgICAgICAgICAgICB0aGlzLl9zdGF0ZUJvZ3VzRG9jdHlwZShjcCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gRE9DVFlQRSBwdWJsaWMgaWRlbnRpZmllciAoZG91YmxlLXF1b3RlZCkgc3RhdGVcbiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIF9zdGF0ZURvY3R5cGVQdWJsaWNJZGVudGlmaWVyRG91YmxlUXVvdGVkKGNwKSB7XG4gICAgICAgIGNvbnN0IHRva2VuID0gdGhpcy5jdXJyZW50VG9rZW47XG4gICAgICAgIHN3aXRjaCAoY3ApIHtcbiAgICAgICAgICAgIGNhc2UgJC5RVU9UQVRJT05fTUFSSzoge1xuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBTdGF0ZS5BRlRFUl9ET0NUWVBFX1BVQkxJQ19JREVOVElGSUVSO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSAkLk5VTEw6IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9lcnIoRVJSLnVuZXhwZWN0ZWROdWxsQ2hhcmFjdGVyKTtcbiAgICAgICAgICAgICAgICB0b2tlbi5wdWJsaWNJZCArPSBSRVBMQUNFTUVOVF9DSEFSQUNURVI7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlICQuR1JFQVRFUl9USEFOX1NJR046IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9lcnIoRVJSLmFicnVwdERvY3R5cGVQdWJsaWNJZGVudGlmaWVyKTtcbiAgICAgICAgICAgICAgICB0b2tlbi5mb3JjZVF1aXJrcyA9IHRydWU7XG4gICAgICAgICAgICAgICAgdGhpcy5lbWl0Q3VycmVudERvY3R5cGUodG9rZW4pO1xuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBTdGF0ZS5EQVRBO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSAkLkVPRjoge1xuICAgICAgICAgICAgICAgIHRoaXMuX2VycihFUlIuZW9mSW5Eb2N0eXBlKTtcbiAgICAgICAgICAgICAgICB0b2tlbi5mb3JjZVF1aXJrcyA9IHRydWU7XG4gICAgICAgICAgICAgICAgdGhpcy5lbWl0Q3VycmVudERvY3R5cGUodG9rZW4pO1xuICAgICAgICAgICAgICAgIHRoaXMuX2VtaXRFT0ZUb2tlbigpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgICAgIHRva2VuLnB1YmxpY0lkICs9IFN0cmluZy5mcm9tQ29kZVBvaW50KGNwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBET0NUWVBFIHB1YmxpYyBpZGVudGlmaWVyIChzaW5nbGUtcXVvdGVkKSBzdGF0ZVxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgX3N0YXRlRG9jdHlwZVB1YmxpY0lkZW50aWZpZXJTaW5nbGVRdW90ZWQoY3ApIHtcbiAgICAgICAgY29uc3QgdG9rZW4gPSB0aGlzLmN1cnJlbnRUb2tlbjtcbiAgICAgICAgc3dpdGNoIChjcCkge1xuICAgICAgICAgICAgY2FzZSAkLkFQT1NUUk9QSEU6IHtcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gU3RhdGUuQUZURVJfRE9DVFlQRV9QVUJMSUNfSURFTlRJRklFUjtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgJC5OVUxMOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZXJyKEVSUi51bmV4cGVjdGVkTnVsbENoYXJhY3Rlcik7XG4gICAgICAgICAgICAgICAgdG9rZW4ucHVibGljSWQgKz0gUkVQTEFDRU1FTlRfQ0hBUkFDVEVSO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSAkLkdSRUFURVJfVEhBTl9TSUdOOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZXJyKEVSUi5hYnJ1cHREb2N0eXBlUHVibGljSWRlbnRpZmllcik7XG4gICAgICAgICAgICAgICAgdG9rZW4uZm9yY2VRdWlya3MgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHRoaXMuZW1pdEN1cnJlbnREb2N0eXBlKHRva2VuKTtcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gU3RhdGUuREFUQTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgJC5FT0Y6IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9lcnIoRVJSLmVvZkluRG9jdHlwZSk7XG4gICAgICAgICAgICAgICAgdG9rZW4uZm9yY2VRdWlya3MgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHRoaXMuZW1pdEN1cnJlbnREb2N0eXBlKHRva2VuKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9lbWl0RU9GVG9rZW4oKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgICAgICB0b2tlbi5wdWJsaWNJZCArPSBTdHJpbmcuZnJvbUNvZGVQb2ludChjcCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gQWZ0ZXIgRE9DVFlQRSBwdWJsaWMgaWRlbnRpZmllciBzdGF0ZVxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgX3N0YXRlQWZ0ZXJEb2N0eXBlUHVibGljSWRlbnRpZmllcihjcCkge1xuICAgICAgICBjb25zdCB0b2tlbiA9IHRoaXMuY3VycmVudFRva2VuO1xuICAgICAgICBzd2l0Y2ggKGNwKSB7XG4gICAgICAgICAgICBjYXNlICQuU1BBQ0U6XG4gICAgICAgICAgICBjYXNlICQuTElORV9GRUVEOlxuICAgICAgICAgICAgY2FzZSAkLlRBQlVMQVRJT046XG4gICAgICAgICAgICBjYXNlICQuRk9STV9GRUVEOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IFN0YXRlLkJFVFdFRU5fRE9DVFlQRV9QVUJMSUNfQU5EX1NZU1RFTV9JREVOVElGSUVSUztcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgJC5HUkVBVEVSX1RIQU5fU0lHTjoge1xuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBTdGF0ZS5EQVRBO1xuICAgICAgICAgICAgICAgIHRoaXMuZW1pdEN1cnJlbnREb2N0eXBlKHRva2VuKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgJC5RVU9UQVRJT05fTUFSSzoge1xuICAgICAgICAgICAgICAgIHRoaXMuX2VycihFUlIubWlzc2luZ1doaXRlc3BhY2VCZXR3ZWVuRG9jdHlwZVB1YmxpY0FuZFN5c3RlbUlkZW50aWZpZXJzKTtcbiAgICAgICAgICAgICAgICB0b2tlbi5zeXN0ZW1JZCA9ICcnO1xuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBTdGF0ZS5ET0NUWVBFX1NZU1RFTV9JREVOVElGSUVSX0RPVUJMRV9RVU9URUQ7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlICQuQVBPU1RST1BIRToge1xuICAgICAgICAgICAgICAgIHRoaXMuX2VycihFUlIubWlzc2luZ1doaXRlc3BhY2VCZXR3ZWVuRG9jdHlwZVB1YmxpY0FuZFN5c3RlbUlkZW50aWZpZXJzKTtcbiAgICAgICAgICAgICAgICB0b2tlbi5zeXN0ZW1JZCA9ICcnO1xuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBTdGF0ZS5ET0NUWVBFX1NZU1RFTV9JREVOVElGSUVSX1NJTkdMRV9RVU9URUQ7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlICQuRU9GOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZXJyKEVSUi5lb2ZJbkRvY3R5cGUpO1xuICAgICAgICAgICAgICAgIHRva2VuLmZvcmNlUXVpcmtzID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB0aGlzLmVtaXRDdXJyZW50RG9jdHlwZSh0b2tlbik7XG4gICAgICAgICAgICAgICAgdGhpcy5fZW1pdEVPRlRva2VuKCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZXJyKEVSUi5taXNzaW5nUXVvdGVCZWZvcmVEb2N0eXBlU3lzdGVtSWRlbnRpZmllcik7XG4gICAgICAgICAgICAgICAgdG9rZW4uZm9yY2VRdWlya3MgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBTdGF0ZS5CT0dVU19ET0NUWVBFO1xuICAgICAgICAgICAgICAgIHRoaXMuX3N0YXRlQm9ndXNEb2N0eXBlKGNwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBCZXR3ZWVuIERPQ1RZUEUgcHVibGljIGFuZCBzeXN0ZW0gaWRlbnRpZmllcnMgc3RhdGVcbiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIF9zdGF0ZUJldHdlZW5Eb2N0eXBlUHVibGljQW5kU3lzdGVtSWRlbnRpZmllcnMoY3ApIHtcbiAgICAgICAgY29uc3QgdG9rZW4gPSB0aGlzLmN1cnJlbnRUb2tlbjtcbiAgICAgICAgc3dpdGNoIChjcCkge1xuICAgICAgICAgICAgY2FzZSAkLlNQQUNFOlxuICAgICAgICAgICAgY2FzZSAkLkxJTkVfRkVFRDpcbiAgICAgICAgICAgIGNhc2UgJC5UQUJVTEFUSU9OOlxuICAgICAgICAgICAgY2FzZSAkLkZPUk1fRkVFRDoge1xuICAgICAgICAgICAgICAgIC8vIElnbm9yZSB3aGl0ZXNwYWNlXG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlICQuR1JFQVRFUl9USEFOX1NJR046IHtcbiAgICAgICAgICAgICAgICB0aGlzLmVtaXRDdXJyZW50RG9jdHlwZSh0b2tlbik7XG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IFN0YXRlLkRBVEE7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlICQuUVVPVEFUSU9OX01BUks6IHtcbiAgICAgICAgICAgICAgICB0b2tlbi5zeXN0ZW1JZCA9ICcnO1xuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBTdGF0ZS5ET0NUWVBFX1NZU1RFTV9JREVOVElGSUVSX0RPVUJMRV9RVU9URUQ7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlICQuQVBPU1RST1BIRToge1xuICAgICAgICAgICAgICAgIHRva2VuLnN5c3RlbUlkID0gJyc7XG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IFN0YXRlLkRPQ1RZUEVfU1lTVEVNX0lERU5USUZJRVJfU0lOR0xFX1FVT1RFRDtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgJC5FT0Y6IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9lcnIoRVJSLmVvZkluRG9jdHlwZSk7XG4gICAgICAgICAgICAgICAgdG9rZW4uZm9yY2VRdWlya3MgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHRoaXMuZW1pdEN1cnJlbnREb2N0eXBlKHRva2VuKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9lbWl0RU9GVG9rZW4oKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9lcnIoRVJSLm1pc3NpbmdRdW90ZUJlZm9yZURvY3R5cGVTeXN0ZW1JZGVudGlmaWVyKTtcbiAgICAgICAgICAgICAgICB0b2tlbi5mb3JjZVF1aXJrcyA9IHRydWU7XG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IFN0YXRlLkJPR1VTX0RPQ1RZUEU7XG4gICAgICAgICAgICAgICAgdGhpcy5fc3RhdGVCb2d1c0RvY3R5cGUoY3ApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIC8vIEFmdGVyIERPQ1RZUEUgc3lzdGVtIGtleXdvcmQgc3RhdGVcbiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIF9zdGF0ZUFmdGVyRG9jdHlwZVN5c3RlbUtleXdvcmQoY3ApIHtcbiAgICAgICAgY29uc3QgdG9rZW4gPSB0aGlzLmN1cnJlbnRUb2tlbjtcbiAgICAgICAgc3dpdGNoIChjcCkge1xuICAgICAgICAgICAgY2FzZSAkLlNQQUNFOlxuICAgICAgICAgICAgY2FzZSAkLkxJTkVfRkVFRDpcbiAgICAgICAgICAgIGNhc2UgJC5UQUJVTEFUSU9OOlxuICAgICAgICAgICAgY2FzZSAkLkZPUk1fRkVFRDoge1xuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBTdGF0ZS5CRUZPUkVfRE9DVFlQRV9TWVNURU1fSURFTlRJRklFUjtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgJC5RVU9UQVRJT05fTUFSSzoge1xuICAgICAgICAgICAgICAgIHRoaXMuX2VycihFUlIubWlzc2luZ1doaXRlc3BhY2VBZnRlckRvY3R5cGVTeXN0ZW1LZXl3b3JkKTtcbiAgICAgICAgICAgICAgICB0b2tlbi5zeXN0ZW1JZCA9ICcnO1xuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBTdGF0ZS5ET0NUWVBFX1NZU1RFTV9JREVOVElGSUVSX0RPVUJMRV9RVU9URUQ7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlICQuQVBPU1RST1BIRToge1xuICAgICAgICAgICAgICAgIHRoaXMuX2VycihFUlIubWlzc2luZ1doaXRlc3BhY2VBZnRlckRvY3R5cGVTeXN0ZW1LZXl3b3JkKTtcbiAgICAgICAgICAgICAgICB0b2tlbi5zeXN0ZW1JZCA9ICcnO1xuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBTdGF0ZS5ET0NUWVBFX1NZU1RFTV9JREVOVElGSUVSX1NJTkdMRV9RVU9URUQ7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlICQuR1JFQVRFUl9USEFOX1NJR046IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9lcnIoRVJSLm1pc3NpbmdEb2N0eXBlU3lzdGVtSWRlbnRpZmllcik7XG4gICAgICAgICAgICAgICAgdG9rZW4uZm9yY2VRdWlya3MgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBTdGF0ZS5EQVRBO1xuICAgICAgICAgICAgICAgIHRoaXMuZW1pdEN1cnJlbnREb2N0eXBlKHRva2VuKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgJC5FT0Y6IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9lcnIoRVJSLmVvZkluRG9jdHlwZSk7XG4gICAgICAgICAgICAgICAgdG9rZW4uZm9yY2VRdWlya3MgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHRoaXMuZW1pdEN1cnJlbnREb2N0eXBlKHRva2VuKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9lbWl0RU9GVG9rZW4oKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9lcnIoRVJSLm1pc3NpbmdRdW90ZUJlZm9yZURvY3R5cGVTeXN0ZW1JZGVudGlmaWVyKTtcbiAgICAgICAgICAgICAgICB0b2tlbi5mb3JjZVF1aXJrcyA9IHRydWU7XG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IFN0YXRlLkJPR1VTX0RPQ1RZUEU7XG4gICAgICAgICAgICAgICAgdGhpcy5fc3RhdGVCb2d1c0RvY3R5cGUoY3ApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIC8vIEJlZm9yZSBET0NUWVBFIHN5c3RlbSBpZGVudGlmaWVyIHN0YXRlXG4gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICBfc3RhdGVCZWZvcmVEb2N0eXBlU3lzdGVtSWRlbnRpZmllcihjcCkge1xuICAgICAgICBjb25zdCB0b2tlbiA9IHRoaXMuY3VycmVudFRva2VuO1xuICAgICAgICBzd2l0Y2ggKGNwKSB7XG4gICAgICAgICAgICBjYXNlICQuU1BBQ0U6XG4gICAgICAgICAgICBjYXNlICQuTElORV9GRUVEOlxuICAgICAgICAgICAgY2FzZSAkLlRBQlVMQVRJT046XG4gICAgICAgICAgICBjYXNlICQuRk9STV9GRUVEOiB7XG4gICAgICAgICAgICAgICAgLy8gSWdub3JlIHdoaXRlc3BhY2VcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgJC5RVU9UQVRJT05fTUFSSzoge1xuICAgICAgICAgICAgICAgIHRva2VuLnN5c3RlbUlkID0gJyc7XG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IFN0YXRlLkRPQ1RZUEVfU1lTVEVNX0lERU5USUZJRVJfRE9VQkxFX1FVT1RFRDtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgJC5BUE9TVFJPUEhFOiB7XG4gICAgICAgICAgICAgICAgdG9rZW4uc3lzdGVtSWQgPSAnJztcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gU3RhdGUuRE9DVFlQRV9TWVNURU1fSURFTlRJRklFUl9TSU5HTEVfUVVPVEVEO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSAkLkdSRUFURVJfVEhBTl9TSUdOOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZXJyKEVSUi5taXNzaW5nRG9jdHlwZVN5c3RlbUlkZW50aWZpZXIpO1xuICAgICAgICAgICAgICAgIHRva2VuLmZvcmNlUXVpcmtzID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gU3RhdGUuREFUQTtcbiAgICAgICAgICAgICAgICB0aGlzLmVtaXRDdXJyZW50RG9jdHlwZSh0b2tlbik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlICQuRU9GOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZXJyKEVSUi5lb2ZJbkRvY3R5cGUpO1xuICAgICAgICAgICAgICAgIHRva2VuLmZvcmNlUXVpcmtzID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB0aGlzLmVtaXRDdXJyZW50RG9jdHlwZSh0b2tlbik7XG4gICAgICAgICAgICAgICAgdGhpcy5fZW1pdEVPRlRva2VuKCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZXJyKEVSUi5taXNzaW5nUXVvdGVCZWZvcmVEb2N0eXBlU3lzdGVtSWRlbnRpZmllcik7XG4gICAgICAgICAgICAgICAgdG9rZW4uZm9yY2VRdWlya3MgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBTdGF0ZS5CT0dVU19ET0NUWVBFO1xuICAgICAgICAgICAgICAgIHRoaXMuX3N0YXRlQm9ndXNEb2N0eXBlKGNwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBET0NUWVBFIHN5c3RlbSBpZGVudGlmaWVyIChkb3VibGUtcXVvdGVkKSBzdGF0ZVxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgX3N0YXRlRG9jdHlwZVN5c3RlbUlkZW50aWZpZXJEb3VibGVRdW90ZWQoY3ApIHtcbiAgICAgICAgY29uc3QgdG9rZW4gPSB0aGlzLmN1cnJlbnRUb2tlbjtcbiAgICAgICAgc3dpdGNoIChjcCkge1xuICAgICAgICAgICAgY2FzZSAkLlFVT1RBVElPTl9NQVJLOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IFN0YXRlLkFGVEVSX0RPQ1RZUEVfU1lTVEVNX0lERU5USUZJRVI7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlICQuTlVMTDoge1xuICAgICAgICAgICAgICAgIHRoaXMuX2VycihFUlIudW5leHBlY3RlZE51bGxDaGFyYWN0ZXIpO1xuICAgICAgICAgICAgICAgIHRva2VuLnN5c3RlbUlkICs9IFJFUExBQ0VNRU5UX0NIQVJBQ1RFUjtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgJC5HUkVBVEVSX1RIQU5fU0lHTjoge1xuICAgICAgICAgICAgICAgIHRoaXMuX2VycihFUlIuYWJydXB0RG9jdHlwZVN5c3RlbUlkZW50aWZpZXIpO1xuICAgICAgICAgICAgICAgIHRva2VuLmZvcmNlUXVpcmtzID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB0aGlzLmVtaXRDdXJyZW50RG9jdHlwZSh0b2tlbik7XG4gICAgICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IFN0YXRlLkRBVEE7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlICQuRU9GOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZXJyKEVSUi5lb2ZJbkRvY3R5cGUpO1xuICAgICAgICAgICAgICAgIHRva2VuLmZvcmNlUXVpcmtzID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB0aGlzLmVtaXRDdXJyZW50RG9jdHlwZSh0b2tlbik7XG4gICAgICAgICAgICAgICAgdGhpcy5fZW1pdEVPRlRva2VuKCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICAgICAgdG9rZW4uc3lzdGVtSWQgKz0gU3RyaW5nLmZyb21Db2RlUG9pbnQoY3ApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIC8vIERPQ1RZUEUgc3lzdGVtIGlkZW50aWZpZXIgKHNpbmdsZS1xdW90ZWQpIHN0YXRlXG4gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICBfc3RhdGVEb2N0eXBlU3lzdGVtSWRlbnRpZmllclNpbmdsZVF1b3RlZChjcCkge1xuICAgICAgICBjb25zdCB0b2tlbiA9IHRoaXMuY3VycmVudFRva2VuO1xuICAgICAgICBzd2l0Y2ggKGNwKSB7XG4gICAgICAgICAgICBjYXNlICQuQVBPU1RST1BIRToge1xuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBTdGF0ZS5BRlRFUl9ET0NUWVBFX1NZU1RFTV9JREVOVElGSUVSO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSAkLk5VTEw6IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9lcnIoRVJSLnVuZXhwZWN0ZWROdWxsQ2hhcmFjdGVyKTtcbiAgICAgICAgICAgICAgICB0b2tlbi5zeXN0ZW1JZCArPSBSRVBMQUNFTUVOVF9DSEFSQUNURVI7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlICQuR1JFQVRFUl9USEFOX1NJR046IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9lcnIoRVJSLmFicnVwdERvY3R5cGVTeXN0ZW1JZGVudGlmaWVyKTtcbiAgICAgICAgICAgICAgICB0b2tlbi5mb3JjZVF1aXJrcyA9IHRydWU7XG4gICAgICAgICAgICAgICAgdGhpcy5lbWl0Q3VycmVudERvY3R5cGUodG9rZW4pO1xuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBTdGF0ZS5EQVRBO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSAkLkVPRjoge1xuICAgICAgICAgICAgICAgIHRoaXMuX2VycihFUlIuZW9mSW5Eb2N0eXBlKTtcbiAgICAgICAgICAgICAgICB0b2tlbi5mb3JjZVF1aXJrcyA9IHRydWU7XG4gICAgICAgICAgICAgICAgdGhpcy5lbWl0Q3VycmVudERvY3R5cGUodG9rZW4pO1xuICAgICAgICAgICAgICAgIHRoaXMuX2VtaXRFT0ZUb2tlbigpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgICAgIHRva2VuLnN5c3RlbUlkICs9IFN0cmluZy5mcm9tQ29kZVBvaW50KGNwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBBZnRlciBET0NUWVBFIHN5c3RlbSBpZGVudGlmaWVyIHN0YXRlXG4gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICBfc3RhdGVBZnRlckRvY3R5cGVTeXN0ZW1JZGVudGlmaWVyKGNwKSB7XG4gICAgICAgIGNvbnN0IHRva2VuID0gdGhpcy5jdXJyZW50VG9rZW47XG4gICAgICAgIHN3aXRjaCAoY3ApIHtcbiAgICAgICAgICAgIGNhc2UgJC5TUEFDRTpcbiAgICAgICAgICAgIGNhc2UgJC5MSU5FX0ZFRUQ6XG4gICAgICAgICAgICBjYXNlICQuVEFCVUxBVElPTjpcbiAgICAgICAgICAgIGNhc2UgJC5GT1JNX0ZFRUQ6IHtcbiAgICAgICAgICAgICAgICAvLyBJZ25vcmUgd2hpdGVzcGFjZVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSAkLkdSRUFURVJfVEhBTl9TSUdOOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5lbWl0Q3VycmVudERvY3R5cGUodG9rZW4pO1xuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBTdGF0ZS5EQVRBO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSAkLkVPRjoge1xuICAgICAgICAgICAgICAgIHRoaXMuX2VycihFUlIuZW9mSW5Eb2N0eXBlKTtcbiAgICAgICAgICAgICAgICB0b2tlbi5mb3JjZVF1aXJrcyA9IHRydWU7XG4gICAgICAgICAgICAgICAgdGhpcy5lbWl0Q3VycmVudERvY3R5cGUodG9rZW4pO1xuICAgICAgICAgICAgICAgIHRoaXMuX2VtaXRFT0ZUb2tlbigpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgICAgIHRoaXMuX2VycihFUlIudW5leHBlY3RlZENoYXJhY3RlckFmdGVyRG9jdHlwZVN5c3RlbUlkZW50aWZpZXIpO1xuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBTdGF0ZS5CT0dVU19ET0NUWVBFO1xuICAgICAgICAgICAgICAgIHRoaXMuX3N0YXRlQm9ndXNEb2N0eXBlKGNwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBCb2d1cyBET0NUWVBFIHN0YXRlXG4gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICBfc3RhdGVCb2d1c0RvY3R5cGUoY3ApIHtcbiAgICAgICAgY29uc3QgdG9rZW4gPSB0aGlzLmN1cnJlbnRUb2tlbjtcbiAgICAgICAgc3dpdGNoIChjcCkge1xuICAgICAgICAgICAgY2FzZSAkLkdSRUFURVJfVEhBTl9TSUdOOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5lbWl0Q3VycmVudERvY3R5cGUodG9rZW4pO1xuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBTdGF0ZS5EQVRBO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSAkLk5VTEw6IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9lcnIoRVJSLnVuZXhwZWN0ZWROdWxsQ2hhcmFjdGVyKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgJC5FT0Y6IHtcbiAgICAgICAgICAgICAgICB0aGlzLmVtaXRDdXJyZW50RG9jdHlwZSh0b2tlbik7XG4gICAgICAgICAgICAgICAgdGhpcy5fZW1pdEVPRlRva2VuKCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgLy8gRG8gbm90aGluZ1xuICAgICAgICB9XG4gICAgfVxuICAgIC8vIENEQVRBIHNlY3Rpb24gc3RhdGVcbiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgIF9zdGF0ZUNkYXRhU2VjdGlvbihjcCkge1xuICAgICAgICBzd2l0Y2ggKGNwKSB7XG4gICAgICAgICAgICBjYXNlICQuUklHSFRfU1FVQVJFX0JSQUNLRVQ6IHtcbiAgICAgICAgICAgICAgICB0aGlzLnN0YXRlID0gU3RhdGUuQ0RBVEFfU0VDVElPTl9CUkFDS0VUO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSAkLkVPRjoge1xuICAgICAgICAgICAgICAgIHRoaXMuX2VycihFUlIuZW9mSW5DZGF0YSk7XG4gICAgICAgICAgICAgICAgdGhpcy5fZW1pdEVPRlRva2VuKCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZW1pdENvZGVQb2ludChjcCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gQ0RBVEEgc2VjdGlvbiBicmFja2V0IHN0YXRlXG4gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICBfc3RhdGVDZGF0YVNlY3Rpb25CcmFja2V0KGNwKSB7XG4gICAgICAgIGlmIChjcCA9PT0gJC5SSUdIVF9TUVVBUkVfQlJBQ0tFVCkge1xuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IFN0YXRlLkNEQVRBX1NFQ1RJT05fRU5EO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fZW1pdENoYXJzKCddJyk7XG4gICAgICAgICAgICB0aGlzLnN0YXRlID0gU3RhdGUuQ0RBVEFfU0VDVElPTjtcbiAgICAgICAgICAgIHRoaXMuX3N0YXRlQ2RhdGFTZWN0aW9uKGNwKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBDREFUQSBzZWN0aW9uIGVuZCBzdGF0ZVxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAgX3N0YXRlQ2RhdGFTZWN0aW9uRW5kKGNwKSB7XG4gICAgICAgIHN3aXRjaCAoY3ApIHtcbiAgICAgICAgICAgIGNhc2UgJC5HUkVBVEVSX1RIQU5fU0lHTjoge1xuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBTdGF0ZS5EQVRBO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSAkLlJJR0hUX1NRVUFSRV9CUkFDS0VUOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZW1pdENoYXJzKCddJyk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZW1pdENoYXJzKCddXScpO1xuICAgICAgICAgICAgICAgIHRoaXMuc3RhdGUgPSBTdGF0ZS5DREFUQV9TRUNUSU9OO1xuICAgICAgICAgICAgICAgIHRoaXMuX3N0YXRlQ2RhdGFTZWN0aW9uKGNwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBDaGFyYWN0ZXIgcmVmZXJlbmNlIHN0YXRlXG4gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICBfc3RhdGVDaGFyYWN0ZXJSZWZlcmVuY2UoKSB7XG4gICAgICAgIGxldCBsZW5ndGggPSB0aGlzLmVudGl0eURlY29kZXIud3JpdGUodGhpcy5wcmVwcm9jZXNzb3IuaHRtbCwgdGhpcy5wcmVwcm9jZXNzb3IucG9zKTtcbiAgICAgICAgaWYgKGxlbmd0aCA8IDApIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnByZXByb2Nlc3Nvci5sYXN0Q2h1bmtXcml0dGVuKSB7XG4gICAgICAgICAgICAgICAgbGVuZ3RoID0gdGhpcy5lbnRpdHlEZWNvZGVyLmVuZCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gV2FpdCBmb3IgdGhlIHJlc3Qgb2YgdGhlIGVudGl0eS5cbiAgICAgICAgICAgICAgICB0aGlzLmFjdGl2ZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIC8vIE1hcmsgdGhlIGVudGlyZSBidWZmZXIgYXMgcmVhZC5cbiAgICAgICAgICAgICAgICB0aGlzLnByZXByb2Nlc3Nvci5wb3MgPSB0aGlzLnByZXByb2Nlc3Nvci5odG1sLmxlbmd0aCAtIDE7XG4gICAgICAgICAgICAgICAgdGhpcy5jb25zdW1lZEFmdGVyU25hcHNob3QgPSAwO1xuICAgICAgICAgICAgICAgIHRoaXMucHJlcHJvY2Vzc29yLmVuZE9mQ2h1bmtIaXQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAobGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAvLyBUaGlzIHdhcyBub3QgYSB2YWxpZCBlbnRpdHkuIEdvIGJhY2sgdG8gdGhlIGJlZ2lubmluZywgYW5kXG4gICAgICAgICAgICAvLyBmaWd1cmUgb3V0IHdoYXQgdG8gZG8uXG4gICAgICAgICAgICB0aGlzLnByZXByb2Nlc3Nvci5wb3MgPSB0aGlzLmVudGl0eVN0YXJ0UG9zO1xuICAgICAgICAgICAgdGhpcy5fZmx1c2hDb2RlUG9pbnRDb25zdW1lZEFzQ2hhcmFjdGVyUmVmZXJlbmNlKCQuQU1QRVJTQU5EKTtcbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPVxuICAgICAgICAgICAgICAgICF0aGlzLl9pc0NoYXJhY3RlclJlZmVyZW5jZUluQXR0cmlidXRlKCkgJiYgaXNBc2NpaUFscGhhTnVtZXJpYyh0aGlzLnByZXByb2Nlc3Nvci5wZWVrKDEpKVxuICAgICAgICAgICAgICAgICAgICA/IFN0YXRlLkFNQklHVU9VU19BTVBFUlNBTkRcbiAgICAgICAgICAgICAgICAgICAgOiB0aGlzLnJldHVyblN0YXRlO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgLy8gV2Ugc3VjY2Vzc2Z1bGx5IHBhcnNlZCBhbiBlbnRpdHkuIFN3aXRjaCB0byB0aGUgcmV0dXJuIHN0YXRlLlxuICAgICAgICAgICAgdGhpcy5zdGF0ZSA9IHRoaXMucmV0dXJuU3RhdGU7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gQW1iaWd1b3MgYW1wZXJzYW5kIHN0YXRlXG4gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgICBfc3RhdGVBbWJpZ3VvdXNBbXBlcnNhbmQoY3ApIHtcbiAgICAgICAgaWYgKGlzQXNjaWlBbHBoYU51bWVyaWMoY3ApKSB7XG4gICAgICAgICAgICB0aGlzLl9mbHVzaENvZGVQb2ludENvbnN1bWVkQXNDaGFyYWN0ZXJSZWZlcmVuY2UoY3ApO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgaWYgKGNwID09PSAkLlNFTUlDT0xPTikge1xuICAgICAgICAgICAgICAgIHRoaXMuX2VycihFUlIudW5rbm93bk5hbWVkQ2hhcmFjdGVyUmVmZXJlbmNlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuc3RhdGUgPSB0aGlzLnJldHVyblN0YXRlO1xuICAgICAgICAgICAgdGhpcy5fY2FsbFN0YXRlKGNwKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbiIsICJpbXBvcnQgeyBUQUdfSUQgYXMgJCwgTlMsIE5VTUJFUkVEX0hFQURFUlMgfSBmcm9tICcuLi9jb21tb24vaHRtbC5qcyc7XG4vL0VsZW1lbnQgdXRpbHNcbmNvbnN0IElNUExJQ0lUX0VORF9UQUdfUkVRVUlSRUQgPSBuZXcgU2V0KFskLkRELCAkLkRULCAkLkxJLCAkLk9QVEdST1VQLCAkLk9QVElPTiwgJC5QLCAkLlJCLCAkLlJQLCAkLlJULCAkLlJUQ10pO1xuY29uc3QgSU1QTElDSVRfRU5EX1RBR19SRVFVSVJFRF9USE9ST1VHSExZID0gbmV3IFNldChbXG4gICAgLi4uSU1QTElDSVRfRU5EX1RBR19SRVFVSVJFRCxcbiAgICAkLkNBUFRJT04sXG4gICAgJC5DT0xHUk9VUCxcbiAgICAkLlRCT0RZLFxuICAgICQuVEQsXG4gICAgJC5URk9PVCxcbiAgICAkLlRILFxuICAgICQuVEhFQUQsXG4gICAgJC5UUixcbl0pO1xuY29uc3QgU0NPUElOR19FTEVNRU5UU19IVE1MID0gbmV3IFNldChbXG4gICAgJC5BUFBMRVQsXG4gICAgJC5DQVBUSU9OLFxuICAgICQuSFRNTCxcbiAgICAkLk1BUlFVRUUsXG4gICAgJC5PQkpFQ1QsXG4gICAgJC5UQUJMRSxcbiAgICAkLlRELFxuICAgICQuVEVNUExBVEUsXG4gICAgJC5USCxcbl0pO1xuY29uc3QgU0NPUElOR19FTEVNRU5UU19IVE1MX0xJU1QgPSBuZXcgU2V0KFsuLi5TQ09QSU5HX0VMRU1FTlRTX0hUTUwsICQuT0wsICQuVUxdKTtcbmNvbnN0IFNDT1BJTkdfRUxFTUVOVFNfSFRNTF9CVVRUT04gPSBuZXcgU2V0KFsuLi5TQ09QSU5HX0VMRU1FTlRTX0hUTUwsICQuQlVUVE9OXSk7XG5jb25zdCBTQ09QSU5HX0VMRU1FTlRTX01BVEhNTCA9IG5ldyBTZXQoWyQuQU5OT1RBVElPTl9YTUwsICQuTUksICQuTU4sICQuTU8sICQuTVMsICQuTVRFWFRdKTtcbmNvbnN0IFNDT1BJTkdfRUxFTUVOVFNfU1ZHID0gbmV3IFNldChbJC5ERVNDLCAkLkZPUkVJR05fT0JKRUNULCAkLlRJVExFXSk7XG5jb25zdCBUQUJMRV9ST1dfQ09OVEVYVCA9IG5ldyBTZXQoWyQuVFIsICQuVEVNUExBVEUsICQuSFRNTF0pO1xuY29uc3QgVEFCTEVfQk9EWV9DT05URVhUID0gbmV3IFNldChbJC5UQk9EWSwgJC5URk9PVCwgJC5USEVBRCwgJC5URU1QTEFURSwgJC5IVE1MXSk7XG5jb25zdCBUQUJMRV9DT05URVhUID0gbmV3IFNldChbJC5UQUJMRSwgJC5URU1QTEFURSwgJC5IVE1MXSk7XG5jb25zdCBUQUJMRV9DRUxMUyA9IG5ldyBTZXQoWyQuVEQsICQuVEhdKTtcbi8vU3RhY2sgb2Ygb3BlbiBlbGVtZW50c1xuZXhwb3J0IGNsYXNzIE9wZW5FbGVtZW50U3RhY2sge1xuICAgIGdldCBjdXJyZW50VG1wbENvbnRlbnRPck5vZGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pc0luVGVtcGxhdGUoKSA/IHRoaXMudHJlZUFkYXB0ZXIuZ2V0VGVtcGxhdGVDb250ZW50KHRoaXMuY3VycmVudCkgOiB0aGlzLmN1cnJlbnQ7XG4gICAgfVxuICAgIGNvbnN0cnVjdG9yKGRvY3VtZW50LCB0cmVlQWRhcHRlciwgaGFuZGxlcikge1xuICAgICAgICB0aGlzLnRyZWVBZGFwdGVyID0gdHJlZUFkYXB0ZXI7XG4gICAgICAgIHRoaXMuaGFuZGxlciA9IGhhbmRsZXI7XG4gICAgICAgIHRoaXMuaXRlbXMgPSBbXTtcbiAgICAgICAgdGhpcy50YWdJRHMgPSBbXTtcbiAgICAgICAgdGhpcy5zdGFja1RvcCA9IC0xO1xuICAgICAgICB0aGlzLnRtcGxDb3VudCA9IDA7XG4gICAgICAgIHRoaXMuY3VycmVudFRhZ0lkID0gJC5VTktOT1dOO1xuICAgICAgICB0aGlzLmN1cnJlbnQgPSBkb2N1bWVudDtcbiAgICB9XG4gICAgLy9JbmRleCBvZiBlbGVtZW50XG4gICAgX2luZGV4T2YoZWxlbWVudCkge1xuICAgICAgICByZXR1cm4gdGhpcy5pdGVtcy5sYXN0SW5kZXhPZihlbGVtZW50LCB0aGlzLnN0YWNrVG9wKTtcbiAgICB9XG4gICAgLy9VcGRhdGUgY3VycmVudCBlbGVtZW50XG4gICAgX2lzSW5UZW1wbGF0ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY3VycmVudFRhZ0lkID09PSAkLlRFTVBMQVRFICYmIHRoaXMudHJlZUFkYXB0ZXIuZ2V0TmFtZXNwYWNlVVJJKHRoaXMuY3VycmVudCkgPT09IE5TLkhUTUw7XG4gICAgfVxuICAgIF91cGRhdGVDdXJyZW50RWxlbWVudCgpIHtcbiAgICAgICAgdGhpcy5jdXJyZW50ID0gdGhpcy5pdGVtc1t0aGlzLnN0YWNrVG9wXTtcbiAgICAgICAgdGhpcy5jdXJyZW50VGFnSWQgPSB0aGlzLnRhZ0lEc1t0aGlzLnN0YWNrVG9wXTtcbiAgICB9XG4gICAgLy9NdXRhdGlvbnNcbiAgICBwdXNoKGVsZW1lbnQsIHRhZ0lEKSB7XG4gICAgICAgIHRoaXMuc3RhY2tUb3ArKztcbiAgICAgICAgdGhpcy5pdGVtc1t0aGlzLnN0YWNrVG9wXSA9IGVsZW1lbnQ7XG4gICAgICAgIHRoaXMuY3VycmVudCA9IGVsZW1lbnQ7XG4gICAgICAgIHRoaXMudGFnSURzW3RoaXMuc3RhY2tUb3BdID0gdGFnSUQ7XG4gICAgICAgIHRoaXMuY3VycmVudFRhZ0lkID0gdGFnSUQ7XG4gICAgICAgIGlmICh0aGlzLl9pc0luVGVtcGxhdGUoKSkge1xuICAgICAgICAgICAgdGhpcy50bXBsQ291bnQrKztcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmhhbmRsZXIub25JdGVtUHVzaChlbGVtZW50LCB0YWdJRCwgdHJ1ZSk7XG4gICAgfVxuICAgIHBvcCgpIHtcbiAgICAgICAgY29uc3QgcG9wcGVkID0gdGhpcy5jdXJyZW50O1xuICAgICAgICBpZiAodGhpcy50bXBsQ291bnQgPiAwICYmIHRoaXMuX2lzSW5UZW1wbGF0ZSgpKSB7XG4gICAgICAgICAgICB0aGlzLnRtcGxDb3VudC0tO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc3RhY2tUb3AtLTtcbiAgICAgICAgdGhpcy5fdXBkYXRlQ3VycmVudEVsZW1lbnQoKTtcbiAgICAgICAgdGhpcy5oYW5kbGVyLm9uSXRlbVBvcChwb3BwZWQsIHRydWUpO1xuICAgIH1cbiAgICByZXBsYWNlKG9sZEVsZW1lbnQsIG5ld0VsZW1lbnQpIHtcbiAgICAgICAgY29uc3QgaWR4ID0gdGhpcy5faW5kZXhPZihvbGRFbGVtZW50KTtcbiAgICAgICAgdGhpcy5pdGVtc1tpZHhdID0gbmV3RWxlbWVudDtcbiAgICAgICAgaWYgKGlkeCA9PT0gdGhpcy5zdGFja1RvcCkge1xuICAgICAgICAgICAgdGhpcy5jdXJyZW50ID0gbmV3RWxlbWVudDtcbiAgICAgICAgfVxuICAgIH1cbiAgICBpbnNlcnRBZnRlcihyZWZlcmVuY2VFbGVtZW50LCBuZXdFbGVtZW50LCBuZXdFbGVtZW50SUQpIHtcbiAgICAgICAgY29uc3QgaW5zZXJ0aW9uSWR4ID0gdGhpcy5faW5kZXhPZihyZWZlcmVuY2VFbGVtZW50KSArIDE7XG4gICAgICAgIHRoaXMuaXRlbXMuc3BsaWNlKGluc2VydGlvbklkeCwgMCwgbmV3RWxlbWVudCk7XG4gICAgICAgIHRoaXMudGFnSURzLnNwbGljZShpbnNlcnRpb25JZHgsIDAsIG5ld0VsZW1lbnRJRCk7XG4gICAgICAgIHRoaXMuc3RhY2tUb3ArKztcbiAgICAgICAgaWYgKGluc2VydGlvbklkeCA9PT0gdGhpcy5zdGFja1RvcCkge1xuICAgICAgICAgICAgdGhpcy5fdXBkYXRlQ3VycmVudEVsZW1lbnQoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmhhbmRsZXIub25JdGVtUHVzaCh0aGlzLmN1cnJlbnQsIHRoaXMuY3VycmVudFRhZ0lkLCBpbnNlcnRpb25JZHggPT09IHRoaXMuc3RhY2tUb3ApO1xuICAgIH1cbiAgICBwb3BVbnRpbFRhZ05hbWVQb3BwZWQodGFnTmFtZSkge1xuICAgICAgICBsZXQgdGFyZ2V0SWR4ID0gdGhpcy5zdGFja1RvcCArIDE7XG4gICAgICAgIGRvIHtcbiAgICAgICAgICAgIHRhcmdldElkeCA9IHRoaXMudGFnSURzLmxhc3RJbmRleE9mKHRhZ05hbWUsIHRhcmdldElkeCAtIDEpO1xuICAgICAgICB9IHdoaWxlICh0YXJnZXRJZHggPiAwICYmIHRoaXMudHJlZUFkYXB0ZXIuZ2V0TmFtZXNwYWNlVVJJKHRoaXMuaXRlbXNbdGFyZ2V0SWR4XSkgIT09IE5TLkhUTUwpO1xuICAgICAgICB0aGlzLnNob3J0ZW5Ub0xlbmd0aCh0YXJnZXRJZHggPCAwID8gMCA6IHRhcmdldElkeCk7XG4gICAgfVxuICAgIHNob3J0ZW5Ub0xlbmd0aChpZHgpIHtcbiAgICAgICAgd2hpbGUgKHRoaXMuc3RhY2tUb3AgPj0gaWR4KSB7XG4gICAgICAgICAgICBjb25zdCBwb3BwZWQgPSB0aGlzLmN1cnJlbnQ7XG4gICAgICAgICAgICBpZiAodGhpcy50bXBsQ291bnQgPiAwICYmIHRoaXMuX2lzSW5UZW1wbGF0ZSgpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy50bXBsQ291bnQgLT0gMTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuc3RhY2tUb3AtLTtcbiAgICAgICAgICAgIHRoaXMuX3VwZGF0ZUN1cnJlbnRFbGVtZW50KCk7XG4gICAgICAgICAgICB0aGlzLmhhbmRsZXIub25JdGVtUG9wKHBvcHBlZCwgdGhpcy5zdGFja1RvcCA8IGlkeCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcG9wVW50aWxFbGVtZW50UG9wcGVkKGVsZW1lbnQpIHtcbiAgICAgICAgY29uc3QgaWR4ID0gdGhpcy5faW5kZXhPZihlbGVtZW50KTtcbiAgICAgICAgdGhpcy5zaG9ydGVuVG9MZW5ndGgoaWR4IDwgMCA/IDAgOiBpZHgpO1xuICAgIH1cbiAgICBwb3BVbnRpbFBvcHBlZCh0YWdOYW1lcywgdGFyZ2V0TlMpIHtcbiAgICAgICAgY29uc3QgaWR4ID0gdGhpcy5faW5kZXhPZlRhZ05hbWVzKHRhZ05hbWVzLCB0YXJnZXROUyk7XG4gICAgICAgIHRoaXMuc2hvcnRlblRvTGVuZ3RoKGlkeCA8IDAgPyAwIDogaWR4KTtcbiAgICB9XG4gICAgcG9wVW50aWxOdW1iZXJlZEhlYWRlclBvcHBlZCgpIHtcbiAgICAgICAgdGhpcy5wb3BVbnRpbFBvcHBlZChOVU1CRVJFRF9IRUFERVJTLCBOUy5IVE1MKTtcbiAgICB9XG4gICAgcG9wVW50aWxUYWJsZUNlbGxQb3BwZWQoKSB7XG4gICAgICAgIHRoaXMucG9wVW50aWxQb3BwZWQoVEFCTEVfQ0VMTFMsIE5TLkhUTUwpO1xuICAgIH1cbiAgICBwb3BBbGxVcFRvSHRtbEVsZW1lbnQoKSB7XG4gICAgICAgIC8vTk9URTogaGVyZSB3ZSBhc3N1bWUgdGhhdCB0aGUgcm9vdCA8aHRtbD4gZWxlbWVudCBpcyBhbHdheXMgZmlyc3QgaW4gdGhlIG9wZW4gZWxlbWVudCBzdGFjaywgc29cbiAgICAgICAgLy93ZSBwZXJmb3JtIHRoaXMgZmFzdCBzdGFjayBjbGVhbiB1cC5cbiAgICAgICAgdGhpcy50bXBsQ291bnQgPSAwO1xuICAgICAgICB0aGlzLnNob3J0ZW5Ub0xlbmd0aCgxKTtcbiAgICB9XG4gICAgX2luZGV4T2ZUYWdOYW1lcyh0YWdOYW1lcywgbmFtZXNwYWNlKSB7XG4gICAgICAgIGZvciAobGV0IGkgPSB0aGlzLnN0YWNrVG9wOyBpID49IDA7IGktLSkge1xuICAgICAgICAgICAgaWYgKHRhZ05hbWVzLmhhcyh0aGlzLnRhZ0lEc1tpXSkgJiYgdGhpcy50cmVlQWRhcHRlci5nZXROYW1lc3BhY2VVUkkodGhpcy5pdGVtc1tpXSkgPT09IG5hbWVzcGFjZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiAtMTtcbiAgICB9XG4gICAgY2xlYXJCYWNrVG8odGFnTmFtZXMsIHRhcmdldE5TKSB7XG4gICAgICAgIGNvbnN0IGlkeCA9IHRoaXMuX2luZGV4T2ZUYWdOYW1lcyh0YWdOYW1lcywgdGFyZ2V0TlMpO1xuICAgICAgICB0aGlzLnNob3J0ZW5Ub0xlbmd0aChpZHggKyAxKTtcbiAgICB9XG4gICAgY2xlYXJCYWNrVG9UYWJsZUNvbnRleHQoKSB7XG4gICAgICAgIHRoaXMuY2xlYXJCYWNrVG8oVEFCTEVfQ09OVEVYVCwgTlMuSFRNTCk7XG4gICAgfVxuICAgIGNsZWFyQmFja1RvVGFibGVCb2R5Q29udGV4dCgpIHtcbiAgICAgICAgdGhpcy5jbGVhckJhY2tUbyhUQUJMRV9CT0RZX0NPTlRFWFQsIE5TLkhUTUwpO1xuICAgIH1cbiAgICBjbGVhckJhY2tUb1RhYmxlUm93Q29udGV4dCgpIHtcbiAgICAgICAgdGhpcy5jbGVhckJhY2tUbyhUQUJMRV9ST1dfQ09OVEVYVCwgTlMuSFRNTCk7XG4gICAgfVxuICAgIHJlbW92ZShlbGVtZW50KSB7XG4gICAgICAgIGNvbnN0IGlkeCA9IHRoaXMuX2luZGV4T2YoZWxlbWVudCk7XG4gICAgICAgIGlmIChpZHggPj0gMCkge1xuICAgICAgICAgICAgaWYgKGlkeCA9PT0gdGhpcy5zdGFja1RvcCkge1xuICAgICAgICAgICAgICAgIHRoaXMucG9wKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLml0ZW1zLnNwbGljZShpZHgsIDEpO1xuICAgICAgICAgICAgICAgIHRoaXMudGFnSURzLnNwbGljZShpZHgsIDEpO1xuICAgICAgICAgICAgICAgIHRoaXMuc3RhY2tUb3AtLTtcbiAgICAgICAgICAgICAgICB0aGlzLl91cGRhdGVDdXJyZW50RWxlbWVudCgpO1xuICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlci5vbkl0ZW1Qb3AoZWxlbWVudCwgZmFsc2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIC8vU2VhcmNoXG4gICAgdHJ5UGVla1Byb3Blcmx5TmVzdGVkQm9keUVsZW1lbnQoKSB7XG4gICAgICAgIC8vUHJvcGVybHkgbmVzdGVkIDxib2R5PiBlbGVtZW50IChzaG91bGQgYmUgc2Vjb25kIGVsZW1lbnQgaW4gc3RhY2spLlxuICAgICAgICByZXR1cm4gdGhpcy5zdGFja1RvcCA+PSAxICYmIHRoaXMudGFnSURzWzFdID09PSAkLkJPRFkgPyB0aGlzLml0ZW1zWzFdIDogbnVsbDtcbiAgICB9XG4gICAgY29udGFpbnMoZWxlbWVudCkge1xuICAgICAgICByZXR1cm4gdGhpcy5faW5kZXhPZihlbGVtZW50KSA+IC0xO1xuICAgIH1cbiAgICBnZXRDb21tb25BbmNlc3RvcihlbGVtZW50KSB7XG4gICAgICAgIGNvbnN0IGVsZW1lbnRJZHggPSB0aGlzLl9pbmRleE9mKGVsZW1lbnQpIC0gMTtcbiAgICAgICAgcmV0dXJuIGVsZW1lbnRJZHggPj0gMCA/IHRoaXMuaXRlbXNbZWxlbWVudElkeF0gOiBudWxsO1xuICAgIH1cbiAgICBpc1Jvb3RIdG1sRWxlbWVudEN1cnJlbnQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnN0YWNrVG9wID09PSAwICYmIHRoaXMudGFnSURzWzBdID09PSAkLkhUTUw7XG4gICAgfVxuICAgIC8vRWxlbWVudCBpbiBzY29wZVxuICAgIGhhc0luRHluYW1pY1Njb3BlKHRhZ05hbWUsIGh0bWxTY29wZSkge1xuICAgICAgICBmb3IgKGxldCBpID0gdGhpcy5zdGFja1RvcDsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgICAgIGNvbnN0IHRuID0gdGhpcy50YWdJRHNbaV07XG4gICAgICAgICAgICBzd2l0Y2ggKHRoaXMudHJlZUFkYXB0ZXIuZ2V0TmFtZXNwYWNlVVJJKHRoaXMuaXRlbXNbaV0pKSB7XG4gICAgICAgICAgICAgICAgY2FzZSBOUy5IVE1MOiB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0biA9PT0gdGFnTmFtZSlcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBpZiAoaHRtbFNjb3BlLmhhcyh0bikpXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXNlIE5TLlNWRzoge1xuICAgICAgICAgICAgICAgICAgICBpZiAoU0NPUElOR19FTEVNRU5UU19TVkcuaGFzKHRuKSlcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhc2UgTlMuTUFUSE1MOiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChTQ09QSU5HX0VMRU1FTlRTX01BVEhNTC5oYXModG4pKVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGhhc0luU2NvcGUodGFnTmFtZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5oYXNJbkR5bmFtaWNTY29wZSh0YWdOYW1lLCBTQ09QSU5HX0VMRU1FTlRTX0hUTUwpO1xuICAgIH1cbiAgICBoYXNJbkxpc3RJdGVtU2NvcGUodGFnTmFtZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5oYXNJbkR5bmFtaWNTY29wZSh0YWdOYW1lLCBTQ09QSU5HX0VMRU1FTlRTX0hUTUxfTElTVCk7XG4gICAgfVxuICAgIGhhc0luQnV0dG9uU2NvcGUodGFnTmFtZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5oYXNJbkR5bmFtaWNTY29wZSh0YWdOYW1lLCBTQ09QSU5HX0VMRU1FTlRTX0hUTUxfQlVUVE9OKTtcbiAgICB9XG4gICAgaGFzTnVtYmVyZWRIZWFkZXJJblNjb3BlKCkge1xuICAgICAgICBmb3IgKGxldCBpID0gdGhpcy5zdGFja1RvcDsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgICAgIGNvbnN0IHRuID0gdGhpcy50YWdJRHNbaV07XG4gICAgICAgICAgICBzd2l0Y2ggKHRoaXMudHJlZUFkYXB0ZXIuZ2V0TmFtZXNwYWNlVVJJKHRoaXMuaXRlbXNbaV0pKSB7XG4gICAgICAgICAgICAgICAgY2FzZSBOUy5IVE1MOiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChOVU1CRVJFRF9IRUFERVJTLmhhcyh0bikpXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKFNDT1BJTkdfRUxFTUVOVFNfSFRNTC5oYXModG4pKVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FzZSBOUy5TVkc6IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKFNDT1BJTkdfRUxFTUVOVFNfU1ZHLmhhcyh0bikpXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXNlIE5TLk1BVEhNTDoge1xuICAgICAgICAgICAgICAgICAgICBpZiAoU0NPUElOR19FTEVNRU5UU19NQVRITUwuaGFzKHRuKSlcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBoYXNJblRhYmxlU2NvcGUodGFnTmFtZSkge1xuICAgICAgICBmb3IgKGxldCBpID0gdGhpcy5zdGFja1RvcDsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnRyZWVBZGFwdGVyLmdldE5hbWVzcGFjZVVSSSh0aGlzLml0ZW1zW2ldKSAhPT0gTlMuSFRNTCkge1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc3dpdGNoICh0aGlzLnRhZ0lEc1tpXSkge1xuICAgICAgICAgICAgICAgIGNhc2UgdGFnTmFtZToge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FzZSAkLlRBQkxFOlxuICAgICAgICAgICAgICAgIGNhc2UgJC5IVE1MOiB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGhhc1RhYmxlQm9keUNvbnRleHRJblRhYmxlU2NvcGUoKSB7XG4gICAgICAgIGZvciAobGV0IGkgPSB0aGlzLnN0YWNrVG9wOyBpID49IDA7IGktLSkge1xuICAgICAgICAgICAgaWYgKHRoaXMudHJlZUFkYXB0ZXIuZ2V0TmFtZXNwYWNlVVJJKHRoaXMuaXRlbXNbaV0pICE9PSBOUy5IVE1MKSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzd2l0Y2ggKHRoaXMudGFnSURzW2ldKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAkLlRCT0RZOlxuICAgICAgICAgICAgICAgIGNhc2UgJC5USEVBRDpcbiAgICAgICAgICAgICAgICBjYXNlICQuVEZPT1Q6IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhc2UgJC5UQUJMRTpcbiAgICAgICAgICAgICAgICBjYXNlICQuSFRNTDoge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBoYXNJblNlbGVjdFNjb3BlKHRhZ05hbWUpIHtcbiAgICAgICAgZm9yIChsZXQgaSA9IHRoaXMuc3RhY2tUb3A7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgICAgICBpZiAodGhpcy50cmVlQWRhcHRlci5nZXROYW1lc3BhY2VVUkkodGhpcy5pdGVtc1tpXSkgIT09IE5TLkhUTUwpIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHN3aXRjaCAodGhpcy50YWdJRHNbaV0pIHtcbiAgICAgICAgICAgICAgICBjYXNlIHRhZ05hbWU6IHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhc2UgJC5PUFRJT046XG4gICAgICAgICAgICAgICAgY2FzZSAkLk9QVEdST1VQOiB7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIC8vSW1wbGllZCBlbmQgdGFnc1xuICAgIGdlbmVyYXRlSW1wbGllZEVuZFRhZ3MoKSB7XG4gICAgICAgIHdoaWxlIChJTVBMSUNJVF9FTkRfVEFHX1JFUVVJUkVELmhhcyh0aGlzLmN1cnJlbnRUYWdJZCkpIHtcbiAgICAgICAgICAgIHRoaXMucG9wKCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZ2VuZXJhdGVJbXBsaWVkRW5kVGFnc1Rob3JvdWdobHkoKSB7XG4gICAgICAgIHdoaWxlIChJTVBMSUNJVF9FTkRfVEFHX1JFUVVJUkVEX1RIT1JPVUdITFkuaGFzKHRoaXMuY3VycmVudFRhZ0lkKSkge1xuICAgICAgICAgICAgdGhpcy5wb3AoKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBnZW5lcmF0ZUltcGxpZWRFbmRUYWdzV2l0aEV4Y2x1c2lvbihleGNsdXNpb25JZCkge1xuICAgICAgICB3aGlsZSAodGhpcy5jdXJyZW50VGFnSWQgIT09IGV4Y2x1c2lvbklkICYmIElNUExJQ0lUX0VORF9UQUdfUkVRVUlSRURfVEhPUk9VR0hMWS5oYXModGhpcy5jdXJyZW50VGFnSWQpKSB7XG4gICAgICAgICAgICB0aGlzLnBvcCgpO1xuICAgICAgICB9XG4gICAgfVxufVxuIiwgIi8vQ29uc3RcbmNvbnN0IE5PQUhfQVJLX0NBUEFDSVRZID0gMztcbmV4cG9ydCB2YXIgRW50cnlUeXBlO1xuKGZ1bmN0aW9uIChFbnRyeVR5cGUpIHtcbiAgICBFbnRyeVR5cGVbRW50cnlUeXBlW1wiTWFya2VyXCJdID0gMF0gPSBcIk1hcmtlclwiO1xuICAgIEVudHJ5VHlwZVtFbnRyeVR5cGVbXCJFbGVtZW50XCJdID0gMV0gPSBcIkVsZW1lbnRcIjtcbn0pKEVudHJ5VHlwZSB8fCAoRW50cnlUeXBlID0ge30pKTtcbmNvbnN0IE1BUktFUiA9IHsgdHlwZTogRW50cnlUeXBlLk1hcmtlciB9O1xuLy9MaXN0IG9mIGZvcm1hdHRpbmcgZWxlbWVudHNcbmV4cG9ydCBjbGFzcyBGb3JtYXR0aW5nRWxlbWVudExpc3Qge1xuICAgIGNvbnN0cnVjdG9yKHRyZWVBZGFwdGVyKSB7XG4gICAgICAgIHRoaXMudHJlZUFkYXB0ZXIgPSB0cmVlQWRhcHRlcjtcbiAgICAgICAgdGhpcy5lbnRyaWVzID0gW107XG4gICAgICAgIHRoaXMuYm9va21hcmsgPSBudWxsO1xuICAgIH1cbiAgICAvL05vYWggQXJrJ3MgY29uZGl0aW9uXG4gICAgLy9PUFRJTUlaQVRJT046IGF0IGZpcnN0IHdlIHRyeSB0byBmaW5kIHBvc3NpYmxlIGNhbmRpZGF0ZXMgZm9yIGV4Y2x1c2lvbiB1c2luZ1xuICAgIC8vbGlnaHR3ZWlnaHQgaGV1cmlzdGljcyB3aXRob3V0IHRob3JvdWdoIGF0dHJpYnV0ZXMgY2hlY2suXG4gICAgX2dldE5vYWhBcmtDb25kaXRpb25DYW5kaWRhdGVzKG5ld0VsZW1lbnQsIG5lQXR0cnMpIHtcbiAgICAgICAgY29uc3QgY2FuZGlkYXRlcyA9IFtdO1xuICAgICAgICBjb25zdCBuZUF0dHJzTGVuZ3RoID0gbmVBdHRycy5sZW5ndGg7XG4gICAgICAgIGNvbnN0IG5lVGFnTmFtZSA9IHRoaXMudHJlZUFkYXB0ZXIuZ2V0VGFnTmFtZShuZXdFbGVtZW50KTtcbiAgICAgICAgY29uc3QgbmVOYW1lc3BhY2VVUkkgPSB0aGlzLnRyZWVBZGFwdGVyLmdldE5hbWVzcGFjZVVSSShuZXdFbGVtZW50KTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLmVudHJpZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGVudHJ5ID0gdGhpcy5lbnRyaWVzW2ldO1xuICAgICAgICAgICAgaWYgKGVudHJ5LnR5cGUgPT09IEVudHJ5VHlwZS5NYXJrZXIpIHtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHsgZWxlbWVudCB9ID0gZW50cnk7XG4gICAgICAgICAgICBpZiAodGhpcy50cmVlQWRhcHRlci5nZXRUYWdOYW1lKGVsZW1lbnQpID09PSBuZVRhZ05hbWUgJiZcbiAgICAgICAgICAgICAgICB0aGlzLnRyZWVBZGFwdGVyLmdldE5hbWVzcGFjZVVSSShlbGVtZW50KSA9PT0gbmVOYW1lc3BhY2VVUkkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBlbGVtZW50QXR0cnMgPSB0aGlzLnRyZWVBZGFwdGVyLmdldEF0dHJMaXN0KGVsZW1lbnQpO1xuICAgICAgICAgICAgICAgIGlmIChlbGVtZW50QXR0cnMubGVuZ3RoID09PSBuZUF0dHJzTGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhbmRpZGF0ZXMucHVzaCh7IGlkeDogaSwgYXR0cnM6IGVsZW1lbnRBdHRycyB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNhbmRpZGF0ZXM7XG4gICAgfVxuICAgIF9lbnN1cmVOb2FoQXJrQ29uZGl0aW9uKG5ld0VsZW1lbnQpIHtcbiAgICAgICAgaWYgKHRoaXMuZW50cmllcy5sZW5ndGggPCBOT0FIX0FSS19DQVBBQ0lUWSlcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgY29uc3QgbmVBdHRycyA9IHRoaXMudHJlZUFkYXB0ZXIuZ2V0QXR0ckxpc3QobmV3RWxlbWVudCk7XG4gICAgICAgIGNvbnN0IGNhbmRpZGF0ZXMgPSB0aGlzLl9nZXROb2FoQXJrQ29uZGl0aW9uQ2FuZGlkYXRlcyhuZXdFbGVtZW50LCBuZUF0dHJzKTtcbiAgICAgICAgaWYgKGNhbmRpZGF0ZXMubGVuZ3RoIDwgTk9BSF9BUktfQ0FQQUNJVFkpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIC8vTk9URTogYnVpbGQgYXR0cnMgbWFwIGZvciB0aGUgbmV3IGVsZW1lbnQsIHNvIHdlIGNhbiBwZXJmb3JtIGZhc3QgbG9va3Vwc1xuICAgICAgICBjb25zdCBuZUF0dHJzTWFwID0gbmV3IE1hcChuZUF0dHJzLm1hcCgobmVBdHRyKSA9PiBbbmVBdHRyLm5hbWUsIG5lQXR0ci52YWx1ZV0pKTtcbiAgICAgICAgbGV0IHZhbGlkQ2FuZGlkYXRlcyA9IDA7XG4gICAgICAgIC8vTk9URTogcmVtb3ZlIGJvdHRvbW1vc3QgY2FuZGlkYXRlcywgdW50aWwgTm9haCdzIEFyayBjb25kaXRpb24gd2lsbCBub3QgYmUgbWV0XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY2FuZGlkYXRlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3QgY2FuZGlkYXRlID0gY2FuZGlkYXRlc1tpXTtcbiAgICAgICAgICAgIC8vIFdlIGtub3cgdGhhdCBgY2FuZGlkYXRlLmF0dHJzLmxlbmd0aCA9PT0gbmVBdHRycy5sZW5ndGhgXG4gICAgICAgICAgICBpZiAoY2FuZGlkYXRlLmF0dHJzLmV2ZXJ5KChjQXR0cikgPT4gbmVBdHRyc01hcC5nZXQoY0F0dHIubmFtZSkgPT09IGNBdHRyLnZhbHVlKSkge1xuICAgICAgICAgICAgICAgIHZhbGlkQ2FuZGlkYXRlcyArPSAxO1xuICAgICAgICAgICAgICAgIGlmICh2YWxpZENhbmRpZGF0ZXMgPj0gTk9BSF9BUktfQ0FQQUNJVFkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5lbnRyaWVzLnNwbGljZShjYW5kaWRhdGUuaWR4LCAxKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy9NdXRhdGlvbnNcbiAgICBpbnNlcnRNYXJrZXIoKSB7XG4gICAgICAgIHRoaXMuZW50cmllcy51bnNoaWZ0KE1BUktFUik7XG4gICAgfVxuICAgIHB1c2hFbGVtZW50KGVsZW1lbnQsIHRva2VuKSB7XG4gICAgICAgIHRoaXMuX2Vuc3VyZU5vYWhBcmtDb25kaXRpb24oZWxlbWVudCk7XG4gICAgICAgIHRoaXMuZW50cmllcy51bnNoaWZ0KHtcbiAgICAgICAgICAgIHR5cGU6IEVudHJ5VHlwZS5FbGVtZW50LFxuICAgICAgICAgICAgZWxlbWVudCxcbiAgICAgICAgICAgIHRva2VuLFxuICAgICAgICB9KTtcbiAgICB9XG4gICAgaW5zZXJ0RWxlbWVudEFmdGVyQm9va21hcmsoZWxlbWVudCwgdG9rZW4pIHtcbiAgICAgICAgY29uc3QgYm9va21hcmtJZHggPSB0aGlzLmVudHJpZXMuaW5kZXhPZih0aGlzLmJvb2ttYXJrKTtcbiAgICAgICAgdGhpcy5lbnRyaWVzLnNwbGljZShib29rbWFya0lkeCwgMCwge1xuICAgICAgICAgICAgdHlwZTogRW50cnlUeXBlLkVsZW1lbnQsXG4gICAgICAgICAgICBlbGVtZW50LFxuICAgICAgICAgICAgdG9rZW4sXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICByZW1vdmVFbnRyeShlbnRyeSkge1xuICAgICAgICBjb25zdCBlbnRyeUluZGV4ID0gdGhpcy5lbnRyaWVzLmluZGV4T2YoZW50cnkpO1xuICAgICAgICBpZiAoZW50cnlJbmRleCA+PSAwKSB7XG4gICAgICAgICAgICB0aGlzLmVudHJpZXMuc3BsaWNlKGVudHJ5SW5kZXgsIDEpO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKlxuICAgICAqIENsZWFycyB0aGUgbGlzdCBvZiBmb3JtYXR0aW5nIGVsZW1lbnRzIHVwIHRvIHRoZSBsYXN0IG1hcmtlci5cbiAgICAgKlxuICAgICAqIEBzZWUgaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2UvcGFyc2luZy5odG1sI2NsZWFyLXRoZS1saXN0LW9mLWFjdGl2ZS1mb3JtYXR0aW5nLWVsZW1lbnRzLXVwLXRvLXRoZS1sYXN0LW1hcmtlclxuICAgICAqL1xuICAgIGNsZWFyVG9MYXN0TWFya2VyKCkge1xuICAgICAgICBjb25zdCBtYXJrZXJJZHggPSB0aGlzLmVudHJpZXMuaW5kZXhPZihNQVJLRVIpO1xuICAgICAgICBpZiAobWFya2VySWR4ID49IDApIHtcbiAgICAgICAgICAgIHRoaXMuZW50cmllcy5zcGxpY2UoMCwgbWFya2VySWR4ICsgMSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmVudHJpZXMubGVuZ3RoID0gMDtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvL1NlYXJjaFxuICAgIGdldEVsZW1lbnRFbnRyeUluU2NvcGVXaXRoVGFnTmFtZSh0YWdOYW1lKSB7XG4gICAgICAgIGNvbnN0IGVudHJ5ID0gdGhpcy5lbnRyaWVzLmZpbmQoKGVudHJ5KSA9PiBlbnRyeS50eXBlID09PSBFbnRyeVR5cGUuTWFya2VyIHx8IHRoaXMudHJlZUFkYXB0ZXIuZ2V0VGFnTmFtZShlbnRyeS5lbGVtZW50KSA9PT0gdGFnTmFtZSk7XG4gICAgICAgIHJldHVybiBlbnRyeSAmJiBlbnRyeS50eXBlID09PSBFbnRyeVR5cGUuRWxlbWVudCA/IGVudHJ5IDogbnVsbDtcbiAgICB9XG4gICAgZ2V0RWxlbWVudEVudHJ5KGVsZW1lbnQpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZW50cmllcy5maW5kKChlbnRyeSkgPT4gZW50cnkudHlwZSA9PT0gRW50cnlUeXBlLkVsZW1lbnQgJiYgZW50cnkuZWxlbWVudCA9PT0gZWxlbWVudCk7XG4gICAgfVxufVxuIiwgImltcG9ydCB7IERPQ1VNRU5UX01PREUgfSBmcm9tICcuLi9jb21tb24vaHRtbC5qcyc7XG5leHBvcnQgY29uc3QgZGVmYXVsdFRyZWVBZGFwdGVyID0ge1xuICAgIC8vTm9kZSBjb25zdHJ1Y3Rpb25cbiAgICBjcmVhdGVEb2N1bWVudCgpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIG5vZGVOYW1lOiAnI2RvY3VtZW50JyxcbiAgICAgICAgICAgIG1vZGU6IERPQ1VNRU5UX01PREUuTk9fUVVJUktTLFxuICAgICAgICAgICAgY2hpbGROb2RlczogW10sXG4gICAgICAgIH07XG4gICAgfSxcbiAgICBjcmVhdGVEb2N1bWVudEZyYWdtZW50KCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgbm9kZU5hbWU6ICcjZG9jdW1lbnQtZnJhZ21lbnQnLFxuICAgICAgICAgICAgY2hpbGROb2RlczogW10sXG4gICAgICAgIH07XG4gICAgfSxcbiAgICBjcmVhdGVFbGVtZW50KHRhZ05hbWUsIG5hbWVzcGFjZVVSSSwgYXR0cnMpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIG5vZGVOYW1lOiB0YWdOYW1lLFxuICAgICAgICAgICAgdGFnTmFtZSxcbiAgICAgICAgICAgIGF0dHJzLFxuICAgICAgICAgICAgbmFtZXNwYWNlVVJJLFxuICAgICAgICAgICAgY2hpbGROb2RlczogW10sXG4gICAgICAgICAgICBwYXJlbnROb2RlOiBudWxsLFxuICAgICAgICB9O1xuICAgIH0sXG4gICAgY3JlYXRlQ29tbWVudE5vZGUoZGF0YSkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgbm9kZU5hbWU6ICcjY29tbWVudCcsXG4gICAgICAgICAgICBkYXRhLFxuICAgICAgICAgICAgcGFyZW50Tm9kZTogbnVsbCxcbiAgICAgICAgfTtcbiAgICB9LFxuICAgIGNyZWF0ZVRleHROb2RlKHZhbHVlKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBub2RlTmFtZTogJyN0ZXh0JyxcbiAgICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgICAgcGFyZW50Tm9kZTogbnVsbCxcbiAgICAgICAgfTtcbiAgICB9LFxuICAgIC8vVHJlZSBtdXRhdGlvblxuICAgIGFwcGVuZENoaWxkKHBhcmVudE5vZGUsIG5ld05vZGUpIHtcbiAgICAgICAgcGFyZW50Tm9kZS5jaGlsZE5vZGVzLnB1c2gobmV3Tm9kZSk7XG4gICAgICAgIG5ld05vZGUucGFyZW50Tm9kZSA9IHBhcmVudE5vZGU7XG4gICAgfSxcbiAgICBpbnNlcnRCZWZvcmUocGFyZW50Tm9kZSwgbmV3Tm9kZSwgcmVmZXJlbmNlTm9kZSkge1xuICAgICAgICBjb25zdCBpbnNlcnRpb25JZHggPSBwYXJlbnROb2RlLmNoaWxkTm9kZXMuaW5kZXhPZihyZWZlcmVuY2VOb2RlKTtcbiAgICAgICAgcGFyZW50Tm9kZS5jaGlsZE5vZGVzLnNwbGljZShpbnNlcnRpb25JZHgsIDAsIG5ld05vZGUpO1xuICAgICAgICBuZXdOb2RlLnBhcmVudE5vZGUgPSBwYXJlbnROb2RlO1xuICAgIH0sXG4gICAgc2V0VGVtcGxhdGVDb250ZW50KHRlbXBsYXRlRWxlbWVudCwgY29udGVudEVsZW1lbnQpIHtcbiAgICAgICAgdGVtcGxhdGVFbGVtZW50LmNvbnRlbnQgPSBjb250ZW50RWxlbWVudDtcbiAgICB9LFxuICAgIGdldFRlbXBsYXRlQ29udGVudCh0ZW1wbGF0ZUVsZW1lbnQpIHtcbiAgICAgICAgcmV0dXJuIHRlbXBsYXRlRWxlbWVudC5jb250ZW50O1xuICAgIH0sXG4gICAgc2V0RG9jdW1lbnRUeXBlKGRvY3VtZW50LCBuYW1lLCBwdWJsaWNJZCwgc3lzdGVtSWQpIHtcbiAgICAgICAgY29uc3QgZG9jdHlwZU5vZGUgPSBkb2N1bWVudC5jaGlsZE5vZGVzLmZpbmQoKG5vZGUpID0+IG5vZGUubm9kZU5hbWUgPT09ICcjZG9jdW1lbnRUeXBlJyk7XG4gICAgICAgIGlmIChkb2N0eXBlTm9kZSkge1xuICAgICAgICAgICAgZG9jdHlwZU5vZGUubmFtZSA9IG5hbWU7XG4gICAgICAgICAgICBkb2N0eXBlTm9kZS5wdWJsaWNJZCA9IHB1YmxpY0lkO1xuICAgICAgICAgICAgZG9jdHlwZU5vZGUuc3lzdGVtSWQgPSBzeXN0ZW1JZDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IG5vZGUgPSB7XG4gICAgICAgICAgICAgICAgbm9kZU5hbWU6ICcjZG9jdW1lbnRUeXBlJyxcbiAgICAgICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgICAgIHB1YmxpY0lkLFxuICAgICAgICAgICAgICAgIHN5c3RlbUlkLFxuICAgICAgICAgICAgICAgIHBhcmVudE5vZGU6IG51bGwsXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgZGVmYXVsdFRyZWVBZGFwdGVyLmFwcGVuZENoaWxkKGRvY3VtZW50LCBub2RlKTtcbiAgICAgICAgfVxuICAgIH0sXG4gICAgc2V0RG9jdW1lbnRNb2RlKGRvY3VtZW50LCBtb2RlKSB7XG4gICAgICAgIGRvY3VtZW50Lm1vZGUgPSBtb2RlO1xuICAgIH0sXG4gICAgZ2V0RG9jdW1lbnRNb2RlKGRvY3VtZW50KSB7XG4gICAgICAgIHJldHVybiBkb2N1bWVudC5tb2RlO1xuICAgIH0sXG4gICAgZGV0YWNoTm9kZShub2RlKSB7XG4gICAgICAgIGlmIChub2RlLnBhcmVudE5vZGUpIHtcbiAgICAgICAgICAgIGNvbnN0IGlkeCA9IG5vZGUucGFyZW50Tm9kZS5jaGlsZE5vZGVzLmluZGV4T2Yobm9kZSk7XG4gICAgICAgICAgICBub2RlLnBhcmVudE5vZGUuY2hpbGROb2Rlcy5zcGxpY2UoaWR4LCAxKTtcbiAgICAgICAgICAgIG5vZGUucGFyZW50Tm9kZSA9IG51bGw7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIGluc2VydFRleHQocGFyZW50Tm9kZSwgdGV4dCkge1xuICAgICAgICBpZiAocGFyZW50Tm9kZS5jaGlsZE5vZGVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIGNvbnN0IHByZXZOb2RlID0gcGFyZW50Tm9kZS5jaGlsZE5vZGVzW3BhcmVudE5vZGUuY2hpbGROb2Rlcy5sZW5ndGggLSAxXTtcbiAgICAgICAgICAgIGlmIChkZWZhdWx0VHJlZUFkYXB0ZXIuaXNUZXh0Tm9kZShwcmV2Tm9kZSkpIHtcbiAgICAgICAgICAgICAgICBwcmV2Tm9kZS52YWx1ZSArPSB0ZXh0O1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBkZWZhdWx0VHJlZUFkYXB0ZXIuYXBwZW5kQ2hpbGQocGFyZW50Tm9kZSwgZGVmYXVsdFRyZWVBZGFwdGVyLmNyZWF0ZVRleHROb2RlKHRleHQpKTtcbiAgICB9LFxuICAgIGluc2VydFRleHRCZWZvcmUocGFyZW50Tm9kZSwgdGV4dCwgcmVmZXJlbmNlTm9kZSkge1xuICAgICAgICBjb25zdCBwcmV2Tm9kZSA9IHBhcmVudE5vZGUuY2hpbGROb2Rlc1twYXJlbnROb2RlLmNoaWxkTm9kZXMuaW5kZXhPZihyZWZlcmVuY2VOb2RlKSAtIDFdO1xuICAgICAgICBpZiAocHJldk5vZGUgJiYgZGVmYXVsdFRyZWVBZGFwdGVyLmlzVGV4dE5vZGUocHJldk5vZGUpKSB7XG4gICAgICAgICAgICBwcmV2Tm9kZS52YWx1ZSArPSB0ZXh0O1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgZGVmYXVsdFRyZWVBZGFwdGVyLmluc2VydEJlZm9yZShwYXJlbnROb2RlLCBkZWZhdWx0VHJlZUFkYXB0ZXIuY3JlYXRlVGV4dE5vZGUodGV4dCksIHJlZmVyZW5jZU5vZGUpO1xuICAgICAgICB9XG4gICAgfSxcbiAgICBhZG9wdEF0dHJpYnV0ZXMocmVjaXBpZW50LCBhdHRycykge1xuICAgICAgICBjb25zdCByZWNpcGllbnRBdHRyc01hcCA9IG5ldyBTZXQocmVjaXBpZW50LmF0dHJzLm1hcCgoYXR0cikgPT4gYXR0ci5uYW1lKSk7XG4gICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgYXR0cnMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgICAgIGlmICghcmVjaXBpZW50QXR0cnNNYXAuaGFzKGF0dHJzW2pdLm5hbWUpKSB7XG4gICAgICAgICAgICAgICAgcmVjaXBpZW50LmF0dHJzLnB1c2goYXR0cnNbal0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSxcbiAgICAvL1RyZWUgdHJhdmVyc2luZ1xuICAgIGdldEZpcnN0Q2hpbGQobm9kZSkge1xuICAgICAgICByZXR1cm4gbm9kZS5jaGlsZE5vZGVzWzBdO1xuICAgIH0sXG4gICAgZ2V0Q2hpbGROb2Rlcyhub2RlKSB7XG4gICAgICAgIHJldHVybiBub2RlLmNoaWxkTm9kZXM7XG4gICAgfSxcbiAgICBnZXRQYXJlbnROb2RlKG5vZGUpIHtcbiAgICAgICAgcmV0dXJuIG5vZGUucGFyZW50Tm9kZTtcbiAgICB9LFxuICAgIGdldEF0dHJMaXN0KGVsZW1lbnQpIHtcbiAgICAgICAgcmV0dXJuIGVsZW1lbnQuYXR0cnM7XG4gICAgfSxcbiAgICAvL05vZGUgZGF0YVxuICAgIGdldFRhZ05hbWUoZWxlbWVudCkge1xuICAgICAgICByZXR1cm4gZWxlbWVudC50YWdOYW1lO1xuICAgIH0sXG4gICAgZ2V0TmFtZXNwYWNlVVJJKGVsZW1lbnQpIHtcbiAgICAgICAgcmV0dXJuIGVsZW1lbnQubmFtZXNwYWNlVVJJO1xuICAgIH0sXG4gICAgZ2V0VGV4dE5vZGVDb250ZW50KHRleHROb2RlKSB7XG4gICAgICAgIHJldHVybiB0ZXh0Tm9kZS52YWx1ZTtcbiAgICB9LFxuICAgIGdldENvbW1lbnROb2RlQ29udGVudChjb21tZW50Tm9kZSkge1xuICAgICAgICByZXR1cm4gY29tbWVudE5vZGUuZGF0YTtcbiAgICB9LFxuICAgIGdldERvY3VtZW50VHlwZU5vZGVOYW1lKGRvY3R5cGVOb2RlKSB7XG4gICAgICAgIHJldHVybiBkb2N0eXBlTm9kZS5uYW1lO1xuICAgIH0sXG4gICAgZ2V0RG9jdW1lbnRUeXBlTm9kZVB1YmxpY0lkKGRvY3R5cGVOb2RlKSB7XG4gICAgICAgIHJldHVybiBkb2N0eXBlTm9kZS5wdWJsaWNJZDtcbiAgICB9LFxuICAgIGdldERvY3VtZW50VHlwZU5vZGVTeXN0ZW1JZChkb2N0eXBlTm9kZSkge1xuICAgICAgICByZXR1cm4gZG9jdHlwZU5vZGUuc3lzdGVtSWQ7XG4gICAgfSxcbiAgICAvL05vZGUgdHlwZXNcbiAgICBpc1RleHROb2RlKG5vZGUpIHtcbiAgICAgICAgcmV0dXJuIG5vZGUubm9kZU5hbWUgPT09ICcjdGV4dCc7XG4gICAgfSxcbiAgICBpc0NvbW1lbnROb2RlKG5vZGUpIHtcbiAgICAgICAgcmV0dXJuIG5vZGUubm9kZU5hbWUgPT09ICcjY29tbWVudCc7XG4gICAgfSxcbiAgICBpc0RvY3VtZW50VHlwZU5vZGUobm9kZSkge1xuICAgICAgICByZXR1cm4gbm9kZS5ub2RlTmFtZSA9PT0gJyNkb2N1bWVudFR5cGUnO1xuICAgIH0sXG4gICAgaXNFbGVtZW50Tm9kZShub2RlKSB7XG4gICAgICAgIHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobm9kZSwgJ3RhZ05hbWUnKTtcbiAgICB9LFxuICAgIC8vIFNvdXJjZSBjb2RlIGxvY2F0aW9uXG4gICAgc2V0Tm9kZVNvdXJjZUNvZGVMb2NhdGlvbihub2RlLCBsb2NhdGlvbikge1xuICAgICAgICBub2RlLnNvdXJjZUNvZGVMb2NhdGlvbiA9IGxvY2F0aW9uO1xuICAgIH0sXG4gICAgZ2V0Tm9kZVNvdXJjZUNvZGVMb2NhdGlvbihub2RlKSB7XG4gICAgICAgIHJldHVybiBub2RlLnNvdXJjZUNvZGVMb2NhdGlvbjtcbiAgICB9LFxuICAgIHVwZGF0ZU5vZGVTb3VyY2VDb2RlTG9jYXRpb24obm9kZSwgZW5kTG9jYXRpb24pIHtcbiAgICAgICAgbm9kZS5zb3VyY2VDb2RlTG9jYXRpb24gPSB7IC4uLm5vZGUuc291cmNlQ29kZUxvY2F0aW9uLCAuLi5lbmRMb2NhdGlvbiB9O1xuICAgIH0sXG59O1xuIiwgImltcG9ydCB7IERPQ1VNRU5UX01PREUgfSBmcm9tICcuL2h0bWwuanMnO1xuLy9Db25zdFxuY29uc3QgVkFMSURfRE9DVFlQRV9OQU1FID0gJ2h0bWwnO1xuY29uc3QgVkFMSURfU1lTVEVNX0lEID0gJ2Fib3V0OmxlZ2FjeS1jb21wYXQnO1xuY29uc3QgUVVJUktTX01PREVfU1lTVEVNX0lEID0gJ2h0dHA6Ly93d3cuaWJtLmNvbS9kYXRhL2R0ZC92MTEvaWJteGh0bWwxLXRyYW5zaXRpb25hbC5kdGQnO1xuY29uc3QgUVVJUktTX01PREVfUFVCTElDX0lEX1BSRUZJWEVTID0gW1xuICAgICcrLy9zaWxtYXJpbC8vZHRkIGh0bWwgcHJvIHYwcjExIDE5OTcwMTAxLy8nLFxuICAgICctLy9hcy8vZHRkIGh0bWwgMy4wIGFzd2VkaXQgKyBleHRlbnNpb25zLy8nLFxuICAgICctLy9hZHZhc29mdCBsdGQvL2R0ZCBodG1sIDMuMCBhc3dlZGl0ICsgZXh0ZW5zaW9ucy8vJyxcbiAgICAnLS8vaWV0Zi8vZHRkIGh0bWwgMi4wIGxldmVsIDEvLycsXG4gICAgJy0vL2lldGYvL2R0ZCBodG1sIDIuMCBsZXZlbCAyLy8nLFxuICAgICctLy9pZXRmLy9kdGQgaHRtbCAyLjAgc3RyaWN0IGxldmVsIDEvLycsXG4gICAgJy0vL2lldGYvL2R0ZCBodG1sIDIuMCBzdHJpY3QgbGV2ZWwgMi8vJyxcbiAgICAnLS8vaWV0Zi8vZHRkIGh0bWwgMi4wIHN0cmljdC8vJyxcbiAgICAnLS8vaWV0Zi8vZHRkIGh0bWwgMi4wLy8nLFxuICAgICctLy9pZXRmLy9kdGQgaHRtbCAyLjFlLy8nLFxuICAgICctLy9pZXRmLy9kdGQgaHRtbCAzLjAvLycsXG4gICAgJy0vL2lldGYvL2R0ZCBodG1sIDMuMiBmaW5hbC8vJyxcbiAgICAnLS8vaWV0Zi8vZHRkIGh0bWwgMy4yLy8nLFxuICAgICctLy9pZXRmLy9kdGQgaHRtbCAzLy8nLFxuICAgICctLy9pZXRmLy9kdGQgaHRtbCBsZXZlbCAwLy8nLFxuICAgICctLy9pZXRmLy9kdGQgaHRtbCBsZXZlbCAxLy8nLFxuICAgICctLy9pZXRmLy9kdGQgaHRtbCBsZXZlbCAyLy8nLFxuICAgICctLy9pZXRmLy9kdGQgaHRtbCBsZXZlbCAzLy8nLFxuICAgICctLy9pZXRmLy9kdGQgaHRtbCBzdHJpY3QgbGV2ZWwgMC8vJyxcbiAgICAnLS8vaWV0Zi8vZHRkIGh0bWwgc3RyaWN0IGxldmVsIDEvLycsXG4gICAgJy0vL2lldGYvL2R0ZCBodG1sIHN0cmljdCBsZXZlbCAyLy8nLFxuICAgICctLy9pZXRmLy9kdGQgaHRtbCBzdHJpY3QgbGV2ZWwgMy8vJyxcbiAgICAnLS8vaWV0Zi8vZHRkIGh0bWwgc3RyaWN0Ly8nLFxuICAgICctLy9pZXRmLy9kdGQgaHRtbC8vJyxcbiAgICAnLS8vbWV0cml1cy8vZHRkIG1ldHJpdXMgcHJlc2VudGF0aW9uYWwvLycsXG4gICAgJy0vL21pY3Jvc29mdC8vZHRkIGludGVybmV0IGV4cGxvcmVyIDIuMCBodG1sIHN0cmljdC8vJyxcbiAgICAnLS8vbWljcm9zb2Z0Ly9kdGQgaW50ZXJuZXQgZXhwbG9yZXIgMi4wIGh0bWwvLycsXG4gICAgJy0vL21pY3Jvc29mdC8vZHRkIGludGVybmV0IGV4cGxvcmVyIDIuMCB0YWJsZXMvLycsXG4gICAgJy0vL21pY3Jvc29mdC8vZHRkIGludGVybmV0IGV4cGxvcmVyIDMuMCBodG1sIHN0cmljdC8vJyxcbiAgICAnLS8vbWljcm9zb2Z0Ly9kdGQgaW50ZXJuZXQgZXhwbG9yZXIgMy4wIGh0bWwvLycsXG4gICAgJy0vL21pY3Jvc29mdC8vZHRkIGludGVybmV0IGV4cGxvcmVyIDMuMCB0YWJsZXMvLycsXG4gICAgJy0vL25ldHNjYXBlIGNvbW0uIGNvcnAuLy9kdGQgaHRtbC8vJyxcbiAgICAnLS8vbmV0c2NhcGUgY29tbS4gY29ycC4vL2R0ZCBzdHJpY3QgaHRtbC8vJyxcbiAgICBcIi0vL28ncmVpbGx5IGFuZCBhc3NvY2lhdGVzLy9kdGQgaHRtbCAyLjAvL1wiLFxuICAgIFwiLS8vbydyZWlsbHkgYW5kIGFzc29jaWF0ZXMvL2R0ZCBodG1sIGV4dGVuZGVkIDEuMC8vXCIsXG4gICAgXCItLy9vJ3JlaWxseSBhbmQgYXNzb2NpYXRlcy8vZHRkIGh0bWwgZXh0ZW5kZWQgcmVsYXhlZCAxLjAvL1wiLFxuICAgICctLy9zcS8vZHRkIGh0bWwgMi4wIGhvdG1ldGFsICsgZXh0ZW5zaW9ucy8vJyxcbiAgICAnLS8vc29mdHF1YWQgc29mdHdhcmUvL2R0ZCBob3RtZXRhbCBwcm8gNi4wOjoxOTk5MDYwMTo6ZXh0ZW5zaW9ucyB0byBodG1sIDQuMC8vJyxcbiAgICAnLS8vc29mdHF1YWQvL2R0ZCBob3RtZXRhbCBwcm8gNC4wOjoxOTk3MTAxMDo6ZXh0ZW5zaW9ucyB0byBodG1sIDQuMC8vJyxcbiAgICAnLS8vc3B5Z2xhc3MvL2R0ZCBodG1sIDIuMCBleHRlbmRlZC8vJyxcbiAgICAnLS8vc3VuIG1pY3Jvc3lzdGVtcyBjb3JwLi8vZHRkIGhvdGphdmEgaHRtbC8vJyxcbiAgICAnLS8vc3VuIG1pY3Jvc3lzdGVtcyBjb3JwLi8vZHRkIGhvdGphdmEgc3RyaWN0IGh0bWwvLycsXG4gICAgJy0vL3czYy8vZHRkIGh0bWwgMyAxOTk1LTAzLTI0Ly8nLFxuICAgICctLy93M2MvL2R0ZCBodG1sIDMuMiBkcmFmdC8vJyxcbiAgICAnLS8vdzNjLy9kdGQgaHRtbCAzLjIgZmluYWwvLycsXG4gICAgJy0vL3czYy8vZHRkIGh0bWwgMy4yLy8nLFxuICAgICctLy93M2MvL2R0ZCBodG1sIDMuMnMgZHJhZnQvLycsXG4gICAgJy0vL3czYy8vZHRkIGh0bWwgNC4wIGZyYW1lc2V0Ly8nLFxuICAgICctLy93M2MvL2R0ZCBodG1sIDQuMCB0cmFuc2l0aW9uYWwvLycsXG4gICAgJy0vL3czYy8vZHRkIGh0bWwgZXhwZXJpbWVudGFsIDE5OTYwNzEyLy8nLFxuICAgICctLy93M2MvL2R0ZCBodG1sIGV4cGVyaW1lbnRhbCA5NzA0MjEvLycsXG4gICAgJy0vL3czYy8vZHRkIHczIGh0bWwvLycsXG4gICAgJy0vL3czby8vZHRkIHczIGh0bWwgMy4wLy8nLFxuICAgICctLy93ZWJ0ZWNocy8vZHRkIG1vemlsbGEgaHRtbCAyLjAvLycsXG4gICAgJy0vL3dlYnRlY2hzLy9kdGQgbW96aWxsYSBodG1sLy8nLFxuXTtcbmNvbnN0IFFVSVJLU19NT0RFX05PX1NZU1RFTV9JRF9QVUJMSUNfSURfUFJFRklYRVMgPSBbXG4gICAgLi4uUVVJUktTX01PREVfUFVCTElDX0lEX1BSRUZJWEVTLFxuICAgICctLy93M2MvL2R0ZCBodG1sIDQuMDEgZnJhbWVzZXQvLycsXG4gICAgJy0vL3czYy8vZHRkIGh0bWwgNC4wMSB0cmFuc2l0aW9uYWwvLycsXG5dO1xuY29uc3QgUVVJUktTX01PREVfUFVCTElDX0lEUyA9IG5ldyBTZXQoW1xuICAgICctLy93M28vL2R0ZCB3MyBodG1sIHN0cmljdCAzLjAvL2VuLy8nLFxuICAgICctL3czYy9kdGQgaHRtbCA0LjAgdHJhbnNpdGlvbmFsL2VuJyxcbiAgICAnaHRtbCcsXG5dKTtcbmNvbnN0IExJTUlURURfUVVJUktTX1BVQkxJQ19JRF9QUkVGSVhFUyA9IFsnLS8vdzNjLy9kdGQgeGh0bWwgMS4wIGZyYW1lc2V0Ly8nLCAnLS8vdzNjLy9kdGQgeGh0bWwgMS4wIHRyYW5zaXRpb25hbC8vJ107XG5jb25zdCBMSU1JVEVEX1FVSVJLU19XSVRIX1NZU1RFTV9JRF9QVUJMSUNfSURfUFJFRklYRVMgPSBbXG4gICAgLi4uTElNSVRFRF9RVUlSS1NfUFVCTElDX0lEX1BSRUZJWEVTLFxuICAgICctLy93M2MvL2R0ZCBodG1sIDQuMDEgZnJhbWVzZXQvLycsXG4gICAgJy0vL3czYy8vZHRkIGh0bWwgNC4wMSB0cmFuc2l0aW9uYWwvLycsXG5dO1xuLy9VdGlsc1xuZnVuY3Rpb24gaGFzUHJlZml4KHB1YmxpY0lkLCBwcmVmaXhlcykge1xuICAgIHJldHVybiBwcmVmaXhlcy5zb21lKChwcmVmaXgpID0+IHB1YmxpY0lkLnN0YXJ0c1dpdGgocHJlZml4KSk7XG59XG4vL0FQSVxuZXhwb3J0IGZ1bmN0aW9uIGlzQ29uZm9ybWluZyh0b2tlbikge1xuICAgIHJldHVybiAodG9rZW4ubmFtZSA9PT0gVkFMSURfRE9DVFlQRV9OQU1FICYmXG4gICAgICAgIHRva2VuLnB1YmxpY0lkID09PSBudWxsICYmXG4gICAgICAgICh0b2tlbi5zeXN0ZW1JZCA9PT0gbnVsbCB8fCB0b2tlbi5zeXN0ZW1JZCA9PT0gVkFMSURfU1lTVEVNX0lEKSk7XG59XG5leHBvcnQgZnVuY3Rpb24gZ2V0RG9jdW1lbnRNb2RlKHRva2VuKSB7XG4gICAgaWYgKHRva2VuLm5hbWUgIT09IFZBTElEX0RPQ1RZUEVfTkFNRSkge1xuICAgICAgICByZXR1cm4gRE9DVU1FTlRfTU9ERS5RVUlSS1M7XG4gICAgfVxuICAgIGNvbnN0IHsgc3lzdGVtSWQgfSA9IHRva2VuO1xuICAgIGlmIChzeXN0ZW1JZCAmJiBzeXN0ZW1JZC50b0xvd2VyQ2FzZSgpID09PSBRVUlSS1NfTU9ERV9TWVNURU1fSUQpIHtcbiAgICAgICAgcmV0dXJuIERPQ1VNRU5UX01PREUuUVVJUktTO1xuICAgIH1cbiAgICBsZXQgeyBwdWJsaWNJZCB9ID0gdG9rZW47XG4gICAgaWYgKHB1YmxpY0lkICE9PSBudWxsKSB7XG4gICAgICAgIHB1YmxpY0lkID0gcHVibGljSWQudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgaWYgKFFVSVJLU19NT0RFX1BVQkxJQ19JRFMuaGFzKHB1YmxpY0lkKSkge1xuICAgICAgICAgICAgcmV0dXJuIERPQ1VNRU5UX01PREUuUVVJUktTO1xuICAgICAgICB9XG4gICAgICAgIGxldCBwcmVmaXhlcyA9IHN5c3RlbUlkID09PSBudWxsID8gUVVJUktTX01PREVfTk9fU1lTVEVNX0lEX1BVQkxJQ19JRF9QUkVGSVhFUyA6IFFVSVJLU19NT0RFX1BVQkxJQ19JRF9QUkVGSVhFUztcbiAgICAgICAgaWYgKGhhc1ByZWZpeChwdWJsaWNJZCwgcHJlZml4ZXMpKSB7XG4gICAgICAgICAgICByZXR1cm4gRE9DVU1FTlRfTU9ERS5RVUlSS1M7XG4gICAgICAgIH1cbiAgICAgICAgcHJlZml4ZXMgPVxuICAgICAgICAgICAgc3lzdGVtSWQgPT09IG51bGwgPyBMSU1JVEVEX1FVSVJLU19QVUJMSUNfSURfUFJFRklYRVMgOiBMSU1JVEVEX1FVSVJLU19XSVRIX1NZU1RFTV9JRF9QVUJMSUNfSURfUFJFRklYRVM7XG4gICAgICAgIGlmIChoYXNQcmVmaXgocHVibGljSWQsIHByZWZpeGVzKSkge1xuICAgICAgICAgICAgcmV0dXJuIERPQ1VNRU5UX01PREUuTElNSVRFRF9RVUlSS1M7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIERPQ1VNRU5UX01PREUuTk9fUVVJUktTO1xufVxuIiwgImltcG9ydCB7IFRBR19JRCBhcyAkLCBOUywgQVRUUlMsIGdldFRhZ0lEIH0gZnJvbSAnLi9odG1sLmpzJztcbi8vTUlNRSB0eXBlc1xuY29uc3QgTUlNRV9UWVBFUyA9IHtcbiAgICBURVhUX0hUTUw6ICd0ZXh0L2h0bWwnLFxuICAgIEFQUExJQ0FUSU9OX1hNTDogJ2FwcGxpY2F0aW9uL3hodG1sK3htbCcsXG59O1xuLy9BdHRyaWJ1dGVzXG5jb25zdCBERUZJTklUSU9OX1VSTF9BVFRSID0gJ2RlZmluaXRpb251cmwnO1xuY29uc3QgQURKVVNURURfREVGSU5JVElPTl9VUkxfQVRUUiA9ICdkZWZpbml0aW9uVVJMJztcbmNvbnN0IFNWR19BVFRSU19BREpVU1RNRU5UX01BUCA9IG5ldyBNYXAoW1xuICAgICdhdHRyaWJ1dGVOYW1lJyxcbiAgICAnYXR0cmlidXRlVHlwZScsXG4gICAgJ2Jhc2VGcmVxdWVuY3knLFxuICAgICdiYXNlUHJvZmlsZScsXG4gICAgJ2NhbGNNb2RlJyxcbiAgICAnY2xpcFBhdGhVbml0cycsXG4gICAgJ2RpZmZ1c2VDb25zdGFudCcsXG4gICAgJ2VkZ2VNb2RlJyxcbiAgICAnZmlsdGVyVW5pdHMnLFxuICAgICdnbHlwaFJlZicsXG4gICAgJ2dyYWRpZW50VHJhbnNmb3JtJyxcbiAgICAnZ3JhZGllbnRVbml0cycsXG4gICAgJ2tlcm5lbE1hdHJpeCcsXG4gICAgJ2tlcm5lbFVuaXRMZW5ndGgnLFxuICAgICdrZXlQb2ludHMnLFxuICAgICdrZXlTcGxpbmVzJyxcbiAgICAna2V5VGltZXMnLFxuICAgICdsZW5ndGhBZGp1c3QnLFxuICAgICdsaW1pdGluZ0NvbmVBbmdsZScsXG4gICAgJ21hcmtlckhlaWdodCcsXG4gICAgJ21hcmtlclVuaXRzJyxcbiAgICAnbWFya2VyV2lkdGgnLFxuICAgICdtYXNrQ29udGVudFVuaXRzJyxcbiAgICAnbWFza1VuaXRzJyxcbiAgICAnbnVtT2N0YXZlcycsXG4gICAgJ3BhdGhMZW5ndGgnLFxuICAgICdwYXR0ZXJuQ29udGVudFVuaXRzJyxcbiAgICAncGF0dGVyblRyYW5zZm9ybScsXG4gICAgJ3BhdHRlcm5Vbml0cycsXG4gICAgJ3BvaW50c0F0WCcsXG4gICAgJ3BvaW50c0F0WScsXG4gICAgJ3BvaW50c0F0WicsXG4gICAgJ3ByZXNlcnZlQWxwaGEnLFxuICAgICdwcmVzZXJ2ZUFzcGVjdFJhdGlvJyxcbiAgICAncHJpbWl0aXZlVW5pdHMnLFxuICAgICdyZWZYJyxcbiAgICAncmVmWScsXG4gICAgJ3JlcGVhdENvdW50JyxcbiAgICAncmVwZWF0RHVyJyxcbiAgICAncmVxdWlyZWRFeHRlbnNpb25zJyxcbiAgICAncmVxdWlyZWRGZWF0dXJlcycsXG4gICAgJ3NwZWN1bGFyQ29uc3RhbnQnLFxuICAgICdzcGVjdWxhckV4cG9uZW50JyxcbiAgICAnc3ByZWFkTWV0aG9kJyxcbiAgICAnc3RhcnRPZmZzZXQnLFxuICAgICdzdGREZXZpYXRpb24nLFxuICAgICdzdGl0Y2hUaWxlcycsXG4gICAgJ3N1cmZhY2VTY2FsZScsXG4gICAgJ3N5c3RlbUxhbmd1YWdlJyxcbiAgICAndGFibGVWYWx1ZXMnLFxuICAgICd0YXJnZXRYJyxcbiAgICAndGFyZ2V0WScsXG4gICAgJ3RleHRMZW5ndGgnLFxuICAgICd2aWV3Qm94JyxcbiAgICAndmlld1RhcmdldCcsXG4gICAgJ3hDaGFubmVsU2VsZWN0b3InLFxuICAgICd5Q2hhbm5lbFNlbGVjdG9yJyxcbiAgICAnem9vbUFuZFBhbicsXG5dLm1hcCgoYXR0cikgPT4gW2F0dHIudG9Mb3dlckNhc2UoKSwgYXR0cl0pKTtcbmNvbnN0IFhNTF9BVFRSU19BREpVU1RNRU5UX01BUCA9IG5ldyBNYXAoW1xuICAgIFsneGxpbms6YWN0dWF0ZScsIHsgcHJlZml4OiAneGxpbmsnLCBuYW1lOiAnYWN0dWF0ZScsIG5hbWVzcGFjZTogTlMuWExJTksgfV0sXG4gICAgWyd4bGluazphcmNyb2xlJywgeyBwcmVmaXg6ICd4bGluaycsIG5hbWU6ICdhcmNyb2xlJywgbmFtZXNwYWNlOiBOUy5YTElOSyB9XSxcbiAgICBbJ3hsaW5rOmhyZWYnLCB7IHByZWZpeDogJ3hsaW5rJywgbmFtZTogJ2hyZWYnLCBuYW1lc3BhY2U6IE5TLlhMSU5LIH1dLFxuICAgIFsneGxpbms6cm9sZScsIHsgcHJlZml4OiAneGxpbmsnLCBuYW1lOiAncm9sZScsIG5hbWVzcGFjZTogTlMuWExJTksgfV0sXG4gICAgWyd4bGluazpzaG93JywgeyBwcmVmaXg6ICd4bGluaycsIG5hbWU6ICdzaG93JywgbmFtZXNwYWNlOiBOUy5YTElOSyB9XSxcbiAgICBbJ3hsaW5rOnRpdGxlJywgeyBwcmVmaXg6ICd4bGluaycsIG5hbWU6ICd0aXRsZScsIG5hbWVzcGFjZTogTlMuWExJTksgfV0sXG4gICAgWyd4bGluazp0eXBlJywgeyBwcmVmaXg6ICd4bGluaycsIG5hbWU6ICd0eXBlJywgbmFtZXNwYWNlOiBOUy5YTElOSyB9XSxcbiAgICBbJ3htbDpsYW5nJywgeyBwcmVmaXg6ICd4bWwnLCBuYW1lOiAnbGFuZycsIG5hbWVzcGFjZTogTlMuWE1MIH1dLFxuICAgIFsneG1sOnNwYWNlJywgeyBwcmVmaXg6ICd4bWwnLCBuYW1lOiAnc3BhY2UnLCBuYW1lc3BhY2U6IE5TLlhNTCB9XSxcbiAgICBbJ3htbG5zJywgeyBwcmVmaXg6ICcnLCBuYW1lOiAneG1sbnMnLCBuYW1lc3BhY2U6IE5TLlhNTE5TIH1dLFxuICAgIFsneG1sbnM6eGxpbmsnLCB7IHByZWZpeDogJ3htbG5zJywgbmFtZTogJ3hsaW5rJywgbmFtZXNwYWNlOiBOUy5YTUxOUyB9XSxcbl0pO1xuLy9TVkcgdGFnIG5hbWVzIGFkanVzdG1lbnQgbWFwXG5leHBvcnQgY29uc3QgU1ZHX1RBR19OQU1FU19BREpVU1RNRU5UX01BUCA9IG5ldyBNYXAoW1xuICAgICdhbHRHbHlwaCcsXG4gICAgJ2FsdEdseXBoRGVmJyxcbiAgICAnYWx0R2x5cGhJdGVtJyxcbiAgICAnYW5pbWF0ZUNvbG9yJyxcbiAgICAnYW5pbWF0ZU1vdGlvbicsXG4gICAgJ2FuaW1hdGVUcmFuc2Zvcm0nLFxuICAgICdjbGlwUGF0aCcsXG4gICAgJ2ZlQmxlbmQnLFxuICAgICdmZUNvbG9yTWF0cml4JyxcbiAgICAnZmVDb21wb25lbnRUcmFuc2ZlcicsXG4gICAgJ2ZlQ29tcG9zaXRlJyxcbiAgICAnZmVDb252b2x2ZU1hdHJpeCcsXG4gICAgJ2ZlRGlmZnVzZUxpZ2h0aW5nJyxcbiAgICAnZmVEaXNwbGFjZW1lbnRNYXAnLFxuICAgICdmZURpc3RhbnRMaWdodCcsXG4gICAgJ2ZlRmxvb2QnLFxuICAgICdmZUZ1bmNBJyxcbiAgICAnZmVGdW5jQicsXG4gICAgJ2ZlRnVuY0cnLFxuICAgICdmZUZ1bmNSJyxcbiAgICAnZmVHYXVzc2lhbkJsdXInLFxuICAgICdmZUltYWdlJyxcbiAgICAnZmVNZXJnZScsXG4gICAgJ2ZlTWVyZ2VOb2RlJyxcbiAgICAnZmVNb3JwaG9sb2d5JyxcbiAgICAnZmVPZmZzZXQnLFxuICAgICdmZVBvaW50TGlnaHQnLFxuICAgICdmZVNwZWN1bGFyTGlnaHRpbmcnLFxuICAgICdmZVNwb3RMaWdodCcsXG4gICAgJ2ZlVGlsZScsXG4gICAgJ2ZlVHVyYnVsZW5jZScsXG4gICAgJ2ZvcmVpZ25PYmplY3QnLFxuICAgICdnbHlwaFJlZicsXG4gICAgJ2xpbmVhckdyYWRpZW50JyxcbiAgICAncmFkaWFsR3JhZGllbnQnLFxuICAgICd0ZXh0UGF0aCcsXG5dLm1hcCgodG4pID0+IFt0bi50b0xvd2VyQ2FzZSgpLCB0bl0pKTtcbi8vVGFncyB0aGF0IGNhdXNlcyBleGl0IGZyb20gZm9yZWlnbiBjb250ZW50XG5jb25zdCBFWElUU19GT1JFSUdOX0NPTlRFTlQgPSBuZXcgU2V0KFtcbiAgICAkLkIsXG4gICAgJC5CSUcsXG4gICAgJC5CTE9DS1FVT1RFLFxuICAgICQuQk9EWSxcbiAgICAkLkJSLFxuICAgICQuQ0VOVEVSLFxuICAgICQuQ09ERSxcbiAgICAkLkRELFxuICAgICQuRElWLFxuICAgICQuREwsXG4gICAgJC5EVCxcbiAgICAkLkVNLFxuICAgICQuRU1CRUQsXG4gICAgJC5IMSxcbiAgICAkLkgyLFxuICAgICQuSDMsXG4gICAgJC5INCxcbiAgICAkLkg1LFxuICAgICQuSDYsXG4gICAgJC5IRUFELFxuICAgICQuSFIsXG4gICAgJC5JLFxuICAgICQuSU1HLFxuICAgICQuTEksXG4gICAgJC5MSVNUSU5HLFxuICAgICQuTUVOVSxcbiAgICAkLk1FVEEsXG4gICAgJC5OT0JSLFxuICAgICQuT0wsXG4gICAgJC5QLFxuICAgICQuUFJFLFxuICAgICQuUlVCWSxcbiAgICAkLlMsXG4gICAgJC5TTUFMTCxcbiAgICAkLlNQQU4sXG4gICAgJC5TVFJPTkcsXG4gICAgJC5TVFJJS0UsXG4gICAgJC5TVUIsXG4gICAgJC5TVVAsXG4gICAgJC5UQUJMRSxcbiAgICAkLlRULFxuICAgICQuVSxcbiAgICAkLlVMLFxuICAgICQuVkFSLFxuXSk7XG4vL0NoZWNrIGV4aXQgZnJvbSBmb3JlaWduIGNvbnRlbnRcbmV4cG9ydCBmdW5jdGlvbiBjYXVzZXNFeGl0KHN0YXJ0VGFnVG9rZW4pIHtcbiAgICBjb25zdCB0biA9IHN0YXJ0VGFnVG9rZW4udGFnSUQ7XG4gICAgY29uc3QgaXNGb250V2l0aEF0dHJzID0gdG4gPT09ICQuRk9OVCAmJlxuICAgICAgICBzdGFydFRhZ1Rva2VuLmF0dHJzLnNvbWUoKHsgbmFtZSB9KSA9PiBuYW1lID09PSBBVFRSUy5DT0xPUiB8fCBuYW1lID09PSBBVFRSUy5TSVpFIHx8IG5hbWUgPT09IEFUVFJTLkZBQ0UpO1xuICAgIHJldHVybiBpc0ZvbnRXaXRoQXR0cnMgfHwgRVhJVFNfRk9SRUlHTl9DT05URU5ULmhhcyh0bik7XG59XG4vL1Rva2VuIGFkanVzdG1lbnRzXG5leHBvcnQgZnVuY3Rpb24gYWRqdXN0VG9rZW5NYXRoTUxBdHRycyh0b2tlbikge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdG9rZW4uYXR0cnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKHRva2VuLmF0dHJzW2ldLm5hbWUgPT09IERFRklOSVRJT05fVVJMX0FUVFIpIHtcbiAgICAgICAgICAgIHRva2VuLmF0dHJzW2ldLm5hbWUgPSBBREpVU1RFRF9ERUZJTklUSU9OX1VSTF9BVFRSO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG59XG5leHBvcnQgZnVuY3Rpb24gYWRqdXN0VG9rZW5TVkdBdHRycyh0b2tlbikge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdG9rZW4uYXR0cnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3QgYWRqdXN0ZWRBdHRyTmFtZSA9IFNWR19BVFRSU19BREpVU1RNRU5UX01BUC5nZXQodG9rZW4uYXR0cnNbaV0ubmFtZSk7XG4gICAgICAgIGlmIChhZGp1c3RlZEF0dHJOYW1lICE9IG51bGwpIHtcbiAgICAgICAgICAgIHRva2VuLmF0dHJzW2ldLm5hbWUgPSBhZGp1c3RlZEF0dHJOYW1lO1xuICAgICAgICB9XG4gICAgfVxufVxuZXhwb3J0IGZ1bmN0aW9uIGFkanVzdFRva2VuWE1MQXR0cnModG9rZW4pIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRva2VuLmF0dHJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IGFkanVzdGVkQXR0ckVudHJ5ID0gWE1MX0FUVFJTX0FESlVTVE1FTlRfTUFQLmdldCh0b2tlbi5hdHRyc1tpXS5uYW1lKTtcbiAgICAgICAgaWYgKGFkanVzdGVkQXR0ckVudHJ5KSB7XG4gICAgICAgICAgICB0b2tlbi5hdHRyc1tpXS5wcmVmaXggPSBhZGp1c3RlZEF0dHJFbnRyeS5wcmVmaXg7XG4gICAgICAgICAgICB0b2tlbi5hdHRyc1tpXS5uYW1lID0gYWRqdXN0ZWRBdHRyRW50cnkubmFtZTtcbiAgICAgICAgICAgIHRva2VuLmF0dHJzW2ldLm5hbWVzcGFjZSA9IGFkanVzdGVkQXR0ckVudHJ5Lm5hbWVzcGFjZTtcbiAgICAgICAgfVxuICAgIH1cbn1cbmV4cG9ydCBmdW5jdGlvbiBhZGp1c3RUb2tlblNWR1RhZ05hbWUodG9rZW4pIHtcbiAgICBjb25zdCBhZGp1c3RlZFRhZ05hbWUgPSBTVkdfVEFHX05BTUVTX0FESlVTVE1FTlRfTUFQLmdldCh0b2tlbi50YWdOYW1lKTtcbiAgICBpZiAoYWRqdXN0ZWRUYWdOYW1lICE9IG51bGwpIHtcbiAgICAgICAgdG9rZW4udGFnTmFtZSA9IGFkanVzdGVkVGFnTmFtZTtcbiAgICAgICAgdG9rZW4udGFnSUQgPSBnZXRUYWdJRCh0b2tlbi50YWdOYW1lKTtcbiAgICB9XG59XG4vL0ludGVncmF0aW9uIHBvaW50c1xuZnVuY3Rpb24gaXNNYXRoTUxUZXh0SW50ZWdyYXRpb25Qb2ludCh0biwgbnMpIHtcbiAgICByZXR1cm4gbnMgPT09IE5TLk1BVEhNTCAmJiAodG4gPT09ICQuTUkgfHwgdG4gPT09ICQuTU8gfHwgdG4gPT09ICQuTU4gfHwgdG4gPT09ICQuTVMgfHwgdG4gPT09ICQuTVRFWFQpO1xufVxuZnVuY3Rpb24gaXNIdG1sSW50ZWdyYXRpb25Qb2ludCh0biwgbnMsIGF0dHJzKSB7XG4gICAgaWYgKG5zID09PSBOUy5NQVRITUwgJiYgdG4gPT09ICQuQU5OT1RBVElPTl9YTUwpIHtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhdHRycy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKGF0dHJzW2ldLm5hbWUgPT09IEFUVFJTLkVOQ09ESU5HKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBhdHRyc1tpXS52YWx1ZS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZSA9PT0gTUlNRV9UWVBFUy5URVhUX0hUTUwgfHwgdmFsdWUgPT09IE1JTUVfVFlQRVMuQVBQTElDQVRJT05fWE1MO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBucyA9PT0gTlMuU1ZHICYmICh0biA9PT0gJC5GT1JFSUdOX09CSkVDVCB8fCB0biA9PT0gJC5ERVNDIHx8IHRuID09PSAkLlRJVExFKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpc0ludGVncmF0aW9uUG9pbnQodG4sIG5zLCBhdHRycywgZm9yZWlnbk5TKSB7XG4gICAgcmV0dXJuICgoKCFmb3JlaWduTlMgfHwgZm9yZWlnbk5TID09PSBOUy5IVE1MKSAmJiBpc0h0bWxJbnRlZ3JhdGlvblBvaW50KHRuLCBucywgYXR0cnMpKSB8fFxuICAgICAgICAoKCFmb3JlaWduTlMgfHwgZm9yZWlnbk5TID09PSBOUy5NQVRITUwpICYmIGlzTWF0aE1MVGV4dEludGVncmF0aW9uUG9pbnQodG4sIG5zKSkpO1xufVxuIiwgImltcG9ydCB7IFRva2VuaXplciwgVG9rZW5pemVyTW9kZSB9IGZyb20gJy4uL3Rva2VuaXplci9pbmRleC5qcyc7XG5pbXBvcnQgeyBPcGVuRWxlbWVudFN0YWNrIH0gZnJvbSAnLi9vcGVuLWVsZW1lbnQtc3RhY2suanMnO1xuaW1wb3J0IHsgRm9ybWF0dGluZ0VsZW1lbnRMaXN0LCBFbnRyeVR5cGUgfSBmcm9tICcuL2Zvcm1hdHRpbmctZWxlbWVudC1saXN0LmpzJztcbmltcG9ydCB7IGRlZmF1bHRUcmVlQWRhcHRlciB9IGZyb20gJy4uL3RyZWUtYWRhcHRlcnMvZGVmYXVsdC5qcyc7XG5pbXBvcnQgKiBhcyBkb2N0eXBlIGZyb20gJy4uL2NvbW1vbi9kb2N0eXBlLmpzJztcbmltcG9ydCAqIGFzIGZvcmVpZ25Db250ZW50IGZyb20gJy4uL2NvbW1vbi9mb3JlaWduLWNvbnRlbnQuanMnO1xuaW1wb3J0IHsgRVJSIH0gZnJvbSAnLi4vY29tbW9uL2Vycm9yLWNvZGVzLmpzJztcbmltcG9ydCAqIGFzIHVuaWNvZGUgZnJvbSAnLi4vY29tbW9uL3VuaWNvZGUuanMnO1xuaW1wb3J0IHsgVEFHX0lEIGFzICQsIFRBR19OQU1FUyBhcyBUTiwgTlMsIEFUVFJTLCBTUEVDSUFMX0VMRU1FTlRTLCBET0NVTUVOVF9NT0RFLCBOVU1CRVJFRF9IRUFERVJTLCBnZXRUYWdJRCwgfSBmcm9tICcuLi9jb21tb24vaHRtbC5qcyc7XG5pbXBvcnQgeyBUb2tlblR5cGUsIGdldFRva2VuQXR0ciwgfSBmcm9tICcuLi9jb21tb24vdG9rZW4uanMnO1xuLy9NaXNjIGNvbnN0YW50c1xuY29uc3QgSElEREVOX0lOUFVUX1RZUEUgPSAnaGlkZGVuJztcbi8vQWRvcHRpb24gYWdlbmN5IGxvb3BzIGl0ZXJhdGlvbiBjb3VudFxuY29uc3QgQUFfT1VURVJfTE9PUF9JVEVSID0gODtcbmNvbnN0IEFBX0lOTkVSX0xPT1BfSVRFUiA9IDM7XG4vL0luc2VydGlvbiBtb2Rlc1xudmFyIEluc2VydGlvbk1vZGU7XG4oZnVuY3Rpb24gKEluc2VydGlvbk1vZGUpIHtcbiAgICBJbnNlcnRpb25Nb2RlW0luc2VydGlvbk1vZGVbXCJJTklUSUFMXCJdID0gMF0gPSBcIklOSVRJQUxcIjtcbiAgICBJbnNlcnRpb25Nb2RlW0luc2VydGlvbk1vZGVbXCJCRUZPUkVfSFRNTFwiXSA9IDFdID0gXCJCRUZPUkVfSFRNTFwiO1xuICAgIEluc2VydGlvbk1vZGVbSW5zZXJ0aW9uTW9kZVtcIkJFRk9SRV9IRUFEXCJdID0gMl0gPSBcIkJFRk9SRV9IRUFEXCI7XG4gICAgSW5zZXJ0aW9uTW9kZVtJbnNlcnRpb25Nb2RlW1wiSU5fSEVBRFwiXSA9IDNdID0gXCJJTl9IRUFEXCI7XG4gICAgSW5zZXJ0aW9uTW9kZVtJbnNlcnRpb25Nb2RlW1wiSU5fSEVBRF9OT19TQ1JJUFRcIl0gPSA0XSA9IFwiSU5fSEVBRF9OT19TQ1JJUFRcIjtcbiAgICBJbnNlcnRpb25Nb2RlW0luc2VydGlvbk1vZGVbXCJBRlRFUl9IRUFEXCJdID0gNV0gPSBcIkFGVEVSX0hFQURcIjtcbiAgICBJbnNlcnRpb25Nb2RlW0luc2VydGlvbk1vZGVbXCJJTl9CT0RZXCJdID0gNl0gPSBcIklOX0JPRFlcIjtcbiAgICBJbnNlcnRpb25Nb2RlW0luc2VydGlvbk1vZGVbXCJURVhUXCJdID0gN10gPSBcIlRFWFRcIjtcbiAgICBJbnNlcnRpb25Nb2RlW0luc2VydGlvbk1vZGVbXCJJTl9UQUJMRVwiXSA9IDhdID0gXCJJTl9UQUJMRVwiO1xuICAgIEluc2VydGlvbk1vZGVbSW5zZXJ0aW9uTW9kZVtcIklOX1RBQkxFX1RFWFRcIl0gPSA5XSA9IFwiSU5fVEFCTEVfVEVYVFwiO1xuICAgIEluc2VydGlvbk1vZGVbSW5zZXJ0aW9uTW9kZVtcIklOX0NBUFRJT05cIl0gPSAxMF0gPSBcIklOX0NBUFRJT05cIjtcbiAgICBJbnNlcnRpb25Nb2RlW0luc2VydGlvbk1vZGVbXCJJTl9DT0xVTU5fR1JPVVBcIl0gPSAxMV0gPSBcIklOX0NPTFVNTl9HUk9VUFwiO1xuICAgIEluc2VydGlvbk1vZGVbSW5zZXJ0aW9uTW9kZVtcIklOX1RBQkxFX0JPRFlcIl0gPSAxMl0gPSBcIklOX1RBQkxFX0JPRFlcIjtcbiAgICBJbnNlcnRpb25Nb2RlW0luc2VydGlvbk1vZGVbXCJJTl9ST1dcIl0gPSAxM10gPSBcIklOX1JPV1wiO1xuICAgIEluc2VydGlvbk1vZGVbSW5zZXJ0aW9uTW9kZVtcIklOX0NFTExcIl0gPSAxNF0gPSBcIklOX0NFTExcIjtcbiAgICBJbnNlcnRpb25Nb2RlW0luc2VydGlvbk1vZGVbXCJJTl9TRUxFQ1RcIl0gPSAxNV0gPSBcIklOX1NFTEVDVFwiO1xuICAgIEluc2VydGlvbk1vZGVbSW5zZXJ0aW9uTW9kZVtcIklOX1NFTEVDVF9JTl9UQUJMRVwiXSA9IDE2XSA9IFwiSU5fU0VMRUNUX0lOX1RBQkxFXCI7XG4gICAgSW5zZXJ0aW9uTW9kZVtJbnNlcnRpb25Nb2RlW1wiSU5fVEVNUExBVEVcIl0gPSAxN10gPSBcIklOX1RFTVBMQVRFXCI7XG4gICAgSW5zZXJ0aW9uTW9kZVtJbnNlcnRpb25Nb2RlW1wiQUZURVJfQk9EWVwiXSA9IDE4XSA9IFwiQUZURVJfQk9EWVwiO1xuICAgIEluc2VydGlvbk1vZGVbSW5zZXJ0aW9uTW9kZVtcIklOX0ZSQU1FU0VUXCJdID0gMTldID0gXCJJTl9GUkFNRVNFVFwiO1xuICAgIEluc2VydGlvbk1vZGVbSW5zZXJ0aW9uTW9kZVtcIkFGVEVSX0ZSQU1FU0VUXCJdID0gMjBdID0gXCJBRlRFUl9GUkFNRVNFVFwiO1xuICAgIEluc2VydGlvbk1vZGVbSW5zZXJ0aW9uTW9kZVtcIkFGVEVSX0FGVEVSX0JPRFlcIl0gPSAyMV0gPSBcIkFGVEVSX0FGVEVSX0JPRFlcIjtcbiAgICBJbnNlcnRpb25Nb2RlW0luc2VydGlvbk1vZGVbXCJBRlRFUl9BRlRFUl9GUkFNRVNFVFwiXSA9IDIyXSA9IFwiQUZURVJfQUZURVJfRlJBTUVTRVRcIjtcbn0pKEluc2VydGlvbk1vZGUgfHwgKEluc2VydGlvbk1vZGUgPSB7fSkpO1xuY29uc3QgQkFTRV9MT0MgPSB7XG4gICAgc3RhcnRMaW5lOiAtMSxcbiAgICBzdGFydENvbDogLTEsXG4gICAgc3RhcnRPZmZzZXQ6IC0xLFxuICAgIGVuZExpbmU6IC0xLFxuICAgIGVuZENvbDogLTEsXG4gICAgZW5kT2Zmc2V0OiAtMSxcbn07XG5jb25zdCBUQUJMRV9TVFJVQ1RVUkVfVEFHUyA9IG5ldyBTZXQoWyQuVEFCTEUsICQuVEJPRFksICQuVEZPT1QsICQuVEhFQUQsICQuVFJdKTtcbmNvbnN0IGRlZmF1bHRQYXJzZXJPcHRpb25zID0ge1xuICAgIHNjcmlwdGluZ0VuYWJsZWQ6IHRydWUsXG4gICAgc291cmNlQ29kZUxvY2F0aW9uSW5mbzogZmFsc2UsXG4gICAgdHJlZUFkYXB0ZXI6IGRlZmF1bHRUcmVlQWRhcHRlcixcbiAgICBvblBhcnNlRXJyb3I6IG51bGwsXG59O1xuLy9QYXJzZXJcbmV4cG9ydCBjbGFzcyBQYXJzZXIge1xuICAgIGNvbnN0cnVjdG9yKG9wdGlvbnMsIGRvY3VtZW50LCBcbiAgICAvKiogQGludGVybmFsICovXG4gICAgZnJhZ21lbnRDb250ZXh0ID0gbnVsbCwgXG4gICAgLyoqIEBpbnRlcm5hbCAqL1xuICAgIHNjcmlwdEhhbmRsZXIgPSBudWxsKSB7XG4gICAgICAgIHRoaXMuZnJhZ21lbnRDb250ZXh0ID0gZnJhZ21lbnRDb250ZXh0O1xuICAgICAgICB0aGlzLnNjcmlwdEhhbmRsZXIgPSBzY3JpcHRIYW5kbGVyO1xuICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbiA9IG51bGw7XG4gICAgICAgIHRoaXMuc3RvcHBlZCA9IGZhbHNlO1xuICAgICAgICAvKiogQGludGVybmFsICovXG4gICAgICAgIHRoaXMuaW5zZXJ0aW9uTW9kZSA9IEluc2VydGlvbk1vZGUuSU5JVElBTDtcbiAgICAgICAgLyoqIEBpbnRlcm5hbCAqL1xuICAgICAgICB0aGlzLm9yaWdpbmFsSW5zZXJ0aW9uTW9kZSA9IEluc2VydGlvbk1vZGUuSU5JVElBTDtcbiAgICAgICAgLyoqIEBpbnRlcm5hbCAqL1xuICAgICAgICB0aGlzLmhlYWRFbGVtZW50ID0gbnVsbDtcbiAgICAgICAgLyoqIEBpbnRlcm5hbCAqL1xuICAgICAgICB0aGlzLmZvcm1FbGVtZW50ID0gbnVsbDtcbiAgICAgICAgLyoqIEluZGljYXRlcyB0aGF0IHRoZSBjdXJyZW50IG5vZGUgaXMgbm90IGFuIGVsZW1lbnQgaW4gdGhlIEhUTUwgbmFtZXNwYWNlICovXG4gICAgICAgIHRoaXMuY3VycmVudE5vdEluSFRNTCA9IGZhbHNlO1xuICAgICAgICAvKipcbiAgICAgICAgICogVGhlIHRlbXBsYXRlIGluc2VydGlvbiBtb2RlIHN0YWNrIGlzIG1haW50YWluZWQgZnJvbSB0aGUgbGVmdC5cbiAgICAgICAgICogSWUuIHRoZSB0b3Btb3N0IGVsZW1lbnQgd2lsbCBhbHdheXMgaGF2ZSBpbmRleCAwLlxuICAgICAgICAgKlxuICAgICAgICAgKiBAaW50ZXJuYWxcbiAgICAgICAgICovXG4gICAgICAgIHRoaXMudG1wbEluc2VydGlvbk1vZGVTdGFjayA9IFtdO1xuICAgICAgICAvKiogQGludGVybmFsICovXG4gICAgICAgIHRoaXMucGVuZGluZ0NoYXJhY3RlclRva2VucyA9IFtdO1xuICAgICAgICAvKiogQGludGVybmFsICovXG4gICAgICAgIHRoaXMuaGFzTm9uV2hpdGVzcGFjZVBlbmRpbmdDaGFyYWN0ZXJUb2tlbiA9IGZhbHNlO1xuICAgICAgICAvKiogQGludGVybmFsICovXG4gICAgICAgIHRoaXMuZnJhbWVzZXRPayA9IHRydWU7XG4gICAgICAgIC8qKiBAaW50ZXJuYWwgKi9cbiAgICAgICAgdGhpcy5za2lwTmV4dE5ld0xpbmUgPSBmYWxzZTtcbiAgICAgICAgLyoqIEBpbnRlcm5hbCAqL1xuICAgICAgICB0aGlzLmZvc3RlclBhcmVudGluZ0VuYWJsZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5vcHRpb25zID0ge1xuICAgICAgICAgICAgLi4uZGVmYXVsdFBhcnNlck9wdGlvbnMsXG4gICAgICAgICAgICAuLi5vcHRpb25zLFxuICAgICAgICB9O1xuICAgICAgICB0aGlzLnRyZWVBZGFwdGVyID0gdGhpcy5vcHRpb25zLnRyZWVBZGFwdGVyO1xuICAgICAgICB0aGlzLm9uUGFyc2VFcnJvciA9IHRoaXMub3B0aW9ucy5vblBhcnNlRXJyb3I7XG4gICAgICAgIC8vIEFsd2F5cyBlbmFibGUgbG9jYXRpb24gaW5mbyBpZiB3ZSByZXBvcnQgcGFyc2UgZXJyb3JzLlxuICAgICAgICBpZiAodGhpcy5vblBhcnNlRXJyb3IpIHtcbiAgICAgICAgICAgIHRoaXMub3B0aW9ucy5zb3VyY2VDb2RlTG9jYXRpb25JbmZvID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmRvY3VtZW50ID0gZG9jdW1lbnQgIT09IG51bGwgJiYgZG9jdW1lbnQgIT09IHZvaWQgMCA/IGRvY3VtZW50IDogdGhpcy50cmVlQWRhcHRlci5jcmVhdGVEb2N1bWVudCgpO1xuICAgICAgICB0aGlzLnRva2VuaXplciA9IG5ldyBUb2tlbml6ZXIodGhpcy5vcHRpb25zLCB0aGlzKTtcbiAgICAgICAgdGhpcy5hY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMgPSBuZXcgRm9ybWF0dGluZ0VsZW1lbnRMaXN0KHRoaXMudHJlZUFkYXB0ZXIpO1xuICAgICAgICB0aGlzLmZyYWdtZW50Q29udGV4dElEID0gZnJhZ21lbnRDb250ZXh0ID8gZ2V0VGFnSUQodGhpcy50cmVlQWRhcHRlci5nZXRUYWdOYW1lKGZyYWdtZW50Q29udGV4dCkpIDogJC5VTktOT1dOO1xuICAgICAgICB0aGlzLl9zZXRDb250ZXh0TW9kZXMoZnJhZ21lbnRDb250ZXh0ICE9PSBudWxsICYmIGZyYWdtZW50Q29udGV4dCAhPT0gdm9pZCAwID8gZnJhZ21lbnRDb250ZXh0IDogdGhpcy5kb2N1bWVudCwgdGhpcy5mcmFnbWVudENvbnRleHRJRCk7XG4gICAgICAgIHRoaXMub3BlbkVsZW1lbnRzID0gbmV3IE9wZW5FbGVtZW50U3RhY2sodGhpcy5kb2N1bWVudCwgdGhpcy50cmVlQWRhcHRlciwgdGhpcyk7XG4gICAgfVxuICAgIC8vIEFQSVxuICAgIHN0YXRpYyBwYXJzZShodG1sLCBvcHRpb25zKSB7XG4gICAgICAgIGNvbnN0IHBhcnNlciA9IG5ldyB0aGlzKG9wdGlvbnMpO1xuICAgICAgICBwYXJzZXIudG9rZW5pemVyLndyaXRlKGh0bWwsIHRydWUpO1xuICAgICAgICByZXR1cm4gcGFyc2VyLmRvY3VtZW50O1xuICAgIH1cbiAgICBzdGF0aWMgZ2V0RnJhZ21lbnRQYXJzZXIoZnJhZ21lbnRDb250ZXh0LCBvcHRpb25zKSB7XG4gICAgICAgIGNvbnN0IG9wdHMgPSB7XG4gICAgICAgICAgICAuLi5kZWZhdWx0UGFyc2VyT3B0aW9ucyxcbiAgICAgICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgIH07XG4gICAgICAgIC8vTk9URTogdXNlIGEgPHRlbXBsYXRlPiBlbGVtZW50IGFzIHRoZSBmcmFnbWVudCBjb250ZXh0IGlmIG5vIGNvbnRleHQgZWxlbWVudCB3YXMgcHJvdmlkZWQsXG4gICAgICAgIC8vc28gd2Ugd2lsbCBwYXJzZSBpbiBhIFwiZm9yZ2l2aW5nXCIgbWFubmVyXG4gICAgICAgIGZyYWdtZW50Q29udGV4dCAhPT0gbnVsbCAmJiBmcmFnbWVudENvbnRleHQgIT09IHZvaWQgMCA/IGZyYWdtZW50Q29udGV4dCA6IChmcmFnbWVudENvbnRleHQgPSBvcHRzLnRyZWVBZGFwdGVyLmNyZWF0ZUVsZW1lbnQoVE4uVEVNUExBVEUsIE5TLkhUTUwsIFtdKSk7XG4gICAgICAgIC8vTk9URTogY3JlYXRlIGEgZmFrZSBlbGVtZW50IHdoaWNoIHdpbGwgYmUgdXNlZCBhcyB0aGUgYGRvY3VtZW50YCBmb3IgZnJhZ21lbnQgcGFyc2luZy5cbiAgICAgICAgLy9UaGlzIGlzIGltcG9ydGFudCBmb3IganNkb20sIHdoZXJlIGEgbmV3IGBkb2N1bWVudGAgY2Fubm90IGJlIGNyZWF0ZWQuIFRoaXMgbGVkIHRvXG4gICAgICAgIC8vZnJhZ21lbnQgcGFyc2luZyBtZXNzaW5nIHdpdGggdGhlIG1haW4gYGRvY3VtZW50YC5cbiAgICAgICAgY29uc3QgZG9jdW1lbnRNb2NrID0gb3B0cy50cmVlQWRhcHRlci5jcmVhdGVFbGVtZW50KCdkb2N1bWVudG1vY2snLCBOUy5IVE1MLCBbXSk7XG4gICAgICAgIGNvbnN0IHBhcnNlciA9IG5ldyB0aGlzKG9wdHMsIGRvY3VtZW50TW9jaywgZnJhZ21lbnRDb250ZXh0KTtcbiAgICAgICAgaWYgKHBhcnNlci5mcmFnbWVudENvbnRleHRJRCA9PT0gJC5URU1QTEFURSkge1xuICAgICAgICAgICAgcGFyc2VyLnRtcGxJbnNlcnRpb25Nb2RlU3RhY2sudW5zaGlmdChJbnNlcnRpb25Nb2RlLklOX1RFTVBMQVRFKTtcbiAgICAgICAgfVxuICAgICAgICBwYXJzZXIuX2luaXRUb2tlbml6ZXJGb3JGcmFnbWVudFBhcnNpbmcoKTtcbiAgICAgICAgcGFyc2VyLl9pbnNlcnRGYWtlUm9vdEVsZW1lbnQoKTtcbiAgICAgICAgcGFyc2VyLl9yZXNldEluc2VydGlvbk1vZGUoKTtcbiAgICAgICAgcGFyc2VyLl9maW5kRm9ybUluRnJhZ21lbnRDb250ZXh0KCk7XG4gICAgICAgIHJldHVybiBwYXJzZXI7XG4gICAgfVxuICAgIGdldEZyYWdtZW50KCkge1xuICAgICAgICBjb25zdCByb290RWxlbWVudCA9IHRoaXMudHJlZUFkYXB0ZXIuZ2V0Rmlyc3RDaGlsZCh0aGlzLmRvY3VtZW50KTtcbiAgICAgICAgY29uc3QgZnJhZ21lbnQgPSB0aGlzLnRyZWVBZGFwdGVyLmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTtcbiAgICAgICAgdGhpcy5fYWRvcHROb2Rlcyhyb290RWxlbWVudCwgZnJhZ21lbnQpO1xuICAgICAgICByZXR1cm4gZnJhZ21lbnQ7XG4gICAgfVxuICAgIC8vRXJyb3JzXG4gICAgLyoqIEBpbnRlcm5hbCAqL1xuICAgIF9lcnIodG9rZW4sIGNvZGUsIGJlZm9yZVRva2VuKSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgaWYgKCF0aGlzLm9uUGFyc2VFcnJvcilcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgY29uc3QgbG9jID0gKF9hID0gdG9rZW4ubG9jYXRpb24pICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IEJBU0VfTE9DO1xuICAgICAgICBjb25zdCBlcnIgPSB7XG4gICAgICAgICAgICBjb2RlLFxuICAgICAgICAgICAgc3RhcnRMaW5lOiBsb2Muc3RhcnRMaW5lLFxuICAgICAgICAgICAgc3RhcnRDb2w6IGxvYy5zdGFydENvbCxcbiAgICAgICAgICAgIHN0YXJ0T2Zmc2V0OiBsb2Muc3RhcnRPZmZzZXQsXG4gICAgICAgICAgICBlbmRMaW5lOiBiZWZvcmVUb2tlbiA/IGxvYy5zdGFydExpbmUgOiBsb2MuZW5kTGluZSxcbiAgICAgICAgICAgIGVuZENvbDogYmVmb3JlVG9rZW4gPyBsb2Muc3RhcnRDb2wgOiBsb2MuZW5kQ29sLFxuICAgICAgICAgICAgZW5kT2Zmc2V0OiBiZWZvcmVUb2tlbiA/IGxvYy5zdGFydE9mZnNldCA6IGxvYy5lbmRPZmZzZXQsXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMub25QYXJzZUVycm9yKGVycik7XG4gICAgfVxuICAgIC8vU3RhY2sgZXZlbnRzXG4gICAgLyoqIEBpbnRlcm5hbCAqL1xuICAgIG9uSXRlbVB1c2gobm9kZSwgdGlkLCBpc1RvcCkge1xuICAgICAgICB2YXIgX2EsIF9iO1xuICAgICAgICAoX2IgPSAoX2EgPSB0aGlzLnRyZWVBZGFwdGVyKS5vbkl0ZW1QdXNoKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuY2FsbChfYSwgbm9kZSk7XG4gICAgICAgIGlmIChpc1RvcCAmJiB0aGlzLm9wZW5FbGVtZW50cy5zdGFja1RvcCA+IDApXG4gICAgICAgICAgICB0aGlzLl9zZXRDb250ZXh0TW9kZXMobm9kZSwgdGlkKTtcbiAgICB9XG4gICAgLyoqIEBpbnRlcm5hbCAqL1xuICAgIG9uSXRlbVBvcChub2RlLCBpc1RvcCkge1xuICAgICAgICB2YXIgX2EsIF9iO1xuICAgICAgICBpZiAodGhpcy5vcHRpb25zLnNvdXJjZUNvZGVMb2NhdGlvbkluZm8pIHtcbiAgICAgICAgICAgIHRoaXMuX3NldEVuZExvY2F0aW9uKG5vZGUsIHRoaXMuY3VycmVudFRva2VuKTtcbiAgICAgICAgfVxuICAgICAgICAoX2IgPSAoX2EgPSB0aGlzLnRyZWVBZGFwdGVyKS5vbkl0ZW1Qb3ApID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5jYWxsKF9hLCBub2RlLCB0aGlzLm9wZW5FbGVtZW50cy5jdXJyZW50KTtcbiAgICAgICAgaWYgKGlzVG9wKSB7XG4gICAgICAgICAgICBsZXQgY3VycmVudDtcbiAgICAgICAgICAgIGxldCBjdXJyZW50VGFnSWQ7XG4gICAgICAgICAgICBpZiAodGhpcy5vcGVuRWxlbWVudHMuc3RhY2tUb3AgPT09IDAgJiYgdGhpcy5mcmFnbWVudENvbnRleHQpIHtcbiAgICAgICAgICAgICAgICBjdXJyZW50ID0gdGhpcy5mcmFnbWVudENvbnRleHQ7XG4gICAgICAgICAgICAgICAgY3VycmVudFRhZ0lkID0gdGhpcy5mcmFnbWVudENvbnRleHRJRDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICh7IGN1cnJlbnQsIGN1cnJlbnRUYWdJZCB9ID0gdGhpcy5vcGVuRWxlbWVudHMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5fc2V0Q29udGV4dE1vZGVzKGN1cnJlbnQsIGN1cnJlbnRUYWdJZCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgX3NldENvbnRleHRNb2RlcyhjdXJyZW50LCB0aWQpIHtcbiAgICAgICAgY29uc3QgaXNIVE1MID0gY3VycmVudCA9PT0gdGhpcy5kb2N1bWVudCB8fCB0aGlzLnRyZWVBZGFwdGVyLmdldE5hbWVzcGFjZVVSSShjdXJyZW50KSA9PT0gTlMuSFRNTDtcbiAgICAgICAgdGhpcy5jdXJyZW50Tm90SW5IVE1MID0gIWlzSFRNTDtcbiAgICAgICAgdGhpcy50b2tlbml6ZXIuaW5Gb3JlaWduTm9kZSA9ICFpc0hUTUwgJiYgIXRoaXMuX2lzSW50ZWdyYXRpb25Qb2ludCh0aWQsIGN1cnJlbnQpO1xuICAgIH1cbiAgICAvKiogQHByb3RlY3RlZCAqL1xuICAgIF9zd2l0Y2hUb1RleHRQYXJzaW5nKGN1cnJlbnRUb2tlbiwgbmV4dFRva2VuaXplclN0YXRlKSB7XG4gICAgICAgIHRoaXMuX2luc2VydEVsZW1lbnQoY3VycmVudFRva2VuLCBOUy5IVE1MKTtcbiAgICAgICAgdGhpcy50b2tlbml6ZXIuc3RhdGUgPSBuZXh0VG9rZW5pemVyU3RhdGU7XG4gICAgICAgIHRoaXMub3JpZ2luYWxJbnNlcnRpb25Nb2RlID0gdGhpcy5pbnNlcnRpb25Nb2RlO1xuICAgICAgICB0aGlzLmluc2VydGlvbk1vZGUgPSBJbnNlcnRpb25Nb2RlLlRFWFQ7XG4gICAgfVxuICAgIHN3aXRjaFRvUGxhaW50ZXh0UGFyc2luZygpIHtcbiAgICAgICAgdGhpcy5pbnNlcnRpb25Nb2RlID0gSW5zZXJ0aW9uTW9kZS5URVhUO1xuICAgICAgICB0aGlzLm9yaWdpbmFsSW5zZXJ0aW9uTW9kZSA9IEluc2VydGlvbk1vZGUuSU5fQk9EWTtcbiAgICAgICAgdGhpcy50b2tlbml6ZXIuc3RhdGUgPSBUb2tlbml6ZXJNb2RlLlBMQUlOVEVYVDtcbiAgICB9XG4gICAgLy9GcmFnbWVudCBwYXJzaW5nXG4gICAgLyoqIEBwcm90ZWN0ZWQgKi9cbiAgICBfZ2V0QWRqdXN0ZWRDdXJyZW50RWxlbWVudCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMub3BlbkVsZW1lbnRzLnN0YWNrVG9wID09PSAwICYmIHRoaXMuZnJhZ21lbnRDb250ZXh0XG4gICAgICAgICAgICA/IHRoaXMuZnJhZ21lbnRDb250ZXh0XG4gICAgICAgICAgICA6IHRoaXMub3BlbkVsZW1lbnRzLmN1cnJlbnQ7XG4gICAgfVxuICAgIC8qKiBAcHJvdGVjdGVkICovXG4gICAgX2ZpbmRGb3JtSW5GcmFnbWVudENvbnRleHQoKSB7XG4gICAgICAgIGxldCBub2RlID0gdGhpcy5mcmFnbWVudENvbnRleHQ7XG4gICAgICAgIHdoaWxlIChub2RlKSB7XG4gICAgICAgICAgICBpZiAodGhpcy50cmVlQWRhcHRlci5nZXRUYWdOYW1lKG5vZGUpID09PSBUTi5GT1JNKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5mb3JtRWxlbWVudCA9IG5vZGU7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBub2RlID0gdGhpcy50cmVlQWRhcHRlci5nZXRQYXJlbnROb2RlKG5vZGUpO1xuICAgICAgICB9XG4gICAgfVxuICAgIF9pbml0VG9rZW5pemVyRm9yRnJhZ21lbnRQYXJzaW5nKCkge1xuICAgICAgICBpZiAoIXRoaXMuZnJhZ21lbnRDb250ZXh0IHx8IHRoaXMudHJlZUFkYXB0ZXIuZ2V0TmFtZXNwYWNlVVJJKHRoaXMuZnJhZ21lbnRDb250ZXh0KSAhPT0gTlMuSFRNTCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHN3aXRjaCAodGhpcy5mcmFnbWVudENvbnRleHRJRCkge1xuICAgICAgICAgICAgY2FzZSAkLlRJVExFOlxuICAgICAgICAgICAgY2FzZSAkLlRFWFRBUkVBOiB7XG4gICAgICAgICAgICAgICAgdGhpcy50b2tlbml6ZXIuc3RhdGUgPSBUb2tlbml6ZXJNb2RlLlJDREFUQTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgJC5TVFlMRTpcbiAgICAgICAgICAgIGNhc2UgJC5YTVA6XG4gICAgICAgICAgICBjYXNlICQuSUZSQU1FOlxuICAgICAgICAgICAgY2FzZSAkLk5PRU1CRUQ6XG4gICAgICAgICAgICBjYXNlICQuTk9GUkFNRVM6XG4gICAgICAgICAgICBjYXNlICQuTk9TQ1JJUFQ6IHtcbiAgICAgICAgICAgICAgICB0aGlzLnRva2VuaXplci5zdGF0ZSA9IFRva2VuaXplck1vZGUuUkFXVEVYVDtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgJC5TQ1JJUFQ6IHtcbiAgICAgICAgICAgICAgICB0aGlzLnRva2VuaXplci5zdGF0ZSA9IFRva2VuaXplck1vZGUuU0NSSVBUX0RBVEE7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlICQuUExBSU5URVhUOiB7XG4gICAgICAgICAgICAgICAgdGhpcy50b2tlbml6ZXIuc3RhdGUgPSBUb2tlbml6ZXJNb2RlLlBMQUlOVEVYVDtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAvLyBEbyBub3RoaW5nXG4gICAgICAgIH1cbiAgICB9XG4gICAgLy9UcmVlIG11dGF0aW9uXG4gICAgLyoqIEBwcm90ZWN0ZWQgKi9cbiAgICBfc2V0RG9jdW1lbnRUeXBlKHRva2VuKSB7XG4gICAgICAgIGNvbnN0IG5hbWUgPSB0b2tlbi5uYW1lIHx8ICcnO1xuICAgICAgICBjb25zdCBwdWJsaWNJZCA9IHRva2VuLnB1YmxpY0lkIHx8ICcnO1xuICAgICAgICBjb25zdCBzeXN0ZW1JZCA9IHRva2VuLnN5c3RlbUlkIHx8ICcnO1xuICAgICAgICB0aGlzLnRyZWVBZGFwdGVyLnNldERvY3VtZW50VHlwZSh0aGlzLmRvY3VtZW50LCBuYW1lLCBwdWJsaWNJZCwgc3lzdGVtSWQpO1xuICAgICAgICBpZiAodG9rZW4ubG9jYXRpb24pIHtcbiAgICAgICAgICAgIGNvbnN0IGRvY3VtZW50Q2hpbGRyZW4gPSB0aGlzLnRyZWVBZGFwdGVyLmdldENoaWxkTm9kZXModGhpcy5kb2N1bWVudCk7XG4gICAgICAgICAgICBjb25zdCBkb2NUeXBlTm9kZSA9IGRvY3VtZW50Q2hpbGRyZW4uZmluZCgobm9kZSkgPT4gdGhpcy50cmVlQWRhcHRlci5pc0RvY3VtZW50VHlwZU5vZGUobm9kZSkpO1xuICAgICAgICAgICAgaWYgKGRvY1R5cGVOb2RlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy50cmVlQWRhcHRlci5zZXROb2RlU291cmNlQ29kZUxvY2F0aW9uKGRvY1R5cGVOb2RlLCB0b2tlbi5sb2NhdGlvbik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqIEBwcm90ZWN0ZWQgKi9cbiAgICBfYXR0YWNoRWxlbWVudFRvVHJlZShlbGVtZW50LCBsb2NhdGlvbikge1xuICAgICAgICBpZiAodGhpcy5vcHRpb25zLnNvdXJjZUNvZGVMb2NhdGlvbkluZm8pIHtcbiAgICAgICAgICAgIGNvbnN0IGxvYyA9IGxvY2F0aW9uICYmIHtcbiAgICAgICAgICAgICAgICAuLi5sb2NhdGlvbixcbiAgICAgICAgICAgICAgICBzdGFydFRhZzogbG9jYXRpb24sXG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgdGhpcy50cmVlQWRhcHRlci5zZXROb2RlU291cmNlQ29kZUxvY2F0aW9uKGVsZW1lbnQsIGxvYyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuX3Nob3VsZEZvc3RlclBhcmVudE9uSW5zZXJ0aW9uKCkpIHtcbiAgICAgICAgICAgIHRoaXMuX2Zvc3RlclBhcmVudEVsZW1lbnQoZWxlbWVudCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBwYXJlbnQgPSB0aGlzLm9wZW5FbGVtZW50cy5jdXJyZW50VG1wbENvbnRlbnRPck5vZGU7XG4gICAgICAgICAgICB0aGlzLnRyZWVBZGFwdGVyLmFwcGVuZENoaWxkKHBhcmVudCwgZWxlbWVudCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogRm9yIHNlbGYtY2xvc2luZyB0YWdzLiBBZGQgYW4gZWxlbWVudCB0byB0aGUgdHJlZSwgYnV0IHNraXAgYWRkaW5nIGl0XG4gICAgICogdG8gdGhlIHN0YWNrLlxuICAgICAqL1xuICAgIC8qKiBAcHJvdGVjdGVkICovXG4gICAgX2FwcGVuZEVsZW1lbnQodG9rZW4sIG5hbWVzcGFjZVVSSSkge1xuICAgICAgICBjb25zdCBlbGVtZW50ID0gdGhpcy50cmVlQWRhcHRlci5jcmVhdGVFbGVtZW50KHRva2VuLnRhZ05hbWUsIG5hbWVzcGFjZVVSSSwgdG9rZW4uYXR0cnMpO1xuICAgICAgICB0aGlzLl9hdHRhY2hFbGVtZW50VG9UcmVlKGVsZW1lbnQsIHRva2VuLmxvY2F0aW9uKTtcbiAgICB9XG4gICAgLyoqIEBwcm90ZWN0ZWQgKi9cbiAgICBfaW5zZXJ0RWxlbWVudCh0b2tlbiwgbmFtZXNwYWNlVVJJKSB7XG4gICAgICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLnRyZWVBZGFwdGVyLmNyZWF0ZUVsZW1lbnQodG9rZW4udGFnTmFtZSwgbmFtZXNwYWNlVVJJLCB0b2tlbi5hdHRycyk7XG4gICAgICAgIHRoaXMuX2F0dGFjaEVsZW1lbnRUb1RyZWUoZWxlbWVudCwgdG9rZW4ubG9jYXRpb24pO1xuICAgICAgICB0aGlzLm9wZW5FbGVtZW50cy5wdXNoKGVsZW1lbnQsIHRva2VuLnRhZ0lEKTtcbiAgICB9XG4gICAgLyoqIEBwcm90ZWN0ZWQgKi9cbiAgICBfaW5zZXJ0RmFrZUVsZW1lbnQodGFnTmFtZSwgdGFnSUQpIHtcbiAgICAgICAgY29uc3QgZWxlbWVudCA9IHRoaXMudHJlZUFkYXB0ZXIuY3JlYXRlRWxlbWVudCh0YWdOYW1lLCBOUy5IVE1MLCBbXSk7XG4gICAgICAgIHRoaXMuX2F0dGFjaEVsZW1lbnRUb1RyZWUoZWxlbWVudCwgbnVsbCk7XG4gICAgICAgIHRoaXMub3BlbkVsZW1lbnRzLnB1c2goZWxlbWVudCwgdGFnSUQpO1xuICAgIH1cbiAgICAvKiogQHByb3RlY3RlZCAqL1xuICAgIF9pbnNlcnRUZW1wbGF0ZSh0b2tlbikge1xuICAgICAgICBjb25zdCB0bXBsID0gdGhpcy50cmVlQWRhcHRlci5jcmVhdGVFbGVtZW50KHRva2VuLnRhZ05hbWUsIE5TLkhUTUwsIHRva2VuLmF0dHJzKTtcbiAgICAgICAgY29uc3QgY29udGVudCA9IHRoaXMudHJlZUFkYXB0ZXIuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpO1xuICAgICAgICB0aGlzLnRyZWVBZGFwdGVyLnNldFRlbXBsYXRlQ29udGVudCh0bXBsLCBjb250ZW50KTtcbiAgICAgICAgdGhpcy5fYXR0YWNoRWxlbWVudFRvVHJlZSh0bXBsLCB0b2tlbi5sb2NhdGlvbik7XG4gICAgICAgIHRoaXMub3BlbkVsZW1lbnRzLnB1c2godG1wbCwgdG9rZW4udGFnSUQpO1xuICAgICAgICBpZiAodGhpcy5vcHRpb25zLnNvdXJjZUNvZGVMb2NhdGlvbkluZm8pXG4gICAgICAgICAgICB0aGlzLnRyZWVBZGFwdGVyLnNldE5vZGVTb3VyY2VDb2RlTG9jYXRpb24oY29udGVudCwgbnVsbCk7XG4gICAgfVxuICAgIC8qKiBAcHJvdGVjdGVkICovXG4gICAgX2luc2VydEZha2VSb290RWxlbWVudCgpIHtcbiAgICAgICAgY29uc3QgZWxlbWVudCA9IHRoaXMudHJlZUFkYXB0ZXIuY3JlYXRlRWxlbWVudChUTi5IVE1MLCBOUy5IVE1MLCBbXSk7XG4gICAgICAgIGlmICh0aGlzLm9wdGlvbnMuc291cmNlQ29kZUxvY2F0aW9uSW5mbylcbiAgICAgICAgICAgIHRoaXMudHJlZUFkYXB0ZXIuc2V0Tm9kZVNvdXJjZUNvZGVMb2NhdGlvbihlbGVtZW50LCBudWxsKTtcbiAgICAgICAgdGhpcy50cmVlQWRhcHRlci5hcHBlbmRDaGlsZCh0aGlzLm9wZW5FbGVtZW50cy5jdXJyZW50LCBlbGVtZW50KTtcbiAgICAgICAgdGhpcy5vcGVuRWxlbWVudHMucHVzaChlbGVtZW50LCAkLkhUTUwpO1xuICAgIH1cbiAgICAvKiogQHByb3RlY3RlZCAqL1xuICAgIF9hcHBlbmRDb21tZW50Tm9kZSh0b2tlbiwgcGFyZW50KSB7XG4gICAgICAgIGNvbnN0IGNvbW1lbnROb2RlID0gdGhpcy50cmVlQWRhcHRlci5jcmVhdGVDb21tZW50Tm9kZSh0b2tlbi5kYXRhKTtcbiAgICAgICAgdGhpcy50cmVlQWRhcHRlci5hcHBlbmRDaGlsZChwYXJlbnQsIGNvbW1lbnROb2RlKTtcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5zb3VyY2VDb2RlTG9jYXRpb25JbmZvKSB7XG4gICAgICAgICAgICB0aGlzLnRyZWVBZGFwdGVyLnNldE5vZGVTb3VyY2VDb2RlTG9jYXRpb24oY29tbWVudE5vZGUsIHRva2VuLmxvY2F0aW9uKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKiogQHByb3RlY3RlZCAqL1xuICAgIF9pbnNlcnRDaGFyYWN0ZXJzKHRva2VuKSB7XG4gICAgICAgIGxldCBwYXJlbnQ7XG4gICAgICAgIGxldCBiZWZvcmVFbGVtZW50O1xuICAgICAgICBpZiAodGhpcy5fc2hvdWxkRm9zdGVyUGFyZW50T25JbnNlcnRpb24oKSkge1xuICAgICAgICAgICAgKHsgcGFyZW50LCBiZWZvcmVFbGVtZW50IH0gPSB0aGlzLl9maW5kRm9zdGVyUGFyZW50aW5nTG9jYXRpb24oKSk7XG4gICAgICAgICAgICBpZiAoYmVmb3JlRWxlbWVudCkge1xuICAgICAgICAgICAgICAgIHRoaXMudHJlZUFkYXB0ZXIuaW5zZXJ0VGV4dEJlZm9yZShwYXJlbnQsIHRva2VuLmNoYXJzLCBiZWZvcmVFbGVtZW50KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMudHJlZUFkYXB0ZXIuaW5zZXJ0VGV4dChwYXJlbnQsIHRva2VuLmNoYXJzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHBhcmVudCA9IHRoaXMub3BlbkVsZW1lbnRzLmN1cnJlbnRUbXBsQ29udGVudE9yTm9kZTtcbiAgICAgICAgICAgIHRoaXMudHJlZUFkYXB0ZXIuaW5zZXJ0VGV4dChwYXJlbnQsIHRva2VuLmNoYXJzKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRva2VuLmxvY2F0aW9uKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICBjb25zdCBzaWJsaW5ncyA9IHRoaXMudHJlZUFkYXB0ZXIuZ2V0Q2hpbGROb2RlcyhwYXJlbnQpO1xuICAgICAgICBjb25zdCB0ZXh0Tm9kZUlkeCA9IGJlZm9yZUVsZW1lbnQgPyBzaWJsaW5ncy5sYXN0SW5kZXhPZihiZWZvcmVFbGVtZW50KSA6IHNpYmxpbmdzLmxlbmd0aDtcbiAgICAgICAgY29uc3QgdGV4dE5vZGUgPSBzaWJsaW5nc1t0ZXh0Tm9kZUlkeCAtIDFdO1xuICAgICAgICAvL05PVEU6IGlmIHdlIGhhdmUgYSBsb2NhdGlvbiBhc3NpZ25lZCBieSBhbm90aGVyIHRva2VuLCB0aGVuIGp1c3QgdXBkYXRlIHRoZSBlbmQgcG9zaXRpb25cbiAgICAgICAgY29uc3QgdG5Mb2MgPSB0aGlzLnRyZWVBZGFwdGVyLmdldE5vZGVTb3VyY2VDb2RlTG9jYXRpb24odGV4dE5vZGUpO1xuICAgICAgICBpZiAodG5Mb2MpIHtcbiAgICAgICAgICAgIGNvbnN0IHsgZW5kTGluZSwgZW5kQ29sLCBlbmRPZmZzZXQgfSA9IHRva2VuLmxvY2F0aW9uO1xuICAgICAgICAgICAgdGhpcy50cmVlQWRhcHRlci51cGRhdGVOb2RlU291cmNlQ29kZUxvY2F0aW9uKHRleHROb2RlLCB7IGVuZExpbmUsIGVuZENvbCwgZW5kT2Zmc2V0IH0pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHRoaXMub3B0aW9ucy5zb3VyY2VDb2RlTG9jYXRpb25JbmZvKSB7XG4gICAgICAgICAgICB0aGlzLnRyZWVBZGFwdGVyLnNldE5vZGVTb3VyY2VDb2RlTG9jYXRpb24odGV4dE5vZGUsIHRva2VuLmxvY2F0aW9uKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKiogQHByb3RlY3RlZCAqL1xuICAgIF9hZG9wdE5vZGVzKGRvbm9yLCByZWNpcGllbnQpIHtcbiAgICAgICAgZm9yIChsZXQgY2hpbGQgPSB0aGlzLnRyZWVBZGFwdGVyLmdldEZpcnN0Q2hpbGQoZG9ub3IpOyBjaGlsZDsgY2hpbGQgPSB0aGlzLnRyZWVBZGFwdGVyLmdldEZpcnN0Q2hpbGQoZG9ub3IpKSB7XG4gICAgICAgICAgICB0aGlzLnRyZWVBZGFwdGVyLmRldGFjaE5vZGUoY2hpbGQpO1xuICAgICAgICAgICAgdGhpcy50cmVlQWRhcHRlci5hcHBlbmRDaGlsZChyZWNpcGllbnQsIGNoaWxkKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKiogQHByb3RlY3RlZCAqL1xuICAgIF9zZXRFbmRMb2NhdGlvbihlbGVtZW50LCBjbG9zaW5nVG9rZW4pIHtcbiAgICAgICAgaWYgKHRoaXMudHJlZUFkYXB0ZXIuZ2V0Tm9kZVNvdXJjZUNvZGVMb2NhdGlvbihlbGVtZW50KSAmJiBjbG9zaW5nVG9rZW4ubG9jYXRpb24pIHtcbiAgICAgICAgICAgIGNvbnN0IGN0TG9jID0gY2xvc2luZ1Rva2VuLmxvY2F0aW9uO1xuICAgICAgICAgICAgY29uc3QgdG4gPSB0aGlzLnRyZWVBZGFwdGVyLmdldFRhZ05hbWUoZWxlbWVudCk7XG4gICAgICAgICAgICBjb25zdCBlbmRMb2MgPSBcbiAgICAgICAgICAgIC8vIE5PVEU6IEZvciBjYXNlcyBsaWtlIDxwPiA8cD4gPC9wPiAtIEZpcnN0ICdwJyBjbG9zZXMgd2l0aG91dCBhIGNsb3NpbmdcbiAgICAgICAgICAgIC8vIHRhZyBhbmQgZm9yIGNhc2VzIGxpa2UgPHRkPiA8cD4gPC90ZD4gLSAncCcgY2xvc2VzIHdpdGhvdXQgYSBjbG9zaW5nIHRhZy5cbiAgICAgICAgICAgIGNsb3NpbmdUb2tlbi50eXBlID09PSBUb2tlblR5cGUuRU5EX1RBRyAmJiB0biA9PT0gY2xvc2luZ1Rva2VuLnRhZ05hbWVcbiAgICAgICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICAgICAgZW5kVGFnOiB7IC4uLmN0TG9jIH0sXG4gICAgICAgICAgICAgICAgICAgIGVuZExpbmU6IGN0TG9jLmVuZExpbmUsXG4gICAgICAgICAgICAgICAgICAgIGVuZENvbDogY3RMb2MuZW5kQ29sLFxuICAgICAgICAgICAgICAgICAgICBlbmRPZmZzZXQ6IGN0TG9jLmVuZE9mZnNldCxcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgOiB7XG4gICAgICAgICAgICAgICAgICAgIGVuZExpbmU6IGN0TG9jLnN0YXJ0TGluZSxcbiAgICAgICAgICAgICAgICAgICAgZW5kQ29sOiBjdExvYy5zdGFydENvbCxcbiAgICAgICAgICAgICAgICAgICAgZW5kT2Zmc2V0OiBjdExvYy5zdGFydE9mZnNldCxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgdGhpcy50cmVlQWRhcHRlci51cGRhdGVOb2RlU291cmNlQ29kZUxvY2F0aW9uKGVsZW1lbnQsIGVuZExvYyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy9Ub2tlbiBwcm9jZXNzaW5nXG4gICAgc2hvdWxkUHJvY2Vzc1N0YXJ0VGFnVG9rZW5JbkZvcmVpZ25Db250ZW50KHRva2VuKSB7XG4gICAgICAgIC8vIENoZWNrIHRoYXQgbmVpdGhlciBjdXJyZW50ID09PSBkb2N1bWVudCwgb3IgbnMgPT09IE5TLkhUTUxcbiAgICAgICAgaWYgKCF0aGlzLmN1cnJlbnROb3RJbkhUTUwpXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIGxldCBjdXJyZW50O1xuICAgICAgICBsZXQgY3VycmVudFRhZ0lkO1xuICAgICAgICBpZiAodGhpcy5vcGVuRWxlbWVudHMuc3RhY2tUb3AgPT09IDAgJiYgdGhpcy5mcmFnbWVudENvbnRleHQpIHtcbiAgICAgICAgICAgIGN1cnJlbnQgPSB0aGlzLmZyYWdtZW50Q29udGV4dDtcbiAgICAgICAgICAgIGN1cnJlbnRUYWdJZCA9IHRoaXMuZnJhZ21lbnRDb250ZXh0SUQ7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAoeyBjdXJyZW50LCBjdXJyZW50VGFnSWQgfSA9IHRoaXMub3BlbkVsZW1lbnRzKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodG9rZW4udGFnSUQgPT09ICQuU1ZHICYmXG4gICAgICAgICAgICB0aGlzLnRyZWVBZGFwdGVyLmdldFRhZ05hbWUoY3VycmVudCkgPT09IFROLkFOTk9UQVRJT05fWE1MICYmXG4gICAgICAgICAgICB0aGlzLnRyZWVBZGFwdGVyLmdldE5hbWVzcGFjZVVSSShjdXJyZW50KSA9PT0gTlMuTUFUSE1MKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgLy8gQ2hlY2sgdGhhdCBgY3VycmVudGAgaXMgbm90IGFuIGludGVncmF0aW9uIHBvaW50IGZvciBIVE1MIG9yIE1hdGhNTCBlbGVtZW50cy5cbiAgICAgICAgdGhpcy50b2tlbml6ZXIuaW5Gb3JlaWduTm9kZSB8fFxuICAgICAgICAgICAgLy8gSWYgaXQgX2lzXyBhbiBpbnRlZ3JhdGlvbiBwb2ludCwgdGhlbiB3ZSBtaWdodCBoYXZlIHRvIGNoZWNrIHRoYXQgaXQgaXMgbm90IGFuIEhUTUxcbiAgICAgICAgICAgIC8vIGludGVncmF0aW9uIHBvaW50LlxuICAgICAgICAgICAgKCh0b2tlbi50YWdJRCA9PT0gJC5NR0xZUEggfHwgdG9rZW4udGFnSUQgPT09ICQuTUFMSUdOTUFSSykgJiZcbiAgICAgICAgICAgICAgICAhdGhpcy5faXNJbnRlZ3JhdGlvblBvaW50KGN1cnJlbnRUYWdJZCwgY3VycmVudCwgTlMuSFRNTCkpKTtcbiAgICB9XG4gICAgLyoqIEBwcm90ZWN0ZWQgKi9cbiAgICBfcHJvY2Vzc1Rva2VuKHRva2VuKSB7XG4gICAgICAgIHN3aXRjaCAodG9rZW4udHlwZSkge1xuICAgICAgICAgICAgY2FzZSBUb2tlblR5cGUuQ0hBUkFDVEVSOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5vbkNoYXJhY3Rlcih0b2tlbik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFRva2VuVHlwZS5OVUxMX0NIQVJBQ1RFUjoge1xuICAgICAgICAgICAgICAgIHRoaXMub25OdWxsQ2hhcmFjdGVyKHRva2VuKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgVG9rZW5UeXBlLkNPTU1FTlQ6IHtcbiAgICAgICAgICAgICAgICB0aGlzLm9uQ29tbWVudCh0b2tlbik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFRva2VuVHlwZS5ET0NUWVBFOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5vbkRvY3R5cGUodG9rZW4pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBUb2tlblR5cGUuU1RBUlRfVEFHOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5fcHJvY2Vzc1N0YXJ0VGFnKHRva2VuKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgVG9rZW5UeXBlLkVORF9UQUc6IHtcbiAgICAgICAgICAgICAgICB0aGlzLm9uRW5kVGFnKHRva2VuKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgVG9rZW5UeXBlLkVPRjoge1xuICAgICAgICAgICAgICAgIHRoaXMub25Fb2YodG9rZW4pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBUb2tlblR5cGUuV0hJVEVTUEFDRV9DSEFSQUNURVI6IHtcbiAgICAgICAgICAgICAgICB0aGlzLm9uV2hpdGVzcGFjZUNoYXJhY3Rlcih0b2tlbik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy9JbnRlZ3JhdGlvbiBwb2ludHNcbiAgICAvKiogQHByb3RlY3RlZCAqL1xuICAgIF9pc0ludGVncmF0aW9uUG9pbnQodGlkLCBlbGVtZW50LCBmb3JlaWduTlMpIHtcbiAgICAgICAgY29uc3QgbnMgPSB0aGlzLnRyZWVBZGFwdGVyLmdldE5hbWVzcGFjZVVSSShlbGVtZW50KTtcbiAgICAgICAgY29uc3QgYXR0cnMgPSB0aGlzLnRyZWVBZGFwdGVyLmdldEF0dHJMaXN0KGVsZW1lbnQpO1xuICAgICAgICByZXR1cm4gZm9yZWlnbkNvbnRlbnQuaXNJbnRlZ3JhdGlvblBvaW50KHRpZCwgbnMsIGF0dHJzLCBmb3JlaWduTlMpO1xuICAgIH1cbiAgICAvL0FjdGl2ZSBmb3JtYXR0aW5nIGVsZW1lbnRzIHJlY29uc3RydWN0aW9uXG4gICAgLyoqIEBwcm90ZWN0ZWQgKi9cbiAgICBfcmVjb25zdHJ1Y3RBY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMoKSB7XG4gICAgICAgIGNvbnN0IGxpc3RMZW5ndGggPSB0aGlzLmFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cy5lbnRyaWVzLmxlbmd0aDtcbiAgICAgICAgaWYgKGxpc3RMZW5ndGgpIHtcbiAgICAgICAgICAgIGNvbnN0IGVuZEluZGV4ID0gdGhpcy5hY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMuZW50cmllcy5maW5kSW5kZXgoKGVudHJ5KSA9PiBlbnRyeS50eXBlID09PSBFbnRyeVR5cGUuTWFya2VyIHx8IHRoaXMub3BlbkVsZW1lbnRzLmNvbnRhaW5zKGVudHJ5LmVsZW1lbnQpKTtcbiAgICAgICAgICAgIGNvbnN0IHVub3BlbklkeCA9IGVuZEluZGV4IDwgMCA/IGxpc3RMZW5ndGggLSAxIDogZW5kSW5kZXggLSAxO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IHVub3BlbklkeDsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgICAgICAgICBjb25zdCBlbnRyeSA9IHRoaXMuYWN0aXZlRm9ybWF0dGluZ0VsZW1lbnRzLmVudHJpZXNbaV07XG4gICAgICAgICAgICAgICAgdGhpcy5faW5zZXJ0RWxlbWVudChlbnRyeS50b2tlbiwgdGhpcy50cmVlQWRhcHRlci5nZXROYW1lc3BhY2VVUkkoZW50cnkuZWxlbWVudCkpO1xuICAgICAgICAgICAgICAgIGVudHJ5LmVsZW1lbnQgPSB0aGlzLm9wZW5FbGVtZW50cy5jdXJyZW50O1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIC8vQ2xvc2UgZWxlbWVudHNcbiAgICAvKiogQHByb3RlY3RlZCAqL1xuICAgIF9jbG9zZVRhYmxlQ2VsbCgpIHtcbiAgICAgICAgdGhpcy5vcGVuRWxlbWVudHMuZ2VuZXJhdGVJbXBsaWVkRW5kVGFncygpO1xuICAgICAgICB0aGlzLm9wZW5FbGVtZW50cy5wb3BVbnRpbFRhYmxlQ2VsbFBvcHBlZCgpO1xuICAgICAgICB0aGlzLmFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cy5jbGVhclRvTGFzdE1hcmtlcigpO1xuICAgICAgICB0aGlzLmluc2VydGlvbk1vZGUgPSBJbnNlcnRpb25Nb2RlLklOX1JPVztcbiAgICB9XG4gICAgLyoqIEBwcm90ZWN0ZWQgKi9cbiAgICBfY2xvc2VQRWxlbWVudCgpIHtcbiAgICAgICAgdGhpcy5vcGVuRWxlbWVudHMuZ2VuZXJhdGVJbXBsaWVkRW5kVGFnc1dpdGhFeGNsdXNpb24oJC5QKTtcbiAgICAgICAgdGhpcy5vcGVuRWxlbWVudHMucG9wVW50aWxUYWdOYW1lUG9wcGVkKCQuUCk7XG4gICAgfVxuICAgIC8vSW5zZXJ0aW9uIG1vZGVzXG4gICAgLyoqIEBwcm90ZWN0ZWQgKi9cbiAgICBfcmVzZXRJbnNlcnRpb25Nb2RlKCkge1xuICAgICAgICBmb3IgKGxldCBpID0gdGhpcy5vcGVuRWxlbWVudHMuc3RhY2tUb3A7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgICAgICAvL0luc2VydGlvbiBtb2RlIHJlc2V0IG1hcFxuICAgICAgICAgICAgc3dpdGNoIChpID09PSAwICYmIHRoaXMuZnJhZ21lbnRDb250ZXh0ID8gdGhpcy5mcmFnbWVudENvbnRleHRJRCA6IHRoaXMub3BlbkVsZW1lbnRzLnRhZ0lEc1tpXSkge1xuICAgICAgICAgICAgICAgIGNhc2UgJC5UUjoge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmluc2VydGlvbk1vZGUgPSBJbnNlcnRpb25Nb2RlLklOX1JPVztcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXNlICQuVEJPRFk6XG4gICAgICAgICAgICAgICAgY2FzZSAkLlRIRUFEOlxuICAgICAgICAgICAgICAgIGNhc2UgJC5URk9PVDoge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmluc2VydGlvbk1vZGUgPSBJbnNlcnRpb25Nb2RlLklOX1RBQkxFX0JPRFk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FzZSAkLkNBUFRJT046IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pbnNlcnRpb25Nb2RlID0gSW5zZXJ0aW9uTW9kZS5JTl9DQVBUSU9OO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhc2UgJC5DT0xHUk9VUDoge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmluc2VydGlvbk1vZGUgPSBJbnNlcnRpb25Nb2RlLklOX0NPTFVNTl9HUk9VUDtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXNlICQuVEFCTEU6IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pbnNlcnRpb25Nb2RlID0gSW5zZXJ0aW9uTW9kZS5JTl9UQUJMRTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXNlICQuQk9EWToge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmluc2VydGlvbk1vZGUgPSBJbnNlcnRpb25Nb2RlLklOX0JPRFk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FzZSAkLkZSQU1FU0VUOiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaW5zZXJ0aW9uTW9kZSA9IEluc2VydGlvbk1vZGUuSU5fRlJBTUVTRVQ7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FzZSAkLlNFTEVDVDoge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9yZXNldEluc2VydGlvbk1vZGVGb3JTZWxlY3QoaSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FzZSAkLlRFTVBMQVRFOiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaW5zZXJ0aW9uTW9kZSA9IHRoaXMudG1wbEluc2VydGlvbk1vZGVTdGFja1swXTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXNlICQuSFRNTDoge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmluc2VydGlvbk1vZGUgPSB0aGlzLmhlYWRFbGVtZW50ID8gSW5zZXJ0aW9uTW9kZS5BRlRFUl9IRUFEIDogSW5zZXJ0aW9uTW9kZS5CRUZPUkVfSEVBRDtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXNlICQuVEQ6XG4gICAgICAgICAgICAgICAgY2FzZSAkLlRIOiB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pbnNlcnRpb25Nb2RlID0gSW5zZXJ0aW9uTW9kZS5JTl9DRUxMO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjYXNlICQuSEVBRDoge1xuICAgICAgICAgICAgICAgICAgICBpZiAoaSA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaW5zZXJ0aW9uTW9kZSA9IEluc2VydGlvbk1vZGUuSU5fSEVBRDtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5pbnNlcnRpb25Nb2RlID0gSW5zZXJ0aW9uTW9kZS5JTl9CT0RZO1xuICAgIH1cbiAgICAvKiogQHByb3RlY3RlZCAqL1xuICAgIF9yZXNldEluc2VydGlvbk1vZGVGb3JTZWxlY3Qoc2VsZWN0SWR4KSB7XG4gICAgICAgIGlmIChzZWxlY3RJZHggPiAwKSB7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gc2VsZWN0SWR4IC0gMTsgaSA+IDA7IGktLSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHRuID0gdGhpcy5vcGVuRWxlbWVudHMudGFnSURzW2ldO1xuICAgICAgICAgICAgICAgIGlmICh0biA9PT0gJC5URU1QTEFURSkge1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAodG4gPT09ICQuVEFCTEUpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pbnNlcnRpb25Nb2RlID0gSW5zZXJ0aW9uTW9kZS5JTl9TRUxFQ1RfSU5fVEFCTEU7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5pbnNlcnRpb25Nb2RlID0gSW5zZXJ0aW9uTW9kZS5JTl9TRUxFQ1Q7XG4gICAgfVxuICAgIC8vRm9zdGVyIHBhcmVudGluZ1xuICAgIC8qKiBAcHJvdGVjdGVkICovXG4gICAgX2lzRWxlbWVudENhdXNlc0Zvc3RlclBhcmVudGluZyh0bikge1xuICAgICAgICByZXR1cm4gVEFCTEVfU1RSVUNUVVJFX1RBR1MuaGFzKHRuKTtcbiAgICB9XG4gICAgLyoqIEBwcm90ZWN0ZWQgKi9cbiAgICBfc2hvdWxkRm9zdGVyUGFyZW50T25JbnNlcnRpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmZvc3RlclBhcmVudGluZ0VuYWJsZWQgJiYgdGhpcy5faXNFbGVtZW50Q2F1c2VzRm9zdGVyUGFyZW50aW5nKHRoaXMub3BlbkVsZW1lbnRzLmN1cnJlbnRUYWdJZCk7XG4gICAgfVxuICAgIC8qKiBAcHJvdGVjdGVkICovXG4gICAgX2ZpbmRGb3N0ZXJQYXJlbnRpbmdMb2NhdGlvbigpIHtcbiAgICAgICAgZm9yIChsZXQgaSA9IHRoaXMub3BlbkVsZW1lbnRzLnN0YWNrVG9wOyBpID49IDA7IGktLSkge1xuICAgICAgICAgICAgY29uc3Qgb3BlbkVsZW1lbnQgPSB0aGlzLm9wZW5FbGVtZW50cy5pdGVtc1tpXTtcbiAgICAgICAgICAgIHN3aXRjaCAodGhpcy5vcGVuRWxlbWVudHMudGFnSURzW2ldKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAkLlRFTVBMQVRFOiB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnRyZWVBZGFwdGVyLmdldE5hbWVzcGFjZVVSSShvcGVuRWxlbWVudCkgPT09IE5TLkhUTUwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7IHBhcmVudDogdGhpcy50cmVlQWRhcHRlci5nZXRUZW1wbGF0ZUNvbnRlbnQob3BlbkVsZW1lbnQpLCBiZWZvcmVFbGVtZW50OiBudWxsIH07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhc2UgJC5UQUJMRToge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBwYXJlbnQgPSB0aGlzLnRyZWVBZGFwdGVyLmdldFBhcmVudE5vZGUob3BlbkVsZW1lbnQpO1xuICAgICAgICAgICAgICAgICAgICBpZiAocGFyZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4geyBwYXJlbnQsIGJlZm9yZUVsZW1lbnQ6IG9wZW5FbGVtZW50IH07XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHsgcGFyZW50OiB0aGlzLm9wZW5FbGVtZW50cy5pdGVtc1tpIC0gMV0sIGJlZm9yZUVsZW1lbnQ6IG51bGwgfTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAvLyBEbyBub3RoaW5nXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHsgcGFyZW50OiB0aGlzLm9wZW5FbGVtZW50cy5pdGVtc1swXSwgYmVmb3JlRWxlbWVudDogbnVsbCB9O1xuICAgIH1cbiAgICAvKiogQHByb3RlY3RlZCAqL1xuICAgIF9mb3N0ZXJQYXJlbnRFbGVtZW50KGVsZW1lbnQpIHtcbiAgICAgICAgY29uc3QgbG9jYXRpb24gPSB0aGlzLl9maW5kRm9zdGVyUGFyZW50aW5nTG9jYXRpb24oKTtcbiAgICAgICAgaWYgKGxvY2F0aW9uLmJlZm9yZUVsZW1lbnQpIHtcbiAgICAgICAgICAgIHRoaXMudHJlZUFkYXB0ZXIuaW5zZXJ0QmVmb3JlKGxvY2F0aW9uLnBhcmVudCwgZWxlbWVudCwgbG9jYXRpb24uYmVmb3JlRWxlbWVudCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnRyZWVBZGFwdGVyLmFwcGVuZENoaWxkKGxvY2F0aW9uLnBhcmVudCwgZWxlbWVudCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy9TcGVjaWFsIGVsZW1lbnRzXG4gICAgLyoqIEBwcm90ZWN0ZWQgKi9cbiAgICBfaXNTcGVjaWFsRWxlbWVudChlbGVtZW50LCBpZCkge1xuICAgICAgICBjb25zdCBucyA9IHRoaXMudHJlZUFkYXB0ZXIuZ2V0TmFtZXNwYWNlVVJJKGVsZW1lbnQpO1xuICAgICAgICByZXR1cm4gU1BFQ0lBTF9FTEVNRU5UU1tuc10uaGFzKGlkKTtcbiAgICB9XG4gICAgLyoqIEBpbnRlcm5hbCAqL1xuICAgIG9uQ2hhcmFjdGVyKHRva2VuKSB7XG4gICAgICAgIHRoaXMuc2tpcE5leHROZXdMaW5lID0gZmFsc2U7XG4gICAgICAgIGlmICh0aGlzLnRva2VuaXplci5pbkZvcmVpZ25Ob2RlKSB7XG4gICAgICAgICAgICBjaGFyYWN0ZXJJbkZvcmVpZ25Db250ZW50KHRoaXMsIHRva2VuKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBzd2l0Y2ggKHRoaXMuaW5zZXJ0aW9uTW9kZSkge1xuICAgICAgICAgICAgY2FzZSBJbnNlcnRpb25Nb2RlLklOSVRJQUw6IHtcbiAgICAgICAgICAgICAgICB0b2tlbkluSW5pdGlhbE1vZGUodGhpcywgdG9rZW4pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBJbnNlcnRpb25Nb2RlLkJFRk9SRV9IVE1MOiB7XG4gICAgICAgICAgICAgICAgdG9rZW5CZWZvcmVIdG1sKHRoaXMsIHRva2VuKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgSW5zZXJ0aW9uTW9kZS5CRUZPUkVfSEVBRDoge1xuICAgICAgICAgICAgICAgIHRva2VuQmVmb3JlSGVhZCh0aGlzLCB0b2tlbik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIEluc2VydGlvbk1vZGUuSU5fSEVBRDoge1xuICAgICAgICAgICAgICAgIHRva2VuSW5IZWFkKHRoaXMsIHRva2VuKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgSW5zZXJ0aW9uTW9kZS5JTl9IRUFEX05PX1NDUklQVDoge1xuICAgICAgICAgICAgICAgIHRva2VuSW5IZWFkTm9TY3JpcHQodGhpcywgdG9rZW4pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBJbnNlcnRpb25Nb2RlLkFGVEVSX0hFQUQ6IHtcbiAgICAgICAgICAgICAgICB0b2tlbkFmdGVySGVhZCh0aGlzLCB0b2tlbik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIEluc2VydGlvbk1vZGUuSU5fQk9EWTpcbiAgICAgICAgICAgIGNhc2UgSW5zZXJ0aW9uTW9kZS5JTl9DQVBUSU9OOlxuICAgICAgICAgICAgY2FzZSBJbnNlcnRpb25Nb2RlLklOX0NFTEw6XG4gICAgICAgICAgICBjYXNlIEluc2VydGlvbk1vZGUuSU5fVEVNUExBVEU6IHtcbiAgICAgICAgICAgICAgICBjaGFyYWN0ZXJJbkJvZHkodGhpcywgdG9rZW4pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBJbnNlcnRpb25Nb2RlLlRFWFQ6XG4gICAgICAgICAgICBjYXNlIEluc2VydGlvbk1vZGUuSU5fU0VMRUNUOlxuICAgICAgICAgICAgY2FzZSBJbnNlcnRpb25Nb2RlLklOX1NFTEVDVF9JTl9UQUJMRToge1xuICAgICAgICAgICAgICAgIHRoaXMuX2luc2VydENoYXJhY3RlcnModG9rZW4pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBJbnNlcnRpb25Nb2RlLklOX1RBQkxFOlxuICAgICAgICAgICAgY2FzZSBJbnNlcnRpb25Nb2RlLklOX1RBQkxFX0JPRFk6XG4gICAgICAgICAgICBjYXNlIEluc2VydGlvbk1vZGUuSU5fUk9XOiB7XG4gICAgICAgICAgICAgICAgY2hhcmFjdGVySW5UYWJsZSh0aGlzLCB0b2tlbik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIEluc2VydGlvbk1vZGUuSU5fVEFCTEVfVEVYVDoge1xuICAgICAgICAgICAgICAgIGNoYXJhY3RlckluVGFibGVUZXh0KHRoaXMsIHRva2VuKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgSW5zZXJ0aW9uTW9kZS5JTl9DT0xVTU5fR1JPVVA6IHtcbiAgICAgICAgICAgICAgICB0b2tlbkluQ29sdW1uR3JvdXAodGhpcywgdG9rZW4pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBJbnNlcnRpb25Nb2RlLkFGVEVSX0JPRFk6IHtcbiAgICAgICAgICAgICAgICB0b2tlbkFmdGVyQm9keSh0aGlzLCB0b2tlbik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIEluc2VydGlvbk1vZGUuQUZURVJfQUZURVJfQk9EWToge1xuICAgICAgICAgICAgICAgIHRva2VuQWZ0ZXJBZnRlckJvZHkodGhpcywgdG9rZW4pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIC8vIERvIG5vdGhpbmdcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKiogQGludGVybmFsICovXG4gICAgb25OdWxsQ2hhcmFjdGVyKHRva2VuKSB7XG4gICAgICAgIHRoaXMuc2tpcE5leHROZXdMaW5lID0gZmFsc2U7XG4gICAgICAgIGlmICh0aGlzLnRva2VuaXplci5pbkZvcmVpZ25Ob2RlKSB7XG4gICAgICAgICAgICBudWxsQ2hhcmFjdGVySW5Gb3JlaWduQ29udGVudCh0aGlzLCB0b2tlbik7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgc3dpdGNoICh0aGlzLmluc2VydGlvbk1vZGUpIHtcbiAgICAgICAgICAgIGNhc2UgSW5zZXJ0aW9uTW9kZS5JTklUSUFMOiB7XG4gICAgICAgICAgICAgICAgdG9rZW5JbkluaXRpYWxNb2RlKHRoaXMsIHRva2VuKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgSW5zZXJ0aW9uTW9kZS5CRUZPUkVfSFRNTDoge1xuICAgICAgICAgICAgICAgIHRva2VuQmVmb3JlSHRtbCh0aGlzLCB0b2tlbik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIEluc2VydGlvbk1vZGUuQkVGT1JFX0hFQUQ6IHtcbiAgICAgICAgICAgICAgICB0b2tlbkJlZm9yZUhlYWQodGhpcywgdG9rZW4pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBJbnNlcnRpb25Nb2RlLklOX0hFQUQ6IHtcbiAgICAgICAgICAgICAgICB0b2tlbkluSGVhZCh0aGlzLCB0b2tlbik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIEluc2VydGlvbk1vZGUuSU5fSEVBRF9OT19TQ1JJUFQ6IHtcbiAgICAgICAgICAgICAgICB0b2tlbkluSGVhZE5vU2NyaXB0KHRoaXMsIHRva2VuKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgSW5zZXJ0aW9uTW9kZS5BRlRFUl9IRUFEOiB7XG4gICAgICAgICAgICAgICAgdG9rZW5BZnRlckhlYWQodGhpcywgdG9rZW4pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBJbnNlcnRpb25Nb2RlLlRFWFQ6IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9pbnNlcnRDaGFyYWN0ZXJzKHRva2VuKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgSW5zZXJ0aW9uTW9kZS5JTl9UQUJMRTpcbiAgICAgICAgICAgIGNhc2UgSW5zZXJ0aW9uTW9kZS5JTl9UQUJMRV9CT0RZOlxuICAgICAgICAgICAgY2FzZSBJbnNlcnRpb25Nb2RlLklOX1JPVzoge1xuICAgICAgICAgICAgICAgIGNoYXJhY3RlckluVGFibGUodGhpcywgdG9rZW4pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBJbnNlcnRpb25Nb2RlLklOX0NPTFVNTl9HUk9VUDoge1xuICAgICAgICAgICAgICAgIHRva2VuSW5Db2x1bW5Hcm91cCh0aGlzLCB0b2tlbik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIEluc2VydGlvbk1vZGUuQUZURVJfQk9EWToge1xuICAgICAgICAgICAgICAgIHRva2VuQWZ0ZXJCb2R5KHRoaXMsIHRva2VuKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgSW5zZXJ0aW9uTW9kZS5BRlRFUl9BRlRFUl9CT0RZOiB7XG4gICAgICAgICAgICAgICAgdG9rZW5BZnRlckFmdGVyQm9keSh0aGlzLCB0b2tlbik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgLy8gRG8gbm90aGluZ1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKiBAaW50ZXJuYWwgKi9cbiAgICBvbkNvbW1lbnQodG9rZW4pIHtcbiAgICAgICAgdGhpcy5za2lwTmV4dE5ld0xpbmUgPSBmYWxzZTtcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudE5vdEluSFRNTCkge1xuICAgICAgICAgICAgYXBwZW5kQ29tbWVudCh0aGlzLCB0b2tlbik7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgc3dpdGNoICh0aGlzLmluc2VydGlvbk1vZGUpIHtcbiAgICAgICAgICAgIGNhc2UgSW5zZXJ0aW9uTW9kZS5JTklUSUFMOlxuICAgICAgICAgICAgY2FzZSBJbnNlcnRpb25Nb2RlLkJFRk9SRV9IVE1MOlxuICAgICAgICAgICAgY2FzZSBJbnNlcnRpb25Nb2RlLkJFRk9SRV9IRUFEOlxuICAgICAgICAgICAgY2FzZSBJbnNlcnRpb25Nb2RlLklOX0hFQUQ6XG4gICAgICAgICAgICBjYXNlIEluc2VydGlvbk1vZGUuSU5fSEVBRF9OT19TQ1JJUFQ6XG4gICAgICAgICAgICBjYXNlIEluc2VydGlvbk1vZGUuQUZURVJfSEVBRDpcbiAgICAgICAgICAgIGNhc2UgSW5zZXJ0aW9uTW9kZS5JTl9CT0RZOlxuICAgICAgICAgICAgY2FzZSBJbnNlcnRpb25Nb2RlLklOX1RBQkxFOlxuICAgICAgICAgICAgY2FzZSBJbnNlcnRpb25Nb2RlLklOX0NBUFRJT046XG4gICAgICAgICAgICBjYXNlIEluc2VydGlvbk1vZGUuSU5fQ09MVU1OX0dST1VQOlxuICAgICAgICAgICAgY2FzZSBJbnNlcnRpb25Nb2RlLklOX1RBQkxFX0JPRFk6XG4gICAgICAgICAgICBjYXNlIEluc2VydGlvbk1vZGUuSU5fUk9XOlxuICAgICAgICAgICAgY2FzZSBJbnNlcnRpb25Nb2RlLklOX0NFTEw6XG4gICAgICAgICAgICBjYXNlIEluc2VydGlvbk1vZGUuSU5fU0VMRUNUOlxuICAgICAgICAgICAgY2FzZSBJbnNlcnRpb25Nb2RlLklOX1NFTEVDVF9JTl9UQUJMRTpcbiAgICAgICAgICAgIGNhc2UgSW5zZXJ0aW9uTW9kZS5JTl9URU1QTEFURTpcbiAgICAgICAgICAgIGNhc2UgSW5zZXJ0aW9uTW9kZS5JTl9GUkFNRVNFVDpcbiAgICAgICAgICAgIGNhc2UgSW5zZXJ0aW9uTW9kZS5BRlRFUl9GUkFNRVNFVDoge1xuICAgICAgICAgICAgICAgIGFwcGVuZENvbW1lbnQodGhpcywgdG9rZW4pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBJbnNlcnRpb25Nb2RlLklOX1RBQkxFX1RFWFQ6IHtcbiAgICAgICAgICAgICAgICB0b2tlbkluVGFibGVUZXh0KHRoaXMsIHRva2VuKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgSW5zZXJ0aW9uTW9kZS5BRlRFUl9CT0RZOiB7XG4gICAgICAgICAgICAgICAgYXBwZW5kQ29tbWVudFRvUm9vdEh0bWxFbGVtZW50KHRoaXMsIHRva2VuKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgSW5zZXJ0aW9uTW9kZS5BRlRFUl9BRlRFUl9CT0RZOlxuICAgICAgICAgICAgY2FzZSBJbnNlcnRpb25Nb2RlLkFGVEVSX0FGVEVSX0ZSQU1FU0VUOiB7XG4gICAgICAgICAgICAgICAgYXBwZW5kQ29tbWVudFRvRG9jdW1lbnQodGhpcywgdG9rZW4pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIC8vIERvIG5vdGhpbmdcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKiogQGludGVybmFsICovXG4gICAgb25Eb2N0eXBlKHRva2VuKSB7XG4gICAgICAgIHRoaXMuc2tpcE5leHROZXdMaW5lID0gZmFsc2U7XG4gICAgICAgIHN3aXRjaCAodGhpcy5pbnNlcnRpb25Nb2RlKSB7XG4gICAgICAgICAgICBjYXNlIEluc2VydGlvbk1vZGUuSU5JVElBTDoge1xuICAgICAgICAgICAgICAgIGRvY3R5cGVJbkluaXRpYWxNb2RlKHRoaXMsIHRva2VuKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgSW5zZXJ0aW9uTW9kZS5CRUZPUkVfSEVBRDpcbiAgICAgICAgICAgIGNhc2UgSW5zZXJ0aW9uTW9kZS5JTl9IRUFEOlxuICAgICAgICAgICAgY2FzZSBJbnNlcnRpb25Nb2RlLklOX0hFQURfTk9fU0NSSVBUOlxuICAgICAgICAgICAgY2FzZSBJbnNlcnRpb25Nb2RlLkFGVEVSX0hFQUQ6IHtcbiAgICAgICAgICAgICAgICB0aGlzLl9lcnIodG9rZW4sIEVSUi5taXNwbGFjZWREb2N0eXBlKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgSW5zZXJ0aW9uTW9kZS5JTl9UQUJMRV9URVhUOiB7XG4gICAgICAgICAgICAgICAgdG9rZW5JblRhYmxlVGV4dCh0aGlzLCB0b2tlbik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgLy8gRG8gbm90aGluZ1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKiBAaW50ZXJuYWwgKi9cbiAgICBvblN0YXJ0VGFnKHRva2VuKSB7XG4gICAgICAgIHRoaXMuc2tpcE5leHROZXdMaW5lID0gZmFsc2U7XG4gICAgICAgIHRoaXMuY3VycmVudFRva2VuID0gdG9rZW47XG4gICAgICAgIHRoaXMuX3Byb2Nlc3NTdGFydFRhZyh0b2tlbik7XG4gICAgICAgIGlmICh0b2tlbi5zZWxmQ2xvc2luZyAmJiAhdG9rZW4uYWNrU2VsZkNsb3NpbmcpIHtcbiAgICAgICAgICAgIHRoaXMuX2Vycih0b2tlbiwgRVJSLm5vblZvaWRIdG1sRWxlbWVudFN0YXJ0VGFnV2l0aFRyYWlsaW5nU29saWR1cyk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqXG4gICAgICogUHJvY2Vzc2VzIGEgZ2l2ZW4gc3RhcnQgdGFnLlxuICAgICAqXG4gICAgICogYG9uU3RhcnRUYWdgIGNoZWNrcyBpZiBhIHNlbGYtY2xvc2luZyB0YWcgd2FzIHJlY29nbml6ZWQuIFdoZW4gYSB0b2tlblxuICAgICAqIGlzIG1vdmVkIGluYmV0d2VlbiBtdWx0aXBsZSBpbnNlcnRpb24gbW9kZXMsIHRoaXMgY2hlY2sgZm9yIHNlbGYtY2xvc2luZ1xuICAgICAqIGNvdWxkIGxlYWQgdG8gZmFsc2UgcG9zaXRpdmVzLiBUbyBhdm9pZCB0aGlzLCBgX3Byb2Nlc3NTdGFydFRhZ2AgaXMgdXNlZFxuICAgICAqIGZvciBuZXN0ZWQgY2FsbHMuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gdG9rZW4gVGhlIHRva2VuIHRvIHByb2Nlc3MuXG4gICAgICogQHByb3RlY3RlZFxuICAgICAqL1xuICAgIF9wcm9jZXNzU3RhcnRUYWcodG9rZW4pIHtcbiAgICAgICAgaWYgKHRoaXMuc2hvdWxkUHJvY2Vzc1N0YXJ0VGFnVG9rZW5JbkZvcmVpZ25Db250ZW50KHRva2VuKSkge1xuICAgICAgICAgICAgc3RhcnRUYWdJbkZvcmVpZ25Db250ZW50KHRoaXMsIHRva2VuKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX3N0YXJ0VGFnT3V0c2lkZUZvcmVpZ25Db250ZW50KHRva2VuKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKiogQHByb3RlY3RlZCAqL1xuICAgIF9zdGFydFRhZ091dHNpZGVGb3JlaWduQ29udGVudCh0b2tlbikge1xuICAgICAgICBzd2l0Y2ggKHRoaXMuaW5zZXJ0aW9uTW9kZSkge1xuICAgICAgICAgICAgY2FzZSBJbnNlcnRpb25Nb2RlLklOSVRJQUw6IHtcbiAgICAgICAgICAgICAgICB0b2tlbkluSW5pdGlhbE1vZGUodGhpcywgdG9rZW4pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBJbnNlcnRpb25Nb2RlLkJFRk9SRV9IVE1MOiB7XG4gICAgICAgICAgICAgICAgc3RhcnRUYWdCZWZvcmVIdG1sKHRoaXMsIHRva2VuKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgSW5zZXJ0aW9uTW9kZS5CRUZPUkVfSEVBRDoge1xuICAgICAgICAgICAgICAgIHN0YXJ0VGFnQmVmb3JlSGVhZCh0aGlzLCB0b2tlbik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIEluc2VydGlvbk1vZGUuSU5fSEVBRDoge1xuICAgICAgICAgICAgICAgIHN0YXJ0VGFnSW5IZWFkKHRoaXMsIHRva2VuKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgSW5zZXJ0aW9uTW9kZS5JTl9IRUFEX05PX1NDUklQVDoge1xuICAgICAgICAgICAgICAgIHN0YXJ0VGFnSW5IZWFkTm9TY3JpcHQodGhpcywgdG9rZW4pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBJbnNlcnRpb25Nb2RlLkFGVEVSX0hFQUQ6IHtcbiAgICAgICAgICAgICAgICBzdGFydFRhZ0FmdGVySGVhZCh0aGlzLCB0b2tlbik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIEluc2VydGlvbk1vZGUuSU5fQk9EWToge1xuICAgICAgICAgICAgICAgIHN0YXJ0VGFnSW5Cb2R5KHRoaXMsIHRva2VuKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgSW5zZXJ0aW9uTW9kZS5JTl9UQUJMRToge1xuICAgICAgICAgICAgICAgIHN0YXJ0VGFnSW5UYWJsZSh0aGlzLCB0b2tlbik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIEluc2VydGlvbk1vZGUuSU5fVEFCTEVfVEVYVDoge1xuICAgICAgICAgICAgICAgIHRva2VuSW5UYWJsZVRleHQodGhpcywgdG9rZW4pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBJbnNlcnRpb25Nb2RlLklOX0NBUFRJT046IHtcbiAgICAgICAgICAgICAgICBzdGFydFRhZ0luQ2FwdGlvbih0aGlzLCB0b2tlbik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIEluc2VydGlvbk1vZGUuSU5fQ09MVU1OX0dST1VQOiB7XG4gICAgICAgICAgICAgICAgc3RhcnRUYWdJbkNvbHVtbkdyb3VwKHRoaXMsIHRva2VuKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgSW5zZXJ0aW9uTW9kZS5JTl9UQUJMRV9CT0RZOiB7XG4gICAgICAgICAgICAgICAgc3RhcnRUYWdJblRhYmxlQm9keSh0aGlzLCB0b2tlbik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIEluc2VydGlvbk1vZGUuSU5fUk9XOiB7XG4gICAgICAgICAgICAgICAgc3RhcnRUYWdJblJvdyh0aGlzLCB0b2tlbik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIEluc2VydGlvbk1vZGUuSU5fQ0VMTDoge1xuICAgICAgICAgICAgICAgIHN0YXJ0VGFnSW5DZWxsKHRoaXMsIHRva2VuKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgSW5zZXJ0aW9uTW9kZS5JTl9TRUxFQ1Q6IHtcbiAgICAgICAgICAgICAgICBzdGFydFRhZ0luU2VsZWN0KHRoaXMsIHRva2VuKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgSW5zZXJ0aW9uTW9kZS5JTl9TRUxFQ1RfSU5fVEFCTEU6IHtcbiAgICAgICAgICAgICAgICBzdGFydFRhZ0luU2VsZWN0SW5UYWJsZSh0aGlzLCB0b2tlbik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIEluc2VydGlvbk1vZGUuSU5fVEVNUExBVEU6IHtcbiAgICAgICAgICAgICAgICBzdGFydFRhZ0luVGVtcGxhdGUodGhpcywgdG9rZW4pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBJbnNlcnRpb25Nb2RlLkFGVEVSX0JPRFk6IHtcbiAgICAgICAgICAgICAgICBzdGFydFRhZ0FmdGVyQm9keSh0aGlzLCB0b2tlbik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIEluc2VydGlvbk1vZGUuSU5fRlJBTUVTRVQ6IHtcbiAgICAgICAgICAgICAgICBzdGFydFRhZ0luRnJhbWVzZXQodGhpcywgdG9rZW4pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBJbnNlcnRpb25Nb2RlLkFGVEVSX0ZSQU1FU0VUOiB7XG4gICAgICAgICAgICAgICAgc3RhcnRUYWdBZnRlckZyYW1lc2V0KHRoaXMsIHRva2VuKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgSW5zZXJ0aW9uTW9kZS5BRlRFUl9BRlRFUl9CT0RZOiB7XG4gICAgICAgICAgICAgICAgc3RhcnRUYWdBZnRlckFmdGVyQm9keSh0aGlzLCB0b2tlbik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIEluc2VydGlvbk1vZGUuQUZURVJfQUZURVJfRlJBTUVTRVQ6IHtcbiAgICAgICAgICAgICAgICBzdGFydFRhZ0FmdGVyQWZ0ZXJGcmFtZXNldCh0aGlzLCB0b2tlbik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgLy8gRG8gbm90aGluZ1xuICAgICAgICB9XG4gICAgfVxuICAgIC8qKiBAaW50ZXJuYWwgKi9cbiAgICBvbkVuZFRhZyh0b2tlbikge1xuICAgICAgICB0aGlzLnNraXBOZXh0TmV3TGluZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLmN1cnJlbnRUb2tlbiA9IHRva2VuO1xuICAgICAgICBpZiAodGhpcy5jdXJyZW50Tm90SW5IVE1MKSB7XG4gICAgICAgICAgICBlbmRUYWdJbkZvcmVpZ25Db250ZW50KHRoaXMsIHRva2VuKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX2VuZFRhZ091dHNpZGVGb3JlaWduQ29udGVudCh0b2tlbik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqIEBwcm90ZWN0ZWQgKi9cbiAgICBfZW5kVGFnT3V0c2lkZUZvcmVpZ25Db250ZW50KHRva2VuKSB7XG4gICAgICAgIHN3aXRjaCAodGhpcy5pbnNlcnRpb25Nb2RlKSB7XG4gICAgICAgICAgICBjYXNlIEluc2VydGlvbk1vZGUuSU5JVElBTDoge1xuICAgICAgICAgICAgICAgIHRva2VuSW5Jbml0aWFsTW9kZSh0aGlzLCB0b2tlbik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIEluc2VydGlvbk1vZGUuQkVGT1JFX0hUTUw6IHtcbiAgICAgICAgICAgICAgICBlbmRUYWdCZWZvcmVIdG1sKHRoaXMsIHRva2VuKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgSW5zZXJ0aW9uTW9kZS5CRUZPUkVfSEVBRDoge1xuICAgICAgICAgICAgICAgIGVuZFRhZ0JlZm9yZUhlYWQodGhpcywgdG9rZW4pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBJbnNlcnRpb25Nb2RlLklOX0hFQUQ6IHtcbiAgICAgICAgICAgICAgICBlbmRUYWdJbkhlYWQodGhpcywgdG9rZW4pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBJbnNlcnRpb25Nb2RlLklOX0hFQURfTk9fU0NSSVBUOiB7XG4gICAgICAgICAgICAgICAgZW5kVGFnSW5IZWFkTm9TY3JpcHQodGhpcywgdG9rZW4pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBJbnNlcnRpb25Nb2RlLkFGVEVSX0hFQUQ6IHtcbiAgICAgICAgICAgICAgICBlbmRUYWdBZnRlckhlYWQodGhpcywgdG9rZW4pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBJbnNlcnRpb25Nb2RlLklOX0JPRFk6IHtcbiAgICAgICAgICAgICAgICBlbmRUYWdJbkJvZHkodGhpcywgdG9rZW4pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBJbnNlcnRpb25Nb2RlLlRFWFQ6IHtcbiAgICAgICAgICAgICAgICBlbmRUYWdJblRleHQodGhpcywgdG9rZW4pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBJbnNlcnRpb25Nb2RlLklOX1RBQkxFOiB7XG4gICAgICAgICAgICAgICAgZW5kVGFnSW5UYWJsZSh0aGlzLCB0b2tlbik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIEluc2VydGlvbk1vZGUuSU5fVEFCTEVfVEVYVDoge1xuICAgICAgICAgICAgICAgIHRva2VuSW5UYWJsZVRleHQodGhpcywgdG9rZW4pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBJbnNlcnRpb25Nb2RlLklOX0NBUFRJT046IHtcbiAgICAgICAgICAgICAgICBlbmRUYWdJbkNhcHRpb24odGhpcywgdG9rZW4pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBJbnNlcnRpb25Nb2RlLklOX0NPTFVNTl9HUk9VUDoge1xuICAgICAgICAgICAgICAgIGVuZFRhZ0luQ29sdW1uR3JvdXAodGhpcywgdG9rZW4pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBJbnNlcnRpb25Nb2RlLklOX1RBQkxFX0JPRFk6IHtcbiAgICAgICAgICAgICAgICBlbmRUYWdJblRhYmxlQm9keSh0aGlzLCB0b2tlbik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIEluc2VydGlvbk1vZGUuSU5fUk9XOiB7XG4gICAgICAgICAgICAgICAgZW5kVGFnSW5Sb3codGhpcywgdG9rZW4pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBJbnNlcnRpb25Nb2RlLklOX0NFTEw6IHtcbiAgICAgICAgICAgICAgICBlbmRUYWdJbkNlbGwodGhpcywgdG9rZW4pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBJbnNlcnRpb25Nb2RlLklOX1NFTEVDVDoge1xuICAgICAgICAgICAgICAgIGVuZFRhZ0luU2VsZWN0KHRoaXMsIHRva2VuKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgSW5zZXJ0aW9uTW9kZS5JTl9TRUxFQ1RfSU5fVEFCTEU6IHtcbiAgICAgICAgICAgICAgICBlbmRUYWdJblNlbGVjdEluVGFibGUodGhpcywgdG9rZW4pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBJbnNlcnRpb25Nb2RlLklOX1RFTVBMQVRFOiB7XG4gICAgICAgICAgICAgICAgZW5kVGFnSW5UZW1wbGF0ZSh0aGlzLCB0b2tlbik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIEluc2VydGlvbk1vZGUuQUZURVJfQk9EWToge1xuICAgICAgICAgICAgICAgIGVuZFRhZ0FmdGVyQm9keSh0aGlzLCB0b2tlbik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIEluc2VydGlvbk1vZGUuSU5fRlJBTUVTRVQ6IHtcbiAgICAgICAgICAgICAgICBlbmRUYWdJbkZyYW1lc2V0KHRoaXMsIHRva2VuKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgSW5zZXJ0aW9uTW9kZS5BRlRFUl9GUkFNRVNFVDoge1xuICAgICAgICAgICAgICAgIGVuZFRhZ0FmdGVyRnJhbWVzZXQodGhpcywgdG9rZW4pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBJbnNlcnRpb25Nb2RlLkFGVEVSX0FGVEVSX0JPRFk6IHtcbiAgICAgICAgICAgICAgICB0b2tlbkFmdGVyQWZ0ZXJCb2R5KHRoaXMsIHRva2VuKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAvLyBEbyBub3RoaW5nXG4gICAgICAgIH1cbiAgICB9XG4gICAgLyoqIEBpbnRlcm5hbCAqL1xuICAgIG9uRW9mKHRva2VuKSB7XG4gICAgICAgIHN3aXRjaCAodGhpcy5pbnNlcnRpb25Nb2RlKSB7XG4gICAgICAgICAgICBjYXNlIEluc2VydGlvbk1vZGUuSU5JVElBTDoge1xuICAgICAgICAgICAgICAgIHRva2VuSW5Jbml0aWFsTW9kZSh0aGlzLCB0b2tlbik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIEluc2VydGlvbk1vZGUuQkVGT1JFX0hUTUw6IHtcbiAgICAgICAgICAgICAgICB0b2tlbkJlZm9yZUh0bWwodGhpcywgdG9rZW4pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBJbnNlcnRpb25Nb2RlLkJFRk9SRV9IRUFEOiB7XG4gICAgICAgICAgICAgICAgdG9rZW5CZWZvcmVIZWFkKHRoaXMsIHRva2VuKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgSW5zZXJ0aW9uTW9kZS5JTl9IRUFEOiB7XG4gICAgICAgICAgICAgICAgdG9rZW5JbkhlYWQodGhpcywgdG9rZW4pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBJbnNlcnRpb25Nb2RlLklOX0hFQURfTk9fU0NSSVBUOiB7XG4gICAgICAgICAgICAgICAgdG9rZW5JbkhlYWROb1NjcmlwdCh0aGlzLCB0b2tlbik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIEluc2VydGlvbk1vZGUuQUZURVJfSEVBRDoge1xuICAgICAgICAgICAgICAgIHRva2VuQWZ0ZXJIZWFkKHRoaXMsIHRva2VuKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgSW5zZXJ0aW9uTW9kZS5JTl9CT0RZOlxuICAgICAgICAgICAgY2FzZSBJbnNlcnRpb25Nb2RlLklOX1RBQkxFOlxuICAgICAgICAgICAgY2FzZSBJbnNlcnRpb25Nb2RlLklOX0NBUFRJT046XG4gICAgICAgICAgICBjYXNlIEluc2VydGlvbk1vZGUuSU5fQ09MVU1OX0dST1VQOlxuICAgICAgICAgICAgY2FzZSBJbnNlcnRpb25Nb2RlLklOX1RBQkxFX0JPRFk6XG4gICAgICAgICAgICBjYXNlIEluc2VydGlvbk1vZGUuSU5fUk9XOlxuICAgICAgICAgICAgY2FzZSBJbnNlcnRpb25Nb2RlLklOX0NFTEw6XG4gICAgICAgICAgICBjYXNlIEluc2VydGlvbk1vZGUuSU5fU0VMRUNUOlxuICAgICAgICAgICAgY2FzZSBJbnNlcnRpb25Nb2RlLklOX1NFTEVDVF9JTl9UQUJMRToge1xuICAgICAgICAgICAgICAgIGVvZkluQm9keSh0aGlzLCB0b2tlbik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIEluc2VydGlvbk1vZGUuVEVYVDoge1xuICAgICAgICAgICAgICAgIGVvZkluVGV4dCh0aGlzLCB0b2tlbik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIEluc2VydGlvbk1vZGUuSU5fVEFCTEVfVEVYVDoge1xuICAgICAgICAgICAgICAgIHRva2VuSW5UYWJsZVRleHQodGhpcywgdG9rZW4pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBJbnNlcnRpb25Nb2RlLklOX1RFTVBMQVRFOiB7XG4gICAgICAgICAgICAgICAgZW9mSW5UZW1wbGF0ZSh0aGlzLCB0b2tlbik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIEluc2VydGlvbk1vZGUuQUZURVJfQk9EWTpcbiAgICAgICAgICAgIGNhc2UgSW5zZXJ0aW9uTW9kZS5JTl9GUkFNRVNFVDpcbiAgICAgICAgICAgIGNhc2UgSW5zZXJ0aW9uTW9kZS5BRlRFUl9GUkFNRVNFVDpcbiAgICAgICAgICAgIGNhc2UgSW5zZXJ0aW9uTW9kZS5BRlRFUl9BRlRFUl9CT0RZOlxuICAgICAgICAgICAgY2FzZSBJbnNlcnRpb25Nb2RlLkFGVEVSX0FGVEVSX0ZSQU1FU0VUOiB7XG4gICAgICAgICAgICAgICAgc3RvcFBhcnNpbmcodGhpcywgdG9rZW4pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIC8vIERvIG5vdGhpbmdcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKiogQGludGVybmFsICovXG4gICAgb25XaGl0ZXNwYWNlQ2hhcmFjdGVyKHRva2VuKSB7XG4gICAgICAgIGlmICh0aGlzLnNraXBOZXh0TmV3TGluZSkge1xuICAgICAgICAgICAgdGhpcy5za2lwTmV4dE5ld0xpbmUgPSBmYWxzZTtcbiAgICAgICAgICAgIGlmICh0b2tlbi5jaGFycy5jaGFyQ29kZUF0KDApID09PSB1bmljb2RlLkNPREVfUE9JTlRTLkxJTkVfRkVFRCkge1xuICAgICAgICAgICAgICAgIGlmICh0b2tlbi5jaGFycy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0b2tlbi5jaGFycyA9IHRva2VuLmNoYXJzLnN1YnN0cigxKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy50b2tlbml6ZXIuaW5Gb3JlaWduTm9kZSkge1xuICAgICAgICAgICAgdGhpcy5faW5zZXJ0Q2hhcmFjdGVycyh0b2tlbik7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgc3dpdGNoICh0aGlzLmluc2VydGlvbk1vZGUpIHtcbiAgICAgICAgICAgIGNhc2UgSW5zZXJ0aW9uTW9kZS5JTl9IRUFEOlxuICAgICAgICAgICAgY2FzZSBJbnNlcnRpb25Nb2RlLklOX0hFQURfTk9fU0NSSVBUOlxuICAgICAgICAgICAgY2FzZSBJbnNlcnRpb25Nb2RlLkFGVEVSX0hFQUQ6XG4gICAgICAgICAgICBjYXNlIEluc2VydGlvbk1vZGUuVEVYVDpcbiAgICAgICAgICAgIGNhc2UgSW5zZXJ0aW9uTW9kZS5JTl9DT0xVTU5fR1JPVVA6XG4gICAgICAgICAgICBjYXNlIEluc2VydGlvbk1vZGUuSU5fU0VMRUNUOlxuICAgICAgICAgICAgY2FzZSBJbnNlcnRpb25Nb2RlLklOX1NFTEVDVF9JTl9UQUJMRTpcbiAgICAgICAgICAgIGNhc2UgSW5zZXJ0aW9uTW9kZS5JTl9GUkFNRVNFVDpcbiAgICAgICAgICAgIGNhc2UgSW5zZXJ0aW9uTW9kZS5BRlRFUl9GUkFNRVNFVDoge1xuICAgICAgICAgICAgICAgIHRoaXMuX2luc2VydENoYXJhY3RlcnModG9rZW4pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBJbnNlcnRpb25Nb2RlLklOX0JPRFk6XG4gICAgICAgICAgICBjYXNlIEluc2VydGlvbk1vZGUuSU5fQ0FQVElPTjpcbiAgICAgICAgICAgIGNhc2UgSW5zZXJ0aW9uTW9kZS5JTl9DRUxMOlxuICAgICAgICAgICAgY2FzZSBJbnNlcnRpb25Nb2RlLklOX1RFTVBMQVRFOlxuICAgICAgICAgICAgY2FzZSBJbnNlcnRpb25Nb2RlLkFGVEVSX0JPRFk6XG4gICAgICAgICAgICBjYXNlIEluc2VydGlvbk1vZGUuQUZURVJfQUZURVJfQk9EWTpcbiAgICAgICAgICAgIGNhc2UgSW5zZXJ0aW9uTW9kZS5BRlRFUl9BRlRFUl9GUkFNRVNFVDoge1xuICAgICAgICAgICAgICAgIHdoaXRlc3BhY2VDaGFyYWN0ZXJJbkJvZHkodGhpcywgdG9rZW4pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBJbnNlcnRpb25Nb2RlLklOX1RBQkxFOlxuICAgICAgICAgICAgY2FzZSBJbnNlcnRpb25Nb2RlLklOX1RBQkxFX0JPRFk6XG4gICAgICAgICAgICBjYXNlIEluc2VydGlvbk1vZGUuSU5fUk9XOiB7XG4gICAgICAgICAgICAgICAgY2hhcmFjdGVySW5UYWJsZSh0aGlzLCB0b2tlbik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIEluc2VydGlvbk1vZGUuSU5fVEFCTEVfVEVYVDoge1xuICAgICAgICAgICAgICAgIHdoaXRlc3BhY2VDaGFyYWN0ZXJJblRhYmxlVGV4dCh0aGlzLCB0b2tlbik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgLy8gRG8gbm90aGluZ1xuICAgICAgICB9XG4gICAgfVxufVxuLy9BZG9wdGlvbiBhZ2VuY3kgYWxnb3JpdGhtXG4vLyhzZWU6IGh0dHA6Ly93d3cud2hhdHdnLm9yZy9zcGVjcy93ZWItYXBwcy9jdXJyZW50LXdvcmsvbXVsdGlwYWdlL3RyZWUtY29uc3RydWN0aW9uLmh0bWwjYWRvcHRpb25BZ2VuY3kpXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuLy9TdGVwcyA1LTggb2YgdGhlIGFsZ29yaXRobVxuZnVuY3Rpb24gYWFPYnRhaW5Gb3JtYXR0aW5nRWxlbWVudEVudHJ5KHAsIHRva2VuKSB7XG4gICAgbGV0IGZvcm1hdHRpbmdFbGVtZW50RW50cnkgPSBwLmFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cy5nZXRFbGVtZW50RW50cnlJblNjb3BlV2l0aFRhZ05hbWUodG9rZW4udGFnTmFtZSk7XG4gICAgaWYgKGZvcm1hdHRpbmdFbGVtZW50RW50cnkpIHtcbiAgICAgICAgaWYgKCFwLm9wZW5FbGVtZW50cy5jb250YWlucyhmb3JtYXR0aW5nRWxlbWVudEVudHJ5LmVsZW1lbnQpKSB7XG4gICAgICAgICAgICBwLmFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cy5yZW1vdmVFbnRyeShmb3JtYXR0aW5nRWxlbWVudEVudHJ5KTtcbiAgICAgICAgICAgIGZvcm1hdHRpbmdFbGVtZW50RW50cnkgPSBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKCFwLm9wZW5FbGVtZW50cy5oYXNJblNjb3BlKHRva2VuLnRhZ0lEKSkge1xuICAgICAgICAgICAgZm9ybWF0dGluZ0VsZW1lbnRFbnRyeSA9IG51bGw7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGdlbmVyaWNFbmRUYWdJbkJvZHkocCwgdG9rZW4pO1xuICAgIH1cbiAgICByZXR1cm4gZm9ybWF0dGluZ0VsZW1lbnRFbnRyeTtcbn1cbi8vU3RlcHMgOSBhbmQgMTAgb2YgdGhlIGFsZ29yaXRobVxuZnVuY3Rpb24gYWFPYnRhaW5GdXJ0aGVzdEJsb2NrKHAsIGZvcm1hdHRpbmdFbGVtZW50RW50cnkpIHtcbiAgICBsZXQgZnVydGhlc3RCbG9jayA9IG51bGw7XG4gICAgbGV0IGlkeCA9IHAub3BlbkVsZW1lbnRzLnN0YWNrVG9wO1xuICAgIGZvciAoOyBpZHggPj0gMDsgaWR4LS0pIHtcbiAgICAgICAgY29uc3QgZWxlbWVudCA9IHAub3BlbkVsZW1lbnRzLml0ZW1zW2lkeF07XG4gICAgICAgIGlmIChlbGVtZW50ID09PSBmb3JtYXR0aW5nRWxlbWVudEVudHJ5LmVsZW1lbnQpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwLl9pc1NwZWNpYWxFbGVtZW50KGVsZW1lbnQsIHAub3BlbkVsZW1lbnRzLnRhZ0lEc1tpZHhdKSkge1xuICAgICAgICAgICAgZnVydGhlc3RCbG9jayA9IGVsZW1lbnQ7XG4gICAgICAgIH1cbiAgICB9XG4gICAgaWYgKCFmdXJ0aGVzdEJsb2NrKSB7XG4gICAgICAgIHAub3BlbkVsZW1lbnRzLnNob3J0ZW5Ub0xlbmd0aChpZHggPCAwID8gMCA6IGlkeCk7XG4gICAgICAgIHAuYWN0aXZlRm9ybWF0dGluZ0VsZW1lbnRzLnJlbW92ZUVudHJ5KGZvcm1hdHRpbmdFbGVtZW50RW50cnkpO1xuICAgIH1cbiAgICByZXR1cm4gZnVydGhlc3RCbG9jaztcbn1cbi8vU3RlcCAxMyBvZiB0aGUgYWxnb3JpdGhtXG5mdW5jdGlvbiBhYUlubmVyTG9vcChwLCBmdXJ0aGVzdEJsb2NrLCBmb3JtYXR0aW5nRWxlbWVudCkge1xuICAgIGxldCBsYXN0RWxlbWVudCA9IGZ1cnRoZXN0QmxvY2s7XG4gICAgbGV0IG5leHRFbGVtZW50ID0gcC5vcGVuRWxlbWVudHMuZ2V0Q29tbW9uQW5jZXN0b3IoZnVydGhlc3RCbG9jayk7XG4gICAgZm9yIChsZXQgaSA9IDAsIGVsZW1lbnQgPSBuZXh0RWxlbWVudDsgZWxlbWVudCAhPT0gZm9ybWF0dGluZ0VsZW1lbnQ7IGkrKywgZWxlbWVudCA9IG5leHRFbGVtZW50KSB7XG4gICAgICAgIC8vTk9URTogc3RvcmUgdGhlIG5leHQgZWxlbWVudCBmb3IgdGhlIG5leHQgbG9vcCBpdGVyYXRpb24gKGl0IG1heSBiZSBkZWxldGVkIGZyb20gdGhlIHN0YWNrIGJ5IHN0ZXAgOS41KVxuICAgICAgICBuZXh0RWxlbWVudCA9IHAub3BlbkVsZW1lbnRzLmdldENvbW1vbkFuY2VzdG9yKGVsZW1lbnQpO1xuICAgICAgICBjb25zdCBlbGVtZW50RW50cnkgPSBwLmFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cy5nZXRFbGVtZW50RW50cnkoZWxlbWVudCk7XG4gICAgICAgIGNvbnN0IGNvdW50ZXJPdmVyZmxvdyA9IGVsZW1lbnRFbnRyeSAmJiBpID49IEFBX0lOTkVSX0xPT1BfSVRFUjtcbiAgICAgICAgY29uc3Qgc2hvdWxkUmVtb3ZlRnJvbU9wZW5FbGVtZW50cyA9ICFlbGVtZW50RW50cnkgfHwgY291bnRlck92ZXJmbG93O1xuICAgICAgICBpZiAoc2hvdWxkUmVtb3ZlRnJvbU9wZW5FbGVtZW50cykge1xuICAgICAgICAgICAgaWYgKGNvdW50ZXJPdmVyZmxvdykge1xuICAgICAgICAgICAgICAgIHAuYWN0aXZlRm9ybWF0dGluZ0VsZW1lbnRzLnJlbW92ZUVudHJ5KGVsZW1lbnRFbnRyeSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBwLm9wZW5FbGVtZW50cy5yZW1vdmUoZWxlbWVudCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBlbGVtZW50ID0gYWFSZWNyZWF0ZUVsZW1lbnRGcm9tRW50cnkocCwgZWxlbWVudEVudHJ5KTtcbiAgICAgICAgICAgIGlmIChsYXN0RWxlbWVudCA9PT0gZnVydGhlc3RCbG9jaykge1xuICAgICAgICAgICAgICAgIHAuYWN0aXZlRm9ybWF0dGluZ0VsZW1lbnRzLmJvb2ttYXJrID0gZWxlbWVudEVudHJ5O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcC50cmVlQWRhcHRlci5kZXRhY2hOb2RlKGxhc3RFbGVtZW50KTtcbiAgICAgICAgICAgIHAudHJlZUFkYXB0ZXIuYXBwZW5kQ2hpbGQoZWxlbWVudCwgbGFzdEVsZW1lbnQpO1xuICAgICAgICAgICAgbGFzdEVsZW1lbnQgPSBlbGVtZW50O1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBsYXN0RWxlbWVudDtcbn1cbi8vU3RlcCAxMy43IG9mIHRoZSBhbGdvcml0aG1cbmZ1bmN0aW9uIGFhUmVjcmVhdGVFbGVtZW50RnJvbUVudHJ5KHAsIGVsZW1lbnRFbnRyeSkge1xuICAgIGNvbnN0IG5zID0gcC50cmVlQWRhcHRlci5nZXROYW1lc3BhY2VVUkkoZWxlbWVudEVudHJ5LmVsZW1lbnQpO1xuICAgIGNvbnN0IG5ld0VsZW1lbnQgPSBwLnRyZWVBZGFwdGVyLmNyZWF0ZUVsZW1lbnQoZWxlbWVudEVudHJ5LnRva2VuLnRhZ05hbWUsIG5zLCBlbGVtZW50RW50cnkudG9rZW4uYXR0cnMpO1xuICAgIHAub3BlbkVsZW1lbnRzLnJlcGxhY2UoZWxlbWVudEVudHJ5LmVsZW1lbnQsIG5ld0VsZW1lbnQpO1xuICAgIGVsZW1lbnRFbnRyeS5lbGVtZW50ID0gbmV3RWxlbWVudDtcbiAgICByZXR1cm4gbmV3RWxlbWVudDtcbn1cbi8vU3RlcCAxNCBvZiB0aGUgYWxnb3JpdGhtXG5mdW5jdGlvbiBhYUluc2VydExhc3ROb2RlSW5Db21tb25BbmNlc3RvcihwLCBjb21tb25BbmNlc3RvciwgbGFzdEVsZW1lbnQpIHtcbiAgICBjb25zdCB0biA9IHAudHJlZUFkYXB0ZXIuZ2V0VGFnTmFtZShjb21tb25BbmNlc3Rvcik7XG4gICAgY29uc3QgdGlkID0gZ2V0VGFnSUQodG4pO1xuICAgIGlmIChwLl9pc0VsZW1lbnRDYXVzZXNGb3N0ZXJQYXJlbnRpbmcodGlkKSkge1xuICAgICAgICBwLl9mb3N0ZXJQYXJlbnRFbGVtZW50KGxhc3RFbGVtZW50KTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGNvbnN0IG5zID0gcC50cmVlQWRhcHRlci5nZXROYW1lc3BhY2VVUkkoY29tbW9uQW5jZXN0b3IpO1xuICAgICAgICBpZiAodGlkID09PSAkLlRFTVBMQVRFICYmIG5zID09PSBOUy5IVE1MKSB7XG4gICAgICAgICAgICBjb21tb25BbmNlc3RvciA9IHAudHJlZUFkYXB0ZXIuZ2V0VGVtcGxhdGVDb250ZW50KGNvbW1vbkFuY2VzdG9yKTtcbiAgICAgICAgfVxuICAgICAgICBwLnRyZWVBZGFwdGVyLmFwcGVuZENoaWxkKGNvbW1vbkFuY2VzdG9yLCBsYXN0RWxlbWVudCk7XG4gICAgfVxufVxuLy9TdGVwcyAxNS0xOSBvZiB0aGUgYWxnb3JpdGhtXG5mdW5jdGlvbiBhYVJlcGxhY2VGb3JtYXR0aW5nRWxlbWVudChwLCBmdXJ0aGVzdEJsb2NrLCBmb3JtYXR0aW5nRWxlbWVudEVudHJ5KSB7XG4gICAgY29uc3QgbnMgPSBwLnRyZWVBZGFwdGVyLmdldE5hbWVzcGFjZVVSSShmb3JtYXR0aW5nRWxlbWVudEVudHJ5LmVsZW1lbnQpO1xuICAgIGNvbnN0IHsgdG9rZW4gfSA9IGZvcm1hdHRpbmdFbGVtZW50RW50cnk7XG4gICAgY29uc3QgbmV3RWxlbWVudCA9IHAudHJlZUFkYXB0ZXIuY3JlYXRlRWxlbWVudCh0b2tlbi50YWdOYW1lLCBucywgdG9rZW4uYXR0cnMpO1xuICAgIHAuX2Fkb3B0Tm9kZXMoZnVydGhlc3RCbG9jaywgbmV3RWxlbWVudCk7XG4gICAgcC50cmVlQWRhcHRlci5hcHBlbmRDaGlsZChmdXJ0aGVzdEJsb2NrLCBuZXdFbGVtZW50KTtcbiAgICBwLmFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cy5pbnNlcnRFbGVtZW50QWZ0ZXJCb29rbWFyayhuZXdFbGVtZW50LCB0b2tlbik7XG4gICAgcC5hY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMucmVtb3ZlRW50cnkoZm9ybWF0dGluZ0VsZW1lbnRFbnRyeSk7XG4gICAgcC5vcGVuRWxlbWVudHMucmVtb3ZlKGZvcm1hdHRpbmdFbGVtZW50RW50cnkuZWxlbWVudCk7XG4gICAgcC5vcGVuRWxlbWVudHMuaW5zZXJ0QWZ0ZXIoZnVydGhlc3RCbG9jaywgbmV3RWxlbWVudCwgdG9rZW4udGFnSUQpO1xufVxuLy9BbGdvcml0aG0gZW50cnkgcG9pbnRcbmZ1bmN0aW9uIGNhbGxBZG9wdGlvbkFnZW5jeShwLCB0b2tlbikge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgQUFfT1VURVJfTE9PUF9JVEVSOyBpKyspIHtcbiAgICAgICAgY29uc3QgZm9ybWF0dGluZ0VsZW1lbnRFbnRyeSA9IGFhT2J0YWluRm9ybWF0dGluZ0VsZW1lbnRFbnRyeShwLCB0b2tlbik7XG4gICAgICAgIGlmICghZm9ybWF0dGluZ0VsZW1lbnRFbnRyeSkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZnVydGhlc3RCbG9jayA9IGFhT2J0YWluRnVydGhlc3RCbG9jayhwLCBmb3JtYXR0aW5nRWxlbWVudEVudHJ5KTtcbiAgICAgICAgaWYgKCFmdXJ0aGVzdEJsb2NrKSB7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBwLmFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cy5ib29rbWFyayA9IGZvcm1hdHRpbmdFbGVtZW50RW50cnk7XG4gICAgICAgIGNvbnN0IGxhc3RFbGVtZW50ID0gYWFJbm5lckxvb3AocCwgZnVydGhlc3RCbG9jaywgZm9ybWF0dGluZ0VsZW1lbnRFbnRyeS5lbGVtZW50KTtcbiAgICAgICAgY29uc3QgY29tbW9uQW5jZXN0b3IgPSBwLm9wZW5FbGVtZW50cy5nZXRDb21tb25BbmNlc3Rvcihmb3JtYXR0aW5nRWxlbWVudEVudHJ5LmVsZW1lbnQpO1xuICAgICAgICBwLnRyZWVBZGFwdGVyLmRldGFjaE5vZGUobGFzdEVsZW1lbnQpO1xuICAgICAgICBpZiAoY29tbW9uQW5jZXN0b3IpXG4gICAgICAgICAgICBhYUluc2VydExhc3ROb2RlSW5Db21tb25BbmNlc3RvcihwLCBjb21tb25BbmNlc3RvciwgbGFzdEVsZW1lbnQpO1xuICAgICAgICBhYVJlcGxhY2VGb3JtYXR0aW5nRWxlbWVudChwLCBmdXJ0aGVzdEJsb2NrLCBmb3JtYXR0aW5nRWxlbWVudEVudHJ5KTtcbiAgICB9XG59XG4vL0dlbmVyaWMgdG9rZW4gaGFuZGxlcnNcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5mdW5jdGlvbiBhcHBlbmRDb21tZW50KHAsIHRva2VuKSB7XG4gICAgcC5fYXBwZW5kQ29tbWVudE5vZGUodG9rZW4sIHAub3BlbkVsZW1lbnRzLmN1cnJlbnRUbXBsQ29udGVudE9yTm9kZSk7XG59XG5mdW5jdGlvbiBhcHBlbmRDb21tZW50VG9Sb290SHRtbEVsZW1lbnQocCwgdG9rZW4pIHtcbiAgICBwLl9hcHBlbmRDb21tZW50Tm9kZSh0b2tlbiwgcC5vcGVuRWxlbWVudHMuaXRlbXNbMF0pO1xufVxuZnVuY3Rpb24gYXBwZW5kQ29tbWVudFRvRG9jdW1lbnQocCwgdG9rZW4pIHtcbiAgICBwLl9hcHBlbmRDb21tZW50Tm9kZSh0b2tlbiwgcC5kb2N1bWVudCk7XG59XG5mdW5jdGlvbiBzdG9wUGFyc2luZyhwLCB0b2tlbikge1xuICAgIHAuc3RvcHBlZCA9IHRydWU7XG4gICAgLy8gTk9URTogU2V0IGVuZCBsb2NhdGlvbnMgZm9yIGVsZW1lbnRzIHRoYXQgcmVtYWluIG9uIHRoZSBvcGVuIGVsZW1lbnQgc3RhY2suXG4gICAgaWYgKHRva2VuLmxvY2F0aW9uKSB7XG4gICAgICAgIC8vIE5PVEU6IElmIHdlIGFyZSBub3QgaW4gYSBmcmFnbWVudCwgYGh0bWxgIGFuZCBgYm9keWAgd2lsbCBzdGF5IG9uIHRoZSBzdGFjay5cbiAgICAgICAgLy8gVGhpcyBpcyBhIHByb2JsZW0sIGFzIHdlIG1pZ2h0IG92ZXJ3cml0ZSB0aGVpciBlbmQgcG9zaXRpb24gaGVyZS5cbiAgICAgICAgY29uc3QgdGFyZ2V0ID0gcC5mcmFnbWVudENvbnRleHQgPyAwIDogMjtcbiAgICAgICAgZm9yIChsZXQgaSA9IHAub3BlbkVsZW1lbnRzLnN0YWNrVG9wOyBpID49IHRhcmdldDsgaS0tKSB7XG4gICAgICAgICAgICBwLl9zZXRFbmRMb2NhdGlvbihwLm9wZW5FbGVtZW50cy5pdGVtc1tpXSwgdG9rZW4pO1xuICAgICAgICB9XG4gICAgICAgIC8vIEhhbmRsZSBgaHRtbGAgYW5kIGBib2R5YFxuICAgICAgICBpZiAoIXAuZnJhZ21lbnRDb250ZXh0ICYmIHAub3BlbkVsZW1lbnRzLnN0YWNrVG9wID49IDApIHtcbiAgICAgICAgICAgIGNvbnN0IGh0bWxFbGVtZW50ID0gcC5vcGVuRWxlbWVudHMuaXRlbXNbMF07XG4gICAgICAgICAgICBjb25zdCBodG1sTG9jYXRpb24gPSBwLnRyZWVBZGFwdGVyLmdldE5vZGVTb3VyY2VDb2RlTG9jYXRpb24oaHRtbEVsZW1lbnQpO1xuICAgICAgICAgICAgaWYgKGh0bWxMb2NhdGlvbiAmJiAhaHRtbExvY2F0aW9uLmVuZFRhZykge1xuICAgICAgICAgICAgICAgIHAuX3NldEVuZExvY2F0aW9uKGh0bWxFbGVtZW50LCB0b2tlbik7XG4gICAgICAgICAgICAgICAgaWYgKHAub3BlbkVsZW1lbnRzLnN0YWNrVG9wID49IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYm9keUVsZW1lbnQgPSBwLm9wZW5FbGVtZW50cy5pdGVtc1sxXTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYm9keUxvY2F0aW9uID0gcC50cmVlQWRhcHRlci5nZXROb2RlU291cmNlQ29kZUxvY2F0aW9uKGJvZHlFbGVtZW50KTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGJvZHlMb2NhdGlvbiAmJiAhYm9keUxvY2F0aW9uLmVuZFRhZykge1xuICAgICAgICAgICAgICAgICAgICAgICAgcC5fc2V0RW5kTG9jYXRpb24oYm9keUVsZW1lbnQsIHRva2VuKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cbn1cbi8vIFRoZSBcImluaXRpYWxcIiBpbnNlcnRpb24gbW9kZVxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbmZ1bmN0aW9uIGRvY3R5cGVJbkluaXRpYWxNb2RlKHAsIHRva2VuKSB7XG4gICAgcC5fc2V0RG9jdW1lbnRUeXBlKHRva2VuKTtcbiAgICBjb25zdCBtb2RlID0gdG9rZW4uZm9yY2VRdWlya3MgPyBET0NVTUVOVF9NT0RFLlFVSVJLUyA6IGRvY3R5cGUuZ2V0RG9jdW1lbnRNb2RlKHRva2VuKTtcbiAgICBpZiAoIWRvY3R5cGUuaXNDb25mb3JtaW5nKHRva2VuKSkge1xuICAgICAgICBwLl9lcnIodG9rZW4sIEVSUi5ub25Db25mb3JtaW5nRG9jdHlwZSk7XG4gICAgfVxuICAgIHAudHJlZUFkYXB0ZXIuc2V0RG9jdW1lbnRNb2RlKHAuZG9jdW1lbnQsIG1vZGUpO1xuICAgIHAuaW5zZXJ0aW9uTW9kZSA9IEluc2VydGlvbk1vZGUuQkVGT1JFX0hUTUw7XG59XG5mdW5jdGlvbiB0b2tlbkluSW5pdGlhbE1vZGUocCwgdG9rZW4pIHtcbiAgICBwLl9lcnIodG9rZW4sIEVSUi5taXNzaW5nRG9jdHlwZSwgdHJ1ZSk7XG4gICAgcC50cmVlQWRhcHRlci5zZXREb2N1bWVudE1vZGUocC5kb2N1bWVudCwgRE9DVU1FTlRfTU9ERS5RVUlSS1MpO1xuICAgIHAuaW5zZXJ0aW9uTW9kZSA9IEluc2VydGlvbk1vZGUuQkVGT1JFX0hUTUw7XG4gICAgcC5fcHJvY2Vzc1Rva2VuKHRva2VuKTtcbn1cbi8vIFRoZSBcImJlZm9yZSBodG1sXCIgaW5zZXJ0aW9uIG1vZGVcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5mdW5jdGlvbiBzdGFydFRhZ0JlZm9yZUh0bWwocCwgdG9rZW4pIHtcbiAgICBpZiAodG9rZW4udGFnSUQgPT09ICQuSFRNTCkge1xuICAgICAgICBwLl9pbnNlcnRFbGVtZW50KHRva2VuLCBOUy5IVE1MKTtcbiAgICAgICAgcC5pbnNlcnRpb25Nb2RlID0gSW5zZXJ0aW9uTW9kZS5CRUZPUkVfSEVBRDtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHRva2VuQmVmb3JlSHRtbChwLCB0b2tlbik7XG4gICAgfVxufVxuZnVuY3Rpb24gZW5kVGFnQmVmb3JlSHRtbChwLCB0b2tlbikge1xuICAgIGNvbnN0IHRuID0gdG9rZW4udGFnSUQ7XG4gICAgaWYgKHRuID09PSAkLkhUTUwgfHwgdG4gPT09ICQuSEVBRCB8fCB0biA9PT0gJC5CT0RZIHx8IHRuID09PSAkLkJSKSB7XG4gICAgICAgIHRva2VuQmVmb3JlSHRtbChwLCB0b2tlbik7XG4gICAgfVxufVxuZnVuY3Rpb24gdG9rZW5CZWZvcmVIdG1sKHAsIHRva2VuKSB7XG4gICAgcC5faW5zZXJ0RmFrZVJvb3RFbGVtZW50KCk7XG4gICAgcC5pbnNlcnRpb25Nb2RlID0gSW5zZXJ0aW9uTW9kZS5CRUZPUkVfSEVBRDtcbiAgICBwLl9wcm9jZXNzVG9rZW4odG9rZW4pO1xufVxuLy8gVGhlIFwiYmVmb3JlIGhlYWRcIiBpbnNlcnRpb24gbW9kZVxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbmZ1bmN0aW9uIHN0YXJ0VGFnQmVmb3JlSGVhZChwLCB0b2tlbikge1xuICAgIHN3aXRjaCAodG9rZW4udGFnSUQpIHtcbiAgICAgICAgY2FzZSAkLkhUTUw6IHtcbiAgICAgICAgICAgIHN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgJC5IRUFEOiB7XG4gICAgICAgICAgICBwLl9pbnNlcnRFbGVtZW50KHRva2VuLCBOUy5IVE1MKTtcbiAgICAgICAgICAgIHAuaGVhZEVsZW1lbnQgPSBwLm9wZW5FbGVtZW50cy5jdXJyZW50O1xuICAgICAgICAgICAgcC5pbnNlcnRpb25Nb2RlID0gSW5zZXJ0aW9uTW9kZS5JTl9IRUFEO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgdG9rZW5CZWZvcmVIZWFkKHAsIHRva2VuKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbmZ1bmN0aW9uIGVuZFRhZ0JlZm9yZUhlYWQocCwgdG9rZW4pIHtcbiAgICBjb25zdCB0biA9IHRva2VuLnRhZ0lEO1xuICAgIGlmICh0biA9PT0gJC5IRUFEIHx8IHRuID09PSAkLkJPRFkgfHwgdG4gPT09ICQuSFRNTCB8fCB0biA9PT0gJC5CUikge1xuICAgICAgICB0b2tlbkJlZm9yZUhlYWQocCwgdG9rZW4pO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgcC5fZXJyKHRva2VuLCBFUlIuZW5kVGFnV2l0aG91dE1hdGNoaW5nT3BlbkVsZW1lbnQpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIHRva2VuQmVmb3JlSGVhZChwLCB0b2tlbikge1xuICAgIHAuX2luc2VydEZha2VFbGVtZW50KFROLkhFQUQsICQuSEVBRCk7XG4gICAgcC5oZWFkRWxlbWVudCA9IHAub3BlbkVsZW1lbnRzLmN1cnJlbnQ7XG4gICAgcC5pbnNlcnRpb25Nb2RlID0gSW5zZXJ0aW9uTW9kZS5JTl9IRUFEO1xuICAgIHAuX3Byb2Nlc3NUb2tlbih0b2tlbik7XG59XG4vLyBUaGUgXCJpbiBoZWFkXCIgaW5zZXJ0aW9uIG1vZGVcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5mdW5jdGlvbiBzdGFydFRhZ0luSGVhZChwLCB0b2tlbikge1xuICAgIHN3aXRjaCAodG9rZW4udGFnSUQpIHtcbiAgICAgICAgY2FzZSAkLkhUTUw6IHtcbiAgICAgICAgICAgIHN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgJC5CQVNFOlxuICAgICAgICBjYXNlICQuQkFTRUZPTlQ6XG4gICAgICAgIGNhc2UgJC5CR1NPVU5EOlxuICAgICAgICBjYXNlICQuTElOSzpcbiAgICAgICAgY2FzZSAkLk1FVEE6IHtcbiAgICAgICAgICAgIHAuX2FwcGVuZEVsZW1lbnQodG9rZW4sIE5TLkhUTUwpO1xuICAgICAgICAgICAgdG9rZW4uYWNrU2VsZkNsb3NpbmcgPSB0cnVlO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSAkLlRJVExFOiB7XG4gICAgICAgICAgICBwLl9zd2l0Y2hUb1RleHRQYXJzaW5nKHRva2VuLCBUb2tlbml6ZXJNb2RlLlJDREFUQSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjYXNlICQuTk9TQ1JJUFQ6IHtcbiAgICAgICAgICAgIGlmIChwLm9wdGlvbnMuc2NyaXB0aW5nRW5hYmxlZCkge1xuICAgICAgICAgICAgICAgIHAuX3N3aXRjaFRvVGV4dFBhcnNpbmcodG9rZW4sIFRva2VuaXplck1vZGUuUkFXVEVYVCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICBwLl9pbnNlcnRFbGVtZW50KHRva2VuLCBOUy5IVE1MKTtcbiAgICAgICAgICAgICAgICBwLmluc2VydGlvbk1vZGUgPSBJbnNlcnRpb25Nb2RlLklOX0hFQURfTk9fU0NSSVBUO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSAkLk5PRlJBTUVTOlxuICAgICAgICBjYXNlICQuU1RZTEU6IHtcbiAgICAgICAgICAgIHAuX3N3aXRjaFRvVGV4dFBhcnNpbmcodG9rZW4sIFRva2VuaXplck1vZGUuUkFXVEVYVCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjYXNlICQuU0NSSVBUOiB7XG4gICAgICAgICAgICBwLl9zd2l0Y2hUb1RleHRQYXJzaW5nKHRva2VuLCBUb2tlbml6ZXJNb2RlLlNDUklQVF9EQVRBKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgJC5URU1QTEFURToge1xuICAgICAgICAgICAgcC5faW5zZXJ0VGVtcGxhdGUodG9rZW4pO1xuICAgICAgICAgICAgcC5hY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMuaW5zZXJ0TWFya2VyKCk7XG4gICAgICAgICAgICBwLmZyYW1lc2V0T2sgPSBmYWxzZTtcbiAgICAgICAgICAgIHAuaW5zZXJ0aW9uTW9kZSA9IEluc2VydGlvbk1vZGUuSU5fVEVNUExBVEU7XG4gICAgICAgICAgICBwLnRtcGxJbnNlcnRpb25Nb2RlU3RhY2sudW5zaGlmdChJbnNlcnRpb25Nb2RlLklOX1RFTVBMQVRFKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgJC5IRUFEOiB7XG4gICAgICAgICAgICBwLl9lcnIodG9rZW4sIEVSUi5taXNwbGFjZWRTdGFydFRhZ0ZvckhlYWRFbGVtZW50KTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgIHRva2VuSW5IZWFkKHAsIHRva2VuKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbmZ1bmN0aW9uIGVuZFRhZ0luSGVhZChwLCB0b2tlbikge1xuICAgIHN3aXRjaCAodG9rZW4udGFnSUQpIHtcbiAgICAgICAgY2FzZSAkLkhFQUQ6IHtcbiAgICAgICAgICAgIHAub3BlbkVsZW1lbnRzLnBvcCgpO1xuICAgICAgICAgICAgcC5pbnNlcnRpb25Nb2RlID0gSW5zZXJ0aW9uTW9kZS5BRlRFUl9IRUFEO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSAkLkJPRFk6XG4gICAgICAgIGNhc2UgJC5CUjpcbiAgICAgICAgY2FzZSAkLkhUTUw6IHtcbiAgICAgICAgICAgIHRva2VuSW5IZWFkKHAsIHRva2VuKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgJC5URU1QTEFURToge1xuICAgICAgICAgICAgdGVtcGxhdGVFbmRUYWdJbkhlYWQocCwgdG9rZW4pO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgcC5fZXJyKHRva2VuLCBFUlIuZW5kVGFnV2l0aG91dE1hdGNoaW5nT3BlbkVsZW1lbnQpO1xuICAgICAgICB9XG4gICAgfVxufVxuZnVuY3Rpb24gdGVtcGxhdGVFbmRUYWdJbkhlYWQocCwgdG9rZW4pIHtcbiAgICBpZiAocC5vcGVuRWxlbWVudHMudG1wbENvdW50ID4gMCkge1xuICAgICAgICBwLm9wZW5FbGVtZW50cy5nZW5lcmF0ZUltcGxpZWRFbmRUYWdzVGhvcm91Z2hseSgpO1xuICAgICAgICBpZiAocC5vcGVuRWxlbWVudHMuY3VycmVudFRhZ0lkICE9PSAkLlRFTVBMQVRFKSB7XG4gICAgICAgICAgICBwLl9lcnIodG9rZW4sIEVSUi5jbG9zaW5nT2ZFbGVtZW50V2l0aE9wZW5DaGlsZEVsZW1lbnRzKTtcbiAgICAgICAgfVxuICAgICAgICBwLm9wZW5FbGVtZW50cy5wb3BVbnRpbFRhZ05hbWVQb3BwZWQoJC5URU1QTEFURSk7XG4gICAgICAgIHAuYWN0aXZlRm9ybWF0dGluZ0VsZW1lbnRzLmNsZWFyVG9MYXN0TWFya2VyKCk7XG4gICAgICAgIHAudG1wbEluc2VydGlvbk1vZGVTdGFjay5zaGlmdCgpO1xuICAgICAgICBwLl9yZXNldEluc2VydGlvbk1vZGUoKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHAuX2Vycih0b2tlbiwgRVJSLmVuZFRhZ1dpdGhvdXRNYXRjaGluZ09wZW5FbGVtZW50KTtcbiAgICB9XG59XG5mdW5jdGlvbiB0b2tlbkluSGVhZChwLCB0b2tlbikge1xuICAgIHAub3BlbkVsZW1lbnRzLnBvcCgpO1xuICAgIHAuaW5zZXJ0aW9uTW9kZSA9IEluc2VydGlvbk1vZGUuQUZURVJfSEVBRDtcbiAgICBwLl9wcm9jZXNzVG9rZW4odG9rZW4pO1xufVxuLy8gVGhlIFwiaW4gaGVhZCBubyBzY3JpcHRcIiBpbnNlcnRpb24gbW9kZVxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbmZ1bmN0aW9uIHN0YXJ0VGFnSW5IZWFkTm9TY3JpcHQocCwgdG9rZW4pIHtcbiAgICBzd2l0Y2ggKHRva2VuLnRhZ0lEKSB7XG4gICAgICAgIGNhc2UgJC5IVE1MOiB7XG4gICAgICAgICAgICBzdGFydFRhZ0luQm9keShwLCB0b2tlbik7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjYXNlICQuQkFTRUZPTlQ6XG4gICAgICAgIGNhc2UgJC5CR1NPVU5EOlxuICAgICAgICBjYXNlICQuSEVBRDpcbiAgICAgICAgY2FzZSAkLkxJTks6XG4gICAgICAgIGNhc2UgJC5NRVRBOlxuICAgICAgICBjYXNlICQuTk9GUkFNRVM6XG4gICAgICAgIGNhc2UgJC5TVFlMRToge1xuICAgICAgICAgICAgc3RhcnRUYWdJbkhlYWQocCwgdG9rZW4pO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSAkLk5PU0NSSVBUOiB7XG4gICAgICAgICAgICBwLl9lcnIodG9rZW4sIEVSUi5uZXN0ZWROb3NjcmlwdEluSGVhZCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICB0b2tlbkluSGVhZE5vU2NyaXB0KHAsIHRva2VuKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbmZ1bmN0aW9uIGVuZFRhZ0luSGVhZE5vU2NyaXB0KHAsIHRva2VuKSB7XG4gICAgc3dpdGNoICh0b2tlbi50YWdJRCkge1xuICAgICAgICBjYXNlICQuTk9TQ1JJUFQ6IHtcbiAgICAgICAgICAgIHAub3BlbkVsZW1lbnRzLnBvcCgpO1xuICAgICAgICAgICAgcC5pbnNlcnRpb25Nb2RlID0gSW5zZXJ0aW9uTW9kZS5JTl9IRUFEO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSAkLkJSOiB7XG4gICAgICAgICAgICB0b2tlbkluSGVhZE5vU2NyaXB0KHAsIHRva2VuKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgIHAuX2Vycih0b2tlbiwgRVJSLmVuZFRhZ1dpdGhvdXRNYXRjaGluZ09wZW5FbGVtZW50KTtcbiAgICAgICAgfVxuICAgIH1cbn1cbmZ1bmN0aW9uIHRva2VuSW5IZWFkTm9TY3JpcHQocCwgdG9rZW4pIHtcbiAgICBjb25zdCBlcnJDb2RlID0gdG9rZW4udHlwZSA9PT0gVG9rZW5UeXBlLkVPRiA/IEVSUi5vcGVuRWxlbWVudHNMZWZ0QWZ0ZXJFb2YgOiBFUlIuZGlzYWxsb3dlZENvbnRlbnRJbk5vc2NyaXB0SW5IZWFkO1xuICAgIHAuX2Vycih0b2tlbiwgZXJyQ29kZSk7XG4gICAgcC5vcGVuRWxlbWVudHMucG9wKCk7XG4gICAgcC5pbnNlcnRpb25Nb2RlID0gSW5zZXJ0aW9uTW9kZS5JTl9IRUFEO1xuICAgIHAuX3Byb2Nlc3NUb2tlbih0b2tlbik7XG59XG4vLyBUaGUgXCJhZnRlciBoZWFkXCIgaW5zZXJ0aW9uIG1vZGVcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5mdW5jdGlvbiBzdGFydFRhZ0FmdGVySGVhZChwLCB0b2tlbikge1xuICAgIHN3aXRjaCAodG9rZW4udGFnSUQpIHtcbiAgICAgICAgY2FzZSAkLkhUTUw6IHtcbiAgICAgICAgICAgIHN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgJC5CT0RZOiB7XG4gICAgICAgICAgICBwLl9pbnNlcnRFbGVtZW50KHRva2VuLCBOUy5IVE1MKTtcbiAgICAgICAgICAgIHAuZnJhbWVzZXRPayA9IGZhbHNlO1xuICAgICAgICAgICAgcC5pbnNlcnRpb25Nb2RlID0gSW5zZXJ0aW9uTW9kZS5JTl9CT0RZO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSAkLkZSQU1FU0VUOiB7XG4gICAgICAgICAgICBwLl9pbnNlcnRFbGVtZW50KHRva2VuLCBOUy5IVE1MKTtcbiAgICAgICAgICAgIHAuaW5zZXJ0aW9uTW9kZSA9IEluc2VydGlvbk1vZGUuSU5fRlJBTUVTRVQ7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjYXNlICQuQkFTRTpcbiAgICAgICAgY2FzZSAkLkJBU0VGT05UOlxuICAgICAgICBjYXNlICQuQkdTT1VORDpcbiAgICAgICAgY2FzZSAkLkxJTks6XG4gICAgICAgIGNhc2UgJC5NRVRBOlxuICAgICAgICBjYXNlICQuTk9GUkFNRVM6XG4gICAgICAgIGNhc2UgJC5TQ1JJUFQ6XG4gICAgICAgIGNhc2UgJC5TVFlMRTpcbiAgICAgICAgY2FzZSAkLlRFTVBMQVRFOlxuICAgICAgICBjYXNlICQuVElUTEU6IHtcbiAgICAgICAgICAgIHAuX2Vycih0b2tlbiwgRVJSLmFiYW5kb25lZEhlYWRFbGVtZW50Q2hpbGQpO1xuICAgICAgICAgICAgcC5vcGVuRWxlbWVudHMucHVzaChwLmhlYWRFbGVtZW50LCAkLkhFQUQpO1xuICAgICAgICAgICAgc3RhcnRUYWdJbkhlYWQocCwgdG9rZW4pO1xuICAgICAgICAgICAgcC5vcGVuRWxlbWVudHMucmVtb3ZlKHAuaGVhZEVsZW1lbnQpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSAkLkhFQUQ6IHtcbiAgICAgICAgICAgIHAuX2Vycih0b2tlbiwgRVJSLm1pc3BsYWNlZFN0YXJ0VGFnRm9ySGVhZEVsZW1lbnQpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgdG9rZW5BZnRlckhlYWQocCwgdG9rZW4pO1xuICAgICAgICB9XG4gICAgfVxufVxuZnVuY3Rpb24gZW5kVGFnQWZ0ZXJIZWFkKHAsIHRva2VuKSB7XG4gICAgc3dpdGNoICh0b2tlbi50YWdJRCkge1xuICAgICAgICBjYXNlICQuQk9EWTpcbiAgICAgICAgY2FzZSAkLkhUTUw6XG4gICAgICAgIGNhc2UgJC5CUjoge1xuICAgICAgICAgICAgdG9rZW5BZnRlckhlYWQocCwgdG9rZW4pO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSAkLlRFTVBMQVRFOiB7XG4gICAgICAgICAgICB0ZW1wbGF0ZUVuZFRhZ0luSGVhZChwLCB0b2tlbik7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICBwLl9lcnIodG9rZW4sIEVSUi5lbmRUYWdXaXRob3V0TWF0Y2hpbmdPcGVuRWxlbWVudCk7XG4gICAgICAgIH1cbiAgICB9XG59XG5mdW5jdGlvbiB0b2tlbkFmdGVySGVhZChwLCB0b2tlbikge1xuICAgIHAuX2luc2VydEZha2VFbGVtZW50KFROLkJPRFksICQuQk9EWSk7XG4gICAgcC5pbnNlcnRpb25Nb2RlID0gSW5zZXJ0aW9uTW9kZS5JTl9CT0RZO1xuICAgIG1vZGVJbkJvZHkocCwgdG9rZW4pO1xufVxuLy8gVGhlIFwiaW4gYm9keVwiIGluc2VydGlvbiBtb2RlXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuZnVuY3Rpb24gbW9kZUluQm9keShwLCB0b2tlbikge1xuICAgIHN3aXRjaCAodG9rZW4udHlwZSkge1xuICAgICAgICBjYXNlIFRva2VuVHlwZS5DSEFSQUNURVI6IHtcbiAgICAgICAgICAgIGNoYXJhY3RlckluQm9keShwLCB0b2tlbik7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjYXNlIFRva2VuVHlwZS5XSElURVNQQUNFX0NIQVJBQ1RFUjoge1xuICAgICAgICAgICAgd2hpdGVzcGFjZUNoYXJhY3RlckluQm9keShwLCB0b2tlbik7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjYXNlIFRva2VuVHlwZS5DT01NRU5UOiB7XG4gICAgICAgICAgICBhcHBlbmRDb21tZW50KHAsIHRva2VuKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgVG9rZW5UeXBlLlNUQVJUX1RBRzoge1xuICAgICAgICAgICAgc3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSBUb2tlblR5cGUuRU5EX1RBRzoge1xuICAgICAgICAgICAgZW5kVGFnSW5Cb2R5KHAsIHRva2VuKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgVG9rZW5UeXBlLkVPRjoge1xuICAgICAgICAgICAgZW9mSW5Cb2R5KHAsIHRva2VuKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgIC8vIERvIG5vdGhpbmdcbiAgICB9XG59XG5mdW5jdGlvbiB3aGl0ZXNwYWNlQ2hhcmFjdGVySW5Cb2R5KHAsIHRva2VuKSB7XG4gICAgcC5fcmVjb25zdHJ1Y3RBY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMoKTtcbiAgICBwLl9pbnNlcnRDaGFyYWN0ZXJzKHRva2VuKTtcbn1cbmZ1bmN0aW9uIGNoYXJhY3RlckluQm9keShwLCB0b2tlbikge1xuICAgIHAuX3JlY29uc3RydWN0QWN0aXZlRm9ybWF0dGluZ0VsZW1lbnRzKCk7XG4gICAgcC5faW5zZXJ0Q2hhcmFjdGVycyh0b2tlbik7XG4gICAgcC5mcmFtZXNldE9rID0gZmFsc2U7XG59XG5mdW5jdGlvbiBodG1sU3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pIHtcbiAgICBpZiAocC5vcGVuRWxlbWVudHMudG1wbENvdW50ID09PSAwKSB7XG4gICAgICAgIHAudHJlZUFkYXB0ZXIuYWRvcHRBdHRyaWJ1dGVzKHAub3BlbkVsZW1lbnRzLml0ZW1zWzBdLCB0b2tlbi5hdHRycyk7XG4gICAgfVxufVxuZnVuY3Rpb24gYm9keVN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKSB7XG4gICAgY29uc3QgYm9keUVsZW1lbnQgPSBwLm9wZW5FbGVtZW50cy50cnlQZWVrUHJvcGVybHlOZXN0ZWRCb2R5RWxlbWVudCgpO1xuICAgIGlmIChib2R5RWxlbWVudCAmJiBwLm9wZW5FbGVtZW50cy50bXBsQ291bnQgPT09IDApIHtcbiAgICAgICAgcC5mcmFtZXNldE9rID0gZmFsc2U7XG4gICAgICAgIHAudHJlZUFkYXB0ZXIuYWRvcHRBdHRyaWJ1dGVzKGJvZHlFbGVtZW50LCB0b2tlbi5hdHRycyk7XG4gICAgfVxufVxuZnVuY3Rpb24gZnJhbWVzZXRTdGFydFRhZ0luQm9keShwLCB0b2tlbikge1xuICAgIGNvbnN0IGJvZHlFbGVtZW50ID0gcC5vcGVuRWxlbWVudHMudHJ5UGVla1Byb3Blcmx5TmVzdGVkQm9keUVsZW1lbnQoKTtcbiAgICBpZiAocC5mcmFtZXNldE9rICYmIGJvZHlFbGVtZW50KSB7XG4gICAgICAgIHAudHJlZUFkYXB0ZXIuZGV0YWNoTm9kZShib2R5RWxlbWVudCk7XG4gICAgICAgIHAub3BlbkVsZW1lbnRzLnBvcEFsbFVwVG9IdG1sRWxlbWVudCgpO1xuICAgICAgICBwLl9pbnNlcnRFbGVtZW50KHRva2VuLCBOUy5IVE1MKTtcbiAgICAgICAgcC5pbnNlcnRpb25Nb2RlID0gSW5zZXJ0aW9uTW9kZS5JTl9GUkFNRVNFVDtcbiAgICB9XG59XG5mdW5jdGlvbiBhZGRyZXNzU3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pIHtcbiAgICBpZiAocC5vcGVuRWxlbWVudHMuaGFzSW5CdXR0b25TY29wZSgkLlApKSB7XG4gICAgICAgIHAuX2Nsb3NlUEVsZW1lbnQoKTtcbiAgICB9XG4gICAgcC5faW5zZXJ0RWxlbWVudCh0b2tlbiwgTlMuSFRNTCk7XG59XG5mdW5jdGlvbiBudW1iZXJlZEhlYWRlclN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKSB7XG4gICAgaWYgKHAub3BlbkVsZW1lbnRzLmhhc0luQnV0dG9uU2NvcGUoJC5QKSkge1xuICAgICAgICBwLl9jbG9zZVBFbGVtZW50KCk7XG4gICAgfVxuICAgIGlmIChOVU1CRVJFRF9IRUFERVJTLmhhcyhwLm9wZW5FbGVtZW50cy5jdXJyZW50VGFnSWQpKSB7XG4gICAgICAgIHAub3BlbkVsZW1lbnRzLnBvcCgpO1xuICAgIH1cbiAgICBwLl9pbnNlcnRFbGVtZW50KHRva2VuLCBOUy5IVE1MKTtcbn1cbmZ1bmN0aW9uIHByZVN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKSB7XG4gICAgaWYgKHAub3BlbkVsZW1lbnRzLmhhc0luQnV0dG9uU2NvcGUoJC5QKSkge1xuICAgICAgICBwLl9jbG9zZVBFbGVtZW50KCk7XG4gICAgfVxuICAgIHAuX2luc2VydEVsZW1lbnQodG9rZW4sIE5TLkhUTUwpO1xuICAgIC8vTk9URTogSWYgdGhlIG5leHQgdG9rZW4gaXMgYSBVKzAwMEEgTElORSBGRUVEIChMRikgY2hhcmFjdGVyIHRva2VuLCB0aGVuIGlnbm9yZSB0aGF0IHRva2VuIGFuZCBtb3ZlXG4gICAgLy9vbiB0byB0aGUgbmV4dCBvbmUuIChOZXdsaW5lcyBhdCB0aGUgc3RhcnQgb2YgcHJlIGJsb2NrcyBhcmUgaWdub3JlZCBhcyBhbiBhdXRob3JpbmcgY29udmVuaWVuY2UuKVxuICAgIHAuc2tpcE5leHROZXdMaW5lID0gdHJ1ZTtcbiAgICBwLmZyYW1lc2V0T2sgPSBmYWxzZTtcbn1cbmZ1bmN0aW9uIGZvcm1TdGFydFRhZ0luQm9keShwLCB0b2tlbikge1xuICAgIGNvbnN0IGluVGVtcGxhdGUgPSBwLm9wZW5FbGVtZW50cy50bXBsQ291bnQgPiAwO1xuICAgIGlmICghcC5mb3JtRWxlbWVudCB8fCBpblRlbXBsYXRlKSB7XG4gICAgICAgIGlmIChwLm9wZW5FbGVtZW50cy5oYXNJbkJ1dHRvblNjb3BlKCQuUCkpIHtcbiAgICAgICAgICAgIHAuX2Nsb3NlUEVsZW1lbnQoKTtcbiAgICAgICAgfVxuICAgICAgICBwLl9pbnNlcnRFbGVtZW50KHRva2VuLCBOUy5IVE1MKTtcbiAgICAgICAgaWYgKCFpblRlbXBsYXRlKSB7XG4gICAgICAgICAgICBwLmZvcm1FbGVtZW50ID0gcC5vcGVuRWxlbWVudHMuY3VycmVudDtcbiAgICAgICAgfVxuICAgIH1cbn1cbmZ1bmN0aW9uIGxpc3RJdGVtU3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pIHtcbiAgICBwLmZyYW1lc2V0T2sgPSBmYWxzZTtcbiAgICBjb25zdCB0biA9IHRva2VuLnRhZ0lEO1xuICAgIGZvciAobGV0IGkgPSBwLm9wZW5FbGVtZW50cy5zdGFja1RvcDsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgY29uc3QgZWxlbWVudElkID0gcC5vcGVuRWxlbWVudHMudGFnSURzW2ldO1xuICAgICAgICBpZiAoKHRuID09PSAkLkxJICYmIGVsZW1lbnRJZCA9PT0gJC5MSSkgfHxcbiAgICAgICAgICAgICgodG4gPT09ICQuREQgfHwgdG4gPT09ICQuRFQpICYmIChlbGVtZW50SWQgPT09ICQuREQgfHwgZWxlbWVudElkID09PSAkLkRUKSkpIHtcbiAgICAgICAgICAgIHAub3BlbkVsZW1lbnRzLmdlbmVyYXRlSW1wbGllZEVuZFRhZ3NXaXRoRXhjbHVzaW9uKGVsZW1lbnRJZCk7XG4gICAgICAgICAgICBwLm9wZW5FbGVtZW50cy5wb3BVbnRpbFRhZ05hbWVQb3BwZWQoZWxlbWVudElkKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGlmIChlbGVtZW50SWQgIT09ICQuQUREUkVTUyAmJlxuICAgICAgICAgICAgZWxlbWVudElkICE9PSAkLkRJViAmJlxuICAgICAgICAgICAgZWxlbWVudElkICE9PSAkLlAgJiZcbiAgICAgICAgICAgIHAuX2lzU3BlY2lhbEVsZW1lbnQocC5vcGVuRWxlbWVudHMuaXRlbXNbaV0sIGVsZW1lbnRJZCkpIHtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfVxuICAgIGlmIChwLm9wZW5FbGVtZW50cy5oYXNJbkJ1dHRvblNjb3BlKCQuUCkpIHtcbiAgICAgICAgcC5fY2xvc2VQRWxlbWVudCgpO1xuICAgIH1cbiAgICBwLl9pbnNlcnRFbGVtZW50KHRva2VuLCBOUy5IVE1MKTtcbn1cbmZ1bmN0aW9uIHBsYWludGV4dFN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKSB7XG4gICAgaWYgKHAub3BlbkVsZW1lbnRzLmhhc0luQnV0dG9uU2NvcGUoJC5QKSkge1xuICAgICAgICBwLl9jbG9zZVBFbGVtZW50KCk7XG4gICAgfVxuICAgIHAuX2luc2VydEVsZW1lbnQodG9rZW4sIE5TLkhUTUwpO1xuICAgIHAudG9rZW5pemVyLnN0YXRlID0gVG9rZW5pemVyTW9kZS5QTEFJTlRFWFQ7XG59XG5mdW5jdGlvbiBidXR0b25TdGFydFRhZ0luQm9keShwLCB0b2tlbikge1xuICAgIGlmIChwLm9wZW5FbGVtZW50cy5oYXNJblNjb3BlKCQuQlVUVE9OKSkge1xuICAgICAgICBwLm9wZW5FbGVtZW50cy5nZW5lcmF0ZUltcGxpZWRFbmRUYWdzKCk7XG4gICAgICAgIHAub3BlbkVsZW1lbnRzLnBvcFVudGlsVGFnTmFtZVBvcHBlZCgkLkJVVFRPTik7XG4gICAgfVxuICAgIHAuX3JlY29uc3RydWN0QWN0aXZlRm9ybWF0dGluZ0VsZW1lbnRzKCk7XG4gICAgcC5faW5zZXJ0RWxlbWVudCh0b2tlbiwgTlMuSFRNTCk7XG4gICAgcC5mcmFtZXNldE9rID0gZmFsc2U7XG59XG5mdW5jdGlvbiBhU3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pIHtcbiAgICBjb25zdCBhY3RpdmVFbGVtZW50RW50cnkgPSBwLmFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cy5nZXRFbGVtZW50RW50cnlJblNjb3BlV2l0aFRhZ05hbWUoVE4uQSk7XG4gICAgaWYgKGFjdGl2ZUVsZW1lbnRFbnRyeSkge1xuICAgICAgICBjYWxsQWRvcHRpb25BZ2VuY3kocCwgdG9rZW4pO1xuICAgICAgICBwLm9wZW5FbGVtZW50cy5yZW1vdmUoYWN0aXZlRWxlbWVudEVudHJ5LmVsZW1lbnQpO1xuICAgICAgICBwLmFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cy5yZW1vdmVFbnRyeShhY3RpdmVFbGVtZW50RW50cnkpO1xuICAgIH1cbiAgICBwLl9yZWNvbnN0cnVjdEFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cygpO1xuICAgIHAuX2luc2VydEVsZW1lbnQodG9rZW4sIE5TLkhUTUwpO1xuICAgIHAuYWN0aXZlRm9ybWF0dGluZ0VsZW1lbnRzLnB1c2hFbGVtZW50KHAub3BlbkVsZW1lbnRzLmN1cnJlbnQsIHRva2VuKTtcbn1cbmZ1bmN0aW9uIGJTdGFydFRhZ0luQm9keShwLCB0b2tlbikge1xuICAgIHAuX3JlY29uc3RydWN0QWN0aXZlRm9ybWF0dGluZ0VsZW1lbnRzKCk7XG4gICAgcC5faW5zZXJ0RWxlbWVudCh0b2tlbiwgTlMuSFRNTCk7XG4gICAgcC5hY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMucHVzaEVsZW1lbnQocC5vcGVuRWxlbWVudHMuY3VycmVudCwgdG9rZW4pO1xufVxuZnVuY3Rpb24gbm9iclN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKSB7XG4gICAgcC5fcmVjb25zdHJ1Y3RBY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMoKTtcbiAgICBpZiAocC5vcGVuRWxlbWVudHMuaGFzSW5TY29wZSgkLk5PQlIpKSB7XG4gICAgICAgIGNhbGxBZG9wdGlvbkFnZW5jeShwLCB0b2tlbik7XG4gICAgICAgIHAuX3JlY29uc3RydWN0QWN0aXZlRm9ybWF0dGluZ0VsZW1lbnRzKCk7XG4gICAgfVxuICAgIHAuX2luc2VydEVsZW1lbnQodG9rZW4sIE5TLkhUTUwpO1xuICAgIHAuYWN0aXZlRm9ybWF0dGluZ0VsZW1lbnRzLnB1c2hFbGVtZW50KHAub3BlbkVsZW1lbnRzLmN1cnJlbnQsIHRva2VuKTtcbn1cbmZ1bmN0aW9uIGFwcGxldFN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKSB7XG4gICAgcC5fcmVjb25zdHJ1Y3RBY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMoKTtcbiAgICBwLl9pbnNlcnRFbGVtZW50KHRva2VuLCBOUy5IVE1MKTtcbiAgICBwLmFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cy5pbnNlcnRNYXJrZXIoKTtcbiAgICBwLmZyYW1lc2V0T2sgPSBmYWxzZTtcbn1cbmZ1bmN0aW9uIHRhYmxlU3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pIHtcbiAgICBpZiAocC50cmVlQWRhcHRlci5nZXREb2N1bWVudE1vZGUocC5kb2N1bWVudCkgIT09IERPQ1VNRU5UX01PREUuUVVJUktTICYmIHAub3BlbkVsZW1lbnRzLmhhc0luQnV0dG9uU2NvcGUoJC5QKSkge1xuICAgICAgICBwLl9jbG9zZVBFbGVtZW50KCk7XG4gICAgfVxuICAgIHAuX2luc2VydEVsZW1lbnQodG9rZW4sIE5TLkhUTUwpO1xuICAgIHAuZnJhbWVzZXRPayA9IGZhbHNlO1xuICAgIHAuaW5zZXJ0aW9uTW9kZSA9IEluc2VydGlvbk1vZGUuSU5fVEFCTEU7XG59XG5mdW5jdGlvbiBhcmVhU3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pIHtcbiAgICBwLl9yZWNvbnN0cnVjdEFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cygpO1xuICAgIHAuX2FwcGVuZEVsZW1lbnQodG9rZW4sIE5TLkhUTUwpO1xuICAgIHAuZnJhbWVzZXRPayA9IGZhbHNlO1xuICAgIHRva2VuLmFja1NlbGZDbG9zaW5nID0gdHJ1ZTtcbn1cbmZ1bmN0aW9uIGlzSGlkZGVuSW5wdXQodG9rZW4pIHtcbiAgICBjb25zdCBpbnB1dFR5cGUgPSBnZXRUb2tlbkF0dHIodG9rZW4sIEFUVFJTLlRZUEUpO1xuICAgIHJldHVybiBpbnB1dFR5cGUgIT0gbnVsbCAmJiBpbnB1dFR5cGUudG9Mb3dlckNhc2UoKSA9PT0gSElEREVOX0lOUFVUX1RZUEU7XG59XG5mdW5jdGlvbiBpbnB1dFN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKSB7XG4gICAgcC5fcmVjb25zdHJ1Y3RBY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMoKTtcbiAgICBwLl9hcHBlbmRFbGVtZW50KHRva2VuLCBOUy5IVE1MKTtcbiAgICBpZiAoIWlzSGlkZGVuSW5wdXQodG9rZW4pKSB7XG4gICAgICAgIHAuZnJhbWVzZXRPayA9IGZhbHNlO1xuICAgIH1cbiAgICB0b2tlbi5hY2tTZWxmQ2xvc2luZyA9IHRydWU7XG59XG5mdW5jdGlvbiBwYXJhbVN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKSB7XG4gICAgcC5fYXBwZW5kRWxlbWVudCh0b2tlbiwgTlMuSFRNTCk7XG4gICAgdG9rZW4uYWNrU2VsZkNsb3NpbmcgPSB0cnVlO1xufVxuZnVuY3Rpb24gaHJTdGFydFRhZ0luQm9keShwLCB0b2tlbikge1xuICAgIGlmIChwLm9wZW5FbGVtZW50cy5oYXNJbkJ1dHRvblNjb3BlKCQuUCkpIHtcbiAgICAgICAgcC5fY2xvc2VQRWxlbWVudCgpO1xuICAgIH1cbiAgICBwLl9hcHBlbmRFbGVtZW50KHRva2VuLCBOUy5IVE1MKTtcbiAgICBwLmZyYW1lc2V0T2sgPSBmYWxzZTtcbiAgICB0b2tlbi5hY2tTZWxmQ2xvc2luZyA9IHRydWU7XG59XG5mdW5jdGlvbiBpbWFnZVN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKSB7XG4gICAgdG9rZW4udGFnTmFtZSA9IFROLklNRztcbiAgICB0b2tlbi50YWdJRCA9ICQuSU1HO1xuICAgIGFyZWFTdGFydFRhZ0luQm9keShwLCB0b2tlbik7XG59XG5mdW5jdGlvbiB0ZXh0YXJlYVN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKSB7XG4gICAgcC5faW5zZXJ0RWxlbWVudCh0b2tlbiwgTlMuSFRNTCk7XG4gICAgLy9OT1RFOiBJZiB0aGUgbmV4dCB0b2tlbiBpcyBhIFUrMDAwQSBMSU5FIEZFRUQgKExGKSBjaGFyYWN0ZXIgdG9rZW4sIHRoZW4gaWdub3JlIHRoYXQgdG9rZW4gYW5kIG1vdmVcbiAgICAvL29uIHRvIHRoZSBuZXh0IG9uZS4gKE5ld2xpbmVzIGF0IHRoZSBzdGFydCBvZiB0ZXh0YXJlYSBlbGVtZW50cyBhcmUgaWdub3JlZCBhcyBhbiBhdXRob3JpbmcgY29udmVuaWVuY2UuKVxuICAgIHAuc2tpcE5leHROZXdMaW5lID0gdHJ1ZTtcbiAgICBwLnRva2VuaXplci5zdGF0ZSA9IFRva2VuaXplck1vZGUuUkNEQVRBO1xuICAgIHAub3JpZ2luYWxJbnNlcnRpb25Nb2RlID0gcC5pbnNlcnRpb25Nb2RlO1xuICAgIHAuZnJhbWVzZXRPayA9IGZhbHNlO1xuICAgIHAuaW5zZXJ0aW9uTW9kZSA9IEluc2VydGlvbk1vZGUuVEVYVDtcbn1cbmZ1bmN0aW9uIHhtcFN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKSB7XG4gICAgaWYgKHAub3BlbkVsZW1lbnRzLmhhc0luQnV0dG9uU2NvcGUoJC5QKSkge1xuICAgICAgICBwLl9jbG9zZVBFbGVtZW50KCk7XG4gICAgfVxuICAgIHAuX3JlY29uc3RydWN0QWN0aXZlRm9ybWF0dGluZ0VsZW1lbnRzKCk7XG4gICAgcC5mcmFtZXNldE9rID0gZmFsc2U7XG4gICAgcC5fc3dpdGNoVG9UZXh0UGFyc2luZyh0b2tlbiwgVG9rZW5pemVyTW9kZS5SQVdURVhUKTtcbn1cbmZ1bmN0aW9uIGlmcmFtZVN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKSB7XG4gICAgcC5mcmFtZXNldE9rID0gZmFsc2U7XG4gICAgcC5fc3dpdGNoVG9UZXh0UGFyc2luZyh0b2tlbiwgVG9rZW5pemVyTW9kZS5SQVdURVhUKTtcbn1cbi8vTk9URTogaGVyZSB3ZSBhc3N1bWUgdGhhdCB3ZSBhbHdheXMgYWN0IGFzIGEgdXNlciBhZ2VudCB3aXRoIGVuYWJsZWQgcGx1Z2lucy9mcmFtZXMsIHNvIHdlIHBhcnNlXG4vLzxub2VtYmVkPi88bm9mcmFtZXM+IGFzIHJhd3RleHQuXG5mdW5jdGlvbiByYXdUZXh0U3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pIHtcbiAgICBwLl9zd2l0Y2hUb1RleHRQYXJzaW5nKHRva2VuLCBUb2tlbml6ZXJNb2RlLlJBV1RFWFQpO1xufVxuZnVuY3Rpb24gc2VsZWN0U3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pIHtcbiAgICBwLl9yZWNvbnN0cnVjdEFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cygpO1xuICAgIHAuX2luc2VydEVsZW1lbnQodG9rZW4sIE5TLkhUTUwpO1xuICAgIHAuZnJhbWVzZXRPayA9IGZhbHNlO1xuICAgIHAuaW5zZXJ0aW9uTW9kZSA9XG4gICAgICAgIHAuaW5zZXJ0aW9uTW9kZSA9PT0gSW5zZXJ0aW9uTW9kZS5JTl9UQUJMRSB8fFxuICAgICAgICAgICAgcC5pbnNlcnRpb25Nb2RlID09PSBJbnNlcnRpb25Nb2RlLklOX0NBUFRJT04gfHxcbiAgICAgICAgICAgIHAuaW5zZXJ0aW9uTW9kZSA9PT0gSW5zZXJ0aW9uTW9kZS5JTl9UQUJMRV9CT0RZIHx8XG4gICAgICAgICAgICBwLmluc2VydGlvbk1vZGUgPT09IEluc2VydGlvbk1vZGUuSU5fUk9XIHx8XG4gICAgICAgICAgICBwLmluc2VydGlvbk1vZGUgPT09IEluc2VydGlvbk1vZGUuSU5fQ0VMTFxuICAgICAgICAgICAgPyBJbnNlcnRpb25Nb2RlLklOX1NFTEVDVF9JTl9UQUJMRVxuICAgICAgICAgICAgOiBJbnNlcnRpb25Nb2RlLklOX1NFTEVDVDtcbn1cbmZ1bmN0aW9uIG9wdGdyb3VwU3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pIHtcbiAgICBpZiAocC5vcGVuRWxlbWVudHMuY3VycmVudFRhZ0lkID09PSAkLk9QVElPTikge1xuICAgICAgICBwLm9wZW5FbGVtZW50cy5wb3AoKTtcbiAgICB9XG4gICAgcC5fcmVjb25zdHJ1Y3RBY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMoKTtcbiAgICBwLl9pbnNlcnRFbGVtZW50KHRva2VuLCBOUy5IVE1MKTtcbn1cbmZ1bmN0aW9uIHJiU3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pIHtcbiAgICBpZiAocC5vcGVuRWxlbWVudHMuaGFzSW5TY29wZSgkLlJVQlkpKSB7XG4gICAgICAgIHAub3BlbkVsZW1lbnRzLmdlbmVyYXRlSW1wbGllZEVuZFRhZ3MoKTtcbiAgICB9XG4gICAgcC5faW5zZXJ0RWxlbWVudCh0b2tlbiwgTlMuSFRNTCk7XG59XG5mdW5jdGlvbiBydFN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKSB7XG4gICAgaWYgKHAub3BlbkVsZW1lbnRzLmhhc0luU2NvcGUoJC5SVUJZKSkge1xuICAgICAgICBwLm9wZW5FbGVtZW50cy5nZW5lcmF0ZUltcGxpZWRFbmRUYWdzV2l0aEV4Y2x1c2lvbigkLlJUQyk7XG4gICAgfVxuICAgIHAuX2luc2VydEVsZW1lbnQodG9rZW4sIE5TLkhUTUwpO1xufVxuZnVuY3Rpb24gbWF0aFN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKSB7XG4gICAgcC5fcmVjb25zdHJ1Y3RBY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMoKTtcbiAgICBmb3JlaWduQ29udGVudC5hZGp1c3RUb2tlbk1hdGhNTEF0dHJzKHRva2VuKTtcbiAgICBmb3JlaWduQ29udGVudC5hZGp1c3RUb2tlblhNTEF0dHJzKHRva2VuKTtcbiAgICBpZiAodG9rZW4uc2VsZkNsb3NpbmcpIHtcbiAgICAgICAgcC5fYXBwZW5kRWxlbWVudCh0b2tlbiwgTlMuTUFUSE1MKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHAuX2luc2VydEVsZW1lbnQodG9rZW4sIE5TLk1BVEhNTCk7XG4gICAgfVxuICAgIHRva2VuLmFja1NlbGZDbG9zaW5nID0gdHJ1ZTtcbn1cbmZ1bmN0aW9uIHN2Z1N0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKSB7XG4gICAgcC5fcmVjb25zdHJ1Y3RBY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMoKTtcbiAgICBmb3JlaWduQ29udGVudC5hZGp1c3RUb2tlblNWR0F0dHJzKHRva2VuKTtcbiAgICBmb3JlaWduQ29udGVudC5hZGp1c3RUb2tlblhNTEF0dHJzKHRva2VuKTtcbiAgICBpZiAodG9rZW4uc2VsZkNsb3NpbmcpIHtcbiAgICAgICAgcC5fYXBwZW5kRWxlbWVudCh0b2tlbiwgTlMuU1ZHKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHAuX2luc2VydEVsZW1lbnQodG9rZW4sIE5TLlNWRyk7XG4gICAgfVxuICAgIHRva2VuLmFja1NlbGZDbG9zaW5nID0gdHJ1ZTtcbn1cbmZ1bmN0aW9uIGdlbmVyaWNTdGFydFRhZ0luQm9keShwLCB0b2tlbikge1xuICAgIHAuX3JlY29uc3RydWN0QWN0aXZlRm9ybWF0dGluZ0VsZW1lbnRzKCk7XG4gICAgcC5faW5zZXJ0RWxlbWVudCh0b2tlbiwgTlMuSFRNTCk7XG59XG5mdW5jdGlvbiBzdGFydFRhZ0luQm9keShwLCB0b2tlbikge1xuICAgIHN3aXRjaCAodG9rZW4udGFnSUQpIHtcbiAgICAgICAgY2FzZSAkLkk6XG4gICAgICAgIGNhc2UgJC5TOlxuICAgICAgICBjYXNlICQuQjpcbiAgICAgICAgY2FzZSAkLlU6XG4gICAgICAgIGNhc2UgJC5FTTpcbiAgICAgICAgY2FzZSAkLlRUOlxuICAgICAgICBjYXNlICQuQklHOlxuICAgICAgICBjYXNlICQuQ09ERTpcbiAgICAgICAgY2FzZSAkLkZPTlQ6XG4gICAgICAgIGNhc2UgJC5TTUFMTDpcbiAgICAgICAgY2FzZSAkLlNUUklLRTpcbiAgICAgICAgY2FzZSAkLlNUUk9ORzoge1xuICAgICAgICAgICAgYlN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgJC5BOiB7XG4gICAgICAgICAgICBhU3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSAkLkgxOlxuICAgICAgICBjYXNlICQuSDI6XG4gICAgICAgIGNhc2UgJC5IMzpcbiAgICAgICAgY2FzZSAkLkg0OlxuICAgICAgICBjYXNlICQuSDU6XG4gICAgICAgIGNhc2UgJC5INjoge1xuICAgICAgICAgICAgbnVtYmVyZWRIZWFkZXJTdGFydFRhZ0luQm9keShwLCB0b2tlbik7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjYXNlICQuUDpcbiAgICAgICAgY2FzZSAkLkRMOlxuICAgICAgICBjYXNlICQuT0w6XG4gICAgICAgIGNhc2UgJC5VTDpcbiAgICAgICAgY2FzZSAkLkRJVjpcbiAgICAgICAgY2FzZSAkLkRJUjpcbiAgICAgICAgY2FzZSAkLk5BVjpcbiAgICAgICAgY2FzZSAkLk1BSU46XG4gICAgICAgIGNhc2UgJC5NRU5VOlxuICAgICAgICBjYXNlICQuQVNJREU6XG4gICAgICAgIGNhc2UgJC5DRU5URVI6XG4gICAgICAgIGNhc2UgJC5GSUdVUkU6XG4gICAgICAgIGNhc2UgJC5GT09URVI6XG4gICAgICAgIGNhc2UgJC5IRUFERVI6XG4gICAgICAgIGNhc2UgJC5IR1JPVVA6XG4gICAgICAgIGNhc2UgJC5ESUFMT0c6XG4gICAgICAgIGNhc2UgJC5ERVRBSUxTOlxuICAgICAgICBjYXNlICQuQUREUkVTUzpcbiAgICAgICAgY2FzZSAkLkFSVElDTEU6XG4gICAgICAgIGNhc2UgJC5TRUFSQ0g6XG4gICAgICAgIGNhc2UgJC5TRUNUSU9OOlxuICAgICAgICBjYXNlICQuU1VNTUFSWTpcbiAgICAgICAgY2FzZSAkLkZJRUxEU0VUOlxuICAgICAgICBjYXNlICQuQkxPQ0tRVU9URTpcbiAgICAgICAgY2FzZSAkLkZJR0NBUFRJT046IHtcbiAgICAgICAgICAgIGFkZHJlc3NTdGFydFRhZ0luQm9keShwLCB0b2tlbik7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjYXNlICQuTEk6XG4gICAgICAgIGNhc2UgJC5ERDpcbiAgICAgICAgY2FzZSAkLkRUOiB7XG4gICAgICAgICAgICBsaXN0SXRlbVN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgJC5CUjpcbiAgICAgICAgY2FzZSAkLklNRzpcbiAgICAgICAgY2FzZSAkLldCUjpcbiAgICAgICAgY2FzZSAkLkFSRUE6XG4gICAgICAgIGNhc2UgJC5FTUJFRDpcbiAgICAgICAgY2FzZSAkLktFWUdFTjoge1xuICAgICAgICAgICAgYXJlYVN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgJC5IUjoge1xuICAgICAgICAgICAgaHJTdGFydFRhZ0luQm9keShwLCB0b2tlbik7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjYXNlICQuUkI6XG4gICAgICAgIGNhc2UgJC5SVEM6IHtcbiAgICAgICAgICAgIHJiU3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSAkLlJUOlxuICAgICAgICBjYXNlICQuUlA6IHtcbiAgICAgICAgICAgIHJ0U3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSAkLlBSRTpcbiAgICAgICAgY2FzZSAkLkxJU1RJTkc6IHtcbiAgICAgICAgICAgIHByZVN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgJC5YTVA6IHtcbiAgICAgICAgICAgIHhtcFN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgJC5TVkc6IHtcbiAgICAgICAgICAgIHN2Z1N0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgJC5IVE1MOiB7XG4gICAgICAgICAgICBodG1sU3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSAkLkJBU0U6XG4gICAgICAgIGNhc2UgJC5MSU5LOlxuICAgICAgICBjYXNlICQuTUVUQTpcbiAgICAgICAgY2FzZSAkLlNUWUxFOlxuICAgICAgICBjYXNlICQuVElUTEU6XG4gICAgICAgIGNhc2UgJC5TQ1JJUFQ6XG4gICAgICAgIGNhc2UgJC5CR1NPVU5EOlxuICAgICAgICBjYXNlICQuQkFTRUZPTlQ6XG4gICAgICAgIGNhc2UgJC5URU1QTEFURToge1xuICAgICAgICAgICAgc3RhcnRUYWdJbkhlYWQocCwgdG9rZW4pO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSAkLkJPRFk6IHtcbiAgICAgICAgICAgIGJvZHlTdGFydFRhZ0luQm9keShwLCB0b2tlbik7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjYXNlICQuRk9STToge1xuICAgICAgICAgICAgZm9ybVN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgJC5OT0JSOiB7XG4gICAgICAgICAgICBub2JyU3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSAkLk1BVEg6IHtcbiAgICAgICAgICAgIG1hdGhTdGFydFRhZ0luQm9keShwLCB0b2tlbik7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjYXNlICQuVEFCTEU6IHtcbiAgICAgICAgICAgIHRhYmxlU3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSAkLklOUFVUOiB7XG4gICAgICAgICAgICBpbnB1dFN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgJC5QQVJBTTpcbiAgICAgICAgY2FzZSAkLlRSQUNLOlxuICAgICAgICBjYXNlICQuU09VUkNFOiB7XG4gICAgICAgICAgICBwYXJhbVN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgJC5JTUFHRToge1xuICAgICAgICAgICAgaW1hZ2VTdGFydFRhZ0luQm9keShwLCB0b2tlbik7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjYXNlICQuQlVUVE9OOiB7XG4gICAgICAgICAgICBidXR0b25TdGFydFRhZ0luQm9keShwLCB0b2tlbik7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjYXNlICQuQVBQTEVUOlxuICAgICAgICBjYXNlICQuT0JKRUNUOlxuICAgICAgICBjYXNlICQuTUFSUVVFRToge1xuICAgICAgICAgICAgYXBwbGV0U3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSAkLklGUkFNRToge1xuICAgICAgICAgICAgaWZyYW1lU3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSAkLlNFTEVDVDoge1xuICAgICAgICAgICAgc2VsZWN0U3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSAkLk9QVElPTjpcbiAgICAgICAgY2FzZSAkLk9QVEdST1VQOiB7XG4gICAgICAgICAgICBvcHRncm91cFN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgJC5OT0VNQkVEOlxuICAgICAgICBjYXNlICQuTk9GUkFNRVM6IHtcbiAgICAgICAgICAgIHJhd1RleHRTdGFydFRhZ0luQm9keShwLCB0b2tlbik7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjYXNlICQuRlJBTUVTRVQ6IHtcbiAgICAgICAgICAgIGZyYW1lc2V0U3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSAkLlRFWFRBUkVBOiB7XG4gICAgICAgICAgICB0ZXh0YXJlYVN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgJC5OT1NDUklQVDoge1xuICAgICAgICAgICAgaWYgKHAub3B0aW9ucy5zY3JpcHRpbmdFbmFibGVkKSB7XG4gICAgICAgICAgICAgICAgcmF3VGV4dFN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGdlbmVyaWNTdGFydFRhZ0luQm9keShwLCB0b2tlbik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjYXNlICQuUExBSU5URVhUOiB7XG4gICAgICAgICAgICBwbGFpbnRleHRTdGFydFRhZ0luQm9keShwLCB0b2tlbik7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjYXNlICQuQ09MOlxuICAgICAgICBjYXNlICQuVEg6XG4gICAgICAgIGNhc2UgJC5URDpcbiAgICAgICAgY2FzZSAkLlRSOlxuICAgICAgICBjYXNlICQuSEVBRDpcbiAgICAgICAgY2FzZSAkLkZSQU1FOlxuICAgICAgICBjYXNlICQuVEJPRFk6XG4gICAgICAgIGNhc2UgJC5URk9PVDpcbiAgICAgICAgY2FzZSAkLlRIRUFEOlxuICAgICAgICBjYXNlICQuQ0FQVElPTjpcbiAgICAgICAgY2FzZSAkLkNPTEdST1VQOiB7XG4gICAgICAgICAgICAvLyBJZ25vcmUgdG9rZW5cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgIGdlbmVyaWNTdGFydFRhZ0luQm9keShwLCB0b2tlbik7XG4gICAgICAgIH1cbiAgICB9XG59XG5mdW5jdGlvbiBib2R5RW5kVGFnSW5Cb2R5KHAsIHRva2VuKSB7XG4gICAgaWYgKHAub3BlbkVsZW1lbnRzLmhhc0luU2NvcGUoJC5CT0RZKSkge1xuICAgICAgICBwLmluc2VydGlvbk1vZGUgPSBJbnNlcnRpb25Nb2RlLkFGVEVSX0JPRFk7XG4gICAgICAgIC8vTk9URTogPGJvZHk+IGlzIG5ldmVyIHBvcHBlZCBmcm9tIHRoZSBzdGFjaywgc28gd2UgbmVlZCB0byB1cGRhdGVkXG4gICAgICAgIC8vdGhlIGVuZCBsb2NhdGlvbiBleHBsaWNpdGx5LlxuICAgICAgICBpZiAocC5vcHRpb25zLnNvdXJjZUNvZGVMb2NhdGlvbkluZm8pIHtcbiAgICAgICAgICAgIGNvbnN0IGJvZHlFbGVtZW50ID0gcC5vcGVuRWxlbWVudHMudHJ5UGVla1Byb3Blcmx5TmVzdGVkQm9keUVsZW1lbnQoKTtcbiAgICAgICAgICAgIGlmIChib2R5RWxlbWVudCkge1xuICAgICAgICAgICAgICAgIHAuX3NldEVuZExvY2F0aW9uKGJvZHlFbGVtZW50LCB0b2tlbik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59XG5mdW5jdGlvbiBodG1sRW5kVGFnSW5Cb2R5KHAsIHRva2VuKSB7XG4gICAgaWYgKHAub3BlbkVsZW1lbnRzLmhhc0luU2NvcGUoJC5CT0RZKSkge1xuICAgICAgICBwLmluc2VydGlvbk1vZGUgPSBJbnNlcnRpb25Nb2RlLkFGVEVSX0JPRFk7XG4gICAgICAgIGVuZFRhZ0FmdGVyQm9keShwLCB0b2tlbik7XG4gICAgfVxufVxuZnVuY3Rpb24gYWRkcmVzc0VuZFRhZ0luQm9keShwLCB0b2tlbikge1xuICAgIGNvbnN0IHRuID0gdG9rZW4udGFnSUQ7XG4gICAgaWYgKHAub3BlbkVsZW1lbnRzLmhhc0luU2NvcGUodG4pKSB7XG4gICAgICAgIHAub3BlbkVsZW1lbnRzLmdlbmVyYXRlSW1wbGllZEVuZFRhZ3MoKTtcbiAgICAgICAgcC5vcGVuRWxlbWVudHMucG9wVW50aWxUYWdOYW1lUG9wcGVkKHRuKTtcbiAgICB9XG59XG5mdW5jdGlvbiBmb3JtRW5kVGFnSW5Cb2R5KHApIHtcbiAgICBjb25zdCBpblRlbXBsYXRlID0gcC5vcGVuRWxlbWVudHMudG1wbENvdW50ID4gMDtcbiAgICBjb25zdCB7IGZvcm1FbGVtZW50IH0gPSBwO1xuICAgIGlmICghaW5UZW1wbGF0ZSkge1xuICAgICAgICBwLmZvcm1FbGVtZW50ID0gbnVsbDtcbiAgICB9XG4gICAgaWYgKChmb3JtRWxlbWVudCB8fCBpblRlbXBsYXRlKSAmJiBwLm9wZW5FbGVtZW50cy5oYXNJblNjb3BlKCQuRk9STSkpIHtcbiAgICAgICAgcC5vcGVuRWxlbWVudHMuZ2VuZXJhdGVJbXBsaWVkRW5kVGFncygpO1xuICAgICAgICBpZiAoaW5UZW1wbGF0ZSkge1xuICAgICAgICAgICAgcC5vcGVuRWxlbWVudHMucG9wVW50aWxUYWdOYW1lUG9wcGVkKCQuRk9STSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZm9ybUVsZW1lbnQpIHtcbiAgICAgICAgICAgIHAub3BlbkVsZW1lbnRzLnJlbW92ZShmb3JtRWxlbWVudCk7XG4gICAgICAgIH1cbiAgICB9XG59XG5mdW5jdGlvbiBwRW5kVGFnSW5Cb2R5KHApIHtcbiAgICBpZiAoIXAub3BlbkVsZW1lbnRzLmhhc0luQnV0dG9uU2NvcGUoJC5QKSkge1xuICAgICAgICBwLl9pbnNlcnRGYWtlRWxlbWVudChUTi5QLCAkLlApO1xuICAgIH1cbiAgICBwLl9jbG9zZVBFbGVtZW50KCk7XG59XG5mdW5jdGlvbiBsaUVuZFRhZ0luQm9keShwKSB7XG4gICAgaWYgKHAub3BlbkVsZW1lbnRzLmhhc0luTGlzdEl0ZW1TY29wZSgkLkxJKSkge1xuICAgICAgICBwLm9wZW5FbGVtZW50cy5nZW5lcmF0ZUltcGxpZWRFbmRUYWdzV2l0aEV4Y2x1c2lvbigkLkxJKTtcbiAgICAgICAgcC5vcGVuRWxlbWVudHMucG9wVW50aWxUYWdOYW1lUG9wcGVkKCQuTEkpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGRkRW5kVGFnSW5Cb2R5KHAsIHRva2VuKSB7XG4gICAgY29uc3QgdG4gPSB0b2tlbi50YWdJRDtcbiAgICBpZiAocC5vcGVuRWxlbWVudHMuaGFzSW5TY29wZSh0bikpIHtcbiAgICAgICAgcC5vcGVuRWxlbWVudHMuZ2VuZXJhdGVJbXBsaWVkRW5kVGFnc1dpdGhFeGNsdXNpb24odG4pO1xuICAgICAgICBwLm9wZW5FbGVtZW50cy5wb3BVbnRpbFRhZ05hbWVQb3BwZWQodG4pO1xuICAgIH1cbn1cbmZ1bmN0aW9uIG51bWJlcmVkSGVhZGVyRW5kVGFnSW5Cb2R5KHApIHtcbiAgICBpZiAocC5vcGVuRWxlbWVudHMuaGFzTnVtYmVyZWRIZWFkZXJJblNjb3BlKCkpIHtcbiAgICAgICAgcC5vcGVuRWxlbWVudHMuZ2VuZXJhdGVJbXBsaWVkRW5kVGFncygpO1xuICAgICAgICBwLm9wZW5FbGVtZW50cy5wb3BVbnRpbE51bWJlcmVkSGVhZGVyUG9wcGVkKCk7XG4gICAgfVxufVxuZnVuY3Rpb24gYXBwbGV0RW5kVGFnSW5Cb2R5KHAsIHRva2VuKSB7XG4gICAgY29uc3QgdG4gPSB0b2tlbi50YWdJRDtcbiAgICBpZiAocC5vcGVuRWxlbWVudHMuaGFzSW5TY29wZSh0bikpIHtcbiAgICAgICAgcC5vcGVuRWxlbWVudHMuZ2VuZXJhdGVJbXBsaWVkRW5kVGFncygpO1xuICAgICAgICBwLm9wZW5FbGVtZW50cy5wb3BVbnRpbFRhZ05hbWVQb3BwZWQodG4pO1xuICAgICAgICBwLmFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cy5jbGVhclRvTGFzdE1hcmtlcigpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGJyRW5kVGFnSW5Cb2R5KHApIHtcbiAgICBwLl9yZWNvbnN0cnVjdEFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cygpO1xuICAgIHAuX2luc2VydEZha2VFbGVtZW50KFROLkJSLCAkLkJSKTtcbiAgICBwLm9wZW5FbGVtZW50cy5wb3AoKTtcbiAgICBwLmZyYW1lc2V0T2sgPSBmYWxzZTtcbn1cbmZ1bmN0aW9uIGdlbmVyaWNFbmRUYWdJbkJvZHkocCwgdG9rZW4pIHtcbiAgICBjb25zdCB0biA9IHRva2VuLnRhZ05hbWU7XG4gICAgY29uc3QgdGlkID0gdG9rZW4udGFnSUQ7XG4gICAgZm9yIChsZXQgaSA9IHAub3BlbkVsZW1lbnRzLnN0YWNrVG9wOyBpID4gMDsgaS0tKSB7XG4gICAgICAgIGNvbnN0IGVsZW1lbnQgPSBwLm9wZW5FbGVtZW50cy5pdGVtc1tpXTtcbiAgICAgICAgY29uc3QgZWxlbWVudElkID0gcC5vcGVuRWxlbWVudHMudGFnSURzW2ldO1xuICAgICAgICAvLyBDb21wYXJlIHRoZSB0YWcgbmFtZSBoZXJlLCBhcyB0aGUgdGFnIG1pZ2h0IG5vdCBiZSBhIGtub3duIHRhZyB3aXRoIGFuIElELlxuICAgICAgICBpZiAodGlkID09PSBlbGVtZW50SWQgJiYgKHRpZCAhPT0gJC5VTktOT1dOIHx8IHAudHJlZUFkYXB0ZXIuZ2V0VGFnTmFtZShlbGVtZW50KSA9PT0gdG4pKSB7XG4gICAgICAgICAgICBwLm9wZW5FbGVtZW50cy5nZW5lcmF0ZUltcGxpZWRFbmRUYWdzV2l0aEV4Y2x1c2lvbih0aWQpO1xuICAgICAgICAgICAgaWYgKHAub3BlbkVsZW1lbnRzLnN0YWNrVG9wID49IGkpXG4gICAgICAgICAgICAgICAgcC5vcGVuRWxlbWVudHMuc2hvcnRlblRvTGVuZ3RoKGkpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHAuX2lzU3BlY2lhbEVsZW1lbnQoZWxlbWVudCwgZWxlbWVudElkKSkge1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG59XG5mdW5jdGlvbiBlbmRUYWdJbkJvZHkocCwgdG9rZW4pIHtcbiAgICBzd2l0Y2ggKHRva2VuLnRhZ0lEKSB7XG4gICAgICAgIGNhc2UgJC5BOlxuICAgICAgICBjYXNlICQuQjpcbiAgICAgICAgY2FzZSAkLkk6XG4gICAgICAgIGNhc2UgJC5TOlxuICAgICAgICBjYXNlICQuVTpcbiAgICAgICAgY2FzZSAkLkVNOlxuICAgICAgICBjYXNlICQuVFQ6XG4gICAgICAgIGNhc2UgJC5CSUc6XG4gICAgICAgIGNhc2UgJC5DT0RFOlxuICAgICAgICBjYXNlICQuRk9OVDpcbiAgICAgICAgY2FzZSAkLk5PQlI6XG4gICAgICAgIGNhc2UgJC5TTUFMTDpcbiAgICAgICAgY2FzZSAkLlNUUklLRTpcbiAgICAgICAgY2FzZSAkLlNUUk9ORzoge1xuICAgICAgICAgICAgY2FsbEFkb3B0aW9uQWdlbmN5KHAsIHRva2VuKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgJC5QOiB7XG4gICAgICAgICAgICBwRW5kVGFnSW5Cb2R5KHApO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSAkLkRMOlxuICAgICAgICBjYXNlICQuVUw6XG4gICAgICAgIGNhc2UgJC5PTDpcbiAgICAgICAgY2FzZSAkLkRJUjpcbiAgICAgICAgY2FzZSAkLkRJVjpcbiAgICAgICAgY2FzZSAkLk5BVjpcbiAgICAgICAgY2FzZSAkLlBSRTpcbiAgICAgICAgY2FzZSAkLk1BSU46XG4gICAgICAgIGNhc2UgJC5NRU5VOlxuICAgICAgICBjYXNlICQuQVNJREU6XG4gICAgICAgIGNhc2UgJC5CVVRUT046XG4gICAgICAgIGNhc2UgJC5DRU5URVI6XG4gICAgICAgIGNhc2UgJC5GSUdVUkU6XG4gICAgICAgIGNhc2UgJC5GT09URVI6XG4gICAgICAgIGNhc2UgJC5IRUFERVI6XG4gICAgICAgIGNhc2UgJC5IR1JPVVA6XG4gICAgICAgIGNhc2UgJC5ESUFMT0c6XG4gICAgICAgIGNhc2UgJC5BRERSRVNTOlxuICAgICAgICBjYXNlICQuQVJUSUNMRTpcbiAgICAgICAgY2FzZSAkLkRFVEFJTFM6XG4gICAgICAgIGNhc2UgJC5TRUFSQ0g6XG4gICAgICAgIGNhc2UgJC5TRUNUSU9OOlxuICAgICAgICBjYXNlICQuU1VNTUFSWTpcbiAgICAgICAgY2FzZSAkLkxJU1RJTkc6XG4gICAgICAgIGNhc2UgJC5GSUVMRFNFVDpcbiAgICAgICAgY2FzZSAkLkJMT0NLUVVPVEU6XG4gICAgICAgIGNhc2UgJC5GSUdDQVBUSU9OOiB7XG4gICAgICAgICAgICBhZGRyZXNzRW5kVGFnSW5Cb2R5KHAsIHRva2VuKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgJC5MSToge1xuICAgICAgICAgICAgbGlFbmRUYWdJbkJvZHkocCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjYXNlICQuREQ6XG4gICAgICAgIGNhc2UgJC5EVDoge1xuICAgICAgICAgICAgZGRFbmRUYWdJbkJvZHkocCwgdG9rZW4pO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSAkLkgxOlxuICAgICAgICBjYXNlICQuSDI6XG4gICAgICAgIGNhc2UgJC5IMzpcbiAgICAgICAgY2FzZSAkLkg0OlxuICAgICAgICBjYXNlICQuSDU6XG4gICAgICAgIGNhc2UgJC5INjoge1xuICAgICAgICAgICAgbnVtYmVyZWRIZWFkZXJFbmRUYWdJbkJvZHkocCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjYXNlICQuQlI6IHtcbiAgICAgICAgICAgIGJyRW5kVGFnSW5Cb2R5KHApO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSAkLkJPRFk6IHtcbiAgICAgICAgICAgIGJvZHlFbmRUYWdJbkJvZHkocCwgdG9rZW4pO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSAkLkhUTUw6IHtcbiAgICAgICAgICAgIGh0bWxFbmRUYWdJbkJvZHkocCwgdG9rZW4pO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSAkLkZPUk06IHtcbiAgICAgICAgICAgIGZvcm1FbmRUYWdJbkJvZHkocCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjYXNlICQuQVBQTEVUOlxuICAgICAgICBjYXNlICQuT0JKRUNUOlxuICAgICAgICBjYXNlICQuTUFSUVVFRToge1xuICAgICAgICAgICAgYXBwbGV0RW5kVGFnSW5Cb2R5KHAsIHRva2VuKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgJC5URU1QTEFURToge1xuICAgICAgICAgICAgdGVtcGxhdGVFbmRUYWdJbkhlYWQocCwgdG9rZW4pO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgZ2VuZXJpY0VuZFRhZ0luQm9keShwLCB0b2tlbik7XG4gICAgICAgIH1cbiAgICB9XG59XG5mdW5jdGlvbiBlb2ZJbkJvZHkocCwgdG9rZW4pIHtcbiAgICBpZiAocC50bXBsSW5zZXJ0aW9uTW9kZVN0YWNrLmxlbmd0aCA+IDApIHtcbiAgICAgICAgZW9mSW5UZW1wbGF0ZShwLCB0b2tlbik7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBzdG9wUGFyc2luZyhwLCB0b2tlbik7XG4gICAgfVxufVxuLy8gVGhlIFwidGV4dFwiIGluc2VydGlvbiBtb2RlXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuZnVuY3Rpb24gZW5kVGFnSW5UZXh0KHAsIHRva2VuKSB7XG4gICAgdmFyIF9hO1xuICAgIGlmICh0b2tlbi50YWdJRCA9PT0gJC5TQ1JJUFQpIHtcbiAgICAgICAgKF9hID0gcC5zY3JpcHRIYW5kbGVyKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuY2FsbChwLCBwLm9wZW5FbGVtZW50cy5jdXJyZW50KTtcbiAgICB9XG4gICAgcC5vcGVuRWxlbWVudHMucG9wKCk7XG4gICAgcC5pbnNlcnRpb25Nb2RlID0gcC5vcmlnaW5hbEluc2VydGlvbk1vZGU7XG59XG5mdW5jdGlvbiBlb2ZJblRleHQocCwgdG9rZW4pIHtcbiAgICBwLl9lcnIodG9rZW4sIEVSUi5lb2ZJbkVsZW1lbnRUaGF0Q2FuQ29udGFpbk9ubHlUZXh0KTtcbiAgICBwLm9wZW5FbGVtZW50cy5wb3AoKTtcbiAgICBwLmluc2VydGlvbk1vZGUgPSBwLm9yaWdpbmFsSW5zZXJ0aW9uTW9kZTtcbiAgICBwLm9uRW9mKHRva2VuKTtcbn1cbi8vIFRoZSBcImluIHRhYmxlXCIgaW5zZXJ0aW9uIG1vZGVcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5mdW5jdGlvbiBjaGFyYWN0ZXJJblRhYmxlKHAsIHRva2VuKSB7XG4gICAgaWYgKFRBQkxFX1NUUlVDVFVSRV9UQUdTLmhhcyhwLm9wZW5FbGVtZW50cy5jdXJyZW50VGFnSWQpKSB7XG4gICAgICAgIHAucGVuZGluZ0NoYXJhY3RlclRva2Vucy5sZW5ndGggPSAwO1xuICAgICAgICBwLmhhc05vbldoaXRlc3BhY2VQZW5kaW5nQ2hhcmFjdGVyVG9rZW4gPSBmYWxzZTtcbiAgICAgICAgcC5vcmlnaW5hbEluc2VydGlvbk1vZGUgPSBwLmluc2VydGlvbk1vZGU7XG4gICAgICAgIHAuaW5zZXJ0aW9uTW9kZSA9IEluc2VydGlvbk1vZGUuSU5fVEFCTEVfVEVYVDtcbiAgICAgICAgc3dpdGNoICh0b2tlbi50eXBlKSB7XG4gICAgICAgICAgICBjYXNlIFRva2VuVHlwZS5DSEFSQUNURVI6IHtcbiAgICAgICAgICAgICAgICBjaGFyYWN0ZXJJblRhYmxlVGV4dChwLCB0b2tlbik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFRva2VuVHlwZS5XSElURVNQQUNFX0NIQVJBQ1RFUjoge1xuICAgICAgICAgICAgICAgIHdoaXRlc3BhY2VDaGFyYWN0ZXJJblRhYmxlVGV4dChwLCB0b2tlbik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBJZ25vcmUgbnVsbFxuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICB0b2tlbkluVGFibGUocCwgdG9rZW4pO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGNhcHRpb25TdGFydFRhZ0luVGFibGUocCwgdG9rZW4pIHtcbiAgICBwLm9wZW5FbGVtZW50cy5jbGVhckJhY2tUb1RhYmxlQ29udGV4dCgpO1xuICAgIHAuYWN0aXZlRm9ybWF0dGluZ0VsZW1lbnRzLmluc2VydE1hcmtlcigpO1xuICAgIHAuX2luc2VydEVsZW1lbnQodG9rZW4sIE5TLkhUTUwpO1xuICAgIHAuaW5zZXJ0aW9uTW9kZSA9IEluc2VydGlvbk1vZGUuSU5fQ0FQVElPTjtcbn1cbmZ1bmN0aW9uIGNvbGdyb3VwU3RhcnRUYWdJblRhYmxlKHAsIHRva2VuKSB7XG4gICAgcC5vcGVuRWxlbWVudHMuY2xlYXJCYWNrVG9UYWJsZUNvbnRleHQoKTtcbiAgICBwLl9pbnNlcnRFbGVtZW50KHRva2VuLCBOUy5IVE1MKTtcbiAgICBwLmluc2VydGlvbk1vZGUgPSBJbnNlcnRpb25Nb2RlLklOX0NPTFVNTl9HUk9VUDtcbn1cbmZ1bmN0aW9uIGNvbFN0YXJ0VGFnSW5UYWJsZShwLCB0b2tlbikge1xuICAgIHAub3BlbkVsZW1lbnRzLmNsZWFyQmFja1RvVGFibGVDb250ZXh0KCk7XG4gICAgcC5faW5zZXJ0RmFrZUVsZW1lbnQoVE4uQ09MR1JPVVAsICQuQ09MR1JPVVApO1xuICAgIHAuaW5zZXJ0aW9uTW9kZSA9IEluc2VydGlvbk1vZGUuSU5fQ09MVU1OX0dST1VQO1xuICAgIHN0YXJ0VGFnSW5Db2x1bW5Hcm91cChwLCB0b2tlbik7XG59XG5mdW5jdGlvbiB0Ym9keVN0YXJ0VGFnSW5UYWJsZShwLCB0b2tlbikge1xuICAgIHAub3BlbkVsZW1lbnRzLmNsZWFyQmFja1RvVGFibGVDb250ZXh0KCk7XG4gICAgcC5faW5zZXJ0RWxlbWVudCh0b2tlbiwgTlMuSFRNTCk7XG4gICAgcC5pbnNlcnRpb25Nb2RlID0gSW5zZXJ0aW9uTW9kZS5JTl9UQUJMRV9CT0RZO1xufVxuZnVuY3Rpb24gdGRTdGFydFRhZ0luVGFibGUocCwgdG9rZW4pIHtcbiAgICBwLm9wZW5FbGVtZW50cy5jbGVhckJhY2tUb1RhYmxlQ29udGV4dCgpO1xuICAgIHAuX2luc2VydEZha2VFbGVtZW50KFROLlRCT0RZLCAkLlRCT0RZKTtcbiAgICBwLmluc2VydGlvbk1vZGUgPSBJbnNlcnRpb25Nb2RlLklOX1RBQkxFX0JPRFk7XG4gICAgc3RhcnRUYWdJblRhYmxlQm9keShwLCB0b2tlbik7XG59XG5mdW5jdGlvbiB0YWJsZVN0YXJ0VGFnSW5UYWJsZShwLCB0b2tlbikge1xuICAgIGlmIChwLm9wZW5FbGVtZW50cy5oYXNJblRhYmxlU2NvcGUoJC5UQUJMRSkpIHtcbiAgICAgICAgcC5vcGVuRWxlbWVudHMucG9wVW50aWxUYWdOYW1lUG9wcGVkKCQuVEFCTEUpO1xuICAgICAgICBwLl9yZXNldEluc2VydGlvbk1vZGUoKTtcbiAgICAgICAgcC5fcHJvY2Vzc1N0YXJ0VGFnKHRva2VuKTtcbiAgICB9XG59XG5mdW5jdGlvbiBpbnB1dFN0YXJ0VGFnSW5UYWJsZShwLCB0b2tlbikge1xuICAgIGlmIChpc0hpZGRlbklucHV0KHRva2VuKSkge1xuICAgICAgICBwLl9hcHBlbmRFbGVtZW50KHRva2VuLCBOUy5IVE1MKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHRva2VuSW5UYWJsZShwLCB0b2tlbik7XG4gICAgfVxuICAgIHRva2VuLmFja1NlbGZDbG9zaW5nID0gdHJ1ZTtcbn1cbmZ1bmN0aW9uIGZvcm1TdGFydFRhZ0luVGFibGUocCwgdG9rZW4pIHtcbiAgICBpZiAoIXAuZm9ybUVsZW1lbnQgJiYgcC5vcGVuRWxlbWVudHMudG1wbENvdW50ID09PSAwKSB7XG4gICAgICAgIHAuX2luc2VydEVsZW1lbnQodG9rZW4sIE5TLkhUTUwpO1xuICAgICAgICBwLmZvcm1FbGVtZW50ID0gcC5vcGVuRWxlbWVudHMuY3VycmVudDtcbiAgICAgICAgcC5vcGVuRWxlbWVudHMucG9wKCk7XG4gICAgfVxufVxuZnVuY3Rpb24gc3RhcnRUYWdJblRhYmxlKHAsIHRva2VuKSB7XG4gICAgc3dpdGNoICh0b2tlbi50YWdJRCkge1xuICAgICAgICBjYXNlICQuVEQ6XG4gICAgICAgIGNhc2UgJC5USDpcbiAgICAgICAgY2FzZSAkLlRSOiB7XG4gICAgICAgICAgICB0ZFN0YXJ0VGFnSW5UYWJsZShwLCB0b2tlbik7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjYXNlICQuU1RZTEU6XG4gICAgICAgIGNhc2UgJC5TQ1JJUFQ6XG4gICAgICAgIGNhc2UgJC5URU1QTEFURToge1xuICAgICAgICAgICAgc3RhcnRUYWdJbkhlYWQocCwgdG9rZW4pO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSAkLkNPTDoge1xuICAgICAgICAgICAgY29sU3RhcnRUYWdJblRhYmxlKHAsIHRva2VuKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgJC5GT1JNOiB7XG4gICAgICAgICAgICBmb3JtU3RhcnRUYWdJblRhYmxlKHAsIHRva2VuKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgJC5UQUJMRToge1xuICAgICAgICAgICAgdGFibGVTdGFydFRhZ0luVGFibGUocCwgdG9rZW4pO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSAkLlRCT0RZOlxuICAgICAgICBjYXNlICQuVEZPT1Q6XG4gICAgICAgIGNhc2UgJC5USEVBRDoge1xuICAgICAgICAgICAgdGJvZHlTdGFydFRhZ0luVGFibGUocCwgdG9rZW4pO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSAkLklOUFVUOiB7XG4gICAgICAgICAgICBpbnB1dFN0YXJ0VGFnSW5UYWJsZShwLCB0b2tlbik7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjYXNlICQuQ0FQVElPTjoge1xuICAgICAgICAgICAgY2FwdGlvblN0YXJ0VGFnSW5UYWJsZShwLCB0b2tlbik7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjYXNlICQuQ09MR1JPVVA6IHtcbiAgICAgICAgICAgIGNvbGdyb3VwU3RhcnRUYWdJblRhYmxlKHAsIHRva2VuKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgIHRva2VuSW5UYWJsZShwLCB0b2tlbik7XG4gICAgICAgIH1cbiAgICB9XG59XG5mdW5jdGlvbiBlbmRUYWdJblRhYmxlKHAsIHRva2VuKSB7XG4gICAgc3dpdGNoICh0b2tlbi50YWdJRCkge1xuICAgICAgICBjYXNlICQuVEFCTEU6IHtcbiAgICAgICAgICAgIGlmIChwLm9wZW5FbGVtZW50cy5oYXNJblRhYmxlU2NvcGUoJC5UQUJMRSkpIHtcbiAgICAgICAgICAgICAgICBwLm9wZW5FbGVtZW50cy5wb3BVbnRpbFRhZ05hbWVQb3BwZWQoJC5UQUJMRSk7XG4gICAgICAgICAgICAgICAgcC5fcmVzZXRJbnNlcnRpb25Nb2RlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjYXNlICQuVEVNUExBVEU6IHtcbiAgICAgICAgICAgIHRlbXBsYXRlRW5kVGFnSW5IZWFkKHAsIHRva2VuKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgJC5CT0RZOlxuICAgICAgICBjYXNlICQuQ0FQVElPTjpcbiAgICAgICAgY2FzZSAkLkNPTDpcbiAgICAgICAgY2FzZSAkLkNPTEdST1VQOlxuICAgICAgICBjYXNlICQuSFRNTDpcbiAgICAgICAgY2FzZSAkLlRCT0RZOlxuICAgICAgICBjYXNlICQuVEQ6XG4gICAgICAgIGNhc2UgJC5URk9PVDpcbiAgICAgICAgY2FzZSAkLlRIOlxuICAgICAgICBjYXNlICQuVEhFQUQ6XG4gICAgICAgIGNhc2UgJC5UUjoge1xuICAgICAgICAgICAgLy8gSWdub3JlIHRva2VuXG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICB0b2tlbkluVGFibGUocCwgdG9rZW4pO1xuICAgICAgICB9XG4gICAgfVxufVxuZnVuY3Rpb24gdG9rZW5JblRhYmxlKHAsIHRva2VuKSB7XG4gICAgY29uc3Qgc2F2ZWRGb3N0ZXJQYXJlbnRpbmdTdGF0ZSA9IHAuZm9zdGVyUGFyZW50aW5nRW5hYmxlZDtcbiAgICBwLmZvc3RlclBhcmVudGluZ0VuYWJsZWQgPSB0cnVlO1xuICAgIC8vIFByb2Nlc3MgdG9rZW4gaW4gYEluIEJvZHlgIG1vZGVcbiAgICBtb2RlSW5Cb2R5KHAsIHRva2VuKTtcbiAgICBwLmZvc3RlclBhcmVudGluZ0VuYWJsZWQgPSBzYXZlZEZvc3RlclBhcmVudGluZ1N0YXRlO1xufVxuLy8gVGhlIFwiaW4gdGFibGUgdGV4dFwiIGluc2VydGlvbiBtb2RlXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuZnVuY3Rpb24gd2hpdGVzcGFjZUNoYXJhY3RlckluVGFibGVUZXh0KHAsIHRva2VuKSB7XG4gICAgcC5wZW5kaW5nQ2hhcmFjdGVyVG9rZW5zLnB1c2godG9rZW4pO1xufVxuZnVuY3Rpb24gY2hhcmFjdGVySW5UYWJsZVRleHQocCwgdG9rZW4pIHtcbiAgICBwLnBlbmRpbmdDaGFyYWN0ZXJUb2tlbnMucHVzaCh0b2tlbik7XG4gICAgcC5oYXNOb25XaGl0ZXNwYWNlUGVuZGluZ0NoYXJhY3RlclRva2VuID0gdHJ1ZTtcbn1cbmZ1bmN0aW9uIHRva2VuSW5UYWJsZVRleHQocCwgdG9rZW4pIHtcbiAgICBsZXQgaSA9IDA7XG4gICAgaWYgKHAuaGFzTm9uV2hpdGVzcGFjZVBlbmRpbmdDaGFyYWN0ZXJUb2tlbikge1xuICAgICAgICBmb3IgKDsgaSA8IHAucGVuZGluZ0NoYXJhY3RlclRva2Vucy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgdG9rZW5JblRhYmxlKHAsIHAucGVuZGluZ0NoYXJhY3RlclRva2Vuc1tpXSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGZvciAoOyBpIDwgcC5wZW5kaW5nQ2hhcmFjdGVyVG9rZW5zLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBwLl9pbnNlcnRDaGFyYWN0ZXJzKHAucGVuZGluZ0NoYXJhY3RlclRva2Vuc1tpXSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcC5pbnNlcnRpb25Nb2RlID0gcC5vcmlnaW5hbEluc2VydGlvbk1vZGU7XG4gICAgcC5fcHJvY2Vzc1Rva2VuKHRva2VuKTtcbn1cbi8vIFRoZSBcImluIGNhcHRpb25cIiBpbnNlcnRpb24gbW9kZVxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbmNvbnN0IFRBQkxFX1ZPSURfRUxFTUVOVFMgPSBuZXcgU2V0KFskLkNBUFRJT04sICQuQ09MLCAkLkNPTEdST1VQLCAkLlRCT0RZLCAkLlRELCAkLlRGT09ULCAkLlRILCAkLlRIRUFELCAkLlRSXSk7XG5mdW5jdGlvbiBzdGFydFRhZ0luQ2FwdGlvbihwLCB0b2tlbikge1xuICAgIGNvbnN0IHRuID0gdG9rZW4udGFnSUQ7XG4gICAgaWYgKFRBQkxFX1ZPSURfRUxFTUVOVFMuaGFzKHRuKSkge1xuICAgICAgICBpZiAocC5vcGVuRWxlbWVudHMuaGFzSW5UYWJsZVNjb3BlKCQuQ0FQVElPTikpIHtcbiAgICAgICAgICAgIHAub3BlbkVsZW1lbnRzLmdlbmVyYXRlSW1wbGllZEVuZFRhZ3MoKTtcbiAgICAgICAgICAgIHAub3BlbkVsZW1lbnRzLnBvcFVudGlsVGFnTmFtZVBvcHBlZCgkLkNBUFRJT04pO1xuICAgICAgICAgICAgcC5hY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMuY2xlYXJUb0xhc3RNYXJrZXIoKTtcbiAgICAgICAgICAgIHAuaW5zZXJ0aW9uTW9kZSA9IEluc2VydGlvbk1vZGUuSU5fVEFCTEU7XG4gICAgICAgICAgICBzdGFydFRhZ0luVGFibGUocCwgdG9rZW4pO1xuICAgICAgICB9XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBzdGFydFRhZ0luQm9keShwLCB0b2tlbik7XG4gICAgfVxufVxuZnVuY3Rpb24gZW5kVGFnSW5DYXB0aW9uKHAsIHRva2VuKSB7XG4gICAgY29uc3QgdG4gPSB0b2tlbi50YWdJRDtcbiAgICBzd2l0Y2ggKHRuKSB7XG4gICAgICAgIGNhc2UgJC5DQVBUSU9OOlxuICAgICAgICBjYXNlICQuVEFCTEU6IHtcbiAgICAgICAgICAgIGlmIChwLm9wZW5FbGVtZW50cy5oYXNJblRhYmxlU2NvcGUoJC5DQVBUSU9OKSkge1xuICAgICAgICAgICAgICAgIHAub3BlbkVsZW1lbnRzLmdlbmVyYXRlSW1wbGllZEVuZFRhZ3MoKTtcbiAgICAgICAgICAgICAgICBwLm9wZW5FbGVtZW50cy5wb3BVbnRpbFRhZ05hbWVQb3BwZWQoJC5DQVBUSU9OKTtcbiAgICAgICAgICAgICAgICBwLmFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cy5jbGVhclRvTGFzdE1hcmtlcigpO1xuICAgICAgICAgICAgICAgIHAuaW5zZXJ0aW9uTW9kZSA9IEluc2VydGlvbk1vZGUuSU5fVEFCTEU7XG4gICAgICAgICAgICAgICAgaWYgKHRuID09PSAkLlRBQkxFKSB7XG4gICAgICAgICAgICAgICAgICAgIGVuZFRhZ0luVGFibGUocCwgdG9rZW4pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgJC5CT0RZOlxuICAgICAgICBjYXNlICQuQ09MOlxuICAgICAgICBjYXNlICQuQ09MR1JPVVA6XG4gICAgICAgIGNhc2UgJC5IVE1MOlxuICAgICAgICBjYXNlICQuVEJPRFk6XG4gICAgICAgIGNhc2UgJC5URDpcbiAgICAgICAgY2FzZSAkLlRGT09UOlxuICAgICAgICBjYXNlICQuVEg6XG4gICAgICAgIGNhc2UgJC5USEVBRDpcbiAgICAgICAgY2FzZSAkLlRSOiB7XG4gICAgICAgICAgICAvLyBJZ25vcmUgdG9rZW5cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgIGVuZFRhZ0luQm9keShwLCB0b2tlbik7XG4gICAgICAgIH1cbiAgICB9XG59XG4vLyBUaGUgXCJpbiBjb2x1bW4gZ3JvdXBcIiBpbnNlcnRpb24gbW9kZVxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbmZ1bmN0aW9uIHN0YXJ0VGFnSW5Db2x1bW5Hcm91cChwLCB0b2tlbikge1xuICAgIHN3aXRjaCAodG9rZW4udGFnSUQpIHtcbiAgICAgICAgY2FzZSAkLkhUTUw6IHtcbiAgICAgICAgICAgIHN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgJC5DT0w6IHtcbiAgICAgICAgICAgIHAuX2FwcGVuZEVsZW1lbnQodG9rZW4sIE5TLkhUTUwpO1xuICAgICAgICAgICAgdG9rZW4uYWNrU2VsZkNsb3NpbmcgPSB0cnVlO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSAkLlRFTVBMQVRFOiB7XG4gICAgICAgICAgICBzdGFydFRhZ0luSGVhZChwLCB0b2tlbik7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICB0b2tlbkluQ29sdW1uR3JvdXAocCwgdG9rZW4pO1xuICAgICAgICB9XG4gICAgfVxufVxuZnVuY3Rpb24gZW5kVGFnSW5Db2x1bW5Hcm91cChwLCB0b2tlbikge1xuICAgIHN3aXRjaCAodG9rZW4udGFnSUQpIHtcbiAgICAgICAgY2FzZSAkLkNPTEdST1VQOiB7XG4gICAgICAgICAgICBpZiAocC5vcGVuRWxlbWVudHMuY3VycmVudFRhZ0lkID09PSAkLkNPTEdST1VQKSB7XG4gICAgICAgICAgICAgICAgcC5vcGVuRWxlbWVudHMucG9wKCk7XG4gICAgICAgICAgICAgICAgcC5pbnNlcnRpb25Nb2RlID0gSW5zZXJ0aW9uTW9kZS5JTl9UQUJMRTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgJC5URU1QTEFURToge1xuICAgICAgICAgICAgdGVtcGxhdGVFbmRUYWdJbkhlYWQocCwgdG9rZW4pO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSAkLkNPTDoge1xuICAgICAgICAgICAgLy8gSWdub3JlIHRva2VuXG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICB0b2tlbkluQ29sdW1uR3JvdXAocCwgdG9rZW4pO1xuICAgICAgICB9XG4gICAgfVxufVxuZnVuY3Rpb24gdG9rZW5JbkNvbHVtbkdyb3VwKHAsIHRva2VuKSB7XG4gICAgaWYgKHAub3BlbkVsZW1lbnRzLmN1cnJlbnRUYWdJZCA9PT0gJC5DT0xHUk9VUCkge1xuICAgICAgICBwLm9wZW5FbGVtZW50cy5wb3AoKTtcbiAgICAgICAgcC5pbnNlcnRpb25Nb2RlID0gSW5zZXJ0aW9uTW9kZS5JTl9UQUJMRTtcbiAgICAgICAgcC5fcHJvY2Vzc1Rva2VuKHRva2VuKTtcbiAgICB9XG59XG4vLyBUaGUgXCJpbiB0YWJsZSBib2R5XCIgaW5zZXJ0aW9uIG1vZGVcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5mdW5jdGlvbiBzdGFydFRhZ0luVGFibGVCb2R5KHAsIHRva2VuKSB7XG4gICAgc3dpdGNoICh0b2tlbi50YWdJRCkge1xuICAgICAgICBjYXNlICQuVFI6IHtcbiAgICAgICAgICAgIHAub3BlbkVsZW1lbnRzLmNsZWFyQmFja1RvVGFibGVCb2R5Q29udGV4dCgpO1xuICAgICAgICAgICAgcC5faW5zZXJ0RWxlbWVudCh0b2tlbiwgTlMuSFRNTCk7XG4gICAgICAgICAgICBwLmluc2VydGlvbk1vZGUgPSBJbnNlcnRpb25Nb2RlLklOX1JPVztcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgJC5USDpcbiAgICAgICAgY2FzZSAkLlREOiB7XG4gICAgICAgICAgICBwLm9wZW5FbGVtZW50cy5jbGVhckJhY2tUb1RhYmxlQm9keUNvbnRleHQoKTtcbiAgICAgICAgICAgIHAuX2luc2VydEZha2VFbGVtZW50KFROLlRSLCAkLlRSKTtcbiAgICAgICAgICAgIHAuaW5zZXJ0aW9uTW9kZSA9IEluc2VydGlvbk1vZGUuSU5fUk9XO1xuICAgICAgICAgICAgc3RhcnRUYWdJblJvdyhwLCB0b2tlbik7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjYXNlICQuQ0FQVElPTjpcbiAgICAgICAgY2FzZSAkLkNPTDpcbiAgICAgICAgY2FzZSAkLkNPTEdST1VQOlxuICAgICAgICBjYXNlICQuVEJPRFk6XG4gICAgICAgIGNhc2UgJC5URk9PVDpcbiAgICAgICAgY2FzZSAkLlRIRUFEOiB7XG4gICAgICAgICAgICBpZiAocC5vcGVuRWxlbWVudHMuaGFzVGFibGVCb2R5Q29udGV4dEluVGFibGVTY29wZSgpKSB7XG4gICAgICAgICAgICAgICAgcC5vcGVuRWxlbWVudHMuY2xlYXJCYWNrVG9UYWJsZUJvZHlDb250ZXh0KCk7XG4gICAgICAgICAgICAgICAgcC5vcGVuRWxlbWVudHMucG9wKCk7XG4gICAgICAgICAgICAgICAgcC5pbnNlcnRpb25Nb2RlID0gSW5zZXJ0aW9uTW9kZS5JTl9UQUJMRTtcbiAgICAgICAgICAgICAgICBzdGFydFRhZ0luVGFibGUocCwgdG9rZW4pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgc3RhcnRUYWdJblRhYmxlKHAsIHRva2VuKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbmZ1bmN0aW9uIGVuZFRhZ0luVGFibGVCb2R5KHAsIHRva2VuKSB7XG4gICAgY29uc3QgdG4gPSB0b2tlbi50YWdJRDtcbiAgICBzd2l0Y2ggKHRva2VuLnRhZ0lEKSB7XG4gICAgICAgIGNhc2UgJC5UQk9EWTpcbiAgICAgICAgY2FzZSAkLlRGT09UOlxuICAgICAgICBjYXNlICQuVEhFQUQ6IHtcbiAgICAgICAgICAgIGlmIChwLm9wZW5FbGVtZW50cy5oYXNJblRhYmxlU2NvcGUodG4pKSB7XG4gICAgICAgICAgICAgICAgcC5vcGVuRWxlbWVudHMuY2xlYXJCYWNrVG9UYWJsZUJvZHlDb250ZXh0KCk7XG4gICAgICAgICAgICAgICAgcC5vcGVuRWxlbWVudHMucG9wKCk7XG4gICAgICAgICAgICAgICAgcC5pbnNlcnRpb25Nb2RlID0gSW5zZXJ0aW9uTW9kZS5JTl9UQUJMRTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgJC5UQUJMRToge1xuICAgICAgICAgICAgaWYgKHAub3BlbkVsZW1lbnRzLmhhc1RhYmxlQm9keUNvbnRleHRJblRhYmxlU2NvcGUoKSkge1xuICAgICAgICAgICAgICAgIHAub3BlbkVsZW1lbnRzLmNsZWFyQmFja1RvVGFibGVCb2R5Q29udGV4dCgpO1xuICAgICAgICAgICAgICAgIHAub3BlbkVsZW1lbnRzLnBvcCgpO1xuICAgICAgICAgICAgICAgIHAuaW5zZXJ0aW9uTW9kZSA9IEluc2VydGlvbk1vZGUuSU5fVEFCTEU7XG4gICAgICAgICAgICAgICAgZW5kVGFnSW5UYWJsZShwLCB0b2tlbik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjYXNlICQuQk9EWTpcbiAgICAgICAgY2FzZSAkLkNBUFRJT046XG4gICAgICAgIGNhc2UgJC5DT0w6XG4gICAgICAgIGNhc2UgJC5DT0xHUk9VUDpcbiAgICAgICAgY2FzZSAkLkhUTUw6XG4gICAgICAgIGNhc2UgJC5URDpcbiAgICAgICAgY2FzZSAkLlRIOlxuICAgICAgICBjYXNlICQuVFI6IHtcbiAgICAgICAgICAgIC8vIElnbm9yZSB0b2tlblxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgZW5kVGFnSW5UYWJsZShwLCB0b2tlbik7XG4gICAgICAgIH1cbiAgICB9XG59XG4vLyBUaGUgXCJpbiByb3dcIiBpbnNlcnRpb24gbW9kZVxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbmZ1bmN0aW9uIHN0YXJ0VGFnSW5Sb3cocCwgdG9rZW4pIHtcbiAgICBzd2l0Y2ggKHRva2VuLnRhZ0lEKSB7XG4gICAgICAgIGNhc2UgJC5USDpcbiAgICAgICAgY2FzZSAkLlREOiB7XG4gICAgICAgICAgICBwLm9wZW5FbGVtZW50cy5jbGVhckJhY2tUb1RhYmxlUm93Q29udGV4dCgpO1xuICAgICAgICAgICAgcC5faW5zZXJ0RWxlbWVudCh0b2tlbiwgTlMuSFRNTCk7XG4gICAgICAgICAgICBwLmluc2VydGlvbk1vZGUgPSBJbnNlcnRpb25Nb2RlLklOX0NFTEw7XG4gICAgICAgICAgICBwLmFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cy5pbnNlcnRNYXJrZXIoKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgJC5DQVBUSU9OOlxuICAgICAgICBjYXNlICQuQ09MOlxuICAgICAgICBjYXNlICQuQ09MR1JPVVA6XG4gICAgICAgIGNhc2UgJC5UQk9EWTpcbiAgICAgICAgY2FzZSAkLlRGT09UOlxuICAgICAgICBjYXNlICQuVEhFQUQ6XG4gICAgICAgIGNhc2UgJC5UUjoge1xuICAgICAgICAgICAgaWYgKHAub3BlbkVsZW1lbnRzLmhhc0luVGFibGVTY29wZSgkLlRSKSkge1xuICAgICAgICAgICAgICAgIHAub3BlbkVsZW1lbnRzLmNsZWFyQmFja1RvVGFibGVSb3dDb250ZXh0KCk7XG4gICAgICAgICAgICAgICAgcC5vcGVuRWxlbWVudHMucG9wKCk7XG4gICAgICAgICAgICAgICAgcC5pbnNlcnRpb25Nb2RlID0gSW5zZXJ0aW9uTW9kZS5JTl9UQUJMRV9CT0RZO1xuICAgICAgICAgICAgICAgIHN0YXJ0VGFnSW5UYWJsZUJvZHkocCwgdG9rZW4pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgc3RhcnRUYWdJblRhYmxlKHAsIHRva2VuKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbmZ1bmN0aW9uIGVuZFRhZ0luUm93KHAsIHRva2VuKSB7XG4gICAgc3dpdGNoICh0b2tlbi50YWdJRCkge1xuICAgICAgICBjYXNlICQuVFI6IHtcbiAgICAgICAgICAgIGlmIChwLm9wZW5FbGVtZW50cy5oYXNJblRhYmxlU2NvcGUoJC5UUikpIHtcbiAgICAgICAgICAgICAgICBwLm9wZW5FbGVtZW50cy5jbGVhckJhY2tUb1RhYmxlUm93Q29udGV4dCgpO1xuICAgICAgICAgICAgICAgIHAub3BlbkVsZW1lbnRzLnBvcCgpO1xuICAgICAgICAgICAgICAgIHAuaW5zZXJ0aW9uTW9kZSA9IEluc2VydGlvbk1vZGUuSU5fVEFCTEVfQk9EWTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgJC5UQUJMRToge1xuICAgICAgICAgICAgaWYgKHAub3BlbkVsZW1lbnRzLmhhc0luVGFibGVTY29wZSgkLlRSKSkge1xuICAgICAgICAgICAgICAgIHAub3BlbkVsZW1lbnRzLmNsZWFyQmFja1RvVGFibGVSb3dDb250ZXh0KCk7XG4gICAgICAgICAgICAgICAgcC5vcGVuRWxlbWVudHMucG9wKCk7XG4gICAgICAgICAgICAgICAgcC5pbnNlcnRpb25Nb2RlID0gSW5zZXJ0aW9uTW9kZS5JTl9UQUJMRV9CT0RZO1xuICAgICAgICAgICAgICAgIGVuZFRhZ0luVGFibGVCb2R5KHAsIHRva2VuKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgJC5UQk9EWTpcbiAgICAgICAgY2FzZSAkLlRGT09UOlxuICAgICAgICBjYXNlICQuVEhFQUQ6IHtcbiAgICAgICAgICAgIGlmIChwLm9wZW5FbGVtZW50cy5oYXNJblRhYmxlU2NvcGUodG9rZW4udGFnSUQpIHx8IHAub3BlbkVsZW1lbnRzLmhhc0luVGFibGVTY29wZSgkLlRSKSkge1xuICAgICAgICAgICAgICAgIHAub3BlbkVsZW1lbnRzLmNsZWFyQmFja1RvVGFibGVSb3dDb250ZXh0KCk7XG4gICAgICAgICAgICAgICAgcC5vcGVuRWxlbWVudHMucG9wKCk7XG4gICAgICAgICAgICAgICAgcC5pbnNlcnRpb25Nb2RlID0gSW5zZXJ0aW9uTW9kZS5JTl9UQUJMRV9CT0RZO1xuICAgICAgICAgICAgICAgIGVuZFRhZ0luVGFibGVCb2R5KHAsIHRva2VuKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgJC5CT0RZOlxuICAgICAgICBjYXNlICQuQ0FQVElPTjpcbiAgICAgICAgY2FzZSAkLkNPTDpcbiAgICAgICAgY2FzZSAkLkNPTEdST1VQOlxuICAgICAgICBjYXNlICQuSFRNTDpcbiAgICAgICAgY2FzZSAkLlREOlxuICAgICAgICBjYXNlICQuVEg6IHtcbiAgICAgICAgICAgIC8vIElnbm9yZSBlbmQgdGFnXG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBkZWZhdWx0OiB7XG4gICAgICAgICAgICBlbmRUYWdJblRhYmxlKHAsIHRva2VuKTtcbiAgICAgICAgfVxuICAgIH1cbn1cbi8vIFRoZSBcImluIGNlbGxcIiBpbnNlcnRpb24gbW9kZVxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbmZ1bmN0aW9uIHN0YXJ0VGFnSW5DZWxsKHAsIHRva2VuKSB7XG4gICAgY29uc3QgdG4gPSB0b2tlbi50YWdJRDtcbiAgICBpZiAoVEFCTEVfVk9JRF9FTEVNRU5UUy5oYXModG4pKSB7XG4gICAgICAgIGlmIChwLm9wZW5FbGVtZW50cy5oYXNJblRhYmxlU2NvcGUoJC5URCkgfHwgcC5vcGVuRWxlbWVudHMuaGFzSW5UYWJsZVNjb3BlKCQuVEgpKSB7XG4gICAgICAgICAgICBwLl9jbG9zZVRhYmxlQ2VsbCgpO1xuICAgICAgICAgICAgc3RhcnRUYWdJblJvdyhwLCB0b2tlbik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKTtcbiAgICB9XG59XG5mdW5jdGlvbiBlbmRUYWdJbkNlbGwocCwgdG9rZW4pIHtcbiAgICBjb25zdCB0biA9IHRva2VuLnRhZ0lEO1xuICAgIHN3aXRjaCAodG4pIHtcbiAgICAgICAgY2FzZSAkLlREOlxuICAgICAgICBjYXNlICQuVEg6IHtcbiAgICAgICAgICAgIGlmIChwLm9wZW5FbGVtZW50cy5oYXNJblRhYmxlU2NvcGUodG4pKSB7XG4gICAgICAgICAgICAgICAgcC5vcGVuRWxlbWVudHMuZ2VuZXJhdGVJbXBsaWVkRW5kVGFncygpO1xuICAgICAgICAgICAgICAgIHAub3BlbkVsZW1lbnRzLnBvcFVudGlsVGFnTmFtZVBvcHBlZCh0bik7XG4gICAgICAgICAgICAgICAgcC5hY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMuY2xlYXJUb0xhc3RNYXJrZXIoKTtcbiAgICAgICAgICAgICAgICBwLmluc2VydGlvbk1vZGUgPSBJbnNlcnRpb25Nb2RlLklOX1JPVztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgJC5UQUJMRTpcbiAgICAgICAgY2FzZSAkLlRCT0RZOlxuICAgICAgICBjYXNlICQuVEZPT1Q6XG4gICAgICAgIGNhc2UgJC5USEVBRDpcbiAgICAgICAgY2FzZSAkLlRSOiB7XG4gICAgICAgICAgICBpZiAocC5vcGVuRWxlbWVudHMuaGFzSW5UYWJsZVNjb3BlKHRuKSkge1xuICAgICAgICAgICAgICAgIHAuX2Nsb3NlVGFibGVDZWxsKCk7XG4gICAgICAgICAgICAgICAgZW5kVGFnSW5Sb3cocCwgdG9rZW4pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSAkLkJPRFk6XG4gICAgICAgIGNhc2UgJC5DQVBUSU9OOlxuICAgICAgICBjYXNlICQuQ09MOlxuICAgICAgICBjYXNlICQuQ09MR1JPVVA6XG4gICAgICAgIGNhc2UgJC5IVE1MOiB7XG4gICAgICAgICAgICAvLyBJZ25vcmUgdG9rZW5cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgIGVuZFRhZ0luQm9keShwLCB0b2tlbik7XG4gICAgICAgIH1cbiAgICB9XG59XG4vLyBUaGUgXCJpbiBzZWxlY3RcIiBpbnNlcnRpb24gbW9kZVxuLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbmZ1bmN0aW9uIHN0YXJ0VGFnSW5TZWxlY3QocCwgdG9rZW4pIHtcbiAgICBzd2l0Y2ggKHRva2VuLnRhZ0lEKSB7XG4gICAgICAgIGNhc2UgJC5IVE1MOiB7XG4gICAgICAgICAgICBzdGFydFRhZ0luQm9keShwLCB0b2tlbik7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjYXNlICQuT1BUSU9OOiB7XG4gICAgICAgICAgICBpZiAocC5vcGVuRWxlbWVudHMuY3VycmVudFRhZ0lkID09PSAkLk9QVElPTikge1xuICAgICAgICAgICAgICAgIHAub3BlbkVsZW1lbnRzLnBvcCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcC5faW5zZXJ0RWxlbWVudCh0b2tlbiwgTlMuSFRNTCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjYXNlICQuT1BUR1JPVVA6IHtcbiAgICAgICAgICAgIGlmIChwLm9wZW5FbGVtZW50cy5jdXJyZW50VGFnSWQgPT09ICQuT1BUSU9OKSB7XG4gICAgICAgICAgICAgICAgcC5vcGVuRWxlbWVudHMucG9wKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAocC5vcGVuRWxlbWVudHMuY3VycmVudFRhZ0lkID09PSAkLk9QVEdST1VQKSB7XG4gICAgICAgICAgICAgICAgcC5vcGVuRWxlbWVudHMucG9wKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBwLl9pbnNlcnRFbGVtZW50KHRva2VuLCBOUy5IVE1MKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgJC5IUjoge1xuICAgICAgICAgICAgaWYgKHAub3BlbkVsZW1lbnRzLmN1cnJlbnRUYWdJZCA9PT0gJC5PUFRJT04pIHtcbiAgICAgICAgICAgICAgICBwLm9wZW5FbGVtZW50cy5wb3AoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChwLm9wZW5FbGVtZW50cy5jdXJyZW50VGFnSWQgPT09ICQuT1BUR1JPVVApIHtcbiAgICAgICAgICAgICAgICBwLm9wZW5FbGVtZW50cy5wb3AoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHAuX2FwcGVuZEVsZW1lbnQodG9rZW4sIE5TLkhUTUwpO1xuICAgICAgICAgICAgdG9rZW4uYWNrU2VsZkNsb3NpbmcgPSB0cnVlO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSAkLklOUFVUOlxuICAgICAgICBjYXNlICQuS0VZR0VOOlxuICAgICAgICBjYXNlICQuVEVYVEFSRUE6XG4gICAgICAgIGNhc2UgJC5TRUxFQ1Q6IHtcbiAgICAgICAgICAgIGlmIChwLm9wZW5FbGVtZW50cy5oYXNJblNlbGVjdFNjb3BlKCQuU0VMRUNUKSkge1xuICAgICAgICAgICAgICAgIHAub3BlbkVsZW1lbnRzLnBvcFVudGlsVGFnTmFtZVBvcHBlZCgkLlNFTEVDVCk7XG4gICAgICAgICAgICAgICAgcC5fcmVzZXRJbnNlcnRpb25Nb2RlKCk7XG4gICAgICAgICAgICAgICAgaWYgKHRva2VuLnRhZ0lEICE9PSAkLlNFTEVDVCkge1xuICAgICAgICAgICAgICAgICAgICBwLl9wcm9jZXNzU3RhcnRUYWcodG9rZW4pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgJC5TQ1JJUFQ6XG4gICAgICAgIGNhc2UgJC5URU1QTEFURToge1xuICAgICAgICAgICAgc3RhcnRUYWdJbkhlYWQocCwgdG9rZW4pO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgLy8gRG8gbm90aGluZ1xuICAgIH1cbn1cbmZ1bmN0aW9uIGVuZFRhZ0luU2VsZWN0KHAsIHRva2VuKSB7XG4gICAgc3dpdGNoICh0b2tlbi50YWdJRCkge1xuICAgICAgICBjYXNlICQuT1BUR1JPVVA6IHtcbiAgICAgICAgICAgIGlmIChwLm9wZW5FbGVtZW50cy5zdGFja1RvcCA+IDAgJiZcbiAgICAgICAgICAgICAgICBwLm9wZW5FbGVtZW50cy5jdXJyZW50VGFnSWQgPT09ICQuT1BUSU9OICYmXG4gICAgICAgICAgICAgICAgcC5vcGVuRWxlbWVudHMudGFnSURzW3Aub3BlbkVsZW1lbnRzLnN0YWNrVG9wIC0gMV0gPT09ICQuT1BUR1JPVVApIHtcbiAgICAgICAgICAgICAgICBwLm9wZW5FbGVtZW50cy5wb3AoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChwLm9wZW5FbGVtZW50cy5jdXJyZW50VGFnSWQgPT09ICQuT1BUR1JPVVApIHtcbiAgICAgICAgICAgICAgICBwLm9wZW5FbGVtZW50cy5wb3AoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgJC5PUFRJT046IHtcbiAgICAgICAgICAgIGlmIChwLm9wZW5FbGVtZW50cy5jdXJyZW50VGFnSWQgPT09ICQuT1BUSU9OKSB7XG4gICAgICAgICAgICAgICAgcC5vcGVuRWxlbWVudHMucG9wKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjYXNlICQuU0VMRUNUOiB7XG4gICAgICAgICAgICBpZiAocC5vcGVuRWxlbWVudHMuaGFzSW5TZWxlY3RTY29wZSgkLlNFTEVDVCkpIHtcbiAgICAgICAgICAgICAgICBwLm9wZW5FbGVtZW50cy5wb3BVbnRpbFRhZ05hbWVQb3BwZWQoJC5TRUxFQ1QpO1xuICAgICAgICAgICAgICAgIHAuX3Jlc2V0SW5zZXJ0aW9uTW9kZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSAkLlRFTVBMQVRFOiB7XG4gICAgICAgICAgICB0ZW1wbGF0ZUVuZFRhZ0luSGVhZChwLCB0b2tlbik7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAvLyBEbyBub3RoaW5nXG4gICAgfVxufVxuLy8gVGhlIFwiaW4gc2VsZWN0IGluIHRhYmxlXCIgaW5zZXJ0aW9uIG1vZGVcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5mdW5jdGlvbiBzdGFydFRhZ0luU2VsZWN0SW5UYWJsZShwLCB0b2tlbikge1xuICAgIGNvbnN0IHRuID0gdG9rZW4udGFnSUQ7XG4gICAgaWYgKHRuID09PSAkLkNBUFRJT04gfHxcbiAgICAgICAgdG4gPT09ICQuVEFCTEUgfHxcbiAgICAgICAgdG4gPT09ICQuVEJPRFkgfHxcbiAgICAgICAgdG4gPT09ICQuVEZPT1QgfHxcbiAgICAgICAgdG4gPT09ICQuVEhFQUQgfHxcbiAgICAgICAgdG4gPT09ICQuVFIgfHxcbiAgICAgICAgdG4gPT09ICQuVEQgfHxcbiAgICAgICAgdG4gPT09ICQuVEgpIHtcbiAgICAgICAgcC5vcGVuRWxlbWVudHMucG9wVW50aWxUYWdOYW1lUG9wcGVkKCQuU0VMRUNUKTtcbiAgICAgICAgcC5fcmVzZXRJbnNlcnRpb25Nb2RlKCk7XG4gICAgICAgIHAuX3Byb2Nlc3NTdGFydFRhZyh0b2tlbik7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBzdGFydFRhZ0luU2VsZWN0KHAsIHRva2VuKTtcbiAgICB9XG59XG5mdW5jdGlvbiBlbmRUYWdJblNlbGVjdEluVGFibGUocCwgdG9rZW4pIHtcbiAgICBjb25zdCB0biA9IHRva2VuLnRhZ0lEO1xuICAgIGlmICh0biA9PT0gJC5DQVBUSU9OIHx8XG4gICAgICAgIHRuID09PSAkLlRBQkxFIHx8XG4gICAgICAgIHRuID09PSAkLlRCT0RZIHx8XG4gICAgICAgIHRuID09PSAkLlRGT09UIHx8XG4gICAgICAgIHRuID09PSAkLlRIRUFEIHx8XG4gICAgICAgIHRuID09PSAkLlRSIHx8XG4gICAgICAgIHRuID09PSAkLlREIHx8XG4gICAgICAgIHRuID09PSAkLlRIKSB7XG4gICAgICAgIGlmIChwLm9wZW5FbGVtZW50cy5oYXNJblRhYmxlU2NvcGUodG4pKSB7XG4gICAgICAgICAgICBwLm9wZW5FbGVtZW50cy5wb3BVbnRpbFRhZ05hbWVQb3BwZWQoJC5TRUxFQ1QpO1xuICAgICAgICAgICAgcC5fcmVzZXRJbnNlcnRpb25Nb2RlKCk7XG4gICAgICAgICAgICBwLm9uRW5kVGFnKHRva2VuKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgZW5kVGFnSW5TZWxlY3QocCwgdG9rZW4pO1xuICAgIH1cbn1cbi8vIFRoZSBcImluIHRlbXBsYXRlXCIgaW5zZXJ0aW9uIG1vZGVcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5mdW5jdGlvbiBzdGFydFRhZ0luVGVtcGxhdGUocCwgdG9rZW4pIHtcbiAgICBzd2l0Y2ggKHRva2VuLnRhZ0lEKSB7XG4gICAgICAgIC8vIEZpcnN0LCBoYW5kbGUgdGFncyB0aGF0IGNhbiBzdGFydCB3aXRob3V0IGEgbW9kZSBjaGFuZ2VcbiAgICAgICAgY2FzZSAkLkJBU0U6XG4gICAgICAgIGNhc2UgJC5CQVNFRk9OVDpcbiAgICAgICAgY2FzZSAkLkJHU09VTkQ6XG4gICAgICAgIGNhc2UgJC5MSU5LOlxuICAgICAgICBjYXNlICQuTUVUQTpcbiAgICAgICAgY2FzZSAkLk5PRlJBTUVTOlxuICAgICAgICBjYXNlICQuU0NSSVBUOlxuICAgICAgICBjYXNlICQuU1RZTEU6XG4gICAgICAgIGNhc2UgJC5URU1QTEFURTpcbiAgICAgICAgY2FzZSAkLlRJVExFOiB7XG4gICAgICAgICAgICBzdGFydFRhZ0luSGVhZChwLCB0b2tlbik7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICAvLyBSZS1wcm9jZXNzIHRoZSB0b2tlbiBpbiB0aGUgYXBwcm9wcmlhdGUgbW9kZVxuICAgICAgICBjYXNlICQuQ0FQVElPTjpcbiAgICAgICAgY2FzZSAkLkNPTEdST1VQOlxuICAgICAgICBjYXNlICQuVEJPRFk6XG4gICAgICAgIGNhc2UgJC5URk9PVDpcbiAgICAgICAgY2FzZSAkLlRIRUFEOiB7XG4gICAgICAgICAgICBwLnRtcGxJbnNlcnRpb25Nb2RlU3RhY2tbMF0gPSBJbnNlcnRpb25Nb2RlLklOX1RBQkxFO1xuICAgICAgICAgICAgcC5pbnNlcnRpb25Nb2RlID0gSW5zZXJ0aW9uTW9kZS5JTl9UQUJMRTtcbiAgICAgICAgICAgIHN0YXJ0VGFnSW5UYWJsZShwLCB0b2tlbik7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjYXNlICQuQ09MOiB7XG4gICAgICAgICAgICBwLnRtcGxJbnNlcnRpb25Nb2RlU3RhY2tbMF0gPSBJbnNlcnRpb25Nb2RlLklOX0NPTFVNTl9HUk9VUDtcbiAgICAgICAgICAgIHAuaW5zZXJ0aW9uTW9kZSA9IEluc2VydGlvbk1vZGUuSU5fQ09MVU1OX0dST1VQO1xuICAgICAgICAgICAgc3RhcnRUYWdJbkNvbHVtbkdyb3VwKHAsIHRva2VuKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgJC5UUjoge1xuICAgICAgICAgICAgcC50bXBsSW5zZXJ0aW9uTW9kZVN0YWNrWzBdID0gSW5zZXJ0aW9uTW9kZS5JTl9UQUJMRV9CT0RZO1xuICAgICAgICAgICAgcC5pbnNlcnRpb25Nb2RlID0gSW5zZXJ0aW9uTW9kZS5JTl9UQUJMRV9CT0RZO1xuICAgICAgICAgICAgc3RhcnRUYWdJblRhYmxlQm9keShwLCB0b2tlbik7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjYXNlICQuVEQ6XG4gICAgICAgIGNhc2UgJC5USDoge1xuICAgICAgICAgICAgcC50bXBsSW5zZXJ0aW9uTW9kZVN0YWNrWzBdID0gSW5zZXJ0aW9uTW9kZS5JTl9ST1c7XG4gICAgICAgICAgICBwLmluc2VydGlvbk1vZGUgPSBJbnNlcnRpb25Nb2RlLklOX1JPVztcbiAgICAgICAgICAgIHN0YXJ0VGFnSW5Sb3cocCwgdG9rZW4pO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgcC50bXBsSW5zZXJ0aW9uTW9kZVN0YWNrWzBdID0gSW5zZXJ0aW9uTW9kZS5JTl9CT0RZO1xuICAgICAgICAgICAgcC5pbnNlcnRpb25Nb2RlID0gSW5zZXJ0aW9uTW9kZS5JTl9CT0RZO1xuICAgICAgICAgICAgc3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pO1xuICAgICAgICB9XG4gICAgfVxufVxuZnVuY3Rpb24gZW5kVGFnSW5UZW1wbGF0ZShwLCB0b2tlbikge1xuICAgIGlmICh0b2tlbi50YWdJRCA9PT0gJC5URU1QTEFURSkge1xuICAgICAgICB0ZW1wbGF0ZUVuZFRhZ0luSGVhZChwLCB0b2tlbik7XG4gICAgfVxufVxuZnVuY3Rpb24gZW9mSW5UZW1wbGF0ZShwLCB0b2tlbikge1xuICAgIGlmIChwLm9wZW5FbGVtZW50cy50bXBsQ291bnQgPiAwKSB7XG4gICAgICAgIHAub3BlbkVsZW1lbnRzLnBvcFVudGlsVGFnTmFtZVBvcHBlZCgkLlRFTVBMQVRFKTtcbiAgICAgICAgcC5hY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMuY2xlYXJUb0xhc3RNYXJrZXIoKTtcbiAgICAgICAgcC50bXBsSW5zZXJ0aW9uTW9kZVN0YWNrLnNoaWZ0KCk7XG4gICAgICAgIHAuX3Jlc2V0SW5zZXJ0aW9uTW9kZSgpO1xuICAgICAgICBwLm9uRW9mKHRva2VuKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHN0b3BQYXJzaW5nKHAsIHRva2VuKTtcbiAgICB9XG59XG4vLyBUaGUgXCJhZnRlciBib2R5XCIgaW5zZXJ0aW9uIG1vZGVcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5mdW5jdGlvbiBzdGFydFRhZ0FmdGVyQm9keShwLCB0b2tlbikge1xuICAgIGlmICh0b2tlbi50YWdJRCA9PT0gJC5IVE1MKSB7XG4gICAgICAgIHN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHRva2VuQWZ0ZXJCb2R5KHAsIHRva2VuKTtcbiAgICB9XG59XG5mdW5jdGlvbiBlbmRUYWdBZnRlckJvZHkocCwgdG9rZW4pIHtcbiAgICB2YXIgX2E7XG4gICAgaWYgKHRva2VuLnRhZ0lEID09PSAkLkhUTUwpIHtcbiAgICAgICAgaWYgKCFwLmZyYWdtZW50Q29udGV4dCkge1xuICAgICAgICAgICAgcC5pbnNlcnRpb25Nb2RlID0gSW5zZXJ0aW9uTW9kZS5BRlRFUl9BRlRFUl9CT0RZO1xuICAgICAgICB9XG4gICAgICAgIC8vTk9URTogPGh0bWw+IGlzIG5ldmVyIHBvcHBlZCBmcm9tIHRoZSBzdGFjaywgc28gd2UgbmVlZCB0byB1cGRhdGVkXG4gICAgICAgIC8vdGhlIGVuZCBsb2NhdGlvbiBleHBsaWNpdGx5LlxuICAgICAgICBpZiAocC5vcHRpb25zLnNvdXJjZUNvZGVMb2NhdGlvbkluZm8gJiYgcC5vcGVuRWxlbWVudHMudGFnSURzWzBdID09PSAkLkhUTUwpIHtcbiAgICAgICAgICAgIHAuX3NldEVuZExvY2F0aW9uKHAub3BlbkVsZW1lbnRzLml0ZW1zWzBdLCB0b2tlbik7XG4gICAgICAgICAgICAvLyBVcGRhdGUgdGhlIGJvZHkgZWxlbWVudCwgaWYgaXQgZG9lc24ndCBoYXZlIGFuIGVuZCB0YWdcbiAgICAgICAgICAgIGNvbnN0IGJvZHlFbGVtZW50ID0gcC5vcGVuRWxlbWVudHMuaXRlbXNbMV07XG4gICAgICAgICAgICBpZiAoYm9keUVsZW1lbnQgJiYgISgoX2EgPSBwLnRyZWVBZGFwdGVyLmdldE5vZGVTb3VyY2VDb2RlTG9jYXRpb24oYm9keUVsZW1lbnQpKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuZW5kVGFnKSkge1xuICAgICAgICAgICAgICAgIHAuX3NldEVuZExvY2F0aW9uKGJvZHlFbGVtZW50LCB0b2tlbik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHRva2VuQWZ0ZXJCb2R5KHAsIHRva2VuKTtcbiAgICB9XG59XG5mdW5jdGlvbiB0b2tlbkFmdGVyQm9keShwLCB0b2tlbikge1xuICAgIHAuaW5zZXJ0aW9uTW9kZSA9IEluc2VydGlvbk1vZGUuSU5fQk9EWTtcbiAgICBtb2RlSW5Cb2R5KHAsIHRva2VuKTtcbn1cbi8vIFRoZSBcImluIGZyYW1lc2V0XCIgaW5zZXJ0aW9uIG1vZGVcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5mdW5jdGlvbiBzdGFydFRhZ0luRnJhbWVzZXQocCwgdG9rZW4pIHtcbiAgICBzd2l0Y2ggKHRva2VuLnRhZ0lEKSB7XG4gICAgICAgIGNhc2UgJC5IVE1MOiB7XG4gICAgICAgICAgICBzdGFydFRhZ0luQm9keShwLCB0b2tlbik7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjYXNlICQuRlJBTUVTRVQ6IHtcbiAgICAgICAgICAgIHAuX2luc2VydEVsZW1lbnQodG9rZW4sIE5TLkhUTUwpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY2FzZSAkLkZSQU1FOiB7XG4gICAgICAgICAgICBwLl9hcHBlbmRFbGVtZW50KHRva2VuLCBOUy5IVE1MKTtcbiAgICAgICAgICAgIHRva2VuLmFja1NlbGZDbG9zaW5nID0gdHJ1ZTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgJC5OT0ZSQU1FUzoge1xuICAgICAgICAgICAgc3RhcnRUYWdJbkhlYWQocCwgdG9rZW4pO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgLy8gRG8gbm90aGluZ1xuICAgIH1cbn1cbmZ1bmN0aW9uIGVuZFRhZ0luRnJhbWVzZXQocCwgdG9rZW4pIHtcbiAgICBpZiAodG9rZW4udGFnSUQgPT09ICQuRlJBTUVTRVQgJiYgIXAub3BlbkVsZW1lbnRzLmlzUm9vdEh0bWxFbGVtZW50Q3VycmVudCgpKSB7XG4gICAgICAgIHAub3BlbkVsZW1lbnRzLnBvcCgpO1xuICAgICAgICBpZiAoIXAuZnJhZ21lbnRDb250ZXh0ICYmIHAub3BlbkVsZW1lbnRzLmN1cnJlbnRUYWdJZCAhPT0gJC5GUkFNRVNFVCkge1xuICAgICAgICAgICAgcC5pbnNlcnRpb25Nb2RlID0gSW5zZXJ0aW9uTW9kZS5BRlRFUl9GUkFNRVNFVDtcbiAgICAgICAgfVxuICAgIH1cbn1cbi8vIFRoZSBcImFmdGVyIGZyYW1lc2V0XCIgaW5zZXJ0aW9uIG1vZGVcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5mdW5jdGlvbiBzdGFydFRhZ0FmdGVyRnJhbWVzZXQocCwgdG9rZW4pIHtcbiAgICBzd2l0Y2ggKHRva2VuLnRhZ0lEKSB7XG4gICAgICAgIGNhc2UgJC5IVE1MOiB7XG4gICAgICAgICAgICBzdGFydFRhZ0luQm9keShwLCB0b2tlbik7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBjYXNlICQuTk9GUkFNRVM6IHtcbiAgICAgICAgICAgIHN0YXJ0VGFnSW5IZWFkKHAsIHRva2VuKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgIC8vIERvIG5vdGhpbmdcbiAgICB9XG59XG5mdW5jdGlvbiBlbmRUYWdBZnRlckZyYW1lc2V0KHAsIHRva2VuKSB7XG4gICAgaWYgKHRva2VuLnRhZ0lEID09PSAkLkhUTUwpIHtcbiAgICAgICAgcC5pbnNlcnRpb25Nb2RlID0gSW5zZXJ0aW9uTW9kZS5BRlRFUl9BRlRFUl9GUkFNRVNFVDtcbiAgICB9XG59XG4vLyBUaGUgXCJhZnRlciBhZnRlciBib2R5XCIgaW5zZXJ0aW9uIG1vZGVcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5mdW5jdGlvbiBzdGFydFRhZ0FmdGVyQWZ0ZXJCb2R5KHAsIHRva2VuKSB7XG4gICAgaWYgKHRva2VuLnRhZ0lEID09PSAkLkhUTUwpIHtcbiAgICAgICAgc3RhcnRUYWdJbkJvZHkocCwgdG9rZW4pO1xuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgdG9rZW5BZnRlckFmdGVyQm9keShwLCB0b2tlbik7XG4gICAgfVxufVxuZnVuY3Rpb24gdG9rZW5BZnRlckFmdGVyQm9keShwLCB0b2tlbikge1xuICAgIHAuaW5zZXJ0aW9uTW9kZSA9IEluc2VydGlvbk1vZGUuSU5fQk9EWTtcbiAgICBtb2RlSW5Cb2R5KHAsIHRva2VuKTtcbn1cbi8vIFRoZSBcImFmdGVyIGFmdGVyIGZyYW1lc2V0XCIgaW5zZXJ0aW9uIG1vZGVcbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5mdW5jdGlvbiBzdGFydFRhZ0FmdGVyQWZ0ZXJGcmFtZXNldChwLCB0b2tlbikge1xuICAgIHN3aXRjaCAodG9rZW4udGFnSUQpIHtcbiAgICAgICAgY2FzZSAkLkhUTUw6IHtcbiAgICAgICAgICAgIHN0YXJ0VGFnSW5Cb2R5KHAsIHRva2VuKTtcbiAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNhc2UgJC5OT0ZSQU1FUzoge1xuICAgICAgICAgICAgc3RhcnRUYWdJbkhlYWQocCwgdG9rZW4pO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgLy8gRG8gbm90aGluZ1xuICAgIH1cbn1cbi8vIFRoZSBydWxlcyBmb3IgcGFyc2luZyB0b2tlbnMgaW4gZm9yZWlnbiBjb250ZW50XG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuZnVuY3Rpb24gbnVsbENoYXJhY3RlckluRm9yZWlnbkNvbnRlbnQocCwgdG9rZW4pIHtcbiAgICB0b2tlbi5jaGFycyA9IHVuaWNvZGUuUkVQTEFDRU1FTlRfQ0hBUkFDVEVSO1xuICAgIHAuX2luc2VydENoYXJhY3RlcnModG9rZW4pO1xufVxuZnVuY3Rpb24gY2hhcmFjdGVySW5Gb3JlaWduQ29udGVudChwLCB0b2tlbikge1xuICAgIHAuX2luc2VydENoYXJhY3RlcnModG9rZW4pO1xuICAgIHAuZnJhbWVzZXRPayA9IGZhbHNlO1xufVxuZnVuY3Rpb24gcG9wVW50aWxIdG1sT3JJbnRlZ3JhdGlvblBvaW50KHApIHtcbiAgICB3aGlsZSAocC50cmVlQWRhcHRlci5nZXROYW1lc3BhY2VVUkkocC5vcGVuRWxlbWVudHMuY3VycmVudCkgIT09IE5TLkhUTUwgJiZcbiAgICAgICAgIXAuX2lzSW50ZWdyYXRpb25Qb2ludChwLm9wZW5FbGVtZW50cy5jdXJyZW50VGFnSWQsIHAub3BlbkVsZW1lbnRzLmN1cnJlbnQpKSB7XG4gICAgICAgIHAub3BlbkVsZW1lbnRzLnBvcCgpO1xuICAgIH1cbn1cbmZ1bmN0aW9uIHN0YXJ0VGFnSW5Gb3JlaWduQ29udGVudChwLCB0b2tlbikge1xuICAgIGlmIChmb3JlaWduQ29udGVudC5jYXVzZXNFeGl0KHRva2VuKSkge1xuICAgICAgICBwb3BVbnRpbEh0bWxPckludGVncmF0aW9uUG9pbnQocCk7XG4gICAgICAgIHAuX3N0YXJ0VGFnT3V0c2lkZUZvcmVpZ25Db250ZW50KHRva2VuKTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGNvbnN0IGN1cnJlbnQgPSBwLl9nZXRBZGp1c3RlZEN1cnJlbnRFbGVtZW50KCk7XG4gICAgICAgIGNvbnN0IGN1cnJlbnROcyA9IHAudHJlZUFkYXB0ZXIuZ2V0TmFtZXNwYWNlVVJJKGN1cnJlbnQpO1xuICAgICAgICBpZiAoY3VycmVudE5zID09PSBOUy5NQVRITUwpIHtcbiAgICAgICAgICAgIGZvcmVpZ25Db250ZW50LmFkanVzdFRva2VuTWF0aE1MQXR0cnModG9rZW4pO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGN1cnJlbnROcyA9PT0gTlMuU1ZHKSB7XG4gICAgICAgICAgICBmb3JlaWduQ29udGVudC5hZGp1c3RUb2tlblNWR1RhZ05hbWUodG9rZW4pO1xuICAgICAgICAgICAgZm9yZWlnbkNvbnRlbnQuYWRqdXN0VG9rZW5TVkdBdHRycyh0b2tlbik7XG4gICAgICAgIH1cbiAgICAgICAgZm9yZWlnbkNvbnRlbnQuYWRqdXN0VG9rZW5YTUxBdHRycyh0b2tlbik7XG4gICAgICAgIGlmICh0b2tlbi5zZWxmQ2xvc2luZykge1xuICAgICAgICAgICAgcC5fYXBwZW5kRWxlbWVudCh0b2tlbiwgY3VycmVudE5zKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHAuX2luc2VydEVsZW1lbnQodG9rZW4sIGN1cnJlbnROcyk7XG4gICAgICAgIH1cbiAgICAgICAgdG9rZW4uYWNrU2VsZkNsb3NpbmcgPSB0cnVlO1xuICAgIH1cbn1cbmZ1bmN0aW9uIGVuZFRhZ0luRm9yZWlnbkNvbnRlbnQocCwgdG9rZW4pIHtcbiAgICBpZiAodG9rZW4udGFnSUQgPT09ICQuUCB8fCB0b2tlbi50YWdJRCA9PT0gJC5CUikge1xuICAgICAgICBwb3BVbnRpbEh0bWxPckludGVncmF0aW9uUG9pbnQocCk7XG4gICAgICAgIHAuX2VuZFRhZ091dHNpZGVGb3JlaWduQ29udGVudCh0b2tlbik7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZm9yIChsZXQgaSA9IHAub3BlbkVsZW1lbnRzLnN0YWNrVG9wOyBpID4gMDsgaS0tKSB7XG4gICAgICAgIGNvbnN0IGVsZW1lbnQgPSBwLm9wZW5FbGVtZW50cy5pdGVtc1tpXTtcbiAgICAgICAgaWYgKHAudHJlZUFkYXB0ZXIuZ2V0TmFtZXNwYWNlVVJJKGVsZW1lbnQpID09PSBOUy5IVE1MKSB7XG4gICAgICAgICAgICBwLl9lbmRUYWdPdXRzaWRlRm9yZWlnbkNvbnRlbnQodG9rZW4pO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdGFnTmFtZSA9IHAudHJlZUFkYXB0ZXIuZ2V0VGFnTmFtZShlbGVtZW50KTtcbiAgICAgICAgaWYgKHRhZ05hbWUudG9Mb3dlckNhc2UoKSA9PT0gdG9rZW4udGFnTmFtZSkge1xuICAgICAgICAgICAgLy9OT1RFOiB1cGRhdGUgdGhlIHRva2VuIHRhZyBuYW1lIGZvciBgX3NldEVuZExvY2F0aW9uYC5cbiAgICAgICAgICAgIHRva2VuLnRhZ05hbWUgPSB0YWdOYW1lO1xuICAgICAgICAgICAgcC5vcGVuRWxlbWVudHMuc2hvcnRlblRvTGVuZ3RoKGkpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG59XG4iLCAiaW1wb3J0IHsgVEFHX05BTUVTIGFzICQsIE5TLCBoYXNVbmVzY2FwZWRUZXh0IH0gZnJvbSAnLi4vY29tbW9uL2h0bWwuanMnO1xuaW1wb3J0IHsgZXNjYXBlVGV4dCwgZXNjYXBlQXR0cmlidXRlIH0gZnJvbSAnZW50aXRpZXMvbGliL2VzY2FwZS5qcyc7XG5pbXBvcnQgeyBkZWZhdWx0VHJlZUFkYXB0ZXIgfSBmcm9tICcuLi90cmVlLWFkYXB0ZXJzL2RlZmF1bHQuanMnO1xuLy8gU2V0c1xuY29uc3QgVk9JRF9FTEVNRU5UUyA9IG5ldyBTZXQoW1xuICAgICQuQVJFQSxcbiAgICAkLkJBU0UsXG4gICAgJC5CQVNFRk9OVCxcbiAgICAkLkJHU09VTkQsXG4gICAgJC5CUixcbiAgICAkLkNPTCxcbiAgICAkLkVNQkVELFxuICAgICQuRlJBTUUsXG4gICAgJC5IUixcbiAgICAkLklNRyxcbiAgICAkLklOUFVULFxuICAgICQuS0VZR0VOLFxuICAgICQuTElOSyxcbiAgICAkLk1FVEEsXG4gICAgJC5QQVJBTSxcbiAgICAkLlNPVVJDRSxcbiAgICAkLlRSQUNLLFxuICAgICQuV0JSLFxuXSk7XG5mdW5jdGlvbiBpc1ZvaWRFbGVtZW50KG5vZGUsIG9wdGlvbnMpIHtcbiAgICByZXR1cm4gKG9wdGlvbnMudHJlZUFkYXB0ZXIuaXNFbGVtZW50Tm9kZShub2RlKSAmJlxuICAgICAgICBvcHRpb25zLnRyZWVBZGFwdGVyLmdldE5hbWVzcGFjZVVSSShub2RlKSA9PT0gTlMuSFRNTCAmJlxuICAgICAgICBWT0lEX0VMRU1FTlRTLmhhcyhvcHRpb25zLnRyZWVBZGFwdGVyLmdldFRhZ05hbWUobm9kZSkpKTtcbn1cbmNvbnN0IGRlZmF1bHRPcHRzID0geyB0cmVlQWRhcHRlcjogZGVmYXVsdFRyZWVBZGFwdGVyLCBzY3JpcHRpbmdFbmFibGVkOiB0cnVlIH07XG4vKipcbiAqIFNlcmlhbGl6ZXMgYW4gQVNUIG5vZGUgdG8gYW4gSFRNTCBzdHJpbmcuXG4gKlxuICogQGV4YW1wbGVcbiAqXG4gKiBgYGBqc1xuICogY29uc3QgcGFyc2U1ID0gcmVxdWlyZSgncGFyc2U1Jyk7XG4gKlxuICogY29uc3QgZG9jdW1lbnQgPSBwYXJzZTUucGFyc2UoJzwhRE9DVFlQRSBodG1sPjxodG1sPjxoZWFkPjwvaGVhZD48Ym9keT5IaSB0aGVyZSE8L2JvZHk+PC9odG1sPicpO1xuICpcbiAqIC8vIFNlcmlhbGl6ZXMgYSBkb2N1bWVudC5cbiAqIGNvbnN0IGh0bWwgPSBwYXJzZTUuc2VyaWFsaXplKGRvY3VtZW50KTtcbiAqXG4gKiAvLyBTZXJpYWxpemVzIHRoZSA8aHRtbD4gZWxlbWVudCBjb250ZW50LlxuICogY29uc3Qgc3RyID0gcGFyc2U1LnNlcmlhbGl6ZShkb2N1bWVudC5jaGlsZE5vZGVzWzFdKTtcbiAqXG4gKiBjb25zb2xlLmxvZyhzdHIpOyAvLz4gJzxoZWFkPjwvaGVhZD48Ym9keT5IaSB0aGVyZSE8L2JvZHk+J1xuICogYGBgXG4gKlxuICogQHBhcmFtIG5vZGUgTm9kZSB0byBzZXJpYWxpemUuXG4gKiBAcGFyYW0gb3B0aW9ucyBTZXJpYWxpemF0aW9uIG9wdGlvbnMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXJpYWxpemUobm9kZSwgb3B0aW9ucykge1xuICAgIGNvbnN0IG9wdHMgPSB7IC4uLmRlZmF1bHRPcHRzLCAuLi5vcHRpb25zIH07XG4gICAgaWYgKGlzVm9pZEVsZW1lbnQobm9kZSwgb3B0cykpIHtcbiAgICAgICAgcmV0dXJuICcnO1xuICAgIH1cbiAgICByZXR1cm4gc2VyaWFsaXplQ2hpbGROb2Rlcyhub2RlLCBvcHRzKTtcbn1cbi8qKlxuICogU2VyaWFsaXplcyBhbiBBU1QgZWxlbWVudCBub2RlIHRvIGFuIEhUTUwgc3RyaW5nLCBpbmNsdWRpbmcgdGhlIGVsZW1lbnQgbm9kZS5cbiAqXG4gKiBAZXhhbXBsZVxuICpcbiAqIGBgYGpzXG4gKiBjb25zdCBwYXJzZTUgPSByZXF1aXJlKCdwYXJzZTUnKTtcbiAqXG4gKiBjb25zdCBkb2N1bWVudCA9IHBhcnNlNS5wYXJzZUZyYWdtZW50KCc8ZGl2PkhlbGxvLCA8Yj53b3JsZDwvYj4hPC9kaXY+Jyk7XG4gKlxuICogLy8gU2VyaWFsaXplcyB0aGUgPGRpdj4gZWxlbWVudC5cbiAqIGNvbnN0IHN0ciA9IHBhcnNlNS5zZXJpYWxpemVPdXRlcihkb2N1bWVudC5jaGlsZE5vZGVzWzBdKTtcbiAqXG4gKiBjb25zb2xlLmxvZyhzdHIpOyAvLz4gJzxkaXY+SGVsbG8sIDxiPndvcmxkPC9iPiE8L2Rpdj4nXG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0gbm9kZSBOb2RlIHRvIHNlcmlhbGl6ZS5cbiAqIEBwYXJhbSBvcHRpb25zIFNlcmlhbGl6YXRpb24gb3B0aW9ucy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNlcmlhbGl6ZU91dGVyKG5vZGUsIG9wdGlvbnMpIHtcbiAgICBjb25zdCBvcHRzID0geyAuLi5kZWZhdWx0T3B0cywgLi4ub3B0aW9ucyB9O1xuICAgIHJldHVybiBzZXJpYWxpemVOb2RlKG5vZGUsIG9wdHMpO1xufVxuZnVuY3Rpb24gc2VyaWFsaXplQ2hpbGROb2RlcyhwYXJlbnROb2RlLCBvcHRpb25zKSB7XG4gICAgbGV0IGh0bWwgPSAnJztcbiAgICAvLyBHZXQgY29udGFpbmVyIG9mIHRoZSBjaGlsZCBub2Rlc1xuICAgIGNvbnN0IGNvbnRhaW5lciA9IG9wdGlvbnMudHJlZUFkYXB0ZXIuaXNFbGVtZW50Tm9kZShwYXJlbnROb2RlKSAmJlxuICAgICAgICBvcHRpb25zLnRyZWVBZGFwdGVyLmdldFRhZ05hbWUocGFyZW50Tm9kZSkgPT09ICQuVEVNUExBVEUgJiZcbiAgICAgICAgb3B0aW9ucy50cmVlQWRhcHRlci5nZXROYW1lc3BhY2VVUkkocGFyZW50Tm9kZSkgPT09IE5TLkhUTUxcbiAgICAgICAgPyBvcHRpb25zLnRyZWVBZGFwdGVyLmdldFRlbXBsYXRlQ29udGVudChwYXJlbnROb2RlKVxuICAgICAgICA6IHBhcmVudE5vZGU7XG4gICAgY29uc3QgY2hpbGROb2RlcyA9IG9wdGlvbnMudHJlZUFkYXB0ZXIuZ2V0Q2hpbGROb2Rlcyhjb250YWluZXIpO1xuICAgIGlmIChjaGlsZE5vZGVzKSB7XG4gICAgICAgIGZvciAoY29uc3QgY3VycmVudE5vZGUgb2YgY2hpbGROb2Rlcykge1xuICAgICAgICAgICAgaHRtbCArPSBzZXJpYWxpemVOb2RlKGN1cnJlbnROb2RlLCBvcHRpb25zKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gaHRtbDtcbn1cbmZ1bmN0aW9uIHNlcmlhbGl6ZU5vZGUobm9kZSwgb3B0aW9ucykge1xuICAgIGlmIChvcHRpb25zLnRyZWVBZGFwdGVyLmlzRWxlbWVudE5vZGUobm9kZSkpIHtcbiAgICAgICAgcmV0dXJuIHNlcmlhbGl6ZUVsZW1lbnQobm9kZSwgb3B0aW9ucyk7XG4gICAgfVxuICAgIGlmIChvcHRpb25zLnRyZWVBZGFwdGVyLmlzVGV4dE5vZGUobm9kZSkpIHtcbiAgICAgICAgcmV0dXJuIHNlcmlhbGl6ZVRleHROb2RlKG5vZGUsIG9wdGlvbnMpO1xuICAgIH1cbiAgICBpZiAob3B0aW9ucy50cmVlQWRhcHRlci5pc0NvbW1lbnROb2RlKG5vZGUpKSB7XG4gICAgICAgIHJldHVybiBzZXJpYWxpemVDb21tZW50Tm9kZShub2RlLCBvcHRpb25zKTtcbiAgICB9XG4gICAgaWYgKG9wdGlvbnMudHJlZUFkYXB0ZXIuaXNEb2N1bWVudFR5cGVOb2RlKG5vZGUpKSB7XG4gICAgICAgIHJldHVybiBzZXJpYWxpemVEb2N1bWVudFR5cGVOb2RlKG5vZGUsIG9wdGlvbnMpO1xuICAgIH1cbiAgICAvLyBSZXR1cm4gYW4gZW1wdHkgc3RyaW5nIGZvciB1bmtub3duIG5vZGVzXG4gICAgcmV0dXJuICcnO1xufVxuZnVuY3Rpb24gc2VyaWFsaXplRWxlbWVudChub2RlLCBvcHRpb25zKSB7XG4gICAgY29uc3QgdG4gPSBvcHRpb25zLnRyZWVBZGFwdGVyLmdldFRhZ05hbWUobm9kZSk7XG4gICAgcmV0dXJuIGA8JHt0bn0ke3NlcmlhbGl6ZUF0dHJpYnV0ZXMobm9kZSwgb3B0aW9ucyl9PiR7aXNWb2lkRWxlbWVudChub2RlLCBvcHRpb25zKSA/ICcnIDogYCR7c2VyaWFsaXplQ2hpbGROb2Rlcyhub2RlLCBvcHRpb25zKX08LyR7dG59PmB9YDtcbn1cbmZ1bmN0aW9uIHNlcmlhbGl6ZUF0dHJpYnV0ZXMobm9kZSwgeyB0cmVlQWRhcHRlciB9KSB7XG4gICAgbGV0IGh0bWwgPSAnJztcbiAgICBmb3IgKGNvbnN0IGF0dHIgb2YgdHJlZUFkYXB0ZXIuZ2V0QXR0ckxpc3Qobm9kZSkpIHtcbiAgICAgICAgaHRtbCArPSAnICc7XG4gICAgICAgIGlmIChhdHRyLm5hbWVzcGFjZSkge1xuICAgICAgICAgICAgc3dpdGNoIChhdHRyLm5hbWVzcGFjZSkge1xuICAgICAgICAgICAgICAgIGNhc2UgTlMuWE1MOiB7XG4gICAgICAgICAgICAgICAgICAgIGh0bWwgKz0gYHhtbDoke2F0dHIubmFtZX1gO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FzZSBOUy5YTUxOUzoge1xuICAgICAgICAgICAgICAgICAgICBpZiAoYXR0ci5uYW1lICE9PSAneG1sbnMnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBodG1sICs9ICd4bWxuczonO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGh0bWwgKz0gYXR0ci5uYW1lO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FzZSBOUy5YTElOSzoge1xuICAgICAgICAgICAgICAgICAgICBodG1sICs9IGB4bGluazoke2F0dHIubmFtZX1gO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZGVmYXVsdDoge1xuICAgICAgICAgICAgICAgICAgICBodG1sICs9IGAke2F0dHIucHJlZml4fToke2F0dHIubmFtZX1gO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGh0bWwgKz0gYXR0ci5uYW1lO1xuICAgICAgICB9XG4gICAgICAgIGh0bWwgKz0gYD1cIiR7ZXNjYXBlQXR0cmlidXRlKGF0dHIudmFsdWUpfVwiYDtcbiAgICB9XG4gICAgcmV0dXJuIGh0bWw7XG59XG5mdW5jdGlvbiBzZXJpYWxpemVUZXh0Tm9kZShub2RlLCBvcHRpb25zKSB7XG4gICAgY29uc3QgeyB0cmVlQWRhcHRlciB9ID0gb3B0aW9ucztcbiAgICBjb25zdCBjb250ZW50ID0gdHJlZUFkYXB0ZXIuZ2V0VGV4dE5vZGVDb250ZW50KG5vZGUpO1xuICAgIGNvbnN0IHBhcmVudCA9IHRyZWVBZGFwdGVyLmdldFBhcmVudE5vZGUobm9kZSk7XG4gICAgY29uc3QgcGFyZW50VG4gPSBwYXJlbnQgJiYgdHJlZUFkYXB0ZXIuaXNFbGVtZW50Tm9kZShwYXJlbnQpICYmIHRyZWVBZGFwdGVyLmdldFRhZ05hbWUocGFyZW50KTtcbiAgICByZXR1cm4gcGFyZW50VG4gJiZcbiAgICAgICAgdHJlZUFkYXB0ZXIuZ2V0TmFtZXNwYWNlVVJJKHBhcmVudCkgPT09IE5TLkhUTUwgJiZcbiAgICAgICAgaGFzVW5lc2NhcGVkVGV4dChwYXJlbnRUbiwgb3B0aW9ucy5zY3JpcHRpbmdFbmFibGVkKVxuICAgICAgICA/IGNvbnRlbnRcbiAgICAgICAgOiBlc2NhcGVUZXh0KGNvbnRlbnQpO1xufVxuZnVuY3Rpb24gc2VyaWFsaXplQ29tbWVudE5vZGUobm9kZSwgeyB0cmVlQWRhcHRlciB9KSB7XG4gICAgcmV0dXJuIGA8IS0tJHt0cmVlQWRhcHRlci5nZXRDb21tZW50Tm9kZUNvbnRlbnQobm9kZSl9LS0+YDtcbn1cbmZ1bmN0aW9uIHNlcmlhbGl6ZURvY3VtZW50VHlwZU5vZGUobm9kZSwgeyB0cmVlQWRhcHRlciB9KSB7XG4gICAgcmV0dXJuIGA8IURPQ1RZUEUgJHt0cmVlQWRhcHRlci5nZXREb2N1bWVudFR5cGVOb2RlTmFtZShub2RlKX0+YDtcbn1cbiIsICJpbXBvcnQgeyBQYXJzZXIgfSBmcm9tICcuL3BhcnNlci9pbmRleC5qcyc7XG5leHBvcnQgeyBkZWZhdWx0VHJlZUFkYXB0ZXIgfSBmcm9tICcuL3RyZWUtYWRhcHRlcnMvZGVmYXVsdC5qcyc7XG5leHBvcnQgeyAvKiogQGludGVybmFsICovIFBhcnNlciB9IGZyb20gJy4vcGFyc2VyL2luZGV4LmpzJztcbmV4cG9ydCB7IHNlcmlhbGl6ZSwgc2VyaWFsaXplT3V0ZXIgfSBmcm9tICcuL3NlcmlhbGl6ZXIvaW5kZXguanMnO1xuZXhwb3J0IHsgRVJSIGFzIEVycm9yQ29kZXMgfSBmcm9tICcuL2NvbW1vbi9lcnJvci1jb2Rlcy5qcyc7XG4vKiogQGludGVybmFsICovXG5leHBvcnQgKiBhcyBmb3JlaWduQ29udGVudCBmcm9tICcuL2NvbW1vbi9mb3JlaWduLWNvbnRlbnQuanMnO1xuZXhwb3J0ICogYXMgaHRtbCBmcm9tICcuL2NvbW1vbi9odG1sLmpzJztcbmV4cG9ydCAqIGFzIFRva2VuIGZyb20gJy4vY29tbW9uL3Rva2VuLmpzJztcbi8qKiBAaW50ZXJuYWwgKi9cbmV4cG9ydCB7IFRva2VuaXplciwgVG9rZW5pemVyTW9kZSB9IGZyb20gJy4vdG9rZW5pemVyL2luZGV4LmpzJztcbi8vIFNob3J0aGFuZHNcbi8qKlxuICogUGFyc2VzIGFuIEhUTUwgc3RyaW5nLlxuICpcbiAqIEBwYXJhbSBodG1sIElucHV0IEhUTUwgc3RyaW5nLlxuICogQHBhcmFtIG9wdGlvbnMgUGFyc2luZyBvcHRpb25zLlxuICogQHJldHVybnMgRG9jdW1lbnRcbiAqXG4gKiBAZXhhbXBsZVxuICpcbiAqIGBgYGpzXG4gKiBjb25zdCBwYXJzZTUgPSByZXF1aXJlKCdwYXJzZTUnKTtcbiAqXG4gKiBjb25zdCBkb2N1bWVudCA9IHBhcnNlNS5wYXJzZSgnPCFET0NUWVBFIGh0bWw+PGh0bWw+PGhlYWQ+PC9oZWFkPjxib2R5PkhpIHRoZXJlITwvYm9keT48L2h0bWw+Jyk7XG4gKlxuICogY29uc29sZS5sb2coZG9jdW1lbnQuY2hpbGROb2Rlc1sxXS50YWdOYW1lKTsgLy8+ICdodG1sJ1xuICpgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlKGh0bWwsIG9wdGlvbnMpIHtcbiAgICByZXR1cm4gUGFyc2VyLnBhcnNlKGh0bWwsIG9wdGlvbnMpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlRnJhZ21lbnQoZnJhZ21lbnRDb250ZXh0LCBodG1sLCBvcHRpb25zKSB7XG4gICAgaWYgKHR5cGVvZiBmcmFnbWVudENvbnRleHQgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIG9wdGlvbnMgPSBodG1sO1xuICAgICAgICBodG1sID0gZnJhZ21lbnRDb250ZXh0O1xuICAgICAgICBmcmFnbWVudENvbnRleHQgPSBudWxsO1xuICAgIH1cbiAgICBjb25zdCBwYXJzZXIgPSBQYXJzZXIuZ2V0RnJhZ21lbnRQYXJzZXIoZnJhZ21lbnRDb250ZXh0LCBvcHRpb25zKTtcbiAgICBwYXJzZXIudG9rZW5pemVyLndyaXRlKGh0bWwsIHRydWUpO1xuICAgIHJldHVybiBwYXJzZXIuZ2V0RnJhZ21lbnQoKTtcbn1cbiIsICJpbXBvcnQgeyBodG1sIH0gZnJvbSAncGFyc2U1JztcbmltcG9ydCB7IEVsZW1lbnQsIERvY3VtZW50LCBQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24sIENvbW1lbnQsIFRleHQsIGlzRGlyZWN0aXZlLCBpc1RleHQsIGlzQ29tbWVudCwgaXNUYWcsIH0gZnJvbSAnZG9taGFuZGxlcic7XG5mdW5jdGlvbiBlbnF1b3RlRG9jdHlwZUlkKGlkKSB7XG4gICAgY29uc3QgcXVvdGUgPSBpZC5pbmNsdWRlcygnXCInKSA/IFwiJ1wiIDogJ1wiJztcbiAgICByZXR1cm4gcXVvdGUgKyBpZCArIHF1b3RlO1xufVxuLyoqIEBpbnRlcm5hbCAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNlcmlhbGl6ZURvY3R5cGVDb250ZW50KG5hbWUsIHB1YmxpY0lkLCBzeXN0ZW1JZCkge1xuICAgIGxldCBzdHIgPSAnIURPQ1RZUEUgJztcbiAgICBpZiAobmFtZSkge1xuICAgICAgICBzdHIgKz0gbmFtZTtcbiAgICB9XG4gICAgaWYgKHB1YmxpY0lkKSB7XG4gICAgICAgIHN0ciArPSBgIFBVQkxJQyAke2VucXVvdGVEb2N0eXBlSWQocHVibGljSWQpfWA7XG4gICAgfVxuICAgIGVsc2UgaWYgKHN5c3RlbUlkKSB7XG4gICAgICAgIHN0ciArPSAnIFNZU1RFTSc7XG4gICAgfVxuICAgIGlmIChzeXN0ZW1JZCkge1xuICAgICAgICBzdHIgKz0gYCAke2VucXVvdGVEb2N0eXBlSWQoc3lzdGVtSWQpfWA7XG4gICAgfVxuICAgIHJldHVybiBzdHI7XG59XG5leHBvcnQgY29uc3QgYWRhcHRlciA9IHtcbiAgICAvLyBSZS1leHBvcnRzIGZyb20gZG9taGFuZGxlclxuICAgIGlzQ29tbWVudE5vZGU6IGlzQ29tbWVudCxcbiAgICBpc0VsZW1lbnROb2RlOiBpc1RhZyxcbiAgICBpc1RleHROb2RlOiBpc1RleHQsXG4gICAgLy9Ob2RlIGNvbnN0cnVjdGlvblxuICAgIGNyZWF0ZURvY3VtZW50KCkge1xuICAgICAgICBjb25zdCBub2RlID0gbmV3IERvY3VtZW50KFtdKTtcbiAgICAgICAgbm9kZVsneC1tb2RlJ10gPSBodG1sLkRPQ1VNRU5UX01PREUuTk9fUVVJUktTO1xuICAgICAgICByZXR1cm4gbm9kZTtcbiAgICB9LFxuICAgIGNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKSB7XG4gICAgICAgIHJldHVybiBuZXcgRG9jdW1lbnQoW10pO1xuICAgIH0sXG4gICAgY3JlYXRlRWxlbWVudCh0YWdOYW1lLCBuYW1lc3BhY2VVUkksIGF0dHJzKSB7XG4gICAgICAgIGNvbnN0IGF0dHJpYnMgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICAgICAgICBjb25zdCBhdHRyaWJzTmFtZXNwYWNlID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcbiAgICAgICAgY29uc3QgYXR0cmlic1ByZWZpeCA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXR0cnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGF0dHJOYW1lID0gYXR0cnNbaV0ubmFtZTtcbiAgICAgICAgICAgIGF0dHJpYnNbYXR0ck5hbWVdID0gYXR0cnNbaV0udmFsdWU7XG4gICAgICAgICAgICBhdHRyaWJzTmFtZXNwYWNlW2F0dHJOYW1lXSA9IGF0dHJzW2ldLm5hbWVzcGFjZTtcbiAgICAgICAgICAgIGF0dHJpYnNQcmVmaXhbYXR0ck5hbWVdID0gYXR0cnNbaV0ucHJlZml4O1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IG5vZGUgPSBuZXcgRWxlbWVudCh0YWdOYW1lLCBhdHRyaWJzLCBbXSk7XG4gICAgICAgIG5vZGUubmFtZXNwYWNlID0gbmFtZXNwYWNlVVJJO1xuICAgICAgICBub2RlWyd4LWF0dHJpYnNOYW1lc3BhY2UnXSA9IGF0dHJpYnNOYW1lc3BhY2U7XG4gICAgICAgIG5vZGVbJ3gtYXR0cmlic1ByZWZpeCddID0gYXR0cmlic1ByZWZpeDtcbiAgICAgICAgcmV0dXJuIG5vZGU7XG4gICAgfSxcbiAgICBjcmVhdGVDb21tZW50Tm9kZShkYXRhKSB7XG4gICAgICAgIHJldHVybiBuZXcgQ29tbWVudChkYXRhKTtcbiAgICB9LFxuICAgIGNyZWF0ZVRleHROb2RlKHZhbHVlKSB7XG4gICAgICAgIHJldHVybiBuZXcgVGV4dCh2YWx1ZSk7XG4gICAgfSxcbiAgICAvL1RyZWUgbXV0YXRpb25cbiAgICBhcHBlbmRDaGlsZChwYXJlbnROb2RlLCBuZXdOb2RlKSB7XG4gICAgICAgIGNvbnN0IHByZXYgPSBwYXJlbnROb2RlLmNoaWxkcmVuW3BhcmVudE5vZGUuY2hpbGRyZW4ubGVuZ3RoIC0gMV07XG4gICAgICAgIGlmIChwcmV2KSB7XG4gICAgICAgICAgICBwcmV2Lm5leHQgPSBuZXdOb2RlO1xuICAgICAgICAgICAgbmV3Tm9kZS5wcmV2ID0gcHJldjtcbiAgICAgICAgfVxuICAgICAgICBwYXJlbnROb2RlLmNoaWxkcmVuLnB1c2gobmV3Tm9kZSk7XG4gICAgICAgIG5ld05vZGUucGFyZW50ID0gcGFyZW50Tm9kZTtcbiAgICB9LFxuICAgIGluc2VydEJlZm9yZShwYXJlbnROb2RlLCBuZXdOb2RlLCByZWZlcmVuY2VOb2RlKSB7XG4gICAgICAgIGNvbnN0IGluc2VydGlvbklkeCA9IHBhcmVudE5vZGUuY2hpbGRyZW4uaW5kZXhPZihyZWZlcmVuY2VOb2RlKTtcbiAgICAgICAgY29uc3QgeyBwcmV2IH0gPSByZWZlcmVuY2VOb2RlO1xuICAgICAgICBpZiAocHJldikge1xuICAgICAgICAgICAgcHJldi5uZXh0ID0gbmV3Tm9kZTtcbiAgICAgICAgICAgIG5ld05vZGUucHJldiA9IHByZXY7XG4gICAgICAgIH1cbiAgICAgICAgcmVmZXJlbmNlTm9kZS5wcmV2ID0gbmV3Tm9kZTtcbiAgICAgICAgbmV3Tm9kZS5uZXh0ID0gcmVmZXJlbmNlTm9kZTtcbiAgICAgICAgcGFyZW50Tm9kZS5jaGlsZHJlbi5zcGxpY2UoaW5zZXJ0aW9uSWR4LCAwLCBuZXdOb2RlKTtcbiAgICAgICAgbmV3Tm9kZS5wYXJlbnQgPSBwYXJlbnROb2RlO1xuICAgIH0sXG4gICAgc2V0VGVtcGxhdGVDb250ZW50KHRlbXBsYXRlRWxlbWVudCwgY29udGVudEVsZW1lbnQpIHtcbiAgICAgICAgYWRhcHRlci5hcHBlbmRDaGlsZCh0ZW1wbGF0ZUVsZW1lbnQsIGNvbnRlbnRFbGVtZW50KTtcbiAgICB9LFxuICAgIGdldFRlbXBsYXRlQ29udGVudCh0ZW1wbGF0ZUVsZW1lbnQpIHtcbiAgICAgICAgcmV0dXJuIHRlbXBsYXRlRWxlbWVudC5jaGlsZHJlblswXTtcbiAgICB9LFxuICAgIHNldERvY3VtZW50VHlwZShkb2N1bWVudCwgbmFtZSwgcHVibGljSWQsIHN5c3RlbUlkKSB7XG4gICAgICAgIGNvbnN0IGRhdGEgPSBzZXJpYWxpemVEb2N0eXBlQ29udGVudChuYW1lLCBwdWJsaWNJZCwgc3lzdGVtSWQpO1xuICAgICAgICBsZXQgZG9jdHlwZU5vZGUgPSBkb2N1bWVudC5jaGlsZHJlbi5maW5kKChub2RlKSA9PiBpc0RpcmVjdGl2ZShub2RlKSAmJiBub2RlLm5hbWUgPT09ICchZG9jdHlwZScpO1xuICAgICAgICBpZiAoZG9jdHlwZU5vZGUpIHtcbiAgICAgICAgICAgIGRvY3R5cGVOb2RlLmRhdGEgPSBkYXRhICE9PSBudWxsICYmIGRhdGEgIT09IHZvaWQgMCA/IGRhdGEgOiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgZG9jdHlwZU5vZGUgPSBuZXcgUHJvY2Vzc2luZ0luc3RydWN0aW9uKCchZG9jdHlwZScsIGRhdGEpO1xuICAgICAgICAgICAgYWRhcHRlci5hcHBlbmRDaGlsZChkb2N1bWVudCwgZG9jdHlwZU5vZGUpO1xuICAgICAgICB9XG4gICAgICAgIGRvY3R5cGVOb2RlWyd4LW5hbWUnXSA9IG5hbWU7XG4gICAgICAgIGRvY3R5cGVOb2RlWyd4LXB1YmxpY0lkJ10gPSBwdWJsaWNJZDtcbiAgICAgICAgZG9jdHlwZU5vZGVbJ3gtc3lzdGVtSWQnXSA9IHN5c3RlbUlkO1xuICAgIH0sXG4gICAgc2V0RG9jdW1lbnRNb2RlKGRvY3VtZW50LCBtb2RlKSB7XG4gICAgICAgIGRvY3VtZW50Wyd4LW1vZGUnXSA9IG1vZGU7XG4gICAgfSxcbiAgICBnZXREb2N1bWVudE1vZGUoZG9jdW1lbnQpIHtcbiAgICAgICAgcmV0dXJuIGRvY3VtZW50Wyd4LW1vZGUnXTtcbiAgICB9LFxuICAgIGRldGFjaE5vZGUobm9kZSkge1xuICAgICAgICBpZiAobm9kZS5wYXJlbnQpIHtcbiAgICAgICAgICAgIGNvbnN0IGlkeCA9IG5vZGUucGFyZW50LmNoaWxkcmVuLmluZGV4T2Yobm9kZSk7XG4gICAgICAgICAgICBjb25zdCB7IHByZXYsIG5leHQgfSA9IG5vZGU7XG4gICAgICAgICAgICBub2RlLnByZXYgPSBudWxsO1xuICAgICAgICAgICAgbm9kZS5uZXh0ID0gbnVsbDtcbiAgICAgICAgICAgIGlmIChwcmV2KSB7XG4gICAgICAgICAgICAgICAgcHJldi5uZXh0ID0gbmV4dDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChuZXh0KSB7XG4gICAgICAgICAgICAgICAgbmV4dC5wcmV2ID0gcHJldjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG5vZGUucGFyZW50LmNoaWxkcmVuLnNwbGljZShpZHgsIDEpO1xuICAgICAgICAgICAgbm9kZS5wYXJlbnQgPSBudWxsO1xuICAgICAgICB9XG4gICAgfSxcbiAgICBpbnNlcnRUZXh0KHBhcmVudE5vZGUsIHRleHQpIHtcbiAgICAgICAgY29uc3QgbGFzdENoaWxkID0gcGFyZW50Tm9kZS5jaGlsZHJlbltwYXJlbnROb2RlLmNoaWxkcmVuLmxlbmd0aCAtIDFdO1xuICAgICAgICBpZiAobGFzdENoaWxkICYmIGlzVGV4dChsYXN0Q2hpbGQpKSB7XG4gICAgICAgICAgICBsYXN0Q2hpbGQuZGF0YSArPSB0ZXh0O1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgYWRhcHRlci5hcHBlbmRDaGlsZChwYXJlbnROb2RlLCBhZGFwdGVyLmNyZWF0ZVRleHROb2RlKHRleHQpKTtcbiAgICAgICAgfVxuICAgIH0sXG4gICAgaW5zZXJ0VGV4dEJlZm9yZShwYXJlbnROb2RlLCB0ZXh0LCByZWZlcmVuY2VOb2RlKSB7XG4gICAgICAgIGNvbnN0IHByZXZOb2RlID0gcGFyZW50Tm9kZS5jaGlsZHJlbltwYXJlbnROb2RlLmNoaWxkcmVuLmluZGV4T2YocmVmZXJlbmNlTm9kZSkgLSAxXTtcbiAgICAgICAgaWYgKHByZXZOb2RlICYmIGlzVGV4dChwcmV2Tm9kZSkpIHtcbiAgICAgICAgICAgIHByZXZOb2RlLmRhdGEgKz0gdGV4dDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGFkYXB0ZXIuaW5zZXJ0QmVmb3JlKHBhcmVudE5vZGUsIGFkYXB0ZXIuY3JlYXRlVGV4dE5vZGUodGV4dCksIHJlZmVyZW5jZU5vZGUpO1xuICAgICAgICB9XG4gICAgfSxcbiAgICBhZG9wdEF0dHJpYnV0ZXMocmVjaXBpZW50LCBhdHRycykge1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGF0dHJzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBhdHRyTmFtZSA9IGF0dHJzW2ldLm5hbWU7XG4gICAgICAgICAgICBpZiAocmVjaXBpZW50LmF0dHJpYnNbYXR0ck5hbWVdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICByZWNpcGllbnQuYXR0cmlic1thdHRyTmFtZV0gPSBhdHRyc1tpXS52YWx1ZTtcbiAgICAgICAgICAgICAgICByZWNpcGllbnRbJ3gtYXR0cmlic05hbWVzcGFjZSddW2F0dHJOYW1lXSA9IGF0dHJzW2ldLm5hbWVzcGFjZTtcbiAgICAgICAgICAgICAgICByZWNpcGllbnRbJ3gtYXR0cmlic1ByZWZpeCddW2F0dHJOYW1lXSA9IGF0dHJzW2ldLnByZWZpeDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0sXG4gICAgLy9UcmVlIHRyYXZlcnNpbmdcbiAgICBnZXRGaXJzdENoaWxkKG5vZGUpIHtcbiAgICAgICAgcmV0dXJuIG5vZGUuY2hpbGRyZW5bMF07XG4gICAgfSxcbiAgICBnZXRDaGlsZE5vZGVzKG5vZGUpIHtcbiAgICAgICAgcmV0dXJuIG5vZGUuY2hpbGRyZW47XG4gICAgfSxcbiAgICBnZXRQYXJlbnROb2RlKG5vZGUpIHtcbiAgICAgICAgcmV0dXJuIG5vZGUucGFyZW50O1xuICAgIH0sXG4gICAgZ2V0QXR0ckxpc3QoZWxlbWVudCkge1xuICAgICAgICByZXR1cm4gZWxlbWVudC5hdHRyaWJ1dGVzO1xuICAgIH0sXG4gICAgLy9Ob2RlIGRhdGFcbiAgICBnZXRUYWdOYW1lKGVsZW1lbnQpIHtcbiAgICAgICAgcmV0dXJuIGVsZW1lbnQubmFtZTtcbiAgICB9LFxuICAgIGdldE5hbWVzcGFjZVVSSShlbGVtZW50KSB7XG4gICAgICAgIHJldHVybiBlbGVtZW50Lm5hbWVzcGFjZTtcbiAgICB9LFxuICAgIGdldFRleHROb2RlQ29udGVudCh0ZXh0Tm9kZSkge1xuICAgICAgICByZXR1cm4gdGV4dE5vZGUuZGF0YTtcbiAgICB9LFxuICAgIGdldENvbW1lbnROb2RlQ29udGVudChjb21tZW50Tm9kZSkge1xuICAgICAgICByZXR1cm4gY29tbWVudE5vZGUuZGF0YTtcbiAgICB9LFxuICAgIGdldERvY3VtZW50VHlwZU5vZGVOYW1lKGRvY3R5cGVOb2RlKSB7XG4gICAgICAgIHZhciBfYTtcbiAgICAgICAgcmV0dXJuIChfYSA9IGRvY3R5cGVOb2RlWyd4LW5hbWUnXSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogJyc7XG4gICAgfSxcbiAgICBnZXREb2N1bWVudFR5cGVOb2RlUHVibGljSWQoZG9jdHlwZU5vZGUpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICByZXR1cm4gKF9hID0gZG9jdHlwZU5vZGVbJ3gtcHVibGljSWQnXSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogJyc7XG4gICAgfSxcbiAgICBnZXREb2N1bWVudFR5cGVOb2RlU3lzdGVtSWQoZG9jdHlwZU5vZGUpIHtcbiAgICAgICAgdmFyIF9hO1xuICAgICAgICByZXR1cm4gKF9hID0gZG9jdHlwZU5vZGVbJ3gtc3lzdGVtSWQnXSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogJyc7XG4gICAgfSxcbiAgICAvL05vZGUgdHlwZXNcbiAgICBpc0RvY3VtZW50VHlwZU5vZGUobm9kZSkge1xuICAgICAgICByZXR1cm4gaXNEaXJlY3RpdmUobm9kZSkgJiYgbm9kZS5uYW1lID09PSAnIWRvY3R5cGUnO1xuICAgIH0sXG4gICAgLy8gU291cmNlIGNvZGUgbG9jYXRpb25cbiAgICBzZXROb2RlU291cmNlQ29kZUxvY2F0aW9uKG5vZGUsIGxvY2F0aW9uKSB7XG4gICAgICAgIGlmIChsb2NhdGlvbikge1xuICAgICAgICAgICAgbm9kZS5zdGFydEluZGV4ID0gbG9jYXRpb24uc3RhcnRPZmZzZXQ7XG4gICAgICAgICAgICBub2RlLmVuZEluZGV4ID0gbG9jYXRpb24uZW5kT2Zmc2V0O1xuICAgICAgICB9XG4gICAgICAgIG5vZGUuc291cmNlQ29kZUxvY2F0aW9uID0gbG9jYXRpb247XG4gICAgfSxcbiAgICBnZXROb2RlU291cmNlQ29kZUxvY2F0aW9uKG5vZGUpIHtcbiAgICAgICAgcmV0dXJuIG5vZGUuc291cmNlQ29kZUxvY2F0aW9uO1xuICAgIH0sXG4gICAgdXBkYXRlTm9kZVNvdXJjZUNvZGVMb2NhdGlvbihub2RlLCBlbmRMb2NhdGlvbikge1xuICAgICAgICBpZiAoZW5kTG9jYXRpb24uZW5kT2Zmc2V0ICE9IG51bGwpXG4gICAgICAgICAgICBub2RlLmVuZEluZGV4ID0gZW5kTG9jYXRpb24uZW5kT2Zmc2V0O1xuICAgICAgICBub2RlLnNvdXJjZUNvZGVMb2NhdGlvbiA9IHtcbiAgICAgICAgICAgIC4uLm5vZGUuc291cmNlQ29kZUxvY2F0aW9uLFxuICAgICAgICAgICAgLi4uZW5kTG9jYXRpb24sXG4gICAgICAgIH07XG4gICAgfSxcbn07XG4iLCAiaW1wb3J0IHtcbiAgdHlwZSBBbnlOb2RlLFxuICB0eXBlIERvY3VtZW50LFxuICB0eXBlIFBhcmVudE5vZGUsXG4gIGlzRG9jdW1lbnQsXG59IGZyb20gJ2RvbWhhbmRsZXInO1xuaW1wb3J0IHsgcGFyc2UgYXMgcGFyc2VEb2N1bWVudCwgcGFyc2VGcmFnbWVudCwgc2VyaWFsaXplT3V0ZXIgfSBmcm9tICdwYXJzZTUnO1xuaW1wb3J0IHsgYWRhcHRlciBhcyBodG1scGFyc2VyMkFkYXB0ZXIgfSBmcm9tICdwYXJzZTUtaHRtbHBhcnNlcjItdHJlZS1hZGFwdGVyJztcbmltcG9ydCB0eXBlIHsgSW50ZXJuYWxPcHRpb25zIH0gZnJvbSAnLi4vb3B0aW9ucy5qcyc7XG5cbi8qKlxuICogUGFyc2UgdGhlIGNvbnRlbnQgd2l0aCBgcGFyc2U1YCBpbiB0aGUgY29udGV4dCBvZiB0aGUgZ2l2ZW4gYFBhcmVudE5vZGVgLlxuICpcbiAqIEBwYXJhbSBjb250ZW50IC0gVGhlIGNvbnRlbnQgdG8gcGFyc2UuXG4gKiBAcGFyYW0gb3B0aW9ucyAtIEEgc2V0IG9mIG9wdGlvbnMgdG8gdXNlIHRvIHBhcnNlLlxuICogQHBhcmFtIGlzRG9jdW1lbnQgLSBXaGV0aGVyIHRvIHBhcnNlIHRoZSBjb250ZW50IGFzIGEgZnVsbCBIVE1MIGRvY3VtZW50LlxuICogQHBhcmFtIGNvbnRleHQgLSBUaGUgY29udGV4dCBpbiB3aGljaCB0byBwYXJzZSB0aGUgY29udGVudC5cbiAqIEByZXR1cm5zIFRoZSBwYXJzZWQgY29udGVudC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHBhcnNlV2l0aFBhcnNlNShcbiAgY29udGVudDogc3RyaW5nLFxuICBvcHRpb25zOiBJbnRlcm5hbE9wdGlvbnMsXG4gIGlzRG9jdW1lbnQ6IGJvb2xlYW4sXG4gIGNvbnRleHQ6IFBhcmVudE5vZGUgfCBudWxsLFxuKTogRG9jdW1lbnQge1xuICBvcHRpb25zLnRyZWVBZGFwdGVyID8/PSBodG1scGFyc2VyMkFkYXB0ZXI7XG5cbiAgaWYgKG9wdGlvbnMuc2NyaXB0aW5nRW5hYmxlZCAhPT0gZmFsc2UpIHtcbiAgICBvcHRpb25zLnNjcmlwdGluZ0VuYWJsZWQgPSB0cnVlO1xuICB9XG5cbiAgcmV0dXJuIGlzRG9jdW1lbnRcbiAgICA/IHBhcnNlRG9jdW1lbnQoY29udGVudCwgb3B0aW9ucylcbiAgICA6IHBhcnNlRnJhZ21lbnQoY29udGV4dCwgY29udGVudCwgb3B0aW9ucyk7XG59XG5cbmNvbnN0IHJlbmRlck9wdHMgPSB7IHRyZWVBZGFwdGVyOiBodG1scGFyc2VyMkFkYXB0ZXIgfTtcblxuLyoqXG4gKiBSZW5kZXJzIHRoZSBnaXZlbiBET00gdHJlZSB3aXRoIGBwYXJzZTVgIGFuZCByZXR1cm5zIHRoZSByZXN1bHQgYXMgYSBzdHJpbmcuXG4gKlxuICogQHBhcmFtIGRvbSAtIFRoZSBET00gdHJlZSB0byByZW5kZXIuXG4gKiBAcmV0dXJucyBUaGUgcmVuZGVyZWQgZG9jdW1lbnQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiByZW5kZXJXaXRoUGFyc2U1KGRvbTogQW55Tm9kZSB8IEFycmF5TGlrZTxBbnlOb2RlPik6IHN0cmluZyB7XG4gIC8qXG4gICAqIGBkb20tc2VyaWFsaXplcmAgcGFzc2VzIG92ZXIgdGhlIHNwZWNpYWwgXCJyb290XCIgbm9kZSBhbmQgcmVuZGVycyB0aGVcbiAgICogbm9kZSdzIGNoaWxkcmVuIGluIGl0cyBwbGFjZS4gVG8gbWltaWMgdGhpcyBiZWhhdmlvciB3aXRoIGBwYXJzZTVgLCBhblxuICAgKiBlcXVpdmFsZW50IG9wZXJhdGlvbiBtdXN0IGJlIGFwcGxpZWQgdG8gdGhlIGlucHV0IGFycmF5LlxuICAgKi9cbiAgY29uc3Qgbm9kZXMgPSAnbGVuZ3RoJyBpbiBkb20gPyBkb20gOiBbZG9tXTtcbiAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IG5vZGVzLmxlbmd0aDsgaW5kZXggKz0gMSkge1xuICAgIGNvbnN0IG5vZGUgPSBub2Rlc1tpbmRleF07XG4gICAgaWYgKGlzRG9jdW1lbnQobm9kZSkpIHtcbiAgICAgIEFycmF5LnByb3RvdHlwZS5zcGxpY2UuY2FsbChub2RlcywgaW5kZXgsIDEsIC4uLm5vZGUuY2hpbGRyZW4pO1xuICAgIH1cbiAgfVxuXG4gIGxldCByZXN1bHQgPSAnJztcbiAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IG5vZGVzLmxlbmd0aDsgaW5kZXggKz0gMSkge1xuICAgIGNvbnN0IG5vZGUgPSBub2Rlc1tpbmRleF07XG4gICAgcmVzdWx0ICs9IHNlcmlhbGl6ZU91dGVyKG5vZGUsIHJlbmRlck9wdHMpO1xuICB9XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn1cbiIsIG51bGwsIG51bGwsIG51bGwsICJpbXBvcnQgeyB0eXBlIENoZWVyaW9BUEksIGdldExvYWQgfSBmcm9tICcuL2xvYWQuanMnO1xuaW1wb3J0IHsgZ2V0UGFyc2UgfSBmcm9tICcuL3BhcnNlLmpzJztcbmltcG9ydCB7IHJlbmRlcldpdGhQYXJzZTUsIHBhcnNlV2l0aFBhcnNlNSB9IGZyb20gJy4vcGFyc2Vycy9wYXJzZTUtYWRhcHRlci5qcyc7XG5pbXBvcnQgdHlwZSB7IENoZWVyaW9PcHRpb25zIH0gZnJvbSAnLi9vcHRpb25zLmpzJztcbmltcG9ydCByZW5kZXJXaXRoSHRtbHBhcnNlcjIgZnJvbSAnZG9tLXNlcmlhbGl6ZXInO1xuaW1wb3J0IHsgcGFyc2VEb2N1bWVudCBhcyBwYXJzZVdpdGhIdG1scGFyc2VyMiB9IGZyb20gJ2h0bWxwYXJzZXIyJztcbmltcG9ydCB0eXBlIHsgQW55Tm9kZSB9IGZyb20gJ2RvbWhhbmRsZXInO1xuXG5jb25zdCBwYXJzZSA9IGdldFBhcnNlKChjb250ZW50LCBvcHRpb25zLCBpc0RvY3VtZW50LCBjb250ZXh0KSA9PlxuICBvcHRpb25zLl91c2VIdG1sUGFyc2VyMlxuICAgID8gcGFyc2VXaXRoSHRtbHBhcnNlcjIoY29udGVudCwgb3B0aW9ucylcbiAgICA6IHBhcnNlV2l0aFBhcnNlNShjb250ZW50LCBvcHRpb25zLCBpc0RvY3VtZW50LCBjb250ZXh0KSxcbik7XG5cbi8vIER1cGxpY2F0ZSBkb2NzIGR1ZSB0byBodHRwczovL2dpdGh1Yi5jb20vVHlwZVN0cm9uZy90eXBlZG9jL2lzc3Vlcy8xNjE2XG4vKipcbiAqIENyZWF0ZSBhIHF1ZXJ5aW5nIGZ1bmN0aW9uLCBib3VuZCB0byBhIGRvY3VtZW50IGNyZWF0ZWQgZnJvbSB0aGUgcHJvdmlkZWRcbiAqIG1hcmt1cC5cbiAqXG4gKiBOb3RlIHRoYXQgc2ltaWxhciB0byB3ZWIgYnJvd3NlciBjb250ZXh0cywgdGhpcyBvcGVyYXRpb24gbWF5IGludHJvZHVjZVxuICogYDxodG1sPmAsIGA8aGVhZD5gLCBhbmQgYDxib2R5PmAgZWxlbWVudHM7IHNldCBgaXNEb2N1bWVudGAgdG8gYGZhbHNlYCB0b1xuICogc3dpdGNoIHRvIGZyYWdtZW50IG1vZGUgYW5kIGRpc2FibGUgdGhpcy5cbiAqXG4gKiBAY2F0ZWdvcnkgTG9hZGluZ1xuICogQHBhcmFtIGNvbnRlbnQgLSBNYXJrdXAgdG8gYmUgbG9hZGVkLlxuICogQHBhcmFtIG9wdGlvbnMgLSBPcHRpb25zIGZvciB0aGUgY3JlYXRlZCBpbnN0YW5jZS5cbiAqIEBwYXJhbSBpc0RvY3VtZW50IC0gQWxsb3dzIHBhcnNlciB0byBiZSBzd2l0Y2hlZCB0byBmcmFnbWVudCBtb2RlLlxuICogQHJldHVybnMgVGhlIGxvYWRlZCBkb2N1bWVudC5cbiAqIEBzZWUge0BsaW5rIGh0dHBzOi8vY2hlZXJpby5qcy5vcmcjbG9hZGluZ30gZm9yIGFkZGl0aW9uYWwgdXNhZ2UgaW5mb3JtYXRpb24uXG4gKi9cbmV4cG9ydCBjb25zdCBsb2FkOiAoXG4gIGNvbnRlbnQ6IHN0cmluZyB8IEFueU5vZGUgfCBBbnlOb2RlW10gfCBCdWZmZXIsXG4gIG9wdGlvbnM/OiBDaGVlcmlvT3B0aW9ucyB8IG51bGwsXG4gIGlzRG9jdW1lbnQ/OiBib29sZWFuLFxuKSA9PiBDaGVlcmlvQVBJID0gZ2V0TG9hZChwYXJzZSwgKGRvbSwgb3B0aW9ucykgPT5cbiAgb3B0aW9ucy5fdXNlSHRtbFBhcnNlcjJcbiAgICA/IHJlbmRlcldpdGhIdG1scGFyc2VyMihkb20sIG9wdGlvbnMpXG4gICAgOiByZW5kZXJXaXRoUGFyc2U1KGRvbSksXG4pO1xuIiwgImltcG9ydCB7IFdyaXRhYmxlIH0gZnJvbSAnbm9kZTpzdHJlYW0nO1xuaW1wb3J0IHsgUGFyc2VyIH0gZnJvbSAncGFyc2U1Jztcbi8qIGVzbGludC1kaXNhYmxlIHVuaWNvcm4vY29uc2lzdGVudC1mdW5jdGlvbi1zY29waW5nIC0tIFRoZSBydWxlIHNlZW1zIHRvIGJlIGJyb2tlbiBoZXJlLiAqL1xuLyoqXG4gKiBTdHJlYW1pbmcgSFRNTCBwYXJzZXIgd2l0aCBzY3JpcHRpbmcgc3VwcG9ydC5cbiAqIEEgW3dyaXRhYmxlIHN0cmVhbV0oaHR0cHM6Ly9ub2RlanMub3JnL2FwaS9zdHJlYW0uaHRtbCNzdHJlYW1fY2xhc3Nfc3RyZWFtX3dyaXRhYmxlKS5cbiAqXG4gKiBAZXhhbXBsZVxuICpcbiAqIGBgYGpzXG4gKiBjb25zdCBQYXJzZXJTdHJlYW0gPSByZXF1aXJlKCdwYXJzZTUtcGFyc2VyLXN0cmVhbScpO1xuICogY29uc3QgaHR0cCA9IHJlcXVpcmUoJ2h0dHAnKTtcbiAqIGNvbnN0IHsgZmluaXNoZWQgfSA9IHJlcXVpcmUoJ25vZGU6c3RyZWFtJyk7XG4gKlxuICogLy8gRmV0Y2ggdGhlIHBhZ2UgY29udGVudCBhbmQgb2J0YWluIGl0J3MgPGhlYWQ+IG5vZGVcbiAqIGh0dHAuZ2V0KCdodHRwOi8vaW5pa3VsaW4uZ2l0aHViLmlvL3BhcnNlNS8nLCByZXMgPT4ge1xuICogICAgIGNvbnN0IHBhcnNlciA9IG5ldyBQYXJzZXJTdHJlYW0oKTtcbiAqXG4gKiAgICAgZmluaXNoZWQocGFyc2VyLCAoKSA9PiB7XG4gKiAgICAgICAgIGNvbnNvbGUubG9nKHBhcnNlci5kb2N1bWVudC5jaGlsZE5vZGVzWzFdLmNoaWxkTm9kZXNbMF0udGFnTmFtZSk7IC8vPiAnaGVhZCdcbiAqICAgICB9KTtcbiAqXG4gKiAgICAgcmVzLnBpcGUocGFyc2VyKTtcbiAqIH0pO1xuICogYGBgXG4gKlxuICovXG5leHBvcnQgY2xhc3MgUGFyc2VyU3RyZWFtIGV4dGVuZHMgV3JpdGFibGUge1xuICAgIHN0YXRpYyBnZXRGcmFnbWVudFN0cmVhbShmcmFnbWVudENvbnRleHQsIG9wdGlvbnMpIHtcbiAgICAgICAgY29uc3QgcGFyc2VyID0gUGFyc2VyLmdldEZyYWdtZW50UGFyc2VyKGZyYWdtZW50Q29udGV4dCwgb3B0aW9ucyk7XG4gICAgICAgIGNvbnN0IHN0cmVhbSA9IG5ldyBQYXJzZXJTdHJlYW0ob3B0aW9ucywgcGFyc2VyKTtcbiAgICAgICAgcmV0dXJuIHN0cmVhbTtcbiAgICB9XG4gICAgLyoqIFRoZSByZXN1bHRpbmcgZG9jdW1lbnQgbm9kZS4gKi9cbiAgICBnZXQgZG9jdW1lbnQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnBhcnNlci5kb2N1bWVudDtcbiAgICB9XG4gICAgZ2V0RnJhZ21lbnQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnBhcnNlci5nZXRGcmFnbWVudCgpO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBAcGFyYW0gb3B0aW9ucyBQYXJzaW5nIG9wdGlvbnMuXG4gICAgICovXG4gICAgY29uc3RydWN0b3Iob3B0aW9ucywgcGFyc2VyID0gbmV3IFBhcnNlcihvcHRpb25zKSkge1xuICAgICAgICBzdXBlcih7IGRlY29kZVN0cmluZ3M6IGZhbHNlIH0pO1xuICAgICAgICB0aGlzLnBhcnNlciA9IHBhcnNlcjtcbiAgICAgICAgdGhpcy5sYXN0Q2h1bmtXcml0dGVuID0gZmFsc2U7XG4gICAgICAgIHRoaXMud3JpdGVDYWxsYmFjayA9IHVuZGVmaW5lZDtcbiAgICAgICAgdGhpcy5wZW5kaW5nSHRtbEluc2VydGlvbnMgPSBbXTtcbiAgICAgICAgY29uc3QgcmVzdW1lID0gKCkgPT4ge1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IHRoaXMucGVuZGluZ0h0bWxJbnNlcnRpb25zLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5wYXJzZXIudG9rZW5pemVyLmluc2VydEh0bWxBdEN1cnJlbnRQb3ModGhpcy5wZW5kaW5nSHRtbEluc2VydGlvbnNbaV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5wZW5kaW5nSHRtbEluc2VydGlvbnMubGVuZ3RoID0gMDtcbiAgICAgICAgICAgIC8vTk9URToga2VlcCBwYXJzaW5nIGlmIHdlIGRvbid0IHdhaXQgZm9yIHRoZSBuZXh0IGlucHV0IGNodW5rXG4gICAgICAgICAgICB0aGlzLnBhcnNlci50b2tlbml6ZXIucmVzdW1lKHRoaXMud3JpdGVDYWxsYmFjayk7XG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IGRvY3VtZW50V3JpdGUgPSAoaHRtbCkgPT4ge1xuICAgICAgICAgICAgaWYgKCF0aGlzLnBhcnNlci5zdG9wcGVkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5wZW5kaW5nSHRtbEluc2VydGlvbnMucHVzaChodG1sKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgY29uc3Qgc2NyaXB0SGFuZGxlciA9IChzY3JpcHRFbGVtZW50KSA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy5saXN0ZW5lckNvdW50KCdzY3JpcHQnKSA+IDApIHtcbiAgICAgICAgICAgICAgICB0aGlzLnBhcnNlci50b2tlbml6ZXIucGF1c2UoKTtcbiAgICAgICAgICAgICAgICB0aGlzLmVtaXQoJ3NjcmlwdCcsIHNjcmlwdEVsZW1lbnQsIGRvY3VtZW50V3JpdGUsIHJlc3VtZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIHRoaXMucGFyc2VyLnNjcmlwdEhhbmRsZXIgPSBzY3JpcHRIYW5kbGVyO1xuICAgIH1cbiAgICAvL1dyaXRhYmxlU3RyZWFtIGltcGxlbWVudGF0aW9uXG4gICAgX3dyaXRlKGNodW5rLCBfZW5jb2RpbmcsIGNhbGxiYWNrKSB7XG4gICAgICAgIGlmICh0eXBlb2YgY2h1bmsgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdQYXJzZXIgY2FuIHdvcmsgb25seSB3aXRoIHN0cmluZyBzdHJlYW1zLicpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMud3JpdGVDYWxsYmFjayA9IGNhbGxiYWNrO1xuICAgICAgICB0aGlzLnBhcnNlci50b2tlbml6ZXIud3JpdGUoY2h1bmssIHRoaXMubGFzdENodW5rV3JpdHRlbiwgdGhpcy53cml0ZUNhbGxiYWNrKTtcbiAgICB9XG4gICAgLy8gVE9ETyBbZW5naW5lOm5vZGVAPj0xNl06IER1ZSB0byBpc3N1ZXMgd2l0aCBOb2RlIDwgMTYsIHdlIGFyZSBvdmVycmlkaW5nIGBlbmRgIGluc3RlYWQgb2YgYF9maW5hbGAuXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcbiAgICBlbmQoY2h1bmssIGVuY29kaW5nLCBjYWxsYmFjaykge1xuICAgICAgICB0aGlzLmxhc3RDaHVua1dyaXR0ZW4gPSB0cnVlO1xuICAgICAgICBzdXBlci5lbmQoY2h1bmsgfHwgJycsIGVuY29kaW5nLCBjYWxsYmFjayk7XG4gICAgfVxufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguanMubWFwIiwgIi8qIGVzbGludC1kaXNhYmxlIG5vZGUvbm8tZGVwcmVjYXRlZC1hcGkgKi9cblxuJ3VzZSBzdHJpY3QnXG5cbnZhciBidWZmZXIgPSByZXF1aXJlKCdidWZmZXInKVxudmFyIEJ1ZmZlciA9IGJ1ZmZlci5CdWZmZXJcblxudmFyIHNhZmVyID0ge31cblxudmFyIGtleVxuXG5mb3IgKGtleSBpbiBidWZmZXIpIHtcbiAgaWYgKCFidWZmZXIuaGFzT3duUHJvcGVydHkoa2V5KSkgY29udGludWVcbiAgaWYgKGtleSA9PT0gJ1Nsb3dCdWZmZXInIHx8IGtleSA9PT0gJ0J1ZmZlcicpIGNvbnRpbnVlXG4gIHNhZmVyW2tleV0gPSBidWZmZXJba2V5XVxufVxuXG52YXIgU2FmZXIgPSBzYWZlci5CdWZmZXIgPSB7fVxuZm9yIChrZXkgaW4gQnVmZmVyKSB7XG4gIGlmICghQnVmZmVyLmhhc093blByb3BlcnR5KGtleSkpIGNvbnRpbnVlXG4gIGlmIChrZXkgPT09ICdhbGxvY1Vuc2FmZScgfHwga2V5ID09PSAnYWxsb2NVbnNhZmVTbG93JykgY29udGludWVcbiAgU2FmZXJba2V5XSA9IEJ1ZmZlcltrZXldXG59XG5cbnNhZmVyLkJ1ZmZlci5wcm90b3R5cGUgPSBCdWZmZXIucHJvdG90eXBlXG5cbmlmICghU2FmZXIuZnJvbSB8fCBTYWZlci5mcm9tID09PSBVaW50OEFycmF5LmZyb20pIHtcbiAgU2FmZXIuZnJvbSA9IGZ1bmN0aW9uICh2YWx1ZSwgZW5jb2RpbmdPck9mZnNldCwgbGVuZ3RoKSB7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSBcInZhbHVlXCIgYXJndW1lbnQgbXVzdCBub3QgYmUgb2YgdHlwZSBudW1iZXIuIFJlY2VpdmVkIHR5cGUgJyArIHR5cGVvZiB2YWx1ZSlcbiAgICB9XG4gICAgaWYgKHZhbHVlICYmIHR5cGVvZiB2YWx1ZS5sZW5ndGggPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgZmlyc3QgYXJndW1lbnQgbXVzdCBiZSBvbmUgb2YgdHlwZSBzdHJpbmcsIEJ1ZmZlciwgQXJyYXlCdWZmZXIsIEFycmF5LCBvciBBcnJheS1saWtlIE9iamVjdC4gUmVjZWl2ZWQgdHlwZSAnICsgdHlwZW9mIHZhbHVlKVxuICAgIH1cbiAgICByZXR1cm4gQnVmZmVyKHZhbHVlLCBlbmNvZGluZ09yT2Zmc2V0LCBsZW5ndGgpXG4gIH1cbn1cblxuaWYgKCFTYWZlci5hbGxvYykge1xuICBTYWZlci5hbGxvYyA9IGZ1bmN0aW9uIChzaXplLCBmaWxsLCBlbmNvZGluZykge1xuICAgIGlmICh0eXBlb2Ygc2l6ZSAhPT0gJ251bWJlcicpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSBcInNpemVcIiBhcmd1bWVudCBtdXN0IGJlIG9mIHR5cGUgbnVtYmVyLiBSZWNlaXZlZCB0eXBlICcgKyB0eXBlb2Ygc2l6ZSlcbiAgICB9XG4gICAgaWYgKHNpemUgPCAwIHx8IHNpemUgPj0gMiAqICgxIDw8IDMwKSkge1xuICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1RoZSB2YWx1ZSBcIicgKyBzaXplICsgJ1wiIGlzIGludmFsaWQgZm9yIG9wdGlvbiBcInNpemVcIicpXG4gICAgfVxuICAgIHZhciBidWYgPSBCdWZmZXIoc2l6ZSlcbiAgICBpZiAoIWZpbGwgfHwgZmlsbC5sZW5ndGggPT09IDApIHtcbiAgICAgIGJ1Zi5maWxsKDApXG4gICAgfSBlbHNlIGlmICh0eXBlb2YgZW5jb2RpbmcgPT09ICdzdHJpbmcnKSB7XG4gICAgICBidWYuZmlsbChmaWxsLCBlbmNvZGluZylcbiAgICB9IGVsc2Uge1xuICAgICAgYnVmLmZpbGwoZmlsbClcbiAgICB9XG4gICAgcmV0dXJuIGJ1ZlxuICB9XG59XG5cbmlmICghc2FmZXIua1N0cmluZ01heExlbmd0aCkge1xuICB0cnkge1xuICAgIHNhZmVyLmtTdHJpbmdNYXhMZW5ndGggPSBwcm9jZXNzLmJpbmRpbmcoJ2J1ZmZlcicpLmtTdHJpbmdNYXhMZW5ndGhcbiAgfSBjYXRjaCAoZSkge1xuICAgIC8vIHdlIGNhbid0IGRldGVybWluZSBrU3RyaW5nTWF4TGVuZ3RoIGluIGVudmlyb25tZW50cyB3aGVyZSBwcm9jZXNzLmJpbmRpbmdcbiAgICAvLyBpcyB1bnN1cHBvcnRlZCwgc28gbGV0J3Mgbm90IHNldCBpdFxuICB9XG59XG5cbmlmICghc2FmZXIuY29uc3RhbnRzKSB7XG4gIHNhZmVyLmNvbnN0YW50cyA9IHtcbiAgICBNQVhfTEVOR1RIOiBzYWZlci5rTWF4TGVuZ3RoXG4gIH1cbiAgaWYgKHNhZmVyLmtTdHJpbmdNYXhMZW5ndGgpIHtcbiAgICBzYWZlci5jb25zdGFudHMuTUFYX1NUUklOR19MRU5HVEggPSBzYWZlci5rU3RyaW5nTWF4TGVuZ3RoXG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzYWZlclxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG52YXIgQk9NQ2hhciA9ICdcXHVGRUZGJztcblxuZXhwb3J0cy5QcmVwZW5kQk9NID0gUHJlcGVuZEJPTVdyYXBwZXJcbmZ1bmN0aW9uIFByZXBlbmRCT01XcmFwcGVyKGVuY29kZXIsIG9wdGlvbnMpIHtcbiAgICB0aGlzLmVuY29kZXIgPSBlbmNvZGVyO1xuICAgIHRoaXMuYWRkQk9NID0gdHJ1ZTtcbn1cblxuUHJlcGVuZEJPTVdyYXBwZXIucHJvdG90eXBlLndyaXRlID0gZnVuY3Rpb24oc3RyKSB7XG4gICAgaWYgKHRoaXMuYWRkQk9NKSB7XG4gICAgICAgIHN0ciA9IEJPTUNoYXIgKyBzdHI7XG4gICAgICAgIHRoaXMuYWRkQk9NID0gZmFsc2U7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuZW5jb2Rlci53cml0ZShzdHIpO1xufVxuXG5QcmVwZW5kQk9NV3JhcHBlci5wcm90b3R5cGUuZW5kID0gZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuZW5jb2Rlci5lbmQoKTtcbn1cblxuXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5leHBvcnRzLlN0cmlwQk9NID0gU3RyaXBCT01XcmFwcGVyO1xuZnVuY3Rpb24gU3RyaXBCT01XcmFwcGVyKGRlY29kZXIsIG9wdGlvbnMpIHtcbiAgICB0aGlzLmRlY29kZXIgPSBkZWNvZGVyO1xuICAgIHRoaXMucGFzcyA9IGZhbHNlO1xuICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG59XG5cblN0cmlwQk9NV3JhcHBlci5wcm90b3R5cGUud3JpdGUgPSBmdW5jdGlvbihidWYpIHtcbiAgICB2YXIgcmVzID0gdGhpcy5kZWNvZGVyLndyaXRlKGJ1Zik7XG4gICAgaWYgKHRoaXMucGFzcyB8fCAhcmVzKVxuICAgICAgICByZXR1cm4gcmVzO1xuXG4gICAgaWYgKHJlc1swXSA9PT0gQk9NQ2hhcikge1xuICAgICAgICByZXMgPSByZXMuc2xpY2UoMSk7XG4gICAgICAgIGlmICh0eXBlb2YgdGhpcy5vcHRpb25zLnN0cmlwQk9NID09PSAnZnVuY3Rpb24nKVxuICAgICAgICAgICAgdGhpcy5vcHRpb25zLnN0cmlwQk9NKCk7XG4gICAgfVxuXG4gICAgdGhpcy5wYXNzID0gdHJ1ZTtcbiAgICByZXR1cm4gcmVzO1xufVxuXG5TdHJpcEJPTVdyYXBwZXIucHJvdG90eXBlLmVuZCA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiB0aGlzLmRlY29kZXIuZW5kKCk7XG59XG5cbiIsICJcInVzZSBzdHJpY3RcIjtcbnZhciBCdWZmZXIgPSByZXF1aXJlKFwic2FmZXItYnVmZmVyXCIpLkJ1ZmZlcjtcblxuLy8gRXhwb3J0IE5vZGUuanMgaW50ZXJuYWwgZW5jb2RpbmdzLlxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgICAvLyBFbmNvZGluZ3NcbiAgICB1dGY4OiAgIHsgdHlwZTogXCJfaW50ZXJuYWxcIiwgYm9tQXdhcmU6IHRydWV9LFxuICAgIGNlc3U4OiAgeyB0eXBlOiBcIl9pbnRlcm5hbFwiLCBib21Bd2FyZTogdHJ1ZX0sXG4gICAgdW5pY29kZTExdXRmODogXCJ1dGY4XCIsXG5cbiAgICB1Y3MyOiAgIHsgdHlwZTogXCJfaW50ZXJuYWxcIiwgYm9tQXdhcmU6IHRydWV9LFxuICAgIHV0ZjE2bGU6IFwidWNzMlwiLFxuXG4gICAgYmluYXJ5OiB7IHR5cGU6IFwiX2ludGVybmFsXCIgfSxcbiAgICBiYXNlNjQ6IHsgdHlwZTogXCJfaW50ZXJuYWxcIiB9LFxuICAgIGhleDogICAgeyB0eXBlOiBcIl9pbnRlcm5hbFwiIH0sXG5cbiAgICAvLyBDb2RlYy5cbiAgICBfaW50ZXJuYWw6IEludGVybmFsQ29kZWMsXG59O1xuXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG5mdW5jdGlvbiBJbnRlcm5hbENvZGVjKGNvZGVjT3B0aW9ucywgaWNvbnYpIHtcbiAgICB0aGlzLmVuYyA9IGNvZGVjT3B0aW9ucy5lbmNvZGluZ05hbWU7XG4gICAgdGhpcy5ib21Bd2FyZSA9IGNvZGVjT3B0aW9ucy5ib21Bd2FyZTtcblxuICAgIGlmICh0aGlzLmVuYyA9PT0gXCJiYXNlNjRcIilcbiAgICAgICAgdGhpcy5lbmNvZGVyID0gSW50ZXJuYWxFbmNvZGVyQmFzZTY0O1xuICAgIGVsc2UgaWYgKHRoaXMuZW5jID09PSBcImNlc3U4XCIpIHtcbiAgICAgICAgdGhpcy5lbmMgPSBcInV0ZjhcIjsgLy8gVXNlIHV0ZjggZm9yIGRlY29kaW5nLlxuICAgICAgICB0aGlzLmVuY29kZXIgPSBJbnRlcm5hbEVuY29kZXJDZXN1ODtcblxuICAgICAgICAvLyBBZGQgZGVjb2RlciBmb3IgdmVyc2lvbnMgb2YgTm9kZSBub3Qgc3VwcG9ydGluZyBDRVNVLThcbiAgICAgICAgaWYgKEJ1ZmZlci5mcm9tKCdlZGEwYmRlZGIyYTknLCAnaGV4JykudG9TdHJpbmcoKSAhPT0gJ1x1RDgzRFx1RENBOScpIHtcbiAgICAgICAgICAgIHRoaXMuZGVjb2RlciA9IEludGVybmFsRGVjb2RlckNlc3U4O1xuICAgICAgICAgICAgdGhpcy5kZWZhdWx0Q2hhclVuaWNvZGUgPSBpY29udi5kZWZhdWx0Q2hhclVuaWNvZGU7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbkludGVybmFsQ29kZWMucHJvdG90eXBlLmVuY29kZXIgPSBJbnRlcm5hbEVuY29kZXI7XG5JbnRlcm5hbENvZGVjLnByb3RvdHlwZS5kZWNvZGVyID0gSW50ZXJuYWxEZWNvZGVyO1xuXG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuXG4vLyBXZSB1c2Ugbm9kZS5qcyBpbnRlcm5hbCBkZWNvZGVyLiBJdHMgc2lnbmF0dXJlIGlzIHRoZSBzYW1lIGFzIG91cnMuXG52YXIgU3RyaW5nRGVjb2RlciA9IHJlcXVpcmUoJ3N0cmluZ19kZWNvZGVyJykuU3RyaW5nRGVjb2RlcjtcblxuaWYgKCFTdHJpbmdEZWNvZGVyLnByb3RvdHlwZS5lbmQpIC8vIE5vZGUgdjAuOCBkb2Vzbid0IGhhdmUgdGhpcyBtZXRob2QuXG4gICAgU3RyaW5nRGVjb2Rlci5wcm90b3R5cGUuZW5kID0gZnVuY3Rpb24oKSB7fTtcblxuXG5mdW5jdGlvbiBJbnRlcm5hbERlY29kZXIob3B0aW9ucywgY29kZWMpIHtcbiAgICB0aGlzLmRlY29kZXIgPSBuZXcgU3RyaW5nRGVjb2Rlcihjb2RlYy5lbmMpO1xufVxuXG5JbnRlcm5hbERlY29kZXIucHJvdG90eXBlLndyaXRlID0gZnVuY3Rpb24oYnVmKSB7XG4gICAgaWYgKCFCdWZmZXIuaXNCdWZmZXIoYnVmKSkge1xuICAgICAgICBidWYgPSBCdWZmZXIuZnJvbShidWYpO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmRlY29kZXIud3JpdGUoYnVmKTtcbn1cblxuSW50ZXJuYWxEZWNvZGVyLnByb3RvdHlwZS5lbmQgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5kZWNvZGVyLmVuZCgpO1xufVxuXG5cbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBFbmNvZGVyIGlzIG1vc3RseSB0cml2aWFsXG5cbmZ1bmN0aW9uIEludGVybmFsRW5jb2RlcihvcHRpb25zLCBjb2RlYykge1xuICAgIHRoaXMuZW5jID0gY29kZWMuZW5jO1xufVxuXG5JbnRlcm5hbEVuY29kZXIucHJvdG90eXBlLndyaXRlID0gZnVuY3Rpb24oc3RyKSB7XG4gICAgcmV0dXJuIEJ1ZmZlci5mcm9tKHN0ciwgdGhpcy5lbmMpO1xufVxuXG5JbnRlcm5hbEVuY29kZXIucHJvdG90eXBlLmVuZCA9IGZ1bmN0aW9uKCkge1xufVxuXG5cbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBFeGNlcHQgYmFzZTY0IGVuY29kZXIsIHdoaWNoIG11c3Qga2VlcCBpdHMgc3RhdGUuXG5cbmZ1bmN0aW9uIEludGVybmFsRW5jb2RlckJhc2U2NChvcHRpb25zLCBjb2RlYykge1xuICAgIHRoaXMucHJldlN0ciA9ICcnO1xufVxuXG5JbnRlcm5hbEVuY29kZXJCYXNlNjQucHJvdG90eXBlLndyaXRlID0gZnVuY3Rpb24oc3RyKSB7XG4gICAgc3RyID0gdGhpcy5wcmV2U3RyICsgc3RyO1xuICAgIHZhciBjb21wbGV0ZVF1YWRzID0gc3RyLmxlbmd0aCAtIChzdHIubGVuZ3RoICUgNCk7XG4gICAgdGhpcy5wcmV2U3RyID0gc3RyLnNsaWNlKGNvbXBsZXRlUXVhZHMpO1xuICAgIHN0ciA9IHN0ci5zbGljZSgwLCBjb21wbGV0ZVF1YWRzKTtcblxuICAgIHJldHVybiBCdWZmZXIuZnJvbShzdHIsIFwiYmFzZTY0XCIpO1xufVxuXG5JbnRlcm5hbEVuY29kZXJCYXNlNjQucHJvdG90eXBlLmVuZCA9IGZ1bmN0aW9uKCkge1xuICAgIHJldHVybiBCdWZmZXIuZnJvbSh0aGlzLnByZXZTdHIsIFwiYmFzZTY0XCIpO1xufVxuXG5cbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBDRVNVLTggZW5jb2RlciBpcyBhbHNvIHNwZWNpYWwuXG5cbmZ1bmN0aW9uIEludGVybmFsRW5jb2RlckNlc3U4KG9wdGlvbnMsIGNvZGVjKSB7XG59XG5cbkludGVybmFsRW5jb2RlckNlc3U4LnByb3RvdHlwZS53cml0ZSA9IGZ1bmN0aW9uKHN0cikge1xuICAgIHZhciBidWYgPSBCdWZmZXIuYWxsb2Moc3RyLmxlbmd0aCAqIDMpLCBidWZJZHggPSAwO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc3RyLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBjaGFyQ29kZSA9IHN0ci5jaGFyQ29kZUF0KGkpO1xuICAgICAgICAvLyBOYWl2ZSBpbXBsZW1lbnRhdGlvbiwgYnV0IGl0IHdvcmtzIGJlY2F1c2UgQ0VTVS04IGlzIGVzcGVjaWFsbHkgZWFzeVxuICAgICAgICAvLyB0byBjb252ZXJ0IGZyb20gVVRGLTE2ICh3aGljaCBhbGwgSlMgc3RyaW5ncyBhcmUgZW5jb2RlZCBpbikuXG4gICAgICAgIGlmIChjaGFyQ29kZSA8IDB4ODApXG4gICAgICAgICAgICBidWZbYnVmSWR4KytdID0gY2hhckNvZGU7XG4gICAgICAgIGVsc2UgaWYgKGNoYXJDb2RlIDwgMHg4MDApIHtcbiAgICAgICAgICAgIGJ1ZltidWZJZHgrK10gPSAweEMwICsgKGNoYXJDb2RlID4+PiA2KTtcbiAgICAgICAgICAgIGJ1ZltidWZJZHgrK10gPSAweDgwICsgKGNoYXJDb2RlICYgMHgzZik7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7IC8vIGNoYXJDb2RlIHdpbGwgYWx3YXlzIGJlIDwgMHgxMDAwMCBpbiBqYXZhc2NyaXB0LlxuICAgICAgICAgICAgYnVmW2J1ZklkeCsrXSA9IDB4RTAgKyAoY2hhckNvZGUgPj4+IDEyKTtcbiAgICAgICAgICAgIGJ1ZltidWZJZHgrK10gPSAweDgwICsgKChjaGFyQ29kZSA+Pj4gNikgJiAweDNmKTtcbiAgICAgICAgICAgIGJ1ZltidWZJZHgrK10gPSAweDgwICsgKGNoYXJDb2RlICYgMHgzZik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGJ1Zi5zbGljZSgwLCBidWZJZHgpO1xufVxuXG5JbnRlcm5hbEVuY29kZXJDZXN1OC5wcm90b3R5cGUuZW5kID0gZnVuY3Rpb24oKSB7XG59XG5cbi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4vLyBDRVNVLTggZGVjb2RlciBpcyBub3QgaW1wbGVtZW50ZWQgaW4gTm9kZSB2NC4wK1xuXG5mdW5jdGlvbiBJbnRlcm5hbERlY29kZXJDZXN1OChvcHRpb25zLCBjb2RlYykge1xuICAgIHRoaXMuYWNjID0gMDtcbiAgICB0aGlzLmNvbnRCeXRlcyA9IDA7XG4gICAgdGhpcy5hY2NCeXRlcyA9IDA7XG4gICAgdGhpcy5kZWZhdWx0Q2hhclVuaWNvZGUgPSBjb2RlYy5kZWZhdWx0Q2hhclVuaWNvZGU7XG59XG5cbkludGVybmFsRGVjb2RlckNlc3U4LnByb3RvdHlwZS53cml0ZSA9IGZ1bmN0aW9uKGJ1Zikge1xuICAgIHZhciBhY2MgPSB0aGlzLmFjYywgY29udEJ5dGVzID0gdGhpcy5jb250Qnl0ZXMsIGFjY0J5dGVzID0gdGhpcy5hY2NCeXRlcywgXG4gICAgICAgIHJlcyA9ICcnO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYnVmLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBjdXJCeXRlID0gYnVmW2ldO1xuICAgICAgICBpZiAoKGN1ckJ5dGUgJiAweEMwKSAhPT0gMHg4MCkgeyAvLyBMZWFkaW5nIGJ5dGVcbiAgICAgICAgICAgIGlmIChjb250Qnl0ZXMgPiAwKSB7IC8vIFByZXZpb3VzIGNvZGUgaXMgaW52YWxpZFxuICAgICAgICAgICAgICAgIHJlcyArPSB0aGlzLmRlZmF1bHRDaGFyVW5pY29kZTtcbiAgICAgICAgICAgICAgICBjb250Qnl0ZXMgPSAwO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoY3VyQnl0ZSA8IDB4ODApIHsgLy8gU2luZ2xlLWJ5dGUgY29kZVxuICAgICAgICAgICAgICAgIHJlcyArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGN1ckJ5dGUpO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChjdXJCeXRlIDwgMHhFMCkgeyAvLyBUd28tYnl0ZSBjb2RlXG4gICAgICAgICAgICAgICAgYWNjID0gY3VyQnl0ZSAmIDB4MUY7XG4gICAgICAgICAgICAgICAgY29udEJ5dGVzID0gMTsgYWNjQnl0ZXMgPSAxO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChjdXJCeXRlIDwgMHhGMCkgeyAvLyBUaHJlZS1ieXRlIGNvZGVcbiAgICAgICAgICAgICAgICBhY2MgPSBjdXJCeXRlICYgMHgwRjtcbiAgICAgICAgICAgICAgICBjb250Qnl0ZXMgPSAyOyBhY2NCeXRlcyA9IDE7XG4gICAgICAgICAgICB9IGVsc2UgeyAvLyBGb3VyIG9yIG1vcmUgYXJlIG5vdCBzdXBwb3J0ZWQgZm9yIENFU1UtOC5cbiAgICAgICAgICAgICAgICByZXMgKz0gdGhpcy5kZWZhdWx0Q2hhclVuaWNvZGU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7IC8vIENvbnRpbnVhdGlvbiBieXRlXG4gICAgICAgICAgICBpZiAoY29udEJ5dGVzID4gMCkgeyAvLyBXZSdyZSB3YWl0aW5nIGZvciBpdC5cbiAgICAgICAgICAgICAgICBhY2MgPSAoYWNjIDw8IDYpIHwgKGN1ckJ5dGUgJiAweDNmKTtcbiAgICAgICAgICAgICAgICBjb250Qnl0ZXMtLTsgYWNjQnl0ZXMrKztcbiAgICAgICAgICAgICAgICBpZiAoY29udEJ5dGVzID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIENoZWNrIGZvciBvdmVybG9uZyBlbmNvZGluZywgYnV0IHN1cHBvcnQgTW9kaWZpZWQgVVRGLTggKGVuY29kaW5nIE5VTEwgYXMgQzAgODApXG4gICAgICAgICAgICAgICAgICAgIGlmIChhY2NCeXRlcyA9PT0gMiAmJiBhY2MgPCAweDgwICYmIGFjYyA+IDApXG4gICAgICAgICAgICAgICAgICAgICAgICByZXMgKz0gdGhpcy5kZWZhdWx0Q2hhclVuaWNvZGU7XG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGFjY0J5dGVzID09PSAzICYmIGFjYyA8IDB4ODAwKVxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzICs9IHRoaXMuZGVmYXVsdENoYXJVbmljb2RlO1xuICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBBY3R1YWxseSBhZGQgY2hhcmFjdGVyLlxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoYWNjKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgeyAvLyBVbmV4cGVjdGVkIGNvbnRpbnVhdGlvbiBieXRlXG4gICAgICAgICAgICAgICAgcmVzICs9IHRoaXMuZGVmYXVsdENoYXJVbmljb2RlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuICAgIHRoaXMuYWNjID0gYWNjOyB0aGlzLmNvbnRCeXRlcyA9IGNvbnRCeXRlczsgdGhpcy5hY2NCeXRlcyA9IGFjY0J5dGVzO1xuICAgIHJldHVybiByZXM7XG59XG5cbkludGVybmFsRGVjb2RlckNlc3U4LnByb3RvdHlwZS5lbmQgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgcmVzID0gMDtcbiAgICBpZiAodGhpcy5jb250Qnl0ZXMgPiAwKVxuICAgICAgICByZXMgKz0gdGhpcy5kZWZhdWx0Q2hhclVuaWNvZGU7XG4gICAgcmV0dXJuIHJlcztcbn1cbiIsICIndXNlIHN0cmljdCc7XG5cbnZhciBCdWZmZXIgPSByZXF1aXJlKCdzYWZlci1idWZmZXInKS5CdWZmZXI7XG5cbi8vID09IFVURjMyLUxFL0JFIGNvZGVjLiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbmV4cG9ydHMuX3V0ZjMyID0gVXRmMzJDb2RlYztcblxuZnVuY3Rpb24gVXRmMzJDb2RlYyhjb2RlY09wdGlvbnMsIGljb252KSB7XG4gICAgdGhpcy5pY29udiA9IGljb252O1xuICAgIHRoaXMuYm9tQXdhcmUgPSB0cnVlO1xuICAgIHRoaXMuaXNMRSA9IGNvZGVjT3B0aW9ucy5pc0xFO1xufVxuXG5leHBvcnRzLnV0ZjMybGUgPSB7IHR5cGU6ICdfdXRmMzInLCBpc0xFOiB0cnVlIH07XG5leHBvcnRzLnV0ZjMyYmUgPSB7IHR5cGU6ICdfdXRmMzInLCBpc0xFOiBmYWxzZSB9O1xuXG4vLyBBbGlhc2VzXG5leHBvcnRzLnVjczRsZSA9ICd1dGYzMmxlJztcbmV4cG9ydHMudWNzNGJlID0gJ3V0ZjMyYmUnO1xuXG5VdGYzMkNvZGVjLnByb3RvdHlwZS5lbmNvZGVyID0gVXRmMzJFbmNvZGVyO1xuVXRmMzJDb2RlYy5wcm90b3R5cGUuZGVjb2RlciA9IFV0ZjMyRGVjb2RlcjtcblxuLy8gLS0gRW5jb2RpbmdcblxuZnVuY3Rpb24gVXRmMzJFbmNvZGVyKG9wdGlvbnMsIGNvZGVjKSB7XG4gICAgdGhpcy5pc0xFID0gY29kZWMuaXNMRTtcbiAgICB0aGlzLmhpZ2hTdXJyb2dhdGUgPSAwO1xufVxuXG5VdGYzMkVuY29kZXIucHJvdG90eXBlLndyaXRlID0gZnVuY3Rpb24oc3RyKSB7XG4gICAgdmFyIHNyYyA9IEJ1ZmZlci5mcm9tKHN0ciwgJ3VjczInKTtcbiAgICB2YXIgZHN0ID0gQnVmZmVyLmFsbG9jKHNyYy5sZW5ndGggKiAyKTtcbiAgICB2YXIgd3JpdGUzMiA9IHRoaXMuaXNMRSA/IGRzdC53cml0ZVVJbnQzMkxFIDogZHN0LndyaXRlVUludDMyQkU7XG4gICAgdmFyIG9mZnNldCA9IDA7XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNyYy5sZW5ndGg7IGkgKz0gMikge1xuICAgICAgICB2YXIgY29kZSA9IHNyYy5yZWFkVUludDE2TEUoaSk7XG4gICAgICAgIHZhciBpc0hpZ2hTdXJyb2dhdGUgPSAoMHhEODAwIDw9IGNvZGUgJiYgY29kZSA8IDB4REMwMCk7XG4gICAgICAgIHZhciBpc0xvd1N1cnJvZ2F0ZSA9ICgweERDMDAgPD0gY29kZSAmJiBjb2RlIDwgMHhFMDAwKTtcblxuICAgICAgICBpZiAodGhpcy5oaWdoU3Vycm9nYXRlKSB7XG4gICAgICAgICAgICBpZiAoaXNIaWdoU3Vycm9nYXRlIHx8ICFpc0xvd1N1cnJvZ2F0ZSkge1xuICAgICAgICAgICAgICAgIC8vIFRoZXJlIHNob3VsZG4ndCBiZSB0d28gaGlnaCBzdXJyb2dhdGVzIGluIGEgcm93LCBub3IgYSBoaWdoIHN1cnJvZ2F0ZSB3aGljaCBpc24ndCBmb2xsb3dlZCBieSBhIGxvd1xuICAgICAgICAgICAgICAgIC8vIHN1cnJvZ2F0ZS4gSWYgdGhpcyBoYXBwZW5zLCBrZWVwIHRoZSBwZW5kaW5nIGhpZ2ggc3Vycm9nYXRlIGFzIGEgc3RhbmQtYWxvbmUgc2VtaS1pbnZhbGlkIGNoYXJhY3RlclxuICAgICAgICAgICAgICAgIC8vICh0ZWNobmljYWxseSB3cm9uZywgYnV0IGV4cGVjdGVkIGJ5IHNvbWUgYXBwbGljYXRpb25zLCBsaWtlIFdpbmRvd3MgZmlsZSBuYW1lcykuXG4gICAgICAgICAgICAgICAgd3JpdGUzMi5jYWxsKGRzdCwgdGhpcy5oaWdoU3Vycm9nYXRlLCBvZmZzZXQpO1xuICAgICAgICAgICAgICAgIG9mZnNldCArPSA0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gQ3JlYXRlIDMyLWJpdCB2YWx1ZSBmcm9tIGhpZ2ggYW5kIGxvdyBzdXJyb2dhdGVzO1xuICAgICAgICAgICAgICAgIHZhciBjb2RlcG9pbnQgPSAoKCh0aGlzLmhpZ2hTdXJyb2dhdGUgLSAweEQ4MDApIDw8IDEwKSB8IChjb2RlIC0gMHhEQzAwKSkgKyAweDEwMDAwO1xuXG4gICAgICAgICAgICAgICAgd3JpdGUzMi5jYWxsKGRzdCwgY29kZXBvaW50LCBvZmZzZXQpO1xuICAgICAgICAgICAgICAgIG9mZnNldCArPSA0O1xuICAgICAgICAgICAgICAgIHRoaXMuaGlnaFN1cnJvZ2F0ZSA9IDA7XG5cbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpc0hpZ2hTdXJyb2dhdGUpXG4gICAgICAgICAgICB0aGlzLmhpZ2hTdXJyb2dhdGUgPSBjb2RlO1xuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIC8vIEV2ZW4gaWYgdGhlIGN1cnJlbnQgY2hhcmFjdGVyIGlzIGEgbG93IHN1cnJvZ2F0ZSwgd2l0aCBubyBwcmV2aW91cyBoaWdoIHN1cnJvZ2F0ZSwgd2UnbGxcbiAgICAgICAgICAgIC8vIGVuY29kZSBpdCBhcyBhIHNlbWktaW52YWxpZCBzdGFuZC1hbG9uZSBjaGFyYWN0ZXIgZm9yIHRoZSBzYW1lIHJlYXNvbnMgZXhwcmVzc2VkIGFib3ZlIGZvclxuICAgICAgICAgICAgLy8gdW5wYWlyZWQgaGlnaCBzdXJyb2dhdGVzLlxuICAgICAgICAgICAgd3JpdGUzMi5jYWxsKGRzdCwgY29kZSwgb2Zmc2V0KTtcbiAgICAgICAgICAgIG9mZnNldCArPSA0O1xuICAgICAgICAgICAgdGhpcy5oaWdoU3Vycm9nYXRlID0gMDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlmIChvZmZzZXQgPCBkc3QubGVuZ3RoKVxuICAgICAgICBkc3QgPSBkc3Quc2xpY2UoMCwgb2Zmc2V0KTtcblxuICAgIHJldHVybiBkc3Q7XG59O1xuXG5VdGYzMkVuY29kZXIucHJvdG90eXBlLmVuZCA9IGZ1bmN0aW9uKCkge1xuICAgIC8vIFRyZWF0IGFueSBsZWZ0b3ZlciBoaWdoIHN1cnJvZ2F0ZSBhcyBhIHNlbWktdmFsaWQgaW5kZXBlbmRlbnQgY2hhcmFjdGVyLlxuICAgIGlmICghdGhpcy5oaWdoU3Vycm9nYXRlKVxuICAgICAgICByZXR1cm47XG5cbiAgICB2YXIgYnVmID0gQnVmZmVyLmFsbG9jKDQpO1xuXG4gICAgaWYgKHRoaXMuaXNMRSlcbiAgICAgICAgYnVmLndyaXRlVUludDMyTEUodGhpcy5oaWdoU3Vycm9nYXRlLCAwKTtcbiAgICBlbHNlXG4gICAgICAgIGJ1Zi53cml0ZVVJbnQzMkJFKHRoaXMuaGlnaFN1cnJvZ2F0ZSwgMCk7XG5cbiAgICB0aGlzLmhpZ2hTdXJyb2dhdGUgPSAwO1xuXG4gICAgcmV0dXJuIGJ1Zjtcbn07XG5cbi8vIC0tIERlY29kaW5nXG5cbmZ1bmN0aW9uIFV0ZjMyRGVjb2RlcihvcHRpb25zLCBjb2RlYykge1xuICAgIHRoaXMuaXNMRSA9IGNvZGVjLmlzTEU7XG4gICAgdGhpcy5iYWRDaGFyID0gY29kZWMuaWNvbnYuZGVmYXVsdENoYXJVbmljb2RlLmNoYXJDb2RlQXQoMCk7XG4gICAgdGhpcy5vdmVyZmxvdyA9IFtdO1xufVxuXG5VdGYzMkRlY29kZXIucHJvdG90eXBlLndyaXRlID0gZnVuY3Rpb24oc3JjKSB7XG4gICAgaWYgKHNyYy5sZW5ndGggPT09IDApXG4gICAgICAgIHJldHVybiAnJztcblxuICAgIHZhciBpID0gMDtcbiAgICB2YXIgY29kZXBvaW50ID0gMDtcbiAgICB2YXIgZHN0ID0gQnVmZmVyLmFsbG9jKHNyYy5sZW5ndGggKyA0KTtcbiAgICB2YXIgb2Zmc2V0ID0gMDtcbiAgICB2YXIgaXNMRSA9IHRoaXMuaXNMRTtcbiAgICB2YXIgb3ZlcmZsb3cgPSB0aGlzLm92ZXJmbG93O1xuICAgIHZhciBiYWRDaGFyID0gdGhpcy5iYWRDaGFyO1xuXG4gICAgaWYgKG92ZXJmbG93Lmxlbmd0aCA+IDApIHtcbiAgICAgICAgZm9yICg7IGkgPCBzcmMubGVuZ3RoICYmIG92ZXJmbG93Lmxlbmd0aCA8IDQ7IGkrKylcbiAgICAgICAgICAgIG92ZXJmbG93LnB1c2goc3JjW2ldKTtcbiAgICAgICAgXG4gICAgICAgIGlmIChvdmVyZmxvdy5sZW5ndGggPT09IDQpIHtcbiAgICAgICAgICAgIC8vIE5PVEU6IGNvZGVwb2ludCBpcyBhIHNpZ25lZCBpbnQzMiBhbmQgY2FuIGJlIG5lZ2F0aXZlLlxuICAgICAgICAgICAgLy8gTk9URTogV2UgY29waWVkIHRoaXMgYmxvY2sgZnJvbSBiZWxvdyB0byBoZWxwIFY4IG9wdGltaXplIGl0IChpdCB3b3JrcyB3aXRoIGFycmF5LCBub3QgYnVmZmVyKS5cbiAgICAgICAgICAgIGlmIChpc0xFKSB7XG4gICAgICAgICAgICAgICAgY29kZXBvaW50ID0gb3ZlcmZsb3dbaV0gfCAob3ZlcmZsb3dbaSsxXSA8PCA4KSB8IChvdmVyZmxvd1tpKzJdIDw8IDE2KSB8IChvdmVyZmxvd1tpKzNdIDw8IDI0KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgY29kZXBvaW50ID0gb3ZlcmZsb3dbaSszXSB8IChvdmVyZmxvd1tpKzJdIDw8IDgpIHwgKG92ZXJmbG93W2krMV0gPDwgMTYpIHwgKG92ZXJmbG93W2ldIDw8IDI0KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG92ZXJmbG93Lmxlbmd0aCA9IDA7XG5cbiAgICAgICAgICAgIG9mZnNldCA9IF93cml0ZUNvZGVwb2ludChkc3QsIG9mZnNldCwgY29kZXBvaW50LCBiYWRDaGFyKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIE1haW4gbG9vcC4gU2hvdWxkIGJlIGFzIG9wdGltaXplZCBhcyBwb3NzaWJsZS5cbiAgICBmb3IgKDsgaSA8IHNyYy5sZW5ndGggLSAzOyBpICs9IDQpIHtcbiAgICAgICAgLy8gTk9URTogY29kZXBvaW50IGlzIGEgc2lnbmVkIGludDMyIGFuZCBjYW4gYmUgbmVnYXRpdmUuXG4gICAgICAgIGlmIChpc0xFKSB7XG4gICAgICAgICAgICBjb2RlcG9pbnQgPSBzcmNbaV0gfCAoc3JjW2krMV0gPDwgOCkgfCAoc3JjW2krMl0gPDwgMTYpIHwgKHNyY1tpKzNdIDw8IDI0KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvZGVwb2ludCA9IHNyY1tpKzNdIHwgKHNyY1tpKzJdIDw8IDgpIHwgKHNyY1tpKzFdIDw8IDE2KSB8IChzcmNbaV0gPDwgMjQpO1xuICAgICAgICB9XG4gICAgICAgIG9mZnNldCA9IF93cml0ZUNvZGVwb2ludChkc3QsIG9mZnNldCwgY29kZXBvaW50LCBiYWRDaGFyKTtcbiAgICB9XG5cbiAgICAvLyBLZWVwIG92ZXJmbG93aW5nIGJ5dGVzLlxuICAgIGZvciAoOyBpIDwgc3JjLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIG92ZXJmbG93LnB1c2goc3JjW2ldKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZHN0LnNsaWNlKDAsIG9mZnNldCkudG9TdHJpbmcoJ3VjczInKTtcbn07XG5cbmZ1bmN0aW9uIF93cml0ZUNvZGVwb2ludChkc3QsIG9mZnNldCwgY29kZXBvaW50LCBiYWRDaGFyKSB7XG4gICAgLy8gTk9URTogY29kZXBvaW50IGlzIHNpZ25lZCBpbnQzMiBhbmQgY2FuIGJlIG5lZ2F0aXZlLiBXZSBrZWVwIGl0IHRoYXQgd2F5IHRvIGhlbHAgVjggd2l0aCBvcHRpbWl6YXRpb25zLlxuICAgIGlmIChjb2RlcG9pbnQgPCAwIHx8IGNvZGVwb2ludCA+IDB4MTBGRkZGKSB7XG4gICAgICAgIC8vIE5vdCBhIHZhbGlkIFVuaWNvZGUgY29kZXBvaW50XG4gICAgICAgIGNvZGVwb2ludCA9IGJhZENoYXI7XG4gICAgfSBcblxuICAgIC8vIEVwaGVtZXJhbCBQbGFuZXM6IFdyaXRlIGhpZ2ggc3Vycm9nYXRlLlxuICAgIGlmIChjb2RlcG9pbnQgPj0gMHgxMDAwMCkge1xuICAgICAgICBjb2RlcG9pbnQgLT0gMHgxMDAwMDtcblxuICAgICAgICB2YXIgaGlnaCA9IDB4RDgwMCB8IChjb2RlcG9pbnQgPj4gMTApO1xuICAgICAgICBkc3Rbb2Zmc2V0KytdID0gaGlnaCAmIDB4ZmY7XG4gICAgICAgIGRzdFtvZmZzZXQrK10gPSBoaWdoID4+IDg7XG5cbiAgICAgICAgLy8gTG93IHN1cnJvZ2F0ZSBpcyB3cml0dGVuIGJlbG93LlxuICAgICAgICB2YXIgY29kZXBvaW50ID0gMHhEQzAwIHwgKGNvZGVwb2ludCAmIDB4M0ZGKTtcbiAgICB9XG5cbiAgICAvLyBXcml0ZSBCTVAgY2hhciBvciBsb3cgc3Vycm9nYXRlLlxuICAgIGRzdFtvZmZzZXQrK10gPSBjb2RlcG9pbnQgJiAweGZmO1xuICAgIGRzdFtvZmZzZXQrK10gPSBjb2RlcG9pbnQgPj4gODtcblxuICAgIHJldHVybiBvZmZzZXQ7XG59O1xuXG5VdGYzMkRlY29kZXIucHJvdG90eXBlLmVuZCA9IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMub3ZlcmZsb3cubGVuZ3RoID0gMDtcbn07XG5cbi8vID09IFVURi0zMiBBdXRvIGNvZGVjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIERlY29kZXIgY2hvb3NlcyBhdXRvbWF0aWNhbGx5IGZyb20gVVRGLTMyTEUgYW5kIFVURi0zMkJFIHVzaW5nIEJPTSBhbmQgc3BhY2UtYmFzZWQgaGV1cmlzdGljLlxuLy8gRGVmYXVsdHMgdG8gVVRGLTMyTEUuIGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvVVRGLTMyXG4vLyBFbmNvZGVyL2RlY29kZXIgZGVmYXVsdCBjYW4gYmUgY2hhbmdlZDogaWNvbnYuZGVjb2RlKGJ1ZiwgJ3V0ZjMyJywge2RlZmF1bHRFbmNvZGluZzogJ3V0Zi0zMmJlJ30pO1xuXG4vLyBFbmNvZGVyIHByZXBlbmRzIEJPTSAod2hpY2ggY2FuIGJlIG92ZXJyaWRkZW4gd2l0aCAoYWRkQk9NOiBmYWxzZX0pLlxuXG5leHBvcnRzLnV0ZjMyID0gVXRmMzJBdXRvQ29kZWM7XG5leHBvcnRzLnVjczQgPSAndXRmMzInO1xuXG5mdW5jdGlvbiBVdGYzMkF1dG9Db2RlYyhvcHRpb25zLCBpY29udikge1xuICAgIHRoaXMuaWNvbnYgPSBpY29udjtcbn1cblxuVXRmMzJBdXRvQ29kZWMucHJvdG90eXBlLmVuY29kZXIgPSBVdGYzMkF1dG9FbmNvZGVyO1xuVXRmMzJBdXRvQ29kZWMucHJvdG90eXBlLmRlY29kZXIgPSBVdGYzMkF1dG9EZWNvZGVyO1xuXG4vLyAtLSBFbmNvZGluZ1xuXG5mdW5jdGlvbiBVdGYzMkF1dG9FbmNvZGVyKG9wdGlvbnMsIGNvZGVjKSB7XG4gICAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cbiAgICBpZiAob3B0aW9ucy5hZGRCT00gPT09IHVuZGVmaW5lZClcbiAgICAgICAgb3B0aW9ucy5hZGRCT00gPSB0cnVlO1xuXG4gICAgdGhpcy5lbmNvZGVyID0gY29kZWMuaWNvbnYuZ2V0RW5jb2RlcihvcHRpb25zLmRlZmF1bHRFbmNvZGluZyB8fCAndXRmLTMybGUnLCBvcHRpb25zKTtcbn1cblxuVXRmMzJBdXRvRW5jb2Rlci5wcm90b3R5cGUud3JpdGUgPSBmdW5jdGlvbihzdHIpIHtcbiAgICByZXR1cm4gdGhpcy5lbmNvZGVyLndyaXRlKHN0cik7XG59O1xuXG5VdGYzMkF1dG9FbmNvZGVyLnByb3RvdHlwZS5lbmQgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5lbmNvZGVyLmVuZCgpO1xufTtcblxuLy8gLS0gRGVjb2RpbmdcblxuZnVuY3Rpb24gVXRmMzJBdXRvRGVjb2RlcihvcHRpb25zLCBjb2RlYykge1xuICAgIHRoaXMuZGVjb2RlciA9IG51bGw7XG4gICAgdGhpcy5pbml0aWFsQnVmcyA9IFtdO1xuICAgIHRoaXMuaW5pdGlhbEJ1ZnNMZW4gPSAwO1xuICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gICAgdGhpcy5pY29udiA9IGNvZGVjLmljb252O1xufVxuXG5VdGYzMkF1dG9EZWNvZGVyLnByb3RvdHlwZS53cml0ZSA9IGZ1bmN0aW9uKGJ1Zikge1xuICAgIGlmICghdGhpcy5kZWNvZGVyKSB7IFxuICAgICAgICAvLyBDb2RlYyBpcyBub3QgY2hvc2VuIHlldC4gQWNjdW11bGF0ZSBpbml0aWFsIGJ5dGVzLlxuICAgICAgICB0aGlzLmluaXRpYWxCdWZzLnB1c2goYnVmKTtcbiAgICAgICAgdGhpcy5pbml0aWFsQnVmc0xlbiArPSBidWYubGVuZ3RoO1xuXG4gICAgICAgIGlmICh0aGlzLmluaXRpYWxCdWZzTGVuIDwgMzIpIC8vIFdlIG5lZWQgbW9yZSBieXRlcyB0byB1c2Ugc3BhY2UgaGV1cmlzdGljIChzZWUgYmVsb3cpXG4gICAgICAgICAgICByZXR1cm4gJyc7XG5cbiAgICAgICAgLy8gV2UgaGF2ZSBlbm91Z2ggYnl0ZXMgLT4gZGV0ZWN0IGVuZGlhbm5lc3MuXG4gICAgICAgIHZhciBlbmNvZGluZyA9IGRldGVjdEVuY29kaW5nKHRoaXMuaW5pdGlhbEJ1ZnMsIHRoaXMub3B0aW9ucy5kZWZhdWx0RW5jb2RpbmcpO1xuICAgICAgICB0aGlzLmRlY29kZXIgPSB0aGlzLmljb252LmdldERlY29kZXIoZW5jb2RpbmcsIHRoaXMub3B0aW9ucyk7XG5cbiAgICAgICAgdmFyIHJlc1N0ciA9ICcnO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuaW5pdGlhbEJ1ZnMubGVuZ3RoOyBpKyspXG4gICAgICAgICAgICByZXNTdHIgKz0gdGhpcy5kZWNvZGVyLndyaXRlKHRoaXMuaW5pdGlhbEJ1ZnNbaV0pO1xuXG4gICAgICAgIHRoaXMuaW5pdGlhbEJ1ZnMubGVuZ3RoID0gdGhpcy5pbml0aWFsQnVmc0xlbiA9IDA7XG4gICAgICAgIHJldHVybiByZXNTdHI7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuZGVjb2Rlci53cml0ZShidWYpO1xufTtcblxuVXRmMzJBdXRvRGVjb2Rlci5wcm90b3R5cGUuZW5kID0gZnVuY3Rpb24oKSB7XG4gICAgaWYgKCF0aGlzLmRlY29kZXIpIHtcbiAgICAgICAgdmFyIGVuY29kaW5nID0gZGV0ZWN0RW5jb2RpbmcodGhpcy5pbml0aWFsQnVmcywgdGhpcy5vcHRpb25zLmRlZmF1bHRFbmNvZGluZyk7XG4gICAgICAgIHRoaXMuZGVjb2RlciA9IHRoaXMuaWNvbnYuZ2V0RGVjb2RlcihlbmNvZGluZywgdGhpcy5vcHRpb25zKTtcblxuICAgICAgICB2YXIgcmVzU3RyID0gJyc7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5pbml0aWFsQnVmcy5sZW5ndGg7IGkrKylcbiAgICAgICAgICAgIHJlc1N0ciArPSB0aGlzLmRlY29kZXIud3JpdGUodGhpcy5pbml0aWFsQnVmc1tpXSk7XG5cbiAgICAgICAgdmFyIHRyYWlsID0gdGhpcy5kZWNvZGVyLmVuZCgpO1xuICAgICAgICBpZiAodHJhaWwpXG4gICAgICAgICAgICByZXNTdHIgKz0gdHJhaWw7XG5cbiAgICAgICAgdGhpcy5pbml0aWFsQnVmcy5sZW5ndGggPSB0aGlzLmluaXRpYWxCdWZzTGVuID0gMDtcbiAgICAgICAgcmV0dXJuIHJlc1N0cjtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5kZWNvZGVyLmVuZCgpO1xufTtcblxuZnVuY3Rpb24gZGV0ZWN0RW5jb2RpbmcoYnVmcywgZGVmYXVsdEVuY29kaW5nKSB7XG4gICAgdmFyIGIgPSBbXTtcbiAgICB2YXIgY2hhcnNQcm9jZXNzZWQgPSAwO1xuICAgIHZhciBpbnZhbGlkTEUgPSAwLCBpbnZhbGlkQkUgPSAwOyAgIC8vIE51bWJlciBvZiBpbnZhbGlkIGNoYXJzIHdoZW4gZGVjb2RlZCBhcyBMRSBvciBCRS5cbiAgICB2YXIgYm1wQ2hhcnNMRSA9IDAsIGJtcENoYXJzQkUgPSAwOyAvLyBOdW1iZXIgb2YgQk1QIGNoYXJzIHdoZW4gZGVjb2RlZCBhcyBMRSBvciBCRS5cblxuICAgIG91dGVyX2xvb3A6XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBidWZzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBidWYgPSBidWZzW2ldO1xuICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGJ1Zi5sZW5ndGg7IGorKykge1xuICAgICAgICAgICAgYi5wdXNoKGJ1ZltqXSk7XG4gICAgICAgICAgICBpZiAoYi5sZW5ndGggPT09IDQpIHtcbiAgICAgICAgICAgICAgICBpZiAoY2hhcnNQcm9jZXNzZWQgPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gQ2hlY2sgQk9NIGZpcnN0LlxuICAgICAgICAgICAgICAgICAgICBpZiAoYlswXSA9PT0gMHhGRiAmJiBiWzFdID09PSAweEZFICYmIGJbMl0gPT09IDAgJiYgYlszXSA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICd1dGYtMzJsZSc7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgaWYgKGJbMF0gPT09IDAgJiYgYlsxXSA9PT0gMCAmJiBiWzJdID09PSAweEZFICYmIGJbM10gPT09IDB4RkYpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAndXRmLTMyYmUnO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKGJbMF0gIT09IDAgfHwgYlsxXSA+IDB4MTApIGludmFsaWRCRSsrO1xuICAgICAgICAgICAgICAgIGlmIChiWzNdICE9PSAwIHx8IGJbMl0gPiAweDEwKSBpbnZhbGlkTEUrKztcblxuICAgICAgICAgICAgICAgIGlmIChiWzBdID09PSAwICYmIGJbMV0gPT09IDAgJiYgKGJbMl0gIT09IDAgfHwgYlszXSAhPT0gMCkpIGJtcENoYXJzQkUrKztcbiAgICAgICAgICAgICAgICBpZiAoKGJbMF0gIT09IDAgfHwgYlsxXSAhPT0gMCkgJiYgYlsyXSA9PT0gMCAmJiBiWzNdID09PSAwKSBibXBDaGFyc0xFKys7XG5cbiAgICAgICAgICAgICAgICBiLmxlbmd0aCA9IDA7XG4gICAgICAgICAgICAgICAgY2hhcnNQcm9jZXNzZWQrKztcblxuICAgICAgICAgICAgICAgIGlmIChjaGFyc1Byb2Nlc3NlZCA+PSAxMDApIHtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWsgb3V0ZXJfbG9vcDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBNYWtlIGRlY2lzaW9ucy5cbiAgICBpZiAoYm1wQ2hhcnNCRSAtIGludmFsaWRCRSA+IGJtcENoYXJzTEUgLSBpbnZhbGlkTEUpICByZXR1cm4gJ3V0Zi0zMmJlJztcbiAgICBpZiAoYm1wQ2hhcnNCRSAtIGludmFsaWRCRSA8IGJtcENoYXJzTEUgLSBpbnZhbGlkTEUpICByZXR1cm4gJ3V0Zi0zMmxlJztcblxuICAgIC8vIENvdWxkbid0IGRlY2lkZSAobGlrZWx5IGFsbCB6ZXJvcyBvciBub3QgZW5vdWdoIGRhdGEpLlxuICAgIHJldHVybiBkZWZhdWx0RW5jb2RpbmcgfHwgJ3V0Zi0zMmxlJztcbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcbnZhciBCdWZmZXIgPSByZXF1aXJlKFwic2FmZXItYnVmZmVyXCIpLkJ1ZmZlcjtcblxuLy8gTm90ZTogVVRGMTYtTEUgKG9yIFVDUzIpIGNvZGVjIGlzIE5vZGUuanMgbmF0aXZlLiBTZWUgZW5jb2RpbmdzL2ludGVybmFsLmpzXG5cbi8vID09IFVURjE2LUJFIGNvZGVjLiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbmV4cG9ydHMudXRmMTZiZSA9IFV0ZjE2QkVDb2RlYztcbmZ1bmN0aW9uIFV0ZjE2QkVDb2RlYygpIHtcbn1cblxuVXRmMTZCRUNvZGVjLnByb3RvdHlwZS5lbmNvZGVyID0gVXRmMTZCRUVuY29kZXI7XG5VdGYxNkJFQ29kZWMucHJvdG90eXBlLmRlY29kZXIgPSBVdGYxNkJFRGVjb2RlcjtcblV0ZjE2QkVDb2RlYy5wcm90b3R5cGUuYm9tQXdhcmUgPSB0cnVlO1xuXG5cbi8vIC0tIEVuY29kaW5nXG5cbmZ1bmN0aW9uIFV0ZjE2QkVFbmNvZGVyKCkge1xufVxuXG5VdGYxNkJFRW5jb2Rlci5wcm90b3R5cGUud3JpdGUgPSBmdW5jdGlvbihzdHIpIHtcbiAgICB2YXIgYnVmID0gQnVmZmVyLmZyb20oc3RyLCAndWNzMicpO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYnVmLmxlbmd0aDsgaSArPSAyKSB7XG4gICAgICAgIHZhciB0bXAgPSBidWZbaV07IGJ1ZltpXSA9IGJ1ZltpKzFdOyBidWZbaSsxXSA9IHRtcDtcbiAgICB9XG4gICAgcmV0dXJuIGJ1Zjtcbn1cblxuVXRmMTZCRUVuY29kZXIucHJvdG90eXBlLmVuZCA9IGZ1bmN0aW9uKCkge1xufVxuXG5cbi8vIC0tIERlY29kaW5nXG5cbmZ1bmN0aW9uIFV0ZjE2QkVEZWNvZGVyKCkge1xuICAgIHRoaXMub3ZlcmZsb3dCeXRlID0gLTE7XG59XG5cblV0ZjE2QkVEZWNvZGVyLnByb3RvdHlwZS53cml0ZSA9IGZ1bmN0aW9uKGJ1Zikge1xuICAgIGlmIChidWYubGVuZ3RoID09IDApXG4gICAgICAgIHJldHVybiAnJztcblxuICAgIHZhciBidWYyID0gQnVmZmVyLmFsbG9jKGJ1Zi5sZW5ndGggKyAxKSxcbiAgICAgICAgaSA9IDAsIGogPSAwO1xuXG4gICAgaWYgKHRoaXMub3ZlcmZsb3dCeXRlICE9PSAtMSkge1xuICAgICAgICBidWYyWzBdID0gYnVmWzBdO1xuICAgICAgICBidWYyWzFdID0gdGhpcy5vdmVyZmxvd0J5dGU7XG4gICAgICAgIGkgPSAxOyBqID0gMjtcbiAgICB9XG5cbiAgICBmb3IgKDsgaSA8IGJ1Zi5sZW5ndGgtMTsgaSArPSAyLCBqKz0gMikge1xuICAgICAgICBidWYyW2pdID0gYnVmW2krMV07XG4gICAgICAgIGJ1ZjJbaisxXSA9IGJ1ZltpXTtcbiAgICB9XG5cbiAgICB0aGlzLm92ZXJmbG93Qnl0ZSA9IChpID09IGJ1Zi5sZW5ndGgtMSkgPyBidWZbYnVmLmxlbmd0aC0xXSA6IC0xO1xuXG4gICAgcmV0dXJuIGJ1ZjIuc2xpY2UoMCwgaikudG9TdHJpbmcoJ3VjczInKTtcbn1cblxuVXRmMTZCRURlY29kZXIucHJvdG90eXBlLmVuZCA9IGZ1bmN0aW9uKCkge1xuICAgIHRoaXMub3ZlcmZsb3dCeXRlID0gLTE7XG59XG5cblxuLy8gPT0gVVRGLTE2IGNvZGVjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIERlY29kZXIgY2hvb3NlcyBhdXRvbWF0aWNhbGx5IGZyb20gVVRGLTE2TEUgYW5kIFVURi0xNkJFIHVzaW5nIEJPTSBhbmQgc3BhY2UtYmFzZWQgaGV1cmlzdGljLlxuLy8gRGVmYXVsdHMgdG8gVVRGLTE2TEUsIGFzIGl0J3MgcHJldmFsZW50IGFuZCBkZWZhdWx0IGluIE5vZGUuXG4vLyBodHRwOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1VURi0xNiBhbmQgaHR0cDovL2VuY29kaW5nLnNwZWMud2hhdHdnLm9yZy8jdXRmLTE2bGVcbi8vIERlY29kZXIgZGVmYXVsdCBjYW4gYmUgY2hhbmdlZDogaWNvbnYuZGVjb2RlKGJ1ZiwgJ3V0ZjE2Jywge2RlZmF1bHRFbmNvZGluZzogJ3V0Zi0xNmJlJ30pO1xuXG4vLyBFbmNvZGVyIHVzZXMgVVRGLTE2TEUgYW5kIHByZXBlbmRzIEJPTSAod2hpY2ggY2FuIGJlIG92ZXJyaWRkZW4gd2l0aCBhZGRCT006IGZhbHNlKS5cblxuZXhwb3J0cy51dGYxNiA9IFV0ZjE2Q29kZWM7XG5mdW5jdGlvbiBVdGYxNkNvZGVjKGNvZGVjT3B0aW9ucywgaWNvbnYpIHtcbiAgICB0aGlzLmljb252ID0gaWNvbnY7XG59XG5cblV0ZjE2Q29kZWMucHJvdG90eXBlLmVuY29kZXIgPSBVdGYxNkVuY29kZXI7XG5VdGYxNkNvZGVjLnByb3RvdHlwZS5kZWNvZGVyID0gVXRmMTZEZWNvZGVyO1xuXG5cbi8vIC0tIEVuY29kaW5nIChwYXNzLXRocm91Z2gpXG5cbmZ1bmN0aW9uIFV0ZjE2RW5jb2RlcihvcHRpb25zLCBjb2RlYykge1xuICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICAgIGlmIChvcHRpb25zLmFkZEJPTSA9PT0gdW5kZWZpbmVkKVxuICAgICAgICBvcHRpb25zLmFkZEJPTSA9IHRydWU7XG4gICAgdGhpcy5lbmNvZGVyID0gY29kZWMuaWNvbnYuZ2V0RW5jb2RlcigndXRmLTE2bGUnLCBvcHRpb25zKTtcbn1cblxuVXRmMTZFbmNvZGVyLnByb3RvdHlwZS53cml0ZSA9IGZ1bmN0aW9uKHN0cikge1xuICAgIHJldHVybiB0aGlzLmVuY29kZXIud3JpdGUoc3RyKTtcbn1cblxuVXRmMTZFbmNvZGVyLnByb3RvdHlwZS5lbmQgPSBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gdGhpcy5lbmNvZGVyLmVuZCgpO1xufVxuXG5cbi8vIC0tIERlY29kaW5nXG5cbmZ1bmN0aW9uIFV0ZjE2RGVjb2RlcihvcHRpb25zLCBjb2RlYykge1xuICAgIHRoaXMuZGVjb2RlciA9IG51bGw7XG4gICAgdGhpcy5pbml0aWFsQnVmcyA9IFtdO1xuICAgIHRoaXMuaW5pdGlhbEJ1ZnNMZW4gPSAwO1xuXG4gICAgdGhpcy5vcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiAgICB0aGlzLmljb252ID0gY29kZWMuaWNvbnY7XG59XG5cblV0ZjE2RGVjb2Rlci5wcm90b3R5cGUud3JpdGUgPSBmdW5jdGlvbihidWYpIHtcbiAgICBpZiAoIXRoaXMuZGVjb2Rlcikge1xuICAgICAgICAvLyBDb2RlYyBpcyBub3QgY2hvc2VuIHlldC4gQWNjdW11bGF0ZSBpbml0aWFsIGJ5dGVzLlxuICAgICAgICB0aGlzLmluaXRpYWxCdWZzLnB1c2goYnVmKTtcbiAgICAgICAgdGhpcy5pbml0aWFsQnVmc0xlbiArPSBidWYubGVuZ3RoO1xuICAgICAgICBcbiAgICAgICAgaWYgKHRoaXMuaW5pdGlhbEJ1ZnNMZW4gPCAxNikgLy8gV2UgbmVlZCBtb3JlIGJ5dGVzIHRvIHVzZSBzcGFjZSBoZXVyaXN0aWMgKHNlZSBiZWxvdylcbiAgICAgICAgICAgIHJldHVybiAnJztcblxuICAgICAgICAvLyBXZSBoYXZlIGVub3VnaCBieXRlcyAtPiBkZXRlY3QgZW5kaWFubmVzcy5cbiAgICAgICAgdmFyIGVuY29kaW5nID0gZGV0ZWN0RW5jb2RpbmcodGhpcy5pbml0aWFsQnVmcywgdGhpcy5vcHRpb25zLmRlZmF1bHRFbmNvZGluZyk7XG4gICAgICAgIHRoaXMuZGVjb2RlciA9IHRoaXMuaWNvbnYuZ2V0RGVjb2RlcihlbmNvZGluZywgdGhpcy5vcHRpb25zKTtcblxuICAgICAgICB2YXIgcmVzU3RyID0gJyc7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5pbml0aWFsQnVmcy5sZW5ndGg7IGkrKylcbiAgICAgICAgICAgIHJlc1N0ciArPSB0aGlzLmRlY29kZXIud3JpdGUodGhpcy5pbml0aWFsQnVmc1tpXSk7XG5cbiAgICAgICAgdGhpcy5pbml0aWFsQnVmcy5sZW5ndGggPSB0aGlzLmluaXRpYWxCdWZzTGVuID0gMDtcbiAgICAgICAgcmV0dXJuIHJlc1N0cjtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5kZWNvZGVyLndyaXRlKGJ1Zik7XG59XG5cblV0ZjE2RGVjb2Rlci5wcm90b3R5cGUuZW5kID0gZnVuY3Rpb24oKSB7XG4gICAgaWYgKCF0aGlzLmRlY29kZXIpIHtcbiAgICAgICAgdmFyIGVuY29kaW5nID0gZGV0ZWN0RW5jb2RpbmcodGhpcy5pbml0aWFsQnVmcywgdGhpcy5vcHRpb25zLmRlZmF1bHRFbmNvZGluZyk7XG4gICAgICAgIHRoaXMuZGVjb2RlciA9IHRoaXMuaWNvbnYuZ2V0RGVjb2RlcihlbmNvZGluZywgdGhpcy5vcHRpb25zKTtcblxuICAgICAgICB2YXIgcmVzU3RyID0gJyc7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5pbml0aWFsQnVmcy5sZW5ndGg7IGkrKylcbiAgICAgICAgICAgIHJlc1N0ciArPSB0aGlzLmRlY29kZXIud3JpdGUodGhpcy5pbml0aWFsQnVmc1tpXSk7XG5cbiAgICAgICAgdmFyIHRyYWlsID0gdGhpcy5kZWNvZGVyLmVuZCgpO1xuICAgICAgICBpZiAodHJhaWwpXG4gICAgICAgICAgICByZXNTdHIgKz0gdHJhaWw7XG5cbiAgICAgICAgdGhpcy5pbml0aWFsQnVmcy5sZW5ndGggPSB0aGlzLmluaXRpYWxCdWZzTGVuID0gMDtcbiAgICAgICAgcmV0dXJuIHJlc1N0cjtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuZGVjb2Rlci5lbmQoKTtcbn1cblxuZnVuY3Rpb24gZGV0ZWN0RW5jb2RpbmcoYnVmcywgZGVmYXVsdEVuY29kaW5nKSB7XG4gICAgdmFyIGIgPSBbXTtcbiAgICB2YXIgY2hhcnNQcm9jZXNzZWQgPSAwO1xuICAgIHZhciBhc2NpaUNoYXJzTEUgPSAwLCBhc2NpaUNoYXJzQkUgPSAwOyAvLyBOdW1iZXIgb2YgQVNDSUkgY2hhcnMgd2hlbiBkZWNvZGVkIGFzIExFIG9yIEJFLlxuXG4gICAgb3V0ZXJfbG9vcDpcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGJ1ZnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIGJ1ZiA9IGJ1ZnNbaV07XG4gICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgYnVmLmxlbmd0aDsgaisrKSB7XG4gICAgICAgICAgICBiLnB1c2goYnVmW2pdKTtcbiAgICAgICAgICAgIGlmIChiLmxlbmd0aCA9PT0gMikge1xuICAgICAgICAgICAgICAgIGlmIChjaGFyc1Byb2Nlc3NlZCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAvLyBDaGVjayBCT00gZmlyc3QuXG4gICAgICAgICAgICAgICAgICAgIGlmIChiWzBdID09PSAweEZGICYmIGJbMV0gPT09IDB4RkUpIHJldHVybiAndXRmLTE2bGUnO1xuICAgICAgICAgICAgICAgICAgICBpZiAoYlswXSA9PT0gMHhGRSAmJiBiWzFdID09PSAweEZGKSByZXR1cm4gJ3V0Zi0xNmJlJztcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoYlswXSA9PT0gMCAmJiBiWzFdICE9PSAwKSBhc2NpaUNoYXJzQkUrKztcbiAgICAgICAgICAgICAgICBpZiAoYlswXSAhPT0gMCAmJiBiWzFdID09PSAwKSBhc2NpaUNoYXJzTEUrKztcblxuICAgICAgICAgICAgICAgIGIubGVuZ3RoID0gMDtcbiAgICAgICAgICAgICAgICBjaGFyc1Byb2Nlc3NlZCsrO1xuXG4gICAgICAgICAgICAgICAgaWYgKGNoYXJzUHJvY2Vzc2VkID49IDEwMCkge1xuICAgICAgICAgICAgICAgICAgICBicmVhayBvdXRlcl9sb29wO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIE1ha2UgZGVjaXNpb25zLlxuICAgIC8vIE1vc3Qgb2YgdGhlIHRpbWUsIHRoZSBjb250ZW50IGhhcyBBU0NJSSBjaGFycyAoVSswMCoqKSwgYnV0IHRoZSBvcHBvc2l0ZSAoVSsqKjAwKSBpcyB1bmNvbW1vbi5cbiAgICAvLyBTbywgd2UgY291bnQgQVNDSUkgYXMgaWYgaXQgd2FzIExFIG9yIEJFLCBhbmQgZGVjaWRlIGZyb20gdGhhdC5cbiAgICBpZiAoYXNjaWlDaGFyc0JFID4gYXNjaWlDaGFyc0xFKSByZXR1cm4gJ3V0Zi0xNmJlJztcbiAgICBpZiAoYXNjaWlDaGFyc0JFIDwgYXNjaWlDaGFyc0xFKSByZXR1cm4gJ3V0Zi0xNmxlJztcblxuICAgIC8vIENvdWxkbid0IGRlY2lkZSAobGlrZWx5IGFsbCB6ZXJvcyBvciBub3QgZW5vdWdoIGRhdGEpLlxuICAgIHJldHVybiBkZWZhdWx0RW5jb2RpbmcgfHwgJ3V0Zi0xNmxlJztcbn1cblxuXG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgQnVmZmVyID0gcmVxdWlyZShcInNhZmVyLWJ1ZmZlclwiKS5CdWZmZXI7XG5cbi8vIFVURi03IGNvZGVjLCBhY2NvcmRpbmcgdG8gaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzIxNTJcbi8vIFNlZSBhbHNvIGJlbG93IGEgVVRGLTctSU1BUCBjb2RlYywgYWNjb3JkaW5nIHRvIGh0dHA6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzM1MDEjc2VjdGlvbi01LjEuM1xuXG5leHBvcnRzLnV0ZjcgPSBVdGY3Q29kZWM7XG5leHBvcnRzLnVuaWNvZGUxMXV0ZjcgPSAndXRmNyc7IC8vIEFsaWFzIFVOSUNPREUtMS0xLVVURi03XG5mdW5jdGlvbiBVdGY3Q29kZWMoY29kZWNPcHRpb25zLCBpY29udikge1xuICAgIHRoaXMuaWNvbnYgPSBpY29udjtcbn07XG5cblV0ZjdDb2RlYy5wcm90b3R5cGUuZW5jb2RlciA9IFV0ZjdFbmNvZGVyO1xuVXRmN0NvZGVjLnByb3RvdHlwZS5kZWNvZGVyID0gVXRmN0RlY29kZXI7XG5VdGY3Q29kZWMucHJvdG90eXBlLmJvbUF3YXJlID0gdHJ1ZTtcblxuXG4vLyAtLSBFbmNvZGluZ1xuXG52YXIgbm9uRGlyZWN0Q2hhcnMgPSAvW15BLVphLXowLTknXFwoXFwpLC1cXC5cXC86XFw/IFxcblxcclxcdF0rL2c7XG5cbmZ1bmN0aW9uIFV0ZjdFbmNvZGVyKG9wdGlvbnMsIGNvZGVjKSB7XG4gICAgdGhpcy5pY29udiA9IGNvZGVjLmljb252O1xufVxuXG5VdGY3RW5jb2Rlci5wcm90b3R5cGUud3JpdGUgPSBmdW5jdGlvbihzdHIpIHtcbiAgICAvLyBOYWl2ZSBpbXBsZW1lbnRhdGlvbi5cbiAgICAvLyBOb24tZGlyZWN0IGNoYXJzIGFyZSBlbmNvZGVkIGFzIFwiKzxiYXNlNjQ+LVwiOyBzaW5nbGUgXCIrXCIgY2hhciBpcyBlbmNvZGVkIGFzIFwiKy1cIi5cbiAgICByZXR1cm4gQnVmZmVyLmZyb20oc3RyLnJlcGxhY2Uobm9uRGlyZWN0Q2hhcnMsIGZ1bmN0aW9uKGNodW5rKSB7XG4gICAgICAgIHJldHVybiBcIitcIiArIChjaHVuayA9PT0gJysnID8gJycgOiBcbiAgICAgICAgICAgIHRoaXMuaWNvbnYuZW5jb2RlKGNodW5rLCAndXRmMTYtYmUnKS50b1N0cmluZygnYmFzZTY0JykucmVwbGFjZSgvPSskLywgJycpKSBcbiAgICAgICAgICAgICsgXCItXCI7XG4gICAgfS5iaW5kKHRoaXMpKSk7XG59XG5cblV0ZjdFbmNvZGVyLnByb3RvdHlwZS5lbmQgPSBmdW5jdGlvbigpIHtcbn1cblxuXG4vLyAtLSBEZWNvZGluZ1xuXG5mdW5jdGlvbiBVdGY3RGVjb2RlcihvcHRpb25zLCBjb2RlYykge1xuICAgIHRoaXMuaWNvbnYgPSBjb2RlYy5pY29udjtcbiAgICB0aGlzLmluQmFzZTY0ID0gZmFsc2U7XG4gICAgdGhpcy5iYXNlNjRBY2N1bSA9ICcnO1xufVxuXG52YXIgYmFzZTY0UmVnZXggPSAvW0EtWmEtejAtOVxcLytdLztcbnZhciBiYXNlNjRDaGFycyA9IFtdO1xuZm9yICh2YXIgaSA9IDA7IGkgPCAyNTY7IGkrKylcbiAgICBiYXNlNjRDaGFyc1tpXSA9IGJhc2U2NFJlZ2V4LnRlc3QoU3RyaW5nLmZyb21DaGFyQ29kZShpKSk7XG5cbnZhciBwbHVzQ2hhciA9ICcrJy5jaGFyQ29kZUF0KDApLCBcbiAgICBtaW51c0NoYXIgPSAnLScuY2hhckNvZGVBdCgwKSxcbiAgICBhbmRDaGFyID0gJyYnLmNoYXJDb2RlQXQoMCk7XG5cblV0ZjdEZWNvZGVyLnByb3RvdHlwZS53cml0ZSA9IGZ1bmN0aW9uKGJ1Zikge1xuICAgIHZhciByZXMgPSBcIlwiLCBsYXN0SSA9IDAsXG4gICAgICAgIGluQmFzZTY0ID0gdGhpcy5pbkJhc2U2NCxcbiAgICAgICAgYmFzZTY0QWNjdW0gPSB0aGlzLmJhc2U2NEFjY3VtO1xuXG4gICAgLy8gVGhlIGRlY29kZXIgaXMgbW9yZSBpbnZvbHZlZCBhcyB3ZSBtdXN0IGhhbmRsZSBjaHVua3MgaW4gc3RyZWFtLlxuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBidWYubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKCFpbkJhc2U2NCkgeyAvLyBXZSdyZSBpbiBkaXJlY3QgbW9kZS5cbiAgICAgICAgICAgIC8vIFdyaXRlIGRpcmVjdCBjaGFycyB1bnRpbCAnKydcbiAgICAgICAgICAgIGlmIChidWZbaV0gPT0gcGx1c0NoYXIpIHtcbiAgICAgICAgICAgICAgICByZXMgKz0gdGhpcy5pY29udi5kZWNvZGUoYnVmLnNsaWNlKGxhc3RJLCBpKSwgXCJhc2NpaVwiKTsgLy8gV3JpdGUgZGlyZWN0IGNoYXJzLlxuICAgICAgICAgICAgICAgIGxhc3RJID0gaSsxO1xuICAgICAgICAgICAgICAgIGluQmFzZTY0ID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHsgLy8gV2UgZGVjb2RlIGJhc2U2NC5cbiAgICAgICAgICAgIGlmICghYmFzZTY0Q2hhcnNbYnVmW2ldXSkgeyAvLyBCYXNlNjQgZW5kZWQuXG4gICAgICAgICAgICAgICAgaWYgKGkgPT0gbGFzdEkgJiYgYnVmW2ldID09IG1pbnVzQ2hhcikgey8vIFwiKy1cIiAtPiBcIitcIlxuICAgICAgICAgICAgICAgICAgICByZXMgKz0gXCIrXCI7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGI2NHN0ciA9IGJhc2U2NEFjY3VtICsgdGhpcy5pY29udi5kZWNvZGUoYnVmLnNsaWNlKGxhc3RJLCBpKSwgXCJhc2NpaVwiKTtcbiAgICAgICAgICAgICAgICAgICAgcmVzICs9IHRoaXMuaWNvbnYuZGVjb2RlKEJ1ZmZlci5mcm9tKGI2NHN0ciwgJ2Jhc2U2NCcpLCBcInV0ZjE2LWJlXCIpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChidWZbaV0gIT0gbWludXNDaGFyKSAvLyBNaW51cyBpcyBhYnNvcmJlZCBhZnRlciBiYXNlNjQuXG4gICAgICAgICAgICAgICAgICAgIGktLTtcblxuICAgICAgICAgICAgICAgIGxhc3RJID0gaSsxO1xuICAgICAgICAgICAgICAgIGluQmFzZTY0ID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgYmFzZTY0QWNjdW0gPSAnJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlmICghaW5CYXNlNjQpIHtcbiAgICAgICAgcmVzICs9IHRoaXMuaWNvbnYuZGVjb2RlKGJ1Zi5zbGljZShsYXN0SSksIFwiYXNjaWlcIik7IC8vIFdyaXRlIGRpcmVjdCBjaGFycy5cbiAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgYjY0c3RyID0gYmFzZTY0QWNjdW0gKyB0aGlzLmljb252LmRlY29kZShidWYuc2xpY2UobGFzdEkpLCBcImFzY2lpXCIpO1xuXG4gICAgICAgIHZhciBjYW5CZURlY29kZWQgPSBiNjRzdHIubGVuZ3RoIC0gKGI2NHN0ci5sZW5ndGggJSA4KTsgLy8gTWluaW1hbCBjaHVuazogMiBxdWFkcyAtPiAyeDMgYnl0ZXMgLT4gMyBjaGFycy5cbiAgICAgICAgYmFzZTY0QWNjdW0gPSBiNjRzdHIuc2xpY2UoY2FuQmVEZWNvZGVkKTsgLy8gVGhlIHJlc3Qgd2lsbCBiZSBkZWNvZGVkIGluIGZ1dHVyZS5cbiAgICAgICAgYjY0c3RyID0gYjY0c3RyLnNsaWNlKDAsIGNhbkJlRGVjb2RlZCk7XG5cbiAgICAgICAgcmVzICs9IHRoaXMuaWNvbnYuZGVjb2RlKEJ1ZmZlci5mcm9tKGI2NHN0ciwgJ2Jhc2U2NCcpLCBcInV0ZjE2LWJlXCIpO1xuICAgIH1cblxuICAgIHRoaXMuaW5CYXNlNjQgPSBpbkJhc2U2NDtcbiAgICB0aGlzLmJhc2U2NEFjY3VtID0gYmFzZTY0QWNjdW07XG5cbiAgICByZXR1cm4gcmVzO1xufVxuXG5VdGY3RGVjb2Rlci5wcm90b3R5cGUuZW5kID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHJlcyA9IFwiXCI7XG4gICAgaWYgKHRoaXMuaW5CYXNlNjQgJiYgdGhpcy5iYXNlNjRBY2N1bS5sZW5ndGggPiAwKVxuICAgICAgICByZXMgPSB0aGlzLmljb252LmRlY29kZShCdWZmZXIuZnJvbSh0aGlzLmJhc2U2NEFjY3VtLCAnYmFzZTY0JyksIFwidXRmMTYtYmVcIik7XG5cbiAgICB0aGlzLmluQmFzZTY0ID0gZmFsc2U7XG4gICAgdGhpcy5iYXNlNjRBY2N1bSA9ICcnO1xuICAgIHJldHVybiByZXM7XG59XG5cblxuLy8gVVRGLTctSU1BUCBjb2RlYy5cbi8vIFJGQzM1MDEgU2VjLiA1LjEuMyBNb2RpZmllZCBVVEYtNyAoaHR0cDovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMzUwMSNzZWN0aW9uLTUuMS4zKVxuLy8gRGlmZmVyZW5jZXM6XG4vLyAgKiBCYXNlNjQgcGFydCBpcyBzdGFydGVkIGJ5IFwiJlwiIGluc3RlYWQgb2YgXCIrXCJcbi8vICAqIERpcmVjdCBjaGFyYWN0ZXJzIGFyZSAweDIwLTB4N0UsIGV4Y2VwdCBcIiZcIiAoMHgyNilcbi8vICAqIEluIEJhc2U2NCwgXCIsXCIgaXMgdXNlZCBpbnN0ZWFkIG9mIFwiL1wiXG4vLyAgKiBCYXNlNjQgbXVzdCBub3QgYmUgdXNlZCB0byByZXByZXNlbnQgZGlyZWN0IGNoYXJhY3RlcnMuXG4vLyAgKiBObyBpbXBsaWNpdCBzaGlmdCBiYWNrIGZyb20gQmFzZTY0IChzaG91bGQgYWx3YXlzIGVuZCB3aXRoICctJylcbi8vICAqIFN0cmluZyBtdXN0IGVuZCBpbiBub24tc2hpZnRlZCBwb3NpdGlvbi5cbi8vICAqIFwiLSZcIiB3aGlsZSBpbiBiYXNlNjQgaXMgbm90IGFsbG93ZWQuXG5cblxuZXhwb3J0cy51dGY3aW1hcCA9IFV0ZjdJTUFQQ29kZWM7XG5mdW5jdGlvbiBVdGY3SU1BUENvZGVjKGNvZGVjT3B0aW9ucywgaWNvbnYpIHtcbiAgICB0aGlzLmljb252ID0gaWNvbnY7XG59O1xuXG5VdGY3SU1BUENvZGVjLnByb3RvdHlwZS5lbmNvZGVyID0gVXRmN0lNQVBFbmNvZGVyO1xuVXRmN0lNQVBDb2RlYy5wcm90b3R5cGUuZGVjb2RlciA9IFV0ZjdJTUFQRGVjb2RlcjtcblV0ZjdJTUFQQ29kZWMucHJvdG90eXBlLmJvbUF3YXJlID0gdHJ1ZTtcblxuXG4vLyAtLSBFbmNvZGluZ1xuXG5mdW5jdGlvbiBVdGY3SU1BUEVuY29kZXIob3B0aW9ucywgY29kZWMpIHtcbiAgICB0aGlzLmljb252ID0gY29kZWMuaWNvbnY7XG4gICAgdGhpcy5pbkJhc2U2NCA9IGZhbHNlO1xuICAgIHRoaXMuYmFzZTY0QWNjdW0gPSBCdWZmZXIuYWxsb2MoNik7XG4gICAgdGhpcy5iYXNlNjRBY2N1bUlkeCA9IDA7XG59XG5cblV0ZjdJTUFQRW5jb2Rlci5wcm90b3R5cGUud3JpdGUgPSBmdW5jdGlvbihzdHIpIHtcbiAgICB2YXIgaW5CYXNlNjQgPSB0aGlzLmluQmFzZTY0LFxuICAgICAgICBiYXNlNjRBY2N1bSA9IHRoaXMuYmFzZTY0QWNjdW0sXG4gICAgICAgIGJhc2U2NEFjY3VtSWR4ID0gdGhpcy5iYXNlNjRBY2N1bUlkeCxcbiAgICAgICAgYnVmID0gQnVmZmVyLmFsbG9jKHN0ci5sZW5ndGgqNSArIDEwKSwgYnVmSWR4ID0gMDtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc3RyLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciB1Q2hhciA9IHN0ci5jaGFyQ29kZUF0KGkpO1xuICAgICAgICBpZiAoMHgyMCA8PSB1Q2hhciAmJiB1Q2hhciA8PSAweDdFKSB7IC8vIERpcmVjdCBjaGFyYWN0ZXIgb3IgJyYnLlxuICAgICAgICAgICAgaWYgKGluQmFzZTY0KSB7XG4gICAgICAgICAgICAgICAgaWYgKGJhc2U2NEFjY3VtSWR4ID4gMCkge1xuICAgICAgICAgICAgICAgICAgICBidWZJZHggKz0gYnVmLndyaXRlKGJhc2U2NEFjY3VtLnNsaWNlKDAsIGJhc2U2NEFjY3VtSWR4KS50b1N0cmluZygnYmFzZTY0JykucmVwbGFjZSgvXFwvL2csICcsJykucmVwbGFjZSgvPSskLywgJycpLCBidWZJZHgpO1xuICAgICAgICAgICAgICAgICAgICBiYXNlNjRBY2N1bUlkeCA9IDA7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgYnVmW2J1ZklkeCsrXSA9IG1pbnVzQ2hhcjsgLy8gV3JpdGUgJy0nLCB0aGVuIGdvIHRvIGRpcmVjdCBtb2RlLlxuICAgICAgICAgICAgICAgIGluQmFzZTY0ID0gZmFsc2U7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICghaW5CYXNlNjQpIHtcbiAgICAgICAgICAgICAgICBidWZbYnVmSWR4KytdID0gdUNoYXI7IC8vIFdyaXRlIGRpcmVjdCBjaGFyYWN0ZXJcblxuICAgICAgICAgICAgICAgIGlmICh1Q2hhciA9PT0gYW5kQ2hhcikgIC8vIEFtcGVyc2FuZCAtPiAnJi0nXG4gICAgICAgICAgICAgICAgICAgIGJ1ZltidWZJZHgrK10gPSBtaW51c0NoYXI7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgfSBlbHNlIHsgLy8gTm9uLWRpcmVjdCBjaGFyYWN0ZXJcbiAgICAgICAgICAgIGlmICghaW5CYXNlNjQpIHtcbiAgICAgICAgICAgICAgICBidWZbYnVmSWR4KytdID0gYW5kQ2hhcjsgLy8gV3JpdGUgJyYnLCB0aGVuIGdvIHRvIGJhc2U2NCBtb2RlLlxuICAgICAgICAgICAgICAgIGluQmFzZTY0ID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChpbkJhc2U2NCkge1xuICAgICAgICAgICAgICAgIGJhc2U2NEFjY3VtW2Jhc2U2NEFjY3VtSWR4KytdID0gdUNoYXIgPj4gODtcbiAgICAgICAgICAgICAgICBiYXNlNjRBY2N1bVtiYXNlNjRBY2N1bUlkeCsrXSA9IHVDaGFyICYgMHhGRjtcblxuICAgICAgICAgICAgICAgIGlmIChiYXNlNjRBY2N1bUlkeCA9PSBiYXNlNjRBY2N1bS5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgYnVmSWR4ICs9IGJ1Zi53cml0ZShiYXNlNjRBY2N1bS50b1N0cmluZygnYmFzZTY0JykucmVwbGFjZSgvXFwvL2csICcsJyksIGJ1ZklkeCk7XG4gICAgICAgICAgICAgICAgICAgIGJhc2U2NEFjY3VtSWR4ID0gMDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLmluQmFzZTY0ID0gaW5CYXNlNjQ7XG4gICAgdGhpcy5iYXNlNjRBY2N1bUlkeCA9IGJhc2U2NEFjY3VtSWR4O1xuXG4gICAgcmV0dXJuIGJ1Zi5zbGljZSgwLCBidWZJZHgpO1xufVxuXG5VdGY3SU1BUEVuY29kZXIucHJvdG90eXBlLmVuZCA9IGZ1bmN0aW9uKCkge1xuICAgIHZhciBidWYgPSBCdWZmZXIuYWxsb2MoMTApLCBidWZJZHggPSAwO1xuICAgIGlmICh0aGlzLmluQmFzZTY0KSB7XG4gICAgICAgIGlmICh0aGlzLmJhc2U2NEFjY3VtSWR4ID4gMCkge1xuICAgICAgICAgICAgYnVmSWR4ICs9IGJ1Zi53cml0ZSh0aGlzLmJhc2U2NEFjY3VtLnNsaWNlKDAsIHRoaXMuYmFzZTY0QWNjdW1JZHgpLnRvU3RyaW5nKCdiYXNlNjQnKS5yZXBsYWNlKC9cXC8vZywgJywnKS5yZXBsYWNlKC89KyQvLCAnJyksIGJ1ZklkeCk7XG4gICAgICAgICAgICB0aGlzLmJhc2U2NEFjY3VtSWR4ID0gMDtcbiAgICAgICAgfVxuXG4gICAgICAgIGJ1ZltidWZJZHgrK10gPSBtaW51c0NoYXI7IC8vIFdyaXRlICctJywgdGhlbiBnbyB0byBkaXJlY3QgbW9kZS5cbiAgICAgICAgdGhpcy5pbkJhc2U2NCA9IGZhbHNlO1xuICAgIH1cblxuICAgIHJldHVybiBidWYuc2xpY2UoMCwgYnVmSWR4KTtcbn1cblxuXG4vLyAtLSBEZWNvZGluZ1xuXG5mdW5jdGlvbiBVdGY3SU1BUERlY29kZXIob3B0aW9ucywgY29kZWMpIHtcbiAgICB0aGlzLmljb252ID0gY29kZWMuaWNvbnY7XG4gICAgdGhpcy5pbkJhc2U2NCA9IGZhbHNlO1xuICAgIHRoaXMuYmFzZTY0QWNjdW0gPSAnJztcbn1cblxudmFyIGJhc2U2NElNQVBDaGFycyA9IGJhc2U2NENoYXJzLnNsaWNlKCk7XG5iYXNlNjRJTUFQQ2hhcnNbJywnLmNoYXJDb2RlQXQoMCldID0gdHJ1ZTtcblxuVXRmN0lNQVBEZWNvZGVyLnByb3RvdHlwZS53cml0ZSA9IGZ1bmN0aW9uKGJ1Zikge1xuICAgIHZhciByZXMgPSBcIlwiLCBsYXN0SSA9IDAsXG4gICAgICAgIGluQmFzZTY0ID0gdGhpcy5pbkJhc2U2NCxcbiAgICAgICAgYmFzZTY0QWNjdW0gPSB0aGlzLmJhc2U2NEFjY3VtO1xuXG4gICAgLy8gVGhlIGRlY29kZXIgaXMgbW9yZSBpbnZvbHZlZCBhcyB3ZSBtdXN0IGhhbmRsZSBjaHVua3MgaW4gc3RyZWFtLlxuICAgIC8vIEl0IGlzIGZvcmdpdmluZywgY2xvc2VyIHRvIHN0YW5kYXJkIFVURi03IChmb3IgZXhhbXBsZSwgJy0nIGlzIG9wdGlvbmFsIGF0IHRoZSBlbmQpLlxuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBidWYubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKCFpbkJhc2U2NCkgeyAvLyBXZSdyZSBpbiBkaXJlY3QgbW9kZS5cbiAgICAgICAgICAgIC8vIFdyaXRlIGRpcmVjdCBjaGFycyB1bnRpbCAnJidcbiAgICAgICAgICAgIGlmIChidWZbaV0gPT0gYW5kQ2hhcikge1xuICAgICAgICAgICAgICAgIHJlcyArPSB0aGlzLmljb252LmRlY29kZShidWYuc2xpY2UobGFzdEksIGkpLCBcImFzY2lpXCIpOyAvLyBXcml0ZSBkaXJlY3QgY2hhcnMuXG4gICAgICAgICAgICAgICAgbGFzdEkgPSBpKzE7XG4gICAgICAgICAgICAgICAgaW5CYXNlNjQgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgeyAvLyBXZSBkZWNvZGUgYmFzZTY0LlxuICAgICAgICAgICAgaWYgKCFiYXNlNjRJTUFQQ2hhcnNbYnVmW2ldXSkgeyAvLyBCYXNlNjQgZW5kZWQuXG4gICAgICAgICAgICAgICAgaWYgKGkgPT0gbGFzdEkgJiYgYnVmW2ldID09IG1pbnVzQ2hhcikgeyAvLyBcIiYtXCIgLT4gXCImXCJcbiAgICAgICAgICAgICAgICAgICAgcmVzICs9IFwiJlwiO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBiNjRzdHIgPSBiYXNlNjRBY2N1bSArIHRoaXMuaWNvbnYuZGVjb2RlKGJ1Zi5zbGljZShsYXN0SSwgaSksIFwiYXNjaWlcIikucmVwbGFjZSgvLC9nLCAnLycpO1xuICAgICAgICAgICAgICAgICAgICByZXMgKz0gdGhpcy5pY29udi5kZWNvZGUoQnVmZmVyLmZyb20oYjY0c3RyLCAnYmFzZTY0JyksIFwidXRmMTYtYmVcIik7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKGJ1ZltpXSAhPSBtaW51c0NoYXIpIC8vIE1pbnVzIG1heSBiZSBhYnNvcmJlZCBhZnRlciBiYXNlNjQuXG4gICAgICAgICAgICAgICAgICAgIGktLTtcblxuICAgICAgICAgICAgICAgIGxhc3RJID0gaSsxO1xuICAgICAgICAgICAgICAgIGluQmFzZTY0ID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgYmFzZTY0QWNjdW0gPSAnJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlmICghaW5CYXNlNjQpIHtcbiAgICAgICAgcmVzICs9IHRoaXMuaWNvbnYuZGVjb2RlKGJ1Zi5zbGljZShsYXN0SSksIFwiYXNjaWlcIik7IC8vIFdyaXRlIGRpcmVjdCBjaGFycy5cbiAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgYjY0c3RyID0gYmFzZTY0QWNjdW0gKyB0aGlzLmljb252LmRlY29kZShidWYuc2xpY2UobGFzdEkpLCBcImFzY2lpXCIpLnJlcGxhY2UoLywvZywgJy8nKTtcblxuICAgICAgICB2YXIgY2FuQmVEZWNvZGVkID0gYjY0c3RyLmxlbmd0aCAtIChiNjRzdHIubGVuZ3RoICUgOCk7IC8vIE1pbmltYWwgY2h1bms6IDIgcXVhZHMgLT4gMngzIGJ5dGVzIC0+IDMgY2hhcnMuXG4gICAgICAgIGJhc2U2NEFjY3VtID0gYjY0c3RyLnNsaWNlKGNhbkJlRGVjb2RlZCk7IC8vIFRoZSByZXN0IHdpbGwgYmUgZGVjb2RlZCBpbiBmdXR1cmUuXG4gICAgICAgIGI2NHN0ciA9IGI2NHN0ci5zbGljZSgwLCBjYW5CZURlY29kZWQpO1xuXG4gICAgICAgIHJlcyArPSB0aGlzLmljb252LmRlY29kZShCdWZmZXIuZnJvbShiNjRzdHIsICdiYXNlNjQnKSwgXCJ1dGYxNi1iZVwiKTtcbiAgICB9XG5cbiAgICB0aGlzLmluQmFzZTY0ID0gaW5CYXNlNjQ7XG4gICAgdGhpcy5iYXNlNjRBY2N1bSA9IGJhc2U2NEFjY3VtO1xuXG4gICAgcmV0dXJuIHJlcztcbn1cblxuVXRmN0lNQVBEZWNvZGVyLnByb3RvdHlwZS5lbmQgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgcmVzID0gXCJcIjtcbiAgICBpZiAodGhpcy5pbkJhc2U2NCAmJiB0aGlzLmJhc2U2NEFjY3VtLmxlbmd0aCA+IDApXG4gICAgICAgIHJlcyA9IHRoaXMuaWNvbnYuZGVjb2RlKEJ1ZmZlci5mcm9tKHRoaXMuYmFzZTY0QWNjdW0sICdiYXNlNjQnKSwgXCJ1dGYxNi1iZVwiKTtcblxuICAgIHRoaXMuaW5CYXNlNjQgPSBmYWxzZTtcbiAgICB0aGlzLmJhc2U2NEFjY3VtID0gJyc7XG4gICAgcmV0dXJuIHJlcztcbn1cblxuXG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgQnVmZmVyID0gcmVxdWlyZShcInNhZmVyLWJ1ZmZlclwiKS5CdWZmZXI7XG5cbi8vIFNpbmdsZS1ieXRlIGNvZGVjLiBOZWVkcyBhICdjaGFycycgc3RyaW5nIHBhcmFtZXRlciB0aGF0IGNvbnRhaW5zIDI1NiBvciAxMjggY2hhcnMgdGhhdFxuLy8gY29ycmVzcG9uZCB0byBlbmNvZGVkIGJ5dGVzIChpZiAxMjggLSB0aGVuIGxvd2VyIGhhbGYgaXMgQVNDSUkpLiBcblxuZXhwb3J0cy5fc2JjcyA9IFNCQ1NDb2RlYztcbmZ1bmN0aW9uIFNCQ1NDb2RlYyhjb2RlY09wdGlvbnMsIGljb252KSB7XG4gICAgaWYgKCFjb2RlY09wdGlvbnMpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIlNCQ1MgY29kZWMgaXMgY2FsbGVkIHdpdGhvdXQgdGhlIGRhdGEuXCIpXG4gICAgXG4gICAgLy8gUHJlcGFyZSBjaGFyIGJ1ZmZlciBmb3IgZGVjb2RpbmcuXG4gICAgaWYgKCFjb2RlY09wdGlvbnMuY2hhcnMgfHwgKGNvZGVjT3B0aW9ucy5jaGFycy5sZW5ndGggIT09IDEyOCAmJiBjb2RlY09wdGlvbnMuY2hhcnMubGVuZ3RoICE9PSAyNTYpKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJFbmNvZGluZyAnXCIrY29kZWNPcHRpb25zLnR5cGUrXCInIGhhcyBpbmNvcnJlY3QgJ2NoYXJzJyAobXVzdCBiZSBvZiBsZW4gMTI4IG9yIDI1NilcIik7XG4gICAgXG4gICAgaWYgKGNvZGVjT3B0aW9ucy5jaGFycy5sZW5ndGggPT09IDEyOCkge1xuICAgICAgICB2YXIgYXNjaWlTdHJpbmcgPSBcIlwiO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDEyODsgaSsrKVxuICAgICAgICAgICAgYXNjaWlTdHJpbmcgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShpKTtcbiAgICAgICAgY29kZWNPcHRpb25zLmNoYXJzID0gYXNjaWlTdHJpbmcgKyBjb2RlY09wdGlvbnMuY2hhcnM7XG4gICAgfVxuXG4gICAgdGhpcy5kZWNvZGVCdWYgPSBCdWZmZXIuZnJvbShjb2RlY09wdGlvbnMuY2hhcnMsICd1Y3MyJyk7XG4gICAgXG4gICAgLy8gRW5jb2RpbmcgYnVmZmVyLlxuICAgIHZhciBlbmNvZGVCdWYgPSBCdWZmZXIuYWxsb2MoNjU1MzYsIGljb252LmRlZmF1bHRDaGFyU2luZ2xlQnl0ZS5jaGFyQ29kZUF0KDApKTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY29kZWNPcHRpb25zLmNoYXJzLmxlbmd0aDsgaSsrKVxuICAgICAgICBlbmNvZGVCdWZbY29kZWNPcHRpb25zLmNoYXJzLmNoYXJDb2RlQXQoaSldID0gaTtcblxuICAgIHRoaXMuZW5jb2RlQnVmID0gZW5jb2RlQnVmO1xufVxuXG5TQkNTQ29kZWMucHJvdG90eXBlLmVuY29kZXIgPSBTQkNTRW5jb2RlcjtcblNCQ1NDb2RlYy5wcm90b3R5cGUuZGVjb2RlciA9IFNCQ1NEZWNvZGVyO1xuXG5cbmZ1bmN0aW9uIFNCQ1NFbmNvZGVyKG9wdGlvbnMsIGNvZGVjKSB7XG4gICAgdGhpcy5lbmNvZGVCdWYgPSBjb2RlYy5lbmNvZGVCdWY7XG59XG5cblNCQ1NFbmNvZGVyLnByb3RvdHlwZS53cml0ZSA9IGZ1bmN0aW9uKHN0cikge1xuICAgIHZhciBidWYgPSBCdWZmZXIuYWxsb2Moc3RyLmxlbmd0aCk7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdHIubGVuZ3RoOyBpKyspXG4gICAgICAgIGJ1ZltpXSA9IHRoaXMuZW5jb2RlQnVmW3N0ci5jaGFyQ29kZUF0KGkpXTtcbiAgICBcbiAgICByZXR1cm4gYnVmO1xufVxuXG5TQkNTRW5jb2Rlci5wcm90b3R5cGUuZW5kID0gZnVuY3Rpb24oKSB7XG59XG5cblxuZnVuY3Rpb24gU0JDU0RlY29kZXIob3B0aW9ucywgY29kZWMpIHtcbiAgICB0aGlzLmRlY29kZUJ1ZiA9IGNvZGVjLmRlY29kZUJ1Zjtcbn1cblxuU0JDU0RlY29kZXIucHJvdG90eXBlLndyaXRlID0gZnVuY3Rpb24oYnVmKSB7XG4gICAgLy8gU3RyaW5ncyBhcmUgaW1tdXRhYmxlIGluIEpTIC0+IHdlIHVzZSB1Y3MyIGJ1ZmZlciB0byBzcGVlZCB1cCBjb21wdXRhdGlvbnMuXG4gICAgdmFyIGRlY29kZUJ1ZiA9IHRoaXMuZGVjb2RlQnVmO1xuICAgIHZhciBuZXdCdWYgPSBCdWZmZXIuYWxsb2MoYnVmLmxlbmd0aCoyKTtcbiAgICB2YXIgaWR4MSA9IDAsIGlkeDIgPSAwO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYnVmLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlkeDEgPSBidWZbaV0qMjsgaWR4MiA9IGkqMjtcbiAgICAgICAgbmV3QnVmW2lkeDJdID0gZGVjb2RlQnVmW2lkeDFdO1xuICAgICAgICBuZXdCdWZbaWR4MisxXSA9IGRlY29kZUJ1ZltpZHgxKzFdO1xuICAgIH1cbiAgICByZXR1cm4gbmV3QnVmLnRvU3RyaW5nKCd1Y3MyJyk7XG59XG5cblNCQ1NEZWNvZGVyLnByb3RvdHlwZS5lbmQgPSBmdW5jdGlvbigpIHtcbn1cbiIsICJcInVzZSBzdHJpY3RcIjtcblxuLy8gTWFudWFsbHkgYWRkZWQgZGF0YSB0byBiZSB1c2VkIGJ5IHNiY3MgY29kZWMgaW4gYWRkaXRpb24gdG8gZ2VuZXJhdGVkIG9uZS5cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gICAgLy8gTm90IHN1cHBvcnRlZCBieSBpY29udiwgbm90IHN1cmUgd2h5LlxuICAgIFwiMTAwMjlcIjogXCJtYWNjZW50ZXVyb1wiLFxuICAgIFwibWFjY2VudGV1cm9cIjoge1xuICAgICAgICBcInR5cGVcIjogXCJfc2Jjc1wiLFxuICAgICAgICBcImNoYXJzXCI6IFwiXHUwMEM0XHUwMTAwXHUwMTAxXHUwMEM5XHUwMTA0XHUwMEQ2XHUwMERDXHUwMEUxXHUwMTA1XHUwMTBDXHUwMEU0XHUwMTBEXHUwMTA2XHUwMTA3XHUwMEU5XHUwMTc5XHUwMTdBXHUwMTBFXHUwMEVEXHUwMTBGXHUwMTEyXHUwMTEzXHUwMTE2XHUwMEYzXHUwMTE3XHUwMEY0XHUwMEY2XHUwMEY1XHUwMEZBXHUwMTFBXHUwMTFCXHUwMEZDXHUyMDIwXHUwMEIwXHUwMTE4XHUwMEEzXHUwMEE3XHUyMDIyXHUwMEI2XHUwMERGXHUwMEFFXHUwMEE5XHUyMTIyXHUwMTE5XHUwMEE4XHUyMjYwXHUwMTIzXHUwMTJFXHUwMTJGXHUwMTJBXHUyMjY0XHUyMjY1XHUwMTJCXHUwMTM2XHUyMjAyXHUyMjExXHUwMTQyXHUwMTNCXHUwMTNDXHUwMTNEXHUwMTNFXHUwMTM5XHUwMTNBXHUwMTQ1XHUwMTQ2XHUwMTQzXHUwMEFDXHUyMjFBXHUwMTQ0XHUwMTQ3XHUyMjA2XHUwMEFCXHUwMEJCXHUyMDI2XHUwMEEwXHUwMTQ4XHUwMTUwXHUwMEQ1XHUwMTUxXHUwMTRDXHUyMDEzXHUyMDE0XHUyMDFDXHUyMDFEXHUyMDE4XHUyMDE5XHUwMEY3XHUyNUNBXHUwMTREXHUwMTU0XHUwMTU1XHUwMTU4XHUyMDM5XHUyMDNBXHUwMTU5XHUwMTU2XHUwMTU3XHUwMTYwXHUyMDFBXHUyMDFFXHUwMTYxXHUwMTVBXHUwMTVCXHUwMEMxXHUwMTY0XHUwMTY1XHUwMENEXHUwMTdEXHUwMTdFXHUwMTZBXHUwMEQzXHUwMEQ0XHUwMTZCXHUwMTZFXHUwMERBXHUwMTZGXHUwMTcwXHUwMTcxXHUwMTcyXHUwMTczXHUwMEREXHUwMEZEXHUwMTM3XHUwMTdCXHUwMTQxXHUwMTdDXHUwMTIyXHUwMkM3XCJcbiAgICB9LFxuXG4gICAgXCI4MDhcIjogXCJjcDgwOFwiLFxuICAgIFwiaWJtODA4XCI6IFwiY3A4MDhcIixcbiAgICBcImNwODA4XCI6IHtcbiAgICAgICAgXCJ0eXBlXCI6IFwiX3NiY3NcIixcbiAgICAgICAgXCJjaGFyc1wiOiBcIlx1MDQxMFx1MDQxMVx1MDQxMlx1MDQxM1x1MDQxNFx1MDQxNVx1MDQxNlx1MDQxN1x1MDQxOFx1MDQxOVx1MDQxQVx1MDQxQlx1MDQxQ1x1MDQxRFx1MDQxRVx1MDQxRlx1MDQyMFx1MDQyMVx1MDQyMlx1MDQyM1x1MDQyNFx1MDQyNVx1MDQyNlx1MDQyN1x1MDQyOFx1MDQyOVx1MDQyQVx1MDQyQlx1MDQyQ1x1MDQyRFx1MDQyRVx1MDQyRlx1MDQzMFx1MDQzMVx1MDQzMlx1MDQzM1x1MDQzNFx1MDQzNVx1MDQzNlx1MDQzN1x1MDQzOFx1MDQzOVx1MDQzQVx1MDQzQlx1MDQzQ1x1MDQzRFx1MDQzRVx1MDQzRlx1MjU5MVx1MjU5Mlx1MjU5M1x1MjUwMlx1MjUyNFx1MjU2MVx1MjU2Mlx1MjU1Nlx1MjU1NVx1MjU2M1x1MjU1MVx1MjU1N1x1MjU1RFx1MjU1Q1x1MjU1Qlx1MjUxMFx1MjUxNFx1MjUzNFx1MjUyQ1x1MjUxQ1x1MjUwMFx1MjUzQ1x1MjU1RVx1MjU1Rlx1MjU1QVx1MjU1NFx1MjU2OVx1MjU2Nlx1MjU2MFx1MjU1MFx1MjU2Q1x1MjU2N1x1MjU2OFx1MjU2NFx1MjU2NVx1MjU1OVx1MjU1OFx1MjU1Mlx1MjU1M1x1MjU2Qlx1MjU2QVx1MjUxOFx1MjUwQ1x1MjU4OFx1MjU4NFx1MjU4Q1x1MjU5MFx1MjU4MFx1MDQ0MFx1MDQ0MVx1MDQ0Mlx1MDQ0M1x1MDQ0NFx1MDQ0NVx1MDQ0Nlx1MDQ0N1x1MDQ0OFx1MDQ0OVx1MDQ0QVx1MDQ0Qlx1MDQ0Q1x1MDQ0RFx1MDQ0RVx1MDQ0Rlx1MDQwMVx1MDQ1MVx1MDQwNFx1MDQ1NFx1MDQwN1x1MDQ1N1x1MDQwRVx1MDQ1RVx1MDBCMFx1MjIxOVx1MDBCN1x1MjIxQVx1MjExNlx1MjBBQ1x1MjVBMFx1MDBBMFwiXG4gICAgfSxcblxuICAgIFwibWlrXCI6IHtcbiAgICAgICAgXCJ0eXBlXCI6IFwiX3NiY3NcIixcbiAgICAgICAgXCJjaGFyc1wiOiBcIlx1MDQxMFx1MDQxMVx1MDQxMlx1MDQxM1x1MDQxNFx1MDQxNVx1MDQxNlx1MDQxN1x1MDQxOFx1MDQxOVx1MDQxQVx1MDQxQlx1MDQxQ1x1MDQxRFx1MDQxRVx1MDQxRlx1MDQyMFx1MDQyMVx1MDQyMlx1MDQyM1x1MDQyNFx1MDQyNVx1MDQyNlx1MDQyN1x1MDQyOFx1MDQyOVx1MDQyQVx1MDQyQlx1MDQyQ1x1MDQyRFx1MDQyRVx1MDQyRlx1MDQzMFx1MDQzMVx1MDQzMlx1MDQzM1x1MDQzNFx1MDQzNVx1MDQzNlx1MDQzN1x1MDQzOFx1MDQzOVx1MDQzQVx1MDQzQlx1MDQzQ1x1MDQzRFx1MDQzRVx1MDQzRlx1MDQ0MFx1MDQ0MVx1MDQ0Mlx1MDQ0M1x1MDQ0NFx1MDQ0NVx1MDQ0Nlx1MDQ0N1x1MDQ0OFx1MDQ0OVx1MDQ0QVx1MDQ0Qlx1MDQ0Q1x1MDQ0RFx1MDQ0RVx1MDQ0Rlx1MjUxNFx1MjUzNFx1MjUyQ1x1MjUxQ1x1MjUwMFx1MjUzQ1x1MjU2M1x1MjU1MVx1MjU1QVx1MjU1NFx1MjU2OVx1MjU2Nlx1MjU2MFx1MjU1MFx1MjU2Q1x1MjUxMFx1MjU5MVx1MjU5Mlx1MjU5M1x1MjUwMlx1MjUyNFx1MjExNlx1MDBBN1x1MjU1N1x1MjU1RFx1MjUxOFx1MjUwQ1x1MjU4OFx1MjU4NFx1MjU4Q1x1MjU5MFx1MjU4MFx1MDNCMVx1MDBERlx1MDM5M1x1MDNDMFx1MDNBM1x1MDNDM1x1MDBCNVx1MDNDNFx1MDNBNlx1MDM5OFx1MDNBOVx1MDNCNFx1MjIxRVx1MDNDNlx1MDNCNVx1MjIyOVx1MjI2MVx1MDBCMVx1MjI2NVx1MjI2NFx1MjMyMFx1MjMyMVx1MDBGN1x1MjI0OFx1MDBCMFx1MjIxOVx1MDBCN1x1MjIxQVx1MjA3Rlx1MDBCMlx1MjVBMFx1MDBBMFwiXG4gICAgfSxcblxuICAgIFwiY3A3MjBcIjoge1xuICAgICAgICBcInR5cGVcIjogXCJfc2Jjc1wiLFxuICAgICAgICBcImNoYXJzXCI6IFwiXFx4ODBcXHg4MVx1MDBFOVx1MDBFMlxceDg0XHUwMEUwXFx4ODZcdTAwRTdcdTAwRUFcdTAwRUJcdTAwRThcdTAwRUZcdTAwRUVcXHg4ZFxceDhlXFx4OGZcXHg5MFxcdTA2NTFcXHUwNjUyXHUwMEY0XHUwMEE0XHUwNjQwXHUwMEZCXHUwMEY5XHUwNjIxXHUwNjIyXHUwNjIzXHUwNjI0XHUwMEEzXHUwNjI1XHUwNjI2XHUwNjI3XHUwNjI4XHUwNjI5XHUwNjJBXHUwNjJCXHUwNjJDXHUwNjJEXHUwNjJFXHUwNjJGXHUwNjMwXHUwNjMxXHUwNjMyXHUwNjMzXHUwNjM0XHUwNjM1XHUwMEFCXHUwMEJCXHUyNTkxXHUyNTkyXHUyNTkzXHUyNTAyXHUyNTI0XHUyNTYxXHUyNTYyXHUyNTU2XHUyNTU1XHUyNTYzXHUyNTUxXHUyNTU3XHUyNTVEXHUyNTVDXHUyNTVCXHUyNTEwXHUyNTE0XHUyNTM0XHUyNTJDXHUyNTFDXHUyNTAwXHUyNTNDXHUyNTVFXHUyNTVGXHUyNTVBXHUyNTU0XHUyNTY5XHUyNTY2XHUyNTYwXHUyNTUwXHUyNTZDXHUyNTY3XHUyNTY4XHUyNTY0XHUyNTY1XHUyNTU5XHUyNTU4XHUyNTUyXHUyNTUzXHUyNTZCXHUyNTZBXHUyNTE4XHUyNTBDXHUyNTg4XHUyNTg0XHUyNThDXHUyNTkwXHUyNTgwXHUwNjM2XHUwNjM3XHUwNjM4XHUwNjM5XHUwNjNBXHUwNjQxXHUwMEI1XHUwNjQyXHUwNjQzXHUwNjQ0XHUwNjQ1XHUwNjQ2XHUwNjQ3XHUwNjQ4XHUwNjQ5XHUwNjRBXHUyMjYxXFx1MDY0YlxcdTA2NGNcXHUwNjRkXFx1MDY0ZVxcdTA2NGZcXHUwNjUwXHUyMjQ4XHUwMEIwXHUyMjE5XHUwMEI3XHUyMjFBXHUyMDdGXHUwMEIyXHUyNUEwXFx1MDBhMFwiXG4gICAgfSxcblxuICAgIC8vIEFsaWFzZXMgb2YgZ2VuZXJhdGVkIGVuY29kaW5ncy5cbiAgICBcImFzY2lpOGJpdFwiOiBcImFzY2lpXCIsXG4gICAgXCJ1c2FzY2lpXCI6IFwiYXNjaWlcIixcbiAgICBcImFuc2l4MzRcIjogXCJhc2NpaVwiLFxuICAgIFwiYW5zaXgzNDE5NjhcIjogXCJhc2NpaVwiLFxuICAgIFwiYW5zaXgzNDE5ODZcIjogXCJhc2NpaVwiLFxuICAgIFwiY3Nhc2NpaVwiOiBcImFzY2lpXCIsXG4gICAgXCJjcDM2N1wiOiBcImFzY2lpXCIsXG4gICAgXCJpYm0zNjdcIjogXCJhc2NpaVwiLFxuICAgIFwiaXNvaXI2XCI6IFwiYXNjaWlcIixcbiAgICBcImlzbzY0NnVzXCI6IFwiYXNjaWlcIixcbiAgICBcImlzbzY0NmlydlwiOiBcImFzY2lpXCIsXG4gICAgXCJ1c1wiOiBcImFzY2lpXCIsXG5cbiAgICBcImxhdGluMVwiOiBcImlzbzg4NTkxXCIsXG4gICAgXCJsYXRpbjJcIjogXCJpc284ODU5MlwiLFxuICAgIFwibGF0aW4zXCI6IFwiaXNvODg1OTNcIixcbiAgICBcImxhdGluNFwiOiBcImlzbzg4NTk0XCIsXG4gICAgXCJsYXRpbjVcIjogXCJpc284ODU5OVwiLFxuICAgIFwibGF0aW42XCI6IFwiaXNvODg1OTEwXCIsXG4gICAgXCJsYXRpbjdcIjogXCJpc284ODU5MTNcIixcbiAgICBcImxhdGluOFwiOiBcImlzbzg4NTkxNFwiLFxuICAgIFwibGF0aW45XCI6IFwiaXNvODg1OTE1XCIsXG4gICAgXCJsYXRpbjEwXCI6IFwiaXNvODg1OTE2XCIsXG5cbiAgICBcImNzaXNvbGF0aW4xXCI6IFwiaXNvODg1OTFcIixcbiAgICBcImNzaXNvbGF0aW4yXCI6IFwiaXNvODg1OTJcIixcbiAgICBcImNzaXNvbGF0aW4zXCI6IFwiaXNvODg1OTNcIixcbiAgICBcImNzaXNvbGF0aW40XCI6IFwiaXNvODg1OTRcIixcbiAgICBcImNzaXNvbGF0aW5jeXJpbGxpY1wiOiBcImlzbzg4NTk1XCIsXG4gICAgXCJjc2lzb2xhdGluYXJhYmljXCI6IFwiaXNvODg1OTZcIixcbiAgICBcImNzaXNvbGF0aW5ncmVla1wiIDogXCJpc284ODU5N1wiLFxuICAgIFwiY3Npc29sYXRpbmhlYnJld1wiOiBcImlzbzg4NTk4XCIsXG4gICAgXCJjc2lzb2xhdGluNVwiOiBcImlzbzg4NTk5XCIsXG4gICAgXCJjc2lzb2xhdGluNlwiOiBcImlzbzg4NTkxMFwiLFxuXG4gICAgXCJsMVwiOiBcImlzbzg4NTkxXCIsXG4gICAgXCJsMlwiOiBcImlzbzg4NTkyXCIsXG4gICAgXCJsM1wiOiBcImlzbzg4NTkzXCIsXG4gICAgXCJsNFwiOiBcImlzbzg4NTk0XCIsXG4gICAgXCJsNVwiOiBcImlzbzg4NTk5XCIsXG4gICAgXCJsNlwiOiBcImlzbzg4NTkxMFwiLFxuICAgIFwibDdcIjogXCJpc284ODU5MTNcIixcbiAgICBcImw4XCI6IFwiaXNvODg1OTE0XCIsXG4gICAgXCJsOVwiOiBcImlzbzg4NTkxNVwiLFxuICAgIFwibDEwXCI6IFwiaXNvODg1OTE2XCIsXG5cbiAgICBcImlzb2lyMTRcIjogXCJpc282NDZqcFwiLFxuICAgIFwiaXNvaXI1N1wiOiBcImlzbzY0NmNuXCIsXG4gICAgXCJpc29pcjEwMFwiOiBcImlzbzg4NTkxXCIsXG4gICAgXCJpc29pcjEwMVwiOiBcImlzbzg4NTkyXCIsXG4gICAgXCJpc29pcjEwOVwiOiBcImlzbzg4NTkzXCIsXG4gICAgXCJpc29pcjExMFwiOiBcImlzbzg4NTk0XCIsXG4gICAgXCJpc29pcjE0NFwiOiBcImlzbzg4NTk1XCIsXG4gICAgXCJpc29pcjEyN1wiOiBcImlzbzg4NTk2XCIsXG4gICAgXCJpc29pcjEyNlwiOiBcImlzbzg4NTk3XCIsXG4gICAgXCJpc29pcjEzOFwiOiBcImlzbzg4NTk4XCIsXG4gICAgXCJpc29pcjE0OFwiOiBcImlzbzg4NTk5XCIsXG4gICAgXCJpc29pcjE1N1wiOiBcImlzbzg4NTkxMFwiLFxuICAgIFwiaXNvaXIxNjZcIjogXCJ0aXM2MjBcIixcbiAgICBcImlzb2lyMTc5XCI6IFwiaXNvODg1OTEzXCIsXG4gICAgXCJpc29pcjE5OVwiOiBcImlzbzg4NTkxNFwiLFxuICAgIFwiaXNvaXIyMDNcIjogXCJpc284ODU5MTVcIixcbiAgICBcImlzb2lyMjI2XCI6IFwiaXNvODg1OTE2XCIsXG5cbiAgICBcImNwODE5XCI6IFwiaXNvODg1OTFcIixcbiAgICBcImlibTgxOVwiOiBcImlzbzg4NTkxXCIsXG5cbiAgICBcImN5cmlsbGljXCI6IFwiaXNvODg1OTVcIixcblxuICAgIFwiYXJhYmljXCI6IFwiaXNvODg1OTZcIixcbiAgICBcImFyYWJpYzhcIjogXCJpc284ODU5NlwiLFxuICAgIFwiZWNtYTExNFwiOiBcImlzbzg4NTk2XCIsXG4gICAgXCJhc21vNzA4XCI6IFwiaXNvODg1OTZcIixcblxuICAgIFwiZ3JlZWtcIiA6IFwiaXNvODg1OTdcIixcbiAgICBcImdyZWVrOFwiIDogXCJpc284ODU5N1wiLFxuICAgIFwiZWNtYTExOFwiIDogXCJpc284ODU5N1wiLFxuICAgIFwiZWxvdDkyOFwiIDogXCJpc284ODU5N1wiLFxuXG4gICAgXCJoZWJyZXdcIjogXCJpc284ODU5OFwiLFxuICAgIFwiaGVicmV3OFwiOiBcImlzbzg4NTk4XCIsXG5cbiAgICBcInR1cmtpc2hcIjogXCJpc284ODU5OVwiLFxuICAgIFwidHVya2lzaDhcIjogXCJpc284ODU5OVwiLFxuXG4gICAgXCJ0aGFpXCI6IFwiaXNvODg1OTExXCIsXG4gICAgXCJ0aGFpOFwiOiBcImlzbzg4NTkxMVwiLFxuXG4gICAgXCJjZWx0aWNcIjogXCJpc284ODU5MTRcIixcbiAgICBcImNlbHRpYzhcIjogXCJpc284ODU5MTRcIixcbiAgICBcImlzb2NlbHRpY1wiOiBcImlzbzg4NTkxNFwiLFxuXG4gICAgXCJ0aXM2MjAwXCI6IFwidGlzNjIwXCIsXG4gICAgXCJ0aXM2MjAyNTI5MVwiOiBcInRpczYyMFwiLFxuICAgIFwidGlzNjIwMjUzMzBcIjogXCJ0aXM2MjBcIixcblxuICAgIFwiMTAwMDBcIjogXCJtYWNyb21hblwiLFxuICAgIFwiMTAwMDZcIjogXCJtYWNncmVla1wiLFxuICAgIFwiMTAwMDdcIjogXCJtYWNjeXJpbGxpY1wiLFxuICAgIFwiMTAwNzlcIjogXCJtYWNpY2VsYW5kXCIsXG4gICAgXCIxMDA4MVwiOiBcIm1hY3R1cmtpc2hcIixcblxuICAgIFwiY3NwYzhjb2RlcGFnZTQzN1wiOiBcImNwNDM3XCIsXG4gICAgXCJjc3BjNzc1YmFsdGljXCI6IFwiY3A3NzVcIixcbiAgICBcImNzcGM4NTBtdWx0aWxpbmd1YWxcIjogXCJjcDg1MFwiLFxuICAgIFwiY3NwY3A4NTJcIjogXCJjcDg1MlwiLFxuICAgIFwiY3NwYzg2MmxhdGluaGVicmV3XCI6IFwiY3A4NjJcIixcbiAgICBcImNwZ3JcIjogXCJjcDg2OVwiLFxuXG4gICAgXCJtc2VlXCI6IFwiY3AxMjUwXCIsXG4gICAgXCJtc2N5cmxcIjogXCJjcDEyNTFcIixcbiAgICBcIm1zYW5zaVwiOiBcImNwMTI1MlwiLFxuICAgIFwibXNncmVla1wiOiBcImNwMTI1M1wiLFxuICAgIFwibXN0dXJrXCI6IFwiY3AxMjU0XCIsXG4gICAgXCJtc2hlYnJcIjogXCJjcDEyNTVcIixcbiAgICBcIm1zYXJhYlwiOiBcImNwMTI1NlwiLFxuICAgIFwid2luYmFsdHJpbVwiOiBcImNwMTI1N1wiLFxuXG4gICAgXCJjcDIwODY2XCI6IFwia29pOHJcIixcbiAgICBcIjIwODY2XCI6IFwia29pOHJcIixcbiAgICBcImlibTg3OFwiOiBcImtvaThyXCIsXG4gICAgXCJjc2tvaThyXCI6IFwia29pOHJcIixcblxuICAgIFwiY3AyMTg2NlwiOiBcImtvaTh1XCIsXG4gICAgXCIyMTg2NlwiOiBcImtvaTh1XCIsXG4gICAgXCJpYm0xMTY4XCI6IFwia29pOHVcIixcblxuICAgIFwic3RyazEwNDgyMDAyXCI6IFwicmsxMDQ4XCIsXG5cbiAgICBcInRjdm41NzEyXCI6IFwidGN2blwiLFxuICAgIFwidGN2bjU3MTIxXCI6IFwidGN2blwiLFxuXG4gICAgXCJnYjE5ODg4MFwiOiBcImlzbzY0NmNuXCIsXG4gICAgXCJjblwiOiBcImlzbzY0NmNuXCIsXG5cbiAgICBcImNzaXNvMTRqaXNjNjIyMHJvXCI6IFwiaXNvNjQ2anBcIixcbiAgICBcImppc2M2MjIwMTk2OXJvXCI6IFwiaXNvNjQ2anBcIixcbiAgICBcImpwXCI6IFwiaXNvNjQ2anBcIixcblxuICAgIFwiY3NocHJvbWFuOFwiOiBcImhwcm9tYW44XCIsXG4gICAgXCJyOFwiOiBcImhwcm9tYW44XCIsXG4gICAgXCJyb21hbjhcIjogXCJocHJvbWFuOFwiLFxuICAgIFwieHJvbWFuOFwiOiBcImhwcm9tYW44XCIsXG4gICAgXCJpYm0xMDUxXCI6IFwiaHByb21hbjhcIixcblxuICAgIFwibWFjXCI6IFwibWFjaW50b3NoXCIsXG4gICAgXCJjc21hY2ludG9zaFwiOiBcIm1hY2ludG9zaFwiLFxufTtcblxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG4vLyBHZW5lcmF0ZWQgZGF0YSBmb3Igc2JjcyBjb2RlYy4gRG9uJ3QgZWRpdCBtYW51YWxseS4gUmVnZW5lcmF0ZSB1c2luZyBnZW5lcmF0aW9uL2dlbi1zYmNzLmpzIHNjcmlwdC5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBcIjQzN1wiOiBcImNwNDM3XCIsXG4gIFwiNzM3XCI6IFwiY3A3MzdcIixcbiAgXCI3NzVcIjogXCJjcDc3NVwiLFxuICBcIjg1MFwiOiBcImNwODUwXCIsXG4gIFwiODUyXCI6IFwiY3A4NTJcIixcbiAgXCI4NTVcIjogXCJjcDg1NVwiLFxuICBcIjg1NlwiOiBcImNwODU2XCIsXG4gIFwiODU3XCI6IFwiY3A4NTdcIixcbiAgXCI4NThcIjogXCJjcDg1OFwiLFxuICBcIjg2MFwiOiBcImNwODYwXCIsXG4gIFwiODYxXCI6IFwiY3A4NjFcIixcbiAgXCI4NjJcIjogXCJjcDg2MlwiLFxuICBcIjg2M1wiOiBcImNwODYzXCIsXG4gIFwiODY0XCI6IFwiY3A4NjRcIixcbiAgXCI4NjVcIjogXCJjcDg2NVwiLFxuICBcIjg2NlwiOiBcImNwODY2XCIsXG4gIFwiODY5XCI6IFwiY3A4NjlcIixcbiAgXCI4NzRcIjogXCJ3aW5kb3dzODc0XCIsXG4gIFwiOTIyXCI6IFwiY3A5MjJcIixcbiAgXCIxMDQ2XCI6IFwiY3AxMDQ2XCIsXG4gIFwiMTEyNFwiOiBcImNwMTEyNFwiLFxuICBcIjExMjVcIjogXCJjcDExMjVcIixcbiAgXCIxMTI5XCI6IFwiY3AxMTI5XCIsXG4gIFwiMTEzM1wiOiBcImNwMTEzM1wiLFxuICBcIjExNjFcIjogXCJjcDExNjFcIixcbiAgXCIxMTYyXCI6IFwiY3AxMTYyXCIsXG4gIFwiMTE2M1wiOiBcImNwMTE2M1wiLFxuICBcIjEyNTBcIjogXCJ3aW5kb3dzMTI1MFwiLFxuICBcIjEyNTFcIjogXCJ3aW5kb3dzMTI1MVwiLFxuICBcIjEyNTJcIjogXCJ3aW5kb3dzMTI1MlwiLFxuICBcIjEyNTNcIjogXCJ3aW5kb3dzMTI1M1wiLFxuICBcIjEyNTRcIjogXCJ3aW5kb3dzMTI1NFwiLFxuICBcIjEyNTVcIjogXCJ3aW5kb3dzMTI1NVwiLFxuICBcIjEyNTZcIjogXCJ3aW5kb3dzMTI1NlwiLFxuICBcIjEyNTdcIjogXCJ3aW5kb3dzMTI1N1wiLFxuICBcIjEyNThcIjogXCJ3aW5kb3dzMTI1OFwiLFxuICBcIjI4NTkxXCI6IFwiaXNvODg1OTFcIixcbiAgXCIyODU5MlwiOiBcImlzbzg4NTkyXCIsXG4gIFwiMjg1OTNcIjogXCJpc284ODU5M1wiLFxuICBcIjI4NTk0XCI6IFwiaXNvODg1OTRcIixcbiAgXCIyODU5NVwiOiBcImlzbzg4NTk1XCIsXG4gIFwiMjg1OTZcIjogXCJpc284ODU5NlwiLFxuICBcIjI4NTk3XCI6IFwiaXNvODg1OTdcIixcbiAgXCIyODU5OFwiOiBcImlzbzg4NTk4XCIsXG4gIFwiMjg1OTlcIjogXCJpc284ODU5OVwiLFxuICBcIjI4NjAwXCI6IFwiaXNvODg1OTEwXCIsXG4gIFwiMjg2MDFcIjogXCJpc284ODU5MTFcIixcbiAgXCIyODYwM1wiOiBcImlzbzg4NTkxM1wiLFxuICBcIjI4NjA0XCI6IFwiaXNvODg1OTE0XCIsXG4gIFwiMjg2MDVcIjogXCJpc284ODU5MTVcIixcbiAgXCIyODYwNlwiOiBcImlzbzg4NTkxNlwiLFxuICBcIndpbmRvd3M4NzRcIjoge1xuICAgIFwidHlwZVwiOiBcIl9zYmNzXCIsXG4gICAgXCJjaGFyc1wiOiBcIlx1MjBBQ1x1RkZGRFx1RkZGRFx1RkZGRFx1RkZGRFx1MjAyNlx1RkZGRFx1RkZGRFx1RkZGRFx1RkZGRFx1RkZGRFx1RkZGRFx1RkZGRFx1RkZGRFx1RkZGRFx1RkZGRFx1RkZGRFx1MjAxOFx1MjAxOVx1MjAxQ1x1MjAxRFx1MjAyMlx1MjAxM1x1MjAxNFx1RkZGRFx1RkZGRFx1RkZGRFx1RkZGRFx1RkZGRFx1RkZGRFx1RkZGRFx1RkZGRFx1MDBBMFx1MEUwMVx1MEUwMlx1MEUwM1x1MEUwNFx1MEUwNVx1MEUwNlx1MEUwN1x1MEUwOFx1MEUwOVx1MEUwQVx1MEUwQlx1MEUwQ1x1MEUwRFx1MEUwRVx1MEUwRlx1MEUxMFx1MEUxMVx1MEUxMlx1MEUxM1x1MEUxNFx1MEUxNVx1MEUxNlx1MEUxN1x1MEUxOFx1MEUxOVx1MEUxQVx1MEUxQlx1MEUxQ1x1MEUxRFx1MEUxRVx1MEUxRlx1MEUyMFx1MEUyMVx1MEUyMlx1MEUyM1x1MEUyNFx1MEUyNVx1MEUyNlx1MEUyN1x1MEUyOFx1MEUyOVx1MEUyQVx1MEUyQlx1MEUyQ1x1MEUyRFx1MEUyRVx1MEUyRlx1MEUzMFx1MEUzMVx1MEUzMlx1MEUzM1x1MEUzNFx1MEUzNVx1MEUzNlx1MEUzN1x1MEUzOFx1MEUzOVx1MEUzQVx1RkZGRFx1RkZGRFx1RkZGRFx1RkZGRFx1MEUzRlx1MEU0MFx1MEU0MVx1MEU0Mlx1MEU0M1x1MEU0NFx1MEU0NVx1MEU0Nlx1MEU0N1x1MEU0OFx1MEU0OVx1MEU0QVx1MEU0Qlx1MEU0Q1x1MEU0RFx1MEU0RVx1MEU0Rlx1MEU1MFx1MEU1MVx1MEU1Mlx1MEU1M1x1MEU1NFx1MEU1NVx1MEU1Nlx1MEU1N1x1MEU1OFx1MEU1OVx1MEU1QVx1MEU1Qlx1RkZGRFx1RkZGRFx1RkZGRFx1RkZGRFwiXG4gIH0sXG4gIFwid2luODc0XCI6IFwid2luZG93czg3NFwiLFxuICBcImNwODc0XCI6IFwid2luZG93czg3NFwiLFxuICBcIndpbmRvd3MxMjUwXCI6IHtcbiAgICBcInR5cGVcIjogXCJfc2Jjc1wiLFxuICAgIFwiY2hhcnNcIjogXCJcdTIwQUNcdUZGRkRcdTIwMUFcdUZGRkRcdTIwMUVcdTIwMjZcdTIwMjBcdTIwMjFcdUZGRkRcdTIwMzBcdTAxNjBcdTIwMzlcdTAxNUFcdTAxNjRcdTAxN0RcdTAxNzlcdUZGRkRcdTIwMThcdTIwMTlcdTIwMUNcdTIwMURcdTIwMjJcdTIwMTNcdTIwMTRcdUZGRkRcdTIxMjJcdTAxNjFcdTIwM0FcdTAxNUJcdTAxNjVcdTAxN0VcdTAxN0FcdTAwQTBcdTAyQzdcdTAyRDhcdTAxNDFcdTAwQTRcdTAxMDRcdTAwQTZcdTAwQTdcdTAwQThcdTAwQTlcdTAxNUVcdTAwQUJcdTAwQUNcdTAwQURcdTAwQUVcdTAxN0JcdTAwQjBcdTAwQjFcdTAyREJcdTAxNDJcdTAwQjRcdTAwQjVcdTAwQjZcdTAwQjdcdTAwQjhcdTAxMDVcdTAxNUZcdTAwQkJcdTAxM0RcdTAyRERcdTAxM0VcdTAxN0NcdTAxNTRcdTAwQzFcdTAwQzJcdTAxMDJcdTAwQzRcdTAxMzlcdTAxMDZcdTAwQzdcdTAxMENcdTAwQzlcdTAxMThcdTAwQ0JcdTAxMUFcdTAwQ0RcdTAwQ0VcdTAxMEVcdTAxMTBcdTAxNDNcdTAxNDdcdTAwRDNcdTAwRDRcdTAxNTBcdTAwRDZcdTAwRDdcdTAxNThcdTAxNkVcdTAwREFcdTAxNzBcdTAwRENcdTAwRERcdTAxNjJcdTAwREZcdTAxNTVcdTAwRTFcdTAwRTJcdTAxMDNcdTAwRTRcdTAxM0FcdTAxMDdcdTAwRTdcdTAxMERcdTAwRTlcdTAxMTlcdTAwRUJcdTAxMUJcdTAwRURcdTAwRUVcdTAxMEZcdTAxMTFcdTAxNDRcdTAxNDhcdTAwRjNcdTAwRjRcdTAxNTFcdTAwRjZcdTAwRjdcdTAxNTlcdTAxNkZcdTAwRkFcdTAxNzFcdTAwRkNcdTAwRkRcdTAxNjNcdTAyRDlcIlxuICB9LFxuICBcIndpbjEyNTBcIjogXCJ3aW5kb3dzMTI1MFwiLFxuICBcImNwMTI1MFwiOiBcIndpbmRvd3MxMjUwXCIsXG4gIFwid2luZG93czEyNTFcIjoge1xuICAgIFwidHlwZVwiOiBcIl9zYmNzXCIsXG4gICAgXCJjaGFyc1wiOiBcIlx1MDQwMlx1MDQwM1x1MjAxQVx1MDQ1M1x1MjAxRVx1MjAyNlx1MjAyMFx1MjAyMVx1MjBBQ1x1MjAzMFx1MDQwOVx1MjAzOVx1MDQwQVx1MDQwQ1x1MDQwQlx1MDQwRlx1MDQ1Mlx1MjAxOFx1MjAxOVx1MjAxQ1x1MjAxRFx1MjAyMlx1MjAxM1x1MjAxNFx1RkZGRFx1MjEyMlx1MDQ1OVx1MjAzQVx1MDQ1QVx1MDQ1Q1x1MDQ1Qlx1MDQ1Rlx1MDBBMFx1MDQwRVx1MDQ1RVx1MDQwOFx1MDBBNFx1MDQ5MFx1MDBBNlx1MDBBN1x1MDQwMVx1MDBBOVx1MDQwNFx1MDBBQlx1MDBBQ1x1MDBBRFx1MDBBRVx1MDQwN1x1MDBCMFx1MDBCMVx1MDQwNlx1MDQ1Nlx1MDQ5MVx1MDBCNVx1MDBCNlx1MDBCN1x1MDQ1MVx1MjExNlx1MDQ1NFx1MDBCQlx1MDQ1OFx1MDQwNVx1MDQ1NVx1MDQ1N1x1MDQxMFx1MDQxMVx1MDQxMlx1MDQxM1x1MDQxNFx1MDQxNVx1MDQxNlx1MDQxN1x1MDQxOFx1MDQxOVx1MDQxQVx1MDQxQlx1MDQxQ1x1MDQxRFx1MDQxRVx1MDQxRlx1MDQyMFx1MDQyMVx1MDQyMlx1MDQyM1x1MDQyNFx1MDQyNVx1MDQyNlx1MDQyN1x1MDQyOFx1MDQyOVx1MDQyQVx1MDQyQlx1MDQyQ1x1MDQyRFx1MDQyRVx1MDQyRlx1MDQzMFx1MDQzMVx1MDQzMlx1MDQzM1x1MDQzNFx1MDQzNVx1MDQzNlx1MDQzN1x1MDQzOFx1MDQzOVx1MDQzQVx1MDQzQlx1MDQzQ1x1MDQzRFx1MDQzRVx1MDQzRlx1MDQ0MFx1MDQ0MVx1MDQ0Mlx1MDQ0M1x1MDQ0NFx1MDQ0NVx1MDQ0Nlx1MDQ0N1x1MDQ0OFx1MDQ0OVx1MDQ0QVx1MDQ0Qlx1MDQ0Q1x1MDQ0RFx1MDQ0RVx1MDQ0RlwiXG4gIH0sXG4gIFwid2luMTI1MVwiOiBcIndpbmRvd3MxMjUxXCIsXG4gIFwiY3AxMjUxXCI6IFwid2luZG93czEyNTFcIixcbiAgXCJ3aW5kb3dzMTI1MlwiOiB7XG4gICAgXCJ0eXBlXCI6IFwiX3NiY3NcIixcbiAgICBcImNoYXJzXCI6IFwiXHUyMEFDXHVGRkZEXHUyMDFBXHUwMTkyXHUyMDFFXHUyMDI2XHUyMDIwXHUyMDIxXHUwMkM2XHUyMDMwXHUwMTYwXHUyMDM5XHUwMTUyXHVGRkZEXHUwMTdEXHVGRkZEXHVGRkZEXHUyMDE4XHUyMDE5XHUyMDFDXHUyMDFEXHUyMDIyXHUyMDEzXHUyMDE0XHUwMkRDXHUyMTIyXHUwMTYxXHUyMDNBXHUwMTUzXHVGRkZEXHUwMTdFXHUwMTc4XHUwMEEwXHUwMEExXHUwMEEyXHUwMEEzXHUwMEE0XHUwMEE1XHUwMEE2XHUwMEE3XHUwMEE4XHUwMEE5XHUwMEFBXHUwMEFCXHUwMEFDXHUwMEFEXHUwMEFFXHUwMEFGXHUwMEIwXHUwMEIxXHUwMEIyXHUwMEIzXHUwMEI0XHUwMEI1XHUwMEI2XHUwMEI3XHUwMEI4XHUwMEI5XHUwMEJBXHUwMEJCXHUwMEJDXHUwMEJEXHUwMEJFXHUwMEJGXHUwMEMwXHUwMEMxXHUwMEMyXHUwMEMzXHUwMEM0XHUwMEM1XHUwMEM2XHUwMEM3XHUwMEM4XHUwMEM5XHUwMENBXHUwMENCXHUwMENDXHUwMENEXHUwMENFXHUwMENGXHUwMEQwXHUwMEQxXHUwMEQyXHUwMEQzXHUwMEQ0XHUwMEQ1XHUwMEQ2XHUwMEQ3XHUwMEQ4XHUwMEQ5XHUwMERBXHUwMERCXHUwMERDXHUwMEREXHUwMERFXHUwMERGXHUwMEUwXHUwMEUxXHUwMEUyXHUwMEUzXHUwMEU0XHUwMEU1XHUwMEU2XHUwMEU3XHUwMEU4XHUwMEU5XHUwMEVBXHUwMEVCXHUwMEVDXHUwMEVEXHUwMEVFXHUwMEVGXHUwMEYwXHUwMEYxXHUwMEYyXHUwMEYzXHUwMEY0XHUwMEY1XHUwMEY2XHUwMEY3XHUwMEY4XHUwMEY5XHUwMEZBXHUwMEZCXHUwMEZDXHUwMEZEXHUwMEZFXHUwMEZGXCJcbiAgfSxcbiAgXCJ3aW4xMjUyXCI6IFwid2luZG93czEyNTJcIixcbiAgXCJjcDEyNTJcIjogXCJ3aW5kb3dzMTI1MlwiLFxuICBcIndpbmRvd3MxMjUzXCI6IHtcbiAgICBcInR5cGVcIjogXCJfc2Jjc1wiLFxuICAgIFwiY2hhcnNcIjogXCJcdTIwQUNcdUZGRkRcdTIwMUFcdTAxOTJcdTIwMUVcdTIwMjZcdTIwMjBcdTIwMjFcdUZGRkRcdTIwMzBcdUZGRkRcdTIwMzlcdUZGRkRcdUZGRkRcdUZGRkRcdUZGRkRcdUZGRkRcdTIwMThcdTIwMTlcdTIwMUNcdTIwMURcdTIwMjJcdTIwMTNcdTIwMTRcdUZGRkRcdTIxMjJcdUZGRkRcdTIwM0FcdUZGRkRcdUZGRkRcdUZGRkRcdUZGRkRcdTAwQTBcdTAzODVcdTAzODZcdTAwQTNcdTAwQTRcdTAwQTVcdTAwQTZcdTAwQTdcdTAwQThcdTAwQTlcdUZGRkRcdTAwQUJcdTAwQUNcdTAwQURcdTAwQUVcdTIwMTVcdTAwQjBcdTAwQjFcdTAwQjJcdTAwQjNcdTAzODRcdTAwQjVcdTAwQjZcdTAwQjdcdTAzODhcdTAzODlcdTAzOEFcdTAwQkJcdTAzOENcdTAwQkRcdTAzOEVcdTAzOEZcdTAzOTBcdTAzOTFcdTAzOTJcdTAzOTNcdTAzOTRcdTAzOTVcdTAzOTZcdTAzOTdcdTAzOThcdTAzOTlcdTAzOUFcdTAzOUJcdTAzOUNcdTAzOURcdTAzOUVcdTAzOUZcdTAzQTBcdTAzQTFcdUZGRkRcdTAzQTNcdTAzQTRcdTAzQTVcdTAzQTZcdTAzQTdcdTAzQThcdTAzQTlcdTAzQUFcdTAzQUJcdTAzQUNcdTAzQURcdTAzQUVcdTAzQUZcdTAzQjBcdTAzQjFcdTAzQjJcdTAzQjNcdTAzQjRcdTAzQjVcdTAzQjZcdTAzQjdcdTAzQjhcdTAzQjlcdTAzQkFcdTAzQkJcdTAzQkNcdTAzQkRcdTAzQkVcdTAzQkZcdTAzQzBcdTAzQzFcdTAzQzJcdTAzQzNcdTAzQzRcdTAzQzVcdTAzQzZcdTAzQzdcdTAzQzhcdTAzQzlcdTAzQ0FcdTAzQ0JcdTAzQ0NcdTAzQ0RcdTAzQ0VcdUZGRkRcIlxuICB9LFxuICBcIndpbjEyNTNcIjogXCJ3aW5kb3dzMTI1M1wiLFxuICBcImNwMTI1M1wiOiBcIndpbmRvd3MxMjUzXCIsXG4gIFwid2luZG93czEyNTRcIjoge1xuICAgIFwidHlwZVwiOiBcIl9zYmNzXCIsXG4gICAgXCJjaGFyc1wiOiBcIlx1MjBBQ1x1RkZGRFx1MjAxQVx1MDE5Mlx1MjAxRVx1MjAyNlx1MjAyMFx1MjAyMVx1MDJDNlx1MjAzMFx1MDE2MFx1MjAzOVx1MDE1Mlx1RkZGRFx1RkZGRFx1RkZGRFx1RkZGRFx1MjAxOFx1MjAxOVx1MjAxQ1x1MjAxRFx1MjAyMlx1MjAxM1x1MjAxNFx1MDJEQ1x1MjEyMlx1MDE2MVx1MjAzQVx1MDE1M1x1RkZGRFx1RkZGRFx1MDE3OFx1MDBBMFx1MDBBMVx1MDBBMlx1MDBBM1x1MDBBNFx1MDBBNVx1MDBBNlx1MDBBN1x1MDBBOFx1MDBBOVx1MDBBQVx1MDBBQlx1MDBBQ1x1MDBBRFx1MDBBRVx1MDBBRlx1MDBCMFx1MDBCMVx1MDBCMlx1MDBCM1x1MDBCNFx1MDBCNVx1MDBCNlx1MDBCN1x1MDBCOFx1MDBCOVx1MDBCQVx1MDBCQlx1MDBCQ1x1MDBCRFx1MDBCRVx1MDBCRlx1MDBDMFx1MDBDMVx1MDBDMlx1MDBDM1x1MDBDNFx1MDBDNVx1MDBDNlx1MDBDN1x1MDBDOFx1MDBDOVx1MDBDQVx1MDBDQlx1MDBDQ1x1MDBDRFx1MDBDRVx1MDBDRlx1MDExRVx1MDBEMVx1MDBEMlx1MDBEM1x1MDBENFx1MDBENVx1MDBENlx1MDBEN1x1MDBEOFx1MDBEOVx1MDBEQVx1MDBEQlx1MDBEQ1x1MDEzMFx1MDE1RVx1MDBERlx1MDBFMFx1MDBFMVx1MDBFMlx1MDBFM1x1MDBFNFx1MDBFNVx1MDBFNlx1MDBFN1x1MDBFOFx1MDBFOVx1MDBFQVx1MDBFQlx1MDBFQ1x1MDBFRFx1MDBFRVx1MDBFRlx1MDExRlx1MDBGMVx1MDBGMlx1MDBGM1x1MDBGNFx1MDBGNVx1MDBGNlx1MDBGN1x1MDBGOFx1MDBGOVx1MDBGQVx1MDBGQlx1MDBGQ1x1MDEzMVx1MDE1Rlx1MDBGRlwiXG4gIH0sXG4gIFwid2luMTI1NFwiOiBcIndpbmRvd3MxMjU0XCIsXG4gIFwiY3AxMjU0XCI6IFwid2luZG93czEyNTRcIixcbiAgXCJ3aW5kb3dzMTI1NVwiOiB7XG4gICAgXCJ0eXBlXCI6IFwiX3NiY3NcIixcbiAgICBcImNoYXJzXCI6IFwiXHUyMEFDXHVGRkZEXHUyMDFBXHUwMTkyXHUyMDFFXHUyMDI2XHUyMDIwXHUyMDIxXHUwMkM2XHUyMDMwXHVGRkZEXHUyMDM5XHVGRkZEXHVGRkZEXHVGRkZEXHVGRkZEXHVGRkZEXHUyMDE4XHUyMDE5XHUyMDFDXHUyMDFEXHUyMDIyXHUyMDEzXHUyMDE0XHUwMkRDXHUyMTIyXHVGRkZEXHUyMDNBXHVGRkZEXHVGRkZEXHVGRkZEXHVGRkZEXHUwMEEwXHUwMEExXHUwMEEyXHUwMEEzXHUyMEFBXHUwMEE1XHUwMEE2XHUwMEE3XHUwMEE4XHUwMEE5XHUwMEQ3XHUwMEFCXHUwMEFDXHUwMEFEXHUwMEFFXHUwMEFGXHUwMEIwXHUwMEIxXHUwMEIyXHUwMEIzXHUwMEI0XHUwMEI1XHUwMEI2XHUwMEI3XHUwMEI4XHUwMEI5XHUwMEY3XHUwMEJCXHUwMEJDXHUwMEJEXHUwMEJFXHUwMEJGXHUwNUIwXHUwNUIxXHUwNUIyXHUwNUIzXHUwNUI0XHUwNUI1XHUwNUI2XHUwNUI3XHUwNUI4XHUwNUI5XHUwNUJBXHUwNUJCXHUwNUJDXHUwNUJEXHUwNUJFXHUwNUJGXHUwNUMwXHUwNUMxXHUwNUMyXHUwNUMzXHUwNUYwXHUwNUYxXHUwNUYyXHUwNUYzXHUwNUY0XHVGRkZEXHVGRkZEXHVGRkZEXHVGRkZEXHVGRkZEXHVGRkZEXHVGRkZEXHUwNUQwXHUwNUQxXHUwNUQyXHUwNUQzXHUwNUQ0XHUwNUQ1XHUwNUQ2XHUwNUQ3XHUwNUQ4XHUwNUQ5XHUwNURBXHUwNURCXHUwNURDXHUwNUREXHUwNURFXHUwNURGXHUwNUUwXHUwNUUxXHUwNUUyXHUwNUUzXHUwNUU0XHUwNUU1XHUwNUU2XHUwNUU3XHUwNUU4XHUwNUU5XHUwNUVBXHVGRkZEXHVGRkZEXHUyMDBFXHUyMDBGXHVGRkZEXCJcbiAgfSxcbiAgXCJ3aW4xMjU1XCI6IFwid2luZG93czEyNTVcIixcbiAgXCJjcDEyNTVcIjogXCJ3aW5kb3dzMTI1NVwiLFxuICBcIndpbmRvd3MxMjU2XCI6IHtcbiAgICBcInR5cGVcIjogXCJfc2Jjc1wiLFxuICAgIFwiY2hhcnNcIjogXCJcdTIwQUNcdTA2N0VcdTIwMUFcdTAxOTJcdTIwMUVcdTIwMjZcdTIwMjBcdTIwMjFcdTAyQzZcdTIwMzBcdTA2NzlcdTIwMzlcdTAxNTJcdTA2ODZcdTA2OThcdTA2ODhcdTA2QUZcdTIwMThcdTIwMTlcdTIwMUNcdTIwMURcdTIwMjJcdTIwMTNcdTIwMTRcdTA2QTlcdTIxMjJcdTA2OTFcdTIwM0FcdTAxNTNcdTIwMENcdTIwMERcdTA2QkFcdTAwQTBcdTA2MENcdTAwQTJcdTAwQTNcdTAwQTRcdTAwQTVcdTAwQTZcdTAwQTdcdTAwQThcdTAwQTlcdTA2QkVcdTAwQUJcdTAwQUNcdTAwQURcdTAwQUVcdTAwQUZcdTAwQjBcdTAwQjFcdTAwQjJcdTAwQjNcdTAwQjRcdTAwQjVcdTAwQjZcdTAwQjdcdTAwQjhcdTAwQjlcdTA2MUJcdTAwQkJcdTAwQkNcdTAwQkRcdTAwQkVcdTA2MUZcdTA2QzFcdTA2MjFcdTA2MjJcdTA2MjNcdTA2MjRcdTA2MjVcdTA2MjZcdTA2MjdcdTA2MjhcdTA2MjlcdTA2MkFcdTA2MkJcdTA2MkNcdTA2MkRcdTA2MkVcdTA2MkZcdTA2MzBcdTA2MzFcdTA2MzJcdTA2MzNcdTA2MzRcdTA2MzVcdTA2MzZcdTAwRDdcdTA2MzdcdTA2MzhcdTA2MzlcdTA2M0FcdTA2NDBcdTA2NDFcdTA2NDJcdTA2NDNcdTAwRTBcdTA2NDRcdTAwRTJcdTA2NDVcdTA2NDZcdTA2NDdcdTA2NDhcdTAwRTdcdTAwRThcdTAwRTlcdTAwRUFcdTAwRUJcdTA2NDlcdTA2NEFcdTAwRUVcdTAwRUZcdTA2NEJcdTA2NENcdTA2NERcdTA2NEVcdTAwRjRcdTA2NEZcdTA2NTBcdTAwRjdcdTA2NTFcdTAwRjlcdTA2NTJcdTAwRkJcdTAwRkNcdTIwMEVcdTIwMEZcdTA2RDJcIlxuICB9LFxuICBcIndpbjEyNTZcIjogXCJ3aW5kb3dzMTI1NlwiLFxuICBcImNwMTI1NlwiOiBcIndpbmRvd3MxMjU2XCIsXG4gIFwid2luZG93czEyNTdcIjoge1xuICAgIFwidHlwZVwiOiBcIl9zYmNzXCIsXG4gICAgXCJjaGFyc1wiOiBcIlx1MjBBQ1x1RkZGRFx1MjAxQVx1RkZGRFx1MjAxRVx1MjAyNlx1MjAyMFx1MjAyMVx1RkZGRFx1MjAzMFx1RkZGRFx1MjAzOVx1RkZGRFx1MDBBOFx1MDJDN1x1MDBCOFx1RkZGRFx1MjAxOFx1MjAxOVx1MjAxQ1x1MjAxRFx1MjAyMlx1MjAxM1x1MjAxNFx1RkZGRFx1MjEyMlx1RkZGRFx1MjAzQVx1RkZGRFx1MDBBRlx1MDJEQlx1RkZGRFx1MDBBMFx1RkZGRFx1MDBBMlx1MDBBM1x1MDBBNFx1RkZGRFx1MDBBNlx1MDBBN1x1MDBEOFx1MDBBOVx1MDE1Nlx1MDBBQlx1MDBBQ1x1MDBBRFx1MDBBRVx1MDBDNlx1MDBCMFx1MDBCMVx1MDBCMlx1MDBCM1x1MDBCNFx1MDBCNVx1MDBCNlx1MDBCN1x1MDBGOFx1MDBCOVx1MDE1N1x1MDBCQlx1MDBCQ1x1MDBCRFx1MDBCRVx1MDBFNlx1MDEwNFx1MDEyRVx1MDEwMFx1MDEwNlx1MDBDNFx1MDBDNVx1MDExOFx1MDExMlx1MDEwQ1x1MDBDOVx1MDE3OVx1MDExNlx1MDEyMlx1MDEzNlx1MDEyQVx1MDEzQlx1MDE2MFx1MDE0M1x1MDE0NVx1MDBEM1x1MDE0Q1x1MDBENVx1MDBENlx1MDBEN1x1MDE3Mlx1MDE0MVx1MDE1QVx1MDE2QVx1MDBEQ1x1MDE3Qlx1MDE3RFx1MDBERlx1MDEwNVx1MDEyRlx1MDEwMVx1MDEwN1x1MDBFNFx1MDBFNVx1MDExOVx1MDExM1x1MDEwRFx1MDBFOVx1MDE3QVx1MDExN1x1MDEyM1x1MDEzN1x1MDEyQlx1MDEzQ1x1MDE2MVx1MDE0NFx1MDE0Nlx1MDBGM1x1MDE0RFx1MDBGNVx1MDBGNlx1MDBGN1x1MDE3M1x1MDE0Mlx1MDE1Qlx1MDE2Qlx1MDBGQ1x1MDE3Q1x1MDE3RVx1MDJEOVwiXG4gIH0sXG4gIFwid2luMTI1N1wiOiBcIndpbmRvd3MxMjU3XCIsXG4gIFwiY3AxMjU3XCI6IFwid2luZG93czEyNTdcIixcbiAgXCJ3aW5kb3dzMTI1OFwiOiB7XG4gICAgXCJ0eXBlXCI6IFwiX3NiY3NcIixcbiAgICBcImNoYXJzXCI6IFwiXHUyMEFDXHVGRkZEXHUyMDFBXHUwMTkyXHUyMDFFXHUyMDI2XHUyMDIwXHUyMDIxXHUwMkM2XHUyMDMwXHVGRkZEXHUyMDM5XHUwMTUyXHVGRkZEXHVGRkZEXHVGRkZEXHVGRkZEXHUyMDE4XHUyMDE5XHUyMDFDXHUyMDFEXHUyMDIyXHUyMDEzXHUyMDE0XHUwMkRDXHUyMTIyXHVGRkZEXHUyMDNBXHUwMTUzXHVGRkZEXHVGRkZEXHUwMTc4XHUwMEEwXHUwMEExXHUwMEEyXHUwMEEzXHUwMEE0XHUwMEE1XHUwMEE2XHUwMEE3XHUwMEE4XHUwMEE5XHUwMEFBXHUwMEFCXHUwMEFDXHUwMEFEXHUwMEFFXHUwMEFGXHUwMEIwXHUwMEIxXHUwMEIyXHUwMEIzXHUwMEI0XHUwMEI1XHUwMEI2XHUwMEI3XHUwMEI4XHUwMEI5XHUwMEJBXHUwMEJCXHUwMEJDXHUwMEJEXHUwMEJFXHUwMEJGXHUwMEMwXHUwMEMxXHUwMEMyXHUwMTAyXHUwMEM0XHUwMEM1XHUwMEM2XHUwMEM3XHUwMEM4XHUwMEM5XHUwMENBXHUwMENCXHUwMzAwXHUwMENEXHUwMENFXHUwMENGXHUwMTEwXHUwMEQxXHUwMzA5XHUwMEQzXHUwMEQ0XHUwMUEwXHUwMEQ2XHUwMEQ3XHUwMEQ4XHUwMEQ5XHUwMERBXHUwMERCXHUwMERDXHUwMUFGXHUwMzAzXHUwMERGXHUwMEUwXHUwMEUxXHUwMEUyXHUwMTAzXHUwMEU0XHUwMEU1XHUwMEU2XHUwMEU3XHUwMEU4XHUwMEU5XHUwMEVBXHUwMEVCXHUwMzAxXHUwMEVEXHUwMEVFXHUwMEVGXHUwMTExXHUwMEYxXHUwMzIzXHUwMEYzXHUwMEY0XHUwMUExXHUwMEY2XHUwMEY3XHUwMEY4XHUwMEY5XHUwMEZBXHUwMEZCXHUwMEZDXHUwMUIwXHUyMEFCXHUwMEZGXCJcbiAgfSxcbiAgXCJ3aW4xMjU4XCI6IFwid2luZG93czEyNThcIixcbiAgXCJjcDEyNThcIjogXCJ3aW5kb3dzMTI1OFwiLFxuICBcImlzbzg4NTkxXCI6IHtcbiAgICBcInR5cGVcIjogXCJfc2Jjc1wiLFxuICAgIFwiY2hhcnNcIjogXCJcdTAwODBcdTAwODFcdTAwODJcdTAwODNcdTAwODRcdTAwODVcdTAwODZcdTAwODdcdTAwODhcdTAwODlcdTAwOEFcdTAwOEJcdTAwOENcdTAwOERcdTAwOEVcdTAwOEZcdTAwOTBcdTAwOTFcdTAwOTJcdTAwOTNcdTAwOTRcdTAwOTVcdTAwOTZcdTAwOTdcdTAwOThcdTAwOTlcdTAwOUFcdTAwOUJcdTAwOUNcdTAwOURcdTAwOUVcdTAwOUZcdTAwQTBcdTAwQTFcdTAwQTJcdTAwQTNcdTAwQTRcdTAwQTVcdTAwQTZcdTAwQTdcdTAwQThcdTAwQTlcdTAwQUFcdTAwQUJcdTAwQUNcdTAwQURcdTAwQUVcdTAwQUZcdTAwQjBcdTAwQjFcdTAwQjJcdTAwQjNcdTAwQjRcdTAwQjVcdTAwQjZcdTAwQjdcdTAwQjhcdTAwQjlcdTAwQkFcdTAwQkJcdTAwQkNcdTAwQkRcdTAwQkVcdTAwQkZcdTAwQzBcdTAwQzFcdTAwQzJcdTAwQzNcdTAwQzRcdTAwQzVcdTAwQzZcdTAwQzdcdTAwQzhcdTAwQzlcdTAwQ0FcdTAwQ0JcdTAwQ0NcdTAwQ0RcdTAwQ0VcdTAwQ0ZcdTAwRDBcdTAwRDFcdTAwRDJcdTAwRDNcdTAwRDRcdTAwRDVcdTAwRDZcdTAwRDdcdTAwRDhcdTAwRDlcdTAwREFcdTAwREJcdTAwRENcdTAwRERcdTAwREVcdTAwREZcdTAwRTBcdTAwRTFcdTAwRTJcdTAwRTNcdTAwRTRcdTAwRTVcdTAwRTZcdTAwRTdcdTAwRThcdTAwRTlcdTAwRUFcdTAwRUJcdTAwRUNcdTAwRURcdTAwRUVcdTAwRUZcdTAwRjBcdTAwRjFcdTAwRjJcdTAwRjNcdTAwRjRcdTAwRjVcdTAwRjZcdTAwRjdcdTAwRjhcdTAwRjlcdTAwRkFcdTAwRkJcdTAwRkNcdTAwRkRcdTAwRkVcdTAwRkZcIlxuICB9LFxuICBcImNwMjg1OTFcIjogXCJpc284ODU5MVwiLFxuICBcImlzbzg4NTkyXCI6IHtcbiAgICBcInR5cGVcIjogXCJfc2Jjc1wiLFxuICAgIFwiY2hhcnNcIjogXCJcdTAwODBcdTAwODFcdTAwODJcdTAwODNcdTAwODRcdTAwODVcdTAwODZcdTAwODdcdTAwODhcdTAwODlcdTAwOEFcdTAwOEJcdTAwOENcdTAwOERcdTAwOEVcdTAwOEZcdTAwOTBcdTAwOTFcdTAwOTJcdTAwOTNcdTAwOTRcdTAwOTVcdTAwOTZcdTAwOTdcdTAwOThcdTAwOTlcdTAwOUFcdTAwOUJcdTAwOUNcdTAwOURcdTAwOUVcdTAwOUZcdTAwQTBcdTAxMDRcdTAyRDhcdTAxNDFcdTAwQTRcdTAxM0RcdTAxNUFcdTAwQTdcdTAwQThcdTAxNjBcdTAxNUVcdTAxNjRcdTAxNzlcdTAwQURcdTAxN0RcdTAxN0JcdTAwQjBcdTAxMDVcdTAyREJcdTAxNDJcdTAwQjRcdTAxM0VcdTAxNUJcdTAyQzdcdTAwQjhcdTAxNjFcdTAxNUZcdTAxNjVcdTAxN0FcdTAyRERcdTAxN0VcdTAxN0NcdTAxNTRcdTAwQzFcdTAwQzJcdTAxMDJcdTAwQzRcdTAxMzlcdTAxMDZcdTAwQzdcdTAxMENcdTAwQzlcdTAxMThcdTAwQ0JcdTAxMUFcdTAwQ0RcdTAwQ0VcdTAxMEVcdTAxMTBcdTAxNDNcdTAxNDdcdTAwRDNcdTAwRDRcdTAxNTBcdTAwRDZcdTAwRDdcdTAxNThcdTAxNkVcdTAwREFcdTAxNzBcdTAwRENcdTAwRERcdTAxNjJcdTAwREZcdTAxNTVcdTAwRTFcdTAwRTJcdTAxMDNcdTAwRTRcdTAxM0FcdTAxMDdcdTAwRTdcdTAxMERcdTAwRTlcdTAxMTlcdTAwRUJcdTAxMUJcdTAwRURcdTAwRUVcdTAxMEZcdTAxMTFcdTAxNDRcdTAxNDhcdTAwRjNcdTAwRjRcdTAxNTFcdTAwRjZcdTAwRjdcdTAxNTlcdTAxNkZcdTAwRkFcdTAxNzFcdTAwRkNcdTAwRkRcdTAxNjNcdTAyRDlcIlxuICB9LFxuICBcImNwMjg1OTJcIjogXCJpc284ODU5MlwiLFxuICBcImlzbzg4NTkzXCI6IHtcbiAgICBcInR5cGVcIjogXCJfc2Jjc1wiLFxuICAgIFwiY2hhcnNcIjogXCJcdTAwODBcdTAwODFcdTAwODJcdTAwODNcdTAwODRcdTAwODVcdTAwODZcdTAwODdcdTAwODhcdTAwODlcdTAwOEFcdTAwOEJcdTAwOENcdTAwOERcdTAwOEVcdTAwOEZcdTAwOTBcdTAwOTFcdTAwOTJcdTAwOTNcdTAwOTRcdTAwOTVcdTAwOTZcdTAwOTdcdTAwOThcdTAwOTlcdTAwOUFcdTAwOUJcdTAwOUNcdTAwOURcdTAwOUVcdTAwOUZcdTAwQTBcdTAxMjZcdTAyRDhcdTAwQTNcdTAwQTRcdUZGRkRcdTAxMjRcdTAwQTdcdTAwQThcdTAxMzBcdTAxNUVcdTAxMUVcdTAxMzRcdTAwQURcdUZGRkRcdTAxN0JcdTAwQjBcdTAxMjdcdTAwQjJcdTAwQjNcdTAwQjRcdTAwQjVcdTAxMjVcdTAwQjdcdTAwQjhcdTAxMzFcdTAxNUZcdTAxMUZcdTAxMzVcdTAwQkRcdUZGRkRcdTAxN0NcdTAwQzBcdTAwQzFcdTAwQzJcdUZGRkRcdTAwQzRcdTAxMEFcdTAxMDhcdTAwQzdcdTAwQzhcdTAwQzlcdTAwQ0FcdTAwQ0JcdTAwQ0NcdTAwQ0RcdTAwQ0VcdTAwQ0ZcdUZGRkRcdTAwRDFcdTAwRDJcdTAwRDNcdTAwRDRcdTAxMjBcdTAwRDZcdTAwRDdcdTAxMUNcdTAwRDlcdTAwREFcdTAwREJcdTAwRENcdTAxNkNcdTAxNUNcdTAwREZcdTAwRTBcdTAwRTFcdTAwRTJcdUZGRkRcdTAwRTRcdTAxMEJcdTAxMDlcdTAwRTdcdTAwRThcdTAwRTlcdTAwRUFcdTAwRUJcdTAwRUNcdTAwRURcdTAwRUVcdTAwRUZcdUZGRkRcdTAwRjFcdTAwRjJcdTAwRjNcdTAwRjRcdTAxMjFcdTAwRjZcdTAwRjdcdTAxMURcdTAwRjlcdTAwRkFcdTAwRkJcdTAwRkNcdTAxNkRcdTAxNURcdTAyRDlcIlxuICB9LFxuICBcImNwMjg1OTNcIjogXCJpc284ODU5M1wiLFxuICBcImlzbzg4NTk0XCI6IHtcbiAgICBcInR5cGVcIjogXCJfc2Jjc1wiLFxuICAgIFwiY2hhcnNcIjogXCJcdTAwODBcdTAwODFcdTAwODJcdTAwODNcdTAwODRcdTAwODVcdTAwODZcdTAwODdcdTAwODhcdTAwODlcdTAwOEFcdTAwOEJcdTAwOENcdTAwOERcdTAwOEVcdTAwOEZcdTAwOTBcdTAwOTFcdTAwOTJcdTAwOTNcdTAwOTRcdTAwOTVcdTAwOTZcdTAwOTdcdTAwOThcdTAwOTlcdTAwOUFcdTAwOUJcdTAwOUNcdTAwOURcdTAwOUVcdTAwOUZcdTAwQTBcdTAxMDRcdTAxMzhcdTAxNTZcdTAwQTRcdTAxMjhcdTAxM0JcdTAwQTdcdTAwQThcdTAxNjBcdTAxMTJcdTAxMjJcdTAxNjZcdTAwQURcdTAxN0RcdTAwQUZcdTAwQjBcdTAxMDVcdTAyREJcdTAxNTdcdTAwQjRcdTAxMjlcdTAxM0NcdTAyQzdcdTAwQjhcdTAxNjFcdTAxMTNcdTAxMjNcdTAxNjdcdTAxNEFcdTAxN0VcdTAxNEJcdTAxMDBcdTAwQzFcdTAwQzJcdTAwQzNcdTAwQzRcdTAwQzVcdTAwQzZcdTAxMkVcdTAxMENcdTAwQzlcdTAxMThcdTAwQ0JcdTAxMTZcdTAwQ0RcdTAwQ0VcdTAxMkFcdTAxMTBcdTAxNDVcdTAxNENcdTAxMzZcdTAwRDRcdTAwRDVcdTAwRDZcdTAwRDdcdTAwRDhcdTAxNzJcdTAwREFcdTAwREJcdTAwRENcdTAxNjhcdTAxNkFcdTAwREZcdTAxMDFcdTAwRTFcdTAwRTJcdTAwRTNcdTAwRTRcdTAwRTVcdTAwRTZcdTAxMkZcdTAxMERcdTAwRTlcdTAxMTlcdTAwRUJcdTAxMTdcdTAwRURcdTAwRUVcdTAxMkJcdTAxMTFcdTAxNDZcdTAxNERcdTAxMzdcdTAwRjRcdTAwRjVcdTAwRjZcdTAwRjdcdTAwRjhcdTAxNzNcdTAwRkFcdTAwRkJcdTAwRkNcdTAxNjlcdTAxNkJcdTAyRDlcIlxuICB9LFxuICBcImNwMjg1OTRcIjogXCJpc284ODU5NFwiLFxuICBcImlzbzg4NTk1XCI6IHtcbiAgICBcInR5cGVcIjogXCJfc2Jjc1wiLFxuICAgIFwiY2hhcnNcIjogXCJcdTAwODBcdTAwODFcdTAwODJcdTAwODNcdTAwODRcdTAwODVcdTAwODZcdTAwODdcdTAwODhcdTAwODlcdTAwOEFcdTAwOEJcdTAwOENcdTAwOERcdTAwOEVcdTAwOEZcdTAwOTBcdTAwOTFcdTAwOTJcdTAwOTNcdTAwOTRcdTAwOTVcdTAwOTZcdTAwOTdcdTAwOThcdTAwOTlcdTAwOUFcdTAwOUJcdTAwOUNcdTAwOURcdTAwOUVcdTAwOUZcdTAwQTBcdTA0MDFcdTA0MDJcdTA0MDNcdTA0MDRcdTA0MDVcdTA0MDZcdTA0MDdcdTA0MDhcdTA0MDlcdTA0MEFcdTA0MEJcdTA0MENcdTAwQURcdTA0MEVcdTA0MEZcdTA0MTBcdTA0MTFcdTA0MTJcdTA0MTNcdTA0MTRcdTA0MTVcdTA0MTZcdTA0MTdcdTA0MThcdTA0MTlcdTA0MUFcdTA0MUJcdTA0MUNcdTA0MURcdTA0MUVcdTA0MUZcdTA0MjBcdTA0MjFcdTA0MjJcdTA0MjNcdTA0MjRcdTA0MjVcdTA0MjZcdTA0MjdcdTA0MjhcdTA0MjlcdTA0MkFcdTA0MkJcdTA0MkNcdTA0MkRcdTA0MkVcdTA0MkZcdTA0MzBcdTA0MzFcdTA0MzJcdTA0MzNcdTA0MzRcdTA0MzVcdTA0MzZcdTA0MzdcdTA0MzhcdTA0MzlcdTA0M0FcdTA0M0JcdTA0M0NcdTA0M0RcdTA0M0VcdTA0M0ZcdTA0NDBcdTA0NDFcdTA0NDJcdTA0NDNcdTA0NDRcdTA0NDVcdTA0NDZcdTA0NDdcdTA0NDhcdTA0NDlcdTA0NEFcdTA0NEJcdTA0NENcdTA0NERcdTA0NEVcdTA0NEZcdTIxMTZcdTA0NTFcdTA0NTJcdTA0NTNcdTA0NTRcdTA0NTVcdTA0NTZcdTA0NTdcdTA0NThcdTA0NTlcdTA0NUFcdTA0NUJcdTA0NUNcdTAwQTdcdTA0NUVcdTA0NUZcIlxuICB9LFxuICBcImNwMjg1OTVcIjogXCJpc284ODU5NVwiLFxuICBcImlzbzg4NTk2XCI6IHtcbiAgICBcInR5cGVcIjogXCJfc2Jjc1wiLFxuICAgIFwiY2hhcnNcIjogXCJcdTAwODBcdTAwODFcdTAwODJcdTAwODNcdTAwODRcdTAwODVcdTAwODZcdTAwODdcdTAwODhcdTAwODlcdTAwOEFcdTAwOEJcdTAwOENcdTAwOERcdTAwOEVcdTAwOEZcdTAwOTBcdTAwOTFcdTAwOTJcdTAwOTNcdTAwOTRcdTAwOTVcdTAwOTZcdTAwOTdcdTAwOThcdTAwOTlcdTAwOUFcdTAwOUJcdTAwOUNcdTAwOURcdTAwOUVcdTAwOUZcdTAwQTBcdUZGRkRcdUZGRkRcdUZGRkRcdTAwQTRcdUZGRkRcdUZGRkRcdUZGRkRcdUZGRkRcdUZGRkRcdUZGRkRcdUZGRkRcdTA2MENcdTAwQURcdUZGRkRcdUZGRkRcdUZGRkRcdUZGRkRcdUZGRkRcdUZGRkRcdUZGRkRcdUZGRkRcdUZGRkRcdUZGRkRcdUZGRkRcdUZGRkRcdUZGRkRcdTA2MUJcdUZGRkRcdUZGRkRcdUZGRkRcdTA2MUZcdUZGRkRcdTA2MjFcdTA2MjJcdTA2MjNcdTA2MjRcdTA2MjVcdTA2MjZcdTA2MjdcdTA2MjhcdTA2MjlcdTA2MkFcdTA2MkJcdTA2MkNcdTA2MkRcdTA2MkVcdTA2MkZcdTA2MzBcdTA2MzFcdTA2MzJcdTA2MzNcdTA2MzRcdTA2MzVcdTA2MzZcdTA2MzdcdTA2MzhcdTA2MzlcdTA2M0FcdUZGRkRcdUZGRkRcdUZGRkRcdUZGRkRcdUZGRkRcdTA2NDBcdTA2NDFcdTA2NDJcdTA2NDNcdTA2NDRcdTA2NDVcdTA2NDZcdTA2NDdcdTA2NDhcdTA2NDlcdTA2NEFcdTA2NEJcdTA2NENcdTA2NERcdTA2NEVcdTA2NEZcdTA2NTBcdTA2NTFcdTA2NTJcdUZGRkRcdUZGRkRcdUZGRkRcdUZGRkRcdUZGRkRcdUZGRkRcdUZGRkRcdUZGRkRcdUZGRkRcdUZGRkRcdUZGRkRcdUZGRkRcdUZGRkRcIlxuICB9LFxuICBcImNwMjg1OTZcIjogXCJpc284ODU5NlwiLFxuICBcImlzbzg4NTk3XCI6IHtcbiAgICBcInR5cGVcIjogXCJfc2Jjc1wiLFxuICAgIFwiY2hhcnNcIjogXCJcdTAwODBcdTAwODFcdTAwODJcdTAwODNcdTAwODRcdTAwODVcdTAwODZcdTAwODdcdTAwODhcdTAwODlcdTAwOEFcdTAwOEJcdTAwOENcdTAwOERcdTAwOEVcdTAwOEZcdTAwOTBcdTAwOTFcdTAwOTJcdTAwOTNcdTAwOTRcdTAwOTVcdTAwOTZcdTAwOTdcdTAwOThcdTAwOTlcdTAwOUFcdTAwOUJcdTAwOUNcdTAwOURcdTAwOUVcdTAwOUZcdTAwQTBcdTIwMThcdTIwMTlcdTAwQTNcdTIwQUNcdTIwQUZcdTAwQTZcdTAwQTdcdTAwQThcdTAwQTlcdTAzN0FcdTAwQUJcdTAwQUNcdTAwQURcdUZGRkRcdTIwMTVcdTAwQjBcdTAwQjFcdTAwQjJcdTAwQjNcdTAzODRcdTAzODVcdTAzODZcdTAwQjdcdTAzODhcdTAzODlcdTAzOEFcdTAwQkJcdTAzOENcdTAwQkRcdTAzOEVcdTAzOEZcdTAzOTBcdTAzOTFcdTAzOTJcdTAzOTNcdTAzOTRcdTAzOTVcdTAzOTZcdTAzOTdcdTAzOThcdTAzOTlcdTAzOUFcdTAzOUJcdTAzOUNcdTAzOURcdTAzOUVcdTAzOUZcdTAzQTBcdTAzQTFcdUZGRkRcdTAzQTNcdTAzQTRcdTAzQTVcdTAzQTZcdTAzQTdcdTAzQThcdTAzQTlcdTAzQUFcdTAzQUJcdTAzQUNcdTAzQURcdTAzQUVcdTAzQUZcdTAzQjBcdTAzQjFcdTAzQjJcdTAzQjNcdTAzQjRcdTAzQjVcdTAzQjZcdTAzQjdcdTAzQjhcdTAzQjlcdTAzQkFcdTAzQkJcdTAzQkNcdTAzQkRcdTAzQkVcdTAzQkZcdTAzQzBcdTAzQzFcdTAzQzJcdTAzQzNcdTAzQzRcdTAzQzVcdTAzQzZcdTAzQzdcdTAzQzhcdTAzQzlcdTAzQ0FcdTAzQ0JcdTAzQ0NcdTAzQ0RcdTAzQ0VcdUZGRkRcIlxuICB9LFxuICBcImNwMjg1OTdcIjogXCJpc284ODU5N1wiLFxuICBcImlzbzg4NTk4XCI6IHtcbiAgICBcInR5cGVcIjogXCJfc2Jjc1wiLFxuICAgIFwiY2hhcnNcIjogXCJcdTAwODBcdTAwODFcdTAwODJcdTAwODNcdTAwODRcdTAwODVcdTAwODZcdTAwODdcdTAwODhcdTAwODlcdTAwOEFcdTAwOEJcdTAwOENcdTAwOERcdTAwOEVcdTAwOEZcdTAwOTBcdTAwOTFcdTAwOTJcdTAwOTNcdTAwOTRcdTAwOTVcdTAwOTZcdTAwOTdcdTAwOThcdTAwOTlcdTAwOUFcdTAwOUJcdTAwOUNcdTAwOURcdTAwOUVcdTAwOUZcdTAwQTBcdUZGRkRcdTAwQTJcdTAwQTNcdTAwQTRcdTAwQTVcdTAwQTZcdTAwQTdcdTAwQThcdTAwQTlcdTAwRDdcdTAwQUJcdTAwQUNcdTAwQURcdTAwQUVcdTAwQUZcdTAwQjBcdTAwQjFcdTAwQjJcdTAwQjNcdTAwQjRcdTAwQjVcdTAwQjZcdTAwQjdcdTAwQjhcdTAwQjlcdTAwRjdcdTAwQkJcdTAwQkNcdTAwQkRcdTAwQkVcdUZGRkRcdUZGRkRcdUZGRkRcdUZGRkRcdUZGRkRcdUZGRkRcdUZGRkRcdUZGRkRcdUZGRkRcdUZGRkRcdUZGRkRcdUZGRkRcdUZGRkRcdUZGRkRcdUZGRkRcdUZGRkRcdUZGRkRcdUZGRkRcdUZGRkRcdUZGRkRcdUZGRkRcdUZGRkRcdUZGRkRcdUZGRkRcdUZGRkRcdUZGRkRcdUZGRkRcdUZGRkRcdUZGRkRcdUZGRkRcdUZGRkRcdUZGRkRcdTIwMTdcdTA1RDBcdTA1RDFcdTA1RDJcdTA1RDNcdTA1RDRcdTA1RDVcdTA1RDZcdTA1RDdcdTA1RDhcdTA1RDlcdTA1REFcdTA1REJcdTA1RENcdTA1RERcdTA1REVcdTA1REZcdTA1RTBcdTA1RTFcdTA1RTJcdTA1RTNcdTA1RTRcdTA1RTVcdTA1RTZcdTA1RTdcdTA1RThcdTA1RTlcdTA1RUFcdUZGRkRcdUZGRkRcdTIwMEVcdTIwMEZcdUZGRkRcIlxuICB9LFxuICBcImNwMjg1OThcIjogXCJpc284ODU5OFwiLFxuICBcImlzbzg4NTk5XCI6IHtcbiAgICBcInR5cGVcIjogXCJfc2Jjc1wiLFxuICAgIFwiY2hhcnNcIjogXCJcdTAwODBcdTAwODFcdTAwODJcdTAwODNcdTAwODRcdTAwODVcdTAwODZcdTAwODdcdTAwODhcdTAwODlcdTAwOEFcdTAwOEJcdTAwOENcdTAwOERcdTAwOEVcdTAwOEZcdTAwOTBcdTAwOTFcdTAwOTJcdTAwOTNcdTAwOTRcdTAwOTVcdTAwOTZcdTAwOTdcdTAwOThcdTAwOTlcdTAwOUFcdTAwOUJcdTAwOUNcdTAwOURcdTAwOUVcdTAwOUZcdTAwQTBcdTAwQTFcdTAwQTJcdTAwQTNcdTAwQTRcdTAwQTVcdTAwQTZcdTAwQTdcdTAwQThcdTAwQTlcdTAwQUFcdTAwQUJcdTAwQUNcdTAwQURcdTAwQUVcdTAwQUZcdTAwQjBcdTAwQjFcdTAwQjJcdTAwQjNcdTAwQjRcdTAwQjVcdTAwQjZcdTAwQjdcdTAwQjhcdTAwQjlcdTAwQkFcdTAwQkJcdTAwQkNcdTAwQkRcdTAwQkVcdTAwQkZcdTAwQzBcdTAwQzFcdTAwQzJcdTAwQzNcdTAwQzRcdTAwQzVcdTAwQzZcdTAwQzdcdTAwQzhcdTAwQzlcdTAwQ0FcdTAwQ0JcdTAwQ0NcdTAwQ0RcdTAwQ0VcdTAwQ0ZcdTAxMUVcdTAwRDFcdTAwRDJcdTAwRDNcdTAwRDRcdTAwRDVcdTAwRDZcdTAwRDdcdTAwRDhcdTAwRDlcdTAwREFcdTAwREJcdTAwRENcdTAxMzBcdTAxNUVcdTAwREZcdTAwRTBcdTAwRTFcdTAwRTJcdTAwRTNcdTAwRTRcdTAwRTVcdTAwRTZcdTAwRTdcdTAwRThcdTAwRTlcdTAwRUFcdTAwRUJcdTAwRUNcdTAwRURcdTAwRUVcdTAwRUZcdTAxMUZcdTAwRjFcdTAwRjJcdTAwRjNcdTAwRjRcdTAwRjVcdTAwRjZcdTAwRjdcdTAwRjhcdTAwRjlcdTAwRkFcdTAwRkJcdTAwRkNcdTAxMzFcdTAxNUZcdTAwRkZcIlxuICB9LFxuICBcImNwMjg1OTlcIjogXCJpc284ODU5OVwiLFxuICBcImlzbzg4NTkxMFwiOiB7XG4gICAgXCJ0eXBlXCI6IFwiX3NiY3NcIixcbiAgICBcImNoYXJzXCI6IFwiXHUwMDgwXHUwMDgxXHUwMDgyXHUwMDgzXHUwMDg0XHUwMDg1XHUwMDg2XHUwMDg3XHUwMDg4XHUwMDg5XHUwMDhBXHUwMDhCXHUwMDhDXHUwMDhEXHUwMDhFXHUwMDhGXHUwMDkwXHUwMDkxXHUwMDkyXHUwMDkzXHUwMDk0XHUwMDk1XHUwMDk2XHUwMDk3XHUwMDk4XHUwMDk5XHUwMDlBXHUwMDlCXHUwMDlDXHUwMDlEXHUwMDlFXHUwMDlGXHUwMEEwXHUwMTA0XHUwMTEyXHUwMTIyXHUwMTJBXHUwMTI4XHUwMTM2XHUwMEE3XHUwMTNCXHUwMTEwXHUwMTYwXHUwMTY2XHUwMTdEXHUwMEFEXHUwMTZBXHUwMTRBXHUwMEIwXHUwMTA1XHUwMTEzXHUwMTIzXHUwMTJCXHUwMTI5XHUwMTM3XHUwMEI3XHUwMTNDXHUwMTExXHUwMTYxXHUwMTY3XHUwMTdFXHUyMDE1XHUwMTZCXHUwMTRCXHUwMTAwXHUwMEMxXHUwMEMyXHUwMEMzXHUwMEM0XHUwMEM1XHUwMEM2XHUwMTJFXHUwMTBDXHUwMEM5XHUwMTE4XHUwMENCXHUwMTE2XHUwMENEXHUwMENFXHUwMENGXHUwMEQwXHUwMTQ1XHUwMTRDXHUwMEQzXHUwMEQ0XHUwMEQ1XHUwMEQ2XHUwMTY4XHUwMEQ4XHUwMTcyXHUwMERBXHUwMERCXHUwMERDXHUwMEREXHUwMERFXHUwMERGXHUwMTAxXHUwMEUxXHUwMEUyXHUwMEUzXHUwMEU0XHUwMEU1XHUwMEU2XHUwMTJGXHUwMTBEXHUwMEU5XHUwMTE5XHUwMEVCXHUwMTE3XHUwMEVEXHUwMEVFXHUwMEVGXHUwMEYwXHUwMTQ2XHUwMTREXHUwMEYzXHUwMEY0XHUwMEY1XHUwMEY2XHUwMTY5XHUwMEY4XHUwMTczXHUwMEZBXHUwMEZCXHUwMEZDXHUwMEZEXHUwMEZFXHUwMTM4XCJcbiAgfSxcbiAgXCJjcDI4NjAwXCI6IFwiaXNvODg1OTEwXCIsXG4gIFwiaXNvODg1OTExXCI6IHtcbiAgICBcInR5cGVcIjogXCJfc2Jjc1wiLFxuICAgIFwiY2hhcnNcIjogXCJcdTAwODBcdTAwODFcdTAwODJcdTAwODNcdTAwODRcdTAwODVcdTAwODZcdTAwODdcdTAwODhcdTAwODlcdTAwOEFcdTAwOEJcdTAwOENcdTAwOERcdTAwOEVcdTAwOEZcdTAwOTBcdTAwOTFcdTAwOTJcdTAwOTNcdTAwOTRcdTAwOTVcdTAwOTZcdTAwOTdcdTAwOThcdTAwOTlcdTAwOUFcdTAwOUJcdTAwOUNcdTAwOURcdTAwOUVcdTAwOUZcdTAwQTBcdTBFMDFcdTBFMDJcdTBFMDNcdTBFMDRcdTBFMDVcdTBFMDZcdTBFMDdcdTBFMDhcdTBFMDlcdTBFMEFcdTBFMEJcdTBFMENcdTBFMERcdTBFMEVcdTBFMEZcdTBFMTBcdTBFMTFcdTBFMTJcdTBFMTNcdTBFMTRcdTBFMTVcdTBFMTZcdTBFMTdcdTBFMThcdTBFMTlcdTBFMUFcdTBFMUJcdTBFMUNcdTBFMURcdTBFMUVcdTBFMUZcdTBFMjBcdTBFMjFcdTBFMjJcdTBFMjNcdTBFMjRcdTBFMjVcdTBFMjZcdTBFMjdcdTBFMjhcdTBFMjlcdTBFMkFcdTBFMkJcdTBFMkNcdTBFMkRcdTBFMkVcdTBFMkZcdTBFMzBcdTBFMzFcdTBFMzJcdTBFMzNcdTBFMzRcdTBFMzVcdTBFMzZcdTBFMzdcdTBFMzhcdTBFMzlcdTBFM0FcdUZGRkRcdUZGRkRcdUZGRkRcdUZGRkRcdTBFM0ZcdTBFNDBcdTBFNDFcdTBFNDJcdTBFNDNcdTBFNDRcdTBFNDVcdTBFNDZcdTBFNDdcdTBFNDhcdTBFNDlcdTBFNEFcdTBFNEJcdTBFNENcdTBFNERcdTBFNEVcdTBFNEZcdTBFNTBcdTBFNTFcdTBFNTJcdTBFNTNcdTBFNTRcdTBFNTVcdTBFNTZcdTBFNTdcdTBFNThcdTBFNTlcdTBFNUFcdTBFNUJcdUZGRkRcdUZGRkRcdUZGRkRcdUZGRkRcIlxuICB9LFxuICBcImNwMjg2MDFcIjogXCJpc284ODU5MTFcIixcbiAgXCJpc284ODU5MTNcIjoge1xuICAgIFwidHlwZVwiOiBcIl9zYmNzXCIsXG4gICAgXCJjaGFyc1wiOiBcIlx1MDA4MFx1MDA4MVx1MDA4Mlx1MDA4M1x1MDA4NFx1MDA4NVx1MDA4Nlx1MDA4N1x1MDA4OFx1MDA4OVx1MDA4QVx1MDA4Qlx1MDA4Q1x1MDA4RFx1MDA4RVx1MDA4Rlx1MDA5MFx1MDA5MVx1MDA5Mlx1MDA5M1x1MDA5NFx1MDA5NVx1MDA5Nlx1MDA5N1x1MDA5OFx1MDA5OVx1MDA5QVx1MDA5Qlx1MDA5Q1x1MDA5RFx1MDA5RVx1MDA5Rlx1MDBBMFx1MjAxRFx1MDBBMlx1MDBBM1x1MDBBNFx1MjAxRVx1MDBBNlx1MDBBN1x1MDBEOFx1MDBBOVx1MDE1Nlx1MDBBQlx1MDBBQ1x1MDBBRFx1MDBBRVx1MDBDNlx1MDBCMFx1MDBCMVx1MDBCMlx1MDBCM1x1MjAxQ1x1MDBCNVx1MDBCNlx1MDBCN1x1MDBGOFx1MDBCOVx1MDE1N1x1MDBCQlx1MDBCQ1x1MDBCRFx1MDBCRVx1MDBFNlx1MDEwNFx1MDEyRVx1MDEwMFx1MDEwNlx1MDBDNFx1MDBDNVx1MDExOFx1MDExMlx1MDEwQ1x1MDBDOVx1MDE3OVx1MDExNlx1MDEyMlx1MDEzNlx1MDEyQVx1MDEzQlx1MDE2MFx1MDE0M1x1MDE0NVx1MDBEM1x1MDE0Q1x1MDBENVx1MDBENlx1MDBEN1x1MDE3Mlx1MDE0MVx1MDE1QVx1MDE2QVx1MDBEQ1x1MDE3Qlx1MDE3RFx1MDBERlx1MDEwNVx1MDEyRlx1MDEwMVx1MDEwN1x1MDBFNFx1MDBFNVx1MDExOVx1MDExM1x1MDEwRFx1MDBFOVx1MDE3QVx1MDExN1x1MDEyM1x1MDEzN1x1MDEyQlx1MDEzQ1x1MDE2MVx1MDE0NFx1MDE0Nlx1MDBGM1x1MDE0RFx1MDBGNVx1MDBGNlx1MDBGN1x1MDE3M1x1MDE0Mlx1MDE1Qlx1MDE2Qlx1MDBGQ1x1MDE3Q1x1MDE3RVx1MjAxOVwiXG4gIH0sXG4gIFwiY3AyODYwM1wiOiBcImlzbzg4NTkxM1wiLFxuICBcImlzbzg4NTkxNFwiOiB7XG4gICAgXCJ0eXBlXCI6IFwiX3NiY3NcIixcbiAgICBcImNoYXJzXCI6IFwiXHUwMDgwXHUwMDgxXHUwMDgyXHUwMDgzXHUwMDg0XHUwMDg1XHUwMDg2XHUwMDg3XHUwMDg4XHUwMDg5XHUwMDhBXHUwMDhCXHUwMDhDXHUwMDhEXHUwMDhFXHUwMDhGXHUwMDkwXHUwMDkxXHUwMDkyXHUwMDkzXHUwMDk0XHUwMDk1XHUwMDk2XHUwMDk3XHUwMDk4XHUwMDk5XHUwMDlBXHUwMDlCXHUwMDlDXHUwMDlEXHUwMDlFXHUwMDlGXHUwMEEwXHUxRTAyXHUxRTAzXHUwMEEzXHUwMTBBXHUwMTBCXHUxRTBBXHUwMEE3XHUxRTgwXHUwMEE5XHUxRTgyXHUxRTBCXHUxRUYyXHUwMEFEXHUwMEFFXHUwMTc4XHUxRTFFXHUxRTFGXHUwMTIwXHUwMTIxXHUxRTQwXHUxRTQxXHUwMEI2XHUxRTU2XHUxRTgxXHUxRTU3XHUxRTgzXHUxRTYwXHUxRUYzXHUxRTg0XHUxRTg1XHUxRTYxXHUwMEMwXHUwMEMxXHUwMEMyXHUwMEMzXHUwMEM0XHUwMEM1XHUwMEM2XHUwMEM3XHUwMEM4XHUwMEM5XHUwMENBXHUwMENCXHUwMENDXHUwMENEXHUwMENFXHUwMENGXHUwMTc0XHUwMEQxXHUwMEQyXHUwMEQzXHUwMEQ0XHUwMEQ1XHUwMEQ2XHUxRTZBXHUwMEQ4XHUwMEQ5XHUwMERBXHUwMERCXHUwMERDXHUwMEREXHUwMTc2XHUwMERGXHUwMEUwXHUwMEUxXHUwMEUyXHUwMEUzXHUwMEU0XHUwMEU1XHUwMEU2XHUwMEU3XHUwMEU4XHUwMEU5XHUwMEVBXHUwMEVCXHUwMEVDXHUwMEVEXHUwMEVFXHUwMEVGXHUwMTc1XHUwMEYxXHUwMEYyXHUwMEYzXHUwMEY0XHUwMEY1XHUwMEY2XHUxRTZCXHUwMEY4XHUwMEY5XHUwMEZBXHUwMEZCXHUwMEZDXHUwMEZEXHUwMTc3XHUwMEZGXCJcbiAgfSxcbiAgXCJjcDI4NjA0XCI6IFwiaXNvODg1OTE0XCIsXG4gIFwiaXNvODg1OTE1XCI6IHtcbiAgICBcInR5cGVcIjogXCJfc2Jjc1wiLFxuICAgIFwiY2hhcnNcIjogXCJcdTAwODBcdTAwODFcdTAwODJcdTAwODNcdTAwODRcdTAwODVcdTAwODZcdTAwODdcdTAwODhcdTAwODlcdTAwOEFcdTAwOEJcdTAwOENcdTAwOERcdTAwOEVcdTAwOEZcdTAwOTBcdTAwOTFcdTAwOTJcdTAwOTNcdTAwOTRcdTAwOTVcdTAwOTZcdTAwOTdcdTAwOThcdTAwOTlcdTAwOUFcdTAwOUJcdTAwOUNcdTAwOURcdTAwOUVcdTAwOUZcdTAwQTBcdTAwQTFcdTAwQTJcdTAwQTNcdTIwQUNcdTAwQTVcdTAxNjBcdTAwQTdcdTAxNjFcdTAwQTlcdTAwQUFcdTAwQUJcdTAwQUNcdTAwQURcdTAwQUVcdTAwQUZcdTAwQjBcdTAwQjFcdTAwQjJcdTAwQjNcdTAxN0RcdTAwQjVcdTAwQjZcdTAwQjdcdTAxN0VcdTAwQjlcdTAwQkFcdTAwQkJcdTAxNTJcdTAxNTNcdTAxNzhcdTAwQkZcdTAwQzBcdTAwQzFcdTAwQzJcdTAwQzNcdTAwQzRcdTAwQzVcdTAwQzZcdTAwQzdcdTAwQzhcdTAwQzlcdTAwQ0FcdTAwQ0JcdTAwQ0NcdTAwQ0RcdTAwQ0VcdTAwQ0ZcdTAwRDBcdTAwRDFcdTAwRDJcdTAwRDNcdTAwRDRcdTAwRDVcdTAwRDZcdTAwRDdcdTAwRDhcdTAwRDlcdTAwREFcdTAwREJcdTAwRENcdTAwRERcdTAwREVcdTAwREZcdTAwRTBcdTAwRTFcdTAwRTJcdTAwRTNcdTAwRTRcdTAwRTVcdTAwRTZcdTAwRTdcdTAwRThcdTAwRTlcdTAwRUFcdTAwRUJcdTAwRUNcdTAwRURcdTAwRUVcdTAwRUZcdTAwRjBcdTAwRjFcdTAwRjJcdTAwRjNcdTAwRjRcdTAwRjVcdTAwRjZcdTAwRjdcdTAwRjhcdTAwRjlcdTAwRkFcdTAwRkJcdTAwRkNcdTAwRkRcdTAwRkVcdTAwRkZcIlxuICB9LFxuICBcImNwMjg2MDVcIjogXCJpc284ODU5MTVcIixcbiAgXCJpc284ODU5MTZcIjoge1xuICAgIFwidHlwZVwiOiBcIl9zYmNzXCIsXG4gICAgXCJjaGFyc1wiOiBcIlx1MDA4MFx1MDA4MVx1MDA4Mlx1MDA4M1x1MDA4NFx1MDA4NVx1MDA4Nlx1MDA4N1x1MDA4OFx1MDA4OVx1MDA4QVx1MDA4Qlx1MDA4Q1x1MDA4RFx1MDA4RVx1MDA4Rlx1MDA5MFx1MDA5MVx1MDA5Mlx1MDA5M1x1MDA5NFx1MDA5NVx1MDA5Nlx1MDA5N1x1MDA5OFx1MDA5OVx1MDA5QVx1MDA5Qlx1MDA5Q1x1MDA5RFx1MDA5RVx1MDA5Rlx1MDBBMFx1MDEwNFx1MDEwNVx1MDE0MVx1MjBBQ1x1MjAxRVx1MDE2MFx1MDBBN1x1MDE2MVx1MDBBOVx1MDIxOFx1MDBBQlx1MDE3OVx1MDBBRFx1MDE3QVx1MDE3Qlx1MDBCMFx1MDBCMVx1MDEwQ1x1MDE0Mlx1MDE3RFx1MjAxRFx1MDBCNlx1MDBCN1x1MDE3RVx1MDEwRFx1MDIxOVx1MDBCQlx1MDE1Mlx1MDE1M1x1MDE3OFx1MDE3Q1x1MDBDMFx1MDBDMVx1MDBDMlx1MDEwMlx1MDBDNFx1MDEwNlx1MDBDNlx1MDBDN1x1MDBDOFx1MDBDOVx1MDBDQVx1MDBDQlx1MDBDQ1x1MDBDRFx1MDBDRVx1MDBDRlx1MDExMFx1MDE0M1x1MDBEMlx1MDBEM1x1MDBENFx1MDE1MFx1MDBENlx1MDE1QVx1MDE3MFx1MDBEOVx1MDBEQVx1MDBEQlx1MDBEQ1x1MDExOFx1MDIxQVx1MDBERlx1MDBFMFx1MDBFMVx1MDBFMlx1MDEwM1x1MDBFNFx1MDEwN1x1MDBFNlx1MDBFN1x1MDBFOFx1MDBFOVx1MDBFQVx1MDBFQlx1MDBFQ1x1MDBFRFx1MDBFRVx1MDBFRlx1MDExMVx1MDE0NFx1MDBGMlx1MDBGM1x1MDBGNFx1MDE1MVx1MDBGNlx1MDE1Qlx1MDE3MVx1MDBGOVx1MDBGQVx1MDBGQlx1MDBGQ1x1MDExOVx1MDIxQlx1MDBGRlwiXG4gIH0sXG4gIFwiY3AyODYwNlwiOiBcImlzbzg4NTkxNlwiLFxuICBcImNwNDM3XCI6IHtcbiAgICBcInR5cGVcIjogXCJfc2Jjc1wiLFxuICAgIFwiY2hhcnNcIjogXCJcdTAwQzdcdTAwRkNcdTAwRTlcdTAwRTJcdTAwRTRcdTAwRTBcdTAwRTVcdTAwRTdcdTAwRUFcdTAwRUJcdTAwRThcdTAwRUZcdTAwRUVcdTAwRUNcdTAwQzRcdTAwQzVcdTAwQzlcdTAwRTZcdTAwQzZcdTAwRjRcdTAwRjZcdTAwRjJcdTAwRkJcdTAwRjlcdTAwRkZcdTAwRDZcdTAwRENcdTAwQTJcdTAwQTNcdTAwQTVcdTIwQTdcdTAxOTJcdTAwRTFcdTAwRURcdTAwRjNcdTAwRkFcdTAwRjFcdTAwRDFcdTAwQUFcdTAwQkFcdTAwQkZcdTIzMTBcdTAwQUNcdTAwQkRcdTAwQkNcdTAwQTFcdTAwQUJcdTAwQkJcdTI1OTFcdTI1OTJcdTI1OTNcdTI1MDJcdTI1MjRcdTI1NjFcdTI1NjJcdTI1NTZcdTI1NTVcdTI1NjNcdTI1NTFcdTI1NTdcdTI1NURcdTI1NUNcdTI1NUJcdTI1MTBcdTI1MTRcdTI1MzRcdTI1MkNcdTI1MUNcdTI1MDBcdTI1M0NcdTI1NUVcdTI1NUZcdTI1NUFcdTI1NTRcdTI1NjlcdTI1NjZcdTI1NjBcdTI1NTBcdTI1NkNcdTI1NjdcdTI1NjhcdTI1NjRcdTI1NjVcdTI1NTlcdTI1NThcdTI1NTJcdTI1NTNcdTI1NkJcdTI1NkFcdTI1MThcdTI1MENcdTI1ODhcdTI1ODRcdTI1OENcdTI1OTBcdTI1ODBcdTAzQjFcdTAwREZcdTAzOTNcdTAzQzBcdTAzQTNcdTAzQzNcdTAwQjVcdTAzQzRcdTAzQTZcdTAzOThcdTAzQTlcdTAzQjRcdTIyMUVcdTAzQzZcdTAzQjVcdTIyMjlcdTIyNjFcdTAwQjFcdTIyNjVcdTIyNjRcdTIzMjBcdTIzMjFcdTAwRjdcdTIyNDhcdTAwQjBcdTIyMTlcdTAwQjdcdTIyMUFcdTIwN0ZcdTAwQjJcdTI1QTBcdTAwQTBcIlxuICB9LFxuICBcImlibTQzN1wiOiBcImNwNDM3XCIsXG4gIFwiY3NpYm00MzdcIjogXCJjcDQzN1wiLFxuICBcImNwNzM3XCI6IHtcbiAgICBcInR5cGVcIjogXCJfc2Jjc1wiLFxuICAgIFwiY2hhcnNcIjogXCJcdTAzOTFcdTAzOTJcdTAzOTNcdTAzOTRcdTAzOTVcdTAzOTZcdTAzOTdcdTAzOThcdTAzOTlcdTAzOUFcdTAzOUJcdTAzOUNcdTAzOURcdTAzOUVcdTAzOUZcdTAzQTBcdTAzQTFcdTAzQTNcdTAzQTRcdTAzQTVcdTAzQTZcdTAzQTdcdTAzQThcdTAzQTlcdTAzQjFcdTAzQjJcdTAzQjNcdTAzQjRcdTAzQjVcdTAzQjZcdTAzQjdcdTAzQjhcdTAzQjlcdTAzQkFcdTAzQkJcdTAzQkNcdTAzQkRcdTAzQkVcdTAzQkZcdTAzQzBcdTAzQzFcdTAzQzNcdTAzQzJcdTAzQzRcdTAzQzVcdTAzQzZcdTAzQzdcdTAzQzhcdTI1OTFcdTI1OTJcdTI1OTNcdTI1MDJcdTI1MjRcdTI1NjFcdTI1NjJcdTI1NTZcdTI1NTVcdTI1NjNcdTI1NTFcdTI1NTdcdTI1NURcdTI1NUNcdTI1NUJcdTI1MTBcdTI1MTRcdTI1MzRcdTI1MkNcdTI1MUNcdTI1MDBcdTI1M0NcdTI1NUVcdTI1NUZcdTI1NUFcdTI1NTRcdTI1NjlcdTI1NjZcdTI1NjBcdTI1NTBcdTI1NkNcdTI1NjdcdTI1NjhcdTI1NjRcdTI1NjVcdTI1NTlcdTI1NThcdTI1NTJcdTI1NTNcdTI1NkJcdTI1NkFcdTI1MThcdTI1MENcdTI1ODhcdTI1ODRcdTI1OENcdTI1OTBcdTI1ODBcdTAzQzlcdTAzQUNcdTAzQURcdTAzQUVcdTAzQ0FcdTAzQUZcdTAzQ0NcdTAzQ0RcdTAzQ0JcdTAzQ0VcdTAzODZcdTAzODhcdTAzODlcdTAzOEFcdTAzOENcdTAzOEVcdTAzOEZcdTAwQjFcdTIyNjVcdTIyNjRcdTAzQUFcdTAzQUJcdTAwRjdcdTIyNDhcdTAwQjBcdTIyMTlcdTAwQjdcdTIyMUFcdTIwN0ZcdTAwQjJcdTI1QTBcdTAwQTBcIlxuICB9LFxuICBcImlibTczN1wiOiBcImNwNzM3XCIsXG4gIFwiY3NpYm03MzdcIjogXCJjcDczN1wiLFxuICBcImNwNzc1XCI6IHtcbiAgICBcInR5cGVcIjogXCJfc2Jjc1wiLFxuICAgIFwiY2hhcnNcIjogXCJcdTAxMDZcdTAwRkNcdTAwRTlcdTAxMDFcdTAwRTRcdTAxMjNcdTAwRTVcdTAxMDdcdTAxNDJcdTAxMTNcdTAxNTZcdTAxNTdcdTAxMkJcdTAxNzlcdTAwQzRcdTAwQzVcdTAwQzlcdTAwRTZcdTAwQzZcdTAxNERcdTAwRjZcdTAxMjJcdTAwQTJcdTAxNUFcdTAxNUJcdTAwRDZcdTAwRENcdTAwRjhcdTAwQTNcdTAwRDhcdTAwRDdcdTAwQTRcdTAxMDBcdTAxMkFcdTAwRjNcdTAxN0JcdTAxN0NcdTAxN0FcdTIwMURcdTAwQTZcdTAwQTlcdTAwQUVcdTAwQUNcdTAwQkRcdTAwQkNcdTAxNDFcdTAwQUJcdTAwQkJcdTI1OTFcdTI1OTJcdTI1OTNcdTI1MDJcdTI1MjRcdTAxMDRcdTAxMENcdTAxMThcdTAxMTZcdTI1NjNcdTI1NTFcdTI1NTdcdTI1NURcdTAxMkVcdTAxNjBcdTI1MTBcdTI1MTRcdTI1MzRcdTI1MkNcdTI1MUNcdTI1MDBcdTI1M0NcdTAxNzJcdTAxNkFcdTI1NUFcdTI1NTRcdTI1NjlcdTI1NjZcdTI1NjBcdTI1NTBcdTI1NkNcdTAxN0RcdTAxMDVcdTAxMERcdTAxMTlcdTAxMTdcdTAxMkZcdTAxNjFcdTAxNzNcdTAxNkJcdTAxN0VcdTI1MThcdTI1MENcdTI1ODhcdTI1ODRcdTI1OENcdTI1OTBcdTI1ODBcdTAwRDNcdTAwREZcdTAxNENcdTAxNDNcdTAwRjVcdTAwRDVcdTAwQjVcdTAxNDRcdTAxMzZcdTAxMzdcdTAxM0JcdTAxM0NcdTAxNDZcdTAxMTJcdTAxNDVcdTIwMTlcdTAwQURcdTAwQjFcdTIwMUNcdTAwQkVcdTAwQjZcdTAwQTdcdTAwRjdcdTIwMUVcdTAwQjBcdTIyMTlcdTAwQjdcdTAwQjlcdTAwQjNcdTAwQjJcdTI1QTBcdTAwQTBcIlxuICB9LFxuICBcImlibTc3NVwiOiBcImNwNzc1XCIsXG4gIFwiY3NpYm03NzVcIjogXCJjcDc3NVwiLFxuICBcImNwODUwXCI6IHtcbiAgICBcInR5cGVcIjogXCJfc2Jjc1wiLFxuICAgIFwiY2hhcnNcIjogXCJcdTAwQzdcdTAwRkNcdTAwRTlcdTAwRTJcdTAwRTRcdTAwRTBcdTAwRTVcdTAwRTdcdTAwRUFcdTAwRUJcdTAwRThcdTAwRUZcdTAwRUVcdTAwRUNcdTAwQzRcdTAwQzVcdTAwQzlcdTAwRTZcdTAwQzZcdTAwRjRcdTAwRjZcdTAwRjJcdTAwRkJcdTAwRjlcdTAwRkZcdTAwRDZcdTAwRENcdTAwRjhcdTAwQTNcdTAwRDhcdTAwRDdcdTAxOTJcdTAwRTFcdTAwRURcdTAwRjNcdTAwRkFcdTAwRjFcdTAwRDFcdTAwQUFcdTAwQkFcdTAwQkZcdTAwQUVcdTAwQUNcdTAwQkRcdTAwQkNcdTAwQTFcdTAwQUJcdTAwQkJcdTI1OTFcdTI1OTJcdTI1OTNcdTI1MDJcdTI1MjRcdTAwQzFcdTAwQzJcdTAwQzBcdTAwQTlcdTI1NjNcdTI1NTFcdTI1NTdcdTI1NURcdTAwQTJcdTAwQTVcdTI1MTBcdTI1MTRcdTI1MzRcdTI1MkNcdTI1MUNcdTI1MDBcdTI1M0NcdTAwRTNcdTAwQzNcdTI1NUFcdTI1NTRcdTI1NjlcdTI1NjZcdTI1NjBcdTI1NTBcdTI1NkNcdTAwQTRcdTAwRjBcdTAwRDBcdTAwQ0FcdTAwQ0JcdTAwQzhcdTAxMzFcdTAwQ0RcdTAwQ0VcdTAwQ0ZcdTI1MThcdTI1MENcdTI1ODhcdTI1ODRcdTAwQTZcdTAwQ0NcdTI1ODBcdTAwRDNcdTAwREZcdTAwRDRcdTAwRDJcdTAwRjVcdTAwRDVcdTAwQjVcdTAwRkVcdTAwREVcdTAwREFcdTAwREJcdTAwRDlcdTAwRkRcdTAwRERcdTAwQUZcdTAwQjRcdTAwQURcdTAwQjFcdTIwMTdcdTAwQkVcdTAwQjZcdTAwQTdcdTAwRjdcdTAwQjhcdTAwQjBcdTAwQThcdTAwQjdcdTAwQjlcdTAwQjNcdTAwQjJcdTI1QTBcdTAwQTBcIlxuICB9LFxuICBcImlibTg1MFwiOiBcImNwODUwXCIsXG4gIFwiY3NpYm04NTBcIjogXCJjcDg1MFwiLFxuICBcImNwODUyXCI6IHtcbiAgICBcInR5cGVcIjogXCJfc2Jjc1wiLFxuICAgIFwiY2hhcnNcIjogXCJcdTAwQzdcdTAwRkNcdTAwRTlcdTAwRTJcdTAwRTRcdTAxNkZcdTAxMDdcdTAwRTdcdTAxNDJcdTAwRUJcdTAxNTBcdTAxNTFcdTAwRUVcdTAxNzlcdTAwQzRcdTAxMDZcdTAwQzlcdTAxMzlcdTAxM0FcdTAwRjRcdTAwRjZcdTAxM0RcdTAxM0VcdTAxNUFcdTAxNUJcdTAwRDZcdTAwRENcdTAxNjRcdTAxNjVcdTAxNDFcdTAwRDdcdTAxMERcdTAwRTFcdTAwRURcdTAwRjNcdTAwRkFcdTAxMDRcdTAxMDVcdTAxN0RcdTAxN0VcdTAxMThcdTAxMTlcdTAwQUNcdTAxN0FcdTAxMENcdTAxNUZcdTAwQUJcdTAwQkJcdTI1OTFcdTI1OTJcdTI1OTNcdTI1MDJcdTI1MjRcdTAwQzFcdTAwQzJcdTAxMUFcdTAxNUVcdTI1NjNcdTI1NTFcdTI1NTdcdTI1NURcdTAxN0JcdTAxN0NcdTI1MTBcdTI1MTRcdTI1MzRcdTI1MkNcdTI1MUNcdTI1MDBcdTI1M0NcdTAxMDJcdTAxMDNcdTI1NUFcdTI1NTRcdTI1NjlcdTI1NjZcdTI1NjBcdTI1NTBcdTI1NkNcdTAwQTRcdTAxMTFcdTAxMTBcdTAxMEVcdTAwQ0JcdTAxMEZcdTAxNDdcdTAwQ0RcdTAwQ0VcdTAxMUJcdTI1MThcdTI1MENcdTI1ODhcdTI1ODRcdTAxNjJcdTAxNkVcdTI1ODBcdTAwRDNcdTAwREZcdTAwRDRcdTAxNDNcdTAxNDRcdTAxNDhcdTAxNjBcdTAxNjFcdTAxNTRcdTAwREFcdTAxNTVcdTAxNzBcdTAwRkRcdTAwRERcdTAxNjNcdTAwQjRcdTAwQURcdTAyRERcdTAyREJcdTAyQzdcdTAyRDhcdTAwQTdcdTAwRjdcdTAwQjhcdTAwQjBcdTAwQThcdTAyRDlcdTAxNzFcdTAxNThcdTAxNTlcdTI1QTBcdTAwQTBcIlxuICB9LFxuICBcImlibTg1MlwiOiBcImNwODUyXCIsXG4gIFwiY3NpYm04NTJcIjogXCJjcDg1MlwiLFxuICBcImNwODU1XCI6IHtcbiAgICBcInR5cGVcIjogXCJfc2Jjc1wiLFxuICAgIFwiY2hhcnNcIjogXCJcdTA0NTJcdTA0MDJcdTA0NTNcdTA0MDNcdTA0NTFcdTA0MDFcdTA0NTRcdTA0MDRcdTA0NTVcdTA0MDVcdTA0NTZcdTA0MDZcdTA0NTdcdTA0MDdcdTA0NThcdTA0MDhcdTA0NTlcdTA0MDlcdTA0NUFcdTA0MEFcdTA0NUJcdTA0MEJcdTA0NUNcdTA0MENcdTA0NUVcdTA0MEVcdTA0NUZcdTA0MEZcdTA0NEVcdTA0MkVcdTA0NEFcdTA0MkFcdTA0MzBcdTA0MTBcdTA0MzFcdTA0MTFcdTA0NDZcdTA0MjZcdTA0MzRcdTA0MTRcdTA0MzVcdTA0MTVcdTA0NDRcdTA0MjRcdTA0MzNcdTA0MTNcdTAwQUJcdTAwQkJcdTI1OTFcdTI1OTJcdTI1OTNcdTI1MDJcdTI1MjRcdTA0NDVcdTA0MjVcdTA0MzhcdTA0MThcdTI1NjNcdTI1NTFcdTI1NTdcdTI1NURcdTA0MzlcdTA0MTlcdTI1MTBcdTI1MTRcdTI1MzRcdTI1MkNcdTI1MUNcdTI1MDBcdTI1M0NcdTA0M0FcdTA0MUFcdTI1NUFcdTI1NTRcdTI1NjlcdTI1NjZcdTI1NjBcdTI1NTBcdTI1NkNcdTAwQTRcdTA0M0JcdTA0MUJcdTA0M0NcdTA0MUNcdTA0M0RcdTA0MURcdTA0M0VcdTA0MUVcdTA0M0ZcdTI1MThcdTI1MENcdTI1ODhcdTI1ODRcdTA0MUZcdTA0NEZcdTI1ODBcdTA0MkZcdTA0NDBcdTA0MjBcdTA0NDFcdTA0MjFcdTA0NDJcdTA0MjJcdTA0NDNcdTA0MjNcdTA0MzZcdTA0MTZcdTA0MzJcdTA0MTJcdTA0NENcdTA0MkNcdTIxMTZcdTAwQURcdTA0NEJcdTA0MkJcdTA0MzdcdTA0MTdcdTA0NDhcdTA0MjhcdTA0NERcdTA0MkRcdTA0NDlcdTA0MjlcdTA0NDdcdTA0MjdcdTAwQTdcdTI1QTBcdTAwQTBcIlxuICB9LFxuICBcImlibTg1NVwiOiBcImNwODU1XCIsXG4gIFwiY3NpYm04NTVcIjogXCJjcDg1NVwiLFxuICBcImNwODU2XCI6IHtcbiAgICBcInR5cGVcIjogXCJfc2Jjc1wiLFxuICAgIFwiY2hhcnNcIjogXCJcdTA1RDBcdTA1RDFcdTA1RDJcdTA1RDNcdTA1RDRcdTA1RDVcdTA1RDZcdTA1RDdcdTA1RDhcdTA1RDlcdTA1REFcdTA1REJcdTA1RENcdTA1RERcdTA1REVcdTA1REZcdTA1RTBcdTA1RTFcdTA1RTJcdTA1RTNcdTA1RTRcdTA1RTVcdTA1RTZcdTA1RTdcdTA1RThcdTA1RTlcdTA1RUFcdUZGRkRcdTAwQTNcdUZGRkRcdTAwRDdcdUZGRkRcdUZGRkRcdUZGRkRcdUZGRkRcdUZGRkRcdUZGRkRcdUZGRkRcdUZGRkRcdUZGRkRcdUZGRkRcdTAwQUVcdTAwQUNcdTAwQkRcdTAwQkNcdUZGRkRcdTAwQUJcdTAwQkJcdTI1OTFcdTI1OTJcdTI1OTNcdTI1MDJcdTI1MjRcdUZGRkRcdUZGRkRcdUZGRkRcdTAwQTlcdTI1NjNcdTI1NTFcdTI1NTdcdTI1NURcdTAwQTJcdTAwQTVcdTI1MTBcdTI1MTRcdTI1MzRcdTI1MkNcdTI1MUNcdTI1MDBcdTI1M0NcdUZGRkRcdUZGRkRcdTI1NUFcdTI1NTRcdTI1NjlcdTI1NjZcdTI1NjBcdTI1NTBcdTI1NkNcdTAwQTRcdUZGRkRcdUZGRkRcdUZGRkRcdUZGRkRcdUZGRkRcdUZGRkRcdUZGRkRcdUZGRkRcdUZGRkRcdTI1MThcdTI1MENcdTI1ODhcdTI1ODRcdTAwQTZcdUZGRkRcdTI1ODBcdUZGRkRcdUZGRkRcdUZGRkRcdUZGRkRcdUZGRkRcdUZGRkRcdTAwQjVcdUZGRkRcdUZGRkRcdUZGRkRcdUZGRkRcdUZGRkRcdUZGRkRcdUZGRkRcdTAwQUZcdTAwQjRcdTAwQURcdTAwQjFcdTIwMTdcdTAwQkVcdTAwQjZcdTAwQTdcdTAwRjdcdTAwQjhcdTAwQjBcdTAwQThcdTAwQjdcdTAwQjlcdTAwQjNcdTAwQjJcdTI1QTBcdTAwQTBcIlxuICB9LFxuICBcImlibTg1NlwiOiBcImNwODU2XCIsXG4gIFwiY3NpYm04NTZcIjogXCJjcDg1NlwiLFxuICBcImNwODU3XCI6IHtcbiAgICBcInR5cGVcIjogXCJfc2Jjc1wiLFxuICAgIFwiY2hhcnNcIjogXCJcdTAwQzdcdTAwRkNcdTAwRTlcdTAwRTJcdTAwRTRcdTAwRTBcdTAwRTVcdTAwRTdcdTAwRUFcdTAwRUJcdTAwRThcdTAwRUZcdTAwRUVcdTAxMzFcdTAwQzRcdTAwQzVcdTAwQzlcdTAwRTZcdTAwQzZcdTAwRjRcdTAwRjZcdTAwRjJcdTAwRkJcdTAwRjlcdTAxMzBcdTAwRDZcdTAwRENcdTAwRjhcdTAwQTNcdTAwRDhcdTAxNUVcdTAxNUZcdTAwRTFcdTAwRURcdTAwRjNcdTAwRkFcdTAwRjFcdTAwRDFcdTAxMUVcdTAxMUZcdTAwQkZcdTAwQUVcdTAwQUNcdTAwQkRcdTAwQkNcdTAwQTFcdTAwQUJcdTAwQkJcdTI1OTFcdTI1OTJcdTI1OTNcdTI1MDJcdTI1MjRcdTAwQzFcdTAwQzJcdTAwQzBcdTAwQTlcdTI1NjNcdTI1NTFcdTI1NTdcdTI1NURcdTAwQTJcdTAwQTVcdTI1MTBcdTI1MTRcdTI1MzRcdTI1MkNcdTI1MUNcdTI1MDBcdTI1M0NcdTAwRTNcdTAwQzNcdTI1NUFcdTI1NTRcdTI1NjlcdTI1NjZcdTI1NjBcdTI1NTBcdTI1NkNcdTAwQTRcdTAwQkFcdTAwQUFcdTAwQ0FcdTAwQ0JcdTAwQzhcdUZGRkRcdTAwQ0RcdTAwQ0VcdTAwQ0ZcdTI1MThcdTI1MENcdTI1ODhcdTI1ODRcdTAwQTZcdTAwQ0NcdTI1ODBcdTAwRDNcdTAwREZcdTAwRDRcdTAwRDJcdTAwRjVcdTAwRDVcdTAwQjVcdUZGRkRcdTAwRDdcdTAwREFcdTAwREJcdTAwRDlcdTAwRUNcdTAwRkZcdTAwQUZcdTAwQjRcdTAwQURcdTAwQjFcdUZGRkRcdTAwQkVcdTAwQjZcdTAwQTdcdTAwRjdcdTAwQjhcdTAwQjBcdTAwQThcdTAwQjdcdTAwQjlcdTAwQjNcdTAwQjJcdTI1QTBcdTAwQTBcIlxuICB9LFxuICBcImlibTg1N1wiOiBcImNwODU3XCIsXG4gIFwiY3NpYm04NTdcIjogXCJjcDg1N1wiLFxuICBcImNwODU4XCI6IHtcbiAgICBcInR5cGVcIjogXCJfc2Jjc1wiLFxuICAgIFwiY2hhcnNcIjogXCJcdTAwQzdcdTAwRkNcdTAwRTlcdTAwRTJcdTAwRTRcdTAwRTBcdTAwRTVcdTAwRTdcdTAwRUFcdTAwRUJcdTAwRThcdTAwRUZcdTAwRUVcdTAwRUNcdTAwQzRcdTAwQzVcdTAwQzlcdTAwRTZcdTAwQzZcdTAwRjRcdTAwRjZcdTAwRjJcdTAwRkJcdTAwRjlcdTAwRkZcdTAwRDZcdTAwRENcdTAwRjhcdTAwQTNcdTAwRDhcdTAwRDdcdTAxOTJcdTAwRTFcdTAwRURcdTAwRjNcdTAwRkFcdTAwRjFcdTAwRDFcdTAwQUFcdTAwQkFcdTAwQkZcdTAwQUVcdTAwQUNcdTAwQkRcdTAwQkNcdTAwQTFcdTAwQUJcdTAwQkJcdTI1OTFcdTI1OTJcdTI1OTNcdTI1MDJcdTI1MjRcdTAwQzFcdTAwQzJcdTAwQzBcdTAwQTlcdTI1NjNcdTI1NTFcdTI1NTdcdTI1NURcdTAwQTJcdTAwQTVcdTI1MTBcdTI1MTRcdTI1MzRcdTI1MkNcdTI1MUNcdTI1MDBcdTI1M0NcdTAwRTNcdTAwQzNcdTI1NUFcdTI1NTRcdTI1NjlcdTI1NjZcdTI1NjBcdTI1NTBcdTI1NkNcdTAwQTRcdTAwRjBcdTAwRDBcdTAwQ0FcdTAwQ0JcdTAwQzhcdTIwQUNcdTAwQ0RcdTAwQ0VcdTAwQ0ZcdTI1MThcdTI1MENcdTI1ODhcdTI1ODRcdTAwQTZcdTAwQ0NcdTI1ODBcdTAwRDNcdTAwREZcdTAwRDRcdTAwRDJcdTAwRjVcdTAwRDVcdTAwQjVcdTAwRkVcdTAwREVcdTAwREFcdTAwREJcdTAwRDlcdTAwRkRcdTAwRERcdTAwQUZcdTAwQjRcdTAwQURcdTAwQjFcdTIwMTdcdTAwQkVcdTAwQjZcdTAwQTdcdTAwRjdcdTAwQjhcdTAwQjBcdTAwQThcdTAwQjdcdTAwQjlcdTAwQjNcdTAwQjJcdTI1QTBcdTAwQTBcIlxuICB9LFxuICBcImlibTg1OFwiOiBcImNwODU4XCIsXG4gIFwiY3NpYm04NThcIjogXCJjcDg1OFwiLFxuICBcImNwODYwXCI6IHtcbiAgICBcInR5cGVcIjogXCJfc2Jjc1wiLFxuICAgIFwiY2hhcnNcIjogXCJcdTAwQzdcdTAwRkNcdTAwRTlcdTAwRTJcdTAwRTNcdTAwRTBcdTAwQzFcdTAwRTdcdTAwRUFcdTAwQ0FcdTAwRThcdTAwQ0RcdTAwRDRcdTAwRUNcdTAwQzNcdTAwQzJcdTAwQzlcdTAwQzBcdTAwQzhcdTAwRjRcdTAwRjVcdTAwRjJcdTAwREFcdTAwRjlcdTAwQ0NcdTAwRDVcdTAwRENcdTAwQTJcdTAwQTNcdTAwRDlcdTIwQTdcdTAwRDNcdTAwRTFcdTAwRURcdTAwRjNcdTAwRkFcdTAwRjFcdTAwRDFcdTAwQUFcdTAwQkFcdTAwQkZcdTAwRDJcdTAwQUNcdTAwQkRcdTAwQkNcdTAwQTFcdTAwQUJcdTAwQkJcdTI1OTFcdTI1OTJcdTI1OTNcdTI1MDJcdTI1MjRcdTI1NjFcdTI1NjJcdTI1NTZcdTI1NTVcdTI1NjNcdTI1NTFcdTI1NTdcdTI1NURcdTI1NUNcdTI1NUJcdTI1MTBcdTI1MTRcdTI1MzRcdTI1MkNcdTI1MUNcdTI1MDBcdTI1M0NcdTI1NUVcdTI1NUZcdTI1NUFcdTI1NTRcdTI1NjlcdTI1NjZcdTI1NjBcdTI1NTBcdTI1NkNcdTI1NjdcdTI1NjhcdTI1NjRcdTI1NjVcdTI1NTlcdTI1NThcdTI1NTJcdTI1NTNcdTI1NkJcdTI1NkFcdTI1MThcdTI1MENcdTI1ODhcdTI1ODRcdTI1OENcdTI1OTBcdTI1ODBcdTAzQjFcdTAwREZcdTAzOTNcdTAzQzBcdTAzQTNcdTAzQzNcdTAwQjVcdTAzQzRcdTAzQTZcdTAzOThcdTAzQTlcdTAzQjRcdTIyMUVcdTAzQzZcdTAzQjVcdTIyMjlcdTIyNjFcdTAwQjFcdTIyNjVcdTIyNjRcdTIzMjBcdTIzMjFcdTAwRjdcdTIyNDhcdTAwQjBcdTIyMTlcdTAwQjdcdTIyMUFcdTIwN0ZcdTAwQjJcdTI1QTBcdTAwQTBcIlxuICB9LFxuICBcImlibTg2MFwiOiBcImNwODYwXCIsXG4gIFwiY3NpYm04NjBcIjogXCJjcDg2MFwiLFxuICBcImNwODYxXCI6IHtcbiAgICBcInR5cGVcIjogXCJfc2Jjc1wiLFxuICAgIFwiY2hhcnNcIjogXCJcdTAwQzdcdTAwRkNcdTAwRTlcdTAwRTJcdTAwRTRcdTAwRTBcdTAwRTVcdTAwRTdcdTAwRUFcdTAwRUJcdTAwRThcdTAwRDBcdTAwRjBcdTAwREVcdTAwQzRcdTAwQzVcdTAwQzlcdTAwRTZcdTAwQzZcdTAwRjRcdTAwRjZcdTAwRkVcdTAwRkJcdTAwRERcdTAwRkRcdTAwRDZcdTAwRENcdTAwRjhcdTAwQTNcdTAwRDhcdTIwQTdcdTAxOTJcdTAwRTFcdTAwRURcdTAwRjNcdTAwRkFcdTAwQzFcdTAwQ0RcdTAwRDNcdTAwREFcdTAwQkZcdTIzMTBcdTAwQUNcdTAwQkRcdTAwQkNcdTAwQTFcdTAwQUJcdTAwQkJcdTI1OTFcdTI1OTJcdTI1OTNcdTI1MDJcdTI1MjRcdTI1NjFcdTI1NjJcdTI1NTZcdTI1NTVcdTI1NjNcdTI1NTFcdTI1NTdcdTI1NURcdTI1NUNcdTI1NUJcdTI1MTBcdTI1MTRcdTI1MzRcdTI1MkNcdTI1MUNcdTI1MDBcdTI1M0NcdTI1NUVcdTI1NUZcdTI1NUFcdTI1NTRcdTI1NjlcdTI1NjZcdTI1NjBcdTI1NTBcdTI1NkNcdTI1NjdcdTI1NjhcdTI1NjRcdTI1NjVcdTI1NTlcdTI1NThcdTI1NTJcdTI1NTNcdTI1NkJcdTI1NkFcdTI1MThcdTI1MENcdTI1ODhcdTI1ODRcdTI1OENcdTI1OTBcdTI1ODBcdTAzQjFcdTAwREZcdTAzOTNcdTAzQzBcdTAzQTNcdTAzQzNcdTAwQjVcdTAzQzRcdTAzQTZcdTAzOThcdTAzQTlcdTAzQjRcdTIyMUVcdTAzQzZcdTAzQjVcdTIyMjlcdTIyNjFcdTAwQjFcdTIyNjVcdTIyNjRcdTIzMjBcdTIzMjFcdTAwRjdcdTIyNDhcdTAwQjBcdTIyMTlcdTAwQjdcdTIyMUFcdTIwN0ZcdTAwQjJcdTI1QTBcdTAwQTBcIlxuICB9LFxuICBcImlibTg2MVwiOiBcImNwODYxXCIsXG4gIFwiY3NpYm04NjFcIjogXCJjcDg2MVwiLFxuICBcImNwODYyXCI6IHtcbiAgICBcInR5cGVcIjogXCJfc2Jjc1wiLFxuICAgIFwiY2hhcnNcIjogXCJcdTA1RDBcdTA1RDFcdTA1RDJcdTA1RDNcdTA1RDRcdTA1RDVcdTA1RDZcdTA1RDdcdTA1RDhcdTA1RDlcdTA1REFcdTA1REJcdTA1RENcdTA1RERcdTA1REVcdTA1REZcdTA1RTBcdTA1RTFcdTA1RTJcdTA1RTNcdTA1RTRcdTA1RTVcdTA1RTZcdTA1RTdcdTA1RThcdTA1RTlcdTA1RUFcdTAwQTJcdTAwQTNcdTAwQTVcdTIwQTdcdTAxOTJcdTAwRTFcdTAwRURcdTAwRjNcdTAwRkFcdTAwRjFcdTAwRDFcdTAwQUFcdTAwQkFcdTAwQkZcdTIzMTBcdTAwQUNcdTAwQkRcdTAwQkNcdTAwQTFcdTAwQUJcdTAwQkJcdTI1OTFcdTI1OTJcdTI1OTNcdTI1MDJcdTI1MjRcdTI1NjFcdTI1NjJcdTI1NTZcdTI1NTVcdTI1NjNcdTI1NTFcdTI1NTdcdTI1NURcdTI1NUNcdTI1NUJcdTI1MTBcdTI1MTRcdTI1MzRcdTI1MkNcdTI1MUNcdTI1MDBcdTI1M0NcdTI1NUVcdTI1NUZcdTI1NUFcdTI1NTRcdTI1NjlcdTI1NjZcdTI1NjBcdTI1NTBcdTI1NkNcdTI1NjdcdTI1NjhcdTI1NjRcdTI1NjVcdTI1NTlcdTI1NThcdTI1NTJcdTI1NTNcdTI1NkJcdTI1NkFcdTI1MThcdTI1MENcdTI1ODhcdTI1ODRcdTI1OENcdTI1OTBcdTI1ODBcdTAzQjFcdTAwREZcdTAzOTNcdTAzQzBcdTAzQTNcdTAzQzNcdTAwQjVcdTAzQzRcdTAzQTZcdTAzOThcdTAzQTlcdTAzQjRcdTIyMUVcdTAzQzZcdTAzQjVcdTIyMjlcdTIyNjFcdTAwQjFcdTIyNjVcdTIyNjRcdTIzMjBcdTIzMjFcdTAwRjdcdTIyNDhcdTAwQjBcdTIyMTlcdTAwQjdcdTIyMUFcdTIwN0ZcdTAwQjJcdTI1QTBcdTAwQTBcIlxuICB9LFxuICBcImlibTg2MlwiOiBcImNwODYyXCIsXG4gIFwiY3NpYm04NjJcIjogXCJjcDg2MlwiLFxuICBcImNwODYzXCI6IHtcbiAgICBcInR5cGVcIjogXCJfc2Jjc1wiLFxuICAgIFwiY2hhcnNcIjogXCJcdTAwQzdcdTAwRkNcdTAwRTlcdTAwRTJcdTAwQzJcdTAwRTBcdTAwQjZcdTAwRTdcdTAwRUFcdTAwRUJcdTAwRThcdTAwRUZcdTAwRUVcdTIwMTdcdTAwQzBcdTAwQTdcdTAwQzlcdTAwQzhcdTAwQ0FcdTAwRjRcdTAwQ0JcdTAwQ0ZcdTAwRkJcdTAwRjlcdTAwQTRcdTAwRDRcdTAwRENcdTAwQTJcdTAwQTNcdTAwRDlcdTAwREJcdTAxOTJcdTAwQTZcdTAwQjRcdTAwRjNcdTAwRkFcdTAwQThcdTAwQjhcdTAwQjNcdTAwQUZcdTAwQ0VcdTIzMTBcdTAwQUNcdTAwQkRcdTAwQkNcdTAwQkVcdTAwQUJcdTAwQkJcdTI1OTFcdTI1OTJcdTI1OTNcdTI1MDJcdTI1MjRcdTI1NjFcdTI1NjJcdTI1NTZcdTI1NTVcdTI1NjNcdTI1NTFcdTI1NTdcdTI1NURcdTI1NUNcdTI1NUJcdTI1MTBcdTI1MTRcdTI1MzRcdTI1MkNcdTI1MUNcdTI1MDBcdTI1M0NcdTI1NUVcdTI1NUZcdTI1NUFcdTI1NTRcdTI1NjlcdTI1NjZcdTI1NjBcdTI1NTBcdTI1NkNcdTI1NjdcdTI1NjhcdTI1NjRcdTI1NjVcdTI1NTlcdTI1NThcdTI1NTJcdTI1NTNcdTI1NkJcdTI1NkFcdTI1MThcdTI1MENcdTI1ODhcdTI1ODRcdTI1OENcdTI1OTBcdTI1ODBcdTAzQjFcdTAwREZcdTAzOTNcdTAzQzBcdTAzQTNcdTAzQzNcdTAwQjVcdTAzQzRcdTAzQTZcdTAzOThcdTAzQTlcdTAzQjRcdTIyMUVcdTAzQzZcdTAzQjVcdTIyMjlcdTIyNjFcdTAwQjFcdTIyNjVcdTIyNjRcdTIzMjBcdTIzMjFcdTAwRjdcdTIyNDhcdTAwQjBcdTIyMTlcdTAwQjdcdTIyMUFcdTIwN0ZcdTAwQjJcdTI1QTBcdTAwQTBcIlxuICB9LFxuICBcImlibTg2M1wiOiBcImNwODYzXCIsXG4gIFwiY3NpYm04NjNcIjogXCJjcDg2M1wiLFxuICBcImNwODY0XCI6IHtcbiAgICBcInR5cGVcIjogXCJfc2Jjc1wiLFxuICAgIFwiY2hhcnNcIjogXCJcXHUwMDAwXFx1MDAwMVxcdTAwMDJcXHUwMDAzXFx1MDAwNFxcdTAwMDVcXHUwMDA2XFx1MDAwN1xcYlxcdFxcblxcdTAwMGJcXGZcXHJcXHUwMDBlXFx1MDAwZlxcdTAwMTBcXHUwMDExXFx1MDAxMlxcdTAwMTNcXHUwMDE0XFx1MDAxNVxcdTAwMTZcXHUwMDE3XFx1MDAxOFxcdTAwMTlcXHUwMDFhXFx1MDAxYlxcdTAwMWNcXHUwMDFkXFx1MDAxZVxcdTAwMWYgIVxcXCIjJFx1MDY2QSYnKCkqKywtLi8wMTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaW1xcXFxdXl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+XHUwMDdGXHUwMEIwXHUwMEI3XHUyMjE5XHUyMjFBXHUyNTkyXHUyNTAwXHUyNTAyXHUyNTNDXHUyNTI0XHUyNTJDXHUyNTFDXHUyNTM0XHUyNTEwXHUyNTBDXHUyNTE0XHUyNTE4XHUwM0IyXHUyMjFFXHUwM0M2XHUwMEIxXHUwMEJEXHUwMEJDXHUyMjQ4XHUwMEFCXHUwMEJCXHVGRUY3XHVGRUY4XHVGRkZEXHVGRkZEXHVGRUZCXHVGRUZDXHVGRkZEXHUwMEEwXHUwMEFEXHVGRTgyXHUwMEEzXHUwMEE0XHVGRTg0XHVGRkZEXHVGRkZEXHVGRThFXHVGRThGXHVGRTk1XHVGRTk5XHUwNjBDXHVGRTlEXHVGRUExXHVGRUE1XHUwNjYwXHUwNjYxXHUwNjYyXHUwNjYzXHUwNjY0XHUwNjY1XHUwNjY2XHUwNjY3XHUwNjY4XHUwNjY5XHVGRUQxXHUwNjFCXHVGRUIxXHVGRUI1XHVGRUI5XHUwNjFGXHUwMEEyXHVGRTgwXHVGRTgxXHVGRTgzXHVGRTg1XHVGRUNBXHVGRThCXHVGRThEXHVGRTkxXHVGRTkzXHVGRTk3XHVGRTlCXHVGRTlGXHVGRUEzXHVGRUE3XHVGRUE5XHVGRUFCXHVGRUFEXHVGRUFGXHVGRUIzXHVGRUI3XHVGRUJCXHVGRUJGXHVGRUMxXHVGRUM1XHVGRUNCXHVGRUNGXHUwMEE2XHUwMEFDXHUwMEY3XHUwMEQ3XHVGRUM5XHUwNjQwXHVGRUQzXHVGRUQ3XHVGRURCXHVGRURGXHVGRUUzXHVGRUU3XHVGRUVCXHVGRUVEXHVGRUVGXHVGRUYzXHVGRUJEXHVGRUNDXHVGRUNFXHVGRUNEXHVGRUUxXHVGRTdEXHUwNjUxXHVGRUU1XHVGRUU5XHVGRUVDXHVGRUYwXHVGRUYyXHVGRUQwXHVGRUQ1XHVGRUY1XHVGRUY2XHVGRUREXHVGRUQ5XHVGRUYxXHUyNUEwXHVGRkZEXCJcbiAgfSxcbiAgXCJpYm04NjRcIjogXCJjcDg2NFwiLFxuICBcImNzaWJtODY0XCI6IFwiY3A4NjRcIixcbiAgXCJjcDg2NVwiOiB7XG4gICAgXCJ0eXBlXCI6IFwiX3NiY3NcIixcbiAgICBcImNoYXJzXCI6IFwiXHUwMEM3XHUwMEZDXHUwMEU5XHUwMEUyXHUwMEU0XHUwMEUwXHUwMEU1XHUwMEU3XHUwMEVBXHUwMEVCXHUwMEU4XHUwMEVGXHUwMEVFXHUwMEVDXHUwMEM0XHUwMEM1XHUwMEM5XHUwMEU2XHUwMEM2XHUwMEY0XHUwMEY2XHUwMEYyXHUwMEZCXHUwMEY5XHUwMEZGXHUwMEQ2XHUwMERDXHUwMEY4XHUwMEEzXHUwMEQ4XHUyMEE3XHUwMTkyXHUwMEUxXHUwMEVEXHUwMEYzXHUwMEZBXHUwMEYxXHUwMEQxXHUwMEFBXHUwMEJBXHUwMEJGXHUyMzEwXHUwMEFDXHUwMEJEXHUwMEJDXHUwMEExXHUwMEFCXHUwMEE0XHUyNTkxXHUyNTkyXHUyNTkzXHUyNTAyXHUyNTI0XHUyNTYxXHUyNTYyXHUyNTU2XHUyNTU1XHUyNTYzXHUyNTUxXHUyNTU3XHUyNTVEXHUyNTVDXHUyNTVCXHUyNTEwXHUyNTE0XHUyNTM0XHUyNTJDXHUyNTFDXHUyNTAwXHUyNTNDXHUyNTVFXHUyNTVGXHUyNTVBXHUyNTU0XHUyNTY5XHUyNTY2XHUyNTYwXHUyNTUwXHUyNTZDXHUyNTY3XHUyNTY4XHUyNTY0XHUyNTY1XHUyNTU5XHUyNTU4XHUyNTUyXHUyNTUzXHUyNTZCXHUyNTZBXHUyNTE4XHUyNTBDXHUyNTg4XHUyNTg0XHUyNThDXHUyNTkwXHUyNTgwXHUwM0IxXHUwMERGXHUwMzkzXHUwM0MwXHUwM0EzXHUwM0MzXHUwMEI1XHUwM0M0XHUwM0E2XHUwMzk4XHUwM0E5XHUwM0I0XHUyMjFFXHUwM0M2XHUwM0I1XHUyMjI5XHUyMjYxXHUwMEIxXHUyMjY1XHUyMjY0XHUyMzIwXHUyMzIxXHUwMEY3XHUyMjQ4XHUwMEIwXHUyMjE5XHUwMEI3XHUyMjFBXHUyMDdGXHUwMEIyXHUyNUEwXHUwMEEwXCJcbiAgfSxcbiAgXCJpYm04NjVcIjogXCJjcDg2NVwiLFxuICBcImNzaWJtODY1XCI6IFwiY3A4NjVcIixcbiAgXCJjcDg2NlwiOiB7XG4gICAgXCJ0eXBlXCI6IFwiX3NiY3NcIixcbiAgICBcImNoYXJzXCI6IFwiXHUwNDEwXHUwNDExXHUwNDEyXHUwNDEzXHUwNDE0XHUwNDE1XHUwNDE2XHUwNDE3XHUwNDE4XHUwNDE5XHUwNDFBXHUwNDFCXHUwNDFDXHUwNDFEXHUwNDFFXHUwNDFGXHUwNDIwXHUwNDIxXHUwNDIyXHUwNDIzXHUwNDI0XHUwNDI1XHUwNDI2XHUwNDI3XHUwNDI4XHUwNDI5XHUwNDJBXHUwNDJCXHUwNDJDXHUwNDJEXHUwNDJFXHUwNDJGXHUwNDMwXHUwNDMxXHUwNDMyXHUwNDMzXHUwNDM0XHUwNDM1XHUwNDM2XHUwNDM3XHUwNDM4XHUwNDM5XHUwNDNBXHUwNDNCXHUwNDNDXHUwNDNEXHUwNDNFXHUwNDNGXHUyNTkxXHUyNTkyXHUyNTkzXHUyNTAyXHUyNTI0XHUyNTYxXHUyNTYyXHUyNTU2XHUyNTU1XHUyNTYzXHUyNTUxXHUyNTU3XHUyNTVEXHUyNTVDXHUyNTVCXHUyNTEwXHUyNTE0XHUyNTM0XHUyNTJDXHUyNTFDXHUyNTAwXHUyNTNDXHUyNTVFXHUyNTVGXHUyNTVBXHUyNTU0XHUyNTY5XHUyNTY2XHUyNTYwXHUyNTUwXHUyNTZDXHUyNTY3XHUyNTY4XHUyNTY0XHUyNTY1XHUyNTU5XHUyNTU4XHUyNTUyXHUyNTUzXHUyNTZCXHUyNTZBXHUyNTE4XHUyNTBDXHUyNTg4XHUyNTg0XHUyNThDXHUyNTkwXHUyNTgwXHUwNDQwXHUwNDQxXHUwNDQyXHUwNDQzXHUwNDQ0XHUwNDQ1XHUwNDQ2XHUwNDQ3XHUwNDQ4XHUwNDQ5XHUwNDRBXHUwNDRCXHUwNDRDXHUwNDREXHUwNDRFXHUwNDRGXHUwNDAxXHUwNDUxXHUwNDA0XHUwNDU0XHUwNDA3XHUwNDU3XHUwNDBFXHUwNDVFXHUwMEIwXHUyMjE5XHUwMEI3XHUyMjFBXHUyMTE2XHUwMEE0XHUyNUEwXHUwMEEwXCJcbiAgfSxcbiAgXCJpYm04NjZcIjogXCJjcDg2NlwiLFxuICBcImNzaWJtODY2XCI6IFwiY3A4NjZcIixcbiAgXCJjcDg2OVwiOiB7XG4gICAgXCJ0eXBlXCI6IFwiX3NiY3NcIixcbiAgICBcImNoYXJzXCI6IFwiXHVGRkZEXHVGRkZEXHVGRkZEXHVGRkZEXHVGRkZEXHVGRkZEXHUwMzg2XHVGRkZEXHUwMEI3XHUwMEFDXHUwMEE2XHUyMDE4XHUyMDE5XHUwMzg4XHUyMDE1XHUwMzg5XHUwMzhBXHUwM0FBXHUwMzhDXHVGRkZEXHVGRkZEXHUwMzhFXHUwM0FCXHUwMEE5XHUwMzhGXHUwMEIyXHUwMEIzXHUwM0FDXHUwMEEzXHUwM0FEXHUwM0FFXHUwM0FGXHUwM0NBXHUwMzkwXHUwM0NDXHUwM0NEXHUwMzkxXHUwMzkyXHUwMzkzXHUwMzk0XHUwMzk1XHUwMzk2XHUwMzk3XHUwMEJEXHUwMzk4XHUwMzk5XHUwMEFCXHUwMEJCXHUyNTkxXHUyNTkyXHUyNTkzXHUyNTAyXHUyNTI0XHUwMzlBXHUwMzlCXHUwMzlDXHUwMzlEXHUyNTYzXHUyNTUxXHUyNTU3XHUyNTVEXHUwMzlFXHUwMzlGXHUyNTEwXHUyNTE0XHUyNTM0XHUyNTJDXHUyNTFDXHUyNTAwXHUyNTNDXHUwM0EwXHUwM0ExXHUyNTVBXHUyNTU0XHUyNTY5XHUyNTY2XHUyNTYwXHUyNTUwXHUyNTZDXHUwM0EzXHUwM0E0XHUwM0E1XHUwM0E2XHUwM0E3XHUwM0E4XHUwM0E5XHUwM0IxXHUwM0IyXHUwM0IzXHUyNTE4XHUyNTBDXHUyNTg4XHUyNTg0XHUwM0I0XHUwM0I1XHUyNTgwXHUwM0I2XHUwM0I3XHUwM0I4XHUwM0I5XHUwM0JBXHUwM0JCXHUwM0JDXHUwM0JEXHUwM0JFXHUwM0JGXHUwM0MwXHUwM0MxXHUwM0MzXHUwM0MyXHUwM0M0XHUwMzg0XHUwMEFEXHUwMEIxXHUwM0M1XHUwM0M2XHUwM0M3XHUwMEE3XHUwM0M4XHUwMzg1XHUwMEIwXHUwMEE4XHUwM0M5XHUwM0NCXHUwM0IwXHUwM0NFXHUyNUEwXHUwMEEwXCJcbiAgfSxcbiAgXCJpYm04NjlcIjogXCJjcDg2OVwiLFxuICBcImNzaWJtODY5XCI6IFwiY3A4NjlcIixcbiAgXCJjcDkyMlwiOiB7XG4gICAgXCJ0eXBlXCI6IFwiX3NiY3NcIixcbiAgICBcImNoYXJzXCI6IFwiXHUwMDgwXHUwMDgxXHUwMDgyXHUwMDgzXHUwMDg0XHUwMDg1XHUwMDg2XHUwMDg3XHUwMDg4XHUwMDg5XHUwMDhBXHUwMDhCXHUwMDhDXHUwMDhEXHUwMDhFXHUwMDhGXHUwMDkwXHUwMDkxXHUwMDkyXHUwMDkzXHUwMDk0XHUwMDk1XHUwMDk2XHUwMDk3XHUwMDk4XHUwMDk5XHUwMDlBXHUwMDlCXHUwMDlDXHUwMDlEXHUwMDlFXHUwMDlGXHUwMEEwXHUwMEExXHUwMEEyXHUwMEEzXHUwMEE0XHUwMEE1XHUwMEE2XHUwMEE3XHUwMEE4XHUwMEE5XHUwMEFBXHUwMEFCXHUwMEFDXHUwMEFEXHUwMEFFXHUyMDNFXHUwMEIwXHUwMEIxXHUwMEIyXHUwMEIzXHUwMEI0XHUwMEI1XHUwMEI2XHUwMEI3XHUwMEI4XHUwMEI5XHUwMEJBXHUwMEJCXHUwMEJDXHUwMEJEXHUwMEJFXHUwMEJGXHUwMEMwXHUwMEMxXHUwMEMyXHUwMEMzXHUwMEM0XHUwMEM1XHUwMEM2XHUwMEM3XHUwMEM4XHUwMEM5XHUwMENBXHUwMENCXHUwMENDXHUwMENEXHUwMENFXHUwMENGXHUwMTYwXHUwMEQxXHUwMEQyXHUwMEQzXHUwMEQ0XHUwMEQ1XHUwMEQ2XHUwMEQ3XHUwMEQ4XHUwMEQ5XHUwMERBXHUwMERCXHUwMERDXHUwMEREXHUwMTdEXHUwMERGXHUwMEUwXHUwMEUxXHUwMEUyXHUwMEUzXHUwMEU0XHUwMEU1XHUwMEU2XHUwMEU3XHUwMEU4XHUwMEU5XHUwMEVBXHUwMEVCXHUwMEVDXHUwMEVEXHUwMEVFXHUwMEVGXHUwMTYxXHUwMEYxXHUwMEYyXHUwMEYzXHUwMEY0XHUwMEY1XHUwMEY2XHUwMEY3XHUwMEY4XHUwMEY5XHUwMEZBXHUwMEZCXHUwMEZDXHUwMEZEXHUwMTdFXHUwMEZGXCJcbiAgfSxcbiAgXCJpYm05MjJcIjogXCJjcDkyMlwiLFxuICBcImNzaWJtOTIyXCI6IFwiY3A5MjJcIixcbiAgXCJjcDEwNDZcIjoge1xuICAgIFwidHlwZVwiOiBcIl9zYmNzXCIsXG4gICAgXCJjaGFyc1wiOiBcIlx1RkU4OFx1MDBEN1x1MDBGN1x1RjhGNlx1RjhGNVx1RjhGNFx1RjhGN1x1RkU3MVx1MDA4OFx1MjVBMFx1MjUwMlx1MjUwMFx1MjUxMFx1MjUwQ1x1MjUxNFx1MjUxOFx1RkU3OVx1RkU3Qlx1RkU3RFx1RkU3Rlx1RkU3N1x1RkU4QVx1RkVGMFx1RkVGM1x1RkVGMlx1RkVDRVx1RkVDRlx1RkVEMFx1RkVGNlx1RkVGOFx1RkVGQVx1RkVGQ1x1MDBBMFx1RjhGQVx1RjhGOVx1RjhGOFx1MDBBNFx1RjhGQlx1RkU4Qlx1RkU5MVx1RkU5N1x1RkU5Qlx1RkU5Rlx1RkVBM1x1MDYwQ1x1MDBBRFx1RkVBN1x1RkVCM1x1MDY2MFx1MDY2MVx1MDY2Mlx1MDY2M1x1MDY2NFx1MDY2NVx1MDY2Nlx1MDY2N1x1MDY2OFx1MDY2OVx1RkVCN1x1MDYxQlx1RkVCQlx1RkVCRlx1RkVDQVx1MDYxRlx1RkVDQlx1MDYyMVx1MDYyMlx1MDYyM1x1MDYyNFx1MDYyNVx1MDYyNlx1MDYyN1x1MDYyOFx1MDYyOVx1MDYyQVx1MDYyQlx1MDYyQ1x1MDYyRFx1MDYyRVx1MDYyRlx1MDYzMFx1MDYzMVx1MDYzMlx1MDYzM1x1MDYzNFx1MDYzNVx1MDYzNlx1MDYzN1x1RkVDN1x1MDYzOVx1MDYzQVx1RkVDQ1x1RkU4Mlx1RkU4NFx1RkU4RVx1RkVEM1x1MDY0MFx1MDY0MVx1MDY0Mlx1MDY0M1x1MDY0NFx1MDY0NVx1MDY0Nlx1MDY0N1x1MDY0OFx1MDY0OVx1MDY0QVx1MDY0Qlx1MDY0Q1x1MDY0RFx1MDY0RVx1MDY0Rlx1MDY1MFx1MDY1MVx1MDY1Mlx1RkVEN1x1RkVEQlx1RkVERlx1RjhGQ1x1RkVGNVx1RkVGN1x1RkVGOVx1RkVGQlx1RkVFM1x1RkVFN1x1RkVFQ1x1RkVFOVx1RkZGRFwiXG4gIH0sXG4gIFwiaWJtMTA0NlwiOiBcImNwMTA0NlwiLFxuICBcImNzaWJtMTA0NlwiOiBcImNwMTA0NlwiLFxuICBcImNwMTEyNFwiOiB7XG4gICAgXCJ0eXBlXCI6IFwiX3NiY3NcIixcbiAgICBcImNoYXJzXCI6IFwiXHUwMDgwXHUwMDgxXHUwMDgyXHUwMDgzXHUwMDg0XHUwMDg1XHUwMDg2XHUwMDg3XHUwMDg4XHUwMDg5XHUwMDhBXHUwMDhCXHUwMDhDXHUwMDhEXHUwMDhFXHUwMDhGXHUwMDkwXHUwMDkxXHUwMDkyXHUwMDkzXHUwMDk0XHUwMDk1XHUwMDk2XHUwMDk3XHUwMDk4XHUwMDk5XHUwMDlBXHUwMDlCXHUwMDlDXHUwMDlEXHUwMDlFXHUwMDlGXHUwMEEwXHUwNDAxXHUwNDAyXHUwNDkwXHUwNDA0XHUwNDA1XHUwNDA2XHUwNDA3XHUwNDA4XHUwNDA5XHUwNDBBXHUwNDBCXHUwNDBDXHUwMEFEXHUwNDBFXHUwNDBGXHUwNDEwXHUwNDExXHUwNDEyXHUwNDEzXHUwNDE0XHUwNDE1XHUwNDE2XHUwNDE3XHUwNDE4XHUwNDE5XHUwNDFBXHUwNDFCXHUwNDFDXHUwNDFEXHUwNDFFXHUwNDFGXHUwNDIwXHUwNDIxXHUwNDIyXHUwNDIzXHUwNDI0XHUwNDI1XHUwNDI2XHUwNDI3XHUwNDI4XHUwNDI5XHUwNDJBXHUwNDJCXHUwNDJDXHUwNDJEXHUwNDJFXHUwNDJGXHUwNDMwXHUwNDMxXHUwNDMyXHUwNDMzXHUwNDM0XHUwNDM1XHUwNDM2XHUwNDM3XHUwNDM4XHUwNDM5XHUwNDNBXHUwNDNCXHUwNDNDXHUwNDNEXHUwNDNFXHUwNDNGXHUwNDQwXHUwNDQxXHUwNDQyXHUwNDQzXHUwNDQ0XHUwNDQ1XHUwNDQ2XHUwNDQ3XHUwNDQ4XHUwNDQ5XHUwNDRBXHUwNDRCXHUwNDRDXHUwNDREXHUwNDRFXHUwNDRGXHUyMTE2XHUwNDUxXHUwNDUyXHUwNDkxXHUwNDU0XHUwNDU1XHUwNDU2XHUwNDU3XHUwNDU4XHUwNDU5XHUwNDVBXHUwNDVCXHUwNDVDXHUwMEE3XHUwNDVFXHUwNDVGXCJcbiAgfSxcbiAgXCJpYm0xMTI0XCI6IFwiY3AxMTI0XCIsXG4gIFwiY3NpYm0xMTI0XCI6IFwiY3AxMTI0XCIsXG4gIFwiY3AxMTI1XCI6IHtcbiAgICBcInR5cGVcIjogXCJfc2Jjc1wiLFxuICAgIFwiY2hhcnNcIjogXCJcdTA0MTBcdTA0MTFcdTA0MTJcdTA0MTNcdTA0MTRcdTA0MTVcdTA0MTZcdTA0MTdcdTA0MThcdTA0MTlcdTA0MUFcdTA0MUJcdTA0MUNcdTA0MURcdTA0MUVcdTA0MUZcdTA0MjBcdTA0MjFcdTA0MjJcdTA0MjNcdTA0MjRcdTA0MjVcdTA0MjZcdTA0MjdcdTA0MjhcdTA0MjlcdTA0MkFcdTA0MkJcdTA0MkNcdTA0MkRcdTA0MkVcdTA0MkZcdTA0MzBcdTA0MzFcdTA0MzJcdTA0MzNcdTA0MzRcdTA0MzVcdTA0MzZcdTA0MzdcdTA0MzhcdTA0MzlcdTA0M0FcdTA0M0JcdTA0M0NcdTA0M0RcdTA0M0VcdTA0M0ZcdTI1OTFcdTI1OTJcdTI1OTNcdTI1MDJcdTI1MjRcdTI1NjFcdTI1NjJcdTI1NTZcdTI1NTVcdTI1NjNcdTI1NTFcdTI1NTdcdTI1NURcdTI1NUNcdTI1NUJcdTI1MTBcdTI1MTRcdTI1MzRcdTI1MkNcdTI1MUNcdTI1MDBcdTI1M0NcdTI1NUVcdTI1NUZcdTI1NUFcdTI1NTRcdTI1NjlcdTI1NjZcdTI1NjBcdTI1NTBcdTI1NkNcdTI1NjdcdTI1NjhcdTI1NjRcdTI1NjVcdTI1NTlcdTI1NThcdTI1NTJcdTI1NTNcdTI1NkJcdTI1NkFcdTI1MThcdTI1MENcdTI1ODhcdTI1ODRcdTI1OENcdTI1OTBcdTI1ODBcdTA0NDBcdTA0NDFcdTA0NDJcdTA0NDNcdTA0NDRcdTA0NDVcdTA0NDZcdTA0NDdcdTA0NDhcdTA0NDlcdTA0NEFcdTA0NEJcdTA0NENcdTA0NERcdTA0NEVcdTA0NEZcdTA0MDFcdTA0NTFcdTA0OTBcdTA0OTFcdTA0MDRcdTA0NTRcdTA0MDZcdTA0NTZcdTA0MDdcdTA0NTdcdTAwQjdcdTIyMUFcdTIxMTZcdTAwQTRcdTI1QTBcdTAwQTBcIlxuICB9LFxuICBcImlibTExMjVcIjogXCJjcDExMjVcIixcbiAgXCJjc2libTExMjVcIjogXCJjcDExMjVcIixcbiAgXCJjcDExMjlcIjoge1xuICAgIFwidHlwZVwiOiBcIl9zYmNzXCIsXG4gICAgXCJjaGFyc1wiOiBcIlx1MDA4MFx1MDA4MVx1MDA4Mlx1MDA4M1x1MDA4NFx1MDA4NVx1MDA4Nlx1MDA4N1x1MDA4OFx1MDA4OVx1MDA4QVx1MDA4Qlx1MDA4Q1x1MDA4RFx1MDA4RVx1MDA4Rlx1MDA5MFx1MDA5MVx1MDA5Mlx1MDA5M1x1MDA5NFx1MDA5NVx1MDA5Nlx1MDA5N1x1MDA5OFx1MDA5OVx1MDA5QVx1MDA5Qlx1MDA5Q1x1MDA5RFx1MDA5RVx1MDA5Rlx1MDBBMFx1MDBBMVx1MDBBMlx1MDBBM1x1MDBBNFx1MDBBNVx1MDBBNlx1MDBBN1x1MDE1M1x1MDBBOVx1MDBBQVx1MDBBQlx1MDBBQ1x1MDBBRFx1MDBBRVx1MDBBRlx1MDBCMFx1MDBCMVx1MDBCMlx1MDBCM1x1MDE3OFx1MDBCNVx1MDBCNlx1MDBCN1x1MDE1Mlx1MDBCOVx1MDBCQVx1MDBCQlx1MDBCQ1x1MDBCRFx1MDBCRVx1MDBCRlx1MDBDMFx1MDBDMVx1MDBDMlx1MDEwMlx1MDBDNFx1MDBDNVx1MDBDNlx1MDBDN1x1MDBDOFx1MDBDOVx1MDBDQVx1MDBDQlx1MDMwMFx1MDBDRFx1MDBDRVx1MDBDRlx1MDExMFx1MDBEMVx1MDMwOVx1MDBEM1x1MDBENFx1MDFBMFx1MDBENlx1MDBEN1x1MDBEOFx1MDBEOVx1MDBEQVx1MDBEQlx1MDBEQ1x1MDFBRlx1MDMwM1x1MDBERlx1MDBFMFx1MDBFMVx1MDBFMlx1MDEwM1x1MDBFNFx1MDBFNVx1MDBFNlx1MDBFN1x1MDBFOFx1MDBFOVx1MDBFQVx1MDBFQlx1MDMwMVx1MDBFRFx1MDBFRVx1MDBFRlx1MDExMVx1MDBGMVx1MDMyM1x1MDBGM1x1MDBGNFx1MDFBMVx1MDBGNlx1MDBGN1x1MDBGOFx1MDBGOVx1MDBGQVx1MDBGQlx1MDBGQ1x1MDFCMFx1MjBBQlx1MDBGRlwiXG4gIH0sXG4gIFwiaWJtMTEyOVwiOiBcImNwMTEyOVwiLFxuICBcImNzaWJtMTEyOVwiOiBcImNwMTEyOVwiLFxuICBcImNwMTEzM1wiOiB7XG4gICAgXCJ0eXBlXCI6IFwiX3NiY3NcIixcbiAgICBcImNoYXJzXCI6IFwiXHUwMDgwXHUwMDgxXHUwMDgyXHUwMDgzXHUwMDg0XHUwMDg1XHUwMDg2XHUwMDg3XHUwMDg4XHUwMDg5XHUwMDhBXHUwMDhCXHUwMDhDXHUwMDhEXHUwMDhFXHUwMDhGXHUwMDkwXHUwMDkxXHUwMDkyXHUwMDkzXHUwMDk0XHUwMDk1XHUwMDk2XHUwMDk3XHUwMDk4XHUwMDk5XHUwMDlBXHUwMDlCXHUwMDlDXHUwMDlEXHUwMDlFXHUwMDlGXHUwMEEwXHUwRTgxXHUwRTgyXHUwRTg0XHUwRTg3XHUwRTg4XHUwRUFBXHUwRThBXHUwRThEXHUwRTk0XHUwRTk1XHUwRTk2XHUwRTk3XHUwRTk5XHUwRTlBXHUwRTlCXHUwRTlDXHUwRTlEXHUwRTlFXHUwRTlGXHUwRUExXHUwRUEyXHUwRUEzXHUwRUE1XHUwRUE3XHUwRUFCXHUwRUFEXHUwRUFFXHVGRkZEXHVGRkZEXHVGRkZEXHUwRUFGXHUwRUIwXHUwRUIyXHUwRUIzXHUwRUI0XHUwRUI1XHUwRUI2XHUwRUI3XHUwRUI4XHUwRUI5XHUwRUJDXHUwRUIxXHUwRUJCXHUwRUJEXHVGRkZEXHVGRkZEXHVGRkZEXHUwRUMwXHUwRUMxXHUwRUMyXHUwRUMzXHUwRUM0XHUwRUM4XHUwRUM5XHUwRUNBXHUwRUNCXHUwRUNDXHUwRUNEXHUwRUM2XHVGRkZEXHUwRURDXHUwRUREXHUyMEFEXHVGRkZEXHVGRkZEXHVGRkZEXHVGRkZEXHVGRkZEXHVGRkZEXHVGRkZEXHVGRkZEXHVGRkZEXHVGRkZEXHVGRkZEXHVGRkZEXHVGRkZEXHVGRkZEXHVGRkZEXHVGRkZEXHUwRUQwXHUwRUQxXHUwRUQyXHUwRUQzXHUwRUQ0XHUwRUQ1XHUwRUQ2XHUwRUQ3XHUwRUQ4XHUwRUQ5XHVGRkZEXHVGRkZEXHUwMEEyXHUwMEFDXHUwMEE2XHVGRkZEXCJcbiAgfSxcbiAgXCJpYm0xMTMzXCI6IFwiY3AxMTMzXCIsXG4gIFwiY3NpYm0xMTMzXCI6IFwiY3AxMTMzXCIsXG4gIFwiY3AxMTYxXCI6IHtcbiAgICBcInR5cGVcIjogXCJfc2Jjc1wiLFxuICAgIFwiY2hhcnNcIjogXCJcdUZGRkRcdUZGRkRcdUZGRkRcdUZGRkRcdUZGRkRcdUZGRkRcdUZGRkRcdUZGRkRcdUZGRkRcdUZGRkRcdUZGRkRcdUZGRkRcdUZGRkRcdUZGRkRcdUZGRkRcdUZGRkRcdUZGRkRcdUZGRkRcdUZGRkRcdUZGRkRcdUZGRkRcdUZGRkRcdUZGRkRcdUZGRkRcdUZGRkRcdUZGRkRcdUZGRkRcdUZGRkRcdUZGRkRcdUZGRkRcdUZGRkRcdUZGRkRcdTBFNDhcdTBFMDFcdTBFMDJcdTBFMDNcdTBFMDRcdTBFMDVcdTBFMDZcdTBFMDdcdTBFMDhcdTBFMDlcdTBFMEFcdTBFMEJcdTBFMENcdTBFMERcdTBFMEVcdTBFMEZcdTBFMTBcdTBFMTFcdTBFMTJcdTBFMTNcdTBFMTRcdTBFMTVcdTBFMTZcdTBFMTdcdTBFMThcdTBFMTlcdTBFMUFcdTBFMUJcdTBFMUNcdTBFMURcdTBFMUVcdTBFMUZcdTBFMjBcdTBFMjFcdTBFMjJcdTBFMjNcdTBFMjRcdTBFMjVcdTBFMjZcdTBFMjdcdTBFMjhcdTBFMjlcdTBFMkFcdTBFMkJcdTBFMkNcdTBFMkRcdTBFMkVcdTBFMkZcdTBFMzBcdTBFMzFcdTBFMzJcdTBFMzNcdTBFMzRcdTBFMzVcdTBFMzZcdTBFMzdcdTBFMzhcdTBFMzlcdTBFM0FcdTBFNDlcdTBFNEFcdTBFNEJcdTIwQUNcdTBFM0ZcdTBFNDBcdTBFNDFcdTBFNDJcdTBFNDNcdTBFNDRcdTBFNDVcdTBFNDZcdTBFNDdcdTBFNDhcdTBFNDlcdTBFNEFcdTBFNEJcdTBFNENcdTBFNERcdTBFNEVcdTBFNEZcdTBFNTBcdTBFNTFcdTBFNTJcdTBFNTNcdTBFNTRcdTBFNTVcdTBFNTZcdTBFNTdcdTBFNThcdTBFNTlcdTBFNUFcdTBFNUJcdTAwQTJcdTAwQUNcdTAwQTZcdTAwQTBcIlxuICB9LFxuICBcImlibTExNjFcIjogXCJjcDExNjFcIixcbiAgXCJjc2libTExNjFcIjogXCJjcDExNjFcIixcbiAgXCJjcDExNjJcIjoge1xuICAgIFwidHlwZVwiOiBcIl9zYmNzXCIsXG4gICAgXCJjaGFyc1wiOiBcIlx1MjBBQ1x1MDA4MVx1MDA4Mlx1MDA4M1x1MDA4NFx1MjAyNlx1MDA4Nlx1MDA4N1x1MDA4OFx1MDA4OVx1MDA4QVx1MDA4Qlx1MDA4Q1x1MDA4RFx1MDA4RVx1MDA4Rlx1MDA5MFx1MjAxOFx1MjAxOVx1MjAxQ1x1MjAxRFx1MjAyMlx1MjAxM1x1MjAxNFx1MDA5OFx1MDA5OVx1MDA5QVx1MDA5Qlx1MDA5Q1x1MDA5RFx1MDA5RVx1MDA5Rlx1MDBBMFx1MEUwMVx1MEUwMlx1MEUwM1x1MEUwNFx1MEUwNVx1MEUwNlx1MEUwN1x1MEUwOFx1MEUwOVx1MEUwQVx1MEUwQlx1MEUwQ1x1MEUwRFx1MEUwRVx1MEUwRlx1MEUxMFx1MEUxMVx1MEUxMlx1MEUxM1x1MEUxNFx1MEUxNVx1MEUxNlx1MEUxN1x1MEUxOFx1MEUxOVx1MEUxQVx1MEUxQlx1MEUxQ1x1MEUxRFx1MEUxRVx1MEUxRlx1MEUyMFx1MEUyMVx1MEUyMlx1MEUyM1x1MEUyNFx1MEUyNVx1MEUyNlx1MEUyN1x1MEUyOFx1MEUyOVx1MEUyQVx1MEUyQlx1MEUyQ1x1MEUyRFx1MEUyRVx1MEUyRlx1MEUzMFx1MEUzMVx1MEUzMlx1MEUzM1x1MEUzNFx1MEUzNVx1MEUzNlx1MEUzN1x1MEUzOFx1MEUzOVx1MEUzQVx1RkZGRFx1RkZGRFx1RkZGRFx1RkZGRFx1MEUzRlx1MEU0MFx1MEU0MVx1MEU0Mlx1MEU0M1x1MEU0NFx1MEU0NVx1MEU0Nlx1MEU0N1x1MEU0OFx1MEU0OVx1MEU0QVx1MEU0Qlx1MEU0Q1x1MEU0RFx1MEU0RVx1MEU0Rlx1MEU1MFx1MEU1MVx1MEU1Mlx1MEU1M1x1MEU1NFx1MEU1NVx1MEU1Nlx1MEU1N1x1MEU1OFx1MEU1OVx1MEU1QVx1MEU1Qlx1RkZGRFx1RkZGRFx1RkZGRFx1RkZGRFwiXG4gIH0sXG4gIFwiaWJtMTE2MlwiOiBcImNwMTE2MlwiLFxuICBcImNzaWJtMTE2MlwiOiBcImNwMTE2MlwiLFxuICBcImNwMTE2M1wiOiB7XG4gICAgXCJ0eXBlXCI6IFwiX3NiY3NcIixcbiAgICBcImNoYXJzXCI6IFwiXHUwMDgwXHUwMDgxXHUwMDgyXHUwMDgzXHUwMDg0XHUwMDg1XHUwMDg2XHUwMDg3XHUwMDg4XHUwMDg5XHUwMDhBXHUwMDhCXHUwMDhDXHUwMDhEXHUwMDhFXHUwMDhGXHUwMDkwXHUwMDkxXHUwMDkyXHUwMDkzXHUwMDk0XHUwMDk1XHUwMDk2XHUwMDk3XHUwMDk4XHUwMDk5XHUwMDlBXHUwMDlCXHUwMDlDXHUwMDlEXHUwMDlFXHUwMDlGXHUwMEEwXHUwMEExXHUwMEEyXHUwMEEzXHUyMEFDXHUwMEE1XHUwMEE2XHUwMEE3XHUwMTUzXHUwMEE5XHUwMEFBXHUwMEFCXHUwMEFDXHUwMEFEXHUwMEFFXHUwMEFGXHUwMEIwXHUwMEIxXHUwMEIyXHUwMEIzXHUwMTc4XHUwMEI1XHUwMEI2XHUwMEI3XHUwMTUyXHUwMEI5XHUwMEJBXHUwMEJCXHUwMEJDXHUwMEJEXHUwMEJFXHUwMEJGXHUwMEMwXHUwMEMxXHUwMEMyXHUwMTAyXHUwMEM0XHUwMEM1XHUwMEM2XHUwMEM3XHUwMEM4XHUwMEM5XHUwMENBXHUwMENCXHUwMzAwXHUwMENEXHUwMENFXHUwMENGXHUwMTEwXHUwMEQxXHUwMzA5XHUwMEQzXHUwMEQ0XHUwMUEwXHUwMEQ2XHUwMEQ3XHUwMEQ4XHUwMEQ5XHUwMERBXHUwMERCXHUwMERDXHUwMUFGXHUwMzAzXHUwMERGXHUwMEUwXHUwMEUxXHUwMEUyXHUwMTAzXHUwMEU0XHUwMEU1XHUwMEU2XHUwMEU3XHUwMEU4XHUwMEU5XHUwMEVBXHUwMEVCXHUwMzAxXHUwMEVEXHUwMEVFXHUwMEVGXHUwMTExXHUwMEYxXHUwMzIzXHUwMEYzXHUwMEY0XHUwMUExXHUwMEY2XHUwMEY3XHUwMEY4XHUwMEY5XHUwMEZBXHUwMEZCXHUwMEZDXHUwMUIwXHUyMEFCXHUwMEZGXCJcbiAgfSxcbiAgXCJpYm0xMTYzXCI6IFwiY3AxMTYzXCIsXG4gIFwiY3NpYm0xMTYzXCI6IFwiY3AxMTYzXCIsXG4gIFwibWFjY3JvYXRpYW5cIjoge1xuICAgIFwidHlwZVwiOiBcIl9zYmNzXCIsXG4gICAgXCJjaGFyc1wiOiBcIlx1MDBDNFx1MDBDNVx1MDBDN1x1MDBDOVx1MDBEMVx1MDBENlx1MDBEQ1x1MDBFMVx1MDBFMFx1MDBFMlx1MDBFNFx1MDBFM1x1MDBFNVx1MDBFN1x1MDBFOVx1MDBFOFx1MDBFQVx1MDBFQlx1MDBFRFx1MDBFQ1x1MDBFRVx1MDBFRlx1MDBGMVx1MDBGM1x1MDBGMlx1MDBGNFx1MDBGNlx1MDBGNVx1MDBGQVx1MDBGOVx1MDBGQlx1MDBGQ1x1MjAyMFx1MDBCMFx1MDBBMlx1MDBBM1x1MDBBN1x1MjAyMlx1MDBCNlx1MDBERlx1MDBBRVx1MDE2MFx1MjEyMlx1MDBCNFx1MDBBOFx1MjI2MFx1MDE3RFx1MDBEOFx1MjIxRVx1MDBCMVx1MjI2NFx1MjI2NVx1MjIwNlx1MDBCNVx1MjIwMlx1MjIxMVx1MjIwRlx1MDE2MVx1MjIyQlx1MDBBQVx1MDBCQVx1MjEyNlx1MDE3RVx1MDBGOFx1MDBCRlx1MDBBMVx1MDBBQ1x1MjIxQVx1MDE5Mlx1MjI0OFx1MDEwNlx1MDBBQlx1MDEwQ1x1MjAyNlx1MDBBMFx1MDBDMFx1MDBDM1x1MDBENVx1MDE1Mlx1MDE1M1x1MDExMFx1MjAxNFx1MjAxQ1x1MjAxRFx1MjAxOFx1MjAxOVx1MDBGN1x1MjVDQVx1RkZGRFx1MDBBOVx1MjA0NFx1MDBBNFx1MjAzOVx1MjAzQVx1MDBDNlx1MDBCQlx1MjAxM1x1MDBCN1x1MjAxQVx1MjAxRVx1MjAzMFx1MDBDMlx1MDEwN1x1MDBDMVx1MDEwRFx1MDBDOFx1MDBDRFx1MDBDRVx1MDBDRlx1MDBDQ1x1MDBEM1x1MDBENFx1MDExMVx1MDBEMlx1MDBEQVx1MDBEQlx1MDBEOVx1MDEzMVx1MDJDNlx1MDJEQ1x1MDBBRlx1MDNDMFx1MDBDQlx1MDJEQVx1MDBCOFx1MDBDQVx1MDBFNlx1MDJDN1wiXG4gIH0sXG4gIFwibWFjY3lyaWxsaWNcIjoge1xuICAgIFwidHlwZVwiOiBcIl9zYmNzXCIsXG4gICAgXCJjaGFyc1wiOiBcIlx1MDQxMFx1MDQxMVx1MDQxMlx1MDQxM1x1MDQxNFx1MDQxNVx1MDQxNlx1MDQxN1x1MDQxOFx1MDQxOVx1MDQxQVx1MDQxQlx1MDQxQ1x1MDQxRFx1MDQxRVx1MDQxRlx1MDQyMFx1MDQyMVx1MDQyMlx1MDQyM1x1MDQyNFx1MDQyNVx1MDQyNlx1MDQyN1x1MDQyOFx1MDQyOVx1MDQyQVx1MDQyQlx1MDQyQ1x1MDQyRFx1MDQyRVx1MDQyRlx1MjAyMFx1MDBCMFx1MDBBMlx1MDBBM1x1MDBBN1x1MjAyMlx1MDBCNlx1MDQwNlx1MDBBRVx1MDBBOVx1MjEyMlx1MDQwMlx1MDQ1Mlx1MjI2MFx1MDQwM1x1MDQ1M1x1MjIxRVx1MDBCMVx1MjI2NFx1MjI2NVx1MDQ1Nlx1MDBCNVx1MjIwMlx1MDQwOFx1MDQwNFx1MDQ1NFx1MDQwN1x1MDQ1N1x1MDQwOVx1MDQ1OVx1MDQwQVx1MDQ1QVx1MDQ1OFx1MDQwNVx1MDBBQ1x1MjIxQVx1MDE5Mlx1MjI0OFx1MjIwNlx1MDBBQlx1MDBCQlx1MjAyNlx1MDBBMFx1MDQwQlx1MDQ1Qlx1MDQwQ1x1MDQ1Q1x1MDQ1NVx1MjAxM1x1MjAxNFx1MjAxQ1x1MjAxRFx1MjAxOFx1MjAxOVx1MDBGN1x1MjAxRVx1MDQwRVx1MDQ1RVx1MDQwRlx1MDQ1Rlx1MjExNlx1MDQwMVx1MDQ1MVx1MDQ0Rlx1MDQzMFx1MDQzMVx1MDQzMlx1MDQzM1x1MDQzNFx1MDQzNVx1MDQzNlx1MDQzN1x1MDQzOFx1MDQzOVx1MDQzQVx1MDQzQlx1MDQzQ1x1MDQzRFx1MDQzRVx1MDQzRlx1MDQ0MFx1MDQ0MVx1MDQ0Mlx1MDQ0M1x1MDQ0NFx1MDQ0NVx1MDQ0Nlx1MDQ0N1x1MDQ0OFx1MDQ0OVx1MDQ0QVx1MDQ0Qlx1MDQ0Q1x1MDQ0RFx1MDQ0RVx1MDBBNFwiXG4gIH0sXG4gIFwibWFjZ3JlZWtcIjoge1xuICAgIFwidHlwZVwiOiBcIl9zYmNzXCIsXG4gICAgXCJjaGFyc1wiOiBcIlx1MDBDNFx1MDBCOVx1MDBCMlx1MDBDOVx1MDBCM1x1MDBENlx1MDBEQ1x1MDM4NVx1MDBFMFx1MDBFMlx1MDBFNFx1MDM4NFx1MDBBOFx1MDBFN1x1MDBFOVx1MDBFOFx1MDBFQVx1MDBFQlx1MDBBM1x1MjEyMlx1MDBFRVx1MDBFRlx1MjAyMlx1MDBCRFx1MjAzMFx1MDBGNFx1MDBGNlx1MDBBNlx1MDBBRFx1MDBGOVx1MDBGQlx1MDBGQ1x1MjAyMFx1MDM5M1x1MDM5NFx1MDM5OFx1MDM5Qlx1MDM5RVx1MDNBMFx1MDBERlx1MDBBRVx1MDBBOVx1MDNBM1x1MDNBQVx1MDBBN1x1MjI2MFx1MDBCMFx1MDM4N1x1MDM5MVx1MDBCMVx1MjI2NFx1MjI2NVx1MDBBNVx1MDM5Mlx1MDM5NVx1MDM5Nlx1MDM5N1x1MDM5OVx1MDM5QVx1MDM5Q1x1MDNBNlx1MDNBQlx1MDNBOFx1MDNBOVx1MDNBQ1x1MDM5RFx1MDBBQ1x1MDM5Rlx1MDNBMVx1MjI0OFx1MDNBNFx1MDBBQlx1MDBCQlx1MjAyNlx1MDBBMFx1MDNBNVx1MDNBN1x1MDM4Nlx1MDM4OFx1MDE1M1x1MjAxM1x1MjAxNVx1MjAxQ1x1MjAxRFx1MjAxOFx1MjAxOVx1MDBGN1x1MDM4OVx1MDM4QVx1MDM4Q1x1MDM4RVx1MDNBRFx1MDNBRVx1MDNBRlx1MDNDQ1x1MDM4Rlx1MDNDRFx1MDNCMVx1MDNCMlx1MDNDOFx1MDNCNFx1MDNCNVx1MDNDNlx1MDNCM1x1MDNCN1x1MDNCOVx1MDNCRVx1MDNCQVx1MDNCQlx1MDNCQ1x1MDNCRFx1MDNCRlx1MDNDMFx1MDNDRVx1MDNDMVx1MDNDM1x1MDNDNFx1MDNCOFx1MDNDOVx1MDNDMlx1MDNDN1x1MDNDNVx1MDNCNlx1MDNDQVx1MDNDQlx1MDM5MFx1MDNCMFx1RkZGRFwiXG4gIH0sXG4gIFwibWFjaWNlbGFuZFwiOiB7XG4gICAgXCJ0eXBlXCI6IFwiX3NiY3NcIixcbiAgICBcImNoYXJzXCI6IFwiXHUwMEM0XHUwMEM1XHUwMEM3XHUwMEM5XHUwMEQxXHUwMEQ2XHUwMERDXHUwMEUxXHUwMEUwXHUwMEUyXHUwMEU0XHUwMEUzXHUwMEU1XHUwMEU3XHUwMEU5XHUwMEU4XHUwMEVBXHUwMEVCXHUwMEVEXHUwMEVDXHUwMEVFXHUwMEVGXHUwMEYxXHUwMEYzXHUwMEYyXHUwMEY0XHUwMEY2XHUwMEY1XHUwMEZBXHUwMEY5XHUwMEZCXHUwMEZDXHUwMEREXHUwMEIwXHUwMEEyXHUwMEEzXHUwMEE3XHUyMDIyXHUwMEI2XHUwMERGXHUwMEFFXHUwMEE5XHUyMTIyXHUwMEI0XHUwMEE4XHUyMjYwXHUwMEM2XHUwMEQ4XHUyMjFFXHUwMEIxXHUyMjY0XHUyMjY1XHUwMEE1XHUwMEI1XHUyMjAyXHUyMjExXHUyMjBGXHUwM0MwXHUyMjJCXHUwMEFBXHUwMEJBXHUyMTI2XHUwMEU2XHUwMEY4XHUwMEJGXHUwMEExXHUwMEFDXHUyMjFBXHUwMTkyXHUyMjQ4XHUyMjA2XHUwMEFCXHUwMEJCXHUyMDI2XHUwMEEwXHUwMEMwXHUwMEMzXHUwMEQ1XHUwMTUyXHUwMTUzXHUyMDEzXHUyMDE0XHUyMDFDXHUyMDFEXHUyMDE4XHUyMDE5XHUwMEY3XHUyNUNBXHUwMEZGXHUwMTc4XHUyMDQ0XHUwMEE0XHUwMEQwXHUwMEYwXHUwMERFXHUwMEZFXHUwMEZEXHUwMEI3XHUyMDFBXHUyMDFFXHUyMDMwXHUwMEMyXHUwMENBXHUwMEMxXHUwMENCXHUwMEM4XHUwMENEXHUwMENFXHUwMENGXHUwMENDXHUwMEQzXHUwMEQ0XHVGRkZEXHUwMEQyXHUwMERBXHUwMERCXHUwMEQ5XHUwMTMxXHUwMkM2XHUwMkRDXHUwMEFGXHUwMkQ4XHUwMkQ5XHUwMkRBXHUwMEI4XHUwMkREXHUwMkRCXHUwMkM3XCJcbiAgfSxcbiAgXCJtYWNyb21hblwiOiB7XG4gICAgXCJ0eXBlXCI6IFwiX3NiY3NcIixcbiAgICBcImNoYXJzXCI6IFwiXHUwMEM0XHUwMEM1XHUwMEM3XHUwMEM5XHUwMEQxXHUwMEQ2XHUwMERDXHUwMEUxXHUwMEUwXHUwMEUyXHUwMEU0XHUwMEUzXHUwMEU1XHUwMEU3XHUwMEU5XHUwMEU4XHUwMEVBXHUwMEVCXHUwMEVEXHUwMEVDXHUwMEVFXHUwMEVGXHUwMEYxXHUwMEYzXHUwMEYyXHUwMEY0XHUwMEY2XHUwMEY1XHUwMEZBXHUwMEY5XHUwMEZCXHUwMEZDXHUyMDIwXHUwMEIwXHUwMEEyXHUwMEEzXHUwMEE3XHUyMDIyXHUwMEI2XHUwMERGXHUwMEFFXHUwMEE5XHUyMTIyXHUwMEI0XHUwMEE4XHUyMjYwXHUwMEM2XHUwMEQ4XHUyMjFFXHUwMEIxXHUyMjY0XHUyMjY1XHUwMEE1XHUwMEI1XHUyMjAyXHUyMjExXHUyMjBGXHUwM0MwXHUyMjJCXHUwMEFBXHUwMEJBXHUyMTI2XHUwMEU2XHUwMEY4XHUwMEJGXHUwMEExXHUwMEFDXHUyMjFBXHUwMTkyXHUyMjQ4XHUyMjA2XHUwMEFCXHUwMEJCXHUyMDI2XHUwMEEwXHUwMEMwXHUwMEMzXHUwMEQ1XHUwMTUyXHUwMTUzXHUyMDEzXHUyMDE0XHUyMDFDXHUyMDFEXHUyMDE4XHUyMDE5XHUwMEY3XHUyNUNBXHUwMEZGXHUwMTc4XHUyMDQ0XHUwMEE0XHUyMDM5XHUyMDNBXHVGQjAxXHVGQjAyXHUyMDIxXHUwMEI3XHUyMDFBXHUyMDFFXHUyMDMwXHUwMEMyXHUwMENBXHUwMEMxXHUwMENCXHUwMEM4XHUwMENEXHUwMENFXHUwMENGXHUwMENDXHUwMEQzXHUwMEQ0XHVGRkZEXHUwMEQyXHUwMERBXHUwMERCXHUwMEQ5XHUwMTMxXHUwMkM2XHUwMkRDXHUwMEFGXHUwMkQ4XHUwMkQ5XHUwMkRBXHUwMEI4XHUwMkREXHUwMkRCXHUwMkM3XCJcbiAgfSxcbiAgXCJtYWNyb21hbmlhXCI6IHtcbiAgICBcInR5cGVcIjogXCJfc2Jjc1wiLFxuICAgIFwiY2hhcnNcIjogXCJcdTAwQzRcdTAwQzVcdTAwQzdcdTAwQzlcdTAwRDFcdTAwRDZcdTAwRENcdTAwRTFcdTAwRTBcdTAwRTJcdTAwRTRcdTAwRTNcdTAwRTVcdTAwRTdcdTAwRTlcdTAwRThcdTAwRUFcdTAwRUJcdTAwRURcdTAwRUNcdTAwRUVcdTAwRUZcdTAwRjFcdTAwRjNcdTAwRjJcdTAwRjRcdTAwRjZcdTAwRjVcdTAwRkFcdTAwRjlcdTAwRkJcdTAwRkNcdTIwMjBcdTAwQjBcdTAwQTJcdTAwQTNcdTAwQTdcdTIwMjJcdTAwQjZcdTAwREZcdTAwQUVcdTAwQTlcdTIxMjJcdTAwQjRcdTAwQThcdTIyNjBcdTAxMDJcdTAxNUVcdTIyMUVcdTAwQjFcdTIyNjRcdTIyNjVcdTAwQTVcdTAwQjVcdTIyMDJcdTIyMTFcdTIyMEZcdTAzQzBcdTIyMkJcdTAwQUFcdTAwQkFcdTIxMjZcdTAxMDNcdTAxNUZcdTAwQkZcdTAwQTFcdTAwQUNcdTIyMUFcdTAxOTJcdTIyNDhcdTIyMDZcdTAwQUJcdTAwQkJcdTIwMjZcdTAwQTBcdTAwQzBcdTAwQzNcdTAwRDVcdTAxNTJcdTAxNTNcdTIwMTNcdTIwMTRcdTIwMUNcdTIwMURcdTIwMThcdTIwMTlcdTAwRjdcdTI1Q0FcdTAwRkZcdTAxNzhcdTIwNDRcdTAwQTRcdTIwMzlcdTIwM0FcdTAxNjJcdTAxNjNcdTIwMjFcdTAwQjdcdTIwMUFcdTIwMUVcdTIwMzBcdTAwQzJcdTAwQ0FcdTAwQzFcdTAwQ0JcdTAwQzhcdTAwQ0RcdTAwQ0VcdTAwQ0ZcdTAwQ0NcdTAwRDNcdTAwRDRcdUZGRkRcdTAwRDJcdTAwREFcdTAwREJcdTAwRDlcdTAxMzFcdTAyQzZcdTAyRENcdTAwQUZcdTAyRDhcdTAyRDlcdTAyREFcdTAwQjhcdTAyRERcdTAyREJcdTAyQzdcIlxuICB9LFxuICBcIm1hY3RoYWlcIjoge1xuICAgIFwidHlwZVwiOiBcIl9zYmNzXCIsXG4gICAgXCJjaGFyc1wiOiBcIlx1MDBBQlx1MDBCQlx1MjAyNlx1Rjg4Q1x1Rjg4Rlx1Rjg5Mlx1Rjg5NVx1Rjg5OFx1Rjg4Qlx1Rjg4RVx1Rjg5MVx1Rjg5NFx1Rjg5N1x1MjAxQ1x1MjAxRFx1Rjg5OVx1RkZGRFx1MjAyMlx1Rjg4NFx1Rjg4OVx1Rjg4NVx1Rjg4Nlx1Rjg4N1x1Rjg4OFx1Rjg4QVx1Rjg4RFx1Rjg5MFx1Rjg5M1x1Rjg5Nlx1MjAxOFx1MjAxOVx1RkZGRFx1MDBBMFx1MEUwMVx1MEUwMlx1MEUwM1x1MEUwNFx1MEUwNVx1MEUwNlx1MEUwN1x1MEUwOFx1MEUwOVx1MEUwQVx1MEUwQlx1MEUwQ1x1MEUwRFx1MEUwRVx1MEUwRlx1MEUxMFx1MEUxMVx1MEUxMlx1MEUxM1x1MEUxNFx1MEUxNVx1MEUxNlx1MEUxN1x1MEUxOFx1MEUxOVx1MEUxQVx1MEUxQlx1MEUxQ1x1MEUxRFx1MEUxRVx1MEUxRlx1MEUyMFx1MEUyMVx1MEUyMlx1MEUyM1x1MEUyNFx1MEUyNVx1MEUyNlx1MEUyN1x1MEUyOFx1MEUyOVx1MEUyQVx1MEUyQlx1MEUyQ1x1MEUyRFx1MEUyRVx1MEUyRlx1MEUzMFx1MEUzMVx1MEUzMlx1MEUzM1x1MEUzNFx1MEUzNVx1MEUzNlx1MEUzN1x1MEUzOFx1MEUzOVx1MEUzQVx1RkVGRlx1MjAwQlx1MjAxM1x1MjAxNFx1MEUzRlx1MEU0MFx1MEU0MVx1MEU0Mlx1MEU0M1x1MEU0NFx1MEU0NVx1MEU0Nlx1MEU0N1x1MEU0OFx1MEU0OVx1MEU0QVx1MEU0Qlx1MEU0Q1x1MEU0RFx1MjEyMlx1MEU0Rlx1MEU1MFx1MEU1MVx1MEU1Mlx1MEU1M1x1MEU1NFx1MEU1NVx1MEU1Nlx1MEU1N1x1MEU1OFx1MEU1OVx1MDBBRVx1MDBBOVx1RkZGRFx1RkZGRFx1RkZGRFx1RkZGRFwiXG4gIH0sXG4gIFwibWFjdHVya2lzaFwiOiB7XG4gICAgXCJ0eXBlXCI6IFwiX3NiY3NcIixcbiAgICBcImNoYXJzXCI6IFwiXHUwMEM0XHUwMEM1XHUwMEM3XHUwMEM5XHUwMEQxXHUwMEQ2XHUwMERDXHUwMEUxXHUwMEUwXHUwMEUyXHUwMEU0XHUwMEUzXHUwMEU1XHUwMEU3XHUwMEU5XHUwMEU4XHUwMEVBXHUwMEVCXHUwMEVEXHUwMEVDXHUwMEVFXHUwMEVGXHUwMEYxXHUwMEYzXHUwMEYyXHUwMEY0XHUwMEY2XHUwMEY1XHUwMEZBXHUwMEY5XHUwMEZCXHUwMEZDXHUyMDIwXHUwMEIwXHUwMEEyXHUwMEEzXHUwMEE3XHUyMDIyXHUwMEI2XHUwMERGXHUwMEFFXHUwMEE5XHUyMTIyXHUwMEI0XHUwMEE4XHUyMjYwXHUwMEM2XHUwMEQ4XHUyMjFFXHUwMEIxXHUyMjY0XHUyMjY1XHUwMEE1XHUwMEI1XHUyMjAyXHUyMjExXHUyMjBGXHUwM0MwXHUyMjJCXHUwMEFBXHUwMEJBXHUyMTI2XHUwMEU2XHUwMEY4XHUwMEJGXHUwMEExXHUwMEFDXHUyMjFBXHUwMTkyXHUyMjQ4XHUyMjA2XHUwMEFCXHUwMEJCXHUyMDI2XHUwMEEwXHUwMEMwXHUwMEMzXHUwMEQ1XHUwMTUyXHUwMTUzXHUyMDEzXHUyMDE0XHUyMDFDXHUyMDFEXHUyMDE4XHUyMDE5XHUwMEY3XHUyNUNBXHUwMEZGXHUwMTc4XHUwMTFFXHUwMTFGXHUwMTMwXHUwMTMxXHUwMTVFXHUwMTVGXHUyMDIxXHUwMEI3XHUyMDFBXHUyMDFFXHUyMDMwXHUwMEMyXHUwMENBXHUwMEMxXHUwMENCXHUwMEM4XHUwMENEXHUwMENFXHUwMENGXHUwMENDXHUwMEQzXHUwMEQ0XHVGRkZEXHUwMEQyXHUwMERBXHUwMERCXHUwMEQ5XHVGRkZEXHUwMkM2XHUwMkRDXHUwMEFGXHUwMkQ4XHUwMkQ5XHUwMkRBXHUwMEI4XHUwMkREXHUwMkRCXHUwMkM3XCJcbiAgfSxcbiAgXCJtYWN1a3JhaW5lXCI6IHtcbiAgICBcInR5cGVcIjogXCJfc2Jjc1wiLFxuICAgIFwiY2hhcnNcIjogXCJcdTA0MTBcdTA0MTFcdTA0MTJcdTA0MTNcdTA0MTRcdTA0MTVcdTA0MTZcdTA0MTdcdTA0MThcdTA0MTlcdTA0MUFcdTA0MUJcdTA0MUNcdTA0MURcdTA0MUVcdTA0MUZcdTA0MjBcdTA0MjFcdTA0MjJcdTA0MjNcdTA0MjRcdTA0MjVcdTA0MjZcdTA0MjdcdTA0MjhcdTA0MjlcdTA0MkFcdTA0MkJcdTA0MkNcdTA0MkRcdTA0MkVcdTA0MkZcdTIwMjBcdTAwQjBcdTA0OTBcdTAwQTNcdTAwQTdcdTIwMjJcdTAwQjZcdTA0MDZcdTAwQUVcdTAwQTlcdTIxMjJcdTA0MDJcdTA0NTJcdTIyNjBcdTA0MDNcdTA0NTNcdTIyMUVcdTAwQjFcdTIyNjRcdTIyNjVcdTA0NTZcdTAwQjVcdTA0OTFcdTA0MDhcdTA0MDRcdTA0NTRcdTA0MDdcdTA0NTdcdTA0MDlcdTA0NTlcdTA0MEFcdTA0NUFcdTA0NThcdTA0MDVcdTAwQUNcdTIyMUFcdTAxOTJcdTIyNDhcdTIyMDZcdTAwQUJcdTAwQkJcdTIwMjZcdTAwQTBcdTA0MEJcdTA0NUJcdTA0MENcdTA0NUNcdTA0NTVcdTIwMTNcdTIwMTRcdTIwMUNcdTIwMURcdTIwMThcdTIwMTlcdTAwRjdcdTIwMUVcdTA0MEVcdTA0NUVcdTA0MEZcdTA0NUZcdTIxMTZcdTA0MDFcdTA0NTFcdTA0NEZcdTA0MzBcdTA0MzFcdTA0MzJcdTA0MzNcdTA0MzRcdTA0MzVcdTA0MzZcdTA0MzdcdTA0MzhcdTA0MzlcdTA0M0FcdTA0M0JcdTA0M0NcdTA0M0RcdTA0M0VcdTA0M0ZcdTA0NDBcdTA0NDFcdTA0NDJcdTA0NDNcdTA0NDRcdTA0NDVcdTA0NDZcdTA0NDdcdTA0NDhcdTA0NDlcdTA0NEFcdTA0NEJcdTA0NENcdTA0NERcdTA0NEVcdTAwQTRcIlxuICB9LFxuICBcImtvaThyXCI6IHtcbiAgICBcInR5cGVcIjogXCJfc2Jjc1wiLFxuICAgIFwiY2hhcnNcIjogXCJcdTI1MDBcdTI1MDJcdTI1MENcdTI1MTBcdTI1MTRcdTI1MThcdTI1MUNcdTI1MjRcdTI1MkNcdTI1MzRcdTI1M0NcdTI1ODBcdTI1ODRcdTI1ODhcdTI1OENcdTI1OTBcdTI1OTFcdTI1OTJcdTI1OTNcdTIzMjBcdTI1QTBcdTIyMTlcdTIyMUFcdTIyNDhcdTIyNjRcdTIyNjVcdTAwQTBcdTIzMjFcdTAwQjBcdTAwQjJcdTAwQjdcdTAwRjdcdTI1NTBcdTI1NTFcdTI1NTJcdTA0NTFcdTI1NTNcdTI1NTRcdTI1NTVcdTI1NTZcdTI1NTdcdTI1NThcdTI1NTlcdTI1NUFcdTI1NUJcdTI1NUNcdTI1NURcdTI1NUVcdTI1NUZcdTI1NjBcdTI1NjFcdTA0MDFcdTI1NjJcdTI1NjNcdTI1NjRcdTI1NjVcdTI1NjZcdTI1NjdcdTI1NjhcdTI1NjlcdTI1NkFcdTI1NkJcdTI1NkNcdTAwQTlcdTA0NEVcdTA0MzBcdTA0MzFcdTA0NDZcdTA0MzRcdTA0MzVcdTA0NDRcdTA0MzNcdTA0NDVcdTA0MzhcdTA0MzlcdTA0M0FcdTA0M0JcdTA0M0NcdTA0M0RcdTA0M0VcdTA0M0ZcdTA0NEZcdTA0NDBcdTA0NDFcdTA0NDJcdTA0NDNcdTA0MzZcdTA0MzJcdTA0NENcdTA0NEJcdTA0MzdcdTA0NDhcdTA0NERcdTA0NDlcdTA0NDdcdTA0NEFcdTA0MkVcdTA0MTBcdTA0MTFcdTA0MjZcdTA0MTRcdTA0MTVcdTA0MjRcdTA0MTNcdTA0MjVcdTA0MThcdTA0MTlcdTA0MUFcdTA0MUJcdTA0MUNcdTA0MURcdTA0MUVcdTA0MUZcdTA0MkZcdTA0MjBcdTA0MjFcdTA0MjJcdTA0MjNcdTA0MTZcdTA0MTJcdTA0MkNcdTA0MkJcdTA0MTdcdTA0MjhcdTA0MkRcdTA0MjlcdTA0MjdcdTA0MkFcIlxuICB9LFxuICBcImtvaTh1XCI6IHtcbiAgICBcInR5cGVcIjogXCJfc2Jjc1wiLFxuICAgIFwiY2hhcnNcIjogXCJcdTI1MDBcdTI1MDJcdTI1MENcdTI1MTBcdTI1MTRcdTI1MThcdTI1MUNcdTI1MjRcdTI1MkNcdTI1MzRcdTI1M0NcdTI1ODBcdTI1ODRcdTI1ODhcdTI1OENcdTI1OTBcdTI1OTFcdTI1OTJcdTI1OTNcdTIzMjBcdTI1QTBcdTIyMTlcdTIyMUFcdTIyNDhcdTIyNjRcdTIyNjVcdTAwQTBcdTIzMjFcdTAwQjBcdTAwQjJcdTAwQjdcdTAwRjdcdTI1NTBcdTI1NTFcdTI1NTJcdTA0NTFcdTA0NTRcdTI1NTRcdTA0NTZcdTA0NTdcdTI1NTdcdTI1NThcdTI1NTlcdTI1NUFcdTI1NUJcdTA0OTFcdTI1NURcdTI1NUVcdTI1NUZcdTI1NjBcdTI1NjFcdTA0MDFcdTA0MDRcdTI1NjNcdTA0MDZcdTA0MDdcdTI1NjZcdTI1NjdcdTI1NjhcdTI1NjlcdTI1NkFcdTA0OTBcdTI1NkNcdTAwQTlcdTA0NEVcdTA0MzBcdTA0MzFcdTA0NDZcdTA0MzRcdTA0MzVcdTA0NDRcdTA0MzNcdTA0NDVcdTA0MzhcdTA0MzlcdTA0M0FcdTA0M0JcdTA0M0NcdTA0M0RcdTA0M0VcdTA0M0ZcdTA0NEZcdTA0NDBcdTA0NDFcdTA0NDJcdTA0NDNcdTA0MzZcdTA0MzJcdTA0NENcdTA0NEJcdTA0MzdcdTA0NDhcdTA0NERcdTA0NDlcdTA0NDdcdTA0NEFcdTA0MkVcdTA0MTBcdTA0MTFcdTA0MjZcdTA0MTRcdTA0MTVcdTA0MjRcdTA0MTNcdTA0MjVcdTA0MThcdTA0MTlcdTA0MUFcdTA0MUJcdTA0MUNcdTA0MURcdTA0MUVcdTA0MUZcdTA0MkZcdTA0MjBcdTA0MjFcdTA0MjJcdTA0MjNcdTA0MTZcdTA0MTJcdTA0MkNcdTA0MkJcdTA0MTdcdTA0MjhcdTA0MkRcdTA0MjlcdTA0MjdcdTA0MkFcIlxuICB9LFxuICBcImtvaThydVwiOiB7XG4gICAgXCJ0eXBlXCI6IFwiX3NiY3NcIixcbiAgICBcImNoYXJzXCI6IFwiXHUyNTAwXHUyNTAyXHUyNTBDXHUyNTEwXHUyNTE0XHUyNTE4XHUyNTFDXHUyNTI0XHUyNTJDXHUyNTM0XHUyNTNDXHUyNTgwXHUyNTg0XHUyNTg4XHUyNThDXHUyNTkwXHUyNTkxXHUyNTkyXHUyNTkzXHUyMzIwXHUyNUEwXHUyMjE5XHUyMjFBXHUyMjQ4XHUyMjY0XHUyMjY1XHUwMEEwXHUyMzIxXHUwMEIwXHUwMEIyXHUwMEI3XHUwMEY3XHUyNTUwXHUyNTUxXHUyNTUyXHUwNDUxXHUwNDU0XHUyNTU0XHUwNDU2XHUwNDU3XHUyNTU3XHUyNTU4XHUyNTU5XHUyNTVBXHUyNTVCXHUwNDkxXHUwNDVFXHUyNTVFXHUyNTVGXHUyNTYwXHUyNTYxXHUwNDAxXHUwNDA0XHUyNTYzXHUwNDA2XHUwNDA3XHUyNTY2XHUyNTY3XHUyNTY4XHUyNTY5XHUyNTZBXHUwNDkwXHUwNDBFXHUwMEE5XHUwNDRFXHUwNDMwXHUwNDMxXHUwNDQ2XHUwNDM0XHUwNDM1XHUwNDQ0XHUwNDMzXHUwNDQ1XHUwNDM4XHUwNDM5XHUwNDNBXHUwNDNCXHUwNDNDXHUwNDNEXHUwNDNFXHUwNDNGXHUwNDRGXHUwNDQwXHUwNDQxXHUwNDQyXHUwNDQzXHUwNDM2XHUwNDMyXHUwNDRDXHUwNDRCXHUwNDM3XHUwNDQ4XHUwNDREXHUwNDQ5XHUwNDQ3XHUwNDRBXHUwNDJFXHUwNDEwXHUwNDExXHUwNDI2XHUwNDE0XHUwNDE1XHUwNDI0XHUwNDEzXHUwNDI1XHUwNDE4XHUwNDE5XHUwNDFBXHUwNDFCXHUwNDFDXHUwNDFEXHUwNDFFXHUwNDFGXHUwNDJGXHUwNDIwXHUwNDIxXHUwNDIyXHUwNDIzXHUwNDE2XHUwNDEyXHUwNDJDXHUwNDJCXHUwNDE3XHUwNDI4XHUwNDJEXHUwNDI5XHUwNDI3XHUwNDJBXCJcbiAgfSxcbiAgXCJrb2k4dFwiOiB7XG4gICAgXCJ0eXBlXCI6IFwiX3NiY3NcIixcbiAgICBcImNoYXJzXCI6IFwiXHUwNDlCXHUwNDkzXHUyMDFBXHUwNDkyXHUyMDFFXHUyMDI2XHUyMDIwXHUyMDIxXHVGRkZEXHUyMDMwXHUwNEIzXHUyMDM5XHUwNEIyXHUwNEI3XHUwNEI2XHVGRkZEXHUwNDlBXHUyMDE4XHUyMDE5XHUyMDFDXHUyMDFEXHUyMDIyXHUyMDEzXHUyMDE0XHVGRkZEXHUyMTIyXHVGRkZEXHUyMDNBXHVGRkZEXHVGRkZEXHVGRkZEXHVGRkZEXHVGRkZEXHUwNEVGXHUwNEVFXHUwNDUxXHUwMEE0XHUwNEUzXHUwMEE2XHUwMEE3XHVGRkZEXHVGRkZEXHVGRkZEXHUwMEFCXHUwMEFDXHUwMEFEXHUwMEFFXHVGRkZEXHUwMEIwXHUwMEIxXHUwMEIyXHUwNDAxXHVGRkZEXHUwNEUyXHUwMEI2XHUwMEI3XHVGRkZEXHUyMTE2XHVGRkZEXHUwMEJCXHVGRkZEXHVGRkZEXHVGRkZEXHUwMEE5XHUwNDRFXHUwNDMwXHUwNDMxXHUwNDQ2XHUwNDM0XHUwNDM1XHUwNDQ0XHUwNDMzXHUwNDQ1XHUwNDM4XHUwNDM5XHUwNDNBXHUwNDNCXHUwNDNDXHUwNDNEXHUwNDNFXHUwNDNGXHUwNDRGXHUwNDQwXHUwNDQxXHUwNDQyXHUwNDQzXHUwNDM2XHUwNDMyXHUwNDRDXHUwNDRCXHUwNDM3XHUwNDQ4XHUwNDREXHUwNDQ5XHUwNDQ3XHUwNDRBXHUwNDJFXHUwNDEwXHUwNDExXHUwNDI2XHUwNDE0XHUwNDE1XHUwNDI0XHUwNDEzXHUwNDI1XHUwNDE4XHUwNDE5XHUwNDFBXHUwNDFCXHUwNDFDXHUwNDFEXHUwNDFFXHUwNDFGXHUwNDJGXHUwNDIwXHUwNDIxXHUwNDIyXHUwNDIzXHUwNDE2XHUwNDEyXHUwNDJDXHUwNDJCXHUwNDE3XHUwNDI4XHUwNDJEXHUwNDI5XHUwNDI3XHUwNDJBXCJcbiAgfSxcbiAgXCJhcm1zY2lpOFwiOiB7XG4gICAgXCJ0eXBlXCI6IFwiX3NiY3NcIixcbiAgICBcImNoYXJzXCI6IFwiXHUwMDgwXHUwMDgxXHUwMDgyXHUwMDgzXHUwMDg0XHUwMDg1XHUwMDg2XHUwMDg3XHUwMDg4XHUwMDg5XHUwMDhBXHUwMDhCXHUwMDhDXHUwMDhEXHUwMDhFXHUwMDhGXHUwMDkwXHUwMDkxXHUwMDkyXHUwMDkzXHUwMDk0XHUwMDk1XHUwMDk2XHUwMDk3XHUwMDk4XHUwMDk5XHUwMDlBXHUwMDlCXHUwMDlDXHUwMDlEXHUwMDlFXHUwMDlGXHUwMEEwXHVGRkZEXHUwNTg3XHUwNTg5KShcdTAwQkJcdTAwQUJcdTIwMTQuXHUwNTVELC1cdTA1OEFcdTIwMjZcdTA1NUNcdTA1NUJcdTA1NUVcdTA1MzFcdTA1NjFcdTA1MzJcdTA1NjJcdTA1MzNcdTA1NjNcdTA1MzRcdTA1NjRcdTA1MzVcdTA1NjVcdTA1MzZcdTA1NjZcdTA1MzdcdTA1NjdcdTA1MzhcdTA1NjhcdTA1MzlcdTA1NjlcdTA1M0FcdTA1NkFcdTA1M0JcdTA1NkJcdTA1M0NcdTA1NkNcdTA1M0RcdTA1NkRcdTA1M0VcdTA1NkVcdTA1M0ZcdTA1NkZcdTA1NDBcdTA1NzBcdTA1NDFcdTA1NzFcdTA1NDJcdTA1NzJcdTA1NDNcdTA1NzNcdTA1NDRcdTA1NzRcdTA1NDVcdTA1NzVcdTA1NDZcdTA1NzZcdTA1NDdcdTA1NzdcdTA1NDhcdTA1NzhcdTA1NDlcdTA1NzlcdTA1NEFcdTA1N0FcdTA1NEJcdTA1N0JcdTA1NENcdTA1N0NcdTA1NERcdTA1N0RcdTA1NEVcdTA1N0VcdTA1NEZcdTA1N0ZcdTA1NTBcdTA1ODBcdTA1NTFcdTA1ODFcdTA1NTJcdTA1ODJcdTA1NTNcdTA1ODNcdTA1NTRcdTA1ODRcdTA1NTVcdTA1ODVcdTA1NTZcdTA1ODZcdTA1NUFcdUZGRkRcIlxuICB9LFxuICBcInJrMTA0OFwiOiB7XG4gICAgXCJ0eXBlXCI6IFwiX3NiY3NcIixcbiAgICBcImNoYXJzXCI6IFwiXHUwNDAyXHUwNDAzXHUyMDFBXHUwNDUzXHUyMDFFXHUyMDI2XHUyMDIwXHUyMDIxXHUyMEFDXHUyMDMwXHUwNDA5XHUyMDM5XHUwNDBBXHUwNDlBXHUwNEJBXHUwNDBGXHUwNDUyXHUyMDE4XHUyMDE5XHUyMDFDXHUyMDFEXHUyMDIyXHUyMDEzXHUyMDE0XHVGRkZEXHUyMTIyXHUwNDU5XHUyMDNBXHUwNDVBXHUwNDlCXHUwNEJCXHUwNDVGXHUwMEEwXHUwNEIwXHUwNEIxXHUwNEQ4XHUwMEE0XHUwNEU4XHUwMEE2XHUwMEE3XHUwNDAxXHUwMEE5XHUwNDkyXHUwMEFCXHUwMEFDXHUwMEFEXHUwMEFFXHUwNEFFXHUwMEIwXHUwMEIxXHUwNDA2XHUwNDU2XHUwNEU5XHUwMEI1XHUwMEI2XHUwMEI3XHUwNDUxXHUyMTE2XHUwNDkzXHUwMEJCXHUwNEQ5XHUwNEEyXHUwNEEzXHUwNEFGXHUwNDEwXHUwNDExXHUwNDEyXHUwNDEzXHUwNDE0XHUwNDE1XHUwNDE2XHUwNDE3XHUwNDE4XHUwNDE5XHUwNDFBXHUwNDFCXHUwNDFDXHUwNDFEXHUwNDFFXHUwNDFGXHUwNDIwXHUwNDIxXHUwNDIyXHUwNDIzXHUwNDI0XHUwNDI1XHUwNDI2XHUwNDI3XHUwNDI4XHUwNDI5XHUwNDJBXHUwNDJCXHUwNDJDXHUwNDJEXHUwNDJFXHUwNDJGXHUwNDMwXHUwNDMxXHUwNDMyXHUwNDMzXHUwNDM0XHUwNDM1XHUwNDM2XHUwNDM3XHUwNDM4XHUwNDM5XHUwNDNBXHUwNDNCXHUwNDNDXHUwNDNEXHUwNDNFXHUwNDNGXHUwNDQwXHUwNDQxXHUwNDQyXHUwNDQzXHUwNDQ0XHUwNDQ1XHUwNDQ2XHUwNDQ3XHUwNDQ4XHUwNDQ5XHUwNDRBXHUwNDRCXHUwNDRDXHUwNDREXHUwNDRFXHUwNDRGXCJcbiAgfSxcbiAgXCJ0Y3ZuXCI6IHtcbiAgICBcInR5cGVcIjogXCJfc2Jjc1wiLFxuICAgIFwiY2hhcnNcIjogXCJcXHUwMDAwXHUwMERBXHUxRUU0XFx1MDAwM1x1MUVFQVx1MUVFQ1x1MUVFRVxcdTAwMDdcXGJcXHRcXG5cXHUwMDBiXFxmXFxyXFx1MDAwZVxcdTAwMGZcXHUwMDEwXHUxRUU4XHUxRUYwXHUxRUYyXHUxRUY2XHUxRUY4XHUwMEREXHUxRUY0XFx1MDAxOFxcdTAwMTlcXHUwMDFhXFx1MDAxYlxcdTAwMWNcXHUwMDFkXFx1MDAxZVxcdTAwMWYgIVxcXCIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXFxcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9flx1MDA3Rlx1MDBDMFx1MUVBMlx1MDBDM1x1MDBDMVx1MUVBMFx1MUVCNlx1MUVBQ1x1MDBDOFx1MUVCQVx1MUVCQ1x1MDBDOVx1MUVCOFx1MUVDNlx1MDBDQ1x1MUVDOFx1MDEyOFx1MDBDRFx1MUVDQVx1MDBEMlx1MUVDRVx1MDBENVx1MDBEM1x1MUVDQ1x1MUVEOFx1MUVEQ1x1MUVERVx1MUVFMFx1MUVEQVx1MUVFMlx1MDBEOVx1MUVFNlx1MDE2OFx1MDBBMFx1MDEwMlx1MDBDMlx1MDBDQVx1MDBENFx1MDFBMFx1MDFBRlx1MDExMFx1MDEwM1x1MDBFMlx1MDBFQVx1MDBGNFx1MDFBMVx1MDFCMFx1MDExMVx1MUVCMFx1MDMwMFx1MDMwOVx1MDMwM1x1MDMwMVx1MDMyM1x1MDBFMFx1MUVBM1x1MDBFM1x1MDBFMVx1MUVBMVx1MUVCMlx1MUVCMVx1MUVCM1x1MUVCNVx1MUVBRlx1MUVCNFx1MUVBRVx1MUVBNlx1MUVBOFx1MUVBQVx1MUVBNFx1MUVDMFx1MUVCN1x1MUVBN1x1MUVBOVx1MUVBQlx1MUVBNVx1MUVBRFx1MDBFOFx1MUVDMlx1MUVCQlx1MUVCRFx1MDBFOVx1MUVCOVx1MUVDMVx1MUVDM1x1MUVDNVx1MUVCRlx1MUVDN1x1MDBFQ1x1MUVDOVx1MUVDNFx1MUVCRVx1MUVEMlx1MDEyOVx1MDBFRFx1MUVDQlx1MDBGMlx1MUVENFx1MUVDRlx1MDBGNVx1MDBGM1x1MUVDRFx1MUVEM1x1MUVENVx1MUVEN1x1MUVEMVx1MUVEOVx1MUVERFx1MUVERlx1MUVFMVx1MUVEQlx1MUVFM1x1MDBGOVx1MUVENlx1MUVFN1x1MDE2OVx1MDBGQVx1MUVFNVx1MUVFQlx1MUVFRFx1MUVFRlx1MUVFOVx1MUVGMVx1MUVGM1x1MUVGN1x1MUVGOVx1MDBGRFx1MUVGNVx1MUVEMFwiXG4gIH0sXG4gIFwiZ2VvcmdpYW5hY2FkZW15XCI6IHtcbiAgICBcInR5cGVcIjogXCJfc2Jjc1wiLFxuICAgIFwiY2hhcnNcIjogXCJcdTAwODBcdTAwODFcdTIwMUFcdTAxOTJcdTIwMUVcdTIwMjZcdTIwMjBcdTIwMjFcdTAyQzZcdTIwMzBcdTAxNjBcdTIwMzlcdTAxNTJcdTAwOERcdTAwOEVcdTAwOEZcdTAwOTBcdTIwMThcdTIwMTlcdTIwMUNcdTIwMURcdTIwMjJcdTIwMTNcdTIwMTRcdTAyRENcdTIxMjJcdTAxNjFcdTIwM0FcdTAxNTNcdTAwOURcdTAwOUVcdTAxNzhcdTAwQTBcdTAwQTFcdTAwQTJcdTAwQTNcdTAwQTRcdTAwQTVcdTAwQTZcdTAwQTdcdTAwQThcdTAwQTlcdTAwQUFcdTAwQUJcdTAwQUNcdTAwQURcdTAwQUVcdTAwQUZcdTAwQjBcdTAwQjFcdTAwQjJcdTAwQjNcdTAwQjRcdTAwQjVcdTAwQjZcdTAwQjdcdTAwQjhcdTAwQjlcdTAwQkFcdTAwQkJcdTAwQkNcdTAwQkRcdTAwQkVcdTAwQkZcdTEwRDBcdTEwRDFcdTEwRDJcdTEwRDNcdTEwRDRcdTEwRDVcdTEwRDZcdTEwRDdcdTEwRDhcdTEwRDlcdTEwREFcdTEwREJcdTEwRENcdTEwRERcdTEwREVcdTEwREZcdTEwRTBcdTEwRTFcdTEwRTJcdTEwRTNcdTEwRTRcdTEwRTVcdTEwRTZcdTEwRTdcdTEwRThcdTEwRTlcdTEwRUFcdTEwRUJcdTEwRUNcdTEwRURcdTEwRUVcdTEwRUZcdTEwRjBcdTEwRjFcdTEwRjJcdTEwRjNcdTEwRjRcdTEwRjVcdTEwRjZcdTAwRTdcdTAwRThcdTAwRTlcdTAwRUFcdTAwRUJcdTAwRUNcdTAwRURcdTAwRUVcdTAwRUZcdTAwRjBcdTAwRjFcdTAwRjJcdTAwRjNcdTAwRjRcdTAwRjVcdTAwRjZcdTAwRjdcdTAwRjhcdTAwRjlcdTAwRkFcdTAwRkJcdTAwRkNcdTAwRkRcdTAwRkVcdTAwRkZcIlxuICB9LFxuICBcImdlb3JnaWFucHNcIjoge1xuICAgIFwidHlwZVwiOiBcIl9zYmNzXCIsXG4gICAgXCJjaGFyc1wiOiBcIlx1MDA4MFx1MDA4MVx1MjAxQVx1MDE5Mlx1MjAxRVx1MjAyNlx1MjAyMFx1MjAyMVx1MDJDNlx1MjAzMFx1MDE2MFx1MjAzOVx1MDE1Mlx1MDA4RFx1MDA4RVx1MDA4Rlx1MDA5MFx1MjAxOFx1MjAxOVx1MjAxQ1x1MjAxRFx1MjAyMlx1MjAxM1x1MjAxNFx1MDJEQ1x1MjEyMlx1MDE2MVx1MjAzQVx1MDE1M1x1MDA5RFx1MDA5RVx1MDE3OFx1MDBBMFx1MDBBMVx1MDBBMlx1MDBBM1x1MDBBNFx1MDBBNVx1MDBBNlx1MDBBN1x1MDBBOFx1MDBBOVx1MDBBQVx1MDBBQlx1MDBBQ1x1MDBBRFx1MDBBRVx1MDBBRlx1MDBCMFx1MDBCMVx1MDBCMlx1MDBCM1x1MDBCNFx1MDBCNVx1MDBCNlx1MDBCN1x1MDBCOFx1MDBCOVx1MDBCQVx1MDBCQlx1MDBCQ1x1MDBCRFx1MDBCRVx1MDBCRlx1MTBEMFx1MTBEMVx1MTBEMlx1MTBEM1x1MTBENFx1MTBENVx1MTBENlx1MTBGMVx1MTBEN1x1MTBEOFx1MTBEOVx1MTBEQVx1MTBEQlx1MTBEQ1x1MTBGMlx1MTBERFx1MTBERVx1MTBERlx1MTBFMFx1MTBFMVx1MTBFMlx1MTBGM1x1MTBFM1x1MTBFNFx1MTBFNVx1MTBFNlx1MTBFN1x1MTBFOFx1MTBFOVx1MTBFQVx1MTBFQlx1MTBFQ1x1MTBFRFx1MTBFRVx1MTBGNFx1MTBFRlx1MTBGMFx1MTBGNVx1MDBFNlx1MDBFN1x1MDBFOFx1MDBFOVx1MDBFQVx1MDBFQlx1MDBFQ1x1MDBFRFx1MDBFRVx1MDBFRlx1MDBGMFx1MDBGMVx1MDBGMlx1MDBGM1x1MDBGNFx1MDBGNVx1MDBGNlx1MDBGN1x1MDBGOFx1MDBGOVx1MDBGQVx1MDBGQlx1MDBGQ1x1MDBGRFx1MDBGRVx1MDBGRlwiXG4gIH0sXG4gIFwicHQxNTRcIjoge1xuICAgIFwidHlwZVwiOiBcIl9zYmNzXCIsXG4gICAgXCJjaGFyc1wiOiBcIlx1MDQ5Nlx1MDQ5Mlx1MDRFRVx1MDQ5M1x1MjAxRVx1MjAyNlx1MDRCNlx1MDRBRVx1MDRCMlx1MDRBRlx1MDRBMFx1MDRFMlx1MDRBMlx1MDQ5QVx1MDRCQVx1MDRCOFx1MDQ5N1x1MjAxOFx1MjAxOVx1MjAxQ1x1MjAxRFx1MjAyMlx1MjAxM1x1MjAxNFx1MDRCM1x1MDRCN1x1MDRBMVx1MDRFM1x1MDRBM1x1MDQ5Qlx1MDRCQlx1MDRCOVx1MDBBMFx1MDQwRVx1MDQ1RVx1MDQwOFx1MDRFOFx1MDQ5OFx1MDRCMFx1MDBBN1x1MDQwMVx1MDBBOVx1MDREOFx1MDBBQlx1MDBBQ1x1MDRFRlx1MDBBRVx1MDQ5Q1x1MDBCMFx1MDRCMVx1MDQwNlx1MDQ1Nlx1MDQ5OVx1MDRFOVx1MDBCNlx1MDBCN1x1MDQ1MVx1MjExNlx1MDREOVx1MDBCQlx1MDQ1OFx1MDRBQVx1MDRBQlx1MDQ5RFx1MDQxMFx1MDQxMVx1MDQxMlx1MDQxM1x1MDQxNFx1MDQxNVx1MDQxNlx1MDQxN1x1MDQxOFx1MDQxOVx1MDQxQVx1MDQxQlx1MDQxQ1x1MDQxRFx1MDQxRVx1MDQxRlx1MDQyMFx1MDQyMVx1MDQyMlx1MDQyM1x1MDQyNFx1MDQyNVx1MDQyNlx1MDQyN1x1MDQyOFx1MDQyOVx1MDQyQVx1MDQyQlx1MDQyQ1x1MDQyRFx1MDQyRVx1MDQyRlx1MDQzMFx1MDQzMVx1MDQzMlx1MDQzM1x1MDQzNFx1MDQzNVx1MDQzNlx1MDQzN1x1MDQzOFx1MDQzOVx1MDQzQVx1MDQzQlx1MDQzQ1x1MDQzRFx1MDQzRVx1MDQzRlx1MDQ0MFx1MDQ0MVx1MDQ0Mlx1MDQ0M1x1MDQ0NFx1MDQ0NVx1MDQ0Nlx1MDQ0N1x1MDQ0OFx1MDQ0OVx1MDQ0QVx1MDQ0Qlx1MDQ0Q1x1MDQ0RFx1MDQ0RVx1MDQ0RlwiXG4gIH0sXG4gIFwidmlzY2lpXCI6IHtcbiAgICBcInR5cGVcIjogXCJfc2Jjc1wiLFxuICAgIFwiY2hhcnNcIjogXCJcXHUwMDAwXFx1MDAwMVx1MUVCMlxcdTAwMDNcXHUwMDA0XHUxRUI0XHUxRUFBXFx1MDAwN1xcYlxcdFxcblxcdTAwMGJcXGZcXHJcXHUwMDBlXFx1MDAwZlxcdTAwMTBcXHUwMDExXFx1MDAxMlxcdTAwMTNcdTFFRjZcXHUwMDE1XFx1MDAxNlxcdTAwMTdcXHUwMDE4XHUxRUY4XFx1MDAxYVxcdTAwMWJcXHUwMDFjXFx1MDAxZFx1MUVGNFxcdTAwMWYgIVxcXCIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXFxcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9flx1MDA3Rlx1MUVBMFx1MUVBRVx1MUVCMFx1MUVCNlx1MUVBNFx1MUVBNlx1MUVBOFx1MUVBQ1x1MUVCQ1x1MUVCOFx1MUVCRVx1MUVDMFx1MUVDMlx1MUVDNFx1MUVDNlx1MUVEMFx1MUVEMlx1MUVENFx1MUVENlx1MUVEOFx1MUVFMlx1MUVEQVx1MUVEQ1x1MUVERVx1MUVDQVx1MUVDRVx1MUVDQ1x1MUVDOFx1MUVFNlx1MDE2OFx1MUVFNFx1MUVGMlx1MDBENVx1MUVBRlx1MUVCMVx1MUVCN1x1MUVBNVx1MUVBN1x1MUVBOVx1MUVBRFx1MUVCRFx1MUVCOVx1MUVCRlx1MUVDMVx1MUVDM1x1MUVDNVx1MUVDN1x1MUVEMVx1MUVEM1x1MUVENVx1MUVEN1x1MUVFMFx1MDFBMFx1MUVEOVx1MUVERFx1MUVERlx1MUVDQlx1MUVGMFx1MUVFOFx1MUVFQVx1MUVFQ1x1MDFBMVx1MUVEQlx1MDFBRlx1MDBDMFx1MDBDMVx1MDBDMlx1MDBDM1x1MUVBMlx1MDEwMlx1MUVCM1x1MUVCNVx1MDBDOFx1MDBDOVx1MDBDQVx1MUVCQVx1MDBDQ1x1MDBDRFx1MDEyOFx1MUVGM1x1MDExMFx1MUVFOVx1MDBEMlx1MDBEM1x1MDBENFx1MUVBMVx1MUVGN1x1MUVFQlx1MUVFRFx1MDBEOVx1MDBEQVx1MUVGOVx1MUVGNVx1MDBERFx1MUVFMVx1MDFCMFx1MDBFMFx1MDBFMVx1MDBFMlx1MDBFM1x1MUVBM1x1MDEwM1x1MUVFRlx1MUVBQlx1MDBFOFx1MDBFOVx1MDBFQVx1MUVCQlx1MDBFQ1x1MDBFRFx1MDEyOVx1MUVDOVx1MDExMVx1MUVGMVx1MDBGMlx1MDBGM1x1MDBGNFx1MDBGNVx1MUVDRlx1MUVDRFx1MUVFNVx1MDBGOVx1MDBGQVx1MDE2OVx1MUVFN1x1MDBGRFx1MUVFM1x1MUVFRVwiXG4gIH0sXG4gIFwiaXNvNjQ2Y25cIjoge1xuICAgIFwidHlwZVwiOiBcIl9zYmNzXCIsXG4gICAgXCJjaGFyc1wiOiBcIlxcdTAwMDBcXHUwMDAxXFx1MDAwMlxcdTAwMDNcXHUwMDA0XFx1MDAwNVxcdTAwMDZcXHUwMDA3XFxiXFx0XFxuXFx1MDAwYlxcZlxcclxcdTAwMGVcXHUwMDBmXFx1MDAxMFxcdTAwMTFcXHUwMDEyXFx1MDAxM1xcdTAwMTRcXHUwMDE1XFx1MDAxNlxcdTAwMTdcXHUwMDE4XFx1MDAxOVxcdTAwMWFcXHUwMDFiXFx1MDAxY1xcdTAwMWRcXHUwMDFlXFx1MDAxZiAhXFxcIiNcdTAwQTUlJicoKSorLC0uLzAxMjM0NTY3ODk6Ozw9Pj9AQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpbXFxcXF1eX2BhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ent8fVx1MjAzRVx1MDA3Rlx1RkZGRFx1RkZGRFx1RkZGRFx1RkZGRFx1RkZGRFx1RkZGRFx1RkZGRFx1RkZGRFx1RkZGRFx1RkZGRFx1RkZGRFx1RkZGRFx1RkZGRFx1RkZGRFx1RkZGRFx1RkZGRFx1RkZGRFx1RkZGRFx1RkZGRFx1RkZGRFx1RkZGRFx1RkZGRFx1RkZGRFx1RkZGRFx1RkZGRFx1RkZGRFx1RkZGRFx1RkZGRFx1RkZGRFx1RkZGRFx1RkZGRFx1RkZGRFx1RkZGRFx1RkZGRFx1RkZGRFx1RkZGRFx1RkZGRFx1RkZGRFx1RkZGRFx1RkZGRFx1RkZGRFx1RkZGRFx1RkZGRFx1RkZGRFx1RkZGRFx1RkZGRFx1RkZGRFx1RkZGRFx1RkZGRFx1RkZGRFx1RkZGRFx1RkZGRFx1RkZGRFx1RkZGRFx1RkZGRFx1RkZGRFx1RkZGRFx1RkZGRFx1RkZGRFx1RkZGRFx1RkZGRFx1RkZGRFx1RkZGRFx1RkZGRFx1RkZGRFx1RkZGRFx1RkZGRFx1RkZGRFx1RkZGRFx1RkZGRFx1RkZGRFx1RkZGRFx1RkZGRFx1RkZGRFx1RkZGRFx1RkZGRFx1RkZGRFx1RkZGRFx1RkZGRFx1RkZGRFx1RkZGRFx1RkZGRFx1RkZGRFx1RkZGRFx1RkZGRFx1RkZGRFx1RkZGRFx1RkZGRFx1RkZGRFx1RkZGRFx1RkZGRFx1RkZGRFx1RkZGRFx1RkZGRFx1RkZGRFx1RkZGRFx1RkZGRFx1RkZGRFx1RkZGRFx1RkZGRFx1RkZGRFx1RkZGRFx1RkZGRFx1RkZGRFx1RkZGRFx1RkZGRFx1RkZGRFx1RkZGRFx1RkZGRFx1RkZGRFx1RkZGRFx1RkZGRFx1RkZGRFx1RkZGRFx1RkZGRFx1RkZGRFx1RkZGRFx1RkZGRFx1RkZGRFx1RkZGRFx1RkZGRFx1RkZGRFx1RkZGRFx1RkZGRFx1RkZGRFx1RkZGRFx1RkZGRFx1RkZGRFwiXG4gIH0sXG4gIFwiaXNvNjQ2anBcIjoge1xuICAgIFwidHlwZVwiOiBcIl9zYmNzXCIsXG4gICAgXCJjaGFyc1wiOiBcIlxcdTAwMDBcXHUwMDAxXFx1MDAwMlxcdTAwMDNcXHUwMDA0XFx1MDAwNVxcdTAwMDZcXHUwMDA3XFxiXFx0XFxuXFx1MDAwYlxcZlxcclxcdTAwMGVcXHUwMDBmXFx1MDAxMFxcdTAwMTFcXHUwMDEyXFx1MDAxM1xcdTAwMTRcXHUwMDE1XFx1MDAxNlxcdTAwMTdcXHUwMDE4XFx1MDAxOVxcdTAwMWFcXHUwMDFiXFx1MDAxY1xcdTAwMWRcXHUwMDFlXFx1MDAxZiAhXFxcIiMkJSYnKCkqKywtLi8wMTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaW1x1MDBBNV1eX2BhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ent8fVx1MjAzRVx1MDA3Rlx1RkZGRFx1RkZGRFx1RkZGRFx1RkZGRFx1RkZGRFx1RkZGRFx1RkZGRFx1RkZGRFx1RkZGRFx1RkZGRFx1RkZGRFx1RkZGRFx1RkZGRFx1RkZGRFx1RkZGRFx1RkZGRFx1RkZGRFx1RkZGRFx1RkZGRFx1RkZGRFx1RkZGRFx1RkZGRFx1RkZGRFx1RkZGRFx1RkZGRFx1RkZGRFx1RkZGRFx1RkZGRFx1RkZGRFx1RkZGRFx1RkZGRFx1RkZGRFx1RkZGRFx1RkZGRFx1RkZGRFx1RkZGRFx1RkZGRFx1RkZGRFx1RkZGRFx1RkZGRFx1RkZGRFx1RkZGRFx1RkZGRFx1RkZGRFx1RkZGRFx1RkZGRFx1RkZGRFx1RkZGRFx1RkZGRFx1RkZGRFx1RkZGRFx1RkZGRFx1RkZGRFx1RkZGRFx1RkZGRFx1RkZGRFx1RkZGRFx1RkZGRFx1RkZGRFx1RkZGRFx1RkZGRFx1RkZGRFx1RkZGRFx1RkZGRFx1RkZGRFx1RkZGRFx1RkZGRFx1RkZGRFx1RkZGRFx1RkZGRFx1RkZGRFx1RkZGRFx1RkZGRFx1RkZGRFx1RkZGRFx1RkZGRFx1RkZGRFx1RkZGRFx1RkZGRFx1RkZGRFx1RkZGRFx1RkZGRFx1RkZGRFx1RkZGRFx1RkZGRFx1RkZGRFx1RkZGRFx1RkZGRFx1RkZGRFx1RkZGRFx1RkZGRFx1RkZGRFx1RkZGRFx1RkZGRFx1RkZGRFx1RkZGRFx1RkZGRFx1RkZGRFx1RkZGRFx1RkZGRFx1RkZGRFx1RkZGRFx1RkZGRFx1RkZGRFx1RkZGRFx1RkZGRFx1RkZGRFx1RkZGRFx1RkZGRFx1RkZGRFx1RkZGRFx1RkZGRFx1RkZGRFx1RkZGRFx1RkZGRFx1RkZGRFx1RkZGRFx1RkZGRFx1RkZGRFx1RkZGRFx1RkZGRFx1RkZGRFx1RkZGRFx1RkZGRFx1RkZGRFx1RkZGRFx1RkZGRFx1RkZGRFwiXG4gIH0sXG4gIFwiaHByb21hbjhcIjoge1xuICAgIFwidHlwZVwiOiBcIl9zYmNzXCIsXG4gICAgXCJjaGFyc1wiOiBcIlx1MDA4MFx1MDA4MVx1MDA4Mlx1MDA4M1x1MDA4NFx1MDA4NVx1MDA4Nlx1MDA4N1x1MDA4OFx1MDA4OVx1MDA4QVx1MDA4Qlx1MDA4Q1x1MDA4RFx1MDA4RVx1MDA4Rlx1MDA5MFx1MDA5MVx1MDA5Mlx1MDA5M1x1MDA5NFx1MDA5NVx1MDA5Nlx1MDA5N1x1MDA5OFx1MDA5OVx1MDA5QVx1MDA5Qlx1MDA5Q1x1MDA5RFx1MDA5RVx1MDA5Rlx1MDBBMFx1MDBDMFx1MDBDMlx1MDBDOFx1MDBDQVx1MDBDQlx1MDBDRVx1MDBDRlx1MDBCNFx1MDJDQlx1MDJDNlx1MDBBOFx1MDJEQ1x1MDBEOVx1MDBEQlx1MjBBNFx1MDBBRlx1MDBERFx1MDBGRFx1MDBCMFx1MDBDN1x1MDBFN1x1MDBEMVx1MDBGMVx1MDBBMVx1MDBCRlx1MDBBNFx1MDBBM1x1MDBBNVx1MDBBN1x1MDE5Mlx1MDBBMlx1MDBFMlx1MDBFQVx1MDBGNFx1MDBGQlx1MDBFMVx1MDBFOVx1MDBGM1x1MDBGQVx1MDBFMFx1MDBFOFx1MDBGMlx1MDBGOVx1MDBFNFx1MDBFQlx1MDBGNlx1MDBGQ1x1MDBDNVx1MDBFRVx1MDBEOFx1MDBDNlx1MDBFNVx1MDBFRFx1MDBGOFx1MDBFNlx1MDBDNFx1MDBFQ1x1MDBENlx1MDBEQ1x1MDBDOVx1MDBFRlx1MDBERlx1MDBENFx1MDBDMVx1MDBDM1x1MDBFM1x1MDBEMFx1MDBGMFx1MDBDRFx1MDBDQ1x1MDBEM1x1MDBEMlx1MDBENVx1MDBGNVx1MDE2MFx1MDE2MVx1MDBEQVx1MDE3OFx1MDBGRlx1MDBERVx1MDBGRVx1MDBCN1x1MDBCNVx1MDBCNlx1MDBCRVx1MjAxNFx1MDBCQ1x1MDBCRFx1MDBBQVx1MDBCQVx1MDBBQlx1MjVBMFx1MDBCQlx1MDBCMVx1RkZGRFwiXG4gIH0sXG4gIFwibWFjaW50b3NoXCI6IHtcbiAgICBcInR5cGVcIjogXCJfc2Jjc1wiLFxuICAgIFwiY2hhcnNcIjogXCJcdTAwQzRcdTAwQzVcdTAwQzdcdTAwQzlcdTAwRDFcdTAwRDZcdTAwRENcdTAwRTFcdTAwRTBcdTAwRTJcdTAwRTRcdTAwRTNcdTAwRTVcdTAwRTdcdTAwRTlcdTAwRThcdTAwRUFcdTAwRUJcdTAwRURcdTAwRUNcdTAwRUVcdTAwRUZcdTAwRjFcdTAwRjNcdTAwRjJcdTAwRjRcdTAwRjZcdTAwRjVcdTAwRkFcdTAwRjlcdTAwRkJcdTAwRkNcdTIwMjBcdTAwQjBcdTAwQTJcdTAwQTNcdTAwQTdcdTIwMjJcdTAwQjZcdTAwREZcdTAwQUVcdTAwQTlcdTIxMjJcdTAwQjRcdTAwQThcdTIyNjBcdTAwQzZcdTAwRDhcdTIyMUVcdTAwQjFcdTIyNjRcdTIyNjVcdTAwQTVcdTAwQjVcdTIyMDJcdTIyMTFcdTIyMEZcdTAzQzBcdTIyMkJcdTAwQUFcdTAwQkFcdTIxMjZcdTAwRTZcdTAwRjhcdTAwQkZcdTAwQTFcdTAwQUNcdTIyMUFcdTAxOTJcdTIyNDhcdTIyMDZcdTAwQUJcdTAwQkJcdTIwMjZcdTAwQTBcdTAwQzBcdTAwQzNcdTAwRDVcdTAxNTJcdTAxNTNcdTIwMTNcdTIwMTRcdTIwMUNcdTIwMURcdTIwMThcdTIwMTlcdTAwRjdcdTI1Q0FcdTAwRkZcdTAxNzhcdTIwNDRcdTAwQTRcdTIwMzlcdTIwM0FcdUZCMDFcdUZCMDJcdTIwMjFcdTAwQjdcdTIwMUFcdTIwMUVcdTIwMzBcdTAwQzJcdTAwQ0FcdTAwQzFcdTAwQ0JcdTAwQzhcdTAwQ0RcdTAwQ0VcdTAwQ0ZcdTAwQ0NcdTAwRDNcdTAwRDRcdUZGRkRcdTAwRDJcdTAwREFcdTAwREJcdTAwRDlcdTAxMzFcdTAyQzZcdTAyRENcdTAwQUZcdTAyRDhcdTAyRDlcdTAyREFcdTAwQjhcdTAyRERcdTAyREJcdTAyQzdcIlxuICB9LFxuICBcImFzY2lpXCI6IHtcbiAgICBcInR5cGVcIjogXCJfc2Jjc1wiLFxuICAgIFwiY2hhcnNcIjogXCJcdUZGRkRcdUZGRkRcdUZGRkRcdUZGRkRcdUZGRkRcdUZGRkRcdUZGRkRcdUZGRkRcdUZGRkRcdUZGRkRcdUZGRkRcdUZGRkRcdUZGRkRcdUZGRkRcdUZGRkRcdUZGRkRcdUZGRkRcdUZGRkRcdUZGRkRcdUZGRkRcdUZGRkRcdUZGRkRcdUZGRkRcdUZGRkRcdUZGRkRcdUZGRkRcdUZGRkRcdUZGRkRcdUZGRkRcdUZGRkRcdUZGRkRcdUZGRkRcdUZGRkRcdUZGRkRcdUZGRkRcdUZGRkRcdUZGRkRcdUZGRkRcdUZGRkRcdUZGRkRcdUZGRkRcdUZGRkRcdUZGRkRcdUZGRkRcdUZGRkRcdUZGRkRcdUZGRkRcdUZGRkRcdUZGRkRcdUZGRkRcdUZGRkRcdUZGRkRcdUZGRkRcdUZGRkRcdUZGRkRcdUZGRkRcdUZGRkRcdUZGRkRcdUZGRkRcdUZGRkRcdUZGRkRcdUZGRkRcdUZGRkRcdUZGRkRcdUZGRkRcdUZGRkRcdUZGRkRcdUZGRkRcdUZGRkRcdUZGRkRcdUZGRkRcdUZGRkRcdUZGRkRcdUZGRkRcdUZGRkRcdUZGRkRcdUZGRkRcdUZGRkRcdUZGRkRcdUZGRkRcdUZGRkRcdUZGRkRcdUZGRkRcdUZGRkRcdUZGRkRcdUZGRkRcdUZGRkRcdUZGRkRcdUZGRkRcdUZGRkRcdUZGRkRcdUZGRkRcdUZGRkRcdUZGRkRcdUZGRkRcdUZGRkRcdUZGRkRcdUZGRkRcdUZGRkRcdUZGRkRcdUZGRkRcdUZGRkRcdUZGRkRcdUZGRkRcdUZGRkRcdUZGRkRcdUZGRkRcdUZGRkRcdUZGRkRcdUZGRkRcdUZGRkRcdUZGRkRcdUZGRkRcdUZGRkRcdUZGRkRcdUZGRkRcdUZGRkRcdUZGRkRcdUZGRkRcdUZGRkRcdUZGRkRcdUZGRkRcdUZGRkRcdUZGRkRcdUZGRkRcdUZGRkRcdUZGRkRcdUZGRkRcIlxuICB9LFxuICBcInRpczYyMFwiOiB7XG4gICAgXCJ0eXBlXCI6IFwiX3NiY3NcIixcbiAgICBcImNoYXJzXCI6IFwiXHVGRkZEXHVGRkZEXHVGRkZEXHVGRkZEXHVGRkZEXHVGRkZEXHVGRkZEXHVGRkZEXHVGRkZEXHVGRkZEXHVGRkZEXHVGRkZEXHVGRkZEXHVGRkZEXHVGRkZEXHVGRkZEXHVGRkZEXHVGRkZEXHVGRkZEXHVGRkZEXHVGRkZEXHVGRkZEXHVGRkZEXHVGRkZEXHVGRkZEXHVGRkZEXHVGRkZEXHVGRkZEXHVGRkZEXHVGRkZEXHVGRkZEXHVGRkZEXHVGRkZEXHUwRTAxXHUwRTAyXHUwRTAzXHUwRTA0XHUwRTA1XHUwRTA2XHUwRTA3XHUwRTA4XHUwRTA5XHUwRTBBXHUwRTBCXHUwRTBDXHUwRTBEXHUwRTBFXHUwRTBGXHUwRTEwXHUwRTExXHUwRTEyXHUwRTEzXHUwRTE0XHUwRTE1XHUwRTE2XHUwRTE3XHUwRTE4XHUwRTE5XHUwRTFBXHUwRTFCXHUwRTFDXHUwRTFEXHUwRTFFXHUwRTFGXHUwRTIwXHUwRTIxXHUwRTIyXHUwRTIzXHUwRTI0XHUwRTI1XHUwRTI2XHUwRTI3XHUwRTI4XHUwRTI5XHUwRTJBXHUwRTJCXHUwRTJDXHUwRTJEXHUwRTJFXHUwRTJGXHUwRTMwXHUwRTMxXHUwRTMyXHUwRTMzXHUwRTM0XHUwRTM1XHUwRTM2XHUwRTM3XHUwRTM4XHUwRTM5XHUwRTNBXHVGRkZEXHVGRkZEXHVGRkZEXHVGRkZEXHUwRTNGXHUwRTQwXHUwRTQxXHUwRTQyXHUwRTQzXHUwRTQ0XHUwRTQ1XHUwRTQ2XHUwRTQ3XHUwRTQ4XHUwRTQ5XHUwRTRBXHUwRTRCXHUwRTRDXHUwRTREXHUwRTRFXHUwRTRGXHUwRTUwXHUwRTUxXHUwRTUyXHUwRTUzXHUwRTU0XHUwRTU1XHUwRTU2XHUwRTU3XHUwRTU4XHUwRTU5XHUwRTVBXHUwRTVCXHVGRkZEXHVGRkZEXHVGRkZEXHVGRkZEXCJcbiAgfVxufSIsICJcInVzZSBzdHJpY3RcIjtcbnZhciBCdWZmZXIgPSByZXF1aXJlKFwic2FmZXItYnVmZmVyXCIpLkJ1ZmZlcjtcblxuLy8gTXVsdGlieXRlIGNvZGVjLiBJbiB0aGlzIHNjaGVtZSwgYSBjaGFyYWN0ZXIgaXMgcmVwcmVzZW50ZWQgYnkgMSBvciBtb3JlIGJ5dGVzLlxuLy8gT3VyIGNvZGVjIHN1cHBvcnRzIFVURi0xNiBzdXJyb2dhdGVzLCBleHRlbnNpb25zIGZvciBHQjE4MDMwIGFuZCB1bmljb2RlIHNlcXVlbmNlcy5cbi8vIFRvIHNhdmUgbWVtb3J5IGFuZCBsb2FkaW5nIHRpbWUsIHdlIHJlYWQgdGFibGUgZmlsZXMgb25seSB3aGVuIHJlcXVlc3RlZC5cblxuZXhwb3J0cy5fZGJjcyA9IERCQ1NDb2RlYztcblxudmFyIFVOQVNTSUdORUQgPSAtMSxcbiAgICBHQjE4MDMwX0NPREUgPSAtMixcbiAgICBTRVFfU1RBUlQgID0gLTEwLFxuICAgIE5PREVfU1RBUlQgPSAtMTAwMCxcbiAgICBVTkFTU0lHTkVEX05PREUgPSBuZXcgQXJyYXkoMHgxMDApLFxuICAgIERFRl9DSEFSID0gLTE7XG5cbmZvciAodmFyIGkgPSAwOyBpIDwgMHgxMDA7IGkrKylcbiAgICBVTkFTU0lHTkVEX05PREVbaV0gPSBVTkFTU0lHTkVEO1xuXG5cbi8vIENsYXNzIERCQ1NDb2RlYyByZWFkcyBhbmQgaW5pdGlhbGl6ZXMgbWFwcGluZyB0YWJsZXMuXG5mdW5jdGlvbiBEQkNTQ29kZWMoY29kZWNPcHRpb25zLCBpY29udikge1xuICAgIHRoaXMuZW5jb2RpbmdOYW1lID0gY29kZWNPcHRpb25zLmVuY29kaW5nTmFtZTtcbiAgICBpZiAoIWNvZGVjT3B0aW9ucylcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiREJDUyBjb2RlYyBpcyBjYWxsZWQgd2l0aG91dCB0aGUgZGF0YS5cIilcbiAgICBpZiAoIWNvZGVjT3B0aW9ucy50YWJsZSlcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRW5jb2RpbmcgJ1wiICsgdGhpcy5lbmNvZGluZ05hbWUgKyBcIicgaGFzIG5vIGRhdGEuXCIpO1xuXG4gICAgLy8gTG9hZCB0YWJsZXMuXG4gICAgdmFyIG1hcHBpbmdUYWJsZSA9IGNvZGVjT3B0aW9ucy50YWJsZSgpO1xuXG5cbiAgICAvLyBEZWNvZGUgdGFibGVzOiBNQkNTIC0+IFVuaWNvZGUuXG5cbiAgICAvLyBkZWNvZGVUYWJsZXMgaXMgYSB0cmllLCBlbmNvZGVkIGFzIGFuIGFycmF5IG9mIGFycmF5cyBvZiBpbnRlZ2Vycy4gSW50ZXJuYWwgYXJyYXlzIGFyZSB0cmllIG5vZGVzIGFuZCBhbGwgaGF2ZSBsZW4gPSAyNTYuXG4gICAgLy8gVHJpZSByb290IGlzIGRlY29kZVRhYmxlc1swXS5cbiAgICAvLyBWYWx1ZXM6ID49ICAwIC0+IHVuaWNvZGUgY2hhcmFjdGVyIGNvZGUuIGNhbiBiZSA+IDB4RkZGRlxuICAgIC8vICAgICAgICAgPT0gVU5BU1NJR05FRCAtPiB1bmtub3duL3VuYXNzaWduZWQgc2VxdWVuY2UuXG4gICAgLy8gICAgICAgICA9PSBHQjE4MDMwX0NPREUgLT4gdGhpcyBpcyB0aGUgZW5kIG9mIGEgR0IxODAzMCA0LWJ5dGUgc2VxdWVuY2UuXG4gICAgLy8gICAgICAgICA8PSBOT0RFX1NUQVJUIC0+IGluZGV4IG9mIHRoZSBuZXh0IG5vZGUgaW4gb3VyIHRyaWUgdG8gcHJvY2VzcyBuZXh0IGJ5dGUuXG4gICAgLy8gICAgICAgICA8PSBTRVFfU1RBUlQgIC0+IGluZGV4IG9mIHRoZSBzdGFydCBvZiBhIGNoYXJhY3RlciBjb2RlIHNlcXVlbmNlLCBpbiBkZWNvZGVUYWJsZVNlcS5cbiAgICB0aGlzLmRlY29kZVRhYmxlcyA9IFtdO1xuICAgIHRoaXMuZGVjb2RlVGFibGVzWzBdID0gVU5BU1NJR05FRF9OT0RFLnNsaWNlKDApOyAvLyBDcmVhdGUgcm9vdCBub2RlLlxuXG4gICAgLy8gU29tZXRpbWVzIGEgTUJDUyBjaGFyIGNvcnJlc3BvbmRzIHRvIGEgc2VxdWVuY2Ugb2YgdW5pY29kZSBjaGFycy4gV2Ugc3RvcmUgdGhlbSBhcyBhcnJheXMgb2YgaW50ZWdlcnMgaGVyZS4gXG4gICAgdGhpcy5kZWNvZGVUYWJsZVNlcSA9IFtdO1xuXG4gICAgLy8gQWN0dWFsIG1hcHBpbmcgdGFibGVzIGNvbnNpc3Qgb2YgY2h1bmtzLiBVc2UgdGhlbSB0byBmaWxsIHVwIGRlY29kZSB0YWJsZXMuXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtYXBwaW5nVGFibGUubGVuZ3RoOyBpKyspXG4gICAgICAgIHRoaXMuX2FkZERlY29kZUNodW5rKG1hcHBpbmdUYWJsZVtpXSk7XG5cbiAgICAvLyBMb2FkICYgY3JlYXRlIEdCMTgwMzAgdGFibGVzIHdoZW4gbmVlZGVkLlxuICAgIGlmICh0eXBlb2YgY29kZWNPcHRpb25zLmdiMTgwMzAgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhpcy5nYjE4MDMwID0gY29kZWNPcHRpb25zLmdiMTgwMzAoKTsgLy8gTG9hZCBHQjE4MDMwIHJhbmdlcy5cblxuICAgICAgICAvLyBBZGQgR0IxODAzMCBjb21tb24gZGVjb2RlIG5vZGVzLlxuICAgICAgICB2YXIgY29tbW9uVGhpcmRCeXRlTm9kZUlkeCA9IHRoaXMuZGVjb2RlVGFibGVzLmxlbmd0aDtcbiAgICAgICAgdGhpcy5kZWNvZGVUYWJsZXMucHVzaChVTkFTU0lHTkVEX05PREUuc2xpY2UoMCkpO1xuXG4gICAgICAgIHZhciBjb21tb25Gb3VydGhCeXRlTm9kZUlkeCA9IHRoaXMuZGVjb2RlVGFibGVzLmxlbmd0aDtcbiAgICAgICAgdGhpcy5kZWNvZGVUYWJsZXMucHVzaChVTkFTU0lHTkVEX05PREUuc2xpY2UoMCkpO1xuXG4gICAgICAgIC8vIEZpbGwgb3V0IHRoZSB0cmVlXG4gICAgICAgIHZhciBmaXJzdEJ5dGVOb2RlID0gdGhpcy5kZWNvZGVUYWJsZXNbMF07XG4gICAgICAgIGZvciAodmFyIGkgPSAweDgxOyBpIDw9IDB4RkU7IGkrKykge1xuICAgICAgICAgICAgdmFyIHNlY29uZEJ5dGVOb2RlID0gdGhpcy5kZWNvZGVUYWJsZXNbTk9ERV9TVEFSVCAtIGZpcnN0Qnl0ZU5vZGVbaV1dO1xuICAgICAgICAgICAgZm9yICh2YXIgaiA9IDB4MzA7IGogPD0gMHgzOTsgaisrKSB7XG4gICAgICAgICAgICAgICAgaWYgKHNlY29uZEJ5dGVOb2RlW2pdID09PSBVTkFTU0lHTkVEKSB7XG4gICAgICAgICAgICAgICAgICAgIHNlY29uZEJ5dGVOb2RlW2pdID0gTk9ERV9TVEFSVCAtIGNvbW1vblRoaXJkQnl0ZU5vZGVJZHg7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzZWNvbmRCeXRlTm9kZVtqXSA+IE5PREVfU1RBUlQpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiZ2IxODAzMCBkZWNvZGUgdGFibGVzIGNvbmZsaWN0IGF0IGJ5dGUgMlwiKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICB2YXIgdGhpcmRCeXRlTm9kZSA9IHRoaXMuZGVjb2RlVGFibGVzW05PREVfU1RBUlQgLSBzZWNvbmRCeXRlTm9kZVtqXV07XG4gICAgICAgICAgICAgICAgZm9yICh2YXIgayA9IDB4ODE7IGsgPD0gMHhGRTsgaysrKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlyZEJ5dGVOb2RlW2tdID09PSBVTkFTU0lHTkVEKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlyZEJ5dGVOb2RlW2tdID0gTk9ERV9TVEFSVCAtIGNvbW1vbkZvdXJ0aEJ5dGVOb2RlSWR4O1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXJkQnl0ZU5vZGVba10gPT09IE5PREVfU1RBUlQgLSBjb21tb25Gb3VydGhCeXRlTm9kZUlkeCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcmRCeXRlTm9kZVtrXSA+IE5PREVfU1RBUlQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcImdiMTgwMzAgZGVjb2RlIHRhYmxlcyBjb25mbGljdCBhdCBieXRlIDNcIik7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICB2YXIgZm91cnRoQnl0ZU5vZGUgPSB0aGlzLmRlY29kZVRhYmxlc1tOT0RFX1NUQVJUIC0gdGhpcmRCeXRlTm9kZVtrXV07XG4gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGwgPSAweDMwOyBsIDw9IDB4Mzk7IGwrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZvdXJ0aEJ5dGVOb2RlW2xdID09PSBVTkFTU0lHTkVEKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvdXJ0aEJ5dGVOb2RlW2xdID0gR0IxODAzMF9DT0RFO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5kZWZhdWx0Q2hhclVuaWNvZGUgPSBpY29udi5kZWZhdWx0Q2hhclVuaWNvZGU7XG5cbiAgICBcbiAgICAvLyBFbmNvZGUgdGFibGVzOiBVbmljb2RlIC0+IERCQ1MuXG5cbiAgICAvLyBgZW5jb2RlVGFibGVgIGlzIGFycmF5IG1hcHBpbmcgZnJvbSB1bmljb2RlIGNoYXIgdG8gZW5jb2RlZCBjaGFyLiBBbGwgaXRzIHZhbHVlcyBhcmUgaW50ZWdlcnMgZm9yIHBlcmZvcm1hbmNlLlxuICAgIC8vIEJlY2F1c2UgaXQgY2FuIGJlIHNwYXJzZSwgaXQgaXMgcmVwcmVzZW50ZWQgYXMgYXJyYXkgb2YgYnVja2V0cyBieSAyNTYgY2hhcnMgZWFjaC4gQnVja2V0IGNhbiBiZSBudWxsLlxuICAgIC8vIFZhbHVlczogPj0gIDAgLT4gaXQgaXMgYSBub3JtYWwgY2hhci4gV3JpdGUgdGhlIHZhbHVlIChpZiA8PTI1NiB0aGVuIDEgYnl0ZSwgaWYgPD02NTUzNiB0aGVuIDIgYnl0ZXMsIGV0Yy4pLlxuICAgIC8vICAgICAgICAgPT0gVU5BU1NJR05FRCAtPiBubyBjb252ZXJzaW9uIGZvdW5kLiBPdXRwdXQgYSBkZWZhdWx0IGNoYXIuXG4gICAgLy8gICAgICAgICA8PSBTRVFfU1RBUlQgIC0+IGl0J3MgYW4gaW5kZXggaW4gZW5jb2RlVGFibGVTZXEsIHNlZSBiZWxvdy4gVGhlIGNoYXJhY3RlciBzdGFydHMgYSBzZXF1ZW5jZS5cbiAgICB0aGlzLmVuY29kZVRhYmxlID0gW107XG4gICAgXG4gICAgLy8gYGVuY29kZVRhYmxlU2VxYCBpcyB1c2VkIHdoZW4gYSBzZXF1ZW5jZSBvZiB1bmljb2RlIGNoYXJhY3RlcnMgaXMgZW5jb2RlZCBhcyBhIHNpbmdsZSBjb2RlLiBXZSB1c2UgYSB0cmVlIG9mXG4gICAgLy8gb2JqZWN0cyB3aGVyZSBrZXlzIGNvcnJlc3BvbmQgdG8gY2hhcmFjdGVycyBpbiBzZXF1ZW5jZSBhbmQgbGVhZnMgYXJlIHRoZSBlbmNvZGVkIGRiY3MgdmFsdWVzLiBBIHNwZWNpYWwgREVGX0NIQVIga2V5XG4gICAgLy8gbWVhbnMgZW5kIG9mIHNlcXVlbmNlIChuZWVkZWQgd2hlbiBvbmUgc2VxdWVuY2UgaXMgYSBzdHJpY3Qgc3Vic2VxdWVuY2Ugb2YgYW5vdGhlcikuXG4gICAgLy8gT2JqZWN0cyBhcmUga2VwdCBzZXBhcmF0ZWx5IGZyb20gZW5jb2RlVGFibGUgdG8gaW5jcmVhc2UgcGVyZm9ybWFuY2UuXG4gICAgdGhpcy5lbmNvZGVUYWJsZVNlcSA9IFtdO1xuXG4gICAgLy8gU29tZSBjaGFycyBjYW4gYmUgZGVjb2RlZCwgYnV0IG5lZWQgbm90IGJlIGVuY29kZWQuXG4gICAgdmFyIHNraXBFbmNvZGVDaGFycyA9IHt9O1xuICAgIGlmIChjb2RlY09wdGlvbnMuZW5jb2RlU2tpcFZhbHMpXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY29kZWNPcHRpb25zLmVuY29kZVNraXBWYWxzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICB2YXIgdmFsID0gY29kZWNPcHRpb25zLmVuY29kZVNraXBWYWxzW2ldO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWwgPT09ICdudW1iZXInKVxuICAgICAgICAgICAgICAgIHNraXBFbmNvZGVDaGFyc1t2YWxdID0gdHJ1ZTtcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICBmb3IgKHZhciBqID0gdmFsLmZyb207IGogPD0gdmFsLnRvOyBqKyspXG4gICAgICAgICAgICAgICAgICAgIHNraXBFbmNvZGVDaGFyc1tqXSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgXG4gICAgLy8gVXNlIGRlY29kZSB0cmllIHRvIHJlY3Vyc2l2ZWx5IGZpbGwgb3V0IGVuY29kZSB0YWJsZXMuXG4gICAgdGhpcy5fZmlsbEVuY29kZVRhYmxlKDAsIDAsIHNraXBFbmNvZGVDaGFycyk7XG5cbiAgICAvLyBBZGQgbW9yZSBlbmNvZGluZyBwYWlycyB3aGVuIG5lZWRlZC5cbiAgICBpZiAoY29kZWNPcHRpb25zLmVuY29kZUFkZCkge1xuICAgICAgICBmb3IgKHZhciB1Q2hhciBpbiBjb2RlY09wdGlvbnMuZW5jb2RlQWRkKVxuICAgICAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChjb2RlY09wdGlvbnMuZW5jb2RlQWRkLCB1Q2hhcikpXG4gICAgICAgICAgICAgICAgdGhpcy5fc2V0RW5jb2RlQ2hhcih1Q2hhci5jaGFyQ29kZUF0KDApLCBjb2RlY09wdGlvbnMuZW5jb2RlQWRkW3VDaGFyXSk7XG4gICAgfVxuXG4gICAgdGhpcy5kZWZDaGFyU0IgID0gdGhpcy5lbmNvZGVUYWJsZVswXVtpY29udi5kZWZhdWx0Q2hhclNpbmdsZUJ5dGUuY2hhckNvZGVBdCgwKV07XG4gICAgaWYgKHRoaXMuZGVmQ2hhclNCID09PSBVTkFTU0lHTkVEKSB0aGlzLmRlZkNoYXJTQiA9IHRoaXMuZW5jb2RlVGFibGVbMF1bJz8nXTtcbiAgICBpZiAodGhpcy5kZWZDaGFyU0IgPT09IFVOQVNTSUdORUQpIHRoaXMuZGVmQ2hhclNCID0gXCI/XCIuY2hhckNvZGVBdCgwKTtcbn1cblxuREJDU0NvZGVjLnByb3RvdHlwZS5lbmNvZGVyID0gREJDU0VuY29kZXI7XG5EQkNTQ29kZWMucHJvdG90eXBlLmRlY29kZXIgPSBEQkNTRGVjb2RlcjtcblxuLy8gRGVjb2RlciBoZWxwZXJzXG5EQkNTQ29kZWMucHJvdG90eXBlLl9nZXREZWNvZGVUcmllTm9kZSA9IGZ1bmN0aW9uKGFkZHIpIHtcbiAgICB2YXIgYnl0ZXMgPSBbXTtcbiAgICBmb3IgKDsgYWRkciA+IDA7IGFkZHIgPj4+PSA4KVxuICAgICAgICBieXRlcy5wdXNoKGFkZHIgJiAweEZGKTtcbiAgICBpZiAoYnl0ZXMubGVuZ3RoID09IDApXG4gICAgICAgIGJ5dGVzLnB1c2goMCk7XG5cbiAgICB2YXIgbm9kZSA9IHRoaXMuZGVjb2RlVGFibGVzWzBdO1xuICAgIGZvciAodmFyIGkgPSBieXRlcy5sZW5ndGgtMTsgaSA+IDA7IGktLSkgeyAvLyBUcmF2ZXJzZSBub2RlcyBkZWVwZXIgaW50byB0aGUgdHJpZS5cbiAgICAgICAgdmFyIHZhbCA9IG5vZGVbYnl0ZXNbaV1dO1xuXG4gICAgICAgIGlmICh2YWwgPT0gVU5BU1NJR05FRCkgeyAvLyBDcmVhdGUgbmV3IG5vZGUuXG4gICAgICAgICAgICBub2RlW2J5dGVzW2ldXSA9IE5PREVfU1RBUlQgLSB0aGlzLmRlY29kZVRhYmxlcy5sZW5ndGg7XG4gICAgICAgICAgICB0aGlzLmRlY29kZVRhYmxlcy5wdXNoKG5vZGUgPSBVTkFTU0lHTkVEX05PREUuc2xpY2UoMCkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHZhbCA8PSBOT0RFX1NUQVJUKSB7IC8vIEV4aXN0aW5nIG5vZGUuXG4gICAgICAgICAgICBub2RlID0gdGhpcy5kZWNvZGVUYWJsZXNbTk9ERV9TVEFSVCAtIHZhbF07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiT3ZlcndyaXRlIGJ5dGUgaW4gXCIgKyB0aGlzLmVuY29kaW5nTmFtZSArIFwiLCBhZGRyOiBcIiArIGFkZHIudG9TdHJpbmcoMTYpKTtcbiAgICB9XG4gICAgcmV0dXJuIG5vZGU7XG59XG5cblxuREJDU0NvZGVjLnByb3RvdHlwZS5fYWRkRGVjb2RlQ2h1bmsgPSBmdW5jdGlvbihjaHVuaykge1xuICAgIC8vIEZpcnN0IGVsZW1lbnQgb2YgY2h1bmsgaXMgdGhlIGhleCBtYmNzIGNvZGUgd2hlcmUgd2Ugc3RhcnQuXG4gICAgdmFyIGN1ckFkZHIgPSBwYXJzZUludChjaHVua1swXSwgMTYpO1xuXG4gICAgLy8gQ2hvb3NlIHRoZSBkZWNvZGluZyBub2RlIHdoZXJlIHdlJ2xsIHdyaXRlIG91ciBjaGFycy5cbiAgICB2YXIgd3JpdGVUYWJsZSA9IHRoaXMuX2dldERlY29kZVRyaWVOb2RlKGN1ckFkZHIpO1xuICAgIGN1ckFkZHIgPSBjdXJBZGRyICYgMHhGRjtcblxuICAgIC8vIFdyaXRlIGFsbCBvdGhlciBlbGVtZW50cyBvZiB0aGUgY2h1bmsgdG8gdGhlIHRhYmxlLlxuICAgIGZvciAodmFyIGsgPSAxOyBrIDwgY2h1bmsubGVuZ3RoOyBrKyspIHtcbiAgICAgICAgdmFyIHBhcnQgPSBjaHVua1trXTtcbiAgICAgICAgaWYgKHR5cGVvZiBwYXJ0ID09PSBcInN0cmluZ1wiKSB7IC8vIFN0cmluZywgd3JpdGUgYXMtaXMuXG4gICAgICAgICAgICBmb3IgKHZhciBsID0gMDsgbCA8IHBhcnQubGVuZ3RoOykge1xuICAgICAgICAgICAgICAgIHZhciBjb2RlID0gcGFydC5jaGFyQ29kZUF0KGwrKyk7XG4gICAgICAgICAgICAgICAgaWYgKDB4RDgwMCA8PSBjb2RlICYmIGNvZGUgPCAweERDMDApIHsgLy8gRGVjb2RlIHN1cnJvZ2F0ZVxuICAgICAgICAgICAgICAgICAgICB2YXIgY29kZVRyYWlsID0gcGFydC5jaGFyQ29kZUF0KGwrKyk7XG4gICAgICAgICAgICAgICAgICAgIGlmICgweERDMDAgPD0gY29kZVRyYWlsICYmIGNvZGVUcmFpbCA8IDB4RTAwMClcbiAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlVGFibGVbY3VyQWRkcisrXSA9IDB4MTAwMDAgKyAoY29kZSAtIDB4RDgwMCkgKiAweDQwMCArIChjb2RlVHJhaWwgLSAweERDMDApO1xuICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbmNvcnJlY3Qgc3Vycm9nYXRlIHBhaXIgaW4gXCIgICsgdGhpcy5lbmNvZGluZ05hbWUgKyBcIiBhdCBjaHVuayBcIiArIGNodW5rWzBdKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoMHgwRkYwIDwgY29kZSAmJiBjb2RlIDw9IDB4MEZGRikgeyAvLyBDaGFyYWN0ZXIgc2VxdWVuY2UgKG91ciBvd24gZW5jb2RpbmcgdXNlZClcbiAgICAgICAgICAgICAgICAgICAgdmFyIGxlbiA9IDB4RkZGIC0gY29kZSArIDI7XG4gICAgICAgICAgICAgICAgICAgIHZhciBzZXEgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgbSA9IDA7IG0gPCBsZW47IG0rKylcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlcS5wdXNoKHBhcnQuY2hhckNvZGVBdChsKyspKTsgLy8gU2ltcGxlIHZhcmlhdGlvbjogZG9uJ3Qgc3VwcG9ydCBzdXJyb2dhdGVzIG9yIHN1YnNlcXVlbmNlcyBpbiBzZXEuXG5cbiAgICAgICAgICAgICAgICAgICAgd3JpdGVUYWJsZVtjdXJBZGRyKytdID0gU0VRX1NUQVJUIC0gdGhpcy5kZWNvZGVUYWJsZVNlcS5sZW5ndGg7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGVjb2RlVGFibGVTZXEucHVzaChzZXEpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgIHdyaXRlVGFibGVbY3VyQWRkcisrXSA9IGNvZGU7IC8vIEJhc2ljIGNoYXJcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBcbiAgICAgICAgZWxzZSBpZiAodHlwZW9mIHBhcnQgPT09IFwibnVtYmVyXCIpIHsgLy8gSW50ZWdlciwgbWVhbmluZyBpbmNyZWFzaW5nIHNlcXVlbmNlIHN0YXJ0aW5nIHdpdGggcHJldiBjaGFyYWN0ZXIuXG4gICAgICAgICAgICB2YXIgY2hhckNvZGUgPSB3cml0ZVRhYmxlW2N1ckFkZHIgLSAxXSArIDE7XG4gICAgICAgICAgICBmb3IgKHZhciBsID0gMDsgbCA8IHBhcnQ7IGwrKylcbiAgICAgICAgICAgICAgICB3cml0ZVRhYmxlW2N1ckFkZHIrK10gPSBjaGFyQ29kZSsrO1xuICAgICAgICB9XG4gICAgICAgIGVsc2VcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkluY29ycmVjdCB0eXBlICdcIiArIHR5cGVvZiBwYXJ0ICsgXCInIGdpdmVuIGluIFwiICArIHRoaXMuZW5jb2RpbmdOYW1lICsgXCIgYXQgY2h1bmsgXCIgKyBjaHVua1swXSk7XG4gICAgfVxuICAgIGlmIChjdXJBZGRyID4gMHhGRilcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW5jb3JyZWN0IGNodW5rIGluIFwiICArIHRoaXMuZW5jb2RpbmdOYW1lICsgXCIgYXQgYWRkciBcIiArIGNodW5rWzBdICsgXCI6IHRvbyBsb25nXCIgKyBjdXJBZGRyKTtcbn1cblxuLy8gRW5jb2RlciBoZWxwZXJzXG5EQkNTQ29kZWMucHJvdG90eXBlLl9nZXRFbmNvZGVCdWNrZXQgPSBmdW5jdGlvbih1Q29kZSkge1xuICAgIHZhciBoaWdoID0gdUNvZGUgPj4gODsgLy8gVGhpcyBjb3VsZCBiZSA+IDB4RkYgYmVjYXVzZSBvZiBhc3RyYWwgY2hhcmFjdGVycy5cbiAgICBpZiAodGhpcy5lbmNvZGVUYWJsZVtoaWdoXSA9PT0gdW5kZWZpbmVkKVxuICAgICAgICB0aGlzLmVuY29kZVRhYmxlW2hpZ2hdID0gVU5BU1NJR05FRF9OT0RFLnNsaWNlKDApOyAvLyBDcmVhdGUgYnVja2V0IG9uIGRlbWFuZC5cbiAgICByZXR1cm4gdGhpcy5lbmNvZGVUYWJsZVtoaWdoXTtcbn1cblxuREJDU0NvZGVjLnByb3RvdHlwZS5fc2V0RW5jb2RlQ2hhciA9IGZ1bmN0aW9uKHVDb2RlLCBkYmNzQ29kZSkge1xuICAgIHZhciBidWNrZXQgPSB0aGlzLl9nZXRFbmNvZGVCdWNrZXQodUNvZGUpO1xuICAgIHZhciBsb3cgPSB1Q29kZSAmIDB4RkY7XG4gICAgaWYgKGJ1Y2tldFtsb3ddIDw9IFNFUV9TVEFSVClcbiAgICAgICAgdGhpcy5lbmNvZGVUYWJsZVNlcVtTRVFfU1RBUlQtYnVja2V0W2xvd11dW0RFRl9DSEFSXSA9IGRiY3NDb2RlOyAvLyBUaGVyZSdzIGFscmVhZHkgYSBzZXF1ZW5jZSwgc2V0IGEgc2luZ2xlLWNoYXIgc3Vic2VxdWVuY2Ugb2YgaXQuXG4gICAgZWxzZSBpZiAoYnVja2V0W2xvd10gPT0gVU5BU1NJR05FRClcbiAgICAgICAgYnVja2V0W2xvd10gPSBkYmNzQ29kZTtcbn1cblxuREJDU0NvZGVjLnByb3RvdHlwZS5fc2V0RW5jb2RlU2VxdWVuY2UgPSBmdW5jdGlvbihzZXEsIGRiY3NDb2RlKSB7XG4gICAgXG4gICAgLy8gR2V0IHRoZSByb290IG9mIGNoYXJhY3RlciB0cmVlIGFjY29yZGluZyB0byBmaXJzdCBjaGFyYWN0ZXIgb2YgdGhlIHNlcXVlbmNlLlxuICAgIHZhciB1Q29kZSA9IHNlcVswXTtcbiAgICB2YXIgYnVja2V0ID0gdGhpcy5fZ2V0RW5jb2RlQnVja2V0KHVDb2RlKTtcbiAgICB2YXIgbG93ID0gdUNvZGUgJiAweEZGO1xuXG4gICAgdmFyIG5vZGU7XG4gICAgaWYgKGJ1Y2tldFtsb3ddIDw9IFNFUV9TVEFSVCkge1xuICAgICAgICAvLyBUaGVyZSdzIGFscmVhZHkgYSBzZXF1ZW5jZSB3aXRoICAtIHVzZSBpdC5cbiAgICAgICAgbm9kZSA9IHRoaXMuZW5jb2RlVGFibGVTZXFbU0VRX1NUQVJULWJ1Y2tldFtsb3ddXTtcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIC8vIFRoZXJlIHdhcyBubyBzZXF1ZW5jZSBvYmplY3QgLSBhbGxvY2F0ZSBhIG5ldyBvbmUuXG4gICAgICAgIG5vZGUgPSB7fTtcbiAgICAgICAgaWYgKGJ1Y2tldFtsb3ddICE9PSBVTkFTU0lHTkVEKSBub2RlW0RFRl9DSEFSXSA9IGJ1Y2tldFtsb3ddOyAvLyBJZiBhIGNoYXIgd2FzIHNldCBiZWZvcmUgLSBtYWtlIGl0IGEgc2luZ2xlLWNoYXIgc3Vic2VxdWVuY2UuXG4gICAgICAgIGJ1Y2tldFtsb3ddID0gU0VRX1NUQVJUIC0gdGhpcy5lbmNvZGVUYWJsZVNlcS5sZW5ndGg7XG4gICAgICAgIHRoaXMuZW5jb2RlVGFibGVTZXEucHVzaChub2RlKTtcbiAgICB9XG5cbiAgICAvLyBUcmF2ZXJzZSB0aGUgY2hhcmFjdGVyIHRyZWUsIGFsbG9jYXRpbmcgbmV3IG5vZGVzIGFzIG5lZWRlZC5cbiAgICBmb3IgKHZhciBqID0gMTsgaiA8IHNlcS5sZW5ndGgtMTsgaisrKSB7XG4gICAgICAgIHZhciBvbGRWYWwgPSBub2RlW3VDb2RlXTtcbiAgICAgICAgaWYgKHR5cGVvZiBvbGRWYWwgPT09ICdvYmplY3QnKVxuICAgICAgICAgICAgbm9kZSA9IG9sZFZhbDtcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBub2RlID0gbm9kZVt1Q29kZV0gPSB7fVxuICAgICAgICAgICAgaWYgKG9sZFZhbCAhPT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgIG5vZGVbREVGX0NIQVJdID0gb2xkVmFsXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBTZXQgdGhlIGxlYWYgdG8gZ2l2ZW4gZGJjc0NvZGUuXG4gICAgdUNvZGUgPSBzZXFbc2VxLmxlbmd0aC0xXTtcbiAgICBub2RlW3VDb2RlXSA9IGRiY3NDb2RlO1xufVxuXG5EQkNTQ29kZWMucHJvdG90eXBlLl9maWxsRW5jb2RlVGFibGUgPSBmdW5jdGlvbihub2RlSWR4LCBwcmVmaXgsIHNraXBFbmNvZGVDaGFycykge1xuICAgIHZhciBub2RlID0gdGhpcy5kZWNvZGVUYWJsZXNbbm9kZUlkeF07XG4gICAgdmFyIGhhc1ZhbHVlcyA9IGZhbHNlO1xuICAgIHZhciBzdWJOb2RlRW1wdHkgPSB7fTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IDB4MTAwOyBpKyspIHtcbiAgICAgICAgdmFyIHVDb2RlID0gbm9kZVtpXTtcbiAgICAgICAgdmFyIG1iQ29kZSA9IHByZWZpeCArIGk7XG4gICAgICAgIGlmIChza2lwRW5jb2RlQ2hhcnNbbWJDb2RlXSlcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuXG4gICAgICAgIGlmICh1Q29kZSA+PSAwKSB7XG4gICAgICAgICAgICB0aGlzLl9zZXRFbmNvZGVDaGFyKHVDb2RlLCBtYkNvZGUpO1xuICAgICAgICAgICAgaGFzVmFsdWVzID0gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIGlmICh1Q29kZSA8PSBOT0RFX1NUQVJUKSB7XG4gICAgICAgICAgICB2YXIgc3ViTm9kZUlkeCA9IE5PREVfU1RBUlQgLSB1Q29kZTtcbiAgICAgICAgICAgIGlmICghc3ViTm9kZUVtcHR5W3N1Yk5vZGVJZHhdKSB7ICAvLyBTa2lwIGVtcHR5IHN1YnRyZWVzICh0aGV5IGFyZSB0b28gbGFyZ2UgaW4gZ2IxODAzMCkuXG4gICAgICAgICAgICAgICAgdmFyIG5ld1ByZWZpeCA9IChtYkNvZGUgPDwgOCkgPj4+IDA7ICAvLyBOT1RFOiAnPj4+IDAnIGtlZXBzIDMyLWJpdCBudW0gcG9zaXRpdmUuXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuX2ZpbGxFbmNvZGVUYWJsZShzdWJOb2RlSWR4LCBuZXdQcmVmaXgsIHNraXBFbmNvZGVDaGFycykpXG4gICAgICAgICAgICAgICAgICAgIGhhc1ZhbHVlcyA9IHRydWU7XG4gICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICBzdWJOb2RlRW1wdHlbc3ViTm9kZUlkeF0gPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHVDb2RlIDw9IFNFUV9TVEFSVCkge1xuICAgICAgICAgICAgdGhpcy5fc2V0RW5jb2RlU2VxdWVuY2UodGhpcy5kZWNvZGVUYWJsZVNlcVtTRVFfU1RBUlQgLSB1Q29kZV0sIG1iQ29kZSk7XG4gICAgICAgICAgICBoYXNWYWx1ZXMgPSB0cnVlO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBoYXNWYWx1ZXM7XG59XG5cblxuXG4vLyA9PSBFbmNvZGVyID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5mdW5jdGlvbiBEQkNTRW5jb2RlcihvcHRpb25zLCBjb2RlYykge1xuICAgIC8vIEVuY29kZXIgc3RhdGVcbiAgICB0aGlzLmxlYWRTdXJyb2dhdGUgPSAtMTtcbiAgICB0aGlzLnNlcU9iaiA9IHVuZGVmaW5lZDtcbiAgICBcbiAgICAvLyBTdGF0aWMgZGF0YVxuICAgIHRoaXMuZW5jb2RlVGFibGUgPSBjb2RlYy5lbmNvZGVUYWJsZTtcbiAgICB0aGlzLmVuY29kZVRhYmxlU2VxID0gY29kZWMuZW5jb2RlVGFibGVTZXE7XG4gICAgdGhpcy5kZWZhdWx0Q2hhclNpbmdsZUJ5dGUgPSBjb2RlYy5kZWZDaGFyU0I7XG4gICAgdGhpcy5nYjE4MDMwID0gY29kZWMuZ2IxODAzMDtcbn1cblxuREJDU0VuY29kZXIucHJvdG90eXBlLndyaXRlID0gZnVuY3Rpb24oc3RyKSB7XG4gICAgdmFyIG5ld0J1ZiA9IEJ1ZmZlci5hbGxvYyhzdHIubGVuZ3RoICogKHRoaXMuZ2IxODAzMCA/IDQgOiAzKSksXG4gICAgICAgIGxlYWRTdXJyb2dhdGUgPSB0aGlzLmxlYWRTdXJyb2dhdGUsXG4gICAgICAgIHNlcU9iaiA9IHRoaXMuc2VxT2JqLCBuZXh0Q2hhciA9IC0xLFxuICAgICAgICBpID0gMCwgaiA9IDA7XG5cbiAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgICAvLyAwLiBHZXQgbmV4dCBjaGFyYWN0ZXIuXG4gICAgICAgIGlmIChuZXh0Q2hhciA9PT0gLTEpIHtcbiAgICAgICAgICAgIGlmIChpID09IHN0ci5sZW5ndGgpIGJyZWFrO1xuICAgICAgICAgICAgdmFyIHVDb2RlID0gc3RyLmNoYXJDb2RlQXQoaSsrKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHZhciB1Q29kZSA9IG5leHRDaGFyO1xuICAgICAgICAgICAgbmV4dENoYXIgPSAtMTsgICAgXG4gICAgICAgIH1cblxuICAgICAgICAvLyAxLiBIYW5kbGUgc3Vycm9nYXRlcy5cbiAgICAgICAgaWYgKDB4RDgwMCA8PSB1Q29kZSAmJiB1Q29kZSA8IDB4RTAwMCkgeyAvLyBDaGFyIGlzIG9uZSBvZiBzdXJyb2dhdGVzLlxuICAgICAgICAgICAgaWYgKHVDb2RlIDwgMHhEQzAwKSB7IC8vIFdlJ3ZlIGdvdCBsZWFkIHN1cnJvZ2F0ZS5cbiAgICAgICAgICAgICAgICBpZiAobGVhZFN1cnJvZ2F0ZSA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgICAgICAgbGVhZFN1cnJvZ2F0ZSA9IHVDb2RlO1xuICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBsZWFkU3Vycm9nYXRlID0gdUNvZGU7XG4gICAgICAgICAgICAgICAgICAgIC8vIERvdWJsZSBsZWFkIHN1cnJvZ2F0ZSBmb3VuZC5cbiAgICAgICAgICAgICAgICAgICAgdUNvZGUgPSBVTkFTU0lHTkVEO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7IC8vIFdlJ3ZlIGdvdCB0cmFpbCBzdXJyb2dhdGUuXG4gICAgICAgICAgICAgICAgaWYgKGxlYWRTdXJyb2dhdGUgIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgIHVDb2RlID0gMHgxMDAwMCArIChsZWFkU3Vycm9nYXRlIC0gMHhEODAwKSAqIDB4NDAwICsgKHVDb2RlIC0gMHhEQzAwKTtcbiAgICAgICAgICAgICAgICAgICAgbGVhZFN1cnJvZ2F0ZSA9IC0xO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIEluY29tcGxldGUgc3Vycm9nYXRlIHBhaXIgLSBvbmx5IHRyYWlsIHN1cnJvZ2F0ZSBmb3VuZC5cbiAgICAgICAgICAgICAgICAgICAgdUNvZGUgPSBVTkFTU0lHTkVEO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChsZWFkU3Vycm9nYXRlICE9PSAtMSkge1xuICAgICAgICAgICAgLy8gSW5jb21wbGV0ZSBzdXJyb2dhdGUgcGFpciAtIG9ubHkgbGVhZCBzdXJyb2dhdGUgZm91bmQuXG4gICAgICAgICAgICBuZXh0Q2hhciA9IHVDb2RlOyB1Q29kZSA9IFVOQVNTSUdORUQ7IC8vIFdyaXRlIGFuIGVycm9yLCB0aGVuIGN1cnJlbnQgY2hhci5cbiAgICAgICAgICAgIGxlYWRTdXJyb2dhdGUgPSAtMTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIDIuIENvbnZlcnQgdUNvZGUgY2hhcmFjdGVyLlxuICAgICAgICB2YXIgZGJjc0NvZGUgPSBVTkFTU0lHTkVEO1xuICAgICAgICBpZiAoc2VxT2JqICE9PSB1bmRlZmluZWQgJiYgdUNvZGUgIT0gVU5BU1NJR05FRCkgeyAvLyBXZSBhcmUgaW4gdGhlIG1pZGRsZSBvZiB0aGUgc2VxdWVuY2VcbiAgICAgICAgICAgIHZhciByZXNDb2RlID0gc2VxT2JqW3VDb2RlXTtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgcmVzQ29kZSA9PT0gJ29iamVjdCcpIHsgLy8gU2VxdWVuY2UgY29udGludWVzLlxuICAgICAgICAgICAgICAgIHNlcU9iaiA9IHJlc0NvZGU7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG5cbiAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHJlc0NvZGUgPT0gJ251bWJlcicpIHsgLy8gU2VxdWVuY2UgZmluaXNoZWQuIFdyaXRlIGl0LlxuICAgICAgICAgICAgICAgIGRiY3NDb2RlID0gcmVzQ29kZTtcblxuICAgICAgICAgICAgfSBlbHNlIGlmIChyZXNDb2RlID09IHVuZGVmaW5lZCkgeyAvLyBDdXJyZW50IGNoYXJhY3RlciBpcyBub3QgcGFydCBvZiB0aGUgc2VxdWVuY2UuXG5cbiAgICAgICAgICAgICAgICAvLyBUcnkgZGVmYXVsdCBjaGFyYWN0ZXIgZm9yIHRoaXMgc2VxdWVuY2VcbiAgICAgICAgICAgICAgICByZXNDb2RlID0gc2VxT2JqW0RFRl9DSEFSXTtcbiAgICAgICAgICAgICAgICBpZiAocmVzQ29kZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIGRiY3NDb2RlID0gcmVzQ29kZTsgLy8gRm91bmQuIFdyaXRlIGl0LlxuICAgICAgICAgICAgICAgICAgICBuZXh0Q2hhciA9IHVDb2RlOyAvLyBDdXJyZW50IGNoYXJhY3RlciB3aWxsIGJlIHdyaXR0ZW4gdG9vIGluIHRoZSBuZXh0IGl0ZXJhdGlvbi5cblxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIFRPRE86IFdoYXQgaWYgd2UgaGF2ZSBubyBkZWZhdWx0PyAocmVzQ29kZSA9PSB1bmRlZmluZWQpXG4gICAgICAgICAgICAgICAgICAgIC8vIFRoZW4sIHdlIHNob3VsZCB3cml0ZSBmaXJzdCBjaGFyIG9mIHRoZSBzZXF1ZW5jZSBhcy1pcyBhbmQgdHJ5IHRoZSByZXN0IHJlY3Vyc2l2ZWx5LlxuICAgICAgICAgICAgICAgICAgICAvLyBEaWRuJ3QgZG8gaXQgZm9yIG5vdyBiZWNhdXNlIG5vIGVuY29kaW5nIGhhcyB0aGlzIHNpdHVhdGlvbiB5ZXQuXG4gICAgICAgICAgICAgICAgICAgIC8vIEN1cnJlbnRseSwganVzdCBza2lwIHRoZSBzZXF1ZW5jZSBhbmQgd3JpdGUgY3VycmVudCBjaGFyLlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHNlcU9iaiA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh1Q29kZSA+PSAwKSB7ICAvLyBSZWd1bGFyIGNoYXJhY3RlclxuICAgICAgICAgICAgdmFyIHN1YnRhYmxlID0gdGhpcy5lbmNvZGVUYWJsZVt1Q29kZSA+PiA4XTtcbiAgICAgICAgICAgIGlmIChzdWJ0YWJsZSAhPT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgIGRiY3NDb2RlID0gc3VidGFibGVbdUNvZGUgJiAweEZGXTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgaWYgKGRiY3NDb2RlIDw9IFNFUV9TVEFSVCkgeyAvLyBTZXF1ZW5jZSBzdGFydFxuICAgICAgICAgICAgICAgIHNlcU9iaiA9IHRoaXMuZW5jb2RlVGFibGVTZXFbU0VRX1NUQVJULWRiY3NDb2RlXTtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGRiY3NDb2RlID09IFVOQVNTSUdORUQgJiYgdGhpcy5nYjE4MDMwKSB7XG4gICAgICAgICAgICAgICAgLy8gVXNlIEdCMTgwMzAgYWxnb3JpdGhtIHRvIGZpbmQgY2hhcmFjdGVyKHMpIHRvIHdyaXRlLlxuICAgICAgICAgICAgICAgIHZhciBpZHggPSBmaW5kSWR4KHRoaXMuZ2IxODAzMC51Q2hhcnMsIHVDb2RlKTtcbiAgICAgICAgICAgICAgICBpZiAoaWR4ICE9IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhciBkYmNzQ29kZSA9IHRoaXMuZ2IxODAzMC5nYkNoYXJzW2lkeF0gKyAodUNvZGUgLSB0aGlzLmdiMTgwMzAudUNoYXJzW2lkeF0pO1xuICAgICAgICAgICAgICAgICAgICBuZXdCdWZbaisrXSA9IDB4ODEgKyBNYXRoLmZsb29yKGRiY3NDb2RlIC8gMTI2MDApOyBkYmNzQ29kZSA9IGRiY3NDb2RlICUgMTI2MDA7XG4gICAgICAgICAgICAgICAgICAgIG5ld0J1ZltqKytdID0gMHgzMCArIE1hdGguZmxvb3IoZGJjc0NvZGUgLyAxMjYwKTsgZGJjc0NvZGUgPSBkYmNzQ29kZSAlIDEyNjA7XG4gICAgICAgICAgICAgICAgICAgIG5ld0J1ZltqKytdID0gMHg4MSArIE1hdGguZmxvb3IoZGJjc0NvZGUgLyAxMCk7IGRiY3NDb2RlID0gZGJjc0NvZGUgJSAxMDtcbiAgICAgICAgICAgICAgICAgICAgbmV3QnVmW2orK10gPSAweDMwICsgZGJjc0NvZGU7XG4gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIDMuIFdyaXRlIGRiY3NDb2RlIGNoYXJhY3Rlci5cbiAgICAgICAgaWYgKGRiY3NDb2RlID09PSBVTkFTU0lHTkVEKVxuICAgICAgICAgICAgZGJjc0NvZGUgPSB0aGlzLmRlZmF1bHRDaGFyU2luZ2xlQnl0ZTtcbiAgICAgICAgXG4gICAgICAgIGlmIChkYmNzQ29kZSA8IDB4MTAwKSB7XG4gICAgICAgICAgICBuZXdCdWZbaisrXSA9IGRiY3NDb2RlO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKGRiY3NDb2RlIDwgMHgxMDAwMCkge1xuICAgICAgICAgICAgbmV3QnVmW2orK10gPSBkYmNzQ29kZSA+PiA4OyAgIC8vIGhpZ2ggYnl0ZVxuICAgICAgICAgICAgbmV3QnVmW2orK10gPSBkYmNzQ29kZSAmIDB4RkY7IC8vIGxvdyBieXRlXG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoZGJjc0NvZGUgPCAweDEwMDAwMDApIHtcbiAgICAgICAgICAgIG5ld0J1ZltqKytdID0gZGJjc0NvZGUgPj4gMTY7XG4gICAgICAgICAgICBuZXdCdWZbaisrXSA9IChkYmNzQ29kZSA+PiA4KSAmIDB4RkY7XG4gICAgICAgICAgICBuZXdCdWZbaisrXSA9IGRiY3NDb2RlICYgMHhGRjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG5ld0J1ZltqKytdID0gZGJjc0NvZGUgPj4+IDI0O1xuICAgICAgICAgICAgbmV3QnVmW2orK10gPSAoZGJjc0NvZGUgPj4+IDE2KSAmIDB4RkY7XG4gICAgICAgICAgICBuZXdCdWZbaisrXSA9IChkYmNzQ29kZSA+Pj4gOCkgJiAweEZGO1xuICAgICAgICAgICAgbmV3QnVmW2orK10gPSBkYmNzQ29kZSAmIDB4RkY7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLnNlcU9iaiA9IHNlcU9iajtcbiAgICB0aGlzLmxlYWRTdXJyb2dhdGUgPSBsZWFkU3Vycm9nYXRlO1xuICAgIHJldHVybiBuZXdCdWYuc2xpY2UoMCwgaik7XG59XG5cbkRCQ1NFbmNvZGVyLnByb3RvdHlwZS5lbmQgPSBmdW5jdGlvbigpIHtcbiAgICBpZiAodGhpcy5sZWFkU3Vycm9nYXRlID09PSAtMSAmJiB0aGlzLnNlcU9iaiA9PT0gdW5kZWZpbmVkKVxuICAgICAgICByZXR1cm47IC8vIEFsbCBjbGVhbi4gTW9zdCBvZnRlbiBjYXNlLlxuXG4gICAgdmFyIG5ld0J1ZiA9IEJ1ZmZlci5hbGxvYygxMCksIGogPSAwO1xuXG4gICAgaWYgKHRoaXMuc2VxT2JqKSB7IC8vIFdlJ3JlIGluIHRoZSBzZXF1ZW5jZS5cbiAgICAgICAgdmFyIGRiY3NDb2RlID0gdGhpcy5zZXFPYmpbREVGX0NIQVJdO1xuICAgICAgICBpZiAoZGJjc0NvZGUgIT09IHVuZGVmaW5lZCkgeyAvLyBXcml0ZSBiZWdpbm5pbmcgb2YgdGhlIHNlcXVlbmNlLlxuICAgICAgICAgICAgaWYgKGRiY3NDb2RlIDwgMHgxMDApIHtcbiAgICAgICAgICAgICAgICBuZXdCdWZbaisrXSA9IGRiY3NDb2RlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgbmV3QnVmW2orK10gPSBkYmNzQ29kZSA+PiA4OyAgIC8vIGhpZ2ggYnl0ZVxuICAgICAgICAgICAgICAgIG5ld0J1ZltqKytdID0gZGJjc0NvZGUgJiAweEZGOyAvLyBsb3cgYnl0ZVxuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gU2VlIHRvZG8gYWJvdmUuXG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zZXFPYmogPSB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMubGVhZFN1cnJvZ2F0ZSAhPT0gLTEpIHtcbiAgICAgICAgLy8gSW5jb21wbGV0ZSBzdXJyb2dhdGUgcGFpciAtIG9ubHkgbGVhZCBzdXJyb2dhdGUgZm91bmQuXG4gICAgICAgIG5ld0J1ZltqKytdID0gdGhpcy5kZWZhdWx0Q2hhclNpbmdsZUJ5dGU7XG4gICAgICAgIHRoaXMubGVhZFN1cnJvZ2F0ZSA9IC0xO1xuICAgIH1cbiAgICBcbiAgICByZXR1cm4gbmV3QnVmLnNsaWNlKDAsIGopO1xufVxuXG4vLyBFeHBvcnQgZm9yIHRlc3RpbmdcbkRCQ1NFbmNvZGVyLnByb3RvdHlwZS5maW5kSWR4ID0gZmluZElkeDtcblxuXG4vLyA9PSBEZWNvZGVyID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG5mdW5jdGlvbiBEQkNTRGVjb2RlcihvcHRpb25zLCBjb2RlYykge1xuICAgIC8vIERlY29kZXIgc3RhdGVcbiAgICB0aGlzLm5vZGVJZHggPSAwO1xuICAgIHRoaXMucHJldkJ5dGVzID0gW107XG5cbiAgICAvLyBTdGF0aWMgZGF0YVxuICAgIHRoaXMuZGVjb2RlVGFibGVzID0gY29kZWMuZGVjb2RlVGFibGVzO1xuICAgIHRoaXMuZGVjb2RlVGFibGVTZXEgPSBjb2RlYy5kZWNvZGVUYWJsZVNlcTtcbiAgICB0aGlzLmRlZmF1bHRDaGFyVW5pY29kZSA9IGNvZGVjLmRlZmF1bHRDaGFyVW5pY29kZTtcbiAgICB0aGlzLmdiMTgwMzAgPSBjb2RlYy5nYjE4MDMwO1xufVxuXG5EQkNTRGVjb2Rlci5wcm90b3R5cGUud3JpdGUgPSBmdW5jdGlvbihidWYpIHtcbiAgICB2YXIgbmV3QnVmID0gQnVmZmVyLmFsbG9jKGJ1Zi5sZW5ndGgqMiksXG4gICAgICAgIG5vZGVJZHggPSB0aGlzLm5vZGVJZHgsIFxuICAgICAgICBwcmV2Qnl0ZXMgPSB0aGlzLnByZXZCeXRlcywgcHJldk9mZnNldCA9IHRoaXMucHJldkJ5dGVzLmxlbmd0aCxcbiAgICAgICAgc2VxU3RhcnQgPSAtdGhpcy5wcmV2Qnl0ZXMubGVuZ3RoLCAvLyBpZHggb2YgdGhlIHN0YXJ0IG9mIGN1cnJlbnQgcGFyc2VkIHNlcXVlbmNlLlxuICAgICAgICB1Q29kZTtcblxuICAgIGZvciAodmFyIGkgPSAwLCBqID0gMDsgaSA8IGJ1Zi5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgY3VyQnl0ZSA9IChpID49IDApID8gYnVmW2ldIDogcHJldkJ5dGVzW2kgKyBwcmV2T2Zmc2V0XTtcblxuICAgICAgICAvLyBMb29rdXAgaW4gY3VycmVudCB0cmllIG5vZGUuXG4gICAgICAgIHZhciB1Q29kZSA9IHRoaXMuZGVjb2RlVGFibGVzW25vZGVJZHhdW2N1ckJ5dGVdO1xuXG4gICAgICAgIGlmICh1Q29kZSA+PSAwKSB7IFxuICAgICAgICAgICAgLy8gTm9ybWFsIGNoYXJhY3RlciwganVzdCB1c2UgaXQuXG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodUNvZGUgPT09IFVOQVNTSUdORUQpIHsgLy8gVW5rbm93biBjaGFyLlxuICAgICAgICAgICAgLy8gVE9ETzogQ2FsbGJhY2sgd2l0aCBzZXEuXG4gICAgICAgICAgICB1Q29kZSA9IHRoaXMuZGVmYXVsdENoYXJVbmljb2RlLmNoYXJDb2RlQXQoMCk7XG4gICAgICAgICAgICBpID0gc2VxU3RhcnQ7IC8vIFNraXAgb25lIGJ5dGUgKCdpJyB3aWxsIGJlIGluY3JlbWVudGVkIGJ5IHRoZSBmb3IgbG9vcCkgYW5kIHRyeSB0byBwYXJzZSBhZ2Fpbi5cbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh1Q29kZSA9PT0gR0IxODAzMF9DT0RFKSB7XG4gICAgICAgICAgICBpZiAoaSA+PSAzKSB7XG4gICAgICAgICAgICAgICAgdmFyIHB0ciA9IChidWZbaS0zXS0weDgxKSoxMjYwMCArIChidWZbaS0yXS0weDMwKSoxMjYwICsgKGJ1ZltpLTFdLTB4ODEpKjEwICsgKGN1ckJ5dGUtMHgzMCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHZhciBwdHIgPSAocHJldkJ5dGVzW2ktMytwcmV2T2Zmc2V0XS0weDgxKSoxMjYwMCArIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAoKChpLTIgPj0gMCkgPyBidWZbaS0yXSA6IHByZXZCeXRlc1tpLTIrcHJldk9mZnNldF0pLTB4MzApKjEyNjAgKyBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKCgoaS0xID49IDApID8gYnVmW2ktMV0gOiBwcmV2Qnl0ZXNbaS0xK3ByZXZPZmZzZXRdKS0weDgxKSoxMCArIFxuICAgICAgICAgICAgICAgICAgICAgICAgICAoY3VyQnl0ZS0weDMwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBpZHggPSBmaW5kSWR4KHRoaXMuZ2IxODAzMC5nYkNoYXJzLCBwdHIpO1xuICAgICAgICAgICAgdUNvZGUgPSB0aGlzLmdiMTgwMzAudUNoYXJzW2lkeF0gKyBwdHIgLSB0aGlzLmdiMTgwMzAuZ2JDaGFyc1tpZHhdO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHVDb2RlIDw9IE5PREVfU1RBUlQpIHsgLy8gR28gdG8gbmV4dCB0cmllIG5vZGUuXG4gICAgICAgICAgICBub2RlSWR4ID0gTk9ERV9TVEFSVCAtIHVDb2RlO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodUNvZGUgPD0gU0VRX1NUQVJUKSB7IC8vIE91dHB1dCBhIHNlcXVlbmNlIG9mIGNoYXJzLlxuICAgICAgICAgICAgdmFyIHNlcSA9IHRoaXMuZGVjb2RlVGFibGVTZXFbU0VRX1NUQVJUIC0gdUNvZGVdO1xuICAgICAgICAgICAgZm9yICh2YXIgayA9IDA7IGsgPCBzZXEubGVuZ3RoIC0gMTsgaysrKSB7XG4gICAgICAgICAgICAgICAgdUNvZGUgPSBzZXFba107XG4gICAgICAgICAgICAgICAgbmV3QnVmW2orK10gPSB1Q29kZSAmIDB4RkY7XG4gICAgICAgICAgICAgICAgbmV3QnVmW2orK10gPSB1Q29kZSA+PiA4O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdUNvZGUgPSBzZXFbc2VxLmxlbmd0aC0xXTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJpY29udi1saXRlIGludGVybmFsIGVycm9yOiBpbnZhbGlkIGRlY29kaW5nIHRhYmxlIHZhbHVlIFwiICsgdUNvZGUgKyBcIiBhdCBcIiArIG5vZGVJZHggKyBcIi9cIiArIGN1ckJ5dGUpO1xuXG4gICAgICAgIC8vIFdyaXRlIHRoZSBjaGFyYWN0ZXIgdG8gYnVmZmVyLCBoYW5kbGluZyBoaWdoZXIgcGxhbmVzIHVzaW5nIHN1cnJvZ2F0ZSBwYWlyLlxuICAgICAgICBpZiAodUNvZGUgPj0gMHgxMDAwMCkgeyBcbiAgICAgICAgICAgIHVDb2RlIC09IDB4MTAwMDA7XG4gICAgICAgICAgICB2YXIgdUNvZGVMZWFkID0gMHhEODAwIHwgKHVDb2RlID4+IDEwKTtcbiAgICAgICAgICAgIG5ld0J1ZltqKytdID0gdUNvZGVMZWFkICYgMHhGRjtcbiAgICAgICAgICAgIG5ld0J1ZltqKytdID0gdUNvZGVMZWFkID4+IDg7XG5cbiAgICAgICAgICAgIHVDb2RlID0gMHhEQzAwIHwgKHVDb2RlICYgMHgzRkYpO1xuICAgICAgICB9XG4gICAgICAgIG5ld0J1ZltqKytdID0gdUNvZGUgJiAweEZGO1xuICAgICAgICBuZXdCdWZbaisrXSA9IHVDb2RlID4+IDg7XG5cbiAgICAgICAgLy8gUmVzZXQgdHJpZSBub2RlLlxuICAgICAgICBub2RlSWR4ID0gMDsgc2VxU3RhcnQgPSBpKzE7XG4gICAgfVxuXG4gICAgdGhpcy5ub2RlSWR4ID0gbm9kZUlkeDtcbiAgICB0aGlzLnByZXZCeXRlcyA9IChzZXFTdGFydCA+PSAwKVxuICAgICAgICA/IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGJ1Ziwgc2VxU3RhcnQpXG4gICAgICAgIDogcHJldkJ5dGVzLnNsaWNlKHNlcVN0YXJ0ICsgcHJldk9mZnNldCkuY29uY2F0KEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGJ1ZikpO1xuXG4gICAgcmV0dXJuIG5ld0J1Zi5zbGljZSgwLCBqKS50b1N0cmluZygndWNzMicpO1xufVxuXG5EQkNTRGVjb2Rlci5wcm90b3R5cGUuZW5kID0gZnVuY3Rpb24oKSB7XG4gICAgdmFyIHJldCA9ICcnO1xuXG4gICAgLy8gVHJ5IHRvIHBhcnNlIGFsbCByZW1haW5pbmcgY2hhcnMuXG4gICAgd2hpbGUgKHRoaXMucHJldkJ5dGVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgLy8gU2tpcCAxIGNoYXJhY3RlciBpbiB0aGUgYnVmZmVyLlxuICAgICAgICByZXQgKz0gdGhpcy5kZWZhdWx0Q2hhclVuaWNvZGU7XG4gICAgICAgIHZhciBieXRlc0FyciA9IHRoaXMucHJldkJ5dGVzLnNsaWNlKDEpO1xuXG4gICAgICAgIC8vIFBhcnNlIHJlbWFpbmluZyBhcyB1c3VhbC5cbiAgICAgICAgdGhpcy5wcmV2Qnl0ZXMgPSBbXTtcbiAgICAgICAgdGhpcy5ub2RlSWR4ID0gMDtcbiAgICAgICAgaWYgKGJ5dGVzQXJyLmxlbmd0aCA+IDApXG4gICAgICAgICAgICByZXQgKz0gdGhpcy53cml0ZShieXRlc0Fycik7XG4gICAgfVxuXG4gICAgdGhpcy5wcmV2Qnl0ZXMgPSBbXTtcbiAgICB0aGlzLm5vZGVJZHggPSAwO1xuICAgIHJldHVybiByZXQ7XG59XG5cbi8vIEJpbmFyeSBzZWFyY2ggZm9yIEdCMTgwMzAuIFJldHVybnMgbGFyZ2VzdCBpIHN1Y2ggdGhhdCB0YWJsZVtpXSA8PSB2YWwuXG5mdW5jdGlvbiBmaW5kSWR4KHRhYmxlLCB2YWwpIHtcbiAgICBpZiAodGFibGVbMF0gPiB2YWwpXG4gICAgICAgIHJldHVybiAtMTtcblxuICAgIHZhciBsID0gMCwgciA9IHRhYmxlLmxlbmd0aDtcbiAgICB3aGlsZSAobCA8IHItMSkgeyAvLyBhbHdheXMgdGFibGVbbF0gPD0gdmFsIDwgdGFibGVbcl1cbiAgICAgICAgdmFyIG1pZCA9IGwgKyAoKHItbCsxKSA+PiAxKTtcbiAgICAgICAgaWYgKHRhYmxlW21pZF0gPD0gdmFsKVxuICAgICAgICAgICAgbCA9IG1pZDtcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgciA9IG1pZDtcbiAgICB9XG4gICAgcmV0dXJuIGw7XG59XG5cbiIsICJbXG5bXCIwXCIsXCJcXHUwMDAwXCIsMTI4XSxcbltcImExXCIsXCJcdUZGNjFcIiw2Ml0sXG5bXCI4MTQwXCIsXCJcdTMwMDBcdTMwMDFcdTMwMDJcdUZGMENcdUZGMEVcdTMwRkJcdUZGMUFcdUZGMUJcdUZGMUZcdUZGMDFcdTMwOUJcdTMwOUNcdTAwQjRcdUZGNDBcdTAwQThcdUZGM0VcdUZGRTNcdUZGM0ZcdTMwRkRcdTMwRkVcdTMwOURcdTMwOUVcdTMwMDNcdTRFRERcdTMwMDVcdTMwMDZcdTMwMDdcdTMwRkNcdTIwMTVcdTIwMTBcdUZGMEZcdUZGM0NcdUZGNUVcdTIyMjVcdUZGNUNcdTIwMjZcdTIwMjVcdTIwMThcdTIwMTlcdTIwMUNcdTIwMURcdUZGMDhcdUZGMDlcdTMwMTRcdTMwMTVcdUZGM0JcdUZGM0RcdUZGNUJcdUZGNURcdTMwMDhcIiw5LFwiXHVGRjBCXHVGRjBEXHUwMEIxXHUwMEQ3XCJdLFxuW1wiODE4MFwiLFwiXHUwMEY3XHVGRjFEXHUyMjYwXHVGRjFDXHVGRjFFXHUyMjY2XHUyMjY3XHUyMjFFXHUyMjM0XHUyNjQyXHUyNjQwXHUwMEIwXHUyMDMyXHUyMDMzXHUyMTAzXHVGRkU1XHVGRjA0XHVGRkUwXHVGRkUxXHVGRjA1XHVGRjAzXHVGRjA2XHVGRjBBXHVGRjIwXHUwMEE3XHUyNjA2XHUyNjA1XHUyNUNCXHUyNUNGXHUyNUNFXHUyNUM3XHUyNUM2XHUyNUExXHUyNUEwXHUyNUIzXHUyNUIyXHUyNUJEXHUyNUJDXHUyMDNCXHUzMDEyXHUyMTkyXHUyMTkwXHUyMTkxXHUyMTkzXHUzMDEzXCJdLFxuW1wiODFiOFwiLFwiXHUyMjA4XHUyMjBCXHUyMjg2XHUyMjg3XHUyMjgyXHUyMjgzXHUyMjJBXHUyMjI5XCJdLFxuW1wiODFjOFwiLFwiXHUyMjI3XHUyMjI4XHVGRkUyXHUyMUQyXHUyMUQ0XHUyMjAwXHUyMjAzXCJdLFxuW1wiODFkYVwiLFwiXHUyMjIwXHUyMkE1XHUyMzEyXHUyMjAyXHUyMjA3XHUyMjYxXHUyMjUyXHUyMjZBXHUyMjZCXHUyMjFBXHUyMjNEXHUyMjFEXHUyMjM1XHUyMjJCXHUyMjJDXCJdLFxuW1wiODFmMFwiLFwiXHUyMTJCXHUyMDMwXHUyNjZGXHUyNjZEXHUyNjZBXHUyMDIwXHUyMDIxXHUwMEI2XCJdLFxuW1wiODFmY1wiLFwiXHUyNUVGXCJdLFxuW1wiODI0ZlwiLFwiXHVGRjEwXCIsOV0sXG5bXCI4MjYwXCIsXCJcdUZGMjFcIiwyNV0sXG5bXCI4MjgxXCIsXCJcdUZGNDFcIiwyNV0sXG5bXCI4MjlmXCIsXCJcdTMwNDFcIiw4Ml0sXG5bXCI4MzQwXCIsXCJcdTMwQTFcIiw2Ml0sXG5bXCI4MzgwXCIsXCJcdTMwRTBcIiwyMl0sXG5bXCI4MzlmXCIsXCJcdTAzOTFcIiwxNixcIlx1MDNBM1wiLDZdLFxuW1wiODNiZlwiLFwiXHUwM0IxXCIsMTYsXCJcdTAzQzNcIiw2XSxcbltcIjg0NDBcIixcIlx1MDQxMFwiLDUsXCJcdTA0MDFcdTA0MTZcIiwyNV0sXG5bXCI4NDcwXCIsXCJcdTA0MzBcIiw1LFwiXHUwNDUxXHUwNDM2XCIsN10sXG5bXCI4NDgwXCIsXCJcdTA0M0VcIiwxN10sXG5bXCI4NDlmXCIsXCJcdTI1MDBcdTI1MDJcdTI1MENcdTI1MTBcdTI1MThcdTI1MTRcdTI1MUNcdTI1MkNcdTI1MjRcdTI1MzRcdTI1M0NcdTI1MDFcdTI1MDNcdTI1MEZcdTI1MTNcdTI1MUJcdTI1MTdcdTI1MjNcdTI1MzNcdTI1MkJcdTI1M0JcdTI1NEJcdTI1MjBcdTI1MkZcdTI1MjhcdTI1MzdcdTI1M0ZcdTI1MURcdTI1MzBcdTI1MjVcdTI1MzhcdTI1NDJcIl0sXG5bXCI4NzQwXCIsXCJcdTI0NjBcIiwxOSxcIlx1MjE2MFwiLDldLFxuW1wiODc1ZlwiLFwiXHUzMzQ5XHUzMzE0XHUzMzIyXHUzMzREXHUzMzE4XHUzMzI3XHUzMzAzXHUzMzM2XHUzMzUxXHUzMzU3XHUzMzBEXHUzMzI2XHUzMzIzXHUzMzJCXHUzMzRBXHUzMzNCXHUzMzlDXHUzMzlEXHUzMzlFXHUzMzhFXHUzMzhGXHUzM0M0XHUzM0ExXCJdLFxuW1wiODc3ZVwiLFwiXHUzMzdCXCJdLFxuW1wiODc4MFwiLFwiXHUzMDFEXHUzMDFGXHUyMTE2XHUzM0NEXHUyMTIxXHUzMkE0XCIsNCxcIlx1MzIzMVx1MzIzMlx1MzIzOVx1MzM3RVx1MzM3RFx1MzM3Q1x1MjI1Mlx1MjI2MVx1MjIyQlx1MjIyRVx1MjIxMVx1MjIxQVx1MjJBNVx1MjIyMFx1MjIxRlx1MjJCRlx1MjIzNVx1MjIyOVx1MjIyQVwiXSxcbltcIjg4OWZcIixcIlx1NEU5Q1x1NTUxNlx1NUEwM1x1OTYzRlx1NTRDMFx1NjExQlx1NjMyOFx1NTlGNlx1OTAyMlx1ODQ3NVx1ODMxQ1x1N0E1MFx1NjBBQVx1NjNFMVx1NkUyNVx1NjVFRFx1ODQ2Nlx1ODJBNlx1OUJGNVx1Njg5M1x1NTcyN1x1NjVBMVx1NjI3MVx1NUI5Qlx1NTlEMFx1ODY3Qlx1OThGNFx1N0Q2Mlx1N0RCRVx1OUI4RVx1NjIxNlx1N0M5Rlx1ODhCN1x1NUI4OVx1NUVCNVx1NjMwOVx1NjY5N1x1Njg0OFx1OTVDN1x1OTc4RFx1Njc0Rlx1NEVFNVx1NEYwQVx1NEY0RFx1NEY5RFx1NTA0OVx1NTZGMlx1NTkzN1x1NTlENFx1NUEwMVx1NUMwOVx1NjBERlx1NjEwRlx1NjE3MFx1NjYxM1x1NjkwNVx1NzBCQVx1NzU0Rlx1NzU3MFx1NzlGQlx1N0RBRFx1N0RFRlx1ODBDM1x1ODQwRVx1ODg2M1x1OEIwMlx1OTA1NVx1OTA3QVx1NTMzQlx1NEU5NVx1NEVBNVx1NTdERlx1ODBCMlx1OTBDMVx1NzhFRlx1NEUwMFx1NThGMVx1NkVBMlx1OTAzOFx1N0EzMlx1ODMyOFx1ODI4Qlx1OUMyRlx1NTE0MVx1NTM3MFx1NTRCRFx1NTRFMVx1NTZFMFx1NTlGQlx1NUYxNVx1OThGMlx1NkRFQlx1ODBFNFx1ODUyRFwiXSxcbltcIjg5NDBcIixcIlx1OTY2Mlx1OTY3MFx1OTZBMFx1OTdGQlx1NTQwQlx1NTNGM1x1NUI4N1x1NzBDRlx1N0ZCRFx1OEZDMlx1OTZFOFx1NTM2Rlx1OUQ1Q1x1N0FCQVx1NEUxMVx1Nzg5M1x1ODFGQ1x1NkUyNlx1NTYxOFx1NTUwNFx1NkIxRFx1ODUxQVx1OUMzQlx1NTlFNVx1NTNBOVx1NkQ2Nlx1NzREQ1x1OTU4Rlx1NTY0Mlx1NEU5MVx1OTA0Qlx1OTZGMlx1ODM0Rlx1OTkwQ1x1NTNFMVx1NTVCNlx1NUIzMFx1NUY3MVx1NjYyMFx1NjZGM1x1NjgwNFx1NkMzOFx1NkNGM1x1NkQyOVx1NzQ1Qlx1NzZDOFx1N0E0RVx1OTgzNFx1ODJGMVx1ODg1Qlx1OEE2MFx1OTJFRFx1NkRCMlx1NzVBQlx1NzZDQVx1OTlDNVx1NjBBNlx1OEIwMVx1OEQ4QVx1OTVCMlx1Njk4RVx1NTNBRFx1NTE4NlwiXSxcbltcIjg5ODBcIixcIlx1NTcxMlx1NTgzMFx1NTk0NFx1NUJCNFx1NUVGNlx1NjAyOFx1NjNBOVx1NjNGNFx1NkNCRlx1NkYxNFx1NzA4RVx1NzExNFx1NzE1OVx1NzFENVx1NzMzRlx1N0UwMVx1ODI3Nlx1ODJEMVx1ODU5N1x1OTA2MFx1OTI1Qlx1OUQxQlx1NTg2OVx1NjVCQ1x1NkM1QVx1NzUyNVx1NTFGOVx1NTkyRVx1NTk2NVx1NUY4MFx1NUZEQ1x1NjJCQ1x1NjVGQVx1NkEyQVx1NkIyN1x1NkJCNFx1NzM4Qlx1N0ZDMVx1ODk1Nlx1OUQyQ1x1OUQwRVx1OUVDNFx1NUNBMVx1NkM5Nlx1ODM3Qlx1NTEwNFx1NUM0Qlx1NjFCNlx1ODFDNlx1Njg3Nlx1NzI2MVx1NEU1OVx1NEZGQVx1NTM3OFx1NjA2OVx1NkUyOVx1N0E0Rlx1OTdGM1x1NEUwQlx1NTMxNlx1NEVFRVx1NEY1NVx1NEYzRFx1NEZBMVx1NEY3M1x1NTJBMFx1NTNFRlx1NTYwOVx1NTkwRlx1NUFDMVx1NUJCNlx1NUJFMVx1NzlEMVx1NjY4N1x1Njc5Q1x1NjdCNlx1NkI0Q1x1NkNCM1x1NzA2Qlx1NzNDMlx1Nzk4RFx1NzlCRVx1N0EzQ1x1N0I4N1x1ODJCMVx1ODJEQlx1ODMwNFx1ODM3N1x1ODNFRlx1ODNEM1x1ODc2Nlx1OEFCMlx1NTYyOVx1OENBOFx1OEZFNlx1OTA0RVx1OTcxRVx1ODY4QVx1NEZDNFx1NUNFOFx1NjIxMVx1NzI1OVx1NzUzQlx1ODFFNVx1ODJCRFx1ODZGRVx1OENDMFx1OTZDNVx1OTkxM1x1OTlENVx1NEVDQlx1NEYxQVx1ODlFM1x1NTZERVx1NTg0QVx1NThDQVx1NUVGQlx1NUZFQlx1NjAyQVx1NjA5NFx1NjA2Mlx1NjFEMFx1NjIxMlx1NjJEMFx1NjUzOVwiXSxcbltcIjhhNDBcIixcIlx1OUI0MVx1NjY2Nlx1NjhCMFx1NkQ3N1x1NzA3MFx1NzU0Q1x1NzY4Nlx1N0Q3NVx1ODJBNVx1ODdGOVx1OTU4Qlx1OTY4RVx1OEM5RFx1NTFGMVx1NTJCRVx1NTkxNlx1NTRCM1x1NUJCM1x1NUQxNlx1NjE2OFx1Njk4Mlx1NkRBRlx1Nzg4RFx1ODRDQlx1ODg1N1x1OEE3Mlx1OTNBN1x1OUFCOFx1NkQ2Q1x1OTlBOFx1ODZEOVx1NTdBM1x1NjdGRlx1ODZDRVx1OTIwRVx1NTI4M1x1NTY4N1x1NTQwNFx1NUVEM1x1NjJFMVx1NjRCOVx1NjgzQ1x1NjgzOFx1NkJCQlx1NzM3Mlx1NzhCQVx1N0E2Qlx1ODk5QVx1ODlEMlx1OEQ2Qlx1OEYwM1x1OTBFRFx1OTVBM1x1OTY5NFx1OTc2OVx1NUI2Nlx1NUNCM1x1Njk3RFx1OTg0RFx1OTg0RVx1NjM5Qlx1N0IyMFx1NkEyQlwiXSxcbltcIjhhODBcIixcIlx1NkE3Rlx1NjhCNlx1OUMwRFx1NkY1Rlx1NTI3Mlx1NTU5RFx1NjA3MFx1NjJFQ1x1NkQzQlx1NkUwN1x1NkVEMVx1ODQ1Qlx1ODkxMFx1OEY0NFx1NEUxNFx1OUMzOVx1NTNGNlx1NjkxQlx1NkEzQVx1OTc4NFx1NjgyQVx1NTE1Q1x1N0FDM1x1ODRCMlx1OTFEQ1x1OTM4Q1x1NTY1Qlx1OUQyOFx1NjgyMlx1ODMwNVx1ODQzMVx1N0NBNVx1NTIwOFx1ODJDNVx1NzRFNlx1NEU3RVx1NEY4M1x1NTFBMFx1NUJEMlx1NTIwQVx1NTJEOFx1NTJFN1x1NURGQlx1NTU5QVx1NTgyQVx1NTlFNlx1NUI4Q1x1NUI5OFx1NUJEQlx1NUU3Mlx1NUU3OVx1NjBBM1x1NjExRlx1NjE2M1x1NjFCRVx1NjNEQlx1NjU2Mlx1NjdEMVx1Njg1M1x1NjhGQVx1NkIzRVx1NkI1M1x1NkM1N1x1NkYyMlx1NkY5N1x1NkY0NVx1NzRCMFx1NzUxOFx1NzZFM1x1NzcwQlx1N0FGRlx1N0JBMVx1N0MyMVx1N0RFOVx1N0YzNlx1N0ZGMFx1ODA5RFx1ODI2Nlx1ODM5RVx1ODlCM1x1OEFDQ1x1OENBQlx1OTA4NFx1OTQ1MVx1OTU5M1x1OTU5MVx1OTVBMlx1OTY2NVx1OTdEM1x1OTkyOFx1ODIxOFx1NEUzOFx1NTQyQlx1NUNCOFx1NURDQ1x1NzNBOVx1NzY0Q1x1NzczQ1x1NUNBOVx1N0ZFQlx1OEQwQlx1OTZDMVx1OTgxMVx1OTg1NFx1OTg1OFx1NEYwMVx1NEYwRVx1NTM3MVx1NTU5Q1x1NTY2OFx1NTdGQVx1NTk0N1x1NUIwOVx1NUJDNFx1NUM5MFx1NUUwQ1x1NUU3RVx1NUZDQ1x1NjNFRVx1NjczQVx1NjVEN1x1NjVFMlx1NjcxRlx1NjhDQlx1NjhDNFwiXSxcbltcIjhiNDBcIixcIlx1NkE1Rlx1NUUzMFx1NkJDNVx1NkMxN1x1NkM3RFx1NzU3Rlx1Nzk0OFx1NUI2M1x1N0EwMFx1N0QwMFx1NUZCRFx1ODk4Rlx1OEExOFx1OENCNFx1OEQ3N1x1OEVDQ1x1OEYxRFx1OThFMlx1OUEwRVx1OUIzQ1x1NEU4MFx1NTA3RFx1NTEwMFx1NTk5M1x1NUI5Q1x1NjIyRlx1NjI4MFx1NjRFQ1x1NkIzQVx1NzJBMFx1NzU5MVx1Nzk0N1x1N0ZBOVx1ODdGQlx1OEFCQ1x1OEI3MFx1NjNBQ1x1ODNDQVx1OTdBMFx1NTQwOVx1NTQwM1x1NTVBQlx1Njg1NFx1NkE1OFx1OEE3MFx1NzgyN1x1Njc3NVx1OUVDRFx1NTM3NFx1NUJBMlx1ODExQVx1ODY1MFx1OTAwNlx1NEUxOFx1NEU0NVx1NEVDN1x1NEYxMVx1NTNDQVx1NTQzOFx1NUJBRVx1NUYxM1x1NjAyNVx1NjU1MVwiXSxcbltcIjhiODBcIixcIlx1NjczRFx1NkM0Mlx1NkM3Mlx1NkNFM1x1NzA3OFx1NzQwM1x1N0E3Nlx1N0FBRVx1N0IwOFx1N0QxQVx1N0NGRVx1N0Q2Nlx1NjVFN1x1NzI1Qlx1NTNCQlx1NUM0NVx1NURFOFx1NjJEMlx1NjJFMFx1NjMxOVx1NkUyMFx1ODY1QVx1OEEzMVx1OERERFx1OTJGOFx1NkYwMVx1NzlBNlx1OUI1QVx1NEVBOFx1NEVBQlx1NEVBQ1x1NEY5Qlx1NEZBMFx1NTBEMVx1NTE0N1x1N0FGNlx1NTE3MVx1NTFGNlx1NTM1NFx1NTMyMVx1NTM3Rlx1NTNFQlx1NTVBQ1x1NTg4M1x1NUNFMVx1NUYzN1x1NUY0QVx1NjAyRlx1NjA1MFx1NjA2RFx1NjMxRlx1NjU1OVx1NkE0Qlx1NkNDMVx1NzJDMlx1NzJFRFx1NzdFRlx1ODBGOFx1ODEwNVx1ODIwOFx1ODU0RVx1OTBGN1x1OTNFMVx1OTdGRlx1OTk1N1x1OUE1QVx1NEVGMFx1NTFERFx1NUMyRFx1NjY4MVx1Njk2RFx1NUM0MFx1NjZGMlx1Njk3NVx1NzM4OVx1Njg1MFx1N0M4MVx1NTBDNVx1NTJFNFx1NTc0N1x1NURGRVx1OTMyNlx1NjVBNFx1NkIyM1x1NkIzRFx1NzQzNFx1Nzk4MVx1NzlCRFx1N0I0Qlx1N0RDQVx1ODJCOVx1ODNDQ1x1ODg3Rlx1ODk1Rlx1OEIzOVx1OEZEMVx1OTFEMVx1NTQxRlx1OTI4MFx1NEU1RFx1NTAzNlx1NTNFNVx1NTMzQVx1NzJEN1x1NzM5Nlx1NzdFOVx1ODJFNlx1OEVBRlx1OTlDNlx1OTlDOFx1OTlEMlx1NTE3N1x1NjExQVx1ODY1RVx1NTVCMFx1N0E3QVx1NTA3Nlx1NUJEM1x1OTA0N1x1OTY4NVx1NEUzMlx1NkFEQlx1OTFFN1x1NUM1MVx1NUM0OFwiXSxcbltcIjhjNDBcIixcIlx1NjM5OFx1N0E5Rlx1NkM5M1x1OTc3NFx1OEY2MVx1N0FBQVx1NzE4QVx1OTY4OFx1N0M4Mlx1NjgxN1x1N0U3MFx1Njg1MVx1OTM2Q1x1NTJGMlx1NTQxQlx1ODVBQlx1OEExM1x1N0ZBNFx1OEVDRFx1OTBFMVx1NTM2Nlx1ODg4OFx1Nzk0MVx1NEZDMlx1NTBCRVx1NTIxMVx1NTE0NFx1NTU1M1x1NTcyRFx1NzNFQVx1NTc4Qlx1NTk1MVx1NUY2Mlx1NUY4NFx1NjA3NVx1NjE3Nlx1NjE2N1x1NjFBOVx1NjNCMlx1NjQzQVx1NjU2Q1x1NjY2Rlx1Njg0Mlx1NkUxM1x1NzU2Nlx1N0EzRFx1N0NGQlx1N0Q0Q1x1N0Q5OVx1N0U0Qlx1N0Y2Qlx1ODMwRVx1ODM0QVx1ODZDRFx1OEEwOFx1OEE2M1x1OEI2Nlx1OEVGRFx1OTgxQVx1OUQ4Rlx1ODJCOFx1OEZDRVx1OUJFOFwiXSxcbltcIjhjODBcIixcIlx1NTI4N1x1NjIxRlx1NjQ4M1x1NkZDMFx1OTY5OVx1Njg0MVx1NTA5MVx1NkIyMFx1NkM3QVx1NkY1NFx1N0E3NFx1N0Q1MFx1ODg0MFx1OEEyM1x1NjcwOFx1NEVGNlx1NTAzOVx1NTAyNlx1NTA2NVx1NTE3Q1x1NTIzOFx1NTI2M1x1NTVBN1x1NTcwRlx1NTgwNVx1NUFDQ1x1NUVGQVx1NjFCMlx1NjFGOFx1NjJGM1x1NjM3Mlx1NjkxQ1x1NkEyOVx1NzI3RFx1NzJBQ1x1NzMyRVx1NzgxNFx1Nzg2Rlx1N0Q3OVx1NzcwQ1x1ODBBOVx1ODk4Qlx1OEIxOVx1OENFMlx1OEVEMlx1OTA2M1x1OTM3NVx1OTY3QVx1OTg1NVx1OUExM1x1OUU3OFx1NTE0M1x1NTM5Rlx1NTNCM1x1NUU3Qlx1NUYyNlx1NkUxQlx1NkU5MFx1NzM4NFx1NzNGRVx1N0Q0M1x1ODIzN1x1OEEwMFx1OEFGQVx1OTY1MFx1NEU0RVx1NTAwQlx1NTNFNFx1NTQ3Q1x1NTZGQVx1NTlEMVx1NUI2NFx1NURGMVx1NUVBQlx1NUYyN1x1NjIzOFx1NjU0NVx1NjdBRlx1NkU1Nlx1NzJEMFx1N0NDQVx1ODhCNFx1ODBBMVx1ODBFMVx1ODNGMFx1ODY0RVx1OEE4N1x1OERFOFx1OTIzN1x1OTZDN1x1OTg2N1x1OUYxM1x1NEU5NFx1NEU5Mlx1NEYwRFx1NTM0OFx1NTQ0OVx1NTQzRVx1NUEyRlx1NUY4Q1x1NUZBMVx1NjA5Rlx1NjhBN1x1NkE4RVx1NzQ1QVx1Nzg4MVx1OEE5RVx1OEFBNFx1OEI3N1x1OTE5MFx1NEU1RVx1OUJDOVx1NEVBNFx1NEY3Q1x1NEZBRlx1NTAxOVx1NTAxNlx1NTE0OVx1NTE2Q1x1NTI5Rlx1NTJCOVx1NTJGRVx1NTM5QVx1NTNFM1x1NTQxMVwiXSxcbltcIjhkNDBcIixcIlx1NTQwRVx1NTU4OVx1NTc1MVx1NTdBMlx1NTk3RFx1NUI1NFx1NUI1RFx1NUI4Rlx1NURFNVx1NURFN1x1NURGN1x1NUU3OFx1NUU4M1x1NUU5QVx1NUVCN1x1NUYxOFx1NjA1Mlx1NjE0Q1x1NjI5N1x1NjJEOFx1NjNBN1x1NjUzQlx1NjYwMlx1NjY0M1x1NjZGNFx1Njc2RFx1NjgyMVx1Njg5N1x1NjlDQlx1NkM1Rlx1NkQyQVx1NkQ2OVx1NkUyRlx1NkU5RFx1NzUzMlx1NzY4N1x1Nzg2Q1x1N0EzRlx1N0NFMFx1N0QwNVx1N0QxOFx1N0Q1RVx1N0RCMVx1ODAxNVx1ODAwM1x1ODBBRlx1ODBCMVx1ODE1NFx1ODE4Rlx1ODIyQVx1ODM1Mlx1ODg0Q1x1ODg2MVx1OEIxQlx1OENBMlx1OENGQ1x1OTBDQVx1OTE3NVx1OTI3MVx1NzgzRlx1OTJGQ1x1OTVBNFx1OTY0RFwiXSxcbltcIjhkODBcIixcIlx1OTgwNVx1OTk5OVx1OUFEOFx1OUQzQlx1NTI1Qlx1NTJBQlx1NTNGN1x1NTQwOFx1NThENVx1NjJGN1x1NkZFMFx1OEM2QVx1OEY1Rlx1OUVCOVx1NTE0Qlx1NTIzQlx1NTQ0QVx1NTZGRFx1N0E0MFx1OTE3N1x1OUQ2MFx1OUVEMlx1NzM0NFx1NkYwOVx1ODE3MFx1NzUxMVx1NUZGRFx1NjBEQVx1OUFBOFx1NzJEQlx1OEZCQ1x1NkI2NFx1OTgwM1x1NEVDQVx1NTZGMFx1NTc2NFx1NThCRVx1NUE1QVx1NjA2OFx1NjFDN1x1NjYwRlx1NjYwNlx1NjgzOVx1NjhCMVx1NkRGN1x1NzVENVx1N0QzQVx1ODI2RVx1OUI0Mlx1NEU5Qlx1NEY1MFx1NTNDOVx1NTUwNlx1NUQ2Rlx1NURFNlx1NURFRVx1NjdGQlx1NkM5OVx1NzQ3M1x1NzgwMlx1OEE1MFx1OTM5Nlx1ODhERlx1NTc1MFx1NUVBN1x1NjMyQlx1NTBCNVx1NTBBQ1x1NTE4RFx1NjcwMFx1NTRDOVx1NTg1RVx1NTlCQlx1NUJCMFx1NUY2OVx1NjI0RFx1NjNBMVx1NjgzRFx1NkI3M1x1NkUwOFx1NzA3RFx1OTFDN1x1NzI4MFx1NzgxNVx1NzgyNlx1Nzk2RFx1NjU4RVx1N0QzMFx1ODNEQ1x1ODhDMVx1OEYwOVx1OTY5Qlx1NTI2NFx1NTcyOFx1Njc1MFx1N0Y2QVx1OENBMVx1NTFCNFx1NTc0Mlx1OTYyQVx1NTgzQVx1Njk4QVx1ODBCNFx1NTRCMlx1NUQwRVx1NTdGQ1x1Nzg5NVx1OURGQVx1NEY1Q1x1NTI0QVx1NTQ4Qlx1NjQzRVx1NjYyOFx1NjcxNFx1NjdGNVx1N0E4NFx1N0I1Nlx1N0QyMlx1OTMyRlx1Njg1Q1x1OUJBRFx1N0IzOVx1NTMxOVx1NTE4QVx1NTIzN1wiXSxcbltcIjhlNDBcIixcIlx1NUJERlx1NjJGNlx1NjRBRVx1NjRFNlx1NjcyRFx1NkJCQVx1ODVBOVx1OTZEMVx1NzY5MFx1OUJENlx1NjM0Q1x1OTMwNlx1OUJBQlx1NzZCRlx1NjY1Mlx1NEUwOVx1NTA5OFx1NTNDMlx1NUM3MVx1NjBFOFx1NjQ5Mlx1NjU2M1x1Njg1Rlx1NzFFNlx1NzNDQVx1NzUyM1x1N0I5N1x1N0U4Mlx1ODY5NVx1OEI4M1x1OENEQlx1OTE3OFx1OTkxMFx1NjVBQ1x1NjZBQlx1NkI4Qlx1NEVENVx1NEVENFx1NEYzQVx1NEY3Rlx1NTIzQVx1NTNGOFx1NTNGMlx1NTVFM1x1NTZEQlx1NThFQlx1NTlDQlx1NTlDOVx1NTlGRlx1NUI1MFx1NUM0RFx1NUUwMlx1NUUyQlx1NUZEN1x1NjAxRFx1NjMwN1x1NjUyRlx1NUI1Q1x1NjVBRlx1NjVCRFx1NjVFOFx1Njc5RFx1NkI2MlwiXSxcbltcIjhlODBcIixcIlx1NkI3Qlx1NkMwRlx1NzM0NVx1Nzk0OVx1NzlDMVx1N0NGOFx1N0QxOVx1N0QyQlx1ODBBMlx1ODEwMlx1ODFGM1x1ODk5Nlx1OEE1RVx1OEE2OVx1OEE2Nlx1OEE4Q1x1OEFFRVx1OENDN1x1OENEQ1x1OTZDQ1x1OThGQ1x1NkI2Rlx1NEU4Qlx1NEYzQ1x1NEY4RFx1NTE1MFx1NUI1N1x1NUJGQVx1NjE0OFx1NjMwMVx1NjY0Mlx1NkIyMVx1NkVDQlx1NkNCQlx1NzIzRVx1NzRCRFx1NzVENFx1NzhDMVx1NzkzQVx1ODAwQ1x1ODAzM1x1ODFFQVx1ODQ5NFx1OEY5RVx1NkM1MFx1OUU3Rlx1NUYwRlx1OEI1OFx1OUQyQlx1N0FGQVx1OEVGOFx1NUI4RFx1OTZFQlx1NEUwM1x1NTNGMVx1NTdGN1x1NTkzMVx1NUFDOVx1NUJBNFx1NjA4OVx1NkU3Rlx1NkYwNlx1NzVCRVx1OENFQVx1NUI5Rlx1ODUwMFx1N0JFMFx1NTA3Mlx1NjdGNFx1ODI5RFx1NUM2MVx1ODU0QVx1N0UxRVx1ODIwRVx1NTE5OVx1NUMwNFx1NjM2OFx1OEQ2Nlx1NjU5Q1x1NzE2RVx1NzkzRVx1N0QxN1x1ODAwNVx1OEIxRFx1OEVDQVx1OTA2RVx1ODZDN1x1OTBBQVx1NTAxRlx1NTJGQVx1NUMzQVx1Njc1M1x1NzA3Q1x1NzIzNVx1OTE0Q1x1OTFDOFx1OTMyQlx1ODJFNVx1NUJDMlx1NUYzMVx1NjBGOVx1NEUzQlx1NTNENlx1NUI4OFx1NjI0Qlx1NjczMVx1NkI4QVx1NzJFOVx1NzNFMFx1N0EyRVx1ODE2Qlx1OERBM1x1OTE1Mlx1OTk5Nlx1NTExMlx1NTNEN1x1NTQ2QVx1NUJGRlx1NjM4OFx1NkEzOVx1N0RBQ1x1OTcwMFx1NTZEQVx1NTNDRVx1NTQ2OFwiXSxcbltcIjhmNDBcIixcIlx1NUI5N1x1NUMzMVx1NURERVx1NEZFRVx1NjEwMVx1NjJGRVx1NkQzMlx1NzlDMFx1NzlDQlx1N0Q0Mlx1N0U0RFx1N0ZEMlx1ODFFRFx1ODIxRlx1ODQ5MFx1ODg0Nlx1ODk3Mlx1OEI5MFx1OEU3NFx1OEYyRlx1OTAzMVx1OTE0Qlx1OTE2Q1x1OTZDNlx1OTE5Q1x1NEVDMFx1NEY0Rlx1NTE0NVx1NTM0MVx1NUY5M1x1NjIwRVx1NjdENFx1NkM0MVx1NkUwQlx1NzM2M1x1N0UyNlx1OTFDRFx1OTI4M1x1NTNENFx1NTkxOVx1NUJCRlx1NkREMVx1Nzk1RFx1N0UyRVx1N0M5Qlx1NTg3RVx1NzE5Rlx1NTFGQVx1ODg1M1x1OEZGMFx1NEZDQVx1NUNGQlx1NjYyNVx1NzdBQ1x1N0FFM1x1ODIxQ1x1OTlGRlx1NTFDNlx1NUZBQVx1NjVFQ1x1Njk2Rlx1NkI4OVx1NkRGM1wiXSxcbltcIjhmODBcIixcIlx1NkU5Nlx1NkY2NFx1NzZGRVx1N0QxNFx1NURFMVx1OTA3NVx1OTE4N1x1OTgwNlx1NTFFNlx1NTIxRFx1NjI0MFx1NjY5MVx1NjZEOVx1NkUxQVx1NUVCNlx1N0REMlx1N0Y3Mlx1NjZGOFx1ODVBRlx1ODVGN1x1OEFGOFx1NTJBOVx1NTNEOVx1NTk3M1x1NUU4Rlx1NUY5MFx1NjA1NVx1OTJFNFx1OTY2NFx1NTBCN1x1NTExRlx1NTJERFx1NTMyMFx1NTM0N1x1NTNFQ1x1NTRFOFx1NTU0Nlx1NTUzMVx1NTYxN1x1NTk2OFx1NTlCRVx1NUEzQ1x1NUJCNVx1NUMwNlx1NUMwRlx1NUMxMVx1NUMxQVx1NUU4NFx1NUU4QVx1NUVFMFx1NUY3MFx1NjI3Rlx1NjI4NFx1NjJEQlx1NjM4Q1x1NjM3N1x1NjYwN1x1NjYwQ1x1NjYyRFx1NjY3Nlx1Njc3RVx1NjhBMlx1NkExRlx1NkEzNVx1NkNCQ1x1NkQ4OFx1NkUwOVx1NkU1OFx1NzEzQ1x1NzEyNlx1NzE2N1x1NzVDN1x1NzcwMVx1Nzg1RFx1NzkwMVx1Nzk2NVx1NzlGMFx1N0FFMFx1N0IxMVx1N0NBN1x1N0QzOVx1ODA5Nlx1ODNENlx1ODQ4Qlx1ODU0OVx1ODg1RFx1ODhGM1x1OEExRlx1OEEzQ1x1OEE1NFx1OEE3M1x1OEM2MVx1OENERVx1OTFBNFx1OTI2Nlx1OTM3RVx1OTQxOFx1OTY5Q1x1OTc5OFx1NEUwQVx1NEUwOFx1NEUxRVx1NEU1N1x1NTE5N1x1NTI3MFx1NTdDRVx1NTgzNFx1NThDQ1x1NUIyMlx1NUUzOFx1NjBDNVx1NjRGRVx1Njc2MVx1Njc1Nlx1NkQ0NFx1NzJCNlx1NzU3M1x1N0E2M1x1ODRCOFx1OEI3Mlx1OTFCOFx1OTMyMFx1NTYzMVx1NTdGNFx1OThGRVwiXSxcbltcIjkwNDBcIixcIlx1NjJFRFx1NjkwRFx1NkI5Nlx1NzFFRFx1N0U1NFx1ODA3N1x1ODI3Mlx1ODlFNlx1OThERlx1ODc1NVx1OEZCMVx1NUMzQlx1NEYzOFx1NEZFMVx1NEZCNVx1NTUwN1x1NUEyMFx1NUJERFx1NUJFOVx1NUZDM1x1NjE0RVx1NjMyRlx1NjVCMFx1NjY0Qlx1NjhFRVx1Njk5Qlx1NkQ3OFx1NkRGMVx1NzUzM1x1NzVCOVx1NzcxRlx1Nzk1RVx1NzlFNlx1N0QzM1x1ODFFM1x1ODJBRlx1ODVBQVx1ODlBQVx1OEEzQVx1OEVBQlx1OEY5Qlx1OTAzMlx1OTFERFx1OTcwN1x1NEVCQVx1NEVDMVx1NTIwM1x1NTg3NVx1NThFQ1x1NUMwQlx1NzUxQVx1NUMzRFx1ODE0RVx1OEEwQVx1OEZDNVx1OTY2M1x1OTc2RFx1N0IyNVx1OEFDRlx1OTgwOFx1OTE2Mlx1NTZGM1x1NTNBOFwiXSxcbltcIjkwODBcIixcIlx1OTAxN1x1NTQzOVx1NTc4Mlx1NUUyNVx1NjNBOFx1NkMzNFx1NzA4QVx1Nzc2MVx1N0M4Qlx1N0ZFMFx1ODg3MFx1OTA0Mlx1OTE1NFx1OTMxMFx1OTMxOFx1OTY4Rlx1NzQ1RVx1OUFDNFx1NUQwN1x1NUQ2OVx1NjU3MFx1NjdBMlx1OERBOFx1OTZEQlx1NjM2RVx1Njc0OVx1NjkxOVx1ODNDNVx1OTgxN1x1OTZDMFx1ODhGRVx1NkY4NFx1NjQ3QVx1NUJGOFx1NEUxNlx1NzAyQ1x1NzU1RFx1NjYyRlx1NTFDNFx1NTIzNlx1NTJFMlx1NTlEM1x1NUY4MVx1NjAyN1x1NjIxMFx1NjUzRlx1NjU3NFx1NjYxRlx1NjY3NFx1NjhGMlx1NjgxNlx1NkI2M1x1NkUwNVx1NzI3Mlx1NzUxRlx1NzZEQlx1N0NCRVx1ODA1Nlx1NThGMFx1ODhGRFx1ODk3Rlx1OEFBMFx1OEE5M1x1OEFDQlx1OTAxRFx1OTE5Mlx1OTc1Mlx1OTc1OVx1NjU4OVx1N0EwRVx1ODEwNlx1OTZCQlx1NUUyRFx1NjBEQ1x1NjIxQVx1NjVBNVx1NjYxNFx1Njc5MFx1NzdGM1x1N0E0RFx1N0M0RFx1N0UzRVx1ODEwQVx1OENBQ1x1OEQ2NFx1OERFMVx1OEU1Rlx1NzhBOVx1NTIwN1x1NjJEOVx1NjNBNVx1NjQ0Mlx1NjI5OFx1OEEyRFx1N0E4M1x1N0JDMFx1OEFBQ1x1OTZFQVx1N0Q3Nlx1ODIwQ1x1ODc0OVx1NEVEOVx1NTE0OFx1NTM0M1x1NTM2MFx1NUJBM1x1NUMwMlx1NUMxNlx1NURERFx1NjIyNlx1NjI0N1x1NjRCMFx1NjgxM1x1NjgzNFx1NkNDOVx1NkQ0NVx1NkQxN1x1NjdEM1x1NkY1Q1x1NzE0RVx1NzE3RFx1NjVDQlx1N0E3Rlx1N0JBRFx1N0REQVwiXSxcbltcIjkxNDBcIixcIlx1N0U0QVx1N0ZBOFx1ODE3QVx1ODIxQlx1ODIzOVx1ODVBNlx1OEE2RVx1OENDRVx1OERGNVx1OTA3OFx1OTA3N1x1OTJBRFx1OTI5MVx1OTU4M1x1OUJBRVx1NTI0RFx1NTU4NFx1NkYzOFx1NzEzNlx1NTE2OFx1Nzk4NVx1N0U1NVx1ODFCM1x1N0NDRVx1NTY0Q1x1NTg1MVx1NUNBOFx1NjNBQVx1NjZGRVx1NjZGRFx1Njk1QVx1NzJEOVx1NzU4Rlx1NzU4RVx1NzkwRVx1Nzk1Nlx1NzlERlx1N0M5N1x1N0QyMFx1N0Q0NFx1ODYwN1x1OEEzNFx1OTYzQlx1OTA2MVx1OUYyMFx1NTBFN1x1NTI3NVx1NTNDQ1x1NTNFMlx1NTAwOVx1NTVBQVx1NThFRVx1NTk0Rlx1NzIzRFx1NUI4Qlx1NUM2NFx1NTMxRFx1NjBFM1x1NjBGM1x1NjM1Q1x1NjM4M1x1NjMzRlx1NjNCQlwiXSxcbltcIjkxODBcIixcIlx1NjRDRFx1NjVFOVx1NjZGOVx1NURFM1x1NjlDRFx1NjlGRFx1NkYxNVx1NzFFNVx1NEU4OVx1NzVFOVx1NzZGOFx1N0E5M1x1N0NERlx1N0RDRlx1N0Q5Q1x1ODA2MVx1ODM0OVx1ODM1OFx1ODQ2Q1x1ODRCQ1x1ODVGQlx1ODhDNVx1OEQ3MFx1OTAwMVx1OTA2RFx1OTM5N1x1OTcxQ1x1OUExMlx1NTBDRlx1NTg5N1x1NjE4RVx1ODFEM1x1ODUzNVx1OEQwOFx1OTAyMFx1NEZDM1x1NTA3NFx1NTI0N1x1NTM3M1x1NjA2Rlx1NjM0OVx1Njc1Rlx1NkUyQ1x1OERCM1x1OTAxRlx1NEZEN1x1NUM1RVx1OENDQVx1NjVDRlx1N0Q5QVx1NTM1Mlx1ODg5Nlx1NTE3Nlx1NjNDM1x1NUI1OFx1NUI2Qlx1NUMwQVx1NjQwRFx1Njc1MVx1OTA1Q1x1NEVENlx1NTkxQVx1NTkyQVx1NkM3MFx1OEE1MVx1NTUzRVx1NTgxNVx1NTlBNVx1NjBGMFx1NjI1M1x1NjdDMVx1ODIzNVx1Njk1NVx1OTY0MFx1OTlDNFx1OUEyOFx1NEY1M1x1NTgwNlx1NUJGRVx1ODAxMFx1NUNCMVx1NUUyRlx1NUY4NVx1NjAyMFx1NjE0Qlx1NjIzNFx1NjZGRlx1NkNGMFx1NkVERVx1ODBDRVx1ODE3Rlx1ODJENFx1ODg4Qlx1OENCOFx1OTAwMFx1OTAyRVx1OTY4QVx1OUVEQlx1OUJEQlx1NEVFM1x1NTNGMFx1NTkyN1x1N0IyQ1x1OTE4RFx1OTg0Q1x1OURGOVx1NkVERFx1NzAyN1x1NTM1M1x1NTU0NFx1NUI4NVx1NjI1OFx1NjI5RVx1NjJEM1x1NkNBMlx1NkZFRlx1NzQyMlx1OEExN1x1OTQzOFx1NkZDMVx1OEFGRVx1ODMzOFx1NTFFN1x1ODZGOFx1NTNFQVwiXSxcbltcIjkyNDBcIixcIlx1NTNFOVx1NEY0Nlx1OTA1NFx1OEZCMFx1NTk2QVx1ODEzMVx1NURGRFx1N0FFQVx1OEZCRlx1NjhEQVx1OEMzN1x1NzJGOFx1OUM0OFx1NkEzRFx1OEFCMFx1NEUzOVx1NTM1OFx1NTYwNlx1NTc2Nlx1NjJDNVx1NjNBMlx1NjVFNlx1NkI0RVx1NkRFMVx1NkU1Qlx1NzBBRFx1NzdFRFx1N0FFRlx1N0JBQVx1N0RCQlx1ODAzRFx1ODBDNlx1ODZDQlx1OEE5NVx1OTM1Qlx1NTZFM1x1NThDN1x1NUYzRVx1NjVBRFx1NjY5Nlx1NkE4MFx1NkJCNVx1NzUzN1x1OEFDN1x1NTAyNFx1NzdFNVx1NTczMFx1NUYxQlx1NjA2NVx1NjY3QVx1NkM2MFx1NzVGNFx1N0ExQVx1N0Y2RVx1ODFGNFx1ODcxOFx1OTA0NVx1OTlCM1x1N0JDOVx1NzU1Q1x1N0FGOVx1N0I1MVx1ODRDNFwiXSxcbltcIjkyODBcIixcIlx1OTAxMFx1NzlFOVx1N0E5Mlx1ODMzNlx1NUFFMVx1Nzc0MFx1NEUyRFx1NEVGMlx1NUI5OVx1NUZFMFx1NjJCRFx1NjYzQ1x1NjdGMVx1NkNFOFx1ODY2Qlx1ODg3N1x1OEEzQlx1OTE0RVx1OTJGM1x1OTlEMFx1NkExN1x1NzAyNlx1NzMyQVx1ODJFN1x1ODQ1N1x1OENBRlx1NEUwMVx1NTE0Nlx1NTFDQlx1NTU4Qlx1NUJGNVx1NUUxNlx1NUUzM1x1NUU4MVx1NUYxNFx1NUYzNVx1NUY2Qlx1NUZCNFx1NjFGMlx1NjMxMVx1NjZBMlx1NjcxRFx1NkY2RVx1NzI1Mlx1NzUzQVx1NzczQVx1ODA3NFx1ODEzOVx1ODE3OFx1ODc3Nlx1OEFCRlx1OEFEQ1x1OEQ4NVx1OERGM1x1OTI5QVx1OTU3N1x1OTgwMlx1OUNFNVx1NTJDNVx1NjM1N1x1NzZGNFx1NjcxNVx1NkM4OFx1NzNDRFx1OENDM1x1OTNBRVx1OTY3M1x1NkQyNVx1NTg5Q1x1NjkwRVx1NjlDQ1x1OEZGRFx1OTM5QVx1NzVEQlx1OTAxQVx1NTg1QVx1NjgwMlx1NjNCNFx1NjlGQlx1NEY0M1x1NkYyQ1x1NjdEOFx1OEZCQlx1ODUyNlx1N0RCNFx1OTM1NFx1NjkzRlx1NkY3MFx1NTc2QVx1NThGN1x1NUIyQ1x1N0QyQ1x1NzIyQVx1NTQwQVx1OTFFM1x1OURCNFx1NEVBRFx1NEY0RVx1NTA1Q1x1NTA3NVx1NTI0M1x1OEM5RVx1NTQ0OFx1NTgyNFx1NUI5QVx1NUUxRFx1NUU5NVx1NUVBRFx1NUVGN1x1NUYxRlx1NjA4Q1x1NjJCNVx1NjMzQVx1NjNEMFx1NjhBRlx1NkM0MFx1Nzg4N1x1Nzk4RVx1N0EwQlx1N0RFMFx1ODI0N1x1OEEwMlx1OEFFNlx1OEU0NFx1OTAxM1wiXSxcbltcIjkzNDBcIixcIlx1OTBCOFx1OTEyRFx1OTFEOFx1OUYwRVx1NkNFNVx1NjQ1OFx1NjRFMlx1NjU3NVx1NkVGNFx1NzY4NFx1N0IxQlx1OTA2OVx1OTNEMVx1NkVCQVx1NTRGMlx1NUZCOVx1NjRBNFx1OEY0RFx1OEZFRFx1OTI0NFx1NTE3OFx1NTg2Qlx1NTkyOVx1NUM1NVx1NUU5N1x1NkRGQlx1N0U4Rlx1NzUxQ1x1OENCQ1x1OEVFMlx1OTg1Qlx1NzBCOVx1NEYxRFx1NkJCRlx1NkZCMVx1NzUzMFx1OTZGQlx1NTE0RVx1NTQxMFx1NTgzNVx1NTg1N1x1NTlBQ1x1NUM2MFx1NUY5Mlx1NjU5N1x1Njc1Q1x1NkUyMVx1NzY3Qlx1ODNERlx1OENFRFx1OTAxNFx1OTBGRFx1OTM0RFx1NzgyNVx1NzgzQVx1NTJBQVx1NUVBNlx1NTcxRlx1NTk3NFx1NjAxMlx1NTAxMlx1NTE1QVx1NTFBQ1wiXSxcbltcIjkzODBcIixcIlx1NTFDRFx1NTIwMFx1NTUxMFx1NTg1NFx1NTg1OFx1NTk1N1x1NUI5NVx1NUNGNlx1NUQ4Qlx1NjBCQ1x1NjI5NVx1NjQyRFx1Njc3MVx1Njg0M1x1NjhCQ1x1NjhERlx1NzZEN1x1NkREOFx1NkU2Rlx1NkQ5Qlx1NzA2Rlx1NzFDOFx1NUY1M1x1NzVEOFx1Nzk3N1x1N0I0OVx1N0I1NFx1N0I1Mlx1N0NENlx1N0Q3MVx1NTIzMFx1ODQ2M1x1ODU2OVx1ODVFNFx1OEEwRVx1OEIwNFx1OEM0Nlx1OEUwRlx1OTAwM1x1OTAwRlx1OTQxOVx1OTY3Nlx1OTgyRFx1OUEzMFx1OTVEOFx1NTBDRFx1NTJENVx1NTQwQ1x1NTgwMlx1NUMwRVx1NjFBN1x1NjQ5RVx1NkQxRVx1NzdCM1x1N0FFNVx1ODBGNFx1ODQwNFx1OTA1M1x1OTI4NVx1NUNFMFx1OUQwN1x1NTMzRlx1NUY5N1x1NUZCM1x1NkQ5Q1x1NzI3OVx1Nzc2M1x1NzlCRlx1N0JFNFx1NkJEMlx1NzJFQ1x1OEFBRFx1NjgwM1x1NkE2MVx1NTFGOFx1N0E4MVx1NjkzNFx1NUM0QVx1OUNGNlx1ODJFQlx1NUJDNVx1OTE0OVx1NzAxRVx1NTY3OFx1NUM2Rlx1NjBDN1x1NjU2Nlx1NkM4Q1x1OEM1QVx1OTA0MVx1OTgxM1x1NTQ1MVx1NjZDN1x1OTIwRFx1NTk0OFx1OTBBM1x1NTE4NVx1NEU0RFx1NTFFQVx1ODU5OVx1OEIwRVx1NzA1OFx1NjM3QVx1OTM0Qlx1Njk2Mlx1OTlCNFx1N0UwNFx1NzU3N1x1NTM1N1x1Njk2MFx1OEVERlx1OTZFM1x1NkM1RFx1NEU4Q1x1NUMzQ1x1NUYxMFx1OEZFOVx1NTMwMlx1OENEMVx1ODA4OVx1ODY3OVx1NUVGRlx1NjVFNVx1NEU3M1x1NTE2NVwiXSxcbltcIjk0NDBcIixcIlx1NTk4Mlx1NUMzRlx1OTdFRVx1NEVGQlx1NTk4QVx1NUZDRFx1OEE4RFx1NkZFMVx1NzlCMFx1Nzk2Mlx1NUJFN1x1ODQ3MVx1NzMyQlx1NzFCMVx1NUU3NFx1NUZGNVx1NjM3Qlx1NjQ5QVx1NzFDM1x1N0M5OFx1NEU0M1x1NUVGQ1x1NEU0Qlx1NTdEQ1x1NTZBMlx1NjBBOVx1NkZDM1x1N0QwRFx1ODBGRFx1ODEzM1x1ODFCRlx1OEZCMlx1ODk5N1x1ODZBNFx1NURGNFx1NjI4QVx1NjRBRFx1ODk4N1x1Njc3N1x1NkNFMlx1NkQzRVx1NzQzNlx1NzgzNFx1NUE0Nlx1N0Y3NVx1ODJBRFx1OTlBQ1x1NEZGM1x1NUVDM1x1NjJERFx1NjM5Mlx1NjU1N1x1Njc2Rlx1NzZDM1x1NzI0Q1x1ODBDQ1x1ODBCQVx1OEYyOVx1OTE0RFx1NTAwRFx1NTdGOVx1NUE5Mlx1Njg4NVwiXSxcbltcIjk0ODBcIixcIlx1Njk3M1x1NzE2NFx1NzJGRFx1OENCN1x1NThGMlx1OENFMFx1OTY2QVx1OTAxOVx1ODc3Rlx1NzlFNFx1NzdFN1x1ODQyOVx1NEYyRlx1NTI2NVx1NTM1QVx1NjJDRFx1NjdDRlx1NkNDQVx1NzY3RFx1N0I5NFx1N0M5NVx1ODIzNlx1ODU4NFx1OEZFQlx1NjZERFx1NkYyMFx1NzIwNlx1N0UxQlx1ODNBQlx1OTlDMVx1OUVBNlx1NTFGRFx1N0JCMVx1Nzg3Mlx1N0JCOFx1ODA4N1x1N0I0OFx1NkFFOFx1NUU2MVx1ODA4Q1x1NzU1MVx1NzU2MFx1NTE2Qlx1OTI2Mlx1NkU4Q1x1NzY3QVx1OTE5N1x1OUFFQVx1NEYxMFx1N0Y3MFx1NjI5Q1x1N0I0Rlx1OTVBNVx1OUNFOVx1NTY3QVx1NTg1OVx1ODZFNFx1OTZCQ1x1NEYzNFx1NTIyNFx1NTM0QVx1NTNDRFx1NTNEQlx1NUUwNlx1NjQyQ1x1NjU5MVx1Njc3Rlx1NkMzRVx1NkM0RVx1NzI0OFx1NzJBRlx1NzNFRFx1NzU1NFx1N0U0MVx1ODIyQ1x1ODVFOVx1OENBOVx1N0JDNFx1OTFDNlx1NzE2OVx1OTgxMlx1OThFRlx1NjMzRFx1NjY2OVx1NzU2QVx1NzZFNFx1NzhEMFx1ODU0M1x1ODZFRVx1NTMyQVx1NTM1MVx1NTQyNlx1NTk4M1x1NUU4N1x1NUY3Q1x1NjBCMlx1NjI0OVx1NjI3OVx1NjJBQlx1NjU5MFx1NkJENFx1NkNDQ1x1NzVCMlx1NzZBRVx1Nzg5MVx1NzlEOFx1N0RDQlx1N0Y3N1x1ODBBNVx1ODhBQlx1OEFCOVx1OENCQlx1OTA3Rlx1OTc1RVx1OThEQlx1NkEwQlx1N0MzOFx1NTA5OVx1NUMzRVx1NUZBRVx1Njc4N1x1NkJEOFx1NzQzNVx1NzcwOVx1N0Y4RVwiXSxcbltcIjk1NDBcIixcIlx1OUYzQlx1NjdDQVx1N0ExN1x1NTMzOVx1NzU4Qlx1OUFFRFx1NUY2Nlx1ODE5RFx1ODNGMVx1ODA5OFx1NUYzQ1x1NUZDNVx1NzU2Mlx1N0I0Nlx1OTAzQ1x1Njg2N1x1NTlFQlx1NUE5Qlx1N0QxMFx1NzY3RVx1OEIyQ1x1NEZGNVx1NUY2QVx1NkExOVx1NkMzN1x1NkYwMlx1NzRFMlx1Nzk2OFx1ODg2OFx1OEE1NVx1OEM3OVx1NUVERlx1NjNDRlx1NzVDNVx1NzlEMlx1ODJEN1x1OTMyOFx1OTJGMlx1ODQ5Q1x1ODZFRFx1OUMyRFx1NTRDMVx1NUY2Q1x1NjU4Q1x1NkQ1Q1x1NzAxNVx1OENBN1x1OENEM1x1OTgzQlx1NjU0Rlx1NzRGNlx1NEUwRFx1NEVEOFx1NTdFMFx1NTkyQlx1NUE2Nlx1NUJDQ1x1NTFBOFx1NUUwM1x1NUU5Q1x1NjAxNlx1NjI3Nlx1NjU3N1wiXSxcbltcIjk1ODBcIixcIlx1NjVBN1x1NjY2RVx1NkQ2RVx1NzIzNlx1N0IyNlx1ODE1MFx1ODE5QVx1ODI5OVx1OEI1Q1x1OENBMFx1OENFNlx1OEQ3NFx1OTYxQ1x1OTY0NFx1NEZBRVx1NjRBQlx1NkI2Nlx1ODIxRVx1ODQ2MVx1ODU2QVx1OTBFOFx1NUMwMVx1Njk1M1x1OThBOFx1ODQ3QVx1ODU1N1x1NEYwRlx1NTI2Rlx1NUZBOVx1NUU0NVx1NjcwRFx1Nzk4Rlx1ODE3OVx1ODkwN1x1ODk4Nlx1NkRGNVx1NUYxN1x1NjI1NVx1NkNCOFx1NEVDRlx1NzI2OVx1OUI5Mlx1NTIwNlx1NTQzQlx1NTY3NFx1NThCM1x1NjFBNFx1NjI2RVx1NzExQVx1NTk2RVx1N0M4OVx1N0NERVx1N0QxQlx1OTZGMFx1NjU4N1x1ODA1RVx1NEUxOVx1NEY3NVx1NTE3NVx1NTg0MFx1NUU2M1x1NUU3M1x1NUYwQVx1NjdDNFx1NEUyNlx1ODUzRFx1OTU4OVx1OTY1Qlx1N0M3M1x1OTgwMVx1NTBGQlx1NThDMVx1NzY1Nlx1NzhBN1x1NTIyNVx1NzdBNVx1ODUxMVx1N0I4Nlx1NTA0Rlx1NTkwOVx1NzI0N1x1N0JDN1x1N0RFOFx1OEZCQVx1OEZENFx1OTA0RFx1NEZCRlx1NTJDOVx1NUEyOVx1NUYwMVx1OTdBRFx1NEZERFx1ODIxN1x1OTJFQVx1NTcwM1x1NjM1NVx1NkI2OVx1NzUyQlx1ODhEQ1x1OEYxNFx1N0E0Mlx1NTJERlx1NTg5M1x1NjE1NVx1NjIwQVx1NjZBRVx1NkJDRFx1N0MzRlx1ODNFOVx1NTAyM1x1NEZGOFx1NTMwNVx1NTQ0Nlx1NTgzMVx1NTk0OVx1NUI5RFx1NUNGMFx1NUNFRlx1NUQyOVx1NUU5Nlx1NjJCMVx1NjM2N1x1NjUzRVx1NjVCOVx1NjcwQlwiXSxcbltcIjk2NDBcIixcIlx1NkNENVx1NkNFMVx1NzBGOVx1NzgzMlx1N0UyQlx1ODBERVx1ODJCM1x1ODQwQ1x1ODRFQ1x1ODcwMlx1ODkxMlx1OEEyQVx1OEM0QVx1OTBBNlx1OTJEMlx1OThGRFx1OUNGM1x1OUQ2Q1x1NEU0Rlx1NEVBMVx1NTA4RFx1NTI1Nlx1NTc0QVx1NTlBOFx1NUUzRFx1NUZEOFx1NUZEOVx1NjIzRlx1NjZCNFx1NjcxQlx1NjdEMFx1NjhEMlx1NTE5Mlx1N0QyMVx1ODBBQVx1ODFBOFx1OEIwMFx1OEM4Q1x1OENCRlx1OTI3RVx1OTYzMlx1NTQyMFx1OTgyQ1x1NTMxN1x1NTBENVx1NTM1Q1x1NThBOFx1NjRCMlx1NjczNFx1NzI2N1x1Nzc2Nlx1N0E0Nlx1OTFFNlx1NTJDM1x1NkNBMVx1NkI4Nlx1NTgwMFx1NUU0Q1x1NTk1NFx1NjcyQ1x1N0ZGQlx1NTFFMVx1NzZDNlwiXSxcbltcIjk2ODBcIixcIlx1NjQ2OVx1NzhFOFx1OUI1NFx1OUVCQlx1NTdDQlx1NTlCOVx1NjYyN1x1Njc5QVx1NkJDRVx1NTRFOVx1NjlEOVx1NUU1NVx1ODE5Q1x1Njc5NVx1OUJBQVx1NjdGRVx1OUM1Mlx1Njg1RFx1NEVBNlx1NEZFM1x1NTNDOFx1NjJCOVx1NjcyQlx1NkNBQlx1OEZDNFx1NEZBRFx1N0U2RFx1OUVCRlx1NEUwN1x1NjE2Mlx1NkU4MFx1NkYyQlx1ODUxM1x1NTQ3M1x1NjcyQVx1OUI0NVx1NURGM1x1N0I5NVx1NUNBQ1x1NUJDNlx1ODcxQ1x1NkU0QVx1ODREMVx1N0ExNFx1ODEwOFx1NTk5OVx1N0M4RFx1NkMxMVx1NzcyMFx1NTJEOVx1NTkyMlx1NzEyMVx1NzI1Rlx1NzdEQlx1OTcyN1x1OUQ2MVx1NjkwQlx1NUE3Rlx1NUExOFx1NTFBNVx1NTQwRFx1NTQ3RFx1NjYwRVx1NzZERlx1OEZGN1x1OTI5OFx1OUNGNFx1NTlFQVx1NzI1RFx1NkVDNVx1NTE0RFx1NjhDOVx1N0RCRlx1N0RFQ1x1OTc2Mlx1OUVCQVx1NjQ3OFx1NkEyMVx1ODMwMlx1NTk4NFx1NUI1Rlx1NkJEQlx1NzMxQlx1NzZGMlx1N0RCMlx1ODAxN1x1ODQ5OVx1NTEzMlx1NjcyOFx1OUVEOVx1NzZFRVx1Njc2Mlx1NTJGRlx1OTkwNVx1NUMyNFx1NjIzQlx1N0M3RVx1OENCMFx1NTU0Rlx1NjBCNlx1N0QwQlx1OTU4MFx1NTMwMVx1NEU1Rlx1NTFCNlx1NTkxQ1x1NzIzQVx1ODAzNlx1OTFDRVx1NUYyNVx1NzdFMlx1NTM4NFx1NUY3OVx1N0QwNFx1ODVBQ1x1OEEzM1x1OEU4RFx1OTc1Nlx1NjdGM1x1ODVBRVx1OTQ1M1x1NjEwOVx1NjEwOFx1NkNCOVx1NzY1MlwiXSxcbltcIjk3NDBcIixcIlx1OEFFRFx1OEYzOFx1NTUyRlx1NEY1MVx1NTEyQVx1NTJDN1x1NTNDQlx1NUJBNVx1NUU3RFx1NjBBMFx1NjE4Mlx1NjNENlx1NjcwOVx1NjdEQVx1NkU2N1x1NkQ4Q1x1NzMzNlx1NzMzN1x1NzUzMVx1Nzk1MFx1ODhENVx1OEE5OFx1OTA0QVx1OTA5MVx1OTBGNVx1OTZDNFx1ODc4RFx1NTkxNVx1NEU4OFx1NEY1OVx1NEUwRVx1OEE4OVx1OEYzRlx1OTgxMFx1NTBBRFx1NUU3Q1x1NTk5Nlx1NUJCOVx1NUVCOFx1NjNEQVx1NjNGQVx1NjRDMVx1NjZEQ1x1Njk0QVx1NjlEOFx1NkQwQlx1NkVCNlx1NzE5NFx1NzUyOFx1N0FBRlx1N0Y4QVx1ODAwMFx1ODQ0OVx1ODRDOVx1ODk4MVx1OEIyMVx1OEUwQVx1OTA2NVx1OTY3RFx1OTkwQVx1NjE3RVx1NjI5MVx1NkIzMlwiXSxcbltcIjk3ODBcIixcIlx1NkM4M1x1NkQ3NFx1N0ZDQ1x1N0ZGQ1x1NkRDMFx1N0Y4NVx1ODdCQVx1ODhGOFx1Njc2NVx1ODNCMVx1OTgzQ1x1OTZGN1x1NkQxQlx1N0Q2MVx1ODQzRFx1OTE2QVx1NEU3MVx1NTM3NVx1NUQ1MFx1NkIwNFx1NkZFQlx1ODVDRFx1ODYyRFx1ODlBN1x1NTIyOVx1NTQwRlx1NUM2NVx1Njc0RVx1NjhBOFx1NzQwNlx1NzQ4M1x1NzVFMlx1ODhDRlx1ODhFMVx1OTFDQ1x1OTZFMlx1OTY3OFx1NUY4Qlx1NzM4N1x1N0FDQlx1ODQ0RVx1NjNBMFx1NzU2NVx1NTI4OVx1NkQ0MVx1NkU5Q1x1NzQwOVx1NzU1OVx1Nzg2Qlx1N0M5Mlx1OTY4Nlx1N0FEQ1x1OUY4RFx1NEZCNlx1NjE2RVx1NjVDNVx1ODY1Q1x1NEU4Nlx1NEVBRVx1NTBEQVx1NEUyMVx1NTFDQ1x1NUJFRVx1NjU5OVx1Njg4MVx1NkRCQ1x1NzMxRlx1NzY0Mlx1NzdBRFx1N0ExQ1x1N0NFN1x1ODI2Rlx1OEFEMlx1OTA3Q1x1OTFDRlx1OTY3NVx1OTgxOFx1NTI5Qlx1N0REMVx1NTAyQlx1NTM5OFx1Njc5N1x1NkRDQlx1NzFEMFx1NzQzM1x1ODFFOFx1OEYyQVx1OTZBM1x1OUM1N1x1OUU5Rlx1NzQ2MFx1NTg0MVx1NkQ5OVx1N0QyRlx1OTg1RVx1NEVFNFx1NEYzNlx1NEY4Qlx1NTFCN1x1NTJCMVx1NURCQVx1NjAxQ1x1NzNCMlx1NzkzQ1x1ODJEM1x1OTIzNFx1OTZCN1x1OTZGNlx1OTcwQVx1OUU5N1x1OUY2Mlx1NjZBNlx1NkI3NFx1NTIxN1x1NTJBM1x1NzBDOFx1ODhDMlx1NUVDOVx1NjA0Qlx1NjE5MFx1NkYyM1x1NzE0OVx1N0MzRVx1N0RGNFx1ODA2RlwiXSxcbltcIjk4NDBcIixcIlx1ODRFRVx1OTAyM1x1OTMyQ1x1NTQ0Mlx1OUI2Rlx1NkFEM1x1NzA4OVx1OENDMlx1OERFRlx1OTczMlx1NTJCNFx1NUE0MVx1NUVDQVx1NUYwNFx1NjcxN1x1Njk3Q1x1Njk5NFx1NkQ2QVx1NkYwRlx1NzI2Mlx1NzJGQ1x1N0JFRFx1ODAwMVx1ODA3RVx1ODc0Qlx1OTBDRVx1NTE2RFx1OUU5M1x1Nzk4NFx1ODA4Qlx1OTMzMlx1OEFENlx1NTAyRFx1NTQ4Q1x1OEE3MVx1NkI2QVx1OENDNFx1ODEwN1x1NjBEMVx1NjdBMFx1OURGMlx1NEU5OVx1NEU5OFx1OUMxMFx1OEE2Qlx1ODVDMVx1ODU2OFx1NjkwMFx1NkU3RVx1Nzg5N1x1ODE1NVwiXSxcbltcIjk4OWZcIixcIlx1NUYwQ1x1NEUxMFx1NEUxNVx1NEUyQVx1NEUzMVx1NEUzNlx1NEUzQ1x1NEUzRlx1NEU0Mlx1NEU1Nlx1NEU1OFx1NEU4Mlx1NEU4NVx1OEM2Qlx1NEU4QVx1ODIxMlx1NUYwRFx1NEU4RVx1NEU5RVx1NEU5Rlx1NEVBMFx1NEVBMlx1NEVCMFx1NEVCM1x1NEVCNlx1NEVDRVx1NEVDRFx1NEVDNFx1NEVDNlx1NEVDMlx1NEVEN1x1NEVERVx1NEVFRFx1NEVERlx1NEVGN1x1NEYwOVx1NEY1QVx1NEYzMFx1NEY1Qlx1NEY1RFx1NEY1N1x1NEY0N1x1NEY3Nlx1NEY4OFx1NEY4Rlx1NEY5OFx1NEY3Qlx1NEY2OVx1NEY3MFx1NEY5MVx1NEY2Rlx1NEY4Nlx1NEY5Nlx1NTExOFx1NEZENFx1NEZERlx1NEZDRVx1NEZEOFx1NEZEQlx1NEZEMVx1NEZEQVx1NEZEMFx1NEZFNFx1NEZFNVx1NTAxQVx1NTAyOFx1NTAxNFx1NTAyQVx1NTAyNVx1NTAwNVx1NEYxQ1x1NEZGNlx1NTAyMVx1NTAyOVx1NTAyQ1x1NEZGRVx1NEZFRlx1NTAxMVx1NTAwNlx1NTA0M1x1NTA0N1x1NjcwM1x1NTA1NVx1NTA1MFx1NTA0OFx1NTA1QVx1NTA1Nlx1NTA2Q1x1NTA3OFx1NTA4MFx1NTA5QVx1NTA4NVx1NTBCNFx1NTBCMlwiXSxcbltcIjk5NDBcIixcIlx1NTBDOVx1NTBDQVx1NTBCM1x1NTBDMlx1NTBENlx1NTBERVx1NTBFNVx1NTBFRFx1NTBFM1x1NTBFRVx1NTBGOVx1NTBGNVx1NTEwOVx1NTEwMVx1NTEwMlx1NTExNlx1NTExNVx1NTExNFx1NTExQVx1NTEyMVx1NTEzQVx1NTEzN1x1NTEzQ1x1NTEzQlx1NTEzRlx1NTE0MFx1NTE1Mlx1NTE0Q1x1NTE1NFx1NTE2Mlx1N0FGOFx1NTE2OVx1NTE2QVx1NTE2RVx1NTE4MFx1NTE4Mlx1NTZEOFx1NTE4Q1x1NTE4OVx1NTE4Rlx1NTE5MVx1NTE5M1x1NTE5NVx1NTE5Nlx1NTFBNFx1NTFBNlx1NTFBMlx1NTFBOVx1NTFBQVx1NTFBQlx1NTFCM1x1NTFCMVx1NTFCMlx1NTFCMFx1NTFCNVx1NTFCRFx1NTFDNVx1NTFDOVx1NTFEQlx1NTFFMFx1ODY1NVx1NTFFOVx1NTFFRFwiXSxcbltcIjk5ODBcIixcIlx1NTFGMFx1NTFGNVx1NTFGRVx1NTIwNFx1NTIwQlx1NTIxNFx1NTIwRVx1NTIyN1x1NTIyQVx1NTIyRVx1NTIzM1x1NTIzOVx1NTI0Rlx1NTI0NFx1NTI0Qlx1NTI0Q1x1NTI1RVx1NTI1NFx1NTI2QVx1NTI3NFx1NTI2OVx1NTI3M1x1NTI3Rlx1NTI3RFx1NTI4RFx1NTI5NFx1NTI5Mlx1NTI3MVx1NTI4OFx1NTI5MVx1OEZBOFx1OEZBN1x1NTJBQ1x1NTJBRFx1NTJCQ1x1NTJCNVx1NTJDMVx1NTJDRFx1NTJEN1x1NTJERVx1NTJFM1x1NTJFNlx1OThFRFx1NTJFMFx1NTJGM1x1NTJGNVx1NTJGOFx1NTJGOVx1NTMwNlx1NTMwOFx1NzUzOFx1NTMwRFx1NTMxMFx1NTMwRlx1NTMxNVx1NTMxQVx1NTMyM1x1NTMyRlx1NTMzMVx1NTMzM1x1NTMzOFx1NTM0MFx1NTM0Nlx1NTM0NVx1NEUxN1x1NTM0OVx1NTM0RFx1NTFENlx1NTM1RVx1NTM2OVx1NTM2RVx1NTkxOFx1NTM3Qlx1NTM3N1x1NTM4Mlx1NTM5Nlx1NTNBMFx1NTNBNlx1NTNBNVx1NTNBRVx1NTNCMFx1NTNCNlx1NTNDM1x1N0MxMlx1OTZEOVx1NTNERlx1NjZGQ1x1NzFFRVx1NTNFRVx1NTNFOFx1NTNFRFx1NTNGQVx1NTQwMVx1NTQzRFx1NTQ0MFx1NTQyQ1x1NTQyRFx1NTQzQ1x1NTQyRVx1NTQzNlx1NTQyOVx1NTQxRFx1NTQ0RVx1NTQ4Rlx1NTQ3NVx1NTQ4RVx1NTQ1Rlx1NTQ3MVx1NTQ3N1x1NTQ3MFx1NTQ5Mlx1NTQ3Qlx1NTQ4MFx1NTQ3Nlx1NTQ4NFx1NTQ5MFx1NTQ4Nlx1NTRDN1x1NTRBMlx1NTRCOFx1NTRBNVx1NTRBQ1x1NTRDNFx1NTRDOFx1NTRBOFwiXSxcbltcIjlhNDBcIixcIlx1NTRBQlx1NTRDMlx1NTRBNFx1NTRCRVx1NTRCQ1x1NTREOFx1NTRFNVx1NTRFNlx1NTUwRlx1NTUxNFx1NTRGRFx1NTRFRVx1NTRFRFx1NTRGQVx1NTRFMlx1NTUzOVx1NTU0MFx1NTU2M1x1NTU0Q1x1NTUyRVx1NTU1Q1x1NTU0NVx1NTU1Nlx1NTU1N1x1NTUzOFx1NTUzM1x1NTU1RFx1NTU5OVx1NTU4MFx1NTRBRlx1NTU4QVx1NTU5Rlx1NTU3Qlx1NTU3RVx1NTU5OFx1NTU5RVx1NTVBRVx1NTU3Q1x1NTU4M1x1NTVBOVx1NTU4N1x1NTVBOFx1NTVEQVx1NTVDNVx1NTVERlx1NTVDNFx1NTVEQ1x1NTVFNFx1NTVENFx1NTYxNFx1NTVGN1x1NTYxNlx1NTVGRVx1NTVGRFx1NTYxQlx1NTVGOVx1NTY0RVx1NTY1MFx1NzFERlx1NTYzNFx1NTYzNlx1NTYzMlx1NTYzOFwiXSxcbltcIjlhODBcIixcIlx1NTY2Qlx1NTY2NFx1NTYyRlx1NTY2Q1x1NTY2QVx1NTY4Nlx1NTY4MFx1NTY4QVx1NTZBMFx1NTY5NFx1NTY4Rlx1NTZBNVx1NTZBRVx1NTZCNlx1NTZCNFx1NTZDMlx1NTZCQ1x1NTZDMVx1NTZDM1x1NTZDMFx1NTZDOFx1NTZDRVx1NTZEMVx1NTZEM1x1NTZEN1x1NTZFRVx1NTZGOVx1NTcwMFx1NTZGRlx1NTcwNFx1NTcwOVx1NTcwOFx1NTcwQlx1NTcwRFx1NTcxM1x1NTcxOFx1NTcxNlx1NTVDN1x1NTcxQ1x1NTcyNlx1NTczN1x1NTczOFx1NTc0RVx1NTczQlx1NTc0MFx1NTc0Rlx1NTc2OVx1NTdDMFx1NTc4OFx1NTc2MVx1NTc3Rlx1NTc4OVx1NTc5M1x1NTdBMFx1NTdCM1x1NTdBNFx1NTdBQVx1NTdCMFx1NTdDM1x1NTdDNlx1NTdENFx1NTdEMlx1NTdEM1x1NTgwQVx1NTdENlx1NTdFM1x1NTgwQlx1NTgxOVx1NTgxRFx1NTg3Mlx1NTgyMVx1NTg2Mlx1NTg0Qlx1NTg3MFx1NkJDMFx1NTg1Mlx1NTgzRFx1NTg3OVx1NTg4NVx1NThCOVx1NTg5Rlx1NThBQlx1NThCQVx1NThERVx1NThCQlx1NThCOFx1NThBRVx1NThDNVx1NThEM1x1NThEMVx1NThEN1x1NThEOVx1NThEOFx1NThFNVx1NThEQ1x1NThFNFx1NThERlx1NThFRlx1NThGQVx1NThGOVx1NThGQlx1NThGQ1x1NThGRFx1NTkwMlx1NTkwQVx1NTkxMFx1NTkxQlx1NjhBNlx1NTkyNVx1NTkyQ1x1NTkyRFx1NTkzMlx1NTkzOFx1NTkzRVx1N0FEMlx1NTk1NVx1NTk1MFx1NTk0RVx1NTk1QVx1NTk1OFx1NTk2Mlx1NTk2MFx1NTk2N1x1NTk2Q1x1NTk2OVwiXSxcbltcIjliNDBcIixcIlx1NTk3OFx1NTk4MVx1NTk5RFx1NEY1RVx1NEZBQlx1NTlBM1x1NTlCMlx1NTlDNlx1NTlFOFx1NTlEQ1x1NTk4RFx1NTlEOVx1NTlEQVx1NUEyNVx1NUExRlx1NUExMVx1NUExQ1x1NUEwOVx1NUExQVx1NUE0MFx1NUE2Q1x1NUE0OVx1NUEzNVx1NUEzNlx1NUE2Mlx1NUE2QVx1NUE5QVx1NUFCQ1x1NUFCRVx1NUFDQlx1NUFDMlx1NUFCRFx1NUFFM1x1NUFEN1x1NUFFNlx1NUFFOVx1NUFENlx1NUFGQVx1NUFGQlx1NUIwQ1x1NUIwQlx1NUIxNlx1NUIzMlx1NUFEMFx1NUIyQVx1NUIzNlx1NUIzRVx1NUI0M1x1NUI0NVx1NUI0MFx1NUI1MVx1NUI1NVx1NUI1QVx1NUI1Qlx1NUI2NVx1NUI2OVx1NUI3MFx1NUI3M1x1NUI3NVx1NUI3OFx1NjU4OFx1NUI3QVx1NUI4MFwiXSxcbltcIjliODBcIixcIlx1NUI4M1x1NUJBNlx1NUJCOFx1NUJDM1x1NUJDN1x1NUJDOVx1NUJENFx1NUJEMFx1NUJFNFx1NUJFNlx1NUJFMlx1NUJERVx1NUJFNVx1NUJFQlx1NUJGMFx1NUJGNlx1NUJGM1x1NUMwNVx1NUMwN1x1NUMwOFx1NUMwRFx1NUMxM1x1NUMyMFx1NUMyMlx1NUMyOFx1NUMzOFx1NUMzOVx1NUM0MVx1NUM0Nlx1NUM0RVx1NUM1M1x1NUM1MFx1NUM0Rlx1NUI3MVx1NUM2Q1x1NUM2RVx1NEU2Mlx1NUM3Nlx1NUM3OVx1NUM4Q1x1NUM5MVx1NUM5NFx1NTk5Qlx1NUNBQlx1NUNCQlx1NUNCNlx1NUNCQ1x1NUNCN1x1NUNDNVx1NUNCRVx1NUNDN1x1NUNEOVx1NUNFOVx1NUNGRFx1NUNGQVx1NUNFRFx1NUQ4Q1x1NUNFQVx1NUQwQlx1NUQxNVx1NUQxN1x1NUQ1Q1x1NUQxRlx1NUQxQlx1NUQxMVx1NUQxNFx1NUQyMlx1NUQxQVx1NUQxOVx1NUQxOFx1NUQ0Q1x1NUQ1Mlx1NUQ0RVx1NUQ0Qlx1NUQ2Q1x1NUQ3M1x1NUQ3Nlx1NUQ4N1x1NUQ4NFx1NUQ4Mlx1NURBMlx1NUQ5RFx1NURBQ1x1NURBRVx1NURCRFx1NUQ5MFx1NURCN1x1NURCQ1x1NURDOVx1NURDRFx1NUREM1x1NUREMlx1NURENlx1NUREQlx1NURFQlx1NURGMlx1NURGNVx1NUUwQlx1NUUxQVx1NUUxOVx1NUUxMVx1NUUxQlx1NUUzNlx1NUUzN1x1NUU0NFx1NUU0M1x1NUU0MFx1NUU0RVx1NUU1N1x1NUU1NFx1NUU1Rlx1NUU2Mlx1NUU2NFx1NUU0N1x1NUU3NVx1NUU3Nlx1NUU3QVx1OUVCQ1x1NUU3Rlx1NUVBMFx1NUVDMVx1NUVDMlx1NUVDOFx1NUVEMFx1NUVDRlwiXSxcbltcIjljNDBcIixcIlx1NUVENlx1NUVFM1x1NUVERFx1NUVEQVx1NUVEQlx1NUVFMlx1NUVFMVx1NUVFOFx1NUVFOVx1NUVFQ1x1NUVGMVx1NUVGM1x1NUVGMFx1NUVGNFx1NUVGOFx1NUVGRVx1NUYwM1x1NUYwOVx1NUY1RFx1NUY1Q1x1NUYwQlx1NUYxMVx1NUYxNlx1NUYyOVx1NUYyRFx1NUYzOFx1NUY0MVx1NUY0OFx1NUY0Q1x1NUY0RVx1NUYyRlx1NUY1MVx1NUY1Nlx1NUY1N1x1NUY1OVx1NUY2MVx1NUY2RFx1NUY3M1x1NUY3N1x1NUY4M1x1NUY4Mlx1NUY3Rlx1NUY4QVx1NUY4OFx1NUY5MVx1NUY4N1x1NUY5RVx1NUY5OVx1NUY5OFx1NUZBMFx1NUZBOFx1NUZBRFx1NUZCQ1x1NUZENlx1NUZGQlx1NUZFNFx1NUZGOFx1NUZGMVx1NUZERFx1NjBCM1x1NUZGRlx1NjAyMVx1NjA2MFwiXSxcbltcIjljODBcIixcIlx1NjAxOVx1NjAxMFx1NjAyOVx1NjAwRVx1NjAzMVx1NjAxQlx1NjAxNVx1NjAyQlx1NjAyNlx1NjAwRlx1NjAzQVx1NjA1QVx1NjA0MVx1NjA2QVx1NjA3N1x1NjA1Rlx1NjA0QVx1NjA0Nlx1NjA0RFx1NjA2M1x1NjA0M1x1NjA2NFx1NjA0Mlx1NjA2Q1x1NjA2Qlx1NjA1OVx1NjA4MVx1NjA4RFx1NjBFN1x1NjA4M1x1NjA5QVx1NjA4NFx1NjA5Qlx1NjA5Nlx1NjA5N1x1NjA5Mlx1NjBBN1x1NjA4Qlx1NjBFMVx1NjBCOFx1NjBFMFx1NjBEM1x1NjBCNFx1NUZGMFx1NjBCRFx1NjBDNlx1NjBCNVx1NjBEOFx1NjE0RFx1NjExNVx1NjEwNlx1NjBGNlx1NjBGN1x1NjEwMFx1NjBGNFx1NjBGQVx1NjEwM1x1NjEyMVx1NjBGQlx1NjBGMVx1NjEwRFx1NjEwRVx1NjE0N1x1NjEzRVx1NjEyOFx1NjEyN1x1NjE0QVx1NjEzRlx1NjEzQ1x1NjEyQ1x1NjEzNFx1NjEzRFx1NjE0Mlx1NjE0NFx1NjE3M1x1NjE3N1x1NjE1OFx1NjE1OVx1NjE1QVx1NjE2Qlx1NjE3NFx1NjE2Rlx1NjE2NVx1NjE3MVx1NjE1Rlx1NjE1RFx1NjE1M1x1NjE3NVx1NjE5OVx1NjE5Nlx1NjE4N1x1NjFBQ1x1NjE5NFx1NjE5QVx1NjE4QVx1NjE5MVx1NjFBQlx1NjFBRVx1NjFDQ1x1NjFDQVx1NjFDOVx1NjFGN1x1NjFDOFx1NjFDM1x1NjFDNlx1NjFCQVx1NjFDQlx1N0Y3OVx1NjFDRFx1NjFFNlx1NjFFM1x1NjFGNlx1NjFGQVx1NjFGNFx1NjFGRlx1NjFGRFx1NjFGQ1x1NjFGRVx1NjIwMFx1NjIwOFx1NjIwOVx1NjIwRFx1NjIwQ1x1NjIxNFx1NjIxQlwiXSxcbltcIjlkNDBcIixcIlx1NjIxRVx1NjIyMVx1NjIyQVx1NjIyRVx1NjIzMFx1NjIzMlx1NjIzM1x1NjI0MVx1NjI0RVx1NjI1RVx1NjI2M1x1NjI1Qlx1NjI2MFx1NjI2OFx1NjI3Q1x1NjI4Mlx1NjI4OVx1NjI3RVx1NjI5Mlx1NjI5M1x1NjI5Nlx1NjJENFx1NjI4M1x1NjI5NFx1NjJEN1x1NjJEMVx1NjJCQlx1NjJDRlx1NjJGRlx1NjJDNlx1NjRENFx1NjJDOFx1NjJEQ1x1NjJDQ1x1NjJDQVx1NjJDMlx1NjJDN1x1NjI5Qlx1NjJDOVx1NjMwQ1x1NjJFRVx1NjJGMVx1NjMyN1x1NjMwMlx1NjMwOFx1NjJFRlx1NjJGNVx1NjM1MFx1NjMzRVx1NjM0RFx1NjQxQ1x1NjM0Rlx1NjM5Nlx1NjM4RVx1NjM4MFx1NjNBQlx1NjM3Nlx1NjNBM1x1NjM4Rlx1NjM4OVx1NjM5Rlx1NjNCNVx1NjM2QlwiXSxcbltcIjlkODBcIixcIlx1NjM2OVx1NjNCRVx1NjNFOVx1NjNDMFx1NjNDNlx1NjNFM1x1NjNDOVx1NjNEMlx1NjNGNlx1NjNDNFx1NjQxNlx1NjQzNFx1NjQwNlx1NjQxM1x1NjQyNlx1NjQzNlx1NjUxRFx1NjQxN1x1NjQyOFx1NjQwRlx1NjQ2N1x1NjQ2Rlx1NjQ3Nlx1NjQ0RVx1NjUyQVx1NjQ5NVx1NjQ5M1x1NjRBNVx1NjRBOVx1NjQ4OFx1NjRCQ1x1NjREQVx1NjREMlx1NjRDNVx1NjRDN1x1NjRCQlx1NjREOFx1NjRDMlx1NjRGMVx1NjRFN1x1ODIwOVx1NjRFMFx1NjRFMVx1NjJBQ1x1NjRFM1x1NjRFRlx1NjUyQ1x1NjRGNlx1NjRGNFx1NjRGMlx1NjRGQVx1NjUwMFx1NjRGRFx1NjUxOFx1NjUxQ1x1NjUwNVx1NjUyNFx1NjUyM1x1NjUyQlx1NjUzNFx1NjUzNVx1NjUzN1x1NjUzNlx1NjUzOFx1NzU0Qlx1NjU0OFx1NjU1Nlx1NjU1NVx1NjU0RFx1NjU1OFx1NjU1RVx1NjU1RFx1NjU3Mlx1NjU3OFx1NjU4Mlx1NjU4M1x1OEI4QVx1NjU5Qlx1NjU5Rlx1NjVBQlx1NjVCN1x1NjVDM1x1NjVDNlx1NjVDMVx1NjVDNFx1NjVDQ1x1NjVEMlx1NjVEQlx1NjVEOVx1NjVFMFx1NjVFMVx1NjVGMVx1Njc3Mlx1NjYwQVx1NjYwM1x1NjVGQlx1Njc3M1x1NjYzNVx1NjYzNlx1NjYzNFx1NjYxQ1x1NjY0Rlx1NjY0NFx1NjY0OVx1NjY0MVx1NjY1RVx1NjY1RFx1NjY2NFx1NjY2N1x1NjY2OFx1NjY1Rlx1NjY2Mlx1NjY3MFx1NjY4M1x1NjY4OFx1NjY4RVx1NjY4OVx1NjY4NFx1NjY5OFx1NjY5RFx1NjZDMVx1NjZCOVx1NjZDOVx1NjZCRVx1NjZCQ1wiXSxcbltcIjllNDBcIixcIlx1NjZDNFx1NjZCOFx1NjZENlx1NjZEQVx1NjZFMFx1NjYzRlx1NjZFNlx1NjZFOVx1NjZGMFx1NjZGNVx1NjZGN1x1NjcwRlx1NjcxNlx1NjcxRVx1NjcyNlx1NjcyN1x1OTczOFx1NjcyRVx1NjczRlx1NjczNlx1Njc0MVx1NjczOFx1NjczN1x1Njc0Nlx1Njc1RVx1Njc2MFx1Njc1OVx1Njc2M1x1Njc2NFx1Njc4OVx1Njc3MFx1NjdBOVx1Njc3Q1x1Njc2QVx1Njc4Q1x1Njc4Qlx1NjdBNlx1NjdBMVx1Njc4NVx1NjdCN1x1NjdFRlx1NjdCNFx1NjdFQ1x1NjdCM1x1NjdFOVx1NjdCOFx1NjdFNFx1NjdERVx1NjdERFx1NjdFMlx1NjdFRVx1NjdCOVx1NjdDRVx1NjdDNlx1NjdFN1x1NkE5Q1x1NjgxRVx1Njg0Nlx1NjgyOVx1Njg0MFx1Njg0RFx1NjgzMlx1Njg0RVwiXSxcbltcIjllODBcIixcIlx1NjhCM1x1NjgyQlx1Njg1OVx1Njg2M1x1Njg3N1x1Njg3Rlx1Njg5Rlx1Njg4Rlx1NjhBRFx1Njg5NFx1Njg5RFx1Njg5Qlx1Njg4M1x1NkFBRVx1NjhCOVx1Njg3NFx1NjhCNVx1NjhBMFx1NjhCQVx1NjkwRlx1Njg4RFx1Njg3RVx1NjkwMVx1NjhDQVx1NjkwOFx1NjhEOFx1NjkyMlx1NjkyNlx1NjhFMVx1NjkwQ1x1NjhDRFx1NjhENFx1NjhFN1x1NjhENVx1NjkzNlx1NjkxMlx1NjkwNFx1NjhEN1x1NjhFM1x1NjkyNVx1NjhGOVx1NjhFMFx1NjhFRlx1NjkyOFx1NjkyQVx1NjkxQVx1NjkyM1x1NjkyMVx1NjhDNlx1Njk3OVx1Njk3N1x1Njk1Q1x1Njk3OFx1Njk2Qlx1Njk1NFx1Njk3RVx1Njk2RVx1NjkzOVx1Njk3NFx1NjkzRFx1Njk1OVx1NjkzMFx1Njk2MVx1Njk1RVx1Njk1RFx1Njk4MVx1Njk2QVx1NjlCMlx1NjlBRVx1NjlEMFx1NjlCRlx1NjlDMVx1NjlEM1x1NjlCRVx1NjlDRVx1NUJFOFx1NjlDQVx1NjlERFx1NjlCQlx1NjlDM1x1NjlBN1x1NkEyRVx1Njk5MVx1NjlBMFx1Njk5Q1x1Njk5NVx1NjlCNFx1NjlERVx1NjlFOFx1NkEwMlx1NkExQlx1NjlGRlx1NkIwQVx1NjlGOVx1NjlGMlx1NjlFN1x1NkEwNVx1NjlCMVx1NkExRVx1NjlFRFx1NkExNFx1NjlFQlx1NkEwQVx1NkExMlx1NkFDMVx1NkEyM1x1NkExM1x1NkE0NFx1NkEwQ1x1NkE3Mlx1NkEzNlx1NkE3OFx1NkE0N1x1NkE2Mlx1NkE1OVx1NkE2Nlx1NkE0OFx1NkEzOFx1NkEyMlx1NkE5MFx1NkE4RFx1NkFBMFx1NkE4NFx1NkFBMlx1NkFBM1wiXSxcbltcIjlmNDBcIixcIlx1NkE5N1x1ODYxN1x1NkFCQlx1NkFDM1x1NkFDMlx1NkFCOFx1NkFCM1x1NkFBQ1x1NkFERVx1NkFEMVx1NkFERlx1NkFBQVx1NkFEQVx1NkFFQVx1NkFGQlx1NkIwNVx1ODYxNlx1NkFGQVx1NkIxMlx1NkIxNlx1OUIzMVx1NkIxRlx1NkIzOFx1NkIzN1x1NzZEQ1x1NkIzOVx1OThFRVx1NkI0N1x1NkI0M1x1NkI0OVx1NkI1MFx1NkI1OVx1NkI1NFx1NkI1Qlx1NkI1Rlx1NkI2MVx1NkI3OFx1NkI3OVx1NkI3Rlx1NkI4MFx1NkI4NFx1NkI4M1x1NkI4RFx1NkI5OFx1NkI5NVx1NkI5RVx1NkJBNFx1NkJBQVx1NkJBQlx1NkJBRlx1NkJCMlx1NkJCMVx1NkJCM1x1NkJCN1x1NkJCQ1x1NkJDNlx1NkJDQlx1NkJEM1x1NkJERlx1NkJFQ1x1NkJFQlx1NkJGM1x1NkJFRlwiXSxcbltcIjlmODBcIixcIlx1OUVCRVx1NkMwOFx1NkMxM1x1NkMxNFx1NkMxQlx1NkMyNFx1NkMyM1x1NkM1RVx1NkM1NVx1NkM2Mlx1NkM2QVx1NkM4Mlx1NkM4RFx1NkM5QVx1NkM4MVx1NkM5Qlx1NkM3RVx1NkM2OFx1NkM3M1x1NkM5Mlx1NkM5MFx1NkNDNFx1NkNGMVx1NkNEM1x1NkNCRFx1NkNEN1x1NkNDNVx1NkNERFx1NkNBRVx1NkNCMVx1NkNCRVx1NkNCQVx1NkNEQlx1NkNFRlx1NkNEOVx1NkNFQVx1NkQxRlx1ODg0RFx1NkQzNlx1NkQyQlx1NkQzRFx1NkQzOFx1NkQxOVx1NkQzNVx1NkQzM1x1NkQxMlx1NkQwQ1x1NkQ2M1x1NkQ5M1x1NkQ2NFx1NkQ1QVx1NkQ3OVx1NkQ1OVx1NkQ4RVx1NkQ5NVx1NkZFNFx1NkQ4NVx1NkRGOVx1NkUxNVx1NkUwQVx1NkRCNVx1NkRDN1x1NkRFNlx1NkRCOFx1NkRDNlx1NkRFQ1x1NkRERVx1NkRDQ1x1NkRFOFx1NkREMlx1NkRDNVx1NkRGQVx1NkREOVx1NkRFNFx1NkRENVx1NkRFQVx1NkRFRVx1NkUyRFx1NkU2RVx1NkUyRVx1NkUxOVx1NkU3Mlx1NkU1Rlx1NkUzRVx1NkUyM1x1NkU2Qlx1NkUyQlx1NkU3Nlx1NkU0RFx1NkUxRlx1NkU0M1x1NkUzQVx1NkU0RVx1NkUyNFx1NkVGRlx1NkUxRFx1NkUzOFx1NkU4Mlx1NkVBQVx1NkU5OFx1NkVDOVx1NkVCN1x1NkVEM1x1NkVCRFx1NkVBRlx1NkVDNFx1NkVCMlx1NkVENFx1NkVENVx1NkU4Rlx1NkVBNVx1NkVDMlx1NkU5Rlx1NkY0MVx1NkYxMVx1NzA0Q1x1NkVFQ1x1NkVGOFx1NkVGRVx1NkYzRlx1NkVGMlx1NkYzMVx1NkVFRlx1NkYzMlx1NkVDQ1wiXSxcbltcImUwNDBcIixcIlx1NkYzRVx1NkYxM1x1NkVGN1x1NkY4Nlx1NkY3QVx1NkY3OFx1NkY4MVx1NkY4MFx1NkY2Rlx1NkY1Qlx1NkZGM1x1NkY2RFx1NkY4Mlx1NkY3Q1x1NkY1OFx1NkY4RVx1NkY5MVx1NkZDMlx1NkY2Nlx1NkZCM1x1NkZBM1x1NkZBMVx1NkZBNFx1NkZCOVx1NkZDNlx1NkZBQVx1NkZERlx1NkZENVx1NkZFQ1x1NkZENFx1NkZEOFx1NkZGMVx1NkZFRVx1NkZEQlx1NzAwOVx1NzAwQlx1NkZGQVx1NzAxMVx1NzAwMVx1NzAwRlx1NkZGRVx1NzAxQlx1NzAxQVx1NkY3NFx1NzAxRFx1NzAxOFx1NzAxRlx1NzAzMFx1NzAzRVx1NzAzMlx1NzA1MVx1NzA2M1x1NzA5OVx1NzA5Mlx1NzBBRlx1NzBGMVx1NzBBQ1x1NzBCOFx1NzBCM1x1NzBBRVx1NzBERlx1NzBDQlx1NzBERFwiXSxcbltcImUwODBcIixcIlx1NzBEOVx1NzEwOVx1NzBGRFx1NzExQ1x1NzExOVx1NzE2NVx1NzE1NVx1NzE4OFx1NzE2Nlx1NzE2Mlx1NzE0Q1x1NzE1Nlx1NzE2Q1x1NzE4Rlx1NzFGQlx1NzE4NFx1NzE5NVx1NzFBOFx1NzFBQ1x1NzFEN1x1NzFCOVx1NzFCRVx1NzFEMlx1NzFDOVx1NzFENFx1NzFDRVx1NzFFMFx1NzFFQ1x1NzFFN1x1NzFGNVx1NzFGQ1x1NzFGOVx1NzFGRlx1NzIwRFx1NzIxMFx1NzIxQlx1NzIyOFx1NzIyRFx1NzIyQ1x1NzIzMFx1NzIzMlx1NzIzQlx1NzIzQ1x1NzIzRlx1NzI0MFx1NzI0Nlx1NzI0Qlx1NzI1OFx1NzI3NFx1NzI3RVx1NzI4Mlx1NzI4MVx1NzI4N1x1NzI5Mlx1NzI5Nlx1NzJBMlx1NzJBN1x1NzJCOVx1NzJCMlx1NzJDM1x1NzJDNlx1NzJDNFx1NzJDRVx1NzJEMlx1NzJFMlx1NzJFMFx1NzJFMVx1NzJGOVx1NzJGN1x1NTAwRlx1NzMxN1x1NzMwQVx1NzMxQ1x1NzMxNlx1NzMxRFx1NzMzNFx1NzMyRlx1NzMyOVx1NzMyNVx1NzMzRVx1NzM0RVx1NzM0Rlx1OUVEOFx1NzM1N1x1NzM2QVx1NzM2OFx1NzM3MFx1NzM3OFx1NzM3NVx1NzM3Qlx1NzM3QVx1NzNDOFx1NzNCM1x1NzNDRVx1NzNCQlx1NzNDMFx1NzNFNVx1NzNFRVx1NzNERVx1NzRBMlx1NzQwNVx1NzQ2Rlx1NzQyNVx1NzNGOFx1NzQzMlx1NzQzQVx1NzQ1NVx1NzQzRlx1NzQ1Rlx1NzQ1OVx1NzQ0MVx1NzQ1Q1x1NzQ2OVx1NzQ3MFx1NzQ2M1x1NzQ2QVx1NzQ3Nlx1NzQ3RVx1NzQ4Qlx1NzQ5RVx1NzRBN1x1NzRDQVx1NzRDRlx1NzRENFx1NzNGMVwiXSxcbltcImUxNDBcIixcIlx1NzRFMFx1NzRFM1x1NzRFN1x1NzRFOVx1NzRFRVx1NzRGMlx1NzRGMFx1NzRGMVx1NzRGOFx1NzRGN1x1NzUwNFx1NzUwM1x1NzUwNVx1NzUwQ1x1NzUwRVx1NzUwRFx1NzUxNVx1NzUxM1x1NzUxRVx1NzUyNlx1NzUyQ1x1NzUzQ1x1NzU0NFx1NzU0RFx1NzU0QVx1NzU0OVx1NzU1Qlx1NzU0Nlx1NzU1QVx1NzU2OVx1NzU2NFx1NzU2N1x1NzU2Qlx1NzU2RFx1NzU3OFx1NzU3Nlx1NzU4Nlx1NzU4N1x1NzU3NFx1NzU4QVx1NzU4OVx1NzU4Mlx1NzU5NFx1NzU5QVx1NzU5RFx1NzVBNVx1NzVBM1x1NzVDMlx1NzVCM1x1NzVDM1x1NzVCNVx1NzVCRFx1NzVCOFx1NzVCQ1x1NzVCMVx1NzVDRFx1NzVDQVx1NzVEMlx1NzVEOVx1NzVFM1x1NzVERVx1NzVGRVx1NzVGRlwiXSxcbltcImUxODBcIixcIlx1NzVGQ1x1NzYwMVx1NzVGMFx1NzVGQVx1NzVGMlx1NzVGM1x1NzYwQlx1NzYwRFx1NzYwOVx1NzYxRlx1NzYyN1x1NzYyMFx1NzYyMVx1NzYyMlx1NzYyNFx1NzYzNFx1NzYzMFx1NzYzQlx1NzY0N1x1NzY0OFx1NzY0Nlx1NzY1Q1x1NzY1OFx1NzY2MVx1NzY2Mlx1NzY2OFx1NzY2OVx1NzY2QVx1NzY2N1x1NzY2Q1x1NzY3MFx1NzY3Mlx1NzY3Nlx1NzY3OFx1NzY3Q1x1NzY4MFx1NzY4M1x1NzY4OFx1NzY4Qlx1NzY4RVx1NzY5Nlx1NzY5M1x1NzY5OVx1NzY5QVx1NzZCMFx1NzZCNFx1NzZCOFx1NzZCOVx1NzZCQVx1NzZDMlx1NzZDRFx1NzZENlx1NzZEMlx1NzZERVx1NzZFMVx1NzZFNVx1NzZFN1x1NzZFQVx1ODYyRlx1NzZGQlx1NzcwOFx1NzcwN1x1NzcwNFx1NzcyOVx1NzcyNFx1NzcxRVx1NzcyNVx1NzcyNlx1NzcxQlx1NzczN1x1NzczOFx1Nzc0N1x1Nzc1QVx1Nzc2OFx1Nzc2Qlx1Nzc1Qlx1Nzc2NVx1Nzc3Rlx1Nzc3RVx1Nzc3OVx1Nzc4RVx1Nzc4Qlx1Nzc5MVx1NzdBMFx1Nzc5RVx1NzdCMFx1NzdCNlx1NzdCOVx1NzdCRlx1NzdCQ1x1NzdCRFx1NzdCQlx1NzdDN1x1NzdDRFx1NzdEN1x1NzdEQVx1NzdEQ1x1NzdFM1x1NzdFRVx1NzdGQ1x1NzgwQ1x1NzgxMlx1NzkyNlx1NzgyMFx1NzkyQVx1Nzg0NVx1Nzg4RVx1Nzg3NFx1Nzg4Nlx1Nzg3Q1x1Nzg5QVx1Nzg4Q1x1NzhBM1x1NzhCNVx1NzhBQVx1NzhBRlx1NzhEMVx1NzhDNlx1NzhDQlx1NzhENFx1NzhCRVx1NzhCQ1x1NzhDNVx1NzhDQVx1NzhFQ1wiXSxcbltcImUyNDBcIixcIlx1NzhFN1x1NzhEQVx1NzhGRFx1NzhGNFx1NzkwN1x1NzkxMlx1NzkxMVx1NzkxOVx1NzkyQ1x1NzkyQlx1Nzk0MFx1Nzk2MFx1Nzk1N1x1Nzk1Rlx1Nzk1QVx1Nzk1NVx1Nzk1M1x1Nzk3QVx1Nzk3Rlx1Nzk4QVx1Nzk5RFx1NzlBN1x1OUY0Qlx1NzlBQVx1NzlBRVx1NzlCM1x1NzlCOVx1NzlCQVx1NzlDOVx1NzlENVx1NzlFN1x1NzlFQ1x1NzlFMVx1NzlFM1x1N0EwOFx1N0EwRFx1N0ExOFx1N0ExOVx1N0EyMFx1N0ExRlx1Nzk4MFx1N0EzMVx1N0EzQlx1N0EzRVx1N0EzN1x1N0E0M1x1N0E1N1x1N0E0OVx1N0E2MVx1N0E2Mlx1N0E2OVx1OUY5RFx1N0E3MFx1N0E3OVx1N0E3RFx1N0E4OFx1N0E5N1x1N0E5NVx1N0E5OFx1N0E5Nlx1N0FBOVx1N0FDOFx1N0FCMFwiXSxcbltcImUyODBcIixcIlx1N0FCNlx1N0FDNVx1N0FDNFx1N0FCRlx1OTA4M1x1N0FDN1x1N0FDQVx1N0FDRFx1N0FDRlx1N0FENVx1N0FEM1x1N0FEOVx1N0FEQVx1N0FERFx1N0FFMVx1N0FFMlx1N0FFNlx1N0FFRFx1N0FGMFx1N0IwMlx1N0IwRlx1N0IwQVx1N0IwNlx1N0IzM1x1N0IxOFx1N0IxOVx1N0IxRVx1N0IzNVx1N0IyOFx1N0IzNlx1N0I1MFx1N0I3QVx1N0IwNFx1N0I0RFx1N0IwQlx1N0I0Q1x1N0I0NVx1N0I3NVx1N0I2NVx1N0I3NFx1N0I2N1x1N0I3MFx1N0I3MVx1N0I2Q1x1N0I2RVx1N0I5RFx1N0I5OFx1N0I5Rlx1N0I4RFx1N0I5Q1x1N0I5QVx1N0I4Qlx1N0I5Mlx1N0I4Rlx1N0I1RFx1N0I5OVx1N0JDQlx1N0JDMVx1N0JDQ1x1N0JDRlx1N0JCNFx1N0JDNlx1N0JERFx1N0JFOVx1N0MxMVx1N0MxNFx1N0JFNlx1N0JFNVx1N0M2MFx1N0MwMFx1N0MwN1x1N0MxM1x1N0JGM1x1N0JGN1x1N0MxN1x1N0MwRFx1N0JGNlx1N0MyM1x1N0MyN1x1N0MyQVx1N0MxRlx1N0MzN1x1N0MyQlx1N0MzRFx1N0M0Q1x1N0M0M1x1N0M1NFx1N0M0Rlx1N0M0MFx1N0M1MFx1N0M1OFx1N0M1Rlx1N0M2NFx1N0M1Nlx1N0M2NVx1N0M2Q1x1N0M3NVx1N0M4M1x1N0M5MFx1N0NBNFx1N0NBRFx1N0NBMlx1N0NBQlx1N0NBMVx1N0NBOFx1N0NCM1x1N0NCMlx1N0NCMVx1N0NBRVx1N0NCOVx1N0NCRFx1N0NDMFx1N0NDNVx1N0NDMlx1N0NEOFx1N0NEMlx1N0NEQ1x1N0NFMlx1OUIzQlx1N0NFRlx1N0NGMlx1N0NGNFx1N0NGNlx1N0NGQVx1N0QwNlwiXSxcbltcImUzNDBcIixcIlx1N0QwMlx1N0QxQ1x1N0QxNVx1N0QwQVx1N0Q0NVx1N0Q0Qlx1N0QyRVx1N0QzMlx1N0QzRlx1N0QzNVx1N0Q0Nlx1N0Q3M1x1N0Q1Nlx1N0Q0RVx1N0Q3Mlx1N0Q2OFx1N0Q2RVx1N0Q0Rlx1N0Q2M1x1N0Q5M1x1N0Q4OVx1N0Q1Qlx1N0Q4Rlx1N0Q3RFx1N0Q5Qlx1N0RCQVx1N0RBRVx1N0RBM1x1N0RCNVx1N0RDN1x1N0RCRFx1N0RBQlx1N0UzRFx1N0RBMlx1N0RBRlx1N0REQ1x1N0RCOFx1N0Q5Rlx1N0RCMFx1N0REOFx1N0RERFx1N0RFNFx1N0RERVx1N0RGQlx1N0RGMlx1N0RFMVx1N0UwNVx1N0UwQVx1N0UyM1x1N0UyMVx1N0UxMlx1N0UzMVx1N0UxRlx1N0UwOVx1N0UwQlx1N0UyMlx1N0U0Nlx1N0U2Nlx1N0UzQlx1N0UzNVx1N0UzOVx1N0U0M1x1N0UzN1wiXSxcbltcImUzODBcIixcIlx1N0UzMlx1N0UzQVx1N0U2N1x1N0U1RFx1N0U1Nlx1N0U1RVx1N0U1OVx1N0U1QVx1N0U3OVx1N0U2QVx1N0U2OVx1N0U3Q1x1N0U3Qlx1N0U4M1x1N0RENVx1N0U3RFx1OEZBRVx1N0U3Rlx1N0U4OFx1N0U4OVx1N0U4Q1x1N0U5Mlx1N0U5MFx1N0U5M1x1N0U5NFx1N0U5Nlx1N0U4RVx1N0U5Qlx1N0U5Q1x1N0YzOFx1N0YzQVx1N0Y0NVx1N0Y0Q1x1N0Y0RFx1N0Y0RVx1N0Y1MFx1N0Y1MVx1N0Y1NVx1N0Y1NFx1N0Y1OFx1N0Y1Rlx1N0Y2MFx1N0Y2OFx1N0Y2OVx1N0Y2N1x1N0Y3OFx1N0Y4Mlx1N0Y4Nlx1N0Y4M1x1N0Y4OFx1N0Y4N1x1N0Y4Q1x1N0Y5NFx1N0Y5RVx1N0Y5RFx1N0Y5QVx1N0ZBM1x1N0ZBRlx1N0ZCMlx1N0ZCOVx1N0ZBRVx1N0ZCNlx1N0ZCOFx1OEI3MVx1N0ZDNVx1N0ZDNlx1N0ZDQVx1N0ZENVx1N0ZENFx1N0ZFMVx1N0ZFNlx1N0ZFOVx1N0ZGM1x1N0ZGOVx1OThEQ1x1ODAwNlx1ODAwNFx1ODAwQlx1ODAxMlx1ODAxOFx1ODAxOVx1ODAxQ1x1ODAyMVx1ODAyOFx1ODAzRlx1ODAzQlx1ODA0QVx1ODA0Nlx1ODA1Mlx1ODA1OFx1ODA1QVx1ODA1Rlx1ODA2Mlx1ODA2OFx1ODA3M1x1ODA3Mlx1ODA3MFx1ODA3Nlx1ODA3OVx1ODA3RFx1ODA3Rlx1ODA4NFx1ODA4Nlx1ODA4NVx1ODA5Qlx1ODA5M1x1ODA5QVx1ODBBRFx1NTE5MFx1ODBBQ1x1ODBEQlx1ODBFNVx1ODBEOVx1ODBERFx1ODBDNFx1ODBEQVx1ODBENlx1ODEwOVx1ODBFRlx1ODBGMVx1ODExQlx1ODEyOVx1ODEyM1x1ODEyRlx1ODE0QlwiXSxcbltcImU0NDBcIixcIlx1OTY4Qlx1ODE0Nlx1ODEzRVx1ODE1M1x1ODE1MVx1ODBGQ1x1ODE3MVx1ODE2RVx1ODE2NVx1ODE2Nlx1ODE3NFx1ODE4M1x1ODE4OFx1ODE4QVx1ODE4MFx1ODE4Mlx1ODFBMFx1ODE5NVx1ODFBNFx1ODFBM1x1ODE1Rlx1ODE5M1x1ODFBOVx1ODFCMFx1ODFCNVx1ODFCRVx1ODFCOFx1ODFCRFx1ODFDMFx1ODFDMlx1ODFCQVx1ODFDOVx1ODFDRFx1ODFEMVx1ODFEOVx1ODFEOFx1ODFDOFx1ODFEQVx1ODFERlx1ODFFMFx1ODFFN1x1ODFGQVx1ODFGQlx1ODFGRVx1ODIwMVx1ODIwMlx1ODIwNVx1ODIwN1x1ODIwQVx1ODIwRFx1ODIxMFx1ODIxNlx1ODIyOVx1ODIyQlx1ODIzOFx1ODIzM1x1ODI0MFx1ODI1OVx1ODI1OFx1ODI1RFx1ODI1QVx1ODI1Rlx1ODI2NFwiXSxcbltcImU0ODBcIixcIlx1ODI2Mlx1ODI2OFx1ODI2QVx1ODI2Qlx1ODIyRVx1ODI3MVx1ODI3N1x1ODI3OFx1ODI3RVx1ODI4RFx1ODI5Mlx1ODJBQlx1ODI5Rlx1ODJCQlx1ODJBQ1x1ODJFMVx1ODJFM1x1ODJERlx1ODJEMlx1ODJGNFx1ODJGM1x1ODJGQVx1ODM5M1x1ODMwM1x1ODJGQlx1ODJGOVx1ODJERVx1ODMwNlx1ODJEQ1x1ODMwOVx1ODJEOVx1ODMzNVx1ODMzNFx1ODMxNlx1ODMzMlx1ODMzMVx1ODM0MFx1ODMzOVx1ODM1MFx1ODM0NVx1ODMyRlx1ODMyQlx1ODMxN1x1ODMxOFx1ODM4NVx1ODM5QVx1ODNBQVx1ODM5Rlx1ODNBMlx1ODM5Nlx1ODMyM1x1ODM4RVx1ODM4N1x1ODM4QVx1ODM3Q1x1ODNCNVx1ODM3M1x1ODM3NVx1ODNBMFx1ODM4OVx1ODNBOFx1ODNGNFx1ODQxM1x1ODNFQlx1ODNDRVx1ODNGRFx1ODQwM1x1ODNEOFx1ODQwQlx1ODNDMVx1ODNGN1x1ODQwN1x1ODNFMFx1ODNGMlx1ODQwRFx1ODQyMlx1ODQyMFx1ODNCRFx1ODQzOFx1ODUwNlx1ODNGQlx1ODQ2RFx1ODQyQVx1ODQzQ1x1ODU1QVx1ODQ4NFx1ODQ3N1x1ODQ2Qlx1ODRBRFx1ODQ2RVx1ODQ4Mlx1ODQ2OVx1ODQ0Nlx1ODQyQ1x1ODQ2Rlx1ODQ3OVx1ODQzNVx1ODRDQVx1ODQ2Mlx1ODRCOVx1ODRCRlx1ODQ5Rlx1ODREOVx1ODRDRFx1ODRCQlx1ODREQVx1ODREMFx1ODRDMVx1ODRDNlx1ODRENlx1ODRBMVx1ODUyMVx1ODRGRlx1ODRGNFx1ODUxN1x1ODUxOFx1ODUyQ1x1ODUxRlx1ODUxNVx1ODUxNFx1ODRGQ1x1ODU0MFx1ODU2M1x1ODU1OFx1ODU0OFwiXSxcbltcImU1NDBcIixcIlx1ODU0MVx1ODYwMlx1ODU0Qlx1ODU1NVx1ODU4MFx1ODVBNFx1ODU4OFx1ODU5MVx1ODU4QVx1ODVBOFx1ODU2RFx1ODU5NFx1ODU5Qlx1ODVFQVx1ODU4N1x1ODU5Q1x1ODU3N1x1ODU3RVx1ODU5MFx1ODVDOVx1ODVCQVx1ODVDRlx1ODVCOVx1ODVEMFx1ODVENVx1ODVERFx1ODVFNVx1ODVEQ1x1ODVGOVx1ODYwQVx1ODYxM1x1ODYwQlx1ODVGRVx1ODVGQVx1ODYwNlx1ODYyMlx1ODYxQVx1ODYzMFx1ODYzRlx1ODY0RFx1NEU1NVx1ODY1NFx1ODY1Rlx1ODY2N1x1ODY3MVx1ODY5M1x1ODZBM1x1ODZBOVx1ODZBQVx1ODY4Qlx1ODY4Q1x1ODZCNlx1ODZBRlx1ODZDNFx1ODZDNlx1ODZCMFx1ODZDOVx1ODgyM1x1ODZBQlx1ODZENFx1ODZERVx1ODZFOVx1ODZFQ1wiXSxcbltcImU1ODBcIixcIlx1ODZERlx1ODZEQlx1ODZFRlx1ODcxMlx1ODcwNlx1ODcwOFx1ODcwMFx1ODcwM1x1ODZGQlx1ODcxMVx1ODcwOVx1ODcwRFx1ODZGOVx1ODcwQVx1ODczNFx1ODczRlx1ODczN1x1ODczQlx1ODcyNVx1ODcyOVx1ODcxQVx1ODc2MFx1ODc1Rlx1ODc3OFx1ODc0Q1x1ODc0RVx1ODc3NFx1ODc1N1x1ODc2OFx1ODc2RVx1ODc1OVx1ODc1M1x1ODc2M1x1ODc2QVx1ODgwNVx1ODdBMlx1ODc5Rlx1ODc4Mlx1ODdBRlx1ODdDQlx1ODdCRFx1ODdDMFx1ODdEMFx1OTZENlx1ODdBQlx1ODdDNFx1ODdCM1x1ODdDN1x1ODdDNlx1ODdCQlx1ODdFRlx1ODdGMlx1ODdFMFx1ODgwRlx1ODgwRFx1ODdGRVx1ODdGNlx1ODdGN1x1ODgwRVx1ODdEMlx1ODgxMVx1ODgxNlx1ODgxNVx1ODgyMlx1ODgyMVx1ODgzMVx1ODgzNlx1ODgzOVx1ODgyN1x1ODgzQlx1ODg0NFx1ODg0Mlx1ODg1Mlx1ODg1OVx1ODg1RVx1ODg2Mlx1ODg2Qlx1ODg4MVx1ODg3RVx1ODg5RVx1ODg3NVx1ODg3RFx1ODhCNVx1ODg3Mlx1ODg4Mlx1ODg5N1x1ODg5Mlx1ODhBRVx1ODg5OVx1ODhBMlx1ODg4RFx1ODhBNFx1ODhCMFx1ODhCRlx1ODhCMVx1ODhDM1x1ODhDNFx1ODhENFx1ODhEOFx1ODhEOVx1ODhERFx1ODhGOVx1ODkwMlx1ODhGQ1x1ODhGNFx1ODhFOFx1ODhGMlx1ODkwNFx1ODkwQ1x1ODkwQVx1ODkxM1x1ODk0M1x1ODkxRVx1ODkyNVx1ODkyQVx1ODkyQlx1ODk0MVx1ODk0NFx1ODkzQlx1ODkzNlx1ODkzOFx1ODk0Q1x1ODkxRFx1ODk2MFx1ODk1RVwiXSxcbltcImU2NDBcIixcIlx1ODk2Nlx1ODk2NFx1ODk2RFx1ODk2QVx1ODk2Rlx1ODk3NFx1ODk3N1x1ODk3RVx1ODk4M1x1ODk4OFx1ODk4QVx1ODk5M1x1ODk5OFx1ODlBMVx1ODlBOVx1ODlBNlx1ODlBQ1x1ODlBRlx1ODlCMlx1ODlCQVx1ODlCRFx1ODlCRlx1ODlDMFx1ODlEQVx1ODlEQ1x1ODlERFx1ODlFN1x1ODlGNFx1ODlGOFx1OEEwM1x1OEExNlx1OEExMFx1OEEwQ1x1OEExQlx1OEExRFx1OEEyNVx1OEEzNlx1OEE0MVx1OEE1Qlx1OEE1Mlx1OEE0Nlx1OEE0OFx1OEE3Q1x1OEE2RFx1OEE2Q1x1OEE2Mlx1OEE4NVx1OEE4Mlx1OEE4NFx1OEFBOFx1OEFBMVx1OEE5MVx1OEFBNVx1OEFBNlx1OEE5QVx1OEFBM1x1OEFDNFx1OEFDRFx1OEFDMlx1OEFEQVx1OEFFQlx1OEFGM1x1OEFFN1wiXSxcbltcImU2ODBcIixcIlx1OEFFNFx1OEFGMVx1OEIxNFx1OEFFMFx1OEFFMlx1OEFGN1x1OEFERVx1OEFEQlx1OEIwQ1x1OEIwN1x1OEIxQVx1OEFFMVx1OEIxNlx1OEIxMFx1OEIxN1x1OEIyMFx1OEIzM1x1OTdBQlx1OEIyNlx1OEIyQlx1OEIzRVx1OEIyOFx1OEI0MVx1OEI0Q1x1OEI0Rlx1OEI0RVx1OEI0OVx1OEI1Nlx1OEI1Qlx1OEI1QVx1OEI2Qlx1OEI1Rlx1OEI2Q1x1OEI2Rlx1OEI3NFx1OEI3RFx1OEI4MFx1OEI4Q1x1OEI4RVx1OEI5Mlx1OEI5M1x1OEI5Nlx1OEI5OVx1OEI5QVx1OEMzQVx1OEM0MVx1OEMzRlx1OEM0OFx1OEM0Q1x1OEM0RVx1OEM1MFx1OEM1NVx1OEM2Mlx1OEM2Q1x1OEM3OFx1OEM3QVx1OEM4Mlx1OEM4OVx1OEM4NVx1OEM4QVx1OEM4RFx1OEM4RVx1OEM5NFx1OEM3Q1x1OEM5OFx1NjIxRFx1OENBRFx1OENBQVx1OENCRFx1OENCMlx1OENCM1x1OENBRVx1OENCNlx1OENDOFx1OENDMVx1OENFNFx1OENFM1x1OENEQVx1OENGRFx1OENGQVx1OENGQlx1OEQwNFx1OEQwNVx1OEQwQVx1OEQwN1x1OEQwRlx1OEQwRFx1OEQxMFx1OUY0RVx1OEQxM1x1OENDRFx1OEQxNFx1OEQxNlx1OEQ2N1x1OEQ2RFx1OEQ3MVx1OEQ3M1x1OEQ4MVx1OEQ5OVx1OERDMlx1OERCRVx1OERCQVx1OERDRlx1OEREQVx1OERENlx1OERDQ1x1OEREQlx1OERDQlx1OERFQVx1OERFQlx1OERERlx1OERFM1x1OERGQ1x1OEUwOFx1OEUwOVx1OERGRlx1OEUxRFx1OEUxRVx1OEUxMFx1OEUxRlx1OEU0Mlx1OEUzNVx1OEUzMFx1OEUzNFx1OEU0QVwiXSxcbltcImU3NDBcIixcIlx1OEU0N1x1OEU0OVx1OEU0Q1x1OEU1MFx1OEU0OFx1OEU1OVx1OEU2NFx1OEU2MFx1OEUyQVx1OEU2M1x1OEU1NVx1OEU3Nlx1OEU3Mlx1OEU3Q1x1OEU4MVx1OEU4N1x1OEU4NVx1OEU4NFx1OEU4Qlx1OEU4QVx1OEU5M1x1OEU5MVx1OEU5NFx1OEU5OVx1OEVBQVx1OEVBMVx1OEVBQ1x1OEVCMFx1OEVDNlx1OEVCMVx1OEVCRVx1OEVDNVx1OEVDOFx1OEVDQlx1OEVEQlx1OEVFM1x1OEVGQ1x1OEVGQlx1OEVFQlx1OEVGRVx1OEYwQVx1OEYwNVx1OEYxNVx1OEYxMlx1OEYxOVx1OEYxM1x1OEYxQ1x1OEYxRlx1OEYxQlx1OEYwQ1x1OEYyNlx1OEYzM1x1OEYzQlx1OEYzOVx1OEY0NVx1OEY0Mlx1OEYzRVx1OEY0Q1x1OEY0OVx1OEY0Nlx1OEY0RVx1OEY1N1x1OEY1Q1wiXSxcbltcImU3ODBcIixcIlx1OEY2Mlx1OEY2M1x1OEY2NFx1OEY5Q1x1OEY5Rlx1OEZBM1x1OEZBRFx1OEZBRlx1OEZCN1x1OEZEQVx1OEZFNVx1OEZFMlx1OEZFQVx1OEZFRlx1OTA4N1x1OEZGNFx1OTAwNVx1OEZGOVx1OEZGQVx1OTAxMVx1OTAxNVx1OTAyMVx1OTAwRFx1OTAxRVx1OTAxNlx1OTAwQlx1OTAyN1x1OTAzNlx1OTAzNVx1OTAzOVx1OEZGOFx1OTA0Rlx1OTA1MFx1OTA1MVx1OTA1Mlx1OTAwRVx1OTA0OVx1OTAzRVx1OTA1Nlx1OTA1OFx1OTA1RVx1OTA2OFx1OTA2Rlx1OTA3Nlx1OTZBOFx1OTA3Mlx1OTA4Mlx1OTA3RFx1OTA4MVx1OTA4MFx1OTA4QVx1OTA4OVx1OTA4Rlx1OTBBOFx1OTBBRlx1OTBCMVx1OTBCNVx1OTBFMlx1OTBFNFx1NjI0OFx1OTBEQlx1OTEwMlx1OTExMlx1OTExOVx1OTEzMlx1OTEzMFx1OTE0QVx1OTE1Nlx1OTE1OFx1OTE2M1x1OTE2NVx1OTE2OVx1OTE3M1x1OTE3Mlx1OTE4Qlx1OTE4OVx1OTE4Mlx1OTFBMlx1OTFBQlx1OTFBRlx1OTFBQVx1OTFCNVx1OTFCNFx1OTFCQVx1OTFDMFx1OTFDMVx1OTFDOVx1OTFDQlx1OTFEMFx1OTFENlx1OTFERlx1OTFFMVx1OTFEQlx1OTFGQ1x1OTFGNVx1OTFGNlx1OTIxRVx1OTFGRlx1OTIxNFx1OTIyQ1x1OTIxNVx1OTIxMVx1OTI1RVx1OTI1N1x1OTI0NVx1OTI0OVx1OTI2NFx1OTI0OFx1OTI5NVx1OTIzRlx1OTI0Qlx1OTI1MFx1OTI5Q1x1OTI5Nlx1OTI5M1x1OTI5Qlx1OTI1QVx1OTJDRlx1OTJCOVx1OTJCN1x1OTJFOVx1OTMwRlx1OTJGQVx1OTM0NFx1OTMyRVwiXSxcbltcImU4NDBcIixcIlx1OTMxOVx1OTMyMlx1OTMxQVx1OTMyM1x1OTMzQVx1OTMzNVx1OTMzQlx1OTM1Q1x1OTM2MFx1OTM3Q1x1OTM2RVx1OTM1Nlx1OTNCMFx1OTNBQ1x1OTNBRFx1OTM5NFx1OTNCOVx1OTNENlx1OTNEN1x1OTNFOFx1OTNFNVx1OTNEOFx1OTNDM1x1OTNERFx1OTNEMFx1OTNDOFx1OTNFNFx1OTQxQVx1OTQxNFx1OTQxM1x1OTQwM1x1OTQwN1x1OTQxMFx1OTQzNlx1OTQyQlx1OTQzNVx1OTQyMVx1OTQzQVx1OTQ0MVx1OTQ1Mlx1OTQ0NFx1OTQ1Qlx1OTQ2MFx1OTQ2Mlx1OTQ1RVx1OTQ2QVx1OTIyOVx1OTQ3MFx1OTQ3NVx1OTQ3N1x1OTQ3RFx1OTQ1QVx1OTQ3Q1x1OTQ3RVx1OTQ4MVx1OTQ3Rlx1OTU4Mlx1OTU4N1x1OTU4QVx1OTU5NFx1OTU5Nlx1OTU5OFx1OTU5OVwiXSxcbltcImU4ODBcIixcIlx1OTVBMFx1OTVBOFx1OTVBN1x1OTVBRFx1OTVCQ1x1OTVCQlx1OTVCOVx1OTVCRVx1OTVDQVx1NkZGNlx1OTVDM1x1OTVDRFx1OTVDQ1x1OTVENVx1OTVENFx1OTVENlx1OTVEQ1x1OTVFMVx1OTVFNVx1OTVFMlx1OTYyMVx1OTYyOFx1OTYyRVx1OTYyRlx1OTY0Mlx1OTY0Q1x1OTY0Rlx1OTY0Qlx1OTY3N1x1OTY1Q1x1OTY1RVx1OTY1RFx1OTY1Rlx1OTY2Nlx1OTY3Mlx1OTY2Q1x1OTY4RFx1OTY5OFx1OTY5NVx1OTY5N1x1OTZBQVx1OTZBN1x1OTZCMVx1OTZCMlx1OTZCMFx1OTZCNFx1OTZCNlx1OTZCOFx1OTZCOVx1OTZDRVx1OTZDQlx1OTZDOVx1OTZDRFx1ODk0RFx1OTZEQ1x1OTcwRFx1OTZENVx1OTZGOVx1OTcwNFx1OTcwNlx1OTcwOFx1OTcxM1x1OTcwRVx1OTcxMVx1OTcwRlx1OTcxNlx1OTcxOVx1OTcyNFx1OTcyQVx1OTczMFx1OTczOVx1OTczRFx1OTczRVx1OTc0NFx1OTc0Nlx1OTc0OFx1OTc0Mlx1OTc0OVx1OTc1Q1x1OTc2MFx1OTc2NFx1OTc2Nlx1OTc2OFx1NTJEMlx1OTc2Qlx1OTc3MVx1OTc3OVx1OTc4NVx1OTc3Q1x1OTc4MVx1OTc3QVx1OTc4Nlx1OTc4Qlx1OTc4Rlx1OTc5MFx1OTc5Q1x1OTdBOFx1OTdBNlx1OTdBM1x1OTdCM1x1OTdCNFx1OTdDM1x1OTdDNlx1OTdDOFx1OTdDQlx1OTdEQ1x1OTdFRFx1OUY0Rlx1OTdGMlx1N0FERlx1OTdGNlx1OTdGNVx1OTgwRlx1OTgwQ1x1OTgzOFx1OTgyNFx1OTgyMVx1OTgzN1x1OTgzRFx1OTg0Nlx1OTg0Rlx1OTg0Qlx1OTg2Qlx1OTg2Rlx1OTg3MFwiXSxcbltcImU5NDBcIixcIlx1OTg3MVx1OTg3NFx1OTg3M1x1OThBQVx1OThBRlx1OThCMVx1OThCNlx1OThDNFx1OThDM1x1OThDNlx1OThFOVx1OThFQlx1OTkwM1x1OTkwOVx1OTkxMlx1OTkxNFx1OTkxOFx1OTkyMVx1OTkxRFx1OTkxRVx1OTkyNFx1OTkyMFx1OTkyQ1x1OTkyRVx1OTkzRFx1OTkzRVx1OTk0Mlx1OTk0OVx1OTk0NVx1OTk1MFx1OTk0Qlx1OTk1MVx1OTk1Mlx1OTk0Q1x1OTk1NVx1OTk5N1x1OTk5OFx1OTlBNVx1OTlBRFx1OTlBRVx1OTlCQ1x1OTlERlx1OTlEQlx1OTlERFx1OTlEOFx1OTlEMVx1OTlFRFx1OTlFRVx1OTlGMVx1OTlGMlx1OTlGQlx1OTlGOFx1OUEwMVx1OUEwRlx1OUEwNVx1OTlFMlx1OUExOVx1OUEyQlx1OUEzN1x1OUE0NVx1OUE0Mlx1OUE0MFx1OUE0M1wiXSxcbltcImU5ODBcIixcIlx1OUEzRVx1OUE1NVx1OUE0RFx1OUE1Qlx1OUE1N1x1OUE1Rlx1OUE2Mlx1OUE2NVx1OUE2NFx1OUE2OVx1OUE2Qlx1OUE2QVx1OUFBRFx1OUFCMFx1OUFCQ1x1OUFDMFx1OUFDRlx1OUFEMVx1OUFEM1x1OUFENFx1OUFERVx1OUFERlx1OUFFMlx1OUFFM1x1OUFFNlx1OUFFRlx1OUFFQlx1OUFFRVx1OUFGNFx1OUFGMVx1OUFGN1x1OUFGQlx1OUIwNlx1OUIxOFx1OUIxQVx1OUIxRlx1OUIyMlx1OUIyM1x1OUIyNVx1OUIyN1x1OUIyOFx1OUIyOVx1OUIyQVx1OUIyRVx1OUIyRlx1OUIzMlx1OUI0NFx1OUI0M1x1OUI0Rlx1OUI0RFx1OUI0RVx1OUI1MVx1OUI1OFx1OUI3NFx1OUI5M1x1OUI4M1x1OUI5MVx1OUI5Nlx1OUI5N1x1OUI5Rlx1OUJBMFx1OUJBOFx1OUJCNFx1OUJDMFx1OUJDQVx1OUJCOVx1OUJDNlx1OUJDRlx1OUJEMVx1OUJEMlx1OUJFM1x1OUJFMlx1OUJFNFx1OUJENFx1OUJFMVx1OUMzQVx1OUJGMlx1OUJGMVx1OUJGMFx1OUMxNVx1OUMxNFx1OUMwOVx1OUMxM1x1OUMwQ1x1OUMwNlx1OUMwOFx1OUMxMlx1OUMwQVx1OUMwNFx1OUMyRVx1OUMxQlx1OUMyNVx1OUMyNFx1OUMyMVx1OUMzMFx1OUM0N1x1OUMzMlx1OUM0Nlx1OUMzRVx1OUM1QVx1OUM2MFx1OUM2N1x1OUM3Nlx1OUM3OFx1OUNFN1x1OUNFQ1x1OUNGMFx1OUQwOVx1OUQwOFx1OUNFQlx1OUQwM1x1OUQwNlx1OUQyQVx1OUQyNlx1OURBRlx1OUQyM1x1OUQxRlx1OUQ0NFx1OUQxNVx1OUQxMlx1OUQ0MVx1OUQzRlx1OUQzRVx1OUQ0Nlx1OUQ0OFwiXSxcbltcImVhNDBcIixcIlx1OUQ1RFx1OUQ1RVx1OUQ2NFx1OUQ1MVx1OUQ1MFx1OUQ1OVx1OUQ3Mlx1OUQ4OVx1OUQ4N1x1OURBQlx1OUQ2Rlx1OUQ3QVx1OUQ5QVx1OURBNFx1OURBOVx1OURCMlx1OURDNFx1OURDMVx1OURCQlx1OURCOFx1OURCQVx1OURDNlx1OURDRlx1OURDMlx1OUREOVx1OUREM1x1OURGOFx1OURFNlx1OURFRFx1OURFRlx1OURGRFx1OUUxQVx1OUUxQlx1OUUxRVx1OUU3NVx1OUU3OVx1OUU3RFx1OUU4MVx1OUU4OFx1OUU4Qlx1OUU4Q1x1OUU5Mlx1OUU5NVx1OUU5MVx1OUU5RFx1OUVBNVx1OUVBOVx1OUVCOFx1OUVBQVx1OUVBRFx1OTc2MVx1OUVDQ1x1OUVDRVx1OUVDRlx1OUVEMFx1OUVENFx1OUVEQ1x1OUVERVx1OUVERFx1OUVFMFx1OUVFNVx1OUVFOFx1OUVFRlwiXSxcbltcImVhODBcIixcIlx1OUVGNFx1OUVGNlx1OUVGN1x1OUVGOVx1OUVGQlx1OUVGQ1x1OUVGRFx1OUYwN1x1OUYwOFx1NzZCN1x1OUYxNVx1OUYyMVx1OUYyQ1x1OUYzRVx1OUY0QVx1OUY1Mlx1OUY1NFx1OUY2M1x1OUY1Rlx1OUY2MFx1OUY2MVx1OUY2Nlx1OUY2N1x1OUY2Q1x1OUY2QVx1OUY3N1x1OUY3Mlx1OUY3Nlx1OUY5NVx1OUY5Q1x1OUZBMFx1NTgyRlx1NjlDN1x1OTA1OVx1NzQ2NFx1NTFEQ1x1NzE5OVwiXSxcbltcImVkNDBcIixcIlx1N0U4QVx1ODkxQ1x1OTM0OFx1OTI4OFx1ODREQ1x1NEZDOVx1NzBCQlx1NjYzMVx1NjhDOFx1OTJGOVx1NjZGQlx1NUY0NVx1NEUyOFx1NEVFMVx1NEVGQ1x1NEYwMFx1NEYwM1x1NEYzOVx1NEY1Nlx1NEY5Mlx1NEY4QVx1NEY5QVx1NEY5NFx1NEZDRFx1NTA0MFx1NTAyMlx1NEZGRlx1NTAxRVx1NTA0Nlx1NTA3MFx1NTA0Mlx1NTA5NFx1NTBGNFx1NTBEOFx1NTE0QVx1NTE2NFx1NTE5RFx1NTFCRVx1NTFFQ1x1NTIxNVx1NTI5Q1x1NTJBNlx1NTJDMFx1NTJEQlx1NTMwMFx1NTMwN1x1NTMyNFx1NTM3Mlx1NTM5M1x1NTNCMlx1NTNERFx1RkEwRVx1NTQ5Q1x1NTQ4QVx1NTRBOVx1NTRGRlx1NTU4Nlx1NTc1OVx1NTc2NVx1NTdBQ1x1NTdDOFx1NTdDN1x1RkEwRlwiXSxcbltcImVkODBcIixcIlx1RkExMFx1NTg5RVx1NThCMlx1NTkwQlx1NTk1M1x1NTk1Qlx1NTk1RFx1NTk2M1x1NTlBNFx1NTlCQVx1NUI1Nlx1NUJDMFx1NzUyRlx1NUJEOFx1NUJFQ1x1NUMxRVx1NUNBNlx1NUNCQVx1NUNGNVx1NUQyN1x1NUQ1M1x1RkExMVx1NUQ0Mlx1NUQ2RFx1NURCOFx1NURCOVx1NUREMFx1NUYyMVx1NUYzNFx1NUY2N1x1NUZCN1x1NUZERVx1NjA1RFx1NjA4NVx1NjA4QVx1NjBERVx1NjBENVx1NjEyMFx1NjBGMlx1NjExMVx1NjEzN1x1NjEzMFx1NjE5OFx1NjIxM1x1NjJBNlx1NjNGNVx1NjQ2MFx1NjQ5RFx1NjRDRVx1NjU0RVx1NjYwMFx1NjYxNVx1NjYzQlx1NjYwOVx1NjYyRVx1NjYxRVx1NjYyNFx1NjY2NVx1NjY1N1x1NjY1OVx1RkExMlx1NjY3M1x1NjY5OVx1NjZBMFx1NjZCMlx1NjZCRlx1NjZGQVx1NjcwRVx1RjkyOVx1Njc2Nlx1NjdCQlx1Njg1Mlx1NjdDMFx1NjgwMVx1Njg0NFx1NjhDRlx1RkExM1x1Njk2OFx1RkExNFx1Njk5OFx1NjlFMlx1NkEzMFx1NkE2Qlx1NkE0Nlx1NkE3M1x1NkE3RVx1NkFFMlx1NkFFNFx1NkJENlx1NkMzRlx1NkM1Q1x1NkM4Nlx1NkM2Rlx1NkNEQVx1NkQwNFx1NkQ4N1x1NkQ2Rlx1NkQ5Nlx1NkRBQ1x1NkRDRlx1NkRGOFx1NkRGMlx1NkRGQ1x1NkUzOVx1NkU1Q1x1NkUyN1x1NkUzQ1x1NkVCRlx1NkY4OFx1NkZCNVx1NkZGNVx1NzAwNVx1NzAwN1x1NzAyOFx1NzA4NVx1NzBBQlx1NzEwRlx1NzEwNFx1NzE1Q1x1NzE0Nlx1NzE0N1x1RkExNVx1NzFDMVx1NzFGRVx1NzJCMVwiXSxcbltcImVlNDBcIixcIlx1NzJCRVx1NzMyNFx1RkExNlx1NzM3N1x1NzNCRFx1NzNDOVx1NzNENlx1NzNFM1x1NzNEMlx1NzQwN1x1NzNGNVx1NzQyNlx1NzQyQVx1NzQyOVx1NzQyRVx1NzQ2Mlx1NzQ4OVx1NzQ5Rlx1NzUwMVx1NzU2Rlx1NzY4Mlx1NzY5Q1x1NzY5RVx1NzY5Qlx1NzZBNlx1RkExN1x1Nzc0Nlx1NTJBRlx1NzgyMVx1Nzg0RVx1Nzg2NFx1Nzg3QVx1NzkzMFx1RkExOFx1RkExOVx1RkExQVx1Nzk5NFx1RkExQlx1Nzk5Qlx1N0FEMVx1N0FFN1x1RkExQ1x1N0FFQlx1N0I5RVx1RkExRFx1N0Q0OFx1N0Q1Q1x1N0RCN1x1N0RBMFx1N0RENlx1N0U1Mlx1N0Y0N1x1N0ZBMVx1RkExRVx1ODMwMVx1ODM2Mlx1ODM3Rlx1ODNDN1x1ODNGNlx1ODQ0OFx1ODRCNFx1ODU1M1x1ODU1OVwiXSxcbltcImVlODBcIixcIlx1ODU2Qlx1RkExRlx1ODVCMFx1RkEyMFx1RkEyMVx1ODgwN1x1ODhGNVx1OEExMlx1OEEzN1x1OEE3OVx1OEFBN1x1OEFCRVx1OEFERlx1RkEyMlx1OEFGNlx1OEI1M1x1OEI3Rlx1OENGMFx1OENGNFx1OEQxMlx1OEQ3Nlx1RkEyM1x1OEVDRlx1RkEyNFx1RkEyNVx1OTA2N1x1OTBERVx1RkEyNlx1OTExNVx1OTEyN1x1OTFEQVx1OTFEN1x1OTFERVx1OTFFRFx1OTFFRVx1OTFFNFx1OTFFNVx1OTIwNlx1OTIxMFx1OTIwQVx1OTIzQVx1OTI0MFx1OTIzQ1x1OTI0RVx1OTI1OVx1OTI1MVx1OTIzOVx1OTI2N1x1OTJBN1x1OTI3N1x1OTI3OFx1OTJFN1x1OTJEN1x1OTJEOVx1OTJEMFx1RkEyN1x1OTJENVx1OTJFMFx1OTJEM1x1OTMyNVx1OTMyMVx1OTJGQlx1RkEyOFx1OTMxRVx1OTJGRlx1OTMxRFx1OTMwMlx1OTM3MFx1OTM1N1x1OTNBNFx1OTNDNlx1OTNERVx1OTNGOFx1OTQzMVx1OTQ0NVx1OTQ0OFx1OTU5Mlx1RjlEQ1x1RkEyOVx1OTY5RFx1OTZBRlx1OTczM1x1OTczQlx1OTc0M1x1OTc0RFx1OTc0Rlx1OTc1MVx1OTc1NVx1OTg1N1x1OTg2NVx1RkEyQVx1RkEyQlx1OTkyN1x1RkEyQ1x1OTk5RVx1OUE0RVx1OUFEOVx1OUFEQ1x1OUI3NVx1OUI3Mlx1OUI4Rlx1OUJCMVx1OUJCQlx1OUMwMFx1OUQ3MFx1OUQ2Qlx1RkEyRFx1OUUxOVx1OUVEMVwiXSxcbltcImVlZWZcIixcIlx1MjE3MFwiLDksXCJcdUZGRTJcdUZGRTRcdUZGMDdcdUZGMDJcIl0sXG5bXCJmMDQwXCIsXCJcdUUwMDBcIiw2Ml0sXG5bXCJmMDgwXCIsXCJcdUUwM0ZcIiwxMjRdLFxuW1wiZjE0MFwiLFwiXHVFMEJDXCIsNjJdLFxuW1wiZjE4MFwiLFwiXHVFMEZCXCIsMTI0XSxcbltcImYyNDBcIixcIlx1RTE3OFwiLDYyXSxcbltcImYyODBcIixcIlx1RTFCN1wiLDEyNF0sXG5bXCJmMzQwXCIsXCJcdUUyMzRcIiw2Ml0sXG5bXCJmMzgwXCIsXCJcdUUyNzNcIiwxMjRdLFxuW1wiZjQ0MFwiLFwiXHVFMkYwXCIsNjJdLFxuW1wiZjQ4MFwiLFwiXHVFMzJGXCIsMTI0XSxcbltcImY1NDBcIixcIlx1RTNBQ1wiLDYyXSxcbltcImY1ODBcIixcIlx1RTNFQlwiLDEyNF0sXG5bXCJmNjQwXCIsXCJcdUU0NjhcIiw2Ml0sXG5bXCJmNjgwXCIsXCJcdUU0QTdcIiwxMjRdLFxuW1wiZjc0MFwiLFwiXHVFNTI0XCIsNjJdLFxuW1wiZjc4MFwiLFwiXHVFNTYzXCIsMTI0XSxcbltcImY4NDBcIixcIlx1RTVFMFwiLDYyXSxcbltcImY4ODBcIixcIlx1RTYxRlwiLDEyNF0sXG5bXCJmOTQwXCIsXCJcdUU2OUNcIl0sXG5bXCJmYTQwXCIsXCJcdTIxNzBcIiw5LFwiXHUyMTYwXCIsOSxcIlx1RkZFMlx1RkZFNFx1RkYwN1x1RkYwMlx1MzIzMVx1MjExNlx1MjEyMVx1MjIzNVx1N0U4QVx1ODkxQ1x1OTM0OFx1OTI4OFx1ODREQ1x1NEZDOVx1NzBCQlx1NjYzMVx1NjhDOFx1OTJGOVx1NjZGQlx1NUY0NVx1NEUyOFx1NEVFMVx1NEVGQ1x1NEYwMFx1NEYwM1x1NEYzOVx1NEY1Nlx1NEY5Mlx1NEY4QVx1NEY5QVx1NEY5NFx1NEZDRFx1NTA0MFx1NTAyMlx1NEZGRlx1NTAxRVx1NTA0Nlx1NTA3MFx1NTA0Mlx1NTA5NFx1NTBGNFx1NTBEOFx1NTE0QVwiXSxcbltcImZhODBcIixcIlx1NTE2NFx1NTE5RFx1NTFCRVx1NTFFQ1x1NTIxNVx1NTI5Q1x1NTJBNlx1NTJDMFx1NTJEQlx1NTMwMFx1NTMwN1x1NTMyNFx1NTM3Mlx1NTM5M1x1NTNCMlx1NTNERFx1RkEwRVx1NTQ5Q1x1NTQ4QVx1NTRBOVx1NTRGRlx1NTU4Nlx1NTc1OVx1NTc2NVx1NTdBQ1x1NTdDOFx1NTdDN1x1RkEwRlx1RkExMFx1NTg5RVx1NThCMlx1NTkwQlx1NTk1M1x1NTk1Qlx1NTk1RFx1NTk2M1x1NTlBNFx1NTlCQVx1NUI1Nlx1NUJDMFx1NzUyRlx1NUJEOFx1NUJFQ1x1NUMxRVx1NUNBNlx1NUNCQVx1NUNGNVx1NUQyN1x1NUQ1M1x1RkExMVx1NUQ0Mlx1NUQ2RFx1NURCOFx1NURCOVx1NUREMFx1NUYyMVx1NUYzNFx1NUY2N1x1NUZCN1x1NUZERVx1NjA1RFx1NjA4NVx1NjA4QVx1NjBERVx1NjBENVx1NjEyMFx1NjBGMlx1NjExMVx1NjEzN1x1NjEzMFx1NjE5OFx1NjIxM1x1NjJBNlx1NjNGNVx1NjQ2MFx1NjQ5RFx1NjRDRVx1NjU0RVx1NjYwMFx1NjYxNVx1NjYzQlx1NjYwOVx1NjYyRVx1NjYxRVx1NjYyNFx1NjY2NVx1NjY1N1x1NjY1OVx1RkExMlx1NjY3M1x1NjY5OVx1NjZBMFx1NjZCMlx1NjZCRlx1NjZGQVx1NjcwRVx1RjkyOVx1Njc2Nlx1NjdCQlx1Njg1Mlx1NjdDMFx1NjgwMVx1Njg0NFx1NjhDRlx1RkExM1x1Njk2OFx1RkExNFx1Njk5OFx1NjlFMlx1NkEzMFx1NkE2Qlx1NkE0Nlx1NkE3M1x1NkE3RVx1NkFFMlx1NkFFNFx1NkJENlx1NkMzRlx1NkM1Q1x1NkM4Nlx1NkM2Rlx1NkNEQVx1NkQwNFx1NkQ4N1x1NkQ2RlwiXSxcbltcImZiNDBcIixcIlx1NkQ5Nlx1NkRBQ1x1NkRDRlx1NkRGOFx1NkRGMlx1NkRGQ1x1NkUzOVx1NkU1Q1x1NkUyN1x1NkUzQ1x1NkVCRlx1NkY4OFx1NkZCNVx1NkZGNVx1NzAwNVx1NzAwN1x1NzAyOFx1NzA4NVx1NzBBQlx1NzEwRlx1NzEwNFx1NzE1Q1x1NzE0Nlx1NzE0N1x1RkExNVx1NzFDMVx1NzFGRVx1NzJCMVx1NzJCRVx1NzMyNFx1RkExNlx1NzM3N1x1NzNCRFx1NzNDOVx1NzNENlx1NzNFM1x1NzNEMlx1NzQwN1x1NzNGNVx1NzQyNlx1NzQyQVx1NzQyOVx1NzQyRVx1NzQ2Mlx1NzQ4OVx1NzQ5Rlx1NzUwMVx1NzU2Rlx1NzY4Mlx1NzY5Q1x1NzY5RVx1NzY5Qlx1NzZBNlx1RkExN1x1Nzc0Nlx1NTJBRlx1NzgyMVx1Nzg0RVx1Nzg2NFx1Nzg3QVx1NzkzMFx1RkExOFx1RkExOVwiXSxcbltcImZiODBcIixcIlx1RkExQVx1Nzk5NFx1RkExQlx1Nzk5Qlx1N0FEMVx1N0FFN1x1RkExQ1x1N0FFQlx1N0I5RVx1RkExRFx1N0Q0OFx1N0Q1Q1x1N0RCN1x1N0RBMFx1N0RENlx1N0U1Mlx1N0Y0N1x1N0ZBMVx1RkExRVx1ODMwMVx1ODM2Mlx1ODM3Rlx1ODNDN1x1ODNGNlx1ODQ0OFx1ODRCNFx1ODU1M1x1ODU1OVx1ODU2Qlx1RkExRlx1ODVCMFx1RkEyMFx1RkEyMVx1ODgwN1x1ODhGNVx1OEExMlx1OEEzN1x1OEE3OVx1OEFBN1x1OEFCRVx1OEFERlx1RkEyMlx1OEFGNlx1OEI1M1x1OEI3Rlx1OENGMFx1OENGNFx1OEQxMlx1OEQ3Nlx1RkEyM1x1OEVDRlx1RkEyNFx1RkEyNVx1OTA2N1x1OTBERVx1RkEyNlx1OTExNVx1OTEyN1x1OTFEQVx1OTFEN1x1OTFERVx1OTFFRFx1OTFFRVx1OTFFNFx1OTFFNVx1OTIwNlx1OTIxMFx1OTIwQVx1OTIzQVx1OTI0MFx1OTIzQ1x1OTI0RVx1OTI1OVx1OTI1MVx1OTIzOVx1OTI2N1x1OTJBN1x1OTI3N1x1OTI3OFx1OTJFN1x1OTJEN1x1OTJEOVx1OTJEMFx1RkEyN1x1OTJENVx1OTJFMFx1OTJEM1x1OTMyNVx1OTMyMVx1OTJGQlx1RkEyOFx1OTMxRVx1OTJGRlx1OTMxRFx1OTMwMlx1OTM3MFx1OTM1N1x1OTNBNFx1OTNDNlx1OTNERVx1OTNGOFx1OTQzMVx1OTQ0NVx1OTQ0OFx1OTU5Mlx1RjlEQ1x1RkEyOVx1OTY5RFx1OTZBRlx1OTczM1x1OTczQlx1OTc0M1x1OTc0RFx1OTc0Rlx1OTc1MVx1OTc1NVx1OTg1N1x1OTg2NVx1RkEyQVx1RkEyQlx1OTkyN1x1RkEyQ1x1OTk5RVx1OUE0RVx1OUFEOVwiXSxcbltcImZjNDBcIixcIlx1OUFEQ1x1OUI3NVx1OUI3Mlx1OUI4Rlx1OUJCMVx1OUJCQlx1OUMwMFx1OUQ3MFx1OUQ2Qlx1RkEyRFx1OUUxOVx1OUVEMVwiXVxuXVxuIiwgIltcbltcIjBcIixcIlxcdTAwMDBcIiwxMjddLFxuW1wiOGVhMVwiLFwiXHVGRjYxXCIsNjJdLFxuW1wiYTFhMVwiLFwiXHUzMDAwXHUzMDAxXHUzMDAyXHVGRjBDXHVGRjBFXHUzMEZCXHVGRjFBXHVGRjFCXHVGRjFGXHVGRjAxXHUzMDlCXHUzMDlDXHUwMEI0XHVGRjQwXHUwMEE4XHVGRjNFXHVGRkUzXHVGRjNGXHUzMEZEXHUzMEZFXHUzMDlEXHUzMDlFXHUzMDAzXHU0RUREXHUzMDA1XHUzMDA2XHUzMDA3XHUzMEZDXHUyMDE1XHUyMDEwXHVGRjBGXHVGRjNDXHVGRjVFXHUyMjI1XHVGRjVDXHUyMDI2XHUyMDI1XHUyMDE4XHUyMDE5XHUyMDFDXHUyMDFEXHVGRjA4XHVGRjA5XHUzMDE0XHUzMDE1XHVGRjNCXHVGRjNEXHVGRjVCXHVGRjVEXHUzMDA4XCIsOSxcIlx1RkYwQlx1RkYwRFx1MDBCMVx1MDBEN1x1MDBGN1x1RkYxRFx1MjI2MFx1RkYxQ1x1RkYxRVx1MjI2Nlx1MjI2N1x1MjIxRVx1MjIzNFx1MjY0Mlx1MjY0MFx1MDBCMFx1MjAzMlx1MjAzM1x1MjEwM1x1RkZFNVx1RkYwNFx1RkZFMFx1RkZFMVx1RkYwNVx1RkYwM1x1RkYwNlx1RkYwQVx1RkYyMFx1MDBBN1x1MjYwNlx1MjYwNVx1MjVDQlx1MjVDRlx1MjVDRVx1MjVDN1wiXSxcbltcImEyYTFcIixcIlx1MjVDNlx1MjVBMVx1MjVBMFx1MjVCM1x1MjVCMlx1MjVCRFx1MjVCQ1x1MjAzQlx1MzAxMlx1MjE5Mlx1MjE5MFx1MjE5MVx1MjE5M1x1MzAxM1wiXSxcbltcImEyYmFcIixcIlx1MjIwOFx1MjIwQlx1MjI4Nlx1MjI4N1x1MjI4Mlx1MjI4M1x1MjIyQVx1MjIyOVwiXSxcbltcImEyY2FcIixcIlx1MjIyN1x1MjIyOFx1RkZFMlx1MjFEMlx1MjFENFx1MjIwMFx1MjIwM1wiXSxcbltcImEyZGNcIixcIlx1MjIyMFx1MjJBNVx1MjMxMlx1MjIwMlx1MjIwN1x1MjI2MVx1MjI1Mlx1MjI2QVx1MjI2Qlx1MjIxQVx1MjIzRFx1MjIxRFx1MjIzNVx1MjIyQlx1MjIyQ1wiXSxcbltcImEyZjJcIixcIlx1MjEyQlx1MjAzMFx1MjY2Rlx1MjY2RFx1MjY2QVx1MjAyMFx1MjAyMVx1MDBCNlwiXSxcbltcImEyZmVcIixcIlx1MjVFRlwiXSxcbltcImEzYjBcIixcIlx1RkYxMFwiLDldLFxuW1wiYTNjMVwiLFwiXHVGRjIxXCIsMjVdLFxuW1wiYTNlMVwiLFwiXHVGRjQxXCIsMjVdLFxuW1wiYTRhMVwiLFwiXHUzMDQxXCIsODJdLFxuW1wiYTVhMVwiLFwiXHUzMEExXCIsODVdLFxuW1wiYTZhMVwiLFwiXHUwMzkxXCIsMTYsXCJcdTAzQTNcIiw2XSxcbltcImE2YzFcIixcIlx1MDNCMVwiLDE2LFwiXHUwM0MzXCIsNl0sXG5bXCJhN2ExXCIsXCJcdTA0MTBcIiw1LFwiXHUwNDAxXHUwNDE2XCIsMjVdLFxuW1wiYTdkMVwiLFwiXHUwNDMwXCIsNSxcIlx1MDQ1MVx1MDQzNlwiLDI1XSxcbltcImE4YTFcIixcIlx1MjUwMFx1MjUwMlx1MjUwQ1x1MjUxMFx1MjUxOFx1MjUxNFx1MjUxQ1x1MjUyQ1x1MjUyNFx1MjUzNFx1MjUzQ1x1MjUwMVx1MjUwM1x1MjUwRlx1MjUxM1x1MjUxQlx1MjUxN1x1MjUyM1x1MjUzM1x1MjUyQlx1MjUzQlx1MjU0Qlx1MjUyMFx1MjUyRlx1MjUyOFx1MjUzN1x1MjUzRlx1MjUxRFx1MjUzMFx1MjUyNVx1MjUzOFx1MjU0MlwiXSxcbltcImFkYTFcIixcIlx1MjQ2MFwiLDE5LFwiXHUyMTYwXCIsOV0sXG5bXCJhZGMwXCIsXCJcdTMzNDlcdTMzMTRcdTMzMjJcdTMzNERcdTMzMThcdTMzMjdcdTMzMDNcdTMzMzZcdTMzNTFcdTMzNTdcdTMzMERcdTMzMjZcdTMzMjNcdTMzMkJcdTMzNEFcdTMzM0JcdTMzOUNcdTMzOURcdTMzOUVcdTMzOEVcdTMzOEZcdTMzQzRcdTMzQTFcIl0sXG5bXCJhZGRmXCIsXCJcdTMzN0JcdTMwMURcdTMwMUZcdTIxMTZcdTMzQ0RcdTIxMjFcdTMyQTRcIiw0LFwiXHUzMjMxXHUzMjMyXHUzMjM5XHUzMzdFXHUzMzdEXHUzMzdDXHUyMjUyXHUyMjYxXHUyMjJCXHUyMjJFXHUyMjExXHUyMjFBXHUyMkE1XHUyMjIwXHUyMjFGXHUyMkJGXHUyMjM1XHUyMjI5XHUyMjJBXCJdLFxuW1wiYjBhMVwiLFwiXHU0RTlDXHU1NTE2XHU1QTAzXHU5NjNGXHU1NEMwXHU2MTFCXHU2MzI4XHU1OUY2XHU5MDIyXHU4NDc1XHU4MzFDXHU3QTUwXHU2MEFBXHU2M0UxXHU2RTI1XHU2NUVEXHU4NDY2XHU4MkE2XHU5QkY1XHU2ODkzXHU1NzI3XHU2NUExXHU2MjcxXHU1QjlCXHU1OUQwXHU4NjdCXHU5OEY0XHU3RDYyXHU3REJFXHU5QjhFXHU2MjE2XHU3QzlGXHU4OEI3XHU1Qjg5XHU1RUI1XHU2MzA5XHU2Njk3XHU2ODQ4XHU5NUM3XHU5NzhEXHU2NzRGXHU0RUU1XHU0RjBBXHU0RjREXHU0RjlEXHU1MDQ5XHU1NkYyXHU1OTM3XHU1OUQ0XHU1QTAxXHU1QzA5XHU2MERGXHU2MTBGXHU2MTcwXHU2NjEzXHU2OTA1XHU3MEJBXHU3NTRGXHU3NTcwXHU3OUZCXHU3REFEXHU3REVGXHU4MEMzXHU4NDBFXHU4ODYzXHU4QjAyXHU5MDU1XHU5MDdBXHU1MzNCXHU0RTk1XHU0RUE1XHU1N0RGXHU4MEIyXHU5MEMxXHU3OEVGXHU0RTAwXHU1OEYxXHU2RUEyXHU5MDM4XHU3QTMyXHU4MzI4XHU4MjhCXHU5QzJGXHU1MTQxXHU1MzcwXHU1NEJEXHU1NEUxXHU1NkUwXHU1OUZCXHU1RjE1XHU5OEYyXHU2REVCXHU4MEU0XHU4NTJEXCJdLFxuW1wiYjFhMVwiLFwiXHU5NjYyXHU5NjcwXHU5NkEwXHU5N0ZCXHU1NDBCXHU1M0YzXHU1Qjg3XHU3MENGXHU3RkJEXHU4RkMyXHU5NkU4XHU1MzZGXHU5RDVDXHU3QUJBXHU0RTExXHU3ODkzXHU4MUZDXHU2RTI2XHU1NjE4XHU1NTA0XHU2QjFEXHU4NTFBXHU5QzNCXHU1OUU1XHU1M0E5XHU2RDY2XHU3NERDXHU5NThGXHU1NjQyXHU0RTkxXHU5MDRCXHU5NkYyXHU4MzRGXHU5OTBDXHU1M0UxXHU1NUI2XHU1QjMwXHU1RjcxXHU2NjIwXHU2NkYzXHU2ODA0XHU2QzM4XHU2Q0YzXHU2RDI5XHU3NDVCXHU3NkM4XHU3QTRFXHU5ODM0XHU4MkYxXHU4ODVCXHU4QTYwXHU5MkVEXHU2REIyXHU3NUFCXHU3NkNBXHU5OUM1XHU2MEE2XHU4QjAxXHU4RDhBXHU5NUIyXHU2OThFXHU1M0FEXHU1MTg2XHU1NzEyXHU1ODMwXHU1OTQ0XHU1QkI0XHU1RUY2XHU2MDI4XHU2M0E5XHU2M0Y0XHU2Q0JGXHU2RjE0XHU3MDhFXHU3MTE0XHU3MTU5XHU3MUQ1XHU3MzNGXHU3RTAxXHU4Mjc2XHU4MkQxXHU4NTk3XHU5MDYwXHU5MjVCXHU5RDFCXHU1ODY5XHU2NUJDXHU2QzVBXHU3NTI1XHU1MUY5XHU1OTJFXHU1OTY1XHU1RjgwXHU1RkRDXCJdLFxuW1wiYjJhMVwiLFwiXHU2MkJDXHU2NUZBXHU2QTJBXHU2QjI3XHU2QkI0XHU3MzhCXHU3RkMxXHU4OTU2XHU5RDJDXHU5RDBFXHU5RUM0XHU1Q0ExXHU2Qzk2XHU4MzdCXHU1MTA0XHU1QzRCXHU2MUI2XHU4MUM2XHU2ODc2XHU3MjYxXHU0RTU5XHU0RkZBXHU1Mzc4XHU2MDY5XHU2RTI5XHU3QTRGXHU5N0YzXHU0RTBCXHU1MzE2XHU0RUVFXHU0RjU1XHU0RjNEXHU0RkExXHU0RjczXHU1MkEwXHU1M0VGXHU1NjA5XHU1OTBGXHU1QUMxXHU1QkI2XHU1QkUxXHU3OUQxXHU2Njg3XHU2NzlDXHU2N0I2XHU2QjRDXHU2Q0IzXHU3MDZCXHU3M0MyXHU3OThEXHU3OUJFXHU3QTNDXHU3Qjg3XHU4MkIxXHU4MkRCXHU4MzA0XHU4Mzc3XHU4M0VGXHU4M0QzXHU4NzY2XHU4QUIyXHU1NjI5XHU4Q0E4XHU4RkU2XHU5MDRFXHU5NzFFXHU4NjhBXHU0RkM0XHU1Q0U4XHU2MjExXHU3MjU5XHU3NTNCXHU4MUU1XHU4MkJEXHU4NkZFXHU4Q0MwXHU5NkM1XHU5OTEzXHU5OUQ1XHU0RUNCXHU0RjFBXHU4OUUzXHU1NkRFXHU1ODRBXHU1OENBXHU1RUZCXHU1RkVCXHU2MDJBXHU2MDk0XHU2MDYyXHU2MUQwXHU2MjEyXHU2MkQwXHU2NTM5XCJdLFxuW1wiYjNhMVwiLFwiXHU5QjQxXHU2NjY2XHU2OEIwXHU2RDc3XHU3MDcwXHU3NTRDXHU3Njg2XHU3RDc1XHU4MkE1XHU4N0Y5XHU5NThCXHU5NjhFXHU4QzlEXHU1MUYxXHU1MkJFXHU1OTE2XHU1NEIzXHU1QkIzXHU1RDE2XHU2MTY4XHU2OTgyXHU2REFGXHU3ODhEXHU4NENCXHU4ODU3XHU4QTcyXHU5M0E3XHU5QUI4XHU2RDZDXHU5OUE4XHU4NkQ5XHU1N0EzXHU2N0ZGXHU4NkNFXHU5MjBFXHU1MjgzXHU1Njg3XHU1NDA0XHU1RUQzXHU2MkUxXHU2NEI5XHU2ODNDXHU2ODM4XHU2QkJCXHU3MzcyXHU3OEJBXHU3QTZCXHU4OTlBXHU4OUQyXHU4RDZCXHU4RjAzXHU5MEVEXHU5NUEzXHU5Njk0XHU5NzY5XHU1QjY2XHU1Q0IzXHU2OTdEXHU5ODREXHU5ODRFXHU2MzlCXHU3QjIwXHU2QTJCXHU2QTdGXHU2OEI2XHU5QzBEXHU2RjVGXHU1MjcyXHU1NTlEXHU2MDcwXHU2MkVDXHU2RDNCXHU2RTA3XHU2RUQxXHU4NDVCXHU4OTEwXHU4RjQ0XHU0RTE0XHU5QzM5XHU1M0Y2XHU2OTFCXHU2QTNBXHU5Nzg0XHU2ODJBXHU1MTVDXHU3QUMzXHU4NEIyXHU5MURDXHU5MzhDXHU1NjVCXHU5RDI4XHU2ODIyXHU4MzA1XHU4NDMxXCJdLFxuW1wiYjRhMVwiLFwiXHU3Q0E1XHU1MjA4XHU4MkM1XHU3NEU2XHU0RTdFXHU0RjgzXHU1MUEwXHU1QkQyXHU1MjBBXHU1MkQ4XHU1MkU3XHU1REZCXHU1NTlBXHU1ODJBXHU1OUU2XHU1QjhDXHU1Qjk4XHU1QkRCXHU1RTcyXHU1RTc5XHU2MEEzXHU2MTFGXHU2MTYzXHU2MUJFXHU2M0RCXHU2NTYyXHU2N0QxXHU2ODUzXHU2OEZBXHU2QjNFXHU2QjUzXHU2QzU3XHU2RjIyXHU2Rjk3XHU2RjQ1XHU3NEIwXHU3NTE4XHU3NkUzXHU3NzBCXHU3QUZGXHU3QkExXHU3QzIxXHU3REU5XHU3RjM2XHU3RkYwXHU4MDlEXHU4MjY2XHU4MzlFXHU4OUIzXHU4QUNDXHU4Q0FCXHU5MDg0XHU5NDUxXHU5NTkzXHU5NTkxXHU5NUEyXHU5NjY1XHU5N0QzXHU5OTI4XHU4MjE4XHU0RTM4XHU1NDJCXHU1Q0I4XHU1RENDXHU3M0E5XHU3NjRDXHU3NzNDXHU1Q0E5XHU3RkVCXHU4RDBCXHU5NkMxXHU5ODExXHU5ODU0XHU5ODU4XHU0RjAxXHU0RjBFXHU1MzcxXHU1NTlDXHU1NjY4XHU1N0ZBXHU1OTQ3XHU1QjA5XHU1QkM0XHU1QzkwXHU1RTBDXHU1RTdFXHU1RkNDXHU2M0VFXHU2NzNBXHU2NUQ3XHU2NUUyXHU2NzFGXHU2OENCXHU2OEM0XCJdLFxuW1wiYjVhMVwiLFwiXHU2QTVGXHU1RTMwXHU2QkM1XHU2QzE3XHU2QzdEXHU3NTdGXHU3OTQ4XHU1QjYzXHU3QTAwXHU3RDAwXHU1RkJEXHU4OThGXHU4QTE4XHU4Q0I0XHU4RDc3XHU4RUNDXHU4RjFEXHU5OEUyXHU5QTBFXHU5QjNDXHU0RTgwXHU1MDdEXHU1MTAwXHU1OTkzXHU1QjlDXHU2MjJGXHU2MjgwXHU2NEVDXHU2QjNBXHU3MkEwXHU3NTkxXHU3OTQ3XHU3RkE5XHU4N0ZCXHU4QUJDXHU4QjcwXHU2M0FDXHU4M0NBXHU5N0EwXHU1NDA5XHU1NDAzXHU1NUFCXHU2ODU0XHU2QTU4XHU4QTcwXHU3ODI3XHU2Nzc1XHU5RUNEXHU1Mzc0XHU1QkEyXHU4MTFBXHU4NjUwXHU5MDA2XHU0RTE4XHU0RTQ1XHU0RUM3XHU0RjExXHU1M0NBXHU1NDM4XHU1QkFFXHU1RjEzXHU2MDI1XHU2NTUxXHU2NzNEXHU2QzQyXHU2QzcyXHU2Q0UzXHU3MDc4XHU3NDAzXHU3QTc2XHU3QUFFXHU3QjA4XHU3RDFBXHU3Q0ZFXHU3RDY2XHU2NUU3XHU3MjVCXHU1M0JCXHU1QzQ1XHU1REU4XHU2MkQyXHU2MkUwXHU2MzE5XHU2RTIwXHU4NjVBXHU4QTMxXHU4REREXHU5MkY4XHU2RjAxXHU3OUE2XHU5QjVBXHU0RUE4XHU0RUFCXHU0RUFDXCJdLFxuW1wiYjZhMVwiLFwiXHU0RjlCXHU0RkEwXHU1MEQxXHU1MTQ3XHU3QUY2XHU1MTcxXHU1MUY2XHU1MzU0XHU1MzIxXHU1MzdGXHU1M0VCXHU1NUFDXHU1ODgzXHU1Q0UxXHU1RjM3XHU1RjRBXHU2MDJGXHU2MDUwXHU2MDZEXHU2MzFGXHU2NTU5XHU2QTRCXHU2Q0MxXHU3MkMyXHU3MkVEXHU3N0VGXHU4MEY4XHU4MTA1XHU4MjA4XHU4NTRFXHU5MEY3XHU5M0UxXHU5N0ZGXHU5OTU3XHU5QTVBXHU0RUYwXHU1MUREXHU1QzJEXHU2NjgxXHU2OTZEXHU1QzQwXHU2NkYyXHU2OTc1XHU3Mzg5XHU2ODUwXHU3QzgxXHU1MEM1XHU1MkU0XHU1NzQ3XHU1REZFXHU5MzI2XHU2NUE0XHU2QjIzXHU2QjNEXHU3NDM0XHU3OTgxXHU3OUJEXHU3QjRCXHU3RENBXHU4MkI5XHU4M0NDXHU4ODdGXHU4OTVGXHU4QjM5XHU4RkQxXHU5MUQxXHU1NDFGXHU5MjgwXHU0RTVEXHU1MDM2XHU1M0U1XHU1MzNBXHU3MkQ3XHU3Mzk2XHU3N0U5XHU4MkU2XHU4RUFGXHU5OUM2XHU5OUM4XHU5OUQyXHU1MTc3XHU2MTFBXHU4NjVFXHU1NUIwXHU3QTdBXHU1MDc2XHU1QkQzXHU5MDQ3XHU5Njg1XHU0RTMyXHU2QURCXHU5MUU3XHU1QzUxXHU1QzQ4XCJdLFxuW1wiYjdhMVwiLFwiXHU2Mzk4XHU3QTlGXHU2QzkzXHU5Nzc0XHU4RjYxXHU3QUFBXHU3MThBXHU5Njg4XHU3QzgyXHU2ODE3XHU3RTcwXHU2ODUxXHU5MzZDXHU1MkYyXHU1NDFCXHU4NUFCXHU4QTEzXHU3RkE0XHU4RUNEXHU5MEUxXHU1MzY2XHU4ODg4XHU3OTQxXHU0RkMyXHU1MEJFXHU1MjExXHU1MTQ0XHU1NTUzXHU1NzJEXHU3M0VBXHU1NzhCXHU1OTUxXHU1RjYyXHU1Rjg0XHU2MDc1XHU2MTc2XHU2MTY3XHU2MUE5XHU2M0IyXHU2NDNBXHU2NTZDXHU2NjZGXHU2ODQyXHU2RTEzXHU3NTY2XHU3QTNEXHU3Q0ZCXHU3RDRDXHU3RDk5XHU3RTRCXHU3RjZCXHU4MzBFXHU4MzRBXHU4NkNEXHU4QTA4XHU4QTYzXHU4QjY2XHU4RUZEXHU5ODFBXHU5RDhGXHU4MkI4XHU4RkNFXHU5QkU4XHU1Mjg3XHU2MjFGXHU2NDgzXHU2RkMwXHU5Njk5XHU2ODQxXHU1MDkxXHU2QjIwXHU2QzdBXHU2RjU0XHU3QTc0XHU3RDUwXHU4ODQwXHU4QTIzXHU2NzA4XHU0RUY2XHU1MDM5XHU1MDI2XHU1MDY1XHU1MTdDXHU1MjM4XHU1MjYzXHU1NUE3XHU1NzBGXHU1ODA1XHU1QUNDXHU1RUZBXHU2MUIyXHU2MUY4XHU2MkYzXHU2MzcyXCJdLFxuW1wiYjhhMVwiLFwiXHU2OTFDXHU2QTI5XHU3MjdEXHU3MkFDXHU3MzJFXHU3ODE0XHU3ODZGXHU3RDc5XHU3NzBDXHU4MEE5XHU4OThCXHU4QjE5XHU4Q0UyXHU4RUQyXHU5MDYzXHU5Mzc1XHU5NjdBXHU5ODU1XHU5QTEzXHU5RTc4XHU1MTQzXHU1MzlGXHU1M0IzXHU1RTdCXHU1RjI2XHU2RTFCXHU2RTkwXHU3Mzg0XHU3M0ZFXHU3RDQzXHU4MjM3XHU4QTAwXHU4QUZBXHU5NjUwXHU0RTRFXHU1MDBCXHU1M0U0XHU1NDdDXHU1NkZBXHU1OUQxXHU1QjY0XHU1REYxXHU1RUFCXHU1RjI3XHU2MjM4XHU2NTQ1XHU2N0FGXHU2RTU2XHU3MkQwXHU3Q0NBXHU4OEI0XHU4MEExXHU4MEUxXHU4M0YwXHU4NjRFXHU4QTg3XHU4REU4XHU5MjM3XHU5NkM3XHU5ODY3XHU5RjEzXHU0RTk0XHU0RTkyXHU0RjBEXHU1MzQ4XHU1NDQ5XHU1NDNFXHU1QTJGXHU1RjhDXHU1RkExXHU2MDlGXHU2OEE3XHU2QThFXHU3NDVBXHU3ODgxXHU4QTlFXHU4QUE0XHU4Qjc3XHU5MTkwXHU0RTVFXHU5QkM5XHU0RUE0XHU0RjdDXHU0RkFGXHU1MDE5XHU1MDE2XHU1MTQ5XHU1MTZDXHU1MjlGXHU1MkI5XHU1MkZFXHU1MzlBXHU1M0UzXHU1NDExXCJdLFxuW1wiYjlhMVwiLFwiXHU1NDBFXHU1NTg5XHU1NzUxXHU1N0EyXHU1OTdEXHU1QjU0XHU1QjVEXHU1QjhGXHU1REU1XHU1REU3XHU1REY3XHU1RTc4XHU1RTgzXHU1RTlBXHU1RUI3XHU1RjE4XHU2MDUyXHU2MTRDXHU2Mjk3XHU2MkQ4XHU2M0E3XHU2NTNCXHU2NjAyXHU2NjQzXHU2NkY0XHU2NzZEXHU2ODIxXHU2ODk3XHU2OUNCXHU2QzVGXHU2RDJBXHU2RDY5XHU2RTJGXHU2RTlEXHU3NTMyXHU3Njg3XHU3ODZDXHU3QTNGXHU3Q0UwXHU3RDA1XHU3RDE4XHU3RDVFXHU3REIxXHU4MDE1XHU4MDAzXHU4MEFGXHU4MEIxXHU4MTU0XHU4MThGXHU4MjJBXHU4MzUyXHU4ODRDXHU4ODYxXHU4QjFCXHU4Q0EyXHU4Q0ZDXHU5MENBXHU5MTc1XHU5MjcxXHU3ODNGXHU5MkZDXHU5NUE0XHU5NjREXHU5ODA1XHU5OTk5XHU5QUQ4XHU5RDNCXHU1MjVCXHU1MkFCXHU1M0Y3XHU1NDA4XHU1OEQ1XHU2MkY3XHU2RkUwXHU4QzZBXHU4RjVGXHU5RUI5XHU1MTRCXHU1MjNCXHU1NDRBXHU1NkZEXHU3QTQwXHU5MTc3XHU5RDYwXHU5RUQyXHU3MzQ0XHU2RjA5XHU4MTcwXHU3NTExXHU1RkZEXHU2MERBXHU5QUE4XHU3MkRCXHU4RkJDXCJdLFxuW1wiYmFhMVwiLFwiXHU2QjY0XHU5ODAzXHU0RUNBXHU1NkYwXHU1NzY0XHU1OEJFXHU1QTVBXHU2MDY4XHU2MUM3XHU2NjBGXHU2NjA2XHU2ODM5XHU2OEIxXHU2REY3XHU3NUQ1XHU3RDNBXHU4MjZFXHU5QjQyXHU0RTlCXHU0RjUwXHU1M0M5XHU1NTA2XHU1RDZGXHU1REU2XHU1REVFXHU2N0ZCXHU2Qzk5XHU3NDczXHU3ODAyXHU4QTUwXHU5Mzk2XHU4OERGXHU1NzUwXHU1RUE3XHU2MzJCXHU1MEI1XHU1MEFDXHU1MThEXHU2NzAwXHU1NEM5XHU1ODVFXHU1OUJCXHU1QkIwXHU1RjY5XHU2MjREXHU2M0ExXHU2ODNEXHU2QjczXHU2RTA4XHU3MDdEXHU5MUM3XHU3MjgwXHU3ODE1XHU3ODI2XHU3OTZEXHU2NThFXHU3RDMwXHU4M0RDXHU4OEMxXHU4RjA5XHU5NjlCXHU1MjY0XHU1NzI4XHU2NzUwXHU3RjZBXHU4Q0ExXHU1MUI0XHU1NzQyXHU5NjJBXHU1ODNBXHU2OThBXHU4MEI0XHU1NEIyXHU1RDBFXHU1N0ZDXHU3ODk1XHU5REZBXHU0RjVDXHU1MjRBXHU1NDhCXHU2NDNFXHU2NjI4XHU2NzE0XHU2N0Y1XHU3QTg0XHU3QjU2XHU3RDIyXHU5MzJGXHU2ODVDXHU5QkFEXHU3QjM5XHU1MzE5XHU1MThBXHU1MjM3XCJdLFxuW1wiYmJhMVwiLFwiXHU1QkRGXHU2MkY2XHU2NEFFXHU2NEU2XHU2NzJEXHU2QkJBXHU4NUE5XHU5NkQxXHU3NjkwXHU5QkQ2XHU2MzRDXHU5MzA2XHU5QkFCXHU3NkJGXHU2NjUyXHU0RTA5XHU1MDk4XHU1M0MyXHU1QzcxXHU2MEU4XHU2NDkyXHU2NTYzXHU2ODVGXHU3MUU2XHU3M0NBXHU3NTIzXHU3Qjk3XHU3RTgyXHU4Njk1XHU4QjgzXHU4Q0RCXHU5MTc4XHU5OTEwXHU2NUFDXHU2NkFCXHU2QjhCXHU0RUQ1XHU0RUQ0XHU0RjNBXHU0RjdGXHU1MjNBXHU1M0Y4XHU1M0YyXHU1NUUzXHU1NkRCXHU1OEVCXHU1OUNCXHU1OUM5XHU1OUZGXHU1QjUwXHU1QzREXHU1RTAyXHU1RTJCXHU1RkQ3XHU2MDFEXHU2MzA3XHU2NTJGXHU1QjVDXHU2NUFGXHU2NUJEXHU2NUU4XHU2NzlEXHU2QjYyXHU2QjdCXHU2QzBGXHU3MzQ1XHU3OTQ5XHU3OUMxXHU3Q0Y4XHU3RDE5XHU3RDJCXHU4MEEyXHU4MTAyXHU4MUYzXHU4OTk2XHU4QTVFXHU4QTY5XHU4QTY2XHU4QThDXHU4QUVFXHU4Q0M3XHU4Q0RDXHU5NkNDXHU5OEZDXHU2QjZGXHU0RThCXHU0RjNDXHU0RjhEXHU1MTUwXHU1QjU3XHU1QkZBXHU2MTQ4XHU2MzAxXHU2NjQyXCJdLFxuW1wiYmNhMVwiLFwiXHU2QjIxXHU2RUNCXHU2Q0JCXHU3MjNFXHU3NEJEXHU3NUQ0XHU3OEMxXHU3OTNBXHU4MDBDXHU4MDMzXHU4MUVBXHU4NDk0XHU4RjlFXHU2QzUwXHU5RTdGXHU1RjBGXHU4QjU4XHU5RDJCXHU3QUZBXHU4RUY4XHU1QjhEXHU5NkVCXHU0RTAzXHU1M0YxXHU1N0Y3XHU1OTMxXHU1QUM5XHU1QkE0XHU2MDg5XHU2RTdGXHU2RjA2XHU3NUJFXHU4Q0VBXHU1QjlGXHU4NTAwXHU3QkUwXHU1MDcyXHU2N0Y0XHU4MjlEXHU1QzYxXHU4NTRBXHU3RTFFXHU4MjBFXHU1MTk5XHU1QzA0XHU2MzY4XHU4RDY2XHU2NTlDXHU3MTZFXHU3OTNFXHU3RDE3XHU4MDA1XHU4QjFEXHU4RUNBXHU5MDZFXHU4NkM3XHU5MEFBXHU1MDFGXHU1MkZBXHU1QzNBXHU2NzUzXHU3MDdDXHU3MjM1XHU5MTRDXHU5MUM4XHU5MzJCXHU4MkU1XHU1QkMyXHU1RjMxXHU2MEY5XHU0RTNCXHU1M0Q2XHU1Qjg4XHU2MjRCXHU2NzMxXHU2QjhBXHU3MkU5XHU3M0UwXHU3QTJFXHU4MTZCXHU4REEzXHU5MTUyXHU5OTk2XHU1MTEyXHU1M0Q3XHU1NDZBXHU1QkZGXHU2Mzg4XHU2QTM5XHU3REFDXHU5NzAwXHU1NkRBXHU1M0NFXHU1NDY4XCJdLFxuW1wiYmRhMVwiLFwiXHU1Qjk3XHU1QzMxXHU1RERFXHU0RkVFXHU2MTAxXHU2MkZFXHU2RDMyXHU3OUMwXHU3OUNCXHU3RDQyXHU3RTREXHU3RkQyXHU4MUVEXHU4MjFGXHU4NDkwXHU4ODQ2XHU4OTcyXHU4QjkwXHU4RTc0XHU4RjJGXHU5MDMxXHU5MTRCXHU5MTZDXHU5NkM2XHU5MTlDXHU0RUMwXHU0RjRGXHU1MTQ1XHU1MzQxXHU1RjkzXHU2MjBFXHU2N0Q0XHU2QzQxXHU2RTBCXHU3MzYzXHU3RTI2XHU5MUNEXHU5MjgzXHU1M0Q0XHU1OTE5XHU1QkJGXHU2REQxXHU3OTVEXHU3RTJFXHU3QzlCXHU1ODdFXHU3MTlGXHU1MUZBXHU4ODUzXHU4RkYwXHU0RkNBXHU1Q0ZCXHU2NjI1XHU3N0FDXHU3QUUzXHU4MjFDXHU5OUZGXHU1MUM2XHU1RkFBXHU2NUVDXHU2OTZGXHU2Qjg5XHU2REYzXHU2RTk2XHU2RjY0XHU3NkZFXHU3RDE0XHU1REUxXHU5MDc1XHU5MTg3XHU5ODA2XHU1MUU2XHU1MjFEXHU2MjQwXHU2NjkxXHU2NkQ5XHU2RTFBXHU1RUI2XHU3REQyXHU3RjcyXHU2NkY4XHU4NUFGXHU4NUY3XHU4QUY4XHU1MkE5XHU1M0Q5XHU1OTczXHU1RThGXHU1RjkwXHU2MDU1XHU5MkU0XHU5NjY0XHU1MEI3XHU1MTFGXCJdLFxuW1wiYmVhMVwiLFwiXHU1MkREXHU1MzIwXHU1MzQ3XHU1M0VDXHU1NEU4XHU1NTQ2XHU1NTMxXHU1NjE3XHU1OTY4XHU1OUJFXHU1QTNDXHU1QkI1XHU1QzA2XHU1QzBGXHU1QzExXHU1QzFBXHU1RTg0XHU1RThBXHU1RUUwXHU1RjcwXHU2MjdGXHU2Mjg0XHU2MkRCXHU2MzhDXHU2Mzc3XHU2NjA3XHU2NjBDXHU2NjJEXHU2Njc2XHU2NzdFXHU2OEEyXHU2QTFGXHU2QTM1XHU2Q0JDXHU2RDg4XHU2RTA5XHU2RTU4XHU3MTNDXHU3MTI2XHU3MTY3XHU3NUM3XHU3NzAxXHU3ODVEXHU3OTAxXHU3OTY1XHU3OUYwXHU3QUUwXHU3QjExXHU3Q0E3XHU3RDM5XHU4MDk2XHU4M0Q2XHU4NDhCXHU4NTQ5XHU4ODVEXHU4OEYzXHU4QTFGXHU4QTNDXHU4QTU0XHU4QTczXHU4QzYxXHU4Q0RFXHU5MUE0XHU5MjY2XHU5MzdFXHU5NDE4XHU5NjlDXHU5Nzk4XHU0RTBBXHU0RTA4XHU0RTFFXHU0RTU3XHU1MTk3XHU1MjcwXHU1N0NFXHU1ODM0XHU1OENDXHU1QjIyXHU1RTM4XHU2MEM1XHU2NEZFXHU2NzYxXHU2NzU2XHU2RDQ0XHU3MkI2XHU3NTczXHU3QTYzXHU4NEI4XHU4QjcyXHU5MUI4XHU5MzIwXHU1NjMxXHU1N0Y0XHU5OEZFXCJdLFxuW1wiYmZhMVwiLFwiXHU2MkVEXHU2OTBEXHU2Qjk2XHU3MUVEXHU3RTU0XHU4MDc3XHU4MjcyXHU4OUU2XHU5OERGXHU4NzU1XHU4RkIxXHU1QzNCXHU0RjM4XHU0RkUxXHU0RkI1XHU1NTA3XHU1QTIwXHU1QkREXHU1QkU5XHU1RkMzXHU2MTRFXHU2MzJGXHU2NUIwXHU2NjRCXHU2OEVFXHU2OTlCXHU2RDc4XHU2REYxXHU3NTMzXHU3NUI5XHU3NzFGXHU3OTVFXHU3OUU2XHU3RDMzXHU4MUUzXHU4MkFGXHU4NUFBXHU4OUFBXHU4QTNBXHU4RUFCXHU4RjlCXHU5MDMyXHU5MUREXHU5NzA3XHU0RUJBXHU0RUMxXHU1MjAzXHU1ODc1XHU1OEVDXHU1QzBCXHU3NTFBXHU1QzNEXHU4MTRFXHU4QTBBXHU4RkM1XHU5NjYzXHU5NzZEXHU3QjI1XHU4QUNGXHU5ODA4XHU5MTYyXHU1NkYzXHU1M0E4XHU5MDE3XHU1NDM5XHU1NzgyXHU1RTI1XHU2M0E4XHU2QzM0XHU3MDhBXHU3NzYxXHU3QzhCXHU3RkUwXHU4ODcwXHU5MDQyXHU5MTU0XHU5MzEwXHU5MzE4XHU5NjhGXHU3NDVFXHU5QUM0XHU1RDA3XHU1RDY5XHU2NTcwXHU2N0EyXHU4REE4XHU5NkRCXHU2MzZFXHU2NzQ5XHU2OTE5XHU4M0M1XHU5ODE3XHU5NkMwXHU4OEZFXCJdLFxuW1wiYzBhMVwiLFwiXHU2Rjg0XHU2NDdBXHU1QkY4XHU0RTE2XHU3MDJDXHU3NTVEXHU2NjJGXHU1MUM0XHU1MjM2XHU1MkUyXHU1OUQzXHU1RjgxXHU2MDI3XHU2MjEwXHU2NTNGXHU2NTc0XHU2NjFGXHU2Njc0XHU2OEYyXHU2ODE2XHU2QjYzXHU2RTA1XHU3MjcyXHU3NTFGXHU3NkRCXHU3Q0JFXHU4MDU2XHU1OEYwXHU4OEZEXHU4OTdGXHU4QUEwXHU4QTkzXHU4QUNCXHU5MDFEXHU5MTkyXHU5NzUyXHU5NzU5XHU2NTg5XHU3QTBFXHU4MTA2XHU5NkJCXHU1RTJEXHU2MERDXHU2MjFBXHU2NUE1XHU2NjE0XHU2NzkwXHU3N0YzXHU3QTREXHU3QzREXHU3RTNFXHU4MTBBXHU4Q0FDXHU4RDY0XHU4REUxXHU4RTVGXHU3OEE5XHU1MjA3XHU2MkQ5XHU2M0E1XHU2NDQyXHU2Mjk4XHU4QTJEXHU3QTgzXHU3QkMwXHU4QUFDXHU5NkVBXHU3RDc2XHU4MjBDXHU4NzQ5XHU0RUQ5XHU1MTQ4XHU1MzQzXHU1MzYwXHU1QkEzXHU1QzAyXHU1QzE2XHU1REREXHU2MjI2XHU2MjQ3XHU2NEIwXHU2ODEzXHU2ODM0XHU2Q0M5XHU2RDQ1XHU2RDE3XHU2N0QzXHU2RjVDXHU3MTRFXHU3MTdEXHU2NUNCXHU3QTdGXHU3QkFEXHU3RERBXCJdLFxuW1wiYzFhMVwiLFwiXHU3RTRBXHU3RkE4XHU4MTdBXHU4MjFCXHU4MjM5XHU4NUE2XHU4QTZFXHU4Q0NFXHU4REY1XHU5MDc4XHU5MDc3XHU5MkFEXHU5MjkxXHU5NTgzXHU5QkFFXHU1MjREXHU1NTg0XHU2RjM4XHU3MTM2XHU1MTY4XHU3OTg1XHU3RTU1XHU4MUIzXHU3Q0NFXHU1NjRDXHU1ODUxXHU1Q0E4XHU2M0FBXHU2NkZFXHU2NkZEXHU2OTVBXHU3MkQ5XHU3NThGXHU3NThFXHU3OTBFXHU3OTU2XHU3OURGXHU3Qzk3XHU3RDIwXHU3RDQ0XHU4NjA3XHU4QTM0XHU5NjNCXHU5MDYxXHU5RjIwXHU1MEU3XHU1Mjc1XHU1M0NDXHU1M0UyXHU1MDA5XHU1NUFBXHU1OEVFXHU1OTRGXHU3MjNEXHU1QjhCXHU1QzY0XHU1MzFEXHU2MEUzXHU2MEYzXHU2MzVDXHU2MzgzXHU2MzNGXHU2M0JCXHU2NENEXHU2NUU5XHU2NkY5XHU1REUzXHU2OUNEXHU2OUZEXHU2RjE1XHU3MUU1XHU0RTg5XHU3NUU5XHU3NkY4XHU3QTkzXHU3Q0RGXHU3RENGXHU3RDlDXHU4MDYxXHU4MzQ5XHU4MzU4XHU4NDZDXHU4NEJDXHU4NUZCXHU4OEM1XHU4RDcwXHU5MDAxXHU5MDZEXHU5Mzk3XHU5NzFDXHU5QTEyXHU1MENGXHU1ODk3XHU2MThFXCJdLFxuW1wiYzJhMVwiLFwiXHU4MUQzXHU4NTM1XHU4RDA4XHU5MDIwXHU0RkMzXHU1MDc0XHU1MjQ3XHU1MzczXHU2MDZGXHU2MzQ5XHU2NzVGXHU2RTJDXHU4REIzXHU5MDFGXHU0RkQ3XHU1QzVFXHU4Q0NBXHU2NUNGXHU3RDlBXHU1MzUyXHU4ODk2XHU1MTc2XHU2M0MzXHU1QjU4XHU1QjZCXHU1QzBBXHU2NDBEXHU2NzUxXHU5MDVDXHU0RUQ2XHU1OTFBXHU1OTJBXHU2QzcwXHU4QTUxXHU1NTNFXHU1ODE1XHU1OUE1XHU2MEYwXHU2MjUzXHU2N0MxXHU4MjM1XHU2OTU1XHU5NjQwXHU5OUM0XHU5QTI4XHU0RjUzXHU1ODA2XHU1QkZFXHU4MDEwXHU1Q0IxXHU1RTJGXHU1Rjg1XHU2MDIwXHU2MTRCXHU2MjM0XHU2NkZGXHU2Q0YwXHU2RURFXHU4MENFXHU4MTdGXHU4MkQ0XHU4ODhCXHU4Q0I4XHU5MDAwXHU5MDJFXHU5NjhBXHU5RURCXHU5QkRCXHU0RUUzXHU1M0YwXHU1OTI3XHU3QjJDXHU5MThEXHU5ODRDXHU5REY5XHU2RUREXHU3MDI3XHU1MzUzXHU1NTQ0XHU1Qjg1XHU2MjU4XHU2MjlFXHU2MkQzXHU2Q0EyXHU2RkVGXHU3NDIyXHU4QTE3XHU5NDM4XHU2RkMxXHU4QUZFXHU4MzM4XHU1MUU3XHU4NkY4XHU1M0VBXCJdLFxuW1wiYzNhMVwiLFwiXHU1M0U5XHU0RjQ2XHU5MDU0XHU4RkIwXHU1OTZBXHU4MTMxXHU1REZEXHU3QUVBXHU4RkJGXHU2OERBXHU4QzM3XHU3MkY4XHU5QzQ4XHU2QTNEXHU4QUIwXHU0RTM5XHU1MzU4XHU1NjA2XHU1NzY2XHU2MkM1XHU2M0EyXHU2NUU2XHU2QjRFXHU2REUxXHU2RTVCXHU3MEFEXHU3N0VEXHU3QUVGXHU3QkFBXHU3REJCXHU4MDNEXHU4MEM2XHU4NkNCXHU4QTk1XHU5MzVCXHU1NkUzXHU1OEM3XHU1RjNFXHU2NUFEXHU2Njk2XHU2QTgwXHU2QkI1XHU3NTM3XHU4QUM3XHU1MDI0XHU3N0U1XHU1NzMwXHU1RjFCXHU2MDY1XHU2NjdBXHU2QzYwXHU3NUY0XHU3QTFBXHU3RjZFXHU4MUY0XHU4NzE4XHU5MDQ1XHU5OUIzXHU3QkM5XHU3NTVDXHU3QUY5XHU3QjUxXHU4NEM0XHU5MDEwXHU3OUU5XHU3QTkyXHU4MzM2XHU1QUUxXHU3NzQwXHU0RTJEXHU0RUYyXHU1Qjk5XHU1RkUwXHU2MkJEXHU2NjNDXHU2N0YxXHU2Q0U4XHU4NjZCXHU4ODc3XHU4QTNCXHU5MTRFXHU5MkYzXHU5OUQwXHU2QTE3XHU3MDI2XHU3MzJBXHU4MkU3XHU4NDU3XHU4Q0FGXHU0RTAxXHU1MTQ2XHU1MUNCXHU1NThCXHU1QkY1XCJdLFxuW1wiYzRhMVwiLFwiXHU1RTE2XHU1RTMzXHU1RTgxXHU1RjE0XHU1RjM1XHU1RjZCXHU1RkI0XHU2MUYyXHU2MzExXHU2NkEyXHU2NzFEXHU2RjZFXHU3MjUyXHU3NTNBXHU3NzNBXHU4MDc0XHU4MTM5XHU4MTc4XHU4Nzc2XHU4QUJGXHU4QURDXHU4RDg1XHU4REYzXHU5MjlBXHU5NTc3XHU5ODAyXHU5Q0U1XHU1MkM1XHU2MzU3XHU3NkY0XHU2NzE1XHU2Qzg4XHU3M0NEXHU4Q0MzXHU5M0FFXHU5NjczXHU2RDI1XHU1ODlDXHU2OTBFXHU2OUNDXHU4RkZEXHU5MzlBXHU3NURCXHU5MDFBXHU1ODVBXHU2ODAyXHU2M0I0XHU2OUZCXHU0RjQzXHU2RjJDXHU2N0Q4XHU4RkJCXHU4NTI2XHU3REI0XHU5MzU0XHU2OTNGXHU2RjcwXHU1NzZBXHU1OEY3XHU1QjJDXHU3RDJDXHU3MjJBXHU1NDBBXHU5MUUzXHU5REI0XHU0RUFEXHU0RjRFXHU1MDVDXHU1MDc1XHU1MjQzXHU4QzlFXHU1NDQ4XHU1ODI0XHU1QjlBXHU1RTFEXHU1RTk1XHU1RUFEXHU1RUY3XHU1RjFGXHU2MDhDXHU2MkI1XHU2MzNBXHU2M0QwXHU2OEFGXHU2QzQwXHU3ODg3XHU3OThFXHU3QTBCXHU3REUwXHU4MjQ3XHU4QTAyXHU4QUU2XHU4RTQ0XHU5MDEzXCJdLFxuW1wiYzVhMVwiLFwiXHU5MEI4XHU5MTJEXHU5MUQ4XHU5RjBFXHU2Q0U1XHU2NDU4XHU2NEUyXHU2NTc1XHU2RUY0XHU3Njg0XHU3QjFCXHU5MDY5XHU5M0QxXHU2RUJBXHU1NEYyXHU1RkI5XHU2NEE0XHU4RjREXHU4RkVEXHU5MjQ0XHU1MTc4XHU1ODZCXHU1OTI5XHU1QzU1XHU1RTk3XHU2REZCXHU3RThGXHU3NTFDXHU4Q0JDXHU4RUUyXHU5ODVCXHU3MEI5XHU0RjFEXHU2QkJGXHU2RkIxXHU3NTMwXHU5NkZCXHU1MTRFXHU1NDEwXHU1ODM1XHU1ODU3XHU1OUFDXHU1QzYwXHU1RjkyXHU2NTk3XHU2NzVDXHU2RTIxXHU3NjdCXHU4M0RGXHU4Q0VEXHU5MDE0XHU5MEZEXHU5MzREXHU3ODI1XHU3ODNBXHU1MkFBXHU1RUE2XHU1NzFGXHU1OTc0XHU2MDEyXHU1MDEyXHU1MTVBXHU1MUFDXHU1MUNEXHU1MjAwXHU1NTEwXHU1ODU0XHU1ODU4XHU1OTU3XHU1Qjk1XHU1Q0Y2XHU1RDhCXHU2MEJDXHU2Mjk1XHU2NDJEXHU2NzcxXHU2ODQzXHU2OEJDXHU2OERGXHU3NkQ3XHU2REQ4XHU2RTZGXHU2RDlCXHU3MDZGXHU3MUM4XHU1RjUzXHU3NUQ4XHU3OTc3XHU3QjQ5XHU3QjU0XHU3QjUyXHU3Q0Q2XHU3RDcxXHU1MjMwXCJdLFxuW1wiYzZhMVwiLFwiXHU4NDYzXHU4NTY5XHU4NUU0XHU4QTBFXHU4QjA0XHU4QzQ2XHU4RTBGXHU5MDAzXHU5MDBGXHU5NDE5XHU5Njc2XHU5ODJEXHU5QTMwXHU5NUQ4XHU1MENEXHU1MkQ1XHU1NDBDXHU1ODAyXHU1QzBFXHU2MUE3XHU2NDlFXHU2RDFFXHU3N0IzXHU3QUU1XHU4MEY0XHU4NDA0XHU5MDUzXHU5Mjg1XHU1Q0UwXHU5RDA3XHU1MzNGXHU1Rjk3XHU1RkIzXHU2RDlDXHU3Mjc5XHU3NzYzXHU3OUJGXHU3QkU0XHU2QkQyXHU3MkVDXHU4QUFEXHU2ODAzXHU2QTYxXHU1MUY4XHU3QTgxXHU2OTM0XHU1QzRBXHU5Q0Y2XHU4MkVCXHU1QkM1XHU5MTQ5XHU3MDFFXHU1Njc4XHU1QzZGXHU2MEM3XHU2NTY2XHU2QzhDXHU4QzVBXHU5MDQxXHU5ODEzXHU1NDUxXHU2NkM3XHU5MjBEXHU1OTQ4XHU5MEEzXHU1MTg1XHU0RTREXHU1MUVBXHU4NTk5XHU4QjBFXHU3MDU4XHU2MzdBXHU5MzRCXHU2OTYyXHU5OUI0XHU3RTA0XHU3NTc3XHU1MzU3XHU2OTYwXHU4RURGXHU5NkUzXHU2QzVEXHU0RThDXHU1QzNDXHU1RjEwXHU4RkU5XHU1MzAyXHU4Q0QxXHU4MDg5XHU4Njc5XHU1RUZGXHU2NUU1XHU0RTczXHU1MTY1XCJdLFxuW1wiYzdhMVwiLFwiXHU1OTgyXHU1QzNGXHU5N0VFXHU0RUZCXHU1OThBXHU1RkNEXHU4QThEXHU2RkUxXHU3OUIwXHU3OTYyXHU1QkU3XHU4NDcxXHU3MzJCXHU3MUIxXHU1RTc0XHU1RkY1XHU2MzdCXHU2NDlBXHU3MUMzXHU3Qzk4XHU0RTQzXHU1RUZDXHU0RTRCXHU1N0RDXHU1NkEyXHU2MEE5XHU2RkMzXHU3RDBEXHU4MEZEXHU4MTMzXHU4MUJGXHU4RkIyXHU4OTk3XHU4NkE0XHU1REY0XHU2MjhBXHU2NEFEXHU4OTg3XHU2Nzc3XHU2Q0UyXHU2RDNFXHU3NDM2XHU3ODM0XHU1QTQ2XHU3Rjc1XHU4MkFEXHU5OUFDXHU0RkYzXHU1RUMzXHU2MkREXHU2MzkyXHU2NTU3XHU2NzZGXHU3NkMzXHU3MjRDXHU4MENDXHU4MEJBXHU4RjI5XHU5MTREXHU1MDBEXHU1N0Y5XHU1QTkyXHU2ODg1XHU2OTczXHU3MTY0XHU3MkZEXHU4Q0I3XHU1OEYyXHU4Q0UwXHU5NjZBXHU5MDE5XHU4NzdGXHU3OUU0XHU3N0U3XHU4NDI5XHU0RjJGXHU1MjY1XHU1MzVBXHU2MkNEXHU2N0NGXHU2Q0NBXHU3NjdEXHU3Qjk0XHU3Qzk1XHU4MjM2XHU4NTg0XHU4RkVCXHU2NkREXHU2RjIwXHU3MjA2XHU3RTFCXHU4M0FCXHU5OUMxXHU5RUE2XCJdLFxuW1wiYzhhMVwiLFwiXHU1MUZEXHU3QkIxXHU3ODcyXHU3QkI4XHU4MDg3XHU3QjQ4XHU2QUU4XHU1RTYxXHU4MDhDXHU3NTUxXHU3NTYwXHU1MTZCXHU5MjYyXHU2RThDXHU3NjdBXHU5MTk3XHU5QUVBXHU0RjEwXHU3RjcwXHU2MjlDXHU3QjRGXHU5NUE1XHU5Q0U5XHU1NjdBXHU1ODU5XHU4NkU0XHU5NkJDXHU0RjM0XHU1MjI0XHU1MzRBXHU1M0NEXHU1M0RCXHU1RTA2XHU2NDJDXHU2NTkxXHU2NzdGXHU2QzNFXHU2QzRFXHU3MjQ4XHU3MkFGXHU3M0VEXHU3NTU0XHU3RTQxXHU4MjJDXHU4NUU5XHU4Q0E5XHU3QkM0XHU5MUM2XHU3MTY5XHU5ODEyXHU5OEVGXHU2MzNEXHU2NjY5XHU3NTZBXHU3NkU0XHU3OEQwXHU4NTQzXHU4NkVFXHU1MzJBXHU1MzUxXHU1NDI2XHU1OTgzXHU1RTg3XHU1RjdDXHU2MEIyXHU2MjQ5XHU2Mjc5XHU2MkFCXHU2NTkwXHU2QkQ0XHU2Q0NDXHU3NUIyXHU3NkFFXHU3ODkxXHU3OUQ4XHU3RENCXHU3Rjc3XHU4MEE1XHU4OEFCXHU4QUI5XHU4Q0JCXHU5MDdGXHU5NzVFXHU5OERCXHU2QTBCXHU3QzM4XHU1MDk5XHU1QzNFXHU1RkFFXHU2Nzg3XHU2QkQ4XHU3NDM1XHU3NzA5XHU3RjhFXCJdLFxuW1wiYzlhMVwiLFwiXHU5RjNCXHU2N0NBXHU3QTE3XHU1MzM5XHU3NThCXHU5QUVEXHU1RjY2XHU4MTlEXHU4M0YxXHU4MDk4XHU1RjNDXHU1RkM1XHU3NTYyXHU3QjQ2XHU5MDNDXHU2ODY3XHU1OUVCXHU1QTlCXHU3RDEwXHU3NjdFXHU4QjJDXHU0RkY1XHU1RjZBXHU2QTE5XHU2QzM3XHU2RjAyXHU3NEUyXHU3OTY4XHU4ODY4XHU4QTU1XHU4Qzc5XHU1RURGXHU2M0NGXHU3NUM1XHU3OUQyXHU4MkQ3XHU5MzI4XHU5MkYyXHU4NDlDXHU4NkVEXHU5QzJEXHU1NEMxXHU1RjZDXHU2NThDXHU2RDVDXHU3MDE1XHU4Q0E3XHU4Q0QzXHU5ODNCXHU2NTRGXHU3NEY2XHU0RTBEXHU0RUQ4XHU1N0UwXHU1OTJCXHU1QTY2XHU1QkNDXHU1MUE4XHU1RTAzXHU1RTlDXHU2MDE2XHU2Mjc2XHU2NTc3XHU2NUE3XHU2NjZFXHU2RDZFXHU3MjM2XHU3QjI2XHU4MTUwXHU4MTlBXHU4Mjk5XHU4QjVDXHU4Q0EwXHU4Q0U2XHU4RDc0XHU5NjFDXHU5NjQ0XHU0RkFFXHU2NEFCXHU2QjY2XHU4MjFFXHU4NDYxXHU4NTZBXHU5MEU4XHU1QzAxXHU2OTUzXHU5OEE4XHU4NDdBXHU4NTU3XHU0RjBGXHU1MjZGXHU1RkE5XHU1RTQ1XHU2NzBEXCJdLFxuW1wiY2FhMVwiLFwiXHU3OThGXHU4MTc5XHU4OTA3XHU4OTg2XHU2REY1XHU1RjE3XHU2MjU1XHU2Q0I4XHU0RUNGXHU3MjY5XHU5QjkyXHU1MjA2XHU1NDNCXHU1Njc0XHU1OEIzXHU2MUE0XHU2MjZFXHU3MTFBXHU1OTZFXHU3Qzg5XHU3Q0RFXHU3RDFCXHU5NkYwXHU2NTg3XHU4MDVFXHU0RTE5XHU0Rjc1XHU1MTc1XHU1ODQwXHU1RTYzXHU1RTczXHU1RjBBXHU2N0M0XHU0RTI2XHU4NTNEXHU5NTg5XHU5NjVCXHU3QzczXHU5ODAxXHU1MEZCXHU1OEMxXHU3NjU2XHU3OEE3XHU1MjI1XHU3N0E1XHU4NTExXHU3Qjg2XHU1MDRGXHU1OTA5XHU3MjQ3XHU3QkM3XHU3REU4XHU4RkJBXHU4RkQ0XHU5MDREXHU0RkJGXHU1MkM5XHU1QTI5XHU1RjAxXHU5N0FEXHU0RkREXHU4MjE3XHU5MkVBXHU1NzAzXHU2MzU1XHU2QjY5XHU3NTJCXHU4OERDXHU4RjE0XHU3QTQyXHU1MkRGXHU1ODkzXHU2MTU1XHU2MjBBXHU2NkFFXHU2QkNEXHU3QzNGXHU4M0U5XHU1MDIzXHU0RkY4XHU1MzA1XHU1NDQ2XHU1ODMxXHU1OTQ5XHU1QjlEXHU1Q0YwXHU1Q0VGXHU1RDI5XHU1RTk2XHU2MkIxXHU2MzY3XHU2NTNFXHU2NUI5XHU2NzBCXCJdLFxuW1wiY2JhMVwiLFwiXHU2Q0Q1XHU2Q0UxXHU3MEY5XHU3ODMyXHU3RTJCXHU4MERFXHU4MkIzXHU4NDBDXHU4NEVDXHU4NzAyXHU4OTEyXHU4QTJBXHU4QzRBXHU5MEE2XHU5MkQyXHU5OEZEXHU5Q0YzXHU5RDZDXHU0RTRGXHU0RUExXHU1MDhEXHU1MjU2XHU1NzRBXHU1OUE4XHU1RTNEXHU1RkQ4XHU1RkQ5XHU2MjNGXHU2NkI0XHU2NzFCXHU2N0QwXHU2OEQyXHU1MTkyXHU3RDIxXHU4MEFBXHU4MUE4XHU4QjAwXHU4QzhDXHU4Q0JGXHU5MjdFXHU5NjMyXHU1NDIwXHU5ODJDXHU1MzE3XHU1MEQ1XHU1MzVDXHU1OEE4XHU2NEIyXHU2NzM0XHU3MjY3XHU3NzY2XHU3QTQ2XHU5MUU2XHU1MkMzXHU2Q0ExXHU2Qjg2XHU1ODAwXHU1RTRDXHU1OTU0XHU2NzJDXHU3RkZCXHU1MUUxXHU3NkM2XHU2NDY5XHU3OEU4XHU5QjU0XHU5RUJCXHU1N0NCXHU1OUI5XHU2NjI3XHU2NzlBXHU2QkNFXHU1NEU5XHU2OUQ5XHU1RTU1XHU4MTlDXHU2Nzk1XHU5QkFBXHU2N0ZFXHU5QzUyXHU2ODVEXHU0RUE2XHU0RkUzXHU1M0M4XHU2MkI5XHU2NzJCXHU2Q0FCXHU4RkM0XHU0RkFEXHU3RTZEXHU5RUJGXHU0RTA3XHU2MTYyXHU2RTgwXCJdLFxuW1wiY2NhMVwiLFwiXHU2RjJCXHU4NTEzXHU1NDczXHU2NzJBXHU5QjQ1XHU1REYzXHU3Qjk1XHU1Q0FDXHU1QkM2XHU4NzFDXHU2RTRBXHU4NEQxXHU3QTE0XHU4MTA4XHU1OTk5XHU3QzhEXHU2QzExXHU3NzIwXHU1MkQ5XHU1OTIyXHU3MTIxXHU3MjVGXHU3N0RCXHU5NzI3XHU5RDYxXHU2OTBCXHU1QTdGXHU1QTE4XHU1MUE1XHU1NDBEXHU1NDdEXHU2NjBFXHU3NkRGXHU4RkY3XHU5Mjk4XHU5Q0Y0XHU1OUVBXHU3MjVEXHU2RUM1XHU1MTREXHU2OEM5XHU3REJGXHU3REVDXHU5NzYyXHU5RUJBXHU2NDc4XHU2QTIxXHU4MzAyXHU1OTg0XHU1QjVGXHU2QkRCXHU3MzFCXHU3NkYyXHU3REIyXHU4MDE3XHU4NDk5XHU1MTMyXHU2NzI4XHU5RUQ5XHU3NkVFXHU2NzYyXHU1MkZGXHU5OTA1XHU1QzI0XHU2MjNCXHU3QzdFXHU4Q0IwXHU1NTRGXHU2MEI2XHU3RDBCXHU5NTgwXHU1MzAxXHU0RTVGXHU1MUI2XHU1OTFDXHU3MjNBXHU4MDM2XHU5MUNFXHU1RjI1XHU3N0UyXHU1Mzg0XHU1Rjc5XHU3RDA0XHU4NUFDXHU4QTMzXHU4RThEXHU5NzU2XHU2N0YzXHU4NUFFXHU5NDUzXHU2MTA5XHU2MTA4XHU2Q0I5XHU3NjUyXCJdLFxuW1wiY2RhMVwiLFwiXHU4QUVEXHU4RjM4XHU1NTJGXHU0RjUxXHU1MTJBXHU1MkM3XHU1M0NCXHU1QkE1XHU1RTdEXHU2MEEwXHU2MTgyXHU2M0Q2XHU2NzA5XHU2N0RBXHU2RTY3XHU2RDhDXHU3MzM2XHU3MzM3XHU3NTMxXHU3OTUwXHU4OEQ1XHU4QTk4XHU5MDRBXHU5MDkxXHU5MEY1XHU5NkM0XHU4NzhEXHU1OTE1XHU0RTg4XHU0RjU5XHU0RTBFXHU4QTg5XHU4RjNGXHU5ODEwXHU1MEFEXHU1RTdDXHU1OTk2XHU1QkI5XHU1RUI4XHU2M0RBXHU2M0ZBXHU2NEMxXHU2NkRDXHU2OTRBXHU2OUQ4XHU2RDBCXHU2RUI2XHU3MTk0XHU3NTI4XHU3QUFGXHU3RjhBXHU4MDAwXHU4NDQ5XHU4NEM5XHU4OTgxXHU4QjIxXHU4RTBBXHU5MDY1XHU5NjdEXHU5OTBBXHU2MTdFXHU2MjkxXHU2QjMyXHU2QzgzXHU2RDc0XHU3RkNDXHU3RkZDXHU2REMwXHU3Rjg1XHU4N0JBXHU4OEY4XHU2NzY1XHU4M0IxXHU5ODNDXHU5NkY3XHU2RDFCXHU3RDYxXHU4NDNEXHU5MTZBXHU0RTcxXHU1Mzc1XHU1RDUwXHU2QjA0XHU2RkVCXHU4NUNEXHU4NjJEXHU4OUE3XHU1MjI5XHU1NDBGXHU1QzY1XHU2NzRFXHU2OEE4XHU3NDA2XHU3NDgzXCJdLFxuW1wiY2VhMVwiLFwiXHU3NUUyXHU4OENGXHU4OEUxXHU5MUNDXHU5NkUyXHU5Njc4XHU1RjhCXHU3Mzg3XHU3QUNCXHU4NDRFXHU2M0EwXHU3NTY1XHU1Mjg5XHU2RDQxXHU2RTlDXHU3NDA5XHU3NTU5XHU3ODZCXHU3QzkyXHU5Njg2XHU3QURDXHU5RjhEXHU0RkI2XHU2MTZFXHU2NUM1XHU4NjVDXHU0RTg2XHU0RUFFXHU1MERBXHU0RTIxXHU1MUNDXHU1QkVFXHU2NTk5XHU2ODgxXHU2REJDXHU3MzFGXHU3NjQyXHU3N0FEXHU3QTFDXHU3Q0U3XHU4MjZGXHU4QUQyXHU5MDdDXHU5MUNGXHU5Njc1XHU5ODE4XHU1MjlCXHU3REQxXHU1MDJCXHU1Mzk4XHU2Nzk3XHU2RENCXHU3MUQwXHU3NDMzXHU4MUU4XHU4RjJBXHU5NkEzXHU5QzU3XHU5RTlGXHU3NDYwXHU1ODQxXHU2RDk5XHU3RDJGXHU5ODVFXHU0RUU0XHU0RjM2XHU0RjhCXHU1MUI3XHU1MkIxXHU1REJBXHU2MDFDXHU3M0IyXHU3OTNDXHU4MkQzXHU5MjM0XHU5NkI3XHU5NkY2XHU5NzBBXHU5RTk3XHU5RjYyXHU2NkE2XHU2Qjc0XHU1MjE3XHU1MkEzXHU3MEM4XHU4OEMyXHU1RUM5XHU2MDRCXHU2MTkwXHU2RjIzXHU3MTQ5XHU3QzNFXHU3REY0XHU4MDZGXCJdLFxuW1wiY2ZhMVwiLFwiXHU4NEVFXHU5MDIzXHU5MzJDXHU1NDQyXHU5QjZGXHU2QUQzXHU3MDg5XHU4Q0MyXHU4REVGXHU5NzMyXHU1MkI0XHU1QTQxXHU1RUNBXHU1RjA0XHU2NzE3XHU2OTdDXHU2OTk0XHU2RDZBXHU2RjBGXHU3MjYyXHU3MkZDXHU3QkVEXHU4MDAxXHU4MDdFXHU4NzRCXHU5MENFXHU1MTZEXHU5RTkzXHU3OTg0XHU4MDhCXHU5MzMyXHU4QUQ2XHU1MDJEXHU1NDhDXHU4QTcxXHU2QjZBXHU4Q0M0XHU4MTA3XHU2MEQxXHU2N0EwXHU5REYyXHU0RTk5XHU0RTk4XHU5QzEwXHU4QTZCXHU4NUMxXHU4NTY4XHU2OTAwXHU2RTdFXHU3ODk3XHU4MTU1XCJdLFxuW1wiZDBhMVwiLFwiXHU1RjBDXHU0RTEwXHU0RTE1XHU0RTJBXHU0RTMxXHU0RTM2XHU0RTNDXHU0RTNGXHU0RTQyXHU0RTU2XHU0RTU4XHU0RTgyXHU0RTg1XHU4QzZCXHU0RThBXHU4MjEyXHU1RjBEXHU0RThFXHU0RTlFXHU0RTlGXHU0RUEwXHU0RUEyXHU0RUIwXHU0RUIzXHU0RUI2XHU0RUNFXHU0RUNEXHU0RUM0XHU0RUM2XHU0RUMyXHU0RUQ3XHU0RURFXHU0RUVEXHU0RURGXHU0RUY3XHU0RjA5XHU0RjVBXHU0RjMwXHU0RjVCXHU0RjVEXHU0RjU3XHU0RjQ3XHU0Rjc2XHU0Rjg4XHU0RjhGXHU0Rjk4XHU0RjdCXHU0RjY5XHU0RjcwXHU0RjkxXHU0RjZGXHU0Rjg2XHU0Rjk2XHU1MTE4XHU0RkQ0XHU0RkRGXHU0RkNFXHU0RkQ4XHU0RkRCXHU0RkQxXHU0RkRBXHU0RkQwXHU0RkU0XHU0RkU1XHU1MDFBXHU1MDI4XHU1MDE0XHU1MDJBXHU1MDI1XHU1MDA1XHU0RjFDXHU0RkY2XHU1MDIxXHU1MDI5XHU1MDJDXHU0RkZFXHU0RkVGXHU1MDExXHU1MDA2XHU1MDQzXHU1MDQ3XHU2NzAzXHU1MDU1XHU1MDUwXHU1MDQ4XHU1MDVBXHU1MDU2XHU1MDZDXHU1MDc4XHU1MDgwXHU1MDlBXHU1MDg1XHU1MEI0XHU1MEIyXCJdLFxuW1wiZDFhMVwiLFwiXHU1MEM5XHU1MENBXHU1MEIzXHU1MEMyXHU1MEQ2XHU1MERFXHU1MEU1XHU1MEVEXHU1MEUzXHU1MEVFXHU1MEY5XHU1MEY1XHU1MTA5XHU1MTAxXHU1MTAyXHU1MTE2XHU1MTE1XHU1MTE0XHU1MTFBXHU1MTIxXHU1MTNBXHU1MTM3XHU1MTNDXHU1MTNCXHU1MTNGXHU1MTQwXHU1MTUyXHU1MTRDXHU1MTU0XHU1MTYyXHU3QUY4XHU1MTY5XHU1MTZBXHU1MTZFXHU1MTgwXHU1MTgyXHU1NkQ4XHU1MThDXHU1MTg5XHU1MThGXHU1MTkxXHU1MTkzXHU1MTk1XHU1MTk2XHU1MUE0XHU1MUE2XHU1MUEyXHU1MUE5XHU1MUFBXHU1MUFCXHU1MUIzXHU1MUIxXHU1MUIyXHU1MUIwXHU1MUI1XHU1MUJEXHU1MUM1XHU1MUM5XHU1MURCXHU1MUUwXHU4NjU1XHU1MUU5XHU1MUVEXHU1MUYwXHU1MUY1XHU1MUZFXHU1MjA0XHU1MjBCXHU1MjE0XHU1MjBFXHU1MjI3XHU1MjJBXHU1MjJFXHU1MjMzXHU1MjM5XHU1MjRGXHU1MjQ0XHU1MjRCXHU1MjRDXHU1MjVFXHU1MjU0XHU1MjZBXHU1Mjc0XHU1MjY5XHU1MjczXHU1MjdGXHU1MjdEXHU1MjhEXHU1Mjk0XHU1MjkyXHU1MjcxXHU1Mjg4XHU1MjkxXHU4RkE4XCJdLFxuW1wiZDJhMVwiLFwiXHU4RkE3XHU1MkFDXHU1MkFEXHU1MkJDXHU1MkI1XHU1MkMxXHU1MkNEXHU1MkQ3XHU1MkRFXHU1MkUzXHU1MkU2XHU5OEVEXHU1MkUwXHU1MkYzXHU1MkY1XHU1MkY4XHU1MkY5XHU1MzA2XHU1MzA4XHU3NTM4XHU1MzBEXHU1MzEwXHU1MzBGXHU1MzE1XHU1MzFBXHU1MzIzXHU1MzJGXHU1MzMxXHU1MzMzXHU1MzM4XHU1MzQwXHU1MzQ2XHU1MzQ1XHU0RTE3XHU1MzQ5XHU1MzREXHU1MUQ2XHU1MzVFXHU1MzY5XHU1MzZFXHU1OTE4XHU1MzdCXHU1Mzc3XHU1MzgyXHU1Mzk2XHU1M0EwXHU1M0E2XHU1M0E1XHU1M0FFXHU1M0IwXHU1M0I2XHU1M0MzXHU3QzEyXHU5NkQ5XHU1M0RGXHU2NkZDXHU3MUVFXHU1M0VFXHU1M0U4XHU1M0VEXHU1M0ZBXHU1NDAxXHU1NDNEXHU1NDQwXHU1NDJDXHU1NDJEXHU1NDNDXHU1NDJFXHU1NDM2XHU1NDI5XHU1NDFEXHU1NDRFXHU1NDhGXHU1NDc1XHU1NDhFXHU1NDVGXHU1NDcxXHU1NDc3XHU1NDcwXHU1NDkyXHU1NDdCXHU1NDgwXHU1NDc2XHU1NDg0XHU1NDkwXHU1NDg2XHU1NEM3XHU1NEEyXHU1NEI4XHU1NEE1XHU1NEFDXHU1NEM0XHU1NEM4XHU1NEE4XCJdLFxuW1wiZDNhMVwiLFwiXHU1NEFCXHU1NEMyXHU1NEE0XHU1NEJFXHU1NEJDXHU1NEQ4XHU1NEU1XHU1NEU2XHU1NTBGXHU1NTE0XHU1NEZEXHU1NEVFXHU1NEVEXHU1NEZBXHU1NEUyXHU1NTM5XHU1NTQwXHU1NTYzXHU1NTRDXHU1NTJFXHU1NTVDXHU1NTQ1XHU1NTU2XHU1NTU3XHU1NTM4XHU1NTMzXHU1NTVEXHU1NTk5XHU1NTgwXHU1NEFGXHU1NThBXHU1NTlGXHU1NTdCXHU1NTdFXHU1NTk4XHU1NTlFXHU1NUFFXHU1NTdDXHU1NTgzXHU1NUE5XHU1NTg3XHU1NUE4XHU1NURBXHU1NUM1XHU1NURGXHU1NUM0XHU1NURDXHU1NUU0XHU1NUQ0XHU1NjE0XHU1NUY3XHU1NjE2XHU1NUZFXHU1NUZEXHU1NjFCXHU1NUY5XHU1NjRFXHU1NjUwXHU3MURGXHU1NjM0XHU1NjM2XHU1NjMyXHU1NjM4XHU1NjZCXHU1NjY0XHU1NjJGXHU1NjZDXHU1NjZBXHU1Njg2XHU1NjgwXHU1NjhBXHU1NkEwXHU1Njk0XHU1NjhGXHU1NkE1XHU1NkFFXHU1NkI2XHU1NkI0XHU1NkMyXHU1NkJDXHU1NkMxXHU1NkMzXHU1NkMwXHU1NkM4XHU1NkNFXHU1NkQxXHU1NkQzXHU1NkQ3XHU1NkVFXHU1NkY5XHU1NzAwXHU1NkZGXHU1NzA0XHU1NzA5XCJdLFxuW1wiZDRhMVwiLFwiXHU1NzA4XHU1NzBCXHU1NzBEXHU1NzEzXHU1NzE4XHU1NzE2XHU1NUM3XHU1NzFDXHU1NzI2XHU1NzM3XHU1NzM4XHU1NzRFXHU1NzNCXHU1NzQwXHU1NzRGXHU1NzY5XHU1N0MwXHU1Nzg4XHU1NzYxXHU1NzdGXHU1Nzg5XHU1NzkzXHU1N0EwXHU1N0IzXHU1N0E0XHU1N0FBXHU1N0IwXHU1N0MzXHU1N0M2XHU1N0Q0XHU1N0QyXHU1N0QzXHU1ODBBXHU1N0Q2XHU1N0UzXHU1ODBCXHU1ODE5XHU1ODFEXHU1ODcyXHU1ODIxXHU1ODYyXHU1ODRCXHU1ODcwXHU2QkMwXHU1ODUyXHU1ODNEXHU1ODc5XHU1ODg1XHU1OEI5XHU1ODlGXHU1OEFCXHU1OEJBXHU1OERFXHU1OEJCXHU1OEI4XHU1OEFFXHU1OEM1XHU1OEQzXHU1OEQxXHU1OEQ3XHU1OEQ5XHU1OEQ4XHU1OEU1XHU1OERDXHU1OEU0XHU1OERGXHU1OEVGXHU1OEZBXHU1OEY5XHU1OEZCXHU1OEZDXHU1OEZEXHU1OTAyXHU1OTBBXHU1OTEwXHU1OTFCXHU2OEE2XHU1OTI1XHU1OTJDXHU1OTJEXHU1OTMyXHU1OTM4XHU1OTNFXHU3QUQyXHU1OTU1XHU1OTUwXHU1OTRFXHU1OTVBXHU1OTU4XHU1OTYyXHU1OTYwXHU1OTY3XHU1OTZDXHU1OTY5XCJdLFxuW1wiZDVhMVwiLFwiXHU1OTc4XHU1OTgxXHU1OTlEXHU0RjVFXHU0RkFCXHU1OUEzXHU1OUIyXHU1OUM2XHU1OUU4XHU1OURDXHU1OThEXHU1OUQ5XHU1OURBXHU1QTI1XHU1QTFGXHU1QTExXHU1QTFDXHU1QTA5XHU1QTFBXHU1QTQwXHU1QTZDXHU1QTQ5XHU1QTM1XHU1QTM2XHU1QTYyXHU1QTZBXHU1QTlBXHU1QUJDXHU1QUJFXHU1QUNCXHU1QUMyXHU1QUJEXHU1QUUzXHU1QUQ3XHU1QUU2XHU1QUU5XHU1QUQ2XHU1QUZBXHU1QUZCXHU1QjBDXHU1QjBCXHU1QjE2XHU1QjMyXHU1QUQwXHU1QjJBXHU1QjM2XHU1QjNFXHU1QjQzXHU1QjQ1XHU1QjQwXHU1QjUxXHU1QjU1XHU1QjVBXHU1QjVCXHU1QjY1XHU1QjY5XHU1QjcwXHU1QjczXHU1Qjc1XHU1Qjc4XHU2NTg4XHU1QjdBXHU1QjgwXHU1QjgzXHU1QkE2XHU1QkI4XHU1QkMzXHU1QkM3XHU1QkM5XHU1QkQ0XHU1QkQwXHU1QkU0XHU1QkU2XHU1QkUyXHU1QkRFXHU1QkU1XHU1QkVCXHU1QkYwXHU1QkY2XHU1QkYzXHU1QzA1XHU1QzA3XHU1QzA4XHU1QzBEXHU1QzEzXHU1QzIwXHU1QzIyXHU1QzI4XHU1QzM4XHU1QzM5XHU1QzQxXHU1QzQ2XHU1QzRFXHU1QzUzXCJdLFxuW1wiZDZhMVwiLFwiXHU1QzUwXHU1QzRGXHU1QjcxXHU1QzZDXHU1QzZFXHU0RTYyXHU1Qzc2XHU1Qzc5XHU1QzhDXHU1QzkxXHU1Qzk0XHU1OTlCXHU1Q0FCXHU1Q0JCXHU1Q0I2XHU1Q0JDXHU1Q0I3XHU1Q0M1XHU1Q0JFXHU1Q0M3XHU1Q0Q5XHU1Q0U5XHU1Q0ZEXHU1Q0ZBXHU1Q0VEXHU1RDhDXHU1Q0VBXHU1RDBCXHU1RDE1XHU1RDE3XHU1RDVDXHU1RDFGXHU1RDFCXHU1RDExXHU1RDE0XHU1RDIyXHU1RDFBXHU1RDE5XHU1RDE4XHU1RDRDXHU1RDUyXHU1RDRFXHU1RDRCXHU1RDZDXHU1RDczXHU1RDc2XHU1RDg3XHU1RDg0XHU1RDgyXHU1REEyXHU1RDlEXHU1REFDXHU1REFFXHU1REJEXHU1RDkwXHU1REI3XHU1REJDXHU1REM5XHU1RENEXHU1REQzXHU1REQyXHU1REQ2XHU1RERCXHU1REVCXHU1REYyXHU1REY1XHU1RTBCXHU1RTFBXHU1RTE5XHU1RTExXHU1RTFCXHU1RTM2XHU1RTM3XHU1RTQ0XHU1RTQzXHU1RTQwXHU1RTRFXHU1RTU3XHU1RTU0XHU1RTVGXHU1RTYyXHU1RTY0XHU1RTQ3XHU1RTc1XHU1RTc2XHU1RTdBXHU5RUJDXHU1RTdGXHU1RUEwXHU1RUMxXHU1RUMyXHU1RUM4XHU1RUQwXHU1RUNGXCJdLFxuW1wiZDdhMVwiLFwiXHU1RUQ2XHU1RUUzXHU1RUREXHU1RURBXHU1RURCXHU1RUUyXHU1RUUxXHU1RUU4XHU1RUU5XHU1RUVDXHU1RUYxXHU1RUYzXHU1RUYwXHU1RUY0XHU1RUY4XHU1RUZFXHU1RjAzXHU1RjA5XHU1RjVEXHU1RjVDXHU1RjBCXHU1RjExXHU1RjE2XHU1RjI5XHU1RjJEXHU1RjM4XHU1RjQxXHU1RjQ4XHU1RjRDXHU1RjRFXHU1RjJGXHU1RjUxXHU1RjU2XHU1RjU3XHU1RjU5XHU1RjYxXHU1RjZEXHU1RjczXHU1Rjc3XHU1RjgzXHU1RjgyXHU1RjdGXHU1RjhBXHU1Rjg4XHU1RjkxXHU1Rjg3XHU1RjlFXHU1Rjk5XHU1Rjk4XHU1RkEwXHU1RkE4XHU1RkFEXHU1RkJDXHU1RkQ2XHU1RkZCXHU1RkU0XHU1RkY4XHU1RkYxXHU1RkREXHU2MEIzXHU1RkZGXHU2MDIxXHU2MDYwXHU2MDE5XHU2MDEwXHU2MDI5XHU2MDBFXHU2MDMxXHU2MDFCXHU2MDE1XHU2MDJCXHU2MDI2XHU2MDBGXHU2MDNBXHU2MDVBXHU2MDQxXHU2MDZBXHU2MDc3XHU2MDVGXHU2MDRBXHU2MDQ2XHU2MDREXHU2MDYzXHU2MDQzXHU2MDY0XHU2MDQyXHU2MDZDXHU2MDZCXHU2MDU5XHU2MDgxXHU2MDhEXHU2MEU3XHU2MDgzXHU2MDlBXCJdLFxuW1wiZDhhMVwiLFwiXHU2MDg0XHU2MDlCXHU2MDk2XHU2MDk3XHU2MDkyXHU2MEE3XHU2MDhCXHU2MEUxXHU2MEI4XHU2MEUwXHU2MEQzXHU2MEI0XHU1RkYwXHU2MEJEXHU2MEM2XHU2MEI1XHU2MEQ4XHU2MTREXHU2MTE1XHU2MTA2XHU2MEY2XHU2MEY3XHU2MTAwXHU2MEY0XHU2MEZBXHU2MTAzXHU2MTIxXHU2MEZCXHU2MEYxXHU2MTBEXHU2MTBFXHU2MTQ3XHU2MTNFXHU2MTI4XHU2MTI3XHU2MTRBXHU2MTNGXHU2MTNDXHU2MTJDXHU2MTM0XHU2MTNEXHU2MTQyXHU2MTQ0XHU2MTczXHU2MTc3XHU2MTU4XHU2MTU5XHU2MTVBXHU2MTZCXHU2MTc0XHU2MTZGXHU2MTY1XHU2MTcxXHU2MTVGXHU2MTVEXHU2MTUzXHU2MTc1XHU2MTk5XHU2MTk2XHU2MTg3XHU2MUFDXHU2MTk0XHU2MTlBXHU2MThBXHU2MTkxXHU2MUFCXHU2MUFFXHU2MUNDXHU2MUNBXHU2MUM5XHU2MUY3XHU2MUM4XHU2MUMzXHU2MUM2XHU2MUJBXHU2MUNCXHU3Rjc5XHU2MUNEXHU2MUU2XHU2MUUzXHU2MUY2XHU2MUZBXHU2MUY0XHU2MUZGXHU2MUZEXHU2MUZDXHU2MUZFXHU2MjAwXHU2MjA4XHU2MjA5XHU2MjBEXHU2MjBDXHU2MjE0XHU2MjFCXCJdLFxuW1wiZDlhMVwiLFwiXHU2MjFFXHU2MjIxXHU2MjJBXHU2MjJFXHU2MjMwXHU2MjMyXHU2MjMzXHU2MjQxXHU2MjRFXHU2MjVFXHU2MjYzXHU2MjVCXHU2MjYwXHU2MjY4XHU2MjdDXHU2MjgyXHU2Mjg5XHU2MjdFXHU2MjkyXHU2MjkzXHU2Mjk2XHU2MkQ0XHU2MjgzXHU2Mjk0XHU2MkQ3XHU2MkQxXHU2MkJCXHU2MkNGXHU2MkZGXHU2MkM2XHU2NEQ0XHU2MkM4XHU2MkRDXHU2MkNDXHU2MkNBXHU2MkMyXHU2MkM3XHU2MjlCXHU2MkM5XHU2MzBDXHU2MkVFXHU2MkYxXHU2MzI3XHU2MzAyXHU2MzA4XHU2MkVGXHU2MkY1XHU2MzUwXHU2MzNFXHU2MzREXHU2NDFDXHU2MzRGXHU2Mzk2XHU2MzhFXHU2MzgwXHU2M0FCXHU2Mzc2XHU2M0EzXHU2MzhGXHU2Mzg5XHU2MzlGXHU2M0I1XHU2MzZCXHU2MzY5XHU2M0JFXHU2M0U5XHU2M0MwXHU2M0M2XHU2M0UzXHU2M0M5XHU2M0QyXHU2M0Y2XHU2M0M0XHU2NDE2XHU2NDM0XHU2NDA2XHU2NDEzXHU2NDI2XHU2NDM2XHU2NTFEXHU2NDE3XHU2NDI4XHU2NDBGXHU2NDY3XHU2NDZGXHU2NDc2XHU2NDRFXHU2NTJBXHU2NDk1XHU2NDkzXHU2NEE1XHU2NEE5XHU2NDg4XHU2NEJDXCJdLFxuW1wiZGFhMVwiLFwiXHU2NERBXHU2NEQyXHU2NEM1XHU2NEM3XHU2NEJCXHU2NEQ4XHU2NEMyXHU2NEYxXHU2NEU3XHU4MjA5XHU2NEUwXHU2NEUxXHU2MkFDXHU2NEUzXHU2NEVGXHU2NTJDXHU2NEY2XHU2NEY0XHU2NEYyXHU2NEZBXHU2NTAwXHU2NEZEXHU2NTE4XHU2NTFDXHU2NTA1XHU2NTI0XHU2NTIzXHU2NTJCXHU2NTM0XHU2NTM1XHU2NTM3XHU2NTM2XHU2NTM4XHU3NTRCXHU2NTQ4XHU2NTU2XHU2NTU1XHU2NTREXHU2NTU4XHU2NTVFXHU2NTVEXHU2NTcyXHU2NTc4XHU2NTgyXHU2NTgzXHU4QjhBXHU2NTlCXHU2NTlGXHU2NUFCXHU2NUI3XHU2NUMzXHU2NUM2XHU2NUMxXHU2NUM0XHU2NUNDXHU2NUQyXHU2NURCXHU2NUQ5XHU2NUUwXHU2NUUxXHU2NUYxXHU2NzcyXHU2NjBBXHU2NjAzXHU2NUZCXHU2NzczXHU2NjM1XHU2NjM2XHU2NjM0XHU2NjFDXHU2NjRGXHU2NjQ0XHU2NjQ5XHU2NjQxXHU2NjVFXHU2NjVEXHU2NjY0XHU2NjY3XHU2NjY4XHU2NjVGXHU2NjYyXHU2NjcwXHU2NjgzXHU2Njg4XHU2NjhFXHU2Njg5XHU2Njg0XHU2Njk4XHU2NjlEXHU2NkMxXHU2NkI5XHU2NkM5XHU2NkJFXHU2NkJDXCJdLFxuW1wiZGJhMVwiLFwiXHU2NkM0XHU2NkI4XHU2NkQ2XHU2NkRBXHU2NkUwXHU2NjNGXHU2NkU2XHU2NkU5XHU2NkYwXHU2NkY1XHU2NkY3XHU2NzBGXHU2NzE2XHU2NzFFXHU2NzI2XHU2NzI3XHU5NzM4XHU2NzJFXHU2NzNGXHU2NzM2XHU2NzQxXHU2NzM4XHU2NzM3XHU2NzQ2XHU2NzVFXHU2NzYwXHU2NzU5XHU2NzYzXHU2NzY0XHU2Nzg5XHU2NzcwXHU2N0E5XHU2NzdDXHU2NzZBXHU2NzhDXHU2NzhCXHU2N0E2XHU2N0ExXHU2Nzg1XHU2N0I3XHU2N0VGXHU2N0I0XHU2N0VDXHU2N0IzXHU2N0U5XHU2N0I4XHU2N0U0XHU2N0RFXHU2N0REXHU2N0UyXHU2N0VFXHU2N0I5XHU2N0NFXHU2N0M2XHU2N0U3XHU2QTlDXHU2ODFFXHU2ODQ2XHU2ODI5XHU2ODQwXHU2ODREXHU2ODMyXHU2ODRFXHU2OEIzXHU2ODJCXHU2ODU5XHU2ODYzXHU2ODc3XHU2ODdGXHU2ODlGXHU2ODhGXHU2OEFEXHU2ODk0XHU2ODlEXHU2ODlCXHU2ODgzXHU2QUFFXHU2OEI5XHU2ODc0XHU2OEI1XHU2OEEwXHU2OEJBXHU2OTBGXHU2ODhEXHU2ODdFXHU2OTAxXHU2OENBXHU2OTA4XHU2OEQ4XHU2OTIyXHU2OTI2XHU2OEUxXHU2OTBDXHU2OENEXCJdLFxuW1wiZGNhMVwiLFwiXHU2OEQ0XHU2OEU3XHU2OEQ1XHU2OTM2XHU2OTEyXHU2OTA0XHU2OEQ3XHU2OEUzXHU2OTI1XHU2OEY5XHU2OEUwXHU2OEVGXHU2OTI4XHU2OTJBXHU2OTFBXHU2OTIzXHU2OTIxXHU2OEM2XHU2OTc5XHU2OTc3XHU2OTVDXHU2OTc4XHU2OTZCXHU2OTU0XHU2OTdFXHU2OTZFXHU2OTM5XHU2OTc0XHU2OTNEXHU2OTU5XHU2OTMwXHU2OTYxXHU2OTVFXHU2OTVEXHU2OTgxXHU2OTZBXHU2OUIyXHU2OUFFXHU2OUQwXHU2OUJGXHU2OUMxXHU2OUQzXHU2OUJFXHU2OUNFXHU1QkU4XHU2OUNBXHU2OUREXHU2OUJCXHU2OUMzXHU2OUE3XHU2QTJFXHU2OTkxXHU2OUEwXHU2OTlDXHU2OTk1XHU2OUI0XHU2OURFXHU2OUU4XHU2QTAyXHU2QTFCXHU2OUZGXHU2QjBBXHU2OUY5XHU2OUYyXHU2OUU3XHU2QTA1XHU2OUIxXHU2QTFFXHU2OUVEXHU2QTE0XHU2OUVCXHU2QTBBXHU2QTEyXHU2QUMxXHU2QTIzXHU2QTEzXHU2QTQ0XHU2QTBDXHU2QTcyXHU2QTM2XHU2QTc4XHU2QTQ3XHU2QTYyXHU2QTU5XHU2QTY2XHU2QTQ4XHU2QTM4XHU2QTIyXHU2QTkwXHU2QThEXHU2QUEwXHU2QTg0XHU2QUEyXHU2QUEzXCJdLFxuW1wiZGRhMVwiLFwiXHU2QTk3XHU4NjE3XHU2QUJCXHU2QUMzXHU2QUMyXHU2QUI4XHU2QUIzXHU2QUFDXHU2QURFXHU2QUQxXHU2QURGXHU2QUFBXHU2QURBXHU2QUVBXHU2QUZCXHU2QjA1XHU4NjE2XHU2QUZBXHU2QjEyXHU2QjE2XHU5QjMxXHU2QjFGXHU2QjM4XHU2QjM3XHU3NkRDXHU2QjM5XHU5OEVFXHU2QjQ3XHU2QjQzXHU2QjQ5XHU2QjUwXHU2QjU5XHU2QjU0XHU2QjVCXHU2QjVGXHU2QjYxXHU2Qjc4XHU2Qjc5XHU2QjdGXHU2QjgwXHU2Qjg0XHU2QjgzXHU2QjhEXHU2Qjk4XHU2Qjk1XHU2QjlFXHU2QkE0XHU2QkFBXHU2QkFCXHU2QkFGXHU2QkIyXHU2QkIxXHU2QkIzXHU2QkI3XHU2QkJDXHU2QkM2XHU2QkNCXHU2QkQzXHU2QkRGXHU2QkVDXHU2QkVCXHU2QkYzXHU2QkVGXHU5RUJFXHU2QzA4XHU2QzEzXHU2QzE0XHU2QzFCXHU2QzI0XHU2QzIzXHU2QzVFXHU2QzU1XHU2QzYyXHU2QzZBXHU2QzgyXHU2QzhEXHU2QzlBXHU2QzgxXHU2QzlCXHU2QzdFXHU2QzY4XHU2QzczXHU2QzkyXHU2QzkwXHU2Q0M0XHU2Q0YxXHU2Q0QzXHU2Q0JEXHU2Q0Q3XHU2Q0M1XHU2Q0REXHU2Q0FFXHU2Q0IxXHU2Q0JFXCJdLFxuW1wiZGVhMVwiLFwiXHU2Q0JBXHU2Q0RCXHU2Q0VGXHU2Q0Q5XHU2Q0VBXHU2RDFGXHU4ODREXHU2RDM2XHU2RDJCXHU2RDNEXHU2RDM4XHU2RDE5XHU2RDM1XHU2RDMzXHU2RDEyXHU2RDBDXHU2RDYzXHU2RDkzXHU2RDY0XHU2RDVBXHU2RDc5XHU2RDU5XHU2RDhFXHU2RDk1XHU2RkU0XHU2RDg1XHU2REY5XHU2RTE1XHU2RTBBXHU2REI1XHU2REM3XHU2REU2XHU2REI4XHU2REM2XHU2REVDXHU2RERFXHU2RENDXHU2REU4XHU2REQyXHU2REM1XHU2REZBXHU2REQ5XHU2REU0XHU2REQ1XHU2REVBXHU2REVFXHU2RTJEXHU2RTZFXHU2RTJFXHU2RTE5XHU2RTcyXHU2RTVGXHU2RTNFXHU2RTIzXHU2RTZCXHU2RTJCXHU2RTc2XHU2RTREXHU2RTFGXHU2RTQzXHU2RTNBXHU2RTRFXHU2RTI0XHU2RUZGXHU2RTFEXHU2RTM4XHU2RTgyXHU2RUFBXHU2RTk4XHU2RUM5XHU2RUI3XHU2RUQzXHU2RUJEXHU2RUFGXHU2RUM0XHU2RUIyXHU2RUQ0XHU2RUQ1XHU2RThGXHU2RUE1XHU2RUMyXHU2RTlGXHU2RjQxXHU2RjExXHU3MDRDXHU2RUVDXHU2RUY4XHU2RUZFXHU2RjNGXHU2RUYyXHU2RjMxXHU2RUVGXHU2RjMyXHU2RUNDXCJdLFxuW1wiZGZhMVwiLFwiXHU2RjNFXHU2RjEzXHU2RUY3XHU2Rjg2XHU2RjdBXHU2Rjc4XHU2RjgxXHU2RjgwXHU2RjZGXHU2RjVCXHU2RkYzXHU2RjZEXHU2RjgyXHU2RjdDXHU2RjU4XHU2RjhFXHU2RjkxXHU2RkMyXHU2RjY2XHU2RkIzXHU2RkEzXHU2RkExXHU2RkE0XHU2RkI5XHU2RkM2XHU2RkFBXHU2RkRGXHU2RkQ1XHU2RkVDXHU2RkQ0XHU2RkQ4XHU2RkYxXHU2RkVFXHU2RkRCXHU3MDA5XHU3MDBCXHU2RkZBXHU3MDExXHU3MDAxXHU3MDBGXHU2RkZFXHU3MDFCXHU3MDFBXHU2Rjc0XHU3MDFEXHU3MDE4XHU3MDFGXHU3MDMwXHU3MDNFXHU3MDMyXHU3MDUxXHU3MDYzXHU3MDk5XHU3MDkyXHU3MEFGXHU3MEYxXHU3MEFDXHU3MEI4XHU3MEIzXHU3MEFFXHU3MERGXHU3MENCXHU3MEREXHU3MEQ5XHU3MTA5XHU3MEZEXHU3MTFDXHU3MTE5XHU3MTY1XHU3MTU1XHU3MTg4XHU3MTY2XHU3MTYyXHU3MTRDXHU3MTU2XHU3MTZDXHU3MThGXHU3MUZCXHU3MTg0XHU3MTk1XHU3MUE4XHU3MUFDXHU3MUQ3XHU3MUI5XHU3MUJFXHU3MUQyXHU3MUM5XHU3MUQ0XHU3MUNFXHU3MUUwXHU3MUVDXHU3MUU3XHU3MUY1XHU3MUZDXCJdLFxuW1wiZTBhMVwiLFwiXHU3MUY5XHU3MUZGXHU3MjBEXHU3MjEwXHU3MjFCXHU3MjI4XHU3MjJEXHU3MjJDXHU3MjMwXHU3MjMyXHU3MjNCXHU3MjNDXHU3MjNGXHU3MjQwXHU3MjQ2XHU3MjRCXHU3MjU4XHU3Mjc0XHU3MjdFXHU3MjgyXHU3MjgxXHU3Mjg3XHU3MjkyXHU3Mjk2XHU3MkEyXHU3MkE3XHU3MkI5XHU3MkIyXHU3MkMzXHU3MkM2XHU3MkM0XHU3MkNFXHU3MkQyXHU3MkUyXHU3MkUwXHU3MkUxXHU3MkY5XHU3MkY3XHU1MDBGXHU3MzE3XHU3MzBBXHU3MzFDXHU3MzE2XHU3MzFEXHU3MzM0XHU3MzJGXHU3MzI5XHU3MzI1XHU3MzNFXHU3MzRFXHU3MzRGXHU5RUQ4XHU3MzU3XHU3MzZBXHU3MzY4XHU3MzcwXHU3Mzc4XHU3Mzc1XHU3MzdCXHU3MzdBXHU3M0M4XHU3M0IzXHU3M0NFXHU3M0JCXHU3M0MwXHU3M0U1XHU3M0VFXHU3M0RFXHU3NEEyXHU3NDA1XHU3NDZGXHU3NDI1XHU3M0Y4XHU3NDMyXHU3NDNBXHU3NDU1XHU3NDNGXHU3NDVGXHU3NDU5XHU3NDQxXHU3NDVDXHU3NDY5XHU3NDcwXHU3NDYzXHU3NDZBXHU3NDc2XHU3NDdFXHU3NDhCXHU3NDlFXHU3NEE3XHU3NENBXHU3NENGXHU3NEQ0XHU3M0YxXCJdLFxuW1wiZTFhMVwiLFwiXHU3NEUwXHU3NEUzXHU3NEU3XHU3NEU5XHU3NEVFXHU3NEYyXHU3NEYwXHU3NEYxXHU3NEY4XHU3NEY3XHU3NTA0XHU3NTAzXHU3NTA1XHU3NTBDXHU3NTBFXHU3NTBEXHU3NTE1XHU3NTEzXHU3NTFFXHU3NTI2XHU3NTJDXHU3NTNDXHU3NTQ0XHU3NTREXHU3NTRBXHU3NTQ5XHU3NTVCXHU3NTQ2XHU3NTVBXHU3NTY5XHU3NTY0XHU3NTY3XHU3NTZCXHU3NTZEXHU3NTc4XHU3NTc2XHU3NTg2XHU3NTg3XHU3NTc0XHU3NThBXHU3NTg5XHU3NTgyXHU3NTk0XHU3NTlBXHU3NTlEXHU3NUE1XHU3NUEzXHU3NUMyXHU3NUIzXHU3NUMzXHU3NUI1XHU3NUJEXHU3NUI4XHU3NUJDXHU3NUIxXHU3NUNEXHU3NUNBXHU3NUQyXHU3NUQ5XHU3NUUzXHU3NURFXHU3NUZFXHU3NUZGXHU3NUZDXHU3NjAxXHU3NUYwXHU3NUZBXHU3NUYyXHU3NUYzXHU3NjBCXHU3NjBEXHU3NjA5XHU3NjFGXHU3NjI3XHU3NjIwXHU3NjIxXHU3NjIyXHU3NjI0XHU3NjM0XHU3NjMwXHU3NjNCXHU3NjQ3XHU3NjQ4XHU3NjQ2XHU3NjVDXHU3NjU4XHU3NjYxXHU3NjYyXHU3NjY4XHU3NjY5XHU3NjZBXHU3NjY3XHU3NjZDXHU3NjcwXCJdLFxuW1wiZTJhMVwiLFwiXHU3NjcyXHU3Njc2XHU3Njc4XHU3NjdDXHU3NjgwXHU3NjgzXHU3Njg4XHU3NjhCXHU3NjhFXHU3Njk2XHU3NjkzXHU3Njk5XHU3NjlBXHU3NkIwXHU3NkI0XHU3NkI4XHU3NkI5XHU3NkJBXHU3NkMyXHU3NkNEXHU3NkQ2XHU3NkQyXHU3NkRFXHU3NkUxXHU3NkU1XHU3NkU3XHU3NkVBXHU4NjJGXHU3NkZCXHU3NzA4XHU3NzA3XHU3NzA0XHU3NzI5XHU3NzI0XHU3NzFFXHU3NzI1XHU3NzI2XHU3NzFCXHU3NzM3XHU3NzM4XHU3NzQ3XHU3NzVBXHU3NzY4XHU3NzZCXHU3NzVCXHU3NzY1XHU3NzdGXHU3NzdFXHU3Nzc5XHU3NzhFXHU3NzhCXHU3NzkxXHU3N0EwXHU3NzlFXHU3N0IwXHU3N0I2XHU3N0I5XHU3N0JGXHU3N0JDXHU3N0JEXHU3N0JCXHU3N0M3XHU3N0NEXHU3N0Q3XHU3N0RBXHU3N0RDXHU3N0UzXHU3N0VFXHU3N0ZDXHU3ODBDXHU3ODEyXHU3OTI2XHU3ODIwXHU3OTJBXHU3ODQ1XHU3ODhFXHU3ODc0XHU3ODg2XHU3ODdDXHU3ODlBXHU3ODhDXHU3OEEzXHU3OEI1XHU3OEFBXHU3OEFGXHU3OEQxXHU3OEM2XHU3OENCXHU3OEQ0XHU3OEJFXHU3OEJDXHU3OEM1XHU3OENBXHU3OEVDXCJdLFxuW1wiZTNhMVwiLFwiXHU3OEU3XHU3OERBXHU3OEZEXHU3OEY0XHU3OTA3XHU3OTEyXHU3OTExXHU3OTE5XHU3OTJDXHU3OTJCXHU3OTQwXHU3OTYwXHU3OTU3XHU3OTVGXHU3OTVBXHU3OTU1XHU3OTUzXHU3OTdBXHU3OTdGXHU3OThBXHU3OTlEXHU3OUE3XHU5RjRCXHU3OUFBXHU3OUFFXHU3OUIzXHU3OUI5XHU3OUJBXHU3OUM5XHU3OUQ1XHU3OUU3XHU3OUVDXHU3OUUxXHU3OUUzXHU3QTA4XHU3QTBEXHU3QTE4XHU3QTE5XHU3QTIwXHU3QTFGXHU3OTgwXHU3QTMxXHU3QTNCXHU3QTNFXHU3QTM3XHU3QTQzXHU3QTU3XHU3QTQ5XHU3QTYxXHU3QTYyXHU3QTY5XHU5RjlEXHU3QTcwXHU3QTc5XHU3QTdEXHU3QTg4XHU3QTk3XHU3QTk1XHU3QTk4XHU3QTk2XHU3QUE5XHU3QUM4XHU3QUIwXHU3QUI2XHU3QUM1XHU3QUM0XHU3QUJGXHU5MDgzXHU3QUM3XHU3QUNBXHU3QUNEXHU3QUNGXHU3QUQ1XHU3QUQzXHU3QUQ5XHU3QURBXHU3QUREXHU3QUUxXHU3QUUyXHU3QUU2XHU3QUVEXHU3QUYwXHU3QjAyXHU3QjBGXHU3QjBBXHU3QjA2XHU3QjMzXHU3QjE4XHU3QjE5XHU3QjFFXHU3QjM1XHU3QjI4XHU3QjM2XHU3QjUwXCJdLFxuW1wiZTRhMVwiLFwiXHU3QjdBXHU3QjA0XHU3QjREXHU3QjBCXHU3QjRDXHU3QjQ1XHU3Qjc1XHU3QjY1XHU3Qjc0XHU3QjY3XHU3QjcwXHU3QjcxXHU3QjZDXHU3QjZFXHU3QjlEXHU3Qjk4XHU3QjlGXHU3QjhEXHU3QjlDXHU3QjlBXHU3QjhCXHU3QjkyXHU3QjhGXHU3QjVEXHU3Qjk5XHU3QkNCXHU3QkMxXHU3QkNDXHU3QkNGXHU3QkI0XHU3QkM2XHU3QkREXHU3QkU5XHU3QzExXHU3QzE0XHU3QkU2XHU3QkU1XHU3QzYwXHU3QzAwXHU3QzA3XHU3QzEzXHU3QkYzXHU3QkY3XHU3QzE3XHU3QzBEXHU3QkY2XHU3QzIzXHU3QzI3XHU3QzJBXHU3QzFGXHU3QzM3XHU3QzJCXHU3QzNEXHU3QzRDXHU3QzQzXHU3QzU0XHU3QzRGXHU3QzQwXHU3QzUwXHU3QzU4XHU3QzVGXHU3QzY0XHU3QzU2XHU3QzY1XHU3QzZDXHU3Qzc1XHU3QzgzXHU3QzkwXHU3Q0E0XHU3Q0FEXHU3Q0EyXHU3Q0FCXHU3Q0ExXHU3Q0E4XHU3Q0IzXHU3Q0IyXHU3Q0IxXHU3Q0FFXHU3Q0I5XHU3Q0JEXHU3Q0MwXHU3Q0M1XHU3Q0MyXHU3Q0Q4XHU3Q0QyXHU3Q0RDXHU3Q0UyXHU5QjNCXHU3Q0VGXHU3Q0YyXHU3Q0Y0XHU3Q0Y2XHU3Q0ZBXHU3RDA2XCJdLFxuW1wiZTVhMVwiLFwiXHU3RDAyXHU3RDFDXHU3RDE1XHU3RDBBXHU3RDQ1XHU3RDRCXHU3RDJFXHU3RDMyXHU3RDNGXHU3RDM1XHU3RDQ2XHU3RDczXHU3RDU2XHU3RDRFXHU3RDcyXHU3RDY4XHU3RDZFXHU3RDRGXHU3RDYzXHU3RDkzXHU3RDg5XHU3RDVCXHU3RDhGXHU3RDdEXHU3RDlCXHU3REJBXHU3REFFXHU3REEzXHU3REI1XHU3REM3XHU3REJEXHU3REFCXHU3RTNEXHU3REEyXHU3REFGXHU3RERDXHU3REI4XHU3RDlGXHU3REIwXHU3REQ4XHU3REREXHU3REU0XHU3RERFXHU3REZCXHU3REYyXHU3REUxXHU3RTA1XHU3RTBBXHU3RTIzXHU3RTIxXHU3RTEyXHU3RTMxXHU3RTFGXHU3RTA5XHU3RTBCXHU3RTIyXHU3RTQ2XHU3RTY2XHU3RTNCXHU3RTM1XHU3RTM5XHU3RTQzXHU3RTM3XHU3RTMyXHU3RTNBXHU3RTY3XHU3RTVEXHU3RTU2XHU3RTVFXHU3RTU5XHU3RTVBXHU3RTc5XHU3RTZBXHU3RTY5XHU3RTdDXHU3RTdCXHU3RTgzXHU3REQ1XHU3RTdEXHU4RkFFXHU3RTdGXHU3RTg4XHU3RTg5XHU3RThDXHU3RTkyXHU3RTkwXHU3RTkzXHU3RTk0XHU3RTk2XHU3RThFXHU3RTlCXHU3RTlDXHU3RjM4XHU3RjNBXCJdLFxuW1wiZTZhMVwiLFwiXHU3RjQ1XHU3RjRDXHU3RjREXHU3RjRFXHU3RjUwXHU3RjUxXHU3RjU1XHU3RjU0XHU3RjU4XHU3RjVGXHU3RjYwXHU3RjY4XHU3RjY5XHU3RjY3XHU3Rjc4XHU3RjgyXHU3Rjg2XHU3RjgzXHU3Rjg4XHU3Rjg3XHU3RjhDXHU3Rjk0XHU3RjlFXHU3RjlEXHU3RjlBXHU3RkEzXHU3RkFGXHU3RkIyXHU3RkI5XHU3RkFFXHU3RkI2XHU3RkI4XHU4QjcxXHU3RkM1XHU3RkM2XHU3RkNBXHU3RkQ1XHU3RkQ0XHU3RkUxXHU3RkU2XHU3RkU5XHU3RkYzXHU3RkY5XHU5OERDXHU4MDA2XHU4MDA0XHU4MDBCXHU4MDEyXHU4MDE4XHU4MDE5XHU4MDFDXHU4MDIxXHU4MDI4XHU4MDNGXHU4MDNCXHU4MDRBXHU4MDQ2XHU4MDUyXHU4MDU4XHU4MDVBXHU4MDVGXHU4MDYyXHU4MDY4XHU4MDczXHU4MDcyXHU4MDcwXHU4MDc2XHU4MDc5XHU4MDdEXHU4MDdGXHU4MDg0XHU4MDg2XHU4MDg1XHU4MDlCXHU4MDkzXHU4MDlBXHU4MEFEXHU1MTkwXHU4MEFDXHU4MERCXHU4MEU1XHU4MEQ5XHU4MEREXHU4MEM0XHU4MERBXHU4MEQ2XHU4MTA5XHU4MEVGXHU4MEYxXHU4MTFCXHU4MTI5XHU4MTIzXHU4MTJGXHU4MTRCXCJdLFxuW1wiZTdhMVwiLFwiXHU5NjhCXHU4MTQ2XHU4MTNFXHU4MTUzXHU4MTUxXHU4MEZDXHU4MTcxXHU4MTZFXHU4MTY1XHU4MTY2XHU4MTc0XHU4MTgzXHU4MTg4XHU4MThBXHU4MTgwXHU4MTgyXHU4MUEwXHU4MTk1XHU4MUE0XHU4MUEzXHU4MTVGXHU4MTkzXHU4MUE5XHU4MUIwXHU4MUI1XHU4MUJFXHU4MUI4XHU4MUJEXHU4MUMwXHU4MUMyXHU4MUJBXHU4MUM5XHU4MUNEXHU4MUQxXHU4MUQ5XHU4MUQ4XHU4MUM4XHU4MURBXHU4MURGXHU4MUUwXHU4MUU3XHU4MUZBXHU4MUZCXHU4MUZFXHU4MjAxXHU4MjAyXHU4MjA1XHU4MjA3XHU4MjBBXHU4MjBEXHU4MjEwXHU4MjE2XHU4MjI5XHU4MjJCXHU4MjM4XHU4MjMzXHU4MjQwXHU4MjU5XHU4MjU4XHU4MjVEXHU4MjVBXHU4MjVGXHU4MjY0XHU4MjYyXHU4MjY4XHU4MjZBXHU4MjZCXHU4MjJFXHU4MjcxXHU4Mjc3XHU4Mjc4XHU4MjdFXHU4MjhEXHU4MjkyXHU4MkFCXHU4MjlGXHU4MkJCXHU4MkFDXHU4MkUxXHU4MkUzXHU4MkRGXHU4MkQyXHU4MkY0XHU4MkYzXHU4MkZBXHU4MzkzXHU4MzAzXHU4MkZCXHU4MkY5XHU4MkRFXHU4MzA2XHU4MkRDXHU4MzA5XHU4MkQ5XCJdLFxuW1wiZThhMVwiLFwiXHU4MzM1XHU4MzM0XHU4MzE2XHU4MzMyXHU4MzMxXHU4MzQwXHU4MzM5XHU4MzUwXHU4MzQ1XHU4MzJGXHU4MzJCXHU4MzE3XHU4MzE4XHU4Mzg1XHU4MzlBXHU4M0FBXHU4MzlGXHU4M0EyXHU4Mzk2XHU4MzIzXHU4MzhFXHU4Mzg3XHU4MzhBXHU4MzdDXHU4M0I1XHU4MzczXHU4Mzc1XHU4M0EwXHU4Mzg5XHU4M0E4XHU4M0Y0XHU4NDEzXHU4M0VCXHU4M0NFXHU4M0ZEXHU4NDAzXHU4M0Q4XHU4NDBCXHU4M0MxXHU4M0Y3XHU4NDA3XHU4M0UwXHU4M0YyXHU4NDBEXHU4NDIyXHU4NDIwXHU4M0JEXHU4NDM4XHU4NTA2XHU4M0ZCXHU4NDZEXHU4NDJBXHU4NDNDXHU4NTVBXHU4NDg0XHU4NDc3XHU4NDZCXHU4NEFEXHU4NDZFXHU4NDgyXHU4NDY5XHU4NDQ2XHU4NDJDXHU4NDZGXHU4NDc5XHU4NDM1XHU4NENBXHU4NDYyXHU4NEI5XHU4NEJGXHU4NDlGXHU4NEQ5XHU4NENEXHU4NEJCXHU4NERBXHU4NEQwXHU4NEMxXHU4NEM2XHU4NEQ2XHU4NEExXHU4NTIxXHU4NEZGXHU4NEY0XHU4NTE3XHU4NTE4XHU4NTJDXHU4NTFGXHU4NTE1XHU4NTE0XHU4NEZDXHU4NTQwXHU4NTYzXHU4NTU4XHU4NTQ4XCJdLFxuW1wiZTlhMVwiLFwiXHU4NTQxXHU4NjAyXHU4NTRCXHU4NTU1XHU4NTgwXHU4NUE0XHU4NTg4XHU4NTkxXHU4NThBXHU4NUE4XHU4NTZEXHU4NTk0XHU4NTlCXHU4NUVBXHU4NTg3XHU4NTlDXHU4NTc3XHU4NTdFXHU4NTkwXHU4NUM5XHU4NUJBXHU4NUNGXHU4NUI5XHU4NUQwXHU4NUQ1XHU4NUREXHU4NUU1XHU4NURDXHU4NUY5XHU4NjBBXHU4NjEzXHU4NjBCXHU4NUZFXHU4NUZBXHU4NjA2XHU4NjIyXHU4NjFBXHU4NjMwXHU4NjNGXHU4NjREXHU0RTU1XHU4NjU0XHU4NjVGXHU4NjY3XHU4NjcxXHU4NjkzXHU4NkEzXHU4NkE5XHU4NkFBXHU4NjhCXHU4NjhDXHU4NkI2XHU4NkFGXHU4NkM0XHU4NkM2XHU4NkIwXHU4NkM5XHU4ODIzXHU4NkFCXHU4NkQ0XHU4NkRFXHU4NkU5XHU4NkVDXHU4NkRGXHU4NkRCXHU4NkVGXHU4NzEyXHU4NzA2XHU4NzA4XHU4NzAwXHU4NzAzXHU4NkZCXHU4NzExXHU4NzA5XHU4NzBEXHU4NkY5XHU4NzBBXHU4NzM0XHU4NzNGXHU4NzM3XHU4NzNCXHU4NzI1XHU4NzI5XHU4NzFBXHU4NzYwXHU4NzVGXHU4Nzc4XHU4NzRDXHU4NzRFXHU4Nzc0XHU4NzU3XHU4NzY4XHU4NzZFXHU4NzU5XCJdLFxuW1wiZWFhMVwiLFwiXHU4NzUzXHU4NzYzXHU4NzZBXHU4ODA1XHU4N0EyXHU4NzlGXHU4NzgyXHU4N0FGXHU4N0NCXHU4N0JEXHU4N0MwXHU4N0QwXHU5NkQ2XHU4N0FCXHU4N0M0XHU4N0IzXHU4N0M3XHU4N0M2XHU4N0JCXHU4N0VGXHU4N0YyXHU4N0UwXHU4ODBGXHU4ODBEXHU4N0ZFXHU4N0Y2XHU4N0Y3XHU4ODBFXHU4N0QyXHU4ODExXHU4ODE2XHU4ODE1XHU4ODIyXHU4ODIxXHU4ODMxXHU4ODM2XHU4ODM5XHU4ODI3XHU4ODNCXHU4ODQ0XHU4ODQyXHU4ODUyXHU4ODU5XHU4ODVFXHU4ODYyXHU4ODZCXHU4ODgxXHU4ODdFXHU4ODlFXHU4ODc1XHU4ODdEXHU4OEI1XHU4ODcyXHU4ODgyXHU4ODk3XHU4ODkyXHU4OEFFXHU4ODk5XHU4OEEyXHU4ODhEXHU4OEE0XHU4OEIwXHU4OEJGXHU4OEIxXHU4OEMzXHU4OEM0XHU4OEQ0XHU4OEQ4XHU4OEQ5XHU4OEREXHU4OEY5XHU4OTAyXHU4OEZDXHU4OEY0XHU4OEU4XHU4OEYyXHU4OTA0XHU4OTBDXHU4OTBBXHU4OTEzXHU4OTQzXHU4OTFFXHU4OTI1XHU4OTJBXHU4OTJCXHU4OTQxXHU4OTQ0XHU4OTNCXHU4OTM2XHU4OTM4XHU4OTRDXHU4OTFEXHU4OTYwXHU4OTVFXCJdLFxuW1wiZWJhMVwiLFwiXHU4OTY2XHU4OTY0XHU4OTZEXHU4OTZBXHU4OTZGXHU4OTc0XHU4OTc3XHU4OTdFXHU4OTgzXHU4OTg4XHU4OThBXHU4OTkzXHU4OTk4XHU4OUExXHU4OUE5XHU4OUE2XHU4OUFDXHU4OUFGXHU4OUIyXHU4OUJBXHU4OUJEXHU4OUJGXHU4OUMwXHU4OURBXHU4OURDXHU4OUREXHU4OUU3XHU4OUY0XHU4OUY4XHU4QTAzXHU4QTE2XHU4QTEwXHU4QTBDXHU4QTFCXHU4QTFEXHU4QTI1XHU4QTM2XHU4QTQxXHU4QTVCXHU4QTUyXHU4QTQ2XHU4QTQ4XHU4QTdDXHU4QTZEXHU4QTZDXHU4QTYyXHU4QTg1XHU4QTgyXHU4QTg0XHU4QUE4XHU4QUExXHU4QTkxXHU4QUE1XHU4QUE2XHU4QTlBXHU4QUEzXHU4QUM0XHU4QUNEXHU4QUMyXHU4QURBXHU4QUVCXHU4QUYzXHU4QUU3XHU4QUU0XHU4QUYxXHU4QjE0XHU4QUUwXHU4QUUyXHU4QUY3XHU4QURFXHU4QURCXHU4QjBDXHU4QjA3XHU4QjFBXHU4QUUxXHU4QjE2XHU4QjEwXHU4QjE3XHU4QjIwXHU4QjMzXHU5N0FCXHU4QjI2XHU4QjJCXHU4QjNFXHU4QjI4XHU4QjQxXHU4QjRDXHU4QjRGXHU4QjRFXHU4QjQ5XHU4QjU2XHU4QjVCXHU4QjVBXHU4QjZCXCJdLFxuW1wiZWNhMVwiLFwiXHU4QjVGXHU4QjZDXHU4QjZGXHU4Qjc0XHU4QjdEXHU4QjgwXHU4QjhDXHU4QjhFXHU4QjkyXHU4QjkzXHU4Qjk2XHU4Qjk5XHU4QjlBXHU4QzNBXHU4QzQxXHU4QzNGXHU4QzQ4XHU4QzRDXHU4QzRFXHU4QzUwXHU4QzU1XHU4QzYyXHU4QzZDXHU4Qzc4XHU4QzdBXHU4QzgyXHU4Qzg5XHU4Qzg1XHU4QzhBXHU4QzhEXHU4QzhFXHU4Qzk0XHU4QzdDXHU4Qzk4XHU2MjFEXHU4Q0FEXHU4Q0FBXHU4Q0JEXHU4Q0IyXHU4Q0IzXHU4Q0FFXHU4Q0I2XHU4Q0M4XHU4Q0MxXHU4Q0U0XHU4Q0UzXHU4Q0RBXHU4Q0ZEXHU4Q0ZBXHU4Q0ZCXHU4RDA0XHU4RDA1XHU4RDBBXHU4RDA3XHU4RDBGXHU4RDBEXHU4RDEwXHU5RjRFXHU4RDEzXHU4Q0NEXHU4RDE0XHU4RDE2XHU4RDY3XHU4RDZEXHU4RDcxXHU4RDczXHU4RDgxXHU4RDk5XHU4REMyXHU4REJFXHU4REJBXHU4RENGXHU4RERBXHU4REQ2XHU4RENDXHU4RERCXHU4RENCXHU4REVBXHU4REVCXHU4RERGXHU4REUzXHU4REZDXHU4RTA4XHU4RTA5XHU4REZGXHU4RTFEXHU4RTFFXHU4RTEwXHU4RTFGXHU4RTQyXHU4RTM1XHU4RTMwXHU4RTM0XHU4RTRBXCJdLFxuW1wiZWRhMVwiLFwiXHU4RTQ3XHU4RTQ5XHU4RTRDXHU4RTUwXHU4RTQ4XHU4RTU5XHU4RTY0XHU4RTYwXHU4RTJBXHU4RTYzXHU4RTU1XHU4RTc2XHU4RTcyXHU4RTdDXHU4RTgxXHU4RTg3XHU4RTg1XHU4RTg0XHU4RThCXHU4RThBXHU4RTkzXHU4RTkxXHU4RTk0XHU4RTk5XHU4RUFBXHU4RUExXHU4RUFDXHU4RUIwXHU4RUM2XHU4RUIxXHU4RUJFXHU4RUM1XHU4RUM4XHU4RUNCXHU4RURCXHU4RUUzXHU4RUZDXHU4RUZCXHU4RUVCXHU4RUZFXHU4RjBBXHU4RjA1XHU4RjE1XHU4RjEyXHU4RjE5XHU4RjEzXHU4RjFDXHU4RjFGXHU4RjFCXHU4RjBDXHU4RjI2XHU4RjMzXHU4RjNCXHU4RjM5XHU4RjQ1XHU4RjQyXHU4RjNFXHU4RjRDXHU4RjQ5XHU4RjQ2XHU4RjRFXHU4RjU3XHU4RjVDXHU4RjYyXHU4RjYzXHU4RjY0XHU4RjlDXHU4RjlGXHU4RkEzXHU4RkFEXHU4RkFGXHU4RkI3XHU4RkRBXHU4RkU1XHU4RkUyXHU4RkVBXHU4RkVGXHU5MDg3XHU4RkY0XHU5MDA1XHU4RkY5XHU4RkZBXHU5MDExXHU5MDE1XHU5MDIxXHU5MDBEXHU5MDFFXHU5MDE2XHU5MDBCXHU5MDI3XHU5MDM2XHU5MDM1XHU5MDM5XHU4RkY4XCJdLFxuW1wiZWVhMVwiLFwiXHU5MDRGXHU5MDUwXHU5MDUxXHU5MDUyXHU5MDBFXHU5MDQ5XHU5MDNFXHU5MDU2XHU5MDU4XHU5MDVFXHU5MDY4XHU5MDZGXHU5MDc2XHU5NkE4XHU5MDcyXHU5MDgyXHU5MDdEXHU5MDgxXHU5MDgwXHU5MDhBXHU5MDg5XHU5MDhGXHU5MEE4XHU5MEFGXHU5MEIxXHU5MEI1XHU5MEUyXHU5MEU0XHU2MjQ4XHU5MERCXHU5MTAyXHU5MTEyXHU5MTE5XHU5MTMyXHU5MTMwXHU5MTRBXHU5MTU2XHU5MTU4XHU5MTYzXHU5MTY1XHU5MTY5XHU5MTczXHU5MTcyXHU5MThCXHU5MTg5XHU5MTgyXHU5MUEyXHU5MUFCXHU5MUFGXHU5MUFBXHU5MUI1XHU5MUI0XHU5MUJBXHU5MUMwXHU5MUMxXHU5MUM5XHU5MUNCXHU5MUQwXHU5MUQ2XHU5MURGXHU5MUUxXHU5MURCXHU5MUZDXHU5MUY1XHU5MUY2XHU5MjFFXHU5MUZGXHU5MjE0XHU5MjJDXHU5MjE1XHU5MjExXHU5MjVFXHU5MjU3XHU5MjQ1XHU5MjQ5XHU5MjY0XHU5MjQ4XHU5Mjk1XHU5MjNGXHU5MjRCXHU5MjUwXHU5MjlDXHU5Mjk2XHU5MjkzXHU5MjlCXHU5MjVBXHU5MkNGXHU5MkI5XHU5MkI3XHU5MkU5XHU5MzBGXHU5MkZBXHU5MzQ0XHU5MzJFXCJdLFxuW1wiZWZhMVwiLFwiXHU5MzE5XHU5MzIyXHU5MzFBXHU5MzIzXHU5MzNBXHU5MzM1XHU5MzNCXHU5MzVDXHU5MzYwXHU5MzdDXHU5MzZFXHU5MzU2XHU5M0IwXHU5M0FDXHU5M0FEXHU5Mzk0XHU5M0I5XHU5M0Q2XHU5M0Q3XHU5M0U4XHU5M0U1XHU5M0Q4XHU5M0MzXHU5M0REXHU5M0QwXHU5M0M4XHU5M0U0XHU5NDFBXHU5NDE0XHU5NDEzXHU5NDAzXHU5NDA3XHU5NDEwXHU5NDM2XHU5NDJCXHU5NDM1XHU5NDIxXHU5NDNBXHU5NDQxXHU5NDUyXHU5NDQ0XHU5NDVCXHU5NDYwXHU5NDYyXHU5NDVFXHU5NDZBXHU5MjI5XHU5NDcwXHU5NDc1XHU5NDc3XHU5NDdEXHU5NDVBXHU5NDdDXHU5NDdFXHU5NDgxXHU5NDdGXHU5NTgyXHU5NTg3XHU5NThBXHU5NTk0XHU5NTk2XHU5NTk4XHU5NTk5XHU5NUEwXHU5NUE4XHU5NUE3XHU5NUFEXHU5NUJDXHU5NUJCXHU5NUI5XHU5NUJFXHU5NUNBXHU2RkY2XHU5NUMzXHU5NUNEXHU5NUNDXHU5NUQ1XHU5NUQ0XHU5NUQ2XHU5NURDXHU5NUUxXHU5NUU1XHU5NUUyXHU5NjIxXHU5NjI4XHU5NjJFXHU5NjJGXHU5NjQyXHU5NjRDXHU5NjRGXHU5NjRCXHU5Njc3XHU5NjVDXHU5NjVFXCJdLFxuW1wiZjBhMVwiLFwiXHU5NjVEXHU5NjVGXHU5NjY2XHU5NjcyXHU5NjZDXHU5NjhEXHU5Njk4XHU5Njk1XHU5Njk3XHU5NkFBXHU5NkE3XHU5NkIxXHU5NkIyXHU5NkIwXHU5NkI0XHU5NkI2XHU5NkI4XHU5NkI5XHU5NkNFXHU5NkNCXHU5NkM5XHU5NkNEXHU4OTREXHU5NkRDXHU5NzBEXHU5NkQ1XHU5NkY5XHU5NzA0XHU5NzA2XHU5NzA4XHU5NzEzXHU5NzBFXHU5NzExXHU5NzBGXHU5NzE2XHU5NzE5XHU5NzI0XHU5NzJBXHU5NzMwXHU5NzM5XHU5NzNEXHU5NzNFXHU5NzQ0XHU5NzQ2XHU5NzQ4XHU5NzQyXHU5NzQ5XHU5NzVDXHU5NzYwXHU5NzY0XHU5NzY2XHU5NzY4XHU1MkQyXHU5NzZCXHU5NzcxXHU5Nzc5XHU5Nzg1XHU5NzdDXHU5NzgxXHU5NzdBXHU5Nzg2XHU5NzhCXHU5NzhGXHU5NzkwXHU5NzlDXHU5N0E4XHU5N0E2XHU5N0EzXHU5N0IzXHU5N0I0XHU5N0MzXHU5N0M2XHU5N0M4XHU5N0NCXHU5N0RDXHU5N0VEXHU5RjRGXHU5N0YyXHU3QURGXHU5N0Y2XHU5N0Y1XHU5ODBGXHU5ODBDXHU5ODM4XHU5ODI0XHU5ODIxXHU5ODM3XHU5ODNEXHU5ODQ2XHU5ODRGXHU5ODRCXHU5ODZCXHU5ODZGXHU5ODcwXCJdLFxuW1wiZjFhMVwiLFwiXHU5ODcxXHU5ODc0XHU5ODczXHU5OEFBXHU5OEFGXHU5OEIxXHU5OEI2XHU5OEM0XHU5OEMzXHU5OEM2XHU5OEU5XHU5OEVCXHU5OTAzXHU5OTA5XHU5OTEyXHU5OTE0XHU5OTE4XHU5OTIxXHU5OTFEXHU5OTFFXHU5OTI0XHU5OTIwXHU5OTJDXHU5OTJFXHU5OTNEXHU5OTNFXHU5OTQyXHU5OTQ5XHU5OTQ1XHU5OTUwXHU5OTRCXHU5OTUxXHU5OTUyXHU5OTRDXHU5OTU1XHU5OTk3XHU5OTk4XHU5OUE1XHU5OUFEXHU5OUFFXHU5OUJDXHU5OURGXHU5OURCXHU5OUREXHU5OUQ4XHU5OUQxXHU5OUVEXHU5OUVFXHU5OUYxXHU5OUYyXHU5OUZCXHU5OUY4XHU5QTAxXHU5QTBGXHU5QTA1XHU5OUUyXHU5QTE5XHU5QTJCXHU5QTM3XHU5QTQ1XHU5QTQyXHU5QTQwXHU5QTQzXHU5QTNFXHU5QTU1XHU5QTREXHU5QTVCXHU5QTU3XHU5QTVGXHU5QTYyXHU5QTY1XHU5QTY0XHU5QTY5XHU5QTZCXHU5QTZBXHU5QUFEXHU5QUIwXHU5QUJDXHU5QUMwXHU5QUNGXHU5QUQxXHU5QUQzXHU5QUQ0XHU5QURFXHU5QURGXHU5QUUyXHU5QUUzXHU5QUU2XHU5QUVGXHU5QUVCXHU5QUVFXHU5QUY0XHU5QUYxXHU5QUY3XCJdLFxuW1wiZjJhMVwiLFwiXHU5QUZCXHU5QjA2XHU5QjE4XHU5QjFBXHU5QjFGXHU5QjIyXHU5QjIzXHU5QjI1XHU5QjI3XHU5QjI4XHU5QjI5XHU5QjJBXHU5QjJFXHU5QjJGXHU5QjMyXHU5QjQ0XHU5QjQzXHU5QjRGXHU5QjREXHU5QjRFXHU5QjUxXHU5QjU4XHU5Qjc0XHU5QjkzXHU5QjgzXHU5QjkxXHU5Qjk2XHU5Qjk3XHU5QjlGXHU5QkEwXHU5QkE4XHU5QkI0XHU5QkMwXHU5QkNBXHU5QkI5XHU5QkM2XHU5QkNGXHU5QkQxXHU5QkQyXHU5QkUzXHU5QkUyXHU5QkU0XHU5QkQ0XHU5QkUxXHU5QzNBXHU5QkYyXHU5QkYxXHU5QkYwXHU5QzE1XHU5QzE0XHU5QzA5XHU5QzEzXHU5QzBDXHU5QzA2XHU5QzA4XHU5QzEyXHU5QzBBXHU5QzA0XHU5QzJFXHU5QzFCXHU5QzI1XHU5QzI0XHU5QzIxXHU5QzMwXHU5QzQ3XHU5QzMyXHU5QzQ2XHU5QzNFXHU5QzVBXHU5QzYwXHU5QzY3XHU5Qzc2XHU5Qzc4XHU5Q0U3XHU5Q0VDXHU5Q0YwXHU5RDA5XHU5RDA4XHU5Q0VCXHU5RDAzXHU5RDA2XHU5RDJBXHU5RDI2XHU5REFGXHU5RDIzXHU5RDFGXHU5RDQ0XHU5RDE1XHU5RDEyXHU5RDQxXHU5RDNGXHU5RDNFXHU5RDQ2XHU5RDQ4XCJdLFxuW1wiZjNhMVwiLFwiXHU5RDVEXHU5RDVFXHU5RDY0XHU5RDUxXHU5RDUwXHU5RDU5XHU5RDcyXHU5RDg5XHU5RDg3XHU5REFCXHU5RDZGXHU5RDdBXHU5RDlBXHU5REE0XHU5REE5XHU5REIyXHU5REM0XHU5REMxXHU5REJCXHU5REI4XHU5REJBXHU5REM2XHU5RENGXHU5REMyXHU5REQ5XHU5REQzXHU5REY4XHU5REU2XHU5REVEXHU5REVGXHU5REZEXHU5RTFBXHU5RTFCXHU5RTFFXHU5RTc1XHU5RTc5XHU5RTdEXHU5RTgxXHU5RTg4XHU5RThCXHU5RThDXHU5RTkyXHU5RTk1XHU5RTkxXHU5RTlEXHU5RUE1XHU5RUE5XHU5RUI4XHU5RUFBXHU5RUFEXHU5NzYxXHU5RUNDXHU5RUNFXHU5RUNGXHU5RUQwXHU5RUQ0XHU5RURDXHU5RURFXHU5RUREXHU5RUUwXHU5RUU1XHU5RUU4XHU5RUVGXHU5RUY0XHU5RUY2XHU5RUY3XHU5RUY5XHU5RUZCXHU5RUZDXHU5RUZEXHU5RjA3XHU5RjA4XHU3NkI3XHU5RjE1XHU5RjIxXHU5RjJDXHU5RjNFXHU5RjRBXHU5RjUyXHU5RjU0XHU5RjYzXHU5RjVGXHU5RjYwXHU5RjYxXHU5RjY2XHU5RjY3XHU5RjZDXHU5RjZBXHU5Rjc3XHU5RjcyXHU5Rjc2XHU5Rjk1XHU5RjlDXHU5RkEwXCJdLFxuW1wiZjRhMVwiLFwiXHU1ODJGXHU2OUM3XHU5MDU5XHU3NDY0XHU1MURDXHU3MTk5XCJdLFxuW1wiZjlhMVwiLFwiXHU3RThBXHU4OTFDXHU5MzQ4XHU5Mjg4XHU4NERDXHU0RkM5XHU3MEJCXHU2NjMxXHU2OEM4XHU5MkY5XHU2NkZCXHU1RjQ1XHU0RTI4XHU0RUUxXHU0RUZDXHU0RjAwXHU0RjAzXHU0RjM5XHU0RjU2XHU0RjkyXHU0RjhBXHU0RjlBXHU0Rjk0XHU0RkNEXHU1MDQwXHU1MDIyXHU0RkZGXHU1MDFFXHU1MDQ2XHU1MDcwXHU1MDQyXHU1MDk0XHU1MEY0XHU1MEQ4XHU1MTRBXHU1MTY0XHU1MTlEXHU1MUJFXHU1MUVDXHU1MjE1XHU1MjlDXHU1MkE2XHU1MkMwXHU1MkRCXHU1MzAwXHU1MzA3XHU1MzI0XHU1MzcyXHU1MzkzXHU1M0IyXHU1M0REXHVGQTBFXHU1NDlDXHU1NDhBXHU1NEE5XHU1NEZGXHU1NTg2XHU1NzU5XHU1NzY1XHU1N0FDXHU1N0M4XHU1N0M3XHVGQTBGXHVGQTEwXHU1ODlFXHU1OEIyXHU1OTBCXHU1OTUzXHU1OTVCXHU1OTVEXHU1OTYzXHU1OUE0XHU1OUJBXHU1QjU2XHU1QkMwXHU3NTJGXHU1QkQ4XHU1QkVDXHU1QzFFXHU1Q0E2XHU1Q0JBXHU1Q0Y1XHU1RDI3XHU1RDUzXHVGQTExXHU1RDQyXHU1RDZEXHU1REI4XHU1REI5XHU1REQwXHU1RjIxXHU1RjM0XHU1RjY3XHU1RkI3XCJdLFxuW1wiZmFhMVwiLFwiXHU1RkRFXHU2MDVEXHU2MDg1XHU2MDhBXHU2MERFXHU2MEQ1XHU2MTIwXHU2MEYyXHU2MTExXHU2MTM3XHU2MTMwXHU2MTk4XHU2MjEzXHU2MkE2XHU2M0Y1XHU2NDYwXHU2NDlEXHU2NENFXHU2NTRFXHU2NjAwXHU2NjE1XHU2NjNCXHU2NjA5XHU2NjJFXHU2NjFFXHU2NjI0XHU2NjY1XHU2NjU3XHU2NjU5XHVGQTEyXHU2NjczXHU2Njk5XHU2NkEwXHU2NkIyXHU2NkJGXHU2NkZBXHU2NzBFXHVGOTI5XHU2NzY2XHU2N0JCXHU2ODUyXHU2N0MwXHU2ODAxXHU2ODQ0XHU2OENGXHVGQTEzXHU2OTY4XHVGQTE0XHU2OTk4XHU2OUUyXHU2QTMwXHU2QTZCXHU2QTQ2XHU2QTczXHU2QTdFXHU2QUUyXHU2QUU0XHU2QkQ2XHU2QzNGXHU2QzVDXHU2Qzg2XHU2QzZGXHU2Q0RBXHU2RDA0XHU2RDg3XHU2RDZGXHU2RDk2XHU2REFDXHU2RENGXHU2REY4XHU2REYyXHU2REZDXHU2RTM5XHU2RTVDXHU2RTI3XHU2RTNDXHU2RUJGXHU2Rjg4XHU2RkI1XHU2RkY1XHU3MDA1XHU3MDA3XHU3MDI4XHU3MDg1XHU3MEFCXHU3MTBGXHU3MTA0XHU3MTVDXHU3MTQ2XHU3MTQ3XHVGQTE1XHU3MUMxXHU3MUZFXHU3MkIxXCJdLFxuW1wiZmJhMVwiLFwiXHU3MkJFXHU3MzI0XHVGQTE2XHU3Mzc3XHU3M0JEXHU3M0M5XHU3M0Q2XHU3M0UzXHU3M0QyXHU3NDA3XHU3M0Y1XHU3NDI2XHU3NDJBXHU3NDI5XHU3NDJFXHU3NDYyXHU3NDg5XHU3NDlGXHU3NTAxXHU3NTZGXHU3NjgyXHU3NjlDXHU3NjlFXHU3NjlCXHU3NkE2XHVGQTE3XHU3NzQ2XHU1MkFGXHU3ODIxXHU3ODRFXHU3ODY0XHU3ODdBXHU3OTMwXHVGQTE4XHVGQTE5XHVGQTFBXHU3OTk0XHVGQTFCXHU3OTlCXHU3QUQxXHU3QUU3XHVGQTFDXHU3QUVCXHU3QjlFXHVGQTFEXHU3RDQ4XHU3RDVDXHU3REI3XHU3REEwXHU3REQ2XHU3RTUyXHU3RjQ3XHU3RkExXHVGQTFFXHU4MzAxXHU4MzYyXHU4MzdGXHU4M0M3XHU4M0Y2XHU4NDQ4XHU4NEI0XHU4NTUzXHU4NTU5XHU4NTZCXHVGQTFGXHU4NUIwXHVGQTIwXHVGQTIxXHU4ODA3XHU4OEY1XHU4QTEyXHU4QTM3XHU4QTc5XHU4QUE3XHU4QUJFXHU4QURGXHVGQTIyXHU4QUY2XHU4QjUzXHU4QjdGXHU4Q0YwXHU4Q0Y0XHU4RDEyXHU4RDc2XHVGQTIzXHU4RUNGXHVGQTI0XHVGQTI1XHU5MDY3XHU5MERFXHVGQTI2XHU5MTE1XHU5MTI3XHU5MURBXCJdLFxuW1wiZmNhMVwiLFwiXHU5MUQ3XHU5MURFXHU5MUVEXHU5MUVFXHU5MUU0XHU5MUU1XHU5MjA2XHU5MjEwXHU5MjBBXHU5MjNBXHU5MjQwXHU5MjNDXHU5MjRFXHU5MjU5XHU5MjUxXHU5MjM5XHU5MjY3XHU5MkE3XHU5Mjc3XHU5Mjc4XHU5MkU3XHU5MkQ3XHU5MkQ5XHU5MkQwXHVGQTI3XHU5MkQ1XHU5MkUwXHU5MkQzXHU5MzI1XHU5MzIxXHU5MkZCXHVGQTI4XHU5MzFFXHU5MkZGXHU5MzFEXHU5MzAyXHU5MzcwXHU5MzU3XHU5M0E0XHU5M0M2XHU5M0RFXHU5M0Y4XHU5NDMxXHU5NDQ1XHU5NDQ4XHU5NTkyXHVGOURDXHVGQTI5XHU5NjlEXHU5NkFGXHU5NzMzXHU5NzNCXHU5NzQzXHU5NzREXHU5NzRGXHU5NzUxXHU5NzU1XHU5ODU3XHU5ODY1XHVGQTJBXHVGQTJCXHU5OTI3XHVGQTJDXHU5OTlFXHU5QTRFXHU5QUQ5XHU5QURDXHU5Qjc1XHU5QjcyXHU5QjhGXHU5QkIxXHU5QkJCXHU5QzAwXHU5RDcwXHU5RDZCXHVGQTJEXHU5RTE5XHU5RUQxXCJdLFxuW1wiZmNmMVwiLFwiXHUyMTcwXCIsOSxcIlx1RkZFMlx1RkZFNFx1RkYwN1x1RkYwMlwiXSxcbltcIjhmYTJhZlwiLFwiXHUwMkQ4XHUwMkM3XHUwMEI4XHUwMkQ5XHUwMkREXHUwMEFGXHUwMkRCXHUwMkRBXHVGRjVFXHUwMzg0XHUwMzg1XCJdLFxuW1wiOGZhMmMyXCIsXCJcdTAwQTFcdTAwQTZcdTAwQkZcIl0sXG5bXCI4ZmEyZWJcIixcIlx1MDBCQVx1MDBBQVx1MDBBOVx1MDBBRVx1MjEyMlx1MDBBNFx1MjExNlwiXSxcbltcIjhmYTZlMVwiLFwiXHUwMzg2XHUwMzg4XHUwMzg5XHUwMzhBXHUwM0FBXCJdLFxuW1wiOGZhNmU3XCIsXCJcdTAzOENcIl0sXG5bXCI4ZmE2ZTlcIixcIlx1MDM4RVx1MDNBQlwiXSxcbltcIjhmYTZlY1wiLFwiXHUwMzhGXCJdLFxuW1wiOGZhNmYxXCIsXCJcdTAzQUNcdTAzQURcdTAzQUVcdTAzQUZcdTAzQ0FcdTAzOTBcdTAzQ0NcdTAzQzJcdTAzQ0RcdTAzQ0JcdTAzQjBcdTAzQ0VcIl0sXG5bXCI4ZmE3YzJcIixcIlx1MDQwMlwiLDEwLFwiXHUwNDBFXHUwNDBGXCJdLFxuW1wiOGZhN2YyXCIsXCJcdTA0NTJcIiwxMCxcIlx1MDQ1RVx1MDQ1RlwiXSxcbltcIjhmYTlhMVwiLFwiXHUwMEM2XHUwMTEwXCJdLFxuW1wiOGZhOWE0XCIsXCJcdTAxMjZcIl0sXG5bXCI4ZmE5YTZcIixcIlx1MDEzMlwiXSxcbltcIjhmYTlhOFwiLFwiXHUwMTQxXHUwMTNGXCJdLFxuW1wiOGZhOWFiXCIsXCJcdTAxNEFcdTAwRDhcdTAxNTJcIl0sXG5bXCI4ZmE5YWZcIixcIlx1MDE2Nlx1MDBERVwiXSxcbltcIjhmYTljMVwiLFwiXHUwMEU2XHUwMTExXHUwMEYwXHUwMTI3XHUwMTMxXHUwMTMzXHUwMTM4XHUwMTQyXHUwMTQwXHUwMTQ5XHUwMTRCXHUwMEY4XHUwMTUzXHUwMERGXHUwMTY3XHUwMEZFXCJdLFxuW1wiOGZhYWExXCIsXCJcdTAwQzFcdTAwQzBcdTAwQzRcdTAwQzJcdTAxMDJcdTAxQ0RcdTAxMDBcdTAxMDRcdTAwQzVcdTAwQzNcdTAxMDZcdTAxMDhcdTAxMENcdTAwQzdcdTAxMEFcdTAxMEVcdTAwQzlcdTAwQzhcdTAwQ0JcdTAwQ0FcdTAxMUFcdTAxMTZcdTAxMTJcdTAxMThcIl0sXG5bXCI4ZmFhYmFcIixcIlx1MDExQ1x1MDExRVx1MDEyMlx1MDEyMFx1MDEyNFx1MDBDRFx1MDBDQ1x1MDBDRlx1MDBDRVx1MDFDRlx1MDEzMFx1MDEyQVx1MDEyRVx1MDEyOFx1MDEzNFx1MDEzNlx1MDEzOVx1MDEzRFx1MDEzQlx1MDE0M1x1MDE0N1x1MDE0NVx1MDBEMVx1MDBEM1x1MDBEMlx1MDBENlx1MDBENFx1MDFEMVx1MDE1MFx1MDE0Q1x1MDBENVx1MDE1NFx1MDE1OFx1MDE1Nlx1MDE1QVx1MDE1Q1x1MDE2MFx1MDE1RVx1MDE2NFx1MDE2Mlx1MDBEQVx1MDBEOVx1MDBEQ1x1MDBEQlx1MDE2Q1x1MDFEM1x1MDE3MFx1MDE2QVx1MDE3Mlx1MDE2RVx1MDE2OFx1MDFEN1x1MDFEQlx1MDFEOVx1MDFENVx1MDE3NFx1MDBERFx1MDE3OFx1MDE3Nlx1MDE3OVx1MDE3RFx1MDE3QlwiXSxcbltcIjhmYWJhMVwiLFwiXHUwMEUxXHUwMEUwXHUwMEU0XHUwMEUyXHUwMTAzXHUwMUNFXHUwMTAxXHUwMTA1XHUwMEU1XHUwMEUzXHUwMTA3XHUwMTA5XHUwMTBEXHUwMEU3XHUwMTBCXHUwMTBGXHUwMEU5XHUwMEU4XHUwMEVCXHUwMEVBXHUwMTFCXHUwMTE3XHUwMTEzXHUwMTE5XHUwMUY1XHUwMTFEXHUwMTFGXCJdLFxuW1wiOGZhYmJkXCIsXCJcdTAxMjFcdTAxMjVcdTAwRURcdTAwRUNcdTAwRUZcdTAwRUVcdTAxRDBcIl0sXG5bXCI4ZmFiYzVcIixcIlx1MDEyQlx1MDEyRlx1MDEyOVx1MDEzNVx1MDEzN1x1MDEzQVx1MDEzRVx1MDEzQ1x1MDE0NFx1MDE0OFx1MDE0Nlx1MDBGMVx1MDBGM1x1MDBGMlx1MDBGNlx1MDBGNFx1MDFEMlx1MDE1MVx1MDE0RFx1MDBGNVx1MDE1NVx1MDE1OVx1MDE1N1x1MDE1Qlx1MDE1RFx1MDE2MVx1MDE1Rlx1MDE2NVx1MDE2M1x1MDBGQVx1MDBGOVx1MDBGQ1x1MDBGQlx1MDE2RFx1MDFENFx1MDE3MVx1MDE2Qlx1MDE3M1x1MDE2Rlx1MDE2OVx1MDFEOFx1MDFEQ1x1MDFEQVx1MDFENlx1MDE3NVx1MDBGRFx1MDBGRlx1MDE3N1x1MDE3QVx1MDE3RVx1MDE3Q1wiXSxcbltcIjhmYjBhMVwiLFwiXHU0RTAyXHU0RTA0XHU0RTA1XHU0RTBDXHU0RTEyXHU0RTFGXHU0RTIzXHU0RTI0XHU0RTI4XHU0RTJCXHU0RTJFXHU0RTJGXHU0RTMwXHU0RTM1XHU0RTQwXHU0RTQxXHU0RTQ0XHU0RTQ3XHU0RTUxXHU0RTVBXHU0RTVDXHU0RTYzXHU0RTY4XHU0RTY5XHU0RTc0XHU0RTc1XHU0RTc5XHU0RTdGXHU0RThEXHU0RTk2XHU0RTk3XHU0RTlEXHU0RUFGXHU0RUI5XHU0RUMzXHU0RUQwXHU0RURBXHU0RURCXHU0RUUwXHU0RUUxXHU0RUUyXHU0RUU4XHU0RUVGXHU0RUYxXHU0RUYzXHU0RUY1XHU0RUZEXHU0RUZFXHU0RUZGXHU0RjAwXHU0RjAyXHU0RjAzXHU0RjA4XHU0RjBCXHU0RjBDXHU0RjEyXHU0RjE1XHU0RjE2XHU0RjE3XHU0RjE5XHU0RjJFXHU0RjMxXHU0RjYwXHU0RjMzXHU0RjM1XHU0RjM3XHU0RjM5XHU0RjNCXHU0RjNFXHU0RjQwXHU0RjQyXHU0RjQ4XHU0RjQ5XHU0RjRCXHU0RjRDXHU0RjUyXHU0RjU0XHU0RjU2XHU0RjU4XHU0RjVGXHU0RjYzXHU0RjZBXHU0RjZDXHU0RjZFXHU0RjcxXHU0Rjc3XHU0Rjc4XHU0Rjc5XHU0RjdBXHU0RjdEXHU0RjdFXHU0RjgxXHU0RjgyXHU0Rjg0XCJdLFxuW1wiOGZiMWExXCIsXCJcdTRGODVcdTRGODlcdTRGOEFcdTRGOENcdTRGOEVcdTRGOTBcdTRGOTJcdTRGOTNcdTRGOTRcdTRGOTdcdTRGOTlcdTRGOUFcdTRGOUVcdTRGOUZcdTRGQjJcdTRGQjdcdTRGQjlcdTRGQkJcdTRGQkNcdTRGQkRcdTRGQkVcdTRGQzBcdTRGQzFcdTRGQzVcdTRGQzZcdTRGQzhcdTRGQzlcdTRGQ0JcdTRGQ0NcdTRGQ0RcdTRGQ0ZcdTRGRDJcdTRGRENcdTRGRTBcdTRGRTJcdTRGRjBcdTRGRjJcdTRGRkNcdTRGRkRcdTRGRkZcdTUwMDBcdTUwMDFcdTUwMDRcdTUwMDdcdTUwMEFcdTUwMENcdTUwMEVcdTUwMTBcdTUwMTNcdTUwMTdcdTUwMThcdTUwMUJcdTUwMUNcdTUwMURcdTUwMUVcdTUwMjJcdTUwMjdcdTUwMkVcdTUwMzBcdTUwMzJcdTUwMzNcdTUwMzVcdTUwNDBcdTUwNDFcdTUwNDJcdTUwNDVcdTUwNDZcdTUwNEFcdTUwNENcdTUwNEVcdTUwNTFcdTUwNTJcdTUwNTNcdTUwNTdcdTUwNTlcdTUwNUZcdTUwNjBcdTUwNjJcdTUwNjNcdTUwNjZcdTUwNjdcdTUwNkFcdTUwNkRcdTUwNzBcdTUwNzFcdTUwM0JcdTUwODFcdTUwODNcdTUwODRcdTUwODZcdTUwOEFcdTUwOEVcdTUwOEZcdTUwOTBcIl0sXG5bXCI4ZmIyYTFcIixcIlx1NTA5Mlx1NTA5M1x1NTA5NFx1NTA5Nlx1NTA5Qlx1NTA5Q1x1NTA5RVwiLDQsXCJcdTUwQUFcdTUwQUZcdTUwQjBcdTUwQjlcdTUwQkFcdTUwQkRcdTUwQzBcdTUwQzNcdTUwQzRcdTUwQzdcdTUwQ0NcdTUwQ0VcdTUwRDBcdTUwRDNcdTUwRDRcdTUwRDhcdTUwRENcdTUwRERcdTUwREZcdTUwRTJcdTUwRTRcdTUwRTZcdTUwRThcdTUwRTlcdTUwRUZcdTUwRjFcdTUwRjZcdTUwRkFcdTUwRkVcdTUxMDNcdTUxMDZcdTUxMDdcdTUxMDhcdTUxMEJcdTUxMENcdTUxMERcdTUxMEVcdTUwRjJcdTUxMTBcdTUxMTdcdTUxMTlcdTUxMUJcdTUxMUNcdTUxMURcdTUxMUVcdTUxMjNcdTUxMjdcdTUxMjhcdTUxMkNcdTUxMkRcdTUxMkZcdTUxMzFcdTUxMzNcdTUxMzRcdTUxMzVcdTUxMzhcdTUxMzlcdTUxNDJcdTUxNEFcdTUxNEZcdTUxNTNcdTUxNTVcdTUxNTdcdTUxNThcdTUxNUZcdTUxNjRcdTUxNjZcdTUxN0VcdTUxODNcdTUxODRcdTUxOEJcdTUxOEVcdTUxOThcdTUxOURcdTUxQTFcdTUxQTNcdTUxQURcdTUxQjhcdTUxQkFcdTUxQkNcdTUxQkVcdTUxQkZcdTUxQzJcIl0sXG5bXCI4ZmIzYTFcIixcIlx1NTFDOFx1NTFDRlx1NTFEMVx1NTFEMlx1NTFEM1x1NTFENVx1NTFEOFx1NTFERVx1NTFFMlx1NTFFNVx1NTFFRVx1NTFGMlx1NTFGM1x1NTFGNFx1NTFGN1x1NTIwMVx1NTIwMlx1NTIwNVx1NTIxMlx1NTIxM1x1NTIxNVx1NTIxNlx1NTIxOFx1NTIyMlx1NTIyOFx1NTIzMVx1NTIzMlx1NTIzNVx1NTIzQ1x1NTI0NVx1NTI0OVx1NTI1NVx1NTI1N1x1NTI1OFx1NTI1QVx1NTI1Q1x1NTI1Rlx1NTI2MFx1NTI2MVx1NTI2Nlx1NTI2RVx1NTI3N1x1NTI3OFx1NTI3OVx1NTI4MFx1NTI4Mlx1NTI4NVx1NTI4QVx1NTI4Q1x1NTI5M1x1NTI5NVx1NTI5Nlx1NTI5N1x1NTI5OFx1NTI5QVx1NTI5Q1x1NTJBNFx1NTJBNVx1NTJBNlx1NTJBN1x1NTJBRlx1NTJCMFx1NTJCNlx1NTJCN1x1NTJCOFx1NTJCQVx1NTJCQlx1NTJCRFx1NTJDMFx1NTJDNFx1NTJDNlx1NTJDOFx1NTJDQ1x1NTJDRlx1NTJEMVx1NTJENFx1NTJENlx1NTJEQlx1NTJEQ1x1NTJFMVx1NTJFNVx1NTJFOFx1NTJFOVx1NTJFQVx1NTJFQ1x1NTJGMFx1NTJGMVx1NTJGNFx1NTJGNlx1NTJGN1x1NTMwMFx1NTMwM1x1NTMwQVx1NTMwQlwiXSxcbltcIjhmYjRhMVwiLFwiXHU1MzBDXHU1MzExXHU1MzEzXHU1MzE4XHU1MzFCXHU1MzFDXHU1MzFFXHU1MzFGXHU1MzI1XHU1MzI3XHU1MzI4XHU1MzI5XHU1MzJCXHU1MzJDXHU1MzJEXHU1MzMwXHU1MzMyXHU1MzM1XHU1MzNDXHU1MzNEXHU1MzNFXHU1MzQyXHU1MzRDXHU1MzRCXHU1MzU5XHU1MzVCXHU1MzYxXHU1MzYzXHU1MzY1XHU1MzZDXHU1MzZEXHU1MzcyXHU1Mzc5XHU1MzdFXHU1MzgzXHU1Mzg3XHU1Mzg4XHU1MzhFXHU1MzkzXHU1Mzk0XHU1Mzk5XHU1MzlEXHU1M0ExXHU1M0E0XHU1M0FBXHU1M0FCXHU1M0FGXHU1M0IyXHU1M0I0XHU1M0I1XHU1M0I3XHU1M0I4XHU1M0JBXHU1M0JEXHU1M0MwXHU1M0M1XHU1M0NGXHU1M0QyXHU1M0QzXHU1M0Q1XHU1M0RBXHU1M0REXHU1M0RFXHU1M0UwXHU1M0U2XHU1M0U3XHU1M0Y1XHU1NDAyXHU1NDEzXHU1NDFBXHU1NDIxXHU1NDI3XHU1NDI4XHU1NDJBXHU1NDJGXHU1NDMxXHU1NDM0XHU1NDM1XHU1NDQzXHU1NDQ0XHU1NDQ3XHU1NDREXHU1NDRGXHU1NDVFXHU1NDYyXHU1NDY0XHU1NDY2XHU1NDY3XHU1NDY5XHU1NDZCXHU1NDZEXHU1NDZFXHU1NDc0XHU1NDdGXCJdLFxuW1wiOGZiNWExXCIsXCJcdTU0ODFcdTU0ODNcdTU0ODVcdTU0ODhcdTU0ODlcdTU0OERcdTU0OTFcdTU0OTVcdTU0OTZcdTU0OUNcdTU0OUZcdTU0QTFcdTU0QTZcdTU0QTdcdTU0QTlcdTU0QUFcdTU0QURcdTU0QUVcdTU0QjFcdTU0QjdcdTU0QjlcdTU0QkFcdTU0QkJcdTU0QkZcdTU0QzZcdTU0Q0FcdTU0Q0RcdTU0Q0VcdTU0RTBcdTU0RUFcdTU0RUNcdTU0RUZcdTU0RjZcdTU0RkNcdTU0RkVcdTU0RkZcdTU1MDBcdTU1MDFcdTU1MDVcdTU1MDhcdTU1MDlcdTU1MENcdTU1MERcdTU1MEVcdTU1MTVcdTU1MkFcdTU1MkJcdTU1MzJcdTU1MzVcdTU1MzZcdTU1M0JcdTU1M0NcdTU1M0RcdTU1NDFcdTU1NDdcdTU1NDlcdTU1NEFcdTU1NERcdTU1NTBcdTU1NTFcdTU1NThcdTU1NUFcdTU1NUJcdTU1NUVcdTU1NjBcdTU1NjFcdTU1NjRcdTU1NjZcdTU1N0ZcdTU1ODFcdTU1ODJcdTU1ODZcdTU1ODhcdTU1OEVcdTU1OEZcdTU1OTFcdTU1OTJcdTU1OTNcdTU1OTRcdTU1OTdcdTU1QTNcdTU1QTRcdTU1QURcdTU1QjJcdTU1QkZcdTU1QzFcdTU1QzNcdTU1QzZcdTU1QzlcdTU1Q0JcdTU1Q0NcdTU1Q0VcdTU1RDFcdTU1RDJcIl0sXG5bXCI4ZmI2YTFcIixcIlx1NTVEM1x1NTVEN1x1NTVEOFx1NTVEQlx1NTVERVx1NTVFMlx1NTVFOVx1NTVGNlx1NTVGRlx1NTYwNVx1NTYwOFx1NTYwQVx1NTYwRFwiLDUsXCJcdTU2MTlcdTU2MkNcdTU2MzBcdTU2MzNcdTU2MzVcdTU2MzdcdTU2MzlcdTU2M0JcdTU2M0NcdTU2M0RcdTU2M0ZcdTU2NDBcdTU2NDFcdTU2NDNcdTU2NDRcdTU2NDZcdTU2NDlcdTU2NEJcdTU2NERcdTU2NEZcdTU2NTRcdTU2NUVcdTU2NjBcdTU2NjFcdTU2NjJcdTU2NjNcdTU2NjZcdTU2NjlcdTU2NkRcdTU2NkZcdTU2NzFcdTU2NzJcdTU2NzVcdTU2ODRcdTU2ODVcdTU2ODhcdTU2OEJcdTU2OENcdTU2OTVcdTU2OTlcdTU2OUFcdTU2OURcdTU2OUVcdTU2OUZcdTU2QTZcdTU2QTdcdTU2QThcdTU2QTlcdTU2QUJcdTU2QUNcdTU2QURcdTU2QjFcdTU2QjNcdTU2QjdcdTU2QkVcdTU2QzVcdTU2QzlcdTU2Q0FcdTU2Q0JcdTU2Q0ZcdTU2RDBcdTU2Q0NcdTU2Q0RcdTU2RDlcdTU2RENcdTU2RERcdTU2REZcdTU2RTFcdTU2RTRcIiw0LFwiXHU1NkYxXHU1NkVCXHU1NkVEXCJdLFxuW1wiOGZiN2ExXCIsXCJcdTU2RjZcdTU2RjdcdTU3MDFcdTU3MDJcdTU3MDdcdTU3MEFcdTU3MENcdTU3MTFcdTU3MTVcdTU3MUFcdTU3MUJcdTU3MURcdTU3MjBcdTU3MjJcdTU3MjNcdTU3MjRcdTU3MjVcdTU3MjlcdTU3MkFcdTU3MkNcdTU3MkVcdTU3MkZcdTU3MzNcdTU3MzRcdTU3M0RcdTU3M0VcdTU3M0ZcdTU3NDVcdTU3NDZcdTU3NENcdTU3NERcdTU3NTJcdTU3NjJcdTU3NjVcdTU3NjdcdTU3NjhcdTU3NkJcdTU3NkRcIiw0LFwiXHU1NzczXHU1Nzc0XHU1Nzc1XHU1Nzc3XHU1Nzc5XHU1NzdBXHU1NzdCXHU1NzdDXHU1NzdFXHU1NzgxXHU1NzgzXHU1NzhDXHU1Nzk0XHU1Nzk3XHU1Nzk5XHU1NzlBXHU1NzlDXHU1NzlEXHU1NzlFXHU1NzlGXHU1N0ExXHU1Nzk1XHU1N0E3XHU1N0E4XHU1N0E5XHU1N0FDXHU1N0I4XHU1N0JEXHU1N0M3XHU1N0M4XHU1N0NDXHU1N0NGXHU1N0Q1XHU1N0REXHU1N0RFXHU1N0U0XHU1N0U2XHU1N0U3XHU1N0U5XHU1N0VEXHU1N0YwXHU1N0Y1XHU1N0Y2XHU1N0Y4XHU1N0ZEXHU1N0ZFXHU1N0ZGXHU1ODAzXHU1ODA0XHU1ODA4XHU1ODA5XHU1N0UxXCJdLFxuW1wiOGZiOGExXCIsXCJcdTU4MENcdTU4MERcdTU4MUJcdTU4MUVcdTU4MUZcdTU4MjBcdTU4MjZcdTU4MjdcdTU4MkRcdTU4MzJcdTU4MzlcdTU4M0ZcdTU4NDlcdTU4NENcdTU4NERcdTU4NEZcdTU4NTBcdTU4NTVcdTU4NUZcdTU4NjFcdTU4NjRcdTU4NjdcdTU4NjhcdTU4NzhcdTU4N0NcdTU4N0ZcdTU4ODBcdTU4ODFcdTU4ODdcdTU4ODhcdTU4ODlcdTU4OEFcdTU4OENcdTU4OERcdTU4OEZcdTU4OTBcdTU4OTRcdTU4OTZcdTU4OURcdTU4QTBcdTU4QTFcdTU4QTJcdTU4QTZcdTU4QTlcdTU4QjFcdTU4QjJcdTU4QzRcdTU4QkNcdTU4QzJcdTU4QzhcdTU4Q0RcdTU4Q0VcdTU4RDBcdTU4RDJcdTU4RDRcdTU4RDZcdTU4REFcdTU4RERcdTU4RTFcdTU4RTJcdTU4RTlcdTU4RjNcdTU5MDVcdTU5MDZcdTU5MEJcdTU5MENcdTU5MTJcdTU5MTNcdTU5MTRcdTg2NDFcdTU5MURcdTU5MjFcdTU5MjNcdTU5MjRcdTU5MjhcdTU5MkZcdTU5MzBcdTU5MzNcdTU5MzVcdTU5MzZcdTU5M0ZcdTU5NDNcdTU5NDZcdTU5NTJcdTU5NTNcdTU5NTlcdTU5NUJcdTU5NURcdTU5NUVcdTU5NUZcdTU5NjFcdTU5NjNcdTU5NkJcdTU5NkRcIl0sXG5bXCI4ZmI5YTFcIixcIlx1NTk2Rlx1NTk3Mlx1NTk3NVx1NTk3Nlx1NTk3OVx1NTk3Qlx1NTk3Q1x1NTk4Qlx1NTk4Q1x1NTk4RVx1NTk5Mlx1NTk5NVx1NTk5N1x1NTk5Rlx1NTlBNFx1NTlBN1x1NTlBRFx1NTlBRVx1NTlBRlx1NTlCMFx1NTlCM1x1NTlCN1x1NTlCQVx1NTlCQ1x1NTlDMVx1NTlDM1x1NTlDNFx1NTlDOFx1NTlDQVx1NTlDRFx1NTlEMlx1NTlERFx1NTlERVx1NTlERlx1NTlFM1x1NTlFNFx1NTlFN1x1NTlFRVx1NTlFRlx1NTlGMVx1NTlGMlx1NTlGNFx1NTlGN1x1NUEwMFx1NUEwNFx1NUEwQ1x1NUEwRFx1NUEwRVx1NUExMlx1NUExM1x1NUExRVx1NUEyM1x1NUEyNFx1NUEyN1x1NUEyOFx1NUEyQVx1NUEyRFx1NUEzMFx1NUE0NFx1NUE0NVx1NUE0N1x1NUE0OFx1NUE0Q1x1NUE1MFx1NUE1NVx1NUE1RVx1NUE2M1x1NUE2NVx1NUE2N1x1NUE2RFx1NUE3N1x1NUE3QVx1NUE3Qlx1NUE3RVx1NUE4Qlx1NUE5MFx1NUE5M1x1NUE5Nlx1NUE5OVx1NUE5Q1x1NUE5RVx1NUE5Rlx1NUFBMFx1NUFBMlx1NUFBN1x1NUFBQ1x1NUFCMVx1NUFCMlx1NUFCM1x1NUFCNVx1NUFCOFx1NUFCQVx1NUFCQlx1NUFCRlwiXSxcbltcIjhmYmFhMVwiLFwiXHU1QUM0XHU1QUM2XHU1QUM4XHU1QUNGXHU1QURBXHU1QURDXHU1QUUwXHU1QUU1XHU1QUVBXHU1QUVFXHU1QUY1XHU1QUY2XHU1QUZEXHU1QjAwXHU1QjAxXHU1QjA4XHU1QjE3XHU1QjM0XHU1QjE5XHU1QjFCXHU1QjFEXHU1QjIxXHU1QjI1XHU1QjJEXHU1QjM4XHU1QjQxXHU1QjRCXHU1QjRDXHU1QjUyXHU1QjU2XHU1QjVFXHU1QjY4XHU1QjZFXHU1QjZGXHU1QjdDXHU1QjdEXHU1QjdFXHU1QjdGXHU1QjgxXHU1Qjg0XHU1Qjg2XHU1QjhBXHU1QjhFXHU1QjkwXHU1QjkxXHU1QjkzXHU1Qjk0XHU1Qjk2XHU1QkE4XHU1QkE5XHU1QkFDXHU1QkFEXHU1QkFGXHU1QkIxXHU1QkIyXHU1QkI3XHU1QkJBXHU1QkJDXHU1QkMwXHU1QkMxXHU1QkNEXHU1QkNGXHU1QkQ2XCIsNCxcIlx1NUJFMFx1NUJFRlx1NUJGMVx1NUJGNFx1NUJGRFx1NUMwQ1x1NUMxN1x1NUMxRVx1NUMxRlx1NUMyM1x1NUMyNlx1NUMyOVx1NUMyQlx1NUMyQ1x1NUMyRVx1NUMzMFx1NUMzMlx1NUMzNVx1NUMzNlx1NUM1OVx1NUM1QVx1NUM1Q1x1NUM2Mlx1NUM2M1x1NUM2N1x1NUM2OFx1NUM2OVwiXSxcbltcIjhmYmJhMVwiLFwiXHU1QzZEXHU1QzcwXHU1Qzc0XHU1Qzc1XHU1QzdBXHU1QzdCXHU1QzdDXHU1QzdEXHU1Qzg3XHU1Qzg4XHU1QzhBXHU1QzhGXHU1QzkyXHU1QzlEXHU1QzlGXHU1Q0EwXHU1Q0EyXHU1Q0EzXHU1Q0E2XHU1Q0FBXHU1Q0IyXHU1Q0I0XHU1Q0I1XHU1Q0JBXHU1Q0M5XHU1Q0NCXHU1Q0QyXHU1Q0REXHU1Q0Q3XHU1Q0VFXHU1Q0YxXHU1Q0YyXHU1Q0Y0XHU1RDAxXHU1RDA2XHU1RDBEXHU1RDEyXHU1RDJCXHU1RDIzXHU1RDI0XHU1RDI2XHU1RDI3XHU1RDMxXHU1RDM0XHU1RDM5XHU1RDNEXHU1RDNGXHU1RDQyXHU1RDQzXHU1RDQ2XHU1RDQ4XHU1RDU1XHU1RDUxXHU1RDU5XHU1RDRBXHU1RDVGXHU1RDYwXHU1RDYxXHU1RDYyXHU1RDY0XHU1RDZBXHU1RDZEXHU1RDcwXHU1RDc5XHU1RDdBXHU1RDdFXHU1RDdGXHU1RDgxXHU1RDgzXHU1RDg4XHU1RDhBXHU1RDkyXHU1RDkzXHU1RDk0XHU1RDk1XHU1RDk5XHU1RDlCXHU1RDlGXHU1REEwXHU1REE3XHU1REFCXHU1REIwXHU1REI0XHU1REI4XHU1REI5XHU1REMzXHU1REM3XHU1RENCXHU1REQwXHU1RENFXHU1REQ4XHU1REQ5XHU1REUwXHU1REU0XCJdLFxuW1wiOGZiY2ExXCIsXCJcdTVERTlcdTVERjhcdTVERjlcdTVFMDBcdTVFMDdcdTVFMERcdTVFMTJcdTVFMTRcdTVFMTVcdTVFMThcdTVFMUZcdTVFMjBcdTVFMkVcdTVFMjhcdTVFMzJcdTVFMzVcdTVFM0VcdTVFNEJcdTVFNTBcdTVFNDlcdTVFNTFcdTVFNTZcdTVFNThcdTVFNUJcdTVFNUNcdTVFNUVcdTVFNjhcdTVFNkFcIiw0LFwiXHU1RTcwXHU1RTgwXHU1RThCXHU1RThFXHU1RUEyXHU1RUE0XHU1RUE1XHU1RUE4XHU1RUFBXHU1RUFDXHU1RUIxXHU1RUIzXHU1RUJEXHU1RUJFXHU1RUJGXHU1RUM2XHU1RUNDXHU1RUNCXHU1RUNFXHU1RUQxXHU1RUQyXHU1RUQ0XHU1RUQ1XHU1RURDXHU1RURFXHU1RUU1XHU1RUVCXHU1RjAyXHU1RjA2XHU1RjA3XHU1RjA4XHU1RjBFXHU1RjE5XHU1RjFDXHU1RjFEXHU1RjIxXHU1RjIyXHU1RjIzXHU1RjI0XHU1RjI4XHU1RjJCXHU1RjJDXHU1RjJFXHU1RjMwXHU1RjM0XHU1RjM2XHU1RjNCXHU1RjNEXHU1RjNGXHU1RjQwXHU1RjQ0XHU1RjQ1XHU1RjQ3XHU1RjREXHU1RjUwXHU1RjU0XHU1RjU4XHU1RjVCXHU1RjYwXHU1RjYzXHU1RjY0XHU1RjY3XCJdLFxuW1wiOGZiZGExXCIsXCJcdTVGNkZcdTVGNzJcdTVGNzRcdTVGNzVcdTVGNzhcdTVGN0FcdTVGN0RcdTVGN0VcdTVGODlcdTVGOERcdTVGOEZcdTVGOTZcdTVGOUNcdTVGOURcdTVGQTJcdTVGQTdcdTVGQUJcdTVGQTRcdTVGQUNcdTVGQUZcdTVGQjBcdTVGQjFcdTVGQjhcdTVGQzRcdTVGQzdcdTVGQzhcdTVGQzlcdTVGQ0JcdTVGRDBcIiw0LFwiXHU1RkRFXHU1RkUxXHU1RkUyXHU1RkU4XHU1RkU5XHU1RkVBXHU1RkVDXHU1RkVEXHU1RkVFXHU1RkVGXHU1RkYyXHU1RkYzXHU1RkY2XHU1RkZBXHU1RkZDXHU2MDA3XHU2MDBBXHU2MDBEXHU2MDEzXHU2MDE0XHU2MDE3XHU2MDE4XHU2MDFBXHU2MDFGXHU2MDI0XHU2MDJEXHU2MDMzXHU2MDM1XHU2MDQwXHU2MDQ3XHU2MDQ4XHU2MDQ5XHU2MDRDXHU2MDUxXHU2MDU0XHU2MDU2XHU2MDU3XHU2MDVEXHU2MDYxXHU2MDY3XHU2MDcxXHU2MDdFXHU2MDdGXHU2MDgyXHU2MDg2XHU2MDg4XHU2MDhBXHU2MDhFXHU2MDkxXHU2MDkzXHU2MDk1XHU2MDk4XHU2MDlEXHU2MDlFXHU2MEEyXHU2MEE0XHU2MEE1XHU2MEE4XHU2MEIwXHU2MEIxXHU2MEI3XCJdLFxuW1wiOGZiZWExXCIsXCJcdTYwQkJcdTYwQkVcdTYwQzJcdTYwQzRcdTYwQzhcdTYwQzlcdTYwQ0FcdTYwQ0JcdTYwQ0VcdTYwQ0ZcdTYwRDRcdTYwRDVcdTYwRDlcdTYwREJcdTYwRERcdTYwREVcdTYwRTJcdTYwRTVcdTYwRjJcdTYwRjVcdTYwRjhcdTYwRkNcdTYwRkRcdTYxMDJcdTYxMDdcdTYxMEFcdTYxMENcdTYxMTBcIiw0LFwiXHU2MTE2XHU2MTE3XHU2MTE5XHU2MTFDXHU2MTFFXHU2MTIyXHU2MTJBXHU2MTJCXHU2MTMwXHU2MTMxXHU2MTM1XHU2MTM2XHU2MTM3XHU2MTM5XHU2MTQxXHU2MTQ1XHU2MTQ2XHU2MTQ5XHU2MTVFXHU2MTYwXHU2MTZDXHU2MTcyXHU2MTc4XHU2MTdCXHU2MTdDXHU2MTdGXHU2MTgwXHU2MTgxXHU2MTgzXHU2MTg0XHU2MThCXHU2MThEXHU2MTkyXHU2MTkzXHU2MTk3XHU2MTk4XHU2MTlDXHU2MTlEXHU2MTlGXHU2MUEwXHU2MUE1XHU2MUE4XHU2MUFBXHU2MUFEXHU2MUI4XHU2MUI5XHU2MUJDXHU2MUMwXHU2MUMxXHU2MUMyXHU2MUNFXHU2MUNGXHU2MUQ1XHU2MURDXHU2MUREXHU2MURFXHU2MURGXHU2MUUxXHU2MUUyXHU2MUU3XHU2MUU5XHU2MUU1XCJdLFxuW1wiOGZiZmExXCIsXCJcdTYxRUNcdTYxRURcdTYxRUZcdTYyMDFcdTYyMDNcdTYyMDRcdTYyMDdcdTYyMTNcdTYyMTVcdTYyMUNcdTYyMjBcdTYyMjJcdTYyMjNcdTYyMjdcdTYyMjlcdTYyMkJcdTYyMzlcdTYyM0RcdTYyNDJcdTYyNDNcdTYyNDRcdTYyNDZcdTYyNENcdTYyNTBcdTYyNTFcdTYyNTJcdTYyNTRcdTYyNTZcdTYyNUFcdTYyNUNcdTYyNjRcdTYyNkRcdTYyNkZcdTYyNzNcdTYyN0FcdTYyN0RcdTYyOERcdTYyOEVcdTYyOEZcdTYyOTBcdTYyQTZcdTYyQThcdTYyQjNcdTYyQjZcdTYyQjdcdTYyQkFcdTYyQkVcdTYyQkZcdTYyQzRcdTYyQ0VcdTYyRDVcdTYyRDZcdTYyREFcdTYyRUFcdTYyRjJcdTYyRjRcdTYyRkNcdTYyRkRcdTYzMDNcdTYzMDRcdTYzMEFcdTYzMEJcdTYzMERcdTYzMTBcdTYzMTNcdTYzMTZcdTYzMThcdTYzMjlcdTYzMkFcdTYzMkRcdTYzMzVcdTYzMzZcdTYzMzlcdTYzM0NcdTYzNDFcdTYzNDJcdTYzNDNcdTYzNDRcdTYzNDZcdTYzNEFcdTYzNEJcdTYzNEVcdTYzNTJcdTYzNTNcdTYzNTRcdTYzNThcdTYzNUJcdTYzNjVcdTYzNjZcdTYzNkNcdTYzNkRcdTYzNzFcdTYzNzRcdTYzNzVcIl0sXG5bXCI4ZmMwYTFcIixcIlx1NjM3OFx1NjM3Q1x1NjM3RFx1NjM3Rlx1NjM4Mlx1NjM4NFx1NjM4N1x1NjM4QVx1NjM5MFx1NjM5NFx1NjM5NVx1NjM5OVx1NjM5QVx1NjM5RVx1NjNBNFx1NjNBNlx1NjNBRFx1NjNBRVx1NjNBRlx1NjNCRFx1NjNDMVx1NjNDNVx1NjNDOFx1NjNDRVx1NjNEMVx1NjNEM1x1NjNENFx1NjNENVx1NjNEQ1x1NjNFMFx1NjNFNVx1NjNFQVx1NjNFQ1x1NjNGMlx1NjNGM1x1NjNGNVx1NjNGOFx1NjNGOVx1NjQwOVx1NjQwQVx1NjQxMFx1NjQxMlx1NjQxNFx1NjQxOFx1NjQxRVx1NjQyMFx1NjQyMlx1NjQyNFx1NjQyNVx1NjQyOVx1NjQyQVx1NjQyRlx1NjQzMFx1NjQzNVx1NjQzRFx1NjQzRlx1NjQ0Qlx1NjQ0Rlx1NjQ1MVx1NjQ1Mlx1NjQ1M1x1NjQ1NFx1NjQ1QVx1NjQ1Qlx1NjQ1Q1x1NjQ1RFx1NjQ1Rlx1NjQ2MFx1NjQ2MVx1NjQ2M1x1NjQ2RFx1NjQ3M1x1NjQ3NFx1NjQ3Qlx1NjQ3RFx1NjQ4NVx1NjQ4N1x1NjQ4Rlx1NjQ5MFx1NjQ5MVx1NjQ5OFx1NjQ5OVx1NjQ5Qlx1NjQ5RFx1NjQ5Rlx1NjRBMVx1NjRBM1x1NjRBNlx1NjRBOFx1NjRBQ1x1NjRCM1x1NjRCRFx1NjRCRVx1NjRCRlwiXSxcbltcIjhmYzFhMVwiLFwiXHU2NEM0XHU2NEM5XHU2NENBXHU2NENCXHU2NENDXHU2NENFXHU2NEQwXHU2NEQxXHU2NEQ1XHU2NEQ3XHU2NEU0XHU2NEU1XHU2NEU5XHU2NEVBXHU2NEVEXHU2NEYwXHU2NEY1XHU2NEY3XHU2NEZCXHU2NEZGXHU2NTAxXHU2NTA0XHU2NTA4XHU2NTA5XHU2NTBBXHU2NTBGXHU2NTEzXHU2NTE0XHU2NTE2XHU2NTE5XHU2NTFCXHU2NTFFXHU2NTFGXHU2NTIyXHU2NTI2XHU2NTI5XHU2NTJFXHU2NTMxXHU2NTNBXHU2NTNDXHU2NTNEXHU2NTQzXHU2NTQ3XHU2NTQ5XHU2NTUwXHU2NTUyXHU2NTU0XHU2NTVGXHU2NTYwXHU2NTY3XHU2NTZCXHU2NTdBXHU2NTdEXHU2NTgxXHU2NTg1XHU2NThBXHU2NTkyXHU2NTk1XHU2NTk4XHU2NTlEXHU2NUEwXHU2NUEzXHU2NUE2XHU2NUFFXHU2NUIyXHU2NUIzXHU2NUI0XHU2NUJGXHU2NUMyXHU2NUM4XHU2NUM5XHU2NUNFXHU2NUQwXHU2NUQ0XHU2NUQ2XHU2NUQ4XHU2NURGXHU2NUYwXHU2NUYyXHU2NUY0XHU2NUY1XHU2NUY5XHU2NUZFXHU2NUZGXHU2NjAwXHU2NjA0XHU2NjA4XHU2NjA5XHU2NjBEXHU2NjExXHU2NjEyXHU2NjE1XHU2NjE2XHU2NjFEXCJdLFxuW1wiOGZjMmExXCIsXCJcdTY2MUVcdTY2MjFcdTY2MjJcdTY2MjNcdTY2MjRcdTY2MjZcdTY2MjlcdTY2MkFcdTY2MkJcdTY2MkNcdTY2MkVcdTY2MzBcdTY2MzFcdTY2MzNcdTY2MzlcdTY2MzdcdTY2NDBcdTY2NDVcdTY2NDZcdTY2NEFcdTY2NENcdTY2NTFcdTY2NEVcdTY2NTdcdTY2NThcdTY2NTlcdTY2NUJcdTY2NUNcdTY2NjBcdTY2NjFcdTY2RkJcdTY2NkFcdTY2NkJcdTY2NkNcdTY2N0VcdTY2NzNcdTY2NzVcdTY2N0ZcdTY2NzdcdTY2NzhcdTY2NzlcdTY2N0JcdTY2ODBcdTY2N0NcdTY2OEJcdTY2OENcdTY2OERcdTY2OTBcdTY2OTJcdTY2OTlcdTY2OUFcdTY2OUJcdTY2OUNcdTY2OUZcdTY2QTBcdTY2QTRcdTY2QURcdTY2QjFcdTY2QjJcdTY2QjVcdTY2QkJcdTY2QkZcdTY2QzBcdTY2QzJcdTY2QzNcdTY2QzhcdTY2Q0NcdTY2Q0VcdTY2Q0ZcdTY2RDRcdTY2REJcdTY2REZcdTY2RThcdTY2RUJcdTY2RUNcdTY2RUVcdTY2RkFcdTY3MDVcdTY3MDdcdTY3MEVcdTY3MTNcdTY3MTlcdTY3MUNcdTY3MjBcdTY3MjJcdTY3MzNcdTY3M0VcdTY3NDVcdTY3NDdcdTY3NDhcdTY3NENcdTY3NTRcdTY3NTVcdTY3NURcIl0sXG5bXCI4ZmMzYTFcIixcIlx1Njc2Nlx1Njc2Q1x1Njc2RVx1Njc3NFx1Njc3Nlx1Njc3Qlx1Njc4MVx1Njc4NFx1Njc4RVx1Njc4Rlx1Njc5MVx1Njc5M1x1Njc5Nlx1Njc5OFx1Njc5OVx1Njc5Qlx1NjdCMFx1NjdCMVx1NjdCMlx1NjdCNVx1NjdCQlx1NjdCQ1x1NjdCRFx1NjdGOVx1NjdDMFx1NjdDMlx1NjdDM1x1NjdDNVx1NjdDOFx1NjdDOVx1NjdEMlx1NjdEN1x1NjdEOVx1NjdEQ1x1NjdFMVx1NjdFNlx1NjdGMFx1NjdGMlx1NjdGNlx1NjdGN1x1Njg1Mlx1NjgxNFx1NjgxOVx1NjgxRFx1NjgxRlx1NjgyOFx1NjgyN1x1NjgyQ1x1NjgyRFx1NjgyRlx1NjgzMFx1NjgzMVx1NjgzM1x1NjgzQlx1NjgzRlx1Njg0NFx1Njg0NVx1Njg0QVx1Njg0Q1x1Njg1NVx1Njg1N1x1Njg1OFx1Njg1Qlx1Njg2Qlx1Njg2RVwiLDQsXCJcdTY4NzVcdTY4NzlcdTY4N0FcdTY4N0JcdTY4N0NcdTY4ODJcdTY4ODRcdTY4ODZcdTY4ODhcdTY4OTZcdTY4OThcdTY4OUFcdTY4OUNcdTY4QTFcdTY4QTNcdTY4QTVcdTY4QTlcdTY4QUFcdTY4QUVcdTY4QjJcdTY4QkJcdTY4QzVcdTY4QzhcdTY4Q0NcdTY4Q0ZcIl0sXG5bXCI4ZmM0YTFcIixcIlx1NjhEMFx1NjhEMVx1NjhEM1x1NjhENlx1NjhEOVx1NjhEQ1x1NjhERFx1NjhFNVx1NjhFOFx1NjhFQVx1NjhFQlx1NjhFQ1x1NjhFRFx1NjhGMFx1NjhGMVx1NjhGNVx1NjhGNlx1NjhGQlx1NjhGQ1x1NjhGRFx1NjkwNlx1NjkwOVx1NjkwQVx1NjkxMFx1NjkxMVx1NjkxM1x1NjkxNlx1NjkxN1x1NjkzMVx1NjkzM1x1NjkzNVx1NjkzOFx1NjkzQlx1Njk0Mlx1Njk0NVx1Njk0OVx1Njk0RVx1Njk1N1x1Njk1Qlx1Njk2M1x1Njk2NFx1Njk2NVx1Njk2Nlx1Njk2OFx1Njk2OVx1Njk2Q1x1Njk3MFx1Njk3MVx1Njk3Mlx1Njk3QVx1Njk3Qlx1Njk3Rlx1Njk4MFx1Njk4RFx1Njk5Mlx1Njk5Nlx1Njk5OFx1NjlBMVx1NjlBNVx1NjlBNlx1NjlBOFx1NjlBQlx1NjlBRFx1NjlBRlx1NjlCN1x1NjlCOFx1NjlCQVx1NjlCQ1x1NjlDNVx1NjlDOFx1NjlEMVx1NjlENlx1NjlEN1x1NjlFMlx1NjlFNVx1NjlFRVx1NjlFRlx1NjlGMVx1NjlGM1x1NjlGNVx1NjlGRVx1NkEwMFx1NkEwMVx1NkEwM1x1NkEwRlx1NkExMVx1NkExNVx1NkExQVx1NkExRFx1NkEyMFx1NkEyNFx1NkEyOFx1NkEzMFx1NkEzMlwiXSxcbltcIjhmYzVhMVwiLFwiXHU2QTM0XHU2QTM3XHU2QTNCXHU2QTNFXHU2QTNGXHU2QTQ1XHU2QTQ2XHU2QTQ5XHU2QTRBXHU2QTRFXHU2QTUwXHU2QTUxXHU2QTUyXHU2QTU1XHU2QTU2XHU2QTVCXHU2QTY0XHU2QTY3XHU2QTZBXHU2QTcxXHU2QTczXHU2QTdFXHU2QTgxXHU2QTgzXHU2QTg2XHU2QTg3XHU2QTg5XHU2QThCXHU2QTkxXHU2QTlCXHU2QTlEXHU2QTlFXHU2QTlGXHU2QUE1XHU2QUFCXHU2QUFGXHU2QUIwXHU2QUIxXHU2QUI0XHU2QUJEXHU2QUJFXHU2QUJGXHU2QUM2XHU2QUM5XHU2QUM4XHU2QUNDXHU2QUQwXHU2QUQ0XHU2QUQ1XHU2QUQ2XHU2QURDXHU2QUREXHU2QUU0XHU2QUU3XHU2QUVDXHU2QUYwXHU2QUYxXHU2QUYyXHU2QUZDXHU2QUZEXHU2QjAyXHU2QjAzXHU2QjA2XHU2QjA3XHU2QjA5XHU2QjBGXHU2QjEwXHU2QjExXHU2QjE3XHU2QjFCXHU2QjFFXHU2QjI0XHU2QjI4XHU2QjJCXHU2QjJDXHU2QjJGXHU2QjM1XHU2QjM2XHU2QjNCXHU2QjNGXHU2QjQ2XHU2QjRBXHU2QjREXHU2QjUyXHU2QjU2XHU2QjU4XHU2QjVEXHU2QjYwXHU2QjY3XHU2QjZCXHU2QjZFXHU2QjcwXHU2Qjc1XHU2QjdEXCJdLFxuW1wiOGZjNmExXCIsXCJcdTZCN0VcdTZCODJcdTZCODVcdTZCOTdcdTZCOUJcdTZCOUZcdTZCQTBcdTZCQTJcdTZCQTNcdTZCQThcdTZCQTlcdTZCQUNcdTZCQURcdTZCQUVcdTZCQjBcdTZCQjhcdTZCQjlcdTZCQkRcdTZCQkVcdTZCQzNcdTZCQzRcdTZCQzlcdTZCQ0NcdTZCRDZcdTZCREFcdTZCRTFcdTZCRTNcdTZCRTZcdTZCRTdcdTZCRUVcdTZCRjFcdTZCRjdcdTZCRjlcdTZCRkZcdTZDMDJcdTZDMDRcdTZDMDVcdTZDMDlcdTZDMERcdTZDMEVcdTZDMTBcdTZDMTJcdTZDMTlcdTZDMUZcdTZDMjZcdTZDMjdcdTZDMjhcdTZDMkNcdTZDMkVcdTZDMzNcdTZDMzVcdTZDMzZcdTZDM0FcdTZDM0JcdTZDM0ZcdTZDNEFcdTZDNEJcdTZDNERcdTZDNEZcdTZDNTJcdTZDNTRcdTZDNTlcdTZDNUJcdTZDNUNcdTZDNkJcdTZDNkRcdTZDNkZcdTZDNzRcdTZDNzZcdTZDNzhcdTZDNzlcdTZDN0JcdTZDODVcdTZDODZcdTZDODdcdTZDODlcdTZDOTRcdTZDOTVcdTZDOTdcdTZDOThcdTZDOUNcdTZDOUZcdTZDQjBcdTZDQjJcdTZDQjRcdTZDQzJcdTZDQzZcdTZDQ0RcdTZDQ0ZcdTZDRDBcdTZDRDFcdTZDRDJcdTZDRDRcdTZDRDZcIl0sXG5bXCI4ZmM3YTFcIixcIlx1NkNEQVx1NkNEQ1x1NkNFMFx1NkNFN1x1NkNFOVx1NkNFQlx1NkNFQ1x1NkNFRVx1NkNGMlx1NkNGNFx1NkQwNFx1NkQwN1x1NkQwQVx1NkQwRVx1NkQwRlx1NkQxMVx1NkQxM1x1NkQxQVx1NkQyNlx1NkQyN1x1NkQyOFx1NkM2N1x1NkQyRVx1NkQyRlx1NkQzMVx1NkQzOVx1NkQzQ1x1NkQzRlx1NkQ1N1x1NkQ1RVx1NkQ1Rlx1NkQ2MVx1NkQ2NVx1NkQ2N1x1NkQ2Rlx1NkQ3MFx1NkQ3Q1x1NkQ4Mlx1NkQ4N1x1NkQ5MVx1NkQ5Mlx1NkQ5NFx1NkQ5Nlx1NkQ5N1x1NkQ5OFx1NkRBQVx1NkRBQ1x1NkRCNFx1NkRCN1x1NkRCOVx1NkRCRFx1NkRCRlx1NkRDNFx1NkRDOFx1NkRDQVx1NkRDRVx1NkRDRlx1NkRENlx1NkREQlx1NkRERFx1NkRERlx1NkRFMFx1NkRFMlx1NkRFNVx1NkRFOVx1NkRFRlx1NkRGMFx1NkRGNFx1NkRGNlx1NkRGQ1x1NkUwMFx1NkUwNFx1NkUxRVx1NkUyMlx1NkUyN1x1NkUzMlx1NkUzNlx1NkUzOVx1NkUzQlx1NkUzQ1x1NkU0NFx1NkU0NVx1NkU0OFx1NkU0OVx1NkU0Qlx1NkU0Rlx1NkU1MVx1NkU1Mlx1NkU1M1x1NkU1NFx1NkU1N1x1NkU1Q1x1NkU1RFx1NkU1RVwiXSxcbltcIjhmYzhhMVwiLFwiXHU2RTYyXHU2RTYzXHU2RTY4XHU2RTczXHU2RTdCXHU2RTdEXHU2RThEXHU2RTkzXHU2RTk5XHU2RUEwXHU2RUE3XHU2RUFEXHU2RUFFXHU2RUIxXHU2RUIzXHU2RUJCXHU2RUJGXHU2RUMwXHU2RUMxXHU2RUMzXHU2RUM3XHU2RUM4XHU2RUNBXHU2RUNEXHU2RUNFXHU2RUNGXHU2RUVCXHU2RUVEXHU2RUVFXHU2RUY5XHU2RUZCXHU2RUZEXHU2RjA0XHU2RjA4XHU2RjBBXHU2RjBDXHU2RjBEXHU2RjE2XHU2RjE4XHU2RjFBXHU2RjFCXHU2RjI2XHU2RjI5XHU2RjJBXHU2RjJGXHU2RjMwXHU2RjMzXHU2RjM2XHU2RjNCXHU2RjNDXHU2RjJEXHU2RjRGXHU2RjUxXHU2RjUyXHU2RjUzXHU2RjU3XHU2RjU5XHU2RjVBXHU2RjVEXHU2RjVFXHU2RjYxXHU2RjYyXHU2RjY4XHU2RjZDXHU2RjdEXHU2RjdFXHU2RjgzXHU2Rjg3XHU2Rjg4XHU2RjhCXHU2RjhDXHU2RjhEXHU2RjkwXHU2RjkyXHU2RjkzXHU2Rjk0XHU2Rjk2XHU2RjlBXHU2RjlGXHU2RkEwXHU2RkE1XHU2RkE2XHU2RkE3XHU2RkE4XHU2RkFFXHU2RkFGXHU2RkIwXHU2RkI1XHU2RkI2XHU2RkJDXHU2RkM1XHU2RkM3XHU2RkM4XHU2RkNBXCJdLFxuW1wiOGZjOWExXCIsXCJcdTZGREFcdTZGREVcdTZGRThcdTZGRTlcdTZGRjBcdTZGRjVcdTZGRjlcdTZGRkNcdTZGRkRcdTcwMDBcdTcwMDVcdTcwMDZcdTcwMDdcdTcwMERcdTcwMTdcdTcwMjBcdTcwMjNcdTcwMkZcdTcwMzRcdTcwMzdcdTcwMzlcdTcwM0NcdTcwNDNcdTcwNDRcdTcwNDhcdTcwNDlcdTcwNEFcdTcwNEJcdTcwNTRcdTcwNTVcdTcwNURcdTcwNUVcdTcwNEVcdTcwNjRcdTcwNjVcdTcwNkNcdTcwNkVcdTcwNzVcdTcwNzZcdTcwN0VcdTcwODFcdTcwODVcdTcwODZcdTcwOTRcIiw0LFwiXHU3MDlCXHU3MEE0XHU3MEFCXHU3MEIwXHU3MEIxXHU3MEI0XHU3MEI3XHU3MENBXHU3MEQxXHU3MEQzXHU3MEQ0XHU3MEQ1XHU3MEQ2XHU3MEQ4XHU3MERDXHU3MEU0XHU3MEZBXHU3MTAzXCIsNCxcIlx1NzEwQlx1NzEwQ1x1NzEwRlx1NzExRVx1NzEyMFx1NzEyQlx1NzEyRFx1NzEyRlx1NzEzMFx1NzEzMVx1NzEzOFx1NzE0MVx1NzE0NVx1NzE0Nlx1NzE0N1x1NzE0QVx1NzE0Qlx1NzE1MFx1NzE1Mlx1NzE1N1x1NzE1QVx1NzE1Q1x1NzE1RVx1NzE2MFwiXSxcbltcIjhmY2FhMVwiLFwiXHU3MTY4XHU3MTc5XHU3MTgwXHU3MTg1XHU3MTg3XHU3MThDXHU3MTkyXHU3MTlBXHU3MTlCXHU3MUEwXHU3MUEyXHU3MUFGXHU3MUIwXHU3MUIyXHU3MUIzXHU3MUJBXHU3MUJGXHU3MUMwXHU3MUMxXHU3MUM0XHU3MUNCXHU3MUNDXHU3MUQzXHU3MUQ2XHU3MUQ5XHU3MURBXHU3MURDXHU3MUY4XHU3MUZFXHU3MjAwXHU3MjA3XHU3MjA4XHU3MjA5XHU3MjEzXHU3MjE3XHU3MjFBXHU3MjFEXHU3MjFGXHU3MjI0XHU3MjJCXHU3MjJGXHU3MjM0XHU3MjM4XHU3MjM5XHU3MjQxXHU3MjQyXHU3MjQzXHU3MjQ1XHU3MjRFXHU3MjRGXHU3MjUwXHU3MjUzXHU3MjU1XHU3MjU2XHU3MjVBXHU3MjVDXHU3MjVFXHU3MjYwXHU3MjYzXHU3MjY4XHU3MjZCXHU3MjZFXHU3MjZGXHU3MjcxXHU3Mjc3XHU3Mjc4XHU3MjdCXHU3MjdDXHU3MjdGXHU3Mjg0XHU3Mjg5XHU3MjhEXHU3MjhFXHU3MjkzXHU3MjlCXHU3MkE4XHU3MkFEXHU3MkFFXHU3MkIxXHU3MkI0XHU3MkJFXHU3MkMxXHU3MkM3XHU3MkM5XHU3MkNDXHU3MkQ1XHU3MkQ2XHU3MkQ4XHU3MkRGXHU3MkU1XHU3MkYzXHU3MkY0XHU3MkZBXHU3MkZCXCJdLFxuW1wiOGZjYmExXCIsXCJcdTcyRkVcdTczMDJcdTczMDRcdTczMDVcdTczMDdcdTczMEJcdTczMERcdTczMTJcdTczMTNcdTczMThcdTczMTlcdTczMUVcdTczMjJcdTczMjRcdTczMjdcdTczMjhcdTczMkNcdTczMzFcdTczMzJcdTczMzVcdTczM0FcdTczM0JcdTczM0RcdTczNDNcdTczNERcdTczNTBcdTczNTJcdTczNTZcdTczNThcdTczNURcdTczNUVcdTczNUZcdTczNjBcdTczNjZcdTczNjdcdTczNjlcdTczNkJcdTczNkNcdTczNkVcdTczNkZcdTczNzFcdTczNzdcdTczNzlcdTczN0NcdTczODBcdTczODFcdTczODNcdTczODVcdTczODZcdTczOEVcdTczOTBcdTczOTNcdTczOTVcdTczOTdcdTczOThcdTczOUNcdTczOUVcdTczOUZcdTczQTBcdTczQTJcdTczQTVcdTczQTZcdTczQUFcdTczQUJcdTczQURcdTczQjVcdTczQjdcdTczQjlcdTczQkNcdTczQkRcdTczQkZcdTczQzVcdTczQzZcdTczQzlcdTczQ0JcdTczQ0NcdTczQ0ZcdTczRDJcdTczRDNcdTczRDZcdTczRDlcdTczRERcdTczRTFcdTczRTNcdTczRTZcdTczRTdcdTczRTlcdTczRjRcdTczRjVcdTczRjdcdTczRjlcdTczRkFcdTczRkJcdTczRkRcIl0sXG5bXCI4ZmNjYTFcIixcIlx1NzNGRlx1NzQwMFx1NzQwMVx1NzQwNFx1NzQwN1x1NzQwQVx1NzQxMVx1NzQxQVx1NzQxQlx1NzQyNFx1NzQyNlx1NzQyOFwiLDksXCJcdTc0MzlcdTc0NDBcdTc0NDNcdTc0NDRcdTc0NDZcdTc0NDdcdTc0NEJcdTc0NERcdTc0NTFcdTc0NTJcdTc0NTdcdTc0NURcdTc0NjJcdTc0NjZcdTc0NjdcdTc0NjhcdTc0NkJcdTc0NkRcdTc0NkVcdTc0NzFcdTc0NzJcdTc0ODBcdTc0ODFcdTc0ODVcdTc0ODZcdTc0ODdcdTc0ODlcdTc0OEZcdTc0OTBcdTc0OTFcdTc0OTJcdTc0OThcdTc0OTlcdTc0OUFcdTc0OUNcdTc0OUZcdTc0QTBcdTc0QTFcdTc0QTNcdTc0QTZcdTc0QThcdTc0QTlcdTc0QUFcdTc0QUJcdTc0QUVcdTc0QUZcdTc0QjFcdTc0QjJcdTc0QjVcdTc0QjlcdTc0QkJcdTc0QkZcdTc0QzhcdTc0QzlcdTc0Q0NcdTc0RDBcdTc0RDNcdTc0RDhcdTc0REFcdTc0REJcdTc0REVcdTc0REZcdTc0RTRcdTc0RThcdTc0RUFcdTc0RUJcdTc0RUZcdTc0RjRcdTc0RkFcdTc0RkJcdTc0RkNcdTc0RkZcdTc1MDZcIl0sXG5bXCI4ZmNkYTFcIixcIlx1NzUxMlx1NzUxNlx1NzUxN1x1NzUyMFx1NzUyMVx1NzUyNFx1NzUyN1x1NzUyOVx1NzUyQVx1NzUyRlx1NzUzNlx1NzUzOVx1NzUzRFx1NzUzRVx1NzUzRlx1NzU0MFx1NzU0M1x1NzU0N1x1NzU0OFx1NzU0RVx1NzU1MFx1NzU1Mlx1NzU1N1x1NzU1RVx1NzU1Rlx1NzU2MVx1NzU2Rlx1NzU3MVx1NzU3OVwiLDUsXCJcdTc1ODFcdTc1ODVcdTc1OTBcdTc1OTJcdTc1OTNcdTc1OTVcdTc1OTlcdTc1OUNcdTc1QTJcdTc1QTRcdTc1QjRcdTc1QkFcdTc1QkZcdTc1QzBcdTc1QzFcdTc1QzRcdTc1QzZcdTc1Q0NcdTc1Q0VcdTc1Q0ZcdTc1RDdcdTc1RENcdTc1REZcdTc1RTBcdTc1RTFcdTc1RTRcdTc1RTdcdTc1RUNcdTc1RUVcdTc1RUZcdTc1RjFcdTc1RjlcdTc2MDBcdTc2MDJcdTc2MDNcdTc2MDRcdTc2MDdcdTc2MDhcdTc2MEFcdTc2MENcdTc2MEZcdTc2MTJcdTc2MTNcdTc2MTVcdTc2MTZcdTc2MTlcdTc2MUJcdTc2MUNcdTc2MURcdTc2MUVcdTc2MjNcdTc2MjVcdTc2MjZcdTc2MjlcdTc2MkRcdTc2MzJcdTc2MzNcdTc2MzVcdTc2MzhcdTc2MzlcIl0sXG5bXCI4ZmNlYTFcIixcIlx1NzYzQVx1NzYzQ1x1NzY0QVx1NzY0MFx1NzY0MVx1NzY0M1x1NzY0NFx1NzY0NVx1NzY0OVx1NzY0Qlx1NzY1NVx1NzY1OVx1NzY1Rlx1NzY2NFx1NzY2NVx1NzY2RFx1NzY2RVx1NzY2Rlx1NzY3MVx1NzY3NFx1NzY4MVx1NzY4NVx1NzY4Q1x1NzY4RFx1NzY5NVx1NzY5Qlx1NzY5Q1x1NzY5RFx1NzY5Rlx1NzZBMFx1NzZBMlwiLDYsXCJcdTc2QUFcdTc2QURcdTc2QkRcdTc2QzFcdTc2QzVcdTc2QzlcdTc2Q0JcdTc2Q0NcdTc2Q0VcdTc2RDRcdTc2RDlcdTc2RTBcdTc2RTZcdTc2RThcdTc2RUNcdTc2RjBcdTc2RjFcdTc2RjZcdTc2RjlcdTc2RkNcdTc3MDBcdTc3MDZcdTc3MEFcdTc3MEVcdTc3MTJcdTc3MTRcdTc3MTVcdTc3MTdcdTc3MTlcdTc3MUFcdTc3MUNcdTc3MjJcdTc3MjhcdTc3MkRcdTc3MkVcdTc3MkZcdTc3MzRcdTc3MzVcdTc3MzZcdTc3MzlcdTc3M0RcdTc3M0VcdTc3NDJcdTc3NDVcdTc3NDZcdTc3NEFcdTc3NERcdTc3NEVcdTc3NEZcdTc3NTJcdTc3NTZcdTc3NTdcdTc3NUNcdTc3NUVcdTc3NUZcdTc3NjBcdTc3NjJcIl0sXG5bXCI4ZmNmYTFcIixcIlx1Nzc2NFx1Nzc2N1x1Nzc2QVx1Nzc2Q1x1Nzc3MFx1Nzc3Mlx1Nzc3M1x1Nzc3NFx1Nzc3QVx1Nzc3RFx1Nzc4MFx1Nzc4NFx1Nzc4Q1x1Nzc4RFx1Nzc5NFx1Nzc5NVx1Nzc5Nlx1Nzc5QVx1Nzc5Rlx1NzdBMlx1NzdBN1x1NzdBQVx1NzdBRVx1NzdBRlx1NzdCMVx1NzdCNVx1NzdCRVx1NzdDM1x1NzdDOVx1NzdEMVx1NzdEMlx1NzdENVx1NzdEOVx1NzdERVx1NzdERlx1NzdFMFx1NzdFNFx1NzdFNlx1NzdFQVx1NzdFQ1x1NzdGMFx1NzdGMVx1NzdGNFx1NzdGOFx1NzdGQlx1NzgwNVx1NzgwNlx1NzgwOVx1NzgwRFx1NzgwRVx1NzgxMVx1NzgxRFx1NzgyMVx1NzgyMlx1NzgyM1x1NzgyRFx1NzgyRVx1NzgzMFx1NzgzNVx1NzgzN1x1Nzg0M1x1Nzg0NFx1Nzg0N1x1Nzg0OFx1Nzg0Q1x1Nzg0RVx1Nzg1Mlx1Nzg1Q1x1Nzg1RVx1Nzg2MFx1Nzg2MVx1Nzg2M1x1Nzg2NFx1Nzg2OFx1Nzg2QVx1Nzg2RVx1Nzg3QVx1Nzg3RVx1Nzg4QVx1Nzg4Rlx1Nzg5NFx1Nzg5OFx1NzhBMVx1Nzg5RFx1Nzg5RVx1Nzg5Rlx1NzhBNFx1NzhBOFx1NzhBQ1x1NzhBRFx1NzhCMFx1NzhCMVx1NzhCMlx1NzhCM1wiXSxcbltcIjhmZDBhMVwiLFwiXHU3OEJCXHU3OEJEXHU3OEJGXHU3OEM3XHU3OEM4XHU3OEM5XHU3OENDXHU3OENFXHU3OEQyXHU3OEQzXHU3OEQ1XHU3OEQ2XHU3OEU0XHU3OERCXHU3OERGXHU3OEUwXHU3OEUxXHU3OEU2XHU3OEVBXHU3OEYyXHU3OEYzXHU3OTAwXHU3OEY2XHU3OEY3XHU3OEZBXHU3OEZCXHU3OEZGXHU3OTA2XHU3OTBDXHU3OTEwXHU3OTFBXHU3OTFDXHU3OTFFXHU3OTFGXHU3OTIwXHU3OTI1XHU3OTI3XHU3OTI5XHU3OTJEXHU3OTMxXHU3OTM0XHU3OTM1XHU3OTNCXHU3OTNEXHU3OTNGXHU3OTQ0XHU3OTQ1XHU3OTQ2XHU3OTRBXHU3OTRCXHU3OTRGXHU3OTUxXHU3OTU0XHU3OTU4XHU3OTVCXHU3OTVDXHU3OTY3XHU3OTY5XHU3OTZCXHU3OTcyXHU3OTc5XHU3OTdCXHU3OTdDXHU3OTdFXHU3OThCXHU3OThDXHU3OTkxXHU3OTkzXHU3OTk0XHU3OTk1XHU3OTk2XHU3OTk4XHU3OTlCXHU3OTlDXHU3OUExXHU3OUE4XHU3OUE5XHU3OUFCXHU3OUFGXHU3OUIxXHU3OUI0XHU3OUI4XHU3OUJCXHU3OUMyXHU3OUM0XHU3OUM3XHU3OUM4XHU3OUNBXHU3OUNGXHU3OUQ0XHU3OUQ2XHU3OURBXHU3OUREXHU3OURFXCJdLFxuW1wiOGZkMWExXCIsXCJcdTc5RTBcdTc5RTJcdTc5RTVcdTc5RUFcdTc5RUJcdTc5RURcdTc5RjFcdTc5RjhcdTc5RkNcdTdBMDJcdTdBMDNcdTdBMDdcdTdBMDlcdTdBMEFcdTdBMENcdTdBMTFcdTdBMTVcdTdBMUJcdTdBMUVcdTdBMjFcdTdBMjdcdTdBMkJcdTdBMkRcdTdBMkZcdTdBMzBcdTdBMzRcdTdBMzVcdTdBMzhcdTdBMzlcdTdBM0FcdTdBNDRcdTdBNDVcdTdBNDdcdTdBNDhcdTdBNENcdTdBNTVcdTdBNTZcdTdBNTlcdTdBNUNcdTdBNURcdTdBNUZcdTdBNjBcdTdBNjVcdTdBNjdcdTdBNkFcdTdBNkRcdTdBNzVcdTdBNzhcdTdBN0VcdTdBODBcdTdBODJcdTdBODVcdTdBODZcdTdBOEFcdTdBOEJcdTdBOTBcdTdBOTFcdTdBOTRcdTdBOUVcdTdBQTBcdTdBQTNcdTdBQUNcdTdBQjNcdTdBQjVcdTdBQjlcdTdBQkJcdTdBQkNcdTdBQzZcdTdBQzlcdTdBQ0NcdTdBQ0VcdTdBRDFcdTdBREJcdTdBRThcdTdBRTlcdTdBRUJcdTdBRUNcdTdBRjFcdTdBRjRcdTdBRkJcdTdBRkRcdTdBRkVcdTdCMDdcdTdCMTRcdTdCMUZcdTdCMjNcdTdCMjdcdTdCMjlcdTdCMkFcdTdCMkJcdTdCMkRcdTdCMkVcdTdCMkZcdTdCMzBcIl0sXG5bXCI4ZmQyYTFcIixcIlx1N0IzMVx1N0IzNFx1N0IzRFx1N0IzRlx1N0I0MFx1N0I0MVx1N0I0N1x1N0I0RVx1N0I1NVx1N0I2MFx1N0I2NFx1N0I2Nlx1N0I2OVx1N0I2QVx1N0I2RFx1N0I2Rlx1N0I3Mlx1N0I3M1x1N0I3N1x1N0I4NFx1N0I4OVx1N0I4RVx1N0I5MFx1N0I5MVx1N0I5Nlx1N0I5Qlx1N0I5RVx1N0JBMFx1N0JBNVx1N0JBQ1x1N0JBRlx1N0JCMFx1N0JCMlx1N0JCNVx1N0JCNlx1N0JCQVx1N0JCQlx1N0JCQ1x1N0JCRFx1N0JDMlx1N0JDNVx1N0JDOFx1N0JDQVx1N0JENFx1N0JENlx1N0JEN1x1N0JEOVx1N0JEQVx1N0JEQlx1N0JFOFx1N0JFQVx1N0JGMlx1N0JGNFx1N0JGNVx1N0JGOFx1N0JGOVx1N0JGQVx1N0JGQ1x1N0JGRVx1N0MwMVx1N0MwMlx1N0MwM1x1N0MwNFx1N0MwNlx1N0MwOVx1N0MwQlx1N0MwQ1x1N0MwRVx1N0MwRlx1N0MxOVx1N0MxQlx1N0MyMFx1N0MyNVx1N0MyNlx1N0MyOFx1N0MyQ1x1N0MzMVx1N0MzM1x1N0MzNFx1N0MzNlx1N0MzOVx1N0MzQVx1N0M0Nlx1N0M0QVx1N0M1NVx1N0M1MVx1N0M1Mlx1N0M1M1x1N0M1OVwiLDVdLFxuW1wiOGZkM2ExXCIsXCJcdTdDNjFcdTdDNjNcdTdDNjdcdTdDNjlcdTdDNkRcdTdDNkVcdTdDNzBcdTdDNzJcdTdDNzlcdTdDN0NcdTdDN0RcdTdDODZcdTdDODdcdTdDOEZcdTdDOTRcdTdDOUVcdTdDQTBcdTdDQTZcdTdDQjBcdTdDQjZcdTdDQjdcdTdDQkFcdTdDQkJcdTdDQkNcdTdDQkZcdTdDQzRcdTdDQzdcdTdDQzhcdTdDQzlcdTdDQ0RcdTdDQ0ZcdTdDRDNcdTdDRDRcdTdDRDVcdTdDRDdcdTdDRDlcdTdDREFcdTdDRERcdTdDRTZcdTdDRTlcdTdDRUJcdTdDRjVcdTdEMDNcdTdEMDdcdTdEMDhcdTdEMDlcdTdEMEZcdTdEMTFcdTdEMTJcdTdEMTNcdTdEMTZcdTdEMURcdTdEMUVcdTdEMjNcdTdEMjZcdTdEMkFcdTdEMkRcdTdEMzFcdTdEM0NcdTdEM0RcdTdEM0VcdTdENDBcdTdENDFcdTdENDdcdTdENDhcdTdENERcdTdENTFcdTdENTNcdTdENTdcdTdENTlcdTdENUFcdTdENUNcdTdENURcdTdENjVcdTdENjdcdTdENkFcdTdENzBcdTdENzhcdTdEN0FcdTdEN0JcdTdEN0ZcdTdEODFcdTdEODJcdTdEODNcdTdEODVcdTdEODZcdTdEODhcdTdEOEJcdTdEOENcdTdEOERcdTdEOTFcdTdEOTZcdTdEOTdcdTdEOURcIl0sXG5bXCI4ZmQ0YTFcIixcIlx1N0Q5RVx1N0RBNlx1N0RBN1x1N0RBQVx1N0RCM1x1N0RCNlx1N0RCN1x1N0RCOVx1N0RDMlwiLDQsXCJcdTdEQ0NcdTdEQ0RcdTdEQ0VcdTdERDdcdTdERDlcdTdFMDBcdTdERTJcdTdERTVcdTdERTZcdTdERUFcdTdERUJcdTdERURcdTdERjFcdTdERjVcdTdERjZcdTdERjlcdTdERkFcdTdFMDhcdTdFMTBcdTdFMTFcdTdFMTVcdTdFMTdcdTdFMUNcdTdFMURcdTdFMjBcdTdFMjdcdTdFMjhcdTdFMkNcdTdFMkRcdTdFMkZcdTdFMzNcdTdFMzZcdTdFM0ZcdTdFNDRcdTdFNDVcdTdFNDdcdTdFNEVcdTdFNTBcdTdFNTJcdTdFNThcdTdFNUZcdTdFNjFcdTdFNjJcdTdFNjVcdTdFNkJcdTdFNkVcdTdFNkZcdTdFNzNcdTdFNzhcdTdFN0VcdTdFODFcdTdFODZcdTdFODdcdTdFOEFcdTdFOERcdTdFOTFcdTdFOTVcdTdFOThcdTdFOUFcdTdFOURcdTdFOUVcdTdGM0NcdTdGM0JcdTdGM0RcdTdGM0VcdTdGM0ZcdTdGNDNcdTdGNDRcdTdGNDdcdTdGNEZcdTdGNTJcdTdGNTNcdTdGNUJcdTdGNUNcdTdGNURcdTdGNjFcdTdGNjNcdTdGNjRcdTdGNjVcdTdGNjZcdTdGNkRcIl0sXG5bXCI4ZmQ1YTFcIixcIlx1N0Y3MVx1N0Y3RFx1N0Y3RVx1N0Y3Rlx1N0Y4MFx1N0Y4Qlx1N0Y4RFx1N0Y4Rlx1N0Y5MFx1N0Y5MVx1N0Y5Nlx1N0Y5N1x1N0Y5Q1x1N0ZBMVx1N0ZBMlx1N0ZBNlx1N0ZBQVx1N0ZBRFx1N0ZCNFx1N0ZCQ1x1N0ZCRlx1N0ZDMFx1N0ZDM1x1N0ZDOFx1N0ZDRVx1N0ZDRlx1N0ZEQlx1N0ZERlx1N0ZFM1x1N0ZFNVx1N0ZFOFx1N0ZFQ1x1N0ZFRVx1N0ZFRlx1N0ZGMlx1N0ZGQVx1N0ZGRFx1N0ZGRVx1N0ZGRlx1ODAwN1x1ODAwOFx1ODAwQVx1ODAwRFx1ODAwRVx1ODAwRlx1ODAxMVx1ODAxM1x1ODAxNFx1ODAxNlx1ODAxRFx1ODAxRVx1ODAxRlx1ODAyMFx1ODAyNFx1ODAyNlx1ODAyQ1x1ODAyRVx1ODAzMFx1ODAzNFx1ODAzNVx1ODAzN1x1ODAzOVx1ODAzQVx1ODAzQ1x1ODAzRVx1ODA0MFx1ODA0NFx1ODA2MFx1ODA2NFx1ODA2Nlx1ODA2RFx1ODA3MVx1ODA3NVx1ODA4MVx1ODA4OFx1ODA4RVx1ODA5Q1x1ODA5RVx1ODBBNlx1ODBBN1x1ODBBQlx1ODBCOFx1ODBCOVx1ODBDOFx1ODBDRFx1ODBDRlx1ODBEMlx1ODBENFx1ODBENVx1ODBEN1x1ODBEOFx1ODBFMFx1ODBFRFx1ODBFRVwiXSxcbltcIjhmZDZhMVwiLFwiXHU4MEYwXHU4MEYyXHU4MEYzXHU4MEY2XHU4MEY5XHU4MEZBXHU4MEZFXHU4MTAzXHU4MTBCXHU4MTE2XHU4MTE3XHU4MTE4XHU4MTFDXHU4MTFFXHU4MTIwXHU4MTI0XHU4MTI3XHU4MTJDXHU4MTMwXHU4MTM1XHU4MTNBXHU4MTNDXHU4MTQ1XHU4MTQ3XHU4MTRBXHU4MTRDXHU4MTUyXHU4MTU3XHU4MTYwXHU4MTYxXHU4MTY3XHU4MTY4XHU4MTY5XHU4MTZEXHU4MTZGXHU4MTc3XHU4MTgxXHU4MTkwXHU4MTg0XHU4MTg1XHU4MTg2XHU4MThCXHU4MThFXHU4MTk2XHU4MTk4XHU4MTlCXHU4MTlFXHU4MUEyXHU4MUFFXHU4MUIyXHU4MUI0XHU4MUJCXHU4MUNCXHU4MUMzXHU4MUM1XHU4MUNBXHU4MUNFXHU4MUNGXHU4MUQ1XHU4MUQ3XHU4MURCXHU4MUREXHU4MURFXHU4MUUxXHU4MUU0XHU4MUVCXHU4MUVDXHU4MUYwXHU4MUYxXHU4MUYyXHU4MUY1XHU4MUY2XHU4MUY4XHU4MUY5XHU4MUZEXHU4MUZGXHU4MjAwXHU4MjAzXHU4MjBGXHU4MjEzXHU4MjE0XHU4MjE5XHU4MjFBXHU4MjFEXHU4MjIxXHU4MjIyXHU4MjI4XHU4MjMyXHU4MjM0XHU4MjNBXHU4MjQzXHU4MjQ0XHU4MjQ1XHU4MjQ2XCJdLFxuW1wiOGZkN2ExXCIsXCJcdTgyNEJcdTgyNEVcdTgyNEZcdTgyNTFcdTgyNTZcdTgyNUNcdTgyNjBcdTgyNjNcdTgyNjdcdTgyNkRcdTgyNzRcdTgyN0JcdTgyN0RcdTgyN0ZcdTgyODBcdTgyODFcdTgyODNcdTgyODRcdTgyODdcdTgyODlcdTgyOEFcdTgyOEVcdTgyOTFcdTgyOTRcdTgyOTZcdTgyOThcdTgyOUFcdTgyOUJcdTgyQTBcdTgyQTFcdTgyQTNcdTgyQTRcdTgyQTdcdTgyQThcdTgyQTlcdTgyQUFcdTgyQUVcdTgyQjBcdTgyQjJcdTgyQjRcdTgyQjdcdTgyQkFcdTgyQkNcdTgyQkVcdTgyQkZcdTgyQzZcdTgyRDBcdTgyRDVcdTgyREFcdTgyRTBcdTgyRTJcdTgyRTRcdTgyRThcdTgyRUFcdTgyRURcdTgyRUZcdTgyRjZcdTgyRjdcdTgyRkRcdTgyRkVcdTgzMDBcdTgzMDFcdTgzMDdcdTgzMDhcdTgzMEFcdTgzMEJcdTgzNTRcdTgzMUJcdTgzMURcdTgzMUVcdTgzMUZcdTgzMjFcdTgzMjJcdTgzMkNcdTgzMkRcdTgzMkVcdTgzMzBcdTgzMzNcdTgzMzdcdTgzM0FcdTgzM0NcdTgzM0RcdTgzNDJcdTgzNDNcdTgzNDRcdTgzNDdcdTgzNERcdTgzNEVcdTgzNTFcdTgzNTVcdTgzNTZcdTgzNTdcdTgzNzBcdTgzNzhcIl0sXG5bXCI4ZmQ4YTFcIixcIlx1ODM3RFx1ODM3Rlx1ODM4MFx1ODM4Mlx1ODM4NFx1ODM4Nlx1ODM4RFx1ODM5Mlx1ODM5NFx1ODM5NVx1ODM5OFx1ODM5OVx1ODM5Qlx1ODM5Q1x1ODM5RFx1ODNBNlx1ODNBN1x1ODNBOVx1ODNBQ1x1ODNCRVx1ODNCRlx1ODNDMFx1ODNDN1x1ODNDOVx1ODNDRlx1ODNEMFx1ODNEMVx1ODNENFx1ODNERFx1ODM1M1x1ODNFOFx1ODNFQVx1ODNGNlx1ODNGOFx1ODNGOVx1ODNGQ1x1ODQwMVx1ODQwNlx1ODQwQVx1ODQwRlx1ODQxMVx1ODQxNVx1ODQxOVx1ODNBRFx1ODQyRlx1ODQzOVx1ODQ0NVx1ODQ0N1x1ODQ0OFx1ODQ0QVx1ODQ0RFx1ODQ0Rlx1ODQ1MVx1ODQ1Mlx1ODQ1Nlx1ODQ1OFx1ODQ1OVx1ODQ1QVx1ODQ1Q1x1ODQ2MFx1ODQ2NFx1ODQ2NVx1ODQ2N1x1ODQ2QVx1ODQ3MFx1ODQ3M1x1ODQ3NFx1ODQ3Nlx1ODQ3OFx1ODQ3Q1x1ODQ3RFx1ODQ4MVx1ODQ4NVx1ODQ5Mlx1ODQ5M1x1ODQ5NVx1ODQ5RVx1ODRBNlx1ODRBOFx1ODRBOVx1ODRBQVx1ODRBRlx1ODRCMVx1ODRCNFx1ODRCQVx1ODRCRFx1ODRCRVx1ODRDMFx1ODRDMlx1ODRDN1x1ODRDOFx1ODRDQ1x1ODRDRlx1ODREM1wiXSxcbltcIjhmZDlhMVwiLFwiXHU4NERDXHU4NEU3XHU4NEVBXHU4NEVGXHU4NEYwXHU4NEYxXHU4NEYyXHU4NEY3XHU4NTMyXHU4NEZBXHU4NEZCXHU4NEZEXHU4NTAyXHU4NTAzXHU4NTA3XHU4NTBDXHU4NTBFXHU4NTEwXHU4NTFDXHU4NTFFXHU4NTIyXHU4NTIzXHU4NTI0XHU4NTI1XHU4NTI3XHU4NTJBXHU4NTJCXHU4NTJGXHU4NTMzXHU4NTM0XHU4NTM2XHU4NTNGXHU4NTQ2XHU4NTRGXCIsNCxcIlx1ODU1Nlx1ODU1OVx1ODU1Q1wiLDYsXCJcdTg1NjRcdTg1NkJcdTg1NkZcdTg1NzlcdTg1N0FcdTg1N0JcdTg1N0RcdTg1N0ZcdTg1ODFcdTg1ODVcdTg1ODZcdTg1ODlcdTg1OEJcdTg1OENcdTg1OEZcdTg1OTNcdTg1OThcdTg1OURcdTg1OUZcdTg1QTBcdTg1QTJcdTg1QTVcdTg1QTdcdTg1QjRcdTg1QjZcdTg1QjdcdTg1QjhcdTg1QkNcdTg1QkRcdTg1QkVcdTg1QkZcdTg1QzJcdTg1QzdcdTg1Q0FcdTg1Q0JcdTg1Q0VcdTg1QURcdTg1RDhcdTg1REFcdTg1REZcdTg1RTBcdTg1RTZcdTg1RThcdTg1RURcdTg1RjNcdTg1RjZcdTg1RkNcIl0sXG5bXCI4ZmRhYTFcIixcIlx1ODVGRlx1ODYwMFx1ODYwNFx1ODYwNVx1ODYwRFx1ODYwRVx1ODYxMFx1ODYxMVx1ODYxMlx1ODYxOFx1ODYxOVx1ODYxQlx1ODYxRVx1ODYyMVx1ODYyN1x1ODYyOVx1ODYzNlx1ODYzOFx1ODYzQVx1ODYzQ1x1ODYzRFx1ODY0MFx1ODY0Mlx1ODY0Nlx1ODY1Mlx1ODY1M1x1ODY1Nlx1ODY1N1x1ODY1OFx1ODY1OVx1ODY1RFx1ODY2MFwiLDQsXCJcdTg2NjlcdTg2NkNcdTg2NkZcdTg2NzVcdTg2NzZcdTg2NzdcdTg2N0FcdTg2OERcdTg2OTFcdTg2OTZcdTg2OThcdTg2OUFcdTg2OUNcdTg2QTFcdTg2QTZcdTg2QTdcdTg2QThcdTg2QURcdTg2QjFcdTg2QjNcdTg2QjRcdTg2QjVcdTg2QjdcdTg2QjhcdTg2QjlcdTg2QkZcdTg2QzBcdTg2QzFcdTg2QzNcdTg2QzVcdTg2RDFcdTg2RDJcdTg2RDVcdTg2RDdcdTg2REFcdTg2RENcdTg2RTBcdTg2RTNcdTg2RTVcdTg2RTdcdTg2ODhcdTg2RkFcdTg2RkNcdTg2RkRcdTg3MDRcdTg3MDVcdTg3MDdcdTg3MEJcdTg3MEVcdTg3MEZcdTg3MTBcdTg3MTNcdTg3MTRcdTg3MTlcdTg3MUVcdTg3MUZcdTg3MjFcdTg3MjNcIl0sXG5bXCI4ZmRiYTFcIixcIlx1ODcyOFx1ODcyRVx1ODcyRlx1ODczMVx1ODczMlx1ODczOVx1ODczQVx1ODczQ1x1ODczRFx1ODczRVx1ODc0MFx1ODc0M1x1ODc0NVx1ODc0RFx1ODc1OFx1ODc1RFx1ODc2MVx1ODc2NFx1ODc2NVx1ODc2Rlx1ODc3MVx1ODc3Mlx1ODc3Qlx1ODc4M1wiLDYsXCJcdTg3OEJcdTg3OENcdTg3OTBcdTg3OTNcdTg3OTVcdTg3OTdcdTg3OThcdTg3OTlcdTg3OUVcdTg3QTBcdTg3QTNcdTg3QTdcdTg3QUNcdTg3QURcdTg3QUVcdTg3QjFcdTg3QjVcdTg3QkVcdTg3QkZcdTg3QzFcdTg3QzhcdTg3QzlcdTg3Q0FcdTg3Q0VcdTg3RDVcdTg3RDZcdTg3RDlcdTg3REFcdTg3RENcdTg3REZcdTg3RTJcdTg3RTNcdTg3RTRcdTg3RUFcdTg3RUJcdTg3RURcdTg3RjFcdTg3RjNcdTg3RjhcdTg3RkFcdTg3RkZcdTg4MDFcdTg4MDNcdTg4MDZcdTg4MDlcdTg4MEFcdTg4MEJcdTg4MTBcdTg4MTlcdTg4MTJcdTg4MTNcdTg4MTRcdTg4MThcdTg4MUFcdTg4MUJcdTg4MUNcdTg4MUVcdTg4MUZcdTg4MjhcdTg4MkRcdTg4MkVcdTg4MzBcdTg4MzJcdTg4MzVcIl0sXG5bXCI4ZmRjYTFcIixcIlx1ODgzQVx1ODgzQ1x1ODg0MVx1ODg0M1x1ODg0NVx1ODg0OFx1ODg0OVx1ODg0QVx1ODg0Qlx1ODg0RVx1ODg1MVx1ODg1NVx1ODg1Nlx1ODg1OFx1ODg1QVx1ODg1Q1x1ODg1Rlx1ODg2MFx1ODg2NFx1ODg2OVx1ODg3MVx1ODg3OVx1ODg3Qlx1ODg4MFx1ODg5OFx1ODg5QVx1ODg5Qlx1ODg5Q1x1ODg5Rlx1ODhBMFx1ODhBOFx1ODhBQVx1ODhCQVx1ODhCRFx1ODhCRVx1ODhDMFx1ODhDQVwiLDQsXCJcdTg4RDFcdTg4RDJcdTg4RDNcdTg4REJcdTg4REVcdTg4RTdcdTg4RUZcdTg4RjBcdTg4RjFcdTg4RjVcdTg4RjdcdTg5MDFcdTg5MDZcdTg5MERcdTg5MEVcdTg5MEZcdTg5MTVcdTg5MTZcdTg5MThcdTg5MTlcdTg5MUFcdTg5MUNcdTg5MjBcdTg5MjZcdTg5MjdcdTg5MjhcdTg5MzBcdTg5MzFcdTg5MzJcdTg5MzVcdTg5MzlcdTg5M0FcdTg5M0VcdTg5NDBcdTg5NDJcdTg5NDVcdTg5NDZcdTg5NDlcdTg5NEZcdTg5NTJcdTg5NTdcdTg5NUFcdTg5NUJcdTg5NUNcdTg5NjFcdTg5NjJcdTg5NjNcdTg5NkJcdTg5NkVcdTg5NzBcdTg5NzNcdTg5NzVcdTg5N0FcIl0sXG5bXCI4ZmRkYTFcIixcIlx1ODk3Qlx1ODk3Q1x1ODk3RFx1ODk4OVx1ODk4RFx1ODk5MFx1ODk5NFx1ODk5NVx1ODk5Qlx1ODk5Q1x1ODk5Rlx1ODlBMFx1ODlBNVx1ODlCMFx1ODlCNFx1ODlCNVx1ODlCNlx1ODlCN1x1ODlCQ1x1ODlENFwiLDQsXCJcdTg5RTVcdTg5RTlcdTg5RUJcdTg5RURcdTg5RjFcdTg5RjNcdTg5RjZcdTg5RjlcdTg5RkRcdTg5RkZcdThBMDRcdThBMDVcdThBMDdcdThBMEZcdThBMTFcdThBMTJcdThBMTRcdThBMTVcdThBMUVcdThBMjBcdThBMjJcdThBMjRcdThBMjZcdThBMkJcdThBMkNcdThBMkZcdThBMzVcdThBMzdcdThBM0RcdThBM0VcdThBNDBcdThBNDNcdThBNDVcdThBNDdcdThBNDlcdThBNERcdThBNEVcdThBNTNcdThBNTZcdThBNTdcdThBNThcdThBNUNcdThBNURcdThBNjFcdThBNjVcdThBNjdcdThBNzVcdThBNzZcdThBNzdcdThBNzlcdThBN0FcdThBN0JcdThBN0VcdThBN0ZcdThBODBcdThBODNcdThBODZcdThBOEJcdThBOEZcdThBOTBcdThBOTJcdThBOTZcdThBOTdcdThBOTlcdThBOUZcdThBQTdcdThBQTlcdThBQUVcdThBQUZcdThBQjNcIl0sXG5bXCI4ZmRlYTFcIixcIlx1OEFCNlx1OEFCN1x1OEFCQlx1OEFCRVx1OEFDM1x1OEFDNlx1OEFDOFx1OEFDOVx1OEFDQVx1OEFEMVx1OEFEM1x1OEFENFx1OEFENVx1OEFEN1x1OEFERFx1OEFERlx1OEFFQ1x1OEFGMFx1OEFGNFx1OEFGNVx1OEFGNlx1OEFGQ1x1OEFGRlx1OEIwNVx1OEIwNlx1OEIwQlx1OEIxMVx1OEIxQ1x1OEIxRVx1OEIxRlx1OEIwQVx1OEIyRFx1OEIzMFx1OEIzN1x1OEIzQ1x1OEI0MlwiLDQsXCJcdThCNDhcdThCNTJcdThCNTNcdThCNTRcdThCNTlcdThCNERcdThCNUVcdThCNjNcdThCNkRcdThCNzZcdThCNzhcdThCNzlcdThCN0NcdThCN0VcdThCODFcdThCODRcdThCODVcdThCOEJcdThCOERcdThCOEZcdThCOTRcdThCOTVcdThCOUNcdThCOUVcdThCOUZcdThDMzhcdThDMzlcdThDM0RcdThDM0VcdThDNDVcdThDNDdcdThDNDlcdThDNEJcdThDNEZcdThDNTFcdThDNTNcdThDNTRcdThDNTdcdThDNThcdThDNUJcdThDNURcdThDNTlcdThDNjNcdThDNjRcdThDNjZcdThDNjhcdThDNjlcdThDNkRcdThDNzNcdThDNzVcdThDNzZcdThDN0JcdThDN0VcdThDODZcIl0sXG5bXCI4ZmRmYTFcIixcIlx1OEM4N1x1OEM4Qlx1OEM5MFx1OEM5Mlx1OEM5M1x1OEM5OVx1OEM5Qlx1OEM5Q1x1OENBNFx1OENCOVx1OENCQVx1OENDNVx1OENDNlx1OENDOVx1OENDQlx1OENDRlx1OENENlx1OENENVx1OENEOVx1OENERFx1OENFMVx1OENFOFx1OENFQ1x1OENFRlx1OENGMFx1OENGMlx1OENGNVx1OENGN1x1OENGOFx1OENGRVx1OENGRlx1OEQwMVx1OEQwM1x1OEQwOVx1OEQxMlx1OEQxN1x1OEQxQlx1OEQ2NVx1OEQ2OVx1OEQ2Q1x1OEQ2RVx1OEQ3Rlx1OEQ4Mlx1OEQ4NFx1OEQ4OFx1OEQ4RFx1OEQ5MFx1OEQ5MVx1OEQ5NVx1OEQ5RVx1OEQ5Rlx1OERBMFx1OERBNlx1OERBQlx1OERBQ1x1OERBRlx1OERCMlx1OERCNVx1OERCN1x1OERCOVx1OERCQlx1OERDMFx1OERDNVx1OERDNlx1OERDN1x1OERDOFx1OERDQVx1OERDRVx1OEREMVx1OERENFx1OERENVx1OEREN1x1OEREOVx1OERFNFx1OERFNVx1OERFN1x1OERFQ1x1OERGMFx1OERCQ1x1OERGMVx1OERGMlx1OERGNFx1OERGRFx1OEUwMVx1OEUwNFx1OEUwNVx1OEUwNlx1OEUwQlx1OEUxMVx1OEUxNFx1OEUxNlx1OEUyMFx1OEUyMVx1OEUyMlwiXSxcbltcIjhmZTBhMVwiLFwiXHU4RTIzXHU4RTI2XHU4RTI3XHU4RTMxXHU4RTMzXHU4RTM2XHU4RTM3XHU4RTM4XHU4RTM5XHU4RTNEXHU4RTQwXHU4RTQxXHU4RTRCXHU4RTREXHU4RTRFXHU4RTRGXHU4RTU0XHU4RTVCXHU4RTVDXHU4RTVEXHU4RTVFXHU4RTYxXHU4RTYyXHU4RTY5XHU4RTZDXHU4RTZEXHU4RTZGXHU4RTcwXHU4RTcxXHU4RTc5XHU4RTdBXHU4RTdCXHU4RTgyXHU4RTgzXHU4RTg5XHU4RTkwXHU4RTkyXHU4RTk1XHU4RTlBXHU4RTlCXHU4RTlEXHU4RTlFXHU4RUEyXHU4RUE3XHU4RUE5XHU4RUFEXHU4RUFFXHU4RUIzXHU4RUI1XHU4RUJBXHU4RUJCXHU4RUMwXHU4RUMxXHU4RUMzXHU4RUM0XHU4RUM3XHU4RUNGXHU4RUQxXHU4RUQ0XHU4RURDXHU4RUU4XHU4RUVFXHU4RUYwXHU4RUYxXHU4RUY3XHU4RUY5XHU4RUZBXHU4RUVEXHU4RjAwXHU4RjAyXHU4RjA3XHU4RjA4XHU4RjBGXHU4RjEwXHU4RjE2XHU4RjE3XHU4RjE4XHU4RjFFXHU4RjIwXHU4RjIxXHU4RjIzXHU4RjI1XHU4RjI3XHU4RjI4XHU4RjJDXHU4RjJEXHU4RjJFXHU4RjM0XHU4RjM1XHU4RjM2XHU4RjM3XHU4RjNBXHU4RjQwXHU4RjQxXCJdLFxuW1wiOGZlMWExXCIsXCJcdThGNDNcdThGNDdcdThGNEZcdThGNTFcIiw0LFwiXHU4RjU4XHU4RjVEXHU4RjVFXHU4RjY1XHU4RjlEXHU4RkEwXHU4RkExXHU4RkE0XHU4RkE1XHU4RkE2XHU4RkI1XHU4RkI2XHU4RkI4XHU4RkJFXHU4RkMwXHU4RkMxXHU4RkM2XHU4RkNBXHU4RkNCXHU4RkNEXHU4RkQwXHU4RkQyXHU4RkQzXHU4RkQ1XHU4RkUwXHU4RkUzXHU4RkU0XHU4RkU4XHU4RkVFXHU4RkYxXHU4RkY1XHU4RkY2XHU4RkZCXHU4RkZFXHU5MDAyXHU5MDA0XHU5MDA4XHU5MDBDXHU5MDE4XHU5MDFCXHU5MDI4XHU5MDI5XHU5MDJGXHU5MDJBXHU5MDJDXHU5MDJEXHU5MDMzXHU5MDM0XHU5MDM3XHU5MDNGXHU5MDQzXHU5MDQ0XHU5MDRDXHU5MDVCXHU5MDVEXHU5MDYyXHU5MDY2XHU5MDY3XHU5MDZDXHU5MDcwXHU5MDc0XHU5MDc5XHU5MDg1XHU5MDg4XHU5MDhCXHU5MDhDXHU5MDhFXHU5MDkwXHU5MDk1XHU5MDk3XHU5MDk4XHU5MDk5XHU5MDlCXHU5MEEwXHU5MEExXHU5MEEyXHU5MEE1XHU5MEIwXHU5MEIyXHU5MEIzXHU5MEI0XHU5MEI2XHU5MEJEXHU5MENDXHU5MEJFXHU5MEMzXCJdLFxuW1wiOGZlMmExXCIsXCJcdTkwQzRcdTkwQzVcdTkwQzdcdTkwQzhcdTkwRDVcdTkwRDdcdTkwRDhcdTkwRDlcdTkwRENcdTkwRERcdTkwREZcdTkwRTVcdTkwRDJcdTkwRjZcdTkwRUJcdTkwRUZcdTkwRjBcdTkwRjRcdTkwRkVcdTkwRkZcdTkxMDBcdTkxMDRcdTkxMDVcdTkxMDZcdTkxMDhcdTkxMERcdTkxMTBcdTkxMTRcdTkxMTZcdTkxMTdcdTkxMThcdTkxMUFcdTkxMUNcdTkxMUVcdTkxMjBcdTkxMjVcdTkxMjJcdTkxMjNcdTkxMjdcdTkxMjlcdTkxMkVcdTkxMkZcdTkxMzFcdTkxMzRcdTkxMzZcdTkxMzdcdTkxMzlcdTkxM0FcdTkxM0NcdTkxM0RcdTkxNDNcdTkxNDdcdTkxNDhcdTkxNEZcdTkxNTNcdTkxNTdcdTkxNTlcdTkxNUFcdTkxNUJcdTkxNjFcdTkxNjRcdTkxNjdcdTkxNkRcdTkxNzRcdTkxNzlcdTkxN0FcdTkxN0JcdTkxODFcdTkxODNcdTkxODVcdTkxODZcdTkxOEFcdTkxOEVcdTkxOTFcdTkxOTNcdTkxOTRcdTkxOTVcdTkxOThcdTkxOUVcdTkxQTFcdTkxQTZcdTkxQThcdTkxQUNcdTkxQURcdTkxQUVcdTkxQjBcdTkxQjFcdTkxQjJcdTkxQjNcdTkxQjZcdTkxQkJcdTkxQkNcdTkxQkRcdTkxQkZcIl0sXG5bXCI4ZmUzYTFcIixcIlx1OTFDMlx1OTFDM1x1OTFDNVx1OTFEM1x1OTFENFx1OTFEN1x1OTFEOVx1OTFEQVx1OTFERVx1OTFFNFx1OTFFNVx1OTFFOVx1OTFFQVx1OTFFQ1wiLDUsXCJcdTkxRjdcdTkxRjlcdTkxRkJcdTkxRkRcdTkyMDBcdTkyMDFcdTkyMDRcdTkyMDVcdTkyMDZcdTkyMDdcdTkyMDlcdTkyMEFcdTkyMENcdTkyMTBcdTkyMTJcdTkyMTNcdTkyMTZcdTkyMThcdTkyMUNcdTkyMURcdTkyMjNcdTkyMjRcdTkyMjVcdTkyMjZcdTkyMjhcdTkyMkVcdTkyMkZcdTkyMzBcdTkyMzNcdTkyMzVcdTkyMzZcdTkyMzhcdTkyMzlcdTkyM0FcdTkyM0NcdTkyM0VcdTkyNDBcdTkyNDJcdTkyNDNcdTkyNDZcdTkyNDdcdTkyNEFcdTkyNERcdTkyNEVcdTkyNEZcdTkyNTFcdTkyNThcdTkyNTlcdTkyNUNcdTkyNURcdTkyNjBcdTkyNjFcdTkyNjVcdTkyNjdcdTkyNjhcdTkyNjlcdTkyNkVcdTkyNkZcdTkyNzBcdTkyNzVcIiw0LFwiXHU5MjdCXHU5MjdDXHU5MjdEXHU5MjdGXHU5Mjg4XHU5Mjg5XHU5MjhBXHU5MjhEXHU5MjhFXHU5MjkyXHU5Mjk3XCJdLFxuW1wiOGZlNGExXCIsXCJcdTkyOTlcdTkyOUZcdTkyQTBcdTkyQTRcdTkyQTVcdTkyQTdcdTkyQThcdTkyQUJcdTkyQUZcdTkyQjJcdTkyQjZcdTkyQjhcdTkyQkFcdTkyQkJcdTkyQkNcdTkyQkRcdTkyQkZcIiw0LFwiXHU5MkM1XHU5MkM2XHU5MkM3XHU5MkM4XHU5MkNCXHU5MkNDXHU5MkNEXHU5MkNFXHU5MkQwXHU5MkQzXHU5MkQ1XHU5MkQ3XHU5MkQ4XHU5MkQ5XHU5MkRDXHU5MkREXHU5MkRGXHU5MkUwXHU5MkUxXHU5MkUzXHU5MkU1XHU5MkU3XHU5MkU4XHU5MkVDXHU5MkVFXHU5MkYwXHU5MkY5XHU5MkZCXHU5MkZGXHU5MzAwXHU5MzAyXHU5MzA4XHU5MzBEXHU5MzExXHU5MzE0XHU5MzE1XHU5MzFDXHU5MzFEXHU5MzFFXHU5MzFGXHU5MzIxXHU5MzI0XHU5MzI1XHU5MzI3XHU5MzI5XHU5MzJBXHU5MzMzXHU5MzM0XHU5MzM2XHU5MzM3XHU5MzQ3XHU5MzQ4XHU5MzQ5XHU5MzUwXHU5MzUxXHU5MzUyXHU5MzU1XHU5MzU3XHU5MzU4XHU5MzVBXHU5MzVFXHU5MzY0XHU5MzY1XHU5MzY3XHU5MzY5XHU5MzZBXHU5MzZEXHU5MzZGXHU5MzcwXHU5MzcxXHU5MzczXHU5Mzc0XHU5Mzc2XCJdLFxuW1wiOGZlNWExXCIsXCJcdTkzN0FcdTkzN0RcdTkzN0ZcdTkzODBcdTkzODFcdTkzODJcdTkzODhcdTkzOEFcdTkzOEJcdTkzOERcdTkzOEZcdTkzOTJcdTkzOTVcdTkzOThcdTkzOUJcdTkzOUVcdTkzQTFcdTkzQTNcdTkzQTRcdTkzQTZcdTkzQThcdTkzQUJcdTkzQjRcdTkzQjVcdTkzQjZcdTkzQkFcdTkzQTlcdTkzQzFcdTkzQzRcdTkzQzVcdTkzQzZcdTkzQzdcdTkzQzlcIiw0LFwiXHU5M0QzXHU5M0Q5XHU5M0RDXHU5M0RFXHU5M0RGXHU5M0UyXHU5M0U2XHU5M0U3XHU5M0Y5XHU5M0Y3XHU5M0Y4XHU5M0ZBXHU5M0ZCXHU5M0ZEXHU5NDAxXHU5NDAyXHU5NDA0XHU5NDA4XHU5NDA5XHU5NDBEXHU5NDBFXHU5NDBGXHU5NDE1XHU5NDE2XHU5NDE3XHU5NDFGXHU5NDJFXHU5NDJGXHU5NDMxXHU5NDMyXHU5NDMzXHU5NDM0XHU5NDNCXHU5NDNGXHU5NDNEXHU5NDQzXHU5NDQ1XHU5NDQ4XHU5NDRBXHU5NDRDXHU5NDU1XHU5NDU5XHU5NDVDXHU5NDVGXHU5NDYxXHU5NDYzXHU5NDY4XHU5NDZCXHU5NDZEXHU5NDZFXHU5NDZGXHU5NDcxXHU5NDcyXHU5NDg0XHU5NDgzXHU5NTc4XHU5NTc5XCJdLFxuW1wiOGZlNmExXCIsXCJcdTk1N0VcdTk1ODRcdTk1ODhcdTk1OENcdTk1OERcdTk1OEVcdTk1OURcdTk1OUVcdTk1OUZcdTk1QTFcdTk1QTZcdTk1QTlcdTk1QUJcdTk1QUNcdTk1QjRcdTk1QjZcdTk1QkFcdTk1QkRcdTk1QkZcdTk1QzZcdTk1QzhcdTk1QzlcdTk1Q0JcdTk1RDBcdTk1RDFcdTk1RDJcdTk1RDNcdTk1RDlcdTk1REFcdTk1RERcdTk1REVcdTk1REZcdTk1RTBcdTk1RTRcdTk1RTZcdTk2MURcdTk2MUVcdTk2MjJcdTk2MjRcdTk2MjVcdTk2MjZcdTk2MkNcdTk2MzFcdTk2MzNcdTk2MzdcdTk2MzhcdTk2MzlcdTk2M0FcdTk2M0NcdTk2M0RcdTk2NDFcdTk2NTJcdTk2NTRcdTk2NTZcdTk2NTdcdTk2NThcdTk2NjFcdTk2NkVcdTk2NzRcdTk2N0JcdTk2N0NcdTk2N0VcdTk2N0ZcdTk2ODFcdTk2ODJcdTk2ODNcdTk2ODRcdTk2ODlcdTk2OTFcdTk2OTZcdTk2OUFcdTk2OURcdTk2OUZcdTk2QTRcdTk2QTVcdTk2QTZcdTk2QTlcdTk2QUVcdTk2QUZcdTk2QjNcdTk2QkFcdTk2Q0FcdTk2RDJcdTVEQjJcdTk2RDhcdTk2REFcdTk2RERcdTk2REVcdTk2REZcdTk2RTlcdTk2RUZcdTk2RjFcdTk2RkFcdTk3MDJcIl0sXG5bXCI4ZmU3YTFcIixcIlx1OTcwM1x1OTcwNVx1OTcwOVx1OTcxQVx1OTcxQlx1OTcxRFx1OTcyMVx1OTcyMlx1OTcyM1x1OTcyOFx1OTczMVx1OTczM1x1OTc0MVx1OTc0M1x1OTc0QVx1OTc0RVx1OTc0Rlx1OTc1NVx1OTc1N1x1OTc1OFx1OTc1QVx1OTc1Qlx1OTc2M1x1OTc2N1x1OTc2QVx1OTc2RVx1OTc3M1x1OTc3Nlx1OTc3N1x1OTc3OFx1OTc3Qlx1OTc3RFx1OTc3Rlx1OTc4MFx1OTc4OVx1OTc5NVx1OTc5Nlx1OTc5N1x1OTc5OVx1OTc5QVx1OTc5RVx1OTc5Rlx1OTdBMlx1OTdBQ1x1OTdBRVx1OTdCMVx1OTdCMlx1OTdCNVx1OTdCNlx1OTdCOFx1OTdCOVx1OTdCQVx1OTdCQ1x1OTdCRVx1OTdCRlx1OTdDMVx1OTdDNFx1OTdDNVx1OTdDN1x1OTdDOVx1OTdDQVx1OTdDQ1x1OTdDRFx1OTdDRVx1OTdEMFx1OTdEMVx1OTdENFx1OTdEN1x1OTdEOFx1OTdEOVx1OTdERFx1OTdERVx1OTdFMFx1OTdEQlx1OTdFMVx1OTdFNFx1OTdFRlx1OTdGMVx1OTdGNFx1OTdGN1x1OTdGOFx1OTdGQVx1OTgwN1x1OTgwQVx1OTgxOVx1OTgwRFx1OTgwRVx1OTgxNFx1OTgxNlx1OTgxQ1x1OTgxRVx1OTgyMFx1OTgyM1x1OTgyNlwiXSxcbltcIjhmZThhMVwiLFwiXHU5ODJCXHU5ODJFXHU5ODJGXHU5ODMwXHU5ODMyXHU5ODMzXHU5ODM1XHU5ODI1XHU5ODNFXHU5ODQ0XHU5ODQ3XHU5ODRBXHU5ODUxXHU5ODUyXHU5ODUzXHU5ODU2XHU5ODU3XHU5ODU5XHU5ODVBXHU5ODYyXHU5ODYzXHU5ODY1XHU5ODY2XHU5ODZBXHU5ODZDXHU5OEFCXHU5OEFEXHU5OEFFXHU5OEIwXHU5OEI0XHU5OEI3XHU5OEI4XHU5OEJBXHU5OEJCXHU5OEJGXHU5OEMyXHU5OEM1XHU5OEM4XHU5OENDXHU5OEUxXHU5OEUzXHU5OEU1XHU5OEU2XHU5OEU3XHU5OEVBXHU5OEYzXHU5OEY2XHU5OTAyXHU5OTA3XHU5OTA4XHU5OTExXHU5OTE1XHU5OTE2XHU5OTE3XHU5OTFBXHU5OTFCXHU5OTFDXHU5OTFGXHU5OTIyXHU5OTI2XHU5OTI3XHU5OTJCXHU5OTMxXCIsNCxcIlx1OTkzOVx1OTkzQVx1OTkzQlx1OTkzQ1x1OTk0MFx1OTk0MVx1OTk0Nlx1OTk0N1x1OTk0OFx1OTk0RFx1OTk0RVx1OTk1NFx1OTk1OFx1OTk1OVx1OTk1Qlx1OTk1Q1x1OTk1RVx1OTk1Rlx1OTk2MFx1OTk5Qlx1OTk5RFx1OTk5Rlx1OTlBNlx1OTlCMFx1OTlCMVx1OTlCMlx1OTlCNVwiXSxcbltcIjhmZTlhMVwiLFwiXHU5OUI5XHU5OUJBXHU5OUJEXHU5OUJGXHU5OUMzXHU5OUM5XHU5OUQzXHU5OUQ0XHU5OUQ5XHU5OURBXHU5OURDXHU5OURFXHU5OUU3XHU5OUVBXHU5OUVCXHU5OUVDXHU5OUYwXHU5OUY0XHU5OUY1XHU5OUY5XHU5OUZEXHU5OUZFXHU5QTAyXHU5QTAzXHU5QTA0XHU5QTBCXHU5QTBDXHU5QTEwXHU5QTExXHU5QTE2XHU5QTFFXHU5QTIwXHU5QTIyXHU5QTIzXHU5QTI0XHU5QTI3XHU5QTJEXHU5QTJFXHU5QTMzXHU5QTM1XHU5QTM2XHU5QTM4XHU5QTQ3XHU5QTQxXHU5QTQ0XHU5QTRBXHU5QTRCXHU5QTRDXHU5QTRFXHU5QTUxXHU5QTU0XHU5QTU2XHU5QTVEXHU5QUFBXHU5QUFDXHU5QUFFXHU5QUFGXHU5QUIyXHU5QUI0XHU5QUI1XHU5QUI2XHU5QUI5XHU5QUJCXHU5QUJFXHU5QUJGXHU5QUMxXHU5QUMzXHU5QUM2XHU5QUM4XHU5QUNFXHU5QUQwXHU5QUQyXHU5QUQ1XHU5QUQ2XHU5QUQ3XHU5QURCXHU5QURDXHU5QUUwXHU5QUU0XHU5QUU1XHU5QUU3XHU5QUU5XHU5QUVDXHU5QUYyXHU5QUYzXHU5QUY1XHU5QUY5XHU5QUZBXHU5QUZEXHU5QUZGXCIsNF0sXG5bXCI4ZmVhYTFcIixcIlx1OUIwNFx1OUIwNVx1OUIwOFx1OUIwOVx1OUIwQlx1OUIwQ1x1OUIwRFx1OUIwRVx1OUIxMFx1OUIxMlx1OUIxNlx1OUIxOVx1OUIxQlx1OUIxQ1x1OUIyMFx1OUIyNlx1OUIyQlx1OUIyRFx1OUIzM1x1OUIzNFx1OUIzNVx1OUIzN1x1OUIzOVx1OUIzQVx1OUIzRFx1OUI0OFx1OUI0Qlx1OUI0Q1x1OUI1NVx1OUI1Nlx1OUI1N1x1OUI1Qlx1OUI1RVx1OUI2MVx1OUI2M1x1OUI2NVx1OUI2Nlx1OUI2OFx1OUI2QVwiLDQsXCJcdTlCNzNcdTlCNzVcdTlCNzdcdTlCNzhcdTlCNzlcdTlCN0ZcdTlCODBcdTlCODRcdTlCODVcdTlCODZcdTlCODdcdTlCODlcdTlCOEFcdTlCOEJcdTlCOERcdTlCOEZcdTlCOTBcdTlCOTRcdTlCOUFcdTlCOURcdTlCOUVcdTlCQTZcdTlCQTdcdTlCQTlcdTlCQUNcdTlCQjBcdTlCQjFcdTlCQjJcdTlCQjdcdTlCQjhcdTlCQkJcdTlCQkNcdTlCQkVcdTlCQkZcdTlCQzFcdTlCQzdcdTlCQzhcdTlCQ0VcdTlCRDBcdTlCRDdcdTlCRDhcdTlCRERcdTlCREZcdTlCRTVcdTlCRTdcdTlCRUFcdTlCRUJcdTlCRUZcdTlCRjNcdTlCRjdcdTlCRjhcIl0sXG5bXCI4ZmViYTFcIixcIlx1OUJGOVx1OUJGQVx1OUJGRFx1OUJGRlx1OUMwMFx1OUMwMlx1OUMwQlx1OUMwRlx1OUMxMVx1OUMxNlx1OUMxOFx1OUMxOVx1OUMxQVx1OUMxQ1x1OUMxRVx1OUMyMlx1OUMyM1x1OUMyNlwiLDQsXCJcdTlDMzFcdTlDMzVcdTlDMzZcdTlDMzdcdTlDM0RcdTlDNDFcdTlDNDNcdTlDNDRcdTlDNDVcdTlDNDlcdTlDNEFcdTlDNEVcdTlDNEZcdTlDNTBcdTlDNTNcdTlDNTRcdTlDNTZcdTlDNThcdTlDNUJcdTlDNURcdTlDNUVcdTlDNUZcdTlDNjNcdTlDNjlcdTlDNkFcdTlDNUNcdTlDNkJcdTlDNjhcdTlDNkVcdTlDNzBcdTlDNzJcdTlDNzVcdTlDNzdcdTlDN0JcdTlDRTZcdTlDRjJcdTlDRjdcdTlDRjlcdTlEMEJcdTlEMDJcdTlEMTFcdTlEMTdcdTlEMThcdTlEMUNcdTlEMURcdTlEMUVcdTlEMkZcdTlEMzBcdTlEMzJcdTlEMzNcdTlEMzRcdTlEM0FcdTlEM0NcdTlENDVcdTlEM0RcdTlENDJcdTlENDNcdTlENDdcdTlENEFcdTlENTNcdTlENTRcdTlENUZcdTlENjNcdTlENjJcdTlENjVcdTlENjlcdTlENkFcdTlENkJcdTlENzBcdTlENzZcdTlENzdcdTlEN0JcIl0sXG5bXCI4ZmVjYTFcIixcIlx1OUQ3Q1x1OUQ3RVx1OUQ4M1x1OUQ4NFx1OUQ4Nlx1OUQ4QVx1OUQ4RFx1OUQ4RVx1OUQ5Mlx1OUQ5M1x1OUQ5NVx1OUQ5Nlx1OUQ5N1x1OUQ5OFx1OURBMVx1OURBQVx1OURBQ1x1OURBRVx1OURCMVx1OURCNVx1OURCOVx1OURCQ1x1OURCRlx1OURDM1x1OURDN1x1OURDOVx1OURDQVx1OURENFx1OURENVx1OURENlx1OUREN1x1OUREQVx1OURERVx1OURERlx1OURFMFx1OURFNVx1OURFN1x1OURFOVx1OURFQlx1OURFRVx1OURGMFx1OURGM1x1OURGNFx1OURGRVx1OUUwQVx1OUUwMlx1OUUwN1x1OUUwRVx1OUUxMFx1OUUxMVx1OUUxMlx1OUUxNVx1OUUxNlx1OUUxOVx1OUUxQ1x1OUUxRFx1OUU3QVx1OUU3Qlx1OUU3Q1x1OUU4MFx1OUU4Mlx1OUU4M1x1OUU4NFx1OUU4NVx1OUU4N1x1OUU4RVx1OUU4Rlx1OUU5Nlx1OUU5OFx1OUU5Qlx1OUU5RVx1OUVBNFx1OUVBOFx1OUVBQ1x1OUVBRVx1OUVBRlx1OUVCMFx1OUVCM1x1OUVCNFx1OUVCNVx1OUVDNlx1OUVDOFx1OUVDQlx1OUVENVx1OUVERlx1OUVFNFx1OUVFN1x1OUVFQ1x1OUVFRFx1OUVFRVx1OUVGMFx1OUVGMVx1OUVGMlx1OUVGNVwiXSxcbltcIjhmZWRhMVwiLFwiXHU5RUY4XHU5RUZGXHU5RjAyXHU5RjAzXHU5RjA5XHU5RjBGXHU5RjEwXHU5RjExXHU5RjEyXHU5RjE0XHU5RjE2XHU5RjE3XHU5RjE5XHU5RjFBXHU5RjFCXHU5RjFGXHU5RjIyXHU5RjI2XHU5RjJBXHU5RjJCXHU5RjJGXHU5RjMxXHU5RjMyXHU5RjM0XHU5RjM3XHU5RjM5XHU5RjNBXHU5RjNDXHU5RjNEXHU5RjNGXHU5RjQxXHU5RjQzXCIsNCxcIlx1OUY1M1x1OUY1NVx1OUY1Nlx1OUY1N1x1OUY1OFx1OUY1QVx1OUY1RFx1OUY1RVx1OUY2OFx1OUY2OVx1OUY2RFwiLDQsXCJcdTlGNzNcdTlGNzVcdTlGN0FcdTlGN0RcdTlGOEZcdTlGOTBcdTlGOTFcdTlGOTJcdTlGOTRcdTlGOTZcdTlGOTdcdTlGOUVcdTlGQTFcdTlGQTJcdTlGQTNcdTlGQTVcIl1cbl1cbiIsICJbXG5bXCIwXCIsXCJcXHUwMDAwXCIsMTI3LFwiXHUyMEFDXCJdLFxuW1wiODE0MFwiLFwiXHU0RTAyXHU0RTA0XHU0RTA1XHU0RTA2XHU0RTBGXHU0RTEyXHU0RTE3XHU0RTFGXHU0RTIwXHU0RTIxXHU0RTIzXHU0RTI2XHU0RTI5XHU0RTJFXHU0RTJGXHU0RTMxXHU0RTMzXHU0RTM1XHU0RTM3XHU0RTNDXHU0RTQwXHU0RTQxXHU0RTQyXHU0RTQ0XHU0RTQ2XHU0RTRBXHU0RTUxXHU0RTU1XHU0RTU3XHU0RTVBXHU0RTVCXHU0RTYyXHU0RTYzXHU0RTY0XHU0RTY1XHU0RTY3XHU0RTY4XHU0RTZBXCIsNSxcIlx1NEU3Mlx1NEU3NFwiLDksXCJcdTRFN0ZcIiw2LFwiXHU0RTg3XHU0RThBXCJdLFxuW1wiODE4MFwiLFwiXHU0RTkwXHU0RTk2XHU0RTk3XHU0RTk5XHU0RTlDXHU0RTlEXHU0RTlFXHU0RUEzXHU0RUFBXHU0RUFGXHU0RUIwXHU0RUIxXHU0RUI0XHU0RUI2XHU0RUI3XHU0RUI4XHU0RUI5XHU0RUJDXHU0RUJEXHU0RUJFXHU0RUM4XHU0RUNDXHU0RUNGXHU0RUQwXHU0RUQyXHU0RURBXHU0RURCXHU0RURDXHU0RUUwXHU0RUUyXHU0RUU2XHU0RUU3XHU0RUU5XHU0RUVEXHU0RUVFXHU0RUVGXHU0RUYxXHU0RUY0XHU0RUY4XHU0RUY5XHU0RUZBXHU0RUZDXHU0RUZFXHU0RjAwXHU0RjAyXCIsNixcIlx1NEYwQlx1NEYwQ1x1NEYxMlwiLDQsXCJcdTRGMUNcdTRGMURcdTRGMjFcdTRGMjNcdTRGMjhcdTRGMjlcdTRGMkNcdTRGMkRcdTRGMkVcdTRGMzFcdTRGMzNcdTRGMzVcdTRGMzdcdTRGMzlcdTRGM0JcdTRGM0VcIiw0LFwiXHU0RjQ0XHU0RjQ1XHU0RjQ3XCIsNSxcIlx1NEY1Mlx1NEY1NFx1NEY1Nlx1NEY2MVx1NEY2Mlx1NEY2Nlx1NEY2OFx1NEY2QVx1NEY2Qlx1NEY2RFx1NEY2RVx1NEY3MVx1NEY3Mlx1NEY3NVx1NEY3N1x1NEY3OFx1NEY3OVx1NEY3QVx1NEY3RFx1NEY4MFx1NEY4MVx1NEY4Mlx1NEY4NVx1NEY4Nlx1NEY4N1x1NEY4QVx1NEY4Q1x1NEY4RVx1NEY5MFx1NEY5Mlx1NEY5M1x1NEY5NVx1NEY5Nlx1NEY5OFx1NEY5OVx1NEY5QVx1NEY5Q1x1NEY5RVx1NEY5Rlx1NEZBMVx1NEZBMlwiXSxcbltcIjgyNDBcIixcIlx1NEZBNFx1NEZBQlx1NEZBRFx1NEZCMFwiLDQsXCJcdTRGQjZcIiw4LFwiXHU0RkMwXHU0RkMxXHU0RkMyXHU0RkM2XHU0RkM3XHU0RkM4XHU0RkM5XHU0RkNCXHU0RkNDXHU0RkNEXHU0RkQyXCIsNCxcIlx1NEZEOVx1NEZEQlx1NEZFMFx1NEZFMlx1NEZFNFx1NEZFNVx1NEZFN1x1NEZFQlx1NEZFQ1x1NEZGMFx1NEZGMlx1NEZGNFx1NEZGNVx1NEZGNlx1NEZGN1x1NEZGOVx1NEZGQlx1NEZGQ1x1NEZGRFx1NEZGRlwiLDExXSxcbltcIjgyODBcIixcIlx1NTAwQlx1NTAwRVx1NTAxMFx1NTAxMVx1NTAxM1x1NTAxNVx1NTAxNlx1NTAxN1x1NTAxQlx1NTAxRFx1NTAxRVx1NTAyMFx1NTAyMlx1NTAyM1x1NTAyNFx1NTAyN1x1NTAyQlx1NTAyRlwiLDEwLFwiXHU1MDNCXHU1MDNEXHU1MDNGXHU1MDQwXHU1MDQxXHU1MDQyXHU1MDQ0XHU1MDQ1XHU1MDQ2XHU1MDQ5XHU1MDRBXHU1MDRCXHU1MDREXHU1MDUwXCIsNCxcIlx1NTA1Nlx1NTA1N1x1NTA1OFx1NTA1OVx1NTA1Qlx1NTA1RFwiLDcsXCJcdTUwNjZcIiw1LFwiXHU1MDZEXCIsOCxcIlx1NTA3OFx1NTA3OVx1NTA3QVx1NTA3Q1x1NTA3RFx1NTA4MVx1NTA4Mlx1NTA4M1x1NTA4NFx1NTA4Nlx1NTA4N1x1NTA4OVx1NTA4QVx1NTA4Qlx1NTA4Q1x1NTA4RVwiLDIwLFwiXHU1MEE0XHU1MEE2XHU1MEFBXHU1MEFCXHU1MEFEXCIsNCxcIlx1NTBCM1wiLDYsXCJcdTUwQkNcIl0sXG5bXCI4MzQwXCIsXCJcdTUwQkRcIiwxNyxcIlx1NTBEMFwiLDUsXCJcdTUwRDdcdTUwRDhcdTUwRDlcdTUwREJcIiwxMCxcIlx1NTBFOFx1NTBFOVx1NTBFQVx1NTBFQlx1NTBFRlx1NTBGMFx1NTBGMVx1NTBGMlx1NTBGNFx1NTBGNlwiLDQsXCJcdTUwRkNcIiw5LFwiXHU1MTA4XCJdLFxuW1wiODM4MFwiLFwiXHU1MTA5XHU1MTBBXHU1MTBDXCIsNSxcIlx1NTExM1wiLDEzLFwiXHU1MTIyXCIsMjgsXCJcdTUxNDJcdTUxNDdcdTUxNEFcdTUxNENcdTUxNEVcdTUxNEZcdTUxNTBcdTUxNTJcdTUxNTNcdTUxNTdcdTUxNThcdTUxNTlcdTUxNUJcdTUxNURcIiw0LFwiXHU1MTYzXHU1MTY0XHU1MTY2XHU1MTY3XHU1MTY5XHU1MTZBXHU1MTZGXHU1MTcyXHU1MTdBXHU1MTdFXHU1MTdGXHU1MTgzXHU1MTg0XHU1MTg2XHU1MTg3XHU1MThBXHU1MThCXHU1MThFXHU1MThGXHU1MTkwXHU1MTkxXHU1MTkzXHU1MTk0XHU1MTk4XHU1MTlBXHU1MTlEXHU1MTlFXHU1MTlGXHU1MUExXHU1MUEzXHU1MUE2XCIsNCxcIlx1NTFBRFx1NTFBRVx1NTFCNFx1NTFCOFx1NTFCOVx1NTFCQVx1NTFCRVx1NTFCRlx1NTFDMVx1NTFDMlx1NTFDM1x1NTFDNVx1NTFDOFx1NTFDQVx1NTFDRFx1NTFDRVx1NTFEMFx1NTFEMlwiLDVdLFxuW1wiODQ0MFwiLFwiXHU1MUQ4XHU1MUQ5XHU1MURBXHU1MURDXHU1MURFXHU1MURGXHU1MUUyXHU1MUUzXHU1MUU1XCIsNSxcIlx1NTFFQ1x1NTFFRVx1NTFGMVx1NTFGMlx1NTFGNFx1NTFGN1x1NTFGRVx1NTIwNFx1NTIwNVx1NTIwOVx1NTIwQlx1NTIwQ1x1NTIwRlx1NTIxMFx1NTIxM1x1NTIxNFx1NTIxNVx1NTIxQ1x1NTIxRVx1NTIxRlx1NTIyMVx1NTIyMlx1NTIyM1x1NTIyNVx1NTIyNlx1NTIyN1x1NTIyQVx1NTIyQ1x1NTIyRlx1NTIzMVx1NTIzMlx1NTIzNFx1NTIzNVx1NTIzQ1x1NTIzRVx1NTI0NFwiLDUsXCJcdTUyNEJcdTUyNEVcdTUyNEZcdTUyNTJcdTUyNTNcdTUyNTVcdTUyNTdcdTUyNThcIl0sXG5bXCI4NDgwXCIsXCJcdTUyNTlcdTUyNUFcdTUyNUJcdTUyNURcdTUyNUZcdTUyNjBcdTUyNjJcdTUyNjNcdTUyNjRcdTUyNjZcdTUyNjhcdTUyNkJcdTUyNkNcdTUyNkRcdTUyNkVcdTUyNzBcdTUyNzFcdTUyNzNcIiw5LFwiXHU1MjdFXHU1MjgwXHU1MjgzXCIsNCxcIlx1NTI4OVwiLDYsXCJcdTUyOTFcdTUyOTJcdTUyOTRcIiw2LFwiXHU1MjlDXHU1MkE0XHU1MkE1XHU1MkE2XHU1MkE3XHU1MkFFXHU1MkFGXHU1MkIwXHU1MkI0XCIsOSxcIlx1NTJDMFx1NTJDMVx1NTJDMlx1NTJDNFx1NTJDNVx1NTJDNlx1NTJDOFx1NTJDQVx1NTJDQ1x1NTJDRFx1NTJDRVx1NTJDRlx1NTJEMVx1NTJEM1x1NTJENFx1NTJENVx1NTJEN1x1NTJEOVwiLDUsXCJcdTUyRTBcdTUyRTFcdTUyRTJcdTUyRTNcdTUyRTVcIiwxMCxcIlx1NTJGMVwiLDcsXCJcdTUyRkJcdTUyRkNcdTUyRkRcdTUzMDFcdTUzMDJcdTUzMDNcdTUzMDRcdTUzMDdcdTUzMDlcdTUzMEFcdTUzMEJcdTUzMENcdTUzMEVcIl0sXG5bXCI4NTQwXCIsXCJcdTUzMTFcdTUzMTJcdTUzMTNcdTUzMTRcdTUzMThcdTUzMUJcdTUzMUNcdTUzMUVcdTUzMUZcdTUzMjJcdTUzMjRcdTUzMjVcdTUzMjdcdTUzMjhcdTUzMjlcdTUzMkJcdTUzMkNcdTUzMkRcdTUzMkZcIiw5LFwiXHU1MzNDXHU1MzNEXHU1MzQwXHU1MzQyXHU1MzQ0XHU1MzQ2XHU1MzRCXHU1MzRDXHU1MzREXHU1MzUwXHU1MzU0XHU1MzU4XHU1MzU5XHU1MzVCXHU1MzVEXHU1MzY1XHU1MzY4XHU1MzZBXHU1MzZDXHU1MzZEXHU1MzcyXHU1Mzc2XHU1Mzc5XHU1MzdCXHU1MzdDXHU1MzdEXHU1MzdFXHU1MzgwXHU1MzgxXHU1MzgzXHU1Mzg3XHU1Mzg4XHU1MzhBXHU1MzhFXHU1MzhGXCJdLFxuW1wiODU4MFwiLFwiXHU1MzkwXCIsNCxcIlx1NTM5Nlx1NTM5N1x1NTM5OVx1NTM5Qlx1NTM5Q1x1NTM5RVx1NTNBMFx1NTNBMVx1NTNBNFx1NTNBN1x1NTNBQVx1NTNBQlx1NTNBQ1x1NTNBRFx1NTNBRlwiLDYsXCJcdTUzQjdcdTUzQjhcdTUzQjlcdTUzQkFcdTUzQkNcdTUzQkRcdTUzQkVcdTUzQzBcdTUzQzNcIiw0LFwiXHU1M0NFXHU1M0NGXHU1M0QwXHU1M0QyXHU1M0QzXHU1M0Q1XHU1M0RBXHU1M0RDXHU1M0REXHU1M0RFXHU1M0UxXHU1M0UyXHU1M0U3XHU1M0Y0XHU1M0ZBXHU1M0ZFXHU1M0ZGXHU1NDAwXHU1NDAyXHU1NDA1XHU1NDA3XHU1NDBCXHU1NDE0XHU1NDE4XHU1NDE5XHU1NDFBXHU1NDFDXHU1NDIyXHU1NDI0XHU1NDI1XHU1NDJBXHU1NDMwXHU1NDMzXHU1NDM2XHU1NDM3XHU1NDNBXHU1NDNEXHU1NDNGXHU1NDQxXHU1NDQyXHU1NDQ0XHU1NDQ1XHU1NDQ3XHU1NDQ5XHU1NDRDXHU1NDREXHU1NDRFXHU1NDRGXHU1NDUxXHU1NDVBXHU1NDVEXCIsNCxcIlx1NTQ2M1x1NTQ2NVx1NTQ2N1x1NTQ2OVwiLDcsXCJcdTU0NzRcdTU0NzlcdTU0N0FcdTU0N0VcdTU0N0ZcdTU0ODFcdTU0ODNcdTU0ODVcdTU0ODdcdTU0ODhcdTU0ODlcdTU0OEFcdTU0OERcdTU0OTFcdTU0OTNcdTU0OTdcdTU0OThcdTU0OUNcdTU0OUVcdTU0OUZcdTU0QTBcdTU0QTFcIl0sXG5bXCI4NjQwXCIsXCJcdTU0QTJcdTU0QTVcdTU0QUVcdTU0QjBcdTU0QjJcdTU0QjVcdTU0QjZcdTU0QjdcdTU0QjlcdTU0QkFcdTU0QkNcdTU0QkVcdTU0QzNcdTU0QzVcdTU0Q0FcdTU0Q0JcdTU0RDZcdTU0RDhcdTU0REJcdTU0RTBcIiw0LFwiXHU1NEVCXHU1NEVDXHU1NEVGXHU1NEYwXHU1NEYxXHU1NEY0XCIsNSxcIlx1NTRGQlx1NTRGRVx1NTUwMFx1NTUwMlx1NTUwM1x1NTUwNFx1NTUwNVx1NTUwOFx1NTUwQVwiLDQsXCJcdTU1MTJcdTU1MTNcdTU1MTVcIiw1LFwiXHU1NTFDXHU1NTFEXHU1NTFFXHU1NTFGXHU1NTIxXHU1NTI1XHU1NTI2XCJdLFxuW1wiODY4MFwiLFwiXHU1NTI4XHU1NTI5XHU1NTJCXHU1NTJEXHU1NTMyXHU1NTM0XHU1NTM1XHU1NTM2XHU1NTM4XHU1NTM5XHU1NTNBXHU1NTNCXHU1NTNEXHU1NTQwXHU1NTQyXHU1NTQ1XHU1NTQ3XHU1NTQ4XHU1NTRCXCIsNCxcIlx1NTU1MVx1NTU1Mlx1NTU1M1x1NTU1NFx1NTU1N1wiLDQsXCJcdTU1NURcdTU1NUVcdTU1NUZcdTU1NjBcdTU1NjJcdTU1NjNcdTU1NjhcdTU1NjlcdTU1NkJcdTU1NkZcIiw1LFwiXHU1NTc5XHU1NTdBXHU1NTdEXHU1NTdGXHU1NTg1XHU1NTg2XHU1NThDXHU1NThEXHU1NThFXHU1NTkwXHU1NTkyXHU1NTkzXHU1NTk1XHU1NTk2XHU1NTk3XHU1NTlBXHU1NTlCXHU1NTlFXHU1NUEwXCIsNixcIlx1NTVBOFwiLDgsXCJcdTU1QjJcdTU1QjRcdTU1QjZcdTU1QjhcdTU1QkFcdTU1QkNcdTU1QkZcIiw0LFwiXHU1NUM2XHU1NUM3XHU1NUM4XHU1NUNBXHU1NUNCXHU1NUNFXHU1NUNGXHU1NUQwXHU1NUQ1XHU1NUQ3XCIsNCxcIlx1NTVERVx1NTVFMFx1NTVFMlx1NTVFN1x1NTVFOVx1NTVFRFx1NTVFRVx1NTVGMFx1NTVGMVx1NTVGNFx1NTVGNlx1NTVGOFwiLDQsXCJcdTU1RkZcdTU2MDJcdTU2MDNcdTU2MDRcdTU2MDVcIl0sXG5bXCI4NzQwXCIsXCJcdTU2MDZcdTU2MDdcdTU2MEFcdTU2MEJcdTU2MERcdTU2MTBcIiw3LFwiXHU1NjE5XHU1NjFBXHU1NjFDXHU1NjFEXHU1NjIwXHU1NjIxXHU1NjIyXHU1NjI1XHU1NjI2XHU1NjI4XHU1NjI5XHU1NjJBXHU1NjJCXHU1NjJFXHU1NjJGXHU1NjMwXHU1NjMzXHU1NjM1XHU1NjM3XHU1NjM4XHU1NjNBXHU1NjNDXHU1NjNEXHU1NjNFXHU1NjQwXCIsMTEsXCJcdTU2NEZcIiw0LFwiXHU1NjU1XHU1NjU2XHU1NjVBXHU1NjVCXHU1NjVEXCIsNF0sXG5bXCI4NzgwXCIsXCJcdTU2NjNcdTU2NjVcdTU2NjZcdTU2NjdcdTU2NkRcdTU2NkVcdTU2NkZcdTU2NzBcdTU2NzJcdTU2NzNcdTU2NzRcdTU2NzVcdTU2NzdcdTU2NzhcdTU2NzlcdTU2N0FcdTU2N0RcIiw3LFwiXHU1Njg3XCIsNixcIlx1NTY5MFx1NTY5MVx1NTY5Mlx1NTY5NFwiLDE0LFwiXHU1NkE0XCIsMTAsXCJcdTU2QjBcIiw2LFwiXHU1NkI4XHU1NkI5XHU1NkJBXHU1NkJCXHU1NkJEXCIsMTIsXCJcdTU2Q0JcIiw4LFwiXHU1NkQ1XHU1NkQ2XHU1NkQ4XHU1NkQ5XHU1NkRDXHU1NkUzXHU1NkU1XCIsNSxcIlx1NTZFQ1x1NTZFRVx1NTZFRlx1NTZGMlx1NTZGM1x1NTZGNlx1NTZGN1x1NTZGOFx1NTZGQlx1NTZGQ1x1NTcwMFx1NTcwMVx1NTcwMlx1NTcwNVx1NTcwN1x1NTcwQlwiLDZdLFxuW1wiODg0MFwiLFwiXHU1NzEyXCIsOSxcIlx1NTcxRFx1NTcxRVx1NTcyMFx1NTcyMVx1NTcyMlx1NTcyNFx1NTcyNVx1NTcyNlx1NTcyN1x1NTcyQlx1NTczMVx1NTczMlx1NTczNFwiLDQsXCJcdTU3M0NcdTU3M0RcdTU3M0ZcdTU3NDFcdTU3NDNcdTU3NDRcdTU3NDVcdTU3NDZcdTU3NDhcdTU3NDlcdTU3NEJcdTU3NTJcIiw0LFwiXHU1NzU4XHU1NzU5XHU1NzYyXHU1NzYzXHU1NzY1XHU1NzY3XHU1NzZDXHU1NzZFXHU1NzcwXHU1NzcxXHU1NzcyXHU1Nzc0XHU1Nzc1XHU1Nzc4XHU1Nzc5XHU1NzdBXHU1NzdEXHU1NzdFXHU1NzdGXHU1NzgwXCJdLFxuW1wiODg4MFwiLFwiXHU1NzgxXHU1Nzg3XHU1Nzg4XHU1Nzg5XHU1NzhBXHU1NzhEXCIsNCxcIlx1NTc5NFwiLDYsXCJcdTU3OUNcdTU3OURcdTU3OUVcdTU3OUZcdTU3QTVcdTU3QThcdTU3QUFcdTU3QUNcdTU3QUZcdTU3QjBcdTU3QjFcdTU3QjNcdTU3QjVcdTU3QjZcdTU3QjdcdTU3QjlcIiw4LFwiXHU1N0M0XCIsNixcIlx1NTdDQ1x1NTdDRFx1NTdEMFx1NTdEMVx1NTdEM1x1NTdENlx1NTdEN1x1NTdEQlx1NTdEQ1x1NTdERVx1NTdFMVx1NTdFMlx1NTdFM1x1NTdFNVwiLDcsXCJcdTU3RUVcdTU3RjBcdTU3RjFcdTU3RjJcdTU3RjNcdTU3RjVcdTU3RjZcdTU3RjdcdTU3RkJcdTU3RkNcdTU3RkVcdTU3RkZcdTU4MDFcdTU4MDNcdTU4MDRcdTU4MDVcdTU4MDhcdTU4MDlcdTU4MEFcdTU4MENcdTU4MEVcdTU4MEZcdTU4MTBcdTU4MTJcdTU4MTNcdTU4MTRcdTU4MTZcdTU4MTdcdTU4MThcdTU4MUFcdTU4MUJcdTU4MUNcdTU4MURcdTU4MUZcdTU4MjJcdTU4MjNcdTU4MjVcIiw0LFwiXHU1ODJCXCIsNCxcIlx1NTgzMVx1NTgzMlx1NTgzM1x1NTgzNFx1NTgzNlwiLDddLFxuW1wiODk0MFwiLFwiXHU1ODNFXCIsNSxcIlx1NTg0NVwiLDYsXCJcdTU4NEVcdTU4NEZcdTU4NTBcdTU4NTJcdTU4NTNcdTU4NTVcdTU4NTZcdTU4NTdcdTU4NTlcIiw0LFwiXHU1ODVGXCIsNSxcIlx1NTg2NlwiLDQsXCJcdTU4NkRcIiwxNixcIlx1NTg3Rlx1NTg4Mlx1NTg4NFx1NTg4Nlx1NTg4N1x1NTg4OFx1NTg4QVx1NTg4Qlx1NTg4Q1wiXSxcbltcIjg5ODBcIixcIlx1NTg4RFwiLDQsXCJcdTU4OTRcIiw0LFwiXHU1ODlCXHU1ODlDXHU1ODlEXHU1OEEwXCIsNyxcIlx1NThBQVwiLDE3LFwiXHU1OEJEXHU1OEJFXHU1OEJGXHU1OEMwXHU1OEMyXHU1OEMzXHU1OEM0XHU1OEM2XCIsMTAsXCJcdTU4RDJcdTU4RDNcdTU4RDRcdTU4RDZcIiwxMyxcIlx1NThFNVwiLDUsXCJcdTU4RURcdTU4RUZcdTU4RjFcdTU4RjJcdTU4RjRcdTU4RjVcdTU4RjdcdTU4RjhcdTU4RkFcIiw3LFwiXHU1OTAzXHU1OTA1XHU1OTA2XHU1OTA4XCIsNCxcIlx1NTkwRVx1NTkxMFx1NTkxMVx1NTkxMlx1NTkxM1x1NTkxN1x1NTkxOFx1NTkxQlx1NTkxRFx1NTkxRVx1NTkyMFx1NTkyMVx1NTkyMlx1NTkyM1x1NTkyNlx1NTkyOFx1NTkyQ1x1NTkzMFx1NTkzMlx1NTkzM1x1NTkzNVx1NTkzNlx1NTkzQlwiXSxcbltcIjhhNDBcIixcIlx1NTkzRFx1NTkzRVx1NTkzRlx1NTk0MFx1NTk0M1x1NTk0NVx1NTk0Nlx1NTk0QVx1NTk0Q1x1NTk0RFx1NTk1MFx1NTk1Mlx1NTk1M1x1NTk1OVx1NTk1QlwiLDQsXCJcdTU5NjFcdTU5NjNcdTU5NjRcdTU5NjZcIiwxMixcIlx1NTk3NVx1NTk3N1x1NTk3QVx1NTk3Qlx1NTk3Q1x1NTk3RVx1NTk3Rlx1NTk4MFx1NTk4NVx1NTk4OVx1NTk4Qlx1NTk4Q1x1NTk4RVx1NTk4Rlx1NTk5MFx1NTk5MVx1NTk5NFx1NTk5NVx1NTk5OFx1NTk5QVx1NTk5Qlx1NTk5Q1x1NTk5RFx1NTk5Rlx1NTlBMFx1NTlBMVx1NTlBMlx1NTlBNlwiXSxcbltcIjhhODBcIixcIlx1NTlBN1x1NTlBQ1x1NTlBRFx1NTlCMFx1NTlCMVx1NTlCM1wiLDUsXCJcdTU5QkFcdTU5QkNcdTU5QkRcdTU5QkZcIiw2LFwiXHU1OUM3XHU1OUM4XHU1OUM5XHU1OUNDXHU1OUNEXHU1OUNFXHU1OUNGXHU1OUQ1XHU1OUQ2XHU1OUQ5XHU1OURCXHU1OURFXCIsNCxcIlx1NTlFNFx1NTlFNlx1NTlFN1x1NTlFOVx1NTlFQVx1NTlFQlx1NTlFRFwiLDExLFwiXHU1OUZBXHU1OUZDXHU1OUZEXHU1OUZFXHU1QTAwXHU1QTAyXHU1QTBBXHU1QTBCXHU1QTBEXHU1QTBFXHU1QTBGXHU1QTEwXHU1QTEyXHU1QTE0XHU1QTE1XHU1QTE2XHU1QTE3XHU1QTE5XHU1QTFBXHU1QTFCXHU1QTFEXHU1QTFFXHU1QTIxXHU1QTIyXHU1QTI0XHU1QTI2XHU1QTI3XHU1QTI4XHU1QTJBXCIsNixcIlx1NUEzM1x1NUEzNVx1NUEzN1wiLDQsXCJcdTVBM0RcdTVBM0VcdTVBM0ZcdTVBNDFcIiw0LFwiXHU1QTQ3XHU1QTQ4XHU1QTRCXCIsOSxcIlx1NUE1Nlx1NUE1N1x1NUE1OFx1NUE1OVx1NUE1QlwiLDVdLFxuW1wiOGI0MFwiLFwiXHU1QTYxXHU1QTYzXHU1QTY0XHU1QTY1XHU1QTY2XHU1QTY4XHU1QTY5XHU1QTZCXCIsOCxcIlx1NUE3OFx1NUE3OVx1NUE3Qlx1NUE3Q1x1NUE3RFx1NUE3RVx1NUE4MFwiLDE3LFwiXHU1QTkzXCIsNixcIlx1NUE5Q1wiLDEzLFwiXHU1QUFCXHU1QUFDXCJdLFxuW1wiOGI4MFwiLFwiXHU1QUFEXCIsNCxcIlx1NUFCNFx1NUFCNlx1NUFCN1x1NUFCOVwiLDQsXCJcdTVBQkZcdTVBQzBcdTVBQzNcIiw1LFwiXHU1QUNBXHU1QUNCXHU1QUNEXCIsNCxcIlx1NUFEM1x1NUFENVx1NUFEN1x1NUFEOVx1NUFEQVx1NUFEQlx1NUFERFx1NUFERVx1NUFERlx1NUFFMlx1NUFFNFx1NUFFNVx1NUFFN1x1NUFFOFx1NUFFQVx1NUFFQ1wiLDQsXCJcdTVBRjJcIiwyMixcIlx1NUIwQVwiLDExLFwiXHU1QjE4XCIsMjUsXCJcdTVCMzNcdTVCMzVcdTVCMzZcdTVCMzhcIiw3LFwiXHU1QjQxXCIsNl0sXG5bXCI4YzQwXCIsXCJcdTVCNDhcIiw3LFwiXHU1QjUyXHU1QjU2XHU1QjVFXHU1QjYwXHU1QjYxXHU1QjY3XHU1QjY4XHU1QjZCXHU1QjZEXHU1QjZFXHU1QjZGXHU1QjcyXHU1Qjc0XHU1Qjc2XHU1Qjc3XHU1Qjc4XHU1Qjc5XHU1QjdCXHU1QjdDXHU1QjdFXHU1QjdGXHU1QjgyXHU1Qjg2XHU1QjhBXHU1QjhEXHU1QjhFXHU1QjkwXHU1QjkxXHU1QjkyXHU1Qjk0XHU1Qjk2XHU1QjlGXHU1QkE3XHU1QkE4XHU1QkE5XHU1QkFDXHU1QkFEXHU1QkFFXHU1QkFGXHU1QkIxXHU1QkIyXHU1QkI3XHU1QkJBXHU1QkJCXHU1QkJDXHU1QkMwXHU1QkMxXHU1QkMzXHU1QkM4XHU1QkM5XHU1QkNBXHU1QkNCXHU1QkNEXHU1QkNFXHU1QkNGXCJdLFxuW1wiOGM4MFwiLFwiXHU1QkQxXHU1QkQ0XCIsOCxcIlx1NUJFMFx1NUJFMlx1NUJFM1x1NUJFNlx1NUJFN1x1NUJFOVwiLDQsXCJcdTVCRUZcdTVCRjFcIiw2LFwiXHU1QkZEXHU1QkZFXHU1QzAwXHU1QzAyXHU1QzAzXHU1QzA1XHU1QzA3XHU1QzA4XHU1QzBCXHU1QzBDXHU1QzBEXHU1QzBFXHU1QzEwXHU1QzEyXHU1QzEzXHU1QzE3XHU1QzE5XHU1QzFCXHU1QzFFXHU1QzFGXHU1QzIwXHU1QzIxXHU1QzIzXHU1QzI2XHU1QzI4XHU1QzI5XHU1QzJBXHU1QzJCXHU1QzJEXHU1QzJFXHU1QzJGXHU1QzMwXHU1QzMyXHU1QzMzXHU1QzM1XHU1QzM2XHU1QzM3XHU1QzQzXHU1QzQ0XHU1QzQ2XHU1QzQ3XHU1QzRDXHU1QzREXHU1QzUyXHU1QzUzXHU1QzU0XHU1QzU2XHU1QzU3XHU1QzU4XHU1QzVBXHU1QzVCXHU1QzVDXHU1QzVEXHU1QzVGXHU1QzYyXHU1QzY0XHU1QzY3XCIsNixcIlx1NUM3MFx1NUM3MlwiLDYsXCJcdTVDN0JcdTVDN0NcdTVDN0RcdTVDN0VcdTVDODBcdTVDODNcIiw0LFwiXHU1Qzg5XHU1QzhBXHU1QzhCXHU1QzhFXHU1QzhGXHU1QzkyXHU1QzkzXHU1Qzk1XHU1QzlEXCIsNCxcIlx1NUNBNFwiLDRdLFxuW1wiOGQ0MFwiLFwiXHU1Q0FBXHU1Q0FFXHU1Q0FGXHU1Q0IwXHU1Q0IyXHU1Q0I0XHU1Q0I2XHU1Q0I5XHU1Q0JBXHU1Q0JCXHU1Q0JDXHU1Q0JFXHU1Q0MwXHU1Q0MyXHU1Q0MzXHU1Q0M1XCIsNSxcIlx1NUNDQ1wiLDUsXCJcdTVDRDNcIiw1LFwiXHU1Q0RBXCIsNixcIlx1NUNFMlx1NUNFM1x1NUNFN1x1NUNFOVx1NUNFQlx1NUNFQ1x1NUNFRVx1NUNFRlx1NUNGMVwiLDksXCJcdTVDRkNcIiw0XSxcbltcIjhkODBcIixcIlx1NUQwMVx1NUQwNFx1NUQwNVx1NUQwOFwiLDUsXCJcdTVEMEZcIiw0LFwiXHU1RDE1XHU1RDE3XHU1RDE4XHU1RDE5XHU1RDFBXHU1RDFDXHU1RDFEXHU1RDFGXCIsNCxcIlx1NUQyNVx1NUQyOFx1NUQyQVx1NUQyQlx1NUQyQ1x1NUQyRlwiLDQsXCJcdTVEMzVcIiw3LFwiXHU1RDNGXCIsNyxcIlx1NUQ0OFx1NUQ0OVx1NUQ0RFwiLDEwLFwiXHU1RDU5XHU1RDVBXHU1RDVDXHU1RDVFXCIsMTAsXCJcdTVENkFcdTVENkRcdTVENkVcdTVENzBcdTVENzFcdTVENzJcdTVENzNcdTVENzVcIiwxMixcIlx1NUQ4M1wiLDIxLFwiXHU1RDlBXHU1RDlCXHU1RDlDXHU1RDlFXHU1RDlGXHU1REEwXCJdLFxuW1wiOGU0MFwiLFwiXHU1REExXCIsMjEsXCJcdTVEQjhcIiwxMixcIlx1NURDNlwiLDYsXCJcdTVEQ0VcIiwxMixcIlx1NUREQ1x1NURERlx1NURFMFx1NURFM1x1NURFNFx1NURFQVx1NURFQ1x1NURFRFwiXSxcbltcIjhlODBcIixcIlx1NURGMFx1NURGNVx1NURGNlx1NURGOFwiLDQsXCJcdTVERkZcdTVFMDBcdTVFMDRcdTVFMDdcdTVFMDlcdTVFMEFcdTVFMEJcdTVFMERcdTVFMEVcdTVFMTJcdTVFMTNcdTVFMTdcdTVFMUVcIiw3LFwiXHU1RTI4XCIsNCxcIlx1NUUyRlx1NUUzMFx1NUUzMlwiLDQsXCJcdTVFMzlcdTVFM0FcdTVFM0VcdTVFM0ZcdTVFNDBcdTVFNDFcdTVFNDNcdTVFNDZcIiw1LFwiXHU1RTREXCIsNixcIlx1NUU1NlwiLDQsXCJcdTVFNUNcdTVFNURcdTVFNUZcdTVFNjBcdTVFNjNcIiwxNCxcIlx1NUU3NVx1NUU3N1x1NUU3OVx1NUU3RVx1NUU4MVx1NUU4Mlx1NUU4M1x1NUU4NVx1NUU4OFx1NUU4OVx1NUU4Q1x1NUU4RFx1NUU4RVx1NUU5Mlx1NUU5OFx1NUU5Qlx1NUU5RFx1NUVBMVx1NUVBMlx1NUVBM1x1NUVBNFx1NUVBOFwiLDQsXCJcdTVFQUVcIiw0LFwiXHU1RUI0XHU1RUJBXHU1RUJCXHU1RUJDXHU1RUJEXHU1RUJGXCIsNl0sXG5bXCI4ZjQwXCIsXCJcdTVFQzZcdTVFQzdcdTVFQzhcdTVFQ0JcIiw1LFwiXHU1RUQ0XHU1RUQ1XHU1RUQ3XHU1RUQ4XHU1RUQ5XHU1RURBXHU1RURDXCIsMTEsXCJcdTVFRTlcdTVFRUJcIiw4LFwiXHU1RUY1XHU1RUY4XHU1RUY5XHU1RUZCXHU1RUZDXHU1RUZEXHU1RjA1XHU1RjA2XHU1RjA3XHU1RjA5XHU1RjBDXHU1RjBEXHU1RjBFXHU1RjEwXHU1RjEyXHU1RjE0XHU1RjE2XHU1RjE5XHU1RjFBXHU1RjFDXHU1RjFEXHU1RjFFXHU1RjIxXHU1RjIyXHU1RjIzXHU1RjI0XCJdLFxuW1wiOGY4MFwiLFwiXHU1RjI4XHU1RjJCXHU1RjJDXHU1RjJFXHU1RjMwXHU1RjMyXCIsNixcIlx1NUYzQlx1NUYzRFx1NUYzRVx1NUYzRlx1NUY0MVwiLDE0LFwiXHU1RjUxXHU1RjU0XHU1RjU5XHU1RjVBXHU1RjVCXHU1RjVDXHU1RjVFXHU1RjVGXHU1RjYwXHU1RjYzXHU1RjY1XHU1RjY3XHU1RjY4XHU1RjZCXHU1RjZFXHU1RjZGXHU1RjcyXHU1Rjc0XHU1Rjc1XHU1Rjc2XHU1Rjc4XHU1RjdBXHU1RjdEXHU1RjdFXHU1RjdGXHU1RjgzXHU1Rjg2XHU1RjhEXHU1RjhFXHU1RjhGXHU1RjkxXHU1RjkzXHU1Rjk0XHU1Rjk2XHU1RjlBXHU1RjlCXHU1RjlEXHU1RjlFXHU1RjlGXHU1RkEwXHU1RkEyXCIsNSxcIlx1NUZBOVx1NUZBQlx1NUZBQ1x1NUZBRlwiLDUsXCJcdTVGQjZcdTVGQjhcdTVGQjlcdTVGQkFcdTVGQkJcdTVGQkVcIiw0LFwiXHU1RkM3XHU1RkM4XHU1RkNBXHU1RkNCXHU1RkNFXHU1RkQzXHU1RkQ0XHU1RkQ1XHU1RkRBXHU1RkRCXHU1RkRDXHU1RkRFXHU1RkRGXHU1RkUyXHU1RkUzXHU1RkU1XHU1RkU2XHU1RkU4XHU1RkU5XHU1RkVDXHU1RkVGXHU1RkYwXHU1RkYyXHU1RkYzXHU1RkY0XHU1RkY2XHU1RkY3XHU1RkY5XHU1RkZBXHU1RkZDXHU2MDA3XCJdLFxuW1wiOTA0MFwiLFwiXHU2MDA4XHU2MDA5XHU2MDBCXHU2MDBDXHU2MDEwXHU2MDExXHU2MDEzXHU2MDE3XHU2MDE4XHU2MDFBXHU2MDFFXHU2MDFGXHU2MDIyXHU2MDIzXHU2MDI0XHU2MDJDXHU2MDJEXHU2MDJFXHU2MDMwXCIsNCxcIlx1NjAzNlwiLDQsXCJcdTYwM0RcdTYwM0VcdTYwNDBcdTYwNDRcIiw2LFwiXHU2MDRDXHU2MDRFXHU2MDRGXHU2MDUxXHU2MDUzXHU2MDU0XHU2MDU2XHU2MDU3XHU2MDU4XHU2MDVCXHU2MDVDXHU2MDVFXHU2MDVGXHU2MDYwXHU2MDYxXHU2MDY1XHU2MDY2XHU2MDZFXHU2MDcxXHU2MDcyXHU2MDc0XHU2MDc1XHU2MDc3XHU2MDdFXHU2MDgwXCJdLFxuW1wiOTA4MFwiLFwiXHU2MDgxXHU2MDgyXHU2MDg1XHU2MDg2XHU2MDg3XHU2MDg4XHU2MDhBXHU2MDhCXHU2MDhFXHU2MDhGXHU2MDkwXHU2MDkxXHU2MDkzXHU2MDk1XHU2MDk3XHU2MDk4XHU2MDk5XHU2MDlDXHU2MDlFXHU2MEExXHU2MEEyXHU2MEE0XHU2MEE1XHU2MEE3XHU2MEE5XHU2MEFBXHU2MEFFXHU2MEIwXHU2MEIzXHU2MEI1XHU2MEI2XHU2MEI3XHU2MEI5XHU2MEJBXHU2MEJEXCIsNyxcIlx1NjBDN1x1NjBDOFx1NjBDOVx1NjBDQ1wiLDQsXCJcdTYwRDJcdTYwRDNcdTYwRDRcdTYwRDZcdTYwRDdcdTYwRDlcdTYwREJcdTYwREVcdTYwRTFcIiw0LFwiXHU2MEVBXHU2MEYxXHU2MEYyXHU2MEY1XHU2MEY3XHU2MEY4XHU2MEZCXCIsNCxcIlx1NjEwMlx1NjEwM1x1NjEwNFx1NjEwNVx1NjEwN1x1NjEwQVx1NjEwQlx1NjEwQ1x1NjExMFwiLDQsXCJcdTYxMTZcdTYxMTdcdTYxMThcdTYxMTlcdTYxMUJcdTYxMUNcdTYxMURcdTYxMUVcdTYxMjFcdTYxMjJcdTYxMjVcdTYxMjhcdTYxMjlcdTYxMkFcdTYxMkNcIiwxOCxcIlx1NjE0MFwiLDZdLFxuW1wiOTE0MFwiLFwiXHU2MTQ3XHU2MTQ5XHU2MTRCXHU2MTREXHU2MTRGXHU2MTUwXHU2MTUyXHU2MTUzXHU2MTU0XHU2MTU2XCIsNixcIlx1NjE1RVx1NjE1Rlx1NjE2MFx1NjE2MVx1NjE2M1x1NjE2NFx1NjE2NVx1NjE2Nlx1NjE2OVwiLDYsXCJcdTYxNzFcdTYxNzJcdTYxNzNcdTYxNzRcdTYxNzZcdTYxNzhcIiwxOCxcIlx1NjE4Q1x1NjE4RFx1NjE4RlwiLDQsXCJcdTYxOTVcIl0sXG5bXCI5MTgwXCIsXCJcdTYxOTZcIiw2LFwiXHU2MTlFXCIsOCxcIlx1NjFBQVx1NjFBQlx1NjFBRFwiLDksXCJcdTYxQjhcIiw1LFwiXHU2MUJGXHU2MUMwXHU2MUMxXHU2MUMzXCIsNCxcIlx1NjFDOVx1NjFDQ1wiLDQsXCJcdTYxRDNcdTYxRDVcIiwxNixcIlx1NjFFN1wiLDEzLFwiXHU2MUY2XCIsOCxcIlx1NjIwMFwiLDUsXCJcdTYyMDdcdTYyMDlcdTYyMTNcdTYyMTRcdTYyMTlcdTYyMUNcdTYyMURcdTYyMUVcdTYyMjBcdTYyMjNcdTYyMjZcdTYyMjdcdTYyMjhcdTYyMjlcdTYyMkJcdTYyMkRcdTYyMkZcdTYyMzBcdTYyMzFcdTYyMzJcdTYyMzVcdTYyMzZcdTYyMzhcIiw0LFwiXHU2MjQyXHU2MjQ0XHU2MjQ1XHU2MjQ2XHU2MjRBXCJdLFxuW1wiOTI0MFwiLFwiXHU2MjRGXHU2MjUwXHU2MjU1XHU2MjU2XHU2MjU3XHU2MjU5XHU2MjVBXHU2MjVDXCIsNixcIlx1NjI2NFx1NjI2NVx1NjI2OFx1NjI3MVx1NjI3Mlx1NjI3NFx1NjI3NVx1NjI3N1x1NjI3OFx1NjI3QVx1NjI3Qlx1NjI3RFx1NjI4MVx1NjI4Mlx1NjI4M1x1NjI4NVx1NjI4Nlx1NjI4N1x1NjI4OFx1NjI4QlwiLDUsXCJcdTYyOTRcdTYyOTlcdTYyOUNcdTYyOURcdTYyOUVcdTYyQTNcdTYyQTZcdTYyQTdcdTYyQTlcdTYyQUFcdTYyQURcdTYyQUVcdTYyQUZcdTYyQjBcdTYyQjJcdTYyQjNcdTYyQjRcdTYyQjZcdTYyQjdcdTYyQjhcdTYyQkFcdTYyQkVcdTYyQzBcdTYyQzFcIl0sXG5bXCI5MjgwXCIsXCJcdTYyQzNcdTYyQ0JcdTYyQ0ZcdTYyRDFcdTYyRDVcdTYyRERcdTYyREVcdTYyRTBcdTYyRTFcdTYyRTRcdTYyRUFcdTYyRUJcdTYyRjBcdTYyRjJcdTYyRjVcdTYyRjhcdTYyRjlcdTYyRkFcdTYyRkJcdTYzMDBcdTYzMDNcdTYzMDRcdTYzMDVcdTYzMDZcdTYzMEFcdTYzMEJcdTYzMENcdTYzMERcdTYzMEZcdTYzMTBcdTYzMTJcdTYzMTNcdTYzMTRcdTYzMTVcdTYzMTdcdTYzMThcdTYzMTlcdTYzMUNcdTYzMjZcdTYzMjdcdTYzMjlcdTYzMkNcdTYzMkRcdTYzMkVcdTYzMzBcdTYzMzFcdTYzMzNcIiw1LFwiXHU2MzNCXHU2MzNDXHU2MzNFXHU2MzNGXHU2MzQwXHU2MzQxXHU2MzQ0XHU2MzQ3XHU2MzQ4XHU2MzRBXHU2MzUxXHU2MzUyXHU2MzUzXHU2MzU0XHU2MzU2XCIsNyxcIlx1NjM2MFx1NjM2NFx1NjM2NVx1NjM2Nlx1NjM2OFx1NjM2QVx1NjM2Qlx1NjM2Q1x1NjM2Rlx1NjM3MFx1NjM3Mlx1NjM3M1x1NjM3NFx1NjM3NVx1NjM3OFx1NjM3OVx1NjM3Q1x1NjM3RFx1NjM3RVx1NjM3Rlx1NjM4MVx1NjM4M1x1NjM4NFx1NjM4NVx1NjM4Nlx1NjM4Qlx1NjM4RFx1NjM5MVx1NjM5M1x1NjM5NFx1NjM5NVx1NjM5N1x1NjM5OVwiLDYsXCJcdTYzQTFcdTYzQTRcdTYzQTZcdTYzQUJcdTYzQUZcdTYzQjFcdTYzQjJcdTYzQjVcdTYzQjZcdTYzQjlcdTYzQkJcdTYzQkRcdTYzQkZcdTYzQzBcIl0sXG5bXCI5MzQwXCIsXCJcdTYzQzFcdTYzQzJcdTYzQzNcdTYzQzVcdTYzQzdcdTYzQzhcdTYzQ0FcdTYzQ0JcdTYzQ0NcdTYzRDFcdTYzRDNcdTYzRDRcdTYzRDVcdTYzRDdcIiw2LFwiXHU2M0RGXHU2M0UyXHU2M0U0XCIsNCxcIlx1NjNFQlx1NjNFQ1x1NjNFRVx1NjNFRlx1NjNGMFx1NjNGMVx1NjNGM1x1NjNGNVx1NjNGN1x1NjNGOVx1NjNGQVx1NjNGQlx1NjNGQ1x1NjNGRVx1NjQwM1x1NjQwNFx1NjQwNlwiLDQsXCJcdTY0MERcdTY0MEVcdTY0MTFcdTY0MTJcdTY0MTVcIiw1LFwiXHU2NDFEXHU2NDFGXHU2NDIyXHU2NDIzXHU2NDI0XCJdLFxuW1wiOTM4MFwiLFwiXHU2NDI1XHU2NDI3XHU2NDI4XHU2NDI5XHU2NDJCXHU2NDJFXCIsNSxcIlx1NjQzNVwiLDQsXCJcdTY0M0JcdTY0M0NcdTY0M0VcdTY0NDBcdTY0NDJcdTY0NDNcdTY0NDlcdTY0NEJcIiw2LFwiXHU2NDUzXHU2NDU1XHU2NDU2XHU2NDU3XHU2NDU5XCIsNCxcIlx1NjQ1RlwiLDcsXCJcdTY0NjhcdTY0NkFcdTY0NkJcdTY0NkNcdTY0NkVcIiw5LFwiXHU2NDdCXCIsNixcIlx1NjQ4M1x1NjQ4Nlx1NjQ4OFwiLDgsXCJcdTY0OTNcdTY0OTRcdTY0OTdcdTY0OThcdTY0OUFcdTY0OUJcdTY0OUNcdTY0OURcdTY0OUZcIiw0LFwiXHU2NEE1XHU2NEE2XHU2NEE3XHU2NEE4XHU2NEFBXHU2NEFCXHU2NEFGXHU2NEIxXHU2NEIyXHU2NEIzXHU2NEI0XHU2NEI2XHU2NEI5XHU2NEJCXHU2NEJEXHU2NEJFXHU2NEJGXHU2NEMxXHU2NEMzXHU2NEM0XHU2NEM2XCIsNixcIlx1NjRDRlx1NjREMVx1NjREM1x1NjRENFx1NjRENVx1NjRENlx1NjREOVx1NjREQVwiXSxcbltcIjk0NDBcIixcIlx1NjREQlx1NjREQ1x1NjRERFx1NjRERlx1NjRFMFx1NjRFMVx1NjRFM1x1NjRFNVx1NjRFN1wiLDI0LFwiXHU2NTAxXCIsNyxcIlx1NjUwQVwiLDcsXCJcdTY1MTNcIiw0LFwiXHU2NTE5XCIsOF0sXG5bXCI5NDgwXCIsXCJcdTY1MjJcdTY1MjNcdTY1MjRcdTY1MjZcIiw0LFwiXHU2NTJDXHU2NTJEXHU2NTMwXHU2NTMxXHU2NTMyXHU2NTMzXHU2NTM3XHU2NTNBXHU2NTNDXHU2NTNEXHU2NTQwXCIsNCxcIlx1NjU0Nlx1NjU0N1x1NjU0QVx1NjU0Qlx1NjU0RFx1NjU0RVx1NjU1MFx1NjU1Mlx1NjU1M1x1NjU1NFx1NjU1N1x1NjU1OFx1NjU1QVx1NjU1Q1x1NjU1Rlx1NjU2MFx1NjU2MVx1NjU2NFx1NjU2NVx1NjU2N1x1NjU2OFx1NjU2OVx1NjU2QVx1NjU2RFx1NjU2RVx1NjU2Rlx1NjU3MVx1NjU3M1x1NjU3NVx1NjU3Nlx1NjU3OFwiLDE0LFwiXHU2NTg4XHU2NTg5XHU2NThBXHU2NThEXHU2NThFXHU2NThGXHU2NTkyXHU2NTk0XHU2NTk1XHU2NTk2XHU2NTk4XHU2NTlBXHU2NTlEXHU2NTlFXHU2NUEwXHU2NUEyXHU2NUEzXHU2NUE2XHU2NUE4XHU2NUFBXHU2NUFDXHU2NUFFXHU2NUIxXCIsNyxcIlx1NjVCQVx1NjVCQlx1NjVCRVx1NjVCRlx1NjVDMFx1NjVDMlx1NjVDN1x1NjVDOFx1NjVDOVx1NjVDQVx1NjVDRFx1NjVEMFx1NjVEMVx1NjVEM1x1NjVENFx1NjVENVx1NjVEOFwiLDcsXCJcdTY1RTFcdTY1RTNcdTY1RTRcdTY1RUFcdTY1RUJcIl0sXG5bXCI5NTQwXCIsXCJcdTY1RjJcdTY1RjNcdTY1RjRcdTY1RjVcdTY1RjhcdTY1RjlcdTY1RkJcIiw0LFwiXHU2NjAxXHU2NjA0XHU2NjA1XHU2NjA3XHU2NjA4XHU2NjA5XHU2NjBCXHU2NjBEXHU2NjEwXHU2NjExXHU2NjEyXHU2NjE2XHU2NjE3XHU2NjE4XHU2NjFBXHU2NjFCXHU2NjFDXHU2NjFFXHU2NjIxXHU2NjIyXHU2NjIzXHU2NjI0XHU2NjI2XHU2NjI5XHU2NjJBXHU2NjJCXHU2NjJDXHU2NjJFXHU2NjMwXHU2NjMyXHU2NjMzXHU2NjM3XCIsNCxcIlx1NjYzRFx1NjYzRlx1NjY0MFx1NjY0Mlx1NjY0NFwiLDYsXCJcdTY2NERcdTY2NEVcdTY2NTBcdTY2NTFcdTY2NThcIl0sXG5bXCI5NTgwXCIsXCJcdTY2NTlcdTY2NUJcdTY2NUNcdTY2NURcdTY2NUVcdTY2NjBcdTY2NjJcdTY2NjNcdTY2NjVcdTY2NjdcdTY2NjlcIiw0LFwiXHU2NjcxXHU2NjcyXHU2NjczXHU2Njc1XHU2Njc4XHU2Njc5XHU2NjdCXHU2NjdDXHU2NjdEXHU2NjdGXHU2NjgwXHU2NjgxXHU2NjgzXHU2Njg1XHU2Njg2XHU2Njg4XHU2Njg5XHU2NjhBXHU2NjhCXHU2NjhEXHU2NjhFXHU2NjhGXHU2NjkwXHU2NjkyXHU2NjkzXHU2Njk0XHU2Njk1XHU2Njk4XCIsNCxcIlx1NjY5RVwiLDgsXCJcdTY2QTlcIiw0LFwiXHU2NkFGXCIsNCxcIlx1NjZCNVx1NjZCNlx1NjZCN1x1NjZCOFx1NjZCQVx1NjZCQlx1NjZCQ1x1NjZCRFx1NjZCRlwiLDI1LFwiXHU2NkRBXHU2NkRFXCIsNyxcIlx1NjZFN1x1NjZFOFx1NjZFQVwiLDUsXCJcdTY2RjFcdTY2RjVcdTY2RjZcdTY2RjhcdTY2RkFcdTY2RkJcdTY2RkRcdTY3MDFcdTY3MDJcdTY3MDNcIl0sXG5bXCI5NjQwXCIsXCJcdTY3MDRcdTY3MDVcdTY3MDZcdTY3MDdcdTY3MENcdTY3MEVcdTY3MEZcdTY3MTFcdTY3MTJcdTY3MTNcdTY3MTZcdTY3MThcdTY3MTlcdTY3MUFcdTY3MUNcdTY3MUVcdTY3MjBcIiw1LFwiXHU2NzI3XHU2NzI5XHU2NzJFXHU2NzMwXHU2NzMyXHU2NzMzXHU2NzM2XHU2NzM3XHU2NzM4XHU2NzM5XHU2NzNCXHU2NzNDXHU2NzNFXHU2NzNGXHU2NzQxXHU2NzQ0XHU2NzQ1XHU2NzQ3XHU2NzRBXHU2NzRCXHU2NzREXHU2NzUyXHU2NzU0XHU2NzU1XHU2NzU3XCIsNCxcIlx1Njc1RFx1Njc2Mlx1Njc2M1x1Njc2NFx1Njc2Nlx1Njc2N1x1Njc2Qlx1Njc2Q1x1Njc2RVx1Njc3MVx1Njc3NFx1Njc3NlwiXSxcbltcIjk2ODBcIixcIlx1Njc3OFx1Njc3OVx1Njc3QVx1Njc3Qlx1Njc3RFx1Njc4MFx1Njc4Mlx1Njc4M1x1Njc4NVx1Njc4Nlx1Njc4OFx1Njc4QVx1Njc4Q1x1Njc4RFx1Njc4RVx1Njc4Rlx1Njc5MVx1Njc5Mlx1Njc5M1x1Njc5NFx1Njc5Nlx1Njc5OVx1Njc5Qlx1Njc5Rlx1NjdBMFx1NjdBMVx1NjdBNFx1NjdBNlx1NjdBOVx1NjdBQ1x1NjdBRVx1NjdCMVx1NjdCMlx1NjdCNFx1NjdCOVwiLDcsXCJcdTY3QzJcdTY3QzVcIiw5LFwiXHU2N0Q1XHU2N0Q2XHU2N0Q3XHU2N0RCXHU2N0RGXHU2N0UxXHU2N0UzXHU2N0U0XHU2N0U2XHU2N0U3XHU2N0U4XHU2N0VBXHU2N0VCXHU2N0VEXHU2N0VFXHU2N0YyXHU2N0Y1XCIsNyxcIlx1NjdGRVx1NjgwMVx1NjgwMlx1NjgwM1x1NjgwNFx1NjgwNlx1NjgwRFx1NjgxMFx1NjgxMlx1NjgxNFx1NjgxNVx1NjgxOFwiLDQsXCJcdTY4MUVcdTY4MUZcdTY4MjBcdTY4MjJcIiw2LFwiXHU2ODJCXCIsNixcIlx1NjgzNFx1NjgzNVx1NjgzNlx1NjgzQVx1NjgzQlx1NjgzRlx1Njg0N1x1Njg0Qlx1Njg0RFx1Njg0Rlx1Njg1Mlx1Njg1NlwiLDVdLFxuW1wiOTc0MFwiLFwiXHU2ODVDXHU2ODVEXHU2ODVFXHU2ODVGXHU2ODZBXHU2ODZDXCIsNyxcIlx1Njg3NVx1Njg3OFwiLDgsXCJcdTY4ODJcdTY4ODRcdTY4ODdcIiw3LFwiXHU2ODkwXHU2ODkxXHU2ODkyXHU2ODk0XHU2ODk1XHU2ODk2XHU2ODk4XCIsOSxcIlx1NjhBM1x1NjhBNFx1NjhBNVx1NjhBOVx1NjhBQVx1NjhBQlx1NjhBQ1x1NjhBRVx1NjhCMVx1NjhCMlx1NjhCNFx1NjhCNlx1NjhCN1x1NjhCOFwiXSxcbltcIjk3ODBcIixcIlx1NjhCOVwiLDYsXCJcdTY4QzFcdTY4QzNcIiw1LFwiXHU2OENBXHU2OENDXHU2OENFXHU2OENGXHU2OEQwXHU2OEQxXHU2OEQzXHU2OEQ0XHU2OEQ2XHU2OEQ3XHU2OEQ5XHU2OERCXCIsNCxcIlx1NjhFMVx1NjhFMlx1NjhFNFwiLDksXCJcdTY4RUZcdTY4RjJcdTY4RjNcdTY4RjRcdTY4RjZcdTY4RjdcdTY4RjhcdTY4RkJcdTY4RkRcdTY4RkVcdTY4RkZcdTY5MDBcdTY5MDJcdTY5MDNcdTY5MDRcdTY5MDZcIiw0LFwiXHU2OTBDXHU2OTBGXHU2OTExXHU2OTEzXCIsMTEsXCJcdTY5MjFcdTY5MjJcdTY5MjNcdTY5MjVcIiw3LFwiXHU2OTJFXHU2OTJGXHU2OTMxXHU2OTMyXHU2OTMzXHU2OTM1XHU2OTM2XHU2OTM3XHU2OTM4XHU2OTNBXHU2OTNCXHU2OTNDXHU2OTNFXHU2OTQwXHU2OTQxXHU2OTQzXCIsMTYsXCJcdTY5NTVcdTY5NTZcdTY5NThcdTY5NTlcdTY5NUJcdTY5NUNcdTY5NUZcIl0sXG5bXCI5ODQwXCIsXCJcdTY5NjFcdTY5NjJcdTY5NjRcdTY5NjVcdTY5NjdcdTY5NjhcdTY5NjlcdTY5NkFcdTY5NkNcdTY5NkRcdTY5NkZcdTY5NzBcdTY5NzJcIiw0LFwiXHU2OTdBXHU2OTdCXHU2OTdEXHU2OTdFXHU2OTdGXHU2OTgxXHU2OTgzXHU2OTg1XHU2OThBXHU2OThCXHU2OThDXHU2OThFXCIsNSxcIlx1Njk5Nlx1Njk5N1x1Njk5OVx1Njk5QVx1Njk5RFwiLDksXCJcdTY5QTlcdTY5QUFcdTY5QUNcdTY5QUVcdTY5QUZcdTY5QjBcdTY5QjJcdTY5QjNcdTY5QjVcdTY5QjZcdTY5QjhcdTY5QjlcdTY5QkFcdTY5QkNcdTY5QkRcIl0sXG5bXCI5ODgwXCIsXCJcdTY5QkVcdTY5QkZcdTY5QzBcdTY5QzJcIiw3LFwiXHU2OUNCXHU2OUNEXHU2OUNGXHU2OUQxXHU2OUQyXHU2OUQzXHU2OUQ1XCIsNSxcIlx1NjlEQ1x1NjlERFx1NjlERVx1NjlFMVwiLDExLFwiXHU2OUVFXHU2OUVGXHU2OUYwXHU2OUYxXHU2OUYzXCIsOSxcIlx1NjlGRVx1NkEwMFwiLDksXCJcdTZBMEJcIiwxMSxcIlx1NkExOVwiLDUsXCJcdTZBMjBcdTZBMjJcIiw1LFwiXHU2QTI5XHU2QTJCXHU2QTJDXHU2QTJEXHU2QTJFXHU2QTMwXHU2QTMyXHU2QTMzXHU2QTM0XHU2QTM2XCIsNixcIlx1NkEzRlwiLDQsXCJcdTZBNDVcdTZBNDZcdTZBNDhcIiw3LFwiXHU2QTUxXCIsNixcIlx1NkE1QVwiXSxcbltcIjk5NDBcIixcIlx1NkE1Q1wiLDQsXCJcdTZBNjJcdTZBNjNcdTZBNjRcdTZBNjZcIiwxMCxcIlx1NkE3MlwiLDYsXCJcdTZBN0FcdTZBN0JcdTZBN0RcdTZBN0VcdTZBN0ZcdTZBODFcdTZBODJcdTZBODNcdTZBODVcIiw4LFwiXHU2QThGXHU2QTkyXCIsNCxcIlx1NkE5OFwiLDcsXCJcdTZBQTFcIiw1XSxcbltcIjk5ODBcIixcIlx1NkFBN1x1NkFBOFx1NkFBQVx1NkFBRFwiLDExNCxcIlx1NkIyNVx1NkIyNlx1NkIyOFwiLDZdLFxuW1wiOWE0MFwiLFwiXHU2QjJGXHU2QjMwXHU2QjMxXHU2QjMzXHU2QjM0XHU2QjM1XHU2QjM2XHU2QjM4XHU2QjNCXHU2QjNDXHU2QjNEXHU2QjNGXHU2QjQwXHU2QjQxXHU2QjQyXHU2QjQ0XHU2QjQ1XHU2QjQ4XHU2QjRBXHU2QjRCXHU2QjREXCIsMTEsXCJcdTZCNUFcIiw3LFwiXHU2QjY4XHU2QjY5XHU2QjZCXCIsMTMsXCJcdTZCN0FcdTZCN0RcdTZCN0VcdTZCN0ZcdTZCODBcdTZCODVcdTZCODhcIl0sXG5bXCI5YTgwXCIsXCJcdTZCOENcdTZCOEVcdTZCOEZcdTZCOTBcdTZCOTFcdTZCOTRcdTZCOTVcdTZCOTdcdTZCOThcdTZCOTlcdTZCOUNcIiw0LFwiXHU2QkEyXCIsNyxcIlx1NkJBQlwiLDcsXCJcdTZCQjZcdTZCQjhcIiw2LFwiXHU2QkMwXHU2QkMzXHU2QkM0XHU2QkM2XCIsNCxcIlx1NkJDQ1x1NkJDRVx1NkJEMFx1NkJEMVx1NkJEOFx1NkJEQVx1NkJEQ1wiLDQsXCJcdTZCRTJcIiw3LFwiXHU2QkVDXHU2QkVEXHU2QkVFXHU2QkYwXHU2QkYxXHU2QkYyXHU2QkY0XHU2QkY2XHU2QkY3XHU2QkY4XHU2QkZBXHU2QkZCXHU2QkZDXHU2QkZFXCIsNixcIlx1NkMwOFwiLDQsXCJcdTZDMEVcdTZDMTJcdTZDMTdcdTZDMUNcdTZDMURcdTZDMUVcdTZDMjBcdTZDMjNcdTZDMjVcdTZDMkJcdTZDMkNcdTZDMkRcdTZDMzFcdTZDMzNcdTZDMzZcdTZDMzdcdTZDMzlcdTZDM0FcdTZDM0JcdTZDM0NcdTZDM0VcdTZDM0ZcdTZDNDNcdTZDNDRcdTZDNDVcdTZDNDhcdTZDNEJcIiw0LFwiXHU2QzUxXHU2QzUyXHU2QzUzXHU2QzU2XHU2QzU4XCJdLFxuW1wiOWI0MFwiLFwiXHU2QzU5XHU2QzVBXHU2QzYyXHU2QzYzXHU2QzY1XHU2QzY2XHU2QzY3XHU2QzZCXCIsNCxcIlx1NkM3MVx1NkM3M1x1NkM3NVx1NkM3N1x1NkM3OFx1NkM3QVx1NkM3Qlx1NkM3Q1x1NkM3Rlx1NkM4MFx1NkM4NFx1NkM4N1x1NkM4QVx1NkM4Qlx1NkM4RFx1NkM4RVx1NkM5MVx1NkM5Mlx1NkM5NVx1NkM5Nlx1NkM5N1x1NkM5OFx1NkM5QVx1NkM5Q1x1NkM5RFx1NkM5RVx1NkNBMFx1NkNBMlx1NkNBOFx1NkNBQ1x1NkNBRlx1NkNCMFx1NkNCNFx1NkNCNVx1NkNCNlx1NkNCN1x1NkNCQVx1NkNDMFx1NkNDMVx1NkNDMlx1NkNDM1x1NkNDNlx1NkNDN1x1NkNDOFx1NkNDQlx1NkNDRFx1NkNDRVx1NkNDRlx1NkNEMVx1NkNEMlx1NkNEOFwiXSxcbltcIjliODBcIixcIlx1NkNEOVx1NkNEQVx1NkNEQ1x1NkNERFx1NkNERlx1NkNFNFx1NkNFNlx1NkNFN1x1NkNFOVx1NkNFQ1x1NkNFRFx1NkNGMlx1NkNGNFx1NkNGOVx1NkNGRlx1NkQwMFx1NkQwMlx1NkQwM1x1NkQwNVx1NkQwNlx1NkQwOFx1NkQwOVx1NkQwQVx1NkQwRFx1NkQwRlx1NkQxMFx1NkQxMVx1NkQxM1x1NkQxNFx1NkQxNVx1NkQxNlx1NkQxOFx1NkQxQ1x1NkQxRFx1NkQxRlwiLDUsXCJcdTZEMjZcdTZEMjhcdTZEMjlcdTZEMkNcdTZEMkRcdTZEMkZcdTZEMzBcdTZEMzRcdTZEMzZcdTZEMzdcdTZEMzhcdTZEM0FcdTZEM0ZcdTZENDBcdTZENDJcdTZENDRcdTZENDlcdTZENENcdTZENTBcdTZENTVcdTZENTZcdTZENTdcdTZENThcdTZENUJcdTZENURcdTZENUZcdTZENjFcdTZENjJcdTZENjRcdTZENjVcdTZENjdcdTZENjhcdTZENkJcdTZENkNcdTZENkRcdTZENzBcdTZENzFcdTZENzJcdTZENzNcdTZENzVcdTZENzZcdTZENzlcdTZEN0FcdTZEN0JcdTZEN0RcIiw0LFwiXHU2RDgzXHU2RDg0XHU2RDg2XHU2RDg3XHU2RDhBXHU2RDhCXHU2RDhEXHU2RDhGXHU2RDkwXHU2RDkyXHU2RDk2XCIsNCxcIlx1NkQ5Q1x1NkRBMlx1NkRBNVx1NkRBQ1x1NkRBRFx1NkRCMFx1NkRCMVx1NkRCM1x1NkRCNFx1NkRCNlx1NkRCN1x1NkRCOVwiLDUsXCJcdTZEQzFcdTZEQzJcdTZEQzNcdTZEQzhcdTZEQzlcdTZEQ0FcIl0sXG5bXCI5YzQwXCIsXCJcdTZEQ0RcdTZEQ0VcdTZEQ0ZcdTZERDBcdTZERDJcdTZERDNcdTZERDRcdTZERDVcdTZERDdcdTZEREFcdTZEREJcdTZERENcdTZEREZcdTZERTJcdTZERTNcdTZERTVcdTZERTdcdTZERThcdTZERTlcdTZERUFcdTZERURcdTZERUZcdTZERjBcdTZERjJcdTZERjRcdTZERjVcdTZERjZcdTZERjhcdTZERkFcdTZERkRcIiw3LFwiXHU2RTA2XHU2RTA3XHU2RTA4XHU2RTA5XHU2RTBCXHU2RTBGXHU2RTEyXHU2RTEzXHU2RTE1XHU2RTE4XHU2RTE5XHU2RTFCXHU2RTFDXHU2RTFFXHU2RTFGXHU2RTIyXHU2RTI2XHU2RTI3XHU2RTI4XHU2RTJBXHU2RTJDXHU2RTJFXHU2RTMwXHU2RTMxXHU2RTMzXHU2RTM1XCJdLFxuW1wiOWM4MFwiLFwiXHU2RTM2XHU2RTM3XHU2RTM5XHU2RTNCXCIsNyxcIlx1NkU0NVwiLDcsXCJcdTZFNEZcdTZFNTBcdTZFNTFcdTZFNTJcdTZFNTVcdTZFNTdcdTZFNTlcdTZFNUFcdTZFNUNcdTZFNURcdTZFNUVcdTZFNjBcIiwxMCxcIlx1NkU2Q1x1NkU2RFx1NkU2RlwiLDE0LFwiXHU2RTgwXHU2RTgxXHU2RTgyXHU2RTg0XHU2RTg3XHU2RTg4XHU2RThBXCIsNCxcIlx1NkU5MVwiLDYsXCJcdTZFOTlcdTZFOUFcdTZFOUJcdTZFOURcdTZFOUVcdTZFQTBcdTZFQTFcdTZFQTNcdTZFQTRcdTZFQTZcdTZFQThcdTZFQTlcdTZFQUJcdTZFQUNcdTZFQURcdTZFQUVcdTZFQjBcdTZFQjNcdTZFQjVcdTZFQjhcdTZFQjlcdTZFQkNcdTZFQkVcdTZFQkZcdTZFQzBcdTZFQzNcdTZFQzRcdTZFQzVcdTZFQzZcdTZFQzhcdTZFQzlcdTZFQ0FcdTZFQ0NcdTZFQ0RcdTZFQ0VcdTZFRDBcdTZFRDJcdTZFRDZcdTZFRDhcdTZFRDlcdTZFREJcdTZFRENcdTZFRERcdTZFRTNcdTZFRTdcdTZFRUFcIiw1XSxcbltcIjlkNDBcIixcIlx1NkVGMFx1NkVGMVx1NkVGMlx1NkVGM1x1NkVGNVx1NkVGNlx1NkVGN1x1NkVGOFx1NkVGQVwiLDcsXCJcdTZGMDNcdTZGMDRcdTZGMDVcdTZGMDdcdTZGMDhcdTZGMEFcIiw0LFwiXHU2RjEwXHU2RjExXHU2RjEyXHU2RjE2XCIsOSxcIlx1NkYyMVx1NkYyMlx1NkYyM1x1NkYyNVx1NkYyNlx1NkYyN1x1NkYyOFx1NkYyQ1x1NkYyRVx1NkYzMFx1NkYzMlx1NkYzNFx1NkYzNVx1NkYzN1wiLDYsXCJcdTZGM0ZcdTZGNDBcdTZGNDFcdTZGNDJcIl0sXG5bXCI5ZDgwXCIsXCJcdTZGNDNcdTZGNDRcdTZGNDVcdTZGNDhcdTZGNDlcdTZGNEFcdTZGNENcdTZGNEVcIiw5LFwiXHU2RjU5XHU2RjVBXHU2RjVCXHU2RjVEXHU2RjVGXHU2RjYwXHU2RjYxXHU2RjYzXHU2RjY0XHU2RjY1XHU2RjY3XCIsNSxcIlx1NkY2Rlx1NkY3MFx1NkY3MVx1NkY3M1x1NkY3NVx1NkY3Nlx1NkY3N1x1NkY3OVx1NkY3Qlx1NkY3RFwiLDYsXCJcdTZGODVcdTZGODZcdTZGODdcdTZGOEFcdTZGOEJcdTZGOEZcIiwxMixcIlx1NkY5RFx1NkY5RVx1NkY5Rlx1NkZBMFx1NkZBMlwiLDQsXCJcdTZGQThcIiwxMCxcIlx1NkZCNFx1NkZCNVx1NkZCN1x1NkZCOFx1NkZCQVwiLDUsXCJcdTZGQzFcdTZGQzNcIiw1LFwiXHU2RkNBXCIsNixcIlx1NkZEM1wiLDEwLFwiXHU2RkRGXHU2RkUyXHU2RkUzXHU2RkU0XHU2RkU1XCJdLFxuW1wiOWU0MFwiLFwiXHU2RkU2XCIsNyxcIlx1NkZGMFwiLDMyLFwiXHU3MDEyXCIsNyxcIlx1NzAxQ1wiLDYsXCJcdTcwMjRcIiw2XSxcbltcIjllODBcIixcIlx1NzAyQlwiLDksXCJcdTcwMzZcdTcwMzdcdTcwMzhcdTcwM0FcIiwxNyxcIlx1NzA0RFx1NzA0RVx1NzA1MFwiLDEzLFwiXHU3MDVGXCIsMTEsXCJcdTcwNkVcdTcwNzFcdTcwNzJcdTcwNzNcdTcwNzRcdTcwNzdcdTcwNzlcdTcwN0FcdTcwN0JcdTcwN0RcdTcwODFcdTcwODJcdTcwODNcdTcwODRcdTcwODZcdTcwODdcdTcwODhcdTcwOEJcdTcwOENcdTcwOERcdTcwOEZcdTcwOTBcdTcwOTFcdTcwOTNcdTcwOTdcdTcwOThcdTcwOUFcdTcwOUJcdTcwOUVcIiwxMixcIlx1NzBCMFx1NzBCMlx1NzBCNFx1NzBCNVx1NzBCNlx1NzBCQVx1NzBCRVx1NzBCRlx1NzBDNFx1NzBDNVx1NzBDNlx1NzBDN1x1NzBDOVx1NzBDQlwiLDEyLFwiXHU3MERBXCJdLFxuW1wiOWY0MFwiLFwiXHU3MERDXHU3MEREXHU3MERFXHU3MEUwXHU3MEUxXHU3MEUyXHU3MEUzXHU3MEU1XHU3MEVBXHU3MEVFXHU3MEYwXCIsNixcIlx1NzBGOFx1NzBGQVx1NzBGQlx1NzBGQ1x1NzBGRVwiLDEwLFwiXHU3MTBCXCIsNCxcIlx1NzExMVx1NzExMlx1NzExNFx1NzExN1x1NzExQlwiLDEwLFwiXHU3MTI3XCIsNyxcIlx1NzEzMlx1NzEzM1x1NzEzNFwiXSxcbltcIjlmODBcIixcIlx1NzEzNVx1NzEzN1wiLDEzLFwiXHU3MTQ2XHU3MTQ3XHU3MTQ4XHU3MTQ5XHU3MTRCXHU3MTREXHU3MTRGXCIsMTIsXCJcdTcxNURcdTcxNUZcIiw0LFwiXHU3MTY1XHU3MTY5XCIsNCxcIlx1NzE2Rlx1NzE3MFx1NzE3MVx1NzE3NFx1NzE3NVx1NzE3Nlx1NzE3N1x1NzE3OVx1NzE3Qlx1NzE3Q1x1NzE3RVwiLDUsXCJcdTcxODVcIiw0LFwiXHU3MThCXHU3MThDXHU3MThEXHU3MThFXHU3MTkwXHU3MTkxXHU3MTkyXHU3MTkzXHU3MTk1XHU3MTk2XHU3MTk3XHU3MTlBXCIsNCxcIlx1NzFBMVwiLDYsXCJcdTcxQTlcdTcxQUFcdTcxQUJcdTcxQURcIiw1LFwiXHU3MUI0XHU3MUI2XHU3MUI3XHU3MUI4XHU3MUJBXCIsOCxcIlx1NzFDNFwiLDksXCJcdTcxQ0ZcIiw0XSxcbltcImEwNDBcIixcIlx1NzFENlwiLDksXCJcdTcxRTFcdTcxRTJcdTcxRTNcdTcxRTRcdTcxRTZcdTcxRThcIiw1LFwiXHU3MUVGXCIsOSxcIlx1NzFGQVwiLDExLFwiXHU3MjA3XCIsMTldLFxuW1wiYTA4MFwiLFwiXHU3MjFCXHU3MjFDXHU3MjFFXCIsOSxcIlx1NzIyOVx1NzIyQlx1NzIyRFx1NzIyRVx1NzIyRlx1NzIzMlx1NzIzM1x1NzIzNFx1NzIzQVx1NzIzQ1x1NzIzRVx1NzI0MFwiLDYsXCJcdTcyNDlcdTcyNEFcdTcyNEJcdTcyNEVcdTcyNEZcdTcyNTBcdTcyNTFcdTcyNTNcdTcyNTRcdTcyNTVcdTcyNTdcdTcyNThcdTcyNUFcdTcyNUNcdTcyNUVcdTcyNjBcdTcyNjNcdTcyNjRcdTcyNjVcdTcyNjhcdTcyNkFcdTcyNkJcdTcyNkNcdTcyNkRcdTcyNzBcdTcyNzFcdTcyNzNcdTcyNzRcdTcyNzZcdTcyNzdcdTcyNzhcdTcyN0JcdTcyN0NcdTcyN0RcdTcyODJcdTcyODNcdTcyODVcIiw0LFwiXHU3MjhDXHU3MjhFXHU3MjkwXHU3MjkxXHU3MjkzXCIsMTEsXCJcdTcyQTBcIiwxMSxcIlx1NzJBRVx1NzJCMVx1NzJCMlx1NzJCM1x1NzJCNVx1NzJCQVwiLDYsXCJcdTcyQzVcdTcyQzZcdTcyQzdcdTcyQzlcdTcyQ0FcdTcyQ0JcdTcyQ0NcdTcyQ0ZcdTcyRDFcdTcyRDNcdTcyRDRcdTcyRDVcdTcyRDZcdTcyRDhcdTcyREFcdTcyREJcIl0sXG5bXCJhMWExXCIsXCJcdTMwMDBcdTMwMDFcdTMwMDJcdTAwQjdcdTAyQzlcdTAyQzdcdTAwQThcdTMwMDNcdTMwMDVcdTIwMTRcdUZGNUVcdTIwMTZcdTIwMjZcdTIwMThcdTIwMTlcdTIwMUNcdTIwMURcdTMwMTRcdTMwMTVcdTMwMDhcIiw3LFwiXHUzMDE2XHUzMDE3XHUzMDEwXHUzMDExXHUwMEIxXHUwMEQ3XHUwMEY3XHUyMjM2XHUyMjI3XHUyMjI4XHUyMjExXHUyMjBGXHUyMjJBXHUyMjI5XHUyMjA4XHUyMjM3XHUyMjFBXHUyMkE1XHUyMjI1XHUyMjIwXHUyMzEyXHUyMjk5XHUyMjJCXHUyMjJFXHUyMjYxXHUyMjRDXHUyMjQ4XHUyMjNEXHUyMjFEXHUyMjYwXHUyMjZFXHUyMjZGXHUyMjY0XHUyMjY1XHUyMjFFXHUyMjM1XHUyMjM0XHUyNjQyXHUyNjQwXHUwMEIwXHUyMDMyXHUyMDMzXHUyMTAzXHVGRjA0XHUwMEE0XHVGRkUwXHVGRkUxXHUyMDMwXHUwMEE3XHUyMTE2XHUyNjA2XHUyNjA1XHUyNUNCXHUyNUNGXHUyNUNFXHUyNUM3XHUyNUM2XHUyNUExXHUyNUEwXHUyNUIzXHUyNUIyXHUyMDNCXHUyMTkyXHUyMTkwXHUyMTkxXHUyMTkzXHUzMDEzXCJdLFxuW1wiYTJhMVwiLFwiXHUyMTcwXCIsOV0sXG5bXCJhMmIxXCIsXCJcdTI0ODhcIiwxOSxcIlx1MjQ3NFwiLDE5LFwiXHUyNDYwXCIsOV0sXG5bXCJhMmU1XCIsXCJcdTMyMjBcIiw5XSxcbltcImEyZjFcIixcIlx1MjE2MFwiLDExXSxcbltcImEzYTFcIixcIlx1RkYwMVx1RkYwMlx1RkYwM1x1RkZFNVx1RkYwNVwiLDg4LFwiXHVGRkUzXCJdLFxuW1wiYTRhMVwiLFwiXHUzMDQxXCIsODJdLFxuW1wiYTVhMVwiLFwiXHUzMEExXCIsODVdLFxuW1wiYTZhMVwiLFwiXHUwMzkxXCIsMTYsXCJcdTAzQTNcIiw2XSxcbltcImE2YzFcIixcIlx1MDNCMVwiLDE2LFwiXHUwM0MzXCIsNl0sXG5bXCJhNmUwXCIsXCJcdUZFMzVcdUZFMzZcdUZFMzlcdUZFM0FcdUZFM0ZcdUZFNDBcdUZFM0RcdUZFM0VcdUZFNDFcdUZFNDJcdUZFNDNcdUZFNDRcIl0sXG5bXCJhNmVlXCIsXCJcdUZFM0JcdUZFM0NcdUZFMzdcdUZFMzhcdUZFMzFcIl0sXG5bXCJhNmY0XCIsXCJcdUZFMzNcdUZFMzRcIl0sXG5bXCJhN2ExXCIsXCJcdTA0MTBcIiw1LFwiXHUwNDAxXHUwNDE2XCIsMjVdLFxuW1wiYTdkMVwiLFwiXHUwNDMwXCIsNSxcIlx1MDQ1MVx1MDQzNlwiLDI1XSxcbltcImE4NDBcIixcIlx1MDJDQVx1MDJDQlx1MDJEOVx1MjAxM1x1MjAxNVx1MjAyNVx1MjAzNVx1MjEwNVx1MjEwOVx1MjE5Nlx1MjE5N1x1MjE5OFx1MjE5OVx1MjIxNVx1MjIxRlx1MjIyM1x1MjI1Mlx1MjI2Nlx1MjI2N1x1MjJCRlx1MjU1MFwiLDM1LFwiXHUyNTgxXCIsNl0sXG5bXCJhODgwXCIsXCJcdTI1ODhcIiw3LFwiXHUyNTkzXHUyNTk0XHUyNTk1XHUyNUJDXHUyNUJEXHUyNUUyXHUyNUUzXHUyNUU0XHUyNUU1XHUyNjA5XHUyMjk1XHUzMDEyXHUzMDFEXHUzMDFFXCJdLFxuW1wiYThhMVwiLFwiXHUwMTAxXHUwMEUxXHUwMUNFXHUwMEUwXHUwMTEzXHUwMEU5XHUwMTFCXHUwMEU4XHUwMTJCXHUwMEVEXHUwMUQwXHUwMEVDXHUwMTREXHUwMEYzXHUwMUQyXHUwMEYyXHUwMTZCXHUwMEZBXHUwMUQ0XHUwMEY5XHUwMUQ2XHUwMUQ4XHUwMURBXHUwMURDXHUwMEZDXHUwMEVBXHUwMjUxXCJdLFxuW1wiYThiZFwiLFwiXHUwMTQ0XHUwMTQ4XCJdLFxuW1wiYThjMFwiLFwiXHUwMjYxXCJdLFxuW1wiYThjNVwiLFwiXHUzMTA1XCIsMzZdLFxuW1wiYTk0MFwiLFwiXHUzMDIxXCIsOCxcIlx1MzJBM1x1MzM4RVx1MzM4Rlx1MzM5Q1x1MzM5RFx1MzM5RVx1MzNBMVx1MzNDNFx1MzNDRVx1MzNEMVx1MzNEMlx1MzNENVx1RkUzMFx1RkZFMlx1RkZFNFwiXSxcbltcImE5NTlcIixcIlx1MjEyMVx1MzIzMVwiXSxcbltcImE5NWNcIixcIlx1MjAxMFwiXSxcbltcImE5NjBcIixcIlx1MzBGQ1x1MzA5Qlx1MzA5Q1x1MzBGRFx1MzBGRVx1MzAwNlx1MzA5RFx1MzA5RVx1RkU0OVwiLDksXCJcdUZFNTRcdUZFNTVcdUZFNTZcdUZFNTdcdUZFNTlcIiw4XSxcbltcImE5ODBcIixcIlx1RkU2MlwiLDQsXCJcdUZFNjhcdUZFNjlcdUZFNkFcdUZFNkJcIl0sXG5bXCJhOTk2XCIsXCJcdTMwMDdcIl0sXG5bXCJhOWE0XCIsXCJcdTI1MDBcIiw3NV0sXG5bXCJhYTQwXCIsXCJcdTcyRENcdTcyRERcdTcyREZcdTcyRTJcIiw1LFwiXHU3MkVBXHU3MkVCXHU3MkY1XHU3MkY2XHU3MkY5XHU3MkZEXHU3MkZFXHU3MkZGXHU3MzAwXHU3MzAyXHU3MzA0XCIsNSxcIlx1NzMwQlx1NzMwQ1x1NzMwRFx1NzMwRlx1NzMxMFx1NzMxMVx1NzMxMlx1NzMxNFx1NzMxOFx1NzMxOVx1NzMxQVx1NzMxRlx1NzMyMFx1NzMyM1x1NzMyNFx1NzMyNlx1NzMyN1x1NzMyOFx1NzMyRFx1NzMyRlx1NzMzMFx1NzMzMlx1NzMzM1x1NzMzNVx1NzMzNlx1NzMzQVx1NzMzQlx1NzMzQ1x1NzMzRFx1NzM0MFwiLDhdLFxuW1wiYWE4MFwiLFwiXHU3MzQ5XHU3MzRBXHU3MzRCXHU3MzRDXHU3MzRFXHU3MzRGXHU3MzUxXHU3MzUzXHU3MzU0XHU3MzU1XHU3MzU2XHU3MzU4XCIsNyxcIlx1NzM2MVwiLDEwLFwiXHU3MzZFXHU3MzcwXHU3MzcxXCJdLFxuW1wiYWI0MFwiLFwiXHU3MzcyXCIsMTEsXCJcdTczN0ZcIiw0LFwiXHU3Mzg1XHU3Mzg2XHU3Mzg4XHU3MzhBXHU3MzhDXHU3MzhEXHU3MzhGXHU3MzkwXHU3MzkyXHU3MzkzXHU3Mzk0XHU3Mzk1XHU3Mzk3XHU3Mzk4XHU3Mzk5XHU3MzlBXHU3MzlDXHU3MzlEXHU3MzlFXHU3M0EwXHU3M0ExXHU3M0EzXCIsNSxcIlx1NzNBQVx1NzNBQ1x1NzNBRFx1NzNCMVx1NzNCNFx1NzNCNVx1NzNCNlx1NzNCOFx1NzNCOVx1NzNCQ1x1NzNCRFx1NzNCRVx1NzNCRlx1NzNDMVx1NzNDM1wiLDRdLFxuW1wiYWI4MFwiLFwiXHU3M0NCXHU3M0NDXHU3M0NFXHU3M0QyXCIsNixcIlx1NzNEQVx1NzNEQlx1NzNEQ1x1NzNERFx1NzNERlx1NzNFMVx1NzNFMlx1NzNFM1x1NzNFNFx1NzNFNlx1NzNFOFx1NzNFQVx1NzNFQlx1NzNFQ1x1NzNFRVx1NzNFRlx1NzNGMFx1NzNGMVx1NzNGM1wiLDRdLFxuW1wiYWM0MFwiLFwiXHU3M0Y4XCIsMTAsXCJcdTc0MDRcdTc0MDdcdTc0MDhcdTc0MEJcdTc0MENcdTc0MERcdTc0MEVcdTc0MTFcIiw4LFwiXHU3NDFDXCIsNSxcIlx1NzQyM1x1NzQyNFx1NzQyN1x1NzQyOVx1NzQyQlx1NzQyRFx1NzQyRlx1NzQzMVx1NzQzMlx1NzQzN1wiLDQsXCJcdTc0M0RcdTc0M0VcdTc0M0ZcdTc0NDBcdTc0NDJcIiwxMV0sXG5bXCJhYzgwXCIsXCJcdTc0NEVcIiw2LFwiXHU3NDU2XHU3NDU4XHU3NDVEXHU3NDYwXCIsMTIsXCJcdTc0NkVcdTc0NkZcdTc0NzFcIiw0LFwiXHU3NDc4XHU3NDc5XHU3NDdBXCJdLFxuW1wiYWQ0MFwiLFwiXHU3NDdCXHU3NDdDXHU3NDdEXHU3NDdGXHU3NDgyXHU3NDg0XHU3NDg1XHU3NDg2XHU3NDg4XHU3NDg5XHU3NDhBXHU3NDhDXHU3NDhEXHU3NDhGXHU3NDkxXCIsMTAsXCJcdTc0OURcdTc0OUZcIiw3LFwiXHU3NEFBXCIsMTUsXCJcdTc0QkJcIiwxMl0sXG5bXCJhZDgwXCIsXCJcdTc0QzhcIiw5LFwiXHU3NEQzXCIsOCxcIlx1NzRERFx1NzRERlx1NzRFMVx1NzRFNVx1NzRFN1wiLDYsXCJcdTc0RjBcdTc0RjFcdTc0RjJcIl0sXG5bXCJhZTQwXCIsXCJcdTc0RjNcdTc0RjVcdTc0RjhcIiw2LFwiXHU3NTAwXHU3NTAxXHU3NTAyXHU3NTAzXHU3NTA1XCIsNyxcIlx1NzUwRVx1NzUxMFx1NzUxMlx1NzUxNFx1NzUxNVx1NzUxNlx1NzUxN1x1NzUxQlx1NzUxRFx1NzUxRVx1NzUyMFwiLDQsXCJcdTc1MjZcdTc1MjdcdTc1MkFcdTc1MkVcdTc1MzRcdTc1MzZcdTc1MzlcdTc1M0NcdTc1M0RcdTc1M0ZcdTc1NDFcdTc1NDJcdTc1NDNcdTc1NDRcdTc1NDZcdTc1NDdcdTc1NDlcdTc1NEFcdTc1NERcdTc1NTBcdTc1NTFcdTc1NTJcdTc1NTNcdTc1NTVcdTc1NTZcdTc1NTdcdTc1NThcIl0sXG5bXCJhZTgwXCIsXCJcdTc1NURcIiw3LFwiXHU3NTY3XHU3NTY4XHU3NTY5XHU3NTZCXCIsNixcIlx1NzU3M1x1NzU3NVx1NzU3Nlx1NzU3N1x1NzU3QVwiLDQsXCJcdTc1ODBcdTc1ODFcdTc1ODJcdTc1ODRcdTc1ODVcdTc1ODdcIl0sXG5bXCJhZjQwXCIsXCJcdTc1ODhcdTc1ODlcdTc1OEFcdTc1OENcdTc1OERcdTc1OEVcdTc1OTBcdTc1OTNcdTc1OTVcdTc1OThcdTc1OUJcdTc1OUNcdTc1OUVcdTc1QTJcdTc1QTZcIiw0LFwiXHU3NUFEXHU3NUI2XHU3NUI3XHU3NUJBXHU3NUJCXHU3NUJGXHU3NUMwXHU3NUMxXHU3NUM2XHU3NUNCXHU3NUNDXHU3NUNFXHU3NUNGXHU3NUQwXHU3NUQxXHU3NUQzXHU3NUQ3XHU3NUQ5XHU3NURBXHU3NURDXHU3NUREXHU3NURGXHU3NUUwXHU3NUUxXHU3NUU1XHU3NUU5XHU3NUVDXHU3NUVEXHU3NUVFXHU3NUVGXHU3NUYyXHU3NUYzXHU3NUY1XHU3NUY2XHU3NUY3XHU3NUY4XHU3NUZBXHU3NUZCXHU3NUZEXHU3NUZFXHU3NjAyXHU3NjA0XHU3NjA2XHU3NjA3XCJdLFxuW1wiYWY4MFwiLFwiXHU3NjA4XHU3NjA5XHU3NjBCXHU3NjBEXHU3NjBFXHU3NjBGXHU3NjExXHU3NjEyXHU3NjEzXHU3NjE0XHU3NjE2XHU3NjFBXHU3NjFDXHU3NjFEXHU3NjFFXHU3NjIxXHU3NjIzXHU3NjI3XHU3NjI4XHU3NjJDXHU3NjJFXHU3NjJGXHU3NjMxXHU3NjMyXHU3NjM2XHU3NjM3XHU3NjM5XHU3NjNBXHU3NjNCXHU3NjNEXHU3NjQxXHU3NjQyXHU3NjQ0XCJdLFxuW1wiYjA0MFwiLFwiXHU3NjQ1XCIsNixcIlx1NzY0RVwiLDUsXCJcdTc2NTVcdTc2NTdcIiw0LFwiXHU3NjVEXHU3NjVGXHU3NjYwXHU3NjYxXHU3NjYyXHU3NjY0XCIsNixcIlx1NzY2Q1x1NzY2RFx1NzY2RVx1NzY3MFwiLDcsXCJcdTc2NzlcdTc2N0FcdTc2N0NcdTc2N0ZcdTc2ODBcdTc2ODFcdTc2ODNcdTc2ODVcdTc2ODlcdTc2OEFcdTc2OENcdTc2OERcdTc2OEZcdTc2OTBcdTc2OTJcdTc2OTRcdTc2OTVcdTc2OTdcdTc2OThcdTc2OUFcdTc2OUJcIl0sXG5bXCJiMDgwXCIsXCJcdTc2OUNcIiw3LFwiXHU3NkE1XCIsOCxcIlx1NzZBRlx1NzZCMFx1NzZCM1x1NzZCNVwiLDksXCJcdTc2QzBcdTc2QzFcdTc2QzNcdTU1NEFcdTk2M0ZcdTU3QzNcdTYzMjhcdTU0Q0VcdTU1MDlcdTU0QzBcdTc2OTFcdTc2NENcdTg1M0NcdTc3RUVcdTgyN0VcdTc4OERcdTcyMzFcdTk2OThcdTk3OERcdTZDMjhcdTVCODlcdTRGRkFcdTYzMDlcdTY2OTdcdTVDQjhcdTgwRkFcdTY4NDhcdTgwQUVcdTY2MDJcdTc2Q0VcdTUxRjlcdTY1NTZcdTcxQUNcdTdGRjFcdTg4ODRcdTUwQjJcdTU5NjVcdTYxQ0FcdTZGQjNcdTgyQURcdTYzNENcdTYyNTJcdTUzRURcdTU0MjdcdTdCMDZcdTUxNkJcdTc1QTRcdTVERjRcdTYyRDRcdThEQ0JcdTk3NzZcdTYyOEFcdTgwMTlcdTU3NURcdTk3MzhcdTdGNjJcdTcyMzhcdTc2N0RcdTY3Q0ZcdTc2N0VcdTY0NDZcdTRGNzBcdThEMjVcdTYyRENcdTdBMTdcdTY1OTFcdTczRURcdTY0MkNcdTYyNzNcdTgyMkNcdTk4ODFcdTY3N0ZcdTcyNDhcdTYyNkVcdTYyQ0NcdTRGMzRcdTc0RTNcdTUzNEFcdTUyOUVcdTdFQ0FcdTkwQTZcdTVFMkVcdTY4ODZcdTY5OUNcdTgxODBcdTdFRDFcdTY4RDJcdTc4QzVcdTg2OENcdTk1NTFcdTUwOERcdThDMjRcdTgyREVcdTgwREVcdTUzMDVcdTg5MTJcdTUyNjVcIl0sXG5bXCJiMTQwXCIsXCJcdTc2QzRcdTc2QzdcdTc2QzlcdTc2Q0JcdTc2Q0NcdTc2RDNcdTc2RDVcdTc2RDlcdTc2REFcdTc2RENcdTc2RERcdTc2REVcdTc2RTBcIiw0LFwiXHU3NkU2XCIsNyxcIlx1NzZGMFx1NzZGM1x1NzZGNVx1NzZGNlx1NzZGN1x1NzZGQVx1NzZGQlx1NzZGRFx1NzZGRlx1NzcwMFx1NzcwMlx1NzcwM1x1NzcwNVx1NzcwNlx1NzcwQVx1NzcwQ1x1NzcwRVwiLDEwLFwiXHU3NzFCXHU3NzFDXHU3NzFEXHU3NzFFXHU3NzIxXHU3NzIzXHU3NzI0XHU3NzI1XHU3NzI3XHU3NzJBXHU3NzJCXCJdLFxuW1wiYjE4MFwiLFwiXHU3NzJDXHU3NzJFXHU3NzMwXCIsNCxcIlx1NzczOVx1NzczQlx1NzczRFx1NzczRVx1NzczRlx1Nzc0Mlx1Nzc0NFx1Nzc0NVx1Nzc0Nlx1Nzc0OFwiLDcsXCJcdTc3NTJcIiw3LFwiXHU3NzVDXHU4NTg0XHU5NkY5XHU0RkREXHU1ODIxXHU5OTcxXHU1QjlEXHU2MkIxXHU2MkE1XHU2NkI0XHU4Qzc5XHU5QzhEXHU3MjA2XHU2NzZGXHU3ODkxXHU2MEIyXHU1MzUxXHU1MzE3XHU4Rjg4XHU4MENDXHU4RDFEXHU5NEExXHU1MDBEXHU3MkM4XHU1OTA3XHU2MEVCXHU3MTE5XHU4OEFCXHU1OTU0XHU4MkVGXHU2NzJDXHU3QjI4XHU1RDI5XHU3RUY3XHU3NTJEXHU2Q0Y1XHU4RTY2XHU4RkY4XHU5MDNDXHU5RjNCXHU2QkQ0XHU5MTE5XHU3QjE0XHU1RjdDXHU3OEE3XHU4NEQ2XHU4NTNEXHU2QkQ1XHU2QkQ5XHU2QkQ2XHU1RTAxXHU1RTg3XHU3NUY5XHU5NUVEXHU2NTVEXHU1RjBBXHU1RkM1XHU4RjlGXHU1OEMxXHU4MUMyXHU5MDdGXHU5NjVCXHU5N0FEXHU4RkI5XHU3RjE2XHU4RDJDXHU2MjQxXHU0RkJGXHU1M0Q4XHU1MzVFXHU4RkE4XHU4RkE5XHU4RkFCXHU5MDREXHU2ODA3XHU1RjZBXHU4MTk4XHU4ODY4XHU5Q0Q2XHU2MThCXHU1MjJCXHU3NjJBXHU1RjZDXHU2NThDXHU2RkQyXHU2RUU4XHU1QkJFXHU2NDQ4XHU1MTc1XHU1MUIwXHU2N0M0XHU0RTE5XHU3OUM5XHU5OTdDXHU3MEIzXCJdLFxuW1wiYjI0MFwiLFwiXHU3NzVEXHU3NzVFXHU3NzVGXHU3NzYwXHU3NzY0XHU3NzY3XHU3NzY5XHU3NzZBXHU3NzZEXCIsMTEsXCJcdTc3N0FcdTc3N0JcdTc3N0NcdTc3ODFcdTc3ODJcdTc3ODNcdTc3ODZcIiw1LFwiXHU3NzhGXHU3NzkwXHU3NzkzXCIsMTEsXCJcdTc3QTFcdTc3QTNcdTc3QTRcdTc3QTZcdTc3QThcdTc3QUJcdTc3QURcdTc3QUVcdTc3QUZcdTc3QjFcdTc3QjJcdTc3QjRcdTc3QjZcIiw0XSxcbltcImIyODBcIixcIlx1NzdCQ1x1NzdCRVx1NzdDMFwiLDEyLFwiXHU3N0NFXCIsOCxcIlx1NzdEOFx1NzdEOVx1NzdEQVx1NzdERFwiLDQsXCJcdTc3RTRcdTc1QzVcdTVFNzZcdTczQkJcdTgzRTBcdTY0QURcdTYyRThcdTk0QjVcdTZDRTJcdTUzNUFcdTUyQzNcdTY0MEZcdTk0QzJcdTdCOTRcdTRGMkZcdTVFMUJcdTgyMzZcdTgxMTZcdTgxOEFcdTZFMjRcdTZDQ0FcdTlBNzNcdTYzNTVcdTUzNUNcdTU0RkFcdTg4NjVcdTU3RTBcdTRFMERcdTVFMDNcdTZCNjVcdTdDM0ZcdTkwRThcdTYwMTZcdTY0RTZcdTczMUNcdTg4QzFcdTY3NTBcdTYyNERcdThEMjJcdTc3NkNcdThFMjlcdTkxQzdcdTVGNjlcdTgzRENcdTg1MjFcdTk5MTBcdTUzQzJcdTg2OTVcdTZCOEJcdTYwRURcdTYwRThcdTcwN0ZcdTgyQ0RcdTgyMzFcdTRFRDNcdTZDQTdcdTg1Q0ZcdTY0Q0RcdTdDRDlcdTY5RkRcdTY2RjlcdTgzNDlcdTUzOTVcdTdCNTZcdTRGQTdcdTUxOENcdTZENEJcdTVDNDJcdThFNkRcdTYzRDJcdTUzQzlcdTgzMkNcdTgzMzZcdTY3RTVcdTc4QjRcdTY0M0RcdTVCREZcdTVDOTRcdTVERUVcdThCRTdcdTYyQzZcdTY3RjRcdThDN0FcdTY0MDBcdTYzQkFcdTg3NDlcdTk5OEJcdThDMTdcdTdGMjBcdTk0RjJcdTRFQTdcdTk2MTBcdTk4QTRcdTY2MENcdTczMTZcIl0sXG5bXCJiMzQwXCIsXCJcdTc3RTZcdTc3RThcdTc3RUFcdTc3RUZcdTc3RjBcdTc3RjFcdTc3RjJcdTc3RjRcdTc3RjVcdTc3RjdcdTc3RjlcdTc3RkFcdTc3RkJcdTc3RkNcdTc4MDNcIiw1LFwiXHU3ODBBXHU3ODBCXHU3ODBFXHU3ODBGXHU3ODEwXHU3ODEzXHU3ODE1XHU3ODE5XHU3ODFCXHU3ODFFXHU3ODIwXHU3ODIxXHU3ODIyXHU3ODI0XHU3ODI4XHU3ODJBXHU3ODJCXHU3ODJFXHU3ODJGXHU3ODMxXHU3ODMyXHU3ODMzXHU3ODM1XHU3ODM2XHU3ODNEXHU3ODNGXHU3ODQxXHU3ODQyXHU3ODQzXHU3ODQ0XHU3ODQ2XHU3ODQ4XHU3ODQ5XHU3ODRBXHU3ODRCXHU3ODREXHU3ODRGXHU3ODUxXHU3ODUzXHU3ODU0XHU3ODU4XHU3ODU5XHU3ODVBXCJdLFxuW1wiYjM4MFwiLFwiXHU3ODVCXHU3ODVDXHU3ODVFXCIsMTEsXCJcdTc4NkZcIiw3LFwiXHU3ODc4XHU3ODc5XHU3ODdBXHU3ODdCXHU3ODdEXCIsNixcIlx1NTczQVx1NUMxRFx1NUUzOFx1OTU3Rlx1NTA3Rlx1ODBBMFx1NTM4Mlx1NjU1RVx1NzU0NVx1NTUzMVx1NTAyMVx1OEQ4NVx1NjI4NFx1OTQ5RVx1NjcxRFx1NTYzMlx1NkY2RVx1NURFMlx1NTQzNVx1NzA5Mlx1OEY2Nlx1NjI2Rlx1NjRBNFx1NjNBM1x1NUY3Qlx1NkY4OFx1OTBGNFx1ODFFM1x1OEZCMFx1NUMxOFx1NjY2OFx1NUZGMVx1NkM4OVx1OTY0OFx1OEQ4MVx1ODg2Q1x1NjQ5MVx1NzlGMFx1NTdDRVx1NkE1OVx1NjIxMFx1NTQ0OFx1NEU1OFx1N0EwQlx1NjBFOVx1NkY4NFx1OEJEQVx1NjI3Rlx1OTAxRVx1OUE4Qlx1NzlFNFx1NTQwM1x1NzVGNFx1NjMwMVx1NTMxOVx1NkM2MFx1OEZERlx1NUYxQlx1OUE3MFx1ODAzQlx1OUY3Rlx1NEY4OFx1NUMzQVx1OEQ2NFx1N0ZDNVx1NjVBNVx1NzBCRFx1NTE0NVx1NTFCMlx1ODY2Qlx1NUQwN1x1NUJBMFx1NjJCRFx1OTE2Q1x1NzU3NFx1OEUwQ1x1N0EyMFx1NjEwMVx1N0I3OVx1NEVDN1x1N0VGOFx1Nzc4NVx1NEUxMVx1ODFFRFx1NTIxRFx1NTFGQVx1NkE3MVx1NTNBOFx1OEU4N1x1OTUwNFx1OTZDRlx1NkVDMVx1OTY2NFx1Njk1QVwiXSxcbltcImI0NDBcIixcIlx1Nzg4NFx1Nzg4NVx1Nzg4Nlx1Nzg4OFx1Nzg4QVx1Nzg4Qlx1Nzg4Rlx1Nzg5MFx1Nzg5Mlx1Nzg5NFx1Nzg5NVx1Nzg5Nlx1Nzg5OVx1Nzg5RFx1Nzg5RVx1NzhBMFx1NzhBMlx1NzhBNFx1NzhBNlx1NzhBOFwiLDcsXCJcdTc4QjVcdTc4QjZcdTc4QjdcdTc4QjhcdTc4QkFcdTc4QkJcdTc4QkNcdTc4QkRcdTc4QkZcdTc4QzBcdTc4QzJcdTc4QzNcdTc4QzRcdTc4QzZcdTc4QzdcdTc4QzhcdTc4Q0NcdTc4Q0RcdTc4Q0VcdTc4Q0ZcdTc4RDFcdTc4RDJcdTc4RDNcdTc4RDZcdTc4RDdcdTc4RDhcdTc4REFcIiw5XSxcbltcImI0ODBcIixcIlx1NzhFNFx1NzhFNVx1NzhFNlx1NzhFN1x1NzhFOVx1NzhFQVx1NzhFQlx1NzhFRFwiLDQsXCJcdTc4RjNcdTc4RjVcdTc4RjZcdTc4RjhcdTc4RjlcdTc4RkJcIiw1LFwiXHU3OTAyXHU3OTAzXHU3OTA0XHU3OTA2XCIsNixcIlx1Nzg0MFx1NTBBOFx1NzdEN1x1NjQxMFx1ODlFNlx1NTkwNFx1NjNFM1x1NURERFx1N0E3Rlx1NjkzRFx1NEYyMFx1ODIzOVx1NTU5OFx1NEUzMlx1NzVBRVx1N0E5N1x1NUU2Mlx1NUU4QVx1OTVFRlx1NTIxQlx1NTQzOVx1NzA4QVx1NjM3Nlx1OTUyNFx1NTc4Mlx1NjYyNVx1NjkzRlx1OTE4N1x1NTUwN1x1NkRGM1x1N0VBRlx1ODgyMlx1NjIzM1x1N0VGMFx1NzVCNVx1ODMyOFx1NzhDMVx1OTZDQ1x1OEY5RVx1NjE0OFx1NzRGN1x1OEJDRFx1NkI2NFx1NTIzQVx1OEQ1MFx1NkIyMVx1ODA2QVx1ODQ3MVx1NTZGMVx1NTMwNlx1NEVDRVx1NEUxQlx1NTFEMVx1N0M5N1x1OTE4Qlx1N0MwN1x1NEZDM1x1OEU3Rlx1N0JFMVx1N0E5Q1x1NjQ2N1x1NUQxNFx1NTBBQ1x1ODEwNlx1NzYwMVx1N0NCOVx1NkRFQ1x1N0ZFMFx1Njc1MVx1NUI1OFx1NUJGOFx1NzhDQlx1NjRBRVx1NjQxM1x1NjNBQVx1NjMyQlx1OTUxOVx1NjQyRFx1OEZCRVx1N0I1NFx1NzYyOVx1NjI1M1x1NTkyN1x1NTQ0Nlx1NkI3OVx1NTBBM1x1NjIzNFx1NUUyNlx1NkI4Nlx1NEVFM1x1OEQzN1x1ODg4Qlx1NUY4NVx1OTAyRVwiXSxcbltcImI1NDBcIixcIlx1NzkwRFwiLDUsXCJcdTc5MTRcIiw5LFwiXHU3OTFGXCIsNCxcIlx1NzkyNVwiLDE0LFwiXHU3OTM1XCIsNCxcIlx1NzkzRFx1NzkzRlx1Nzk0Mlx1Nzk0M1x1Nzk0NFx1Nzk0NVx1Nzk0N1x1Nzk0QVwiLDgsXCJcdTc5NTRcdTc5NTVcdTc5NThcdTc5NTlcdTc5NjFcdTc5NjNcIl0sXG5bXCJiNTgwXCIsXCJcdTc5NjRcdTc5NjZcdTc5NjlcdTc5NkFcdTc5NkJcdTc5NkNcdTc5NkVcdTc5NzBcIiw2LFwiXHU3OTc5XHU3OTdCXCIsNCxcIlx1Nzk4Mlx1Nzk4M1x1Nzk4Nlx1Nzk4N1x1Nzk4OFx1Nzk4OVx1Nzk4Qlx1Nzk4Q1x1Nzk4RFx1Nzk4RVx1Nzk5MFx1Nzk5MVx1Nzk5Mlx1NjAyMFx1ODAzRFx1NjJDNVx1NEUzOVx1NTM1NVx1OTBGOFx1NjNCOFx1ODBDNlx1NjVFNlx1NkMyRVx1NEY0Nlx1NjBFRVx1NkRFMVx1OEJERVx1NUYzOVx1ODZDQlx1NUY1M1x1NjMyMVx1NTE1QVx1ODM2MVx1Njg2M1x1NTIwMFx1NjM2M1x1OEU0OFx1NTAxMlx1NUM5Qlx1Nzk3N1x1NUJGQ1x1NTIzMFx1N0EzQlx1NjBCQ1x1OTA1M1x1NzZEN1x1NUZCN1x1NUY5N1x1NzY4NFx1OEU2Q1x1NzA2Rlx1NzY3Qlx1N0I0OVx1NzdBQVx1NTFGM1x1OTA5M1x1NTgyNFx1NEY0RVx1NkVGNFx1OEZFQVx1NjU0Q1x1N0IxQlx1NzJDNFx1NkRBNFx1N0ZERlx1NUFFMVx1NjJCNVx1NUU5NVx1NTczMFx1ODQ4Mlx1N0IyQ1x1NUUxRFx1NUYxRlx1OTAxMlx1N0YxNFx1OThBMFx1NjM4Mlx1NkVDN1x1Nzg5OFx1NzBCOVx1NTE3OFx1OTc1Qlx1NTdBQlx1NzUzNVx1NEY0M1x1NzUzOFx1NUU5N1x1NjBFNlx1NTk2MFx1NkRDMFx1NkJCRlx1Nzg4OVx1NTNGQ1x1OTZENVx1NTFDQlx1NTIwMVx1NjM4OVx1NTQwQVx1OTQ5M1x1OEMwM1x1OERDQ1x1NzIzOVx1Nzg5Rlx1ODc3Nlx1OEZFRFx1OEMwRFx1NTNFMFwiXSxcbltcImI2NDBcIixcIlx1Nzk5M1wiLDYsXCJcdTc5OUJcIiwxMSxcIlx1NzlBOFwiLDEwLFwiXHU3OUI0XCIsNCxcIlx1NzlCQ1x1NzlCRlx1NzlDMlx1NzlDNFx1NzlDNVx1NzlDN1x1NzlDOFx1NzlDQVx1NzlDQ1x1NzlDRVx1NzlDRlx1NzlEMFx1NzlEM1x1NzlENFx1NzlENlx1NzlEN1x1NzlEOVwiLDUsXCJcdTc5RTBcdTc5RTFcdTc5RTJcdTc5RTVcdTc5RThcdTc5RUFcIl0sXG5bXCJiNjgwXCIsXCJcdTc5RUNcdTc5RUVcdTc5RjFcIiw2LFwiXHU3OUY5XHU3OUZBXHU3OUZDXHU3OUZFXHU3OUZGXHU3QTAxXHU3QTA0XHU3QTA1XHU3QTA3XHU3QTA4XHU3QTA5XHU3QTBBXHU3QTBDXHU3QTBGXCIsNCxcIlx1N0ExNVx1N0ExNlx1N0ExOFx1N0ExOVx1N0ExQlx1N0ExQ1x1NEUwMVx1NzZFRlx1NTNFRVx1OTQ4OVx1OTg3Nlx1OUYwRVx1OTUyRFx1NUI5QVx1OEJBMlx1NEUyMlx1NEUxQ1x1NTFBQ1x1ODQ2M1x1NjFDMlx1NTJBOFx1NjgwQlx1NEY5N1x1NjA2Qlx1NTFCQlx1NkQxRVx1NTE1Q1x1NjI5Nlx1NjU5N1x1OTY2MVx1OEM0Nlx1OTAxN1x1NzVEOFx1OTBGRFx1Nzc2M1x1NkJEMlx1NzI4QVx1NzJFQ1x1OEJGQlx1NTgzNVx1Nzc3OVx1OEQ0Q1x1Njc1Q1x1OTU0MFx1ODA5QVx1NUVBNlx1NkUyMVx1NTk5Mlx1N0FFRlx1NzdFRFx1OTUzQlx1NkJCNVx1NjVBRFx1N0YwRVx1NTgwNlx1NTE1MVx1OTYxRlx1NUJGOVx1NThBOVx1NTQyOFx1OEU3Mlx1NjU2Nlx1OTg3Rlx1NTZFNFx1OTQ5RFx1NzZGRVx1OTA0MVx1NjM4N1x1NTRDNlx1NTkxQVx1NTkzQVx1NTc5Qlx1OEVCMlx1NjczNVx1OERGQVx1ODIzNVx1NTI0MVx1NjBGMFx1NTgxNVx1ODZGRVx1NUNFOFx1OUU0NVx1NEZDNFx1OTg5RFx1OEJCOVx1NUEyNVx1NjA3Nlx1NTM4NFx1NjI3Q1x1OTA0Rlx1OTEwMlx1OTk3Rlx1NjA2OVx1ODAwQ1x1NTEzRlx1ODAzM1x1NUMxNFx1OTk3NVx1NkQzMVx1NEU4Q1wiXSxcbltcImI3NDBcIixcIlx1N0ExRFx1N0ExRlx1N0EyMVx1N0EyMlx1N0EyNFwiLDE0LFwiXHU3QTM0XHU3QTM1XHU3QTM2XHU3QTM4XHU3QTNBXHU3QTNFXHU3QTQwXCIsNSxcIlx1N0E0N1wiLDksXCJcdTdBNTJcIiw0LFwiXHU3QTU4XCIsMTZdLFxuW1wiYjc4MFwiLFwiXHU3QTY5XCIsNixcIlx1N0E3MVx1N0E3Mlx1N0E3M1x1N0E3NVx1N0E3Qlx1N0E3Q1x1N0E3RFx1N0E3RVx1N0E4Mlx1N0E4NVx1N0E4N1x1N0E4OVx1N0E4QVx1N0E4Qlx1N0E4Q1x1N0E4RVx1N0E4Rlx1N0E5MFx1N0E5M1x1N0E5NFx1N0E5OVx1N0E5QVx1N0E5Qlx1N0E5RVx1N0FBMVx1N0FBMlx1OEQzMFx1NTNEMVx1N0Y1QVx1N0I0Rlx1NEYxMFx1NEU0Rlx1OTYwMFx1NkNENVx1NzNEMFx1ODVFOVx1NUUwNlx1NzU2QVx1N0ZGQlx1NkEwQVx1NzdGRVx1OTQ5Mlx1N0U0MVx1NTFFMVx1NzBFNlx1NTNDRFx1OEZENFx1ODMwM1x1OEQyOVx1NzJBRlx1OTk2RFx1NkNEQlx1NTc0QVx1ODJCM1x1NjVCOVx1ODBBQVx1NjIzRlx1OTYzMlx1NTlBOFx1NEVGRlx1OEJCRlx1N0VCQVx1NjUzRVx1ODNGMlx1OTc1RVx1NTU2MVx1OThERVx1ODBBNVx1NTMyQVx1OEJGRFx1NTQyMFx1ODBCQVx1NUU5Rlx1NkNCOFx1OEQzOVx1ODJBQ1x1OTE1QVx1NTQyOVx1NkMxQlx1NTIwNlx1N0VCN1x1NTc1Rlx1NzExQVx1NkM3RVx1N0M4OVx1NTk0Qlx1NEVGRFx1NUZGRlx1NjEyNFx1N0NBQVx1NEUzMFx1NUMwMVx1NjdBQlx1ODcwMlx1NUNGMFx1OTUwQlx1OThDRVx1NzVBRlx1NzBGRFx1OTAyMlx1NTFBRlx1N0YxRFx1OEJCRFx1NTk0OVx1NTFFNFx1NEY1Qlx1NTQyNlx1NTkyQlx1NjU3N1x1ODBBNFx1NUI3NVx1NjI3Nlx1NjJDMlx1OEY5MFx1NUU0NVx1NkMxRlx1N0IyNlx1NEYwRlx1NEZEOFx1NjcwRFwiXSxcbltcImI4NDBcIixcIlx1N0FBM1x1N0FBNFx1N0FBN1x1N0FBOVx1N0FBQVx1N0FBQlx1N0FBRVwiLDQsXCJcdTdBQjRcIiwxMCxcIlx1N0FDMFwiLDEwLFwiXHU3QUNDXCIsOSxcIlx1N0FEN1x1N0FEOFx1N0FEQVx1N0FEQlx1N0FEQ1x1N0FERFx1N0FFMVx1N0FFMlx1N0FFNFx1N0FFN1wiLDUsXCJcdTdBRUVcdTdBRjBcdTdBRjFcdTdBRjJcdTdBRjNcIl0sXG5bXCJiODgwXCIsXCJcdTdBRjRcIiw0LFwiXHU3QUZCXHU3QUZDXHU3QUZFXHU3QjAwXHU3QjAxXHU3QjAyXHU3QjA1XHU3QjA3XHU3QjA5XHU3QjBDXHU3QjBEXHU3QjBFXHU3QjEwXHU3QjEyXHU3QjEzXHU3QjE2XHU3QjE3XHU3QjE4XHU3QjFBXHU3QjFDXHU3QjFEXHU3QjFGXHU3QjIxXHU3QjIyXHU3QjIzXHU3QjI3XHU3QjI5XHU3QjJEXHU2RDZFXHU2REFBXHU3OThGXHU4OEIxXHU1RjE3XHU3NTJCXHU2MjlBXHU4Rjg1XHU0RkVGXHU5MURDXHU2NUE3XHU4MTJGXHU4MTUxXHU1RTlDXHU4MTUwXHU4RDc0XHU1MjZGXHU4OTg2XHU4RDRCXHU1OTBEXHU1MDg1XHU0RUQ4XHU5NjFDXHU3MjM2XHU4MTc5XHU4RDFGXHU1QkNDXHU4QkEzXHU5NjQ0XHU1OTg3XHU3RjFBXHU1NDkwXHU1Njc2XHU1NjBFXHU4QkU1XHU2NTM5XHU2OTgyXHU5NDk5XHU3NkQ2XHU2RTg5XHU1RTcyXHU3NTE4XHU2NzQ2XHU2N0QxXHU3QUZGXHU4MDlEXHU4RDc2XHU2MTFGXHU3OUM2XHU2NTYyXHU4RDYzXHU1MTg4XHU1MjFBXHU5NEEyXHU3RjM4XHU4MDlCXHU3RUIyXHU1Qzk3XHU2RTJGXHU2NzYwXHU3QkQ5XHU3NjhCXHU5QUQ4XHU4MThGXHU3Rjk0XHU3Q0Q1XHU2NDFFXHU5NTUwXHU3QTNGXHU1NDRBXHU1NEU1XHU2QjRDXHU2NDAxXHU2MjA4XHU5RTNEXHU4MEYzXHU3NTk5XHU1MjcyXHU5NzY5XHU4NDVCXHU2ODNDXHU4NkU0XHU5NjAxXHU5Njk0XHU5NEVDXHU0RTJBXHU1NDA0XHU3RUQ5XHU2ODM5XHU4RERGXHU4MDE1XHU2NkY0XHU1RTlBXHU3RkI5XCJdLFxuW1wiYjk0MFwiLFwiXHU3QjJGXHU3QjMwXHU3QjMyXHU3QjM0XHU3QjM1XHU3QjM2XHU3QjM3XHU3QjM5XHU3QjNCXHU3QjNEXHU3QjNGXCIsNSxcIlx1N0I0Nlx1N0I0OFx1N0I0QVx1N0I0RFx1N0I0RVx1N0I1M1x1N0I1NVx1N0I1N1x1N0I1OVx1N0I1Q1x1N0I1RVx1N0I1Rlx1N0I2MVx1N0I2M1wiLDEwLFwiXHU3QjZGXHU3QjcwXHU3QjczXHU3Qjc0XHU3Qjc2XHU3Qjc4XHU3QjdBXHU3QjdDXHU3QjdEXHU3QjdGXHU3QjgxXHU3QjgyXHU3QjgzXHU3Qjg0XHU3Qjg2XCIsNixcIlx1N0I4RVx1N0I4RlwiXSxcbltcImI5ODBcIixcIlx1N0I5MVx1N0I5Mlx1N0I5M1x1N0I5Nlx1N0I5OFx1N0I5OVx1N0I5QVx1N0I5Qlx1N0I5RVx1N0I5Rlx1N0JBMFx1N0JBM1x1N0JBNFx1N0JBNVx1N0JBRVx1N0JBRlx1N0JCMFx1N0JCMlx1N0JCM1x1N0JCNVx1N0JCNlx1N0JCN1x1N0JCOVwiLDcsXCJcdTdCQzJcdTdCQzNcdTdCQzRcdTU3QzJcdTgwM0ZcdTY4OTdcdTVERTVcdTY1M0JcdTUyOUZcdTYwNkRcdTlGOUFcdTRGOUJcdThFQUNcdTUxNkNcdTVCQUJcdTVGMTNcdTVERTlcdTZDNUVcdTYyRjFcdThEMjFcdTUxNzFcdTk0QTlcdTUyRkVcdTZDOUZcdTgyREZcdTcyRDdcdTU3QTJcdTY3ODRcdThEMkRcdTU5MUZcdThGOUNcdTgzQzdcdTU0OTVcdTdCOERcdTRGMzBcdTZDQkRcdTVCNjRcdTU5RDFcdTlGMTNcdTUzRTRcdTg2Q0FcdTlBQThcdThDMzdcdTgwQTFcdTY1NDVcdTk4N0VcdTU2RkFcdTk2QzdcdTUyMkVcdTc0RENcdTUyNTBcdTVCRTFcdTYzMDJcdTg5MDJcdTRFNTZcdTYyRDBcdTYwMkFcdTY4RkFcdTUxNzNcdTVCOThcdTUxQTBcdTg5QzJcdTdCQTFcdTk5ODZcdTdGNTBcdTYwRUZcdTcwNENcdThEMkZcdTUxNDlcdTVFN0ZcdTkwMUJcdTc0NzBcdTg5QzRcdTU3MkRcdTc4NDVcdTVGNTJcdTlGOUZcdTk1RkFcdThGNjhcdTlCM0NcdThCRTFcdTc2NzhcdTY4NDJcdTY3RENcdThERUFcdThEMzVcdTUyM0RcdThGOEFcdTZFREFcdTY4Q0RcdTk1MDVcdTkwRURcdTU2RkRcdTY3OUNcdTg4RjlcdThGQzdcdTU0QzhcIl0sXG5bXCJiYTQwXCIsXCJcdTdCQzVcdTdCQzhcdTdCQzlcdTdCQ0FcdTdCQ0JcdTdCQ0RcdTdCQ0VcdTdCQ0ZcdTdCRDBcdTdCRDJcdTdCRDRcIiw0LFwiXHU3QkRCXHU3QkRDXHU3QkRFXHU3QkRGXHU3QkUwXHU3QkUyXHU3QkUzXHU3QkU0XHU3QkU3XHU3QkU4XHU3QkU5XHU3QkVCXHU3QkVDXHU3QkVEXHU3QkVGXHU3QkYwXHU3QkYyXCIsNCxcIlx1N0JGOFx1N0JGOVx1N0JGQVx1N0JGQlx1N0JGRFx1N0JGRlwiLDcsXCJcdTdDMDhcdTdDMDlcdTdDMEFcdTdDMERcdTdDMEVcdTdDMTBcIiw1LFwiXHU3QzE3XHU3QzE4XHU3QzE5XCJdLFxuW1wiYmE4MFwiLFwiXHU3QzFBXCIsNCxcIlx1N0MyMFwiLDUsXCJcdTdDMjhcdTdDMjlcdTdDMkJcIiwxMixcIlx1N0MzOVwiLDUsXCJcdTdDNDJcdTlBQjhcdTVCNjlcdTZENzdcdTZDMjZcdTRFQTVcdTVCQjNcdTlBODdcdTkxNjNcdTYxQThcdTkwQUZcdTk3RTlcdTU0MkJcdTZEQjVcdTVCRDJcdTUxRkRcdTU1OEFcdTdGNTVcdTdGRjBcdTY0QkNcdTYzNERcdTY1RjFcdTYxQkVcdTYwOERcdTcxMEFcdTZDNTdcdTZDNDlcdTU5MkZcdTY3NkRcdTgyMkFcdTU4RDVcdTU2OEVcdThDNkFcdTZCRUJcdTkwRERcdTU5N0RcdTgwMTdcdTUzRjdcdTZENjlcdTU0NzVcdTU1OURcdTgzNzdcdTgzQ0ZcdTY4MzhcdTc5QkVcdTU0OENcdTRGNTVcdTU0MDhcdTc2RDJcdThDODlcdTk2MDJcdTZDQjNcdTZEQjhcdThENkJcdTg5MTBcdTlFNjRcdThEM0FcdTU2M0ZcdTlFRDFcdTc1RDVcdTVGODhcdTcyRTBcdTYwNjhcdTU0RkNcdTRFQThcdTZBMkFcdTg4NjFcdTYwNTJcdThGNzBcdTU0QzRcdTcwRDhcdTg2NzlcdTlFM0ZcdTZEMkFcdTVCOEZcdTVGMThcdTdFQTJcdTU1ODlcdTRGQUZcdTczMzRcdTU0M0NcdTUzOUFcdTUwMTlcdTU0MEVcdTU0N0NcdTRFNEVcdTVGRkRcdTc0NUFcdTU4RjZcdTg0NkJcdTgwRTFcdTg3NzRcdTcyRDBcdTdDQ0FcdTZFNTZcIl0sXG5bXCJiYjQwXCIsXCJcdTdDNDNcIiw5LFwiXHU3QzRFXCIsMzYsXCJcdTdDNzVcIiw1LFwiXHU3QzdFXCIsOV0sXG5bXCJiYjgwXCIsXCJcdTdDODhcdTdDOEFcIiw2LFwiXHU3QzkzXHU3Qzk0XHU3Qzk2XHU3Qzk5XHU3QzlBXHU3QzlCXHU3Q0EwXHU3Q0ExXHU3Q0EzXHU3Q0E2XHU3Q0E3XHU3Q0E4XHU3Q0E5XHU3Q0FCXHU3Q0FDXHU3Q0FEXHU3Q0FGXHU3Q0IwXHU3Q0I0XCIsNCxcIlx1N0NCQVx1N0NCQlx1NUYyN1x1ODY0RVx1NTUyQ1x1NjJBNFx1NEU5Mlx1NkNBQVx1NjIzN1x1ODJCMVx1NTREN1x1NTM0RVx1NzMzRVx1NkVEMVx1NzUzQlx1NTIxMlx1NTMxNlx1OEJERFx1NjlEMFx1NUY4QVx1NjAwMFx1NkRFRVx1NTc0Rlx1NkIyMlx1NzNBRlx1Njg1M1x1OEZEOFx1N0YxM1x1NjM2Mlx1NjBBM1x1NTUyNFx1NzVFQVx1OEM2Mlx1NzExNVx1NkRBM1x1NUJBNlx1NUU3Qlx1ODM1Mlx1NjE0Q1x1OUVDNFx1NzhGQVx1ODc1N1x1N0MyN1x1NzY4N1x1NTFGMFx1NjBGNlx1NzE0Q1x1NjY0M1x1NUU0Q1x1NjA0RFx1OEMwRVx1NzA3MFx1NjMyNVx1OEY4OVx1NUZCRFx1NjA2Mlx1ODZENFx1NTZERVx1NkJDMVx1NjA5NFx1NjE2N1x1NTM0OVx1NjBFMFx1NjY2Nlx1OEQzRlx1NzlGRFx1NEYxQVx1NzBFOVx1NkM0N1x1OEJCM1x1OEJGMlx1N0VEOFx1ODM2NFx1NjYwRlx1NUE1QVx1OUI0Mlx1NkQ1MVx1NkRGN1x1OEM0MVx1NkQzQlx1NEYxOVx1NzA2Qlx1ODNCN1x1NjIxNlx1NjBEMVx1OTcwRFx1OEQyN1x1Nzk3OFx1NTFGQlx1NTczRVx1NTdGQVx1NjczQVx1NzU3OFx1N0EzRFx1NzlFRlx1N0I5NVwiXSxcbltcImJjNDBcIixcIlx1N0NCRlx1N0NDMFx1N0NDMlx1N0NDM1x1N0NDNFx1N0NDNlx1N0NDOVx1N0NDQlx1N0NDRVwiLDYsXCJcdTdDRDhcdTdDREFcdTdDREJcdTdDRERcdTdDREVcdTdDRTFcIiw2LFwiXHU3Q0U5XCIsNSxcIlx1N0NGMFwiLDcsXCJcdTdDRjlcdTdDRkFcdTdDRkNcIiwxMyxcIlx1N0QwQlwiLDVdLFxuW1wiYmM4MFwiLFwiXHU3RDExXCIsMTQsXCJcdTdEMjFcdTdEMjNcdTdEMjRcdTdEMjVcdTdEMjZcdTdEMjhcdTdEMjlcdTdEMkFcdTdEMkNcdTdEMkRcdTdEMkVcdTdEMzBcIiw2LFwiXHU4MDhDXHU5OTY1XHU4RkY5XHU2RkMwXHU4QkE1XHU5RTIxXHU1OUVDXHU3RUU5XHU3RjA5XHU1NDA5XHU2NzgxXHU2OEQ4XHU4RjkxXHU3QzREXHU5NkM2XHU1M0NBXHU2MDI1XHU3NUJFXHU2QzcyXHU1MzczXHU1QUM5XHU3RUE3XHU2MzI0XHU1MUUwXHU4MTBBXHU1REYxXHU4NERGXHU2MjgwXHU1MTgwXHU1QjYzXHU0RjBFXHU3OTZEXHU1MjQyXHU2MEI4XHU2RDRFXHU1QkM0XHU1QkMyXHU4QkExXHU4QkIwXHU2NUUyXHU1RkNDXHU5NjQ1XHU1OTkzXHU3RUU3XHU3RUFBXHU1NjA5XHU2N0I3XHU1OTM5XHU0RjczXHU1QkI2XHU1MkEwXHU4MzVBXHU5ODhBXHU4RDNFXHU3NTMyXHU5NEJFXHU1MDQ3XHU3QTNDXHU0RUY3XHU2N0I2XHU5QTdFXHU1QUMxXHU2QjdDXHU3NkQxXHU1NzVBXHU1QzE2XHU3QjNBXHU5NUY0XHU3MTRFXHU1MTdDXHU4MEE5XHU4MjcwXHU1OTc4XHU3RjA0XHU4MzI3XHU2OEMwXHU2N0VDXHU3OEIxXHU3ODc3XHU2MkUzXHU2MzYxXHU3QjgwXHU0RkVEXHU1MjZBXHU1MUNGXHU4MzUwXHU2OURCXHU5Mjc0XHU4REY1XHU4RDMxXHU4OUMxXHU5NTJFXHU3QkFEXHU0RUY2XCJdLFxuW1wiYmQ0MFwiLFwiXHU3RDM3XCIsNTQsXCJcdTdENkZcIiw3XSxcbltcImJkODBcIixcIlx1N0Q3OFwiLDMyLFwiXHU1MDY1XHU4MjMwXHU1MjUxXHU5OTZGXHU2RTEwXHU2RTg1XHU2REE3XHU1RUZBXHU1MEY1XHU1OURDXHU1QzA2XHU2RDQ2XHU2QzVGXHU3NTg2XHU4NDhCXHU2ODY4XHU1OTU2XHU4QkIyXHU1MzIwXHU5MTcxXHU5NjREXHU4NTQ5XHU2OTEyXHU3OTAxXHU3MTI2XHU4MEY2XHU0RUE0XHU5MENBXHU2RDQ3XHU5QTg0XHU1QTA3XHU1NkJDXHU2NDA1XHU5NEYwXHU3N0VCXHU0RkE1XHU4MTFBXHU3MkUxXHU4OUQyXHU5OTdBXHU3RjM0XHU3RURFXHU1MjdGXHU2NTU5XHU5MTc1XHU4RjdGXHU4RjgzXHU1M0VCXHU3QTk2XHU2M0VEXHU2M0E1XHU3Njg2XHU3OUY4XHU4ODU3XHU5NjM2XHU2MjJBXHU1MkFCXHU4MjgyXHU2ODU0XHU2NzcwXHU2Mzc3XHU3NzZCXHU3QUVEXHU2RDAxXHU3RUQzXHU4OUUzXHU1OUQwXHU2MjEyXHU4NUM5XHU4MkE1XHU3NTRDXHU1MDFGXHU0RUNCXHU3NUE1XHU4QkVCXHU1QzRBXHU1REZFXHU3QjRCXHU2NUE0XHU5MUQxXHU0RUNBXHU2RDI1XHU4OTVGXHU3RDI3XHU5NTI2XHU0RUM1XHU4QzI4XHU4RkRCXHU5NzczXHU2NjRCXHU3OTgxXHU4RkQxXHU3MEVDXHU2RDc4XCJdLFxuW1wiYmU0MFwiLFwiXHU3RDk5XCIsMTIsXCJcdTdEQTdcIiw2LFwiXHU3REFGXCIsNDJdLFxuW1wiYmU4MFwiLFwiXHU3RERBXCIsMzIsXCJcdTVDM0RcdTUyQjJcdTgzNDZcdTUxNjJcdTgzMEVcdTc3NUJcdTY2NzZcdTlDQjhcdTRFQUNcdTYwQ0FcdTdDQkVcdTdDQjNcdTdFQ0ZcdTRFOTVcdThCNjZcdTY2NkZcdTk4ODhcdTk3NTlcdTU4ODNcdTY1NkNcdTk1NUNcdTVGODRcdTc1QzlcdTk3NTZcdTdBREZcdTdBREVcdTUxQzBcdTcwQUZcdTdBOThcdTYzRUFcdTdBNzZcdTdFQTBcdTczOTZcdTk3RURcdTRFNDVcdTcwNzhcdTRFNURcdTkxNTJcdTUzQTlcdTY1NTFcdTY1RTdcdTgxRkNcdTgyMDVcdTU0OEVcdTVDMzFcdTc1OUFcdTk3QTBcdTYyRDhcdTcyRDlcdTc1QkRcdTVDNDVcdTlBNzlcdTgzQ0FcdTVDNDBcdTU0ODBcdTc3RTlcdTRFM0VcdTZDQUVcdTgwNUFcdTYyRDJcdTYzNkVcdTVERThcdTUxNzdcdThERERcdThFMUVcdTk1MkZcdTRGRjFcdTUzRTVcdTYwRTdcdTcwQUNcdTUyNjdcdTYzNTBcdTlFNDNcdTVBMUZcdTUwMjZcdTc3MzdcdTUzNzdcdTdFRTJcdTY0ODVcdTY1MkJcdTYyODlcdTYzOThcdTUwMTRcdTcyMzVcdTg5QzlcdTUxQjNcdThCQzBcdTdFRERcdTU3NDdcdTgzQ0NcdTk0QTdcdTUxOUJcdTU0MUJcdTVDRkJcIl0sXG5bXCJiZjQwXCIsXCJcdTdERkJcIiw2Ml0sXG5bXCJiZjgwXCIsXCJcdTdFM0FcdTdFM0NcIiw0LFwiXHU3RTQyXCIsNCxcIlx1N0U0OFwiLDIxLFwiXHU0RkNBXHU3QUUzXHU2RDVBXHU5MEUxXHU5QThGXHU1NTgwXHU1NDk2XHU1MzYxXHU1NEFGXHU1RjAwXHU2M0U5XHU2OTc3XHU1MUVGXHU2MTY4XHU1MjBBXHU1ODJBXHU1MkQ4XHU1NzRFXHU3ODBEXHU3NzBCXHU1RUI3XHU2MTc3XHU3Q0UwXHU2MjVCXHU2Mjk3XHU0RUEyXHU3MDk1XHU4MDAzXHU2MkY3XHU3MEU0XHU5NzYwXHU1Nzc3XHU4MkRCXHU2N0VGXHU2OEY1XHU3OEQ1XHU5ODk3XHU3OUQxXHU1OEYzXHU1NEIzXHU1M0VGXHU2RTM0XHU1MTRCXHU1MjNCXHU1QkEyXHU4QkZFXHU4MEFGXHU1NTQzXHU1N0E2XHU2MDczXHU1NzUxXHU1NDJEXHU3QTdBXHU2MDUwXHU1QjU0XHU2M0E3XHU2MkEwXHU1M0UzXHU2MjYzXHU1QkM3XHU2N0FGXHU1NEVEXHU3QTlGXHU4MkU2XHU5MTc3XHU1RTkzXHU4OEU0XHU1OTM4XHU1N0FFXHU2MzBFXHU4REU4XHU4MEVGXHU1NzU3XHU3Qjc3XHU0RkE5XHU1RkVCXHU1QkJEXHU2QjNFXHU1MzIxXHU3QjUwXHU3MkMyXHU2ODQ2XHU3N0ZGXHU3NzM2XHU2NUY3XHU1MUI1XHU0RThGXHU3NkQ0XHU1Q0JGXHU3QUE1XHU4NDc1XHU1OTRFXHU5QjQxXHU1MDgwXCJdLFxuW1wiYzA0MFwiLFwiXHU3RTVFXCIsMzUsXCJcdTdFODNcIiwyMyxcIlx1N0U5Q1x1N0U5RFx1N0U5RVwiXSxcbltcImMwODBcIixcIlx1N0VBRVx1N0VCNFx1N0VCQlx1N0VCQ1x1N0VENlx1N0VFNFx1N0VFQ1x1N0VGOVx1N0YwQVx1N0YxMFx1N0YxRVx1N0YzN1x1N0YzOVx1N0YzQlwiLDYsXCJcdTdGNDNcdTdGNDZcIiw5LFwiXHU3RjUyXHU3RjUzXHU5OTg4XHU2MTI3XHU2RTgzXHU1NzY0XHU2NjA2XHU2MzQ2XHU1NkYwXHU2MkVDXHU2MjY5XHU1RUQzXHU5NjE0XHU1NzgzXHU2MkM5XHU1NTg3XHU4NzIxXHU4MTRBXHU4RkEzXHU1NTY2XHU4M0IxXHU2NzY1XHU4RDU2XHU4NEREXHU1QTZBXHU2ODBGXHU2MkU2XHU3QkVFXHU5NjExXHU1MTcwXHU2RjlDXHU4QzMwXHU2M0ZEXHU4OUM4XHU2MUQyXHU3RjA2XHU3MEMyXHU2RUU1XHU3NDA1XHU2OTk0XHU3MkZDXHU1RUNBXHU5MENFXHU2NzE3XHU2RDZBXHU2MzVFXHU1MkIzXHU3MjYyXHU4MDAxXHU0RjZDXHU1OUU1XHU5MTZBXHU3MEQ5XHU2RDlEXHU1MkQyXHU0RTUwXHU5NkY3XHU5NTZEXHU4NTdFXHU3OENBXHU3RDJGXHU1MTIxXHU1NzkyXHU2NEMyXHU4MDhCXHU3QzdCXHU2Q0VBXHU2OEYxXHU2OTVFXHU1MUI3XHU1Mzk4XHU2OEE4XHU3MjgxXHU5RUNFXHU3QkYxXHU3MkY4XHU3OUJCXHU2RjEzXHU3NDA2XHU2NzRFXHU5MUNDXHU5Q0E0XHU3OTNDXHU4Mzg5XHU4MzU0XHU1NDBGXHU2ODE3XHU0RTNEXHU1Mzg5XHU1MkIxXHU3ODNFXHU1Mzg2XHU1MjI5XHU1MDg4XHU0RjhCXHU0RkQwXCJdLFxuW1wiYzE0MFwiLFwiXHU3RjU2XHU3RjU5XHU3RjVCXHU3RjVDXHU3RjVEXHU3RjVFXHU3RjYwXHU3RjYzXCIsNCxcIlx1N0Y2Qlx1N0Y2Q1x1N0Y2RFx1N0Y2Rlx1N0Y3MFx1N0Y3M1x1N0Y3NVx1N0Y3Nlx1N0Y3N1x1N0Y3OFx1N0Y3QVx1N0Y3Qlx1N0Y3Q1x1N0Y3RFx1N0Y3Rlx1N0Y4MFx1N0Y4MlwiLDcsXCJcdTdGOEJcdTdGOERcdTdGOEZcIiw0LFwiXHU3Rjk1XCIsNCxcIlx1N0Y5Qlx1N0Y5Q1x1N0ZBMFx1N0ZBMlx1N0ZBM1x1N0ZBNVx1N0ZBNlx1N0ZBOFwiLDYsXCJcdTdGQjFcIl0sXG5bXCJjMTgwXCIsXCJcdTdGQjNcIiw0LFwiXHU3RkJBXHU3RkJCXHU3RkJFXHU3RkMwXHU3RkMyXHU3RkMzXHU3RkM0XHU3RkM2XHU3RkM3XHU3RkM4XHU3RkM5XHU3RkNCXHU3RkNEXHU3RkNGXCIsNCxcIlx1N0ZENlx1N0ZEN1x1N0ZEOVwiLDUsXCJcdTdGRTJcdTdGRTNcdTc1RTJcdTdBQ0JcdTdDOTJcdTZDQTVcdTk2QjZcdTUyOUJcdTc0ODNcdTU0RTlcdTRGRTlcdTgwNTRcdTgzQjJcdThGREVcdTk1NzBcdTVFQzlcdTYwMUNcdTZEOUZcdTVFMThcdTY1NUJcdTgxMzhcdTk0RkVcdTYwNEJcdTcwQkNcdTdFQzNcdTdDQUVcdTUxQzlcdTY4ODFcdTdDQjFcdTgyNkZcdTRFMjRcdThGODZcdTkxQ0ZcdTY2N0VcdTRFQUVcdThDMDVcdTY0QTlcdTgwNEFcdTUwREFcdTc1OTdcdTcxQ0VcdTVCRTVcdThGQkRcdTZGNjZcdTRFODZcdTY0ODJcdTk1NjNcdTVFRDZcdTY1OTlcdTUyMTdcdTg4QzJcdTcwQzhcdTUyQTNcdTczMEVcdTc0MzNcdTY3OTdcdTc4RjdcdTk3MTZcdTRFMzRcdTkwQkJcdTlDREVcdTZEQ0JcdTUxREJcdThENDFcdTU0MURcdTYyQ0VcdTczQjJcdTgzRjFcdTk2RjZcdTlGODRcdTk0QzNcdTRGMzZcdTdGOUFcdTUxQ0NcdTcwNzVcdTk2NzVcdTVDQURcdTk4ODZcdTUzRTZcdTRFRTRcdTZFOUNcdTc0MDlcdTY5QjRcdTc4NkJcdTk5OEZcdTc1NTlcdTUyMThcdTc2MjRcdTZENDFcdTY3RjNcdTUxNkRcdTlGOTlcdTgwNEJcdTU0OTlcdTdCM0NcdTdBQkZcIl0sXG5bXCJjMjQwXCIsXCJcdTdGRTRcdTdGRTdcdTdGRThcdTdGRUFcdTdGRUJcdTdGRUNcdTdGRURcdTdGRUZcdTdGRjJcdTdGRjRcIiw2LFwiXHU3RkZEXHU3RkZFXHU3RkZGXHU4MDAyXHU4MDA3XHU4MDA4XHU4MDA5XHU4MDBBXHU4MDBFXHU4MDBGXHU4MDExXHU4MDEzXHU4MDFBXHU4MDFCXHU4MDFEXHU4MDFFXHU4MDFGXHU4MDIxXHU4MDIzXHU4MDI0XHU4MDJCXCIsNSxcIlx1ODAzMlx1ODAzNFx1ODAzOVx1ODAzQVx1ODAzQ1x1ODAzRVx1ODA0MFx1ODA0MVx1ODA0NFx1ODA0NVx1ODA0N1x1ODA0OFx1ODA0OVx1ODA0RVx1ODA0Rlx1ODA1MFx1ODA1MVx1ODA1M1x1ODA1NVx1ODA1Nlx1ODA1N1wiXSxcbltcImMyODBcIixcIlx1ODA1OVx1ODA1QlwiLDEzLFwiXHU4MDZCXCIsNSxcIlx1ODA3MlwiLDExLFwiXHU5Njg2XHU1Nzg0XHU2MkUyXHU5NjQ3XHU2OTdDXHU1QTA0XHU2NDAyXHU3QkQzXHU2RjBGXHU5NjRCXHU4MkE2XHU1MzYyXHU5ODg1XHU1RTkwXHU3MDg5XHU2M0IzXHU1MzY0XHU4NjRGXHU5QzgxXHU5RTkzXHU3ODhDXHU5NzMyXHU4REVGXHU4RDQyXHU5RTdGXHU2RjVFXHU3OTg0XHU1RjU1XHU5NjQ2XHU2MjJFXHU5QTc0XHU1NDE1XHU5NEREXHU0RkEzXHU2NUM1XHU1QzY1XHU1QzYxXHU3RjE1XHU4NjUxXHU2QzJGXHU1RjhCXHU3Mzg3XHU2RUU0XHU3RUZGXHU1Q0U2XHU2MzFCXHU1QjZBXHU2RUU2XHU1Mzc1XHU0RTcxXHU2M0EwXHU3NTY1XHU2MkExXHU4RjZFXHU0RjI2XHU0RUQxXHU2Q0E2XHU3RUI2XHU4QkJBXHU4NDFEXHU4N0JBXHU3RjU3XHU5MDNCXHU5NTIzXHU3QkE5XHU5QUExXHU4OEY4XHU4NDNEXHU2RDFCXHU5QTg2XHU3RURDXHU1OTg4XHU5RUJCXHU3MzlCXHU3ODAxXHU4NjgyXHU5QTZDXHU5QTgyXHU1NjFCXHU1NDE3XHU1N0NCXHU0RTcwXHU5RUE2XHU1MzU2XHU4RkM4XHU4MTA5XHU3NzkyXHU5OTkyXHU4NkVFXHU2RUUxXHU4NTEzXHU2NkZDXHU2MTYyXHU2RjJCXCJdLFxuW1wiYzM0MFwiLFwiXHU4MDdFXHU4MDgxXHU4MDgyXHU4MDg1XHU4MDg4XHU4MDhBXHU4MDhEXCIsNSxcIlx1ODA5NFx1ODA5NVx1ODA5N1x1ODA5OVx1ODA5RVx1ODBBM1x1ODBBNlx1ODBBN1x1ODBBOFx1ODBBQ1x1ODBCMFx1ODBCM1x1ODBCNVx1ODBCNlx1ODBCOFx1ODBCOVx1ODBCQlx1ODBDNVx1ODBDN1wiLDQsXCJcdTgwQ0ZcIiw2LFwiXHU4MEQ4XHU4MERGXHU4MEUwXHU4MEUyXHU4MEUzXHU4MEU2XHU4MEVFXHU4MEY1XHU4MEY3XHU4MEY5XHU4MEZCXHU4MEZFXHU4MEZGXHU4MTAwXHU4MTAxXHU4MTAzXHU4MTA0XHU4MTA1XHU4MTA3XHU4MTA4XHU4MTBCXCJdLFxuW1wiYzM4MFwiLFwiXHU4MTBDXHU4MTE1XHU4MTE3XHU4MTE5XHU4MTFCXHU4MTFDXHU4MTFEXHU4MTFGXCIsMTIsXCJcdTgxMkRcdTgxMkVcdTgxMzBcdTgxMzNcdTgxMzRcdTgxMzVcdTgxMzdcdTgxMzlcIiw0LFwiXHU4MTNGXHU4QzI5XHU4MjkyXHU4MzJCXHU3NkYyXHU2QzEzXHU1RkQ5XHU4M0JEXHU3MzJCXHU4MzA1XHU5NTFBXHU2QkRCXHU3N0RCXHU5NEM2XHU1MzZGXHU4MzAyXHU1MTkyXHU1RTNEXHU4QzhDXHU4RDM4XHU0RTQ4XHU3M0FCXHU2NzlBXHU2ODg1XHU5MTc2XHU5NzA5XHU3MTY0XHU2Q0ExXHU3NzA5XHU1QTkyXHU5NTQxXHU2QkNGXHU3RjhFXHU2NjI3XHU1QkQwXHU1OUI5XHU1QTlBXHU5NUU4XHU5NUY3XHU0RUVDXHU4NDBDXHU4NDk5XHU2QUFDXHU3NkRGXHU5NTMwXHU3MzFCXHU2OEE2XHU1QjVGXHU3NzJGXHU5MTlBXHU5NzYxXHU3Q0RDXHU4RkY3XHU4QzFDXHU1RjI1XHU3QzczXHU3OUQ4XHU4OUM1XHU2Q0NDXHU4NzFDXHU1QkM2XHU1RTQyXHU2OEM5XHU3NzIwXHU3RUY1XHU1MTk1XHU1MTREXHU1MkM5XHU1QTI5XHU3RjA1XHU5NzYyXHU4MkQ3XHU2M0NGXHU3Nzg0XHU4NUQwXHU3OUQyXHU2RTNBXHU1RTk5XHU1OTk5XHU4NTExXHU3MDZEXHU2QzExXHU2MkJGXHU3NkJGXHU2NTRGXHU2MEFGXHU5NUZEXHU2NjBFXHU4NzlGXHU5RTIzXHU5NEVEXHU1NDBEXHU1NDdEXHU4QzJDXHU2NDc4XCJdLFxuW1wiYzQ0MFwiLFwiXHU4MTQwXCIsNSxcIlx1ODE0N1x1ODE0OVx1ODE0RFx1ODE0RVx1ODE0Rlx1ODE1Mlx1ODE1Nlx1ODE1N1x1ODE1OFx1ODE1QlwiLDQsXCJcdTgxNjFcdTgxNjJcdTgxNjNcdTgxNjRcdTgxNjZcdTgxNjhcdTgxNkFcdTgxNkJcdTgxNkNcdTgxNkZcdTgxNzJcdTgxNzNcdTgxNzVcdTgxNzZcdTgxNzdcdTgxNzhcdTgxODFcdTgxODNcIiw0LFwiXHU4MTg5XHU4MThCXHU4MThDXHU4MThEXHU4MThFXHU4MTkwXHU4MTkyXCIsNSxcIlx1ODE5OVx1ODE5QVx1ODE5RVwiLDQsXCJcdTgxQTRcdTgxQTVcIl0sXG5bXCJjNDgwXCIsXCJcdTgxQTdcdTgxQTlcdTgxQUJcIiw3LFwiXHU4MUI0XCIsNSxcIlx1ODFCQ1x1ODFCRFx1ODFCRVx1ODFCRlx1ODFDNFx1ODFDNVx1ODFDN1x1ODFDOFx1ODFDOVx1ODFDQlx1ODFDRFwiLDYsXCJcdTY0NzlcdTg2MTFcdTZBMjFcdTgxOUNcdTc4RThcdTY0NjlcdTlCNTRcdTYyQjlcdTY3MkJcdTgzQUJcdTU4QThcdTlFRDhcdTZDQUJcdTZGMjBcdTVCREVcdTk2NENcdThDMEJcdTcyNUZcdTY3RDBcdTYyQzdcdTcyNjFcdTRFQTlcdTU5QzZcdTZCQ0RcdTU4OTNcdTY2QUVcdTVFNTVcdTUyREZcdTYxNTVcdTY3MjhcdTc2RUVcdTc3NjZcdTcyNjdcdTdBNDZcdTYyRkZcdTU0RUFcdTU0NTBcdTk0QTBcdTkwQTNcdTVBMUNcdTdFQjNcdTZDMTZcdTRFNDNcdTU5NzZcdTgwMTBcdTU5NDhcdTUzNTdcdTc1MzdcdTk2QkVcdTU2Q0FcdTYzMjBcdTgxMTFcdTYwN0NcdTk1RjlcdTZERDZcdTU0NjJcdTk5ODFcdTUxODVcdTVBRTlcdTgwRkRcdTU5QUVcdTk3MTNcdTUwMkFcdTZDRTVcdTVDM0NcdTYyREZcdTRGNjBcdTUzM0ZcdTgxN0JcdTkwMDZcdTZFQkFcdTg1MkJcdTYyQzhcdTVFNzRcdTc4QkVcdTY0QjVcdTYzN0JcdTVGRjVcdTVBMThcdTkxN0ZcdTlFMUZcdTVDM0ZcdTYzNEZcdTgwNDJcdTVCN0RcdTU1NkVcdTk1NEFcdTk1NERcdTZEODVcdTYwQThcdTY3RTBcdTcyREVcdTUxRERcdTVCODFcIl0sXG5bXCJjNTQwXCIsXCJcdTgxRDRcIiwxNCxcIlx1ODFFNFx1ODFFNVx1ODFFNlx1ODFFOFx1ODFFOVx1ODFFQlx1ODFFRVwiLDQsXCJcdTgxRjVcIiw1LFwiXHU4MUZEXHU4MUZGXHU4MjAzXHU4MjA3XCIsNCxcIlx1ODIwRVx1ODIwRlx1ODIxMVx1ODIxM1x1ODIxNVwiLDUsXCJcdTgyMURcdTgyMjBcdTgyMjRcdTgyMjVcdTgyMjZcdTgyMjdcdTgyMjlcdTgyMkVcdTgyMzJcdTgyM0FcdTgyM0NcdTgyM0RcdTgyM0ZcIl0sXG5bXCJjNTgwXCIsXCJcdTgyNDBcdTgyNDFcdTgyNDJcdTgyNDNcdTgyNDVcdTgyNDZcdTgyNDhcdTgyNEFcdTgyNENcdTgyNERcdTgyNEVcdTgyNTBcIiw3LFwiXHU4MjU5XHU4MjVCXHU4MjVDXHU4MjVEXHU4MjVFXHU4MjYwXCIsNyxcIlx1ODI2OVx1NjJFN1x1NkNERVx1NzI1Qlx1NjI2RFx1OTRBRVx1N0VCRFx1ODExM1x1NkQ1M1x1NTE5Q1x1NUYwNFx1NTk3NFx1NTJBQVx1NjAxMlx1NTk3M1x1NjY5Nlx1ODY1MFx1NzU5Rlx1NjMyQVx1NjFFNlx1N0NFRlx1OEJGQVx1NTRFNlx1NkIyN1x1OUUyNVx1NkJCNFx1ODVENVx1NTQ1NVx1NTA3Nlx1NkNBNFx1NTU2QVx1OERCNFx1NzIyQ1x1NUUxNVx1NjAxNVx1NzQzNlx1NjJDRFx1NjM5Mlx1NzI0Q1x1NUY5OFx1NkU0M1x1NkQzRVx1NjUwMFx1NkY1OFx1NzZEOFx1NzhEMFx1NzZGQ1x1NzU1NFx1NTIyNFx1NTNEQlx1NEU1M1x1NUU5RVx1NjVDMVx1ODAyQVx1ODBENlx1NjI5Qlx1NTQ4Nlx1NTIyOFx1NzBBRVx1ODg4RFx1OEREMVx1NkNFMVx1NTQ3OFx1ODBEQVx1NTdGOVx1ODhGNFx1OEQ1NFx1OTY2QVx1OTE0RFx1NEY2OVx1NkM5Qlx1NTVCN1x1NzZDNlx1NzgzMFx1NjJBOFx1NzBGOVx1NkY4RVx1NUY2RFx1ODRFQ1x1NjhEQVx1Nzg3Q1x1N0JGN1x1ODFBOFx1NjcwQlx1OUU0Rlx1NjM2N1x1NzhCMFx1NTc2Rlx1NzgxMlx1OTczOVx1NjI3OVx1NjJBQlx1NTI4OFx1NzQzNVx1NkJEN1wiXSxcbltcImM2NDBcIixcIlx1ODI2QVx1ODI2Qlx1ODI2Q1x1ODI2RFx1ODI3MVx1ODI3NVx1ODI3Nlx1ODI3N1x1ODI3OFx1ODI3Qlx1ODI3Q1x1ODI4MFx1ODI4MVx1ODI4M1x1ODI4NVx1ODI4Nlx1ODI4N1x1ODI4OVx1ODI4Q1x1ODI5MFx1ODI5M1x1ODI5NFx1ODI5NVx1ODI5Nlx1ODI5QVx1ODI5Qlx1ODI5RVx1ODJBMFx1ODJBMlx1ODJBM1x1ODJBN1x1ODJCMlx1ODJCNVx1ODJCNlx1ODJCQVx1ODJCQlx1ODJCQ1x1ODJCRlx1ODJDMFx1ODJDMlx1ODJDM1x1ODJDNVx1ODJDNlx1ODJDOVx1ODJEMFx1ODJENlx1ODJEOVx1ODJEQVx1ODJERFx1ODJFMlx1ODJFN1x1ODJFOFx1ODJFOVx1ODJFQVx1ODJFQ1x1ODJFRFx1ODJFRVx1ODJGMFx1ODJGMlx1ODJGM1x1ODJGNVx1ODJGNlx1ODJGOFwiXSxcbltcImM2ODBcIixcIlx1ODJGQVx1ODJGQ1wiLDQsXCJcdTgzMEFcdTgzMEJcdTgzMERcdTgzMTBcdTgzMTJcdTgzMTNcdTgzMTZcdTgzMThcdTgzMTlcdTgzMURcIiw5LFwiXHU4MzI5XHU4MzJBXHU4MzJFXHU4MzMwXHU4MzMyXHU4MzM3XHU4MzNCXHU4MzNEXHU1NTY0XHU4MTNFXHU3NUIyXHU3NkFFXHU1MzM5XHU3NURFXHU1MEZCXHU1QzQxXHU4QjZDXHU3QkM3XHU1MDRGXHU3MjQ3XHU5QTk3XHU5OEQ4XHU2RjAyXHU3NEUyXHU3OTY4XHU2NDg3XHU3N0E1XHU2MkZDXHU5ODkxXHU4RDJCXHU1NEMxXHU4MDU4XHU0RTUyXHU1NzZBXHU4MkY5XHU4NDBEXHU1RTczXHU1MUVEXHU3NEY2XHU4QkM0XHU1QzRGXHU1NzYxXHU2Q0ZDXHU5ODg3XHU1QTQ2XHU3ODM0XHU5QjQ0XHU4RkVCXHU3Qzk1XHU1MjU2XHU2MjUxXHU5NEZBXHU0RUM2XHU4Mzg2XHU4NDYxXHU4M0U5XHU4NEIyXHU1N0Q0XHU2NzM0XHU1NzAzXHU2NjZFXHU2RDY2XHU4QzMxXHU2NkREXHU3MDExXHU2NzFGXHU2QjNBXHU2ODE2XHU2MjFBXHU1OUJCXHU0RTAzXHU1MUM0XHU2RjA2XHU2N0QyXHU2QzhGXHU1MTc2XHU2OENCXHU1OTQ3XHU2QjY3XHU3NTY2XHU1RDBFXHU4MTEwXHU5RjUwXHU2NUQ3XHU3OTQ4XHU3OTQxXHU5QTkxXHU4RDc3XHU1QzgyXHU0RTVFXHU0RjAxXHU1NDJGXHU1OTUxXHU3ODBDXHU1NjY4XHU2QzE0XHU4RkM0XHU1RjAzXHU2QzdEXHU2Q0UzXHU4QkFCXHU2MzkwXCJdLFxuW1wiYzc0MFwiLFwiXHU4MzNFXHU4MzNGXHU4MzQxXHU4MzQyXHU4MzQ0XHU4MzQ1XHU4MzQ4XHU4MzRBXCIsNCxcIlx1ODM1M1x1ODM1NVwiLDQsXCJcdTgzNURcdTgzNjJcdTgzNzBcIiw2LFwiXHU4Mzc5XHU4MzdBXHU4MzdFXCIsNixcIlx1ODM4N1x1ODM4OFx1ODM4QVx1ODM4Qlx1ODM4Q1x1ODM4RFx1ODM4Rlx1ODM5MFx1ODM5MVx1ODM5NFx1ODM5NVx1ODM5Nlx1ODM5N1x1ODM5OVx1ODM5QVx1ODM5RFx1ODM5Rlx1ODNBMVwiLDYsXCJcdTgzQUNcdTgzQURcdTgzQUVcIl0sXG5bXCJjNzgwXCIsXCJcdTgzQUZcdTgzQjVcdTgzQkJcdTgzQkVcdTgzQkZcdTgzQzJcdTgzQzNcdTgzQzRcdTgzQzZcdTgzQzhcdTgzQzlcdTgzQ0JcdTgzQ0RcdTgzQ0VcdTgzRDBcdTgzRDFcdTgzRDJcdTgzRDNcdTgzRDVcdTgzRDdcdTgzRDlcdTgzREFcdTgzREJcdTgzREVcdTgzRTJcdTgzRTNcdTgzRTRcdTgzRTZcdTgzRTdcdTgzRThcdTgzRUJcdTgzRUNcdTgzRURcdTYwNzBcdTZEM0RcdTcyNzVcdTYyNjZcdTk0OEVcdTk0QzVcdTUzNDNcdThGQzFcdTdCN0VcdTRFREZcdThDMjZcdTRFN0VcdTlFRDRcdTk0QjFcdTk0QjNcdTUyNERcdTZGNUNcdTkwNjNcdTZENDVcdThDMzRcdTU4MTFcdTVENENcdTZCMjBcdTZCNDlcdTY3QUFcdTU0NUJcdTgxNTRcdTdGOENcdTU4OTlcdTg1MzdcdTVGM0FcdTYyQTJcdTZBNDdcdTk1MzlcdTY1NzJcdTYwODRcdTY4NjVcdTc3QTdcdTRFNTRcdTRGQThcdTVERTdcdTk3OThcdTY0QUNcdTdGRDhcdTVDRURcdTRGQ0ZcdTdBOERcdTUyMDdcdTgzMDRcdTRFMTRcdTYwMkZcdTdBODNcdTk0QTZcdTRGQjVcdTRFQjJcdTc5RTZcdTc0MzRcdTUyRTRcdTgyQjlcdTY0RDJcdTc5QkRcdTVCRERcdTZDODFcdTk3NTJcdThGN0JcdTZDMjJcdTUwM0VcdTUzN0ZcdTZFMDVcdTY0Q0VcdTY2NzRcdTZDMzBcdTYwQzVcdTk4NzdcdThCRjdcdTVFODZcdTc0M0NcdTdBNzdcdTc5Q0JcdTRFMThcdTkwQjFcdTc0MDNcdTZDNDJcdTU2REFcdTkxNEJcdTZDQzVcdThEOEJcdTUzM0FcdTg2QzZcdTY2RjJcdThFQUZcdTVDNDhcdTlBNzFcdTZFMjBcIl0sXG5bXCJjODQwXCIsXCJcdTgzRUVcdTgzRUZcdTgzRjNcIiw0LFwiXHU4M0ZBXHU4M0ZCXHU4M0ZDXHU4M0ZFXHU4M0ZGXHU4NDAwXHU4NDAyXHU4NDA1XHU4NDA3XHU4NDA4XHU4NDA5XHU4NDBBXHU4NDEwXHU4NDEyXCIsNSxcIlx1ODQxOVx1ODQxQVx1ODQxQlx1ODQxRVwiLDUsXCJcdTg0MjlcIiw3LFwiXHU4NDMyXCIsNSxcIlx1ODQzOVx1ODQzQVx1ODQzQlx1ODQzRVwiLDcsXCJcdTg0NDdcdTg0NDhcdTg0NDlcIl0sXG5bXCJjODgwXCIsXCJcdTg0NEFcIiw2LFwiXHU4NDUyXCIsNCxcIlx1ODQ1OFx1ODQ1RFx1ODQ1RVx1ODQ1Rlx1ODQ2MFx1ODQ2Mlx1ODQ2NFwiLDQsXCJcdTg0NkFcdTg0NkVcdTg0NkZcdTg0NzBcdTg0NzJcdTg0NzRcdTg0NzdcdTg0NzlcdTg0N0JcdTg0N0NcdTUzRDZcdTVBMzZcdTlGOEJcdThEQTNcdTUzQkJcdTU3MDhcdTk4QTdcdTY3NDNcdTkxOUJcdTZDQzlcdTUxNjhcdTc1Q0FcdTYyRjNcdTcyQUNcdTUyMzhcdTUyOURcdTdGM0FcdTcwOTRcdTc2MzhcdTUzNzRcdTlFNEFcdTY5QjdcdTc4NkVcdTk2QzBcdTg4RDlcdTdGQTRcdTcxMzZcdTcxQzNcdTUxODlcdTY3RDNcdTc0RTRcdTU4RTRcdTY1MThcdTU2QjdcdThCQTlcdTk5NzZcdTYyNzBcdTdFRDVcdTYwRjlcdTcwRURcdTU4RUNcdTRFQzFcdTRFQkFcdTVGQ0RcdTk3RTdcdTRFRkJcdThCQTRcdTUyMDNcdTU5OEFcdTdFQUJcdTYyNTRcdTRFQ0RcdTY1RTVcdTYyMEVcdTgzMzhcdTg0QzlcdTgzNjNcdTg3OERcdTcxOTRcdTZFQjZcdTVCQjlcdTdFRDJcdTUxOTdcdTYzQzlcdTY3RDRcdTgwODlcdTgzMzlcdTg4MTVcdTUxMTJcdTVCN0FcdTU5ODJcdThGQjFcdTRFNzNcdTZDNURcdTUxNjVcdTg5MjVcdThGNkZcdTk2MkVcdTg1NEFcdTc0NUVcdTk1MTBcdTk1RjBcdTZEQTZcdTgyRTVcdTVGMzFcdTY0OTJcdTZEMTJcdTg0MjhcdTgxNkVcdTlDQzNcdTU4NUVcdThENUJcdTRFMDlcdTUzQzFcIl0sXG5bXCJjOTQwXCIsXCJcdTg0N0RcIiw0LFwiXHU4NDgzXHU4NDg0XHU4NDg1XHU4NDg2XHU4NDhBXHU4NDhEXHU4NDhGXCIsNyxcIlx1ODQ5OFx1ODQ5QVx1ODQ5Qlx1ODQ5RFx1ODQ5RVx1ODQ5Rlx1ODRBMFx1ODRBMlwiLDEyLFwiXHU4NEIwXHU4NEIxXHU4NEIzXHU4NEI1XHU4NEI2XHU4NEI3XHU4NEJCXHU4NEJDXHU4NEJFXHU4NEMwXHU4NEMyXHU4NEMzXHU4NEM1XHU4NEM2XHU4NEM3XHU4NEM4XHU4NENCXHU4NENDXHU4NENFXHU4NENGXHU4NEQyXHU4NEQ0XHU4NEQ1XHU4NEQ3XCJdLFxuW1wiYzk4MFwiLFwiXHU4NEQ4XCIsNCxcIlx1ODRERVx1ODRFMVx1ODRFMlx1ODRFNFx1ODRFN1wiLDQsXCJcdTg0RURcdTg0RUVcdTg0RUZcdTg0RjFcIiwxMCxcIlx1ODRGRFx1ODRGRVx1ODUwMFx1ODUwMVx1ODUwMlx1NEYxRVx1NjU2M1x1Njg1MVx1NTVEM1x1NEUyN1x1NjQxNFx1OUE5QVx1NjI2Qlx1NUFDMlx1NzQ1Rlx1ODI3Mlx1NkRBOVx1NjhFRVx1NTBFN1x1ODM4RVx1NzgwMlx1Njc0MFx1NTIzOVx1NkM5OVx1N0VCMVx1NTBCQlx1NTU2NVx1NzE1RVx1N0I1Qlx1NjY1Mlx1NzNDQVx1ODJFQlx1Njc0OVx1NUM3MVx1NTIyMFx1NzE3RFx1ODg2Qlx1OTVFQVx1OTY1NVx1NjRDNVx1OEQ2MVx1ODFCM1x1NTU4NFx1NkM1NVx1NjI0N1x1N0YyRVx1NTg5Mlx1NEYyNFx1NTU0Nlx1OEQ0Rlx1NjY0Q1x1NEUwQVx1NUMxQVx1ODhGM1x1NjhBMlx1NjM0RVx1N0EwRFx1NzBFN1x1ODI4RFx1NTJGQVx1OTdGNlx1NUMxMVx1NTRFOFx1OTBCNVx1N0VDRFx1NTk2Mlx1OEQ0QVx1ODZDN1x1ODIwQ1x1ODIwRFx1OEQ2Nlx1NjQ0NFx1NUMwNFx1NjE1MVx1NkQ4OVx1NzkzRVx1OEJCRVx1NzgzN1x1NzUzM1x1NTQ3Qlx1NEYzOFx1OEVBQlx1NkRGMVx1NUEyMFx1N0VDNVx1Nzk1RVx1NkM4OFx1NUJBMVx1NUE3Nlx1NzUxQVx1ODBCRVx1NjE0RVx1NkUxN1x1NThGMFx1NzUxRlx1NzUyNVx1NzI3Mlx1NTM0N1x1N0VGM1wiXSxcbltcImNhNDBcIixcIlx1ODUwM1wiLDgsXCJcdTg1MERcdTg1MEVcdTg1MEZcdTg1MTBcdTg1MTJcdTg1MTRcdTg1MTVcdTg1MTZcdTg1MThcdTg1MTlcdTg1MUJcdTg1MUNcdTg1MURcdTg1MUVcdTg1MjBcdTg1MjJcIiw4LFwiXHU4NTJEXCIsOSxcIlx1ODUzRVwiLDQsXCJcdTg1NDRcdTg1NDVcdTg1NDZcdTg1NDdcdTg1NEJcIiwxMF0sXG5bXCJjYTgwXCIsXCJcdTg1NTdcdTg1NThcdTg1NUFcdTg1NUJcdTg1NUNcdTg1NURcdTg1NUZcIiw0LFwiXHU4NTY1XHU4NTY2XHU4NTY3XHU4NTY5XCIsOCxcIlx1ODU3M1x1ODU3NVx1ODU3Nlx1ODU3N1x1ODU3OFx1ODU3Q1x1ODU3RFx1ODU3Rlx1ODU4MFx1ODU4MVx1NzcwMVx1NzZEQlx1NTI2OVx1ODBEQ1x1NTcyM1x1NUUwOFx1NTkzMVx1NzJFRVx1NjVCRFx1NkU3Rlx1OEJEN1x1NUMzOFx1ODY3MVx1NTM0MVx1NzdGM1x1NjJGRVx1NjVGNlx1NEVDMFx1OThERlx1ODY4MFx1NUI5RVx1OEJDNlx1NTNGMlx1NzdFMlx1NEY3Rlx1NUM0RVx1OUE3Nlx1NTlDQlx1NUYwRlx1NzkzQVx1NThFQlx1NEUxNlx1NjdGRlx1NEU4Qlx1NjJFRFx1OEE5M1x1OTAxRFx1NTJCRlx1NjYyRlx1NTVEQ1x1NTY2Q1x1OTAwMlx1NEVENVx1NEY4RFx1OTFDQVx1OTk3MFx1NkMwRlx1NUUwMlx1NjA0M1x1NUJBNFx1ODlDNlx1OEJENVx1NjUzNlx1NjI0Qlx1OTk5Nlx1NUI4OFx1NUJGRlx1NjM4OFx1NTUyRVx1NTNEN1x1NzYyNlx1NTE3RFx1ODUyQ1x1NjdBMlx1NjhCM1x1NkI4QVx1NjI5Mlx1OEY5M1x1NTNENFx1ODIxMlx1NkREMVx1NzU4Rlx1NEU2Nlx1OEQ0RVx1NUI3MFx1NzE5Rlx1ODVBRlx1NjY5MVx1NjZEOVx1N0Y3Mlx1ODcwMFx1OUVDRFx1OUYyMFx1NUM1RVx1NjcyRlx1OEZGMFx1NjgxMVx1Njc1Rlx1NjIwRFx1N0FENlx1NTg4NVx1NUVCNlx1NjU3MFx1NkYzMVwiXSxcbltcImNiNDBcIixcIlx1ODU4Mlx1ODU4M1x1ODU4Nlx1ODU4OFwiLDYsXCJcdTg1OTBcIiwxMCxcIlx1ODU5RFwiLDYsXCJcdTg1QTVcdTg1QTZcdTg1QTdcdTg1QTlcdTg1QUJcdTg1QUNcdTg1QURcdTg1QjFcIiw1LFwiXHU4NUI4XHU4NUJBXCIsNixcIlx1ODVDMlwiLDYsXCJcdTg1Q0FcIiw0LFwiXHU4NUQxXHU4NUQyXCJdLFxuW1wiY2I4MFwiLFwiXHU4NUQ0XHU4NUQ2XCIsNSxcIlx1ODVERFwiLDYsXCJcdTg1RTVcdTg1RTZcdTg1RTdcdTg1RThcdTg1RUFcIiwxNCxcIlx1NjA1NVx1NTIzN1x1ODAwRFx1NjQ1NFx1ODg3MFx1NzUyOVx1NUUwNVx1NjgxM1x1NjJGNFx1OTcxQ1x1NTNDQ1x1NzIzRFx1OEMwMVx1NkMzNFx1Nzc2MVx1N0EwRVx1NTQyRVx1NzdBQ1x1OTg3QVx1ODIxQ1x1OEJGNFx1Nzg1NVx1NjcxNFx1NzBDMVx1NjVBRlx1NjQ5NVx1NTYzNlx1NjAxRFx1NzlDMVx1NTNGOFx1NEUxRFx1NkI3Qlx1ODA4Nlx1NUJGQVx1NTVFM1x1NTZEQlx1NEYzQVx1NEYzQ1x1OTk3Mlx1NURGM1x1Njc3RVx1ODAzOFx1NjAwMlx1OTg4Mlx1OTAwMVx1NUI4Qlx1OEJCQ1x1OEJGNVx1NjQxQ1x1ODI1OFx1NjRERVx1NTVGRFx1ODJDRlx1OTE2NVx1NEZEN1x1N0QyMFx1OTAxRlx1N0M5Rlx1NTBGM1x1NTg1MVx1NkVBRlx1NUJCRlx1OEJDOVx1ODA4M1x1OTE3OFx1ODQ5Q1x1N0I5N1x1ODY3RFx1OTY4Qlx1OTY4Rlx1N0VFNVx1OUFEM1x1Nzg4RVx1NUM4MVx1N0E1N1x1OTA0Mlx1OTZBN1x1Nzk1Rlx1NUI1OVx1NjM1Rlx1N0IwQlx1ODREMVx1NjhBRFx1NTUwNlx1N0YyOVx1NzQxMFx1N0QyMlx1OTUwMVx1NjI0MFx1NTg0Q1x1NEVENlx1NUI4M1x1NTk3OVx1NTg1NFwiXSxcbltcImNjNDBcIixcIlx1ODVGOVx1ODVGQVx1ODVGQ1x1ODVGRFx1ODVGRVx1ODYwMFwiLDQsXCJcdTg2MDZcIiwxMCxcIlx1ODYxMlx1ODYxM1x1ODYxNFx1ODYxNVx1ODYxN1wiLDE1LFwiXHU4NjI4XHU4NjJBXCIsMTMsXCJcdTg2MzlcdTg2M0FcdTg2M0JcdTg2M0RcdTg2M0VcdTg2M0ZcdTg2NDBcIl0sXG5bXCJjYzgwXCIsXCJcdTg2NDFcIiwxMSxcIlx1ODY1Mlx1ODY1M1x1ODY1NVwiLDQsXCJcdTg2NUJcdTg2NUNcdTg2NURcdTg2NUZcdTg2NjBcdTg2NjFcdTg2NjNcIiw3LFwiXHU3MzZEXHU2MzFFXHU4RTRCXHU4RTBGXHU4MENFXHU4MkQ0XHU2MkFDXHU1M0YwXHU2Q0YwXHU5MTVFXHU1OTJBXHU2MDAxXHU2QzcwXHU1NzREXHU2NDRBXHU4RDJBXHU3NjJCXHU2RUU5XHU1NzVCXHU2QTgwXHU3NUYwXHU2RjZEXHU4QzJEXHU4QzA4XHU1NzY2XHU2QkVGXHU4ODkyXHU3OEIzXHU2M0EyXHU1M0Y5XHU3MEFEXHU2QzY0XHU1ODU4XHU2NDJBXHU1ODAyXHU2OEUwXHU4MTlCXHU1NTEwXHU3Q0Q2XHU1MDE4XHU4RUJBXHU2RENDXHU4RDlGXHU3MEVCXHU2MzhGXHU2RDlCXHU2RUQ0XHU3RUU2XHU4NDA0XHU2ODQzXHU5MDAzXHU2REQ4XHU5Njc2XHU4QkE4XHU1OTU3XHU3Mjc5XHU4NUU0XHU4MTdFXHU3NUJDXHU4QThBXHU2OEFGXHU1MjU0XHU4RTIyXHU5NTExXHU2M0QwXHU5ODk4XHU4RTQ0XHU1NTdDXHU0RjUzXHU2NkZGXHU1NjhGXHU2MEQ1XHU2RDk1XHU1MjQzXHU1QzQ5XHU1OTI5XHU2REZCXHU1ODZCXHU3NTMwXHU3NTFDXHU2MDZDXHU4MjE0XHU4MTQ2XHU2MzExXHU2NzYxXHU4RkUyXHU3NzNBXHU4REYzXHU4RDM0XHU5NEMxXHU1RTE2XHU1Mzg1XHU1NDJDXHU3MEMzXCJdLFxuW1wiY2Q0MFwiLFwiXHU4NjZEXHU4NjZGXHU4NjcwXHU4NjcyXCIsNixcIlx1ODY4M1wiLDYsXCJcdTg2OEVcIiw0LFwiXHU4Njk0XHU4Njk2XCIsNSxcIlx1ODY5RVwiLDQsXCJcdTg2QTVcdTg2QTZcdTg2QUJcdTg2QURcdTg2QUVcdTg2QjJcdTg2QjNcdTg2QjdcdTg2QjhcdTg2QjlcdTg2QkJcIiw0LFwiXHU4NkMxXHU4NkMyXHU4NkMzXHU4NkM1XHU4NkM4XHU4NkNDXHU4NkNEXHU4NkQyXHU4NkQzXHU4NkQ1XHU4NkQ2XHU4NkQ3XHU4NkRBXHU4NkRDXCJdLFxuW1wiY2Q4MFwiLFwiXHU4NkREXHU4NkUwXHU4NkUxXHU4NkUyXHU4NkUzXHU4NkU1XHU4NkU2XHU4NkU3XHU4NkU4XHU4NkVBXHU4NkVCXHU4NkVDXHU4NkVGXHU4NkY1XHU4NkY2XHU4NkY3XHU4NkZBXHU4NkZCXHU4NkZDXHU4NkZEXHU4NkZGXHU4NzAxXHU4NzA0XHU4NzA1XHU4NzA2XHU4NzBCXHU4NzBDXHU4NzBFXHU4NzBGXHU4NzEwXHU4NzExXHU4NzE0XHU4NzE2XHU2QzQwXHU1RUY3XHU1MDVDXHU0RUFEXHU1RUFEXHU2MzNBXHU4MjQ3XHU5MDFBXHU2ODUwXHU5MTZFXHU3N0IzXHU1NDBDXHU5NERDXHU1RjY0XHU3QUU1XHU2ODc2XHU2MzQ1XHU3QjUyXHU3RURGXHU3NURCXHU1MDc3XHU2Mjk1XHU1OTM0XHU5MDBGXHU1MUY4XHU3OUMzXHU3QTgxXHU1NkZFXHU1RjkyXHU5MDE0XHU2RDgyXHU1QzYwXHU1NzFGXHU1NDEwXHU1MTU0XHU2RTREXHU1NkUyXHU2M0E4XHU5ODkzXHU4MTdGXHU4NzE1XHU4OTJBXHU5MDAwXHU1NDFFXHU1QzZGXHU4MUMwXHU2MkQ2XHU2MjU4XHU4MTMxXHU5RTM1XHU5NjQwXHU5QTZFXHU5QTdDXHU2OTJEXHU1OUE1XHU2MkQzXHU1NTNFXHU2MzE2XHU1NEM3XHU4NkQ5XHU2RDNDXHU1QTAzXHU3NEU2XHU4ODlDXHU2QjZBXHU1OTE2XHU4QzRDXHU1RjJGXHU2RTdFXHU3M0E5XHU5ODdEXHU0RTM4XHU3MEY3XHU1QjhDXHU3ODk3XHU2MzNEXHU2NjVBXHU3Njk2XHU2MENCXHU1QjlCXHU1QTQ5XHU0RTA3XHU4MTU1XHU2QzZBXHU3MzhCXHU0RUExXHU2Nzg5XHU3RjUxXHU1RjgwXHU2NUZBXHU2NzFCXHU1RkQ4XHU1OTg0XHU1QTAxXCJdLFxuW1wiY2U0MFwiLFwiXHU4NzE5XHU4NzFCXHU4NzFEXHU4NzFGXHU4NzIwXHU4NzI0XHU4NzI2XHU4NzI3XHU4NzI4XHU4NzJBXHU4NzJCXHU4NzJDXHU4NzJEXHU4NzJGXHU4NzMwXHU4NzMyXHU4NzMzXHU4NzM1XHU4NzM2XHU4NzM4XHU4NzM5XHU4NzNBXHU4NzNDXHU4NzNEXHU4NzQwXCIsNixcIlx1ODc0QVx1ODc0Qlx1ODc0RFx1ODc0Rlx1ODc1MFx1ODc1MVx1ODc1Mlx1ODc1NFx1ODc1NVx1ODc1Nlx1ODc1OFx1ODc1QVwiLDUsXCJcdTg3NjFcdTg3NjJcdTg3NjZcIiw3LFwiXHU4NzZGXHU4NzcxXHU4NzcyXHU4NzczXHU4Nzc1XCJdLFxuW1wiY2U4MFwiLFwiXHU4Nzc3XHU4Nzc4XHU4Nzc5XHU4NzdBXHU4NzdGXHU4NzgwXHU4NzgxXHU4Nzg0XHU4Nzg2XHU4Nzg3XHU4Nzg5XHU4NzhBXHU4NzhDXHU4NzhFXCIsNCxcIlx1ODc5NFx1ODc5NVx1ODc5Nlx1ODc5OFwiLDYsXCJcdTg3QTBcIiw0LFwiXHU1RENEXHU1RkFFXHU1MzcxXHU5N0U2XHU4RkREXHU2ODQ1XHU1NkY0XHU1NTJGXHU2MERGXHU0RTNBXHU2RjREXHU3RUY0XHU4MkM3XHU4NDBFXHU1OUQ0XHU0RjFGXHU0RjJBXHU1QzNFXHU3RUFDXHU2NzJBXHU4NTFBXHU1NDczXHU3NTRGXHU4MEMzXHU1NTgyXHU5QjRGXHU0RjREXHU2RTJEXHU4QzEzXHU1QzA5XHU2MTcwXHU1MzZCXHU3NjFGXHU2RTI5XHU4NjhBXHU2NTg3XHU5NUZCXHU3RUI5XHU1NDNCXHU3QTMzXHU3RDBBXHU5NUVFXHU1NUUxXHU3RkMxXHU3NEVFXHU2MzFEXHU4NzE3XHU2REExXHU3QTlEXHU2MjExXHU2NUExXHU1MzY3XHU2M0UxXHU2QzgzXHU1REVCXHU1NDVDXHU5NEE4XHU0RTRDXHU2QzYxXHU4QkVDXHU1QzRCXHU2NUUwXHU4MjlDXHU2OEE3XHU1NDNFXHU1NDM0XHU2QkNCXHU2QjY2XHU0RTk0XHU2MzQyXHU1MzQ4XHU4MjFFXHU0RjBEXHU0RkFFXHU1NzVFXHU2MjBBXHU5NkZFXHU2NjY0XHU3MjY5XHU1MkZGXHU1MkExXHU2MDlGXHU4QkVGXHU2NjE0XHU3MTk5XHU2NzkwXHU4OTdGXHU3ODUyXHU3N0ZEXHU2NjcwXHU1NjNCXHU1NDM4XHU5NTIxXHU3MjdBXCJdLFxuW1wiY2Y0MFwiLFwiXHU4N0E1XHU4N0E2XHU4N0E3XHU4N0E5XHU4N0FBXHU4N0FFXHU4N0IwXHU4N0IxXHU4N0IyXHU4N0I0XHU4N0I2XHU4N0I3XHU4N0I4XHU4N0I5XHU4N0JCXHU4N0JDXHU4N0JFXHU4N0JGXHU4N0MxXCIsNCxcIlx1ODdDN1x1ODdDOFx1ODdDOVx1ODdDQ1wiLDQsXCJcdTg3RDRcIiw2LFwiXHU4N0RDXHU4N0REXHU4N0RFXHU4N0RGXHU4N0UxXHU4N0UyXHU4N0UzXHU4N0U0XHU4N0U2XHU4N0U3XHU4N0U4XHU4N0U5XHU4N0VCXHU4N0VDXHU4N0VEXHU4N0VGXCIsOV0sXG5bXCJjZjgwXCIsXCJcdTg3RkFcdTg3RkJcdTg3RkNcdTg3RkRcdTg3RkZcdTg4MDBcdTg4MDFcdTg4MDJcdTg4MDRcIiw1LFwiXHU4ODBCXCIsNyxcIlx1ODgxNFx1ODgxN1x1ODgxOFx1ODgxOVx1ODgxQVx1ODgxQ1wiLDQsXCJcdTg4MjNcdTdBMDBcdTYwNkZcdTVFMENcdTYwODlcdTgxOURcdTU5MTVcdTYwRENcdTcxODRcdTcwRUZcdTZFQUFcdTZDNTBcdTcyODBcdTZBODRcdTg4QURcdTVFMkRcdTRFNjBcdTVBQjNcdTU1OUNcdTk0RTNcdTZEMTdcdTdDRkJcdTk2OTlcdTYyMEZcdTdFQzZcdTc3OEVcdTg2N0VcdTUzMjNcdTk3MUVcdThGOTZcdTY2ODdcdTVDRTFcdTRGQTBcdTcyRURcdTRFMEJcdTUzQTZcdTU5MEZcdTU0MTNcdTYzODBcdTk1MjhcdTUxNDhcdTRFRDlcdTlDOUNcdTdFQTRcdTU0QjhcdThEMjRcdTg4NTRcdTgyMzdcdTk1RjJcdTZEOEVcdTVGMjZcdTVBQ0NcdTY2M0VcdTk2NjlcdTczQjBcdTczMkVcdTUzQkZcdTgxN0FcdTk5ODVcdTdGQTFcdTVCQUFcdTk2NzdcdTk2NTBcdTdFQkZcdTc2RjhcdTUzQTJcdTk1NzZcdTk5OTlcdTdCQjFcdTg5NDRcdTZFNThcdTRFNjFcdTdGRDRcdTc5NjVcdThCRTZcdTYwRjNcdTU0Q0RcdTRFQUJcdTk4NzlcdTVERjdcdTZBNjFcdTUwQ0ZcdTU0MTFcdThDNjFcdTg0MjdcdTc4NURcdTk3MDRcdTUyNEFcdTU0RUVcdTU2QTNcdTk1MDBcdTZEODhcdTVCQjVcdTZEQzZcdTY2NTNcIl0sXG5bXCJkMDQwXCIsXCJcdTg4MjRcIiwxMyxcIlx1ODgzM1wiLDUsXCJcdTg4M0FcdTg4M0JcdTg4M0RcdTg4M0VcdTg4M0ZcdTg4NDFcdTg4NDJcdTg4NDNcdTg4NDZcIiw1LFwiXHU4ODRFXCIsNSxcIlx1ODg1NVx1ODg1Nlx1ODg1OFx1ODg1QVwiLDYsXCJcdTg4NjZcdTg4NjdcdTg4NkFcdTg4NkRcdTg4NkZcdTg4NzFcdTg4NzNcdTg4NzRcdTg4NzVcdTg4NzZcdTg4NzhcdTg4NzlcdTg4N0FcIl0sXG5bXCJkMDgwXCIsXCJcdTg4N0JcdTg4N0NcdTg4ODBcdTg4ODNcdTg4ODZcdTg4ODdcdTg4ODlcdTg4OEFcdTg4OENcdTg4OEVcdTg4OEZcdTg4OTBcdTg4OTFcdTg4OTNcdTg4OTRcdTg4OTVcdTg4OTdcIiw0LFwiXHU4ODlEXCIsNCxcIlx1ODhBM1x1ODhBNVwiLDUsXCJcdTVDMEZcdTVCNURcdTY4MjFcdTgwOTZcdTU1NzhcdTdCMTFcdTY1NDhcdTY5NTRcdTRFOUJcdTZCNDdcdTg3NEVcdTk3OEJcdTUzNEZcdTYzMUZcdTY0M0FcdTkwQUFcdTY1OUNcdTgwQzFcdThDMTBcdTUxOTlcdTY4QjBcdTUzNzhcdTg3RjlcdTYxQzhcdTZDQzRcdTZDRkJcdThDMjJcdTVDNTFcdTg1QUFcdTgyQUZcdTk1MENcdTZCMjNcdThGOUJcdTY1QjBcdTVGRkJcdTVGQzNcdTRGRTFcdTg4NDVcdTY2MUZcdTgxNjVcdTczMjlcdTYwRkFcdTUxNzRcdTUyMTFcdTU3OEJcdTVGNjJcdTkwQTJcdTg4NENcdTkxOTJcdTVFNzhcdTY3NEZcdTYwMjdcdTU5RDNcdTUxNDRcdTUxRjZcdTgwRjhcdTUzMDhcdTZDNzlcdTk2QzRcdTcxOEFcdTRGMTFcdTRGRUVcdTdGOUVcdTY3M0RcdTU1QzVcdTk1MDhcdTc5QzBcdTg4OTZcdTdFRTNcdTU4OUZcdTYyMENcdTk3MDBcdTg2NUFcdTU2MThcdTk4N0JcdTVGOTBcdThCQjhcdTg0QzRcdTkxNTdcdTUzRDlcdTY1RURcdTVFOEZcdTc1NUNcdTYwNjRcdTdENkVcdTVBN0ZcdTdFRUFcdTdFRURcdThGNjlcdTU1QTdcdTVCQTNcdTYwQUNcdTY1Q0JcdTczODRcIl0sXG5bXCJkMTQwXCIsXCJcdTg4QUNcdTg4QUVcdTg4QUZcdTg4QjBcdTg4QjJcIiw0LFwiXHU4OEI4XHU4OEI5XHU4OEJBXHU4OEJCXHU4OEJEXHU4OEJFXHU4OEJGXHU4OEMwXHU4OEMzXHU4OEM0XHU4OEM3XHU4OEM4XHU4OENBXHU4OENCXHU4OENDXHU4OENEXHU4OENGXHU4OEQwXHU4OEQxXHU4OEQzXHU4OEQ2XHU4OEQ3XHU4OERBXCIsNCxcIlx1ODhFMFx1ODhFMVx1ODhFNlx1ODhFN1x1ODhFOVwiLDYsXCJcdTg4RjJcdTg4RjVcdTg4RjZcdTg4RjdcdTg4RkFcdTg4RkJcdTg4RkRcdTg4RkZcdTg5MDBcdTg5MDFcdTg5MDNcIiw1XSxcbltcImQxODBcIixcIlx1ODkwOVx1ODkwQlwiLDQsXCJcdTg5MTFcdTg5MTRcIiw0LFwiXHU4OTFDXCIsNCxcIlx1ODkyMlx1ODkyM1x1ODkyNFx1ODkyNlx1ODkyN1x1ODkyOFx1ODkyOVx1ODkyQ1x1ODkyRFx1ODkyRVx1ODkyRlx1ODkzMVx1ODkzMlx1ODkzM1x1ODkzNVx1ODkzN1x1OTAwOVx1NzY2M1x1NzcyOVx1N0VEQVx1OTc3NFx1ODU5Qlx1NUI2Nlx1N0E3NFx1OTZFQVx1ODg0MFx1NTJDQlx1NzE4Rlx1NUZBQVx1NjVFQ1x1OEJFMlx1NUJGQlx1OUE2Rlx1NURFMVx1NkI4OVx1NkM1Qlx1OEJBRFx1OEJBRlx1OTAwQVx1OEZDNVx1NTM4Qlx1NjJCQ1x1OUUyNlx1OUUyRFx1NTQ0MFx1NEUyQlx1ODJCRFx1NzI1OVx1ODY5Q1x1NUQxNlx1ODg1OVx1NkRBRlx1OTZDNVx1NTREMVx1NEU5QVx1OEJCNlx1NzEwOVx1NTRCRFx1OTYwOVx1NzBERlx1NkRGOVx1NzZEMFx1NEUyNVx1NzgxNFx1ODcxMlx1NUNBOVx1NUVGNlx1OEEwMFx1OTg5Q1x1OTYwRVx1NzA4RVx1NkNCRlx1NTk0NFx1NjNBOVx1NzczQ1x1ODg0RFx1NkYxNFx1ODI3M1x1NTgzMFx1NzFENVx1NTM4Q1x1NzgxQVx1OTZDMVx1NTUwMVx1NUY2Nlx1NzEzMFx1NUJCNFx1OEMxQVx1OUE4Q1x1NkI4M1x1NTkyRVx1OUUyRlx1NzlFN1x1Njc2OFx1NjI2Q1x1NEY2Rlx1NzVBMVx1N0Y4QVx1NkQwQlx1OTYzM1x1NkMyN1x1NEVGMFx1NzVEMlx1NTE3Qlx1NjgzN1x1NkYzRVx1OTA4MFx1ODE3MFx1NTk5Nlx1NzQ3NlwiXSxcbltcImQyNDBcIixcIlx1ODkzOFwiLDgsXCJcdTg5NDJcdTg5NDNcdTg5NDVcIiwyNCxcIlx1ODk2MFwiLDUsXCJcdTg5NjdcIiwxOSxcIlx1ODk3Q1wiXSxcbltcImQyODBcIixcIlx1ODk3RFx1ODk3RVx1ODk4MFx1ODk4Mlx1ODk4NFx1ODk4NVx1ODk4N1wiLDI2LFwiXHU2NDQ3XHU1QzI3XHU5MDY1XHU3QTkxXHU4QzIzXHU1OURBXHU1NEFDXHU4MjAwXHU4MzZGXHU4OTgxXHU4MDAwXHU2OTMwXHU1NjRFXHU4MDM2XHU3MjM3XHU5MUNFXHU1MUI2XHU0RTVGXHU5ODc1XHU2Mzk2XHU0RTFBXHU1M0Y2XHU2NkYzXHU4MTRCXHU1OTFDXHU2REIyXHU0RTAwXHU1OEY5XHU1MzNCXHU2M0Q2XHU5NEYxXHU0RjlEXHU0RjBBXHU4ODYzXHU5ODkwXHU1OTM3XHU5MDU3XHU3OUZCXHU0RUVBXHU4MEYwXHU3NTkxXHU2QzgyXHU1QjlDXHU1OUU4XHU1RjVEXHU2OTA1XHU4NjgxXHU1MDFBXHU1REYyXHU0RTU5XHU3N0UzXHU0RUU1XHU4MjdBXHU2MjkxXHU2NjEzXHU5MDkxXHU1Qzc5XHU0RUJGXHU1Rjc5XHU4MUM2XHU5MDM4XHU4MDg0XHU3NUFCXHU0RUE2XHU4OEQ0XHU2MTBGXHU2QkM1XHU1RkM2XHU0RTQ5XHU3NkNBXHU2RUEyXHU4QkUzXHU4QkFFXHU4QzBBXHU4QkQxXHU1RjAyXHU3RkZDXHU3RkNDXHU3RUNFXHU4MzM1XHU4MzZCXHU1NkUwXHU2QkI3XHU5N0YzXHU5NjM0XHU1OUZCXHU1NDFGXHU5NEY2XHU2REVCXHU1QkM1XHU5OTZFXHU1QzM5XHU1RjE1XHU5NjkwXCJdLFxuW1wiZDM0MFwiLFwiXHU4OUEyXCIsMzAsXCJcdTg5QzNcdTg5Q0RcdTg5RDNcdTg5RDRcdTg5RDVcdTg5RDdcdTg5RDhcdTg5RDlcdTg5REJcdTg5RERcdTg5REZcdTg5RTBcdTg5RTFcdTg5RTJcdTg5RTRcdTg5RTdcdTg5RThcdTg5RTlcdTg5RUFcdTg5RUNcdTg5RURcdTg5RUVcdTg5RjBcdTg5RjFcdTg5RjJcdTg5RjRcIiw2XSxcbltcImQzODBcIixcIlx1ODlGQlwiLDQsXCJcdThBMDFcIiw1LFwiXHU4QTA4XCIsMjEsXCJcdTUzNzBcdTgyRjFcdTZBMzFcdTVBNzRcdTlFNzBcdTVFOTRcdTdGMjhcdTgzQjlcdTg0MjRcdTg0MjVcdTgzNjdcdTg3NDdcdThGQ0VcdThENjJcdTc2QzhcdTVGNzFcdTk4OTZcdTc4NkNcdTY2MjBcdTU0REZcdTYyRTVcdTRGNjNcdTgxQzNcdTc1QzhcdTVFQjhcdTk2Q0RcdThFMEFcdTg2RjlcdTU0OEZcdTZDRjNcdTZEOENcdTZDMzhcdTYwN0ZcdTUyQzdcdTc1MjhcdTVFN0RcdTRGMThcdTYwQTBcdTVGRTdcdTVDMjRcdTc1MzFcdTkwQUVcdTk0QzBcdTcyQjlcdTZDQjlcdTZFMzhcdTkxNDlcdTY3MDlcdTUzQ0JcdTUzRjNcdTRGNTFcdTkxQzlcdThCRjFcdTUzQzhcdTVFN0NcdThGQzJcdTZERTRcdTRFOEVcdTc2QzJcdTY5ODZcdTg2NUVcdTYxMUFcdTgyMDZcdTRGNTlcdTRGREVcdTkwM0VcdTlDN0NcdTYxMDlcdTZFMURcdTZFMTRcdTk2ODVcdTRFODhcdTVBMzFcdTk2RThcdTRFMEVcdTVDN0ZcdTc5QjlcdTVCODdcdThCRURcdTdGQkRcdTczODlcdTU3REZcdTgyOEJcdTkwQzFcdTU0MDFcdTkwNDdcdTU1QkJcdTVDRUFcdTVGQTFcdTYxMDhcdTZCMzJcdTcyRjFcdTgwQjJcdThBODlcIl0sXG5bXCJkNDQwXCIsXCJcdThBMUVcIiwzMSxcIlx1OEEzRlwiLDgsXCJcdThBNDlcIiwyMV0sXG5bXCJkNDgwXCIsXCJcdThBNUZcIiwyNSxcIlx1OEE3QVwiLDYsXCJcdTZENzRcdTVCRDNcdTg4RDVcdTk4ODRcdThDNkJcdTlBNkRcdTlFMzNcdTZFMEFcdTUxQTRcdTUxNDNcdTU3QTNcdTg4ODFcdTUzOUZcdTYzRjRcdThGOTVcdTU2RURcdTU0NThcdTU3MDZcdTczM0ZcdTZFOTBcdTdGMThcdThGRENcdTgyRDFcdTYxM0ZcdTYwMjhcdTk2NjJcdTY2RjBcdTdFQTZcdThEOEFcdThEQzNcdTk0QTVcdTVDQjNcdTdDQTRcdTY3MDhcdTYwQTZcdTk2MDVcdTgwMThcdTRFOTFcdTkwRTdcdTUzMDBcdTk2NjhcdTUxNDFcdThGRDBcdTg1NzRcdTkxNURcdTY2NTVcdTk3RjVcdTVCNTVcdTUzMURcdTc4MzhcdTY3NDJcdTY4M0RcdTU0QzlcdTcwN0VcdTVCQjBcdThGN0RcdTUxOERcdTU3MjhcdTU0QjFcdTY1MTJcdTY2ODJcdThENUVcdThENDNcdTgxMEZcdTg0NkNcdTkwNkRcdTdDREZcdTUxRkZcdTg1RkJcdTY3QTNcdTY1RTlcdTZGQTFcdTg2QTRcdThFODFcdTU2NkFcdTkwMjBcdTc2ODJcdTcwNzZcdTcxRTVcdThEMjNcdTYyRTlcdTUyMTlcdTZDRkRcdThEM0NcdTYwMEVcdTU4OUVcdTYxOEVcdTY2RkVcdThENjBcdTYyNEVcdTU1QjNcdTZFMjNcdTY3MkRcdThGNjdcIl0sXG5bXCJkNTQwXCIsXCJcdThBODFcIiw3LFwiXHU4QThCXCIsNyxcIlx1OEE5NFwiLDQ2XSxcbltcImQ1ODBcIixcIlx1OEFDM1wiLDMyLFwiXHU5NEUxXHU5NUY4XHU3NzI4XHU2ODA1XHU2OUE4XHU1NDhCXHU0RTREXHU3MEI4XHU4QkM4XHU2NDU4XHU2NThCXHU1Qjg1XHU3QTg0XHU1MDNBXHU1QkU4XHU3N0JCXHU2QkUxXHU4QTc5XHU3Qzk4XHU2Q0JFXHU3NkNGXHU2NUE5XHU4Rjk3XHU1RDJEXHU1QzU1XHU4NjM4XHU2ODA4XHU1MzYwXHU2MjE4XHU3QUQ5XHU2RTVCXHU3RUZEXHU2QTFGXHU3QUUwXHU1RjcwXHU2RjMzXHU1RjIwXHU2MzhDXHU2REE4XHU2NzU2XHU0RTA4XHU1RTEwXHU4RDI2XHU0RUQ3XHU4MEMwXHU3NjM0XHU5NjlDXHU2MkRCXHU2NjJEXHU2MjdFXHU2Q0JDXHU4RDc1XHU3MTY3XHU3RjY5XHU1MTQ2XHU4MDg3XHU1M0VDXHU5MDZFXHU2Mjk4XHU1NEYyXHU4NkYwXHU4Rjk5XHU4MDA1XHU5NTE3XHU4NTE3XHU4RkQ5XHU2RDU5XHU3M0NEXHU2NTlGXHU3NzFGXHU3NTA0XHU3ODI3XHU4MUZCXHU4RDFFXHU5NDg4XHU0RkE2XHU2Nzk1XHU3NUI5XHU4QkNBXHU5NzA3XHU2MzJGXHU5NTQ3XHU5NjM1XHU4NEI4XHU2MzIzXHU3NzQxXHU1RjgxXHU3MkYwXHU0RTg5XHU2MDE0XHU2NTc0XHU2MkVGXHU2QjYzXHU2NTNGXCJdLFxuW1wiZDY0MFwiLFwiXHU4QUU0XCIsMzQsXCJcdThCMDhcIiwyN10sXG5bXCJkNjgwXCIsXCJcdThCMjRcdThCMjVcdThCMjdcIiwzMCxcIlx1NUUyN1x1NzVDN1x1OTBEMVx1OEJDMVx1ODI5RFx1Njc5RFx1NjUyRlx1NTQzMVx1ODcxOFx1NzdFNVx1ODBBMlx1ODEwMlx1NkM0MVx1NEU0Qlx1N0VDN1x1ODA0Q1x1NzZGNFx1NjkwRFx1NkI5Nlx1NjI2N1x1NTAzQ1x1NEY4NFx1NTc0MFx1NjMwN1x1NkI2Mlx1OERCRVx1NTNFQVx1NjVFOFx1N0VCOFx1NUZEN1x1NjMxQVx1NjNCN1x1ODFGM1x1ODFGNFx1N0Y2RVx1NUUxQ1x1NUNEOVx1NTIzNlx1NjY3QVx1NzlFOVx1N0ExQVx1OEQyOFx1NzA5OVx1NzVENFx1NkVERVx1NkNCQlx1N0E5Mlx1NEUyRFx1NzZDNVx1NUZFMFx1OTQ5Rlx1ODg3N1x1N0VDOFx1NzlDRFx1ODBCRlx1OTFDRFx1NEVGMlx1NEYxN1x1ODIxRlx1NTQ2OFx1NURERVx1NkQzMlx1OEJDQ1x1N0NBNVx1OEY3NFx1ODA5OFx1NUUxQVx1NTQ5Mlx1NzZCMVx1NUI5OVx1NjYzQ1x1OUFBNFx1NzNFMFx1NjgyQVx1ODZEQlx1NjczMVx1NzMyQVx1OEJGOFx1OEJEQlx1OTAxMFx1N0FGOVx1NzBEQlx1NzE2RVx1NjJDNFx1NzdBOVx1NTYzMVx1NEUzQlx1ODQ1N1x1NjdGMVx1NTJBOVx1ODZDMFx1OEQyRVx1OTRGOFx1N0I1MVwiXSxcbltcImQ3NDBcIixcIlx1OEI0NlwiLDMxLFwiXHU4QjY3XCIsNCxcIlx1OEI2RFwiLDI1XSxcbltcImQ3ODBcIixcIlx1OEI4N1wiLDI0LFwiXHU4QkFDXHU4QkIxXHU4QkJCXHU4QkM3XHU4QkQwXHU4QkVBXHU4QzA5XHU4QzFFXHU0RjRGXHU2Q0U4XHU3OTVEXHU5QTdCXHU2MjkzXHU3MjJBXHU2MkZEXHU0RTEzXHU3ODE2XHU4RjZDXHU2NEIwXHU4RDVBXHU3QkM2XHU2ODY5XHU1RTg0XHU4OEM1XHU1OTg2XHU2NDlFXHU1OEVFXHU3MkI2XHU2OTBFXHU5NTI1XHU4RkZEXHU4RDU4XHU1NzYwXHU3RjAwXHU4QzA2XHU1MUM2XHU2MzQ5XHU2MkQ5XHU1MzUzXHU2ODRDXHU3NDIyXHU4MzAxXHU5MTRDXHU1NTQ0XHU3NzQwXHU3MDdDXHU2RDRBXHU1MTc5XHU1NEE4XHU4RDQ0XHU1OUZGXHU2RUNCXHU2REM0XHU1QjVDXHU3RDJCXHU0RUQ0XHU3QzdEXHU2RUQzXHU1QjUwXHU4MUVBXHU2RTBEXHU1QjU3XHU5QjAzXHU2OEQ1XHU4RTJBXHU1Qjk3XHU3RUZDXHU2MDNCXHU3RUI1XHU5MEI5XHU4RDcwXHU1OTRGXHU2M0NEXHU3OURGXHU4REIzXHU1MzUyXHU2NUNGXHU3OTU2XHU4QkM1XHU5NjNCXHU3RUM0XHU5NEJCXHU3RTgyXHU1NjM0XHU5MTg5XHU2NzAwXHU3RjZBXHU1QzBBXHU5MDc1XHU2NjI4XHU1REU2XHU0RjUwXHU2N0RFXHU1MDVBXHU0RjVDXHU1NzUwXHU1RUE3XCJdLFxuW1wiZDg0MFwiLFwiXHU4QzM4XCIsOCxcIlx1OEM0Mlx1OEM0M1x1OEM0NFx1OEM0NVx1OEM0OFx1OEM0QVx1OEM0Qlx1OEM0RFwiLDcsXCJcdThDNTZcdThDNTdcdThDNThcdThDNTlcdThDNUJcIiw1LFwiXHU4QzYzXCIsNixcIlx1OEM2Q1wiLDYsXCJcdThDNzRcdThDNzVcdThDNzZcdThDNzdcdThDN0JcIiw2LFwiXHU4QzgzXHU4Qzg0XHU4Qzg2XHU4Qzg3XCJdLFxuW1wiZDg4MFwiLFwiXHU4Qzg4XHU4QzhCXHU4QzhEXCIsNixcIlx1OEM5NVx1OEM5Nlx1OEM5N1x1OEM5OVwiLDIwLFwiXHU0RThEXHU0RTBDXHU1MTQwXHU0RTEwXHU1RUZGXHU1MzQ1XHU0RTE1XHU0RTk4XHU0RTFFXHU5QjMyXHU1QjZDXHU1NjY5XHU0RTI4XHU3OUJBXHU0RTNGXHU1MzE1XHU0RTQ3XHU1OTJEXHU3MjNCXHU1MzZFXHU2QzEwXHU1NkRGXHU4MEU0XHU5OTk3XHU2QkQzXHU3NzdFXHU5RjE3XHU0RTM2XHU0RTlGXHU5RjEwXHU0RTVDXHU0RTY5XHU0RTkzXHU4Mjg4XHU1QjVCXHU1NTZDXHU1NjBGXHU0RUM0XHU1MzhEXHU1MzlEXHU1M0EzXHU1M0E1XHU1M0FFXHU5NzY1XHU4RDVEXHU1MzFBXHU1M0Y1XHU1MzI2XHU1MzJFXHU1MzNFXHU4RDVDXHU1MzY2XHU1MzYzXHU1MjAyXHU1MjA4XHU1MjBFXHU1MjJEXHU1MjMzXHU1MjNGXHU1MjQwXHU1MjRDXHU1MjVFXHU1MjYxXHU1MjVDXHU4NEFGXHU1MjdEXHU1MjgyXHU1MjgxXHU1MjkwXHU1MjkzXHU1MTgyXHU3RjU0XHU0RUJCXHU0RUMzXHU0RUM5XHU0RUMyXHU0RUU4XHU0RUUxXHU0RUVCXHU0RURFXHU0RjFCXHU0RUYzXHU0RjIyXHU0RjY0XHU0RUY1XHU0RjI1XHU0RjI3XHU0RjA5XHU0RjJCXHU0RjVFXHU0RjY3XHU2NTM4XHU0RjVBXHU0RjVEXCJdLFxuW1wiZDk0MFwiLFwiXHU4Q0FFXCIsNjJdLFxuW1wiZDk4MFwiLFwiXHU4Q0VEXCIsMzIsXCJcdTRGNUZcdTRGNTdcdTRGMzJcdTRGM0RcdTRGNzZcdTRGNzRcdTRGOTFcdTRGODlcdTRGODNcdTRGOEZcdTRGN0VcdTRGN0JcdTRGQUFcdTRGN0NcdTRGQUNcdTRGOTRcdTRGRTZcdTRGRThcdTRGRUFcdTRGQzVcdTRGREFcdTRGRTNcdTRGRENcdTRGRDFcdTRGREZcdTRGRjhcdTUwMjlcdTUwNENcdTRGRjNcdTUwMkNcdTUwMEZcdTUwMkVcdTUwMkRcdTRGRkVcdTUwMUNcdTUwMENcdTUwMjVcdTUwMjhcdTUwN0VcdTUwNDNcdTUwNTVcdTUwNDhcdTUwNEVcdTUwNkNcdTUwN0JcdTUwQTVcdTUwQTdcdTUwQTlcdTUwQkFcdTUwRDZcdTUxMDZcdTUwRURcdTUwRUNcdTUwRTZcdTUwRUVcdTUxMDdcdTUxMEJcdTRFRERcdTZDM0RcdTRGNThcdTRGNjVcdTRGQ0VcdTlGQTBcdTZDNDZcdTdDNzRcdTUxNkVcdTVERkRcdTlFQzlcdTk5OThcdTUxODFcdTU5MTRcdTUyRjlcdTUzMERcdThBMDdcdTUzMTBcdTUxRUJcdTU5MTlcdTUxNTVcdTRFQTBcdTUxNTZcdTRFQjNcdTg4NkVcdTg4QTRcdTRFQjVcdTgxMTRcdTg4RDJcdTc5ODBcdTVCMzRcdTg4MDNcdTdGQjhcdTUxQUJcdTUxQjFcdTUxQkRcdTUxQkNcIl0sXG5bXCJkYTQwXCIsXCJcdThEMEVcIiwxNCxcIlx1OEQyMFx1OEQ1MVx1OEQ1Mlx1OEQ1N1x1OEQ1Rlx1OEQ2NVx1OEQ2OFx1OEQ2OVx1OEQ2QVx1OEQ2Q1x1OEQ2RVx1OEQ2Rlx1OEQ3MVx1OEQ3Mlx1OEQ3OFwiLDgsXCJcdThEODJcdThEODNcdThEODZcdThEODdcdThEODhcdThEODlcdThEOENcIiw0LFwiXHU4RDkyXHU4RDkzXHU4RDk1XCIsOSxcIlx1OERBMFx1OERBMVwiXSxcbltcImRhODBcIixcIlx1OERBMlx1OERBNFwiLDEyLFwiXHU4REIyXHU4REI2XHU4REI3XHU4REI5XHU4REJCXHU4REJEXHU4REMwXHU4REMxXHU4REMyXHU4REM1XHU4REM3XHU4REM4XHU4REM5XHU4RENBXHU4RENEXHU4REQwXHU4REQyXHU4REQzXHU4REQ0XHU1MUM3XHU1MTk2XHU1MUEyXHU1MUE1XHU4QkEwXHU4QkE2XHU4QkE3XHU4QkFBXHU4QkI0XHU4QkI1XHU4QkI3XHU4QkMyXHU4QkMzXHU4QkNCXHU4QkNGXHU4QkNFXHU4QkQyXHU4QkQzXHU4QkQ0XHU4QkQ2XHU4QkQ4XHU4QkQ5XHU4QkRDXHU4QkRGXHU4QkUwXHU4QkU0XHU4QkU4XHU4QkU5XHU4QkVFXHU4QkYwXHU4QkYzXHU4QkY2XHU4QkY5XHU4QkZDXHU4QkZGXHU4QzAwXHU4QzAyXHU4QzA0XHU4QzA3XHU4QzBDXHU4QzBGXHU4QzExXHU4QzEyXHU4QzE0XHU4QzE1XHU4QzE2XHU4QzE5XHU4QzFCXHU4QzE4XHU4QzFEXHU4QzFGXHU4QzIwXHU4QzIxXHU4QzI1XHU4QzI3XHU4QzJBXHU4QzJCXHU4QzJFXHU4QzJGXHU4QzMyXHU4QzMzXHU4QzM1XHU4QzM2XHU1MzY5XHU1MzdBXHU5NjFEXHU5NjIyXHU5NjIxXHU5NjMxXHU5NjJBXHU5NjNEXHU5NjNDXHU5NjQyXHU5NjQ5XHU5NjU0XHU5NjVGXHU5NjY3XHU5NjZDXHU5NjcyXHU5Njc0XHU5Njg4XHU5NjhEXHU5Njk3XHU5NkIwXHU5MDk3XHU5MDlCXHU5MDlEXHU5MDk5XHU5MEFDXHU5MEExXHU5MEI0XHU5MEIzXHU5MEI2XHU5MEJBXCJdLFxuW1wiZGI0MFwiLFwiXHU4REQ1XHU4REQ4XHU4REQ5XHU4RERDXHU4REUwXHU4REUxXHU4REUyXHU4REU1XHU4REU2XHU4REU3XHU4REU5XHU4REVEXHU4REVFXHU4REYwXHU4REYxXHU4REYyXHU4REY0XHU4REY2XHU4REZDXHU4REZFXCIsNixcIlx1OEUwNlx1OEUwN1x1OEUwOFx1OEUwQlx1OEUwRFx1OEUwRVx1OEUxMFx1OEUxMVx1OEUxMlx1OEUxM1x1OEUxNVwiLDcsXCJcdThFMjBcdThFMjFcdThFMjRcIiw0LFwiXHU4RTJCXHU4RTJEXHU4RTMwXHU4RTMyXHU4RTMzXHU4RTM0XHU4RTM2XHU4RTM3XHU4RTM4XHU4RTNCXHU4RTNDXHU4RTNFXCJdLFxuW1wiZGI4MFwiLFwiXHU4RTNGXHU4RTQzXHU4RTQ1XHU4RTQ2XHU4RTRDXCIsNCxcIlx1OEU1M1wiLDUsXCJcdThFNUFcIiwxMSxcIlx1OEU2N1x1OEU2OFx1OEU2QVx1OEU2Qlx1OEU2RVx1OEU3MVx1OTBCOFx1OTBCMFx1OTBDRlx1OTBDNVx1OTBCRVx1OTBEMFx1OTBDNFx1OTBDN1x1OTBEM1x1OTBFNlx1OTBFMlx1OTBEQ1x1OTBEN1x1OTBEQlx1OTBFQlx1OTBFRlx1OTBGRVx1OTEwNFx1OTEyMlx1OTExRVx1OTEyM1x1OTEzMVx1OTEyRlx1OTEzOVx1OTE0M1x1OTE0Nlx1NTIwRFx1NTk0Mlx1NTJBMlx1NTJBQ1x1NTJBRFx1NTJCRVx1NTRGRlx1NTJEMFx1NTJENlx1NTJGMFx1NTNERlx1NzFFRVx1NzdDRFx1NUVGNFx1NTFGNVx1NTFGQ1x1OUIyRlx1NTNCNlx1NUYwMVx1NzU1QVx1NURFRlx1NTc0Q1x1NTdBOVx1NTdBMVx1NTg3RVx1NThCQ1x1NThDNVx1NThEMVx1NTcyOVx1NTcyQ1x1NTcyQVx1NTczM1x1NTczOVx1NTcyRVx1NTcyRlx1NTc1Q1x1NTczQlx1NTc0Mlx1NTc2OVx1NTc4NVx1NTc2Qlx1NTc4Nlx1NTc3Q1x1NTc3Qlx1NTc2OFx1NTc2RFx1NTc3Nlx1NTc3M1x1NTdBRFx1NTdBNFx1NTc4Q1x1NTdCMlx1NTdDRlx1NTdBN1x1NTdCNFx1NTc5M1x1NTdBMFx1NTdENVx1NTdEOFx1NTdEQVx1NTdEOVx1NTdEMlx1NTdCOFx1NTdGNFx1NTdFRlx1NTdGOFx1NTdFNFx1NTdERFwiXSxcbltcImRjNDBcIixcIlx1OEU3M1x1OEU3NVx1OEU3N1wiLDQsXCJcdThFN0RcdThFN0VcdThFODBcdThFODJcdThFODNcdThFODRcdThFODZcdThFODhcIiw2LFwiXHU4RTkxXHU4RTkyXHU4RTkzXHU4RTk1XCIsNixcIlx1OEU5RFx1OEU5RlwiLDExLFwiXHU4RUFEXHU4RUFFXHU4RUIwXHU4RUIxXHU4RUIzXCIsNixcIlx1OEVCQlwiLDddLFxuW1wiZGM4MFwiLFwiXHU4RUMzXCIsMTAsXCJcdThFQ0ZcIiwyMSxcIlx1NTgwQlx1NTgwRFx1NTdGRFx1NTdFRFx1NTgwMFx1NTgxRVx1NTgxOVx1NTg0NFx1NTgyMFx1NTg2NVx1NTg2Q1x1NTg4MVx1NTg4OVx1NTg5QVx1NTg4MFx1OTlBOFx1OUYxOVx1NjFGRlx1ODI3OVx1ODI3RFx1ODI3Rlx1ODI4Rlx1ODI4QVx1ODJBOFx1ODI4NFx1ODI4RVx1ODI5MVx1ODI5N1x1ODI5OVx1ODJBQlx1ODJCOFx1ODJCRVx1ODJCMFx1ODJDOFx1ODJDQVx1ODJFM1x1ODI5OFx1ODJCN1x1ODJBRVx1ODJDQlx1ODJDQ1x1ODJDMVx1ODJBOVx1ODJCNFx1ODJBMVx1ODJBQVx1ODI5Rlx1ODJDNFx1ODJDRVx1ODJBNFx1ODJFMVx1ODMwOVx1ODJGN1x1ODJFNFx1ODMwRlx1ODMwN1x1ODJEQ1x1ODJGNFx1ODJEMlx1ODJEOFx1ODMwQ1x1ODJGQlx1ODJEM1x1ODMxMVx1ODMxQVx1ODMwNlx1ODMxNFx1ODMxNVx1ODJFMFx1ODJENVx1ODMxQ1x1ODM1MVx1ODM1Qlx1ODM1Q1x1ODMwOFx1ODM5Mlx1ODMzQ1x1ODMzNFx1ODMzMVx1ODM5Qlx1ODM1RVx1ODMyRlx1ODM0Rlx1ODM0N1x1ODM0M1x1ODM1Rlx1ODM0MFx1ODMxN1x1ODM2MFx1ODMyRFx1ODMzQVx1ODMzM1x1ODM2Nlx1ODM2NVwiXSxcbltcImRkNDBcIixcIlx1OEVFNVwiLDYyXSxcbltcImRkODBcIixcIlx1OEYyNFwiLDMyLFwiXHU4MzY4XHU4MzFCXHU4MzY5XHU4MzZDXHU4MzZBXHU4MzZEXHU4MzZFXHU4M0IwXHU4Mzc4XHU4M0IzXHU4M0I0XHU4M0EwXHU4M0FBXHU4MzkzXHU4MzlDXHU4Mzg1XHU4MzdDXHU4M0I2XHU4M0E5XHU4MzdEXHU4M0I4XHU4MzdCXHU4Mzk4XHU4MzlFXHU4M0E4XHU4M0JBXHU4M0JDXHU4M0MxXHU4NDAxXHU4M0U1XHU4M0Q4XHU1ODA3XHU4NDE4XHU4NDBCXHU4M0REXHU4M0ZEXHU4M0Q2XHU4NDFDXHU4NDM4XHU4NDExXHU4NDA2XHU4M0Q0XHU4M0RGXHU4NDBGXHU4NDAzXHU4M0Y4XHU4M0Y5XHU4M0VBXHU4M0M1XHU4M0MwXHU4NDI2XHU4M0YwXHU4M0UxXHU4NDVDXHU4NDUxXHU4NDVBXHU4NDU5XHU4NDczXHU4NDg3XHU4NDg4XHU4NDdBXHU4NDg5XHU4NDc4XHU4NDNDXHU4NDQ2XHU4NDY5XHU4NDc2XHU4NDhDXHU4NDhFXHU4NDMxXHU4NDZEXHU4NEMxXHU4NENEXHU4NEQwXHU4NEU2XHU4NEJEXHU4NEQzXHU4NENBXHU4NEJGXHU4NEJBXHU4NEUwXHU4NEExXHU4NEI5XHU4NEI0XHU4NDk3XHU4NEU1XHU4NEUzXHU4NTBDXHU3NTBEXHU4NTM4XHU4NEYwXHU4NTM5XHU4NTFGXHU4NTNBXCJdLFxuW1wiZGU0MFwiLFwiXHU4RjQ1XCIsMzIsXCJcdThGNkFcdThGODBcdThGOENcdThGOTJcdThGOURcdThGQTBcdThGQTFcdThGQTJcdThGQTRcdThGQTVcdThGQTZcdThGQTdcdThGQUFcdThGQUNcdThGQURcdThGQUVcdThGQUZcdThGQjJcdThGQjNcdThGQjRcdThGQjVcdThGQjdcdThGQjhcdThGQkFcdThGQkJcdThGQkNcdThGQkZcdThGQzBcdThGQzNcdThGQzZcIl0sXG5bXCJkZTgwXCIsXCJcdThGQzlcIiw0LFwiXHU4RkNGXHU4RkQyXHU4RkQ2XHU4RkQ3XHU4RkRBXHU4RkUwXHU4RkUxXHU4RkUzXHU4RkU3XHU4RkVDXHU4RkVGXHU4RkYxXHU4RkYyXHU4RkY0XHU4RkY1XHU4RkY2XHU4RkZBXHU4RkZCXHU4RkZDXHU4RkZFXHU4RkZGXHU5MDA3XHU5MDA4XHU5MDBDXHU5MDBFXHU5MDEzXHU5MDE1XHU5MDE4XHU4NTU2XHU4NTNCXHU4NEZGXHU4NEZDXHU4NTU5XHU4NTQ4XHU4NTY4XHU4NTY0XHU4NTVFXHU4NTdBXHU3N0EyXHU4NTQzXHU4NTcyXHU4NTdCXHU4NUE0XHU4NUE4XHU4NTg3XHU4NThGXHU4NTc5XHU4NUFFXHU4NTlDXHU4NTg1XHU4NUI5XHU4NUI3XHU4NUIwXHU4NUQzXHU4NUMxXHU4NURDXHU4NUZGXHU4NjI3XHU4NjA1XHU4NjI5XHU4NjE2XHU4NjNDXHU1RUZFXHU1RjA4XHU1OTNDXHU1OTQxXHU4MDM3XHU1OTU1XHU1OTVBXHU1OTU4XHU1MzBGXHU1QzIyXHU1QzI1XHU1QzJDXHU1QzM0XHU2MjRDXHU2MjZBXHU2MjlGXHU2MkJCXHU2MkNBXHU2MkRBXHU2MkQ3XHU2MkVFXHU2MzIyXHU2MkY2XHU2MzM5XHU2MzRCXHU2MzQzXHU2M0FEXHU2M0Y2XHU2MzcxXHU2MzdBXHU2MzhFXHU2M0I0XHU2MzZEXHU2M0FDXHU2MzhBXHU2MzY5XHU2M0FFXHU2M0JDXHU2M0YyXHU2M0Y4XHU2M0UwXHU2M0ZGXHU2M0M0XHU2M0RFXHU2M0NFXHU2NDUyXHU2M0M2XHU2M0JFXHU2NDQ1XHU2NDQxXHU2NDBCXHU2NDFCXHU2NDIwXHU2NDBDXHU2NDI2XHU2NDIxXHU2NDVFXHU2NDg0XHU2NDZEXHU2NDk2XCJdLFxuW1wiZGY0MFwiLFwiXHU5MDE5XHU5MDFDXHU5MDIzXHU5MDI0XHU5MDI1XHU5MDI3XCIsNSxcIlx1OTAzMFwiLDQsXCJcdTkwMzdcdTkwMzlcdTkwM0FcdTkwM0RcdTkwM0ZcdTkwNDBcdTkwNDNcdTkwNDVcdTkwNDZcdTkwNDhcIiw0LFwiXHU5MDRFXHU5MDU0XHU5MDU1XHU5MDU2XHU5MDU5XHU5MDVBXHU5MDVDXCIsNSxcIlx1OTA2NFx1OTA2Nlx1OTA2N1x1OTA2OVx1OTA2QVx1OTA2Qlx1OTA2Q1x1OTA2RlwiLDQsXCJcdTkwNzZcIiw2LFwiXHU5MDdFXHU5MDgxXCJdLFxuW1wiZGY4MFwiLFwiXHU5MDg0XHU5MDg1XHU5MDg2XHU5MDg3XHU5MDg5XHU5MDhBXHU5MDhDXCIsNCxcIlx1OTA5Mlx1OTA5NFx1OTA5Nlx1OTA5OFx1OTA5QVx1OTA5Q1x1OTA5RVx1OTA5Rlx1OTBBMFx1OTBBNFx1OTBBNVx1OTBBN1x1OTBBOFx1OTBBOVx1OTBBQlx1OTBBRFx1OTBCMlx1OTBCN1x1OTBCQ1x1OTBCRFx1OTBCRlx1OTBDMFx1NjQ3QVx1NjRCN1x1NjRCOFx1NjQ5OVx1NjRCQVx1NjRDMFx1NjREMFx1NjREN1x1NjRFNFx1NjRFMlx1NjUwOVx1NjUyNVx1NjUyRVx1NUYwQlx1NUZEMlx1NzUxOVx1NUYxMVx1NTM1Rlx1NTNGMVx1NTNGRFx1NTNFOVx1NTNFOFx1NTNGQlx1NTQxMlx1NTQxNlx1NTQwNlx1NTQ0Qlx1NTQ1Mlx1NTQ1M1x1NTQ1NFx1NTQ1Nlx1NTQ0M1x1NTQyMVx1NTQ1N1x1NTQ1OVx1NTQyM1x1NTQzMlx1NTQ4Mlx1NTQ5NFx1NTQ3N1x1NTQ3MVx1NTQ2NFx1NTQ5QVx1NTQ5Qlx1NTQ4NFx1NTQ3Nlx1NTQ2Nlx1NTQ5RFx1NTREMFx1NTRBRFx1NTRDMlx1NTRCNFx1NTREMlx1NTRBN1x1NTRBNlx1NTREM1x1NTRENFx1NTQ3Mlx1NTRBM1x1NTRENVx1NTRCQlx1NTRCRlx1NTRDQ1x1NTREOVx1NTREQVx1NTREQ1x1NTRBOVx1NTRBQVx1NTRBNFx1NTRERFx1NTRDRlx1NTRERVx1NTUxQlx1NTRFN1x1NTUyMFx1NTRGRFx1NTUxNFx1NTRGM1x1NTUyMlx1NTUyM1x1NTUwRlx1NTUxMVx1NTUyN1x1NTUyQVx1NTU2N1x1NTU4Rlx1NTVCNVx1NTU0OVx1NTU2RFx1NTU0MVx1NTU1NVx1NTUzRlx1NTU1MFx1NTUzQ1wiXSxcbltcImUwNDBcIixcIlx1OTBDMlx1OTBDM1x1OTBDNlx1OTBDOFx1OTBDOVx1OTBDQlx1OTBDQ1x1OTBDRFx1OTBEMlx1OTBENFx1OTBENVx1OTBENlx1OTBEOFx1OTBEOVx1OTBEQVx1OTBERVx1OTBERlx1OTBFMFx1OTBFM1x1OTBFNFx1OTBFNVx1OTBFOVx1OTBFQVx1OTBFQ1x1OTBFRVx1OTBGMFx1OTBGMVx1OTBGMlx1OTBGM1x1OTBGNVx1OTBGNlx1OTBGN1x1OTBGOVx1OTBGQVx1OTBGQlx1OTBGQ1x1OTBGRlx1OTEwMFx1OTEwMVx1OTEwM1x1OTEwNVwiLDE5LFwiXHU5MTFBXHU5MTFCXHU5MTFDXCJdLFxuW1wiZTA4MFwiLFwiXHU5MTFEXHU5MTFGXHU5MTIwXHU5MTIxXHU5MTI0XCIsMTAsXCJcdTkxMzBcdTkxMzJcIiw2LFwiXHU5MTNBXCIsOCxcIlx1OTE0NFx1NTUzN1x1NTU1Nlx1NTU3NVx1NTU3Nlx1NTU3N1x1NTUzM1x1NTUzMFx1NTU1Q1x1NTU4Qlx1NTVEMlx1NTU4M1x1NTVCMVx1NTVCOVx1NTU4OFx1NTU4MVx1NTU5Rlx1NTU3RVx1NTVENlx1NTU5MVx1NTU3Qlx1NTVERlx1NTVCRFx1NTVCRVx1NTU5NFx1NTU5OVx1NTVFQVx1NTVGN1x1NTVDOVx1NTYxRlx1NTVEMVx1NTVFQlx1NTVFQ1x1NTVENFx1NTVFNlx1NTVERFx1NTVDNFx1NTVFRlx1NTVFNVx1NTVGMlx1NTVGM1x1NTVDQ1x1NTVDRFx1NTVFOFx1NTVGNVx1NTVFNFx1OEY5NFx1NTYxRVx1NTYwOFx1NTYwQ1x1NTYwMVx1NTYyNFx1NTYyM1x1NTVGRVx1NTYwMFx1NTYyN1x1NTYyRFx1NTY1OFx1NTYzOVx1NTY1N1x1NTYyQ1x1NTY0RFx1NTY2Mlx1NTY1OVx1NTY1Q1x1NTY0Q1x1NTY1NFx1NTY4Nlx1NTY2NFx1NTY3MVx1NTY2Qlx1NTY3Qlx1NTY3Q1x1NTY4NVx1NTY5M1x1NTZBRlx1NTZENFx1NTZEN1x1NTZERFx1NTZFMVx1NTZGNVx1NTZFQlx1NTZGOVx1NTZGRlx1NTcwNFx1NTcwQVx1NTcwOVx1NTcxQ1x1NUUwRlx1NUUxOVx1NUUxNFx1NUUxMVx1NUUzMVx1NUUzQlx1NUUzQ1wiXSxcbltcImUxNDBcIixcIlx1OTE0NVx1OTE0N1x1OTE0OFx1OTE1MVx1OTE1M1x1OTE1NFx1OTE1NVx1OTE1Nlx1OTE1OFx1OTE1OVx1OTE1Qlx1OTE1Q1x1OTE1Rlx1OTE2MFx1OTE2Nlx1OTE2N1x1OTE2OFx1OTE2Qlx1OTE2RFx1OTE3M1x1OTE3QVx1OTE3Qlx1OTE3Q1x1OTE4MFwiLDQsXCJcdTkxODZcdTkxODhcdTkxOEFcdTkxOEVcdTkxOEZcdTkxOTNcIiw2LFwiXHU5MTlDXCIsNSxcIlx1OTFBNFwiLDUsXCJcdTkxQUJcdTkxQUNcdTkxQjBcdTkxQjFcdTkxQjJcdTkxQjNcdTkxQjZcdTkxQjdcdTkxQjhcdTkxQjlcdTkxQkJcIl0sXG5bXCJlMTgwXCIsXCJcdTkxQkNcIiwxMCxcIlx1OTFDOFx1OTFDQlx1OTFEMFx1OTFEMlwiLDksXCJcdTkxRERcIiw4LFwiXHU1RTM3XHU1RTQ0XHU1RTU0XHU1RTVCXHU1RTVFXHU1RTYxXHU1QzhDXHU1QzdBXHU1QzhEXHU1QzkwXHU1Qzk2XHU1Qzg4XHU1Qzk4XHU1Qzk5XHU1QzkxXHU1QzlBXHU1QzlDXHU1Q0I1XHU1Q0EyXHU1Q0JEXHU1Q0FDXHU1Q0FCXHU1Q0IxXHU1Q0EzXHU1Q0MxXHU1Q0I3XHU1Q0M0XHU1Q0QyXHU1Q0U0XHU1Q0NCXHU1Q0U1XHU1RDAyXHU1RDAzXHU1RDI3XHU1RDI2XHU1RDJFXHU1RDI0XHU1RDFFXHU1RDA2XHU1RDFCXHU1RDU4XHU1RDNFXHU1RDM0XHU1RDNEXHU1RDZDXHU1RDVCXHU1RDZGXHU1RDVEXHU1RDZCXHU1RDRCXHU1RDRBXHU1RDY5XHU1RDc0XHU1RDgyXHU1RDk5XHU1RDlEXHU4QzczXHU1REI3XHU1REM1XHU1RjczXHU1Rjc3XHU1RjgyXHU1Rjg3XHU1Rjg5XHU1RjhDXHU1Rjk1XHU1Rjk5XHU1RjlDXHU1RkE4XHU1RkFEXHU1RkI1XHU1RkJDXHU4ODYyXHU1RjYxXHU3MkFEXHU3MkIwXHU3MkI0XHU3MkI3XHU3MkI4XHU3MkMzXHU3MkMxXHU3MkNFXHU3MkNEXHU3MkQyXHU3MkU4XHU3MkVGXHU3MkU5XHU3MkYyXHU3MkY0XHU3MkY3XHU3MzAxXHU3MkYzXHU3MzAzXHU3MkZBXCJdLFxuW1wiZTI0MFwiLFwiXHU5MUU2XCIsNjJdLFxuW1wiZTI4MFwiLFwiXHU5MjI1XCIsMzIsXCJcdTcyRkJcdTczMTdcdTczMTNcdTczMjFcdTczMEFcdTczMUVcdTczMURcdTczMTVcdTczMjJcdTczMzlcdTczMjVcdTczMkNcdTczMzhcdTczMzFcdTczNTBcdTczNERcdTczNTdcdTczNjBcdTczNkNcdTczNkZcdTczN0VcdTgyMUJcdTU5MjVcdTk4RTdcdTU5MjRcdTU5MDJcdTk5NjNcdTk5NjdcIiw1LFwiXHU5OTc0XHU5OTc3XHU5OTdEXHU5OTgwXHU5OTg0XHU5OTg3XHU5OThBXHU5OThEXHU5OTkwXHU5OTkxXHU5OTkzXHU5OTk0XHU5OTk1XHU1RTgwXHU1RTkxXHU1RThCXHU1RTk2XHU1RUE1XHU1RUEwXHU1RUI5XHU1RUI1XHU1RUJFXHU1RUIzXHU4RDUzXHU1RUQyXHU1RUQxXHU1RURCXHU1RUU4XHU1RUVBXHU4MUJBXHU1RkM0XHU1RkM5XHU1RkQ2XHU1RkNGXHU2MDAzXHU1RkVFXHU2MDA0XHU1RkUxXHU1RkU0XHU1RkZFXHU2MDA1XHU2MDA2XHU1RkVBXHU1RkVEXHU1RkY4XHU2MDE5XHU2MDM1XHU2MDI2XHU2MDFCXHU2MDBGXHU2MDBEXHU2MDI5XHU2MDJCXHU2MDBBXHU2MDNGXHU2MDIxXHU2MDc4XHU2MDc5XHU2MDdCXHU2MDdBXHU2MDQyXCJdLFxuW1wiZTM0MFwiLFwiXHU5MjQ2XCIsNDUsXCJcdTkyNzVcIiwxNl0sXG5bXCJlMzgwXCIsXCJcdTkyODZcIiw3LFwiXHU5MjhGXCIsMjQsXCJcdTYwNkFcdTYwN0RcdTYwOTZcdTYwOUFcdTYwQURcdTYwOURcdTYwODNcdTYwOTJcdTYwOENcdTYwOUJcdTYwRUNcdTYwQkJcdTYwQjFcdTYwRERcdTYwRDhcdTYwQzZcdTYwREFcdTYwQjRcdTYxMjBcdTYxMjZcdTYxMTVcdTYxMjNcdTYwRjRcdTYxMDBcdTYxMEVcdTYxMkJcdTYxNEFcdTYxNzVcdTYxQUNcdTYxOTRcdTYxQTdcdTYxQjdcdTYxRDRcdTYxRjVcdTVGRERcdTk2QjNcdTk1RTlcdTk1RUJcdTk1RjFcdTk1RjNcdTk1RjVcdTk1RjZcdTk1RkNcdTk1RkVcdTk2MDNcdTk2MDRcdTk2MDZcdTk2MDhcdTk2MEFcdTk2MEJcdTk2MENcdTk2MERcdTk2MEZcdTk2MTJcdTk2MTVcdTk2MTZcdTk2MTdcdTk2MTlcdTk2MUFcdTRFMkNcdTcyM0ZcdTYyMTVcdTZDMzVcdTZDNTRcdTZDNUNcdTZDNEFcdTZDQTNcdTZDODVcdTZDOTBcdTZDOTRcdTZDOENcdTZDNjhcdTZDNjlcdTZDNzRcdTZDNzZcdTZDODZcdTZDQTlcdTZDRDBcdTZDRDRcdTZDQURcdTZDRjdcdTZDRjhcdTZDRjFcdTZDRDdcdTZDQjJcdTZDRTBcdTZDRDZcdTZDRkFcdTZDRUJcdTZDRUVcdTZDQjFcdTZDRDNcdTZDRUZcdTZDRkVcIl0sXG5bXCJlNDQwXCIsXCJcdTkyQThcIiw1LFwiXHU5MkFGXCIsMjQsXCJcdTkyQzlcIiwzMV0sXG5bXCJlNDgwXCIsXCJcdTkyRTlcIiwzMixcIlx1NkQzOVx1NkQyN1x1NkQwQ1x1NkQ0M1x1NkQ0OFx1NkQwN1x1NkQwNFx1NkQxOVx1NkQwRVx1NkQyQlx1NkQ0RFx1NkQyRVx1NkQzNVx1NkQxQVx1NkQ0Rlx1NkQ1Mlx1NkQ1NFx1NkQzM1x1NkQ5MVx1NkQ2Rlx1NkQ5RVx1NkRBMFx1NkQ1RVx1NkQ5M1x1NkQ5NFx1NkQ1Q1x1NkQ2MFx1NkQ3Q1x1NkQ2M1x1NkUxQVx1NkRDN1x1NkRDNVx1NkRERVx1NkUwRVx1NkRCRlx1NkRFMFx1NkUxMVx1NkRFNlx1NkRERFx1NkREOVx1NkUxNlx1NkRBQlx1NkUwQ1x1NkRBRVx1NkUyQlx1NkU2RVx1NkU0RVx1NkU2Qlx1NkVCMlx1NkU1Rlx1NkU4Nlx1NkU1M1x1NkU1NFx1NkUzMlx1NkUyNVx1NkU0NFx1NkVERlx1NkVCMVx1NkU5OFx1NkVFMFx1NkYyRFx1NkVFMlx1NkVBNVx1NkVBN1x1NkVCRFx1NkVCQlx1NkVCN1x1NkVEN1x1NkVCNFx1NkVDRlx1NkU4Rlx1NkVDMlx1NkU5Rlx1NkY2Mlx1NkY0Nlx1NkY0N1x1NkYyNFx1NkYxNVx1NkVGOVx1NkYyRlx1NkYzNlx1NkY0Qlx1NkY3NFx1NkYyQVx1NkYwOVx1NkYyOVx1NkY4OVx1NkY4RFx1NkY4Q1x1NkY3OFx1NkY3Mlx1NkY3Q1x1NkY3QVx1NkZEMVwiXSxcbltcImU1NDBcIixcIlx1OTMwQVwiLDUxLFwiXHU5MzNGXCIsMTBdLFxuW1wiZTU4MFwiLFwiXHU5MzRBXCIsMzEsXCJcdTkzNkJcdTZGQzlcdTZGQTdcdTZGQjlcdTZGQjZcdTZGQzJcdTZGRTFcdTZGRUVcdTZGREVcdTZGRTBcdTZGRUZcdTcwMUFcdTcwMjNcdTcwMUJcdTcwMzlcdTcwMzVcdTcwNEZcdTcwNUVcdTVCODBcdTVCODRcdTVCOTVcdTVCOTNcdTVCQTVcdTVCQjhcdTc1MkZcdTlBOUVcdTY0MzRcdTVCRTRcdTVCRUVcdTg5MzBcdTVCRjBcdThFNDdcdThCMDdcdThGQjZcdThGRDNcdThGRDVcdThGRTVcdThGRUVcdThGRTRcdThGRTlcdThGRTZcdThGRjNcdThGRThcdTkwMDVcdTkwMDRcdTkwMEJcdTkwMjZcdTkwMTFcdTkwMERcdTkwMTZcdTkwMjFcdTkwMzVcdTkwMzZcdTkwMkRcdTkwMkZcdTkwNDRcdTkwNTFcdTkwNTJcdTkwNTBcdTkwNjhcdTkwNThcdTkwNjJcdTkwNUJcdTY2QjlcdTkwNzRcdTkwN0RcdTkwODJcdTkwODhcdTkwODNcdTkwOEJcdTVGNTBcdTVGNTdcdTVGNTZcdTVGNThcdTVDM0JcdTU0QUJcdTVDNTBcdTVDNTlcdTVCNzFcdTVDNjNcdTVDNjZcdTdGQkNcdTVGMkFcdTVGMjlcdTVGMkRcdTgyNzRcdTVGM0NcdTlCM0JcdTVDNkVcdTU5ODFcdTU5ODNcdTU5OERcdTU5QTlcdTU5QUFcdTU5QTNcIl0sXG5bXCJlNjQwXCIsXCJcdTkzNkNcIiwzNCxcIlx1OTM5MFwiLDI3XSxcbltcImU2ODBcIixcIlx1OTNBQ1wiLDI5LFwiXHU5M0NCXHU5M0NDXHU5M0NEXHU1OTk3XHU1OUNBXHU1OUFCXHU1OTlFXHU1OUE0XHU1OUQyXHU1OUIyXHU1OUFGXHU1OUQ3XHU1OUJFXHU1QTA1XHU1QTA2XHU1OUREXHU1QTA4XHU1OUUzXHU1OUQ4XHU1OUY5XHU1QTBDXHU1QTA5XHU1QTMyXHU1QTM0XHU1QTExXHU1QTIzXHU1QTEzXHU1QTQwXHU1QTY3XHU1QTRBXHU1QTU1XHU1QTNDXHU1QTYyXHU1QTc1XHU4MEVDXHU1QUFBXHU1QTlCXHU1QTc3XHU1QTdBXHU1QUJFXHU1QUVCXHU1QUIyXHU1QUQyXHU1QUQ0XHU1QUI4XHU1QUUwXHU1QUUzXHU1QUYxXHU1QUQ2XHU1QUU2XHU1QUQ4XHU1QURDXHU1QjA5XHU1QjE3XHU1QjE2XHU1QjMyXHU1QjM3XHU1QjQwXHU1QzE1XHU1QzFDXHU1QjVBXHU1QjY1XHU1QjczXHU1QjUxXHU1QjUzXHU1QjYyXHU5QTc1XHU5QTc3XHU5QTc4XHU5QTdBXHU5QTdGXHU5QTdEXHU5QTgwXHU5QTgxXHU5QTg1XHU5QTg4XHU5QThBXHU5QTkwXHU5QTkyXHU5QTkzXHU5QTk2XHU5QTk4XHU5QTlCXHU5QTlDXHU5QTlEXHU5QTlGXHU5QUEwXHU5QUEyXHU5QUEzXHU5QUE1XHU5QUE3XHU3RTlGXHU3RUExXHU3RUEzXHU3RUE1XHU3RUE4XHU3RUE5XCJdLFxuW1wiZTc0MFwiLFwiXHU5M0NFXCIsNyxcIlx1OTNEN1wiLDU0XSxcbltcImU3ODBcIixcIlx1OTQwRVwiLDMyLFwiXHU3RUFEXHU3RUIwXHU3RUJFXHU3RUMwXHU3RUMxXHU3RUMyXHU3RUM5XHU3RUNCXHU3RUNDXHU3RUQwXHU3RUQ0XHU3RUQ3XHU3RURCXHU3RUUwXHU3RUUxXHU3RUU4XHU3RUVCXHU3RUVFXHU3RUVGXHU3RUYxXHU3RUYyXHU3RjBEXHU3RUY2XHU3RUZBXHU3RUZCXHU3RUZFXHU3RjAxXHU3RjAyXHU3RjAzXHU3RjA3XHU3RjA4XHU3RjBCXHU3RjBDXHU3RjBGXHU3RjExXHU3RjEyXHU3RjE3XHU3RjE5XHU3RjFDXHU3RjFCXHU3RjFGXHU3RjIxXCIsNixcIlx1N0YyQVx1N0YyQlx1N0YyQ1x1N0YyRFx1N0YyRlwiLDQsXCJcdTdGMzVcdTVFN0FcdTc1N0ZcdTVEREJcdTc1M0VcdTkwOTVcdTczOEVcdTczOTFcdTczQUVcdTczQTJcdTczOUZcdTczQ0ZcdTczQzJcdTczRDFcdTczQjdcdTczQjNcdTczQzBcdTczQzlcdTczQzhcdTczRTVcdTczRDlcdTk4N0NcdTc0MEFcdTczRTlcdTczRTdcdTczREVcdTczQkFcdTczRjJcdTc0MEZcdTc0MkFcdTc0NUJcdTc0MjZcdTc0MjVcdTc0MjhcdTc0MzBcdTc0MkVcdTc0MkNcIl0sXG5bXCJlODQwXCIsXCJcdTk0MkZcIiwxNCxcIlx1OTQzRlwiLDQzLFwiXHU5NDZDXHU5NDZEXHU5NDZFXHU5NDZGXCJdLFxuW1wiZTg4MFwiLFwiXHU5NDcwXCIsMjAsXCJcdTk0OTFcdTk0OTZcdTk0OThcdTk0QzdcdTk0Q0ZcdTk0RDNcdTk0RDRcdTk0REFcdTk0RTZcdTk0RkJcdTk1MUNcdTk1MjBcdTc0MUJcdTc0MUFcdTc0NDFcdTc0NUNcdTc0NTdcdTc0NTVcdTc0NTlcdTc0NzdcdTc0NkRcdTc0N0VcdTc0OUNcdTc0OEVcdTc0ODBcdTc0ODFcdTc0ODdcdTc0OEJcdTc0OUVcdTc0QThcdTc0QTlcdTc0OTBcdTc0QTdcdTc0RDJcdTc0QkFcdTk3RUFcdTk3RUJcdTk3RUNcdTY3NENcdTY3NTNcdTY3NUVcdTY3NDhcdTY3NjlcdTY3QTVcdTY3ODdcdTY3NkFcdTY3NzNcdTY3OThcdTY3QTdcdTY3NzVcdTY3QThcdTY3OUVcdTY3QURcdTY3OEJcdTY3NzdcdTY3N0NcdTY3RjBcdTY4MDlcdTY3RDhcdTY4MEFcdTY3RTlcdTY3QjBcdTY4MENcdTY3RDlcdTY3QjVcdTY3REFcdTY3QjNcdTY3RERcdTY4MDBcdTY3QzNcdTY3QjhcdTY3RTJcdTY4MEVcdTY3QzFcdTY3RkRcdTY4MzJcdTY4MzNcdTY4NjBcdTY4NjFcdTY4NEVcdTY4NjJcdTY4NDRcdTY4NjRcdTY4ODNcdTY4MURcdTY4NTVcdTY4NjZcdTY4NDFcdTY4NjdcdTY4NDBcdTY4M0VcdTY4NEFcdTY4NDlcdTY4MjlcdTY4QjVcdTY4OEZcdTY4NzRcdTY4NzdcdTY4OTNcdTY4NkJcdTY4QzJcdTY5NkVcdTY4RkNcdTY5MUZcdTY5MjBcdTY4RjlcIl0sXG5bXCJlOTQwXCIsXCJcdTk1MjdcdTk1MzNcdTk1M0RcdTk1NDNcdTk1NDhcdTk1NEJcdTk1NTVcdTk1NUFcdTk1NjBcdTk1NkVcdTk1NzRcdTk1NzVcdTk1NzdcIiw3LFwiXHU5NTgwXCIsNDJdLFxuW1wiZTk4MFwiLFwiXHU5NUFCXCIsMzIsXCJcdTY5MjRcdTY4RjBcdTY5MEJcdTY5MDFcdTY5NTdcdTY4RTNcdTY5MTBcdTY5NzFcdTY5MzlcdTY5NjBcdTY5NDJcdTY5NURcdTY5ODRcdTY5NkJcdTY5ODBcdTY5OThcdTY5NzhcdTY5MzRcdTY5Q0NcdTY5ODdcdTY5ODhcdTY5Q0VcdTY5ODlcdTY5NjZcdTY5NjNcdTY5NzlcdTY5OUJcdTY5QTdcdTY5QkJcdTY5QUJcdTY5QURcdTY5RDRcdTY5QjFcdTY5QzFcdTY5Q0FcdTY5REZcdTY5OTVcdTY5RTBcdTY5OERcdTY5RkZcdTZBMkZcdTY5RURcdTZBMTdcdTZBMThcdTZBNjVcdTY5RjJcdTZBNDRcdTZBM0VcdTZBQTBcdTZBNTBcdTZBNUJcdTZBMzVcdTZBOEVcdTZBNzlcdTZBM0RcdTZBMjhcdTZBNThcdTZBN0NcdTZBOTFcdTZBOTBcdTZBQTlcdTZBOTdcdTZBQUJcdTczMzdcdTczNTJcdTZCODFcdTZCODJcdTZCODdcdTZCODRcdTZCOTJcdTZCOTNcdTZCOERcdTZCOUFcdTZCOUJcdTZCQTFcdTZCQUFcdThGNkJcdThGNkRcdThGNzFcdThGNzJcdThGNzNcdThGNzVcdThGNzZcdThGNzhcdThGNzdcdThGNzlcdThGN0FcdThGN0NcdThGN0VcdThGODFcdThGODJcdThGODRcdThGODdcdThGOEJcIl0sXG5bXCJlYTQwXCIsXCJcdTk1Q0NcIiwyNyxcIlx1OTVFQ1x1OTVGRlx1OTYwN1x1OTYxM1x1OTYxOFx1OTYxQlx1OTYxRVx1OTYyMFx1OTYyM1wiLDYsXCJcdTk2MkJcdTk2MkNcdTk2MkRcdTk2MkZcdTk2MzBcdTk2MzdcdTk2MzhcdTk2MzlcdTk2M0FcdTk2M0VcdTk2NDFcdTk2NDNcdTk2NEFcdTk2NEVcdTk2NEZcdTk2NTFcdTk2NTJcdTk2NTNcdTk2NTZcdTk2NTdcIl0sXG5bXCJlYTgwXCIsXCJcdTk2NThcdTk2NTlcdTk2NUFcdTk2NUNcdTk2NURcdTk2NUVcdTk2NjBcdTk2NjNcdTk2NjVcdTk2NjZcdTk2NkJcdTk2NkRcIiw0LFwiXHU5NjczXHU5Njc4XCIsMTIsXCJcdTk2ODdcdTk2ODlcdTk2OEFcdThGOERcdThGOEVcdThGOEZcdThGOThcdThGOUFcdThFQ0VcdTYyMEJcdTYyMTdcdTYyMUJcdTYyMUZcdTYyMjJcdTYyMjFcdTYyMjVcdTYyMjRcdTYyMkNcdTgxRTdcdTc0RUZcdTc0RjRcdTc0RkZcdTc1MEZcdTc1MTFcdTc1MTNcdTY1MzRcdTY1RUVcdTY1RUZcdTY1RjBcdTY2MEFcdTY2MTlcdTY3NzJcdTY2MDNcdTY2MTVcdTY2MDBcdTcwODVcdTY2RjdcdTY2MURcdTY2MzRcdTY2MzFcdTY2MzZcdTY2MzVcdTgwMDZcdTY2NUZcdTY2NTRcdTY2NDFcdTY2NEZcdTY2NTZcdTY2NjFcdTY2NTdcdTY2NzdcdTY2ODRcdTY2OENcdTY2QTdcdTY2OURcdTY2QkVcdTY2REJcdTY2RENcdTY2RTZcdTY2RTlcdThEMzJcdThEMzNcdThEMzZcdThEM0JcdThEM0RcdThENDBcdThENDVcdThENDZcdThENDhcdThENDlcdThENDdcdThENERcdThENTVcdThENTlcdTg5QzdcdTg5Q0FcdTg5Q0JcdTg5Q0NcdTg5Q0VcdTg5Q0ZcdTg5RDBcdTg5RDFcdTcyNkVcdTcyOUZcdTcyNURcdTcyNjZcdTcyNkZcdTcyN0VcdTcyN0ZcdTcyODRcdTcyOEJcdTcyOERcdTcyOEZcdTcyOTJcdTYzMDhcdTYzMzJcdTYzQjBcIl0sXG5bXCJlYjQwXCIsXCJcdTk2OENcdTk2OEVcdTk2OTFcdTk2OTJcdTk2OTNcdTk2OTVcdTk2OTZcdTk2OUFcdTk2OUJcdTk2OURcIiw5LFwiXHU5NkE4XCIsNyxcIlx1OTZCMVx1OTZCMlx1OTZCNFx1OTZCNVx1OTZCN1x1OTZCOFx1OTZCQVx1OTZCQlx1OTZCRlx1OTZDMlx1OTZDM1x1OTZDOFx1OTZDQVx1OTZDQlx1OTZEMFx1OTZEMVx1OTZEM1x1OTZENFx1OTZENlwiLDksXCJcdTk2RTFcIiw2LFwiXHU5NkVCXCJdLFxuW1wiZWI4MFwiLFwiXHU5NkVDXHU5NkVEXHU5NkVFXHU5NkYwXHU5NkYxXHU5NkYyXHU5NkY0XHU5NkY1XHU5NkY4XHU5NkZBXHU5NkZCXHU5NkZDXHU5NkZEXHU5NkZGXHU5NzAyXHU5NzAzXHU5NzA1XHU5NzBBXHU5NzBCXHU5NzBDXHU5NzEwXHU5NzExXHU5NzEyXHU5NzE0XHU5NzE1XHU5NzE3XCIsNCxcIlx1OTcxRFx1OTcxRlx1OTcyMFx1NjQzRlx1NjREOFx1ODAwNFx1NkJFQVx1NkJGM1x1NkJGRFx1NkJGNVx1NkJGOVx1NkMwNVx1NkMwN1x1NkMwNlx1NkMwRFx1NkMxNVx1NkMxOFx1NkMxOVx1NkMxQVx1NkMyMVx1NkMyOVx1NkMyNFx1NkMyQVx1NkMzMlx1NjUzNVx1NjU1NVx1NjU2Qlx1NzI0RFx1NzI1Mlx1NzI1Nlx1NzIzMFx1ODY2Mlx1NTIxNlx1ODA5Rlx1ODA5Q1x1ODA5M1x1ODBCQ1x1NjcwQVx1ODBCRFx1ODBCMVx1ODBBQlx1ODBBRFx1ODBCNFx1ODBCN1x1ODBFN1x1ODBFOFx1ODBFOVx1ODBFQVx1ODBEQlx1ODBDMlx1ODBDNFx1ODBEOVx1ODBDRFx1ODBEN1x1NjcxMFx1ODBERFx1ODBFQlx1ODBGMVx1ODBGNFx1ODBFRFx1ODEwRFx1ODEwRVx1ODBGMlx1ODBGQ1x1NjcxNVx1ODExMlx1OEM1QVx1ODEzNlx1ODExRVx1ODEyQ1x1ODExOFx1ODEzMlx1ODE0OFx1ODE0Q1x1ODE1M1x1ODE3NFx1ODE1OVx1ODE1QVx1ODE3MVx1ODE2MFx1ODE2OVx1ODE3Q1x1ODE3RFx1ODE2RFx1ODE2N1x1NTg0RFx1NUFCNVx1ODE4OFx1ODE4Mlx1ODE5MVx1NkVENVx1ODFBM1x1ODFBQVx1ODFDQ1x1NjcyNlx1ODFDQVx1ODFCQlwiXSxcbltcImVjNDBcIixcIlx1OTcyMVwiLDgsXCJcdTk3MkJcdTk3MkNcdTk3MkVcdTk3MkZcdTk3MzFcdTk3MzNcIiw0LFwiXHU5NzNBXHU5NzNCXHU5NzNDXHU5NzNEXHU5NzNGXCIsMTgsXCJcdTk3NTRcdTk3NTVcdTk3NTdcdTk3NThcdTk3NUFcdTk3NUNcdTk3NURcdTk3NUZcdTk3NjNcdTk3NjRcdTk3NjZcdTk3NjdcdTk3NjhcdTk3NkFcIiw3XSxcbltcImVjODBcIixcIlx1OTc3Mlx1OTc3NVx1OTc3N1wiLDQsXCJcdTk3N0RcIiw3LFwiXHU5Nzg2XCIsNCxcIlx1OTc4Q1x1OTc4RVx1OTc4Rlx1OTc5MFx1OTc5M1x1OTc5NVx1OTc5Nlx1OTc5N1x1OTc5OVwiLDQsXCJcdTgxQzFcdTgxQTZcdTZCMjRcdTZCMzdcdTZCMzlcdTZCNDNcdTZCNDZcdTZCNTlcdTk4RDFcdTk4RDJcdTk4RDNcdTk4RDVcdTk4RDlcdTk4REFcdTZCQjNcdTVGNDBcdTZCQzJcdTg5RjNcdTY1OTBcdTlGNTFcdTY1OTNcdTY1QkNcdTY1QzZcdTY1QzRcdTY1QzNcdTY1Q0NcdTY1Q0VcdTY1RDJcdTY1RDZcdTcwODBcdTcwOUNcdTcwOTZcdTcwOURcdTcwQkJcdTcwQzBcdTcwQjdcdTcwQUJcdTcwQjFcdTcwRThcdTcwQ0FcdTcxMTBcdTcxMTNcdTcxMTZcdTcxMkZcdTcxMzFcdTcxNzNcdTcxNUNcdTcxNjhcdTcxNDVcdTcxNzJcdTcxNEFcdTcxNzhcdTcxN0FcdTcxOThcdTcxQjNcdTcxQjVcdTcxQThcdTcxQTBcdTcxRTBcdTcxRDRcdTcxRTdcdTcxRjlcdTcyMURcdTcyMjhcdTcwNkNcdTcxMThcdTcxNjZcdTcxQjlcdTYyM0VcdTYyM0RcdTYyNDNcdTYyNDhcdTYyNDlcdTc5M0JcdTc5NDBcdTc5NDZcdTc5NDlcdTc5NUJcdTc5NUNcdTc5NTNcdTc5NUFcdTc5NjJcdTc5NTdcdTc5NjBcdTc5NkZcdTc5NjdcdTc5N0FcdTc5ODVcdTc5OEFcdTc5OUFcdTc5QTdcdTc5QjNcdTVGRDFcdTVGRDBcIl0sXG5bXCJlZDQwXCIsXCJcdTk3OUVcdTk3OUZcdTk3QTFcdTk3QTJcdTk3QTRcIiw2LFwiXHU5N0FDXHU5N0FFXHU5N0IwXHU5N0IxXHU5N0IzXHU5N0I1XCIsNDZdLFxuW1wiZWQ4MFwiLFwiXHU5N0U0XHU5N0U1XHU5N0U4XHU5N0VFXCIsNCxcIlx1OTdGNFx1OTdGN1wiLDIzLFwiXHU2MDNDXHU2MDVEXHU2MDVBXHU2MDY3XHU2MDQxXHU2MDU5XHU2MDYzXHU2MEFCXHU2MTA2XHU2MTBEXHU2MTVEXHU2MUE5XHU2MTlEXHU2MUNCXHU2MUQxXHU2MjA2XHU4MDgwXHU4MDdGXHU2QzkzXHU2Q0Y2XHU2REZDXHU3N0Y2XHU3N0Y4XHU3ODAwXHU3ODA5XHU3ODE3XHU3ODE4XHU3ODExXHU2NUFCXHU3ODJEXHU3ODFDXHU3ODFEXHU3ODM5XHU3ODNBXHU3ODNCXHU3ODFGXHU3ODNDXHU3ODI1XHU3ODJDXHU3ODIzXHU3ODI5XHU3ODRFXHU3ODZEXHU3ODU2XHU3ODU3XHU3ODI2XHU3ODUwXHU3ODQ3XHU3ODRDXHU3ODZBXHU3ODlCXHU3ODkzXHU3ODlBXHU3ODg3XHU3ODlDXHU3OEExXHU3OEEzXHU3OEIyXHU3OEI5XHU3OEE1XHU3OEQ0XHU3OEQ5XHU3OEM5XHU3OEVDXHU3OEYyXHU3OTA1XHU3OEY0XHU3OTEzXHU3OTI0XHU3OTFFXHU3OTM0XHU5RjlCXHU5RUY5XHU5RUZCXHU5RUZDXHU3NkYxXHU3NzA0XHU3NzBEXHU3NkY5XHU3NzA3XHU3NzA4XHU3NzFBXHU3NzIyXHU3NzE5XHU3NzJEXHU3NzI2XHU3NzM1XHU3NzM4XHU3NzUwXHU3NzUxXHU3NzQ3XHU3NzQzXHU3NzVBXHU3NzY4XCJdLFxuW1wiZWU0MFwiLFwiXHU5ODBGXCIsNjJdLFxuW1wiZWU4MFwiLFwiXHU5ODRFXCIsMzIsXCJcdTc3NjJcdTc3NjVcdTc3N0ZcdTc3OERcdTc3N0RcdTc3ODBcdTc3OENcdTc3OTFcdTc3OUZcdTc3QTBcdTc3QjBcdTc3QjVcdTc3QkRcdTc1M0FcdTc1NDBcdTc1NEVcdTc1NEJcdTc1NDhcdTc1NUJcdTc1NzJcdTc1NzlcdTc1ODNcdTdGNThcdTdGNjFcdTdGNUZcdThBNDhcdTdGNjhcdTdGNzRcdTdGNzFcdTdGNzlcdTdGODFcdTdGN0VcdTc2Q0RcdTc2RTVcdTg4MzJcdTk0ODVcdTk0ODZcdTk0ODdcdTk0OEJcdTk0OEFcdTk0OENcdTk0OERcdTk0OEZcdTk0OTBcdTk0OTRcdTk0OTdcdTk0OTVcdTk0OUFcdTk0OUJcdTk0OUNcdTk0QTNcdTk0QTRcdTk0QUJcdTk0QUFcdTk0QURcdTk0QUNcdTk0QUZcdTk0QjBcdTk0QjJcdTk0QjRcdTk0QjZcIiw0LFwiXHU5NEJDXHU5NEJEXHU5NEJGXHU5NEM0XHU5NEM4XCIsNixcIlx1OTREMFx1OTREMVx1OTREMlx1OTRENVx1OTRENlx1OTREN1x1OTREOVx1OTREOFx1OTREQlx1OTRERVx1OTRERlx1OTRFMFx1OTRFMlx1OTRFNFx1OTRFNVx1OTRFN1x1OTRFOFx1OTRFQVwiXSxcbltcImVmNDBcIixcIlx1OTg2RlwiLDUsXCJcdTk4OEJcdTk4OEVcdTk4OTJcdTk4OTVcdTk4OTlcdTk4QTNcdTk4QThcIiwzNyxcIlx1OThDRlx1OThEMFx1OThENFx1OThENlx1OThEN1x1OThEQlx1OThEQ1x1OThERFx1OThFMFwiLDRdLFxuW1wiZWY4MFwiLFwiXHU5OEU1XHU5OEU2XHU5OEU5XCIsMzAsXCJcdTk0RTlcdTk0RUJcdTk0RUVcdTk0RUZcdTk0RjNcdTk0RjRcdTk0RjVcdTk0RjdcdTk0RjlcdTk0RkNcdTk0RkRcdTk0RkZcdTk1MDNcdTk1MDJcdTk1MDZcdTk1MDdcdTk1MDlcdTk1MEFcdTk1MERcdTk1MEVcdTk1MEZcdTk1MTJcIiw0LFwiXHU5NTE4XHU5NTFCXHU5NTFEXHU5NTFFXHU5NTFGXHU5NTIyXHU5NTJBXHU5NTJCXHU5NTI5XHU5NTJDXHU5NTMxXHU5NTMyXHU5NTM0XHU5NTM2XHU5NTM3XHU5NTM4XHU5NTNDXHU5NTNFXHU5NTNGXHU5NTQyXHU5NTM1XHU5NTQ0XHU5NTQ1XHU5NTQ2XHU5NTQ5XHU5NTRDXHU5NTRFXHU5NTRGXHU5NTUyXHU5NTUzXHU5NTU0XHU5NTU2XHU5NTU3XHU5NTU4XHU5NTU5XHU5NTVCXHU5NTVFXHU5NTVGXHU5NTVEXHU5NTYxXHU5NTYyXHU5NTY0XCIsOCxcIlx1OTU2Rlx1OTU3MVx1OTU3Mlx1OTU3M1x1OTUzQVx1NzdFN1x1NzdFQ1x1OTZDOVx1NzlENVx1NzlFRFx1NzlFM1x1NzlFQlx1N0EwNlx1NUQ0N1x1N0EwM1x1N0EwMlx1N0ExRVx1N0ExNFwiXSxcbltcImYwNDBcIixcIlx1OTkwOFwiLDQsXCJcdTk5MEVcdTk5MEZcdTk5MTFcIiwyOCxcIlx1OTkyRlwiLDI2XSxcbltcImYwODBcIixcIlx1OTk0QVwiLDksXCJcdTk5NTZcIiwxMixcIlx1OTk2NFx1OTk2Nlx1OTk3M1x1OTk3OFx1OTk3OVx1OTk3Qlx1OTk3RVx1OTk4Mlx1OTk4M1x1OTk4OVx1N0EzOVx1N0EzN1x1N0E1MVx1OUVDRlx1OTlBNVx1N0E3MFx1NzY4OFx1NzY4RVx1NzY5M1x1NzY5OVx1NzZBNFx1NzRERVx1NzRFMFx1NzUyQ1x1OUUyMFx1OUUyMlx1OUUyOFwiLDQsXCJcdTlFMzJcdTlFMzFcdTlFMzZcdTlFMzhcdTlFMzdcdTlFMzlcdTlFM0FcdTlFM0VcdTlFNDFcdTlFNDJcdTlFNDRcdTlFNDZcdTlFNDdcdTlFNDhcdTlFNDlcdTlFNEJcdTlFNENcdTlFNEVcdTlFNTFcdTlFNTVcdTlFNTdcdTlFNUFcdTlFNUJcdTlFNUNcdTlFNUVcdTlFNjNcdTlFNjZcIiw2LFwiXHU5RTcxXHU5RTZEXHU5RTczXHU3NTkyXHU3NTk0XHU3NTk2XHU3NUEwXHU3NTlEXHU3NUFDXHU3NUEzXHU3NUIzXHU3NUI0XHU3NUI4XHU3NUM0XHU3NUIxXHU3NUIwXHU3NUMzXHU3NUMyXHU3NUQ2XHU3NUNEXHU3NUUzXHU3NUU4XHU3NUU2XHU3NUU0XHU3NUVCXHU3NUU3XHU3NjAzXHU3NUYxXHU3NUZDXHU3NUZGXHU3NjEwXHU3NjAwXHU3NjA1XHU3NjBDXHU3NjE3XHU3NjBBXHU3NjI1XHU3NjE4XHU3NjE1XHU3NjE5XCJdLFxuW1wiZjE0MFwiLFwiXHU5OThDXHU5OThFXHU5OTlBXCIsMTAsXCJcdTk5QTZcdTk5QTdcdTk5QTlcIiw0N10sXG5bXCJmMTgwXCIsXCJcdTk5RDlcIiwzMixcIlx1NzYxQlx1NzYzQ1x1NzYyMlx1NzYyMFx1NzY0MFx1NzYyRFx1NzYzMFx1NzYzRlx1NzYzNVx1NzY0M1x1NzYzRVx1NzYzM1x1NzY0RFx1NzY1RVx1NzY1NFx1NzY1Q1x1NzY1Nlx1NzY2Qlx1NzY2Rlx1N0ZDQVx1N0FFNlx1N0E3OFx1N0E3OVx1N0E4MFx1N0E4Nlx1N0E4OFx1N0E5NVx1N0FBNlx1N0FBMFx1N0FBQ1x1N0FBOFx1N0FBRFx1N0FCM1x1ODg2NFx1ODg2OVx1ODg3Mlx1ODg3RFx1ODg3Rlx1ODg4Mlx1ODhBMlx1ODhDNlx1ODhCN1x1ODhCQ1x1ODhDOVx1ODhFMlx1ODhDRVx1ODhFM1x1ODhFNVx1ODhGMVx1ODkxQVx1ODhGQ1x1ODhFOFx1ODhGRVx1ODhGMFx1ODkyMVx1ODkxOVx1ODkxM1x1ODkxQlx1ODkwQVx1ODkzNFx1ODkyQlx1ODkzNlx1ODk0MVx1ODk2Nlx1ODk3Qlx1NzU4Qlx1ODBFNVx1NzZCMlx1NzZCNFx1NzdEQ1x1ODAxMlx1ODAxNFx1ODAxNlx1ODAxQ1x1ODAyMFx1ODAyMlx1ODAyNVx1ODAyNlx1ODAyN1x1ODAyOVx1ODAyOFx1ODAzMVx1ODAwQlx1ODAzNVx1ODA0M1x1ODA0Nlx1ODA0RFx1ODA1Mlx1ODA2OVx1ODA3MVx1ODk4M1x1OTg3OFx1OTg4MFx1OTg4M1wiXSxcbltcImYyNDBcIixcIlx1OTlGQVwiLDYyXSxcbltcImYyODBcIixcIlx1OUEzOVwiLDMyLFwiXHU5ODg5XHU5ODhDXHU5ODhEXHU5ODhGXHU5ODk0XHU5ODlBXHU5ODlCXHU5ODlFXHU5ODlGXHU5OEExXHU5OEEyXHU5OEE1XHU5OEE2XHU4NjREXHU4NjU0XHU4NjZDXHU4NjZFXHU4NjdGXHU4NjdBXHU4NjdDXHU4NjdCXHU4NkE4XHU4NjhEXHU4NjhCXHU4NkFDXHU4NjlEXHU4NkE3XHU4NkEzXHU4NkFBXHU4NjkzXHU4NkE5XHU4NkI2XHU4NkM0XHU4NkI1XHU4NkNFXHU4NkIwXHU4NkJBXHU4NkIxXHU4NkFGXHU4NkM5XHU4NkNGXHU4NkI0XHU4NkU5XHU4NkYxXHU4NkYyXHU4NkVEXHU4NkYzXHU4NkQwXHU4NzEzXHU4NkRFXHU4NkY0XHU4NkRGXHU4NkQ4XHU4NkQxXHU4NzAzXHU4NzA3XHU4NkY4XHU4NzA4XHU4NzBBXHU4NzBEXHU4NzA5XHU4NzIzXHU4NzNCXHU4NzFFXHU4NzI1XHU4NzJFXHU4NzFBXHU4NzNFXHU4NzQ4XHU4NzM0XHU4NzMxXHU4NzI5XHU4NzM3XHU4NzNGXHU4NzgyXHU4NzIyXHU4NzdEXHU4NzdFXHU4NzdCXHU4NzYwXHU4NzcwXHU4NzRDXHU4NzZFXHU4NzhCXHU4NzUzXHU4NzYzXHU4NzdDXHU4NzY0XHU4NzU5XHU4NzY1XHU4NzkzXHU4N0FGXHU4N0E4XHU4N0QyXCJdLFxuW1wiZjM0MFwiLFwiXHU5QTVBXCIsMTcsXCJcdTlBNzJcdTlBODNcdTlBODlcdTlBOERcdTlBOEVcdTlBOTRcdTlBOTVcdTlBOTlcdTlBQTZcdTlBQTlcIiw2LFwiXHU5QUIyXHU5QUIzXHU5QUI0XHU5QUI1XHU5QUI5XHU5QUJCXHU5QUJEXHU5QUJFXHU5QUJGXHU5QUMzXHU5QUM0XHU5QUM2XCIsNCxcIlx1OUFDRFx1OUFDRVx1OUFDRlx1OUFEMFx1OUFEMlx1OUFENFx1OUFENVx1OUFENlx1OUFEN1x1OUFEOVx1OUFEQVx1OUFEQlx1OUFEQ1wiXSxcbltcImYzODBcIixcIlx1OUFERFx1OUFERVx1OUFFMFx1OUFFMlx1OUFFM1x1OUFFNFx1OUFFNVx1OUFFN1x1OUFFOFx1OUFFOVx1OUFFQVx1OUFFQ1x1OUFFRVx1OUFGMFwiLDgsXCJcdTlBRkFcdTlBRkNcIiw2LFwiXHU5QjA0XHU5QjA1XHU5QjA2XHU4N0M2XHU4Nzg4XHU4Nzg1XHU4N0FEXHU4Nzk3XHU4NzgzXHU4N0FCXHU4N0U1XHU4N0FDXHU4N0I1XHU4N0IzXHU4N0NCXHU4N0QzXHU4N0JEXHU4N0QxXHU4N0MwXHU4N0NBXHU4N0RCXHU4N0VBXHU4N0UwXHU4N0VFXHU4ODE2XHU4ODEzXHU4N0ZFXHU4ODBBXHU4ODFCXHU4ODIxXHU4ODM5XHU4ODNDXHU3RjM2XHU3RjQyXHU3RjQ0XHU3RjQ1XHU4MjEwXHU3QUZBXHU3QUZEXHU3QjA4XHU3QjAzXHU3QjA0XHU3QjE1XHU3QjBBXHU3QjJCXHU3QjBGXHU3QjQ3XHU3QjM4XHU3QjJBXHU3QjE5XHU3QjJFXHU3QjMxXHU3QjIwXHU3QjI1XHU3QjI0XHU3QjMzXHU3QjNFXHU3QjFFXHU3QjU4XHU3QjVBXHU3QjQ1XHU3Qjc1XHU3QjRDXHU3QjVEXHU3QjYwXHU3QjZFXHU3QjdCXHU3QjYyXHU3QjcyXHU3QjcxXHU3QjkwXHU3QkE2XHU3QkE3XHU3QkI4XHU3QkFDXHU3QjlEXHU3QkE4XHU3Qjg1XHU3QkFBXHU3QjlDXHU3QkEyXHU3QkFCXHU3QkI0XHU3QkQxXHU3QkMxXHU3QkNDXHU3QkREXHU3QkRBXHU3QkU1XHU3QkU2XHU3QkVBXHU3QzBDXHU3QkZFXHU3QkZDXHU3QzBGXHU3QzE2XHU3QzBCXCJdLFxuW1wiZjQ0MFwiLFwiXHU5QjA3XHU5QjA5XCIsNSxcIlx1OUIxMFx1OUIxMVx1OUIxMlx1OUIxNFwiLDEwLFwiXHU5QjIwXHU5QjIxXHU5QjIyXHU5QjI0XCIsMTAsXCJcdTlCMzBcdTlCMzFcdTlCMzNcIiw3LFwiXHU5QjNEXHU5QjNFXHU5QjNGXHU5QjQwXHU5QjQ2XHU5QjRBXHU5QjRCXHU5QjRDXHU5QjRFXHU5QjUwXHU5QjUyXHU5QjUzXHU5QjU1XCIsNV0sXG5bXCJmNDgwXCIsXCJcdTlCNUJcIiwzMixcIlx1N0MxRlx1N0MyQVx1N0MyNlx1N0MzOFx1N0M0MVx1N0M0MFx1ODFGRVx1ODIwMVx1ODIwMlx1ODIwNFx1ODFFQ1x1ODg0NFx1ODIyMVx1ODIyMlx1ODIyM1x1ODIyRFx1ODIyRlx1ODIyOFx1ODIyQlx1ODIzOFx1ODIzQlx1ODIzM1x1ODIzNFx1ODIzRVx1ODI0NFx1ODI0OVx1ODI0Qlx1ODI0Rlx1ODI1QVx1ODI1Rlx1ODI2OFx1ODg3RVx1ODg4NVx1ODg4OFx1ODhEOFx1ODhERlx1ODk1RVx1N0Y5RFx1N0Y5Rlx1N0ZBN1x1N0ZBRlx1N0ZCMFx1N0ZCMlx1N0M3Q1x1NjU0OVx1N0M5MVx1N0M5RFx1N0M5Q1x1N0M5RVx1N0NBMlx1N0NCMlx1N0NCQ1x1N0NCRFx1N0NDMVx1N0NDN1x1N0NDQ1x1N0NDRFx1N0NDOFx1N0NDNVx1N0NEN1x1N0NFOFx1ODI2RVx1NjZBOFx1N0ZCRlx1N0ZDRVx1N0ZENVx1N0ZFNVx1N0ZFMVx1N0ZFNlx1N0ZFOVx1N0ZFRVx1N0ZGM1x1N0NGOFx1N0Q3N1x1N0RBNlx1N0RBRVx1N0U0N1x1N0U5Qlx1OUVCOFx1OUVCNFx1OEQ3M1x1OEQ4NFx1OEQ5NFx1OEQ5MVx1OERCMVx1OEQ2N1x1OEQ2RFx1OEM0N1x1OEM0OVx1OTE0QVx1OTE1MFx1OTE0RVx1OTE0Rlx1OTE2NFwiXSxcbltcImY1NDBcIixcIlx1OUI3Q1wiLDYyXSxcbltcImY1ODBcIixcIlx1OUJCQlwiLDMyLFwiXHU5MTYyXHU5MTYxXHU5MTcwXHU5MTY5XHU5MTZGXHU5MTdEXHU5MTdFXHU5MTcyXHU5MTc0XHU5MTc5XHU5MThDXHU5MTg1XHU5MTkwXHU5MThEXHU5MTkxXHU5MUEyXHU5MUEzXHU5MUFBXHU5MUFEXHU5MUFFXHU5MUFGXHU5MUI1XHU5MUI0XHU5MUJBXHU4QzU1XHU5RTdFXHU4REI4XHU4REVCXHU4RTA1XHU4RTU5XHU4RTY5XHU4REI1XHU4REJGXHU4REJDXHU4REJBXHU4REM0XHU4REQ2XHU4REQ3XHU4RERBXHU4RERFXHU4RENFXHU4RENGXHU4RERCXHU4REM2XHU4REVDXHU4REY3XHU4REY4XHU4REUzXHU4REY5XHU4REZCXHU4REU0XHU4RTA5XHU4REZEXHU4RTE0XHU4RTFEXHU4RTFGXHU4RTJDXHU4RTJFXHU4RTIzXHU4RTJGXHU4RTNBXHU4RTQwXHU4RTM5XHU4RTM1XHU4RTNEXHU4RTMxXHU4RTQ5XHU4RTQxXHU4RTQyXHU4RTUxXHU4RTUyXHU4RTRBXHU4RTcwXHU4RTc2XHU4RTdDXHU4RTZGXHU4RTc0XHU4RTg1XHU4RThGXHU4RTk0XHU4RTkwXHU4RTlDXHU4RTlFXHU4Qzc4XHU4QzgyXHU4QzhBXHU4Qzg1XHU4Qzk4XHU4Qzk0XHU2NTlCXHU4OUQ2XHU4OURFXHU4OURBXHU4OURDXCJdLFxuW1wiZjY0MFwiLFwiXHU5QkRDXCIsNjJdLFxuW1wiZjY4MFwiLFwiXHU5QzFCXCIsMzIsXCJcdTg5RTVcdTg5RUJcdTg5RUZcdThBM0VcdThCMjZcdTk3NTNcdTk2RTlcdTk2RjNcdTk2RUZcdTk3MDZcdTk3MDFcdTk3MDhcdTk3MEZcdTk3MEVcdTk3MkFcdTk3MkRcdTk3MzBcdTk3M0VcdTlGODBcdTlGODNcdTlGODVcIiw1LFwiXHU5RjhDXHU5RUZFXHU5RjBCXHU5RjBEXHU5NkI5XHU5NkJDXHU5NkJEXHU5NkNFXHU5NkQyXHU3N0JGXHU5NkUwXHU5MjhFXHU5MkFFXHU5MkM4XHU5MzNFXHU5MzZBXHU5M0NBXHU5MzhGXHU5NDNFXHU5NDZCXHU5QzdGXHU5QzgyXHU5Qzg1XHU5Qzg2XHU5Qzg3XHU5Qzg4XHU3QTIzXHU5QzhCXHU5QzhFXHU5QzkwXHU5QzkxXHU5QzkyXHU5Qzk0XHU5Qzk1XHU5QzlBXHU5QzlCXHU5QzlFXCIsNSxcIlx1OUNBNVwiLDQsXCJcdTlDQUJcdTlDQURcdTlDQUVcdTlDQjBcIiw3LFwiXHU5Q0JBXHU5Q0JCXHU5Q0JDXHU5Q0JEXHU5Q0M0XHU5Q0M1XHU5Q0M2XHU5Q0M3XHU5Q0NBXHU5Q0NCXCJdLFxuW1wiZjc0MFwiLFwiXHU5QzNDXCIsNjJdLFxuW1wiZjc4MFwiLFwiXHU5QzdCXHU5QzdEXHU5QzdFXHU5QzgwXHU5QzgzXHU5Qzg0XHU5Qzg5XHU5QzhBXHU5QzhDXHU5QzhGXHU5QzkzXHU5Qzk2XHU5Qzk3XHU5Qzk4XHU5Qzk5XHU5QzlEXHU5Q0FBXHU5Q0FDXHU5Q0FGXHU5Q0I5XHU5Q0JFXCIsNCxcIlx1OUNDOFx1OUNDOVx1OUNEMVx1OUNEMlx1OUNEQVx1OUNEQlx1OUNFMFx1OUNFMVx1OUNDQ1wiLDQsXCJcdTlDRDNcdTlDRDRcdTlDRDVcdTlDRDdcdTlDRDhcdTlDRDlcdTlDRENcdTlDRERcdTlDREZcdTlDRTJcdTk3N0NcdTk3ODVcdTk3OTFcdTk3OTJcdTk3OTRcdTk3QUZcdTk3QUJcdTk3QTNcdTk3QjJcdTk3QjRcdTlBQjFcdTlBQjBcdTlBQjdcdTlFNThcdTlBQjZcdTlBQkFcdTlBQkNcdTlBQzFcdTlBQzBcdTlBQzVcdTlBQzJcdTlBQ0JcdTlBQ0NcdTlBRDFcdTlCNDVcdTlCNDNcdTlCNDdcdTlCNDlcdTlCNDhcdTlCNERcdTlCNTFcdTk4RThcdTk5MERcdTk5MkVcdTk5NTVcdTk5NTRcdTlBREZcdTlBRTFcdTlBRTZcdTlBRUZcdTlBRUJcdTlBRkJcdTlBRURcdTlBRjlcdTlCMDhcdTlCMEZcdTlCMTNcdTlCMUZcdTlCMjNcdTlFQkRcdTlFQkVcdTdFM0JcdTlFODJcdTlFODdcdTlFODhcdTlFOEJcdTlFOTJcdTkzRDZcdTlFOURcdTlFOUZcdTlFREJcdTlFRENcdTlFRERcdTlFRTBcdTlFREZcdTlFRTJcdTlFRTlcdTlFRTdcdTlFRTVcdTlFRUFcdTlFRUZcdTlGMjJcdTlGMkNcdTlGMkZcdTlGMzlcdTlGMzdcdTlGM0RcdTlGM0VcdTlGNDRcIl0sXG5bXCJmODQwXCIsXCJcdTlDRTNcIiw2Ml0sXG5bXCJmODgwXCIsXCJcdTlEMjJcIiwzMl0sXG5bXCJmOTQwXCIsXCJcdTlENDNcIiw2Ml0sXG5bXCJmOTgwXCIsXCJcdTlEODJcIiwzMl0sXG5bXCJmYTQwXCIsXCJcdTlEQTNcIiw2Ml0sXG5bXCJmYTgwXCIsXCJcdTlERTJcIiwzMl0sXG5bXCJmYjQwXCIsXCJcdTlFMDNcIiwyNyxcIlx1OUUyNFx1OUUyN1x1OUUyRVx1OUUzMFx1OUUzNFx1OUUzQlx1OUUzQ1x1OUU0MFx1OUU0RFx1OUU1MFx1OUU1Mlx1OUU1M1x1OUU1NFx1OUU1Nlx1OUU1OVx1OUU1RFx1OUU1Rlx1OUU2MFx1OUU2MVx1OUU2Mlx1OUU2NVx1OUU2RVx1OUU2Rlx1OUU3Mlx1OUU3NFwiLDksXCJcdTlFODBcIl0sXG5bXCJmYjgwXCIsXCJcdTlFODFcdTlFODNcdTlFODRcdTlFODVcdTlFODZcdTlFODlcdTlFOEFcdTlFOENcIiw1LFwiXHU5RTk0XCIsOCxcIlx1OUU5RVx1OUVBMFwiLDUsXCJcdTlFQTdcdTlFQThcdTlFQTlcdTlFQUFcIl0sXG5bXCJmYzQwXCIsXCJcdTlFQUJcIiw4LFwiXHU5RUI1XHU5RUI2XHU5RUI3XHU5RUI5XHU5RUJBXHU5RUJDXHU5RUJGXCIsNCxcIlx1OUVDNVx1OUVDNlx1OUVDN1x1OUVDOFx1OUVDQVx1OUVDQlx1OUVDQ1x1OUVEMFx1OUVEMlx1OUVEM1x1OUVENVx1OUVENlx1OUVEN1x1OUVEOVx1OUVEQVx1OUVERVx1OUVFMVx1OUVFM1x1OUVFNFx1OUVFNlx1OUVFOFx1OUVFQlx1OUVFQ1x1OUVFRFx1OUVFRVx1OUVGMFwiLDgsXCJcdTlFRkFcdTlFRkRcdTlFRkZcIiw2XSxcbltcImZjODBcIixcIlx1OUYwNlwiLDQsXCJcdTlGMENcdTlGMEZcdTlGMTFcdTlGMTJcdTlGMTRcdTlGMTVcdTlGMTZcdTlGMThcdTlGMUFcIiw1LFwiXHU5RjIxXHU5RjIzXCIsOCxcIlx1OUYyRFx1OUYyRVx1OUYzMFx1OUYzMVwiXSxcbltcImZkNDBcIixcIlx1OUYzMlwiLDQsXCJcdTlGMzhcdTlGM0FcdTlGM0NcdTlGM0ZcIiw0LFwiXHU5RjQ1XCIsMTAsXCJcdTlGNTJcIiwzOF0sXG5bXCJmZDgwXCIsXCJcdTlGNzlcIiw1LFwiXHU5RjgxXHU5RjgyXHU5RjhEXCIsMTEsXCJcdTlGOUNcdTlGOURcdTlGOUVcdTlGQTFcIiw0LFwiXHVGOTJDXHVGOTc5XHVGOTk1XHVGOUU3XHVGOUYxXCJdLFxuW1wiZmU0MFwiLFwiXHVGQTBDXHVGQTBEXHVGQTBFXHVGQTBGXHVGQTExXHVGQTEzXHVGQTE0XHVGQTE4XHVGQTFGXHVGQTIwXHVGQTIxXHVGQTIzXHVGQTI0XHVGQTI3XHVGQTI4XHVGQTI5XCJdXG5dXG4iLCAiW1xuW1wiYTE0MFwiLFwiXHVFNEM2XCIsNjJdLFxuW1wiYTE4MFwiLFwiXHVFNTA1XCIsMzJdLFxuW1wiYTI0MFwiLFwiXHVFNTI2XCIsNjJdLFxuW1wiYTI4MFwiLFwiXHVFNTY1XCIsMzJdLFxuW1wiYTJhYlwiLFwiXHVFNzY2XCIsNV0sXG5bXCJhMmUzXCIsXCJcdTIwQUNcdUU3NkRcIl0sXG5bXCJhMmVmXCIsXCJcdUU3NkVcdUU3NkZcIl0sXG5bXCJhMmZkXCIsXCJcdUU3NzBcdUU3NzFcIl0sXG5bXCJhMzQwXCIsXCJcdUU1ODZcIiw2Ml0sXG5bXCJhMzgwXCIsXCJcdUU1QzVcIiwzMSxcIlx1MzAwMFwiXSxcbltcImE0NDBcIixcIlx1RTVFNlwiLDYyXSxcbltcImE0ODBcIixcIlx1RTYyNVwiLDMyXSxcbltcImE0ZjRcIixcIlx1RTc3MlwiLDEwXSxcbltcImE1NDBcIixcIlx1RTY0NlwiLDYyXSxcbltcImE1ODBcIixcIlx1RTY4NVwiLDMyXSxcbltcImE1ZjdcIixcIlx1RTc3RFwiLDddLFxuW1wiYTY0MFwiLFwiXHVFNkE2XCIsNjJdLFxuW1wiYTY4MFwiLFwiXHVFNkU1XCIsMzJdLFxuW1wiYTZiOVwiLFwiXHVFNzg1XCIsN10sXG5bXCJhNmQ5XCIsXCJcdUU3OERcIiw2XSxcbltcImE2ZWNcIixcIlx1RTc5NFx1RTc5NVwiXSxcbltcImE2ZjNcIixcIlx1RTc5NlwiXSxcbltcImE2ZjZcIixcIlx1RTc5N1wiLDhdLFxuW1wiYTc0MFwiLFwiXHVFNzA2XCIsNjJdLFxuW1wiYTc4MFwiLFwiXHVFNzQ1XCIsMzJdLFxuW1wiYTdjMlwiLFwiXHVFN0EwXCIsMTRdLFxuW1wiYTdmMlwiLFwiXHVFN0FGXCIsMTJdLFxuW1wiYTg5NlwiLFwiXHVFN0JDXCIsMTBdLFxuW1wiYThiY1wiLFwiXHUxRTNGXCJdLFxuW1wiYThiZlwiLFwiXHUwMUY5XCJdLFxuW1wiYThjMVwiLFwiXHVFN0M5XHVFN0NBXHVFN0NCXHVFN0NDXCJdLFxuW1wiYThlYVwiLFwiXHVFN0NEXCIsMjBdLFxuW1wiYTk1OFwiLFwiXHVFN0UyXCJdLFxuW1wiYTk1YlwiLFwiXHVFN0UzXCJdLFxuW1wiYTk1ZFwiLFwiXHVFN0U0XHVFN0U1XHVFN0U2XCJdLFxuW1wiYTk4OVwiLFwiXHUzMDNFXHUyRkYwXCIsMTFdLFxuW1wiYTk5N1wiLFwiXHVFN0Y0XCIsMTJdLFxuW1wiYTlmMFwiLFwiXHVFODAxXCIsMTRdLFxuW1wiYWFhMVwiLFwiXHVFMDAwXCIsOTNdLFxuW1wiYWJhMVwiLFwiXHVFMDVFXCIsOTNdLFxuW1wiYWNhMVwiLFwiXHVFMEJDXCIsOTNdLFxuW1wiYWRhMVwiLFwiXHVFMTFBXCIsOTNdLFxuW1wiYWVhMVwiLFwiXHVFMTc4XCIsOTNdLFxuW1wiYWZhMVwiLFwiXHVFMUQ2XCIsOTNdLFxuW1wiZDdmYVwiLFwiXHVFODEwXCIsNF0sXG5bXCJmOGExXCIsXCJcdUUyMzRcIiw5M10sXG5bXCJmOWExXCIsXCJcdUUyOTJcIiw5M10sXG5bXCJmYWExXCIsXCJcdUUyRjBcIiw5M10sXG5bXCJmYmExXCIsXCJcdUUzNEVcIiw5M10sXG5bXCJmY2ExXCIsXCJcdUUzQUNcIiw5M10sXG5bXCJmZGExXCIsXCJcdUU0MEFcIiw5M10sXG5bXCJmZTUwXCIsXCJcdTJFODFcdUU4MTZcdUU4MTdcdUU4MThcdTJFODRcdTM0NzNcdTM0NDdcdTJFODhcdTJFOEJcdUU4MUVcdTM1OUVcdTM2MUFcdTM2MEVcdTJFOENcdTJFOTdcdTM5NkVcdTM5MThcdUU4MjZcdTM5Q0ZcdTM5REZcdTNBNzNcdTM5RDBcdUU4MkJcdUU4MkNcdTNCNEVcdTNDNkVcdTNDRTBcdTJFQTdcdUU4MzFcdUU4MzJcdTJFQUFcdTQwNTZcdTQxNUZcdTJFQUVcdTQzMzdcdTJFQjNcdTJFQjZcdTJFQjdcdUU4M0JcdTQzQjFcdTQzQUNcdTJFQkJcdTQzRERcdTQ0RDZcdTQ2NjFcdTQ2NENcdUU4NDNcIl0sXG5bXCJmZTgwXCIsXCJcdTQ3MjNcdTQ3MjlcdTQ3N0NcdTQ3OERcdTJFQ0FcdTQ5NDdcdTQ5N0FcdTQ5N0RcdTQ5ODJcdTQ5ODNcdTQ5ODVcdTQ5ODZcdTQ5OUZcdTQ5OUJcdTQ5QjdcdTQ5QjZcdUU4NTRcdUU4NTVcdTRDQTNcdTRDOUZcdTRDQTBcdTRDQTFcdTRDNzdcdTRDQTJcdTREMTNcIiw2LFwiXHU0REFFXHVFODY0XHVFNDY4XCIsOTNdLFxuW1wiODEzNWY0MzdcIixcIlx1RTdDN1wiXVxuXVxuIiwgIntcInVDaGFyc1wiOlsxMjgsMTY1LDE2OSwxNzgsMTg0LDIxNiwyMjYsMjM1LDIzOCwyNDQsMjQ4LDI1MSwyNTMsMjU4LDI3NiwyODQsMzAwLDMyNSwzMjksMzM0LDM2NCw0NjMsNDY1LDQ2Nyw0NjksNDcxLDQ3Myw0NzUsNDc3LDUwNiw1OTQsNjEwLDcxMiw3MTYsNzMwLDkzMCw5MzgsOTYyLDk3MCwxMDI2LDExMDQsMTEwNiw4MjA5LDgyMTUsODIxOCw4MjIyLDgyMzEsODI0MSw4MjQ0LDgyNDYsODI1Miw4MzY1LDg0NTIsODQ1NCw4NDU4LDg0NzEsODQ4Miw4NTU2LDg1NzAsODU5Niw4NjAyLDg3MTMsODcyMCw4NzIyLDg3MjYsODczMSw4NzM3LDg3NDAsODc0Miw4NzQ4LDg3NTEsODc2MCw4NzY2LDg3NzcsODc4MSw4Nzg3LDg4MDIsODgwOCw4ODE2LDg4NTQsODg1OCw4ODcwLDg4OTYsODk3OSw5MzIyLDkzNzIsOTU0OCw5NTg4LDk2MTYsOTYyMiw5NjM0LDk2NTIsOTY2Miw5NjcyLDk2NzYsOTY4MCw5NzAyLDk3MzUsOTczOCw5NzkzLDk3OTUsMTE5MDYsMTE5MDksMTE5MTMsMTE5MTcsMTE5MjgsMTE5NDQsMTE5NDcsMTE5NTEsMTE5NTYsMTE5NjAsMTE5NjQsMTE5NzksMTIyODQsMTIyOTIsMTIzMTIsMTIzMTksMTIzMzAsMTIzNTEsMTI0MzYsMTI0NDcsMTI1MzUsMTI1NDMsMTI1ODYsMTI4NDIsMTI4NTAsMTI5NjQsMTMyMDAsMTMyMTUsMTMyMTgsMTMyNTMsMTMyNjMsMTMyNjcsMTMyNzAsMTMzODQsMTM0MjgsMTM3MjcsMTM4MzksMTM4NTEsMTQ2MTcsMTQ3MDMsMTQ4MDEsMTQ4MTYsMTQ5NjQsMTUxODMsMTU0NzEsMTU1ODUsMTY0NzEsMTY3MzYsMTcyMDgsMTczMjUsMTczMzAsMTczNzQsMTc2MjMsMTc5OTcsMTgwMTgsMTgyMTIsMTgyMTgsMTgzMDEsMTgzMTgsMTg3NjAsMTg4MTEsMTg4MTQsMTg4MjAsMTg4MjMsMTg4NDQsMTg4NDgsMTg4NzIsMTk1NzYsMTk2MjAsMTk3MzgsMTk4ODcsNDA4NzAsNTkyNDQsNTkzMzYsNTkzNjcsNTk0MTMsNTk0MTcsNTk0MjMsNTk0MzEsNTk0MzcsNTk0NDMsNTk0NTIsNTk0NjAsNTk0NzgsNTk0OTMsNjM3ODksNjM4NjYsNjM4OTQsNjM5NzYsNjM5ODYsNjQwMTYsNjQwMTgsNjQwMjEsNjQwMjUsNjQwMzQsNjQwMzcsNjQwNDIsNjUwNzQsNjUwOTMsNjUxMDcsNjUxMTIsNjUxMjcsNjUxMzIsNjUzNzUsNjU1MTAsNjU1MzZdLFwiZ2JDaGFyc1wiOlswLDM2LDM4LDQ1LDUwLDgxLDg5LDk1LDk2LDEwMCwxMDMsMTA0LDEwNSwxMDksMTI2LDEzMywxNDgsMTcyLDE3NSwxNzksMjA4LDMwNiwzMDcsMzA4LDMwOSwzMTAsMzExLDMxMiwzMTMsMzQxLDQyOCw0NDMsNTQ0LDU0NSw1NTgsNzQxLDc0Miw3NDksNzUwLDgwNSw4MTksODIwLDc5MjIsNzkyNCw3OTI1LDc5MjcsNzkzNCw3OTQzLDc5NDQsNzk0NSw3OTUwLDgwNjIsODE0OCw4MTQ5LDgxNTIsODE2NCw4MTc0LDgyMzYsODI0MCw4MjYyLDgyNjQsODM3NCw4MzgwLDgzODEsODM4NCw4Mzg4LDgzOTAsODM5Miw4MzkzLDgzOTQsODM5Niw4NDAxLDg0MDYsODQxNiw4NDE5LDg0MjQsODQzNyw4NDM5LDg0NDUsODQ4Miw4NDg1LDg0OTYsODUyMSw4NjAzLDg5MzYsODk0Niw5MDQ2LDkwNTAsOTA2Myw5MDY2LDkwNzYsOTA5Miw5MTAwLDkxMDgsOTExMSw5MTEzLDkxMzEsOTE2Miw5MTY0LDkyMTgsOTIxOSwxMTMyOSwxMTMzMSwxMTMzNCwxMTMzNiwxMTM0NiwxMTM2MSwxMTM2MywxMTM2NiwxMTM3MCwxMTM3MiwxMTM3NSwxMTM4OSwxMTY4MiwxMTY4NiwxMTY4NywxMTY5MiwxMTY5NCwxMTcxNCwxMTcxNiwxMTcyMywxMTcyNSwxMTczMCwxMTczNiwxMTk4MiwxMTk4OSwxMjEwMiwxMjMzNiwxMjM0OCwxMjM1MCwxMjM4NCwxMjM5MywxMjM5NSwxMjM5NywxMjUxMCwxMjU1MywxMjg1MSwxMjk2MiwxMjk3MywxMzczOCwxMzgyMywxMzkxOSwxMzkzMywxNDA4MCwxNDI5OCwxNDU4NSwxNDY5OCwxNTU4MywxNTg0NywxNjMxOCwxNjQzNCwxNjQzOCwxNjQ4MSwxNjcyOSwxNzEwMiwxNzEyMiwxNzMxNSwxNzMyMCwxNzQwMiwxNzQxOCwxNzg1OSwxNzkwOSwxNzkxMSwxNzkxNSwxNzkxNiwxNzkzNiwxNzkzOSwxNzk2MSwxODY2NCwxODcwMywxODgxNCwxODk2MiwxOTA0MywzMzQ2OSwzMzQ3MCwzMzQ3MSwzMzQ4NCwzMzQ4NSwzMzQ5MCwzMzQ5NywzMzUwMSwzMzUwNSwzMzUxMywzMzUyMCwzMzUzNiwzMzU1MCwzNzg0NSwzNzkyMSwzNzk0OCwzODAyOSwzODAzOCwzODA2NCwzODA2NSwzODA2NiwzODA2OSwzODA3NSwzODA3NiwzODA3OCwzOTEwOCwzOTEwOSwzOTExMywzOTExNCwzOTExNSwzOTExNiwzOTI2NSwzOTM5NCwxODkwMDBdfSIsICJbXG5bXCIwXCIsXCJcXHUwMDAwXCIsMTI3XSxcbltcIjgxNDFcIixcIlx1QUMwMlx1QUMwM1x1QUMwNVx1QUMwNlx1QUMwQlwiLDQsXCJcdUFDMThcdUFDMUVcdUFDMUZcdUFDMjFcdUFDMjJcdUFDMjNcdUFDMjVcIiw2LFwiXHVBQzJFXHVBQzMyXHVBQzMzXHVBQzM0XCJdLFxuW1wiODE2MVwiLFwiXHVBQzM1XHVBQzM2XHVBQzM3XHVBQzNBXHVBQzNCXHVBQzNEXHVBQzNFXHVBQzNGXHVBQzQxXCIsOSxcIlx1QUM0Q1x1QUM0RVwiLDUsXCJcdUFDNTVcIl0sXG5bXCI4MTgxXCIsXCJcdUFDNTZcdUFDNTdcdUFDNTlcdUFDNUFcdUFDNUJcdUFDNURcIiwxOCxcIlx1QUM3Mlx1QUM3M1x1QUM3NVx1QUM3Nlx1QUM3OVx1QUM3QlwiLDQsXCJcdUFDODJcdUFDODdcdUFDODhcdUFDOERcdUFDOEVcdUFDOEZcdUFDOTFcdUFDOTJcdUFDOTNcdUFDOTVcIiw2LFwiXHVBQzlFXHVBQ0EyXCIsNSxcIlx1QUNBQlx1QUNBRFx1QUNBRVx1QUNCMVwiLDYsXCJcdUFDQkFcdUFDQkVcdUFDQkZcdUFDQzBcdUFDQzJcdUFDQzNcdUFDQzVcdUFDQzZcdUFDQzdcdUFDQzlcdUFDQ0FcdUFDQ0JcdUFDQ0RcIiw3LFwiXHVBQ0Q2XHVBQ0Q4XCIsNyxcIlx1QUNFMlx1QUNFM1x1QUNFNVx1QUNFNlx1QUNFOVx1QUNFQlx1QUNFRFx1QUNFRVx1QUNGMlx1QUNGNFx1QUNGN1wiLDQsXCJcdUFDRkVcdUFDRkZcdUFEMDFcdUFEMDJcdUFEMDNcdUFEMDVcdUFEMDdcIiw0LFwiXHVBRDBFXHVBRDEwXHVBRDEyXHVBRDEzXCJdLFxuW1wiODI0MVwiLFwiXHVBRDE0XHVBRDE1XHVBRDE2XHVBRDE3XHVBRDE5XHVBRDFBXHVBRDFCXHVBRDFEXHVBRDFFXHVBRDFGXHVBRDIxXCIsNyxcIlx1QUQyQVx1QUQyQlx1QUQyRVwiLDVdLFxuW1wiODI2MVwiLFwiXHVBRDM2XHVBRDM3XHVBRDM5XHVBRDNBXHVBRDNCXHVBRDNEXCIsNixcIlx1QUQ0Nlx1QUQ0OFx1QUQ0QVwiLDUsXCJcdUFENTFcdUFENTJcdUFENTNcdUFENTVcdUFENTZcdUFENTdcIl0sXG5bXCI4MjgxXCIsXCJcdUFENTlcIiw3LFwiXHVBRDYyXHVBRDY0XCIsNyxcIlx1QUQ2RVx1QUQ2Rlx1QUQ3MVx1QUQ3Mlx1QUQ3N1x1QUQ3OFx1QUQ3OVx1QUQ3QVx1QUQ3RVx1QUQ4MFx1QUQ4M1wiLDQsXCJcdUFEOEFcdUFEOEJcdUFEOERcdUFEOEVcdUFEOEZcdUFEOTFcIiwxMCxcIlx1QUQ5RVwiLDUsXCJcdUFEQTVcIiwxNyxcIlx1QURCOFwiLDcsXCJcdUFEQzJcdUFEQzNcdUFEQzVcdUFEQzZcdUFEQzdcdUFEQzlcIiw2LFwiXHVBREQyXHVBREQ0XCIsNyxcIlx1QURERFx1QURERVx1QURERlx1QURFMVx1QURFMlx1QURFM1x1QURFNVwiLDE4XSxcbltcIjgzNDFcIixcIlx1QURGQVx1QURGQlx1QURGRFx1QURGRVx1QUUwMlwiLDUsXCJcdUFFMEFcdUFFMENcdUFFMEVcIiw1LFwiXHVBRTE1XCIsN10sXG5bXCI4MzYxXCIsXCJcdUFFMURcIiwxOCxcIlx1QUUzMlx1QUUzM1x1QUUzNVx1QUUzNlx1QUUzOVx1QUUzQlx1QUUzQ1wiXSxcbltcIjgzODFcIixcIlx1QUUzRFx1QUUzRVx1QUUzRlx1QUU0Mlx1QUU0NFx1QUU0N1x1QUU0OFx1QUU0OVx1QUU0Qlx1QUU0Rlx1QUU1MVx1QUU1Mlx1QUU1M1x1QUU1NVx1QUU1N1wiLDQsXCJcdUFFNUVcdUFFNjJcdUFFNjNcdUFFNjRcdUFFNjZcdUFFNjdcdUFFNkFcdUFFNkJcdUFFNkRcdUFFNkVcdUFFNkZcdUFFNzFcIiw2LFwiXHVBRTdBXHVBRTdFXCIsNSxcIlx1QUU4NlwiLDUsXCJcdUFFOERcIiw0NixcIlx1QUVCRlx1QUVDMVx1QUVDMlx1QUVDM1x1QUVDNVwiLDYsXCJcdUFFQ0VcdUFFRDJcIiw1LFwiXHVBRURBXHVBRURCXHVBRUREXCIsOF0sXG5bXCI4NDQxXCIsXCJcdUFFRTZcdUFFRTdcdUFFRTlcdUFFRUFcdUFFRUNcdUFFRUVcIiw1LFwiXHVBRUY1XHVBRUY2XHVBRUY3XHVBRUY5XHVBRUZBXHVBRUZCXHVBRUZEXCIsOF0sXG5bXCI4NDYxXCIsXCJcdUFGMDZcdUFGMDlcdUFGMEFcdUFGMEJcdUFGMENcdUFGMEVcdUFGMEZcdUFGMTFcIiwxOF0sXG5bXCI4NDgxXCIsXCJcdUFGMjRcIiw3LFwiXHVBRjJFXHVBRjJGXHVBRjMxXHVBRjMzXHVBRjM1XCIsNixcIlx1QUYzRVx1QUY0MFx1QUY0NFx1QUY0NVx1QUY0Nlx1QUY0N1x1QUY0QVwiLDUsXCJcdUFGNTFcIiwxMCxcIlx1QUY1RVwiLDUsXCJcdUFGNjZcIiwxOCxcIlx1QUY3QVwiLDUsXCJcdUFGODFcdUFGODJcdUFGODNcdUFGODVcdUFGODZcdUFGODdcdUFGODlcIiw2LFwiXHVBRjkyXHVBRjkzXHVBRjk0XHVBRjk2XCIsNSxcIlx1QUY5RFwiLDI2LFwiXHVBRkJBXHVBRkJCXHVBRkJEXHVBRkJFXCJdLFxuW1wiODU0MVwiLFwiXHVBRkJGXHVBRkMxXCIsNSxcIlx1QUZDQVx1QUZDQ1x1QUZDRlwiLDQsXCJcdUFGRDVcIiw2LFwiXHVBRkREXCIsNF0sXG5bXCI4NTYxXCIsXCJcdUFGRTJcIiw1LFwiXHVBRkVBXCIsNSxcIlx1QUZGMlx1QUZGM1x1QUZGNVx1QUZGNlx1QUZGN1x1QUZGOVwiLDYsXCJcdUIwMDJcdUIwMDNcIl0sXG5bXCI4NTgxXCIsXCJcdUIwMDVcIiw2LFwiXHVCMDBEXHVCMDBFXHVCMDBGXHVCMDExXHVCMDEyXHVCMDEzXHVCMDE1XCIsNixcIlx1QjAxRVwiLDksXCJcdUIwMjlcIiwyNixcIlx1QjA0Nlx1QjA0N1x1QjA0OVx1QjA0Qlx1QjA0RFx1QjA0Rlx1QjA1MFx1QjA1MVx1QjA1Mlx1QjA1Nlx1QjA1OFx1QjA1QVx1QjA1Qlx1QjA1Q1x1QjA1RVwiLDI5LFwiXHVCMDdFXHVCMDdGXHVCMDgxXHVCMDgyXHVCMDgzXHVCMDg1XCIsNixcIlx1QjA4RVx1QjA5MFx1QjA5MlwiLDUsXCJcdUIwOUJcdUIwOURcdUIwOUVcdUIwQTNcdUIwQTRcIl0sXG5bXCI4NjQxXCIsXCJcdUIwQTVcdUIwQTZcdUIwQTdcdUIwQUFcdUIwQjBcdUIwQjJcdUIwQjZcdUIwQjdcdUIwQjlcdUIwQkFcdUIwQkJcdUIwQkRcIiw2LFwiXHVCMEM2XHVCMENBXCIsNSxcIlx1QjBEMlwiXSxcbltcIjg2NjFcIixcIlx1QjBEM1x1QjBENVx1QjBENlx1QjBEN1x1QjBEOVwiLDYsXCJcdUIwRTFcdUIwRTJcdUIwRTNcdUIwRTRcdUIwRTZcIiwxMF0sXG5bXCI4NjgxXCIsXCJcdUIwRjFcIiwyMixcIlx1QjEwQVx1QjEwRFx1QjEwRVx1QjEwRlx1QjExMVx1QjExNFx1QjExNVx1QjExNlx1QjExN1x1QjExQVx1QjExRVwiLDQsXCJcdUIxMjZcdUIxMjdcdUIxMjlcdUIxMkFcdUIxMkJcdUIxMkRcIiw2LFwiXHVCMTM2XHVCMTNBXCIsNSxcIlx1QjE0Mlx1QjE0M1x1QjE0NVx1QjE0Nlx1QjE0N1x1QjE0OVwiLDYsXCJcdUIxNTJcdUIxNTNcdUIxNTZcdUIxNTdcdUIxNTlcdUIxNUFcdUIxNUJcdUIxNURcdUIxNUVcdUIxNUZcdUIxNjFcIiwyMixcIlx1QjE3QVx1QjE3Qlx1QjE3RFx1QjE3RVx1QjE3Rlx1QjE4MVx1QjE4M1wiLDQsXCJcdUIxOEFcdUIxOENcdUIxOEVcdUIxOEZcdUIxOTBcdUIxOTFcdUIxOTVcdUIxOTZcdUIxOTdcdUIxOTlcdUIxOUFcdUIxOUJcdUIxOURcIl0sXG5bXCI4NzQxXCIsXCJcdUIxOUVcIiw5LFwiXHVCMUE5XCIsMTVdLFxuW1wiODc2MVwiLFwiXHVCMUI5XCIsMTgsXCJcdUIxQ0RcdUIxQ0VcdUIxQ0ZcdUIxRDFcdUIxRDJcdUIxRDNcdUIxRDVcIl0sXG5bXCI4NzgxXCIsXCJcdUIxRDZcIiw1LFwiXHVCMURFXHVCMUUwXCIsNyxcIlx1QjFFQVx1QjFFQlx1QjFFRFx1QjFFRVx1QjFFRlx1QjFGMVwiLDcsXCJcdUIxRkFcdUIxRkNcdUIxRkVcIiw1LFwiXHVCMjA2XHVCMjA3XHVCMjA5XHVCMjBBXHVCMjBEXCIsNixcIlx1QjIxNlx1QjIxOFx1QjIxQVwiLDUsXCJcdUIyMjFcIiwxOCxcIlx1QjIzNVwiLDYsXCJcdUIyM0RcIiwyNixcIlx1QjI1OVx1QjI1QVx1QjI1Qlx1QjI1RFx1QjI1RVx1QjI1Rlx1QjI2MVwiLDYsXCJcdUIyNkFcIiw0XSxcbltcIjg4NDFcIixcIlx1QjI2RlwiLDQsXCJcdUIyNzZcIiw1LFwiXHVCMjdEXCIsNixcIlx1QjI4Nlx1QjI4N1x1QjI4OFx1QjI4QVwiLDRdLFxuW1wiODg2MVwiLFwiXHVCMjhGXHVCMjkyXHVCMjkzXHVCMjk1XHVCMjk2XHVCMjk3XHVCMjlCXCIsNCxcIlx1QjJBMlx1QjJBNFx1QjJBN1x1QjJBOFx1QjJBOVx1QjJBQlx1QjJBRFx1QjJBRVx1QjJBRlx1QjJCMVx1QjJCMlx1QjJCM1x1QjJCNVx1QjJCNlx1QjJCN1wiXSxcbltcIjg4ODFcIixcIlx1QjJCOFwiLDE1LFwiXHVCMkNBXHVCMkNCXHVCMkNEXHVCMkNFXHVCMkNGXHVCMkQxXHVCMkQzXCIsNCxcIlx1QjJEQVx1QjJEQ1x1QjJERVx1QjJERlx1QjJFMFx1QjJFMVx1QjJFM1x1QjJFN1x1QjJFOVx1QjJFQVx1QjJGMFx1QjJGMVx1QjJGMlx1QjJGNlx1QjJGQ1x1QjJGRFx1QjJGRVx1QjMwMlx1QjMwM1x1QjMwNVx1QjMwNlx1QjMwN1x1QjMwOVwiLDYsXCJcdUIzMTJcdUIzMTZcIiw1LFwiXHVCMzFEXCIsNTQsXCJcdUIzNTdcdUIzNTlcdUIzNUFcdUIzNURcdUIzNjBcdUIzNjFcdUIzNjJcdUIzNjNcIl0sXG5bXCI4OTQxXCIsXCJcdUIzNjZcdUIzNjhcdUIzNkFcdUIzNkNcdUIzNkRcdUIzNkZcdUIzNzJcdUIzNzNcdUIzNzVcdUIzNzZcdUIzNzdcdUIzNzlcIiw2LFwiXHVCMzgyXHVCMzg2XCIsNSxcIlx1QjM4RFwiXSxcbltcIjg5NjFcIixcIlx1QjM4RVx1QjM4Rlx1QjM5MVx1QjM5Mlx1QjM5M1x1QjM5NVwiLDEwLFwiXHVCM0EyXCIsNSxcIlx1QjNBOVx1QjNBQVx1QjNBQlx1QjNBRFwiXSxcbltcIjg5ODFcIixcIlx1QjNBRVwiLDIxLFwiXHVCM0M2XHVCM0M3XHVCM0M5XHVCM0NBXHVCM0NEXHVCM0NGXHVCM0QxXHVCM0QyXHVCM0QzXHVCM0Q2XHVCM0Q4XHVCM0RBXHVCM0RDXHVCM0RFXHVCM0RGXHVCM0UxXHVCM0UyXHVCM0UzXHVCM0U1XHVCM0U2XHVCM0U3XHVCM0U5XCIsMTgsXCJcdUIzRkRcIiwxOCxcIlx1QjQxMVwiLDYsXCJcdUI0MTlcdUI0MUFcdUI0MUJcdUI0MURcdUI0MUVcdUI0MUZcdUI0MjFcIiw2LFwiXHVCNDJBXHVCNDJDXCIsNyxcIlx1QjQzNVwiLDE1XSxcbltcIjhhNDFcIixcIlx1QjQ0NVwiLDEwLFwiXHVCNDUyXHVCNDUzXHVCNDU1XHVCNDU2XHVCNDU3XHVCNDU5XCIsNixcIlx1QjQ2Mlx1QjQ2NFx1QjQ2NlwiXSxcbltcIjhhNjFcIixcIlx1QjQ2N1wiLDQsXCJcdUI0NkRcIiwxOCxcIlx1QjQ4MVx1QjQ4MlwiXSxcbltcIjhhODFcIixcIlx1QjQ4M1wiLDQsXCJcdUI0ODlcIiwxOSxcIlx1QjQ5RVwiLDUsXCJcdUI0QTVcdUI0QTZcdUI0QTdcdUI0QTlcdUI0QUFcdUI0QUJcdUI0QURcIiw3LFwiXHVCNEI2XHVCNEI4XHVCNEJBXCIsNSxcIlx1QjRDMVx1QjRDMlx1QjRDM1x1QjRDNVx1QjRDNlx1QjRDN1x1QjRDOVwiLDYsXCJcdUI0RDFcdUI0RDJcdUI0RDNcdUI0RDRcdUI0RDZcIiw1LFwiXHVCNERFXHVCNERGXHVCNEUxXHVCNEUyXHVCNEU1XHVCNEU3XCIsNCxcIlx1QjRFRVx1QjRGMFx1QjRGMlwiLDUsXCJcdUI0RjlcIiwyNixcIlx1QjUxNlx1QjUxN1x1QjUxOVx1QjUxQVx1QjUxRFwiXSxcbltcIjhiNDFcIixcIlx1QjUxRVwiLDUsXCJcdUI1MjZcdUI1MkJcIiw0LFwiXHVCNTMyXHVCNTMzXHVCNTM1XHVCNTM2XHVCNTM3XHVCNTM5XCIsNixcIlx1QjU0Mlx1QjU0NlwiXSxcbltcIjhiNjFcIixcIlx1QjU0N1x1QjU0OFx1QjU0OVx1QjU0QVx1QjU0RVx1QjU0Rlx1QjU1MVx1QjU1Mlx1QjU1M1x1QjU1NVwiLDYsXCJcdUI1NUVcdUI1NjJcIiw4XSxcbltcIjhiODFcIixcIlx1QjU2QlwiLDUyLFwiXHVCNUEyXHVCNUEzXHVCNUE1XHVCNUE2XHVCNUE3XHVCNUE5XHVCNUFDXHVCNUFEXHVCNUFFXHVCNUFGXHVCNUIyXHVCNUI2XCIsNCxcIlx1QjVCRVx1QjVCRlx1QjVDMVx1QjVDMlx1QjVDM1x1QjVDNVwiLDYsXCJcdUI1Q0VcdUI1RDJcIiw1LFwiXHVCNUQ5XCIsMTgsXCJcdUI1RURcIiwxOF0sXG5bXCI4YzQxXCIsXCJcdUI2MDBcIiwxNSxcIlx1QjYxMlx1QjYxM1x1QjYxNVx1QjYxNlx1QjYxN1x1QjYxOVwiLDRdLFxuW1wiOGM2MVwiLFwiXHVCNjFFXCIsNixcIlx1QjYyNlwiLDUsXCJcdUI2MkRcIiw2LFwiXHVCNjM1XCIsNV0sXG5bXCI4YzgxXCIsXCJcdUI2M0JcIiwxMixcIlx1QjY0OVwiLDI2LFwiXHVCNjY1XHVCNjY2XHVCNjY3XHVCNjY5XCIsNTAsXCJcdUI2OUVcdUI2OUZcdUI2QTFcdUI2QTJcdUI2QTNcdUI2QTVcIiw1LFwiXHVCNkFEXHVCNkFFXHVCNkFGXHVCNkIwXHVCNkIyXCIsMTZdLFxuW1wiOGQ0MVwiLFwiXHVCNkMzXCIsMTYsXCJcdUI2RDVcIiw4XSxcbltcIjhkNjFcIixcIlx1QjZERVwiLDE3LFwiXHVCNkYxXHVCNkYyXHVCNkYzXHVCNkY1XHVCNkY2XHVCNkY3XHVCNkY5XHVCNkZBXCJdLFxuW1wiOGQ4MVwiLFwiXHVCNkZCXCIsNCxcIlx1QjcwMlx1QjcwM1x1QjcwNFx1QjcwNlwiLDMzLFwiXHVCNzJBXHVCNzJCXHVCNzJEXHVCNzJFXHVCNzMxXCIsNixcIlx1QjczQVx1QjczQ1wiLDcsXCJcdUI3NDVcdUI3NDZcdUI3NDdcdUI3NDlcdUI3NEFcdUI3NEJcdUI3NERcIiw2LFwiXHVCNzU2XCIsOSxcIlx1Qjc2MVx1Qjc2Mlx1Qjc2M1x1Qjc2NVx1Qjc2Nlx1Qjc2N1x1Qjc2OVwiLDYsXCJcdUI3NzJcdUI3NzRcdUI3NzZcIiw1LFwiXHVCNzdFXHVCNzdGXHVCNzgxXHVCNzgyXHVCNzgzXHVCNzg1XCIsNixcIlx1Qjc4RVx1Qjc5M1x1Qjc5NFx1Qjc5NVx1Qjc5QVx1Qjc5Qlx1Qjc5RFx1Qjc5RVwiXSxcbltcIjhlNDFcIixcIlx1Qjc5Rlx1QjdBMVwiLDYsXCJcdUI3QUFcdUI3QUVcIiw1LFwiXHVCN0I2XHVCN0I3XHVCN0I5XCIsOF0sXG5bXCI4ZTYxXCIsXCJcdUI3QzJcIiw0LFwiXHVCN0M4XHVCN0NBXCIsMTldLFxuW1wiOGU4MVwiLFwiXHVCN0RFXCIsMTMsXCJcdUI3RUVcdUI3RUZcdUI3RjFcdUI3RjJcdUI3RjNcdUI3RjVcIiw2LFwiXHVCN0ZFXHVCODAyXCIsNCxcIlx1QjgwQVx1QjgwQlx1QjgwRFx1QjgwRVx1QjgwRlx1QjgxMVwiLDYsXCJcdUI4MUFcdUI4MUNcdUI4MUVcIiw1LFwiXHVCODI2XHVCODI3XHVCODI5XHVCODJBXHVCODJCXHVCODJEXCIsNixcIlx1QjgzNlx1QjgzQVwiLDUsXCJcdUI4NDFcdUI4NDJcdUI4NDNcdUI4NDVcIiwxMSxcIlx1Qjg1Mlx1Qjg1NFwiLDcsXCJcdUI4NUVcdUI4NUZcdUI4NjFcdUI4NjJcdUI4NjNcdUI4NjVcIiw2LFwiXHVCODZFXHVCODcwXHVCODcyXCIsNSxcIlx1Qjg3OVx1Qjg3QVx1Qjg3Qlx1Qjg3RFwiLDddLFxuW1wiOGY0MVwiLFwiXHVCODg1XCIsNyxcIlx1Qjg4RVwiLDE3XSxcbltcIjhmNjFcIixcIlx1QjhBMFwiLDcsXCJcdUI4QTlcIiw2LFwiXHVCOEIxXHVCOEIyXHVCOEIzXHVCOEI1XHVCOEI2XHVCOEI3XHVCOEI5XCIsNF0sXG5bXCI4ZjgxXCIsXCJcdUI4QkVcdUI4QkZcdUI4QzJcdUI4QzRcdUI4QzZcIiw1LFwiXHVCOENEXHVCOENFXHVCOENGXHVCOEQxXHVCOEQyXHVCOEQzXHVCOEQ1XCIsNyxcIlx1QjhERVx1QjhFMFx1QjhFMlwiLDUsXCJcdUI4RUFcdUI4RUJcdUI4RURcdUI4RUVcdUI4RUZcdUI4RjFcIiw2LFwiXHVCOEZBXHVCOEZDXHVCOEZFXCIsNSxcIlx1QjkwNVwiLDE4LFwiXHVCOTE5XCIsNixcIlx1QjkyMVwiLDI2LFwiXHVCOTNFXHVCOTNGXHVCOTQxXHVCOTQyXHVCOTQzXHVCOTQ1XCIsNixcIlx1Qjk0RFx1Qjk0RVx1Qjk1MFx1Qjk1MlwiLDVdLFxuW1wiOTA0MVwiLFwiXHVCOTVBXHVCOTVCXHVCOTVEXHVCOTVFXHVCOTVGXHVCOTYxXCIsNixcIlx1Qjk2QVx1Qjk2Q1x1Qjk2RVwiLDUsXCJcdUI5NzZcdUI5NzdcdUI5NzlcdUI5N0FcdUI5N0JcdUI5N0RcIl0sXG5bXCI5MDYxXCIsXCJcdUI5N0VcIiw1LFwiXHVCOTg2XHVCOTg4XHVCOThCXHVCOThDXHVCOThGXCIsMTVdLFxuW1wiOTA4MVwiLFwiXHVCOTlGXCIsMTIsXCJcdUI5QUVcdUI5QUZcdUI5QjFcdUI5QjJcdUI5QjNcdUI5QjVcIiw2LFwiXHVCOUJFXHVCOUMwXHVCOUMyXCIsNSxcIlx1QjlDQVx1QjlDQlx1QjlDRFx1QjlEM1wiLDQsXCJcdUI5REFcdUI5RENcdUI5REZcdUI5RTBcdUI5RTJcdUI5RTZcdUI5RTdcdUI5RTlcdUI5RUFcdUI5RUJcdUI5RURcIiw2LFwiXHVCOUY2XHVCOUZCXCIsNCxcIlx1QkEwMlwiLDUsXCJcdUJBMDlcIiwxMSxcIlx1QkExNlwiLDMzLFwiXHVCQTNBXHVCQTNCXHVCQTNEXHVCQTNFXHVCQTNGXHVCQTQxXHVCQTQzXHVCQTQ0XHVCQTQ1XHVCQTQ2XCJdLFxuW1wiOTE0MVwiLFwiXHVCQTQ3XHVCQTRBXHVCQTRDXHVCQTRGXHVCQTUwXHVCQTUxXHVCQTUyXHVCQTU2XHVCQTU3XHVCQTU5XHVCQTVBXHVCQTVCXHVCQTVEXCIsNixcIlx1QkE2Nlx1QkE2QVwiLDVdLFxuW1wiOTE2MVwiLFwiXHVCQTcyXHVCQTczXHVCQTc1XHVCQTc2XHVCQTc3XHVCQTc5XCIsOSxcIlx1QkE4Nlx1QkE4OFx1QkE4OVx1QkE4QVx1QkE4Qlx1QkE4RFwiLDVdLFxuW1wiOTE4MVwiLFwiXHVCQTkzXCIsMjAsXCJcdUJBQUFcdUJBQURcdUJBQUVcdUJBQUZcdUJBQjFcdUJBQjNcIiw0LFwiXHVCQUJBXHVCQUJDXHVCQUJFXCIsNSxcIlx1QkFDNVx1QkFDNlx1QkFDN1x1QkFDOVwiLDE0LFwiXHVCQURBXCIsMzMsXCJcdUJBRkRcdUJBRkVcdUJBRkZcdUJCMDFcdUJCMDJcdUJCMDNcdUJCMDVcIiw3LFwiXHVCQjBFXHVCQjEwXHVCQjEyXCIsNSxcIlx1QkIxOVx1QkIxQVx1QkIxQlx1QkIxRFx1QkIxRVx1QkIxRlx1QkIyMVwiLDZdLFxuW1wiOTI0MVwiLFwiXHVCQjI4XHVCQjJBXHVCQjJDXCIsNyxcIlx1QkIzN1x1QkIzOVx1QkIzQVx1QkIzRlwiLDQsXCJcdUJCNDZcdUJCNDhcdUJCNEFcdUJCNEJcdUJCNENcdUJCNEVcdUJCNTFcdUJCNTJcIl0sXG5bXCI5MjYxXCIsXCJcdUJCNTNcdUJCNTVcdUJCNTZcdUJCNTdcdUJCNTlcIiw3LFwiXHVCQjYyXHVCQjY0XCIsNyxcIlx1QkI2RFwiLDRdLFxuW1wiOTI4MVwiLFwiXHVCQjcyXCIsMjEsXCJcdUJCODlcdUJCOEFcdUJCOEJcdUJCOERcdUJCOEVcdUJCOEZcdUJCOTFcIiwxOCxcIlx1QkJBNVx1QkJBNlx1QkJBN1x1QkJBOVx1QkJBQVx1QkJBQlx1QkJBRFwiLDYsXCJcdUJCQjVcdUJCQjZcdUJCQjhcIiw3LFwiXHVCQkMxXHVCQkMyXHVCQkMzXHVCQkM1XHVCQkM2XHVCQkM3XHVCQkM5XCIsNixcIlx1QkJEMVx1QkJEMlx1QkJENFwiLDM1LFwiXHVCQkZBXHVCQkZCXHVCQkZEXHVCQkZFXHVCQzAxXCJdLFxuW1wiOTM0MVwiLFwiXHVCQzAzXCIsNCxcIlx1QkMwQVx1QkMwRVx1QkMxMFx1QkMxMlx1QkMxM1x1QkMxOVx1QkMxQVx1QkMyMFx1QkMyMVx1QkMyMlx1QkMyM1x1QkMyNlx1QkMyOFx1QkMyQVx1QkMyQlx1QkMyQ1x1QkMyRVx1QkMyRlx1QkMzMlx1QkMzM1x1QkMzNVwiXSxcbltcIjkzNjFcIixcIlx1QkMzNlx1QkMzN1x1QkMzOVwiLDYsXCJcdUJDNDJcdUJDNDZcdUJDNDdcdUJDNDhcdUJDNEFcdUJDNEJcdUJDNEVcdUJDNEZcdUJDNTFcIiw4XSxcbltcIjkzODFcIixcIlx1QkM1QVx1QkM1Qlx1QkM1Q1x1QkM1RVwiLDM3LFwiXHVCQzg2XHVCQzg3XHVCQzg5XHVCQzhBXHVCQzhEXHVCQzhGXCIsNCxcIlx1QkM5Nlx1QkM5OFx1QkM5QlwiLDQsXCJcdUJDQTJcdUJDQTNcdUJDQTVcdUJDQTZcdUJDQTlcIiw2LFwiXHVCQ0IyXHVCQ0I2XCIsNSxcIlx1QkNCRVx1QkNCRlx1QkNDMVx1QkNDMlx1QkNDM1x1QkNDNVwiLDcsXCJcdUJDQ0VcdUJDRDJcdUJDRDNcdUJDRDRcdUJDRDZcdUJDRDdcdUJDRDlcdUJDREFcdUJDREJcdUJDRERcIiwyMixcIlx1QkNGN1x1QkNGOVx1QkNGQVx1QkNGQlx1QkNGRFwiXSxcbltcIjk0NDFcIixcIlx1QkNGRVwiLDUsXCJcdUJEMDZcdUJEMDhcdUJEMEFcIiw1LFwiXHVCRDExXHVCRDEyXHVCRDEzXHVCRDE1XCIsOF0sXG5bXCI5NDYxXCIsXCJcdUJEMUVcIiw1LFwiXHVCRDI1XCIsNixcIlx1QkQyRFwiLDEyXSxcbltcIjk0ODFcIixcIlx1QkQzQVwiLDUsXCJcdUJENDFcIiw2LFwiXHVCRDRBXHVCRDRCXHVCRDREXHVCRDRFXHVCRDRGXHVCRDUxXCIsNixcIlx1QkQ1QVwiLDksXCJcdUJENjVcdUJENjZcdUJENjdcdUJENjlcIiwyMixcIlx1QkQ4Mlx1QkQ4M1x1QkQ4NVx1QkQ4Nlx1QkQ4QlwiLDQsXCJcdUJEOTJcdUJEOTRcdUJEOTZcdUJEOTdcdUJEOThcdUJEOUJcdUJEOURcIiw2LFwiXHVCREE1XCIsMTAsXCJcdUJEQjFcIiw2LFwiXHVCREI5XCIsMjRdLFxuW1wiOTU0MVwiLFwiXHVCREQyXHVCREQzXHVCREQ2XHVCREQ3XHVCREQ5XHVCRERBXHVCRERCXHVCREREXCIsMTEsXCJcdUJERUFcIiw1LFwiXHVCREYxXCJdLFxuW1wiOTU2MVwiLFwiXHVCREYyXHVCREYzXHVCREY1XHVCREY2XHVCREY3XHVCREY5XCIsNixcIlx1QkUwMVx1QkUwMlx1QkUwNFx1QkUwNlwiLDUsXCJcdUJFMEVcdUJFMEZcdUJFMTFcdUJFMTJcdUJFMTNcIl0sXG5bXCI5NTgxXCIsXCJcdUJFMTVcIiw2LFwiXHVCRTFFXHVCRTIwXCIsMzUsXCJcdUJFNDZcdUJFNDdcdUJFNDlcdUJFNEFcdUJFNEJcdUJFNERcdUJFNEZcIiw0LFwiXHVCRTU2XHVCRTU4XHVCRTVDXHVCRTVEXHVCRTVFXHVCRTVGXHVCRTYyXHVCRTYzXHVCRTY1XHVCRTY2XHVCRTY3XHVCRTY5XHVCRTZCXCIsNCxcIlx1QkU3Mlx1QkU3NlwiLDQsXCJcdUJFN0VcdUJFN0ZcdUJFODFcdUJFODJcdUJFODNcdUJFODVcIiw2LFwiXHVCRThFXHVCRTkyXCIsNSxcIlx1QkU5QVwiLDEzLFwiXHVCRUE5XCIsMTRdLFxuW1wiOTY0MVwiLFwiXHVCRUI4XCIsMjMsXCJcdUJFRDJcdUJFRDNcIl0sXG5bXCI5NjYxXCIsXCJcdUJFRDVcdUJFRDZcdUJFRDlcIiw2LFwiXHVCRUUxXHVCRUUyXHVCRUU2XCIsNSxcIlx1QkVFRFwiLDhdLFxuW1wiOTY4MVwiLFwiXHVCRUY2XCIsMTAsXCJcdUJGMDJcIiw1LFwiXHVCRjBBXCIsMTMsXCJcdUJGMUFcdUJGMUVcIiwzMyxcIlx1QkY0Mlx1QkY0M1x1QkY0NVx1QkY0Nlx1QkY0N1x1QkY0OVwiLDYsXCJcdUJGNTJcdUJGNTNcdUJGNTRcdUJGNTZcIiw0NF0sXG5bXCI5NzQxXCIsXCJcdUJGODNcIiwxNixcIlx1QkY5NVwiLDhdLFxuW1wiOTc2MVwiLFwiXHVCRjlFXCIsMTcsXCJcdUJGQjFcIiw3XSxcbltcIjk3ODFcIixcIlx1QkZCOVwiLDExLFwiXHVCRkM2XCIsNSxcIlx1QkZDRVx1QkZDRlx1QkZEMVx1QkZEMlx1QkZEM1x1QkZENVwiLDYsXCJcdUJGRERcdUJGREVcdUJGRTBcdUJGRTJcIiw4OSxcIlx1QzAzRFx1QzAzRVx1QzAzRlwiXSxcbltcIjk4NDFcIixcIlx1QzA0MFwiLDE2LFwiXHVDMDUyXCIsNSxcIlx1QzA1OVx1QzA1QVx1QzA1QlwiXSxcbltcIjk4NjFcIixcIlx1QzA1RFx1QzA1RVx1QzA1Rlx1QzA2MVwiLDYsXCJcdUMwNkFcIiwxNV0sXG5bXCI5ODgxXCIsXCJcdUMwN0FcIiwyMSxcIlx1QzA5Mlx1QzA5M1x1QzA5NVx1QzA5Nlx1QzA5N1x1QzA5OVwiLDYsXCJcdUMwQTJcdUMwQTRcdUMwQTZcIiw1LFwiXHVDMEFFXHVDMEIxXHVDMEIyXHVDMEI3XCIsNCxcIlx1QzBCRVx1QzBDMlx1QzBDM1x1QzBDNFx1QzBDNlx1QzBDN1x1QzBDQVx1QzBDQlx1QzBDRFx1QzBDRVx1QzBDRlx1QzBEMVwiLDYsXCJcdUMwREFcdUMwREVcIiw1LFwiXHVDMEU2XHVDMEU3XHVDMEU5XHVDMEVBXHVDMEVCXHVDMEVEXCIsNixcIlx1QzBGNlx1QzBGOFx1QzBGQVwiLDUsXCJcdUMxMDFcdUMxMDJcdUMxMDNcdUMxMDVcdUMxMDZcdUMxMDdcdUMxMDlcIiw2LFwiXHVDMTExXHVDMTEyXHVDMTEzXHVDMTE0XHVDMTE2XCIsNSxcIlx1QzEyMVx1QzEyMlx1QzEyNVx1QzEyOFx1QzEyOVx1QzEyQVx1QzEyQlx1QzEyRVwiXSxcbltcIjk5NDFcIixcIlx1QzEzMlx1QzEzM1x1QzEzNFx1QzEzNVx1QzEzN1x1QzEzQVx1QzEzQlx1QzEzRFx1QzEzRVx1QzEzRlx1QzE0MVwiLDYsXCJcdUMxNEFcdUMxNEVcIiw1LFwiXHVDMTU2XHVDMTU3XCJdLFxuW1wiOTk2MVwiLFwiXHVDMTU5XHVDMTVBXHVDMTVCXHVDMTVEXCIsNixcIlx1QzE2Nlx1QzE2QVwiLDUsXCJcdUMxNzFcdUMxNzJcdUMxNzNcdUMxNzVcdUMxNzZcdUMxNzdcdUMxNzlcdUMxN0FcdUMxN0JcIl0sXG5bXCI5OTgxXCIsXCJcdUMxN0NcIiw4LFwiXHVDMTg2XCIsNSxcIlx1QzE4Rlx1QzE5MVx1QzE5Mlx1QzE5M1x1QzE5NVx1QzE5N1wiLDQsXCJcdUMxOUVcdUMxQTBcdUMxQTJcdUMxQTNcdUMxQTRcdUMxQTZcdUMxQTdcdUMxQUFcdUMxQUJcdUMxQURcdUMxQUVcdUMxQUZcdUMxQjFcIiwxMSxcIlx1QzFCRVwiLDUsXCJcdUMxQzVcdUMxQzZcdUMxQzdcdUMxQzlcdUMxQ0FcdUMxQ0JcdUMxQ0RcIiw2LFwiXHVDMUQ1XHVDMUQ2XHVDMUQ5XCIsNixcIlx1QzFFMVx1QzFFMlx1QzFFM1x1QzFFNVx1QzFFNlx1QzFFN1x1QzFFOVwiLDYsXCJcdUMxRjJcdUMxRjRcIiw3LFwiXHVDMUZFXHVDMUZGXHVDMjAxXHVDMjAyXHVDMjAzXHVDMjA1XCIsNixcIlx1QzIwRVx1QzIxMFx1QzIxMlwiLDUsXCJcdUMyMUFcdUMyMUJcdUMyMURcdUMyMUVcdUMyMjFcdUMyMjJcdUMyMjNcIl0sXG5bXCI5YTQxXCIsXCJcdUMyMjRcdUMyMjVcdUMyMjZcdUMyMjdcdUMyMkFcdUMyMkNcdUMyMkVcdUMyMzBcdUMyMzNcdUMyMzVcIiwxNl0sXG5bXCI5YTYxXCIsXCJcdUMyNDZcdUMyNDdcdUMyNDlcIiw2LFwiXHVDMjUyXHVDMjUzXHVDMjU1XHVDMjU2XHVDMjU3XHVDMjU5XCIsNixcIlx1QzI2MVx1QzI2Mlx1QzI2M1x1QzI2NFx1QzI2NlwiXSxcbltcIjlhODFcIixcIlx1QzI2N1wiLDQsXCJcdUMyNkVcdUMyNkZcdUMyNzFcdUMyNzJcdUMyNzNcdUMyNzVcIiw2LFwiXHVDMjdFXHVDMjgwXHVDMjgyXCIsNSxcIlx1QzI4QVwiLDUsXCJcdUMyOTFcIiw2LFwiXHVDMjk5XHVDMjlBXHVDMjlDXHVDMjlFXCIsNSxcIlx1QzJBNlx1QzJBN1x1QzJBOVx1QzJBQVx1QzJBQlx1QzJBRVwiLDUsXCJcdUMyQjZcdUMyQjhcdUMyQkFcIiwzMyxcIlx1QzJERVx1QzJERlx1QzJFMVx1QzJFMlx1QzJFNVwiLDUsXCJcdUMyRUVcdUMyRjBcdUMyRjJcdUMyRjNcdUMyRjRcdUMyRjVcdUMyRjdcdUMyRkFcdUMyRkRcdUMyRkVcdUMyRkZcdUMzMDFcIiw2LFwiXHVDMzBBXHVDMzBCXHVDMzBFXHVDMzBGXCJdLFxuW1wiOWI0MVwiLFwiXHVDMzEwXHVDMzExXHVDMzEyXHVDMzE2XHVDMzE3XHVDMzE5XHVDMzFBXHVDMzFCXHVDMzFEXCIsNixcIlx1QzMyNlx1QzMyN1x1QzMyQVwiLDhdLFxuW1wiOWI2MVwiLFwiXHVDMzMzXCIsMTcsXCJcdUMzNDZcIiw3XSxcbltcIjliODFcIixcIlx1QzM0RVwiLDI1LFwiXHVDMzZBXHVDMzZCXHVDMzZEXHVDMzZFXHVDMzZGXHVDMzcxXHVDMzczXCIsNCxcIlx1QzM3QVx1QzM3Qlx1QzM3RVwiLDUsXCJcdUMzODVcdUMzODZcdUMzODdcdUMzODlcdUMzOEFcdUMzOEJcdUMzOERcIiw1MCxcIlx1QzNDMVwiLDIyLFwiXHVDM0RBXCJdLFxuW1wiOWM0MVwiLFwiXHVDM0RCXHVDM0REXHVDM0RFXHVDM0UxXHVDM0UzXCIsNCxcIlx1QzNFQVx1QzNFQlx1QzNFQ1x1QzNFRVwiLDUsXCJcdUMzRjZcdUMzRjdcdUMzRjlcIiw1XSxcbltcIjljNjFcIixcIlx1QzNGRlwiLDgsXCJcdUM0MDlcIiw2LFwiXHVDNDExXCIsOV0sXG5bXCI5YzgxXCIsXCJcdUM0MUJcIiw4LFwiXHVDNDI1XCIsNixcIlx1QzQyRFx1QzQyRVx1QzQyRlx1QzQzMVx1QzQzMlx1QzQzM1x1QzQzNVwiLDYsXCJcdUM0M0VcIiw5LFwiXHVDNDQ5XCIsMjYsXCJcdUM0NjZcdUM0NjdcdUM0NjlcdUM0NkFcdUM0NkJcdUM0NkRcIiw2LFwiXHVDNDc2XHVDNDc3XHVDNDc4XHVDNDdBXCIsNSxcIlx1QzQ4MVwiLDE4LFwiXHVDNDk1XCIsNixcIlx1QzQ5RFwiLDEyXSxcbltcIjlkNDFcIixcIlx1QzRBQVwiLDEzLFwiXHVDNEI5XHVDNEJBXHVDNEJCXHVDNEJEXCIsOF0sXG5bXCI5ZDYxXCIsXCJcdUM0QzZcIiwyNV0sXG5bXCI5ZDgxXCIsXCJcdUM0RTBcIiw4LFwiXHVDNEVBXCIsNSxcIlx1QzRGMlx1QzRGM1x1QzRGNVx1QzRGNlx1QzRGN1x1QzRGOVx1QzRGQlx1QzRGQ1x1QzRGRFx1QzRGRVx1QzUwMlwiLDksXCJcdUM1MERcdUM1MEVcdUM1MEZcdUM1MTFcdUM1MTJcdUM1MTNcdUM1MTVcIiw2LFwiXHVDNTFEXCIsMTAsXCJcdUM1MkFcdUM1MkJcdUM1MkRcdUM1MkVcdUM1MkZcdUM1MzFcIiw2LFwiXHVDNTNBXHVDNTNDXHVDNTNFXCIsNSxcIlx1QzU0Nlx1QzU0N1x1QzU0Qlx1QzU0Rlx1QzU1MFx1QzU1MVx1QzU1Mlx1QzU1Nlx1QzU1QVx1QzU1Qlx1QzU1Q1x1QzU1Rlx1QzU2Mlx1QzU2M1x1QzU2NVx1QzU2Nlx1QzU2N1x1QzU2OVwiLDYsXCJcdUM1NzJcdUM1NzZcIiw1LFwiXHVDNTdFXHVDNTdGXHVDNTgxXHVDNTgyXHVDNTgzXHVDNTg1XHVDNTg2XHVDNTg4XHVDNTg5XHVDNThBXHVDNThCXHVDNThFXHVDNTkwXHVDNTkyXHVDNTkzXHVDNTk0XCJdLFxuW1wiOWU0MVwiLFwiXHVDNTk2XHVDNTk5XHVDNTlBXHVDNTlCXHVDNTlEXHVDNTlFXHVDNTlGXHVDNUExXCIsNyxcIlx1QzVBQVwiLDksXCJcdUM1QjZcIl0sXG5bXCI5ZTYxXCIsXCJcdUM1QjdcdUM1QkFcdUM1QkZcIiw0LFwiXHVDNUNCXHVDNUNEXHVDNUNGXHVDNUQyXHVDNUQzXHVDNUQ1XHVDNUQ2XHVDNUQ3XHVDNUQ5XCIsNixcIlx1QzVFMlx1QzVFNFx1QzVFNlx1QzVFN1wiXSxcbltcIjllODFcIixcIlx1QzVFOFx1QzVFOVx1QzVFQVx1QzVFQlx1QzVFRlx1QzVGMVx1QzVGMlx1QzVGM1x1QzVGNVx1QzVGOFx1QzVGOVx1QzVGQVx1QzVGQlx1QzYwMlx1QzYwM1x1QzYwNFx1QzYwOVx1QzYwQVx1QzYwQlx1QzYwRFx1QzYwRVx1QzYwRlx1QzYxMVwiLDYsXCJcdUM2MUFcdUM2MURcIiw2LFwiXHVDNjI2XHVDNjI3XHVDNjI5XHVDNjJBXHVDNjJCXHVDNjJGXHVDNjMxXHVDNjMyXHVDNjM2XHVDNjM4XHVDNjNBXHVDNjNDXHVDNjNEXHVDNjNFXHVDNjNGXHVDNjQyXHVDNjQzXHVDNjQ1XHVDNjQ2XHVDNjQ3XHVDNjQ5XCIsNixcIlx1QzY1Mlx1QzY1NlwiLDUsXCJcdUM2NUVcdUM2NUZcdUM2NjFcIiwxMCxcIlx1QzY2RFx1QzY2RVx1QzY3MFx1QzY3MlwiLDUsXCJcdUM2N0FcdUM2N0JcdUM2N0RcdUM2N0VcdUM2N0ZcdUM2ODFcIiw2LFwiXHVDNjhBXHVDNjhDXHVDNjhFXCIsNSxcIlx1QzY5Nlx1QzY5N1x1QzY5OVx1QzY5QVx1QzY5Qlx1QzY5RFwiLDYsXCJcdUM2QTZcIl0sXG5bXCI5ZjQxXCIsXCJcdUM2QThcdUM2QUFcIiw1LFwiXHVDNkIyXHVDNkIzXHVDNkI1XHVDNkI2XHVDNkI3XHVDNkJCXCIsNCxcIlx1QzZDMlx1QzZDNFx1QzZDNlwiLDUsXCJcdUM2Q0VcIl0sXG5bXCI5ZjYxXCIsXCJcdUM2Q0ZcdUM2RDFcdUM2RDJcdUM2RDNcdUM2RDVcIiw2LFwiXHVDNkRFXHVDNkRGXHVDNkUyXCIsNSxcIlx1QzZFQVx1QzZFQlx1QzZFRFx1QzZFRVx1QzZFRlx1QzZGMVx1QzZGMlwiXSxcbltcIjlmODFcIixcIlx1QzZGM1wiLDQsXCJcdUM2RkFcdUM2RkJcdUM2RkNcdUM2RkVcIiw1LFwiXHVDNzA2XHVDNzA3XHVDNzA5XHVDNzBBXHVDNzBCXHVDNzBEXCIsNixcIlx1QzcxNlx1QzcxOFx1QzcxQVwiLDUsXCJcdUM3MjJcdUM3MjNcdUM3MjVcdUM3MjZcdUM3MjdcdUM3MjlcIiw2LFwiXHVDNzMyXHVDNzM0XHVDNzM2XHVDNzM4XHVDNzM5XHVDNzNBXHVDNzNCXHVDNzNFXHVDNzNGXHVDNzQxXHVDNzQyXHVDNzQzXHVDNzQ1XCIsNCxcIlx1Qzc0Qlx1Qzc0RVx1Qzc1MFx1Qzc1OVx1Qzc1QVx1Qzc1Qlx1Qzc1RFx1Qzc1RVx1Qzc1Rlx1Qzc2MVwiLDYsXCJcdUM3NjlcdUM3NkFcdUM3NkNcIiw3LFwiXHVDNzc2XHVDNzc3XHVDNzc5XHVDNzdBXHVDNzdCXHVDNzdGXHVDNzgwXHVDNzgxXHVDNzgyXHVDNzg2XHVDNzhCXHVDNzhDXHVDNzhEXHVDNzhGXHVDNzkyXHVDNzkzXHVDNzk1XHVDNzk5XHVDNzlCXCIsNCxcIlx1QzdBMlx1QzdBN1wiLDQsXCJcdUM3QUVcdUM3QUZcdUM3QjFcdUM3QjJcdUM3QjNcdUM3QjVcdUM3QjZcdUM3QjdcIl0sXG5bXCJhMDQxXCIsXCJcdUM3QjhcdUM3QjlcdUM3QkFcdUM3QkJcdUM3QkVcdUM3QzJcIiw1LFwiXHVDN0NBXHVDN0NCXHVDN0NEXHVDN0NGXHVDN0QxXCIsNixcIlx1QzdEOVx1QzdEQVx1QzdEQlx1QzdEQ1wiXSxcbltcImEwNjFcIixcIlx1QzdERVwiLDUsXCJcdUM3RTVcdUM3RTZcdUM3RTdcdUM3RTlcdUM3RUFcdUM3RUJcdUM3RURcIiwxM10sXG5bXCJhMDgxXCIsXCJcdUM3RkJcIiw0LFwiXHVDODAyXHVDODAzXHVDODA1XHVDODA2XHVDODA3XHVDODA5XHVDODBCXCIsNCxcIlx1QzgxMlx1QzgxNFx1QzgxN1wiLDQsXCJcdUM4MUVcdUM4MUZcdUM4MjFcdUM4MjJcdUM4MjNcdUM4MjVcIiw2LFwiXHVDODJFXHVDODMwXHVDODMyXCIsNSxcIlx1QzgzOVx1QzgzQVx1QzgzQlx1QzgzRFx1QzgzRVx1QzgzRlx1Qzg0MVwiLDYsXCJcdUM4NEFcdUM4NEJcdUM4NEVcIiw1LFwiXHVDODU1XCIsMjYsXCJcdUM4NzJcdUM4NzNcdUM4NzVcdUM4NzZcdUM4NzdcdUM4NzlcdUM4N0JcIiw0LFwiXHVDODgyXHVDODg0XHVDODg4XHVDODg5XHVDODhBXHVDODhFXCIsNSxcIlx1Qzg5NVwiLDcsXCJcdUM4OUVcdUM4QTBcdUM4QTJcdUM4QTNcdUM4QTRcIl0sXG5bXCJhMTQxXCIsXCJcdUM4QTVcdUM4QTZcdUM4QTdcdUM4QTlcIiwxOCxcIlx1QzhCRVx1QzhCRlx1QzhDMFx1QzhDMVwiXSxcbltcImExNjFcIixcIlx1QzhDMlx1QzhDM1x1QzhDNVx1QzhDNlx1QzhDN1x1QzhDOVx1QzhDQVx1QzhDQlx1QzhDRFwiLDYsXCJcdUM4RDZcdUM4RDhcdUM4REFcIiw1LFwiXHVDOEUyXHVDOEUzXHVDOEU1XCJdLFxuW1wiYTE4MVwiLFwiXHVDOEU2XCIsMTQsXCJcdUM4RjZcIiw1LFwiXHVDOEZFXHVDOEZGXHVDOTAxXHVDOTAyXHVDOTAzXHVDOTA3XCIsNCxcIlx1QzkwRVx1MzAwMFx1MzAwMVx1MzAwMlx1MDBCN1x1MjAyNVx1MjAyNlx1MDBBOFx1MzAwM1x1MDBBRFx1MjAxNVx1MjIyNVx1RkYzQ1x1MjIzQ1x1MjAxOFx1MjAxOVx1MjAxQ1x1MjAxRFx1MzAxNFx1MzAxNVx1MzAwOFwiLDksXCJcdTAwQjFcdTAwRDdcdTAwRjdcdTIyNjBcdTIyNjRcdTIyNjVcdTIyMUVcdTIyMzRcdTAwQjBcdTIwMzJcdTIwMzNcdTIxMDNcdTIxMkJcdUZGRTBcdUZGRTFcdUZGRTVcdTI2NDJcdTI2NDBcdTIyMjBcdTIyQTVcdTIzMTJcdTIyMDJcdTIyMDdcdTIyNjFcdTIyNTJcdTAwQTdcdTIwM0JcdTI2MDZcdTI2MDVcdTI1Q0JcdTI1Q0ZcdTI1Q0VcdTI1QzdcdTI1QzZcdTI1QTFcdTI1QTBcdTI1QjNcdTI1QjJcdTI1QkRcdTI1QkNcdTIxOTJcdTIxOTBcdTIxOTFcdTIxOTNcdTIxOTRcdTMwMTNcdTIyNkFcdTIyNkJcdTIyMUFcdTIyM0RcdTIyMURcdTIyMzVcdTIyMkJcdTIyMkNcdTIyMDhcdTIyMEJcdTIyODZcdTIyODdcdTIyODJcdTIyODNcdTIyMkFcdTIyMjlcdTIyMjdcdTIyMjhcdUZGRTJcIl0sXG5bXCJhMjQxXCIsXCJcdUM5MTBcdUM5MTJcIiw1LFwiXHVDOTE5XCIsMThdLFxuW1wiYTI2MVwiLFwiXHVDOTJEXCIsNixcIlx1QzkzNVwiLDE4XSxcbltcImEyODFcIixcIlx1Qzk0OFwiLDcsXCJcdUM5NTJcdUM5NTNcdUM5NTVcdUM5NTZcdUM5NTdcdUM5NTlcIiw2LFwiXHVDOTYyXHVDOTY0XCIsNyxcIlx1Qzk2RFx1Qzk2RVx1Qzk2Rlx1MjFEMlx1MjFENFx1MjIwMFx1MjIwM1x1MDBCNFx1RkY1RVx1MDJDN1x1MDJEOFx1MDJERFx1MDJEQVx1MDJEOVx1MDBCOFx1MDJEQlx1MDBBMVx1MDBCRlx1MDJEMFx1MjIyRVx1MjIxMVx1MjIwRlx1MDBBNFx1MjEwOVx1MjAzMFx1MjVDMVx1MjVDMFx1MjVCN1x1MjVCNlx1MjY2NFx1MjY2MFx1MjY2MVx1MjY2NVx1MjY2N1x1MjY2M1x1MjI5OVx1MjVDOFx1MjVBM1x1MjVEMFx1MjVEMVx1MjU5Mlx1MjVBNFx1MjVBNVx1MjVBOFx1MjVBN1x1MjVBNlx1MjVBOVx1MjY2OFx1MjYwRlx1MjYwRVx1MjYxQ1x1MjYxRVx1MDBCNlx1MjAyMFx1MjAyMVx1MjE5NVx1MjE5N1x1MjE5OVx1MjE5Nlx1MjE5OFx1MjY2RFx1MjY2OVx1MjY2QVx1MjY2Q1x1MzI3Rlx1MzIxQ1x1MjExNlx1MzNDN1x1MjEyMlx1MzNDMlx1MzNEOFx1MjEyMVx1MjBBQ1x1MDBBRVwiXSxcbltcImEzNDFcIixcIlx1Qzk3MVx1Qzk3Mlx1Qzk3M1x1Qzk3NVwiLDYsXCJcdUM5N0RcIiwxMCxcIlx1Qzk4QVx1Qzk4Qlx1Qzk4RFx1Qzk4RVx1Qzk4RlwiXSxcbltcImEzNjFcIixcIlx1Qzk5MVwiLDYsXCJcdUM5OUFcdUM5OUNcdUM5OUVcIiwxNl0sXG5bXCJhMzgxXCIsXCJcdUM5QUZcIiwxNixcIlx1QzlDMlx1QzlDM1x1QzlDNVx1QzlDNlx1QzlDOVx1QzlDQlwiLDQsXCJcdUM5RDJcdUM5RDRcdUM5RDdcdUM5RDhcdUM5REJcdUZGMDFcIiw1OCxcIlx1RkZFNlx1RkYzRFwiLDMyLFwiXHVGRkUzXCJdLFxuW1wiYTQ0MVwiLFwiXHVDOURFXHVDOURGXHVDOUUxXHVDOUUzXHVDOUU1XHVDOUU2XHVDOUU4XHVDOUU5XHVDOUVBXHVDOUVCXHVDOUVFXHVDOUYyXCIsNSxcIlx1QzlGQVx1QzlGQlx1QzlGRFx1QzlGRVx1QzlGRlx1Q0EwMVx1Q0EwMlx1Q0EwM1x1Q0EwNFwiXSxcbltcImE0NjFcIixcIlx1Q0EwNVx1Q0EwNlx1Q0EwN1x1Q0EwQVx1Q0EwRVwiLDUsXCJcdUNBMTVcdUNBMTZcdUNBMTdcdUNBMTlcIiwxMl0sXG5bXCJhNDgxXCIsXCJcdUNBMjZcdUNBMjdcdUNBMjhcdUNBMkFcIiwyOCxcIlx1MzEzMVwiLDkzXSxcbltcImE1NDFcIixcIlx1Q0E0N1wiLDQsXCJcdUNBNEVcdUNBNEZcdUNBNTFcdUNBNTJcdUNBNTNcdUNBNTVcIiw2LFwiXHVDQTVFXHVDQTYyXCIsNSxcIlx1Q0E2OVx1Q0E2QVwiXSxcbltcImE1NjFcIixcIlx1Q0E2QlwiLDE3LFwiXHVDQTdFXCIsNSxcIlx1Q0E4NVx1Q0E4NlwiXSxcbltcImE1ODFcIixcIlx1Q0E4N1wiLDE2LFwiXHVDQTk5XCIsMTQsXCJcdTIxNzBcIiw5XSxcbltcImE1YjBcIixcIlx1MjE2MFwiLDldLFxuW1wiYTVjMVwiLFwiXHUwMzkxXCIsMTYsXCJcdTAzQTNcIiw2XSxcbltcImE1ZTFcIixcIlx1MDNCMVwiLDE2LFwiXHUwM0MzXCIsNl0sXG5bXCJhNjQxXCIsXCJcdUNBQThcIiwxOSxcIlx1Q0FCRVx1Q0FCRlx1Q0FDMVx1Q0FDMlx1Q0FDM1x1Q0FDNVwiXSxcbltcImE2NjFcIixcIlx1Q0FDNlwiLDUsXCJcdUNBQ0VcdUNBRDBcdUNBRDJcdUNBRDRcdUNBRDVcdUNBRDZcdUNBRDdcdUNBREFcIiw1LFwiXHVDQUUxXCIsNl0sXG5bXCJhNjgxXCIsXCJcdUNBRThcdUNBRTlcdUNBRUFcdUNBRUJcdUNBRURcIiw2LFwiXHVDQUY1XCIsMTgsXCJcdUNCMDlcdUNCMEFcdTI1MDBcdTI1MDJcdTI1MENcdTI1MTBcdTI1MThcdTI1MTRcdTI1MUNcdTI1MkNcdTI1MjRcdTI1MzRcdTI1M0NcdTI1MDFcdTI1MDNcdTI1MEZcdTI1MTNcdTI1MUJcdTI1MTdcdTI1MjNcdTI1MzNcdTI1MkJcdTI1M0JcdTI1NEJcdTI1MjBcdTI1MkZcdTI1MjhcdTI1MzdcdTI1M0ZcdTI1MURcdTI1MzBcdTI1MjVcdTI1MzhcdTI1NDJcdTI1MTJcdTI1MTFcdTI1MUFcdTI1MTlcdTI1MTZcdTI1MTVcdTI1MEVcdTI1MERcdTI1MUVcdTI1MUZcdTI1MjFcdTI1MjJcdTI1MjZcdTI1MjdcdTI1MjlcdTI1MkFcdTI1MkRcdTI1MkVcdTI1MzFcdTI1MzJcdTI1MzVcdTI1MzZcdTI1MzlcdTI1M0FcdTI1M0RcdTI1M0VcdTI1NDBcdTI1NDFcdTI1NDNcIiw3XSxcbltcImE3NDFcIixcIlx1Q0IwQlwiLDQsXCJcdUNCMTFcdUNCMTJcdUNCMTNcdUNCMTVcdUNCMTZcdUNCMTdcdUNCMTlcIiw2LFwiXHVDQjIyXCIsN10sXG5bXCJhNzYxXCIsXCJcdUNCMkFcIiwyMixcIlx1Q0I0Mlx1Q0I0M1x1Q0I0NFwiXSxcbltcImE3ODFcIixcIlx1Q0I0NVx1Q0I0Nlx1Q0I0N1x1Q0I0QVx1Q0I0Qlx1Q0I0RFx1Q0I0RVx1Q0I0Rlx1Q0I1MVwiLDYsXCJcdUNCNUFcdUNCNUJcdUNCNUNcdUNCNUVcIiw1LFwiXHVDQjY1XCIsNyxcIlx1MzM5NVx1MzM5Nlx1MzM5N1x1MjExM1x1MzM5OFx1MzNDNFx1MzNBM1x1MzNBNFx1MzNBNVx1MzNBNlx1MzM5OVwiLDksXCJcdTMzQ0FcdTMzOERcdTMzOEVcdTMzOEZcdTMzQ0ZcdTMzODhcdTMzODlcdTMzQzhcdTMzQTdcdTMzQThcdTMzQjBcIiw5LFwiXHUzMzgwXCIsNCxcIlx1MzNCQVwiLDUsXCJcdTMzOTBcIiw0LFwiXHUyMTI2XHUzM0MwXHUzM0MxXHUzMzhBXHUzMzhCXHUzMzhDXHUzM0Q2XHUzM0M1XHUzM0FEXHUzM0FFXHUzM0FGXHUzM0RCXHUzM0E5XHUzM0FBXHUzM0FCXHUzM0FDXHUzM0REXHUzM0QwXHUzM0QzXHUzM0MzXHUzM0M5XHUzM0RDXHUzM0M2XCJdLFxuW1wiYTg0MVwiLFwiXHVDQjZEXCIsMTAsXCJcdUNCN0FcIiwxNF0sXG5bXCJhODYxXCIsXCJcdUNCODlcIiwxOCxcIlx1Q0I5RFwiLDZdLFxuW1wiYTg4MVwiLFwiXHVDQkE0XCIsMTksXCJcdUNCQjlcIiwxMSxcIlx1MDBDNlx1MDBEMFx1MDBBQVx1MDEyNlwiXSxcbltcImE4YTZcIixcIlx1MDEzMlwiXSxcbltcImE4YThcIixcIlx1MDEzRlx1MDE0MVx1MDBEOFx1MDE1Mlx1MDBCQVx1MDBERVx1MDE2Nlx1MDE0QVwiXSxcbltcImE4YjFcIixcIlx1MzI2MFwiLDI3LFwiXHUyNEQwXCIsMjUsXCJcdTI0NjBcIiwxNCxcIlx1MDBCRFx1MjE1M1x1MjE1NFx1MDBCQ1x1MDBCRVx1MjE1Qlx1MjE1Q1x1MjE1RFx1MjE1RVwiXSxcbltcImE5NDFcIixcIlx1Q0JDNVwiLDE0LFwiXHVDQkQ1XCIsMTBdLFxuW1wiYTk2MVwiLFwiXHVDQkUwXHVDQkUxXHVDQkUyXHVDQkUzXHVDQkU1XHVDQkU2XHVDQkU4XHVDQkVBXCIsMThdLFxuW1wiYTk4MVwiLFwiXHVDQkZEXCIsMTQsXCJcdUNDMEVcdUNDMEZcdUNDMTFcdUNDMTJcdUNDMTNcdUNDMTVcIiw2LFwiXHVDQzFFXHVDQzFGXHVDQzIwXHVDQzIzXHVDQzI0XHUwMEU2XHUwMTExXHUwMEYwXHUwMTI3XHUwMTMxXHUwMTMzXHUwMTM4XHUwMTQwXHUwMTQyXHUwMEY4XHUwMTUzXHUwMERGXHUwMEZFXHUwMTY3XHUwMTRCXHUwMTQ5XHUzMjAwXCIsMjcsXCJcdTI0OUNcIiwyNSxcIlx1MjQ3NFwiLDE0LFwiXHUwMEI5XHUwMEIyXHUwMEIzXHUyMDc0XHUyMDdGXHUyMDgxXHUyMDgyXHUyMDgzXHUyMDg0XCJdLFxuW1wiYWE0MVwiLFwiXHVDQzI1XHVDQzI2XHVDQzJBXHVDQzJCXHVDQzJEXHVDQzJGXHVDQzMxXCIsNixcIlx1Q0MzQVx1Q0MzRlwiLDQsXCJcdUNDNDZcdUNDNDdcdUNDNDlcdUNDNEFcdUNDNEJcdUNDNERcdUNDNEVcIl0sXG5bXCJhYTYxXCIsXCJcdUNDNEZcIiw0LFwiXHVDQzU2XHVDQzVBXCIsNSxcIlx1Q0M2MVx1Q0M2Mlx1Q0M2M1x1Q0M2NVx1Q0M2N1x1Q0M2OVwiLDYsXCJcdUNDNzFcdUNDNzJcIl0sXG5bXCJhYTgxXCIsXCJcdUNDNzNcdUNDNzRcdUNDNzZcIiwyOSxcIlx1MzA0MVwiLDgyXSxcbltcImFiNDFcIixcIlx1Q0M5NFx1Q0M5NVx1Q0M5Nlx1Q0M5N1x1Q0M5QVx1Q0M5Qlx1Q0M5RFx1Q0M5RVx1Q0M5Rlx1Q0NBMVwiLDYsXCJcdUNDQUFcdUNDQUVcIiw1LFwiXHVDQ0I2XHVDQ0I3XHVDQ0I5XCJdLFxuW1wiYWI2MVwiLFwiXHVDQ0JBXHVDQ0JCXHVDQ0JEXCIsNixcIlx1Q0NDNlx1Q0NDOFx1Q0NDQVwiLDUsXCJcdUNDRDFcdUNDRDJcdUNDRDNcdUNDRDVcIiw1XSxcbltcImFiODFcIixcIlx1Q0NEQlwiLDgsXCJcdUNDRTVcIiw2LFwiXHVDQ0VEXHVDQ0VFXHVDQ0VGXHVDQ0YxXCIsMTIsXCJcdTMwQTFcIiw4NV0sXG5bXCJhYzQxXCIsXCJcdUNDRkVcdUNDRkZcdUNEMDBcdUNEMDJcIiw1LFwiXHVDRDBBXHVDRDBCXHVDRDBEXHVDRDBFXHVDRDBGXHVDRDExXCIsNixcIlx1Q0QxQVx1Q0QxQ1x1Q0QxRVx1Q0QxRlx1Q0QyMFwiXSxcbltcImFjNjFcIixcIlx1Q0QyMVx1Q0QyMlx1Q0QyM1x1Q0QyNVx1Q0QyNlx1Q0QyN1x1Q0QyOVx1Q0QyQVx1Q0QyQlx1Q0QyRFwiLDExLFwiXHVDRDNBXCIsNF0sXG5bXCJhYzgxXCIsXCJcdUNEM0ZcIiwyOCxcIlx1Q0Q1RFx1Q0Q1RVx1Q0Q1Rlx1MDQxMFwiLDUsXCJcdTA0MDFcdTA0MTZcIiwyNV0sXG5bXCJhY2QxXCIsXCJcdTA0MzBcIiw1LFwiXHUwNDUxXHUwNDM2XCIsMjVdLFxuW1wiYWQ0MVwiLFwiXHVDRDYxXHVDRDYyXHVDRDYzXHVDRDY1XCIsNixcIlx1Q0Q2RVx1Q0Q3MFx1Q0Q3MlwiLDUsXCJcdUNENzlcIiw3XSxcbltcImFkNjFcIixcIlx1Q0Q4MVwiLDYsXCJcdUNEODlcIiwxMCxcIlx1Q0Q5Nlx1Q0Q5N1x1Q0Q5OVx1Q0Q5QVx1Q0Q5Qlx1Q0Q5RFx1Q0Q5RVx1Q0Q5RlwiXSxcbltcImFkODFcIixcIlx1Q0RBMFx1Q0RBMVx1Q0RBMlx1Q0RBM1x1Q0RBNlx1Q0RBOFx1Q0RBQVwiLDUsXCJcdUNEQjFcIiwxOCxcIlx1Q0RDNVwiXSxcbltcImFlNDFcIixcIlx1Q0RDNlwiLDUsXCJcdUNEQ0RcdUNEQ0VcdUNEQ0ZcdUNERDFcIiwxNl0sXG5bXCJhZTYxXCIsXCJcdUNERTJcIiw1LFwiXHVDREU5XHVDREVBXHVDREVCXHVDREVEXHVDREVFXHVDREVGXHVDREYxXCIsNixcIlx1Q0RGQVx1Q0RGQ1x1Q0RGRVwiLDRdLFxuW1wiYWU4MVwiLFwiXHVDRTAzXHVDRTA1XHVDRTA2XHVDRTA3XHVDRTA5XHVDRTBBXHVDRTBCXHVDRTBEXCIsNixcIlx1Q0UxNVx1Q0UxNlx1Q0UxN1x1Q0UxOFx1Q0UxQVwiLDUsXCJcdUNFMjJcdUNFMjNcdUNFMjVcdUNFMjZcdUNFMjdcdUNFMjlcdUNFMkFcdUNFMkJcIl0sXG5bXCJhZjQxXCIsXCJcdUNFMkNcdUNFMkRcdUNFMkVcdUNFMkZcdUNFMzJcdUNFMzRcdUNFMzZcIiwxOV0sXG5bXCJhZjYxXCIsXCJcdUNFNEFcIiwxMyxcIlx1Q0U1QVx1Q0U1Qlx1Q0U1RFx1Q0U1RVx1Q0U2MlwiLDUsXCJcdUNFNkFcdUNFNkNcIl0sXG5bXCJhZjgxXCIsXCJcdUNFNkVcIiw1LFwiXHVDRTc2XHVDRTc3XHVDRTc5XHVDRTdBXHVDRTdCXHVDRTdEXCIsNixcIlx1Q0U4Nlx1Q0U4OFx1Q0U4QVwiLDUsXCJcdUNFOTJcdUNFOTNcdUNFOTVcdUNFOTZcdUNFOTdcdUNFOTlcIl0sXG5bXCJiMDQxXCIsXCJcdUNFOUFcIiw1LFwiXHVDRUEyXHVDRUE2XCIsNSxcIlx1Q0VBRVwiLDEyXSxcbltcImIwNjFcIixcIlx1Q0VCQlwiLDUsXCJcdUNFQzJcIiwxOV0sXG5bXCJiMDgxXCIsXCJcdUNFRDZcIiwxMyxcIlx1Q0VFNlx1Q0VFN1x1Q0VFOVx1Q0VFQVx1Q0VFRFwiLDYsXCJcdUNFRjZcdUNFRkFcIiw1LFwiXHVBQzAwXHVBQzAxXHVBQzA0XHVBQzA3XHVBQzA4XHVBQzA5XHVBQzBBXHVBQzEwXCIsNyxcIlx1QUMxOVwiLDQsXCJcdUFDMjBcdUFDMjRcdUFDMkNcdUFDMkRcdUFDMkZcdUFDMzBcdUFDMzFcdUFDMzhcdUFDMzlcdUFDM0NcdUFDNDBcdUFDNEJcdUFDNERcdUFDNTRcdUFDNThcdUFDNUNcdUFDNzBcdUFDNzFcdUFDNzRcdUFDNzdcdUFDNzhcdUFDN0FcdUFDODBcdUFDODFcdUFDODNcdUFDODRcdUFDODVcdUFDODZcdUFDODlcdUFDOEFcdUFDOEJcdUFDOENcdUFDOTBcdUFDOTRcdUFDOUNcdUFDOURcdUFDOUZcdUFDQTBcdUFDQTFcdUFDQThcdUFDQTlcdUFDQUFcdUFDQUNcdUFDQUZcdUFDQjBcdUFDQjhcdUFDQjlcdUFDQkJcdUFDQkNcdUFDQkRcdUFDQzFcdUFDQzRcdUFDQzhcdUFDQ0NcdUFDRDVcdUFDRDdcdUFDRTBcdUFDRTFcdUFDRTRcdUFDRTdcdUFDRThcdUFDRUFcdUFDRUNcdUFDRUZcdUFDRjBcdUFDRjFcdUFDRjNcdUFDRjVcdUFDRjZcdUFDRkNcdUFDRkRcdUFEMDBcdUFEMDRcdUFEMDZcIl0sXG5bXCJiMTQxXCIsXCJcdUNGMDJcdUNGMDNcdUNGMDVcdUNGMDZcdUNGMDdcdUNGMDlcIiw2LFwiXHVDRjEyXHVDRjE0XHVDRjE2XCIsNSxcIlx1Q0YxRFx1Q0YxRVx1Q0YxRlx1Q0YyMVx1Q0YyMlx1Q0YyM1wiXSxcbltcImIxNjFcIixcIlx1Q0YyNVwiLDYsXCJcdUNGMkVcdUNGMzJcIiw1LFwiXHVDRjM5XCIsMTFdLFxuW1wiYjE4MVwiLFwiXHVDRjQ1XCIsMTQsXCJcdUNGNTZcdUNGNTdcdUNGNTlcdUNGNUFcdUNGNUJcdUNGNURcIiw2LFwiXHVDRjY2XHVDRjY4XHVDRjZBXHVDRjZCXHVDRjZDXHVBRDBDXHVBRDBEXHVBRDBGXHVBRDExXHVBRDE4XHVBRDFDXHVBRDIwXHVBRDI5XHVBRDJDXHVBRDJEXHVBRDM0XHVBRDM1XHVBRDM4XHVBRDNDXHVBRDQ0XHVBRDQ1XHVBRDQ3XHVBRDQ5XHVBRDUwXHVBRDU0XHVBRDU4XHVBRDYxXHVBRDYzXHVBRDZDXHVBRDZEXHVBRDcwXHVBRDczXHVBRDc0XHVBRDc1XHVBRDc2XHVBRDdCXHVBRDdDXHVBRDdEXHVBRDdGXHVBRDgxXHVBRDgyXHVBRDg4XHVBRDg5XHVBRDhDXHVBRDkwXHVBRDlDXHVBRDlEXHVBREE0XHVBREI3XHVBREMwXHVBREMxXHVBREM0XHVBREM4XHVBREQwXHVBREQxXHVBREQzXHVBRERDXHVBREUwXHVBREU0XHVBREY4XHVBREY5XHVBREZDXHVBREZGXHVBRTAwXHVBRTAxXHVBRTA4XHVBRTA5XHVBRTBCXHVBRTBEXHVBRTE0XHVBRTMwXHVBRTMxXHVBRTM0XHVBRTM3XHVBRTM4XHVBRTNBXHVBRTQwXHVBRTQxXHVBRTQzXHVBRTQ1XHVBRTQ2XHVBRTRBXHVBRTRDXHVBRTREXHVBRTRFXHVBRTUwXHVBRTU0XHVBRTU2XHVBRTVDXHVBRTVEXHVBRTVGXHVBRTYwXHVBRTYxXHVBRTY1XHVBRTY4XHVBRTY5XHVBRTZDXHVBRTcwXHVBRTc4XCJdLFxuW1wiYjI0MVwiLFwiXHVDRjZEXHVDRjZFXHVDRjZGXHVDRjcyXHVDRjczXHVDRjc1XHVDRjc2XHVDRjc3XHVDRjc5XCIsNixcIlx1Q0Y4MVx1Q0Y4Mlx1Q0Y4M1x1Q0Y4NFx1Q0Y4NlwiLDUsXCJcdUNGOERcIl0sXG5bXCJiMjYxXCIsXCJcdUNGOEVcIiwxOCxcIlx1Q0ZBMlwiLDUsXCJcdUNGQTlcIl0sXG5bXCJiMjgxXCIsXCJcdUNGQUFcIiw1LFwiXHVDRkIxXCIsMTgsXCJcdUNGQzVcIiw2LFwiXHVBRTc5XHVBRTdCXHVBRTdDXHVBRTdEXHVBRTg0XHVBRTg1XHVBRThDXHVBRUJDXHVBRUJEXHVBRUJFXHVBRUMwXHVBRUM0XHVBRUNDXHVBRUNEXHVBRUNGXHVBRUQwXHVBRUQxXHVBRUQ4XHVBRUQ5XHVBRURDXHVBRUU4XHVBRUVCXHVBRUVEXHVBRUY0XHVBRUY4XHVBRUZDXHVBRjA3XHVBRjA4XHVBRjBEXHVBRjEwXHVBRjJDXHVBRjJEXHVBRjMwXHVBRjMyXHVBRjM0XHVBRjNDXHVBRjNEXHVBRjNGXHVBRjQxXHVBRjQyXHVBRjQzXHVBRjQ4XHVBRjQ5XHVBRjUwXHVBRjVDXHVBRjVEXHVBRjY0XHVBRjY1XHVBRjc5XHVBRjgwXHVBRjg0XHVBRjg4XHVBRjkwXHVBRjkxXHVBRjk1XHVBRjlDXHVBRkI4XHVBRkI5XHVBRkJDXHVBRkMwXHVBRkM3XHVBRkM4XHVBRkM5XHVBRkNCXHVBRkNEXHVBRkNFXHVBRkQ0XHVBRkRDXHVBRkU4XHVBRkU5XHVBRkYwXHVBRkYxXHVBRkY0XHVBRkY4XHVCMDAwXHVCMDAxXHVCMDA0XHVCMDBDXHVCMDEwXHVCMDE0XHVCMDFDXHVCMDFEXHVCMDI4XHVCMDQ0XHVCMDQ1XHVCMDQ4XHVCMDRBXHVCMDRDXHVCMDRFXHVCMDUzXHVCMDU0XHVCMDU1XHVCMDU3XHVCMDU5XCJdLFxuW1wiYjM0MVwiLFwiXHVDRkNDXCIsMTksXCJcdUNGRTJcdUNGRTNcdUNGRTVcdUNGRTZcdUNGRTdcdUNGRTlcIl0sXG5bXCJiMzYxXCIsXCJcdUNGRUFcIiw1LFwiXHVDRkYyXHVDRkY0XHVDRkY2XCIsNSxcIlx1Q0ZGRFx1Q0ZGRVx1Q0ZGRlx1RDAwMVx1RDAwMlx1RDAwM1x1RDAwNVwiLDVdLFxuW1wiYjM4MVwiLFwiXHVEMDBCXCIsNSxcIlx1RDAxMlwiLDUsXCJcdUQwMTlcIiwxOSxcIlx1QjA1RFx1QjA3Q1x1QjA3RFx1QjA4MFx1QjA4NFx1QjA4Q1x1QjA4RFx1QjA4Rlx1QjA5MVx1QjA5OFx1QjA5OVx1QjA5QVx1QjA5Q1x1QjA5Rlx1QjBBMFx1QjBBMVx1QjBBMlx1QjBBOFx1QjBBOVx1QjBBQlwiLDQsXCJcdUIwQjFcdUIwQjNcdUIwQjRcdUIwQjVcdUIwQjhcdUIwQkNcdUIwQzRcdUIwQzVcdUIwQzdcdUIwQzhcdUIwQzlcdUIwRDBcdUIwRDFcdUIwRDRcdUIwRDhcdUIwRTBcdUIwRTVcdUIxMDhcdUIxMDlcdUIxMEJcdUIxMENcdUIxMTBcdUIxMTJcdUIxMTNcdUIxMThcdUIxMTlcdUIxMUJcdUIxMUNcdUIxMURcdUIxMjNcdUIxMjRcdUIxMjVcdUIxMjhcdUIxMkNcdUIxMzRcdUIxMzVcdUIxMzdcdUIxMzhcdUIxMzlcdUIxNDBcdUIxNDFcdUIxNDRcdUIxNDhcdUIxNTBcdUIxNTFcdUIxNTRcdUIxNTVcdUIxNThcdUIxNUNcdUIxNjBcdUIxNzhcdUIxNzlcdUIxN0NcdUIxODBcdUIxODJcdUIxODhcdUIxODlcdUIxOEJcdUIxOERcdUIxOTJcdUIxOTNcdUIxOTRcdUIxOThcdUIxOUNcdUIxQThcdUIxQ0NcdUIxRDBcdUIxRDRcdUIxRENcdUIxRERcIl0sXG5bXCJiNDQxXCIsXCJcdUQwMkVcIiw1LFwiXHVEMDM2XHVEMDM3XHVEMDM5XHVEMDNBXHVEMDNCXHVEMDNEXCIsNixcIlx1RDA0Nlx1RDA0OFx1RDA0QVwiLDVdLFxuW1wiYjQ2MVwiLFwiXHVEMDUxXHVEMDUyXHVEMDUzXHVEMDU1XHVEMDU2XHVEMDU3XHVEMDU5XCIsNixcIlx1RDA2MVwiLDEwLFwiXHVEMDZFXHVEMDZGXCJdLFxuW1wiYjQ4MVwiLFwiXHVEMDcxXHVEMDcyXHVEMDczXHVEMDc1XCIsNixcIlx1RDA3RVx1RDA3Rlx1RDA4MFx1RDA4MlwiLDE4LFwiXHVCMURGXHVCMUU4XHVCMUU5XHVCMUVDXHVCMUYwXHVCMUY5XHVCMUZCXHVCMUZEXHVCMjA0XHVCMjA1XHVCMjA4XHVCMjBCXHVCMjBDXHVCMjE0XHVCMjE1XHVCMjE3XHVCMjE5XHVCMjIwXHVCMjM0XHVCMjNDXHVCMjU4XHVCMjVDXHVCMjYwXHVCMjY4XHVCMjY5XHVCMjc0XHVCMjc1XHVCMjdDXHVCMjg0XHVCMjg1XHVCMjg5XHVCMjkwXHVCMjkxXHVCMjk0XHVCMjk4XHVCMjk5XHVCMjlBXHVCMkEwXHVCMkExXHVCMkEzXHVCMkE1XHVCMkE2XHVCMkFBXHVCMkFDXHVCMkIwXHVCMkI0XHVCMkM4XHVCMkM5XHVCMkNDXHVCMkQwXHVCMkQyXHVCMkQ4XHVCMkQ5XHVCMkRCXHVCMkREXHVCMkUyXHVCMkU0XHVCMkU1XHVCMkU2XHVCMkU4XHVCMkVCXCIsNCxcIlx1QjJGM1x1QjJGNFx1QjJGNVx1QjJGN1wiLDQsXCJcdUIyRkZcdUIzMDBcdUIzMDFcdUIzMDRcdUIzMDhcdUIzMTBcdUIzMTFcdUIzMTNcdUIzMTRcdUIzMTVcdUIzMUNcdUIzNTRcdUIzNTVcdUIzNTZcdUIzNThcdUIzNUJcdUIzNUNcdUIzNUVcdUIzNUZcdUIzNjRcdUIzNjVcIl0sXG5bXCJiNTQxXCIsXCJcdUQwOTVcIiwxNCxcIlx1RDBBNlx1RDBBN1x1RDBBOVx1RDBBQVx1RDBBQlx1RDBBRFwiLDVdLFxuW1wiYjU2MVwiLFwiXHVEMEIzXHVEMEI2XHVEMEI4XHVEMEJBXCIsNSxcIlx1RDBDMlx1RDBDM1x1RDBDNVx1RDBDNlx1RDBDN1x1RDBDQVwiLDUsXCJcdUQwRDJcdUQwRDZcIiw0XSxcbltcImI1ODFcIixcIlx1RDBEQlx1RDBERVx1RDBERlx1RDBFMVx1RDBFMlx1RDBFM1x1RDBFNVwiLDYsXCJcdUQwRUVcdUQwRjJcIiw1LFwiXHVEMEY5XCIsMTEsXCJcdUIzNjdcdUIzNjlcdUIzNkJcdUIzNkVcdUIzNzBcdUIzNzFcdUIzNzRcdUIzNzhcdUIzODBcdUIzODFcdUIzODNcdUIzODRcdUIzODVcdUIzOENcdUIzOTBcdUIzOTRcdUIzQTBcdUIzQTFcdUIzQThcdUIzQUNcdUIzQzRcdUIzQzVcdUIzQzhcdUIzQ0JcdUIzQ0NcdUIzQ0VcdUIzRDBcdUIzRDRcdUIzRDVcdUIzRDdcdUIzRDlcdUIzREJcdUIzRERcdUIzRTBcdUIzRTRcdUIzRThcdUIzRkNcdUI0MTBcdUI0MThcdUI0MUNcdUI0MjBcdUI0MjhcdUI0MjlcdUI0MkJcdUI0MzRcdUI0NTBcdUI0NTFcdUI0NTRcdUI0NThcdUI0NjBcdUI0NjFcdUI0NjNcdUI0NjVcdUI0NkNcdUI0ODBcdUI0ODhcdUI0OURcdUI0QTRcdUI0QThcdUI0QUNcdUI0QjVcdUI0QjdcdUI0QjlcdUI0QzBcdUI0QzRcdUI0QzhcdUI0RDBcdUI0RDVcdUI0RENcdUI0RERcdUI0RTBcdUI0RTNcdUI0RTRcdUI0RTZcdUI0RUNcdUI0RURcdUI0RUZcdUI0RjFcdUI0RjhcdUI1MTRcdUI1MTVcdUI1MThcdUI1MUJcdUI1MUNcdUI1MjRcdUI1MjVcdUI1MjdcdUI1MjhcdUI1MjlcdUI1MkFcdUI1MzBcdUI1MzFcdUI1MzRcdUI1MzhcIl0sXG5bXCJiNjQxXCIsXCJcdUQxMDVcIiw3LFwiXHVEMTBFXCIsMTddLFxuW1wiYjY2MVwiLFwiXHVEMTIwXCIsMTUsXCJcdUQxMzJcdUQxMzNcdUQxMzVcdUQxMzZcdUQxMzdcdUQxMzlcdUQxM0JcdUQxM0NcdUQxM0RcdUQxM0VcIl0sXG5bXCJiNjgxXCIsXCJcdUQxM0ZcdUQxNDJcdUQxNDZcIiw1LFwiXHVEMTRFXHVEMTRGXHVEMTUxXHVEMTUyXHVEMTUzXHVEMTU1XCIsNixcIlx1RDE1RVx1RDE2MFx1RDE2MlwiLDUsXCJcdUQxNjlcdUQxNkFcdUQxNkJcdUQxNkRcdUI1NDBcdUI1NDFcdUI1NDNcdUI1NDRcdUI1NDVcdUI1NEJcdUI1NENcdUI1NERcdUI1NTBcdUI1NTRcdUI1NUNcdUI1NURcdUI1NUZcdUI1NjBcdUI1NjFcdUI1QTBcdUI1QTFcdUI1QTRcdUI1QThcdUI1QUFcdUI1QUJcdUI1QjBcdUI1QjFcdUI1QjNcdUI1QjRcdUI1QjVcdUI1QkJcdUI1QkNcdUI1QkRcdUI1QzBcdUI1QzRcdUI1Q0NcdUI1Q0RcdUI1Q0ZcdUI1RDBcdUI1RDFcdUI1RDhcdUI1RUNcdUI2MTBcdUI2MTFcdUI2MTRcdUI2MThcdUI2MjVcdUI2MkNcdUI2MzRcdUI2NDhcdUI2NjRcdUI2NjhcdUI2OUNcdUI2OURcdUI2QTBcdUI2QTRcdUI2QUJcdUI2QUNcdUI2QjFcdUI2RDRcdUI2RjBcdUI2RjRcdUI2RjhcdUI3MDBcdUI3MDFcdUI3MDVcdUI3MjhcdUI3MjlcdUI3MkNcdUI3MkZcdUI3MzBcdUI3MzhcdUI3MzlcdUI3M0JcdUI3NDRcdUI3NDhcdUI3NENcdUI3NTRcdUI3NTVcdUI3NjBcdUI3NjRcdUI3NjhcdUI3NzBcdUI3NzFcdUI3NzNcdUI3NzVcdUI3N0NcdUI3N0RcdUI3ODBcdUI3ODRcdUI3OENcdUI3OERcdUI3OEZcdUI3OTBcdUI3OTFcdUI3OTJcdUI3OTZcdUI3OTdcIl0sXG5bXCJiNzQxXCIsXCJcdUQxNkVcIiwxMyxcIlx1RDE3RFwiLDYsXCJcdUQxODVcdUQxODZcdUQxODdcdUQxODlcdUQxOEFcIl0sXG5bXCJiNzYxXCIsXCJcdUQxOEJcIiwyMCxcIlx1RDFBMlx1RDFBM1x1RDFBNVx1RDFBNlx1RDFBN1wiXSxcbltcImI3ODFcIixcIlx1RDFBOVwiLDYsXCJcdUQxQjJcdUQxQjRcdUQxQjZcdUQxQjdcdUQxQjhcdUQxQjlcdUQxQkJcdUQxQkRcdUQxQkVcdUQxQkZcdUQxQzFcIiwxNCxcIlx1Qjc5OFx1Qjc5OVx1Qjc5Q1x1QjdBMFx1QjdBOFx1QjdBOVx1QjdBQlx1QjdBQ1x1QjdBRFx1QjdCNFx1QjdCNVx1QjdCOFx1QjdDN1x1QjdDOVx1QjdFQ1x1QjdFRFx1QjdGMFx1QjdGNFx1QjdGQ1x1QjdGRFx1QjdGRlx1QjgwMFx1QjgwMVx1QjgwN1x1QjgwOFx1QjgwOVx1QjgwQ1x1QjgxMFx1QjgxOFx1QjgxOVx1QjgxQlx1QjgxRFx1QjgyNFx1QjgyNVx1QjgyOFx1QjgyQ1x1QjgzNFx1QjgzNVx1QjgzN1x1QjgzOFx1QjgzOVx1Qjg0MFx1Qjg0NFx1Qjg1MVx1Qjg1M1x1Qjg1Q1x1Qjg1RFx1Qjg2MFx1Qjg2NFx1Qjg2Q1x1Qjg2RFx1Qjg2Rlx1Qjg3MVx1Qjg3OFx1Qjg3Q1x1Qjg4RFx1QjhBOFx1QjhCMFx1QjhCNFx1QjhCOFx1QjhDMFx1QjhDMVx1QjhDM1x1QjhDNVx1QjhDQ1x1QjhEMFx1QjhENFx1QjhERFx1QjhERlx1QjhFMVx1QjhFOFx1QjhFOVx1QjhFQ1x1QjhGMFx1QjhGOFx1QjhGOVx1QjhGQlx1QjhGRFx1QjkwNFx1QjkxOFx1QjkyMFx1QjkzQ1x1QjkzRFx1Qjk0MFx1Qjk0NFx1Qjk0Q1x1Qjk0Rlx1Qjk1MVx1Qjk1OFx1Qjk1OVx1Qjk1Q1x1Qjk2MFx1Qjk2OFx1Qjk2OVwiXSxcbltcImI4NDFcIixcIlx1RDFEMFwiLDcsXCJcdUQxRDlcIiwxN10sXG5bXCJiODYxXCIsXCJcdUQxRUJcIiw4LFwiXHVEMUY1XHVEMUY2XHVEMUY3XHVEMUY5XCIsMTNdLFxuW1wiYjg4MVwiLFwiXHVEMjA4XHVEMjBBXCIsNSxcIlx1RDIxMVwiLDI0LFwiXHVCOTZCXHVCOTZEXHVCOTc0XHVCOTc1XHVCOTc4XHVCOTdDXHVCOTg0XHVCOTg1XHVCOTg3XHVCOTg5XHVCOThBXHVCOThEXHVCOThFXHVCOUFDXHVCOUFEXHVCOUIwXHVCOUI0XHVCOUJDXHVCOUJEXHVCOUJGXHVCOUMxXHVCOUM4XHVCOUM5XHVCOUNDXHVCOUNFXCIsNCxcIlx1QjlEOFx1QjlEOVx1QjlEQlx1QjlERFx1QjlERVx1QjlFMVx1QjlFM1x1QjlFNFx1QjlFNVx1QjlFOFx1QjlFQ1x1QjlGNFx1QjlGNVx1QjlGN1x1QjlGOFx1QjlGOVx1QjlGQVx1QkEwMFx1QkEwMVx1QkEwOFx1QkExNVx1QkEzOFx1QkEzOVx1QkEzQ1x1QkE0MFx1QkE0Mlx1QkE0OFx1QkE0OVx1QkE0Qlx1QkE0RFx1QkE0RVx1QkE1M1x1QkE1NFx1QkE1NVx1QkE1OFx1QkE1Q1x1QkE2NFx1QkE2NVx1QkE2N1x1QkE2OFx1QkE2OVx1QkE3MFx1QkE3MVx1QkE3NFx1QkE3OFx1QkE4M1x1QkE4NFx1QkE4NVx1QkE4N1x1QkE4Q1x1QkFBOFx1QkFBOVx1QkFBQlx1QkFBQ1x1QkFCMFx1QkFCMlx1QkFCOFx1QkFCOVx1QkFCQlx1QkFCRFx1QkFDNFx1QkFDOFx1QkFEOFx1QkFEOVx1QkFGQ1wiXSxcbltcImI5NDFcIixcIlx1RDIyQVx1RDIyQlx1RDIyRVx1RDIyRlx1RDIzMVx1RDIzMlx1RDIzM1x1RDIzNVwiLDYsXCJcdUQyM0VcdUQyNDBcdUQyNDJcIiw1LFwiXHVEMjQ5XHVEMjRBXHVEMjRCXHVEMjRDXCJdLFxuW1wiYjk2MVwiLFwiXHVEMjREXCIsMTQsXCJcdUQyNURcIiw2LFwiXHVEMjY1XHVEMjY2XHVEMjY3XHVEMjY4XCJdLFxuW1wiYjk4MVwiLFwiXHVEMjY5XCIsMjIsXCJcdUQyODJcdUQyODNcdUQyODVcdUQyODZcdUQyODdcdUQyODlcdUQyOEFcdUQyOEJcdUQyOENcdUJCMDBcdUJCMDRcdUJCMERcdUJCMEZcdUJCMTFcdUJCMThcdUJCMUNcdUJCMjBcdUJCMjlcdUJCMkJcdUJCMzRcdUJCMzVcdUJCMzZcdUJCMzhcdUJCM0JcdUJCM0NcdUJCM0RcdUJCM0VcdUJCNDRcdUJCNDVcdUJCNDdcdUJCNDlcdUJCNERcdUJCNEZcdUJCNTBcdUJCNTRcdUJCNThcdUJCNjFcdUJCNjNcdUJCNkNcdUJCODhcdUJCOENcdUJCOTBcdUJCQTRcdUJCQThcdUJCQUNcdUJCQjRcdUJCQjdcdUJCQzBcdUJCQzRcdUJCQzhcdUJCRDBcdUJCRDNcdUJCRjhcdUJCRjlcdUJCRkNcdUJCRkZcdUJDMDBcdUJDMDJcdUJDMDhcdUJDMDlcdUJDMEJcdUJDMENcdUJDMERcdUJDMEZcdUJDMTFcdUJDMTRcIiw0LFwiXHVCQzFCXCIsNCxcIlx1QkMyNFx1QkMyNVx1QkMyN1x1QkMyOVx1QkMyRFx1QkMzMFx1QkMzMVx1QkMzNFx1QkMzOFx1QkM0MFx1QkM0MVx1QkM0M1x1QkM0NFx1QkM0NVx1QkM0OVx1QkM0Q1x1QkM0RFx1QkM1MFx1QkM1RFx1QkM4NFx1QkM4NVx1QkM4OFx1QkM4Qlx1QkM4Q1x1QkM4RVx1QkM5NFx1QkM5NVx1QkM5N1wiXSxcbltcImJhNDFcIixcIlx1RDI4RFx1RDI4RVx1RDI4Rlx1RDI5Mlx1RDI5M1x1RDI5NFx1RDI5NlwiLDUsXCJcdUQyOURcdUQyOUVcdUQyOUZcdUQyQTFcdUQyQTJcdUQyQTNcdUQyQTVcIiw2LFwiXHVEMkFEXCJdLFxuW1wiYmE2MVwiLFwiXHVEMkFFXHVEMkFGXHVEMkIwXHVEMkIyXCIsNSxcIlx1RDJCQVx1RDJCQlx1RDJCRFx1RDJCRVx1RDJDMVx1RDJDM1wiLDQsXCJcdUQyQ0FcdUQyQ0NcIiw1XSxcbltcImJhODFcIixcIlx1RDJEMlx1RDJEM1x1RDJENVx1RDJENlx1RDJEN1x1RDJEOVx1RDJEQVx1RDJEQlx1RDJERFwiLDYsXCJcdUQyRTZcIiw5LFwiXHVEMkYyXHVEMkYzXHVEMkY1XHVEMkY2XHVEMkY3XHVEMkY5XHVEMkZBXHVCQzk5XHVCQzlBXHVCQ0EwXHVCQ0ExXHVCQ0E0XHVCQ0E3XHVCQ0E4XHVCQ0IwXHVCQ0IxXHVCQ0IzXHVCQ0I0XHVCQ0I1XHVCQ0JDXHVCQ0JEXHVCQ0MwXHVCQ0M0XHVCQ0NEXHVCQ0NGXHVCQ0QwXHVCQ0QxXHVCQ0Q1XHVCQ0Q4XHVCQ0RDXHVCQ0Y0XHVCQ0Y1XHVCQ0Y2XHVCQ0Y4XHVCQ0ZDXHVCRDA0XHVCRDA1XHVCRDA3XHVCRDA5XHVCRDEwXHVCRDE0XHVCRDI0XHVCRDJDXHVCRDQwXHVCRDQ4XHVCRDQ5XHVCRDRDXHVCRDUwXHVCRDU4XHVCRDU5XHVCRDY0XHVCRDY4XHVCRDgwXHVCRDgxXHVCRDg0XHVCRDg3XHVCRDg4XHVCRDg5XHVCRDhBXHVCRDkwXHVCRDkxXHVCRDkzXHVCRDk1XHVCRDk5XHVCRDlBXHVCRDlDXHVCREE0XHVCREIwXHVCREI4XHVCREQ0XHVCREQ1XHVCREQ4XHVCRERDXHVCREU5XHVCREYwXHVCREY0XHVCREY4XHVCRTAwXHVCRTAzXHVCRTA1XHVCRTBDXHVCRTBEXHVCRTEwXHVCRTE0XHVCRTFDXHVCRTFEXHVCRTFGXHVCRTQ0XHVCRTQ1XHVCRTQ4XHVCRTRDXHVCRTRFXHVCRTU0XHVCRTU1XHVCRTU3XHVCRTU5XHVCRTVBXHVCRTVCXHVCRTYwXHVCRTYxXHVCRTY0XCJdLFxuW1wiYmI0MVwiLFwiXHVEMkZCXCIsNCxcIlx1RDMwMlx1RDMwNFx1RDMwNlwiLDUsXCJcdUQzMEZcdUQzMTFcdUQzMTJcdUQzMTNcdUQzMTVcdUQzMTdcIiw0LFwiXHVEMzFFXHVEMzIyXHVEMzIzXCJdLFxuW1wiYmI2MVwiLFwiXHVEMzI0XHVEMzI2XHVEMzI3XHVEMzJBXHVEMzJCXHVEMzJEXHVEMzJFXHVEMzJGXHVEMzMxXCIsNixcIlx1RDMzQVx1RDMzRVwiLDUsXCJcdUQzNDZcdUQzNDdcdUQzNDhcdUQzNDlcIl0sXG5bXCJiYjgxXCIsXCJcdUQzNEFcIiwzMSxcIlx1QkU2OFx1QkU2QVx1QkU3MFx1QkU3MVx1QkU3M1x1QkU3NFx1QkU3NVx1QkU3Qlx1QkU3Q1x1QkU3RFx1QkU4MFx1QkU4NFx1QkU4Q1x1QkU4RFx1QkU4Rlx1QkU5MFx1QkU5MVx1QkU5OFx1QkU5OVx1QkVBOFx1QkVEMFx1QkVEMVx1QkVENFx1QkVEN1x1QkVEOFx1QkVFMFx1QkVFM1x1QkVFNFx1QkVFNVx1QkVFQ1x1QkYwMVx1QkYwOFx1QkYwOVx1QkYxOFx1QkYxOVx1QkYxQlx1QkYxQ1x1QkYxRFx1QkY0MFx1QkY0MVx1QkY0NFx1QkY0OFx1QkY1MFx1QkY1MVx1QkY1NVx1QkY5NFx1QkZCMFx1QkZDNVx1QkZDQ1x1QkZDRFx1QkZEMFx1QkZENFx1QkZEQ1x1QkZERlx1QkZFMVx1QzAzQ1x1QzA1MVx1QzA1OFx1QzA1Q1x1QzA2MFx1QzA2OFx1QzA2OVx1QzA5MFx1QzA5MVx1QzA5NFx1QzA5OFx1QzBBMFx1QzBBMVx1QzBBM1x1QzBBNVx1QzBBQ1x1QzBBRFx1QzBBRlx1QzBCMFx1QzBCM1x1QzBCNFx1QzBCNVx1QzBCNlx1QzBCQ1x1QzBCRFx1QzBCRlx1QzBDMFx1QzBDMVx1QzBDNVx1QzBDOFx1QzBDOVx1QzBDQ1x1QzBEMFx1QzBEOFx1QzBEOVx1QzBEQlx1QzBEQ1x1QzBERFx1QzBFNFwiXSxcbltcImJjNDFcIixcIlx1RDM2QVwiLDE3LFwiXHVEMzdFXHVEMzdGXHVEMzgxXHVEMzgyXHVEMzgzXHVEMzg1XHVEMzg2XHVEMzg3XCJdLFxuW1wiYmM2MVwiLFwiXHVEMzg4XHVEMzg5XHVEMzhBXHVEMzhCXHVEMzhFXHVEMzkyXCIsNSxcIlx1RDM5QVx1RDM5Qlx1RDM5RFx1RDM5RVx1RDM5Rlx1RDNBMVwiLDYsXCJcdUQzQUFcdUQzQUNcdUQzQUVcIl0sXG5bXCJiYzgxXCIsXCJcdUQzQUZcIiw0LFwiXHVEM0I1XHVEM0I2XHVEM0I3XHVEM0I5XHVEM0JBXHVEM0JCXHVEM0JEXCIsNixcIlx1RDNDNlx1RDNDN1x1RDNDQVwiLDUsXCJcdUQzRDFcIiw1LFwiXHVDMEU1XHVDMEU4XHVDMEVDXHVDMEY0XHVDMEY1XHVDMEY3XHVDMEY5XHVDMTAwXHVDMTA0XHVDMTA4XHVDMTEwXHVDMTE1XHVDMTFDXCIsNCxcIlx1QzEyM1x1QzEyNFx1QzEyNlx1QzEyN1x1QzEyQ1x1QzEyRFx1QzEyRlx1QzEzMFx1QzEzMVx1QzEzNlx1QzEzOFx1QzEzOVx1QzEzQ1x1QzE0MFx1QzE0OFx1QzE0OVx1QzE0Qlx1QzE0Q1x1QzE0RFx1QzE1NFx1QzE1NVx1QzE1OFx1QzE1Q1x1QzE2NFx1QzE2NVx1QzE2N1x1QzE2OFx1QzE2OVx1QzE3MFx1QzE3NFx1QzE3OFx1QzE4NVx1QzE4Q1x1QzE4RFx1QzE4RVx1QzE5MFx1QzE5NFx1QzE5Nlx1QzE5Q1x1QzE5RFx1QzE5Rlx1QzFBMVx1QzFBNVx1QzFBOFx1QzFBOVx1QzFBQ1x1QzFCMFx1QzFCRFx1QzFDNFx1QzFDOFx1QzFDQ1x1QzFENFx1QzFEN1x1QzFEOFx1QzFFMFx1QzFFNFx1QzFFOFx1QzFGMFx1QzFGMVx1QzFGM1x1QzFGQ1x1QzFGRFx1QzIwMFx1QzIwNFx1QzIwQ1x1QzIwRFx1QzIwRlx1QzIxMVx1QzIxOFx1QzIxOVx1QzIxQ1x1QzIxRlx1QzIyMFx1QzIyOFx1QzIyOVx1QzIyQlx1QzIyRFwiXSxcbltcImJkNDFcIixcIlx1RDNEN1x1RDNEOVwiLDcsXCJcdUQzRTJcdUQzRTRcIiw3LFwiXHVEM0VFXHVEM0VGXHVEM0YxXHVEM0YyXHVEM0YzXHVEM0Y1XHVEM0Y2XHVEM0Y3XCJdLFxuW1wiYmQ2MVwiLFwiXHVEM0Y4XHVEM0Y5XHVEM0ZBXHVEM0ZCXHVEM0ZFXHVENDAwXHVENDAyXCIsNSxcIlx1RDQwOVwiLDEzXSxcbltcImJkODFcIixcIlx1RDQxN1wiLDUsXCJcdUQ0MUVcIiwyNSxcIlx1QzIyRlx1QzIzMVx1QzIzMlx1QzIzNFx1QzI0OFx1QzI1MFx1QzI1MVx1QzI1NFx1QzI1OFx1QzI2MFx1QzI2NVx1QzI2Q1x1QzI2RFx1QzI3MFx1QzI3NFx1QzI3Q1x1QzI3RFx1QzI3Rlx1QzI4MVx1QzI4OFx1QzI4OVx1QzI5MFx1QzI5OFx1QzI5Qlx1QzI5RFx1QzJBNFx1QzJBNVx1QzJBOFx1QzJBQ1x1QzJBRFx1QzJCNFx1QzJCNVx1QzJCN1x1QzJCOVx1QzJEQ1x1QzJERFx1QzJFMFx1QzJFM1x1QzJFNFx1QzJFQlx1QzJFQ1x1QzJFRFx1QzJFRlx1QzJGMVx1QzJGNlx1QzJGOFx1QzJGOVx1QzJGQlx1QzJGQ1x1QzMwMFx1QzMwOFx1QzMwOVx1QzMwQ1x1QzMwRFx1QzMxM1x1QzMxNFx1QzMxNVx1QzMxOFx1QzMxQ1x1QzMyNFx1QzMyNVx1QzMyOFx1QzMyOVx1QzM0NVx1QzM2OFx1QzM2OVx1QzM2Q1x1QzM3MFx1QzM3Mlx1QzM3OFx1QzM3OVx1QzM3Q1x1QzM3RFx1QzM4NFx1QzM4OFx1QzM4Q1x1QzNDMFx1QzNEOFx1QzNEOVx1QzNEQ1x1QzNERlx1QzNFMFx1QzNFMlx1QzNFOFx1QzNFOVx1QzNFRFx1QzNGNFx1QzNGNVx1QzNGOFx1QzQwOFx1QzQxMFx1QzQyNFx1QzQyQ1x1QzQzMFwiXSxcbltcImJlNDFcIixcIlx1RDQzOFwiLDcsXCJcdUQ0NDFcdUQ0NDJcdUQ0NDNcdUQ0NDVcIiwxNF0sXG5bXCJiZTYxXCIsXCJcdUQ0NTRcIiw3LFwiXHVENDVEXHVENDVFXHVENDVGXHVENDYxXHVENDYyXHVENDYzXHVENDY1XCIsNyxcIlx1RDQ2RVx1RDQ3MFx1RDQ3MVx1RDQ3MlwiXSxcbltcImJlODFcIixcIlx1RDQ3M1wiLDQsXCJcdUQ0N0FcdUQ0N0JcdUQ0N0RcdUQ0N0VcdUQ0ODFcdUQ0ODNcIiw0LFwiXHVENDhBXHVENDhDXHVENDhFXCIsNSxcIlx1RDQ5NVwiLDgsXCJcdUM0MzRcdUM0M0NcdUM0M0RcdUM0NDhcdUM0NjRcdUM0NjVcdUM0NjhcdUM0NkNcdUM0NzRcdUM0NzVcdUM0NzlcdUM0ODBcdUM0OTRcdUM0OUNcdUM0QjhcdUM0QkNcdUM0RTlcdUM0RjBcdUM0RjFcdUM0RjRcdUM0RjhcdUM0RkFcdUM0RkZcdUM1MDBcdUM1MDFcdUM1MENcdUM1MTBcdUM1MTRcdUM1MUNcdUM1MjhcdUM1MjlcdUM1MkNcdUM1MzBcdUM1MzhcdUM1MzlcdUM1M0JcdUM1M0RcdUM1NDRcdUM1NDVcdUM1NDhcdUM1NDlcdUM1NEFcdUM1NENcdUM1NERcdUM1NEVcdUM1NTNcdUM1NTRcdUM1NTVcdUM1NTdcdUM1NThcdUM1NTlcdUM1NURcdUM1NUVcdUM1NjBcdUM1NjFcdUM1NjRcdUM1NjhcdUM1NzBcdUM1NzFcdUM1NzNcdUM1NzRcdUM1NzVcdUM1N0NcdUM1N0RcdUM1ODBcdUM1ODRcdUM1ODdcdUM1OENcdUM1OERcdUM1OEZcdUM1OTFcdUM1OTVcdUM1OTdcdUM1OThcdUM1OUNcdUM1QTBcdUM1QTlcdUM1QjRcdUM1QjVcdUM1QjhcdUM1QjlcdUM1QkJcdUM1QkNcdUM1QkRcdUM1QkVcdUM1QzRcIiw2LFwiXHVDNUNDXHVDNUNFXCJdLFxuW1wiYmY0MVwiLFwiXHVENDlFXCIsMTAsXCJcdUQ0QUFcIiwxNF0sXG5bXCJiZjYxXCIsXCJcdUQ0QjlcIiwxOCxcIlx1RDRDRFx1RDRDRVx1RDRDRlx1RDREMVx1RDREMlx1RDREM1x1RDRENVwiXSxcbltcImJmODFcIixcIlx1RDRENlwiLDUsXCJcdUQ0RERcdUQ0REVcdUQ0RTBcIiw3LFwiXHVENEU5XHVENEVBXHVENEVCXHVENEVEXHVENEVFXHVENEVGXHVENEYxXCIsNixcIlx1RDRGOVx1RDRGQVx1RDRGQ1x1QzVEMFx1QzVEMVx1QzVENFx1QzVEOFx1QzVFMFx1QzVFMVx1QzVFM1x1QzVFNVx1QzVFQ1x1QzVFRFx1QzVFRVx1QzVGMFx1QzVGNFx1QzVGNlx1QzVGN1x1QzVGQ1wiLDUsXCJcdUM2MDVcdUM2MDZcdUM2MDdcdUM2MDhcdUM2MENcdUM2MTBcdUM2MThcdUM2MTlcdUM2MUJcdUM2MUNcdUM2MjRcdUM2MjVcdUM2MjhcdUM2MkNcdUM2MkRcdUM2MkVcdUM2MzBcdUM2MzNcdUM2MzRcdUM2MzVcdUM2MzdcdUM2MzlcdUM2M0JcdUM2NDBcdUM2NDFcdUM2NDRcdUM2NDhcdUM2NTBcdUM2NTFcdUM2NTNcdUM2NTRcdUM2NTVcdUM2NUNcdUM2NURcdUM2NjBcdUM2NkNcdUM2NkZcdUM2NzFcdUM2NzhcdUM2NzlcdUM2N0NcdUM2ODBcdUM2ODhcdUM2ODlcdUM2OEJcdUM2OERcdUM2OTRcdUM2OTVcdUM2OThcdUM2OUNcdUM2QTRcdUM2QTVcdUM2QTdcdUM2QTlcdUM2QjBcdUM2QjFcdUM2QjRcdUM2QjhcdUM2QjlcdUM2QkFcdUM2QzBcdUM2QzFcdUM2QzNcdUM2QzVcdUM2Q0NcdUM2Q0RcdUM2RDBcdUM2RDRcdUM2RENcdUM2RERcdUM2RTBcdUM2RTFcdUM2RThcIl0sXG5bXCJjMDQxXCIsXCJcdUQ0RkVcIiw1LFwiXHVENTA1XHVENTA2XHVENTA3XHVENTA5XHVENTBBXHVENTBCXHVENTBEXCIsNixcIlx1RDUxNlx1RDUxOFwiLDVdLFxuW1wiYzA2MVwiLFwiXHVENTFFXCIsMjVdLFxuW1wiYzA4MVwiLFwiXHVENTM4XHVENTM5XHVENTNBXHVENTNCXHVENTNFXHVENTNGXHVENTQxXHVENTQyXHVENTQzXHVENTQ1XCIsNixcIlx1RDU0RVx1RDU1MFx1RDU1MlwiLDUsXCJcdUQ1NUFcdUQ1NUJcdUQ1NURcdUQ1NUVcdUQ1NUZcdUQ1NjFcdUQ1NjJcdUQ1NjNcdUM2RTlcdUM2RUNcdUM2RjBcdUM2RjhcdUM2RjlcdUM2RkRcdUM3MDRcdUM3MDVcdUM3MDhcdUM3MENcdUM3MTRcdUM3MTVcdUM3MTdcdUM3MTlcdUM3MjBcdUM3MjFcdUM3MjRcdUM3MjhcdUM3MzBcdUM3MzFcdUM3MzNcdUM3MzVcdUM3MzdcdUM3M0NcdUM3M0RcdUM3NDBcdUM3NDRcdUM3NEFcdUM3NENcdUM3NERcdUM3NEZcdUM3NTFcIiw3LFwiXHVDNzVDXHVDNzYwXHVDNzY4XHVDNzZCXHVDNzc0XHVDNzc1XHVDNzc4XHVDNzdDXHVDNzdEXHVDNzdFXHVDNzgzXHVDNzg0XHVDNzg1XHVDNzg3XHVDNzg4XHVDNzg5XHVDNzhBXHVDNzhFXHVDNzkwXHVDNzkxXHVDNzk0XHVDNzk2XHVDNzk3XHVDNzk4XHVDNzlBXHVDN0EwXHVDN0ExXHVDN0EzXHVDN0E0XHVDN0E1XHVDN0E2XHVDN0FDXHVDN0FEXHVDN0IwXHVDN0I0XHVDN0JDXHVDN0JEXHVDN0JGXHVDN0MwXHVDN0MxXHVDN0M4XHVDN0M5XHVDN0NDXHVDN0NFXHVDN0QwXHVDN0Q4XHVDN0REXHVDN0U0XHVDN0U4XHVDN0VDXHVDODAwXHVDODAxXHVDODA0XHVDODA4XHVDODBBXCJdLFxuW1wiYzE0MVwiLFwiXHVENTY0XHVENTY2XHVENTY3XHVENTZBXHVENTZDXHVENTZFXCIsNSxcIlx1RDU3Nlx1RDU3N1x1RDU3OVx1RDU3QVx1RDU3Qlx1RDU3RFwiLDYsXCJcdUQ1ODZcdUQ1OEFcdUQ1OEJcIl0sXG5bXCJjMTYxXCIsXCJcdUQ1OENcdUQ1OERcdUQ1OEVcdUQ1OEZcdUQ1OTFcIiwxOSxcIlx1RDVBNlx1RDVBN1wiXSxcbltcImMxODFcIixcIlx1RDVBOFwiLDMxLFwiXHVDODEwXHVDODExXHVDODEzXHVDODE1XHVDODE2XHVDODFDXHVDODFEXHVDODIwXHVDODI0XHVDODJDXHVDODJEXHVDODJGXHVDODMxXHVDODM4XHVDODNDXHVDODQwXHVDODQ4XHVDODQ5XHVDODRDXHVDODREXHVDODU0XHVDODcwXHVDODcxXHVDODc0XHVDODc4XHVDODdBXHVDODgwXHVDODgxXHVDODgzXHVDODg1XHVDODg2XHVDODg3XHVDODhCXHVDODhDXHVDODhEXHVDODk0XHVDODlEXHVDODlGXHVDOEExXHVDOEE4XHVDOEJDXHVDOEJEXHVDOEM0XHVDOEM4XHVDOENDXHVDOEQ0XHVDOEQ1XHVDOEQ3XHVDOEQ5XHVDOEUwXHVDOEUxXHVDOEU0XHVDOEY1XHVDOEZDXHVDOEZEXHVDOTAwXHVDOTA0XHVDOTA1XHVDOTA2XHVDOTBDXHVDOTBEXHVDOTBGXHVDOTExXHVDOTE4XHVDOTJDXHVDOTM0XHVDOTUwXHVDOTUxXHVDOTU0XHVDOTU4XHVDOTYwXHVDOTYxXHVDOTYzXHVDOTZDXHVDOTcwXHVDOTc0XHVDOTdDXHVDOTg4XHVDOTg5XHVDOThDXHVDOTkwXHVDOTk4XHVDOTk5XHVDOTlCXHVDOTlEXHVDOUMwXHVDOUMxXHVDOUM0XHVDOUM3XHVDOUM4XHVDOUNBXHVDOUQwXHVDOUQxXHVDOUQzXCJdLFxuW1wiYzI0MVwiLFwiXHVENUNBXHVENUNCXHVENUNEXHVENUNFXHVENUNGXHVENUQxXHVENUQzXCIsNCxcIlx1RDVEQVx1RDVEQ1x1RDVERVwiLDUsXCJcdUQ1RTZcdUQ1RTdcdUQ1RTlcdUQ1RUFcdUQ1RUJcdUQ1RURcdUQ1RUVcIl0sXG5bXCJjMjYxXCIsXCJcdUQ1RUZcIiw0LFwiXHVENUY2XHVENUY4XHVENUZBXCIsNSxcIlx1RDYwMlx1RDYwM1x1RDYwNVx1RDYwNlx1RDYwN1x1RDYwOVwiLDYsXCJcdUQ2MTJcIl0sXG5bXCJjMjgxXCIsXCJcdUQ2MTZcIiw1LFwiXHVENjFEXHVENjFFXHVENjFGXHVENjIxXHVENjIyXHVENjIzXHVENjI1XCIsNyxcIlx1RDYyRVwiLDksXCJcdUQ2M0FcdUQ2M0JcdUM5RDVcdUM5RDZcdUM5RDlcdUM5REFcdUM5RENcdUM5RERcdUM5RTBcdUM5RTJcdUM5RTRcdUM5RTdcdUM5RUNcdUM5RURcdUM5RUZcdUM5RjBcdUM5RjFcdUM5RjhcdUM5RjlcdUM5RkNcdUNBMDBcdUNBMDhcdUNBMDlcdUNBMEJcdUNBMENcdUNBMERcdUNBMTRcdUNBMThcdUNBMjlcdUNBNENcdUNBNERcdUNBNTBcdUNBNTRcdUNBNUNcdUNBNURcdUNBNUZcdUNBNjBcdUNBNjFcdUNBNjhcdUNBN0RcdUNBODRcdUNBOThcdUNBQkNcdUNBQkRcdUNBQzBcdUNBQzRcdUNBQ0NcdUNBQ0RcdUNBQ0ZcdUNBRDFcdUNBRDNcdUNBRDhcdUNBRDlcdUNBRTBcdUNBRUNcdUNBRjRcdUNCMDhcdUNCMTBcdUNCMTRcdUNCMThcdUNCMjBcdUNCMjFcdUNCNDFcdUNCNDhcdUNCNDlcdUNCNENcdUNCNTBcdUNCNThcdUNCNTlcdUNCNURcdUNCNjRcdUNCNzhcdUNCNzlcdUNCOUNcdUNCQjhcdUNCRDRcdUNCRTRcdUNCRTdcdUNCRTlcdUNDMENcdUNDMERcdUNDMTBcdUNDMTRcdUNDMUNcdUNDMURcdUNDMjFcdUNDMjJcdUNDMjdcdUNDMjhcdUNDMjlcdUNDMkNcdUNDMkVcdUNDMzBcdUNDMzhcdUNDMzlcdUNDM0JcIl0sXG5bXCJjMzQxXCIsXCJcdUQ2M0RcdUQ2M0VcdUQ2M0ZcdUQ2NDFcdUQ2NDJcdUQ2NDNcdUQ2NDRcdUQ2NDZcdUQ2NDdcdUQ2NEFcdUQ2NENcdUQ2NEVcdUQ2NEZcdUQ2NTBcdUQ2NTJcdUQ2NTNcdUQ2NTZcdUQ2NTdcdUQ2NTlcdUQ2NUFcdUQ2NUJcdUQ2NURcIiw0XSxcbltcImMzNjFcIixcIlx1RDY2MlwiLDQsXCJcdUQ2NjhcdUQ2NkFcIiw1LFwiXHVENjcyXHVENjczXHVENjc1XCIsMTFdLFxuW1wiYzM4MVwiLFwiXHVENjgxXHVENjgyXHVENjg0XHVENjg2XCIsNSxcIlx1RDY4RVx1RDY4Rlx1RDY5MVx1RDY5Mlx1RDY5M1x1RDY5NVwiLDcsXCJcdUQ2OUVcdUQ2QTBcdUQ2QTJcIiw1LFwiXHVENkE5XHVENkFBXHVDQzNDXHVDQzNEXHVDQzNFXHVDQzQ0XHVDQzQ1XHVDQzQ4XHVDQzRDXHVDQzU0XHVDQzU1XHVDQzU3XHVDQzU4XHVDQzU5XHVDQzYwXHVDQzY0XHVDQzY2XHVDQzY4XHVDQzcwXHVDQzc1XHVDQzk4XHVDQzk5XHVDQzlDXHVDQ0EwXHVDQ0E4XHVDQ0E5XHVDQ0FCXHVDQ0FDXHVDQ0FEXHVDQ0I0XHVDQ0I1XHVDQ0I4XHVDQ0JDXHVDQ0M0XHVDQ0M1XHVDQ0M3XHVDQ0M5XHVDQ0QwXHVDQ0Q0XHVDQ0U0XHVDQ0VDXHVDQ0YwXHVDRDAxXHVDRDA4XHVDRDA5XHVDRDBDXHVDRDEwXHVDRDE4XHVDRDE5XHVDRDFCXHVDRDFEXHVDRDI0XHVDRDI4XHVDRDJDXHVDRDM5XHVDRDVDXHVDRDYwXHVDRDY0XHVDRDZDXHVDRDZEXHVDRDZGXHVDRDcxXHVDRDc4XHVDRDg4XHVDRDk0XHVDRDk1XHVDRDk4XHVDRDlDXHVDREE0XHVDREE1XHVDREE3XHVDREE5XHVDREIwXHVDREM0XHVDRENDXHVDREQwXHVDREU4XHVDREVDXHVDREYwXHVDREY4XHVDREY5XHVDREZCXHVDREZEXHVDRTA0XHVDRTA4XHVDRTBDXHVDRTE0XHVDRTE5XHVDRTIwXHVDRTIxXHVDRTI0XHVDRTI4XHVDRTMwXHVDRTMxXHVDRTMzXHVDRTM1XCJdLFxuW1wiYzQ0MVwiLFwiXHVENkFCXHVENkFEXHVENkFFXHVENkFGXHVENkIxXCIsNyxcIlx1RDZCQVx1RDZCQ1wiLDcsXCJcdUQ2QzZcdUQ2QzdcdUQ2QzlcdUQ2Q0FcdUQ2Q0JcIl0sXG5bXCJjNDYxXCIsXCJcdUQ2Q0RcdUQ2Q0VcdUQ2Q0ZcdUQ2RDBcdUQ2RDJcdUQ2RDNcdUQ2RDVcdUQ2RDZcdUQ2RDhcdUQ2REFcIiw1LFwiXHVENkUxXHVENkUyXHVENkUzXHVENkU1XHVENkU2XHVENkU3XHVENkU5XCIsNF0sXG5bXCJjNDgxXCIsXCJcdUQ2RUVcdUQ2RUZcdUQ2RjFcdUQ2RjJcdUQ2RjNcdUQ2RjRcdUQ2RjZcIiw1LFwiXHVENkZFXHVENkZGXHVENzAxXHVENzAyXHVENzAzXHVENzA1XCIsMTEsXCJcdUQ3MTJcdUQ3MTNcdUQ3MTRcdUNFNThcdUNFNTlcdUNFNUNcdUNFNUZcdUNFNjBcdUNFNjFcdUNFNjhcdUNFNjlcdUNFNkJcdUNFNkRcdUNFNzRcdUNFNzVcdUNFNzhcdUNFN0NcdUNFODRcdUNFODVcdUNFODdcdUNFODlcdUNFOTBcdUNFOTFcdUNFOTRcdUNFOThcdUNFQTBcdUNFQTFcdUNFQTNcdUNFQTRcdUNFQTVcdUNFQUNcdUNFQURcdUNFQzFcdUNFRTRcdUNFRTVcdUNFRThcdUNFRUJcdUNFRUNcdUNFRjRcdUNFRjVcdUNFRjdcdUNFRjhcdUNFRjlcdUNGMDBcdUNGMDFcdUNGMDRcdUNGMDhcdUNGMTBcdUNGMTFcdUNGMTNcdUNGMTVcdUNGMUNcdUNGMjBcdUNGMjRcdUNGMkNcdUNGMkRcdUNGMkZcdUNGMzBcdUNGMzFcdUNGMzhcdUNGNTRcdUNGNTVcdUNGNThcdUNGNUNcdUNGNjRcdUNGNjVcdUNGNjdcdUNGNjlcdUNGNzBcdUNGNzFcdUNGNzRcdUNGNzhcdUNGODBcdUNGODVcdUNGOENcdUNGQTFcdUNGQThcdUNGQjBcdUNGQzRcdUNGRTBcdUNGRTFcdUNGRTRcdUNGRThcdUNGRjBcdUNGRjFcdUNGRjNcdUNGRjVcdUNGRkNcdUQwMDBcdUQwMDRcdUQwMTFcdUQwMThcdUQwMkRcdUQwMzRcdUQwMzVcdUQwMzhcdUQwM0NcIl0sXG5bXCJjNTQxXCIsXCJcdUQ3MTVcdUQ3MTZcdUQ3MTdcdUQ3MUFcdUQ3MUJcdUQ3MURcdUQ3MUVcdUQ3MUZcdUQ3MjFcIiw2LFwiXHVENzJBXHVENzJDXHVENzJFXCIsNSxcIlx1RDczNlx1RDczN1x1RDczOVwiXSxcbltcImM1NjFcIixcIlx1RDczQVx1RDczQlx1RDczRFwiLDYsXCJcdUQ3NDVcdUQ3NDZcdUQ3NDhcdUQ3NEFcIiw1LFwiXHVENzUyXHVENzUzXHVENzU1XHVENzVBXCIsNF0sXG5bXCJjNTgxXCIsXCJcdUQ3NUZcdUQ3NjJcdUQ3NjRcdUQ3NjZcdUQ3NjdcdUQ3NjhcdUQ3NkFcdUQ3NkJcdUQ3NkRcdUQ3NkVcdUQ3NkZcdUQ3NzFcdUQ3NzJcdUQ3NzNcdUQ3NzVcIiw2LFwiXHVENzdFXHVENzdGXHVENzgwXHVENzgyXCIsNSxcIlx1RDc4QVx1RDc4Qlx1RDA0NFx1RDA0NVx1RDA0N1x1RDA0OVx1RDA1MFx1RDA1NFx1RDA1OFx1RDA2MFx1RDA2Q1x1RDA2RFx1RDA3MFx1RDA3NFx1RDA3Q1x1RDA3RFx1RDA4MVx1RDBBNFx1RDBBNVx1RDBBOFx1RDBBQ1x1RDBCNFx1RDBCNVx1RDBCN1x1RDBCOVx1RDBDMFx1RDBDMVx1RDBDNFx1RDBDOFx1RDBDOVx1RDBEMFx1RDBEMVx1RDBEM1x1RDBENFx1RDBENVx1RDBEQ1x1RDBERFx1RDBFMFx1RDBFNFx1RDBFQ1x1RDBFRFx1RDBFRlx1RDBGMFx1RDBGMVx1RDBGOFx1RDEwRFx1RDEzMFx1RDEzMVx1RDEzNFx1RDEzOFx1RDEzQVx1RDE0MFx1RDE0MVx1RDE0M1x1RDE0NFx1RDE0NVx1RDE0Q1x1RDE0RFx1RDE1MFx1RDE1NFx1RDE1Q1x1RDE1RFx1RDE1Rlx1RDE2MVx1RDE2OFx1RDE2Q1x1RDE3Q1x1RDE4NFx1RDE4OFx1RDFBMFx1RDFBMVx1RDFBNFx1RDFBOFx1RDFCMFx1RDFCMVx1RDFCM1x1RDFCNVx1RDFCQVx1RDFCQ1x1RDFDMFx1RDFEOFx1RDFGNFx1RDFGOFx1RDIwN1x1RDIwOVx1RDIxMFx1RDIyQ1x1RDIyRFx1RDIzMFx1RDIzNFx1RDIzQ1x1RDIzRFx1RDIzRlx1RDI0MVx1RDI0OFx1RDI1Q1wiXSxcbltcImM2NDFcIixcIlx1RDc4RFx1RDc4RVx1RDc4Rlx1RDc5MVwiLDYsXCJcdUQ3OUFcdUQ3OUNcdUQ3OUVcIiw1XSxcbltcImM2YTFcIixcIlx1RDI2NFx1RDI4MFx1RDI4MVx1RDI4NFx1RDI4OFx1RDI5MFx1RDI5MVx1RDI5NVx1RDI5Q1x1RDJBMFx1RDJBNFx1RDJBQ1x1RDJCMVx1RDJCOFx1RDJCOVx1RDJCQ1x1RDJCRlx1RDJDMFx1RDJDMlx1RDJDOFx1RDJDOVx1RDJDQlx1RDJENFx1RDJEOFx1RDJEQ1x1RDJFNFx1RDJFNVx1RDJGMFx1RDJGMVx1RDJGNFx1RDJGOFx1RDMwMFx1RDMwMVx1RDMwM1x1RDMwNVx1RDMwQ1x1RDMwRFx1RDMwRVx1RDMxMFx1RDMxNFx1RDMxNlx1RDMxQ1x1RDMxRFx1RDMxRlx1RDMyMFx1RDMyMVx1RDMyNVx1RDMyOFx1RDMyOVx1RDMyQ1x1RDMzMFx1RDMzOFx1RDMzOVx1RDMzQlx1RDMzQ1x1RDMzRFx1RDM0NFx1RDM0NVx1RDM3Q1x1RDM3RFx1RDM4MFx1RDM4NFx1RDM4Q1x1RDM4RFx1RDM4Rlx1RDM5MFx1RDM5MVx1RDM5OFx1RDM5OVx1RDM5Q1x1RDNBMFx1RDNBOFx1RDNBOVx1RDNBQlx1RDNBRFx1RDNCNFx1RDNCOFx1RDNCQ1x1RDNDNFx1RDNDNVx1RDNDOFx1RDNDOVx1RDNEMFx1RDNEOFx1RDNFMVx1RDNFM1x1RDNFQ1x1RDNFRFx1RDNGMFx1RDNGNFx1RDNGQ1x1RDNGRFx1RDNGRlx1RDQwMVwiXSxcbltcImM3YTFcIixcIlx1RDQwOFx1RDQxRFx1RDQ0MFx1RDQ0NFx1RDQ1Q1x1RDQ2MFx1RDQ2NFx1RDQ2RFx1RDQ2Rlx1RDQ3OFx1RDQ3OVx1RDQ3Q1x1RDQ3Rlx1RDQ4MFx1RDQ4Mlx1RDQ4OFx1RDQ4OVx1RDQ4Qlx1RDQ4RFx1RDQ5NFx1RDRBOVx1RDRDQ1x1RDREMFx1RDRENFx1RDREQ1x1RDRERlx1RDRFOFx1RDRFQ1x1RDRGMFx1RDRGOFx1RDRGQlx1RDRGRFx1RDUwNFx1RDUwOFx1RDUwQ1x1RDUxNFx1RDUxNVx1RDUxN1x1RDUzQ1x1RDUzRFx1RDU0MFx1RDU0NFx1RDU0Q1x1RDU0RFx1RDU0Rlx1RDU1MVx1RDU1OFx1RDU1OVx1RDU1Q1x1RDU2MFx1RDU2NVx1RDU2OFx1RDU2OVx1RDU2Qlx1RDU2RFx1RDU3NFx1RDU3NVx1RDU3OFx1RDU3Q1x1RDU4NFx1RDU4NVx1RDU4N1x1RDU4OFx1RDU4OVx1RDU5MFx1RDVBNVx1RDVDOFx1RDVDOVx1RDVDQ1x1RDVEMFx1RDVEMlx1RDVEOFx1RDVEOVx1RDVEQlx1RDVERFx1RDVFNFx1RDVFNVx1RDVFOFx1RDVFQ1x1RDVGNFx1RDVGNVx1RDVGN1x1RDVGOVx1RDYwMFx1RDYwMVx1RDYwNFx1RDYwOFx1RDYxMFx1RDYxMVx1RDYxM1x1RDYxNFx1RDYxNVx1RDYxQ1x1RDYyMFwiXSxcbltcImM4YTFcIixcIlx1RDYyNFx1RDYyRFx1RDYzOFx1RDYzOVx1RDYzQ1x1RDY0MFx1RDY0NVx1RDY0OFx1RDY0OVx1RDY0Qlx1RDY0RFx1RDY1MVx1RDY1NFx1RDY1NVx1RDY1OFx1RDY1Q1x1RDY2N1x1RDY2OVx1RDY3MFx1RDY3MVx1RDY3NFx1RDY4M1x1RDY4NVx1RDY4Q1x1RDY4RFx1RDY5MFx1RDY5NFx1RDY5RFx1RDY5Rlx1RDZBMVx1RDZBOFx1RDZBQ1x1RDZCMFx1RDZCOVx1RDZCQlx1RDZDNFx1RDZDNVx1RDZDOFx1RDZDQ1x1RDZEMVx1RDZENFx1RDZEN1x1RDZEOVx1RDZFMFx1RDZFNFx1RDZFOFx1RDZGMFx1RDZGNVx1RDZGQ1x1RDZGRFx1RDcwMFx1RDcwNFx1RDcxMVx1RDcxOFx1RDcxOVx1RDcxQ1x1RDcyMFx1RDcyOFx1RDcyOVx1RDcyQlx1RDcyRFx1RDczNFx1RDczNVx1RDczOFx1RDczQ1x1RDc0NFx1RDc0N1x1RDc0OVx1RDc1MFx1RDc1MVx1RDc1NFx1RDc1Nlx1RDc1N1x1RDc1OFx1RDc1OVx1RDc2MFx1RDc2MVx1RDc2M1x1RDc2NVx1RDc2OVx1RDc2Q1x1RDc3MFx1RDc3NFx1RDc3Q1x1RDc3RFx1RDc4MVx1RDc4OFx1RDc4OVx1RDc4Q1x1RDc5MFx1RDc5OFx1RDc5OVx1RDc5Qlx1RDc5RFwiXSxcbltcImNhYTFcIixcIlx1NEYzRFx1NEY3M1x1NTA0N1x1NTBGOVx1NTJBMFx1NTNFRlx1NTQ3NVx1NTRFNVx1NTYwOVx1NUFDMVx1NUJCNlx1NjY4N1x1NjdCNlx1NjdCN1x1NjdFRlx1NkI0Q1x1NzNDMlx1NzVDMlx1N0EzQ1x1ODJEQlx1ODMwNFx1ODg1N1x1ODg4OFx1OEEzNlx1OENDOFx1OERDRlx1OEVGQlx1OEZFNlx1OTlENVx1NTIzQlx1NTM3NFx1NTQwNFx1NjA2QVx1NjE2NFx1NkJCQ1x1NzNDRlx1ODExQVx1ODlCQVx1ODlEMlx1OTVBM1x1NEY4M1x1NTIwQVx1NThCRVx1NTk3OFx1NTlFNlx1NUU3Mlx1NUU3OVx1NjFDN1x1NjNDMFx1Njc0Nlx1NjdFQ1x1Njg3Rlx1NkY5N1x1NzY0RVx1NzcwQlx1NzhGNVx1N0EwOFx1N0FGRlx1N0MyMVx1ODA5RFx1ODI2RVx1ODI3MVx1OEFFQlx1OTU5M1x1NEU2Qlx1NTU5RFx1NjZGN1x1NkUzNFx1NzhBM1x1N0FFRFx1ODQ1Qlx1ODkxMFx1ODc0RVx1OTdBOFx1NTJEOFx1NTc0RVx1NTgyQVx1NUQ0Q1x1NjExRlx1NjFCRVx1NjIyMVx1NjU2Mlx1NjdEMVx1NkE0NFx1NkUxQlx1NzUxOFx1NzVCM1x1NzZFM1x1NzdCMFx1N0QzQVx1OTBBRlx1OTQ1MVx1OTQ1Mlx1OUY5NVwiXSxcbltcImNiYTFcIixcIlx1NTMyM1x1NUNBQ1x1NzUzMlx1ODBEQlx1OTI0MFx1OTU5OFx1NTI1Qlx1NTgwOFx1NTlEQ1x1NUNBMVx1NUQxN1x1NUVCN1x1NUYzQVx1NUY0QVx1NjE3N1x1NkM1Rlx1NzU3QVx1NzU4Nlx1N0NFMFx1N0Q3M1x1N0RCMVx1N0Y4Q1x1ODE1NFx1ODIyMVx1ODU5MVx1ODk0MVx1OEIxQlx1OTJGQ1x1OTY0RFx1OUM0N1x1NEVDQlx1NEVGN1x1NTAwQlx1NTFGMVx1NTg0Rlx1NjEzN1x1NjEzRVx1NjE2OFx1NjUzOVx1NjlFQVx1NkYxMVx1NzVBNVx1NzY4Nlx1NzZENlx1N0I4N1x1ODJBNVx1ODRDQlx1RjkwMFx1OTNBN1x1OTU4Qlx1NTU4MFx1NUJBMlx1NTc1MVx1RjkwMVx1N0NCM1x1N0ZCOVx1OTFCNVx1NTAyOFx1NTNCQlx1NUM0NVx1NURFOFx1NjJEMlx1NjM2RVx1NjREQVx1NjRFN1x1NkUyMFx1NzBBQ1x1Nzk1Qlx1OERERFx1OEUxRVx1RjkwMlx1OTA3RFx1OTI0NVx1OTJGOFx1NEU3RVx1NEVGNlx1NTA2NVx1NURGRVx1NUVGQVx1NjEwNlx1Njk1N1x1ODE3MVx1ODY1NFx1OEU0N1x1OTM3NVx1OUEyQlx1NEU1RVx1NTA5MVx1Njc3MFx1Njg0MFx1NTEwOVx1NTI4RFx1NTI5Mlx1NkFBMlwiXSxcbltcImNjYTFcIixcIlx1NzdCQ1x1OTIxMFx1OUVENFx1NTJBQlx1NjAyRlx1OEZGMlx1NTA0OFx1NjFBOVx1NjNFRFx1NjRDQVx1NjgzQ1x1NkE4NFx1NkZDMFx1ODE4OFx1ODlBMVx1OTY5NFx1NTgwNVx1NzI3RFx1NzJBQ1x1NzUwNFx1N0Q3OVx1N0U2RFx1ODBBOVx1ODk4Qlx1OEI3NFx1OTA2M1x1OUQ1MVx1NjI4OVx1NkM3QVx1NkY1NFx1N0Q1MFx1N0YzQVx1OEEyM1x1NTE3Q1x1NjE0QVx1N0I5RFx1OEIxOVx1OTI1N1x1OTM4Q1x1NEVBQ1x1NEZEM1x1NTAxRVx1NTBCRVx1NTEwNlx1NTJDMVx1NTJDRFx1NTM3Rlx1NTc3MFx1NTg4M1x1NUU5QVx1NUY5MVx1NjE3Nlx1NjFBQ1x1NjRDRVx1NjU2Q1x1NjY2Rlx1NjZCQlx1NjZGNFx1Njg5N1x1NkQ4N1x1NzA4NVx1NzBGMVx1NzQ5Rlx1NzRBNVx1NzRDQVx1NzVEOVx1Nzg2Q1x1NzhFQ1x1N0FERlx1N0FGNlx1N0Q0NVx1N0Q5M1x1ODAxNVx1ODAzRlx1ODExQlx1ODM5Nlx1OEI2Nlx1OEYxNVx1OTAxNVx1OTNFMVx1OTgwM1x1OTgzOFx1OUE1QVx1OUJFOFx1NEZDMlx1NTU1M1x1NTgzQVx1NTk1MVx1NUI2M1x1NUM0Nlx1NjBCOFx1NjIxMlx1Njg0Mlx1NjhCMFwiXSxcbltcImNkYTFcIixcIlx1NjhFOFx1NkVBQVx1NzU0Q1x1NzY3OFx1NzhDRVx1N0EzRFx1N0NGQlx1N0U2Qlx1N0U3Q1x1OEEwOFx1OEFBMVx1OEMzRlx1OTY4RVx1OURDNFx1NTNFNFx1NTNFOVx1NTQ0QVx1NTQ3MVx1NTZGQVx1NTlEMVx1NUI2NFx1NUMzQlx1NUVBQlx1NjJGN1x1NjUzN1x1NjU0NVx1NjU3Mlx1NjZBMFx1NjdBRlx1NjlDMVx1NkNCRFx1NzVGQ1x1NzY5MFx1Nzc3RVx1N0EzRlx1N0Y5NFx1ODAwM1x1ODBBMVx1ODE4Rlx1ODJFNlx1ODJGRFx1ODNGMFx1ODVDMVx1ODgzMVx1ODhCNFx1OEFBNVx1RjkwM1x1OEY5Q1x1OTMyRVx1OTZDN1x1OTg2N1x1OUFEOFx1OUYxM1x1NTRFRFx1NjU5Qlx1NjZGMlx1Njg4Rlx1N0E0MFx1OEMzN1x1OUQ2MFx1NTZGMFx1NTc2NFx1NUQxMVx1NjYwNlx1NjhCMVx1NjhDRFx1NkVGRVx1NzQyOFx1ODg5RVx1OUJFNFx1NkM2OFx1RjkwNFx1OUFBOFx1NEY5Qlx1NTE2Q1x1NTE3MVx1NTI5Rlx1NUI1NFx1NURFNVx1NjA1MFx1NjA2RFx1NjJGMVx1NjNBN1x1NjUzQlx1NzNEOVx1N0E3QVx1ODZBM1x1OENBMlx1OTc4Rlx1NEUzMlx1NUJFMVx1NjIwOFx1Njc5Q1x1NzREQ1wiXSxcbltcImNlYTFcIixcIlx1NzlEMVx1ODNEM1x1OEE4N1x1OEFCMlx1OERFOFx1OTA0RVx1OTM0Qlx1OTg0Nlx1NUVEM1x1NjlFOFx1ODVGRlx1OTBFRFx1RjkwNVx1NTFBMFx1NUI5OFx1NUJFQ1x1NjE2M1x1NjhGQVx1NkIzRVx1NzA0Q1x1NzQyRlx1NzREOFx1N0JBMVx1N0Y1MFx1ODNDNVx1ODlDMFx1OENBQlx1OTVEQ1x1OTkyOFx1NTIyRVx1NjA1RFx1NjJFQ1x1OTAwMlx1NEY4QVx1NTE0OVx1NTMyMVx1NThEOVx1NUVFM1x1NjZFMFx1NkQzOFx1NzA5QVx1NzJDMlx1NzNENlx1N0I1MFx1ODBGMVx1OTQ1Qlx1NTM2Nlx1NjM5Qlx1N0Y2Qlx1NEU1Nlx1NTA4MFx1NTg0QVx1NThERVx1NjAyQVx1NjEyN1x1NjJEMFx1NjlEMFx1OUI0MVx1NUI4Rlx1N0QxOFx1ODBCMVx1OEY1Rlx1NEVBNFx1NTBEMVx1NTRBQ1x1NTVBQ1x1NUIwQ1x1NURBMFx1NURFN1x1NjUyQVx1NjU0RVx1NjgyMVx1NkE0Qlx1NzJFMVx1NzY4RVx1NzdFRlx1N0Q1RVx1N0ZGOVx1ODFBMFx1ODU0RVx1ODZERlx1OEYwM1x1OEY0RVx1OTBDQVx1OTkwM1x1OUE1NVx1OUJBQlx1NEUxOFx1NEU0NVx1NEU1RFx1NEVDN1x1NEZGMVx1NTE3N1x1NTJGRVwiXSxcbltcImNmYTFcIixcIlx1NTM0MFx1NTNFM1x1NTNFNVx1NTQ4RVx1NTYxNFx1NTc3NVx1NTdBMlx1NUJDN1x1NUQ4N1x1NUVEMFx1NjFGQ1x1NjJEOFx1NjU1MVx1NjdCOFx1NjdFOVx1NjlDQlx1NkI1MFx1NkJDNlx1NkJFQ1x1NkM0Mlx1NkU5RFx1NzA3OFx1NzJEN1x1NzM5Nlx1NzQwM1x1NzdCRlx1NzdFOVx1N0E3Nlx1N0Q3Rlx1ODAwOVx1ODFGQ1x1ODIwNVx1ODIwQVx1ODJERlx1ODg2Mlx1OEIzM1x1OENGQ1x1OEVDMFx1OTAxMVx1OTBCMVx1OTI2NFx1OTJCNlx1OTlEMlx1OUE0NVx1OUNFOVx1OUREN1x1OUY5Q1x1NTcwQlx1NUM0MFx1ODNDQVx1OTdBMFx1OTdBQlx1OUVCNFx1NTQxQlx1N0E5OFx1N0ZBNFx1ODhEOVx1OEVDRFx1OTBFMVx1NTgwMFx1NUM0OFx1NjM5OFx1N0E5Rlx1NUJBRVx1NUYxM1x1N0E3OVx1N0FBRVx1ODI4RVx1OEVBQ1x1NTAyNlx1NTIzOFx1NTJGOFx1NTM3N1x1NTcwOFx1NjJGM1x1NjM3Mlx1NkIwQVx1NkRDM1x1NzczN1x1NTNBNVx1NzM1N1x1ODU2OFx1OEU3Nlx1OTVENVx1NjczQVx1NkFDM1x1NkY3MFx1OEE2RFx1OEVDQ1x1OTk0Qlx1RjkwNlx1NjY3N1x1NkI3OFx1OENCNFwiXSxcbltcImQwYTFcIixcIlx1OUIzQ1x1RjkwN1x1NTNFQlx1NTcyRFx1NTk0RVx1NjNDNlx1NjlGQlx1NzNFQVx1Nzg0NVx1N0FCQVx1N0FDNVx1N0NGRVx1ODQ3NVx1ODk4Rlx1OEQ3M1x1OTAzNVx1OTVBOFx1NTJGQlx1NTc0N1x1NzU0N1x1N0I2MFx1ODNDQ1x1OTIxRVx1RjkwOFx1NkE1OFx1NTE0Qlx1NTI0Qlx1NTI4N1x1NjIxRlx1NjhEOFx1Njk3NVx1OTY5OVx1NTBDNVx1NTJBNFx1NTJFNFx1NjFDM1x1NjVBNFx1NjgzOVx1NjlGRlx1NzQ3RVx1N0I0Qlx1ODJCOVx1ODNFQlx1ODlCMlx1OEIzOVx1OEZEMVx1OTk0OVx1RjkwOVx1NEVDQVx1NTk5N1x1NjREMlx1NjYxMVx1NkE4RVx1NzQzNFx1Nzk4MVx1NzlCRFx1ODJBOVx1ODg3RVx1ODg3Rlx1ODk1Rlx1RjkwQVx1OTMyNlx1NEYwQlx1NTNDQVx1NjAyNVx1NjI3MVx1NkM3Mlx1N0QxQVx1N0Q2Nlx1NEU5OFx1NTE2Mlx1NzdEQ1x1ODBBRlx1NEYwMVx1NEYwRVx1NTE3Nlx1NTE4MFx1NTVEQ1x1NTY2OFx1NTczQlx1NTdGQVx1NTdGQ1x1NTkxNFx1NTk0N1x1NTk5M1x1NUJDNFx1NUM5MFx1NUQwRVx1NURGMVx1NUU3RVx1NUZDQ1x1NjI4MFx1NjVEN1x1NjVFM1wiXSxcbltcImQxYTFcIixcIlx1NjcxRVx1NjcxRlx1Njc1RVx1NjhDQlx1NjhDNFx1NkE1Rlx1NkIzQVx1NkMyM1x1NkM3RFx1NkM4Mlx1NkRDN1x1NzM5OFx1NzQyNlx1NzQyQVx1NzQ4Mlx1NzRBM1x1NzU3OFx1NzU3Rlx1Nzg4MVx1NzhFRlx1Nzk0MVx1Nzk0N1x1Nzk0OFx1Nzk3QVx1N0I5NVx1N0QwMFx1N0RCQVx1N0Y4OFx1ODAwNlx1ODAyRFx1ODA4Q1x1OEExOFx1OEI0Rlx1OEM0OFx1OEQ3N1x1OTMyMVx1OTMyNFx1OThFMlx1OTk1MVx1OUEwRVx1OUEwRlx1OUE2NVx1OUU5Mlx1N0RDQVx1NEY3Nlx1NTQwOVx1NjJFRVx1Njg1NFx1OTFEMVx1NTVBQlx1NTEzQVx1RjkwQlx1RjkwQ1x1NUExQ1x1NjFFNlx1RjkwRFx1NjJDRlx1NjJGRlx1RjkwRVwiLDUsXCJcdTkwQTNcdUY5MTRcIiw0LFwiXHU4QUZFXHVGOTE5XHVGOTFBXHVGOTFCXHVGOTFDXHU2Njk2XHVGOTFEXHU3MTU2XHVGOTFFXHVGOTFGXHU5NkUzXHVGOTIwXHU2MzRGXHU2MzdBXHU1MzU3XHVGOTIxXHU2NzhGXHU2OTYwXHU2RTczXHVGOTIyXHU3NTM3XHVGOTIzXHVGOTI0XHVGOTI1XCJdLFxuW1wiZDJhMVwiLFwiXHU3RDBEXHVGOTI2XHVGOTI3XHU4ODcyXHU1NkNBXHU1QTE4XHVGOTI4XCIsNCxcIlx1NEU0M1x1RjkyRFx1NTE2N1x1NTk0OFx1NjdGMFx1ODAxMFx1RjkyRVx1NTk3M1x1NUU3NFx1NjQ5QVx1NzlDQVx1NUZGNVx1NjA2Q1x1NjJDOFx1NjM3Qlx1NUJFN1x1NUJEN1x1NTJBQVx1RjkyRlx1NTk3NFx1NUYyOVx1NjAxMlx1RjkzMFx1RjkzMVx1RjkzMlx1NzQ1OVx1RjkzM1wiLDUsXCJcdTk5RDFcdUY5MzlcIiwxMCxcIlx1NkZDM1x1Rjk0NFx1Rjk0NVx1ODFCRlx1OEZCMlx1NjBGMVx1Rjk0Nlx1Rjk0N1x1ODE2Nlx1Rjk0OFx1Rjk0OVx1NUMzRlx1Rjk0QVwiLDcsXCJcdTVBRTlcdThBMjVcdTY3N0JcdTdEMTBcdUY5NTJcIiw1LFwiXHU4MEZEXHVGOTU4XHVGOTU5XHU1QzNDXHU2Q0U1XHU1MzNGXHU2RUJBXHU1OTFBXHU4MzM2XCJdLFxuW1wiZDNhMVwiLFwiXHU0RTM5XHU0RUI2XHU0RjQ2XHU1NUFFXHU1NzE4XHU1OEM3XHU1RjU2XHU2NUI3XHU2NUU2XHU2QTgwXHU2QkI1XHU2RTREXHU3N0VEXHU3QUVGXHU3QzFFXHU3RERFXHU4NkNCXHU4ODkyXHU5MTMyXHU5MzVCXHU2NEJCXHU2RkJFXHU3MzdBXHU3NUI4XHU5MDU0XHU1NTU2XHU1NzREXHU2MUJBXHU2NEQ0XHU2NkM3XHU2REUxXHU2RTVCXHU2RjZEXHU2RkI5XHU3NUYwXHU4MDQzXHU4MUJEXHU4NTQxXHU4OTgzXHU4QUM3XHU4QjVBXHU5MzFGXHU2QzkzXHU3NTUzXHU3QjU0XHU4RTBGXHU5MDVEXHU1NTEwXHU1ODAyXHU1ODU4XHU1RTYyXHU2MjA3XHU2NDlFXHU2OEUwXHU3NTc2XHU3Q0Q2XHU4N0IzXHU5RUU4XHU0RUUzXHU1Nzg4XHU1NzZFXHU1OTI3XHU1QzBEXHU1Q0IxXHU1RTM2XHU1Rjg1XHU2MjM0XHU2NEUxXHU3M0IzXHU4MUZBXHU4ODhCXHU4Q0I4XHU5NjhBXHU5RURCXHU1Qjg1XHU1RkI3XHU2MEIzXHU1MDEyXHU1MjAwXHU1MjMwXHU1NzE2XHU1ODM1XHU1ODU3XHU1QzBFXHU1QzYwXHU1Q0Y2XHU1RDhCXHU1RUE2XHU1RjkyXHU2MEJDXHU2MzExXHU2Mzg5XHU2NDE3XHU2ODQzXCJdLFxuW1wiZDRhMVwiLFwiXHU2OEY5XHU2QUMyXHU2REQ4XHU2RTIxXHU2RUQ0XHU2RkU0XHU3MUZFXHU3NkRDXHU3Nzc5XHU3OUIxXHU3QTNCXHU4NDA0XHU4OUE5XHU4Q0VEXHU4REYzXHU4RTQ4XHU5MDAzXHU5MDE0XHU5MDUzXHU5MEZEXHU5MzREXHU5Njc2XHU5N0RDXHU2QkQyXHU3MDA2XHU3MjU4XHU3MkEyXHU3MzY4XHU3NzYzXHU3OUJGXHU3QkU0XHU3RTlCXHU4QjgwXHU1OEE5XHU2MEM3XHU2NTY2XHU2NUZEXHU2NkJFXHU2QzhDXHU3MTFFXHU3MUM5XHU4QzVBXHU5ODEzXHU0RTZEXHU3QTgxXHU0RUREXHU1MUFDXHU1MUNEXHU1MkQ1XHU1NDBDXHU2MUE3XHU2NzcxXHU2ODUwXHU2OERGXHU2RDFFXHU2RjdDXHU3NUJDXHU3N0IzXHU3QUU1XHU4MEY0XHU4NDYzXHU5Mjg1XHU1MTVDXHU2NTk3XHU2NzVDXHU2NzkzXHU3NUQ4XHU3QUM3XHU4MzczXHVGOTVBXHU4QzQ2XHU5MDE3XHU5ODJEXHU1QzZGXHU4MUMwXHU4MjlBXHU5MDQxXHU5MDZGXHU5MjBEXHU1Rjk3XHU1RDlEXHU2QTU5XHU3MUM4XHU3NjdCXHU3QjQ5XHU4NUU0XHU4QjA0XHU5MTI3XHU5QTMwXHU1NTg3XHU2MUY2XHVGOTVCXHU3NjY5XHU3Rjg1XCJdLFxuW1wiZDVhMVwiLFwiXHU4NjNGXHU4N0JBXHU4OEY4XHU5MDhGXHVGOTVDXHU2RDFCXHU3MEQ5XHU3M0RFXHU3RDYxXHU4NDNEXHVGOTVEXHU5MTZBXHU5OUYxXHVGOTVFXHU0RTgyXHU1Mzc1XHU2QjA0XHU2QjEyXHU3MDNFXHU3MjFCXHU4NjJEXHU5RTFFXHU1MjRDXHU4RkEzXHU1RDUwXHU2NEU1XHU2NTJDXHU2QjE2XHU2RkVCXHU3QzQzXHU3RTlDXHU4NUNEXHU4OTY0XHU4OUJEXHU2MkM5XHU4MUQ4XHU4ODFGXHU1RUNBXHU2NzE3XHU2RDZBXHU3MkZDXHU3NDA1XHU3NDZGXHU4NzgyXHU5MERFXHU0Rjg2XHU1RDBEXHU1RkEwXHU4NDBBXHU1MUI3XHU2M0EwXHU3NTY1XHU0RUFFXHU1MDA2XHU1MTY5XHU1MUM5XHU2ODgxXHU2QTExXHU3Q0FFXHU3Q0IxXHU3Q0U3XHU4MjZGXHU4QUQyXHU4RjFCXHU5MUNGXHU0RkI2XHU1MTM3XHU1MkY1XHU1NDQyXHU1RUVDXHU2MTZFXHU2MjNFXHU2NUM1XHU2QURBXHU2RkZFXHU3OTJBXHU4NURDXHU4ODIzXHU5NUFEXHU5QTYyXHU5QTZBXHU5RTk3XHU5RUNFXHU1MjlCXHU2NkM2XHU2Qjc3XHU3MDFEXHU3OTJCXHU4RjYyXHU5NzQyXHU2MTkwXHU2MjAwXHU2NTIzXHU2RjIzXCJdLFxuW1wiZDZhMVwiLFwiXHU3MTQ5XHU3NDg5XHU3REY0XHU4MDZGXHU4NEVFXHU4RjI2XHU5MDIzXHU5MzRBXHU1MUJEXHU1MjE3XHU1MkEzXHU2RDBDXHU3MEM4XHU4OEMyXHU1RUM5XHU2NTgyXHU2QkFFXHU2RkMyXHU3QzNFXHU3Mzc1XHU0RUU0XHU0RjM2XHU1NkY5XHVGOTVGXHU1Q0JBXHU1REJBXHU2MDFDXHU3M0IyXHU3QjJEXHU3RjlBXHU3RkNFXHU4MDQ2XHU5MDFFXHU5MjM0XHU5NkY2XHU5NzQ4XHU5ODE4XHU5RjYxXHU0RjhCXHU2RkE3XHU3OUFFXHU5MUI0XHU5NkI3XHU1MkRFXHVGOTYwXHU2NDg4XHU2NEM0XHU2QUQzXHU2RjVFXHU3MDE4XHU3MjEwXHU3NkU3XHU4MDAxXHU4NjA2XHU4NjVDXHU4REVGXHU4RjA1XHU5NzMyXHU5QjZGXHU5REZBXHU5RTc1XHU3ODhDXHU3OTdGXHU3REEwXHU4M0M5XHU5MzA0XHU5RTdGXHU5RTkzXHU4QUQ2XHU1OERGXHU1RjA0XHU2NzI3XHU3MDI3XHU3NENGXHU3QzYwXHU4MDdFXHU1MTIxXHU3MDI4XHU3MjYyXHU3OENBXHU4Q0MyXHU4Q0RBXHU4Q0Y0XHU5NkY3XHU0RTg2XHU1MERBXHU1QkVFXHU1RUQ2XHU2NTk5XHU3MUNFXHU3NjQyXHU3N0FEXHU4MDRBXHU4NEZDXCJdLFxuW1wiZDdhMVwiLFwiXHU5MDdDXHU5QjI3XHU5RjhEXHU1OEQ4XHU1QTQxXHU1QzYyXHU2QTEzXHU2RERBXHU2RjBGXHU3NjNCXHU3RDJGXHU3RTM3XHU4NTFFXHU4OTM4XHU5M0U0XHU5NjRCXHU1Mjg5XHU2NUQyXHU2N0YzXHU2OUI0XHU2RDQxXHU2RTlDXHU3MDBGXHU3NDA5XHU3NDYwXHU3NTU5XHU3NjI0XHU3ODZCXHU4QjJDXHU5ODVFXHU1MTZEXHU2MjJFXHU5Njc4XHU0Rjk2XHU1MDJCXHU1RDE5XHU2REVBXHU3REI4XHU4RjJBXHU1RjhCXHU2MTQ0XHU2ODE3XHVGOTYxXHU5Njg2XHU1MkQyXHU4MDhCXHU1MURDXHU1MUNDXHU2OTVFXHU3QTFDXHU3REJFXHU4M0YxXHU5Njc1XHU0RkRBXHU1MjI5XHU1Mzk4XHU1NDBGXHU1NTBFXHU1QzY1XHU2MEE3XHU2NzRFXHU2OEE4XHU2RDZDXHU3MjgxXHU3MkY4XHU3NDA2XHU3NDgzXHVGOTYyXHU3NUUyXHU3QzZDXHU3Rjc5XHU3RkI4XHU4Mzg5XHU4OENGXHU4OEUxXHU5MUNDXHU5MUQwXHU5NkUyXHU5QkM5XHU1NDFEXHU2RjdFXHU3MUQwXHU3NDk4XHU4NUZBXHU4RUFBXHU5NkEzXHU5QzU3XHU5RTlGXHU2Nzk3XHU2RENCXHU3NDMzXHU4MUU4XHU5NzE2XHU3ODJDXCJdLFxuW1wiZDhhMVwiLFwiXHU3QUNCXHU3QjIwXHU3QzkyXHU2NDY5XHU3NDZBXHU3NUYyXHU3OEJDXHU3OEU4XHU5OUFDXHU5QjU0XHU5RUJCXHU1QkRFXHU1RTU1XHU2RjIwXHU4MTlDXHU4M0FCXHU5MDg4XHU0RTA3XHU1MzREXHU1QTI5XHU1REQyXHU1RjRFXHU2MTYyXHU2MzNEXHU2NjY5XHU2NkZDXHU2RUZGXHU2RjJCXHU3MDYzXHU3NzlFXHU4NDJDXHU4NTEzXHU4ODNCXHU4RjEzXHU5OTQ1XHU5QzNCXHU1NTFDXHU2MkI5XHU2NzJCXHU2Q0FCXHU4MzA5XHU4OTZBXHU5NzdBXHU0RUExXHU1OTg0XHU1RkQ4XHU1RkQ5XHU2NzFCXHU3REIyXHU3RjU0XHU4MjkyXHU4MzJCXHU4M0JEXHU4RjFFXHU5MDk5XHU1N0NCXHU1OUI5XHU1QTkyXHU1QkQwXHU2NjI3XHU2NzlBXHU2ODg1XHU2QkNGXHU3MTY0XHU3Rjc1XHU4Q0I3XHU4Q0UzXHU5MDgxXHU5QjQ1XHU4MTA4XHU4QzhBXHU5NjRDXHU5QTQwXHU5RUE1XHU1QjVGXHU2QzEzXHU3MzFCXHU3NkYyXHU3NkRGXHU4NDBDXHU1MUFBXHU4OTkzXHU1MTREXHU1MTk1XHU1MkM5XHU2OEM5XHU2Qzk0XHU3NzA0XHU3NzIwXHU3REJGXHU3REVDXHU5NzYyXHU5RUI1XHU2RUM1XCJdLFxuW1wiZDlhMVwiLFwiXHU4NTExXHU1MUE1XHU1NDBEXHU1NDdEXHU2NjBFXHU2NjlEXHU2OTI3XHU2RTlGXHU3NkJGXHU3NzkxXHU4MzE3XHU4NEMyXHU4NzlGXHU5MTY5XHU5Mjk4XHU5Q0Y0XHU4ODgyXHU0RkFFXHU1MTkyXHU1MkRGXHU1OUM2XHU1RTNEXHU2MTU1XHU2NDc4XHU2NDc5XHU2NkFFXHU2N0QwXHU2QTIxXHU2QkNEXHU2QkRCXHU3MjVGXHU3MjYxXHU3NDQxXHU3NzM4XHU3N0RCXHU4MDE3XHU4MkJDXHU4MzA1XHU4QjAwXHU4QjI4XHU4QzhDXHU2NzI4XHU2QzkwXHU3MjY3XHU3NkVFXHU3NzY2XHU3QTQ2XHU5REE5XHU2QjdGXHU2QzkyXHU1OTIyXHU2NzI2XHU4NDk5XHU1MzZGXHU1ODkzXHU1OTk5XHU1RURGXHU2M0NGXHU2NjM0XHU2NzczXHU2RTNBXHU3MzJCXHU3QUQ3XHU4MkQ3XHU5MzI4XHU1MkQ5XHU1REVCXHU2MUFFXHU2MUNCXHU2MjBBXHU2MkM3XHU2NEFCXHU2NUUwXHU2OTU5XHU2QjY2XHU2QkNCXHU3MTIxXHU3M0Y3XHU3NTVEXHU3RTQ2XHU4MjFFXHU4MzAyXHU4NTZBXHU4QUEzXHU4Q0JGXHU5NzI3XHU5RDYxXHU1OEE4XHU5RUQ4XHU1MDExXHU1MjBFXHU1NDNCXHU1NTRGXHU2NTg3XCJdLFxuW1wiZGFhMVwiLFwiXHU2Qzc2XHU3RDBBXHU3RDBCXHU4MDVFXHU4NjhBXHU5NTgwXHU5NkVGXHU1MkZGXHU2Qzk1XHU3MjY5XHU1NDczXHU1QTlBXHU1QzNFXHU1RDRCXHU1RjRDXHU1RkFFXHU2NzJBXHU2OEI2XHU2OTYzXHU2RTNDXHU2RTQ0XHU3NzA5XHU3QzczXHU3RjhFXHU4NTg3XHU4QjBFXHU4RkY3XHU5NzYxXHU5RUY0XHU1Q0I3XHU2MEI2XHU2MTBEXHU2MUFCXHU2NTRGXHU2NUZCXHU2NUZDXHU2QzExXHU2Q0VGXHU3MzlGXHU3M0M5XHU3REUxXHU5NTk0XHU1QkM2XHU4NzFDXHU4QjEwXHU1MjVEXHU1MzVBXHU2MkNEXHU2NDBGXHU2NEIyXHU2NzM0XHU2QTM4XHU2Q0NBXHU3M0MwXHU3NDlFXHU3Qjk0XHU3Qzk1XHU3RTFCXHU4MThBXHU4MjM2XHU4NTg0XHU4RkVCXHU5NkY5XHU5OUMxXHU0RjM0XHU1MzRBXHU1M0NEXHU1M0RCXHU2MkNDXHU2NDJDXHU2NTAwXHU2NTkxXHU2OUMzXHU2Q0VFXHU2RjU4XHU3M0VEXHU3NTU0XHU3NjIyXHU3NkU0XHU3NkZDXHU3OEQwXHU3OEZCXHU3OTJDXHU3RDQ2XHU4MjJDXHU4N0UwXHU4RkQ0XHU5ODEyXHU5OEVGXHU1MkMzXHU2MkQ0XHU2NEE1XHU2RTI0XHU2RjUxXCJdLFxuW1wiZGJhMVwiLFwiXHU3NjdDXHU4RENCXHU5MUIxXHU5MjYyXHU5QUVFXHU5QjQzXHU1MDIzXHU1MDhEXHU1NzRBXHU1OUE4XHU1QzI4XHU1RTQ3XHU1Rjc3XHU2MjNGXHU2NTNFXHU2NUI5XHU2NUMxXHU2NjA5XHU2NzhCXHU2OTlDXHU2RUMyXHU3OEM1XHU3RDIxXHU4MEFBXHU4MTgwXHU4MjJCXHU4MkIzXHU4NEExXHU4NjhDXHU4QTJBXHU4QjE3XHU5MEE2XHU5NjMyXHU5RjkwXHU1MDBEXHU0RkYzXHVGOTYzXHU1N0Y5XHU1Rjk4XHU2MkRDXHU2MzkyXHU2NzZGXHU2RTQzXHU3MTE5XHU3NkMzXHU4MENDXHU4MERBXHU4OEY0XHU4OEY1XHU4OTE5XHU4Q0UwXHU4RjI5XHU5MTREXHU5NjZBXHU0RjJGXHU0RjcwXHU1RTFCXHU2N0NGXHU2ODIyXHU3NjdEXHU3NjdFXHU5QjQ0XHU1RTYxXHU2QTBBXHU3MTY5XHU3MUQ0XHU3NTZBXHVGOTY0XHU3RTQxXHU4NTQzXHU4NUU5XHU5OERDXHU0RjEwXHU3QjRGXHU3RjcwXHU5NUE1XHU1MUUxXHU1RTA2XHU2OEI1XHU2QzNFXHU2QzRFXHU2Q0RCXHU3MkFGXHU3QkM0XHU4MzAzXHU2Q0Q1XHU3NDNBXHU1MEZCXHU1Mjg4XHU1OEMxXHU2NEQ4XHU2QTk3XHU3NEE3XHU3NjU2XCJdLFxuW1wiZGNhMVwiLFwiXHU3OEE3XHU4NjE3XHU5NUUyXHU5NzM5XHVGOTY1XHU1MzVFXHU1RjAxXHU4QjhBXHU4RkE4XHU4RkFGXHU5MDhBXHU1MjI1XHU3N0E1XHU5QzQ5XHU5RjA4XHU0RTE5XHU1MDAyXHU1MTc1XHU1QzVCXHU1RTc3XHU2NjFFXHU2NjNBXHU2N0M0XHU2OEM1XHU3MEIzXHU3NTAxXHU3NUM1XHU3OUM5XHU3QUREXHU4RjI3XHU5OTIwXHU5QTA4XHU0RkREXHU1ODIxXHU1ODMxXHU1QkY2XHU2NjZFXHU2QjY1XHU2RDExXHU2RTdBXHU2RjdEXHU3M0U0XHU3NTJCXHU4M0U5XHU4OERDXHU4OTEzXHU4QjVDXHU4RjE0XHU0RjBGXHU1MEQ1XHU1MzEwXHU1MzVDXHU1QjkzXHU1RkE5XHU2NzBEXHU3OThGXHU4MTc5XHU4MzJGXHU4NTE0XHU4OTA3XHU4OTg2XHU4RjM5XHU4RjNCXHU5OUE1XHU5QzEyXHU2NzJDXHU0RTc2XHU0RkY4XHU1OTQ5XHU1QzAxXHU1Q0VGXHU1Q0YwXHU2MzY3XHU2OEQyXHU3MEZEXHU3MUEyXHU3NDJCXHU3RTJCXHU4NEVDXHU4NzAyXHU5MDIyXHU5MkQyXHU5Q0YzXHU0RTBEXHU0RUQ4XHU0RkVGXHU1MDg1XHU1MjU2XHU1MjZGXHU1NDI2XHU1NDkwXHU1N0UwXHU1OTJCXHU1QTY2XCJdLFxuW1wiZGRhMVwiLFwiXHU1QjVBXHU1Qjc1XHU1QkNDXHU1RTlDXHVGOTY2XHU2Mjc2XHU2NTc3XHU2NUE3XHU2RDZFXHU2RUE1XHU3MjM2XHU3QjI2XHU3QzNGXHU3RjM2XHU4MTUwXHU4MTUxXHU4MTlBXHU4MjQwXHU4Mjk5XHU4M0E5XHU4QTAzXHU4Q0EwXHU4Q0U2XHU4Q0ZCXHU4RDc0XHU4REJBXHU5MEU4XHU5MURDXHU5NjFDXHU5NjQ0XHU5OUQ5XHU5Q0U3XHU1MzE3XHU1MjA2XHU1NDI5XHU1Njc0XHU1OEIzXHU1OTU0XHU1OTZFXHU1RkZGXHU2MUE0XHU2MjZFXHU2NjEwXHU2QzdFXHU3MTFBXHU3NkM2XHU3Qzg5XHU3Q0RFXHU3RDFCXHU4MkFDXHU4Q0MxXHU5NkYwXHVGOTY3XHU0RjVCXHU1RjE3XHU1RjdGXHU2MkMyXHU1RDI5XHU2NzBCXHU2OERBXHU3ODdDXHU3RTQzXHU5RDZDXHU0RTE1XHU1MDk5XHU1MzE1XHU1MzJBXHU1MzUxXHU1OTgzXHU1QTYyXHU1RTg3XHU2MEIyXHU2MThBXHU2MjQ5XHU2Mjc5XHU2NTkwXHU2Nzg3XHU2OUE3XHU2QkQ0XHU2QkQ2XHU2QkQ3XHU2QkQ4XHU2Q0I4XHVGOTY4XHU3NDM1XHU3NUZBXHU3ODEyXHU3ODkxXHU3OUQ1XHU3OUQ4XHU3QzgzXHU3RENCXHU3RkUxXHU4MEE1XCJdLFxuW1wiZGVhMVwiLFwiXHU4MTNFXHU4MUMyXHU4M0YyXHU4NzFBXHU4OEU4XHU4QUI5XHU4QjZDXHU4Q0JCXHU5MTE5XHU5NzVFXHU5OERCXHU5RjNCXHU1NkFDXHU1QjJBXHU1RjZDXHU2NThDXHU2QUIzXHU2QkFGXHU2RDVDXHU2RkYxXHU3MDE1XHU3MjVEXHU3M0FEXHU4Q0E3XHU4Q0QzXHU5ODNCXHU2MTkxXHU2QzM3XHU4MDU4XHU5QTAxXHU0RTREXHU0RThCXHU0RTlCXHU0RUQ1XHU0RjNBXHU0RjNDXHU0RjdGXHU0RkRGXHU1MEZGXHU1M0YyXHU1M0Y4XHU1NTA2XHU1NUUzXHU1NkRCXHU1OEVCXHU1OTYyXHU1QTExXHU1QkVCXHU1QkZBXHU1QzA0XHU1REYzXHU1RTJCXHU1Rjk5XHU2MDFEXHU2MzY4XHU2NTlDXHU2NUFGXHU2N0Y2XHU2N0ZCXHU2OEFEXHU2QjdCXHU2Qzk5XHU2Q0Q3XHU2RTIzXHU3MDA5XHU3MzQ1XHU3ODAyXHU3OTNFXHU3OTQwXHU3OTYwXHU3OUMxXHU3QkU5XHU3RDE3XHU3RDcyXHU4MDg2XHU4MjBEXHU4MzhFXHU4NEQxXHU4NkM3XHU4OERGXHU4QTUwXHU4QTVFXHU4QjFEXHU4Q0RDXHU4RDY2XHU4RkFEXHU5MEFBXHU5OEZDXHU5OURGXHU5RTlEXHU1MjRBXHVGOTY5XHU2NzE0XHVGOTZBXCJdLFxuW1wiZGZhMVwiLFwiXHU1MDk4XHU1MjJBXHU1QzcxXHU2NTYzXHU2QzU1XHU3M0NBXHU3NTIzXHU3NTlEXHU3Qjk3XHU4NDlDXHU5MTc4XHU5NzMwXHU0RTc3XHU2NDkyXHU2QkJBXHU3MTVFXHU4NUE5XHU0RTA5XHVGOTZCXHU2NzQ5XHU2OEVFXHU2RTE3XHU4MjlGXHU4NTE4XHU4ODZCXHU2M0Y3XHU2RjgxXHU5MjEyXHU5OEFGXHU0RTBBXHU1MEI3XHU1MENGXHU1MTFGXHU1NTQ2XHU1NUFBXHU1NjE3XHU1QjQwXHU1QzE5XHU1Q0UwXHU1RTM4XHU1RThBXHU1RUEwXHU1RUMyXHU2MEYzXHU2ODUxXHU2QTYxXHU2RTU4XHU3MjNEXHU3MjQwXHU3MkMwXHU3NkY4XHU3OTY1XHU3QkIxXHU3RkQ0XHU4OEYzXHU4OUY0XHU4QTczXHU4QzYxXHU4Q0RFXHU5NzFDXHU1ODVFXHU3NEJEXHU4Q0ZEXHU1NUM3XHVGOTZDXHU3QTYxXHU3RDIyXHU4MjcyXHU3MjcyXHU3NTFGXHU3NTI1XHVGOTZEXHU3QjE5XHU1ODg1XHU1OEZCXHU1REJDXHU1RThGXHU1RUI2XHU1RjkwXHU2MDU1XHU2MjkyXHU2MzdGXHU2NTREXHU2NjkxXHU2NkQ5XHU2NkY4XHU2ODE2XHU2OEYyXHU3MjgwXHU3NDVFXHU3QjZFXHU3RDZFXHU3REQ2XHU3RjcyXCJdLFxuW1wiZTBhMVwiLFwiXHU4MEU1XHU4MjEyXHU4NUFGXHU4OTdGXHU4QTkzXHU5MDFEXHU5MkU0XHU5RUNEXHU5RjIwXHU1OTE1XHU1OTZEXHU1RTJEXHU2MERDXHU2NjE0XHU2NjczXHU2NzkwXHU2QzUwXHU2REM1XHU2RjVGXHU3N0YzXHU3OEE5XHU4NEM2XHU5MUNCXHU5MzJCXHU0RUQ5XHU1MENBXHU1MTQ4XHU1NTg0XHU1QjBCXHU1QkEzXHU2MjQ3XHU2NTdFXHU2NUNCXHU2RTMyXHU3MTdEXHU3NDAxXHU3NDQ0XHU3NDg3XHU3NEJGXHU3NjZDXHU3OUFBXHU3RERBXHU3RTU1XHU3RkE4XHU4MTdBXHU4MUIzXHU4MjM5XHU4NjFBXHU4N0VDXHU4QTc1XHU4REUzXHU5MDc4XHU5MjkxXHU5NDI1XHU5OTREXHU5QkFFXHU1MzY4XHU1QzUxXHU2OTU0XHU2Q0M0XHU2RDI5XHU2RTJCXHU4MjBDXHU4NTlCXHU4OTNCXHU4QTJEXHU4QUFBXHU5NkVBXHU5RjY3XHU1MjYxXHU2NkI5XHU2QkIyXHU3RTk2XHU4N0ZFXHU4RDBEXHU5NTgzXHU5NjVEXHU2NTFEXHU2RDg5XHU3MUVFXHVGOTZFXHU1N0NFXHU1OUQzXHU1QkFDXHU2MDI3XHU2MEZBXHU2MjEwXHU2NjFGXHU2NjVGXHU3MzI5XHU3M0Y5XHU3NkRCXHU3NzAxXHU3QjZDXCJdLFxuW1wiZTFhMVwiLFwiXHU4MDU2XHU4MDcyXHU4MTY1XHU4QUEwXHU5MTkyXHU0RTE2XHU1MkUyXHU2QjcyXHU2RDE3XHU3QTA1XHU3QjM5XHU3RDMwXHVGOTZGXHU4Q0IwXHU1M0VDXHU1NjJGXHU1ODUxXHU1QkI1XHU1QzBGXHU1QzExXHU1REUyXHU2MjQwXHU2MzgzXHU2NDE0XHU2NjJEXHU2OEIzXHU2Q0JDXHU2RDg4XHU2RUFGXHU3MDFGXHU3MEE0XHU3MUQyXHU3NTI2XHU3NThGXHU3NThFXHU3NjE5XHU3QjExXHU3QkUwXHU3QzJCXHU3RDIwXHU3RDM5XHU4NTJDXHU4NTZEXHU4NjA3XHU4QTM0XHU5MDBEXHU5MDYxXHU5MEI1XHU5MkI3XHU5N0Y2XHU5QTM3XHU0RkQ3XHU1QzZDXHU2NzVGXHU2RDkxXHU3QzlGXHU3RThDXHU4QjE2XHU4RDE2XHU5MDFGXHU1QjZCXHU1REZEXHU2NDBEXHU4NEMwXHU5MDVDXHU5OEUxXHU3Mzg3XHU1QjhCXHU2MDlBXHU2NzdFXHU2RERFXHU4QTFGXHU4QUE2XHU5MDAxXHU5ODBDXHU1MjM3XHVGOTcwXHU3MDUxXHU3ODhFXHU5Mzk2XHU4ODcwXHU5MUQ3XHU0RkVFXHU1M0Q3XHU1NUZEXHU1NkRBXHU1NzgyXHU1OEZEXHU1QUMyXHU1Qjg4XHU1Q0FCXHU1Q0MwXHU1RTI1XHU2MTAxXCJdLFxuW1wiZTJhMVwiLFwiXHU2MjBEXHU2MjRCXHU2Mzg4XHU2NDFDXHU2NTM2XHU2NTc4XHU2QTM5XHU2QjhBXHU2QzM0XHU2RDE5XHU2RjMxXHU3MUU3XHU3MkU5XHU3Mzc4XHU3NDA3XHU3NEIyXHU3NjI2XHU3NzYxXHU3OUMwXHU3QTU3XHU3QUVBXHU3Q0I5XHU3RDhGXHU3REFDXHU3RTYxXHU3RjlFXHU4MTI5XHU4MzMxXHU4NDkwXHU4NERBXHU4NUVBXHU4ODk2XHU4QUIwXHU4QjkwXHU4RjM4XHU5MDQyXHU5MDgzXHU5MTZDXHU5Mjk2XHU5MkI5XHU5NjhCXHU5NkE3XHU5NkE4XHU5NkQ2XHU5NzAwXHU5ODA4XHU5OTk2XHU5QUQzXHU5QjFBXHU1M0Q0XHU1ODdFXHU1OTE5XHU1QjcwXHU1QkJGXHU2REQxXHU2RjVBXHU3MTlGXHU3NDIxXHU3NEI5XHU4MDg1XHU4M0ZEXHU1REUxXHU1Rjg3XHU1RkFBXHU2MDQyXHU2NUVDXHU2ODEyXHU2OTZGXHU2QTUzXHU2Qjg5XHU2RDM1XHU2REYzXHU3M0UzXHU3NkZFXHU3N0FDXHU3QjREXHU3RDE0XHU4MTIzXHU4MjFDXHU4MzQwXHU4NEY0XHU4NTYzXHU4QTYyXHU4QUM0XHU5MTg3XHU5MzFFXHU5ODA2XHU5OUI0XHU2MjBDXHU4ODUzXHU4RkYwXHU5MjY1XHU1RDA3XHU1RDI3XCJdLFxuW1wiZTNhMVwiLFwiXHU1RDY5XHU3NDVGXHU4MTlEXHU4NzY4XHU2RkQ1XHU2MkZFXHU3RkQyXHU4OTM2XHU4OTcyXHU0RTFFXHU0RTU4XHU1MEU3XHU1MkREXHU1MzQ3XHU2MjdGXHU2NjA3XHU3RTY5XHU4ODA1XHU5NjVFXHU0RjhEXHU1MzE5XHU1NjM2XHU1OUNCXHU1QUE0XHU1QzM4XHU1QzRFXHU1QzREXHU1RTAyXHU1RjExXHU2MDQzXHU2NUJEXHU2NjJGXHU2NjQyXHU2N0JFXHU2N0Y0XHU3MzFDXHU3N0UyXHU3OTNBXHU3RkM1XHU4NDk0XHU4NENEXHU4OTk2XHU4QTY2XHU4QTY5XHU4QUUxXHU4QzU1XHU4QzdBXHU1N0Y0XHU1QkQ0XHU1RjBGXHU2MDZGXHU2MkVEXHU2OTBEXHU2Qjk2XHU2RTVDXHU3MTg0XHU3QkQyXHU4NzU1XHU4QjU4XHU4RUZFXHU5OERGXHU5OEZFXHU0RjM4XHU0RjgxXHU0RkUxXHU1NDdCXHU1QTIwXHU1QkI4XHU2MTNDXHU2NUIwXHU2NjY4XHU3MUZDXHU3NTMzXHU3OTVFXHU3RDMzXHU4MTRFXHU4MUUzXHU4Mzk4XHU4NUFBXHU4NUNFXHU4NzAzXHU4QTBBXHU4RUFCXHU4RjlCXHVGOTcxXHU4RkM1XHU1OTMxXHU1QkE0XHU1QkU2XHU2MDg5XHU1QkU5XHU1QzBCXHU1RkMzXHU2QzgxXCJdLFxuW1wiZTRhMVwiLFwiXHVGOTcyXHU2REYxXHU3MDBCXHU3NTFBXHU4MkFGXHU4QUY2XHU0RUMwXHU1MzQxXHVGOTczXHU5NkQ5XHU2QzBGXHU0RTlFXHU0RkM0XHU1MTUyXHU1NTVFXHU1QTI1XHU1Q0U4XHU2MjExXHU3MjU5XHU4MkJEXHU4M0FBXHU4NkZFXHU4ODU5XHU4QTFEXHU5NjNGXHU5NkM1XHU5OTEzXHU5RDA5XHU5RDVEXHU1ODBBXHU1Q0IzXHU1REJEXHU1RTQ0XHU2MEUxXHU2MTE1XHU2M0UxXHU2QTAyXHU2RTI1XHU5MTAyXHU5MzU0XHU5ODRFXHU5QzEwXHU5Rjc3XHU1Qjg5XHU1Q0I4XHU2MzA5XHU2NjRGXHU2ODQ4XHU3NzNDXHU5NkMxXHU5NzhEXHU5ODU0XHU5QjlGXHU2NUExXHU4QjAxXHU4RUNCXHU5NUJDXHU1NTM1XHU1Q0E5XHU1REQ2XHU1RUI1XHU2Njk3XHU3NjRDXHU4M0Y0XHU5NUM3XHU1OEQzXHU2MkJDXHU3MkNFXHU5RDI4XHU0RUYwXHU1OTJFXHU2MDBGXHU2NjNCXHU2QjgzXHU3OUU3XHU5RDI2XHU1MzkzXHU1NEMwXHU1N0MzXHU1RDE2XHU2MTFCXHU2NkQ2XHU2REFGXHU3ODhEXHU4MjdFXHU5Njk4XHU5NzQ0XHU1Mzg0XHU2MjdDXHU2Mzk2XHU2REIyXHU3RTBBXHU4MTRCXHU5ODREXCJdLFxuW1wiZTVhMVwiLFwiXHU2QUZCXHU3RjRDXHU5REFGXHU5RTFBXHU0RTVGXHU1MDNCXHU1MUI2XHU1OTFDXHU2MEY5XHU2M0Y2XHU2OTMwXHU3MjNBXHU4MDM2XHVGOTc0XHU5MUNFXHU1RjMxXHVGOTc1XHVGOTc2XHU3RDA0XHU4MkU1XHU4NDZGXHU4NEJCXHU4NUU1XHU4RThEXHVGOTc3XHU0RjZGXHVGOTc4XHVGOTc5XHU1OEU0XHU1QjQzXHU2MDU5XHU2M0RBXHU2NTE4XHU2NTZEXHU2Njk4XHVGOTdBXHU2OTRBXHU2QTIzXHU2RDBCXHU3MDAxXHU3MTZDXHU3NUQyXHU3NjBEXHU3OUIzXHU3QTcwXHVGOTdCXHU3RjhBXHVGOTdDXHU4OTQ0XHVGOTdEXHU4QjkzXHU5MUMwXHU5NjdEXHVGOTdFXHU5OTBBXHU1NzA0XHU1RkExXHU2NUJDXHU2RjAxXHU3NjAwXHU3OUE2XHU4QTlFXHU5OUFEXHU5QjVBXHU5RjZDXHU1MTA0XHU2MUI2XHU2MjkxXHU2QThEXHU4MUM2XHU1MDQzXHU1ODMwXHU1RjY2XHU3MTA5XHU4QTAwXHU4QUZBXHU1QjdDXHU4NjE2XHU0RkZBXHU1MTNDXHU1NkI0XHU1OTQ0XHU2M0E5XHU2REY5XHU1REFBXHU2OTZEXHU1MTg2XHU0RTg4XHU0RjU5XHVGOTdGXHVGOTgwXHVGOTgxXHU1OTgyXHVGOTgyXCJdLFxuW1wiZTZhMVwiLFwiXHVGOTgzXHU2QjVGXHU2QzVEXHVGOTg0XHU3NEI1XHU3OTE2XHVGOTg1XHU4MjA3XHU4MjQ1XHU4MzM5XHU4RjNGXHU4RjVEXHVGOTg2XHU5OTE4XHVGOTg3XHVGOTg4XHVGOTg5XHU0RUE2XHVGOThBXHU1N0RGXHU1Rjc5XHU2NjEzXHVGOThCXHVGOThDXHU3NUFCXHU3RTc5XHU4QjZGXHVGOThEXHU5MDA2XHU5QTVCXHU1NkE1XHU1ODI3XHU1OUY4XHU1QTFGXHU1QkI0XHVGOThFXHU1RUY2XHVGOThGXHVGOTkwXHU2MzUwXHU2MzNCXHVGOTkxXHU2OTNEXHU2Qzg3XHU2Q0JGXHU2RDhFXHU2RDkzXHU2REY1XHU2RjE0XHVGOTkyXHU3MERGXHU3MTM2XHU3MTU5XHVGOTkzXHU3MUMzXHU3MUQ1XHVGOTk0XHU3ODRGXHU3ODZGXHVGOTk1XHU3Qjc1XHU3REUzXHVGOTk2XHU3RTJGXHVGOTk3XHU4ODREXHU4RURGXHVGOTk4XHVGOTk5XHVGOTlBXHU5MjVCXHVGOTlCXHU5Q0Y2XHVGOTlDXHVGOTlEXHVGOTlFXHU2MDg1XHU2RDg1XHVGOTlGXHU3MUIxXHVGOUEwXHVGOUExXHU5NUIxXHU1M0FEXHVGOUEyXHVGOUEzXHVGOUE0XHU2N0QzXHVGOUE1XHU3MDhFXHU3MTMwXHU3NDMwXHU4Mjc2XHU4MkQyXCJdLFxuW1wiZTdhMVwiLFwiXHVGOUE2XHU5NUJCXHU5QUU1XHU5RTdEXHU2NkM0XHVGOUE3XHU3MUMxXHU4NDQ5XHVGOUE4XHVGOUE5XHU1ODRCXHVGOUFBXHVGOUFCXHU1REI4XHU1RjcxXHVGOUFDXHU2NjIwXHU2NjhFXHU2OTc5XHU2OUFFXHU2QzM4XHU2Q0YzXHU2RTM2XHU2RjQxXHU2RkRBXHU3MDFCXHU3MDJGXHU3MTUwXHU3MURGXHU3MzcwXHVGOUFEXHU3NDVCXHVGOUFFXHU3NEQ0XHU3NkM4XHU3QTRFXHU3RTkzXHVGOUFGXHVGOUIwXHU4MkYxXHU4QTYwXHU4RkNFXHVGOUIxXHU5MzQ4XHVGOUIyXHU5NzE5XHVGOUIzXHVGOUI0XHU0RTQyXHU1MDJBXHVGOUI1XHU1MjA4XHU1M0UxXHU2NkYzXHU2QzZEXHU2RkNBXHU3MzBBXHU3NzdGXHU3QTYyXHU4MkFFXHU4NUREXHU4NjAyXHVGOUI2XHU4OEQ0XHU4QTYzXHU4QjdEXHU4QzZCXHVGOUI3XHU5MkIzXHVGOUI4XHU5NzEzXHU5ODEwXHU0RTk0XHU0RjBEXHU0RkM5XHU1MEIyXHU1MzQ4XHU1NDNFXHU1NDMzXHU1NURBXHU1ODYyXHU1OEJBXHU1OTY3XHU1QTFCXHU1QkU0XHU2MDlGXHVGOUI5XHU2MUNBXHU2NTU2XHU2NUZGXHU2NjY0XHU2OEE3XHU2QzVBXHU2RkIzXCJdLFxuW1wiZThhMVwiLFwiXHU3MENGXHU3MUFDXHU3MzUyXHU3QjdEXHU4NzA4XHU4QUE0XHU5QzMyXHU5RjA3XHU1QzRCXHU2QzgzXHU3MzQ0XHU3Mzg5XHU5MjNBXHU2RUFCXHU3NDY1XHU3NjFGXHU3QTY5XHU3RTE1XHU4NjBBXHU1MTQwXHU1OEM1XHU2NEMxXHU3NEVFXHU3NTE1XHU3NjcwXHU3RkMxXHU5MDk1XHU5NkNEXHU5OTU0XHU2RTI2XHU3NEU2XHU3QUE5XHU3QUFBXHU4MUU1XHU4NkQ5XHU4Nzc4XHU4QTFCXHU1QTQ5XHU1QjhDXHU1QjlCXHU2OEExXHU2OTAwXHU2RDYzXHU3M0E5XHU3NDEzXHU3NDJDXHU3ODk3XHU3REU5XHU3RkVCXHU4MTE4XHU4MTU1XHU4MzlFXHU4QzRDXHU5NjJFXHU5ODExXHU2NkYwXHU1RjgwXHU2NUZBXHU2Nzg5XHU2QzZBXHU3MzhCXHU1MDJEXHU1QTAzXHU2QjZBXHU3N0VFXHU1OTE2XHU1RDZDXHU1RENEXHU3MzI1XHU3NTRGXHVGOUJBXHVGOUJCXHU1MEU1XHU1MUY5XHU1ODJGXHU1OTJEXHU1OTk2XHU1OURBXHU1QkU1XHVGOUJDXHVGOUJEXHU1REEyXHU2MkQ3XHU2NDE2XHU2NDkzXHU2NEZFXHVGOUJFXHU2NkRDXHVGOUJGXHU2QTQ4XHVGOUMwXHU3MUZGXHU3NDY0XHVGOUMxXCJdLFxuW1wiZTlhMVwiLFwiXHU3QTg4XHU3QUFGXHU3RTQ3XHU3RTVFXHU4MDAwXHU4MTcwXHVGOUMyXHU4N0VGXHU4OTgxXHU4QjIwXHU5MDU5XHVGOUMzXHU5MDgwXHU5OTUyXHU2MTdFXHU2QjMyXHU2RDc0XHU3RTFGXHU4OTI1XHU4RkIxXHU0RkQxXHU1MEFEXHU1MTk3XHU1MkM3XHU1N0M3XHU1ODg5XHU1QkI5XHU1RUI4XHU2MTQyXHU2OTk1XHU2RDhDXHU2RTY3XHU2RUI2XHU3MTk0XHU3NDYyXHU3NTI4XHU3NTJDXHU4MDczXHU4MzM4XHU4NEM5XHU4RTBBXHU5Mzk0XHU5M0RFXHVGOUM0XHU0RThFXHU0RjUxXHU1MDc2XHU1MTJBXHU1M0M4XHU1M0NCXHU1M0YzXHU1Qjg3XHU1QkQzXHU1QzI0XHU2MTFBXHU2MTgyXHU2NUY0XHU3MjVCXHU3Mzk3XHU3NDQwXHU3NkMyXHU3OTUwXHU3OTkxXHU3OUI5XHU3RDA2XHU3RkJEXHU4MjhCXHU4NUQ1XHU4NjVFXHU4RkMyXHU5MDQ3XHU5MEY1XHU5MUVBXHU5Njg1XHU5NkU4XHU5NkU5XHU1MkQ2XHU1RjY3XHU2NUVEXHU2NjMxXHU2ODJGXHU3MTVDXHU3QTM2XHU5MEMxXHU5ODBBXHU0RTkxXHVGOUM1XHU2QTUyXHU2QjlFXHU2RjkwXHU3MTg5XHU4MDE4XHU4MkI4XHU4NTUzXCJdLFxuW1wiZWFhMVwiLFwiXHU5MDRCXHU5Njk1XHU5NkYyXHU5N0ZCXHU4NTFBXHU5QjMxXHU0RTkwXHU3MThBXHU5NkM0XHU1MTQzXHU1MzlGXHU1NEUxXHU1NzEzXHU1NzEyXHU1N0EzXHU1QTlCXHU1QUM0XHU1QkMzXHU2MDI4XHU2MTNGXHU2M0Y0XHU2Qzg1XHU2RDM5XHU2RTcyXHU2RTkwXHU3MjMwXHU3MzNGXHU3NDU3XHU4MkQxXHU4ODgxXHU4RjQ1XHU5MDYwXHVGOUM2XHU5NjYyXHU5ODU4XHU5RDFCXHU2NzA4XHU4RDhBXHU5MjVFXHU0RjREXHU1MDQ5XHU1MERFXHU1MzcxXHU1NzBEXHU1OUQ0XHU1QTAxXHU1QzA5XHU2MTcwXHU2NjkwXHU2RTJEXHU3MjMyXHU3NDRCXHU3REVGXHU4MEMzXHU4NDBFXHU4NDY2XHU4NTNGXHU4NzVGXHU4ODVCXHU4OTE4XHU4QjAyXHU5MDU1XHU5N0NCXHU5QjRGXHU0RTczXHU0RjkxXHU1MTEyXHU1MTZBXHVGOUM3XHU1NTJGXHU1NUE5XHU1QjdBXHU1QkE1XHU1RTdDXHU1RTdEXHU1RUJFXHU2MEEwXHU2MERGXHU2MTA4XHU2MTA5XHU2M0M0XHU2NTM4XHU2NzA5XHVGOUM4XHU2N0Q0XHU2N0RBXHVGOUM5XHU2OTYxXHU2OTYyXHU2Q0I5XHU2RDI3XHVGOUNBXHU2RTM4XHVGOUNCXCJdLFxuW1wiZWJhMVwiLFwiXHU2RkUxXHU3MzM2XHU3MzM3XHVGOUNDXHU3NDVDXHU3NTMxXHVGOUNEXHU3NjUyXHVGOUNFXHVGOUNGXHU3REFEXHU4MUZFXHU4NDM4XHU4OEQ1XHU4QTk4XHU4QURCXHU4QUVEXHU4RTMwXHU4RTQyXHU5MDRBXHU5MDNFXHU5MDdBXHU5MTQ5XHU5MUM5XHU5MzZFXHVGOUQwXHVGOUQxXHU1ODA5XHVGOUQyXHU2QkQzXHU4MDg5XHU4MEIyXHVGOUQzXHVGOUQ0XHU1MTQxXHU1OTZCXHU1QzM5XHVGOUQ1XHVGOUQ2XHU2RjY0XHU3M0E3XHU4MEU0XHU4RDA3XHVGOUQ3XHU5MjE3XHU5NThGXHVGOUQ4XHVGOUQ5XHVGOURBXHVGOURCXHU4MDdGXHU2MjBFXHU3MDFDXHU3RDY4XHU4NzhEXHVGOURDXHU1N0EwXHU2MDY5XHU2MTQ3XHU2QkI3XHU4QUJFXHU5MjgwXHU5NkIxXHU0RTU5XHU1NDFGXHU2REVCXHU4NTJEXHU5NjcwXHU5N0YzXHU5OEVFXHU2M0Q2XHU2Q0UzXHU5MDkxXHU1MUREXHU2MUM5XHU4MUJBXHU5REY5XHU0RjlEXHU1MDFBXHU1MTAwXHU1QjlDXHU2MTBGXHU2MUZGXHU2NEVDXHU2OTA1XHU2QkM1XHU3NTkxXHU3N0UzXHU3RkE5XHU4MjY0XHU4NThGXHU4N0ZCXHU4ODYzXHU4QUJDXCJdLFxuW1wiZWNhMVwiLFwiXHU4QjcwXHU5MUFCXHU0RThDXHU0RUU1XHU0RjBBXHVGOUREXHVGOURFXHU1OTM3XHU1OUU4XHVGOURGXHU1REYyXHU1RjFCXHU1RjVCXHU2MDIxXHVGOUUwXHVGOUUxXHVGOUUyXHVGOUUzXHU3MjNFXHU3M0U1XHVGOUU0XHU3NTcwXHU3NUNEXHVGOUU1XHU3OUZCXHVGOUU2XHU4MDBDXHU4MDMzXHU4MDg0XHU4MkUxXHU4MzUxXHVGOUU3XHVGOUU4XHU4Q0JEXHU4Q0IzXHU5MDg3XHVGOUU5XHVGOUVBXHU5OEY0XHU5OTBDXHVGOUVCXHVGOUVDXHU3MDM3XHU3NkNBXHU3RkNBXHU3RkNDXHU3RkZDXHU4QjFBXHU0RUJBXHU0RUMxXHU1MjAzXHU1MzcwXHVGOUVEXHU1NEJEXHU1NkUwXHU1OUZCXHU1QkM1XHU1RjE1XHU1RkNEXHU2RTZFXHVGOUVFXHVGOUVGXHU3RDZBXHU4MzM1XHVGOUYwXHU4NjkzXHU4QThEXHVGOUYxXHU5NzZEXHU5Nzc3XHVGOUYyXHVGOUYzXHU0RTAwXHU0RjVBXHU0RjdFXHU1OEY5XHU2NUU1XHU2RUEyXHU5MDM4XHU5M0IwXHU5OUI5XHU0RUZCXHU1OEVDXHU1OThBXHU1OUQ5XHU2MDQxXHVGOUY0XHVGOUY1XHU3QTE0XHVGOUY2XHU4MzRGXHU4Q0MzXHU1MTY1XHU1MzQ0XCJdLFxuW1wiZWRhMVwiLFwiXHVGOUY3XHVGOUY4XHVGOUY5XHU0RUNEXHU1MjY5XHU1QjU1XHU4MkJGXHU0RUQ0XHU1MjNBXHU1NEE4XHU1OUM5XHU1OUZGXHU1QjUwXHU1QjU3XHU1QjVDXHU2MDYzXHU2MTQ4XHU2RUNCXHU3MDk5XHU3MTZFXHU3Mzg2XHU3NEY3XHU3NUI1XHU3OEMxXHU3RDJCXHU4MDA1XHU4MUVBXHU4MzI4XHU4NTE3XHU4NUM5XHU4QUVFXHU4Q0M3XHU5NkNDXHU0RjVDXHU1MkZBXHU1NkJDXHU2NUFCXHU2NjI4XHU3MDdDXHU3MEI4XHU3MjM1XHU3REJEXHU4MjhEXHU5MTRDXHU5NkMwXHU5RDcyXHU1QjcxXHU2OEU3XHU2Qjk4XHU2RjdBXHU3NkRFXHU1QzkxXHU2NkFCXHU2RjVCXHU3QkI0XHU3QzJBXHU4ODM2XHU5NkRDXHU0RTA4XHU0RUQ3XHU1MzIwXHU1ODM0XHU1OEJCXHU1OEVGXHU1OTZDXHU1QzA3XHU1RTMzXHU1RTg0XHU1RjM1XHU2MzhDXHU2NkIyXHU2NzU2XHU2QTFGXHU2QUEzXHU2QjBDXHU2RjNGXHU3MjQ2XHVGOUZBXHU3MzUwXHU3NDhCXHU3QUUwXHU3Q0E3XHU4MTc4XHU4MURGXHU4MUU3XHU4MzhBXHU4NDZDXHU4NTIzXHU4NTk0XHU4NUNGXHU4OEREXHU4RDEzXHU5MUFDXHU5NTc3XCJdLFxuW1wiZWVhMVwiLFwiXHU5NjlDXHU1MThEXHU1NEM5XHU1NzI4XHU1QkIwXHU2MjREXHU2NzUwXHU2ODNEXHU2ODkzXHU2RTNEXHU2RUQzXHU3MDdEXHU3RTIxXHU4OEMxXHU4Q0ExXHU4RjA5XHU5RjRCXHU5RjRFXHU3MjJEXHU3QjhGXHU4QUNEXHU5MzFBXHU0RjQ3XHU0RjRFXHU1MTMyXHU1NDgwXHU1OUQwXHU1RTk1XHU2MkI1XHU2Nzc1XHU2OTZFXHU2QTE3XHU2Q0FFXHU2RTFBXHU3MkQ5XHU3MzJBXHU3NUJEXHU3QkI4XHU3RDM1XHU4MkU3XHU4M0Y5XHU4NDU3XHU4NUY3XHU4QTVCXHU4Q0FGXHU4RTg3XHU5MDE5XHU5MEI4XHU5NkNFXHU5RjVGXHU1MkUzXHU1NDBBXHU1QUUxXHU1QkMyXHU2NDU4XHU2NTc1XHU2RUY0XHU3MkM0XHVGOUZCXHU3Njg0XHU3QTREXHU3QjFCXHU3QzREXHU3RTNFXHU3RkRGXHU4MzdCXHU4QjJCXHU4Q0NBXHU4RDY0XHU4REUxXHU4RTVGXHU4RkVBXHU4RkY5XHU5MDY5XHU5M0QxXHU0RjQzXHU0RjdBXHU1MEIzXHU1MTY4XHU1MTc4XHU1MjREXHU1MjZBXHU1ODYxXHU1ODdDXHU1OTYwXHU1QzA4XHU1QzU1XHU1RURCXHU2MDlCXHU2MjMwXHU2ODEzXHU2QkJGXHU2QzA4XHU2RkIxXCJdLFxuW1wiZWZhMVwiLFwiXHU3MTRFXHU3NDIwXHU3NTMwXHU3NTM4XHU3NTUxXHU3NjcyXHU3QjRDXHU3QjhCXHU3QkFEXHU3QkM2XHU3RThGXHU4QTZFXHU4RjNFXHU4RjQ5XHU5MjNGXHU5MjkzXHU5MzIyXHU5NDJCXHU5NkZCXHU5ODVBXHU5ODZCXHU5OTFFXHU1MjA3XHU2MjJBXHU2Mjk4XHU2RDU5XHU3NjY0XHU3QUNBXHU3QkMwXHU3RDc2XHU1MzYwXHU1Q0JFXHU1RTk3XHU2RjM4XHU3MEI5XHU3Qzk4XHU5NzExXHU5QjhFXHU5RURFXHU2M0E1XHU2NDdBXHU4Nzc2XHU0RTAxXHU0RTk1XHU0RUFEXHU1MDVDXHU1MDc1XHU1NDQ4XHU1OUMzXHU1QjlBXHU1RTQwXHU1RUFEXHU1RUY3XHU1RjgxXHU2MEM1XHU2MzNBXHU2NTNGXHU2NTc0XHU2NUNDXHU2Njc2XHU2Njc4XHU2N0ZFXHU2OTY4XHU2QTg5XHU2QjYzXHU2QzQwXHU2REMwXHU2REU4XHU2RTFGXHU2RTVFXHU3MDFFXHU3MEExXHU3MzhFXHU3M0ZEXHU3NTNBXHU3NzVCXHU3ODg3XHU3OThFXHU3QTBCXHU3QTdEXHU3Q0JFXHU3RDhFXHU4MjQ3XHU4QTAyXHU4QUVBXHU4QzlFXHU5MTJEXHU5MTRBXHU5MUQ4XHU5MjY2XHU5MkNDXHU5MzIwXHU5NzA2XHU5NzU2XCJdLFxuW1wiZjBhMVwiLFwiXHU5NzVDXHU5ODAyXHU5RjBFXHU1MjM2XHU1MjkxXHU1NTdDXHU1ODI0XHU1RTFEXHU1RjFGXHU2MDhDXHU2M0QwXHU2OEFGXHU2RkRGXHU3OTZEXHU3QjJDXHU4MUNEXHU4NUJBXHU4OEZEXHU4QUY4XHU4RTQ0XHU5MThEXHU5NjY0XHU5NjlCXHU5NzNEXHU5ODRDXHU5RjRBXHU0RkNFXHU1MTQ2XHU1MUNCXHU1MkE5XHU1NjMyXHU1RjE0XHU1RjZCXHU2M0FBXHU2NENEXHU2NUU5XHU2NjQxXHU2NkZBXHU2NkY5XHU2NzFEXHU2ODlEXHU2OEQ3XHU2OUZEXHU2RjE1XHU2RjZFXHU3MTY3XHU3MUU1XHU3MjJBXHU3NEFBXHU3NzNBXHU3OTU2XHU3OTVBXHU3OURGXHU3QTIwXHU3QTk1XHU3Qzk3XHU3Q0RGXHU3RDQ0XHU3RTcwXHU4MDg3XHU4NUZCXHU4NkE0XHU4QTU0XHU4QUJGXHU4RDk5XHU4RTgxXHU5MDIwXHU5MDZEXHU5MUUzXHU5NjNCXHU5NkQ1XHU5Q0U1XHU2NUNGXHU3QzA3XHU4REIzXHU5M0MzXHU1QjU4XHU1QzBBXHU1MzUyXHU2MkQ5XHU3MzFEXHU1MDI3XHU1Qjk3XHU1RjlFXHU2MEIwXHU2MTZCXHU2OEQ1XHU2REQ5XHU3NDJFXHU3QTJFXHU3RDQyXHU3RDlDXHU3RTMxXHU4MTZCXCJdLFxuW1wiZjFhMVwiLFwiXHU4RTJBXHU4RTM1XHU5MzdFXHU5NDE4XHU0RjUwXHU1NzUwXHU1REU2XHU1RUE3XHU2MzJCXHU3RjZBXHU0RTNCXHU0RjRGXHU0RjhGXHU1MDVBXHU1OUREXHU4MEM0XHU1NDZBXHU1NDY4XHU1NUZFXHU1OTRGXHU1Qjk5XHU1RERFXHU1RURBXHU2NjVEXHU2NzMxXHU2N0YxXHU2ODJBXHU2Q0U4XHU2RDMyXHU2RTRBXHU2RjhEXHU3MEI3XHU3M0UwXHU3NTg3XHU3QzRDXHU3RDAyXHU3RDJDXHU3REEyXHU4MjFGXHU4NkRCXHU4QTNCXHU4QTg1XHU4RDcwXHU4RThBXHU4RjMzXHU5MDMxXHU5MTRFXHU5MTUyXHU5NDQ0XHU5OUQwXHU3QUY5XHU3Q0E1XHU0RkNBXHU1MTAxXHU1MUM2XHU1N0M4XHU1QkVGXHU1Q0ZCXHU2NjU5XHU2QTNEXHU2RDVBXHU2RTk2XHU2RkVDXHU3MTBDXHU3NTZGXHU3QUUzXHU4ODIyXHU5MDIxXHU5MDc1XHU5NkNCXHU5OUZGXHU4MzAxXHU0RTJEXHU0RUYyXHU4ODQ2XHU5MUNEXHU1MzdEXHU2QURCXHU2OTZCXHU2QzQxXHU4NDdBXHU1ODlFXHU2MThFXHU2NkZFXHU2MkVGXHU3MEREXHU3NTExXHU3NUM3XHU3RTUyXHU4NEI4XHU4QjQ5XHU4RDA4XHU0RTRCXHU1M0VBXCJdLFxuW1wiZjJhMVwiLFwiXHU1NEFCXHU1NzMwXHU1NzQwXHU1RkQ3XHU2MzAxXHU2MzA3XHU2NDZGXHU2NTJGXHU2NUU4XHU2NjdBXHU2NzlEXHU2N0IzXHU2QjYyXHU2QzYwXHU2QzlBXHU2RjJDXHU3N0U1XHU3ODI1XHU3OTQ5XHU3OTU3XHU3RDE5XHU4MEEyXHU4MTAyXHU4MUYzXHU4MjlEXHU4MkI3XHU4NzE4XHU4QThDXHVGOUZDXHU4RDA0XHU4REJFXHU5MDcyXHU3NkY0XHU3QTE5XHU3QTM3XHU3RTU0XHU4MDc3XHU1NTA3XHU1NUQ0XHU1ODc1XHU2MzJGXHU2NDIyXHU2NjQ5XHU2NjRCXHU2ODZEXHU2OTlCXHU2Qjg0XHU2RDI1XHU2RUIxXHU3M0NEXHU3NDY4XHU3NEExXHU3NTVCXHU3NUI5XHU3NkUxXHU3NzFFXHU3NzhCXHU3OUU2XHU3RTA5XHU3RTFEXHU4MUZCXHU4NTJGXHU4ODk3XHU4QTNBXHU4Q0QxXHU4RUVCXHU4RkIwXHU5MDMyXHU5M0FEXHU5NjYzXHU5NjczXHU5NzA3XHU0Rjg0XHU1M0YxXHU1OUVBXHU1QUM5XHU1RTE5XHU2ODRFXHU3NEM2XHU3NUJFXHU3OUU5XHU3QTkyXHU4MUEzXHU4NkVEXHU4Q0VBXHU4RENDXHU4RkVEXHU2NTlGXHU2NzE1XHVGOUZEXHU1N0Y3XHU2RjU3XHU3REREXHU4RjJGXCJdLFxuW1wiZjNhMVwiLFwiXHU5M0Y2XHU5NkM2XHU1RkI1XHU2MUYyXHU2Rjg0XHU0RTE0XHU0Rjk4XHU1MDFGXHU1M0M5XHU1NURGXHU1RDZGXHU1REVFXHU2QjIxXHU2QjY0XHU3OENCXHU3QjlBXHVGOUZFXHU4RTQ5XHU4RUNBXHU5MDZFXHU2MzQ5XHU2NDNFXHU3NzQwXHU3QTg0XHU5MzJGXHU5NDdGXHU5RjZBXHU2NEIwXHU2RkFGXHU3MUU2XHU3NEE4XHU3NERBXHU3QUM0XHU3QzEyXHU3RTgyXHU3Q0IyXHU3RTk4XHU4QjlBXHU4RDBBXHU5NDdEXHU5OTEwXHU5OTRDXHU1MjM5XHU1QkRGXHU2NEU2XHU2NzJEXHU3RDJFXHU1MEVEXHU1M0MzXHU1ODc5XHU2MTU4XHU2MTU5XHU2MUZBXHU2NUFDXHU3QUQ5XHU4QjkyXHU4Qjk2XHU1MDA5XHU1MDIxXHU1Mjc1XHU1NTMxXHU1QTNDXHU1RUUwXHU1RjcwXHU2MTM0XHU2NTVFXHU2NjBDXHU2NjM2XHU2NkEyXHU2OUNEXHU2RUM0XHU2RjMyXHU3MzE2XHU3NjIxXHU3QTkzXHU4MTM5XHU4MjU5XHU4M0Q2XHU4NEJDXHU1MEI1XHU1N0YwXHU1QkMwXHU1QkU4XHU1RjY5XHU2M0ExXHU3ODI2XHU3REI1XHU4M0RDXHU4NTIxXHU5MUM3XHU5MUY1XHU1MThBXHU2N0Y1XHU3QjU2XCJdLFxuW1wiZjRhMVwiLFwiXHU4Q0FDXHU1MUM0XHU1OUJCXHU2MEJEXHU4NjU1XHU1MDFDXHVGOUZGXHU1MjU0XHU1QzNBXHU2MTdEXHU2MjFBXHU2MkQzXHU2NEYyXHU2NUE1XHU2RUNDXHU3NjIwXHU4MTBBXHU4RTYwXHU5NjVGXHU5NkJCXHU0RURGXHU1MzQzXHU1NTk4XHU1OTI5XHU1REREXHU2NEM1XHU2Q0M5XHU2REZBXHU3Mzk0XHU3QTdGXHU4MjFCXHU4NUE2XHU4Q0U0XHU4RTEwXHU5MDc3XHU5MUU3XHU5NUUxXHU5NjIxXHU5N0M2XHU1MUY4XHU1NEYyXHU1NTg2XHU1RkI5XHU2NEE0XHU2Rjg4XHU3REI0XHU4RjFGXHU4RjREXHU5NDM1XHU1MEM5XHU1QzE2XHU2Q0JFXHU2REZCXHU3NTFCXHU3N0JCXHU3QzNEXHU3QzY0XHU4QTc5XHU4QUMyXHU1ODFFXHU1OUJFXHU1RTE2XHU2Mzc3XHU3MjUyXHU3NThBXHU3NzZCXHU4QURDXHU4Q0JDXHU4RjEyXHU1RUYzXHU2Njc0XHU2REY4XHU4MDdEXHU4M0MxXHU4QUNCXHU5NzUxXHU5QkQ2XHVGQTAwXHU1MjQzXHU2NkZGXHU2RDk1XHU2RUVGXHU3REUwXHU4QUU2XHU5MDJFXHU5MDVFXHU5QUQ0XHU1MjFEXHU1MjdGXHU1NEU4XHU2MTk0XHU2Mjg0XHU2MkRCXHU2OEEyXCJdLFxuW1wiZjVhMVwiLFwiXHU2OTEyXHU2OTVBXHU2QTM1XHU3MDkyXHU3MTI2XHU3ODVEXHU3OTAxXHU3OTBFXHU3OUQyXHU3QTBEXHU4MDk2XHU4Mjc4XHU4MkQ1XHU4MzQ5XHU4NTQ5XHU4QzgyXHU4RDg1XHU5MTYyXHU5MThCXHU5MUFFXHU0RkMzXHU1NkQxXHU3MUVEXHU3N0Q3XHU4NzAwXHU4OUY4XHU1QkY4XHU1RkQ2XHU2NzUxXHU5MEE4XHU1M0UyXHU1ODVBXHU1QkY1XHU2MEE0XHU2MTgxXHU2NDYwXHU3RTNEXHU4MDcwXHU4NTI1XHU5MjgzXHU2NEFFXHU1MEFDXHU1RDE0XHU2NzAwXHU1ODlDXHU2MkJEXHU2M0E4XHU2OTBFXHU2OTc4XHU2QTFFXHU2RTZCXHU3NkJBXHU3OUNCXHU4MkJCXHU4NDI5XHU4QUNGXHU4REE4XHU4RkZEXHU5MTEyXHU5MTRCXHU5MTlDXHU5MzEwXHU5MzE4XHU5MzlBXHU5NkRCXHU5QTM2XHU5QzBEXHU0RTExXHU3NTVDXHU3OTVEXHU3QUZBXHU3QjUxXHU3QkM5XHU3RTJFXHU4NEM0XHU4RTU5XHU4RTc0XHU4RUY4XHU5MDEwXHU2NjI1XHU2OTNGXHU3NDQzXHU1MUZBXHU2NzJFXHU5RURDXHU1MTQ1XHU1RkUwXHU2Qzk2XHU4N0YyXHU4ODVEXHU4ODc3XHU2MEI0XHU4MUI1XHU4NDAzXCJdLFxuW1wiZjZhMVwiLFwiXHU4RDA1XHU1M0Q2XHU1NDM5XHU1NjM0XHU1QTM2XHU1QzMxXHU3MDhBXHU3RkUwXHU4MDVBXHU4MTA2XHU4MUVEXHU4REEzXHU5MTg5XHU5QTVGXHU5REYyXHU1MDc0XHU0RUM0XHU1M0EwXHU2MEZCXHU2RTJDXHU1QzY0XHU0Rjg4XHU1MDI0XHU1NUU0XHU1Q0Q5XHU1RTVGXHU2MDY1XHU2ODk0XHU2Q0JCXHU2REM0XHU3MUJFXHU3NUQ0XHU3NUY0XHU3NjYxXHU3QTFBXHU3QTQ5XHU3REM3XHU3REZCXHU3RjZFXHU4MUY0XHU4NkE5XHU4RjFDXHU5NkM5XHU5OUIzXHU5RjUyXHU1MjQ3XHU1MkM1XHU5OEVEXHU4OUFBXHU0RTAzXHU2N0QyXHU2RjA2XHU0RkI1XHU1QkUyXHU2Nzk1XHU2Qzg4XHU2RDc4XHU3NDFCXHU3ODI3XHU5MUREXHU5MzdDXHU4N0M0XHU3OUU0XHU3QTMxXHU1RkVCXHU0RUQ2XHU1NEE0XHU1NTNFXHU1OEFFXHU1OUE1XHU2MEYwXHU2MjUzXHU2MkQ2XHU2NzM2XHU2OTU1XHU4MjM1XHU5NjQwXHU5OUIxXHU5OUREXHU1MDJDXHU1MzUzXHU1NTQ0XHU1NzdDXHVGQTAxXHU2MjU4XHVGQTAyXHU2NEUyXHU2NjZCXHU2N0REXHU2RkMxXHU2RkVGXHU3NDIyXHU3NDM4XHU4QTE3XCJdLFxuW1wiZjdhMVwiLFwiXHU5NDM4XHU1NDUxXHU1NjA2XHU1NzY2XHU1RjQ4XHU2MTlBXHU2QjRFXHU3MDU4XHU3MEFEXHU3REJCXHU4QTk1XHU1OTZBXHU4MTJCXHU2M0EyXHU3NzA4XHU4MDNEXHU4Q0FBXHU1ODU0XHU2NDJEXHU2OUJCXHU1Qjk1XHU1RTExXHU2RTZGXHVGQTAzXHU4NTY5XHU1MTRDXHU1M0YwXHU1OTJBXHU2MDIwXHU2MTRCXHU2Qjg2XHU2QzcwXHU2Q0YwXHU3QjFFXHU4MENFXHU4MkQ0XHU4REM2XHU5MEIwXHU5OEIxXHVGQTA0XHU2NEM3XHU2RkE0XHU2NDkxXHU2NTA0XHU1MTRFXHU1NDEwXHU1NzFGXHU4QTBFXHU2MTVGXHU2ODc2XHVGQTA1XHU3NURCXHU3QjUyXHU3RDcxXHU5MDFBXHU1ODA2XHU2OUNDXHU4MTdGXHU4OTJBXHU5MDAwXHU5ODM5XHU1MDc4XHU1OTU3XHU1OUFDXHU2Mjk1XHU5MDBGXHU5QjJBXHU2MTVEXHU3Mjc5XHU5NUQ2XHU1NzYxXHU1QTQ2XHU1REY0XHU2MjhBXHU2NEFEXHU2NEZBXHU2Nzc3XHU2Q0UyXHU2RDNFXHU3MjJDXHU3NDM2XHU3ODM0XHU3Rjc3XHU4MkFEXHU4RERCXHU5ODE3XHU1MjI0XHU1NzQyXHU2NzdGXHU3MjQ4XHU3NEUzXHU4Q0E5XHU4RkE2XHU5MjExXCJdLFxuW1wiZjhhMVwiLFwiXHU5NjJBXHU1MTZCXHU1M0VEXHU2MzRDXHU0RjY5XHU1NTA0XHU2MDk2XHU2NTU3XHU2QzlCXHU2RDdGXHU3MjRDXHU3MkZEXHU3QTE3XHU4OTg3XHU4QzlEXHU1RjZEXHU2RjhFXHU3MEY5XHU4MUE4XHU2MTBFXHU0RkJGXHU1MDRGXHU2MjQxXHU3MjQ3XHU3QkM3XHU3REU4XHU3RkU5XHU5MDREXHU5N0FEXHU5QTE5XHU4Q0I2XHU1NzZBXHU1RTczXHU2N0IwXHU4NDBEXHU4QTU1XHU1NDIwXHU1QjE2XHU1RTYzXHU1RUUyXHU1RjBBXHU2NTgzXHU4MEJBXHU4NTNEXHU5NTg5XHU5NjVCXHU0RjQ4XHU1MzA1XHU1MzBEXHU1MzBGXHU1NDg2XHU1NEZBXHU1NzAzXHU1RTAzXHU2MDE2XHU2MjlCXHU2MkIxXHU2MzU1XHVGQTA2XHU2Q0UxXHU2RDY2XHU3NUIxXHU3ODMyXHU4MERFXHU4MTJGXHU4MkRFXHU4NDYxXHU4NEIyXHU4ODhEXHU4OTEyXHU5MDBCXHU5MkVBXHU5OEZEXHU5QjkxXHU1RTQ1XHU2NkI0XHU2NkREXHU3MDExXHU3MjA2XHVGQTA3XHU0RkY1XHU1MjdEXHU1RjZBXHU2MTUzXHU2NzUzXHU2QTE5XHU2RjAyXHU3NEUyXHU3OTY4XHU4ODY4XHU4Qzc5XHU5OEM3XHU5OEM0XHU5QTQzXCJdLFxuW1wiZjlhMVwiLFwiXHU1NEMxXHU3QTFGXHU2OTUzXHU4QUY3XHU4QzRBXHU5OEE4XHU5OUFFXHU1RjdDXHU2MkFCXHU3NUIyXHU3NkFFXHU4OEFCXHU5MDdGXHU5NjQyXHU1MzM5XHU1RjNDXHU1RkM1XHU2Q0NDXHU3M0NDXHU3NTYyXHU3NThCXHU3QjQ2XHU4MkZFXHU5OTlEXHU0RTRGXHU5MDNDXHU0RTBCXHU0RjU1XHU1M0E2XHU1OTBGXHU1RUM4XHU2NjMwXHU2Q0IzXHU3NDU1XHU4Mzc3XHU4NzY2XHU4Q0MwXHU5MDUwXHU5NzFFXHU5QzE1XHU1OEQxXHU1Qjc4XHU4NjUwXHU4QjE0XHU5REI0XHU1QkQyXHU2MDY4XHU2MDhEXHU2NUYxXHU2QzU3XHU2RjIyXHU2RkEzXHU3MDFBXHU3RjU1XHU3RkYwXHU5NTkxXHU5NTkyXHU5NjUwXHU5N0QzXHU1MjcyXHU4RjQ0XHU1MUZEXHU1NDJCXHU1NEI4XHU1NTYzXHU1NThBXHU2QUJCXHU2REI1XHU3REQ4XHU4MjY2XHU5MjlDXHU5Njc3XHU5RTc5XHU1NDA4XHU1NEM4XHU3NkQyXHU4NkU0XHU5NUE0XHU5NUQ0XHU5NjVDXHU0RUEyXHU0RjA5XHU1OUVFXHU1QUU2XHU1REY3XHU2MDUyXHU2Mjk3XHU2NzZEXHU2ODQxXHU2Qzg2XHU2RTJGXHU3RjM4XHU4MDlCXHU4MjJBXCJdLFxuW1wiZmFhMVwiLFwiXHVGQTA4XHVGQTA5XHU5ODA1XHU0RUE1XHU1MDU1XHU1NEIzXHU1NzkzXHU1OTVBXHU1QjY5XHU1QkIzXHU2MUM4XHU2OTc3XHU2RDc3XHU3MDIzXHU4N0Y5XHU4OUUzXHU4QTcyXHU4QUU3XHU5MDgyXHU5OUVEXHU5QUI4XHU1MkJFXHU2ODM4XHU1MDE2XHU1RTc4XHU2NzRGXHU4MzQ3XHU4ODRDXHU0RUFCXHU1NDExXHU1NkFFXHU3M0U2XHU5MTE1XHU5N0ZGXHU5OTA5XHU5OTU3XHU5OTk5XHU1NjUzXHU1ODlGXHU4NjVCXHU4QTMxXHU2MUIyXHU2QUY2XHU3MzdCXHU4RUQyXHU2QjQ3XHU5NkFBXHU5QTU3XHU1OTU1XHU3MjAwXHU4RDZCXHU5NzY5XHU0RkQ0XHU1Q0Y0XHU1RjI2XHU2MUY4XHU2NjVCXHU2Q0VCXHU3MEFCXHU3Mzg0XHU3M0I5XHU3M0ZFXHU3NzI5XHU3NzREXHU3RDQzXHU3RDYyXHU3RTIzXHU4MjM3XHU4ODUyXHVGQTBBXHU4Q0UyXHU5MjQ5XHU5ODZGXHU1QjUxXHU3QTc0XHU4ODQwXHU5ODAxXHU1QUNDXHU0RkUwXHU1MzU0XHU1OTNFXHU1Q0ZEXHU2MzNFXHU2RDc5XHU3MkY5XHU4MTA1XHU4MTA3XHU4M0EyXHU5MkNGXHU5ODMwXHU0RUE4XHU1MTQ0XHU1MjExXHU1NzhCXCJdLFxuW1wiZmJhMVwiLFwiXHU1RjYyXHU2Q0MyXHU2RUNFXHU3MDA1XHU3MDUwXHU3MEFGXHU3MTkyXHU3M0U5XHU3NDY5XHU4MzRBXHU4N0EyXHU4ODYxXHU5MDA4XHU5MEEyXHU5M0EzXHU5OUE4XHU1MTZFXHU1RjU3XHU2MEUwXHU2MTY3XHU2NkIzXHU4NTU5XHU4RTRBXHU5MUFGXHU5NzhCXHU0RTRFXHU0RTkyXHU1NDdDXHU1OEQ1XHU1OEZBXHU1OTdEXHU1Q0I1XHU1RjI3XHU2MjM2XHU2MjQ4XHU2NjBBXHU2NjY3XHU2QkVCXHU2RDY5XHU2RENGXHU2RTU2XHU2RUY4XHU2Rjk0XHU2RkUwXHU2RkU5XHU3MDVEXHU3MkQwXHU3NDI1XHU3NDVBXHU3NEUwXHU3NjkzXHU3OTVDXHU3Q0NBXHU3RTFFXHU4MEUxXHU4MkE2XHU4NDZCXHU4NEJGXHU4NjRFXHU4NjVGXHU4Nzc0XHU4Qjc3XHU4QzZBXHU5M0FDXHU5ODAwXHU5ODY1XHU2MEQxXHU2MjE2XHU5MTc3XHU1QTVBXHU2NjBGXHU2REY3XHU2RTNFXHU3NDNGXHU5QjQyXHU1RkZEXHU2MERBXHU3QjBGXHU1NEM0XHU1RjE4XHU2QzVFXHU2Q0QzXHU2RDJBXHU3MEQ4XHU3RDA1XHU4Njc5XHU4QTBDXHU5RDNCXHU1MzE2XHU1NDhDXHU1QjA1XHU2QTNBXHU3MDZCXHU3NTc1XCJdLFxuW1wiZmNhMVwiLFwiXHU3OThEXHU3OUJFXHU4MkIxXHU4M0VGXHU4QTcxXHU4QjQxXHU4Q0E4XHU5Nzc0XHVGQTBCXHU2NEY0XHU2NTJCXHU3OEJBXHU3OEJCXHU3QTZCXHU0RTM4XHU1NTlBXHU1OTUwXHU1QkE2XHU1RTdCXHU2MEEzXHU2M0RCXHU2QjYxXHU2NjY1XHU2ODUzXHU2RTE5XHU3MTY1XHU3NEIwXHU3RDA4XHU5MDg0XHU5QTY5XHU5QzI1XHU2RDNCXHU2RUQxXHU3MzNFXHU4QzQxXHU5NUNBXHU1MUYwXHU1RTRDXHU1RkE4XHU2MDREXHU2MEY2XHU2MTMwXHU2MTRDXHU2NjQzXHU2NjQ0XHU2OUE1XHU2Q0MxXHU2RTVGXHU2RUM5XHU2RjYyXHU3MTRDXHU3NDlDXHU3Njg3XHU3QkMxXHU3QzI3XHU4MzUyXHU4NzU3XHU5MDUxXHU5NjhEXHU5RUMzXHU1MzJGXHU1NkRFXHU1RUZCXHU1RjhBXHU2MDYyXHU2MDk0XHU2MUY3XHU2NjY2XHU2NzAzXHU2QTlDXHU2REVFXHU2RkFFXHU3MDcwXHU3MzZBXHU3RTZBXHU4MUJFXHU4MzM0XHU4NkQ0XHU4QUE4XHU4Q0M0XHU1MjgzXHU3MzcyXHU1Qjk2XHU2QTZCXHU5NDA0XHU1NEVFXHU1Njg2XHU1QjVEXHU2NTQ4XHU2NTg1XHU2NkM5XHU2ODlGXHU2RDhEXHU2REM2XCJdLFxuW1wiZmRhMVwiLFwiXHU3MjNCXHU4MEI0XHU5MTc1XHU5QTREXHU0RkFGXHU1MDE5XHU1MzlBXHU1NDBFXHU1NDNDXHU1NTg5XHU1NUM1XHU1RTNGXHU1RjhDXHU2NzNEXHU3MTY2XHU3M0REXHU5MDA1XHU1MkRCXHU1MkYzXHU1ODY0XHU1OENFXHU3MTA0XHU3MThGXHU3MUZCXHU4NUIwXHU4QTEzXHU2Njg4XHU4NUE4XHU1NUE3XHU2Njg0XHU3MTRBXHU4NDMxXHU1MzQ5XHU1NTk5XHU2QkMxXHU1RjU5XHU1RkJEXHU2M0VFXHU2Njg5XHU3MTQ3XHU4QUYxXHU4RjFEXHU5RUJFXHU0RjExXHU2NDNBXHU3MENCXHU3NTY2XHU4NjY3XHU2MDY0XHU4QjRFXHU5REY4XHU1MTQ3XHU1MUY2XHU1MzA4XHU2RDM2XHU4MEY4XHU5RUQxXHU2NjE1XHU2QjIzXHU3MDk4XHU3NUQ1XHU1NDAzXHU1Qzc5XHU3RDA3XHU4QTE2XHU2QjIwXHU2QjNEXHU2QjQ2XHU1NDM4XHU2MDcwXHU2RDNEXHU3RkQ1XHU4MjA4XHU1MEQ2XHU1MURFXHU1NTlDXHU1NjZCXHU1NkNEXHU1OUVDXHU1QjA5XHU1RTBDXHU2MTk5XHU2MTk4XHU2MjMxXHU2NjVFXHU2NkU2XHU3MTk5XHU3MUI5XHU3MUJBXHU3MkE3XHU3OUE3XHU3QTAwXHU3RkIyXHU4QTcwXCJdXG5dXG4iLCAiW1xuW1wiMFwiLFwiXFx1MDAwMFwiLDEyN10sXG5bXCJhMTQwXCIsXCJcdTMwMDBcdUZGMENcdTMwMDFcdTMwMDJcdUZGMEVcdTIwMjdcdUZGMUJcdUZGMUFcdUZGMUZcdUZGMDFcdUZFMzBcdTIwMjZcdTIwMjVcdUZFNTBcdUZFNTFcdUZFNTJcdTAwQjdcdUZFNTRcdUZFNTVcdUZFNTZcdUZFNTdcdUZGNUNcdTIwMTNcdUZFMzFcdTIwMTRcdUZFMzNcdTI1NzRcdUZFMzRcdUZFNEZcdUZGMDhcdUZGMDlcdUZFMzVcdUZFMzZcdUZGNUJcdUZGNURcdUZFMzdcdUZFMzhcdTMwMTRcdTMwMTVcdUZFMzlcdUZFM0FcdTMwMTBcdTMwMTFcdUZFM0JcdUZFM0NcdTMwMEFcdTMwMEJcdUZFM0RcdUZFM0VcdTMwMDhcdTMwMDlcdUZFM0ZcdUZFNDBcdTMwMENcdTMwMERcdUZFNDFcdUZFNDJcdTMwMEVcdTMwMEZcdUZFNDNcdUZFNDRcdUZFNTlcdUZFNUFcIl0sXG5bXCJhMWExXCIsXCJcdUZFNUJcdUZFNUNcdUZFNURcdUZFNUVcdTIwMThcdTIwMTlcdTIwMUNcdTIwMURcdTMwMURcdTMwMUVcdTIwMzVcdTIwMzJcdUZGMDNcdUZGMDZcdUZGMEFcdTIwM0JcdTAwQTdcdTMwMDNcdTI1Q0JcdTI1Q0ZcdTI1QjNcdTI1QjJcdTI1Q0VcdTI2MDZcdTI2MDVcdTI1QzdcdTI1QzZcdTI1QTFcdTI1QTBcdTI1QkRcdTI1QkNcdTMyQTNcdTIxMDVcdTAwQUZcdUZGRTNcdUZGM0ZcdTAyQ0RcdUZFNDlcdUZFNEFcdUZFNERcdUZFNEVcdUZFNEJcdUZFNENcdUZFNUZcdUZFNjBcdUZFNjFcdUZGMEJcdUZGMERcdTAwRDdcdTAwRjdcdTAwQjFcdTIyMUFcdUZGMUNcdUZGMUVcdUZGMURcdTIyNjZcdTIyNjdcdTIyNjBcdTIyMUVcdTIyNTJcdTIyNjFcdUZFNjJcIiw0LFwiXHVGRjVFXHUyMjI5XHUyMjJBXHUyMkE1XHUyMjIwXHUyMjFGXHUyMkJGXHUzM0QyXHUzM0QxXHUyMjJCXHUyMjJFXHUyMjM1XHUyMjM0XHUyNjQwXHUyNjQyXHUyMjk1XHUyMjk5XHUyMTkxXHUyMTkzXHUyMTkwXHUyMTkyXHUyMTk2XHUyMTk3XHUyMTk5XHUyMTk4XHUyMjI1XHUyMjIzXHVGRjBGXCJdLFxuW1wiYTI0MFwiLFwiXHVGRjNDXHUyMjE1XHVGRTY4XHVGRjA0XHVGRkU1XHUzMDEyXHVGRkUwXHVGRkUxXHVGRjA1XHVGRjIwXHUyMTAzXHUyMTA5XHVGRTY5XHVGRTZBXHVGRTZCXHUzM0Q1XHUzMzlDXHUzMzlEXHUzMzlFXHUzM0NFXHUzM0ExXHUzMzhFXHUzMzhGXHUzM0M0XHUwMEIwXHU1MTU5XHU1MTVCXHU1MTVFXHU1MTVEXHU1MTYxXHU1MTYzXHU1NUU3XHU3NEU5XHU3Q0NFXHUyNTgxXCIsNyxcIlx1MjU4Rlx1MjU4RVx1MjU4RFx1MjU4Q1x1MjU4Qlx1MjU4QVx1MjU4OVx1MjUzQ1x1MjUzNFx1MjUyQ1x1MjUyNFx1MjUxQ1x1MjU5NFx1MjUwMFx1MjUwMlx1MjU5NVx1MjUwQ1x1MjUxMFx1MjUxNFx1MjUxOFx1MjU2RFwiXSxcbltcImEyYTFcIixcIlx1MjU2RVx1MjU3MFx1MjU2Rlx1MjU1MFx1MjU1RVx1MjU2QVx1MjU2MVx1MjVFMlx1MjVFM1x1MjVFNVx1MjVFNFx1MjU3MVx1MjU3Mlx1MjU3M1x1RkYxMFwiLDksXCJcdTIxNjBcIiw5LFwiXHUzMDIxXCIsOCxcIlx1NTM0MVx1NTM0NFx1NTM0NVx1RkYyMVwiLDI1LFwiXHVGRjQxXCIsMjFdLFxuW1wiYTM0MFwiLFwiXHVGRjU3XHVGRjU4XHVGRjU5XHVGRjVBXHUwMzkxXCIsMTYsXCJcdTAzQTNcIiw2LFwiXHUwM0IxXCIsMTYsXCJcdTAzQzNcIiw2LFwiXHUzMTA1XCIsMTBdLFxuW1wiYTNhMVwiLFwiXHUzMTEwXCIsMjUsXCJcdTAyRDlcdTAyQzlcdTAyQ0FcdTAyQzdcdTAyQ0JcIl0sXG5bXCJhM2UxXCIsXCJcdTIwQUNcIl0sXG5bXCJhNDQwXCIsXCJcdTRFMDBcdTRFNTlcdTRFMDFcdTRFMDNcdTRFNDNcdTRFNURcdTRFODZcdTRFOENcdTRFQkFcdTUxM0ZcdTUxNjVcdTUxNkJcdTUxRTBcdTUyMDBcdTUyMDFcdTUyOUJcdTUzMTVcdTUzNDFcdTUzNUNcdTUzQzhcdTRFMDlcdTRFMEJcdTRFMDhcdTRFMEFcdTRFMkJcdTRFMzhcdTUxRTFcdTRFNDVcdTRFNDhcdTRFNUZcdTRFNUVcdTRFOEVcdTRFQTFcdTUxNDBcdTUyMDNcdTUyRkFcdTUzNDNcdTUzQzlcdTUzRTNcdTU3MUZcdTU4RUJcdTU5MTVcdTU5MjdcdTU5NzNcdTVCNTBcdTVCNTFcdTVCNTNcdTVCRjhcdTVDMEZcdTVDMjJcdTVDMzhcdTVDNzFcdTVERERcdTVERTVcdTVERjFcdTVERjJcdTVERjNcdTVERkVcdTVFNzJcdTVFRkVcdTVGMEJcdTVGMTNcdTYyNERcIl0sXG5bXCJhNGExXCIsXCJcdTRFMTFcdTRFMTBcdTRFMERcdTRFMkRcdTRFMzBcdTRFMzlcdTRFNEJcdTVDMzlcdTRFODhcdTRFOTFcdTRFOTVcdTRFOTJcdTRFOTRcdTRFQTJcdTRFQzFcdTRFQzBcdTRFQzNcdTRFQzZcdTRFQzdcdTRFQ0RcdTRFQ0FcdTRFQ0JcdTRFQzRcdTUxNDNcdTUxNDFcdTUxNjdcdTUxNkRcdTUxNkVcdTUxNkNcdTUxOTdcdTUxRjZcdTUyMDZcdTUyMDdcdTUyMDhcdTUyRkJcdTUyRkVcdTUyRkZcdTUzMTZcdTUzMzlcdTUzNDhcdTUzNDdcdTUzNDVcdTUzNUVcdTUzODRcdTUzQ0JcdTUzQ0FcdTUzQ0RcdTU4RUNcdTU5MjlcdTU5MkJcdTU5MkFcdTU5MkRcdTVCNTRcdTVDMTFcdTVDMjRcdTVDM0FcdTVDNkZcdTVERjRcdTVFN0JcdTVFRkZcdTVGMTRcdTVGMTVcdTVGQzNcdTYyMDhcdTYyMzZcdTYyNEJcdTYyNEVcdTY1MkZcdTY1ODdcdTY1OTdcdTY1QTRcdTY1QjlcdTY1RTVcdTY2RjBcdTY3MDhcdTY3MjhcdTZCMjBcdTZCNjJcdTZCNzlcdTZCQ0JcdTZCRDRcdTZCREJcdTZDMEZcdTZDMzRcdTcwNkJcdTcyMkFcdTcyMzZcdTcyM0JcdTcyNDdcdTcyNTlcdTcyNUJcdTcyQUNcdTczOEJcdTRFMTlcIl0sXG5bXCJhNTQwXCIsXCJcdTRFMTZcdTRFMTVcdTRFMTRcdTRFMThcdTRFM0JcdTRFNERcdTRFNEZcdTRFNEVcdTRFRTVcdTRFRDhcdTRFRDRcdTRFRDVcdTRFRDZcdTRFRDdcdTRFRTNcdTRFRTRcdTRFRDlcdTRFREVcdTUxNDVcdTUxNDRcdTUxODlcdTUxOEFcdTUxQUNcdTUxRjlcdTUxRkFcdTUxRjhcdTUyMEFcdTUyQTBcdTUyOUZcdTUzMDVcdTUzMDZcdTUzMTdcdTUzMURcdTRFREZcdTUzNEFcdTUzNDlcdTUzNjFcdTUzNjBcdTUzNkZcdTUzNkVcdTUzQkJcdTUzRUZcdTUzRTRcdTUzRjNcdTUzRUNcdTUzRUVcdTUzRTlcdTUzRThcdTUzRkNcdTUzRjhcdTUzRjVcdTUzRUJcdTUzRTZcdTUzRUFcdTUzRjJcdTUzRjFcdTUzRjBcdTUzRTVcdTUzRURcdTUzRkJcdTU2REJcdTU2REFcdTU5MTZcIl0sXG5bXCJhNWExXCIsXCJcdTU5MkVcdTU5MzFcdTU5NzRcdTU5NzZcdTVCNTVcdTVCODNcdTVDM0NcdTVERThcdTVERTdcdTVERTZcdTVFMDJcdTVFMDNcdTVFNzNcdTVFN0NcdTVGMDFcdTVGMThcdTVGMTdcdTVGQzVcdTYyMEFcdTYyNTNcdTYyNTRcdTYyNTJcdTYyNTFcdTY1QTVcdTY1RTZcdTY3MkVcdTY3MkNcdTY3MkFcdTY3MkJcdTY3MkRcdTZCNjNcdTZCQ0RcdTZDMTFcdTZDMTBcdTZDMzhcdTZDNDFcdTZDNDBcdTZDM0VcdTcyQUZcdTczODRcdTczODlcdTc0RENcdTc0RTZcdTc1MThcdTc1MUZcdTc1MjhcdTc1MjlcdTc1MzBcdTc1MzFcdTc1MzJcdTc1MzNcdTc1OEJcdTc2N0RcdTc2QUVcdTc2QkZcdTc2RUVcdTc3REJcdTc3RTJcdTc3RjNcdTc5M0FcdTc5QkVcdTdBNzRcdTdBQ0JcdTRFMUVcdTRFMUZcdTRFNTJcdTRFNTNcdTRFNjlcdTRFOTlcdTRFQTRcdTRFQTZcdTRFQTVcdTRFRkZcdTRGMDlcdTRGMTlcdTRGMEFcdTRGMTVcdTRGMERcdTRGMTBcdTRGMTFcdTRGMEZcdTRFRjJcdTRFRjZcdTRFRkJcdTRFRjBcdTRFRjNcdTRFRkRcdTRGMDFcdTRGMEJcdTUxNDlcdTUxNDdcdTUxNDZcdTUxNDhcdTUxNjhcIl0sXG5bXCJhNjQwXCIsXCJcdTUxNzFcdTUxOERcdTUxQjBcdTUyMTdcdTUyMTFcdTUyMTJcdTUyMEVcdTUyMTZcdTUyQTNcdTUzMDhcdTUzMjFcdTUzMjBcdTUzNzBcdTUzNzFcdTU0MDlcdTU0MEZcdTU0MENcdTU0MEFcdTU0MTBcdTU0MDFcdTU0MEJcdTU0MDRcdTU0MTFcdTU0MERcdTU0MDhcdTU0MDNcdTU0MEVcdTU0MDZcdTU0MTJcdTU2RTBcdTU2REVcdTU2RERcdTU3MzNcdTU3MzBcdTU3MjhcdTU3MkRcdTU3MkNcdTU3MkZcdTU3MjlcdTU5MTlcdTU5MUFcdTU5MzdcdTU5MzhcdTU5ODRcdTU5NzhcdTU5ODNcdTU5N0RcdTU5NzlcdTU5ODJcdTU5ODFcdTVCNTdcdTVCNThcdTVCODdcdTVCODhcdTVCODVcdTVCODlcdTVCRkFcdTVDMTZcdTVDNzlcdTVEREVcdTVFMDZcdTVFNzZcdTVFNzRcIl0sXG5bXCJhNmExXCIsXCJcdTVGMEZcdTVGMUJcdTVGRDlcdTVGRDZcdTYyMEVcdTYyMENcdTYyMERcdTYyMTBcdTYyNjNcdTYyNUJcdTYyNThcdTY1MzZcdTY1RTlcdTY1RThcdTY1RUNcdTY1RURcdTY2RjJcdTY2RjNcdTY3MDlcdTY3M0RcdTY3MzRcdTY3MzFcdTY3MzVcdTZCMjFcdTZCNjRcdTZCN0JcdTZDMTZcdTZDNURcdTZDNTdcdTZDNTlcdTZDNUZcdTZDNjBcdTZDNTBcdTZDNTVcdTZDNjFcdTZDNUJcdTZDNERcdTZDNEVcdTcwNzBcdTcyNUZcdTcyNURcdTc2N0VcdTdBRjlcdTdDNzNcdTdDRjhcdTdGMzZcdTdGOEFcdTdGQkRcdTgwMDFcdTgwMDNcdTgwMENcdTgwMTJcdTgwMzNcdTgwN0ZcdTgwODlcdTgwOEJcdTgwOENcdTgxRTNcdTgxRUFcdTgxRjNcdTgxRkNcdTgyMENcdTgyMUJcdTgyMUZcdTgyNkVcdTgyNzJcdTgyN0VcdTg2NkJcdTg4NDBcdTg4NENcdTg4NjNcdTg5N0ZcdTk2MjFcdTRFMzJcdTRFQThcdTRGNERcdTRGNEZcdTRGNDdcdTRGNTdcdTRGNUVcdTRGMzRcdTRGNUJcdTRGNTVcdTRGMzBcdTRGNTBcdTRGNTFcdTRGM0RcdTRGM0FcdTRGMzhcdTRGNDNcdTRGNTRcdTRGM0NcdTRGNDZcdTRGNjNcIl0sXG5bXCJhNzQwXCIsXCJcdTRGNUNcdTRGNjBcdTRGMkZcdTRGNEVcdTRGMzZcdTRGNTlcdTRGNURcdTRGNDhcdTRGNUFcdTUxNENcdTUxNEJcdTUxNERcdTUxNzVcdTUxQjZcdTUxQjdcdTUyMjVcdTUyMjRcdTUyMjlcdTUyMkFcdTUyMjhcdTUyQUJcdTUyQTlcdTUyQUFcdTUyQUNcdTUzMjNcdTUzNzNcdTUzNzVcdTU0MURcdTU0MkRcdTU0MUVcdTU0M0VcdTU0MjZcdTU0NEVcdTU0MjdcdTU0NDZcdTU0NDNcdTU0MzNcdTU0NDhcdTU0NDJcdTU0MUJcdTU0MjlcdTU0NEFcdTU0MzlcdTU0M0JcdTU0MzhcdTU0MkVcdTU0MzVcdTU0MzZcdTU0MjBcdTU0M0NcdTU0NDBcdTU0MzFcdTU0MkJcdTU0MUZcdTU0MkNcdTU2RUFcdTU2RjBcdTU2RTRcdTU2RUJcdTU3NEFcdTU3NTFcdTU3NDBcdTU3NERcIl0sXG5bXCJhN2ExXCIsXCJcdTU3NDdcdTU3NEVcdTU3M0VcdTU3NTBcdTU3NEZcdTU3M0JcdTU4RUZcdTU5M0VcdTU5OURcdTU5OTJcdTU5QThcdTU5OUVcdTU5QTNcdTU5OTlcdTU5OTZcdTU5OERcdTU5QTRcdTU5OTNcdTU5OEFcdTU5QTVcdTVCNURcdTVCNUNcdTVCNUFcdTVCNUJcdTVCOENcdTVCOEJcdTVCOEZcdTVDMkNcdTVDNDBcdTVDNDFcdTVDM0ZcdTVDM0VcdTVDOTBcdTVDOTFcdTVDOTRcdTVDOENcdTVERUJcdTVFMENcdTVFOEZcdTVFODdcdTVFOEFcdTVFRjdcdTVGMDRcdTVGMUZcdTVGNjRcdTVGNjJcdTVGNzdcdTVGNzlcdTVGRDhcdTVGQ0NcdTVGRDdcdTVGQ0RcdTVGRjFcdTVGRUJcdTVGRjhcdTVGRUFcdTYyMTJcdTYyMTFcdTYyODRcdTYyOTdcdTYyOTZcdTYyODBcdTYyNzZcdTYyODlcdTYyNkRcdTYyOEFcdTYyN0NcdTYyN0VcdTYyNzlcdTYyNzNcdTYyOTJcdTYyNkZcdTYyOThcdTYyNkVcdTYyOTVcdTYyOTNcdTYyOTFcdTYyODZcdTY1MzlcdTY1M0JcdTY1MzhcdTY1RjFcdTY2RjRcdTY3NUZcdTY3NEVcdTY3NEZcdTY3NTBcdTY3NTFcdTY3NUNcdTY3NTZcdTY3NUVcdTY3NDlcdTY3NDZcdTY3NjBcIl0sXG5bXCJhODQwXCIsXCJcdTY3NTNcdTY3NTdcdTZCNjVcdTZCQ0ZcdTZDNDJcdTZDNUVcdTZDOTlcdTZDODFcdTZDODhcdTZDODlcdTZDODVcdTZDOUJcdTZDNkFcdTZDN0FcdTZDOTBcdTZDNzBcdTZDOENcdTZDNjhcdTZDOTZcdTZDOTJcdTZDN0RcdTZDODNcdTZDNzJcdTZDN0VcdTZDNzRcdTZDODZcdTZDNzZcdTZDOERcdTZDOTRcdTZDOThcdTZDODJcdTcwNzZcdTcwN0NcdTcwN0RcdTcwNzhcdTcyNjJcdTcyNjFcdTcyNjBcdTcyQzRcdTcyQzJcdTczOTZcdTc1MkNcdTc1MkJcdTc1MzdcdTc1MzhcdTc2ODJcdTc2RUZcdTc3RTNcdTc5QzFcdTc5QzBcdTc5QkZcdTdBNzZcdTdDRkJcdTdGNTVcdTgwOTZcdTgwOTNcdTgwOURcdTgwOThcdTgwOUJcdTgwOUFcdTgwQjJcdTgyNkZcdTgyOTJcIl0sXG5bXCJhOGExXCIsXCJcdTgyOEJcdTgyOERcdTg5OEJcdTg5RDJcdThBMDBcdThDMzdcdThDNDZcdThDNTVcdThDOURcdThENjRcdThENzBcdThEQjNcdThFQUJcdThFQ0FcdThGOUJcdThGQjBcdThGQzJcdThGQzZcdThGQzVcdThGQzRcdTVERTFcdTkwOTFcdTkwQTJcdTkwQUFcdTkwQTZcdTkwQTNcdTkxNDlcdTkxQzZcdTkxQ0NcdTk2MzJcdTk2MkVcdTk2MzFcdTk2MkFcdTk2MkNcdTRFMjZcdTRFNTZcdTRFNzNcdTRFOEJcdTRFOUJcdTRFOUVcdTRFQUJcdTRFQUNcdTRGNkZcdTRGOURcdTRGOERcdTRGNzNcdTRGN0ZcdTRGNkNcdTRGOUJcdTRGOEJcdTRGODZcdTRGODNcdTRGNzBcdTRGNzVcdTRGODhcdTRGNjlcdTRGN0JcdTRGOTZcdTRGN0VcdTRGOEZcdTRGOTFcdTRGN0FcdTUxNTRcdTUxNTJcdTUxNTVcdTUxNjlcdTUxNzdcdTUxNzZcdTUxNzhcdTUxQkRcdTUxRkRcdTUyM0JcdTUyMzhcdTUyMzdcdTUyM0FcdTUyMzBcdTUyMkVcdTUyMzZcdTUyNDFcdTUyQkVcdTUyQkJcdTUzNTJcdTUzNTRcdTUzNTNcdTUzNTFcdTUzNjZcdTUzNzdcdTUzNzhcdTUzNzlcdTUzRDZcdTUzRDRcdTUzRDdcdTU0NzNcdTU0NzVcIl0sXG5bXCJhOTQwXCIsXCJcdTU0OTZcdTU0NzhcdTU0OTVcdTU0ODBcdTU0N0JcdTU0NzdcdTU0ODRcdTU0OTJcdTU0ODZcdTU0N0NcdTU0OTBcdTU0NzFcdTU0NzZcdTU0OENcdTU0OUFcdTU0NjJcdTU0NjhcdTU0OEJcdTU0N0RcdTU0OEVcdTU2RkFcdTU3ODNcdTU3NzdcdTU3NkFcdTU3NjlcdTU3NjFcdTU3NjZcdTU3NjRcdTU3N0NcdTU5MUNcdTU5NDlcdTU5NDdcdTU5NDhcdTU5NDRcdTU5NTRcdTU5QkVcdTU5QkJcdTU5RDRcdTU5QjlcdTU5QUVcdTU5RDFcdTU5QzZcdTU5RDBcdTU5Q0RcdTU5Q0JcdTU5RDNcdTU5Q0FcdTU5QUZcdTU5QjNcdTU5RDJcdTU5QzVcdTVCNUZcdTVCNjRcdTVCNjNcdTVCOTdcdTVCOUFcdTVCOThcdTVCOUNcdTVCOTlcdTVCOUJcdTVDMUFcdTVDNDhcdTVDNDVcIl0sXG5bXCJhOWExXCIsXCJcdTVDNDZcdTVDQjdcdTVDQTFcdTVDQjhcdTVDQTlcdTVDQUJcdTVDQjFcdTVDQjNcdTVFMThcdTVFMUFcdTVFMTZcdTVFMTVcdTVFMUJcdTVFMTFcdTVFNzhcdTVFOUFcdTVFOTdcdTVFOUNcdTVFOTVcdTVFOTZcdTVFRjZcdTVGMjZcdTVGMjdcdTVGMjlcdTVGODBcdTVGODFcdTVGN0ZcdTVGN0NcdTVGRERcdTVGRTBcdTVGRkRcdTVGRjVcdTVGRkZcdTYwMEZcdTYwMTRcdTYwMkZcdTYwMzVcdTYwMTZcdTYwMkFcdTYwMTVcdTYwMjFcdTYwMjdcdTYwMjlcdTYwMkJcdTYwMUJcdTYyMTZcdTYyMTVcdTYyM0ZcdTYyM0VcdTYyNDBcdTYyN0ZcdTYyQzlcdTYyQ0NcdTYyQzRcdTYyQkZcdTYyQzJcdTYyQjlcdTYyRDJcdTYyREJcdTYyQUJcdTYyRDNcdTYyRDRcdTYyQ0JcdTYyQzhcdTYyQThcdTYyQkRcdTYyQkNcdTYyRDBcdTYyRDlcdTYyQzdcdTYyQ0RcdTYyQjVcdTYyREFcdTYyQjFcdTYyRDhcdTYyRDZcdTYyRDdcdTYyQzZcdTYyQUNcdTYyQ0VcdTY1M0VcdTY1QTdcdTY1QkNcdTY1RkFcdTY2MTRcdTY2MTNcdTY2MENcdTY2MDZcdTY2MDJcdTY2MEVcdTY2MDBcdTY2MEZcdTY2MTVcdTY2MEFcIl0sXG5bXCJhYTQwXCIsXCJcdTY2MDdcdTY3MERcdTY3MEJcdTY3NkRcdTY3OEJcdTY3OTVcdTY3NzFcdTY3OUNcdTY3NzNcdTY3NzdcdTY3ODdcdTY3OURcdTY3OTdcdTY3NkZcdTY3NzBcdTY3N0ZcdTY3ODlcdTY3N0VcdTY3OTBcdTY3NzVcdTY3OUFcdTY3OTNcdTY3N0NcdTY3NkFcdTY3NzJcdTZCMjNcdTZCNjZcdTZCNjdcdTZCN0ZcdTZDMTNcdTZDMUJcdTZDRTNcdTZDRThcdTZDRjNcdTZDQjFcdTZDQ0NcdTZDRTVcdTZDQjNcdTZDQkRcdTZDQkVcdTZDQkNcdTZDRTJcdTZDQUJcdTZDRDVcdTZDRDNcdTZDQjhcdTZDQzRcdTZDQjlcdTZDQzFcdTZDQUVcdTZDRDdcdTZDQzVcdTZDRjFcdTZDQkZcdTZDQkJcdTZDRTFcdTZDREJcdTZDQ0FcdTZDQUNcdTZDRUZcdTZDRENcdTZDRDZcdTZDRTBcIl0sXG5bXCJhYWExXCIsXCJcdTcwOTVcdTcwOEVcdTcwOTJcdTcwOEFcdTcwOTlcdTcyMkNcdTcyMkRcdTcyMzhcdTcyNDhcdTcyNjdcdTcyNjlcdTcyQzBcdTcyQ0VcdTcyRDlcdTcyRDdcdTcyRDBcdTczQTlcdTczQThcdTczOUZcdTczQUJcdTczQTVcdTc1M0RcdTc1OURcdTc1OTlcdTc1OUFcdTc2ODRcdTc2QzJcdTc2RjJcdTc2RjRcdTc3RTVcdTc3RkRcdTc5M0VcdTc5NDBcdTc5NDFcdTc5QzlcdTc5QzhcdTdBN0FcdTdBNzlcdTdBRkFcdTdDRkVcdTdGNTRcdTdGOENcdTdGOEJcdTgwMDVcdTgwQkFcdTgwQTVcdTgwQTJcdTgwQjFcdTgwQTFcdTgwQUJcdTgwQTlcdTgwQjRcdTgwQUFcdTgwQUZcdTgxRTVcdTgxRkVcdTgyMERcdTgyQjNcdTgyOURcdTgyOTlcdTgyQURcdTgyQkRcdTgyOUZcdTgyQjlcdTgyQjFcdTgyQUNcdTgyQTVcdTgyQUZcdTgyQjhcdTgyQTNcdTgyQjBcdTgyQkVcdTgyQjdcdTg2NEVcdTg2NzFcdTUyMURcdTg4NjhcdThFQ0JcdThGQ0VcdThGRDRcdThGRDFcdTkwQjVcdTkwQjhcdTkwQjFcdTkwQjZcdTkxQzdcdTkxRDFcdTk1NzdcdTk1ODBcdTk2MUNcdTk2NDBcdTk2M0ZcdTk2M0JcdTk2NDRcIl0sXG5bXCJhYjQwXCIsXCJcdTk2NDJcdTk2QjlcdTk2RThcdTk3NTJcdTk3NUVcdTRFOUZcdTRFQURcdTRFQUVcdTRGRTFcdTRGQjVcdTRGQUZcdTRGQkZcdTRGRTBcdTRGRDFcdTRGQ0ZcdTRGRERcdTRGQzNcdTRGQjZcdTRGRDhcdTRGREZcdTRGQ0FcdTRGRDdcdTRGQUVcdTRGRDBcdTRGQzRcdTRGQzJcdTRGREFcdTRGQ0VcdTRGREVcdTRGQjdcdTUxNTdcdTUxOTJcdTUxOTFcdTUxQTBcdTUyNEVcdTUyNDNcdTUyNEFcdTUyNERcdTUyNENcdTUyNEJcdTUyNDdcdTUyQzdcdTUyQzlcdTUyQzNcdTUyQzFcdTUzMERcdTUzNTdcdTUzN0JcdTUzOUFcdTUzREJcdTU0QUNcdTU0QzBcdTU0QThcdTU0Q0VcdTU0QzlcdTU0QjhcdTU0QTZcdTU0QjNcdTU0QzdcdTU0QzJcdTU0QkRcdTU0QUFcdTU0QzFcIl0sXG5bXCJhYmExXCIsXCJcdTU0QzRcdTU0QzhcdTU0QUZcdTU0QUJcdTU0QjFcdTU0QkJcdTU0QTlcdTU0QTdcdTU0QkZcdTU2RkZcdTU3ODJcdTU3OEJcdTU3QTBcdTU3QTNcdTU3QTJcdTU3Q0VcdTU3QUVcdTU3OTNcdTU5NTVcdTU5NTFcdTU5NEZcdTU5NEVcdTU5NTBcdTU5RENcdTU5RDhcdTU5RkZcdTU5RTNcdTU5RThcdTVBMDNcdTU5RTVcdTU5RUFcdTU5REFcdTU5RTZcdTVBMDFcdTU5RkJcdTVCNjlcdTVCQTNcdTVCQTZcdTVCQTRcdTVCQTJcdTVCQTVcdTVDMDFcdTVDNEVcdTVDNEZcdTVDNERcdTVDNEJcdTVDRDlcdTVDRDJcdTVERjdcdTVFMURcdTVFMjVcdTVFMUZcdTVFN0RcdTVFQTBcdTVFQTZcdTVFRkFcdTVGMDhcdTVGMkRcdTVGNjVcdTVGODhcdTVGODVcdTVGOEFcdTVGOEJcdTVGODdcdTVGOENcdTVGODlcdTYwMTJcdTYwMURcdTYwMjBcdTYwMjVcdTYwMEVcdTYwMjhcdTYwNERcdTYwNzBcdTYwNjhcdTYwNjJcdTYwNDZcdTYwNDNcdTYwNkNcdTYwNkJcdTYwNkFcdTYwNjRcdTYyNDFcdTYyRENcdTYzMTZcdTYzMDlcdTYyRkNcdTYyRURcdTYzMDFcdTYyRUVcdTYyRkRcdTYzMDdcdTYyRjFcdTYyRjdcIl0sXG5bXCJhYzQwXCIsXCJcdTYyRUZcdTYyRUNcdTYyRkVcdTYyRjRcdTYzMTFcdTYzMDJcdTY1M0ZcdTY1NDVcdTY1QUJcdTY1QkRcdTY1RTJcdTY2MjVcdTY2MkRcdTY2MjBcdTY2MjdcdTY2MkZcdTY2MUZcdTY2MjhcdTY2MzFcdTY2MjRcdTY2RjdcdTY3RkZcdTY3RDNcdTY3RjFcdTY3RDRcdTY3RDBcdTY3RUNcdTY3QjZcdTY3QUZcdTY3RjVcdTY3RTlcdTY3RUZcdTY3QzRcdTY3RDFcdTY3QjRcdTY3REFcdTY3RTVcdTY3QjhcdTY3Q0ZcdTY3REVcdTY3RjNcdTY3QjBcdTY3RDlcdTY3RTJcdTY3RERcdTY3RDJcdTZCNkFcdTZCODNcdTZCODZcdTZCQjVcdTZCRDJcdTZCRDdcdTZDMUZcdTZDQzlcdTZEMEJcdTZEMzJcdTZEMkFcdTZENDFcdTZEMjVcdTZEMENcdTZEMzFcdTZEMUVcdTZEMTdcIl0sXG5bXCJhY2ExXCIsXCJcdTZEM0JcdTZEM0RcdTZEM0VcdTZEMzZcdTZEMUJcdTZDRjVcdTZEMzlcdTZEMjdcdTZEMzhcdTZEMjlcdTZEMkVcdTZEMzVcdTZEMEVcdTZEMkJcdTcwQUJcdTcwQkFcdTcwQjNcdTcwQUNcdTcwQUZcdTcwQURcdTcwQjhcdTcwQUVcdTcwQTRcdTcyMzBcdTcyNzJcdTcyNkZcdTcyNzRcdTcyRTlcdTcyRTBcdTcyRTFcdTczQjdcdTczQ0FcdTczQkJcdTczQjJcdTczQ0RcdTczQzBcdTczQjNcdTc1MUFcdTc1MkRcdTc1NEZcdTc1NENcdTc1NEVcdTc1NEJcdTc1QUJcdTc1QTRcdTc1QTVcdTc1QTJcdTc1QTNcdTc2NzhcdTc2ODZcdTc2ODdcdTc2ODhcdTc2QzhcdTc2QzZcdTc2QzNcdTc2QzVcdTc3MDFcdTc2RjlcdTc2RjhcdTc3MDlcdTc3MEJcdTc2RkVcdTc2RkNcdTc3MDdcdTc3RENcdTc4MDJcdTc4MTRcdTc4MENcdTc4MERcdTc5NDZcdTc5NDlcdTc5NDhcdTc5NDdcdTc5QjlcdTc5QkFcdTc5RDFcdTc5RDJcdTc5Q0JcdTdBN0ZcdTdBODFcdTdBRkZcdTdBRkRcdTdDN0RcdTdEMDJcdTdEMDVcdTdEMDBcdTdEMDlcdTdEMDdcdTdEMDRcdTdEMDZcdTdGMzhcdTdGOEVcdTdGQkZcdTgwMDRcIl0sXG5bXCJhZDQwXCIsXCJcdTgwMTBcdTgwMERcdTgwMTFcdTgwMzZcdTgwRDZcdTgwRTVcdTgwREFcdTgwQzNcdTgwQzRcdTgwQ0NcdTgwRTFcdTgwREJcdTgwQ0VcdTgwREVcdTgwRTRcdTgwRERcdTgxRjRcdTgyMjJcdTgyRTdcdTgzMDNcdTgzMDVcdTgyRTNcdTgyREJcdTgyRTZcdTgzMDRcdTgyRTVcdTgzMDJcdTgzMDlcdTgyRDJcdTgyRDdcdTgyRjFcdTgzMDFcdTgyRENcdTgyRDRcdTgyRDFcdTgyREVcdTgyRDNcdTgyREZcdTgyRUZcdTgzMDZcdTg2NTBcdTg2NzlcdTg2N0JcdTg2N0FcdTg4NERcdTg4NkJcdTg5ODFcdTg5RDRcdThBMDhcdThBMDJcdThBMDNcdThDOUVcdThDQTBcdThENzRcdThENzNcdThEQjRcdThFQ0RcdThFQ0NcdThGRjBcdThGRTZcdThGRTJcdThGRUFcdThGRTVcIl0sXG5bXCJhZGExXCIsXCJcdThGRURcdThGRUJcdThGRTRcdThGRThcdTkwQ0FcdTkwQ0VcdTkwQzFcdTkwQzNcdTkxNEJcdTkxNEFcdTkxQ0RcdTk1ODJcdTk2NTBcdTk2NEJcdTk2NENcdTk2NERcdTk3NjJcdTk3NjlcdTk3Q0JcdTk3RURcdTk3RjNcdTk4MDFcdTk4QThcdTk4REJcdTk4REZcdTk5OTZcdTk5OTlcdTRFNThcdTRFQjNcdTUwMENcdTUwMERcdTUwMjNcdTRGRUZcdTUwMjZcdTUwMjVcdTRGRjhcdTUwMjlcdTUwMTZcdTUwMDZcdTUwM0NcdTUwMUZcdTUwMUFcdTUwMTJcdTUwMTFcdTRGRkFcdTUwMDBcdTUwMTRcdTUwMjhcdTRGRjFcdTUwMjFcdTUwMEJcdTUwMTlcdTUwMThcdTRGRjNcdTRGRUVcdTUwMkRcdTUwMkFcdTRGRkVcdTUwMkJcdTUwMDlcdTUxN0NcdTUxQTRcdTUxQTVcdTUxQTJcdTUxQ0RcdTUxQ0NcdTUxQzZcdTUxQ0JcdTUyNTZcdTUyNUNcdTUyNTRcdTUyNUJcdTUyNURcdTUzMkFcdTUzN0ZcdTUzOUZcdTUzOURcdTUzREZcdTU0RThcdTU1MTBcdTU1MDFcdTU1MzdcdTU0RkNcdTU0RTVcdTU0RjJcdTU1MDZcdTU0RkFcdTU1MTRcdTU0RTlcdTU0RURcdTU0RTFcdTU1MDlcdTU0RUVcdTU0RUFcIl0sXG5bXCJhZTQwXCIsXCJcdTU0RTZcdTU1MjdcdTU1MDdcdTU0RkRcdTU1MEZcdTU3MDNcdTU3MDRcdTU3QzJcdTU3RDRcdTU3Q0JcdTU3QzNcdTU4MDlcdTU5MEZcdTU5NTdcdTU5NThcdTU5NUFcdTVBMTFcdTVBMThcdTVBMUNcdTVBMUZcdTVBMUJcdTVBMTNcdTU5RUNcdTVBMjBcdTVBMjNcdTVBMjlcdTVBMjVcdTVBMENcdTVBMDlcdTVCNkJcdTVDNThcdTVCQjBcdTVCQjNcdTVCQjZcdTVCQjRcdTVCQUVcdTVCQjVcdTVCQjlcdTVCQjhcdTVDMDRcdTVDNTFcdTVDNTVcdTVDNTBcdTVDRURcdTVDRkRcdTVDRkJcdTVDRUFcdTVDRThcdTVDRjBcdTVDRjZcdTVEMDFcdTVDRjRcdTVERUVcdTVFMkRcdTVFMkJcdTVFQUJcdTVFQURcdTVFQTdcdTVGMzFcdTVGOTJcdTVGOTFcdTVGOTBcdTYwNTlcIl0sXG5bXCJhZWExXCIsXCJcdTYwNjNcdTYwNjVcdTYwNTBcdTYwNTVcdTYwNkRcdTYwNjlcdTYwNkZcdTYwODRcdTYwOUZcdTYwOUFcdTYwOERcdTYwOTRcdTYwOENcdTYwODVcdTYwOTZcdTYyNDdcdTYyRjNcdTYzMDhcdTYyRkZcdTYzNEVcdTYzM0VcdTYzMkZcdTYzNTVcdTYzNDJcdTYzNDZcdTYzNEZcdTYzNDlcdTYzM0FcdTYzNTBcdTYzM0RcdTYzMkFcdTYzMkJcdTYzMjhcdTYzNERcdTYzNENcdTY1NDhcdTY1NDlcdTY1OTlcdTY1QzFcdTY1QzVcdTY2NDJcdTY2NDlcdTY2NEZcdTY2NDNcdTY2NTJcdTY2NENcdTY2NDVcdTY2NDFcdTY2RjhcdTY3MTRcdTY3MTVcdTY3MTdcdTY4MjFcdTY4MzhcdTY4NDhcdTY4NDZcdTY4NTNcdTY4MzlcdTY4NDJcdTY4NTRcdTY4MjlcdTY4QjNcdTY4MTdcdTY4NENcdTY4NTFcdTY4M0RcdTY3RjRcdTY4NTBcdTY4NDBcdTY4M0NcdTY4NDNcdTY4MkFcdTY4NDVcdTY4MTNcdTY4MThcdTY4NDFcdTZCOEFcdTZCODlcdTZCQjdcdTZDMjNcdTZDMjdcdTZDMjhcdTZDMjZcdTZDMjRcdTZDRjBcdTZENkFcdTZEOTVcdTZEODhcdTZEODdcdTZENjZcdTZENzhcdTZENzdcdTZENTlcdTZEOTNcIl0sXG5bXCJhZjQwXCIsXCJcdTZENkNcdTZEODlcdTZENkVcdTZENUFcdTZENzRcdTZENjlcdTZEOENcdTZEOEFcdTZENzlcdTZEODVcdTZENjVcdTZEOTRcdTcwQ0FcdTcwRDhcdTcwRTRcdTcwRDlcdTcwQzhcdTcwQ0ZcdTcyMzlcdTcyNzlcdTcyRkNcdTcyRjlcdTcyRkRcdTcyRjhcdTcyRjdcdTczODZcdTczRURcdTc0MDlcdTczRUVcdTczRTBcdTczRUFcdTczREVcdTc1NTRcdTc1NURcdTc1NUNcdTc1NUFcdTc1NTlcdTc1QkVcdTc1QzVcdTc1QzdcdTc1QjJcdTc1QjNcdTc1QkRcdTc1QkNcdTc1QjlcdTc1QzJcdTc1QjhcdTc2OEJcdTc2QjBcdTc2Q0FcdTc2Q0RcdTc2Q0VcdTc3MjlcdTc3MUZcdTc3MjBcdTc3MjhcdTc3RTlcdTc4MzBcdTc4MjdcdTc4MzhcdTc4MURcdTc4MzRcdTc4MzdcIl0sXG5bXCJhZmExXCIsXCJcdTc4MjVcdTc4MkRcdTc4MjBcdTc4MUZcdTc4MzJcdTc5NTVcdTc5NTBcdTc5NjBcdTc5NUZcdTc5NTZcdTc5NUVcdTc5NURcdTc5NTdcdTc5NUFcdTc5RTRcdTc5RTNcdTc5RTdcdTc5REZcdTc5RTZcdTc5RTlcdTc5RDhcdTdBODRcdTdBODhcdTdBRDlcdTdCMDZcdTdCMTFcdTdDODlcdTdEMjFcdTdEMTdcdTdEMEJcdTdEMEFcdTdEMjBcdTdEMjJcdTdEMTRcdTdEMTBcdTdEMTVcdTdEMUFcdTdEMUNcdTdEMERcdTdEMTlcdTdEMUJcdTdGM0FcdTdGNUZcdTdGOTRcdTdGQzVcdTdGQzFcdTgwMDZcdTgwMThcdTgwMTVcdTgwMTlcdTgwMTdcdTgwM0RcdTgwM0ZcdTgwRjFcdTgxMDJcdTgwRjBcdTgxMDVcdTgwRURcdTgwRjRcdTgxMDZcdTgwRjhcdTgwRjNcdTgxMDhcdTgwRkRcdTgxMEFcdTgwRkNcdTgwRUZcdTgxRURcdTgxRUNcdTgyMDBcdTgyMTBcdTgyMkFcdTgyMkJcdTgyMjhcdTgyMkNcdTgyQkJcdTgzMkJcdTgzNTJcdTgzNTRcdTgzNEFcdTgzMzhcdTgzNTBcdTgzNDlcdTgzMzVcdTgzMzRcdTgzNEZcdTgzMzJcdTgzMzlcdTgzMzZcdTgzMTdcdTgzNDBcdTgzMzFcdTgzMjhcdTgzNDNcIl0sXG5bXCJiMDQwXCIsXCJcdTg2NTRcdTg2OEFcdTg2QUFcdTg2OTNcdTg2QTRcdTg2QTlcdTg2OENcdTg2QTNcdTg2OUNcdTg4NzBcdTg4NzdcdTg4ODFcdTg4ODJcdTg4N0RcdTg4NzlcdThBMThcdThBMTBcdThBMEVcdThBMENcdThBMTVcdThBMEFcdThBMTdcdThBMTNcdThBMTZcdThBMEZcdThBMTFcdThDNDhcdThDN0FcdThDNzlcdThDQTFcdThDQTJcdThENzdcdThFQUNcdThFRDJcdThFRDRcdThFQ0ZcdThGQjFcdTkwMDFcdTkwMDZcdThGRjdcdTkwMDBcdThGRkFcdThGRjRcdTkwMDNcdThGRkRcdTkwMDVcdThGRjhcdTkwOTVcdTkwRTFcdTkwRERcdTkwRTJcdTkxNTJcdTkxNERcdTkxNENcdTkxRDhcdTkxRERcdTkxRDdcdTkxRENcdTkxRDlcdTk1ODNcdTk2NjJcdTk2NjNcdTk2NjFcIl0sXG5bXCJiMGExXCIsXCJcdTk2NUJcdTk2NURcdTk2NjRcdTk2NThcdTk2NUVcdTk2QkJcdTk4RTJcdTk5QUNcdTlBQThcdTlBRDhcdTlCMjVcdTlCMzJcdTlCM0NcdTRFN0VcdTUwN0FcdTUwN0RcdTUwNUNcdTUwNDdcdTUwNDNcdTUwNENcdTUwNUFcdTUwNDlcdTUwNjVcdTUwNzZcdTUwNEVcdTUwNTVcdTUwNzVcdTUwNzRcdTUwNzdcdTUwNEZcdTUwMEZcdTUwNkZcdTUwNkRcdTUxNUNcdTUxOTVcdTUxRjBcdTUyNkFcdTUyNkZcdTUyRDJcdTUyRDlcdTUyRDhcdTUyRDVcdTUzMTBcdTUzMEZcdTUzMTlcdTUzM0ZcdTUzNDBcdTUzM0VcdTUzQzNcdTY2RkNcdTU1NDZcdTU1NkFcdTU1NjZcdTU1NDRcdTU1NUVcdTU1NjFcdTU1NDNcdTU1NEFcdTU1MzFcdTU1NTZcdTU1NEZcdTU1NTVcdTU1MkZcdTU1NjRcdTU1MzhcdTU1MkVcdTU1NUNcdTU1MkNcdTU1NjNcdTU1MzNcdTU1NDFcdTU1NTdcdTU3MDhcdTU3MEJcdTU3MDlcdTU3REZcdTU4MDVcdTU4MEFcdTU4MDZcdTU3RTBcdTU3RTRcdTU3RkFcdTU4MDJcdTU4MzVcdTU3RjdcdTU3RjlcdTU5MjBcdTU5NjJcdTVBMzZcdTVBNDFcdTVBNDlcdTVBNjZcdTVBNkFcdTVBNDBcIl0sXG5bXCJiMTQwXCIsXCJcdTVBM0NcdTVBNjJcdTVBNUFcdTVBNDZcdTVBNEFcdTVCNzBcdTVCQzdcdTVCQzVcdTVCQzRcdTVCQzJcdTVCQkZcdTVCQzZcdTVDMDlcdTVDMDhcdTVDMDdcdTVDNjBcdTVDNUNcdTVDNURcdTVEMDdcdTVEMDZcdTVEMEVcdTVEMUJcdTVEMTZcdTVEMjJcdTVEMTFcdTVEMjlcdTVEMTRcdTVEMTlcdTVEMjRcdTVEMjdcdTVEMTdcdTVERTJcdTVFMzhcdTVFMzZcdTVFMzNcdTVFMzdcdTVFQjdcdTVFQjhcdTVFQjZcdTVFQjVcdTVFQkVcdTVGMzVcdTVGMzdcdTVGNTdcdTVGNkNcdTVGNjlcdTVGNkJcdTVGOTdcdTVGOTlcdTVGOUVcdTVGOThcdTVGQTFcdTVGQTBcdTVGOUNcdTYwN0ZcdTYwQTNcdTYwODlcdTYwQTBcdTYwQThcdTYwQ0JcdTYwQjRcdTYwRTZcdTYwQkRcIl0sXG5bXCJiMWExXCIsXCJcdTYwQzVcdTYwQkJcdTYwQjVcdTYwRENcdTYwQkNcdTYwRDhcdTYwRDVcdTYwQzZcdTYwREZcdTYwQjhcdTYwREFcdTYwQzdcdTYyMUFcdTYyMUJcdTYyNDhcdTYzQTBcdTYzQTdcdTYzNzJcdTYzOTZcdTYzQTJcdTYzQTVcdTYzNzdcdTYzNjdcdTYzOThcdTYzQUFcdTYzNzFcdTYzQTlcdTYzODlcdTYzODNcdTYzOUJcdTYzNkJcdTYzQThcdTYzODRcdTYzODhcdTYzOTlcdTYzQTFcdTYzQUNcdTYzOTJcdTYzOEZcdTYzODBcdTYzN0JcdTYzNjlcdTYzNjhcdTYzN0FcdTY1NURcdTY1NTZcdTY1NTFcdTY1NTlcdTY1NTdcdTU1NUZcdTY1NEZcdTY1NThcdTY1NTVcdTY1NTRcdTY1OUNcdTY1OUJcdTY1QUNcdTY1Q0ZcdTY1Q0JcdTY1Q0NcdTY1Q0VcdTY2NURcdTY2NUFcdTY2NjRcdTY2NjhcdTY2NjZcdTY2NUVcdTY2RjlcdTUyRDdcdTY3MUJcdTY4ODFcdTY4QUZcdTY4QTJcdTY4OTNcdTY4QjVcdTY4N0ZcdTY4NzZcdTY4QjFcdTY4QTdcdTY4OTdcdTY4QjBcdTY4ODNcdTY4QzRcdTY4QURcdTY4ODZcdTY4ODVcdTY4OTRcdTY4OURcdTY4QThcdTY4OUZcdTY4QTFcdTY4ODJcdTZCMzJcdTZCQkFcIl0sXG5bXCJiMjQwXCIsXCJcdTZCRUJcdTZCRUNcdTZDMkJcdTZEOEVcdTZEQkNcdTZERjNcdTZERDlcdTZEQjJcdTZERTFcdTZEQ0NcdTZERTRcdTZERkJcdTZERkFcdTZFMDVcdTZEQzdcdTZEQ0JcdTZEQUZcdTZERDFcdTZEQUVcdTZEREVcdTZERjlcdTZEQjhcdTZERjdcdTZERjVcdTZEQzVcdTZERDJcdTZFMUFcdTZEQjVcdTZEREFcdTZERUJcdTZERDhcdTZERUFcdTZERjFcdTZERUVcdTZERThcdTZEQzZcdTZEQzRcdTZEQUFcdTZERUNcdTZEQkZcdTZERTZcdTcwRjlcdTcxMDlcdTcxMEFcdTcwRkRcdTcwRUZcdTcyM0RcdTcyN0RcdTcyODFcdTczMUNcdTczMUJcdTczMTZcdTczMTNcdTczMTlcdTczODdcdTc0MDVcdTc0MEFcdTc0MDNcdTc0MDZcdTczRkVcdTc0MERcdTc0RTBcdTc0RjZcIl0sXG5bXCJiMmExXCIsXCJcdTc0RjdcdTc1MUNcdTc1MjJcdTc1NjVcdTc1NjZcdTc1NjJcdTc1NzBcdTc1OEZcdTc1RDRcdTc1RDVcdTc1QjVcdTc1Q0FcdTc1Q0RcdTc2OEVcdTc2RDRcdTc2RDJcdTc2REJcdTc3MzdcdTc3M0VcdTc3M0NcdTc3MzZcdTc3MzhcdTc3M0FcdTc4NkJcdTc4NDNcdTc4NEVcdTc5NjVcdTc5NjhcdTc5NkRcdTc5RkJcdTdBOTJcdTdBOTVcdTdCMjBcdTdCMjhcdTdCMUJcdTdCMkNcdTdCMjZcdTdCMTlcdTdCMUVcdTdCMkVcdTdDOTJcdTdDOTdcdTdDOTVcdTdENDZcdTdENDNcdTdENzFcdTdEMkVcdTdEMzlcdTdEM0NcdTdENDBcdTdEMzBcdTdEMzNcdTdENDRcdTdEMkZcdTdENDJcdTdEMzJcdTdEMzFcdTdGM0RcdTdGOUVcdTdGOUFcdTdGQ0NcdTdGQ0VcdTdGRDJcdTgwMUNcdTgwNEFcdTgwNDZcdTgxMkZcdTgxMTZcdTgxMjNcdTgxMkJcdTgxMjlcdTgxMzBcdTgxMjRcdTgyMDJcdTgyMzVcdTgyMzdcdTgyMzZcdTgyMzlcdTgzOEVcdTgzOUVcdTgzOThcdTgzNzhcdTgzQTJcdTgzOTZcdTgzQkRcdTgzQUJcdTgzOTJcdTgzOEFcdTgzOTNcdTgzODlcdTgzQTBcdTgzNzdcdTgzN0JcdTgzN0NcIl0sXG5bXCJiMzQwXCIsXCJcdTgzODZcdTgzQTdcdTg2NTVcdTVGNkFcdTg2QzdcdTg2QzBcdTg2QjZcdTg2QzRcdTg2QjVcdTg2QzZcdTg2Q0JcdTg2QjFcdTg2QUZcdTg2QzlcdTg4NTNcdTg4OUVcdTg4ODhcdTg4QUJcdTg4OTJcdTg4OTZcdTg4OERcdTg4OEJcdTg5OTNcdTg5OEZcdThBMkFcdThBMURcdThBMjNcdThBMjVcdThBMzFcdThBMkRcdThBMUZcdThBMUJcdThBMjJcdThDNDlcdThDNUFcdThDQTlcdThDQUNcdThDQUJcdThDQThcdThDQUFcdThDQTdcdThENjdcdThENjZcdThEQkVcdThEQkFcdThFREJcdThFREZcdTkwMTlcdTkwMERcdTkwMUFcdTkwMTdcdTkwMjNcdTkwMUZcdTkwMURcdTkwMTBcdTkwMTVcdTkwMUVcdTkwMjBcdTkwMEZcdTkwMjJcdTkwMTZcdTkwMUJcdTkwMTRcIl0sXG5bXCJiM2ExXCIsXCJcdTkwRThcdTkwRURcdTkwRkRcdTkxNTdcdTkxQ0VcdTkxRjVcdTkxRTZcdTkxRTNcdTkxRTdcdTkxRURcdTkxRTlcdTk1ODlcdTk2NkFcdTk2NzVcdTk2NzNcdTk2NzhcdTk2NzBcdTk2NzRcdTk2NzZcdTk2NzdcdTk2NkNcdTk2QzBcdTk2RUFcdTk2RTlcdTdBRTBcdTdBREZcdTk4MDJcdTk4MDNcdTlCNUFcdTlDRTVcdTlFNzVcdTlFN0ZcdTlFQTVcdTlFQkJcdTUwQTJcdTUwOERcdTUwODVcdTUwOTlcdTUwOTFcdTUwODBcdTUwOTZcdTUwOThcdTUwOUFcdTY3MDBcdTUxRjFcdTUyNzJcdTUyNzRcdTUyNzVcdTUyNjlcdTUyREVcdTUyRERcdTUyREJcdTUzNUFcdTUzQTVcdTU1N0JcdTU1ODBcdTU1QTdcdTU1N0NcdTU1OEFcdTU1OURcdTU1OThcdTU1ODJcdTU1OUNcdTU1QUFcdTU1OTRcdTU1ODdcdTU1OEJcdTU1ODNcdTU1QjNcdTU1QUVcdTU1OUZcdTU1M0VcdTU1QjJcdTU1OUFcdTU1QkJcdTU1QUNcdTU1QjFcdTU1N0VcdTU1ODlcdTU1QUJcdTU1OTlcdTU3MERcdTU4MkZcdTU4MkFcdTU4MzRcdTU4MjRcdTU4MzBcdTU4MzFcdTU4MjFcdTU4MURcdTU4MjBcdTU4RjlcdTU4RkFcdTU5NjBcIl0sXG5bXCJiNDQwXCIsXCJcdTVBNzdcdTVBOUFcdTVBN0ZcdTVBOTJcdTVBOUJcdTVBQTdcdTVCNzNcdTVCNzFcdTVCRDJcdTVCQ0NcdTVCRDNcdTVCRDBcdTVDMEFcdTVDMEJcdTVDMzFcdTVENENcdTVENTBcdTVEMzRcdTVENDdcdTVERkRcdTVFNDVcdTVFM0RcdTVFNDBcdTVFNDNcdTVFN0VcdTVFQ0FcdTVFQzFcdTVFQzJcdTVFQzRcdTVGM0NcdTVGNkRcdTVGQTlcdTVGQUFcdTVGQThcdTYwRDFcdTYwRTFcdTYwQjJcdTYwQjZcdTYwRTBcdTYxMUNcdTYxMjNcdTYwRkFcdTYxMTVcdTYwRjBcdTYwRkJcdTYwRjRcdTYxNjhcdTYwRjFcdTYxMEVcdTYwRjZcdTYxMDlcdTYxMDBcdTYxMTJcdTYyMUZcdTYyNDlcdTYzQTNcdTYzOENcdTYzQ0ZcdTYzQzBcdTYzRTlcdTYzQzlcdTYzQzZcdTYzQ0RcIl0sXG5bXCJiNGExXCIsXCJcdTYzRDJcdTYzRTNcdTYzRDBcdTYzRTFcdTYzRDZcdTYzRURcdTYzRUVcdTYzNzZcdTYzRjRcdTYzRUFcdTYzREJcdTY0NTJcdTYzREFcdTYzRjlcdTY1NUVcdTY1NjZcdTY1NjJcdTY1NjNcdTY1OTFcdTY1OTBcdTY1QUZcdTY2NkVcdTY2NzBcdTY2NzRcdTY2NzZcdTY2NkZcdTY2OTFcdTY2N0FcdTY2N0VcdTY2NzdcdTY2RkVcdTY2RkZcdTY3MUZcdTY3MURcdTY4RkFcdTY4RDVcdTY4RTBcdTY4RDhcdTY4RDdcdTY5MDVcdTY4REZcdTY4RjVcdTY4RUVcdTY4RTdcdTY4RjlcdTY4RDJcdTY4RjJcdTY4RTNcdTY4Q0JcdTY4Q0RcdTY5MERcdTY5MTJcdTY5MEVcdTY4QzlcdTY4REFcdTY5NkVcdTY4RkJcdTZCM0VcdTZCM0FcdTZCM0RcdTZCOThcdTZCOTZcdTZCQkNcdTZCRUZcdTZDMkVcdTZDMkZcdTZDMkNcdTZFMkZcdTZFMzhcdTZFNTRcdTZFMjFcdTZFMzJcdTZFNjdcdTZFNEFcdTZFMjBcdTZFMjVcdTZFMjNcdTZFMUJcdTZFNUJcdTZFNThcdTZFMjRcdTZFNTZcdTZFNkVcdTZFMkRcdTZFMjZcdTZFNkZcdTZFMzRcdTZFNERcdTZFM0FcdTZFMkNcdTZFNDNcdTZFMURcdTZFM0VcdTZFQ0JcIl0sXG5bXCJiNTQwXCIsXCJcdTZFODlcdTZFMTlcdTZFNEVcdTZFNjNcdTZFNDRcdTZFNzJcdTZFNjlcdTZFNUZcdTcxMTlcdTcxMUFcdTcxMjZcdTcxMzBcdTcxMjFcdTcxMzZcdTcxNkVcdTcxMUNcdTcyNENcdTcyODRcdTcyODBcdTczMzZcdTczMjVcdTczMzRcdTczMjlcdTc0M0FcdTc0MkFcdTc0MzNcdTc0MjJcdTc0MjVcdTc0MzVcdTc0MzZcdTc0MzRcdTc0MkZcdTc0MUJcdTc0MjZcdTc0MjhcdTc1MjVcdTc1MjZcdTc1NkJcdTc1NkFcdTc1RTJcdTc1REJcdTc1RTNcdTc1RDlcdTc1RDhcdTc1REVcdTc1RTBcdTc2N0JcdTc2N0NcdTc2OTZcdTc2OTNcdTc2QjRcdTc2RENcdTc3NEZcdTc3RURcdTc4NURcdTc4NkNcdTc4NkZcdTdBMERcdTdBMDhcdTdBMEJcdTdBMDVcdTdBMDBcdTdBOThcIl0sXG5bXCJiNWExXCIsXCJcdTdBOTdcdTdBOTZcdTdBRTVcdTdBRTNcdTdCNDlcdTdCNTZcdTdCNDZcdTdCNTBcdTdCNTJcdTdCNTRcdTdCNERcdTdCNEJcdTdCNEZcdTdCNTFcdTdDOUZcdTdDQTVcdTdENUVcdTdENTBcdTdENjhcdTdENTVcdTdEMkJcdTdENkVcdTdENzJcdTdENjFcdTdENjZcdTdENjJcdTdENzBcdTdENzNcdTU1ODRcdTdGRDRcdTdGRDVcdTgwMEJcdTgwNTJcdTgwODVcdTgxNTVcdTgxNTRcdTgxNEJcdTgxNTFcdTgxNEVcdTgxMzlcdTgxNDZcdTgxM0VcdTgxNENcdTgxNTNcdTgxNzRcdTgyMTJcdTgyMUNcdTgzRTlcdTg0MDNcdTgzRjhcdTg0MERcdTgzRTBcdTgzQzVcdTg0MEJcdTgzQzFcdTgzRUZcdTgzRjFcdTgzRjRcdTg0NTdcdTg0MEFcdTgzRjBcdTg0MENcdTgzQ0NcdTgzRkRcdTgzRjJcdTgzQ0FcdTg0MzhcdTg0MEVcdTg0MDRcdTgzRENcdTg0MDdcdTgzRDRcdTgzREZcdTg2NUJcdTg2REZcdTg2RDlcdTg2RURcdTg2RDRcdTg2REJcdTg2RTRcdTg2RDBcdTg2REVcdTg4NTdcdTg4QzFcdTg4QzJcdTg4QjFcdTg5ODNcdTg5OTZcdThBM0JcdThBNjBcdThBNTVcdThBNUVcdThBM0NcdThBNDFcIl0sXG5bXCJiNjQwXCIsXCJcdThBNTRcdThBNUJcdThBNTBcdThBNDZcdThBMzRcdThBM0FcdThBMzZcdThBNTZcdThDNjFcdThDODJcdThDQUZcdThDQkNcdThDQjNcdThDQkRcdThDQzFcdThDQkJcdThDQzBcdThDQjRcdThDQjdcdThDQjZcdThDQkZcdThDQjhcdThEOEFcdThEODVcdThEODFcdThEQ0VcdThERERcdThEQ0JcdThEREFcdThERDFcdThEQ0NcdThEREJcdThEQzZcdThFRkJcdThFRjhcdThFRkNcdThGOUNcdTkwMkVcdTkwMzVcdTkwMzFcdTkwMzhcdTkwMzJcdTkwMzZcdTkxMDJcdTkwRjVcdTkxMDlcdTkwRkVcdTkxNjNcdTkxNjVcdTkxQ0ZcdTkyMTRcdTkyMTVcdTkyMjNcdTkyMDlcdTkyMUVcdTkyMERcdTkyMTBcdTkyMDdcdTkyMTFcdTk1OTRcdTk1OEZcdTk1OEJcdTk1OTFcIl0sXG5bXCJiNmExXCIsXCJcdTk1OTNcdTk1OTJcdTk1OEVcdTk2OEFcdTk2OEVcdTk2OEJcdTk2N0RcdTk2ODVcdTk2ODZcdTk2OERcdTk2NzJcdTk2ODRcdTk2QzFcdTk2QzVcdTk2QzRcdTk2QzZcdTk2QzdcdTk2RUZcdTk2RjJcdTk3Q0NcdTk4MDVcdTk4MDZcdTk4MDhcdTk4RTdcdTk4RUFcdTk4RUZcdTk4RTlcdTk4RjJcdTk4RURcdTk5QUVcdTk5QURcdTlFQzNcdTlFQ0RcdTlFRDFcdTRFODJcdTUwQURcdTUwQjVcdTUwQjJcdTUwQjNcdTUwQzVcdTUwQkVcdTUwQUNcdTUwQjdcdTUwQkJcdTUwQUZcdTUwQzdcdTUyN0ZcdTUyNzdcdTUyN0RcdTUyREZcdTUyRTZcdTUyRTRcdTUyRTJcdTUyRTNcdTUzMkZcdTU1REZcdTU1RThcdTU1RDNcdTU1RTZcdTU1Q0VcdTU1RENcdTU1QzdcdTU1RDFcdTU1RTNcdTU1RTRcdTU1RUZcdTU1REFcdTU1RTFcdTU1QzVcdTU1QzZcdTU1RTVcdTU1QzlcdTU3MTJcdTU3MTNcdTU4NUVcdTU4NTFcdTU4NThcdTU4NTdcdTU4NUFcdTU4NTRcdTU4NkJcdTU4NENcdTU4NkRcdTU4NEFcdTU4NjJcdTU4NTJcdTU4NEJcdTU5NjdcdTVBQzFcdTVBQzlcdTVBQ0NcdTVBQkVcdTVBQkRcdTVBQkNcIl0sXG5bXCJiNzQwXCIsXCJcdTVBQjNcdTVBQzJcdTVBQjJcdTVENjlcdTVENkZcdTVFNENcdTVFNzlcdTVFQzlcdTVFQzhcdTVGMTJcdTVGNTlcdTVGQUNcdTVGQUVcdTYxMUFcdTYxMEZcdTYxNDhcdTYxMUZcdTYwRjNcdTYxMUJcdTYwRjlcdTYxMDFcdTYxMDhcdTYxNEVcdTYxNENcdTYxNDRcdTYxNERcdTYxM0VcdTYxMzRcdTYxMjdcdTYxMERcdTYxMDZcdTYxMzdcdTYyMjFcdTYyMjJcdTY0MTNcdTY0M0VcdTY0MUVcdTY0MkFcdTY0MkRcdTY0M0RcdTY0MkNcdTY0MEZcdTY0MUNcdTY0MTRcdTY0MERcdTY0MzZcdTY0MTZcdTY0MTdcdTY0MDZcdTY1NkNcdTY1OUZcdTY1QjBcdTY2OTdcdTY2ODlcdTY2ODdcdTY2ODhcdTY2OTZcdTY2ODRcdTY2OThcdTY2OERcdTY3MDNcdTY5OTRcdTY5NkRcIl0sXG5bXCJiN2ExXCIsXCJcdTY5NUFcdTY5NzdcdTY5NjBcdTY5NTRcdTY5NzVcdTY5MzBcdTY5ODJcdTY5NEFcdTY5NjhcdTY5NkJcdTY5NUVcdTY5NTNcdTY5NzlcdTY5ODZcdTY5NURcdTY5NjNcdTY5NUJcdTZCNDdcdTZCNzJcdTZCQzBcdTZCQkZcdTZCRDNcdTZCRkRcdTZFQTJcdTZFQUZcdTZFRDNcdTZFQjZcdTZFQzJcdTZFOTBcdTZFOURcdTZFQzdcdTZFQzVcdTZFQTVcdTZFOThcdTZFQkNcdTZFQkFcdTZFQUJcdTZFRDFcdTZFOTZcdTZFOUNcdTZFQzRcdTZFRDRcdTZFQUFcdTZFQTdcdTZFQjRcdTcxNEVcdTcxNTlcdTcxNjlcdTcxNjRcdTcxNDlcdTcxNjdcdTcxNUNcdTcxNkNcdTcxNjZcdTcxNENcdTcxNjVcdTcxNUVcdTcxNDZcdTcxNjhcdTcxNTZcdTcyM0FcdTcyNTJcdTczMzdcdTczNDVcdTczM0ZcdTczM0VcdTc0NkZcdTc0NUFcdTc0NTVcdTc0NUZcdTc0NUVcdTc0NDFcdTc0M0ZcdTc0NTlcdTc0NUJcdTc0NUNcdTc1NzZcdTc1NzhcdTc2MDBcdTc1RjBcdTc2MDFcdTc1RjJcdTc1RjFcdTc1RkFcdTc1RkZcdTc1RjRcdTc1RjNcdTc2REVcdTc2REZcdTc3NUJcdTc3NkJcdTc3NjZcdTc3NUVcdTc3NjNcIl0sXG5bXCJiODQwXCIsXCJcdTc3NzlcdTc3NkFcdTc3NkNcdTc3NUNcdTc3NjVcdTc3NjhcdTc3NjJcdTc3RUVcdTc4OEVcdTc4QjBcdTc4OTdcdTc4OThcdTc4OENcdTc4ODlcdTc4N0NcdTc4OTFcdTc4OTNcdTc4N0ZcdTc5N0FcdTc5N0ZcdTc5ODFcdTg0MkNcdTc5QkRcdTdBMUNcdTdBMUFcdTdBMjBcdTdBMTRcdTdBMUZcdTdBMUVcdTdBOUZcdTdBQTBcdTdCNzdcdTdCQzBcdTdCNjBcdTdCNkVcdTdCNjdcdTdDQjFcdTdDQjNcdTdDQjVcdTdEOTNcdTdENzlcdTdEOTFcdTdEODFcdTdEOEZcdTdENUJcdTdGNkVcdTdGNjlcdTdGNkFcdTdGNzJcdTdGQTlcdTdGQThcdTdGQTRcdTgwNTZcdTgwNThcdTgwODZcdTgwODRcdTgxNzFcdTgxNzBcdTgxNzhcdTgxNjVcdTgxNkVcdTgxNzNcdTgxNkJcIl0sXG5bXCJiOGExXCIsXCJcdTgxNzlcdTgxN0FcdTgxNjZcdTgyMDVcdTgyNDdcdTg0ODJcdTg0NzdcdTg0M0RcdTg0MzFcdTg0NzVcdTg0NjZcdTg0NkJcdTg0NDlcdTg0NkNcdTg0NUJcdTg0M0NcdTg0MzVcdTg0NjFcdTg0NjNcdTg0NjlcdTg0NkRcdTg0NDZcdTg2NUVcdTg2NUNcdTg2NUZcdTg2RjlcdTg3MTNcdTg3MDhcdTg3MDdcdTg3MDBcdTg2RkVcdTg2RkJcdTg3MDJcdTg3MDNcdTg3MDZcdTg3MEFcdTg4NTlcdTg4REZcdTg4RDRcdTg4RDlcdTg4RENcdTg4RDhcdTg4RERcdTg4RTFcdTg4Q0FcdTg4RDVcdTg4RDJcdTg5OUNcdTg5RTNcdThBNkJcdThBNzJcdThBNzNcdThBNjZcdThBNjlcdThBNzBcdThBODdcdThBN0NcdThBNjNcdThBQTBcdThBNzFcdThBODVcdThBNkRcdThBNjJcdThBNkVcdThBNkNcdThBNzlcdThBN0JcdThBM0VcdThBNjhcdThDNjJcdThDOEFcdThDODlcdThDQ0FcdThDQzdcdThDQzhcdThDQzRcdThDQjJcdThDQzNcdThDQzJcdThDQzVcdThERTFcdThEREZcdThERThcdThERUZcdThERjNcdThERkFcdThERUFcdThERTRcdThERTZcdThFQjJcdThGMDNcdThGMDlcdThFRkVcdThGMEFcIl0sXG5bXCJiOTQwXCIsXCJcdThGOUZcdThGQjJcdTkwNEJcdTkwNEFcdTkwNTNcdTkwNDJcdTkwNTRcdTkwM0NcdTkwNTVcdTkwNTBcdTkwNDdcdTkwNEZcdTkwNEVcdTkwNERcdTkwNTFcdTkwM0VcdTkwNDFcdTkxMTJcdTkxMTdcdTkxNkNcdTkxNkFcdTkxNjlcdTkxQzlcdTkyMzdcdTkyNTdcdTkyMzhcdTkyM0RcdTkyNDBcdTkyM0VcdTkyNUJcdTkyNEJcdTkyNjRcdTkyNTFcdTkyMzRcdTkyNDlcdTkyNERcdTkyNDVcdTkyMzlcdTkyM0ZcdTkyNUFcdTk1OThcdTk2OThcdTk2OTRcdTk2OTVcdTk2Q0RcdTk2Q0JcdTk2QzlcdTk2Q0FcdTk2RjdcdTk2RkJcdTk2RjlcdTk2RjZcdTk3NTZcdTk3NzRcdTk3NzZcdTk4MTBcdTk4MTFcdTk4MTNcdTk4MEFcdTk4MTJcdTk4MENcdTk4RkNcdTk4RjRcIl0sXG5bXCJiOWExXCIsXCJcdTk4RkRcdTk4RkVcdTk5QjNcdTk5QjFcdTk5QjRcdTlBRTFcdTlDRTlcdTlFODJcdTlGMEVcdTlGMTNcdTlGMjBcdTUwRTdcdTUwRUVcdTUwRTVcdTUwRDZcdTUwRURcdTUwREFcdTUwRDVcdTUwQ0ZcdTUwRDFcdTUwRjFcdTUwQ0VcdTUwRTlcdTUxNjJcdTUxRjNcdTUyODNcdTUyODJcdTUzMzFcdTUzQURcdTU1RkVcdTU2MDBcdTU2MUJcdTU2MTdcdTU1RkRcdTU2MTRcdTU2MDZcdTU2MDlcdTU2MERcdTU2MEVcdTU1RjdcdTU2MTZcdTU2MUZcdTU2MDhcdTU2MTBcdTU1RjZcdTU3MThcdTU3MTZcdTU4NzVcdTU4N0VcdTU4ODNcdTU4OTNcdTU4OEFcdTU4NzlcdTU4ODVcdTU4N0RcdTU4RkRcdTU5MjVcdTU5MjJcdTU5MjRcdTU5NkFcdTU5NjlcdTVBRTFcdTVBRTZcdTVBRTlcdTVBRDdcdTVBRDZcdTVBRDhcdTVBRTNcdTVCNzVcdTVCREVcdTVCRTdcdTVCRTFcdTVCRTVcdTVCRTZcdTVCRThcdTVCRTJcdTVCRTRcdTVCREZcdTVDMERcdTVDNjJcdTVEODRcdTVEODdcdTVFNUJcdTVFNjNcdTVFNTVcdTVFNTdcdTVFNTRcdTVFRDNcdTVFRDZcdTVGMEFcdTVGNDZcdTVGNzBcdTVGQjlcdTYxNDdcIl0sXG5bXCJiYTQwXCIsXCJcdTYxM0ZcdTYxNEJcdTYxNzdcdTYxNjJcdTYxNjNcdTYxNUZcdTYxNUFcdTYxNThcdTYxNzVcdTYyMkFcdTY0ODdcdTY0NThcdTY0NTRcdTY0QTRcdTY0NzhcdTY0NUZcdTY0N0FcdTY0NTFcdTY0NjdcdTY0MzRcdTY0NkRcdTY0N0JcdTY1NzJcdTY1QTFcdTY1RDdcdTY1RDZcdTY2QTJcdTY2QThcdTY2OURcdTY5OUNcdTY5QThcdTY5OTVcdTY5QzFcdTY5QUVcdTY5RDNcdTY5Q0JcdTY5OUJcdTY5QjdcdTY5QkJcdTY5QUJcdTY5QjRcdTY5RDBcdTY5Q0RcdTY5QURcdTY5Q0NcdTY5QTZcdTY5QzNcdTY5QTNcdTZCNDlcdTZCNENcdTZDMzNcdTZGMzNcdTZGMTRcdTZFRkVcdTZGMTNcdTZFRjRcdTZGMjlcdTZGM0VcdTZGMjBcdTZGMkNcdTZGMEZcdTZGMDJcdTZGMjJcIl0sXG5bXCJiYWExXCIsXCJcdTZFRkZcdTZFRUZcdTZGMDZcdTZGMzFcdTZGMzhcdTZGMzJcdTZGMjNcdTZGMTVcdTZGMkJcdTZGMkZcdTZGODhcdTZGMkFcdTZFRUNcdTZGMDFcdTZFRjJcdTZFQ0NcdTZFRjdcdTcxOTRcdTcxOTlcdTcxN0RcdTcxOEFcdTcxODRcdTcxOTJcdTcyM0VcdTcyOTJcdTcyOTZcdTczNDRcdTczNTBcdTc0NjRcdTc0NjNcdTc0NkFcdTc0NzBcdTc0NkRcdTc1MDRcdTc1OTFcdTc2MjdcdTc2MERcdTc2MEJcdTc2MDlcdTc2MTNcdTc2RTFcdTc2RTNcdTc3ODRcdTc3N0RcdTc3N0ZcdTc3NjFcdTc4QzFcdTc4OUZcdTc4QTdcdTc4QjNcdTc4QTlcdTc4QTNcdTc5OEVcdTc5OEZcdTc5OERcdTdBMkVcdTdBMzFcdTdBQUFcdTdBQTlcdTdBRURcdTdBRUZcdTdCQTFcdTdCOTVcdTdCOEJcdTdCNzVcdTdCOTdcdTdCOURcdTdCOTRcdTdCOEZcdTdCQjhcdTdCODdcdTdCODRcdTdDQjlcdTdDQkRcdTdDQkVcdTdEQkJcdTdEQjBcdTdEOUNcdTdEQkRcdTdEQkVcdTdEQTBcdTdEQ0FcdTdEQjRcdTdEQjJcdTdEQjFcdTdEQkFcdTdEQTJcdTdEQkZcdTdEQjVcdTdEQjhcdTdEQURcdTdERDJcdTdEQzdcdTdEQUNcIl0sXG5bXCJiYjQwXCIsXCJcdTdGNzBcdTdGRTBcdTdGRTFcdTdGREZcdTgwNUVcdTgwNUFcdTgwODdcdTgxNTBcdTgxODBcdTgxOEZcdTgxODhcdTgxOEFcdTgxN0ZcdTgxODJcdTgxRTdcdTgxRkFcdTgyMDdcdTgyMTRcdTgyMUVcdTgyNEJcdTg0QzlcdTg0QkZcdTg0QzZcdTg0QzRcdTg0OTlcdTg0OUVcdTg0QjJcdTg0OUNcdTg0Q0JcdTg0QjhcdTg0QzBcdTg0RDNcdTg0OTBcdTg0QkNcdTg0RDFcdTg0Q0FcdTg3M0ZcdTg3MUNcdTg3M0JcdTg3MjJcdTg3MjVcdTg3MzRcdTg3MThcdTg3NTVcdTg3MzdcdTg3MjlcdTg4RjNcdTg5MDJcdTg4RjRcdTg4RjlcdTg4RjhcdTg4RkRcdTg4RThcdTg5MUFcdTg4RUZcdThBQTZcdThBOENcdThBOUVcdThBQTNcdThBOERcdThBQTFcdThBOTNcdThBQTRcIl0sXG5bXCJiYmExXCIsXCJcdThBQUFcdThBQTVcdThBQThcdThBOThcdThBOTFcdThBOUFcdThBQTdcdThDNkFcdThDOERcdThDOENcdThDRDNcdThDRDFcdThDRDJcdThENkJcdThEOTlcdThEOTVcdThERkNcdThGMTRcdThGMTJcdThGMTVcdThGMTNcdThGQTNcdTkwNjBcdTkwNThcdTkwNUNcdTkwNjNcdTkwNTlcdTkwNUVcdTkwNjJcdTkwNURcdTkwNUJcdTkxMTlcdTkxMThcdTkxMUVcdTkxNzVcdTkxNzhcdTkxNzdcdTkxNzRcdTkyNzhcdTkyODBcdTkyODVcdTkyOThcdTkyOTZcdTkyN0JcdTkyOTNcdTkyOUNcdTkyQThcdTkyN0NcdTkyOTFcdTk1QTFcdTk1QThcdTk1QTlcdTk1QTNcdTk1QTVcdTk1QTRcdTk2OTlcdTk2OUNcdTk2OUJcdTk2Q0NcdTk2RDJcdTk3MDBcdTk3N0NcdTk3ODVcdTk3RjZcdTk4MTdcdTk4MThcdTk4QUZcdTk4QjFcdTk5MDNcdTk5MDVcdTk5MENcdTk5MDlcdTk5QzFcdTlBQUZcdTlBQjBcdTlBRTZcdTlCNDFcdTlCNDJcdTlDRjRcdTlDRjZcdTlDRjNcdTlFQkNcdTlGM0JcdTlGNEFcdTUxMDRcdTUxMDBcdTUwRkJcdTUwRjVcdTUwRjlcdTUxMDJcdTUxMDhcdTUxMDlcdTUxMDVcdTUxRENcIl0sXG5bXCJiYzQwXCIsXCJcdTUyODdcdTUyODhcdTUyODlcdTUyOERcdTUyOEFcdTUyRjBcdTUzQjJcdTU2MkVcdTU2M0JcdTU2MzlcdTU2MzJcdTU2M0ZcdTU2MzRcdTU2MjlcdTU2NTNcdTU2NEVcdTU2NTdcdTU2NzRcdTU2MzZcdTU2MkZcdTU2MzBcdTU4ODBcdTU4OUZcdTU4OUVcdTU4QjNcdTU4OUNcdTU4QUVcdTU4QTlcdTU4QTZcdTU5NkRcdTVCMDlcdTVBRkJcdTVCMEJcdTVBRjVcdTVCMENcdTVCMDhcdTVCRUVcdTVCRUNcdTVCRTlcdTVCRUJcdTVDNjRcdTVDNjVcdTVEOURcdTVEOTRcdTVFNjJcdTVFNUZcdTVFNjFcdTVFRTJcdTVFREFcdTVFREZcdTVFRERcdTVFRTNcdTVFRTBcdTVGNDhcdTVGNzFcdTVGQjdcdTVGQjVcdTYxNzZcdTYxNjdcdTYxNkVcdTYxNURcdTYxNTVcdTYxODJcIl0sXG5bXCJiY2ExXCIsXCJcdTYxN0NcdTYxNzBcdTYxNkJcdTYxN0VcdTYxQTdcdTYxOTBcdTYxQUJcdTYxOEVcdTYxQUNcdTYxOUFcdTYxQTRcdTYxOTRcdTYxQUVcdTYyMkVcdTY0NjlcdTY0NkZcdTY0NzlcdTY0OUVcdTY0QjJcdTY0ODhcdTY0OTBcdTY0QjBcdTY0QTVcdTY0OTNcdTY0OTVcdTY0QTlcdTY0OTJcdTY0QUVcdTY0QURcdTY0QUJcdTY0OUFcdTY0QUNcdTY0OTlcdTY0QTJcdTY0QjNcdTY1NzVcdTY1NzdcdTY1NzhcdTY2QUVcdTY2QUJcdTY2QjRcdTY2QjFcdTZBMjNcdTZBMUZcdTY5RThcdTZBMDFcdTZBMUVcdTZBMTlcdTY5RkRcdTZBMjFcdTZBMTNcdTZBMEFcdTY5RjNcdTZBMDJcdTZBMDVcdTY5RURcdTZBMTFcdTZCNTBcdTZCNEVcdTZCQTRcdTZCQzVcdTZCQzZcdTZGM0ZcdTZGN0NcdTZGODRcdTZGNTFcdTZGNjZcdTZGNTRcdTZGODZcdTZGNkRcdTZGNUJcdTZGNzhcdTZGNkVcdTZGOEVcdTZGN0FcdTZGNzBcdTZGNjRcdTZGOTdcdTZGNThcdTZFRDVcdTZGNkZcdTZGNjBcdTZGNUZcdTcxOUZcdTcxQUNcdTcxQjFcdTcxQThcdTcyNTZcdTcyOUJcdTczNEVcdTczNTdcdTc0NjlcdTc0OEJcdTc0ODNcIl0sXG5bXCJiZDQwXCIsXCJcdTc0N0VcdTc0ODBcdTc1N0ZcdTc2MjBcdTc2MjlcdTc2MUZcdTc2MjRcdTc2MjZcdTc2MjFcdTc2MjJcdTc2OUFcdTc2QkFcdTc2RTRcdTc3OEVcdTc3ODdcdTc3OENcdTc3OTFcdTc3OEJcdTc4Q0JcdTc4QzVcdTc4QkFcdTc4Q0FcdTc4QkVcdTc4RDVcdTc4QkNcdTc4RDBcdTdBM0ZcdTdBM0NcdTdBNDBcdTdBM0RcdTdBMzdcdTdBM0JcdTdBQUZcdTdBQUVcdTdCQURcdTdCQjFcdTdCQzRcdTdCQjRcdTdCQzZcdTdCQzdcdTdCQzFcdTdCQTBcdTdCQ0NcdTdDQ0FcdTdERTBcdTdERjRcdTdERUZcdTdERkJcdTdERDhcdTdERUNcdTdERERcdTdERThcdTdERTNcdTdEREFcdTdEREVcdTdERTlcdTdEOUVcdTdERDlcdTdERjJcdTdERjlcdTdGNzVcdTdGNzdcdTdGQUZcIl0sXG5bXCJiZGExXCIsXCJcdTdGRTlcdTgwMjZcdTgxOUJcdTgxOUNcdTgxOURcdTgxQTBcdTgxOUFcdTgxOThcdTg1MTdcdTg1M0RcdTg1MUFcdTg0RUVcdTg1MkNcdTg1MkRcdTg1MTNcdTg1MTFcdTg1MjNcdTg1MjFcdTg1MTRcdTg0RUNcdTg1MjVcdTg0RkZcdTg1MDZcdTg3ODJcdTg3NzRcdTg3NzZcdTg3NjBcdTg3NjZcdTg3NzhcdTg3NjhcdTg3NTlcdTg3NTdcdTg3NENcdTg3NTNcdTg4NUJcdTg4NURcdTg5MTBcdTg5MDdcdTg5MTJcdTg5MTNcdTg5MTVcdTg5MEFcdThBQkNcdThBRDJcdThBQzdcdThBQzRcdThBOTVcdThBQ0JcdThBRjhcdThBQjJcdThBQzlcdThBQzJcdThBQkZcdThBQjBcdThBRDZcdThBQ0RcdThBQjZcdThBQjlcdThBREJcdThDNENcdThDNEVcdThDNkNcdThDRTBcdThDREVcdThDRTZcdThDRTRcdThDRUNcdThDRURcdThDRTJcdThDRTNcdThDRENcdThDRUFcdThDRTFcdThENkRcdThEOUZcdThEQTNcdThFMkJcdThFMTBcdThFMURcdThFMjJcdThFMEZcdThFMjlcdThFMUZcdThFMjFcdThFMUVcdThFQkFcdThGMURcdThGMUJcdThGMUZcdThGMjlcdThGMjZcdThGMkFcdThGMUNcdThGMUVcIl0sXG5bXCJiZTQwXCIsXCJcdThGMjVcdTkwNjlcdTkwNkVcdTkwNjhcdTkwNkRcdTkwNzdcdTkxMzBcdTkxMkRcdTkxMjdcdTkxMzFcdTkxODdcdTkxODlcdTkxOEJcdTkxODNcdTkyQzVcdTkyQkJcdTkyQjdcdTkyRUFcdTkyQUNcdTkyRTRcdTkyQzFcdTkyQjNcdTkyQkNcdTkyRDJcdTkyQzdcdTkyRjBcdTkyQjJcdTk1QURcdTk1QjFcdTk3MDRcdTk3MDZcdTk3MDdcdTk3MDlcdTk3NjBcdTk3OERcdTk3OEJcdTk3OEZcdTk4MjFcdTk4MkJcdTk4MUNcdTk4QjNcdTk5MEFcdTk5MTNcdTk5MTJcdTk5MThcdTk5RERcdTk5RDBcdTk5REZcdTk5REJcdTk5RDFcdTk5RDVcdTk5RDJcdTk5RDlcdTlBQjdcdTlBRUVcdTlBRUZcdTlCMjdcdTlCNDVcdTlCNDRcdTlCNzdcdTlCNkZcdTlEMDZcdTlEMDlcIl0sXG5bXCJiZWExXCIsXCJcdTlEMDNcdTlFQTlcdTlFQkVcdTlFQ0VcdTU4QThcdTlGNTJcdTUxMTJcdTUxMThcdTUxMTRcdTUxMTBcdTUxMTVcdTUxODBcdTUxQUFcdTUxRERcdTUyOTFcdTUyOTNcdTUyRjNcdTU2NTlcdTU2NkJcdTU2NzlcdTU2NjlcdTU2NjRcdTU2NzhcdTU2NkFcdTU2NjhcdTU2NjVcdTU2NzFcdTU2NkZcdTU2NkNcdTU2NjJcdTU2NzZcdTU4QzFcdTU4QkVcdTU4QzdcdTU4QzVcdTU5NkVcdTVCMURcdTVCMzRcdTVCNzhcdTVCRjBcdTVDMEVcdTVGNEFcdTYxQjJcdTYxOTFcdTYxQTlcdTYxOEFcdTYxQ0RcdTYxQjZcdTYxQkVcdTYxQ0FcdTYxQzhcdTYyMzBcdTY0QzVcdTY0QzFcdTY0Q0JcdTY0QkJcdTY0QkNcdTY0REFcdTY0QzRcdTY0QzdcdTY0QzJcdTY0Q0RcdTY0QkZcdTY0RDJcdTY0RDRcdTY0QkVcdTY1NzRcdTY2QzZcdTY2QzlcdTY2QjlcdTY2QzRcdTY2QzdcdTY2QjhcdTZBM0RcdTZBMzhcdTZBM0FcdTZBNTlcdTZBNkJcdTZBNThcdTZBMzlcdTZBNDRcdTZBNjJcdTZBNjFcdTZBNEJcdTZBNDdcdTZBMzVcdTZBNUZcdTZBNDhcdTZCNTlcdTZCNzdcdTZDMDVcdTZGQzJcdTZGQjFcdTZGQTFcIl0sXG5bXCJiZjQwXCIsXCJcdTZGQzNcdTZGQTRcdTZGQzFcdTZGQTdcdTZGQjNcdTZGQzBcdTZGQjlcdTZGQjZcdTZGQTZcdTZGQTBcdTZGQjRcdTcxQkVcdTcxQzlcdTcxRDBcdTcxRDJcdTcxQzhcdTcxRDVcdTcxQjlcdTcxQ0VcdTcxRDlcdTcxRENcdTcxQzNcdTcxQzRcdTczNjhcdTc0OUNcdTc0QTNcdTc0OThcdTc0OUZcdTc0OUVcdTc0RTJcdTc1MENcdTc1MERcdTc2MzRcdTc2MzhcdTc2M0FcdTc2RTdcdTc2RTVcdTc3QTBcdTc3OUVcdTc3OUZcdTc3QTVcdTc4RThcdTc4REFcdTc4RUNcdTc4RTdcdTc5QTZcdTdBNERcdTdBNEVcdTdBNDZcdTdBNENcdTdBNEJcdTdBQkFcdTdCRDlcdTdDMTFcdTdCQzlcdTdCRTRcdTdCREJcdTdCRTFcdTdCRTlcdTdCRTZcdTdDRDVcdTdDRDZcdTdFMEFcIl0sXG5bXCJiZmExXCIsXCJcdTdFMTFcdTdFMDhcdTdFMUJcdTdFMjNcdTdFMUVcdTdFMURcdTdFMDlcdTdFMTBcdTdGNzlcdTdGQjJcdTdGRjBcdTdGRjFcdTdGRUVcdTgwMjhcdTgxQjNcdTgxQTlcdTgxQThcdTgxRkJcdTgyMDhcdTgyNThcdTgyNTlcdTg1NEFcdTg1NTlcdTg1NDhcdTg1NjhcdTg1NjlcdTg1NDNcdTg1NDlcdTg1NkRcdTg1NkFcdTg1NUVcdTg3ODNcdTg3OUZcdTg3OUVcdTg3QTJcdTg3OERcdTg4NjFcdTg5MkFcdTg5MzJcdTg5MjVcdTg5MkJcdTg5MjFcdTg5QUFcdTg5QTZcdThBRTZcdThBRkFcdThBRUJcdThBRjFcdThCMDBcdThBRENcdThBRTdcdThBRUVcdThBRkVcdThCMDFcdThCMDJcdThBRjdcdThBRURcdThBRjNcdThBRjZcdThBRkNcdThDNkJcdThDNkRcdThDOTNcdThDRjRcdThFNDRcdThFMzFcdThFMzRcdThFNDJcdThFMzlcdThFMzVcdThGM0JcdThGMkZcdThGMzhcdThGMzNcdThGQThcdThGQTZcdTkwNzVcdTkwNzRcdTkwNzhcdTkwNzJcdTkwN0NcdTkwN0FcdTkxMzRcdTkxOTJcdTkzMjBcdTkzMzZcdTkyRjhcdTkzMzNcdTkzMkZcdTkzMjJcdTkyRkNcdTkzMkJcdTkzMDRcdTkzMUFcIl0sXG5bXCJjMDQwXCIsXCJcdTkzMTBcdTkzMjZcdTkzMjFcdTkzMTVcdTkzMkVcdTkzMTlcdTk1QkJcdTk2QTdcdTk2QThcdTk2QUFcdTk2RDVcdTk3MEVcdTk3MTFcdTk3MTZcdTk3MERcdTk3MTNcdTk3MEZcdTk3NUJcdTk3NUNcdTk3NjZcdTk3OThcdTk4MzBcdTk4MzhcdTk4M0JcdTk4MzdcdTk4MkRcdTk4MzlcdTk4MjRcdTk5MTBcdTk5MjhcdTk5MUVcdTk5MUJcdTk5MjFcdTk5MUFcdTk5RURcdTk5RTJcdTk5RjFcdTlBQjhcdTlBQkNcdTlBRkJcdTlBRURcdTlCMjhcdTlCOTFcdTlEMTVcdTlEMjNcdTlEMjZcdTlEMjhcdTlEMTJcdTlEMUJcdTlFRDhcdTlFRDRcdTlGOERcdTlGOUNcdTUxMkFcdTUxMUZcdTUxMjFcdTUxMzJcdTUyRjVcdTU2OEVcdTU2ODBcdTU2OTBcdTU2ODVcdTU2ODdcIl0sXG5bXCJjMGExXCIsXCJcdTU2OEZcdTU4RDVcdTU4RDNcdTU4RDFcdTU4Q0VcdTVCMzBcdTVCMkFcdTVCMjRcdTVCN0FcdTVDMzdcdTVDNjhcdTVEQkNcdTVEQkFcdTVEQkRcdTVEQjhcdTVFNkJcdTVGNENcdTVGQkRcdTYxQzlcdTYxQzJcdTYxQzdcdTYxRTZcdTYxQ0JcdTYyMzJcdTYyMzRcdTY0Q0VcdTY0Q0FcdTY0RDhcdTY0RTBcdTY0RjBcdTY0RTZcdTY0RUNcdTY0RjFcdTY0RTJcdTY0RURcdTY1ODJcdTY1ODNcdTY2RDlcdTY2RDZcdTZBODBcdTZBOTRcdTZBODRcdTZBQTJcdTZBOUNcdTZBREJcdTZBQTNcdTZBN0VcdTZBOTdcdTZBOTBcdTZBQTBcdTZCNUNcdTZCQUVcdTZCREFcdTZDMDhcdTZGRDhcdTZGRjFcdTZGREZcdTZGRTBcdTZGREJcdTZGRTRcdTZGRUJcdTZGRUZcdTZGODBcdTZGRUNcdTZGRTFcdTZGRTlcdTZGRDVcdTZGRUVcdTZGRjBcdTcxRTdcdTcxREZcdTcxRUVcdTcxRTZcdTcxRTVcdTcxRURcdTcxRUNcdTcxRjRcdTcxRTBcdTcyMzVcdTcyNDZcdTczNzBcdTczNzJcdTc0QTlcdTc0QjBcdTc0QTZcdTc0QThcdTc2NDZcdTc2NDJcdTc2NENcdTc2RUFcdTc3QjNcdTc3QUFcdTc3QjBcdTc3QUNcIl0sXG5bXCJjMTQwXCIsXCJcdTc3QTdcdTc3QURcdTc3RUZcdTc4RjdcdTc4RkFcdTc4RjRcdTc4RUZcdTc5MDFcdTc5QTdcdTc5QUFcdTdBNTdcdTdBQkZcdTdDMDdcdTdDMERcdTdCRkVcdTdCRjdcdTdDMENcdTdCRTBcdTdDRTBcdTdDRENcdTdDREVcdTdDRTJcdTdDREZcdTdDRDlcdTdDRERcdTdFMkVcdTdFM0VcdTdFNDZcdTdFMzdcdTdFMzJcdTdFNDNcdTdFMkJcdTdFM0RcdTdFMzFcdTdFNDVcdTdFNDFcdTdFMzRcdTdFMzlcdTdFNDhcdTdFMzVcdTdFM0ZcdTdFMkZcdTdGNDRcdTdGRjNcdTdGRkNcdTgwNzFcdTgwNzJcdTgwNzBcdTgwNkZcdTgwNzNcdTgxQzZcdTgxQzNcdTgxQkFcdTgxQzJcdTgxQzBcdTgxQkZcdTgxQkRcdTgxQzlcdTgxQkVcdTgxRThcdTgyMDlcdTgyNzFcdTg1QUFcIl0sXG5bXCJjMWExXCIsXCJcdTg1ODRcdTg1N0VcdTg1OUNcdTg1OTFcdTg1OTRcdTg1QUZcdTg1OUJcdTg1ODdcdTg1QThcdTg1OEFcdTg2NjdcdTg3QzBcdTg3RDFcdTg3QjNcdTg3RDJcdTg3QzZcdTg3QUJcdTg3QkJcdTg3QkFcdTg3QzhcdTg3Q0JcdTg5M0JcdTg5MzZcdTg5NDRcdTg5MzhcdTg5M0RcdTg5QUNcdThCMEVcdThCMTdcdThCMTlcdThCMUJcdThCMEFcdThCMjBcdThCMURcdThCMDRcdThCMTBcdThDNDFcdThDM0ZcdThDNzNcdThDRkFcdThDRkRcdThDRkNcdThDRjhcdThDRkJcdThEQThcdThFNDlcdThFNEJcdThFNDhcdThFNEFcdThGNDRcdThGM0VcdThGNDJcdThGNDVcdThGM0ZcdTkwN0ZcdTkwN0RcdTkwODRcdTkwODFcdTkwODJcdTkwODBcdTkxMzlcdTkxQTNcdTkxOUVcdTkxOUNcdTkzNERcdTkzODJcdTkzMjhcdTkzNzVcdTkzNEFcdTkzNjVcdTkzNEJcdTkzMThcdTkzN0VcdTkzNkNcdTkzNUJcdTkzNzBcdTkzNUFcdTkzNTRcdTk1Q0FcdTk1Q0JcdTk1Q0NcdTk1QzhcdTk1QzZcdTk2QjFcdTk2QjhcdTk2RDZcdTk3MUNcdTk3MUVcdTk3QTBcdTk3RDNcdTk4NDZcdTk4QjZcdTk5MzVcdTlBMDFcIl0sXG5bXCJjMjQwXCIsXCJcdTk5RkZcdTlCQUVcdTlCQUJcdTlCQUFcdTlCQURcdTlEM0JcdTlEM0ZcdTlFOEJcdTlFQ0ZcdTlFREVcdTlFRENcdTlFRERcdTlFREJcdTlGM0VcdTlGNEJcdTUzRTJcdTU2OTVcdTU2QUVcdTU4RDlcdTU4RDhcdTVCMzhcdTVGNURcdTYxRTNcdTYyMzNcdTY0RjRcdTY0RjJcdTY0RkVcdTY1MDZcdTY0RkFcdTY0RkJcdTY0RjdcdTY1QjdcdTY2RENcdTY3MjZcdTZBQjNcdTZBQUNcdTZBQzNcdTZBQkJcdTZBQjhcdTZBQzJcdTZBQUVcdTZBQUZcdTZCNUZcdTZCNzhcdTZCQUZcdTcwMDlcdTcwMEJcdTZGRkVcdTcwMDZcdTZGRkFcdTcwMTFcdTcwMEZcdTcxRkJcdTcxRkNcdTcxRkVcdTcxRjhcdTczNzdcdTczNzVcdTc0QTdcdTc0QkZcdTc1MTVcdTc2NTZcdTc2NThcIl0sXG5bXCJjMmExXCIsXCJcdTc2NTJcdTc3QkRcdTc3QkZcdTc3QkJcdTc3QkNcdTc5MEVcdTc5QUVcdTdBNjFcdTdBNjJcdTdBNjBcdTdBQzRcdTdBQzVcdTdDMkJcdTdDMjdcdTdDMkFcdTdDMUVcdTdDMjNcdTdDMjFcdTdDRTdcdTdFNTRcdTdFNTVcdTdFNUVcdTdFNUFcdTdFNjFcdTdFNTJcdTdFNTlcdTdGNDhcdTdGRjlcdTdGRkJcdTgwNzdcdTgwNzZcdTgxQ0RcdTgxQ0ZcdTgyMEFcdTg1Q0ZcdTg1QTlcdTg1Q0RcdTg1RDBcdTg1QzlcdTg1QjBcdTg1QkFcdTg1QjlcdTg1QTZcdTg3RUZcdTg3RUNcdTg3RjJcdTg3RTBcdTg5ODZcdTg5QjJcdTg5RjRcdThCMjhcdThCMzlcdThCMkNcdThCMkJcdThDNTBcdThEMDVcdThFNTlcdThFNjNcdThFNjZcdThFNjRcdThFNUZcdThFNTVcdThFQzBcdThGNDlcdThGNERcdTkwODdcdTkwODNcdTkwODhcdTkxQUJcdTkxQUNcdTkxRDBcdTkzOTRcdTkzOEFcdTkzOTZcdTkzQTJcdTkzQjNcdTkzQUVcdTkzQUNcdTkzQjBcdTkzOThcdTkzOUFcdTkzOTdcdTk1RDRcdTk1RDZcdTk1RDBcdTk1RDVcdTk2RTJcdTk2RENcdTk2RDlcdTk2REJcdTk2REVcdTk3MjRcdTk3QTNcdTk3QTZcIl0sXG5bXCJjMzQwXCIsXCJcdTk3QURcdTk3RjlcdTk4NERcdTk4NEZcdTk4NENcdTk4NEVcdTk4NTNcdTk4QkFcdTk5M0VcdTk5M0ZcdTk5M0RcdTk5MkVcdTk5QTVcdTlBMEVcdTlBQzFcdTlCMDNcdTlCMDZcdTlCNEZcdTlCNEVcdTlCNERcdTlCQ0FcdTlCQzlcdTlCRkRcdTlCQzhcdTlCQzBcdTlENTFcdTlENURcdTlENjBcdTlFRTBcdTlGMTVcdTlGMkNcdTUxMzNcdTU2QTVcdTU4REVcdTU4REZcdTU4RTJcdTVCRjVcdTlGOTBcdTVFRUNcdTYxRjJcdTYxRjdcdTYxRjZcdTYxRjVcdTY1MDBcdTY1MEZcdTY2RTBcdTY2RERcdTZBRTVcdTZBRERcdTZBREFcdTZBRDNcdTcwMUJcdTcwMUZcdTcwMjhcdTcwMUFcdTcwMURcdTcwMTVcdTcwMThcdTcyMDZcdTcyMERcdTcyNThcdTcyQTJcdTczNzhcIl0sXG5bXCJjM2ExXCIsXCJcdTczN0FcdTc0QkRcdTc0Q0FcdTc0RTNcdTc1ODdcdTc1ODZcdTc2NUZcdTc2NjFcdTc3QzdcdTc5MTlcdTc5QjFcdTdBNkJcdTdBNjlcdTdDM0VcdTdDM0ZcdTdDMzhcdTdDM0RcdTdDMzdcdTdDNDBcdTdFNkJcdTdFNkRcdTdFNzlcdTdFNjlcdTdFNkFcdTdGODVcdTdFNzNcdTdGQjZcdTdGQjlcdTdGQjhcdTgxRDhcdTg1RTlcdTg1RERcdTg1RUFcdTg1RDVcdTg1RTRcdTg1RTVcdTg1RjdcdTg3RkJcdTg4MDVcdTg4MERcdTg3RjlcdTg3RkVcdTg5NjBcdTg5NUZcdTg5NTZcdTg5NUVcdThCNDFcdThCNUNcdThCNThcdThCNDlcdThCNUFcdThCNEVcdThCNEZcdThCNDZcdThCNTlcdThEMDhcdThEMEFcdThFN0NcdThFNzJcdThFODdcdThFNzZcdThFNkNcdThFN0FcdThFNzRcdThGNTRcdThGNEVcdThGQURcdTkwOEFcdTkwOEJcdTkxQjFcdTkxQUVcdTkzRTFcdTkzRDFcdTkzREZcdTkzQzNcdTkzQzhcdTkzRENcdTkzRERcdTkzRDZcdTkzRTJcdTkzQ0RcdTkzRDhcdTkzRTRcdTkzRDdcdTkzRThcdTk1RENcdTk2QjRcdTk2RTNcdTk3MkFcdTk3MjdcdTk3NjFcdTk3RENcdTk3RkJcdTk4NUVcIl0sXG5bXCJjNDQwXCIsXCJcdTk4NThcdTk4NUJcdTk4QkNcdTk5NDVcdTk5NDlcdTlBMTZcdTlBMTlcdTlCMERcdTlCRThcdTlCRTdcdTlCRDZcdTlCREJcdTlEODlcdTlENjFcdTlENzJcdTlENkFcdTlENkNcdTlFOTJcdTlFOTdcdTlFOTNcdTlFQjRcdTUyRjhcdTU2QThcdTU2QjdcdTU2QjZcdTU2QjRcdTU2QkNcdTU4RTRcdTVCNDBcdTVCNDNcdTVCN0RcdTVCRjZcdTVEQzlcdTYxRjhcdTYxRkFcdTY1MThcdTY1MTRcdTY1MTlcdTY2RTZcdTY3MjdcdTZBRUNcdTcwM0VcdTcwMzBcdTcwMzJcdTcyMTBcdTczN0JcdTc0Q0ZcdTc2NjJcdTc2NjVcdTc5MjZcdTc5MkFcdTc5MkNcdTc5MkJcdTdBQzdcdTdBRjZcdTdDNENcdTdDNDNcdTdDNERcdTdDRUZcdTdDRjBcdThGQUVcdTdFN0RcdTdFN0NcIl0sXG5bXCJjNGExXCIsXCJcdTdFODJcdTdGNENcdTgwMDBcdTgxREFcdTgyNjZcdTg1RkJcdTg1RjlcdTg2MTFcdTg1RkFcdTg2MDZcdTg2MEJcdTg2MDdcdTg2MEFcdTg4MTRcdTg4MTVcdTg5NjRcdTg5QkFcdTg5RjhcdThCNzBcdThCNkNcdThCNjZcdThCNkZcdThCNUZcdThCNkJcdThEMEZcdThEMERcdThFODlcdThFODFcdThFODVcdThFODJcdTkxQjRcdTkxQ0JcdTk0MThcdTk0MDNcdTkzRkRcdTk1RTFcdTk3MzBcdTk4QzRcdTk5NTJcdTk5NTFcdTk5QThcdTlBMkJcdTlBMzBcdTlBMzdcdTlBMzVcdTlDMTNcdTlDMERcdTlFNzlcdTlFQjVcdTlFRThcdTlGMkZcdTlGNUZcdTlGNjNcdTlGNjFcdTUxMzdcdTUxMzhcdTU2QzFcdTU2QzBcdTU2QzJcdTU5MTRcdTVDNkNcdTVEQ0RcdTYxRkNcdTYxRkVcdTY1MURcdTY1MUNcdTY1OTVcdTY2RTlcdTZBRkJcdTZCMDRcdTZBRkFcdTZCQjJcdTcwNENcdTcyMUJcdTcyQTdcdTc0RDZcdTc0RDRcdTc2NjlcdTc3RDNcdTdDNTBcdTdFOEZcdTdFOENcdTdGQkNcdTg2MTdcdTg2MkRcdTg2MUFcdTg4MjNcdTg4MjJcdTg4MjFcdTg4MUZcdTg5NkFcdTg5NkNcdTg5QkRcdThCNzRcIl0sXG5bXCJjNTQwXCIsXCJcdThCNzdcdThCN0RcdThEMTNcdThFOEFcdThFOERcdThFOEJcdThGNUZcdThGQUZcdTkxQkFcdTk0MkVcdTk0MzNcdTk0MzVcdTk0M0FcdTk0MzhcdTk0MzJcdTk0MkJcdTk1RTJcdTk3MzhcdTk3MzlcdTk3MzJcdTk3RkZcdTk4NjdcdTk4NjVcdTk5NTdcdTlBNDVcdTlBNDNcdTlBNDBcdTlBM0VcdTlBQ0ZcdTlCNTRcdTlCNTFcdTlDMkRcdTlDMjVcdTlEQUZcdTlEQjRcdTlEQzJcdTlEQjhcdTlFOURcdTlFRUZcdTlGMTlcdTlGNUNcdTlGNjZcdTlGNjdcdTUxM0NcdTUxM0JcdTU2QzhcdTU2Q0FcdTU2QzlcdTVCN0ZcdTVERDRcdTVERDJcdTVGNEVcdTYxRkZcdTY1MjRcdTZCMEFcdTZCNjFcdTcwNTFcdTcwNThcdTczODBcdTc0RTRcdTc1OEFcdTc2NkVcdTc2NkNcIl0sXG5bXCJjNWExXCIsXCJcdTc5QjNcdTdDNjBcdTdDNUZcdTgwN0VcdTgwN0RcdTgxREZcdTg5NzJcdTg5NkZcdTg5RkNcdThCODBcdThEMTZcdThEMTdcdThFOTFcdThFOTNcdThGNjFcdTkxNDhcdTk0NDRcdTk0NTFcdTk0NTJcdTk3M0RcdTk3M0VcdTk3QzNcdTk3QzFcdTk4NkJcdTk5NTVcdTlBNTVcdTlBNERcdTlBRDJcdTlCMUFcdTlDNDlcdTlDMzFcdTlDM0VcdTlDM0JcdTlERDNcdTlERDdcdTlGMzRcdTlGNkNcdTlGNkFcdTlGOTRcdTU2Q0NcdTVERDZcdTYyMDBcdTY1MjNcdTY1MkJcdTY1MkFcdTY2RUNcdTZCMTBcdTc0REFcdTdBQ0FcdTdDNjRcdTdDNjNcdTdDNjVcdTdFOTNcdTdFOTZcdTdFOTRcdTgxRTJcdTg2MzhcdTg2M0ZcdTg4MzFcdThCOEFcdTkwOTBcdTkwOEZcdTk0NjNcdTk0NjBcdTk0NjRcdTk3NjhcdTk4NkZcdTk5NUNcdTlBNUFcdTlBNUJcdTlBNTdcdTlBRDNcdTlBRDRcdTlBRDFcdTlDNTRcdTlDNTdcdTlDNTZcdTlERTVcdTlFOUZcdTlFRjRcdTU2RDFcdTU4RTlcdTY1MkNcdTcwNUVcdTc2NzFcdTc2NzJcdTc3RDdcdTdGNTBcdTdGODhcdTg4MzZcdTg4MzlcdTg4NjJcdThCOTNcdThCOTJcIl0sXG5bXCJjNjQwXCIsXCJcdThCOTZcdTgyNzdcdThEMUJcdTkxQzBcdTk0NkFcdTk3NDJcdTk3NDhcdTk3NDRcdTk3QzZcdTk4NzBcdTlBNUZcdTlCMjJcdTlCNThcdTlDNUZcdTlERjlcdTlERkFcdTlFN0NcdTlFN0RcdTlGMDdcdTlGNzdcdTlGNzJcdTVFRjNcdTZCMTZcdTcwNjNcdTdDNkNcdTdDNkVcdTg4M0JcdTg5QzBcdThFQTFcdTkxQzFcdTk0NzJcdTk0NzBcdTk4NzFcdTk5NUVcdTlBRDZcdTlCMjNcdTlFQ0NcdTcwNjRcdTc3REFcdThCOUFcdTk0NzdcdTk3QzlcdTlBNjJcdTlBNjVcdTdFOUNcdThCOUNcdThFQUFcdTkxQzVcdTk0N0RcdTk0N0VcdTk0N0NcdTlDNzdcdTlDNzhcdTlFRjdcdThDNTRcdTk0N0ZcdTlFMUFcdTcyMjhcdTlBNkFcdTlCMzFcdTlFMUJcdTlFMUVcdTdDNzJcIl0sXG5bXCJjOTQwXCIsXCJcdTRFNDJcdTRFNUNcdTUxRjVcdTUzMUFcdTUzODJcdTRFMDdcdTRFMENcdTRFNDdcdTRFOERcdTU2RDdcdUZBMENcdTVDNkVcdTVGNzNcdTRFMEZcdTUxODdcdTRFMEVcdTRFMkVcdTRFOTNcdTRFQzJcdTRFQzlcdTRFQzhcdTUxOThcdTUyRkNcdTUzNkNcdTUzQjlcdTU3MjBcdTU5MDNcdTU5MkNcdTVDMTBcdTVERkZcdTY1RTFcdTZCQjNcdTZCQ0NcdTZDMTRcdTcyM0ZcdTRFMzFcdTRFM0NcdTRFRThcdTRFRENcdTRFRTlcdTRFRTFcdTRFRERcdTRFREFcdTUyMENcdTUzMUNcdTUzNENcdTU3MjJcdTU3MjNcdTU5MTdcdTU5MkZcdTVCODFcdTVCODRcdTVDMTJcdTVDM0JcdTVDNzRcdTVDNzNcdTVFMDRcdTVFODBcdTVFODJcdTVGQzlcdTYyMDlcdTYyNTBcdTZDMTVcIl0sXG5bXCJjOWExXCIsXCJcdTZDMzZcdTZDNDNcdTZDM0ZcdTZDM0JcdTcyQUVcdTcyQjBcdTczOEFcdTc5QjhcdTgwOEFcdTk2MUVcdTRGMEVcdTRGMThcdTRGMkNcdTRFRjVcdTRGMTRcdTRFRjFcdTRGMDBcdTRFRjdcdTRGMDhcdTRGMURcdTRGMDJcdTRGMDVcdTRGMjJcdTRGMTNcdTRGMDRcdTRFRjRcdTRGMTJcdTUxQjFcdTUyMTNcdTUyMDlcdTUyMTBcdTUyQTZcdTUzMjJcdTUzMUZcdTUzNERcdTUzOEFcdTU0MDdcdTU2RTFcdTU2REZcdTU3MkVcdTU3MkFcdTU3MzRcdTU5M0NcdTU5ODBcdTU5N0NcdTU5ODVcdTU5N0JcdTU5N0VcdTU5NzdcdTU5N0ZcdTVCNTZcdTVDMTVcdTVDMjVcdTVDN0NcdTVDN0FcdTVDN0JcdTVDN0VcdTVEREZcdTVFNzVcdTVFODRcdTVGMDJcdTVGMUFcdTVGNzRcdTVGRDVcdTVGRDRcdTVGQ0ZcdTYyNUNcdTYyNUVcdTYyNjRcdTYyNjFcdTYyNjZcdTYyNjJcdTYyNTlcdTYyNjBcdTYyNUFcdTYyNjVcdTY1RUZcdTY1RUVcdTY3M0VcdTY3MzlcdTY3MzhcdTY3M0JcdTY3M0FcdTY3M0ZcdTY3M0NcdTY3MzNcdTZDMThcdTZDNDZcdTZDNTJcdTZDNUNcdTZDNEZcdTZDNEFcdTZDNTRcdTZDNEJcIl0sXG5bXCJjYTQwXCIsXCJcdTZDNENcdTcwNzFcdTcyNUVcdTcyQjRcdTcyQjVcdTczOEVcdTc1MkFcdTc2N0ZcdTdBNzVcdTdGNTFcdTgyNzhcdTgyN0NcdTgyODBcdTgyN0RcdTgyN0ZcdTg2NERcdTg5N0VcdTkwOTlcdTkwOTdcdTkwOThcdTkwOUJcdTkwOTRcdTk2MjJcdTk2MjRcdTk2MjBcdTk2MjNcdTRGNTZcdTRGM0JcdTRGNjJcdTRGNDlcdTRGNTNcdTRGNjRcdTRGM0VcdTRGNjdcdTRGNTJcdTRGNUZcdTRGNDFcdTRGNThcdTRGMkRcdTRGMzNcdTRGM0ZcdTRGNjFcdTUxOEZcdTUxQjlcdTUyMUNcdTUyMUVcdTUyMjFcdTUyQURcdTUyQUVcdTUzMDlcdTUzNjNcdTUzNzJcdTUzOEVcdTUzOEZcdTU0MzBcdTU0MzdcdTU0MkFcdTU0NTRcdTU0NDVcdTU0MTlcdTU0MUNcdTU0MjVcdTU0MThcIl0sXG5bXCJjYWExXCIsXCJcdTU0M0RcdTU0NEZcdTU0NDFcdTU0MjhcdTU0MjRcdTU0NDdcdTU2RUVcdTU2RTdcdTU2RTVcdTU3NDFcdTU3NDVcdTU3NENcdTU3NDlcdTU3NEJcdTU3NTJcdTU5MDZcdTU5NDBcdTU5QTZcdTU5OThcdTU5QTBcdTU5OTdcdTU5OEVcdTU5QTJcdTU5OTBcdTU5OEZcdTU5QTdcdTU5QTFcdTVCOEVcdTVCOTJcdTVDMjhcdTVDMkFcdTVDOERcdTVDOEZcdTVDODhcdTVDOEJcdTVDODlcdTVDOTJcdTVDOEFcdTVDODZcdTVDOTNcdTVDOTVcdTVERTBcdTVFMEFcdTVFMEVcdTVFOEJcdTVFODlcdTVFOENcdTVFODhcdTVFOERcdTVGMDVcdTVGMURcdTVGNzhcdTVGNzZcdTVGRDJcdTVGRDFcdTVGRDBcdTVGRURcdTVGRThcdTVGRUVcdTVGRjNcdTVGRTFcdTVGRTRcdTVGRTNcdTVGRkFcdTVGRUZcdTVGRjdcdTVGRkJcdTYwMDBcdTVGRjRcdTYyM0FcdTYyODNcdTYyOENcdTYyOEVcdTYyOEZcdTYyOTRcdTYyODdcdTYyNzFcdTYyN0JcdTYyN0FcdTYyNzBcdTYyODFcdTYyODhcdTYyNzdcdTYyN0RcdTYyNzJcdTYyNzRcdTY1MzdcdTY1RjBcdTY1RjRcdTY1RjNcdTY1RjJcdTY1RjVcdTY3NDVcdTY3NDdcIl0sXG5bXCJjYjQwXCIsXCJcdTY3NTlcdTY3NTVcdTY3NENcdTY3NDhcdTY3NURcdTY3NERcdTY3NUFcdTY3NEJcdTZCRDBcdTZDMTlcdTZDMUFcdTZDNzhcdTZDNjdcdTZDNkJcdTZDODRcdTZDOEJcdTZDOEZcdTZDNzFcdTZDNkZcdTZDNjlcdTZDOUFcdTZDNkRcdTZDODdcdTZDOTVcdTZDOUNcdTZDNjZcdTZDNzNcdTZDNjVcdTZDN0JcdTZDOEVcdTcwNzRcdTcwN0FcdTcyNjNcdTcyQkZcdTcyQkRcdTcyQzNcdTcyQzZcdTcyQzFcdTcyQkFcdTcyQzVcdTczOTVcdTczOTdcdTczOTNcdTczOTRcdTczOTJcdTc1M0FcdTc1MzlcdTc1OTRcdTc1OTVcdTc2ODFcdTc5M0RcdTgwMzRcdTgwOTVcdTgwOTlcdTgwOTBcdTgwOTJcdTgwOUNcdTgyOTBcdTgyOEZcdTgyODVcdTgyOEVcdTgyOTFcdTgyOTNcIl0sXG5bXCJjYmExXCIsXCJcdTgyOEFcdTgyODNcdTgyODRcdThDNzhcdThGQzlcdThGQkZcdTkwOUZcdTkwQTFcdTkwQTVcdTkwOUVcdTkwQTdcdTkwQTBcdTk2MzBcdTk2MjhcdTk2MkZcdTk2MkRcdTRFMzNcdTRGOThcdTRGN0NcdTRGODVcdTRGN0RcdTRGODBcdTRGODdcdTRGNzZcdTRGNzRcdTRGODlcdTRGODRcdTRGNzdcdTRGNENcdTRGOTdcdTRGNkFcdTRGOUFcdTRGNzlcdTRGODFcdTRGNzhcdTRGOTBcdTRGOUNcdTRGOTRcdTRGOUVcdTRGOTJcdTRGODJcdTRGOTVcdTRGNkJcdTRGNkVcdTUxOUVcdTUxQkNcdTUxQkVcdTUyMzVcdTUyMzJcdTUyMzNcdTUyNDZcdTUyMzFcdTUyQkNcdTUzMEFcdTUzMEJcdTUzM0NcdTUzOTJcdTUzOTRcdTU0ODdcdTU0N0ZcdTU0ODFcdTU0OTFcdTU0ODJcdTU0ODhcdTU0NkJcdTU0N0FcdTU0N0VcdTU0NjVcdTU0NkNcdTU0NzRcdTU0NjZcdTU0OERcdTU0NkZcdTU0NjFcdTU0NjBcdTU0OThcdTU0NjNcdTU0NjdcdTU0NjRcdTU2RjdcdTU2RjlcdTU3NkZcdTU3NzJcdTU3NkRcdTU3NkJcdTU3NzFcdTU3NzBcdTU3NzZcdTU3ODBcdTU3NzVcdTU3N0JcdTU3NzNcdTU3NzRcdTU3NjJcIl0sXG5bXCJjYzQwXCIsXCJcdTU3NjhcdTU3N0RcdTU5MENcdTU5NDVcdTU5QjVcdTU5QkFcdTU5Q0ZcdTU5Q0VcdTU5QjJcdTU5Q0NcdTU5QzFcdTU5QjZcdTU5QkNcdTU5QzNcdTU5RDZcdTU5QjFcdTU5QkRcdTU5QzBcdTU5QzhcdTU5QjRcdTU5QzdcdTVCNjJcdTVCNjVcdTVCOTNcdTVCOTVcdTVDNDRcdTVDNDdcdTVDQUVcdTVDQTRcdTVDQTBcdTVDQjVcdTVDQUZcdTVDQThcdTVDQUNcdTVDOUZcdTVDQTNcdTVDQURcdTVDQTJcdTVDQUFcdTVDQTdcdTVDOURcdTVDQTVcdTVDQjZcdTVDQjBcdTVDQTZcdTVFMTdcdTVFMTRcdTVFMTlcdTVGMjhcdTVGMjJcdTVGMjNcdTVGMjRcdTVGNTRcdTVGODJcdTVGN0VcdTVGN0RcdTVGREVcdTVGRTVcdTYwMkRcdTYwMjZcdTYwMTlcdTYwMzJcdTYwMEJcIl0sXG5bXCJjY2ExXCIsXCJcdTYwMzRcdTYwMEFcdTYwMTdcdTYwMzNcdTYwMUFcdTYwMUVcdTYwMkNcdTYwMjJcdTYwMERcdTYwMTBcdTYwMkVcdTYwMTNcdTYwMTFcdTYwMENcdTYwMDlcdTYwMUNcdTYyMTRcdTYyM0RcdTYyQURcdTYyQjRcdTYyRDFcdTYyQkVcdTYyQUFcdTYyQjZcdTYyQ0FcdTYyQUVcdTYyQjNcdTYyQUZcdTYyQkJcdTYyQTlcdTYyQjBcdTYyQjhcdTY1M0RcdTY1QThcdTY1QkJcdTY2MDlcdTY1RkNcdTY2MDRcdTY2MTJcdTY2MDhcdTY1RkJcdTY2MDNcdTY2MEJcdTY2MERcdTY2MDVcdTY1RkRcdTY2MTFcdTY2MTBcdTY2RjZcdTY3MEFcdTY3ODVcdTY3NkNcdTY3OEVcdTY3OTJcdTY3NzZcdTY3N0JcdTY3OThcdTY3ODZcdTY3ODRcdTY3NzRcdTY3OERcdTY3OENcdTY3N0FcdTY3OUZcdTY3OTFcdTY3OTlcdTY3ODNcdTY3N0RcdTY3ODFcdTY3NzhcdTY3NzlcdTY3OTRcdTZCMjVcdTZCODBcdTZCN0VcdTZCREVcdTZDMURcdTZDOTNcdTZDRUNcdTZDRUJcdTZDRUVcdTZDRDlcdTZDQjZcdTZDRDRcdTZDQURcdTZDRTdcdTZDQjdcdTZDRDBcdTZDQzJcdTZDQkFcdTZDQzNcdTZDQzZcdTZDRURcdTZDRjJcIl0sXG5bXCJjZDQwXCIsXCJcdTZDRDJcdTZDRERcdTZDQjRcdTZDOEFcdTZDOURcdTZDODBcdTZDREVcdTZDQzBcdTZEMzBcdTZDQ0RcdTZDQzdcdTZDQjBcdTZDRjlcdTZDQ0ZcdTZDRTlcdTZDRDFcdTcwOTRcdTcwOThcdTcwODVcdTcwOTNcdTcwODZcdTcwODRcdTcwOTFcdTcwOTZcdTcwODJcdTcwOUFcdTcwODNcdTcyNkFcdTcyRDZcdTcyQ0JcdTcyRDhcdTcyQzlcdTcyRENcdTcyRDJcdTcyRDRcdTcyREFcdTcyQ0NcdTcyRDFcdTczQTRcdTczQTFcdTczQURcdTczQTZcdTczQTJcdTczQTBcdTczQUNcdTczOURcdTc0RERcdTc0RThcdTc1M0ZcdTc1NDBcdTc1M0VcdTc1OENcdTc1OThcdTc2QUZcdTc2RjNcdTc2RjFcdTc2RjBcdTc2RjVcdTc3RjhcdTc3RkNcdTc3RjlcdTc3RkJcdTc3RkFcIl0sXG5bXCJjZGExXCIsXCJcdTc3RjdcdTc5NDJcdTc5M0ZcdTc5QzVcdTdBNzhcdTdBN0JcdTdBRkJcdTdDNzVcdTdDRkRcdTgwMzVcdTgwOEZcdTgwQUVcdTgwQTNcdTgwQjhcdTgwQjVcdTgwQURcdTgyMjBcdTgyQTBcdTgyQzBcdTgyQUJcdTgyOUFcdTgyOThcdTgyOUJcdTgyQjVcdTgyQTdcdTgyQUVcdTgyQkNcdTgyOUVcdTgyQkFcdTgyQjRcdTgyQThcdTgyQTFcdTgyQTlcdTgyQzJcdTgyQTRcdTgyQzNcdTgyQjZcdTgyQTJcdTg2NzBcdTg2NkZcdTg2NkRcdTg2NkVcdThDNTZcdThGRDJcdThGQ0JcdThGRDNcdThGQ0RcdThGRDZcdThGRDVcdThGRDdcdTkwQjJcdTkwQjRcdTkwQUZcdTkwQjNcdTkwQjBcdTk2MzlcdTk2M0RcdTk2M0NcdTk2M0FcdTk2NDNcdTRGQ0RcdTRGQzVcdTRGRDNcdTRGQjJcdTRGQzlcdTRGQ0JcdTRGQzFcdTRGRDRcdTRGRENcdTRGRDlcdTRGQkJcdTRGQjNcdTRGREJcdTRGQzdcdTRGRDZcdTRGQkFcdTRGQzBcdTRGQjlcdTRGRUNcdTUyNDRcdTUyNDlcdTUyQzBcdTUyQzJcdTUzM0RcdTUzN0NcdTUzOTdcdTUzOTZcdTUzOTlcdTUzOThcdTU0QkFcdTU0QTFcdTU0QURcdTU0QTVcdTU0Q0ZcIl0sXG5bXCJjZTQwXCIsXCJcdTU0QzNcdTgzMERcdTU0QjdcdTU0QUVcdTU0RDZcdTU0QjZcdTU0QzVcdTU0QzZcdTU0QTBcdTU0NzBcdTU0QkNcdTU0QTJcdTU0QkVcdTU0NzJcdTU0REVcdTU0QjBcdTU3QjVcdTU3OUVcdTU3OUZcdTU3QTRcdTU3OENcdTU3OTdcdTU3OURcdTU3OUJcdTU3OTRcdTU3OThcdTU3OEZcdTU3OTlcdTU3QTVcdTU3OUFcdTU3OTVcdTU4RjRcdTU5MERcdTU5NTNcdTU5RTFcdTU5REVcdTU5RUVcdTVBMDBcdTU5RjFcdTU5RERcdTU5RkFcdTU5RkRcdTU5RkNcdTU5RjZcdTU5RTRcdTU5RjJcdTU5RjdcdTU5REJcdTU5RTlcdTU5RjNcdTU5RjVcdTU5RTBcdTU5RkVcdTU5RjRcdTU5RURcdTVCQThcdTVDNENcdTVDRDBcdTVDRDhcdTVDQ0NcdTVDRDdcdTVDQ0JcdTVDREJcIl0sXG5bXCJjZWExXCIsXCJcdTVDREVcdTVDREFcdTVDQzlcdTVDQzdcdTVDQ0FcdTVDRDZcdTVDRDNcdTVDRDRcdTVDQ0ZcdTVDQzhcdTVDQzZcdTVDQ0VcdTVDREZcdTVDRjhcdTVERjlcdTVFMjFcdTVFMjJcdTVFMjNcdTVFMjBcdTVFMjRcdTVFQjBcdTVFQTRcdTVFQTJcdTVFOUJcdTVFQTNcdTVFQTVcdTVGMDdcdTVGMkVcdTVGNTZcdTVGODZcdTYwMzdcdTYwMzlcdTYwNTRcdTYwNzJcdTYwNUVcdTYwNDVcdTYwNTNcdTYwNDdcdTYwNDlcdTYwNUJcdTYwNENcdTYwNDBcdTYwNDJcdTYwNUZcdTYwMjRcdTYwNDRcdTYwNThcdTYwNjZcdTYwNkVcdTYyNDJcdTYyNDNcdTYyQ0ZcdTYzMERcdTYzMEJcdTYyRjVcdTYzMEVcdTYzMDNcdTYyRUJcdTYyRjlcdTYzMEZcdTYzMENcdTYyRjhcdTYyRjZcdTYzMDBcdTYzMTNcdTYzMTRcdTYyRkFcdTYzMTVcdTYyRkJcdTYyRjBcdTY1NDFcdTY1NDNcdTY1QUFcdTY1QkZcdTY2MzZcdTY2MjFcdTY2MzJcdTY2MzVcdTY2MUNcdTY2MjZcdTY2MjJcdTY2MzNcdTY2MkJcdTY2M0FcdTY2MURcdTY2MzRcdTY2MzlcdTY2MkVcdTY3MEZcdTY3MTBcdTY3QzFcdTY3RjJcdTY3QzhcdTY3QkFcIl0sXG5bXCJjZjQwXCIsXCJcdTY3RENcdTY3QkJcdTY3RjhcdTY3RDhcdTY3QzBcdTY3QjdcdTY3QzVcdTY3RUJcdTY3RTRcdTY3REZcdTY3QjVcdTY3Q0RcdTY3QjNcdTY3RjdcdTY3RjZcdTY3RUVcdTY3RTNcdTY3QzJcdTY3QjlcdTY3Q0VcdTY3RTdcdTY3RjBcdTY3QjJcdTY3RkNcdTY3QzZcdTY3RURcdTY3Q0NcdTY3QUVcdTY3RTZcdTY3REJcdTY3RkFcdTY3QzlcdTY3Q0FcdTY3QzNcdTY3RUFcdTY3Q0JcdTZCMjhcdTZCODJcdTZCODRcdTZCQjZcdTZCRDZcdTZCRDhcdTZCRTBcdTZDMjBcdTZDMjFcdTZEMjhcdTZEMzRcdTZEMkRcdTZEMUZcdTZEM0NcdTZEM0ZcdTZEMTJcdTZEMEFcdTZDREFcdTZEMzNcdTZEMDRcdTZEMTlcdTZEM0FcdTZEMUFcdTZEMTFcdTZEMDBcdTZEMURcdTZENDJcIl0sXG5bXCJjZmExXCIsXCJcdTZEMDFcdTZEMThcdTZEMzdcdTZEMDNcdTZEMEZcdTZENDBcdTZEMDdcdTZEMjBcdTZEMkNcdTZEMDhcdTZEMjJcdTZEMDlcdTZEMTBcdTcwQjdcdTcwOUZcdTcwQkVcdTcwQjFcdTcwQjBcdTcwQTFcdTcwQjRcdTcwQjVcdTcwQTlcdTcyNDFcdTcyNDlcdTcyNEFcdTcyNkNcdTcyNzBcdTcyNzNcdTcyNkVcdTcyQ0FcdTcyRTRcdTcyRThcdTcyRUJcdTcyREZcdTcyRUFcdTcyRTZcdTcyRTNcdTczODVcdTczQ0NcdTczQzJcdTczQzhcdTczQzVcdTczQjlcdTczQjZcdTczQjVcdTczQjRcdTczRUJcdTczQkZcdTczQzdcdTczQkVcdTczQzNcdTczQzZcdTczQjhcdTczQ0JcdTc0RUNcdTc0RUVcdTc1MkVcdTc1NDdcdTc1NDhcdTc1QTdcdTc1QUFcdTc2NzlcdTc2QzRcdTc3MDhcdTc3MDNcdTc3MDRcdTc3MDVcdTc3MEFcdTc2RjdcdTc2RkJcdTc2RkFcdTc3RTdcdTc3RThcdTc4MDZcdTc4MTFcdTc4MTJcdTc4MDVcdTc4MTBcdTc4MEZcdTc4MEVcdTc4MDlcdTc4MDNcdTc4MTNcdTc5NEFcdTc5NENcdTc5NEJcdTc5NDVcdTc5NDRcdTc5RDVcdTc5Q0RcdTc5Q0ZcdTc5RDZcdTc5Q0VcdTdBODBcIl0sXG5bXCJkMDQwXCIsXCJcdTdBN0VcdTdBRDFcdTdCMDBcdTdCMDFcdTdDN0FcdTdDNzhcdTdDNzlcdTdDN0ZcdTdDODBcdTdDODFcdTdEMDNcdTdEMDhcdTdEMDFcdTdGNThcdTdGOTFcdTdGOERcdTdGQkVcdTgwMDdcdTgwMEVcdTgwMEZcdTgwMTRcdTgwMzdcdTgwRDhcdTgwQzdcdTgwRTBcdTgwRDFcdTgwQzhcdTgwQzJcdTgwRDBcdTgwQzVcdTgwRTNcdTgwRDlcdTgwRENcdTgwQ0FcdTgwRDVcdTgwQzlcdTgwQ0ZcdTgwRDdcdTgwRTZcdTgwQ0RcdTgxRkZcdTgyMjFcdTgyOTRcdTgyRDlcdTgyRkVcdTgyRjlcdTgzMDdcdTgyRThcdTgzMDBcdTgyRDVcdTgzM0FcdTgyRUJcdTgyRDZcdTgyRjRcdTgyRUNcdTgyRTFcdTgyRjJcdTgyRjVcdTgzMENcdTgyRkJcdTgyRjZcdTgyRjBcdTgyRUFcIl0sXG5bXCJkMGExXCIsXCJcdTgyRTRcdTgyRTBcdTgyRkFcdTgyRjNcdTgyRURcdTg2NzdcdTg2NzRcdTg2N0NcdTg2NzNcdTg4NDFcdTg4NEVcdTg4NjdcdTg4NkFcdTg4NjlcdTg5RDNcdThBMDRcdThBMDdcdThENzJcdThGRTNcdThGRTFcdThGRUVcdThGRTBcdTkwRjFcdTkwQkRcdTkwQkZcdTkwRDVcdTkwQzVcdTkwQkVcdTkwQzdcdTkwQ0JcdTkwQzhcdTkxRDRcdTkxRDNcdTk2NTRcdTk2NEZcdTk2NTFcdTk2NTNcdTk2NEFcdTk2NEVcdTUwMUVcdTUwMDVcdTUwMDdcdTUwMTNcdTUwMjJcdTUwMzBcdTUwMUJcdTRGRjVcdTRGRjRcdTUwMzNcdTUwMzdcdTUwMkNcdTRGRjZcdTRGRjdcdTUwMTdcdTUwMUNcdTUwMjBcdTUwMjdcdTUwMzVcdTUwMkZcdTUwMzFcdTUwMEVcdTUxNUFcdTUxOTRcdTUxOTNcdTUxQ0FcdTUxQzRcdTUxQzVcdTUxQzhcdTUxQ0VcdTUyNjFcdTUyNUFcdTUyNTJcdTUyNUVcdTUyNUZcdTUyNTVcdTUyNjJcdTUyQ0RcdTUzMEVcdTUzOUVcdTU1MjZcdTU0RTJcdTU1MTdcdTU1MTJcdTU0RTdcdTU0RjNcdTU0RTRcdTU1MUFcdTU0RkZcdTU1MDRcdTU1MDhcdTU0RUJcdTU1MTFcdTU1MDVcdTU0RjFcIl0sXG5bXCJkMTQwXCIsXCJcdTU1MEFcdTU0RkJcdTU0RjdcdTU0RjhcdTU0RTBcdTU1MEVcdTU1MDNcdTU1MEJcdTU3MDFcdTU3MDJcdTU3Q0NcdTU4MzJcdTU3RDVcdTU3RDJcdTU3QkFcdTU3QzZcdTU3QkRcdTU3QkNcdTU3QjhcdTU3QjZcdTU3QkZcdTU3QzdcdTU3RDBcdTU3QjlcdTU3QzFcdTU5MEVcdTU5NEFcdTVBMTlcdTVBMTZcdTVBMkRcdTVBMkVcdTVBMTVcdTVBMEZcdTVBMTdcdTVBMEFcdTVBMUVcdTVBMzNcdTVCNkNcdTVCQTdcdTVCQURcdTVCQUNcdTVDMDNcdTVDNTZcdTVDNTRcdTVDRUNcdTVDRkZcdTVDRUVcdTVDRjFcdTVDRjdcdTVEMDBcdTVDRjlcdTVFMjlcdTVFMjhcdTVFQThcdTVFQUVcdTVFQUFcdTVFQUNcdTVGMzNcdTVGMzBcdTVGNjdcdTYwNURcdTYwNUFcdTYwNjdcIl0sXG5bXCJkMWExXCIsXCJcdTYwNDFcdTYwQTJcdTYwODhcdTYwODBcdTYwOTJcdTYwODFcdTYwOURcdTYwODNcdTYwOTVcdTYwOUJcdTYwOTdcdTYwODdcdTYwOUNcdTYwOEVcdTYyMTlcdTYyNDZcdTYyRjJcdTYzMTBcdTYzNTZcdTYzMkNcdTYzNDRcdTYzNDVcdTYzMzZcdTYzNDNcdTYzRTRcdTYzMzlcdTYzNEJcdTYzNEFcdTYzM0NcdTYzMjlcdTYzNDFcdTYzMzRcdTYzNThcdTYzNTRcdTYzNTlcdTYzMkRcdTYzNDdcdTYzMzNcdTYzNUFcdTYzNTFcdTYzMzhcdTYzNTdcdTYzNDBcdTYzNDhcdTY1NEFcdTY1NDZcdTY1QzZcdTY1QzNcdTY1QzRcdTY1QzJcdTY2NEFcdTY2NUZcdTY2NDdcdTY2NTFcdTY3MTJcdTY3MTNcdTY4MUZcdTY4MUFcdTY4NDlcdTY4MzJcdTY4MzNcdTY4M0JcdTY4NEJcdTY4NEZcdTY4MTZcdTY4MzFcdTY4MUNcdTY4MzVcdTY4MkJcdTY4MkRcdTY4MkZcdTY4NEVcdTY4NDRcdTY4MzRcdTY4MURcdTY4MTJcdTY4MTRcdTY4MjZcdTY4MjhcdTY4MkVcdTY4NERcdTY4M0FcdTY4MjVcdTY4MjBcdTZCMkNcdTZCMkZcdTZCMkRcdTZCMzFcdTZCMzRcdTZCNkRcdTgwODJcdTZCODhcdTZCRTZcdTZCRTRcIl0sXG5bXCJkMjQwXCIsXCJcdTZCRThcdTZCRTNcdTZCRTJcdTZCRTdcdTZDMjVcdTZEN0FcdTZENjNcdTZENjRcdTZENzZcdTZEMERcdTZENjFcdTZEOTJcdTZENThcdTZENjJcdTZENkRcdTZENkZcdTZEOTFcdTZEOERcdTZERUZcdTZEN0ZcdTZEODZcdTZENUVcdTZENjdcdTZENjBcdTZEOTdcdTZENzBcdTZEN0NcdTZENUZcdTZEODJcdTZEOThcdTZEMkZcdTZENjhcdTZEOEJcdTZEN0VcdTZEODBcdTZEODRcdTZEMTZcdTZEODNcdTZEN0JcdTZEN0RcdTZENzVcdTZEOTBcdTcwRENcdTcwRDNcdTcwRDFcdTcwRERcdTcwQ0JcdTdGMzlcdTcwRTJcdTcwRDdcdTcwRDJcdTcwREVcdTcwRTBcdTcwRDRcdTcwQ0RcdTcwQzVcdTcwQzZcdTcwQzdcdTcwREFcdTcwQ0VcdTcwRTFcdTcyNDJcdTcyNzhcIl0sXG5bXCJkMmExXCIsXCJcdTcyNzdcdTcyNzZcdTczMDBcdTcyRkFcdTcyRjRcdTcyRkVcdTcyRjZcdTcyRjNcdTcyRkJcdTczMDFcdTczRDNcdTczRDlcdTczRTVcdTczRDZcdTczQkNcdTczRTdcdTczRTNcdTczRTlcdTczRENcdTczRDJcdTczREJcdTczRDRcdTczRERcdTczREFcdTczRDdcdTczRDhcdTczRThcdTc0REVcdTc0REZcdTc0RjRcdTc0RjVcdTc1MjFcdTc1NUJcdTc1NUZcdTc1QjBcdTc1QzFcdTc1QkJcdTc1QzRcdTc1QzBcdTc1QkZcdTc1QjZcdTc1QkFcdTc2OEFcdTc2QzlcdTc3MURcdTc3MUJcdTc3MTBcdTc3MTNcdTc3MTJcdTc3MjNcdTc3MTFcdTc3MTVcdTc3MTlcdTc3MUFcdTc3MjJcdTc3MjdcdTc4MjNcdTc4MkNcdTc4MjJcdTc4MzVcdTc4MkZcdTc4MjhcdTc4MkVcdTc4MkJcdTc4MjFcdTc4MjlcdTc4MzNcdTc4MkFcdTc4MzFcdTc5NTRcdTc5NUJcdTc5NEZcdTc5NUNcdTc5NTNcdTc5NTJcdTc5NTFcdTc5RUJcdTc5RUNcdTc5RTBcdTc5RUVcdTc5RURcdTc5RUFcdTc5RENcdTc5REVcdTc5RERcdTdBODZcdTdBODlcdTdBODVcdTdBOEJcdTdBOENcdTdBOEFcdTdBODdcdTdBRDhcdTdCMTBcIl0sXG5bXCJkMzQwXCIsXCJcdTdCMDRcdTdCMTNcdTdCMDVcdTdCMEZcdTdCMDhcdTdCMEFcdTdCMEVcdTdCMDlcdTdCMTJcdTdDODRcdTdDOTFcdTdDOEFcdTdDOENcdTdDODhcdTdDOERcdTdDODVcdTdEMUVcdTdEMURcdTdEMTFcdTdEMEVcdTdEMThcdTdEMTZcdTdEMTNcdTdEMUZcdTdEMTJcdTdEMEZcdTdEMENcdTdGNUNcdTdGNjFcdTdGNUVcdTdGNjBcdTdGNURcdTdGNUJcdTdGOTZcdTdGOTJcdTdGQzNcdTdGQzJcdTdGQzBcdTgwMTZcdTgwM0VcdTgwMzlcdTgwRkFcdTgwRjJcdTgwRjlcdTgwRjVcdTgxMDFcdTgwRkJcdTgxMDBcdTgyMDFcdTgyMkZcdTgyMjVcdTgzMzNcdTgzMkRcdTgzNDRcdTgzMTlcdTgzNTFcdTgzMjVcdTgzNTZcdTgzM0ZcdTgzNDFcdTgzMjZcdTgzMUNcdTgzMjJcIl0sXG5bXCJkM2ExXCIsXCJcdTgzNDJcdTgzNEVcdTgzMUJcdTgzMkFcdTgzMDhcdTgzM0NcdTgzNERcdTgzMTZcdTgzMjRcdTgzMjBcdTgzMzdcdTgzMkZcdTgzMjlcdTgzNDdcdTgzNDVcdTgzNENcdTgzNTNcdTgzMUVcdTgzMkNcdTgzNEJcdTgzMjdcdTgzNDhcdTg2NTNcdTg2NTJcdTg2QTJcdTg2QThcdTg2OTZcdTg2OERcdTg2OTFcdTg2OUVcdTg2ODdcdTg2OTdcdTg2ODZcdTg2OEJcdTg2OUFcdTg2ODVcdTg2QTVcdTg2OTlcdTg2QTFcdTg2QTdcdTg2OTVcdTg2OThcdTg2OEVcdTg2OURcdTg2OTBcdTg2OTRcdTg4NDNcdTg4NDRcdTg4NkRcdTg4NzVcdTg4NzZcdTg4NzJcdTg4ODBcdTg4NzFcdTg4N0ZcdTg4NkZcdTg4ODNcdTg4N0VcdTg4NzRcdTg4N0NcdThBMTJcdThDNDdcdThDNTdcdThDN0JcdThDQTRcdThDQTNcdThENzZcdThENzhcdThEQjVcdThEQjdcdThEQjZcdThFRDFcdThFRDNcdThGRkVcdThGRjVcdTkwMDJcdThGRkZcdThGRkJcdTkwMDRcdThGRkNcdThGRjZcdTkwRDZcdTkwRTBcdTkwRDlcdTkwREFcdTkwRTNcdTkwREZcdTkwRTVcdTkwRDhcdTkwREJcdTkwRDdcdTkwRENcdTkwRTRcdTkxNTBcIl0sXG5bXCJkNDQwXCIsXCJcdTkxNEVcdTkxNEZcdTkxRDVcdTkxRTJcdTkxREFcdTk2NUNcdTk2NUZcdTk2QkNcdTk4RTNcdTlBREZcdTlCMkZcdTRFN0ZcdTUwNzBcdTUwNkFcdTUwNjFcdTUwNUVcdTUwNjBcdTUwNTNcdTUwNEJcdTUwNURcdTUwNzJcdTUwNDhcdTUwNERcdTUwNDFcdTUwNUJcdTUwNEFcdTUwNjJcdTUwMTVcdTUwNDVcdTUwNUZcdTUwNjlcdTUwNkJcdTUwNjNcdTUwNjRcdTUwNDZcdTUwNDBcdTUwNkVcdTUwNzNcdTUwNTdcdTUwNTFcdTUxRDBcdTUyNkJcdTUyNkRcdTUyNkNcdTUyNkVcdTUyRDZcdTUyRDNcdTUzMkRcdTUzOUNcdTU1NzVcdTU1NzZcdTU1M0NcdTU1NERcdTU1NTBcdTU1MzRcdTU1MkFcdTU1NTFcdTU1NjJcdTU1MzZcdTU1MzVcdTU1MzBcdTU1NTJcdTU1NDVcIl0sXG5bXCJkNGExXCIsXCJcdTU1MENcdTU1MzJcdTU1NjVcdTU1NEVcdTU1MzlcdTU1NDhcdTU1MkRcdTU1M0JcdTU1NDBcdTU1NEJcdTU3MEFcdTU3MDdcdTU3RkJcdTU4MTRcdTU3RTJcdTU3RjZcdTU3RENcdTU3RjRcdTU4MDBcdTU3RURcdTU3RkRcdTU4MDhcdTU3RjhcdTU4MEJcdTU3RjNcdTU3Q0ZcdTU4MDdcdTU3RUVcdTU3RTNcdTU3RjJcdTU3RTVcdTU3RUNcdTU3RTFcdTU4MEVcdTU3RkNcdTU4MTBcdTU3RTdcdTU4MDFcdTU4MENcdTU3RjFcdTU3RTlcdTU3RjBcdTU4MERcdTU4MDRcdTU5NUNcdTVBNjBcdTVBNThcdTVBNTVcdTVBNjdcdTVBNUVcdTVBMzhcdTVBMzVcdTVBNkRcdTVBNTBcdTVBNUZcdTVBNjVcdTVBNkNcdTVBNTNcdTVBNjRcdTVBNTdcdTVBNDNcdTVBNURcdTVBNTJcdTVBNDRcdTVBNUJcdTVBNDhcdTVBOEVcdTVBM0VcdTVBNERcdTVBMzlcdTVBNENcdTVBNzBcdTVBNjlcdTVBNDdcdTVBNTFcdTVBNTZcdTVBNDJcdTVBNUNcdTVCNzJcdTVCNkVcdTVCQzFcdTVCQzBcdTVDNTlcdTVEMUVcdTVEMEJcdTVEMURcdTVEMUFcdTVEMjBcdTVEMENcdTVEMjhcdTVEMERcdTVEMjZcdTVEMjVcdTVEMEZcIl0sXG5bXCJkNTQwXCIsXCJcdTVEMzBcdTVEMTJcdTVEMjNcdTVEMUZcdTVEMkVcdTVFM0VcdTVFMzRcdTVFQjFcdTVFQjRcdTVFQjlcdTVFQjJcdTVFQjNcdTVGMzZcdTVGMzhcdTVGOUJcdTVGOTZcdTVGOUZcdTYwOEFcdTYwOTBcdTYwODZcdTYwQkVcdTYwQjBcdTYwQkFcdTYwRDNcdTYwRDRcdTYwQ0ZcdTYwRTRcdTYwRDlcdTYwRERcdTYwQzhcdTYwQjFcdTYwREJcdTYwQjdcdTYwQ0FcdTYwQkZcdTYwQzNcdTYwQ0RcdTYwQzBcdTYzMzJcdTYzNjVcdTYzOEFcdTYzODJcdTYzN0RcdTYzQkRcdTYzOUVcdTYzQURcdTYzOURcdTYzOTdcdTYzQUJcdTYzOEVcdTYzNkZcdTYzODdcdTYzOTBcdTYzNkVcdTYzQUZcdTYzNzVcdTYzOUNcdTYzNkRcdTYzQUVcdTYzN0NcdTYzQTRcdTYzM0JcdTYzOUZcIl0sXG5bXCJkNWExXCIsXCJcdTYzNzhcdTYzODVcdTYzODFcdTYzOTFcdTYzOERcdTYzNzBcdTY1NTNcdTY1Q0RcdTY2NjVcdTY2NjFcdTY2NUJcdTY2NTlcdTY2NUNcdTY2NjJcdTY3MThcdTY4NzlcdTY4ODdcdTY4OTBcdTY4OUNcdTY4NkRcdTY4NkVcdTY4QUVcdTY4QUJcdTY5NTZcdTY4NkZcdTY4QTNcdTY4QUNcdTY4QTlcdTY4NzVcdTY4NzRcdTY4QjJcdTY4OEZcdTY4NzdcdTY4OTJcdTY4N0NcdTY4NkJcdTY4NzJcdTY4QUFcdTY4ODBcdTY4NzFcdTY4N0VcdTY4OUJcdTY4OTZcdTY4OEJcdTY4QTBcdTY4ODlcdTY4QTRcdTY4NzhcdTY4N0JcdTY4OTFcdTY4OENcdTY4OEFcdTY4N0RcdTZCMzZcdTZCMzNcdTZCMzdcdTZCMzhcdTZCOTFcdTZCOEZcdTZCOERcdTZCOEVcdTZCOENcdTZDMkFcdTZEQzBcdTZEQUJcdTZEQjRcdTZEQjNcdTZFNzRcdTZEQUNcdTZERTlcdTZERTJcdTZEQjdcdTZERjZcdTZERDRcdTZFMDBcdTZEQzhcdTZERTBcdTZEREZcdTZERDZcdTZEQkVcdTZERTVcdTZERENcdTZERERcdTZEREJcdTZERjRcdTZEQ0FcdTZEQkRcdTZERURcdTZERjBcdTZEQkFcdTZERDVcdTZEQzJcdTZEQ0ZcdTZEQzlcIl0sXG5bXCJkNjQwXCIsXCJcdTZERDBcdTZERjJcdTZERDNcdTZERkRcdTZERDdcdTZEQ0RcdTZERTNcdTZEQkJcdTcwRkFcdTcxMERcdTcwRjdcdTcxMTdcdTcwRjRcdTcxMENcdTcwRjBcdTcxMDRcdTcwRjNcdTcxMTBcdTcwRkNcdTcwRkZcdTcxMDZcdTcxMTNcdTcxMDBcdTcwRjhcdTcwRjZcdTcxMEJcdTcxMDJcdTcxMEVcdTcyN0VcdTcyN0JcdTcyN0NcdTcyN0ZcdTczMURcdTczMTdcdTczMDdcdTczMTFcdTczMThcdTczMEFcdTczMDhcdTcyRkZcdTczMEZcdTczMUVcdTczODhcdTczRjZcdTczRjhcdTczRjVcdTc0MDRcdTc0MDFcdTczRkRcdTc0MDdcdTc0MDBcdTczRkFcdTczRkNcdTczRkZcdTc0MENcdTc0MEJcdTczRjRcdTc0MDhcdTc1NjRcdTc1NjNcdTc1Q0VcdTc1RDJcdTc1Q0ZcIl0sXG5bXCJkNmExXCIsXCJcdTc1Q0JcdTc1Q0NcdTc1RDFcdTc1RDBcdTc2OEZcdTc2ODlcdTc2RDNcdTc3MzlcdTc3MkZcdTc3MkRcdTc3MzFcdTc3MzJcdTc3MzRcdTc3MzNcdTc3M0RcdTc3MjVcdTc3M0JcdTc3MzVcdTc4NDhcdTc4NTJcdTc4NDlcdTc4NERcdTc4NEFcdTc4NENcdTc4MjZcdTc4NDVcdTc4NTBcdTc5NjRcdTc5NjdcdTc5NjlcdTc5NkFcdTc5NjNcdTc5NkJcdTc5NjFcdTc5QkJcdTc5RkFcdTc5RjhcdTc5RjZcdTc5RjdcdTdBOEZcdTdBOTRcdTdBOTBcdTdCMzVcdTdCNDdcdTdCMzRcdTdCMjVcdTdCMzBcdTdCMjJcdTdCMjRcdTdCMzNcdTdCMThcdTdCMkFcdTdCMURcdTdCMzFcdTdCMkJcdTdCMkRcdTdCMkZcdTdCMzJcdTdCMzhcdTdCMUFcdTdCMjNcdTdDOTRcdTdDOThcdTdDOTZcdTdDQTNcdTdEMzVcdTdEM0RcdTdEMzhcdTdEMzZcdTdEM0FcdTdENDVcdTdEMkNcdTdEMjlcdTdENDFcdTdENDdcdTdEM0VcdTdEM0ZcdTdENEFcdTdEM0JcdTdEMjhcdTdGNjNcdTdGOTVcdTdGOUNcdTdGOURcdTdGOUJcdTdGQ0FcdTdGQ0JcdTdGQ0RcdTdGRDBcdTdGRDFcdTdGQzdcdTdGQ0ZcdTdGQzlcdTgwMUZcIl0sXG5bXCJkNzQwXCIsXCJcdTgwMUVcdTgwMUJcdTgwNDdcdTgwNDNcdTgwNDhcdTgxMThcdTgxMjVcdTgxMTlcdTgxMUJcdTgxMkRcdTgxMUZcdTgxMkNcdTgxMUVcdTgxMjFcdTgxMTVcdTgxMjdcdTgxMURcdTgxMjJcdTgyMTFcdTgyMzhcdTgyMzNcdTgyM0FcdTgyMzRcdTgyMzJcdTgyNzRcdTgzOTBcdTgzQTNcdTgzQThcdTgzOERcdTgzN0FcdTgzNzNcdTgzQTRcdTgzNzRcdTgzOEZcdTgzODFcdTgzOTVcdTgzOTlcdTgzNzVcdTgzOTRcdTgzQTlcdTgzN0RcdTgzODNcdTgzOENcdTgzOURcdTgzOUJcdTgzQUFcdTgzOEJcdTgzN0VcdTgzQTVcdTgzQUZcdTgzODhcdTgzOTdcdTgzQjBcdTgzN0ZcdTgzQTZcdTgzODdcdTgzQUVcdTgzNzZcdTgzOUFcdTg2NTlcdTg2NTZcdTg2QkZcdTg2QjdcIl0sXG5bXCJkN2ExXCIsXCJcdTg2QzJcdTg2QzFcdTg2QzVcdTg2QkFcdTg2QjBcdTg2QzhcdTg2QjlcdTg2QjNcdTg2QjhcdTg2Q0NcdTg2QjRcdTg2QkJcdTg2QkNcdTg2QzNcdTg2QkRcdTg2QkVcdTg4NTJcdTg4ODlcdTg4OTVcdTg4QThcdTg4QTJcdTg4QUFcdTg4OUFcdTg4OTFcdTg4QTFcdTg4OUZcdTg4OThcdTg4QTdcdTg4OTlcdTg4OUJcdTg4OTdcdTg4QTRcdTg4QUNcdTg4OENcdTg4OTNcdTg4OEVcdTg5ODJcdTg5RDZcdTg5RDlcdTg5RDVcdThBMzBcdThBMjdcdThBMkNcdThBMUVcdThDMzlcdThDM0JcdThDNUNcdThDNURcdThDN0RcdThDQTVcdThEN0RcdThEN0JcdThENzlcdThEQkNcdThEQzJcdThEQjlcdThEQkZcdThEQzFcdThFRDhcdThFREVcdThFRERcdThFRENcdThFRDdcdThFRTBcdThFRTFcdTkwMjRcdTkwMEJcdTkwMTFcdTkwMUNcdTkwMENcdTkwMjFcdTkwRUZcdTkwRUFcdTkwRjBcdTkwRjRcdTkwRjJcdTkwRjNcdTkwRDRcdTkwRUJcdTkwRUNcdTkwRTlcdTkxNTZcdTkxNThcdTkxNUFcdTkxNTNcdTkxNTVcdTkxRUNcdTkxRjRcdTkxRjFcdTkxRjNcdTkxRjhcdTkxRTRcdTkxRjlcdTkxRUFcIl0sXG5bXCJkODQwXCIsXCJcdTkxRUJcdTkxRjdcdTkxRThcdTkxRUVcdTk1N0FcdTk1ODZcdTk1ODhcdTk2N0NcdTk2NkRcdTk2NkJcdTk2NzFcdTk2NkZcdTk2QkZcdTk3NkFcdTk4MDRcdTk4RTVcdTk5OTdcdTUwOUJcdTUwOTVcdTUwOTRcdTUwOUVcdTUwOEJcdTUwQTNcdTUwODNcdTUwOENcdTUwOEVcdTUwOURcdTUwNjhcdTUwOUNcdTUwOTJcdTUwODJcdTUwODdcdTUxNUZcdTUxRDRcdTUzMTJcdTUzMTFcdTUzQTRcdTUzQTdcdTU1OTFcdTU1QThcdTU1QTVcdTU1QURcdTU1NzdcdTU2NDVcdTU1QTJcdTU1OTNcdTU1ODhcdTU1OEZcdTU1QjVcdTU1ODFcdTU1QTNcdTU1OTJcdTU1QTRcdTU1N0RcdTU1OENcdTU1QTZcdTU1N0ZcdTU1OTVcdTU1QTFcdTU1OEVcdTU3MENcdTU4MjlcdTU4MzdcIl0sXG5bXCJkOGExXCIsXCJcdTU4MTlcdTU4MUVcdTU4MjdcdTU4MjNcdTU4MjhcdTU3RjVcdTU4NDhcdTU4MjVcdTU4MUNcdTU4MUJcdTU4MzNcdTU4M0ZcdTU4MzZcdTU4MkVcdTU4MzlcdTU4MzhcdTU4MkRcdTU4MkNcdTU4M0JcdTU5NjFcdTVBQUZcdTVBOTRcdTVBOUZcdTVBN0FcdTVBQTJcdTVBOUVcdTVBNzhcdTVBQTZcdTVBN0NcdTVBQTVcdTVBQUNcdTVBOTVcdTVBQUVcdTVBMzdcdTVBODRcdTVBOEFcdTVBOTdcdTVBODNcdTVBOEJcdTVBQTlcdTVBN0JcdTVBN0RcdTVBOENcdTVBOUNcdTVBOEZcdTVBOTNcdTVBOURcdTVCRUFcdTVCQ0RcdTVCQ0JcdTVCRDRcdTVCRDFcdTVCQ0FcdTVCQ0VcdTVDMENcdTVDMzBcdTVEMzdcdTVENDNcdTVENkJcdTVENDFcdTVENEJcdTVEM0ZcdTVEMzVcdTVENTFcdTVENEVcdTVENTVcdTVEMzNcdTVEM0FcdTVENTJcdTVEM0RcdTVEMzFcdTVENTlcdTVENDJcdTVEMzlcdTVENDlcdTVEMzhcdTVEM0NcdTVEMzJcdTVEMzZcdTVENDBcdTVENDVcdTVFNDRcdTVFNDFcdTVGNThcdTVGQTZcdTVGQTVcdTVGQUJcdTYwQzlcdTYwQjlcdTYwQ0NcdTYwRTJcdTYwQ0VcdTYwQzRcdTYxMTRcIl0sXG5bXCJkOTQwXCIsXCJcdTYwRjJcdTYxMEFcdTYxMTZcdTYxMDVcdTYwRjVcdTYxMTNcdTYwRjhcdTYwRkNcdTYwRkVcdTYwQzFcdTYxMDNcdTYxMThcdTYxMURcdTYxMTBcdTYwRkZcdTYxMDRcdTYxMEJcdTYyNEFcdTYzOTRcdTYzQjFcdTYzQjBcdTYzQ0VcdTYzRTVcdTYzRThcdTYzRUZcdTYzQzNcdTY0OURcdTYzRjNcdTYzQ0FcdTYzRTBcdTYzRjZcdTYzRDVcdTYzRjJcdTYzRjVcdTY0NjFcdTYzREZcdTYzQkVcdTYzRERcdTYzRENcdTYzQzRcdTYzRDhcdTYzRDNcdTYzQzJcdTYzQzdcdTYzQ0NcdTYzQ0JcdTYzQzhcdTYzRjBcdTYzRDdcdTYzRDlcdTY1MzJcdTY1NjdcdTY1NkFcdTY1NjRcdTY1NUNcdTY1NjhcdTY1NjVcdTY1OENcdTY1OURcdTY1OUVcdTY1QUVcdTY1RDBcdTY1RDJcIl0sXG5bXCJkOWExXCIsXCJcdTY2N0NcdTY2NkNcdTY2N0JcdTY2ODBcdTY2NzFcdTY2NzlcdTY2NkFcdTY2NzJcdTY3MDFcdTY5MENcdTY4RDNcdTY5MDRcdTY4RENcdTY5MkFcdTY4RUNcdTY4RUFcdTY4RjFcdTY5MEZcdTY4RDZcdTY4RjdcdTY4RUJcdTY4RTRcdTY4RjZcdTY5MTNcdTY5MTBcdTY4RjNcdTY4RTFcdTY5MDdcdTY4Q0NcdTY5MDhcdTY5NzBcdTY4QjRcdTY5MTFcdTY4RUZcdTY4QzZcdTY5MTRcdTY4RjhcdTY4RDBcdTY4RkRcdTY4RkNcdTY4RThcdTY5MEJcdTY5MEFcdTY5MTdcdTY4Q0VcdTY4QzhcdTY4RERcdTY4REVcdTY4RTZcdTY4RjRcdTY4RDFcdTY5MDZcdTY4RDRcdTY4RTlcdTY5MTVcdTY5MjVcdTY4QzdcdTZCMzlcdTZCM0JcdTZCM0ZcdTZCM0NcdTZCOTRcdTZCOTdcdTZCOTlcdTZCOTVcdTZCQkRcdTZCRjBcdTZCRjJcdTZCRjNcdTZDMzBcdTZERkNcdTZFNDZcdTZFNDdcdTZFMUZcdTZFNDlcdTZFODhcdTZFM0NcdTZFM0RcdTZFNDVcdTZFNjJcdTZFMkJcdTZFM0ZcdTZFNDFcdTZFNURcdTZFNzNcdTZFMUNcdTZFMzNcdTZFNEJcdTZFNDBcdTZFNTFcdTZFM0JcdTZFMDNcdTZFMkVcdTZFNUVcIl0sXG5bXCJkYTQwXCIsXCJcdTZFNjhcdTZFNUNcdTZFNjFcdTZFMzFcdTZFMjhcdTZFNjBcdTZFNzFcdTZFNkJcdTZFMzlcdTZFMjJcdTZFMzBcdTZFNTNcdTZFNjVcdTZFMjdcdTZFNzhcdTZFNjRcdTZFNzdcdTZFNTVcdTZFNzlcdTZFNTJcdTZFNjZcdTZFMzVcdTZFMzZcdTZFNUFcdTcxMjBcdTcxMUVcdTcxMkZcdTcwRkJcdTcxMkVcdTcxMzFcdTcxMjNcdTcxMjVcdTcxMjJcdTcxMzJcdTcxMUZcdTcxMjhcdTcxM0FcdTcxMUJcdTcyNEJcdTcyNUFcdTcyODhcdTcyODlcdTcyODZcdTcyODVcdTcyOEJcdTczMTJcdTczMEJcdTczMzBcdTczMjJcdTczMzFcdTczMzNcdTczMjdcdTczMzJcdTczMkRcdTczMjZcdTczMjNcdTczMzVcdTczMENcdTc0MkVcdTc0MkNcdTc0MzBcdTc0MkJcdTc0MTZcIl0sXG5bXCJkYWExXCIsXCJcdTc0MUFcdTc0MjFcdTc0MkRcdTc0MzFcdTc0MjRcdTc0MjNcdTc0MURcdTc0MjlcdTc0MjBcdTc0MzJcdTc0RkJcdTc1MkZcdTc1NkZcdTc1NkNcdTc1RTdcdTc1REFcdTc1RTFcdTc1RTZcdTc1RERcdTc1REZcdTc1RTRcdTc1RDdcdTc2OTVcdTc2OTJcdTc2REFcdTc3NDZcdTc3NDdcdTc3NDRcdTc3NERcdTc3NDVcdTc3NEFcdTc3NEVcdTc3NEJcdTc3NENcdTc3REVcdTc3RUNcdTc4NjBcdTc4NjRcdTc4NjVcdTc4NUNcdTc4NkRcdTc4NzFcdTc4NkFcdTc4NkVcdTc4NzBcdTc4NjlcdTc4NjhcdTc4NUVcdTc4NjJcdTc5NzRcdTc5NzNcdTc5NzJcdTc5NzBcdTdBMDJcdTdBMEFcdTdBMDNcdTdBMENcdTdBMDRcdTdBOTlcdTdBRTZcdTdBRTRcdTdCNEFcdTdCM0JcdTdCNDRcdTdCNDhcdTdCNENcdTdCNEVcdTdCNDBcdTdCNThcdTdCNDVcdTdDQTJcdTdDOUVcdTdDQThcdTdDQTFcdTdENThcdTdENkZcdTdENjNcdTdENTNcdTdENTZcdTdENjdcdTdENkFcdTdENEZcdTdENkRcdTdENUNcdTdENkJcdTdENTJcdTdENTRcdTdENjlcdTdENTFcdTdENUZcdTdENEVcdTdGM0VcdTdGM0ZcdTdGNjVcIl0sXG5bXCJkYjQwXCIsXCJcdTdGNjZcdTdGQTJcdTdGQTBcdTdGQTFcdTdGRDdcdTgwNTFcdTgwNEZcdTgwNTBcdTgwRkVcdTgwRDRcdTgxNDNcdTgxNEFcdTgxNTJcdTgxNEZcdTgxNDdcdTgxM0RcdTgxNERcdTgxM0FcdTgxRTZcdTgxRUVcdTgxRjdcdTgxRjhcdTgxRjlcdTgyMDRcdTgyM0NcdTgyM0RcdTgyM0ZcdTgyNzVcdTgzM0JcdTgzQ0ZcdTgzRjlcdTg0MjNcdTgzQzBcdTgzRThcdTg0MTJcdTgzRTdcdTgzRTRcdTgzRkNcdTgzRjZcdTg0MTBcdTgzQzZcdTgzQzhcdTgzRUJcdTgzRTNcdTgzQkZcdTg0MDFcdTgzRERcdTgzRTVcdTgzRDhcdTgzRkZcdTgzRTFcdTgzQ0JcdTgzQ0VcdTgzRDZcdTgzRjVcdTgzQzlcdTg0MDlcdTg0MEZcdTgzREVcdTg0MTFcdTg0MDZcdTgzQzJcdTgzRjNcIl0sXG5bXCJkYmExXCIsXCJcdTgzRDVcdTgzRkFcdTgzQzdcdTgzRDFcdTgzRUFcdTg0MTNcdTgzQzNcdTgzRUNcdTgzRUVcdTgzQzRcdTgzRkJcdTgzRDdcdTgzRTJcdTg0MUJcdTgzREJcdTgzRkVcdTg2RDhcdTg2RTJcdTg2RTZcdTg2RDNcdTg2RTNcdTg2REFcdTg2RUFcdTg2RERcdTg2RUJcdTg2RENcdTg2RUNcdTg2RTlcdTg2RDdcdTg2RThcdTg2RDFcdTg4NDhcdTg4NTZcdTg4NTVcdTg4QkFcdTg4RDdcdTg4QjlcdTg4QjhcdTg4QzBcdTg4QkVcdTg4QjZcdTg4QkNcdTg4QjdcdTg4QkRcdTg4QjJcdTg5MDFcdTg4QzlcdTg5OTVcdTg5OThcdTg5OTdcdTg5RERcdTg5REFcdTg5REJcdThBNEVcdThBNERcdThBMzlcdThBNTlcdThBNDBcdThBNTdcdThBNThcdThBNDRcdThBNDVcdThBNTJcdThBNDhcdThBNTFcdThBNEFcdThBNENcdThBNEZcdThDNUZcdThDODFcdThDODBcdThDQkFcdThDQkVcdThDQjBcdThDQjlcdThDQjVcdThEODRcdThEODBcdThEODlcdThERDhcdThERDNcdThEQ0RcdThEQzdcdThERDZcdThERENcdThEQ0ZcdThERDVcdThERDlcdThEQzhcdThERDdcdThEQzVcdThFRUZcdThFRjdcdThFRkFcIl0sXG5bXCJkYzQwXCIsXCJcdThFRjlcdThFRTZcdThFRUVcdThFRTVcdThFRjVcdThFRTdcdThFRThcdThFRjZcdThFRUJcdThFRjFcdThFRUNcdThFRjRcdThFRTlcdTkwMkRcdTkwMzRcdTkwMkZcdTkxMDZcdTkxMkNcdTkxMDRcdTkwRkZcdTkwRkNcdTkxMDhcdTkwRjlcdTkwRkJcdTkxMDFcdTkxMDBcdTkxMDdcdTkxMDVcdTkxMDNcdTkxNjFcdTkxNjRcdTkxNUZcdTkxNjJcdTkxNjBcdTkyMDFcdTkyMEFcdTkyMjVcdTkyMDNcdTkyMUFcdTkyMjZcdTkyMEZcdTkyMENcdTkyMDBcdTkyMTJcdTkxRkZcdTkxRkRcdTkyMDZcdTkyMDRcdTkyMjdcdTkyMDJcdTkyMUNcdTkyMjRcdTkyMTlcdTkyMTdcdTkyMDVcdTkyMTZcdTk1N0JcdTk1OERcdTk1OENcdTk1OTBcdTk2ODdcdTk2N0VcdTk2ODhcIl0sXG5bXCJkY2ExXCIsXCJcdTk2ODlcdTk2ODNcdTk2ODBcdTk2QzJcdTk2QzhcdTk2QzNcdTk2RjFcdTk2RjBcdTk3NkNcdTk3NzBcdTk3NkVcdTk4MDdcdTk4QTlcdTk4RUJcdTlDRTZcdTlFRjlcdTRFODNcdTRFODRcdTRFQjZcdTUwQkRcdTUwQkZcdTUwQzZcdTUwQUVcdTUwQzRcdTUwQ0FcdTUwQjRcdTUwQzhcdTUwQzJcdTUwQjBcdTUwQzFcdTUwQkFcdTUwQjFcdTUwQ0JcdTUwQzlcdTUwQjZcdTUwQjhcdTUxRDdcdTUyN0FcdTUyNzhcdTUyN0JcdTUyN0NcdTU1QzNcdTU1REJcdTU1Q0NcdTU1RDBcdTU1Q0JcdTU1Q0FcdTU1RERcdTU1QzBcdTU1RDRcdTU1QzRcdTU1RTlcdTU1QkZcdTU1RDJcdTU1OERcdTU1Q0ZcdTU1RDVcdTU1RTJcdTU1RDZcdTU1QzhcdTU1RjJcdTU1Q0RcdTU1RDlcdTU1QzJcdTU3MTRcdTU4NTNcdTU4NjhcdTU4NjRcdTU4NEZcdTU4NERcdTU4NDlcdTU4NkZcdTU4NTVcdTU4NEVcdTU4NURcdTU4NTlcdTU4NjVcdTU4NUJcdTU4M0RcdTU4NjNcdTU4NzFcdTU4RkNcdTVBQzdcdTVBQzRcdTVBQ0JcdTVBQkFcdTVBQjhcdTVBQjFcdTVBQjVcdTVBQjBcdTVBQkZcdTVBQzhcdTVBQkJcdTVBQzZcIl0sXG5bXCJkZDQwXCIsXCJcdTVBQjdcdTVBQzBcdTVBQ0FcdTVBQjRcdTVBQjZcdTVBQ0RcdTVBQjlcdTVBOTBcdTVCRDZcdTVCRDhcdTVCRDlcdTVDMUZcdTVDMzNcdTVENzFcdTVENjNcdTVENEFcdTVENjVcdTVENzJcdTVENkNcdTVENUVcdTVENjhcdTVENjdcdTVENjJcdTVERjBcdTVFNEZcdTVFNEVcdTVFNEFcdTVFNERcdTVFNEJcdTVFQzVcdTVFQ0NcdTVFQzZcdTVFQ0JcdTVFQzdcdTVGNDBcdTVGQUZcdTVGQURcdTYwRjdcdTYxNDlcdTYxNEFcdTYxMkJcdTYxNDVcdTYxMzZcdTYxMzJcdTYxMkVcdTYxNDZcdTYxMkZcdTYxNEZcdTYxMjlcdTYxNDBcdTYyMjBcdTkxNjhcdTYyMjNcdTYyMjVcdTYyMjRcdTYzQzVcdTYzRjFcdTYzRUJcdTY0MTBcdTY0MTJcdTY0MDlcdTY0MjBcdTY0MjRcIl0sXG5bXCJkZGExXCIsXCJcdTY0MzNcdTY0NDNcdTY0MUZcdTY0MTVcdTY0MThcdTY0MzlcdTY0MzdcdTY0MjJcdTY0MjNcdTY0MENcdTY0MjZcdTY0MzBcdTY0MjhcdTY0NDFcdTY0MzVcdTY0MkZcdTY0MEFcdTY0MUFcdTY0NDBcdTY0MjVcdTY0MjdcdTY0MEJcdTYzRTdcdTY0MUJcdTY0MkVcdTY0MjFcdTY0MEVcdTY1NkZcdTY1OTJcdTY1RDNcdTY2ODZcdTY2OENcdTY2OTVcdTY2OTBcdTY2OEJcdTY2OEFcdTY2OTlcdTY2OTRcdTY2NzhcdTY3MjBcdTY5NjZcdTY5NUZcdTY5MzhcdTY5NEVcdTY5NjJcdTY5NzFcdTY5M0ZcdTY5NDVcdTY5NkFcdTY5MzlcdTY5NDJcdTY5NTdcdTY5NTlcdTY5N0FcdTY5NDhcdTY5NDlcdTY5MzVcdTY5NkNcdTY5MzNcdTY5M0RcdTY5NjVcdTY4RjBcdTY5NzhcdTY5MzRcdTY5NjlcdTY5NDBcdTY5NkZcdTY5NDRcdTY5NzZcdTY5NThcdTY5NDFcdTY5NzRcdTY5NENcdTY5M0JcdTY5NEJcdTY5MzdcdTY5NUNcdTY5NEZcdTY5NTFcdTY5MzJcdTY5NTJcdTY5MkZcdTY5N0JcdTY5M0NcdTZCNDZcdTZCNDVcdTZCNDNcdTZCNDJcdTZCNDhcdTZCNDFcdTZCOUJcdUZBMERcdTZCRkJcdTZCRkNcIl0sXG5bXCJkZTQwXCIsXCJcdTZCRjlcdTZCRjdcdTZCRjhcdTZFOUJcdTZFRDZcdTZFQzhcdTZFOEZcdTZFQzBcdTZFOUZcdTZFOTNcdTZFOTRcdTZFQTBcdTZFQjFcdTZFQjlcdTZFQzZcdTZFRDJcdTZFQkRcdTZFQzFcdTZFOUVcdTZFQzlcdTZFQjdcdTZFQjBcdTZFQ0RcdTZFQTZcdTZFQ0ZcdTZFQjJcdTZFQkVcdTZFQzNcdTZFRENcdTZFRDhcdTZFOTlcdTZFOTJcdTZFOEVcdTZFOERcdTZFQTRcdTZFQTFcdTZFQkZcdTZFQjNcdTZFRDBcdTZFQ0FcdTZFOTdcdTZFQUVcdTZFQTNcdTcxNDdcdTcxNTRcdTcxNTJcdTcxNjNcdTcxNjBcdTcxNDFcdTcxNURcdTcxNjJcdTcxNzJcdTcxNzhcdTcxNkFcdTcxNjFcdTcxNDJcdTcxNThcdTcxNDNcdTcxNEJcdTcxNzBcdTcxNUZcdTcxNTBcdTcxNTNcIl0sXG5bXCJkZWExXCIsXCJcdTcxNDRcdTcxNERcdTcxNUFcdTcyNEZcdTcyOERcdTcyOENcdTcyOTFcdTcyOTBcdTcyOEVcdTczM0NcdTczNDJcdTczM0JcdTczM0FcdTczNDBcdTczNEFcdTczNDlcdTc0NDRcdTc0NEFcdTc0NEJcdTc0NTJcdTc0NTFcdTc0NTdcdTc0NDBcdTc0NEZcdTc0NTBcdTc0NEVcdTc0NDJcdTc0NDZcdTc0NERcdTc0NTRcdTc0RTFcdTc0RkZcdTc0RkVcdTc0RkRcdTc1MURcdTc1NzlcdTc1NzdcdTY5ODNcdTc1RUZcdTc2MEZcdTc2MDNcdTc1RjdcdTc1RkVcdTc1RkNcdTc1RjlcdTc1RjhcdTc2MTBcdTc1RkJcdTc1RjZcdTc1RURcdTc1RjVcdTc1RkRcdTc2OTlcdTc2QjVcdTc2RERcdTc3NTVcdTc3NUZcdTc3NjBcdTc3NTJcdTc3NTZcdTc3NUFcdTc3NjlcdTc3NjdcdTc3NTRcdTc3NTlcdTc3NkRcdTc3RTBcdTc4ODdcdTc4OUFcdTc4OTRcdTc4OEZcdTc4ODRcdTc4OTVcdTc4ODVcdTc4ODZcdTc4QTFcdTc4ODNcdTc4NzlcdTc4OTlcdTc4ODBcdTc4OTZcdTc4N0JcdTc5N0NcdTc5ODJcdTc5N0RcdTc5NzlcdTdBMTFcdTdBMThcdTdBMTlcdTdBMTJcdTdBMTdcdTdBMTVcdTdBMjJcdTdBMTNcIl0sXG5bXCJkZjQwXCIsXCJcdTdBMUJcdTdBMTBcdTdBQTNcdTdBQTJcdTdBOUVcdTdBRUJcdTdCNjZcdTdCNjRcdTdCNkRcdTdCNzRcdTdCNjlcdTdCNzJcdTdCNjVcdTdCNzNcdTdCNzFcdTdCNzBcdTdCNjFcdTdCNzhcdTdCNzZcdTdCNjNcdTdDQjJcdTdDQjRcdTdDQUZcdTdEODhcdTdEODZcdTdEODBcdTdEOERcdTdEN0ZcdTdEODVcdTdEN0FcdTdEOEVcdTdEN0JcdTdEODNcdTdEN0NcdTdEOENcdTdEOTRcdTdEODRcdTdEN0RcdTdEOTJcdTdGNkRcdTdGNkJcdTdGNjdcdTdGNjhcdTdGNkNcdTdGQTZcdTdGQTVcdTdGQTdcdTdGREJcdTdGRENcdTgwMjFcdTgxNjRcdTgxNjBcdTgxNzdcdTgxNUNcdTgxNjlcdTgxNUJcdTgxNjJcdTgxNzJcdTY3MjFcdTgxNUVcdTgxNzZcdTgxNjdcdTgxNkZcIl0sXG5bXCJkZmExXCIsXCJcdTgxNDRcdTgxNjFcdTgyMURcdTgyNDlcdTgyNDRcdTgyNDBcdTgyNDJcdTgyNDVcdTg0RjFcdTg0M0ZcdTg0NTZcdTg0NzZcdTg0NzlcdTg0OEZcdTg0OERcdTg0NjVcdTg0NTFcdTg0NDBcdTg0ODZcdTg0NjdcdTg0MzBcdTg0NERcdTg0N0RcdTg0NUFcdTg0NTlcdTg0NzRcdTg0NzNcdTg0NURcdTg1MDdcdTg0NUVcdTg0MzdcdTg0M0FcdTg0MzRcdTg0N0FcdTg0NDNcdTg0NzhcdTg0MzJcdTg0NDVcdTg0MjlcdTgzRDlcdTg0NEJcdTg0MkZcdTg0NDJcdTg0MkRcdTg0NUZcdTg0NzBcdTg0MzlcdTg0NEVcdTg0NENcdTg0NTJcdTg0NkZcdTg0QzVcdTg0OEVcdTg0M0JcdTg0NDdcdTg0MzZcdTg0MzNcdTg0NjhcdTg0N0VcdTg0NDRcdTg0MkJcdTg0NjBcdTg0NTRcdTg0NkVcdTg0NTBcdTg3MEJcdTg3MDRcdTg2RjdcdTg3MENcdTg2RkFcdTg2RDZcdTg2RjVcdTg3NERcdTg2RjhcdTg3MEVcdTg3MDlcdTg3MDFcdTg2RjZcdTg3MERcdTg3MDVcdTg4RDZcdTg4Q0JcdTg4Q0RcdTg4Q0VcdTg4REVcdTg4REJcdTg4REFcdTg4Q0NcdTg4RDBcdTg5ODVcdTg5OUJcdTg5REZcdTg5RTVcdTg5RTRcIl0sXG5bXCJlMDQwXCIsXCJcdTg5RTFcdTg5RTBcdTg5RTJcdTg5RENcdTg5RTZcdThBNzZcdThBODZcdThBN0ZcdThBNjFcdThBM0ZcdThBNzdcdThBODJcdThBODRcdThBNzVcdThBODNcdThBODFcdThBNzRcdThBN0FcdThDM0NcdThDNEJcdThDNEFcdThDNjVcdThDNjRcdThDNjZcdThDODZcdThDODRcdThDODVcdThDQ0NcdThENjhcdThENjlcdThEOTFcdThEOENcdThEOEVcdThEOEZcdThEOERcdThEOTNcdThEOTRcdThEOTBcdThEOTJcdThERjBcdThERTBcdThERUNcdThERjFcdThERUVcdThERDBcdThERTlcdThERTNcdThERTJcdThERTdcdThERjJcdThERUJcdThERjRcdThGMDZcdThFRkZcdThGMDFcdThGMDBcdThGMDVcdThGMDdcdThGMDhcdThGMDJcdThGMEJcdTkwNTJcdTkwM0ZcIl0sXG5bXCJlMGExXCIsXCJcdTkwNDRcdTkwNDlcdTkwM0RcdTkxMTBcdTkxMERcdTkxMEZcdTkxMTFcdTkxMTZcdTkxMTRcdTkxMEJcdTkxMEVcdTkxNkVcdTkxNkZcdTkyNDhcdTkyNTJcdTkyMzBcdTkyM0FcdTkyNjZcdTkyMzNcdTkyNjVcdTkyNUVcdTkyODNcdTkyMkVcdTkyNEFcdTkyNDZcdTkyNkRcdTkyNkNcdTkyNEZcdTkyNjBcdTkyNjdcdTkyNkZcdTkyMzZcdTkyNjFcdTkyNzBcdTkyMzFcdTkyNTRcdTkyNjNcdTkyNTBcdTkyNzJcdTkyNEVcdTkyNTNcdTkyNENcdTkyNTZcdTkyMzJcdTk1OUZcdTk1OUNcdTk1OUVcdTk1OUJcdTk2OTJcdTk2OTNcdTk2OTFcdTk2OTdcdTk2Q0VcdTk2RkFcdTk2RkRcdTk2RjhcdTk2RjVcdTk3NzNcdTk3NzdcdTk3NzhcdTk3NzJcdTk4MEZcdTk4MERcdTk4MEVcdTk4QUNcdTk4RjZcdTk4RjlcdTk5QUZcdTk5QjJcdTk5QjBcdTk5QjVcdTlBQURcdTlBQUJcdTlCNUJcdTlDRUFcdTlDRURcdTlDRTdcdTlFODBcdTlFRkRcdTUwRTZcdTUwRDRcdTUwRDdcdTUwRThcdTUwRjNcdTUwREJcdTUwRUFcdTUwRERcdTUwRTRcdTUwRDNcdTUwRUNcdTUwRjBcdTUwRUZcdTUwRTNcdTUwRTBcIl0sXG5bXCJlMTQwXCIsXCJcdTUxRDhcdTUyODBcdTUyODFcdTUyRTlcdTUyRUJcdTUzMzBcdTUzQUNcdTU2MjdcdTU2MTVcdTU2MENcdTU2MTJcdTU1RkNcdTU2MEZcdTU2MUNcdTU2MDFcdTU2MTNcdTU2MDJcdTU1RkFcdTU2MURcdTU2MDRcdTU1RkZcdTU1RjlcdTU4ODlcdTU4N0NcdTU4OTBcdTU4OThcdTU4ODZcdTU4ODFcdTU4N0ZcdTU4NzRcdTU4OEJcdTU4N0FcdTU4ODdcdTU4OTFcdTU4OEVcdTU4NzZcdTU4ODJcdTU4ODhcdTU4N0JcdTU4OTRcdTU4OEZcdTU4RkVcdTU5NkJcdTVBRENcdTVBRUVcdTVBRTVcdTVBRDVcdTVBRUFcdTVBREFcdTVBRURcdTVBRUJcdTVBRjNcdTVBRTJcdTVBRTBcdTVBREJcdTVBRUNcdTVBREVcdTVBRERcdTVBRDlcdTVBRThcdTVBREZcdTVCNzdcdTVCRTBcIl0sXG5bXCJlMWExXCIsXCJcdTVCRTNcdTVDNjNcdTVEODJcdTVEODBcdTVEN0RcdTVEODZcdTVEN0FcdTVEODFcdTVENzdcdTVEOEFcdTVEODlcdTVEODhcdTVEN0VcdTVEN0NcdTVEOERcdTVENzlcdTVEN0ZcdTVFNThcdTVFNTlcdTVFNTNcdTVFRDhcdTVFRDFcdTVFRDdcdTVFQ0VcdTVFRENcdTVFRDVcdTVFRDlcdTVFRDJcdTVFRDRcdTVGNDRcdTVGNDNcdTVGNkZcdTVGQjZcdTYxMkNcdTYxMjhcdTYxNDFcdTYxNUVcdTYxNzFcdTYxNzNcdTYxNTJcdTYxNTNcdTYxNzJcdTYxNkNcdTYxODBcdTYxNzRcdTYxNTRcdTYxN0FcdTYxNUJcdTYxNjVcdTYxM0JcdTYxNkFcdTYxNjFcdTYxNTZcdTYyMjlcdTYyMjdcdTYyMkJcdTY0MkJcdTY0NERcdTY0NUJcdTY0NURcdTY0NzRcdTY0NzZcdTY0NzJcdTY0NzNcdTY0N0RcdTY0NzVcdTY0NjZcdTY0QTZcdTY0NEVcdTY0ODJcdTY0NUVcdTY0NUNcdTY0NEJcdTY0NTNcdTY0NjBcdTY0NTBcdTY0N0ZcdTY0M0ZcdTY0NkNcdTY0NkJcdTY0NTlcdTY0NjVcdTY0NzdcdTY1NzNcdTY1QTBcdTY2QTFcdTY2QTBcdTY2OUZcdTY3MDVcdTY3MDRcdTY3MjJcdTY5QjFcdTY5QjZcdTY5QzlcIl0sXG5bXCJlMjQwXCIsXCJcdTY5QTBcdTY5Q0VcdTY5OTZcdTY5QjBcdTY5QUNcdTY5QkNcdTY5OTFcdTY5OTlcdTY5OEVcdTY5QTdcdTY5OERcdTY5QTlcdTY5QkVcdTY5QUZcdTY5QkZcdTY5QzRcdTY5QkRcdTY5QTRcdTY5RDRcdTY5QjlcdTY5Q0FcdTY5OUFcdTY5Q0ZcdTY5QjNcdTY5OTNcdTY5QUFcdTY5QTFcdTY5OUVcdTY5RDlcdTY5OTdcdTY5OTBcdTY5QzJcdTY5QjVcdTY5QTVcdTY5QzZcdTZCNEFcdTZCNERcdTZCNEJcdTZCOUVcdTZCOUZcdTZCQTBcdTZCQzNcdTZCQzRcdTZCRkVcdTZFQ0VcdTZFRjVcdTZFRjFcdTZGMDNcdTZGMjVcdTZFRjhcdTZGMzdcdTZFRkJcdTZGMkVcdTZGMDlcdTZGNEVcdTZGMTlcdTZGMUFcdTZGMjdcdTZGMThcdTZGM0JcdTZGMTJcdTZFRURcdTZGMEFcIl0sXG5bXCJlMmExXCIsXCJcdTZGMzZcdTZGNzNcdTZFRjlcdTZFRUVcdTZGMkRcdTZGNDBcdTZGMzBcdTZGM0NcdTZGMzVcdTZFRUJcdTZGMDdcdTZGMEVcdTZGNDNcdTZGMDVcdTZFRkRcdTZFRjZcdTZGMzlcdTZGMUNcdTZFRkNcdTZGM0FcdTZGMUZcdTZGMERcdTZGMUVcdTZGMDhcdTZGMjFcdTcxODdcdTcxOTBcdTcxODlcdTcxODBcdTcxODVcdTcxODJcdTcxOEZcdTcxN0JcdTcxODZcdTcxODFcdTcxOTdcdTcyNDRcdTcyNTNcdTcyOTdcdTcyOTVcdTcyOTNcdTczNDNcdTczNERcdTczNTFcdTczNENcdTc0NjJcdTc0NzNcdTc0NzFcdTc0NzVcdTc0NzJcdTc0NjdcdTc0NkVcdTc1MDBcdTc1MDJcdTc1MDNcdTc1N0RcdTc1OTBcdTc2MTZcdTc2MDhcdTc2MENcdTc2MTVcdTc2MTFcdTc2MEFcdTc2MTRcdTc2QjhcdTc3ODFcdTc3N0NcdTc3ODVcdTc3ODJcdTc3NkVcdTc3ODBcdTc3NkZcdTc3N0VcdTc3ODNcdTc4QjJcdTc4QUFcdTc4QjRcdTc4QURcdTc4QThcdTc4N0VcdTc4QUJcdTc4OUVcdTc4QTVcdTc4QTBcdTc4QUNcdTc4QTJcdTc4QTRcdTc5OThcdTc5OEFcdTc5OEJcdTc5OTZcdTc5OTVcdTc5OTRcdTc5OTNcIl0sXG5bXCJlMzQwXCIsXCJcdTc5OTdcdTc5ODhcdTc5OTJcdTc5OTBcdTdBMkJcdTdBNEFcdTdBMzBcdTdBMkZcdTdBMjhcdTdBMjZcdTdBQThcdTdBQUJcdTdBQUNcdTdBRUVcdTdCODhcdTdCOUNcdTdCOEFcdTdCOTFcdTdCOTBcdTdCOTZcdTdCOERcdTdCOENcdTdCOUJcdTdCOEVcdTdCODVcdTdCOThcdTUyODRcdTdCOTlcdTdCQTRcdTdCODJcdTdDQkJcdTdDQkZcdTdDQkNcdTdDQkFcdTdEQTdcdTdEQjdcdTdEQzJcdTdEQTNcdTdEQUFcdTdEQzFcdTdEQzBcdTdEQzVcdTdEOURcdTdEQ0VcdTdEQzRcdTdEQzZcdTdEQ0JcdTdEQ0NcdTdEQUZcdTdEQjlcdTdEOTZcdTdEQkNcdTdEOUZcdTdEQTZcdTdEQUVcdTdEQTlcdTdEQTFcdTdEQzlcdTdGNzNcdTdGRTJcdTdGRTNcdTdGRTVcdTdGREVcIl0sXG5bXCJlM2ExXCIsXCJcdTgwMjRcdTgwNURcdTgwNUNcdTgxODlcdTgxODZcdTgxODNcdTgxODdcdTgxOERcdTgxOENcdTgxOEJcdTgyMTVcdTg0OTdcdTg0QTRcdTg0QTFcdTg0OUZcdTg0QkFcdTg0Q0VcdTg0QzJcdTg0QUNcdTg0QUVcdTg0QUJcdTg0QjlcdTg0QjRcdTg0QzFcdTg0Q0RcdTg0QUFcdTg0OUFcdTg0QjFcdTg0RDBcdTg0OURcdTg0QTdcdTg0QkJcdTg0QTJcdTg0OTRcdTg0QzdcdTg0Q0NcdTg0OUJcdTg0QTlcdTg0QUZcdTg0QThcdTg0RDZcdTg0OThcdTg0QjZcdTg0Q0ZcdTg0QTBcdTg0RDdcdTg0RDRcdTg0RDJcdTg0REJcdTg0QjBcdTg0OTFcdTg2NjFcdTg3MzNcdTg3MjNcdTg3MjhcdTg3NkJcdTg3NDBcdTg3MkVcdTg3MUVcdTg3MjFcdTg3MTlcdTg3MUJcdTg3NDNcdTg3MkNcdTg3NDFcdTg3M0VcdTg3NDZcdTg3MjBcdTg3MzJcdTg3MkFcdTg3MkRcdTg3M0NcdTg3MTJcdTg3M0FcdTg3MzFcdTg3MzVcdTg3NDJcdTg3MjZcdTg3MjdcdTg3MzhcdTg3MjRcdTg3MUFcdTg3MzBcdTg3MTFcdTg4RjdcdTg4RTdcdTg4RjFcdTg4RjJcdTg4RkFcdTg4RkVcdTg4RUVcdTg4RkNcdTg4RjZcdTg4RkJcIl0sXG5bXCJlNDQwXCIsXCJcdTg4RjBcdTg4RUNcdTg4RUJcdTg5OURcdTg5QTFcdTg5OUZcdTg5OUVcdTg5RTlcdTg5RUJcdTg5RThcdThBQUJcdThBOTlcdThBOEJcdThBOTJcdThBOEZcdThBOTZcdThDM0RcdThDNjhcdThDNjlcdThDRDVcdThDQ0ZcdThDRDdcdThEOTZcdThFMDlcdThFMDJcdThERkZcdThFMERcdThERkRcdThFMEFcdThFMDNcdThFMDdcdThFMDZcdThFMDVcdThERkVcdThFMDBcdThFMDRcdThGMTBcdThGMTFcdThGMEVcdThGMERcdTkxMjNcdTkxMUNcdTkxMjBcdTkxMjJcdTkxMUZcdTkxMURcdTkxMUFcdTkxMjRcdTkxMjFcdTkxMUJcdTkxN0FcdTkxNzJcdTkxNzlcdTkxNzNcdTkyQTVcdTkyQTRcdTkyNzZcdTkyOUJcdTkyN0FcdTkyQTBcdTkyOTRcdTkyQUFcdTkyOERcIl0sXG5bXCJlNGExXCIsXCJcdTkyQTZcdTkyOUFcdTkyQUJcdTkyNzlcdTkyOTdcdTkyN0ZcdTkyQTNcdTkyRUVcdTkyOEVcdTkyODJcdTkyOTVcdTkyQTJcdTkyN0RcdTkyODhcdTkyQTFcdTkyOEFcdTkyODZcdTkyOENcdTkyOTlcdTkyQTdcdTkyN0VcdTkyODdcdTkyQTlcdTkyOURcdTkyOEJcdTkyMkRcdTk2OUVcdTk2QTFcdTk2RkZcdTk3NThcdTk3N0RcdTk3N0FcdTk3N0VcdTk3ODNcdTk3ODBcdTk3ODJcdTk3N0JcdTk3ODRcdTk3ODFcdTk3N0ZcdTk3Q0VcdTk3Q0RcdTk4MTZcdTk4QURcdTk4QUVcdTk5MDJcdTk5MDBcdTk5MDdcdTk5OURcdTk5OUNcdTk5QzNcdTk5QjlcdTk5QkJcdTk5QkFcdTk5QzJcdTk5QkRcdTk5QzdcdTlBQjFcdTlBRTNcdTlBRTdcdTlCM0VcdTlCM0ZcdTlCNjBcdTlCNjFcdTlCNUZcdTlDRjFcdTlDRjJcdTlDRjVcdTlFQTdcdTUwRkZcdTUxMDNcdTUxMzBcdTUwRjhcdTUxMDZcdTUxMDdcdTUwRjZcdTUwRkVcdTUxMEJcdTUxMENcdTUwRkRcdTUxMEFcdTUyOEJcdTUyOENcdTUyRjFcdTUyRUZcdTU2NDhcdTU2NDJcdTU2NENcdTU2MzVcdTU2NDFcdTU2NEFcdTU2NDlcdTU2NDZcdTU2NThcIl0sXG5bXCJlNTQwXCIsXCJcdTU2NUFcdTU2NDBcdTU2MzNcdTU2M0RcdTU2MkNcdTU2M0VcdTU2MzhcdTU2MkFcdTU2M0FcdTU3MUFcdTU4QUJcdTU4OURcdTU4QjFcdTU4QTBcdTU4QTNcdTU4QUZcdTU4QUNcdTU4QTVcdTU4QTFcdTU4RkZcdTVBRkZcdTVBRjRcdTVBRkRcdTVBRjdcdTVBRjZcdTVCMDNcdTVBRjhcdTVCMDJcdTVBRjlcdTVCMDFcdTVCMDdcdTVCMDVcdTVCMEZcdTVDNjdcdTVEOTlcdTVEOTdcdTVEOUZcdTVEOTJcdTVEQTJcdTVEOTNcdTVEOTVcdTVEQTBcdTVEOUNcdTVEQTFcdTVEOUFcdTVEOUVcdTVFNjlcdTVFNURcdTVFNjBcdTVFNUNcdTdERjNcdTVFREJcdTVFREVcdTVFRTFcdTVGNDlcdTVGQjJcdTYxOEJcdTYxODNcdTYxNzlcdTYxQjFcdTYxQjBcdTYxQTJcdTYxODlcIl0sXG5bXCJlNWExXCIsXCJcdTYxOUJcdTYxOTNcdTYxQUZcdTYxQURcdTYxOUZcdTYxOTJcdTYxQUFcdTYxQTFcdTYxOERcdTYxNjZcdTYxQjNcdTYyMkRcdTY0NkVcdTY0NzBcdTY0OTZcdTY0QTBcdTY0ODVcdTY0OTdcdTY0OUNcdTY0OEZcdTY0OEJcdTY0OEFcdTY0OENcdTY0QTNcdTY0OUZcdTY0NjhcdTY0QjFcdTY0OThcdTY1NzZcdTY1N0FcdTY1NzlcdTY1N0JcdTY1QjJcdTY1QjNcdTY2QjVcdTY2QjBcdTY2QTlcdTY2QjJcdTY2QjdcdTY2QUFcdTY2QUZcdTZBMDBcdTZBMDZcdTZBMTdcdTY5RTVcdTY5RjhcdTZBMTVcdTY5RjFcdTY5RTRcdTZBMjBcdTY5RkZcdTY5RUNcdTY5RTJcdTZBMUJcdTZBMURcdTY5RkVcdTZBMjdcdTY5RjJcdTY5RUVcdTZBMTRcdTY5RjdcdTY5RTdcdTZBNDBcdTZBMDhcdTY5RTZcdTY5RkJcdTZBMERcdTY5RkNcdTY5RUJcdTZBMDlcdTZBMDRcdTZBMThcdTZBMjVcdTZBMEZcdTY5RjZcdTZBMjZcdTZBMDdcdTY5RjRcdTZBMTZcdTZCNTFcdTZCQTVcdTZCQTNcdTZCQTJcdTZCQTZcdTZDMDFcdTZDMDBcdTZCRkZcdTZDMDJcdTZGNDFcdTZGMjZcdTZGN0VcdTZGODdcdTZGQzZcdTZGOTJcIl0sXG5bXCJlNjQwXCIsXCJcdTZGOERcdTZGODlcdTZGOENcdTZGNjJcdTZGNEZcdTZGODVcdTZGNUFcdTZGOTZcdTZGNzZcdTZGNkNcdTZGODJcdTZGNTVcdTZGNzJcdTZGNTJcdTZGNTBcdTZGNTdcdTZGOTRcdTZGOTNcdTZGNURcdTZGMDBcdTZGNjFcdTZGNkJcdTZGN0RcdTZGNjdcdTZGOTBcdTZGNTNcdTZGOEJcdTZGNjlcdTZGN0ZcdTZGOTVcdTZGNjNcdTZGNzdcdTZGNkFcdTZGN0JcdTcxQjJcdTcxQUZcdTcxOUJcdTcxQjBcdTcxQTBcdTcxOUFcdTcxQTlcdTcxQjVcdTcxOURcdTcxQTVcdTcxOUVcdTcxQTRcdTcxQTFcdTcxQUFcdTcxOUNcdTcxQTdcdTcxQjNcdTcyOThcdTcyOUFcdTczNThcdTczNTJcdTczNUVcdTczNUZcdTczNjBcdTczNURcdTczNUJcdTczNjFcdTczNUFcdTczNTlcIl0sXG5bXCJlNmExXCIsXCJcdTczNjJcdTc0ODdcdTc0ODlcdTc0OEFcdTc0ODZcdTc0ODFcdTc0N0RcdTc0ODVcdTc0ODhcdTc0N0NcdTc0NzlcdTc1MDhcdTc1MDdcdTc1N0VcdTc2MjVcdTc2MUVcdTc2MTlcdTc2MURcdTc2MUNcdTc2MjNcdTc2MUFcdTc2MjhcdTc2MUJcdTc2OUNcdTc2OURcdTc2OUVcdTc2OUJcdTc3OERcdTc3OEZcdTc3ODlcdTc3ODhcdTc4Q0RcdTc4QkJcdTc4Q0ZcdTc4Q0NcdTc4RDFcdTc4Q0VcdTc4RDRcdTc4QzhcdTc4QzNcdTc4QzRcdTc4QzlcdTc5OUFcdTc5QTFcdTc5QTBcdTc5OUNcdTc5QTJcdTc5OUJcdTZCNzZcdTdBMzlcdTdBQjJcdTdBQjRcdTdBQjNcdTdCQjdcdTdCQ0JcdTdCQkVcdTdCQUNcdTdCQ0VcdTdCQUZcdTdCQjlcdTdCQ0FcdTdCQjVcdTdDQzVcdTdDQzhcdTdDQ0NcdTdDQ0JcdTdERjdcdTdEREJcdTdERUFcdTdERTdcdTdERDdcdTdERTFcdTdFMDNcdTdERkFcdTdERTZcdTdERjZcdTdERjFcdTdERjBcdTdERUVcdTdEREZcdTdGNzZcdTdGQUNcdTdGQjBcdTdGQURcdTdGRURcdTdGRUJcdTdGRUFcdTdGRUNcdTdGRTZcdTdGRThcdTgwNjRcdTgwNjdcdTgxQTNcdTgxOUZcIl0sXG5bXCJlNzQwXCIsXCJcdTgxOUVcdTgxOTVcdTgxQTJcdTgxOTlcdTgxOTdcdTgyMTZcdTgyNEZcdTgyNTNcdTgyNTJcdTgyNTBcdTgyNEVcdTgyNTFcdTg1MjRcdTg1M0JcdTg1MEZcdTg1MDBcdTg1MjlcdTg1MEVcdTg1MDlcdTg1MERcdTg1MUZcdTg1MEFcdTg1MjdcdTg1MUNcdTg0RkJcdTg1MkJcdTg0RkFcdTg1MDhcdTg1MENcdTg0RjRcdTg1MkFcdTg0RjJcdTg1MTVcdTg0RjdcdTg0RUJcdTg0RjNcdTg0RkNcdTg1MTJcdTg0RUFcdTg0RTlcdTg1MTZcdTg0RkVcdTg1MjhcdTg1MURcdTg1MkVcdTg1MDJcdTg0RkRcdTg1MUVcdTg0RjZcdTg1MzFcdTg1MjZcdTg0RTdcdTg0RThcdTg0RjBcdTg0RUZcdTg0RjlcdTg1MThcdTg1MjBcdTg1MzBcdTg1MEJcdTg1MTlcdTg1MkZcdTg2NjJcIl0sXG5bXCJlN2ExXCIsXCJcdTg3NTZcdTg3NjNcdTg3NjRcdTg3NzdcdTg3RTFcdTg3NzNcdTg3NThcdTg3NTRcdTg3NUJcdTg3NTJcdTg3NjFcdTg3NUFcdTg3NTFcdTg3NUVcdTg3NkRcdTg3NkFcdTg3NTBcdTg3NEVcdTg3NUZcdTg3NURcdTg3NkZcdTg3NkNcdTg3N0FcdTg3NkVcdTg3NUNcdTg3NjVcdTg3NEZcdTg3N0JcdTg3NzVcdTg3NjJcdTg3NjdcdTg3NjlcdTg4NUFcdTg5MDVcdTg5MENcdTg5MTRcdTg5MEJcdTg5MTdcdTg5MThcdTg5MTlcdTg5MDZcdTg5MTZcdTg5MTFcdTg5MEVcdTg5MDlcdTg5QTJcdTg5QTRcdTg5QTNcdTg5RURcdTg5RjBcdTg5RUNcdThBQ0ZcdThBQzZcdThBQjhcdThBRDNcdThBRDFcdThBRDRcdThBRDVcdThBQkJcdThBRDdcdThBQkVcdThBQzBcdThBQzVcdThBRDhcdThBQzNcdThBQkFcdThBQkRcdThBRDlcdThDM0VcdThDNERcdThDOEZcdThDRTVcdThDREZcdThDRDlcdThDRThcdThDREFcdThDRERcdThDRTdcdThEQTBcdThEOUNcdThEQTFcdThEOUJcdThFMjBcdThFMjNcdThFMjVcdThFMjRcdThFMkVcdThFMTVcdThFMUJcdThFMTZcdThFMTFcdThFMTlcdThFMjZcdThFMjdcIl0sXG5bXCJlODQwXCIsXCJcdThFMTRcdThFMTJcdThFMThcdThFMTNcdThFMUNcdThFMTdcdThFMUFcdThGMkNcdThGMjRcdThGMThcdThGMUFcdThGMjBcdThGMjNcdThGMTZcdThGMTdcdTkwNzNcdTkwNzBcdTkwNkZcdTkwNjdcdTkwNkJcdTkxMkZcdTkxMkJcdTkxMjlcdTkxMkFcdTkxMzJcdTkxMjZcdTkxMkVcdTkxODVcdTkxODZcdTkxOEFcdTkxODFcdTkxODJcdTkxODRcdTkxODBcdTkyRDBcdTkyQzNcdTkyQzRcdTkyQzBcdTkyRDlcdTkyQjZcdTkyQ0ZcdTkyRjFcdTkyREZcdTkyRDhcdTkyRTlcdTkyRDdcdTkyRERcdTkyQ0NcdTkyRUZcdTkyQzJcdTkyRThcdTkyQ0FcdTkyQzhcdTkyQ0VcdTkyRTZcdTkyQ0RcdTkyRDVcdTkyQzlcdTkyRTBcdTkyREVcdTkyRTdcdTkyRDFcdTkyRDNcIl0sXG5bXCJlOGExXCIsXCJcdTkyQjVcdTkyRTFcdTkyQzZcdTkyQjRcdTk1N0NcdTk1QUNcdTk1QUJcdTk1QUVcdTk1QjBcdTk2QTRcdTk2QTJcdTk2RDNcdTk3MDVcdTk3MDhcdTk3MDJcdTk3NUFcdTk3OEFcdTk3OEVcdTk3ODhcdTk3RDBcdTk3Q0ZcdTk4MUVcdTk4MURcdTk4MjZcdTk4MjlcdTk4MjhcdTk4MjBcdTk4MUJcdTk4MjdcdTk4QjJcdTk5MDhcdTk4RkFcdTk5MTFcdTk5MTRcdTk5MTZcdTk5MTdcdTk5MTVcdTk5RENcdTk5Q0RcdTk5Q0ZcdTk5RDNcdTk5RDRcdTk5Q0VcdTk5QzlcdTk5RDZcdTk5RDhcdTk5Q0JcdTk5RDdcdTk5Q0NcdTlBQjNcdTlBRUNcdTlBRUJcdTlBRjNcdTlBRjJcdTlBRjFcdTlCNDZcdTlCNDNcdTlCNjdcdTlCNzRcdTlCNzFcdTlCNjZcdTlCNzZcdTlCNzVcdTlCNzBcdTlCNjhcdTlCNjRcdTlCNkNcdTlDRkNcdTlDRkFcdTlDRkRcdTlDRkZcdTlDRjdcdTlEMDdcdTlEMDBcdTlDRjlcdTlDRkJcdTlEMDhcdTlEMDVcdTlEMDRcdTlFODNcdTlFRDNcdTlGMEZcdTlGMTBcdTUxMUNcdTUxMTNcdTUxMTdcdTUxMUFcdTUxMTFcdTUxREVcdTUzMzRcdTUzRTFcdTU2NzBcdTU2NjBcdTU2NkVcIl0sXG5bXCJlOTQwXCIsXCJcdTU2NzNcdTU2NjZcdTU2NjNcdTU2NkRcdTU2NzJcdTU2NUVcdTU2NzdcdTU3MUNcdTU3MUJcdTU4QzhcdTU4QkRcdTU4QzlcdTU4QkZcdTU4QkFcdTU4QzJcdTU4QkNcdTU4QzZcdTVCMTdcdTVCMTlcdTVCMUJcdTVCMjFcdTVCMTRcdTVCMTNcdTVCMTBcdTVCMTZcdTVCMjhcdTVCMUFcdTVCMjBcdTVCMUVcdTVCRUZcdTVEQUNcdTVEQjFcdTVEQTlcdTVEQTdcdTVEQjVcdTVEQjBcdTVEQUVcdTVEQUFcdTVEQThcdTVEQjJcdTVEQURcdTVEQUZcdTVEQjRcdTVFNjdcdTVFNjhcdTVFNjZcdTVFNkZcdTVFRTlcdTVFRTdcdTVFRTZcdTVFRThcdTVFRTVcdTVGNEJcdTVGQkNcdTYxOURcdTYxQThcdTYxOTZcdTYxQzVcdTYxQjRcdTYxQzZcdTYxQzFcdTYxQ0NcdTYxQkFcIl0sXG5bXCJlOWExXCIsXCJcdTYxQkZcdTYxQjhcdTYxOENcdTY0RDdcdTY0RDZcdTY0RDBcdTY0Q0ZcdTY0QzlcdTY0QkRcdTY0ODlcdTY0QzNcdTY0REJcdTY0RjNcdTY0RDlcdTY1MzNcdTY1N0ZcdTY1N0NcdTY1QTJcdTY2QzhcdTY2QkVcdTY2QzBcdTY2Q0FcdTY2Q0JcdTY2Q0ZcdTY2QkRcdTY2QkJcdTY2QkFcdTY2Q0NcdTY3MjNcdTZBMzRcdTZBNjZcdTZBNDlcdTZBNjdcdTZBMzJcdTZBNjhcdTZBM0VcdTZBNURcdTZBNkRcdTZBNzZcdTZBNUJcdTZBNTFcdTZBMjhcdTZBNUFcdTZBM0JcdTZBM0ZcdTZBNDFcdTZBNkFcdTZBNjRcdTZBNTBcdTZBNEZcdTZBNTRcdTZBNkZcdTZBNjlcdTZBNjBcdTZBM0NcdTZBNUVcdTZBNTZcdTZBNTVcdTZBNERcdTZBNEVcdTZBNDZcdTZCNTVcdTZCNTRcdTZCNTZcdTZCQTdcdTZCQUFcdTZCQUJcdTZCQzhcdTZCQzdcdTZDMDRcdTZDMDNcdTZDMDZcdTZGQURcdTZGQ0JcdTZGQTNcdTZGQzdcdTZGQkNcdTZGQ0VcdTZGQzhcdTZGNUVcdTZGQzRcdTZGQkRcdTZGOUVcdTZGQ0FcdTZGQThcdTcwMDRcdTZGQTVcdTZGQUVcdTZGQkFcdTZGQUNcdTZGQUFcdTZGQ0ZcdTZGQkZcdTZGQjhcIl0sXG5bXCJlYTQwXCIsXCJcdTZGQTJcdTZGQzlcdTZGQUJcdTZGQ0RcdTZGQUZcdTZGQjJcdTZGQjBcdTcxQzVcdTcxQzJcdTcxQkZcdTcxQjhcdTcxRDZcdTcxQzBcdTcxQzFcdTcxQ0JcdTcxRDRcdTcxQ0FcdTcxQzdcdTcxQ0ZcdTcxQkRcdTcxRDhcdTcxQkNcdTcxQzZcdTcxREFcdTcxREJcdTcyOURcdTcyOUVcdTczNjlcdTczNjZcdTczNjdcdTczNkNcdTczNjVcdTczNkJcdTczNkFcdTc0N0ZcdTc0OUFcdTc0QTBcdTc0OTRcdTc0OTJcdTc0OTVcdTc0QTFcdTc1MEJcdTc1ODBcdTc2MkZcdTc2MkRcdTc2MzFcdTc2M0RcdTc2MzNcdTc2M0NcdTc2MzVcdTc2MzJcdTc2MzBcdTc2QkJcdTc2RTZcdTc3OUFcdTc3OURcdTc3QTFcdTc3OUNcdTc3OUJcdTc3QTJcdTc3QTNcdTc3OTVcdTc3OTlcIl0sXG5bXCJlYWExXCIsXCJcdTc3OTdcdTc4RERcdTc4RTlcdTc4RTVcdTc4RUFcdTc4REVcdTc4RTNcdTc4REJcdTc4RTFcdTc4RTJcdTc4RURcdTc4REZcdTc4RTBcdTc5QTRcdTdBNDRcdTdBNDhcdTdBNDdcdTdBQjZcdTdBQjhcdTdBQjVcdTdBQjFcdTdBQjdcdTdCREVcdTdCRTNcdTdCRTdcdTdCRERcdTdCRDVcdTdCRTVcdTdCREFcdTdCRThcdTdCRjlcdTdCRDRcdTdCRUFcdTdCRTJcdTdCRENcdTdCRUJcdTdCRDhcdTdCREZcdTdDRDJcdTdDRDRcdTdDRDdcdTdDRDBcdTdDRDFcdTdFMTJcdTdFMjFcdTdFMTdcdTdFMENcdTdFMUZcdTdFMjBcdTdFMTNcdTdFMEVcdTdFMUNcdTdFMTVcdTdFMUFcdTdFMjJcdTdFMEJcdTdFMEZcdTdFMTZcdTdFMERcdTdFMTRcdTdFMjVcdTdFMjRcdTdGNDNcdTdGN0JcdTdGN0NcdTdGN0FcdTdGQjFcdTdGRUZcdTgwMkFcdTgwMjlcdTgwNkNcdTgxQjFcdTgxQTZcdTgxQUVcdTgxQjlcdTgxQjVcdTgxQUJcdTgxQjBcdTgxQUNcdTgxQjRcdTgxQjJcdTgxQjdcdTgxQTdcdTgxRjJcdTgyNTVcdTgyNTZcdTgyNTdcdTg1NTZcdTg1NDVcdTg1NkJcdTg1NERcdTg1NTNcdTg1NjFcdTg1NThcIl0sXG5bXCJlYjQwXCIsXCJcdTg1NDBcdTg1NDZcdTg1NjRcdTg1NDFcdTg1NjJcdTg1NDRcdTg1NTFcdTg1NDdcdTg1NjNcdTg1M0VcdTg1NUJcdTg1NzFcdTg1NEVcdTg1NkVcdTg1NzVcdTg1NTVcdTg1NjdcdTg1NjBcdTg1OENcdTg1NjZcdTg1NURcdTg1NTRcdTg1NjVcdTg1NkNcdTg2NjNcdTg2NjVcdTg2NjRcdTg3OUJcdTg3OEZcdTg3OTdcdTg3OTNcdTg3OTJcdTg3ODhcdTg3ODFcdTg3OTZcdTg3OThcdTg3NzlcdTg3ODdcdTg3QTNcdTg3ODVcdTg3OTBcdTg3OTFcdTg3OURcdTg3ODRcdTg3OTRcdTg3OUNcdTg3OUFcdTg3ODlcdTg5MUVcdTg5MjZcdTg5MzBcdTg5MkRcdTg5MkVcdTg5MjdcdTg5MzFcdTg5MjJcdTg5MjlcdTg5MjNcdTg5MkZcdTg5MkNcdTg5MUZcdTg5RjFcdThBRTBcIl0sXG5bXCJlYmExXCIsXCJcdThBRTJcdThBRjJcdThBRjRcdThBRjVcdThBRERcdThCMTRcdThBRTRcdThBREZcdThBRjBcdThBQzhcdThBREVcdThBRTFcdThBRThcdThBRkZcdThBRUZcdThBRkJcdThDOTFcdThDOTJcdThDOTBcdThDRjVcdThDRUVcdThDRjFcdThDRjBcdThDRjNcdThENkNcdThENkVcdThEQTVcdThEQTdcdThFMzNcdThFM0VcdThFMzhcdThFNDBcdThFNDVcdThFMzZcdThFM0NcdThFM0RcdThFNDFcdThFMzBcdThFM0ZcdThFQkRcdThGMzZcdThGMkVcdThGMzVcdThGMzJcdThGMzlcdThGMzdcdThGMzRcdTkwNzZcdTkwNzlcdTkwN0JcdTkwODZcdTkwRkFcdTkxMzNcdTkxMzVcdTkxMzZcdTkxOTNcdTkxOTBcdTkxOTFcdTkxOERcdTkxOEZcdTkzMjdcdTkzMUVcdTkzMDhcdTkzMUZcdTkzMDZcdTkzMEZcdTkzN0FcdTkzMzhcdTkzM0NcdTkzMUJcdTkzMjNcdTkzMTJcdTkzMDFcdTkzNDZcdTkzMkRcdTkzMEVcdTkzMERcdTkyQ0JcdTkzMURcdTkyRkFcdTkzMjVcdTkzMTNcdTkyRjlcdTkyRjdcdTkzMzRcdTkzMDJcdTkzMjRcdTkyRkZcdTkzMjlcdTkzMzlcdTkzMzVcdTkzMkFcdTkzMTRcdTkzMENcIl0sXG5bXCJlYzQwXCIsXCJcdTkzMEJcdTkyRkVcdTkzMDlcdTkzMDBcdTkyRkJcdTkzMTZcdTk1QkNcdTk1Q0RcdTk1QkVcdTk1QjlcdTk1QkFcdTk1QjZcdTk1QkZcdTk1QjVcdTk1QkRcdTk2QTlcdTk2RDRcdTk3MEJcdTk3MTJcdTk3MTBcdTk3OTlcdTk3OTdcdTk3OTRcdTk3RjBcdTk3RjhcdTk4MzVcdTk4MkZcdTk4MzJcdTk5MjRcdTk5MUZcdTk5MjdcdTk5MjlcdTk5OUVcdTk5RUVcdTk5RUNcdTk5RTVcdTk5RTRcdTk5RjBcdTk5RTNcdTk5RUFcdTk5RTlcdTk5RTdcdTlBQjlcdTlBQkZcdTlBQjRcdTlBQkJcdTlBRjZcdTlBRkFcdTlBRjlcdTlBRjdcdTlCMzNcdTlCODBcdTlCODVcdTlCODdcdTlCN0NcdTlCN0VcdTlCN0JcdTlCODJcdTlCOTNcdTlCOTJcdTlCOTBcdTlCN0FcdTlCOTVcIl0sXG5bXCJlY2ExXCIsXCJcdTlCN0RcdTlCODhcdTlEMjVcdTlEMTdcdTlEMjBcdTlEMUVcdTlEMTRcdTlEMjlcdTlEMURcdTlEMThcdTlEMjJcdTlEMTBcdTlEMTlcdTlEMUZcdTlFODhcdTlFODZcdTlFODdcdTlFQUVcdTlFQURcdTlFRDVcdTlFRDZcdTlFRkFcdTlGMTJcdTlGM0RcdTUxMjZcdTUxMjVcdTUxMjJcdTUxMjRcdTUxMjBcdTUxMjlcdTUyRjRcdTU2OTNcdTU2OENcdTU2OERcdTU2ODZcdTU2ODRcdTU2ODNcdTU2N0VcdTU2ODJcdTU2N0ZcdTU2ODFcdTU4RDZcdTU4RDRcdTU4Q0ZcdTU4RDJcdTVCMkRcdTVCMjVcdTVCMzJcdTVCMjNcdTVCMkNcdTVCMjdcdTVCMjZcdTVCMkZcdTVCMkVcdTVCN0JcdTVCRjFcdTVCRjJcdTVEQjdcdTVFNkNcdTVFNkFcdTVGQkVcdTVGQkJcdTYxQzNcdTYxQjVcdTYxQkNcdTYxRTdcdTYxRTBcdTYxRTVcdTYxRTRcdTYxRThcdTYxREVcdTY0RUZcdTY0RTlcdTY0RTNcdTY0RUJcdTY0RTRcdTY0RThcdTY1ODFcdTY1ODBcdTY1QjZcdTY1REFcdTY2RDJcdTZBOERcdTZBOTZcdTZBODFcdTZBQTVcdTZBODlcdTZBOUZcdTZBOUJcdTZBQTFcdTZBOUVcdTZBODdcdTZBOTNcdTZBOEVcIl0sXG5bXCJlZDQwXCIsXCJcdTZBOTVcdTZBODNcdTZBQThcdTZBQTRcdTZBOTFcdTZBN0ZcdTZBQTZcdTZBOUFcdTZBODVcdTZBOENcdTZBOTJcdTZCNUJcdTZCQURcdTZDMDlcdTZGQ0NcdTZGQTlcdTZGRjRcdTZGRDRcdTZGRTNcdTZGRENcdTZGRURcdTZGRTdcdTZGRTZcdTZGREVcdTZGRjJcdTZGRERcdTZGRTJcdTZGRThcdTcxRTFcdTcxRjFcdTcxRThcdTcxRjJcdTcxRTRcdTcxRjBcdTcxRTJcdTczNzNcdTczNkVcdTczNkZcdTc0OTdcdTc0QjJcdTc0QUJcdTc0OTBcdTc0QUFcdTc0QURcdTc0QjFcdTc0QTVcdTc0QUZcdTc1MTBcdTc1MTFcdTc1MTJcdTc1MEZcdTc1ODRcdTc2NDNcdTc2NDhcdTc2NDlcdTc2NDdcdTc2QTRcdTc2RTlcdTc3QjVcdTc3QUJcdTc3QjJcdTc3QjdcdTc3QjZcIl0sXG5bXCJlZGExXCIsXCJcdTc3QjRcdTc3QjFcdTc3QThcdTc3RjBcdTc4RjNcdTc4RkRcdTc5MDJcdTc4RkJcdTc4RkNcdTc4RjJcdTc5MDVcdTc4RjlcdTc4RkVcdTc5MDRcdTc5QUJcdTc5QThcdTdBNUNcdTdBNUJcdTdBNTZcdTdBNThcdTdBNTRcdTdBNUFcdTdBQkVcdTdBQzBcdTdBQzFcdTdDMDVcdTdDMEZcdTdCRjJcdTdDMDBcdTdCRkZcdTdCRkJcdTdDMEVcdTdCRjRcdTdDMEJcdTdCRjNcdTdDMDJcdTdDMDlcdTdDMDNcdTdDMDFcdTdCRjhcdTdCRkRcdTdDMDZcdTdCRjBcdTdCRjFcdTdDMTBcdTdDMEFcdTdDRThcdTdFMkRcdTdFM0NcdTdFNDJcdTdFMzNcdTk4NDhcdTdFMzhcdTdFMkFcdTdFNDlcdTdFNDBcdTdFNDdcdTdFMjlcdTdFNENcdTdFMzBcdTdFM0JcdTdFMzZcdTdFNDRcdTdFM0FcdTdGNDVcdTdGN0ZcdTdGN0VcdTdGN0RcdTdGRjRcdTdGRjJcdTgwMkNcdTgxQkJcdTgxQzRcdTgxQ0NcdTgxQ0FcdTgxQzVcdTgxQzdcdTgxQkNcdTgxRTlcdTgyNUJcdTgyNUFcdTgyNUNcdTg1ODNcdTg1ODBcdTg1OEZcdTg1QTdcdTg1OTVcdTg1QTBcdTg1OEJcdTg1QTNcdTg1N0JcdTg1QTRcdTg1OUFcdTg1OUVcIl0sXG5bXCJlZTQwXCIsXCJcdTg1NzdcdTg1N0NcdTg1ODlcdTg1QTFcdTg1N0FcdTg1NzhcdTg1NTdcdTg1OEVcdTg1OTZcdTg1ODZcdTg1OERcdTg1OTlcdTg1OURcdTg1ODFcdTg1QTJcdTg1ODJcdTg1ODhcdTg1ODVcdTg1NzlcdTg1NzZcdTg1OThcdTg1OTBcdTg1OUZcdTg2NjhcdTg3QkVcdTg3QUFcdTg3QURcdTg3QzVcdTg3QjBcdTg3QUNcdTg3QjlcdTg3QjVcdTg3QkNcdTg3QUVcdTg3QzlcdTg3QzNcdTg3QzJcdTg3Q0NcdTg3QjdcdTg3QUZcdTg3QzRcdTg3Q0FcdTg3QjRcdTg3QjZcdTg3QkZcdTg3QjhcdTg3QkRcdTg3REVcdTg3QjJcdTg5MzVcdTg5MzNcdTg5M0NcdTg5M0VcdTg5NDFcdTg5NTJcdTg5MzdcdTg5NDJcdTg5QURcdTg5QUZcdTg5QUVcdTg5RjJcdTg5RjNcdThCMUVcIl0sXG5bXCJlZWExXCIsXCJcdThCMThcdThCMTZcdThCMTFcdThCMDVcdThCMEJcdThCMjJcdThCMEZcdThCMTJcdThCMTVcdThCMDdcdThCMERcdThCMDhcdThCMDZcdThCMUNcdThCMTNcdThCMUFcdThDNEZcdThDNzBcdThDNzJcdThDNzFcdThDNkZcdThDOTVcdThDOTRcdThDRjlcdThENkZcdThFNEVcdThFNERcdThFNTNcdThFNTBcdThFNENcdThFNDdcdThGNDNcdThGNDBcdTkwODVcdTkwN0VcdTkxMzhcdTkxOUFcdTkxQTJcdTkxOUJcdTkxOTlcdTkxOUZcdTkxQTFcdTkxOURcdTkxQTBcdTkzQTFcdTkzODNcdTkzQUZcdTkzNjRcdTkzNTZcdTkzNDdcdTkzN0NcdTkzNThcdTkzNUNcdTkzNzZcdTkzNDlcdTkzNTBcdTkzNTFcdTkzNjBcdTkzNkRcdTkzOEZcdTkzNENcdTkzNkFcdTkzNzlcdTkzNTdcdTkzNTVcdTkzNTJcdTkzNEZcdTkzNzFcdTkzNzdcdTkzN0JcdTkzNjFcdTkzNUVcdTkzNjNcdTkzNjdcdTkzODBcdTkzNEVcdTkzNTlcdTk1QzdcdTk1QzBcdTk1QzlcdTk1QzNcdTk1QzVcdTk1QjdcdTk2QUVcdTk2QjBcdTk2QUNcdTk3MjBcdTk3MUZcdTk3MThcdTk3MURcdTk3MTlcdTk3OUFcdTk3QTFcdTk3OUNcIl0sXG5bXCJlZjQwXCIsXCJcdTk3OUVcdTk3OURcdTk3RDVcdTk3RDRcdTk3RjFcdTk4NDFcdTk4NDRcdTk4NEFcdTk4NDlcdTk4NDVcdTk4NDNcdTk5MjVcdTk5MkJcdTk5MkNcdTk5MkFcdTk5MzNcdTk5MzJcdTk5MkZcdTk5MkRcdTk5MzFcdTk5MzBcdTk5OThcdTk5QTNcdTk5QTFcdTlBMDJcdTk5RkFcdTk5RjRcdTk5RjdcdTk5RjlcdTk5RjhcdTk5RjZcdTk5RkJcdTk5RkRcdTk5RkVcdTk5RkNcdTlBMDNcdTlBQkVcdTlBRkVcdTlBRkRcdTlCMDFcdTlBRkNcdTlCNDhcdTlCOUFcdTlCQThcdTlCOUVcdTlCOUJcdTlCQTZcdTlCQTFcdTlCQTVcdTlCQTRcdTlCODZcdTlCQTJcdTlCQTBcdTlCQUZcdTlEMzNcdTlENDFcdTlENjdcdTlEMzZcdTlEMkVcdTlEMkZcdTlEMzFcdTlEMzhcdTlEMzBcIl0sXG5bXCJlZmExXCIsXCJcdTlENDVcdTlENDJcdTlENDNcdTlEM0VcdTlEMzdcdTlENDBcdTlEM0RcdTdGRjVcdTlEMkRcdTlFOEFcdTlFODlcdTlFOERcdTlFQjBcdTlFQzhcdTlFREFcdTlFRkJcdTlFRkZcdTlGMjRcdTlGMjNcdTlGMjJcdTlGNTRcdTlGQTBcdTUxMzFcdTUxMkRcdTUxMkVcdTU2OThcdTU2OUNcdTU2OTdcdTU2OUFcdTU2OURcdTU2OTlcdTU5NzBcdTVCM0NcdTVDNjlcdTVDNkFcdTVEQzBcdTVFNkRcdTVFNkVcdTYxRDhcdTYxREZcdTYxRURcdTYxRUVcdTYxRjFcdTYxRUFcdTYxRjBcdTYxRUJcdTYxRDZcdTYxRTlcdTY0RkZcdTY1MDRcdTY0RkRcdTY0RjhcdTY1MDFcdTY1MDNcdTY0RkNcdTY1OTRcdTY1REJcdTY2REFcdTY2REJcdTY2RDhcdTZBQzVcdTZBQjlcdTZBQkRcdTZBRTFcdTZBQzZcdTZBQkFcdTZBQjZcdTZBQjdcdTZBQzdcdTZBQjRcdTZBQURcdTZCNUVcdTZCQzlcdTZDMEJcdTcwMDdcdTcwMENcdTcwMERcdTcwMDFcdTcwMDVcdTcwMTRcdTcwMEVcdTZGRkZcdTcwMDBcdTZGRkJcdTcwMjZcdTZGRkNcdTZGRjdcdTcwMEFcdTcyMDFcdTcxRkZcdTcxRjlcdTcyMDNcdTcxRkRcdTczNzZcIl0sXG5bXCJmMDQwXCIsXCJcdTc0QjhcdTc0QzBcdTc0QjVcdTc0QzFcdTc0QkVcdTc0QjZcdTc0QkJcdTc0QzJcdTc1MTRcdTc1MTNcdTc2NUNcdTc2NjRcdTc2NTlcdTc2NTBcdTc2NTNcdTc2NTdcdTc2NUFcdTc2QTZcdTc2QkRcdTc2RUNcdTc3QzJcdTc3QkFcdTc4RkZcdTc5MENcdTc5MTNcdTc5MTRcdTc5MDlcdTc5MTBcdTc5MTJcdTc5MTFcdTc5QURcdTc5QUNcdTdBNUZcdTdDMUNcdTdDMjlcdTdDMTlcdTdDMjBcdTdDMUZcdTdDMkRcdTdDMURcdTdDMjZcdTdDMjhcdTdDMjJcdTdDMjVcdTdDMzBcdTdFNUNcdTdFNTBcdTdFNTZcdTdFNjNcdTdFNThcdTdFNjJcdTdFNUZcdTdFNTFcdTdFNjBcdTdFNTdcdTdFNTNcdTdGQjVcdTdGQjNcdTdGRjdcdTdGRjhcdTgwNzVcdTgxRDFcdTgxRDJcIl0sXG5bXCJmMGExXCIsXCJcdTgxRDBcdTgyNUZcdTgyNUVcdTg1QjRcdTg1QzZcdTg1QzBcdTg1QzNcdTg1QzJcdTg1QjNcdTg1QjVcdTg1QkRcdTg1QzdcdTg1QzRcdTg1QkZcdTg1Q0JcdTg1Q0VcdTg1QzhcdTg1QzVcdTg1QjFcdTg1QjZcdTg1RDJcdTg2MjRcdTg1QjhcdTg1QjdcdTg1QkVcdTg2NjlcdTg3RTdcdTg3RTZcdTg3RTJcdTg3REJcdTg3RUJcdTg3RUFcdTg3RTVcdTg3REZcdTg3RjNcdTg3RTRcdTg3RDRcdTg3RENcdTg3RDNcdTg3RURcdTg3RDhcdTg3RTNcdTg3QTRcdTg3RDdcdTg3RDlcdTg4MDFcdTg3RjRcdTg3RThcdTg3RERcdTg5NTNcdTg5NEJcdTg5NEZcdTg5NENcdTg5NDZcdTg5NTBcdTg5NTFcdTg5NDlcdThCMkFcdThCMjdcdThCMjNcdThCMzNcdThCMzBcdThCMzVcdThCNDdcdThCMkZcdThCM0NcdThCM0VcdThCMzFcdThCMjVcdThCMzdcdThCMjZcdThCMzZcdThCMkVcdThCMjRcdThCM0JcdThCM0RcdThCM0FcdThDNDJcdThDNzVcdThDOTlcdThDOThcdThDOTdcdThDRkVcdThEMDRcdThEMDJcdThEMDBcdThFNUNcdThFNjJcdThFNjBcdThFNTdcdThFNTZcdThFNUVcdThFNjVcdThFNjdcIl0sXG5bXCJmMTQwXCIsXCJcdThFNUJcdThFNUFcdThFNjFcdThFNURcdThFNjlcdThFNTRcdThGNDZcdThGNDdcdThGNDhcdThGNEJcdTkxMjhcdTkxM0FcdTkxM0JcdTkxM0VcdTkxQThcdTkxQTVcdTkxQTdcdTkxQUZcdTkxQUFcdTkzQjVcdTkzOENcdTkzOTJcdTkzQjdcdTkzOUJcdTkzOURcdTkzODlcdTkzQTdcdTkzOEVcdTkzQUFcdTkzOUVcdTkzQTZcdTkzOTVcdTkzODhcdTkzOTlcdTkzOUZcdTkzOERcdTkzQjFcdTkzOTFcdTkzQjJcdTkzQTRcdTkzQThcdTkzQjRcdTkzQTNcdTkzQTVcdTk1RDJcdTk1RDNcdTk1RDFcdTk2QjNcdTk2RDdcdTk2REFcdTVEQzJcdTk2REZcdTk2RDhcdTk2RERcdTk3MjNcdTk3MjJcdTk3MjVcdTk3QUNcdTk3QUVcdTk3QThcdTk3QUJcdTk3QTRcdTk3QUFcIl0sXG5bXCJmMWExXCIsXCJcdTk3QTJcdTk3QTVcdTk3RDdcdTk3RDlcdTk3RDZcdTk3RDhcdTk3RkFcdTk4NTBcdTk4NTFcdTk4NTJcdTk4QjhcdTk5NDFcdTk5M0NcdTk5M0FcdTlBMEZcdTlBMEJcdTlBMDlcdTlBMERcdTlBMDRcdTlBMTFcdTlBMEFcdTlBMDVcdTlBMDdcdTlBMDZcdTlBQzBcdTlBRENcdTlCMDhcdTlCMDRcdTlCMDVcdTlCMjlcdTlCMzVcdTlCNEFcdTlCNENcdTlCNEJcdTlCQzdcdTlCQzZcdTlCQzNcdTlCQkZcdTlCQzFcdTlCQjVcdTlCQjhcdTlCRDNcdTlCQjZcdTlCQzRcdTlCQjlcdTlCQkRcdTlENUNcdTlENTNcdTlENEZcdTlENEFcdTlENUJcdTlENEJcdTlENTlcdTlENTZcdTlENENcdTlENTdcdTlENTJcdTlENTRcdTlENUZcdTlENThcdTlENUFcdTlFOEVcdTlFOENcdTlFREZcdTlGMDFcdTlGMDBcdTlGMTZcdTlGMjVcdTlGMkJcdTlGMkFcdTlGMjlcdTlGMjhcdTlGNENcdTlGNTVcdTUxMzRcdTUxMzVcdTUyOTZcdTUyRjdcdTUzQjRcdTU2QUJcdTU2QURcdTU2QTZcdTU2QTdcdTU2QUFcdTU2QUNcdTU4REFcdTU4RERcdTU4REJcdTU5MTJcdTVCM0RcdTVCM0VcdTVCM0ZcdTVEQzNcdTVFNzBcIl0sXG5bXCJmMjQwXCIsXCJcdTVGQkZcdTYxRkJcdTY1MDdcdTY1MTBcdTY1MERcdTY1MDlcdTY1MENcdTY1MEVcdTY1ODRcdTY1REVcdTY1RERcdTY2REVcdTZBRTdcdTZBRTBcdTZBQ0NcdTZBRDFcdTZBRDlcdTZBQ0JcdTZBREZcdTZBRENcdTZBRDBcdTZBRUJcdTZBQ0ZcdTZBQ0RcdTZBREVcdTZCNjBcdTZCQjBcdTZDMENcdTcwMTlcdTcwMjdcdTcwMjBcdTcwMTZcdTcwMkJcdTcwMjFcdTcwMjJcdTcwMjNcdTcwMjlcdTcwMTdcdTcwMjRcdTcwMUNcdTcwMkFcdTcyMENcdTcyMEFcdTcyMDdcdTcyMDJcdTcyMDVcdTcyQTVcdTcyQTZcdTcyQTRcdTcyQTNcdTcyQTFcdTc0Q0JcdTc0QzVcdTc0QjdcdTc0QzNcdTc1MTZcdTc2NjBcdTc3QzlcdTc3Q0FcdTc3QzRcdTc3RjFcdTc5MURcdTc5MUJcIl0sXG5bXCJmMmExXCIsXCJcdTc5MjFcdTc5MUNcdTc5MTdcdTc5MUVcdTc5QjBcdTdBNjdcdTdBNjhcdTdDMzNcdTdDM0NcdTdDMzlcdTdDMkNcdTdDM0JcdTdDRUNcdTdDRUFcdTdFNzZcdTdFNzVcdTdFNzhcdTdFNzBcdTdFNzdcdTdFNkZcdTdFN0FcdTdFNzJcdTdFNzRcdTdFNjhcdTdGNEJcdTdGNEFcdTdGODNcdTdGODZcdTdGQjdcdTdGRkRcdTdGRkVcdTgwNzhcdTgxRDdcdTgxRDVcdTgyNjRcdTgyNjFcdTgyNjNcdTg1RUJcdTg1RjFcdTg1RURcdTg1RDlcdTg1RTFcdTg1RThcdTg1REFcdTg1RDdcdTg1RUNcdTg1RjJcdTg1RjhcdTg1RDhcdTg1REZcdTg1RTNcdTg1RENcdTg1RDFcdTg1RjBcdTg1RTZcdTg1RUZcdTg1REVcdTg1RTJcdTg4MDBcdTg3RkFcdTg4MDNcdTg3RjZcdTg3RjdcdTg4MDlcdTg4MENcdTg4MEJcdTg4MDZcdTg3RkNcdTg4MDhcdTg3RkZcdTg4MEFcdTg4MDJcdTg5NjJcdTg5NUFcdTg5NUJcdTg5NTdcdTg5NjFcdTg5NUNcdTg5NThcdTg5NURcdTg5NTlcdTg5ODhcdTg5QjdcdTg5QjZcdTg5RjZcdThCNTBcdThCNDhcdThCNEFcdThCNDBcdThCNTNcdThCNTZcdThCNTRcdThCNEJcdThCNTVcIl0sXG5bXCJmMzQwXCIsXCJcdThCNTFcdThCNDJcdThCNTJcdThCNTdcdThDNDNcdThDNzdcdThDNzZcdThDOUFcdThEMDZcdThEMDdcdThEMDlcdThEQUNcdThEQUFcdThEQURcdThEQUJcdThFNkRcdThFNzhcdThFNzNcdThFNkFcdThFNkZcdThFN0JcdThFQzJcdThGNTJcdThGNTFcdThGNEZcdThGNTBcdThGNTNcdThGQjRcdTkxNDBcdTkxM0ZcdTkxQjBcdTkxQURcdTkzREVcdTkzQzdcdTkzQ0ZcdTkzQzJcdTkzREFcdTkzRDBcdTkzRjlcdTkzRUNcdTkzQ0NcdTkzRDlcdTkzQTlcdTkzRTZcdTkzQ0FcdTkzRDRcdTkzRUVcdTkzRTNcdTkzRDVcdTkzQzRcdTkzQ0VcdTkzQzBcdTkzRDJcdTkzRTdcdTk1N0RcdTk1REFcdTk1REJcdTk2RTFcdTk3MjlcdTk3MkJcdTk3MkNcdTk3MjhcdTk3MjZcIl0sXG5bXCJmM2ExXCIsXCJcdTk3QjNcdTk3QjdcdTk3QjZcdTk3RERcdTk3REVcdTk3REZcdTk4NUNcdTk4NTlcdTk4NURcdTk4NTdcdTk4QkZcdTk4QkRcdTk4QkJcdTk4QkVcdTk5NDhcdTk5NDdcdTk5NDNcdTk5QTZcdTk5QTdcdTlBMUFcdTlBMTVcdTlBMjVcdTlBMURcdTlBMjRcdTlBMUJcdTlBMjJcdTlBMjBcdTlBMjdcdTlBMjNcdTlBMUVcdTlBMUNcdTlBMTRcdTlBQzJcdTlCMEJcdTlCMEFcdTlCMEVcdTlCMENcdTlCMzdcdTlCRUFcdTlCRUJcdTlCRTBcdTlCREVcdTlCRTRcdTlCRTZcdTlCRTJcdTlCRjBcdTlCRDRcdTlCRDdcdTlCRUNcdTlCRENcdTlCRDlcdTlCRTVcdTlCRDVcdTlCRTFcdTlCREFcdTlENzdcdTlEODFcdTlEOEFcdTlEODRcdTlEODhcdTlENzFcdTlEODBcdTlENzhcdTlEODZcdTlEOEJcdTlEOENcdTlEN0RcdTlENkJcdTlENzRcdTlENzVcdTlENzBcdTlENjlcdTlEODVcdTlENzNcdTlEN0JcdTlEODJcdTlENkZcdTlENzlcdTlEN0ZcdTlEODdcdTlENjhcdTlFOTRcdTlFOTFcdTlFQzBcdTlFRkNcdTlGMkRcdTlGNDBcdTlGNDFcdTlGNERcdTlGNTZcdTlGNTdcdTlGNThcdTUzMzdcdTU2QjJcIl0sXG5bXCJmNDQwXCIsXCJcdTU2QjVcdTU2QjNcdTU4RTNcdTVCNDVcdTVEQzZcdTVEQzdcdTVFRUVcdTVFRUZcdTVGQzBcdTVGQzFcdTYxRjlcdTY1MTdcdTY1MTZcdTY1MTVcdTY1MTNcdTY1REZcdTY2RThcdTY2RTNcdTY2RTRcdTZBRjNcdTZBRjBcdTZBRUFcdTZBRThcdTZBRjlcdTZBRjFcdTZBRUVcdTZBRUZcdTcwM0NcdTcwMzVcdTcwMkZcdTcwMzdcdTcwMzRcdTcwMzFcdTcwNDJcdTcwMzhcdTcwM0ZcdTcwM0FcdTcwMzlcdTcwNDBcdTcwM0JcdTcwMzNcdTcwNDFcdTcyMTNcdTcyMTRcdTcyQThcdTczN0RcdTczN0NcdTc0QkFcdTc2QUJcdTc2QUFcdTc2QkVcdTc2RURcdTc3Q0NcdTc3Q0VcdTc3Q0ZcdTc3Q0RcdTc3RjJcdTc5MjVcdTc5MjNcdTc5MjdcdTc5MjhcdTc5MjRcdTc5MjlcIl0sXG5bXCJmNGExXCIsXCJcdTc5QjJcdTdBNkVcdTdBNkNcdTdBNkRcdTdBRjdcdTdDNDlcdTdDNDhcdTdDNEFcdTdDNDdcdTdDNDVcdTdDRUVcdTdFN0JcdTdFN0VcdTdFODFcdTdFODBcdTdGQkFcdTdGRkZcdTgwNzlcdTgxREJcdTgxRDlcdTgyMEJcdTgyNjhcdTgyNjlcdTg2MjJcdTg1RkZcdTg2MDFcdTg1RkVcdTg2MUJcdTg2MDBcdTg1RjZcdTg2MDRcdTg2MDlcdTg2MDVcdTg2MENcdTg1RkRcdTg4MTlcdTg4MTBcdTg4MTFcdTg4MTdcdTg4MTNcdTg4MTZcdTg5NjNcdTg5NjZcdTg5QjlcdTg5RjdcdThCNjBcdThCNkFcdThCNURcdThCNjhcdThCNjNcdThCNjVcdThCNjdcdThCNkRcdThEQUVcdThFODZcdThFODhcdThFODRcdThGNTlcdThGNTZcdThGNTdcdThGNTVcdThGNThcdThGNUFcdTkwOERcdTkxNDNcdTkxNDFcdTkxQjdcdTkxQjVcdTkxQjJcdTkxQjNcdTk0MEJcdTk0MTNcdTkzRkJcdTk0MjBcdTk0MEZcdTk0MTRcdTkzRkVcdTk0MTVcdTk0MTBcdTk0MjhcdTk0MTlcdTk0MERcdTkzRjVcdTk0MDBcdTkzRjdcdTk0MDdcdTk0MEVcdTk0MTZcdTk0MTJcdTkzRkFcdTk0MDlcdTkzRjhcdTk0MEFcdTkzRkZcIl0sXG5bXCJmNTQwXCIsXCJcdTkzRkNcdTk0MENcdTkzRjZcdTk0MTFcdTk0MDZcdTk1REVcdTk1RTBcdTk1REZcdTk3MkVcdTk3MkZcdTk3QjlcdTk3QkJcdTk3RkRcdTk3RkVcdTk4NjBcdTk4NjJcdTk4NjNcdTk4NUZcdTk4QzFcdTk4QzJcdTk5NTBcdTk5NEVcdTk5NTlcdTk5NENcdTk5NEJcdTk5NTNcdTlBMzJcdTlBMzRcdTlBMzFcdTlBMkNcdTlBMkFcdTlBMzZcdTlBMjlcdTlBMkVcdTlBMzhcdTlBMkRcdTlBQzdcdTlBQ0FcdTlBQzZcdTlCMTBcdTlCMTJcdTlCMTFcdTlDMEJcdTlDMDhcdTlCRjdcdTlDMDVcdTlDMTJcdTlCRjhcdTlDNDBcdTlDMDdcdTlDMEVcdTlDMDZcdTlDMTdcdTlDMTRcdTlDMDlcdTlEOUZcdTlEOTlcdTlEQTRcdTlEOURcdTlEOTJcdTlEOThcdTlEOTBcdTlEOUJcIl0sXG5bXCJmNWExXCIsXCJcdTlEQTBcdTlEOTRcdTlEOUNcdTlEQUFcdTlEOTdcdTlEQTFcdTlEOUFcdTlEQTJcdTlEQThcdTlEOUVcdTlEQTNcdTlEQkZcdTlEQTlcdTlEOTZcdTlEQTZcdTlEQTdcdTlFOTlcdTlFOUJcdTlFOUFcdTlFRTVcdTlFRTRcdTlFRTdcdTlFRTZcdTlGMzBcdTlGMkVcdTlGNUJcdTlGNjBcdTlGNUVcdTlGNURcdTlGNTlcdTlGOTFcdTUxM0FcdTUxMzlcdTUyOThcdTUyOTdcdTU2QzNcdTU2QkRcdTU2QkVcdTVCNDhcdTVCNDdcdTVEQ0JcdTVEQ0ZcdTVFRjFcdTYxRkRcdTY1MUJcdTZCMDJcdTZBRkNcdTZCMDNcdTZBRjhcdTZCMDBcdTcwNDNcdTcwNDRcdTcwNEFcdTcwNDhcdTcwNDlcdTcwNDVcdTcwNDZcdTcyMURcdTcyMUFcdTcyMTlcdTczN0VcdTc1MTdcdTc2NkFcdTc3RDBcdTc5MkRcdTc5MzFcdTc5MkZcdTdDNTRcdTdDNTNcdTdDRjJcdTdFOEFcdTdFODdcdTdFODhcdTdFOEJcdTdFODZcdTdFOERcdTdGNERcdTdGQkJcdTgwMzBcdTgxRERcdTg2MThcdTg2MkFcdTg2MjZcdTg2MUZcdTg2MjNcdTg2MUNcdTg2MTlcdTg2MjdcdTg2MkVcdTg2MjFcdTg2MjBcdTg2MjlcdTg2MUVcdTg2MjVcIl0sXG5bXCJmNjQwXCIsXCJcdTg4MjlcdTg4MURcdTg4MUJcdTg4MjBcdTg4MjRcdTg4MUNcdTg4MkJcdTg4NEFcdTg5NkRcdTg5NjlcdTg5NkVcdTg5NkJcdTg5RkFcdThCNzlcdThCNzhcdThCNDVcdThCN0FcdThCN0JcdThEMTBcdThEMTRcdThEQUZcdThFOEVcdThFOENcdThGNUVcdThGNUJcdThGNURcdTkxNDZcdTkxNDRcdTkxNDVcdTkxQjlcdTk0M0ZcdTk0M0JcdTk0MzZcdTk0MjlcdTk0M0RcdTk0M0NcdTk0MzBcdTk0MzlcdTk0MkFcdTk0MzdcdTk0MkNcdTk0NDBcdTk0MzFcdTk1RTVcdTk1RTRcdTk1RTNcdTk3MzVcdTk3M0FcdTk3QkZcdTk3RTFcdTk4NjRcdTk4QzlcdTk4QzZcdTk4QzBcdTk5NThcdTk5NTZcdTlBMzlcdTlBM0RcdTlBNDZcdTlBNDRcdTlBNDJcdTlBNDFcdTlBM0FcIl0sXG5bXCJmNmExXCIsXCJcdTlBM0ZcdTlBQ0RcdTlCMTVcdTlCMTdcdTlCMThcdTlCMTZcdTlCM0FcdTlCNTJcdTlDMkJcdTlDMURcdTlDMUNcdTlDMkNcdTlDMjNcdTlDMjhcdTlDMjlcdTlDMjRcdTlDMjFcdTlEQjdcdTlEQjZcdTlEQkNcdTlEQzFcdTlEQzdcdTlEQ0FcdTlEQ0ZcdTlEQkVcdTlEQzVcdTlEQzNcdTlEQkJcdTlEQjVcdTlEQ0VcdTlEQjlcdTlEQkFcdTlEQUNcdTlEQzhcdTlEQjFcdTlEQURcdTlEQ0NcdTlEQjNcdTlEQ0RcdTlEQjJcdTlFN0FcdTlFOUNcdTlFRUJcdTlFRUVcdTlFRURcdTlGMUJcdTlGMThcdTlGMUFcdTlGMzFcdTlGNEVcdTlGNjVcdTlGNjRcdTlGOTJcdTRFQjlcdTU2QzZcdTU2QzVcdTU2Q0JcdTU5NzFcdTVCNEJcdTVCNENcdTVERDVcdTVERDFcdTVFRjJcdTY1MjFcdTY1MjBcdTY1MjZcdTY1MjJcdTZCMEJcdTZCMDhcdTZCMDlcdTZDMERcdTcwNTVcdTcwNTZcdTcwNTdcdTcwNTJcdTcyMUVcdTcyMUZcdTcyQTlcdTczN0ZcdTc0RDhcdTc0RDVcdTc0RDlcdTc0RDdcdTc2NkRcdTc2QURcdTc5MzVcdTc5QjRcdTdBNzBcdTdBNzFcdTdDNTdcdTdDNUNcdTdDNTlcdTdDNUJcdTdDNUFcIl0sXG5bXCJmNzQwXCIsXCJcdTdDRjRcdTdDRjFcdTdFOTFcdTdGNEZcdTdGODdcdTgxREVcdTgyNkJcdTg2MzRcdTg2MzVcdTg2MzNcdTg2MkNcdTg2MzJcdTg2MzZcdTg4MkNcdTg4MjhcdTg4MjZcdTg4MkFcdTg4MjVcdTg5NzFcdTg5QkZcdTg5QkVcdTg5RkJcdThCN0VcdThCODRcdThCODJcdThCODZcdThCODVcdThCN0ZcdThEMTVcdThFOTVcdThFOTRcdThFOUFcdThFOTJcdThFOTBcdThFOTZcdThFOTdcdThGNjBcdThGNjJcdTkxNDdcdTk0NENcdTk0NTBcdTk0NEFcdTk0NEJcdTk0NEZcdTk0NDdcdTk0NDVcdTk0NDhcdTk0NDlcdTk0NDZcdTk3M0ZcdTk3RTNcdTk4NkFcdTk4NjlcdTk4Q0JcdTk5NTRcdTk5NUJcdTlBNEVcdTlBNTNcdTlBNTRcdTlBNENcdTlBNEZcdTlBNDhcdTlBNEFcIl0sXG5bXCJmN2ExXCIsXCJcdTlBNDlcdTlBNTJcdTlBNTBcdTlBRDBcdTlCMTlcdTlCMkJcdTlCM0JcdTlCNTZcdTlCNTVcdTlDNDZcdTlDNDhcdTlDM0ZcdTlDNDRcdTlDMzlcdTlDMzNcdTlDNDFcdTlDM0NcdTlDMzdcdTlDMzRcdTlDMzJcdTlDM0RcdTlDMzZcdTlEREJcdTlERDJcdTlEREVcdTlEREFcdTlEQ0JcdTlERDBcdTlERENcdTlERDFcdTlEREZcdTlERTlcdTlERDlcdTlERDhcdTlERDZcdTlERjVcdTlERDVcdTlERERcdTlFQjZcdTlFRjBcdTlGMzVcdTlGMzNcdTlGMzJcdTlGNDJcdTlGNkJcdTlGOTVcdTlGQTJcdTUxM0RcdTUyOTlcdTU4RThcdTU4RTdcdTU5NzJcdTVCNERcdTVERDhcdTg4MkZcdTVGNEZcdTYyMDFcdTYyMDNcdTYyMDRcdTY1MjlcdTY1MjVcdTY1OTZcdTY2RUJcdTZCMTFcdTZCMTJcdTZCMEZcdTZCQ0FcdTcwNUJcdTcwNUFcdTcyMjJcdTczODJcdTczODFcdTczODNcdTc2NzBcdTc3RDRcdTdDNjdcdTdDNjZcdTdFOTVcdTgyNkNcdTg2M0FcdTg2NDBcdTg2MzlcdTg2M0NcdTg2MzFcdTg2M0JcdTg2M0VcdTg4MzBcdTg4MzJcdTg4MkVcdTg4MzNcdTg5NzZcdTg5NzRcdTg5NzNcdTg5RkVcIl0sXG5bXCJmODQwXCIsXCJcdThCOENcdThCOEVcdThCOEJcdThCODhcdThDNDVcdThEMTlcdThFOThcdThGNjRcdThGNjNcdTkxQkNcdTk0NjJcdTk0NTVcdTk0NURcdTk0NTdcdTk0NUVcdTk3QzRcdTk3QzVcdTk4MDBcdTlBNTZcdTlBNTlcdTlCMUVcdTlCMUZcdTlCMjBcdTlDNTJcdTlDNThcdTlDNTBcdTlDNEFcdTlDNERcdTlDNEJcdTlDNTVcdTlDNTlcdTlDNENcdTlDNEVcdTlERkJcdTlERjdcdTlERUZcdTlERTNcdTlERUJcdTlERjhcdTlERTRcdTlERjZcdTlERTFcdTlERUVcdTlERTZcdTlERjJcdTlERjBcdTlERTJcdTlERUNcdTlERjRcdTlERjNcdTlERThcdTlERURcdTlFQzJcdTlFRDBcdTlFRjJcdTlFRjNcdTlGMDZcdTlGMUNcdTlGMzhcdTlGMzdcdTlGMzZcdTlGNDNcdTlGNEZcIl0sXG5bXCJmOGExXCIsXCJcdTlGNzFcdTlGNzBcdTlGNkVcdTlGNkZcdTU2RDNcdTU2Q0RcdTVCNEVcdTVDNkRcdTY1MkRcdTY2RURcdTY2RUVcdTZCMTNcdTcwNUZcdTcwNjFcdTcwNURcdTcwNjBcdTcyMjNcdTc0REJcdTc0RTVcdTc3RDVcdTc5MzhcdTc5QjdcdTc5QjZcdTdDNkFcdTdFOTdcdTdGODlcdTgyNkRcdTg2NDNcdTg4MzhcdTg4MzdcdTg4MzVcdTg4NEJcdThCOTRcdThCOTVcdThFOUVcdThFOUZcdThFQTBcdThFOURcdTkxQkVcdTkxQkRcdTkxQzJcdTk0NkJcdTk0NjhcdTk0NjlcdTk2RTVcdTk3NDZcdTk3NDNcdTk3NDdcdTk3QzdcdTk3RTVcdTlBNUVcdTlBRDVcdTlCNTlcdTlDNjNcdTlDNjdcdTlDNjZcdTlDNjJcdTlDNUVcdTlDNjBcdTlFMDJcdTlERkVcdTlFMDdcdTlFMDNcdTlFMDZcdTlFMDVcdTlFMDBcdTlFMDFcdTlFMDlcdTlERkZcdTlERkRcdTlFMDRcdTlFQTBcdTlGMUVcdTlGNDZcdTlGNzRcdTlGNzVcdTlGNzZcdTU2RDRcdTY1MkVcdTY1QjhcdTZCMThcdTZCMTlcdTZCMTdcdTZCMUFcdTcwNjJcdTcyMjZcdTcyQUFcdTc3RDhcdTc3RDlcdTc5MzlcdTdDNjlcdTdDNkJcdTdDRjZcdTdFOUFcIl0sXG5bXCJmOTQwXCIsXCJcdTdFOThcdTdFOUJcdTdFOTlcdTgxRTBcdTgxRTFcdTg2NDZcdTg2NDdcdTg2NDhcdTg5NzlcdTg5N0FcdTg5N0NcdTg5N0JcdTg5RkZcdThCOThcdThCOTlcdThFQTVcdThFQTRcdThFQTNcdTk0NkVcdTk0NkRcdTk0NkZcdTk0NzFcdTk0NzNcdTk3NDlcdTk4NzJcdTk5NUZcdTlDNjhcdTlDNkVcdTlDNkRcdTlFMEJcdTlFMERcdTlFMTBcdTlFMEZcdTlFMTJcdTlFMTFcdTlFQTFcdTlFRjVcdTlGMDlcdTlGNDdcdTlGNzhcdTlGN0JcdTlGN0FcdTlGNzlcdTU3MUVcdTcwNjZcdTdDNkZcdTg4M0NcdThEQjJcdThFQTZcdTkxQzNcdTk0NzRcdTk0NzhcdTk0NzZcdTk0NzVcdTlBNjBcdTlDNzRcdTlDNzNcdTlDNzFcdTlDNzVcdTlFMTRcdTlFMTNcdTlFRjZcdTlGMEFcIl0sXG5bXCJmOWExXCIsXCJcdTlGQTRcdTcwNjhcdTcwNjVcdTdDRjdcdTg2NkFcdTg4M0VcdTg4M0RcdTg4M0ZcdThCOUVcdThDOUNcdThFQTlcdThFQzlcdTk3NEJcdTk4NzNcdTk4NzRcdTk4Q0NcdTk5NjFcdTk5QUJcdTlBNjRcdTlBNjZcdTlBNjdcdTlCMjRcdTlFMTVcdTlFMTdcdTlGNDhcdTYyMDdcdTZCMUVcdTcyMjdcdTg2NENcdThFQThcdTk0ODJcdTk0ODBcdTk0ODFcdTlBNjlcdTlBNjhcdTlCMkVcdTlFMTlcdTcyMjlcdTg2NEJcdThCOUZcdTk0ODNcdTlDNzlcdTlFQjdcdTc2NzVcdTlBNkJcdTlDN0FcdTlFMURcdTcwNjlcdTcwNkFcdTlFQTRcdTlGN0VcdTlGNDlcdTlGOThcdTc4ODFcdTkyQjlcdTg4Q0ZcdTU4QkJcdTYwNTJcdTdDQTdcdTVBRkFcdTI1NTRcdTI1NjZcdTI1NTdcdTI1NjBcdTI1NkNcdTI1NjNcdTI1NUFcdTI1NjlcdTI1NURcdTI1NTJcdTI1NjRcdTI1NTVcdTI1NUVcdTI1NkFcdTI1NjFcdTI1NThcdTI1NjdcdTI1NUJcdTI1NTNcdTI1NjVcdTI1NTZcdTI1NUZcdTI1NkJcdTI1NjJcdTI1NTlcdTI1NjhcdTI1NUNcdTI1NTFcdTI1NTBcdTI1NkRcdTI1NkVcdTI1NzBcdTI1NkZcdTI1OTNcIl1cbl1cbiIsICJbXG5bXCI4NzQwXCIsXCJcdTQzRjBcdTRDMzJcdTQ2MDNcdTQ1QTZcdTQ1NzhcdUQ4NUNcdURFNjdcdTRENzdcdTQ1QjNcdUQ4NUZcdURDQjFcdTRDRTJcdUQ4NUZcdURDQzVcdTNCOTVcdTQ3MzZcdTQ3NDRcdTRDNDdcdTRDNDBcdUQ4NTBcdURFQkZcdUQ4NERcdURFMTdcdUQ4NUNcdURGNTJcdUQ4NUJcdURFOEJcdUQ4NUNcdURDRDJcdTRDNTdcdUQ4NjhcdURGNTFcdTQ3NEZcdTQ1REFcdTRDODVcdUQ4NUZcdURDNkNcdTREMDdcdTRBQTRcdTQ2QTFcdUQ4NUFcdURGMjNcdTcyMjVcdUQ4NTZcdURFNTRcdUQ4NDZcdURFNjNcdUQ4NEZcdURFMDZcdUQ4NEZcdURGNjFcdTY2NERcdTU2RkJcIl0sXG5bXCI4NzY3XCIsXCJcdTdEOTVcdTU5MURcdUQ4NjJcdURGQjlcdTNERjRcdTk3MzRcdUQ4NUVcdURGRUZcdTVCREJcdUQ4NDdcdURENUVcdTVBQTRcdTM2MjVcdUQ4NjdcdURFQjBcdTVBRDFcdTVCQjdcdTVDRkNcdTY3NkVcdTg1OTNcdUQ4NjZcdURENDVcdTc0NjFcdTc0OURcdTM4NzVcdUQ4NDdcdURENTNcdUQ4NERcdURFOUVcdUQ4NThcdURDMjFcdTNFRUNcIl0sXG5bXCI4N2ExXCIsXCJcdUQ4NTZcdURDREVcdTNBRjVcdTdBRkNcdTlGOTdcdUQ4NTBcdURENjFcdUQ4NjJcdUREMERcdUQ4NENcdURERUFcdUQ4NDJcdURFOEFcdUQ4NENcdURFNUVcdTQzMEFcdTg0ODRcdTlGOTZcdTk0MkZcdTQ5MzBcdTg2MTNcdTU4OTZcdTk3NEFcdTkyMThcdTc5RDBcdTdBMzJcdTY2NjBcdTZBMjlcdTg4OURcdTc0NENcdTdCQzVcdTY3ODJcdTdBMkNcdTUyNEZcdTkwNDZcdTM0RTZcdTczQzRcdUQ4NTdcdUREQjlcdTc0QzZcdTlGQzdcdTU3QjNcdTQ5MkZcdTU0NENcdTQxMzFcdUQ4NERcdURFOEVcdTU4MThcdTdBNzJcdUQ4NUVcdURGNjVcdThCOEZcdTQ2QUVcdUQ4NUJcdURFODhcdTQxODFcdUQ4NTdcdUREOTlcdTdCQUVcdUQ4NDlcdURDQkNcdTlGQzhcdUQ4NDlcdURDQzFcdUQ4NDlcdURDQzlcdUQ4NDlcdURDQ0NcdTlGQzlcdTg1MDRcdUQ4NERcdUREQkJcdTQwQjRcdTlGQ0FcdTQ0RTFcdUQ4NkJcdURERkZcdTYyQzFcdTcwNkVcdTlGQ0JcIl0sXG5bXCI4ODQwXCIsXCJcdTMxQzBcIiw0LFwiXHVEODQwXHVERDBDXHUzMUM1XHVEODQwXHVEQ0QxXHVEODQwXHVEQ0NEXHUzMUM2XHUzMUM3XHVEODQwXHVEQ0NCXHVEODQ3XHVERkU4XHUzMUM4XHVEODQwXHVEQ0NBXHUzMUM5XHUzMUNBXHUzMUNCXHUzMUNDXHVEODQwXHVERDBFXHUzMUNEXHUzMUNFXHUwMTAwXHUwMEMxXHUwMUNEXHUwMEMwXHUwMTEyXHUwMEM5XHUwMTFBXHUwMEM4XHUwMTRDXHUwMEQzXHUwMUQxXHUwMEQyXHUwRkZGXHUwMENBXHUwMzA0XHUxRUJFXHUwRkZGXHUwMENBXHUwMzBDXHUxRUMwXHUwMENBXHUwMTAxXHUwMEUxXHUwMUNFXHUwMEUwXHUwMjUxXHUwMTEzXHUwMEU5XHUwMTFCXHUwMEU4XHUwMTJCXHUwMEVEXHUwMUQwXHUwMEVDXHUwMTREXHUwMEYzXHUwMUQyXHUwMEYyXHUwMTZCXHUwMEZBXHUwMUQ0XHUwMEY5XHUwMUQ2XHUwMUQ4XHUwMURBXCJdLFxuW1wiODhhMVwiLFwiXHUwMURDXHUwMEZDXHUwRkZGXHUwMEVBXHUwMzA0XHUxRUJGXHUwRkZGXHUwMEVBXHUwMzBDXHUxRUMxXHUwMEVBXHUwMjYxXHUyM0RBXHUyM0RCXCJdLFxuW1wiODk0MFwiLFwiXHVEODY4XHVERkE5XHVEODQ0XHVERDQ1XCJdLFxuW1wiODk0M1wiLFwiXHU2NTBBXCJdLFxuW1wiODk0NlwiLFwiXHU0RTNEXHU2RUREXHU5RDRFXHU5MURGXCJdLFxuW1wiODk0Y1wiLFwiXHVEODVEXHVERjM1XHU2NDkxXHU0RjFBXHU0RjI4XHU0RkE4XHU1MTU2XHU1MTc0XHU1MTlDXHU1MUU0XHU1MkExXHU1MkE4XHU1MzNCXHU1MzRFXHU1M0QxXHU1M0Q4XHU1NkUyXHU1OEYwXHU1OTA0XHU1OTA3XHU1OTMyXHU1OTM0XHU1QjY2XHU1QjlFXHU1QjlGXHU1QzlBXHU1RTg2XHU2MDNCXHU2NTg5XHU2N0ZFXHU2ODA0XHU2ODY1XHU2RDRFXHU3MEJDXHU3NTM1XHU3RUE0XHU3RUFDXHU3RUJBXHU3RUM3XHU3RUNGXHU3RURGXHU3RjA2XHU3RjM3XHU4MjdBXHU4MkNGXHU4MzZGXHU4OUM2XHU4QkJFXHU4QkUyXHU4RjY2XHU4RjY3XHU4RjZFXCJdLFxuW1wiODlhMVwiLFwiXHU3NDExXHU3Q0ZDXHU3RENEXHU2OTQ2XHU3QUM5XHU1MjI3XCJdLFxuW1wiODlhYlwiLFwiXHU5MThDXHU3OEI4XHU5MTVFXHU4MEJDXCJdLFxuW1wiODliMFwiLFwiXHU4RDBCXHU4MEY2XHVEODQyXHVEREU3XCJdLFxuW1wiODliNVwiLFwiXHU4MDlGXHU5RUM3XHU0Q0NEXHU5REM5XHU5RTBDXHU0QzNFXHVEODY3XHVEREY2XHVEODVDXHVEQzBFXHU5RTBBXHVEODY4XHVERDMzXHUzNUMxXCJdLFxuW1wiODljMVwiLFwiXHU2RTlBXHU4MjNFXHU3NTE5XCJdLFxuW1wiODljNVwiLFwiXHU0OTExXHU5QTZDXHU5QThGXHU5Rjk5XHU3OTg3XHVEODYxXHVEQzZDXHVEODQ3XHVERENBXHVEODQxXHVEREQwXHVEODRBXHVERUU2XHU0RTI0XHU0RTgxXHU0RTgwXHU0RTg3XHU0RUJGXHU0RUVCXHU0RjM3XHUzNDRDXHU0RkJEXHUzRTQ4XHU1MDAzXHU1MDg4XHUzNDdEXHUzNDkzXHUzNEE1XHU1MTg2XHU1OTA1XHU1MURCXHU1MUZDXHU1MjA1XHU0RTg5XHU1Mjc5XHU1MjkwXHU1MzI3XHUzNUM3XHU1M0E5XHUzNTUxXHU1M0IwXHUzNTUzXHU1M0MyXHU1NDIzXHUzNTZEXHUzNTcyXHUzNjgxXHU1NDkzXHU1NEEzXHU1NEI0XHU1NEI5XHU1NEQwXHU1NEVGXHU1NTE4XHU1NTIzXHU1NTI4XHUzNTk4XHU1NTNGXHUzNUE1XHUzNUJGXHU1NUQ3XHUzNUM1XCJdLFxuW1wiOGE0MFwiLFwiXHVEODVGXHVERDg0XHU1NTI1XCJdLFxuW1wiOGE0M1wiLFwiXHVEODQzXHVEQzQyXHVEODQzXHVERDE1XHVEODU0XHVERDJCXHU1NTkwXHVEODRCXHVEQ0M2XHUzOUVDXHVEODQwXHVERjQxXHU4RTQ2XHVEODUzXHVEREI4XHVEODY1XHVEQ0U1XHU0MDUzXHVEODYwXHVEQ0JFXHU3NzdBXHVEODRCXHVEQzM4XHUzQTM0XHU0N0Q1XHVEODYwXHVERDVEXHVEODVBXHVEREYyXHVEODUzXHVEREVBXHU2NEREXHVEODQzXHVERDdDXHVEODQzXHVERkI0XHVEODQzXHVEQ0Q1XHVEODQ0XHVEQ0Y0XHU2NDhEXHU4RTdFXHVEODQzXHVERTk2XHVEODQzXHVEQzBCXHVEODQzXHVERjY0XHVEODRCXHVEQ0E5XHVEODYwXHVERTU2XHVEODUxXHVEQ0QzXCJdLFxuW1wiOGE2NFwiLFwiXHVEODQzXHVERDQ2XHVEODY2XHVERTREXHVEODYwXHVEQ0U5XHU0N0Y0XHVEODUzXHVERUE3XHVEODRCXHVEQ0MyXHU5QUIyXHUzQTY3XHVEODY1XHVEREY0XHUzRkVEXHUzNTA2XHVEODU0XHVERUM3XHVEODY1XHVERkQ0XHVEODVFXHVEQ0M4XHVEODRCXHVERDQ0XHU5RDZFXHU5ODE1XCJdLFxuW1wiOGE3NlwiLFwiXHU0M0Q5XHVEODU4XHVEQ0E1XHU2NEI0XHU1NEUzXHVEODRCXHVERDRDXHVEODRBXHVERkNBXHVEODQ0XHVEQzc3XHUzOUZCXHVEODQ0XHVEQzZGXCJdLFxuW1wiOGFhMVwiLFwiXHVEODU5XHVERURBXHVEODU5XHVERjE2XHVEODVFXHVEREEwXHU2NEVBXHVEODU0XHVEQzUyXHVEODQzXHVEQzQzXHU4RTY4XHVEODQ4XHVEREExXHVEODYyXHVERjRDXHVEODQxXHVERjMxXCJdLFxuW1wiOGFhY1wiLFwiXHU0ODBCXHVEODQwXHVEREE5XHUzRkZBXHU1ODczXHVEODRCXHVERDhEXCJdLFxuW1wiOGFiMlwiLFwiXHVEODUxXHVEREM4XHVEODQxXHVEQ0ZDXHVEODU4XHVEQzk3XHVEODQzXHVERjRDXHVEODQzXHVERDk2XHU1NTc5XHU0MEJCXHU0M0JBXCJdLFxuW1wiOGFiYlwiLFwiXHU0QUI0XHVEODRBXHVERTY2XHVEODQ0XHVEQzlEXHU4MUFBXHU5OEY1XHVEODQzXHVERDlDXHU2Mzc5XHUzOUZFXHVEODQ5XHVERjc1XHU4REMwXHU1NkExXHU2NDdDXHUzRTQzXCJdLFxuW1wiOGFjOVwiLFwiXHVEODY5XHVERTAxXHVEODQzXHVERTA5XHVEODRBXHVERUNGXHVEODRCXHVEQ0M5XCJdLFxuW1wiOGFjZVwiLFwiXHVEODQ0XHVEQ0M4XHVEODRFXHVEREMyXHUzOTkyXHUzQTA2XHVEODYwXHVERTlCXHUzNTc4XHVEODU3XHVERTQ5XHVEODQ4XHVEQ0M3XHU1NjUyXHVEODQzXHVERjMxXHVEODRCXHVEQ0IyXHVEODY1XHVERjIwXHUzNEJDXHU2QzNEXHVEODUzXHVERTNCXCJdLFxuW1wiOGFkZlwiLFwiXHVEODVEXHVERDc0XHVEODRCXHVERThCXHVEODQ4XHVERTA4XHVEODY5XHVERTVCXHVEODYzXHVEQ0NEXHVEODQzXHVERTdBXHVEODQzXHVEQzM0XHVEODVBXHVEQzFDXHU3RjkzXHVEODQ0XHVEQ0NGXHVEODRBXHVEQzAzXHVEODRBXHVERDM5XHUzNUZCXHVEODU0XHVEREUzXHVEODQzXHVERThDXHVEODQzXHVERjhEXHVEODQzXHVERUFBXHUzRjkzXHVEODQzXHVERjMwXHVEODQzXHVERDQ3XHVEODQ0XHVERDRGXHVEODQzXHVERTRDXCJdLFxuW1wiOGFmNlwiLFwiXHVEODQzXHVERUFCXHVEODQyXHVERkE5XHVEODQzXHVERDQ4XHVEODQ0XHVEQ0MwXHVEODQ0XHVERDNEXHUzRkY5XHVEODQ5XHVERTk2XHU2NDMyXHVEODQzXHVERkFEXCJdLFxuW1wiOGI0MFwiLFwiXHVEODRDXHVERkY0XHVEODVEXHVERTM5XHVEODRBXHVERkNFXHVEODQzXHVERDdFXHVEODQzXHVERDdGXHVEODRCXHVEQzUxXHVEODRCXHVEQzU1XHUzQTE4XHVEODQzXHVERTk4XHVEODQ0XHVEQ0M3XHVEODQzXHVERjJFXHVEODY5XHVERTMyXHVEODVBXHVERjUwXHVEODYzXHVEQ0QyXHVEODYzXHVERDk5XHVEODYzXHVEQ0NBXHU5NUFBXHU1NENDXHU4MkM0XHU1NUI5XCJdLFxuW1wiOGI1NVwiLFwiXHVEODY3XHVERUMzXHU5QzI2XHU5QUI2XHVEODVEXHVERjVFXHVEODRCXHVEREVFXHU3MTQwXHU4MTZEXHU4MEVDXHU1QzFDXHVEODU5XHVERDcyXHU4MTM0XHUzNzk3XHU1MzVGXHVEODYwXHVEQ0JEXHU5MUI2XHVEODQzXHVERUZBXHVEODQzXHVERTBGXHVEODQzXHVERTc3XHVEODQzXHVERUZCXHUzNUREXHVEODUzXHVEREVCXHUzNjA5XHVEODQzXHVEQ0Q2XHU1NkFGXHVEODQ5XHVERkI1XHVEODQ0XHVEQ0M5XHVEODQzXHVERTEwXHVEODQzXHVERTc4XHVEODQ0XHVEQzc4XHVEODQ0XHVERDQ4XHVEODYwXHVERTA3XHVEODQ1XHVEQzU1XHVEODQzXHVERTc5XHVEODUzXHVERTUwXHVEODRCXHVEREE0XHU1QTU0XHVEODQ0XHVEQzFEXHVEODQ0XHVEQzFFXHVEODQ0XHVEQ0Y1XHVEODQ0XHVEQ0Y2XHU1NzlDXHVEODQzXHVERTExXCJdLFxuW1wiOGJhMVwiLFwiXHVEODVEXHVERTk0XHVEODYwXHVERUNEXHVEODQzXHVERkI1XHVEODQzXHVERTdCXHVEODU0XHVERDdFXHUzNzAzXHVEODQzXHVERkI2XHVEODQ0XHVERDgwXHVEODU0XHVERUQ4XHVEODY4XHVERUJEXHVEODUyXHVERERBXHVEODQ2XHVEQzNBXHVEODUwXHVERDc3XHVEODYwXHVERTdDXHU1ODk5XHU1MjY4XHUzNjFBXHVEODU1XHVERjNEXHU3QkIyXHU1QjY4XHU0ODAwXHU0QjJDXHU5RjI3XHU0OUU3XHU5QzFGXHU5QjhEXHVEODU2XHVERjc0XHVEODRDXHVERDNEXHU1NUZCXHUzNUYyXHU1Njg5XHU0RTI4XHU1OTAyXHVEODQ2XHVERkMxXHVEODdFXHVEQzc4XHU5NzUxXHVEODQwXHVEQzg2XHU0RTVCXHU0RUJCXHUzNTNFXHU1QzIzXHU1RjUxXHU1RkM0XHUzOEZBXHU2MjRDXHU2NTM1XHU2QjdBXHU2QzM1XHU2QzNBXHU3MDZDXHU3MjJCXHU0RTJDXHU3MkFEXHVEODUyXHVEQ0U5XHU3RjUyXHU3OTNCXHU3Q0Y5XHU3RjUzXHVEODU4XHVERTZBXHUzNEMxXCJdLFxuW1wiOGJkZVwiLFwiXHVEODU4XHVERjRCXHU4MDAyXHU4MDgwXHVEODU5XHVERTEyXHVEODVBXHVERDUxXHU1MzVEXHU4ODY0XHU4OUMxXHVEODVFXHVEQ0IyXHU4QkEwXHU4RDFEXHU5NDg1XHU5NTc4XHU5NTdGXHU5NUU4XHVEODYzXHVERTBGXHU5N0U2XHU5ODc1XHU5OENFXHU5OERFXHU5OTYzXHVEODY2XHVEQzEwXHU5QzdDXHU5RTFGXHU5RUM0XHU2QjZGXHVGOTA3XHU0RTM3XHVEODQwXHVEQzg3XHU5NjFEXHU2MjM3XHU5NEEyXCJdLFxuW1wiOGM0MFwiLFwiXHU1MDNCXHU2REZFXHVEODY3XHVEQzczXHU5RkE2XHUzREM5XHU4ODhGXHVEODUwXHVERDRFXHU3MDc3XHU1Q0Y1XHU0QjIwXHVEODU0XHVERENEXHUzNTU5XHVEODU3XHVERDMwXHU2MTIyXHVEODYyXHVERTMyXHU4RkE3XHU5MUY2XHU3MTkxXHU2NzE5XHU3M0JBXHVEODRDXHVERTgxXHVEODY4XHVERDA3XHUzQzhCXHVEODQ2XHVERDgwXHU0QjEwXHU3OEU0XHU3NDAyXHU1MUFFXHVEODYxXHVERjBGXHU0MDA5XHU2QTYzXHVEODY4XHVERUJBXHU0MjIzXHU4NjBGXHVEODQyXHVERTZGXHU3QTJBXHVEODY2XHVERDQ3XHVEODYyXHVERUVBXHU5NzU1XHU3MDREXHU1MzI0XHVEODQ4XHVEQzdFXHU5M0Y0XHU3NkQ5XHVEODYyXHVEREUzXHU5RkE3XHU3N0REXHU0RUEzXHU0RkYwXHU1MEJDXHU0RTJGXHU0RjE3XHU5RkE4XHU1NDM0XHU3RDhCXHU1ODkyXHU1OEQwXHVEODQ3XHVEREI2XHU1RTkyXHU1RTk5XHU1RkMyXHVEODQ5XHVERjEyXHU2NThCXCJdLFxuW1wiOGNhMVwiLFwiXHVEODRDXHVERkY5XHU2OTE5XHU2QTQzXHVEODRGXHVEQzYzXHU2Q0ZGXCJdLFxuW1wiOGNhN1wiLFwiXHU3MjAwXHVEODUxXHVERDA1XHU3MzhDXHUzRURCXHVEODUyXHVERTEzXHU1QjE1XHU3NEI5XHU4QjgzXHVEODU3XHVEQ0E0XHVEODU1XHVERTk1XHU3QTkzXHU3QkVDXHU3Q0MzXHU3RTZDXHU4MkY4XHU4NTk3XHU5RkE5XHU4ODkwXHU5RkFBXHU4RUI5XHU5RkFCXHU4RkNGXHU4NTVGXHU5OUUwXHU5MjIxXHU5RkFDXHVEODYzXHVEREI5XHVEODQ1XHVEQzNGXHU0MDcxXHU0MkEyXHU1QTFBXCJdLFxuW1wiOGNjOVwiLFwiXHU5ODY4XHU2NzZCXHU0Mjc2XHU1NzNEXCJdLFxuW1wiOGNjZVwiLFwiXHU4NUQ2XHVEODUyXHVERDdCXHU4MkJGXHVEODVDXHVERDBEXHU0QzgxXHVEODVCXHVERDc0XHU1RDdCXHVEODVBXHVERjE1XHVEODVCXHVERkJFXHU5RkFEXHU5RkFFXHU1Qjk2XHU5RkFGXHU2NkU3XHU3RTVCXHU2RTU3XHU3OUNBXHUzRDg4XHU0NEMzXHVEODRDXHVERTU2XHVEODQ5XHVERjk2XHU0MzlBXHU0NTM2XCJdLFxuW1wiOGNlNlwiLFwiXHU1Q0Q1XHVEODRFXHVERjFBXHU4QUY5XHU1Qzc4XHUzRDEyXHVEODREXHVERDUxXHU1RDc4XHU5RkIyXHU3MTU3XHU0NTU4XHVEODUwXHVEQ0VDXHVEODQ3XHVERTIzXHU0Qzc3XHUzOTc4XHUzNDRBXHVEODQwXHVEREE0XHVEODVCXHVEQzQxXHU4QUNDXHU0RkI0XHVEODQwXHVERTM5XHU1OUJGXHU4MTZDXHU5ODU2XHVEODY2XHVEQ0ZBXHU1RjNCXCJdLFxuW1wiOGQ0MFwiLFwiXHVEODQyXHVERjlGXCJdLFxuW1wiOGQ0MlwiLFwiXHVEODQ4XHVEREMxXHVEODYyXHVERDZEXHU0MTAyXHU0NkJCXHVEODY0XHVEQzc5XHUzRjA3XHU5RkIzXHVEODY4XHVEREI1XHU0MEY4XHUzN0Q2XHU0NkY3XHVEODVCXHVEQzQ2XHU0MTdDXHVEODYxXHVERUIyXHVEODVDXHVERkZGXHU0NTZEXHUzOEQ0XHVEODU1XHVEQzlBXHU0NTYxXHU0NTFCXHU0RDg5XHU0QzdCXHU0RDc2XHU0NUVBXHUzRkM4XHVEODUyXHVERjBGXHUzNjYxXHU0NERFXHU0NEJEXHU0MUVEXHU1RDNFXHU1RDQ4XHU1RDU2XHUzREZDXHUzODBGXHU1REE0XHU1REI5XHUzODIwXHUzODM4XHU1RTQyXHU1RUJEXHU1RjI1XHU1RjgzXHUzOTA4XHUzOTE0XHUzOTNGXHUzOTREXHU2MEQ3XHU2MTNEXHU1Q0U1XHUzOTg5XHU2MUI3XHU2MUI5XHU2MUNGXHUzOUI4XHU2MjJDXHU2MjkwXHU2MkU1XHU2MzE4XHUzOUY4XHU1NkIxXCJdLFxuW1wiOGRhMVwiLFwiXHUzQTAzXHU2M0UyXHU2M0ZCXHU2NDA3XHU2NDVBXHUzQTRCXHU2NEMwXHU1RDE1XHU1NjIxXHU5RjlGXHUzQTk3XHU2NTg2XHUzQUJEXHU2NUZGXHU2NjUzXHUzQUYyXHU2NjkyXHUzQjIyXHU2NzE2XHUzQjQyXHU2N0E0XHU2ODAwXHUzQjU4XHU2ODRBXHU2ODg0XHUzQjcyXHUzQjcxXHUzQjdCXHU2OTA5XHU2OTQzXHU3MjVDXHU2OTY0XHU2OTlGXHU2OTg1XHUzQkJDXHU2OUQ2XHUzQkREXHU2QTY1XHU2QTc0XHU2QTcxXHU2QTgyXHUzQkVDXHU2QTk5XHUzQkYyXHU2QUFCXHU2QUI1XHU2QUQ0XHU2QUY2XHU2QjgxXHU2QkMxXHU2QkVBXHU2Qzc1XHU2Q0FBXHUzQ0NCXHU2RDAyXHU2RDA2XHU2RDI2XHU2RDgxXHUzQ0VGXHU2REE0XHU2REIxXHU2RTE1XHU2RTE4XHU2RTI5XHU2RTg2XHVEODYyXHVEREMwXHU2RUJCXHU2RUUyXHU2RURBXHU5RjdGXHU2RUU4XHU2RUU5XHU2RjI0XHU2RjM0XHUzRDQ2XHVEODRGXHVERjQxXHU2RjgxXHU2RkJFXHUzRDZBXHUzRDc1XHU3MUI3XHU1Qzk5XHUzRDhBXHU3MDJDXHUzRDkxXHU3MDUwXHU3MDU0XHU3MDZGXHU3MDdGXHU3MDg5XHVEODQwXHVERjI1XHU0M0MxXHUzNUYxXHVEODQzXHVERUQ4XCJdLFxuW1wiOGU0MFwiLFwiXHVEODRGXHVERUQ3XHU1N0JFXHVEODVCXHVERUQzXHU3MTNFXHVEODU1XHVERkUwXHUzNjRFXHU2OUEyXHVEODYyXHVERkU5XHU1Qjc0XHU3QTQ5XHVEODU2XHVEQ0UxXHVEODY1XHVEQ0Q5XHU3QTY1XHU3QTdEXHVEODU2XHVEREFDXHU3QUJCXHU3QUIwXHU3QUMyXHU3QUMzXHU3MUQxXHVEODU5XHVEQzhEXHU0MUNBXHU3QURBXHU3QUREXHU3QUVBXHU0MUVGXHU1NEIyXHVEODU3XHVEQzAxXHU3QjBCXHU3QjU1XHU3QjI5XHVEODU0XHVERjBFXHVEODU3XHVEQ0ZFXHU3QkEyXHU3QjZGXHU4MzlDXHVEODU2XHVERkI0XHVEODVCXHVEQzdGXHU3QkQwXHU4NDIxXHU3QjkyXHU3QkI4XHVEODU3XHVERDIwXHUzREFEXHVEODU3XHVEQzY1XHU4NDkyXHU3QkZBXHU3QzA2XHU3QzM1XHVEODU3XHVEQ0MxXHU3QzQ0XHU3QzgzXHVEODUyXHVEQzgyXHU3Q0E2XHU2NjdEXHVEODUxXHVERDc4XHU3Q0M5XHU3Q0M3XHU3Q0U2XHU3Qzc0XHU3Q0YzXHU3Q0Y1XHU3Q0NFXCJdLFxuW1wiOGVhMVwiLFwiXHU3RTY3XHU0NTFEXHVEODVCXHVERTQ0XHU3RDVEXHVEODVCXHVERUQ2XHU3NDhEXHU3RDg5XHU3REFCXHU3MTM1XHU3REIzXHU3REQyXHVEODUwXHVEQzU3XHVEODU4XHVEQzI5XHU3REU0XHUzRDEzXHU3REY1XHVEODQ1XHVERkY5XHU3REU1XHVEODYwXHVERjZEXHU3RTFEXHVEODU4XHVERDIxXHVEODU4XHVERDVBXHU3RTZFXHU3RTkyXHU0MzJCXHU5NDZDXHU3RTI3XHU3RjQwXHU3RjQxXHU3RjQ3XHU3OTM2XHVEODU4XHVERUQwXHU5OUUxXHU3Rjk3XHVEODU4XHVERjUxXHU3RkEzXHVEODQ1XHVERTYxXHVEODQwXHVEQzY4XHU0NTVDXHVEODREXHVERjY2XHU0NTAzXHVEODYwXHVERjNBXHU3RkZBXHVEODU5XHVEQzg5XHU4MDA1XHU4MDA4XHU4MDFEXHU4MDI4XHU4MDJGXHVEODY4XHVEQzg3XHVEODVCXHVEQ0MzXHU4MDNCXHU4MDNDXHU4MDYxXHVEODQ5XHVERjE0XHU0OTg5XHVEODU5XHVERTI2XHVEODRGXHVEREUzXHVEODU5XHVERUU4XHU2NzI1XHU4MEE3XHVEODYyXHVERTQ4XHU4MTA3XHU4MTFBXHU1OEIwXHVEODQ5XHVERUY2XHU2QzdGXHVEODU5XHVEQzk4XHVEODUzXHVERkI4XHU2NEU3XHVEODQ1XHVEQzhBXHU4MjE4XHVEODQ2XHVEQzVFXHU2QTUzXHVEODUyXHVERTY1XHVEODUyXHVERTk1XHU0NDdBXHU4MjI5XHVEODQyXHVERjBEXHVEODVBXHVERTUyXHVEODRGXHVERDdFXHU0RkY5XHVEODQ1XHVEQ0ZEXHU4NEUyXHU4MzYyXHVEODVBXHVERjBBXHVEODUyXHVEREE3XHVEODREXHVERDMwXHVEODQ1XHVERjczXHVEODRGXHVEREY4XHU4MkFBXHU2OTFCXHVEODdFXHVERDk0XHU0MURCXCJdLFxuW1wiOGY0MFwiLFwiXHU4NTRCXHU4MkQwXHU4MzFBXHVEODQzXHVERTE2XHVEODQ1XHVERkI0XHUzNkMxXHVEODRDXHVERDdEXHVEODREXHVERDVBXHU4MjdCXHU4MkUyXHU4MzE4XHVEODRGXHVERThCXHVEODVCXHVEREEzXHVEODVBXHVERjA1XHVEODVBXHVERjk3XHVEODREXHVERENFXHUzREJGXHU4MzFEXHU1NUVDXHU4Mzg1XHU0NTBCXHVEODVCXHVEREE1XHU4M0FDXHU4M0MxXHU4M0QzXHUzNDdFXHVEODVCXHVERUQ0XHU2QTU3XHU4NTVBXHUzNDk2XHVEODVCXHVERTQyXHVEODRCXHVERUVGXHU4NDU4XHVEODU2XHVERkU0XHU4NDcxXHUzREQzXHU0NEU0XHU2QUE3XHU4NDRBXHVEODRGXHVEQ0I1XHU3OTU4XHU4NEE4XHVEODVBXHVERjk2XHVEODVCXHVERTc3XHVEODVCXHVERTQzXHU4NERFXHU4NDBGXHU4MzkxXHU0NEEwXHU4NDkzXHU4NEU0XHVEODU3XHVEQzkxXHU0MjQwXHVEODU3XHVEQ0MwXHU0NTQzXHU4NTM0XHU1QUYyXHVEODVCXHVERTk5XHU0NTI3XHU4NTczXHU0NTE2XHU2N0JGXHU4NjE2XCJdLFxuW1wiOGZhMVwiLFwiXHVEODYxXHVERTI1XHVEODYxXHVERTNCXHU4NUMxXHVEODVDXHVEQzg4XHU4NjAyXHVEODQ1XHVERDgyXHVEODVDXHVEQ0NEXHVEODdFXHVEREIyXHU0NTZBXHU4NjI4XHUzNjQ4XHVEODQ2XHVEQ0EyXHU1M0Y3XHVEODVDXHVERjlBXHU4NjdFXHU4NzcxXHVEODY4XHVEQ0Y4XHU4N0VFXHVEODRCXHVEQzI3XHU4N0IxXHU4N0RBXHU4ODBGXHU1NjYxXHU4NjZDXHU2ODU2XHU0NjBGXHU4ODQ1XHU4ODQ2XHVEODVEXHVEREUwXHVEODRGXHVEREI5XHVEODVEXHVEREU0XHU4ODVFXHU4ODlDXHU0NjVCXHU4OEI0XHU4OEI1XHU2M0MxXHU4OEM1XHU3Nzc3XHVEODVEXHVERjBGXHU4OTg3XHU4OThBXHU4OUE2XHU4OUE5XHU4OUE3XHU4OUJDXHVEODYyXHVERTI1XHU4OUU3XHVEODVFXHVERDI0XHVEODVFXHVERUJEXHU4QTlDXHU3NzkzXHU5MUZFXHU4QTkwXHVEODVFXHVERTU5XHU3QUU5XHVEODVFXHVERjNBXHVEODRGXHVERjhGXHU0NzEzXHVEODVFXHVERjM4XHU3MTdDXHU4QjBDXHU4QjFGXHVEODU1XHVEQzMwXHVEODU1XHVERDY1XHU4QjNGXHU4QjRDXHU4QjREXHU4QUE5XHVEODUyXHVERTdBXHU4QjkwXHU4QjlCXHU4QUFGXHVEODQ1XHVERURGXHU0NjE1XHU4ODRGXHU4QzlCXHVEODVGXHVERDU0XHVEODVGXHVERDhGXHVEODdFXHVEREQ0XHUzNzI1XHVEODVGXHVERDUzXHU4Q0Q2XHVEODVGXHVERDk4XHVEODVGXHVEREJEXHU4RDEyXHU4RDAzXHVEODQ2XHVERDEwXHU4Q0RCXHU3MDVDXHU4RDExXHVEODUzXHVEQ0M5XHUzRUQwXHU4RDc3XCJdLFxuW1wiOTA0MFwiLFwiXHU4REE5XHVEODYwXHVEQzAyXHVEODQ0XHVEQzE0XHVEODUyXHVERDhBXHUzQjdDXHVEODYwXHVEREJDXHVEODVDXHVERDBDXHU3QUU3XHU4RUFEXHU4RUI2XHU4RUMzXHU5MkQ0XHU4RjE5XHU4RjJEXHVEODYwXHVERjY1XHVEODYxXHVEQzEyXHU4RkE1XHU5MzAzXHVEODY4XHVERTlGXHVEODQyXHVERTUwXHU4RkIzXHU0OTJBXHVEODYyXHVERERFXHVEODYxXHVERDNEXHVEODRGXHVEREJCXHU1RUY4XHVEODRDXHVERTYyXHU4RkY5XHVEODY4XHVEQzE0XHVEODYxXHVERUJDXHVEODYxXHVERDAxXHVEODQ4XHVERjI1XHUzOTgwXHVEODVCXHVERUQ3XHU5MDM3XHVEODYxXHVERDNDXHVEODVFXHVERUJFXHU5MDYxXHVEODYxXHVERDZDXHVEODYxXHVERTBCXHU5MEE4XHVEODYxXHVERjEzXHU5MEM0XHVEODYxXHVERUU2XHU5MEFFXHU5MEZEXHU5MTY3XHUzQUYwXHU5MUE5XHU5MUM0XHU3Q0FDXHVEODYyXHVERDMzXHVEODQ3XHVERTg5XHU5MjBFXHU2QzlGXHU5MjQxXHU5MjYyXHVEODU1XHVEREI5XHU5MkI5XHVEODYyXHVERUM2XHVEODRGXHVEQzlCXHVEODYyXHVERjBDXHVEODU1XHVERERCXCJdLFxuW1wiOTBhMVwiLFwiXHVEODQzXHVERDMxXHU5MzJDXHU5MzZCXHVEODYyXHVERUUxXHVEODYyXHVERkVCXHU3MDhGXHU1QUMzXHVEODYyXHVERUUyXHVEODYyXHVERUU1XHU0OTY1XHU5MjQ0XHVEODYyXHVERkVDXHVEODYzXHVEQzM5XHVEODYyXHVERkZGXHU5MzczXHU5NDVCXHU4RUJDXHU5NTg1XHU5NUE2XHU5NDI2XHU5NUEwXHU2RkY2XHU0MkI5XHVEODQ5XHVERTdBXHVEODYxXHVERUQ4XHVEODQ0XHVERTdDXHVEODRGXHVERTJFXHU0OURGXHU2QzFDXHU5NjdCXHU5Njk2XHU0MTZDXHU5NkEzXHVEODVCXHVERUQ1XHU2MURBXHU5NkI2XHU3OEY1XHVEODYyXHVERUUwXHU5NkJEXHU1M0NDXHU0OUExXHVEODVCXHVEQ0I4XHVEODQwXHVERTc0XHVEODU5XHVEQzEwXHVEODY0XHVEQ0FGXHVEODY0XHVEQ0U1XHVEODUyXHVERUQxXHVEODQ2XHVERDE1XHVEODRDXHVERjBBXHU5NzMxXHU4NjQyXHU5NzM2XHU0QTBGXHU0NTNEXHU0NTg1XHVEODUyXHVERUU5XHU3MDc1XHU1QjQxXHU5NzFCXHU5NzVDXHVEODY0XHVEREQ1XHU5NzU3XHU1QjRBXHVEODY0XHVEREVCXHU5NzVGXHU5NDI1XHU1MEQwXHVEODRDXHVEQ0I3XHVEODRDXHVEQ0JDXHU5Nzg5XHU5NzlGXHU5N0IxXHU5N0JFXHU5N0MwXHU5N0QyXHU5N0UwXHVEODU1XHVEQzZDXHU5N0VFXHU3NDFDXHVEODY1XHVEQzMzXHU5N0ZGXHU5N0Y1XHVEODY1XHVEQzFEXHVEODVFXHVERDdBXHU0QUQxXHU5ODM0XHU5ODMzXHU5ODRCXHU5ODY2XHUzQjBFXHVEODVDXHVERDc1XHUzRDUxXHVEODQxXHVERTMwXHVEODUwXHVERDVDXCJdLFxuW1wiOTE0MFwiLFwiXHVEODU1XHVERjA2XHU5OENBXHU5OEI3XHU5OEM4XHU5OEM3XHU0QUZGXHVEODVCXHVERDI3XHVEODQ1XHVERUQzXHU1NUIwXHU5OEUxXHU5OEU2XHU5OEVDXHU5Mzc4XHU5OTM5XHVEODUyXHVERTI5XHU0QjcyXHVEODY2XHVEQzU3XHVEODY2XHVERDA1XHU5OUY1XHU5QTBDXHU5QTNCXHU5QTEwXHU5QTU4XHVEODU1XHVERjI1XHUzNkM0XHVEODY0XHVEQ0IxXHVEODY2XHVERkQ1XHU5QUUwXHU5QUUyXHVEODY2XHVERjA1XHU5QUY0XHU0QzBFXHU5QjE0XHU5QjJEXHVEODYxXHVERTAwXHU1MDM0XHU5QjM0XHVEODVBXHVEREE4XHUzOEMzXHVEODRDXHVEQzdEXHU5QjUwXHU5QjQwXHVEODY3XHVERDNFXHU1QTQ1XHVEODQ2XHVEQzYzXHU5QjhFXHVEODUwXHVERTRCXHU5QzAyXHU5QkZGXHU5QzBDXHVEODY3XHVERTY4XHU5REQ0XHVEODY3XHVERkI3XHVEODY4XHVERDkyXHVEODY4XHVEREFCXHVEODY4XHVEQ0UxXHVEODY4XHVERDIzXHVEODY4XHVERERGXHU5RDdFXHU5RDgzXHVEODY4XHVERDM0XHU5RTBFXHU2ODg4XCJdLFxuW1wiOTFhMVwiLFwiXHU5REM0XHVEODQ4XHVERDVCXHVEODY4XHVERDkzXHVEODY4XHVERTIwXHVEODQ2XHVERDNCXHVEODY4XHVERTMzXHU5RDM5XHVEODY4XHVEQ0I5XHVEODY4XHVERUI0XHU5RTkwXHU5RTk1XHU5RTlFXHU5RUEyXHU0RDM0XHU5RUFBXHU5RUFGXHVEODUwXHVERjY0XHU5RUMxXHUzQjYwXHUzOUU1XHUzRDFEXHU0RjMyXHUzN0JFXHVEODYzXHVEQzJCXHU5RjAyXHU5RjA4XHU0Qjk2XHU5NDI0XHVEODVCXHVEREEyXHU5RjE3XHU5RjE2XHU5RjM5XHU1NjlGXHU1NjhBXHU5RjQ1XHU5OUI4XHVEODY0XHVEQzhCXHU5N0YyXHU4NDdGXHU5RjYyXHU5RjY5XHU3QURDXHU5RjhFXHU3MjE2XHU0QkJFXHVEODUyXHVERDc1XHVEODUyXHVEREJCXHU3MTc3XHVEODUyXHVEREY4XHVEODUwXHVERjQ4XHVEODUyXHVERTUxXHU3MzlFXHVEODYyXHVERkRBXHVEODQ2XHVEQ0ZBXHU3OTlGXHVEODYyXHVERDdFXHVEODYzXHVERTM2XHU5MzY5XHU5M0YzXHVEODYyXHVERTQ0XHU5MkVDXHU5MzgxXHU5M0NCXHVEODYyXHVERDZDXHVEODUxXHVEQ0I5XHU3MjE3XHUzRUVCXHU3NzcyXHU3QTQzXHU3MEQwXHVEODUxXHVEQzczXHVEODUwXHVERkY4XHU3MTdFXHVEODQ1XHVERkVGXHU3MEEzXHVEODQ2XHVEQ0JFXHVEODREXHVERDk5XHUzRUM3XHVEODQ2XHVEQzg1XHVEODU1XHVEQzJGXHVEODQ1XHVERkY4XHUzNzIyXHVEODQ1XHVERUZCXHVEODQ2XHVEQzM5XHUzNkUxXHVEODQ1XHVERjc0XHVEODQ2XHVEQ0QxXHVEODU3XHVERjRCXHUzNzIzXHVEODQ1XHVERUMwXHU1NzVCXHVEODUyXHVERTI1XHVEODQ0XHVERkZFXHVEODQ0XHVERUE4XCJdLFxuW1wiOTI0MFwiLFwiXHVEODQ0XHVERkM2XHVEODQ1XHVEQ0I2XHU4NTAzXHVEODREXHVERUE2XHU4NTAzXHU4NDU1XHVEODUyXHVERDk0XHVEODVDXHVERDY1XHVEODRGXHVERTMxXHVEODU1XHVERDVDXHVEODRGXHVERUZCXHVEODVDXHVEQzUyXHU0NEY0XHVEODREXHVERUVFXHVEODY2XHVERDlEXHVEODVCXHVERjI2XHU2N0Y5XHUzNzMzXHUzQzE1XHUzREU3XHU1ODZDXHVEODQ2XHVERDIyXHU2ODEwXHU0MDU3XHVEODREXHVERjNGXHVEODUwXHVEQ0UxXHVEODUwXHVEQzhCXHVEODUwXHVERDBGXHVEODVCXHVEQzIxXHU1NENCXHU1NjlFXHVEODU5XHVERUIxXHU1NjkyXHVEODQzXHVERkRGXHVEODQyXHVERkE4XHVEODQzXHVERTBEXHU5M0M2XHVEODYyXHVERjEzXHU5MzlDXHU0RUY4XHU1MTJCXHUzODE5XHVEODUxXHVEQzM2XHU0RUJDXHVEODQxXHVEQzY1XHVEODQwXHVERjdGXHU0RjRCXHU0RjhBXHVEODU1XHVERTUxXHU1QTY4XHVEODQwXHVEREFCXHVEODQwXHVERkNCXHUzOTk5XHVEODQwXHVERjBBXHVEODQxXHVEQzE0XHUzNDM1XHU0RjI5XHVEODQwXHVERUMwXHVEODYzXHVERUIzXHVEODQwXHVERTc1XHU4QURBXHVEODQwXHVERTBDXHU0RTk4XCJdLFxuW1wiOTJhMVwiLFwiXHU1MENEXHU1MTBEXHU0RkEyXHU0RjAzXHVEODUyXHVERTBFXHVEODRGXHVERThBXHU0RjQyXHU1MDJFXHU1MDZDXHU1MDgxXHU0RkNDXHU0RkU1XHU1MDU4XHU1MEZDXHU1MTU5XHU1MTVCXHU1MTVEXHU1MTVFXHU2RTc2XHVEODREXHVERDk1XHVEODRGXHVERTM5XHVEODRGXHVERUJGXHU2RDcyXHVEODQ2XHVEQzg0XHVEODRGXHVERTg5XHU1MUE4XHU1MUMzXHVEODQxXHVEREUwXHU0NEREXHVEODQxXHVEQ0EzXHVEODQxXHVEQzkyXHVEODQxXHVEQzkxXHU4RDdBXHVEODYyXHVERTlDXHVEODQxXHVERjBFXHU1MjU5XHU1MkE0XHVEODQyXHVEQzczXHU1MkUxXHU5MzZFXHU0NjdBXHU3MThDXHVEODUwXHVERjhDXHVEODQzXHVEQzIwXHVEODUyXHVEREFDXHVEODQ0XHVEQ0U0XHU2OUQxXHVEODQzXHVERTFEXHU3NDc5XHUzRURFXHU3NDk5XHU3NDE0XHU3NDU2XHU3Mzk4XHU0QjhFXHVEODUyXHVERUJDXHVEODUwXHVEQzhEXHU1M0QwXHUzNTg0XHU3MjBGXHVEODUwXHVEQ0M5XHU1NUI0XHVEODQwXHVERjQ1XHU1NENEXHVEODQyXHVERkM2XHU1NzFEXHU5MjVEXHU5NkY0XHU5MzY2XHU1N0REXHU1NzhEXHU1NzdGXHUzNjNFXHU1OENCXHU1QTk5XHVEODYyXHVERTQ2XHVEODQ1XHVERUZBXHVEODQ1XHVERjZGXHVEODQ1XHVERjEwXHU1QTJDXHU1OUI4XHU5MjhGXHU1QTdFXHU1QUNGXHU1QTEyXHVEODU2XHVERDQ2XHVEODQ2XHVEREYzXHVEODQ2XHVEQzYxXHVEODUwXHVERTk1XHUzNkY1XHU2RDA1XHU3NDQzXHU1QTIxXHVEODU3XHVERTgzXCJdLFxuW1wiOTM0MFwiLFwiXHU1QTgxXHVEODYyXHVERkQ3XHVEODQxXHVEQzEzXHU5M0UwXHU3NDhDXHVEODQ0XHVERjAzXHU3MTA1XHU0OTcyXHU5NDA4XHVEODYyXHVEREZCXHU5M0JEXHUzN0EwXHU1QzFFXHU1QzlFXHU1RTVFXHU1RTQ4XHVEODQ2XHVERDk2XHVEODQ2XHVERDdDXHVEODRFXHVERUVFXHU1RUNEXHU1QjRGXHVEODQ2XHVERDAzXHVEODQ2XHVERDA0XHUzNzAxXHVEODQ2XHVEQ0EwXHUzNkREXHVEODQ1XHVERUZFXHUzNkQzXHU4MTJBXHVEODYyXHVERTQ3XHVEODQ3XHVEREJBXHVEODREXHVEQzcyXHVEODYyXHVEREE4XHU1RjBDXHU1RjBFXHVEODQ2XHVERDI3XHVEODQ1XHVERkFCXHU1QTZCXHVEODQ1XHVERjNCXHU1QjQ0XHU4NjE0XHVEODVEXHVEREZEXHU4ODYwXHU2MDdFXHVEODRBXHVEQzYwXHVEODQ5XHVERTJCXHU1RkRCXHUzRUI4XHVEODQ5XHVEREFGXHVEODQ5XHVEREJFXHVEODY0XHVEQzg4XHVEODVCXHVERjczXHU2MUMwXHVEODQwXHVEQzNFXHVEODQwXHVEQzQ2XHVEODQ5XHVERTFCXHU2MTk5XHU2MTk4XHU2MDc1XHVEODRCXHVEQzlCXHVEODRCXHVERDA3XHVEODUxXHVERUQ0XHVEODY0XHVERDREXCJdLFxuW1wiOTNhMVwiLFwiXHU2NDcxXHVEODUxXHVERTY1XHVEODRBXHVERjZBXHUzQTI5XHVEODRBXHVERjIyXHVEODREXHVEQzUwXHVEODY2XHVEQ0VBXHVEODRCXHVERTc4XHU2MzM3XHVEODY5XHVEQzVCXHU2NEI2XHU2MzMxXHU2M0QxXHVEODUyXHVEREUzXHVEODRCXHVERDY3XHU2MkE0XHVEODRCXHVEQ0ExXHU2NDNCXHU2NTZCXHU2OTcyXHUzQkY0XHVEODRDXHVEQzhFXHVEODRDXHVERUFEXHVEODUyXHVERDg5XHVEODRDXHVERUFCXHU1NTBEXHVEODRDXHVERUUwXHVEODQ2XHVEQ0Q5XHVEODY1XHVEQzNGXHU2NkNFXHVEODRDXHVERTg5XHVEODRDXHVEREIzXHUzQUUwXHU0MTkwXHVEODU1XHVERDg0XHVEODYyXHVERjIyXHVEODU1XHVERDhGXHVEODQ1XHVERUZDXHVEODU1XHVERDVCXHVEODU1XHVEQzI1XHU3OEVFXHVEODRDXHVERDAzXHVEODQ2XHVEQzJBXHVEODRDXHVERTM0XHUzNDY0XHVEODRDXHVERTBGXHVEODRDXHVERDgyXHVEODUwXHVERUM5XHU2NjhFXHVEODVCXHVERDI0XHU2NjZCXHU0QjkzXHU2NjMwXHVEODVFXHVEQzcwXHVEODQ3XHVEREVCXHU2NjYzXHVEODRDXHVERUQyXHVEODRDXHVERUUxXHU2NjFFXHVEODU2XHVEQzcyXHUzOEQxXHVEODRFXHVEQzNBXHVEODREXHVERkJDXHUzQjk5XHVEODREXHVERkEyXHVEODRDXHVERkZFXHU3NEQwXHUzQjk2XHU2NzhGXHVEODUxXHVERTJBXHU2OEI2XHU2ODFFXHUzQkM0XHU2QUJFXHUzODYzXHVEODREXHVERkQ1XHVEODUxXHVEQzg3XHU2QTMzXHU2QTUyXHU2QUM5XHU2QjA1XHVEODQ2XHVERDEyXHU2NTExXHU2ODk4XHU2QTRDXHUzQkQ3XHU2QTdBXHU2QjU3XHVEODRGXHVERkMwXHVEODRGXHVEQzlBXHU5M0EwXHU5MkYyXHVEODYyXHVERkVBXHVEODYyXHVERUNCXCJdLFxuW1wiOTQ0MFwiLFwiXHU5Mjg5XHVEODYwXHVEQzFFXHVEODYyXHVERERDXHU5NDY3XHU2REE1XHU2RjBCXHVEODUyXHVEREVDXHU2RDY3XHVEODRGXHVERjdGXHUzRDhGXHU2RTA0XHVEODUwXHVEQzNDXHU1QTNEXHU2RTBBXHU1ODQ3XHU2RDI0XHU3ODQyXHU3MTNCXHVEODUwXHVERjFBXHVEODUwXHVERTc2XHU3MEYxXHU3MjUwXHU3Mjg3XHU3Mjk0XHVEODUxXHVERjhGXHVEODUxXHVERjI1XHU1MTc5XHVEODUyXHVERUE0XHVEODQxXHVEREVCXHU3NDdBXHVEODRGXHVERUY4XHVEODREXHVERTVGXHVEODUyXHVERTRBXHVEODUyXHVERDE3XHVEODU3XHVERkUxXHUzRjA2XHUzRUIxXHVEODUyXHVERURGXHVEODYzXHVEQzIzXHVEODRGXHVERjM1XHU2MEE3XHUzRUYzXHU3NENDXHU3NDNDXHU5Mzg3XHU3NDM3XHU0NDlGXHVEODVCXHVEREVBXHU0NTUxXHU3NTgzXHUzRjYzXHVEODUzXHVEQ0Q5XHVEODUzXHVERDA2XHUzRjU4XHU3NTU1XHU3NjczXHVEODY5XHVEREM2XHUzQjE5XHU3NDY4XHVEODYyXHVERUNDXHVEODUyXHVEREFCXHVEODUyXHVERDhFXHUzQUZCXCJdLFxuW1wiOTRhMVwiLFwiXHUzRENEXHVEODUyXHVERTRFXHUzRUZGXHVEODUyXHVEREM1XHVEODUyXHVEQ0YzXHU5MUZBXHU1NzMyXHU5MzQyXHVEODYyXHVERUUzXHVEODQ2XHVEQzY0XHU1MERGXHVEODU0XHVERTIxXHVEODU0XHVEREU3XHU3Nzc4XHVEODRDXHVERTMyXHU3NzBFXHU3NzBGXHU3NzdCXHVEODUxXHVERTk3XHVEODREXHVERjgxXHUzQTVFXHVEODUyXHVEQ0YwXHU3NDM4XHU3NDlCXHUzRUJGXHVEODUyXHVERUJBXHVEODUyXHVERUM3XHU0MEM4XHVEODUyXHVERTk2XHVEODU4XHVEREFFXHU5MzA3XHVEODU1XHVERDgxXHU3ODFFXHU3ODhEXHU3ODg4XHU3OEQyXHU3M0QwXHU3OTU5XHVEODVEXHVERjQxXHVEODU1XHVERUUzXHU0MTBFXHU3OTlCXHU4NDk2XHU3OUE1XHU2QTJEXHVEODRGXHVERUZBXHU3QTNBXHU3OUY0XHU0MTZFXHVEODQ1XHVERUU2XHU0MTMyXHU5MjM1XHU3OUYxXHVEODQzXHVERDRDXHVEODUyXHVERDhDXHVEODQwXHVERTk5XHVEODRGXHVEREJBXHVEODQ1XHVERjZFXHUzNTk3XHU1NTZCXHUzNTcwXHUzNkFBXHVEODQwXHVEREQ0XHVEODQzXHVEQzBEXHU3QUUyXHU1QTU5XHVEODQ5XHVERUY1XHVEODU2XHVERUFGXHVEODU2XHVERTlDXHU1QTBEXHVEODQwXHVERTVCXHU3OEYwXHU1QTJBXHVEODU2XHVERkM2XHU3QUZFXHU0MUY5XHU3QzVEXHU3QzZEXHU0MjExXHVEODU2XHVERkIzXHVEODU3XHVERUJDXHVEODU3XHVERUE2XHU3Q0NEXHVEODUyXHVEREY5XHVEODQ1XHVERkIwXHU3QzhFXHU3QzdDXHU3Q0FFXHU2QUIyXHU3RERDXHU3RTA3XHU3REQzXHU3RjRFXHVEODU4XHVERTYxXCJdLFxuW1wiOTU0MFwiLFwiXHVEODU4XHVERDVDXHVEODVFXHVERjQ4XHU3RDk3XHVEODU3XHVERTgyXHU0MjZBXHVEODVBXHVERjc1XHVEODQyXHVERDE2XHU2N0Q2XHVEODQwXHVEQzRFXHVEODREXHVERENGXHU1N0M0XHVEODU5XHVEQzEyXHVEODU4XHVERkY4XHVEODUyXHVERDYyXHU3RkREXHU3QjI3XHVEODQyXHVEQzJDXHVEODU2XHVERUU5XHVEODU3XHVERDQzXHU3QjBDXHVEODU3XHVERTBFXHU5OUU2XHU4NjQ1XHU5QTYzXHU2QTFDXHVEODREXHVEQzNGXHUzOUUyXHVEODUyXHVEREY3XHVEODU5XHVEREFEXHU5QTFGXHVEODU5XHVEREEwXHU4NDgwXHVEODVDXHVERDI3XHVEODVCXHVEQ0QxXHU0NEVBXHU4MTM3XHU0NDAyXHU4MEM2XHU4MTA5XHU4MTQyXHVEODU5XHVERkI0XHU5OEMzXHVEODVBXHVERTQyXHU4MjYyXHU4MjY1XHVEODVBXHVERTUxXHU4NDUzXHVEODVCXHVEREE3XHU4NjEwXHVEODVDXHVERTFCXHU1QTg2XHU0MTdGXHVEODQ2XHVEQzQwXHU1QjJCXHVEODQ2XHVEQ0ExXHU1QUU0XHVEODQ2XHVEQ0Q4XHU4NkEwXHVEODdFXHVEREJDXHVEODRGXHVERDhGXHU4ODJEXHVEODVEXHVEQzIyXHU1QTAyXCJdLFxuW1wiOTVhMVwiLFwiXHU4ODZFXHU0RjQ1XHU4ODg3XHU4OEJGXHU4OEU2XHU4OTY1XHU4OTREXHVEODU1XHVERTgzXHU4OTU0XHVEODVEXHVERjg1XHVEODVEXHVERjg0XHVEODYyXHVERkY1XHVEODYyXHVERkQ5XHVEODYyXHVERjlDXHVEODYyXHVEREY5XHUzRUFEXHU4NEEzXHU0NkY1XHU0NkNGXHUzN0YyXHU4QTNEXHU4QTFDXHVEODY1XHVEQzQ4XHU1RjREXHU5MjJCXHVEODUwXHVERTg0XHU2NUQ0XHU3MTI5XHU3MEM0XHVEODQ2XHVEQzQ1XHU5RDZEXHU4QzlGXHU4Q0U5XHVEODVGXHVERERDXHU1OTlBXHU3N0MzXHU1OUYwXHU0MzZFXHUzNkQ0XHU4RTJBXHU4RUE3XHVEODUzXHVEQzA5XHU4RjMwXHU4RjRBXHU0MkY0XHU2QzU4XHU2RkJCXHVEODQ4XHVERjIxXHU0ODlCXHU2Rjc5XHU2RThCXHVEODQ1XHVERkRBXHU5QkU5XHUzNkI1XHVEODUyXHVERDJGXHU5MEJCXHU5MDk3XHU1NTcxXHU0OTA2XHU5MUJCXHU5NDA0XHVEODYyXHVERTRCXHU0MDYyXHVEODYyXHVERUZDXHU5NDI3XHVEODYzXHVEQzFEXHVEODYzXHVEQzNCXHU4NEU1XHU4QTJCXHU5NTk5XHU5NUE3XHU5NTk3XHU5NTk2XHVEODYzXHVERDM0XHU3NDQ1XHUzRUMyXHVEODUyXHVEQ0ZGXHVEODUyXHVERTQyXHVEODUwXHVERkVBXHUzRUU3XHVEODRDXHVERTI1XHU5NjhGXHVEODYzXHVERUU3XHVEODYzXHVERTY2XHVEODYzXHVERTY1XHUzRUNDXHVEODUyXHVEREVEXHVEODUyXHVERTc4XHVEODRGXHVERkVFXHU3NDEyXHU3NDZCXHUzRUZDXHU5NzQxXHVEODY0XHVEQ0IwXCJdLFxuW1wiOTY0MFwiLFwiXHU2ODQ3XHU0QTFEXHVEODY0XHVEQzkzXHVEODU1XHVERkRGXHU5NzVEXHU5MzY4XHVEODYyXHVERDg5XHVEODYzXHVEQzI2XHVEODYyXHVERjJGXHVEODU4XHVERkJFXHU5MkJBXHU1QjExXHU4QjY5XHU0OTNDXHU3M0Y5XHVEODUwXHVERTFCXHU5NzlCXHU5NzcxXHU5OTM4XHVEODQzXHVERjI2XHU1REMxXHVEODYyXHVERkM1XHVEODUyXHVERUIyXHU5ODFGXHVEODY1XHVEQ0RBXHU5MkY2XHVEODY1XHVEREQ3XHU5MUU1XHU0NEMwXHVEODYyXHVERjUwXHVEODUyXHVERTY3XHVEODYyXHVERjY0XHU5OERDXHVEODYyXHVERTQ1XHUzRjAwXHU5MjJBXHU0OTI1XHU4NDE0XHU5OTNCXHU5OTREXHVEODVFXHVERjA2XHUzREZEXHU5OTlCXHU0QjZGXHU5OUFBXHU5QTVDXHVEODYyXHVERjY1XHVEODU2XHVEQ0M4XHU2QThGXHU5QTIxXHU1QUZFXHU5QTJGXHVEODY2XHVEQ0YxXHU0QjkwXHVEODY2XHVERDQ4XHU5OUJDXHU0QkJEXHU0Qjk3XHU5MzdEXHU1ODcyXHVEODQ0XHVERjAyXHU1ODIyXHVEODUyXHVEREI4XCJdLFxuW1wiOTZhMVwiLFwiXHVEODQ1XHVEQ0U4XHU3ODQ0XHVEODQ5XHVERjFGXHVEODRGXHVEREI4XHU2OEM1XHUzRDdEXHU5NDU4XHUzOTI3XHU2MTUwXHVEODQ5XHVERjgxXHVEODRBXHVERDZCXHU2MTA3XHU5QzRGXHU5QzUzXHU5QzdCXHU5QzM1XHU5QzEwXHU5QjdGXHU5QkNGXHVEODY3XHVERTJEXHU5QjlGXHVEODY4XHVEREY1XHVEODY4XHVEQ0ZFXHU5RDIxXHU0Q0FFXHVEODUwXHVERDA0XHU5RTE4XHU0Q0IwXHU5RDBDXHVEODY4XHVEREI0XHVEODY4XHVEQ0VEXHVEODY4XHVEQ0YzXHVEODY2XHVERDJGXHU5REE1XHU4NEJEXHVEODVCXHVERTEyXHVEODVCXHVERkRGXHVEODVBXHVERjgyXHU4NUZDXHU0NTMzXHVEODVCXHVEREE0XHVEODVCXHVERTg0XHVEODVCXHVEREYwXHU4NDIwXHU4NUVFXHVEODVCXHVERTAwXHVEODREXHVERkQ3XHVEODU4XHVEQzY0XHU3OUUyXHVEODREXHVERDlDXHVEODREXHVERTQwXHU0OTJEXHVEODUyXHVERERFXHUzRDYyXHU5M0RCXHU5MkJFXHU5MzQ4XHVEODQwXHVERUJGXHU3OEI5XHU5Mjc3XHU5NDREXHU0RkU0XHUzNDQwXHU5MDY0XHVEODU1XHVERDVEXHU3ODNEXHU3ODU0XHU3OEI2XHU3ODRCXHVEODQ1XHVERjU3XHVEODRDXHVEREM5XHVEODUyXHVERDQxXHUzNjlBXHU0RjcyXHU2RkRBXHU2RkQ5XHU3MDFFXHU3MDFFXHU1NDE0XHVEODUwXHVEREI1XHU1N0JCXHU1OEYzXHU1NzhBXHU5RDE2XHU1N0Q3XHU3MTM0XHUzNEFGXHVEODUwXHVEREFDXHU3MUVCXHVEODVCXHVEQzQwXHVEODUzXHVERjk3XHU1QjI4XHVEODQ1XHVERkI1XHVEODYyXHVERTQ5XCJdLFxuW1wiOTc0MFwiLFwiXHU2MTBDXHU1QUNFXHU1QTBCXHU0MkJDXHVEODUxXHVEQzg4XHUzNzJDXHU0QjdCXHVEODYyXHVEREZDXHU5M0JCXHU5M0I4XHVEODQ2XHVEQ0Q2XHVEODQzXHVERjFEXHU4NDcyXHVEODVCXHVEQ0MwXHVEODQ1XHVEQzEzXHVEODUwXHVERUZBXHVEODRCXHVEQzI2XHVEODUwXHVERkMxXHU1OTk0XHVEODRGXHVEREI3XHVEODU5XHVERjQxXHU3REE4XHVEODU4XHVERDVCXHVEODU4XHVEQ0E0XHVEODUyXHVEREI5XHVEODUyXHVERDhCXHVEODYyXHVEREZBXHU5MkU1XHU3M0UyXHUzRUU5XHU3NEI0XHVEODYyXHVERjYzXHVEODQ2XHVEQzlGXHUzRUUxXHVEODUyXHVERUIzXHU2QUQ4XHU3M0YzXHU3M0ZCXHUzRUQ2XHVEODUyXHVERTNFXHVEODUyXHVERTk0XHVEODQ1XHVERkQ5XHVEODUyXHVERTY2XHVEODQwXHVERkE3XHVEODQ1XHVEQzI0XHVEODUyXHVEREU1XHU3NDQ4XHVEODUyXHVERDE2XHU3MEE1XHVEODUyXHVERDc2XHU5Mjg0XHU3M0U2XHU5MzVGXHVEODQxXHVEQ0ZFXHU5MzMxXHVEODYyXHVERUNFXHVEODYyXHVERTE2XHU5Mzg2XHVEODYyXHVERkU3XHVEODU1XHVEREQ1XHU0OTM1XHVEODYyXHVERTgyXHU3MTZCXCJdLFxuW1wiOTdhMVwiLFwiXHVEODUyXHVERDQzXHVEODQzXHVEQ0ZGXHU1NkE0XHVEODQxXHVERTFBXHVEODQyXHVERkVCXHVEODQzXHVEQ0I4XHU1NTAyXHU3OUM0XHVEODQ1XHVERkZBXHU3REZFXHVEODQ1XHVERUMyXHVEODUyXHVERTUwXHVEODQ2XHVEQzUyXHU0NTJFXHU5NDAxXHUzNzBBXHVEODYyXHVERUMwXHVEODUyXHVEREFEXHU1OUIwXHVEODQ2XHVEQ0JGXHVEODQ2XHVEQzgzXHVEODVEXHVEQzg0XHU1QUExXHUzNkUyXHVEODRGXHVERDVCXHUzNkIwXHU5MjVGXHU1QTc5XHVEODYyXHVERTgxXHVEODQ2XHVEQzYyXHU5Mzc0XHUzQ0NEXHVEODQyXHVERUI0XHU0QTk2XHUzOThBXHU1MEY0XHUzRDY5XHUzRDRDXHVEODQ0XHVERjlDXHU3MTc1XHU0MkZCXHVEODYwXHVERTE4XHU2RTBGXHVEODY0XHVEQ0U0XHU0NEVCXHU2RDU3XHVEODVGXHVERTRGXHU3MDY3XHU2Q0FGXHUzQ0Q2XHVEODRGXHVERkVEXHVEODRGXHVERTJEXHU2RTAyXHU2RjBDXHUzRDZGXHVEODQwXHVERkY1XHU3NTUxXHUzNkJDXHUzNEM4XHU0NjgwXHUzRURBXHU0ODcxXHU1OUM0XHU5MjZFXHU0OTNFXHU4RjQxXHVEODYzXHVEQzFDXHVEODVBXHVERkMwXHU1ODEyXHU1N0M4XHUzNkQ2XHVEODQ1XHVEQzUyXHU3MEZFXHVEODUwXHVERjYyXHVEODUyXHVERTcxXHVEODRCXHVERkUzXHVEODQ0XHVERUIwXHVEODQ4XHVERkJEXHU2OEI5XHU2OTY3XHVEODQ0XHVERjk4XHVEODREXHVEQ0U1XHVEODVFXHVERkY0XHVEODREXHVERURGXHVEODYyXHVERTgzXHVEODREXHVERkQ2XHVEODRDXHVERkZBXHVEODUzXHVEQzlGXHU2QTFBXHVEODREXHVERUFEXHVEODVCXHVEQ0I3XHU4NDNFXHU0NERGXHU0NENFXCJdLFxuW1wiOTg0MFwiLFwiXHVEODVCXHVERDI2XHVEODVCXHVERDUxXHVEODVCXHVEQzgyXHVEODVCXHVERkRFXHU2RjE3XHVEODVDXHVERDA5XHU4MzNEXHVEODQ1XHVERjNBXHU4M0VEXHVEODVCXHVEQzgwXHVEODVDXHVEQzUzXHVEODQ1XHVERkRCXHU1OTg5XHU1QTgyXHVEODQ1XHVERkIzXHU1QTYxXHU1QTcxXHVEODQ2XHVERDA1XHVEODUwXHVEREZDXHUzNzJEXHU1OUVGXHVEODQ1XHVERjNDXHUzNkM3XHU3MThFXHU5MzkwXHU2NjlBXHVEODUwXHVERUE1XHU1QTZFXHU1QTJCXHVEODUwXHVERTkzXHU2QTJCXHVEODRGXHVERUY5XHVEODVEXHVERjM2XHVEODUxXHVEQzVCXHVEODUwXHVERUNBXHU3MTFEXHVEODUwXHVERTU5XHVEODYyXHVEREUxXHU0RkIwXHVEODVCXHVERDI4XHU1Q0MyXHVEODUxXHVEQ0NFXHVEODVGXHVERTREXHVEODUwXHVERkJEXHU2QTBDXHVEODUwXHVERTU2XHVEODQ0XHVERjA0XHU3MEE2XHU3MTMzXHVEODUwXHVERkU5XHUzREE1XHU2Q0RGXHVEODdFXHVEQzI1XHVEODUyXHVERTRGXHU3RTY1XHU1OUVCXHU1RDJGXHUzREYzXHU1RjVDXHVEODUyXHVERTVEXHVEODQ1XHVERkRGXHU3REE0XHU4NDI2XCJdLFxuW1wiOThhMVwiLFwiXHU1NDg1XHVEODRFXHVERUZBXHVEODRDXHVERjAwXHVEODQwXHVERTE0XHU1NzdFXHVEODQyXHVEQ0Q1XHVEODQxXHVERTE5XHUzRkU1XHVEODQ3XHVERjlFXHVEODY4XHVERUI2XHU3MDAzXHVEODY0XHVERDVCXHU1RDcwXHU3MzhGXHU3Q0QzXHVEODYyXHVERTU5XHVEODY1XHVEQzIwXHU0RkM4XHU3RkU3XHU3MkNEXHU3MzEwXHVEODVFXHVERUY0XHU3MzM4XHU3MzM5XHVEODU1XHVERUY2XHU3MzQxXHU3MzQ4XHUzRUE5XHVEODVFXHVERjE4XHU5MDZDXHU3MUY1XHVEODUyXHVEQ0YyXHU3M0UxXHU4MUY2XHUzRUNBXHU3NzBDXHUzRUQxXHU2Q0EyXHU1NkZEXHU3NDE5XHU3NDFFXHU3NDFGXHUzRUUyXHUzRUYwXHUzRUY0XHUzRUZBXHU3NEQzXHUzRjBFXHUzRjUzXHU3NTQyXHU3NTZEXHU3NTcyXHU3NThEXHUzRjdDXHU3NUM4XHU3NURDXHUzRkMwXHU3NjREXHUzRkQ3XHU3Njc0XHUzRkRDXHU3NjdBXHVEODUzXHVERjVDXHU3MTg4XHU1NjIzXHU4OTgwXHU1ODY5XHU0MDFEXHU3NzQzXHU0MDM5XHU2NzYxXHU0MDQ1XHUzNURCXHU3Nzk4XHU0MDZBXHU0MDZGXHU1QzVFXHU3N0JFXHU3N0NCXHU1OEYyXHU3ODE4XHU3MEI5XHU3ODFDXHU0MEE4XHU3ODM5XHU3ODQ3XHU3ODUxXHU3ODY2XHU4NDQ4XHVEODU1XHVERDM1XHU3OTMzXHU2ODAzXHU3OTMyXHU0MTAzXCJdLFxuW1wiOTk0MFwiLFwiXHU0MTA5XHU3OTkxXHU3OTk5XHU4RkJCXHU3QTA2XHU4RkJDXHU0MTY3XHU3QTkxXHU0MUIyXHU3QUJDXHU4Mjc5XHU0MUM0XHU3QUNGXHU3QURCXHU0MUNGXHU0RTIxXHU3QjYyXHU3QjZDXHU3QjdCXHU3QzEyXHU3QzFCXHU0MjYwXHU0MjdBXHU3QzdCXHU3QzlDXHU0MjhDXHU3Q0I4XHU0Mjk0XHU3Q0VEXHU4RjkzXHU3MEMwXHVEODQzXHVEQ0NGXHU3RENGXHU3REQ0XHU3REQwXHU3REZEXHU3RkFFXHU3RkI0XHU3MjlGXHU0Mzk3XHU4MDIwXHU4MDI1XHU3QjM5XHU4MDJFXHU4MDMxXHU4MDU0XHUzRENDXHU1N0I0XHU3MEEwXHU4MEI3XHU4MEU5XHU0M0VEXHU4MTBDXHU3MzJBXHU4MTBFXHU4MTEyXHU3NTYwXHU4MTE0XHU0NDAxXHUzQjM5XHU4MTU2XHU4MTU5XHU4MTVBXCJdLFxuW1wiOTlhMVwiLFwiXHU0NDEzXHU1ODNBXHU4MTdDXHU4MTg0XHU0NDI1XHU4MTkzXHU0NDJEXHU4MUE1XHU1N0VGXHU4MUMxXHU4MUU0XHU4MjU0XHU0NDhGXHU4MkE2XHU4Mjc2XHU4MkNBXHU4MkQ4XHU4MkZGXHU0NEIwXHU4MzU3XHU5NjY5XHU2OThBXHU4NDA1XHU3MEY1XHU4NDY0XHU2MEUzXHU4NDg4XHU0NTA0XHU4NEJFXHU4NEUxXHU4NEY4XHU4NTEwXHU4NTM4XHU4NTUyXHU0NTNCXHU4NTZGXHU4NTcwXHU4NUUwXHU0NTc3XHU4NjcyXHU4NjkyXHU4NkIyXHU4NkVGXHU5NjQ1XHU4NzhCXHU0NjA2XHU0NjE3XHU4OEFFXHU4OEZGXHU4OTI0XHU4OTQ3XHU4OTkxXHVEODVFXHVERDY3XHU4QTI5XHU4QTM4XHU4QTk0XHU4QUI0XHU4QzUxXHU4Q0Q0XHU4Q0YyXHU4RDFDXHU0Nzk4XHU1ODVGXHU4REMzXHU0N0VEXHU0RUVFXHU4RTNBXHU1NUQ4XHU1NzU0XHU4RTcxXHU1NUY1XHU4RUIwXHU0ODM3XHU4RUNFXHU4RUUyXHU4RUU0XHU4RUVEXHU4RUYyXHU4RkI3XHU4RkMxXHU4RkNBXHU4RkNDXHU5MDMzXHU5OUM0XHU0OEFEXHU5OEUwXHU5MjEzXHU0OTFFXHU5MjI4XHU5MjU4XHU5MjZCXHU5MkIxXHU5MkFFXHU5MkJGXCJdLFxuW1wiOWE0MFwiLFwiXHU5MkUzXHU5MkVCXHU5MkYzXHU5MkY0XHU5MkZEXHU5MzQzXHU5Mzg0XHU5M0FEXHU0OTQ1XHU0OTUxXHU5RUJGXHU5NDE3XHU1MzAxXHU5NDFEXHU5NDJEXHU5NDNFXHU0OTZBXHU5NDU0XHU5NDc5XHU5NTJEXHU5NUEyXHU0OUE3XHU5NUY0XHU5NjMzXHU0OUU1XHU2N0EwXHU0QTI0XHU5NzQwXHU0QTM1XHU5N0IyXHU5N0MyXHU1NjU0XHU0QUU0XHU2MEU4XHU5OEI5XHU0QjE5XHU5OEYxXHU1ODQ0XHU5OTBFXHU5OTE5XHU1MUI0XHU5OTFDXHU5OTM3XHU5OTQyXHU5OTVEXHU5OTYyXHU0QjcwXHU5OUM1XHU0QjlEXHU5QTNDXHU5QjBGXHU3QTgzXHU5QjY5XHU5QjgxXHU5QkREXHU5QkYxXHU5QkY0XHU0QzZEXHU5QzIwXHUzNzZGXHVEODQ2XHVERkMyXHU5RDQ5XHU5QzNBXCJdLFxuW1wiOWFhMVwiLFwiXHU5RUZFXHU1NjUwXHU5RDkzXHU5REJEXHU5REMwXHU5REZDXHU5NEY2XHU4RkI2XHU5RTdCXHU5RUFDXHU5RUIxXHU5RUJEXHU5RUM2XHU5NERDXHU5RUUyXHU5RUYxXHU5RUY4XHU3QUM4XHU5RjQ0XHVEODQwXHVEQzk0XHVEODQwXHVERUI3XHVEODQwXHVERkEwXHU2OTFBXHU5NEMzXHU1OUFDXHVEODQxXHVEQ0Q3XHU1ODQwXHU5NEMxXHUzN0I5XHVEODQxXHVEREQ1XHVEODQxXHVERTE1XHVEODQxXHVERTc2XHVEODQ1XHVERUJBXHU1NzU3XHU3MTczXHVEODQyXHVERUMyXHVEODQyXHVERUNEXHVEODQyXHVERkJGXHU1NDZBXHVEODdFXHVEQzNCXHVEODQyXHVERkNCXHU1NDlFXHVEODQyXHVERkZCXHVEODQzXHVEQzNCXHVEODQzXHVEQzUzXHVEODQzXHVEQzY1XHVEODQzXHVEQzdDXHU2MEU3XHVEODQzXHVEQzhEXHU1NjdBXHVEODQzXHVEQ0I1XHVEODQzXHVEQ0REXHVEODQzXHVEQ0VEXHVEODQzXHVERDZGXHVEODQzXHVEREIyXHVEODQzXHVEREM4XHU2OTU1XHU5QzJGXHU4N0E1XHVEODQzXHVERTA0XHVEODQzXHVERTBFXHVEODQzXHVERUQ3XHVEODQzXHVERjkwXHVEODQzXHVERjJEXHVEODQzXHVERTczXHU1QzIwXHVEODQzXHVERkJDXHU1RTBCXHVEODQ0XHVEQzVDXHVEODQ0XHVEQzRGXHVEODQ0XHVEQzc2XHU2NzFFXHVEODQ0XHVEQzdCXHVEODQ0XHVEQzg4XHVEODQ0XHVEQzk2XHUzNjQ3XHVEODQ0XHVEQ0JGXHVEODQ0XHVEQ0QzXHVEODQ0XHVERDJGXHVEODQ0XHVERDNCXHU1MzY0XHU4NEFEXHVEODQ0XHVERUUzXHVEODQ0XHVERjc1XHVEODQ0XHVERjM2XHU4QjgxXHVEODQ1XHVERDc3XHVEODQ1XHVERTE5XHVEODQ1XHVERkMzXHVEODQ1XHVERkM3XHU0RTc4XHU3MEJCXHVEODQ2XHVEQzJEXHVEODQ2XHVERDZBXCJdLFxuW1wiOWI0MFwiLFwiXHVEODQ2XHVERTJEXHVEODQ2XHVERTQ1XHVEODQ3XHVEQzJBXHVEODQ3XHVEQzcwXHVEODQ3XHVEQ0FDXHVEODQ3XHVERUM4XHU2MkMzXHVEODQ3XHVERUQ1XHVEODQ3XHVERjE1XHU3MTk4XHU2ODU1XHVEODQ4XHVEQzQ1XHU2OUU5XHUzNkM4XHVEODQ4XHVERTdDXHVEODQ4XHVERkQ3XHVEODQ4XHVERkZBXHVEODQ5XHVERjJBXHVEODRBXHVEQzcxXHVEODRBXHVERDRGXHU4MkZEXHVEODRBXHVERDY3XHVEODRBXHVERDkzXHVEODRBXHVERUQ1XHU4OUE1XHVEODRBXHVERUU4XHU4RkEwXHVEODRBXHVERjBFXHU5N0I4XHVEODRBXHVERjNGXHU5ODQ3XHU5QUJEXHVEODRCXHVEQzRDXCJdLFxuW1wiOWI2MlwiLFwiXHVEODRCXHVEQzg4XHVEODRCXHVEQ0I3XHVEODU2XHVERkU4XHVEODRCXHVERDA4XHVEODRCXHVERDEyXHVEODRCXHVEREI3XHVEODRCXHVERDk1XHVEODRCXHVERTQyXHVEODRCXHVERjc0XHVEODRCXHVERkNDXHVEODRDXHVEQzMzXHVEODRDXHVEQzY2XHVEODRDXHVERjFGXHVEODRDXHVERkRFXHU1RkIxXHU2NjQ4XHU2NkJGXHVEODVFXHVERTc5XHVEODREXHVERDY3XHVEODREXHVEREYzXHU3MjAxXHVEODUyXHVEREJBXHU3N0Q3XHVEODREXHVERTFBXHVEODREXHVERjE2XHU3RTg3XHVEODQwXHVERjQ2XHU1OEI1XHU2NzBFXCJdLFxuW1wiOWJhMVwiLFwiXHU2OTE4XHVEODRFXHVERUE3XHVEODVEXHVERTU3XHVEODU3XHVERkUyXHVEODRGXHVERTExXHVEODRGXHVERUI5XHVEODVEXHVEREZFXHVEODQ4XHVEQzlBXHU0OEQwXHU0QUI4XHVEODUwXHVERDE5XHVEODYyXHVERTlBXHVEODUwXHVERUVFXHVEODUwXHVERjBEXHVEODUwXHVEQzNCXHVEODUwXHVERjM0XHVEODUwXHVERjk2XHVEODUyXHVERTQ1XHVEODQxXHVERENBXHU1MUQyXHVEODQxXHVERTExXHU1OTlGXHVEODQ3XHVERUE4XHUzQkJFXHVEODRGXHVEQ0ZGXHVEODUxXHVEQzA0XHVEODUxXHVEQ0Q2XHU1Nzg4XHVEODUxXHVERTc0XHUzOTlCXHVEODUxXHVERjJGXHVEODYxXHVEREU4XHVEODY2XHVEREM5XHUzNzYyXHVEODQ4XHVEREMzXHU4QjVFXHVEODYyXHVERjRFXHU5OUQ2XHVEODUyXHVEQzEyXHVEODUyXHVEQ0ZCXHVEODUyXHVERTE1XHU3MjA5XHVEODUyXHVERUMwXHVEODQzXHVEQzc4XHU1OTY1XHVEODUzXHVERUE1XHVEODUzXHVERjg2XHVEODQxXHVERjc5XHU4RURBXHVEODU0XHVEQzJDXHU1MjhGXHU1NzNGXHU3MTcxXHVEODU0XHVERTk5XHVEODU1XHVEQzE5XHVEODRGXHVERjRBXHVEODUyXHVERUE3XHU1NUJDXHVEODU1XHVEQzQ2XHVEODU1XHVEQzZFXHVEODVBXHVERjUyXHU5MUQ0XHUzNDczXHVEODU1XHVERDNGXHVEODVEXHVERTMyXHVEODU1XHVERDVFXHU0NzE4XHVEODU1XHVERDYyXHVEODU1XHVERDY2XHVEODU1XHVERkM3XHVEODUyXHVERDNGXHVEODU2XHVEQzVEXHU1MDY2XHUzNEZCXHVEODRDXHVERkNDXHU2MERFXHVEODU2XHVERDAzXHU0NzdDXHVEODYyXHVERDQ4XHVEODU2XHVERUFFXHVEODU2XHVERjg5XHVEODU3XHVEQzA2XHVEODQ3XHVERDkwXHU1N0ExXHU3MTUxXHU2RkI2XHVEODU4XHVERDAyXHVEODVGXHVEQzEyXHU5MDU2XHVEODU4XHVEREIyXHVEODUzXHVERjlBXHU4QjYyXHVEODU5XHVEQzAyXHVEODU5XHVEQzRBXCJdLFxuW1wiOWM0MFwiLFwiXHU1RDVCXHVEODVBXHVERkY3XHU4RjM2XHVEODU5XHVEQzg0XHVEODQ2XHVERDFDXHU4QUVBXHVEODUyXHVEREY2XHVEODU5XHVEQzg4XHVEODRGXHVERkVGXHVEODU5XHVERDEyXHU0QkMwXHVEODU5XHVEREJGXHVEODU5XHVERUI1XHVEODQ5XHVERjFCXHU5NDY1XHVEODU1XHVERkUxXHU2MTk1XHU1QTI3XHVEODdFXHVEQ0NEXHU0RkJCXHU1NkI5XHVEODUxXHVERDIxXHVEODU5XHVERUZDXHU0RTZBXHVEODUyXHVERDM0XHU5NjU2XHU2RDhGXHVEODVCXHVEQ0JEXHUzNjE4XHU4OTc3XHVEODU5XHVERjk5XHVEODVBXHVEQzZFXHVEODU5XHVEQzExXHVEODVBXHVEQzVFXHU3MURGXHVEODVBXHVEQ0M3XHU3QjQyXHVEODY0XHVEQ0MwXHVEODQyXHVERTExXHVEODVBXHVERDI2XHU5MTA0XHVEODVBXHVERDM5XHU3QTQ1XHU5REYwXHVEODVBXHVEREZBXHU5QTI2XHVEODVBXHVERTJEXHUzNjVGXHVEODU5XHVEQzY5XHVEODQwXHVEQzIxXHU3OTgzXHVEODVBXHVERTM0XHVEODVBXHVERjVCXHU1RDJDXHVEODREXHVERDE5XHU4M0NGXHVEODVBXHVERjlEXHU0NkQwXHVEODVCXHVEQ0E0XHU3NTNCXHU4ODY1XHVEODVCXHVEREFFXHU1OEI2XCJdLFxuW1wiOWNhMVwiLFwiXHUzNzFDXHVEODQ5XHVERDhEXHVEODVDXHVEQzRCXHVEODVDXHVERENEXHUzQzU0XHVEODVDXHVERTgwXHVEODVDXHVERTg1XHU5MjgxXHVEODQ4XHVERDdBXHVEODVDXHVERThCXHU5MzMwXHVEODVDXHVERUU2XHVEODUyXHVEREQwXHU2QzM5XHU5NDlGXHVEODVEXHVEQzUwXHVEODQzXHVERUY4XHU4ODI3XHU4OEY1XHVEODRBXHVERDI2XHVEODYxXHVEQzczXHVEODQ1XHVERkIxXHU2RUI4XHVEODUyXHVERTJBXHVEODQ2XHVEQzIwXHUzOUE0XHUzNkI5XHU1QzEwXHU3OUUzXHU0NTNGXHU2NkI2XHVEODY3XHVEQ0FEXHVEODY2XHVEQ0E0XHU4OTQzXHVEODVEXHVERkNDXHVEODVFXHVEQzU4XHU1NkQ2XHU0MERGXHVEODQ1XHVERTBBXHUzOUExXHVEODREXHVERjJGXHVEODYwXHVEQ0U4XHVEODQ0XHVERkM1XHU3MUFEXHU4MzY2XHVEODVFXHVEREREXHVEODY0XHVEREE4XHU1QTY3XHU0Q0I3XHVEODVDXHVEQ0FGXHVEODYyXHVEREFCXHVEODVFXHVEREZEXHVEODVFXHVERTBBXHVEODVFXHVERjBCXHVEODVGXHVERDY2XHVEODUwXHVERDdBXHU3QjQzXHU3OTdFXHVEODYwXHVEQzA5XHU2RkI1XHVEODY4XHVERURGXHU2QTAzXHVEODYwXHVERjE4XHU1M0EyXHVEODVCXHVERTA3XHU5M0JGXHU2ODM2XHU5NzVEXHVEODYwXHVERDZGXHVEODYwXHVEQzIzXHVEODVBXHVEREI1XHVEODQ0XHVERkVEXHVEODRDXHVERTJGXHVEODYwXHVEQzQ4XHU1RDg1XHVEODYzXHVEQzMwXHVEODYwXHVEQzgzXHU1NzE1XHU5ODIzXHVEODYyXHVERDQ5XHU1REFCXHVEODUyXHVERDg4XHU2NUJFXHU2OUQ1XHU1M0QyXHVEODUyXHVERUE1XHVEODRGXHVERjgxXHUzQzExXHU2NzM2XHVEODYwXHVEQzkwXHVEODYwXHVEQ0Y0XHVEODYwXHVERDJFXHVEODQ3XHVERkExXHVEODYwXHVERDRGXCJdLFxuW1wiOWQ0MFwiLFwiXHVEODYwXHVERDg5XHVEODYwXHVEREFGXHVEODYwXHVERTFBXHVEODYwXHVERjA2XHVEODYwXHVERjJGXHVEODYwXHVERjhBXHUzNUNBXHVEODYxXHVEQzY4XHVEODYxXHVERUFBXHU0OEZBXHU2M0U2XHVEODYyXHVERDU2XHU3ODA4XHU5MjU1XHVEODYyXHVEREI4XHU0M0YyXHVEODYyXHVEREU3XHU0M0RGXHVEODYyXHVEREU4XHVEODYyXHVERjQ2XHVEODYyXHVERkQ0XHU1OUY4XHVEODYzXHVEQzA5XHU4RjBCXHVEODYzXHVERkM1XHVEODY0XHVEQ0VDXHU3QjUxXHVEODY0XHVERDEwXHVEODY0XHVERDNDXHUzREY3XHVEODY0XHVERDVFXHVEODUyXHVERUNBXHU4RkQwXHU3MjhGXHU1NjhCXHVEODY1XHVEQ0U3XHVEODY1XHVEREU5XHVEODY1XHVEREIwXHVEODY1XHVEREI4XHVEODY1XHVERjMyXHVEODY2XHVEQ0QxXHVEODY2XHVERDQ5XHVEODY2XHVERDZBXHVEODY2XHVEREMzXHVEODY2XHVERTI4XHVEODY2XHVERjBFXHVEODY3XHVERDVBXHVEODY3XHVERDlCXHU3RTlGXHVEODY3XHVERUY4XHVEODY3XHVERjIzXHU0Q0E0XHU5NTQ3XHVEODY4XHVERTkzXHU3MUEyXHVEODY4XHVERUZGXHU0RDkxXHU5MDEyXHVEODY5XHVERENCXHU0RDlDXHVEODQzXHVEQzlDXHU4RkJFXHU1NUMxXCJdLFxuW1wiOWRhMVwiLFwiXHU4RkJBXHVEODQ5XHVEQ0IwXHU4RkI5XHVEODUyXHVERTkzXHU0NTA5XHU3RTdGXHU2RjU2XHU2QUIxXHU0RUVBXHUzNEU0XHVEODYyXHVERjJDXHVEODVFXHVEQzlEXHUzNzNBXHU4RTgwXHVEODQ1XHVERkY1XHVEODYwXHVEQzI0XHVEODYyXHVERjZDXHVEODYyXHVERjk5XHVEODVFXHVERTNFXHVEODU5XHVERUFGXHUzREVCXHVEODVEXHVERTU1XHVEODRGXHVEQ0I3XHVEODU1XHVERTM1XHVEODU2XHVERDU2XHU0RTlBXHVEODU3XHVERTgxXHVEODU4XHVERTU4XHU1NkJGXHVEODQzXHVERTZEXHU4RTBFXHU1QjZEXHVEODRGXHVERTg4XHVEODUzXHVEQzlFXHU2M0RFXHU2MkQwXHVEODQ1XHVERkY2XHVEODQ2XHVEQzdCXHU2NTMwXHU1NjJEXHVEODU3XHVEQzRBXHU1NDFBXHVEODU0XHVERjExXHUzREM2XHVEODY3XHVERDk4XHU0QzdEXHU1NjIyXHU1NjFFXHU3RjQ5XHVEODU3XHVERUQ4XHU1OTc1XHVEODRGXHVERDQwXHU4NzcwXHU0RTFDXHVEODQzXHVERkVBXHVEODQzXHVERDQ5XHVEODREXHVERUJBXHU4MTE3XHU5RDVFXHU4RDE4XHU3NjNCXHU5QzQ1XHU3NjRFXHU3N0I5XHU5MzQ1XHU1NDMyXHU4MTQ4XHU4MkY3XHU1NjI1XHU4MTMyXHU4NDE4XHU4MEJEXHU1NUVBXHU3OTYyXHU1NjQzXHU1NDE2XHVEODQzXHVERTlEXHUzNUNFXHU1NjA1XHU1NUYxXHU2NkYxXHVEODYwXHVERUUyXHUzNjJEXHU3NTM0XHU1NUYwXHU1NUJBXHU1NDk3XHU1NTcyXHVEODQzXHVEQzQxXHVEODQzXHVEQzk2XHU1RUQwXHVEODU0XHVERDQ4XHVEODQzXHVERTc2XHVEODRCXHVEQzYyXCJdLFxuW1wiOWU0MFwiLFwiXHVEODQzXHVERUEyXHU5RUFCXHU3RDVBXHU1NURFXHVEODQ0XHVEQzc1XHU2MjlEXHU5NzZEXHU1NDk0XHU4Q0NEXHU3MUY2XHU5MTc2XHU2M0ZDXHU2M0I5XHU2M0ZFXHU1NTY5XHVEODRBXHVERjQzXHU5QzcyXHVEODRCXHVERUIzXHU1MTlBXHUzNERGXHVEODQzXHVEREE3XHU1MUE3XHU1NDREXHU1NTFFXHU1NTEzXHU3NjY2XHU4RTJEXHVEODVBXHVEQzhBXHU3NUIxXHU4MEI2XHU4ODA0XHU4Nzg2XHU4OEM3XHU4MUI2XHU4NDFDXHVEODQ0XHVEQ0MxXHU0NEVDXHU3MzA0XHVEODUxXHVERjA2XHU1QjkwXHU4MzBCXHVEODVBXHVEQzkzXHU1NjdCXHVEODQ5XHVERUY0XHVEODVGXHVERDJGXHVEODUwXHVEREEzXHVEODVGXHVERDczXHVEODVCXHVERUQwXHVEODVDXHVERUI2XHU5MTcwXHVEODQ0XHVEREQ5XHU5MjA4XHVEODRGXHVEQ0ZDXHVEODY5XHVERUE5XHVEODQzXHVERUFDXHVEODQzXHVERUY5XHU3MjY2XHVEODQ3XHVEQ0EyXHU0NzRFXHVEODUzXHVERkMyXHVEODVGXHVERkY5XHVEODQzXHVERkVCXHU0MEZBXCJdLFxuW1wiOWVhMVwiLFwiXHU5QzVEXHU2NTFGXHVEODRCXHVEREEwXHU0OEYzXHVEODUxXHVERkUwXHVEODY3XHVERDdDXHVEODQzXHVERkVDXHVEODQzXHVERTBBXHU2MDYyXHVEODVEXHVEREEzXHVEODQzXHVERkVEXCJdLFxuW1wiOWVhZFwiLFwiXHVEODU4XHVEQzQ4XHVEODQ0XHVERDg3XHU3MUEzXHU3RThFXHU5RDUwXHU0RTFBXHU0RTA0XHUzNTc3XHU1QjBEXHU2Q0IyXHU1MzY3XHUzNkFDXHUzOURDXHU1MzdEXHUzNkE1XHVEODUxXHVERTE4XHU1ODlBXHVEODUyXHVERjZFXHU4MjJEXHU1NDRCXHU1N0FBXHVEODU2XHVERTk1XHVEODQyXHVERDc5XCJdLFxuW1wiOWVjNVwiLFwiXHUzQTUyXHVEODQ5XHVEQzY1XHU3Mzc0XHVEODY3XHVERUFDXHU0RDA5XHU5QkVEXHVEODRGXHVEQ0ZFXHVEODY3XHVERjMwXHU0QzVCXHVEODUzXHVERkE5XHVEODY1XHVERDlFXHVEODY3XHVERkRFXHU4NDVDXHVEODRGXHVEREI2XHVEODVDXHVERUIyXHVEODU5XHVERkIzXHVEODREXHVERjIwXHU2MzJFXHU3RDI1XHVEODRGXHVERUY3XHVEODRGXHVERTJDXHUzQTJBXHU5MDA4XHU1MkNDXHUzRTc0XHUzNjdBXHU0NUU5XHVEODQxXHVEQzhFXHU3NjQwXHU1QUYwXHVEODQzXHVERUI2XHU3ODdBXHVEODVGXHVERjJFXHU1OEE3XHU0MEJGXHU1NjdDXHU5QjhCXHU1RDc0XHU3NjU0XHVEODY5XHVEQzM0XHU5RTg1XHU0Q0UxXHU3NUY5XHUzN0ZCXHU2MTE5XHVEODRDXHVEQ0RBXHVEODUwXHVERkYyXCJdLFxuW1wiOWVmNVwiLFwiXHU1NjVEXHVEODQ0XHVERUE5XHU1N0E3XHVEODUyXHVERDYzXHVEODY3XHVERTA2XHU1MjM0XHVEODVDXHVEQ0FFXHUzNUFEXHU2QzRBXHU5RDdDXCJdLFxuW1wiOWY0MFwiLFwiXHU3QzU2XHU5QjM5XHU1N0RFXHVEODQ1XHVERjZDXHU1QzUzXHU2NEQzXHVEODY1XHVEQ0QwXHVEODU4XHVERjM1XHVEODVDXHVERDY0XHU4NkFEXHVEODQzXHVERDI4XHVEODVCXHVERDIyXHVEODUyXHVERUUyXHVEODQzXHVERDcxXCJdLFxuW1wiOWY0ZlwiLFwiXHU1MUZFXHVEODQ3XHVERjBGXHU1RDhFXHU5NzAzXHVEODQ3XHVEREQxXHU5RTgxXHU5MDRDXHU3QjFGXHU5QjAyXHU1Q0QxXHU3QkEzXHU2MjY4XHU2MzM1XHU5QUZGXHU3QkNGXHU5QjJBXHU3QzdFXHU5QjJFXHU3QzQyXHU3Qzg2XHU5QzE1XHU3QkZDXHU5QjA5XHU5RjE3XHU5QzFCXHVEODUyXHVERDNFXHU5RjVBXHU1NTczXHU1QkMzXHU0RkZEXHU5RTk4XHU0RkYyXHU1MjYwXHUzRTA2XHU1MkQxXHU1NzY3XHU1MDU2XHU1OUI3XHU1RTEyXHU5N0M4XHU5REFCXHU4RjVDXHU1NDY5XHU5N0I0XHU5OTQwXHU5N0JBXHU1MzJDXHU2MTMwXCJdLFxuW1wiOWZhMVwiLFwiXHU2OTJDXHU1M0RBXHU5QzBBXHU5RDAyXHU0QzNCXHU5NjQxXHU2OTgwXHU1MEE2XHU3NTQ2XHVEODQ1XHVERjZEXHU5OURBXHU1MjczXCJdLFxuW1wiOWZhZVwiLFwiXHU5MTU5XHU5NjgxXHU5MTVDXCJdLFxuW1wiOWZiMlwiLFwiXHU5MTUxXHVEODYzXHVERTk3XHU2MzdGXHVEODVCXHVERDIzXHU2QUNBXHU1NjExXHU5MThFXHU3NTdBXHU2Mjg1XHVEODQwXHVERkZDXHU3MzRGXHU3QzcwXHVEODU3XHVEQzIxXHVEODRGXHVEQ0ZEXCJdLFxuW1wiOWZjMVwiLFwiXHVEODUyXHVERDE5XHU3NkQ2XHU5QjlEXHU0RTJBXHVEODQzXHVEQ0Q0XHU4M0JFXHU4ODQyXCJdLFxuW1wiOWZjOVwiLFwiXHU1QzRBXHU2OUMwXHU1MEVEXHU1NzdBXHU1MjFGXHU1REY1XHU0RUNFXHU2QzMxXHVEODQwXHVEREYyXHU0RjM5XHU1NDlDXHU1NERBXHU1MjlBXHU4RDgyXHUzNUZFXHU1RjBDXHUzNUYzXCJdLFxuW1wiOWZkYlwiLFwiXHU2QjUyXHU5MTdDXHU5RkE1XHU5Qjk3XHU5ODJFXHU5OEI0XHU5QUJBXHU5RUE4XHU5RTg0XHU3MTdBXHU3QjE0XCJdLFxuW1wiOWZlN1wiLFwiXHU2QkZBXHU4ODE4XHU3Rjc4XCJdLFxuW1wiOWZlYlwiLFwiXHU1NjIwXHVEODY5XHVERTRBXHU4RTc3XHU5RjUzXCJdLFxuW1wiOWZmMFwiLFwiXHU4REQ0XHU4RTRGXHU5RTFDXHU4RTAxXHU2MjgyXHVEODYwXHVERjdEXHU4RTI4XHU4RTc1XHU3QUQzXHVEODUyXHVERTc3XHU3QTNFXHU3OEQ4XHU2Q0VBXHU4QTY3XHU3NjA3XCJdLFxuW1wiYTA0MFwiLFwiXHVEODYyXHVERTVBXHU5RjI2XHU2Q0NFXHU4N0Q2XHU3NUMzXHVEODY4XHVERUIyXHU3ODUzXHVEODdFXHVEQzQwXHU4RDBDXHU3MkUyXHU3MzcxXHU4QjJEXHU3MzAyXHU3NEYxXHU4Q0VCXHVEODUyXHVERUJCXHU4NjJGXHU1RkJBXHU4OEEwXHU0NEI3XCJdLFxuW1wiYTA1NVwiLFwiXHVEODQ2XHVEQzNCXHVEODVCXHVERTA1XCJdLFxuW1wiYTA1OFwiLFwiXHU4QTdFXHVEODQ5XHVERDFCXCJdLFxuW1wiYTA1YlwiLFwiXHU2MEZEXHU3NjY3XHU5QUQ3XHU5RDQ0XHU5MzZFXHU5QjhGXHU4N0Y1XCJdLFxuW1wiYTA2M1wiLFwiXHU4ODBGXHU4Q0Y3XHU3MzJDXHU5NzIxXHU5QkIwXHUzNUQ2XHU3MkIyXHU0QzA3XHU3QzUxXHU5OTRBXHVEODU4XHVERDU5XHU2MTU5XHU0QzA0XHU5RTk2XHU2MTdEXCJdLFxuW1wiYTA3M1wiLFwiXHU1NzVGXHU2MTZGXHU2MkE2XHU2MjM5XHU2MkNFXHUzQTVDXHU2MUUyXHU1M0FBXHVEODRDXHVERkY1XHU2MzY0XHU2ODAyXHUzNUQyXCJdLFxuW1wiYTBhMVwiLFwiXHU1RDU3XHVEODYyXHVERkMyXHU4RkRBXHVEODYzXHVERTM5XCJdLFxuW1wiYTBhNlwiLFwiXHU1MEQ5XHVEODQ3XHVERDQ2XHU3OTA2XHU1MzMyXHU5NjM4XHVEODQzXHVERjNCXHU0MDY1XCJdLFxuW1wiYTBhZVwiLFwiXHU3N0ZFXCJdLFxuW1wiYTBiMFwiLFwiXHU3Q0MyXHVEODU3XHVERjFBXHU3Q0RBXHU3QTJEXHU4MDY2XHU4MDYzXHU3RDREXHU3NTA1XHU3NEYyXHU4OTk0XHU4MjFBXHU2NzBDXHU4MDYyXHVEODVEXHVEQzg2XHU4MDVCXHU3NEYwXHU4MTAzXHU3NzI0XHU4OTg5XHVEODU5XHVERkNDXHU3NTUzXHVEODVCXHVERUQxXHU4N0E5XHU4N0NFXHU4MUM4XHU4NzhDXHU4QTQ5XHU4Q0FEXHU4QjQzXHU3NzJCXHU3NEY4XHU4NERBXHUzNjM1XHU2OUIyXHU4REE2XCJdLFxuW1wiYTBkNFwiLFwiXHU4OUE5XHU3NDY4XHU2REI5XHU4N0MxXHVEODUwXHVEQzExXHU3NEU3XHUzRERCXHU3MTc2XHU2MEE0XHU2MTlDXHUzQ0QxXHU3MTYyXHU2MDc3XCJdLFxuW1wiYTBlMlwiLFwiXHU3RjcxXHVEODYyXHVERjJEXHU3MjUwXHU2MEU5XHU0QjdFXHU1MjIwXHUzQzE4XHVEODRGXHVEQ0M3XHVEODU3XHVERUQ3XHVEODVEXHVERTU2XHVEODU1XHVERDMxXHVEODQ2XHVERDQ0XHVEODQ0XHVERUZFXHVEODY2XHVERDAzXHVEODVCXHVERERDXHVEODVDXHVEQ0FEXHU1Q0MxXHVEODU4XHVEREFEXHVEODYyXHVERTBGXHVEODREXHVERTc3XHVEODQwXHVEQ0VFXHVEODVBXHVEQzQ2XHVEODUzXHVERjBFXHU0NTYyXHU1QjFGXHVEODU4XHVERjRDXHU5RjUwXHU5RUE2XHVEODU4XHVERTZCXCJdLFxuW1wiYTNjMFwiLFwiXHUyNDAwXCIsMzEsXCJcdTI0MjFcIl0sXG5bXCJjNmExXCIsXCJcdTI0NjBcIiw5LFwiXHUyNDc0XCIsOSxcIlx1MjE3MFwiLDksXCJcdTRFMzZcdTRFM0ZcdTRFODVcdTRFQTBcdTUxODJcdTUxOTZcdTUxQUJcdTUyRjlcdTUzMzhcdTUzNjlcdTUzQjZcdTU5MEFcdTVCODBcdTVEREJcdTJGMzNcdTVFN0ZcdTVFRjRcdTVGNTBcdTVGNjFcdTY1MzRcdTY1RTBcdTc1OTJcdTc2NzZcdThGQjVcdTk2QjZcdTAwQThcdTAyQzZcdTMwRkRcdTMwRkVcdTMwOURcdTMwOUVcdTMwMDNcdTRFRERcdTMwMDVcdTMwMDZcdTMwMDdcdTMwRkNcdUZGM0JcdUZGM0RcdTI3M0RcdTMwNDFcIiwyM10sXG5bXCJjNzQwXCIsXCJcdTMwNTlcIiw1OCxcIlx1MzBBMVx1MzBBMlx1MzBBM1x1MzBBNFwiXSxcbltcImM3YTFcIixcIlx1MzBBNVwiLDgxLFwiXHUwNDEwXCIsNSxcIlx1MDQwMVx1MDQxNlwiLDRdLFxuW1wiYzg0MFwiLFwiXHUwNDFCXCIsMjYsXCJcdTA0NTFcdTA0MzZcIiwyNSxcIlx1MjFFN1x1MjFCOFx1MjFCOVx1MzFDRlx1RDg0MFx1RENDQ1x1NEU1QVx1RDg0MFx1REM4QVx1NTIwMlx1NDQ5MVwiXSxcbltcImM4YTFcIixcIlx1OUZCMFx1NTE4OFx1OUZCMVx1RDg1RFx1REUwN1wiXSxcbltcImM4Y2RcIixcIlx1RkZFMlx1RkZFNFx1RkYwN1x1RkYwMlx1MzIzMVx1MjExNlx1MjEyMVx1MzA5Qlx1MzA5Q1x1MkU4MFx1MkU4NFx1MkU4Nlx1MkU4N1x1MkU4OFx1MkU4QVx1MkU4Q1x1MkU4RFx1MkU5NVx1MkU5Q1x1MkU5RFx1MkVBNVx1MkVBN1x1MkVBQVx1MkVBQ1x1MkVBRVx1MkVCNlx1MkVCQ1x1MkVCRVx1MkVDNlx1MkVDQVx1MkVDQ1x1MkVDRFx1MkVDRlx1MkVENlx1MkVEN1x1MkVERVx1MkVFM1wiXSxcbltcImM4ZjVcIixcIlx1MDI4M1x1MDI1MFx1MDI1Qlx1MDI1NFx1MDI3NVx1MDE1M1x1MDBGOFx1MDE0Qlx1MDI4QVx1MDI2QVwiXSxcbltcImY5ZmVcIixcIlx1RkZFRFwiXSxcbltcImZhNDBcIixcIlx1RDg0MVx1REQ0N1x1OTJEQlx1RDg0MVx1RERERlx1RDg0Rlx1REZDNVx1ODU0Q1x1NDJCNVx1NzNFRlx1NTFCNVx1MzY0OVx1RDg1Mlx1REQ0Mlx1RDg2Mlx1RERFNFx1OTM0NFx1RDg0Nlx1REREQlx1ODJFRVx1RDg0Rlx1RENDOFx1NzgzQ1x1Njc0NFx1NjJERlx1RDg1Mlx1REQzM1x1RDg2Mlx1RERBQVx1RDg0MFx1REVBMFx1RDg1QVx1REZCM1x1RDg0NFx1REYwNVx1NEZBQlx1RDg0OVx1RENFRFx1NTAwOFx1RDg1Qlx1REQyOVx1RDg1RVx1REU4NFx1RDg0RFx1REUwMFx1RDg1Mlx1REVCMVx1RDg0OVx1REQxM1x1NTAyOVx1RDg0MFx1REY3RVx1NUZBNFx1RDg0MFx1REY4MFx1RDg0MFx1REY0N1x1NkVEQlx1RDg0MVx1REMxRlx1NTA3RFx1NTEwMVx1MzQ3QVx1NTEwRVx1OTg2Q1x1Mzc0M1x1ODQxNlx1RDg1Mlx1RERBNFx1RDg0MVx1REM4N1x1NTE2MFx1RDg0Q1x1REZCNFx1NTE2QVx1RDg0Mlx1REZGRlx1RDg0OFx1RENGQ1x1RDg0MFx1REVFNVx1RDg0OVx1REQzMFx1RDg0MVx1REQ4RVx1RDg0Q1x1REUzM1x1RDg0Nlx1REQ4M1x1NUI4Mlx1ODc3RFx1RDg0MVx1RERCM1x1RDg0Rlx1REM5OVx1NTFCMlx1NTFCOFwiXSxcbltcImZhYTFcIixcIlx1OUQzNFx1NTFDOVx1NTFDRlx1NTFEMVx1M0NEQ1x1NTFEM1x1RDg1Mlx1REVBNlx1NTFCM1x1NTFFMlx1NTM0Mlx1NTFFRFx1ODNDRFx1NjkzRVx1RDg0RFx1REYyRFx1NUY3Qlx1NTIwQlx1NTIyNlx1NTIzQ1x1NTJCNVx1NTI1N1x1NTI5NFx1NTJCOVx1NTJDNVx1N0MxNVx1ODU0Mlx1NTJFMFx1ODYwRFx1RDg1QVx1REYxM1x1NTMwNVx1RDg2Mlx1REVERVx1NTU0OVx1NkVEOVx1RDg0Rlx1REY4MFx1RDg0Mlx1REQ1NFx1RDg0Rlx1REZFQ1x1NTMzM1x1NTM0NFx1RDg0Mlx1REZFMlx1NkNDQlx1RDg0NVx1REYyNlx1NjgxQlx1NzNENVx1NjA0QVx1M0VBQVx1MzhDQ1x1RDg0NVx1REVFOFx1NzFERFx1NDRBMlx1NTM2RFx1NTM3NFx1RDg2MVx1REVBQlx1NTM3RVx1NTM3Rlx1RDg0NVx1REQ5Nlx1RDg0NVx1REUxM1x1NzdFNlx1NTM5M1x1RDg2Mlx1REU5Qlx1NTNBMFx1NTNBQlx1NTNBRVx1NzNBN1x1RDg1NVx1REY3Mlx1M0Y1OVx1NzM5Q1x1NTNDMVx1NTNDNVx1NkM0OVx1NEU0OVx1NTdGRVx1NTNEOVx1M0FBQlx1RDg0Mlx1REY4Rlx1NTNFMFx1RDg0Rlx1REZFQlx1RDg0Qlx1RERBM1x1NTNGNlx1RDg0M1x1REM3N1x1NTQxM1x1NzA3OVx1NTUyQlx1NjY1N1x1NkQ1Qlx1NTQ2RFx1RDg1QVx1REY1M1x1RDg0M1x1REQ3NFx1NTU1RFx1NTQ4Rlx1NTRBNFx1NDdBNlx1RDg0NVx1REYwRFx1RDg0M1x1REVERFx1M0RCNFx1RDg0M1x1REQ0RFwiXSxcbltcImZiNDBcIixcIlx1RDg2Mlx1RERCQ1x1RDg0OVx1REU5OFx1NTU0N1x1NENFRFx1NTQyRlx1NzQxN1x1NTU4Nlx1NTVBOVx1NTYwNVx1RDg0Nlx1RENEN1x1RDg1MFx1REMzQVx1NDU1Mlx1RDg1MVx1REMzNVx1NjZCM1x1RDg0NFx1RENCNFx1NTYzN1x1NjZDRFx1RDg0Q1x1REU4QVx1NjZBNFx1NjZBRFx1NTY0RFx1NTY0Rlx1NzhGMVx1NTZGMVx1OTc4N1x1NTNGRVx1NTcwMFx1NTZFRlx1NTZFRFx1RDg2Mlx1REY2Nlx1MzYyM1x1RDg0NFx1REU0Rlx1NTc0Nlx1RDg1MFx1RERBNVx1NkM2RVx1NzA4Qlx1NTc0Mlx1MzZCMVx1RDg1Qlx1REM3RVx1NTdFNlx1RDg0NVx1REMxNlx1NTgwM1x1RDg0NVx1REM1NFx1RDg1MFx1REY2M1x1NTgyNlx1RDg1Mlx1REZGNVx1NTg1Q1x1NThBQVx1MzU2MVx1NThFMFx1NThEQ1x1RDg0NFx1REUzQ1x1NThGQlx1NUJGRlx1NTc0M1x1RDg2OFx1REQ1MFx1RDg1MFx1REU3OFx1OTNEM1x1MzVBMVx1NTkxRlx1NjhBNlx1MzZDM1x1NkU1OVwiXSxcbltcImZiYTFcIixcIlx1RDg0NVx1REUzRVx1NUEyNFx1NTU1M1x1RDg0NVx1REU5Mlx1ODUwNVx1NTlDOVx1RDg0M1x1REQ0RVx1RDg1Qlx1REM4MVx1RDg1Qlx1REQyQVx1RDg0NVx1REZEQ1x1NTlEOVx1RDg0NVx1REZGQlx1RDg0NVx1REZCMlx1RDg1Qlx1RERBNlx1NkQ3MVx1RDg0Nlx1REMyOFx1RDg0NVx1REVENVx1NTlGOVx1RDg1Qlx1REU0NVx1NUFBQlx1NUE2M1x1MzZFNlx1RDg1Mlx1RERBOVx1NUE3N1x1MzcwOFx1NUE5Nlx1NzQ2NVx1NUFEM1x1RDg1Qlx1REZBMVx1RDg0OVx1REQ1NFx1M0Q4NVx1RDg0Nlx1REQxMVx1MzczMlx1RDg0NVx1REVCOFx1NUU4M1x1NTJEMFx1NUI3Nlx1NjU4OFx1NUI3Q1x1RDg1RVx1REUwRVx1NDAwNFx1NDg1RFx1RDg0MFx1REUwNFx1NUJENVx1NjE2MFx1RDg0Nlx1REUzNFx1RDg1Nlx1RERDQ1x1RDg0MVx1RERBNVx1NUJGM1x1NUI5RFx1NEQxMFx1NUMwNVx1RDg0Nlx1REY0NFx1NUMxM1x1NzNDRVx1NUMxNFx1RDg0N1x1RENBNVx1RDg1QVx1REYyOFx1NUM0OVx1NDhERFx1NUM4NVx1NUNFOVx1NUNFRlx1NUQ4Qlx1RDg0N1x1RERGOVx1RDg0N1x1REUzN1x1NUQxMFx1NUQxOFx1NUQ0Nlx1RDg0N1x1REVBNFx1NUNCQVx1NUREN1x1ODJGQ1x1MzgyRFx1RDg1Mlx1REQwMVx1RDg0OFx1REM0OVx1RDg0OFx1REQ3M1x1ODI4N1x1MzgzNlx1M0JDMlx1NUUyRVx1NkE4QVx1NUU3NVx1NUU3QVx1RDg1MVx1RENCQ1x1RDg0M1x1RENEM1x1NTNBNlx1NEVCN1x1NUVEMFx1NTNBOFx1RDg0NVx1REY3MVx1NUUwOVx1NUVGNFx1RDg2MVx1REM4MlwiXSxcbltcImZjNDBcIixcIlx1NUVGOVx1NUVGQlx1MzhBMFx1NUVGQ1x1NjgzRVx1OTQxQlx1NUYwRFx1RDg0MFx1RERDMVx1RDg3RVx1REM5NFx1M0FERVx1NDhBRVx1RDg0NFx1REYzQVx1NUYzQVx1RDg1QVx1REM4OFx1RDg0OFx1REZEMFx1NUY1OFx1RDg0OVx1REM3MVx1NUY2M1x1OTdCRFx1RDg1Qlx1REU2RVx1NUY3Mlx1OTM0MFx1RDg2Mlx1REUzNlx1NUZBN1x1NURCNlx1M0Q1Rlx1RDg1NFx1REU1MFx1RDg0N1x1REY2QVx1RDg1Q1x1RENGOFx1RDg0OVx1REU2OFx1OTFENlx1RDg0MFx1REU5RVx1RDg2Mlx1REUyOVx1NjAzMVx1NjY4NVx1RDg0Nlx1REM3N1x1Mzk2M1x1M0RDN1x1MzYzOVx1NTc5MFx1RDg0OVx1REZCNFx1Nzk3MVx1M0U0MFx1NjA5RVx1NjBBNFx1NjBCM1x1RDg1Mlx1REQ4Mlx1RDg1Mlx1REQ4Rlx1RDg1RVx1REU1M1x1NzRBNFx1NTBFMVx1NUFBMFx1NjE2NFx1ODQyNFx1NjE0Mlx1RDg3RVx1RENBNlx1RDg1Qlx1REVEMlx1NjE4MVx1NTFGNFx1RDg0MVx1REU1Nlx1NjE4N1x1NUJBQVx1RDg0Rlx1REZCN1wiXSxcbltcImZjYTFcIixcIlx1RDg0QVx1REM1Rlx1NjFEM1x1RDg2Mlx1REY5RFx1RDg2Nlx1REQ1RFx1NjFEMFx1MzkzMlx1RDg0QVx1REQ4MFx1RDg0QVx1RENDMVx1NjAyM1x1NjE1Q1x1NjUxRVx1NjM4Qlx1RDg0MFx1REQxOFx1NjJDNVx1RDg0NVx1REY3MFx1NjJENVx1RDg0Qlx1REUwRFx1NjM2Q1x1RDg1Mlx1RERERlx1M0ExN1x1NjQzOFx1NjNGOFx1RDg0NFx1REY4RVx1RDg0NVx1REZGQ1x1NjQ5MFx1NkY4QVx1RDg0Qlx1REUzNlx1OTgxNFx1RDg1MFx1REM4Q1x1RDg1NVx1REYxRFx1NjRFMVx1NjRFNVx1OTQ3Qlx1M0E2Nlx1NjQzQVx1M0E1N1x1NjU0RFx1NkYxNlx1RDg1Mlx1REUyOFx1RDg1Mlx1REUyM1x1NjU4NVx1NjU2RFx1NjU1Rlx1RDg0Q1x1REM3RVx1NjVCNVx1RDg1Mlx1REQ0MFx1NEIzN1x1NjVEMVx1NDBEOFx1RDg0Nlx1REMyOVx1NjVFMFx1NjVFM1x1NUZERlx1RDg0RFx1REMwMFx1NjYxOFx1RDg0Q1x1RERGN1x1RDg0Q1x1RERGOFx1NjY0NFx1RDg0Q1x1RERBNFx1RDg0Q1x1RERBNVx1NjY0Qlx1RDg0M1x1REU3NVx1NjY2N1x1RDg1NFx1RERFNlx1NjY3M1x1NjY3NFx1RDg0N1x1REUzRFx1RDg0Q1x1REUzMVx1RDg2MVx1RERGNFx1RDg0Q1x1RERDOFx1RDg1NFx1REYxM1x1NzdDNVx1RDg0QVx1RENGN1x1OTlBNFx1NjcwMlx1RDg1MFx1REY5Q1x1RDg1Mlx1REUyMVx1M0IyQlx1NjlGQVx1RDg0RFx1REZDMlx1Njc1RVx1Njc2N1x1Njc2Mlx1RDg1MFx1RERDRFx1RDg2NFx1RENFRFx1NjdEN1x1NDRFOVx1NjgyMlx1NkU1MFx1OTIzQ1x1NjgwMVx1RDg0Q1x1REZFNlx1RDg1Qlx1RERBMFx1Njg1RFwiXSxcbltcImZkNDBcIixcIlx1RDg0RFx1REM2Rlx1NjlFMVx1NkEwQlx1RDg2Mlx1REVERlx1Njk3M1x1NjhDM1x1RDg0RFx1RERDRFx1NjkwMVx1NjkwMFx1M0QzMlx1M0EwMVx1RDg0RFx1REUzQ1x1M0I4MFx1NjdBQ1x1Njk2MVx1RDg2Mlx1REU0QVx1NDJGQ1x1NjkzNlx1Njk5OFx1M0JBMVx1RDg0MFx1REZDOVx1ODM2M1x1NTA5MFx1NjlGOVx1RDg0RFx1REU1OVx1RDg0OFx1REQyQVx1NkE0NVx1RDg0RFx1REYwM1x1NkE5RFx1M0JGM1x1NjdCMVx1NkFDOFx1RDg2NFx1REQ5Q1x1M0MwRFx1NkIxRFx1RDg0Mlx1REQyM1x1NjBERVx1NkIzNVx1NkI3NFx1RDg0OVx1REZDRFx1NkVCNVx1RDg0RVx1REVEQlx1RDg0MFx1REZCNVx1RDg0Nlx1REQ1OFx1Mzc0MFx1NTQyMVx1RDg0RVx1REY1QVx1NkJFMVx1RDg0Rlx1REVGQ1x1NkJEQ1x1NkMzN1x1RDg0OVx1REM4Qlx1RDg1Mlx1RENGMVx1RDg1QVx1REY1MVx1NkM1QVx1ODIyNlx1NkM3OVx1RDg0Rlx1RERCQ1x1NDRDNVx1RDg0Rlx1RERCRFx1RDg1MFx1RERBNFx1RDg1Mlx1REQwQ1x1RDg1Mlx1REQwMFwiXSxcbltcImZkYTFcIixcIlx1RDg0Rlx1RENDOVx1MzZFNVx1M0NFQlx1RDg0M1x1REQzMlx1OUI4M1x1RDg0Q1x1RERGOVx1RDg0OVx1REM5MVx1N0Y4Rlx1NjgzN1x1RDg1Qlx1REQyNVx1RDg1Qlx1RERBMVx1RDg1Qlx1RERFQlx1NkQ5Nlx1NkQ1Q1x1NkU3Q1x1NkYwNFx1RDg1Mlx1REQ3Rlx1RDg1MFx1REM4NVx1RDg1Qlx1REU3Mlx1ODUzM1x1RDg1Qlx1REY3NFx1NTFDN1x1NkM5Q1x1NkUxRFx1ODQyRVx1RDg2Mlx1REYyMVx1NkUyRlx1RDg0Rlx1REUyRlx1NzQ1M1x1RDg0Rlx1REY4Mlx1NzlDQ1x1NkU0Rlx1NUE5MVx1RDg0Q1x1REM0Qlx1NkZGOFx1MzcwRFx1NkY5RFx1RDg0Rlx1REUzMFx1NkVGQVx1RDg0NVx1REM5N1x1RDg1MFx1REMzRFx1NDU1NVx1OTNGMFx1NkY0NFx1NkY1Q1x1M0Q0RVx1NkY3NFx1RDg2NFx1REQ3MFx1M0QzQlx1NkY5Rlx1RDg1MFx1REQ0NFx1NkZEM1x1RDg1MFx1REM5MVx1RDg1MFx1REQ1NVx1RDg1MFx1REMzOVx1RDg0Rlx1REZGMFx1RDg0Rlx1REZCNFx1RDg1MFx1REQzRlx1NTFERlx1RDg1MFx1REQ1Nlx1RDg1MFx1REQ1N1x1RDg1MFx1REQ0MFx1RDg1OFx1RERERFx1NzA0Qlx1NzA3RVx1NzBBN1x1NzA4MVx1NzBDQ1x1NzBENVx1NzBENlx1NzBERlx1NDEwNFx1M0RFOFx1NzFCNFx1NzE5Nlx1RDg1MFx1REU3N1x1NzEyQlx1NzE0NVx1NUE4OFx1NzE0QVx1NzE2RVx1NUM5Q1x1RDg1MFx1REY2NVx1NzE0Rlx1OTM2Mlx1RDg1MFx1REVDMVx1NzEyQ1x1RDg1MVx1REM1QVx1RDg1Mlx1REUyN1x1RDg1Mlx1REUyMlx1NzFCQVx1RDg2Mlx1REZFOFx1NzBCRFx1NzIwRVwiXSxcbltcImZlNDBcIixcIlx1OTQ0Mlx1NzIxNVx1NTkxMVx1OTQ0M1x1NzIyNFx1OTM0MVx1RDg1NVx1REUwNVx1NzIyRVx1NzI0MFx1RDg1Mlx1REQ3NFx1NjhCRFx1NzI1NVx1NzI1N1x1M0U1NVx1RDg0Q1x1REM0NFx1NjgwRFx1NkYzRFx1NzI4Mlx1NzMyQVx1NzMyQlx1RDg1Mlx1REMyM1x1RDg2Mlx1REMyQlx1NDhFRFx1RDg2Mlx1REMwNFx1NzMyOFx1NzMyRVx1NzNDRlx1NzNBQVx1RDg0M1x1REMzQVx1RDg1QVx1REUyRVx1NzNDOVx1NzQ0OVx1RDg1MFx1RERFMlx1RDg0NVx1REVFN1x1RDg1Mlx1REUyNFx1NjYyM1x1MzZDNVx1RDg1Mlx1RERCN1x1RDg1Mlx1REQ4RFx1RDg1Mlx1RERGQlx1NzNGN1x1NzQxNVx1NjkwM1x1RDg1Mlx1REUyNlx1NzQzOVx1RDg0MVx1RERDM1x1M0VEN1x1NzQ1Q1x1RDg0QVx1RENBRFx1NzQ2MFx1RDg2M1x1REVCMlx1NzQ0N1x1NzNFNFx1NzQ3Nlx1ODNCOVx1NzQ2Q1x1MzczMFx1NzQ3NFx1OTNGMVx1NkEyQ1x1NzQ4Mlx1NDk1M1x1RDg1Mlx1REU4Q1wiXSxcbltcImZlYTFcIixcIlx1RDg1MFx1REQ1Rlx1RDg1Mlx1REU3OVx1RDg2Mlx1REY4Rlx1NUI0Nlx1RDg2M1x1REMwM1x1RDg0Nlx1REM5RVx1NzRDOFx1RDg0Nlx1REQ4OFx1NzUwRVx1NzRFOVx1NzUxRVx1RDg2M1x1REVEOVx1RDg0Nlx1REU0Qlx1NUJEN1x1RDg2M1x1REVBQ1x1OTM4NVx1NzU0RFx1NzU0QVx1NzU2N1x1NzU2RVx1RDg1M1x1REY4Mlx1M0YwNFx1RDg1M1x1REQxM1x1NzU4RVx1NzQ1RFx1NzU5RVx1NzVCNFx1NzYwMlx1NzYyQ1x1NzY1MVx1NzY0Rlx1NzY2Rlx1NzY3Nlx1RDg1OFx1REZGNVx1NzY5MFx1ODFFRlx1MzdGOFx1RDg1QVx1REQxMVx1RDg1QVx1REQwRVx1NzZBMVx1NzZBNVx1NzZCN1x1NzZDQ1x1RDg1Qlx1REY5Rlx1ODQ2Mlx1RDg1NFx1REM5RFx1RDg1NFx1REQ3RFx1RDg0N1x1REUxQ1x1NzcxRVx1NzcyNlx1Nzc0MFx1NjRBRlx1RDg1NFx1REUyMFx1Nzc1OFx1RDg0Q1x1REVBQ1x1NzdBRlx1RDg2Mlx1REQ2NFx1RDg2Mlx1REQ2OFx1RDg0NVx1REVDMVx1NzdGNFx1NzgwOVx1RDg0NFx1REY3Nlx1RDg1Mlx1REUxMlx1NjhDQVx1NzhBRlx1NzhDN1x1NzhEM1x1OTZBNVx1NzkyRVx1RDg1NVx1RERFMFx1NzhEN1x1NzkzNFx1NzhCMVx1RDg1RFx1REUwQ1x1OEZCOFx1ODg4NFx1RDg2Mlx1REYyQlx1RDg1OFx1REM4M1x1RDg0OVx1REUxQ1x1Nzk4Nlx1ODkwMFx1NjkwMlx1Nzk4MFx1RDg1Nlx1REM1N1x1Nzk5RFx1RDg1RVx1REYzOVx1NzkzQ1x1NzlBOVx1NkUyQVx1RDg1Q1x1REQyNlx1M0VBOFx1NzlDNlx1RDg2NFx1REQwRFx1NzlENFwiXVxuXVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG4vLyBEZXNjcmlwdGlvbiBvZiBzdXBwb3J0ZWQgZG91YmxlIGJ5dGUgZW5jb2RpbmdzIGFuZCBhbGlhc2VzLlxuLy8gVGFibGVzIGFyZSBub3QgcmVxdWlyZSgpLWQgdW50aWwgdGhleSBhcmUgbmVlZGVkIHRvIHNwZWVkIHVwIGxpYnJhcnkgbG9hZC5cbi8vIHJlcXVpcmUoKS1zIGFyZSBkaXJlY3QgdG8gc3VwcG9ydCBCcm93c2VyaWZ5LlxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgICBcbiAgICAvLyA9PSBKYXBhbmVzZS9TaGlmdEpJUyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICAgLy8gQWxsIGphcGFuZXNlIGVuY29kaW5ncyBhcmUgYmFzZWQgb24gSklTIFggc2V0IG9mIHN0YW5kYXJkczpcbiAgICAvLyBKSVMgWCAwMjAxIC0gU2luZ2xlLWJ5dGUgZW5jb2Rpbmcgb2YgQVNDSUkgKyBcdTAwQTUgKyBLYW5hIGNoYXJzIGF0IDB4QTEtMHhERi5cbiAgICAvLyBKSVMgWCAwMjA4IC0gTWFpbiBzZXQgb2YgNjg3OSBjaGFyYWN0ZXJzLCBwbGFjZWQgaW4gOTR4OTQgcGxhbmUsIHRvIGJlIGVuY29kZWQgYnkgMiBieXRlcy4gXG4gICAgLy8gICAgICAgICAgICAgIEhhcyBzZXZlcmFsIHZhcmlhdGlvbnMgaW4gMTk3OCwgMTk4MywgMTk5MCBhbmQgMTk5Ny5cbiAgICAvLyBKSVMgWCAwMjEyIC0gU3VwcGxlbWVudGFyeSBwbGFuZSBvZiA2MDY3IGNoYXJzIGluIDk0eDk0IHBsYW5lLiAxOTkwLiBFZmZlY3RpdmVseSBkZWFkLlxuICAgIC8vIEpJUyBYIDAyMTMgLSBFeHRlbnNpb24gYW5kIG1vZGVybiByZXBsYWNlbWVudCBvZiAwMjA4IGFuZCAwMjEyLiBUb3RhbCBjaGFyczogMTEyMzMuXG4gICAgLy8gICAgICAgICAgICAgIDIgcGxhbmVzLCBmaXJzdCBpcyBzdXBlcnNldCBvZiAwMjA4LCBzZWNvbmQgLSByZXZpc2VkIDAyMTIuXG4gICAgLy8gICAgICAgICAgICAgIEludHJvZHVjZWQgaW4gMjAwMCwgcmV2aXNlZCAyMDA0LiBTb21lIGNoYXJhY3RlcnMgYXJlIGluIFVuaWNvZGUgUGxhbmUgMiAoMHgyeHh4eClcblxuICAgIC8vIEJ5dGUgZW5jb2RpbmdzIGFyZTpcbiAgICAvLyAgKiBTaGlmdF9KSVM6IENvbXBhdGlibGUgd2l0aCAwMjAxLCB1c2VzIG5vdCBkZWZpbmVkIGNoYXJzIGluIHRvcCBoYWxmIGFzIGxlYWQgYnl0ZXMgZm9yIGRvdWJsZS1ieXRlXG4gICAgLy8gICAgICAgICAgICAgICBlbmNvZGluZyBvZiAwMjA4LiBMZWFkIGJ5dGUgcmFuZ2VzOiAweDgxLTB4OUYsIDB4RTAtMHhFRjsgVHJhaWwgYnl0ZSByYW5nZXM6IDB4NDAtMHg3RSwgMHg4MC0weDlFLCAweDlGLTB4RkMuXG4gICAgLy8gICAgICAgICAgICAgICBXaW5kb3dzIENQOTMyIGlzIGEgc3VwZXJzZXQgb2YgU2hpZnRfSklTLiBTb21lIGNvbXBhbmllcyBhZGRlZCBtb3JlIGNoYXJzLCBub3RhYmx5IEtEREkuXG4gICAgLy8gICogRVVDLUpQOiAgICBVcCB0byAzIGJ5dGVzIHBlciBjaGFyYWN0ZXIuIFVzZWQgbW9zdGx5IG9uICpuaXhlcy5cbiAgICAvLyAgICAgICAgICAgICAgIDB4MDAtMHg3RiAgICAgICAtIGxvd2VyIHBhcnQgb2YgMDIwMVxuICAgIC8vICAgICAgICAgICAgICAgMHg4RSwgMHhBMS0weERGIC0gdXBwZXIgcGFydCBvZiAwMjAxXG4gICAgLy8gICAgICAgICAgICAgICAoMHhBMS0weEZFKXgyICAgLSAwMjA4IHBsYW5lICg5NHg5NCkuXG4gICAgLy8gICAgICAgICAgICAgICAweDhGLCAoMHhBMS0weEZFKXgyIC0gMDIxMiBwbGFuZSAoOTR4OTQpLlxuICAgIC8vICAqIEpJUyBYIDIwODogNy1iaXQsIGRpcmVjdCBlbmNvZGluZyBvZiAwMjA4LiBCeXRlIHJhbmdlczogMHgyMS0weDdFICg5NCB2YWx1ZXMpLiBVbmNvbW1vbi5cbiAgICAvLyAgICAgICAgICAgICAgIFVzZWQgYXMtaXMgaW4gSVNPMjAyMiBmYW1pbHkuXG4gICAgLy8gICogSVNPMjAyMi1KUDogU3RhdGVmdWwgZW5jb2RpbmcsIHdpdGggZXNjYXBlIHNlcXVlbmNlcyB0byBzd2l0Y2ggYmV0d2VlbiBBU0NJSSwgXG4gICAgLy8gICAgICAgICAgICAgICAgMDIwMS0xOTc2IFJvbWFuLCAwMjA4LTE5NzgsIDAyMDgtMTk4My5cbiAgICAvLyAgKiBJU08yMDIyLUpQLTE6IEFkZHMgZXNjIHNlcSBmb3IgMDIxMi0xOTkwLlxuICAgIC8vICAqIElTTzIwMjItSlAtMjogQWRkcyBlc2Mgc2VxIGZvciBHQjIzMTMtMTk4MCwgS1NYMTAwMS0xOTkyLCBJU084ODU5LTEsIElTTzg4NTktNy5cbiAgICAvLyAgKiBJU08yMDIyLUpQLTM6IEFkZHMgZXNjIHNlcSBmb3IgMDIwMS0xOTc2IEthbmEgc2V0LCAwMjEzLTIwMDAgUGxhbmVzIDEsIDIuXG4gICAgLy8gICogSVNPMjAyMi1KUC0yMDA0OiBBZGRzIDAyMTMtMjAwNCBQbGFuZSAxLlxuICAgIC8vXG4gICAgLy8gQWZ0ZXIgSklTIFggMDIxMyBhcHBlYXJlZCwgU2hpZnRfSklTLTIwMDQsIEVVQy1KSVNYMDIxMyBhbmQgSVNPMjAyMi1KUC0yMDA0IGZvbGxvd2VkLCB3aXRoIGp1c3QgY2hhbmdpbmcgdGhlIHBsYW5lcy5cbiAgICAvL1xuICAgIC8vIE92ZXJhbGwsIGl0IHNlZW1zIHRoYXQgaXQncyBhIG1lc3MgOiggaHR0cDovL3d3dzgucGxhbGEub3IuanAvdGt1Ym90YTEvdW5pY29kZS1zeW1ib2xzLW1hcDIuaHRtbFxuXG4gICAgJ3NoaWZ0amlzJzoge1xuICAgICAgICB0eXBlOiAnX2RiY3MnLFxuICAgICAgICB0YWJsZTogZnVuY3Rpb24oKSB7IHJldHVybiByZXF1aXJlKCcuL3RhYmxlcy9zaGlmdGppcy5qc29uJykgfSxcbiAgICAgICAgZW5jb2RlQWRkOiB7J1xcdTAwYTUnOiAweDVDLCAnXFx1MjAzRSc6IDB4N0V9LFxuICAgICAgICBlbmNvZGVTa2lwVmFsczogW3tmcm9tOiAweEVENDAsIHRvOiAweEY5NDB9XSxcbiAgICB9LFxuICAgICdjc3NoaWZ0amlzJzogJ3NoaWZ0amlzJyxcbiAgICAnbXNrYW5qaSc6ICdzaGlmdGppcycsXG4gICAgJ3NqaXMnOiAnc2hpZnRqaXMnLFxuICAgICd3aW5kb3dzMzFqJzogJ3NoaWZ0amlzJyxcbiAgICAnbXMzMWonOiAnc2hpZnRqaXMnLFxuICAgICd4c2ppcyc6ICdzaGlmdGppcycsXG4gICAgJ3dpbmRvd3M5MzInOiAnc2hpZnRqaXMnLFxuICAgICdtczkzMic6ICdzaGlmdGppcycsXG4gICAgJzkzMic6ICdzaGlmdGppcycsXG4gICAgJ2NwOTMyJzogJ3NoaWZ0amlzJyxcblxuICAgICdldWNqcCc6IHtcbiAgICAgICAgdHlwZTogJ19kYmNzJyxcbiAgICAgICAgdGFibGU6IGZ1bmN0aW9uKCkgeyByZXR1cm4gcmVxdWlyZSgnLi90YWJsZXMvZXVjanAuanNvbicpIH0sXG4gICAgICAgIGVuY29kZUFkZDogeydcXHUwMGE1JzogMHg1QywgJ1xcdTIwM0UnOiAweDdFfSxcbiAgICB9LFxuXG4gICAgLy8gVE9ETzogS0RESSBleHRlbnNpb24gdG8gU2hpZnRfSklTXG4gICAgLy8gVE9ETzogSUJNIENDU0lEIDk0MiA9IENQOTMyLCBidXQgRjAtRjkgY3VzdG9tIGNoYXJzIGFuZCBvdGhlciBjaGFyIGNoYW5nZXMuXG4gICAgLy8gVE9ETzogSUJNIENDU0lEIDk0MyA9IFNoaWZ0X0pJUyA9IENQOTMyIHdpdGggb3JpZ2luYWwgU2hpZnRfSklTIGxvd2VyIDEyOCBjaGFycy5cblxuXG4gICAgLy8gPT0gQ2hpbmVzZS9HQksgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgIC8vIGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvR0JLXG4gICAgLy8gV2UgbW9zdGx5IGltcGxlbWVudCBXM0MgcmVjb21tZW5kYXRpb246IGh0dHBzOi8vd3d3LnczLm9yZy9UUi9lbmNvZGluZy8jZ2JrLWVuY29kZXJcblxuICAgIC8vIE9sZGVzdCBHQjIzMTIgKDE5ODEsIH43NjAwIGNoYXJzKSBpcyBhIHN1YnNldCBvZiBDUDkzNlxuICAgICdnYjIzMTInOiAnY3A5MzYnLFxuICAgICdnYjIzMTI4MCc6ICdjcDkzNicsXG4gICAgJ2diMjMxMjE5ODAnOiAnY3A5MzYnLFxuICAgICdjc2diMjMxMic6ICdjcDkzNicsXG4gICAgJ2NzaXNvNThnYjIzMTI4MCc6ICdjcDkzNicsXG4gICAgJ2V1Y2NuJzogJ2NwOTM2JyxcblxuICAgIC8vIE1pY3Jvc29mdCdzIENQOTM2IGlzIGEgc3Vic2V0IGFuZCBhcHByb3hpbWF0aW9uIG9mIEdCSy5cbiAgICAnd2luZG93czkzNic6ICdjcDkzNicsXG4gICAgJ21zOTM2JzogJ2NwOTM2JyxcbiAgICAnOTM2JzogJ2NwOTM2JyxcbiAgICAnY3A5MzYnOiB7XG4gICAgICAgIHR5cGU6ICdfZGJjcycsXG4gICAgICAgIHRhYmxlOiBmdW5jdGlvbigpIHsgcmV0dXJuIHJlcXVpcmUoJy4vdGFibGVzL2NwOTM2Lmpzb24nKSB9LFxuICAgIH0sXG5cbiAgICAvLyBHQksgKH4yMjAwMCBjaGFycykgaXMgYW4gZXh0ZW5zaW9uIG9mIENQOTM2IHRoYXQgYWRkZWQgdXNlci1tYXBwZWQgY2hhcnMgYW5kIHNvbWUgb3RoZXIuXG4gICAgJ2diayc6IHtcbiAgICAgICAgdHlwZTogJ19kYmNzJyxcbiAgICAgICAgdGFibGU6IGZ1bmN0aW9uKCkgeyByZXR1cm4gcmVxdWlyZSgnLi90YWJsZXMvY3A5MzYuanNvbicpLmNvbmNhdChyZXF1aXJlKCcuL3RhYmxlcy9nYmstYWRkZWQuanNvbicpKSB9LFxuICAgIH0sXG4gICAgJ3hnYmsnOiAnZ2JrJyxcbiAgICAnaXNvaXI1OCc6ICdnYmsnLFxuXG4gICAgLy8gR0IxODAzMCBpcyBhbiBhbGdvcml0aG1pYyBleHRlbnNpb24gb2YgR0JLLlxuICAgIC8vIE1haW4gc291cmNlOiBodHRwczovL3d3dy53My5vcmcvVFIvZW5jb2RpbmcvI2diay1lbmNvZGVyXG4gICAgLy8gaHR0cDovL2ljdS1wcm9qZWN0Lm9yZy9kb2NzL3BhcGVycy9nYjE4MDMwLmh0bWxcbiAgICAvLyBodHRwOi8vc291cmNlLmljdS1wcm9qZWN0Lm9yZy9yZXBvcy9pY3UvZGF0YS90cnVuay9jaGFyc2V0L2RhdGEveG1sL2diLTE4MDMwLTIwMDAueG1sXG4gICAgLy8gaHR0cDovL3d3dy5raG5nYWkuY29tL2NoaW5lc2UvY2hhcm1hcC90YmxnYmsucGhwP3BhZ2U9MFxuICAgICdnYjE4MDMwJzoge1xuICAgICAgICB0eXBlOiAnX2RiY3MnLFxuICAgICAgICB0YWJsZTogZnVuY3Rpb24oKSB7IHJldHVybiByZXF1aXJlKCcuL3RhYmxlcy9jcDkzNi5qc29uJykuY29uY2F0KHJlcXVpcmUoJy4vdGFibGVzL2diay1hZGRlZC5qc29uJykpIH0sXG4gICAgICAgIGdiMTgwMzA6IGZ1bmN0aW9uKCkgeyByZXR1cm4gcmVxdWlyZSgnLi90YWJsZXMvZ2IxODAzMC1yYW5nZXMuanNvbicpIH0sXG4gICAgICAgIGVuY29kZVNraXBWYWxzOiBbMHg4MF0sXG4gICAgICAgIGVuY29kZUFkZDogeydcdTIwQUMnOiAweEEyRTN9LFxuICAgIH0sXG5cbiAgICAnY2hpbmVzZSc6ICdnYjE4MDMwJyxcblxuXG4gICAgLy8gPT0gS29yZWFuID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgIC8vIEVVQy1LUiwgS1NfQ181NjAxIGFuZCBLUyBYIDEwMDEgYXJlIGV4YWN0bHkgdGhlIHNhbWUuXG4gICAgJ3dpbmRvd3M5NDknOiAnY3A5NDknLFxuICAgICdtczk0OSc6ICdjcDk0OScsXG4gICAgJzk0OSc6ICdjcDk0OScsXG4gICAgJ2NwOTQ5Jzoge1xuICAgICAgICB0eXBlOiAnX2RiY3MnLFxuICAgICAgICB0YWJsZTogZnVuY3Rpb24oKSB7IHJldHVybiByZXF1aXJlKCcuL3RhYmxlcy9jcDk0OS5qc29uJykgfSxcbiAgICB9LFxuXG4gICAgJ2NzZXVja3InOiAnY3A5NDknLFxuICAgICdjc2tzYzU2MDExOTg3JzogJ2NwOTQ5JyxcbiAgICAnZXVja3InOiAnY3A5NDknLFxuICAgICdpc29pcjE0OSc6ICdjcDk0OScsXG4gICAgJ2tvcmVhbic6ICdjcDk0OScsXG4gICAgJ2tzYzU2MDExOTg3JzogJ2NwOTQ5JyxcbiAgICAna3NjNTYwMTE5ODknOiAnY3A5NDknLFxuICAgICdrc2M1NjAxJzogJ2NwOTQ5JyxcblxuXG4gICAgLy8gPT0gQmlnNS9UYWl3YW4vSG9uZyBLb25nID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgIC8vIFRoZXJlIGFyZSBsb3RzIG9mIHRhYmxlcyBmb3IgQmlnNSBhbmQgY3A5NTAuIFBsZWFzZSBzZWUgdGhlIGZvbGxvd2luZyBsaW5rcyBmb3IgaGlzdG9yeTpcbiAgICAvLyBodHRwOi8vbW96dHcub3JnL2RvY3MvYmlnNS8gIGh0dHA6Ly93d3cuaGFpYmxlLmRlL2JydW5vL2NoYXJzZXRzL2NvbnZlcnNpb24tdGFibGVzL0JpZzUuaHRtbFxuICAgIC8vIFZhcmlhdGlvbnMsIGluIHJvdWdobHkgbnVtYmVyIG9mIGRlZmluZWQgY2hhcnM6XG4gICAgLy8gICogV2luZG93cyBDUCA5NTA6IE1pY3Jvc29mdCB2YXJpYW50IG9mIEJpZzUuIENhbm9uaWNhbDogaHR0cDovL3d3dy51bmljb2RlLm9yZy9QdWJsaWMvTUFQUElOR1MvVkVORE9SUy9NSUNTRlQvV0lORE9XUy9DUDk1MC5UWFRcbiAgICAvLyAgKiBXaW5kb3dzIENQIDk1MTogTWljcm9zb2Z0IHZhcmlhbnQgb2YgQmlnNS1IS1NDUy0yMDAxLiBTZWVtcyB0byBiZSBuZXZlciBwdWJsaWMuIGh0dHA6Ly9tZS5hYmVsY2hldW5nLm9yZy9hcnRpY2xlcy9yZXNlYXJjaC93aGF0LWlzLWNwOTUxL1xuICAgIC8vICAqIEJpZzUtMjAwMyAoVGFpd2FuIHN0YW5kYXJkKSBhbG1vc3Qgc3VwZXJzZXQgb2YgY3A5NTAuXG4gICAgLy8gICogVW5pY29kZS1hdC1vbiAoVUFPKSAvIE1vemlsbGEgMS44LiBGYWxsaW5nIG91dCBvZiB1c2Ugb24gdGhlIFdlYi4gTm90IHN1cHBvcnRlZCBieSBvdGhlciBicm93c2Vycy5cbiAgICAvLyAgKiBCaWc1LUhLU0NTICgtMjAwMSwgLTIwMDQsIC0yMDA4KS4gSG9uZyBLb25nIHN0YW5kYXJkLiBcbiAgICAvLyAgICBtYW55IHVuaWNvZGUgY29kZSBwb2ludHMgbW92ZWQgZnJvbSBQVUEgdG8gU3VwcGxlbWVudGFyeSBwbGFuZSAoVSsyWFhYWCkgb3ZlciB0aGUgeWVhcnMuXG4gICAgLy8gICAgUGx1cywgaXQgaGFzIDQgY29tYmluaW5nIHNlcXVlbmNlcy5cbiAgICAvLyAgICBTZWVtcyB0aGF0IE1vemlsbGEgcmVmdXNlZCB0byBzdXBwb3J0IGl0IGZvciAxMCB5cnMuIGh0dHBzOi8vYnVnemlsbGEubW96aWxsYS5vcmcvc2hvd19idWcuY2dpP2lkPTE2MjQzMSBodHRwczovL2J1Z3ppbGxhLm1vemlsbGEub3JnL3Nob3dfYnVnLmNnaT9pZD0zMTAyOTlcbiAgICAvLyAgICBiZWNhdXNlIGJpZzUtaGtzY3MgaXMgdGhlIG9ubHkgZW5jb2RpbmcgdG8gaW5jbHVkZSBhc3RyYWwgY2hhcmFjdGVycyBpbiBub24tYWxnb3JpdGhtaWMgd2F5LlxuICAgIC8vICAgIEltcGxlbWVudGF0aW9ucyBhcmUgbm90IGNvbnNpc3RlbnQgd2l0aGluIGJyb3dzZXJzOyBzb21ldGltZXMgbGFiZWxlZCBhcyBqdXN0IGJpZzUuXG4gICAgLy8gICAgTVMgSW50ZXJuZXQgRXhwbG9yZXIgc3dpdGNoZXMgZnJvbSBiaWc1IHRvIGJpZzUtaGtzY3Mgd2hlbiBhIHBhdGNoIGFwcGxpZWQuXG4gICAgLy8gICAgR3JlYXQgZGlzY3Vzc2lvbiAmIHJlY2FwIG9mIHdoYXQncyBnb2luZyBvbiBodHRwczovL2J1Z3ppbGxhLm1vemlsbGEub3JnL3Nob3dfYnVnLmNnaT9pZD05MTI0NzAjYzMxXG4gICAgLy8gICAgSW4gdGhlIGVuY29kZXIsIGl0IG1pZ2h0IG1ha2Ugc2Vuc2UgdG8gc3VwcG9ydCBlbmNvZGluZyBvbGQgUFVBIG1hcHBpbmdzIHRvIEJpZzUgYnl0ZXMgc2VxLXMuXG4gICAgLy8gICAgT2ZmaWNpYWwgc3BlYzogaHR0cDovL3d3dy5vZ2Npby5nb3YuaGsvZW4vYnVzaW5lc3MvdGVjaF9wcm9tb3Rpb24vY2NsaS90ZXJtcy9kb2MvMjAwM2NtcF8yMDA4LnR4dFxuICAgIC8vICAgICAgICAgICAgICAgICAgIGh0dHA6Ly93d3cub2djaW8uZ292LmhrL3RjL2J1c2luZXNzL3RlY2hfcHJvbW90aW9uL2NjbGkvdGVybXMvZG9jL2hrc2NzLTIwMDgtYmlnNS1pc28udHh0XG4gICAgLy8gXG4gICAgLy8gQ3VycmVudCB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0byBkZWFsIHdpdGggQmlnNSgtSEtTQ1MpIGlzIGluIHRoZSBFbmNvZGluZyBTdGFuZGFyZCwgaHR0cDovL2VuY29kaW5nLnNwZWMud2hhdHdnLm9yZy8jYmlnNS1lbmNvZGVyXG4gICAgLy8gVW5pY29kZSBtYXBwaW5nIChodHRwOi8vd3d3LnVuaWNvZGUub3JnL1B1YmxpYy9NQVBQSU5HUy9PQlNPTEVURS9FQVNUQVNJQS9PVEhFUi9CSUc1LlRYVCkgaXMgc2FpZCB0byBiZSB3cm9uZy5cblxuICAgICd3aW5kb3dzOTUwJzogJ2NwOTUwJyxcbiAgICAnbXM5NTAnOiAnY3A5NTAnLFxuICAgICc5NTAnOiAnY3A5NTAnLFxuICAgICdjcDk1MCc6IHtcbiAgICAgICAgdHlwZTogJ19kYmNzJyxcbiAgICAgICAgdGFibGU6IGZ1bmN0aW9uKCkgeyByZXR1cm4gcmVxdWlyZSgnLi90YWJsZXMvY3A5NTAuanNvbicpIH0sXG4gICAgfSxcblxuICAgIC8vIEJpZzUgaGFzIG1hbnkgdmFyaWF0aW9ucyBhbmQgaXMgYW4gZXh0ZW5zaW9uIG9mIGNwOTUwLiBXZSB1c2UgRW5jb2RpbmcgU3RhbmRhcmQncyBhcyBhIGNvbnNlbnN1cy5cbiAgICAnYmlnNSc6ICdiaWc1aGtzY3MnLFxuICAgICdiaWc1aGtzY3MnOiB7XG4gICAgICAgIHR5cGU6ICdfZGJjcycsXG4gICAgICAgIHRhYmxlOiBmdW5jdGlvbigpIHsgcmV0dXJuIHJlcXVpcmUoJy4vdGFibGVzL2NwOTUwLmpzb24nKS5jb25jYXQocmVxdWlyZSgnLi90YWJsZXMvYmlnNS1hZGRlZC5qc29uJykpIH0sXG4gICAgICAgIGVuY29kZVNraXBWYWxzOiBbXG4gICAgICAgICAgICAvLyBBbHRob3VnaCBFbmNvZGluZyBTdGFuZGFyZCBzYXlzIHdlIHNob3VsZCBhdm9pZCBlbmNvZGluZyB0byBIS1NDUyBhcmVhIChTZWUgU3RlcCAxIG9mXG4gICAgICAgICAgICAvLyBodHRwczovL2VuY29kaW5nLnNwZWMud2hhdHdnLm9yZy8jaW5kZXgtYmlnNS1wb2ludGVyKSwgd2Ugc3RpbGwgZG8gaXQgdG8gaW5jcmVhc2UgY29tcGF0aWJpbGl0eSB3aXRoIElDVS5cbiAgICAgICAgICAgIC8vIEJ1dCBpZiBhIHNpbmdsZSB1bmljb2RlIHBvaW50IGNhbiBiZSBlbmNvZGVkIGJvdGggYXMgSEtTQ1MgYW5kIHJlZ3VsYXIgQmlnNSwgd2UgcHJlZmVyIHRoZSBsYXR0ZXIuXG4gICAgICAgICAgICAweDhlNjksIDB4OGU2ZiwgMHg4ZTdlLCAweDhlYWIsIDB4OGViNCwgMHg4ZWNkLCAweDhlZDAsIDB4OGY1NywgMHg4ZjY5LCAweDhmNmUsIDB4OGZjYiwgMHg4ZmZlLFxuICAgICAgICAgICAgMHg5MDZkLCAweDkwN2EsIDB4OTBjNCwgMHg5MGRjLCAweDkwZjEsIDB4OTFiZiwgMHg5MmFmLCAweDkyYjAsIDB4OTJiMSwgMHg5MmIyLCAweDkyZDEsIDB4OTQ0NywgMHg5NGNhLFxuICAgICAgICAgICAgMHg5NWQ5LCAweDk2ZmMsIDB4OTk3NSwgMHg5Yjc2LCAweDliNzgsIDB4OWI3YiwgMHg5YmM2LCAweDliZGUsIDB4OWJlYywgMHg5YmY2LCAweDljNDIsIDB4OWM1MywgMHg5YzYyLFxuICAgICAgICAgICAgMHg5YzY4LCAweDljNmIsIDB4OWM3NywgMHg5Y2JjLCAweDljYmQsIDB4OWNkMCwgMHg5ZDU3LCAweDlkNWEsIDB4OWRjNCwgMHg5ZGVmLCAweDlkZmIsIDB4OWVhOSwgMHg5ZWVmLFxuICAgICAgICAgICAgMHg5ZWZkLCAweDlmNjAsIDB4OWZjYiwgMHhhMDc3LCAweGEwZGMsIDB4YTBkZiwgMHg4ZmNjLCAweDkyYzgsIDB4OTY0NCwgMHg5NmVkLFxuXG4gICAgICAgICAgICAvLyBTdGVwIDIgb2YgaHR0cHM6Ly9lbmNvZGluZy5zcGVjLndoYXR3Zy5vcmcvI2luZGV4LWJpZzUtcG9pbnRlcjogVXNlIGxhc3QgcG9pbnRlciBmb3IgVSsyNTUwLCBVKzI1NUUsIFUrMjU2MSwgVSsyNTZBLCBVKzUzNDEsIG9yIFUrNTM0NVxuICAgICAgICAgICAgMHhhMmE0LCAweGEyYTUsIDB4YTJhNywgMHhhMmE2LCAweGEyY2MsIDB4YTJjZSxcbiAgICAgICAgXSxcbiAgICB9LFxuXG4gICAgJ2NuYmlnNSc6ICdiaWc1aGtzY3MnLFxuICAgICdjc2JpZzUnOiAnYmlnNWhrc2NzJyxcbiAgICAneHhiaWc1JzogJ2JpZzVoa3NjcycsXG59O1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG4vLyBVcGRhdGUgdGhpcyBhcnJheSBpZiB5b3UgYWRkL3JlbmFtZS9yZW1vdmUgZmlsZXMgaW4gdGhpcyBkaXJlY3RvcnkuXG4vLyBXZSBzdXBwb3J0IEJyb3dzZXJpZnkgYnkgc2tpcHBpbmcgYXV0b21hdGljIG1vZHVsZSBkaXNjb3ZlcnkgYW5kIHJlcXVpcmluZyBtb2R1bGVzIGRpcmVjdGx5LlxudmFyIG1vZHVsZXMgPSBbXG4gICAgcmVxdWlyZShcIi4vaW50ZXJuYWxcIiksXG4gICAgcmVxdWlyZShcIi4vdXRmMzJcIiksXG4gICAgcmVxdWlyZShcIi4vdXRmMTZcIiksXG4gICAgcmVxdWlyZShcIi4vdXRmN1wiKSxcbiAgICByZXF1aXJlKFwiLi9zYmNzLWNvZGVjXCIpLFxuICAgIHJlcXVpcmUoXCIuL3NiY3MtZGF0YVwiKSxcbiAgICByZXF1aXJlKFwiLi9zYmNzLWRhdGEtZ2VuZXJhdGVkXCIpLFxuICAgIHJlcXVpcmUoXCIuL2RiY3MtY29kZWNcIiksXG4gICAgcmVxdWlyZShcIi4vZGJjcy1kYXRhXCIpLFxuXTtcblxuLy8gUHV0IGFsbCBlbmNvZGluZy9hbGlhcy9jb2RlYyBkZWZpbml0aW9ucyB0byBzaW5nbGUgb2JqZWN0IGFuZCBleHBvcnQgaXQuXG5mb3IgKHZhciBpID0gMDsgaSA8IG1vZHVsZXMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgbW9kdWxlID0gbW9kdWxlc1tpXTtcbiAgICBmb3IgKHZhciBlbmMgaW4gbW9kdWxlKVxuICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1vZHVsZSwgZW5jKSlcbiAgICAgICAgICAgIGV4cG9ydHNbZW5jXSA9IG1vZHVsZVtlbmNdO1xufVxuIiwgIlwidXNlIHN0cmljdFwiO1xuXG52YXIgQnVmZmVyID0gcmVxdWlyZShcInNhZmVyLWJ1ZmZlclwiKS5CdWZmZXI7XG5cbi8vIE5PVEU6IER1ZSB0byAnc3RyZWFtJyBtb2R1bGUgYmVpbmcgcHJldHR5IGxhcmdlICh+MTAwS2IsIHNpZ25pZmljYW50IGluIGJyb3dzZXIgZW52aXJvbm1lbnRzKSwgXG4vLyB3ZSBvcHQgdG8gZGVwZW5kZW5jeS1pbmplY3QgaXQgaW5zdGVhZCBvZiBjcmVhdGluZyBhIGhhcmQgZGVwZW5kZW5jeS5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oc3RyZWFtX21vZHVsZSkge1xuICAgIHZhciBUcmFuc2Zvcm0gPSBzdHJlYW1fbW9kdWxlLlRyYW5zZm9ybTtcblxuICAgIC8vID09IEVuY29kZXIgc3RyZWFtID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuICAgIGZ1bmN0aW9uIEljb252TGl0ZUVuY29kZXJTdHJlYW0oY29udiwgb3B0aW9ucykge1xuICAgICAgICB0aGlzLmNvbnYgPSBjb252O1xuICAgICAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiAgICAgICAgb3B0aW9ucy5kZWNvZGVTdHJpbmdzID0gZmFsc2U7IC8vIFdlIGFjY2VwdCBvbmx5IHN0cmluZ3MsIHNvIHdlIGRvbid0IG5lZWQgdG8gZGVjb2RlIHRoZW0uXG4gICAgICAgIFRyYW5zZm9ybS5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuICAgIH1cblxuICAgIEljb252TGl0ZUVuY29kZXJTdHJlYW0ucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShUcmFuc2Zvcm0ucHJvdG90eXBlLCB7XG4gICAgICAgIGNvbnN0cnVjdG9yOiB7IHZhbHVlOiBJY29udkxpdGVFbmNvZGVyU3RyZWFtIH1cbiAgICB9KTtcblxuICAgIEljb252TGl0ZUVuY29kZXJTdHJlYW0ucHJvdG90eXBlLl90cmFuc2Zvcm0gPSBmdW5jdGlvbihjaHVuaywgZW5jb2RpbmcsIGRvbmUpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBjaHVuayAhPSAnc3RyaW5nJylcbiAgICAgICAgICAgIHJldHVybiBkb25lKG5ldyBFcnJvcihcIkljb252IGVuY29kaW5nIHN0cmVhbSBuZWVkcyBzdHJpbmdzIGFzIGl0cyBpbnB1dC5cIikpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgdmFyIHJlcyA9IHRoaXMuY29udi53cml0ZShjaHVuayk7XG4gICAgICAgICAgICBpZiAocmVzICYmIHJlcy5sZW5ndGgpIHRoaXMucHVzaChyZXMpO1xuICAgICAgICAgICAgZG9uZSgpO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICBkb25lKGUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgSWNvbnZMaXRlRW5jb2RlclN0cmVhbS5wcm90b3R5cGUuX2ZsdXNoID0gZnVuY3Rpb24oZG9uZSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgdmFyIHJlcyA9IHRoaXMuY29udi5lbmQoKTtcbiAgICAgICAgICAgIGlmIChyZXMgJiYgcmVzLmxlbmd0aCkgdGhpcy5wdXNoKHJlcyk7XG4gICAgICAgICAgICBkb25lKCk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGRvbmUoZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBJY29udkxpdGVFbmNvZGVyU3RyZWFtLnByb3RvdHlwZS5jb2xsZWN0ID0gZnVuY3Rpb24oY2IpIHtcbiAgICAgICAgdmFyIGNodW5rcyA9IFtdO1xuICAgICAgICB0aGlzLm9uKCdlcnJvcicsIGNiKTtcbiAgICAgICAgdGhpcy5vbignZGF0YScsIGZ1bmN0aW9uKGNodW5rKSB7IGNodW5rcy5wdXNoKGNodW5rKTsgfSk7XG4gICAgICAgIHRoaXMub24oJ2VuZCcsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgY2IobnVsbCwgQnVmZmVyLmNvbmNhdChjaHVua3MpKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuXG4gICAgLy8gPT0gRGVjb2RlciBzdHJlYW0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4gICAgZnVuY3Rpb24gSWNvbnZMaXRlRGVjb2RlclN0cmVhbShjb252LCBvcHRpb25zKSB7XG4gICAgICAgIHRoaXMuY29udiA9IGNvbnY7XG4gICAgICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICAgICAgICBvcHRpb25zLmVuY29kaW5nID0gdGhpcy5lbmNvZGluZyA9ICd1dGY4JzsgLy8gV2Ugb3V0cHV0IHN0cmluZ3MuXG4gICAgICAgIFRyYW5zZm9ybS5jYWxsKHRoaXMsIG9wdGlvbnMpO1xuICAgIH1cblxuICAgIEljb252TGl0ZURlY29kZXJTdHJlYW0ucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShUcmFuc2Zvcm0ucHJvdG90eXBlLCB7XG4gICAgICAgIGNvbnN0cnVjdG9yOiB7IHZhbHVlOiBJY29udkxpdGVEZWNvZGVyU3RyZWFtIH1cbiAgICB9KTtcblxuICAgIEljb252TGl0ZURlY29kZXJTdHJlYW0ucHJvdG90eXBlLl90cmFuc2Zvcm0gPSBmdW5jdGlvbihjaHVuaywgZW5jb2RpbmcsIGRvbmUpIHtcbiAgICAgICAgaWYgKCFCdWZmZXIuaXNCdWZmZXIoY2h1bmspICYmICEoY2h1bmsgaW5zdGFuY2VvZiBVaW50OEFycmF5KSlcbiAgICAgICAgICAgIHJldHVybiBkb25lKG5ldyBFcnJvcihcIkljb252IGRlY29kaW5nIHN0cmVhbSBuZWVkcyBidWZmZXJzIGFzIGl0cyBpbnB1dC5cIikpO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgdmFyIHJlcyA9IHRoaXMuY29udi53cml0ZShjaHVuayk7XG4gICAgICAgICAgICBpZiAocmVzICYmIHJlcy5sZW5ndGgpIHRoaXMucHVzaChyZXMsIHRoaXMuZW5jb2RpbmcpO1xuICAgICAgICAgICAgZG9uZSgpO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICBkb25lKGUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgSWNvbnZMaXRlRGVjb2RlclN0cmVhbS5wcm90b3R5cGUuX2ZsdXNoID0gZnVuY3Rpb24oZG9uZSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgdmFyIHJlcyA9IHRoaXMuY29udi5lbmQoKTtcbiAgICAgICAgICAgIGlmIChyZXMgJiYgcmVzLmxlbmd0aCkgdGhpcy5wdXNoKHJlcywgdGhpcy5lbmNvZGluZyk7ICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgZG9uZSgpO1xuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICBkb25lKGUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgSWNvbnZMaXRlRGVjb2RlclN0cmVhbS5wcm90b3R5cGUuY29sbGVjdCA9IGZ1bmN0aW9uKGNiKSB7XG4gICAgICAgIHZhciByZXMgPSAnJztcbiAgICAgICAgdGhpcy5vbignZXJyb3InLCBjYik7XG4gICAgICAgIHRoaXMub24oJ2RhdGEnLCBmdW5jdGlvbihjaHVuaykgeyByZXMgKz0gY2h1bms7IH0pO1xuICAgICAgICB0aGlzLm9uKCdlbmQnLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIGNiKG51bGwsIHJlcyk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgICBJY29udkxpdGVFbmNvZGVyU3RyZWFtOiBJY29udkxpdGVFbmNvZGVyU3RyZWFtLFxuICAgICAgICBJY29udkxpdGVEZWNvZGVyU3RyZWFtOiBJY29udkxpdGVEZWNvZGVyU3RyZWFtLFxuICAgIH07XG59O1xuIiwgIlwidXNlIHN0cmljdFwiO1xuXG52YXIgQnVmZmVyID0gcmVxdWlyZShcInNhZmVyLWJ1ZmZlclwiKS5CdWZmZXI7XG5cbnZhciBib21IYW5kbGluZyA9IHJlcXVpcmUoXCIuL2JvbS1oYW5kbGluZ1wiKSxcbiAgICBpY29udiA9IG1vZHVsZS5leHBvcnRzO1xuXG4vLyBBbGwgY29kZWNzIGFuZCBhbGlhc2VzIGFyZSBrZXB0IGhlcmUsIGtleWVkIGJ5IGVuY29kaW5nIG5hbWUvYWxpYXMuXG4vLyBUaGV5IGFyZSBsYXp5IGxvYWRlZCBpbiBgaWNvbnYuZ2V0Q29kZWNgIGZyb20gYGVuY29kaW5ncy9pbmRleC5qc2AuXG5pY29udi5lbmNvZGluZ3MgPSBudWxsO1xuXG4vLyBDaGFyYWN0ZXJzIGVtaXR0ZWQgaW4gY2FzZSBvZiBlcnJvci5cbmljb252LmRlZmF1bHRDaGFyVW5pY29kZSA9ICdcdUZGRkQnO1xuaWNvbnYuZGVmYXVsdENoYXJTaW5nbGVCeXRlID0gJz8nO1xuXG4vLyBQdWJsaWMgQVBJLlxuaWNvbnYuZW5jb2RlID0gZnVuY3Rpb24gZW5jb2RlKHN0ciwgZW5jb2RpbmcsIG9wdGlvbnMpIHtcbiAgICBzdHIgPSBcIlwiICsgKHN0ciB8fCBcIlwiKTsgLy8gRW5zdXJlIHN0cmluZy5cblxuICAgIHZhciBlbmNvZGVyID0gaWNvbnYuZ2V0RW5jb2RlcihlbmNvZGluZywgb3B0aW9ucyk7XG5cbiAgICB2YXIgcmVzID0gZW5jb2Rlci53cml0ZShzdHIpO1xuICAgIHZhciB0cmFpbCA9IGVuY29kZXIuZW5kKCk7XG4gICAgXG4gICAgcmV0dXJuICh0cmFpbCAmJiB0cmFpbC5sZW5ndGggPiAwKSA/IEJ1ZmZlci5jb25jYXQoW3JlcywgdHJhaWxdKSA6IHJlcztcbn1cblxuaWNvbnYuZGVjb2RlID0gZnVuY3Rpb24gZGVjb2RlKGJ1ZiwgZW5jb2RpbmcsIG9wdGlvbnMpIHtcbiAgICBpZiAodHlwZW9mIGJ1ZiA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgaWYgKCFpY29udi5za2lwRGVjb2RlV2FybmluZykge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcignSWNvbnYtbGl0ZSB3YXJuaW5nOiBkZWNvZGUoKS1pbmcgc3RyaW5ncyBpcyBkZXByZWNhdGVkLiBSZWZlciB0byBodHRwczovL2dpdGh1Yi5jb20vYXNodHVjaGtpbi9pY29udi1saXRlL3dpa2kvVXNlLUJ1ZmZlcnMtd2hlbi1kZWNvZGluZycpO1xuICAgICAgICAgICAgaWNvbnYuc2tpcERlY29kZVdhcm5pbmcgPSB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgYnVmID0gQnVmZmVyLmZyb20oXCJcIiArIChidWYgfHwgXCJcIiksIFwiYmluYXJ5XCIpOyAvLyBFbnN1cmUgYnVmZmVyLlxuICAgIH1cblxuICAgIHZhciBkZWNvZGVyID0gaWNvbnYuZ2V0RGVjb2RlcihlbmNvZGluZywgb3B0aW9ucyk7XG5cbiAgICB2YXIgcmVzID0gZGVjb2Rlci53cml0ZShidWYpO1xuICAgIHZhciB0cmFpbCA9IGRlY29kZXIuZW5kKCk7XG5cbiAgICByZXR1cm4gdHJhaWwgPyAocmVzICsgdHJhaWwpIDogcmVzO1xufVxuXG5pY29udi5lbmNvZGluZ0V4aXN0cyA9IGZ1bmN0aW9uIGVuY29kaW5nRXhpc3RzKGVuYykge1xuICAgIHRyeSB7XG4gICAgICAgIGljb252LmdldENvZGVjKGVuYyk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbn1cblxuLy8gTGVnYWN5IGFsaWFzZXMgdG8gY29udmVydCBmdW5jdGlvbnNcbmljb252LnRvRW5jb2RpbmcgPSBpY29udi5lbmNvZGU7XG5pY29udi5mcm9tRW5jb2RpbmcgPSBpY29udi5kZWNvZGU7XG5cbi8vIFNlYXJjaCBmb3IgYSBjb2RlYyBpbiBpY29udi5lbmNvZGluZ3MuIENhY2hlIGNvZGVjIGRhdGEgaW4gaWNvbnYuX2NvZGVjRGF0YUNhY2hlLlxuaWNvbnYuX2NvZGVjRGF0YUNhY2hlID0ge307XG5pY29udi5nZXRDb2RlYyA9IGZ1bmN0aW9uIGdldENvZGVjKGVuY29kaW5nKSB7XG4gICAgaWYgKCFpY29udi5lbmNvZGluZ3MpXG4gICAgICAgIGljb252LmVuY29kaW5ncyA9IHJlcXVpcmUoXCIuLi9lbmNvZGluZ3NcIik7IC8vIExhenkgbG9hZCBhbGwgZW5jb2RpbmcgZGVmaW5pdGlvbnMuXG4gICAgXG4gICAgLy8gQ2Fub25pY2FsaXplIGVuY29kaW5nIG5hbWU6IHN0cmlwIGFsbCBub24tYWxwaGFudW1lcmljIGNoYXJzIGFuZCBhcHBlbmRlZCB5ZWFyLlxuICAgIHZhciBlbmMgPSBpY29udi5fY2Fub25pY2FsaXplRW5jb2RpbmcoZW5jb2RpbmcpO1xuXG4gICAgLy8gVHJhdmVyc2UgaWNvbnYuZW5jb2RpbmdzIHRvIGZpbmQgYWN0dWFsIGNvZGVjLlxuICAgIHZhciBjb2RlY09wdGlvbnMgPSB7fTtcbiAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgICB2YXIgY29kZWMgPSBpY29udi5fY29kZWNEYXRhQ2FjaGVbZW5jXTtcbiAgICAgICAgaWYgKGNvZGVjKVxuICAgICAgICAgICAgcmV0dXJuIGNvZGVjO1xuXG4gICAgICAgIHZhciBjb2RlY0RlZiA9IGljb252LmVuY29kaW5nc1tlbmNdO1xuXG4gICAgICAgIHN3aXRjaCAodHlwZW9mIGNvZGVjRGVmKSB7XG4gICAgICAgICAgICBjYXNlIFwic3RyaW5nXCI6IC8vIERpcmVjdCBhbGlhcyB0byBvdGhlciBlbmNvZGluZy5cbiAgICAgICAgICAgICAgICBlbmMgPSBjb2RlY0RlZjtcbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgY2FzZSBcIm9iamVjdFwiOiAvLyBBbGlhcyB3aXRoIG9wdGlvbnMuIENhbiBiZSBsYXllcmVkLlxuICAgICAgICAgICAgICAgIGZvciAodmFyIGtleSBpbiBjb2RlY0RlZilcbiAgICAgICAgICAgICAgICAgICAgY29kZWNPcHRpb25zW2tleV0gPSBjb2RlY0RlZltrZXldO1xuXG4gICAgICAgICAgICAgICAgaWYgKCFjb2RlY09wdGlvbnMuZW5jb2RpbmdOYW1lKVxuICAgICAgICAgICAgICAgICAgICBjb2RlY09wdGlvbnMuZW5jb2RpbmdOYW1lID0gZW5jO1xuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIGVuYyA9IGNvZGVjRGVmLnR5cGU7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgXCJmdW5jdGlvblwiOiAvLyBDb2RlYyBpdHNlbGYuXG4gICAgICAgICAgICAgICAgaWYgKCFjb2RlY09wdGlvbnMuZW5jb2RpbmdOYW1lKVxuICAgICAgICAgICAgICAgICAgICBjb2RlY09wdGlvbnMuZW5jb2RpbmdOYW1lID0gZW5jO1xuXG4gICAgICAgICAgICAgICAgLy8gVGhlIGNvZGVjIGZ1bmN0aW9uIG11c3QgbG9hZCBhbGwgdGFibGVzIGFuZCByZXR1cm4gb2JqZWN0IHdpdGggLmVuY29kZXIgYW5kIC5kZWNvZGVyIG1ldGhvZHMuXG4gICAgICAgICAgICAgICAgLy8gSXQnbGwgYmUgY2FsbGVkIG9ubHkgb25jZSAoZm9yIGVhY2ggZGlmZmVyZW50IG9wdGlvbnMgb2JqZWN0KS5cbiAgICAgICAgICAgICAgICBjb2RlYyA9IG5ldyBjb2RlY0RlZihjb2RlY09wdGlvbnMsIGljb252KTtcblxuICAgICAgICAgICAgICAgIGljb252Ll9jb2RlY0RhdGFDYWNoZVtjb2RlY09wdGlvbnMuZW5jb2RpbmdOYW1lXSA9IGNvZGVjOyAvLyBTYXZlIGl0IHRvIGJlIHJldXNlZCBsYXRlci5cbiAgICAgICAgICAgICAgICByZXR1cm4gY29kZWM7XG5cbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRW5jb2Rpbmcgbm90IHJlY29nbml6ZWQ6ICdcIiArIGVuY29kaW5nICsgXCInIChzZWFyY2hlZCBhczogJ1wiK2VuYytcIicpXCIpO1xuICAgICAgICB9XG4gICAgfVxufVxuXG5pY29udi5fY2Fub25pY2FsaXplRW5jb2RpbmcgPSBmdW5jdGlvbihlbmNvZGluZykge1xuICAgIC8vIENhbm9uaWNhbGl6ZSBlbmNvZGluZyBuYW1lOiBzdHJpcCBhbGwgbm9uLWFscGhhbnVtZXJpYyBjaGFycyBhbmQgYXBwZW5kZWQgeWVhci5cbiAgICByZXR1cm4gKCcnK2VuY29kaW5nKS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoLzpcXGR7NH0kfFteMC05YS16XS9nLCBcIlwiKTtcbn1cblxuaWNvbnYuZ2V0RW5jb2RlciA9IGZ1bmN0aW9uIGdldEVuY29kZXIoZW5jb2RpbmcsIG9wdGlvbnMpIHtcbiAgICB2YXIgY29kZWMgPSBpY29udi5nZXRDb2RlYyhlbmNvZGluZyksXG4gICAgICAgIGVuY29kZXIgPSBuZXcgY29kZWMuZW5jb2RlcihvcHRpb25zLCBjb2RlYyk7XG5cbiAgICBpZiAoY29kZWMuYm9tQXdhcmUgJiYgb3B0aW9ucyAmJiBvcHRpb25zLmFkZEJPTSlcbiAgICAgICAgZW5jb2RlciA9IG5ldyBib21IYW5kbGluZy5QcmVwZW5kQk9NKGVuY29kZXIsIG9wdGlvbnMpO1xuXG4gICAgcmV0dXJuIGVuY29kZXI7XG59XG5cbmljb252LmdldERlY29kZXIgPSBmdW5jdGlvbiBnZXREZWNvZGVyKGVuY29kaW5nLCBvcHRpb25zKSB7XG4gICAgdmFyIGNvZGVjID0gaWNvbnYuZ2V0Q29kZWMoZW5jb2RpbmcpLFxuICAgICAgICBkZWNvZGVyID0gbmV3IGNvZGVjLmRlY29kZXIob3B0aW9ucywgY29kZWMpO1xuXG4gICAgaWYgKGNvZGVjLmJvbUF3YXJlICYmICEob3B0aW9ucyAmJiBvcHRpb25zLnN0cmlwQk9NID09PSBmYWxzZSkpXG4gICAgICAgIGRlY29kZXIgPSBuZXcgYm9tSGFuZGxpbmcuU3RyaXBCT00oZGVjb2Rlciwgb3B0aW9ucyk7XG5cbiAgICByZXR1cm4gZGVjb2Rlcjtcbn1cblxuLy8gU3RyZWFtaW5nIEFQSVxuLy8gTk9URTogU3RyZWFtaW5nIEFQSSBuYXR1cmFsbHkgZGVwZW5kcyBvbiAnc3RyZWFtJyBtb2R1bGUgZnJvbSBOb2RlLmpzLiBVbmZvcnR1bmF0ZWx5IGluIGJyb3dzZXIgZW52aXJvbm1lbnRzIHRoaXMgbW9kdWxlIGNhbiBhZGRcbi8vIHVwIHRvIDEwMEtiIHRvIHRoZSBvdXRwdXQgYnVuZGxlLiBUbyBhdm9pZCB1bm5lY2Vzc2FyeSBjb2RlIGJsb2F0LCB3ZSBkb24ndCBlbmFibGUgU3RyZWFtaW5nIEFQSSBpbiBicm93c2VyIGJ5IGRlZmF1bHQuXG4vLyBJZiB5b3Ugd291bGQgbGlrZSB0byBlbmFibGUgaXQgZXhwbGljaXRseSwgcGxlYXNlIGFkZCB0aGUgZm9sbG93aW5nIGNvZGUgdG8geW91ciBhcHA6XG4vLyA+IGljb252LmVuYWJsZVN0cmVhbWluZ0FQSShyZXF1aXJlKCdzdHJlYW0nKSk7XG5pY29udi5lbmFibGVTdHJlYW1pbmdBUEkgPSBmdW5jdGlvbiBlbmFibGVTdHJlYW1pbmdBUEkoc3RyZWFtX21vZHVsZSkge1xuICAgIGlmIChpY29udi5zdXBwb3J0c1N0cmVhbXMpXG4gICAgICAgIHJldHVybjtcblxuICAgIC8vIERlcGVuZGVuY3ktaW5qZWN0IHN0cmVhbSBtb2R1bGUgdG8gY3JlYXRlIEljb252TGl0ZSBzdHJlYW0gY2xhc3Nlcy5cbiAgICB2YXIgc3RyZWFtcyA9IHJlcXVpcmUoXCIuL3N0cmVhbXNcIikoc3RyZWFtX21vZHVsZSk7XG5cbiAgICAvLyBOb3QgcHVibGljIEFQSSB5ZXQsIGJ1dCBleHBvc2UgdGhlIHN0cmVhbSBjbGFzc2VzLlxuICAgIGljb252Lkljb252TGl0ZUVuY29kZXJTdHJlYW0gPSBzdHJlYW1zLkljb252TGl0ZUVuY29kZXJTdHJlYW07XG4gICAgaWNvbnYuSWNvbnZMaXRlRGVjb2RlclN0cmVhbSA9IHN0cmVhbXMuSWNvbnZMaXRlRGVjb2RlclN0cmVhbTtcblxuICAgIC8vIFN0cmVhbWluZyBBUEkuXG4gICAgaWNvbnYuZW5jb2RlU3RyZWFtID0gZnVuY3Rpb24gZW5jb2RlU3RyZWFtKGVuY29kaW5nLCBvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiBuZXcgaWNvbnYuSWNvbnZMaXRlRW5jb2RlclN0cmVhbShpY29udi5nZXRFbmNvZGVyKGVuY29kaW5nLCBvcHRpb25zKSwgb3B0aW9ucyk7XG4gICAgfVxuXG4gICAgaWNvbnYuZGVjb2RlU3RyZWFtID0gZnVuY3Rpb24gZGVjb2RlU3RyZWFtKGVuY29kaW5nLCBvcHRpb25zKSB7XG4gICAgICAgIHJldHVybiBuZXcgaWNvbnYuSWNvbnZMaXRlRGVjb2RlclN0cmVhbShpY29udi5nZXREZWNvZGVyKGVuY29kaW5nLCBvcHRpb25zKSwgb3B0aW9ucyk7XG4gICAgfVxuXG4gICAgaWNvbnYuc3VwcG9ydHNTdHJlYW1zID0gdHJ1ZTtcbn1cblxuLy8gRW5hYmxlIFN0cmVhbWluZyBBUEkgYXV0b21hdGljYWxseSBpZiAnc3RyZWFtJyBtb2R1bGUgaXMgYXZhaWxhYmxlIGFuZCBub24tZW1wdHkgKHRoZSBtYWpvcml0eSBvZiBlbnZpcm9ubWVudHMpLlxudmFyIHN0cmVhbV9tb2R1bGU7XG50cnkge1xuICAgIHN0cmVhbV9tb2R1bGUgPSByZXF1aXJlKFwic3RyZWFtXCIpO1xufSBjYXRjaCAoZSkge31cblxuaWYgKHN0cmVhbV9tb2R1bGUgJiYgc3RyZWFtX21vZHVsZS5UcmFuc2Zvcm0pIHtcbiAgICBpY29udi5lbmFibGVTdHJlYW1pbmdBUEkoc3RyZWFtX21vZHVsZSk7XG5cbn0gZWxzZSB7XG4gICAgLy8gSW4gcmFyZSBjYXNlcyB3aGVyZSAnc3RyZWFtJyBtb2R1bGUgaXMgbm90IGF2YWlsYWJsZSBieSBkZWZhdWx0LCB0aHJvdyBhIGhlbHBmdWwgZXhjZXB0aW9uLlxuICAgIGljb252LmVuY29kZVN0cmVhbSA9IGljb252LmRlY29kZVN0cmVhbSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJpY29udi1saXRlIFN0cmVhbWluZyBBUEkgaXMgbm90IGVuYWJsZWQuIFVzZSBpY29udi5lbmFibGVTdHJlYW1pbmdBUEkocmVxdWlyZSgnc3RyZWFtJykpOyB0byBlbmFibGUgaXQuXCIpO1xuICAgIH07XG59XG5cbmlmIChcIlx1MDEwMFwiICE9IFwiXFx1MDEwMFwiKSB7XG4gICAgY29uc29sZS5lcnJvcihcImljb252LWxpdGUgd2FybmluZzoganMgZmlsZXMgdXNlIG5vbi11dGY4IGVuY29kaW5nLiBTZWUgaHR0cHM6Ly9naXRodWIuY29tL2FzaHR1Y2hraW4vaWNvbnYtbGl0ZS93aWtpL0phdmFzY3JpcHQtc291cmNlLWZpbGUtZW5jb2RpbmdzIGZvciBtb3JlIGluZm8uXCIpO1xufVxuIiwgIltcbiAgXCJVVEYtOFwiLFxuICBcIklCTTg2NlwiLFxuICBcIklTTy04ODU5LTJcIixcbiAgXCJJU08tODg1OS0zXCIsXG4gIFwiSVNPLTg4NTktNFwiLFxuICBcIklTTy04ODU5LTVcIixcbiAgXCJJU08tODg1OS02XCIsXG4gIFwiSVNPLTg4NTktN1wiLFxuICBcIklTTy04ODU5LThcIixcbiAgXCJJU08tODg1OS0xMFwiLFxuICBcIklTTy04ODU5LTEzXCIsXG4gIFwiSVNPLTg4NTktMTRcIixcbiAgXCJJU08tODg1OS0xNVwiLFxuICBcIklTTy04ODU5LTE2XCIsXG4gIFwiS09JOC1SXCIsXG4gIFwiS09JOC1VXCIsXG4gIFwibWFjaW50b3NoXCIsXG4gIFwid2luZG93cy04NzRcIixcbiAgXCJ3aW5kb3dzLTEyNTBcIixcbiAgXCJ3aW5kb3dzLTEyNTFcIixcbiAgXCJ3aW5kb3dzLTEyNTJcIixcbiAgXCJ3aW5kb3dzLTEyNTNcIixcbiAgXCJ3aW5kb3dzLTEyNTRcIixcbiAgXCJ3aW5kb3dzLTEyNTVcIixcbiAgXCJ3aW5kb3dzLTEyNTZcIixcbiAgXCJ3aW5kb3dzLTEyNTdcIixcbiAgXCJ3aW5kb3dzLTEyNThcIixcbiAgXCJHQktcIixcbiAgXCJnYjE4MDMwXCIsXG4gIFwiQmlnNVwiLFxuICBcIkVVQy1KUFwiLFxuICBcIlNoaWZ0X0pJU1wiLFxuICBcIkVVQy1LUlwiLFxuICBcIlVURi0xNkJFXCIsXG4gIFwiVVRGLTE2TEVcIixcbiAgXCJ4LXVzZXItZGVmaW5lZFwiXG5dIiwgIntcbiAgXCI4NjZcIjogXCJJQk04NjZcIixcbiAgXCJ1bmljb2RlLTEtMS11dGYtOFwiOiBcIlVURi04XCIsXG4gIFwidW5pY29kZTExdXRmOFwiOiBcIlVURi04XCIsXG4gIFwidW5pY29kZTIwdXRmOFwiOiBcIlVURi04XCIsXG4gIFwidXRmLThcIjogXCJVVEYtOFwiLFxuICBcInV0ZjhcIjogXCJVVEYtOFwiLFxuICBcIngtdW5pY29kZTIwdXRmOFwiOiBcIlVURi04XCIsXG4gIFwiY3A4NjZcIjogXCJJQk04NjZcIixcbiAgXCJjc2libTg2NlwiOiBcIklCTTg2NlwiLFxuICBcImlibTg2NlwiOiBcIklCTTg2NlwiLFxuICBcImNzaXNvbGF0aW4yXCI6IFwiSVNPLTg4NTktMlwiLFxuICBcImlzby04ODU5LTJcIjogXCJJU08tODg1OS0yXCIsXG4gIFwiaXNvLWlyLTEwMVwiOiBcIklTTy04ODU5LTJcIixcbiAgXCJpc284ODU5LTJcIjogXCJJU08tODg1OS0yXCIsXG4gIFwiaXNvODg1OTJcIjogXCJJU08tODg1OS0yXCIsXG4gIFwiaXNvXzg4NTktMlwiOiBcIklTTy04ODU5LTJcIixcbiAgXCJpc29fODg1OS0yOjE5ODdcIjogXCJJU08tODg1OS0yXCIsXG4gIFwibDJcIjogXCJJU08tODg1OS0yXCIsXG4gIFwibGF0aW4yXCI6IFwiSVNPLTg4NTktMlwiLFxuICBcImNzaXNvbGF0aW4zXCI6IFwiSVNPLTg4NTktM1wiLFxuICBcImlzby04ODU5LTNcIjogXCJJU08tODg1OS0zXCIsXG4gIFwiaXNvLWlyLTEwOVwiOiBcIklTTy04ODU5LTNcIixcbiAgXCJpc284ODU5LTNcIjogXCJJU08tODg1OS0zXCIsXG4gIFwiaXNvODg1OTNcIjogXCJJU08tODg1OS0zXCIsXG4gIFwiaXNvXzg4NTktM1wiOiBcIklTTy04ODU5LTNcIixcbiAgXCJpc29fODg1OS0zOjE5ODhcIjogXCJJU08tODg1OS0zXCIsXG4gIFwibDNcIjogXCJJU08tODg1OS0zXCIsXG4gIFwibGF0aW4zXCI6IFwiSVNPLTg4NTktM1wiLFxuICBcImNzaXNvbGF0aW40XCI6IFwiSVNPLTg4NTktNFwiLFxuICBcImlzby04ODU5LTRcIjogXCJJU08tODg1OS00XCIsXG4gIFwiaXNvLWlyLTExMFwiOiBcIklTTy04ODU5LTRcIixcbiAgXCJpc284ODU5LTRcIjogXCJJU08tODg1OS00XCIsXG4gIFwiaXNvODg1OTRcIjogXCJJU08tODg1OS00XCIsXG4gIFwiaXNvXzg4NTktNFwiOiBcIklTTy04ODU5LTRcIixcbiAgXCJpc29fODg1OS00OjE5ODhcIjogXCJJU08tODg1OS00XCIsXG4gIFwibDRcIjogXCJJU08tODg1OS00XCIsXG4gIFwibGF0aW40XCI6IFwiSVNPLTg4NTktNFwiLFxuICBcImNzaXNvbGF0aW5jeXJpbGxpY1wiOiBcIklTTy04ODU5LTVcIixcbiAgXCJjeXJpbGxpY1wiOiBcIklTTy04ODU5LTVcIixcbiAgXCJpc28tODg1OS01XCI6IFwiSVNPLTg4NTktNVwiLFxuICBcImlzby1pci0xNDRcIjogXCJJU08tODg1OS01XCIsXG4gIFwiaXNvODg1OS01XCI6IFwiSVNPLTg4NTktNVwiLFxuICBcImlzbzg4NTk1XCI6IFwiSVNPLTg4NTktNVwiLFxuICBcImlzb184ODU5LTVcIjogXCJJU08tODg1OS01XCIsXG4gIFwiaXNvXzg4NTktNToxOTg4XCI6IFwiSVNPLTg4NTktNVwiLFxuICBcImFyYWJpY1wiOiBcIklTTy04ODU5LTZcIixcbiAgXCJhc21vLTcwOFwiOiBcIklTTy04ODU5LTZcIixcbiAgXCJjc2lzbzg4NTk2ZVwiOiBcIklTTy04ODU5LTZcIixcbiAgXCJjc2lzbzg4NTk2aVwiOiBcIklTTy04ODU5LTZcIixcbiAgXCJjc2lzb2xhdGluYXJhYmljXCI6IFwiSVNPLTg4NTktNlwiLFxuICBcImVjbWEtMTE0XCI6IFwiSVNPLTg4NTktNlwiLFxuICBcImlzby04ODU5LTZcIjogXCJJU08tODg1OS02XCIsXG4gIFwiaXNvLTg4NTktNi1lXCI6IFwiSVNPLTg4NTktNlwiLFxuICBcImlzby04ODU5LTYtaVwiOiBcIklTTy04ODU5LTZcIixcbiAgXCJpc28taXItMTI3XCI6IFwiSVNPLTg4NTktNlwiLFxuICBcImlzbzg4NTktNlwiOiBcIklTTy04ODU5LTZcIixcbiAgXCJpc284ODU5NlwiOiBcIklTTy04ODU5LTZcIixcbiAgXCJpc29fODg1OS02XCI6IFwiSVNPLTg4NTktNlwiLFxuICBcImlzb184ODU5LTY6MTk4N1wiOiBcIklTTy04ODU5LTZcIixcbiAgXCJjc2lzb2xhdGluZ3JlZWtcIjogXCJJU08tODg1OS03XCIsXG4gIFwiZWNtYS0xMThcIjogXCJJU08tODg1OS03XCIsXG4gIFwiZWxvdF85MjhcIjogXCJJU08tODg1OS03XCIsXG4gIFwiZ3JlZWtcIjogXCJJU08tODg1OS03XCIsXG4gIFwiZ3JlZWs4XCI6IFwiSVNPLTg4NTktN1wiLFxuICBcImlzby04ODU5LTdcIjogXCJJU08tODg1OS03XCIsXG4gIFwiaXNvLWlyLTEyNlwiOiBcIklTTy04ODU5LTdcIixcbiAgXCJpc284ODU5LTdcIjogXCJJU08tODg1OS03XCIsXG4gIFwiaXNvODg1OTdcIjogXCJJU08tODg1OS03XCIsXG4gIFwiaXNvXzg4NTktN1wiOiBcIklTTy04ODU5LTdcIixcbiAgXCJpc29fODg1OS03OjE5ODdcIjogXCJJU08tODg1OS03XCIsXG4gIFwic3VuX2V1X2dyZWVrXCI6IFwiSVNPLTg4NTktN1wiLFxuICBcImNzaXNvODg1OThlXCI6IFwiSVNPLTg4NTktOFwiLFxuICBcImNzaXNvbGF0aW5oZWJyZXdcIjogXCJJU08tODg1OS04XCIsXG4gIFwiaGVicmV3XCI6IFwiSVNPLTg4NTktOFwiLFxuICBcImlzby04ODU5LThcIjogXCJJU08tODg1OS04XCIsXG4gIFwiaXNvLTg4NTktOC1lXCI6IFwiSVNPLTg4NTktOFwiLFxuICBcImlzby1pci0xMzhcIjogXCJJU08tODg1OS04XCIsXG4gIFwiaXNvODg1OS04XCI6IFwiSVNPLTg4NTktOFwiLFxuICBcImlzbzg4NTk4XCI6IFwiSVNPLTg4NTktOFwiLFxuICBcImlzb184ODU5LThcIjogXCJJU08tODg1OS04XCIsXG4gIFwiaXNvXzg4NTktODoxOTg4XCI6IFwiSVNPLTg4NTktOFwiLFxuICBcInZpc3VhbFwiOiBcIklTTy04ODU5LThcIixcbiAgXCJjc2lzb2xhdGluNlwiOiBcIklTTy04ODU5LTEwXCIsXG4gIFwiaXNvLTg4NTktMTBcIjogXCJJU08tODg1OS0xMFwiLFxuICBcImlzby1pci0xNTdcIjogXCJJU08tODg1OS0xMFwiLFxuICBcImlzbzg4NTktMTBcIjogXCJJU08tODg1OS0xMFwiLFxuICBcImlzbzg4NTkxMFwiOiBcIklTTy04ODU5LTEwXCIsXG4gIFwibDZcIjogXCJJU08tODg1OS0xMFwiLFxuICBcImxhdGluNlwiOiBcIklTTy04ODU5LTEwXCIsXG4gIFwiaXNvLTg4NTktMTNcIjogXCJJU08tODg1OS0xM1wiLFxuICBcImlzbzg4NTktMTNcIjogXCJJU08tODg1OS0xM1wiLFxuICBcImlzbzg4NTkxM1wiOiBcIklTTy04ODU5LTEzXCIsXG4gIFwiaXNvLTg4NTktMTRcIjogXCJJU08tODg1OS0xNFwiLFxuICBcImlzbzg4NTktMTRcIjogXCJJU08tODg1OS0xNFwiLFxuICBcImlzbzg4NTkxNFwiOiBcIklTTy04ODU5LTE0XCIsXG4gIFwiY3Npc29sYXRpbjlcIjogXCJJU08tODg1OS0xNVwiLFxuICBcImlzby04ODU5LTE1XCI6IFwiSVNPLTg4NTktMTVcIixcbiAgXCJpc284ODU5LTE1XCI6IFwiSVNPLTg4NTktMTVcIixcbiAgXCJpc284ODU5MTVcIjogXCJJU08tODg1OS0xNVwiLFxuICBcImlzb184ODU5LTE1XCI6IFwiSVNPLTg4NTktMTVcIixcbiAgXCJsOVwiOiBcIklTTy04ODU5LTE1XCIsXG4gIFwiaXNvLTg4NTktMTZcIjogXCJJU08tODg1OS0xNlwiLFxuICBcImNza29pOHJcIjogXCJLT0k4LVJcIixcbiAgXCJrb2lcIjogXCJLT0k4LVJcIixcbiAgXCJrb2k4XCI6IFwiS09JOC1SXCIsXG4gIFwia29pOC1yXCI6IFwiS09JOC1SXCIsXG4gIFwia29pOF9yXCI6IFwiS09JOC1SXCIsXG4gIFwia29pOC1ydVwiOiBcIktPSTgtVVwiLFxuICBcImtvaTgtdVwiOiBcIktPSTgtVVwiLFxuICBcImNzbWFjaW50b3NoXCI6IFwibWFjaW50b3NoXCIsXG4gIFwibWFjXCI6IFwibWFjaW50b3NoXCIsXG4gIFwibWFjaW50b3NoXCI6IFwibWFjaW50b3NoXCIsXG4gIFwieC1tYWMtcm9tYW5cIjogXCJtYWNpbnRvc2hcIixcbiAgXCJkb3MtODc0XCI6IFwid2luZG93cy04NzRcIixcbiAgXCJpc28tODg1OS0xMVwiOiBcIndpbmRvd3MtODc0XCIsXG4gIFwiaXNvODg1OS0xMVwiOiBcIndpbmRvd3MtODc0XCIsXG4gIFwiaXNvODg1OTExXCI6IFwid2luZG93cy04NzRcIixcbiAgXCJ0aXMtNjIwXCI6IFwid2luZG93cy04NzRcIixcbiAgXCJ3aW5kb3dzLTg3NFwiOiBcIndpbmRvd3MtODc0XCIsXG4gIFwiY3AxMjUwXCI6IFwid2luZG93cy0xMjUwXCIsXG4gIFwid2luZG93cy0xMjUwXCI6IFwid2luZG93cy0xMjUwXCIsXG4gIFwieC1jcDEyNTBcIjogXCJ3aW5kb3dzLTEyNTBcIixcbiAgXCJjcDEyNTFcIjogXCJ3aW5kb3dzLTEyNTFcIixcbiAgXCJ3aW5kb3dzLTEyNTFcIjogXCJ3aW5kb3dzLTEyNTFcIixcbiAgXCJ4LWNwMTI1MVwiOiBcIndpbmRvd3MtMTI1MVwiLFxuICBcImFuc2lfeDMuNC0xOTY4XCI6IFwid2luZG93cy0xMjUyXCIsXG4gIFwiYXNjaWlcIjogXCJ3aW5kb3dzLTEyNTJcIixcbiAgXCJjcDEyNTJcIjogXCJ3aW5kb3dzLTEyNTJcIixcbiAgXCJjcDgxOVwiOiBcIndpbmRvd3MtMTI1MlwiLFxuICBcImNzaXNvbGF0aW4xXCI6IFwid2luZG93cy0xMjUyXCIsXG4gIFwiaWJtODE5XCI6IFwid2luZG93cy0xMjUyXCIsXG4gIFwiaXNvLTg4NTktMVwiOiBcIndpbmRvd3MtMTI1MlwiLFxuICBcImlzby1pci0xMDBcIjogXCJ3aW5kb3dzLTEyNTJcIixcbiAgXCJpc284ODU5LTFcIjogXCJ3aW5kb3dzLTEyNTJcIixcbiAgXCJpc284ODU5MVwiOiBcIndpbmRvd3MtMTI1MlwiLFxuICBcImlzb184ODU5LTFcIjogXCJ3aW5kb3dzLTEyNTJcIixcbiAgXCJpc29fODg1OS0xOjE5ODdcIjogXCJ3aW5kb3dzLTEyNTJcIixcbiAgXCJsMVwiOiBcIndpbmRvd3MtMTI1MlwiLFxuICBcImxhdGluMVwiOiBcIndpbmRvd3MtMTI1MlwiLFxuICBcInVzLWFzY2lpXCI6IFwid2luZG93cy0xMjUyXCIsXG4gIFwid2luZG93cy0xMjUyXCI6IFwid2luZG93cy0xMjUyXCIsXG4gIFwieC1jcDEyNTJcIjogXCJ3aW5kb3dzLTEyNTJcIixcbiAgXCJjcDEyNTNcIjogXCJ3aW5kb3dzLTEyNTNcIixcbiAgXCJ3aW5kb3dzLTEyNTNcIjogXCJ3aW5kb3dzLTEyNTNcIixcbiAgXCJ4LWNwMTI1M1wiOiBcIndpbmRvd3MtMTI1M1wiLFxuICBcImNwMTI1NFwiOiBcIndpbmRvd3MtMTI1NFwiLFxuICBcImNzaXNvbGF0aW41XCI6IFwid2luZG93cy0xMjU0XCIsXG4gIFwiaXNvLTg4NTktOVwiOiBcIndpbmRvd3MtMTI1NFwiLFxuICBcImlzby1pci0xNDhcIjogXCJ3aW5kb3dzLTEyNTRcIixcbiAgXCJpc284ODU5LTlcIjogXCJ3aW5kb3dzLTEyNTRcIixcbiAgXCJpc284ODU5OVwiOiBcIndpbmRvd3MtMTI1NFwiLFxuICBcImlzb184ODU5LTlcIjogXCJ3aW5kb3dzLTEyNTRcIixcbiAgXCJpc29fODg1OS05OjE5ODlcIjogXCJ3aW5kb3dzLTEyNTRcIixcbiAgXCJsNVwiOiBcIndpbmRvd3MtMTI1NFwiLFxuICBcImxhdGluNVwiOiBcIndpbmRvd3MtMTI1NFwiLFxuICBcIndpbmRvd3MtMTI1NFwiOiBcIndpbmRvd3MtMTI1NFwiLFxuICBcIngtY3AxMjU0XCI6IFwid2luZG93cy0xMjU0XCIsXG4gIFwiY3AxMjU1XCI6IFwid2luZG93cy0xMjU1XCIsXG4gIFwid2luZG93cy0xMjU1XCI6IFwid2luZG93cy0xMjU1XCIsXG4gIFwieC1jcDEyNTVcIjogXCJ3aW5kb3dzLTEyNTVcIixcbiAgXCJjcDEyNTZcIjogXCJ3aW5kb3dzLTEyNTZcIixcbiAgXCJ3aW5kb3dzLTEyNTZcIjogXCJ3aW5kb3dzLTEyNTZcIixcbiAgXCJ4LWNwMTI1NlwiOiBcIndpbmRvd3MtMTI1NlwiLFxuICBcImNwMTI1N1wiOiBcIndpbmRvd3MtMTI1N1wiLFxuICBcIndpbmRvd3MtMTI1N1wiOiBcIndpbmRvd3MtMTI1N1wiLFxuICBcIngtY3AxMjU3XCI6IFwid2luZG93cy0xMjU3XCIsXG4gIFwiY3AxMjU4XCI6IFwid2luZG93cy0xMjU4XCIsXG4gIFwid2luZG93cy0xMjU4XCI6IFwid2luZG93cy0xMjU4XCIsXG4gIFwieC1jcDEyNThcIjogXCJ3aW5kb3dzLTEyNThcIixcbiAgXCJjaGluZXNlXCI6IFwiR0JLXCIsXG4gIFwiY3NnYjIzMTJcIjogXCJHQktcIixcbiAgXCJjc2lzbzU4Z2IyMzEyODBcIjogXCJHQktcIixcbiAgXCJnYjIzMTJcIjogXCJHQktcIixcbiAgXCJnYl8yMzEyXCI6IFwiR0JLXCIsXG4gIFwiZ2JfMjMxMi04MFwiOiBcIkdCS1wiLFxuICBcImdia1wiOiBcIkdCS1wiLFxuICBcImlzby1pci01OFwiOiBcIkdCS1wiLFxuICBcIngtZ2JrXCI6IFwiR0JLXCIsXG4gIFwiZ2IxODAzMFwiOiBcImdiMTgwMzBcIixcbiAgXCJiaWc1XCI6IFwiQmlnNVwiLFxuICBcImJpZzUtaGtzY3NcIjogXCJCaWc1XCIsXG4gIFwiY24tYmlnNVwiOiBcIkJpZzVcIixcbiAgXCJjc2JpZzVcIjogXCJCaWc1XCIsXG4gIFwieC14LWJpZzVcIjogXCJCaWc1XCIsXG4gIFwiY3NldWNwa2RmbXRqYXBhbmVzZVwiOiBcIkVVQy1KUFwiLFxuICBcImV1Yy1qcFwiOiBcIkVVQy1KUFwiLFxuICBcIngtZXVjLWpwXCI6IFwiRVVDLUpQXCIsXG4gIFwiY3NzaGlmdGppc1wiOiBcIlNoaWZ0X0pJU1wiLFxuICBcIm1zOTMyXCI6IFwiU2hpZnRfSklTXCIsXG4gIFwibXNfa2FuamlcIjogXCJTaGlmdF9KSVNcIixcbiAgXCJzaGlmdC1qaXNcIjogXCJTaGlmdF9KSVNcIixcbiAgXCJzaGlmdF9qaXNcIjogXCJTaGlmdF9KSVNcIixcbiAgXCJzamlzXCI6IFwiU2hpZnRfSklTXCIsXG4gIFwid2luZG93cy0zMWpcIjogXCJTaGlmdF9KSVNcIixcbiAgXCJ4LXNqaXNcIjogXCJTaGlmdF9KSVNcIixcbiAgXCJjc2V1Y2tyXCI6IFwiRVVDLUtSXCIsXG4gIFwiY3Nrc2M1NjAxMTk4N1wiOiBcIkVVQy1LUlwiLFxuICBcImV1Yy1rclwiOiBcIkVVQy1LUlwiLFxuICBcImlzby1pci0xNDlcIjogXCJFVUMtS1JcIixcbiAgXCJrb3JlYW5cIjogXCJFVUMtS1JcIixcbiAgXCJrc19jXzU2MDEtMTk4N1wiOiBcIkVVQy1LUlwiLFxuICBcImtzX2NfNTYwMS0xOTg5XCI6IFwiRVVDLUtSXCIsXG4gIFwia3NjNTYwMVwiOiBcIkVVQy1LUlwiLFxuICBcImtzY181NjAxXCI6IFwiRVVDLUtSXCIsXG4gIFwid2luZG93cy05NDlcIjogXCJFVUMtS1JcIixcbiAgXCJ1bmljb2RlZmZmZVwiOiBcIlVURi0xNkJFXCIsXG4gIFwidXRmLTE2YmVcIjogXCJVVEYtMTZCRVwiLFxuICBcImNzdW5pY29kZVwiOiBcIlVURi0xNkxFXCIsXG4gIFwiaXNvLTEwNjQ2LXVjcy0yXCI6IFwiVVRGLTE2TEVcIixcbiAgXCJ1Y3MtMlwiOiBcIlVURi0xNkxFXCIsXG4gIFwidW5pY29kZVwiOiBcIlVURi0xNkxFXCIsXG4gIFwidW5pY29kZWZlZmZcIjogXCJVVEYtMTZMRVwiLFxuICBcInV0Zi0xNlwiOiBcIlVURi0xNkxFXCIsXG4gIFwidXRmLTE2bGVcIjogXCJVVEYtMTZMRVwiLFxuICBcIngtdXNlci1kZWZpbmVkXCI6IFwieC11c2VyLWRlZmluZWRcIlxufSIsICJcInVzZSBzdHJpY3RcIjtcbmNvbnN0IGljb252TGl0ZSA9IHJlcXVpcmUoXCJpY29udi1saXRlXCIpO1xuY29uc3Qgc3VwcG9ydGVkTmFtZXMgPSByZXF1aXJlKFwiLi9zdXBwb3J0ZWQtbmFtZXMuanNvblwiKTtcbmNvbnN0IGxhYmVsc1RvTmFtZXMgPSByZXF1aXJlKFwiLi9sYWJlbHMtdG8tbmFtZXMuanNvblwiKTtcblxuY29uc3Qgc3VwcG9ydGVkTmFtZXNTZXQgPSBuZXcgU2V0KHN1cHBvcnRlZE5hbWVzKTtcblxuLy8gaHR0cHM6Ly9lbmNvZGluZy5zcGVjLndoYXR3Zy5vcmcvI2NvbmNlcHQtZW5jb2RpbmctZ2V0XG5leHBvcnRzLmxhYmVsVG9OYW1lID0gbGFiZWwgPT4ge1xuICBsYWJlbCA9IFN0cmluZyhsYWJlbCkudHJpbSgpLnRvTG93ZXJDYXNlKCk7XG5cbiAgcmV0dXJuIGxhYmVsc1RvTmFtZXNbbGFiZWxdIHx8IG51bGw7XG59O1xuXG4vLyBodHRwczovL2VuY29kaW5nLnNwZWMud2hhdHdnLm9yZy8jZGVjb2RlXG5leHBvcnRzLmRlY29kZSA9ICh1aW50OEFycmF5LCBmYWxsYmFja0VuY29kaW5nTmFtZSkgPT4ge1xuICBsZXQgZW5jb2RpbmcgPSBmYWxsYmFja0VuY29kaW5nTmFtZTtcbiAgaWYgKCFleHBvcnRzLmlzU3VwcG9ydGVkKGVuY29kaW5nKSkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKGBcIiR7ZW5jb2Rpbmd9XCIgaXMgbm90IGEgc3VwcG9ydGVkIGVuY29kaW5nIG5hbWVgKTtcbiAgfVxuXG4gIGNvbnN0IGJvbUVuY29kaW5nID0gZXhwb3J0cy5nZXRCT01FbmNvZGluZyh1aW50OEFycmF5KTtcbiAgaWYgKGJvbUVuY29kaW5nICE9PSBudWxsKSB7XG4gICAgZW5jb2RpbmcgPSBib21FbmNvZGluZztcbiAgICAvLyBpY29udi1saXRlIHdpbGwgc3RyaXAgQk9NcyBmb3IgdXMsIHNvIG5vIG5lZWQgdG8gZG8gdGhlIGV4dHJhIGJ5dGUgcmVtb3ZhbCB0aGF0IHRoZSBzcGVjIGRvZXMuXG4gICAgLy8gTm90ZSB0aGF0IHdlIHdvbid0IGVuZCB1cCBpbiB0aGUgeC11c2VyLWRlZmluZWQgY2FzZSB3aGVuIHRoZXJlJ3MgYSBib21FbmNvZGluZy5cbiAgfVxuXG4gIGlmIChlbmNvZGluZyA9PT0gXCJ4LXVzZXItZGVmaW5lZFwiKSB7XG4gICAgLy8gaHR0cHM6Ly9lbmNvZGluZy5zcGVjLndoYXR3Zy5vcmcvI3gtdXNlci1kZWZpbmVkLWRlY29kZXJcbiAgICBsZXQgcmVzdWx0ID0gXCJcIjtcbiAgICBmb3IgKGNvbnN0IGJ5dGUgb2YgdWludDhBcnJheSkge1xuICAgICAgaWYgKGJ5dGUgPD0gMHg3Rikge1xuICAgICAgICByZXN1bHQgKz0gU3RyaW5nLmZyb21Db2RlUG9pbnQoYnl0ZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXN1bHQgKz0gU3RyaW5nLmZyb21Db2RlUG9pbnQoMHhGNzgwICsgYnl0ZSAtIDB4ODApO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgcmV0dXJuIGljb252TGl0ZS5kZWNvZGUodWludDhBcnJheSwgZW5jb2RpbmcpO1xufTtcblxuLy8gaHR0cHM6Ly9naXRodWIuY29tL3doYXR3Zy9odG1sL2lzc3Vlcy8xOTEwI2lzc3VlY29tbWVudC0yNTQwMTczNjlcbmV4cG9ydHMuZ2V0Qk9NRW5jb2RpbmcgPSB1aW50OEFycmF5ID0+IHtcbiAgaWYgKHVpbnQ4QXJyYXlbMF0gPT09IDB4RkUgJiYgdWludDhBcnJheVsxXSA9PT0gMHhGRikge1xuICAgIHJldHVybiBcIlVURi0xNkJFXCI7XG4gIH0gZWxzZSBpZiAodWludDhBcnJheVswXSA9PT0gMHhGRiAmJiB1aW50OEFycmF5WzFdID09PSAweEZFKSB7XG4gICAgcmV0dXJuIFwiVVRGLTE2TEVcIjtcbiAgfSBlbHNlIGlmICh1aW50OEFycmF5WzBdID09PSAweEVGICYmIHVpbnQ4QXJyYXlbMV0gPT09IDB4QkIgJiYgdWludDhBcnJheVsyXSA9PT0gMHhCRikge1xuICAgIHJldHVybiBcIlVURi04XCI7XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn07XG5cbmV4cG9ydHMuaXNTdXBwb3J0ZWQgPSBuYW1lID0+IHtcbiAgcmV0dXJuIHN1cHBvcnRlZE5hbWVzU2V0LmhhcyhTdHJpbmcobmFtZSkpO1xufTtcbiIsIG51bGwsIG51bGwsICJtb2R1bGUuZXhwb3J0cyA9IHtcbiAga0Nsb3NlOiBTeW1ib2woJ2Nsb3NlJyksXG4gIGtEZXN0cm95OiBTeW1ib2woJ2Rlc3Ryb3knKSxcbiAga0Rpc3BhdGNoOiBTeW1ib2woJ2Rpc3BhdGNoJyksXG4gIGtVcmw6IFN5bWJvbCgndXJsJyksXG4gIGtXcml0aW5nOiBTeW1ib2woJ3dyaXRpbmcnKSxcbiAga1Jlc3VtaW5nOiBTeW1ib2woJ3Jlc3VtaW5nJyksXG4gIGtRdWV1ZTogU3ltYm9sKCdxdWV1ZScpLFxuICBrQ29ubmVjdDogU3ltYm9sKCdjb25uZWN0JyksXG4gIGtDb25uZWN0aW5nOiBTeW1ib2woJ2Nvbm5lY3RpbmcnKSxcbiAga0tlZXBBbGl2ZURlZmF1bHRUaW1lb3V0OiBTeW1ib2woJ2RlZmF1bHQga2VlcCBhbGl2ZSB0aW1lb3V0JyksXG4gIGtLZWVwQWxpdmVNYXhUaW1lb3V0OiBTeW1ib2woJ21heCBrZWVwIGFsaXZlIHRpbWVvdXQnKSxcbiAga0tlZXBBbGl2ZVRpbWVvdXRUaHJlc2hvbGQ6IFN5bWJvbCgna2VlcCBhbGl2ZSB0aW1lb3V0IHRocmVzaG9sZCcpLFxuICBrS2VlcEFsaXZlVGltZW91dFZhbHVlOiBTeW1ib2woJ2tlZXAgYWxpdmUgdGltZW91dCcpLFxuICBrS2VlcEFsaXZlOiBTeW1ib2woJ2tlZXAgYWxpdmUnKSxcbiAga0hlYWRlcnNUaW1lb3V0OiBTeW1ib2woJ2hlYWRlcnMgdGltZW91dCcpLFxuICBrQm9keVRpbWVvdXQ6IFN5bWJvbCgnYm9keSB0aW1lb3V0JyksXG4gIGtTZXJ2ZXJOYW1lOiBTeW1ib2woJ3NlcnZlciBuYW1lJyksXG4gIGtMb2NhbEFkZHJlc3M6IFN5bWJvbCgnbG9jYWwgYWRkcmVzcycpLFxuICBrSG9zdDogU3ltYm9sKCdob3N0JyksXG4gIGtOb1JlZjogU3ltYm9sKCdubyByZWYnKSxcbiAga0JvZHlVc2VkOiBTeW1ib2woJ3VzZWQnKSxcbiAga0JvZHk6IFN5bWJvbCgnYWJzdHJhY3RlZCByZXF1ZXN0IGJvZHknKSxcbiAga1J1bm5pbmc6IFN5bWJvbCgncnVubmluZycpLFxuICBrQmxvY2tpbmc6IFN5bWJvbCgnYmxvY2tpbmcnKSxcbiAga1BlbmRpbmc6IFN5bWJvbCgncGVuZGluZycpLFxuICBrU2l6ZTogU3ltYm9sKCdzaXplJyksXG4gIGtCdXN5OiBTeW1ib2woJ2J1c3knKSxcbiAga1F1ZXVlZDogU3ltYm9sKCdxdWV1ZWQnKSxcbiAga0ZyZWU6IFN5bWJvbCgnZnJlZScpLFxuICBrQ29ubmVjdGVkOiBTeW1ib2woJ2Nvbm5lY3RlZCcpLFxuICBrQ2xvc2VkOiBTeW1ib2woJ2Nsb3NlZCcpLFxuICBrTmVlZERyYWluOiBTeW1ib2woJ25lZWQgZHJhaW4nKSxcbiAga1Jlc2V0OiBTeW1ib2woJ3Jlc2V0JyksXG4gIGtEZXN0cm95ZWQ6IFN5bWJvbC5mb3IoJ25vZGVqcy5zdHJlYW0uZGVzdHJveWVkJyksXG4gIGtSZXN1bWU6IFN5bWJvbCgncmVzdW1lJyksXG4gIGtPbkVycm9yOiBTeW1ib2woJ29uIGVycm9yJyksXG4gIGtNYXhIZWFkZXJzU2l6ZTogU3ltYm9sKCdtYXggaGVhZGVycyBzaXplJyksXG4gIGtSdW5uaW5nSWR4OiBTeW1ib2woJ3J1bm5pbmcgaW5kZXgnKSxcbiAga1BlbmRpbmdJZHg6IFN5bWJvbCgncGVuZGluZyBpbmRleCcpLFxuICBrRXJyb3I6IFN5bWJvbCgnZXJyb3InKSxcbiAga0NsaWVudHM6IFN5bWJvbCgnY2xpZW50cycpLFxuICBrQ2xpZW50OiBTeW1ib2woJ2NsaWVudCcpLFxuICBrUGFyc2VyOiBTeW1ib2woJ3BhcnNlcicpLFxuICBrT25EZXN0cm95ZWQ6IFN5bWJvbCgnZGVzdHJveSBjYWxsYmFja3MnKSxcbiAga1BpcGVsaW5pbmc6IFN5bWJvbCgncGlwZWxpbmluZycpLFxuICBrU29ja2V0OiBTeW1ib2woJ3NvY2tldCcpLFxuICBrSG9zdEhlYWRlcjogU3ltYm9sKCdob3N0IGhlYWRlcicpLFxuICBrQ29ubmVjdG9yOiBTeW1ib2woJ2Nvbm5lY3RvcicpLFxuICBrU3RyaWN0Q29udGVudExlbmd0aDogU3ltYm9sKCdzdHJpY3QgY29udGVudCBsZW5ndGgnKSxcbiAga01heFJlZGlyZWN0aW9uczogU3ltYm9sKCdtYXhSZWRpcmVjdGlvbnMnKSxcbiAga01heFJlcXVlc3RzOiBTeW1ib2woJ21heFJlcXVlc3RzUGVyQ2xpZW50JyksXG4gIGtQcm94eTogU3ltYm9sKCdwcm94eSBhZ2VudCBvcHRpb25zJyksXG4gIGtDb3VudGVyOiBTeW1ib2woJ3NvY2tldCByZXF1ZXN0IGNvdW50ZXInKSxcbiAga0ludGVyY2VwdG9yczogU3ltYm9sKCdkaXNwYXRjaCBpbnRlcmNlcHRvcnMnKSxcbiAga01heFJlc3BvbnNlU2l6ZTogU3ltYm9sKCdtYXggcmVzcG9uc2Ugc2l6ZScpLFxuICBrSFRUUDJTZXNzaW9uOiBTeW1ib2woJ2h0dHAyU2Vzc2lvbicpLFxuICBrSFRUUDJTZXNzaW9uU3RhdGU6IFN5bWJvbCgnaHR0cDJTZXNzaW9uIHN0YXRlJyksXG4gIGtSZXRyeUhhbmRsZXJEZWZhdWx0UmV0cnk6IFN5bWJvbCgncmV0cnkgYWdlbnQgZGVmYXVsdCByZXRyeScpLFxuICBrQ29uc3RydWN0OiBTeW1ib2woJ2NvbnN0cnVjdGFibGUnKSxcbiAga0xpc3RlbmVyczogU3ltYm9sKCdsaXN0ZW5lcnMnKSxcbiAga0hUVFBDb250ZXh0OiBTeW1ib2woJ2h0dHAgY29udGV4dCcpLFxuICBrTWF4Q29uY3VycmVudFN0cmVhbXM6IFN5bWJvbCgnbWF4IGNvbmN1cnJlbnQgc3RyZWFtcycpLFxuICBrTm9Qcm94eUFnZW50OiBTeW1ib2woJ25vIHByb3h5IGFnZW50JyksXG4gIGtIdHRwUHJveHlBZ2VudDogU3ltYm9sKCdodHRwIHByb3h5IGFnZW50JyksXG4gIGtIdHRwc1Byb3h5QWdlbnQ6IFN5bWJvbCgnaHR0cHMgcHJveHkgYWdlbnQnKVxufVxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jbGFzcyBVbmRpY2lFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgY29uc3RydWN0b3IgKG1lc3NhZ2UpIHtcbiAgICBzdXBlcihtZXNzYWdlKVxuICAgIHRoaXMubmFtZSA9ICdVbmRpY2lFcnJvcidcbiAgICB0aGlzLmNvZGUgPSAnVU5EX0VSUidcbiAgfVxufVxuXG5jbGFzcyBDb25uZWN0VGltZW91dEVycm9yIGV4dGVuZHMgVW5kaWNpRXJyb3Ige1xuICBjb25zdHJ1Y3RvciAobWVzc2FnZSkge1xuICAgIHN1cGVyKG1lc3NhZ2UpXG4gICAgdGhpcy5uYW1lID0gJ0Nvbm5lY3RUaW1lb3V0RXJyb3InXG4gICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZSB8fCAnQ29ubmVjdCBUaW1lb3V0IEVycm9yJ1xuICAgIHRoaXMuY29kZSA9ICdVTkRfRVJSX0NPTk5FQ1RfVElNRU9VVCdcbiAgfVxufVxuXG5jbGFzcyBIZWFkZXJzVGltZW91dEVycm9yIGV4dGVuZHMgVW5kaWNpRXJyb3Ige1xuICBjb25zdHJ1Y3RvciAobWVzc2FnZSkge1xuICAgIHN1cGVyKG1lc3NhZ2UpXG4gICAgdGhpcy5uYW1lID0gJ0hlYWRlcnNUaW1lb3V0RXJyb3InXG4gICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZSB8fCAnSGVhZGVycyBUaW1lb3V0IEVycm9yJ1xuICAgIHRoaXMuY29kZSA9ICdVTkRfRVJSX0hFQURFUlNfVElNRU9VVCdcbiAgfVxufVxuXG5jbGFzcyBIZWFkZXJzT3ZlcmZsb3dFcnJvciBleHRlbmRzIFVuZGljaUVycm9yIHtcbiAgY29uc3RydWN0b3IgKG1lc3NhZ2UpIHtcbiAgICBzdXBlcihtZXNzYWdlKVxuICAgIHRoaXMubmFtZSA9ICdIZWFkZXJzT3ZlcmZsb3dFcnJvcidcbiAgICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlIHx8ICdIZWFkZXJzIE92ZXJmbG93IEVycm9yJ1xuICAgIHRoaXMuY29kZSA9ICdVTkRfRVJSX0hFQURFUlNfT1ZFUkZMT1cnXG4gIH1cbn1cblxuY2xhc3MgQm9keVRpbWVvdXRFcnJvciBleHRlbmRzIFVuZGljaUVycm9yIHtcbiAgY29uc3RydWN0b3IgKG1lc3NhZ2UpIHtcbiAgICBzdXBlcihtZXNzYWdlKVxuICAgIHRoaXMubmFtZSA9ICdCb2R5VGltZW91dEVycm9yJ1xuICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2UgfHwgJ0JvZHkgVGltZW91dCBFcnJvcidcbiAgICB0aGlzLmNvZGUgPSAnVU5EX0VSUl9CT0RZX1RJTUVPVVQnXG4gIH1cbn1cblxuY2xhc3MgUmVzcG9uc2VTdGF0dXNDb2RlRXJyb3IgZXh0ZW5kcyBVbmRpY2lFcnJvciB7XG4gIGNvbnN0cnVjdG9yIChtZXNzYWdlLCBzdGF0dXNDb2RlLCBoZWFkZXJzLCBib2R5KSB7XG4gICAgc3VwZXIobWVzc2FnZSlcbiAgICB0aGlzLm5hbWUgPSAnUmVzcG9uc2VTdGF0dXNDb2RlRXJyb3InXG4gICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZSB8fCAnUmVzcG9uc2UgU3RhdHVzIENvZGUgRXJyb3InXG4gICAgdGhpcy5jb2RlID0gJ1VORF9FUlJfUkVTUE9OU0VfU1RBVFVTX0NPREUnXG4gICAgdGhpcy5ib2R5ID0gYm9keVxuICAgIHRoaXMuc3RhdHVzID0gc3RhdHVzQ29kZVxuICAgIHRoaXMuc3RhdHVzQ29kZSA9IHN0YXR1c0NvZGVcbiAgICB0aGlzLmhlYWRlcnMgPSBoZWFkZXJzXG4gIH1cbn1cblxuY2xhc3MgSW52YWxpZEFyZ3VtZW50RXJyb3IgZXh0ZW5kcyBVbmRpY2lFcnJvciB7XG4gIGNvbnN0cnVjdG9yIChtZXNzYWdlKSB7XG4gICAgc3VwZXIobWVzc2FnZSlcbiAgICB0aGlzLm5hbWUgPSAnSW52YWxpZEFyZ3VtZW50RXJyb3InXG4gICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZSB8fCAnSW52YWxpZCBBcmd1bWVudCBFcnJvcidcbiAgICB0aGlzLmNvZGUgPSAnVU5EX0VSUl9JTlZBTElEX0FSRydcbiAgfVxufVxuXG5jbGFzcyBJbnZhbGlkUmV0dXJuVmFsdWVFcnJvciBleHRlbmRzIFVuZGljaUVycm9yIHtcbiAgY29uc3RydWN0b3IgKG1lc3NhZ2UpIHtcbiAgICBzdXBlcihtZXNzYWdlKVxuICAgIHRoaXMubmFtZSA9ICdJbnZhbGlkUmV0dXJuVmFsdWVFcnJvcidcbiAgICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlIHx8ICdJbnZhbGlkIFJldHVybiBWYWx1ZSBFcnJvcidcbiAgICB0aGlzLmNvZGUgPSAnVU5EX0VSUl9JTlZBTElEX1JFVFVSTl9WQUxVRSdcbiAgfVxufVxuXG5jbGFzcyBBYm9ydEVycm9yIGV4dGVuZHMgVW5kaWNpRXJyb3Ige1xuICBjb25zdHJ1Y3RvciAobWVzc2FnZSkge1xuICAgIHN1cGVyKG1lc3NhZ2UpXG4gICAgdGhpcy5uYW1lID0gJ0Fib3J0RXJyb3InXG4gICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZSB8fCAnVGhlIG9wZXJhdGlvbiB3YXMgYWJvcnRlZCdcbiAgfVxufVxuXG5jbGFzcyBSZXF1ZXN0QWJvcnRlZEVycm9yIGV4dGVuZHMgQWJvcnRFcnJvciB7XG4gIGNvbnN0cnVjdG9yIChtZXNzYWdlKSB7XG4gICAgc3VwZXIobWVzc2FnZSlcbiAgICB0aGlzLm5hbWUgPSAnQWJvcnRFcnJvcidcbiAgICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlIHx8ICdSZXF1ZXN0IGFib3J0ZWQnXG4gICAgdGhpcy5jb2RlID0gJ1VORF9FUlJfQUJPUlRFRCdcbiAgfVxufVxuXG5jbGFzcyBJbmZvcm1hdGlvbmFsRXJyb3IgZXh0ZW5kcyBVbmRpY2lFcnJvciB7XG4gIGNvbnN0cnVjdG9yIChtZXNzYWdlKSB7XG4gICAgc3VwZXIobWVzc2FnZSlcbiAgICB0aGlzLm5hbWUgPSAnSW5mb3JtYXRpb25hbEVycm9yJ1xuICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2UgfHwgJ1JlcXVlc3QgaW5mb3JtYXRpb24nXG4gICAgdGhpcy5jb2RlID0gJ1VORF9FUlJfSU5GTydcbiAgfVxufVxuXG5jbGFzcyBSZXF1ZXN0Q29udGVudExlbmd0aE1pc21hdGNoRXJyb3IgZXh0ZW5kcyBVbmRpY2lFcnJvciB7XG4gIGNvbnN0cnVjdG9yIChtZXNzYWdlKSB7XG4gICAgc3VwZXIobWVzc2FnZSlcbiAgICB0aGlzLm5hbWUgPSAnUmVxdWVzdENvbnRlbnRMZW5ndGhNaXNtYXRjaEVycm9yJ1xuICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2UgfHwgJ1JlcXVlc3QgYm9keSBsZW5ndGggZG9lcyBub3QgbWF0Y2ggY29udGVudC1sZW5ndGggaGVhZGVyJ1xuICAgIHRoaXMuY29kZSA9ICdVTkRfRVJSX1JFUV9DT05URU5UX0xFTkdUSF9NSVNNQVRDSCdcbiAgfVxufVxuXG5jbGFzcyBSZXNwb25zZUNvbnRlbnRMZW5ndGhNaXNtYXRjaEVycm9yIGV4dGVuZHMgVW5kaWNpRXJyb3Ige1xuICBjb25zdHJ1Y3RvciAobWVzc2FnZSkge1xuICAgIHN1cGVyKG1lc3NhZ2UpXG4gICAgdGhpcy5uYW1lID0gJ1Jlc3BvbnNlQ29udGVudExlbmd0aE1pc21hdGNoRXJyb3InXG4gICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZSB8fCAnUmVzcG9uc2UgYm9keSBsZW5ndGggZG9lcyBub3QgbWF0Y2ggY29udGVudC1sZW5ndGggaGVhZGVyJ1xuICAgIHRoaXMuY29kZSA9ICdVTkRfRVJSX1JFU19DT05URU5UX0xFTkdUSF9NSVNNQVRDSCdcbiAgfVxufVxuXG5jbGFzcyBDbGllbnREZXN0cm95ZWRFcnJvciBleHRlbmRzIFVuZGljaUVycm9yIHtcbiAgY29uc3RydWN0b3IgKG1lc3NhZ2UpIHtcbiAgICBzdXBlcihtZXNzYWdlKVxuICAgIHRoaXMubmFtZSA9ICdDbGllbnREZXN0cm95ZWRFcnJvcidcbiAgICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlIHx8ICdUaGUgY2xpZW50IGlzIGRlc3Ryb3llZCdcbiAgICB0aGlzLmNvZGUgPSAnVU5EX0VSUl9ERVNUUk9ZRUQnXG4gIH1cbn1cblxuY2xhc3MgQ2xpZW50Q2xvc2VkRXJyb3IgZXh0ZW5kcyBVbmRpY2lFcnJvciB7XG4gIGNvbnN0cnVjdG9yIChtZXNzYWdlKSB7XG4gICAgc3VwZXIobWVzc2FnZSlcbiAgICB0aGlzLm5hbWUgPSAnQ2xpZW50Q2xvc2VkRXJyb3InXG4gICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZSB8fCAnVGhlIGNsaWVudCBpcyBjbG9zZWQnXG4gICAgdGhpcy5jb2RlID0gJ1VORF9FUlJfQ0xPU0VEJ1xuICB9XG59XG5cbmNsYXNzIFNvY2tldEVycm9yIGV4dGVuZHMgVW5kaWNpRXJyb3Ige1xuICBjb25zdHJ1Y3RvciAobWVzc2FnZSwgc29ja2V0KSB7XG4gICAgc3VwZXIobWVzc2FnZSlcbiAgICB0aGlzLm5hbWUgPSAnU29ja2V0RXJyb3InXG4gICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZSB8fCAnU29ja2V0IGVycm9yJ1xuICAgIHRoaXMuY29kZSA9ICdVTkRfRVJSX1NPQ0tFVCdcbiAgICB0aGlzLnNvY2tldCA9IHNvY2tldFxuICB9XG59XG5cbmNsYXNzIE5vdFN1cHBvcnRlZEVycm9yIGV4dGVuZHMgVW5kaWNpRXJyb3Ige1xuICBjb25zdHJ1Y3RvciAobWVzc2FnZSkge1xuICAgIHN1cGVyKG1lc3NhZ2UpXG4gICAgdGhpcy5uYW1lID0gJ05vdFN1cHBvcnRlZEVycm9yJ1xuICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2UgfHwgJ05vdCBzdXBwb3J0ZWQgZXJyb3InXG4gICAgdGhpcy5jb2RlID0gJ1VORF9FUlJfTk9UX1NVUFBPUlRFRCdcbiAgfVxufVxuXG5jbGFzcyBCYWxhbmNlZFBvb2xNaXNzaW5nVXBzdHJlYW1FcnJvciBleHRlbmRzIFVuZGljaUVycm9yIHtcbiAgY29uc3RydWN0b3IgKG1lc3NhZ2UpIHtcbiAgICBzdXBlcihtZXNzYWdlKVxuICAgIHRoaXMubmFtZSA9ICdNaXNzaW5nVXBzdHJlYW1FcnJvcidcbiAgICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlIHx8ICdObyB1cHN0cmVhbSBoYXMgYmVlbiBhZGRlZCB0byB0aGUgQmFsYW5jZWRQb29sJ1xuICAgIHRoaXMuY29kZSA9ICdVTkRfRVJSX0JQTF9NSVNTSU5HX1VQU1RSRUFNJ1xuICB9XG59XG5cbmNsYXNzIEhUVFBQYXJzZXJFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgY29uc3RydWN0b3IgKG1lc3NhZ2UsIGNvZGUsIGRhdGEpIHtcbiAgICBzdXBlcihtZXNzYWdlKVxuICAgIHRoaXMubmFtZSA9ICdIVFRQUGFyc2VyRXJyb3InXG4gICAgdGhpcy5jb2RlID0gY29kZSA/IGBIUEVfJHtjb2RlfWAgOiB1bmRlZmluZWRcbiAgICB0aGlzLmRhdGEgPSBkYXRhID8gZGF0YS50b1N0cmluZygpIDogdW5kZWZpbmVkXG4gIH1cbn1cblxuY2xhc3MgUmVzcG9uc2VFeGNlZWRlZE1heFNpemVFcnJvciBleHRlbmRzIFVuZGljaUVycm9yIHtcbiAgY29uc3RydWN0b3IgKG1lc3NhZ2UpIHtcbiAgICBzdXBlcihtZXNzYWdlKVxuICAgIHRoaXMubmFtZSA9ICdSZXNwb25zZUV4Y2VlZGVkTWF4U2l6ZUVycm9yJ1xuICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2UgfHwgJ1Jlc3BvbnNlIGNvbnRlbnQgZXhjZWVkZWQgbWF4IHNpemUnXG4gICAgdGhpcy5jb2RlID0gJ1VORF9FUlJfUkVTX0VYQ0VFREVEX01BWF9TSVpFJ1xuICB9XG59XG5cbmNsYXNzIFJlcXVlc3RSZXRyeUVycm9yIGV4dGVuZHMgVW5kaWNpRXJyb3Ige1xuICBjb25zdHJ1Y3RvciAobWVzc2FnZSwgY29kZSwgeyBoZWFkZXJzLCBkYXRhIH0pIHtcbiAgICBzdXBlcihtZXNzYWdlKVxuICAgIHRoaXMubmFtZSA9ICdSZXF1ZXN0UmV0cnlFcnJvcidcbiAgICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlIHx8ICdSZXF1ZXN0IHJldHJ5IGVycm9yJ1xuICAgIHRoaXMuY29kZSA9ICdVTkRfRVJSX1JFUV9SRVRSWSdcbiAgICB0aGlzLnN0YXR1c0NvZGUgPSBjb2RlXG4gICAgdGhpcy5kYXRhID0gZGF0YVxuICAgIHRoaXMuaGVhZGVycyA9IGhlYWRlcnNcbiAgfVxufVxuXG5jbGFzcyBSZXNwb25zZUVycm9yIGV4dGVuZHMgVW5kaWNpRXJyb3Ige1xuICBjb25zdHJ1Y3RvciAobWVzc2FnZSwgY29kZSwgeyBoZWFkZXJzLCBkYXRhIH0pIHtcbiAgICBzdXBlcihtZXNzYWdlKVxuICAgIHRoaXMubmFtZSA9ICdSZXNwb25zZUVycm9yJ1xuICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2UgfHwgJ1Jlc3BvbnNlIGVycm9yJ1xuICAgIHRoaXMuY29kZSA9ICdVTkRfRVJSX1JFU1BPTlNFJ1xuICAgIHRoaXMuc3RhdHVzQ29kZSA9IGNvZGVcbiAgICB0aGlzLmRhdGEgPSBkYXRhXG4gICAgdGhpcy5oZWFkZXJzID0gaGVhZGVyc1xuICB9XG59XG5cbmNsYXNzIFNlY3VyZVByb3h5Q29ubmVjdGlvbkVycm9yIGV4dGVuZHMgVW5kaWNpRXJyb3Ige1xuICBjb25zdHJ1Y3RvciAoY2F1c2UsIG1lc3NhZ2UsIG9wdGlvbnMpIHtcbiAgICBzdXBlcihtZXNzYWdlLCB7IGNhdXNlLCAuLi4ob3B0aW9ucyA/PyB7fSkgfSlcbiAgICB0aGlzLm5hbWUgPSAnU2VjdXJlUHJveHlDb25uZWN0aW9uRXJyb3InXG4gICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZSB8fCAnU2VjdXJlIFByb3h5IENvbm5lY3Rpb24gZmFpbGVkJ1xuICAgIHRoaXMuY29kZSA9ICdVTkRfRVJSX1BSWF9UTFMnXG4gICAgdGhpcy5jYXVzZSA9IGNhdXNlXG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIEFib3J0RXJyb3IsXG4gIEhUVFBQYXJzZXJFcnJvcixcbiAgVW5kaWNpRXJyb3IsXG4gIEhlYWRlcnNUaW1lb3V0RXJyb3IsXG4gIEhlYWRlcnNPdmVyZmxvd0Vycm9yLFxuICBCb2R5VGltZW91dEVycm9yLFxuICBSZXF1ZXN0Q29udGVudExlbmd0aE1pc21hdGNoRXJyb3IsXG4gIENvbm5lY3RUaW1lb3V0RXJyb3IsXG4gIFJlc3BvbnNlU3RhdHVzQ29kZUVycm9yLFxuICBJbnZhbGlkQXJndW1lbnRFcnJvcixcbiAgSW52YWxpZFJldHVyblZhbHVlRXJyb3IsXG4gIFJlcXVlc3RBYm9ydGVkRXJyb3IsXG4gIENsaWVudERlc3Ryb3llZEVycm9yLFxuICBDbGllbnRDbG9zZWRFcnJvcixcbiAgSW5mb3JtYXRpb25hbEVycm9yLFxuICBTb2NrZXRFcnJvcixcbiAgTm90U3VwcG9ydGVkRXJyb3IsXG4gIFJlc3BvbnNlQ29udGVudExlbmd0aE1pc21hdGNoRXJyb3IsXG4gIEJhbGFuY2VkUG9vbE1pc3NpbmdVcHN0cmVhbUVycm9yLFxuICBSZXNwb25zZUV4Y2VlZGVkTWF4U2l6ZUVycm9yLFxuICBSZXF1ZXN0UmV0cnlFcnJvcixcbiAgUmVzcG9uc2VFcnJvcixcbiAgU2VjdXJlUHJveHlDb25uZWN0aW9uRXJyb3Jcbn1cbiIsICIndXNlIHN0cmljdCdcblxuLyoqIEB0eXBlIHtSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCB1bmRlZmluZWQ+fSAqL1xuY29uc3QgaGVhZGVyTmFtZUxvd2VyQ2FzZWRSZWNvcmQgPSB7fVxuXG4vLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9kb2NzL1dlYi9IVFRQL0hlYWRlcnNcbmNvbnN0IHdlbGxrbm93bkhlYWRlck5hbWVzID0gW1xuICAnQWNjZXB0JyxcbiAgJ0FjY2VwdC1FbmNvZGluZycsXG4gICdBY2NlcHQtTGFuZ3VhZ2UnLFxuICAnQWNjZXB0LVJhbmdlcycsXG4gICdBY2Nlc3MtQ29udHJvbC1BbGxvdy1DcmVkZW50aWFscycsXG4gICdBY2Nlc3MtQ29udHJvbC1BbGxvdy1IZWFkZXJzJyxcbiAgJ0FjY2Vzcy1Db250cm9sLUFsbG93LU1ldGhvZHMnLFxuICAnQWNjZXNzLUNvbnRyb2wtQWxsb3ctT3JpZ2luJyxcbiAgJ0FjY2Vzcy1Db250cm9sLUV4cG9zZS1IZWFkZXJzJyxcbiAgJ0FjY2Vzcy1Db250cm9sLU1heC1BZ2UnLFxuICAnQWNjZXNzLUNvbnRyb2wtUmVxdWVzdC1IZWFkZXJzJyxcbiAgJ0FjY2Vzcy1Db250cm9sLVJlcXVlc3QtTWV0aG9kJyxcbiAgJ0FnZScsXG4gICdBbGxvdycsXG4gICdBbHQtU3ZjJyxcbiAgJ0FsdC1Vc2VkJyxcbiAgJ0F1dGhvcml6YXRpb24nLFxuICAnQ2FjaGUtQ29udHJvbCcsXG4gICdDbGVhci1TaXRlLURhdGEnLFxuICAnQ29ubmVjdGlvbicsXG4gICdDb250ZW50LURpc3Bvc2l0aW9uJyxcbiAgJ0NvbnRlbnQtRW5jb2RpbmcnLFxuICAnQ29udGVudC1MYW5ndWFnZScsXG4gICdDb250ZW50LUxlbmd0aCcsXG4gICdDb250ZW50LUxvY2F0aW9uJyxcbiAgJ0NvbnRlbnQtUmFuZ2UnLFxuICAnQ29udGVudC1TZWN1cml0eS1Qb2xpY3knLFxuICAnQ29udGVudC1TZWN1cml0eS1Qb2xpY3ktUmVwb3J0LU9ubHknLFxuICAnQ29udGVudC1UeXBlJyxcbiAgJ0Nvb2tpZScsXG4gICdDcm9zcy1PcmlnaW4tRW1iZWRkZXItUG9saWN5JyxcbiAgJ0Nyb3NzLU9yaWdpbi1PcGVuZXItUG9saWN5JyxcbiAgJ0Nyb3NzLU9yaWdpbi1SZXNvdXJjZS1Qb2xpY3knLFxuICAnRGF0ZScsXG4gICdEZXZpY2UtTWVtb3J5JyxcbiAgJ0Rvd25saW5rJyxcbiAgJ0VDVCcsXG4gICdFVGFnJyxcbiAgJ0V4cGVjdCcsXG4gICdFeHBlY3QtQ1QnLFxuICAnRXhwaXJlcycsXG4gICdGb3J3YXJkZWQnLFxuICAnRnJvbScsXG4gICdIb3N0JyxcbiAgJ0lmLU1hdGNoJyxcbiAgJ0lmLU1vZGlmaWVkLVNpbmNlJyxcbiAgJ0lmLU5vbmUtTWF0Y2gnLFxuICAnSWYtUmFuZ2UnLFxuICAnSWYtVW5tb2RpZmllZC1TaW5jZScsXG4gICdLZWVwLUFsaXZlJyxcbiAgJ0xhc3QtTW9kaWZpZWQnLFxuICAnTGluaycsXG4gICdMb2NhdGlvbicsXG4gICdNYXgtRm9yd2FyZHMnLFxuICAnT3JpZ2luJyxcbiAgJ1Blcm1pc3Npb25zLVBvbGljeScsXG4gICdQcmFnbWEnLFxuICAnUHJveHktQXV0aGVudGljYXRlJyxcbiAgJ1Byb3h5LUF1dGhvcml6YXRpb24nLFxuICAnUlRUJyxcbiAgJ1JhbmdlJyxcbiAgJ1JlZmVyZXInLFxuICAnUmVmZXJyZXItUG9saWN5JyxcbiAgJ1JlZnJlc2gnLFxuICAnUmV0cnktQWZ0ZXInLFxuICAnU2VjLVdlYlNvY2tldC1BY2NlcHQnLFxuICAnU2VjLVdlYlNvY2tldC1FeHRlbnNpb25zJyxcbiAgJ1NlYy1XZWJTb2NrZXQtS2V5JyxcbiAgJ1NlYy1XZWJTb2NrZXQtUHJvdG9jb2wnLFxuICAnU2VjLVdlYlNvY2tldC1WZXJzaW9uJyxcbiAgJ1NlcnZlcicsXG4gICdTZXJ2ZXItVGltaW5nJyxcbiAgJ1NlcnZpY2UtV29ya2VyLUFsbG93ZWQnLFxuICAnU2VydmljZS1Xb3JrZXItTmF2aWdhdGlvbi1QcmVsb2FkJyxcbiAgJ1NldC1Db29raWUnLFxuICAnU291cmNlTWFwJyxcbiAgJ1N0cmljdC1UcmFuc3BvcnQtU2VjdXJpdHknLFxuICAnU3VwcG9ydHMtTG9hZGluZy1Nb2RlJyxcbiAgJ1RFJyxcbiAgJ1RpbWluZy1BbGxvdy1PcmlnaW4nLFxuICAnVHJhaWxlcicsXG4gICdUcmFuc2Zlci1FbmNvZGluZycsXG4gICdVcGdyYWRlJyxcbiAgJ1VwZ3JhZGUtSW5zZWN1cmUtUmVxdWVzdHMnLFxuICAnVXNlci1BZ2VudCcsXG4gICdWYXJ5JyxcbiAgJ1ZpYScsXG4gICdXV1ctQXV0aGVudGljYXRlJyxcbiAgJ1gtQ29udGVudC1UeXBlLU9wdGlvbnMnLFxuICAnWC1ETlMtUHJlZmV0Y2gtQ29udHJvbCcsXG4gICdYLUZyYW1lLU9wdGlvbnMnLFxuICAnWC1QZXJtaXR0ZWQtQ3Jvc3MtRG9tYWluLVBvbGljaWVzJyxcbiAgJ1gtUG93ZXJlZC1CeScsXG4gICdYLVJlcXVlc3RlZC1XaXRoJyxcbiAgJ1gtWFNTLVByb3RlY3Rpb24nXG5dXG5cbmZvciAobGV0IGkgPSAwOyBpIDwgd2VsbGtub3duSGVhZGVyTmFtZXMubGVuZ3RoOyArK2kpIHtcbiAgY29uc3Qga2V5ID0gd2VsbGtub3duSGVhZGVyTmFtZXNbaV1cbiAgY29uc3QgbG93ZXJDYXNlZEtleSA9IGtleS50b0xvd2VyQ2FzZSgpXG4gIGhlYWRlck5hbWVMb3dlckNhc2VkUmVjb3JkW2tleV0gPSBoZWFkZXJOYW1lTG93ZXJDYXNlZFJlY29yZFtsb3dlckNhc2VkS2V5XSA9XG4gICAgbG93ZXJDYXNlZEtleVxufVxuXG4vLyBOb3RlOiBvYmplY3QgcHJvdG90eXBlcyBzaG91bGQgbm90IGJlIGFibGUgdG8gYmUgcmVmZXJlbmNlZC4gZS5nLiBgT2JqZWN0I2hhc093blByb3BlcnR5YC5cbk9iamVjdC5zZXRQcm90b3R5cGVPZihoZWFkZXJOYW1lTG93ZXJDYXNlZFJlY29yZCwgbnVsbClcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIHdlbGxrbm93bkhlYWRlck5hbWVzLFxuICBoZWFkZXJOYW1lTG93ZXJDYXNlZFJlY29yZFxufVxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7XG4gIHdlbGxrbm93bkhlYWRlck5hbWVzLFxuICBoZWFkZXJOYW1lTG93ZXJDYXNlZFJlY29yZFxufSA9IHJlcXVpcmUoJy4vY29uc3RhbnRzJylcblxuY2xhc3MgVHN0Tm9kZSB7XG4gIC8qKiBAdHlwZSB7YW55fSAqL1xuICB2YWx1ZSA9IG51bGxcbiAgLyoqIEB0eXBlIHtudWxsIHwgVHN0Tm9kZX0gKi9cbiAgbGVmdCA9IG51bGxcbiAgLyoqIEB0eXBlIHtudWxsIHwgVHN0Tm9kZX0gKi9cbiAgbWlkZGxlID0gbnVsbFxuICAvKiogQHR5cGUge251bGwgfCBUc3ROb2RlfSAqL1xuICByaWdodCA9IG51bGxcbiAgLyoqIEB0eXBlIHtudW1iZXJ9ICovXG4gIGNvZGVcbiAgLyoqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBrZXlcbiAgICogQHBhcmFtIHthbnl9IHZhbHVlXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBpbmRleFxuICAgKi9cbiAgY29uc3RydWN0b3IgKGtleSwgdmFsdWUsIGluZGV4KSB7XG4gICAgaWYgKGluZGV4ID09PSB1bmRlZmluZWQgfHwgaW5kZXggPj0ga2V5Lmxlbmd0aCkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVW5yZWFjaGFibGUnKVxuICAgIH1cbiAgICBjb25zdCBjb2RlID0gdGhpcy5jb2RlID0ga2V5LmNoYXJDb2RlQXQoaW5kZXgpXG4gICAgLy8gY2hlY2sgY29kZSBpcyBhc2NpaSBzdHJpbmdcbiAgICBpZiAoY29kZSA+IDB4N0YpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2tleSBtdXN0IGJlIGFzY2lpIHN0cmluZycpXG4gICAgfVxuICAgIGlmIChrZXkubGVuZ3RoICE9PSArK2luZGV4KSB7XG4gICAgICB0aGlzLm1pZGRsZSA9IG5ldyBUc3ROb2RlKGtleSwgdmFsdWUsIGluZGV4KVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnZhbHVlID0gdmFsdWVcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtzdHJpbmd9IGtleVxuICAgKiBAcGFyYW0ge2FueX0gdmFsdWVcbiAgICovXG4gIGFkZCAoa2V5LCB2YWx1ZSkge1xuICAgIGNvbnN0IGxlbmd0aCA9IGtleS5sZW5ndGhcbiAgICBpZiAobGVuZ3RoID09PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdVbnJlYWNoYWJsZScpXG4gICAgfVxuICAgIGxldCBpbmRleCA9IDBcbiAgICBsZXQgbm9kZSA9IHRoaXNcbiAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgY29uc3QgY29kZSA9IGtleS5jaGFyQ29kZUF0KGluZGV4KVxuICAgICAgLy8gY2hlY2sgY29kZSBpcyBhc2NpaSBzdHJpbmdcbiAgICAgIGlmIChjb2RlID4gMHg3Rikge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdrZXkgbXVzdCBiZSBhc2NpaSBzdHJpbmcnKVxuICAgICAgfVxuICAgICAgaWYgKG5vZGUuY29kZSA9PT0gY29kZSkge1xuICAgICAgICBpZiAobGVuZ3RoID09PSArK2luZGV4KSB7XG4gICAgICAgICAgbm9kZS52YWx1ZSA9IHZhbHVlXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgfSBlbHNlIGlmIChub2RlLm1pZGRsZSAhPT0gbnVsbCkge1xuICAgICAgICAgIG5vZGUgPSBub2RlLm1pZGRsZVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG5vZGUubWlkZGxlID0gbmV3IFRzdE5vZGUoa2V5LCB2YWx1ZSwgaW5kZXgpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChub2RlLmNvZGUgPCBjb2RlKSB7XG4gICAgICAgIGlmIChub2RlLmxlZnQgIT09IG51bGwpIHtcbiAgICAgICAgICBub2RlID0gbm9kZS5sZWZ0XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbm9kZS5sZWZ0ID0gbmV3IFRzdE5vZGUoa2V5LCB2YWx1ZSwgaW5kZXgpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChub2RlLnJpZ2h0ICE9PSBudWxsKSB7XG4gICAgICAgIG5vZGUgPSBub2RlLnJpZ2h0XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBub2RlLnJpZ2h0ID0gbmV3IFRzdE5vZGUoa2V5LCB2YWx1ZSwgaW5kZXgpXG4gICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7VWludDhBcnJheX0ga2V5XG4gICAqIEByZXR1cm4ge1RzdE5vZGUgfCBudWxsfVxuICAgKi9cbiAgc2VhcmNoIChrZXkpIHtcbiAgICBjb25zdCBrZXlsZW5ndGggPSBrZXkubGVuZ3RoXG4gICAgbGV0IGluZGV4ID0gMFxuICAgIGxldCBub2RlID0gdGhpc1xuICAgIHdoaWxlIChub2RlICE9PSBudWxsICYmIGluZGV4IDwga2V5bGVuZ3RoKSB7XG4gICAgICBsZXQgY29kZSA9IGtleVtpbmRleF1cbiAgICAgIC8vIEEtWlxuICAgICAgLy8gRmlyc3QgY2hlY2sgaWYgaXQgaXMgYmlnZ2VyIHRoYW4gMHg1YS5cbiAgICAgIC8vIExvd2VyY2FzZSBsZXR0ZXJzIGhhdmUgaGlnaGVyIGNoYXIgY29kZXMgdGhhbiB1cHBlcmNhc2Ugb25lcy5cbiAgICAgIC8vIEFsc28gd2UgYXNzdW1lIHRoYXQgaGVhZGVycyB3aWxsIG1vc3RseSBjb250YWluIGxvd2VyY2FzZSBjaGFyYWN0ZXJzLlxuICAgICAgaWYgKGNvZGUgPD0gMHg1YSAmJiBjb2RlID49IDB4NDEpIHtcbiAgICAgICAgLy8gTG93ZXJjYXNlIGZvciB1cHBlcmNhc2UuXG4gICAgICAgIGNvZGUgfD0gMzJcbiAgICAgIH1cbiAgICAgIHdoaWxlIChub2RlICE9PSBudWxsKSB7XG4gICAgICAgIGlmIChjb2RlID09PSBub2RlLmNvZGUpIHtcbiAgICAgICAgICBpZiAoa2V5bGVuZ3RoID09PSArK2luZGV4KSB7XG4gICAgICAgICAgICAvLyBSZXR1cm5zIE5vZGUgc2luY2UgaXQgaXMgdGhlIGxhc3Qga2V5LlxuICAgICAgICAgICAgcmV0dXJuIG5vZGVcbiAgICAgICAgICB9XG4gICAgICAgICAgbm9kZSA9IG5vZGUubWlkZGxlXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgfVxuICAgICAgICBub2RlID0gbm9kZS5jb2RlIDwgY29kZSA/IG5vZGUubGVmdCA6IG5vZGUucmlnaHRcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG51bGxcbiAgfVxufVxuXG5jbGFzcyBUZXJuYXJ5U2VhcmNoVHJlZSB7XG4gIC8qKiBAdHlwZSB7VHN0Tm9kZSB8IG51bGx9ICovXG4gIG5vZGUgPSBudWxsXG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBrZXlcbiAgICogQHBhcmFtIHthbnl9IHZhbHVlXG4gICAqICovXG4gIGluc2VydCAoa2V5LCB2YWx1ZSkge1xuICAgIGlmICh0aGlzLm5vZGUgPT09IG51bGwpIHtcbiAgICAgIHRoaXMubm9kZSA9IG5ldyBUc3ROb2RlKGtleSwgdmFsdWUsIDApXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMubm9kZS5hZGQoa2V5LCB2YWx1ZSlcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtVaW50OEFycmF5fSBrZXlcbiAgICogQHJldHVybiB7YW55fVxuICAgKi9cbiAgbG9va3VwIChrZXkpIHtcbiAgICByZXR1cm4gdGhpcy5ub2RlPy5zZWFyY2goa2V5KT8udmFsdWUgPz8gbnVsbFxuICB9XG59XG5cbmNvbnN0IHRyZWUgPSBuZXcgVGVybmFyeVNlYXJjaFRyZWUoKVxuXG5mb3IgKGxldCBpID0gMDsgaSA8IHdlbGxrbm93bkhlYWRlck5hbWVzLmxlbmd0aDsgKytpKSB7XG4gIGNvbnN0IGtleSA9IGhlYWRlck5hbWVMb3dlckNhc2VkUmVjb3JkW3dlbGxrbm93bkhlYWRlck5hbWVzW2ldXVxuICB0cmVlLmluc2VydChrZXksIGtleSlcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIFRlcm5hcnlTZWFyY2hUcmVlLFxuICB0cmVlXG59XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IGFzc2VydCA9IHJlcXVpcmUoJ25vZGU6YXNzZXJ0JylcbmNvbnN0IHsga0Rlc3Ryb3llZCwga0JvZHlVc2VkLCBrTGlzdGVuZXJzLCBrQm9keSB9ID0gcmVxdWlyZSgnLi9zeW1ib2xzJylcbmNvbnN0IHsgSW5jb21pbmdNZXNzYWdlIH0gPSByZXF1aXJlKCdub2RlOmh0dHAnKVxuY29uc3Qgc3RyZWFtID0gcmVxdWlyZSgnbm9kZTpzdHJlYW0nKVxuY29uc3QgbmV0ID0gcmVxdWlyZSgnbm9kZTpuZXQnKVxuY29uc3QgeyBCbG9iIH0gPSByZXF1aXJlKCdub2RlOmJ1ZmZlcicpXG5jb25zdCBub2RlVXRpbCA9IHJlcXVpcmUoJ25vZGU6dXRpbCcpXG5jb25zdCB7IHN0cmluZ2lmeSB9ID0gcmVxdWlyZSgnbm9kZTpxdWVyeXN0cmluZycpXG5jb25zdCB7IEV2ZW50RW1pdHRlcjogRUUgfSA9IHJlcXVpcmUoJ25vZGU6ZXZlbnRzJylcbmNvbnN0IHsgSW52YWxpZEFyZ3VtZW50RXJyb3IgfSA9IHJlcXVpcmUoJy4vZXJyb3JzJylcbmNvbnN0IHsgaGVhZGVyTmFtZUxvd2VyQ2FzZWRSZWNvcmQgfSA9IHJlcXVpcmUoJy4vY29uc3RhbnRzJylcbmNvbnN0IHsgdHJlZSB9ID0gcmVxdWlyZSgnLi90cmVlJylcblxuY29uc3QgW25vZGVNYWpvciwgbm9kZU1pbm9yXSA9IHByb2Nlc3MudmVyc2lvbnMubm9kZS5zcGxpdCgnLicpLm1hcCh2ID0+IE51bWJlcih2KSlcblxuY2xhc3MgQm9keUFzeW5jSXRlcmFibGUge1xuICBjb25zdHJ1Y3RvciAoYm9keSkge1xuICAgIHRoaXNba0JvZHldID0gYm9keVxuICAgIHRoaXNba0JvZHlVc2VkXSA9IGZhbHNlXG4gIH1cblxuICBhc3luYyAqIFtTeW1ib2wuYXN5bmNJdGVyYXRvcl0gKCkge1xuICAgIGFzc2VydCghdGhpc1trQm9keVVzZWRdLCAnZGlzdHVyYmVkJylcbiAgICB0aGlzW2tCb2R5VXNlZF0gPSB0cnVlXG4gICAgeWllbGQgKiB0aGlzW2tCb2R5XVxuICB9XG59XG5cbmZ1bmN0aW9uIHdyYXBSZXF1ZXN0Qm9keSAoYm9keSkge1xuICBpZiAoaXNTdHJlYW0oYm9keSkpIHtcbiAgICAvLyBUT0RPIChmaXgpOiBQcm92aWRlIHNvbWUgd2F5IGZvciB0aGUgdXNlciB0byBjYWNoZSB0aGUgZmlsZSB0byBlLmcuIC90bXBcbiAgICAvLyBzbyB0aGF0IGl0IGNhbiBiZSBkaXNwYXRjaGVkIGFnYWluP1xuICAgIC8vIFRPRE8gKGZpeCk6IERvIHdlIG5lZWQgMTAwLWV4cGVjdCBzdXBwb3J0IHRvIHByb3ZpZGUgYSB3YXkgdG8gZG8gdGhpcyBwcm9wZXJseT9cbiAgICBpZiAoYm9keUxlbmd0aChib2R5KSA9PT0gMCkge1xuICAgICAgYm9keVxuICAgICAgICAub24oJ2RhdGEnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgYXNzZXJ0KGZhbHNlKVxuICAgICAgICB9KVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgYm9keS5yZWFkYWJsZURpZFJlYWQgIT09ICdib29sZWFuJykge1xuICAgICAgYm9keVtrQm9keVVzZWRdID0gZmFsc2VcbiAgICAgIEVFLnByb3RvdHlwZS5vbi5jYWxsKGJvZHksICdkYXRhJywgZnVuY3Rpb24gKCkge1xuICAgICAgICB0aGlzW2tCb2R5VXNlZF0gPSB0cnVlXG4gICAgICB9KVxuICAgIH1cblxuICAgIHJldHVybiBib2R5XG4gIH0gZWxzZSBpZiAoYm9keSAmJiB0eXBlb2YgYm9keS5waXBlVG8gPT09ICdmdW5jdGlvbicpIHtcbiAgICAvLyBUT0RPIChmaXgpOiBXZSBjYW4ndCBhY2Nlc3MgUmVhZGFibGVTdHJlYW0gaW50ZXJuYWwgc3RhdGVcbiAgICAvLyB0byBkZXRlcm1pbmUgd2hldGhlciBvciBub3QgaXQgaGFzIGJlZW4gZGlzdHVyYmVkLiBUaGlzIGlzIGp1c3RcbiAgICAvLyBhIHdvcmthcm91bmQuXG4gICAgcmV0dXJuIG5ldyBCb2R5QXN5bmNJdGVyYWJsZShib2R5KVxuICB9IGVsc2UgaWYgKFxuICAgIGJvZHkgJiZcbiAgICB0eXBlb2YgYm9keSAhPT0gJ3N0cmluZycgJiZcbiAgICAhQXJyYXlCdWZmZXIuaXNWaWV3KGJvZHkpICYmXG4gICAgaXNJdGVyYWJsZShib2R5KVxuICApIHtcbiAgICAvLyBUT0RPOiBTaG91bGQgd2UgYWxsb3cgcmUtdXNpbmcgaXRlcmFibGUgaWYgIXRoaXMub3B0cy5pZGVtcG90ZW50XG4gICAgLy8gb3IgdGhyb3VnaCBzb21lIG90aGVyIGZsYWc/XG4gICAgcmV0dXJuIG5ldyBCb2R5QXN5bmNJdGVyYWJsZShib2R5KVxuICB9IGVsc2Uge1xuICAgIHJldHVybiBib2R5XG4gIH1cbn1cblxuZnVuY3Rpb24gbm9wICgpIHt9XG5cbmZ1bmN0aW9uIGlzU3RyZWFtIChvYmopIHtcbiAgcmV0dXJuIG9iaiAmJiB0eXBlb2Ygb2JqID09PSAnb2JqZWN0JyAmJiB0eXBlb2Ygb2JqLnBpcGUgPT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIG9iai5vbiA9PT0gJ2Z1bmN0aW9uJ1xufVxuXG4vLyBiYXNlZCBvbiBodHRwczovL2dpdGh1Yi5jb20vbm9kZS1mZXRjaC9mZXRjaC1ibG9iL2Jsb2IvOGFiNTg3ZDM0MDgwZGU5NDE0MGI1NGYwNzE2ODQ1MWU3ZDBiNjU1ZS9pbmRleC5qcyNMMjI5LUwyNDEgKE1JVCBMaWNlbnNlKVxuZnVuY3Rpb24gaXNCbG9iTGlrZSAob2JqZWN0KSB7XG4gIGlmIChvYmplY3QgPT09IG51bGwpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfSBlbHNlIGlmIChvYmplY3QgaW5zdGFuY2VvZiBCbG9iKSB7XG4gICAgcmV0dXJuIHRydWVcbiAgfSBlbHNlIGlmICh0eXBlb2Ygb2JqZWN0ICE9PSAnb2JqZWN0Jykge1xuICAgIHJldHVybiBmYWxzZVxuICB9IGVsc2Uge1xuICAgIGNvbnN0IHNUYWcgPSBvYmplY3RbU3ltYm9sLnRvU3RyaW5nVGFnXVxuXG4gICAgcmV0dXJuIChzVGFnID09PSAnQmxvYicgfHwgc1RhZyA9PT0gJ0ZpbGUnKSAmJiAoXG4gICAgICAoJ3N0cmVhbScgaW4gb2JqZWN0ICYmIHR5cGVvZiBvYmplY3Quc3RyZWFtID09PSAnZnVuY3Rpb24nKSB8fFxuICAgICAgKCdhcnJheUJ1ZmZlcicgaW4gb2JqZWN0ICYmIHR5cGVvZiBvYmplY3QuYXJyYXlCdWZmZXIgPT09ICdmdW5jdGlvbicpXG4gICAgKVxuICB9XG59XG5cbmZ1bmN0aW9uIGJ1aWxkVVJMICh1cmwsIHF1ZXJ5UGFyYW1zKSB7XG4gIGlmICh1cmwuaW5jbHVkZXMoJz8nKSB8fCB1cmwuaW5jbHVkZXMoJyMnKSkge1xuICAgIHRocm93IG5ldyBFcnJvcignUXVlcnkgcGFyYW1zIGNhbm5vdCBiZSBwYXNzZWQgd2hlbiB1cmwgYWxyZWFkeSBjb250YWlucyBcIj9cIiBvciBcIiNcIi4nKVxuICB9XG5cbiAgY29uc3Qgc3RyaW5naWZpZWQgPSBzdHJpbmdpZnkocXVlcnlQYXJhbXMpXG5cbiAgaWYgKHN0cmluZ2lmaWVkKSB7XG4gICAgdXJsICs9ICc/JyArIHN0cmluZ2lmaWVkXG4gIH1cblxuICByZXR1cm4gdXJsXG59XG5cbmZ1bmN0aW9uIGlzVmFsaWRQb3J0IChwb3J0KSB7XG4gIGNvbnN0IHZhbHVlID0gcGFyc2VJbnQocG9ydCwgMTApXG4gIHJldHVybiAoXG4gICAgdmFsdWUgPT09IE51bWJlcihwb3J0KSAmJlxuICAgIHZhbHVlID49IDAgJiZcbiAgICB2YWx1ZSA8PSA2NTUzNVxuICApXG59XG5cbmZ1bmN0aW9uIGlzSHR0cE9ySHR0cHNQcmVmaXhlZCAodmFsdWUpIHtcbiAgcmV0dXJuIChcbiAgICB2YWx1ZSAhPSBudWxsICYmXG4gICAgdmFsdWVbMF0gPT09ICdoJyAmJlxuICAgIHZhbHVlWzFdID09PSAndCcgJiZcbiAgICB2YWx1ZVsyXSA9PT0gJ3QnICYmXG4gICAgdmFsdWVbM10gPT09ICdwJyAmJlxuICAgIChcbiAgICAgIHZhbHVlWzRdID09PSAnOicgfHxcbiAgICAgIChcbiAgICAgICAgdmFsdWVbNF0gPT09ICdzJyAmJlxuICAgICAgICB2YWx1ZVs1XSA9PT0gJzonXG4gICAgICApXG4gICAgKVxuICApXG59XG5cbmZ1bmN0aW9uIHBhcnNlVVJMICh1cmwpIHtcbiAgaWYgKHR5cGVvZiB1cmwgPT09ICdzdHJpbmcnKSB7XG4gICAgdXJsID0gbmV3IFVSTCh1cmwpXG5cbiAgICBpZiAoIWlzSHR0cE9ySHR0cHNQcmVmaXhlZCh1cmwub3JpZ2luIHx8IHVybC5wcm90b2NvbCkpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignSW52YWxpZCBVUkwgcHJvdG9jb2w6IHRoZSBVUkwgbXVzdCBzdGFydCB3aXRoIGBodHRwOmAgb3IgYGh0dHBzOmAuJylcbiAgICB9XG5cbiAgICByZXR1cm4gdXJsXG4gIH1cblxuICBpZiAoIXVybCB8fCB0eXBlb2YgdXJsICE9PSAnb2JqZWN0Jykge1xuICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignSW52YWxpZCBVUkw6IFRoZSBVUkwgYXJndW1lbnQgbXVzdCBiZSBhIG5vbi1udWxsIG9iamVjdC4nKVxuICB9XG5cbiAgaWYgKCEodXJsIGluc3RhbmNlb2YgVVJMKSkge1xuICAgIGlmICh1cmwucG9ydCAhPSBudWxsICYmIHVybC5wb3J0ICE9PSAnJyAmJiBpc1ZhbGlkUG9ydCh1cmwucG9ydCkgPT09IGZhbHNlKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ0ludmFsaWQgVVJMOiBwb3J0IG11c3QgYmUgYSB2YWxpZCBpbnRlZ2VyIG9yIGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGFuIGludGVnZXIuJylcbiAgICB9XG5cbiAgICBpZiAodXJsLnBhdGggIT0gbnVsbCAmJiB0eXBlb2YgdXJsLnBhdGggIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ0ludmFsaWQgVVJMIHBhdGg6IHRoZSBwYXRoIG11c3QgYmUgYSBzdHJpbmcgb3IgbnVsbC91bmRlZmluZWQuJylcbiAgICB9XG5cbiAgICBpZiAodXJsLnBhdGhuYW1lICE9IG51bGwgJiYgdHlwZW9mIHVybC5wYXRobmFtZSAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignSW52YWxpZCBVUkwgcGF0aG5hbWU6IHRoZSBwYXRobmFtZSBtdXN0IGJlIGEgc3RyaW5nIG9yIG51bGwvdW5kZWZpbmVkLicpXG4gICAgfVxuXG4gICAgaWYgKHVybC5ob3N0bmFtZSAhPSBudWxsICYmIHR5cGVvZiB1cmwuaG9zdG5hbWUgIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ0ludmFsaWQgVVJMIGhvc3RuYW1lOiB0aGUgaG9zdG5hbWUgbXVzdCBiZSBhIHN0cmluZyBvciBudWxsL3VuZGVmaW5lZC4nKVxuICAgIH1cblxuICAgIGlmICh1cmwub3JpZ2luICE9IG51bGwgJiYgdHlwZW9mIHVybC5vcmlnaW4gIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ0ludmFsaWQgVVJMIG9yaWdpbjogdGhlIG9yaWdpbiBtdXN0IGJlIGEgc3RyaW5nIG9yIG51bGwvdW5kZWZpbmVkLicpXG4gICAgfVxuXG4gICAgaWYgKCFpc0h0dHBPckh0dHBzUHJlZml4ZWQodXJsLm9yaWdpbiB8fCB1cmwucHJvdG9jb2wpKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ0ludmFsaWQgVVJMIHByb3RvY29sOiB0aGUgVVJMIG11c3Qgc3RhcnQgd2l0aCBgaHR0cDpgIG9yIGBodHRwczpgLicpXG4gICAgfVxuXG4gICAgY29uc3QgcG9ydCA9IHVybC5wb3J0ICE9IG51bGxcbiAgICAgID8gdXJsLnBvcnRcbiAgICAgIDogKHVybC5wcm90b2NvbCA9PT0gJ2h0dHBzOicgPyA0NDMgOiA4MClcbiAgICBsZXQgb3JpZ2luID0gdXJsLm9yaWdpbiAhPSBudWxsXG4gICAgICA/IHVybC5vcmlnaW5cbiAgICAgIDogYCR7dXJsLnByb3RvY29sIHx8ICcnfS8vJHt1cmwuaG9zdG5hbWUgfHwgJyd9OiR7cG9ydH1gXG4gICAgbGV0IHBhdGggPSB1cmwucGF0aCAhPSBudWxsXG4gICAgICA/IHVybC5wYXRoXG4gICAgICA6IGAke3VybC5wYXRobmFtZSB8fCAnJ30ke3VybC5zZWFyY2ggfHwgJyd9YFxuXG4gICAgaWYgKG9yaWdpbltvcmlnaW4ubGVuZ3RoIC0gMV0gPT09ICcvJykge1xuICAgICAgb3JpZ2luID0gb3JpZ2luLnNsaWNlKDAsIG9yaWdpbi5sZW5ndGggLSAxKVxuICAgIH1cblxuICAgIGlmIChwYXRoICYmIHBhdGhbMF0gIT09ICcvJykge1xuICAgICAgcGF0aCA9IGAvJHtwYXRofWBcbiAgICB9XG4gICAgLy8gbmV3IFVSTChwYXRoLCBvcmlnaW4pIGlzIHVuc2FmZSB3aGVuIGBwYXRoYCBjb250YWlucyBhbiBhYnNvbHV0ZSBVUkxcbiAgICAvLyBGcm9tIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9VUkwvVVJMOlxuICAgIC8vIElmIGZpcnN0IHBhcmFtZXRlciBpcyBhIHJlbGF0aXZlIFVSTCwgc2Vjb25kIHBhcmFtIGlzIHJlcXVpcmVkLCBhbmQgd2lsbCBiZSB1c2VkIGFzIHRoZSBiYXNlIFVSTC5cbiAgICAvLyBJZiBmaXJzdCBwYXJhbWV0ZXIgaXMgYW4gYWJzb2x1dGUgVVJMLCBhIGdpdmVuIHNlY29uZCBwYXJhbSB3aWxsIGJlIGlnbm9yZWQuXG4gICAgcmV0dXJuIG5ldyBVUkwoYCR7b3JpZ2lufSR7cGF0aH1gKVxuICB9XG5cbiAgaWYgKCFpc0h0dHBPckh0dHBzUHJlZml4ZWQodXJsLm9yaWdpbiB8fCB1cmwucHJvdG9jb2wpKSB7XG4gICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdJbnZhbGlkIFVSTCBwcm90b2NvbDogdGhlIFVSTCBtdXN0IHN0YXJ0IHdpdGggYGh0dHA6YCBvciBgaHR0cHM6YC4nKVxuICB9XG5cbiAgcmV0dXJuIHVybFxufVxuXG5mdW5jdGlvbiBwYXJzZU9yaWdpbiAodXJsKSB7XG4gIHVybCA9IHBhcnNlVVJMKHVybClcblxuICBpZiAodXJsLnBhdGhuYW1lICE9PSAnLycgfHwgdXJsLnNlYXJjaCB8fCB1cmwuaGFzaCkge1xuICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCB1cmwnKVxuICB9XG5cbiAgcmV0dXJuIHVybFxufVxuXG5mdW5jdGlvbiBnZXRIb3N0bmFtZSAoaG9zdCkge1xuICBpZiAoaG9zdFswXSA9PT0gJ1snKSB7XG4gICAgY29uc3QgaWR4ID0gaG9zdC5pbmRleE9mKCddJylcblxuICAgIGFzc2VydChpZHggIT09IC0xKVxuICAgIHJldHVybiBob3N0LnN1YnN0cmluZygxLCBpZHgpXG4gIH1cblxuICBjb25zdCBpZHggPSBob3N0LmluZGV4T2YoJzonKVxuICBpZiAoaWR4ID09PSAtMSkgcmV0dXJuIGhvc3RcblxuICByZXR1cm4gaG9zdC5zdWJzdHJpbmcoMCwgaWR4KVxufVxuXG4vLyBJUCBhZGRyZXNzZXMgYXJlIG5vdCB2YWxpZCBzZXJ2ZXIgbmFtZXMgcGVyIFJGQzYwNjZcbi8vID4gQ3VycmVudGx5LCB0aGUgb25seSBzZXJ2ZXIgbmFtZXMgc3VwcG9ydGVkIGFyZSBETlMgaG9zdG5hbWVzXG5mdW5jdGlvbiBnZXRTZXJ2ZXJOYW1lIChob3N0KSB7XG4gIGlmICghaG9zdCkge1xuICAgIHJldHVybiBudWxsXG4gIH1cblxuICBhc3NlcnQodHlwZW9mIGhvc3QgPT09ICdzdHJpbmcnKVxuXG4gIGNvbnN0IHNlcnZlcm5hbWUgPSBnZXRIb3N0bmFtZShob3N0KVxuICBpZiAobmV0LmlzSVAoc2VydmVybmFtZSkpIHtcbiAgICByZXR1cm4gJydcbiAgfVxuXG4gIHJldHVybiBzZXJ2ZXJuYW1lXG59XG5cbmZ1bmN0aW9uIGRlZXBDbG9uZSAob2JqKSB7XG4gIHJldHVybiBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KG9iaikpXG59XG5cbmZ1bmN0aW9uIGlzQXN5bmNJdGVyYWJsZSAob2JqKSB7XG4gIHJldHVybiAhIShvYmogIT0gbnVsbCAmJiB0eXBlb2Ygb2JqW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSA9PT0gJ2Z1bmN0aW9uJylcbn1cblxuZnVuY3Rpb24gaXNJdGVyYWJsZSAob2JqKSB7XG4gIHJldHVybiAhIShvYmogIT0gbnVsbCAmJiAodHlwZW9mIG9ialtTeW1ib2wuaXRlcmF0b3JdID09PSAnZnVuY3Rpb24nIHx8IHR5cGVvZiBvYmpbU3ltYm9sLmFzeW5jSXRlcmF0b3JdID09PSAnZnVuY3Rpb24nKSlcbn1cblxuZnVuY3Rpb24gYm9keUxlbmd0aCAoYm9keSkge1xuICBpZiAoYm9keSA9PSBudWxsKSB7XG4gICAgcmV0dXJuIDBcbiAgfSBlbHNlIGlmIChpc1N0cmVhbShib2R5KSkge1xuICAgIGNvbnN0IHN0YXRlID0gYm9keS5fcmVhZGFibGVTdGF0ZVxuICAgIHJldHVybiBzdGF0ZSAmJiBzdGF0ZS5vYmplY3RNb2RlID09PSBmYWxzZSAmJiBzdGF0ZS5lbmRlZCA9PT0gdHJ1ZSAmJiBOdW1iZXIuaXNGaW5pdGUoc3RhdGUubGVuZ3RoKVxuICAgICAgPyBzdGF0ZS5sZW5ndGhcbiAgICAgIDogbnVsbFxuICB9IGVsc2UgaWYgKGlzQmxvYkxpa2UoYm9keSkpIHtcbiAgICByZXR1cm4gYm9keS5zaXplICE9IG51bGwgPyBib2R5LnNpemUgOiBudWxsXG4gIH0gZWxzZSBpZiAoaXNCdWZmZXIoYm9keSkpIHtcbiAgICByZXR1cm4gYm9keS5ieXRlTGVuZ3RoXG4gIH1cblxuICByZXR1cm4gbnVsbFxufVxuXG5mdW5jdGlvbiBpc0Rlc3Ryb3llZCAoYm9keSkge1xuICByZXR1cm4gYm9keSAmJiAhIShib2R5LmRlc3Ryb3llZCB8fCBib2R5W2tEZXN0cm95ZWRdIHx8IChzdHJlYW0uaXNEZXN0cm95ZWQ/Lihib2R5KSkpXG59XG5cbmZ1bmN0aW9uIGRlc3Ryb3kgKHN0cmVhbSwgZXJyKSB7XG4gIGlmIChzdHJlYW0gPT0gbnVsbCB8fCAhaXNTdHJlYW0oc3RyZWFtKSB8fCBpc0Rlc3Ryb3llZChzdHJlYW0pKSB7XG4gICAgcmV0dXJuXG4gIH1cblxuICBpZiAodHlwZW9mIHN0cmVhbS5kZXN0cm95ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgaWYgKE9iamVjdC5nZXRQcm90b3R5cGVPZihzdHJlYW0pLmNvbnN0cnVjdG9yID09PSBJbmNvbWluZ01lc3NhZ2UpIHtcbiAgICAgIC8vIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy9ub2RlL3B1bGwvMzg1MDUvZmlsZXNcbiAgICAgIHN0cmVhbS5zb2NrZXQgPSBudWxsXG4gICAgfVxuXG4gICAgc3RyZWFtLmRlc3Ryb3koZXJyKVxuICB9IGVsc2UgaWYgKGVycikge1xuICAgIHF1ZXVlTWljcm90YXNrKCgpID0+IHtcbiAgICAgIHN0cmVhbS5lbWl0KCdlcnJvcicsIGVycilcbiAgICB9KVxuICB9XG5cbiAgaWYgKHN0cmVhbS5kZXN0cm95ZWQgIT09IHRydWUpIHtcbiAgICBzdHJlYW1ba0Rlc3Ryb3llZF0gPSB0cnVlXG4gIH1cbn1cblxuY29uc3QgS0VFUEFMSVZFX1RJTUVPVVRfRVhQUiA9IC90aW1lb3V0PShcXGQrKS9cbmZ1bmN0aW9uIHBhcnNlS2VlcEFsaXZlVGltZW91dCAodmFsKSB7XG4gIGNvbnN0IG0gPSB2YWwudG9TdHJpbmcoKS5tYXRjaChLRUVQQUxJVkVfVElNRU9VVF9FWFBSKVxuICByZXR1cm4gbSA/IHBhcnNlSW50KG1bMV0sIDEwKSAqIDEwMDAgOiBudWxsXG59XG5cbi8qKlxuICogUmV0cmlldmVzIGEgaGVhZGVyIG5hbWUgYW5kIHJldHVybnMgaXRzIGxvd2VyY2FzZSB2YWx1ZS5cbiAqIEBwYXJhbSB7c3RyaW5nIHwgQnVmZmVyfSB2YWx1ZSBIZWFkZXIgbmFtZVxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZnVuY3Rpb24gaGVhZGVyTmFtZVRvU3RyaW5nICh2YWx1ZSkge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJ1xuICAgID8gaGVhZGVyTmFtZUxvd2VyQ2FzZWRSZWNvcmRbdmFsdWVdID8/IHZhbHVlLnRvTG93ZXJDYXNlKClcbiAgICA6IHRyZWUubG9va3VwKHZhbHVlKSA/PyB2YWx1ZS50b1N0cmluZygnbGF0aW4xJykudG9Mb3dlckNhc2UoKVxufVxuXG4vKipcbiAqIFJlY2VpdmUgdGhlIGJ1ZmZlciBhcyBhIHN0cmluZyBhbmQgcmV0dXJuIGl0cyBsb3dlcmNhc2UgdmFsdWUuXG4gKiBAcGFyYW0ge0J1ZmZlcn0gdmFsdWUgSGVhZGVyIG5hbWVcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIGJ1ZmZlclRvTG93ZXJDYXNlZEhlYWRlck5hbWUgKHZhbHVlKSB7XG4gIHJldHVybiB0cmVlLmxvb2t1cCh2YWx1ZSkgPz8gdmFsdWUudG9TdHJpbmcoJ2xhdGluMScpLnRvTG93ZXJDYXNlKClcbn1cblxuLyoqXG4gKiBAcGFyYW0ge1JlY29yZDxzdHJpbmcsIHN0cmluZyB8IHN0cmluZ1tdPiB8IChCdWZmZXIgfCBzdHJpbmcgfCAoQnVmZmVyIHwgc3RyaW5nKVtdKVtdfSBoZWFkZXJzXG4gKiBAcGFyYW0ge1JlY29yZDxzdHJpbmcsIHN0cmluZyB8IHN0cmluZ1tdPn0gW29ial1cbiAqIEByZXR1cm5zIHtSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCBzdHJpbmdbXT59XG4gKi9cbmZ1bmN0aW9uIHBhcnNlSGVhZGVycyAoaGVhZGVycywgb2JqKSB7XG4gIGlmIChvYmogPT09IHVuZGVmaW5lZCkgb2JqID0ge31cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBoZWFkZXJzLmxlbmd0aDsgaSArPSAyKSB7XG4gICAgY29uc3Qga2V5ID0gaGVhZGVyTmFtZVRvU3RyaW5nKGhlYWRlcnNbaV0pXG4gICAgbGV0IHZhbCA9IG9ialtrZXldXG5cbiAgICBpZiAodmFsKSB7XG4gICAgICBpZiAodHlwZW9mIHZhbCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgdmFsID0gW3ZhbF1cbiAgICAgICAgb2JqW2tleV0gPSB2YWxcbiAgICAgIH1cbiAgICAgIHZhbC5wdXNoKGhlYWRlcnNbaSArIDFdLnRvU3RyaW5nKCd1dGY4JykpXG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGhlYWRlcnNWYWx1ZSA9IGhlYWRlcnNbaSArIDFdXG4gICAgICBpZiAodHlwZW9mIGhlYWRlcnNWYWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgb2JqW2tleV0gPSBoZWFkZXJzVmFsdWVcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG9ialtrZXldID0gQXJyYXkuaXNBcnJheShoZWFkZXJzVmFsdWUpID8gaGVhZGVyc1ZhbHVlLm1hcCh4ID0+IHgudG9TdHJpbmcoJ3V0ZjgnKSkgOiBoZWFkZXJzVmFsdWUudG9TdHJpbmcoJ3V0ZjgnKVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vbm9kZWpzL25vZGUvcHVsbC80NjUyOFxuICBpZiAoJ2NvbnRlbnQtbGVuZ3RoJyBpbiBvYmogJiYgJ2NvbnRlbnQtZGlzcG9zaXRpb24nIGluIG9iaikge1xuICAgIG9ialsnY29udGVudC1kaXNwb3NpdGlvbiddID0gQnVmZmVyLmZyb20ob2JqWydjb250ZW50LWRpc3Bvc2l0aW9uJ10pLnRvU3RyaW5nKCdsYXRpbjEnKVxuICB9XG5cbiAgcmV0dXJuIG9ialxufVxuXG5mdW5jdGlvbiBwYXJzZVJhd0hlYWRlcnMgKGhlYWRlcnMpIHtcbiAgY29uc3QgbGVuID0gaGVhZGVycy5sZW5ndGhcbiAgY29uc3QgcmV0ID0gbmV3IEFycmF5KGxlbilcblxuICBsZXQgaGFzQ29udGVudExlbmd0aCA9IGZhbHNlXG4gIGxldCBjb250ZW50RGlzcG9zaXRpb25JZHggPSAtMVxuICBsZXQga2V5XG4gIGxldCB2YWxcbiAgbGV0IGtMZW4gPSAwXG5cbiAgZm9yIChsZXQgbiA9IDA7IG4gPCBoZWFkZXJzLmxlbmd0aDsgbiArPSAyKSB7XG4gICAga2V5ID0gaGVhZGVyc1tuXVxuICAgIHZhbCA9IGhlYWRlcnNbbiArIDFdXG5cbiAgICB0eXBlb2Yga2V5ICE9PSAnc3RyaW5nJyAmJiAoa2V5ID0ga2V5LnRvU3RyaW5nKCkpXG4gICAgdHlwZW9mIHZhbCAhPT0gJ3N0cmluZycgJiYgKHZhbCA9IHZhbC50b1N0cmluZygndXRmOCcpKVxuXG4gICAga0xlbiA9IGtleS5sZW5ndGhcbiAgICBpZiAoa0xlbiA9PT0gMTQgJiYga2V5WzddID09PSAnLScgJiYgKGtleSA9PT0gJ2NvbnRlbnQtbGVuZ3RoJyB8fCBrZXkudG9Mb3dlckNhc2UoKSA9PT0gJ2NvbnRlbnQtbGVuZ3RoJykpIHtcbiAgICAgIGhhc0NvbnRlbnRMZW5ndGggPSB0cnVlXG4gICAgfSBlbHNlIGlmIChrTGVuID09PSAxOSAmJiBrZXlbN10gPT09ICctJyAmJiAoa2V5ID09PSAnY29udGVudC1kaXNwb3NpdGlvbicgfHwga2V5LnRvTG93ZXJDYXNlKCkgPT09ICdjb250ZW50LWRpc3Bvc2l0aW9uJykpIHtcbiAgICAgIGNvbnRlbnREaXNwb3NpdGlvbklkeCA9IG4gKyAxXG4gICAgfVxuICAgIHJldFtuXSA9IGtleVxuICAgIHJldFtuICsgMV0gPSB2YWxcbiAgfVxuXG4gIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vbm9kZWpzL25vZGUvcHVsbC80NjUyOFxuICBpZiAoaGFzQ29udGVudExlbmd0aCAmJiBjb250ZW50RGlzcG9zaXRpb25JZHggIT09IC0xKSB7XG4gICAgcmV0W2NvbnRlbnREaXNwb3NpdGlvbklkeF0gPSBCdWZmZXIuZnJvbShyZXRbY29udGVudERpc3Bvc2l0aW9uSWR4XSkudG9TdHJpbmcoJ2xhdGluMScpXG4gIH1cblxuICByZXR1cm4gcmV0XG59XG5cbmZ1bmN0aW9uIGlzQnVmZmVyIChidWZmZXIpIHtcbiAgLy8gU2VlLCBodHRwczovL2dpdGh1Yi5jb20vbWNvbGxpbmEvdW5kaWNpL3B1bGwvMzE5XG4gIHJldHVybiBidWZmZXIgaW5zdGFuY2VvZiBVaW50OEFycmF5IHx8IEJ1ZmZlci5pc0J1ZmZlcihidWZmZXIpXG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlSGFuZGxlciAoaGFuZGxlciwgbWV0aG9kLCB1cGdyYWRlKSB7XG4gIGlmICghaGFuZGxlciB8fCB0eXBlb2YgaGFuZGxlciAhPT0gJ29iamVjdCcpIHtcbiAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2hhbmRsZXIgbXVzdCBiZSBhbiBvYmplY3QnKVxuICB9XG5cbiAgaWYgKHR5cGVvZiBoYW5kbGVyLm9uQ29ubmVjdCAhPT0gJ2Z1bmN0aW9uJykge1xuICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBvbkNvbm5lY3QgbWV0aG9kJylcbiAgfVxuXG4gIGlmICh0eXBlb2YgaGFuZGxlci5vbkVycm9yICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIG9uRXJyb3IgbWV0aG9kJylcbiAgfVxuXG4gIGlmICh0eXBlb2YgaGFuZGxlci5vbkJvZHlTZW50ICE9PSAnZnVuY3Rpb24nICYmIGhhbmRsZXIub25Cb2R5U2VudCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIG9uQm9keVNlbnQgbWV0aG9kJylcbiAgfVxuXG4gIGlmICh1cGdyYWRlIHx8IG1ldGhvZCA9PT0gJ0NPTk5FQ1QnKSB7XG4gICAgaWYgKHR5cGVvZiBoYW5kbGVyLm9uVXBncmFkZSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIG9uVXBncmFkZSBtZXRob2QnKVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBpZiAodHlwZW9mIGhhbmRsZXIub25IZWFkZXJzICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgb25IZWFkZXJzIG1ldGhvZCcpXG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBoYW5kbGVyLm9uRGF0YSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIG9uRGF0YSBtZXRob2QnKVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgaGFuZGxlci5vbkNvbXBsZXRlICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgb25Db21wbGV0ZSBtZXRob2QnKVxuICAgIH1cbiAgfVxufVxuXG4vLyBBIGJvZHkgaXMgZGlzdHVyYmVkIGlmIGl0IGhhcyBiZWVuIHJlYWQgZnJvbSBhbmQgaXQgY2Fubm90XG4vLyBiZSByZS11c2VkIHdpdGhvdXQgbG9zaW5nIHN0YXRlIG9yIGRhdGEuXG5mdW5jdGlvbiBpc0Rpc3R1cmJlZCAoYm9keSkge1xuICAvLyBUT0RPIChmaXgpOiBXaHkgaXMgYm9keVtrQm9keVVzZWRdIG5lZWRlZD9cbiAgcmV0dXJuICEhKGJvZHkgJiYgKHN0cmVhbS5pc0Rpc3R1cmJlZChib2R5KSB8fCBib2R5W2tCb2R5VXNlZF0pKVxufVxuXG5mdW5jdGlvbiBpc0Vycm9yZWQgKGJvZHkpIHtcbiAgcmV0dXJuICEhKGJvZHkgJiYgc3RyZWFtLmlzRXJyb3JlZChib2R5KSlcbn1cblxuZnVuY3Rpb24gaXNSZWFkYWJsZSAoYm9keSkge1xuICByZXR1cm4gISEoYm9keSAmJiBzdHJlYW0uaXNSZWFkYWJsZShib2R5KSlcbn1cblxuZnVuY3Rpb24gZ2V0U29ja2V0SW5mbyAoc29ja2V0KSB7XG4gIHJldHVybiB7XG4gICAgbG9jYWxBZGRyZXNzOiBzb2NrZXQubG9jYWxBZGRyZXNzLFxuICAgIGxvY2FsUG9ydDogc29ja2V0LmxvY2FsUG9ydCxcbiAgICByZW1vdGVBZGRyZXNzOiBzb2NrZXQucmVtb3RlQWRkcmVzcyxcbiAgICByZW1vdGVQb3J0OiBzb2NrZXQucmVtb3RlUG9ydCxcbiAgICByZW1vdGVGYW1pbHk6IHNvY2tldC5yZW1vdGVGYW1pbHksXG4gICAgdGltZW91dDogc29ja2V0LnRpbWVvdXQsXG4gICAgYnl0ZXNXcml0dGVuOiBzb2NrZXQuYnl0ZXNXcml0dGVuLFxuICAgIGJ5dGVzUmVhZDogc29ja2V0LmJ5dGVzUmVhZFxuICB9XG59XG5cbi8qKiBAdHlwZSB7Z2xvYmFsVGhpc1snUmVhZGFibGVTdHJlYW0nXX0gKi9cbmZ1bmN0aW9uIFJlYWRhYmxlU3RyZWFtRnJvbSAoaXRlcmFibGUpIHtcbiAgLy8gV2UgY2Fubm90IHVzZSBSZWFkYWJsZVN0cmVhbS5mcm9tIGhlcmUgYmVjYXVzZSBpdCBkb2VzIG5vdCByZXR1cm4gYSBieXRlIHN0cmVhbS5cblxuICBsZXQgaXRlcmF0b3JcbiAgcmV0dXJuIG5ldyBSZWFkYWJsZVN0cmVhbShcbiAgICB7XG4gICAgICBhc3luYyBzdGFydCAoKSB7XG4gICAgICAgIGl0ZXJhdG9yID0gaXRlcmFibGVbU3ltYm9sLmFzeW5jSXRlcmF0b3JdKClcbiAgICAgIH0sXG4gICAgICBhc3luYyBwdWxsIChjb250cm9sbGVyKSB7XG4gICAgICAgIGNvbnN0IHsgZG9uZSwgdmFsdWUgfSA9IGF3YWl0IGl0ZXJhdG9yLm5leHQoKVxuICAgICAgICBpZiAoZG9uZSkge1xuICAgICAgICAgIHF1ZXVlTWljcm90YXNrKCgpID0+IHtcbiAgICAgICAgICAgIGNvbnRyb2xsZXIuY2xvc2UoKVxuICAgICAgICAgICAgY29udHJvbGxlci5ieW9iUmVxdWVzdD8ucmVzcG9uZCgwKVxuICAgICAgICAgIH0pXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29uc3QgYnVmID0gQnVmZmVyLmlzQnVmZmVyKHZhbHVlKSA/IHZhbHVlIDogQnVmZmVyLmZyb20odmFsdWUpXG4gICAgICAgICAgaWYgKGJ1Zi5ieXRlTGVuZ3RoKSB7XG4gICAgICAgICAgICBjb250cm9sbGVyLmVucXVldWUobmV3IFVpbnQ4QXJyYXkoYnVmKSlcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNvbnRyb2xsZXIuZGVzaXJlZFNpemUgPiAwXG4gICAgICB9LFxuICAgICAgYXN5bmMgY2FuY2VsIChyZWFzb24pIHtcbiAgICAgICAgYXdhaXQgaXRlcmF0b3IucmV0dXJuKClcbiAgICAgIH0sXG4gICAgICB0eXBlOiAnYnl0ZXMnXG4gICAgfVxuICApXG59XG5cbi8vIFRoZSBjaHVuayBzaG91bGQgYmUgYSBGb3JtRGF0YSBpbnN0YW5jZSBhbmQgY29udGFpbnNcbi8vIGFsbCB0aGUgcmVxdWlyZWQgbWV0aG9kcy5cbmZ1bmN0aW9uIGlzRm9ybURhdGFMaWtlIChvYmplY3QpIHtcbiAgcmV0dXJuIChcbiAgICBvYmplY3QgJiZcbiAgICB0eXBlb2Ygb2JqZWN0ID09PSAnb2JqZWN0JyAmJlxuICAgIHR5cGVvZiBvYmplY3QuYXBwZW5kID09PSAnZnVuY3Rpb24nICYmXG4gICAgdHlwZW9mIG9iamVjdC5kZWxldGUgPT09ICdmdW5jdGlvbicgJiZcbiAgICB0eXBlb2Ygb2JqZWN0LmdldCA9PT0gJ2Z1bmN0aW9uJyAmJlxuICAgIHR5cGVvZiBvYmplY3QuZ2V0QWxsID09PSAnZnVuY3Rpb24nICYmXG4gICAgdHlwZW9mIG9iamVjdC5oYXMgPT09ICdmdW5jdGlvbicgJiZcbiAgICB0eXBlb2Ygb2JqZWN0LnNldCA9PT0gJ2Z1bmN0aW9uJyAmJlxuICAgIG9iamVjdFtTeW1ib2wudG9TdHJpbmdUYWddID09PSAnRm9ybURhdGEnXG4gIClcbn1cblxuZnVuY3Rpb24gYWRkQWJvcnRMaXN0ZW5lciAoc2lnbmFsLCBsaXN0ZW5lcikge1xuICBpZiAoJ2FkZEV2ZW50TGlzdGVuZXInIGluIHNpZ25hbCkge1xuICAgIHNpZ25hbC5hZGRFdmVudExpc3RlbmVyKCdhYm9ydCcsIGxpc3RlbmVyLCB7IG9uY2U6IHRydWUgfSlcbiAgICByZXR1cm4gKCkgPT4gc2lnbmFsLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2Fib3J0JywgbGlzdGVuZXIpXG4gIH1cbiAgc2lnbmFsLmFkZExpc3RlbmVyKCdhYm9ydCcsIGxpc3RlbmVyKVxuICByZXR1cm4gKCkgPT4gc2lnbmFsLnJlbW92ZUxpc3RlbmVyKCdhYm9ydCcsIGxpc3RlbmVyKVxufVxuXG5jb25zdCBoYXNUb1dlbGxGb3JtZWQgPSB0eXBlb2YgU3RyaW5nLnByb3RvdHlwZS50b1dlbGxGb3JtZWQgPT09ICdmdW5jdGlvbidcbmNvbnN0IGhhc0lzV2VsbEZvcm1lZCA9IHR5cGVvZiBTdHJpbmcucHJvdG90eXBlLmlzV2VsbEZvcm1lZCA9PT0gJ2Z1bmN0aW9uJ1xuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWxcbiAqL1xuZnVuY3Rpb24gdG9VU1ZTdHJpbmcgKHZhbCkge1xuICByZXR1cm4gaGFzVG9XZWxsRm9ybWVkID8gYCR7dmFsfWAudG9XZWxsRm9ybWVkKCkgOiBub2RlVXRpbC50b1VTVlN0cmluZyh2YWwpXG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbFxuICovXG4vLyBUT0RPOiBtb3ZlIHRoaXMgdG8gd2ViaWRsXG5mdW5jdGlvbiBpc1VTVlN0cmluZyAodmFsKSB7XG4gIHJldHVybiBoYXNJc1dlbGxGb3JtZWQgPyBgJHt2YWx9YC5pc1dlbGxGb3JtZWQoKSA6IHRvVVNWU3RyaW5nKHZhbCkgPT09IGAke3ZhbH1gXG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNzIzMCNzZWN0aW9uLTMuMi42XG4gKiBAcGFyYW0ge251bWJlcn0gY1xuICovXG5mdW5jdGlvbiBpc1Rva2VuQ2hhckNvZGUgKGMpIHtcbiAgc3dpdGNoIChjKSB7XG4gICAgY2FzZSAweDIyOlxuICAgIGNhc2UgMHgyODpcbiAgICBjYXNlIDB4Mjk6XG4gICAgY2FzZSAweDJjOlxuICAgIGNhc2UgMHgyZjpcbiAgICBjYXNlIDB4M2E6XG4gICAgY2FzZSAweDNiOlxuICAgIGNhc2UgMHgzYzpcbiAgICBjYXNlIDB4M2Q6XG4gICAgY2FzZSAweDNlOlxuICAgIGNhc2UgMHgzZjpcbiAgICBjYXNlIDB4NDA6XG4gICAgY2FzZSAweDViOlxuICAgIGNhc2UgMHg1YzpcbiAgICBjYXNlIDB4NWQ6XG4gICAgY2FzZSAweDdiOlxuICAgIGNhc2UgMHg3ZDpcbiAgICAgIC8vIERRVU9URSBhbmQgXCIoKSwvOjs8PT4/QFtcXF17fVwiXG4gICAgICByZXR1cm4gZmFsc2VcbiAgICBkZWZhdWx0OlxuICAgICAgLy8gVkNIQVIgJXgyMS03RVxuICAgICAgcmV0dXJuIGMgPj0gMHgyMSAmJiBjIDw9IDB4N2VcbiAgfVxufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSBjaGFyYWN0ZXJzXG4gKi9cbmZ1bmN0aW9uIGlzVmFsaWRIVFRQVG9rZW4gKGNoYXJhY3RlcnMpIHtcbiAgaWYgKGNoYXJhY3RlcnMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBjaGFyYWN0ZXJzLmxlbmd0aDsgKytpKSB7XG4gICAgaWYgKCFpc1Rva2VuQ2hhckNvZGUoY2hhcmFjdGVycy5jaGFyQ29kZUF0KGkpKSkge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuICB9XG4gIHJldHVybiB0cnVlXG59XG5cbi8vIGhlYWRlckNoYXJSZWdleCBoYXZlIGJlZW4gbGlmdGVkIGZyb21cbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvbm9kZS9ibG9iL21haW4vbGliL19odHRwX2NvbW1vbi5qc1xuXG4vKipcbiAqIE1hdGNoZXMgaWYgdmFsIGNvbnRhaW5zIGFuIGludmFsaWQgZmllbGQtdmNoYXJcbiAqICBmaWVsZC12YWx1ZSAgICA9ICooIGZpZWxkLWNvbnRlbnQgLyBvYnMtZm9sZCApXG4gKiAgZmllbGQtY29udGVudCAgPSBmaWVsZC12Y2hhciBbIDEqKCBTUCAvIEhUQUIgKSBmaWVsZC12Y2hhciBdXG4gKiAgZmllbGQtdmNoYXIgICAgPSBWQ0hBUiAvIG9icy10ZXh0XG4gKi9cbmNvbnN0IGhlYWRlckNoYXJSZWdleCA9IC9bXlxcdFxceDIwLVxceDdlXFx4ODAtXFx4ZmZdL1xuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSBjaGFyYWN0ZXJzXG4gKi9cbmZ1bmN0aW9uIGlzVmFsaWRIZWFkZXJWYWx1ZSAoY2hhcmFjdGVycykge1xuICByZXR1cm4gIWhlYWRlckNoYXJSZWdleC50ZXN0KGNoYXJhY3RlcnMpXG59XG5cbi8vIFBhcnNlZCBhY2NvcmRpbmdseSB0byBSRkMgOTExMFxuLy8gaHR0cHM6Ly93d3cucmZjLWVkaXRvci5vcmcvcmZjL3JmYzkxMTAjZmllbGQuY29udGVudC1yYW5nZVxuZnVuY3Rpb24gcGFyc2VSYW5nZUhlYWRlciAocmFuZ2UpIHtcbiAgaWYgKHJhbmdlID09IG51bGwgfHwgcmFuZ2UgPT09ICcnKSByZXR1cm4geyBzdGFydDogMCwgZW5kOiBudWxsLCBzaXplOiBudWxsIH1cblxuICBjb25zdCBtID0gcmFuZ2UgPyByYW5nZS5tYXRjaCgvXmJ5dGVzIChcXGQrKS0oXFxkKylcXC8oXFxkKyk/JC8pIDogbnVsbFxuICByZXR1cm4gbVxuICAgID8ge1xuICAgICAgICBzdGFydDogcGFyc2VJbnQobVsxXSksXG4gICAgICAgIGVuZDogbVsyXSA/IHBhcnNlSW50KG1bMl0pIDogbnVsbCxcbiAgICAgICAgc2l6ZTogbVszXSA/IHBhcnNlSW50KG1bM10pIDogbnVsbFxuICAgICAgfVxuICAgIDogbnVsbFxufVxuXG5mdW5jdGlvbiBhZGRMaXN0ZW5lciAob2JqLCBuYW1lLCBsaXN0ZW5lcikge1xuICBjb25zdCBsaXN0ZW5lcnMgPSAob2JqW2tMaXN0ZW5lcnNdID8/PSBbXSlcbiAgbGlzdGVuZXJzLnB1c2goW25hbWUsIGxpc3RlbmVyXSlcbiAgb2JqLm9uKG5hbWUsIGxpc3RlbmVyKVxuICByZXR1cm4gb2JqXG59XG5cbmZ1bmN0aW9uIHJlbW92ZUFsbExpc3RlbmVycyAob2JqKSB7XG4gIGZvciAoY29uc3QgW25hbWUsIGxpc3RlbmVyXSBvZiBvYmpba0xpc3RlbmVyc10gPz8gW10pIHtcbiAgICBvYmoucmVtb3ZlTGlzdGVuZXIobmFtZSwgbGlzdGVuZXIpXG4gIH1cbiAgb2JqW2tMaXN0ZW5lcnNdID0gbnVsbFxufVxuXG5mdW5jdGlvbiBlcnJvclJlcXVlc3QgKGNsaWVudCwgcmVxdWVzdCwgZXJyKSB7XG4gIHRyeSB7XG4gICAgcmVxdWVzdC5vbkVycm9yKGVycilcbiAgICBhc3NlcnQocmVxdWVzdC5hYm9ydGVkKVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICBjbGllbnQuZW1pdCgnZXJyb3InLCBlcnIpXG4gIH1cbn1cblxuY29uc3Qga0VudW1lcmFibGVQcm9wZXJ0eSA9IE9iamVjdC5jcmVhdGUobnVsbClcbmtFbnVtZXJhYmxlUHJvcGVydHkuZW51bWVyYWJsZSA9IHRydWVcblxuY29uc3Qgbm9ybWFsaXplZE1ldGhvZFJlY29yZHNCYXNlID0ge1xuICBkZWxldGU6ICdERUxFVEUnLFxuICBERUxFVEU6ICdERUxFVEUnLFxuICBnZXQ6ICdHRVQnLFxuICBHRVQ6ICdHRVQnLFxuICBoZWFkOiAnSEVBRCcsXG4gIEhFQUQ6ICdIRUFEJyxcbiAgb3B0aW9uczogJ09QVElPTlMnLFxuICBPUFRJT05TOiAnT1BUSU9OUycsXG4gIHBvc3Q6ICdQT1NUJyxcbiAgUE9TVDogJ1BPU1QnLFxuICBwdXQ6ICdQVVQnLFxuICBQVVQ6ICdQVVQnXG59XG5cbmNvbnN0IG5vcm1hbGl6ZWRNZXRob2RSZWNvcmRzID0ge1xuICAuLi5ub3JtYWxpemVkTWV0aG9kUmVjb3Jkc0Jhc2UsXG4gIHBhdGNoOiAncGF0Y2gnLFxuICBQQVRDSDogJ1BBVENIJ1xufVxuXG4vLyBOb3RlOiBvYmplY3QgcHJvdG90eXBlcyBzaG91bGQgbm90IGJlIGFibGUgdG8gYmUgcmVmZXJlbmNlZC4gZS5nLiBgT2JqZWN0I2hhc093blByb3BlcnR5YC5cbk9iamVjdC5zZXRQcm90b3R5cGVPZihub3JtYWxpemVkTWV0aG9kUmVjb3Jkc0Jhc2UsIG51bGwpXG5PYmplY3Quc2V0UHJvdG90eXBlT2Yobm9ybWFsaXplZE1ldGhvZFJlY29yZHMsIG51bGwpXG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBub3AsXG4gIGlzRGlzdHVyYmVkLFxuICBpc0Vycm9yZWQsXG4gIGlzUmVhZGFibGUsXG4gIHRvVVNWU3RyaW5nLFxuICBpc1VTVlN0cmluZyxcbiAgaXNCbG9iTGlrZSxcbiAgcGFyc2VPcmlnaW4sXG4gIHBhcnNlVVJMLFxuICBnZXRTZXJ2ZXJOYW1lLFxuICBpc1N0cmVhbSxcbiAgaXNJdGVyYWJsZSxcbiAgaXNBc3luY0l0ZXJhYmxlLFxuICBpc0Rlc3Ryb3llZCxcbiAgaGVhZGVyTmFtZVRvU3RyaW5nLFxuICBidWZmZXJUb0xvd2VyQ2FzZWRIZWFkZXJOYW1lLFxuICBhZGRMaXN0ZW5lcixcbiAgcmVtb3ZlQWxsTGlzdGVuZXJzLFxuICBlcnJvclJlcXVlc3QsXG4gIHBhcnNlUmF3SGVhZGVycyxcbiAgcGFyc2VIZWFkZXJzLFxuICBwYXJzZUtlZXBBbGl2ZVRpbWVvdXQsXG4gIGRlc3Ryb3ksXG4gIGJvZHlMZW5ndGgsXG4gIGRlZXBDbG9uZSxcbiAgUmVhZGFibGVTdHJlYW1Gcm9tLFxuICBpc0J1ZmZlcixcbiAgdmFsaWRhdGVIYW5kbGVyLFxuICBnZXRTb2NrZXRJbmZvLFxuICBpc0Zvcm1EYXRhTGlrZSxcbiAgYnVpbGRVUkwsXG4gIGFkZEFib3J0TGlzdGVuZXIsXG4gIGlzVmFsaWRIVFRQVG9rZW4sXG4gIGlzVmFsaWRIZWFkZXJWYWx1ZSxcbiAgaXNUb2tlbkNoYXJDb2RlLFxuICBwYXJzZVJhbmdlSGVhZGVyLFxuICBub3JtYWxpemVkTWV0aG9kUmVjb3Jkc0Jhc2UsXG4gIG5vcm1hbGl6ZWRNZXRob2RSZWNvcmRzLFxuICBpc1ZhbGlkUG9ydCxcbiAgaXNIdHRwT3JIdHRwc1ByZWZpeGVkLFxuICBub2RlTWFqb3IsXG4gIG5vZGVNaW5vcixcbiAgc2FmZUhUVFBNZXRob2RzOiBbJ0dFVCcsICdIRUFEJywgJ09QVElPTlMnLCAnVFJBQ0UnXSxcbiAgd3JhcFJlcXVlc3RCb2R5XG59XG4iLCAiJ3VzZSBzdHJpY3QnXG5jb25zdCBkaWFnbm9zdGljc0NoYW5uZWwgPSByZXF1aXJlKCdub2RlOmRpYWdub3N0aWNzX2NoYW5uZWwnKVxuY29uc3QgdXRpbCA9IHJlcXVpcmUoJ25vZGU6dXRpbCcpXG5cbmNvbnN0IHVuZGljaURlYnVnTG9nID0gdXRpbC5kZWJ1Z2xvZygndW5kaWNpJylcbmNvbnN0IGZldGNoRGVidWdsb2cgPSB1dGlsLmRlYnVnbG9nKCdmZXRjaCcpXG5jb25zdCB3ZWJzb2NrZXREZWJ1Z2xvZyA9IHV0aWwuZGVidWdsb2coJ3dlYnNvY2tldCcpXG5sZXQgaXNDbGllbnRTZXQgPSBmYWxzZVxuY29uc3QgY2hhbm5lbHMgPSB7XG4gIC8vIENsaWVudFxuICBiZWZvcmVDb25uZWN0OiBkaWFnbm9zdGljc0NoYW5uZWwuY2hhbm5lbCgndW5kaWNpOmNsaWVudDpiZWZvcmVDb25uZWN0JyksXG4gIGNvbm5lY3RlZDogZGlhZ25vc3RpY3NDaGFubmVsLmNoYW5uZWwoJ3VuZGljaTpjbGllbnQ6Y29ubmVjdGVkJyksXG4gIGNvbm5lY3RFcnJvcjogZGlhZ25vc3RpY3NDaGFubmVsLmNoYW5uZWwoJ3VuZGljaTpjbGllbnQ6Y29ubmVjdEVycm9yJyksXG4gIHNlbmRIZWFkZXJzOiBkaWFnbm9zdGljc0NoYW5uZWwuY2hhbm5lbCgndW5kaWNpOmNsaWVudDpzZW5kSGVhZGVycycpLFxuICAvLyBSZXF1ZXN0XG4gIGNyZWF0ZTogZGlhZ25vc3RpY3NDaGFubmVsLmNoYW5uZWwoJ3VuZGljaTpyZXF1ZXN0OmNyZWF0ZScpLFxuICBib2R5U2VudDogZGlhZ25vc3RpY3NDaGFubmVsLmNoYW5uZWwoJ3VuZGljaTpyZXF1ZXN0OmJvZHlTZW50JyksXG4gIGhlYWRlcnM6IGRpYWdub3N0aWNzQ2hhbm5lbC5jaGFubmVsKCd1bmRpY2k6cmVxdWVzdDpoZWFkZXJzJyksXG4gIHRyYWlsZXJzOiBkaWFnbm9zdGljc0NoYW5uZWwuY2hhbm5lbCgndW5kaWNpOnJlcXVlc3Q6dHJhaWxlcnMnKSxcbiAgZXJyb3I6IGRpYWdub3N0aWNzQ2hhbm5lbC5jaGFubmVsKCd1bmRpY2k6cmVxdWVzdDplcnJvcicpLFxuICAvLyBXZWJTb2NrZXRcbiAgb3BlbjogZGlhZ25vc3RpY3NDaGFubmVsLmNoYW5uZWwoJ3VuZGljaTp3ZWJzb2NrZXQ6b3BlbicpLFxuICBjbG9zZTogZGlhZ25vc3RpY3NDaGFubmVsLmNoYW5uZWwoJ3VuZGljaTp3ZWJzb2NrZXQ6Y2xvc2UnKSxcbiAgc29ja2V0RXJyb3I6IGRpYWdub3N0aWNzQ2hhbm5lbC5jaGFubmVsKCd1bmRpY2k6d2Vic29ja2V0OnNvY2tldF9lcnJvcicpLFxuICBwaW5nOiBkaWFnbm9zdGljc0NoYW5uZWwuY2hhbm5lbCgndW5kaWNpOndlYnNvY2tldDpwaW5nJyksXG4gIHBvbmc6IGRpYWdub3N0aWNzQ2hhbm5lbC5jaGFubmVsKCd1bmRpY2k6d2Vic29ja2V0OnBvbmcnKVxufVxuXG5pZiAodW5kaWNpRGVidWdMb2cuZW5hYmxlZCB8fCBmZXRjaERlYnVnbG9nLmVuYWJsZWQpIHtcbiAgY29uc3QgZGVidWdsb2cgPSBmZXRjaERlYnVnbG9nLmVuYWJsZWQgPyBmZXRjaERlYnVnbG9nIDogdW5kaWNpRGVidWdMb2dcblxuICAvLyBUcmFjayBhbGwgQ2xpZW50IGV2ZW50c1xuICBkaWFnbm9zdGljc0NoYW5uZWwuY2hhbm5lbCgndW5kaWNpOmNsaWVudDpiZWZvcmVDb25uZWN0Jykuc3Vic2NyaWJlKGV2dCA9PiB7XG4gICAgY29uc3Qge1xuICAgICAgY29ubmVjdFBhcmFtczogeyB2ZXJzaW9uLCBwcm90b2NvbCwgcG9ydCwgaG9zdCB9XG4gICAgfSA9IGV2dFxuICAgIGRlYnVnbG9nKFxuICAgICAgJ2Nvbm5lY3RpbmcgdG8gJXMgdXNpbmcgJXMlcycsXG4gICAgICBgJHtob3N0fSR7cG9ydCA/IGA6JHtwb3J0fWAgOiAnJ31gLFxuICAgICAgcHJvdG9jb2wsXG4gICAgICB2ZXJzaW9uXG4gICAgKVxuICB9KVxuXG4gIGRpYWdub3N0aWNzQ2hhbm5lbC5jaGFubmVsKCd1bmRpY2k6Y2xpZW50OmNvbm5lY3RlZCcpLnN1YnNjcmliZShldnQgPT4ge1xuICAgIGNvbnN0IHtcbiAgICAgIGNvbm5lY3RQYXJhbXM6IHsgdmVyc2lvbiwgcHJvdG9jb2wsIHBvcnQsIGhvc3QgfVxuICAgIH0gPSBldnRcbiAgICBkZWJ1Z2xvZyhcbiAgICAgICdjb25uZWN0ZWQgdG8gJXMgdXNpbmcgJXMlcycsXG4gICAgICBgJHtob3N0fSR7cG9ydCA/IGA6JHtwb3J0fWAgOiAnJ31gLFxuICAgICAgcHJvdG9jb2wsXG4gICAgICB2ZXJzaW9uXG4gICAgKVxuICB9KVxuXG4gIGRpYWdub3N0aWNzQ2hhbm5lbC5jaGFubmVsKCd1bmRpY2k6Y2xpZW50OmNvbm5lY3RFcnJvcicpLnN1YnNjcmliZShldnQgPT4ge1xuICAgIGNvbnN0IHtcbiAgICAgIGNvbm5lY3RQYXJhbXM6IHsgdmVyc2lvbiwgcHJvdG9jb2wsIHBvcnQsIGhvc3QgfSxcbiAgICAgIGVycm9yXG4gICAgfSA9IGV2dFxuICAgIGRlYnVnbG9nKFxuICAgICAgJ2Nvbm5lY3Rpb24gdG8gJXMgdXNpbmcgJXMlcyBlcnJvcmVkIC0gJXMnLFxuICAgICAgYCR7aG9zdH0ke3BvcnQgPyBgOiR7cG9ydH1gIDogJyd9YCxcbiAgICAgIHByb3RvY29sLFxuICAgICAgdmVyc2lvbixcbiAgICAgIGVycm9yLm1lc3NhZ2VcbiAgICApXG4gIH0pXG5cbiAgZGlhZ25vc3RpY3NDaGFubmVsLmNoYW5uZWwoJ3VuZGljaTpjbGllbnQ6c2VuZEhlYWRlcnMnKS5zdWJzY3JpYmUoZXZ0ID0+IHtcbiAgICBjb25zdCB7XG4gICAgICByZXF1ZXN0OiB7IG1ldGhvZCwgcGF0aCwgb3JpZ2luIH1cbiAgICB9ID0gZXZ0XG4gICAgZGVidWdsb2coJ3NlbmRpbmcgcmVxdWVzdCB0byAlcyAlcy8lcycsIG1ldGhvZCwgb3JpZ2luLCBwYXRoKVxuICB9KVxuXG4gIC8vIFRyYWNrIFJlcXVlc3QgZXZlbnRzXG4gIGRpYWdub3N0aWNzQ2hhbm5lbC5jaGFubmVsKCd1bmRpY2k6cmVxdWVzdDpoZWFkZXJzJykuc3Vic2NyaWJlKGV2dCA9PiB7XG4gICAgY29uc3Qge1xuICAgICAgcmVxdWVzdDogeyBtZXRob2QsIHBhdGgsIG9yaWdpbiB9LFxuICAgICAgcmVzcG9uc2U6IHsgc3RhdHVzQ29kZSB9XG4gICAgfSA9IGV2dFxuICAgIGRlYnVnbG9nKFxuICAgICAgJ3JlY2VpdmVkIHJlc3BvbnNlIHRvICVzICVzLyVzIC0gSFRUUCAlZCcsXG4gICAgICBtZXRob2QsXG4gICAgICBvcmlnaW4sXG4gICAgICBwYXRoLFxuICAgICAgc3RhdHVzQ29kZVxuICAgIClcbiAgfSlcblxuICBkaWFnbm9zdGljc0NoYW5uZWwuY2hhbm5lbCgndW5kaWNpOnJlcXVlc3Q6dHJhaWxlcnMnKS5zdWJzY3JpYmUoZXZ0ID0+IHtcbiAgICBjb25zdCB7XG4gICAgICByZXF1ZXN0OiB7IG1ldGhvZCwgcGF0aCwgb3JpZ2luIH1cbiAgICB9ID0gZXZ0XG4gICAgZGVidWdsb2coJ3RyYWlsZXJzIHJlY2VpdmVkIGZyb20gJXMgJXMvJXMnLCBtZXRob2QsIG9yaWdpbiwgcGF0aClcbiAgfSlcblxuICBkaWFnbm9zdGljc0NoYW5uZWwuY2hhbm5lbCgndW5kaWNpOnJlcXVlc3Q6ZXJyb3InKS5zdWJzY3JpYmUoZXZ0ID0+IHtcbiAgICBjb25zdCB7XG4gICAgICByZXF1ZXN0OiB7IG1ldGhvZCwgcGF0aCwgb3JpZ2luIH0sXG4gICAgICBlcnJvclxuICAgIH0gPSBldnRcbiAgICBkZWJ1Z2xvZyhcbiAgICAgICdyZXF1ZXN0IHRvICVzICVzLyVzIGVycm9yZWQgLSAlcycsXG4gICAgICBtZXRob2QsXG4gICAgICBvcmlnaW4sXG4gICAgICBwYXRoLFxuICAgICAgZXJyb3IubWVzc2FnZVxuICAgIClcbiAgfSlcblxuICBpc0NsaWVudFNldCA9IHRydWVcbn1cblxuaWYgKHdlYnNvY2tldERlYnVnbG9nLmVuYWJsZWQpIHtcbiAgaWYgKCFpc0NsaWVudFNldCkge1xuICAgIGNvbnN0IGRlYnVnbG9nID0gdW5kaWNpRGVidWdMb2cuZW5hYmxlZCA/IHVuZGljaURlYnVnTG9nIDogd2Vic29ja2V0RGVidWdsb2dcbiAgICBkaWFnbm9zdGljc0NoYW5uZWwuY2hhbm5lbCgndW5kaWNpOmNsaWVudDpiZWZvcmVDb25uZWN0Jykuc3Vic2NyaWJlKGV2dCA9PiB7XG4gICAgICBjb25zdCB7XG4gICAgICAgIGNvbm5lY3RQYXJhbXM6IHsgdmVyc2lvbiwgcHJvdG9jb2wsIHBvcnQsIGhvc3QgfVxuICAgICAgfSA9IGV2dFxuICAgICAgZGVidWdsb2coXG4gICAgICAgICdjb25uZWN0aW5nIHRvICVzJXMgdXNpbmcgJXMlcycsXG4gICAgICAgIGhvc3QsXG4gICAgICAgIHBvcnQgPyBgOiR7cG9ydH1gIDogJycsXG4gICAgICAgIHByb3RvY29sLFxuICAgICAgICB2ZXJzaW9uXG4gICAgICApXG4gICAgfSlcblxuICAgIGRpYWdub3N0aWNzQ2hhbm5lbC5jaGFubmVsKCd1bmRpY2k6Y2xpZW50OmNvbm5lY3RlZCcpLnN1YnNjcmliZShldnQgPT4ge1xuICAgICAgY29uc3Qge1xuICAgICAgICBjb25uZWN0UGFyYW1zOiB7IHZlcnNpb24sIHByb3RvY29sLCBwb3J0LCBob3N0IH1cbiAgICAgIH0gPSBldnRcbiAgICAgIGRlYnVnbG9nKFxuICAgICAgICAnY29ubmVjdGVkIHRvICVzJXMgdXNpbmcgJXMlcycsXG4gICAgICAgIGhvc3QsXG4gICAgICAgIHBvcnQgPyBgOiR7cG9ydH1gIDogJycsXG4gICAgICAgIHByb3RvY29sLFxuICAgICAgICB2ZXJzaW9uXG4gICAgICApXG4gICAgfSlcblxuICAgIGRpYWdub3N0aWNzQ2hhbm5lbC5jaGFubmVsKCd1bmRpY2k6Y2xpZW50OmNvbm5lY3RFcnJvcicpLnN1YnNjcmliZShldnQgPT4ge1xuICAgICAgY29uc3Qge1xuICAgICAgICBjb25uZWN0UGFyYW1zOiB7IHZlcnNpb24sIHByb3RvY29sLCBwb3J0LCBob3N0IH0sXG4gICAgICAgIGVycm9yXG4gICAgICB9ID0gZXZ0XG4gICAgICBkZWJ1Z2xvZyhcbiAgICAgICAgJ2Nvbm5lY3Rpb24gdG8gJXMlcyB1c2luZyAlcyVzIGVycm9yZWQgLSAlcycsXG4gICAgICAgIGhvc3QsXG4gICAgICAgIHBvcnQgPyBgOiR7cG9ydH1gIDogJycsXG4gICAgICAgIHByb3RvY29sLFxuICAgICAgICB2ZXJzaW9uLFxuICAgICAgICBlcnJvci5tZXNzYWdlXG4gICAgICApXG4gICAgfSlcblxuICAgIGRpYWdub3N0aWNzQ2hhbm5lbC5jaGFubmVsKCd1bmRpY2k6Y2xpZW50OnNlbmRIZWFkZXJzJykuc3Vic2NyaWJlKGV2dCA9PiB7XG4gICAgICBjb25zdCB7XG4gICAgICAgIHJlcXVlc3Q6IHsgbWV0aG9kLCBwYXRoLCBvcmlnaW4gfVxuICAgICAgfSA9IGV2dFxuICAgICAgZGVidWdsb2coJ3NlbmRpbmcgcmVxdWVzdCB0byAlcyAlcy8lcycsIG1ldGhvZCwgb3JpZ2luLCBwYXRoKVxuICAgIH0pXG4gIH1cblxuICAvLyBUcmFjayBhbGwgV2ViU29ja2V0IGV2ZW50c1xuICBkaWFnbm9zdGljc0NoYW5uZWwuY2hhbm5lbCgndW5kaWNpOndlYnNvY2tldDpvcGVuJykuc3Vic2NyaWJlKGV2dCA9PiB7XG4gICAgY29uc3Qge1xuICAgICAgYWRkcmVzczogeyBhZGRyZXNzLCBwb3J0IH1cbiAgICB9ID0gZXZ0XG4gICAgd2Vic29ja2V0RGVidWdsb2coJ2Nvbm5lY3Rpb24gb3BlbmVkICVzJXMnLCBhZGRyZXNzLCBwb3J0ID8gYDoke3BvcnR9YCA6ICcnKVxuICB9KVxuXG4gIGRpYWdub3N0aWNzQ2hhbm5lbC5jaGFubmVsKCd1bmRpY2k6d2Vic29ja2V0OmNsb3NlJykuc3Vic2NyaWJlKGV2dCA9PiB7XG4gICAgY29uc3QgeyB3ZWJzb2NrZXQsIGNvZGUsIHJlYXNvbiB9ID0gZXZ0XG4gICAgd2Vic29ja2V0RGVidWdsb2coXG4gICAgICAnY2xvc2VkIGNvbm5lY3Rpb24gdG8gJXMgLSAlcyAlcycsXG4gICAgICB3ZWJzb2NrZXQudXJsLFxuICAgICAgY29kZSxcbiAgICAgIHJlYXNvblxuICAgIClcbiAgfSlcblxuICBkaWFnbm9zdGljc0NoYW5uZWwuY2hhbm5lbCgndW5kaWNpOndlYnNvY2tldDpzb2NrZXRfZXJyb3InKS5zdWJzY3JpYmUoZXJyID0+IHtcbiAgICB3ZWJzb2NrZXREZWJ1Z2xvZygnY29ubmVjdGlvbiBlcnJvcmVkIC0gJXMnLCBlcnIubWVzc2FnZSlcbiAgfSlcblxuICBkaWFnbm9zdGljc0NoYW5uZWwuY2hhbm5lbCgndW5kaWNpOndlYnNvY2tldDpwaW5nJykuc3Vic2NyaWJlKGV2dCA9PiB7XG4gICAgd2Vic29ja2V0RGVidWdsb2coJ3BpbmcgcmVjZWl2ZWQnKVxuICB9KVxuXG4gIGRpYWdub3N0aWNzQ2hhbm5lbC5jaGFubmVsKCd1bmRpY2k6d2Vic29ja2V0OnBvbmcnKS5zdWJzY3JpYmUoZXZ0ID0+IHtcbiAgICB3ZWJzb2NrZXREZWJ1Z2xvZygncG9uZyByZWNlaXZlZCcpXG4gIH0pXG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBjaGFubmVsc1xufVxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7XG4gIEludmFsaWRBcmd1bWVudEVycm9yLFxuICBOb3RTdXBwb3J0ZWRFcnJvclxufSA9IHJlcXVpcmUoJy4vZXJyb3JzJylcbmNvbnN0IGFzc2VydCA9IHJlcXVpcmUoJ25vZGU6YXNzZXJ0JylcbmNvbnN0IHtcbiAgaXNWYWxpZEhUVFBUb2tlbixcbiAgaXNWYWxpZEhlYWRlclZhbHVlLFxuICBpc1N0cmVhbSxcbiAgZGVzdHJveSxcbiAgaXNCdWZmZXIsXG4gIGlzRm9ybURhdGFMaWtlLFxuICBpc0l0ZXJhYmxlLFxuICBpc0Jsb2JMaWtlLFxuICBidWlsZFVSTCxcbiAgdmFsaWRhdGVIYW5kbGVyLFxuICBnZXRTZXJ2ZXJOYW1lLFxuICBub3JtYWxpemVkTWV0aG9kUmVjb3Jkc1xufSA9IHJlcXVpcmUoJy4vdXRpbCcpXG5jb25zdCB7IGNoYW5uZWxzIH0gPSByZXF1aXJlKCcuL2RpYWdub3N0aWNzLmpzJylcbmNvbnN0IHsgaGVhZGVyTmFtZUxvd2VyQ2FzZWRSZWNvcmQgfSA9IHJlcXVpcmUoJy4vY29uc3RhbnRzJylcblxuLy8gVmVyaWZpZXMgdGhhdCBhIGdpdmVuIHBhdGggaXMgdmFsaWQgZG9lcyBub3QgY29udGFpbiBjb250cm9sIGNoYXJzIFxceDAwIHRvIFxceDIwXG5jb25zdCBpbnZhbGlkUGF0aFJlZ2V4ID0gL1teXFx1MDAyMS1cXHUwMGZmXS9cblxuY29uc3Qga0hhbmRsZXIgPSBTeW1ib2woJ2hhbmRsZXInKVxuXG5jbGFzcyBSZXF1ZXN0IHtcbiAgY29uc3RydWN0b3IgKG9yaWdpbiwge1xuICAgIHBhdGgsXG4gICAgbWV0aG9kLFxuICAgIGJvZHksXG4gICAgaGVhZGVycyxcbiAgICBxdWVyeSxcbiAgICBpZGVtcG90ZW50LFxuICAgIGJsb2NraW5nLFxuICAgIHVwZ3JhZGUsXG4gICAgaGVhZGVyc1RpbWVvdXQsXG4gICAgYm9keVRpbWVvdXQsXG4gICAgcmVzZXQsXG4gICAgdGhyb3dPbkVycm9yLFxuICAgIGV4cGVjdENvbnRpbnVlLFxuICAgIHNlcnZlcm5hbWVcbiAgfSwgaGFuZGxlcikge1xuICAgIGlmICh0eXBlb2YgcGF0aCAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcigncGF0aCBtdXN0IGJlIGEgc3RyaW5nJylcbiAgICB9IGVsc2UgaWYgKFxuICAgICAgcGF0aFswXSAhPT0gJy8nICYmXG4gICAgICAhKHBhdGguc3RhcnRzV2l0aCgnaHR0cDovLycpIHx8IHBhdGguc3RhcnRzV2l0aCgnaHR0cHM6Ly8nKSkgJiZcbiAgICAgIG1ldGhvZCAhPT0gJ0NPTk5FQ1QnXG4gICAgKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ3BhdGggbXVzdCBiZSBhbiBhYnNvbHV0ZSBVUkwgb3Igc3RhcnQgd2l0aCBhIHNsYXNoJylcbiAgICB9IGVsc2UgaWYgKGludmFsaWRQYXRoUmVnZXgudGVzdChwYXRoKSkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIHJlcXVlc3QgcGF0aCcpXG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBtZXRob2QgIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ21ldGhvZCBtdXN0IGJlIGEgc3RyaW5nJylcbiAgICB9IGVsc2UgaWYgKG5vcm1hbGl6ZWRNZXRob2RSZWNvcmRzW21ldGhvZF0gPT09IHVuZGVmaW5lZCAmJiAhaXNWYWxpZEhUVFBUb2tlbihtZXRob2QpKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgcmVxdWVzdCBtZXRob2QnKVxuICAgIH1cblxuICAgIGlmICh1cGdyYWRlICYmIHR5cGVvZiB1cGdyYWRlICE9PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCd1cGdyYWRlIG11c3QgYmUgYSBzdHJpbmcnKVxuICAgIH1cblxuICAgIGlmIChoZWFkZXJzVGltZW91dCAhPSBudWxsICYmICghTnVtYmVyLmlzRmluaXRlKGhlYWRlcnNUaW1lb3V0KSB8fCBoZWFkZXJzVGltZW91dCA8IDApKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgaGVhZGVyc1RpbWVvdXQnKVxuICAgIH1cblxuICAgIGlmIChib2R5VGltZW91dCAhPSBudWxsICYmICghTnVtYmVyLmlzRmluaXRlKGJvZHlUaW1lb3V0KSB8fCBib2R5VGltZW91dCA8IDApKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgYm9keVRpbWVvdXQnKVxuICAgIH1cblxuICAgIGlmIChyZXNldCAhPSBudWxsICYmIHR5cGVvZiByZXNldCAhPT0gJ2Jvb2xlYW4nKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgcmVzZXQnKVxuICAgIH1cblxuICAgIGlmIChleHBlY3RDb250aW51ZSAhPSBudWxsICYmIHR5cGVvZiBleHBlY3RDb250aW51ZSAhPT0gJ2Jvb2xlYW4nKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgZXhwZWN0Q29udGludWUnKVxuICAgIH1cblxuICAgIHRoaXMuaGVhZGVyc1RpbWVvdXQgPSBoZWFkZXJzVGltZW91dFxuXG4gICAgdGhpcy5ib2R5VGltZW91dCA9IGJvZHlUaW1lb3V0XG5cbiAgICB0aGlzLnRocm93T25FcnJvciA9IHRocm93T25FcnJvciA9PT0gdHJ1ZVxuXG4gICAgdGhpcy5tZXRob2QgPSBtZXRob2RcblxuICAgIHRoaXMuYWJvcnQgPSBudWxsXG5cbiAgICBpZiAoYm9keSA9PSBudWxsKSB7XG4gICAgICB0aGlzLmJvZHkgPSBudWxsXG4gICAgfSBlbHNlIGlmIChpc1N0cmVhbShib2R5KSkge1xuICAgICAgdGhpcy5ib2R5ID0gYm9keVxuXG4gICAgICBjb25zdCByU3RhdGUgPSB0aGlzLmJvZHkuX3JlYWRhYmxlU3RhdGVcbiAgICAgIGlmICghclN0YXRlIHx8ICFyU3RhdGUuYXV0b0Rlc3Ryb3kpIHtcbiAgICAgICAgdGhpcy5lbmRIYW5kbGVyID0gZnVuY3Rpb24gYXV0b0Rlc3Ryb3kgKCkge1xuICAgICAgICAgIGRlc3Ryb3kodGhpcylcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmJvZHkub24oJ2VuZCcsIHRoaXMuZW5kSGFuZGxlcilcbiAgICAgIH1cblxuICAgICAgdGhpcy5lcnJvckhhbmRsZXIgPSBlcnIgPT4ge1xuICAgICAgICBpZiAodGhpcy5hYm9ydCkge1xuICAgICAgICAgIHRoaXMuYWJvcnQoZXJyKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMuZXJyb3IgPSBlcnJcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdGhpcy5ib2R5Lm9uKCdlcnJvcicsIHRoaXMuZXJyb3JIYW5kbGVyKVxuICAgIH0gZWxzZSBpZiAoaXNCdWZmZXIoYm9keSkpIHtcbiAgICAgIHRoaXMuYm9keSA9IGJvZHkuYnl0ZUxlbmd0aCA/IGJvZHkgOiBudWxsXG4gICAgfSBlbHNlIGlmIChBcnJheUJ1ZmZlci5pc1ZpZXcoYm9keSkpIHtcbiAgICAgIHRoaXMuYm9keSA9IGJvZHkuYnVmZmVyLmJ5dGVMZW5ndGggPyBCdWZmZXIuZnJvbShib2R5LmJ1ZmZlciwgYm9keS5ieXRlT2Zmc2V0LCBib2R5LmJ5dGVMZW5ndGgpIDogbnVsbFxuICAgIH0gZWxzZSBpZiAoYm9keSBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKSB7XG4gICAgICB0aGlzLmJvZHkgPSBib2R5LmJ5dGVMZW5ndGggPyBCdWZmZXIuZnJvbShib2R5KSA6IG51bGxcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBib2R5ID09PSAnc3RyaW5nJykge1xuICAgICAgdGhpcy5ib2R5ID0gYm9keS5sZW5ndGggPyBCdWZmZXIuZnJvbShib2R5KSA6IG51bGxcbiAgICB9IGVsc2UgaWYgKGlzRm9ybURhdGFMaWtlKGJvZHkpIHx8IGlzSXRlcmFibGUoYm9keSkgfHwgaXNCbG9iTGlrZShib2R5KSkge1xuICAgICAgdGhpcy5ib2R5ID0gYm9keVxuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2JvZHkgbXVzdCBiZSBhIHN0cmluZywgYSBCdWZmZXIsIGEgUmVhZGFibGUgc3RyZWFtLCBhbiBpdGVyYWJsZSwgb3IgYW4gYXN5bmMgaXRlcmFibGUnKVxuICAgIH1cblxuICAgIHRoaXMuY29tcGxldGVkID0gZmFsc2VcblxuICAgIHRoaXMuYWJvcnRlZCA9IGZhbHNlXG5cbiAgICB0aGlzLnVwZ3JhZGUgPSB1cGdyYWRlIHx8IG51bGxcblxuICAgIHRoaXMucGF0aCA9IHF1ZXJ5ID8gYnVpbGRVUkwocGF0aCwgcXVlcnkpIDogcGF0aFxuXG4gICAgdGhpcy5vcmlnaW4gPSBvcmlnaW5cblxuICAgIHRoaXMuaWRlbXBvdGVudCA9IGlkZW1wb3RlbnQgPT0gbnVsbFxuICAgICAgPyBtZXRob2QgPT09ICdIRUFEJyB8fCBtZXRob2QgPT09ICdHRVQnXG4gICAgICA6IGlkZW1wb3RlbnRcblxuICAgIHRoaXMuYmxvY2tpbmcgPSBibG9ja2luZyA9PSBudWxsID8gZmFsc2UgOiBibG9ja2luZ1xuXG4gICAgdGhpcy5yZXNldCA9IHJlc2V0ID09IG51bGwgPyBudWxsIDogcmVzZXRcblxuICAgIHRoaXMuaG9zdCA9IG51bGxcblxuICAgIHRoaXMuY29udGVudExlbmd0aCA9IG51bGxcblxuICAgIHRoaXMuY29udGVudFR5cGUgPSBudWxsXG5cbiAgICB0aGlzLmhlYWRlcnMgPSBbXVxuXG4gICAgLy8gT25seSBmb3IgSDJcbiAgICB0aGlzLmV4cGVjdENvbnRpbnVlID0gZXhwZWN0Q29udGludWUgIT0gbnVsbCA/IGV4cGVjdENvbnRpbnVlIDogZmFsc2VcblxuICAgIGlmIChBcnJheS5pc0FycmF5KGhlYWRlcnMpKSB7XG4gICAgICBpZiAoaGVhZGVycy5sZW5ndGggJSAyICE9PSAwKSB7XG4gICAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaGVhZGVycyBhcnJheSBtdXN0IGJlIGV2ZW4nKVxuICAgICAgfVxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBoZWFkZXJzLmxlbmd0aDsgaSArPSAyKSB7XG4gICAgICAgIHByb2Nlc3NIZWFkZXIodGhpcywgaGVhZGVyc1tpXSwgaGVhZGVyc1tpICsgMV0pXG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChoZWFkZXJzICYmIHR5cGVvZiBoZWFkZXJzID09PSAnb2JqZWN0Jykge1xuICAgICAgaWYgKGhlYWRlcnNbU3ltYm9sLml0ZXJhdG9yXSkge1xuICAgICAgICBmb3IgKGNvbnN0IGhlYWRlciBvZiBoZWFkZXJzKSB7XG4gICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGhlYWRlcikgfHwgaGVhZGVyLmxlbmd0aCAhPT0gMikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdoZWFkZXJzIG11c3QgYmUgaW4ga2V5LXZhbHVlIHBhaXIgZm9ybWF0JylcbiAgICAgICAgICB9XG4gICAgICAgICAgcHJvY2Vzc0hlYWRlcih0aGlzLCBoZWFkZXJbMF0sIGhlYWRlclsxXSlcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKGhlYWRlcnMpXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7ICsraSkge1xuICAgICAgICAgIHByb2Nlc3NIZWFkZXIodGhpcywga2V5c1tpXSwgaGVhZGVyc1trZXlzW2ldXSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoaGVhZGVycyAhPSBudWxsKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2hlYWRlcnMgbXVzdCBiZSBhbiBvYmplY3Qgb3IgYW4gYXJyYXknKVxuICAgIH1cblxuICAgIHZhbGlkYXRlSGFuZGxlcihoYW5kbGVyLCBtZXRob2QsIHVwZ3JhZGUpXG5cbiAgICB0aGlzLnNlcnZlcm5hbWUgPSBzZXJ2ZXJuYW1lIHx8IGdldFNlcnZlck5hbWUodGhpcy5ob3N0KVxuXG4gICAgdGhpc1trSGFuZGxlcl0gPSBoYW5kbGVyXG5cbiAgICBpZiAoY2hhbm5lbHMuY3JlYXRlLmhhc1N1YnNjcmliZXJzKSB7XG4gICAgICBjaGFubmVscy5jcmVhdGUucHVibGlzaCh7IHJlcXVlc3Q6IHRoaXMgfSlcbiAgICB9XG4gIH1cblxuICBvbkJvZHlTZW50IChjaHVuaykge1xuICAgIGlmICh0aGlzW2tIYW5kbGVyXS5vbkJvZHlTZW50KSB7XG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gdGhpc1trSGFuZGxlcl0ub25Cb2R5U2VudChjaHVuaylcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICB0aGlzLmFib3J0KGVycilcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBvblJlcXVlc3RTZW50ICgpIHtcbiAgICBpZiAoY2hhbm5lbHMuYm9keVNlbnQuaGFzU3Vic2NyaWJlcnMpIHtcbiAgICAgIGNoYW5uZWxzLmJvZHlTZW50LnB1Ymxpc2goeyByZXF1ZXN0OiB0aGlzIH0pXG4gICAgfVxuXG4gICAgaWYgKHRoaXNba0hhbmRsZXJdLm9uUmVxdWVzdFNlbnQpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiB0aGlzW2tIYW5kbGVyXS5vblJlcXVlc3RTZW50KClcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICB0aGlzLmFib3J0KGVycilcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBvbkNvbm5lY3QgKGFib3J0KSB7XG4gICAgYXNzZXJ0KCF0aGlzLmFib3J0ZWQpXG4gICAgYXNzZXJ0KCF0aGlzLmNvbXBsZXRlZClcblxuICAgIGlmICh0aGlzLmVycm9yKSB7XG4gICAgICBhYm9ydCh0aGlzLmVycm9yKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmFib3J0ID0gYWJvcnRcbiAgICAgIHJldHVybiB0aGlzW2tIYW5kbGVyXS5vbkNvbm5lY3QoYWJvcnQpXG4gICAgfVxuICB9XG5cbiAgb25SZXNwb25zZVN0YXJ0ZWQgKCkge1xuICAgIHJldHVybiB0aGlzW2tIYW5kbGVyXS5vblJlc3BvbnNlU3RhcnRlZD8uKClcbiAgfVxuXG4gIG9uSGVhZGVycyAoc3RhdHVzQ29kZSwgaGVhZGVycywgcmVzdW1lLCBzdGF0dXNUZXh0KSB7XG4gICAgYXNzZXJ0KCF0aGlzLmFib3J0ZWQpXG4gICAgYXNzZXJ0KCF0aGlzLmNvbXBsZXRlZClcblxuICAgIGlmIChjaGFubmVscy5oZWFkZXJzLmhhc1N1YnNjcmliZXJzKSB7XG4gICAgICBjaGFubmVscy5oZWFkZXJzLnB1Ymxpc2goeyByZXF1ZXN0OiB0aGlzLCByZXNwb25zZTogeyBzdGF0dXNDb2RlLCBoZWFkZXJzLCBzdGF0dXNUZXh0IH0gfSlcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgcmV0dXJuIHRoaXNba0hhbmRsZXJdLm9uSGVhZGVycyhzdGF0dXNDb2RlLCBoZWFkZXJzLCByZXN1bWUsIHN0YXR1c1RleHQpXG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICB0aGlzLmFib3J0KGVycilcbiAgICB9XG4gIH1cblxuICBvbkRhdGEgKGNodW5rKSB7XG4gICAgYXNzZXJ0KCF0aGlzLmFib3J0ZWQpXG4gICAgYXNzZXJ0KCF0aGlzLmNvbXBsZXRlZClcblxuICAgIHRyeSB7XG4gICAgICByZXR1cm4gdGhpc1trSGFuZGxlcl0ub25EYXRhKGNodW5rKVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgdGhpcy5hYm9ydChlcnIpXG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG4gIH1cblxuICBvblVwZ3JhZGUgKHN0YXR1c0NvZGUsIGhlYWRlcnMsIHNvY2tldCkge1xuICAgIGFzc2VydCghdGhpcy5hYm9ydGVkKVxuICAgIGFzc2VydCghdGhpcy5jb21wbGV0ZWQpXG5cbiAgICByZXR1cm4gdGhpc1trSGFuZGxlcl0ub25VcGdyYWRlKHN0YXR1c0NvZGUsIGhlYWRlcnMsIHNvY2tldClcbiAgfVxuXG4gIG9uQ29tcGxldGUgKHRyYWlsZXJzKSB7XG4gICAgdGhpcy5vbkZpbmFsbHkoKVxuXG4gICAgYXNzZXJ0KCF0aGlzLmFib3J0ZWQpXG5cbiAgICB0aGlzLmNvbXBsZXRlZCA9IHRydWVcbiAgICBpZiAoY2hhbm5lbHMudHJhaWxlcnMuaGFzU3Vic2NyaWJlcnMpIHtcbiAgICAgIGNoYW5uZWxzLnRyYWlsZXJzLnB1Ymxpc2goeyByZXF1ZXN0OiB0aGlzLCB0cmFpbGVycyB9KVxuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICByZXR1cm4gdGhpc1trSGFuZGxlcl0ub25Db21wbGV0ZSh0cmFpbGVycylcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIC8vIFRPRE8gKGZpeCk6IFRoaXMgbWlnaHQgYmUgYSBiYWQgaWRlYT9cbiAgICAgIHRoaXMub25FcnJvcihlcnIpXG4gICAgfVxuICB9XG5cbiAgb25FcnJvciAoZXJyb3IpIHtcbiAgICB0aGlzLm9uRmluYWxseSgpXG5cbiAgICBpZiAoY2hhbm5lbHMuZXJyb3IuaGFzU3Vic2NyaWJlcnMpIHtcbiAgICAgIGNoYW5uZWxzLmVycm9yLnB1Ymxpc2goeyByZXF1ZXN0OiB0aGlzLCBlcnJvciB9KVxuICAgIH1cblxuICAgIGlmICh0aGlzLmFib3J0ZWQpIHtcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICB0aGlzLmFib3J0ZWQgPSB0cnVlXG5cbiAgICByZXR1cm4gdGhpc1trSGFuZGxlcl0ub25FcnJvcihlcnJvcilcbiAgfVxuXG4gIG9uRmluYWxseSAoKSB7XG4gICAgaWYgKHRoaXMuZXJyb3JIYW5kbGVyKSB7XG4gICAgICB0aGlzLmJvZHkub2ZmKCdlcnJvcicsIHRoaXMuZXJyb3JIYW5kbGVyKVxuICAgICAgdGhpcy5lcnJvckhhbmRsZXIgPSBudWxsXG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZW5kSGFuZGxlcikge1xuICAgICAgdGhpcy5ib2R5Lm9mZignZW5kJywgdGhpcy5lbmRIYW5kbGVyKVxuICAgICAgdGhpcy5lbmRIYW5kbGVyID0gbnVsbFxuICAgIH1cbiAgfVxuXG4gIGFkZEhlYWRlciAoa2V5LCB2YWx1ZSkge1xuICAgIHByb2Nlc3NIZWFkZXIodGhpcywga2V5LCB2YWx1ZSlcbiAgICByZXR1cm4gdGhpc1xuICB9XG59XG5cbmZ1bmN0aW9uIHByb2Nlc3NIZWFkZXIgKHJlcXVlc3QsIGtleSwgdmFsKSB7XG4gIGlmICh2YWwgJiYgKHR5cGVvZiB2YWwgPT09ICdvYmplY3QnICYmICFBcnJheS5pc0FycmF5KHZhbCkpKSB7XG4gICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKGBpbnZhbGlkICR7a2V5fSBoZWFkZXJgKVxuICB9IGVsc2UgaWYgKHZhbCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuXG4gIH1cblxuICBsZXQgaGVhZGVyTmFtZSA9IGhlYWRlck5hbWVMb3dlckNhc2VkUmVjb3JkW2tleV1cblxuICBpZiAoaGVhZGVyTmFtZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgaGVhZGVyTmFtZSA9IGtleS50b0xvd2VyQ2FzZSgpXG4gICAgaWYgKGhlYWRlck5hbWVMb3dlckNhc2VkUmVjb3JkW2hlYWRlck5hbWVdID09PSB1bmRlZmluZWQgJiYgIWlzVmFsaWRIVFRQVG9rZW4oaGVhZGVyTmFtZSkpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBoZWFkZXIga2V5JylcbiAgICB9XG4gIH1cblxuICBpZiAoQXJyYXkuaXNBcnJheSh2YWwpKSB7XG4gICAgY29uc3QgYXJyID0gW11cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHZhbC5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKHR5cGVvZiB2YWxbaV0gPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIGlmICghaXNWYWxpZEhlYWRlclZhbHVlKHZhbFtpXSkpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoYGludmFsaWQgJHtrZXl9IGhlYWRlcmApXG4gICAgICAgIH1cbiAgICAgICAgYXJyLnB1c2godmFsW2ldKVxuICAgICAgfSBlbHNlIGlmICh2YWxbaV0gPT09IG51bGwpIHtcbiAgICAgICAgYXJyLnB1c2goJycpXG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiB2YWxbaV0gPT09ICdvYmplY3QnKSB7XG4gICAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcihgaW52YWxpZCAke2tleX0gaGVhZGVyYClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGFyci5wdXNoKGAke3ZhbFtpXX1gKVxuICAgICAgfVxuICAgIH1cbiAgICB2YWwgPSBhcnJcbiAgfSBlbHNlIGlmICh0eXBlb2YgdmFsID09PSAnc3RyaW5nJykge1xuICAgIGlmICghaXNWYWxpZEhlYWRlclZhbHVlKHZhbCkpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcihgaW52YWxpZCAke2tleX0gaGVhZGVyYClcbiAgICB9XG4gIH0gZWxzZSBpZiAodmFsID09PSBudWxsKSB7XG4gICAgdmFsID0gJydcbiAgfSBlbHNlIHtcbiAgICB2YWwgPSBgJHt2YWx9YFxuICB9XG5cbiAgaWYgKHJlcXVlc3QuaG9zdCA9PT0gbnVsbCAmJiBoZWFkZXJOYW1lID09PSAnaG9zdCcpIHtcbiAgICBpZiAodHlwZW9mIHZhbCAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBob3N0IGhlYWRlcicpXG4gICAgfVxuICAgIC8vIENvbnN1bWVkIGJ5IENsaWVudFxuICAgIHJlcXVlc3QuaG9zdCA9IHZhbFxuICB9IGVsc2UgaWYgKHJlcXVlc3QuY29udGVudExlbmd0aCA9PT0gbnVsbCAmJiBoZWFkZXJOYW1lID09PSAnY29udGVudC1sZW5ndGgnKSB7XG4gICAgcmVxdWVzdC5jb250ZW50TGVuZ3RoID0gcGFyc2VJbnQodmFsLCAxMClcbiAgICBpZiAoIU51bWJlci5pc0Zpbml0ZShyZXF1ZXN0LmNvbnRlbnRMZW5ndGgpKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgY29udGVudC1sZW5ndGggaGVhZGVyJylcbiAgICB9XG4gIH0gZWxzZSBpZiAocmVxdWVzdC5jb250ZW50VHlwZSA9PT0gbnVsbCAmJiBoZWFkZXJOYW1lID09PSAnY29udGVudC10eXBlJykge1xuICAgIHJlcXVlc3QuY29udGVudFR5cGUgPSB2YWxcbiAgICByZXF1ZXN0LmhlYWRlcnMucHVzaChrZXksIHZhbClcbiAgfSBlbHNlIGlmIChoZWFkZXJOYW1lID09PSAndHJhbnNmZXItZW5jb2RpbmcnIHx8IGhlYWRlck5hbWUgPT09ICdrZWVwLWFsaXZlJyB8fCBoZWFkZXJOYW1lID09PSAndXBncmFkZScpIHtcbiAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoYGludmFsaWQgJHtoZWFkZXJOYW1lfSBoZWFkZXJgKVxuICB9IGVsc2UgaWYgKGhlYWRlck5hbWUgPT09ICdjb25uZWN0aW9uJykge1xuICAgIGNvbnN0IHZhbHVlID0gdHlwZW9mIHZhbCA9PT0gJ3N0cmluZycgPyB2YWwudG9Mb3dlckNhc2UoKSA6IG51bGxcbiAgICBpZiAodmFsdWUgIT09ICdjbG9zZScgJiYgdmFsdWUgIT09ICdrZWVwLWFsaXZlJykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIGNvbm5lY3Rpb24gaGVhZGVyJylcbiAgICB9XG5cbiAgICBpZiAodmFsdWUgPT09ICdjbG9zZScpIHtcbiAgICAgIHJlcXVlc3QucmVzZXQgPSB0cnVlXG4gICAgfVxuICB9IGVsc2UgaWYgKGhlYWRlck5hbWUgPT09ICdleHBlY3QnKSB7XG4gICAgdGhyb3cgbmV3IE5vdFN1cHBvcnRlZEVycm9yKCdleHBlY3QgaGVhZGVyIG5vdCBzdXBwb3J0ZWQnKVxuICB9IGVsc2Uge1xuICAgIHJlcXVlc3QuaGVhZGVycy5wdXNoKGtleSwgdmFsKVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gUmVxdWVzdFxuIiwgIid1c2Ugc3RyaWN0J1xuY29uc3QgRXZlbnRFbWl0dGVyID0gcmVxdWlyZSgnbm9kZTpldmVudHMnKVxuXG5jbGFzcyBEaXNwYXRjaGVyIGV4dGVuZHMgRXZlbnRFbWl0dGVyIHtcbiAgZGlzcGF0Y2ggKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignbm90IGltcGxlbWVudGVkJylcbiAgfVxuXG4gIGNsb3NlICgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ25vdCBpbXBsZW1lbnRlZCcpXG4gIH1cblxuICBkZXN0cm95ICgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ25vdCBpbXBsZW1lbnRlZCcpXG4gIH1cblxuICBjb21wb3NlICguLi5hcmdzKSB7XG4gICAgLy8gU28gd2UgaGFuZGxlIFtpbnRlcmNlcHRvcjEsIGludGVyY2VwdG9yMl0gb3IgaW50ZXJjZXB0b3IxLCBpbnRlcmNlcHRvcjIsIC4uLlxuICAgIGNvbnN0IGludGVyY2VwdG9ycyA9IEFycmF5LmlzQXJyYXkoYXJnc1swXSkgPyBhcmdzWzBdIDogYXJnc1xuICAgIGxldCBkaXNwYXRjaCA9IHRoaXMuZGlzcGF0Y2guYmluZCh0aGlzKVxuXG4gICAgZm9yIChjb25zdCBpbnRlcmNlcHRvciBvZiBpbnRlcmNlcHRvcnMpIHtcbiAgICAgIGlmIChpbnRlcmNlcHRvciA9PSBudWxsKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2YgaW50ZXJjZXB0b3IgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgaW52YWxpZCBpbnRlcmNlcHRvciwgZXhwZWN0ZWQgZnVuY3Rpb24gcmVjZWl2ZWQgJHt0eXBlb2YgaW50ZXJjZXB0b3J9YClcbiAgICAgIH1cblxuICAgICAgZGlzcGF0Y2ggPSBpbnRlcmNlcHRvcihkaXNwYXRjaClcblxuICAgICAgaWYgKGRpc3BhdGNoID09IG51bGwgfHwgdHlwZW9mIGRpc3BhdGNoICE9PSAnZnVuY3Rpb24nIHx8IGRpc3BhdGNoLmxlbmd0aCAhPT0gMikge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdpbnZhbGlkIGludGVyY2VwdG9yJylcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IENvbXBvc2VkRGlzcGF0Y2hlcih0aGlzLCBkaXNwYXRjaClcbiAgfVxufVxuXG5jbGFzcyBDb21wb3NlZERpc3BhdGNoZXIgZXh0ZW5kcyBEaXNwYXRjaGVyIHtcbiAgI2Rpc3BhdGNoZXIgPSBudWxsXG4gICNkaXNwYXRjaCA9IG51bGxcblxuICBjb25zdHJ1Y3RvciAoZGlzcGF0Y2hlciwgZGlzcGF0Y2gpIHtcbiAgICBzdXBlcigpXG4gICAgdGhpcy4jZGlzcGF0Y2hlciA9IGRpc3BhdGNoZXJcbiAgICB0aGlzLiNkaXNwYXRjaCA9IGRpc3BhdGNoXG4gIH1cblxuICBkaXNwYXRjaCAoLi4uYXJncykge1xuICAgIHRoaXMuI2Rpc3BhdGNoKC4uLmFyZ3MpXG4gIH1cblxuICBjbG9zZSAoLi4uYXJncykge1xuICAgIHJldHVybiB0aGlzLiNkaXNwYXRjaGVyLmNsb3NlKC4uLmFyZ3MpXG4gIH1cblxuICBkZXN0cm95ICguLi5hcmdzKSB7XG4gICAgcmV0dXJuIHRoaXMuI2Rpc3BhdGNoZXIuZGVzdHJveSguLi5hcmdzKVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gRGlzcGF0Y2hlclxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCBEaXNwYXRjaGVyID0gcmVxdWlyZSgnLi9kaXNwYXRjaGVyJylcbmNvbnN0IHtcbiAgQ2xpZW50RGVzdHJveWVkRXJyb3IsXG4gIENsaWVudENsb3NlZEVycm9yLFxuICBJbnZhbGlkQXJndW1lbnRFcnJvclxufSA9IHJlcXVpcmUoJy4uL2NvcmUvZXJyb3JzJylcbmNvbnN0IHsga0Rlc3Ryb3ksIGtDbG9zZSwga0Nsb3NlZCwga0Rlc3Ryb3llZCwga0Rpc3BhdGNoLCBrSW50ZXJjZXB0b3JzIH0gPSByZXF1aXJlKCcuLi9jb3JlL3N5bWJvbHMnKVxuXG5jb25zdCBrT25EZXN0cm95ZWQgPSBTeW1ib2woJ29uRGVzdHJveWVkJylcbmNvbnN0IGtPbkNsb3NlZCA9IFN5bWJvbCgnb25DbG9zZWQnKVxuY29uc3Qga0ludGVyY2VwdGVkRGlzcGF0Y2ggPSBTeW1ib2woJ0ludGVyY2VwdGVkIERpc3BhdGNoJylcblxuY2xhc3MgRGlzcGF0Y2hlckJhc2UgZXh0ZW5kcyBEaXNwYXRjaGVyIHtcbiAgY29uc3RydWN0b3IgKCkge1xuICAgIHN1cGVyKClcblxuICAgIHRoaXNba0Rlc3Ryb3llZF0gPSBmYWxzZVxuICAgIHRoaXNba09uRGVzdHJveWVkXSA9IG51bGxcbiAgICB0aGlzW2tDbG9zZWRdID0gZmFsc2VcbiAgICB0aGlzW2tPbkNsb3NlZF0gPSBbXVxuICB9XG5cbiAgZ2V0IGRlc3Ryb3llZCAoKSB7XG4gICAgcmV0dXJuIHRoaXNba0Rlc3Ryb3llZF1cbiAgfVxuXG4gIGdldCBjbG9zZWQgKCkge1xuICAgIHJldHVybiB0aGlzW2tDbG9zZWRdXG4gIH1cblxuICBnZXQgaW50ZXJjZXB0b3JzICgpIHtcbiAgICByZXR1cm4gdGhpc1trSW50ZXJjZXB0b3JzXVxuICB9XG5cbiAgc2V0IGludGVyY2VwdG9ycyAobmV3SW50ZXJjZXB0b3JzKSB7XG4gICAgaWYgKG5ld0ludGVyY2VwdG9ycykge1xuICAgICAgZm9yIChsZXQgaSA9IG5ld0ludGVyY2VwdG9ycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgICBjb25zdCBpbnRlcmNlcHRvciA9IHRoaXNba0ludGVyY2VwdG9yc11baV1cbiAgICAgICAgaWYgKHR5cGVvZiBpbnRlcmNlcHRvciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW50ZXJjZXB0b3IgbXVzdCBiZSBhbiBmdW5jdGlvbicpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzW2tJbnRlcmNlcHRvcnNdID0gbmV3SW50ZXJjZXB0b3JzXG4gIH1cblxuICBjbG9zZSAoY2FsbGJhY2spIHtcbiAgICBpZiAoY2FsbGJhY2sgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgdGhpcy5jbG9zZSgoZXJyLCBkYXRhKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIGVyciA/IHJlamVjdChlcnIpIDogcmVzb2x2ZShkYXRhKVxuICAgICAgICB9KVxuICAgICAgfSlcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGNhbGxiYWNrICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgY2FsbGJhY2snKVxuICAgIH1cblxuICAgIGlmICh0aGlzW2tEZXN0cm95ZWRdKSB7XG4gICAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiBjYWxsYmFjayhuZXcgQ2xpZW50RGVzdHJveWVkRXJyb3IoKSwgbnVsbCkpXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBpZiAodGhpc1trQ2xvc2VkXSkge1xuICAgICAgaWYgKHRoaXNba09uQ2xvc2VkXSkge1xuICAgICAgICB0aGlzW2tPbkNsb3NlZF0ucHVzaChjYWxsYmFjaylcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHF1ZXVlTWljcm90YXNrKCgpID0+IGNhbGxiYWNrKG51bGwsIG51bGwpKVxuICAgICAgfVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgdGhpc1trQ2xvc2VkXSA9IHRydWVcbiAgICB0aGlzW2tPbkNsb3NlZF0ucHVzaChjYWxsYmFjaylcblxuICAgIGNvbnN0IG9uQ2xvc2VkID0gKCkgPT4ge1xuICAgICAgY29uc3QgY2FsbGJhY2tzID0gdGhpc1trT25DbG9zZWRdXG4gICAgICB0aGlzW2tPbkNsb3NlZF0gPSBudWxsXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNhbGxiYWNrcy5sZW5ndGg7IGkrKykge1xuICAgICAgICBjYWxsYmFja3NbaV0obnVsbCwgbnVsbClcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBTaG91bGQgbm90IGVycm9yLlxuICAgIHRoaXNba0Nsb3NlXSgpXG4gICAgICAudGhlbigoKSA9PiB0aGlzLmRlc3Ryb3koKSlcbiAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgcXVldWVNaWNyb3Rhc2sob25DbG9zZWQpXG4gICAgICB9KVxuICB9XG5cbiAgZGVzdHJveSAoZXJyLCBjYWxsYmFjaykge1xuICAgIGlmICh0eXBlb2YgZXJyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBjYWxsYmFjayA9IGVyclxuICAgICAgZXJyID0gbnVsbFxuICAgIH1cblxuICAgIGlmIChjYWxsYmFjayA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICB0aGlzLmRlc3Ryb3koZXJyLCAoZXJyLCBkYXRhKSA9PiB7XG4gICAgICAgICAgcmV0dXJuIGVyciA/IC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0OiBzaG91bGQgbmV2ZXIgZXJyb3IgKi8gcmVqZWN0KGVycikgOiByZXNvbHZlKGRhdGEpXG4gICAgICAgIH0pXG4gICAgICB9KVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBjYWxsYmFjaycpXG4gICAgfVxuXG4gICAgaWYgKHRoaXNba0Rlc3Ryb3llZF0pIHtcbiAgICAgIGlmICh0aGlzW2tPbkRlc3Ryb3llZF0pIHtcbiAgICAgICAgdGhpc1trT25EZXN0cm95ZWRdLnB1c2goY2FsbGJhY2spXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiBjYWxsYmFjayhudWxsLCBudWxsKSlcbiAgICAgIH1cbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGlmICghZXJyKSB7XG4gICAgICBlcnIgPSBuZXcgQ2xpZW50RGVzdHJveWVkRXJyb3IoKVxuICAgIH1cblxuICAgIHRoaXNba0Rlc3Ryb3llZF0gPSB0cnVlXG4gICAgdGhpc1trT25EZXN0cm95ZWRdID0gdGhpc1trT25EZXN0cm95ZWRdIHx8IFtdXG4gICAgdGhpc1trT25EZXN0cm95ZWRdLnB1c2goY2FsbGJhY2spXG5cbiAgICBjb25zdCBvbkRlc3Ryb3llZCA9ICgpID0+IHtcbiAgICAgIGNvbnN0IGNhbGxiYWNrcyA9IHRoaXNba09uRGVzdHJveWVkXVxuICAgICAgdGhpc1trT25EZXN0cm95ZWRdID0gbnVsbFxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjYWxsYmFja3MubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY2FsbGJhY2tzW2ldKG51bGwsIG51bGwpXG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gU2hvdWxkIG5vdCBlcnJvci5cbiAgICB0aGlzW2tEZXN0cm95XShlcnIpLnRoZW4oKCkgPT4ge1xuICAgICAgcXVldWVNaWNyb3Rhc2sob25EZXN0cm95ZWQpXG4gICAgfSlcbiAgfVxuXG4gIFtrSW50ZXJjZXB0ZWREaXNwYXRjaF0gKG9wdHMsIGhhbmRsZXIpIHtcbiAgICBpZiAoIXRoaXNba0ludGVyY2VwdG9yc10gfHwgdGhpc1trSW50ZXJjZXB0b3JzXS5sZW5ndGggPT09IDApIHtcbiAgICAgIHRoaXNba0ludGVyY2VwdGVkRGlzcGF0Y2hdID0gdGhpc1trRGlzcGF0Y2hdXG4gICAgICByZXR1cm4gdGhpc1trRGlzcGF0Y2hdKG9wdHMsIGhhbmRsZXIpXG4gICAgfVxuXG4gICAgbGV0IGRpc3BhdGNoID0gdGhpc1trRGlzcGF0Y2hdLmJpbmQodGhpcylcbiAgICBmb3IgKGxldCBpID0gdGhpc1trSW50ZXJjZXB0b3JzXS5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgZGlzcGF0Y2ggPSB0aGlzW2tJbnRlcmNlcHRvcnNdW2ldKGRpc3BhdGNoKVxuICAgIH1cbiAgICB0aGlzW2tJbnRlcmNlcHRlZERpc3BhdGNoXSA9IGRpc3BhdGNoXG4gICAgcmV0dXJuIGRpc3BhdGNoKG9wdHMsIGhhbmRsZXIpXG4gIH1cblxuICBkaXNwYXRjaCAob3B0cywgaGFuZGxlcikge1xuICAgIGlmICghaGFuZGxlciB8fCB0eXBlb2YgaGFuZGxlciAhPT0gJ29iamVjdCcpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaGFuZGxlciBtdXN0IGJlIGFuIG9iamVjdCcpXG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIGlmICghb3B0cyB8fCB0eXBlb2Ygb3B0cyAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdvcHRzIG11c3QgYmUgYW4gb2JqZWN0LicpXG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzW2tEZXN0cm95ZWRdIHx8IHRoaXNba09uRGVzdHJveWVkXSkge1xuICAgICAgICB0aHJvdyBuZXcgQ2xpZW50RGVzdHJveWVkRXJyb3IoKVxuICAgICAgfVxuXG4gICAgICBpZiAodGhpc1trQ2xvc2VkXSkge1xuICAgICAgICB0aHJvdyBuZXcgQ2xpZW50Q2xvc2VkRXJyb3IoKVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpc1trSW50ZXJjZXB0ZWREaXNwYXRjaF0ob3B0cywgaGFuZGxlcilcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGlmICh0eXBlb2YgaGFuZGxlci5vbkVycm9yICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBvbkVycm9yIG1ldGhvZCcpXG4gICAgICB9XG5cbiAgICAgIGhhbmRsZXIub25FcnJvcihlcnIpXG5cbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IERpc3BhdGNoZXJCYXNlXG4iLCAiJ3VzZSBzdHJpY3QnXG5cbi8qKlxuICogVGhpcyBtb2R1bGUgb2ZmZXJzIGFuIG9wdGltaXplZCB0aW1lciBpbXBsZW1lbnRhdGlvbiBkZXNpZ25lZCBmb3Igc2NlbmFyaW9zXG4gKiB3aGVyZSBoaWdoIHByZWNpc2lvbiBpcyBub3QgY3JpdGljYWwuXG4gKlxuICogVGhlIHRpbWVyIGFjaGlldmVzIGZhc3RlciBwZXJmb3JtYW5jZSBieSB1c2luZyBhIGxvdy1yZXNvbHV0aW9uIGFwcHJvYWNoLFxuICogd2l0aCBhbiBhY2N1cmFjeSB0YXJnZXQgb2Ygd2l0aGluIDUwMG1zLiBUaGlzIG1ha2VzIGl0IHBhcnRpY3VsYXJseSB1c2VmdWxcbiAqIGZvciB0aW1lcnMgd2l0aCBkZWxheXMgb2YgMSBzZWNvbmQgb3IgbW9yZSwgd2hlcmUgZXhhY3QgdGltaW5nIGlzIGxlc3NcbiAqIGNydWNpYWwuXG4gKlxuICogSXQncyBpbXBvcnRhbnQgdG8gbm90ZSB0aGF0IE5vZGUuanMgdGltZXJzIGFyZSBpbmhlcmVudGx5IGltcHJlY2lzZSwgYXNcbiAqIGRlbGF5cyBjYW4gb2NjdXIgZHVlIHRvIHRoZSBldmVudCBsb29wIGJlaW5nIGJsb2NrZWQgYnkgb3RoZXIgb3BlcmF0aW9ucy5cbiAqIENvbnNlcXVlbnRseSwgdGltZXJzIG1heSB0cmlnZ2VyIGxhdGVyIHRoYW4gdGhlaXIgc2NoZWR1bGVkIHRpbWUuXG4gKi9cblxuLyoqXG4gKiBUaGUgZmFzdE5vdyB2YXJpYWJsZSBjb250YWlucyB0aGUgaW50ZXJuYWwgZmFzdCB0aW1lciBjbG9jayB2YWx1ZS5cbiAqXG4gKiBAdHlwZSB7bnVtYmVyfVxuICovXG5sZXQgZmFzdE5vdyA9IDBcblxuLyoqXG4gKiBSRVNPTFVUSU9OX01TIHJlcHJlc2VudHMgdGhlIHRhcmdldCByZXNvbHV0aW9uIHRpbWUgaW4gbWlsbGlzZWNvbmRzLlxuICpcbiAqIEB0eXBlIHtudW1iZXJ9XG4gKiBAZGVmYXVsdCAxMDAwXG4gKi9cbmNvbnN0IFJFU09MVVRJT05fTVMgPSAxZTNcblxuLyoqXG4gKiBUSUNLX01TIGRlZmluZXMgdGhlIGRlc2lyZWQgaW50ZXJ2YWwgaW4gbWlsbGlzZWNvbmRzIGJldHdlZW4gZWFjaCB0aWNrLlxuICogVGhlIHRhcmdldCB2YWx1ZSBpcyBzZXQgdG8gaGFsZiB0aGUgcmVzb2x1dGlvbiB0aW1lLCBtaW51cyAxIG1zLCB0byBhY2NvdW50XG4gKiBmb3IgcG90ZW50aWFsIGV2ZW50IGxvb3Agb3ZlcmhlYWQuXG4gKlxuICogQHR5cGUge251bWJlcn1cbiAqIEBkZWZhdWx0IDQ5OVxuICovXG5jb25zdCBUSUNLX01TID0gKFJFU09MVVRJT05fTVMgPj4gMSkgLSAxXG5cbi8qKlxuICogZmFzdE5vd1RpbWVvdXQgaXMgYSBOb2RlLmpzIHRpbWVyIHVzZWQgdG8gbWFuYWdlIGFuZCBwcm9jZXNzXG4gKiB0aGUgRmFzdFRpbWVycyBzdG9yZWQgaW4gdGhlIGBmYXN0VGltZXJzYCBhcnJheS5cbiAqXG4gKiBAdHlwZSB7Tm9kZUpTLlRpbWVvdXR9XG4gKi9cbmxldCBmYXN0Tm93VGltZW91dFxuXG4vKipcbiAqIFRoZSBrRmFzdFRpbWVyIHN5bWJvbCBpcyB1c2VkIHRvIGlkZW50aWZ5IEZhc3RUaW1lciBpbnN0YW5jZXMuXG4gKlxuICogQHR5cGUge1N5bWJvbH1cbiAqL1xuY29uc3Qga0Zhc3RUaW1lciA9IFN5bWJvbCgna0Zhc3RUaW1lcicpXG5cbi8qKlxuICogVGhlIGZhc3RUaW1lcnMgYXJyYXkgY29udGFpbnMgYWxsIGFjdGl2ZSBGYXN0VGltZXJzLlxuICpcbiAqIEB0eXBlIHtGYXN0VGltZXJbXX1cbiAqL1xuY29uc3QgZmFzdFRpbWVycyA9IFtdXG5cbi8qKlxuICogVGhlc2UgY29uc3RhbnRzIHJlcHJlc2VudCB0aGUgdmFyaW91cyBzdGF0ZXMgb2YgYSBGYXN0VGltZXIuXG4gKi9cblxuLyoqXG4gKiBUaGUgYE5PVF9JTl9MSVNUYCBjb25zdGFudCBpbmRpY2F0ZXMgdGhhdCB0aGUgRmFzdFRpbWVyIGlzIG5vdCBpbmNsdWRlZFxuICogaW4gdGhlIGBmYXN0VGltZXJzYCBhcnJheS4gVGltZXJzIHdpdGggdGhpcyBzdGF0dXMgd2lsbCBub3QgYmUgcHJvY2Vzc2VkXG4gKiBkdXJpbmcgdGhlIG5leHQgdGljayBieSB0aGUgYG9uVGlja2AgZnVuY3Rpb24uXG4gKlxuICogQSBGYXN0VGltZXIgY2FuIGJlIHJlLWFkZGVkIHRvIHRoZSBgZmFzdFRpbWVyc2AgYXJyYXkgYnkgaW52b2tpbmcgdGhlXG4gKiBgcmVmcmVzaGAgbWV0aG9kIG9uIHRoZSBGYXN0VGltZXIgaW5zdGFuY2UuXG4gKlxuICogQHR5cGUgey0yfVxuICovXG5jb25zdCBOT1RfSU5fTElTVCA9IC0yXG5cbi8qKlxuICogVGhlIGBUT19CRV9DTEVBUkVEYCBjb25zdGFudCBpbmRpY2F0ZXMgdGhhdCB0aGUgRmFzdFRpbWVyIGlzIHNjaGVkdWxlZFxuICogZm9yIHJlbW92YWwgZnJvbSB0aGUgYGZhc3RUaW1lcnNgIGFycmF5LiBBIEZhc3RUaW1lciBpbiB0aGlzIHN0YXRlIHdpbGxcbiAqIGJlIHJlbW92ZWQgaW4gdGhlIG5leHQgdGljayBieSB0aGUgYG9uVGlja2AgZnVuY3Rpb24gYW5kIHdpbGwgbm8gbG9uZ2VyXG4gKiBiZSBwcm9jZXNzZWQuXG4gKlxuICogVGhpcyBzdGF0dXMgaXMgYWxzbyBzZXQgd2hlbiB0aGUgYGNsZWFyYCBtZXRob2QgaXMgY2FsbGVkIG9uIHRoZSBGYXN0VGltZXIgaW5zdGFuY2UuXG4gKlxuICogQHR5cGUgey0xfVxuICovXG5jb25zdCBUT19CRV9DTEVBUkVEID0gLTFcblxuLyoqXG4gKiBUaGUgYFBFTkRJTkdgIGNvbnN0YW50IHNpZ25pZmllcyB0aGF0IHRoZSBGYXN0VGltZXIgaXMgYXdhaXRpbmcgcHJvY2Vzc2luZ1xuICogaW4gdGhlIG5leHQgdGljayBieSB0aGUgYG9uVGlja2AgZnVuY3Rpb24uIFRpbWVycyB3aXRoIHRoaXMgc3RhdHVzIHdpbGwgaGF2ZVxuICogdGhlaXIgYF9pZGxlU3RhcnRgIHZhbHVlIHNldCBhbmQgdGhlaXIgc3RhdHVzIHVwZGF0ZWQgdG8gYEFDVElWRWAgaW4gdGhlIG5leHQgdGljay5cbiAqXG4gKiBAdHlwZSB7MH1cbiAqL1xuY29uc3QgUEVORElORyA9IDBcblxuLyoqXG4gKiBUaGUgYEFDVElWRWAgY29uc3RhbnQgaW5kaWNhdGVzIHRoYXQgdGhlIEZhc3RUaW1lciBpcyBhY3RpdmUgYW5kIHdhaXRpbmdcbiAqIGZvciBpdHMgdGltZXIgdG8gZXhwaXJlLiBEdXJpbmcgdGhlIG5leHQgdGljaywgdGhlIGBvblRpY2tgIGZ1bmN0aW9uIHdpbGxcbiAqIGNoZWNrIGlmIHRoZSB0aW1lciBoYXMgZXhwaXJlZCwgYW5kIGlmIHNvLCBpdCB3aWxsIGV4ZWN1dGUgdGhlIGFzc29jaWF0ZWQgY2FsbGJhY2suXG4gKlxuICogQHR5cGUgezF9XG4gKi9cbmNvbnN0IEFDVElWRSA9IDFcblxuLyoqXG4gKiBUaGUgb25UaWNrIGZ1bmN0aW9uIHByb2Nlc3NlcyB0aGUgZmFzdFRpbWVycyBhcnJheS5cbiAqXG4gKiBAcmV0dXJucyB7dm9pZH1cbiAqL1xuZnVuY3Rpb24gb25UaWNrICgpIHtcbiAgLyoqXG4gICAqIEluY3JlbWVudCB0aGUgZmFzdE5vdyB2YWx1ZSBieSB0aGUgVElDS19NUyB2YWx1ZSwgZGVzcGl0ZSB0aGUgYWN0dWFsIHRpbWVcbiAgICogdGhhdCBoYXMgcGFzc2VkIHNpbmNlIHRoZSBsYXN0IHRpY2suIFRoaXMgYXBwcm9hY2ggZW5zdXJlcyBpbmRlcGVuZGVuY2VcbiAgICogZnJvbSB0aGUgc3lzdGVtIGNsb2NrIGFuZCBkZWxheXMgY2F1c2VkIGJ5IGEgYmxvY2tlZCBldmVudCBsb29wLlxuICAgKlxuICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgKi9cbiAgZmFzdE5vdyArPSBUSUNLX01TXG5cbiAgLyoqXG4gICAqIFRoZSBgaWR4YCB2YXJpYWJsZSBpcyB1c2VkIHRvIGl0ZXJhdGUgb3ZlciB0aGUgYGZhc3RUaW1lcnNgIGFycmF5LlxuICAgKiBFeHBpcmVkIHRpbWVycyBhcmUgcmVtb3ZlZCBieSByZXBsYWNpbmcgdGhlbSB3aXRoIHRoZSBsYXN0IGVsZW1lbnQgaW4gdGhlIGFycmF5LlxuICAgKiBDb25zZXF1ZW50bHksIGBpZHhgIGlzIG9ubHkgaW5jcmVtZW50ZWQgd2hlbiB0aGUgY3VycmVudCBlbGVtZW50IGlzIG5vdCByZW1vdmVkLlxuICAgKlxuICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgKi9cbiAgbGV0IGlkeCA9IDBcblxuICAvKipcbiAgICogVGhlIGxlbiB2YXJpYWJsZSB3aWxsIGNvbnRhaW4gdGhlIGxlbmd0aCBvZiB0aGUgZmFzdFRpbWVycyBhcnJheVxuICAgKiBhbmQgd2lsbCBiZSBkZWNyZW1lbnRlZCB3aGVuIGEgRmFzdFRpbWVyIHNob3VsZCBiZSByZW1vdmVkIGZyb20gdGhlXG4gICAqIGZhc3RUaW1lcnMgYXJyYXkuXG4gICAqXG4gICAqIEB0eXBlIHtudW1iZXJ9XG4gICAqL1xuICBsZXQgbGVuID0gZmFzdFRpbWVycy5sZW5ndGhcblxuICB3aGlsZSAoaWR4IDwgbGVuKSB7XG4gICAgLyoqXG4gICAgICogQHR5cGUge0Zhc3RUaW1lcn1cbiAgICAgKi9cbiAgICBjb25zdCB0aW1lciA9IGZhc3RUaW1lcnNbaWR4XVxuXG4gICAgLy8gSWYgdGhlIHRpbWVyIGlzIGluIHRoZSBBQ1RJVkUgc3RhdGUgYW5kIHRoZSB0aW1lciBoYXMgZXhwaXJlZCwgaXQgd2lsbFxuICAgIC8vIGJlIHByb2Nlc3NlZCBpbiB0aGUgbmV4dCB0aWNrLlxuICAgIGlmICh0aW1lci5fc3RhdGUgPT09IFBFTkRJTkcpIHtcbiAgICAgIC8vIFNldCB0aGUgX2lkbGVTdGFydCB2YWx1ZSB0byB0aGUgZmFzdE5vdyB2YWx1ZSBtaW51cyB0aGUgVElDS19NUyB2YWx1ZVxuICAgICAgLy8gdG8gYWNjb3VudCBmb3IgdGhlIHRpbWUgdGhlIHRpbWVyIHdhcyBpbiB0aGUgUEVORElORyBzdGF0ZS5cbiAgICAgIHRpbWVyLl9pZGxlU3RhcnQgPSBmYXN0Tm93IC0gVElDS19NU1xuICAgICAgdGltZXIuX3N0YXRlID0gQUNUSVZFXG4gICAgfSBlbHNlIGlmIChcbiAgICAgIHRpbWVyLl9zdGF0ZSA9PT0gQUNUSVZFICYmXG4gICAgICBmYXN0Tm93ID49IHRpbWVyLl9pZGxlU3RhcnQgKyB0aW1lci5faWRsZVRpbWVvdXRcbiAgICApIHtcbiAgICAgIHRpbWVyLl9zdGF0ZSA9IFRPX0JFX0NMRUFSRURcbiAgICAgIHRpbWVyLl9pZGxlU3RhcnQgPSAtMVxuICAgICAgdGltZXIuX29uVGltZW91dCh0aW1lci5fdGltZXJBcmcpXG4gICAgfVxuXG4gICAgaWYgKHRpbWVyLl9zdGF0ZSA9PT0gVE9fQkVfQ0xFQVJFRCkge1xuICAgICAgdGltZXIuX3N0YXRlID0gTk9UX0lOX0xJU1RcblxuICAgICAgLy8gTW92ZSB0aGUgbGFzdCBlbGVtZW50IHRvIHRoZSBjdXJyZW50IGluZGV4IGFuZCBkZWNyZW1lbnQgbGVuIGlmIGl0IGlzXG4gICAgICAvLyBub3QgdGhlIG9ubHkgZWxlbWVudCBpbiB0aGUgYXJyYXkuXG4gICAgICBpZiAoLS1sZW4gIT09IDApIHtcbiAgICAgICAgZmFzdFRpbWVyc1tpZHhdID0gZmFzdFRpbWVyc1tsZW5dXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgICsraWR4XG4gICAgfVxuICB9XG5cbiAgLy8gU2V0IHRoZSBsZW5ndGggb2YgdGhlIGZhc3RUaW1lcnMgYXJyYXkgdG8gdGhlIG5ldyBsZW5ndGggYW5kIHRodXNcbiAgLy8gcmVtb3ZpbmcgdGhlIGV4Y2VzcyBGYXN0VGltZXJzIGVsZW1lbnRzIGZyb20gdGhlIGFycmF5LlxuICBmYXN0VGltZXJzLmxlbmd0aCA9IGxlblxuXG4gIC8vIElmIHRoZXJlIGFyZSBzdGlsbCBhY3RpdmUgRmFzdFRpbWVycyBpbiB0aGUgYXJyYXksIHJlZnJlc2ggdGhlIFRpbWVyLlxuICAvLyBJZiB0aGVyZSBhcmUgbm8gYWN0aXZlIEZhc3RUaW1lcnMsIHRoZSB0aW1lciB3aWxsIGJlIHJlZnJlc2hlZCBhZ2FpblxuICAvLyB3aGVuIGEgbmV3IEZhc3RUaW1lciBpcyBpbnN0YW50aWF0ZWQuXG4gIGlmIChmYXN0VGltZXJzLmxlbmd0aCAhPT0gMCkge1xuICAgIHJlZnJlc2hUaW1lb3V0KClcbiAgfVxufVxuXG5mdW5jdGlvbiByZWZyZXNoVGltZW91dCAoKSB7XG4gIC8vIElmIHRoZSBmYXN0Tm93VGltZW91dCBpcyBhbHJlYWR5IHNldCwgcmVmcmVzaCBpdC5cbiAgaWYgKGZhc3ROb3dUaW1lb3V0KSB7XG4gICAgZmFzdE5vd1RpbWVvdXQucmVmcmVzaCgpXG4gIC8vIGZhc3ROb3dUaW1lb3V0IGlzIG5vdCBpbnN0YW50aWF0ZWQgeWV0LCBjcmVhdGUgYSBuZXcgVGltZXIuXG4gIH0gZWxzZSB7XG4gICAgY2xlYXJUaW1lb3V0KGZhc3ROb3dUaW1lb3V0KVxuICAgIGZhc3ROb3dUaW1lb3V0ID0gc2V0VGltZW91dChvblRpY2ssIFRJQ0tfTVMpXG5cbiAgICAvLyBJZiB0aGUgVGltZXIgaGFzIGFuIHVucmVmIG1ldGhvZCwgY2FsbCBpdCB0byBhbGxvdyB0aGUgcHJvY2VzcyB0byBleGl0IGlmXG4gICAgLy8gdGhlcmUgYXJlIG5vIG90aGVyIGFjdGl2ZSBoYW5kbGVzLlxuICAgIGlmIChmYXN0Tm93VGltZW91dC51bnJlZikge1xuICAgICAgZmFzdE5vd1RpbWVvdXQudW5yZWYoKVxuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIFRoZSBgRmFzdFRpbWVyYCBjbGFzcyBpcyBhIGRhdGEgc3RydWN0dXJlIGRlc2lnbmVkIHRvIHN0b3JlIGFuZCBtYW5hZ2VcbiAqIHRpbWVyIGluZm9ybWF0aW9uLlxuICovXG5jbGFzcyBGYXN0VGltZXIge1xuICBba0Zhc3RUaW1lcl0gPSB0cnVlXG5cbiAgLyoqXG4gICAqIFRoZSBzdGF0ZSBvZiB0aGUgdGltZXIsIHdoaWNoIGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZzpcbiAgICogLSBOT1RfSU5fTElTVCAoLTIpXG4gICAqIC0gVE9fQkVfQ0xFQVJFRCAoLTEpXG4gICAqIC0gUEVORElORyAoMClcbiAgICogLSBBQ1RJVkUgKDEpXG4gICAqXG4gICAqIEB0eXBlIHstMnwtMXwwfDF9XG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfc3RhdGUgPSBOT1RfSU5fTElTVFxuXG4gIC8qKlxuICAgKiBUaGUgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyB0byB3YWl0IGJlZm9yZSBjYWxsaW5nIHRoZSBjYWxsYmFjay5cbiAgICpcbiAgICogQHR5cGUge251bWJlcn1cbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9pZGxlVGltZW91dCA9IC0xXG5cbiAgLyoqXG4gICAqIFRoZSB0aW1lIGluIG1pbGxpc2Vjb25kcyB3aGVuIHRoZSB0aW1lciB3YXMgc3RhcnRlZC4gVGhpcyB2YWx1ZSBpcyB1c2VkIHRvXG4gICAqIGNhbGN1bGF0ZSB3aGVuIHRoZSB0aW1lciBzaG91bGQgZXhwaXJlLlxuICAgKlxuICAgKiBAdHlwZSB7bnVtYmVyfVxuICAgKiBAZGVmYXVsdCAtMVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2lkbGVTdGFydCA9IC0xXG5cbiAgLyoqXG4gICAqIFRoZSBmdW5jdGlvbiB0byBiZSBleGVjdXRlZCB3aGVuIHRoZSB0aW1lciBleHBpcmVzLlxuICAgKiBAdHlwZSB7RnVuY3Rpb259XG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfb25UaW1lb3V0XG5cbiAgLyoqXG4gICAqIFRoZSBhcmd1bWVudCB0byBiZSBwYXNzZWQgdG8gdGhlIGNhbGxiYWNrIHdoZW4gdGhlIHRpbWVyIGV4cGlyZXMuXG4gICAqXG4gICAqIEB0eXBlIHsqfVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX3RpbWVyQXJnXG5cbiAgLyoqXG4gICAqIEBjb25zdHJ1Y3RvclxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBBIGZ1bmN0aW9uIHRvIGJlIGV4ZWN1dGVkIGFmdGVyIHRoZSB0aW1lclxuICAgKiBleHBpcmVzLlxuICAgKiBAcGFyYW0ge251bWJlcn0gZGVsYXkgVGhlIHRpbWUsIGluIG1pbGxpc2Vjb25kcyB0aGF0IHRoZSB0aW1lciBzaG91bGQgd2FpdFxuICAgKiBiZWZvcmUgdGhlIHNwZWNpZmllZCBmdW5jdGlvbiBvciBjb2RlIGlzIGV4ZWN1dGVkLlxuICAgKiBAcGFyYW0geyp9IGFyZ1xuICAgKi9cbiAgY29uc3RydWN0b3IgKGNhbGxiYWNrLCBkZWxheSwgYXJnKSB7XG4gICAgdGhpcy5fb25UaW1lb3V0ID0gY2FsbGJhY2tcbiAgICB0aGlzLl9pZGxlVGltZW91dCA9IGRlbGF5XG4gICAgdGhpcy5fdGltZXJBcmcgPSBhcmdcblxuICAgIHRoaXMucmVmcmVzaCgpXG4gIH1cblxuICAvKipcbiAgICogU2V0cyB0aGUgdGltZXIncyBzdGFydCB0aW1lIHRvIHRoZSBjdXJyZW50IHRpbWUsIGFuZCByZXNjaGVkdWxlcyB0aGUgdGltZXJcbiAgICogdG8gY2FsbCBpdHMgY2FsbGJhY2sgYXQgdGhlIHByZXZpb3VzbHkgc3BlY2lmaWVkIGR1cmF0aW9uIGFkanVzdGVkIHRvIHRoZVxuICAgKiBjdXJyZW50IHRpbWUuXG4gICAqIFVzaW5nIHRoaXMgb24gYSB0aW1lciB0aGF0IGhhcyBhbHJlYWR5IGNhbGxlZCBpdHMgY2FsbGJhY2sgd2lsbCByZWFjdGl2YXRlXG4gICAqIHRoZSB0aW1lci5cbiAgICpcbiAgICogQHJldHVybnMge3ZvaWR9XG4gICAqL1xuICByZWZyZXNoICgpIHtcbiAgICAvLyBJbiB0aGUgc3BlY2lhbCBjYXNlIHRoYXQgdGhlIHRpbWVyIGlzIG5vdCBpbiB0aGUgbGlzdCBvZiBhY3RpdmUgdGltZXJzLFxuICAgIC8vIGFkZCBpdCBiYWNrIHRvIHRoZSBhcnJheSB0byBiZSBwcm9jZXNzZWQgaW4gdGhlIG5leHQgdGljayBieSB0aGUgb25UaWNrXG4gICAgLy8gZnVuY3Rpb24uXG4gICAgaWYgKHRoaXMuX3N0YXRlID09PSBOT1RfSU5fTElTVCkge1xuICAgICAgZmFzdFRpbWVycy5wdXNoKHRoaXMpXG4gICAgfVxuXG4gICAgLy8gSWYgdGhlIHRpbWVyIGlzIHRoZSBvbmx5IGFjdGl2ZSB0aW1lciwgcmVmcmVzaCB0aGUgZmFzdE5vd1RpbWVvdXQgZm9yXG4gICAgLy8gYmV0dGVyIHJlc29sdXRpb24uXG4gICAgaWYgKCFmYXN0Tm93VGltZW91dCB8fCBmYXN0VGltZXJzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgcmVmcmVzaFRpbWVvdXQoKVxuICAgIH1cblxuICAgIC8vIFNldHRpbmcgdGhlIHN0YXRlIHRvIFBFTkRJTkcgd2lsbCBjYXVzZSB0aGUgdGltZXIgdG8gYmUgcmVzZXQgaW4gdGhlXG4gICAgLy8gbmV4dCB0aWNrIGJ5IHRoZSBvblRpY2sgZnVuY3Rpb24uXG4gICAgdGhpcy5fc3RhdGUgPSBQRU5ESU5HXG4gIH1cblxuICAvKipcbiAgICogVGhlIGBjbGVhcmAgbWV0aG9kIGNhbmNlbHMgdGhlIHRpbWVyLCBwcmV2ZW50aW5nIGl0IGZyb20gZXhlY3V0aW5nLlxuICAgKlxuICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICogQHByaXZhdGVcbiAgICovXG4gIGNsZWFyICgpIHtcbiAgICAvLyBTZXQgdGhlIHN0YXRlIHRvIFRPX0JFX0NMRUFSRUQgdG8gbWFyayB0aGUgdGltZXIgZm9yIHJlbW92YWwgaW4gdGhlIG5leHRcbiAgICAvLyB0aWNrIGJ5IHRoZSBvblRpY2sgZnVuY3Rpb24uXG4gICAgdGhpcy5fc3RhdGUgPSBUT19CRV9DTEVBUkVEXG5cbiAgICAvLyBSZXNldCB0aGUgX2lkbGVTdGFydCB2YWx1ZSB0byAtMSB0byBpbmRpY2F0ZSB0aGF0IHRoZSB0aW1lciBpcyBubyBsb25nZXJcbiAgICAvLyBhY3RpdmUuXG4gICAgdGhpcy5faWRsZVN0YXJ0ID0gLTFcbiAgfVxufVxuXG4vKipcbiAqIFRoaXMgbW9kdWxlIGV4cG9ydHMgYSBzZXRUaW1lb3V0IGFuZCBjbGVhclRpbWVvdXQgZnVuY3Rpb24gdGhhdCBjYW4gYmVcbiAqIHVzZWQgYXMgYSBkcm9wLWluIHJlcGxhY2VtZW50IGZvciB0aGUgbmF0aXZlIGZ1bmN0aW9ucy5cbiAqL1xubW9kdWxlLmV4cG9ydHMgPSB7XG4gIC8qKlxuICAgKiBUaGUgc2V0VGltZW91dCgpIG1ldGhvZCBzZXRzIGEgdGltZXIgd2hpY2ggZXhlY3V0ZXMgYSBmdW5jdGlvbiBvbmNlIHRoZVxuICAgKiB0aW1lciBleHBpcmVzLlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBjYWxsYmFjayBBIGZ1bmN0aW9uIHRvIGJlIGV4ZWN1dGVkIGFmdGVyIHRoZSB0aW1lclxuICAgKiBleHBpcmVzLlxuICAgKiBAcGFyYW0ge251bWJlcn0gZGVsYXkgVGhlIHRpbWUsIGluIG1pbGxpc2Vjb25kcyB0aGF0IHRoZSB0aW1lciBzaG91bGRcbiAgICogd2FpdCBiZWZvcmUgdGhlIHNwZWNpZmllZCBmdW5jdGlvbiBvciBjb2RlIGlzIGV4ZWN1dGVkLlxuICAgKiBAcGFyYW0geyp9IFthcmddIEFuIG9wdGlvbmFsIGFyZ3VtZW50IHRvIGJlIHBhc3NlZCB0byB0aGUgY2FsbGJhY2sgZnVuY3Rpb25cbiAgICogd2hlbiB0aGUgdGltZXIgZXhwaXJlcy5cbiAgICogQHJldHVybnMge05vZGVKUy5UaW1lb3V0fEZhc3RUaW1lcn1cbiAgICovXG4gIHNldFRpbWVvdXQgKGNhbGxiYWNrLCBkZWxheSwgYXJnKSB7XG4gICAgLy8gSWYgdGhlIGRlbGF5IGlzIGxlc3MgdGhhbiBvciBlcXVhbCB0byB0aGUgUkVTT0xVVElPTl9NUyB2YWx1ZSByZXR1cm4gYVxuICAgIC8vIG5hdGl2ZSBOb2RlLmpzIFRpbWVyIGluc3RhbmNlLlxuICAgIHJldHVybiBkZWxheSA8PSBSRVNPTFVUSU9OX01TXG4gICAgICA/IHNldFRpbWVvdXQoY2FsbGJhY2ssIGRlbGF5LCBhcmcpXG4gICAgICA6IG5ldyBGYXN0VGltZXIoY2FsbGJhY2ssIGRlbGF5LCBhcmcpXG4gIH0sXG4gIC8qKlxuICAgKiBUaGUgY2xlYXJUaW1lb3V0IG1ldGhvZCBjYW5jZWxzIGFuIGluc3RhbnRpYXRlZCBUaW1lciBwcmV2aW91c2x5IGNyZWF0ZWRcbiAgICogYnkgY2FsbGluZyBzZXRUaW1lb3V0LlxuICAgKlxuICAgKiBAcGFyYW0ge05vZGVKUy5UaW1lb3V0fEZhc3RUaW1lcn0gdGltZW91dFxuICAgKi9cbiAgY2xlYXJUaW1lb3V0ICh0aW1lb3V0KSB7XG4gICAgLy8gSWYgdGhlIHRpbWVvdXQgaXMgYSBGYXN0VGltZXIsIGNhbGwgaXRzIG93biBjbGVhciBtZXRob2QuXG4gICAgaWYgKHRpbWVvdXRba0Zhc3RUaW1lcl0pIHtcbiAgICAgIC8qKlxuICAgICAgICogQHR5cGUge0Zhc3RUaW1lcn1cbiAgICAgICAqL1xuICAgICAgdGltZW91dC5jbGVhcigpXG4gICAgICAvLyBPdGhlcndpc2UgaXQgaXMgYW4gaW5zdGFuY2Ugb2YgYSBuYXRpdmUgTm9kZUpTLlRpbWVvdXQsIHNvIGNhbGwgdGhlXG4gICAgICAvLyBOb2RlLmpzIG5hdGl2ZSBjbGVhclRpbWVvdXQgZnVuY3Rpb24uXG4gICAgfSBlbHNlIHtcbiAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0KVxuICAgIH1cbiAgfSxcbiAgLyoqXG4gICAqIFRoZSBzZXRGYXN0VGltZW91dCgpIG1ldGhvZCBzZXRzIGEgZmFzdFRpbWVyIHdoaWNoIGV4ZWN1dGVzIGEgZnVuY3Rpb24gb25jZVxuICAgKiB0aGUgdGltZXIgZXhwaXJlcy5cbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gY2FsbGJhY2sgQSBmdW5jdGlvbiB0byBiZSBleGVjdXRlZCBhZnRlciB0aGUgdGltZXJcbiAgICogZXhwaXJlcy5cbiAgICogQHBhcmFtIHtudW1iZXJ9IGRlbGF5IFRoZSB0aW1lLCBpbiBtaWxsaXNlY29uZHMgdGhhdCB0aGUgdGltZXIgc2hvdWxkXG4gICAqIHdhaXQgYmVmb3JlIHRoZSBzcGVjaWZpZWQgZnVuY3Rpb24gb3IgY29kZSBpcyBleGVjdXRlZC5cbiAgICogQHBhcmFtIHsqfSBbYXJnXSBBbiBvcHRpb25hbCBhcmd1bWVudCB0byBiZSBwYXNzZWQgdG8gdGhlIGNhbGxiYWNrIGZ1bmN0aW9uXG4gICAqIHdoZW4gdGhlIHRpbWVyIGV4cGlyZXMuXG4gICAqIEByZXR1cm5zIHtGYXN0VGltZXJ9XG4gICAqL1xuICBzZXRGYXN0VGltZW91dCAoY2FsbGJhY2ssIGRlbGF5LCBhcmcpIHtcbiAgICByZXR1cm4gbmV3IEZhc3RUaW1lcihjYWxsYmFjaywgZGVsYXksIGFyZylcbiAgfSxcbiAgLyoqXG4gICAqIFRoZSBjbGVhclRpbWVvdXQgbWV0aG9kIGNhbmNlbHMgYW4gaW5zdGFudGlhdGVkIEZhc3RUaW1lciBwcmV2aW91c2x5XG4gICAqIGNyZWF0ZWQgYnkgY2FsbGluZyBzZXRGYXN0VGltZW91dC5cbiAgICpcbiAgICogQHBhcmFtIHtGYXN0VGltZXJ9IHRpbWVvdXRcbiAgICovXG4gIGNsZWFyRmFzdFRpbWVvdXQgKHRpbWVvdXQpIHtcbiAgICB0aW1lb3V0LmNsZWFyKClcbiAgfSxcbiAgLyoqXG4gICAqIFRoZSBub3cgbWV0aG9kIHJldHVybnMgdGhlIHZhbHVlIG9mIHRoZSBpbnRlcm5hbCBmYXN0IHRpbWVyIGNsb2NrLlxuICAgKlxuICAgKiBAcmV0dXJucyB7bnVtYmVyfVxuICAgKi9cbiAgbm93ICgpIHtcbiAgICByZXR1cm4gZmFzdE5vd1xuICB9LFxuICAvKipcbiAgICogVHJpZ2dlciB0aGUgb25UaWNrIGZ1bmN0aW9uIHRvIHByb2Nlc3MgdGhlIGZhc3RUaW1lcnMgYXJyYXkuXG4gICAqIEV4cG9ydGVkIGZvciB0ZXN0aW5nIHB1cnBvc2VzIG9ubHkuXG4gICAqIE1hcmtpbmcgYXMgZGVwcmVjYXRlZCB0byBkaXNjb3VyYWdlIGFueSB1c2Ugb3V0c2lkZSBvZiB0ZXN0aW5nLlxuICAgKiBAZGVwcmVjYXRlZFxuICAgKiBAcGFyYW0ge251bWJlcn0gW2RlbGF5PTBdIFRoZSBkZWxheSBpbiBtaWxsaXNlY29uZHMgdG8gYWRkIHRvIHRoZSBub3cgdmFsdWUuXG4gICAqL1xuICB0aWNrIChkZWxheSA9IDApIHtcbiAgICBmYXN0Tm93ICs9IGRlbGF5IC0gUkVTT0xVVElPTl9NUyArIDFcbiAgICBvblRpY2soKVxuICAgIG9uVGljaygpXG4gIH0sXG4gIC8qKlxuICAgKiBSZXNldCBGYXN0VGltZXJzLlxuICAgKiBFeHBvcnRlZCBmb3IgdGVzdGluZyBwdXJwb3NlcyBvbmx5LlxuICAgKiBNYXJraW5nIGFzIGRlcHJlY2F0ZWQgdG8gZGlzY291cmFnZSBhbnkgdXNlIG91dHNpZGUgb2YgdGVzdGluZy5cbiAgICogQGRlcHJlY2F0ZWRcbiAgICovXG4gIHJlc2V0ICgpIHtcbiAgICBmYXN0Tm93ID0gMFxuICAgIGZhc3RUaW1lcnMubGVuZ3RoID0gMFxuICAgIGNsZWFyVGltZW91dChmYXN0Tm93VGltZW91dClcbiAgICBmYXN0Tm93VGltZW91dCA9IG51bGxcbiAgfSxcbiAgLyoqXG4gICAqIEV4cG9ydGluZyBmb3IgdGVzdGluZyBwdXJwb3NlcyBvbmx5LlxuICAgKiBNYXJraW5nIGFzIGRlcHJlY2F0ZWQgdG8gZGlzY291cmFnZSBhbnkgdXNlIG91dHNpZGUgb2YgdGVzdGluZy5cbiAgICogQGRlcHJlY2F0ZWRcbiAgICovXG4gIGtGYXN0VGltZXJcbn1cbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgbmV0ID0gcmVxdWlyZSgnbm9kZTpuZXQnKVxuY29uc3QgYXNzZXJ0ID0gcmVxdWlyZSgnbm9kZTphc3NlcnQnKVxuY29uc3QgdXRpbCA9IHJlcXVpcmUoJy4vdXRpbCcpXG5jb25zdCB7IEludmFsaWRBcmd1bWVudEVycm9yLCBDb25uZWN0VGltZW91dEVycm9yIH0gPSByZXF1aXJlKCcuL2Vycm9ycycpXG5jb25zdCB0aW1lcnMgPSByZXF1aXJlKCcuLi91dGlsL3RpbWVycycpXG5cbmZ1bmN0aW9uIG5vb3AgKCkge31cblxubGV0IHRscyAvLyBpbmNsdWRlIHRscyBjb25kaXRpb25hbGx5IHNpbmNlIGl0IGlzIG5vdCBhbHdheXMgYXZhaWxhYmxlXG5cbi8vIFRPRE86IHNlc3Npb24gcmUtdXNlIGRvZXMgbm90IHdhaXQgZm9yIHRoZSBmaXJzdFxuLy8gY29ubmVjdGlvbiB0byByZXNvbHZlIHRoZSBzZXNzaW9uIGFuZCBtaWdodCB0aGVyZWZvcmVcbi8vIHJlc29sdmUgdGhlIHNhbWUgc2VydmVybmFtZSBtdWx0aXBsZSB0aW1lcyBldmVuIHdoZW5cbi8vIHJlLXVzZSBpcyBlbmFibGVkLlxuXG5sZXQgU2Vzc2lvbkNhY2hlXG4vLyBGSVhNRTogcmVtb3ZlIHdvcmthcm91bmQgd2hlbiB0aGUgTm9kZSBidWcgaXMgZml4ZWRcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvbm9kZS9pc3N1ZXMvNDkzNDQjaXNzdWVjb21tZW50LTE3NDE3NzYzMDhcbmlmIChnbG9iYWwuRmluYWxpemF0aW9uUmVnaXN0cnkgJiYgIShwcm9jZXNzLmVudi5OT0RFX1Y4X0NPVkVSQUdFIHx8IHByb2Nlc3MuZW52LlVORElDSV9OT19GRykpIHtcbiAgU2Vzc2lvbkNhY2hlID0gY2xhc3MgV2Vha1Nlc3Npb25DYWNoZSB7XG4gICAgY29uc3RydWN0b3IgKG1heENhY2hlZFNlc3Npb25zKSB7XG4gICAgICB0aGlzLl9tYXhDYWNoZWRTZXNzaW9ucyA9IG1heENhY2hlZFNlc3Npb25zXG4gICAgICB0aGlzLl9zZXNzaW9uQ2FjaGUgPSBuZXcgTWFwKClcbiAgICAgIHRoaXMuX3Nlc3Npb25SZWdpc3RyeSA9IG5ldyBnbG9iYWwuRmluYWxpemF0aW9uUmVnaXN0cnkoKGtleSkgPT4ge1xuICAgICAgICBpZiAodGhpcy5fc2Vzc2lvbkNhY2hlLnNpemUgPCB0aGlzLl9tYXhDYWNoZWRTZXNzaW9ucykge1xuICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcmVmID0gdGhpcy5fc2Vzc2lvbkNhY2hlLmdldChrZXkpXG4gICAgICAgIGlmIChyZWYgIT09IHVuZGVmaW5lZCAmJiByZWYuZGVyZWYoKSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgdGhpcy5fc2Vzc2lvbkNhY2hlLmRlbGV0ZShrZXkpXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfVxuXG4gICAgZ2V0IChzZXNzaW9uS2V5KSB7XG4gICAgICBjb25zdCByZWYgPSB0aGlzLl9zZXNzaW9uQ2FjaGUuZ2V0KHNlc3Npb25LZXkpXG4gICAgICByZXR1cm4gcmVmID8gcmVmLmRlcmVmKCkgOiBudWxsXG4gICAgfVxuXG4gICAgc2V0IChzZXNzaW9uS2V5LCBzZXNzaW9uKSB7XG4gICAgICBpZiAodGhpcy5fbWF4Q2FjaGVkU2Vzc2lvbnMgPT09IDApIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIHRoaXMuX3Nlc3Npb25DYWNoZS5zZXQoc2Vzc2lvbktleSwgbmV3IFdlYWtSZWYoc2Vzc2lvbikpXG4gICAgICB0aGlzLl9zZXNzaW9uUmVnaXN0cnkucmVnaXN0ZXIoc2Vzc2lvbiwgc2Vzc2lvbktleSlcbiAgICB9XG4gIH1cbn0gZWxzZSB7XG4gIFNlc3Npb25DYWNoZSA9IGNsYXNzIFNpbXBsZVNlc3Npb25DYWNoZSB7XG4gICAgY29uc3RydWN0b3IgKG1heENhY2hlZFNlc3Npb25zKSB7XG4gICAgICB0aGlzLl9tYXhDYWNoZWRTZXNzaW9ucyA9IG1heENhY2hlZFNlc3Npb25zXG4gICAgICB0aGlzLl9zZXNzaW9uQ2FjaGUgPSBuZXcgTWFwKClcbiAgICB9XG5cbiAgICBnZXQgKHNlc3Npb25LZXkpIHtcbiAgICAgIHJldHVybiB0aGlzLl9zZXNzaW9uQ2FjaGUuZ2V0KHNlc3Npb25LZXkpXG4gICAgfVxuXG4gICAgc2V0IChzZXNzaW9uS2V5LCBzZXNzaW9uKSB7XG4gICAgICBpZiAodGhpcy5fbWF4Q2FjaGVkU2Vzc2lvbnMgPT09IDApIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLl9zZXNzaW9uQ2FjaGUuc2l6ZSA+PSB0aGlzLl9tYXhDYWNoZWRTZXNzaW9ucykge1xuICAgICAgICAvLyByZW1vdmUgdGhlIG9sZGVzdCBzZXNzaW9uXG4gICAgICAgIGNvbnN0IHsgdmFsdWU6IG9sZGVzdEtleSB9ID0gdGhpcy5fc2Vzc2lvbkNhY2hlLmtleXMoKS5uZXh0KClcbiAgICAgICAgdGhpcy5fc2Vzc2lvbkNhY2hlLmRlbGV0ZShvbGRlc3RLZXkpXG4gICAgICB9XG5cbiAgICAgIHRoaXMuX3Nlc3Npb25DYWNoZS5zZXQoc2Vzc2lvbktleSwgc2Vzc2lvbilcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gYnVpbGRDb25uZWN0b3IgKHsgYWxsb3dIMiwgbWF4Q2FjaGVkU2Vzc2lvbnMsIHNvY2tldFBhdGgsIHRpbWVvdXQsIHNlc3Npb246IGN1c3RvbVNlc3Npb24sIC4uLm9wdHMgfSkge1xuICBpZiAobWF4Q2FjaGVkU2Vzc2lvbnMgIT0gbnVsbCAmJiAoIU51bWJlci5pc0ludGVnZXIobWF4Q2FjaGVkU2Vzc2lvbnMpIHx8IG1heENhY2hlZFNlc3Npb25zIDwgMCkpIHtcbiAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ21heENhY2hlZFNlc3Npb25zIG11c3QgYmUgYSBwb3NpdGl2ZSBpbnRlZ2VyIG9yIHplcm8nKVxuICB9XG5cbiAgY29uc3Qgb3B0aW9ucyA9IHsgcGF0aDogc29ja2V0UGF0aCwgLi4ub3B0cyB9XG4gIGNvbnN0IHNlc3Npb25DYWNoZSA9IG5ldyBTZXNzaW9uQ2FjaGUobWF4Q2FjaGVkU2Vzc2lvbnMgPT0gbnVsbCA/IDEwMCA6IG1heENhY2hlZFNlc3Npb25zKVxuICB0aW1lb3V0ID0gdGltZW91dCA9PSBudWxsID8gMTBlMyA6IHRpbWVvdXRcbiAgYWxsb3dIMiA9IGFsbG93SDIgIT0gbnVsbCA/IGFsbG93SDIgOiBmYWxzZVxuICByZXR1cm4gZnVuY3Rpb24gY29ubmVjdCAoeyBob3N0bmFtZSwgaG9zdCwgcHJvdG9jb2wsIHBvcnQsIHNlcnZlcm5hbWUsIGxvY2FsQWRkcmVzcywgaHR0cFNvY2tldCB9LCBjYWxsYmFjaykge1xuICAgIGxldCBzb2NrZXRcbiAgICBpZiAocHJvdG9jb2wgPT09ICdodHRwczonKSB7XG4gICAgICBpZiAoIXRscykge1xuICAgICAgICB0bHMgPSByZXF1aXJlKCdub2RlOnRscycpXG4gICAgICB9XG4gICAgICBzZXJ2ZXJuYW1lID0gc2VydmVybmFtZSB8fCBvcHRpb25zLnNlcnZlcm5hbWUgfHwgdXRpbC5nZXRTZXJ2ZXJOYW1lKGhvc3QpIHx8IG51bGxcblxuICAgICAgY29uc3Qgc2Vzc2lvbktleSA9IHNlcnZlcm5hbWUgfHwgaG9zdG5hbWVcbiAgICAgIGFzc2VydChzZXNzaW9uS2V5KVxuXG4gICAgICBjb25zdCBzZXNzaW9uID0gY3VzdG9tU2Vzc2lvbiB8fCBzZXNzaW9uQ2FjaGUuZ2V0KHNlc3Npb25LZXkpIHx8IG51bGxcblxuICAgICAgcG9ydCA9IHBvcnQgfHwgNDQzXG5cbiAgICAgIHNvY2tldCA9IHRscy5jb25uZWN0KHtcbiAgICAgICAgaGlnaFdhdGVyTWFyazogMTYzODQsIC8vIFRMUyBpbiBub2RlIGNhbid0IGhhdmUgYmlnZ2VyIEhXTSBhbnl3YXkuLi5cbiAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgICAgc2VydmVybmFtZSxcbiAgICAgICAgc2Vzc2lvbixcbiAgICAgICAgbG9jYWxBZGRyZXNzLFxuICAgICAgICAvLyBUT0RPKEhUVFAvMik6IEFkZCBzdXBwb3J0IGZvciBoMmNcbiAgICAgICAgQUxQTlByb3RvY29sczogYWxsb3dIMiA/IFsnaHR0cC8xLjEnLCAnaDInXSA6IFsnaHR0cC8xLjEnXSxcbiAgICAgICAgc29ja2V0OiBodHRwU29ja2V0LCAvLyB1cGdyYWRlIHNvY2tldCBjb25uZWN0aW9uXG4gICAgICAgIHBvcnQsXG4gICAgICAgIGhvc3Q6IGhvc3RuYW1lXG4gICAgICB9KVxuXG4gICAgICBzb2NrZXRcbiAgICAgICAgLm9uKCdzZXNzaW9uJywgZnVuY3Rpb24gKHNlc3Npb24pIHtcbiAgICAgICAgICAvLyBUT0RPIChmaXgpOiBDYW4gYSBzZXNzaW9uIGJlY29tZSBpbnZhbGlkIG9uY2UgZXN0YWJsaXNoZWQ/IERvbid0IHRoaW5rIHNvP1xuICAgICAgICAgIHNlc3Npb25DYWNoZS5zZXQoc2Vzc2lvbktleSwgc2Vzc2lvbilcbiAgICAgICAgfSlcbiAgICB9IGVsc2Uge1xuICAgICAgYXNzZXJ0KCFodHRwU29ja2V0LCAnaHR0cFNvY2tldCBjYW4gb25seSBiZSBzZW50IG9uIFRMUyB1cGRhdGUnKVxuXG4gICAgICBwb3J0ID0gcG9ydCB8fCA4MFxuXG4gICAgICBzb2NrZXQgPSBuZXQuY29ubmVjdCh7XG4gICAgICAgIGhpZ2hXYXRlck1hcms6IDY0ICogMTAyNCwgLy8gU2FtZSBhcyBub2RlanMgZnMgc3RyZWFtcy5cbiAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgICAgbG9jYWxBZGRyZXNzLFxuICAgICAgICBwb3J0LFxuICAgICAgICBob3N0OiBob3N0bmFtZVxuICAgICAgfSlcbiAgICB9XG5cbiAgICAvLyBTZXQgVENQIGtlZXAgYWxpdmUgb3B0aW9ucyBvbiB0aGUgc29ja2V0IGhlcmUgaW5zdGVhZCBvZiBpbiBjb25uZWN0KCkgZm9yIHRoZSBjYXNlIG9mIGFzc2lnbmluZyB0aGUgc29ja2V0XG4gICAgaWYgKG9wdGlvbnMua2VlcEFsaXZlID09IG51bGwgfHwgb3B0aW9ucy5rZWVwQWxpdmUpIHtcbiAgICAgIGNvbnN0IGtlZXBBbGl2ZUluaXRpYWxEZWxheSA9IG9wdGlvbnMua2VlcEFsaXZlSW5pdGlhbERlbGF5ID09PSB1bmRlZmluZWQgPyA2MGUzIDogb3B0aW9ucy5rZWVwQWxpdmVJbml0aWFsRGVsYXlcbiAgICAgIHNvY2tldC5zZXRLZWVwQWxpdmUodHJ1ZSwga2VlcEFsaXZlSW5pdGlhbERlbGF5KVxuICAgIH1cblxuICAgIGNvbnN0IGNsZWFyQ29ubmVjdFRpbWVvdXQgPSBzZXR1cENvbm5lY3RUaW1lb3V0KG5ldyBXZWFrUmVmKHNvY2tldCksIHsgdGltZW91dCwgaG9zdG5hbWUsIHBvcnQgfSlcblxuICAgIHNvY2tldFxuICAgICAgLnNldE5vRGVsYXkodHJ1ZSlcbiAgICAgIC5vbmNlKHByb3RvY29sID09PSAnaHR0cHM6JyA/ICdzZWN1cmVDb25uZWN0JyA6ICdjb25uZWN0JywgZnVuY3Rpb24gKCkge1xuICAgICAgICBxdWV1ZU1pY3JvdGFzayhjbGVhckNvbm5lY3RUaW1lb3V0KVxuXG4gICAgICAgIGlmIChjYWxsYmFjaykge1xuICAgICAgICAgIGNvbnN0IGNiID0gY2FsbGJhY2tcbiAgICAgICAgICBjYWxsYmFjayA9IG51bGxcbiAgICAgICAgICBjYihudWxsLCB0aGlzKVxuICAgICAgICB9XG4gICAgICB9KVxuICAgICAgLm9uKCdlcnJvcicsIGZ1bmN0aW9uIChlcnIpIHtcbiAgICAgICAgcXVldWVNaWNyb3Rhc2soY2xlYXJDb25uZWN0VGltZW91dClcblxuICAgICAgICBpZiAoY2FsbGJhY2spIHtcbiAgICAgICAgICBjb25zdCBjYiA9IGNhbGxiYWNrXG4gICAgICAgICAgY2FsbGJhY2sgPSBudWxsXG4gICAgICAgICAgY2IoZXJyKVxuICAgICAgICB9XG4gICAgICB9KVxuXG4gICAgcmV0dXJuIHNvY2tldFxuICB9XG59XG5cbi8qKlxuICogQHBhcmFtIHtXZWFrUmVmPG5ldC5Tb2NrZXQ+fSBzb2NrZXRXZWFrUmVmXG4gKiBAcGFyYW0ge29iamVjdH0gb3B0c1xuICogQHBhcmFtIHtudW1iZXJ9IG9wdHMudGltZW91dFxuICogQHBhcmFtIHtzdHJpbmd9IG9wdHMuaG9zdG5hbWVcbiAqIEBwYXJhbSB7bnVtYmVyfSBvcHRzLnBvcnRcbiAqIEByZXR1cm5zIHsoKSA9PiB2b2lkfVxuICovXG5jb25zdCBzZXR1cENvbm5lY3RUaW1lb3V0ID0gcHJvY2Vzcy5wbGF0Zm9ybSA9PT0gJ3dpbjMyJ1xuICA/IChzb2NrZXRXZWFrUmVmLCBvcHRzKSA9PiB7XG4gICAgICBpZiAoIW9wdHMudGltZW91dCkge1xuICAgICAgICByZXR1cm4gbm9vcFxuICAgICAgfVxuXG4gICAgICBsZXQgczEgPSBudWxsXG4gICAgICBsZXQgczIgPSBudWxsXG4gICAgICBjb25zdCBmYXN0VGltZXIgPSB0aW1lcnMuc2V0RmFzdFRpbWVvdXQoKCkgPT4ge1xuICAgICAgLy8gc2V0SW1tZWRpYXRlIGlzIGFkZGVkIHRvIG1ha2Ugc3VyZSB0aGF0IHdlIHByaW9yaXRpemUgc29ja2V0IGVycm9yIGV2ZW50cyBvdmVyIHRpbWVvdXRzXG4gICAgICAgIHMxID0gc2V0SW1tZWRpYXRlKCgpID0+IHtcbiAgICAgICAgLy8gV2luZG93cyBuZWVkcyBhbiBleHRyYSBzZXRJbW1lZGlhdGUgcHJvYmFibHkgZHVlIHRvIGltcGxlbWVudGF0aW9uIGRpZmZlcmVuY2VzIGluIHRoZSBzb2NrZXQgbG9naWNcbiAgICAgICAgICBzMiA9IHNldEltbWVkaWF0ZSgoKSA9PiBvbkNvbm5lY3RUaW1lb3V0KHNvY2tldFdlYWtSZWYuZGVyZWYoKSwgb3B0cykpXG4gICAgICAgIH0pXG4gICAgICB9LCBvcHRzLnRpbWVvdXQpXG4gICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICB0aW1lcnMuY2xlYXJGYXN0VGltZW91dChmYXN0VGltZXIpXG4gICAgICAgIGNsZWFySW1tZWRpYXRlKHMxKVxuICAgICAgICBjbGVhckltbWVkaWF0ZShzMilcbiAgICAgIH1cbiAgICB9XG4gIDogKHNvY2tldFdlYWtSZWYsIG9wdHMpID0+IHtcbiAgICAgIGlmICghb3B0cy50aW1lb3V0KSB7XG4gICAgICAgIHJldHVybiBub29wXG4gICAgICB9XG5cbiAgICAgIGxldCBzMSA9IG51bGxcbiAgICAgIGNvbnN0IGZhc3RUaW1lciA9IHRpbWVycy5zZXRGYXN0VGltZW91dCgoKSA9PiB7XG4gICAgICAvLyBzZXRJbW1lZGlhdGUgaXMgYWRkZWQgdG8gbWFrZSBzdXJlIHRoYXQgd2UgcHJpb3JpdGl6ZSBzb2NrZXQgZXJyb3IgZXZlbnRzIG92ZXIgdGltZW91dHNcbiAgICAgICAgczEgPSBzZXRJbW1lZGlhdGUoKCkgPT4ge1xuICAgICAgICAgIG9uQ29ubmVjdFRpbWVvdXQoc29ja2V0V2Vha1JlZi5kZXJlZigpLCBvcHRzKVxuICAgICAgICB9KVxuICAgICAgfSwgb3B0cy50aW1lb3V0KVxuICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgdGltZXJzLmNsZWFyRmFzdFRpbWVvdXQoZmFzdFRpbWVyKVxuICAgICAgICBjbGVhckltbWVkaWF0ZShzMSlcbiAgICAgIH1cbiAgICB9XG5cbi8qKlxuICogQHBhcmFtIHtuZXQuU29ja2V0fSBzb2NrZXRcbiAqIEBwYXJhbSB7b2JqZWN0fSBvcHRzXG4gKiBAcGFyYW0ge251bWJlcn0gb3B0cy50aW1lb3V0XG4gKiBAcGFyYW0ge3N0cmluZ30gb3B0cy5ob3N0bmFtZVxuICogQHBhcmFtIHtudW1iZXJ9IG9wdHMucG9ydFxuICovXG5mdW5jdGlvbiBvbkNvbm5lY3RUaW1lb3V0IChzb2NrZXQsIG9wdHMpIHtcbiAgLy8gVGhlIHNvY2tldCBjb3VsZCBiZSBhbHJlYWR5IGdhcmJhZ2UgY29sbGVjdGVkXG4gIGlmIChzb2NrZXQgPT0gbnVsbCkge1xuICAgIHJldHVyblxuICB9XG5cbiAgbGV0IG1lc3NhZ2UgPSAnQ29ubmVjdCBUaW1lb3V0IEVycm9yJ1xuICBpZiAoQXJyYXkuaXNBcnJheShzb2NrZXQuYXV0b1NlbGVjdEZhbWlseUF0dGVtcHRlZEFkZHJlc3NlcykpIHtcbiAgICBtZXNzYWdlICs9IGAgKGF0dGVtcHRlZCBhZGRyZXNzZXM6ICR7c29ja2V0LmF1dG9TZWxlY3RGYW1pbHlBdHRlbXB0ZWRBZGRyZXNzZXMuam9pbignLCAnKX0sYFxuICB9IGVsc2Uge1xuICAgIG1lc3NhZ2UgKz0gYCAoYXR0ZW1wdGVkIGFkZHJlc3M6ICR7b3B0cy5ob3N0bmFtZX06JHtvcHRzLnBvcnR9LGBcbiAgfVxuXG4gIG1lc3NhZ2UgKz0gYCB0aW1lb3V0OiAke29wdHMudGltZW91dH1tcylgXG5cbiAgdXRpbC5kZXN0cm95KHNvY2tldCwgbmV3IENvbm5lY3RUaW1lb3V0RXJyb3IobWVzc2FnZSkpXG59XG5cbm1vZHVsZS5leHBvcnRzID0gYnVpbGRDb25uZWN0b3JcbiIsICJcInVzZSBzdHJpY3RcIjtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuZW51bVRvTWFwID0gdm9pZCAwO1xuZnVuY3Rpb24gZW51bVRvTWFwKG9iaikge1xuICAgIGNvbnN0IHJlcyA9IHt9O1xuICAgIE9iamVjdC5rZXlzKG9iaikuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gb2JqW2tleV07XG4gICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgICByZXNba2V5XSA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHJlcztcbn1cbmV4cG9ydHMuZW51bVRvTWFwID0gZW51bVRvTWFwO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dXRpbHMuanMubWFwIiwgIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5TUEVDSUFMX0hFQURFUlMgPSBleHBvcnRzLkhFQURFUl9TVEFURSA9IGV4cG9ydHMuTUlOT1IgPSBleHBvcnRzLk1BSk9SID0gZXhwb3J0cy5DT05ORUNUSU9OX1RPS0VOX0NIQVJTID0gZXhwb3J0cy5IRUFERVJfQ0hBUlMgPSBleHBvcnRzLlRPS0VOID0gZXhwb3J0cy5TVFJJQ1RfVE9LRU4gPSBleHBvcnRzLkhFWCA9IGV4cG9ydHMuVVJMX0NIQVIgPSBleHBvcnRzLlNUUklDVF9VUkxfQ0hBUiA9IGV4cG9ydHMuVVNFUklORk9fQ0hBUlMgPSBleHBvcnRzLk1BUksgPSBleHBvcnRzLkFMUEhBTlVNID0gZXhwb3J0cy5OVU0gPSBleHBvcnRzLkhFWF9NQVAgPSBleHBvcnRzLk5VTV9NQVAgPSBleHBvcnRzLkFMUEhBID0gZXhwb3J0cy5GSU5JU0ggPSBleHBvcnRzLkhfTUVUSE9EX01BUCA9IGV4cG9ydHMuTUVUSE9EX01BUCA9IGV4cG9ydHMuTUVUSE9EU19SVFNQID0gZXhwb3J0cy5NRVRIT0RTX0lDRSA9IGV4cG9ydHMuTUVUSE9EU19IVFRQID0gZXhwb3J0cy5NRVRIT0RTID0gZXhwb3J0cy5MRU5JRU5UX0ZMQUdTID0gZXhwb3J0cy5GTEFHUyA9IGV4cG9ydHMuVFlQRSA9IGV4cG9ydHMuRVJST1IgPSB2b2lkIDA7XG5jb25zdCB1dGlsc18xID0gcmVxdWlyZShcIi4vdXRpbHNcIik7XG4vLyBDIGhlYWRlcnNcbnZhciBFUlJPUjtcbihmdW5jdGlvbiAoRVJST1IpIHtcbiAgICBFUlJPUltFUlJPUltcIk9LXCJdID0gMF0gPSBcIk9LXCI7XG4gICAgRVJST1JbRVJST1JbXCJJTlRFUk5BTFwiXSA9IDFdID0gXCJJTlRFUk5BTFwiO1xuICAgIEVSUk9SW0VSUk9SW1wiU1RSSUNUXCJdID0gMl0gPSBcIlNUUklDVFwiO1xuICAgIEVSUk9SW0VSUk9SW1wiTEZfRVhQRUNURURcIl0gPSAzXSA9IFwiTEZfRVhQRUNURURcIjtcbiAgICBFUlJPUltFUlJPUltcIlVORVhQRUNURURfQ09OVEVOVF9MRU5HVEhcIl0gPSA0XSA9IFwiVU5FWFBFQ1RFRF9DT05URU5UX0xFTkdUSFwiO1xuICAgIEVSUk9SW0VSUk9SW1wiQ0xPU0VEX0NPTk5FQ1RJT05cIl0gPSA1XSA9IFwiQ0xPU0VEX0NPTk5FQ1RJT05cIjtcbiAgICBFUlJPUltFUlJPUltcIklOVkFMSURfTUVUSE9EXCJdID0gNl0gPSBcIklOVkFMSURfTUVUSE9EXCI7XG4gICAgRVJST1JbRVJST1JbXCJJTlZBTElEX1VSTFwiXSA9IDddID0gXCJJTlZBTElEX1VSTFwiO1xuICAgIEVSUk9SW0VSUk9SW1wiSU5WQUxJRF9DT05TVEFOVFwiXSA9IDhdID0gXCJJTlZBTElEX0NPTlNUQU5UXCI7XG4gICAgRVJST1JbRVJST1JbXCJJTlZBTElEX1ZFUlNJT05cIl0gPSA5XSA9IFwiSU5WQUxJRF9WRVJTSU9OXCI7XG4gICAgRVJST1JbRVJST1JbXCJJTlZBTElEX0hFQURFUl9UT0tFTlwiXSA9IDEwXSA9IFwiSU5WQUxJRF9IRUFERVJfVE9LRU5cIjtcbiAgICBFUlJPUltFUlJPUltcIklOVkFMSURfQ09OVEVOVF9MRU5HVEhcIl0gPSAxMV0gPSBcIklOVkFMSURfQ09OVEVOVF9MRU5HVEhcIjtcbiAgICBFUlJPUltFUlJPUltcIklOVkFMSURfQ0hVTktfU0laRVwiXSA9IDEyXSA9IFwiSU5WQUxJRF9DSFVOS19TSVpFXCI7XG4gICAgRVJST1JbRVJST1JbXCJJTlZBTElEX1NUQVRVU1wiXSA9IDEzXSA9IFwiSU5WQUxJRF9TVEFUVVNcIjtcbiAgICBFUlJPUltFUlJPUltcIklOVkFMSURfRU9GX1NUQVRFXCJdID0gMTRdID0gXCJJTlZBTElEX0VPRl9TVEFURVwiO1xuICAgIEVSUk9SW0VSUk9SW1wiSU5WQUxJRF9UUkFOU0ZFUl9FTkNPRElOR1wiXSA9IDE1XSA9IFwiSU5WQUxJRF9UUkFOU0ZFUl9FTkNPRElOR1wiO1xuICAgIEVSUk9SW0VSUk9SW1wiQ0JfTUVTU0FHRV9CRUdJTlwiXSA9IDE2XSA9IFwiQ0JfTUVTU0FHRV9CRUdJTlwiO1xuICAgIEVSUk9SW0VSUk9SW1wiQ0JfSEVBREVSU19DT01QTEVURVwiXSA9IDE3XSA9IFwiQ0JfSEVBREVSU19DT01QTEVURVwiO1xuICAgIEVSUk9SW0VSUk9SW1wiQ0JfTUVTU0FHRV9DT01QTEVURVwiXSA9IDE4XSA9IFwiQ0JfTUVTU0FHRV9DT01QTEVURVwiO1xuICAgIEVSUk9SW0VSUk9SW1wiQ0JfQ0hVTktfSEVBREVSXCJdID0gMTldID0gXCJDQl9DSFVOS19IRUFERVJcIjtcbiAgICBFUlJPUltFUlJPUltcIkNCX0NIVU5LX0NPTVBMRVRFXCJdID0gMjBdID0gXCJDQl9DSFVOS19DT01QTEVURVwiO1xuICAgIEVSUk9SW0VSUk9SW1wiUEFVU0VEXCJdID0gMjFdID0gXCJQQVVTRURcIjtcbiAgICBFUlJPUltFUlJPUltcIlBBVVNFRF9VUEdSQURFXCJdID0gMjJdID0gXCJQQVVTRURfVVBHUkFERVwiO1xuICAgIEVSUk9SW0VSUk9SW1wiUEFVU0VEX0gyX1VQR1JBREVcIl0gPSAyM10gPSBcIlBBVVNFRF9IMl9VUEdSQURFXCI7XG4gICAgRVJST1JbRVJST1JbXCJVU0VSXCJdID0gMjRdID0gXCJVU0VSXCI7XG59KShFUlJPUiA9IGV4cG9ydHMuRVJST1IgfHwgKGV4cG9ydHMuRVJST1IgPSB7fSkpO1xudmFyIFRZUEU7XG4oZnVuY3Rpb24gKFRZUEUpIHtcbiAgICBUWVBFW1RZUEVbXCJCT1RIXCJdID0gMF0gPSBcIkJPVEhcIjtcbiAgICBUWVBFW1RZUEVbXCJSRVFVRVNUXCJdID0gMV0gPSBcIlJFUVVFU1RcIjtcbiAgICBUWVBFW1RZUEVbXCJSRVNQT05TRVwiXSA9IDJdID0gXCJSRVNQT05TRVwiO1xufSkoVFlQRSA9IGV4cG9ydHMuVFlQRSB8fCAoZXhwb3J0cy5UWVBFID0ge30pKTtcbnZhciBGTEFHUztcbihmdW5jdGlvbiAoRkxBR1MpIHtcbiAgICBGTEFHU1tGTEFHU1tcIkNPTk5FQ1RJT05fS0VFUF9BTElWRVwiXSA9IDFdID0gXCJDT05ORUNUSU9OX0tFRVBfQUxJVkVcIjtcbiAgICBGTEFHU1tGTEFHU1tcIkNPTk5FQ1RJT05fQ0xPU0VcIl0gPSAyXSA9IFwiQ09OTkVDVElPTl9DTE9TRVwiO1xuICAgIEZMQUdTW0ZMQUdTW1wiQ09OTkVDVElPTl9VUEdSQURFXCJdID0gNF0gPSBcIkNPTk5FQ1RJT05fVVBHUkFERVwiO1xuICAgIEZMQUdTW0ZMQUdTW1wiQ0hVTktFRFwiXSA9IDhdID0gXCJDSFVOS0VEXCI7XG4gICAgRkxBR1NbRkxBR1NbXCJVUEdSQURFXCJdID0gMTZdID0gXCJVUEdSQURFXCI7XG4gICAgRkxBR1NbRkxBR1NbXCJDT05URU5UX0xFTkdUSFwiXSA9IDMyXSA9IFwiQ09OVEVOVF9MRU5HVEhcIjtcbiAgICBGTEFHU1tGTEFHU1tcIlNLSVBCT0RZXCJdID0gNjRdID0gXCJTS0lQQk9EWVwiO1xuICAgIEZMQUdTW0ZMQUdTW1wiVFJBSUxJTkdcIl0gPSAxMjhdID0gXCJUUkFJTElOR1wiO1xuICAgIC8vIDEgPDwgOCBpcyB1bnVzZWRcbiAgICBGTEFHU1tGTEFHU1tcIlRSQU5TRkVSX0VOQ09ESU5HXCJdID0gNTEyXSA9IFwiVFJBTlNGRVJfRU5DT0RJTkdcIjtcbn0pKEZMQUdTID0gZXhwb3J0cy5GTEFHUyB8fCAoZXhwb3J0cy5GTEFHUyA9IHt9KSk7XG52YXIgTEVOSUVOVF9GTEFHUztcbihmdW5jdGlvbiAoTEVOSUVOVF9GTEFHUykge1xuICAgIExFTklFTlRfRkxBR1NbTEVOSUVOVF9GTEFHU1tcIkhFQURFUlNcIl0gPSAxXSA9IFwiSEVBREVSU1wiO1xuICAgIExFTklFTlRfRkxBR1NbTEVOSUVOVF9GTEFHU1tcIkNIVU5LRURfTEVOR1RIXCJdID0gMl0gPSBcIkNIVU5LRURfTEVOR1RIXCI7XG4gICAgTEVOSUVOVF9GTEFHU1tMRU5JRU5UX0ZMQUdTW1wiS0VFUF9BTElWRVwiXSA9IDRdID0gXCJLRUVQX0FMSVZFXCI7XG59KShMRU5JRU5UX0ZMQUdTID0gZXhwb3J0cy5MRU5JRU5UX0ZMQUdTIHx8IChleHBvcnRzLkxFTklFTlRfRkxBR1MgPSB7fSkpO1xudmFyIE1FVEhPRFM7XG4oZnVuY3Rpb24gKE1FVEhPRFMpIHtcbiAgICBNRVRIT0RTW01FVEhPRFNbXCJERUxFVEVcIl0gPSAwXSA9IFwiREVMRVRFXCI7XG4gICAgTUVUSE9EU1tNRVRIT0RTW1wiR0VUXCJdID0gMV0gPSBcIkdFVFwiO1xuICAgIE1FVEhPRFNbTUVUSE9EU1tcIkhFQURcIl0gPSAyXSA9IFwiSEVBRFwiO1xuICAgIE1FVEhPRFNbTUVUSE9EU1tcIlBPU1RcIl0gPSAzXSA9IFwiUE9TVFwiO1xuICAgIE1FVEhPRFNbTUVUSE9EU1tcIlBVVFwiXSA9IDRdID0gXCJQVVRcIjtcbiAgICAvKiBwYXRob2xvZ2ljYWwgKi9cbiAgICBNRVRIT0RTW01FVEhPRFNbXCJDT05ORUNUXCJdID0gNV0gPSBcIkNPTk5FQ1RcIjtcbiAgICBNRVRIT0RTW01FVEhPRFNbXCJPUFRJT05TXCJdID0gNl0gPSBcIk9QVElPTlNcIjtcbiAgICBNRVRIT0RTW01FVEhPRFNbXCJUUkFDRVwiXSA9IDddID0gXCJUUkFDRVwiO1xuICAgIC8qIFdlYkRBViAqL1xuICAgIE1FVEhPRFNbTUVUSE9EU1tcIkNPUFlcIl0gPSA4XSA9IFwiQ09QWVwiO1xuICAgIE1FVEhPRFNbTUVUSE9EU1tcIkxPQ0tcIl0gPSA5XSA9IFwiTE9DS1wiO1xuICAgIE1FVEhPRFNbTUVUSE9EU1tcIk1LQ09MXCJdID0gMTBdID0gXCJNS0NPTFwiO1xuICAgIE1FVEhPRFNbTUVUSE9EU1tcIk1PVkVcIl0gPSAxMV0gPSBcIk1PVkVcIjtcbiAgICBNRVRIT0RTW01FVEhPRFNbXCJQUk9QRklORFwiXSA9IDEyXSA9IFwiUFJPUEZJTkRcIjtcbiAgICBNRVRIT0RTW01FVEhPRFNbXCJQUk9QUEFUQ0hcIl0gPSAxM10gPSBcIlBST1BQQVRDSFwiO1xuICAgIE1FVEhPRFNbTUVUSE9EU1tcIlNFQVJDSFwiXSA9IDE0XSA9IFwiU0VBUkNIXCI7XG4gICAgTUVUSE9EU1tNRVRIT0RTW1wiVU5MT0NLXCJdID0gMTVdID0gXCJVTkxPQ0tcIjtcbiAgICBNRVRIT0RTW01FVEhPRFNbXCJCSU5EXCJdID0gMTZdID0gXCJCSU5EXCI7XG4gICAgTUVUSE9EU1tNRVRIT0RTW1wiUkVCSU5EXCJdID0gMTddID0gXCJSRUJJTkRcIjtcbiAgICBNRVRIT0RTW01FVEhPRFNbXCJVTkJJTkRcIl0gPSAxOF0gPSBcIlVOQklORFwiO1xuICAgIE1FVEhPRFNbTUVUSE9EU1tcIkFDTFwiXSA9IDE5XSA9IFwiQUNMXCI7XG4gICAgLyogc3VidmVyc2lvbiAqL1xuICAgIE1FVEhPRFNbTUVUSE9EU1tcIlJFUE9SVFwiXSA9IDIwXSA9IFwiUkVQT1JUXCI7XG4gICAgTUVUSE9EU1tNRVRIT0RTW1wiTUtBQ1RJVklUWVwiXSA9IDIxXSA9IFwiTUtBQ1RJVklUWVwiO1xuICAgIE1FVEhPRFNbTUVUSE9EU1tcIkNIRUNLT1VUXCJdID0gMjJdID0gXCJDSEVDS09VVFwiO1xuICAgIE1FVEhPRFNbTUVUSE9EU1tcIk1FUkdFXCJdID0gMjNdID0gXCJNRVJHRVwiO1xuICAgIC8qIHVwbnAgKi9cbiAgICBNRVRIT0RTW01FVEhPRFNbXCJNLVNFQVJDSFwiXSA9IDI0XSA9IFwiTS1TRUFSQ0hcIjtcbiAgICBNRVRIT0RTW01FVEhPRFNbXCJOT1RJRllcIl0gPSAyNV0gPSBcIk5PVElGWVwiO1xuICAgIE1FVEhPRFNbTUVUSE9EU1tcIlNVQlNDUklCRVwiXSA9IDI2XSA9IFwiU1VCU0NSSUJFXCI7XG4gICAgTUVUSE9EU1tNRVRIT0RTW1wiVU5TVUJTQ1JJQkVcIl0gPSAyN10gPSBcIlVOU1VCU0NSSUJFXCI7XG4gICAgLyogUkZDLTU3ODkgKi9cbiAgICBNRVRIT0RTW01FVEhPRFNbXCJQQVRDSFwiXSA9IDI4XSA9IFwiUEFUQ0hcIjtcbiAgICBNRVRIT0RTW01FVEhPRFNbXCJQVVJHRVwiXSA9IDI5XSA9IFwiUFVSR0VcIjtcbiAgICAvKiBDYWxEQVYgKi9cbiAgICBNRVRIT0RTW01FVEhPRFNbXCJNS0NBTEVOREFSXCJdID0gMzBdID0gXCJNS0NBTEVOREFSXCI7XG4gICAgLyogUkZDLTIwNjgsIHNlY3Rpb24gMTkuNi4xLjIgKi9cbiAgICBNRVRIT0RTW01FVEhPRFNbXCJMSU5LXCJdID0gMzFdID0gXCJMSU5LXCI7XG4gICAgTUVUSE9EU1tNRVRIT0RTW1wiVU5MSU5LXCJdID0gMzJdID0gXCJVTkxJTktcIjtcbiAgICAvKiBpY2VjYXN0ICovXG4gICAgTUVUSE9EU1tNRVRIT0RTW1wiU09VUkNFXCJdID0gMzNdID0gXCJTT1VSQ0VcIjtcbiAgICAvKiBSRkMtNzU0MCwgc2VjdGlvbiAxMS42ICovXG4gICAgTUVUSE9EU1tNRVRIT0RTW1wiUFJJXCJdID0gMzRdID0gXCJQUklcIjtcbiAgICAvKiBSRkMtMjMyNiBSVFNQICovXG4gICAgTUVUSE9EU1tNRVRIT0RTW1wiREVTQ1JJQkVcIl0gPSAzNV0gPSBcIkRFU0NSSUJFXCI7XG4gICAgTUVUSE9EU1tNRVRIT0RTW1wiQU5OT1VOQ0VcIl0gPSAzNl0gPSBcIkFOTk9VTkNFXCI7XG4gICAgTUVUSE9EU1tNRVRIT0RTW1wiU0VUVVBcIl0gPSAzN10gPSBcIlNFVFVQXCI7XG4gICAgTUVUSE9EU1tNRVRIT0RTW1wiUExBWVwiXSA9IDM4XSA9IFwiUExBWVwiO1xuICAgIE1FVEhPRFNbTUVUSE9EU1tcIlBBVVNFXCJdID0gMzldID0gXCJQQVVTRVwiO1xuICAgIE1FVEhPRFNbTUVUSE9EU1tcIlRFQVJET1dOXCJdID0gNDBdID0gXCJURUFSRE9XTlwiO1xuICAgIE1FVEhPRFNbTUVUSE9EU1tcIkdFVF9QQVJBTUVURVJcIl0gPSA0MV0gPSBcIkdFVF9QQVJBTUVURVJcIjtcbiAgICBNRVRIT0RTW01FVEhPRFNbXCJTRVRfUEFSQU1FVEVSXCJdID0gNDJdID0gXCJTRVRfUEFSQU1FVEVSXCI7XG4gICAgTUVUSE9EU1tNRVRIT0RTW1wiUkVESVJFQ1RcIl0gPSA0M10gPSBcIlJFRElSRUNUXCI7XG4gICAgTUVUSE9EU1tNRVRIT0RTW1wiUkVDT1JEXCJdID0gNDRdID0gXCJSRUNPUkRcIjtcbiAgICAvKiBSQU9QICovXG4gICAgTUVUSE9EU1tNRVRIT0RTW1wiRkxVU0hcIl0gPSA0NV0gPSBcIkZMVVNIXCI7XG59KShNRVRIT0RTID0gZXhwb3J0cy5NRVRIT0RTIHx8IChleHBvcnRzLk1FVEhPRFMgPSB7fSkpO1xuZXhwb3J0cy5NRVRIT0RTX0hUVFAgPSBbXG4gICAgTUVUSE9EUy5ERUxFVEUsXG4gICAgTUVUSE9EUy5HRVQsXG4gICAgTUVUSE9EUy5IRUFELFxuICAgIE1FVEhPRFMuUE9TVCxcbiAgICBNRVRIT0RTLlBVVCxcbiAgICBNRVRIT0RTLkNPTk5FQ1QsXG4gICAgTUVUSE9EUy5PUFRJT05TLFxuICAgIE1FVEhPRFMuVFJBQ0UsXG4gICAgTUVUSE9EUy5DT1BZLFxuICAgIE1FVEhPRFMuTE9DSyxcbiAgICBNRVRIT0RTLk1LQ09MLFxuICAgIE1FVEhPRFMuTU9WRSxcbiAgICBNRVRIT0RTLlBST1BGSU5ELFxuICAgIE1FVEhPRFMuUFJPUFBBVENILFxuICAgIE1FVEhPRFMuU0VBUkNILFxuICAgIE1FVEhPRFMuVU5MT0NLLFxuICAgIE1FVEhPRFMuQklORCxcbiAgICBNRVRIT0RTLlJFQklORCxcbiAgICBNRVRIT0RTLlVOQklORCxcbiAgICBNRVRIT0RTLkFDTCxcbiAgICBNRVRIT0RTLlJFUE9SVCxcbiAgICBNRVRIT0RTLk1LQUNUSVZJVFksXG4gICAgTUVUSE9EUy5DSEVDS09VVCxcbiAgICBNRVRIT0RTLk1FUkdFLFxuICAgIE1FVEhPRFNbJ00tU0VBUkNIJ10sXG4gICAgTUVUSE9EUy5OT1RJRlksXG4gICAgTUVUSE9EUy5TVUJTQ1JJQkUsXG4gICAgTUVUSE9EUy5VTlNVQlNDUklCRSxcbiAgICBNRVRIT0RTLlBBVENILFxuICAgIE1FVEhPRFMuUFVSR0UsXG4gICAgTUVUSE9EUy5NS0NBTEVOREFSLFxuICAgIE1FVEhPRFMuTElOSyxcbiAgICBNRVRIT0RTLlVOTElOSyxcbiAgICBNRVRIT0RTLlBSSSxcbiAgICAvLyBUT0RPKGluZHV0bnkpOiBzaG91bGQgd2UgYWxsb3cgaXQgd2l0aCBIVFRQP1xuICAgIE1FVEhPRFMuU09VUkNFLFxuXTtcbmV4cG9ydHMuTUVUSE9EU19JQ0UgPSBbXG4gICAgTUVUSE9EUy5TT1VSQ0UsXG5dO1xuZXhwb3J0cy5NRVRIT0RTX1JUU1AgPSBbXG4gICAgTUVUSE9EUy5PUFRJT05TLFxuICAgIE1FVEhPRFMuREVTQ1JJQkUsXG4gICAgTUVUSE9EUy5BTk5PVU5DRSxcbiAgICBNRVRIT0RTLlNFVFVQLFxuICAgIE1FVEhPRFMuUExBWSxcbiAgICBNRVRIT0RTLlBBVVNFLFxuICAgIE1FVEhPRFMuVEVBUkRPV04sXG4gICAgTUVUSE9EUy5HRVRfUEFSQU1FVEVSLFxuICAgIE1FVEhPRFMuU0VUX1BBUkFNRVRFUixcbiAgICBNRVRIT0RTLlJFRElSRUNULFxuICAgIE1FVEhPRFMuUkVDT1JELFxuICAgIE1FVEhPRFMuRkxVU0gsXG4gICAgLy8gRm9yIEFpclBsYXlcbiAgICBNRVRIT0RTLkdFVCxcbiAgICBNRVRIT0RTLlBPU1QsXG5dO1xuZXhwb3J0cy5NRVRIT0RfTUFQID0gdXRpbHNfMS5lbnVtVG9NYXAoTUVUSE9EUyk7XG5leHBvcnRzLkhfTUVUSE9EX01BUCA9IHt9O1xuT2JqZWN0LmtleXMoZXhwb3J0cy5NRVRIT0RfTUFQKS5mb3JFYWNoKChrZXkpID0+IHtcbiAgICBpZiAoL15ILy50ZXN0KGtleSkpIHtcbiAgICAgICAgZXhwb3J0cy5IX01FVEhPRF9NQVBba2V5XSA9IGV4cG9ydHMuTUVUSE9EX01BUFtrZXldO1xuICAgIH1cbn0pO1xudmFyIEZJTklTSDtcbihmdW5jdGlvbiAoRklOSVNIKSB7XG4gICAgRklOSVNIW0ZJTklTSFtcIlNBRkVcIl0gPSAwXSA9IFwiU0FGRVwiO1xuICAgIEZJTklTSFtGSU5JU0hbXCJTQUZFX1dJVEhfQ0JcIl0gPSAxXSA9IFwiU0FGRV9XSVRIX0NCXCI7XG4gICAgRklOSVNIW0ZJTklTSFtcIlVOU0FGRVwiXSA9IDJdID0gXCJVTlNBRkVcIjtcbn0pKEZJTklTSCA9IGV4cG9ydHMuRklOSVNIIHx8IChleHBvcnRzLkZJTklTSCA9IHt9KSk7XG5leHBvcnRzLkFMUEhBID0gW107XG5mb3IgKGxldCBpID0gJ0EnLmNoYXJDb2RlQXQoMCk7IGkgPD0gJ1onLmNoYXJDb2RlQXQoMCk7IGkrKykge1xuICAgIC8vIFVwcGVyIGNhc2VcbiAgICBleHBvcnRzLkFMUEhBLnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZShpKSk7XG4gICAgLy8gTG93ZXIgY2FzZVxuICAgIGV4cG9ydHMuQUxQSEEucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlKGkgKyAweDIwKSk7XG59XG5leHBvcnRzLk5VTV9NQVAgPSB7XG4gICAgMDogMCwgMTogMSwgMjogMiwgMzogMywgNDogNCxcbiAgICA1OiA1LCA2OiA2LCA3OiA3LCA4OiA4LCA5OiA5LFxufTtcbmV4cG9ydHMuSEVYX01BUCA9IHtcbiAgICAwOiAwLCAxOiAxLCAyOiAyLCAzOiAzLCA0OiA0LFxuICAgIDU6IDUsIDY6IDYsIDc6IDcsIDg6IDgsIDk6IDksXG4gICAgQTogMFhBLCBCOiAwWEIsIEM6IDBYQywgRDogMFhELCBFOiAwWEUsIEY6IDBYRixcbiAgICBhOiAweGEsIGI6IDB4YiwgYzogMHhjLCBkOiAweGQsIGU6IDB4ZSwgZjogMHhmLFxufTtcbmV4cG9ydHMuTlVNID0gW1xuICAgICcwJywgJzEnLCAnMicsICczJywgJzQnLCAnNScsICc2JywgJzcnLCAnOCcsICc5Jyxcbl07XG5leHBvcnRzLkFMUEhBTlVNID0gZXhwb3J0cy5BTFBIQS5jb25jYXQoZXhwb3J0cy5OVU0pO1xuZXhwb3J0cy5NQVJLID0gWyctJywgJ18nLCAnLicsICchJywgJ34nLCAnKicsICdcXCcnLCAnKCcsICcpJ107XG5leHBvcnRzLlVTRVJJTkZPX0NIQVJTID0gZXhwb3J0cy5BTFBIQU5VTVxuICAgIC5jb25jYXQoZXhwb3J0cy5NQVJLKVxuICAgIC5jb25jYXQoWyclJywgJzsnLCAnOicsICcmJywgJz0nLCAnKycsICckJywgJywnXSk7XG4vLyBUT0RPKGluZHV0bnkpOiB1c2UgUkZDXG5leHBvcnRzLlNUUklDVF9VUkxfQ0hBUiA9IFtcbiAgICAnIScsICdcIicsICckJywgJyUnLCAnJicsICdcXCcnLFxuICAgICcoJywgJyknLCAnKicsICcrJywgJywnLCAnLScsICcuJywgJy8nLFxuICAgICc6JywgJzsnLCAnPCcsICc9JywgJz4nLFxuICAgICdAJywgJ1snLCAnXFxcXCcsICddJywgJ14nLCAnXycsXG4gICAgJ2AnLFxuICAgICd7JywgJ3wnLCAnfScsICd+Jyxcbl0uY29uY2F0KGV4cG9ydHMuQUxQSEFOVU0pO1xuZXhwb3J0cy5VUkxfQ0hBUiA9IGV4cG9ydHMuU1RSSUNUX1VSTF9DSEFSXG4gICAgLmNvbmNhdChbJ1xcdCcsICdcXGYnXSk7XG4vLyBBbGwgY2hhcmFjdGVycyB3aXRoIDB4ODAgYml0IHNldCB0byAxXG5mb3IgKGxldCBpID0gMHg4MDsgaSA8PSAweGZmOyBpKyspIHtcbiAgICBleHBvcnRzLlVSTF9DSEFSLnB1c2goaSk7XG59XG5leHBvcnRzLkhFWCA9IGV4cG9ydHMuTlVNLmNvbmNhdChbJ2EnLCAnYicsICdjJywgJ2QnLCAnZScsICdmJywgJ0EnLCAnQicsICdDJywgJ0QnLCAnRScsICdGJ10pO1xuLyogVG9rZW5zIGFzIGRlZmluZWQgYnkgcmZjIDI2MTYuIEFsc28gbG93ZXJjYXNlcyB0aGVtLlxuICogICAgICAgIHRva2VuICAgICAgID0gMSo8YW55IENIQVIgZXhjZXB0IENUTHMgb3Igc2VwYXJhdG9ycz5cbiAqICAgICBzZXBhcmF0b3JzICAgICA9IFwiKFwiIHwgXCIpXCIgfCBcIjxcIiB8IFwiPlwiIHwgXCJAXCJcbiAqICAgICAgICAgICAgICAgICAgICB8IFwiLFwiIHwgXCI7XCIgfCBcIjpcIiB8IFwiXFxcIiB8IDxcIj5cbiAqICAgICAgICAgICAgICAgICAgICB8IFwiL1wiIHwgXCJbXCIgfCBcIl1cIiB8IFwiP1wiIHwgXCI9XCJcbiAqICAgICAgICAgICAgICAgICAgICB8IFwie1wiIHwgXCJ9XCIgfCBTUCB8IEhUXG4gKi9cbmV4cG9ydHMuU1RSSUNUX1RPS0VOID0gW1xuICAgICchJywgJyMnLCAnJCcsICclJywgJyYnLCAnXFwnJyxcbiAgICAnKicsICcrJywgJy0nLCAnLicsXG4gICAgJ14nLCAnXycsICdgJyxcbiAgICAnfCcsICd+Jyxcbl0uY29uY2F0KGV4cG9ydHMuQUxQSEFOVU0pO1xuZXhwb3J0cy5UT0tFTiA9IGV4cG9ydHMuU1RSSUNUX1RPS0VOLmNvbmNhdChbJyAnXSk7XG4vKlxuICogVmVyaWZ5IHRoYXQgYSBjaGFyIGlzIGEgdmFsaWQgdmlzaWJsZSAocHJpbnRhYmxlKSBVUy1BU0NJSVxuICogY2hhcmFjdGVyIG9yICV4ODAtRkZcbiAqL1xuZXhwb3J0cy5IRUFERVJfQ0hBUlMgPSBbJ1xcdCddO1xuZm9yIChsZXQgaSA9IDMyOyBpIDw9IDI1NTsgaSsrKSB7XG4gICAgaWYgKGkgIT09IDEyNykge1xuICAgICAgICBleHBvcnRzLkhFQURFUl9DSEFSUy5wdXNoKGkpO1xuICAgIH1cbn1cbi8vICcsJyA9IFxceDQ0XG5leHBvcnRzLkNPTk5FQ1RJT05fVE9LRU5fQ0hBUlMgPSBleHBvcnRzLkhFQURFUl9DSEFSUy5maWx0ZXIoKGMpID0+IGMgIT09IDQ0KTtcbmV4cG9ydHMuTUFKT1IgPSBleHBvcnRzLk5VTV9NQVA7XG5leHBvcnRzLk1JTk9SID0gZXhwb3J0cy5NQUpPUjtcbnZhciBIRUFERVJfU1RBVEU7XG4oZnVuY3Rpb24gKEhFQURFUl9TVEFURSkge1xuICAgIEhFQURFUl9TVEFURVtIRUFERVJfU1RBVEVbXCJHRU5FUkFMXCJdID0gMF0gPSBcIkdFTkVSQUxcIjtcbiAgICBIRUFERVJfU1RBVEVbSEVBREVSX1NUQVRFW1wiQ09OTkVDVElPTlwiXSA9IDFdID0gXCJDT05ORUNUSU9OXCI7XG4gICAgSEVBREVSX1NUQVRFW0hFQURFUl9TVEFURVtcIkNPTlRFTlRfTEVOR1RIXCJdID0gMl0gPSBcIkNPTlRFTlRfTEVOR1RIXCI7XG4gICAgSEVBREVSX1NUQVRFW0hFQURFUl9TVEFURVtcIlRSQU5TRkVSX0VOQ09ESU5HXCJdID0gM10gPSBcIlRSQU5TRkVSX0VOQ09ESU5HXCI7XG4gICAgSEVBREVSX1NUQVRFW0hFQURFUl9TVEFURVtcIlVQR1JBREVcIl0gPSA0XSA9IFwiVVBHUkFERVwiO1xuICAgIEhFQURFUl9TVEFURVtIRUFERVJfU1RBVEVbXCJDT05ORUNUSU9OX0tFRVBfQUxJVkVcIl0gPSA1XSA9IFwiQ09OTkVDVElPTl9LRUVQX0FMSVZFXCI7XG4gICAgSEVBREVSX1NUQVRFW0hFQURFUl9TVEFURVtcIkNPTk5FQ1RJT05fQ0xPU0VcIl0gPSA2XSA9IFwiQ09OTkVDVElPTl9DTE9TRVwiO1xuICAgIEhFQURFUl9TVEFURVtIRUFERVJfU1RBVEVbXCJDT05ORUNUSU9OX1VQR1JBREVcIl0gPSA3XSA9IFwiQ09OTkVDVElPTl9VUEdSQURFXCI7XG4gICAgSEVBREVSX1NUQVRFW0hFQURFUl9TVEFURVtcIlRSQU5TRkVSX0VOQ09ESU5HX0NIVU5LRURcIl0gPSA4XSA9IFwiVFJBTlNGRVJfRU5DT0RJTkdfQ0hVTktFRFwiO1xufSkoSEVBREVSX1NUQVRFID0gZXhwb3J0cy5IRUFERVJfU1RBVEUgfHwgKGV4cG9ydHMuSEVBREVSX1NUQVRFID0ge30pKTtcbmV4cG9ydHMuU1BFQ0lBTF9IRUFERVJTID0ge1xuICAgICdjb25uZWN0aW9uJzogSEVBREVSX1NUQVRFLkNPTk5FQ1RJT04sXG4gICAgJ2NvbnRlbnQtbGVuZ3RoJzogSEVBREVSX1NUQVRFLkNPTlRFTlRfTEVOR1RILFxuICAgICdwcm94eS1jb25uZWN0aW9uJzogSEVBREVSX1NUQVRFLkNPTk5FQ1RJT04sXG4gICAgJ3RyYW5zZmVyLWVuY29kaW5nJzogSEVBREVSX1NUQVRFLlRSQU5TRkVSX0VOQ09ESU5HLFxuICAgICd1cGdyYWRlJzogSEVBREVSX1NUQVRFLlVQR1JBREUsXG59O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Y29uc3RhbnRzLmpzLm1hcCIsICIndXNlIHN0cmljdCdcblxuY29uc3QgeyBCdWZmZXIgfSA9IHJlcXVpcmUoJ25vZGU6YnVmZmVyJylcblxubW9kdWxlLmV4cG9ydHMgPSBCdWZmZXIuZnJvbSgnQUdGemJRRUFBQUFCSndkZ0FYOEJmMkFEZjM5L0FYOWdBWDhBWUFKL2Z3QmdCSDkvZjM4QmYyQUFBR0FEZjM5L0FBTExBUWdEWlc1MkdIZGhjMjFmYjI1ZmFHVmhaR1Z5YzE5amIyMXdiR1YwWlFBRUEyVnVkaFYzWVhOdFgyOXVYMjFsYzNOaFoyVmZZbVZuYVc0QUFBTmxibllMZDJGemJWOXZibDkxY213QUFRTmxibllPZDJGemJWOXZibDl6ZEdGMGRYTUFBUU5sYm5ZVWQyRnpiVjl2Ymw5b1pXRmtaWEpmWm1sbGJHUUFBUU5sYm5ZVWQyRnpiVjl2Ymw5b1pXRmtaWEpmZG1Gc2RXVUFBUU5sYm5ZTWQyRnpiVjl2Ymw5aWIyUjVBQUVEWlc1MkdIZGhjMjFmYjI1ZmJXVnpjMkZuWlY5amIyMXdiR1YwWlFBQUF5MHNCUVlBQUFJQUFBQUFBQUFDQVFJQUFnSUNBQUFEQUFBQUFBTURBd01CQVFFQkFRRUJBUUVBQUFJQUFBQUVCUUZ3QVJJU0JRTUJBQUlHQ0FGL0FVR0ExQVFMQjlFRklnWnRaVzF2Y25rQ0FBdGZhVzVwZEdsaGJHbDZaUUFJR1Y5ZmFXNWthWEpsWTNSZlpuVnVZM1JwYjI1ZmRHRmliR1VCQUF0c2JHaDBkSEJmYVc1cGRBQUpHR3hzYUhSMGNGOXphRzkxYkdSZmEyVmxjRjloYkdsMlpRQXZER3hzYUhSMGNGOWhiR3h2WXdBTEJtMWhiR3h2WXdBeEMyeHNhSFIwY0Y5bWNtVmxBQXdFWm5KbFpRQU1EMnhzYUhSMGNGOW5aWFJmZEhsd1pRQU5GV3hzYUhSMGNGOW5aWFJmYUhSMGNGOXRZV3B2Y2dBT0ZXeHNhSFIwY0Y5blpYUmZhSFIwY0Y5dGFXNXZjZ0FQRVd4c2FIUjBjRjluWlhSZmJXVjBhRzlrQUJBV2JHeG9kSFJ3WDJkbGRGOXpkR0YwZFhOZlkyOWtaUUFSRW14c2FIUjBjRjluWlhSZmRYQm5jbUZrWlFBU0RHeHNhSFIwY0Y5eVpYTmxkQUFURG14c2FIUjBjRjlsZUdWamRYUmxBQlFVYkd4b2RIUndYM05sZEhScGJtZHpYMmx1YVhRQUZRMXNiR2gwZEhCZlptbHVhWE5vQUJZTWJHeG9kSFJ3WDNCaGRYTmxBQmNOYkd4b2RIUndYM0psYzNWdFpRQVlHMnhzYUhSMGNGOXlaWE4xYldWZllXWjBaWEpmZFhCbmNtRmtaUUFaRUd4c2FIUjBjRjluWlhSZlpYSnlibThBR2hkc2JHaDBkSEJmWjJWMFgyVnljbTl5WDNKbFlYTnZiZ0FiRjJ4c2FIUjBjRjl6WlhSZlpYSnliM0pmY21WaGMyOXVBQndVYkd4b2RIUndYMmRsZEY5bGNuSnZjbDl3YjNNQUhSRnNiR2gwZEhCZlpYSnlibTlmYm1GdFpRQWVFbXhzYUhSMGNGOXRaWFJvYjJSZmJtRnRaUUFmRW14c2FIUjBjRjl6ZEdGMGRYTmZibUZ0WlFBZ0dteHNhSFIwY0Y5elpYUmZiR1Z1YVdWdWRGOW9aV0ZrWlhKekFDRWhiR3hvZEhSd1gzTmxkRjlzWlc1cFpXNTBYMk5vZFc1clpXUmZiR1Z1WjNSb0FDSWRiR3hvZEhSd1gzTmxkRjlzWlc1cFpXNTBYMnRsWlhCZllXeHBkbVVBSXlSc2JHaDBkSEJmYzJWMFgyeGxibWxsYm5SZmRISmhibk5tWlhKZlpXNWpiMlJwYm1jQUpCaHNiR2gwZEhCZmJXVnpjMkZuWlY5dVpXVmtjMTlsYjJZQUxna1hBUUJCQVFzUkFRSURCQVVLQmdjckxTd3FLU2dsSnlZSzA3TUNMQllBUVlqUUFDZ0NBQVJBQUF0QmlOQUFRUUUyQWdBTEZBQWdBQkF3SUFBZ0FqWUNPQ0FBSUFFNkFDZ0xGQUFnQUNBQUx3RXlJQUF0QUM0Z0FCQXZFQUFMSGdFQmYwSEFBQkF5SWdFUU1DQUJRWUFJTmdJNElBRWdBRG9BS0NBQkM0OE1BUWQvQWtBZ0FFVU5BQ0FBUVFocklnRWdBRUVFYXlnQ0FDSUFRWGh4SWdScUlRVUNRQ0FBUVFGeERRQWdBRUVEY1VVTkFTQUJJQUVvQWdBaUFHc2lBVUdjMEFBb0FnQkpEUUVnQUNBRWFpRUVBa0FDUUVHZzBBQW9BZ0FnQVVjRVFDQUFRZjhCVFFSQUlBQkJBM1loQXlBQktBSUlJZ0FnQVNnQ0RDSUNSZ1JBUVl6UUFFR00wQUFvQWdCQmZpQURkM0UyQWdBTUJRc2dBaUFBTmdJSUlBQWdBallDREF3RUN5QUJLQUlZSVFZZ0FTQUJLQUlNSWdCSEJFQWdBQ0FCS0FJSUlnSTJBZ2dnQWlBQU5nSU1EQU1MSUFGQkZHb2lBeWdDQUNJQ1JRUkFJQUVvQWhBaUFrVU5BaUFCUVJCcUlRTUxBMEFnQXlFSElBSWlBRUVVYWlJREtBSUFJZ0lOQUNBQVFSQnFJUU1nQUNnQ0VDSUNEUUFMSUFkQkFEWUNBQXdDQ3lBRktBSUVJZ0JCQTNGQkEwY05BaUFGSUFCQmZuRTJBZ1JCbE5BQUlBUTJBZ0FnQlNBRU5nSUFJQUVnQkVFQmNqWUNCQXdEQzBFQUlRQUxJQVpGRFFBQ1FDQUJLQUljSWdKQkFuUkJ2TklBYWlJREtBSUFJQUZHQkVBZ0F5QUFOZ0lBSUFBTkFVR1EwQUJCa05BQUtBSUFRWDRnQW5keE5nSUFEQUlMSUFaQkVFRVVJQVlvQWhBZ0FVWWJhaUFBTmdJQUlBQkZEUUVMSUFBZ0JqWUNHQ0FCS0FJUUlnSUVRQ0FBSUFJMkFoQWdBaUFBTmdJWUN5QUJRUlJxS0FJQUlnSkZEUUFnQUVFVWFpQUNOZ0lBSUFJZ0FEWUNHQXNnQVNBRlR3MEFJQVVvQWdRaUFFRUJjVVVOQUFKQUFrQUNRQUpBSUFCQkFuRkZCRUJCcE5BQUtBSUFJQVZHQkVCQnBOQUFJQUUyQWdCQm1OQUFRWmpRQUNnQ0FDQUVhaUlBTmdJQUlBRWdBRUVCY2pZQ0JDQUJRYURRQUNnQ0FFY05Ca0dVMEFCQkFEWUNBRUdnMEFCQkFEWUNBQXdHQzBHZzBBQW9BZ0FnQlVZRVFFR2cwQUFnQVRZQ0FFR1UwQUJCbE5BQUtBSUFJQVJxSWdBMkFnQWdBU0FBUVFGeU5nSUVJQUFnQVdvZ0FEWUNBQXdHQ3lBQVFYaHhJQVJxSVFRZ0FFSC9BVTBFUUNBQVFRTjJJUU1nQlNnQ0NDSUFJQVVvQWd3aUFrWUVRRUdNMEFCQmpOQUFLQUlBUVg0Z0EzZHhOZ0lBREFVTElBSWdBRFlDQ0NBQUlBSTJBZ3dNQkFzZ0JTZ0NHQ0VHSUFVZ0JTZ0NEQ0lBUndSQVFaelFBQ2dDQUJvZ0FDQUZLQUlJSWdJMkFnZ2dBaUFBTmdJTURBTUxJQVZCRkdvaUF5Z0NBQ0lDUlFSQUlBVW9BaEFpQWtVTkFpQUZRUkJxSVFNTEEwQWdBeUVISUFJaUFFRVVhaUlES0FJQUlnSU5BQ0FBUVJCcUlRTWdBQ2dDRUNJQ0RRQUxJQWRCQURZQ0FBd0NDeUFGSUFCQmZuRTJBZ1FnQVNBRWFpQUVOZ0lBSUFFZ0JFRUJjallDQkF3REMwRUFJUUFMSUFaRkRRQUNRQ0FGS0FJY0lnSkJBblJCdk5JQWFpSURLQUlBSUFWR0JFQWdBeUFBTmdJQUlBQU5BVUdRMEFCQmtOQUFLQUlBUVg0Z0FuZHhOZ0lBREFJTElBWkJFRUVVSUFZb0FoQWdCVVliYWlBQU5nSUFJQUJGRFFFTElBQWdCallDR0NBRktBSVFJZ0lFUUNBQUlBSTJBaEFnQWlBQU5nSVlDeUFGUVJScUtBSUFJZ0pGRFFBZ0FFRVVhaUFDTmdJQUlBSWdBRFlDR0FzZ0FTQUVhaUFFTmdJQUlBRWdCRUVCY2pZQ0JDQUJRYURRQUNnQ0FFY05BRUdVMEFBZ0JEWUNBQXdCQ3lBRVFmOEJUUVJBSUFSQmVIRkJ0TkFBYWlFQUFuOUJqTkFBS0FJQUlnSkJBU0FFUVFOMmRDSURjVVVFUUVHTTBBQWdBaUFEY2pZQ0FDQUFEQUVMSUFBb0FnZ0xJZ0lnQVRZQ0RDQUFJQUUyQWdnZ0FTQUFOZ0lNSUFFZ0FqWUNDQXdCQzBFZklRSWdCRUgvLy84SFRRUkFJQVJCSmlBRVFRaDJaeUlBYTNaQkFYRWdBRUVCZEd0QlBtb2hBZ3NnQVNBQ05nSWNJQUZDQURjQ0VDQUNRUUowUWJ6U0FHb2hBQUpBUVpEUUFDZ0NBQ0lEUVFFZ0FuUWlCM0ZGQkVBZ0FDQUJOZ0lBUVpEUUFDQURJQWR5TmdJQUlBRWdBRFlDR0NBQklBRTJBZ2dnQVNBQk5nSU1EQUVMSUFSQkdTQUNRUUYyYTBFQUlBSkJIMGNiZENFQ0lBQW9BZ0FoQUFKQUEwQWdBQ0lES0FJRVFYaHhJQVJHRFFFZ0FrRWRkaUVBSUFKQkFYUWhBaUFESUFCQkJIRnFRUkJxSWdjb0FnQWlBQTBBQ3lBSElBRTJBZ0FnQVNBRE5nSVlJQUVnQVRZQ0RDQUJJQUUyQWdnTUFRc2dBeWdDQ0NJQUlBRTJBZ3dnQXlBQk5nSUlJQUZCQURZQ0dDQUJJQU0yQWd3Z0FTQUFOZ0lJQzBHczBBQkJyTkFBS0FJQVFRRnJJZ0JCZnlBQUd6WUNBQXNMQndBZ0FDMEFLQXNIQUNBQUxRQXFDd2NBSUFBdEFDc0xCd0FnQUMwQUtRc0hBQ0FBTHdFeUN3Y0FJQUF0QUM0TFFBRUVmeUFBS0FJWUlRRWdBQzBBTFNFQ0lBQXRBQ2doQXlBQUtBSTRJUVFnQUJBd0lBQWdCRFlDT0NBQUlBTTZBQ2dnQUNBQ09nQXRJQUFnQVRZQ0dBdTc0Z0VDQjM4RGZpQUJJQUpxSVFRQ1FDQUFJZ0lvQWd3aUFBMEFJQUlvQWdRRVFDQUNJQUUyQWdRTEl3QkJFR3NpQ0NRQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDZndKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUlBSW9BaHdpQTBFQmF3N2RBZG9CQWRrQkFnTUVCUVlIQ0FrS0N3d05EdGdCRHhEWEFSRVMxZ0VURkJVV0Z4Z1pHaHZnQWQ4QkhCMGUxUUVmSUNFaUl5UWwxQUVtSnlncEtpc3Mwd0hTQVMwdTBRSFFBUzh3TVRJek5EVTJOemc1T2pzOFBUNC9RRUZDUTBSRlJ0c0JSMGhKU3M4QnpnRkx6UUZNekFGTlRrOVFVVkpUVkZWV1YxaFpXbHRjWFY1ZllHRmlZMlJsWm1kb2FXcHJiRzF1YjNCeGNuTjBkWFozZUhsNmUzeDlmbitBQVlFQmdnR0RBWVFCaFFHR0FZY0JpQUdKQVlvQml3R01BWTBCamdHUEFaQUJrUUdTQVpNQmxBR1ZBWllCbHdHWUFaa0JtZ0diQVp3Qm5RR2VBWjhCb0FHaEFhSUJvd0drQWFVQnBnR25BYWdCcVFHcUFhc0JyQUd0QWE0QnJ3R3dBYkVCc2dHekFiUUJ0UUcyQWJjQnl3SEtBYmdCeVFHNUFjZ0J1Z0c3QWJ3QnZRRytBYjhCd0FIQkFjSUJ3d0hFQWNVQnhnRUEzQUVMUVFBTXhnRUxRUTRNeFFFTFFRME14QUVMUVE4TXd3RUxRUkFNd2dFTFFSTU13UUVMUVJRTXdBRUxRUlVNdndFTFFSWU12Z0VMUVJnTXZRRUxRUmtNdkFFTFFSb011d0VMUVJzTXVnRUxRUndNdVFFTFFSME11QUVMUVFnTXR3RUxRUjRNdGdFTFFTQU10UUVMUVI4TXRBRUxRUWNNc3dFTFFTRU1zZ0VMUVNJTXNRRUxRU01Nc0FFTFFTUU1yd0VMUVJJTXJnRUxRUkVNclFFTFFTVU1yQUVMUVNZTXF3RUxRU2NNcWdFTFFTZ01xUUVMUWNNQkRLZ0JDMEVxREtjQkMwRXJES1lCQzBFc0RLVUJDMEV0REtRQkMwRXVES01CQzBFdkRLSUJDMEhFQVF5aEFRdEJNQXlnQVF0Qk5BeWZBUXRCREF5ZUFRdEJNUXlkQVF0Qk1neWNBUXRCTXd5YkFRdEJPUXlhQVF0Qk5ReVpBUXRCeFFFTW1BRUxRUXNNbHdFTFFUb01sZ0VMUVRZTWxRRUxRUW9NbEFFTFFUY01rd0VMUVRnTWtnRUxRVHdNa1FFTFFUc01rQUVMUVQwTWp3RUxRUWtNamdFTFFTa01qUUVMUVQ0TWpBRUxRVDhNaXdFTFFjQUFESW9CQzBIQkFBeUpBUXRCd2dBTWlBRUxRY01BREljQkMwSEVBQXlHQVF0QnhRQU1oUUVMUWNZQURJUUJDMEVYRElNQkMwSEhBQXlDQVF0QnlBQU1nUUVMUWNrQURJQUJDMEhLQUF4L0MwSExBQXgrQzBITkFBeDlDMEhNQUF4OEMwSE9BQXg3QzBIUEFBeDZDMEhRQUF4NUMwSFJBQXg0QzBIU0FBeDNDMEhUQUF4MkMwSFVBQXgxQzBIV0FBeDBDMEhWQUF4ekMwRUdESElMUWRjQURIRUxRUVVNY0F0QjJBQU1id3RCQkF4dUMwSFpBQXh0QzBIYUFBeHNDMEhiQUF4ckMwSGNBQXhxQzBFRERHa0xRZDBBREdnTFFkNEFER2NMUWQ4QURHWUxRZUVBREdVTFFlQUFER1FMUWVJQURHTUxRZU1BREdJTFFRSU1ZUXRCNUFBTVlBdEI1UUFNWHd0QjVnQU1YZ3RCNXdBTVhRdEI2QUFNWEF0QjZRQU1Xd3RCNmdBTVdndEI2d0FNV1F0QjdBQU1XQXRCN1FBTVZ3dEI3Z0FNVmd0Qjd3QU1WUXRCOEFBTVZBdEI4UUFNVXd0QjhnQU1VZ3RCOHdBTVVRdEI5QUFNVUF0QjlRQU1Ud3RCOWdBTVRndEI5d0FNVFF0QitBQU1UQXRCK1FBTVN3dEIrZ0FNU2d0Qit3QU1TUXRCL0FBTVNBdEIvUUFNUnd0Qi9nQU1SZ3RCL3dBTVJRdEJnQUVNUkF0QmdRRU1Rd3RCZ2dFTVFndEJnd0VNUVF0QmhBRU1RQXRCaFFFTVB3dEJoZ0VNUGd0Qmh3RU1QUXRCaUFFTVBBdEJpUUVNT3d0QmlnRU1PZ3RCaXdFTU9RdEJqQUVNT0F0QmpRRU1Od3RCamdFTU5ndEJqd0VNTlF0QmtBRU1OQXRCa1FFTU13dEJrZ0VNTWd0Qmt3RU1NUXRCbEFFTU1BdEJsUUVNTHd0QmxnRU1MZ3RCbHdFTUxRdEJtQUVNTEF0Qm1RRU1Ld3RCbWdFTUtndEJtd0VNS1F0Qm5BRU1LQXRCblFFTUp3dEJuZ0VNSmd0Qm53RU1KUXRCb0FFTUpBdEJvUUVNSXd0Qm9nRU1JZ3RCb3dFTUlRdEJwQUVNSUF0QnBRRU1Id3RCcGdFTUhndEJwd0VNSFF0QnFBRU1IQXRCcVFFTUd3dEJxZ0VNR2d0QnF3RU1HUXRCckFFTUdBdEJyUUVNRnd0QnJnRU1GZ3RCQVF3VkMwR3ZBUXdVQzBHd0FRd1RDMEd4QVF3U0MwR3pBUXdSQzBHeUFRd1FDMEcwQVF3UEMwRzFBUXdPQzBHMkFRd05DMEczQVF3TUMwRzRBUXdMQzBHNUFRd0tDMEc2QVF3SkMwRzdBUXdJQzBIR0FRd0hDMEc4QVF3R0MwRzlBUXdGQzBHK0FRd0VDMEcvQVF3REMwSEFBUXdDQzBIQ0FRd0JDMEhCQVFzaEF3TkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFJQUlDZndKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUovQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FnQWdKL0FrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDZndKQUFrQUNmd0pBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDZndKQUFrQUNRQUpBQW44Q1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FDQUREc1lCQUFFQ0F3UUZCZ2NJQ1FvTERBME9EeEFSRWhNVUZSWVhHQmthR3h3ZEh5QWhJeVVtS0NvckxDOHdNVEl6TkRVMk56azZPenc5bEFOQVFrUkZSa2xMVGs5UVVWSlRWRlZXV0ZwYlhGMWVYMkJoWW1Oa1pXWm5hR3BzYjNCeGMzVjJlSGw2ZTN4L2dBR0JBWUlCZ3dHRUFZVUJoZ0dIQVlnQmlRR0tBWXNCakFHTkFZNEJqd0dRQVpFQmtnR1RBWlFCbFFHV0FaY0JtQUdaQVpvQm13R2NBWjBCbmdHZkFhQUJvUUdpQWFNQnBBR2xBYVlCcHdHb0Fha0JxZ0dyQWF3QnJRR3VBYThCc0FHeEFiSUJzd0cwQWJVQnRnRzNBYmdCdVFHNkFic0J2QUc5QWI0QnZ3SEFBY0VCd2dIREFjUUJ4UUhHQWNjQnlBSEpBY3NCekFITkFjNEJ6d0dLQTRrRGlBT0hBNFFEZ3dPQUEvc0MrZ0w1QXZnQzl3TDBBdk1DOGdMTEFzRUNzQUxaQVFzZ0FTQUVSdzN3QWtIZEFTRURETE1EQ3lBQklBUkhEY2dCUWNNQklRTU1zZ01MSUFFZ0JFY05lMEgzQUNFRERMRURDeUFCSUFSSERYQkI3d0FoQXd5d0F3c2dBU0FFUncxcFFlb0FJUU1NcndNTElBRWdCRWNOWlVIb0FDRURESzREQ3lBQklBUkhEV0pCNWdBaEF3eXRBd3NnQVNBRVJ3MGFRUmdoQXd5c0F3c2dBU0FFUncwVlFSSWhBd3lyQXdzZ0FTQUVSdzFDUWNVQUlRTU1xZ01MSUFFZ0JFY05ORUUvSVFNTXFRTUxJQUVnQkVjTk1rRThJUU1NcUFNTElBRWdCRWNOSzBFeElRTU1wd01MSUFJdEFDNUJBVVlObndNTXdRSUxRUUFoQUFKQUFrQUNRQ0FDTFFBcVJRMEFJQUl0QUN0RkRRQWdBaThCTUNJRFFRSnhSUTBCREFJTElBSXZBVEFpQTBFQmNVVU5BUXRCQVNFQUlBSXRBQ2hCQVVZTkFDQUNMd0V5SWdWQjVBQnJRZVFBU1EwQUlBVkJ6QUZHRFFBZ0JVR3dBa1lOQUNBRFFjQUFjUTBBUVFBaEFDQURRWWdFY1VHQUJFWU5BQ0FEUVNoeFFRQkhJUUFMSUFKQkFEc0JNQ0FDUVFBNkFDOGdBRVVOM3dJZ0FrSUFOd01nRE9BQ0MwRUFJUUFDUUNBQ0tBSTRJZ05GRFFBZ0F5Z0NMQ0lEUlEwQUlBSWdBeEVBQUNFQUN5QUFSUTNNQVNBQVFSVkhEZDBDSUFKQkJEWUNIQ0FDSUFFMkFoUWdBa0d3R0RZQ0VDQUNRUlUyQWd4QkFDRURES1FEQ3lBQklBUkdCRUJCQmlFRERLUURDeUFCUVFGcUlRRkJBQ0VBQWtBZ0FpZ0NPQ0lEUlEwQUlBTW9BbFFpQTBVTkFDQUNJQU1SQUFBaEFBc2dBQTNaQWd3Y0N5QUNRZ0EzQXlCQkVpRURESWtEQ3lBQklBUkhEUlpCSFNFRERLRURDeUFCSUFSSEJFQWdBVUVCYWlFQlFSQWhBd3lJQXd0QkJ5RURES0FEQ3lBQ0lBSXBBeUFpQ2lBRUlBRnJyU0lMZlNJTVFnQWdDaUFNV2hzM0F5QWdDaUFMV0EzVUFrRUlJUU1NbndNTElBRWdCRWNFUUNBQ1FRazJBZ2dnQWlBQk5nSUVRUlFoQXd5R0F3dEJDU0VEREo0REN5QUNLUU1nUWdCU0RjY0JJQUlnQWk4Qk1FR0FBWEk3QVRBTVFnc2dBU0FFUncwL1FkQUFJUU1NbkFNTElBRWdCRVlFUUVFTElRTU1uQU1MSUFGQkFXb2hBVUVBSVFBQ1FDQUNLQUk0SWdORkRRQWdBeWdDVUNJRFJRMEFJQUlnQXhFQUFDRUFDeUFBRGM4Q0RNWUJDMEVBSVFBQ1FDQUNLQUk0SWdORkRRQWdBeWdDU0NJRFJRMEFJQUlnQXhFQUFDRUFDeUFBUlEzR0FTQUFRUlZIRGMwQ0lBSkJDellDSENBQ0lBRTJBaFFnQWtHQ0dUWUNFQ0FDUVJVMkFneEJBQ0VEREpvREMwRUFJUUFDUUNBQ0tBSTRJZ05GRFFBZ0F5Z0NTQ0lEUlEwQUlBSWdBeEVBQUNFQUN5QUFSUTBNSUFCQkZVY055Z0lnQWtFYU5nSWNJQUlnQVRZQ0ZDQUNRWUlaTmdJUUlBSkJGVFlDREVFQUlRTU1tUU1MUVFBaEFBSkFJQUlvQWpnaUEwVU5BQ0FES0FKTUlnTkZEUUFnQWlBREVRQUFJUUFMSUFCRkRjUUJJQUJCRlVjTnh3SWdBa0VMTmdJY0lBSWdBVFlDRkNBQ1FaRVhOZ0lRSUFKQkZUWUNERUVBSVFNTW1BTUxJQUVnQkVZRVFFRVBJUU1NbUFNTElBRXRBQUFpQUVFN1JnMEhJQUJCRFVjTnhBSWdBVUVCYWlFQkRNTUJDMEVBSVFBQ1FDQUNLQUk0SWdORkRRQWdBeWdDVENJRFJRMEFJQUlnQXhFQUFDRUFDeUFBUlEzREFTQUFRUlZIRGNJQ0lBSkJEellDSENBQ0lBRTJBaFFnQWtHUkZ6WUNFQ0FDUVJVMkFneEJBQ0VEREpZREN3TkFJQUV0QUFCQjhEVnFMUUFBSWdCQkFVY0VRQ0FBUVFKSERjRUNJQUlvQWdRaEFFRUFJUU1nQWtFQU5nSUVJQUlnQUNBQlFRRnFJZ0VRTFNJQURjSUNETVVCQ3lBRUlBRkJBV29pQVVjTkFBdEJFaUVEREpVREMwRUFJUUFDUUNBQ0tBSTRJZ05GRFFBZ0F5Z0NUQ0lEUlEwQUlBSWdBeEVBQUNFQUN5QUFSUTNGQVNBQVFSVkhEYjBDSUFKQkd6WUNIQ0FDSUFFMkFoUWdBa0dSRnpZQ0VDQUNRUlUyQWd4QkFDRURESlFEQ3lBQklBUkdCRUJCRmlFRERKUURDeUFDUVFvMkFnZ2dBaUFCTmdJRVFRQWhBQUpBSUFJb0FqZ2lBMFVOQUNBREtBSklJZ05GRFFBZ0FpQURFUUFBSVFBTElBQkZEY0lCSUFCQkZVY051UUlnQWtFVk5nSWNJQUlnQVRZQ0ZDQUNRWUlaTmdJUUlBSkJGVFlDREVFQUlRTU1rd01MSUFFZ0JFY0VRQU5BSUFFdEFBQkI4RGRxTFFBQUlnQkJBa2NFUUFKQUlBQkJBV3NPQk1RQ3ZRSUF2Z0s5QWdzZ0FVRUJhaUVCUVFnaEF3ejhBZ3NnQkNBQlFRRnFJZ0ZIRFFBTFFSVWhBd3lUQXd0QkZTRURESklEQ3dOQUlBRXRBQUJCOERscUxRQUFJZ0JCQWtjRVFDQUFRUUZyRGdURkFyY0N3d0s0QXJjQ0N5QUVJQUZCQVdvaUFVY05BQXRCR0NFRERKRURDeUFCSUFSSEJFQWdBa0VMTmdJSUlBSWdBVFlDQkVFSElRTU0rQUlMUVJraEF3eVFBd3NnQVVFQmFpRUJEQUlMSUFFZ0JFWUVRRUVhSVFNTWp3TUxBa0FnQVMwQUFFRU5hdzRVdFFHL0FiOEJ2d0cvQWI4QnZ3Ry9BYjhCdndHL0FiOEJ2d0cvQWI4QnZ3Ry9BYjhCdndFQXZ3RUxRUUFoQXlBQ1FRQTJBaHdnQWtHdkN6WUNFQ0FDUVFJMkFnd2dBaUFCUVFGcU5nSVVESTREQ3lBQklBUkdCRUJCR3lFRERJNERDeUFCTFFBQUlnQkJPMGNFUUNBQVFRMUhEYkVDSUFGQkFXb2hBUXk2QVFzZ0FVRUJhaUVCQzBFaUlRTU04d0lMSUFFZ0JFWUVRRUVjSVFNTWpBTUxRZ0FoQ2dKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQWdBUzBBQUVFd2F3NDN3UUxBQWdBQkFnTUVCUVlIMEFIUUFkQUIwQUhRQWRBQjBBRUlDUW9MREEzUUFkQUIwQUhRQWRBQjBBSFFBZEFCMEFIUUFkQUIwQUhRQWRBQjBBSFFBZEFCMEFIUUFkQUIwQUhRQWRBQjBBSFFBZEFCRGc4UUVSSVQwQUVMUWdJaENnekFBZ3RDQXlFS0RMOENDMElFSVFvTXZnSUxRZ1VoQ2d5OUFndENCaUVLREx3Q0MwSUhJUW9NdXdJTFFnZ2hDZ3k2QWd0Q0NTRUtETGtDQzBJS0lRb011QUlMUWdzaENneTNBZ3RDRENFS0RMWUNDMElOSVFvTXRRSUxRZzRoQ2d5MEFndENEeUVLRExNQ0MwSUtJUW9Nc2dJTFFnc2hDZ3l4QWd0Q0RDRUtETEFDQzBJTklRb01yd0lMUWc0aENneXVBZ3RDRHlFS0RLMENDMElBSVFvQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFJQUV0QUFCQk1Hc09OOEFDdndJQUFRSURCQVVHQjc0Q3ZnSytBcjRDdmdLK0FyNENDQWtLQ3d3TnZnSytBcjRDdmdLK0FyNEN2Z0srQXI0Q3ZnSytBcjRDdmdLK0FyNEN2Z0srQXI0Q3ZnSytBcjRDdmdLK0FyNEN2Z0srQWc0UEVCRVNFNzRDQzBJQ0lRb012d0lMUWdNaENneStBZ3RDQkNFS0RMMENDMElGSVFvTXZBSUxRZ1loQ2d5N0FndENCeUVLRExvQ0MwSUlJUW9NdVFJTFFna2hDZ3k0QWd0Q0NpRUtETGNDQzBJTElRb010Z0lMUWd3aENneTFBZ3RDRFNFS0RMUUNDMElPSVFvTXN3SUxRZzhoQ2d5eUFndENDaUVLRExFQ0MwSUxJUW9Nc0FJTFFnd2hDZ3l2QWd0Q0RTRUtESzRDQzBJT0lRb01yUUlMUWc4aENneXNBZ3NnQWlBQ0tRTWdJZ29nQkNBQmE2MGlDMzBpREVJQUlBb2dERm9iTndNZ0lBb2dDMWdOcHdKQkh5RURESWtEQ3lBQklBUkhCRUFnQWtFSk5nSUlJQUlnQVRZQ0JFRWxJUU1NOEFJTFFTQWhBd3lJQXd0QkFTRUZJQUl2QVRBaUEwRUljVVVFUUNBQ0tRTWdRZ0JTSVFVTEFrQWdBaTBBTGdSQVFRRWhBQ0FDTFFBcFFRVkdEUUVnQTBIQUFIRkZJQVZ4UlEwQkMwRUFJUUFnQTBIQUFIRU5BRUVDSVFBZ0EwRUljUTBBSUFOQmdBUnhCRUFDUUNBQ0xRQW9RUUZIRFFBZ0FpMEFMVUVLY1EwQVFRVWhBQXdDQzBFRUlRQU1BUXNnQTBFZ2NVVUVRQUpBSUFJdEFDaEJBVVlOQUNBQ0x3RXlJZ0JCNUFCclFlUUFTUTBBSUFCQnpBRkdEUUFnQUVHd0FrWU5BRUVFSVFBZ0EwRW9jVVVOQWlBRFFZZ0VjVUdBQkVZTkFndEJBQ0VBREFFTFFRQkJBeUFDS1FNZ1VCc2hBQXNnQUVFQmF3NEZ2Z0lBc0FFQnBBS2hBZ3RCRVNFRERPMENDeUFDUVFFNkFDOE1oQU1MSUFFZ0JFY05uUUpCSkNFRERJUURDeUFCSUFSSERSeEJ4Z0FoQXd5REF3dEJBQ0VBQWtBZ0FpZ0NPQ0lEUlEwQUlBTW9Ba1FpQTBVTkFDQUNJQU1SQUFBaEFBc2dBRVVOSnlBQVFSVkhEWmdDSUFKQjBBQTJBaHdnQWlBQk5nSVVJQUpCa1JnMkFoQWdBa0VWTmdJTVFRQWhBd3lDQXdzZ0FTQUVSZ1JBUVNnaEF3eUNBd3RCQUNFRElBSkJBRFlDQkNBQ1FRdzJBZ2dnQWlBQklBRVFLaUlBUlEyVUFpQUNRU2MyQWh3Z0FpQUJOZ0lVSUFJZ0FEWUNEQXlCQXdzZ0FTQUVSZ1JBUVNraEF3eUJBd3NnQVMwQUFDSUFRU0JHRFJNZ0FFRUpSdzJWQWlBQlFRRnFJUUVNRkFzZ0FTQUVSd1JBSUFGQkFXb2hBUXdXQzBFcUlRTU0vd0lMSUFFZ0JFWUVRRUVySVFNTS93SUxJQUV0QUFBaUFFRUpSeUFBUVNCSGNRMlFBaUFDTFFBc1FRaEhEZDBDSUFKQkFEb0FMQXpkQWdzZ0FTQUVSZ1JBUVN3aEF3eitBZ3NnQVMwQUFFRUtSdzJPQWlBQlFRRnFJUUVNc0FFTElBRWdCRWNOaWdKQkx5RUREUHdDQ3dOQUlBRXRBQUFpQUVFZ1J3UkFJQUJCQ21zT0JJUUNpQUtJQW9RQ2hnSUxJQVFnQVVFQmFpSUJSdzBBQzBFeElRTU0rd0lMUVRJaEF5QUJJQVJHRGZvQ0lBSW9BZ0FpQUNBRUlBRnJhaUVISUFFZ0FHdEJBMm9oQmdKQUEwQWdBRUh3TzJvdEFBQWdBUzBBQUNJRlFTQnlJQVVnQlVIQkFHdEIvd0Z4UVJwSkcwSC9BWEZIRFFFZ0FFRURSZ1JBUVFZaEFRemlBZ3NnQUVFQmFpRUFJQVFnQVVFQmFpSUJSdzBBQ3lBQ0lBYzJBZ0FNK3dJTElBSkJBRFlDQUF5R0FndEJNeUVESUFRZ0FTSUFSZzM1QWlBRUlBRnJJQUlvQWdBaUFXb2hCeUFBSUFGclFRaHFJUVlDUUFOQUlBRkI5RHRxTFFBQUlBQXRBQUFpQlVFZ2NpQUZJQVZCd1FCclFmOEJjVUVhU1J0Qi93RnhSdzBCSUFGQkNFWUVRRUVGSVFFTTRRSUxJQUZCQVdvaEFTQUVJQUJCQVdvaUFFY05BQXNnQWlBSE5nSUFEUG9DQ3lBQ1FRQTJBZ0FnQUNFQkRJVUNDMEUwSVFNZ0JDQUJJZ0JHRGZnQ0lBUWdBV3NnQWlnQ0FDSUJhaUVISUFBZ0FXdEJCV29oQmdKQUEwQWdBVUhRd2dCcUxRQUFJQUF0QUFBaUJVRWdjaUFGSUFWQndRQnJRZjhCY1VFYVNSdEIvd0Z4UncwQklBRkJCVVlFUUVFSElRRU00QUlMSUFGQkFXb2hBU0FFSUFCQkFXb2lBRWNOQUFzZ0FpQUhOZ0lBRFBrQ0N5QUNRUUEyQWdBZ0FDRUJESVFDQ3lBQklBUkhCRUFEUUNBQkxRQUFRWUErYWkwQUFDSUFRUUZIQkVBZ0FFRUNSZzBKRElFQ0N5QUVJQUZCQVdvaUFVY05BQXRCTUNFRERQZ0NDMEV3SVFNTTl3SUxJQUVnQkVjRVFBTkFJQUV0QUFBaUFFRWdSd1JBSUFCQkNtc09CUDhCL2dIK0FmOEIvZ0VMSUFRZ0FVRUJhaUlCUncwQUMwRTRJUU1NOXdJTFFUZ2hBd3oyQWdzRFFDQUJMUUFBSWdCQklFY2dBRUVKUjNFTjlnRWdCQ0FCUVFGcUlnRkhEUUFMUVR3aEF3ejFBZ3NEUUNBQkxRQUFJZ0JCSUVjRVFBSkFJQUJCQ21zT0JQa0JCQVQ1QVFBTElBQkJMRVlOOVFFTUF3c2dCQ0FCUVFGcUlnRkhEUUFMUVQ4aEF3ejBBZ3RCd0FBaEF5QUJJQVJHRGZNQ0lBSW9BZ0FpQUNBRUlBRnJhaUVGSUFFZ0FHdEJCbW9oQmdKQUEwQWdBRUdBUUdzdEFBQWdBUzBBQUVFZ2NrY05BU0FBUVFaR0Rkc0NJQUJCQVdvaEFDQUVJQUZCQVdvaUFVY05BQXNnQWlBRk5nSUFEUFFDQ3lBQ1FRQTJBZ0FMUVRZaEF3elpBZ3NnQVNBRVJnUkFRY0VBSVFNTThnSUxJQUpCRERZQ0NDQUNJQUUyQWdRZ0FpMEFMRUVCYXc0RSt3SHVBZXdCNndIVUFnc2dBVUVCYWlFQkRQb0JDeUFCSUFSSEJFQURRQUpBSUFFdEFBQWlBRUVnY2lBQUlBQkJ3UUJyUWY4QmNVRWFTUnRCL3dGeElnQkJDVVlOQUNBQVFTQkdEUUFDUUFKQUFrQUNRQ0FBUWVNQWF3NFRBQU1EQXdNREF3TUJBd01EQXdNREF3TURBZ01MSUFGQkFXb2hBVUV4SVFNTTNBSUxJQUZCQVdvaEFVRXlJUU1NMndJTElBRkJBV29oQVVFeklRTU0yZ0lMRFA0QkN5QUVJQUZCQVdvaUFVY05BQXRCTlNFRERQQUNDMEUxSVFNTTd3SUxJQUVnQkVjRVFBTkFJQUV0QUFCQmdEeHFMUUFBUVFGSERmY0JJQVFnQVVFQmFpSUJSdzBBQzBFOUlRTU03d0lMUVQwaEF3enVBZ3RCQUNFQUFrQWdBaWdDT0NJRFJRMEFJQU1vQWtBaUEwVU5BQ0FDSUFNUkFBQWhBQXNnQUVVTkFTQUFRUlZIRGVZQklBSkJ3Z0EyQWh3Z0FpQUJOZ0lVSUFKQjR4ZzJBaEFnQWtFVk5nSU1RUUFoQXd6dEFnc2dBVUVCYWlFQkMwRThJUU1NMGdJTElBRWdCRVlFUUVIQ0FDRURET3NDQ3dKQUEwQUNRQ0FCTFFBQVFRbHJEaGdBQXN3Q3pBTFJBc3dDekFMTUFzd0N6QUxNQXN3Q3pBTE1Bc3dDekFMTUFzd0N6QUxNQXN3Q3pBTE1BZ0RNQWdzZ0JDQUJRUUZxSWdGSERRQUxRY0lBSVFNTTZ3SUxJQUZCQVdvaEFTQUNMUUF0UVFGeFJRMytBUXRCTENFREROQUNDeUFCSUFSSERkNEJRY1FBSVFNTTZBSUxBMEFnQVMwQUFFR1F3QUJxTFFBQVFRRkhEWndCSUFRZ0FVRUJhaUlCUncwQUMwSEZBQ0VERE9jQ0N5QUJMUUFBSWdCQklFWU4vZ0VnQUVFNlJ3M0FBaUFDS0FJRUlRQkJBQ0VESUFKQkFEWUNCQ0FDSUFBZ0FSQXBJZ0FOM2dFTTNRRUxRY2NBSVFNZ0JDQUJJZ0JHRGVVQ0lBUWdBV3NnQWlnQ0FDSUJhaUVISUFBZ0FXdEJCV29oQmdOQUlBRkJrTUlBYWkwQUFDQUFMUUFBSWdWQklISWdCU0FGUWNFQWEwSC9BWEZCR2trYlFmOEJjVWNOdndJZ0FVRUZSZzNDQWlBQlFRRnFJUUVnQkNBQVFRRnFJZ0JIRFFBTElBSWdCellDQUF6bEFndEJ5QUFoQXlBRUlBRWlBRVlONUFJZ0JDQUJheUFDS0FJQUlnRnFJUWNnQUNBQmEwRUphaUVHQTBBZ0FVR1d3Z0JxTFFBQUlBQXRBQUFpQlVFZ2NpQUZJQVZCd1FCclFmOEJjVUVhU1J0Qi93RnhSdzIrQWtFQ0lBRkJDVVlOd2dJYUlBRkJBV29oQVNBRUlBQkJBV29pQUVjTkFBc2dBaUFITmdJQURPUUNDeUFCSUFSR0JFQkJ5UUFoQXd6a0Fnc0NRQUpBSUFFdEFBQWlBRUVnY2lBQUlBQkJ3UUJyUWY4QmNVRWFTUnRCL3dGeFFlNEFhdzRIQUw4Q3Z3Sy9BcjhDdndJQnZ3SUxJQUZCQVdvaEFVRStJUU1NeXdJTElBRkJBV29oQVVFL0lRTU15Z0lMUWNvQUlRTWdCQ0FCSWdCR0RlSUNJQVFnQVdzZ0FpZ0NBQ0lCYWlFR0lBQWdBV3RCQVdvaEJ3TkFJQUZCb01JQWFpMEFBQ0FBTFFBQUlnVkJJSElnQlNBRlFjRUFhMEgvQVhGQkdra2JRZjhCY1VjTnZBSWdBVUVCUmcyK0FpQUJRUUZxSVFFZ0JDQUFRUUZxSWdCSERRQUxJQUlnQmpZQ0FBemlBZ3RCeXdBaEF5QUVJQUVpQUVZTjRRSWdCQ0FCYXlBQ0tBSUFJZ0ZxSVFjZ0FDQUJhMEVPYWlFR0EwQWdBVUdpd2dCcUxRQUFJQUF0QUFBaUJVRWdjaUFGSUFWQndRQnJRZjhCY1VFYVNSdEIvd0Z4UncyN0FpQUJRUTVHRGI0Q0lBRkJBV29oQVNBRUlBQkJBV29pQUVjTkFBc2dBaUFITmdJQURPRUNDMEhNQUNFRElBUWdBU0lBUmczZ0FpQUVJQUZySUFJb0FnQWlBV29oQnlBQUlBRnJRUTlxSVFZRFFDQUJRY0RDQUdvdEFBQWdBQzBBQUNJRlFTQnlJQVVnQlVIQkFHdEIvd0Z4UVJwSkcwSC9BWEZIRGJvQ1FRTWdBVUVQUmcyK0Fob2dBVUVCYWlFQklBUWdBRUVCYWlJQVJ3MEFDeUFDSUFjMkFnQU00QUlMUWMwQUlRTWdCQ0FCSWdCR0RkOENJQVFnQVdzZ0FpZ0NBQ0lCYWlFSElBQWdBV3RCQldvaEJnTkFJQUZCME1JQWFpMEFBQ0FBTFFBQUlnVkJJSElnQlNBRlFjRUFhMEgvQVhGQkdra2JRZjhCY1VjTnVRSkJCQ0FCUVFWR0RiMENHaUFCUVFGcUlRRWdCQ0FBUVFGcUlnQkhEUUFMSUFJZ0J6WUNBQXpmQWdzZ0FTQUVSZ1JBUWM0QUlRTU0zd0lMQWtBQ1FBSkFBa0FnQVMwQUFDSUFRU0J5SUFBZ0FFSEJBR3RCL3dGeFFScEpHMEgvQVhGQjR3QnJEaE1BdkFLOEFyd0N2QUs4QXJ3Q3ZBSzhBcndDdkFLOEFyd0NBYndDdkFLOEFnSUR2QUlMSUFGQkFXb2hBVUhCQUNFRERNZ0NDeUFCUVFGcUlRRkJ3Z0FoQXd6SEFnc2dBVUVCYWlFQlFjTUFJUU1NeGdJTElBRkJBV29oQVVIRUFDRURETVVDQ3lBQklBUkhCRUFnQWtFTk5nSUlJQUlnQVRZQ0JFSEZBQ0VERE1VQ0MwSFBBQ0VERE4wQ0N3SkFBa0FnQVMwQUFFRUthdzRFQVpBQmtBRUFrQUVMSUFGQkFXb2hBUXRCS0NFRERNTUNDeUFCSUFSR0JFQkIwUUFoQXd6Y0Fnc2dBUzBBQUVFZ1J3MEFJQUZCQVdvaEFTQUNMUUF0UVFGeFJRM1FBUXRCRnlFRERNRUNDeUFCSUFSSERjc0JRZElBSVFNTTJRSUxRZE1BSVFNZ0FTQUVSZzNZQWlBQ0tBSUFJZ0FnQkNBQmEyb2hCaUFCSUFCclFRRnFJUVVEUUNBQkxRQUFJQUJCMXNJQWFpMEFBRWNOeHdFZ0FFRUJSZzNLQVNBQVFRRnFJUUFnQkNBQlFRRnFJZ0ZIRFFBTElBSWdCallDQUF6WUFnc2dBU0FFUmdSQVFkVUFJUU1NMkFJTElBRXRBQUJCQ2tjTndnRWdBVUVCYWlFQkRNb0JDeUFCSUFSR0JFQkIxZ0FoQXd6WEFnc0NRQUpBSUFFdEFBQkJDbXNPQkFEREFjTUJBY01CQ3lBQlFRRnFJUUVNeWdFTElBRkJBV29oQVVIS0FDRURETDBDQzBFQUlRQUNRQ0FDS0FJNElnTkZEUUFnQXlnQ1BDSURSUTBBSUFJZ0F4RUFBQ0VBQ3lBQURiOEJRYzBBSVFNTXZBSUxJQUl0QUNsQklrWU56d0lNaVFFTElBUWdBU0lGUmdSQVFkc0FJUU1NMUFJTFFRQWhBRUVCSVFGQkFTRUdRUUFoQXdKQUFuOENRQUpBQWtBQ1FBSkFBa0FDUUNBRkxRQUFRVEJyRGdyRkFjUUJBQUVDQXdRRkJnakRBUXRCQWd3R0MwRUREQVVMUVFRTUJBdEJCUXdEQzBFR0RBSUxRUWNNQVF0QkNBc2hBMEVBSVFGQkFDRUdETDBCQzBFSklRTkJBU0VBUVFBaEFVRUFJUVlNdkFFTElBRWdCRVlFUUVIZEFDRURETk1DQ3lBQkxRQUFRUzVIRGJnQklBRkJBV29oQVF5SUFRc2dBU0FFUncyMkFVSGZBQ0VERE5FQ0N5QUJJQVJIQkVBZ0FrRU9OZ0lJSUFJZ0FUWUNCRUhRQUNFRERMZ0NDMEhnQUNFREROQUNDMEhoQUNFRElBRWdCRVlOendJZ0FpZ0NBQ0lBSUFRZ0FXdHFJUVVnQVNBQWEwRURhaUVHQTBBZ0FTMEFBQ0FBUWVMQ0FHb3RBQUJIRGJFQklBQkJBMFlOc3dFZ0FFRUJhaUVBSUFRZ0FVRUJhaUlCUncwQUN5QUNJQVUyQWdBTXp3SUxRZUlBSVFNZ0FTQUVSZzNPQWlBQ0tBSUFJZ0FnQkNBQmEyb2hCU0FCSUFCclFRSnFJUVlEUUNBQkxRQUFJQUJCNXNJQWFpMEFBRWNOc0FFZ0FFRUNSZzJ2QVNBQVFRRnFJUUFnQkNBQlFRRnFJZ0ZIRFFBTElBSWdCVFlDQUF6T0FndEI0d0FoQXlBQklBUkdEYzBDSUFJb0FnQWlBQ0FFSUFGcmFpRUZJQUVnQUd0QkEyb2hCZ05BSUFFdEFBQWdBRUhwd2dCcUxRQUFSdzJ2QVNBQVFRTkdEYTBCSUFCQkFXb2hBQ0FFSUFGQkFXb2lBVWNOQUFzZ0FpQUZOZ0lBRE0wQ0N5QUJJQVJHQkVCQjVRQWhBd3pOQWdzZ0FVRUJhaUVCUVFBaEFBSkFJQUlvQWpnaUEwVU5BQ0FES0FJd0lnTkZEUUFnQWlBREVRQUFJUUFMSUFBTnFnRkIxZ0FoQXd5ekFnc2dBU0FFUndSQUEwQWdBUzBBQUNJQVFTQkhCRUFDUUFKQUFrQWdBRUhJQUdzT0N3QUJzd0d6QWJNQnN3R3pBYk1Cc3dHekFRS3pBUXNnQVVFQmFpRUJRZElBSVFNTXR3SUxJQUZCQVdvaEFVSFRBQ0VERExZQ0N5QUJRUUZxSVFGQjFBQWhBd3kxQWdzZ0JDQUJRUUZxSWdGSERRQUxRZVFBSVFNTXpBSUxRZVFBSVFNTXl3SUxBMEFnQVMwQUFFSHd3Z0JxTFFBQUlnQkJBVWNFUUNBQVFRSnJEZ09uQWFZQnBRR2tBUXNnQkNBQlFRRnFJZ0ZIRFFBTFFlWUFJUU1NeWdJTElBRkJBV29nQVNBRVJ3MENHa0huQUNFRERNa0NDd05BSUFFdEFBQkI4TVFBYWkwQUFDSUFRUUZIQkVBQ1FDQUFRUUpyRGdTaUFhRUJvQUVBbndFTFFkY0FJUU1Nc1FJTElBUWdBVUVCYWlJQlJ3MEFDMEhvQUNFRERNZ0NDeUFCSUFSR0JFQkI2UUFoQXd6SUFnc0NRQ0FCTFFBQUlnQkJDbXNPR3JjQm13R2JBYlFCbXdHYkFac0Jtd0diQVpzQm13R2JBWnNCbXdHYkFac0Jtd0diQVpzQm13R2JBWnNCcEFHYkFac0JBSmtCQ3lBQlFRRnFDeUVCUVFZaEF3eXRBZ3NEUUNBQkxRQUFRZkRHQUdvdEFBQkJBVWNOZlNBRUlBRkJBV29pQVVjTkFBdEI2Z0FoQXd6RkFnc2dBVUVCYWlBQklBUkhEUUlhUWVzQUlRTU14QUlMSUFFZ0JFWUVRRUhzQUNFRERNUUNDeUFCUVFGcURBRUxJQUVnQkVZRVFFSHRBQ0VERE1NQ0N5QUJRUUZxQ3lFQlFRUWhBd3lvQWdzZ0FTQUVSZ1JBUWU0QUlRTU13UUlMQWtBQ1FBSkFJQUV0QUFCQjhNZ0FhaTBBQUVFQmF3NEhrQUdQQVk0QkFId0JBbzBCQ3lBQlFRRnFJUUVNQ3dzZ0FVRUJhZ3lUQVF0QkFDRURJQUpCQURZQ0hDQUNRWnNTTmdJUUlBSkJCellDRENBQ0lBRkJBV28yQWhRTXdBSUxBa0FEUUNBQkxRQUFRZkRJQUdvdEFBQWlBRUVFUndSQUFrQUNRQ0FBUVFGckRnZVVBWk1Ca2dHTkFRQUVBWTBCQzBIYUFDRURES29DQ3lBQlFRRnFJUUZCM0FBaEF3eXBBZ3NnQkNBQlFRRnFJZ0ZIRFFBTFFlOEFJUU1Nd0FJTElBRkJBV29Na1FFTElBUWdBU0lBUmdSQVFmQUFJUU1NdndJTElBQXRBQUJCTDBjTkFTQUFRUUZxSVFFTUJ3c2dCQ0FCSWdCR0JFQkI4UUFoQXd5K0Fnc2dBQzBBQUNJQlFTOUdCRUFnQUVFQmFpRUJRZDBBSVFNTXBRSUxJQUZCQ21zaUEwRVdTdzBBSUFBaEFVRUJJQU4wUVltQWdBSnhEZmtCQzBFQUlRTWdBa0VBTmdJY0lBSWdBRFlDRkNBQ1FZd2NOZ0lRSUFKQkJ6WUNEQXk4QWdzZ0FTQUVSd1JBSUFGQkFXb2hBVUhlQUNFRERLTUNDMEh5QUNFRERMc0NDeUFCSUFSR0JFQkI5QUFoQXd5N0Fnc0NRQ0FCTFFBQVFmRE1BR290QUFCQkFXc09BL2NCY3dDQ0FRdEI0UUFoQXd5aEFnc2dBU0FFUndSQUEwQWdBUzBBQUVId3lnQnFMUUFBSWdCQkEwY0VRQUpBSUFCQkFXc09BdmtCQUlVQkMwSGZBQ0VEREtNQ0N5QUVJQUZCQVdvaUFVY05BQXRCOHdBaEF3eTZBZ3RCOHdBaEF3eTVBZ3NnQVNBRVJ3UkFJQUpCRHpZQ0NDQUNJQUUyQWdSQjRBQWhBd3lnQWd0QjlRQWhBd3k0QWdzZ0FTQUVSZ1JBUWZZQUlRTU11QUlMSUFKQkR6WUNDQ0FDSUFFMkFnUUxRUU1oQXd5ZEFnc0RRQ0FCTFFBQVFTQkhEWTRDSUFRZ0FVRUJhaUlCUncwQUMwSDNBQ0VERExVQ0N5QUJJQVJHQkVCQitBQWhBd3kxQWdzZ0FTMEFBRUVnUncxNklBRkJBV29oQVF4YkMwRUFJUUFDUUNBQ0tBSTRJZ05GRFFBZ0F5Z0NPQ0lEUlEwQUlBSWdBeEVBQUNFQUN5QUFEWGdNZ0FJTElBRWdCRVlFUUVINkFDRURETE1DQ3lBQkxRQUFRY3dBUncxMElBRkJBV29oQVVFVERIWUxRZnNBSVFNZ0FTQUVSZzJ4QWlBQ0tBSUFJZ0FnQkNBQmEyb2hCU0FCSUFCclFRVnFJUVlEUUNBQkxRQUFJQUJCOE00QWFpMEFBRWNOY3lBQVFRVkdEWFVnQUVFQmFpRUFJQVFnQVVFQmFpSUJSdzBBQ3lBQ0lBVTJBZ0FNc1FJTElBRWdCRVlFUUVIOEFDRURETEVDQ3dKQUFrQWdBUzBBQUVIREFHc09EQUIwZEhSMGRIUjBkSFIwQVhRTElBRkJBV29oQVVIbUFDRURESmdDQ3lBQlFRRnFJUUZCNXdBaEF3eVhBZ3RCL1FBaEF5QUJJQVJHRGE4Q0lBSW9BZ0FpQUNBRUlBRnJhaUVGSUFFZ0FHdEJBbW9oQmdKQUEwQWdBUzBBQUNBQVFlM1BBR290QUFCSERYSWdBRUVDUmcwQklBQkJBV29oQUNBRUlBRkJBV29pQVVjTkFBc2dBaUFGTmdJQURMQUNDeUFDUVFBMkFnQWdCa0VCYWlFQlFSQU1jd3RCL2dBaEF5QUJJQVJHRGE0Q0lBSW9BZ0FpQUNBRUlBRnJhaUVGSUFFZ0FHdEJCV29oQmdKQUEwQWdBUzBBQUNBQVFmYk9BR290QUFCSERYRWdBRUVGUmcwQklBQkJBV29oQUNBRUlBRkJBV29pQVVjTkFBc2dBaUFGTmdJQURLOENDeUFDUVFBMkFnQWdCa0VCYWlFQlFSWU1jZ3RCL3dBaEF5QUJJQVJHRGEwQ0lBSW9BZ0FpQUNBRUlBRnJhaUVGSUFFZ0FHdEJBMm9oQmdKQUEwQWdBUzBBQUNBQVFmek9BR290QUFCSERYQWdBRUVEUmcwQklBQkJBV29oQUNBRUlBRkJBV29pQVVjTkFBc2dBaUFGTmdJQURLNENDeUFDUVFBMkFnQWdCa0VCYWlFQlFRVU1jUXNnQVNBRVJnUkFRWUFCSVFNTXJRSUxJQUV0QUFCQjJRQkhEVzRnQVVFQmFpRUJRUWdNY0FzZ0FTQUVSZ1JBUVlFQklRTU1yQUlMQWtBQ1FDQUJMUUFBUWM0QWF3NERBRzhCYndzZ0FVRUJhaUVCUWVzQUlRTU1rd0lMSUFGQkFXb2hBVUhzQUNFRERKSUNDeUFCSUFSR0JFQkJnZ0VoQXd5ckFnc0NRQUpBSUFFdEFBQkJ5QUJyRGdnQWJtNXVibTV1QVc0TElBRkJBV29oQVVIcUFDRURESklDQ3lBQlFRRnFJUUZCN1FBaEF3eVJBZ3RCZ3dFaEF5QUJJQVJHRGFrQ0lBSW9BZ0FpQUNBRUlBRnJhaUVGSUFFZ0FHdEJBbW9oQmdKQUEwQWdBUzBBQUNBQVFZRFBBR290QUFCSERXd2dBRUVDUmcwQklBQkJBV29oQUNBRUlBRkJBV29pQVVjTkFBc2dBaUFGTmdJQURLb0NDeUFDUVFBMkFnQWdCa0VCYWlFQlFRQU1iUXRCaEFFaEF5QUJJQVJHRGFnQ0lBSW9BZ0FpQUNBRUlBRnJhaUVGSUFFZ0FHdEJCR29oQmdKQUEwQWdBUzBBQUNBQVFZUFBBR290QUFCSERXc2dBRUVFUmcwQklBQkJBV29oQUNBRUlBRkJBV29pQVVjTkFBc2dBaUFGTmdJQURLa0NDeUFDUVFBMkFnQWdCa0VCYWlFQlFTTU1iQXNnQVNBRVJnUkFRWVVCSVFNTXFBSUxBa0FDUUNBQkxRQUFRY3dBYXc0SUFHdHJhMnRyYXdGckN5QUJRUUZxSVFGQjd3QWhBd3lQQWdzZ0FVRUJhaUVCUWZBQUlRTU1qZ0lMSUFFZ0JFWUVRRUdHQVNFRERLY0NDeUFCTFFBQVFjVUFSdzFvSUFGQkFXb2hBUXhnQzBHSEFTRURJQUVnQkVZTnBRSWdBaWdDQUNJQUlBUWdBV3RxSVFVZ0FTQUFhMEVEYWlFR0FrQURRQ0FCTFFBQUlBQkJpTThBYWkwQUFFY05hQ0FBUVFOR0RRRWdBRUVCYWlFQUlBUWdBVUVCYWlJQlJ3MEFDeUFDSUFVMkFnQU1wZ0lMSUFKQkFEWUNBQ0FHUVFGcUlRRkJMUXhwQzBHSUFTRURJQUVnQkVZTnBBSWdBaWdDQUNJQUlBUWdBV3RxSVFVZ0FTQUFhMEVJYWlFR0FrQURRQ0FCTFFBQUlBQkIwTThBYWkwQUFFY05aeUFBUVFoR0RRRWdBRUVCYWlFQUlBUWdBVUVCYWlJQlJ3MEFDeUFDSUFVMkFnQU1wUUlMSUFKQkFEWUNBQ0FHUVFGcUlRRkJLUXhvQ3lBQklBUkdCRUJCaVFFaEF3eWtBZ3RCQVNBQkxRQUFRZDhBUncxbkdpQUJRUUZxSVFFTVhndEJpZ0VoQXlBQklBUkdEYUlDSUFJb0FnQWlBQ0FFSUFGcmFpRUZJQUVnQUd0QkFXb2hCZ05BSUFFdEFBQWdBRUdNendCcUxRQUFSdzFrSUFCQkFVWU4rZ0VnQUVFQmFpRUFJQVFnQVVFQmFpSUJSdzBBQ3lBQ0lBVTJBZ0FNb2dJTFFZc0JJUU1nQVNBRVJnMmhBaUFDS0FJQUlnQWdCQ0FCYTJvaEJTQUJJQUJyUVFKcUlRWUNRQU5BSUFFdEFBQWdBRUdPendCcUxRQUFSdzFrSUFCQkFrWU5BU0FBUVFGcUlRQWdCQ0FCUVFGcUlnRkhEUUFMSUFJZ0JUWUNBQXlpQWdzZ0FrRUFOZ0lBSUFaQkFXb2hBVUVDREdVTFFZd0JJUU1nQVNBRVJnMmdBaUFDS0FJQUlnQWdCQ0FCYTJvaEJTQUJJQUJyUVFGcUlRWUNRQU5BSUFFdEFBQWdBRUh3endCcUxRQUFSdzFqSUFCQkFVWU5BU0FBUVFGcUlRQWdCQ0FCUVFGcUlnRkhEUUFMSUFJZ0JUWUNBQXloQWdzZ0FrRUFOZ0lBSUFaQkFXb2hBVUVmREdRTFFZMEJJUU1nQVNBRVJnMmZBaUFDS0FJQUlnQWdCQ0FCYTJvaEJTQUJJQUJyUVFGcUlRWUNRQU5BSUFFdEFBQWdBRUh5endCcUxRQUFSdzFpSUFCQkFVWU5BU0FBUVFGcUlRQWdCQ0FCUVFGcUlnRkhEUUFMSUFJZ0JUWUNBQXlnQWdzZ0FrRUFOZ0lBSUFaQkFXb2hBVUVKREdNTElBRWdCRVlFUUVHT0FTRURESjhDQ3dKQUFrQWdBUzBBQUVISkFHc09Cd0JpWW1KaVlnRmlDeUFCUVFGcUlRRkIrQUFoQXd5R0Fnc2dBVUVCYWlFQlFma0FJUU1NaFFJTFFZOEJJUU1nQVNBRVJnMmRBaUFDS0FJQUlnQWdCQ0FCYTJvaEJTQUJJQUJyUVFWcUlRWUNRQU5BSUFFdEFBQWdBRUdSendCcUxRQUFSdzFnSUFCQkJVWU5BU0FBUVFGcUlRQWdCQ0FCUVFGcUlnRkhEUUFMSUFJZ0JUWUNBQXllQWdzZ0FrRUFOZ0lBSUFaQkFXb2hBVUVZREdFTFFaQUJJUU1nQVNBRVJnMmNBaUFDS0FJQUlnQWdCQ0FCYTJvaEJTQUJJQUJyUVFKcUlRWUNRQU5BSUFFdEFBQWdBRUdYendCcUxRQUFSdzFmSUFCQkFrWU5BU0FBUVFGcUlRQWdCQ0FCUVFGcUlnRkhEUUFMSUFJZ0JUWUNBQXlkQWdzZ0FrRUFOZ0lBSUFaQkFXb2hBVUVYREdBTFFaRUJJUU1nQVNBRVJnMmJBaUFDS0FJQUlnQWdCQ0FCYTJvaEJTQUJJQUJyUVFacUlRWUNRQU5BSUFFdEFBQWdBRUdhendCcUxRQUFSdzFlSUFCQkJrWU5BU0FBUVFGcUlRQWdCQ0FCUVFGcUlnRkhEUUFMSUFJZ0JUWUNBQXljQWdzZ0FrRUFOZ0lBSUFaQkFXb2hBVUVWREY4TFFaSUJJUU1nQVNBRVJnMmFBaUFDS0FJQUlnQWdCQ0FCYTJvaEJTQUJJQUJyUVFWcUlRWUNRQU5BSUFFdEFBQWdBRUdoendCcUxRQUFSdzFkSUFCQkJVWU5BU0FBUVFGcUlRQWdCQ0FCUVFGcUlnRkhEUUFMSUFJZ0JUWUNBQXliQWdzZ0FrRUFOZ0lBSUFaQkFXb2hBVUVlREY0TElBRWdCRVlFUUVHVEFTRURESm9DQ3lBQkxRQUFRY3dBUncxYklBRkJBV29oQVVFS0RGMExJQUVnQkVZRVFFR1VBU0VEREprQ0N3SkFBa0FnQVMwQUFFSEJBR3NPRHdCY1hGeGNYRnhjWEZ4Y1hGeGNBVndMSUFGQkFXb2hBVUgrQUNFRERJQUNDeUFCUVFGcUlRRkIvd0FoQXd6L0FRc2dBU0FFUmdSQVFaVUJJUU1NbUFJTEFrQUNRQ0FCTFFBQVFjRUFhdzREQUZzQld3c2dBVUVCYWlFQlFmMEFJUU1NL3dFTElBRkJBV29oQVVHQUFTRUREUDRCQzBHV0FTRURJQUVnQkVZTmxnSWdBaWdDQUNJQUlBUWdBV3RxSVFVZ0FTQUFhMEVCYWlFR0FrQURRQ0FCTFFBQUlBQkJwODhBYWkwQUFFY05XU0FBUVFGR0RRRWdBRUVCYWlFQUlBUWdBVUVCYWlJQlJ3MEFDeUFDSUFVMkFnQU1sd0lMSUFKQkFEWUNBQ0FHUVFGcUlRRkJDd3hhQ3lBQklBUkdCRUJCbHdFaEF3eVdBZ3NDUUFKQUFrQUNRQ0FCTFFBQVFTMXJEaU1BVzF0YlcxdGJXMXRiVzF0YlcxdGJXMXRiVzF0Ylcxc0JXMXRiVzFzQ1cxdGJBMXNMSUFGQkFXb2hBVUg3QUNFRERQOEJDeUFCUVFGcUlRRkIvQUFoQXd6K0FRc2dBVUVCYWlFQlFZRUJJUU1NL1FFTElBRkJBV29oQVVHQ0FTRUREUHdCQzBHWUFTRURJQUVnQkVZTmxBSWdBaWdDQUNJQUlBUWdBV3RxSVFVZ0FTQUFhMEVFYWlFR0FrQURRQ0FCTFFBQUlBQkJxYzhBYWkwQUFFY05WeUFBUVFSR0RRRWdBRUVCYWlFQUlBUWdBVUVCYWlJQlJ3MEFDeUFDSUFVMkFnQU1sUUlMSUFKQkFEWUNBQ0FHUVFGcUlRRkJHUXhZQzBHWkFTRURJQUVnQkVZTmt3SWdBaWdDQUNJQUlBUWdBV3RxSVFVZ0FTQUFhMEVGYWlFR0FrQURRQ0FCTFFBQUlBQkJyczhBYWkwQUFFY05WaUFBUVFWR0RRRWdBRUVCYWlFQUlBUWdBVUVCYWlJQlJ3MEFDeUFDSUFVMkFnQU1sQUlMSUFKQkFEWUNBQ0FHUVFGcUlRRkJCZ3hYQzBHYUFTRURJQUVnQkVZTmtnSWdBaWdDQUNJQUlBUWdBV3RxSVFVZ0FTQUFhMEVCYWlFR0FrQURRQ0FCTFFBQUlBQkJ0TThBYWkwQUFFY05WU0FBUVFGR0RRRWdBRUVCYWlFQUlBUWdBVUVCYWlJQlJ3MEFDeUFDSUFVMkFnQU1rd0lMSUFKQkFEWUNBQ0FHUVFGcUlRRkJIQXhXQzBHYkFTRURJQUVnQkVZTmtRSWdBaWdDQUNJQUlBUWdBV3RxSVFVZ0FTQUFhMEVCYWlFR0FrQURRQ0FCTFFBQUlBQkJ0czhBYWkwQUFFY05WQ0FBUVFGR0RRRWdBRUVCYWlFQUlBUWdBVUVCYWlJQlJ3MEFDeUFDSUFVMkFnQU1rZ0lMSUFKQkFEWUNBQ0FHUVFGcUlRRkJKd3hWQ3lBQklBUkdCRUJCbkFFaEF3eVJBZ3NDUUFKQUlBRXRBQUJCMUFCckRnSUFBVlFMSUFGQkFXb2hBVUdHQVNFRERQZ0JDeUFCUVFGcUlRRkJod0VoQXd6M0FRdEJuUUVoQXlBQklBUkdEWThDSUFJb0FnQWlBQ0FFSUFGcmFpRUZJQUVnQUd0QkFXb2hCZ0pBQTBBZ0FTMEFBQ0FBUWJqUEFHb3RBQUJIRFZJZ0FFRUJSZzBCSUFCQkFXb2hBQ0FFSUFGQkFXb2lBVWNOQUFzZ0FpQUZOZ0lBREpBQ0N5QUNRUUEyQWdBZ0JrRUJhaUVCUVNZTVV3dEJuZ0VoQXlBQklBUkdEWTRDSUFJb0FnQWlBQ0FFSUFGcmFpRUZJQUVnQUd0QkFXb2hCZ0pBQTBBZ0FTMEFBQ0FBUWJyUEFHb3RBQUJIRFZFZ0FFRUJSZzBCSUFCQkFXb2hBQ0FFSUFGQkFXb2lBVWNOQUFzZ0FpQUZOZ0lBREk4Q0N5QUNRUUEyQWdBZ0JrRUJhaUVCUVFNTVVndEJud0VoQXlBQklBUkdEWTBDSUFJb0FnQWlBQ0FFSUFGcmFpRUZJQUVnQUd0QkFtb2hCZ0pBQTBBZ0FTMEFBQ0FBUWUzUEFHb3RBQUJIRFZBZ0FFRUNSZzBCSUFCQkFXb2hBQ0FFSUFGQkFXb2lBVWNOQUFzZ0FpQUZOZ0lBREk0Q0N5QUNRUUEyQWdBZ0JrRUJhaUVCUVF3TVVRdEJvQUVoQXlBQklBUkdEWXdDSUFJb0FnQWlBQ0FFSUFGcmFpRUZJQUVnQUd0QkEyb2hCZ0pBQTBBZ0FTMEFBQ0FBUWJ6UEFHb3RBQUJIRFU4Z0FFRURSZzBCSUFCQkFXb2hBQ0FFSUFGQkFXb2lBVWNOQUFzZ0FpQUZOZ0lBREkwQ0N5QUNRUUEyQWdBZ0JrRUJhaUVCUVEwTVVBc2dBU0FFUmdSQVFhRUJJUU1NakFJTEFrQUNRQ0FCTFFBQVFjWUFhdzRMQUU5UFQwOVBUMDlQVHdGUEN5QUJRUUZxSVFGQml3RWhBd3p6QVFzZ0FVRUJhaUVCUVl3QklRTU04Z0VMSUFFZ0JFWUVRRUdpQVNFRERJc0NDeUFCTFFBQVFkQUFSdzFNSUFGQkFXb2hBUXhHQ3lBQklBUkdCRUJCb3dFaEF3eUtBZ3NDUUFKQUlBRXRBQUJCeVFCckRnY0JUVTFOVFUwQVRRc2dBVUVCYWlFQlFZNEJJUU1NOFFFTElBRkJBV29oQVVFaURFMExRYVFCSVFNZ0FTQUVSZzJJQWlBQ0tBSUFJZ0FnQkNBQmEyb2hCU0FCSUFCclFRRnFJUVlDUUFOQUlBRXRBQUFnQUVIQXp3QnFMUUFBUncxTElBQkJBVVlOQVNBQVFRRnFJUUFnQkNBQlFRRnFJZ0ZIRFFBTElBSWdCVFlDQUF5SkFnc2dBa0VBTmdJQUlBWkJBV29oQVVFZERFd0xJQUVnQkVZRVFFR2xBU0VERElnQ0N3SkFBa0FnQVMwQUFFSFNBR3NPQXdCTEFVc0xJQUZCQVdvaEFVR1FBU0VERE84QkN5QUJRUUZxSVFGQkJBeExDeUFCSUFSR0JFQkJwZ0VoQXd5SEFnc0NRQUpBQWtBQ1FBSkFJQUV0QUFCQndRQnJEaFVBVFUxTlRVMU5UVTFOVFFGTlRRSk5UUU5OVFFSTkN5QUJRUUZxSVFGQmlBRWhBd3p4QVFzZ0FVRUJhaUVCUVlrQklRTU04QUVMSUFGQkFXb2hBVUdLQVNFRERPOEJDeUFCUVFGcUlRRkJqd0VoQXd6dUFRc2dBVUVCYWlFQlFaRUJJUU1NN1FFTFFhY0JJUU1nQVNBRVJnMkZBaUFDS0FJQUlnQWdCQ0FCYTJvaEJTQUJJQUJyUVFKcUlRWUNRQU5BSUFFdEFBQWdBRUh0endCcUxRQUFSdzFJSUFCQkFrWU5BU0FBUVFGcUlRQWdCQ0FCUVFGcUlnRkhEUUFMSUFJZ0JUWUNBQXlHQWdzZ0FrRUFOZ0lBSUFaQkFXb2hBVUVSREVrTFFhZ0JJUU1nQVNBRVJnMkVBaUFDS0FJQUlnQWdCQ0FCYTJvaEJTQUJJQUJyUVFKcUlRWUNRQU5BSUFFdEFBQWdBRUhDendCcUxRQUFSdzFISUFCQkFrWU5BU0FBUVFGcUlRQWdCQ0FCUVFGcUlnRkhEUUFMSUFJZ0JUWUNBQXlGQWdzZ0FrRUFOZ0lBSUFaQkFXb2hBVUVzREVnTFFha0JJUU1nQVNBRVJnMkRBaUFDS0FJQUlnQWdCQ0FCYTJvaEJTQUJJQUJyUVFScUlRWUNRQU5BSUFFdEFBQWdBRUhGendCcUxRQUFSdzFHSUFCQkJFWU5BU0FBUVFGcUlRQWdCQ0FCUVFGcUlnRkhEUUFMSUFJZ0JUWUNBQXlFQWdzZ0FrRUFOZ0lBSUFaQkFXb2hBVUVyREVjTFFhb0JJUU1nQVNBRVJnMkNBaUFDS0FJQUlnQWdCQ0FCYTJvaEJTQUJJQUJyUVFKcUlRWUNRQU5BSUFFdEFBQWdBRUhLendCcUxRQUFSdzFGSUFCQkFrWU5BU0FBUVFGcUlRQWdCQ0FCUVFGcUlnRkhEUUFMSUFJZ0JUWUNBQXlEQWdzZ0FrRUFOZ0lBSUFaQkFXb2hBVUVVREVZTElBRWdCRVlFUUVHckFTRURESUlDQ3dKQUFrQUNRQUpBSUFFdEFBQkJ3Z0JyRGc4QUFRSkhSMGRIUjBkSFIwZEhSd05IQ3lBQlFRRnFJUUZCa3dFaEF3enJBUXNnQVVFQmFpRUJRWlFCSVFNTTZnRUxJQUZCQVdvaEFVR1ZBU0VERE9rQkN5QUJRUUZxSVFGQmxnRWhBd3pvQVFzZ0FTQUVSZ1JBUWF3QklRTU1nUUlMSUFFdEFBQkJ4UUJIRFVJZ0FVRUJhaUVCREQwTFFhMEJJUU1nQVNBRVJnMy9BU0FDS0FJQUlnQWdCQ0FCYTJvaEJTQUJJQUJyUVFKcUlRWUNRQU5BSUFFdEFBQWdBRUhOendCcUxRQUFSdzFDSUFCQkFrWU5BU0FBUVFGcUlRQWdCQ0FCUVFGcUlnRkhEUUFMSUFJZ0JUWUNBQXlBQWdzZ0FrRUFOZ0lBSUFaQkFXb2hBVUVPREVNTElBRWdCRVlFUUVHdUFTRUREUDhCQ3lBQkxRQUFRZEFBUncxQUlBRkJBV29oQVVFbERFSUxRYThCSVFNZ0FTQUVSZzM5QVNBQ0tBSUFJZ0FnQkNBQmEyb2hCU0FCSUFCclFRaHFJUVlDUUFOQUlBRXRBQUFnQUVIUXp3QnFMUUFBUncxQUlBQkJDRVlOQVNBQVFRRnFJUUFnQkNBQlFRRnFJZ0ZIRFFBTElBSWdCVFlDQUF6K0FRc2dBa0VBTmdJQUlBWkJBV29oQVVFcURFRUxJQUVnQkVZRVFFR3dBU0VERFAwQkN3SkFBa0FnQVMwQUFFSFZBR3NPQ3dCQVFFQkFRRUJBUUVBQlFBc2dBVUVCYWlFQlFab0JJUU1NNUFFTElBRkJBV29oQVVHYkFTRURET01CQ3lBQklBUkdCRUJCc1FFaEF3ejhBUXNDUUFKQUlBRXRBQUJCd1FCckRoUUFQejgvUHo4L1B6OC9QejgvUHo4L1B6OC9BVDhMSUFGQkFXb2hBVUdaQVNFRERPTUJDeUFCUVFGcUlRRkJuQUVoQXd6aUFRdEJzZ0VoQXlBQklBUkdEZm9CSUFJb0FnQWlBQ0FFSUFGcmFpRUZJQUVnQUd0QkEyb2hCZ0pBQTBBZ0FTMEFBQ0FBUWRuUEFHb3RBQUJIRFQwZ0FFRURSZzBCSUFCQkFXb2hBQ0FFSUFGQkFXb2lBVWNOQUFzZ0FpQUZOZ0lBRFBzQkN5QUNRUUEyQWdBZ0JrRUJhaUVCUVNFTVBndEJzd0VoQXlBQklBUkdEZmtCSUFJb0FnQWlBQ0FFSUFGcmFpRUZJQUVnQUd0QkJtb2hCZ0pBQTBBZ0FTMEFBQ0FBUWQzUEFHb3RBQUJIRFR3Z0FFRUdSZzBCSUFCQkFXb2hBQ0FFSUFGQkFXb2lBVWNOQUFzZ0FpQUZOZ0lBRFBvQkN5QUNRUUEyQWdBZ0JrRUJhaUVCUVJvTVBRc2dBU0FFUmdSQVFiUUJJUU1NK1FFTEFrQUNRQUpBSUFFdEFBQkJ4UUJyRGhFQVBUMDlQVDA5UFQwOUFUMDlQVDA5QWowTElBRkJBV29oQVVHZEFTRURET0VCQ3lBQlFRRnFJUUZCbmdFaEF3emdBUXNnQVVFQmFpRUJRWjhCSVFNTTN3RUxRYlVCSVFNZ0FTQUVSZzMzQVNBQ0tBSUFJZ0FnQkNBQmEyb2hCU0FCSUFCclFRVnFJUVlDUUFOQUlBRXRBQUFnQUVIa3p3QnFMUUFBUncwNklBQkJCVVlOQVNBQVFRRnFJUUFnQkNBQlFRRnFJZ0ZIRFFBTElBSWdCVFlDQUF6NEFRc2dBa0VBTmdJQUlBWkJBV29oQVVFb0REc0xRYllCSVFNZ0FTQUVSZzMyQVNBQ0tBSUFJZ0FnQkNBQmEyb2hCU0FCSUFCclFRSnFJUVlDUUFOQUlBRXRBQUFnQUVIcXp3QnFMUUFBUncwNUlBQkJBa1lOQVNBQVFRRnFJUUFnQkNBQlFRRnFJZ0ZIRFFBTElBSWdCVFlDQUF6M0FRc2dBa0VBTmdJQUlBWkJBV29oQVVFSEREb0xJQUVnQkVZRVFFRzNBU0VERFBZQkN3SkFBa0FnQVMwQUFFSEZBR3NPRGdBNU9UazVPVGs1T1RrNU9Ua0JPUXNnQVVFQmFpRUJRYUVCSVFNTTNRRUxJQUZCQVdvaEFVR2lBU0VERE53QkMwRzRBU0VESUFFZ0JFWU45QUVnQWlnQ0FDSUFJQVFnQVd0cUlRVWdBU0FBYTBFQ2FpRUdBa0FEUUNBQkxRQUFJQUJCN2M4QWFpMEFBRWNOTnlBQVFRSkdEUUVnQUVFQmFpRUFJQVFnQVVFQmFpSUJSdzBBQ3lBQ0lBVTJBZ0FNOVFFTElBSkJBRFlDQUNBR1FRRnFJUUZCRWd3NEMwRzVBU0VESUFFZ0JFWU44d0VnQWlnQ0FDSUFJQVFnQVd0cUlRVWdBU0FBYTBFQmFpRUdBa0FEUUNBQkxRQUFJQUJCOE04QWFpMEFBRWNOTmlBQVFRRkdEUUVnQUVFQmFpRUFJQVFnQVVFQmFpSUJSdzBBQ3lBQ0lBVTJBZ0FNOUFFTElBSkJBRFlDQUNBR1FRRnFJUUZCSUF3M0MwRzZBU0VESUFFZ0JFWU44Z0VnQWlnQ0FDSUFJQVFnQVd0cUlRVWdBU0FBYTBFQmFpRUdBa0FEUUNBQkxRQUFJQUJCOHM4QWFpMEFBRWNOTlNBQVFRRkdEUUVnQUVFQmFpRUFJQVFnQVVFQmFpSUJSdzBBQ3lBQ0lBVTJBZ0FNOHdFTElBSkJBRFlDQUNBR1FRRnFJUUZCRHd3MkN5QUJJQVJHQkVCQnV3RWhBd3p5QVFzQ1FBSkFJQUV0QUFCQnlRQnJEZ2NBTlRVMU5UVUJOUXNnQVVFQmFpRUJRYVVCSVFNTTJRRUxJQUZCQVdvaEFVR21BU0VERE5nQkMwRzhBU0VESUFFZ0JFWU44QUVnQWlnQ0FDSUFJQVFnQVd0cUlRVWdBU0FBYTBFSGFpRUdBa0FEUUNBQkxRQUFJQUJCOU04QWFpMEFBRWNOTXlBQVFRZEdEUUVnQUVFQmFpRUFJQVFnQVVFQmFpSUJSdzBBQ3lBQ0lBVTJBZ0FNOFFFTElBSkJBRFlDQUNBR1FRRnFJUUZCR3d3MEN5QUJJQVJHQkVCQnZRRWhBd3p3QVFzQ1FBSkFBa0FnQVMwQUFFSENBR3NPRWdBME5EUTBORFEwTkRRQk5EUTBORFEwQWpRTElBRkJBV29oQVVHa0FTRURETmdCQ3lBQlFRRnFJUUZCcHdFaEF3elhBUXNnQVVFQmFpRUJRYWdCSVFNTTFnRUxJQUVnQkVZRVFFRytBU0VERE84QkN5QUJMUUFBUWM0QVJ3MHdJQUZCQVdvaEFRd3NDeUFCSUFSR0JFQkJ2d0VoQXd6dUFRc0NRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUNBQkxRQUFRY0VBYXc0VkFBRUNBejhFQlFZL1B6OEhDQWtLQ3o4TURRNFBQd3NnQVVFQmFpRUJRZWdBSVFNTTR3RUxJQUZCQVdvaEFVSHBBQ0VERE9JQkN5QUJRUUZxSVFGQjdnQWhBd3poQVFzZ0FVRUJhaUVCUWZJQUlRTU00QUVMSUFGQkFXb2hBVUh6QUNFREROOEJDeUFCUVFGcUlRRkI5Z0FoQXd6ZUFRc2dBVUVCYWlFQlFmY0FJUU1NM1FFTElBRkJBV29oQVVINkFDRURETndCQ3lBQlFRRnFJUUZCZ3dFaEF3emJBUXNnQVVFQmFpRUJRWVFCSVFNTTJnRUxJQUZCQVdvaEFVR0ZBU0VERE5rQkN5QUJRUUZxSVFGQmtnRWhBd3pZQVFzZ0FVRUJhaUVCUVpnQklRTU0xd0VMSUFGQkFXb2hBVUdnQVNFREROWUJDeUFCUVFGcUlRRkJvd0VoQXd6VkFRc2dBVUVCYWlFQlFhb0JJUU1NMUFFTElBRWdCRWNFUUNBQ1FSQTJBZ2dnQWlBQk5nSUVRYXNCSVFNTTFBRUxRY0FCSVFNTTdBRUxRUUFoQUFKQUlBSW9BamdpQTBVTkFDQURLQUkwSWdORkRRQWdBaUFERVFBQUlRQUxJQUJGRFY0Z0FFRVZSdzBISUFKQjBRQTJBaHdnQWlBQk5nSVVJQUpCc0JjMkFoQWdBa0VWTmdJTVFRQWhBd3pyQVFzZ0FVRUJhaUFCSUFSSERRZ2FRY0lCSVFNTTZnRUxBMEFDUUNBQkxRQUFRUXByRGdRSUFBQUxBQXNnQkNBQlFRRnFJZ0ZIRFFBTFFjTUJJUU1NNlFFTElBRWdCRWNFUUNBQ1FSRTJBZ2dnQWlBQk5nSUVRUUVoQXd6UUFRdEJ4QUVoQXd6b0FRc2dBU0FFUmdSQVFjVUJJUU1NNkFFTEFrQUNRQ0FCTFFBQVFRcHJEZ1FCS0NnQUtBc2dBVUVCYWd3SkN5QUJRUUZxREFVTElBRWdCRVlFUUVIR0FTRURET2NCQ3dKQUFrQWdBUzBBQUVFS2F3NFhBUXNMQVFzTEN3c0xDd3NMQ3dzTEN3c0xDd3NMQ3dBTEN5QUJRUUZxSVFFTFFiQUJJUU1NelFFTElBRWdCRVlFUUVISUFTRURET1lCQ3lBQkxRQUFRU0JIRFFrZ0FrRUFPd0V5SUFGQkFXb2hBVUd6QVNFRERNd0JDd05BSUFFaEFBSkFJQUVnQkVjRVFDQUJMUUFBUVRCclFmOEJjU0lEUVFwSkRRRU1Kd3RCeHdFaEF3em1BUXNDUUNBQ0x3RXlJZ0ZCbVROTERRQWdBaUFCUVFwc0lnVTdBVElnQlVIKy93TnhJQU5CLy84RGMwc05BQ0FBUVFGcUlRRWdBaUFESUFWcUlnTTdBVElnQTBILy93TnhRZWdIU1EwQkN3dEJBQ0VESUFKQkFEWUNIQ0FDUWNFSk5nSVFJQUpCRFRZQ0RDQUNJQUJCQVdvMkFoUU01QUVMSUFKQkFEWUNIQ0FDSUFFMkFoUWdBa0h3RERZQ0VDQUNRUnMyQWd4QkFDRURET01CQ3lBQ0tBSUVJUUFnQWtFQU5nSUVJQUlnQUNBQkVDWWlBQTBCSUFGQkFXb0xJUUZCclFFaEF3eklBUXNnQWtIQkFUWUNIQ0FDSUFBMkFnd2dBaUFCUVFGcU5nSVVRUUFoQXd6Z0FRc2dBaWdDQkNFQUlBSkJBRFlDQkNBQ0lBQWdBUkFtSWdBTkFTQUJRUUZxQ3lFQlFhNEJJUU1NeFFFTElBSkJ3Z0UyQWh3Z0FpQUFOZ0lNSUFJZ0FVRUJhallDRkVFQUlRTU0zUUVMSUFKQkFEWUNIQ0FDSUFFMkFoUWdBa0dYQ3pZQ0VDQUNRUTAyQWd4QkFDRURETndCQ3lBQ1FRQTJBaHdnQWlBQk5nSVVJQUpCNHhBMkFoQWdBa0VKTmdJTVFRQWhBd3piQVFzZ0FrRUNPZ0FvREt3QkMwRUFJUU1nQWtFQU5nSWNJQUpCcndzMkFoQWdBa0VDTmdJTUlBSWdBVUVCYWpZQ0ZBelpBUXRCQWlFRERMOEJDMEVOSVFNTXZnRUxRU1loQXd5OUFRdEJGU0VEREx3QkMwRVdJUU1NdXdFTFFSZ2hBd3k2QVF0QkhDRURETGtCQzBFZElRTU11QUVMUVNBaEF3eTNBUXRCSVNFRERMWUJDMEVqSVFNTXRRRUxRY1lBSVFNTXRBRUxRUzRoQXd5ekFRdEJQU0VERExJQkMwSExBQ0VERExFQkMwSE9BQ0VERExBQkMwSFlBQ0VEREs4QkMwSFpBQ0VEREs0QkMwSGJBQ0VEREswQkMwSHhBQ0VEREt3QkMwSDBBQ0VEREtzQkMwR05BU0VEREtvQkMwR1hBU0VEREtrQkMwR3BBU0VEREtnQkMwR3ZBU0VEREtjQkMwR3hBU0VEREtZQkN5QUNRUUEyQWdBTFFRQWhBeUFDUVFBMkFod2dBaUFCTmdJVUlBSkI4UnMyQWhBZ0FrRUdOZ0lNREwwQkN5QUNRUUEyQWdBZ0JrRUJhaUVCUVNRTE9nQXBJQUlvQWdRaEFDQUNRUUEyQWdRZ0FpQUFJQUVRSnlJQVJRUkFRZVVBSVFNTW93RUxJQUpCK1FBMkFod2dBaUFCTmdJVUlBSWdBRFlDREVFQUlRTU11d0VMSUFCQkZVY0VRQ0FDUVFBMkFod2dBaUFCTmdJVUlBSkJ6QTQyQWhBZ0FrRWdOZ0lNUVFBaEF3eTdBUXNnQWtINEFEWUNIQ0FDSUFFMkFoUWdBa0hLR0RZQ0VDQUNRUlUyQWd4QkFDRURETG9CQ3lBQ1FRQTJBaHdnQWlBQk5nSVVJQUpCamhzMkFoQWdBa0VHTmdJTVFRQWhBd3k1QVFzZ0FrRUFOZ0ljSUFJZ0FUWUNGQ0FDUWY0Uk5nSVFJQUpCQnpZQ0RFRUFJUU1NdUFFTElBSkJBRFlDSENBQ0lBRTJBaFFnQWtHTUhEWUNFQ0FDUVFjMkFneEJBQ0VERExjQkN5QUNRUUEyQWh3Z0FpQUJOZ0lVSUFKQnd3ODJBaEFnQWtFSE5nSU1RUUFoQXd5MkFRc2dBa0VBTmdJY0lBSWdBVFlDRkNBQ1FjTVBOZ0lRSUFKQkJ6WUNERUVBSVFNTXRRRUxJQUlvQWdRaEFDQUNRUUEyQWdRZ0FpQUFJQUVRSlNJQVJRMFJJQUpCNVFBMkFod2dBaUFCTmdJVUlBSWdBRFlDREVFQUlRTU10QUVMSUFJb0FnUWhBQ0FDUVFBMkFnUWdBaUFBSUFFUUpTSUFSUTBnSUFKQjB3QTJBaHdnQWlBQk5nSVVJQUlnQURZQ0RFRUFJUU1Nc3dFTElBSW9BZ1FoQUNBQ1FRQTJBZ1FnQWlBQUlBRVFKU0lBUlEwaUlBSkIwZ0EyQWh3Z0FpQUJOZ0lVSUFJZ0FEWUNERUVBSVFNTXNnRUxJQUlvQWdRaEFDQUNRUUEyQWdRZ0FpQUFJQUVRSlNJQVJRME9JQUpCNVFBMkFod2dBaUFCTmdJVUlBSWdBRFlDREVFQUlRTU1zUUVMSUFJb0FnUWhBQ0FDUVFBMkFnUWdBaUFBSUFFUUpTSUFSUTBkSUFKQjB3QTJBaHdnQWlBQk5nSVVJQUlnQURZQ0RFRUFJUU1Nc0FFTElBSW9BZ1FoQUNBQ1FRQTJBZ1FnQWlBQUlBRVFKU0lBUlEwZklBSkIwZ0EyQWh3Z0FpQUJOZ0lVSUFJZ0FEWUNERUVBSVFNTXJ3RUxJQUJCUDBjTkFTQUJRUUZxQ3lFQlFRVWhBd3lVQVF0QkFDRURJQUpCQURZQ0hDQUNJQUUyQWhRZ0FrSDlFallDRUNBQ1FRYzJBZ3dNckFFTElBSkJBRFlDSENBQ0lBRTJBaFFnQWtIY0NEWUNFQ0FDUVFjMkFneEJBQ0VEREtzQkN5QUNLQUlFSVFBZ0FrRUFOZ0lFSUFJZ0FDQUJFQ1VpQUVVTkJ5QUNRZVVBTmdJY0lBSWdBVFlDRkNBQ0lBQTJBZ3hCQUNFRERLb0JDeUFDS0FJRUlRQWdBa0VBTmdJRUlBSWdBQ0FCRUNVaUFFVU5GaUFDUWRNQU5nSWNJQUlnQVRZQ0ZDQUNJQUEyQWd4QkFDRURES2tCQ3lBQ0tBSUVJUUFnQWtFQU5nSUVJQUlnQUNBQkVDVWlBRVVOR0NBQ1FkSUFOZ0ljSUFJZ0FUWUNGQ0FDSUFBMkFneEJBQ0VEREtnQkN5QUNRUUEyQWh3Z0FpQUJOZ0lVSUFKQnhnbzJBaEFnQWtFSE5nSU1RUUFoQXd5bkFRc2dBaWdDQkNFQUlBSkJBRFlDQkNBQ0lBQWdBUkFsSWdCRkRRTWdBa0hsQURZQ0hDQUNJQUUyQWhRZ0FpQUFOZ0lNUVFBaEF3eW1BUXNnQWlnQ0JDRUFJQUpCQURZQ0JDQUNJQUFnQVJBbElnQkZEUklnQWtIVEFEWUNIQ0FDSUFFMkFoUWdBaUFBTmdJTVFRQWhBd3lsQVFzZ0FpZ0NCQ0VBSUFKQkFEWUNCQ0FDSUFBZ0FSQWxJZ0JGRFJRZ0FrSFNBRFlDSENBQ0lBRTJBaFFnQWlBQU5nSU1RUUFoQXd5a0FRc2dBaWdDQkNFQUlBSkJBRFlDQkNBQ0lBQWdBUkFsSWdCRkRRQWdBa0hsQURZQ0hDQUNJQUUyQWhRZ0FpQUFOZ0lNUVFBaEF3eWpBUXRCMVFBaEF3eUpBUXNnQUVFVlJ3UkFJQUpCQURZQ0hDQUNJQUUyQWhRZ0FrRzVEVFlDRUNBQ1FSbzJBZ3hCQUNFRERLSUJDeUFDUWVRQU5nSWNJQUlnQVRZQ0ZDQUNRZU1YTmdJUUlBSkJGVFlDREVFQUlRTU1vUUVMSUFKQkFEWUNBQ0FHUVFGcUlRRWdBaTBBS1NJQVFTTnJRUXRKRFFRQ1FDQUFRUVpMRFFCQkFTQUFkRUhLQUhGRkRRQU1CUXRCQUNFRElBSkJBRFlDSENBQ0lBRTJBaFFnQWtIM0NUWUNFQ0FDUVFnMkFnd01vQUVMSUFKQkFEWUNBQ0FHUVFGcUlRRWdBaTBBS1VFaFJnMERJQUpCQURZQ0hDQUNJQUUyQWhRZ0FrR2JDallDRUNBQ1FRZzJBZ3hCQUNFRERKOEJDeUFDUVFBMkFnQUxRUUFoQXlBQ1FRQTJBaHdnQWlBQk5nSVVJQUpCa0RNMkFoQWdBa0VJTmdJTURKMEJDeUFDUVFBMkFnQWdCa0VCYWlFQklBSXRBQ2xCSTBrTkFDQUNRUUEyQWh3Z0FpQUJOZ0lVSUFKQjB3azJBaEFnQWtFSU5nSU1RUUFoQXd5Y0FRdEIwUUFoQXd5Q0FRc2dBUzBBQUVFd2F5SUFRZjhCY1VFS1NRUkFJQUlnQURvQUtpQUJRUUZxSVFGQnp3QWhBd3lDQVFzZ0FpZ0NCQ0VBSUFKQkFEWUNCQ0FDSUFBZ0FSQW9JZ0JGRFlZQklBSkIzZ0EyQWh3Z0FpQUJOZ0lVSUFJZ0FEWUNERUVBSVFNTW1nRUxJQUlvQWdRaEFDQUNRUUEyQWdRZ0FpQUFJQUVRS0NJQVJRMkdBU0FDUWR3QU5nSWNJQUlnQVRZQ0ZDQUNJQUEyQWd4QkFDRURESmtCQ3lBQ0tBSUVJUUFnQWtFQU5nSUVJQUlnQUNBRkVDZ2lBRVVFUUNBRklRRU1od0VMSUFKQjJnQTJBaHdnQWlBRk5nSVVJQUlnQURZQ0RBeVlBUXRCQUNFQlFRRWhBd3NnQWlBRE9nQXJJQVZCQVdvaEF3SkFBa0FDUUNBQ0xRQXRRUkJ4RFFBQ1FBSkFBa0FnQWkwQUtnNERBUUFDQkFzZ0JrVU5Bd3dDQ3lBQURRRU1BZ3NnQVVVTkFRc2dBaWdDQkNFQUlBSkJBRFlDQkNBQ0lBQWdBeEFvSWdCRkJFQWdBeUVCREFJTElBSkIyQUEyQWh3Z0FpQUROZ0lVSUFJZ0FEWUNERUVBSVFNTW1BRUxJQUlvQWdRaEFDQUNRUUEyQWdRZ0FpQUFJQU1RS0NJQVJRUkFJQU1oQVF5SEFRc2dBa0haQURZQ0hDQUNJQU0yQWhRZ0FpQUFOZ0lNUVFBaEF3eVhBUXRCekFBaEF3eDlDeUFBUVJWSEJFQWdBa0VBTmdJY0lBSWdBVFlDRkNBQ1FaUU5OZ0lRSUFKQklUWUNERUVBSVFNTWxnRUxJQUpCMXdBMkFod2dBaUFCTmdJVUlBSkJ5UmMyQWhBZ0FrRVZOZ0lNUVFBaEF3eVZBUXRCQUNFRElBSkJBRFlDSENBQ0lBRTJBaFFnQWtHQUVUWUNFQ0FDUVFrMkFnd01sQUVMSUFJb0FnUWhBQ0FDUVFBMkFnUWdBaUFBSUFFUUpTSUFSUTBBSUFKQjB3QTJBaHdnQWlBQk5nSVVJQUlnQURZQ0RFRUFJUU1Na3dFTFFja0FJUU1NZVFzZ0FrRUFOZ0ljSUFJZ0FUWUNGQ0FDUWNFb05nSVFJQUpCQnpZQ0RDQUNRUUEyQWdCQkFDRURESkVCQ3lBQ0tBSUVJUUJCQUNFRElBSkJBRFlDQkNBQ0lBQWdBUkFsSWdCRkRRQWdBa0hTQURZQ0hDQUNJQUUyQWhRZ0FpQUFOZ0lNREpBQkMwSElBQ0VEREhZTElBSkJBRFlDQUNBRklRRUxJQUpCZ0JJN0FTb2dBVUVCYWlFQlFRQWhBQUpBSUFJb0FqZ2lBMFVOQUNBREtBSXdJZ05GRFFBZ0FpQURFUUFBSVFBTElBQU5BUXRCeHdBaEF3eHpDeUFBUVJWR0JFQWdBa0hSQURZQ0hDQUNJQUUyQWhRZ0FrSGpGellDRUNBQ1FSVTJBZ3hCQUNFRERJd0JDMEVBSVFNZ0FrRUFOZ0ljSUFJZ0FUWUNGQ0FDUWJrTk5nSVFJQUpCR2pZQ0RBeUxBUXRCQUNFRElBSkJBRFlDSENBQ0lBRTJBaFFnQWtHZ0dUWUNFQ0FDUVI0MkFnd01pZ0VMSUFFdEFBQkJPa1lFUUNBQ0tBSUVJUUJCQUNFRElBSkJBRFlDQkNBQ0lBQWdBUkFwSWdCRkRRRWdBa0hEQURZQ0hDQUNJQUEyQWd3Z0FpQUJRUUZxTmdJVURJb0JDMEVBSVFNZ0FrRUFOZ0ljSUFJZ0FUWUNGQ0FDUWJFUk5nSVFJQUpCQ2pZQ0RBeUpBUXNnQVVFQmFpRUJRVHNoQXd4dkN5QUNRY01BTmdJY0lBSWdBRFlDRENBQ0lBRkJBV28yQWhRTWh3RUxRUUFoQXlBQ1FRQTJBaHdnQWlBQk5nSVVJQUpCOEE0MkFoQWdBa0VjTmdJTURJWUJDeUFDSUFJdkFUQkJFSEk3QVRBTVpnc0NRQ0FDTHdFd0lnQkJDSEZGRFFBZ0FpMEFLRUVCUncwQUlBSXRBQzFCQ0hGRkRRTUxJQUlnQUVIMyt3TnhRWUFFY2pzQk1Bd0VDeUFCSUFSSEJFQUNRQU5BSUFFdEFBQkJNR3NpQUVIL0FYRkJDazhFUUVFMUlRTU1iZ3NnQWlrRElDSUtRcG16NXN5WnMrYk1HVllOQVNBQ0lBcENDbjRpQ2pjRElDQUtJQUN0UXY4Qmd5SUxRbitGVmcwQklBSWdDaUFMZkRjRElDQUVJQUZCQVdvaUFVY05BQXRCT1NFRERJVUJDeUFDS0FJRUlRQkJBQ0VESUFKQkFEWUNCQ0FDSUFBZ0FVRUJhaUlCRUNvaUFBME1ESGNMUVRraEF3eURBUXNnQWkwQU1FRWdjUTBHUWNVQklRTU1hUXRCQUNFRElBSkJBRFlDQkNBQ0lBRWdBUkFxSWdCRkRRUWdBa0U2TmdJY0lBSWdBRFlDRENBQ0lBRkJBV28yQWhRTWdRRUxJQUl0QUNoQkFVY05BQ0FDTFFBdFFRaHhSUTBCQzBFM0lRTU1aZ3NnQWlnQ0JDRUFRUUFoQXlBQ1FRQTJBZ1FnQWlBQUlBRVFLaUlBQkVBZ0FrRTdOZ0ljSUFJZ0FEWUNEQ0FDSUFGQkFXbzJBaFFNZndzZ0FVRUJhaUVCREc0TElBSkJDRG9BTEF3RUN5QUJRUUZxSVFFTWJRdEJBQ0VESUFKQkFEWUNIQ0FDSUFFMkFoUWdBa0hrRWpZQ0VDQUNRUVEyQWd3TWV3c2dBaWdDQkNFQVFRQWhBeUFDUVFBMkFnUWdBaUFBSUFFUUtpSUFSUTFzSUFKQk56WUNIQ0FDSUFFMkFoUWdBaUFBTmdJTURIb0xJQUlnQWk4Qk1FRWdjanNCTUF0Qk1DRURERjhMSUFKQk5qWUNIQ0FDSUFFMkFoUWdBaUFBTmdJTURIY0xJQUJCTEVjTkFTQUJRUUZxSVFCQkFTRUJBa0FDUUFKQUFrQUNRQ0FDTFFBc1FRVnJEZ1FEQVFJRUFBc2dBQ0VCREFRTFFRSWhBUXdCQzBFRUlRRUxJQUpCQVRvQUxDQUNJQUl2QVRBZ0FYSTdBVEFnQUNFQkRBRUxJQUlnQWk4Qk1FRUljanNCTUNBQUlRRUxRVGtoQXd4Y0N5QUNRUUE2QUN3TFFUUWhBd3hhQ3lBQklBUkdCRUJCTFNFRERITUxBa0FDUUFOQUFrQWdBUzBBQUVFS2F3NEVBZ0FBQXdBTElBUWdBVUVCYWlJQlJ3MEFDMEV0SVFNTWRBc2dBaWdDQkNFQVFRQWhBeUFDUVFBMkFnUWdBaUFBSUFFUUtpSUFSUTBDSUFKQkxEWUNIQ0FDSUFFMkFoUWdBaUFBTmdJTURITUxJQUlvQWdRaEFFRUFJUU1nQWtFQU5nSUVJQUlnQUNBQkVDb2lBRVVFUUNBQlFRRnFJUUVNQWdzZ0FrRXNOZ0ljSUFJZ0FEWUNEQ0FDSUFGQkFXbzJBaFFNY2dzZ0FTMEFBRUVOUmdSQUlBSW9BZ1FoQUVFQUlRTWdBa0VBTmdJRUlBSWdBQ0FCRUNvaUFFVUVRQ0FCUVFGcUlRRU1BZ3NnQWtFc05nSWNJQUlnQURZQ0RDQUNJQUZCQVdvMkFoUU1jZ3NnQWkwQUxVRUJjUVJBUWNRQklRTU1XUXNnQWlnQ0JDRUFRUUFoQXlBQ1FRQTJBZ1FnQWlBQUlBRVFLaUlBRFFFTVpRdEJMeUVEREZjTElBSkJMallDSENBQ0lBRTJBaFFnQWlBQU5nSU1ERzhMUVFBaEF5QUNRUUEyQWh3Z0FpQUJOZ0lVSUFKQjhCUTJBaEFnQWtFRE5nSU1ERzRMUVFFaEF3SkFBa0FDUUFKQUlBSXRBQ3hCQldzT0JBTUJBZ0FFQ3lBQ0lBSXZBVEJCQ0hJN0FUQU1Bd3RCQWlFRERBRUxRUVFoQXdzZ0FrRUJPZ0FzSUFJZ0FpOEJNQ0FEY2pzQk1BdEJLaUVEREZNTFFRQWhBeUFDUVFBMkFod2dBaUFCTmdJVUlBSkI0UTgyQWhBZ0FrRUtOZ0lNREdzTFFRRWhBd0pBQWtBQ1FBSkFBa0FDUUNBQ0xRQXNRUUpyRGdjRkJBUURBUUlBQkFzZ0FpQUNMd0V3UVFoeU93RXdEQU1MUVFJaEF3d0JDMEVFSVFNTElBSkJBVG9BTENBQ0lBSXZBVEFnQTNJN0FUQUxRU3NoQXd4U0MwRUFJUU1nQWtFQU5nSWNJQUlnQVRZQ0ZDQUNRYXNTTmdJUUlBSkJDellDREF4cUMwRUFJUU1nQWtFQU5nSWNJQUlnQVRZQ0ZDQUNRZjBOTmdJUUlBSkJIVFlDREF4cEN5QUJJQVJIQkVBRFFDQUJMUUFBUVNCSERVZ2dCQ0FCUVFGcUlnRkhEUUFMUVNVaEF3eHBDMEVsSVFNTWFBc2dBaTBBTFVFQmNRUkFRY01CSVFNTVR3c2dBaWdDQkNFQVFRQWhBeUFDUVFBMkFnUWdBaUFBSUFFUUtTSUFCRUFnQWtFbU5nSWNJQUlnQURZQ0RDQUNJQUZCQVdvMkFoUU1hQXNnQVVFQmFpRUJERndMSUFGQkFXb2hBU0FDTHdFd0lnQkJnQUZ4QkVCQkFDRUFBa0FnQWlnQ09DSURSUTBBSUFNb0FsUWlBMFVOQUNBQ0lBTVJBQUFoQUFzZ0FFVU5CaUFBUVJWSERSOGdBa0VGTmdJY0lBSWdBVFlDRkNBQ1Fma1hOZ0lRSUFKQkZUWUNERUVBSVFNTVp3c0NRQ0FBUWFBRWNVR2dCRWNOQUNBQ0xRQXRRUUp4RFFCQkFDRURJQUpCQURZQ0hDQUNJQUUyQWhRZ0FrR1dFellDRUNBQ1FRUTJBZ3dNWndzZ0FnSi9JQUl2QVRCQkZIRkJGRVlFUUVFQklBSXRBQ2hCQVVZTkFSb2dBaThCTWtIbEFFWU1BUXNnQWkwQUtVRUZSZ3M2QUM1QkFDRUFBa0FnQWlnQ09DSURSUTBBSUFNb0FpUWlBMFVOQUNBQ0lBTVJBQUFoQUFzQ1FBSkFBa0FDUUFKQUlBQU9GZ0lCQUFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFNRUN5QUNRUUU2QUM0TElBSWdBaThCTUVIQUFISTdBVEFMUVNjaEF3eFBDeUFDUVNNMkFod2dBaUFCTmdJVUlBSkJwUlkyQWhBZ0FrRVZOZ0lNUVFBaEF3eG5DMEVBSVFNZ0FrRUFOZ0ljSUFJZ0FUWUNGQ0FDUWRVTE5nSVFJQUpCRVRZQ0RBeG1DMEVBSVFBQ1FDQUNLQUk0SWdORkRRQWdBeWdDTENJRFJRMEFJQUlnQXhFQUFDRUFDeUFBRFFFTFFRNGhBd3hMQ3lBQVFSVkdCRUFnQWtFQ05nSWNJQUlnQVRZQ0ZDQUNRYkFZTmdJUUlBSkJGVFlDREVFQUlRTU1aQXRCQUNFRElBSkJBRFlDSENBQ0lBRTJBaFFnQWtHbkRqWUNFQ0FDUVJJMkFnd01Zd3RCQUNFRElBSkJBRFlDSENBQ0lBRTJBaFFnQWtHcUhEWUNFQ0FDUVE4MkFnd01ZZ3NnQWlnQ0JDRUFRUUFoQXlBQ1FRQTJBZ1FnQWlBQUlBRWdDcWRxSWdFUUt5SUFSUTBBSUFKQkJUWUNIQ0FDSUFFMkFoUWdBaUFBTmdJTURHRUxRUThoQXd4SEMwRUFJUU1nQWtFQU5nSWNJQUlnQVRZQ0ZDQUNRYzBUTmdJUUlBSkJERFlDREF4ZkMwSUJJUW9MSUFGQkFXb2hBUUpBSUFJcEF5QWlDMEwvLy8vLy8vLy8vdzlZQkVBZ0FpQUxRZ1NHSUFxRU53TWdEQUVMUVFBaEF5QUNRUUEyQWh3Z0FpQUJOZ0lVSUFKQnJRazJBaEFnQWtFTU5nSU1ERjRMUVNRaEF3eEVDMEVBSVFNZ0FrRUFOZ0ljSUFJZ0FUWUNGQ0FDUWMwVE5nSVFJQUpCRERZQ0RBeGNDeUFDS0FJRUlRQkJBQ0VESUFKQkFEWUNCQ0FDSUFBZ0FSQXNJZ0JGQkVBZ0FVRUJhaUVCREZJTElBSkJGellDSENBQ0lBQTJBZ3dnQWlBQlFRRnFOZ0lVREZzTElBSW9BZ1FoQUVFQUlRTWdBa0VBTmdJRUFrQWdBaUFBSUFFUUxDSUFSUVJBSUFGQkFXb2hBUXdCQ3lBQ1FSWTJBaHdnQWlBQU5nSU1JQUlnQVVFQmFqWUNGQXhiQzBFZklRTU1RUXRCQUNFRElBSkJBRFlDSENBQ0lBRTJBaFFnQWtHYUR6WUNFQ0FDUVNJMkFnd01XUXNnQWlnQ0JDRUFRUUFoQXlBQ1FRQTJBZ1FnQWlBQUlBRVFMU0lBUlFSQUlBRkJBV29oQVF4UUN5QUNRUlEyQWh3Z0FpQUFOZ0lNSUFJZ0FVRUJhallDRkF4WUN5QUNLQUlFSVFCQkFDRURJQUpCQURZQ0JBSkFJQUlnQUNBQkVDMGlBRVVFUUNBQlFRRnFJUUVNQVFzZ0FrRVROZ0ljSUFJZ0FEWUNEQ0FDSUFGQkFXbzJBaFFNV0F0QkhpRURERDRMUVFBaEF5QUNRUUEyQWh3Z0FpQUJOZ0lVSUFKQnhndzJBaEFnQWtFak5nSU1ERllMSUFJb0FnUWhBRUVBSVFNZ0FrRUFOZ0lFSUFJZ0FDQUJFQzBpQUVVRVFDQUJRUUZxSVFFTVRnc2dBa0VSTmdJY0lBSWdBRFlDRENBQ0lBRkJBV28yQWhRTVZRc2dBa0VRTmdJY0lBSWdBVFlDRkNBQ0lBQTJBZ3dNVkF0QkFDRURJQUpCQURZQ0hDQUNJQUUyQWhRZ0FrSEdERFlDRUNBQ1FTTTJBZ3dNVXd0QkFDRURJQUpCQURZQ0hDQUNJQUUyQWhRZ0FrSEFGVFlDRUNBQ1FRSTJBZ3dNVWdzZ0FpZ0NCQ0VBUVFBaEF5QUNRUUEyQWdRQ1FDQUNJQUFnQVJBdElnQkZCRUFnQVVFQmFpRUJEQUVMSUFKQkRqWUNIQ0FDSUFBMkFnd2dBaUFCUVFGcU5nSVVERklMUVJzaEF3dzRDMEVBSVFNZ0FrRUFOZ0ljSUFJZ0FUWUNGQ0FDUWNZTU5nSVFJQUpCSXpZQ0RBeFFDeUFDS0FJRUlRQkJBQ0VESUFKQkFEWUNCQUpBSUFJZ0FDQUJFQ3dpQUVVRVFDQUJRUUZxSVFFTUFRc2dBa0VOTmdJY0lBSWdBRFlDRENBQ0lBRkJBV28yQWhRTVVBdEJHaUVERERZTFFRQWhBeUFDUVFBMkFod2dBaUFCTmdJVUlBSkJtZzgyQWhBZ0FrRWlOZ0lNREU0TElBSW9BZ1FoQUVFQUlRTWdBa0VBTmdJRUFrQWdBaUFBSUFFUUxDSUFSUVJBSUFGQkFXb2hBUXdCQ3lBQ1FRdzJBaHdnQWlBQU5nSU1JQUlnQVVFQmFqWUNGQXhPQzBFWklRTU1OQXRCQUNFRElBSkJBRFlDSENBQ0lBRTJBaFFnQWtHYUR6WUNFQ0FDUVNJMkFnd01UQXNnQUVFVlJ3UkFRUUFoQXlBQ1FRQTJBaHdnQWlBQk5nSVVJQUpCZ3d3MkFoQWdBa0VUTmdJTURFd0xJQUpCQ2pZQ0hDQUNJQUUyQWhRZ0FrSGtGallDRUNBQ1FSVTJBZ3hCQUNFRERFc0xJQUlvQWdRaEFFRUFJUU1nQWtFQU5nSUVJQUlnQUNBQklBcW5haUlCRUNzaUFBUkFJQUpCQnpZQ0hDQUNJQUUyQWhRZ0FpQUFOZ0lNREVzTFFSTWhBd3d4Q3lBQVFSVkhCRUJCQUNFRElBSkJBRFlDSENBQ0lBRTJBaFFnQWtIYURUWUNFQ0FDUVJRMkFnd01TZ3NnQWtFZU5nSWNJQUlnQVRZQ0ZDQUNRZmtYTmdJUUlBSkJGVFlDREVFQUlRTU1TUXRCQUNFQUFrQWdBaWdDT0NJRFJRMEFJQU1vQWl3aUEwVU5BQ0FDSUFNUkFBQWhBQXNnQUVVTlFTQUFRUlZHQkVBZ0FrRUROZ0ljSUFJZ0FUWUNGQ0FDUWJBWU5nSVFJQUpCRlRZQ0RFRUFJUU1NU1F0QkFDRURJQUpCQURZQ0hDQUNJQUUyQWhRZ0FrR25EallDRUNBQ1FSSTJBZ3dNU0F0QkFDRURJQUpCQURZQ0hDQUNJQUUyQWhRZ0FrSGFEVFlDRUNBQ1FSUTJBZ3dNUnd0QkFDRURJQUpCQURZQ0hDQUNJQUUyQWhRZ0FrR25EallDRUNBQ1FSSTJBZ3dNUmdzZ0FrRUFPZ0F2SUFJdEFDMUJCSEZGRFQ4TElBSkJBRG9BTHlBQ1FRRTZBRFJCQUNFRERDc0xRUUFoQXlBQ1FRQTJBaHdnQWtIa0VUWUNFQ0FDUVFjMkFnd2dBaUFCUVFGcU5nSVVERU1MQWtBRFFBSkFJQUV0QUFCQkNtc09CQUFDQWdBQ0N5QUVJQUZCQVdvaUFVY05BQXRCM1FFaEF3eERDd0pBQWtBZ0FpMEFORUVCUncwQVFRQWhBQUpBSUFJb0FqZ2lBMFVOQUNBREtBSllJZ05GRFFBZ0FpQURFUUFBSVFBTElBQkZEUUFnQUVFVlJ3MEJJQUpCM0FFMkFod2dBaUFCTmdJVUlBSkIxUlkyQWhBZ0FrRVZOZ0lNUVFBaEF3eEVDMEhCQVNFRERDb0xJQUpCQURZQ0hDQUNJQUUyQWhRZ0FrSHBDellDRUNBQ1FSODJBZ3hCQUNFRERFSUxBa0FDUUNBQ0xRQW9RUUZyRGdJRUFRQUxRY0FCSVFNTUtRdEJ1UUVoQXd3b0N5QUNRUUk2QUM5QkFDRUFBa0FnQWlnQ09DSURSUTBBSUFNb0FnQWlBMFVOQUNBQ0lBTVJBQUFoQUFzZ0FFVUVRRUhDQVNFRERDZ0xJQUJCRlVjRVFDQUNRUUEyQWh3Z0FpQUJOZ0lVSUFKQnBBdzJBaEFnQWtFUU5nSU1RUUFoQXd4QkN5QUNRZHNCTmdJY0lBSWdBVFlDRkNBQ1Fmb1dOZ0lRSUFKQkZUWUNERUVBSVFNTVFBc2dBU0FFUmdSQVFkb0JJUU1NUUFzZ0FTMEFBRUhJQUVZTkFTQUNRUUU2QUNnTFFhd0JJUU1NSlF0QnZ3RWhBd3drQ3lBQklBUkhCRUFnQWtFUU5nSUlJQUlnQVRZQ0JFRytBU0VERENRTFFka0JJUU1NUEFzZ0FTQUVSZ1JBUWRnQklRTU1QQXNnQVMwQUFFSElBRWNOQkNBQlFRRnFJUUZCdlFFaEF3d2lDeUFCSUFSR0JFQkIxd0VoQXd3N0N3SkFBa0FnQVMwQUFFSEZBR3NPRUFBRkJRVUZCUVVGQlFVRkJRVUZCUUVGQ3lBQlFRRnFJUUZCdXdFaEF3d2lDeUFCUVFGcUlRRkJ2QUVoQXd3aEMwSFdBU0VESUFFZ0JFWU5PU0FDS0FJQUlnQWdCQ0FCYTJvaEJTQUJJQUJyUVFKcUlRWUNRQU5BSUFFdEFBQWdBRUdEMEFCcUxRQUFSdzBESUFCQkFrWU5BU0FBUVFGcUlRQWdCQ0FCUVFGcUlnRkhEUUFMSUFJZ0JUWUNBQXc2Q3lBQ0tBSUVJUUFnQWtJQU53TUFJQUlnQUNBR1FRRnFJZ0VRSnlJQVJRUkFRY1lCSVFNTUlRc2dBa0hWQVRZQ0hDQUNJQUUyQWhRZ0FpQUFOZ0lNUVFBaEF3dzVDMEhVQVNFRElBRWdCRVlOT0NBQ0tBSUFJZ0FnQkNBQmEyb2hCU0FCSUFCclFRRnFJUVlDUUFOQUlBRXRBQUFnQUVHQjBBQnFMUUFBUncwQ0lBQkJBVVlOQVNBQVFRRnFJUUFnQkNBQlFRRnFJZ0ZIRFFBTElBSWdCVFlDQUF3NUN5QUNRWUVFT3dFb0lBSW9BZ1FoQUNBQ1FnQTNBd0FnQWlBQUlBWkJBV29pQVJBbklnQU5Bd3dDQ3lBQ1FRQTJBZ0FMUVFBaEF5QUNRUUEyQWh3Z0FpQUJOZ0lVSUFKQjJCczJBaEFnQWtFSU5nSU1ERFlMUWJvQklRTU1IQXNnQWtIVEFUWUNIQ0FDSUFFMkFoUWdBaUFBTmdJTVFRQWhBd3cwQzBFQUlRQUNRQ0FDS0FJNElnTkZEUUFnQXlnQ09DSURSUTBBSUFJZ0F4RUFBQ0VBQ3lBQVJRMEFJQUJCRlVZTkFTQUNRUUEyQWh3Z0FpQUJOZ0lVSUFKQnpBNDJBaEFnQWtFZ05nSU1RUUFoQXd3ekMwSGtBQ0VEREJrTElBSkIrQUEyQWh3Z0FpQUJOZ0lVSUFKQnloZzJBaEFnQWtFVk5nSU1RUUFoQXd3eEMwSFNBU0VESUFRZ0FTSUFSZzB3SUFRZ0FXc2dBaWdDQUNJQmFpRUZJQUFnQVd0QkJHb2hCZ0pBQTBBZ0FDMEFBQ0FCUWZ6UEFHb3RBQUJIRFFFZ0FVRUVSZzBESUFGQkFXb2hBU0FFSUFCQkFXb2lBRWNOQUFzZ0FpQUZOZ0lBRERFTElBSkJBRFlDSENBQ0lBQTJBaFFnQWtHUU16WUNFQ0FDUVFnMkFnd2dBa0VBTmdJQVFRQWhBd3d3Q3lBQklBUkhCRUFnQWtFT05nSUlJQUlnQVRZQ0JFRzNBU0VEREJjTFFkRUJJUU1NTHdzZ0FrRUFOZ0lBSUFaQkFXb2hBUXRCdUFFaEF3d1VDeUFCSUFSR0JFQkIwQUVoQXd3dEN5QUJMUUFBUVRCcklnQkIvd0Z4UVFwSkJFQWdBaUFBT2dBcUlBRkJBV29oQVVHMkFTRUREQlFMSUFJb0FnUWhBQ0FDUVFBMkFnUWdBaUFBSUFFUUtDSUFSUTBVSUFKQnp3RTJBaHdnQWlBQk5nSVVJQUlnQURZQ0RFRUFJUU1NTEFzZ0FTQUVSZ1JBUWM0QklRTU1MQXNDUUNBQkxRQUFRUzVHQkVBZ0FVRUJhaUVCREFFTElBSW9BZ1FoQUNBQ1FRQTJBZ1FnQWlBQUlBRVFLQ0lBUlEwVklBSkJ6UUUyQWh3Z0FpQUJOZ0lVSUFJZ0FEWUNERUVBSVFNTUxBdEJ0UUVoQXd3U0N5QUVJQUVpQlVZRVFFSE1BU0VERENzTFFRQWhBRUVCSVFGQkFTRUdRUUFoQXdKQUFrQUNRQUpBQWtBQ2Z3SkFBa0FDUUFKQUFrQUNRQUpBSUFVdEFBQkJNR3NPQ2dvSkFBRUNBd1FGQmdnTEMwRUNEQVlMUVFNTUJRdEJCQXdFQzBFRkRBTUxRUVlNQWd0QkJ3d0JDMEVJQ3lFRFFRQWhBVUVBSVFZTUFndEJDU0VEUVFFaEFFRUFJUUZCQUNFR0RBRUxRUUFoQVVFQklRTUxJQUlnQXpvQUt5QUZRUUZxSVFNQ1FBSkFJQUl0QUMxQkVIRU5BQUpBQWtBQ1FDQUNMUUFxRGdNQkFBSUVDeUFHUlEwRERBSUxJQUFOQVF3Q0N5QUJSUTBCQ3lBQ0tBSUVJUUFnQWtFQU5nSUVJQUlnQUNBREVDZ2lBRVVFUUNBRElRRU1Bd3NnQWtISkFUWUNIQ0FDSUFNMkFoUWdBaUFBTmdJTVFRQWhBd3d0Q3lBQ0tBSUVJUUFnQWtFQU5nSUVJQUlnQUNBREVDZ2lBRVVFUUNBRElRRU1HQXNnQWtIS0FUWUNIQ0FDSUFNMkFoUWdBaUFBTmdJTVFRQWhBd3dzQ3lBQ0tBSUVJUUFnQWtFQU5nSUVJQUlnQUNBRkVDZ2lBRVVFUUNBRklRRU1GZ3NnQWtITEFUWUNIQ0FDSUFVMkFoUWdBaUFBTmdJTURDc0xRYlFCSVFNTUVRdEJBQ0VBQWtBZ0FpZ0NPQ0lEUlEwQUlBTW9BandpQTBVTkFDQUNJQU1SQUFBaEFBc0NRQ0FBQkVBZ0FFRVZSZzBCSUFKQkFEWUNIQ0FDSUFFMkFoUWdBa0dVRFRZQ0VDQUNRU0UyQWd4QkFDRUREQ3NMUWJJQklRTU1FUXNnQWtISUFUWUNIQ0FDSUFFMkFoUWdBa0hKRnpZQ0VDQUNRUlUyQWd4QkFDRUREQ2tMSUFKQkFEWUNBQ0FHUVFGcUlRRkI5UUFoQXd3UEN5QUNMUUFwUVFWR0JFQkI0d0FoQXd3UEMwSGlBQ0VEREE0TElBQWhBU0FDUVFBMkFnQUxJQUpCQURvQUxFRUpJUU1NREFzZ0FrRUFOZ0lBSUFkQkFXb2hBVUhBQUNFRERBc0xRUUVMT2dBc0lBSkJBRFlDQUNBR1FRRnFJUUVMUVNraEF3d0lDMEU0SVFNTUJ3c0NRQ0FCSUFSSEJFQURRQ0FCTFFBQVFZQSthaTBBQUNJQVFRRkhCRUFnQUVFQ1J3MERJQUZCQVdvaEFRd0ZDeUFFSUFGQkFXb2lBVWNOQUF0QlBpRUREQ0VMUVQ0aEF3d2dDd3NnQWtFQU9nQXNEQUVMUVFzaEF3d0VDMEU2SVFNTUF3c2dBVUVCYWlFQlFTMGhBd3dDQ3lBQ0lBRTZBQ3dnQWtFQU5nSUFJQVpCQVdvaEFVRU1JUU1NQVFzZ0FrRUFOZ0lBSUFaQkFXb2hBVUVLSVFNTUFBc0FDMEVBSVFNZ0FrRUFOZ0ljSUFJZ0FUWUNGQ0FDUWMwUU5nSVFJQUpCQ1RZQ0RBd1hDMEVBSVFNZ0FrRUFOZ0ljSUFJZ0FUWUNGQ0FDUWVrS05nSVFJQUpCQ1RZQ0RBd1dDMEVBSVFNZ0FrRUFOZ0ljSUFJZ0FUWUNGQ0FDUWJjUU5nSVFJQUpCQ1RZQ0RBd1ZDMEVBSVFNZ0FrRUFOZ0ljSUFJZ0FUWUNGQ0FDUVp3Uk5nSVFJQUpCQ1RZQ0RBd1VDMEVBSVFNZ0FrRUFOZ0ljSUFJZ0FUWUNGQ0FDUWMwUU5nSVFJQUpCQ1RZQ0RBd1RDMEVBSVFNZ0FrRUFOZ0ljSUFJZ0FUWUNGQ0FDUWVrS05nSVFJQUpCQ1RZQ0RBd1NDMEVBSVFNZ0FrRUFOZ0ljSUFJZ0FUWUNGQ0FDUWJjUU5nSVFJQUpCQ1RZQ0RBd1JDMEVBSVFNZ0FrRUFOZ0ljSUFJZ0FUWUNGQ0FDUVp3Uk5nSVFJQUpCQ1RZQ0RBd1FDMEVBSVFNZ0FrRUFOZ0ljSUFJZ0FUWUNGQ0FDUVpjVk5nSVFJQUpCRHpZQ0RBd1BDMEVBSVFNZ0FrRUFOZ0ljSUFJZ0FUWUNGQ0FDUVpjVk5nSVFJQUpCRHpZQ0RBd09DMEVBSVFNZ0FrRUFOZ0ljSUFJZ0FUWUNGQ0FDUWNBU05nSVFJQUpCQ3pZQ0RBd05DMEVBSVFNZ0FrRUFOZ0ljSUFJZ0FUWUNGQ0FDUVpVSk5nSVFJQUpCQ3pZQ0RBd01DMEVBSVFNZ0FrRUFOZ0ljSUFJZ0FUWUNGQ0FDUWVFUE5nSVFJQUpCQ2pZQ0RBd0xDMEVBSVFNZ0FrRUFOZ0ljSUFJZ0FUWUNGQ0FDUWZzUE5nSVFJQUpCQ2pZQ0RBd0tDMEVBSVFNZ0FrRUFOZ0ljSUFJZ0FUWUNGQ0FDUWZFWk5nSVFJQUpCQWpZQ0RBd0pDMEVBSVFNZ0FrRUFOZ0ljSUFJZ0FUWUNGQ0FDUWNRVU5nSVFJQUpCQWpZQ0RBd0lDMEVBSVFNZ0FrRUFOZ0ljSUFJZ0FUWUNGQ0FDUWZJVk5nSVFJQUpCQWpZQ0RBd0hDeUFDUVFJMkFod2dBaUFCTmdJVUlBSkJuQm8yQWhBZ0FrRVdOZ0lNUVFBaEF3d0dDMEVCSVFNTUJRdEIxQUFoQXlBQklBUkdEUVFnQ0VFSWFpRUpJQUlvQWdBaEJRSkFBa0FnQVNBRVJ3UkFJQVZCMk1JQWFpRUhJQVFnQldvZ0FXc2hBQ0FGUVg5elFRcHFJZ1VnQVdvaEJnTkFJQUV0QUFBZ0J5MEFBRWNFUUVFQ0lRY01Bd3NnQlVVRVFFRUFJUWNnQmlFQkRBTUxJQVZCQVdzaEJTQUhRUUZxSVFjZ0JDQUJRUUZxSWdGSERRQUxJQUFoQlNBRUlRRUxJQWxCQVRZQ0FDQUNJQVUyQWdBTUFRc2dBa0VBTmdJQUlBa2dCellDQUFzZ0NTQUJOZ0lFSUFnb0Fnd2hBQ0FJS0FJSURnTUJCQUlBQ3dBTElBSkJBRFlDSENBQ1FiVWFOZ0lRSUFKQkZ6WUNEQ0FDSUFCQkFXbzJBaFJCQUNFRERBSUxJQUpCQURZQ0hDQUNJQUEyQWhRZ0FrSEtHallDRUNBQ1FRazJBZ3hCQUNFRERBRUxJQUVnQkVZRVFFRWlJUU1NQVFzZ0FrRUpOZ0lJSUFJZ0FUWUNCRUVoSVFNTElBaEJFR29rQUNBRFJRUkFJQUlvQWd3aEFBd0JDeUFDSUFNMkFoeEJBQ0VBSUFJb0FnUWlBVVVOQUNBQ0lBRWdCQ0FDS0FJSUVRRUFJZ0ZGRFFBZ0FpQUVOZ0lVSUFJZ0FUWUNEQ0FCSVFBTElBQUx2Z0lCQW44Z0FFRUFPZ0FBSUFCQjNBQnFJZ0ZCQVd0QkFEb0FBQ0FBUVFBNkFBSWdBRUVBT2dBQklBRkJBMnRCQURvQUFDQUJRUUpyUVFBNkFBQWdBRUVBT2dBRElBRkJCR3RCQURvQUFFRUFJQUJyUVFOeElnRWdBR29pQUVFQU5nSUFRZHdBSUFGclFYeHhJZ0lnQUdvaUFVRUVhMEVBTmdJQUFrQWdBa0VKU1EwQUlBQkJBRFlDQ0NBQVFRQTJBZ1FnQVVFSWEwRUFOZ0lBSUFGQkRHdEJBRFlDQUNBQ1FSbEpEUUFnQUVFQU5nSVlJQUJCQURZQ0ZDQUFRUUEyQWhBZ0FFRUFOZ0lNSUFGQkVHdEJBRFlDQUNBQlFSUnJRUUEyQWdBZ0FVRVlhMEVBTmdJQUlBRkJIR3RCQURZQ0FDQUNJQUJCQkhGQkdISWlBbXNpQVVFZ1NRMEFJQUFnQW1vaEFBTkFJQUJDQURjREdDQUFRZ0EzQXhBZ0FFSUFOd01JSUFCQ0FEY0RBQ0FBUVNCcUlRQWdBVUVnYXlJQlFSOUxEUUFMQ3d0V0FRRi9Ba0FnQUNnQ0RBMEFBa0FDUUFKQUFrQWdBQzBBTHc0REFRQURBZ3NnQUNnQ09DSUJSUTBBSUFFb0Fpd2lBVVVOQUNBQUlBRVJBQUFpQVEwREMwRUFEd3NBQ3lBQVFjTVdOZ0lRUVE0aEFRc2dBUXNhQUNBQUtBSU1SUVJBSUFCQjBSczJBaEFnQUVFVk5nSU1Dd3NVQUNBQUtBSU1RUlZHQkVBZ0FFRUFOZ0lNQ3dzVUFDQUFLQUlNUVJaR0JFQWdBRUVBTmdJTUN3c0hBQ0FBS0FJTUN3Y0FJQUFvQWhBTENRQWdBQ0FCTmdJUUN3Y0FJQUFvQWhRTEZ3QWdBRUVrVHdSQUFBc2dBRUVDZEVHZ00yb29BZ0FMRndBZ0FFRXVUd1JBQUFzZ0FFRUNkRUd3Tkdvb0FnQUx2d2tCQVg5QjZ5Z2hBUUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBSUFCQjVBQnJEdlFEWTJJQUFXRmhZV0ZoWVFJREJBVmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoQmdjSUNRb0xEQTBPRDJGaFlXRmhFR0ZoWVdGaFlXRmhZV0ZoRVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVJJVEZCVVdGeGdaR2h0aFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaEhCMGVIeUFoSWlNa0pTWW5LQ2txS3l3dExpOHdNVEl6TkRVMllUYzRPVHBoWVdGaFlXRmhZVHRoWVdFOFlXRmhZVDArUDJGaFlXRmhZV0ZoUUdGaFFXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZVUpEUkVWR1IwaEpTa3RNVFU1UFVGRlNVMkZoWVdGaFlXRmhWRlZXVjFoWldsdGhYRjFoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGZVlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFgyQmhDMEhoSnc4TFFhUWhEd3RCeXl3UEMwSCtNUThMUWNBa0R3dEJxeVFQQzBHTktBOExRZUltRHd0QmdEQVBDMEc1THc4TFFkY2tEd3RCN3g4UEMwSGhIdzhMUWZvZkR3dEI4aUFQQzBHb0x3OExRYTR5RHd0QmlEQVBDMEhzSnc4TFFZSWlEd3RCamgwUEMwSFFMZzhMUWNvakR3dEJ4VElQQzBIZkhBOExRZEljRHd0QnhDQVBDMEhYSUE4TFFhSWZEd3RCN1M0UEMwR3JNQThMUWRRbER3dEJ6QzRQQzBINkxnOExRZndyRHd0QjBqQVBDMEh4SFE4TFFic2dEd3RCOXlzUEMwR1FNUThMUWRjeER3dEJvaTBQQzBIVUp3OExRZUFyRHd0Qm55d1BDMEhyTVE4TFFkVWZEd3RCeWpFUEMwSGVKUThMUWRRZUR3dEI5QndQQzBHbk1nOExRYkVkRHd0Qm9CMFBDMEc1TVE4TFFid3dEd3RCa2lFUEMwR3pKZzhMUWVrc0R3dEJyQjRQQzBIVUt3OExRZmNtRHd0QmdDWVBDMEd3SVE4TFFmNGVEd3RCalNNUEMwR0pMUThMUWZjaUR3dEJvREVQQzBHdUh3OExRY1lsRHd0QjZCNFBDMEdUSWc4TFFjSXZEd3RCd3gwUEMwR0xMQThMUWVFZER3dEJqUzhQQzBIcUlROExRYlF0RHd0QjBpOFBDMEhmTWc4TFFkSXlEd3RCOERBUEMwR3BJZzhMUWZrakR3dEJtUjRQQzBHMUxBOExRWnN3RHd0QmtqSVBDMEcyS3c4TFFjSWlEd3RCK0RJUEMwR2VKUThMUWRBaUR3dEJ1aDRQQzBHQkhnOExBQXRCMWlFaEFRc2dBUXNXQUNBQUlBQXRBQzFCL2dGeElBRkJBRWR5T2dBdEN4a0FJQUFnQUMwQUxVSDlBWEVnQVVFQVIwRUJkSEk2QUMwTEdRQWdBQ0FBTFFBdFFmc0JjU0FCUVFCSFFRSjBjam9BTFFzWkFDQUFJQUF0QUMxQjl3RnhJQUZCQUVkQkEzUnlPZ0F0Q3o0QkFuOENRQ0FBS0FJNElnTkZEUUFnQXlnQ0JDSURSUTBBSUFBZ0FTQUNJQUZySUFNUkFRQWlCRUYvUncwQUlBQkJ4aEUyQWhCQkdDRUVDeUFFQ3o0QkFuOENRQ0FBS0FJNElnTkZEUUFnQXlnQ0NDSURSUTBBSUFBZ0FTQUNJQUZySUFNUkFRQWlCRUYvUncwQUlBQkI5Z28yQWhCQkdDRUVDeUFFQ3o0QkFuOENRQ0FBS0FJNElnTkZEUUFnQXlnQ0RDSURSUTBBSUFBZ0FTQUNJQUZySUFNUkFRQWlCRUYvUncwQUlBQkI3Um8yQWhCQkdDRUVDeUFFQ3o0QkFuOENRQ0FBS0FJNElnTkZEUUFnQXlnQ0VDSURSUTBBSUFBZ0FTQUNJQUZySUFNUkFRQWlCRUYvUncwQUlBQkJsUkEyQWhCQkdDRUVDeUFFQ3o0QkFuOENRQ0FBS0FJNElnTkZEUUFnQXlnQ0ZDSURSUTBBSUFBZ0FTQUNJQUZySUFNUkFRQWlCRUYvUncwQUlBQkJxaHMyQWhCQkdDRUVDeUFFQ3o0QkFuOENRQ0FBS0FJNElnTkZEUUFnQXlnQ0dDSURSUTBBSUFBZ0FTQUNJQUZySUFNUkFRQWlCRUYvUncwQUlBQkI3Uk0yQWhCQkdDRUVDeUFFQ3o0QkFuOENRQ0FBS0FJNElnTkZEUUFnQXlnQ0tDSURSUTBBSUFBZ0FTQUNJQUZySUFNUkFRQWlCRUYvUncwQUlBQkI5Z2cyQWhCQkdDRUVDeUFFQ3o0QkFuOENRQ0FBS0FJNElnTkZEUUFnQXlnQ0hDSURSUTBBSUFBZ0FTQUNJQUZySUFNUkFRQWlCRUYvUncwQUlBQkJ3aGsyQWhCQkdDRUVDeUFFQ3o0QkFuOENRQ0FBS0FJNElnTkZEUUFnQXlnQ0lDSURSUTBBSUFBZ0FTQUNJQUZySUFNUkFRQWlCRUYvUncwQUlBQkJsQlEyQWhCQkdDRUVDeUFFQzFrQkFuOENRQ0FBTFFBb1FRRkdEUUFnQUM4Qk1pSUJRZVFBYTBIa0FFa05BQ0FCUWN3QlJnMEFJQUZCc0FKR0RRQWdBQzhCTUNJQVFjQUFjUTBBUVFFaEFpQUFRWWdFY1VHQUJFWU5BQ0FBUVNoeFJTRUNDeUFDQzR3QkFRSi9Ba0FDUUFKQUlBQXRBQ3BGRFFBZ0FDMEFLMFVOQUNBQUx3RXdJZ0ZCQW5GRkRRRU1BZ3NnQUM4Qk1DSUJRUUZ4UlEwQkMwRUJJUUlnQUMwQUtFRUJSZzBBSUFBdkFUSWlBRUhrQUd0QjVBQkpEUUFnQUVITUFVWU5BQ0FBUWJBQ1JnMEFJQUZCd0FCeERRQkJBQ0VDSUFGQmlBUnhRWUFFUmcwQUlBRkJLSEZCQUVjaEFnc2dBZ3RYQUNBQVFSaHFRZ0EzQXdBZ0FFSUFOd01BSUFCQk9HcENBRGNEQUNBQVFUQnFRZ0EzQXdBZ0FFRW9ha0lBTndNQUlBQkJJR3BDQURjREFDQUFRUkJxUWdBM0F3QWdBRUVJYWtJQU53TUFJQUJCM1FFMkFod0xCZ0FnQUJBeUM1b3RBUXQvSXdCQkVHc2lDaVFBUWFUUUFDZ0NBQ0lKUlFSQVFlVFRBQ2dDQUNJRlJRUkFRZkRUQUVKL053SUFRZWpUQUVLQWdJU0FnSURBQURjQ0FFSGswd0FnQ2tFSWFrRndjVUhZcXRXcUJYTWlCVFlDQUVINDB3QkJBRFlDQUVISTB3QkJBRFlDQUF0QnpOTUFRWURVQkRZQ0FFR2MwQUJCZ05RRU5nSUFRYkRRQUNBRk5nSUFRYXpRQUVGL05nSUFRZERUQUVHQXJBTTJBZ0FEUUNBQlFjalFBR29nQVVHODBBQnFJZ0kyQWdBZ0FpQUJRYlRRQUdvaUF6WUNBQ0FCUWNEUUFHb2dBellDQUNBQlFkRFFBR29nQVVIRTBBQnFJZ00yQWdBZ0F5QUNOZ0lBSUFGQjJOQUFhaUFCUWN6UUFHb2lBallDQUNBQ0lBTTJBZ0FnQVVIVTBBQnFJQUkyQWdBZ0FVRWdhaUlCUVlBQ1J3MEFDMEdNMUFSQndhc0ROZ0lBUWFqUUFFSDAwd0FvQWdBMkFnQkJtTkFBUWNDckF6WUNBRUdrMEFCQmlOUUVOZ0lBUWN6L0IwRTROZ0lBUVlqVUJDRUpDd0pBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUlBQkI3QUZOQkVCQmpOQUFLQUlBSWdaQkVDQUFRUk5xUVhCeElBQkJDMGtiSWdSQkEzWWlBSFlpQVVFRGNRUkFBa0FnQVVFQmNTQUFja0VCY3lJQ1FRTjBJZ0JCdE5BQWFpSUJJQUJCdk5BQWFpZ0NBQ0lBS0FJSUlnTkdCRUJCak5BQUlBWkJmaUFDZDNFMkFnQU1BUXNnQVNBRE5nSUlJQU1nQVRZQ0RBc2dBRUVJYWlFQklBQWdBa0VEZENJQ1FRTnlOZ0lFSUFBZ0Ftb2lBQ0FBS0FJRVFRRnlOZ0lFREJFTFFaVFFBQ2dDQUNJSUlBUlBEUUVnQVFSQUFrQkJBaUFBZENJQ1FRQWdBbXR5SUFFZ0FIUnhhQ0lBUVFOMElnSkJ0TkFBYWlJQklBSkJ2TkFBYWlnQ0FDSUNLQUlJSWdOR0JFQkJqTkFBSUFaQmZpQUFkM0VpQmpZQ0FBd0JDeUFCSUFNMkFnZ2dBeUFCTmdJTUN5QUNJQVJCQTNJMkFnUWdBRUVEZENJQUlBUnJJUVVnQUNBQ2FpQUZOZ0lBSUFJZ0JHb2lCQ0FGUVFGeU5nSUVJQWdFUUNBSVFYaHhRYlRRQUdvaEFFR2cwQUFvQWdBaEF3Si9RUUVnQ0VFRGRuUWlBU0FHY1VVRVFFR00wQUFnQVNBR2NqWUNBQ0FBREFFTElBQW9BZ2dMSWdFZ0F6WUNEQ0FBSUFNMkFnZ2dBeUFBTmdJTUlBTWdBVFlDQ0FzZ0FrRUlhaUVCUWFEUUFDQUVOZ0lBUVpUUUFDQUZOZ0lBREJFTFFaRFFBQ2dDQUNJTFJRMEJJQXRvUVFKMFFielNBR29vQWdBaUFDZ0NCRUY0Y1NBRWF5RUZJQUFoQWdOQUFrQWdBaWdDRUNJQlJRUkFJQUpCRkdvb0FnQWlBVVVOQVFzZ0FTZ0NCRUY0Y1NBRWF5SURJQVZKSVFJZ0F5QUZJQUliSVFVZ0FTQUFJQUliSVFBZ0FTRUNEQUVMQ3lBQUtBSVlJUWtnQUNnQ0RDSURJQUJIQkVCQm5OQUFLQUlBR2lBRElBQW9BZ2dpQVRZQ0NDQUJJQU0yQWd3TUVBc2dBRUVVYWlJQ0tBSUFJZ0ZGQkVBZ0FDZ0NFQ0lCUlEwRElBQkJFR29oQWdzRFFDQUNJUWNnQVNJRFFSUnFJZ0lvQWdBaUFRMEFJQU5CRUdvaEFpQURLQUlRSWdFTkFBc2dCMEVBTmdJQURBOExRWDhoQkNBQVFiOS9TdzBBSUFCQkUyb2lBVUZ3Y1NFRVFaRFFBQ2dDQUNJSVJRMEFRUUFnQkdzaEJRSkFBa0FDUUFKL1FRQWdCRUdBQWtrTkFCcEJIeUFFUWYvLy93ZExEUUFhSUFSQkppQUJRUWgyWnlJQWEzWkJBWEVnQUVFQmRHdEJQbW9MSWdaQkFuUkJ2TklBYWlnQ0FDSUNSUVJBUVFBaEFVRUFJUU1NQVF0QkFDRUJJQVJCR1NBR1FRRjJhMEVBSUFaQkgwY2JkQ0VBUVFBaEF3TkFBa0FnQWlnQ0JFRjRjU0FFYXlJSElBVlBEUUFnQWlFRElBY2lCUTBBUVFBaEJTQUNJUUVNQXdzZ0FTQUNRUlJxS0FJQUlnY2dCeUFDSUFCQkhYWkJCSEZxUVJCcUtBSUFJZ0pHR3lBQklBY2JJUUVnQUVFQmRDRUFJQUlOQUFzTElBRWdBM0pGQkVCQkFDRURRUUlnQm5RaUFFRUFJQUJyY2lBSWNTSUFSUTBESUFCb1FRSjBRYnpTQUdvb0FnQWhBUXNnQVVVTkFRc0RRQ0FCS0FJRVFYaHhJQVJySWdJZ0JVa2hBQ0FDSUFVZ0FCc2hCU0FCSUFNZ0FCc2hBeUFCS0FJUUlnQUVmeUFBQlNBQlFSUnFLQUlBQ3lJQkRRQUxDeUFEUlEwQUlBVkJsTkFBS0FJQUlBUnJUdzBBSUFNb0FoZ2hCeUFESUFNb0Fnd2lBRWNFUUVHYzBBQW9BZ0FhSUFBZ0F5Z0NDQ0lCTmdJSUlBRWdBRFlDREF3T0N5QURRUlJxSWdJb0FnQWlBVVVFUUNBREtBSVFJZ0ZGRFFNZ0EwRVFhaUVDQ3dOQUlBSWhCaUFCSWdCQkZHb2lBaWdDQUNJQkRRQWdBRUVRYWlFQ0lBQW9BaEFpQVEwQUN5QUdRUUEyQWdBTURRdEJsTkFBS0FJQUlnTWdCRThFUUVHZzBBQW9BZ0FoQVFKQUlBTWdCR3NpQWtFUVR3UkFJQUVnQkdvaUFDQUNRUUZ5TmdJRUlBRWdBMm9nQWpZQ0FDQUJJQVJCQTNJMkFnUU1BUXNnQVNBRFFRTnlOZ0lFSUFFZ0Eyb2lBQ0FBS0FJRVFRRnlOZ0lFUVFBaEFFRUFJUUlMUVpUUUFDQUNOZ0lBUWFEUUFDQUFOZ0lBSUFGQkNHb2hBUXdQQzBHWTBBQW9BZ0FpQXlBRVN3UkFJQVFnQ1dvaUFDQURJQVJySWdGQkFYSTJBZ1JCcE5BQUlBQTJBZ0JCbU5BQUlBRTJBZ0FnQ1NBRVFRTnlOZ0lFSUFsQkNHb2hBUXdQQzBFQUlRRWdCQUovUWVUVEFDZ0NBQVJBUWV6VEFDZ0NBQXdCQzBIdzB3QkNmemNDQUVIbzB3QkNnSUNFZ0lDQXdBQTNBZ0JCNU5NQUlBcEJER3BCY0hGQjJLclZxZ1Z6TmdJQVFmalRBRUVBTmdJQVFjalRBRUVBTmdJQVFZQ0FCQXNpQUNBRVFjY0FhaUlGYWlJR1FRQWdBR3NpQjNFaUFrOEVRRUg4MHdCQk1EWUNBQXdQQ3dKQVFjVFRBQ2dDQUNJQlJRMEFRYnpUQUNnQ0FDSUlJQUpxSVFBZ0FDQUJUU0FBSUFoTGNRMEFRUUFoQVVIODB3QkJNRFlDQUF3UEMwSEkwd0F0QUFCQkJIRU5CQUpBQWtBZ0NRUkFRY3pUQUNFQkEwQWdBU2dDQUNJQUlBbE5CRUFnQUNBQktBSUVhaUFKU3cwREN5QUJLQUlJSWdFTkFBc0xRUUFRTXlJQVFYOUdEUVVnQWlFR1FlalRBQ2dDQUNJQlFRRnJJZ01nQUhFRVFDQUNJQUJySUFBZ0EycEJBQ0FCYTNGcUlRWUxJQVFnQms4TkJTQUdRZjcvLy84SFN3MEZRY1RUQUNnQ0FDSURCRUJCdk5NQUtBSUFJZ2NnQm1vaEFTQUJJQWRORFFZZ0FTQURTdzBHQ3lBR0VETWlBU0FBUncwQkRBY0xJQVlnQTJzZ0IzRWlCa0grLy8vL0Iwc05CQ0FHRURNaEFDQUFJQUVvQWdBZ0FTZ0NCR3BHRFFNZ0FDRUJDd0pBSUFZZ0JFSElBR3BQRFFBZ0FVRi9SZzBBUWV6VEFDZ0NBQ0lBSUFVZ0JtdHFRUUFnQUd0eElnQkIvdi8vL3dkTEJFQWdBU0VBREFjTElBQVFNMEYvUndSQUlBQWdCbW9oQmlBQklRQU1Cd3RCQUNBR2F4QXpHZ3dFQ3lBQklnQkJmMGNOQlF3REMwRUFJUU1NREF0QkFDRUFEQW9MSUFCQmYwY05BZ3RCeU5NQVFjalRBQ2dDQUVFRWNqWUNBQXNnQWtIKy8vLy9CMHNOQVNBQ0VETWhBRUVBRURNaEFTQUFRWDlHRFFFZ0FVRi9SZzBCSUFBZ0FVOE5BU0FCSUFCcklnWWdCRUU0YWswTkFRdEJ2Tk1BUWJ6VEFDZ0NBQ0FHYWlJQk5nSUFRY0RUQUNnQ0FDQUJTUVJBUWNEVEFDQUJOZ0lBQ3dKQUFrQUNRRUdrMEFBb0FnQWlBZ1JBUWN6VEFDRUJBMEFnQUNBQktBSUFJZ01nQVNnQ0JDSUZha1lOQWlBQktBSUlJZ0VOQUFzTUFndEJuTkFBS0FJQUlnRkJBRWNnQUNBQlQzRkZCRUJCbk5BQUlBQTJBZ0FMUVFBaEFVSFEwd0FnQmpZQ0FFSE0wd0FnQURZQ0FFR3MwQUJCZnpZQ0FFR3cwQUJCNU5NQUtBSUFOZ0lBUWRqVEFFRUFOZ0lBQTBBZ0FVSEkwQUJxSUFGQnZOQUFhaUlDTmdJQUlBSWdBVUcwMEFCcUlnTTJBZ0FnQVVIQTBBQnFJQU0yQWdBZ0FVSFEwQUJxSUFGQnhOQUFhaUlETmdJQUlBTWdBallDQUNBQlFkalFBR29nQVVITTBBQnFJZ0kyQWdBZ0FpQUROZ0lBSUFGQjFOQUFhaUFDTmdJQUlBRkJJR29pQVVHQUFrY05BQXRCZUNBQWEwRVBjU0lCSUFCcUlnSWdCa0U0YXlJRElBRnJJZ0ZCQVhJMkFnUkJxTkFBUWZUVEFDZ0NBRFlDQUVHWTBBQWdBVFlDQUVHazBBQWdBallDQUNBQUlBTnFRVGcyQWdRTUFnc2dBQ0FDVFEwQUlBSWdBMGtOQUNBQktBSU1RUWh4RFFCQmVDQUNhMEVQY1NJQUlBSnFJZ05CbU5BQUtBSUFJQVpxSWdjZ0FHc2lBRUVCY2pZQ0JDQUJJQVVnQm1vMkFnUkJxTkFBUWZUVEFDZ0NBRFlDQUVHWTBBQWdBRFlDQUVHazBBQWdBellDQUNBQ0lBZHFRVGcyQWdRTUFRc2dBRUdjMEFBb0FnQkpCRUJCbk5BQUlBQTJBZ0FMSUFBZ0Jtb2hBMEhNMHdBaEFRSkFBa0FDUUFOQUlBTWdBU2dDQUVjRVFDQUJLQUlJSWdFTkFRd0NDd3NnQVMwQURFRUljVVVOQVF0QnpOTUFJUUVEUUNBQktBSUFJZ01nQWswRVFDQURJQUVvQWdScUlnVWdBa3NOQXdzZ0FTZ0NDQ0VCREFBTEFBc2dBU0FBTmdJQUlBRWdBU2dDQkNBR2FqWUNCQ0FBUVhnZ0FHdEJEM0ZxSWdrZ0JFRURjallDQkNBRFFYZ2dBMnRCRDNGcUlnWWdCQ0FKYWlJRWF5RUJJQUlnQmtZRVFFR2swQUFnQkRZQ0FFR1kwQUJCbU5BQUtBSUFJQUZxSWdBMkFnQWdCQ0FBUVFGeU5nSUVEQWdMUWFEUUFDZ0NBQ0FHUmdSQVFhRFFBQ0FFTmdJQVFaVFFBRUdVMEFBb0FnQWdBV29pQURZQ0FDQUVJQUJCQVhJMkFnUWdBQ0FFYWlBQU5nSUFEQWdMSUFZb0FnUWlCVUVEY1VFQlJ3MEdJQVZCZUhFaENDQUZRZjhCVFFSQUlBVkJBM1loQXlBR0tBSUlJZ0FnQmlnQ0RDSUNSZ1JBUVl6UUFFR00wQUFvQWdCQmZpQURkM0UyQWdBTUJ3c2dBaUFBTmdJSUlBQWdBallDREF3R0N5QUdLQUlZSVFjZ0JpQUdLQUlNSWdCSEJFQWdBQ0FHS0FJSUlnSTJBZ2dnQWlBQU5nSU1EQVVMSUFaQkZHb2lBaWdDQUNJRlJRUkFJQVlvQWhBaUJVVU5CQ0FHUVJCcUlRSUxBMEFnQWlFRElBVWlBRUVVYWlJQ0tBSUFJZ1VOQUNBQVFSQnFJUUlnQUNnQ0VDSUZEUUFMSUFOQkFEWUNBQXdFQzBGNElBQnJRUTl4SWdFZ0FHb2lCeUFHUVRocklnTWdBV3NpQVVFQmNqWUNCQ0FBSUFOcVFUZzJBZ1FnQWlBRlFUY2dCV3RCRDNGcVFUOXJJZ01nQXlBQ1FSQnFTUnNpQTBFak5nSUVRYWpRQUVIMDB3QW9BZ0EyQWdCQm1OQUFJQUUyQWdCQnBOQUFJQWMyQWdBZ0EwRVFha0hVMHdBcEFnQTNBZ0FnQTBITTB3QXBBZ0EzQWdoQjFOTUFJQU5CQ0dvMkFnQkIwTk1BSUFZMkFnQkJ6Tk1BSUFBMkFnQkIyTk1BUVFBMkFnQWdBMEVrYWlFQkEwQWdBVUVITmdJQUlBVWdBVUVFYWlJQlN3MEFDeUFDSUFOR0RRQWdBeUFES0FJRVFYNXhOZ0lFSUFNZ0F5QUNheUlGTmdJQUlBSWdCVUVCY2pZQ0JDQUZRZjhCVFFSQUlBVkJlSEZCdE5BQWFpRUFBbjlCak5BQUtBSUFJZ0ZCQVNBRlFRTjJkQ0lEY1VVRVFFR00wQUFnQVNBRGNqWUNBQ0FBREFFTElBQW9BZ2dMSWdFZ0FqWUNEQ0FBSUFJMkFnZ2dBaUFBTmdJTUlBSWdBVFlDQ0F3QkMwRWZJUUVnQlVILy8vOEhUUVJBSUFWQkppQUZRUWgyWnlJQWEzWkJBWEVnQUVFQmRHdEJQbW9oQVFzZ0FpQUJOZ0ljSUFKQ0FEY0NFQ0FCUVFKMFFielNBR29oQUVHUTBBQW9BZ0FpQTBFQklBRjBJZ1p4UlFSQUlBQWdBallDQUVHUTBBQWdBeUFHY2pZQ0FDQUNJQUEyQWhnZ0FpQUNOZ0lJSUFJZ0FqWUNEQXdCQ3lBRlFSa2dBVUVCZG10QkFDQUJRUjlIRzNRaEFTQUFLQUlBSVFNQ1FBTkFJQU1pQUNnQ0JFRjRjU0FGUmcwQklBRkJIWFloQXlBQlFRRjBJUUVnQUNBRFFRUnhha0VRYWlJR0tBSUFJZ01OQUFzZ0JpQUNOZ0lBSUFJZ0FEWUNHQ0FDSUFJMkFnd2dBaUFDTmdJSURBRUxJQUFvQWdnaUFTQUNOZ0lNSUFBZ0FqWUNDQ0FDUVFBMkFoZ2dBaUFBTmdJTUlBSWdBVFlDQ0F0Qm1OQUFLQUlBSWdFZ0JFME5BRUdrMEFBb0FnQWlBQ0FFYWlJQ0lBRWdCR3NpQVVFQmNqWUNCRUdZMEFBZ0FUWUNBRUdrMEFBZ0FqWUNBQ0FBSUFSQkEzSTJBZ1FnQUVFSWFpRUJEQWdMUVFBaEFVSDgwd0JCTURZQ0FBd0hDMEVBSVFBTElBZEZEUUFDUUNBR0tBSWNJZ0pCQW5SQnZOSUFhaUlES0FJQUlBWkdCRUFnQXlBQU5nSUFJQUFOQVVHUTBBQkJrTkFBS0FJQVFYNGdBbmR4TmdJQURBSUxJQWRCRUVFVUlBY29BaEFnQmtZYmFpQUFOZ0lBSUFCRkRRRUxJQUFnQnpZQ0dDQUdLQUlRSWdJRVFDQUFJQUkyQWhBZ0FpQUFOZ0lZQ3lBR1FSUnFLQUlBSWdKRkRRQWdBRUVVYWlBQ05nSUFJQUlnQURZQ0dBc2dBU0FJYWlFQklBWWdDR29pQmlnQ0JDRUZDeUFHSUFWQmZuRTJBZ1FnQVNBRWFpQUJOZ0lBSUFRZ0FVRUJjallDQkNBQlFmOEJUUVJBSUFGQmVIRkJ0TkFBYWlFQUFuOUJqTkFBS0FJQUlnSkJBU0FCUVFOMmRDSUJjVVVFUUVHTTBBQWdBU0FDY2pZQ0FDQUFEQUVMSUFBb0FnZ0xJZ0VnQkRZQ0RDQUFJQVEyQWdnZ0JDQUFOZ0lNSUFRZ0FUWUNDQXdCQzBFZklRVWdBVUgvLy84SFRRUkFJQUZCSmlBQlFRaDJaeUlBYTNaQkFYRWdBRUVCZEd0QlBtb2hCUXNnQkNBRk5nSWNJQVJDQURjQ0VDQUZRUUowUWJ6U0FHb2hBRUdRMEFBb0FnQWlBa0VCSUFWMElnTnhSUVJBSUFBZ0JEWUNBRUdRMEFBZ0FpQURjallDQUNBRUlBQTJBaGdnQkNBRU5nSUlJQVFnQkRZQ0RBd0JDeUFCUVJrZ0JVRUJkbXRCQUNBRlFSOUhHM1FoQlNBQUtBSUFJUUFDUUFOQUlBQWlBaWdDQkVGNGNTQUJSZzBCSUFWQkhYWWhBQ0FGUVFGMElRVWdBaUFBUVFSeGFrRVFhaUlES0FJQUlnQU5BQXNnQXlBRU5nSUFJQVFnQWpZQ0dDQUVJQVEyQWd3Z0JDQUVOZ0lJREFFTElBSW9BZ2dpQUNBRU5nSU1JQUlnQkRZQ0NDQUVRUUEyQWhnZ0JDQUNOZ0lNSUFRZ0FEWUNDQXNnQ1VFSWFpRUJEQUlMQWtBZ0IwVU5BQUpBSUFNb0Fod2lBVUVDZEVHODBnQnFJZ0lvQWdBZ0EwWUVRQ0FDSUFBMkFnQWdBQTBCUVpEUUFDQUlRWDRnQVhkeElnZzJBZ0FNQWdzZ0IwRVFRUlFnQnlnQ0VDQURSaHRxSUFBMkFnQWdBRVVOQVFzZ0FDQUhOZ0lZSUFNb0FoQWlBUVJBSUFBZ0FUWUNFQ0FCSUFBMkFoZ0xJQU5CRkdvb0FnQWlBVVVOQUNBQVFSUnFJQUUyQWdBZ0FTQUFOZ0lZQ3dKQUlBVkJEMDBFUUNBRElBUWdCV29pQUVFRGNqWUNCQ0FBSUFOcUlnQWdBQ2dDQkVFQmNqWUNCQXdCQ3lBRElBUnFJZ0lnQlVFQmNqWUNCQ0FESUFSQkEzSTJBZ1FnQWlBRmFpQUZOZ0lBSUFWQi93Rk5CRUFnQlVGNGNVRzAwQUJxSVFBQ2YwR00wQUFvQWdBaUFVRUJJQVZCQTNaMElnVnhSUVJBUVl6UUFDQUJJQVZ5TmdJQUlBQU1BUXNnQUNnQ0NBc2lBU0FDTmdJTUlBQWdBallDQ0NBQ0lBQTJBZ3dnQWlBQk5nSUlEQUVMUVI4aEFTQUZRZi8vL3dkTkJFQWdCVUVtSUFWQkNIWm5JZ0JyZGtFQmNTQUFRUUYwYTBFK2FpRUJDeUFDSUFFMkFod2dBa0lBTndJUUlBRkJBblJCdk5JQWFpRUFRUUVnQVhRaUJDQUljVVVFUUNBQUlBSTJBZ0JCa05BQUlBUWdDSEkyQWdBZ0FpQUFOZ0lZSUFJZ0FqWUNDQ0FDSUFJMkFnd01BUXNnQlVFWklBRkJBWFpyUVFBZ0FVRWZSeHQwSVFFZ0FDZ0NBQ0VFQWtBRFFDQUVJZ0FvQWdSQmVIRWdCVVlOQVNBQlFSMTJJUVFnQVVFQmRDRUJJQUFnQkVFRWNXcEJFR29pQmlnQ0FDSUVEUUFMSUFZZ0FqWUNBQ0FDSUFBMkFoZ2dBaUFDTmdJTUlBSWdBallDQ0F3QkN5QUFLQUlJSWdFZ0FqWUNEQ0FBSUFJMkFnZ2dBa0VBTmdJWUlBSWdBRFlDRENBQ0lBRTJBZ2dMSUFOQkNHb2hBUXdCQ3dKQUlBbEZEUUFDUUNBQUtBSWNJZ0ZCQW5SQnZOSUFhaUlDS0FJQUlBQkdCRUFnQWlBRE5nSUFJQU1OQVVHUTBBQWdDMEYrSUFGM2NUWUNBQXdDQ3lBSlFSQkJGQ0FKS0FJUUlBQkdHMm9nQXpZQ0FDQURSUTBCQ3lBRElBazJBaGdnQUNnQ0VDSUJCRUFnQXlBQk5nSVFJQUVnQXpZQ0dBc2dBRUVVYWlnQ0FDSUJSUTBBSUFOQkZHb2dBVFlDQUNBQklBTTJBaGdMQWtBZ0JVRVBUUVJBSUFBZ0JDQUZhaUlCUVFOeU5nSUVJQUFnQVdvaUFTQUJLQUlFUVFGeU5nSUVEQUVMSUFBZ0JHb2lCeUFGUVFGeU5nSUVJQUFnQkVFRGNqWUNCQ0FGSUFkcUlBVTJBZ0FnQ0FSQUlBaEJlSEZCdE5BQWFpRUJRYURRQUNnQ0FDRURBbjlCQVNBSVFRTjJkQ0lDSUFaeFJRUkFRWXpRQUNBQ0lBWnlOZ0lBSUFFTUFRc2dBU2dDQ0FzaUFpQUROZ0lNSUFFZ0F6WUNDQ0FESUFFMkFnd2dBeUFDTmdJSUMwR2cwQUFnQnpZQ0FFR1UwQUFnQlRZQ0FBc2dBRUVJYWlFQkN5QUtRUkJxSkFBZ0FRdERBQ0FBUlFSQVB3QkJFSFFQQ3dKQUlBQkIvLzhEY1EwQUlBQkJBRWdOQUNBQVFSQjJRQUFpQUVGL1JnUkFRZnpUQUVFd05nSUFRWDhQQ3lBQVFSQjBEd3NBQ3d2Y1B5SUFRWUFJQ3drQkFBQUFBZ0FBQUFNQVFaUUlDd1VFQUFBQUJRQkJwQWdMQ1FZQUFBQUhBQUFBQ0FCQjNBZ0xpaTFKYm5aaGJHbGtJR05vWVhJZ2FXNGdkWEpzSUhGMVpYSjVBRk53WVc0Z1kyRnNiR0poWTJzZ1pYSnliM0lnYVc0Z2IyNWZZbTlrZVFCRGIyNTBaVzUwTFV4bGJtZDBhQ0J2ZG1WeVpteHZkd0JEYUhWdWF5QnphWHBsSUc5MlpYSm1iRzkzQUZKbGMzQnZibk5sSUc5MlpYSm1iRzkzQUVsdWRtRnNhV1FnYldWMGFHOWtJR1p2Y2lCSVZGUlFMM2d1ZUNCeVpYRjFaWE4wQUVsdWRtRnNhV1FnYldWMGFHOWtJR1p2Y2lCU1ZGTlFMM2d1ZUNCeVpYRjFaWE4wQUVWNGNHVmpkR1ZrSUZOUFZWSkRSU0J0WlhSb2IyUWdabTl5SUVsRFJTOTRMbmdnY21WeGRXVnpkQUJKYm5aaGJHbGtJR05vWVhJZ2FXNGdkWEpzSUdaeVlXZHRaVzUwSUhOMFlYSjBBRVY0Y0dWamRHVmtJR1J2ZEFCVGNHRnVJR05oYkd4aVlXTnJJR1Z5Y205eUlHbHVJRzl1WDNOMFlYUjFjd0JKYm5aaGJHbGtJSEpsYzNCdmJuTmxJSE4wWVhSMWN3QkpiblpoYkdsa0lHTm9ZWEpoWTNSbGNpQnBiaUJqYUhWdWF5QmxlSFJsYm5OcGIyNXpBRlZ6WlhJZ1kyRnNiR0poWTJzZ1pYSnliM0lBWUc5dVgzSmxjMlYwWUNCallXeHNZbUZqYXlCbGNuSnZjZ0JnYjI1ZlkyaDFibXRmYUdWaFpHVnlZQ0JqWVd4c1ltRmpheUJsY25KdmNnQmdiMjVmYldWemMyRm5aVjlpWldkcGJtQWdZMkZzYkdKaFkyc2daWEp5YjNJQVlHOXVYMk5vZFc1clgyVjRkR1Z1YzJsdmJsOTJZV3gxWldBZ1kyRnNiR0poWTJzZ1pYSnliM0lBWUc5dVgzTjBZWFIxYzE5amIyMXdiR1YwWldBZ1kyRnNiR0poWTJzZ1pYSnliM0lBWUc5dVgzWmxjbk5wYjI1ZlkyOXRjR3hsZEdWZ0lHTmhiR3hpWVdOcklHVnljbTl5QUdCdmJsOTFjbXhmWTI5dGNHeGxkR1ZnSUdOaGJHeGlZV05ySUdWeWNtOXlBR0J2Ymw5amFIVnVhMTlqYjIxd2JHVjBaV0FnWTJGc2JHSmhZMnNnWlhKeWIzSUFZRzl1WDJobFlXUmxjbDkyWVd4MVpWOWpiMjF3YkdWMFpXQWdZMkZzYkdKaFkyc2daWEp5YjNJQVlHOXVYMjFsYzNOaFoyVmZZMjl0Y0d4bGRHVmdJR05oYkd4aVlXTnJJR1Z5Y205eUFHQnZibDl0WlhSb2IyUmZZMjl0Y0d4bGRHVmdJR05oYkd4aVlXTnJJR1Z5Y205eUFHQnZibDlvWldGa1pYSmZabWxsYkdSZlkyOXRjR3hsZEdWZ0lHTmhiR3hpWVdOcklHVnljbTl5QUdCdmJsOWphSFZ1YTE5bGVIUmxibk5wYjI1ZmJtRnRaV0FnWTJGc2JHSmhZMnNnWlhKeWIzSUFWVzVsZUhCbFkzUmxaQ0JqYUdGeUlHbHVJSFZ5YkNCelpYSjJaWElBU1c1MllXeHBaQ0JvWldGa1pYSWdkbUZzZFdVZ1kyaGhjZ0JKYm5aaGJHbGtJR2hsWVdSbGNpQm1hV1ZzWkNCamFHRnlBRk53WVc0Z1kyRnNiR0poWTJzZ1pYSnliM0lnYVc0Z2IyNWZkbVZ5YzJsdmJnQkpiblpoYkdsa0lHMXBibTl5SUhabGNuTnBiMjRBU1c1MllXeHBaQ0J0WVdwdmNpQjJaWEp6YVc5dUFFVjRjR1ZqZEdWa0lITndZV05sSUdGbWRHVnlJSFpsY25OcGIyNEFSWGh3WldOMFpXUWdRMUpNUmlCaFpuUmxjaUIyWlhKemFXOXVBRWx1ZG1Gc2FXUWdTRlJVVUNCMlpYSnphVzl1QUVsdWRtRnNhV1FnYUdWaFpHVnlJSFJ2YTJWdUFGTndZVzRnWTJGc2JHSmhZMnNnWlhKeWIzSWdhVzRnYjI1ZmRYSnNBRWx1ZG1Gc2FXUWdZMmhoY21GamRHVnljeUJwYmlCMWNtd0FWVzVsZUhCbFkzUmxaQ0J6ZEdGeWRDQmphR0Z5SUdsdUlIVnliQUJFYjNWaWJHVWdRQ0JwYmlCMWNtd0FSVzF3ZEhrZ1EyOXVkR1Z1ZEMxTVpXNW5kR2dBU1c1MllXeHBaQ0JqYUdGeVlXTjBaWElnYVc0Z1EyOXVkR1Z1ZEMxTVpXNW5kR2dBUkhWd2JHbGpZWFJsSUVOdmJuUmxiblF0VEdWdVozUm9BRWx1ZG1Gc2FXUWdZMmhoY2lCcGJpQjFjbXdnY0dGMGFBQkRiMjUwWlc1MExVeGxibWQwYUNCallXNG5kQ0JpWlNCd2NtVnpaVzUwSUhkcGRHZ2dWSEpoYm5ObVpYSXRSVzVqYjJScGJtY0FTVzUyWVd4cFpDQmphR0Z5WVdOMFpYSWdhVzRnWTJoMWJtc2djMmw2WlFCVGNHRnVJR05oYkd4aVlXTnJJR1Z5Y205eUlHbHVJRzl1WDJobFlXUmxjbDkyWVd4MVpRQlRjR0Z1SUdOaGJHeGlZV05ySUdWeWNtOXlJR2x1SUc5dVgyTm9kVzVyWDJWNGRHVnVjMmx2Ymw5MllXeDFaUUJKYm5aaGJHbGtJR05vWVhKaFkzUmxjaUJwYmlCamFIVnVheUJsZUhSbGJuTnBiMjV6SUhaaGJIVmxBRTFwYzNOcGJtY2daWGh3WldOMFpXUWdURVlnWVdaMFpYSWdhR1ZoWkdWeUlIWmhiSFZsQUVsdWRtRnNhV1FnWUZSeVlXNXpabVZ5TFVWdVkyOWthVzVuWUNCb1pXRmtaWElnZG1Gc2RXVUFTVzUyWVd4cFpDQmphR0Z5WVdOMFpYSWdhVzRnWTJoMWJtc2daWGgwWlc1emFXOXVjeUJ4ZFc5MFpTQjJZV3gxWlFCSmJuWmhiR2xrSUdOb1lYSmhZM1JsY2lCcGJpQmphSFZ1YXlCbGVIUmxibk5wYjI1eklIRjFiM1JsWkNCMllXeDFaUUJRWVhWelpXUWdZbmtnYjI1ZmFHVmhaR1Z5YzE5amIyMXdiR1YwWlFCSmJuWmhiR2xrSUVWUFJpQnpkR0YwWlFCdmJsOXlaWE5sZENCd1lYVnpaUUJ2Ymw5amFIVnVhMTlvWldGa1pYSWdjR0YxYzJVQWIyNWZiV1Z6YzJGblpWOWlaV2RwYmlCd1lYVnpaUUJ2Ymw5amFIVnVhMTlsZUhSbGJuTnBiMjVmZG1Gc2RXVWdjR0YxYzJVQWIyNWZjM1JoZEhWelgyTnZiWEJzWlhSbElIQmhkWE5sQUc5dVgzWmxjbk5wYjI1ZlkyOXRjR3hsZEdVZ2NHRjFjMlVBYjI1ZmRYSnNYMk52YlhCc1pYUmxJSEJoZFhObEFHOXVYMk5vZFc1clgyTnZiWEJzWlhSbElIQmhkWE5sQUc5dVgyaGxZV1JsY2w5MllXeDFaVjlqYjIxd2JHVjBaU0J3WVhWelpRQnZibDl0WlhOellXZGxYMk52YlhCc1pYUmxJSEJoZFhObEFHOXVYMjFsZEdodlpGOWpiMjF3YkdWMFpTQndZWFZ6WlFCdmJsOW9aV0ZrWlhKZlptbGxiR1JmWTI5dGNHeGxkR1VnY0dGMWMyVUFiMjVmWTJoMWJtdGZaWGgwWlc1emFXOXVYMjVoYldVZ2NHRjFjMlVBVlc1bGVIQmxZM1JsWkNCemNHRmpaU0JoWm5SbGNpQnpkR0Z5ZENCc2FXNWxBRk53WVc0Z1kyRnNiR0poWTJzZ1pYSnliM0lnYVc0Z2IyNWZZMmgxYm10ZlpYaDBaVzV6YVc5dVgyNWhiV1VBU1c1MllXeHBaQ0JqYUdGeVlXTjBaWElnYVc0Z1kyaDFibXNnWlhoMFpXNXphVzl1Y3lCdVlXMWxBRkJoZFhObElHOXVJRU5QVGs1RlExUXZWWEJuY21Ga1pRQlFZWFZ6WlNCdmJpQlFVa2t2VlhCbmNtRmtaUUJGZUhCbFkzUmxaQ0JJVkZSUUx6SWdRMjl1Ym1WamRHbHZiaUJRY21WbVlXTmxBRk53WVc0Z1kyRnNiR0poWTJzZ1pYSnliM0lnYVc0Z2IyNWZiV1YwYUc5a0FFVjRjR1ZqZEdWa0lITndZV05sSUdGbWRHVnlJRzFsZEdodlpBQlRjR0Z1SUdOaGJHeGlZV05ySUdWeWNtOXlJR2x1SUc5dVgyaGxZV1JsY2w5bWFXVnNaQUJRWVhWelpXUUFTVzUyWVd4cFpDQjNiM0prSUdWdVkyOTFiblJsY21Wa0FFbHVkbUZzYVdRZ2JXVjBhRzlrSUdWdVkyOTFiblJsY21Wa0FGVnVaWGh3WldOMFpXUWdZMmhoY2lCcGJpQjFjbXdnYzJOb1pXMWhBRkpsY1hWbGMzUWdhR0Z6SUdsdWRtRnNhV1FnWUZSeVlXNXpabVZ5TFVWdVkyOWthVzVuWUFCVFYwbFVRMGhmVUZKUFdGa0FWVk5GWDFCU1QxaFpBRTFMUVVOVVNWWkpWRmtBVlU1UVVrOURSVk5UUVVKTVJWOUZUbFJKVkZrQVEwOVFXUUJOVDFaRlJGOVFSVkpOUVU1RlRsUk1XUUJVVDA5ZlJVRlNURmtBVGs5VVNVWlpBRVpCU1V4RlJGOUVSVkJGVGtSRlRrTlpBRUpCUkY5SFFWUkZWMEZaQUZCTVFWa0FVRlZVQUVOSVJVTkxUMVZVQUVkQlZFVlhRVmxmVkVsTlJVOVZWQUJTUlZGVlJWTlVYMVJKVFVWUFZWUUFUa1ZVVjA5U1MxOURUMDVPUlVOVVgxUkpUVVZQVlZRQVEwOU9Ua1ZEVkVsUFRsOVVTVTFGVDFWVUFFeFBSMGxPWDFSSlRVVlBWVlFBVGtWVVYwOVNTMTlTUlVGRVgxUkpUVVZQVlZRQVVFOVRWQUJOU1ZORVNWSkZRMVJGUkY5U1JWRlZSVk5VQUVOTVNVVk9WRjlEVEU5VFJVUmZVa1ZSVlVWVFZBQkRURWxGVGxSZlEweFBVMFZFWDB4UFFVUmZRa0ZNUVU1RFJVUmZVa1ZSVlVWVFZBQkNRVVJmVWtWUlZVVlRWQUJJVkZSUVgxSkZVVlZGVTFSZlUwVk9WRjlVVDE5SVZGUlFVMTlRVDFKVUFGSkZVRTlTVkFCSlRWOUJYMVJGUVZCUFZBQlNSVk5GVkY5RFQwNVVSVTVVQUU1UFgwTlBUbFJGVGxRQVVFRlNWRWxCVEY5RFQwNVVSVTVVQUVoUVJWOUpUbFpCVEVsRVgwTlBUbE5VUVU1VUFFaFFSVjlEUWw5U1JWTkZWQUJIUlZRQVNGQkZYMU5VVWtsRFZBQkRUMDVHVEVsRFZBQlVSVTFRVDFKQlVsbGZVa1ZFU1ZKRlExUUFVRVZTVFVGT1JVNVVYMUpGUkVsU1JVTlVBRU5QVGs1RlExUUFUVlZNVkVsZlUxUkJWRlZUQUVoUVJWOUpUbFpCVEVsRVgxTlVRVlJWVXdCVVQwOWZUVUZPV1Y5U1JWRlZSVk5VVXdCRlFWSk1XVjlJU1U1VVV3QlZUa0ZXUVVsTVFVSk1SVjlHVDFKZlRFVkhRVXhmVWtWQlUwOU9Vd0JQVUZSSlQwNVRBRk5YU1ZSRFNFbE9SMTlRVWs5VVQwTlBURk1BVmtGU1NVRk9WRjlCVEZOUFgwNUZSMDlVU1VGVVJWTUFUVlZNVkVsUVRFVmZRMGhQU1VORlV3QkpUbFJGVWs1QlRGOVRSVkpXUlZKZlJWSlNUMUlBVjBWQ1gxTkZVbFpGVWw5VlRrdE9UMWRPWDBWU1VrOVNBRkpCU1V4SFZVNWZSVkpTVDFJQVNVUkZUbFJKVkZsZlVGSlBWa2xFUlZKZlFWVlVTRVZPVkVsRFFWUkpUMDVmUlZKU1QxSUFVMU5NWDBORlVsUkpSa2xEUVZSRlgwVlNVazlTQUVsT1ZrRk1TVVJmV0Y5R1QxSlhRVkpFUlVSZlJrOVNBRk5GVkY5UVFWSkJUVVZVUlZJQVIwVlVYMUJCVWtGTlJWUkZVZ0JJVUVWZlZWTkZVZ0JUUlVWZlQxUklSVklBU0ZCRlgwTkNYME5JVlU1TFgwaEZRVVJGVWdCTlMwTkJURVZPUkVGU0FGTkZWRlZRQUZkRlFsOVRSVkpXUlZKZlNWTmZSRTlYVGdCVVJVRlNSRTlYVGdCSVVFVmZRMHhQVTBWRVgwTlBUazVGUTFSSlQwNEFTRVZWVWtsVFZFbERYMFZZVUVsU1FWUkpUMDRBUkVsVFEwOU9Ua1ZEVkVWRVgwOVFSVkpCVkVsUFRnQk9UMDVmUVZWVVNFOVNTVlJCVkVsV1JWOUpUa1pQVWsxQlZFbFBUZ0JJVUVWZlNVNVdRVXhKUkY5V1JWSlRTVTlPQUVoUVJWOURRbDlOUlZOVFFVZEZYMEpGUjBsT0FGTkpWRVZmU1ZOZlJsSlBXa1ZPQUVoUVJWOUpUbFpCVEVsRVgwaEZRVVJGVWw5VVQwdEZUZ0JKVGxaQlRFbEVYMVJQUzBWT0FFWlBVa0pKUkVSRlRnQkZUa2hCVGtORlgxbFBWVkpmUTBGTVRRQklVRVZmU1U1V1FVeEpSRjlWVWt3QVFreFBRMHRGUkY5Q1dWOVFRVkpGVGxSQlRGOURUMDVVVWs5TUFFMUxRMDlNQUVGRFRBQklVRVZmU1U1VVJWSk9RVXdBVWtWUlZVVlRWRjlJUlVGRVJWSmZSa2xGVEVSVFgxUlBUMTlNUVZKSFJWOVZUazlHUmtsRFNVRk1BRWhRUlY5UFN3QlZUa3hKVGtzQVZVNU1UME5MQUZCU1NRQlNSVlJTV1Y5WFNWUklBRWhRUlY5SlRsWkJURWxFWDBOUFRsUkZUbFJmVEVWT1IxUklBRWhRUlY5VlRrVllVRVZEVkVWRVgwTlBUbFJGVGxSZlRFVk9SMVJJQUVaTVZWTklBRkJTVDFCUVFWUkRTQUJOTFZORlFWSkRTQUJWVWtsZlZFOVBYMHhQVGtjQVVGSlBRMFZUVTBsT1J3Qk5TVk5EUlV4TVFVNUZUMVZUWDFCRlVsTkpVMVJGVGxSZlYwRlNUa2xPUndCTlNWTkRSVXhNUVU1RlQxVlRYMWRCVWs1SlRrY0FTRkJGWDBsT1ZrRk1TVVJmVkZKQlRsTkdSVkpmUlU1RFQwUkpUa2NBUlhod1pXTjBaV1FnUTFKTVJnQklVRVZmU1U1V1FVeEpSRjlEU0ZWT1MxOVRTVnBGQUUxUFZrVUFRMDlPVkVsT1ZVVUFTRkJGWDBOQ1gxTlVRVlJWVTE5RFQwMVFURVZVUlFCSVVFVmZRMEpmU0VWQlJFVlNVMTlEVDAxUVRFVlVSUUJJVUVWZlEwSmZWa1ZTVTBsUFRsOURUMDFRVEVWVVJRQklVRVZmUTBKZlZWSk1YME5QVFZCTVJWUkZBRWhRUlY5RFFsOURTRlZPUzE5RFQwMVFURVZVUlFCSVVFVmZRMEpmU0VWQlJFVlNYMVpCVEZWRlgwTlBUVkJNUlZSRkFFaFFSVjlEUWw5RFNGVk9TMTlGV0ZSRlRsTkpUMDVmVmtGTVZVVmZRMDlOVUV4RlZFVUFTRkJGWDBOQ1gwTklWVTVMWDBWWVZFVk9VMGxQVGw5T1FVMUZYME5QVFZCTVJWUkZBRWhRUlY5RFFsOU5SVk5UUVVkRlgwTlBUVkJNUlZSRkFFaFFSVjlEUWw5TlJWUklUMFJmUTA5TlVFeEZWRVVBU0ZCRlgwTkNYMGhGUVVSRlVsOUdTVVZNUkY5RFQwMVFURVZVUlFCRVJVeEZWRVVBU0ZCRlgwbE9Wa0ZNU1VSZlJVOUdYMU5VUVZSRkFFbE9Wa0ZNU1VSZlUxTk1YME5GVWxSSlJrbERRVlJGQUZCQlZWTkZBRTVQWDFKRlUxQlBUbE5GQUZWT1UxVlFVRTlTVkVWRVgwMUZSRWxCWDFSWlVFVUFSMDlPUlFCT1QxUmZRVU5EUlZCVVFVSk1SUUJUUlZKV1NVTkZYMVZPUVZaQlNVeEJRa3hGQUZKQlRrZEZYMDVQVkY5VFFWUkpVMFpKUVVKTVJRQlBVa2xIU1U1ZlNWTmZWVTVTUlVGRFNFRkNURVVBVWtWVFVFOU9VMFZmU1ZOZlUxUkJURVVBVUZWU1IwVUFUVVZTUjBVQVVrVlJWVVZUVkY5SVJVRkVSVkpmUmtsRlRFUlRYMVJQVDE5TVFWSkhSUUJTUlZGVlJWTlVYMGhGUVVSRlVsOVVUMDlmVEVGU1IwVUFVRUZaVEU5QlJGOVVUMDlmVEVGU1IwVUFTVTVUVlVaR1NVTkpSVTVVWDFOVVQxSkJSMFVBU0ZCRlgxQkJWVk5GUkY5VlVFZFNRVVJGQUVoUVJWOVFRVlZUUlVSZlNESmZWVkJIVWtGRVJRQlRUMVZTUTBVQVFVNU9UMVZPUTBVQVZGSkJRMFVBU0ZCRlgxVk9SVmhRUlVOVVJVUmZVMUJCUTBVQVJFVlRRMUpKUWtVQVZVNVRWVUpUUTFKSlFrVUFVa1ZEVDFKRUFFaFFSVjlKVGxaQlRFbEVYMDFGVkVoUFJBQk9UMVJmUms5VlRrUUFVRkpQVUVaSlRrUUFWVTVDU1U1RUFGSkZRa2xPUkFCVlRrRlZWRWhQVWtsYVJVUUFUVVZVU0U5RVgwNVBWRjlCVEV4UFYwVkVBRWhVVkZCZlZrVlNVMGxQVGw5T1QxUmZVMVZRVUU5U1ZFVkVBRUZNVWtWQlJGbGZVa1ZRVDFKVVJVUUFRVU5EUlZCVVJVUUFUazlVWDBsTlVFeEZUVVZPVkVWRUFFeFBUMUJmUkVWVVJVTlVSVVFBU0ZCRlgwTlNYMFZZVUVWRFZFVkVBRWhRUlY5TVJsOUZXRkJGUTFSRlJBQkRVa1ZCVkVWRUFFbE5YMVZUUlVRQVNGQkZYMUJCVlZORlJBQlVTVTFGVDFWVVgwOURRMVZTUlVRQVVFRlpUVVZPVkY5U1JWRlZTVkpGUkFCUVVrVkRUMDVFU1ZSSlQwNWZVa1ZSVlVsU1JVUUFVRkpQV0ZsZlFWVlVTRVZPVkVsRFFWUkpUMDVmVWtWUlZVbFNSVVFBVGtWVVYwOVNTMTlCVlZSSVJVNVVTVU5CVkVsUFRsOVNSVkZWU1ZKRlJBQk1SVTVIVkVoZlVrVlJWVWxTUlVRQVUxTk1YME5GVWxSSlJrbERRVlJGWDFKRlVWVkpVa1ZFQUZWUVIxSkJSRVZmVWtWUlZVbFNSVVFBVUVGSFJWOUZXRkJKVWtWRUFGQlNSVU5QVGtSSlZFbFBUbDlHUVVsTVJVUUFSVmhRUlVOVVFWUkpUMDVmUmtGSlRFVkVBRkpGVmtGTVNVUkJWRWxQVGw5R1FVbE1SVVFBVTFOTVgwaEJUa1JUU0VGTFJWOUdRVWxNUlVRQVRFOURTMFZFQUZSU1FVNVRSazlTVFVGVVNVOU9YMEZRVUV4SlJVUUFUazlVWDAxUFJFbEdTVVZFQUU1UFZGOUZXRlJGVGtSRlJBQkNRVTVFVjBsRVZFaGZURWxOU1ZSZlJWaERSVVZFUlVRQVUwbFVSVjlKVTE5UFZrVlNURTlCUkVWRUFFaEZRVVFBUlhod1pXTjBaV1FnU0ZSVVVDOEFBRjRUQUFBbUV3QUFNQkFBQVBBWEFBQ2RFd0FBRlJJQUFEa1hBQUR3RWdBQUNoQUFBSFVTQUFDdEVnQUFnaE1BQUU4VUFBQi9FQUFBb0JVQUFDTVVBQUNKRWdBQWl4UUFBRTBWQUFEVUVRQUF6eFFBQUJBWUFBREpGZ0FBM0JZQUFNRVJBQURnRndBQXV4UUFBSFFVQUFCOEZRQUE1UlFBQUFnWEFBQWZFQUFBWlJVQUFLTVVBQUFvRlFBQUFoVUFBSmtWQUFBc0VBQUFpeGtBQUU4UEFBRFVEZ0FBYWhBQUFNNFFBQUFDRndBQWlRNEFBRzRUQUFBY0V3QUFaaFFBQUZZWEFBREJFd0FBelJNQUFHd1RBQUJvRndBQVpoY0FBRjhYQUFBaUV3QUF6ZzhBQUdrT0FBRFlEZ0FBWXhZQUFNc1RBQUNxRGdBQUtCY0FBQ1lYQUFERkV3QUFYUllBQU9nUkFBQm5Fd0FBWlJNQUFQSVdBQUJ6RXdBQUhSY0FBUGtXQUFEekVRQUF6dzRBQU00VkFBQU1FZ0FBc3hFQUFLVVJBQUJoRUFBQU1oY0FBTHNUQUVINU5Rc0JBUUJCa0RZTDRBRUJBUUlCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQUFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRQkIvVGNMQVFFQVFaRTRDMTRDQXdJQ0FnSUNBQUFDQWdBQ0FnQUNBZ0lDQWdJQ0FnSUNBQVFBQUFBQUFBSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FBQUFBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lBQWdBQ0FFSDlPUXNCQVFCQmtUb0xYZ0lBQWdJQ0FnSUFBQUlDQUFJQ0FBSUNBZ0lDQWdJQ0FnSUFBd0FFQUFBQUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQUFBQUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0FDQUFJQVFmQTdDdzFzYjNObFpXVndMV0ZzYVhabEFFR0pQQXNCQVFCQm9Ed0w0QUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRQUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUJCaVQ0TEFRRUFRYUErQytjQkFRRUJBUUVCQVFFQkFRRUJBZ0VCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVBQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFGamFIVnVhMlZrQUVHd3dBQUxYd0VCQUFFQkFRRUJBQUFCQVFBQkFRQUJBUUVCQVFFQkFRRUJBQUFBQUFBQUFBRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFBQUFBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVBQVFBQkFFR1F3Z0FMSVdWamRHbHZibVZ1ZEMxc1pXNW5kR2h2Ym5KdmVIa3RZMjl1Ym1WamRHbHZiZ0JCd01JQUN5MXlZVzV6Wm1WeUxXVnVZMjlrYVc1bmNHZHlZV1JsRFFvTkNnMEtVMDBOQ2cwS1ZGUlFMME5GTDFSVFVDOEFRZm5DQUFzRkFRSUFBUU1BUVpEREFBdmdBUVFCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFBRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBRUg1eEFBTEJRRUNBQUVEQUVHUXhRQUw0QUVFQVFFRkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRQUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUJCK2NZQUN3UUJBQUFCQUVHUnh3QUwzd0VCQVFBQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQUFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFBRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBRUg2eUFBTEJBRUFBQUlBUVpESkFBdGZBd1FBQUFRRUJBUUVCQVFFQkFRRUJRUUVCQVFFQkFRRUJBUUVCQUFFQUFZSEJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUFBUUFCQUFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQUFBQUFRQVFmcktBQXNFQVFBQUFRQkJrTXNBQ3dFQkFFR3F5d0FMUVFJQUFBQUFBQUFEQXdNREF3TURBd01EQXdNREF3TURBd01EQXdNREF3TURBd0FBQUFBQUFBTURBd01EQXdNREF3TURBd01EQXdNREF3TURBd01EQXdNREFFSDZ6QUFMQkFFQUFBRUFRWkROQUFzQkFRQkJtczBBQ3dZQ0FBQUFBQUlBUWJITkFBczZBd01EQXdNREF3TURBd01EQXdNREF3TURBd01EQXdNREF3TUFBQUFBQUFBREF3TURBd01EQXdNREF3TURBd01EQXdNREF3TURBd01EQXdCQjhNNEFDNVlCVGs5VlRrTkZSVU5MVDFWVVRrVkRWRVZVUlVOU1NVSkZURlZUU0VWVVJVRkVVMFZCVWtOSVVrZEZRMVJKVmtsVVdVeEZUa1JCVWxaRlQxUkpSbGxRVkVsUFRsTkRTRk5GUVZsVFZFRlVRMGhIUlU5U1JFbFNSVU5VVDFKVVVrTklVRUZTUVUxRlZFVlNWVkpEUlVKVFExSkpRa1ZCVWtSUFYwNUJRMFZKVGtST1MwTkxWVUpUUTFKSlFrVklWRlJRTDBGRVZGQXYnLCAnYmFzZTY0JylcbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgeyBCdWZmZXIgfSA9IHJlcXVpcmUoJ25vZGU6YnVmZmVyJylcblxubW9kdWxlLmV4cG9ydHMgPSBCdWZmZXIuZnJvbSgnQUdGemJRRUFBQUFCSndkZ0FYOEJmMkFEZjM5L0FYOWdBWDhBWUFKL2Z3QmdCSDkvZjM4QmYyQUFBR0FEZjM5L0FBTExBUWdEWlc1MkdIZGhjMjFmYjI1ZmFHVmhaR1Z5YzE5amIyMXdiR1YwWlFBRUEyVnVkaFYzWVhOdFgyOXVYMjFsYzNOaFoyVmZZbVZuYVc0QUFBTmxibllMZDJGemJWOXZibDkxY213QUFRTmxibllPZDJGemJWOXZibDl6ZEdGMGRYTUFBUU5sYm5ZVWQyRnpiVjl2Ymw5b1pXRmtaWEpmWm1sbGJHUUFBUU5sYm5ZVWQyRnpiVjl2Ymw5b1pXRmtaWEpmZG1Gc2RXVUFBUU5sYm5ZTWQyRnpiVjl2Ymw5aWIyUjVBQUVEWlc1MkdIZGhjMjFmYjI1ZmJXVnpjMkZuWlY5amIyMXdiR1YwWlFBQUF5MHNCUVlBQUFJQUFBQUFBQUFDQVFJQUFnSUNBQUFEQUFBQUFBTURBd01CQVFFQkFRRUJBUUVBQUFJQUFBQUVCUUZ3QVJJU0JRTUJBQUlHQ0FGL0FVR0ExQVFMQjlFRklnWnRaVzF2Y25rQ0FBdGZhVzVwZEdsaGJHbDZaUUFJR1Y5ZmFXNWthWEpsWTNSZlpuVnVZM1JwYjI1ZmRHRmliR1VCQUF0c2JHaDBkSEJmYVc1cGRBQUpHR3hzYUhSMGNGOXphRzkxYkdSZmEyVmxjRjloYkdsMlpRQXZER3hzYUhSMGNGOWhiR3h2WXdBTEJtMWhiR3h2WXdBeEMyeHNhSFIwY0Y5bWNtVmxBQXdFWm5KbFpRQU1EMnhzYUhSMGNGOW5aWFJmZEhsd1pRQU5GV3hzYUhSMGNGOW5aWFJmYUhSMGNGOXRZV3B2Y2dBT0ZXeHNhSFIwY0Y5blpYUmZhSFIwY0Y5dGFXNXZjZ0FQRVd4c2FIUjBjRjluWlhSZmJXVjBhRzlrQUJBV2JHeG9kSFJ3WDJkbGRGOXpkR0YwZFhOZlkyOWtaUUFSRW14c2FIUjBjRjluWlhSZmRYQm5jbUZrWlFBU0RHeHNhSFIwY0Y5eVpYTmxkQUFURG14c2FIUjBjRjlsZUdWamRYUmxBQlFVYkd4b2RIUndYM05sZEhScGJtZHpYMmx1YVhRQUZRMXNiR2gwZEhCZlptbHVhWE5vQUJZTWJHeG9kSFJ3WDNCaGRYTmxBQmNOYkd4b2RIUndYM0psYzNWdFpRQVlHMnhzYUhSMGNGOXlaWE4xYldWZllXWjBaWEpmZFhCbmNtRmtaUUFaRUd4c2FIUjBjRjluWlhSZlpYSnlibThBR2hkc2JHaDBkSEJmWjJWMFgyVnljbTl5WDNKbFlYTnZiZ0FiRjJ4c2FIUjBjRjl6WlhSZlpYSnliM0pmY21WaGMyOXVBQndVYkd4b2RIUndYMmRsZEY5bGNuSnZjbDl3YjNNQUhSRnNiR2gwZEhCZlpYSnlibTlmYm1GdFpRQWVFbXhzYUhSMGNGOXRaWFJvYjJSZmJtRnRaUUFmRW14c2FIUjBjRjl6ZEdGMGRYTmZibUZ0WlFBZ0dteHNhSFIwY0Y5elpYUmZiR1Z1YVdWdWRGOW9aV0ZrWlhKekFDRWhiR3hvZEhSd1gzTmxkRjlzWlc1cFpXNTBYMk5vZFc1clpXUmZiR1Z1WjNSb0FDSWRiR3hvZEhSd1gzTmxkRjlzWlc1cFpXNTBYMnRsWlhCZllXeHBkbVVBSXlSc2JHaDBkSEJmYzJWMFgyeGxibWxsYm5SZmRISmhibk5tWlhKZlpXNWpiMlJwYm1jQUpCaHNiR2gwZEhCZmJXVnpjMkZuWlY5dVpXVmtjMTlsYjJZQUxna1hBUUJCQVFzUkFRSURCQVVLQmdjckxTd3FLU2dsSnlZSzc3TUNMQllBUVlqUUFDZ0NBQVJBQUF0QmlOQUFRUUUyQWdBTEZBQWdBQkF3SUFBZ0FqWUNPQ0FBSUFFNkFDZ0xGQUFnQUNBQUx3RXlJQUF0QUM0Z0FCQXZFQUFMSGdFQmYwSEFBQkF5SWdFUU1DQUJRWUFJTmdJNElBRWdBRG9BS0NBQkM0OE1BUWQvQWtBZ0FFVU5BQ0FBUVFocklnRWdBRUVFYXlnQ0FDSUFRWGh4SWdScUlRVUNRQ0FBUVFGeERRQWdBRUVEY1VVTkFTQUJJQUVvQWdBaUFHc2lBVUdjMEFBb0FnQkpEUUVnQUNBRWFpRUVBa0FDUUVHZzBBQW9BZ0FnQVVjRVFDQUFRZjhCVFFSQUlBQkJBM1loQXlBQktBSUlJZ0FnQVNnQ0RDSUNSZ1JBUVl6UUFFR00wQUFvQWdCQmZpQURkM0UyQWdBTUJRc2dBaUFBTmdJSUlBQWdBallDREF3RUN5QUJLQUlZSVFZZ0FTQUJLQUlNSWdCSEJFQWdBQ0FCS0FJSUlnSTJBZ2dnQWlBQU5nSU1EQU1MSUFGQkZHb2lBeWdDQUNJQ1JRUkFJQUVvQWhBaUFrVU5BaUFCUVJCcUlRTUxBMEFnQXlFSElBSWlBRUVVYWlJREtBSUFJZ0lOQUNBQVFSQnFJUU1nQUNnQ0VDSUNEUUFMSUFkQkFEWUNBQXdDQ3lBRktBSUVJZ0JCQTNGQkEwY05BaUFGSUFCQmZuRTJBZ1JCbE5BQUlBUTJBZ0FnQlNBRU5nSUFJQUVnQkVFQmNqWUNCQXdEQzBFQUlRQUxJQVpGRFFBQ1FDQUJLQUljSWdKQkFuUkJ2TklBYWlJREtBSUFJQUZHQkVBZ0F5QUFOZ0lBSUFBTkFVR1EwQUJCa05BQUtBSUFRWDRnQW5keE5nSUFEQUlMSUFaQkVFRVVJQVlvQWhBZ0FVWWJhaUFBTmdJQUlBQkZEUUVMSUFBZ0JqWUNHQ0FCS0FJUUlnSUVRQ0FBSUFJMkFoQWdBaUFBTmdJWUN5QUJRUlJxS0FJQUlnSkZEUUFnQUVFVWFpQUNOZ0lBSUFJZ0FEWUNHQXNnQVNBRlR3MEFJQVVvQWdRaUFFRUJjVVVOQUFKQUFrQUNRQUpBSUFCQkFuRkZCRUJCcE5BQUtBSUFJQVZHQkVCQnBOQUFJQUUyQWdCQm1OQUFRWmpRQUNnQ0FDQUVhaUlBTmdJQUlBRWdBRUVCY2pZQ0JDQUJRYURRQUNnQ0FFY05Ca0dVMEFCQkFEWUNBRUdnMEFCQkFEWUNBQXdHQzBHZzBBQW9BZ0FnQlVZRVFFR2cwQUFnQVRZQ0FFR1UwQUJCbE5BQUtBSUFJQVJxSWdBMkFnQWdBU0FBUVFGeU5nSUVJQUFnQVdvZ0FEWUNBQXdHQ3lBQVFYaHhJQVJxSVFRZ0FFSC9BVTBFUUNBQVFRTjJJUU1nQlNnQ0NDSUFJQVVvQWd3aUFrWUVRRUdNMEFCQmpOQUFLQUlBUVg0Z0EzZHhOZ0lBREFVTElBSWdBRFlDQ0NBQUlBSTJBZ3dNQkFzZ0JTZ0NHQ0VHSUFVZ0JTZ0NEQ0lBUndSQVFaelFBQ2dDQUJvZ0FDQUZLQUlJSWdJMkFnZ2dBaUFBTmdJTURBTUxJQVZCRkdvaUF5Z0NBQ0lDUlFSQUlBVW9BaEFpQWtVTkFpQUZRUkJxSVFNTEEwQWdBeUVISUFJaUFFRVVhaUlES0FJQUlnSU5BQ0FBUVJCcUlRTWdBQ2dDRUNJQ0RRQUxJQWRCQURZQ0FBd0NDeUFGSUFCQmZuRTJBZ1FnQVNBRWFpQUVOZ0lBSUFFZ0JFRUJjallDQkF3REMwRUFJUUFMSUFaRkRRQUNRQ0FGS0FJY0lnSkJBblJCdk5JQWFpSURLQUlBSUFWR0JFQWdBeUFBTmdJQUlBQU5BVUdRMEFCQmtOQUFLQUlBUVg0Z0FuZHhOZ0lBREFJTElBWkJFRUVVSUFZb0FoQWdCVVliYWlBQU5nSUFJQUJGRFFFTElBQWdCallDR0NBRktBSVFJZ0lFUUNBQUlBSTJBaEFnQWlBQU5nSVlDeUFGUVJScUtBSUFJZ0pGRFFBZ0FFRVVhaUFDTmdJQUlBSWdBRFlDR0FzZ0FTQUVhaUFFTmdJQUlBRWdCRUVCY2pZQ0JDQUJRYURRQUNnQ0FFY05BRUdVMEFBZ0JEWUNBQXdCQ3lBRVFmOEJUUVJBSUFSQmVIRkJ0TkFBYWlFQUFuOUJqTkFBS0FJQUlnSkJBU0FFUVFOMmRDSURjVVVFUUVHTTBBQWdBaUFEY2pZQ0FDQUFEQUVMSUFBb0FnZ0xJZ0lnQVRZQ0RDQUFJQUUyQWdnZ0FTQUFOZ0lNSUFFZ0FqWUNDQXdCQzBFZklRSWdCRUgvLy84SFRRUkFJQVJCSmlBRVFRaDJaeUlBYTNaQkFYRWdBRUVCZEd0QlBtb2hBZ3NnQVNBQ05nSWNJQUZDQURjQ0VDQUNRUUowUWJ6U0FHb2hBQUpBUVpEUUFDZ0NBQ0lEUVFFZ0FuUWlCM0ZGQkVBZ0FDQUJOZ0lBUVpEUUFDQURJQWR5TmdJQUlBRWdBRFlDR0NBQklBRTJBZ2dnQVNBQk5nSU1EQUVMSUFSQkdTQUNRUUYyYTBFQUlBSkJIMGNiZENFQ0lBQW9BZ0FoQUFKQUEwQWdBQ0lES0FJRVFYaHhJQVJHRFFFZ0FrRWRkaUVBSUFKQkFYUWhBaUFESUFCQkJIRnFRUkJxSWdjb0FnQWlBQTBBQ3lBSElBRTJBZ0FnQVNBRE5nSVlJQUVnQVRZQ0RDQUJJQUUyQWdnTUFRc2dBeWdDQ0NJQUlBRTJBZ3dnQXlBQk5nSUlJQUZCQURZQ0dDQUJJQU0yQWd3Z0FTQUFOZ0lJQzBHczBBQkJyTkFBS0FJQVFRRnJJZ0JCZnlBQUd6WUNBQXNMQndBZ0FDMEFLQXNIQUNBQUxRQXFDd2NBSUFBdEFDc0xCd0FnQUMwQUtRc0hBQ0FBTHdFeUN3Y0FJQUF0QUM0TFFBRUVmeUFBS0FJWUlRRWdBQzBBTFNFQ0lBQXRBQ2doQXlBQUtBSTRJUVFnQUJBd0lBQWdCRFlDT0NBQUlBTTZBQ2dnQUNBQ09nQXRJQUFnQVRZQ0dBdTc0Z0VDQjM4RGZpQUJJQUpxSVFRQ1FDQUFJZ0lvQWd3aUFBMEFJQUlvQWdRRVFDQUNJQUUyQWdRTEl3QkJFR3NpQ0NRQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDZndKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUlBSW9BaHdpQTBFQmF3N2RBZG9CQWRrQkFnTUVCUVlIQ0FrS0N3d05EdGdCRHhEWEFSRVMxZ0VURkJVV0Z4Z1pHaHZnQWQ4QkhCMGUxUUVmSUNFaUl5UWwxQUVtSnlncEtpc3Mwd0hTQVMwdTBRSFFBUzh3TVRJek5EVTJOemc1T2pzOFBUNC9RRUZDUTBSRlJ0c0JSMGhKU3M4QnpnRkx6UUZNekFGTlRrOVFVVkpUVkZWV1YxaFpXbHRjWFY1ZllHRmlZMlJsWm1kb2FXcHJiRzF1YjNCeGNuTjBkWFozZUhsNmUzeDlmbitBQVlFQmdnR0RBWVFCaFFHR0FZY0JpQUdKQVlvQml3R01BWTBCamdHUEFaQUJrUUdTQVpNQmxBR1ZBWllCbHdHWUFaa0JtZ0diQVp3Qm5RR2VBWjhCb0FHaEFhSUJvd0drQWFVQnBnR25BYWdCcVFHcUFhc0JyQUd0QWE0QnJ3R3dBYkVCc2dHekFiUUJ0UUcyQWJjQnl3SEtBYmdCeVFHNUFjZ0J1Z0c3QWJ3QnZRRytBYjhCd0FIQkFjSUJ3d0hFQWNVQnhnRUEzQUVMUVFBTXhnRUxRUTRNeFFFTFFRME14QUVMUVE4TXd3RUxRUkFNd2dFTFFSTU13UUVMUVJRTXdBRUxRUlVNdndFTFFSWU12Z0VMUVJnTXZRRUxRUmtNdkFFTFFSb011d0VMUVJzTXVnRUxRUndNdVFFTFFSME11QUVMUVFnTXR3RUxRUjRNdGdFTFFTQU10UUVMUVI4TXRBRUxRUWNNc3dFTFFTRU1zZ0VMUVNJTXNRRUxRU01Nc0FFTFFTUU1yd0VMUVJJTXJnRUxRUkVNclFFTFFTVU1yQUVMUVNZTXF3RUxRU2NNcWdFTFFTZ01xUUVMUWNNQkRLZ0JDMEVxREtjQkMwRXJES1lCQzBFc0RLVUJDMEV0REtRQkMwRXVES01CQzBFdkRLSUJDMEhFQVF5aEFRdEJNQXlnQVF0Qk5BeWZBUXRCREF5ZUFRdEJNUXlkQVF0Qk1neWNBUXRCTXd5YkFRdEJPUXlhQVF0Qk5ReVpBUXRCeFFFTW1BRUxRUXNNbHdFTFFUb01sZ0VMUVRZTWxRRUxRUW9NbEFFTFFUY01rd0VMUVRnTWtnRUxRVHdNa1FFTFFUc01rQUVMUVQwTWp3RUxRUWtNamdFTFFTa01qUUVMUVQ0TWpBRUxRVDhNaXdFTFFjQUFESW9CQzBIQkFBeUpBUXRCd2dBTWlBRUxRY01BREljQkMwSEVBQXlHQVF0QnhRQU1oUUVMUWNZQURJUUJDMEVYRElNQkMwSEhBQXlDQVF0QnlBQU1nUUVMUWNrQURJQUJDMEhLQUF4L0MwSExBQXgrQzBITkFBeDlDMEhNQUF4OEMwSE9BQXg3QzBIUEFBeDZDMEhRQUF4NUMwSFJBQXg0QzBIU0FBeDNDMEhUQUF4MkMwSFVBQXgxQzBIV0FBeDBDMEhWQUF4ekMwRUdESElMUWRjQURIRUxRUVVNY0F0QjJBQU1id3RCQkF4dUMwSFpBQXh0QzBIYUFBeHNDMEhiQUF4ckMwSGNBQXhxQzBFRERHa0xRZDBBREdnTFFkNEFER2NMUWQ4QURHWUxRZUVBREdVTFFlQUFER1FMUWVJQURHTUxRZU1BREdJTFFRSU1ZUXRCNUFBTVlBdEI1UUFNWHd0QjVnQU1YZ3RCNXdBTVhRdEI2QUFNWEF0QjZRQU1Xd3RCNmdBTVdndEI2d0FNV1F0QjdBQU1XQXRCN1FBTVZ3dEI3Z0FNVmd0Qjd3QU1WUXRCOEFBTVZBdEI4UUFNVXd0QjhnQU1VZ3RCOHdBTVVRdEI5QUFNVUF0QjlRQU1Ud3RCOWdBTVRndEI5d0FNVFF0QitBQU1UQXRCK1FBTVN3dEIrZ0FNU2d0Qit3QU1TUXRCL0FBTVNBdEIvUUFNUnd0Qi9nQU1SZ3RCL3dBTVJRdEJnQUVNUkF0QmdRRU1Rd3RCZ2dFTVFndEJnd0VNUVF0QmhBRU1RQXRCaFFFTVB3dEJoZ0VNUGd0Qmh3RU1QUXRCaUFFTVBBdEJpUUVNT3d0QmlnRU1PZ3RCaXdFTU9RdEJqQUVNT0F0QmpRRU1Od3RCamdFTU5ndEJqd0VNTlF0QmtBRU1OQXRCa1FFTU13dEJrZ0VNTWd0Qmt3RU1NUXRCbEFFTU1BdEJsUUVNTHd0QmxnRU1MZ3RCbHdFTUxRdEJtQUVNTEF0Qm1RRU1Ld3RCbWdFTUtndEJtd0VNS1F0Qm5BRU1LQXRCblFFTUp3dEJuZ0VNSmd0Qm53RU1KUXRCb0FFTUpBdEJvUUVNSXd0Qm9nRU1JZ3RCb3dFTUlRdEJwQUVNSUF0QnBRRU1Id3RCcGdFTUhndEJwd0VNSFF0QnFBRU1IQXRCcVFFTUd3dEJxZ0VNR2d0QnF3RU1HUXRCckFFTUdBdEJyUUVNRnd0QnJnRU1GZ3RCQVF3VkMwR3ZBUXdVQzBHd0FRd1RDMEd4QVF3U0MwR3pBUXdSQzBHeUFRd1FDMEcwQVF3UEMwRzFBUXdPQzBHMkFRd05DMEczQVF3TUMwRzRBUXdMQzBHNUFRd0tDMEc2QVF3SkMwRzdBUXdJQzBIR0FRd0hDMEc4QVF3R0MwRzlBUXdGQzBHK0FRd0VDMEcvQVF3REMwSEFBUXdDQzBIQ0FRd0JDMEhCQVFzaEF3TkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFJQUlDZndKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUovQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FnQWdKL0FrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDZndKQUFrQUNmd0pBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDZndKQUFrQUNRQUpBQW44Q1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FDQUREc1lCQUFFQ0F3UUZCZ2NJQ1FvTERBME9EeEFSRWhNVUZSWVhHQmthR3h3ZEh5QWhJeVVtS0NvckxDOHdNVEl6TkRVMk56azZPenc5bEFOQVFrUkZSa2xMVGs5UVVWSlRWRlZXV0ZwYlhGMWVYMkJoWW1Oa1pXWm5hR3BzYjNCeGMzVjJlSGw2ZTN4L2dBR0JBWUlCZ3dHRUFZVUJoZ0dIQVlnQmlRR0tBWXNCakFHTkFZNEJqd0dRQVpFQmtnR1RBWlFCbFFHV0FaY0JtQUdaQVpvQm13R2NBWjBCbmdHZkFhQUJvUUdpQWFNQnBBR2xBYVlCcHdHb0Fha0JxZ0dyQWF3QnJRR3VBYThCc0FHeEFiSUJzd0cwQWJVQnRnRzNBYmdCdVFHNkFic0J2QUc5QWI0QnZ3SEFBY0VCd2dIREFjUUJ4UUhHQWNjQnlBSEpBY3NCekFITkFjNEJ6d0dLQTRrRGlBT0hBNFFEZ3dPQUEvc0MrZ0w1QXZnQzl3TDBBdk1DOGdMTEFzRUNzQUxaQVFzZ0FTQUVSdzN3QWtIZEFTRURETE1EQ3lBQklBUkhEY2dCUWNNQklRTU1zZ01MSUFFZ0JFY05lMEgzQUNFRERMRURDeUFCSUFSSERYQkI3d0FoQXd5d0F3c2dBU0FFUncxcFFlb0FJUU1NcndNTElBRWdCRWNOWlVIb0FDRURESzREQ3lBQklBUkhEV0pCNWdBaEF3eXRBd3NnQVNBRVJ3MGFRUmdoQXd5c0F3c2dBU0FFUncwVlFSSWhBd3lyQXdzZ0FTQUVSdzFDUWNVQUlRTU1xZ01MSUFFZ0JFY05ORUUvSVFNTXFRTUxJQUVnQkVjTk1rRThJUU1NcUFNTElBRWdCRWNOSzBFeElRTU1wd01MSUFJdEFDNUJBVVlObndNTXdRSUxRUUFoQUFKQUFrQUNRQ0FDTFFBcVJRMEFJQUl0QUN0RkRRQWdBaThCTUNJRFFRSnhSUTBCREFJTElBSXZBVEFpQTBFQmNVVU5BUXRCQVNFQUlBSXRBQ2hCQVVZTkFDQUNMd0V5SWdWQjVBQnJRZVFBU1EwQUlBVkJ6QUZHRFFBZ0JVR3dBa1lOQUNBRFFjQUFjUTBBUVFBaEFDQURRWWdFY1VHQUJFWU5BQ0FEUVNoeFFRQkhJUUFMSUFKQkFEc0JNQ0FDUVFBNkFDOGdBRVVOM3dJZ0FrSUFOd01nRE9BQ0MwRUFJUUFDUUNBQ0tBSTRJZ05GRFFBZ0F5Z0NMQ0lEUlEwQUlBSWdBeEVBQUNFQUN5QUFSUTNNQVNBQVFSVkhEZDBDSUFKQkJEWUNIQ0FDSUFFMkFoUWdBa0d3R0RZQ0VDQUNRUlUyQWd4QkFDRURES1FEQ3lBQklBUkdCRUJCQmlFRERLUURDeUFCUVFGcUlRRkJBQ0VBQWtBZ0FpZ0NPQ0lEUlEwQUlBTW9BbFFpQTBVTkFDQUNJQU1SQUFBaEFBc2dBQTNaQWd3Y0N5QUNRZ0EzQXlCQkVpRURESWtEQ3lBQklBUkhEUlpCSFNFRERLRURDeUFCSUFSSEJFQWdBVUVCYWlFQlFSQWhBd3lJQXd0QkJ5RURES0FEQ3lBQ0lBSXBBeUFpQ2lBRUlBRnJyU0lMZlNJTVFnQWdDaUFNV2hzM0F5QWdDaUFMV0EzVUFrRUlJUU1NbndNTElBRWdCRWNFUUNBQ1FRazJBZ2dnQWlBQk5nSUVRUlFoQXd5R0F3dEJDU0VEREo0REN5QUNLUU1nUWdCU0RjY0JJQUlnQWk4Qk1FR0FBWEk3QVRBTVFnc2dBU0FFUncwL1FkQUFJUU1NbkFNTElBRWdCRVlFUUVFTElRTU1uQU1MSUFGQkFXb2hBVUVBSVFBQ1FDQUNLQUk0SWdORkRRQWdBeWdDVUNJRFJRMEFJQUlnQXhFQUFDRUFDeUFBRGM4Q0RNWUJDMEVBSVFBQ1FDQUNLQUk0SWdORkRRQWdBeWdDU0NJRFJRMEFJQUlnQXhFQUFDRUFDeUFBUlEzR0FTQUFRUlZIRGMwQ0lBSkJDellDSENBQ0lBRTJBaFFnQWtHQ0dUWUNFQ0FDUVJVMkFneEJBQ0VEREpvREMwRUFJUUFDUUNBQ0tBSTRJZ05GRFFBZ0F5Z0NTQ0lEUlEwQUlBSWdBeEVBQUNFQUN5QUFSUTBNSUFCQkZVY055Z0lnQWtFYU5nSWNJQUlnQVRZQ0ZDQUNRWUlaTmdJUUlBSkJGVFlDREVFQUlRTU1tUU1MUVFBaEFBSkFJQUlvQWpnaUEwVU5BQ0FES0FKTUlnTkZEUUFnQWlBREVRQUFJUUFMSUFCRkRjUUJJQUJCRlVjTnh3SWdBa0VMTmdJY0lBSWdBVFlDRkNBQ1FaRVhOZ0lRSUFKQkZUWUNERUVBSVFNTW1BTUxJQUVnQkVZRVFFRVBJUU1NbUFNTElBRXRBQUFpQUVFN1JnMEhJQUJCRFVjTnhBSWdBVUVCYWlFQkRNTUJDMEVBSVFBQ1FDQUNLQUk0SWdORkRRQWdBeWdDVENJRFJRMEFJQUlnQXhFQUFDRUFDeUFBUlEzREFTQUFRUlZIRGNJQ0lBSkJEellDSENBQ0lBRTJBaFFnQWtHUkZ6WUNFQ0FDUVJVMkFneEJBQ0VEREpZREN3TkFJQUV0QUFCQjhEVnFMUUFBSWdCQkFVY0VRQ0FBUVFKSERjRUNJQUlvQWdRaEFFRUFJUU1nQWtFQU5nSUVJQUlnQUNBQlFRRnFJZ0VRTFNJQURjSUNETVVCQ3lBRUlBRkJBV29pQVVjTkFBdEJFaUVEREpVREMwRUFJUUFDUUNBQ0tBSTRJZ05GRFFBZ0F5Z0NUQ0lEUlEwQUlBSWdBeEVBQUNFQUN5QUFSUTNGQVNBQVFSVkhEYjBDSUFKQkd6WUNIQ0FDSUFFMkFoUWdBa0dSRnpZQ0VDQUNRUlUyQWd4QkFDRURESlFEQ3lBQklBUkdCRUJCRmlFRERKUURDeUFDUVFvMkFnZ2dBaUFCTmdJRVFRQWhBQUpBSUFJb0FqZ2lBMFVOQUNBREtBSklJZ05GRFFBZ0FpQURFUUFBSVFBTElBQkZEY0lCSUFCQkZVY051UUlnQWtFVk5nSWNJQUlnQVRZQ0ZDQUNRWUlaTmdJUUlBSkJGVFlDREVFQUlRTU1rd01MSUFFZ0JFY0VRQU5BSUFFdEFBQkI4RGRxTFFBQUlnQkJBa2NFUUFKQUlBQkJBV3NPQk1RQ3ZRSUF2Z0s5QWdzZ0FVRUJhaUVCUVFnaEF3ejhBZ3NnQkNBQlFRRnFJZ0ZIRFFBTFFSVWhBd3lUQXd0QkZTRURESklEQ3dOQUlBRXRBQUJCOERscUxRQUFJZ0JCQWtjRVFDQUFRUUZyRGdURkFyY0N3d0s0QXJjQ0N5QUVJQUZCQVdvaUFVY05BQXRCR0NFRERKRURDeUFCSUFSSEJFQWdBa0VMTmdJSUlBSWdBVFlDQkVFSElRTU0rQUlMUVJraEF3eVFBd3NnQVVFQmFpRUJEQUlMSUFFZ0JFWUVRRUVhSVFNTWp3TUxBa0FnQVMwQUFFRU5hdzRVdFFHL0FiOEJ2d0cvQWI4QnZ3Ry9BYjhCdndHL0FiOEJ2d0cvQWI4QnZ3Ry9BYjhCdndFQXZ3RUxRUUFoQXlBQ1FRQTJBaHdnQWtHdkN6WUNFQ0FDUVFJMkFnd2dBaUFCUVFGcU5nSVVESTREQ3lBQklBUkdCRUJCR3lFRERJNERDeUFCTFFBQUlnQkJPMGNFUUNBQVFRMUhEYkVDSUFGQkFXb2hBUXk2QVFzZ0FVRUJhaUVCQzBFaUlRTU04d0lMSUFFZ0JFWUVRRUVjSVFNTWpBTUxRZ0FoQ2dKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQWdBUzBBQUVFd2F3NDN3UUxBQWdBQkFnTUVCUVlIMEFIUUFkQUIwQUhRQWRBQjBBRUlDUW9MREEzUUFkQUIwQUhRQWRBQjBBSFFBZEFCMEFIUUFkQUIwQUhRQWRBQjBBSFFBZEFCMEFIUUFkQUIwQUhRQWRBQjBBSFFBZEFCRGc4UUVSSVQwQUVMUWdJaENnekFBZ3RDQXlFS0RMOENDMElFSVFvTXZnSUxRZ1VoQ2d5OUFndENCaUVLREx3Q0MwSUhJUW9NdXdJTFFnZ2hDZ3k2QWd0Q0NTRUtETGtDQzBJS0lRb011QUlMUWdzaENneTNBZ3RDRENFS0RMWUNDMElOSVFvTXRRSUxRZzRoQ2d5MEFndENEeUVLRExNQ0MwSUtJUW9Nc2dJTFFnc2hDZ3l4QWd0Q0RDRUtETEFDQzBJTklRb01yd0lMUWc0aENneXVBZ3RDRHlFS0RLMENDMElBSVFvQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFJQUV0QUFCQk1Hc09OOEFDdndJQUFRSURCQVVHQjc0Q3ZnSytBcjRDdmdLK0FyNENDQWtLQ3d3TnZnSytBcjRDdmdLK0FyNEN2Z0srQXI0Q3ZnSytBcjRDdmdLK0FyNEN2Z0srQXI0Q3ZnSytBcjRDdmdLK0FyNEN2Z0srQWc0UEVCRVNFNzRDQzBJQ0lRb012d0lMUWdNaENneStBZ3RDQkNFS0RMMENDMElGSVFvTXZBSUxRZ1loQ2d5N0FndENCeUVLRExvQ0MwSUlJUW9NdVFJTFFna2hDZ3k0QWd0Q0NpRUtETGNDQzBJTElRb010Z0lMUWd3aENneTFBZ3RDRFNFS0RMUUNDMElPSVFvTXN3SUxRZzhoQ2d5eUFndENDaUVLRExFQ0MwSUxJUW9Nc0FJTFFnd2hDZ3l2QWd0Q0RTRUtESzRDQzBJT0lRb01yUUlMUWc4aENneXNBZ3NnQWlBQ0tRTWdJZ29nQkNBQmE2MGlDMzBpREVJQUlBb2dERm9iTndNZ0lBb2dDMWdOcHdKQkh5RURESWtEQ3lBQklBUkhCRUFnQWtFSk5nSUlJQUlnQVRZQ0JFRWxJUU1NOEFJTFFTQWhBd3lJQXd0QkFTRUZJQUl2QVRBaUEwRUljVVVFUUNBQ0tRTWdRZ0JTSVFVTEFrQWdBaTBBTGdSQVFRRWhBQ0FDTFFBcFFRVkdEUUVnQTBIQUFIRkZJQVZ4UlEwQkMwRUFJUUFnQTBIQUFIRU5BRUVDSVFBZ0EwRUljUTBBSUFOQmdBUnhCRUFDUUNBQ0xRQW9RUUZIRFFBZ0FpMEFMVUVLY1EwQVFRVWhBQXdDQzBFRUlRQU1BUXNnQTBFZ2NVVUVRQUpBSUFJdEFDaEJBVVlOQUNBQ0x3RXlJZ0JCNUFCclFlUUFTUTBBSUFCQnpBRkdEUUFnQUVHd0FrWU5BRUVFSVFBZ0EwRW9jVVVOQWlBRFFZZ0VjVUdBQkVZTkFndEJBQ0VBREFFTFFRQkJBeUFDS1FNZ1VCc2hBQXNnQUVFQmF3NEZ2Z0lBc0FFQnBBS2hBZ3RCRVNFRERPMENDeUFDUVFFNkFDOE1oQU1MSUFFZ0JFY05uUUpCSkNFRERJUURDeUFCSUFSSERSeEJ4Z0FoQXd5REF3dEJBQ0VBQWtBZ0FpZ0NPQ0lEUlEwQUlBTW9Ba1FpQTBVTkFDQUNJQU1SQUFBaEFBc2dBRVVOSnlBQVFSVkhEWmdDSUFKQjBBQTJBaHdnQWlBQk5nSVVJQUpCa1JnMkFoQWdBa0VWTmdJTVFRQWhBd3lDQXdzZ0FTQUVSZ1JBUVNnaEF3eUNBd3RCQUNFRElBSkJBRFlDQkNBQ1FRdzJBZ2dnQWlBQklBRVFLaUlBUlEyVUFpQUNRU2MyQWh3Z0FpQUJOZ0lVSUFJZ0FEWUNEQXlCQXdzZ0FTQUVSZ1JBUVNraEF3eUJBd3NnQVMwQUFDSUFRU0JHRFJNZ0FFRUpSdzJWQWlBQlFRRnFJUUVNRkFzZ0FTQUVSd1JBSUFGQkFXb2hBUXdXQzBFcUlRTU0vd0lMSUFFZ0JFWUVRRUVySVFNTS93SUxJQUV0QUFBaUFFRUpSeUFBUVNCSGNRMlFBaUFDTFFBc1FRaEhEZDBDSUFKQkFEb0FMQXpkQWdzZ0FTQUVSZ1JBUVN3aEF3eitBZ3NnQVMwQUFFRUtSdzJPQWlBQlFRRnFJUUVNc0FFTElBRWdCRWNOaWdKQkx5RUREUHdDQ3dOQUlBRXRBQUFpQUVFZ1J3UkFJQUJCQ21zT0JJUUNpQUtJQW9RQ2hnSUxJQVFnQVVFQmFpSUJSdzBBQzBFeElRTU0rd0lMUVRJaEF5QUJJQVJHRGZvQ0lBSW9BZ0FpQUNBRUlBRnJhaUVISUFFZ0FHdEJBMm9oQmdKQUEwQWdBRUh3TzJvdEFBQWdBUzBBQUNJRlFTQnlJQVVnQlVIQkFHdEIvd0Z4UVJwSkcwSC9BWEZIRFFFZ0FFRURSZ1JBUVFZaEFRemlBZ3NnQUVFQmFpRUFJQVFnQVVFQmFpSUJSdzBBQ3lBQ0lBYzJBZ0FNK3dJTElBSkJBRFlDQUF5R0FndEJNeUVESUFRZ0FTSUFSZzM1QWlBRUlBRnJJQUlvQWdBaUFXb2hCeUFBSUFGclFRaHFJUVlDUUFOQUlBRkI5RHRxTFFBQUlBQXRBQUFpQlVFZ2NpQUZJQVZCd1FCclFmOEJjVUVhU1J0Qi93RnhSdzBCSUFGQkNFWUVRRUVGSVFFTTRRSUxJQUZCQVdvaEFTQUVJQUJCQVdvaUFFY05BQXNnQWlBSE5nSUFEUG9DQ3lBQ1FRQTJBZ0FnQUNFQkRJVUNDMEUwSVFNZ0JDQUJJZ0JHRGZnQ0lBUWdBV3NnQWlnQ0FDSUJhaUVISUFBZ0FXdEJCV29oQmdKQUEwQWdBVUhRd2dCcUxRQUFJQUF0QUFBaUJVRWdjaUFGSUFWQndRQnJRZjhCY1VFYVNSdEIvd0Z4UncwQklBRkJCVVlFUUVFSElRRU00QUlMSUFGQkFXb2hBU0FFSUFCQkFXb2lBRWNOQUFzZ0FpQUhOZ0lBRFBrQ0N5QUNRUUEyQWdBZ0FDRUJESVFDQ3lBQklBUkhCRUFEUUNBQkxRQUFRWUErYWkwQUFDSUFRUUZIQkVBZ0FFRUNSZzBKRElFQ0N5QUVJQUZCQVdvaUFVY05BQXRCTUNFRERQZ0NDMEV3SVFNTTl3SUxJQUVnQkVjRVFBTkFJQUV0QUFBaUFFRWdSd1JBSUFCQkNtc09CUDhCL2dIK0FmOEIvZ0VMSUFRZ0FVRUJhaUlCUncwQUMwRTRJUU1NOXdJTFFUZ2hBd3oyQWdzRFFDQUJMUUFBSWdCQklFY2dBRUVKUjNFTjlnRWdCQ0FCUVFGcUlnRkhEUUFMUVR3aEF3ejFBZ3NEUUNBQkxRQUFJZ0JCSUVjRVFBSkFJQUJCQ21zT0JQa0JCQVQ1QVFBTElBQkJMRVlOOVFFTUF3c2dCQ0FCUVFGcUlnRkhEUUFMUVQ4aEF3ejBBZ3RCd0FBaEF5QUJJQVJHRGZNQ0lBSW9BZ0FpQUNBRUlBRnJhaUVGSUFFZ0FHdEJCbW9oQmdKQUEwQWdBRUdBUUdzdEFBQWdBUzBBQUVFZ2NrY05BU0FBUVFaR0Rkc0NJQUJCQVdvaEFDQUVJQUZCQVdvaUFVY05BQXNnQWlBRk5nSUFEUFFDQ3lBQ1FRQTJBZ0FMUVRZaEF3elpBZ3NnQVNBRVJnUkFRY0VBSVFNTThnSUxJQUpCRERZQ0NDQUNJQUUyQWdRZ0FpMEFMRUVCYXc0RSt3SHVBZXdCNndIVUFnc2dBVUVCYWlFQkRQb0JDeUFCSUFSSEJFQURRQUpBSUFFdEFBQWlBRUVnY2lBQUlBQkJ3UUJyUWY4QmNVRWFTUnRCL3dGeElnQkJDVVlOQUNBQVFTQkdEUUFDUUFKQUFrQUNRQ0FBUWVNQWF3NFRBQU1EQXdNREF3TUJBd01EQXdNREF3TURBZ01MSUFGQkFXb2hBVUV4SVFNTTNBSUxJQUZCQVdvaEFVRXlJUU1NMndJTElBRkJBV29oQVVFeklRTU0yZ0lMRFA0QkN5QUVJQUZCQVdvaUFVY05BQXRCTlNFRERQQUNDMEUxSVFNTTd3SUxJQUVnQkVjRVFBTkFJQUV0QUFCQmdEeHFMUUFBUVFGSERmY0JJQVFnQVVFQmFpSUJSdzBBQzBFOUlRTU03d0lMUVQwaEF3enVBZ3RCQUNFQUFrQWdBaWdDT0NJRFJRMEFJQU1vQWtBaUEwVU5BQ0FDSUFNUkFBQWhBQXNnQUVVTkFTQUFRUlZIRGVZQklBSkJ3Z0EyQWh3Z0FpQUJOZ0lVSUFKQjR4ZzJBaEFnQWtFVk5nSU1RUUFoQXd6dEFnc2dBVUVCYWlFQkMwRThJUU1NMGdJTElBRWdCRVlFUUVIQ0FDRURET3NDQ3dKQUEwQUNRQ0FCTFFBQVFRbHJEaGdBQXN3Q3pBTFJBc3dDekFMTUFzd0N6QUxNQXN3Q3pBTE1Bc3dDekFMTUFzd0N6QUxNQXN3Q3pBTE1BZ0RNQWdzZ0JDQUJRUUZxSWdGSERRQUxRY0lBSVFNTTZ3SUxJQUZCQVdvaEFTQUNMUUF0UVFGeFJRMytBUXRCTENFREROQUNDeUFCSUFSSERkNEJRY1FBSVFNTTZBSUxBMEFnQVMwQUFFR1F3QUJxTFFBQVFRRkhEWndCSUFRZ0FVRUJhaUlCUncwQUMwSEZBQ0VERE9jQ0N5QUJMUUFBSWdCQklFWU4vZ0VnQUVFNlJ3M0FBaUFDS0FJRUlRQkJBQ0VESUFKQkFEWUNCQ0FDSUFBZ0FSQXBJZ0FOM2dFTTNRRUxRY2NBSVFNZ0JDQUJJZ0JHRGVVQ0lBUWdBV3NnQWlnQ0FDSUJhaUVISUFBZ0FXdEJCV29oQmdOQUlBRkJrTUlBYWkwQUFDQUFMUUFBSWdWQklISWdCU0FGUWNFQWEwSC9BWEZCR2trYlFmOEJjVWNOdndJZ0FVRUZSZzNDQWlBQlFRRnFJUUVnQkNBQVFRRnFJZ0JIRFFBTElBSWdCellDQUF6bEFndEJ5QUFoQXlBRUlBRWlBRVlONUFJZ0JDQUJheUFDS0FJQUlnRnFJUWNnQUNBQmEwRUphaUVHQTBBZ0FVR1d3Z0JxTFFBQUlBQXRBQUFpQlVFZ2NpQUZJQVZCd1FCclFmOEJjVUVhU1J0Qi93RnhSdzIrQWtFQ0lBRkJDVVlOd2dJYUlBRkJBV29oQVNBRUlBQkJBV29pQUVjTkFBc2dBaUFITmdJQURPUUNDeUFCSUFSR0JFQkJ5UUFoQXd6a0Fnc0NRQUpBSUFFdEFBQWlBRUVnY2lBQUlBQkJ3UUJyUWY4QmNVRWFTUnRCL3dGeFFlNEFhdzRIQUw4Q3Z3Sy9BcjhDdndJQnZ3SUxJQUZCQVdvaEFVRStJUU1NeXdJTElBRkJBV29oQVVFL0lRTU15Z0lMUWNvQUlRTWdCQ0FCSWdCR0RlSUNJQVFnQVdzZ0FpZ0NBQ0lCYWlFR0lBQWdBV3RCQVdvaEJ3TkFJQUZCb01JQWFpMEFBQ0FBTFFBQUlnVkJJSElnQlNBRlFjRUFhMEgvQVhGQkdra2JRZjhCY1VjTnZBSWdBVUVCUmcyK0FpQUJRUUZxSVFFZ0JDQUFRUUZxSWdCSERRQUxJQUlnQmpZQ0FBemlBZ3RCeXdBaEF5QUVJQUVpQUVZTjRRSWdCQ0FCYXlBQ0tBSUFJZ0ZxSVFjZ0FDQUJhMEVPYWlFR0EwQWdBVUdpd2dCcUxRQUFJQUF0QUFBaUJVRWdjaUFGSUFWQndRQnJRZjhCY1VFYVNSdEIvd0Z4UncyN0FpQUJRUTVHRGI0Q0lBRkJBV29oQVNBRUlBQkJBV29pQUVjTkFBc2dBaUFITmdJQURPRUNDMEhNQUNFRElBUWdBU0lBUmczZ0FpQUVJQUZySUFJb0FnQWlBV29oQnlBQUlBRnJRUTlxSVFZRFFDQUJRY0RDQUdvdEFBQWdBQzBBQUNJRlFTQnlJQVVnQlVIQkFHdEIvd0Z4UVJwSkcwSC9BWEZIRGJvQ1FRTWdBVUVQUmcyK0Fob2dBVUVCYWlFQklBUWdBRUVCYWlJQVJ3MEFDeUFDSUFjMkFnQU00QUlMUWMwQUlRTWdCQ0FCSWdCR0RkOENJQVFnQVdzZ0FpZ0NBQ0lCYWlFSElBQWdBV3RCQldvaEJnTkFJQUZCME1JQWFpMEFBQ0FBTFFBQUlnVkJJSElnQlNBRlFjRUFhMEgvQVhGQkdra2JRZjhCY1VjTnVRSkJCQ0FCUVFWR0RiMENHaUFCUVFGcUlRRWdCQ0FBUVFGcUlnQkhEUUFMSUFJZ0J6WUNBQXpmQWdzZ0FTQUVSZ1JBUWM0QUlRTU0zd0lMQWtBQ1FBSkFBa0FnQVMwQUFDSUFRU0J5SUFBZ0FFSEJBR3RCL3dGeFFScEpHMEgvQVhGQjR3QnJEaE1BdkFLOEFyd0N2QUs4QXJ3Q3ZBSzhBcndDdkFLOEFyd0NBYndDdkFLOEFnSUR2QUlMSUFGQkFXb2hBVUhCQUNFRERNZ0NDeUFCUVFGcUlRRkJ3Z0FoQXd6SEFnc2dBVUVCYWlFQlFjTUFJUU1NeGdJTElBRkJBV29oQVVIRUFDRURETVVDQ3lBQklBUkhCRUFnQWtFTk5nSUlJQUlnQVRZQ0JFSEZBQ0VERE1VQ0MwSFBBQ0VERE4wQ0N3SkFBa0FnQVMwQUFFRUthdzRFQVpBQmtBRUFrQUVMSUFGQkFXb2hBUXRCS0NFRERNTUNDeUFCSUFSR0JFQkIwUUFoQXd6Y0Fnc2dBUzBBQUVFZ1J3MEFJQUZCQVdvaEFTQUNMUUF0UVFGeFJRM1FBUXRCRnlFRERNRUNDeUFCSUFSSERjc0JRZElBSVFNTTJRSUxRZE1BSVFNZ0FTQUVSZzNZQWlBQ0tBSUFJZ0FnQkNBQmEyb2hCaUFCSUFCclFRRnFJUVVEUUNBQkxRQUFJQUJCMXNJQWFpMEFBRWNOeHdFZ0FFRUJSZzNLQVNBQVFRRnFJUUFnQkNBQlFRRnFJZ0ZIRFFBTElBSWdCallDQUF6WUFnc2dBU0FFUmdSQVFkVUFJUU1NMkFJTElBRXRBQUJCQ2tjTndnRWdBVUVCYWlFQkRNb0JDeUFCSUFSR0JFQkIxZ0FoQXd6WEFnc0NRQUpBSUFFdEFBQkJDbXNPQkFEREFjTUJBY01CQ3lBQlFRRnFJUUVNeWdFTElBRkJBV29oQVVIS0FDRURETDBDQzBFQUlRQUNRQ0FDS0FJNElnTkZEUUFnQXlnQ1BDSURSUTBBSUFJZ0F4RUFBQ0VBQ3lBQURiOEJRYzBBSVFNTXZBSUxJQUl0QUNsQklrWU56d0lNaVFFTElBUWdBU0lGUmdSQVFkc0FJUU1NMUFJTFFRQWhBRUVCSVFGQkFTRUdRUUFoQXdKQUFuOENRQUpBQWtBQ1FBSkFBa0FDUUNBRkxRQUFRVEJyRGdyRkFjUUJBQUVDQXdRRkJnakRBUXRCQWd3R0MwRUREQVVMUVFRTUJBdEJCUXdEQzBFR0RBSUxRUWNNQVF0QkNBc2hBMEVBSVFGQkFDRUdETDBCQzBFSklRTkJBU0VBUVFBaEFVRUFJUVlNdkFFTElBRWdCRVlFUUVIZEFDRURETk1DQ3lBQkxRQUFRUzVIRGJnQklBRkJBV29oQVF5SUFRc2dBU0FFUncyMkFVSGZBQ0VERE5FQ0N5QUJJQVJIQkVBZ0FrRU9OZ0lJSUFJZ0FUWUNCRUhRQUNFRERMZ0NDMEhnQUNFREROQUNDMEhoQUNFRElBRWdCRVlOendJZ0FpZ0NBQ0lBSUFRZ0FXdHFJUVVnQVNBQWEwRURhaUVHQTBBZ0FTMEFBQ0FBUWVMQ0FHb3RBQUJIRGJFQklBQkJBMFlOc3dFZ0FFRUJhaUVBSUFRZ0FVRUJhaUlCUncwQUN5QUNJQVUyQWdBTXp3SUxRZUlBSVFNZ0FTQUVSZzNPQWlBQ0tBSUFJZ0FnQkNBQmEyb2hCU0FCSUFCclFRSnFJUVlEUUNBQkxRQUFJQUJCNXNJQWFpMEFBRWNOc0FFZ0FFRUNSZzJ2QVNBQVFRRnFJUUFnQkNBQlFRRnFJZ0ZIRFFBTElBSWdCVFlDQUF6T0FndEI0d0FoQXlBQklBUkdEYzBDSUFJb0FnQWlBQ0FFSUFGcmFpRUZJQUVnQUd0QkEyb2hCZ05BSUFFdEFBQWdBRUhwd2dCcUxRQUFSdzJ2QVNBQVFRTkdEYTBCSUFCQkFXb2hBQ0FFSUFGQkFXb2lBVWNOQUFzZ0FpQUZOZ0lBRE0wQ0N5QUJJQVJHQkVCQjVRQWhBd3pOQWdzZ0FVRUJhaUVCUVFBaEFBSkFJQUlvQWpnaUEwVU5BQ0FES0FJd0lnTkZEUUFnQWlBREVRQUFJUUFMSUFBTnFnRkIxZ0FoQXd5ekFnc2dBU0FFUndSQUEwQWdBUzBBQUNJQVFTQkhCRUFDUUFKQUFrQWdBRUhJQUdzT0N3QUJzd0d6QWJNQnN3R3pBYk1Cc3dHekFRS3pBUXNnQVVFQmFpRUJRZElBSVFNTXR3SUxJQUZCQVdvaEFVSFRBQ0VERExZQ0N5QUJRUUZxSVFGQjFBQWhBd3kxQWdzZ0JDQUJRUUZxSWdGSERRQUxRZVFBSVFNTXpBSUxRZVFBSVFNTXl3SUxBMEFnQVMwQUFFSHd3Z0JxTFFBQUlnQkJBVWNFUUNBQVFRSnJEZ09uQWFZQnBRR2tBUXNnQkNBQlFRRnFJZ0ZIRFFBTFFlWUFJUU1NeWdJTElBRkJBV29nQVNBRVJ3MENHa0huQUNFRERNa0NDd05BSUFFdEFBQkI4TVFBYWkwQUFDSUFRUUZIQkVBQ1FDQUFRUUpyRGdTaUFhRUJvQUVBbndFTFFkY0FJUU1Nc1FJTElBUWdBVUVCYWlJQlJ3MEFDMEhvQUNFRERNZ0NDeUFCSUFSR0JFQkI2UUFoQXd6SUFnc0NRQ0FCTFFBQUlnQkJDbXNPR3JjQm13R2JBYlFCbXdHYkFac0Jtd0diQVpzQm13R2JBWnNCbXdHYkFac0Jtd0diQVpzQm13R2JBWnNCcEFHYkFac0JBSmtCQ3lBQlFRRnFDeUVCUVFZaEF3eXRBZ3NEUUNBQkxRQUFRZkRHQUdvdEFBQkJBVWNOZlNBRUlBRkJBV29pQVVjTkFBdEI2Z0FoQXd6RkFnc2dBVUVCYWlBQklBUkhEUUlhUWVzQUlRTU14QUlMSUFFZ0JFWUVRRUhzQUNFRERNUUNDeUFCUVFGcURBRUxJQUVnQkVZRVFFSHRBQ0VERE1NQ0N5QUJRUUZxQ3lFQlFRUWhBd3lvQWdzZ0FTQUVSZ1JBUWU0QUlRTU13UUlMQWtBQ1FBSkFJQUV0QUFCQjhNZ0FhaTBBQUVFQmF3NEhrQUdQQVk0QkFId0JBbzBCQ3lBQlFRRnFJUUVNQ3dzZ0FVRUJhZ3lUQVF0QkFDRURJQUpCQURZQ0hDQUNRWnNTTmdJUUlBSkJCellDRENBQ0lBRkJBV28yQWhRTXdBSUxBa0FEUUNBQkxRQUFRZkRJQUdvdEFBQWlBRUVFUndSQUFrQUNRQ0FBUVFGckRnZVVBWk1Ca2dHTkFRQUVBWTBCQzBIYUFDRURES29DQ3lBQlFRRnFJUUZCM0FBaEF3eXBBZ3NnQkNBQlFRRnFJZ0ZIRFFBTFFlOEFJUU1Nd0FJTElBRkJBV29Na1FFTElBUWdBU0lBUmdSQVFmQUFJUU1NdndJTElBQXRBQUJCTDBjTkFTQUFRUUZxSVFFTUJ3c2dCQ0FCSWdCR0JFQkI4UUFoQXd5K0Fnc2dBQzBBQUNJQlFTOUdCRUFnQUVFQmFpRUJRZDBBSVFNTXBRSUxJQUZCQ21zaUEwRVdTdzBBSUFBaEFVRUJJQU4wUVltQWdBSnhEZmtCQzBFQUlRTWdBa0VBTmdJY0lBSWdBRFlDRkNBQ1FZd2NOZ0lRSUFKQkJ6WUNEQXk4QWdzZ0FTQUVSd1JBSUFGQkFXb2hBVUhlQUNFRERLTUNDMEh5QUNFRERMc0NDeUFCSUFSR0JFQkI5QUFoQXd5N0Fnc0NRQ0FCTFFBQVFmRE1BR290QUFCQkFXc09BL2NCY3dDQ0FRdEI0UUFoQXd5aEFnc2dBU0FFUndSQUEwQWdBUzBBQUVId3lnQnFMUUFBSWdCQkEwY0VRQUpBSUFCQkFXc09BdmtCQUlVQkMwSGZBQ0VEREtNQ0N5QUVJQUZCQVdvaUFVY05BQXRCOHdBaEF3eTZBZ3RCOHdBaEF3eTVBZ3NnQVNBRVJ3UkFJQUpCRHpZQ0NDQUNJQUUyQWdSQjRBQWhBd3lnQWd0QjlRQWhBd3k0QWdzZ0FTQUVSZ1JBUWZZQUlRTU11QUlMSUFKQkR6WUNDQ0FDSUFFMkFnUUxRUU1oQXd5ZEFnc0RRQ0FCTFFBQVFTQkhEWTRDSUFRZ0FVRUJhaUlCUncwQUMwSDNBQ0VERExVQ0N5QUJJQVJHQkVCQitBQWhBd3kxQWdzZ0FTMEFBRUVnUncxNklBRkJBV29oQVF4YkMwRUFJUUFDUUNBQ0tBSTRJZ05GRFFBZ0F5Z0NPQ0lEUlEwQUlBSWdBeEVBQUNFQUN5QUFEWGdNZ0FJTElBRWdCRVlFUUVINkFDRURETE1DQ3lBQkxRQUFRY3dBUncxMElBRkJBV29oQVVFVERIWUxRZnNBSVFNZ0FTQUVSZzJ4QWlBQ0tBSUFJZ0FnQkNBQmEyb2hCU0FCSUFCclFRVnFJUVlEUUNBQkxRQUFJQUJCOE00QWFpMEFBRWNOY3lBQVFRVkdEWFVnQUVFQmFpRUFJQVFnQVVFQmFpSUJSdzBBQ3lBQ0lBVTJBZ0FNc1FJTElBRWdCRVlFUUVIOEFDRURETEVDQ3dKQUFrQWdBUzBBQUVIREFHc09EQUIwZEhSMGRIUjBkSFIwQVhRTElBRkJBV29oQVVIbUFDRURESmdDQ3lBQlFRRnFJUUZCNXdBaEF3eVhBZ3RCL1FBaEF5QUJJQVJHRGE4Q0lBSW9BZ0FpQUNBRUlBRnJhaUVGSUFFZ0FHdEJBbW9oQmdKQUEwQWdBUzBBQUNBQVFlM1BBR290QUFCSERYSWdBRUVDUmcwQklBQkJBV29oQUNBRUlBRkJBV29pQVVjTkFBc2dBaUFGTmdJQURMQUNDeUFDUVFBMkFnQWdCa0VCYWlFQlFSQU1jd3RCL2dBaEF5QUJJQVJHRGE0Q0lBSW9BZ0FpQUNBRUlBRnJhaUVGSUFFZ0FHdEJCV29oQmdKQUEwQWdBUzBBQUNBQVFmYk9BR290QUFCSERYRWdBRUVGUmcwQklBQkJBV29oQUNBRUlBRkJBV29pQVVjTkFBc2dBaUFGTmdJQURLOENDeUFDUVFBMkFnQWdCa0VCYWlFQlFSWU1jZ3RCL3dBaEF5QUJJQVJHRGEwQ0lBSW9BZ0FpQUNBRUlBRnJhaUVGSUFFZ0FHdEJBMm9oQmdKQUEwQWdBUzBBQUNBQVFmek9BR290QUFCSERYQWdBRUVEUmcwQklBQkJBV29oQUNBRUlBRkJBV29pQVVjTkFBc2dBaUFGTmdJQURLNENDeUFDUVFBMkFnQWdCa0VCYWlFQlFRVU1jUXNnQVNBRVJnUkFRWUFCSVFNTXJRSUxJQUV0QUFCQjJRQkhEVzRnQVVFQmFpRUJRUWdNY0FzZ0FTQUVSZ1JBUVlFQklRTU1yQUlMQWtBQ1FDQUJMUUFBUWM0QWF3NERBRzhCYndzZ0FVRUJhaUVCUWVzQUlRTU1rd0lMSUFGQkFXb2hBVUhzQUNFRERKSUNDeUFCSUFSR0JFQkJnZ0VoQXd5ckFnc0NRQUpBSUFFdEFBQkJ5QUJyRGdnQWJtNXVibTV1QVc0TElBRkJBV29oQVVIcUFDRURESklDQ3lBQlFRRnFJUUZCN1FBaEF3eVJBZ3RCZ3dFaEF5QUJJQVJHRGFrQ0lBSW9BZ0FpQUNBRUlBRnJhaUVGSUFFZ0FHdEJBbW9oQmdKQUEwQWdBUzBBQUNBQVFZRFBBR290QUFCSERXd2dBRUVDUmcwQklBQkJBV29oQUNBRUlBRkJBV29pQVVjTkFBc2dBaUFGTmdJQURLb0NDeUFDUVFBMkFnQWdCa0VCYWlFQlFRQU1iUXRCaEFFaEF5QUJJQVJHRGFnQ0lBSW9BZ0FpQUNBRUlBRnJhaUVGSUFFZ0FHdEJCR29oQmdKQUEwQWdBUzBBQUNBQVFZUFBBR290QUFCSERXc2dBRUVFUmcwQklBQkJBV29oQUNBRUlBRkJBV29pQVVjTkFBc2dBaUFGTmdJQURLa0NDeUFDUVFBMkFnQWdCa0VCYWlFQlFTTU1iQXNnQVNBRVJnUkFRWVVCSVFNTXFBSUxBa0FDUUNBQkxRQUFRY3dBYXc0SUFHdHJhMnRyYXdGckN5QUJRUUZxSVFGQjd3QWhBd3lQQWdzZ0FVRUJhaUVCUWZBQUlRTU1qZ0lMSUFFZ0JFWUVRRUdHQVNFRERLY0NDeUFCTFFBQVFjVUFSdzFvSUFGQkFXb2hBUXhnQzBHSEFTRURJQUVnQkVZTnBRSWdBaWdDQUNJQUlBUWdBV3RxSVFVZ0FTQUFhMEVEYWlFR0FrQURRQ0FCTFFBQUlBQkJpTThBYWkwQUFFY05hQ0FBUVFOR0RRRWdBRUVCYWlFQUlBUWdBVUVCYWlJQlJ3MEFDeUFDSUFVMkFnQU1wZ0lMSUFKQkFEWUNBQ0FHUVFGcUlRRkJMUXhwQzBHSUFTRURJQUVnQkVZTnBBSWdBaWdDQUNJQUlBUWdBV3RxSVFVZ0FTQUFhMEVJYWlFR0FrQURRQ0FCTFFBQUlBQkIwTThBYWkwQUFFY05aeUFBUVFoR0RRRWdBRUVCYWlFQUlBUWdBVUVCYWlJQlJ3MEFDeUFDSUFVMkFnQU1wUUlMSUFKQkFEWUNBQ0FHUVFGcUlRRkJLUXhvQ3lBQklBUkdCRUJCaVFFaEF3eWtBZ3RCQVNBQkxRQUFRZDhBUncxbkdpQUJRUUZxSVFFTVhndEJpZ0VoQXlBQklBUkdEYUlDSUFJb0FnQWlBQ0FFSUFGcmFpRUZJQUVnQUd0QkFXb2hCZ05BSUFFdEFBQWdBRUdNendCcUxRQUFSdzFrSUFCQkFVWU4rZ0VnQUVFQmFpRUFJQVFnQVVFQmFpSUJSdzBBQ3lBQ0lBVTJBZ0FNb2dJTFFZc0JJUU1nQVNBRVJnMmhBaUFDS0FJQUlnQWdCQ0FCYTJvaEJTQUJJQUJyUVFKcUlRWUNRQU5BSUFFdEFBQWdBRUdPendCcUxRQUFSdzFrSUFCQkFrWU5BU0FBUVFGcUlRQWdCQ0FCUVFGcUlnRkhEUUFMSUFJZ0JUWUNBQXlpQWdzZ0FrRUFOZ0lBSUFaQkFXb2hBVUVDREdVTFFZd0JJUU1nQVNBRVJnMmdBaUFDS0FJQUlnQWdCQ0FCYTJvaEJTQUJJQUJyUVFGcUlRWUNRQU5BSUFFdEFBQWdBRUh3endCcUxRQUFSdzFqSUFCQkFVWU5BU0FBUVFGcUlRQWdCQ0FCUVFGcUlnRkhEUUFMSUFJZ0JUWUNBQXloQWdzZ0FrRUFOZ0lBSUFaQkFXb2hBVUVmREdRTFFZMEJJUU1nQVNBRVJnMmZBaUFDS0FJQUlnQWdCQ0FCYTJvaEJTQUJJQUJyUVFGcUlRWUNRQU5BSUFFdEFBQWdBRUh5endCcUxRQUFSdzFpSUFCQkFVWU5BU0FBUVFGcUlRQWdCQ0FCUVFGcUlnRkhEUUFMSUFJZ0JUWUNBQXlnQWdzZ0FrRUFOZ0lBSUFaQkFXb2hBVUVKREdNTElBRWdCRVlFUUVHT0FTRURESjhDQ3dKQUFrQWdBUzBBQUVISkFHc09Cd0JpWW1KaVlnRmlDeUFCUVFGcUlRRkIrQUFoQXd5R0Fnc2dBVUVCYWlFQlFma0FJUU1NaFFJTFFZOEJJUU1nQVNBRVJnMmRBaUFDS0FJQUlnQWdCQ0FCYTJvaEJTQUJJQUJyUVFWcUlRWUNRQU5BSUFFdEFBQWdBRUdSendCcUxRQUFSdzFnSUFCQkJVWU5BU0FBUVFGcUlRQWdCQ0FCUVFGcUlnRkhEUUFMSUFJZ0JUWUNBQXllQWdzZ0FrRUFOZ0lBSUFaQkFXb2hBVUVZREdFTFFaQUJJUU1nQVNBRVJnMmNBaUFDS0FJQUlnQWdCQ0FCYTJvaEJTQUJJQUJyUVFKcUlRWUNRQU5BSUFFdEFBQWdBRUdYendCcUxRQUFSdzFmSUFCQkFrWU5BU0FBUVFGcUlRQWdCQ0FCUVFGcUlnRkhEUUFMSUFJZ0JUWUNBQXlkQWdzZ0FrRUFOZ0lBSUFaQkFXb2hBVUVYREdBTFFaRUJJUU1nQVNBRVJnMmJBaUFDS0FJQUlnQWdCQ0FCYTJvaEJTQUJJQUJyUVFacUlRWUNRQU5BSUFFdEFBQWdBRUdhendCcUxRQUFSdzFlSUFCQkJrWU5BU0FBUVFGcUlRQWdCQ0FCUVFGcUlnRkhEUUFMSUFJZ0JUWUNBQXljQWdzZ0FrRUFOZ0lBSUFaQkFXb2hBVUVWREY4TFFaSUJJUU1nQVNBRVJnMmFBaUFDS0FJQUlnQWdCQ0FCYTJvaEJTQUJJQUJyUVFWcUlRWUNRQU5BSUFFdEFBQWdBRUdoendCcUxRQUFSdzFkSUFCQkJVWU5BU0FBUVFGcUlRQWdCQ0FCUVFGcUlnRkhEUUFMSUFJZ0JUWUNBQXliQWdzZ0FrRUFOZ0lBSUFaQkFXb2hBVUVlREY0TElBRWdCRVlFUUVHVEFTRURESm9DQ3lBQkxRQUFRY3dBUncxYklBRkJBV29oQVVFS0RGMExJQUVnQkVZRVFFR1VBU0VEREprQ0N3SkFBa0FnQVMwQUFFSEJBR3NPRHdCY1hGeGNYRnhjWEZ4Y1hGeGNBVndMSUFGQkFXb2hBVUgrQUNFRERJQUNDeUFCUVFGcUlRRkIvd0FoQXd6L0FRc2dBU0FFUmdSQVFaVUJJUU1NbUFJTEFrQUNRQ0FCTFFBQVFjRUFhdzREQUZzQld3c2dBVUVCYWlFQlFmMEFJUU1NL3dFTElBRkJBV29oQVVHQUFTRUREUDRCQzBHV0FTRURJQUVnQkVZTmxnSWdBaWdDQUNJQUlBUWdBV3RxSVFVZ0FTQUFhMEVCYWlFR0FrQURRQ0FCTFFBQUlBQkJwODhBYWkwQUFFY05XU0FBUVFGR0RRRWdBRUVCYWlFQUlBUWdBVUVCYWlJQlJ3MEFDeUFDSUFVMkFnQU1sd0lMSUFKQkFEWUNBQ0FHUVFGcUlRRkJDd3hhQ3lBQklBUkdCRUJCbHdFaEF3eVdBZ3NDUUFKQUFrQUNRQ0FCTFFBQVFTMXJEaU1BVzF0YlcxdGJXMXRiVzF0YlcxdGJXMXRiVzF0Ylcxc0JXMXRiVzFzQ1cxdGJBMXNMSUFGQkFXb2hBVUg3QUNFRERQOEJDeUFCUVFGcUlRRkIvQUFoQXd6K0FRc2dBVUVCYWlFQlFZRUJJUU1NL1FFTElBRkJBV29oQVVHQ0FTRUREUHdCQzBHWUFTRURJQUVnQkVZTmxBSWdBaWdDQUNJQUlBUWdBV3RxSVFVZ0FTQUFhMEVFYWlFR0FrQURRQ0FCTFFBQUlBQkJxYzhBYWkwQUFFY05WeUFBUVFSR0RRRWdBRUVCYWlFQUlBUWdBVUVCYWlJQlJ3MEFDeUFDSUFVMkFnQU1sUUlMSUFKQkFEWUNBQ0FHUVFGcUlRRkJHUXhZQzBHWkFTRURJQUVnQkVZTmt3SWdBaWdDQUNJQUlBUWdBV3RxSVFVZ0FTQUFhMEVGYWlFR0FrQURRQ0FCTFFBQUlBQkJyczhBYWkwQUFFY05WaUFBUVFWR0RRRWdBRUVCYWlFQUlBUWdBVUVCYWlJQlJ3MEFDeUFDSUFVMkFnQU1sQUlMSUFKQkFEWUNBQ0FHUVFGcUlRRkJCZ3hYQzBHYUFTRURJQUVnQkVZTmtnSWdBaWdDQUNJQUlBUWdBV3RxSVFVZ0FTQUFhMEVCYWlFR0FrQURRQ0FCTFFBQUlBQkJ0TThBYWkwQUFFY05WU0FBUVFGR0RRRWdBRUVCYWlFQUlBUWdBVUVCYWlJQlJ3MEFDeUFDSUFVMkFnQU1rd0lMSUFKQkFEWUNBQ0FHUVFGcUlRRkJIQXhXQzBHYkFTRURJQUVnQkVZTmtRSWdBaWdDQUNJQUlBUWdBV3RxSVFVZ0FTQUFhMEVCYWlFR0FrQURRQ0FCTFFBQUlBQkJ0czhBYWkwQUFFY05WQ0FBUVFGR0RRRWdBRUVCYWlFQUlBUWdBVUVCYWlJQlJ3MEFDeUFDSUFVMkFnQU1rZ0lMSUFKQkFEWUNBQ0FHUVFGcUlRRkJKd3hWQ3lBQklBUkdCRUJCbkFFaEF3eVJBZ3NDUUFKQUlBRXRBQUJCMUFCckRnSUFBVlFMSUFGQkFXb2hBVUdHQVNFRERQZ0JDeUFCUVFGcUlRRkJod0VoQXd6M0FRdEJuUUVoQXlBQklBUkdEWThDSUFJb0FnQWlBQ0FFSUFGcmFpRUZJQUVnQUd0QkFXb2hCZ0pBQTBBZ0FTMEFBQ0FBUWJqUEFHb3RBQUJIRFZJZ0FFRUJSZzBCSUFCQkFXb2hBQ0FFSUFGQkFXb2lBVWNOQUFzZ0FpQUZOZ0lBREpBQ0N5QUNRUUEyQWdBZ0JrRUJhaUVCUVNZTVV3dEJuZ0VoQXlBQklBUkdEWTRDSUFJb0FnQWlBQ0FFSUFGcmFpRUZJQUVnQUd0QkFXb2hCZ0pBQTBBZ0FTMEFBQ0FBUWJyUEFHb3RBQUJIRFZFZ0FFRUJSZzBCSUFCQkFXb2hBQ0FFSUFGQkFXb2lBVWNOQUFzZ0FpQUZOZ0lBREk4Q0N5QUNRUUEyQWdBZ0JrRUJhaUVCUVFNTVVndEJud0VoQXlBQklBUkdEWTBDSUFJb0FnQWlBQ0FFSUFGcmFpRUZJQUVnQUd0QkFtb2hCZ0pBQTBBZ0FTMEFBQ0FBUWUzUEFHb3RBQUJIRFZBZ0FFRUNSZzBCSUFCQkFXb2hBQ0FFSUFGQkFXb2lBVWNOQUFzZ0FpQUZOZ0lBREk0Q0N5QUNRUUEyQWdBZ0JrRUJhaUVCUVF3TVVRdEJvQUVoQXlBQklBUkdEWXdDSUFJb0FnQWlBQ0FFSUFGcmFpRUZJQUVnQUd0QkEyb2hCZ0pBQTBBZ0FTMEFBQ0FBUWJ6UEFHb3RBQUJIRFU4Z0FFRURSZzBCSUFCQkFXb2hBQ0FFSUFGQkFXb2lBVWNOQUFzZ0FpQUZOZ0lBREkwQ0N5QUNRUUEyQWdBZ0JrRUJhaUVCUVEwTVVBc2dBU0FFUmdSQVFhRUJJUU1NakFJTEFrQUNRQ0FCTFFBQVFjWUFhdzRMQUU5UFQwOVBUMDlQVHdGUEN5QUJRUUZxSVFGQml3RWhBd3p6QVFzZ0FVRUJhaUVCUVl3QklRTU04Z0VMSUFFZ0JFWUVRRUdpQVNFRERJc0NDeUFCTFFBQVFkQUFSdzFNSUFGQkFXb2hBUXhHQ3lBQklBUkdCRUJCb3dFaEF3eUtBZ3NDUUFKQUlBRXRBQUJCeVFCckRnY0JUVTFOVFUwQVRRc2dBVUVCYWlFQlFZNEJJUU1NOFFFTElBRkJBV29oQVVFaURFMExRYVFCSVFNZ0FTQUVSZzJJQWlBQ0tBSUFJZ0FnQkNBQmEyb2hCU0FCSUFCclFRRnFJUVlDUUFOQUlBRXRBQUFnQUVIQXp3QnFMUUFBUncxTElBQkJBVVlOQVNBQVFRRnFJUUFnQkNBQlFRRnFJZ0ZIRFFBTElBSWdCVFlDQUF5SkFnc2dBa0VBTmdJQUlBWkJBV29oQVVFZERFd0xJQUVnQkVZRVFFR2xBU0VERElnQ0N3SkFBa0FnQVMwQUFFSFNBR3NPQXdCTEFVc0xJQUZCQVdvaEFVR1FBU0VERE84QkN5QUJRUUZxSVFGQkJBeExDeUFCSUFSR0JFQkJwZ0VoQXd5SEFnc0NRQUpBQWtBQ1FBSkFJQUV0QUFCQndRQnJEaFVBVFUxTlRVMU5UVTFOVFFGTlRRSk5UUU5OVFFSTkN5QUJRUUZxSVFGQmlBRWhBd3p4QVFzZ0FVRUJhaUVCUVlrQklRTU04QUVMSUFGQkFXb2hBVUdLQVNFRERPOEJDeUFCUVFGcUlRRkJqd0VoQXd6dUFRc2dBVUVCYWlFQlFaRUJJUU1NN1FFTFFhY0JJUU1nQVNBRVJnMkZBaUFDS0FJQUlnQWdCQ0FCYTJvaEJTQUJJQUJyUVFKcUlRWUNRQU5BSUFFdEFBQWdBRUh0endCcUxRQUFSdzFJSUFCQkFrWU5BU0FBUVFGcUlRQWdCQ0FCUVFGcUlnRkhEUUFMSUFJZ0JUWUNBQXlHQWdzZ0FrRUFOZ0lBSUFaQkFXb2hBVUVSREVrTFFhZ0JJUU1nQVNBRVJnMkVBaUFDS0FJQUlnQWdCQ0FCYTJvaEJTQUJJQUJyUVFKcUlRWUNRQU5BSUFFdEFBQWdBRUhDendCcUxRQUFSdzFISUFCQkFrWU5BU0FBUVFGcUlRQWdCQ0FCUVFGcUlnRkhEUUFMSUFJZ0JUWUNBQXlGQWdzZ0FrRUFOZ0lBSUFaQkFXb2hBVUVzREVnTFFha0JJUU1nQVNBRVJnMkRBaUFDS0FJQUlnQWdCQ0FCYTJvaEJTQUJJQUJyUVFScUlRWUNRQU5BSUFFdEFBQWdBRUhGendCcUxRQUFSdzFHSUFCQkJFWU5BU0FBUVFGcUlRQWdCQ0FCUVFGcUlnRkhEUUFMSUFJZ0JUWUNBQXlFQWdzZ0FrRUFOZ0lBSUFaQkFXb2hBVUVyREVjTFFhb0JJUU1nQVNBRVJnMkNBaUFDS0FJQUlnQWdCQ0FCYTJvaEJTQUJJQUJyUVFKcUlRWUNRQU5BSUFFdEFBQWdBRUhLendCcUxRQUFSdzFGSUFCQkFrWU5BU0FBUVFGcUlRQWdCQ0FCUVFGcUlnRkhEUUFMSUFJZ0JUWUNBQXlEQWdzZ0FrRUFOZ0lBSUFaQkFXb2hBVUVVREVZTElBRWdCRVlFUUVHckFTRURESUlDQ3dKQUFrQUNRQUpBSUFFdEFBQkJ3Z0JyRGc4QUFRSkhSMGRIUjBkSFIwZEhSd05IQ3lBQlFRRnFJUUZCa3dFaEF3enJBUXNnQVVFQmFpRUJRWlFCSVFNTTZnRUxJQUZCQVdvaEFVR1ZBU0VERE9rQkN5QUJRUUZxSVFGQmxnRWhBd3pvQVFzZ0FTQUVSZ1JBUWF3QklRTU1nUUlMSUFFdEFBQkJ4UUJIRFVJZ0FVRUJhaUVCREQwTFFhMEJJUU1nQVNBRVJnMy9BU0FDS0FJQUlnQWdCQ0FCYTJvaEJTQUJJQUJyUVFKcUlRWUNRQU5BSUFFdEFBQWdBRUhOendCcUxRQUFSdzFDSUFCQkFrWU5BU0FBUVFGcUlRQWdCQ0FCUVFGcUlnRkhEUUFMSUFJZ0JUWUNBQXlBQWdzZ0FrRUFOZ0lBSUFaQkFXb2hBVUVPREVNTElBRWdCRVlFUUVHdUFTRUREUDhCQ3lBQkxRQUFRZEFBUncxQUlBRkJBV29oQVVFbERFSUxRYThCSVFNZ0FTQUVSZzM5QVNBQ0tBSUFJZ0FnQkNBQmEyb2hCU0FCSUFCclFRaHFJUVlDUUFOQUlBRXRBQUFnQUVIUXp3QnFMUUFBUncxQUlBQkJDRVlOQVNBQVFRRnFJUUFnQkNBQlFRRnFJZ0ZIRFFBTElBSWdCVFlDQUF6K0FRc2dBa0VBTmdJQUlBWkJBV29oQVVFcURFRUxJQUVnQkVZRVFFR3dBU0VERFAwQkN3SkFBa0FnQVMwQUFFSFZBR3NPQ3dCQVFFQkFRRUJBUUVBQlFBc2dBVUVCYWlFQlFab0JJUU1NNUFFTElBRkJBV29oQVVHYkFTRURET01CQ3lBQklBUkdCRUJCc1FFaEF3ejhBUXNDUUFKQUlBRXRBQUJCd1FCckRoUUFQejgvUHo4L1B6OC9QejgvUHo4L1B6OC9BVDhMSUFGQkFXb2hBVUdaQVNFRERPTUJDeUFCUVFGcUlRRkJuQUVoQXd6aUFRdEJzZ0VoQXlBQklBUkdEZm9CSUFJb0FnQWlBQ0FFSUFGcmFpRUZJQUVnQUd0QkEyb2hCZ0pBQTBBZ0FTMEFBQ0FBUWRuUEFHb3RBQUJIRFQwZ0FFRURSZzBCSUFCQkFXb2hBQ0FFSUFGQkFXb2lBVWNOQUFzZ0FpQUZOZ0lBRFBzQkN5QUNRUUEyQWdBZ0JrRUJhaUVCUVNFTVBndEJzd0VoQXlBQklBUkdEZmtCSUFJb0FnQWlBQ0FFSUFGcmFpRUZJQUVnQUd0QkJtb2hCZ0pBQTBBZ0FTMEFBQ0FBUWQzUEFHb3RBQUJIRFR3Z0FFRUdSZzBCSUFCQkFXb2hBQ0FFSUFGQkFXb2lBVWNOQUFzZ0FpQUZOZ0lBRFBvQkN5QUNRUUEyQWdBZ0JrRUJhaUVCUVJvTVBRc2dBU0FFUmdSQVFiUUJJUU1NK1FFTEFrQUNRQUpBSUFFdEFBQkJ4UUJyRGhFQVBUMDlQVDA5UFQwOUFUMDlQVDA5QWowTElBRkJBV29oQVVHZEFTRURET0VCQ3lBQlFRRnFJUUZCbmdFaEF3emdBUXNnQVVFQmFpRUJRWjhCSVFNTTN3RUxRYlVCSVFNZ0FTQUVSZzMzQVNBQ0tBSUFJZ0FnQkNBQmEyb2hCU0FCSUFCclFRVnFJUVlDUUFOQUlBRXRBQUFnQUVIa3p3QnFMUUFBUncwNklBQkJCVVlOQVNBQVFRRnFJUUFnQkNBQlFRRnFJZ0ZIRFFBTElBSWdCVFlDQUF6NEFRc2dBa0VBTmdJQUlBWkJBV29oQVVFb0REc0xRYllCSVFNZ0FTQUVSZzMyQVNBQ0tBSUFJZ0FnQkNBQmEyb2hCU0FCSUFCclFRSnFJUVlDUUFOQUlBRXRBQUFnQUVIcXp3QnFMUUFBUncwNUlBQkJBa1lOQVNBQVFRRnFJUUFnQkNBQlFRRnFJZ0ZIRFFBTElBSWdCVFlDQUF6M0FRc2dBa0VBTmdJQUlBWkJBV29oQVVFSEREb0xJQUVnQkVZRVFFRzNBU0VERFBZQkN3SkFBa0FnQVMwQUFFSEZBR3NPRGdBNU9UazVPVGs1T1RrNU9Ua0JPUXNnQVVFQmFpRUJRYUVCSVFNTTNRRUxJQUZCQVdvaEFVR2lBU0VERE53QkMwRzRBU0VESUFFZ0JFWU45QUVnQWlnQ0FDSUFJQVFnQVd0cUlRVWdBU0FBYTBFQ2FpRUdBa0FEUUNBQkxRQUFJQUJCN2M4QWFpMEFBRWNOTnlBQVFRSkdEUUVnQUVFQmFpRUFJQVFnQVVFQmFpSUJSdzBBQ3lBQ0lBVTJBZ0FNOVFFTElBSkJBRFlDQUNBR1FRRnFJUUZCRWd3NEMwRzVBU0VESUFFZ0JFWU44d0VnQWlnQ0FDSUFJQVFnQVd0cUlRVWdBU0FBYTBFQmFpRUdBa0FEUUNBQkxRQUFJQUJCOE04QWFpMEFBRWNOTmlBQVFRRkdEUUVnQUVFQmFpRUFJQVFnQVVFQmFpSUJSdzBBQ3lBQ0lBVTJBZ0FNOUFFTElBSkJBRFlDQUNBR1FRRnFJUUZCSUF3M0MwRzZBU0VESUFFZ0JFWU44Z0VnQWlnQ0FDSUFJQVFnQVd0cUlRVWdBU0FBYTBFQmFpRUdBa0FEUUNBQkxRQUFJQUJCOHM4QWFpMEFBRWNOTlNBQVFRRkdEUUVnQUVFQmFpRUFJQVFnQVVFQmFpSUJSdzBBQ3lBQ0lBVTJBZ0FNOHdFTElBSkJBRFlDQUNBR1FRRnFJUUZCRHd3MkN5QUJJQVJHQkVCQnV3RWhBd3p5QVFzQ1FBSkFJQUV0QUFCQnlRQnJEZ2NBTlRVMU5UVUJOUXNnQVVFQmFpRUJRYVVCSVFNTTJRRUxJQUZCQVdvaEFVR21BU0VERE5nQkMwRzhBU0VESUFFZ0JFWU44QUVnQWlnQ0FDSUFJQVFnQVd0cUlRVWdBU0FBYTBFSGFpRUdBa0FEUUNBQkxRQUFJQUJCOU04QWFpMEFBRWNOTXlBQVFRZEdEUUVnQUVFQmFpRUFJQVFnQVVFQmFpSUJSdzBBQ3lBQ0lBVTJBZ0FNOFFFTElBSkJBRFlDQUNBR1FRRnFJUUZCR3d3MEN5QUJJQVJHQkVCQnZRRWhBd3p3QVFzQ1FBSkFBa0FnQVMwQUFFSENBR3NPRWdBME5EUTBORFEwTkRRQk5EUTBORFEwQWpRTElBRkJBV29oQVVHa0FTRURETmdCQ3lBQlFRRnFJUUZCcHdFaEF3elhBUXNnQVVFQmFpRUJRYWdCSVFNTTFnRUxJQUVnQkVZRVFFRytBU0VERE84QkN5QUJMUUFBUWM0QVJ3MHdJQUZCQVdvaEFRd3NDeUFCSUFSR0JFQkJ2d0VoQXd6dUFRc0NRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUNBQkxRQUFRY0VBYXc0VkFBRUNBejhFQlFZL1B6OEhDQWtLQ3o4TURRNFBQd3NnQVVFQmFpRUJRZWdBSVFNTTR3RUxJQUZCQVdvaEFVSHBBQ0VERE9JQkN5QUJRUUZxSVFGQjdnQWhBd3poQVFzZ0FVRUJhaUVCUWZJQUlRTU00QUVMSUFGQkFXb2hBVUh6QUNFREROOEJDeUFCUVFGcUlRRkI5Z0FoQXd6ZUFRc2dBVUVCYWlFQlFmY0FJUU1NM1FFTElBRkJBV29oQVVINkFDRURETndCQ3lBQlFRRnFJUUZCZ3dFaEF3emJBUXNnQVVFQmFpRUJRWVFCSVFNTTJnRUxJQUZCQVdvaEFVR0ZBU0VERE5rQkN5QUJRUUZxSVFGQmtnRWhBd3pZQVFzZ0FVRUJhaUVCUVpnQklRTU0xd0VMSUFGQkFXb2hBVUdnQVNFREROWUJDeUFCUVFGcUlRRkJvd0VoQXd6VkFRc2dBVUVCYWlFQlFhb0JJUU1NMUFFTElBRWdCRWNFUUNBQ1FSQTJBZ2dnQWlBQk5nSUVRYXNCSVFNTTFBRUxRY0FCSVFNTTdBRUxRUUFoQUFKQUlBSW9BamdpQTBVTkFDQURLQUkwSWdORkRRQWdBaUFERVFBQUlRQUxJQUJGRFY0Z0FFRVZSdzBISUFKQjBRQTJBaHdnQWlBQk5nSVVJQUpCc0JjMkFoQWdBa0VWTmdJTVFRQWhBd3pyQVFzZ0FVRUJhaUFCSUFSSERRZ2FRY0lCSVFNTTZnRUxBMEFDUUNBQkxRQUFRUXByRGdRSUFBQUxBQXNnQkNBQlFRRnFJZ0ZIRFFBTFFjTUJJUU1NNlFFTElBRWdCRWNFUUNBQ1FSRTJBZ2dnQWlBQk5nSUVRUUVoQXd6UUFRdEJ4QUVoQXd6b0FRc2dBU0FFUmdSQVFjVUJJUU1NNkFFTEFrQUNRQ0FCTFFBQVFRcHJEZ1FCS0NnQUtBc2dBVUVCYWd3SkN5QUJRUUZxREFVTElBRWdCRVlFUUVIR0FTRURET2NCQ3dKQUFrQWdBUzBBQUVFS2F3NFhBUXNMQVFzTEN3c0xDd3NMQ3dzTEN3c0xDd3NMQ3dBTEN5QUJRUUZxSVFFTFFiQUJJUU1NelFFTElBRWdCRVlFUUVISUFTRURET1lCQ3lBQkxRQUFRU0JIRFFrZ0FrRUFPd0V5SUFGQkFXb2hBVUd6QVNFRERNd0JDd05BSUFFaEFBSkFJQUVnQkVjRVFDQUJMUUFBUVRCclFmOEJjU0lEUVFwSkRRRU1Kd3RCeHdFaEF3em1BUXNDUUNBQ0x3RXlJZ0ZCbVROTERRQWdBaUFCUVFwc0lnVTdBVElnQlVIKy93TnhJQU5CLy84RGMwc05BQ0FBUVFGcUlRRWdBaUFESUFWcUlnTTdBVElnQTBILy93TnhRZWdIU1EwQkN3dEJBQ0VESUFKQkFEWUNIQ0FDUWNFSk5nSVFJQUpCRFRZQ0RDQUNJQUJCQVdvMkFoUU01QUVMSUFKQkFEWUNIQ0FDSUFFMkFoUWdBa0h3RERZQ0VDQUNRUnMyQWd4QkFDRURET01CQ3lBQ0tBSUVJUUFnQWtFQU5nSUVJQUlnQUNBQkVDWWlBQTBCSUFGQkFXb0xJUUZCclFFaEF3eklBUXNnQWtIQkFUWUNIQ0FDSUFBMkFnd2dBaUFCUVFGcU5nSVVRUUFoQXd6Z0FRc2dBaWdDQkNFQUlBSkJBRFlDQkNBQ0lBQWdBUkFtSWdBTkFTQUJRUUZxQ3lFQlFhNEJJUU1NeFFFTElBSkJ3Z0UyQWh3Z0FpQUFOZ0lNSUFJZ0FVRUJhallDRkVFQUlRTU0zUUVMSUFKQkFEWUNIQ0FDSUFFMkFoUWdBa0dYQ3pZQ0VDQUNRUTAyQWd4QkFDRURETndCQ3lBQ1FRQTJBaHdnQWlBQk5nSVVJQUpCNHhBMkFoQWdBa0VKTmdJTVFRQWhBd3piQVFzZ0FrRUNPZ0FvREt3QkMwRUFJUU1nQWtFQU5nSWNJQUpCcndzMkFoQWdBa0VDTmdJTUlBSWdBVUVCYWpZQ0ZBelpBUXRCQWlFRERMOEJDMEVOSVFNTXZnRUxRU1loQXd5OUFRdEJGU0VEREx3QkMwRVdJUU1NdXdFTFFSZ2hBd3k2QVF0QkhDRURETGtCQzBFZElRTU11QUVMUVNBaEF3eTNBUXRCSVNFRERMWUJDMEVqSVFNTXRRRUxRY1lBSVFNTXRBRUxRUzRoQXd5ekFRdEJQU0VERExJQkMwSExBQ0VERExFQkMwSE9BQ0VERExBQkMwSFlBQ0VEREs4QkMwSFpBQ0VEREs0QkMwSGJBQ0VEREswQkMwSHhBQ0VEREt3QkMwSDBBQ0VEREtzQkMwR05BU0VEREtvQkMwR1hBU0VEREtrQkMwR3BBU0VEREtnQkMwR3ZBU0VEREtjQkMwR3hBU0VEREtZQkN5QUNRUUEyQWdBTFFRQWhBeUFDUVFBMkFod2dBaUFCTmdJVUlBSkI4UnMyQWhBZ0FrRUdOZ0lNREwwQkN5QUNRUUEyQWdBZ0JrRUJhaUVCUVNRTE9nQXBJQUlvQWdRaEFDQUNRUUEyQWdRZ0FpQUFJQUVRSnlJQVJRUkFRZVVBSVFNTW93RUxJQUpCK1FBMkFod2dBaUFCTmdJVUlBSWdBRFlDREVFQUlRTU11d0VMSUFCQkZVY0VRQ0FDUVFBMkFod2dBaUFCTmdJVUlBSkJ6QTQyQWhBZ0FrRWdOZ0lNUVFBaEF3eTdBUXNnQWtINEFEWUNIQ0FDSUFFMkFoUWdBa0hLR0RZQ0VDQUNRUlUyQWd4QkFDRURETG9CQ3lBQ1FRQTJBaHdnQWlBQk5nSVVJQUpCamhzMkFoQWdBa0VHTmdJTVFRQWhBd3k1QVFzZ0FrRUFOZ0ljSUFJZ0FUWUNGQ0FDUWY0Uk5nSVFJQUpCQnpZQ0RFRUFJUU1NdUFFTElBSkJBRFlDSENBQ0lBRTJBaFFnQWtHTUhEWUNFQ0FDUVFjMkFneEJBQ0VERExjQkN5QUNRUUEyQWh3Z0FpQUJOZ0lVSUFKQnd3ODJBaEFnQWtFSE5nSU1RUUFoQXd5MkFRc2dBa0VBTmdJY0lBSWdBVFlDRkNBQ1FjTVBOZ0lRSUFKQkJ6WUNERUVBSVFNTXRRRUxJQUlvQWdRaEFDQUNRUUEyQWdRZ0FpQUFJQUVRSlNJQVJRMFJJQUpCNVFBMkFod2dBaUFCTmdJVUlBSWdBRFlDREVFQUlRTU10QUVMSUFJb0FnUWhBQ0FDUVFBMkFnUWdBaUFBSUFFUUpTSUFSUTBnSUFKQjB3QTJBaHdnQWlBQk5nSVVJQUlnQURZQ0RFRUFJUU1Nc3dFTElBSW9BZ1FoQUNBQ1FRQTJBZ1FnQWlBQUlBRVFKU0lBUlEwaUlBSkIwZ0EyQWh3Z0FpQUJOZ0lVSUFJZ0FEWUNERUVBSVFNTXNnRUxJQUlvQWdRaEFDQUNRUUEyQWdRZ0FpQUFJQUVRSlNJQVJRME9JQUpCNVFBMkFod2dBaUFCTmdJVUlBSWdBRFlDREVFQUlRTU1zUUVMSUFJb0FnUWhBQ0FDUVFBMkFnUWdBaUFBSUFFUUpTSUFSUTBkSUFKQjB3QTJBaHdnQWlBQk5nSVVJQUlnQURZQ0RFRUFJUU1Nc0FFTElBSW9BZ1FoQUNBQ1FRQTJBZ1FnQWlBQUlBRVFKU0lBUlEwZklBSkIwZ0EyQWh3Z0FpQUJOZ0lVSUFJZ0FEWUNERUVBSVFNTXJ3RUxJQUJCUDBjTkFTQUJRUUZxQ3lFQlFRVWhBd3lVQVF0QkFDRURJQUpCQURZQ0hDQUNJQUUyQWhRZ0FrSDlFallDRUNBQ1FRYzJBZ3dNckFFTElBSkJBRFlDSENBQ0lBRTJBaFFnQWtIY0NEWUNFQ0FDUVFjMkFneEJBQ0VEREtzQkN5QUNLQUlFSVFBZ0FrRUFOZ0lFSUFJZ0FDQUJFQ1VpQUVVTkJ5QUNRZVVBTmdJY0lBSWdBVFlDRkNBQ0lBQTJBZ3hCQUNFRERLb0JDeUFDS0FJRUlRQWdBa0VBTmdJRUlBSWdBQ0FCRUNVaUFFVU5GaUFDUWRNQU5nSWNJQUlnQVRZQ0ZDQUNJQUEyQWd4QkFDRURES2tCQ3lBQ0tBSUVJUUFnQWtFQU5nSUVJQUlnQUNBQkVDVWlBRVVOR0NBQ1FkSUFOZ0ljSUFJZ0FUWUNGQ0FDSUFBMkFneEJBQ0VEREtnQkN5QUNRUUEyQWh3Z0FpQUJOZ0lVSUFKQnhnbzJBaEFnQWtFSE5nSU1RUUFoQXd5bkFRc2dBaWdDQkNFQUlBSkJBRFlDQkNBQ0lBQWdBUkFsSWdCRkRRTWdBa0hsQURZQ0hDQUNJQUUyQWhRZ0FpQUFOZ0lNUVFBaEF3eW1BUXNnQWlnQ0JDRUFJQUpCQURZQ0JDQUNJQUFnQVJBbElnQkZEUklnQWtIVEFEWUNIQ0FDSUFFMkFoUWdBaUFBTmdJTVFRQWhBd3lsQVFzZ0FpZ0NCQ0VBSUFKQkFEWUNCQ0FDSUFBZ0FSQWxJZ0JGRFJRZ0FrSFNBRFlDSENBQ0lBRTJBaFFnQWlBQU5nSU1RUUFoQXd5a0FRc2dBaWdDQkNFQUlBSkJBRFlDQkNBQ0lBQWdBUkFsSWdCRkRRQWdBa0hsQURZQ0hDQUNJQUUyQWhRZ0FpQUFOZ0lNUVFBaEF3eWpBUXRCMVFBaEF3eUpBUXNnQUVFVlJ3UkFJQUpCQURZQ0hDQUNJQUUyQWhRZ0FrRzVEVFlDRUNBQ1FSbzJBZ3hCQUNFRERLSUJDeUFDUWVRQU5nSWNJQUlnQVRZQ0ZDQUNRZU1YTmdJUUlBSkJGVFlDREVFQUlRTU1vUUVMSUFKQkFEWUNBQ0FHUVFGcUlRRWdBaTBBS1NJQVFTTnJRUXRKRFFRQ1FDQUFRUVpMRFFCQkFTQUFkRUhLQUhGRkRRQU1CUXRCQUNFRElBSkJBRFlDSENBQ0lBRTJBaFFnQWtIM0NUWUNFQ0FDUVFnMkFnd01vQUVMSUFKQkFEWUNBQ0FHUVFGcUlRRWdBaTBBS1VFaFJnMERJQUpCQURZQ0hDQUNJQUUyQWhRZ0FrR2JDallDRUNBQ1FRZzJBZ3hCQUNFRERKOEJDeUFDUVFBMkFnQUxRUUFoQXlBQ1FRQTJBaHdnQWlBQk5nSVVJQUpCa0RNMkFoQWdBa0VJTmdJTURKMEJDeUFDUVFBMkFnQWdCa0VCYWlFQklBSXRBQ2xCSTBrTkFDQUNRUUEyQWh3Z0FpQUJOZ0lVSUFKQjB3azJBaEFnQWtFSU5nSU1RUUFoQXd5Y0FRdEIwUUFoQXd5Q0FRc2dBUzBBQUVFd2F5SUFRZjhCY1VFS1NRUkFJQUlnQURvQUtpQUJRUUZxSVFGQnp3QWhBd3lDQVFzZ0FpZ0NCQ0VBSUFKQkFEWUNCQ0FDSUFBZ0FSQW9JZ0JGRFlZQklBSkIzZ0EyQWh3Z0FpQUJOZ0lVSUFJZ0FEWUNERUVBSVFNTW1nRUxJQUlvQWdRaEFDQUNRUUEyQWdRZ0FpQUFJQUVRS0NJQVJRMkdBU0FDUWR3QU5nSWNJQUlnQVRZQ0ZDQUNJQUEyQWd4QkFDRURESmtCQ3lBQ0tBSUVJUUFnQWtFQU5nSUVJQUlnQUNBRkVDZ2lBRVVFUUNBRklRRU1od0VMSUFKQjJnQTJBaHdnQWlBRk5nSVVJQUlnQURZQ0RBeVlBUXRCQUNFQlFRRWhBd3NnQWlBRE9nQXJJQVZCQVdvaEF3SkFBa0FDUUNBQ0xRQXRRUkJ4RFFBQ1FBSkFBa0FnQWkwQUtnNERBUUFDQkFzZ0JrVU5Bd3dDQ3lBQURRRU1BZ3NnQVVVTkFRc2dBaWdDQkNFQUlBSkJBRFlDQkNBQ0lBQWdBeEFvSWdCRkJFQWdBeUVCREFJTElBSkIyQUEyQWh3Z0FpQUROZ0lVSUFJZ0FEWUNERUVBSVFNTW1BRUxJQUlvQWdRaEFDQUNRUUEyQWdRZ0FpQUFJQU1RS0NJQVJRUkFJQU1oQVF5SEFRc2dBa0haQURZQ0hDQUNJQU0yQWhRZ0FpQUFOZ0lNUVFBaEF3eVhBUXRCekFBaEF3eDlDeUFBUVJWSEJFQWdBa0VBTmdJY0lBSWdBVFlDRkNBQ1FaUU5OZ0lRSUFKQklUWUNERUVBSVFNTWxnRUxJQUpCMXdBMkFod2dBaUFCTmdJVUlBSkJ5UmMyQWhBZ0FrRVZOZ0lNUVFBaEF3eVZBUXRCQUNFRElBSkJBRFlDSENBQ0lBRTJBaFFnQWtHQUVUWUNFQ0FDUVFrMkFnd01sQUVMSUFJb0FnUWhBQ0FDUVFBMkFnUWdBaUFBSUFFUUpTSUFSUTBBSUFKQjB3QTJBaHdnQWlBQk5nSVVJQUlnQURZQ0RFRUFJUU1Na3dFTFFja0FJUU1NZVFzZ0FrRUFOZ0ljSUFJZ0FUWUNGQ0FDUWNFb05nSVFJQUpCQnpZQ0RDQUNRUUEyQWdCQkFDRURESkVCQ3lBQ0tBSUVJUUJCQUNFRElBSkJBRFlDQkNBQ0lBQWdBUkFsSWdCRkRRQWdBa0hTQURZQ0hDQUNJQUUyQWhRZ0FpQUFOZ0lNREpBQkMwSElBQ0VEREhZTElBSkJBRFlDQUNBRklRRUxJQUpCZ0JJN0FTb2dBVUVCYWlFQlFRQWhBQUpBSUFJb0FqZ2lBMFVOQUNBREtBSXdJZ05GRFFBZ0FpQURFUUFBSVFBTElBQU5BUXRCeHdBaEF3eHpDeUFBUVJWR0JFQWdBa0hSQURZQ0hDQUNJQUUyQWhRZ0FrSGpGellDRUNBQ1FSVTJBZ3hCQUNFRERJd0JDMEVBSVFNZ0FrRUFOZ0ljSUFJZ0FUWUNGQ0FDUWJrTk5nSVFJQUpCR2pZQ0RBeUxBUXRCQUNFRElBSkJBRFlDSENBQ0lBRTJBaFFnQWtHZ0dUWUNFQ0FDUVI0MkFnd01pZ0VMSUFFdEFBQkJPa1lFUUNBQ0tBSUVJUUJCQUNFRElBSkJBRFlDQkNBQ0lBQWdBUkFwSWdCRkRRRWdBa0hEQURZQ0hDQUNJQUEyQWd3Z0FpQUJRUUZxTmdJVURJb0JDMEVBSVFNZ0FrRUFOZ0ljSUFJZ0FUWUNGQ0FDUWJFUk5nSVFJQUpCQ2pZQ0RBeUpBUXNnQVVFQmFpRUJRVHNoQXd4dkN5QUNRY01BTmdJY0lBSWdBRFlDRENBQ0lBRkJBV28yQWhRTWh3RUxRUUFoQXlBQ1FRQTJBaHdnQWlBQk5nSVVJQUpCOEE0MkFoQWdBa0VjTmdJTURJWUJDeUFDSUFJdkFUQkJFSEk3QVRBTVpnc0NRQ0FDTHdFd0lnQkJDSEZGRFFBZ0FpMEFLRUVCUncwQUlBSXRBQzFCQ0hGRkRRTUxJQUlnQUVIMyt3TnhRWUFFY2pzQk1Bd0VDeUFCSUFSSEJFQUNRQU5BSUFFdEFBQkJNR3NpQUVIL0FYRkJDazhFUUVFMUlRTU1iZ3NnQWlrRElDSUtRcG16NXN5WnMrYk1HVllOQVNBQ0lBcENDbjRpQ2pjRElDQUtJQUN0UXY4Qmd5SUxRbitGVmcwQklBSWdDaUFMZkRjRElDQUVJQUZCQVdvaUFVY05BQXRCT1NFRERJVUJDeUFDS0FJRUlRQkJBQ0VESUFKQkFEWUNCQ0FDSUFBZ0FVRUJhaUlCRUNvaUFBME1ESGNMUVRraEF3eURBUXNnQWkwQU1FRWdjUTBHUWNVQklRTU1hUXRCQUNFRElBSkJBRFlDQkNBQ0lBRWdBUkFxSWdCRkRRUWdBa0U2TmdJY0lBSWdBRFlDRENBQ0lBRkJBV28yQWhRTWdRRUxJQUl0QUNoQkFVY05BQ0FDTFFBdFFRaHhSUTBCQzBFM0lRTU1aZ3NnQWlnQ0JDRUFRUUFoQXlBQ1FRQTJBZ1FnQWlBQUlBRVFLaUlBQkVBZ0FrRTdOZ0ljSUFJZ0FEWUNEQ0FDSUFGQkFXbzJBaFFNZndzZ0FVRUJhaUVCREc0TElBSkJDRG9BTEF3RUN5QUJRUUZxSVFFTWJRdEJBQ0VESUFKQkFEWUNIQ0FDSUFFMkFoUWdBa0hrRWpZQ0VDQUNRUVEyQWd3TWV3c2dBaWdDQkNFQVFRQWhBeUFDUVFBMkFnUWdBaUFBSUFFUUtpSUFSUTFzSUFKQk56WUNIQ0FDSUFFMkFoUWdBaUFBTmdJTURIb0xJQUlnQWk4Qk1FRWdjanNCTUF0Qk1DRURERjhMSUFKQk5qWUNIQ0FDSUFFMkFoUWdBaUFBTmdJTURIY0xJQUJCTEVjTkFTQUJRUUZxSVFCQkFTRUJBa0FDUUFKQUFrQUNRQ0FDTFFBc1FRVnJEZ1FEQVFJRUFBc2dBQ0VCREFRTFFRSWhBUXdCQzBFRUlRRUxJQUpCQVRvQUxDQUNJQUl2QVRBZ0FYSTdBVEFnQUNFQkRBRUxJQUlnQWk4Qk1FRUljanNCTUNBQUlRRUxRVGtoQXd4Y0N5QUNRUUE2QUN3TFFUUWhBd3hhQ3lBQklBUkdCRUJCTFNFRERITUxBa0FDUUFOQUFrQWdBUzBBQUVFS2F3NEVBZ0FBQXdBTElBUWdBVUVCYWlJQlJ3MEFDMEV0SVFNTWRBc2dBaWdDQkNFQVFRQWhBeUFDUVFBMkFnUWdBaUFBSUFFUUtpSUFSUTBDSUFKQkxEWUNIQ0FDSUFFMkFoUWdBaUFBTmdJTURITUxJQUlvQWdRaEFFRUFJUU1nQWtFQU5nSUVJQUlnQUNBQkVDb2lBRVVFUUNBQlFRRnFJUUVNQWdzZ0FrRXNOZ0ljSUFJZ0FEWUNEQ0FDSUFGQkFXbzJBaFFNY2dzZ0FTMEFBRUVOUmdSQUlBSW9BZ1FoQUVFQUlRTWdBa0VBTmdJRUlBSWdBQ0FCRUNvaUFFVUVRQ0FCUVFGcUlRRU1BZ3NnQWtFc05nSWNJQUlnQURZQ0RDQUNJQUZCQVdvMkFoUU1jZ3NnQWkwQUxVRUJjUVJBUWNRQklRTU1XUXNnQWlnQ0JDRUFRUUFoQXlBQ1FRQTJBZ1FnQWlBQUlBRVFLaUlBRFFFTVpRdEJMeUVEREZjTElBSkJMallDSENBQ0lBRTJBaFFnQWlBQU5nSU1ERzhMUVFBaEF5QUNRUUEyQWh3Z0FpQUJOZ0lVSUFKQjhCUTJBaEFnQWtFRE5nSU1ERzRMUVFFaEF3SkFBa0FDUUFKQUlBSXRBQ3hCQldzT0JBTUJBZ0FFQ3lBQ0lBSXZBVEJCQ0hJN0FUQU1Bd3RCQWlFRERBRUxRUVFoQXdzZ0FrRUJPZ0FzSUFJZ0FpOEJNQ0FEY2pzQk1BdEJLaUVEREZNTFFRQWhBeUFDUVFBMkFod2dBaUFCTmdJVUlBSkI0UTgyQWhBZ0FrRUtOZ0lNREdzTFFRRWhBd0pBQWtBQ1FBSkFBa0FDUUNBQ0xRQXNRUUpyRGdjRkJBUURBUUlBQkFzZ0FpQUNMd0V3UVFoeU93RXdEQU1MUVFJaEF3d0JDMEVFSVFNTElBSkJBVG9BTENBQ0lBSXZBVEFnQTNJN0FUQUxRU3NoQXd4U0MwRUFJUU1nQWtFQU5nSWNJQUlnQVRZQ0ZDQUNRYXNTTmdJUUlBSkJDellDREF4cUMwRUFJUU1nQWtFQU5nSWNJQUlnQVRZQ0ZDQUNRZjBOTmdJUUlBSkJIVFlDREF4cEN5QUJJQVJIQkVBRFFDQUJMUUFBUVNCSERVZ2dCQ0FCUVFGcUlnRkhEUUFMUVNVaEF3eHBDMEVsSVFNTWFBc2dBaTBBTFVFQmNRUkFRY01CSVFNTVR3c2dBaWdDQkNFQVFRQWhBeUFDUVFBMkFnUWdBaUFBSUFFUUtTSUFCRUFnQWtFbU5nSWNJQUlnQURZQ0RDQUNJQUZCQVdvMkFoUU1hQXNnQVVFQmFpRUJERndMSUFGQkFXb2hBU0FDTHdFd0lnQkJnQUZ4QkVCQkFDRUFBa0FnQWlnQ09DSURSUTBBSUFNb0FsUWlBMFVOQUNBQ0lBTVJBQUFoQUFzZ0FFVU5CaUFBUVJWSERSOGdBa0VGTmdJY0lBSWdBVFlDRkNBQ1Fma1hOZ0lRSUFKQkZUWUNERUVBSVFNTVp3c0NRQ0FBUWFBRWNVR2dCRWNOQUNBQ0xRQXRRUUp4RFFCQkFDRURJQUpCQURZQ0hDQUNJQUUyQWhRZ0FrR1dFellDRUNBQ1FRUTJBZ3dNWndzZ0FnSi9JQUl2QVRCQkZIRkJGRVlFUUVFQklBSXRBQ2hCQVVZTkFSb2dBaThCTWtIbEFFWU1BUXNnQWkwQUtVRUZSZ3M2QUM1QkFDRUFBa0FnQWlnQ09DSURSUTBBSUFNb0FpUWlBMFVOQUNBQ0lBTVJBQUFoQUFzQ1FBSkFBa0FDUUFKQUlBQU9GZ0lCQUFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFNRUN5QUNRUUU2QUM0TElBSWdBaThCTUVIQUFISTdBVEFMUVNjaEF3eFBDeUFDUVNNMkFod2dBaUFCTmdJVUlBSkJwUlkyQWhBZ0FrRVZOZ0lNUVFBaEF3eG5DMEVBSVFNZ0FrRUFOZ0ljSUFJZ0FUWUNGQ0FDUWRVTE5nSVFJQUpCRVRZQ0RBeG1DMEVBSVFBQ1FDQUNLQUk0SWdORkRRQWdBeWdDTENJRFJRMEFJQUlnQXhFQUFDRUFDeUFBRFFFTFFRNGhBd3hMQ3lBQVFSVkdCRUFnQWtFQ05nSWNJQUlnQVRZQ0ZDQUNRYkFZTmdJUUlBSkJGVFlDREVFQUlRTU1aQXRCQUNFRElBSkJBRFlDSENBQ0lBRTJBaFFnQWtHbkRqWUNFQ0FDUVJJMkFnd01Zd3RCQUNFRElBSkJBRFlDSENBQ0lBRTJBaFFnQWtHcUhEWUNFQ0FDUVE4MkFnd01ZZ3NnQWlnQ0JDRUFRUUFoQXlBQ1FRQTJBZ1FnQWlBQUlBRWdDcWRxSWdFUUt5SUFSUTBBSUFKQkJUWUNIQ0FDSUFFMkFoUWdBaUFBTmdJTURHRUxRUThoQXd4SEMwRUFJUU1nQWtFQU5nSWNJQUlnQVRZQ0ZDQUNRYzBUTmdJUUlBSkJERFlDREF4ZkMwSUJJUW9MSUFGQkFXb2hBUUpBSUFJcEF5QWlDMEwvLy8vLy8vLy8vdzlZQkVBZ0FpQUxRZ1NHSUFxRU53TWdEQUVMUVFBaEF5QUNRUUEyQWh3Z0FpQUJOZ0lVSUFKQnJRazJBaEFnQWtFTU5nSU1ERjRMUVNRaEF3eEVDMEVBSVFNZ0FrRUFOZ0ljSUFJZ0FUWUNGQ0FDUWMwVE5nSVFJQUpCRERZQ0RBeGNDeUFDS0FJRUlRQkJBQ0VESUFKQkFEWUNCQ0FDSUFBZ0FSQXNJZ0JGQkVBZ0FVRUJhaUVCREZJTElBSkJGellDSENBQ0lBQTJBZ3dnQWlBQlFRRnFOZ0lVREZzTElBSW9BZ1FoQUVFQUlRTWdBa0VBTmdJRUFrQWdBaUFBSUFFUUxDSUFSUVJBSUFGQkFXb2hBUXdCQ3lBQ1FSWTJBaHdnQWlBQU5nSU1JQUlnQVVFQmFqWUNGQXhiQzBFZklRTU1RUXRCQUNFRElBSkJBRFlDSENBQ0lBRTJBaFFnQWtHYUR6WUNFQ0FDUVNJMkFnd01XUXNnQWlnQ0JDRUFRUUFoQXlBQ1FRQTJBZ1FnQWlBQUlBRVFMU0lBUlFSQUlBRkJBV29oQVF4UUN5QUNRUlEyQWh3Z0FpQUFOZ0lNSUFJZ0FVRUJhallDRkF4WUN5QUNLQUlFSVFCQkFDRURJQUpCQURZQ0JBSkFJQUlnQUNBQkVDMGlBRVVFUUNBQlFRRnFJUUVNQVFzZ0FrRVROZ0ljSUFJZ0FEWUNEQ0FDSUFGQkFXbzJBaFFNV0F0QkhpRURERDRMUVFBaEF5QUNRUUEyQWh3Z0FpQUJOZ0lVSUFKQnhndzJBaEFnQWtFak5nSU1ERllMSUFJb0FnUWhBRUVBSVFNZ0FrRUFOZ0lFSUFJZ0FDQUJFQzBpQUVVRVFDQUJRUUZxSVFFTVRnc2dBa0VSTmdJY0lBSWdBRFlDRENBQ0lBRkJBV28yQWhRTVZRc2dBa0VRTmdJY0lBSWdBVFlDRkNBQ0lBQTJBZ3dNVkF0QkFDRURJQUpCQURZQ0hDQUNJQUUyQWhRZ0FrSEdERFlDRUNBQ1FTTTJBZ3dNVXd0QkFDRURJQUpCQURZQ0hDQUNJQUUyQWhRZ0FrSEFGVFlDRUNBQ1FRSTJBZ3dNVWdzZ0FpZ0NCQ0VBUVFBaEF5QUNRUUEyQWdRQ1FDQUNJQUFnQVJBdElnQkZCRUFnQVVFQmFpRUJEQUVMSUFKQkRqWUNIQ0FDSUFBMkFnd2dBaUFCUVFGcU5nSVVERklMUVJzaEF3dzRDMEVBSVFNZ0FrRUFOZ0ljSUFJZ0FUWUNGQ0FDUWNZTU5nSVFJQUpCSXpZQ0RBeFFDeUFDS0FJRUlRQkJBQ0VESUFKQkFEWUNCQUpBSUFJZ0FDQUJFQ3dpQUVVRVFDQUJRUUZxSVFFTUFRc2dBa0VOTmdJY0lBSWdBRFlDRENBQ0lBRkJBV28yQWhRTVVBdEJHaUVERERZTFFRQWhBeUFDUVFBMkFod2dBaUFCTmdJVUlBSkJtZzgyQWhBZ0FrRWlOZ0lNREU0TElBSW9BZ1FoQUVFQUlRTWdBa0VBTmdJRUFrQWdBaUFBSUFFUUxDSUFSUVJBSUFGQkFXb2hBUXdCQ3lBQ1FRdzJBaHdnQWlBQU5nSU1JQUlnQVVFQmFqWUNGQXhPQzBFWklRTU1OQXRCQUNFRElBSkJBRFlDSENBQ0lBRTJBaFFnQWtHYUR6WUNFQ0FDUVNJMkFnd01UQXNnQUVFVlJ3UkFRUUFoQXlBQ1FRQTJBaHdnQWlBQk5nSVVJQUpCZ3d3MkFoQWdBa0VUTmdJTURFd0xJQUpCQ2pZQ0hDQUNJQUUyQWhRZ0FrSGtGallDRUNBQ1FSVTJBZ3hCQUNFRERFc0xJQUlvQWdRaEFFRUFJUU1nQWtFQU5nSUVJQUlnQUNBQklBcW5haUlCRUNzaUFBUkFJQUpCQnpZQ0hDQUNJQUUyQWhRZ0FpQUFOZ0lNREVzTFFSTWhBd3d4Q3lBQVFSVkhCRUJCQUNFRElBSkJBRFlDSENBQ0lBRTJBaFFnQWtIYURUWUNFQ0FDUVJRMkFnd01TZ3NnQWtFZU5nSWNJQUlnQVRZQ0ZDQUNRZmtYTmdJUUlBSkJGVFlDREVFQUlRTU1TUXRCQUNFQUFrQWdBaWdDT0NJRFJRMEFJQU1vQWl3aUEwVU5BQ0FDSUFNUkFBQWhBQXNnQUVVTlFTQUFRUlZHQkVBZ0FrRUROZ0ljSUFJZ0FUWUNGQ0FDUWJBWU5nSVFJQUpCRlRZQ0RFRUFJUU1NU1F0QkFDRURJQUpCQURZQ0hDQUNJQUUyQWhRZ0FrR25EallDRUNBQ1FSSTJBZ3dNU0F0QkFDRURJQUpCQURZQ0hDQUNJQUUyQWhRZ0FrSGFEVFlDRUNBQ1FSUTJBZ3dNUnd0QkFDRURJQUpCQURZQ0hDQUNJQUUyQWhRZ0FrR25EallDRUNBQ1FSSTJBZ3dNUmdzZ0FrRUFPZ0F2SUFJdEFDMUJCSEZGRFQ4TElBSkJBRG9BTHlBQ1FRRTZBRFJCQUNFRERDc0xRUUFoQXlBQ1FRQTJBaHdnQWtIa0VUWUNFQ0FDUVFjMkFnd2dBaUFCUVFGcU5nSVVERU1MQWtBRFFBSkFJQUV0QUFCQkNtc09CQUFDQWdBQ0N5QUVJQUZCQVdvaUFVY05BQXRCM1FFaEF3eERDd0pBQWtBZ0FpMEFORUVCUncwQVFRQWhBQUpBSUFJb0FqZ2lBMFVOQUNBREtBSllJZ05GRFFBZ0FpQURFUUFBSVFBTElBQkZEUUFnQUVFVlJ3MEJJQUpCM0FFMkFod2dBaUFCTmdJVUlBSkIxUlkyQWhBZ0FrRVZOZ0lNUVFBaEF3eEVDMEhCQVNFRERDb0xJQUpCQURZQ0hDQUNJQUUyQWhRZ0FrSHBDellDRUNBQ1FSODJBZ3hCQUNFRERFSUxBa0FDUUNBQ0xRQW9RUUZyRGdJRUFRQUxRY0FCSVFNTUtRdEJ1UUVoQXd3b0N5QUNRUUk2QUM5QkFDRUFBa0FnQWlnQ09DSURSUTBBSUFNb0FnQWlBMFVOQUNBQ0lBTVJBQUFoQUFzZ0FFVUVRRUhDQVNFRERDZ0xJQUJCRlVjRVFDQUNRUUEyQWh3Z0FpQUJOZ0lVSUFKQnBBdzJBaEFnQWtFUU5nSU1RUUFoQXd4QkN5QUNRZHNCTmdJY0lBSWdBVFlDRkNBQ1Fmb1dOZ0lRSUFKQkZUWUNERUVBSVFNTVFBc2dBU0FFUmdSQVFkb0JJUU1NUUFzZ0FTMEFBRUhJQUVZTkFTQUNRUUU2QUNnTFFhd0JJUU1NSlF0QnZ3RWhBd3drQ3lBQklBUkhCRUFnQWtFUU5nSUlJQUlnQVRZQ0JFRytBU0VERENRTFFka0JJUU1NUEFzZ0FTQUVSZ1JBUWRnQklRTU1QQXNnQVMwQUFFSElBRWNOQkNBQlFRRnFJUUZCdlFFaEF3d2lDeUFCSUFSR0JFQkIxd0VoQXd3N0N3SkFBa0FnQVMwQUFFSEZBR3NPRUFBRkJRVUZCUVVGQlFVRkJRVUZCUUVGQ3lBQlFRRnFJUUZCdXdFaEF3d2lDeUFCUVFGcUlRRkJ2QUVoQXd3aEMwSFdBU0VESUFFZ0JFWU5PU0FDS0FJQUlnQWdCQ0FCYTJvaEJTQUJJQUJyUVFKcUlRWUNRQU5BSUFFdEFBQWdBRUdEMEFCcUxRQUFSdzBESUFCQkFrWU5BU0FBUVFGcUlRQWdCQ0FCUVFGcUlnRkhEUUFMSUFJZ0JUWUNBQXc2Q3lBQ0tBSUVJUUFnQWtJQU53TUFJQUlnQUNBR1FRRnFJZ0VRSnlJQVJRUkFRY1lCSVFNTUlRc2dBa0hWQVRZQ0hDQUNJQUUyQWhRZ0FpQUFOZ0lNUVFBaEF3dzVDMEhVQVNFRElBRWdCRVlOT0NBQ0tBSUFJZ0FnQkNBQmEyb2hCU0FCSUFCclFRRnFJUVlDUUFOQUlBRXRBQUFnQUVHQjBBQnFMUUFBUncwQ0lBQkJBVVlOQVNBQVFRRnFJUUFnQkNBQlFRRnFJZ0ZIRFFBTElBSWdCVFlDQUF3NUN5QUNRWUVFT3dFb0lBSW9BZ1FoQUNBQ1FnQTNBd0FnQWlBQUlBWkJBV29pQVJBbklnQU5Bd3dDQ3lBQ1FRQTJBZ0FMUVFBaEF5QUNRUUEyQWh3Z0FpQUJOZ0lVSUFKQjJCczJBaEFnQWtFSU5nSU1ERFlMUWJvQklRTU1IQXNnQWtIVEFUWUNIQ0FDSUFFMkFoUWdBaUFBTmdJTVFRQWhBd3cwQzBFQUlRQUNRQ0FDS0FJNElnTkZEUUFnQXlnQ09DSURSUTBBSUFJZ0F4RUFBQ0VBQ3lBQVJRMEFJQUJCRlVZTkFTQUNRUUEyQWh3Z0FpQUJOZ0lVSUFKQnpBNDJBaEFnQWtFZ05nSU1RUUFoQXd3ekMwSGtBQ0VEREJrTElBSkIrQUEyQWh3Z0FpQUJOZ0lVSUFKQnloZzJBaEFnQWtFVk5nSU1RUUFoQXd3eEMwSFNBU0VESUFRZ0FTSUFSZzB3SUFRZ0FXc2dBaWdDQUNJQmFpRUZJQUFnQVd0QkJHb2hCZ0pBQTBBZ0FDMEFBQ0FCUWZ6UEFHb3RBQUJIRFFFZ0FVRUVSZzBESUFGQkFXb2hBU0FFSUFCQkFXb2lBRWNOQUFzZ0FpQUZOZ0lBRERFTElBSkJBRFlDSENBQ0lBQTJBaFFnQWtHUU16WUNFQ0FDUVFnMkFnd2dBa0VBTmdJQVFRQWhBd3d3Q3lBQklBUkhCRUFnQWtFT05nSUlJQUlnQVRZQ0JFRzNBU0VEREJjTFFkRUJJUU1NTHdzZ0FrRUFOZ0lBSUFaQkFXb2hBUXRCdUFFaEF3d1VDeUFCSUFSR0JFQkIwQUVoQXd3dEN5QUJMUUFBUVRCcklnQkIvd0Z4UVFwSkJFQWdBaUFBT2dBcUlBRkJBV29oQVVHMkFTRUREQlFMSUFJb0FnUWhBQ0FDUVFBMkFnUWdBaUFBSUFFUUtDSUFSUTBVSUFKQnp3RTJBaHdnQWlBQk5nSVVJQUlnQURZQ0RFRUFJUU1NTEFzZ0FTQUVSZ1JBUWM0QklRTU1MQXNDUUNBQkxRQUFRUzVHQkVBZ0FVRUJhaUVCREFFTElBSW9BZ1FoQUNBQ1FRQTJBZ1FnQWlBQUlBRVFLQ0lBUlEwVklBSkJ6UUUyQWh3Z0FpQUJOZ0lVSUFJZ0FEWUNERUVBSVFNTUxBdEJ0UUVoQXd3U0N5QUVJQUVpQlVZRVFFSE1BU0VERENzTFFRQWhBRUVCSVFGQkFTRUdRUUFoQXdKQUFrQUNRQUpBQWtBQ2Z3SkFBa0FDUUFKQUFrQUNRQUpBSUFVdEFBQkJNR3NPQ2dvSkFBRUNBd1FGQmdnTEMwRUNEQVlMUVFNTUJRdEJCQXdFQzBFRkRBTUxRUVlNQWd0QkJ3d0JDMEVJQ3lFRFFRQWhBVUVBSVFZTUFndEJDU0VEUVFFaEFFRUFJUUZCQUNFR0RBRUxRUUFoQVVFQklRTUxJQUlnQXpvQUt5QUZRUUZxSVFNQ1FBSkFJQUl0QUMxQkVIRU5BQUpBQWtBQ1FDQUNMUUFxRGdNQkFBSUVDeUFHUlEwRERBSUxJQUFOQVF3Q0N5QUJSUTBCQ3lBQ0tBSUVJUUFnQWtFQU5nSUVJQUlnQUNBREVDZ2lBRVVFUUNBRElRRU1Bd3NnQWtISkFUWUNIQ0FDSUFNMkFoUWdBaUFBTmdJTVFRQWhBd3d0Q3lBQ0tBSUVJUUFnQWtFQU5nSUVJQUlnQUNBREVDZ2lBRVVFUUNBRElRRU1HQXNnQWtIS0FUWUNIQ0FDSUFNMkFoUWdBaUFBTmdJTVFRQWhBd3dzQ3lBQ0tBSUVJUUFnQWtFQU5nSUVJQUlnQUNBRkVDZ2lBRVVFUUNBRklRRU1GZ3NnQWtITEFUWUNIQ0FDSUFVMkFoUWdBaUFBTmdJTURDc0xRYlFCSVFNTUVRdEJBQ0VBQWtBZ0FpZ0NPQ0lEUlEwQUlBTW9BandpQTBVTkFDQUNJQU1SQUFBaEFBc0NRQ0FBQkVBZ0FFRVZSZzBCSUFKQkFEWUNIQ0FDSUFFMkFoUWdBa0dVRFRZQ0VDQUNRU0UyQWd4QkFDRUREQ3NMUWJJQklRTU1FUXNnQWtISUFUWUNIQ0FDSUFFMkFoUWdBa0hKRnpZQ0VDQUNRUlUyQWd4QkFDRUREQ2tMSUFKQkFEWUNBQ0FHUVFGcUlRRkI5UUFoQXd3UEN5QUNMUUFwUVFWR0JFQkI0d0FoQXd3UEMwSGlBQ0VEREE0TElBQWhBU0FDUVFBMkFnQUxJQUpCQURvQUxFRUpJUU1NREFzZ0FrRUFOZ0lBSUFkQkFXb2hBVUhBQUNFRERBc0xRUUVMT2dBc0lBSkJBRFlDQUNBR1FRRnFJUUVMUVNraEF3d0lDMEU0SVFNTUJ3c0NRQ0FCSUFSSEJFQURRQ0FCTFFBQVFZQSthaTBBQUNJQVFRRkhCRUFnQUVFQ1J3MERJQUZCQVdvaEFRd0ZDeUFFSUFGQkFXb2lBVWNOQUF0QlBpRUREQ0VMUVQ0aEF3d2dDd3NnQWtFQU9nQXNEQUVMUVFzaEF3d0VDMEU2SVFNTUF3c2dBVUVCYWlFQlFTMGhBd3dDQ3lBQ0lBRTZBQ3dnQWtFQU5nSUFJQVpCQVdvaEFVRU1JUU1NQVFzZ0FrRUFOZ0lBSUFaQkFXb2hBVUVLSVFNTUFBc0FDMEVBSVFNZ0FrRUFOZ0ljSUFJZ0FUWUNGQ0FDUWMwUU5nSVFJQUpCQ1RZQ0RBd1hDMEVBSVFNZ0FrRUFOZ0ljSUFJZ0FUWUNGQ0FDUWVrS05nSVFJQUpCQ1RZQ0RBd1dDMEVBSVFNZ0FrRUFOZ0ljSUFJZ0FUWUNGQ0FDUWJjUU5nSVFJQUpCQ1RZQ0RBd1ZDMEVBSVFNZ0FrRUFOZ0ljSUFJZ0FUWUNGQ0FDUVp3Uk5nSVFJQUpCQ1RZQ0RBd1VDMEVBSVFNZ0FrRUFOZ0ljSUFJZ0FUWUNGQ0FDUWMwUU5nSVFJQUpCQ1RZQ0RBd1RDMEVBSVFNZ0FrRUFOZ0ljSUFJZ0FUWUNGQ0FDUWVrS05nSVFJQUpCQ1RZQ0RBd1NDMEVBSVFNZ0FrRUFOZ0ljSUFJZ0FUWUNGQ0FDUWJjUU5nSVFJQUpCQ1RZQ0RBd1JDMEVBSVFNZ0FrRUFOZ0ljSUFJZ0FUWUNGQ0FDUVp3Uk5nSVFJQUpCQ1RZQ0RBd1FDMEVBSVFNZ0FrRUFOZ0ljSUFJZ0FUWUNGQ0FDUVpjVk5nSVFJQUpCRHpZQ0RBd1BDMEVBSVFNZ0FrRUFOZ0ljSUFJZ0FUWUNGQ0FDUVpjVk5nSVFJQUpCRHpZQ0RBd09DMEVBSVFNZ0FrRUFOZ0ljSUFJZ0FUWUNGQ0FDUWNBU05nSVFJQUpCQ3pZQ0RBd05DMEVBSVFNZ0FrRUFOZ0ljSUFJZ0FUWUNGQ0FDUVpVSk5nSVFJQUpCQ3pZQ0RBd01DMEVBSVFNZ0FrRUFOZ0ljSUFJZ0FUWUNGQ0FDUWVFUE5nSVFJQUpCQ2pZQ0RBd0xDMEVBSVFNZ0FrRUFOZ0ljSUFJZ0FUWUNGQ0FDUWZzUE5nSVFJQUpCQ2pZQ0RBd0tDMEVBSVFNZ0FrRUFOZ0ljSUFJZ0FUWUNGQ0FDUWZFWk5nSVFJQUpCQWpZQ0RBd0pDMEVBSVFNZ0FrRUFOZ0ljSUFJZ0FUWUNGQ0FDUWNRVU5nSVFJQUpCQWpZQ0RBd0lDMEVBSVFNZ0FrRUFOZ0ljSUFJZ0FUWUNGQ0FDUWZJVk5nSVFJQUpCQWpZQ0RBd0hDeUFDUVFJMkFod2dBaUFCTmdJVUlBSkJuQm8yQWhBZ0FrRVdOZ0lNUVFBaEF3d0dDMEVCSVFNTUJRdEIxQUFoQXlBQklBUkdEUVFnQ0VFSWFpRUpJQUlvQWdBaEJRSkFBa0FnQVNBRVJ3UkFJQVZCMk1JQWFpRUhJQVFnQldvZ0FXc2hBQ0FGUVg5elFRcHFJZ1VnQVdvaEJnTkFJQUV0QUFBZ0J5MEFBRWNFUUVFQ0lRY01Bd3NnQlVVRVFFRUFJUWNnQmlFQkRBTUxJQVZCQVdzaEJTQUhRUUZxSVFjZ0JDQUJRUUZxSWdGSERRQUxJQUFoQlNBRUlRRUxJQWxCQVRZQ0FDQUNJQVUyQWdBTUFRc2dBa0VBTmdJQUlBa2dCellDQUFzZ0NTQUJOZ0lFSUFnb0Fnd2hBQ0FJS0FJSURnTUJCQUlBQ3dBTElBSkJBRFlDSENBQ1FiVWFOZ0lRSUFKQkZ6WUNEQ0FDSUFCQkFXbzJBaFJCQUNFRERBSUxJQUpCQURZQ0hDQUNJQUEyQWhRZ0FrSEtHallDRUNBQ1FRazJBZ3hCQUNFRERBRUxJQUVnQkVZRVFFRWlJUU1NQVFzZ0FrRUpOZ0lJSUFJZ0FUWUNCRUVoSVFNTElBaEJFR29rQUNBRFJRUkFJQUlvQWd3aEFBd0JDeUFDSUFNMkFoeEJBQ0VBSUFJb0FnUWlBVVVOQUNBQ0lBRWdCQ0FDS0FJSUVRRUFJZ0ZGRFFBZ0FpQUVOZ0lVSUFJZ0FUWUNEQ0FCSVFBTElBQUx2Z0lCQW44Z0FFRUFPZ0FBSUFCQjNBQnFJZ0ZCQVd0QkFEb0FBQ0FBUVFBNkFBSWdBRUVBT2dBQklBRkJBMnRCQURvQUFDQUJRUUpyUVFBNkFBQWdBRUVBT2dBRElBRkJCR3RCQURvQUFFRUFJQUJyUVFOeElnRWdBR29pQUVFQU5nSUFRZHdBSUFGclFYeHhJZ0lnQUdvaUFVRUVhMEVBTmdJQUFrQWdBa0VKU1EwQUlBQkJBRFlDQ0NBQVFRQTJBZ1FnQVVFSWEwRUFOZ0lBSUFGQkRHdEJBRFlDQUNBQ1FSbEpEUUFnQUVFQU5nSVlJQUJCQURZQ0ZDQUFRUUEyQWhBZ0FFRUFOZ0lNSUFGQkVHdEJBRFlDQUNBQlFSUnJRUUEyQWdBZ0FVRVlhMEVBTmdJQUlBRkJIR3RCQURZQ0FDQUNJQUJCQkhGQkdISWlBbXNpQVVFZ1NRMEFJQUFnQW1vaEFBTkFJQUJDQURjREdDQUFRZ0EzQXhBZ0FFSUFOd01JSUFCQ0FEY0RBQ0FBUVNCcUlRQWdBVUVnYXlJQlFSOUxEUUFMQ3d0V0FRRi9Ba0FnQUNnQ0RBMEFBa0FDUUFKQUFrQWdBQzBBTHc0REFRQURBZ3NnQUNnQ09DSUJSUTBBSUFFb0Fpd2lBVVVOQUNBQUlBRVJBQUFpQVEwREMwRUFEd3NBQ3lBQVFjTVdOZ0lRUVE0aEFRc2dBUXNhQUNBQUtBSU1SUVJBSUFCQjBSczJBaEFnQUVFVk5nSU1Dd3NVQUNBQUtBSU1RUlZHQkVBZ0FFRUFOZ0lNQ3dzVUFDQUFLQUlNUVJaR0JFQWdBRUVBTmdJTUN3c0hBQ0FBS0FJTUN3Y0FJQUFvQWhBTENRQWdBQ0FCTmdJUUN3Y0FJQUFvQWhRTEZ3QWdBRUVrVHdSQUFBc2dBRUVDZEVHZ00yb29BZ0FMRndBZ0FFRXVUd1JBQUFzZ0FFRUNkRUd3Tkdvb0FnQUx2d2tCQVg5QjZ5Z2hBUUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBSUFCQjVBQnJEdlFEWTJJQUFXRmhZV0ZoWVFJREJBVmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoQmdjSUNRb0xEQTBPRDJGaFlXRmhFR0ZoWVdGaFlXRmhZV0ZoRVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVJJVEZCVVdGeGdaR2h0aFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaEhCMGVIeUFoSWlNa0pTWW5LQ2txS3l3dExpOHdNVEl6TkRVMllUYzRPVHBoWVdGaFlXRmhZVHRoWVdFOFlXRmhZVDArUDJGaFlXRmhZV0ZoUUdGaFFXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZVUpEUkVWR1IwaEpTa3RNVFU1UFVGRlNVMkZoWVdGaFlXRmhWRlZXVjFoWldsdGhYRjFoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGZVlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFgyQmhDMEhoSnc4TFFhUWhEd3RCeXl3UEMwSCtNUThMUWNBa0R3dEJxeVFQQzBHTktBOExRZUltRHd0QmdEQVBDMEc1THc4TFFkY2tEd3RCN3g4UEMwSGhIdzhMUWZvZkR3dEI4aUFQQzBHb0x3OExRYTR5RHd0QmlEQVBDMEhzSnc4TFFZSWlEd3RCamgwUEMwSFFMZzhMUWNvakR3dEJ4VElQQzBIZkhBOExRZEljRHd0QnhDQVBDMEhYSUE4TFFhSWZEd3RCN1M0UEMwR3JNQThMUWRRbER3dEJ6QzRQQzBINkxnOExRZndyRHd0QjBqQVBDMEh4SFE4TFFic2dEd3RCOXlzUEMwR1FNUThMUWRjeER3dEJvaTBQQzBIVUp3OExRZUFyRHd0Qm55d1BDMEhyTVE4TFFkVWZEd3RCeWpFUEMwSGVKUThMUWRRZUR3dEI5QndQQzBHbk1nOExRYkVkRHd0Qm9CMFBDMEc1TVE4TFFid3dEd3RCa2lFUEMwR3pKZzhMUWVrc0R3dEJyQjRQQzBIVUt3OExRZmNtRHd0QmdDWVBDMEd3SVE4TFFmNGVEd3RCalNNUEMwR0pMUThMUWZjaUR3dEJvREVQQzBHdUh3OExRY1lsRHd0QjZCNFBDMEdUSWc4TFFjSXZEd3RCd3gwUEMwR0xMQThMUWVFZER3dEJqUzhQQzBIcUlROExRYlF0RHd0QjBpOFBDMEhmTWc4TFFkSXlEd3RCOERBUEMwR3BJZzhMUWZrakR3dEJtUjRQQzBHMUxBOExRWnN3RHd0QmtqSVBDMEcyS3c4TFFjSWlEd3RCK0RJUEMwR2VKUThMUWRBaUR3dEJ1aDRQQzBHQkhnOExBQXRCMWlFaEFRc2dBUXNXQUNBQUlBQXRBQzFCL2dGeElBRkJBRWR5T2dBdEN4a0FJQUFnQUMwQUxVSDlBWEVnQVVFQVIwRUJkSEk2QUMwTEdRQWdBQ0FBTFFBdFFmc0JjU0FCUVFCSFFRSjBjam9BTFFzWkFDQUFJQUF0QUMxQjl3RnhJQUZCQUVkQkEzUnlPZ0F0Q3o0QkFuOENRQ0FBS0FJNElnTkZEUUFnQXlnQ0JDSURSUTBBSUFBZ0FTQUNJQUZySUFNUkFRQWlCRUYvUncwQUlBQkJ4aEUyQWhCQkdDRUVDeUFFQ3o0QkFuOENRQ0FBS0FJNElnTkZEUUFnQXlnQ0NDSURSUTBBSUFBZ0FTQUNJQUZySUFNUkFRQWlCRUYvUncwQUlBQkI5Z28yQWhCQkdDRUVDeUFFQ3o0QkFuOENRQ0FBS0FJNElnTkZEUUFnQXlnQ0RDSURSUTBBSUFBZ0FTQUNJQUZySUFNUkFRQWlCRUYvUncwQUlBQkI3Um8yQWhCQkdDRUVDeUFFQ3o0QkFuOENRQ0FBS0FJNElnTkZEUUFnQXlnQ0VDSURSUTBBSUFBZ0FTQUNJQUZySUFNUkFRQWlCRUYvUncwQUlBQkJsUkEyQWhCQkdDRUVDeUFFQ3o0QkFuOENRQ0FBS0FJNElnTkZEUUFnQXlnQ0ZDSURSUTBBSUFBZ0FTQUNJQUZySUFNUkFRQWlCRUYvUncwQUlBQkJxaHMyQWhCQkdDRUVDeUFFQ3o0QkFuOENRQ0FBS0FJNElnTkZEUUFnQXlnQ0dDSURSUTBBSUFBZ0FTQUNJQUZySUFNUkFRQWlCRUYvUncwQUlBQkI3Uk0yQWhCQkdDRUVDeUFFQ3o0QkFuOENRQ0FBS0FJNElnTkZEUUFnQXlnQ0tDSURSUTBBSUFBZ0FTQUNJQUZySUFNUkFRQWlCRUYvUncwQUlBQkI5Z2cyQWhCQkdDRUVDeUFFQ3o0QkFuOENRQ0FBS0FJNElnTkZEUUFnQXlnQ0hDSURSUTBBSUFBZ0FTQUNJQUZySUFNUkFRQWlCRUYvUncwQUlBQkJ3aGsyQWhCQkdDRUVDeUFFQ3o0QkFuOENRQ0FBS0FJNElnTkZEUUFnQXlnQ0lDSURSUTBBSUFBZ0FTQUNJQUZySUFNUkFRQWlCRUYvUncwQUlBQkJsQlEyQWhCQkdDRUVDeUFFQzFrQkFuOENRQ0FBTFFBb1FRRkdEUUFnQUM4Qk1pSUJRZVFBYTBIa0FFa05BQ0FCUWN3QlJnMEFJQUZCc0FKR0RRQWdBQzhCTUNJQVFjQUFjUTBBUVFFaEFpQUFRWWdFY1VHQUJFWU5BQ0FBUVNoeFJTRUNDeUFDQzR3QkFRSi9Ba0FDUUFKQUlBQXRBQ3BGRFFBZ0FDMEFLMFVOQUNBQUx3RXdJZ0ZCQW5GRkRRRU1BZ3NnQUM4Qk1DSUJRUUZ4UlEwQkMwRUJJUUlnQUMwQUtFRUJSZzBBSUFBdkFUSWlBRUhrQUd0QjVBQkpEUUFnQUVITUFVWU5BQ0FBUWJBQ1JnMEFJQUZCd0FCeERRQkJBQ0VDSUFGQmlBUnhRWUFFUmcwQUlBRkJLSEZCQUVjaEFnc2dBZ3R6QUNBQVFSQnEvUXdBQUFBQUFBQUFBQUFBQUFBQUFBQUEvUXNEQUNBQS9Rd0FBQUFBQUFBQUFBQUFBQUFBQUFBQS9Rc0RBQ0FBUVRCcS9Rd0FBQUFBQUFBQUFBQUFBQUFBQUFBQS9Rc0RBQ0FBUVNCcS9Rd0FBQUFBQUFBQUFBQUFBQUFBQUFBQS9Rc0RBQ0FBUWQwQk5nSWNDd1lBSUFBUU1ndWFMUUVMZnlNQVFSQnJJZ29rQUVHazBBQW9BZ0FpQ1VVRVFFSGswd0FvQWdBaUJVVUVRRUh3MHdCQ2Z6Y0NBRUhvMHdCQ2dJQ0VnSUNBd0FBM0FnQkI1Tk1BSUFwQkNHcEJjSEZCMktyVnFnVnpJZ1UyQWdCQitOTUFRUUEyQWdCQnlOTUFRUUEyQWdBTFFjelRBRUdBMUFRMkFnQkJuTkFBUVlEVUJEWUNBRUd3MEFBZ0JUWUNBRUdzMEFCQmZ6WUNBRUhRMHdCQmdLd0ROZ0lBQTBBZ0FVSEkwQUJxSUFGQnZOQUFhaUlDTmdJQUlBSWdBVUcwMEFCcUlnTTJBZ0FnQVVIQTBBQnFJQU0yQWdBZ0FVSFEwQUJxSUFGQnhOQUFhaUlETmdJQUlBTWdBallDQUNBQlFkalFBR29nQVVITTBBQnFJZ0kyQWdBZ0FpQUROZ0lBSUFGQjFOQUFhaUFDTmdJQUlBRkJJR29pQVVHQUFrY05BQXRCak5RRVFjR3JBellDQUVHbzBBQkI5Tk1BS0FJQU5nSUFRWmpRQUVIQXF3TTJBZ0JCcE5BQVFZalVCRFlDQUVITS93ZEJPRFlDQUVHSTFBUWhDUXNDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FDQUFRZXdCVFFSQVFZelFBQ2dDQUNJR1FSQWdBRUVUYWtGd2NTQUFRUXRKR3lJRVFRTjJJZ0IySWdGQkEzRUVRQUpBSUFGQkFYRWdBSEpCQVhNaUFrRURkQ0lBUWJUUUFHb2lBU0FBUWJ6UUFHb29BZ0FpQUNnQ0NDSURSZ1JBUVl6UUFDQUdRWDRnQW5keE5nSUFEQUVMSUFFZ0F6WUNDQ0FESUFFMkFnd0xJQUJCQ0dvaEFTQUFJQUpCQTNRaUFrRURjallDQkNBQUlBSnFJZ0FnQUNnQ0JFRUJjallDQkF3UkMwR1UwQUFvQWdBaUNDQUVUdzBCSUFFRVFBSkFRUUlnQUhRaUFrRUFJQUpyY2lBQklBQjBjV2dpQUVFRGRDSUNRYlRRQUdvaUFTQUNRYnpRQUdvb0FnQWlBaWdDQ0NJRFJnUkFRWXpRQUNBR1FYNGdBSGR4SWdZMkFnQU1BUXNnQVNBRE5nSUlJQU1nQVRZQ0RBc2dBaUFFUVFOeU5nSUVJQUJCQTNRaUFDQUVheUVGSUFBZ0Ftb2dCVFlDQUNBQ0lBUnFJZ1FnQlVFQmNqWUNCQ0FJQkVBZ0NFRjRjVUcwMEFCcUlRQkJvTkFBS0FJQUlRTUNmMEVCSUFoQkEzWjBJZ0VnQm5GRkJFQkJqTkFBSUFFZ0JuSTJBZ0FnQUF3QkN5QUFLQUlJQ3lJQklBTTJBZ3dnQUNBRE5nSUlJQU1nQURZQ0RDQURJQUUyQWdnTElBSkJDR29oQVVHZzBBQWdCRFlDQUVHVTBBQWdCVFlDQUF3UkMwR1EwQUFvQWdBaUMwVU5BU0FMYUVFQ2RFRzgwZ0JxS0FJQUlnQW9BZ1JCZUhFZ0JHc2hCU0FBSVFJRFFBSkFJQUlvQWhBaUFVVUVRQ0FDUVJScUtBSUFJZ0ZGRFFFTElBRW9BZ1JCZUhFZ0JHc2lBeUFGU1NFQ0lBTWdCU0FDR3lFRklBRWdBQ0FDR3lFQUlBRWhBZ3dCQ3dzZ0FDZ0NHQ0VKSUFBb0Fnd2lBeUFBUndSQVFaelFBQ2dDQUJvZ0F5QUFLQUlJSWdFMkFnZ2dBU0FETmdJTURCQUxJQUJCRkdvaUFpZ0NBQ0lCUlFSQUlBQW9BaEFpQVVVTkF5QUFRUkJxSVFJTEEwQWdBaUVISUFFaUEwRVVhaUlDS0FJQUlnRU5BQ0FEUVJCcUlRSWdBeWdDRUNJQkRRQUxJQWRCQURZQ0FBd1BDMEYvSVFRZ0FFRy9mMHNOQUNBQVFSTnFJZ0ZCY0hFaEJFR1EwQUFvQWdBaUNFVU5BRUVBSUFScklRVUNRQUpBQWtBQ2YwRUFJQVJCZ0FKSkRRQWFRUjhnQkVILy8vOEhTdzBBR2lBRVFTWWdBVUVJZG1jaUFHdDJRUUZ4SUFCQkFYUnJRVDVxQ3lJR1FRSjBRYnpTQUdvb0FnQWlBa1VFUUVFQUlRRkJBQ0VEREFFTFFRQWhBU0FFUVJrZ0JrRUJkbXRCQUNBR1FSOUhHM1FoQUVFQUlRTURRQUpBSUFJb0FnUkJlSEVnQkdzaUJ5QUZUdzBBSUFJaEF5QUhJZ1VOQUVFQUlRVWdBaUVCREFNTElBRWdBa0VVYWlnQ0FDSUhJQWNnQWlBQVFSMTJRUVJ4YWtFUWFpZ0NBQ0lDUmhzZ0FTQUhHeUVCSUFCQkFYUWhBQ0FDRFFBTEN5QUJJQU55UlFSQVFRQWhBMEVDSUFaMElnQkJBQ0FBYTNJZ0NIRWlBRVVOQXlBQWFFRUNkRUc4MGdCcUtBSUFJUUVMSUFGRkRRRUxBMEFnQVNnQ0JFRjRjU0FFYXlJQ0lBVkpJUUFnQWlBRklBQWJJUVVnQVNBRElBQWJJUU1nQVNnQ0VDSUFCSDhnQUFVZ0FVRVVhaWdDQUFzaUFRMEFDd3NnQTBVTkFDQUZRWlRRQUNnQ0FDQUVhMDhOQUNBREtBSVlJUWNnQXlBREtBSU1JZ0JIQkVCQm5OQUFLQUlBR2lBQUlBTW9BZ2dpQVRZQ0NDQUJJQUEyQWd3TURnc2dBMEVVYWlJQ0tBSUFJZ0ZGQkVBZ0F5Z0NFQ0lCUlEwRElBTkJFR29oQWdzRFFDQUNJUVlnQVNJQVFSUnFJZ0lvQWdBaUFRMEFJQUJCRUdvaEFpQUFLQUlRSWdFTkFBc2dCa0VBTmdJQURBMExRWlRRQUNnQ0FDSURJQVJQQkVCQm9OQUFLQUlBSVFFQ1FDQURJQVJySWdKQkVFOEVRQ0FCSUFScUlnQWdBa0VCY2pZQ0JDQUJJQU5xSUFJMkFnQWdBU0FFUVFOeU5nSUVEQUVMSUFFZ0EwRURjallDQkNBQklBTnFJZ0FnQUNnQ0JFRUJjallDQkVFQUlRQkJBQ0VDQzBHVTBBQWdBallDQUVHZzBBQWdBRFlDQUNBQlFRaHFJUUVNRHd0Qm1OQUFLQUlBSWdNZ0JFc0VRQ0FFSUFscUlnQWdBeUFFYXlJQlFRRnlOZ0lFUWFUUUFDQUFOZ0lBUVpqUUFDQUJOZ0lBSUFrZ0JFRURjallDQkNBSlFRaHFJUUVNRHd0QkFDRUJJQVFDZjBIazB3QW9BZ0FFUUVIczB3QW9BZ0FNQVF0QjhOTUFRbjgzQWdCQjZOTUFRb0NBaElDQWdNQUFOd0lBUWVUVEFDQUtRUXhxUVhCeFFkaXExYW9GY3pZQ0FFSDQwd0JCQURZQ0FFSEkwd0JCQURZQ0FFR0FnQVFMSWdBZ0JFSEhBR29pQldvaUJrRUFJQUJySWdkeElnSlBCRUJCL05NQVFUQTJBZ0FNRHdzQ1FFSEUwd0FvQWdBaUFVVU5BRUc4MHdBb0FnQWlDQ0FDYWlFQUlBQWdBVTBnQUNBSVMzRU5BRUVBSVFGQi9OTUFRVEEyQWdBTUR3dEJ5Tk1BTFFBQVFRUnhEUVFDUUFKQUlBa0VRRUhNMHdBaEFRTkFJQUVvQWdBaUFDQUpUUVJBSUFBZ0FTZ0NCR29nQ1VzTkF3c2dBU2dDQ0NJQkRRQUxDMEVBRURNaUFFRi9SZzBGSUFJaEJrSG8wd0FvQWdBaUFVRUJheUlESUFCeEJFQWdBaUFBYXlBQUlBTnFRUUFnQVd0eGFpRUdDeUFFSUFaUERRVWdCa0grLy8vL0Iwc05CVUhFMHdBb0FnQWlBd1JBUWJ6VEFDZ0NBQ0lISUFacUlRRWdBU0FIVFEwR0lBRWdBMHNOQmdzZ0JoQXpJZ0VnQUVjTkFRd0hDeUFHSUFOcklBZHhJZ1pCL3YvLy93ZExEUVFnQmhBeklRQWdBQ0FCS0FJQUlBRW9BZ1JxUmcwRElBQWhBUXNDUUNBR0lBUkJ5QUJxVHcwQUlBRkJmMFlOQUVIczB3QW9BZ0FpQUNBRklBWnJha0VBSUFCcmNTSUFRZjcvLy84SFN3UkFJQUVoQUF3SEN5QUFFRE5CZjBjRVFDQUFJQVpxSVFZZ0FTRUFEQWNMUVFBZ0Jtc1FNeG9NQkFzZ0FTSUFRWDlIRFFVTUF3dEJBQ0VEREF3TFFRQWhBQXdLQ3lBQVFYOUhEUUlMUWNqVEFFSEkwd0FvQWdCQkJISTJBZ0FMSUFKQi92Ly8vd2RMRFFFZ0FoQXpJUUJCQUJBeklRRWdBRUYvUmcwQklBRkJmMFlOQVNBQUlBRlBEUUVnQVNBQWF5SUdJQVJCT0dwTkRRRUxRYnpUQUVHODB3QW9BZ0FnQm1vaUFUWUNBRUhBMHdBb0FnQWdBVWtFUUVIQTB3QWdBVFlDQUFzQ1FBSkFBa0JCcE5BQUtBSUFJZ0lFUUVITTB3QWhBUU5BSUFBZ0FTZ0NBQ0lESUFFb0FnUWlCV3BHRFFJZ0FTZ0NDQ0lCRFFBTERBSUxRWnpRQUNnQ0FDSUJRUUJISUFBZ0FVOXhSUVJBUVp6UUFDQUFOZ0lBQzBFQUlRRkIwTk1BSUFZMkFnQkJ6Tk1BSUFBMkFnQkJyTkFBUVg4MkFnQkJzTkFBUWVUVEFDZ0NBRFlDQUVIWTB3QkJBRFlDQUFOQUlBRkJ5TkFBYWlBQlFielFBR29pQWpZQ0FDQUNJQUZCdE5BQWFpSUROZ0lBSUFGQndOQUFhaUFETmdJQUlBRkIwTkFBYWlBQlFjVFFBR29pQXpZQ0FDQURJQUkyQWdBZ0FVSFkwQUJxSUFGQnpOQUFhaUlDTmdJQUlBSWdBellDQUNBQlFkVFFBR29nQWpZQ0FDQUJRU0JxSWdGQmdBSkhEUUFMUVhnZ0FHdEJEM0VpQVNBQWFpSUNJQVpCT0dzaUF5QUJheUlCUVFGeU5nSUVRYWpRQUVIMDB3QW9BZ0EyQWdCQm1OQUFJQUUyQWdCQnBOQUFJQUkyQWdBZ0FDQURha0U0TmdJRURBSUxJQUFnQWswTkFDQUNJQU5KRFFBZ0FTZ0NERUVJY1EwQVFYZ2dBbXRCRDNFaUFDQUNhaUlEUVpqUUFDZ0NBQ0FHYWlJSElBQnJJZ0JCQVhJMkFnUWdBU0FGSUFacU5nSUVRYWpRQUVIMDB3QW9BZ0EyQWdCQm1OQUFJQUEyQWdCQnBOQUFJQU0yQWdBZ0FpQUhha0U0TmdJRURBRUxJQUJCbk5BQUtBSUFTUVJBUVp6UUFDQUFOZ0lBQ3lBQUlBWnFJUU5Cek5NQUlRRUNRQUpBQWtBRFFDQURJQUVvQWdCSEJFQWdBU2dDQ0NJQkRRRU1BZ3NMSUFFdEFBeEJDSEZGRFFFTFFjelRBQ0VCQTBBZ0FTZ0NBQ0lESUFKTkJFQWdBeUFCS0FJRWFpSUZJQUpMRFFNTElBRW9BZ2doQVF3QUN3QUxJQUVnQURZQ0FDQUJJQUVvQWdRZ0JtbzJBZ1FnQUVGNElBQnJRUTl4YWlJSklBUkJBM0kyQWdRZ0EwRjRJQU5yUVE5eGFpSUdJQVFnQ1dvaUJHc2hBU0FDSUFaR0JFQkJwTkFBSUFRMkFnQkJtTkFBUVpqUUFDZ0NBQ0FCYWlJQU5nSUFJQVFnQUVFQmNqWUNCQXdJQzBHZzBBQW9BZ0FnQmtZRVFFR2cwQUFnQkRZQ0FFR1UwQUJCbE5BQUtBSUFJQUZxSWdBMkFnQWdCQ0FBUVFGeU5nSUVJQUFnQkdvZ0FEWUNBQXdJQ3lBR0tBSUVJZ1ZCQTNGQkFVY05CaUFGUVhoeElRZ2dCVUgvQVUwRVFDQUZRUU4ySVFNZ0JpZ0NDQ0lBSUFZb0Fnd2lBa1lFUUVHTTBBQkJqTkFBS0FJQVFYNGdBM2R4TmdJQURBY0xJQUlnQURZQ0NDQUFJQUkyQWd3TUJnc2dCaWdDR0NFSElBWWdCaWdDRENJQVJ3UkFJQUFnQmlnQ0NDSUNOZ0lJSUFJZ0FEWUNEQXdGQ3lBR1FSUnFJZ0lvQWdBaUJVVUVRQ0FHS0FJUUlnVkZEUVFnQmtFUWFpRUNDd05BSUFJaEF5QUZJZ0JCRkdvaUFpZ0NBQ0lGRFFBZ0FFRVFhaUVDSUFBb0FoQWlCUTBBQ3lBRFFRQTJBZ0FNQkF0QmVDQUFhMEVQY1NJQklBQnFJZ2NnQmtFNGF5SURJQUZySWdGQkFYSTJBZ1FnQUNBRGFrRTROZ0lFSUFJZ0JVRTNJQVZyUVE5eGFrRS9heUlESUFNZ0FrRVFha2tiSWdOQkl6WUNCRUdvMEFCQjlOTUFLQUlBTmdJQVFaalFBQ0FCTmdJQVFhVFFBQ0FITmdJQUlBTkJFR3BCMU5NQUtRSUFOd0lBSUFOQnpOTUFLUUlBTndJSVFkVFRBQ0FEUVFocU5nSUFRZERUQUNBR05nSUFRY3pUQUNBQU5nSUFRZGpUQUVFQU5nSUFJQU5CSkdvaEFRTkFJQUZCQnpZQ0FDQUZJQUZCQkdvaUFVc05BQXNnQWlBRFJnMEFJQU1nQXlnQ0JFRitjVFlDQkNBRElBTWdBbXNpQlRZQ0FDQUNJQVZCQVhJMkFnUWdCVUgvQVUwRVFDQUZRWGh4UWJUUUFHb2hBQUovUVl6UUFDZ0NBQ0lCUVFFZ0JVRURkblFpQTNGRkJFQkJqTkFBSUFFZ0EzSTJBZ0FnQUF3QkN5QUFLQUlJQ3lJQklBSTJBZ3dnQUNBQ05nSUlJQUlnQURZQ0RDQUNJQUUyQWdnTUFRdEJIeUVCSUFWQi8vLy9CMDBFUUNBRlFTWWdCVUVJZG1jaUFHdDJRUUZ4SUFCQkFYUnJRVDVxSVFFTElBSWdBVFlDSENBQ1FnQTNBaEFnQVVFQ2RFRzgwZ0JxSVFCQmtOQUFLQUlBSWdOQkFTQUJkQ0lHY1VVRVFDQUFJQUkyQWdCQmtOQUFJQU1nQm5JMkFnQWdBaUFBTmdJWUlBSWdBallDQ0NBQ0lBSTJBZ3dNQVFzZ0JVRVpJQUZCQVhaclFRQWdBVUVmUnh0MElRRWdBQ2dDQUNFREFrQURRQ0FESWdBb0FnUkJlSEVnQlVZTkFTQUJRUjEySVFNZ0FVRUJkQ0VCSUFBZ0EwRUVjV3BCRUdvaUJpZ0NBQ0lERFFBTElBWWdBallDQUNBQ0lBQTJBaGdnQWlBQ05nSU1JQUlnQWpZQ0NBd0JDeUFBS0FJSUlnRWdBallDRENBQUlBSTJBZ2dnQWtFQU5nSVlJQUlnQURZQ0RDQUNJQUUyQWdnTFFaalFBQ2dDQUNJQklBUk5EUUJCcE5BQUtBSUFJZ0FnQkdvaUFpQUJJQVJySWdGQkFYSTJBZ1JCbU5BQUlBRTJBZ0JCcE5BQUlBSTJBZ0FnQUNBRVFRTnlOZ0lFSUFCQkNHb2hBUXdJQzBFQUlRRkIvTk1BUVRBMkFnQU1Cd3RCQUNFQUN5QUhSUTBBQWtBZ0JpZ0NIQ0lDUVFKMFFielNBR29pQXlnQ0FDQUdSZ1JBSUFNZ0FEWUNBQ0FBRFFGQmtOQUFRWkRRQUNnQ0FFRitJQUozY1RZQ0FBd0NDeUFIUVJCQkZDQUhLQUlRSUFaR0cyb2dBRFlDQUNBQVJRMEJDeUFBSUFjMkFoZ2dCaWdDRUNJQ0JFQWdBQ0FDTmdJUUlBSWdBRFlDR0FzZ0JrRVVhaWdDQUNJQ1JRMEFJQUJCRkdvZ0FqWUNBQ0FDSUFBMkFoZ0xJQUVnQ0dvaEFTQUdJQWhxSWdZb0FnUWhCUXNnQmlBRlFYNXhOZ0lFSUFFZ0JHb2dBVFlDQUNBRUlBRkJBWEkyQWdRZ0FVSC9BVTBFUUNBQlFYaHhRYlRRQUdvaEFBSi9RWXpRQUNnQ0FDSUNRUUVnQVVFRGRuUWlBWEZGQkVCQmpOQUFJQUVnQW5JMkFnQWdBQXdCQ3lBQUtBSUlDeUlCSUFRMkFnd2dBQ0FFTmdJSUlBUWdBRFlDRENBRUlBRTJBZ2dNQVF0Qkh5RUZJQUZCLy8vL0IwMEVRQ0FCUVNZZ0FVRUlkbWNpQUd0MlFRRnhJQUJCQVhSclFUNXFJUVVMSUFRZ0JUWUNIQ0FFUWdBM0FoQWdCVUVDZEVHODBnQnFJUUJCa05BQUtBSUFJZ0pCQVNBRmRDSURjVVVFUUNBQUlBUTJBZ0JCa05BQUlBSWdBM0kyQWdBZ0JDQUFOZ0lZSUFRZ0JEWUNDQ0FFSUFRMkFnd01BUXNnQVVFWklBVkJBWFpyUVFBZ0JVRWZSeHQwSVFVZ0FDZ0NBQ0VBQWtBRFFDQUFJZ0lvQWdSQmVIRWdBVVlOQVNBRlFSMTJJUUFnQlVFQmRDRUZJQUlnQUVFRWNXcEJFR29pQXlnQ0FDSUFEUUFMSUFNZ0JEWUNBQ0FFSUFJMkFoZ2dCQ0FFTmdJTUlBUWdCRFlDQ0F3QkN5QUNLQUlJSWdBZ0JEWUNEQ0FDSUFRMkFnZ2dCRUVBTmdJWUlBUWdBallDRENBRUlBQTJBZ2dMSUFsQkNHb2hBUXdDQ3dKQUlBZEZEUUFDUUNBREtBSWNJZ0ZCQW5SQnZOSUFhaUlDS0FJQUlBTkdCRUFnQWlBQU5nSUFJQUFOQVVHUTBBQWdDRUYrSUFGM2NTSUlOZ0lBREFJTElBZEJFRUVVSUFjb0FoQWdBMFliYWlBQU5nSUFJQUJGRFFFTElBQWdCellDR0NBREtBSVFJZ0VFUUNBQUlBRTJBaEFnQVNBQU5nSVlDeUFEUVJScUtBSUFJZ0ZGRFFBZ0FFRVVhaUFCTmdJQUlBRWdBRFlDR0FzQ1FDQUZRUTlOQkVBZ0F5QUVJQVZxSWdCQkEzSTJBZ1FnQUNBRGFpSUFJQUFvQWdSQkFYSTJBZ1FNQVFzZ0F5QUVhaUlDSUFWQkFYSTJBZ1FnQXlBRVFRTnlOZ0lFSUFJZ0JXb2dCVFlDQUNBRlFmOEJUUVJBSUFWQmVIRkJ0TkFBYWlFQUFuOUJqTkFBS0FJQUlnRkJBU0FGUVFOMmRDSUZjVVVFUUVHTTBBQWdBU0FGY2pZQ0FDQUFEQUVMSUFBb0FnZ0xJZ0VnQWpZQ0RDQUFJQUkyQWdnZ0FpQUFOZ0lNSUFJZ0FUWUNDQXdCQzBFZklRRWdCVUgvLy84SFRRUkFJQVZCSmlBRlFRaDJaeUlBYTNaQkFYRWdBRUVCZEd0QlBtb2hBUXNnQWlBQk5nSWNJQUpDQURjQ0VDQUJRUUowUWJ6U0FHb2hBRUVCSUFGMElnUWdDSEZGQkVBZ0FDQUNOZ0lBUVpEUUFDQUVJQWh5TmdJQUlBSWdBRFlDR0NBQ0lBSTJBZ2dnQWlBQ05nSU1EQUVMSUFWQkdTQUJRUUYyYTBFQUlBRkJIMGNiZENFQklBQW9BZ0FoQkFKQUEwQWdCQ0lBS0FJRVFYaHhJQVZHRFFFZ0FVRWRkaUVFSUFGQkFYUWhBU0FBSUFSQkJIRnFRUkJxSWdZb0FnQWlCQTBBQ3lBR0lBSTJBZ0FnQWlBQU5nSVlJQUlnQWpZQ0RDQUNJQUkyQWdnTUFRc2dBQ2dDQ0NJQklBSTJBZ3dnQUNBQ05nSUlJQUpCQURZQ0dDQUNJQUEyQWd3Z0FpQUJOZ0lJQ3lBRFFRaHFJUUVNQVFzQ1FDQUpSUTBBQWtBZ0FDZ0NIQ0lCUVFKMFFielNBR29pQWlnQ0FDQUFSZ1JBSUFJZ0F6WUNBQ0FERFFGQmtOQUFJQXRCZmlBQmQzRTJBZ0FNQWdzZ0NVRVFRUlFnQ1NnQ0VDQUFSaHRxSUFNMkFnQWdBMFVOQVFzZ0F5QUpOZ0lZSUFBb0FoQWlBUVJBSUFNZ0FUWUNFQ0FCSUFNMkFoZ0xJQUJCRkdvb0FnQWlBVVVOQUNBRFFSUnFJQUUyQWdBZ0FTQUROZ0lZQ3dKQUlBVkJEMDBFUUNBQUlBUWdCV29pQVVFRGNqWUNCQ0FBSUFGcUlnRWdBU2dDQkVFQmNqWUNCQXdCQ3lBQUlBUnFJZ2NnQlVFQmNqWUNCQ0FBSUFSQkEzSTJBZ1FnQlNBSGFpQUZOZ0lBSUFnRVFDQUlRWGh4UWJUUUFHb2hBVUdnMEFBb0FnQWhBd0ovUVFFZ0NFRURkblFpQWlBR2NVVUVRRUdNMEFBZ0FpQUdjallDQUNBQkRBRUxJQUVvQWdnTElnSWdBellDRENBQklBTTJBZ2dnQXlBQk5nSU1JQU1nQWpZQ0NBdEJvTkFBSUFjMkFnQkJsTkFBSUFVMkFnQUxJQUJCQ0dvaEFRc2dDa0VRYWlRQUlBRUxRd0FnQUVVRVFEOEFRUkIwRHdzQ1FDQUFRZi8vQTNFTkFDQUFRUUJJRFFBZ0FFRVFka0FBSWdCQmYwWUVRRUg4MHdCQk1EWUNBRUYvRHdzZ0FFRVFkQThMQUFzTDNEOGlBRUdBQ0FzSkFRQUFBQUlBQUFBREFFR1VDQXNGQkFBQUFBVUFRYVFJQ3drR0FBQUFCd0FBQUFnQVFkd0lDNG90U1c1MllXeHBaQ0JqYUdGeUlHbHVJSFZ5YkNCeGRXVnllUUJUY0dGdUlHTmhiR3hpWVdOcklHVnljbTl5SUdsdUlHOXVYMkp2WkhrQVEyOXVkR1Z1ZEMxTVpXNW5kR2dnYjNabGNtWnNiM2NBUTJoMWJtc2djMmw2WlNCdmRtVnlabXh2ZHdCU1pYTndiMjV6WlNCdmRtVnlabXh2ZHdCSmJuWmhiR2xrSUcxbGRHaHZaQ0JtYjNJZ1NGUlVVQzk0TG5nZ2NtVnhkV1Z6ZEFCSmJuWmhiR2xrSUcxbGRHaHZaQ0JtYjNJZ1VsUlRVQzk0TG5nZ2NtVnhkV1Z6ZEFCRmVIQmxZM1JsWkNCVFQxVlNRMFVnYldWMGFHOWtJR1p2Y2lCSlEwVXZlQzU0SUhKbGNYVmxjM1FBU1c1MllXeHBaQ0JqYUdGeUlHbHVJSFZ5YkNCbWNtRm5iV1Z1ZENCemRHRnlkQUJGZUhCbFkzUmxaQ0JrYjNRQVUzQmhiaUJqWVd4c1ltRmpheUJsY25KdmNpQnBiaUJ2Ymw5emRHRjBkWE1BU1c1MllXeHBaQ0J5WlhOd2IyNXpaU0J6ZEdGMGRYTUFTVzUyWVd4cFpDQmphR0Z5WVdOMFpYSWdhVzRnWTJoMWJtc2daWGgwWlc1emFXOXVjd0JWYzJWeUlHTmhiR3hpWVdOcklHVnljbTl5QUdCdmJsOXlaWE5sZEdBZ1kyRnNiR0poWTJzZ1pYSnliM0lBWUc5dVgyTm9kVzVyWDJobFlXUmxjbUFnWTJGc2JHSmhZMnNnWlhKeWIzSUFZRzl1WDIxbGMzTmhaMlZmWW1WbmFXNWdJR05oYkd4aVlXTnJJR1Z5Y205eUFHQnZibDlqYUhWdWExOWxlSFJsYm5OcGIyNWZkbUZzZFdWZ0lHTmhiR3hpWVdOcklHVnljbTl5QUdCdmJsOXpkR0YwZFhOZlkyOXRjR3hsZEdWZ0lHTmhiR3hpWVdOcklHVnljbTl5QUdCdmJsOTJaWEp6YVc5dVgyTnZiWEJzWlhSbFlDQmpZV3hzWW1GamF5Qmxjbkp2Y2dCZ2IyNWZkWEpzWDJOdmJYQnNaWFJsWUNCallXeHNZbUZqYXlCbGNuSnZjZ0JnYjI1ZlkyaDFibXRmWTI5dGNHeGxkR1ZnSUdOaGJHeGlZV05ySUdWeWNtOXlBR0J2Ymw5b1pXRmtaWEpmZG1Gc2RXVmZZMjl0Y0d4bGRHVmdJR05oYkd4aVlXTnJJR1Z5Y205eUFHQnZibDl0WlhOellXZGxYMk52YlhCc1pYUmxZQ0JqWVd4c1ltRmpheUJsY25KdmNnQmdiMjVmYldWMGFHOWtYMk52YlhCc1pYUmxZQ0JqWVd4c1ltRmpheUJsY25KdmNnQmdiMjVmYUdWaFpHVnlYMlpwWld4a1gyTnZiWEJzWlhSbFlDQmpZV3hzWW1GamF5Qmxjbkp2Y2dCZ2IyNWZZMmgxYm10ZlpYaDBaVzV6YVc5dVgyNWhiV1ZnSUdOaGJHeGlZV05ySUdWeWNtOXlBRlZ1Wlhod1pXTjBaV1FnWTJoaGNpQnBiaUIxY213Z2MyVnlkbVZ5QUVsdWRtRnNhV1FnYUdWaFpHVnlJSFpoYkhWbElHTm9ZWElBU1c1MllXeHBaQ0JvWldGa1pYSWdabWxsYkdRZ1kyaGhjZ0JUY0dGdUlHTmhiR3hpWVdOcklHVnljbTl5SUdsdUlHOXVYM1psY25OcGIyNEFTVzUyWVd4cFpDQnRhVzV2Y2lCMlpYSnphVzl1QUVsdWRtRnNhV1FnYldGcWIzSWdkbVZ5YzJsdmJnQkZlSEJsWTNSbFpDQnpjR0ZqWlNCaFpuUmxjaUIyWlhKemFXOXVBRVY0Y0dWamRHVmtJRU5TVEVZZ1lXWjBaWElnZG1WeWMybHZiZ0JKYm5aaGJHbGtJRWhVVkZBZ2RtVnljMmx2YmdCSmJuWmhiR2xrSUdobFlXUmxjaUIwYjJ0bGJnQlRjR0Z1SUdOaGJHeGlZV05ySUdWeWNtOXlJR2x1SUc5dVgzVnliQUJKYm5aaGJHbGtJR05vWVhKaFkzUmxjbk1nYVc0Z2RYSnNBRlZ1Wlhod1pXTjBaV1FnYzNSaGNuUWdZMmhoY2lCcGJpQjFjbXdBUkc5MVlteGxJRUFnYVc0Z2RYSnNBRVZ0Y0hSNUlFTnZiblJsYm5RdFRHVnVaM1JvQUVsdWRtRnNhV1FnWTJoaGNtRmpkR1Z5SUdsdUlFTnZiblJsYm5RdFRHVnVaM1JvQUVSMWNHeHBZMkYwWlNCRGIyNTBaVzUwTFV4bGJtZDBhQUJKYm5aaGJHbGtJR05vWVhJZ2FXNGdkWEpzSUhCaGRHZ0FRMjl1ZEdWdWRDMU1aVzVuZEdnZ1kyRnVKM1FnWW1VZ2NISmxjMlZ1ZENCM2FYUm9JRlJ5WVc1elptVnlMVVZ1WTI5a2FXNW5BRWx1ZG1Gc2FXUWdZMmhoY21GamRHVnlJR2x1SUdOb2RXNXJJSE5wZW1VQVUzQmhiaUJqWVd4c1ltRmpheUJsY25KdmNpQnBiaUJ2Ymw5b1pXRmtaWEpmZG1Gc2RXVUFVM0JoYmlCallXeHNZbUZqYXlCbGNuSnZjaUJwYmlCdmJsOWphSFZ1YTE5bGVIUmxibk5wYjI1ZmRtRnNkV1VBU1c1MllXeHBaQ0JqYUdGeVlXTjBaWElnYVc0Z1kyaDFibXNnWlhoMFpXNXphVzl1Y3lCMllXeDFaUUJOYVhOemFXNW5JR1Y0Y0dWamRHVmtJRXhHSUdGbWRHVnlJR2hsWVdSbGNpQjJZV3gxWlFCSmJuWmhiR2xrSUdCVWNtRnVjMlpsY2kxRmJtTnZaR2x1WjJBZ2FHVmhaR1Z5SUhaaGJIVmxBRWx1ZG1Gc2FXUWdZMmhoY21GamRHVnlJR2x1SUdOb2RXNXJJR1Y0ZEdWdWMybHZibk1nY1hWdmRHVWdkbUZzZFdVQVNXNTJZV3hwWkNCamFHRnlZV04wWlhJZ2FXNGdZMmgxYm1zZ1pYaDBaVzV6YVc5dWN5QnhkVzkwWldRZ2RtRnNkV1VBVUdGMWMyVmtJR0o1SUc5dVgyaGxZV1JsY25OZlkyOXRjR3hsZEdVQVNXNTJZV3hwWkNCRlQwWWdjM1JoZEdVQWIyNWZjbVZ6WlhRZ2NHRjFjMlVBYjI1ZlkyaDFibXRmYUdWaFpHVnlJSEJoZFhObEFHOXVYMjFsYzNOaFoyVmZZbVZuYVc0Z2NHRjFjMlVBYjI1ZlkyaDFibXRmWlhoMFpXNXphVzl1WDNaaGJIVmxJSEJoZFhObEFHOXVYM04wWVhSMWMxOWpiMjF3YkdWMFpTQndZWFZ6WlFCdmJsOTJaWEp6YVc5dVgyTnZiWEJzWlhSbElIQmhkWE5sQUc5dVgzVnliRjlqYjIxd2JHVjBaU0J3WVhWelpRQnZibDlqYUhWdWExOWpiMjF3YkdWMFpTQndZWFZ6WlFCdmJsOW9aV0ZrWlhKZmRtRnNkV1ZmWTI5dGNHeGxkR1VnY0dGMWMyVUFiMjVmYldWemMyRm5aVjlqYjIxd2JHVjBaU0J3WVhWelpRQnZibDl0WlhSb2IyUmZZMjl0Y0d4bGRHVWdjR0YxYzJVQWIyNWZhR1ZoWkdWeVgyWnBaV3hrWDJOdmJYQnNaWFJsSUhCaGRYTmxBRzl1WDJOb2RXNXJYMlY0ZEdWdWMybHZibDl1WVcxbElIQmhkWE5sQUZWdVpYaHdaV04wWldRZ2MzQmhZMlVnWVdaMFpYSWdjM1JoY25RZ2JHbHVaUUJUY0dGdUlHTmhiR3hpWVdOcklHVnljbTl5SUdsdUlHOXVYMk5vZFc1clgyVjRkR1Z1YzJsdmJsOXVZVzFsQUVsdWRtRnNhV1FnWTJoaGNtRmpkR1Z5SUdsdUlHTm9kVzVySUdWNGRHVnVjMmx2Ym5NZ2JtRnRaUUJRWVhWelpTQnZiaUJEVDA1T1JVTlVMMVZ3WjNKaFpHVUFVR0YxYzJVZ2IyNGdVRkpKTDFWd1ozSmhaR1VBUlhod1pXTjBaV1FnU0ZSVVVDOHlJRU52Ym01bFkzUnBiMjRnVUhKbFptRmpaUUJUY0dGdUlHTmhiR3hpWVdOcklHVnljbTl5SUdsdUlHOXVYMjFsZEdodlpBQkZlSEJsWTNSbFpDQnpjR0ZqWlNCaFpuUmxjaUJ0WlhSb2IyUUFVM0JoYmlCallXeHNZbUZqYXlCbGNuSnZjaUJwYmlCdmJsOW9aV0ZrWlhKZlptbGxiR1FBVUdGMWMyVmtBRWx1ZG1Gc2FXUWdkMjl5WkNCbGJtTnZkVzUwWlhKbFpBQkpiblpoYkdsa0lHMWxkR2h2WkNCbGJtTnZkVzUwWlhKbFpBQlZibVY0Y0dWamRHVmtJR05vWVhJZ2FXNGdkWEpzSUhOamFHVnRZUUJTWlhGMVpYTjBJR2hoY3lCcGJuWmhiR2xrSUdCVWNtRnVjMlpsY2kxRmJtTnZaR2x1WjJBQVUxZEpWRU5JWDFCU1QxaFpBRlZUUlY5UVVrOVlXUUJOUzBGRFZFbFdTVlJaQUZWT1VGSlBRMFZUVTBGQ1RFVmZSVTVVU1ZSWkFFTlBVRmtBVFU5V1JVUmZVRVZTVFVGT1JVNVVURmtBVkU5UFgwVkJVa3haQUU1UFZFbEdXUUJHUVVsTVJVUmZSRVZRUlU1RVJVNURXUUJDUVVSZlIwRlVSVmRCV1FCUVRFRlpBRkJWVkFCRFNFVkRTMDlWVkFCSFFWUkZWMEZaWDFSSlRVVlBWVlFBVWtWUlZVVlRWRjlVU1UxRlQxVlVBRTVGVkZkUFVrdGZRMDlPVGtWRFZGOVVTVTFGVDFWVUFFTlBUazVGUTFSSlQwNWZWRWxOUlU5VlZBQk1UMGRKVGw5VVNVMUZUMVZVQUU1RlZGZFBVa3RmVWtWQlJGOVVTVTFGVDFWVUFGQlBVMVFBVFVsVFJFbFNSVU5VUlVSZlVrVlJWVVZUVkFCRFRFbEZUbFJmUTB4UFUwVkVYMUpGVVZWRlUxUUFRMHhKUlU1VVgwTk1UMU5GUkY5TVQwRkVYMEpCVEVGT1EwVkVYMUpGVVZWRlUxUUFRa0ZFWDFKRlVWVkZVMVFBU0ZSVVVGOVNSVkZWUlZOVVgxTkZUbFJmVkU5ZlNGUlVVRk5mVUU5U1ZBQlNSVkJQVWxRQVNVMWZRVjlVUlVGUVQxUUFVa1ZUUlZSZlEwOU9WRVZPVkFCT1QxOURUMDVVUlU1VUFGQkJVbFJKUVV4ZlEwOU9WRVZPVkFCSVVFVmZTVTVXUVV4SlJGOURUMDVUVkVGT1ZBQklVRVZmUTBKZlVrVlRSVlFBUjBWVUFFaFFSVjlUVkZKSlExUUFRMDlPUmt4SlExUUFWRVZOVUU5U1FWSlpYMUpGUkVsU1JVTlVBRkJGVWsxQlRrVk9WRjlTUlVSSlVrVkRWQUJEVDA1T1JVTlVBRTFWVEZSSlgxTlVRVlJWVXdCSVVFVmZTVTVXUVV4SlJGOVRWRUZVVlZNQVZFOVBYMDFCVGxsZlVrVlJWVVZUVkZNQVJVRlNURmxmU0VsT1ZGTUFWVTVCVmtGSlRFRkNURVZmUms5U1gweEZSMEZNWDFKRlFWTlBUbE1BVDFCVVNVOU9Vd0JUVjBsVVEwaEpUa2RmVUZKUFZFOURUMHhUQUZaQlVrbEJUbFJmUVV4VFQxOU9SVWRQVkVsQlZFVlRBRTFWVEZSSlVFeEZYME5JVDBsRFJWTUFTVTVVUlZKT1FVeGZVMFZTVmtWU1gwVlNVazlTQUZkRlFsOVRSVkpXUlZKZlZVNUxUazlYVGw5RlVsSlBVZ0JTUVVsTVIxVk9YMFZTVWs5U0FFbEVSVTVVU1ZSWlgxQlNUMVpKUkVWU1gwRlZWRWhGVGxSSlEwRlVTVTlPWDBWU1VrOVNBRk5UVEY5RFJWSlVTVVpKUTBGVVJWOUZVbEpQVWdCSlRsWkJURWxFWDFoZlJrOVNWMEZTUkVWRVgwWlBVZ0JUUlZSZlVFRlNRVTFGVkVWU0FFZEZWRjlRUVZKQlRVVlVSVklBU0ZCRlgxVlRSVklBVTBWRlgwOVVTRVZTQUVoUVJWOURRbDlEU0ZWT1MxOUlSVUZFUlZJQVRVdERRVXhGVGtSQlVnQlRSVlJWVUFCWFJVSmZVMFZTVmtWU1gwbFRYMFJQVjA0QVZFVkJVa1JQVjA0QVNGQkZYME5NVDFORlJGOURUMDVPUlVOVVNVOU9BRWhGVlZKSlUxUkpRMTlGV0ZCSlVrRlVTVTlPQUVSSlUwTlBUazVGUTFSRlJGOVBVRVZTUVZSSlQwNEFUazlPWDBGVlZFaFBVa2xVUVZSSlZrVmZTVTVHVDFKTlFWUkpUMDRBU0ZCRlgwbE9Wa0ZNU1VSZlZrVlNVMGxQVGdCSVVFVmZRMEpmVFVWVFUwRkhSVjlDUlVkSlRnQlRTVlJGWDBsVFgwWlNUMXBGVGdCSVVFVmZTVTVXUVV4SlJGOUlSVUZFUlZKZlZFOUxSVTRBU1U1V1FVeEpSRjlVVDB0RlRnQkdUMUpDU1VSRVJVNEFSVTVJUVU1RFJWOVpUMVZTWDBOQlRFMEFTRkJGWDBsT1ZrRk1TVVJmVlZKTUFFSk1UME5MUlVSZlFsbGZVRUZTUlU1VVFVeGZRMDlPVkZKUFRBQk5TME5QVEFCQlEwd0FTRkJGWDBsT1ZFVlNUa0ZNQUZKRlVWVkZVMVJmU0VWQlJFVlNYMFpKUlV4RVUxOVVUMDlmVEVGU1IwVmZWVTVQUmtaSlEwbEJUQUJJVUVWZlQwc0FWVTVNU1U1TEFGVk9URTlEU3dCUVVra0FVa1ZVVWxsZlYwbFVTQUJJVUVWZlNVNVdRVXhKUkY5RFQwNVVSVTVVWDB4RlRrZFVTQUJJVUVWZlZVNUZXRkJGUTFSRlJGOURUMDVVUlU1VVgweEZUa2RVU0FCR1RGVlRTQUJRVWs5UVVFRlVRMGdBVFMxVFJVRlNRMGdBVlZKSlgxUlBUMTlNVDA1SEFGQlNUME5GVTFOSlRrY0FUVWxUUTBWTVRFRk9SVTlWVTE5UVJWSlRTVk5VUlU1VVgxZEJVazVKVGtjQVRVbFRRMFZNVEVGT1JVOVZVMTlYUVZKT1NVNUhBRWhRUlY5SlRsWkJURWxFWDFSU1FVNVRSa1ZTWDBWT1EwOUVTVTVIQUVWNGNHVmpkR1ZrSUVOU1RFWUFTRkJGWDBsT1ZrRk1TVVJmUTBoVlRrdGZVMGxhUlFCTlQxWkZBRU5QVGxSSlRsVkZBRWhRUlY5RFFsOVRWRUZVVlZOZlEwOU5VRXhGVkVVQVNGQkZYME5DWDBoRlFVUkZVbE5mUTA5TlVFeEZWRVVBU0ZCRlgwTkNYMVpGVWxOSlQwNWZRMDlOVUV4RlZFVUFTRkJGWDBOQ1gxVlNURjlEVDAxUVRFVlVSUUJJVUVWZlEwSmZRMGhWVGt0ZlEwOU5VRXhGVkVVQVNGQkZYME5DWDBoRlFVUkZVbDlXUVV4VlJWOURUMDFRVEVWVVJRQklVRVZmUTBKZlEwaFZUa3RmUlZoVVJVNVRTVTlPWDFaQlRGVkZYME5QVFZCTVJWUkZBRWhRUlY5RFFsOURTRlZPUzE5RldGUkZUbE5KVDA1ZlRrRk5SVjlEVDAxUVRFVlVSUUJJVUVWZlEwSmZUVVZUVTBGSFJWOURUMDFRVEVWVVJRQklVRVZmUTBKZlRVVlVTRTlFWDBOUFRWQk1SVlJGQUVoUVJWOURRbDlJUlVGRVJWSmZSa2xGVEVSZlEwOU5VRXhGVkVVQVJFVk1SVlJGQUVoUVJWOUpUbFpCVEVsRVgwVlBSbDlUVkVGVVJRQkpUbFpCVEVsRVgxTlRURjlEUlZKVVNVWkpRMEZVUlFCUVFWVlRSUUJPVDE5U1JWTlFUMDVUUlFCVlRsTlZVRkJQVWxSRlJGOU5SVVJKUVY5VVdWQkZBRWRQVGtVQVRrOVVYMEZEUTBWUVZFRkNURVVBVTBWU1ZrbERSVjlWVGtGV1FVbE1RVUpNUlFCU1FVNUhSVjlPVDFSZlUwRlVTVk5HU1VGQ1RFVUFUMUpKUjBsT1gwbFRYMVZPVWtWQlEwaEJRa3hGQUZKRlUxQlBUbE5GWDBsVFgxTlVRVXhGQUZCVlVrZEZBRTFGVWtkRkFGSkZVVlZGVTFSZlNFVkJSRVZTWDBaSlJVeEVVMTlVVDA5ZlRFRlNSMFVBVWtWUlZVVlRWRjlJUlVGRVJWSmZWRTlQWDB4QlVrZEZBRkJCV1V4UFFVUmZWRTlQWDB4QlVrZEZBRWxPVTFWR1JrbERTVVZPVkY5VFZFOVNRVWRGQUVoUVJWOVFRVlZUUlVSZlZWQkhVa0ZFUlFCSVVFVmZVRUZWVTBWRVgwZ3lYMVZRUjFKQlJFVUFVMDlWVWtORkFFRk9UazlWVGtORkFGUlNRVU5GQUVoUVJWOVZUa1ZZVUVWRFZFVkVYMU5RUVVORkFFUkZVME5TU1VKRkFGVk9VMVZDVTBOU1NVSkZBRkpGUTA5U1JBQklVRVZmU1U1V1FVeEpSRjlOUlZSSVQwUUFUazlVWDBaUFZVNUVBRkJTVDFCR1NVNUVBRlZPUWtsT1JBQlNSVUpKVGtRQVZVNUJWVlJJVDFKSldrVkVBRTFGVkVoUFJGOU9UMVJmUVV4TVQxZEZSQUJJVkZSUVgxWkZVbE5KVDA1ZlRrOVVYMU5WVUZCUFVsUkZSQUJCVEZKRlFVUlpYMUpGVUU5U1ZFVkVBRUZEUTBWUVZFVkVBRTVQVkY5SlRWQk1SVTFGVGxSRlJBQk1UMDlRWDBSRlZFVkRWRVZFQUVoUVJWOURVbDlGV0ZCRlExUkZSQUJJVUVWZlRFWmZSVmhRUlVOVVJVUUFRMUpGUVZSRlJBQkpUVjlWVTBWRUFFaFFSVjlRUVZWVFJVUUFWRWxOUlU5VlZGOVBRME5WVWtWRUFGQkJXVTFGVGxSZlVrVlJWVWxTUlVRQVVGSkZRMDlPUkVsVVNVOU9YMUpGVVZWSlVrVkVBRkJTVDFoWlgwRlZWRWhGVGxSSlEwRlVTVTlPWDFKRlVWVkpVa1ZFQUU1RlZGZFBVa3RmUVZWVVNFVk9WRWxEUVZSSlQwNWZVa1ZSVlVsU1JVUUFURVZPUjFSSVgxSkZVVlZKVWtWRUFGTlRURjlEUlZKVVNVWkpRMEZVUlY5U1JWRlZTVkpGUkFCVlVFZFNRVVJGWDFKRlVWVkpVa1ZFQUZCQlIwVmZSVmhRU1ZKRlJBQlFVa1ZEVDA1RVNWUkpUMDVmUmtGSlRFVkVBRVZZVUVWRFZFRlVTVTlPWDBaQlNVeEZSQUJTUlZaQlRFbEVRVlJKVDA1ZlJrRkpURVZFQUZOVFRGOUlRVTVFVTBoQlMwVmZSa0ZKVEVWRUFFeFBRMHRGUkFCVVVrRk9VMFpQVWsxQlZFbFBUbDlCVUZCTVNVVkVBRTVQVkY5TlQwUkpSa2xGUkFCT1QxUmZSVmhVUlU1RVJVUUFRa0ZPUkZkSlJGUklYMHhKVFVsVVgwVllRMFZGUkVWRUFGTkpWRVZmU1ZOZlQxWkZVa3hQUVVSRlJBQklSVUZFQUVWNGNHVmpkR1ZrSUVoVVZGQXZBQUJlRXdBQUpoTUFBREFRQUFEd0Z3QUFuUk1BQUJVU0FBQTVGd0FBOEJJQUFBb1FBQUIxRWdBQXJSSUFBSUlUQUFCUEZBQUFmeEFBQUtBVkFBQWpGQUFBaVJJQUFJc1VBQUJORlFBQTFCRUFBTThVQUFBUUdBQUF5UllBQU53V0FBREJFUUFBNEJjQUFMc1VBQUIwRkFBQWZCVUFBT1VVQUFBSUZ3QUFIeEFBQUdVVkFBQ2pGQUFBS0JVQUFBSVZBQUNaRlFBQUxCQUFBSXNaQUFCUER3QUExQTRBQUdvUUFBRE9FQUFBQWhjQUFJa09BQUJ1RXdBQUhCTUFBR1lVQUFCV0Z3QUF3Uk1BQU0wVEFBQnNFd0FBYUJjQUFHWVhBQUJmRndBQUloTUFBTTRQQUFCcERnQUEyQTRBQUdNV0FBRExFd0FBcWc0QUFDZ1hBQUFtRndBQXhSTUFBRjBXQUFEb0VRQUFaeE1BQUdVVEFBRHlGZ0FBY3hNQUFCMFhBQUQ1RmdBQTh4RUFBTThPQUFET0ZRQUFEQklBQUxNUkFBQ2xFUUFBWVJBQUFESVhBQUM3RXdCQitUVUxBUUVBUVpBMkMrQUJBUUVDQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFBRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUFRZjAzQ3dFQkFFR1JPQXRlQWdNQ0FnSUNBZ0FBQWdJQUFnSUFBZ0lDQWdJQ0FnSUNBZ0FFQUFBQUFBQUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnQUFBQUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQUFJQUFnQkIvVGtMQVFFQVFaRTZDMTRDQUFJQ0FnSUNBQUFDQWdBQ0FnQUNBZ0lDQWdJQ0FnSUNBQU1BQkFBQUFBSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FBQUFBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lBQWdBQ0FFSHdPd3NOYkc5elpXVmxjQzFoYkdsMlpRQkJpVHdMQVFFQVFhQThDK0FCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUFBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVBUVlrK0N3RUJBRUdnUGd2bkFRRUJBUUVCQVFFQkFRRUJBUUlCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQUFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQlkyaDFibXRsWkFCQnNNQUFDMThCQVFBQkFRRUJBUUFBQVFFQUFRRUFBUUVCQVFFQkFRRUJBUUFBQUFBQUFBQUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRQUFBQUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQUFFQUFRQkJrTUlBQ3lGbFkzUnBiMjVsYm5RdGJHVnVaM1JvYjI1eWIzaDVMV052Ym01bFkzUnBiMjRBUWNEQ0FBc3RjbUZ1YzJabGNpMWxibU52WkdsdVozQm5jbUZrWlEwS0RRb05DbE5ORFFvTkNsUlVVQzlEUlM5VVUxQXZBRUg1d2dBTEJRRUNBQUVEQUVHUXd3QUw0QUVFQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRQUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUJCK2NRQUN3VUJBZ0FCQXdCQmtNVUFDK0FCQkFFQkJRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUFBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVBUWZuR0FBc0VBUUFBQVFCQmtjY0FDOThCQVFFQUFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFBRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRQUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUJCK3NnQUN3UUJBQUFDQUVHUXlRQUxYd01FQUFBRUJBUUVCQVFFQkFRRUJBVUVCQVFFQkFRRUJBUUVCQVFBQkFBR0J3UUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBQUVBQVFBQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFBQUFBRUFFSDZ5Z0FMQkFFQUFBRUFRWkRMQUFzQkFRQkJxc3NBQzBFQ0FBQUFBQUFBQXdNREF3TURBd01EQXdNREF3TURBd01EQXdNREF3TURBd01BQUFBQUFBQURBd01EQXdNREF3TURBd01EQXdNREF3TURBd01EQXdNREF3QkIrc3dBQ3dRQkFBQUJBRUdRelFBTEFRRUFRWnJOQUFzR0FnQUFBQUFDQUVHeHpRQUxPZ01EQXdNREF3TURBd01EQXdNREF3TURBd01EQXdNREF3TURBQUFBQUFBQUF3TURBd01EQXdNREF3TURBd01EQXdNREF3TURBd01EQXdNQVFmRE9BQXVXQVU1UFZVNURSVVZEUzA5VlZFNUZRMVJGVkVWRFVrbENSVXhWVTBoRlZFVkJSRk5GUVZKRFNGSkhSVU5VU1ZaSlZGbE1SVTVFUVZKV1JVOVVTVVpaVUZSSlQwNVRRMGhUUlVGWlUxUkJWRU5JUjBWUFVrUkpVa1ZEVkU5U1ZGSkRTRkJCVWtGTlJWUkZVbFZTUTBWQ1UwTlNTVUpGUVZKRVQxZE9RVU5GU1U1RVRrdERTMVZDVTBOU1NVSkZTRlJVVUM5QlJGUlFMdz09JywgJ2Jhc2U2NCcpXG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IGNvcnNTYWZlTGlzdGVkTWV0aG9kcyA9IC8qKiBAdHlwZSB7Y29uc3R9ICovIChbJ0dFVCcsICdIRUFEJywgJ1BPU1QnXSlcbmNvbnN0IGNvcnNTYWZlTGlzdGVkTWV0aG9kc1NldCA9IG5ldyBTZXQoY29yc1NhZmVMaXN0ZWRNZXRob2RzKVxuXG5jb25zdCBudWxsQm9keVN0YXR1cyA9IC8qKiBAdHlwZSB7Y29uc3R9ICovIChbMTAxLCAyMDQsIDIwNSwgMzA0XSlcblxuY29uc3QgcmVkaXJlY3RTdGF0dXMgPSAvKiogQHR5cGUge2NvbnN0fSAqLyAoWzMwMSwgMzAyLCAzMDMsIDMwNywgMzA4XSlcbmNvbnN0IHJlZGlyZWN0U3RhdHVzU2V0ID0gbmV3IFNldChyZWRpcmVjdFN0YXR1cylcblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNibG9jay1iYWQtcG9ydFxuICovXG5jb25zdCBiYWRQb3J0cyA9IC8qKiBAdHlwZSB7Y29uc3R9ICovIChbXG4gICcxJywgJzcnLCAnOScsICcxMScsICcxMycsICcxNScsICcxNycsICcxOScsICcyMCcsICcyMScsICcyMicsICcyMycsICcyNScsICczNycsICc0MicsICc0MycsICc1MycsICc2OScsICc3NycsICc3OScsXG4gICc4NycsICc5NScsICcxMDEnLCAnMTAyJywgJzEwMycsICcxMDQnLCAnMTA5JywgJzExMCcsICcxMTEnLCAnMTEzJywgJzExNScsICcxMTcnLCAnMTE5JywgJzEyMycsICcxMzUnLCAnMTM3JyxcbiAgJzEzOScsICcxNDMnLCAnMTYxJywgJzE3OScsICczODknLCAnNDI3JywgJzQ2NScsICc1MTInLCAnNTEzJywgJzUxNCcsICc1MTUnLCAnNTI2JywgJzUzMCcsICc1MzEnLCAnNTMyJyxcbiAgJzU0MCcsICc1NDgnLCAnNTU0JywgJzU1NicsICc1NjMnLCAnNTg3JywgJzYwMScsICc2MzYnLCAnOTg5JywgJzk5MCcsICc5OTMnLCAnOTk1JywgJzE3MTknLCAnMTcyMCcsICcxNzIzJyxcbiAgJzIwNDknLCAnMzY1OScsICc0MDQ1JywgJzQxOTAnLCAnNTA2MCcsICc1MDYxJywgJzYwMDAnLCAnNjU2NicsICc2NjY1JywgJzY2NjYnLCAnNjY2NycsICc2NjY4JywgJzY2NjknLCAnNjY3OScsXG4gICc2Njk3JywgJzEwMDgwJ1xuXSlcbmNvbnN0IGJhZFBvcnRzU2V0ID0gbmV3IFNldChiYWRQb3J0cylcblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby93ZWJhcHBzZWMtcmVmZXJyZXItcG9saWN5LyNyZWZlcnJlci1wb2xpY2llc1xuICovXG5jb25zdCByZWZlcnJlclBvbGljeSA9IC8qKiBAdHlwZSB7Y29uc3R9ICovIChbXG4gICcnLFxuICAnbm8tcmVmZXJyZXInLFxuICAnbm8tcmVmZXJyZXItd2hlbi1kb3duZ3JhZGUnLFxuICAnc2FtZS1vcmlnaW4nLFxuICAnb3JpZ2luJyxcbiAgJ3N0cmljdC1vcmlnaW4nLFxuICAnb3JpZ2luLXdoZW4tY3Jvc3Mtb3JpZ2luJyxcbiAgJ3N0cmljdC1vcmlnaW4td2hlbi1jcm9zcy1vcmlnaW4nLFxuICAndW5zYWZlLXVybCdcbl0pXG5jb25zdCByZWZlcnJlclBvbGljeVNldCA9IG5ldyBTZXQocmVmZXJyZXJQb2xpY3kpXG5cbmNvbnN0IHJlcXVlc3RSZWRpcmVjdCA9IC8qKiBAdHlwZSB7Y29uc3R9ICovIChbJ2ZvbGxvdycsICdtYW51YWwnLCAnZXJyb3InXSlcblxuY29uc3Qgc2FmZU1ldGhvZHMgPSAvKiogQHR5cGUge2NvbnN0fSAqLyAoWydHRVQnLCAnSEVBRCcsICdPUFRJT05TJywgJ1RSQUNFJ10pXG5jb25zdCBzYWZlTWV0aG9kc1NldCA9IG5ldyBTZXQoc2FmZU1ldGhvZHMpXG5cbmNvbnN0IHJlcXVlc3RNb2RlID0gLyoqIEB0eXBlIHtjb25zdH0gKi8gKFsnbmF2aWdhdGUnLCAnc2FtZS1vcmlnaW4nLCAnbm8tY29ycycsICdjb3JzJ10pXG5cbmNvbnN0IHJlcXVlc3RDcmVkZW50aWFscyA9IC8qKiBAdHlwZSB7Y29uc3R9ICovIChbJ29taXQnLCAnc2FtZS1vcmlnaW4nLCAnaW5jbHVkZSddKVxuXG5jb25zdCByZXF1ZXN0Q2FjaGUgPSAvKiogQHR5cGUge2NvbnN0fSAqLyAoW1xuICAnZGVmYXVsdCcsXG4gICduby1zdG9yZScsXG4gICdyZWxvYWQnLFxuICAnbm8tY2FjaGUnLFxuICAnZm9yY2UtY2FjaGUnLFxuICAnb25seS1pZi1jYWNoZWQnXG5dKVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI3JlcXVlc3QtYm9keS1oZWFkZXItbmFtZVxuICovXG5jb25zdCByZXF1ZXN0Qm9keUhlYWRlciA9IC8qKiBAdHlwZSB7Y29uc3R9ICovIChbXG4gICdjb250ZW50LWVuY29kaW5nJyxcbiAgJ2NvbnRlbnQtbGFuZ3VhZ2UnLFxuICAnY29udGVudC1sb2NhdGlvbicsXG4gICdjb250ZW50LXR5cGUnLFxuICAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy91bmRpY2kvaXNzdWVzLzIwMjFcbiAgLy8gJ0NvbnRlbnQtTGVuZ3RoJyBpcyBhIGZvcmJpZGRlbiBoZWFkZXIgbmFtZSwgd2hpY2ggaXMgdHlwaWNhbGx5XG4gIC8vIHJlbW92ZWQgaW4gdGhlIEhlYWRlcnMgaW1wbGVtZW50YXRpb24uIEhvd2V2ZXIsIHVuZGljaSBkb2Vzbid0XG4gIC8vIGZpbHRlciBvdXQgaGVhZGVycywgc28gd2UgYWRkIGl0IGhlcmUuXG4gICdjb250ZW50LWxlbmd0aCdcbl0pXG5cbi8qKlxuICogQHNlZSBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jZW51bWRlZi1yZXF1ZXN0ZHVwbGV4XG4gKi9cbmNvbnN0IHJlcXVlc3REdXBsZXggPSAvKiogQHR5cGUge2NvbnN0fSAqLyAoW1xuICAnaGFsZidcbl0pXG5cbi8qKlxuICogQHNlZSBodHRwOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNmb3JiaWRkZW4tbWV0aG9kXG4gKi9cbmNvbnN0IGZvcmJpZGRlbk1ldGhvZHMgPSAvKiogQHR5cGUge2NvbnN0fSAqLyAoWydDT05ORUNUJywgJ1RSQUNFJywgJ1RSQUNLJ10pXG5jb25zdCBmb3JiaWRkZW5NZXRob2RzU2V0ID0gbmV3IFNldChmb3JiaWRkZW5NZXRob2RzKVxuXG5jb25zdCBzdWJyZXNvdXJjZSA9IC8qKiBAdHlwZSB7Y29uc3R9ICovIChbXG4gICdhdWRpbycsXG4gICdhdWRpb3dvcmtsZXQnLFxuICAnZm9udCcsXG4gICdpbWFnZScsXG4gICdtYW5pZmVzdCcsXG4gICdwYWludHdvcmtsZXQnLFxuICAnc2NyaXB0JyxcbiAgJ3N0eWxlJyxcbiAgJ3RyYWNrJyxcbiAgJ3ZpZGVvJyxcbiAgJ3hzbHQnLFxuICAnJ1xuXSlcbmNvbnN0IHN1YnJlc291cmNlU2V0ID0gbmV3IFNldChzdWJyZXNvdXJjZSlcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIHN1YnJlc291cmNlLFxuICBmb3JiaWRkZW5NZXRob2RzLFxuICByZXF1ZXN0Qm9keUhlYWRlcixcbiAgcmVmZXJyZXJQb2xpY3ksXG4gIHJlcXVlc3RSZWRpcmVjdCxcbiAgcmVxdWVzdE1vZGUsXG4gIHJlcXVlc3RDcmVkZW50aWFscyxcbiAgcmVxdWVzdENhY2hlLFxuICByZWRpcmVjdFN0YXR1cyxcbiAgY29yc1NhZmVMaXN0ZWRNZXRob2RzLFxuICBudWxsQm9keVN0YXR1cyxcbiAgc2FmZU1ldGhvZHMsXG4gIGJhZFBvcnRzLFxuICByZXF1ZXN0RHVwbGV4LFxuICBzdWJyZXNvdXJjZVNldCxcbiAgYmFkUG9ydHNTZXQsXG4gIHJlZGlyZWN0U3RhdHVzU2V0LFxuICBjb3JzU2FmZUxpc3RlZE1ldGhvZHNTZXQsXG4gIHNhZmVNZXRob2RzU2V0LFxuICBmb3JiaWRkZW5NZXRob2RzU2V0LFxuICByZWZlcnJlclBvbGljeVNldFxufVxuIiwgIid1c2Ugc3RyaWN0J1xuXG4vLyBJbiBjYXNlIG9mIGJyZWFraW5nIGNoYW5nZXMsIGluY3JlYXNlIHRoZSB2ZXJzaW9uXG4vLyBudW1iZXIgdG8gYXZvaWQgY29uZmxpY3RzLlxuY29uc3QgZ2xvYmFsT3JpZ2luID0gU3ltYm9sLmZvcigndW5kaWNpLmdsb2JhbE9yaWdpbi4xJylcblxuZnVuY3Rpb24gZ2V0R2xvYmFsT3JpZ2luICgpIHtcbiAgcmV0dXJuIGdsb2JhbFRoaXNbZ2xvYmFsT3JpZ2luXVxufVxuXG5mdW5jdGlvbiBzZXRHbG9iYWxPcmlnaW4gKG5ld09yaWdpbikge1xuICBpZiAobmV3T3JpZ2luID09PSB1bmRlZmluZWQpIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZ2xvYmFsVGhpcywgZ2xvYmFsT3JpZ2luLCB7XG4gICAgICB2YWx1ZTogdW5kZWZpbmVkLFxuICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogZmFsc2VcbiAgICB9KVxuXG4gICAgcmV0dXJuXG4gIH1cblxuICBjb25zdCBwYXJzZWRVUkwgPSBuZXcgVVJMKG5ld09yaWdpbilcblxuICBpZiAocGFyc2VkVVJMLnByb3RvY29sICE9PSAnaHR0cDonICYmIHBhcnNlZFVSTC5wcm90b2NvbCAhPT0gJ2h0dHBzOicpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBPbmx5IGh0dHAgJiBodHRwcyB1cmxzIGFyZSBhbGxvd2VkLCByZWNlaXZlZCAke3BhcnNlZFVSTC5wcm90b2NvbH1gKVxuICB9XG5cbiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGdsb2JhbFRoaXMsIGdsb2JhbE9yaWdpbiwge1xuICAgIHZhbHVlOiBwYXJzZWRVUkwsXG4gICAgd3JpdGFibGU6IHRydWUsXG4gICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgY29uZmlndXJhYmxlOiBmYWxzZVxuICB9KVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgZ2V0R2xvYmFsT3JpZ2luLFxuICBzZXRHbG9iYWxPcmlnaW5cbn1cbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgYXNzZXJ0ID0gcmVxdWlyZSgnbm9kZTphc3NlcnQnKVxuXG5jb25zdCBlbmNvZGVyID0gbmV3IFRleHRFbmNvZGVyKClcblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vbWltZXNuaWZmLnNwZWMud2hhdHdnLm9yZy8jaHR0cC10b2tlbi1jb2RlLXBvaW50XG4gKi9cbmNvbnN0IEhUVFBfVE9LRU5fQ09ERVBPSU5UUyA9IC9eWyEjJCUmJyorXFwtLl5ffH5BLVphLXowLTldKyQvXG5jb25zdCBIVFRQX1dISVRFU1BBQ0VfUkVHRVggPSAvW1xcdTAwMEFcXHUwMDBEXFx1MDAwOVxcdTAwMjBdLyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lXG5jb25zdCBBU0NJSV9XSElURVNQQUNFX1JFUExBQ0VfUkVHRVggPSAvW1xcdTAwMDlcXHUwMDBBXFx1MDAwQ1xcdTAwMERcXHUwMDIwXS9nIC8vIGVzbGludC1kaXNhYmxlLWxpbmVcbi8qKlxuICogQHNlZSBodHRwczovL21pbWVzbmlmZi5zcGVjLndoYXR3Zy5vcmcvI2h0dHAtcXVvdGVkLXN0cmluZy10b2tlbi1jb2RlLXBvaW50XG4gKi9cbmNvbnN0IEhUVFBfUVVPVEVEX1NUUklOR19UT0tFTlMgPSAvXltcXHUwMDA5XFx1MDAyMC1cXHUwMDdFXFx1MDA4MC1cXHUwMEZGXSskLyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lXG5cbi8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNkYXRhLXVybC1wcm9jZXNzb3Jcbi8qKiBAcGFyYW0ge1VSTH0gZGF0YVVSTCAqL1xuZnVuY3Rpb24gZGF0YVVSTFByb2Nlc3NvciAoZGF0YVVSTCkge1xuICAvLyAxLiBBc3NlcnQ6IGRhdGFVUkxcdTIwMTlzIHNjaGVtZSBpcyBcImRhdGFcIi5cbiAgYXNzZXJ0KGRhdGFVUkwucHJvdG9jb2wgPT09ICdkYXRhOicpXG5cbiAgLy8gMi4gTGV0IGlucHV0IGJlIHRoZSByZXN1bHQgb2YgcnVubmluZyB0aGUgVVJMXG4gIC8vIHNlcmlhbGl6ZXIgb24gZGF0YVVSTCB3aXRoIGV4Y2x1ZGUgZnJhZ21lbnRcbiAgLy8gc2V0IHRvIHRydWUuXG4gIGxldCBpbnB1dCA9IFVSTFNlcmlhbGl6ZXIoZGF0YVVSTCwgdHJ1ZSlcblxuICAvLyAzLiBSZW1vdmUgdGhlIGxlYWRpbmcgXCJkYXRhOlwiIHN0cmluZyBmcm9tIGlucHV0LlxuICBpbnB1dCA9IGlucHV0LnNsaWNlKDUpXG5cbiAgLy8gNC4gTGV0IHBvc2l0aW9uIHBvaW50IGF0IHRoZSBzdGFydCBvZiBpbnB1dC5cbiAgY29uc3QgcG9zaXRpb24gPSB7IHBvc2l0aW9uOiAwIH1cblxuICAvLyA1LiBMZXQgbWltZVR5cGUgYmUgdGhlIHJlc3VsdCBvZiBjb2xsZWN0aW5nIGFcbiAgLy8gc2VxdWVuY2Ugb2YgY29kZSBwb2ludHMgdGhhdCBhcmUgbm90IGVxdWFsXG4gIC8vIHRvIFUrMDAyQyAoLCksIGdpdmVuIHBvc2l0aW9uLlxuICBsZXQgbWltZVR5cGUgPSBjb2xsZWN0QVNlcXVlbmNlT2ZDb2RlUG9pbnRzRmFzdChcbiAgICAnLCcsXG4gICAgaW5wdXQsXG4gICAgcG9zaXRpb25cbiAgKVxuXG4gIC8vIDYuIFN0cmlwIGxlYWRpbmcgYW5kIHRyYWlsaW5nIEFTQ0lJIHdoaXRlc3BhY2VcbiAgLy8gZnJvbSBtaW1lVHlwZS5cbiAgLy8gVW5kaWNpIGltcGxlbWVudGF0aW9uIG5vdGU6IHdlIG5lZWQgdG8gc3RvcmUgdGhlXG4gIC8vIGxlbmd0aCBiZWNhdXNlIGlmIHRoZSBtaW1ldHlwZSBoYXMgc3BhY2VzIHJlbW92ZWQsXG4gIC8vIHRoZSB3cm9uZyBhbW91bnQgd2lsbCBiZSBzbGljZWQgZnJvbSB0aGUgaW5wdXQgaW5cbiAgLy8gc3RlcCAjOVxuICBjb25zdCBtaW1lVHlwZUxlbmd0aCA9IG1pbWVUeXBlLmxlbmd0aFxuICBtaW1lVHlwZSA9IHJlbW92ZUFTQ0lJV2hpdGVzcGFjZShtaW1lVHlwZSwgdHJ1ZSwgdHJ1ZSlcblxuICAvLyA3LiBJZiBwb3NpdGlvbiBpcyBwYXN0IHRoZSBlbmQgb2YgaW5wdXQsIHRoZW5cbiAgLy8gcmV0dXJuIGZhaWx1cmVcbiAgaWYgKHBvc2l0aW9uLnBvc2l0aW9uID49IGlucHV0Lmxlbmd0aCkge1xuICAgIHJldHVybiAnZmFpbHVyZSdcbiAgfVxuXG4gIC8vIDguIEFkdmFuY2UgcG9zaXRpb24gYnkgMS5cbiAgcG9zaXRpb24ucG9zaXRpb24rK1xuXG4gIC8vIDkuIExldCBlbmNvZGVkQm9keSBiZSB0aGUgcmVtYWluZGVyIG9mIGlucHV0LlxuICBjb25zdCBlbmNvZGVkQm9keSA9IGlucHV0LnNsaWNlKG1pbWVUeXBlTGVuZ3RoICsgMSlcblxuICAvLyAxMC4gTGV0IGJvZHkgYmUgdGhlIHBlcmNlbnQtZGVjb2Rpbmcgb2YgZW5jb2RlZEJvZHkuXG4gIGxldCBib2R5ID0gc3RyaW5nUGVyY2VudERlY29kZShlbmNvZGVkQm9keSlcblxuICAvLyAxMS4gSWYgbWltZVR5cGUgZW5kcyB3aXRoIFUrMDAzQiAoOyksIGZvbGxvd2VkIGJ5XG4gIC8vIHplcm8gb3IgbW9yZSBVKzAwMjAgU1BBQ0UsIGZvbGxvd2VkIGJ5IGFuIEFTQ0lJXG4gIC8vIGNhc2UtaW5zZW5zaXRpdmUgbWF0Y2ggZm9yIFwiYmFzZTY0XCIsIHRoZW46XG4gIGlmICgvOyhcXHUwMDIwKXswLH1iYXNlNjQkL2kudGVzdChtaW1lVHlwZSkpIHtcbiAgICAvLyAxLiBMZXQgc3RyaW5nQm9keSBiZSB0aGUgaXNvbW9ycGhpYyBkZWNvZGUgb2YgYm9keS5cbiAgICBjb25zdCBzdHJpbmdCb2R5ID0gaXNvbW9ycGhpY0RlY29kZShib2R5KVxuXG4gICAgLy8gMi4gU2V0IGJvZHkgdG8gdGhlIGZvcmdpdmluZy1iYXNlNjQgZGVjb2RlIG9mXG4gICAgLy8gc3RyaW5nQm9keS5cbiAgICBib2R5ID0gZm9yZ2l2aW5nQmFzZTY0KHN0cmluZ0JvZHkpXG5cbiAgICAvLyAzLiBJZiBib2R5IGlzIGZhaWx1cmUsIHRoZW4gcmV0dXJuIGZhaWx1cmUuXG4gICAgaWYgKGJvZHkgPT09ICdmYWlsdXJlJykge1xuICAgICAgcmV0dXJuICdmYWlsdXJlJ1xuICAgIH1cblxuICAgIC8vIDQuIFJlbW92ZSB0aGUgbGFzdCA2IGNvZGUgcG9pbnRzIGZyb20gbWltZVR5cGUuXG4gICAgbWltZVR5cGUgPSBtaW1lVHlwZS5zbGljZSgwLCAtNilcblxuICAgIC8vIDUuIFJlbW92ZSB0cmFpbGluZyBVKzAwMjAgU1BBQ0UgY29kZSBwb2ludHMgZnJvbSBtaW1lVHlwZSxcbiAgICAvLyBpZiBhbnkuXG4gICAgbWltZVR5cGUgPSBtaW1lVHlwZS5yZXBsYWNlKC8oXFx1MDAyMCkrJC8sICcnKVxuXG4gICAgLy8gNi4gUmVtb3ZlIHRoZSBsYXN0IFUrMDAzQiAoOykgY29kZSBwb2ludCBmcm9tIG1pbWVUeXBlLlxuICAgIG1pbWVUeXBlID0gbWltZVR5cGUuc2xpY2UoMCwgLTEpXG4gIH1cblxuICAvLyAxMi4gSWYgbWltZVR5cGUgc3RhcnRzIHdpdGggVSswMDNCICg7KSwgdGhlbiBwcmVwZW5kXG4gIC8vIFwidGV4dC9wbGFpblwiIHRvIG1pbWVUeXBlLlxuICBpZiAobWltZVR5cGUuc3RhcnRzV2l0aCgnOycpKSB7XG4gICAgbWltZVR5cGUgPSAndGV4dC9wbGFpbicgKyBtaW1lVHlwZVxuICB9XG5cbiAgLy8gMTMuIExldCBtaW1lVHlwZVJlY29yZCBiZSB0aGUgcmVzdWx0IG9mIHBhcnNpbmdcbiAgLy8gbWltZVR5cGUuXG4gIGxldCBtaW1lVHlwZVJlY29yZCA9IHBhcnNlTUlNRVR5cGUobWltZVR5cGUpXG5cbiAgLy8gMTQuIElmIG1pbWVUeXBlUmVjb3JkIGlzIGZhaWx1cmUsIHRoZW4gc2V0XG4gIC8vIG1pbWVUeXBlUmVjb3JkIHRvIHRleHQvcGxhaW47Y2hhcnNldD1VUy1BU0NJSS5cbiAgaWYgKG1pbWVUeXBlUmVjb3JkID09PSAnZmFpbHVyZScpIHtcbiAgICBtaW1lVHlwZVJlY29yZCA9IHBhcnNlTUlNRVR5cGUoJ3RleHQvcGxhaW47Y2hhcnNldD1VUy1BU0NJSScpXG4gIH1cblxuICAvLyAxNS4gUmV0dXJuIGEgbmV3IGRhdGE6IFVSTCBzdHJ1Y3Qgd2hvc2UgTUlNRVxuICAvLyB0eXBlIGlzIG1pbWVUeXBlUmVjb3JkIGFuZCBib2R5IGlzIGJvZHkuXG4gIC8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNkYXRhLXVybC1zdHJ1Y3RcbiAgcmV0dXJuIHsgbWltZVR5cGU6IG1pbWVUeXBlUmVjb3JkLCBib2R5IH1cbn1cblxuLy8gaHR0cHM6Ly91cmwuc3BlYy53aGF0d2cub3JnLyNjb25jZXB0LXVybC1zZXJpYWxpemVyXG4vKipcbiAqIEBwYXJhbSB7VVJMfSB1cmxcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gZXhjbHVkZUZyYWdtZW50XG4gKi9cbmZ1bmN0aW9uIFVSTFNlcmlhbGl6ZXIgKHVybCwgZXhjbHVkZUZyYWdtZW50ID0gZmFsc2UpIHtcbiAgaWYgKCFleGNsdWRlRnJhZ21lbnQpIHtcbiAgICByZXR1cm4gdXJsLmhyZWZcbiAgfVxuXG4gIGNvbnN0IGhyZWYgPSB1cmwuaHJlZlxuICBjb25zdCBoYXNoTGVuZ3RoID0gdXJsLmhhc2gubGVuZ3RoXG5cbiAgY29uc3Qgc2VyaWFsaXplZCA9IGhhc2hMZW5ndGggPT09IDAgPyBocmVmIDogaHJlZi5zdWJzdHJpbmcoMCwgaHJlZi5sZW5ndGggLSBoYXNoTGVuZ3RoKVxuXG4gIGlmICghaGFzaExlbmd0aCAmJiBocmVmLmVuZHNXaXRoKCcjJykpIHtcbiAgICByZXR1cm4gc2VyaWFsaXplZC5zbGljZSgwLCAtMSlcbiAgfVxuXG4gIHJldHVybiBzZXJpYWxpemVkXG59XG5cbi8vIGh0dHBzOi8vaW5mcmEuc3BlYy53aGF0d2cub3JnLyNjb2xsZWN0LWEtc2VxdWVuY2Utb2YtY29kZS1wb2ludHNcbi8qKlxuICogQHBhcmFtIHsoY2hhcjogc3RyaW5nKSA9PiBib29sZWFufSBjb25kaXRpb25cbiAqIEBwYXJhbSB7c3RyaW5nfSBpbnB1dFxuICogQHBhcmFtIHt7IHBvc2l0aW9uOiBudW1iZXIgfX0gcG9zaXRpb25cbiAqL1xuZnVuY3Rpb24gY29sbGVjdEFTZXF1ZW5jZU9mQ29kZVBvaW50cyAoY29uZGl0aW9uLCBpbnB1dCwgcG9zaXRpb24pIHtcbiAgLy8gMS4gTGV0IHJlc3VsdCBiZSB0aGUgZW1wdHkgc3RyaW5nLlxuICBsZXQgcmVzdWx0ID0gJydcblxuICAvLyAyLiBXaGlsZSBwb3NpdGlvbiBkb2Vzblx1MjAxOXQgcG9pbnQgcGFzdCB0aGUgZW5kIG9mIGlucHV0IGFuZCB0aGVcbiAgLy8gY29kZSBwb2ludCBhdCBwb3NpdGlvbiB3aXRoaW4gaW5wdXQgbWVldHMgdGhlIGNvbmRpdGlvbiBjb25kaXRpb246XG4gIHdoaWxlIChwb3NpdGlvbi5wb3NpdGlvbiA8IGlucHV0Lmxlbmd0aCAmJiBjb25kaXRpb24oaW5wdXRbcG9zaXRpb24ucG9zaXRpb25dKSkge1xuICAgIC8vIDEuIEFwcGVuZCB0aGF0IGNvZGUgcG9pbnQgdG8gdGhlIGVuZCBvZiByZXN1bHQuXG4gICAgcmVzdWx0ICs9IGlucHV0W3Bvc2l0aW9uLnBvc2l0aW9uXVxuXG4gICAgLy8gMi4gQWR2YW5jZSBwb3NpdGlvbiBieSAxLlxuICAgIHBvc2l0aW9uLnBvc2l0aW9uKytcbiAgfVxuXG4gIC8vIDMuIFJldHVybiByZXN1bHQuXG4gIHJldHVybiByZXN1bHRcbn1cblxuLyoqXG4gKiBBIGZhc3RlciBjb2xsZWN0QVNlcXVlbmNlT2ZDb2RlUG9pbnRzIHRoYXQgb25seSB3b3JrcyB3aGVuIGNvbXBhcmluZyBhIHNpbmdsZSBjaGFyYWN0ZXIuXG4gKiBAcGFyYW0ge3N0cmluZ30gY2hhclxuICogQHBhcmFtIHtzdHJpbmd9IGlucHV0XG4gKiBAcGFyYW0ge3sgcG9zaXRpb246IG51bWJlciB9fSBwb3NpdGlvblxuICovXG5mdW5jdGlvbiBjb2xsZWN0QVNlcXVlbmNlT2ZDb2RlUG9pbnRzRmFzdCAoY2hhciwgaW5wdXQsIHBvc2l0aW9uKSB7XG4gIGNvbnN0IGlkeCA9IGlucHV0LmluZGV4T2YoY2hhciwgcG9zaXRpb24ucG9zaXRpb24pXG4gIGNvbnN0IHN0YXJ0ID0gcG9zaXRpb24ucG9zaXRpb25cblxuICBpZiAoaWR4ID09PSAtMSkge1xuICAgIHBvc2l0aW9uLnBvc2l0aW9uID0gaW5wdXQubGVuZ3RoXG4gICAgcmV0dXJuIGlucHV0LnNsaWNlKHN0YXJ0KVxuICB9XG5cbiAgcG9zaXRpb24ucG9zaXRpb24gPSBpZHhcbiAgcmV0dXJuIGlucHV0LnNsaWNlKHN0YXJ0LCBwb3NpdGlvbi5wb3NpdGlvbilcbn1cblxuLy8gaHR0cHM6Ly91cmwuc3BlYy53aGF0d2cub3JnLyNzdHJpbmctcGVyY2VudC1kZWNvZGVcbi8qKiBAcGFyYW0ge3N0cmluZ30gaW5wdXQgKi9cbmZ1bmN0aW9uIHN0cmluZ1BlcmNlbnREZWNvZGUgKGlucHV0KSB7XG4gIC8vIDEuIExldCBieXRlcyBiZSB0aGUgVVRGLTggZW5jb2Rpbmcgb2YgaW5wdXQuXG4gIGNvbnN0IGJ5dGVzID0gZW5jb2Rlci5lbmNvZGUoaW5wdXQpXG5cbiAgLy8gMi4gUmV0dXJuIHRoZSBwZXJjZW50LWRlY29kaW5nIG9mIGJ5dGVzLlxuICByZXR1cm4gcGVyY2VudERlY29kZShieXRlcylcbn1cblxuLyoqXG4gKiBAcGFyYW0ge251bWJlcn0gYnl0ZVxuICovXG5mdW5jdGlvbiBpc0hleENoYXJCeXRlIChieXRlKSB7XG4gIC8vIDAtOSBBLUYgYS1mXG4gIHJldHVybiAoYnl0ZSA+PSAweDMwICYmIGJ5dGUgPD0gMHgzOSkgfHwgKGJ5dGUgPj0gMHg0MSAmJiBieXRlIDw9IDB4NDYpIHx8IChieXRlID49IDB4NjEgJiYgYnl0ZSA8PSAweDY2KVxufVxuXG4vKipcbiAqIEBwYXJhbSB7bnVtYmVyfSBieXRlXG4gKi9cbmZ1bmN0aW9uIGhleEJ5dGVUb051bWJlciAoYnl0ZSkge1xuICByZXR1cm4gKFxuICAgIC8vIDAtOVxuICAgIGJ5dGUgPj0gMHgzMCAmJiBieXRlIDw9IDB4MzlcbiAgICAgID8gKGJ5dGUgLSA0OClcbiAgICAvLyBDb252ZXJ0IHRvIHVwcGVyY2FzZVxuICAgIC8vICgoYnl0ZSAmIDB4REYpIC0gNjUpICsgMTBcbiAgICAgIDogKChieXRlICYgMHhERikgLSA1NSlcbiAgKVxufVxuXG4vLyBodHRwczovL3VybC5zcGVjLndoYXR3Zy5vcmcvI3BlcmNlbnQtZGVjb2RlXG4vKiogQHBhcmFtIHtVaW50OEFycmF5fSBpbnB1dCAqL1xuZnVuY3Rpb24gcGVyY2VudERlY29kZSAoaW5wdXQpIHtcbiAgY29uc3QgbGVuZ3RoID0gaW5wdXQubGVuZ3RoXG4gIC8vIDEuIExldCBvdXRwdXQgYmUgYW4gZW1wdHkgYnl0ZSBzZXF1ZW5jZS5cbiAgLyoqIEB0eXBlIHtVaW50OEFycmF5fSAqL1xuICBjb25zdCBvdXRwdXQgPSBuZXcgVWludDhBcnJheShsZW5ndGgpXG4gIGxldCBqID0gMFxuICAvLyAyLiBGb3IgZWFjaCBieXRlIGJ5dGUgaW4gaW5wdXQ6XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHtcbiAgICBjb25zdCBieXRlID0gaW5wdXRbaV1cblxuICAgIC8vIDEuIElmIGJ5dGUgaXMgbm90IDB4MjUgKCUpLCB0aGVuIGFwcGVuZCBieXRlIHRvIG91dHB1dC5cbiAgICBpZiAoYnl0ZSAhPT0gMHgyNSkge1xuICAgICAgb3V0cHV0W2orK10gPSBieXRlXG5cbiAgICAvLyAyLiBPdGhlcndpc2UsIGlmIGJ5dGUgaXMgMHgyNSAoJSkgYW5kIHRoZSBuZXh0IHR3byBieXRlc1xuICAgIC8vIGFmdGVyIGJ5dGUgaW4gaW5wdXQgYXJlIG5vdCBpbiB0aGUgcmFuZ2VzXG4gICAgLy8gMHgzMCAoMCkgdG8gMHgzOSAoOSksIDB4NDEgKEEpIHRvIDB4NDYgKEYpLFxuICAgIC8vIGFuZCAweDYxIChhKSB0byAweDY2IChmKSwgYWxsIGluY2x1c2l2ZSwgYXBwZW5kIGJ5dGVcbiAgICAvLyB0byBvdXRwdXQuXG4gICAgfSBlbHNlIGlmIChcbiAgICAgIGJ5dGUgPT09IDB4MjUgJiZcbiAgICAgICEoaXNIZXhDaGFyQnl0ZShpbnB1dFtpICsgMV0pICYmIGlzSGV4Q2hhckJ5dGUoaW5wdXRbaSArIDJdKSlcbiAgICApIHtcbiAgICAgIG91dHB1dFtqKytdID0gMHgyNVxuXG4gICAgLy8gMy4gT3RoZXJ3aXNlOlxuICAgIH0gZWxzZSB7XG4gICAgICAvLyAxLiBMZXQgYnl0ZVBvaW50IGJlIHRoZSB0d28gYnl0ZXMgYWZ0ZXIgYnl0ZSBpbiBpbnB1dCxcbiAgICAgIC8vIGRlY29kZWQsIGFuZCB0aGVuIGludGVycHJldGVkIGFzIGhleGFkZWNpbWFsIG51bWJlci5cbiAgICAgIC8vIDIuIEFwcGVuZCBhIGJ5dGUgd2hvc2UgdmFsdWUgaXMgYnl0ZVBvaW50IHRvIG91dHB1dC5cbiAgICAgIG91dHB1dFtqKytdID0gKGhleEJ5dGVUb051bWJlcihpbnB1dFtpICsgMV0pIDw8IDQpIHwgaGV4Qnl0ZVRvTnVtYmVyKGlucHV0W2kgKyAyXSlcblxuICAgICAgLy8gMy4gU2tpcCB0aGUgbmV4dCB0d28gYnl0ZXMgaW4gaW5wdXQuXG4gICAgICBpICs9IDJcbiAgICB9XG4gIH1cblxuICAvLyAzLiBSZXR1cm4gb3V0cHV0LlxuICByZXR1cm4gbGVuZ3RoID09PSBqID8gb3V0cHV0IDogb3V0cHV0LnN1YmFycmF5KDAsIGopXG59XG5cbi8vIGh0dHBzOi8vbWltZXNuaWZmLnNwZWMud2hhdHdnLm9yZy8jcGFyc2UtYS1taW1lLXR5cGVcbi8qKiBAcGFyYW0ge3N0cmluZ30gaW5wdXQgKi9cbmZ1bmN0aW9uIHBhcnNlTUlNRVR5cGUgKGlucHV0KSB7XG4gIC8vIDEuIFJlbW92ZSBhbnkgbGVhZGluZyBhbmQgdHJhaWxpbmcgSFRUUCB3aGl0ZXNwYWNlXG4gIC8vIGZyb20gaW5wdXQuXG4gIGlucHV0ID0gcmVtb3ZlSFRUUFdoaXRlc3BhY2UoaW5wdXQsIHRydWUsIHRydWUpXG5cbiAgLy8gMi4gTGV0IHBvc2l0aW9uIGJlIGEgcG9zaXRpb24gdmFyaWFibGUgZm9yIGlucHV0LFxuICAvLyBpbml0aWFsbHkgcG9pbnRpbmcgYXQgdGhlIHN0YXJ0IG9mIGlucHV0LlxuICBjb25zdCBwb3NpdGlvbiA9IHsgcG9zaXRpb246IDAgfVxuXG4gIC8vIDMuIExldCB0eXBlIGJlIHRoZSByZXN1bHQgb2YgY29sbGVjdGluZyBhIHNlcXVlbmNlXG4gIC8vIG9mIGNvZGUgcG9pbnRzIHRoYXQgYXJlIG5vdCBVKzAwMkYgKC8pIGZyb21cbiAgLy8gaW5wdXQsIGdpdmVuIHBvc2l0aW9uLlxuICBjb25zdCB0eXBlID0gY29sbGVjdEFTZXF1ZW5jZU9mQ29kZVBvaW50c0Zhc3QoXG4gICAgJy8nLFxuICAgIGlucHV0LFxuICAgIHBvc2l0aW9uXG4gIClcblxuICAvLyA0LiBJZiB0eXBlIGlzIHRoZSBlbXB0eSBzdHJpbmcgb3IgZG9lcyBub3Qgc29sZWx5XG4gIC8vIGNvbnRhaW4gSFRUUCB0b2tlbiBjb2RlIHBvaW50cywgdGhlbiByZXR1cm4gZmFpbHVyZS5cbiAgLy8gaHR0cHM6Ly9taW1lc25pZmYuc3BlYy53aGF0d2cub3JnLyNodHRwLXRva2VuLWNvZGUtcG9pbnRcbiAgaWYgKHR5cGUubGVuZ3RoID09PSAwIHx8ICFIVFRQX1RPS0VOX0NPREVQT0lOVFMudGVzdCh0eXBlKSkge1xuICAgIHJldHVybiAnZmFpbHVyZSdcbiAgfVxuXG4gIC8vIDUuIElmIHBvc2l0aW9uIGlzIHBhc3QgdGhlIGVuZCBvZiBpbnB1dCwgdGhlbiByZXR1cm5cbiAgLy8gZmFpbHVyZVxuICBpZiAocG9zaXRpb24ucG9zaXRpb24gPiBpbnB1dC5sZW5ndGgpIHtcbiAgICByZXR1cm4gJ2ZhaWx1cmUnXG4gIH1cblxuICAvLyA2LiBBZHZhbmNlIHBvc2l0aW9uIGJ5IDEuIChUaGlzIHNraXBzIHBhc3QgVSswMDJGICgvKS4pXG4gIHBvc2l0aW9uLnBvc2l0aW9uKytcblxuICAvLyA3LiBMZXQgc3VidHlwZSBiZSB0aGUgcmVzdWx0IG9mIGNvbGxlY3RpbmcgYSBzZXF1ZW5jZSBvZlxuICAvLyBjb2RlIHBvaW50cyB0aGF0IGFyZSBub3QgVSswMDNCICg7KSBmcm9tIGlucHV0LCBnaXZlblxuICAvLyBwb3NpdGlvbi5cbiAgbGV0IHN1YnR5cGUgPSBjb2xsZWN0QVNlcXVlbmNlT2ZDb2RlUG9pbnRzRmFzdChcbiAgICAnOycsXG4gICAgaW5wdXQsXG4gICAgcG9zaXRpb25cbiAgKVxuXG4gIC8vIDguIFJlbW92ZSBhbnkgdHJhaWxpbmcgSFRUUCB3aGl0ZXNwYWNlIGZyb20gc3VidHlwZS5cbiAgc3VidHlwZSA9IHJlbW92ZUhUVFBXaGl0ZXNwYWNlKHN1YnR5cGUsIGZhbHNlLCB0cnVlKVxuXG4gIC8vIDkuIElmIHN1YnR5cGUgaXMgdGhlIGVtcHR5IHN0cmluZyBvciBkb2VzIG5vdCBzb2xlbHlcbiAgLy8gY29udGFpbiBIVFRQIHRva2VuIGNvZGUgcG9pbnRzLCB0aGVuIHJldHVybiBmYWlsdXJlLlxuICBpZiAoc3VidHlwZS5sZW5ndGggPT09IDAgfHwgIUhUVFBfVE9LRU5fQ09ERVBPSU5UUy50ZXN0KHN1YnR5cGUpKSB7XG4gICAgcmV0dXJuICdmYWlsdXJlJ1xuICB9XG5cbiAgY29uc3QgdHlwZUxvd2VyY2FzZSA9IHR5cGUudG9Mb3dlckNhc2UoKVxuICBjb25zdCBzdWJ0eXBlTG93ZXJjYXNlID0gc3VidHlwZS50b0xvd2VyQ2FzZSgpXG5cbiAgLy8gMTAuIExldCBtaW1lVHlwZSBiZSBhIG5ldyBNSU1FIHR5cGUgcmVjb3JkIHdob3NlIHR5cGVcbiAgLy8gaXMgdHlwZSwgaW4gQVNDSUkgbG93ZXJjYXNlLCBhbmQgc3VidHlwZSBpcyBzdWJ0eXBlLFxuICAvLyBpbiBBU0NJSSBsb3dlcmNhc2UuXG4gIC8vIGh0dHBzOi8vbWltZXNuaWZmLnNwZWMud2hhdHdnLm9yZy8jbWltZS10eXBlXG4gIGNvbnN0IG1pbWVUeXBlID0ge1xuICAgIHR5cGU6IHR5cGVMb3dlcmNhc2UsXG4gICAgc3VidHlwZTogc3VidHlwZUxvd2VyY2FzZSxcbiAgICAvKiogQHR5cGUge01hcDxzdHJpbmcsIHN0cmluZz59ICovXG4gICAgcGFyYW1ldGVyczogbmV3IE1hcCgpLFxuICAgIC8vIGh0dHBzOi8vbWltZXNuaWZmLnNwZWMud2hhdHdnLm9yZy8jbWltZS10eXBlLWVzc2VuY2VcbiAgICBlc3NlbmNlOiBgJHt0eXBlTG93ZXJjYXNlfS8ke3N1YnR5cGVMb3dlcmNhc2V9YFxuICB9XG5cbiAgLy8gMTEuIFdoaWxlIHBvc2l0aW9uIGlzIG5vdCBwYXN0IHRoZSBlbmQgb2YgaW5wdXQ6XG4gIHdoaWxlIChwb3NpdGlvbi5wb3NpdGlvbiA8IGlucHV0Lmxlbmd0aCkge1xuICAgIC8vIDEuIEFkdmFuY2UgcG9zaXRpb24gYnkgMS4gKFRoaXMgc2tpcHMgcGFzdCBVKzAwM0IgKDspLilcbiAgICBwb3NpdGlvbi5wb3NpdGlvbisrXG5cbiAgICAvLyAyLiBDb2xsZWN0IGEgc2VxdWVuY2Ugb2YgY29kZSBwb2ludHMgdGhhdCBhcmUgSFRUUFxuICAgIC8vIHdoaXRlc3BhY2UgZnJvbSBpbnB1dCBnaXZlbiBwb3NpdGlvbi5cbiAgICBjb2xsZWN0QVNlcXVlbmNlT2ZDb2RlUG9pbnRzKFxuICAgICAgLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2h0dHAtd2hpdGVzcGFjZVxuICAgICAgY2hhciA9PiBIVFRQX1dISVRFU1BBQ0VfUkVHRVgudGVzdChjaGFyKSxcbiAgICAgIGlucHV0LFxuICAgICAgcG9zaXRpb25cbiAgICApXG5cbiAgICAvLyAzLiBMZXQgcGFyYW1ldGVyTmFtZSBiZSB0aGUgcmVzdWx0IG9mIGNvbGxlY3RpbmcgYVxuICAgIC8vIHNlcXVlbmNlIG9mIGNvZGUgcG9pbnRzIHRoYXQgYXJlIG5vdCBVKzAwM0IgKDspXG4gICAgLy8gb3IgVSswMDNEICg9KSBmcm9tIGlucHV0LCBnaXZlbiBwb3NpdGlvbi5cbiAgICBsZXQgcGFyYW1ldGVyTmFtZSA9IGNvbGxlY3RBU2VxdWVuY2VPZkNvZGVQb2ludHMoXG4gICAgICAoY2hhcikgPT4gY2hhciAhPT0gJzsnICYmIGNoYXIgIT09ICc9JyxcbiAgICAgIGlucHV0LFxuICAgICAgcG9zaXRpb25cbiAgICApXG5cbiAgICAvLyA0LiBTZXQgcGFyYW1ldGVyTmFtZSB0byBwYXJhbWV0ZXJOYW1lLCBpbiBBU0NJSVxuICAgIC8vIGxvd2VyY2FzZS5cbiAgICBwYXJhbWV0ZXJOYW1lID0gcGFyYW1ldGVyTmFtZS50b0xvd2VyQ2FzZSgpXG5cbiAgICAvLyA1LiBJZiBwb3NpdGlvbiBpcyBub3QgcGFzdCB0aGUgZW5kIG9mIGlucHV0LCB0aGVuOlxuICAgIGlmIChwb3NpdGlvbi5wb3NpdGlvbiA8IGlucHV0Lmxlbmd0aCkge1xuICAgICAgLy8gMS4gSWYgdGhlIGNvZGUgcG9pbnQgYXQgcG9zaXRpb24gd2l0aGluIGlucHV0IGlzXG4gICAgICAvLyBVKzAwM0IgKDspLCB0aGVuIGNvbnRpbnVlLlxuICAgICAgaWYgKGlucHV0W3Bvc2l0aW9uLnBvc2l0aW9uXSA9PT0gJzsnKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG5cbiAgICAgIC8vIDIuIEFkdmFuY2UgcG9zaXRpb24gYnkgMS4gKFRoaXMgc2tpcHMgcGFzdCBVKzAwM0QgKD0pLilcbiAgICAgIHBvc2l0aW9uLnBvc2l0aW9uKytcbiAgICB9XG5cbiAgICAvLyA2LiBJZiBwb3NpdGlvbiBpcyBwYXN0IHRoZSBlbmQgb2YgaW5wdXQsIHRoZW4gYnJlYWsuXG4gICAgaWYgKHBvc2l0aW9uLnBvc2l0aW9uID4gaW5wdXQubGVuZ3RoKSB7XG4gICAgICBicmVha1xuICAgIH1cblxuICAgIC8vIDcuIExldCBwYXJhbWV0ZXJWYWx1ZSBiZSBudWxsLlxuICAgIGxldCBwYXJhbWV0ZXJWYWx1ZSA9IG51bGxcblxuICAgIC8vIDguIElmIHRoZSBjb2RlIHBvaW50IGF0IHBvc2l0aW9uIHdpdGhpbiBpbnB1dCBpc1xuICAgIC8vIFUrMDAyMiAoXCIpLCB0aGVuOlxuICAgIGlmIChpbnB1dFtwb3NpdGlvbi5wb3NpdGlvbl0gPT09ICdcIicpIHtcbiAgICAgIC8vIDEuIFNldCBwYXJhbWV0ZXJWYWx1ZSB0byB0aGUgcmVzdWx0IG9mIGNvbGxlY3RpbmdcbiAgICAgIC8vIGFuIEhUVFAgcXVvdGVkIHN0cmluZyBmcm9tIGlucHV0LCBnaXZlbiBwb3NpdGlvblxuICAgICAgLy8gYW5kIHRoZSBleHRyYWN0LXZhbHVlIGZsYWcuXG4gICAgICBwYXJhbWV0ZXJWYWx1ZSA9IGNvbGxlY3RBbkhUVFBRdW90ZWRTdHJpbmcoaW5wdXQsIHBvc2l0aW9uLCB0cnVlKVxuXG4gICAgICAvLyAyLiBDb2xsZWN0IGEgc2VxdWVuY2Ugb2YgY29kZSBwb2ludHMgdGhhdCBhcmUgbm90XG4gICAgICAvLyBVKzAwM0IgKDspIGZyb20gaW5wdXQsIGdpdmVuIHBvc2l0aW9uLlxuICAgICAgY29sbGVjdEFTZXF1ZW5jZU9mQ29kZVBvaW50c0Zhc3QoXG4gICAgICAgICc7JyxcbiAgICAgICAgaW5wdXQsXG4gICAgICAgIHBvc2l0aW9uXG4gICAgICApXG5cbiAgICAvLyA5LiBPdGhlcndpc2U6XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIDEuIFNldCBwYXJhbWV0ZXJWYWx1ZSB0byB0aGUgcmVzdWx0IG9mIGNvbGxlY3RpbmdcbiAgICAgIC8vIGEgc2VxdWVuY2Ugb2YgY29kZSBwb2ludHMgdGhhdCBhcmUgbm90IFUrMDAzQiAoOylcbiAgICAgIC8vIGZyb20gaW5wdXQsIGdpdmVuIHBvc2l0aW9uLlxuICAgICAgcGFyYW1ldGVyVmFsdWUgPSBjb2xsZWN0QVNlcXVlbmNlT2ZDb2RlUG9pbnRzRmFzdChcbiAgICAgICAgJzsnLFxuICAgICAgICBpbnB1dCxcbiAgICAgICAgcG9zaXRpb25cbiAgICAgIClcblxuICAgICAgLy8gMi4gUmVtb3ZlIGFueSB0cmFpbGluZyBIVFRQIHdoaXRlc3BhY2UgZnJvbSBwYXJhbWV0ZXJWYWx1ZS5cbiAgICAgIHBhcmFtZXRlclZhbHVlID0gcmVtb3ZlSFRUUFdoaXRlc3BhY2UocGFyYW1ldGVyVmFsdWUsIGZhbHNlLCB0cnVlKVxuXG4gICAgICAvLyAzLiBJZiBwYXJhbWV0ZXJWYWx1ZSBpcyB0aGUgZW1wdHkgc3RyaW5nLCB0aGVuIGNvbnRpbnVlLlxuICAgICAgaWYgKHBhcmFtZXRlclZhbHVlLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIDEwLiBJZiBhbGwgb2YgdGhlIGZvbGxvd2luZyBhcmUgdHJ1ZVxuICAgIC8vIC0gcGFyYW1ldGVyTmFtZSBpcyBub3QgdGhlIGVtcHR5IHN0cmluZ1xuICAgIC8vIC0gcGFyYW1ldGVyTmFtZSBzb2xlbHkgY29udGFpbnMgSFRUUCB0b2tlbiBjb2RlIHBvaW50c1xuICAgIC8vIC0gcGFyYW1ldGVyVmFsdWUgc29sZWx5IGNvbnRhaW5zIEhUVFAgcXVvdGVkLXN0cmluZyB0b2tlbiBjb2RlIHBvaW50c1xuICAgIC8vIC0gbWltZVR5cGVcdTIwMTlzIHBhcmFtZXRlcnNbcGFyYW1ldGVyTmFtZV0gZG9lcyBub3QgZXhpc3RcbiAgICAvLyB0aGVuIHNldCBtaW1lVHlwZVx1MjAxOXMgcGFyYW1ldGVyc1twYXJhbWV0ZXJOYW1lXSB0byBwYXJhbWV0ZXJWYWx1ZS5cbiAgICBpZiAoXG4gICAgICBwYXJhbWV0ZXJOYW1lLmxlbmd0aCAhPT0gMCAmJlxuICAgICAgSFRUUF9UT0tFTl9DT0RFUE9JTlRTLnRlc3QocGFyYW1ldGVyTmFtZSkgJiZcbiAgICAgIChwYXJhbWV0ZXJWYWx1ZS5sZW5ndGggPT09IDAgfHwgSFRUUF9RVU9URURfU1RSSU5HX1RPS0VOUy50ZXN0KHBhcmFtZXRlclZhbHVlKSkgJiZcbiAgICAgICFtaW1lVHlwZS5wYXJhbWV0ZXJzLmhhcyhwYXJhbWV0ZXJOYW1lKVxuICAgICkge1xuICAgICAgbWltZVR5cGUucGFyYW1ldGVycy5zZXQocGFyYW1ldGVyTmFtZSwgcGFyYW1ldGVyVmFsdWUpXG4gICAgfVxuICB9XG5cbiAgLy8gMTIuIFJldHVybiBtaW1lVHlwZS5cbiAgcmV0dXJuIG1pbWVUeXBlXG59XG5cbi8vIGh0dHBzOi8vaW5mcmEuc3BlYy53aGF0d2cub3JnLyNmb3JnaXZpbmctYmFzZTY0LWRlY29kZVxuLyoqIEBwYXJhbSB7c3RyaW5nfSBkYXRhICovXG5mdW5jdGlvbiBmb3JnaXZpbmdCYXNlNjQgKGRhdGEpIHtcbiAgLy8gMS4gUmVtb3ZlIGFsbCBBU0NJSSB3aGl0ZXNwYWNlIGZyb20gZGF0YS5cbiAgZGF0YSA9IGRhdGEucmVwbGFjZShBU0NJSV9XSElURVNQQUNFX1JFUExBQ0VfUkVHRVgsICcnKSAgLy8gZXNsaW50LWRpc2FibGUtbGluZVxuXG4gIGxldCBkYXRhTGVuZ3RoID0gZGF0YS5sZW5ndGhcbiAgLy8gMi4gSWYgZGF0YVx1MjAxOXMgY29kZSBwb2ludCBsZW5ndGggZGl2aWRlcyBieSA0IGxlYXZpbmdcbiAgLy8gbm8gcmVtYWluZGVyLCB0aGVuOlxuICBpZiAoZGF0YUxlbmd0aCAlIDQgPT09IDApIHtcbiAgICAvLyAxLiBJZiBkYXRhIGVuZHMgd2l0aCBvbmUgb3IgdHdvIFUrMDAzRCAoPSkgY29kZSBwb2ludHMsXG4gICAgLy8gdGhlbiByZW1vdmUgdGhlbSBmcm9tIGRhdGEuXG4gICAgaWYgKGRhdGEuY2hhckNvZGVBdChkYXRhTGVuZ3RoIC0gMSkgPT09IDB4MDAzRCkge1xuICAgICAgLS1kYXRhTGVuZ3RoXG4gICAgICBpZiAoZGF0YS5jaGFyQ29kZUF0KGRhdGFMZW5ndGggLSAxKSA9PT0gMHgwMDNEKSB7XG4gICAgICAgIC0tZGF0YUxlbmd0aFxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIDMuIElmIGRhdGFcdTIwMTlzIGNvZGUgcG9pbnQgbGVuZ3RoIGRpdmlkZXMgYnkgNCBsZWF2aW5nXG4gIC8vIGEgcmVtYWluZGVyIG9mIDEsIHRoZW4gcmV0dXJuIGZhaWx1cmUuXG4gIGlmIChkYXRhTGVuZ3RoICUgNCA9PT0gMSkge1xuICAgIHJldHVybiAnZmFpbHVyZSdcbiAgfVxuXG4gIC8vIDQuIElmIGRhdGEgY29udGFpbnMgYSBjb2RlIHBvaW50IHRoYXQgaXMgbm90IG9uZSBvZlxuICAvLyAgVSswMDJCICgrKVxuICAvLyAgVSswMDJGICgvKVxuICAvLyAgQVNDSUkgYWxwaGFudW1lcmljXG4gIC8vIHRoZW4gcmV0dXJuIGZhaWx1cmUuXG4gIGlmICgvW14rLzAtOUEtWmEtel0vLnRlc3QoZGF0YS5sZW5ndGggPT09IGRhdGFMZW5ndGggPyBkYXRhIDogZGF0YS5zdWJzdHJpbmcoMCwgZGF0YUxlbmd0aCkpKSB7XG4gICAgcmV0dXJuICdmYWlsdXJlJ1xuICB9XG5cbiAgY29uc3QgYnVmZmVyID0gQnVmZmVyLmZyb20oZGF0YSwgJ2Jhc2U2NCcpXG4gIHJldHVybiBuZXcgVWludDhBcnJheShidWZmZXIuYnVmZmVyLCBidWZmZXIuYnl0ZU9mZnNldCwgYnVmZmVyLmJ5dGVMZW5ndGgpXG59XG5cbi8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNjb2xsZWN0LWFuLWh0dHAtcXVvdGVkLXN0cmluZ1xuLy8gdGVzdHM6IGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNleGFtcGxlLWh0dHAtcXVvdGVkLXN0cmluZ1xuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gaW5wdXRcbiAqIEBwYXJhbSB7eyBwb3NpdGlvbjogbnVtYmVyIH19IHBvc2l0aW9uXG4gKiBAcGFyYW0ge2Jvb2xlYW4/fSBleHRyYWN0VmFsdWVcbiAqL1xuZnVuY3Rpb24gY29sbGVjdEFuSFRUUFF1b3RlZFN0cmluZyAoaW5wdXQsIHBvc2l0aW9uLCBleHRyYWN0VmFsdWUpIHtcbiAgLy8gMS4gTGV0IHBvc2l0aW9uU3RhcnQgYmUgcG9zaXRpb24uXG4gIGNvbnN0IHBvc2l0aW9uU3RhcnQgPSBwb3NpdGlvbi5wb3NpdGlvblxuXG4gIC8vIDIuIExldCB2YWx1ZSBiZSB0aGUgZW1wdHkgc3RyaW5nLlxuICBsZXQgdmFsdWUgPSAnJ1xuXG4gIC8vIDMuIEFzc2VydDogdGhlIGNvZGUgcG9pbnQgYXQgcG9zaXRpb24gd2l0aGluIGlucHV0XG4gIC8vIGlzIFUrMDAyMiAoXCIpLlxuICBhc3NlcnQoaW5wdXRbcG9zaXRpb24ucG9zaXRpb25dID09PSAnXCInKVxuXG4gIC8vIDQuIEFkdmFuY2UgcG9zaXRpb24gYnkgMS5cbiAgcG9zaXRpb24ucG9zaXRpb24rK1xuXG4gIC8vIDUuIFdoaWxlIHRydWU6XG4gIHdoaWxlICh0cnVlKSB7XG4gICAgLy8gMS4gQXBwZW5kIHRoZSByZXN1bHQgb2YgY29sbGVjdGluZyBhIHNlcXVlbmNlIG9mIGNvZGUgcG9pbnRzXG4gICAgLy8gdGhhdCBhcmUgbm90IFUrMDAyMiAoXCIpIG9yIFUrMDA1QyAoXFwpIGZyb20gaW5wdXQsIGdpdmVuXG4gICAgLy8gcG9zaXRpb24sIHRvIHZhbHVlLlxuICAgIHZhbHVlICs9IGNvbGxlY3RBU2VxdWVuY2VPZkNvZGVQb2ludHMoXG4gICAgICAoY2hhcikgPT4gY2hhciAhPT0gJ1wiJyAmJiBjaGFyICE9PSAnXFxcXCcsXG4gICAgICBpbnB1dCxcbiAgICAgIHBvc2l0aW9uXG4gICAgKVxuXG4gICAgLy8gMi4gSWYgcG9zaXRpb24gaXMgcGFzdCB0aGUgZW5kIG9mIGlucHV0LCB0aGVuIGJyZWFrLlxuICAgIGlmIChwb3NpdGlvbi5wb3NpdGlvbiA+PSBpbnB1dC5sZW5ndGgpIHtcbiAgICAgIGJyZWFrXG4gICAgfVxuXG4gICAgLy8gMy4gTGV0IHF1b3RlT3JCYWNrc2xhc2ggYmUgdGhlIGNvZGUgcG9pbnQgYXQgcG9zaXRpb24gd2l0aGluXG4gICAgLy8gaW5wdXQuXG4gICAgY29uc3QgcXVvdGVPckJhY2tzbGFzaCA9IGlucHV0W3Bvc2l0aW9uLnBvc2l0aW9uXVxuXG4gICAgLy8gNC4gQWR2YW5jZSBwb3NpdGlvbiBieSAxLlxuICAgIHBvc2l0aW9uLnBvc2l0aW9uKytcblxuICAgIC8vIDUuIElmIHF1b3RlT3JCYWNrc2xhc2ggaXMgVSswMDVDIChcXCksIHRoZW46XG4gICAgaWYgKHF1b3RlT3JCYWNrc2xhc2ggPT09ICdcXFxcJykge1xuICAgICAgLy8gMS4gSWYgcG9zaXRpb24gaXMgcGFzdCB0aGUgZW5kIG9mIGlucHV0LCB0aGVuIGFwcGVuZFxuICAgICAgLy8gVSswMDVDIChcXCkgdG8gdmFsdWUgYW5kIGJyZWFrLlxuICAgICAgaWYgKHBvc2l0aW9uLnBvc2l0aW9uID49IGlucHV0Lmxlbmd0aCkge1xuICAgICAgICB2YWx1ZSArPSAnXFxcXCdcbiAgICAgICAgYnJlYWtcbiAgICAgIH1cblxuICAgICAgLy8gMi4gQXBwZW5kIHRoZSBjb2RlIHBvaW50IGF0IHBvc2l0aW9uIHdpdGhpbiBpbnB1dCB0byB2YWx1ZS5cbiAgICAgIHZhbHVlICs9IGlucHV0W3Bvc2l0aW9uLnBvc2l0aW9uXVxuXG4gICAgICAvLyAzLiBBZHZhbmNlIHBvc2l0aW9uIGJ5IDEuXG4gICAgICBwb3NpdGlvbi5wb3NpdGlvbisrXG5cbiAgICAvLyA2LiBPdGhlcndpc2U6XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIDEuIEFzc2VydDogcXVvdGVPckJhY2tzbGFzaCBpcyBVKzAwMjIgKFwiKS5cbiAgICAgIGFzc2VydChxdW90ZU9yQmFja3NsYXNoID09PSAnXCInKVxuXG4gICAgICAvLyAyLiBCcmVhay5cbiAgICAgIGJyZWFrXG4gICAgfVxuICB9XG5cbiAgLy8gNi4gSWYgdGhlIGV4dHJhY3QtdmFsdWUgZmxhZyBpcyBzZXQsIHRoZW4gcmV0dXJuIHZhbHVlLlxuICBpZiAoZXh0cmFjdFZhbHVlKSB7XG4gICAgcmV0dXJuIHZhbHVlXG4gIH1cblxuICAvLyA3LiBSZXR1cm4gdGhlIGNvZGUgcG9pbnRzIGZyb20gcG9zaXRpb25TdGFydCB0byBwb3NpdGlvbixcbiAgLy8gaW5jbHVzaXZlLCB3aXRoaW4gaW5wdXQuXG4gIHJldHVybiBpbnB1dC5zbGljZShwb3NpdGlvblN0YXJ0LCBwb3NpdGlvbi5wb3NpdGlvbilcbn1cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vbWltZXNuaWZmLnNwZWMud2hhdHdnLm9yZy8jc2VyaWFsaXplLWEtbWltZS10eXBlXG4gKi9cbmZ1bmN0aW9uIHNlcmlhbGl6ZUFNaW1lVHlwZSAobWltZVR5cGUpIHtcbiAgYXNzZXJ0KG1pbWVUeXBlICE9PSAnZmFpbHVyZScpXG4gIGNvbnN0IHsgcGFyYW1ldGVycywgZXNzZW5jZSB9ID0gbWltZVR5cGVcblxuICAvLyAxLiBMZXQgc2VyaWFsaXphdGlvbiBiZSB0aGUgY29uY2F0ZW5hdGlvbiBvZiBtaW1lVHlwZVx1MjAxOXNcbiAgLy8gICAgdHlwZSwgVSswMDJGICgvKSwgYW5kIG1pbWVUeXBlXHUyMDE5cyBzdWJ0eXBlLlxuICBsZXQgc2VyaWFsaXphdGlvbiA9IGVzc2VuY2VcblxuICAvLyAyLiBGb3IgZWFjaCBuYW1lIFx1MjE5MiB2YWx1ZSBvZiBtaW1lVHlwZVx1MjAxOXMgcGFyYW1ldGVyczpcbiAgZm9yIChsZXQgW25hbWUsIHZhbHVlXSBvZiBwYXJhbWV0ZXJzLmVudHJpZXMoKSkge1xuICAgIC8vIDEuIEFwcGVuZCBVKzAwM0IgKDspIHRvIHNlcmlhbGl6YXRpb24uXG4gICAgc2VyaWFsaXphdGlvbiArPSAnOydcblxuICAgIC8vIDIuIEFwcGVuZCBuYW1lIHRvIHNlcmlhbGl6YXRpb24uXG4gICAgc2VyaWFsaXphdGlvbiArPSBuYW1lXG5cbiAgICAvLyAzLiBBcHBlbmQgVSswMDNEICg9KSB0byBzZXJpYWxpemF0aW9uLlxuICAgIHNlcmlhbGl6YXRpb24gKz0gJz0nXG5cbiAgICAvLyA0LiBJZiB2YWx1ZSBkb2VzIG5vdCBzb2xlbHkgY29udGFpbiBIVFRQIHRva2VuIGNvZGVcbiAgICAvLyAgICBwb2ludHMgb3IgdmFsdWUgaXMgdGhlIGVtcHR5IHN0cmluZywgdGhlbjpcbiAgICBpZiAoIUhUVFBfVE9LRU5fQ09ERVBPSU5UUy50ZXN0KHZhbHVlKSkge1xuICAgICAgLy8gMS4gUHJlY2VkZSBlYWNoIG9jY3VycmVuY2Ugb2YgVSswMDIyIChcIikgb3JcbiAgICAgIC8vICAgIFUrMDA1QyAoXFwpIGluIHZhbHVlIHdpdGggVSswMDVDIChcXCkuXG4gICAgICB2YWx1ZSA9IHZhbHVlLnJlcGxhY2UoLyhcXFxcfFwiKS9nLCAnXFxcXCQxJylcblxuICAgICAgLy8gMi4gUHJlcGVuZCBVKzAwMjIgKFwiKSB0byB2YWx1ZS5cbiAgICAgIHZhbHVlID0gJ1wiJyArIHZhbHVlXG5cbiAgICAgIC8vIDMuIEFwcGVuZCBVKzAwMjIgKFwiKSB0byB2YWx1ZS5cbiAgICAgIHZhbHVlICs9ICdcIidcbiAgICB9XG5cbiAgICAvLyA1LiBBcHBlbmQgdmFsdWUgdG8gc2VyaWFsaXphdGlvbi5cbiAgICBzZXJpYWxpemF0aW9uICs9IHZhbHVlXG4gIH1cblxuICAvLyAzLiBSZXR1cm4gc2VyaWFsaXphdGlvbi5cbiAgcmV0dXJuIHNlcmlhbGl6YXRpb25cbn1cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNodHRwLXdoaXRlc3BhY2VcbiAqIEBwYXJhbSB7bnVtYmVyfSBjaGFyXG4gKi9cbmZ1bmN0aW9uIGlzSFRUUFdoaXRlU3BhY2UgKGNoYXIpIHtcbiAgLy8gXCJcXHJcXG5cXHQgXCJcbiAgcmV0dXJuIGNoYXIgPT09IDB4MDBkIHx8IGNoYXIgPT09IDB4MDBhIHx8IGNoYXIgPT09IDB4MDA5IHx8IGNoYXIgPT09IDB4MDIwXG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jaHR0cC13aGl0ZXNwYWNlXG4gKiBAcGFyYW0ge3N0cmluZ30gc3RyXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtsZWFkaW5nPXRydWVdXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFt0cmFpbGluZz10cnVlXVxuICovXG5mdW5jdGlvbiByZW1vdmVIVFRQV2hpdGVzcGFjZSAoc3RyLCBsZWFkaW5nID0gdHJ1ZSwgdHJhaWxpbmcgPSB0cnVlKSB7XG4gIHJldHVybiByZW1vdmVDaGFycyhzdHIsIGxlYWRpbmcsIHRyYWlsaW5nLCBpc0hUVFBXaGl0ZVNwYWNlKVxufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly9pbmZyYS5zcGVjLndoYXR3Zy5vcmcvI2FzY2lpLXdoaXRlc3BhY2VcbiAqIEBwYXJhbSB7bnVtYmVyfSBjaGFyXG4gKi9cbmZ1bmN0aW9uIGlzQVNDSUlXaGl0ZXNwYWNlIChjaGFyKSB7XG4gIC8vIFwiXFxyXFxuXFx0XFxmIFwiXG4gIHJldHVybiBjaGFyID09PSAweDAwZCB8fCBjaGFyID09PSAweDAwYSB8fCBjaGFyID09PSAweDAwOSB8fCBjaGFyID09PSAweDAwYyB8fCBjaGFyID09PSAweDAyMFxufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly9pbmZyYS5zcGVjLndoYXR3Zy5vcmcvI3N0cmlwLWxlYWRpbmctYW5kLXRyYWlsaW5nLWFzY2lpLXdoaXRlc3BhY2VcbiAqIEBwYXJhbSB7c3RyaW5nfSBzdHJcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW2xlYWRpbmc9dHJ1ZV1cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW3RyYWlsaW5nPXRydWVdXG4gKi9cbmZ1bmN0aW9uIHJlbW92ZUFTQ0lJV2hpdGVzcGFjZSAoc3RyLCBsZWFkaW5nID0gdHJ1ZSwgdHJhaWxpbmcgPSB0cnVlKSB7XG4gIHJldHVybiByZW1vdmVDaGFycyhzdHIsIGxlYWRpbmcsIHRyYWlsaW5nLCBpc0FTQ0lJV2hpdGVzcGFjZSlcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gc3RyXG4gKiBAcGFyYW0ge2Jvb2xlYW59IGxlYWRpbmdcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gdHJhaWxpbmdcbiAqIEBwYXJhbSB7KGNoYXJDb2RlOiBudW1iZXIpID0+IGJvb2xlYW59IHByZWRpY2F0ZVxuICogQHJldHVybnNcbiAqL1xuZnVuY3Rpb24gcmVtb3ZlQ2hhcnMgKHN0ciwgbGVhZGluZywgdHJhaWxpbmcsIHByZWRpY2F0ZSkge1xuICBsZXQgbGVhZCA9IDBcbiAgbGV0IHRyYWlsID0gc3RyLmxlbmd0aCAtIDFcblxuICBpZiAobGVhZGluZykge1xuICAgIHdoaWxlIChsZWFkIDwgc3RyLmxlbmd0aCAmJiBwcmVkaWNhdGUoc3RyLmNoYXJDb2RlQXQobGVhZCkpKSBsZWFkKytcbiAgfVxuXG4gIGlmICh0cmFpbGluZykge1xuICAgIHdoaWxlICh0cmFpbCA+IDAgJiYgcHJlZGljYXRlKHN0ci5jaGFyQ29kZUF0KHRyYWlsKSkpIHRyYWlsLS1cbiAgfVxuXG4gIHJldHVybiBsZWFkID09PSAwICYmIHRyYWlsID09PSBzdHIubGVuZ3RoIC0gMSA/IHN0ciA6IHN0ci5zbGljZShsZWFkLCB0cmFpbCArIDEpXG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL2luZnJhLnNwZWMud2hhdHdnLm9yZy8jaXNvbW9ycGhpYy1kZWNvZGVcbiAqIEBwYXJhbSB7VWludDhBcnJheX0gaW5wdXRcbiAqIEByZXR1cm5zIHtzdHJpbmd9XG4gKi9cbmZ1bmN0aW9uIGlzb21vcnBoaWNEZWNvZGUgKGlucHV0KSB7XG4gIC8vIDEuIFRvIGlzb21vcnBoaWMgZGVjb2RlIGEgYnl0ZSBzZXF1ZW5jZSBpbnB1dCwgcmV0dXJuIGEgc3RyaW5nIHdob3NlIGNvZGUgcG9pbnRcbiAgLy8gICAgbGVuZ3RoIGlzIGVxdWFsIHRvIGlucHV0XHUyMDE5cyBsZW5ndGggYW5kIHdob3NlIGNvZGUgcG9pbnRzIGhhdmUgdGhlIHNhbWUgdmFsdWVzXG4gIC8vICAgIGFzIHRoZSB2YWx1ZXMgb2YgaW5wdXRcdTIwMTlzIGJ5dGVzLCBpbiB0aGUgc2FtZSBvcmRlci5cbiAgY29uc3QgbGVuZ3RoID0gaW5wdXQubGVuZ3RoXG4gIGlmICgoMiA8PCAxNSkgLSAxID4gbGVuZ3RoKSB7XG4gICAgcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCwgaW5wdXQpXG4gIH1cbiAgbGV0IHJlc3VsdCA9ICcnOyBsZXQgaSA9IDBcbiAgbGV0IGFkZGl0aW9uID0gKDIgPDwgMTUpIC0gMVxuICB3aGlsZSAoaSA8IGxlbmd0aCkge1xuICAgIGlmIChpICsgYWRkaXRpb24gPiBsZW5ndGgpIHtcbiAgICAgIGFkZGl0aW9uID0gbGVuZ3RoIC0gaVxuICAgIH1cbiAgICByZXN1bHQgKz0gU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShudWxsLCBpbnB1dC5zdWJhcnJheShpLCBpICs9IGFkZGl0aW9uKSlcbiAgfVxuICByZXR1cm4gcmVzdWx0XG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL21pbWVzbmlmZi5zcGVjLndoYXR3Zy5vcmcvI21pbmltaXplLWEtc3VwcG9ydGVkLW1pbWUtdHlwZVxuICogQHBhcmFtIHtFeGNsdWRlPFJldHVyblR5cGU8dHlwZW9mIHBhcnNlTUlNRVR5cGU+LCAnZmFpbHVyZSc+fSBtaW1lVHlwZVxuICovXG5mdW5jdGlvbiBtaW5pbWl6ZVN1cHBvcnRlZE1pbWVUeXBlIChtaW1lVHlwZSkge1xuICBzd2l0Y2ggKG1pbWVUeXBlLmVzc2VuY2UpIHtcbiAgICBjYXNlICdhcHBsaWNhdGlvbi9lY21hc2NyaXB0JzpcbiAgICBjYXNlICdhcHBsaWNhdGlvbi9qYXZhc2NyaXB0JzpcbiAgICBjYXNlICdhcHBsaWNhdGlvbi94LWVjbWFzY3JpcHQnOlxuICAgIGNhc2UgJ2FwcGxpY2F0aW9uL3gtamF2YXNjcmlwdCc6XG4gICAgY2FzZSAndGV4dC9lY21hc2NyaXB0JzpcbiAgICBjYXNlICd0ZXh0L2phdmFzY3JpcHQnOlxuICAgIGNhc2UgJ3RleHQvamF2YXNjcmlwdDEuMCc6XG4gICAgY2FzZSAndGV4dC9qYXZhc2NyaXB0MS4xJzpcbiAgICBjYXNlICd0ZXh0L2phdmFzY3JpcHQxLjInOlxuICAgIGNhc2UgJ3RleHQvamF2YXNjcmlwdDEuMyc6XG4gICAgY2FzZSAndGV4dC9qYXZhc2NyaXB0MS40JzpcbiAgICBjYXNlICd0ZXh0L2phdmFzY3JpcHQxLjUnOlxuICAgIGNhc2UgJ3RleHQvanNjcmlwdCc6XG4gICAgY2FzZSAndGV4dC9saXZlc2NyaXB0JzpcbiAgICBjYXNlICd0ZXh0L3gtZWNtYXNjcmlwdCc6XG4gICAgY2FzZSAndGV4dC94LWphdmFzY3JpcHQnOlxuICAgICAgLy8gMS4gSWYgbWltZVR5cGUgaXMgYSBKYXZhU2NyaXB0IE1JTUUgdHlwZSwgdGhlbiByZXR1cm4gXCJ0ZXh0L2phdmFzY3JpcHRcIi5cbiAgICAgIHJldHVybiAndGV4dC9qYXZhc2NyaXB0J1xuICAgIGNhc2UgJ2FwcGxpY2F0aW9uL2pzb24nOlxuICAgIGNhc2UgJ3RleHQvanNvbic6XG4gICAgICAvLyAyLiBJZiBtaW1lVHlwZSBpcyBhIEpTT04gTUlNRSB0eXBlLCB0aGVuIHJldHVybiBcImFwcGxpY2F0aW9uL2pzb25cIi5cbiAgICAgIHJldHVybiAnYXBwbGljYXRpb24vanNvbidcbiAgICBjYXNlICdpbWFnZS9zdmcreG1sJzpcbiAgICAgIC8vIDMuIElmIG1pbWVUeXBlXHUyMDE5cyBlc3NlbmNlIGlzIFwiaW1hZ2Uvc3ZnK3htbFwiLCB0aGVuIHJldHVybiBcImltYWdlL3N2Zyt4bWxcIi5cbiAgICAgIHJldHVybiAnaW1hZ2Uvc3ZnK3htbCdcbiAgICBjYXNlICd0ZXh0L3htbCc6XG4gICAgY2FzZSAnYXBwbGljYXRpb24veG1sJzpcbiAgICAgIC8vIDQuIElmIG1pbWVUeXBlIGlzIGFuIFhNTCBNSU1FIHR5cGUsIHRoZW4gcmV0dXJuIFwiYXBwbGljYXRpb24veG1sXCIuXG4gICAgICByZXR1cm4gJ2FwcGxpY2F0aW9uL3htbCdcbiAgfVxuXG4gIC8vIDIuIElmIG1pbWVUeXBlIGlzIGEgSlNPTiBNSU1FIHR5cGUsIHRoZW4gcmV0dXJuIFwiYXBwbGljYXRpb24vanNvblwiLlxuICBpZiAobWltZVR5cGUuc3VidHlwZS5lbmRzV2l0aCgnK2pzb24nKSkge1xuICAgIHJldHVybiAnYXBwbGljYXRpb24vanNvbidcbiAgfVxuXG4gIC8vIDQuIElmIG1pbWVUeXBlIGlzIGFuIFhNTCBNSU1FIHR5cGUsIHRoZW4gcmV0dXJuIFwiYXBwbGljYXRpb24veG1sXCIuXG4gIGlmIChtaW1lVHlwZS5zdWJ0eXBlLmVuZHNXaXRoKCcreG1sJykpIHtcbiAgICByZXR1cm4gJ2FwcGxpY2F0aW9uL3htbCdcbiAgfVxuXG4gIC8vIDUuIElmIG1pbWVUeXBlIGlzIHN1cHBvcnRlZCBieSB0aGUgdXNlciBhZ2VudCwgdGhlbiByZXR1cm4gbWltZVR5cGVcdTIwMTlzIGVzc2VuY2UuXG4gIC8vIFRlY2huaWNhbGx5LCBub2RlIGRvZXNuJ3Qgc3VwcG9ydCBhbnkgbWltZXR5cGVzLlxuXG4gIC8vIDYuIFJldHVybiB0aGUgZW1wdHkgc3RyaW5nLlxuICByZXR1cm4gJydcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGRhdGFVUkxQcm9jZXNzb3IsXG4gIFVSTFNlcmlhbGl6ZXIsXG4gIGNvbGxlY3RBU2VxdWVuY2VPZkNvZGVQb2ludHMsXG4gIGNvbGxlY3RBU2VxdWVuY2VPZkNvZGVQb2ludHNGYXN0LFxuICBzdHJpbmdQZXJjZW50RGVjb2RlLFxuICBwYXJzZU1JTUVUeXBlLFxuICBjb2xsZWN0QW5IVFRQUXVvdGVkU3RyaW5nLFxuICBzZXJpYWxpemVBTWltZVR5cGUsXG4gIHJlbW92ZUNoYXJzLFxuICByZW1vdmVIVFRQV2hpdGVzcGFjZSxcbiAgbWluaW1pemVTdXBwb3J0ZWRNaW1lVHlwZSxcbiAgSFRUUF9UT0tFTl9DT0RFUE9JTlRTLFxuICBpc29tb3JwaGljRGVjb2RlXG59XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHsgdHlwZXMsIGluc3BlY3QgfSA9IHJlcXVpcmUoJ25vZGU6dXRpbCcpXG5jb25zdCB7IG1hcmtBc1VuY2xvbmVhYmxlIH0gPSByZXF1aXJlKCdub2RlOndvcmtlcl90aHJlYWRzJylcbmNvbnN0IHsgdG9VU1ZTdHJpbmcgfSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUvdXRpbCcpXG5cbi8qKiBAdHlwZSB7aW1wb3J0KCcuLi8uLi8uLi90eXBlcy93ZWJpZGwnKS5XZWJpZGx9ICovXG5jb25zdCB3ZWJpZGwgPSB7fVxud2ViaWRsLmNvbnZlcnRlcnMgPSB7fVxud2ViaWRsLnV0aWwgPSB7fVxud2ViaWRsLmVycm9ycyA9IHt9XG5cbndlYmlkbC5lcnJvcnMuZXhjZXB0aW9uID0gZnVuY3Rpb24gKG1lc3NhZ2UpIHtcbiAgcmV0dXJuIG5ldyBUeXBlRXJyb3IoYCR7bWVzc2FnZS5oZWFkZXJ9OiAke21lc3NhZ2UubWVzc2FnZX1gKVxufVxuXG53ZWJpZGwuZXJyb3JzLmNvbnZlcnNpb25GYWlsZWQgPSBmdW5jdGlvbiAoY29udGV4dCkge1xuICBjb25zdCBwbHVyYWwgPSBjb250ZXh0LnR5cGVzLmxlbmd0aCA9PT0gMSA/ICcnIDogJyBvbmUgb2YnXG4gIGNvbnN0IG1lc3NhZ2UgPVxuICAgIGAke2NvbnRleHQuYXJndW1lbnR9IGNvdWxkIG5vdCBiZSBjb252ZXJ0ZWQgdG9gICtcbiAgICBgJHtwbHVyYWx9OiAke2NvbnRleHQudHlwZXMuam9pbignLCAnKX0uYFxuXG4gIHJldHVybiB3ZWJpZGwuZXJyb3JzLmV4Y2VwdGlvbih7XG4gICAgaGVhZGVyOiBjb250ZXh0LnByZWZpeCxcbiAgICBtZXNzYWdlXG4gIH0pXG59XG5cbndlYmlkbC5lcnJvcnMuaW52YWxpZEFyZ3VtZW50ID0gZnVuY3Rpb24gKGNvbnRleHQpIHtcbiAgcmV0dXJuIHdlYmlkbC5lcnJvcnMuZXhjZXB0aW9uKHtcbiAgICBoZWFkZXI6IGNvbnRleHQucHJlZml4LFxuICAgIG1lc3NhZ2U6IGBcIiR7Y29udGV4dC52YWx1ZX1cIiBpcyBhbiBpbnZhbGlkICR7Y29udGV4dC50eXBlfS5gXG4gIH0pXG59XG5cbi8vIGh0dHBzOi8vd2ViaWRsLnNwZWMud2hhdHdnLm9yZy8jaW1wbGVtZW50c1xud2ViaWRsLmJyYW5kQ2hlY2sgPSBmdW5jdGlvbiAoViwgSSwgb3B0cykge1xuICBpZiAob3B0cz8uc3RyaWN0ICE9PSBmYWxzZSkge1xuICAgIGlmICghKFYgaW5zdGFuY2VvZiBJKSkge1xuICAgICAgY29uc3QgZXJyID0gbmV3IFR5cGVFcnJvcignSWxsZWdhbCBpbnZvY2F0aW9uJylcbiAgICAgIGVyci5jb2RlID0gJ0VSUl9JTlZBTElEX1RISVMnIC8vIG5vZGUgY29tcGF0LlxuICAgICAgdGhyb3cgZXJyXG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGlmIChWPy5bU3ltYm9sLnRvU3RyaW5nVGFnXSAhPT0gSS5wcm90b3R5cGVbU3ltYm9sLnRvU3RyaW5nVGFnXSkge1xuICAgICAgY29uc3QgZXJyID0gbmV3IFR5cGVFcnJvcignSWxsZWdhbCBpbnZvY2F0aW9uJylcbiAgICAgIGVyci5jb2RlID0gJ0VSUl9JTlZBTElEX1RISVMnIC8vIG5vZGUgY29tcGF0LlxuICAgICAgdGhyb3cgZXJyXG4gICAgfVxuICB9XG59XG5cbndlYmlkbC5hcmd1bWVudExlbmd0aENoZWNrID0gZnVuY3Rpb24gKHsgbGVuZ3RoIH0sIG1pbiwgY3R4KSB7XG4gIGlmIChsZW5ndGggPCBtaW4pIHtcbiAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmV4Y2VwdGlvbih7XG4gICAgICBtZXNzYWdlOiBgJHttaW59IGFyZ3VtZW50JHttaW4gIT09IDEgPyAncycgOiAnJ30gcmVxdWlyZWQsIGAgK1xuICAgICAgICAgICAgICAgYGJ1dCR7bGVuZ3RoID8gJyBvbmx5JyA6ICcnfSAke2xlbmd0aH0gZm91bmQuYCxcbiAgICAgIGhlYWRlcjogY3R4XG4gICAgfSlcbiAgfVxufVxuXG53ZWJpZGwuaWxsZWdhbENvbnN0cnVjdG9yID0gZnVuY3Rpb24gKCkge1xuICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmV4Y2VwdGlvbih7XG4gICAgaGVhZGVyOiAnVHlwZUVycm9yJyxcbiAgICBtZXNzYWdlOiAnSWxsZWdhbCBjb25zdHJ1Y3RvcidcbiAgfSlcbn1cblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1lY21hc2NyaXB0LWRhdGEtdHlwZXMtYW5kLXZhbHVlc1xud2ViaWRsLnV0aWwuVHlwZSA9IGZ1bmN0aW9uIChWKSB7XG4gIHN3aXRjaCAodHlwZW9mIFYpIHtcbiAgICBjYXNlICd1bmRlZmluZWQnOiByZXR1cm4gJ1VuZGVmaW5lZCdcbiAgICBjYXNlICdib29sZWFuJzogcmV0dXJuICdCb29sZWFuJ1xuICAgIGNhc2UgJ3N0cmluZyc6IHJldHVybiAnU3RyaW5nJ1xuICAgIGNhc2UgJ3N5bWJvbCc6IHJldHVybiAnU3ltYm9sJ1xuICAgIGNhc2UgJ251bWJlcic6IHJldHVybiAnTnVtYmVyJ1xuICAgIGNhc2UgJ2JpZ2ludCc6IHJldHVybiAnQmlnSW50J1xuICAgIGNhc2UgJ2Z1bmN0aW9uJzpcbiAgICBjYXNlICdvYmplY3QnOiB7XG4gICAgICBpZiAoViA9PT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gJ051bGwnXG4gICAgICB9XG5cbiAgICAgIHJldHVybiAnT2JqZWN0J1xuICAgIH1cbiAgfVxufVxuXG53ZWJpZGwudXRpbC5tYXJrQXNVbmNsb25lYWJsZSA9IG1hcmtBc1VuY2xvbmVhYmxlIHx8ICgoKSA9PiB7fSlcbi8vIGh0dHBzOi8vd2ViaWRsLnNwZWMud2hhdHdnLm9yZy8jYWJzdHJhY3Qtb3BkZWYtY29udmVydHRvaW50XG53ZWJpZGwudXRpbC5Db252ZXJ0VG9JbnQgPSBmdW5jdGlvbiAoViwgYml0TGVuZ3RoLCBzaWduZWRuZXNzLCBvcHRzKSB7XG4gIGxldCB1cHBlckJvdW5kXG4gIGxldCBsb3dlckJvdW5kXG5cbiAgLy8gMS4gSWYgYml0TGVuZ3RoIGlzIDY0LCB0aGVuOlxuICBpZiAoYml0TGVuZ3RoID09PSA2NCkge1xuICAgIC8vIDEuIExldCB1cHBlckJvdW5kIGJlIDJeNTMgXHUyMjEyIDEuXG4gICAgdXBwZXJCb3VuZCA9IE1hdGgucG93KDIsIDUzKSAtIDFcblxuICAgIC8vIDIuIElmIHNpZ25lZG5lc3MgaXMgXCJ1bnNpZ25lZFwiLCB0aGVuIGxldCBsb3dlckJvdW5kIGJlIDAuXG4gICAgaWYgKHNpZ25lZG5lc3MgPT09ICd1bnNpZ25lZCcpIHtcbiAgICAgIGxvd2VyQm91bmQgPSAwXG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIDMuIE90aGVyd2lzZSBsZXQgbG93ZXJCb3VuZCBiZSBcdTIyMTIyXjUzICsgMS5cbiAgICAgIGxvd2VyQm91bmQgPSBNYXRoLnBvdygtMiwgNTMpICsgMVxuICAgIH1cbiAgfSBlbHNlIGlmIChzaWduZWRuZXNzID09PSAndW5zaWduZWQnKSB7XG4gICAgLy8gMi4gT3RoZXJ3aXNlLCBpZiBzaWduZWRuZXNzIGlzIFwidW5zaWduZWRcIiwgdGhlbjpcblxuICAgIC8vIDEuIExldCBsb3dlckJvdW5kIGJlIDAuXG4gICAgbG93ZXJCb3VuZCA9IDBcblxuICAgIC8vIDIuIExldCB1cHBlckJvdW5kIGJlIDJeYml0TGVuZ3RoIFx1MjIxMiAxLlxuICAgIHVwcGVyQm91bmQgPSBNYXRoLnBvdygyLCBiaXRMZW5ndGgpIC0gMVxuICB9IGVsc2Uge1xuICAgIC8vIDMuIE90aGVyd2lzZTpcblxuICAgIC8vIDEuIExldCBsb3dlckJvdW5kIGJlIC0yXmJpdExlbmd0aCBcdTIyMTIgMS5cbiAgICBsb3dlckJvdW5kID0gTWF0aC5wb3coLTIsIGJpdExlbmd0aCkgLSAxXG5cbiAgICAvLyAyLiBMZXQgdXBwZXJCb3VuZCBiZSAyXmJpdExlbmd0aCBcdTIyMTIgMSBcdTIyMTIgMS5cbiAgICB1cHBlckJvdW5kID0gTWF0aC5wb3coMiwgYml0TGVuZ3RoIC0gMSkgLSAxXG4gIH1cblxuICAvLyA0LiBMZXQgeCBiZSA/IFRvTnVtYmVyKFYpLlxuICBsZXQgeCA9IE51bWJlcihWKVxuXG4gIC8vIDUuIElmIHggaXMgXHUyMjEyMCwgdGhlbiBzZXQgeCB0byArMC5cbiAgaWYgKHggPT09IDApIHtcbiAgICB4ID0gMFxuICB9XG5cbiAgLy8gNi4gSWYgdGhlIGNvbnZlcnNpb24gaXMgdG8gYW4gSURMIHR5cGUgYXNzb2NpYXRlZFxuICAvLyAgICB3aXRoIHRoZSBbRW5mb3JjZVJhbmdlXSBleHRlbmRlZCBhdHRyaWJ1dGUsIHRoZW46XG4gIGlmIChvcHRzPy5lbmZvcmNlUmFuZ2UgPT09IHRydWUpIHtcbiAgICAvLyAxLiBJZiB4IGlzIE5hTiwgK1x1MjIxRSwgb3IgXHUyMjEyXHUyMjFFLCB0aGVuIHRocm93IGEgVHlwZUVycm9yLlxuICAgIGlmIChcbiAgICAgIE51bWJlci5pc05hTih4KSB8fFxuICAgICAgeCA9PT0gTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZIHx8XG4gICAgICB4ID09PSBOdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFlcbiAgICApIHtcbiAgICAgIHRocm93IHdlYmlkbC5lcnJvcnMuZXhjZXB0aW9uKHtcbiAgICAgICAgaGVhZGVyOiAnSW50ZWdlciBjb252ZXJzaW9uJyxcbiAgICAgICAgbWVzc2FnZTogYENvdWxkIG5vdCBjb252ZXJ0ICR7d2ViaWRsLnV0aWwuU3RyaW5naWZ5KFYpfSB0byBhbiBpbnRlZ2VyLmBcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgLy8gMi4gU2V0IHggdG8gSW50ZWdlclBhcnQoeCkuXG4gICAgeCA9IHdlYmlkbC51dGlsLkludGVnZXJQYXJ0KHgpXG5cbiAgICAvLyAzLiBJZiB4IDwgbG93ZXJCb3VuZCBvciB4ID4gdXBwZXJCb3VuZCwgdGhlblxuICAgIC8vICAgIHRocm93IGEgVHlwZUVycm9yLlxuICAgIGlmICh4IDwgbG93ZXJCb3VuZCB8fCB4ID4gdXBwZXJCb3VuZCkge1xuICAgICAgdGhyb3cgd2ViaWRsLmVycm9ycy5leGNlcHRpb24oe1xuICAgICAgICBoZWFkZXI6ICdJbnRlZ2VyIGNvbnZlcnNpb24nLFxuICAgICAgICBtZXNzYWdlOiBgVmFsdWUgbXVzdCBiZSBiZXR3ZWVuICR7bG93ZXJCb3VuZH0tJHt1cHBlckJvdW5kfSwgZ290ICR7eH0uYFxuICAgICAgfSlcbiAgICB9XG5cbiAgICAvLyA0LiBSZXR1cm4geC5cbiAgICByZXR1cm4geFxuICB9XG5cbiAgLy8gNy4gSWYgeCBpcyBub3QgTmFOIGFuZCB0aGUgY29udmVyc2lvbiBpcyB0byBhbiBJRExcbiAgLy8gICAgdHlwZSBhc3NvY2lhdGVkIHdpdGggdGhlIFtDbGFtcF0gZXh0ZW5kZWRcbiAgLy8gICAgYXR0cmlidXRlLCB0aGVuOlxuICBpZiAoIU51bWJlci5pc05hTih4KSAmJiBvcHRzPy5jbGFtcCA9PT0gdHJ1ZSkge1xuICAgIC8vIDEuIFNldCB4IHRvIG1pbihtYXgoeCwgbG93ZXJCb3VuZCksIHVwcGVyQm91bmQpLlxuICAgIHggPSBNYXRoLm1pbihNYXRoLm1heCh4LCBsb3dlckJvdW5kKSwgdXBwZXJCb3VuZClcblxuICAgIC8vIDIuIFJvdW5kIHggdG8gdGhlIG5lYXJlc3QgaW50ZWdlciwgY2hvb3NpbmcgdGhlXG4gICAgLy8gICAgZXZlbiBpbnRlZ2VyIGlmIGl0IGxpZXMgaGFsZndheSBiZXR3ZWVuIHR3byxcbiAgICAvLyAgICBhbmQgY2hvb3NpbmcgKzAgcmF0aGVyIHRoYW4gXHUyMjEyMC5cbiAgICBpZiAoTWF0aC5mbG9vcih4KSAlIDIgPT09IDApIHtcbiAgICAgIHggPSBNYXRoLmZsb29yKHgpXG4gICAgfSBlbHNlIHtcbiAgICAgIHggPSBNYXRoLmNlaWwoeClcbiAgICB9XG5cbiAgICAvLyAzLiBSZXR1cm4geC5cbiAgICByZXR1cm4geFxuICB9XG5cbiAgLy8gOC4gSWYgeCBpcyBOYU4sICswLCArXHUyMjFFLCBvciBcdTIyMTJcdTIyMUUsIHRoZW4gcmV0dXJuICswLlxuICBpZiAoXG4gICAgTnVtYmVyLmlzTmFOKHgpIHx8XG4gICAgKHggPT09IDAgJiYgT2JqZWN0LmlzKDAsIHgpKSB8fFxuICAgIHggPT09IE51bWJlci5QT1NJVElWRV9JTkZJTklUWSB8fFxuICAgIHggPT09IE51bWJlci5ORUdBVElWRV9JTkZJTklUWVxuICApIHtcbiAgICByZXR1cm4gMFxuICB9XG5cbiAgLy8gOS4gU2V0IHggdG8gSW50ZWdlclBhcnQoeCkuXG4gIHggPSB3ZWJpZGwudXRpbC5JbnRlZ2VyUGFydCh4KVxuXG4gIC8vIDEwLiBTZXQgeCB0byB4IG1vZHVsbyAyXmJpdExlbmd0aC5cbiAgeCA9IHggJSBNYXRoLnBvdygyLCBiaXRMZW5ndGgpXG5cbiAgLy8gMTEuIElmIHNpZ25lZG5lc3MgaXMgXCJzaWduZWRcIiBhbmQgeCBcdTIyNjUgMl5iaXRMZW5ndGggXHUyMjEyIDEsXG4gIC8vICAgIHRoZW4gcmV0dXJuIHggXHUyMjEyIDJeYml0TGVuZ3RoLlxuICBpZiAoc2lnbmVkbmVzcyA9PT0gJ3NpZ25lZCcgJiYgeCA+PSBNYXRoLnBvdygyLCBiaXRMZW5ndGgpIC0gMSkge1xuICAgIHJldHVybiB4IC0gTWF0aC5wb3coMiwgYml0TGVuZ3RoKVxuICB9XG5cbiAgLy8gMTIuIE90aGVyd2lzZSwgcmV0dXJuIHguXG4gIHJldHVybiB4XG59XG5cbi8vIGh0dHBzOi8vd2ViaWRsLnNwZWMud2hhdHdnLm9yZy8jYWJzdHJhY3Qtb3BkZWYtaW50ZWdlcnBhcnRcbndlYmlkbC51dGlsLkludGVnZXJQYXJ0ID0gZnVuY3Rpb24gKG4pIHtcbiAgLy8gMS4gTGV0IHIgYmUgZmxvb3IoYWJzKG4pKS5cbiAgY29uc3QgciA9IE1hdGguZmxvb3IoTWF0aC5hYnMobikpXG5cbiAgLy8gMi4gSWYgbiA8IDAsIHRoZW4gcmV0dXJuIC0xIFx1MDBENyByLlxuICBpZiAobiA8IDApIHtcbiAgICByZXR1cm4gLTEgKiByXG4gIH1cblxuICAvLyAzLiBPdGhlcndpc2UsIHJldHVybiByLlxuICByZXR1cm4gclxufVxuXG53ZWJpZGwudXRpbC5TdHJpbmdpZnkgPSBmdW5jdGlvbiAoVikge1xuICBjb25zdCB0eXBlID0gd2ViaWRsLnV0aWwuVHlwZShWKVxuXG4gIHN3aXRjaCAodHlwZSkge1xuICAgIGNhc2UgJ1N5bWJvbCc6XG4gICAgICByZXR1cm4gYFN5bWJvbCgke1YuZGVzY3JpcHRpb259KWBcbiAgICBjYXNlICdPYmplY3QnOlxuICAgICAgcmV0dXJuIGluc3BlY3QoVilcbiAgICBjYXNlICdTdHJpbmcnOlxuICAgICAgcmV0dXJuIGBcIiR7Vn1cImBcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIGAke1Z9YFxuICB9XG59XG5cbi8vIGh0dHBzOi8vd2ViaWRsLnNwZWMud2hhdHdnLm9yZy8jZXMtc2VxdWVuY2VcbndlYmlkbC5zZXF1ZW5jZUNvbnZlcnRlciA9IGZ1bmN0aW9uIChjb252ZXJ0ZXIpIHtcbiAgcmV0dXJuIChWLCBwcmVmaXgsIGFyZ3VtZW50LCBJdGVyYWJsZSkgPT4ge1xuICAgIC8vIDEuIElmIFR5cGUoVikgaXMgbm90IE9iamVjdCwgdGhyb3cgYSBUeXBlRXJyb3IuXG4gICAgaWYgKHdlYmlkbC51dGlsLlR5cGUoVikgIT09ICdPYmplY3QnKSB7XG4gICAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmV4Y2VwdGlvbih7XG4gICAgICAgIGhlYWRlcjogcHJlZml4LFxuICAgICAgICBtZXNzYWdlOiBgJHthcmd1bWVudH0gKCR7d2ViaWRsLnV0aWwuU3RyaW5naWZ5KFYpfSkgaXMgbm90IGl0ZXJhYmxlLmBcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgLy8gMi4gTGV0IG1ldGhvZCBiZSA/IEdldE1ldGhvZChWLCBAQGl0ZXJhdG9yKS5cbiAgICAvKiogQHR5cGUge0dlbmVyYXRvcn0gKi9cbiAgICBjb25zdCBtZXRob2QgPSB0eXBlb2YgSXRlcmFibGUgPT09ICdmdW5jdGlvbicgPyBJdGVyYWJsZSgpIDogVj8uW1N5bWJvbC5pdGVyYXRvcl0/LigpXG4gICAgY29uc3Qgc2VxID0gW11cbiAgICBsZXQgaW5kZXggPSAwXG5cbiAgICAvLyAzLiBJZiBtZXRob2QgaXMgdW5kZWZpbmVkLCB0aHJvdyBhIFR5cGVFcnJvci5cbiAgICBpZiAoXG4gICAgICBtZXRob2QgPT09IHVuZGVmaW5lZCB8fFxuICAgICAgdHlwZW9mIG1ldGhvZC5uZXh0ICE9PSAnZnVuY3Rpb24nXG4gICAgKSB7XG4gICAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmV4Y2VwdGlvbih7XG4gICAgICAgIGhlYWRlcjogcHJlZml4LFxuICAgICAgICBtZXNzYWdlOiBgJHthcmd1bWVudH0gaXMgbm90IGl0ZXJhYmxlLmBcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgLy8gaHR0cHM6Ly93ZWJpZGwuc3BlYy53aGF0d2cub3JnLyNjcmVhdGUtc2VxdWVuY2UtZnJvbS1pdGVyYWJsZVxuICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICBjb25zdCB7IGRvbmUsIHZhbHVlIH0gPSBtZXRob2QubmV4dCgpXG5cbiAgICAgIGlmIChkb25lKSB7XG4gICAgICAgIGJyZWFrXG4gICAgICB9XG5cbiAgICAgIHNlcS5wdXNoKGNvbnZlcnRlcih2YWx1ZSwgcHJlZml4LCBgJHthcmd1bWVudH1bJHtpbmRleCsrfV1gKSlcbiAgICB9XG5cbiAgICByZXR1cm4gc2VxXG4gIH1cbn1cblxuLy8gaHR0cHM6Ly93ZWJpZGwuc3BlYy53aGF0d2cub3JnLyNlcy10by1yZWNvcmRcbndlYmlkbC5yZWNvcmRDb252ZXJ0ZXIgPSBmdW5jdGlvbiAoa2V5Q29udmVydGVyLCB2YWx1ZUNvbnZlcnRlcikge1xuICByZXR1cm4gKE8sIHByZWZpeCwgYXJndW1lbnQpID0+IHtcbiAgICAvLyAxLiBJZiBUeXBlKE8pIGlzIG5vdCBPYmplY3QsIHRocm93IGEgVHlwZUVycm9yLlxuICAgIGlmICh3ZWJpZGwudXRpbC5UeXBlKE8pICE9PSAnT2JqZWN0Jykge1xuICAgICAgdGhyb3cgd2ViaWRsLmVycm9ycy5leGNlcHRpb24oe1xuICAgICAgICBoZWFkZXI6IHByZWZpeCxcbiAgICAgICAgbWVzc2FnZTogYCR7YXJndW1lbnR9IChcIiR7d2ViaWRsLnV0aWwuVHlwZShPKX1cIikgaXMgbm90IGFuIE9iamVjdC5gXG4gICAgICB9KVxuICAgIH1cblxuICAgIC8vIDIuIExldCByZXN1bHQgYmUgYSBuZXcgZW1wdHkgaW5zdGFuY2Ugb2YgcmVjb3JkPEssIFY+LlxuICAgIGNvbnN0IHJlc3VsdCA9IHt9XG5cbiAgICBpZiAoIXR5cGVzLmlzUHJveHkoTykpIHtcbiAgICAgIC8vIDEuIExldCBkZXNjIGJlID8gTy5bW0dldE93blByb3BlcnR5XV0oa2V5KS5cbiAgICAgIGNvbnN0IGtleXMgPSBbLi4uT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoTyksIC4uLk9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoTyldXG5cbiAgICAgIGZvciAoY29uc3Qga2V5IG9mIGtleXMpIHtcbiAgICAgICAgLy8gMS4gTGV0IHR5cGVkS2V5IGJlIGtleSBjb252ZXJ0ZWQgdG8gYW4gSURMIHZhbHVlIG9mIHR5cGUgSy5cbiAgICAgICAgY29uc3QgdHlwZWRLZXkgPSBrZXlDb252ZXJ0ZXIoa2V5LCBwcmVmaXgsIGFyZ3VtZW50KVxuXG4gICAgICAgIC8vIDIuIExldCB2YWx1ZSBiZSA/IEdldChPLCBrZXkpLlxuICAgICAgICAvLyAzLiBMZXQgdHlwZWRWYWx1ZSBiZSB2YWx1ZSBjb252ZXJ0ZWQgdG8gYW4gSURMIHZhbHVlIG9mIHR5cGUgVi5cbiAgICAgICAgY29uc3QgdHlwZWRWYWx1ZSA9IHZhbHVlQ29udmVydGVyKE9ba2V5XSwgcHJlZml4LCBhcmd1bWVudClcblxuICAgICAgICAvLyA0LiBTZXQgcmVzdWx0W3R5cGVkS2V5XSB0byB0eXBlZFZhbHVlLlxuICAgICAgICByZXN1bHRbdHlwZWRLZXldID0gdHlwZWRWYWx1ZVxuICAgICAgfVxuXG4gICAgICAvLyA1LiBSZXR1cm4gcmVzdWx0LlxuICAgICAgcmV0dXJuIHJlc3VsdFxuICAgIH1cblxuICAgIC8vIDMuIExldCBrZXlzIGJlID8gTy5bW093blByb3BlcnR5S2V5c11dKCkuXG4gICAgY29uc3Qga2V5cyA9IFJlZmxlY3Qub3duS2V5cyhPKVxuXG4gICAgLy8gNC4gRm9yIGVhY2gga2V5IG9mIGtleXMuXG4gICAgZm9yIChjb25zdCBrZXkgb2Yga2V5cykge1xuICAgICAgLy8gMS4gTGV0IGRlc2MgYmUgPyBPLltbR2V0T3duUHJvcGVydHldXShrZXkpLlxuICAgICAgY29uc3QgZGVzYyA9IFJlZmxlY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE8sIGtleSlcblxuICAgICAgLy8gMi4gSWYgZGVzYyBpcyBub3QgdW5kZWZpbmVkIGFuZCBkZXNjLltbRW51bWVyYWJsZV1dIGlzIHRydWU6XG4gICAgICBpZiAoZGVzYz8uZW51bWVyYWJsZSkge1xuICAgICAgICAvLyAxLiBMZXQgdHlwZWRLZXkgYmUga2V5IGNvbnZlcnRlZCB0byBhbiBJREwgdmFsdWUgb2YgdHlwZSBLLlxuICAgICAgICBjb25zdCB0eXBlZEtleSA9IGtleUNvbnZlcnRlcihrZXksIHByZWZpeCwgYXJndW1lbnQpXG5cbiAgICAgICAgLy8gMi4gTGV0IHZhbHVlIGJlID8gR2V0KE8sIGtleSkuXG4gICAgICAgIC8vIDMuIExldCB0eXBlZFZhbHVlIGJlIHZhbHVlIGNvbnZlcnRlZCB0byBhbiBJREwgdmFsdWUgb2YgdHlwZSBWLlxuICAgICAgICBjb25zdCB0eXBlZFZhbHVlID0gdmFsdWVDb252ZXJ0ZXIoT1trZXldLCBwcmVmaXgsIGFyZ3VtZW50KVxuXG4gICAgICAgIC8vIDQuIFNldCByZXN1bHRbdHlwZWRLZXldIHRvIHR5cGVkVmFsdWUuXG4gICAgICAgIHJlc3VsdFt0eXBlZEtleV0gPSB0eXBlZFZhbHVlXG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gNS4gUmV0dXJuIHJlc3VsdC5cbiAgICByZXR1cm4gcmVzdWx0XG4gIH1cbn1cblxud2ViaWRsLmludGVyZmFjZUNvbnZlcnRlciA9IGZ1bmN0aW9uIChpKSB7XG4gIHJldHVybiAoViwgcHJlZml4LCBhcmd1bWVudCwgb3B0cykgPT4ge1xuICAgIGlmIChvcHRzPy5zdHJpY3QgIT09IGZhbHNlICYmICEoViBpbnN0YW5jZW9mIGkpKSB7XG4gICAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmV4Y2VwdGlvbih7XG4gICAgICAgIGhlYWRlcjogcHJlZml4LFxuICAgICAgICBtZXNzYWdlOiBgRXhwZWN0ZWQgJHthcmd1bWVudH0gKFwiJHt3ZWJpZGwudXRpbC5TdHJpbmdpZnkoVil9XCIpIHRvIGJlIGFuIGluc3RhbmNlIG9mICR7aS5uYW1lfS5gXG4gICAgICB9KVxuICAgIH1cblxuICAgIHJldHVybiBWXG4gIH1cbn1cblxud2ViaWRsLmRpY3Rpb25hcnlDb252ZXJ0ZXIgPSBmdW5jdGlvbiAoY29udmVydGVycykge1xuICByZXR1cm4gKGRpY3Rpb25hcnksIHByZWZpeCwgYXJndW1lbnQpID0+IHtcbiAgICBjb25zdCB0eXBlID0gd2ViaWRsLnV0aWwuVHlwZShkaWN0aW9uYXJ5KVxuICAgIGNvbnN0IGRpY3QgPSB7fVxuXG4gICAgaWYgKHR5cGUgPT09ICdOdWxsJyB8fCB0eXBlID09PSAnVW5kZWZpbmVkJykge1xuICAgICAgcmV0dXJuIGRpY3RcbiAgICB9IGVsc2UgaWYgKHR5cGUgIT09ICdPYmplY3QnKSB7XG4gICAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmV4Y2VwdGlvbih7XG4gICAgICAgIGhlYWRlcjogcHJlZml4LFxuICAgICAgICBtZXNzYWdlOiBgRXhwZWN0ZWQgJHtkaWN0aW9uYXJ5fSB0byBiZSBvbmUgb2Y6IE51bGwsIFVuZGVmaW5lZCwgT2JqZWN0LmBcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBvcHRpb25zIG9mIGNvbnZlcnRlcnMpIHtcbiAgICAgIGNvbnN0IHsga2V5LCBkZWZhdWx0VmFsdWUsIHJlcXVpcmVkLCBjb252ZXJ0ZXIgfSA9IG9wdGlvbnNcblxuICAgICAgaWYgKHJlcXVpcmVkID09PSB0cnVlKSB7XG4gICAgICAgIGlmICghT2JqZWN0Lmhhc093bihkaWN0aW9uYXJ5LCBrZXkpKSB7XG4gICAgICAgICAgdGhyb3cgd2ViaWRsLmVycm9ycy5leGNlcHRpb24oe1xuICAgICAgICAgICAgaGVhZGVyOiBwcmVmaXgsXG4gICAgICAgICAgICBtZXNzYWdlOiBgTWlzc2luZyByZXF1aXJlZCBrZXkgXCIke2tleX1cIi5gXG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBsZXQgdmFsdWUgPSBkaWN0aW9uYXJ5W2tleV1cbiAgICAgIGNvbnN0IGhhc0RlZmF1bHQgPSBPYmplY3QuaGFzT3duKG9wdGlvbnMsICdkZWZhdWx0VmFsdWUnKVxuXG4gICAgICAvLyBPbmx5IHVzZSBkZWZhdWx0VmFsdWUgaWYgdmFsdWUgaXMgdW5kZWZpbmVkIGFuZFxuICAgICAgLy8gYSBkZWZhdWx0VmFsdWUgb3B0aW9ucyB3YXMgcHJvdmlkZWQuXG4gICAgICBpZiAoaGFzRGVmYXVsdCAmJiB2YWx1ZSAhPT0gbnVsbCkge1xuICAgICAgICB2YWx1ZSA/Pz0gZGVmYXVsdFZhbHVlKClcbiAgICAgIH1cblxuICAgICAgLy8gQSBrZXkgY2FuIGJlIG9wdGlvbmFsIGFuZCBoYXZlIG5vIGRlZmF1bHQgdmFsdWUuXG4gICAgICAvLyBXaGVuIHRoaXMgaGFwcGVucywgZG8gbm90IHBlcmZvcm0gYSBjb252ZXJzaW9uLFxuICAgICAgLy8gYW5kIGRvIG5vdCBhc3NpZ24gdGhlIGtleSBhIHZhbHVlLlxuICAgICAgaWYgKHJlcXVpcmVkIHx8IGhhc0RlZmF1bHQgfHwgdmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICB2YWx1ZSA9IGNvbnZlcnRlcih2YWx1ZSwgcHJlZml4LCBgJHthcmd1bWVudH0uJHtrZXl9YClcblxuICAgICAgICBpZiAoXG4gICAgICAgICAgb3B0aW9ucy5hbGxvd2VkVmFsdWVzICYmXG4gICAgICAgICAgIW9wdGlvbnMuYWxsb3dlZFZhbHVlcy5pbmNsdWRlcyh2YWx1ZSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgdGhyb3cgd2ViaWRsLmVycm9ycy5leGNlcHRpb24oe1xuICAgICAgICAgICAgaGVhZGVyOiBwcmVmaXgsXG4gICAgICAgICAgICBtZXNzYWdlOiBgJHt2YWx1ZX0gaXMgbm90IGFuIGFjY2VwdGVkIHR5cGUuIEV4cGVjdGVkIG9uZSBvZiAke29wdGlvbnMuYWxsb3dlZFZhbHVlcy5qb2luKCcsICcpfS5gXG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuXG4gICAgICAgIGRpY3Rba2V5XSA9IHZhbHVlXG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGRpY3RcbiAgfVxufVxuXG53ZWJpZGwubnVsbGFibGVDb252ZXJ0ZXIgPSBmdW5jdGlvbiAoY29udmVydGVyKSB7XG4gIHJldHVybiAoViwgcHJlZml4LCBhcmd1bWVudCkgPT4ge1xuICAgIGlmIChWID09PSBudWxsKSB7XG4gICAgICByZXR1cm4gVlxuICAgIH1cblxuICAgIHJldHVybiBjb252ZXJ0ZXIoViwgcHJlZml4LCBhcmd1bWVudClcbiAgfVxufVxuXG4vLyBodHRwczovL3dlYmlkbC5zcGVjLndoYXR3Zy5vcmcvI2VzLURPTVN0cmluZ1xud2ViaWRsLmNvbnZlcnRlcnMuRE9NU3RyaW5nID0gZnVuY3Rpb24gKFYsIHByZWZpeCwgYXJndW1lbnQsIG9wdHMpIHtcbiAgLy8gMS4gSWYgViBpcyBudWxsIGFuZCB0aGUgY29udmVyc2lvbiBpcyB0byBhbiBJREwgdHlwZVxuICAvLyAgICBhc3NvY2lhdGVkIHdpdGggdGhlIFtMZWdhY3lOdWxsVG9FbXB0eVN0cmluZ11cbiAgLy8gICAgZXh0ZW5kZWQgYXR0cmlidXRlLCB0aGVuIHJldHVybiB0aGUgRE9NU3RyaW5nIHZhbHVlXG4gIC8vICAgIHRoYXQgcmVwcmVzZW50cyB0aGUgZW1wdHkgc3RyaW5nLlxuICBpZiAoViA9PT0gbnVsbCAmJiBvcHRzPy5sZWdhY3lOdWxsVG9FbXB0eVN0cmluZykge1xuICAgIHJldHVybiAnJ1xuICB9XG5cbiAgLy8gMi4gTGV0IHggYmUgPyBUb1N0cmluZyhWKS5cbiAgaWYgKHR5cGVvZiBWID09PSAnc3ltYm9sJykge1xuICAgIHRocm93IHdlYmlkbC5lcnJvcnMuZXhjZXB0aW9uKHtcbiAgICAgIGhlYWRlcjogcHJlZml4LFxuICAgICAgbWVzc2FnZTogYCR7YXJndW1lbnR9IGlzIGEgc3ltYm9sLCB3aGljaCBjYW5ub3QgYmUgY29udmVydGVkIHRvIGEgRE9NU3RyaW5nLmBcbiAgICB9KVxuICB9XG5cbiAgLy8gMy4gUmV0dXJuIHRoZSBJREwgRE9NU3RyaW5nIHZhbHVlIHRoYXQgcmVwcmVzZW50cyB0aGVcbiAgLy8gICAgc2FtZSBzZXF1ZW5jZSBvZiBjb2RlIHVuaXRzIGFzIHRoZSBvbmUgdGhlXG4gIC8vICAgIEVDTUFTY3JpcHQgU3RyaW5nIHZhbHVlIHggcmVwcmVzZW50cy5cbiAgcmV0dXJuIFN0cmluZyhWKVxufVxuXG4vLyBodHRwczovL3dlYmlkbC5zcGVjLndoYXR3Zy5vcmcvI2VzLUJ5dGVTdHJpbmdcbndlYmlkbC5jb252ZXJ0ZXJzLkJ5dGVTdHJpbmcgPSBmdW5jdGlvbiAoViwgcHJlZml4LCBhcmd1bWVudCkge1xuICAvLyAxLiBMZXQgeCBiZSA/IFRvU3RyaW5nKFYpLlxuICAvLyBOb3RlOiBET01TdHJpbmcgY29udmVydGVyIHBlcmZvcm0gPyBUb1N0cmluZyhWKVxuICBjb25zdCB4ID0gd2ViaWRsLmNvbnZlcnRlcnMuRE9NU3RyaW5nKFYsIHByZWZpeCwgYXJndW1lbnQpXG5cbiAgLy8gMi4gSWYgdGhlIHZhbHVlIG9mIGFueSBlbGVtZW50IG9mIHggaXMgZ3JlYXRlciB0aGFuXG4gIC8vICAgIDI1NSwgdGhlbiB0aHJvdyBhIFR5cGVFcnJvci5cbiAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IHgubGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgaWYgKHguY2hhckNvZGVBdChpbmRleCkgPiAyNTUpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAgICdDYW5ub3QgY29udmVydCBhcmd1bWVudCB0byBhIEJ5dGVTdHJpbmcgYmVjYXVzZSB0aGUgY2hhcmFjdGVyIGF0ICcgK1xuICAgICAgICBgaW5kZXggJHtpbmRleH0gaGFzIGEgdmFsdWUgb2YgJHt4LmNoYXJDb2RlQXQoaW5kZXgpfSB3aGljaCBpcyBncmVhdGVyIHRoYW4gMjU1LmBcbiAgICAgIClcbiAgICB9XG4gIH1cblxuICAvLyAzLiBSZXR1cm4gYW4gSURMIEJ5dGVTdHJpbmcgdmFsdWUgd2hvc2UgbGVuZ3RoIGlzIHRoZVxuICAvLyAgICBsZW5ndGggb2YgeCwgYW5kIHdoZXJlIHRoZSB2YWx1ZSBvZiBlYWNoIGVsZW1lbnQgaXNcbiAgLy8gICAgdGhlIHZhbHVlIG9mIHRoZSBjb3JyZXNwb25kaW5nIGVsZW1lbnQgb2YgeC5cbiAgcmV0dXJuIHhcbn1cblxuLy8gaHR0cHM6Ly93ZWJpZGwuc3BlYy53aGF0d2cub3JnLyNlcy1VU1ZTdHJpbmdcbi8vIFRPRE86IHJld3JpdGUgdGhpcyBzbyB3ZSBjYW4gY29udHJvbCB0aGUgZXJyb3JzIHRocm93blxud2ViaWRsLmNvbnZlcnRlcnMuVVNWU3RyaW5nID0gdG9VU1ZTdHJpbmdcblxuLy8gaHR0cHM6Ly93ZWJpZGwuc3BlYy53aGF0d2cub3JnLyNlcy1ib29sZWFuXG53ZWJpZGwuY29udmVydGVycy5ib29sZWFuID0gZnVuY3Rpb24gKFYpIHtcbiAgLy8gMS4gTGV0IHggYmUgdGhlIHJlc3VsdCBvZiBjb21wdXRpbmcgVG9Cb29sZWFuKFYpLlxuICBjb25zdCB4ID0gQm9vbGVhbihWKVxuXG4gIC8vIDIuIFJldHVybiB0aGUgSURMIGJvb2xlYW4gdmFsdWUgdGhhdCBpcyB0aGUgb25lIHRoYXQgcmVwcmVzZW50c1xuICAvLyAgICB0aGUgc2FtZSB0cnV0aCB2YWx1ZSBhcyB0aGUgRUNNQVNjcmlwdCBCb29sZWFuIHZhbHVlIHguXG4gIHJldHVybiB4XG59XG5cbi8vIGh0dHBzOi8vd2ViaWRsLnNwZWMud2hhdHdnLm9yZy8jZXMtYW55XG53ZWJpZGwuY29udmVydGVycy5hbnkgPSBmdW5jdGlvbiAoVikge1xuICByZXR1cm4gVlxufVxuXG4vLyBodHRwczovL3dlYmlkbC5zcGVjLndoYXR3Zy5vcmcvI2VzLWxvbmctbG9uZ1xud2ViaWRsLmNvbnZlcnRlcnNbJ2xvbmcgbG9uZyddID0gZnVuY3Rpb24gKFYsIHByZWZpeCwgYXJndW1lbnQpIHtcbiAgLy8gMS4gTGV0IHggYmUgPyBDb252ZXJ0VG9JbnQoViwgNjQsIFwic2lnbmVkXCIpLlxuICBjb25zdCB4ID0gd2ViaWRsLnV0aWwuQ29udmVydFRvSW50KFYsIDY0LCAnc2lnbmVkJywgdW5kZWZpbmVkLCBwcmVmaXgsIGFyZ3VtZW50KVxuXG4gIC8vIDIuIFJldHVybiB0aGUgSURMIGxvbmcgbG9uZyB2YWx1ZSB0aGF0IHJlcHJlc2VudHNcbiAgLy8gICAgdGhlIHNhbWUgbnVtZXJpYyB2YWx1ZSBhcyB4LlxuICByZXR1cm4geFxufVxuXG4vLyBodHRwczovL3dlYmlkbC5zcGVjLndoYXR3Zy5vcmcvI2VzLXVuc2lnbmVkLWxvbmctbG9uZ1xud2ViaWRsLmNvbnZlcnRlcnNbJ3Vuc2lnbmVkIGxvbmcgbG9uZyddID0gZnVuY3Rpb24gKFYsIHByZWZpeCwgYXJndW1lbnQpIHtcbiAgLy8gMS4gTGV0IHggYmUgPyBDb252ZXJ0VG9JbnQoViwgNjQsIFwidW5zaWduZWRcIikuXG4gIGNvbnN0IHggPSB3ZWJpZGwudXRpbC5Db252ZXJ0VG9JbnQoViwgNjQsICd1bnNpZ25lZCcsIHVuZGVmaW5lZCwgcHJlZml4LCBhcmd1bWVudClcblxuICAvLyAyLiBSZXR1cm4gdGhlIElETCB1bnNpZ25lZCBsb25nIGxvbmcgdmFsdWUgdGhhdFxuICAvLyAgICByZXByZXNlbnRzIHRoZSBzYW1lIG51bWVyaWMgdmFsdWUgYXMgeC5cbiAgcmV0dXJuIHhcbn1cblxuLy8gaHR0cHM6Ly93ZWJpZGwuc3BlYy53aGF0d2cub3JnLyNlcy11bnNpZ25lZC1sb25nXG53ZWJpZGwuY29udmVydGVyc1sndW5zaWduZWQgbG9uZyddID0gZnVuY3Rpb24gKFYsIHByZWZpeCwgYXJndW1lbnQpIHtcbiAgLy8gMS4gTGV0IHggYmUgPyBDb252ZXJ0VG9JbnQoViwgMzIsIFwidW5zaWduZWRcIikuXG4gIGNvbnN0IHggPSB3ZWJpZGwudXRpbC5Db252ZXJ0VG9JbnQoViwgMzIsICd1bnNpZ25lZCcsIHVuZGVmaW5lZCwgcHJlZml4LCBhcmd1bWVudClcblxuICAvLyAyLiBSZXR1cm4gdGhlIElETCB1bnNpZ25lZCBsb25nIHZhbHVlIHRoYXRcbiAgLy8gICAgcmVwcmVzZW50cyB0aGUgc2FtZSBudW1lcmljIHZhbHVlIGFzIHguXG4gIHJldHVybiB4XG59XG5cbi8vIGh0dHBzOi8vd2ViaWRsLnNwZWMud2hhdHdnLm9yZy8jZXMtdW5zaWduZWQtc2hvcnRcbndlYmlkbC5jb252ZXJ0ZXJzWyd1bnNpZ25lZCBzaG9ydCddID0gZnVuY3Rpb24gKFYsIHByZWZpeCwgYXJndW1lbnQsIG9wdHMpIHtcbiAgLy8gMS4gTGV0IHggYmUgPyBDb252ZXJ0VG9JbnQoViwgMTYsIFwidW5zaWduZWRcIikuXG4gIGNvbnN0IHggPSB3ZWJpZGwudXRpbC5Db252ZXJ0VG9JbnQoViwgMTYsICd1bnNpZ25lZCcsIG9wdHMsIHByZWZpeCwgYXJndW1lbnQpXG5cbiAgLy8gMi4gUmV0dXJuIHRoZSBJREwgdW5zaWduZWQgc2hvcnQgdmFsdWUgdGhhdCByZXByZXNlbnRzXG4gIC8vICAgIHRoZSBzYW1lIG51bWVyaWMgdmFsdWUgYXMgeC5cbiAgcmV0dXJuIHhcbn1cblxuLy8gaHR0cHM6Ly93ZWJpZGwuc3BlYy53aGF0d2cub3JnLyNpZGwtQXJyYXlCdWZmZXJcbndlYmlkbC5jb252ZXJ0ZXJzLkFycmF5QnVmZmVyID0gZnVuY3Rpb24gKFYsIHByZWZpeCwgYXJndW1lbnQsIG9wdHMpIHtcbiAgLy8gMS4gSWYgVHlwZShWKSBpcyBub3QgT2JqZWN0LCBvciBWIGRvZXMgbm90IGhhdmUgYW5cbiAgLy8gICAgW1tBcnJheUJ1ZmZlckRhdGFdXSBpbnRlcm5hbCBzbG90LCB0aGVuIHRocm93IGFcbiAgLy8gICAgVHlwZUVycm9yLlxuICAvLyBzZWU6IGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtcHJvcGVydGllcy1vZi10aGUtYXJyYXlidWZmZXItaW5zdGFuY2VzXG4gIC8vIHNlZTogaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1wcm9wZXJ0aWVzLW9mLXRoZS1zaGFyZWRhcnJheWJ1ZmZlci1pbnN0YW5jZXNcbiAgaWYgKFxuICAgIHdlYmlkbC51dGlsLlR5cGUoVikgIT09ICdPYmplY3QnIHx8XG4gICAgIXR5cGVzLmlzQW55QXJyYXlCdWZmZXIoVilcbiAgKSB7XG4gICAgdGhyb3cgd2ViaWRsLmVycm9ycy5jb252ZXJzaW9uRmFpbGVkKHtcbiAgICAgIHByZWZpeCxcbiAgICAgIGFyZ3VtZW50OiBgJHthcmd1bWVudH0gKFwiJHt3ZWJpZGwudXRpbC5TdHJpbmdpZnkoVil9XCIpYCxcbiAgICAgIHR5cGVzOiBbJ0FycmF5QnVmZmVyJ11cbiAgICB9KVxuICB9XG5cbiAgLy8gMi4gSWYgdGhlIGNvbnZlcnNpb24gaXMgbm90IHRvIGFuIElETCB0eXBlIGFzc29jaWF0ZWRcbiAgLy8gICAgd2l0aCB0aGUgW0FsbG93U2hhcmVkXSBleHRlbmRlZCBhdHRyaWJ1dGUsIGFuZFxuICAvLyAgICBJc1NoYXJlZEFycmF5QnVmZmVyKFYpIGlzIHRydWUsIHRoZW4gdGhyb3cgYVxuICAvLyAgICBUeXBlRXJyb3IuXG4gIGlmIChvcHRzPy5hbGxvd1NoYXJlZCA9PT0gZmFsc2UgJiYgdHlwZXMuaXNTaGFyZWRBcnJheUJ1ZmZlcihWKSkge1xuICAgIHRocm93IHdlYmlkbC5lcnJvcnMuZXhjZXB0aW9uKHtcbiAgICAgIGhlYWRlcjogJ0FycmF5QnVmZmVyJyxcbiAgICAgIG1lc3NhZ2U6ICdTaGFyZWRBcnJheUJ1ZmZlciBpcyBub3QgYWxsb3dlZC4nXG4gICAgfSlcbiAgfVxuXG4gIC8vIDMuIElmIHRoZSBjb252ZXJzaW9uIGlzIG5vdCB0byBhbiBJREwgdHlwZSBhc3NvY2lhdGVkXG4gIC8vICAgIHdpdGggdGhlIFtBbGxvd1Jlc2l6YWJsZV0gZXh0ZW5kZWQgYXR0cmlidXRlLCBhbmRcbiAgLy8gICAgSXNSZXNpemFibGVBcnJheUJ1ZmZlcihWKSBpcyB0cnVlLCB0aGVuIHRocm93IGFcbiAgLy8gICAgVHlwZUVycm9yLlxuICBpZiAoVi5yZXNpemFibGUgfHwgVi5ncm93YWJsZSkge1xuICAgIHRocm93IHdlYmlkbC5lcnJvcnMuZXhjZXB0aW9uKHtcbiAgICAgIGhlYWRlcjogJ0FycmF5QnVmZmVyJyxcbiAgICAgIG1lc3NhZ2U6ICdSZWNlaXZlZCBhIHJlc2l6YWJsZSBBcnJheUJ1ZmZlci4nXG4gICAgfSlcbiAgfVxuXG4gIC8vIDQuIFJldHVybiB0aGUgSURMIEFycmF5QnVmZmVyIHZhbHVlIHRoYXQgaXMgYVxuICAvLyAgICByZWZlcmVuY2UgdG8gdGhlIHNhbWUgb2JqZWN0IGFzIFYuXG4gIHJldHVybiBWXG59XG5cbndlYmlkbC5jb252ZXJ0ZXJzLlR5cGVkQXJyYXkgPSBmdW5jdGlvbiAoViwgVCwgcHJlZml4LCBuYW1lLCBvcHRzKSB7XG4gIC8vIDEuIExldCBUIGJlIHRoZSBJREwgdHlwZSBWIGlzIGJlaW5nIGNvbnZlcnRlZCB0by5cblxuICAvLyAyLiBJZiBUeXBlKFYpIGlzIG5vdCBPYmplY3QsIG9yIFYgZG9lcyBub3QgaGF2ZSBhXG4gIC8vICAgIFtbVHlwZWRBcnJheU5hbWVdXSBpbnRlcm5hbCBzbG90IHdpdGggYSB2YWx1ZVxuICAvLyAgICBlcXVhbCB0byBUXHUyMDE5cyBuYW1lLCB0aGVuIHRocm93IGEgVHlwZUVycm9yLlxuICBpZiAoXG4gICAgd2ViaWRsLnV0aWwuVHlwZShWKSAhPT0gJ09iamVjdCcgfHxcbiAgICAhdHlwZXMuaXNUeXBlZEFycmF5KFYpIHx8XG4gICAgVi5jb25zdHJ1Y3Rvci5uYW1lICE9PSBULm5hbWVcbiAgKSB7XG4gICAgdGhyb3cgd2ViaWRsLmVycm9ycy5jb252ZXJzaW9uRmFpbGVkKHtcbiAgICAgIHByZWZpeCxcbiAgICAgIGFyZ3VtZW50OiBgJHtuYW1lfSAoXCIke3dlYmlkbC51dGlsLlN0cmluZ2lmeShWKX1cIilgLFxuICAgICAgdHlwZXM6IFtULm5hbWVdXG4gICAgfSlcbiAgfVxuXG4gIC8vIDMuIElmIHRoZSBjb252ZXJzaW9uIGlzIG5vdCB0byBhbiBJREwgdHlwZSBhc3NvY2lhdGVkXG4gIC8vICAgIHdpdGggdGhlIFtBbGxvd1NoYXJlZF0gZXh0ZW5kZWQgYXR0cmlidXRlLCBhbmRcbiAgLy8gICAgSXNTaGFyZWRBcnJheUJ1ZmZlcihWLltbVmlld2VkQXJyYXlCdWZmZXJdXSkgaXNcbiAgLy8gICAgdHJ1ZSwgdGhlbiB0aHJvdyBhIFR5cGVFcnJvci5cbiAgaWYgKG9wdHM/LmFsbG93U2hhcmVkID09PSBmYWxzZSAmJiB0eXBlcy5pc1NoYXJlZEFycmF5QnVmZmVyKFYuYnVmZmVyKSkge1xuICAgIHRocm93IHdlYmlkbC5lcnJvcnMuZXhjZXB0aW9uKHtcbiAgICAgIGhlYWRlcjogJ0FycmF5QnVmZmVyJyxcbiAgICAgIG1lc3NhZ2U6ICdTaGFyZWRBcnJheUJ1ZmZlciBpcyBub3QgYWxsb3dlZC4nXG4gICAgfSlcbiAgfVxuXG4gIC8vIDQuIElmIHRoZSBjb252ZXJzaW9uIGlzIG5vdCB0byBhbiBJREwgdHlwZSBhc3NvY2lhdGVkXG4gIC8vICAgIHdpdGggdGhlIFtBbGxvd1Jlc2l6YWJsZV0gZXh0ZW5kZWQgYXR0cmlidXRlLCBhbmRcbiAgLy8gICAgSXNSZXNpemFibGVBcnJheUJ1ZmZlcihWLltbVmlld2VkQXJyYXlCdWZmZXJdXSkgaXNcbiAgLy8gICAgdHJ1ZSwgdGhlbiB0aHJvdyBhIFR5cGVFcnJvci5cbiAgaWYgKFYuYnVmZmVyLnJlc2l6YWJsZSB8fCBWLmJ1ZmZlci5ncm93YWJsZSkge1xuICAgIHRocm93IHdlYmlkbC5lcnJvcnMuZXhjZXB0aW9uKHtcbiAgICAgIGhlYWRlcjogJ0FycmF5QnVmZmVyJyxcbiAgICAgIG1lc3NhZ2U6ICdSZWNlaXZlZCBhIHJlc2l6YWJsZSBBcnJheUJ1ZmZlci4nXG4gICAgfSlcbiAgfVxuXG4gIC8vIDUuIFJldHVybiB0aGUgSURMIHZhbHVlIG9mIHR5cGUgVCB0aGF0IGlzIGEgcmVmZXJlbmNlXG4gIC8vICAgIHRvIHRoZSBzYW1lIG9iamVjdCBhcyBWLlxuICByZXR1cm4gVlxufVxuXG53ZWJpZGwuY29udmVydGVycy5EYXRhVmlldyA9IGZ1bmN0aW9uIChWLCBwcmVmaXgsIG5hbWUsIG9wdHMpIHtcbiAgLy8gMS4gSWYgVHlwZShWKSBpcyBub3QgT2JqZWN0LCBvciBWIGRvZXMgbm90IGhhdmUgYVxuICAvLyAgICBbW0RhdGFWaWV3XV0gaW50ZXJuYWwgc2xvdCwgdGhlbiB0aHJvdyBhIFR5cGVFcnJvci5cbiAgaWYgKHdlYmlkbC51dGlsLlR5cGUoVikgIT09ICdPYmplY3QnIHx8ICF0eXBlcy5pc0RhdGFWaWV3KFYpKSB7XG4gICAgdGhyb3cgd2ViaWRsLmVycm9ycy5leGNlcHRpb24oe1xuICAgICAgaGVhZGVyOiBwcmVmaXgsXG4gICAgICBtZXNzYWdlOiBgJHtuYW1lfSBpcyBub3QgYSBEYXRhVmlldy5gXG4gICAgfSlcbiAgfVxuXG4gIC8vIDIuIElmIHRoZSBjb252ZXJzaW9uIGlzIG5vdCB0byBhbiBJREwgdHlwZSBhc3NvY2lhdGVkXG4gIC8vICAgIHdpdGggdGhlIFtBbGxvd1NoYXJlZF0gZXh0ZW5kZWQgYXR0cmlidXRlLCBhbmRcbiAgLy8gICAgSXNTaGFyZWRBcnJheUJ1ZmZlcihWLltbVmlld2VkQXJyYXlCdWZmZXJdXSkgaXMgdHJ1ZSxcbiAgLy8gICAgdGhlbiB0aHJvdyBhIFR5cGVFcnJvci5cbiAgaWYgKG9wdHM/LmFsbG93U2hhcmVkID09PSBmYWxzZSAmJiB0eXBlcy5pc1NoYXJlZEFycmF5QnVmZmVyKFYuYnVmZmVyKSkge1xuICAgIHRocm93IHdlYmlkbC5lcnJvcnMuZXhjZXB0aW9uKHtcbiAgICAgIGhlYWRlcjogJ0FycmF5QnVmZmVyJyxcbiAgICAgIG1lc3NhZ2U6ICdTaGFyZWRBcnJheUJ1ZmZlciBpcyBub3QgYWxsb3dlZC4nXG4gICAgfSlcbiAgfVxuXG4gIC8vIDMuIElmIHRoZSBjb252ZXJzaW9uIGlzIG5vdCB0byBhbiBJREwgdHlwZSBhc3NvY2lhdGVkXG4gIC8vICAgIHdpdGggdGhlIFtBbGxvd1Jlc2l6YWJsZV0gZXh0ZW5kZWQgYXR0cmlidXRlLCBhbmRcbiAgLy8gICAgSXNSZXNpemFibGVBcnJheUJ1ZmZlcihWLltbVmlld2VkQXJyYXlCdWZmZXJdXSkgaXNcbiAgLy8gICAgdHJ1ZSwgdGhlbiB0aHJvdyBhIFR5cGVFcnJvci5cbiAgaWYgKFYuYnVmZmVyLnJlc2l6YWJsZSB8fCBWLmJ1ZmZlci5ncm93YWJsZSkge1xuICAgIHRocm93IHdlYmlkbC5lcnJvcnMuZXhjZXB0aW9uKHtcbiAgICAgIGhlYWRlcjogJ0FycmF5QnVmZmVyJyxcbiAgICAgIG1lc3NhZ2U6ICdSZWNlaXZlZCBhIHJlc2l6YWJsZSBBcnJheUJ1ZmZlci4nXG4gICAgfSlcbiAgfVxuXG4gIC8vIDQuIFJldHVybiB0aGUgSURMIERhdGFWaWV3IHZhbHVlIHRoYXQgaXMgYSByZWZlcmVuY2VcbiAgLy8gICAgdG8gdGhlIHNhbWUgb2JqZWN0IGFzIFYuXG4gIHJldHVybiBWXG59XG5cbi8vIGh0dHBzOi8vd2ViaWRsLnNwZWMud2hhdHdnLm9yZy8jQnVmZmVyU291cmNlXG53ZWJpZGwuY29udmVydGVycy5CdWZmZXJTb3VyY2UgPSBmdW5jdGlvbiAoViwgcHJlZml4LCBuYW1lLCBvcHRzKSB7XG4gIGlmICh0eXBlcy5pc0FueUFycmF5QnVmZmVyKFYpKSB7XG4gICAgcmV0dXJuIHdlYmlkbC5jb252ZXJ0ZXJzLkFycmF5QnVmZmVyKFYsIHByZWZpeCwgbmFtZSwgeyAuLi5vcHRzLCBhbGxvd1NoYXJlZDogZmFsc2UgfSlcbiAgfVxuXG4gIGlmICh0eXBlcy5pc1R5cGVkQXJyYXkoVikpIHtcbiAgICByZXR1cm4gd2ViaWRsLmNvbnZlcnRlcnMuVHlwZWRBcnJheShWLCBWLmNvbnN0cnVjdG9yLCBwcmVmaXgsIG5hbWUsIHsgLi4ub3B0cywgYWxsb3dTaGFyZWQ6IGZhbHNlIH0pXG4gIH1cblxuICBpZiAodHlwZXMuaXNEYXRhVmlldyhWKSkge1xuICAgIHJldHVybiB3ZWJpZGwuY29udmVydGVycy5EYXRhVmlldyhWLCBwcmVmaXgsIG5hbWUsIHsgLi4ub3B0cywgYWxsb3dTaGFyZWQ6IGZhbHNlIH0pXG4gIH1cblxuICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmNvbnZlcnNpb25GYWlsZWQoe1xuICAgIHByZWZpeCxcbiAgICBhcmd1bWVudDogYCR7bmFtZX0gKFwiJHt3ZWJpZGwudXRpbC5TdHJpbmdpZnkoVil9XCIpYCxcbiAgICB0eXBlczogWydCdWZmZXJTb3VyY2UnXVxuICB9KVxufVxuXG53ZWJpZGwuY29udmVydGVyc1snc2VxdWVuY2U8Qnl0ZVN0cmluZz4nXSA9IHdlYmlkbC5zZXF1ZW5jZUNvbnZlcnRlcihcbiAgd2ViaWRsLmNvbnZlcnRlcnMuQnl0ZVN0cmluZ1xuKVxuXG53ZWJpZGwuY29udmVydGVyc1snc2VxdWVuY2U8c2VxdWVuY2U8Qnl0ZVN0cmluZz4+J10gPSB3ZWJpZGwuc2VxdWVuY2VDb252ZXJ0ZXIoXG4gIHdlYmlkbC5jb252ZXJ0ZXJzWydzZXF1ZW5jZTxCeXRlU3RyaW5nPiddXG4pXG5cbndlYmlkbC5jb252ZXJ0ZXJzWydyZWNvcmQ8Qnl0ZVN0cmluZywgQnl0ZVN0cmluZz4nXSA9IHdlYmlkbC5yZWNvcmRDb252ZXJ0ZXIoXG4gIHdlYmlkbC5jb252ZXJ0ZXJzLkJ5dGVTdHJpbmcsXG4gIHdlYmlkbC5jb252ZXJ0ZXJzLkJ5dGVTdHJpbmdcbilcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIHdlYmlkbFxufVxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7IFRyYW5zZm9ybSB9ID0gcmVxdWlyZSgnbm9kZTpzdHJlYW0nKVxuY29uc3QgemxpYiA9IHJlcXVpcmUoJ25vZGU6emxpYicpXG5jb25zdCB7IHJlZGlyZWN0U3RhdHVzU2V0LCByZWZlcnJlclBvbGljeVNldDogcmVmZXJyZXJQb2xpY3lUb2tlbnMsIGJhZFBvcnRzU2V0IH0gPSByZXF1aXJlKCcuL2NvbnN0YW50cycpXG5jb25zdCB7IGdldEdsb2JhbE9yaWdpbiB9ID0gcmVxdWlyZSgnLi9nbG9iYWwnKVxuY29uc3QgeyBjb2xsZWN0QVNlcXVlbmNlT2ZDb2RlUG9pbnRzLCBjb2xsZWN0QW5IVFRQUXVvdGVkU3RyaW5nLCByZW1vdmVDaGFycywgcGFyc2VNSU1FVHlwZSB9ID0gcmVxdWlyZSgnLi9kYXRhLXVybCcpXG5jb25zdCB7IHBlcmZvcm1hbmNlIH0gPSByZXF1aXJlKCdub2RlOnBlcmZfaG9va3MnKVxuY29uc3QgeyBpc0Jsb2JMaWtlLCBSZWFkYWJsZVN0cmVhbUZyb20sIGlzVmFsaWRIVFRQVG9rZW4sIG5vcm1hbGl6ZWRNZXRob2RSZWNvcmRzQmFzZSB9ID0gcmVxdWlyZSgnLi4vLi4vY29yZS91dGlsJylcbmNvbnN0IGFzc2VydCA9IHJlcXVpcmUoJ25vZGU6YXNzZXJ0JylcbmNvbnN0IHsgaXNVaW50OEFycmF5IH0gPSByZXF1aXJlKCdub2RlOnV0aWwvdHlwZXMnKVxuY29uc3QgeyB3ZWJpZGwgfSA9IHJlcXVpcmUoJy4vd2ViaWRsJylcblxubGV0IHN1cHBvcnRlZEhhc2hlcyA9IFtdXG5cbi8vIGh0dHBzOi8vbm9kZWpzLm9yZy9hcGkvY3J5cHRvLmh0bWwjZGV0ZXJtaW5pbmctaWYtY3J5cHRvLXN1cHBvcnQtaXMtdW5hdmFpbGFibGVcbi8qKiBAdHlwZSB7aW1wb3J0KCdjcnlwdG8nKX0gKi9cbmxldCBjcnlwdG9cbnRyeSB7XG4gIGNyeXB0byA9IHJlcXVpcmUoJ25vZGU6Y3J5cHRvJylcbiAgY29uc3QgcG9zc2libGVSZWxldmFudEhhc2hlcyA9IFsnc2hhMjU2JywgJ3NoYTM4NCcsICdzaGE1MTInXVxuICBzdXBwb3J0ZWRIYXNoZXMgPSBjcnlwdG8uZ2V0SGFzaGVzKCkuZmlsdGVyKChoYXNoKSA9PiBwb3NzaWJsZVJlbGV2YW50SGFzaGVzLmluY2x1ZGVzKGhhc2gpKVxuLyogYzggaWdub3JlIG5leHQgMyAqL1xufSBjYXRjaCB7XG5cbn1cblxuZnVuY3Rpb24gcmVzcG9uc2VVUkwgKHJlc3BvbnNlKSB7XG4gIC8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNyZXNwb25zZXNcbiAgLy8gQSByZXNwb25zZSBoYXMgYW4gYXNzb2NpYXRlZCBVUkwuIEl0IGlzIGEgcG9pbnRlciB0byB0aGUgbGFzdCBVUkxcbiAgLy8gaW4gcmVzcG9uc2VcdTIwMTlzIFVSTCBsaXN0IGFuZCBudWxsIGlmIHJlc3BvbnNlXHUyMDE5cyBVUkwgbGlzdCBpcyBlbXB0eS5cbiAgY29uc3QgdXJsTGlzdCA9IHJlc3BvbnNlLnVybExpc3RcbiAgY29uc3QgbGVuZ3RoID0gdXJsTGlzdC5sZW5ndGhcbiAgcmV0dXJuIGxlbmd0aCA9PT0gMCA/IG51bGwgOiB1cmxMaXN0W2xlbmd0aCAtIDFdLnRvU3RyaW5nKClcbn1cblxuLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2NvbmNlcHQtcmVzcG9uc2UtbG9jYXRpb24tdXJsXG5mdW5jdGlvbiByZXNwb25zZUxvY2F0aW9uVVJMIChyZXNwb25zZSwgcmVxdWVzdEZyYWdtZW50KSB7XG4gIC8vIDEuIElmIHJlc3BvbnNlXHUyMDE5cyBzdGF0dXMgaXMgbm90IGEgcmVkaXJlY3Qgc3RhdHVzLCB0aGVuIHJldHVybiBudWxsLlxuICBpZiAoIXJlZGlyZWN0U3RhdHVzU2V0LmhhcyhyZXNwb25zZS5zdGF0dXMpKSB7XG4gICAgcmV0dXJuIG51bGxcbiAgfVxuXG4gIC8vIDIuIExldCBsb2NhdGlvbiBiZSB0aGUgcmVzdWx0IG9mIGV4dHJhY3RpbmcgaGVhZGVyIGxpc3QgdmFsdWVzIGdpdmVuXG4gIC8vIGBMb2NhdGlvbmAgYW5kIHJlc3BvbnNlXHUyMDE5cyBoZWFkZXIgbGlzdC5cbiAgbGV0IGxvY2F0aW9uID0gcmVzcG9uc2UuaGVhZGVyc0xpc3QuZ2V0KCdsb2NhdGlvbicsIHRydWUpXG5cbiAgLy8gMy4gSWYgbG9jYXRpb24gaXMgYSBoZWFkZXIgdmFsdWUsIHRoZW4gc2V0IGxvY2F0aW9uIHRvIHRoZSByZXN1bHQgb2ZcbiAgLy8gICAgcGFyc2luZyBsb2NhdGlvbiB3aXRoIHJlc3BvbnNlXHUyMDE5cyBVUkwuXG4gIGlmIChsb2NhdGlvbiAhPT0gbnVsbCAmJiBpc1ZhbGlkSGVhZGVyVmFsdWUobG9jYXRpb24pKSB7XG4gICAgaWYgKCFpc1ZhbGlkRW5jb2RlZFVSTChsb2NhdGlvbikpIHtcbiAgICAgIC8vIFNvbWUgd2Vic2l0ZXMgcmVzcG9uZCBsb2NhdGlvbiBoZWFkZXIgaW4gVVRGLTggZm9ybSB3aXRob3V0IGVuY29kaW5nIHRoZW0gYXMgQVNDSUlcbiAgICAgIC8vIGFuZCBtYWpvciBicm93c2VycyByZWRpcmVjdCB0aGVtIHRvIGNvcnJlY3RseSBVVEYtOCBlbmNvZGVkIGFkZHJlc3Nlcy5cbiAgICAgIC8vIEhlcmUsIHdlIGhhbmRsZSB0aGF0IGJlaGF2aW9yIGluIHRoZSBzYW1lIHdheS5cbiAgICAgIGxvY2F0aW9uID0gbm9ybWFsaXplQmluYXJ5U3RyaW5nVG9VdGY4KGxvY2F0aW9uKVxuICAgIH1cbiAgICBsb2NhdGlvbiA9IG5ldyBVUkwobG9jYXRpb24sIHJlc3BvbnNlVVJMKHJlc3BvbnNlKSlcbiAgfVxuXG4gIC8vIDQuIElmIGxvY2F0aW9uIGlzIGEgVVJMIHdob3NlIGZyYWdtZW50IGlzIG51bGwsIHRoZW4gc2V0IGxvY2F0aW9uXHUyMDE5c1xuICAvLyBmcmFnbWVudCB0byByZXF1ZXN0RnJhZ21lbnQuXG4gIGlmIChsb2NhdGlvbiAmJiAhbG9jYXRpb24uaGFzaCkge1xuICAgIGxvY2F0aW9uLmhhc2ggPSByZXF1ZXN0RnJhZ21lbnRcbiAgfVxuXG4gIC8vIDUuIFJldHVybiBsb2NhdGlvbi5cbiAgcmV0dXJuIGxvY2F0aW9uXG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL3d3dy5yZmMtZWRpdG9yLm9yZy9yZmMvcmZjMTczOCNzZWN0aW9uLTIuMlxuICogQHBhcmFtIHtzdHJpbmd9IHVybFxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIGlzVmFsaWRFbmNvZGVkVVJMICh1cmwpIHtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCB1cmwubGVuZ3RoOyArK2kpIHtcbiAgICBjb25zdCBjb2RlID0gdXJsLmNoYXJDb2RlQXQoaSlcblxuICAgIGlmIChcbiAgICAgIGNvZGUgPiAweDdFIHx8IC8vIE5vbi1VUy1BU0NJSSArIERFTFxuICAgICAgY29kZSA8IDB4MjAgLy8gQ29udHJvbCBjaGFyYWN0ZXJzIE5VTCAtIFVTXG4gICAgKSB7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRydWVcbn1cblxuLyoqXG4gKiBJZiBzdHJpbmcgY29udGFpbnMgbm9uLUFTQ0lJIGNoYXJhY3RlcnMsIGFzc3VtZXMgaXQncyBVVEYtOCBlbmNvZGVkIGFuZCBkZWNvZGVzIGl0LlxuICogU2luY2UgVVRGLTggaXMgYSBzdXBlcnNldCBvZiBBU0NJSSwgdGhpcyB3aWxsIHdvcmsgZm9yIEFTQ0lJIHN0cmluZ3MgYXMgd2VsbC5cbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuZnVuY3Rpb24gbm9ybWFsaXplQmluYXJ5U3RyaW5nVG9VdGY4ICh2YWx1ZSkge1xuICByZXR1cm4gQnVmZmVyLmZyb20odmFsdWUsICdiaW5hcnknKS50b1N0cmluZygndXRmOCcpXG59XG5cbi8qKiBAcmV0dXJucyB7VVJMfSAqL1xuZnVuY3Rpb24gcmVxdWVzdEN1cnJlbnRVUkwgKHJlcXVlc3QpIHtcbiAgcmV0dXJuIHJlcXVlc3QudXJsTGlzdFtyZXF1ZXN0LnVybExpc3QubGVuZ3RoIC0gMV1cbn1cblxuZnVuY3Rpb24gcmVxdWVzdEJhZFBvcnQgKHJlcXVlc3QpIHtcbiAgLy8gMS4gTGV0IHVybCBiZSByZXF1ZXN0XHUyMDE5cyBjdXJyZW50IFVSTC5cbiAgY29uc3QgdXJsID0gcmVxdWVzdEN1cnJlbnRVUkwocmVxdWVzdClcblxuICAvLyAyLiBJZiB1cmxcdTIwMTlzIHNjaGVtZSBpcyBhbiBIVFRQKFMpIHNjaGVtZSBhbmQgdXJsXHUyMDE5cyBwb3J0IGlzIGEgYmFkIHBvcnQsXG4gIC8vIHRoZW4gcmV0dXJuIGJsb2NrZWQuXG4gIGlmICh1cmxJc0h0dHBIdHRwc1NjaGVtZSh1cmwpICYmIGJhZFBvcnRzU2V0Lmhhcyh1cmwucG9ydCkpIHtcbiAgICByZXR1cm4gJ2Jsb2NrZWQnXG4gIH1cblxuICAvLyAzLiBSZXR1cm4gYWxsb3dlZC5cbiAgcmV0dXJuICdhbGxvd2VkJ1xufVxuXG5mdW5jdGlvbiBpc0Vycm9yTGlrZSAob2JqZWN0KSB7XG4gIHJldHVybiBvYmplY3QgaW5zdGFuY2VvZiBFcnJvciB8fCAoXG4gICAgb2JqZWN0Py5jb25zdHJ1Y3Rvcj8ubmFtZSA9PT0gJ0Vycm9yJyB8fFxuICAgIG9iamVjdD8uY29uc3RydWN0b3I/Lm5hbWUgPT09ICdET01FeGNlcHRpb24nXG4gIClcbn1cblxuLy8gQ2hlY2sgd2hldGhlciB8c3RhdHVzVGV4dHwgaXMgYSBCeXRlU3RyaW5nIGFuZFxuLy8gbWF0Y2hlcyB0aGUgUmVhc29uLVBocmFzZSB0b2tlbiBwcm9kdWN0aW9uLlxuLy8gUkZDIDI2MTY6IGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmMyNjE2XG4vLyBSRkMgNzIzMDogaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzcyMzBcbi8vIFwicmVhc29uLXBocmFzZSA9ICooIEhUQUIgLyBTUCAvIFZDSEFSIC8gb2JzLXRleHQgKVwiXG4vLyBodHRwczovL2dpdGh1Yi5jb20vY2hyb21pdW0vY2hyb21pdW0vYmxvYi85NC4wLjQ2MDQuMS90aGlyZF9wYXJ0eS9ibGluay9yZW5kZXJlci9jb3JlL2ZldGNoL3Jlc3BvbnNlLmNjI0wxMTZcbmZ1bmN0aW9uIGlzVmFsaWRSZWFzb25QaHJhc2UgKHN0YXR1c1RleHQpIHtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBzdGF0dXNUZXh0Lmxlbmd0aDsgKytpKSB7XG4gICAgY29uc3QgYyA9IHN0YXR1c1RleHQuY2hhckNvZGVBdChpKVxuICAgIGlmIChcbiAgICAgICEoXG4gICAgICAgIChcbiAgICAgICAgICBjID09PSAweDA5IHx8IC8vIEhUQUJcbiAgICAgICAgICAoYyA+PSAweDIwICYmIGMgPD0gMHg3ZSkgfHwgLy8gU1AgLyBWQ0hBUlxuICAgICAgICAgIChjID49IDB4ODAgJiYgYyA8PSAweGZmKVxuICAgICAgICApIC8vIG9icy10ZXh0XG4gICAgICApXG4gICAgKSB7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRydWVcbn1cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNoZWFkZXItbmFtZVxuICogQHBhcmFtIHtzdHJpbmd9IHBvdGVudGlhbFZhbHVlXG4gKi9cbmNvbnN0IGlzVmFsaWRIZWFkZXJOYW1lID0gaXNWYWxpZEhUVFBUb2tlblxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2hlYWRlci12YWx1ZVxuICogQHBhcmFtIHtzdHJpbmd9IHBvdGVudGlhbFZhbHVlXG4gKi9cbmZ1bmN0aW9uIGlzVmFsaWRIZWFkZXJWYWx1ZSAocG90ZW50aWFsVmFsdWUpIHtcbiAgLy8gLSBIYXMgbm8gbGVhZGluZyBvciB0cmFpbGluZyBIVFRQIHRhYiBvciBzcGFjZSBieXRlcy5cbiAgLy8gLSBDb250YWlucyBubyAweDAwIChOVUwpIG9yIEhUVFAgbmV3bGluZSBieXRlcy5cbiAgcmV0dXJuIChcbiAgICBwb3RlbnRpYWxWYWx1ZVswXSA9PT0gJ1xcdCcgfHxcbiAgICBwb3RlbnRpYWxWYWx1ZVswXSA9PT0gJyAnIHx8XG4gICAgcG90ZW50aWFsVmFsdWVbcG90ZW50aWFsVmFsdWUubGVuZ3RoIC0gMV0gPT09ICdcXHQnIHx8XG4gICAgcG90ZW50aWFsVmFsdWVbcG90ZW50aWFsVmFsdWUubGVuZ3RoIC0gMV0gPT09ICcgJyB8fFxuICAgIHBvdGVudGlhbFZhbHVlLmluY2x1ZGVzKCdcXG4nKSB8fFxuICAgIHBvdGVudGlhbFZhbHVlLmluY2x1ZGVzKCdcXHInKSB8fFxuICAgIHBvdGVudGlhbFZhbHVlLmluY2x1ZGVzKCdcXDAnKVxuICApID09PSBmYWxzZVxufVxuXG4vLyBodHRwczovL3czYy5naXRodWIuaW8vd2ViYXBwc2VjLXJlZmVycmVyLXBvbGljeS8jc2V0LXJlcXVlc3RzLXJlZmVycmVyLXBvbGljeS1vbi1yZWRpcmVjdFxuZnVuY3Rpb24gc2V0UmVxdWVzdFJlZmVycmVyUG9saWN5T25SZWRpcmVjdCAocmVxdWVzdCwgYWN0dWFsUmVzcG9uc2UpIHtcbiAgLy8gIEdpdmVuIGEgcmVxdWVzdCByZXF1ZXN0IGFuZCBhIHJlc3BvbnNlIGFjdHVhbFJlc3BvbnNlLCB0aGlzIGFsZ29yaXRobVxuICAvLyAgdXBkYXRlcyByZXF1ZXN0XHUyMDE5cyByZWZlcnJlciBwb2xpY3kgYWNjb3JkaW5nIHRvIHRoZSBSZWZlcnJlci1Qb2xpY3lcbiAgLy8gIGhlYWRlciAoaWYgYW55KSBpbiBhY3R1YWxSZXNwb25zZS5cblxuICAvLyAxLiBMZXQgcG9saWN5IGJlIHRoZSByZXN1bHQgb2YgZXhlY3V0aW5nIFx1MDBBNyA4LjEgUGFyc2UgYSByZWZlcnJlciBwb2xpY3lcbiAgLy8gZnJvbSBhIFJlZmVycmVyLVBvbGljeSBoZWFkZXIgb24gYWN0dWFsUmVzcG9uc2UuXG5cbiAgLy8gOC4xIFBhcnNlIGEgcmVmZXJyZXIgcG9saWN5IGZyb20gYSBSZWZlcnJlci1Qb2xpY3kgaGVhZGVyXG4gIC8vIDEuIExldCBwb2xpY3ktdG9rZW5zIGJlIHRoZSByZXN1bHQgb2YgZXh0cmFjdGluZyBoZWFkZXIgbGlzdCB2YWx1ZXMgZ2l2ZW4gYFJlZmVycmVyLVBvbGljeWAgYW5kIHJlc3BvbnNlXHUyMDE5cyBoZWFkZXIgbGlzdC5cbiAgY29uc3QgeyBoZWFkZXJzTGlzdCB9ID0gYWN0dWFsUmVzcG9uc2VcbiAgLy8gMi4gTGV0IHBvbGljeSBiZSB0aGUgZW1wdHkgc3RyaW5nLlxuICAvLyAzLiBGb3IgZWFjaCB0b2tlbiBpbiBwb2xpY3ktdG9rZW5zLCBpZiB0b2tlbiBpcyBhIHJlZmVycmVyIHBvbGljeSBhbmQgdG9rZW4gaXMgbm90IHRoZSBlbXB0eSBzdHJpbmcsIHRoZW4gc2V0IHBvbGljeSB0byB0b2tlbi5cbiAgLy8gNC4gUmV0dXJuIHBvbGljeS5cbiAgY29uc3QgcG9saWN5SGVhZGVyID0gKGhlYWRlcnNMaXN0LmdldCgncmVmZXJyZXItcG9saWN5JywgdHJ1ZSkgPz8gJycpLnNwbGl0KCcsJylcblxuICAvLyBOb3RlOiBBcyB0aGUgcmVmZXJyZXItcG9saWN5IGNhbiBjb250YWluIG11bHRpcGxlIHBvbGljaWVzXG4gIC8vIHNlcGFyYXRlZCBieSBjb21tYSwgd2UgbmVlZCB0byBsb29wIHRocm91Z2ggYWxsIG9mIHRoZW1cbiAgLy8gYW5kIHBpY2sgdGhlIGZpcnN0IHZhbGlkIG9uZS5cbiAgLy8gUmVmOiBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVFRQL0hlYWRlcnMvUmVmZXJyZXItUG9saWN5I3NwZWNpZnlfYV9mYWxsYmFja19wb2xpY3lcbiAgbGV0IHBvbGljeSA9ICcnXG4gIGlmIChwb2xpY3lIZWFkZXIubGVuZ3RoID4gMCkge1xuICAgIC8vIFRoZSByaWdodC1tb3N0IHBvbGljeSB0YWtlcyBwcmVjZWRlbmNlLlxuICAgIC8vIFRoZSBsZWZ0LW1vc3QgcG9saWN5IGlzIHRoZSBmYWxsYmFjay5cbiAgICBmb3IgKGxldCBpID0gcG9saWN5SGVhZGVyLmxlbmd0aDsgaSAhPT0gMDsgaS0tKSB7XG4gICAgICBjb25zdCB0b2tlbiA9IHBvbGljeUhlYWRlcltpIC0gMV0udHJpbSgpXG4gICAgICBpZiAocmVmZXJyZXJQb2xpY3lUb2tlbnMuaGFzKHRva2VuKSkge1xuICAgICAgICBwb2xpY3kgPSB0b2tlblxuICAgICAgICBicmVha1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIDIuIElmIHBvbGljeSBpcyBub3QgdGhlIGVtcHR5IHN0cmluZywgdGhlbiBzZXQgcmVxdWVzdFx1MjAxOXMgcmVmZXJyZXIgcG9saWN5IHRvIHBvbGljeS5cbiAgaWYgKHBvbGljeSAhPT0gJycpIHtcbiAgICByZXF1ZXN0LnJlZmVycmVyUG9saWN5ID0gcG9saWN5XG4gIH1cbn1cblxuLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2Nyb3NzLW9yaWdpbi1yZXNvdXJjZS1wb2xpY3ktY2hlY2tcbmZ1bmN0aW9uIGNyb3NzT3JpZ2luUmVzb3VyY2VQb2xpY3lDaGVjayAoKSB7XG4gIC8vIFRPRE9cbiAgcmV0dXJuICdhbGxvd2VkJ1xufVxuXG4vLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jY29uY2VwdC1jb3JzLWNoZWNrXG5mdW5jdGlvbiBjb3JzQ2hlY2sgKCkge1xuICAvLyBUT0RPXG4gIHJldHVybiAnc3VjY2Vzcydcbn1cblxuLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2NvbmNlcHQtdGFvLWNoZWNrXG5mdW5jdGlvbiBUQU9DaGVjayAoKSB7XG4gIC8vIFRPRE9cbiAgcmV0dXJuICdzdWNjZXNzJ1xufVxuXG5mdW5jdGlvbiBhcHBlbmRGZXRjaE1ldGFkYXRhIChodHRwUmVxdWVzdCkge1xuICAvLyAgaHR0cHM6Ly93M2MuZ2l0aHViLmlvL3dlYmFwcHNlYy1mZXRjaC1tZXRhZGF0YS8jc2VjLWZldGNoLWRlc3QtaGVhZGVyXG4gIC8vICBUT0RPXG5cbiAgLy8gIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby93ZWJhcHBzZWMtZmV0Y2gtbWV0YWRhdGEvI3NlYy1mZXRjaC1tb2RlLWhlYWRlclxuXG4gIC8vICAxLiBBc3NlcnQ6IHJcdTIwMTlzIHVybCBpcyBhIHBvdGVudGlhbGx5IHRydXN0d29ydGh5IFVSTC5cbiAgLy8gIFRPRE9cblxuICAvLyAgMi4gTGV0IGhlYWRlciBiZSBhIFN0cnVjdHVyZWQgSGVhZGVyIHdob3NlIHZhbHVlIGlzIGEgdG9rZW4uXG4gIGxldCBoZWFkZXIgPSBudWxsXG5cbiAgLy8gIDMuIFNldCBoZWFkZXJcdTIwMTlzIHZhbHVlIHRvIHJcdTIwMTlzIG1vZGUuXG4gIGhlYWRlciA9IGh0dHBSZXF1ZXN0Lm1vZGVcblxuICAvLyAgNC4gU2V0IGEgc3RydWN0dXJlZCBmaWVsZCB2YWx1ZSBgU2VjLUZldGNoLU1vZGVgL2hlYWRlciBpbiByXHUyMDE5cyBoZWFkZXIgbGlzdC5cbiAgaHR0cFJlcXVlc3QuaGVhZGVyc0xpc3Quc2V0KCdzZWMtZmV0Y2gtbW9kZScsIGhlYWRlciwgdHJ1ZSlcblxuICAvLyAgaHR0cHM6Ly93M2MuZ2l0aHViLmlvL3dlYmFwcHNlYy1mZXRjaC1tZXRhZGF0YS8jc2VjLWZldGNoLXNpdGUtaGVhZGVyXG4gIC8vICBUT0RPXG5cbiAgLy8gIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby93ZWJhcHBzZWMtZmV0Y2gtbWV0YWRhdGEvI3NlYy1mZXRjaC11c2VyLWhlYWRlclxuICAvLyAgVE9ET1xufVxuXG4vLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jYXBwZW5kLWEtcmVxdWVzdC1vcmlnaW4taGVhZGVyXG5mdW5jdGlvbiBhcHBlbmRSZXF1ZXN0T3JpZ2luSGVhZGVyIChyZXF1ZXN0KSB7XG4gIC8vIDEuIExldCBzZXJpYWxpemVkT3JpZ2luIGJlIHRoZSByZXN1bHQgb2YgYnl0ZS1zZXJpYWxpemluZyBhIHJlcXVlc3Qgb3JpZ2luXG4gIC8vICAgIHdpdGggcmVxdWVzdC5cbiAgLy8gVE9ETzogaW1wbGVtZW50IFwiYnl0ZS1zZXJpYWxpemluZyBhIHJlcXVlc3Qgb3JpZ2luXCJcbiAgbGV0IHNlcmlhbGl6ZWRPcmlnaW4gPSByZXF1ZXN0Lm9yaWdpblxuXG4gIC8vIC0gXCInY2xpZW50JyBpcyBjaGFuZ2VkIHRvIGFuIG9yaWdpbiBkdXJpbmcgZmV0Y2hpbmcuXCJcbiAgLy8gICBUaGlzIGRvZXNuJ3QgaGFwcGVuIGluIHVuZGljaSAoaW4gbW9zdCBjYXNlcykgYmVjYXVzZSB1bmRpY2ksIGJ5IGRlZmF1bHQsXG4gIC8vICAgaGFzIG5vIGNvbmNlcHQgb2Ygb3JpZ2luLlxuICAvLyAtIHJlcXVlc3Qub3JpZ2luIGNhbiBhbHNvIGJlIHNldCB0byByZXF1ZXN0LmNsaWVudC5vcmlnaW4gKGNsaWVudCBiZWluZ1xuICAvLyAgIGFuIGVudmlyb25tZW50IHNldHRpbmdzIG9iamVjdCksIHdoaWNoIGlzIHVuZGVmaW5lZCB3aXRob3V0IHVzaW5nXG4gIC8vICAgc2V0R2xvYmFsT3JpZ2luLlxuICBpZiAoc2VyaWFsaXplZE9yaWdpbiA9PT0gJ2NsaWVudCcgfHwgc2VyaWFsaXplZE9yaWdpbiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuXG4gIH1cblxuICAvLyAyLiBJZiByZXF1ZXN0XHUyMDE5cyByZXNwb25zZSB0YWludGluZyBpcyBcImNvcnNcIiBvciByZXF1ZXN0XHUyMDE5cyBtb2RlIGlzIFwid2Vic29ja2V0XCIsXG4gIC8vICAgIHRoZW4gYXBwZW5kIChgT3JpZ2luYCwgc2VyaWFsaXplZE9yaWdpbikgdG8gcmVxdWVzdFx1MjAxOXMgaGVhZGVyIGxpc3QuXG4gIC8vIDMuIE90aGVyd2lzZSwgaWYgcmVxdWVzdFx1MjAxOXMgbWV0aG9kIGlzIG5laXRoZXIgYEdFVGAgbm9yIGBIRUFEYCwgdGhlbjpcbiAgaWYgKHJlcXVlc3QucmVzcG9uc2VUYWludGluZyA9PT0gJ2NvcnMnIHx8IHJlcXVlc3QubW9kZSA9PT0gJ3dlYnNvY2tldCcpIHtcbiAgICByZXF1ZXN0LmhlYWRlcnNMaXN0LmFwcGVuZCgnb3JpZ2luJywgc2VyaWFsaXplZE9yaWdpbiwgdHJ1ZSlcbiAgfSBlbHNlIGlmIChyZXF1ZXN0Lm1ldGhvZCAhPT0gJ0dFVCcgJiYgcmVxdWVzdC5tZXRob2QgIT09ICdIRUFEJykge1xuICAgIC8vIDEuIFN3aXRjaCBvbiByZXF1ZXN0XHUyMDE5cyByZWZlcnJlciBwb2xpY3k6XG4gICAgc3dpdGNoIChyZXF1ZXN0LnJlZmVycmVyUG9saWN5KSB7XG4gICAgICBjYXNlICduby1yZWZlcnJlcic6XG4gICAgICAgIC8vIFNldCBzZXJpYWxpemVkT3JpZ2luIHRvIGBudWxsYC5cbiAgICAgICAgc2VyaWFsaXplZE9yaWdpbiA9IG51bGxcbiAgICAgICAgYnJlYWtcbiAgICAgIGNhc2UgJ25vLXJlZmVycmVyLXdoZW4tZG93bmdyYWRlJzpcbiAgICAgIGNhc2UgJ3N0cmljdC1vcmlnaW4nOlxuICAgICAgY2FzZSAnc3RyaWN0LW9yaWdpbi13aGVuLWNyb3NzLW9yaWdpbic6XG4gICAgICAgIC8vIElmIHJlcXVlc3RcdTIwMTlzIG9yaWdpbiBpcyBhIHR1cGxlIG9yaWdpbiwgaXRzIHNjaGVtZSBpcyBcImh0dHBzXCIsIGFuZFxuICAgICAgICAvLyByZXF1ZXN0XHUyMDE5cyBjdXJyZW50IFVSTFx1MjAxOXMgc2NoZW1lIGlzIG5vdCBcImh0dHBzXCIsIHRoZW4gc2V0XG4gICAgICAgIC8vIHNlcmlhbGl6ZWRPcmlnaW4gdG8gYG51bGxgLlxuICAgICAgICBpZiAocmVxdWVzdC5vcmlnaW4gJiYgdXJsSGFzSHR0cHNTY2hlbWUocmVxdWVzdC5vcmlnaW4pICYmICF1cmxIYXNIdHRwc1NjaGVtZShyZXF1ZXN0Q3VycmVudFVSTChyZXF1ZXN0KSkpIHtcbiAgICAgICAgICBzZXJpYWxpemVkT3JpZ2luID0gbnVsbFxuICAgICAgICB9XG4gICAgICAgIGJyZWFrXG4gICAgICBjYXNlICdzYW1lLW9yaWdpbic6XG4gICAgICAgIC8vIElmIHJlcXVlc3RcdTIwMTlzIG9yaWdpbiBpcyBub3Qgc2FtZSBvcmlnaW4gd2l0aCByZXF1ZXN0XHUyMDE5cyBjdXJyZW50IFVSTFx1MjAxOXNcbiAgICAgICAgLy8gb3JpZ2luLCB0aGVuIHNldCBzZXJpYWxpemVkT3JpZ2luIHRvIGBudWxsYC5cbiAgICAgICAgaWYgKCFzYW1lT3JpZ2luKHJlcXVlc3QsIHJlcXVlc3RDdXJyZW50VVJMKHJlcXVlc3QpKSkge1xuICAgICAgICAgIHNlcmlhbGl6ZWRPcmlnaW4gPSBudWxsXG4gICAgICAgIH1cbiAgICAgICAgYnJlYWtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIC8vIERvIG5vdGhpbmcuXG4gICAgfVxuXG4gICAgLy8gMi4gQXBwZW5kIChgT3JpZ2luYCwgc2VyaWFsaXplZE9yaWdpbikgdG8gcmVxdWVzdFx1MjAxOXMgaGVhZGVyIGxpc3QuXG4gICAgcmVxdWVzdC5oZWFkZXJzTGlzdC5hcHBlbmQoJ29yaWdpbicsIHNlcmlhbGl6ZWRPcmlnaW4sIHRydWUpXG4gIH1cbn1cblxuLy8gaHR0cHM6Ly93M2MuZ2l0aHViLmlvL2hyLXRpbWUvI2Rmbi1jb2Fyc2VuLXRpbWVcbmZ1bmN0aW9uIGNvYXJzZW5UaW1lICh0aW1lc3RhbXAsIGNyb3NzT3JpZ2luSXNvbGF0ZWRDYXBhYmlsaXR5KSB7XG4gIC8vIFRPRE9cbiAgcmV0dXJuIHRpbWVzdGFtcFxufVxuXG4vLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jY2xhbXAtYW5kLWNvYXJzZW4tY29ubmVjdGlvbi10aW1pbmctaW5mb1xuZnVuY3Rpb24gY2xhbXBBbmRDb2Fyc2VuQ29ubmVjdGlvblRpbWluZ0luZm8gKGNvbm5lY3Rpb25UaW1pbmdJbmZvLCBkZWZhdWx0U3RhcnRUaW1lLCBjcm9zc09yaWdpbklzb2xhdGVkQ2FwYWJpbGl0eSkge1xuICBpZiAoIWNvbm5lY3Rpb25UaW1pbmdJbmZvPy5zdGFydFRpbWUgfHwgY29ubmVjdGlvblRpbWluZ0luZm8uc3RhcnRUaW1lIDwgZGVmYXVsdFN0YXJ0VGltZSkge1xuICAgIHJldHVybiB7XG4gICAgICBkb21haW5Mb29rdXBTdGFydFRpbWU6IGRlZmF1bHRTdGFydFRpbWUsXG4gICAgICBkb21haW5Mb29rdXBFbmRUaW1lOiBkZWZhdWx0U3RhcnRUaW1lLFxuICAgICAgY29ubmVjdGlvblN0YXJ0VGltZTogZGVmYXVsdFN0YXJ0VGltZSxcbiAgICAgIGNvbm5lY3Rpb25FbmRUaW1lOiBkZWZhdWx0U3RhcnRUaW1lLFxuICAgICAgc2VjdXJlQ29ubmVjdGlvblN0YXJ0VGltZTogZGVmYXVsdFN0YXJ0VGltZSxcbiAgICAgIEFMUE5OZWdvdGlhdGVkUHJvdG9jb2w6IGNvbm5lY3Rpb25UaW1pbmdJbmZvPy5BTFBOTmVnb3RpYXRlZFByb3RvY29sXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBkb21haW5Mb29rdXBTdGFydFRpbWU6IGNvYXJzZW5UaW1lKGNvbm5lY3Rpb25UaW1pbmdJbmZvLmRvbWFpbkxvb2t1cFN0YXJ0VGltZSwgY3Jvc3NPcmlnaW5Jc29sYXRlZENhcGFiaWxpdHkpLFxuICAgIGRvbWFpbkxvb2t1cEVuZFRpbWU6IGNvYXJzZW5UaW1lKGNvbm5lY3Rpb25UaW1pbmdJbmZvLmRvbWFpbkxvb2t1cEVuZFRpbWUsIGNyb3NzT3JpZ2luSXNvbGF0ZWRDYXBhYmlsaXR5KSxcbiAgICBjb25uZWN0aW9uU3RhcnRUaW1lOiBjb2Fyc2VuVGltZShjb25uZWN0aW9uVGltaW5nSW5mby5jb25uZWN0aW9uU3RhcnRUaW1lLCBjcm9zc09yaWdpbklzb2xhdGVkQ2FwYWJpbGl0eSksXG4gICAgY29ubmVjdGlvbkVuZFRpbWU6IGNvYXJzZW5UaW1lKGNvbm5lY3Rpb25UaW1pbmdJbmZvLmNvbm5lY3Rpb25FbmRUaW1lLCBjcm9zc09yaWdpbklzb2xhdGVkQ2FwYWJpbGl0eSksXG4gICAgc2VjdXJlQ29ubmVjdGlvblN0YXJ0VGltZTogY29hcnNlblRpbWUoY29ubmVjdGlvblRpbWluZ0luZm8uc2VjdXJlQ29ubmVjdGlvblN0YXJ0VGltZSwgY3Jvc3NPcmlnaW5Jc29sYXRlZENhcGFiaWxpdHkpLFxuICAgIEFMUE5OZWdvdGlhdGVkUHJvdG9jb2w6IGNvbm5lY3Rpb25UaW1pbmdJbmZvLkFMUE5OZWdvdGlhdGVkUHJvdG9jb2xcbiAgfVxufVxuXG4vLyBodHRwczovL3czYy5naXRodWIuaW8vaHItdGltZS8jZGZuLWNvYXJzZW5lZC1zaGFyZWQtY3VycmVudC10aW1lXG5mdW5jdGlvbiBjb2Fyc2VuZWRTaGFyZWRDdXJyZW50VGltZSAoY3Jvc3NPcmlnaW5Jc29sYXRlZENhcGFiaWxpdHkpIHtcbiAgcmV0dXJuIGNvYXJzZW5UaW1lKHBlcmZvcm1hbmNlLm5vdygpLCBjcm9zc09yaWdpbklzb2xhdGVkQ2FwYWJpbGl0eSlcbn1cblxuLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2NyZWF0ZS1hbi1vcGFxdWUtdGltaW5nLWluZm9cbmZ1bmN0aW9uIGNyZWF0ZU9wYXF1ZVRpbWluZ0luZm8gKHRpbWluZ0luZm8pIHtcbiAgcmV0dXJuIHtcbiAgICBzdGFydFRpbWU6IHRpbWluZ0luZm8uc3RhcnRUaW1lID8/IDAsXG4gICAgcmVkaXJlY3RTdGFydFRpbWU6IDAsXG4gICAgcmVkaXJlY3RFbmRUaW1lOiAwLFxuICAgIHBvc3RSZWRpcmVjdFN0YXJ0VGltZTogdGltaW5nSW5mby5zdGFydFRpbWUgPz8gMCxcbiAgICBmaW5hbFNlcnZpY2VXb3JrZXJTdGFydFRpbWU6IDAsXG4gICAgZmluYWxOZXR3b3JrUmVzcG9uc2VTdGFydFRpbWU6IDAsXG4gICAgZmluYWxOZXR3b3JrUmVxdWVzdFN0YXJ0VGltZTogMCxcbiAgICBlbmRUaW1lOiAwLFxuICAgIGVuY29kZWRCb2R5U2l6ZTogMCxcbiAgICBkZWNvZGVkQm9keVNpemU6IDAsXG4gICAgZmluYWxDb25uZWN0aW9uVGltaW5nSW5mbzogbnVsbFxuICB9XG59XG5cbi8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL29yaWdpbi5odG1sI3BvbGljeS1jb250YWluZXJcbmZ1bmN0aW9uIG1ha2VQb2xpY3lDb250YWluZXIgKCkge1xuICAvLyBOb3RlOiB0aGUgZmV0Y2ggc3BlYyBkb2Vzbid0IG1ha2UgdXNlIG9mIGVtYmVkZGVyIHBvbGljeSBvciBDU1AgbGlzdFxuICByZXR1cm4ge1xuICAgIHJlZmVycmVyUG9saWN5OiAnc3RyaWN0LW9yaWdpbi13aGVuLWNyb3NzLW9yaWdpbidcbiAgfVxufVxuXG4vLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9vcmlnaW4uaHRtbCNjbG9uZS1hLXBvbGljeS1jb250YWluZXJcbmZ1bmN0aW9uIGNsb25lUG9saWN5Q29udGFpbmVyIChwb2xpY3lDb250YWluZXIpIHtcbiAgcmV0dXJuIHtcbiAgICByZWZlcnJlclBvbGljeTogcG9saWN5Q29udGFpbmVyLnJlZmVycmVyUG9saWN5XG4gIH1cbn1cblxuLy8gaHR0cHM6Ly93M2MuZ2l0aHViLmlvL3dlYmFwcHNlYy1yZWZlcnJlci1wb2xpY3kvI2RldGVybWluZS1yZXF1ZXN0cy1yZWZlcnJlclxuZnVuY3Rpb24gZGV0ZXJtaW5lUmVxdWVzdHNSZWZlcnJlciAocmVxdWVzdCkge1xuICAvLyAxLiBMZXQgcG9saWN5IGJlIHJlcXVlc3QncyByZWZlcnJlciBwb2xpY3kuXG4gIGNvbnN0IHBvbGljeSA9IHJlcXVlc3QucmVmZXJyZXJQb2xpY3lcblxuICAvLyBOb3RlOiBwb2xpY3kgY2Fubm90IChzaG91bGRuJ3QpIGJlIG51bGwgb3IgYW4gZW1wdHkgc3RyaW5nLlxuICBhc3NlcnQocG9saWN5KVxuXG4gIC8vIDIuIExldCBlbnZpcm9ubWVudCBiZSByZXF1ZXN0XHUyMDE5cyBjbGllbnQuXG5cbiAgbGV0IHJlZmVycmVyU291cmNlID0gbnVsbFxuXG4gIC8vIDMuIFN3aXRjaCBvbiByZXF1ZXN0XHUyMDE5cyByZWZlcnJlcjpcbiAgaWYgKHJlcXVlc3QucmVmZXJyZXIgPT09ICdjbGllbnQnKSB7XG4gICAgLy8gTm90ZTogbm9kZSBpc24ndCBhIGJyb3dzZXIgYW5kIGRvZXNuJ3QgaW1wbGVtZW50IGRvY3VtZW50L2lmcmFtZXMsXG4gICAgLy8gc28gd2UgYnlwYXNzIHRoaXMgc3RlcCBhbmQgcmVwbGFjZSBpdCB3aXRoIG91ciBvd24uXG5cbiAgICBjb25zdCBnbG9iYWxPcmlnaW4gPSBnZXRHbG9iYWxPcmlnaW4oKVxuXG4gICAgaWYgKCFnbG9iYWxPcmlnaW4gfHwgZ2xvYmFsT3JpZ2luLm9yaWdpbiA9PT0gJ251bGwnKSB7XG4gICAgICByZXR1cm4gJ25vLXJlZmVycmVyJ1xuICAgIH1cblxuICAgIC8vIG5vdGU6IHdlIG5lZWQgdG8gY2xvbmUgaXQgYXMgaXQncyBtdXRhdGVkXG4gICAgcmVmZXJyZXJTb3VyY2UgPSBuZXcgVVJMKGdsb2JhbE9yaWdpbilcbiAgfSBlbHNlIGlmIChyZXF1ZXN0LnJlZmVycmVyIGluc3RhbmNlb2YgVVJMKSB7XG4gICAgLy8gTGV0IHJlZmVycmVyU291cmNlIGJlIHJlcXVlc3RcdTIwMTlzIHJlZmVycmVyLlxuICAgIHJlZmVycmVyU291cmNlID0gcmVxdWVzdC5yZWZlcnJlclxuICB9XG5cbiAgLy8gNC4gTGV0IHJlcXVlc3RcdTIwMTlzIHJlZmVycmVyVVJMIGJlIHRoZSByZXN1bHQgb2Ygc3RyaXBwaW5nIHJlZmVycmVyU291cmNlIGZvclxuICAvLyAgICB1c2UgYXMgYSByZWZlcnJlci5cbiAgbGV0IHJlZmVycmVyVVJMID0gc3RyaXBVUkxGb3JSZWZlcnJlcihyZWZlcnJlclNvdXJjZSlcblxuICAvLyA1LiBMZXQgcmVmZXJyZXJPcmlnaW4gYmUgdGhlIHJlc3VsdCBvZiBzdHJpcHBpbmcgcmVmZXJyZXJTb3VyY2UgZm9yIHVzZSBhc1xuICAvLyAgICBhIHJlZmVycmVyLCB3aXRoIHRoZSBvcmlnaW4tb25seSBmbGFnIHNldCB0byB0cnVlLlxuICBjb25zdCByZWZlcnJlck9yaWdpbiA9IHN0cmlwVVJMRm9yUmVmZXJyZXIocmVmZXJyZXJTb3VyY2UsIHRydWUpXG5cbiAgLy8gNi4gSWYgdGhlIHJlc3VsdCBvZiBzZXJpYWxpemluZyByZWZlcnJlclVSTCBpcyBhIHN0cmluZyB3aG9zZSBsZW5ndGggaXNcbiAgLy8gICAgZ3JlYXRlciB0aGFuIDQwOTYsIHNldCByZWZlcnJlclVSTCB0byByZWZlcnJlck9yaWdpbi5cbiAgaWYgKHJlZmVycmVyVVJMLnRvU3RyaW5nKCkubGVuZ3RoID4gNDA5Nikge1xuICAgIHJlZmVycmVyVVJMID0gcmVmZXJyZXJPcmlnaW5cbiAgfVxuXG4gIGNvbnN0IGFyZVNhbWVPcmlnaW4gPSBzYW1lT3JpZ2luKHJlcXVlc3QsIHJlZmVycmVyVVJMKVxuICBjb25zdCBpc05vblBvdGVudGlhbGx5VHJ1c3RXb3J0aHkgPSBpc1VSTFBvdGVudGlhbGx5VHJ1c3R3b3J0aHkocmVmZXJyZXJVUkwpICYmXG4gICAgIWlzVVJMUG90ZW50aWFsbHlUcnVzdHdvcnRoeShyZXF1ZXN0LnVybClcblxuICAvLyA4LiBFeGVjdXRlIHRoZSBzd2l0Y2ggc3RhdGVtZW50cyBjb3JyZXNwb25kaW5nIHRvIHRoZSB2YWx1ZSBvZiBwb2xpY3k6XG4gIHN3aXRjaCAocG9saWN5KSB7XG4gICAgY2FzZSAnb3JpZ2luJzogcmV0dXJuIHJlZmVycmVyT3JpZ2luICE9IG51bGwgPyByZWZlcnJlck9yaWdpbiA6IHN0cmlwVVJMRm9yUmVmZXJyZXIocmVmZXJyZXJTb3VyY2UsIHRydWUpXG4gICAgY2FzZSAndW5zYWZlLXVybCc6IHJldHVybiByZWZlcnJlclVSTFxuICAgIGNhc2UgJ3NhbWUtb3JpZ2luJzpcbiAgICAgIHJldHVybiBhcmVTYW1lT3JpZ2luID8gcmVmZXJyZXJPcmlnaW4gOiAnbm8tcmVmZXJyZXInXG4gICAgY2FzZSAnb3JpZ2luLXdoZW4tY3Jvc3Mtb3JpZ2luJzpcbiAgICAgIHJldHVybiBhcmVTYW1lT3JpZ2luID8gcmVmZXJyZXJVUkwgOiByZWZlcnJlck9yaWdpblxuICAgIGNhc2UgJ3N0cmljdC1vcmlnaW4td2hlbi1jcm9zcy1vcmlnaW4nOiB7XG4gICAgICBjb25zdCBjdXJyZW50VVJMID0gcmVxdWVzdEN1cnJlbnRVUkwocmVxdWVzdClcblxuICAgICAgLy8gMS4gSWYgdGhlIG9yaWdpbiBvZiByZWZlcnJlclVSTCBhbmQgdGhlIG9yaWdpbiBvZiByZXF1ZXN0XHUyMDE5cyBjdXJyZW50XG4gICAgICAvLyAgICBVUkwgYXJlIHRoZSBzYW1lLCB0aGVuIHJldHVybiByZWZlcnJlclVSTC5cbiAgICAgIGlmIChzYW1lT3JpZ2luKHJlZmVycmVyVVJMLCBjdXJyZW50VVJMKSkge1xuICAgICAgICByZXR1cm4gcmVmZXJyZXJVUkxcbiAgICAgIH1cblxuICAgICAgLy8gMi4gSWYgcmVmZXJyZXJVUkwgaXMgYSBwb3RlbnRpYWxseSB0cnVzdHdvcnRoeSBVUkwgYW5kIHJlcXVlc3RcdTIwMTlzXG4gICAgICAvLyAgICBjdXJyZW50IFVSTCBpcyBub3QgYSBwb3RlbnRpYWxseSB0cnVzdHdvcnRoeSBVUkwsIHRoZW4gcmV0dXJuIG5vXG4gICAgICAvLyAgICByZWZlcnJlci5cbiAgICAgIGlmIChpc1VSTFBvdGVudGlhbGx5VHJ1c3R3b3J0aHkocmVmZXJyZXJVUkwpICYmICFpc1VSTFBvdGVudGlhbGx5VHJ1c3R3b3J0aHkoY3VycmVudFVSTCkpIHtcbiAgICAgICAgcmV0dXJuICduby1yZWZlcnJlcidcbiAgICAgIH1cblxuICAgICAgLy8gMy4gUmV0dXJuIHJlZmVycmVyT3JpZ2luLlxuICAgICAgcmV0dXJuIHJlZmVycmVyT3JpZ2luXG4gICAgfVxuICAgIGNhc2UgJ3N0cmljdC1vcmlnaW4nOiAvLyBlc2xpbnQtZGlzYWJsZS1saW5lXG4gICAgICAvKipcbiAgICAgICAgICogMS4gSWYgcmVmZXJyZXJVUkwgaXMgYSBwb3RlbnRpYWxseSB0cnVzdHdvcnRoeSBVUkwgYW5kXG4gICAgICAgICAqIHJlcXVlc3RcdTIwMTlzIGN1cnJlbnQgVVJMIGlzIG5vdCBhIHBvdGVudGlhbGx5IHRydXN0d29ydGh5IFVSTCxcbiAgICAgICAgICogdGhlbiByZXR1cm4gbm8gcmVmZXJyZXIuXG4gICAgICAgICAqIDIuIFJldHVybiByZWZlcnJlck9yaWdpblxuICAgICAgICAqL1xuICAgIGNhc2UgJ25vLXJlZmVycmVyLXdoZW4tZG93bmdyYWRlJzogLy8gZXNsaW50LWRpc2FibGUtbGluZVxuICAgICAgLyoqXG4gICAgICAgKiAxLiBJZiByZWZlcnJlclVSTCBpcyBhIHBvdGVudGlhbGx5IHRydXN0d29ydGh5IFVSTCBhbmRcbiAgICAgICAqIHJlcXVlc3RcdTIwMTlzIGN1cnJlbnQgVVJMIGlzIG5vdCBhIHBvdGVudGlhbGx5IHRydXN0d29ydGh5IFVSTCxcbiAgICAgICAqIHRoZW4gcmV0dXJuIG5vIHJlZmVycmVyLlxuICAgICAgICogMi4gUmV0dXJuIHJlZmVycmVyT3JpZ2luXG4gICAgICAqL1xuXG4gICAgZGVmYXVsdDogLy8gZXNsaW50LWRpc2FibGUtbGluZVxuICAgICAgcmV0dXJuIGlzTm9uUG90ZW50aWFsbHlUcnVzdFdvcnRoeSA/ICduby1yZWZlcnJlcicgOiByZWZlcnJlck9yaWdpblxuICB9XG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL3czYy5naXRodWIuaW8vd2ViYXBwc2VjLXJlZmVycmVyLXBvbGljeS8jc3RyaXAtdXJsXG4gKiBAcGFyYW0ge1VSTH0gdXJsXG4gKiBAcGFyYW0ge2Jvb2xlYW58dW5kZWZpbmVkfSBvcmlnaW5Pbmx5XG4gKi9cbmZ1bmN0aW9uIHN0cmlwVVJMRm9yUmVmZXJyZXIgKHVybCwgb3JpZ2luT25seSkge1xuICAvLyAxLiBBc3NlcnQ6IHVybCBpcyBhIFVSTC5cbiAgYXNzZXJ0KHVybCBpbnN0YW5jZW9mIFVSTClcblxuICB1cmwgPSBuZXcgVVJMKHVybClcblxuICAvLyAyLiBJZiB1cmxcdTIwMTlzIHNjaGVtZSBpcyBhIGxvY2FsIHNjaGVtZSwgdGhlbiByZXR1cm4gbm8gcmVmZXJyZXIuXG4gIGlmICh1cmwucHJvdG9jb2wgPT09ICdmaWxlOicgfHwgdXJsLnByb3RvY29sID09PSAnYWJvdXQ6JyB8fCB1cmwucHJvdG9jb2wgPT09ICdibGFuazonKSB7XG4gICAgcmV0dXJuICduby1yZWZlcnJlcidcbiAgfVxuXG4gIC8vIDMuIFNldCB1cmxcdTIwMTlzIHVzZXJuYW1lIHRvIHRoZSBlbXB0eSBzdHJpbmcuXG4gIHVybC51c2VybmFtZSA9ICcnXG5cbiAgLy8gNC4gU2V0IHVybFx1MjAxOXMgcGFzc3dvcmQgdG8gdGhlIGVtcHR5IHN0cmluZy5cbiAgdXJsLnBhc3N3b3JkID0gJydcblxuICAvLyA1LiBTZXQgdXJsXHUyMDE5cyBmcmFnbWVudCB0byBudWxsLlxuICB1cmwuaGFzaCA9ICcnXG5cbiAgLy8gNi4gSWYgdGhlIG9yaWdpbi1vbmx5IGZsYWcgaXMgdHJ1ZSwgdGhlbjpcbiAgaWYgKG9yaWdpbk9ubHkpIHtcbiAgICAvLyAxLiBTZXQgdXJsXHUyMDE5cyBwYXRoIHRvIFx1MDBBQiB0aGUgZW1wdHkgc3RyaW5nIFx1MDBCQi5cbiAgICB1cmwucGF0aG5hbWUgPSAnJ1xuXG4gICAgLy8gMi4gU2V0IHVybFx1MjAxOXMgcXVlcnkgdG8gbnVsbC5cbiAgICB1cmwuc2VhcmNoID0gJydcbiAgfVxuXG4gIC8vIDcuIFJldHVybiB1cmwuXG4gIHJldHVybiB1cmxcbn1cblxuZnVuY3Rpb24gaXNVUkxQb3RlbnRpYWxseVRydXN0d29ydGh5ICh1cmwpIHtcbiAgaWYgKCEodXJsIGluc3RhbmNlb2YgVVJMKSkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgLy8gSWYgY2hpbGQgb2YgYWJvdXQsIHJldHVybiB0cnVlXG4gIGlmICh1cmwuaHJlZiA9PT0gJ2Fib3V0OmJsYW5rJyB8fCB1cmwuaHJlZiA9PT0gJ2Fib3V0OnNyY2RvYycpIHtcbiAgICByZXR1cm4gdHJ1ZVxuICB9XG5cbiAgLy8gSWYgc2NoZW1lIGlzIGRhdGEsIHJldHVybiB0cnVlXG4gIGlmICh1cmwucHJvdG9jb2wgPT09ICdkYXRhOicpIHJldHVybiB0cnVlXG5cbiAgLy8gSWYgZmlsZSwgcmV0dXJuIHRydWVcbiAgaWYgKHVybC5wcm90b2NvbCA9PT0gJ2ZpbGU6JykgcmV0dXJuIHRydWVcblxuICByZXR1cm4gaXNPcmlnaW5Qb3RlbnRpYWxseVRydXN0d29ydGh5KHVybC5vcmlnaW4pXG5cbiAgZnVuY3Rpb24gaXNPcmlnaW5Qb3RlbnRpYWxseVRydXN0d29ydGh5IChvcmlnaW4pIHtcbiAgICAvLyBJZiBvcmlnaW4gaXMgZXhwbGljaXRseSBudWxsLCByZXR1cm4gZmFsc2VcbiAgICBpZiAob3JpZ2luID09IG51bGwgfHwgb3JpZ2luID09PSAnbnVsbCcpIHJldHVybiBmYWxzZVxuXG4gICAgY29uc3Qgb3JpZ2luQXNVUkwgPSBuZXcgVVJMKG9yaWdpbilcblxuICAgIC8vIElmIHNlY3VyZSwgcmV0dXJuIHRydWVcbiAgICBpZiAob3JpZ2luQXNVUkwucHJvdG9jb2wgPT09ICdodHRwczonIHx8IG9yaWdpbkFzVVJMLnByb3RvY29sID09PSAnd3NzOicpIHtcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuXG4gICAgLy8gSWYgbG9jYWxob3N0IG9yIHZhcmlhbnRzLCByZXR1cm4gdHJ1ZVxuICAgIGlmICgvXjEyNyg/OlxcLlswLTldKyl7MCwyfVxcLlswLTldKyR8XlxcWyg/OjAqOikqPzo/MCoxXFxdJC8udGVzdChvcmlnaW5Bc1VSTC5ob3N0bmFtZSkgfHxcbiAgICAgKG9yaWdpbkFzVVJMLmhvc3RuYW1lID09PSAnbG9jYWxob3N0JyB8fCBvcmlnaW5Bc1VSTC5ob3N0bmFtZS5pbmNsdWRlcygnbG9jYWxob3N0LicpKSB8fFxuICAgICAob3JpZ2luQXNVUkwuaG9zdG5hbWUuZW5kc1dpdGgoJy5sb2NhbGhvc3QnKSkpIHtcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuXG4gICAgLy8gSWYgYW55IG90aGVyLCByZXR1cm4gZmFsc2VcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly93M2MuZ2l0aHViLmlvL3dlYmFwcHNlYy1zdWJyZXNvdXJjZS1pbnRlZ3JpdHkvI2RvZXMtcmVzcG9uc2UtbWF0Y2gtbWV0YWRhdGFsaXN0XG4gKiBAcGFyYW0ge1VpbnQ4QXJyYXl9IGJ5dGVzXG4gKiBAcGFyYW0ge3N0cmluZ30gbWV0YWRhdGFMaXN0XG4gKi9cbmZ1bmN0aW9uIGJ5dGVzTWF0Y2ggKGJ5dGVzLCBtZXRhZGF0YUxpc3QpIHtcbiAgLy8gSWYgbm9kZSBpcyBub3QgYnVpbHQgd2l0aCBPcGVuU1NMIHN1cHBvcnQsIHdlIGNhbm5vdCBjaGVja1xuICAvLyBhIHJlcXVlc3QncyBpbnRlZ3JpdHksIHNvIGFsbG93IGl0IGJ5IGRlZmF1bHQgKHRoZSBzcGVjIHdpbGxcbiAgLy8gYWxsb3cgcmVxdWVzdHMgaWYgYW4gaW52YWxpZCBoYXNoIGlzIGdpdmVuLCBhcyBwcmVjZWRlbmNlKS5cbiAgLyogaXN0YW5idWwgaWdub3JlIGlmOiBvbmx5IGlmIG5vZGUgaXMgYnVpbHQgd2l0aCAtLXdpdGhvdXQtc3NsICovXG4gIGlmIChjcnlwdG8gPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiB0cnVlXG4gIH1cblxuICAvLyAxLiBMZXQgcGFyc2VkTWV0YWRhdGEgYmUgdGhlIHJlc3VsdCBvZiBwYXJzaW5nIG1ldGFkYXRhTGlzdC5cbiAgY29uc3QgcGFyc2VkTWV0YWRhdGEgPSBwYXJzZU1ldGFkYXRhKG1ldGFkYXRhTGlzdClcblxuICAvLyAyLiBJZiBwYXJzZWRNZXRhZGF0YSBpcyBubyBtZXRhZGF0YSwgcmV0dXJuIHRydWUuXG4gIGlmIChwYXJzZWRNZXRhZGF0YSA9PT0gJ25vIG1ldGFkYXRhJykge1xuICAgIHJldHVybiB0cnVlXG4gIH1cblxuICAvLyAzLiBJZiByZXNwb25zZSBpcyBub3QgZWxpZ2libGUgZm9yIGludGVncml0eSB2YWxpZGF0aW9uLCByZXR1cm4gZmFsc2UuXG4gIC8vIFRPRE9cblxuICAvLyA0LiBJZiBwYXJzZWRNZXRhZGF0YSBpcyB0aGUgZW1wdHkgc2V0LCByZXR1cm4gdHJ1ZS5cbiAgaWYgKHBhcnNlZE1ldGFkYXRhLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiB0cnVlXG4gIH1cblxuICAvLyA1LiBMZXQgbWV0YWRhdGEgYmUgdGhlIHJlc3VsdCBvZiBnZXR0aW5nIHRoZSBzdHJvbmdlc3RcbiAgLy8gICAgbWV0YWRhdGEgZnJvbSBwYXJzZWRNZXRhZGF0YS5cbiAgY29uc3Qgc3Ryb25nZXN0ID0gZ2V0U3Ryb25nZXN0TWV0YWRhdGEocGFyc2VkTWV0YWRhdGEpXG4gIGNvbnN0IG1ldGFkYXRhID0gZmlsdGVyTWV0YWRhdGFMaXN0QnlBbGdvcml0aG0ocGFyc2VkTWV0YWRhdGEsIHN0cm9uZ2VzdClcblxuICAvLyA2LiBGb3IgZWFjaCBpdGVtIGluIG1ldGFkYXRhOlxuICBmb3IgKGNvbnN0IGl0ZW0gb2YgbWV0YWRhdGEpIHtcbiAgICAvLyAxLiBMZXQgYWxnb3JpdGhtIGJlIHRoZSBhbGcgY29tcG9uZW50IG9mIGl0ZW0uXG4gICAgY29uc3QgYWxnb3JpdGhtID0gaXRlbS5hbGdvXG5cbiAgICAvLyAyLiBMZXQgZXhwZWN0ZWRWYWx1ZSBiZSB0aGUgdmFsIGNvbXBvbmVudCBvZiBpdGVtLlxuICAgIGNvbnN0IGV4cGVjdGVkVmFsdWUgPSBpdGVtLmhhc2hcblxuICAgIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vd2ViLXBsYXRmb3JtLXRlc3RzL3dwdC9jb21taXQvZTRjNWNjN2E1ZTQ4MDkzMjIwNTI4ZGZkZDFjNDAxMmRjMzgzN2EwZVxuICAgIC8vIFwiYmUgbGliZXJhbCB3aXRoIHBhZGRpbmdcIi4gVGhpcyBpcyBhbm5veWluZywgYW5kIGl0J3Mgbm90IGV2ZW4gaW4gdGhlIHNwZWMuXG5cbiAgICAvLyAzLiBMZXQgYWN0dWFsVmFsdWUgYmUgdGhlIHJlc3VsdCBvZiBhcHBseWluZyBhbGdvcml0aG0gdG8gYnl0ZXMuXG4gICAgbGV0IGFjdHVhbFZhbHVlID0gY3J5cHRvLmNyZWF0ZUhhc2goYWxnb3JpdGhtKS51cGRhdGUoYnl0ZXMpLmRpZ2VzdCgnYmFzZTY0JylcblxuICAgIGlmIChhY3R1YWxWYWx1ZVthY3R1YWxWYWx1ZS5sZW5ndGggLSAxXSA9PT0gJz0nKSB7XG4gICAgICBpZiAoYWN0dWFsVmFsdWVbYWN0dWFsVmFsdWUubGVuZ3RoIC0gMl0gPT09ICc9Jykge1xuICAgICAgICBhY3R1YWxWYWx1ZSA9IGFjdHVhbFZhbHVlLnNsaWNlKDAsIC0yKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYWN0dWFsVmFsdWUgPSBhY3R1YWxWYWx1ZS5zbGljZSgwLCAtMSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyA0LiBJZiBhY3R1YWxWYWx1ZSBpcyBhIGNhc2Utc2Vuc2l0aXZlIG1hdGNoIGZvciBleHBlY3RlZFZhbHVlLFxuICAgIC8vICAgIHJldHVybiB0cnVlLlxuICAgIGlmIChjb21wYXJlQmFzZTY0TWl4ZWQoYWN0dWFsVmFsdWUsIGV4cGVjdGVkVmFsdWUpKSB7XG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cbiAgfVxuXG4gIC8vIDcuIFJldHVybiBmYWxzZS5cbiAgcmV0dXJuIGZhbHNlXG59XG5cbi8vIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby93ZWJhcHBzZWMtc3VicmVzb3VyY2UtaW50ZWdyaXR5LyNncmFtbWFyZGVmLWhhc2gtd2l0aC1vcHRpb25zXG4vLyBodHRwczovL3d3dy53My5vcmcvVFIvQ1NQMi8jc291cmNlLWxpc3Qtc3ludGF4XG4vLyBodHRwczovL3d3dy5yZmMtZWRpdG9yLm9yZy9yZmMvcmZjNTIzNCNhcHBlbmRpeC1CLjFcbmNvbnN0IHBhcnNlSGFzaFdpdGhPcHRpb25zID0gLyg/PGFsZ28+c2hhMjU2fHNoYTM4NHxzaGE1MTIpLSgoPzxoYXNoPltBLVphLXowLTkrL10rfFtBLVphLXowLTlfLV0rKT17MCwyfSg/Olxcc3wkKSggK1shLX5dKik/KT8vaVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly93M2MuZ2l0aHViLmlvL3dlYmFwcHNlYy1zdWJyZXNvdXJjZS1pbnRlZ3JpdHkvI3BhcnNlLW1ldGFkYXRhXG4gKiBAcGFyYW0ge3N0cmluZ30gbWV0YWRhdGFcbiAqL1xuZnVuY3Rpb24gcGFyc2VNZXRhZGF0YSAobWV0YWRhdGEpIHtcbiAgLy8gMS4gTGV0IHJlc3VsdCBiZSB0aGUgZW1wdHkgc2V0LlxuICAvKiogQHR5cGUge3sgYWxnbzogc3RyaW5nLCBoYXNoOiBzdHJpbmcgfVtdfSAqL1xuICBjb25zdCByZXN1bHQgPSBbXVxuXG4gIC8vIDIuIExldCBlbXB0eSBiZSBlcXVhbCB0byB0cnVlLlxuICBsZXQgZW1wdHkgPSB0cnVlXG5cbiAgLy8gMy4gRm9yIGVhY2ggdG9rZW4gcmV0dXJuZWQgYnkgc3BsaXR0aW5nIG1ldGFkYXRhIG9uIHNwYWNlczpcbiAgZm9yIChjb25zdCB0b2tlbiBvZiBtZXRhZGF0YS5zcGxpdCgnICcpKSB7XG4gICAgLy8gMS4gU2V0IGVtcHR5IHRvIGZhbHNlLlxuICAgIGVtcHR5ID0gZmFsc2VcblxuICAgIC8vIDIuIFBhcnNlIHRva2VuIGFzIGEgaGFzaC13aXRoLW9wdGlvbnMuXG4gICAgY29uc3QgcGFyc2VkVG9rZW4gPSBwYXJzZUhhc2hXaXRoT3B0aW9ucy5leGVjKHRva2VuKVxuXG4gICAgLy8gMy4gSWYgdG9rZW4gZG9lcyBub3QgcGFyc2UsIGNvbnRpbnVlIHRvIHRoZSBuZXh0IHRva2VuLlxuICAgIGlmIChcbiAgICAgIHBhcnNlZFRva2VuID09PSBudWxsIHx8XG4gICAgICBwYXJzZWRUb2tlbi5ncm91cHMgPT09IHVuZGVmaW5lZCB8fFxuICAgICAgcGFyc2VkVG9rZW4uZ3JvdXBzLmFsZ28gPT09IHVuZGVmaW5lZFxuICAgICkge1xuICAgICAgLy8gTm90ZTogQ2hyb21pdW0gYmxvY2tzIHRoZSByZXF1ZXN0IGF0IHRoaXMgcG9pbnQsIGJ1dCBGaXJlZm94XG4gICAgICAvLyBnaXZlcyBhIHdhcm5pbmcgdGhhdCBhbiBpbnZhbGlkIGludGVncml0eSB3YXMgZ2l2ZW4uIFRoZVxuICAgICAgLy8gY29ycmVjdCBiZWhhdmlvciBpcyB0byBpZ25vcmUgdGhlc2UsIGFuZCBzdWJzZXF1ZW50bHkgbm90XG4gICAgICAvLyBjaGVjayB0aGUgaW50ZWdyaXR5IG9mIHRoZSByZXNvdXJjZS5cbiAgICAgIGNvbnRpbnVlXG4gICAgfVxuXG4gICAgLy8gNC4gTGV0IGFsZ29yaXRobSBiZSB0aGUgaGFzaC1hbGdvIGNvbXBvbmVudCBvZiB0b2tlbi5cbiAgICBjb25zdCBhbGdvcml0aG0gPSBwYXJzZWRUb2tlbi5ncm91cHMuYWxnby50b0xvd2VyQ2FzZSgpXG5cbiAgICAvLyA1LiBJZiBhbGdvcml0aG0gaXMgYSBoYXNoIGZ1bmN0aW9uIHJlY29nbml6ZWQgYnkgdGhlIHVzZXJcbiAgICAvLyAgICBhZ2VudCwgYWRkIHRoZSBwYXJzZWQgdG9rZW4gdG8gcmVzdWx0LlxuICAgIGlmIChzdXBwb3J0ZWRIYXNoZXMuaW5jbHVkZXMoYWxnb3JpdGhtKSkge1xuICAgICAgcmVzdWx0LnB1c2gocGFyc2VkVG9rZW4uZ3JvdXBzKVxuICAgIH1cbiAgfVxuXG4gIC8vIDQuIFJldHVybiBubyBtZXRhZGF0YSBpZiBlbXB0eSBpcyB0cnVlLCBvdGhlcndpc2UgcmV0dXJuIHJlc3VsdC5cbiAgaWYgKGVtcHR5ID09PSB0cnVlKSB7XG4gICAgcmV0dXJuICdubyBtZXRhZGF0YSdcbiAgfVxuXG4gIHJldHVybiByZXN1bHRcbn1cblxuLyoqXG4gKiBAcGFyYW0ge3sgYWxnbzogJ3NoYTI1NicgfCAnc2hhMzg0JyB8ICdzaGE1MTInIH1bXX0gbWV0YWRhdGFMaXN0XG4gKi9cbmZ1bmN0aW9uIGdldFN0cm9uZ2VzdE1ldGFkYXRhIChtZXRhZGF0YUxpc3QpIHtcbiAgLy8gTGV0IGFsZ29yaXRobSBiZSB0aGUgYWxnbyBjb21wb25lbnQgb2YgdGhlIGZpcnN0IGl0ZW0gaW4gbWV0YWRhdGFMaXN0LlxuICAvLyBDYW4gYmUgc2hhMjU2XG4gIGxldCBhbGdvcml0aG0gPSBtZXRhZGF0YUxpc3RbMF0uYWxnb1xuICAvLyBJZiB0aGUgYWxnb3JpdGhtIGlzIHNoYTUxMiwgdGhlbiBpdCBpcyB0aGUgc3Ryb25nZXN0XG4gIC8vIGFuZCB3ZSBjYW4gcmV0dXJuIGltbWVkaWF0ZWx5XG4gIGlmIChhbGdvcml0aG1bM10gPT09ICc1Jykge1xuICAgIHJldHVybiBhbGdvcml0aG1cbiAgfVxuXG4gIGZvciAobGV0IGkgPSAxOyBpIDwgbWV0YWRhdGFMaXN0Lmxlbmd0aDsgKytpKSB7XG4gICAgY29uc3QgbWV0YWRhdGEgPSBtZXRhZGF0YUxpc3RbaV1cbiAgICAvLyBJZiB0aGUgYWxnb3JpdGhtIGlzIHNoYTUxMiwgdGhlbiBpdCBpcyB0aGUgc3Ryb25nZXN0XG4gICAgLy8gYW5kIHdlIGNhbiBicmVhayB0aGUgbG9vcCBpbW1lZGlhdGVseVxuICAgIGlmIChtZXRhZGF0YS5hbGdvWzNdID09PSAnNScpIHtcbiAgICAgIGFsZ29yaXRobSA9ICdzaGE1MTInXG4gICAgICBicmVha1xuICAgIC8vIElmIHRoZSBhbGdvcml0aG0gaXMgc2hhMzg0LCB0aGVuIGEgcG90ZW50aWFsIHNoYTI1NiBvciBzaGEzODQgaXMgaWdub3JlZFxuICAgIH0gZWxzZSBpZiAoYWxnb3JpdGhtWzNdID09PSAnMycpIHtcbiAgICAgIGNvbnRpbnVlXG4gICAgLy8gYWxnb3JpdGhtIGlzIHNoYTI1NiwgY2hlY2sgaWYgYWxnb3JpdGhtIGlzIHNoYTM4NCBhbmQgaWYgc28sIHNldCBpdCBhc1xuICAgIC8vIHRoZSBzdHJvbmdlc3RcbiAgICB9IGVsc2UgaWYgKG1ldGFkYXRhLmFsZ29bM10gPT09ICczJykge1xuICAgICAgYWxnb3JpdGhtID0gJ3NoYTM4NCdcbiAgICB9XG4gIH1cbiAgcmV0dXJuIGFsZ29yaXRobVxufVxuXG5mdW5jdGlvbiBmaWx0ZXJNZXRhZGF0YUxpc3RCeUFsZ29yaXRobSAobWV0YWRhdGFMaXN0LCBhbGdvcml0aG0pIHtcbiAgaWYgKG1ldGFkYXRhTGlzdC5sZW5ndGggPT09IDEpIHtcbiAgICByZXR1cm4gbWV0YWRhdGFMaXN0XG4gIH1cblxuICBsZXQgcG9zID0gMFxuICBmb3IgKGxldCBpID0gMDsgaSA8IG1ldGFkYXRhTGlzdC5sZW5ndGg7ICsraSkge1xuICAgIGlmIChtZXRhZGF0YUxpc3RbaV0uYWxnbyA9PT0gYWxnb3JpdGhtKSB7XG4gICAgICBtZXRhZGF0YUxpc3RbcG9zKytdID0gbWV0YWRhdGFMaXN0W2ldXG4gICAgfVxuICB9XG5cbiAgbWV0YWRhdGFMaXN0Lmxlbmd0aCA9IHBvc1xuXG4gIHJldHVybiBtZXRhZGF0YUxpc3Rcbn1cblxuLyoqXG4gKiBDb21wYXJlcyB0d28gYmFzZTY0IHN0cmluZ3MsIGFsbG93aW5nIGZvciBiYXNlNjR1cmxcbiAqIGluIHRoZSBzZWNvbmQgc3RyaW5nLlxuICpcbiogQHBhcmFtIHtzdHJpbmd9IGFjdHVhbFZhbHVlIGFsd2F5cyBiYXNlNjRcbiAqIEBwYXJhbSB7c3RyaW5nfSBleHBlY3RlZFZhbHVlIGJhc2U2NCBvciBiYXNlNjR1cmxcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5mdW5jdGlvbiBjb21wYXJlQmFzZTY0TWl4ZWQgKGFjdHVhbFZhbHVlLCBleHBlY3RlZFZhbHVlKSB7XG4gIGlmIChhY3R1YWxWYWx1ZS5sZW5ndGggIT09IGV4cGVjdGVkVmFsdWUubGVuZ3RoKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBhY3R1YWxWYWx1ZS5sZW5ndGg7ICsraSkge1xuICAgIGlmIChhY3R1YWxWYWx1ZVtpXSAhPT0gZXhwZWN0ZWRWYWx1ZVtpXSkge1xuICAgICAgaWYgKFxuICAgICAgICAoYWN0dWFsVmFsdWVbaV0gPT09ICcrJyAmJiBleHBlY3RlZFZhbHVlW2ldID09PSAnLScpIHx8XG4gICAgICAgIChhY3R1YWxWYWx1ZVtpXSA9PT0gJy8nICYmIGV4cGVjdGVkVmFsdWVbaV0gPT09ICdfJylcbiAgICAgICkge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRydWVcbn1cblxuLy8gaHR0cHM6Ly93M2MuZ2l0aHViLmlvL3dlYmFwcHNlYy11cGdyYWRlLWluc2VjdXJlLXJlcXVlc3RzLyN1cGdyYWRlLXJlcXVlc3RcbmZ1bmN0aW9uIHRyeVVwZ3JhZGVSZXF1ZXN0VG9BUG90ZW50aWFsbHlUcnVzdHdvcnRoeVVSTCAocmVxdWVzdCkge1xuICAvLyBUT0RPXG59XG5cbi8qKlxuICogQGxpbmsge2h0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL29yaWdpbi5odG1sI3NhbWUtb3JpZ2lufVxuICogQHBhcmFtIHtVUkx9IEFcbiAqIEBwYXJhbSB7VVJMfSBCXG4gKi9cbmZ1bmN0aW9uIHNhbWVPcmlnaW4gKEEsIEIpIHtcbiAgLy8gMS4gSWYgQSBhbmQgQiBhcmUgdGhlIHNhbWUgb3BhcXVlIG9yaWdpbiwgdGhlbiByZXR1cm4gdHJ1ZS5cbiAgaWYgKEEub3JpZ2luID09PSBCLm9yaWdpbiAmJiBBLm9yaWdpbiA9PT0gJ251bGwnKSB7XG4gICAgcmV0dXJuIHRydWVcbiAgfVxuXG4gIC8vIDIuIElmIEEgYW5kIEIgYXJlIGJvdGggdHVwbGUgb3JpZ2lucyBhbmQgdGhlaXIgc2NoZW1lcyxcbiAgLy8gICAgaG9zdHMsIGFuZCBwb3J0IGFyZSBpZGVudGljYWwsIHRoZW4gcmV0dXJuIHRydWUuXG4gIGlmIChBLnByb3RvY29sID09PSBCLnByb3RvY29sICYmIEEuaG9zdG5hbWUgPT09IEIuaG9zdG5hbWUgJiYgQS5wb3J0ID09PSBCLnBvcnQpIHtcbiAgICByZXR1cm4gdHJ1ZVxuICB9XG5cbiAgLy8gMy4gUmV0dXJuIGZhbHNlLlxuICByZXR1cm4gZmFsc2Vcbn1cblxuZnVuY3Rpb24gY3JlYXRlRGVmZXJyZWRQcm9taXNlICgpIHtcbiAgbGV0IHJlc1xuICBsZXQgcmVqXG4gIGNvbnN0IHByb21pc2UgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgcmVzID0gcmVzb2x2ZVxuICAgIHJlaiA9IHJlamVjdFxuICB9KVxuXG4gIHJldHVybiB7IHByb21pc2UsIHJlc29sdmU6IHJlcywgcmVqZWN0OiByZWogfVxufVxuXG5mdW5jdGlvbiBpc0Fib3J0ZWQgKGZldGNoUGFyYW1zKSB7XG4gIHJldHVybiBmZXRjaFBhcmFtcy5jb250cm9sbGVyLnN0YXRlID09PSAnYWJvcnRlZCdcbn1cblxuZnVuY3Rpb24gaXNDYW5jZWxsZWQgKGZldGNoUGFyYW1zKSB7XG4gIHJldHVybiBmZXRjaFBhcmFtcy5jb250cm9sbGVyLnN0YXRlID09PSAnYWJvcnRlZCcgfHxcbiAgICBmZXRjaFBhcmFtcy5jb250cm9sbGVyLnN0YXRlID09PSAndGVybWluYXRlZCdcbn1cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNjb25jZXB0LW1ldGhvZC1ub3JtYWxpemVcbiAqIEBwYXJhbSB7c3RyaW5nfSBtZXRob2RcbiAqL1xuZnVuY3Rpb24gbm9ybWFsaXplTWV0aG9kIChtZXRob2QpIHtcbiAgcmV0dXJuIG5vcm1hbGl6ZWRNZXRob2RSZWNvcmRzQmFzZVttZXRob2QudG9Mb3dlckNhc2UoKV0gPz8gbWV0aG9kXG59XG5cbi8vIGh0dHBzOi8vaW5mcmEuc3BlYy53aGF0d2cub3JnLyNzZXJpYWxpemUtYS1qYXZhc2NyaXB0LXZhbHVlLXRvLWEtanNvbi1zdHJpbmdcbmZ1bmN0aW9uIHNlcmlhbGl6ZUphdmFzY3JpcHRWYWx1ZVRvSlNPTlN0cmluZyAodmFsdWUpIHtcbiAgLy8gMS4gTGV0IHJlc3VsdCBiZSA/IENhbGwoJUpTT04uc3RyaW5naWZ5JSwgdW5kZWZpbmVkLCBcdTAwQUIgdmFsdWUgXHUwMEJCKS5cbiAgY29uc3QgcmVzdWx0ID0gSlNPTi5zdHJpbmdpZnkodmFsdWUpXG5cbiAgLy8gMi4gSWYgcmVzdWx0IGlzIHVuZGVmaW5lZCwgdGhlbiB0aHJvdyBhIFR5cGVFcnJvci5cbiAgaWYgKHJlc3VsdCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVmFsdWUgaXMgbm90IEpTT04gc2VyaWFsaXphYmxlJylcbiAgfVxuXG4gIC8vIDMuIEFzc2VydDogcmVzdWx0IGlzIGEgc3RyaW5nLlxuICBhc3NlcnQodHlwZW9mIHJlc3VsdCA9PT0gJ3N0cmluZycpXG5cbiAgLy8gNC4gUmV0dXJuIHJlc3VsdC5cbiAgcmV0dXJuIHJlc3VsdFxufVxuXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLSUyNWl0ZXJhdG9ycHJvdG90eXBlJTI1LW9iamVjdFxuY29uc3QgZXNJdGVyYXRvclByb3RvdHlwZSA9IE9iamVjdC5nZXRQcm90b3R5cGVPZihPYmplY3QuZ2V0UHJvdG90eXBlT2YoW11bU3ltYm9sLml0ZXJhdG9yXSgpKSlcblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vd2ViaWRsLnNwZWMud2hhdHdnLm9yZy8jZGZuLWl0ZXJhdG9yLXByb3RvdHlwZS1vYmplY3RcbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIG5hbWUgb2YgdGhlIGluc3RhbmNlXG4gKiBAcGFyYW0ge3N5bWJvbH0ga0ludGVybmFsSXRlcmF0b3JcbiAqIEBwYXJhbSB7c3RyaW5nIHwgbnVtYmVyfSBba2V5SW5kZXhdXG4gKiBAcGFyYW0ge3N0cmluZyB8IG51bWJlcn0gW3ZhbHVlSW5kZXhdXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUl0ZXJhdG9yIChuYW1lLCBrSW50ZXJuYWxJdGVyYXRvciwga2V5SW5kZXggPSAwLCB2YWx1ZUluZGV4ID0gMSkge1xuICBjbGFzcyBGYXN0SXRlcmFibGVJdGVyYXRvciB7XG4gICAgLyoqIEB0eXBlIHthbnl9ICovXG4gICAgI3RhcmdldFxuICAgIC8qKiBAdHlwZSB7J2tleScgfCAndmFsdWUnIHwgJ2tleSt2YWx1ZSd9ICovXG4gICAgI2tpbmRcbiAgICAvKiogQHR5cGUge251bWJlcn0gKi9cbiAgICAjaW5kZXhcblxuICAgIC8qKlxuICAgICAqIEBzZWUgaHR0cHM6Ly93ZWJpZGwuc3BlYy53aGF0d2cub3JnLyNkZm4tZGVmYXVsdC1pdGVyYXRvci1vYmplY3RcbiAgICAgKiBAcGFyYW0ge3Vua25vd259IHRhcmdldFxuICAgICAqIEBwYXJhbSB7J2tleScgfCAndmFsdWUnIHwgJ2tleSt2YWx1ZSd9IGtpbmRcbiAgICAgKi9cbiAgICBjb25zdHJ1Y3RvciAodGFyZ2V0LCBraW5kKSB7XG4gICAgICB0aGlzLiN0YXJnZXQgPSB0YXJnZXRcbiAgICAgIHRoaXMuI2tpbmQgPSBraW5kXG4gICAgICB0aGlzLiNpbmRleCA9IDBcbiAgICB9XG5cbiAgICBuZXh0ICgpIHtcbiAgICAgIC8vIDEuIExldCBpbnRlcmZhY2UgYmUgdGhlIGludGVyZmFjZSBmb3Igd2hpY2ggdGhlIGl0ZXJhdG9yIHByb3RvdHlwZSBvYmplY3QgZXhpc3RzLlxuICAgICAgLy8gMi4gTGV0IHRoaXNWYWx1ZSBiZSB0aGUgdGhpcyB2YWx1ZS5cbiAgICAgIC8vIDMuIExldCBvYmplY3QgYmUgPyBUb09iamVjdCh0aGlzVmFsdWUpLlxuICAgICAgLy8gNC4gSWYgb2JqZWN0IGlzIGEgcGxhdGZvcm0gb2JqZWN0LCB0aGVuIHBlcmZvcm0gYSBzZWN1cml0eVxuICAgICAgLy8gICAgY2hlY2ssIHBhc3Npbmc6XG4gICAgICAvLyA1LiBJZiBvYmplY3QgaXMgbm90IGEgZGVmYXVsdCBpdGVyYXRvciBvYmplY3QgZm9yIGludGVyZmFjZSxcbiAgICAgIC8vICAgIHRoZW4gdGhyb3cgYSBUeXBlRXJyb3IuXG4gICAgICBpZiAodHlwZW9mIHRoaXMgIT09ICdvYmplY3QnIHx8IHRoaXMgPT09IG51bGwgfHwgISgjdGFyZ2V0IGluIHRoaXMpKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAgICAgYCduZXh0JyBjYWxsZWQgb24gYW4gb2JqZWN0IHRoYXQgZG9lcyBub3QgaW1wbGVtZW50IGludGVyZmFjZSAke25hbWV9IEl0ZXJhdG9yLmBcbiAgICAgICAgKVxuICAgICAgfVxuXG4gICAgICAvLyA2LiBMZXQgaW5kZXggYmUgb2JqZWN0XHUyMDE5cyBpbmRleC5cbiAgICAgIC8vIDcuIExldCBraW5kIGJlIG9iamVjdFx1MjAxOXMga2luZC5cbiAgICAgIC8vIDguIExldCB2YWx1ZXMgYmUgb2JqZWN0XHUyMDE5cyB0YXJnZXQncyB2YWx1ZSBwYWlycyB0byBpdGVyYXRlIG92ZXIuXG4gICAgICBjb25zdCBpbmRleCA9IHRoaXMuI2luZGV4XG4gICAgICBjb25zdCB2YWx1ZXMgPSB0aGlzLiN0YXJnZXRba0ludGVybmFsSXRlcmF0b3JdXG5cbiAgICAgIC8vIDkuIExldCBsZW4gYmUgdGhlIGxlbmd0aCBvZiB2YWx1ZXMuXG4gICAgICBjb25zdCBsZW4gPSB2YWx1ZXMubGVuZ3RoXG5cbiAgICAgIC8vIDEwLiBJZiBpbmRleCBpcyBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gbGVuLCB0aGVuIHJldHVyblxuICAgICAgLy8gICAgIENyZWF0ZUl0ZXJSZXN1bHRPYmplY3QodW5kZWZpbmVkLCB0cnVlKS5cbiAgICAgIGlmIChpbmRleCA+PSBsZW4pIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICB2YWx1ZTogdW5kZWZpbmVkLFxuICAgICAgICAgIGRvbmU6IHRydWVcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyAxMS4gTGV0IHBhaXIgYmUgdGhlIGVudHJ5IGluIHZhbHVlcyBhdCBpbmRleCBpbmRleC5cbiAgICAgIGNvbnN0IHsgW2tleUluZGV4XToga2V5LCBbdmFsdWVJbmRleF06IHZhbHVlIH0gPSB2YWx1ZXNbaW5kZXhdXG5cbiAgICAgIC8vIDEyLiBTZXQgb2JqZWN0XHUyMDE5cyBpbmRleCB0byBpbmRleCArIDEuXG4gICAgICB0aGlzLiNpbmRleCA9IGluZGV4ICsgMVxuXG4gICAgICAvLyAxMy4gUmV0dXJuIHRoZSBpdGVyYXRvciByZXN1bHQgZm9yIHBhaXIgYW5kIGtpbmQuXG5cbiAgICAgIC8vIGh0dHBzOi8vd2ViaWRsLnNwZWMud2hhdHdnLm9yZy8jaXRlcmF0b3ItcmVzdWx0XG5cbiAgICAgIC8vIDEuIExldCByZXN1bHQgYmUgYSB2YWx1ZSBkZXRlcm1pbmVkIGJ5IHRoZSB2YWx1ZSBvZiBraW5kOlxuICAgICAgbGV0IHJlc3VsdFxuICAgICAgc3dpdGNoICh0aGlzLiNraW5kKSB7XG4gICAgICAgIGNhc2UgJ2tleSc6XG4gICAgICAgICAgLy8gMS4gTGV0IGlkbEtleSBiZSBwYWlyXHUyMDE5cyBrZXkuXG4gICAgICAgICAgLy8gMi4gTGV0IGtleSBiZSB0aGUgcmVzdWx0IG9mIGNvbnZlcnRpbmcgaWRsS2V5IHRvIGFuXG4gICAgICAgICAgLy8gICAgRUNNQVNjcmlwdCB2YWx1ZS5cbiAgICAgICAgICAvLyAzLiByZXN1bHQgaXMga2V5LlxuICAgICAgICAgIHJlc3VsdCA9IGtleVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgJ3ZhbHVlJzpcbiAgICAgICAgICAvLyAxLiBMZXQgaWRsVmFsdWUgYmUgcGFpclx1MjAxOXMgdmFsdWUuXG4gICAgICAgICAgLy8gMi4gTGV0IHZhbHVlIGJlIHRoZSByZXN1bHQgb2YgY29udmVydGluZyBpZGxWYWx1ZSB0b1xuICAgICAgICAgIC8vICAgIGFuIEVDTUFTY3JpcHQgdmFsdWUuXG4gICAgICAgICAgLy8gMy4gcmVzdWx0IGlzIHZhbHVlLlxuICAgICAgICAgIHJlc3VsdCA9IHZhbHVlXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAna2V5K3ZhbHVlJzpcbiAgICAgICAgICAvLyAxLiBMZXQgaWRsS2V5IGJlIHBhaXJcdTIwMTlzIGtleS5cbiAgICAgICAgICAvLyAyLiBMZXQgaWRsVmFsdWUgYmUgcGFpclx1MjAxOXMgdmFsdWUuXG4gICAgICAgICAgLy8gMy4gTGV0IGtleSBiZSB0aGUgcmVzdWx0IG9mIGNvbnZlcnRpbmcgaWRsS2V5IHRvIGFuXG4gICAgICAgICAgLy8gICAgRUNNQVNjcmlwdCB2YWx1ZS5cbiAgICAgICAgICAvLyA0LiBMZXQgdmFsdWUgYmUgdGhlIHJlc3VsdCBvZiBjb252ZXJ0aW5nIGlkbFZhbHVlIHRvXG4gICAgICAgICAgLy8gICAgYW4gRUNNQVNjcmlwdCB2YWx1ZS5cbiAgICAgICAgICAvLyA1LiBMZXQgYXJyYXkgYmUgISBBcnJheUNyZWF0ZSgyKS5cbiAgICAgICAgICAvLyA2LiBDYWxsICEgQ3JlYXRlRGF0YVByb3BlcnR5KGFycmF5LCBcIjBcIiwga2V5KS5cbiAgICAgICAgICAvLyA3LiBDYWxsICEgQ3JlYXRlRGF0YVByb3BlcnR5KGFycmF5LCBcIjFcIiwgdmFsdWUpLlxuICAgICAgICAgIC8vIDguIHJlc3VsdCBpcyBhcnJheS5cbiAgICAgICAgICByZXN1bHQgPSBba2V5LCB2YWx1ZV1cbiAgICAgICAgICBicmVha1xuICAgICAgfVxuXG4gICAgICAvLyAyLiBSZXR1cm4gQ3JlYXRlSXRlclJlc3VsdE9iamVjdChyZXN1bHQsIGZhbHNlKS5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIHZhbHVlOiByZXN1bHQsXG4gICAgICAgIGRvbmU6IGZhbHNlXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gaHR0cHM6Ly93ZWJpZGwuc3BlYy53aGF0d2cub3JnLyNkZm4taXRlcmF0b3ItcHJvdG90eXBlLW9iamVjdFxuICAvLyBAdHMtaWdub3JlXG4gIGRlbGV0ZSBGYXN0SXRlcmFibGVJdGVyYXRvci5wcm90b3R5cGUuY29uc3RydWN0b3JcblxuICBPYmplY3Quc2V0UHJvdG90eXBlT2YoRmFzdEl0ZXJhYmxlSXRlcmF0b3IucHJvdG90eXBlLCBlc0l0ZXJhdG9yUHJvdG90eXBlKVxuXG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEZhc3RJdGVyYWJsZUl0ZXJhdG9yLnByb3RvdHlwZSwge1xuICAgIFtTeW1ib2wudG9TdHJpbmdUYWddOiB7XG4gICAgICB3cml0YWJsZTogZmFsc2UsXG4gICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgIHZhbHVlOiBgJHtuYW1lfSBJdGVyYXRvcmBcbiAgICB9LFxuICAgIG5leHQ6IHsgd3JpdGFibGU6IHRydWUsIGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9XG4gIH0pXG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7dW5rbm93bn0gdGFyZ2V0XG4gICAqIEBwYXJhbSB7J2tleScgfCAndmFsdWUnIHwgJ2tleSt2YWx1ZSd9IGtpbmRcbiAgICogQHJldHVybnMge0l0ZXJhYmxlSXRlcmF0b3I8YW55Pn1cbiAgICovXG4gIHJldHVybiBmdW5jdGlvbiAodGFyZ2V0LCBraW5kKSB7XG4gICAgcmV0dXJuIG5ldyBGYXN0SXRlcmFibGVJdGVyYXRvcih0YXJnZXQsIGtpbmQpXG4gIH1cbn1cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vd2ViaWRsLnNwZWMud2hhdHdnLm9yZy8jZGZuLWl0ZXJhdG9yLXByb3RvdHlwZS1vYmplY3RcbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIG5hbWUgb2YgdGhlIGluc3RhbmNlXG4gKiBAcGFyYW0ge2FueX0gb2JqZWN0IGNsYXNzXG4gKiBAcGFyYW0ge3N5bWJvbH0ga0ludGVybmFsSXRlcmF0b3JcbiAqIEBwYXJhbSB7c3RyaW5nIHwgbnVtYmVyfSBba2V5SW5kZXhdXG4gKiBAcGFyYW0ge3N0cmluZyB8IG51bWJlcn0gW3ZhbHVlSW5kZXhdXG4gKi9cbmZ1bmN0aW9uIGl0ZXJhdG9yTWl4aW4gKG5hbWUsIG9iamVjdCwga0ludGVybmFsSXRlcmF0b3IsIGtleUluZGV4ID0gMCwgdmFsdWVJbmRleCA9IDEpIHtcbiAgY29uc3QgbWFrZUl0ZXJhdG9yID0gY3JlYXRlSXRlcmF0b3IobmFtZSwga0ludGVybmFsSXRlcmF0b3IsIGtleUluZGV4LCB2YWx1ZUluZGV4KVxuXG4gIGNvbnN0IHByb3BlcnRpZXMgPSB7XG4gICAga2V5czoge1xuICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgdmFsdWU6IGZ1bmN0aW9uIGtleXMgKCkge1xuICAgICAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBvYmplY3QpXG4gICAgICAgIHJldHVybiBtYWtlSXRlcmF0b3IodGhpcywgJ2tleScpXG4gICAgICB9XG4gICAgfSxcbiAgICB2YWx1ZXM6IHtcbiAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiB2YWx1ZXMgKCkge1xuICAgICAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBvYmplY3QpXG4gICAgICAgIHJldHVybiBtYWtlSXRlcmF0b3IodGhpcywgJ3ZhbHVlJylcbiAgICAgIH1cbiAgICB9LFxuICAgIGVudHJpZXM6IHtcbiAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgIHZhbHVlOiBmdW5jdGlvbiBlbnRyaWVzICgpIHtcbiAgICAgICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgb2JqZWN0KVxuICAgICAgICByZXR1cm4gbWFrZUl0ZXJhdG9yKHRoaXMsICdrZXkrdmFsdWUnKVxuICAgICAgfVxuICAgIH0sXG4gICAgZm9yRWFjaDoge1xuICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgdmFsdWU6IGZ1bmN0aW9uIGZvckVhY2ggKGNhbGxiYWNrZm4sIHRoaXNBcmcgPSBnbG9iYWxUaGlzKSB7XG4gICAgICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIG9iamVjdClcbiAgICAgICAgd2ViaWRsLmFyZ3VtZW50TGVuZ3RoQ2hlY2soYXJndW1lbnRzLCAxLCBgJHtuYW1lfS5mb3JFYWNoYClcbiAgICAgICAgaWYgKHR5cGVvZiBjYWxsYmFja2ZuICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgICAgICAgIGBGYWlsZWQgdG8gZXhlY3V0ZSAnZm9yRWFjaCcgb24gJyR7bmFtZX0nOiBwYXJhbWV0ZXIgMSBpcyBub3Qgb2YgdHlwZSAnRnVuY3Rpb24nLmBcbiAgICAgICAgICApXG4gICAgICAgIH1cbiAgICAgICAgZm9yIChjb25zdCB7IDA6IGtleSwgMTogdmFsdWUgfSBvZiBtYWtlSXRlcmF0b3IodGhpcywgJ2tleSt2YWx1ZScpKSB7XG4gICAgICAgICAgY2FsbGJhY2tmbi5jYWxsKHRoaXNBcmcsIHZhbHVlLCBrZXksIHRoaXMpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnRpZXMob2JqZWN0LnByb3RvdHlwZSwge1xuICAgIC4uLnByb3BlcnRpZXMsXG4gICAgW1N5bWJvbC5pdGVyYXRvcl06IHtcbiAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICB2YWx1ZTogcHJvcGVydGllcy5lbnRyaWVzLnZhbHVlXG4gICAgfVxuICB9KVxufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2JvZHktZnVsbHktcmVhZFxuICovXG5hc3luYyBmdW5jdGlvbiBmdWxseVJlYWRCb2R5IChib2R5LCBwcm9jZXNzQm9keSwgcHJvY2Vzc0JvZHlFcnJvcikge1xuICAvLyAxLiBJZiB0YXNrRGVzdGluYXRpb24gaXMgbnVsbCwgdGhlbiBzZXQgdGFza0Rlc3RpbmF0aW9uIHRvXG4gIC8vICAgIHRoZSByZXN1bHQgb2Ygc3RhcnRpbmcgYSBuZXcgcGFyYWxsZWwgcXVldWUuXG5cbiAgLy8gMi4gTGV0IHN1Y2Nlc3NTdGVwcyBnaXZlbiBhIGJ5dGUgc2VxdWVuY2UgYnl0ZXMgYmUgdG8gcXVldWUgYVxuICAvLyAgICBmZXRjaCB0YXNrIHRvIHJ1biBwcm9jZXNzQm9keSBnaXZlbiBieXRlcywgd2l0aCB0YXNrRGVzdGluYXRpb24uXG4gIGNvbnN0IHN1Y2Nlc3NTdGVwcyA9IHByb2Nlc3NCb2R5XG5cbiAgLy8gMy4gTGV0IGVycm9yU3RlcHMgYmUgdG8gcXVldWUgYSBmZXRjaCB0YXNrIHRvIHJ1biBwcm9jZXNzQm9keUVycm9yLFxuICAvLyAgICB3aXRoIHRhc2tEZXN0aW5hdGlvbi5cbiAgY29uc3QgZXJyb3JTdGVwcyA9IHByb2Nlc3NCb2R5RXJyb3JcblxuICAvLyA0LiBMZXQgcmVhZGVyIGJlIHRoZSByZXN1bHQgb2YgZ2V0dGluZyBhIHJlYWRlciBmb3IgYm9keVx1MjAxOXMgc3RyZWFtLlxuICAvLyAgICBJZiB0aGF0IHRocmV3IGFuIGV4Y2VwdGlvbiwgdGhlbiBydW4gZXJyb3JTdGVwcyB3aXRoIHRoYXRcbiAgLy8gICAgZXhjZXB0aW9uIGFuZCByZXR1cm4uXG4gIGxldCByZWFkZXJcblxuICB0cnkge1xuICAgIHJlYWRlciA9IGJvZHkuc3RyZWFtLmdldFJlYWRlcigpXG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBlcnJvclN0ZXBzKGUpXG4gICAgcmV0dXJuXG4gIH1cblxuICAvLyA1LiBSZWFkIGFsbCBieXRlcyBmcm9tIHJlYWRlciwgZ2l2ZW4gc3VjY2Vzc1N0ZXBzIGFuZCBlcnJvclN0ZXBzLlxuICB0cnkge1xuICAgIHN1Y2Nlc3NTdGVwcyhhd2FpdCByZWFkQWxsQnl0ZXMocmVhZGVyKSlcbiAgfSBjYXRjaCAoZSkge1xuICAgIGVycm9yU3RlcHMoZSlcbiAgfVxufVxuXG5mdW5jdGlvbiBpc1JlYWRhYmxlU3RyZWFtTGlrZSAoc3RyZWFtKSB7XG4gIHJldHVybiBzdHJlYW0gaW5zdGFuY2VvZiBSZWFkYWJsZVN0cmVhbSB8fCAoXG4gICAgc3RyZWFtW1N5bWJvbC50b1N0cmluZ1RhZ10gPT09ICdSZWFkYWJsZVN0cmVhbScgJiZcbiAgICB0eXBlb2Ygc3RyZWFtLnRlZSA9PT0gJ2Z1bmN0aW9uJ1xuICApXG59XG5cbi8qKlxuICogQHBhcmFtIHtSZWFkYWJsZVN0cmVhbUNvbnRyb2xsZXI8VWludDhBcnJheT59IGNvbnRyb2xsZXJcbiAqL1xuZnVuY3Rpb24gcmVhZGFibGVTdHJlYW1DbG9zZSAoY29udHJvbGxlcikge1xuICB0cnkge1xuICAgIGNvbnRyb2xsZXIuY2xvc2UoKVxuICAgIGNvbnRyb2xsZXIuYnlvYlJlcXVlc3Q/LnJlc3BvbmQoMClcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgLy8gVE9ETzogYWRkIGNvbW1lbnQgZXhwbGFpbmluZyB3aHkgdGhpcyBlcnJvciBvY2N1cnMuXG4gICAgaWYgKCFlcnIubWVzc2FnZS5pbmNsdWRlcygnQ29udHJvbGxlciBpcyBhbHJlYWR5IGNsb3NlZCcpICYmICFlcnIubWVzc2FnZS5pbmNsdWRlcygnUmVhZGFibGVTdHJlYW0gaXMgYWxyZWFkeSBjbG9zZWQnKSkge1xuICAgICAgdGhyb3cgZXJyXG4gICAgfVxuICB9XG59XG5cbmNvbnN0IGludmFsaWRJc29tb3JwaGljRW5jb2RlVmFsdWVSZWdleCA9IC9bXlxceDAwLVxceEZGXS8gLy8gZXNsaW50LWRpc2FibGUtbGluZVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly9pbmZyYS5zcGVjLndoYXR3Zy5vcmcvI2lzb21vcnBoaWMtZW5jb2RlXG4gKiBAcGFyYW0ge3N0cmluZ30gaW5wdXRcbiAqL1xuZnVuY3Rpb24gaXNvbW9ycGhpY0VuY29kZSAoaW5wdXQpIHtcbiAgLy8gMS4gQXNzZXJ0OiBpbnB1dCBjb250YWlucyBubyBjb2RlIHBvaW50cyBncmVhdGVyIHRoYW4gVSswMEZGLlxuICBhc3NlcnQoIWludmFsaWRJc29tb3JwaGljRW5jb2RlVmFsdWVSZWdleC50ZXN0KGlucHV0KSlcblxuICAvLyAyLiBSZXR1cm4gYSBieXRlIHNlcXVlbmNlIHdob3NlIGxlbmd0aCBpcyBlcXVhbCB0byBpbnB1dFx1MjAxOXMgY29kZVxuICAvLyAgICBwb2ludCBsZW5ndGggYW5kIHdob3NlIGJ5dGVzIGhhdmUgdGhlIHNhbWUgdmFsdWVzIGFzIHRoZVxuICAvLyAgICB2YWx1ZXMgb2YgaW5wdXRcdTIwMTlzIGNvZGUgcG9pbnRzLCBpbiB0aGUgc2FtZSBvcmRlclxuICByZXR1cm4gaW5wdXRcbn1cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vc3RyZWFtcy5zcGVjLndoYXR3Zy5vcmcvI3JlYWRhYmxlc3RyZWFtZGVmYXVsdHJlYWRlci1yZWFkLWFsbC1ieXRlc1xuICogQHNlZSBodHRwczovL3N0cmVhbXMuc3BlYy53aGF0d2cub3JnLyNyZWFkLWxvb3BcbiAqIEBwYXJhbSB7UmVhZGFibGVTdHJlYW1EZWZhdWx0UmVhZGVyfSByZWFkZXJcbiAqL1xuYXN5bmMgZnVuY3Rpb24gcmVhZEFsbEJ5dGVzIChyZWFkZXIpIHtcbiAgY29uc3QgYnl0ZXMgPSBbXVxuICBsZXQgYnl0ZUxlbmd0aCA9IDBcblxuICB3aGlsZSAodHJ1ZSkge1xuICAgIGNvbnN0IHsgZG9uZSwgdmFsdWU6IGNodW5rIH0gPSBhd2FpdCByZWFkZXIucmVhZCgpXG5cbiAgICBpZiAoZG9uZSkge1xuICAgICAgLy8gMS4gQ2FsbCBzdWNjZXNzU3RlcHMgd2l0aCBieXRlcy5cbiAgICAgIHJldHVybiBCdWZmZXIuY29uY2F0KGJ5dGVzLCBieXRlTGVuZ3RoKVxuICAgIH1cblxuICAgIC8vIDEuIElmIGNodW5rIGlzIG5vdCBhIFVpbnQ4QXJyYXkgb2JqZWN0LCBjYWxsIGZhaWx1cmVTdGVwc1xuICAgIC8vICAgIHdpdGggYSBUeXBlRXJyb3IgYW5kIGFib3J0IHRoZXNlIHN0ZXBzLlxuICAgIGlmICghaXNVaW50OEFycmF5KGNodW5rKSkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignUmVjZWl2ZWQgbm9uLVVpbnQ4QXJyYXkgY2h1bmsnKVxuICAgIH1cblxuICAgIC8vIDIuIEFwcGVuZCB0aGUgYnl0ZXMgcmVwcmVzZW50ZWQgYnkgY2h1bmsgdG8gYnl0ZXMuXG4gICAgYnl0ZXMucHVzaChjaHVuaylcbiAgICBieXRlTGVuZ3RoICs9IGNodW5rLmxlbmd0aFxuXG4gICAgLy8gMy4gUmVhZC1sb29wIGdpdmVuIHJlYWRlciwgYnl0ZXMsIHN1Y2Nlc3NTdGVwcywgYW5kIGZhaWx1cmVTdGVwcy5cbiAgfVxufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2lzLWxvY2FsXG4gKiBAcGFyYW0ge1VSTH0gdXJsXG4gKi9cbmZ1bmN0aW9uIHVybElzTG9jYWwgKHVybCkge1xuICBhc3NlcnQoJ3Byb3RvY29sJyBpbiB1cmwpIC8vIGVuc3VyZSBpdCdzIGEgdXJsIG9iamVjdFxuXG4gIGNvbnN0IHByb3RvY29sID0gdXJsLnByb3RvY29sXG5cbiAgcmV0dXJuIHByb3RvY29sID09PSAnYWJvdXQ6JyB8fCBwcm90b2NvbCA9PT0gJ2Jsb2I6JyB8fCBwcm90b2NvbCA9PT0gJ2RhdGE6J1xufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfFVSTH0gdXJsXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuZnVuY3Rpb24gdXJsSGFzSHR0cHNTY2hlbWUgKHVybCkge1xuICByZXR1cm4gKFxuICAgIChcbiAgICAgIHR5cGVvZiB1cmwgPT09ICdzdHJpbmcnICYmXG4gICAgICB1cmxbNV0gPT09ICc6JyAmJlxuICAgICAgdXJsWzBdID09PSAnaCcgJiZcbiAgICAgIHVybFsxXSA9PT0gJ3QnICYmXG4gICAgICB1cmxbMl0gPT09ICd0JyAmJlxuICAgICAgdXJsWzNdID09PSAncCcgJiZcbiAgICAgIHVybFs0XSA9PT0gJ3MnXG4gICAgKSB8fFxuICAgIHVybC5wcm90b2NvbCA9PT0gJ2h0dHBzOidcbiAgKVxufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2h0dHAtc2NoZW1lXG4gKiBAcGFyYW0ge1VSTH0gdXJsXG4gKi9cbmZ1bmN0aW9uIHVybElzSHR0cEh0dHBzU2NoZW1lICh1cmwpIHtcbiAgYXNzZXJ0KCdwcm90b2NvbCcgaW4gdXJsKSAvLyBlbnN1cmUgaXQncyBhIHVybCBvYmplY3RcblxuICBjb25zdCBwcm90b2NvbCA9IHVybC5wcm90b2NvbFxuXG4gIHJldHVybiBwcm90b2NvbCA9PT0gJ2h0dHA6JyB8fCBwcm90b2NvbCA9PT0gJ2h0dHBzOidcbn1cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNzaW1wbGUtcmFuZ2UtaGVhZGVyLXZhbHVlXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gYWxsb3dXaGl0ZXNwYWNlXG4gKi9cbmZ1bmN0aW9uIHNpbXBsZVJhbmdlSGVhZGVyVmFsdWUgKHZhbHVlLCBhbGxvd1doaXRlc3BhY2UpIHtcbiAgLy8gMS4gTGV0IGRhdGEgYmUgdGhlIGlzb21vcnBoaWMgZGVjb2Rpbmcgb2YgdmFsdWUuXG4gIC8vIE5vdGU6IGlzb21vcnBoaWMgZGVjb2RpbmcgdGFrZXMgYSBzZXF1ZW5jZSBvZiBieXRlcyAoaWUuIGEgVWludDhBcnJheSkgYW5kIHR1cm5zIGl0IGludG8gYSBzdHJpbmcsXG4gIC8vIG5vdGhpbmcgbW9yZS4gV2Ugb2J2aW91c2x5IGRvbid0IG5lZWQgdG8gZG8gdGhhdCBpZiB2YWx1ZSBpcyBhIHN0cmluZyBhbHJlYWR5LlxuICBjb25zdCBkYXRhID0gdmFsdWVcblxuICAvLyAyLiBJZiBkYXRhIGRvZXMgbm90IHN0YXJ0IHdpdGggXCJieXRlc1wiLCB0aGVuIHJldHVybiBmYWlsdXJlLlxuICBpZiAoIWRhdGEuc3RhcnRzV2l0aCgnYnl0ZXMnKSkge1xuICAgIHJldHVybiAnZmFpbHVyZSdcbiAgfVxuXG4gIC8vIDMuIExldCBwb3NpdGlvbiBiZSBhIHBvc2l0aW9uIHZhcmlhYmxlIGZvciBkYXRhLCBpbml0aWFsbHkgcG9pbnRpbmcgYXQgdGhlIDV0aCBjb2RlIHBvaW50IG9mIGRhdGEuXG4gIGNvbnN0IHBvc2l0aW9uID0geyBwb3NpdGlvbjogNSB9XG5cbiAgLy8gNC4gSWYgYWxsb3dXaGl0ZXNwYWNlIGlzIHRydWUsIGNvbGxlY3QgYSBzZXF1ZW5jZSBvZiBjb2RlIHBvaW50cyB0aGF0IGFyZSBIVFRQIHRhYiBvciBzcGFjZSxcbiAgLy8gICAgZnJvbSBkYXRhIGdpdmVuIHBvc2l0aW9uLlxuICBpZiAoYWxsb3dXaGl0ZXNwYWNlKSB7XG4gICAgY29sbGVjdEFTZXF1ZW5jZU9mQ29kZVBvaW50cyhcbiAgICAgIChjaGFyKSA9PiBjaGFyID09PSAnXFx0JyB8fCBjaGFyID09PSAnICcsXG4gICAgICBkYXRhLFxuICAgICAgcG9zaXRpb25cbiAgICApXG4gIH1cblxuICAvLyA1LiBJZiB0aGUgY29kZSBwb2ludCBhdCBwb3NpdGlvbiB3aXRoaW4gZGF0YSBpcyBub3QgVSswMDNEICg9KSwgdGhlbiByZXR1cm4gZmFpbHVyZS5cbiAgaWYgKGRhdGEuY2hhckNvZGVBdChwb3NpdGlvbi5wb3NpdGlvbikgIT09IDB4M0QpIHtcbiAgICByZXR1cm4gJ2ZhaWx1cmUnXG4gIH1cblxuICAvLyA2LiBBZHZhbmNlIHBvc2l0aW9uIGJ5IDEuXG4gIHBvc2l0aW9uLnBvc2l0aW9uKytcblxuICAvLyA3LiBJZiBhbGxvd1doaXRlc3BhY2UgaXMgdHJ1ZSwgY29sbGVjdCBhIHNlcXVlbmNlIG9mIGNvZGUgcG9pbnRzIHRoYXQgYXJlIEhUVFAgdGFiIG9yIHNwYWNlLCBmcm9tXG4gIC8vICAgIGRhdGEgZ2l2ZW4gcG9zaXRpb24uXG4gIGlmIChhbGxvd1doaXRlc3BhY2UpIHtcbiAgICBjb2xsZWN0QVNlcXVlbmNlT2ZDb2RlUG9pbnRzKFxuICAgICAgKGNoYXIpID0+IGNoYXIgPT09ICdcXHQnIHx8IGNoYXIgPT09ICcgJyxcbiAgICAgIGRhdGEsXG4gICAgICBwb3NpdGlvblxuICAgIClcbiAgfVxuXG4gIC8vIDguIExldCByYW5nZVN0YXJ0IGJlIHRoZSByZXN1bHQgb2YgY29sbGVjdGluZyBhIHNlcXVlbmNlIG9mIGNvZGUgcG9pbnRzIHRoYXQgYXJlIEFTQ0lJIGRpZ2l0cyxcbiAgLy8gICAgZnJvbSBkYXRhIGdpdmVuIHBvc2l0aW9uLlxuICBjb25zdCByYW5nZVN0YXJ0ID0gY29sbGVjdEFTZXF1ZW5jZU9mQ29kZVBvaW50cyhcbiAgICAoY2hhcikgPT4ge1xuICAgICAgY29uc3QgY29kZSA9IGNoYXIuY2hhckNvZGVBdCgwKVxuXG4gICAgICByZXR1cm4gY29kZSA+PSAweDMwICYmIGNvZGUgPD0gMHgzOVxuICAgIH0sXG4gICAgZGF0YSxcbiAgICBwb3NpdGlvblxuICApXG5cbiAgLy8gOS4gTGV0IHJhbmdlU3RhcnRWYWx1ZSBiZSByYW5nZVN0YXJ0LCBpbnRlcnByZXRlZCBhcyBkZWNpbWFsIG51bWJlciwgaWYgcmFuZ2VTdGFydCBpcyBub3QgdGhlXG4gIC8vICAgIGVtcHR5IHN0cmluZzsgb3RoZXJ3aXNlIG51bGwuXG4gIGNvbnN0IHJhbmdlU3RhcnRWYWx1ZSA9IHJhbmdlU3RhcnQubGVuZ3RoID8gTnVtYmVyKHJhbmdlU3RhcnQpIDogbnVsbFxuXG4gIC8vIDEwLiBJZiBhbGxvd1doaXRlc3BhY2UgaXMgdHJ1ZSwgY29sbGVjdCBhIHNlcXVlbmNlIG9mIGNvZGUgcG9pbnRzIHRoYXQgYXJlIEhUVFAgdGFiIG9yIHNwYWNlLFxuICAvLyAgICAgZnJvbSBkYXRhIGdpdmVuIHBvc2l0aW9uLlxuICBpZiAoYWxsb3dXaGl0ZXNwYWNlKSB7XG4gICAgY29sbGVjdEFTZXF1ZW5jZU9mQ29kZVBvaW50cyhcbiAgICAgIChjaGFyKSA9PiBjaGFyID09PSAnXFx0JyB8fCBjaGFyID09PSAnICcsXG4gICAgICBkYXRhLFxuICAgICAgcG9zaXRpb25cbiAgICApXG4gIH1cblxuICAvLyAxMS4gSWYgdGhlIGNvZGUgcG9pbnQgYXQgcG9zaXRpb24gd2l0aGluIGRhdGEgaXMgbm90IFUrMDAyRCAoLSksIHRoZW4gcmV0dXJuIGZhaWx1cmUuXG4gIGlmIChkYXRhLmNoYXJDb2RlQXQocG9zaXRpb24ucG9zaXRpb24pICE9PSAweDJEKSB7XG4gICAgcmV0dXJuICdmYWlsdXJlJ1xuICB9XG5cbiAgLy8gMTIuIEFkdmFuY2UgcG9zaXRpb24gYnkgMS5cbiAgcG9zaXRpb24ucG9zaXRpb24rK1xuXG4gIC8vIDEzLiBJZiBhbGxvd1doaXRlc3BhY2UgaXMgdHJ1ZSwgY29sbGVjdCBhIHNlcXVlbmNlIG9mIGNvZGUgcG9pbnRzIHRoYXQgYXJlIEhUVFAgdGFiXG4gIC8vICAgICBvciBzcGFjZSwgZnJvbSBkYXRhIGdpdmVuIHBvc2l0aW9uLlxuICAvLyBOb3RlIGZyb20gS2hhZnJhOiBpdHMgdGhlIHNhbWUgc3RlcCBhcyBpbiAjOCBhZ2FpbiBsb2xcbiAgaWYgKGFsbG93V2hpdGVzcGFjZSkge1xuICAgIGNvbGxlY3RBU2VxdWVuY2VPZkNvZGVQb2ludHMoXG4gICAgICAoY2hhcikgPT4gY2hhciA9PT0gJ1xcdCcgfHwgY2hhciA9PT0gJyAnLFxuICAgICAgZGF0YSxcbiAgICAgIHBvc2l0aW9uXG4gICAgKVxuICB9XG5cbiAgLy8gMTQuIExldCByYW5nZUVuZCBiZSB0aGUgcmVzdWx0IG9mIGNvbGxlY3RpbmcgYSBzZXF1ZW5jZSBvZiBjb2RlIHBvaW50cyB0aGF0IGFyZVxuICAvLyAgICAgQVNDSUkgZGlnaXRzLCBmcm9tIGRhdGEgZ2l2ZW4gcG9zaXRpb24uXG4gIC8vIE5vdGUgZnJvbSBLaGFmcmE6IHlvdSB3b3VsZG4ndCBndWVzcyBpdCwgYnV0IHRoaXMgaXMgYWxzbyB0aGUgc2FtZSBzdGVwIGFzICM4XG4gIGNvbnN0IHJhbmdlRW5kID0gY29sbGVjdEFTZXF1ZW5jZU9mQ29kZVBvaW50cyhcbiAgICAoY2hhcikgPT4ge1xuICAgICAgY29uc3QgY29kZSA9IGNoYXIuY2hhckNvZGVBdCgwKVxuXG4gICAgICByZXR1cm4gY29kZSA+PSAweDMwICYmIGNvZGUgPD0gMHgzOVxuICAgIH0sXG4gICAgZGF0YSxcbiAgICBwb3NpdGlvblxuICApXG5cbiAgLy8gMTUuIExldCByYW5nZUVuZFZhbHVlIGJlIHJhbmdlRW5kLCBpbnRlcnByZXRlZCBhcyBkZWNpbWFsIG51bWJlciwgaWYgcmFuZ2VFbmRcbiAgLy8gICAgIGlzIG5vdCB0aGUgZW1wdHkgc3RyaW5nOyBvdGhlcndpc2UgbnVsbC5cbiAgLy8gTm90ZSBmcm9tIEtoYWZyYTogVEhFIFNBTUUgU1RFUCwgQUdBSU4hISFcbiAgLy8gTm90ZTogd2h5IGludGVycHJldCBhcyBhIGRlY2ltYWwgaWYgd2Ugb25seSBjb2xsZWN0IGFzY2lpIGRpZ2l0cz9cbiAgY29uc3QgcmFuZ2VFbmRWYWx1ZSA9IHJhbmdlRW5kLmxlbmd0aCA/IE51bWJlcihyYW5nZUVuZCkgOiBudWxsXG5cbiAgLy8gMTYuIElmIHBvc2l0aW9uIGlzIG5vdCBwYXN0IHRoZSBlbmQgb2YgZGF0YSwgdGhlbiByZXR1cm4gZmFpbHVyZS5cbiAgaWYgKHBvc2l0aW9uLnBvc2l0aW9uIDwgZGF0YS5sZW5ndGgpIHtcbiAgICByZXR1cm4gJ2ZhaWx1cmUnXG4gIH1cblxuICAvLyAxNy4gSWYgcmFuZ2VFbmRWYWx1ZSBhbmQgcmFuZ2VTdGFydFZhbHVlIGFyZSBudWxsLCB0aGVuIHJldHVybiBmYWlsdXJlLlxuICBpZiAocmFuZ2VFbmRWYWx1ZSA9PT0gbnVsbCAmJiByYW5nZVN0YXJ0VmFsdWUgPT09IG51bGwpIHtcbiAgICByZXR1cm4gJ2ZhaWx1cmUnXG4gIH1cblxuICAvLyAxOC4gSWYgcmFuZ2VTdGFydFZhbHVlIGFuZCByYW5nZUVuZFZhbHVlIGFyZSBudW1iZXJzLCBhbmQgcmFuZ2VTdGFydFZhbHVlIGlzXG4gIC8vICAgICBncmVhdGVyIHRoYW4gcmFuZ2VFbmRWYWx1ZSwgdGhlbiByZXR1cm4gZmFpbHVyZS5cbiAgLy8gTm90ZTogLi4uIHdoZW4gY2FuIHRoZXkgbm90IGJlIG51bWJlcnM/XG4gIGlmIChyYW5nZVN0YXJ0VmFsdWUgPiByYW5nZUVuZFZhbHVlKSB7XG4gICAgcmV0dXJuICdmYWlsdXJlJ1xuICB9XG5cbiAgLy8gMTkuIFJldHVybiAocmFuZ2VTdGFydFZhbHVlLCByYW5nZUVuZFZhbHVlKS5cbiAgcmV0dXJuIHsgcmFuZ2VTdGFydFZhbHVlLCByYW5nZUVuZFZhbHVlIH1cbn1cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNidWlsZC1hLWNvbnRlbnQtcmFuZ2VcbiAqIEBwYXJhbSB7bnVtYmVyfSByYW5nZVN0YXJ0XG4gKiBAcGFyYW0ge251bWJlcn0gcmFuZ2VFbmRcbiAqIEBwYXJhbSB7bnVtYmVyfSBmdWxsTGVuZ3RoXG4gKi9cbmZ1bmN0aW9uIGJ1aWxkQ29udGVudFJhbmdlIChyYW5nZVN0YXJ0LCByYW5nZUVuZCwgZnVsbExlbmd0aCkge1xuICAvLyAxLiBMZXQgY29udGVudFJhbmdlIGJlIGBieXRlcyBgLlxuICBsZXQgY29udGVudFJhbmdlID0gJ2J5dGVzICdcblxuICAvLyAyLiBBcHBlbmQgcmFuZ2VTdGFydCwgc2VyaWFsaXplZCBhbmQgaXNvbW9ycGhpYyBlbmNvZGVkLCB0byBjb250ZW50UmFuZ2UuXG4gIGNvbnRlbnRSYW5nZSArPSBpc29tb3JwaGljRW5jb2RlKGAke3JhbmdlU3RhcnR9YClcblxuICAvLyAzLiBBcHBlbmQgMHgyRCAoLSkgdG8gY29udGVudFJhbmdlLlxuICBjb250ZW50UmFuZ2UgKz0gJy0nXG5cbiAgLy8gNC4gQXBwZW5kIHJhbmdlRW5kLCBzZXJpYWxpemVkIGFuZCBpc29tb3JwaGljIGVuY29kZWQgdG8gY29udGVudFJhbmdlLlxuICBjb250ZW50UmFuZ2UgKz0gaXNvbW9ycGhpY0VuY29kZShgJHtyYW5nZUVuZH1gKVxuXG4gIC8vIDUuIEFwcGVuZCAweDJGICgvKSB0byBjb250ZW50UmFuZ2UuXG4gIGNvbnRlbnRSYW5nZSArPSAnLydcblxuICAvLyA2LiBBcHBlbmQgZnVsbExlbmd0aCwgc2VyaWFsaXplZCBhbmQgaXNvbW9ycGhpYyBlbmNvZGVkIHRvIGNvbnRlbnRSYW5nZS5cbiAgY29udGVudFJhbmdlICs9IGlzb21vcnBoaWNFbmNvZGUoYCR7ZnVsbExlbmd0aH1gKVxuXG4gIC8vIDcuIFJldHVybiBjb250ZW50UmFuZ2UuXG4gIHJldHVybiBjb250ZW50UmFuZ2Vcbn1cblxuLy8gQSBTdHJlYW0sIHdoaWNoIHBpcGVzIHRoZSByZXNwb25zZSB0byB6bGliLmNyZWF0ZUluZmxhdGUoKSBvclxuLy8gemxpYi5jcmVhdGVJbmZsYXRlUmF3KCkgZGVwZW5kaW5nIG9uIHRoZSBmaXJzdCBieXRlIG9mIHRoZSBCdWZmZXIuXG4vLyBJZiB0aGUgbG93ZXIgYnl0ZSBvZiB0aGUgZmlyc3QgYnl0ZSBpcyAweDA4LCB0aGVuIHRoZSBzdHJlYW0gaXNcbi8vIGludGVycHJldGVkIGFzIGEgemxpYiBzdHJlYW0sIG90aGVyd2lzZSBpdCdzIGludGVycHJldGVkIGFzIGFcbi8vIHJhdyBkZWZsYXRlIHN0cmVhbS5cbmNsYXNzIEluZmxhdGVTdHJlYW0gZXh0ZW5kcyBUcmFuc2Zvcm0ge1xuICAjemxpYk9wdGlvbnNcblxuICAvKiogQHBhcmFtIHt6bGliLlpsaWJPcHRpb25zfSBbemxpYk9wdGlvbnNdICovXG4gIGNvbnN0cnVjdG9yICh6bGliT3B0aW9ucykge1xuICAgIHN1cGVyKClcbiAgICB0aGlzLiN6bGliT3B0aW9ucyA9IHpsaWJPcHRpb25zXG4gIH1cblxuICBfdHJhbnNmb3JtIChjaHVuaywgZW5jb2RpbmcsIGNhbGxiYWNrKSB7XG4gICAgaWYgKCF0aGlzLl9pbmZsYXRlU3RyZWFtKSB7XG4gICAgICBpZiAoY2h1bmsubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIGNhbGxiYWNrKClcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgICB0aGlzLl9pbmZsYXRlU3RyZWFtID0gKGNodW5rWzBdICYgMHgwRikgPT09IDB4MDhcbiAgICAgICAgPyB6bGliLmNyZWF0ZUluZmxhdGUodGhpcy4jemxpYk9wdGlvbnMpXG4gICAgICAgIDogemxpYi5jcmVhdGVJbmZsYXRlUmF3KHRoaXMuI3psaWJPcHRpb25zKVxuXG4gICAgICB0aGlzLl9pbmZsYXRlU3RyZWFtLm9uKCdkYXRhJywgdGhpcy5wdXNoLmJpbmQodGhpcykpXG4gICAgICB0aGlzLl9pbmZsYXRlU3RyZWFtLm9uKCdlbmQnLCAoKSA9PiB0aGlzLnB1c2gobnVsbCkpXG4gICAgICB0aGlzLl9pbmZsYXRlU3RyZWFtLm9uKCdlcnJvcicsIChlcnIpID0+IHRoaXMuZGVzdHJveShlcnIpKVxuICAgIH1cblxuICAgIHRoaXMuX2luZmxhdGVTdHJlYW0ud3JpdGUoY2h1bmssIGVuY29kaW5nLCBjYWxsYmFjaylcbiAgfVxuXG4gIF9maW5hbCAoY2FsbGJhY2spIHtcbiAgICBpZiAodGhpcy5faW5mbGF0ZVN0cmVhbSkge1xuICAgICAgdGhpcy5faW5mbGF0ZVN0cmVhbS5lbmQoKVxuICAgICAgdGhpcy5faW5mbGF0ZVN0cmVhbSA9IG51bGxcbiAgICB9XG4gICAgY2FsbGJhY2soKVxuICB9XG59XG5cbi8qKlxuICogQHBhcmFtIHt6bGliLlpsaWJPcHRpb25zfSBbemxpYk9wdGlvbnNdXG4gKiBAcmV0dXJucyB7SW5mbGF0ZVN0cmVhbX1cbiAqL1xuZnVuY3Rpb24gY3JlYXRlSW5mbGF0ZSAoemxpYk9wdGlvbnMpIHtcbiAgcmV0dXJuIG5ldyBJbmZsYXRlU3RyZWFtKHpsaWJPcHRpb25zKVxufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2NvbmNlcHQtaGVhZGVyLWV4dHJhY3QtbWltZS10eXBlXG4gKiBAcGFyYW0ge2ltcG9ydCgnLi9oZWFkZXJzJykuSGVhZGVyc0xpc3R9IGhlYWRlcnNcbiAqL1xuZnVuY3Rpb24gZXh0cmFjdE1pbWVUeXBlIChoZWFkZXJzKSB7XG4gIC8vIDEuIExldCBjaGFyc2V0IGJlIG51bGwuXG4gIGxldCBjaGFyc2V0ID0gbnVsbFxuXG4gIC8vIDIuIExldCBlc3NlbmNlIGJlIG51bGwuXG4gIGxldCBlc3NlbmNlID0gbnVsbFxuXG4gIC8vIDMuIExldCBtaW1lVHlwZSBiZSBudWxsLlxuICBsZXQgbWltZVR5cGUgPSBudWxsXG5cbiAgLy8gNC4gTGV0IHZhbHVlcyBiZSB0aGUgcmVzdWx0IG9mIGdldHRpbmcsIGRlY29kaW5nLCBhbmQgc3BsaXR0aW5nIGBDb250ZW50LVR5cGVgIGZyb20gaGVhZGVycy5cbiAgY29uc3QgdmFsdWVzID0gZ2V0RGVjb2RlU3BsaXQoJ2NvbnRlbnQtdHlwZScsIGhlYWRlcnMpXG5cbiAgLy8gNS4gSWYgdmFsdWVzIGlzIG51bGwsIHRoZW4gcmV0dXJuIGZhaWx1cmUuXG4gIGlmICh2YWx1ZXMgPT09IG51bGwpIHtcbiAgICByZXR1cm4gJ2ZhaWx1cmUnXG4gIH1cblxuICAvLyA2LiBGb3IgZWFjaCB2YWx1ZSBvZiB2YWx1ZXM6XG4gIGZvciAoY29uc3QgdmFsdWUgb2YgdmFsdWVzKSB7XG4gICAgLy8gNi4xLiBMZXQgdGVtcG9yYXJ5TWltZVR5cGUgYmUgdGhlIHJlc3VsdCBvZiBwYXJzaW5nIHZhbHVlLlxuICAgIGNvbnN0IHRlbXBvcmFyeU1pbWVUeXBlID0gcGFyc2VNSU1FVHlwZSh2YWx1ZSlcblxuICAgIC8vIDYuMi4gSWYgdGVtcG9yYXJ5TWltZVR5cGUgaXMgZmFpbHVyZSBvciBpdHMgZXNzZW5jZSBpcyBcIiovKlwiLCB0aGVuIGNvbnRpbnVlLlxuICAgIGlmICh0ZW1wb3JhcnlNaW1lVHlwZSA9PT0gJ2ZhaWx1cmUnIHx8IHRlbXBvcmFyeU1pbWVUeXBlLmVzc2VuY2UgPT09ICcqLyonKSB7XG4gICAgICBjb250aW51ZVxuICAgIH1cblxuICAgIC8vIDYuMy4gU2V0IG1pbWVUeXBlIHRvIHRlbXBvcmFyeU1pbWVUeXBlLlxuICAgIG1pbWVUeXBlID0gdGVtcG9yYXJ5TWltZVR5cGVcblxuICAgIC8vIDYuNC4gSWYgbWltZVR5cGVcdTIwMTlzIGVzc2VuY2UgaXMgbm90IGVzc2VuY2UsIHRoZW46XG4gICAgaWYgKG1pbWVUeXBlLmVzc2VuY2UgIT09IGVzc2VuY2UpIHtcbiAgICAgIC8vIDYuNC4xLiBTZXQgY2hhcnNldCB0byBudWxsLlxuICAgICAgY2hhcnNldCA9IG51bGxcblxuICAgICAgLy8gNi40LjIuIElmIG1pbWVUeXBlXHUyMDE5cyBwYXJhbWV0ZXJzW1wiY2hhcnNldFwiXSBleGlzdHMsIHRoZW4gc2V0IGNoYXJzZXQgdG9cbiAgICAgIC8vICAgICAgICBtaW1lVHlwZVx1MjAxOXMgcGFyYW1ldGVyc1tcImNoYXJzZXRcIl0uXG4gICAgICBpZiAobWltZVR5cGUucGFyYW1ldGVycy5oYXMoJ2NoYXJzZXQnKSkge1xuICAgICAgICBjaGFyc2V0ID0gbWltZVR5cGUucGFyYW1ldGVycy5nZXQoJ2NoYXJzZXQnKVxuICAgICAgfVxuXG4gICAgICAvLyA2LjQuMy4gU2V0IGVzc2VuY2UgdG8gbWltZVR5cGVcdTIwMTlzIGVzc2VuY2UuXG4gICAgICBlc3NlbmNlID0gbWltZVR5cGUuZXNzZW5jZVxuICAgIH0gZWxzZSBpZiAoIW1pbWVUeXBlLnBhcmFtZXRlcnMuaGFzKCdjaGFyc2V0JykgJiYgY2hhcnNldCAhPT0gbnVsbCkge1xuICAgICAgLy8gNi41LiBPdGhlcndpc2UsIGlmIG1pbWVUeXBlXHUyMDE5cyBwYXJhbWV0ZXJzW1wiY2hhcnNldFwiXSBkb2VzIG5vdCBleGlzdCwgYW5kXG4gICAgICAvLyAgICAgIGNoYXJzZXQgaXMgbm9uLW51bGwsIHNldCBtaW1lVHlwZVx1MjAxOXMgcGFyYW1ldGVyc1tcImNoYXJzZXRcIl0gdG8gY2hhcnNldC5cbiAgICAgIG1pbWVUeXBlLnBhcmFtZXRlcnMuc2V0KCdjaGFyc2V0JywgY2hhcnNldClcbiAgICB9XG4gIH1cblxuICAvLyA3LiBJZiBtaW1lVHlwZSBpcyBudWxsLCB0aGVuIHJldHVybiBmYWlsdXJlLlxuICBpZiAobWltZVR5cGUgPT0gbnVsbCkge1xuICAgIHJldHVybiAnZmFpbHVyZSdcbiAgfVxuXG4gIC8vIDguIFJldHVybiBtaW1lVHlwZS5cbiAgcmV0dXJuIG1pbWVUeXBlXG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jaGVhZGVyLXZhbHVlLWdldC1kZWNvZGUtYW5kLXNwbGl0XG4gKiBAcGFyYW0ge3N0cmluZ3xudWxsfSB2YWx1ZVxuICovXG5mdW5jdGlvbiBnZXR0aW5nRGVjb2RpbmdTcGxpdHRpbmcgKHZhbHVlKSB7XG4gIC8vIDEuIExldCBpbnB1dCBiZSB0aGUgcmVzdWx0IG9mIGlzb21vcnBoaWMgZGVjb2RpbmcgdmFsdWUuXG4gIGNvbnN0IGlucHV0ID0gdmFsdWVcblxuICAvLyAyLiBMZXQgcG9zaXRpb24gYmUgYSBwb3NpdGlvbiB2YXJpYWJsZSBmb3IgaW5wdXQsIGluaXRpYWxseSBwb2ludGluZyBhdCB0aGUgc3RhcnQgb2YgaW5wdXQuXG4gIGNvbnN0IHBvc2l0aW9uID0geyBwb3NpdGlvbjogMCB9XG5cbiAgLy8gMy4gTGV0IHZhbHVlcyBiZSBhIGxpc3Qgb2Ygc3RyaW5ncywgaW5pdGlhbGx5IGVtcHR5LlxuICBjb25zdCB2YWx1ZXMgPSBbXVxuXG4gIC8vIDQuIExldCB0ZW1wb3JhcnlWYWx1ZSBiZSB0aGUgZW1wdHkgc3RyaW5nLlxuICBsZXQgdGVtcG9yYXJ5VmFsdWUgPSAnJ1xuXG4gIC8vIDUuIFdoaWxlIHBvc2l0aW9uIGlzIG5vdCBwYXN0IHRoZSBlbmQgb2YgaW5wdXQ6XG4gIHdoaWxlIChwb3NpdGlvbi5wb3NpdGlvbiA8IGlucHV0Lmxlbmd0aCkge1xuICAgIC8vIDUuMS4gQXBwZW5kIHRoZSByZXN1bHQgb2YgY29sbGVjdGluZyBhIHNlcXVlbmNlIG9mIGNvZGUgcG9pbnRzIHRoYXQgYXJlIG5vdCBVKzAwMjIgKFwiKVxuICAgIC8vICAgICAgb3IgVSswMDJDICgsKSBmcm9tIGlucHV0LCBnaXZlbiBwb3NpdGlvbiwgdG8gdGVtcG9yYXJ5VmFsdWUuXG4gICAgdGVtcG9yYXJ5VmFsdWUgKz0gY29sbGVjdEFTZXF1ZW5jZU9mQ29kZVBvaW50cyhcbiAgICAgIChjaGFyKSA9PiBjaGFyICE9PSAnXCInICYmIGNoYXIgIT09ICcsJyxcbiAgICAgIGlucHV0LFxuICAgICAgcG9zaXRpb25cbiAgICApXG5cbiAgICAvLyA1LjIuIElmIHBvc2l0aW9uIGlzIG5vdCBwYXN0IHRoZSBlbmQgb2YgaW5wdXQsIHRoZW46XG4gICAgaWYgKHBvc2l0aW9uLnBvc2l0aW9uIDwgaW5wdXQubGVuZ3RoKSB7XG4gICAgICAvLyA1LjIuMS4gSWYgdGhlIGNvZGUgcG9pbnQgYXQgcG9zaXRpb24gd2l0aGluIGlucHV0IGlzIFUrMDAyMiAoXCIpLCB0aGVuOlxuICAgICAgaWYgKGlucHV0LmNoYXJDb2RlQXQocG9zaXRpb24ucG9zaXRpb24pID09PSAweDIyKSB7XG4gICAgICAgIC8vIDUuMi4xLjEuIEFwcGVuZCB0aGUgcmVzdWx0IG9mIGNvbGxlY3RpbmcgYW4gSFRUUCBxdW90ZWQgc3RyaW5nIGZyb20gaW5wdXQsIGdpdmVuIHBvc2l0aW9uLCB0byB0ZW1wb3JhcnlWYWx1ZS5cbiAgICAgICAgdGVtcG9yYXJ5VmFsdWUgKz0gY29sbGVjdEFuSFRUUFF1b3RlZFN0cmluZyhcbiAgICAgICAgICBpbnB1dCxcbiAgICAgICAgICBwb3NpdGlvblxuICAgICAgICApXG5cbiAgICAgICAgLy8gNS4yLjEuMi4gSWYgcG9zaXRpb24gaXMgbm90IHBhc3QgdGhlIGVuZCBvZiBpbnB1dCwgdGhlbiBjb250aW51ZS5cbiAgICAgICAgaWYgKHBvc2l0aW9uLnBvc2l0aW9uIDwgaW5wdXQubGVuZ3RoKSB7XG4gICAgICAgICAgY29udGludWVcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gNS4yLjIuIE90aGVyd2lzZTpcblxuICAgICAgICAvLyA1LjIuMi4xLiBBc3NlcnQ6IHRoZSBjb2RlIHBvaW50IGF0IHBvc2l0aW9uIHdpdGhpbiBpbnB1dCBpcyBVKzAwMkMgKCwpLlxuICAgICAgICBhc3NlcnQoaW5wdXQuY2hhckNvZGVBdChwb3NpdGlvbi5wb3NpdGlvbikgPT09IDB4MkMpXG5cbiAgICAgICAgLy8gNS4yLjIuMi4gQWR2YW5jZSBwb3NpdGlvbiBieSAxLlxuICAgICAgICBwb3NpdGlvbi5wb3NpdGlvbisrXG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gNS4zLiBSZW1vdmUgYWxsIEhUVFAgdGFiIG9yIHNwYWNlIGZyb20gdGhlIHN0YXJ0IGFuZCBlbmQgb2YgdGVtcG9yYXJ5VmFsdWUuXG4gICAgdGVtcG9yYXJ5VmFsdWUgPSByZW1vdmVDaGFycyh0ZW1wb3JhcnlWYWx1ZSwgdHJ1ZSwgdHJ1ZSwgKGNoYXIpID0+IGNoYXIgPT09IDB4OSB8fCBjaGFyID09PSAweDIwKVxuXG4gICAgLy8gNS40LiBBcHBlbmQgdGVtcG9yYXJ5VmFsdWUgdG8gdmFsdWVzLlxuICAgIHZhbHVlcy5wdXNoKHRlbXBvcmFyeVZhbHVlKVxuXG4gICAgLy8gNS42LiBTZXQgdGVtcG9yYXJ5VmFsdWUgdG8gdGhlIGVtcHR5IHN0cmluZy5cbiAgICB0ZW1wb3JhcnlWYWx1ZSA9ICcnXG4gIH1cblxuICAvLyA2LiBSZXR1cm4gdmFsdWVzLlxuICByZXR1cm4gdmFsdWVzXG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jY29uY2VwdC1oZWFkZXItbGlzdC1nZXQtZGVjb2RlLXNwbGl0XG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZSBsb3dlcmNhc2UgaGVhZGVyIG5hbWVcbiAqIEBwYXJhbSB7aW1wb3J0KCcuL2hlYWRlcnMnKS5IZWFkZXJzTGlzdH0gbGlzdFxuICovXG5mdW5jdGlvbiBnZXREZWNvZGVTcGxpdCAobmFtZSwgbGlzdCkge1xuICAvLyAxLiBMZXQgdmFsdWUgYmUgdGhlIHJlc3VsdCBvZiBnZXR0aW5nIG5hbWUgZnJvbSBsaXN0LlxuICBjb25zdCB2YWx1ZSA9IGxpc3QuZ2V0KG5hbWUsIHRydWUpXG5cbiAgLy8gMi4gSWYgdmFsdWUgaXMgbnVsbCwgdGhlbiByZXR1cm4gbnVsbC5cbiAgaWYgKHZhbHVlID09PSBudWxsKSB7XG4gICAgcmV0dXJuIG51bGxcbiAgfVxuXG4gIC8vIDMuIFJldHVybiB0aGUgcmVzdWx0IG9mIGdldHRpbmcsIGRlY29kaW5nLCBhbmQgc3BsaXR0aW5nIHZhbHVlLlxuICByZXR1cm4gZ2V0dGluZ0RlY29kaW5nU3BsaXR0aW5nKHZhbHVlKVxufVxuXG5jb25zdCB0ZXh0RGVjb2RlciA9IG5ldyBUZXh0RGVjb2RlcigpXG5cbi8qKlxuICogQHNlZSBodHRwczovL2VuY29kaW5nLnNwZWMud2hhdHdnLm9yZy8jdXRmLTgtZGVjb2RlXG4gKiBAcGFyYW0ge0J1ZmZlcn0gYnVmZmVyXG4gKi9cbmZ1bmN0aW9uIHV0ZjhEZWNvZGVCeXRlcyAoYnVmZmVyKSB7XG4gIGlmIChidWZmZXIubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuICcnXG4gIH1cblxuICAvLyAxLiBMZXQgYnVmZmVyIGJlIHRoZSByZXN1bHQgb2YgcGVla2luZyB0aHJlZSBieXRlcyBmcm9tXG4gIC8vICAgIGlvUXVldWUsIGNvbnZlcnRlZCB0byBhIGJ5dGUgc2VxdWVuY2UuXG5cbiAgLy8gMi4gSWYgYnVmZmVyIGlzIDB4RUYgMHhCQiAweEJGLCB0aGVuIHJlYWQgdGhyZWVcbiAgLy8gICAgYnl0ZXMgZnJvbSBpb1F1ZXVlLiAoRG8gbm90aGluZyB3aXRoIHRob3NlIGJ5dGVzLilcbiAgaWYgKGJ1ZmZlclswXSA9PT0gMHhFRiAmJiBidWZmZXJbMV0gPT09IDB4QkIgJiYgYnVmZmVyWzJdID09PSAweEJGKSB7XG4gICAgYnVmZmVyID0gYnVmZmVyLnN1YmFycmF5KDMpXG4gIH1cblxuICAvLyAzLiBQcm9jZXNzIGEgcXVldWUgd2l0aCBhbiBpbnN0YW5jZSBvZiBVVEYtOFx1MjAxOXNcbiAgLy8gICAgZGVjb2RlciwgaW9RdWV1ZSwgb3V0cHV0LCBhbmQgXCJyZXBsYWNlbWVudFwiLlxuICBjb25zdCBvdXRwdXQgPSB0ZXh0RGVjb2Rlci5kZWNvZGUoYnVmZmVyKVxuXG4gIC8vIDQuIFJldHVybiBvdXRwdXQuXG4gIHJldHVybiBvdXRwdXRcbn1cblxuY2xhc3MgRW52aXJvbm1lbnRTZXR0aW5nc09iamVjdEJhc2Uge1xuICBnZXQgYmFzZVVybCAoKSB7XG4gICAgcmV0dXJuIGdldEdsb2JhbE9yaWdpbigpXG4gIH1cblxuICBnZXQgb3JpZ2luICgpIHtcbiAgICByZXR1cm4gdGhpcy5iYXNlVXJsPy5vcmlnaW5cbiAgfVxuXG4gIHBvbGljeUNvbnRhaW5lciA9IG1ha2VQb2xpY3lDb250YWluZXIoKVxufVxuXG5jbGFzcyBFbnZpcm9ubWVudFNldHRpbmdzT2JqZWN0IHtcbiAgc2V0dGluZ3NPYmplY3QgPSBuZXcgRW52aXJvbm1lbnRTZXR0aW5nc09iamVjdEJhc2UoKVxufVxuXG5jb25zdCBlbnZpcm9ubWVudFNldHRpbmdzT2JqZWN0ID0gbmV3IEVudmlyb25tZW50U2V0dGluZ3NPYmplY3QoKVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgaXNBYm9ydGVkLFxuICBpc0NhbmNlbGxlZCxcbiAgaXNWYWxpZEVuY29kZWRVUkwsXG4gIGNyZWF0ZURlZmVycmVkUHJvbWlzZSxcbiAgUmVhZGFibGVTdHJlYW1Gcm9tLFxuICB0cnlVcGdyYWRlUmVxdWVzdFRvQVBvdGVudGlhbGx5VHJ1c3R3b3J0aHlVUkwsXG4gIGNsYW1wQW5kQ29hcnNlbkNvbm5lY3Rpb25UaW1pbmdJbmZvLFxuICBjb2Fyc2VuZWRTaGFyZWRDdXJyZW50VGltZSxcbiAgZGV0ZXJtaW5lUmVxdWVzdHNSZWZlcnJlcixcbiAgbWFrZVBvbGljeUNvbnRhaW5lcixcbiAgY2xvbmVQb2xpY3lDb250YWluZXIsXG4gIGFwcGVuZEZldGNoTWV0YWRhdGEsXG4gIGFwcGVuZFJlcXVlc3RPcmlnaW5IZWFkZXIsXG4gIFRBT0NoZWNrLFxuICBjb3JzQ2hlY2ssXG4gIGNyb3NzT3JpZ2luUmVzb3VyY2VQb2xpY3lDaGVjayxcbiAgY3JlYXRlT3BhcXVlVGltaW5nSW5mbyxcbiAgc2V0UmVxdWVzdFJlZmVycmVyUG9saWN5T25SZWRpcmVjdCxcbiAgaXNWYWxpZEhUVFBUb2tlbixcbiAgcmVxdWVzdEJhZFBvcnQsXG4gIHJlcXVlc3RDdXJyZW50VVJMLFxuICByZXNwb25zZVVSTCxcbiAgcmVzcG9uc2VMb2NhdGlvblVSTCxcbiAgaXNCbG9iTGlrZSxcbiAgaXNVUkxQb3RlbnRpYWxseVRydXN0d29ydGh5LFxuICBpc1ZhbGlkUmVhc29uUGhyYXNlLFxuICBzYW1lT3JpZ2luLFxuICBub3JtYWxpemVNZXRob2QsXG4gIHNlcmlhbGl6ZUphdmFzY3JpcHRWYWx1ZVRvSlNPTlN0cmluZyxcbiAgaXRlcmF0b3JNaXhpbixcbiAgY3JlYXRlSXRlcmF0b3IsXG4gIGlzVmFsaWRIZWFkZXJOYW1lLFxuICBpc1ZhbGlkSGVhZGVyVmFsdWUsXG4gIGlzRXJyb3JMaWtlLFxuICBmdWxseVJlYWRCb2R5LFxuICBieXRlc01hdGNoLFxuICBpc1JlYWRhYmxlU3RyZWFtTGlrZSxcbiAgcmVhZGFibGVTdHJlYW1DbG9zZSxcbiAgaXNvbW9ycGhpY0VuY29kZSxcbiAgdXJsSXNMb2NhbCxcbiAgdXJsSGFzSHR0cHNTY2hlbWUsXG4gIHVybElzSHR0cEh0dHBzU2NoZW1lLFxuICByZWFkQWxsQnl0ZXMsXG4gIHNpbXBsZVJhbmdlSGVhZGVyVmFsdWUsXG4gIGJ1aWxkQ29udGVudFJhbmdlLFxuICBwYXJzZU1ldGFkYXRhLFxuICBjcmVhdGVJbmZsYXRlLFxuICBleHRyYWN0TWltZVR5cGUsXG4gIGdldERlY29kZVNwbGl0LFxuICB1dGY4RGVjb2RlQnl0ZXMsXG4gIGVudmlyb25tZW50U2V0dGluZ3NPYmplY3Rcbn1cbiIsICIndXNlIHN0cmljdCdcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGtVcmw6IFN5bWJvbCgndXJsJyksXG4gIGtIZWFkZXJzOiBTeW1ib2woJ2hlYWRlcnMnKSxcbiAga1NpZ25hbDogU3ltYm9sKCdzaWduYWwnKSxcbiAga1N0YXRlOiBTeW1ib2woJ3N0YXRlJyksXG4gIGtEaXNwYXRjaGVyOiBTeW1ib2woJ2Rpc3BhdGNoZXInKVxufVxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7IEJsb2IsIEZpbGUgfSA9IHJlcXVpcmUoJ25vZGU6YnVmZmVyJylcbmNvbnN0IHsga1N0YXRlIH0gPSByZXF1aXJlKCcuL3N5bWJvbHMnKVxuY29uc3QgeyB3ZWJpZGwgfSA9IHJlcXVpcmUoJy4vd2ViaWRsJylcblxuLy8gVE9ETyhAS2hhZnJhRGV2KTogcmVtb3ZlXG5jbGFzcyBGaWxlTGlrZSB7XG4gIGNvbnN0cnVjdG9yIChibG9iTGlrZSwgZmlsZU5hbWUsIG9wdGlvbnMgPSB7fSkge1xuICAgIC8vIFRPRE86IGFyZ3VtZW50IGlkbCB0eXBlIGNoZWNrXG5cbiAgICAvLyBUaGUgRmlsZSBjb25zdHJ1Y3RvciBpcyBpbnZva2VkIHdpdGggdHdvIG9yIHRocmVlIHBhcmFtZXRlcnMsIGRlcGVuZGluZ1xuICAgIC8vIG9uIHdoZXRoZXIgdGhlIG9wdGlvbmFsIGRpY3Rpb25hcnkgcGFyYW1ldGVyIGlzIHVzZWQuIFdoZW4gdGhlIEZpbGUoKVxuICAgIC8vIGNvbnN0cnVjdG9yIGlzIGludm9rZWQsIHVzZXIgYWdlbnRzIG11c3QgcnVuIHRoZSBmb2xsb3dpbmcgc3RlcHM6XG5cbiAgICAvLyAxLiBMZXQgYnl0ZXMgYmUgdGhlIHJlc3VsdCBvZiBwcm9jZXNzaW5nIGJsb2IgcGFydHMgZ2l2ZW4gZmlsZUJpdHMgYW5kXG4gICAgLy8gb3B0aW9ucy5cblxuICAgIC8vIDIuIExldCBuIGJlIHRoZSBmaWxlTmFtZSBhcmd1bWVudCB0byB0aGUgY29uc3RydWN0b3IuXG4gICAgY29uc3QgbiA9IGZpbGVOYW1lXG5cbiAgICAvLyAzLiBQcm9jZXNzIEZpbGVQcm9wZXJ0eUJhZyBkaWN0aW9uYXJ5IGFyZ3VtZW50IGJ5IHJ1bm5pbmcgdGhlIGZvbGxvd2luZ1xuICAgIC8vIHN1YnN0ZXBzOlxuXG4gICAgLy8gICAgMS4gSWYgdGhlIHR5cGUgbWVtYmVyIGlzIHByb3ZpZGVkIGFuZCBpcyBub3QgdGhlIGVtcHR5IHN0cmluZywgbGV0IHRcbiAgICAvLyAgICBiZSBzZXQgdG8gdGhlIHR5cGUgZGljdGlvbmFyeSBtZW1iZXIuIElmIHQgY29udGFpbnMgYW55IGNoYXJhY3RlcnNcbiAgICAvLyAgICBvdXRzaWRlIHRoZSByYW5nZSBVKzAwMjAgdG8gVSswMDdFLCB0aGVuIHNldCB0IHRvIHRoZSBlbXB0eSBzdHJpbmdcbiAgICAvLyAgICBhbmQgcmV0dXJuIGZyb20gdGhlc2Ugc3Vic3RlcHMuXG4gICAgLy8gICAgVE9ET1xuICAgIGNvbnN0IHQgPSBvcHRpb25zLnR5cGVcblxuICAgIC8vICAgIDIuIENvbnZlcnQgZXZlcnkgY2hhcmFjdGVyIGluIHQgdG8gQVNDSUkgbG93ZXJjYXNlLlxuICAgIC8vICAgIFRPRE9cblxuICAgIC8vICAgIDMuIElmIHRoZSBsYXN0TW9kaWZpZWQgbWVtYmVyIGlzIHByb3ZpZGVkLCBsZXQgZCBiZSBzZXQgdG8gdGhlXG4gICAgLy8gICAgbGFzdE1vZGlmaWVkIGRpY3Rpb25hcnkgbWVtYmVyLiBJZiBpdCBpcyBub3QgcHJvdmlkZWQsIHNldCBkIHRvIHRoZVxuICAgIC8vICAgIGN1cnJlbnQgZGF0ZSBhbmQgdGltZSByZXByZXNlbnRlZCBhcyB0aGUgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyBzaW5jZVxuICAgIC8vICAgIHRoZSBVbml4IEVwb2NoICh3aGljaCBpcyB0aGUgZXF1aXZhbGVudCBvZiBEYXRlLm5vdygpIFtFQ01BLTI2Ml0pLlxuICAgIGNvbnN0IGQgPSBvcHRpb25zLmxhc3RNb2RpZmllZCA/PyBEYXRlLm5vdygpXG5cbiAgICAvLyA0LiBSZXR1cm4gYSBuZXcgRmlsZSBvYmplY3QgRiBzdWNoIHRoYXQ6XG4gICAgLy8gRiByZWZlcnMgdG8gdGhlIGJ5dGVzIGJ5dGUgc2VxdWVuY2UuXG4gICAgLy8gRi5zaXplIGlzIHNldCB0byB0aGUgbnVtYmVyIG9mIHRvdGFsIGJ5dGVzIGluIGJ5dGVzLlxuICAgIC8vIEYubmFtZSBpcyBzZXQgdG8gbi5cbiAgICAvLyBGLnR5cGUgaXMgc2V0IHRvIHQuXG4gICAgLy8gRi5sYXN0TW9kaWZpZWQgaXMgc2V0IHRvIGQuXG5cbiAgICB0aGlzW2tTdGF0ZV0gPSB7XG4gICAgICBibG9iTGlrZSxcbiAgICAgIG5hbWU6IG4sXG4gICAgICB0eXBlOiB0LFxuICAgICAgbGFzdE1vZGlmaWVkOiBkXG4gICAgfVxuICB9XG5cbiAgc3RyZWFtICguLi5hcmdzKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRmlsZUxpa2UpXG5cbiAgICByZXR1cm4gdGhpc1trU3RhdGVdLmJsb2JMaWtlLnN0cmVhbSguLi5hcmdzKVxuICB9XG5cbiAgYXJyYXlCdWZmZXIgKC4uLmFyZ3MpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBGaWxlTGlrZSlcblxuICAgIHJldHVybiB0aGlzW2tTdGF0ZV0uYmxvYkxpa2UuYXJyYXlCdWZmZXIoLi4uYXJncylcbiAgfVxuXG4gIHNsaWNlICguLi5hcmdzKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRmlsZUxpa2UpXG5cbiAgICByZXR1cm4gdGhpc1trU3RhdGVdLmJsb2JMaWtlLnNsaWNlKC4uLmFyZ3MpXG4gIH1cblxuICB0ZXh0ICguLi5hcmdzKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRmlsZUxpa2UpXG5cbiAgICByZXR1cm4gdGhpc1trU3RhdGVdLmJsb2JMaWtlLnRleHQoLi4uYXJncylcbiAgfVxuXG4gIGdldCBzaXplICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBGaWxlTGlrZSlcblxuICAgIHJldHVybiB0aGlzW2tTdGF0ZV0uYmxvYkxpa2Uuc2l6ZVxuICB9XG5cbiAgZ2V0IHR5cGUgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEZpbGVMaWtlKVxuXG4gICAgcmV0dXJuIHRoaXNba1N0YXRlXS5ibG9iTGlrZS50eXBlXG4gIH1cblxuICBnZXQgbmFtZSAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRmlsZUxpa2UpXG5cbiAgICByZXR1cm4gdGhpc1trU3RhdGVdLm5hbWVcbiAgfVxuXG4gIGdldCBsYXN0TW9kaWZpZWQgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEZpbGVMaWtlKVxuXG4gICAgcmV0dXJuIHRoaXNba1N0YXRlXS5sYXN0TW9kaWZpZWRcbiAgfVxuXG4gIGdldCBbU3ltYm9sLnRvU3RyaW5nVGFnXSAoKSB7XG4gICAgcmV0dXJuICdGaWxlJ1xuICB9XG59XG5cbndlYmlkbC5jb252ZXJ0ZXJzLkJsb2IgPSB3ZWJpZGwuaW50ZXJmYWNlQ29udmVydGVyKEJsb2IpXG5cbi8vIElmIHRoaXMgZnVuY3Rpb24gaXMgbW92ZWQgdG8gLi91dGlsLmpzLCBzb21lIHRvb2xzIChzdWNoIGFzXG4vLyByb2xsdXApIHdpbGwgd2FybiBhYm91dCBjaXJjdWxhciBkZXBlbmRlbmNpZXMuIFNlZTpcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvdW5kaWNpL2lzc3Vlcy8xNjI5XG5mdW5jdGlvbiBpc0ZpbGVMaWtlIChvYmplY3QpIHtcbiAgcmV0dXJuIChcbiAgICAob2JqZWN0IGluc3RhbmNlb2YgRmlsZSkgfHxcbiAgICAoXG4gICAgICBvYmplY3QgJiZcbiAgICAgICh0eXBlb2Ygb2JqZWN0LnN0cmVhbSA9PT0gJ2Z1bmN0aW9uJyB8fFxuICAgICAgdHlwZW9mIG9iamVjdC5hcnJheUJ1ZmZlciA9PT0gJ2Z1bmN0aW9uJykgJiZcbiAgICAgIG9iamVjdFtTeW1ib2wudG9TdHJpbmdUYWddID09PSAnRmlsZSdcbiAgICApXG4gIClcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7IEZpbGVMaWtlLCBpc0ZpbGVMaWtlIH1cbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgeyBpc0Jsb2JMaWtlLCBpdGVyYXRvck1peGluIH0gPSByZXF1aXJlKCcuL3V0aWwnKVxuY29uc3QgeyBrU3RhdGUgfSA9IHJlcXVpcmUoJy4vc3ltYm9scycpXG5jb25zdCB7IGtFbnVtZXJhYmxlUHJvcGVydHkgfSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUvdXRpbCcpXG5jb25zdCB7IEZpbGVMaWtlLCBpc0ZpbGVMaWtlIH0gPSByZXF1aXJlKCcuL2ZpbGUnKVxuY29uc3QgeyB3ZWJpZGwgfSA9IHJlcXVpcmUoJy4vd2ViaWRsJylcbmNvbnN0IHsgRmlsZTogTmF0aXZlRmlsZSB9ID0gcmVxdWlyZSgnbm9kZTpidWZmZXInKVxuY29uc3Qgbm9kZVV0aWwgPSByZXF1aXJlKCdub2RlOnV0aWwnKVxuXG4vKiogQHR5cGUge2dsb2JhbFRoaXNbJ0ZpbGUnXX0gKi9cbmNvbnN0IEZpbGUgPSBnbG9iYWxUaGlzLkZpbGUgPz8gTmF0aXZlRmlsZVxuXG4vLyBodHRwczovL3hoci5zcGVjLndoYXR3Zy5vcmcvI2Zvcm1kYXRhXG5jbGFzcyBGb3JtRGF0YSB7XG4gIGNvbnN0cnVjdG9yIChmb3JtKSB7XG4gICAgd2ViaWRsLnV0aWwubWFya0FzVW5jbG9uZWFibGUodGhpcylcblxuICAgIGlmIChmb3JtICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IHdlYmlkbC5lcnJvcnMuY29udmVyc2lvbkZhaWxlZCh7XG4gICAgICAgIHByZWZpeDogJ0Zvcm1EYXRhIGNvbnN0cnVjdG9yJyxcbiAgICAgICAgYXJndW1lbnQ6ICdBcmd1bWVudCAxJyxcbiAgICAgICAgdHlwZXM6IFsndW5kZWZpbmVkJ11cbiAgICAgIH0pXG4gICAgfVxuXG4gICAgdGhpc1trU3RhdGVdID0gW11cbiAgfVxuXG4gIGFwcGVuZCAobmFtZSwgdmFsdWUsIGZpbGVuYW1lID0gdW5kZWZpbmVkKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRm9ybURhdGEpXG5cbiAgICBjb25zdCBwcmVmaXggPSAnRm9ybURhdGEuYXBwZW5kJ1xuICAgIHdlYmlkbC5hcmd1bWVudExlbmd0aENoZWNrKGFyZ3VtZW50cywgMiwgcHJlZml4KVxuXG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDMgJiYgIWlzQmxvYkxpa2UodmFsdWUpKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICAgICBcIkZhaWxlZCB0byBleGVjdXRlICdhcHBlbmQnIG9uICdGb3JtRGF0YSc6IHBhcmFtZXRlciAyIGlzIG5vdCBvZiB0eXBlICdCbG9iJ1wiXG4gICAgICApXG4gICAgfVxuXG4gICAgLy8gMS4gTGV0IHZhbHVlIGJlIHZhbHVlIGlmIGdpdmVuOyBvdGhlcndpc2UgYmxvYlZhbHVlLlxuXG4gICAgbmFtZSA9IHdlYmlkbC5jb252ZXJ0ZXJzLlVTVlN0cmluZyhuYW1lLCBwcmVmaXgsICduYW1lJylcbiAgICB2YWx1ZSA9IGlzQmxvYkxpa2UodmFsdWUpXG4gICAgICA/IHdlYmlkbC5jb252ZXJ0ZXJzLkJsb2IodmFsdWUsIHByZWZpeCwgJ3ZhbHVlJywgeyBzdHJpY3Q6IGZhbHNlIH0pXG4gICAgICA6IHdlYmlkbC5jb252ZXJ0ZXJzLlVTVlN0cmluZyh2YWx1ZSwgcHJlZml4LCAndmFsdWUnKVxuICAgIGZpbGVuYW1lID0gYXJndW1lbnRzLmxlbmd0aCA9PT0gM1xuICAgICAgPyB3ZWJpZGwuY29udmVydGVycy5VU1ZTdHJpbmcoZmlsZW5hbWUsIHByZWZpeCwgJ2ZpbGVuYW1lJylcbiAgICAgIDogdW5kZWZpbmVkXG5cbiAgICAvLyAyLiBMZXQgZW50cnkgYmUgdGhlIHJlc3VsdCBvZiBjcmVhdGluZyBhbiBlbnRyeSB3aXRoXG4gICAgLy8gbmFtZSwgdmFsdWUsIGFuZCBmaWxlbmFtZSBpZiBnaXZlbi5cbiAgICBjb25zdCBlbnRyeSA9IG1ha2VFbnRyeShuYW1lLCB2YWx1ZSwgZmlsZW5hbWUpXG5cbiAgICAvLyAzLiBBcHBlbmQgZW50cnkgdG8gdGhpc1x1MjAxOXMgZW50cnkgbGlzdC5cbiAgICB0aGlzW2tTdGF0ZV0ucHVzaChlbnRyeSlcbiAgfVxuXG4gIGRlbGV0ZSAobmFtZSkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEZvcm1EYXRhKVxuXG4gICAgY29uc3QgcHJlZml4ID0gJ0Zvcm1EYXRhLmRlbGV0ZSdcbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDEsIHByZWZpeClcblxuICAgIG5hbWUgPSB3ZWJpZGwuY29udmVydGVycy5VU1ZTdHJpbmcobmFtZSwgcHJlZml4LCAnbmFtZScpXG5cbiAgICAvLyBUaGUgZGVsZXRlKG5hbWUpIG1ldGhvZCBzdGVwcyBhcmUgdG8gcmVtb3ZlIGFsbCBlbnRyaWVzIHdob3NlIG5hbWVcbiAgICAvLyBpcyBuYW1lIGZyb20gdGhpc1x1MjAxOXMgZW50cnkgbGlzdC5cbiAgICB0aGlzW2tTdGF0ZV0gPSB0aGlzW2tTdGF0ZV0uZmlsdGVyKGVudHJ5ID0+IGVudHJ5Lm5hbWUgIT09IG5hbWUpXG4gIH1cblxuICBnZXQgKG5hbWUpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBGb3JtRGF0YSlcblxuICAgIGNvbnN0IHByZWZpeCA9ICdGb3JtRGF0YS5nZXQnXG4gICAgd2ViaWRsLmFyZ3VtZW50TGVuZ3RoQ2hlY2soYXJndW1lbnRzLCAxLCBwcmVmaXgpXG5cbiAgICBuYW1lID0gd2ViaWRsLmNvbnZlcnRlcnMuVVNWU3RyaW5nKG5hbWUsIHByZWZpeCwgJ25hbWUnKVxuXG4gICAgLy8gMS4gSWYgdGhlcmUgaXMgbm8gZW50cnkgd2hvc2UgbmFtZSBpcyBuYW1lIGluIHRoaXNcdTIwMTlzIGVudHJ5IGxpc3QsXG4gICAgLy8gdGhlbiByZXR1cm4gbnVsbC5cbiAgICBjb25zdCBpZHggPSB0aGlzW2tTdGF0ZV0uZmluZEluZGV4KChlbnRyeSkgPT4gZW50cnkubmFtZSA9PT0gbmFtZSlcbiAgICBpZiAoaWR4ID09PSAtMSkge1xuICAgICAgcmV0dXJuIG51bGxcbiAgICB9XG5cbiAgICAvLyAyLiBSZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSBmaXJzdCBlbnRyeSB3aG9zZSBuYW1lIGlzIG5hbWUgZnJvbVxuICAgIC8vIHRoaXNcdTIwMTlzIGVudHJ5IGxpc3QuXG4gICAgcmV0dXJuIHRoaXNba1N0YXRlXVtpZHhdLnZhbHVlXG4gIH1cblxuICBnZXRBbGwgKG5hbWUpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBGb3JtRGF0YSlcblxuICAgIGNvbnN0IHByZWZpeCA9ICdGb3JtRGF0YS5nZXRBbGwnXG4gICAgd2ViaWRsLmFyZ3VtZW50TGVuZ3RoQ2hlY2soYXJndW1lbnRzLCAxLCBwcmVmaXgpXG5cbiAgICBuYW1lID0gd2ViaWRsLmNvbnZlcnRlcnMuVVNWU3RyaW5nKG5hbWUsIHByZWZpeCwgJ25hbWUnKVxuXG4gICAgLy8gMS4gSWYgdGhlcmUgaXMgbm8gZW50cnkgd2hvc2UgbmFtZSBpcyBuYW1lIGluIHRoaXNcdTIwMTlzIGVudHJ5IGxpc3QsXG4gICAgLy8gdGhlbiByZXR1cm4gdGhlIGVtcHR5IGxpc3QuXG4gICAgLy8gMi4gUmV0dXJuIHRoZSB2YWx1ZXMgb2YgYWxsIGVudHJpZXMgd2hvc2UgbmFtZSBpcyBuYW1lLCBpbiBvcmRlcixcbiAgICAvLyBmcm9tIHRoaXNcdTIwMTlzIGVudHJ5IGxpc3QuXG4gICAgcmV0dXJuIHRoaXNba1N0YXRlXVxuICAgICAgLmZpbHRlcigoZW50cnkpID0+IGVudHJ5Lm5hbWUgPT09IG5hbWUpXG4gICAgICAubWFwKChlbnRyeSkgPT4gZW50cnkudmFsdWUpXG4gIH1cblxuICBoYXMgKG5hbWUpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBGb3JtRGF0YSlcblxuICAgIGNvbnN0IHByZWZpeCA9ICdGb3JtRGF0YS5oYXMnXG4gICAgd2ViaWRsLmFyZ3VtZW50TGVuZ3RoQ2hlY2soYXJndW1lbnRzLCAxLCBwcmVmaXgpXG5cbiAgICBuYW1lID0gd2ViaWRsLmNvbnZlcnRlcnMuVVNWU3RyaW5nKG5hbWUsIHByZWZpeCwgJ25hbWUnKVxuXG4gICAgLy8gVGhlIGhhcyhuYW1lKSBtZXRob2Qgc3RlcHMgYXJlIHRvIHJldHVybiB0cnVlIGlmIHRoZXJlIGlzIGFuIGVudHJ5XG4gICAgLy8gd2hvc2UgbmFtZSBpcyBuYW1lIGluIHRoaXNcdTIwMTlzIGVudHJ5IGxpc3Q7IG90aGVyd2lzZSBmYWxzZS5cbiAgICByZXR1cm4gdGhpc1trU3RhdGVdLmZpbmRJbmRleCgoZW50cnkpID0+IGVudHJ5Lm5hbWUgPT09IG5hbWUpICE9PSAtMVxuICB9XG5cbiAgc2V0IChuYW1lLCB2YWx1ZSwgZmlsZW5hbWUgPSB1bmRlZmluZWQpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBGb3JtRGF0YSlcblxuICAgIGNvbnN0IHByZWZpeCA9ICdGb3JtRGF0YS5zZXQnXG4gICAgd2ViaWRsLmFyZ3VtZW50TGVuZ3RoQ2hlY2soYXJndW1lbnRzLCAyLCBwcmVmaXgpXG5cbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMyAmJiAhaXNCbG9iTGlrZSh2YWx1ZSkpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAgIFwiRmFpbGVkIHRvIGV4ZWN1dGUgJ3NldCcgb24gJ0Zvcm1EYXRhJzogcGFyYW1ldGVyIDIgaXMgbm90IG9mIHR5cGUgJ0Jsb2InXCJcbiAgICAgIClcbiAgICB9XG5cbiAgICAvLyBUaGUgc2V0KG5hbWUsIHZhbHVlKSBhbmQgc2V0KG5hbWUsIGJsb2JWYWx1ZSwgZmlsZW5hbWUpIG1ldGhvZCBzdGVwc1xuICAgIC8vIGFyZTpcblxuICAgIC8vIDEuIExldCB2YWx1ZSBiZSB2YWx1ZSBpZiBnaXZlbjsgb3RoZXJ3aXNlIGJsb2JWYWx1ZS5cblxuICAgIG5hbWUgPSB3ZWJpZGwuY29udmVydGVycy5VU1ZTdHJpbmcobmFtZSwgcHJlZml4LCAnbmFtZScpXG4gICAgdmFsdWUgPSBpc0Jsb2JMaWtlKHZhbHVlKVxuICAgICAgPyB3ZWJpZGwuY29udmVydGVycy5CbG9iKHZhbHVlLCBwcmVmaXgsICduYW1lJywgeyBzdHJpY3Q6IGZhbHNlIH0pXG4gICAgICA6IHdlYmlkbC5jb252ZXJ0ZXJzLlVTVlN0cmluZyh2YWx1ZSwgcHJlZml4LCAnbmFtZScpXG4gICAgZmlsZW5hbWUgPSBhcmd1bWVudHMubGVuZ3RoID09PSAzXG4gICAgICA/IHdlYmlkbC5jb252ZXJ0ZXJzLlVTVlN0cmluZyhmaWxlbmFtZSwgcHJlZml4LCAnbmFtZScpXG4gICAgICA6IHVuZGVmaW5lZFxuXG4gICAgLy8gMi4gTGV0IGVudHJ5IGJlIHRoZSByZXN1bHQgb2YgY3JlYXRpbmcgYW4gZW50cnkgd2l0aCBuYW1lLCB2YWx1ZSwgYW5kXG4gICAgLy8gZmlsZW5hbWUgaWYgZ2l2ZW4uXG4gICAgY29uc3QgZW50cnkgPSBtYWtlRW50cnkobmFtZSwgdmFsdWUsIGZpbGVuYW1lKVxuXG4gICAgLy8gMy4gSWYgdGhlcmUgYXJlIGVudHJpZXMgaW4gdGhpc1x1MjAxOXMgZW50cnkgbGlzdCB3aG9zZSBuYW1lIGlzIG5hbWUsIHRoZW5cbiAgICAvLyByZXBsYWNlIHRoZSBmaXJzdCBzdWNoIGVudHJ5IHdpdGggZW50cnkgYW5kIHJlbW92ZSB0aGUgb3RoZXJzLlxuICAgIGNvbnN0IGlkeCA9IHRoaXNba1N0YXRlXS5maW5kSW5kZXgoKGVudHJ5KSA9PiBlbnRyeS5uYW1lID09PSBuYW1lKVxuICAgIGlmIChpZHggIT09IC0xKSB7XG4gICAgICB0aGlzW2tTdGF0ZV0gPSBbXG4gICAgICAgIC4uLnRoaXNba1N0YXRlXS5zbGljZSgwLCBpZHgpLFxuICAgICAgICBlbnRyeSxcbiAgICAgICAgLi4udGhpc1trU3RhdGVdLnNsaWNlKGlkeCArIDEpLmZpbHRlcigoZW50cnkpID0+IGVudHJ5Lm5hbWUgIT09IG5hbWUpXG4gICAgICBdXG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIDQuIE90aGVyd2lzZSwgYXBwZW5kIGVudHJ5IHRvIHRoaXNcdTIwMTlzIGVudHJ5IGxpc3QuXG4gICAgICB0aGlzW2tTdGF0ZV0ucHVzaChlbnRyeSlcbiAgICB9XG4gIH1cblxuICBbbm9kZVV0aWwuaW5zcGVjdC5jdXN0b21dIChkZXB0aCwgb3B0aW9ucykge1xuICAgIGNvbnN0IHN0YXRlID0gdGhpc1trU3RhdGVdLnJlZHVjZSgoYSwgYikgPT4ge1xuICAgICAgaWYgKGFbYi5uYW1lXSkge1xuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShhW2IubmFtZV0pKSB7XG4gICAgICAgICAgYVtiLm5hbWVdLnB1c2goYi52YWx1ZSlcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBhW2IubmFtZV0gPSBbYVtiLm5hbWVdLCBiLnZhbHVlXVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhW2IubmFtZV0gPSBiLnZhbHVlXG4gICAgICB9XG5cbiAgICAgIHJldHVybiBhXG4gICAgfSwgeyBfX3Byb3RvX186IG51bGwgfSlcblxuICAgIG9wdGlvbnMuZGVwdGggPz89IGRlcHRoXG4gICAgb3B0aW9ucy5jb2xvcnMgPz89IHRydWVcblxuICAgIGNvbnN0IG91dHB1dCA9IG5vZGVVdGlsLmZvcm1hdFdpdGhPcHRpb25zKG9wdGlvbnMsIHN0YXRlKVxuXG4gICAgLy8gcmVtb3ZlIFtPYmplY3QgbnVsbCBwcm90b3R5cGVdXG4gICAgcmV0dXJuIGBGb3JtRGF0YSAke291dHB1dC5zbGljZShvdXRwdXQuaW5kZXhPZignXScpICsgMil9YFxuICB9XG59XG5cbml0ZXJhdG9yTWl4aW4oJ0Zvcm1EYXRhJywgRm9ybURhdGEsIGtTdGF0ZSwgJ25hbWUnLCAndmFsdWUnKVxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhGb3JtRGF0YS5wcm90b3R5cGUsIHtcbiAgYXBwZW5kOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBkZWxldGU6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGdldDoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgZ2V0QWxsOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBoYXM6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIHNldDoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgW1N5bWJvbC50b1N0cmluZ1RhZ106IHtcbiAgICB2YWx1ZTogJ0Zvcm1EYXRhJyxcbiAgICBjb25maWd1cmFibGU6IHRydWVcbiAgfVxufSlcblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL2Zvcm0tY29udHJvbC1pbmZyYXN0cnVjdHVyZS5odG1sI2NyZWF0ZS1hbi1lbnRyeVxuICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcbiAqIEBwYXJhbSB7c3RyaW5nfEJsb2J9IHZhbHVlXG4gKiBAcGFyYW0gez9zdHJpbmd9IGZpbGVuYW1lXG4gKiBAcmV0dXJuc1xuICovXG5mdW5jdGlvbiBtYWtlRW50cnkgKG5hbWUsIHZhbHVlLCBmaWxlbmFtZSkge1xuICAvLyAxLiBTZXQgbmFtZSB0byB0aGUgcmVzdWx0IG9mIGNvbnZlcnRpbmcgbmFtZSBpbnRvIGEgc2NhbGFyIHZhbHVlIHN0cmluZy5cbiAgLy8gTm90ZTogVGhpcyBvcGVyYXRpb24gd2FzIGRvbmUgYnkgdGhlIHdlYmlkbCBjb252ZXJ0ZXIgVVNWU3RyaW5nLlxuXG4gIC8vIDIuIElmIHZhbHVlIGlzIGEgc3RyaW5nLCB0aGVuIHNldCB2YWx1ZSB0byB0aGUgcmVzdWx0IG9mIGNvbnZlcnRpbmdcbiAgLy8gICAgdmFsdWUgaW50byBhIHNjYWxhciB2YWx1ZSBzdHJpbmcuXG4gIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgLy8gTm90ZTogVGhpcyBvcGVyYXRpb24gd2FzIGRvbmUgYnkgdGhlIHdlYmlkbCBjb252ZXJ0ZXIgVVNWU3RyaW5nLlxuICB9IGVsc2Uge1xuICAgIC8vIDMuIE90aGVyd2lzZTpcblxuICAgIC8vIDEuIElmIHZhbHVlIGlzIG5vdCBhIEZpbGUgb2JqZWN0LCB0aGVuIHNldCB2YWx1ZSB0byBhIG5ldyBGaWxlIG9iamVjdCxcbiAgICAvLyAgICByZXByZXNlbnRpbmcgdGhlIHNhbWUgYnl0ZXMsIHdob3NlIG5hbWUgYXR0cmlidXRlIHZhbHVlIGlzIFwiYmxvYlwiXG4gICAgaWYgKCFpc0ZpbGVMaWtlKHZhbHVlKSkge1xuICAgICAgdmFsdWUgPSB2YWx1ZSBpbnN0YW5jZW9mIEJsb2JcbiAgICAgICAgPyBuZXcgRmlsZShbdmFsdWVdLCAnYmxvYicsIHsgdHlwZTogdmFsdWUudHlwZSB9KVxuICAgICAgICA6IG5ldyBGaWxlTGlrZSh2YWx1ZSwgJ2Jsb2InLCB7IHR5cGU6IHZhbHVlLnR5cGUgfSlcbiAgICB9XG5cbiAgICAvLyAyLiBJZiBmaWxlbmFtZSBpcyBnaXZlbiwgdGhlbiBzZXQgdmFsdWUgdG8gYSBuZXcgRmlsZSBvYmplY3QsXG4gICAgLy8gICAgcmVwcmVzZW50aW5nIHRoZSBzYW1lIGJ5dGVzLCB3aG9zZSBuYW1lIGF0dHJpYnV0ZSBpcyBmaWxlbmFtZS5cbiAgICBpZiAoZmlsZW5hbWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgLyoqIEB0eXBlIHtGaWxlUHJvcGVydHlCYWd9ICovXG4gICAgICBjb25zdCBvcHRpb25zID0ge1xuICAgICAgICB0eXBlOiB2YWx1ZS50eXBlLFxuICAgICAgICBsYXN0TW9kaWZpZWQ6IHZhbHVlLmxhc3RNb2RpZmllZFxuICAgICAgfVxuXG4gICAgICB2YWx1ZSA9IHZhbHVlIGluc3RhbmNlb2YgTmF0aXZlRmlsZVxuICAgICAgICA/IG5ldyBGaWxlKFt2YWx1ZV0sIGZpbGVuYW1lLCBvcHRpb25zKVxuICAgICAgICA6IG5ldyBGaWxlTGlrZSh2YWx1ZSwgZmlsZW5hbWUsIG9wdGlvbnMpXG4gICAgfVxuICB9XG5cbiAgLy8gNC4gUmV0dXJuIGFuIGVudHJ5IHdob3NlIG5hbWUgaXMgbmFtZSBhbmQgd2hvc2UgdmFsdWUgaXMgdmFsdWUuXG4gIHJldHVybiB7IG5hbWUsIHZhbHVlIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7IEZvcm1EYXRhLCBtYWtlRW50cnkgfVxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7IGlzVVNWU3RyaW5nLCBidWZmZXJUb0xvd2VyQ2FzZWRIZWFkZXJOYW1lIH0gPSByZXF1aXJlKCcuLi8uLi9jb3JlL3V0aWwnKVxuY29uc3QgeyB1dGY4RGVjb2RlQnl0ZXMgfSA9IHJlcXVpcmUoJy4vdXRpbCcpXG5jb25zdCB7IEhUVFBfVE9LRU5fQ09ERVBPSU5UUywgaXNvbW9ycGhpY0RlY29kZSB9ID0gcmVxdWlyZSgnLi9kYXRhLXVybCcpXG5jb25zdCB7IGlzRmlsZUxpa2UgfSA9IHJlcXVpcmUoJy4vZmlsZScpXG5jb25zdCB7IG1ha2VFbnRyeSB9ID0gcmVxdWlyZSgnLi9mb3JtZGF0YScpXG5jb25zdCBhc3NlcnQgPSByZXF1aXJlKCdub2RlOmFzc2VydCcpXG5jb25zdCB7IEZpbGU6IE5vZGVGaWxlIH0gPSByZXF1aXJlKCdub2RlOmJ1ZmZlcicpXG5cbmNvbnN0IEZpbGUgPSBnbG9iYWxUaGlzLkZpbGUgPz8gTm9kZUZpbGVcblxuY29uc3QgZm9ybURhdGFOYW1lQnVmZmVyID0gQnVmZmVyLmZyb20oJ2Zvcm0tZGF0YTsgbmFtZT1cIicpXG5jb25zdCBmaWxlbmFtZUJ1ZmZlciA9IEJ1ZmZlci5mcm9tKCc7IGZpbGVuYW1lJylcbmNvbnN0IGRkID0gQnVmZmVyLmZyb20oJy0tJylcbmNvbnN0IGRkY3JsZiA9IEJ1ZmZlci5mcm9tKCctLVxcclxcbicpXG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IGNoYXJzXG4gKi9cbmZ1bmN0aW9uIGlzQXNjaWlTdHJpbmcgKGNoYXJzKSB7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgY2hhcnMubGVuZ3RoOyArK2kpIHtcbiAgICBpZiAoKGNoYXJzLmNoYXJDb2RlQXQoaSkgJiB+MHg3RikgIT09IDApIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cbiAgfVxuICByZXR1cm4gdHJ1ZVxufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly9hbmRyZXVib3RlbGxhLmdpdGh1Yi5pby9tdWx0aXBhcnQtZm9ybS1kYXRhLyNtdWx0aXBhcnQtZm9ybS1kYXRhLWJvdW5kYXJ5XG4gKiBAcGFyYW0ge3N0cmluZ30gYm91bmRhcnlcbiAqL1xuZnVuY3Rpb24gdmFsaWRhdGVCb3VuZGFyeSAoYm91bmRhcnkpIHtcbiAgY29uc3QgbGVuZ3RoID0gYm91bmRhcnkubGVuZ3RoXG5cbiAgLy8gLSBpdHMgbGVuZ3RoIGlzIGdyZWF0ZXIgb3IgZXF1YWwgdG8gMjcgYW5kIGxlc3NlciBvciBlcXVhbCB0byA3MCwgYW5kXG4gIGlmIChsZW5ndGggPCAyNyB8fCBsZW5ndGggPiA3MCkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgLy8gLSBpdCBpcyBjb21wb3NlZCBieSBieXRlcyBpbiB0aGUgcmFuZ2VzIDB4MzAgdG8gMHgzOSwgMHg0MSB0byAweDVBLCBvclxuICAvLyAgIDB4NjEgdG8gMHg3QSwgaW5jbHVzaXZlIChBU0NJSSBhbHBoYW51bWVyaWMpLCBvciB3aGljaCBhcmUgMHgyNyAoJyksXG4gIC8vICAgMHgyRCAoLSkgb3IgMHg1RiAoXykuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHtcbiAgICBjb25zdCBjcCA9IGJvdW5kYXJ5LmNoYXJDb2RlQXQoaSlcblxuICAgIGlmICghKFxuICAgICAgKGNwID49IDB4MzAgJiYgY3AgPD0gMHgzOSkgfHxcbiAgICAgIChjcCA+PSAweDQxICYmIGNwIDw9IDB4NWEpIHx8XG4gICAgICAoY3AgPj0gMHg2MSAmJiBjcCA8PSAweDdhKSB8fFxuICAgICAgY3AgPT09IDB4MjcgfHxcbiAgICAgIGNwID09PSAweDJkIHx8XG4gICAgICBjcCA9PT0gMHg1ZlxuICAgICkpIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0cnVlXG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL2FuZHJldWJvdGVsbGEuZ2l0aHViLmlvL211bHRpcGFydC1mb3JtLWRhdGEvI211bHRpcGFydC1mb3JtLWRhdGEtcGFyc2VyXG4gKiBAcGFyYW0ge0J1ZmZlcn0gaW5wdXRcbiAqIEBwYXJhbSB7UmV0dXJuVHlwZTxpbXBvcnQoJy4vZGF0YS11cmwnKVsncGFyc2VNSU1FVHlwZSddPn0gbWltZVR5cGVcbiAqL1xuZnVuY3Rpb24gbXVsdGlwYXJ0Rm9ybURhdGFQYXJzZXIgKGlucHV0LCBtaW1lVHlwZSkge1xuICAvLyAxLiBBc3NlcnQ6IG1pbWVUeXBlXHUyMDE5cyBlc3NlbmNlIGlzIFwibXVsdGlwYXJ0L2Zvcm0tZGF0YVwiLlxuICBhc3NlcnQobWltZVR5cGUgIT09ICdmYWlsdXJlJyAmJiBtaW1lVHlwZS5lc3NlbmNlID09PSAnbXVsdGlwYXJ0L2Zvcm0tZGF0YScpXG5cbiAgY29uc3QgYm91bmRhcnlTdHJpbmcgPSBtaW1lVHlwZS5wYXJhbWV0ZXJzLmdldCgnYm91bmRhcnknKVxuXG4gIC8vIDIuIElmIG1pbWVUeXBlXHUyMDE5cyBwYXJhbWV0ZXJzW1wiYm91bmRhcnlcIl0gZG9lcyBub3QgZXhpc3QsIHJldHVybiBmYWlsdXJlLlxuICAvLyAgICBPdGhlcndpc2UsIGxldCBib3VuZGFyeSBiZSB0aGUgcmVzdWx0IG9mIFVURi04IGRlY29kaW5nIG1pbWVUeXBlXHUyMDE5c1xuICAvLyAgICBwYXJhbWV0ZXJzW1wiYm91bmRhcnlcIl0uXG4gIGlmIChib3VuZGFyeVN0cmluZyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuICdmYWlsdXJlJ1xuICB9XG5cbiAgY29uc3QgYm91bmRhcnkgPSBCdWZmZXIuZnJvbShgLS0ke2JvdW5kYXJ5U3RyaW5nfWAsICd1dGY4JylcblxuICAvLyAzLiBMZXQgZW50cnkgbGlzdCBiZSBhbiBlbXB0eSBlbnRyeSBsaXN0LlxuICBjb25zdCBlbnRyeUxpc3QgPSBbXVxuXG4gIC8vIDQuIExldCBwb3NpdGlvbiBiZSBhIHBvaW50ZXIgdG8gYSBieXRlIGluIGlucHV0LCBpbml0aWFsbHkgcG9pbnRpbmcgYXRcbiAgLy8gICAgdGhlIGZpcnN0IGJ5dGUuXG4gIGNvbnN0IHBvc2l0aW9uID0geyBwb3NpdGlvbjogMCB9XG5cbiAgLy8gTm90ZTogdW5kaWNpIGFkZGl0aW9uLCBhbGxvd3MgbGVhZGluZyBhbmQgdHJhaWxpbmcgQ1JMRnMuXG4gIHdoaWxlIChpbnB1dFtwb3NpdGlvbi5wb3NpdGlvbl0gPT09IDB4MGQgJiYgaW5wdXRbcG9zaXRpb24ucG9zaXRpb24gKyAxXSA9PT0gMHgwYSkge1xuICAgIHBvc2l0aW9uLnBvc2l0aW9uICs9IDJcbiAgfVxuXG4gIGxldCB0cmFpbGluZyA9IGlucHV0Lmxlbmd0aFxuXG4gIHdoaWxlIChpbnB1dFt0cmFpbGluZyAtIDFdID09PSAweDBhICYmIGlucHV0W3RyYWlsaW5nIC0gMl0gPT09IDB4MGQpIHtcbiAgICB0cmFpbGluZyAtPSAyXG4gIH1cblxuICBpZiAodHJhaWxpbmcgIT09IGlucHV0Lmxlbmd0aCkge1xuICAgIGlucHV0ID0gaW5wdXQuc3ViYXJyYXkoMCwgdHJhaWxpbmcpXG4gIH1cblxuICAvLyA1LiBXaGlsZSB0cnVlOlxuICB3aGlsZSAodHJ1ZSkge1xuICAgIC8vIDUuMS4gSWYgcG9zaXRpb24gcG9pbnRzIHRvIGEgc2VxdWVuY2Ugb2YgYnl0ZXMgc3RhcnRpbmcgd2l0aCAweDJEIDB4MkRcbiAgICAvLyAgICAgIChgLS1gKSBmb2xsb3dlZCBieSBib3VuZGFyeSwgYWR2YW5jZSBwb3NpdGlvbiBieSAyICsgdGhlIGxlbmd0aCBvZlxuICAgIC8vICAgICAgYm91bmRhcnkuIE90aGVyd2lzZSwgcmV0dXJuIGZhaWx1cmUuXG4gICAgLy8gTm90ZTogYm91bmRhcnkgaXMgcGFkZGVkIHdpdGggMiBkYXNoZXMgYWxyZWFkeSwgbm8gbmVlZCB0byBhZGQgMi5cbiAgICBpZiAoaW5wdXQuc3ViYXJyYXkocG9zaXRpb24ucG9zaXRpb24sIHBvc2l0aW9uLnBvc2l0aW9uICsgYm91bmRhcnkubGVuZ3RoKS5lcXVhbHMoYm91bmRhcnkpKSB7XG4gICAgICBwb3NpdGlvbi5wb3NpdGlvbiArPSBib3VuZGFyeS5sZW5ndGhcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuICdmYWlsdXJlJ1xuICAgIH1cblxuICAgIC8vIDUuMi4gSWYgcG9zaXRpb24gcG9pbnRzIHRvIHRoZSBzZXF1ZW5jZSBvZiBieXRlcyAweDJEIDB4MkQgMHgwRCAweDBBXG4gICAgLy8gICAgICAoYC0tYCBmb2xsb3dlZCBieSBDUiBMRikgZm9sbG93ZWQgYnkgdGhlIGVuZCBvZiBpbnB1dCwgcmV0dXJuIGVudHJ5IGxpc3QuXG4gICAgLy8gTm90ZTogYSBib2R5IGRvZXMgTk9UIG5lZWQgdG8gZW5kIHdpdGggQ1JMRi4gSXQgY2FuIGVuZCB3aXRoIC0tLlxuICAgIGlmIChcbiAgICAgIChwb3NpdGlvbi5wb3NpdGlvbiA9PT0gaW5wdXQubGVuZ3RoIC0gMiAmJiBidWZmZXJTdGFydHNXaXRoKGlucHV0LCBkZCwgcG9zaXRpb24pKSB8fFxuICAgICAgKHBvc2l0aW9uLnBvc2l0aW9uID09PSBpbnB1dC5sZW5ndGggLSA0ICYmIGJ1ZmZlclN0YXJ0c1dpdGgoaW5wdXQsIGRkY3JsZiwgcG9zaXRpb24pKVxuICAgICkge1xuICAgICAgcmV0dXJuIGVudHJ5TGlzdFxuICAgIH1cblxuICAgIC8vIDUuMy4gSWYgcG9zaXRpb24gZG9lcyBub3QgcG9pbnQgdG8gYSBzZXF1ZW5jZSBvZiBieXRlcyBzdGFydGluZyB3aXRoIDB4MERcbiAgICAvLyAgICAgIDB4MEEgKENSIExGKSwgcmV0dXJuIGZhaWx1cmUuXG4gICAgaWYgKGlucHV0W3Bvc2l0aW9uLnBvc2l0aW9uXSAhPT0gMHgwZCB8fCBpbnB1dFtwb3NpdGlvbi5wb3NpdGlvbiArIDFdICE9PSAweDBhKSB7XG4gICAgICByZXR1cm4gJ2ZhaWx1cmUnXG4gICAgfVxuXG4gICAgLy8gNS40LiBBZHZhbmNlIHBvc2l0aW9uIGJ5IDIuIChUaGlzIHNraXBzIHBhc3QgdGhlIG5ld2xpbmUuKVxuICAgIHBvc2l0aW9uLnBvc2l0aW9uICs9IDJcblxuICAgIC8vIDUuNS4gTGV0IG5hbWUsIGZpbGVuYW1lIGFuZCBjb250ZW50VHlwZSBiZSB0aGUgcmVzdWx0IG9mIHBhcnNpbmdcbiAgICAvLyAgICAgIG11bHRpcGFydC9mb3JtLWRhdGEgaGVhZGVycyBvbiBpbnB1dCBhbmQgcG9zaXRpb24sIGlmIHRoZSByZXN1bHRcbiAgICAvLyAgICAgIGlzIG5vdCBmYWlsdXJlLiBPdGhlcndpc2UsIHJldHVybiBmYWlsdXJlLlxuICAgIGNvbnN0IHJlc3VsdCA9IHBhcnNlTXVsdGlwYXJ0Rm9ybURhdGFIZWFkZXJzKGlucHV0LCBwb3NpdGlvbilcblxuICAgIGlmIChyZXN1bHQgPT09ICdmYWlsdXJlJykge1xuICAgICAgcmV0dXJuICdmYWlsdXJlJ1xuICAgIH1cblxuICAgIGxldCB7IG5hbWUsIGZpbGVuYW1lLCBjb250ZW50VHlwZSwgZW5jb2RpbmcgfSA9IHJlc3VsdFxuXG4gICAgLy8gNS42LiBBZHZhbmNlIHBvc2l0aW9uIGJ5IDIuIChUaGlzIHNraXBzIHBhc3QgdGhlIGVtcHR5IGxpbmUgdGhhdCBtYXJrc1xuICAgIC8vICAgICAgdGhlIGVuZCBvZiB0aGUgaGVhZGVycy4pXG4gICAgcG9zaXRpb24ucG9zaXRpb24gKz0gMlxuXG4gICAgLy8gNS43LiBMZXQgYm9keSBiZSB0aGUgZW1wdHkgYnl0ZSBzZXF1ZW5jZS5cbiAgICBsZXQgYm9keVxuXG4gICAgLy8gNS44LiBCb2R5IGxvb3A6IFdoaWxlIHBvc2l0aW9uIGlzIG5vdCBwYXN0IHRoZSBlbmQgb2YgaW5wdXQ6XG4gICAgLy8gVE9ETzogdGhlIHN0ZXBzIGhlcmUgYXJlIGNvbXBsZXRlbHkgd3JvbmdcbiAgICB7XG4gICAgICBjb25zdCBib3VuZGFyeUluZGV4ID0gaW5wdXQuaW5kZXhPZihib3VuZGFyeS5zdWJhcnJheSgyKSwgcG9zaXRpb24ucG9zaXRpb24pXG5cbiAgICAgIGlmIChib3VuZGFyeUluZGV4ID09PSAtMSkge1xuICAgICAgICByZXR1cm4gJ2ZhaWx1cmUnXG4gICAgICB9XG5cbiAgICAgIGJvZHkgPSBpbnB1dC5zdWJhcnJheShwb3NpdGlvbi5wb3NpdGlvbiwgYm91bmRhcnlJbmRleCAtIDQpXG5cbiAgICAgIHBvc2l0aW9uLnBvc2l0aW9uICs9IGJvZHkubGVuZ3RoXG5cbiAgICAgIC8vIE5vdGU6IHBvc2l0aW9uIG11c3QgYmUgYWR2YW5jZWQgYnkgdGhlIGJvZHkncyBsZW5ndGggYmVmb3JlIGJlaW5nXG4gICAgICAvLyBkZWNvZGVkLCBvdGhlcndpc2UgdGhlIHBhcnNpbmcgd2lsbCBmYWlsLlxuICAgICAgaWYgKGVuY29kaW5nID09PSAnYmFzZTY0Jykge1xuICAgICAgICBib2R5ID0gQnVmZmVyLmZyb20oYm9keS50b1N0cmluZygpLCAnYmFzZTY0JylcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyA1LjkuIElmIHBvc2l0aW9uIGRvZXMgbm90IHBvaW50IHRvIGEgc2VxdWVuY2Ugb2YgYnl0ZXMgc3RhcnRpbmcgd2l0aFxuICAgIC8vICAgICAgMHgwRCAweDBBIChDUiBMRiksIHJldHVybiBmYWlsdXJlLiBPdGhlcndpc2UsIGFkdmFuY2UgcG9zaXRpb24gYnkgMi5cbiAgICBpZiAoaW5wdXRbcG9zaXRpb24ucG9zaXRpb25dICE9PSAweDBkIHx8IGlucHV0W3Bvc2l0aW9uLnBvc2l0aW9uICsgMV0gIT09IDB4MGEpIHtcbiAgICAgIHJldHVybiAnZmFpbHVyZSdcbiAgICB9IGVsc2Uge1xuICAgICAgcG9zaXRpb24ucG9zaXRpb24gKz0gMlxuICAgIH1cblxuICAgIC8vIDUuMTAuIElmIGZpbGVuYW1lIGlzIG5vdCBudWxsOlxuICAgIGxldCB2YWx1ZVxuXG4gICAgaWYgKGZpbGVuYW1lICE9PSBudWxsKSB7XG4gICAgICAvLyA1LjEwLjEuIElmIGNvbnRlbnRUeXBlIGlzIG51bGwsIHNldCBjb250ZW50VHlwZSB0byBcInRleHQvcGxhaW5cIi5cbiAgICAgIGNvbnRlbnRUeXBlID8/PSAndGV4dC9wbGFpbidcblxuICAgICAgLy8gNS4xMC4yLiBJZiBjb250ZW50VHlwZSBpcyBub3QgYW4gQVNDSUkgc3RyaW5nLCBzZXQgY29udGVudFR5cGUgdG8gdGhlIGVtcHR5IHN0cmluZy5cblxuICAgICAgLy8gTm90ZTogYGJ1ZmZlci5pc0FzY2lpYCBjYW4gYmUgdXNlZCBhdCB6ZXJvLWNvc3QsIGJ1dCBjb252ZXJ0aW5nIGEgc3RyaW5nIHRvIGEgYnVmZmVyIGlzIGEgaGlnaCBvdmVyaGVhZC5cbiAgICAgIC8vIENvbnRlbnQtVHlwZSBpcyBhIHJlbGF0aXZlbHkgc21hbGwgc3RyaW5nLCBzbyBpdCBpcyBmYXN0ZXIgdG8gdXNlIGBTdHJpbmcjY2hhckNvZGVBdGAuXG4gICAgICBpZiAoIWlzQXNjaWlTdHJpbmcoY29udGVudFR5cGUpKSB7XG4gICAgICAgIGNvbnRlbnRUeXBlID0gJydcbiAgICAgIH1cblxuICAgICAgLy8gNS4xMC4zLiBMZXQgdmFsdWUgYmUgYSBuZXcgRmlsZSBvYmplY3Qgd2l0aCBuYW1lIGZpbGVuYW1lLCB0eXBlIGNvbnRlbnRUeXBlLCBhbmQgYm9keSBib2R5LlxuICAgICAgdmFsdWUgPSBuZXcgRmlsZShbYm9keV0sIGZpbGVuYW1lLCB7IHR5cGU6IGNvbnRlbnRUeXBlIH0pXG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIDUuMTEuIE90aGVyd2lzZTpcblxuICAgICAgLy8gNS4xMS4xLiBMZXQgdmFsdWUgYmUgdGhlIFVURi04IGRlY29kaW5nIHdpdGhvdXQgQk9NIG9mIGJvZHkuXG4gICAgICB2YWx1ZSA9IHV0ZjhEZWNvZGVCeXRlcyhCdWZmZXIuZnJvbShib2R5KSlcbiAgICB9XG5cbiAgICAvLyA1LjEyLiBBc3NlcnQ6IG5hbWUgaXMgYSBzY2FsYXIgdmFsdWUgc3RyaW5nIGFuZCB2YWx1ZSBpcyBlaXRoZXIgYSBzY2FsYXIgdmFsdWUgc3RyaW5nIG9yIGEgRmlsZSBvYmplY3QuXG4gICAgYXNzZXJ0KGlzVVNWU3RyaW5nKG5hbWUpKVxuICAgIGFzc2VydCgodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyAmJiBpc1VTVlN0cmluZyh2YWx1ZSkpIHx8IGlzRmlsZUxpa2UodmFsdWUpKVxuXG4gICAgLy8gNS4xMy4gQ3JlYXRlIGFuIGVudHJ5IHdpdGggbmFtZSBhbmQgdmFsdWUsIGFuZCBhcHBlbmQgaXQgdG8gZW50cnkgbGlzdC5cbiAgICBlbnRyeUxpc3QucHVzaChtYWtlRW50cnkobmFtZSwgdmFsdWUsIGZpbGVuYW1lKSlcbiAgfVxufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly9hbmRyZXVib3RlbGxhLmdpdGh1Yi5pby9tdWx0aXBhcnQtZm9ybS1kYXRhLyNwYXJzZS1tdWx0aXBhcnQtZm9ybS1kYXRhLWhlYWRlcnNcbiAqIEBwYXJhbSB7QnVmZmVyfSBpbnB1dFxuICogQHBhcmFtIHt7IHBvc2l0aW9uOiBudW1iZXIgfX0gcG9zaXRpb25cbiAqL1xuZnVuY3Rpb24gcGFyc2VNdWx0aXBhcnRGb3JtRGF0YUhlYWRlcnMgKGlucHV0LCBwb3NpdGlvbikge1xuICAvLyAxLiBMZXQgbmFtZSwgZmlsZW5hbWUgYW5kIGNvbnRlbnRUeXBlIGJlIG51bGwuXG4gIGxldCBuYW1lID0gbnVsbFxuICBsZXQgZmlsZW5hbWUgPSBudWxsXG4gIGxldCBjb250ZW50VHlwZSA9IG51bGxcbiAgbGV0IGVuY29kaW5nID0gbnVsbFxuXG4gIC8vIDIuIFdoaWxlIHRydWU6XG4gIHdoaWxlICh0cnVlKSB7XG4gICAgLy8gMi4xLiBJZiBwb3NpdGlvbiBwb2ludHMgdG8gYSBzZXF1ZW5jZSBvZiBieXRlcyBzdGFydGluZyB3aXRoIDB4MEQgMHgwQSAoQ1IgTEYpOlxuICAgIGlmIChpbnB1dFtwb3NpdGlvbi5wb3NpdGlvbl0gPT09IDB4MGQgJiYgaW5wdXRbcG9zaXRpb24ucG9zaXRpb24gKyAxXSA9PT0gMHgwYSkge1xuICAgICAgLy8gMi4xLjEuIElmIG5hbWUgaXMgbnVsbCwgcmV0dXJuIGZhaWx1cmUuXG4gICAgICBpZiAobmFtZSA9PT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gJ2ZhaWx1cmUnXG4gICAgICB9XG5cbiAgICAgIC8vIDIuMS4yLiBSZXR1cm4gbmFtZSwgZmlsZW5hbWUgYW5kIGNvbnRlbnRUeXBlLlxuICAgICAgcmV0dXJuIHsgbmFtZSwgZmlsZW5hbWUsIGNvbnRlbnRUeXBlLCBlbmNvZGluZyB9XG4gICAgfVxuXG4gICAgLy8gMi4yLiBMZXQgaGVhZGVyIG5hbWUgYmUgdGhlIHJlc3VsdCBvZiBjb2xsZWN0aW5nIGEgc2VxdWVuY2Ugb2YgYnl0ZXMgdGhhdCBhcmVcbiAgICAvLyAgICAgIG5vdCAweDBBIChMRiksIDB4MEQgKENSKSBvciAweDNBICg6KSwgZ2l2ZW4gcG9zaXRpb24uXG4gICAgbGV0IGhlYWRlck5hbWUgPSBjb2xsZWN0QVNlcXVlbmNlT2ZCeXRlcyhcbiAgICAgIChjaGFyKSA9PiBjaGFyICE9PSAweDBhICYmIGNoYXIgIT09IDB4MGQgJiYgY2hhciAhPT0gMHgzYSxcbiAgICAgIGlucHV0LFxuICAgICAgcG9zaXRpb25cbiAgICApXG5cbiAgICAvLyAyLjMuIFJlbW92ZSBhbnkgSFRUUCB0YWIgb3Igc3BhY2UgYnl0ZXMgZnJvbSB0aGUgc3RhcnQgb3IgZW5kIG9mIGhlYWRlciBuYW1lLlxuICAgIGhlYWRlck5hbWUgPSByZW1vdmVDaGFycyhoZWFkZXJOYW1lLCB0cnVlLCB0cnVlLCAoY2hhcikgPT4gY2hhciA9PT0gMHg5IHx8IGNoYXIgPT09IDB4MjApXG5cbiAgICAvLyAyLjQuIElmIGhlYWRlciBuYW1lIGRvZXMgbm90IG1hdGNoIHRoZSBmaWVsZC1uYW1lIHRva2VuIHByb2R1Y3Rpb24sIHJldHVybiBmYWlsdXJlLlxuICAgIGlmICghSFRUUF9UT0tFTl9DT0RFUE9JTlRTLnRlc3QoaGVhZGVyTmFtZS50b1N0cmluZygpKSkge1xuICAgICAgcmV0dXJuICdmYWlsdXJlJ1xuICAgIH1cblxuICAgIC8vIDIuNS4gSWYgdGhlIGJ5dGUgYXQgcG9zaXRpb24gaXMgbm90IDB4M0EgKDopLCByZXR1cm4gZmFpbHVyZS5cbiAgICBpZiAoaW5wdXRbcG9zaXRpb24ucG9zaXRpb25dICE9PSAweDNhKSB7XG4gICAgICByZXR1cm4gJ2ZhaWx1cmUnXG4gICAgfVxuXG4gICAgLy8gMi42LiBBZHZhbmNlIHBvc2l0aW9uIGJ5IDEuXG4gICAgcG9zaXRpb24ucG9zaXRpb24rK1xuXG4gICAgLy8gMi43LiBDb2xsZWN0IGEgc2VxdWVuY2Ugb2YgYnl0ZXMgdGhhdCBhcmUgSFRUUCB0YWIgb3Igc3BhY2UgYnl0ZXMgZ2l2ZW4gcG9zaXRpb24uXG4gICAgLy8gICAgICAoRG8gbm90aGluZyB3aXRoIHRob3NlIGJ5dGVzLilcbiAgICBjb2xsZWN0QVNlcXVlbmNlT2ZCeXRlcyhcbiAgICAgIChjaGFyKSA9PiBjaGFyID09PSAweDIwIHx8IGNoYXIgPT09IDB4MDksXG4gICAgICBpbnB1dCxcbiAgICAgIHBvc2l0aW9uXG4gICAgKVxuXG4gICAgLy8gMi44LiBCeXRlLWxvd2VyY2FzZSBoZWFkZXIgbmFtZSBhbmQgc3dpdGNoIG9uIHRoZSByZXN1bHQ6XG4gICAgc3dpdGNoIChidWZmZXJUb0xvd2VyQ2FzZWRIZWFkZXJOYW1lKGhlYWRlck5hbWUpKSB7XG4gICAgICBjYXNlICdjb250ZW50LWRpc3Bvc2l0aW9uJzoge1xuICAgICAgICAvLyAxLiBTZXQgbmFtZSBhbmQgZmlsZW5hbWUgdG8gbnVsbC5cbiAgICAgICAgbmFtZSA9IGZpbGVuYW1lID0gbnVsbFxuXG4gICAgICAgIC8vIDIuIElmIHBvc2l0aW9uIGRvZXMgbm90IHBvaW50IHRvIGEgc2VxdWVuY2Ugb2YgYnl0ZXMgc3RhcnRpbmcgd2l0aFxuICAgICAgICAvLyAgICBgZm9ybS1kYXRhOyBuYW1lPVwiYCwgcmV0dXJuIGZhaWx1cmUuXG4gICAgICAgIGlmICghYnVmZmVyU3RhcnRzV2l0aChpbnB1dCwgZm9ybURhdGFOYW1lQnVmZmVyLCBwb3NpdGlvbikpIHtcbiAgICAgICAgICByZXR1cm4gJ2ZhaWx1cmUnXG4gICAgICAgIH1cblxuICAgICAgICAvLyAzLiBBZHZhbmNlIHBvc2l0aW9uIHNvIGl0IHBvaW50cyBhdCB0aGUgYnl0ZSBhZnRlciB0aGUgbmV4dCAweDIyIChcIilcbiAgICAgICAgLy8gICAgYnl0ZSAodGhlIG9uZSBpbiB0aGUgc2VxdWVuY2Ugb2YgYnl0ZXMgbWF0Y2hlZCBhYm92ZSkuXG4gICAgICAgIHBvc2l0aW9uLnBvc2l0aW9uICs9IDE3XG5cbiAgICAgICAgLy8gNC4gU2V0IG5hbWUgdG8gdGhlIHJlc3VsdCBvZiBwYXJzaW5nIGEgbXVsdGlwYXJ0L2Zvcm0tZGF0YSBuYW1lIGdpdmVuXG4gICAgICAgIC8vICAgIGlucHV0IGFuZCBwb3NpdGlvbiwgaWYgdGhlIHJlc3VsdCBpcyBub3QgZmFpbHVyZS4gT3RoZXJ3aXNlLCByZXR1cm5cbiAgICAgICAgLy8gICAgZmFpbHVyZS5cbiAgICAgICAgbmFtZSA9IHBhcnNlTXVsdGlwYXJ0Rm9ybURhdGFOYW1lKGlucHV0LCBwb3NpdGlvbilcblxuICAgICAgICBpZiAobmFtZSA9PT0gbnVsbCkge1xuICAgICAgICAgIHJldHVybiAnZmFpbHVyZSdcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIDUuIElmIHBvc2l0aW9uIHBvaW50cyB0byBhIHNlcXVlbmNlIG9mIGJ5dGVzIHN0YXJ0aW5nIHdpdGggYDsgZmlsZW5hbWU9XCJgOlxuICAgICAgICBpZiAoYnVmZmVyU3RhcnRzV2l0aChpbnB1dCwgZmlsZW5hbWVCdWZmZXIsIHBvc2l0aW9uKSkge1xuICAgICAgICAgIC8vIE5vdGU6IHVuZGljaSBhbHNvIGhhbmRsZXMgZmlsZW5hbWUqXG4gICAgICAgICAgbGV0IGNoZWNrID0gcG9zaXRpb24ucG9zaXRpb24gKyBmaWxlbmFtZUJ1ZmZlci5sZW5ndGhcblxuICAgICAgICAgIGlmIChpbnB1dFtjaGVja10gPT09IDB4MmEpIHtcbiAgICAgICAgICAgIHBvc2l0aW9uLnBvc2l0aW9uICs9IDFcbiAgICAgICAgICAgIGNoZWNrICs9IDFcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoaW5wdXRbY2hlY2tdICE9PSAweDNkIHx8IGlucHV0W2NoZWNrICsgMV0gIT09IDB4MjIpIHsgLy8gPVwiXG4gICAgICAgICAgICByZXR1cm4gJ2ZhaWx1cmUnXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gMS4gQWR2YW5jZSBwb3NpdGlvbiBzbyBpdCBwb2ludHMgYXQgdGhlIGJ5dGUgYWZ0ZXIgdGhlIG5leHQgMHgyMiAoXCIpIGJ5dGVcbiAgICAgICAgICAvLyAgICAodGhlIG9uZSBpbiB0aGUgc2VxdWVuY2Ugb2YgYnl0ZXMgbWF0Y2hlZCBhYm92ZSkuXG4gICAgICAgICAgcG9zaXRpb24ucG9zaXRpb24gKz0gMTJcblxuICAgICAgICAgIC8vIDIuIFNldCBmaWxlbmFtZSB0byB0aGUgcmVzdWx0IG9mIHBhcnNpbmcgYSBtdWx0aXBhcnQvZm9ybS1kYXRhIG5hbWUgZ2l2ZW5cbiAgICAgICAgICAvLyAgICBpbnB1dCBhbmQgcG9zaXRpb24sIGlmIHRoZSByZXN1bHQgaXMgbm90IGZhaWx1cmUuIE90aGVyd2lzZSwgcmV0dXJuIGZhaWx1cmUuXG4gICAgICAgICAgZmlsZW5hbWUgPSBwYXJzZU11bHRpcGFydEZvcm1EYXRhTmFtZShpbnB1dCwgcG9zaXRpb24pXG5cbiAgICAgICAgICBpZiAoZmlsZW5hbWUgPT09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiAnZmFpbHVyZSdcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBicmVha1xuICAgICAgfVxuICAgICAgY2FzZSAnY29udGVudC10eXBlJzoge1xuICAgICAgICAvLyAxLiBMZXQgaGVhZGVyIHZhbHVlIGJlIHRoZSByZXN1bHQgb2YgY29sbGVjdGluZyBhIHNlcXVlbmNlIG9mIGJ5dGVzIHRoYXQgYXJlXG4gICAgICAgIC8vICAgIG5vdCAweDBBIChMRikgb3IgMHgwRCAoQ1IpLCBnaXZlbiBwb3NpdGlvbi5cbiAgICAgICAgbGV0IGhlYWRlclZhbHVlID0gY29sbGVjdEFTZXF1ZW5jZU9mQnl0ZXMoXG4gICAgICAgICAgKGNoYXIpID0+IGNoYXIgIT09IDB4MGEgJiYgY2hhciAhPT0gMHgwZCxcbiAgICAgICAgICBpbnB1dCxcbiAgICAgICAgICBwb3NpdGlvblxuICAgICAgICApXG5cbiAgICAgICAgLy8gMi4gUmVtb3ZlIGFueSBIVFRQIHRhYiBvciBzcGFjZSBieXRlcyBmcm9tIHRoZSBlbmQgb2YgaGVhZGVyIHZhbHVlLlxuICAgICAgICBoZWFkZXJWYWx1ZSA9IHJlbW92ZUNoYXJzKGhlYWRlclZhbHVlLCBmYWxzZSwgdHJ1ZSwgKGNoYXIpID0+IGNoYXIgPT09IDB4OSB8fCBjaGFyID09PSAweDIwKVxuXG4gICAgICAgIC8vIDMuIFNldCBjb250ZW50VHlwZSB0byB0aGUgaXNvbW9ycGhpYyBkZWNvZGluZyBvZiBoZWFkZXIgdmFsdWUuXG4gICAgICAgIGNvbnRlbnRUeXBlID0gaXNvbW9ycGhpY0RlY29kZShoZWFkZXJWYWx1ZSlcblxuICAgICAgICBicmVha1xuICAgICAgfVxuICAgICAgY2FzZSAnY29udGVudC10cmFuc2Zlci1lbmNvZGluZyc6IHtcbiAgICAgICAgbGV0IGhlYWRlclZhbHVlID0gY29sbGVjdEFTZXF1ZW5jZU9mQnl0ZXMoXG4gICAgICAgICAgKGNoYXIpID0+IGNoYXIgIT09IDB4MGEgJiYgY2hhciAhPT0gMHgwZCxcbiAgICAgICAgICBpbnB1dCxcbiAgICAgICAgICBwb3NpdGlvblxuICAgICAgICApXG5cbiAgICAgICAgaGVhZGVyVmFsdWUgPSByZW1vdmVDaGFycyhoZWFkZXJWYWx1ZSwgZmFsc2UsIHRydWUsIChjaGFyKSA9PiBjaGFyID09PSAweDkgfHwgY2hhciA9PT0gMHgyMClcblxuICAgICAgICBlbmNvZGluZyA9IGlzb21vcnBoaWNEZWNvZGUoaGVhZGVyVmFsdWUpXG5cbiAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgLy8gQ29sbGVjdCBhIHNlcXVlbmNlIG9mIGJ5dGVzIHRoYXQgYXJlIG5vdCAweDBBIChMRikgb3IgMHgwRCAoQ1IpLCBnaXZlbiBwb3NpdGlvbi5cbiAgICAgICAgLy8gKERvIG5vdGhpbmcgd2l0aCB0aG9zZSBieXRlcy4pXG4gICAgICAgIGNvbGxlY3RBU2VxdWVuY2VPZkJ5dGVzKFxuICAgICAgICAgIChjaGFyKSA9PiBjaGFyICE9PSAweDBhICYmIGNoYXIgIT09IDB4MGQsXG4gICAgICAgICAgaW5wdXQsXG4gICAgICAgICAgcG9zaXRpb25cbiAgICAgICAgKVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIDIuOS4gSWYgcG9zaXRpb24gZG9lcyBub3QgcG9pbnQgdG8gYSBzZXF1ZW5jZSBvZiBieXRlcyBzdGFydGluZyB3aXRoIDB4MEQgMHgwQVxuICAgIC8vICAgICAgKENSIExGKSwgcmV0dXJuIGZhaWx1cmUuIE90aGVyd2lzZSwgYWR2YW5jZSBwb3NpdGlvbiBieSAyIChwYXN0IHRoZSBuZXdsaW5lKS5cbiAgICBpZiAoaW5wdXRbcG9zaXRpb24ucG9zaXRpb25dICE9PSAweDBkICYmIGlucHV0W3Bvc2l0aW9uLnBvc2l0aW9uICsgMV0gIT09IDB4MGEpIHtcbiAgICAgIHJldHVybiAnZmFpbHVyZSdcbiAgICB9IGVsc2Uge1xuICAgICAgcG9zaXRpb24ucG9zaXRpb24gKz0gMlxuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly9hbmRyZXVib3RlbGxhLmdpdGh1Yi5pby9tdWx0aXBhcnQtZm9ybS1kYXRhLyNwYXJzZS1hLW11bHRpcGFydC1mb3JtLWRhdGEtbmFtZVxuICogQHBhcmFtIHtCdWZmZXJ9IGlucHV0XG4gKiBAcGFyYW0ge3sgcG9zaXRpb246IG51bWJlciB9fSBwb3NpdGlvblxuICovXG5mdW5jdGlvbiBwYXJzZU11bHRpcGFydEZvcm1EYXRhTmFtZSAoaW5wdXQsIHBvc2l0aW9uKSB7XG4gIC8vIDEuIEFzc2VydDogVGhlIGJ5dGUgYXQgKHBvc2l0aW9uIC0gMSkgaXMgMHgyMiAoXCIpLlxuICBhc3NlcnQoaW5wdXRbcG9zaXRpb24ucG9zaXRpb24gLSAxXSA9PT0gMHgyMilcblxuICAvLyAyLiBMZXQgbmFtZSBiZSB0aGUgcmVzdWx0IG9mIGNvbGxlY3RpbmcgYSBzZXF1ZW5jZSBvZiBieXRlcyB0aGF0IGFyZSBub3QgMHgwQSAoTEYpLCAweDBEIChDUikgb3IgMHgyMiAoXCIpLCBnaXZlbiBwb3NpdGlvbi5cbiAgLyoqIEB0eXBlIHtzdHJpbmcgfCBCdWZmZXJ9ICovXG4gIGxldCBuYW1lID0gY29sbGVjdEFTZXF1ZW5jZU9mQnl0ZXMoXG4gICAgKGNoYXIpID0+IGNoYXIgIT09IDB4MGEgJiYgY2hhciAhPT0gMHgwZCAmJiBjaGFyICE9PSAweDIyLFxuICAgIGlucHV0LFxuICAgIHBvc2l0aW9uXG4gIClcblxuICAvLyAzLiBJZiB0aGUgYnl0ZSBhdCBwb3NpdGlvbiBpcyBub3QgMHgyMiAoXCIpLCByZXR1cm4gZmFpbHVyZS4gT3RoZXJ3aXNlLCBhZHZhbmNlIHBvc2l0aW9uIGJ5IDEuXG4gIGlmIChpbnB1dFtwb3NpdGlvbi5wb3NpdGlvbl0gIT09IDB4MjIpIHtcbiAgICByZXR1cm4gbnVsbCAvLyBuYW1lIGNvdWxkIGJlICdmYWlsdXJlJ1xuICB9IGVsc2Uge1xuICAgIHBvc2l0aW9uLnBvc2l0aW9uKytcbiAgfVxuXG4gIC8vIDQuIFJlcGxhY2UgYW55IG9jY3VycmVuY2Ugb2YgdGhlIGZvbGxvd2luZyBzdWJzZXF1ZW5jZXMgaW4gbmFtZSB3aXRoIHRoZSBnaXZlbiBieXRlOlxuICAvLyAtIGAlMEFgOiAweDBBIChMRilcbiAgLy8gLSBgJTBEYDogMHgwRCAoQ1IpXG4gIC8vIC0gYCUyMmA6IDB4MjIgKFwiKVxuICBuYW1lID0gbmV3IFRleHREZWNvZGVyKCkuZGVjb2RlKG5hbWUpXG4gICAgLnJlcGxhY2UoLyUwQS9pZywgJ1xcbicpXG4gICAgLnJlcGxhY2UoLyUwRC9pZywgJ1xccicpXG4gICAgLnJlcGxhY2UoLyUyMi9nLCAnXCInKVxuXG4gIC8vIDUuIFJldHVybiB0aGUgVVRGLTggZGVjb2Rpbmcgd2l0aG91dCBCT00gb2YgbmFtZS5cbiAgcmV0dXJuIG5hbWVcbn1cblxuLyoqXG4gKiBAcGFyYW0geyhjaGFyOiBudW1iZXIpID0+IGJvb2xlYW59IGNvbmRpdGlvblxuICogQHBhcmFtIHtCdWZmZXJ9IGlucHV0XG4gKiBAcGFyYW0ge3sgcG9zaXRpb246IG51bWJlciB9fSBwb3NpdGlvblxuICovXG5mdW5jdGlvbiBjb2xsZWN0QVNlcXVlbmNlT2ZCeXRlcyAoY29uZGl0aW9uLCBpbnB1dCwgcG9zaXRpb24pIHtcbiAgbGV0IHN0YXJ0ID0gcG9zaXRpb24ucG9zaXRpb25cblxuICB3aGlsZSAoc3RhcnQgPCBpbnB1dC5sZW5ndGggJiYgY29uZGl0aW9uKGlucHV0W3N0YXJ0XSkpIHtcbiAgICArK3N0YXJ0XG4gIH1cblxuICByZXR1cm4gaW5wdXQuc3ViYXJyYXkocG9zaXRpb24ucG9zaXRpb24sIChwb3NpdGlvbi5wb3NpdGlvbiA9IHN0YXJ0KSlcbn1cblxuLyoqXG4gKiBAcGFyYW0ge0J1ZmZlcn0gYnVmXG4gKiBAcGFyYW0ge2Jvb2xlYW59IGxlYWRpbmdcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gdHJhaWxpbmdcbiAqIEBwYXJhbSB7KGNoYXJDb2RlOiBudW1iZXIpID0+IGJvb2xlYW59IHByZWRpY2F0ZVxuICogQHJldHVybnMge0J1ZmZlcn1cbiAqL1xuZnVuY3Rpb24gcmVtb3ZlQ2hhcnMgKGJ1ZiwgbGVhZGluZywgdHJhaWxpbmcsIHByZWRpY2F0ZSkge1xuICBsZXQgbGVhZCA9IDBcbiAgbGV0IHRyYWlsID0gYnVmLmxlbmd0aCAtIDFcblxuICBpZiAobGVhZGluZykge1xuICAgIHdoaWxlIChsZWFkIDwgYnVmLmxlbmd0aCAmJiBwcmVkaWNhdGUoYnVmW2xlYWRdKSkgbGVhZCsrXG4gIH1cblxuICBpZiAodHJhaWxpbmcpIHtcbiAgICB3aGlsZSAodHJhaWwgPiAwICYmIHByZWRpY2F0ZShidWZbdHJhaWxdKSkgdHJhaWwtLVxuICB9XG5cbiAgcmV0dXJuIGxlYWQgPT09IDAgJiYgdHJhaWwgPT09IGJ1Zi5sZW5ndGggLSAxID8gYnVmIDogYnVmLnN1YmFycmF5KGxlYWQsIHRyYWlsICsgMSlcbn1cblxuLyoqXG4gKiBDaGVja3MgaWYge0BwYXJhbSBidWZmZXJ9IHN0YXJ0cyB3aXRoIHtAcGFyYW0gc3RhcnR9XG4gKiBAcGFyYW0ge0J1ZmZlcn0gYnVmZmVyXG4gKiBAcGFyYW0ge0J1ZmZlcn0gc3RhcnRcbiAqIEBwYXJhbSB7eyBwb3NpdGlvbjogbnVtYmVyIH19IHBvc2l0aW9uXG4gKi9cbmZ1bmN0aW9uIGJ1ZmZlclN0YXJ0c1dpdGggKGJ1ZmZlciwgc3RhcnQsIHBvc2l0aW9uKSB7XG4gIGlmIChidWZmZXIubGVuZ3RoIDwgc3RhcnQubGVuZ3RoKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICBmb3IgKGxldCBpID0gMDsgaSA8IHN0YXJ0Lmxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKHN0YXJ0W2ldICE9PSBidWZmZXJbcG9zaXRpb24ucG9zaXRpb24gKyBpXSkge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRydWVcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIG11bHRpcGFydEZvcm1EYXRhUGFyc2VyLFxuICB2YWxpZGF0ZUJvdW5kYXJ5XG59XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHV0aWwgPSByZXF1aXJlKCcuLi8uLi9jb3JlL3V0aWwnKVxuY29uc3Qge1xuICBSZWFkYWJsZVN0cmVhbUZyb20sXG4gIGlzQmxvYkxpa2UsXG4gIGlzUmVhZGFibGVTdHJlYW1MaWtlLFxuICByZWFkYWJsZVN0cmVhbUNsb3NlLFxuICBjcmVhdGVEZWZlcnJlZFByb21pc2UsXG4gIGZ1bGx5UmVhZEJvZHksXG4gIGV4dHJhY3RNaW1lVHlwZSxcbiAgdXRmOERlY29kZUJ5dGVzXG59ID0gcmVxdWlyZSgnLi91dGlsJylcbmNvbnN0IHsgRm9ybURhdGEgfSA9IHJlcXVpcmUoJy4vZm9ybWRhdGEnKVxuY29uc3QgeyBrU3RhdGUgfSA9IHJlcXVpcmUoJy4vc3ltYm9scycpXG5jb25zdCB7IHdlYmlkbCB9ID0gcmVxdWlyZSgnLi93ZWJpZGwnKVxuY29uc3QgeyBCbG9iIH0gPSByZXF1aXJlKCdub2RlOmJ1ZmZlcicpXG5jb25zdCBhc3NlcnQgPSByZXF1aXJlKCdub2RlOmFzc2VydCcpXG5jb25zdCB7IGlzRXJyb3JlZCwgaXNEaXN0dXJiZWQgfSA9IHJlcXVpcmUoJ25vZGU6c3RyZWFtJylcbmNvbnN0IHsgaXNBcnJheUJ1ZmZlciB9ID0gcmVxdWlyZSgnbm9kZTp1dGlsL3R5cGVzJylcbmNvbnN0IHsgc2VyaWFsaXplQU1pbWVUeXBlIH0gPSByZXF1aXJlKCcuL2RhdGEtdXJsJylcbmNvbnN0IHsgbXVsdGlwYXJ0Rm9ybURhdGFQYXJzZXIgfSA9IHJlcXVpcmUoJy4vZm9ybWRhdGEtcGFyc2VyJylcbmxldCByYW5kb21cblxudHJ5IHtcbiAgY29uc3QgY3J5cHRvID0gcmVxdWlyZSgnbm9kZTpjcnlwdG8nKVxuICByYW5kb20gPSAobWF4KSA9PiBjcnlwdG8ucmFuZG9tSW50KDAsIG1heClcbn0gY2F0Y2gge1xuICByYW5kb20gPSAobWF4KSA9PiBNYXRoLmZsb29yKE1hdGgucmFuZG9tKG1heCkpXG59XG5cbmNvbnN0IHRleHRFbmNvZGVyID0gbmV3IFRleHRFbmNvZGVyKClcbmZ1bmN0aW9uIG5vb3AgKCkge31cblxuY29uc3QgaGFzRmluYWxpemF0aW9uUmVnaXN0cnkgPSBnbG9iYWxUaGlzLkZpbmFsaXphdGlvblJlZ2lzdHJ5ICYmIHByb2Nlc3MudmVyc2lvbi5pbmRleE9mKCd2MTgnKSAhPT0gMFxubGV0IHN0cmVhbVJlZ2lzdHJ5XG5cbmlmIChoYXNGaW5hbGl6YXRpb25SZWdpc3RyeSkge1xuICBzdHJlYW1SZWdpc3RyeSA9IG5ldyBGaW5hbGl6YXRpb25SZWdpc3RyeSgod2Vha1JlZikgPT4ge1xuICAgIGNvbnN0IHN0cmVhbSA9IHdlYWtSZWYuZGVyZWYoKVxuICAgIGlmIChzdHJlYW0gJiYgIXN0cmVhbS5sb2NrZWQgJiYgIWlzRGlzdHVyYmVkKHN0cmVhbSkgJiYgIWlzRXJyb3JlZChzdHJlYW0pKSB7XG4gICAgICBzdHJlYW0uY2FuY2VsKCdSZXNwb25zZSBvYmplY3QgaGFzIGJlZW4gZ2FyYmFnZSBjb2xsZWN0ZWQnKS5jYXRjaChub29wKVxuICAgIH1cbiAgfSlcbn1cblxuLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2NvbmNlcHQtYm9keWluaXQtZXh0cmFjdFxuZnVuY3Rpb24gZXh0cmFjdEJvZHkgKG9iamVjdCwga2VlcGFsaXZlID0gZmFsc2UpIHtcbiAgLy8gMS4gTGV0IHN0cmVhbSBiZSBudWxsLlxuICBsZXQgc3RyZWFtID0gbnVsbFxuXG4gIC8vIDIuIElmIG9iamVjdCBpcyBhIFJlYWRhYmxlU3RyZWFtIG9iamVjdCwgdGhlbiBzZXQgc3RyZWFtIHRvIG9iamVjdC5cbiAgaWYgKG9iamVjdCBpbnN0YW5jZW9mIFJlYWRhYmxlU3RyZWFtKSB7XG4gICAgc3RyZWFtID0gb2JqZWN0XG4gIH0gZWxzZSBpZiAoaXNCbG9iTGlrZShvYmplY3QpKSB7XG4gICAgLy8gMy4gT3RoZXJ3aXNlLCBpZiBvYmplY3QgaXMgYSBCbG9iIG9iamVjdCwgc2V0IHN0cmVhbSB0byB0aGVcbiAgICAvLyAgICByZXN1bHQgb2YgcnVubmluZyBvYmplY3RcdTIwMTlzIGdldCBzdHJlYW0uXG4gICAgc3RyZWFtID0gb2JqZWN0LnN0cmVhbSgpXG4gIH0gZWxzZSB7XG4gICAgLy8gNC4gT3RoZXJ3aXNlLCBzZXQgc3RyZWFtIHRvIGEgbmV3IFJlYWRhYmxlU3RyZWFtIG9iamVjdCwgYW5kIHNldFxuICAgIC8vICAgIHVwIHN0cmVhbSB3aXRoIGJ5dGUgcmVhZGluZyBzdXBwb3J0LlxuICAgIHN0cmVhbSA9IG5ldyBSZWFkYWJsZVN0cmVhbSh7XG4gICAgICBhc3luYyBwdWxsIChjb250cm9sbGVyKSB7XG4gICAgICAgIGNvbnN0IGJ1ZmZlciA9IHR5cGVvZiBzb3VyY2UgPT09ICdzdHJpbmcnID8gdGV4dEVuY29kZXIuZW5jb2RlKHNvdXJjZSkgOiBzb3VyY2VcblxuICAgICAgICBpZiAoYnVmZmVyLmJ5dGVMZW5ndGgpIHtcbiAgICAgICAgICBjb250cm9sbGVyLmVucXVldWUoYnVmZmVyKVxuICAgICAgICB9XG5cbiAgICAgICAgcXVldWVNaWNyb3Rhc2soKCkgPT4gcmVhZGFibGVTdHJlYW1DbG9zZShjb250cm9sbGVyKSlcbiAgICAgIH0sXG4gICAgICBzdGFydCAoKSB7fSxcbiAgICAgIHR5cGU6ICdieXRlcydcbiAgICB9KVxuICB9XG5cbiAgLy8gNS4gQXNzZXJ0OiBzdHJlYW0gaXMgYSBSZWFkYWJsZVN0cmVhbSBvYmplY3QuXG4gIGFzc2VydChpc1JlYWRhYmxlU3RyZWFtTGlrZShzdHJlYW0pKVxuXG4gIC8vIDYuIExldCBhY3Rpb24gYmUgbnVsbC5cbiAgbGV0IGFjdGlvbiA9IG51bGxcblxuICAvLyA3LiBMZXQgc291cmNlIGJlIG51bGwuXG4gIGxldCBzb3VyY2UgPSBudWxsXG5cbiAgLy8gOC4gTGV0IGxlbmd0aCBiZSBudWxsLlxuICBsZXQgbGVuZ3RoID0gbnVsbFxuXG4gIC8vIDkuIExldCB0eXBlIGJlIG51bGwuXG4gIGxldCB0eXBlID0gbnVsbFxuXG4gIC8vIDEwLiBTd2l0Y2ggb24gb2JqZWN0OlxuICBpZiAodHlwZW9mIG9iamVjdCA9PT0gJ3N0cmluZycpIHtcbiAgICAvLyBTZXQgc291cmNlIHRvIHRoZSBVVEYtOCBlbmNvZGluZyBvZiBvYmplY3QuXG4gICAgLy8gTm90ZTogc2V0dGluZyBzb3VyY2UgdG8gYSBVaW50OEFycmF5IGhlcmUgYnJlYWtzIHNvbWUgbW9ja2luZyBhc3N1bXB0aW9ucy5cbiAgICBzb3VyY2UgPSBvYmplY3RcblxuICAgIC8vIFNldCB0eXBlIHRvIGB0ZXh0L3BsYWluO2NoYXJzZXQ9VVRGLThgLlxuICAgIHR5cGUgPSAndGV4dC9wbGFpbjtjaGFyc2V0PVVURi04J1xuICB9IGVsc2UgaWYgKG9iamVjdCBpbnN0YW5jZW9mIFVSTFNlYXJjaFBhcmFtcykge1xuICAgIC8vIFVSTFNlYXJjaFBhcmFtc1xuXG4gICAgLy8gc3BlYyBzYXlzIHRvIHJ1biBhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQgb24gYm9keS5saXN0XG4gICAgLy8gdGhpcyBpcyBpbXBsZW1lbnRlZCBpbiBOb2RlLmpzIGFzIGFwYXJ0IG9mIGFuIFVSTFNlYXJjaFBhcmFtcyBpbnN0YW5jZSB0b1N0cmluZyBtZXRob2RcbiAgICAvLyBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvbm9kZS9ibG9iL2U0NmM2ODBiZjJiMjExYmJkNTJjZjk1OWNhMTdlZTk4YzdmNjU3ZjUvbGliL2ludGVybmFsL3VybC5qcyNMNDkwXG4gICAgLy8gYW5kIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvbm9kZS9ibG9iL2U0NmM2ODBiZjJiMjExYmJkNTJjZjk1OWNhMTdlZTk4YzdmNjU3ZjUvbGliL2ludGVybmFsL3VybC5qcyNMMTEwMFxuXG4gICAgLy8gU2V0IHNvdXJjZSB0byB0aGUgcmVzdWx0IG9mIHJ1bm5pbmcgdGhlIGFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCBzZXJpYWxpemVyIHdpdGggb2JqZWN0XHUyMDE5cyBsaXN0LlxuICAgIHNvdXJjZSA9IG9iamVjdC50b1N0cmluZygpXG5cbiAgICAvLyBTZXQgdHlwZSB0byBgYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkO2NoYXJzZXQ9VVRGLThgLlxuICAgIHR5cGUgPSAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkO2NoYXJzZXQ9VVRGLTgnXG4gIH0gZWxzZSBpZiAoaXNBcnJheUJ1ZmZlcihvYmplY3QpKSB7XG4gICAgLy8gQnVmZmVyU291cmNlL0FycmF5QnVmZmVyXG5cbiAgICAvLyBTZXQgc291cmNlIHRvIGEgY29weSBvZiB0aGUgYnl0ZXMgaGVsZCBieSBvYmplY3QuXG4gICAgc291cmNlID0gbmV3IFVpbnQ4QXJyYXkob2JqZWN0LnNsaWNlKCkpXG4gIH0gZWxzZSBpZiAoQXJyYXlCdWZmZXIuaXNWaWV3KG9iamVjdCkpIHtcbiAgICAvLyBCdWZmZXJTb3VyY2UvQXJyYXlCdWZmZXJWaWV3XG5cbiAgICAvLyBTZXQgc291cmNlIHRvIGEgY29weSBvZiB0aGUgYnl0ZXMgaGVsZCBieSBvYmplY3QuXG4gICAgc291cmNlID0gbmV3IFVpbnQ4QXJyYXkob2JqZWN0LmJ1ZmZlci5zbGljZShvYmplY3QuYnl0ZU9mZnNldCwgb2JqZWN0LmJ5dGVPZmZzZXQgKyBvYmplY3QuYnl0ZUxlbmd0aCkpXG4gIH0gZWxzZSBpZiAodXRpbC5pc0Zvcm1EYXRhTGlrZShvYmplY3QpKSB7XG4gICAgY29uc3QgYm91bmRhcnkgPSBgLS0tLWZvcm1kYXRhLXVuZGljaS0wJHtgJHtyYW5kb20oMWUxMSl9YC5wYWRTdGFydCgxMSwgJzAnKX1gXG4gICAgY29uc3QgcHJlZml4ID0gYC0tJHtib3VuZGFyeX1cXHJcXG5Db250ZW50LURpc3Bvc2l0aW9uOiBmb3JtLWRhdGFgXG5cbiAgICAvKiEgZm9ybWRhdGEtcG9seWZpbGwuIE1JVCBMaWNlbnNlLiBKaW1teSBXXHUwMEU0cnRpbmcgPGh0dHBzOi8vamltbXkud2FydGluZy5zZS9vcGVuc291cmNlPiAqL1xuICAgIGNvbnN0IGVzY2FwZSA9IChzdHIpID0+XG4gICAgICBzdHIucmVwbGFjZSgvXFxuL2csICclMEEnKS5yZXBsYWNlKC9cXHIvZywgJyUwRCcpLnJlcGxhY2UoL1wiL2csICclMjInKVxuICAgIGNvbnN0IG5vcm1hbGl6ZUxpbmVmZWVkcyA9ICh2YWx1ZSkgPT4gdmFsdWUucmVwbGFjZSgvXFxyP1xcbnxcXHIvZywgJ1xcclxcbicpXG5cbiAgICAvLyBTZXQgYWN0aW9uIHRvIHRoaXMgc3RlcDogcnVuIHRoZSBtdWx0aXBhcnQvZm9ybS1kYXRhXG4gICAgLy8gZW5jb2RpbmcgYWxnb3JpdGhtLCB3aXRoIG9iamVjdFx1MjAxOXMgZW50cnkgbGlzdCBhbmQgVVRGLTguXG4gICAgLy8gLSBUaGlzIGVuc3VyZXMgdGhhdCB0aGUgYm9keSBpcyBpbW11dGFibGUgYW5kIGNhbid0IGJlIGNoYW5nZWQgYWZ0ZXJ3b3Jkc1xuICAgIC8vIC0gVGhhdCB0aGUgY29udGVudC1sZW5ndGggaXMgY2FsY3VsYXRlZCBpbiBhZHZhbmNlLlxuICAgIC8vIC0gQW5kIHRoYXQgYWxsIHBhcnRzIGFyZSBwcmUtZW5jb2RlZCBhbmQgcmVhZHkgdG8gYmUgc2VudC5cblxuICAgIGNvbnN0IGJsb2JQYXJ0cyA9IFtdXG4gICAgY29uc3Qgcm4gPSBuZXcgVWludDhBcnJheShbMTMsIDEwXSkgLy8gJ1xcclxcbidcbiAgICBsZW5ndGggPSAwXG4gICAgbGV0IGhhc1Vua25vd25TaXplVmFsdWUgPSBmYWxzZVxuXG4gICAgZm9yIChjb25zdCBbbmFtZSwgdmFsdWVdIG9mIG9iamVjdCkge1xuICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgY29uc3QgY2h1bmsgPSB0ZXh0RW5jb2Rlci5lbmNvZGUocHJlZml4ICtcbiAgICAgICAgICBgOyBuYW1lPVwiJHtlc2NhcGUobm9ybWFsaXplTGluZWZlZWRzKG5hbWUpKX1cImAgK1xuICAgICAgICAgIGBcXHJcXG5cXHJcXG4ke25vcm1hbGl6ZUxpbmVmZWVkcyh2YWx1ZSl9XFxyXFxuYClcbiAgICAgICAgYmxvYlBhcnRzLnB1c2goY2h1bmspXG4gICAgICAgIGxlbmd0aCArPSBjaHVuay5ieXRlTGVuZ3RoXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBjaHVuayA9IHRleHRFbmNvZGVyLmVuY29kZShgJHtwcmVmaXh9OyBuYW1lPVwiJHtlc2NhcGUobm9ybWFsaXplTGluZWZlZWRzKG5hbWUpKX1cImAgK1xuICAgICAgICAgICh2YWx1ZS5uYW1lID8gYDsgZmlsZW5hbWU9XCIke2VzY2FwZSh2YWx1ZS5uYW1lKX1cImAgOiAnJykgKyAnXFxyXFxuJyArXG4gICAgICAgICAgYENvbnRlbnQtVHlwZTogJHtcbiAgICAgICAgICAgIHZhbHVlLnR5cGUgfHwgJ2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSdcbiAgICAgICAgICB9XFxyXFxuXFxyXFxuYClcbiAgICAgICAgYmxvYlBhcnRzLnB1c2goY2h1bmssIHZhbHVlLCBybilcbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZS5zaXplID09PSAnbnVtYmVyJykge1xuICAgICAgICAgIGxlbmd0aCArPSBjaHVuay5ieXRlTGVuZ3RoICsgdmFsdWUuc2l6ZSArIHJuLmJ5dGVMZW5ndGhcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBoYXNVbmtub3duU2l6ZVZhbHVlID0gdHJ1ZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgY2h1bmsgPSB0ZXh0RW5jb2Rlci5lbmNvZGUoYC0tJHtib3VuZGFyeX0tLWApXG4gICAgYmxvYlBhcnRzLnB1c2goY2h1bmspXG4gICAgbGVuZ3RoICs9IGNodW5rLmJ5dGVMZW5ndGhcbiAgICBpZiAoaGFzVW5rbm93blNpemVWYWx1ZSkge1xuICAgICAgbGVuZ3RoID0gbnVsbFxuICAgIH1cblxuICAgIC8vIFNldCBzb3VyY2UgdG8gb2JqZWN0LlxuICAgIHNvdXJjZSA9IG9iamVjdFxuXG4gICAgYWN0aW9uID0gYXN5bmMgZnVuY3Rpb24gKiAoKSB7XG4gICAgICBmb3IgKGNvbnN0IHBhcnQgb2YgYmxvYlBhcnRzKSB7XG4gICAgICAgIGlmIChwYXJ0LnN0cmVhbSkge1xuICAgICAgICAgIHlpZWxkICogcGFydC5zdHJlYW0oKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHlpZWxkIHBhcnRcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFNldCB0eXBlIHRvIGBtdWx0aXBhcnQvZm9ybS1kYXRhOyBib3VuZGFyeT1gLFxuICAgIC8vIGZvbGxvd2VkIGJ5IHRoZSBtdWx0aXBhcnQvZm9ybS1kYXRhIGJvdW5kYXJ5IHN0cmluZyBnZW5lcmF0ZWRcbiAgICAvLyBieSB0aGUgbXVsdGlwYXJ0L2Zvcm0tZGF0YSBlbmNvZGluZyBhbGdvcml0aG0uXG4gICAgdHlwZSA9IGBtdWx0aXBhcnQvZm9ybS1kYXRhOyBib3VuZGFyeT0ke2JvdW5kYXJ5fWBcbiAgfSBlbHNlIGlmIChpc0Jsb2JMaWtlKG9iamVjdCkpIHtcbiAgICAvLyBCbG9iXG5cbiAgICAvLyBTZXQgc291cmNlIHRvIG9iamVjdC5cbiAgICBzb3VyY2UgPSBvYmplY3RcblxuICAgIC8vIFNldCBsZW5ndGggdG8gb2JqZWN0XHUyMDE5cyBzaXplLlxuICAgIGxlbmd0aCA9IG9iamVjdC5zaXplXG5cbiAgICAvLyBJZiBvYmplY3RcdTIwMTlzIHR5cGUgYXR0cmlidXRlIGlzIG5vdCB0aGUgZW1wdHkgYnl0ZSBzZXF1ZW5jZSwgc2V0XG4gICAgLy8gdHlwZSB0byBpdHMgdmFsdWUuXG4gICAgaWYgKG9iamVjdC50eXBlKSB7XG4gICAgICB0eXBlID0gb2JqZWN0LnR5cGVcbiAgICB9XG4gIH0gZWxzZSBpZiAodHlwZW9mIG9iamVjdFtTeW1ib2wuYXN5bmNJdGVyYXRvcl0gPT09ICdmdW5jdGlvbicpIHtcbiAgICAvLyBJZiBrZWVwYWxpdmUgaXMgdHJ1ZSwgdGhlbiB0aHJvdyBhIFR5cGVFcnJvci5cbiAgICBpZiAoa2VlcGFsaXZlKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdrZWVwYWxpdmUnKVxuICAgIH1cblxuICAgIC8vIElmIG9iamVjdCBpcyBkaXN0dXJiZWQgb3IgbG9ja2VkLCB0aGVuIHRocm93IGEgVHlwZUVycm9yLlxuICAgIGlmICh1dGlsLmlzRGlzdHVyYmVkKG9iamVjdCkgfHwgb2JqZWN0LmxvY2tlZCkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgICAgJ1Jlc3BvbnNlIGJvZHkgb2JqZWN0IHNob3VsZCBub3QgYmUgZGlzdHVyYmVkIG9yIGxvY2tlZCdcbiAgICAgIClcbiAgICB9XG5cbiAgICBzdHJlYW0gPVxuICAgICAgb2JqZWN0IGluc3RhbmNlb2YgUmVhZGFibGVTdHJlYW0gPyBvYmplY3QgOiBSZWFkYWJsZVN0cmVhbUZyb20ob2JqZWN0KVxuICB9XG5cbiAgLy8gMTEuIElmIHNvdXJjZSBpcyBhIGJ5dGUgc2VxdWVuY2UsIHRoZW4gc2V0IGFjdGlvbiB0byBhXG4gIC8vIHN0ZXAgdGhhdCByZXR1cm5zIHNvdXJjZSBhbmQgbGVuZ3RoIHRvIHNvdXJjZVx1MjAxOXMgbGVuZ3RoLlxuICBpZiAodHlwZW9mIHNvdXJjZSA9PT0gJ3N0cmluZycgfHwgdXRpbC5pc0J1ZmZlcihzb3VyY2UpKSB7XG4gICAgbGVuZ3RoID0gQnVmZmVyLmJ5dGVMZW5ndGgoc291cmNlKVxuICB9XG5cbiAgLy8gMTIuIElmIGFjdGlvbiBpcyBub24tbnVsbCwgdGhlbiBydW4gdGhlc2Ugc3RlcHMgaW4gaW4gcGFyYWxsZWw6XG4gIGlmIChhY3Rpb24gIT0gbnVsbCkge1xuICAgIC8vIFJ1biBhY3Rpb24uXG4gICAgbGV0IGl0ZXJhdG9yXG4gICAgc3RyZWFtID0gbmV3IFJlYWRhYmxlU3RyZWFtKHtcbiAgICAgIGFzeW5jIHN0YXJ0ICgpIHtcbiAgICAgICAgaXRlcmF0b3IgPSBhY3Rpb24ob2JqZWN0KVtTeW1ib2wuYXN5bmNJdGVyYXRvcl0oKVxuICAgICAgfSxcbiAgICAgIGFzeW5jIHB1bGwgKGNvbnRyb2xsZXIpIHtcbiAgICAgICAgY29uc3QgeyB2YWx1ZSwgZG9uZSB9ID0gYXdhaXQgaXRlcmF0b3IubmV4dCgpXG4gICAgICAgIGlmIChkb25lKSB7XG4gICAgICAgICAgLy8gV2hlbiBydW5uaW5nIGFjdGlvbiBpcyBkb25lLCBjbG9zZSBzdHJlYW0uXG4gICAgICAgICAgcXVldWVNaWNyb3Rhc2soKCkgPT4ge1xuICAgICAgICAgICAgY29udHJvbGxlci5jbG9zZSgpXG4gICAgICAgICAgICBjb250cm9sbGVyLmJ5b2JSZXF1ZXN0Py5yZXNwb25kKDApXG4gICAgICAgICAgfSlcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBXaGVuZXZlciBvbmUgb3IgbW9yZSBieXRlcyBhcmUgYXZhaWxhYmxlIGFuZCBzdHJlYW0gaXMgbm90IGVycm9yZWQsXG4gICAgICAgICAgLy8gZW5xdWV1ZSBhIFVpbnQ4QXJyYXkgd3JhcHBpbmcgYW4gQXJyYXlCdWZmZXIgY29udGFpbmluZyB0aGUgYXZhaWxhYmxlXG4gICAgICAgICAgLy8gYnl0ZXMgaW50byBzdHJlYW0uXG4gICAgICAgICAgaWYgKCFpc0Vycm9yZWQoc3RyZWFtKSkge1xuICAgICAgICAgICAgY29uc3QgYnVmZmVyID0gbmV3IFVpbnQ4QXJyYXkodmFsdWUpXG4gICAgICAgICAgICBpZiAoYnVmZmVyLmJ5dGVMZW5ndGgpIHtcbiAgICAgICAgICAgICAgY29udHJvbGxlci5lbnF1ZXVlKGJ1ZmZlcilcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGNvbnRyb2xsZXIuZGVzaXJlZFNpemUgPiAwXG4gICAgICB9LFxuICAgICAgYXN5bmMgY2FuY2VsIChyZWFzb24pIHtcbiAgICAgICAgYXdhaXQgaXRlcmF0b3IucmV0dXJuKClcbiAgICAgIH0sXG4gICAgICB0eXBlOiAnYnl0ZXMnXG4gICAgfSlcbiAgfVxuXG4gIC8vIDEzLiBMZXQgYm9keSBiZSBhIGJvZHkgd2hvc2Ugc3RyZWFtIGlzIHN0cmVhbSwgc291cmNlIGlzIHNvdXJjZSxcbiAgLy8gYW5kIGxlbmd0aCBpcyBsZW5ndGguXG4gIGNvbnN0IGJvZHkgPSB7IHN0cmVhbSwgc291cmNlLCBsZW5ndGggfVxuXG4gIC8vIDE0LiBSZXR1cm4gKGJvZHksIHR5cGUpLlxuICByZXR1cm4gW2JvZHksIHR5cGVdXG59XG5cbi8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNib2R5aW5pdC1zYWZlbHktZXh0cmFjdFxuZnVuY3Rpb24gc2FmZWx5RXh0cmFjdEJvZHkgKG9iamVjdCwga2VlcGFsaXZlID0gZmFsc2UpIHtcbiAgLy8gVG8gc2FmZWx5IGV4dHJhY3QgYSBib2R5IGFuZCBhIGBDb250ZW50LVR5cGVgIHZhbHVlIGZyb21cbiAgLy8gYSBieXRlIHNlcXVlbmNlIG9yIEJvZHlJbml0IG9iamVjdCBvYmplY3QsIHJ1biB0aGVzZSBzdGVwczpcblxuICAvLyAxLiBJZiBvYmplY3QgaXMgYSBSZWFkYWJsZVN0cmVhbSBvYmplY3QsIHRoZW46XG4gIGlmIChvYmplY3QgaW5zdGFuY2VvZiBSZWFkYWJsZVN0cmVhbSkge1xuICAgIC8vIEFzc2VydDogb2JqZWN0IGlzIG5laXRoZXIgZGlzdHVyYmVkIG5vciBsb2NrZWQuXG4gICAgLy8gaXN0YW5idWwgaWdub3JlIG5leHRcbiAgICBhc3NlcnQoIXV0aWwuaXNEaXN0dXJiZWQob2JqZWN0KSwgJ1RoZSBib2R5IGhhcyBhbHJlYWR5IGJlZW4gY29uc3VtZWQuJylcbiAgICAvLyBpc3RhbmJ1bCBpZ25vcmUgbmV4dFxuICAgIGFzc2VydCghb2JqZWN0LmxvY2tlZCwgJ1RoZSBzdHJlYW0gaXMgbG9ja2VkLicpXG4gIH1cblxuICAvLyAyLiBSZXR1cm4gdGhlIHJlc3VsdHMgb2YgZXh0cmFjdGluZyBvYmplY3QuXG4gIHJldHVybiBleHRyYWN0Qm9keShvYmplY3QsIGtlZXBhbGl2ZSlcbn1cblxuZnVuY3Rpb24gY2xvbmVCb2R5IChpbnN0YW5jZSwgYm9keSkge1xuICAvLyBUbyBjbG9uZSBhIGJvZHkgYm9keSwgcnVuIHRoZXNlIHN0ZXBzOlxuXG4gIC8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNjb25jZXB0LWJvZHktY2xvbmVcblxuICAvLyAxLiBMZXQgXHUwMEFCIG91dDEsIG91dDIgXHUwMEJCIGJlIHRoZSByZXN1bHQgb2YgdGVlaW5nIGJvZHlcdTIwMTlzIHN0cmVhbS5cbiAgY29uc3QgW291dDEsIG91dDJdID0gYm9keS5zdHJlYW0udGVlKClcblxuICBpZiAoaGFzRmluYWxpemF0aW9uUmVnaXN0cnkpIHtcbiAgICBzdHJlYW1SZWdpc3RyeS5yZWdpc3RlcihpbnN0YW5jZSwgbmV3IFdlYWtSZWYob3V0MSkpXG4gIH1cblxuICAvLyAyLiBTZXQgYm9keVx1MjAxOXMgc3RyZWFtIHRvIG91dDEuXG4gIGJvZHkuc3RyZWFtID0gb3V0MVxuXG4gIC8vIDMuIFJldHVybiBhIGJvZHkgd2hvc2Ugc3RyZWFtIGlzIG91dDIgYW5kIG90aGVyIG1lbWJlcnMgYXJlIGNvcGllZCBmcm9tIGJvZHkuXG4gIHJldHVybiB7XG4gICAgc3RyZWFtOiBvdXQyLFxuICAgIGxlbmd0aDogYm9keS5sZW5ndGgsXG4gICAgc291cmNlOiBib2R5LnNvdXJjZVxuICB9XG59XG5cbmZ1bmN0aW9uIHRocm93SWZBYm9ydGVkIChzdGF0ZSkge1xuICBpZiAoc3RhdGUuYWJvcnRlZCkge1xuICAgIHRocm93IG5ldyBET01FeGNlcHRpb24oJ1RoZSBvcGVyYXRpb24gd2FzIGFib3J0ZWQuJywgJ0Fib3J0RXJyb3InKVxuICB9XG59XG5cbmZ1bmN0aW9uIGJvZHlNaXhpbk1ldGhvZHMgKGluc3RhbmNlKSB7XG4gIGNvbnN0IG1ldGhvZHMgPSB7XG4gICAgYmxvYiAoKSB7XG4gICAgICAvLyBUaGUgYmxvYigpIG1ldGhvZCBzdGVwcyBhcmUgdG8gcmV0dXJuIHRoZSByZXN1bHQgb2ZcbiAgICAgIC8vIHJ1bm5pbmcgY29uc3VtZSBib2R5IHdpdGggdGhpcyBhbmQgdGhlIGZvbGxvd2luZyBzdGVwXG4gICAgICAvLyBnaXZlbiBhIGJ5dGUgc2VxdWVuY2UgYnl0ZXM6IHJldHVybiBhIEJsb2Igd2hvc2VcbiAgICAgIC8vIGNvbnRlbnRzIGFyZSBieXRlcyBhbmQgd2hvc2UgdHlwZSBhdHRyaWJ1dGUgaXMgdGhpc1x1MjAxOXNcbiAgICAgIC8vIE1JTUUgdHlwZS5cbiAgICAgIHJldHVybiBjb25zdW1lQm9keSh0aGlzLCAoYnl0ZXMpID0+IHtcbiAgICAgICAgbGV0IG1pbWVUeXBlID0gYm9keU1pbWVUeXBlKHRoaXMpXG5cbiAgICAgICAgaWYgKG1pbWVUeXBlID09PSBudWxsKSB7XG4gICAgICAgICAgbWltZVR5cGUgPSAnJ1xuICAgICAgICB9IGVsc2UgaWYgKG1pbWVUeXBlKSB7XG4gICAgICAgICAgbWltZVR5cGUgPSBzZXJpYWxpemVBTWltZVR5cGUobWltZVR5cGUpXG4gICAgICAgIH1cblxuICAgICAgICAvLyBSZXR1cm4gYSBCbG9iIHdob3NlIGNvbnRlbnRzIGFyZSBieXRlcyBhbmQgdHlwZSBhdHRyaWJ1dGVcbiAgICAgICAgLy8gaXMgbWltZVR5cGUuXG4gICAgICAgIHJldHVybiBuZXcgQmxvYihbYnl0ZXNdLCB7IHR5cGU6IG1pbWVUeXBlIH0pXG4gICAgICB9LCBpbnN0YW5jZSlcbiAgICB9LFxuXG4gICAgYXJyYXlCdWZmZXIgKCkge1xuICAgICAgLy8gVGhlIGFycmF5QnVmZmVyKCkgbWV0aG9kIHN0ZXBzIGFyZSB0byByZXR1cm4gdGhlIHJlc3VsdFxuICAgICAgLy8gb2YgcnVubmluZyBjb25zdW1lIGJvZHkgd2l0aCB0aGlzIGFuZCB0aGUgZm9sbG93aW5nIHN0ZXBcbiAgICAgIC8vIGdpdmVuIGEgYnl0ZSBzZXF1ZW5jZSBieXRlczogcmV0dXJuIGEgbmV3IEFycmF5QnVmZmVyXG4gICAgICAvLyB3aG9zZSBjb250ZW50cyBhcmUgYnl0ZXMuXG4gICAgICByZXR1cm4gY29uc3VtZUJvZHkodGhpcywgKGJ5dGVzKSA9PiB7XG4gICAgICAgIHJldHVybiBuZXcgVWludDhBcnJheShieXRlcykuYnVmZmVyXG4gICAgICB9LCBpbnN0YW5jZSlcbiAgICB9LFxuXG4gICAgdGV4dCAoKSB7XG4gICAgICAvLyBUaGUgdGV4dCgpIG1ldGhvZCBzdGVwcyBhcmUgdG8gcmV0dXJuIHRoZSByZXN1bHQgb2YgcnVubmluZ1xuICAgICAgLy8gY29uc3VtZSBib2R5IHdpdGggdGhpcyBhbmQgVVRGLTggZGVjb2RlLlxuICAgICAgcmV0dXJuIGNvbnN1bWVCb2R5KHRoaXMsIHV0ZjhEZWNvZGVCeXRlcywgaW5zdGFuY2UpXG4gICAgfSxcblxuICAgIGpzb24gKCkge1xuICAgICAgLy8gVGhlIGpzb24oKSBtZXRob2Qgc3RlcHMgYXJlIHRvIHJldHVybiB0aGUgcmVzdWx0IG9mIHJ1bm5pbmdcbiAgICAgIC8vIGNvbnN1bWUgYm9keSB3aXRoIHRoaXMgYW5kIHBhcnNlIEpTT04gZnJvbSBieXRlcy5cbiAgICAgIHJldHVybiBjb25zdW1lQm9keSh0aGlzLCBwYXJzZUpTT05Gcm9tQnl0ZXMsIGluc3RhbmNlKVxuICAgIH0sXG5cbiAgICBmb3JtRGF0YSAoKSB7XG4gICAgICAvLyBUaGUgZm9ybURhdGEoKSBtZXRob2Qgc3RlcHMgYXJlIHRvIHJldHVybiB0aGUgcmVzdWx0IG9mIHJ1bm5pbmdcbiAgICAgIC8vIGNvbnN1bWUgYm9keSB3aXRoIHRoaXMgYW5kIHRoZSBmb2xsb3dpbmcgc3RlcCBnaXZlbiBhIGJ5dGUgc2VxdWVuY2UgYnl0ZXM6XG4gICAgICByZXR1cm4gY29uc3VtZUJvZHkodGhpcywgKHZhbHVlKSA9PiB7XG4gICAgICAgIC8vIDEuIExldCBtaW1lVHlwZSBiZSB0aGUgcmVzdWx0IG9mIGdldCB0aGUgTUlNRSB0eXBlIHdpdGggdGhpcy5cbiAgICAgICAgY29uc3QgbWltZVR5cGUgPSBib2R5TWltZVR5cGUodGhpcylcblxuICAgICAgICAvLyAyLiBJZiBtaW1lVHlwZSBpcyBub24tbnVsbCwgdGhlbiBzd2l0Y2ggb24gbWltZVR5cGVcdTIwMTlzIGVzc2VuY2UgYW5kIHJ1blxuICAgICAgICAvLyAgICB0aGUgY29ycmVzcG9uZGluZyBzdGVwczpcbiAgICAgICAgaWYgKG1pbWVUeXBlICE9PSBudWxsKSB7XG4gICAgICAgICAgc3dpdGNoIChtaW1lVHlwZS5lc3NlbmNlKSB7XG4gICAgICAgICAgICBjYXNlICdtdWx0aXBhcnQvZm9ybS1kYXRhJzoge1xuICAgICAgICAgICAgICAvLyAxLiAuLi4gW2xvbmcgc3RlcF1cbiAgICAgICAgICAgICAgY29uc3QgcGFyc2VkID0gbXVsdGlwYXJ0Rm9ybURhdGFQYXJzZXIodmFsdWUsIG1pbWVUeXBlKVxuXG4gICAgICAgICAgICAgIC8vIDIuIElmIHRoYXQgZmFpbHMgZm9yIHNvbWUgcmVhc29uLCB0aGVuIHRocm93IGEgVHlwZUVycm9yLlxuICAgICAgICAgICAgICBpZiAocGFyc2VkID09PSAnZmFpbHVyZScpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdGYWlsZWQgdG8gcGFyc2UgYm9keSBhcyBGb3JtRGF0YS4nKVxuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgLy8gMy4gUmV0dXJuIGEgbmV3IEZvcm1EYXRhIG9iamVjdCwgYXBwZW5kaW5nIGVhY2ggZW50cnksXG4gICAgICAgICAgICAgIC8vICAgIHJlc3VsdGluZyBmcm9tIHRoZSBwYXJzaW5nIG9wZXJhdGlvbiwgdG8gaXRzIGVudHJ5IGxpc3QuXG4gICAgICAgICAgICAgIGNvbnN0IGZkID0gbmV3IEZvcm1EYXRhKClcbiAgICAgICAgICAgICAgZmRba1N0YXRlXSA9IHBhcnNlZFxuXG4gICAgICAgICAgICAgIHJldHVybiBmZFxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJzoge1xuICAgICAgICAgICAgICAvLyAxLiBMZXQgZW50cmllcyBiZSB0aGUgcmVzdWx0IG9mIHBhcnNpbmcgYnl0ZXMuXG4gICAgICAgICAgICAgIGNvbnN0IGVudHJpZXMgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKHZhbHVlLnRvU3RyaW5nKCkpXG5cbiAgICAgICAgICAgICAgLy8gMi4gSWYgZW50cmllcyBpcyBmYWlsdXJlLCB0aGVuIHRocm93IGEgVHlwZUVycm9yLlxuXG4gICAgICAgICAgICAgIC8vIDMuIFJldHVybiBhIG5ldyBGb3JtRGF0YSBvYmplY3Qgd2hvc2UgZW50cnkgbGlzdCBpcyBlbnRyaWVzLlxuICAgICAgICAgICAgICBjb25zdCBmZCA9IG5ldyBGb3JtRGF0YSgpXG5cbiAgICAgICAgICAgICAgZm9yIChjb25zdCBbbmFtZSwgdmFsdWVdIG9mIGVudHJpZXMpIHtcbiAgICAgICAgICAgICAgICBmZC5hcHBlbmQobmFtZSwgdmFsdWUpXG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICByZXR1cm4gZmRcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyAzLiBUaHJvdyBhIFR5cGVFcnJvci5cbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgICAgICAnQ29udGVudC1UeXBlIHdhcyBub3Qgb25lIG9mIFwibXVsdGlwYXJ0L2Zvcm0tZGF0YVwiIG9yIFwiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkXCIuJ1xuICAgICAgICApXG4gICAgICB9LCBpbnN0YW5jZSlcbiAgICB9LFxuXG4gICAgYnl0ZXMgKCkge1xuICAgICAgLy8gVGhlIGJ5dGVzKCkgbWV0aG9kIHN0ZXBzIGFyZSB0byByZXR1cm4gdGhlIHJlc3VsdCBvZiBydW5uaW5nIGNvbnN1bWUgYm9keVxuICAgICAgLy8gd2l0aCB0aGlzIGFuZCB0aGUgZm9sbG93aW5nIHN0ZXAgZ2l2ZW4gYSBieXRlIHNlcXVlbmNlIGJ5dGVzOiByZXR1cm4gdGhlXG4gICAgICAvLyByZXN1bHQgb2YgY3JlYXRpbmcgYSBVaW50OEFycmF5IGZyb20gYnl0ZXMgaW4gdGhpc1x1MjAxOXMgcmVsZXZhbnQgcmVhbG0uXG4gICAgICByZXR1cm4gY29uc3VtZUJvZHkodGhpcywgKGJ5dGVzKSA9PiB7XG4gICAgICAgIHJldHVybiBuZXcgVWludDhBcnJheShieXRlcylcbiAgICAgIH0sIGluc3RhbmNlKVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBtZXRob2RzXG59XG5cbmZ1bmN0aW9uIG1peGluQm9keSAocHJvdG90eXBlKSB7XG4gIE9iamVjdC5hc3NpZ24ocHJvdG90eXBlLnByb3RvdHlwZSwgYm9keU1peGluTWV0aG9kcyhwcm90b3R5cGUpKVxufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2NvbmNlcHQtYm9keS1jb25zdW1lLWJvZHlcbiAqIEBwYXJhbSB7UmVzcG9uc2V8UmVxdWVzdH0gb2JqZWN0XG4gKiBAcGFyYW0geyh2YWx1ZTogdW5rbm93bikgPT4gdW5rbm93bn0gY29udmVydEJ5dGVzVG9KU1ZhbHVlXG4gKiBAcGFyYW0ge1Jlc3BvbnNlfFJlcXVlc3R9IGluc3RhbmNlXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIGNvbnN1bWVCb2R5IChvYmplY3QsIGNvbnZlcnRCeXRlc1RvSlNWYWx1ZSwgaW5zdGFuY2UpIHtcbiAgd2ViaWRsLmJyYW5kQ2hlY2sob2JqZWN0LCBpbnN0YW5jZSlcblxuICAvLyAxLiBJZiBvYmplY3QgaXMgdW51c2FibGUsIHRoZW4gcmV0dXJuIGEgcHJvbWlzZSByZWplY3RlZFxuICAvLyAgICB3aXRoIGEgVHlwZUVycm9yLlxuICBpZiAoYm9keVVudXNhYmxlKG9iamVjdCkpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdCb2R5IGlzIHVudXNhYmxlOiBCb2R5IGhhcyBhbHJlYWR5IGJlZW4gcmVhZCcpXG4gIH1cblxuICB0aHJvd0lmQWJvcnRlZChvYmplY3Rba1N0YXRlXSlcblxuICAvLyAyLiBMZXQgcHJvbWlzZSBiZSBhIG5ldyBwcm9taXNlLlxuICBjb25zdCBwcm9taXNlID0gY3JlYXRlRGVmZXJyZWRQcm9taXNlKClcblxuICAvLyAzLiBMZXQgZXJyb3JTdGVwcyBnaXZlbiBlcnJvciBiZSB0byByZWplY3QgcHJvbWlzZSB3aXRoIGVycm9yLlxuICBjb25zdCBlcnJvclN0ZXBzID0gKGVycm9yKSA9PiBwcm9taXNlLnJlamVjdChlcnJvcilcblxuICAvLyA0LiBMZXQgc3VjY2Vzc1N0ZXBzIGdpdmVuIGEgYnl0ZSBzZXF1ZW5jZSBkYXRhIGJlIHRvIHJlc29sdmVcbiAgLy8gICAgcHJvbWlzZSB3aXRoIHRoZSByZXN1bHQgb2YgcnVubmluZyBjb252ZXJ0Qnl0ZXNUb0pTVmFsdWVcbiAgLy8gICAgd2l0aCBkYXRhLiBJZiB0aGF0IHRocmV3IGFuIGV4Y2VwdGlvbiwgdGhlbiBydW4gZXJyb3JTdGVwc1xuICAvLyAgICB3aXRoIHRoYXQgZXhjZXB0aW9uLlxuICBjb25zdCBzdWNjZXNzU3RlcHMgPSAoZGF0YSkgPT4ge1xuICAgIHRyeSB7XG4gICAgICBwcm9taXNlLnJlc29sdmUoY29udmVydEJ5dGVzVG9KU1ZhbHVlKGRhdGEpKVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGVycm9yU3RlcHMoZSlcbiAgICB9XG4gIH1cblxuICAvLyA1LiBJZiBvYmplY3RcdTIwMTlzIGJvZHkgaXMgbnVsbCwgdGhlbiBydW4gc3VjY2Vzc1N0ZXBzIHdpdGggYW5cbiAgLy8gICAgZW1wdHkgYnl0ZSBzZXF1ZW5jZS5cbiAgaWYgKG9iamVjdFtrU3RhdGVdLmJvZHkgPT0gbnVsbCkge1xuICAgIHN1Y2Nlc3NTdGVwcyhCdWZmZXIuYWxsb2NVbnNhZmUoMCkpXG4gICAgcmV0dXJuIHByb21pc2UucHJvbWlzZVxuICB9XG5cbiAgLy8gNi4gT3RoZXJ3aXNlLCBmdWxseSByZWFkIG9iamVjdFx1MjAxOXMgYm9keSBnaXZlbiBzdWNjZXNzU3RlcHMsXG4gIC8vICAgIGVycm9yU3RlcHMsIGFuZCBvYmplY3RcdTIwMTlzIHJlbGV2YW50IGdsb2JhbCBvYmplY3QuXG4gIGF3YWl0IGZ1bGx5UmVhZEJvZHkob2JqZWN0W2tTdGF0ZV0uYm9keSwgc3VjY2Vzc1N0ZXBzLCBlcnJvclN0ZXBzKVxuXG4gIC8vIDcuIFJldHVybiBwcm9taXNlLlxuICByZXR1cm4gcHJvbWlzZS5wcm9taXNlXG59XG5cbi8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNib2R5LXVudXNhYmxlXG5mdW5jdGlvbiBib2R5VW51c2FibGUgKG9iamVjdCkge1xuICBjb25zdCBib2R5ID0gb2JqZWN0W2tTdGF0ZV0uYm9keVxuXG4gIC8vIEFuIG9iamVjdCBpbmNsdWRpbmcgdGhlIEJvZHkgaW50ZXJmYWNlIG1peGluIGlzXG4gIC8vIHNhaWQgdG8gYmUgdW51c2FibGUgaWYgaXRzIGJvZHkgaXMgbm9uLW51bGwgYW5kXG4gIC8vIGl0cyBib2R5XHUyMDE5cyBzdHJlYW0gaXMgZGlzdHVyYmVkIG9yIGxvY2tlZC5cbiAgcmV0dXJuIGJvZHkgIT0gbnVsbCAmJiAoYm9keS5zdHJlYW0ubG9ja2VkIHx8IHV0aWwuaXNEaXN0dXJiZWQoYm9keS5zdHJlYW0pKVxufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly9pbmZyYS5zcGVjLndoYXR3Zy5vcmcvI3BhcnNlLWpzb24tYnl0ZXMtdG8tYS1qYXZhc2NyaXB0LXZhbHVlXG4gKiBAcGFyYW0ge1VpbnQ4QXJyYXl9IGJ5dGVzXG4gKi9cbmZ1bmN0aW9uIHBhcnNlSlNPTkZyb21CeXRlcyAoYnl0ZXMpIHtcbiAgcmV0dXJuIEpTT04ucGFyc2UodXRmOERlY29kZUJ5dGVzKGJ5dGVzKSlcbn1cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNjb25jZXB0LWJvZHktbWltZS10eXBlXG4gKiBAcGFyYW0ge2ltcG9ydCgnLi9yZXNwb25zZScpLlJlc3BvbnNlfGltcG9ydCgnLi9yZXF1ZXN0JykuUmVxdWVzdH0gcmVxdWVzdE9yUmVzcG9uc2VcbiAqL1xuZnVuY3Rpb24gYm9keU1pbWVUeXBlIChyZXF1ZXN0T3JSZXNwb25zZSkge1xuICAvLyAxLiBMZXQgaGVhZGVycyBiZSBudWxsLlxuICAvLyAyLiBJZiByZXF1ZXN0T3JSZXNwb25zZSBpcyBhIFJlcXVlc3Qgb2JqZWN0LCB0aGVuIHNldCBoZWFkZXJzIHRvIHJlcXVlc3RPclJlc3BvbnNlXHUyMDE5cyByZXF1ZXN0XHUyMDE5cyBoZWFkZXIgbGlzdC5cbiAgLy8gMy4gT3RoZXJ3aXNlLCBzZXQgaGVhZGVycyB0byByZXF1ZXN0T3JSZXNwb25zZVx1MjAxOXMgcmVzcG9uc2VcdTIwMTlzIGhlYWRlciBsaXN0LlxuICAvKiogQHR5cGUge2ltcG9ydCgnLi9oZWFkZXJzJykuSGVhZGVyc0xpc3R9ICovXG4gIGNvbnN0IGhlYWRlcnMgPSByZXF1ZXN0T3JSZXNwb25zZVtrU3RhdGVdLmhlYWRlcnNMaXN0XG5cbiAgLy8gNC4gTGV0IG1pbWVUeXBlIGJlIHRoZSByZXN1bHQgb2YgZXh0cmFjdGluZyBhIE1JTUUgdHlwZSBmcm9tIGhlYWRlcnMuXG4gIGNvbnN0IG1pbWVUeXBlID0gZXh0cmFjdE1pbWVUeXBlKGhlYWRlcnMpXG5cbiAgLy8gNS4gSWYgbWltZVR5cGUgaXMgZmFpbHVyZSwgdGhlbiByZXR1cm4gbnVsbC5cbiAgaWYgKG1pbWVUeXBlID09PSAnZmFpbHVyZScpIHtcbiAgICByZXR1cm4gbnVsbFxuICB9XG5cbiAgLy8gNi4gUmV0dXJuIG1pbWVUeXBlLlxuICByZXR1cm4gbWltZVR5cGVcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGV4dHJhY3RCb2R5LFxuICBzYWZlbHlFeHRyYWN0Qm9keSxcbiAgY2xvbmVCb2R5LFxuICBtaXhpbkJvZHksXG4gIHN0cmVhbVJlZ2lzdHJ5LFxuICBoYXNGaW5hbGl6YXRpb25SZWdpc3RyeSxcbiAgYm9keVVudXNhYmxlXG59XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbi8qIGdsb2JhbCBXZWJBc3NlbWJseSAqL1xuXG5jb25zdCBhc3NlcnQgPSByZXF1aXJlKCdub2RlOmFzc2VydCcpXG5jb25zdCB1dGlsID0gcmVxdWlyZSgnLi4vY29yZS91dGlsLmpzJylcbmNvbnN0IHsgY2hhbm5lbHMgfSA9IHJlcXVpcmUoJy4uL2NvcmUvZGlhZ25vc3RpY3MuanMnKVxuY29uc3QgdGltZXJzID0gcmVxdWlyZSgnLi4vdXRpbC90aW1lcnMuanMnKVxuY29uc3Qge1xuICBSZXF1ZXN0Q29udGVudExlbmd0aE1pc21hdGNoRXJyb3IsXG4gIFJlc3BvbnNlQ29udGVudExlbmd0aE1pc21hdGNoRXJyb3IsXG4gIFJlcXVlc3RBYm9ydGVkRXJyb3IsXG4gIEhlYWRlcnNUaW1lb3V0RXJyb3IsXG4gIEhlYWRlcnNPdmVyZmxvd0Vycm9yLFxuICBTb2NrZXRFcnJvcixcbiAgSW5mb3JtYXRpb25hbEVycm9yLFxuICBCb2R5VGltZW91dEVycm9yLFxuICBIVFRQUGFyc2VyRXJyb3IsXG4gIFJlc3BvbnNlRXhjZWVkZWRNYXhTaXplRXJyb3Jcbn0gPSByZXF1aXJlKCcuLi9jb3JlL2Vycm9ycy5qcycpXG5jb25zdCB7XG4gIGtVcmwsXG4gIGtSZXNldCxcbiAga0NsaWVudCxcbiAga1BhcnNlcixcbiAga0Jsb2NraW5nLFxuICBrUnVubmluZyxcbiAga1BlbmRpbmcsXG4gIGtTaXplLFxuICBrV3JpdGluZyxcbiAga1F1ZXVlLFxuICBrTm9SZWYsXG4gIGtLZWVwQWxpdmVEZWZhdWx0VGltZW91dCxcbiAga0hvc3RIZWFkZXIsXG4gIGtQZW5kaW5nSWR4LFxuICBrUnVubmluZ0lkeCxcbiAga0Vycm9yLFxuICBrUGlwZWxpbmluZyxcbiAga1NvY2tldCxcbiAga0tlZXBBbGl2ZVRpbWVvdXRWYWx1ZSxcbiAga01heEhlYWRlcnNTaXplLFxuICBrS2VlcEFsaXZlTWF4VGltZW91dCxcbiAga0tlZXBBbGl2ZVRpbWVvdXRUaHJlc2hvbGQsXG4gIGtIZWFkZXJzVGltZW91dCxcbiAga0JvZHlUaW1lb3V0LFxuICBrU3RyaWN0Q29udGVudExlbmd0aCxcbiAga01heFJlcXVlc3RzLFxuICBrQ291bnRlcixcbiAga01heFJlc3BvbnNlU2l6ZSxcbiAga09uRXJyb3IsXG4gIGtSZXN1bWUsXG4gIGtIVFRQQ29udGV4dFxufSA9IHJlcXVpcmUoJy4uL2NvcmUvc3ltYm9scy5qcycpXG5cbmNvbnN0IGNvbnN0YW50cyA9IHJlcXVpcmUoJy4uL2xsaHR0cC9jb25zdGFudHMuanMnKVxuY29uc3QgRU1QVFlfQlVGID0gQnVmZmVyLmFsbG9jKDApXG5jb25zdCBGYXN0QnVmZmVyID0gQnVmZmVyW1N5bWJvbC5zcGVjaWVzXVxuY29uc3QgYWRkTGlzdGVuZXIgPSB1dGlsLmFkZExpc3RlbmVyXG5jb25zdCByZW1vdmVBbGxMaXN0ZW5lcnMgPSB1dGlsLnJlbW92ZUFsbExpc3RlbmVyc1xuXG5sZXQgZXh0cmFjdEJvZHlcblxuYXN5bmMgZnVuY3Rpb24gbGF6eWxsaHR0cCAoKSB7XG4gIGNvbnN0IGxsaHR0cFdhc21EYXRhID0gcHJvY2Vzcy5lbnYuSkVTVF9XT1JLRVJfSUQgPyByZXF1aXJlKCcuLi9sbGh0dHAvbGxodHRwLXdhc20uanMnKSA6IHVuZGVmaW5lZFxuXG4gIGxldCBtb2RcbiAgdHJ5IHtcbiAgICBtb2QgPSBhd2FpdCBXZWJBc3NlbWJseS5jb21waWxlKHJlcXVpcmUoJy4uL2xsaHR0cC9sbGh0dHBfc2ltZC13YXNtLmpzJykpXG4gIH0gY2F0Y2ggKGUpIHtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuXG4gICAgLy8gV2UgY291bGQgY2hlY2sgaWYgdGhlIGVycm9yIHdhcyBjYXVzZWQgYnkgdGhlIHNpbWQgb3B0aW9uIG5vdFxuICAgIC8vIGJlaW5nIGVuYWJsZWQsIGJ1dCB0aGUgb2NjdXJyaW5nIG9mIHRoaXMgb3RoZXIgZXJyb3JcbiAgICAvLyAqIGh0dHBzOi8vZ2l0aHViLmNvbS9lbXNjcmlwdGVuLWNvcmUvZW1zY3JpcHRlbi9pc3N1ZXMvMTE0OTVcbiAgICAvLyBnb3QgbWUgdG8gcmVtb3ZlIHRoYXQgY2hlY2sgdG8gYXZvaWQgYnJlYWtpbmcgTm9kZSAxMi5cbiAgICBtb2QgPSBhd2FpdCBXZWJBc3NlbWJseS5jb21waWxlKGxsaHR0cFdhc21EYXRhIHx8IHJlcXVpcmUoJy4uL2xsaHR0cC9sbGh0dHAtd2FzbS5qcycpKVxuICB9XG5cbiAgcmV0dXJuIGF3YWl0IFdlYkFzc2VtYmx5Lmluc3RhbnRpYXRlKG1vZCwge1xuICAgIGVudjoge1xuICAgICAgLyogZXNsaW50LWRpc2FibGUgY2FtZWxjYXNlICovXG5cbiAgICAgIHdhc21fb25fdXJsOiAocCwgYXQsIGxlbikgPT4ge1xuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgICAgICByZXR1cm4gMFxuICAgICAgfSxcbiAgICAgIHdhc21fb25fc3RhdHVzOiAocCwgYXQsIGxlbikgPT4ge1xuICAgICAgICBhc3NlcnQoY3VycmVudFBhcnNlci5wdHIgPT09IHApXG4gICAgICAgIGNvbnN0IHN0YXJ0ID0gYXQgLSBjdXJyZW50QnVmZmVyUHRyICsgY3VycmVudEJ1ZmZlclJlZi5ieXRlT2Zmc2V0XG4gICAgICAgIHJldHVybiBjdXJyZW50UGFyc2VyLm9uU3RhdHVzKG5ldyBGYXN0QnVmZmVyKGN1cnJlbnRCdWZmZXJSZWYuYnVmZmVyLCBzdGFydCwgbGVuKSkgfHwgMFxuICAgICAgfSxcbiAgICAgIHdhc21fb25fbWVzc2FnZV9iZWdpbjogKHApID0+IHtcbiAgICAgICAgYXNzZXJ0KGN1cnJlbnRQYXJzZXIucHRyID09PSBwKVxuICAgICAgICByZXR1cm4gY3VycmVudFBhcnNlci5vbk1lc3NhZ2VCZWdpbigpIHx8IDBcbiAgICAgIH0sXG4gICAgICB3YXNtX29uX2hlYWRlcl9maWVsZDogKHAsIGF0LCBsZW4pID0+IHtcbiAgICAgICAgYXNzZXJ0KGN1cnJlbnRQYXJzZXIucHRyID09PSBwKVxuICAgICAgICBjb25zdCBzdGFydCA9IGF0IC0gY3VycmVudEJ1ZmZlclB0ciArIGN1cnJlbnRCdWZmZXJSZWYuYnl0ZU9mZnNldFxuICAgICAgICByZXR1cm4gY3VycmVudFBhcnNlci5vbkhlYWRlckZpZWxkKG5ldyBGYXN0QnVmZmVyKGN1cnJlbnRCdWZmZXJSZWYuYnVmZmVyLCBzdGFydCwgbGVuKSkgfHwgMFxuICAgICAgfSxcbiAgICAgIHdhc21fb25faGVhZGVyX3ZhbHVlOiAocCwgYXQsIGxlbikgPT4ge1xuICAgICAgICBhc3NlcnQoY3VycmVudFBhcnNlci5wdHIgPT09IHApXG4gICAgICAgIGNvbnN0IHN0YXJ0ID0gYXQgLSBjdXJyZW50QnVmZmVyUHRyICsgY3VycmVudEJ1ZmZlclJlZi5ieXRlT2Zmc2V0XG4gICAgICAgIHJldHVybiBjdXJyZW50UGFyc2VyLm9uSGVhZGVyVmFsdWUobmV3IEZhc3RCdWZmZXIoY3VycmVudEJ1ZmZlclJlZi5idWZmZXIsIHN0YXJ0LCBsZW4pKSB8fCAwXG4gICAgICB9LFxuICAgICAgd2FzbV9vbl9oZWFkZXJzX2NvbXBsZXRlOiAocCwgc3RhdHVzQ29kZSwgdXBncmFkZSwgc2hvdWxkS2VlcEFsaXZlKSA9PiB7XG4gICAgICAgIGFzc2VydChjdXJyZW50UGFyc2VyLnB0ciA9PT0gcClcbiAgICAgICAgcmV0dXJuIGN1cnJlbnRQYXJzZXIub25IZWFkZXJzQ29tcGxldGUoc3RhdHVzQ29kZSwgQm9vbGVhbih1cGdyYWRlKSwgQm9vbGVhbihzaG91bGRLZWVwQWxpdmUpKSB8fCAwXG4gICAgICB9LFxuICAgICAgd2FzbV9vbl9ib2R5OiAocCwgYXQsIGxlbikgPT4ge1xuICAgICAgICBhc3NlcnQoY3VycmVudFBhcnNlci5wdHIgPT09IHApXG4gICAgICAgIGNvbnN0IHN0YXJ0ID0gYXQgLSBjdXJyZW50QnVmZmVyUHRyICsgY3VycmVudEJ1ZmZlclJlZi5ieXRlT2Zmc2V0XG4gICAgICAgIHJldHVybiBjdXJyZW50UGFyc2VyLm9uQm9keShuZXcgRmFzdEJ1ZmZlcihjdXJyZW50QnVmZmVyUmVmLmJ1ZmZlciwgc3RhcnQsIGxlbikpIHx8IDBcbiAgICAgIH0sXG4gICAgICB3YXNtX29uX21lc3NhZ2VfY29tcGxldGU6IChwKSA9PiB7XG4gICAgICAgIGFzc2VydChjdXJyZW50UGFyc2VyLnB0ciA9PT0gcClcbiAgICAgICAgcmV0dXJuIGN1cnJlbnRQYXJzZXIub25NZXNzYWdlQ29tcGxldGUoKSB8fCAwXG4gICAgICB9XG5cbiAgICAgIC8qIGVzbGludC1lbmFibGUgY2FtZWxjYXNlICovXG4gICAgfVxuICB9KVxufVxuXG5sZXQgbGxodHRwSW5zdGFuY2UgPSBudWxsXG5sZXQgbGxodHRwUHJvbWlzZSA9IGxhenlsbGh0dHAoKVxubGxodHRwUHJvbWlzZS5jYXRjaCgpXG5cbmxldCBjdXJyZW50UGFyc2VyID0gbnVsbFxubGV0IGN1cnJlbnRCdWZmZXJSZWYgPSBudWxsXG5sZXQgY3VycmVudEJ1ZmZlclNpemUgPSAwXG5sZXQgY3VycmVudEJ1ZmZlclB0ciA9IG51bGxcblxuY29uc3QgVVNFX05BVElWRV9USU1FUiA9IDBcbmNvbnN0IFVTRV9GQVNUX1RJTUVSID0gMVxuXG4vLyBVc2UgZmFzdCB0aW1lcnMgZm9yIGhlYWRlcnMgYW5kIGJvZHkgdG8gdGFrZSBldmVudHVhbCBldmVudCBsb29wXG4vLyBsYXRlbmN5IGludG8gYWNjb3VudC5cbmNvbnN0IFRJTUVPVVRfSEVBREVSUyA9IDIgfCBVU0VfRkFTVF9USU1FUlxuY29uc3QgVElNRU9VVF9CT0RZID0gNCB8IFVTRV9GQVNUX1RJTUVSXG5cbi8vIFVzZSBuYXRpdmUgdGltZXJzIHRvIGlnbm9yZSBldmVudCBsb29wIGxhdGVuY3kgZm9yIGtlZXAtYWxpdmVcbi8vIGhhbmRsaW5nLlxuY29uc3QgVElNRU9VVF9LRUVQX0FMSVZFID0gOCB8IFVTRV9OQVRJVkVfVElNRVJcblxuY2xhc3MgUGFyc2VyIHtcbiAgY29uc3RydWN0b3IgKGNsaWVudCwgc29ja2V0LCB7IGV4cG9ydHMgfSkge1xuICAgIGFzc2VydChOdW1iZXIuaXNGaW5pdGUoY2xpZW50W2tNYXhIZWFkZXJzU2l6ZV0pICYmIGNsaWVudFtrTWF4SGVhZGVyc1NpemVdID4gMClcblxuICAgIHRoaXMubGxodHRwID0gZXhwb3J0c1xuICAgIHRoaXMucHRyID0gdGhpcy5sbGh0dHAubGxodHRwX2FsbG9jKGNvbnN0YW50cy5UWVBFLlJFU1BPTlNFKVxuICAgIHRoaXMuY2xpZW50ID0gY2xpZW50XG4gICAgdGhpcy5zb2NrZXQgPSBzb2NrZXRcbiAgICB0aGlzLnRpbWVvdXQgPSBudWxsXG4gICAgdGhpcy50aW1lb3V0VmFsdWUgPSBudWxsXG4gICAgdGhpcy50aW1lb3V0VHlwZSA9IG51bGxcbiAgICB0aGlzLnN0YXR1c0NvZGUgPSBudWxsXG4gICAgdGhpcy5zdGF0dXNUZXh0ID0gJydcbiAgICB0aGlzLnVwZ3JhZGUgPSBmYWxzZVxuICAgIHRoaXMuaGVhZGVycyA9IFtdXG4gICAgdGhpcy5oZWFkZXJzU2l6ZSA9IDBcbiAgICB0aGlzLmhlYWRlcnNNYXhTaXplID0gY2xpZW50W2tNYXhIZWFkZXJzU2l6ZV1cbiAgICB0aGlzLnNob3VsZEtlZXBBbGl2ZSA9IGZhbHNlXG4gICAgdGhpcy5wYXVzZWQgPSBmYWxzZVxuICAgIHRoaXMucmVzdW1lID0gdGhpcy5yZXN1bWUuYmluZCh0aGlzKVxuXG4gICAgdGhpcy5ieXRlc1JlYWQgPSAwXG5cbiAgICB0aGlzLmtlZXBBbGl2ZSA9ICcnXG4gICAgdGhpcy5jb250ZW50TGVuZ3RoID0gJydcbiAgICB0aGlzLmNvbm5lY3Rpb24gPSAnJ1xuICAgIHRoaXMubWF4UmVzcG9uc2VTaXplID0gY2xpZW50W2tNYXhSZXNwb25zZVNpemVdXG4gIH1cblxuICBzZXRUaW1lb3V0IChkZWxheSwgdHlwZSkge1xuICAgIC8vIElmIHRoZSBleGlzdGluZyB0aW1lciBhbmQgdGhlIG5ldyB0aW1lciBhcmUgb2YgZGlmZmVyZW50IHRpbWVyIHR5cGVcbiAgICAvLyAoZmFzdCBvciBuYXRpdmUpIG9yIGhhdmUgZGlmZmVyZW50IGRlbGF5LCB3ZSBuZWVkIHRvIGNsZWFyIHRoZSBleGlzdGluZ1xuICAgIC8vIHRpbWVyIGFuZCBzZXQgYSBuZXcgb25lLlxuICAgIGlmIChcbiAgICAgIGRlbGF5ICE9PSB0aGlzLnRpbWVvdXRWYWx1ZSB8fFxuICAgICAgKHR5cGUgJiBVU0VfRkFTVF9USU1FUikgXiAodGhpcy50aW1lb3V0VHlwZSAmIFVTRV9GQVNUX1RJTUVSKVxuICAgICkge1xuICAgICAgLy8gSWYgYSB0aW1lb3V0IGlzIGFscmVhZHkgc2V0LCBjbGVhciBpdCB3aXRoIGNsZWFyVGltZW91dCBvZiB0aGUgZmFzdFxuICAgICAgLy8gdGltZXIgaW1wbGVtZW50YXRpb24sIGFzIGl0IGNhbiBjbGVhciBmYXN0IGFuZCBuYXRpdmUgdGltZXJzLlxuICAgICAgaWYgKHRoaXMudGltZW91dCkge1xuICAgICAgICB0aW1lcnMuY2xlYXJUaW1lb3V0KHRoaXMudGltZW91dClcbiAgICAgICAgdGhpcy50aW1lb3V0ID0gbnVsbFxuICAgICAgfVxuXG4gICAgICBpZiAoZGVsYXkpIHtcbiAgICAgICAgaWYgKHR5cGUgJiBVU0VfRkFTVF9USU1FUikge1xuICAgICAgICAgIHRoaXMudGltZW91dCA9IHRpbWVycy5zZXRGYXN0VGltZW91dChvblBhcnNlclRpbWVvdXQsIGRlbGF5LCBuZXcgV2Vha1JlZih0aGlzKSlcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnRpbWVvdXQgPSBzZXRUaW1lb3V0KG9uUGFyc2VyVGltZW91dCwgZGVsYXksIG5ldyBXZWFrUmVmKHRoaXMpKVxuICAgICAgICAgIHRoaXMudGltZW91dC51bnJlZigpXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdGhpcy50aW1lb3V0VmFsdWUgPSBkZWxheVxuICAgIH0gZWxzZSBpZiAodGhpcy50aW1lb3V0KSB7XG4gICAgICAvLyBpc3RhbmJ1bCBpZ25vcmUgZWxzZTogb25seSBmb3IgamVzdFxuICAgICAgaWYgKHRoaXMudGltZW91dC5yZWZyZXNoKSB7XG4gICAgICAgIHRoaXMudGltZW91dC5yZWZyZXNoKClcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLnRpbWVvdXRUeXBlID0gdHlwZVxuICB9XG5cbiAgcmVzdW1lICgpIHtcbiAgICBpZiAodGhpcy5zb2NrZXQuZGVzdHJveWVkIHx8ICF0aGlzLnBhdXNlZCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgYXNzZXJ0KHRoaXMucHRyICE9IG51bGwpXG4gICAgYXNzZXJ0KGN1cnJlbnRQYXJzZXIgPT0gbnVsbClcblxuICAgIHRoaXMubGxodHRwLmxsaHR0cF9yZXN1bWUodGhpcy5wdHIpXG5cbiAgICBhc3NlcnQodGhpcy50aW1lb3V0VHlwZSA9PT0gVElNRU9VVF9CT0RZKVxuICAgIGlmICh0aGlzLnRpbWVvdXQpIHtcbiAgICAgIC8vIGlzdGFuYnVsIGlnbm9yZSBlbHNlOiBvbmx5IGZvciBqZXN0XG4gICAgICBpZiAodGhpcy50aW1lb3V0LnJlZnJlc2gpIHtcbiAgICAgICAgdGhpcy50aW1lb3V0LnJlZnJlc2goKVxuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMucGF1c2VkID0gZmFsc2VcbiAgICB0aGlzLmV4ZWN1dGUodGhpcy5zb2NrZXQucmVhZCgpIHx8IEVNUFRZX0JVRikgLy8gRmx1c2ggcGFyc2VyLlxuICAgIHRoaXMucmVhZE1vcmUoKVxuICB9XG5cbiAgcmVhZE1vcmUgKCkge1xuICAgIHdoaWxlICghdGhpcy5wYXVzZWQgJiYgdGhpcy5wdHIpIHtcbiAgICAgIGNvbnN0IGNodW5rID0gdGhpcy5zb2NrZXQucmVhZCgpXG4gICAgICBpZiAoY2h1bmsgPT09IG51bGwpIHtcbiAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICAgIHRoaXMuZXhlY3V0ZShjaHVuaylcbiAgICB9XG4gIH1cblxuICBleGVjdXRlIChkYXRhKSB7XG4gICAgYXNzZXJ0KHRoaXMucHRyICE9IG51bGwpXG4gICAgYXNzZXJ0KGN1cnJlbnRQYXJzZXIgPT0gbnVsbClcbiAgICBhc3NlcnQoIXRoaXMucGF1c2VkKVxuXG4gICAgY29uc3QgeyBzb2NrZXQsIGxsaHR0cCB9ID0gdGhpc1xuXG4gICAgaWYgKGRhdGEubGVuZ3RoID4gY3VycmVudEJ1ZmZlclNpemUpIHtcbiAgICAgIGlmIChjdXJyZW50QnVmZmVyUHRyKSB7XG4gICAgICAgIGxsaHR0cC5mcmVlKGN1cnJlbnRCdWZmZXJQdHIpXG4gICAgICB9XG4gICAgICBjdXJyZW50QnVmZmVyU2l6ZSA9IE1hdGguY2VpbChkYXRhLmxlbmd0aCAvIDQwOTYpICogNDA5NlxuICAgICAgY3VycmVudEJ1ZmZlclB0ciA9IGxsaHR0cC5tYWxsb2MoY3VycmVudEJ1ZmZlclNpemUpXG4gICAgfVxuXG4gICAgbmV3IFVpbnQ4QXJyYXkobGxodHRwLm1lbW9yeS5idWZmZXIsIGN1cnJlbnRCdWZmZXJQdHIsIGN1cnJlbnRCdWZmZXJTaXplKS5zZXQoZGF0YSlcblxuICAgIC8vIENhbGwgYGV4ZWN1dGVgIG9uIHRoZSB3YXNtIHBhcnNlci5cbiAgICAvLyBXZSBwYXNzIHRoZSBgbGxodHRwX3BhcnNlcmAgcG9pbnRlciBhZGRyZXNzLCB0aGUgcG9pbnRlciBhZGRyZXNzIG9mIGJ1ZmZlciB2aWV3IGRhdGEsXG4gICAgLy8gYW5kIGZpbmFsbHkgdGhlIGxlbmd0aCBvZiBieXRlcyB0byBwYXJzZS5cbiAgICAvLyBUaGUgcmV0dXJuIHZhbHVlIGlzIGFuIGVycm9yIGNvZGUgb3IgYGNvbnN0YW50cy5FUlJPUi5PS2AuXG4gICAgdHJ5IHtcbiAgICAgIGxldCByZXRcblxuICAgICAgdHJ5IHtcbiAgICAgICAgY3VycmVudEJ1ZmZlclJlZiA9IGRhdGFcbiAgICAgICAgY3VycmVudFBhcnNlciA9IHRoaXNcbiAgICAgICAgcmV0ID0gbGxodHRwLmxsaHR0cF9leGVjdXRlKHRoaXMucHRyLCBjdXJyZW50QnVmZmVyUHRyLCBkYXRhLmxlbmd0aClcbiAgICAgICAgLyogZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVzZWxlc3MtY2F0Y2ggKi9cbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dDogZGlmZmljdWx0IHRvIG1ha2UgYSB0ZXN0IGNhc2UgZm9yICovXG4gICAgICAgIHRocm93IGVyclxuICAgICAgfSBmaW5hbGx5IHtcbiAgICAgICAgY3VycmVudFBhcnNlciA9IG51bGxcbiAgICAgICAgY3VycmVudEJ1ZmZlclJlZiA9IG51bGxcbiAgICAgIH1cblxuICAgICAgY29uc3Qgb2Zmc2V0ID0gbGxodHRwLmxsaHR0cF9nZXRfZXJyb3JfcG9zKHRoaXMucHRyKSAtIGN1cnJlbnRCdWZmZXJQdHJcblxuICAgICAgaWYgKHJldCA9PT0gY29uc3RhbnRzLkVSUk9SLlBBVVNFRF9VUEdSQURFKSB7XG4gICAgICAgIHRoaXMub25VcGdyYWRlKGRhdGEuc2xpY2Uob2Zmc2V0KSlcbiAgICAgIH0gZWxzZSBpZiAocmV0ID09PSBjb25zdGFudHMuRVJST1IuUEFVU0VEKSB7XG4gICAgICAgIHRoaXMucGF1c2VkID0gdHJ1ZVxuICAgICAgICBzb2NrZXQudW5zaGlmdChkYXRhLnNsaWNlKG9mZnNldCkpXG4gICAgICB9IGVsc2UgaWYgKHJldCAhPT0gY29uc3RhbnRzLkVSUk9SLk9LKSB7XG4gICAgICAgIGNvbnN0IHB0ciA9IGxsaHR0cC5sbGh0dHBfZ2V0X2Vycm9yX3JlYXNvbih0aGlzLnB0cilcbiAgICAgICAgbGV0IG1lc3NhZ2UgPSAnJ1xuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZTogZGlmZmljdWx0IHRvIG1ha2UgYSB0ZXN0IGNhc2UgZm9yICovXG4gICAgICAgIGlmIChwdHIpIHtcbiAgICAgICAgICBjb25zdCBsZW4gPSBuZXcgVWludDhBcnJheShsbGh0dHAubWVtb3J5LmJ1ZmZlciwgcHRyKS5pbmRleE9mKDApXG4gICAgICAgICAgbWVzc2FnZSA9XG4gICAgICAgICAgICAnUmVzcG9uc2UgZG9lcyBub3QgbWF0Y2ggdGhlIEhUVFAvMS4xIHByb3RvY29sICgnICtcbiAgICAgICAgICAgIEJ1ZmZlci5mcm9tKGxsaHR0cC5tZW1vcnkuYnVmZmVyLCBwdHIsIGxlbikudG9TdHJpbmcoKSArXG4gICAgICAgICAgICAnKSdcbiAgICAgICAgfVxuICAgICAgICB0aHJvdyBuZXcgSFRUUFBhcnNlckVycm9yKG1lc3NhZ2UsIGNvbnN0YW50cy5FUlJPUltyZXRdLCBkYXRhLnNsaWNlKG9mZnNldCkpXG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICB1dGlsLmRlc3Ryb3koc29ja2V0LCBlcnIpXG4gICAgfVxuICB9XG5cbiAgZGVzdHJveSAoKSB7XG4gICAgYXNzZXJ0KHRoaXMucHRyICE9IG51bGwpXG4gICAgYXNzZXJ0KGN1cnJlbnRQYXJzZXIgPT0gbnVsbClcblxuICAgIHRoaXMubGxodHRwLmxsaHR0cF9mcmVlKHRoaXMucHRyKVxuICAgIHRoaXMucHRyID0gbnVsbFxuXG4gICAgdGhpcy50aW1lb3V0ICYmIHRpbWVycy5jbGVhclRpbWVvdXQodGhpcy50aW1lb3V0KVxuICAgIHRoaXMudGltZW91dCA9IG51bGxcbiAgICB0aGlzLnRpbWVvdXRWYWx1ZSA9IG51bGxcbiAgICB0aGlzLnRpbWVvdXRUeXBlID0gbnVsbFxuXG4gICAgdGhpcy5wYXVzZWQgPSBmYWxzZVxuICB9XG5cbiAgb25TdGF0dXMgKGJ1Zikge1xuICAgIHRoaXMuc3RhdHVzVGV4dCA9IGJ1Zi50b1N0cmluZygpXG4gIH1cblxuICBvbk1lc3NhZ2VCZWdpbiAoKSB7XG4gICAgY29uc3QgeyBzb2NrZXQsIGNsaWVudCB9ID0gdGhpc1xuXG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQ6IGRpZmZpY3VsdCB0byBtYWtlIGEgdGVzdCBjYXNlIGZvciAqL1xuICAgIGlmIChzb2NrZXQuZGVzdHJveWVkKSB7XG4gICAgICByZXR1cm4gLTFcbiAgICB9XG5cbiAgICBjb25zdCByZXF1ZXN0ID0gY2xpZW50W2tRdWV1ZV1bY2xpZW50W2tSdW5uaW5nSWR4XV1cbiAgICBpZiAoIXJlcXVlc3QpIHtcbiAgICAgIHJldHVybiAtMVxuICAgIH1cbiAgICByZXF1ZXN0Lm9uUmVzcG9uc2VTdGFydGVkKClcbiAgfVxuXG4gIG9uSGVhZGVyRmllbGQgKGJ1Zikge1xuICAgIGNvbnN0IGxlbiA9IHRoaXMuaGVhZGVycy5sZW5ndGhcblxuICAgIGlmICgobGVuICYgMSkgPT09IDApIHtcbiAgICAgIHRoaXMuaGVhZGVycy5wdXNoKGJ1ZilcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5oZWFkZXJzW2xlbiAtIDFdID0gQnVmZmVyLmNvbmNhdChbdGhpcy5oZWFkZXJzW2xlbiAtIDFdLCBidWZdKVxuICAgIH1cblxuICAgIHRoaXMudHJhY2tIZWFkZXIoYnVmLmxlbmd0aClcbiAgfVxuXG4gIG9uSGVhZGVyVmFsdWUgKGJ1Zikge1xuICAgIGxldCBsZW4gPSB0aGlzLmhlYWRlcnMubGVuZ3RoXG5cbiAgICBpZiAoKGxlbiAmIDEpID09PSAxKSB7XG4gICAgICB0aGlzLmhlYWRlcnMucHVzaChidWYpXG4gICAgICBsZW4gKz0gMVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmhlYWRlcnNbbGVuIC0gMV0gPSBCdWZmZXIuY29uY2F0KFt0aGlzLmhlYWRlcnNbbGVuIC0gMV0sIGJ1Zl0pXG4gICAgfVxuXG4gICAgY29uc3Qga2V5ID0gdGhpcy5oZWFkZXJzW2xlbiAtIDJdXG4gICAgaWYgKGtleS5sZW5ndGggPT09IDEwKSB7XG4gICAgICBjb25zdCBoZWFkZXJOYW1lID0gdXRpbC5idWZmZXJUb0xvd2VyQ2FzZWRIZWFkZXJOYW1lKGtleSlcbiAgICAgIGlmIChoZWFkZXJOYW1lID09PSAna2VlcC1hbGl2ZScpIHtcbiAgICAgICAgdGhpcy5rZWVwQWxpdmUgKz0gYnVmLnRvU3RyaW5nKClcbiAgICAgIH0gZWxzZSBpZiAoaGVhZGVyTmFtZSA9PT0gJ2Nvbm5lY3Rpb24nKSB7XG4gICAgICAgIHRoaXMuY29ubmVjdGlvbiArPSBidWYudG9TdHJpbmcoKVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoa2V5Lmxlbmd0aCA9PT0gMTQgJiYgdXRpbC5idWZmZXJUb0xvd2VyQ2FzZWRIZWFkZXJOYW1lKGtleSkgPT09ICdjb250ZW50LWxlbmd0aCcpIHtcbiAgICAgIHRoaXMuY29udGVudExlbmd0aCArPSBidWYudG9TdHJpbmcoKVxuICAgIH1cblxuICAgIHRoaXMudHJhY2tIZWFkZXIoYnVmLmxlbmd0aClcbiAgfVxuXG4gIHRyYWNrSGVhZGVyIChsZW4pIHtcbiAgICB0aGlzLmhlYWRlcnNTaXplICs9IGxlblxuICAgIGlmICh0aGlzLmhlYWRlcnNTaXplID49IHRoaXMuaGVhZGVyc01heFNpemUpIHtcbiAgICAgIHV0aWwuZGVzdHJveSh0aGlzLnNvY2tldCwgbmV3IEhlYWRlcnNPdmVyZmxvd0Vycm9yKCkpXG4gICAgfVxuICB9XG5cbiAgb25VcGdyYWRlIChoZWFkKSB7XG4gICAgY29uc3QgeyB1cGdyYWRlLCBjbGllbnQsIHNvY2tldCwgaGVhZGVycywgc3RhdHVzQ29kZSB9ID0gdGhpc1xuXG4gICAgYXNzZXJ0KHVwZ3JhZGUpXG4gICAgYXNzZXJ0KGNsaWVudFtrU29ja2V0XSA9PT0gc29ja2V0KVxuICAgIGFzc2VydCghc29ja2V0LmRlc3Ryb3llZClcbiAgICBhc3NlcnQoIXRoaXMucGF1c2VkKVxuICAgIGFzc2VydCgoaGVhZGVycy5sZW5ndGggJiAxKSA9PT0gMClcblxuICAgIGNvbnN0IHJlcXVlc3QgPSBjbGllbnRba1F1ZXVlXVtjbGllbnRba1J1bm5pbmdJZHhdXVxuICAgIGFzc2VydChyZXF1ZXN0KVxuICAgIGFzc2VydChyZXF1ZXN0LnVwZ3JhZGUgfHwgcmVxdWVzdC5tZXRob2QgPT09ICdDT05ORUNUJylcblxuICAgIHRoaXMuc3RhdHVzQ29kZSA9IG51bGxcbiAgICB0aGlzLnN0YXR1c1RleHQgPSAnJ1xuICAgIHRoaXMuc2hvdWxkS2VlcEFsaXZlID0gbnVsbFxuXG4gICAgdGhpcy5oZWFkZXJzID0gW11cbiAgICB0aGlzLmhlYWRlcnNTaXplID0gMFxuXG4gICAgc29ja2V0LnVuc2hpZnQoaGVhZClcblxuICAgIHNvY2tldFtrUGFyc2VyXS5kZXN0cm95KClcbiAgICBzb2NrZXRba1BhcnNlcl0gPSBudWxsXG5cbiAgICBzb2NrZXRba0NsaWVudF0gPSBudWxsXG4gICAgc29ja2V0W2tFcnJvcl0gPSBudWxsXG5cbiAgICByZW1vdmVBbGxMaXN0ZW5lcnMoc29ja2V0KVxuXG4gICAgY2xpZW50W2tTb2NrZXRdID0gbnVsbFxuICAgIGNsaWVudFtrSFRUUENvbnRleHRdID0gbnVsbCAvLyBUT0RPIChmaXgpOiBUaGlzIGlzIGhhY2t5Li4uXG4gICAgY2xpZW50W2tRdWV1ZV1bY2xpZW50W2tSdW5uaW5nSWR4XSsrXSA9IG51bGxcbiAgICBjbGllbnQuZW1pdCgnZGlzY29ubmVjdCcsIGNsaWVudFtrVXJsXSwgW2NsaWVudF0sIG5ldyBJbmZvcm1hdGlvbmFsRXJyb3IoJ3VwZ3JhZGUnKSlcblxuICAgIHRyeSB7XG4gICAgICByZXF1ZXN0Lm9uVXBncmFkZShzdGF0dXNDb2RlLCBoZWFkZXJzLCBzb2NrZXQpXG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICB1dGlsLmRlc3Ryb3koc29ja2V0LCBlcnIpXG4gICAgfVxuXG4gICAgY2xpZW50W2tSZXN1bWVdKClcbiAgfVxuXG4gIG9uSGVhZGVyc0NvbXBsZXRlIChzdGF0dXNDb2RlLCB1cGdyYWRlLCBzaG91bGRLZWVwQWxpdmUpIHtcbiAgICBjb25zdCB7IGNsaWVudCwgc29ja2V0LCBoZWFkZXJzLCBzdGF0dXNUZXh0IH0gPSB0aGlzXG5cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dDogZGlmZmljdWx0IHRvIG1ha2UgYSB0ZXN0IGNhc2UgZm9yICovXG4gICAgaWYgKHNvY2tldC5kZXN0cm95ZWQpIHtcbiAgICAgIHJldHVybiAtMVxuICAgIH1cblxuICAgIGNvbnN0IHJlcXVlc3QgPSBjbGllbnRba1F1ZXVlXVtjbGllbnRba1J1bm5pbmdJZHhdXVxuXG4gICAgLyogaXN0YW5idWwgaWdub3JlIG5leHQ6IGRpZmZpY3VsdCB0byBtYWtlIGEgdGVzdCBjYXNlIGZvciAqL1xuICAgIGlmICghcmVxdWVzdCkge1xuICAgICAgcmV0dXJuIC0xXG4gICAgfVxuXG4gICAgYXNzZXJ0KCF0aGlzLnVwZ3JhZGUpXG4gICAgYXNzZXJ0KHRoaXMuc3RhdHVzQ29kZSA8IDIwMClcblxuICAgIGlmIChzdGF0dXNDb2RlID09PSAxMDApIHtcbiAgICAgIHV0aWwuZGVzdHJveShzb2NrZXQsIG5ldyBTb2NrZXRFcnJvcignYmFkIHJlc3BvbnNlJywgdXRpbC5nZXRTb2NrZXRJbmZvKHNvY2tldCkpKVxuICAgICAgcmV0dXJuIC0xXG4gICAgfVxuXG4gICAgLyogdGhpcyBjYW4gb25seSBoYXBwZW4gaWYgc2VydmVyIGlzIG1pc2JlaGF2aW5nICovXG4gICAgaWYgKHVwZ3JhZGUgJiYgIXJlcXVlc3QudXBncmFkZSkge1xuICAgICAgdXRpbC5kZXN0cm95KHNvY2tldCwgbmV3IFNvY2tldEVycm9yKCdiYWQgdXBncmFkZScsIHV0aWwuZ2V0U29ja2V0SW5mbyhzb2NrZXQpKSlcbiAgICAgIHJldHVybiAtMVxuICAgIH1cblxuICAgIGFzc2VydCh0aGlzLnRpbWVvdXRUeXBlID09PSBUSU1FT1VUX0hFQURFUlMpXG5cbiAgICB0aGlzLnN0YXR1c0NvZGUgPSBzdGF0dXNDb2RlXG4gICAgdGhpcy5zaG91bGRLZWVwQWxpdmUgPSAoXG4gICAgICBzaG91bGRLZWVwQWxpdmUgfHxcbiAgICAgIC8vIE92ZXJyaWRlIGxsaHR0cCB2YWx1ZSB3aGljaCBkb2VzIG5vdCBhbGxvdyBrZWVwQWxpdmUgZm9yIEhFQUQuXG4gICAgICAocmVxdWVzdC5tZXRob2QgPT09ICdIRUFEJyAmJiAhc29ja2V0W2tSZXNldF0gJiYgdGhpcy5jb25uZWN0aW9uLnRvTG93ZXJDYXNlKCkgPT09ICdrZWVwLWFsaXZlJylcbiAgICApXG5cbiAgICBpZiAodGhpcy5zdGF0dXNDb2RlID49IDIwMCkge1xuICAgICAgY29uc3QgYm9keVRpbWVvdXQgPSByZXF1ZXN0LmJvZHlUaW1lb3V0ICE9IG51bGxcbiAgICAgICAgPyByZXF1ZXN0LmJvZHlUaW1lb3V0XG4gICAgICAgIDogY2xpZW50W2tCb2R5VGltZW91dF1cbiAgICAgIHRoaXMuc2V0VGltZW91dChib2R5VGltZW91dCwgVElNRU9VVF9CT0RZKVxuICAgIH0gZWxzZSBpZiAodGhpcy50aW1lb3V0KSB7XG4gICAgICAvLyBpc3RhbmJ1bCBpZ25vcmUgZWxzZTogb25seSBmb3IgamVzdFxuICAgICAgaWYgKHRoaXMudGltZW91dC5yZWZyZXNoKSB7XG4gICAgICAgIHRoaXMudGltZW91dC5yZWZyZXNoKClcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAocmVxdWVzdC5tZXRob2QgPT09ICdDT05ORUNUJykge1xuICAgICAgYXNzZXJ0KGNsaWVudFtrUnVubmluZ10gPT09IDEpXG4gICAgICB0aGlzLnVwZ3JhZGUgPSB0cnVlXG4gICAgICByZXR1cm4gMlxuICAgIH1cblxuICAgIGlmICh1cGdyYWRlKSB7XG4gICAgICBhc3NlcnQoY2xpZW50W2tSdW5uaW5nXSA9PT0gMSlcbiAgICAgIHRoaXMudXBncmFkZSA9IHRydWVcbiAgICAgIHJldHVybiAyXG4gICAgfVxuXG4gICAgYXNzZXJ0KCh0aGlzLmhlYWRlcnMubGVuZ3RoICYgMSkgPT09IDApXG4gICAgdGhpcy5oZWFkZXJzID0gW11cbiAgICB0aGlzLmhlYWRlcnNTaXplID0gMFxuXG4gICAgaWYgKHRoaXMuc2hvdWxkS2VlcEFsaXZlICYmIGNsaWVudFtrUGlwZWxpbmluZ10pIHtcbiAgICAgIGNvbnN0IGtlZXBBbGl2ZVRpbWVvdXQgPSB0aGlzLmtlZXBBbGl2ZSA/IHV0aWwucGFyc2VLZWVwQWxpdmVUaW1lb3V0KHRoaXMua2VlcEFsaXZlKSA6IG51bGxcblxuICAgICAgaWYgKGtlZXBBbGl2ZVRpbWVvdXQgIT0gbnVsbCkge1xuICAgICAgICBjb25zdCB0aW1lb3V0ID0gTWF0aC5taW4oXG4gICAgICAgICAga2VlcEFsaXZlVGltZW91dCAtIGNsaWVudFtrS2VlcEFsaXZlVGltZW91dFRocmVzaG9sZF0sXG4gICAgICAgICAgY2xpZW50W2tLZWVwQWxpdmVNYXhUaW1lb3V0XVxuICAgICAgICApXG4gICAgICAgIGlmICh0aW1lb3V0IDw9IDApIHtcbiAgICAgICAgICBzb2NrZXRba1Jlc2V0XSA9IHRydWVcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjbGllbnRba0tlZXBBbGl2ZVRpbWVvdXRWYWx1ZV0gPSB0aW1lb3V0XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNsaWVudFtrS2VlcEFsaXZlVGltZW91dFZhbHVlXSA9IGNsaWVudFtrS2VlcEFsaXZlRGVmYXVsdFRpbWVvdXRdXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFN0b3AgbW9yZSByZXF1ZXN0cyBmcm9tIGJlaW5nIGRpc3BhdGNoZWQuXG4gICAgICBzb2NrZXRba1Jlc2V0XSA9IHRydWVcbiAgICB9XG5cbiAgICBjb25zdCBwYXVzZSA9IHJlcXVlc3Qub25IZWFkZXJzKHN0YXR1c0NvZGUsIGhlYWRlcnMsIHRoaXMucmVzdW1lLCBzdGF0dXNUZXh0KSA9PT0gZmFsc2VcblxuICAgIGlmIChyZXF1ZXN0LmFib3J0ZWQpIHtcbiAgICAgIHJldHVybiAtMVxuICAgIH1cblxuICAgIGlmIChyZXF1ZXN0Lm1ldGhvZCA9PT0gJ0hFQUQnKSB7XG4gICAgICByZXR1cm4gMVxuICAgIH1cblxuICAgIGlmIChzdGF0dXNDb2RlIDwgMjAwKSB7XG4gICAgICByZXR1cm4gMVxuICAgIH1cblxuICAgIGlmIChzb2NrZXRba0Jsb2NraW5nXSkge1xuICAgICAgc29ja2V0W2tCbG9ja2luZ10gPSBmYWxzZVxuICAgICAgY2xpZW50W2tSZXN1bWVdKClcbiAgICB9XG5cbiAgICByZXR1cm4gcGF1c2UgPyBjb25zdGFudHMuRVJST1IuUEFVU0VEIDogMFxuICB9XG5cbiAgb25Cb2R5IChidWYpIHtcbiAgICBjb25zdCB7IGNsaWVudCwgc29ja2V0LCBzdGF0dXNDb2RlLCBtYXhSZXNwb25zZVNpemUgfSA9IHRoaXNcblxuICAgIGlmIChzb2NrZXQuZGVzdHJveWVkKSB7XG4gICAgICByZXR1cm4gLTFcbiAgICB9XG5cbiAgICBjb25zdCByZXF1ZXN0ID0gY2xpZW50W2tRdWV1ZV1bY2xpZW50W2tSdW5uaW5nSWR4XV1cbiAgICBhc3NlcnQocmVxdWVzdClcblxuICAgIGFzc2VydCh0aGlzLnRpbWVvdXRUeXBlID09PSBUSU1FT1VUX0JPRFkpXG4gICAgaWYgKHRoaXMudGltZW91dCkge1xuICAgICAgLy8gaXN0YW5idWwgaWdub3JlIGVsc2U6IG9ubHkgZm9yIGplc3RcbiAgICAgIGlmICh0aGlzLnRpbWVvdXQucmVmcmVzaCkge1xuICAgICAgICB0aGlzLnRpbWVvdXQucmVmcmVzaCgpXG4gICAgICB9XG4gICAgfVxuXG4gICAgYXNzZXJ0KHN0YXR1c0NvZGUgPj0gMjAwKVxuXG4gICAgaWYgKG1heFJlc3BvbnNlU2l6ZSA+IC0xICYmIHRoaXMuYnl0ZXNSZWFkICsgYnVmLmxlbmd0aCA+IG1heFJlc3BvbnNlU2l6ZSkge1xuICAgICAgdXRpbC5kZXN0cm95KHNvY2tldCwgbmV3IFJlc3BvbnNlRXhjZWVkZWRNYXhTaXplRXJyb3IoKSlcbiAgICAgIHJldHVybiAtMVxuICAgIH1cblxuICAgIHRoaXMuYnl0ZXNSZWFkICs9IGJ1Zi5sZW5ndGhcblxuICAgIGlmIChyZXF1ZXN0Lm9uRGF0YShidWYpID09PSBmYWxzZSkge1xuICAgICAgcmV0dXJuIGNvbnN0YW50cy5FUlJPUi5QQVVTRURcbiAgICB9XG4gIH1cblxuICBvbk1lc3NhZ2VDb21wbGV0ZSAoKSB7XG4gICAgY29uc3QgeyBjbGllbnQsIHNvY2tldCwgc3RhdHVzQ29kZSwgdXBncmFkZSwgaGVhZGVycywgY29udGVudExlbmd0aCwgYnl0ZXNSZWFkLCBzaG91bGRLZWVwQWxpdmUgfSA9IHRoaXNcblxuICAgIGlmIChzb2NrZXQuZGVzdHJveWVkICYmICghc3RhdHVzQ29kZSB8fCBzaG91bGRLZWVwQWxpdmUpKSB7XG4gICAgICByZXR1cm4gLTFcbiAgICB9XG5cbiAgICBpZiAodXBncmFkZSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgYXNzZXJ0KHN0YXR1c0NvZGUgPj0gMTAwKVxuICAgIGFzc2VydCgodGhpcy5oZWFkZXJzLmxlbmd0aCAmIDEpID09PSAwKVxuXG4gICAgY29uc3QgcmVxdWVzdCA9IGNsaWVudFtrUXVldWVdW2NsaWVudFtrUnVubmluZ0lkeF1dXG4gICAgYXNzZXJ0KHJlcXVlc3QpXG5cbiAgICB0aGlzLnN0YXR1c0NvZGUgPSBudWxsXG4gICAgdGhpcy5zdGF0dXNUZXh0ID0gJydcbiAgICB0aGlzLmJ5dGVzUmVhZCA9IDBcbiAgICB0aGlzLmNvbnRlbnRMZW5ndGggPSAnJ1xuICAgIHRoaXMua2VlcEFsaXZlID0gJydcbiAgICB0aGlzLmNvbm5lY3Rpb24gPSAnJ1xuXG4gICAgdGhpcy5oZWFkZXJzID0gW11cbiAgICB0aGlzLmhlYWRlcnNTaXplID0gMFxuXG4gICAgaWYgKHN0YXR1c0NvZGUgPCAyMDApIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0OiBzaG91bGQgYmUgaGFuZGxlZCBieSBsbGh0dHA/ICovXG4gICAgaWYgKHJlcXVlc3QubWV0aG9kICE9PSAnSEVBRCcgJiYgY29udGVudExlbmd0aCAmJiBieXRlc1JlYWQgIT09IHBhcnNlSW50KGNvbnRlbnRMZW5ndGgsIDEwKSkge1xuICAgICAgdXRpbC5kZXN0cm95KHNvY2tldCwgbmV3IFJlc3BvbnNlQ29udGVudExlbmd0aE1pc21hdGNoRXJyb3IoKSlcbiAgICAgIHJldHVybiAtMVxuICAgIH1cblxuICAgIHJlcXVlc3Qub25Db21wbGV0ZShoZWFkZXJzKVxuXG4gICAgY2xpZW50W2tRdWV1ZV1bY2xpZW50W2tSdW5uaW5nSWR4XSsrXSA9IG51bGxcblxuICAgIGlmIChzb2NrZXRba1dyaXRpbmddKSB7XG4gICAgICBhc3NlcnQoY2xpZW50W2tSdW5uaW5nXSA9PT0gMClcbiAgICAgIC8vIFJlc3BvbnNlIGNvbXBsZXRlZCBiZWZvcmUgcmVxdWVzdC5cbiAgICAgIHV0aWwuZGVzdHJveShzb2NrZXQsIG5ldyBJbmZvcm1hdGlvbmFsRXJyb3IoJ3Jlc2V0JykpXG4gICAgICByZXR1cm4gY29uc3RhbnRzLkVSUk9SLlBBVVNFRFxuICAgIH0gZWxzZSBpZiAoIXNob3VsZEtlZXBBbGl2ZSkge1xuICAgICAgdXRpbC5kZXN0cm95KHNvY2tldCwgbmV3IEluZm9ybWF0aW9uYWxFcnJvcigncmVzZXQnKSlcbiAgICAgIHJldHVybiBjb25zdGFudHMuRVJST1IuUEFVU0VEXG4gICAgfSBlbHNlIGlmIChzb2NrZXRba1Jlc2V0XSAmJiBjbGllbnRba1J1bm5pbmddID09PSAwKSB7XG4gICAgICAvLyBEZXN0cm95IHNvY2tldCBvbmNlIGFsbCByZXF1ZXN0cyBoYXZlIGNvbXBsZXRlZC5cbiAgICAgIC8vIFRoZSByZXF1ZXN0IGF0IHRoZSB0YWlsIG9mIHRoZSBwaXBlbGluZSBpcyB0aGUgb25lXG4gICAgICAvLyB0aGF0IHJlcXVlc3RlZCByZXNldCBhbmQgbm8gZnVydGhlciByZXF1ZXN0cyBzaG91bGRcbiAgICAgIC8vIGhhdmUgYmVlbiBxdWV1ZWQgc2luY2UgdGhlbi5cbiAgICAgIHV0aWwuZGVzdHJveShzb2NrZXQsIG5ldyBJbmZvcm1hdGlvbmFsRXJyb3IoJ3Jlc2V0JykpXG4gICAgICByZXR1cm4gY29uc3RhbnRzLkVSUk9SLlBBVVNFRFxuICAgIH0gZWxzZSBpZiAoY2xpZW50W2tQaXBlbGluaW5nXSA9PSBudWxsIHx8IGNsaWVudFtrUGlwZWxpbmluZ10gPT09IDEpIHtcbiAgICAgIC8vIFdlIG11c3Qgd2FpdCBhIGZ1bGwgZXZlbnQgbG9vcCBjeWNsZSB0byByZXVzZSB0aGlzIHNvY2tldCB0byBtYWtlIHN1cmVcbiAgICAgIC8vIHRoYXQgbm9uLXNwZWMgY29tcGxpYW50IHNlcnZlcnMgYXJlIG5vdCBjbG9zaW5nIHRoZSBjb25uZWN0aW9uIGV2ZW4gaWYgdGhleVxuICAgICAgLy8gc2FpZCB0aGV5IHdvbid0LlxuICAgICAgc2V0SW1tZWRpYXRlKCgpID0+IGNsaWVudFtrUmVzdW1lXSgpKVxuICAgIH0gZWxzZSB7XG4gICAgICBjbGllbnRba1Jlc3VtZV0oKVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBvblBhcnNlclRpbWVvdXQgKHBhcnNlcikge1xuICBjb25zdCB7IHNvY2tldCwgdGltZW91dFR5cGUsIGNsaWVudCwgcGF1c2VkIH0gPSBwYXJzZXIuZGVyZWYoKVxuXG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlICovXG4gIGlmICh0aW1lb3V0VHlwZSA9PT0gVElNRU9VVF9IRUFERVJTKSB7XG4gICAgaWYgKCFzb2NrZXRba1dyaXRpbmddIHx8IHNvY2tldC53cml0YWJsZU5lZWREcmFpbiB8fCBjbGllbnRba1J1bm5pbmddID4gMSkge1xuICAgICAgYXNzZXJ0KCFwYXVzZWQsICdjYW5ub3QgYmUgcGF1c2VkIHdoaWxlIHdhaXRpbmcgZm9yIGhlYWRlcnMnKVxuICAgICAgdXRpbC5kZXN0cm95KHNvY2tldCwgbmV3IEhlYWRlcnNUaW1lb3V0RXJyb3IoKSlcbiAgICB9XG4gIH0gZWxzZSBpZiAodGltZW91dFR5cGUgPT09IFRJTUVPVVRfQk9EWSkge1xuICAgIGlmICghcGF1c2VkKSB7XG4gICAgICB1dGlsLmRlc3Ryb3koc29ja2V0LCBuZXcgQm9keVRpbWVvdXRFcnJvcigpKVxuICAgIH1cbiAgfSBlbHNlIGlmICh0aW1lb3V0VHlwZSA9PT0gVElNRU9VVF9LRUVQX0FMSVZFKSB7XG4gICAgYXNzZXJ0KGNsaWVudFtrUnVubmluZ10gPT09IDAgJiYgY2xpZW50W2tLZWVwQWxpdmVUaW1lb3V0VmFsdWVdKVxuICAgIHV0aWwuZGVzdHJveShzb2NrZXQsIG5ldyBJbmZvcm1hdGlvbmFsRXJyb3IoJ3NvY2tldCBpZGxlIHRpbWVvdXQnKSlcbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiBjb25uZWN0SDEgKGNsaWVudCwgc29ja2V0KSB7XG4gIGNsaWVudFtrU29ja2V0XSA9IHNvY2tldFxuXG4gIGlmICghbGxodHRwSW5zdGFuY2UpIHtcbiAgICBsbGh0dHBJbnN0YW5jZSA9IGF3YWl0IGxsaHR0cFByb21pc2VcbiAgICBsbGh0dHBQcm9taXNlID0gbnVsbFxuICB9XG5cbiAgc29ja2V0W2tOb1JlZl0gPSBmYWxzZVxuICBzb2NrZXRba1dyaXRpbmddID0gZmFsc2VcbiAgc29ja2V0W2tSZXNldF0gPSBmYWxzZVxuICBzb2NrZXRba0Jsb2NraW5nXSA9IGZhbHNlXG4gIHNvY2tldFtrUGFyc2VyXSA9IG5ldyBQYXJzZXIoY2xpZW50LCBzb2NrZXQsIGxsaHR0cEluc3RhbmNlKVxuXG4gIGFkZExpc3RlbmVyKHNvY2tldCwgJ2Vycm9yJywgZnVuY3Rpb24gKGVycikge1xuICAgIGFzc2VydChlcnIuY29kZSAhPT0gJ0VSUl9UTFNfQ0VSVF9BTFROQU1FX0lOVkFMSUQnKVxuXG4gICAgY29uc3QgcGFyc2VyID0gdGhpc1trUGFyc2VyXVxuXG4gICAgLy8gT24gTWFjIE9TLCB3ZSBnZXQgYW4gRUNPTk5SRVNFVCBldmVuIGlmIHRoZXJlIGlzIGEgZnVsbCBib2R5IHRvIGJlIGZvcndhcmRlZFxuICAgIC8vIHRvIHRoZSB1c2VyLlxuICAgIGlmIChlcnIuY29kZSA9PT0gJ0VDT05OUkVTRVQnICYmIHBhcnNlci5zdGF0dXNDb2RlICYmICFwYXJzZXIuc2hvdWxkS2VlcEFsaXZlKSB7XG4gICAgICAvLyBXZSB0cmVhdCBhbGwgaW5jb21pbmcgZGF0YSBzbyBmb3IgYXMgYSB2YWxpZCByZXNwb25zZS5cbiAgICAgIHBhcnNlci5vbk1lc3NhZ2VDb21wbGV0ZSgpXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICB0aGlzW2tFcnJvcl0gPSBlcnJcblxuICAgIHRoaXNba0NsaWVudF1ba09uRXJyb3JdKGVycilcbiAgfSlcbiAgYWRkTGlzdGVuZXIoc29ja2V0LCAncmVhZGFibGUnLCBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgcGFyc2VyID0gdGhpc1trUGFyc2VyXVxuXG4gICAgaWYgKHBhcnNlcikge1xuICAgICAgcGFyc2VyLnJlYWRNb3JlKClcbiAgICB9XG4gIH0pXG4gIGFkZExpc3RlbmVyKHNvY2tldCwgJ2VuZCcsIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCBwYXJzZXIgPSB0aGlzW2tQYXJzZXJdXG5cbiAgICBpZiAocGFyc2VyLnN0YXR1c0NvZGUgJiYgIXBhcnNlci5zaG91bGRLZWVwQWxpdmUpIHtcbiAgICAgIC8vIFdlIHRyZWF0IGFsbCBpbmNvbWluZyBkYXRhIHNvIGZhciBhcyBhIHZhbGlkIHJlc3BvbnNlLlxuICAgICAgcGFyc2VyLm9uTWVzc2FnZUNvbXBsZXRlKClcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIHV0aWwuZGVzdHJveSh0aGlzLCBuZXcgU29ja2V0RXJyb3IoJ290aGVyIHNpZGUgY2xvc2VkJywgdXRpbC5nZXRTb2NrZXRJbmZvKHRoaXMpKSlcbiAgfSlcbiAgYWRkTGlzdGVuZXIoc29ja2V0LCAnY2xvc2UnLCBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgY2xpZW50ID0gdGhpc1trQ2xpZW50XVxuICAgIGNvbnN0IHBhcnNlciA9IHRoaXNba1BhcnNlcl1cblxuICAgIGlmIChwYXJzZXIpIHtcbiAgICAgIGlmICghdGhpc1trRXJyb3JdICYmIHBhcnNlci5zdGF0dXNDb2RlICYmICFwYXJzZXIuc2hvdWxkS2VlcEFsaXZlKSB7XG4gICAgICAgIC8vIFdlIHRyZWF0IGFsbCBpbmNvbWluZyBkYXRhIHNvIGZhciBhcyBhIHZhbGlkIHJlc3BvbnNlLlxuICAgICAgICBwYXJzZXIub25NZXNzYWdlQ29tcGxldGUoKVxuICAgICAgfVxuXG4gICAgICB0aGlzW2tQYXJzZXJdLmRlc3Ryb3koKVxuICAgICAgdGhpc1trUGFyc2VyXSA9IG51bGxcbiAgICB9XG5cbiAgICBjb25zdCBlcnIgPSB0aGlzW2tFcnJvcl0gfHwgbmV3IFNvY2tldEVycm9yKCdjbG9zZWQnLCB1dGlsLmdldFNvY2tldEluZm8odGhpcykpXG5cbiAgICBjbGllbnRba1NvY2tldF0gPSBudWxsXG4gICAgY2xpZW50W2tIVFRQQ29udGV4dF0gPSBudWxsIC8vIFRPRE8gKGZpeCk6IFRoaXMgaXMgaGFja3kuLi5cblxuICAgIGlmIChjbGllbnQuZGVzdHJveWVkKSB7XG4gICAgICBhc3NlcnQoY2xpZW50W2tQZW5kaW5nXSA9PT0gMClcblxuICAgICAgLy8gRmFpbCBlbnRpcmUgcXVldWUuXG4gICAgICBjb25zdCByZXF1ZXN0cyA9IGNsaWVudFtrUXVldWVdLnNwbGljZShjbGllbnRba1J1bm5pbmdJZHhdKVxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCByZXF1ZXN0cy5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCByZXF1ZXN0ID0gcmVxdWVzdHNbaV1cbiAgICAgICAgdXRpbC5lcnJvclJlcXVlc3QoY2xpZW50LCByZXF1ZXN0LCBlcnIpXG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChjbGllbnRba1J1bm5pbmddID4gMCAmJiBlcnIuY29kZSAhPT0gJ1VORF9FUlJfSU5GTycpIHtcbiAgICAgIC8vIEZhaWwgaGVhZCBvZiBwaXBlbGluZS5cbiAgICAgIGNvbnN0IHJlcXVlc3QgPSBjbGllbnRba1F1ZXVlXVtjbGllbnRba1J1bm5pbmdJZHhdXVxuICAgICAgY2xpZW50W2tRdWV1ZV1bY2xpZW50W2tSdW5uaW5nSWR4XSsrXSA9IG51bGxcblxuICAgICAgdXRpbC5lcnJvclJlcXVlc3QoY2xpZW50LCByZXF1ZXN0LCBlcnIpXG4gICAgfVxuXG4gICAgY2xpZW50W2tQZW5kaW5nSWR4XSA9IGNsaWVudFtrUnVubmluZ0lkeF1cblxuICAgIGFzc2VydChjbGllbnRba1J1bm5pbmddID09PSAwKVxuXG4gICAgY2xpZW50LmVtaXQoJ2Rpc2Nvbm5lY3QnLCBjbGllbnRba1VybF0sIFtjbGllbnRdLCBlcnIpXG5cbiAgICBjbGllbnRba1Jlc3VtZV0oKVxuICB9KVxuXG4gIGxldCBjbG9zZWQgPSBmYWxzZVxuICBzb2NrZXQub24oJ2Nsb3NlJywgKCkgPT4ge1xuICAgIGNsb3NlZCA9IHRydWVcbiAgfSlcblxuICByZXR1cm4ge1xuICAgIHZlcnNpb246ICdoMScsXG4gICAgZGVmYXVsdFBpcGVsaW5pbmc6IDEsXG4gICAgd3JpdGUgKC4uLmFyZ3MpIHtcbiAgICAgIHJldHVybiB3cml0ZUgxKGNsaWVudCwgLi4uYXJncylcbiAgICB9LFxuICAgIHJlc3VtZSAoKSB7XG4gICAgICByZXN1bWVIMShjbGllbnQpXG4gICAgfSxcbiAgICBkZXN0cm95IChlcnIsIGNhbGxiYWNrKSB7XG4gICAgICBpZiAoY2xvc2VkKSB7XG4gICAgICAgIHF1ZXVlTWljcm90YXNrKGNhbGxiYWNrKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc29ja2V0LmRlc3Ryb3koZXJyKS5vbignY2xvc2UnLCBjYWxsYmFjaylcbiAgICAgIH1cbiAgICB9LFxuICAgIGdldCBkZXN0cm95ZWQgKCkge1xuICAgICAgcmV0dXJuIHNvY2tldC5kZXN0cm95ZWRcbiAgICB9LFxuICAgIGJ1c3kgKHJlcXVlc3QpIHtcbiAgICAgIGlmIChzb2NrZXRba1dyaXRpbmddIHx8IHNvY2tldFtrUmVzZXRdIHx8IHNvY2tldFtrQmxvY2tpbmddKSB7XG4gICAgICAgIHJldHVybiB0cnVlXG4gICAgICB9XG5cbiAgICAgIGlmIChyZXF1ZXN0KSB7XG4gICAgICAgIGlmIChjbGllbnRba1J1bm5pbmddID4gMCAmJiAhcmVxdWVzdC5pZGVtcG90ZW50KSB7XG4gICAgICAgICAgLy8gTm9uLWlkZW1wb3RlbnQgcmVxdWVzdCBjYW5ub3QgYmUgcmV0cmllZC5cbiAgICAgICAgICAvLyBFbnN1cmUgdGhhdCBubyBvdGhlciByZXF1ZXN0cyBhcmUgaW5mbGlnaHQgYW5kXG4gICAgICAgICAgLy8gY291bGQgY2F1c2UgZmFpbHVyZS5cbiAgICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNsaWVudFtrUnVubmluZ10gPiAwICYmIChyZXF1ZXN0LnVwZ3JhZGUgfHwgcmVxdWVzdC5tZXRob2QgPT09ICdDT05ORUNUJykpIHtcbiAgICAgICAgICAvLyBEb24ndCBkaXNwYXRjaCBhbiB1cGdyYWRlIHVudGlsIGFsbCBwcmVjZWRpbmcgcmVxdWVzdHMgaGF2ZSBjb21wbGV0ZWQuXG4gICAgICAgICAgLy8gQSBtaXNiZWhhdmluZyBzZXJ2ZXIgbWlnaHQgdXBncmFkZSB0aGUgY29ubmVjdGlvbiBiZWZvcmUgYWxsIHBpcGVsaW5lZFxuICAgICAgICAgIC8vIHJlcXVlc3QgaGFzIGNvbXBsZXRlZC5cbiAgICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNsaWVudFtrUnVubmluZ10gPiAwICYmIHV0aWwuYm9keUxlbmd0aChyZXF1ZXN0LmJvZHkpICE9PSAwICYmXG4gICAgICAgICAgKHV0aWwuaXNTdHJlYW0ocmVxdWVzdC5ib2R5KSB8fCB1dGlsLmlzQXN5bmNJdGVyYWJsZShyZXF1ZXN0LmJvZHkpIHx8IHV0aWwuaXNGb3JtRGF0YUxpa2UocmVxdWVzdC5ib2R5KSkpIHtcbiAgICAgICAgICAvLyBSZXF1ZXN0IHdpdGggc3RyZWFtIG9yIGl0ZXJhdG9yIGJvZHkgY2FuIGVycm9yIHdoaWxlIG90aGVyIHJlcXVlc3RzXG4gICAgICAgICAgLy8gYXJlIGluZmxpZ2h0IGFuZCBpbmRpcmVjdGx5IGVycm9yIHRob3NlIGFzIHdlbGwuXG4gICAgICAgICAgLy8gRW5zdXJlIHRoaXMgZG9lc24ndCBoYXBwZW4gYnkgd2FpdGluZyBmb3IgaW5mbGlnaHRcbiAgICAgICAgICAvLyB0byBjb21wbGV0ZSBiZWZvcmUgZGlzcGF0Y2hpbmcuXG5cbiAgICAgICAgICAvLyBSZXF1ZXN0IHdpdGggc3RyZWFtIG9yIGl0ZXJhdG9yIGJvZHkgY2Fubm90IGJlIHJldHJpZWQuXG4gICAgICAgICAgLy8gRW5zdXJlIHRoYXQgbm8gb3RoZXIgcmVxdWVzdHMgYXJlIGluZmxpZ2h0IGFuZFxuICAgICAgICAgIC8vIGNvdWxkIGNhdXNlIGZhaWx1cmUuXG4gICAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gcmVzdW1lSDEgKGNsaWVudCkge1xuICBjb25zdCBzb2NrZXQgPSBjbGllbnRba1NvY2tldF1cblxuICBpZiAoc29ja2V0ICYmICFzb2NrZXQuZGVzdHJveWVkKSB7XG4gICAgaWYgKGNsaWVudFtrU2l6ZV0gPT09IDApIHtcbiAgICAgIGlmICghc29ja2V0W2tOb1JlZl0gJiYgc29ja2V0LnVucmVmKSB7XG4gICAgICAgIHNvY2tldC51bnJlZigpXG4gICAgICAgIHNvY2tldFtrTm9SZWZdID0gdHJ1ZVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoc29ja2V0W2tOb1JlZl0gJiYgc29ja2V0LnJlZikge1xuICAgICAgc29ja2V0LnJlZigpXG4gICAgICBzb2NrZXRba05vUmVmXSA9IGZhbHNlXG4gICAgfVxuXG4gICAgaWYgKGNsaWVudFtrU2l6ZV0gPT09IDApIHtcbiAgICAgIGlmIChzb2NrZXRba1BhcnNlcl0udGltZW91dFR5cGUgIT09IFRJTUVPVVRfS0VFUF9BTElWRSkge1xuICAgICAgICBzb2NrZXRba1BhcnNlcl0uc2V0VGltZW91dChjbGllbnRba0tlZXBBbGl2ZVRpbWVvdXRWYWx1ZV0sIFRJTUVPVVRfS0VFUF9BTElWRSlcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGNsaWVudFtrUnVubmluZ10gPiAwICYmIHNvY2tldFtrUGFyc2VyXS5zdGF0dXNDb2RlIDwgMjAwKSB7XG4gICAgICBpZiAoc29ja2V0W2tQYXJzZXJdLnRpbWVvdXRUeXBlICE9PSBUSU1FT1VUX0hFQURFUlMpIHtcbiAgICAgICAgY29uc3QgcmVxdWVzdCA9IGNsaWVudFtrUXVldWVdW2NsaWVudFtrUnVubmluZ0lkeF1dXG4gICAgICAgIGNvbnN0IGhlYWRlcnNUaW1lb3V0ID0gcmVxdWVzdC5oZWFkZXJzVGltZW91dCAhPSBudWxsXG4gICAgICAgICAgPyByZXF1ZXN0LmhlYWRlcnNUaW1lb3V0XG4gICAgICAgICAgOiBjbGllbnRba0hlYWRlcnNUaW1lb3V0XVxuICAgICAgICBzb2NrZXRba1BhcnNlcl0uc2V0VGltZW91dChoZWFkZXJzVGltZW91dCwgVElNRU9VVF9IRUFERVJTKVxuICAgICAgfVxuICAgIH1cbiAgfVxufVxuXG4vLyBodHRwczovL3d3dy5yZmMtZWRpdG9yLm9yZy9yZmMvcmZjNzIzMCNzZWN0aW9uLTMuMy4yXG5mdW5jdGlvbiBzaG91bGRTZW5kQ29udGVudExlbmd0aCAobWV0aG9kKSB7XG4gIHJldHVybiBtZXRob2QgIT09ICdHRVQnICYmIG1ldGhvZCAhPT0gJ0hFQUQnICYmIG1ldGhvZCAhPT0gJ09QVElPTlMnICYmIG1ldGhvZCAhPT0gJ1RSQUNFJyAmJiBtZXRob2QgIT09ICdDT05ORUNUJ1xufVxuXG5mdW5jdGlvbiB3cml0ZUgxIChjbGllbnQsIHJlcXVlc3QpIHtcbiAgY29uc3QgeyBtZXRob2QsIHBhdGgsIGhvc3QsIHVwZ3JhZGUsIGJsb2NraW5nLCByZXNldCB9ID0gcmVxdWVzdFxuXG4gIGxldCB7IGJvZHksIGhlYWRlcnMsIGNvbnRlbnRMZW5ndGggfSA9IHJlcXVlc3RcblxuICAvLyBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNzIzMSNzZWN0aW9uLTQuMy4xXG4gIC8vIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM3MjMxI3NlY3Rpb24tNC4zLjJcbiAgLy8gaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzcyMzEjc2VjdGlvbi00LjMuNVxuXG4gIC8vIFNlbmRpbmcgYSBwYXlsb2FkIGJvZHkgb24gYSByZXF1ZXN0IHRoYXQgZG9lcyBub3RcbiAgLy8gZXhwZWN0IGl0IGNhbiBjYXVzZSB1bmRlZmluZWQgYmVoYXZpb3Igb24gc29tZVxuICAvLyBzZXJ2ZXJzIGFuZCBjb3JydXB0IGNvbm5lY3Rpb24gc3RhdGUuIERvIG5vdFxuICAvLyByZS11c2UgdGhlIGNvbm5lY3Rpb24gZm9yIGZ1cnRoZXIgcmVxdWVzdHMuXG5cbiAgY29uc3QgZXhwZWN0c1BheWxvYWQgPSAoXG4gICAgbWV0aG9kID09PSAnUFVUJyB8fFxuICAgIG1ldGhvZCA9PT0gJ1BPU1QnIHx8XG4gICAgbWV0aG9kID09PSAnUEFUQ0gnIHx8XG4gICAgbWV0aG9kID09PSAnUVVFUlknIHx8XG4gICAgbWV0aG9kID09PSAnUFJPUEZJTkQnIHx8XG4gICAgbWV0aG9kID09PSAnUFJPUFBBVENIJ1xuICApXG5cbiAgaWYgKHV0aWwuaXNGb3JtRGF0YUxpa2UoYm9keSkpIHtcbiAgICBpZiAoIWV4dHJhY3RCb2R5KSB7XG4gICAgICBleHRyYWN0Qm9keSA9IHJlcXVpcmUoJy4uL3dlYi9mZXRjaC9ib2R5LmpzJykuZXh0cmFjdEJvZHlcbiAgICB9XG5cbiAgICBjb25zdCBbYm9keVN0cmVhbSwgY29udGVudFR5cGVdID0gZXh0cmFjdEJvZHkoYm9keSlcbiAgICBpZiAocmVxdWVzdC5jb250ZW50VHlwZSA9PSBudWxsKSB7XG4gICAgICBoZWFkZXJzLnB1c2goJ2NvbnRlbnQtdHlwZScsIGNvbnRlbnRUeXBlKVxuICAgIH1cbiAgICBib2R5ID0gYm9keVN0cmVhbS5zdHJlYW1cbiAgICBjb250ZW50TGVuZ3RoID0gYm9keVN0cmVhbS5sZW5ndGhcbiAgfSBlbHNlIGlmICh1dGlsLmlzQmxvYkxpa2UoYm9keSkgJiYgcmVxdWVzdC5jb250ZW50VHlwZSA9PSBudWxsICYmIGJvZHkudHlwZSkge1xuICAgIGhlYWRlcnMucHVzaCgnY29udGVudC10eXBlJywgYm9keS50eXBlKVxuICB9XG5cbiAgaWYgKGJvZHkgJiYgdHlwZW9mIGJvZHkucmVhZCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIC8vIFRyeSB0byByZWFkIEVPRiBpbiBvcmRlciB0byBnZXQgbGVuZ3RoLlxuICAgIGJvZHkucmVhZCgwKVxuICB9XG5cbiAgY29uc3QgYm9keUxlbmd0aCA9IHV0aWwuYm9keUxlbmd0aChib2R5KVxuXG4gIGNvbnRlbnRMZW5ndGggPSBib2R5TGVuZ3RoID8/IGNvbnRlbnRMZW5ndGhcblxuICBpZiAoY29udGVudExlbmd0aCA9PT0gbnVsbCkge1xuICAgIGNvbnRlbnRMZW5ndGggPSByZXF1ZXN0LmNvbnRlbnRMZW5ndGhcbiAgfVxuXG4gIGlmIChjb250ZW50TGVuZ3RoID09PSAwICYmICFleHBlY3RzUGF5bG9hZCkge1xuICAgIC8vIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM3MjMwI3NlY3Rpb24tMy4zLjJcbiAgICAvLyBBIHVzZXIgYWdlbnQgU0hPVUxEIE5PVCBzZW5kIGEgQ29udGVudC1MZW5ndGggaGVhZGVyIGZpZWxkIHdoZW5cbiAgICAvLyB0aGUgcmVxdWVzdCBtZXNzYWdlIGRvZXMgbm90IGNvbnRhaW4gYSBwYXlsb2FkIGJvZHkgYW5kIHRoZSBtZXRob2RcbiAgICAvLyBzZW1hbnRpY3MgZG8gbm90IGFudGljaXBhdGUgc3VjaCBhIGJvZHkuXG5cbiAgICBjb250ZW50TGVuZ3RoID0gbnVsbFxuICB9XG5cbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy91bmRpY2kvaXNzdWVzLzIwNDZcbiAgLy8gQSB1c2VyIGFnZW50IG1heSBzZW5kIGEgQ29udGVudC1MZW5ndGggaGVhZGVyIHdpdGggMCB2YWx1ZSwgdGhpcyBzaG91bGQgYmUgYWxsb3dlZC5cbiAgaWYgKHNob3VsZFNlbmRDb250ZW50TGVuZ3RoKG1ldGhvZCkgJiYgY29udGVudExlbmd0aCA+IDAgJiYgcmVxdWVzdC5jb250ZW50TGVuZ3RoICE9PSBudWxsICYmIHJlcXVlc3QuY29udGVudExlbmd0aCAhPT0gY29udGVudExlbmd0aCkge1xuICAgIGlmIChjbGllbnRba1N0cmljdENvbnRlbnRMZW5ndGhdKSB7XG4gICAgICB1dGlsLmVycm9yUmVxdWVzdChjbGllbnQsIHJlcXVlc3QsIG5ldyBSZXF1ZXN0Q29udGVudExlbmd0aE1pc21hdGNoRXJyb3IoKSlcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cblxuICAgIHByb2Nlc3MuZW1pdFdhcm5pbmcobmV3IFJlcXVlc3RDb250ZW50TGVuZ3RoTWlzbWF0Y2hFcnJvcigpKVxuICB9XG5cbiAgY29uc3Qgc29ja2V0ID0gY2xpZW50W2tTb2NrZXRdXG5cbiAgY29uc3QgYWJvcnQgPSAoZXJyKSA9PiB7XG4gICAgaWYgKHJlcXVlc3QuYWJvcnRlZCB8fCByZXF1ZXN0LmNvbXBsZXRlZCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgdXRpbC5lcnJvclJlcXVlc3QoY2xpZW50LCByZXF1ZXN0LCBlcnIgfHwgbmV3IFJlcXVlc3RBYm9ydGVkRXJyb3IoKSlcblxuICAgIHV0aWwuZGVzdHJveShib2R5KVxuICAgIHV0aWwuZGVzdHJveShzb2NrZXQsIG5ldyBJbmZvcm1hdGlvbmFsRXJyb3IoJ2Fib3J0ZWQnKSlcbiAgfVxuXG4gIHRyeSB7XG4gICAgcmVxdWVzdC5vbkNvbm5lY3QoYWJvcnQpXG4gIH0gY2F0Y2ggKGVycikge1xuICAgIHV0aWwuZXJyb3JSZXF1ZXN0KGNsaWVudCwgcmVxdWVzdCwgZXJyKVxuICB9XG5cbiAgaWYgKHJlcXVlc3QuYWJvcnRlZCkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgaWYgKG1ldGhvZCA9PT0gJ0hFQUQnKSB7XG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL21jb2xsaW5hL3VuZGljaS9pc3N1ZXMvMjU4XG4gICAgLy8gQ2xvc2UgYWZ0ZXIgYSBIRUFEIHJlcXVlc3QgdG8gaW50ZXJvcCB3aXRoIG1pc2JlaGF2aW5nIHNlcnZlcnNcbiAgICAvLyB0aGF0IG1heSBzZW5kIGEgYm9keSBpbiB0aGUgcmVzcG9uc2UuXG5cbiAgICBzb2NrZXRba1Jlc2V0XSA9IHRydWVcbiAgfVxuXG4gIGlmICh1cGdyYWRlIHx8IG1ldGhvZCA9PT0gJ0NPTk5FQ1QnKSB7XG4gICAgLy8gT24gQ09OTkVDVCBvciB1cGdyYWRlLCBibG9jayBwaXBlbGluZSBmcm9tIGRpc3BhdGNoaW5nIGZ1cnRoZXJcbiAgICAvLyByZXF1ZXN0cyBvbiB0aGlzIGNvbm5lY3Rpb24uXG5cbiAgICBzb2NrZXRba1Jlc2V0XSA9IHRydWVcbiAgfVxuXG4gIGlmIChyZXNldCAhPSBudWxsKSB7XG4gICAgc29ja2V0W2tSZXNldF0gPSByZXNldFxuICB9XG5cbiAgaWYgKGNsaWVudFtrTWF4UmVxdWVzdHNdICYmIHNvY2tldFtrQ291bnRlcl0rKyA+PSBjbGllbnRba01heFJlcXVlc3RzXSkge1xuICAgIHNvY2tldFtrUmVzZXRdID0gdHJ1ZVxuICB9XG5cbiAgaWYgKGJsb2NraW5nKSB7XG4gICAgc29ja2V0W2tCbG9ja2luZ10gPSB0cnVlXG4gIH1cblxuICBsZXQgaGVhZGVyID0gYCR7bWV0aG9kfSAke3BhdGh9IEhUVFAvMS4xXFxyXFxuYFxuXG4gIGlmICh0eXBlb2YgaG9zdCA9PT0gJ3N0cmluZycpIHtcbiAgICBoZWFkZXIgKz0gYGhvc3Q6ICR7aG9zdH1cXHJcXG5gXG4gIH0gZWxzZSB7XG4gICAgaGVhZGVyICs9IGNsaWVudFtrSG9zdEhlYWRlcl1cbiAgfVxuXG4gIGlmICh1cGdyYWRlKSB7XG4gICAgaGVhZGVyICs9IGBjb25uZWN0aW9uOiB1cGdyYWRlXFxyXFxudXBncmFkZTogJHt1cGdyYWRlfVxcclxcbmBcbiAgfSBlbHNlIGlmIChjbGllbnRba1BpcGVsaW5pbmddICYmICFzb2NrZXRba1Jlc2V0XSkge1xuICAgIGhlYWRlciArPSAnY29ubmVjdGlvbjoga2VlcC1hbGl2ZVxcclxcbidcbiAgfSBlbHNlIHtcbiAgICBoZWFkZXIgKz0gJ2Nvbm5lY3Rpb246IGNsb3NlXFxyXFxuJ1xuICB9XG5cbiAgaWYgKEFycmF5LmlzQXJyYXkoaGVhZGVycykpIHtcbiAgICBmb3IgKGxldCBuID0gMDsgbiA8IGhlYWRlcnMubGVuZ3RoOyBuICs9IDIpIHtcbiAgICAgIGNvbnN0IGtleSA9IGhlYWRlcnNbbiArIDBdXG4gICAgICBjb25zdCB2YWwgPSBoZWFkZXJzW24gKyAxXVxuXG4gICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWwpKSB7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdmFsLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgaGVhZGVyICs9IGAke2tleX06ICR7dmFsW2ldfVxcclxcbmBcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaGVhZGVyICs9IGAke2tleX06ICR7dmFsfVxcclxcbmBcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpZiAoY2hhbm5lbHMuc2VuZEhlYWRlcnMuaGFzU3Vic2NyaWJlcnMpIHtcbiAgICBjaGFubmVscy5zZW5kSGVhZGVycy5wdWJsaXNoKHsgcmVxdWVzdCwgaGVhZGVyczogaGVhZGVyLCBzb2NrZXQgfSlcbiAgfVxuXG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlOiBhc3NlcnRpb24gKi9cbiAgaWYgKCFib2R5IHx8IGJvZHlMZW5ndGggPT09IDApIHtcbiAgICB3cml0ZUJ1ZmZlcihhYm9ydCwgbnVsbCwgY2xpZW50LCByZXF1ZXN0LCBzb2NrZXQsIGNvbnRlbnRMZW5ndGgsIGhlYWRlciwgZXhwZWN0c1BheWxvYWQpXG4gIH0gZWxzZSBpZiAodXRpbC5pc0J1ZmZlcihib2R5KSkge1xuICAgIHdyaXRlQnVmZmVyKGFib3J0LCBib2R5LCBjbGllbnQsIHJlcXVlc3QsIHNvY2tldCwgY29udGVudExlbmd0aCwgaGVhZGVyLCBleHBlY3RzUGF5bG9hZClcbiAgfSBlbHNlIGlmICh1dGlsLmlzQmxvYkxpa2UoYm9keSkpIHtcbiAgICBpZiAodHlwZW9mIGJvZHkuc3RyZWFtID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB3cml0ZUl0ZXJhYmxlKGFib3J0LCBib2R5LnN0cmVhbSgpLCBjbGllbnQsIHJlcXVlc3QsIHNvY2tldCwgY29udGVudExlbmd0aCwgaGVhZGVyLCBleHBlY3RzUGF5bG9hZClcbiAgICB9IGVsc2Uge1xuICAgICAgd3JpdGVCbG9iKGFib3J0LCBib2R5LCBjbGllbnQsIHJlcXVlc3QsIHNvY2tldCwgY29udGVudExlbmd0aCwgaGVhZGVyLCBleHBlY3RzUGF5bG9hZClcbiAgICB9XG4gIH0gZWxzZSBpZiAodXRpbC5pc1N0cmVhbShib2R5KSkge1xuICAgIHdyaXRlU3RyZWFtKGFib3J0LCBib2R5LCBjbGllbnQsIHJlcXVlc3QsIHNvY2tldCwgY29udGVudExlbmd0aCwgaGVhZGVyLCBleHBlY3RzUGF5bG9hZClcbiAgfSBlbHNlIGlmICh1dGlsLmlzSXRlcmFibGUoYm9keSkpIHtcbiAgICB3cml0ZUl0ZXJhYmxlKGFib3J0LCBib2R5LCBjbGllbnQsIHJlcXVlc3QsIHNvY2tldCwgY29udGVudExlbmd0aCwgaGVhZGVyLCBleHBlY3RzUGF5bG9hZClcbiAgfSBlbHNlIHtcbiAgICBhc3NlcnQoZmFsc2UpXG4gIH1cblxuICByZXR1cm4gdHJ1ZVxufVxuXG5mdW5jdGlvbiB3cml0ZVN0cmVhbSAoYWJvcnQsIGJvZHksIGNsaWVudCwgcmVxdWVzdCwgc29ja2V0LCBjb250ZW50TGVuZ3RoLCBoZWFkZXIsIGV4cGVjdHNQYXlsb2FkKSB7XG4gIGFzc2VydChjb250ZW50TGVuZ3RoICE9PSAwIHx8IGNsaWVudFtrUnVubmluZ10gPT09IDAsICdzdHJlYW0gYm9keSBjYW5ub3QgYmUgcGlwZWxpbmVkJylcblxuICBsZXQgZmluaXNoZWQgPSBmYWxzZVxuXG4gIGNvbnN0IHdyaXRlciA9IG5ldyBBc3luY1dyaXRlcih7IGFib3J0LCBzb2NrZXQsIHJlcXVlc3QsIGNvbnRlbnRMZW5ndGgsIGNsaWVudCwgZXhwZWN0c1BheWxvYWQsIGhlYWRlciB9KVxuXG4gIGNvbnN0IG9uRGF0YSA9IGZ1bmN0aW9uIChjaHVuaykge1xuICAgIGlmIChmaW5pc2hlZCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIGlmICghd3JpdGVyLndyaXRlKGNodW5rKSAmJiB0aGlzLnBhdXNlKSB7XG4gICAgICAgIHRoaXMucGF1c2UoKVxuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgdXRpbC5kZXN0cm95KHRoaXMsIGVycilcbiAgICB9XG4gIH1cbiAgY29uc3Qgb25EcmFpbiA9IGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoZmluaXNoZWQpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGlmIChib2R5LnJlc3VtZSkge1xuICAgICAgYm9keS5yZXN1bWUoKVxuICAgIH1cbiAgfVxuICBjb25zdCBvbkNsb3NlID0gZnVuY3Rpb24gKCkge1xuICAgIC8vICdjbG9zZScgbWlnaHQgYmUgZW1pdHRlZCAqYmVmb3JlKiAnZXJyb3InIGZvclxuICAgIC8vIGJyb2tlbiBzdHJlYW1zLiBXYWl0IGEgdGljayB0byBhdm9pZCB0aGlzIGNhc2UuXG4gICAgcXVldWVNaWNyb3Rhc2soKCkgPT4ge1xuICAgICAgLy8gSXQncyBvbmx5IHNhZmUgdG8gcmVtb3ZlICdlcnJvcicgbGlzdGVuZXIgYWZ0ZXJcbiAgICAgIC8vICdjbG9zZScuXG4gICAgICBib2R5LnJlbW92ZUxpc3RlbmVyKCdlcnJvcicsIG9uRmluaXNoZWQpXG4gICAgfSlcblxuICAgIGlmICghZmluaXNoZWQpIHtcbiAgICAgIGNvbnN0IGVyciA9IG5ldyBSZXF1ZXN0QWJvcnRlZEVycm9yKClcbiAgICAgIHF1ZXVlTWljcm90YXNrKCgpID0+IG9uRmluaXNoZWQoZXJyKSlcbiAgICB9XG4gIH1cbiAgY29uc3Qgb25GaW5pc2hlZCA9IGZ1bmN0aW9uIChlcnIpIHtcbiAgICBpZiAoZmluaXNoZWQpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGZpbmlzaGVkID0gdHJ1ZVxuXG4gICAgYXNzZXJ0KHNvY2tldC5kZXN0cm95ZWQgfHwgKHNvY2tldFtrV3JpdGluZ10gJiYgY2xpZW50W2tSdW5uaW5nXSA8PSAxKSlcblxuICAgIHNvY2tldFxuICAgICAgLm9mZignZHJhaW4nLCBvbkRyYWluKVxuICAgICAgLm9mZignZXJyb3InLCBvbkZpbmlzaGVkKVxuXG4gICAgYm9keVxuICAgICAgLnJlbW92ZUxpc3RlbmVyKCdkYXRhJywgb25EYXRhKVxuICAgICAgLnJlbW92ZUxpc3RlbmVyKCdlbmQnLCBvbkZpbmlzaGVkKVxuICAgICAgLnJlbW92ZUxpc3RlbmVyKCdjbG9zZScsIG9uQ2xvc2UpXG5cbiAgICBpZiAoIWVycikge1xuICAgICAgdHJ5IHtcbiAgICAgICAgd3JpdGVyLmVuZCgpXG4gICAgICB9IGNhdGNoIChlcikge1xuICAgICAgICBlcnIgPSBlclxuICAgICAgfVxuICAgIH1cblxuICAgIHdyaXRlci5kZXN0cm95KGVycilcblxuICAgIGlmIChlcnIgJiYgKGVyci5jb2RlICE9PSAnVU5EX0VSUl9JTkZPJyB8fCBlcnIubWVzc2FnZSAhPT0gJ3Jlc2V0JykpIHtcbiAgICAgIHV0aWwuZGVzdHJveShib2R5LCBlcnIpXG4gICAgfSBlbHNlIHtcbiAgICAgIHV0aWwuZGVzdHJveShib2R5KVxuICAgIH1cbiAgfVxuXG4gIGJvZHlcbiAgICAub24oJ2RhdGEnLCBvbkRhdGEpXG4gICAgLm9uKCdlbmQnLCBvbkZpbmlzaGVkKVxuICAgIC5vbignZXJyb3InLCBvbkZpbmlzaGVkKVxuICAgIC5vbignY2xvc2UnLCBvbkNsb3NlKVxuXG4gIGlmIChib2R5LnJlc3VtZSkge1xuICAgIGJvZHkucmVzdW1lKClcbiAgfVxuXG4gIHNvY2tldFxuICAgIC5vbignZHJhaW4nLCBvbkRyYWluKVxuICAgIC5vbignZXJyb3InLCBvbkZpbmlzaGVkKVxuXG4gIGlmIChib2R5LmVycm9yRW1pdHRlZCA/PyBib2R5LmVycm9yZWQpIHtcbiAgICBzZXRJbW1lZGlhdGUoKCkgPT4gb25GaW5pc2hlZChib2R5LmVycm9yZWQpKVxuICB9IGVsc2UgaWYgKGJvZHkuZW5kRW1pdHRlZCA/PyBib2R5LnJlYWRhYmxlRW5kZWQpIHtcbiAgICBzZXRJbW1lZGlhdGUoKCkgPT4gb25GaW5pc2hlZChudWxsKSlcbiAgfVxuXG4gIGlmIChib2R5LmNsb3NlRW1pdHRlZCA/PyBib2R5LmNsb3NlZCkge1xuICAgIHNldEltbWVkaWF0ZShvbkNsb3NlKVxuICB9XG59XG5cbmZ1bmN0aW9uIHdyaXRlQnVmZmVyIChhYm9ydCwgYm9keSwgY2xpZW50LCByZXF1ZXN0LCBzb2NrZXQsIGNvbnRlbnRMZW5ndGgsIGhlYWRlciwgZXhwZWN0c1BheWxvYWQpIHtcbiAgdHJ5IHtcbiAgICBpZiAoIWJvZHkpIHtcbiAgICAgIGlmIChjb250ZW50TGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHNvY2tldC53cml0ZShgJHtoZWFkZXJ9Y29udGVudC1sZW5ndGg6IDBcXHJcXG5cXHJcXG5gLCAnbGF0aW4xJylcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGFzc2VydChjb250ZW50TGVuZ3RoID09PSBudWxsLCAnbm8gYm9keSBtdXN0IG5vdCBoYXZlIGNvbnRlbnQgbGVuZ3RoJylcbiAgICAgICAgc29ja2V0LndyaXRlKGAke2hlYWRlcn1cXHJcXG5gLCAnbGF0aW4xJylcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHV0aWwuaXNCdWZmZXIoYm9keSkpIHtcbiAgICAgIGFzc2VydChjb250ZW50TGVuZ3RoID09PSBib2R5LmJ5dGVMZW5ndGgsICdidWZmZXIgYm9keSBtdXN0IGhhdmUgY29udGVudCBsZW5ndGgnKVxuXG4gICAgICBzb2NrZXQuY29yaygpXG4gICAgICBzb2NrZXQud3JpdGUoYCR7aGVhZGVyfWNvbnRlbnQtbGVuZ3RoOiAke2NvbnRlbnRMZW5ndGh9XFxyXFxuXFxyXFxuYCwgJ2xhdGluMScpXG4gICAgICBzb2NrZXQud3JpdGUoYm9keSlcbiAgICAgIHNvY2tldC51bmNvcmsoKVxuICAgICAgcmVxdWVzdC5vbkJvZHlTZW50KGJvZHkpXG5cbiAgICAgIGlmICghZXhwZWN0c1BheWxvYWQgJiYgcmVxdWVzdC5yZXNldCAhPT0gZmFsc2UpIHtcbiAgICAgICAgc29ja2V0W2tSZXNldF0gPSB0cnVlXG4gICAgICB9XG4gICAgfVxuICAgIHJlcXVlc3Qub25SZXF1ZXN0U2VudCgpXG5cbiAgICBjbGllbnRba1Jlc3VtZV0oKVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICBhYm9ydChlcnIpXG4gIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gd3JpdGVCbG9iIChhYm9ydCwgYm9keSwgY2xpZW50LCByZXF1ZXN0LCBzb2NrZXQsIGNvbnRlbnRMZW5ndGgsIGhlYWRlciwgZXhwZWN0c1BheWxvYWQpIHtcbiAgYXNzZXJ0KGNvbnRlbnRMZW5ndGggPT09IGJvZHkuc2l6ZSwgJ2Jsb2IgYm9keSBtdXN0IGhhdmUgY29udGVudCBsZW5ndGgnKVxuXG4gIHRyeSB7XG4gICAgaWYgKGNvbnRlbnRMZW5ndGggIT0gbnVsbCAmJiBjb250ZW50TGVuZ3RoICE9PSBib2R5LnNpemUpIHtcbiAgICAgIHRocm93IG5ldyBSZXF1ZXN0Q29udGVudExlbmd0aE1pc21hdGNoRXJyb3IoKVxuICAgIH1cblxuICAgIGNvbnN0IGJ1ZmZlciA9IEJ1ZmZlci5mcm9tKGF3YWl0IGJvZHkuYXJyYXlCdWZmZXIoKSlcblxuICAgIHNvY2tldC5jb3JrKClcbiAgICBzb2NrZXQud3JpdGUoYCR7aGVhZGVyfWNvbnRlbnQtbGVuZ3RoOiAke2NvbnRlbnRMZW5ndGh9XFxyXFxuXFxyXFxuYCwgJ2xhdGluMScpXG4gICAgc29ja2V0LndyaXRlKGJ1ZmZlcilcbiAgICBzb2NrZXQudW5jb3JrKClcblxuICAgIHJlcXVlc3Qub25Cb2R5U2VudChidWZmZXIpXG4gICAgcmVxdWVzdC5vblJlcXVlc3RTZW50KClcblxuICAgIGlmICghZXhwZWN0c1BheWxvYWQgJiYgcmVxdWVzdC5yZXNldCAhPT0gZmFsc2UpIHtcbiAgICAgIHNvY2tldFtrUmVzZXRdID0gdHJ1ZVxuICAgIH1cblxuICAgIGNsaWVudFtrUmVzdW1lXSgpXG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGFib3J0KGVycilcbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiB3cml0ZUl0ZXJhYmxlIChhYm9ydCwgYm9keSwgY2xpZW50LCByZXF1ZXN0LCBzb2NrZXQsIGNvbnRlbnRMZW5ndGgsIGhlYWRlciwgZXhwZWN0c1BheWxvYWQpIHtcbiAgYXNzZXJ0KGNvbnRlbnRMZW5ndGggIT09IDAgfHwgY2xpZW50W2tSdW5uaW5nXSA9PT0gMCwgJ2l0ZXJhdG9yIGJvZHkgY2Fubm90IGJlIHBpcGVsaW5lZCcpXG5cbiAgbGV0IGNhbGxiYWNrID0gbnVsbFxuICBmdW5jdGlvbiBvbkRyYWluICgpIHtcbiAgICBpZiAoY2FsbGJhY2spIHtcbiAgICAgIGNvbnN0IGNiID0gY2FsbGJhY2tcbiAgICAgIGNhbGxiYWNrID0gbnVsbFxuICAgICAgY2IoKVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IHdhaXRGb3JEcmFpbiA9ICgpID0+IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBhc3NlcnQoY2FsbGJhY2sgPT09IG51bGwpXG5cbiAgICBpZiAoc29ja2V0W2tFcnJvcl0pIHtcbiAgICAgIHJlamVjdChzb2NrZXRba0Vycm9yXSlcbiAgICB9IGVsc2Uge1xuICAgICAgY2FsbGJhY2sgPSByZXNvbHZlXG4gICAgfVxuICB9KVxuXG4gIHNvY2tldFxuICAgIC5vbignY2xvc2UnLCBvbkRyYWluKVxuICAgIC5vbignZHJhaW4nLCBvbkRyYWluKVxuXG4gIGNvbnN0IHdyaXRlciA9IG5ldyBBc3luY1dyaXRlcih7IGFib3J0LCBzb2NrZXQsIHJlcXVlc3QsIGNvbnRlbnRMZW5ndGgsIGNsaWVudCwgZXhwZWN0c1BheWxvYWQsIGhlYWRlciB9KVxuICB0cnkge1xuICAgIC8vIEl0J3MgdXAgdG8gdGhlIHVzZXIgdG8gc29tZWhvdyBhYm9ydCB0aGUgYXN5bmMgaXRlcmFibGUuXG4gICAgZm9yIGF3YWl0IChjb25zdCBjaHVuayBvZiBib2R5KSB7XG4gICAgICBpZiAoc29ja2V0W2tFcnJvcl0pIHtcbiAgICAgICAgdGhyb3cgc29ja2V0W2tFcnJvcl1cbiAgICAgIH1cblxuICAgICAgaWYgKCF3cml0ZXIud3JpdGUoY2h1bmspKSB7XG4gICAgICAgIGF3YWl0IHdhaXRGb3JEcmFpbigpXG4gICAgICB9XG4gICAgfVxuXG4gICAgd3JpdGVyLmVuZCgpXG4gIH0gY2F0Y2ggKGVycikge1xuICAgIHdyaXRlci5kZXN0cm95KGVycilcbiAgfSBmaW5hbGx5IHtcbiAgICBzb2NrZXRcbiAgICAgIC5vZmYoJ2Nsb3NlJywgb25EcmFpbilcbiAgICAgIC5vZmYoJ2RyYWluJywgb25EcmFpbilcbiAgfVxufVxuXG5jbGFzcyBBc3luY1dyaXRlciB7XG4gIGNvbnN0cnVjdG9yICh7IGFib3J0LCBzb2NrZXQsIHJlcXVlc3QsIGNvbnRlbnRMZW5ndGgsIGNsaWVudCwgZXhwZWN0c1BheWxvYWQsIGhlYWRlciB9KSB7XG4gICAgdGhpcy5zb2NrZXQgPSBzb2NrZXRcbiAgICB0aGlzLnJlcXVlc3QgPSByZXF1ZXN0XG4gICAgdGhpcy5jb250ZW50TGVuZ3RoID0gY29udGVudExlbmd0aFxuICAgIHRoaXMuY2xpZW50ID0gY2xpZW50XG4gICAgdGhpcy5ieXRlc1dyaXR0ZW4gPSAwXG4gICAgdGhpcy5leHBlY3RzUGF5bG9hZCA9IGV4cGVjdHNQYXlsb2FkXG4gICAgdGhpcy5oZWFkZXIgPSBoZWFkZXJcbiAgICB0aGlzLmFib3J0ID0gYWJvcnRcblxuICAgIHNvY2tldFtrV3JpdGluZ10gPSB0cnVlXG4gIH1cblxuICB3cml0ZSAoY2h1bmspIHtcbiAgICBjb25zdCB7IHNvY2tldCwgcmVxdWVzdCwgY29udGVudExlbmd0aCwgY2xpZW50LCBieXRlc1dyaXR0ZW4sIGV4cGVjdHNQYXlsb2FkLCBoZWFkZXIgfSA9IHRoaXNcblxuICAgIGlmIChzb2NrZXRba0Vycm9yXSkge1xuICAgICAgdGhyb3cgc29ja2V0W2tFcnJvcl1cbiAgICB9XG5cbiAgICBpZiAoc29ja2V0LmRlc3Ryb3llZCkge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuXG4gICAgY29uc3QgbGVuID0gQnVmZmVyLmJ5dGVMZW5ndGgoY2h1bmspXG4gICAgaWYgKCFsZW4pIHtcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuXG4gICAgLy8gV2Ugc2hvdWxkIGRlZmVyIHdyaXRpbmcgY2h1bmtzLlxuICAgIGlmIChjb250ZW50TGVuZ3RoICE9PSBudWxsICYmIGJ5dGVzV3JpdHRlbiArIGxlbiA+IGNvbnRlbnRMZW5ndGgpIHtcbiAgICAgIGlmIChjbGllbnRba1N0cmljdENvbnRlbnRMZW5ndGhdKSB7XG4gICAgICAgIHRocm93IG5ldyBSZXF1ZXN0Q29udGVudExlbmd0aE1pc21hdGNoRXJyb3IoKVxuICAgICAgfVxuXG4gICAgICBwcm9jZXNzLmVtaXRXYXJuaW5nKG5ldyBSZXF1ZXN0Q29udGVudExlbmd0aE1pc21hdGNoRXJyb3IoKSlcbiAgICB9XG5cbiAgICBzb2NrZXQuY29yaygpXG5cbiAgICBpZiAoYnl0ZXNXcml0dGVuID09PSAwKSB7XG4gICAgICBpZiAoIWV4cGVjdHNQYXlsb2FkICYmIHJlcXVlc3QucmVzZXQgIT09IGZhbHNlKSB7XG4gICAgICAgIHNvY2tldFtrUmVzZXRdID0gdHJ1ZVxuICAgICAgfVxuXG4gICAgICBpZiAoY29udGVudExlbmd0aCA9PT0gbnVsbCkge1xuICAgICAgICBzb2NrZXQud3JpdGUoYCR7aGVhZGVyfXRyYW5zZmVyLWVuY29kaW5nOiBjaHVua2VkXFxyXFxuYCwgJ2xhdGluMScpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzb2NrZXQud3JpdGUoYCR7aGVhZGVyfWNvbnRlbnQtbGVuZ3RoOiAke2NvbnRlbnRMZW5ndGh9XFxyXFxuXFxyXFxuYCwgJ2xhdGluMScpXG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGNvbnRlbnRMZW5ndGggPT09IG51bGwpIHtcbiAgICAgIHNvY2tldC53cml0ZShgXFxyXFxuJHtsZW4udG9TdHJpbmcoMTYpfVxcclxcbmAsICdsYXRpbjEnKVxuICAgIH1cblxuICAgIHRoaXMuYnl0ZXNXcml0dGVuICs9IGxlblxuXG4gICAgY29uc3QgcmV0ID0gc29ja2V0LndyaXRlKGNodW5rKVxuXG4gICAgc29ja2V0LnVuY29yaygpXG5cbiAgICByZXF1ZXN0Lm9uQm9keVNlbnQoY2h1bmspXG5cbiAgICBpZiAoIXJldCkge1xuICAgICAgaWYgKHNvY2tldFtrUGFyc2VyXS50aW1lb3V0ICYmIHNvY2tldFtrUGFyc2VyXS50aW1lb3V0VHlwZSA9PT0gVElNRU9VVF9IRUFERVJTKSB7XG4gICAgICAgIC8vIGlzdGFuYnVsIGlnbm9yZSBlbHNlOiBvbmx5IGZvciBqZXN0XG4gICAgICAgIGlmIChzb2NrZXRba1BhcnNlcl0udGltZW91dC5yZWZyZXNoKSB7XG4gICAgICAgICAgc29ja2V0W2tQYXJzZXJdLnRpbWVvdXQucmVmcmVzaCgpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcmV0XG4gIH1cblxuICBlbmQgKCkge1xuICAgIGNvbnN0IHsgc29ja2V0LCBjb250ZW50TGVuZ3RoLCBjbGllbnQsIGJ5dGVzV3JpdHRlbiwgZXhwZWN0c1BheWxvYWQsIGhlYWRlciwgcmVxdWVzdCB9ID0gdGhpc1xuICAgIHJlcXVlc3Qub25SZXF1ZXN0U2VudCgpXG5cbiAgICBzb2NrZXRba1dyaXRpbmddID0gZmFsc2VcblxuICAgIGlmIChzb2NrZXRba0Vycm9yXSkge1xuICAgICAgdGhyb3cgc29ja2V0W2tFcnJvcl1cbiAgICB9XG5cbiAgICBpZiAoc29ja2V0LmRlc3Ryb3llZCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgaWYgKGJ5dGVzV3JpdHRlbiA9PT0gMCkge1xuICAgICAgaWYgKGV4cGVjdHNQYXlsb2FkKSB7XG4gICAgICAgIC8vIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM3MjMwI3NlY3Rpb24tMy4zLjJcbiAgICAgICAgLy8gQSB1c2VyIGFnZW50IFNIT1VMRCBzZW5kIGEgQ29udGVudC1MZW5ndGggaW4gYSByZXF1ZXN0IG1lc3NhZ2Ugd2hlblxuICAgICAgICAvLyBubyBUcmFuc2Zlci1FbmNvZGluZyBpcyBzZW50IGFuZCB0aGUgcmVxdWVzdCBtZXRob2QgZGVmaW5lcyBhIG1lYW5pbmdcbiAgICAgICAgLy8gZm9yIGFuIGVuY2xvc2VkIHBheWxvYWQgYm9keS5cblxuICAgICAgICBzb2NrZXQud3JpdGUoYCR7aGVhZGVyfWNvbnRlbnQtbGVuZ3RoOiAwXFxyXFxuXFxyXFxuYCwgJ2xhdGluMScpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzb2NrZXQud3JpdGUoYCR7aGVhZGVyfVxcclxcbmAsICdsYXRpbjEnKVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoY29udGVudExlbmd0aCA9PT0gbnVsbCkge1xuICAgICAgc29ja2V0LndyaXRlKCdcXHJcXG4wXFxyXFxuXFxyXFxuJywgJ2xhdGluMScpXG4gICAgfVxuXG4gICAgaWYgKGNvbnRlbnRMZW5ndGggIT09IG51bGwgJiYgYnl0ZXNXcml0dGVuICE9PSBjb250ZW50TGVuZ3RoKSB7XG4gICAgICBpZiAoY2xpZW50W2tTdHJpY3RDb250ZW50TGVuZ3RoXSkge1xuICAgICAgICB0aHJvdyBuZXcgUmVxdWVzdENvbnRlbnRMZW5ndGhNaXNtYXRjaEVycm9yKClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHByb2Nlc3MuZW1pdFdhcm5pbmcobmV3IFJlcXVlc3RDb250ZW50TGVuZ3RoTWlzbWF0Y2hFcnJvcigpKVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChzb2NrZXRba1BhcnNlcl0udGltZW91dCAmJiBzb2NrZXRba1BhcnNlcl0udGltZW91dFR5cGUgPT09IFRJTUVPVVRfSEVBREVSUykge1xuICAgICAgLy8gaXN0YW5idWwgaWdub3JlIGVsc2U6IG9ubHkgZm9yIGplc3RcbiAgICAgIGlmIChzb2NrZXRba1BhcnNlcl0udGltZW91dC5yZWZyZXNoKSB7XG4gICAgICAgIHNvY2tldFtrUGFyc2VyXS50aW1lb3V0LnJlZnJlc2goKVxuICAgICAgfVxuICAgIH1cblxuICAgIGNsaWVudFtrUmVzdW1lXSgpXG4gIH1cblxuICBkZXN0cm95IChlcnIpIHtcbiAgICBjb25zdCB7IHNvY2tldCwgY2xpZW50LCBhYm9ydCB9ID0gdGhpc1xuXG4gICAgc29ja2V0W2tXcml0aW5nXSA9IGZhbHNlXG5cbiAgICBpZiAoZXJyKSB7XG4gICAgICBhc3NlcnQoY2xpZW50W2tSdW5uaW5nXSA8PSAxLCAncGlwZWxpbmUgc2hvdWxkIG9ubHkgY29udGFpbiB0aGlzIHJlcXVlc3QnKVxuICAgICAgYWJvcnQoZXJyKVxuICAgIH1cbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNvbm5lY3RIMVxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCBhc3NlcnQgPSByZXF1aXJlKCdub2RlOmFzc2VydCcpXG5jb25zdCB7IHBpcGVsaW5lIH0gPSByZXF1aXJlKCdub2RlOnN0cmVhbScpXG5jb25zdCB1dGlsID0gcmVxdWlyZSgnLi4vY29yZS91dGlsLmpzJylcbmNvbnN0IHtcbiAgUmVxdWVzdENvbnRlbnRMZW5ndGhNaXNtYXRjaEVycm9yLFxuICBSZXF1ZXN0QWJvcnRlZEVycm9yLFxuICBTb2NrZXRFcnJvcixcbiAgSW5mb3JtYXRpb25hbEVycm9yXG59ID0gcmVxdWlyZSgnLi4vY29yZS9lcnJvcnMuanMnKVxuY29uc3Qge1xuICBrVXJsLFxuICBrUmVzZXQsXG4gIGtDbGllbnQsXG4gIGtSdW5uaW5nLFxuICBrUGVuZGluZyxcbiAga1F1ZXVlLFxuICBrUGVuZGluZ0lkeCxcbiAga1J1bm5pbmdJZHgsXG4gIGtFcnJvcixcbiAga1NvY2tldCxcbiAga1N0cmljdENvbnRlbnRMZW5ndGgsXG4gIGtPbkVycm9yLFxuICBrTWF4Q29uY3VycmVudFN0cmVhbXMsXG4gIGtIVFRQMlNlc3Npb24sXG4gIGtSZXN1bWUsXG4gIGtTaXplLFxuICBrSFRUUENvbnRleHRcbn0gPSByZXF1aXJlKCcuLi9jb3JlL3N5bWJvbHMuanMnKVxuXG5jb25zdCBrT3BlblN0cmVhbXMgPSBTeW1ib2woJ29wZW4gc3RyZWFtcycpXG5cbmxldCBleHRyYWN0Qm9keVxuXG4vLyBFeHBlcmltZW50YWxcbmxldCBoMkV4cGVyaW1lbnRhbFdhcm5lZCA9IGZhbHNlXG5cbi8qKiBAdHlwZSB7aW1wb3J0KCdodHRwMicpfSAqL1xubGV0IGh0dHAyXG50cnkge1xuICBodHRwMiA9IHJlcXVpcmUoJ25vZGU6aHR0cDInKVxufSBjYXRjaCB7XG4gIC8vIEB0cy1pZ25vcmVcbiAgaHR0cDIgPSB7IGNvbnN0YW50czoge30gfVxufVxuXG5jb25zdCB7XG4gIGNvbnN0YW50czoge1xuICAgIEhUVFAyX0hFQURFUl9BVVRIT1JJVFksXG4gICAgSFRUUDJfSEVBREVSX01FVEhPRCxcbiAgICBIVFRQMl9IRUFERVJfUEFUSCxcbiAgICBIVFRQMl9IRUFERVJfU0NIRU1FLFxuICAgIEhUVFAyX0hFQURFUl9DT05URU5UX0xFTkdUSCxcbiAgICBIVFRQMl9IRUFERVJfRVhQRUNULFxuICAgIEhUVFAyX0hFQURFUl9TVEFUVVNcbiAgfVxufSA9IGh0dHAyXG5cbmZ1bmN0aW9uIHBhcnNlSDJIZWFkZXJzIChoZWFkZXJzKSB7XG4gIGNvbnN0IHJlc3VsdCA9IFtdXG5cbiAgZm9yIChjb25zdCBbbmFtZSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGhlYWRlcnMpKSB7XG4gICAgLy8gaDIgbWF5IGNvbmNhdCB0aGUgaGVhZGVyIHZhbHVlIGJ5IGFycmF5XG4gICAgLy8gZS5nLiBTZXQtQ29va2llXG4gICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICBmb3IgKGNvbnN0IHN1YnZhbHVlIG9mIHZhbHVlKSB7XG4gICAgICAgIC8vIHdlIG5lZWQgdG8gcHJvdmlkZSBlYWNoIGhlYWRlciB2YWx1ZSBvZiBoZWFkZXIgbmFtZVxuICAgICAgICAvLyBiZWNhdXNlIHRoZSBoZWFkZXJzIGhhbmRsZXIgZXhwZWN0IG5hbWUtdmFsdWUgcGFpclxuICAgICAgICByZXN1bHQucHVzaChCdWZmZXIuZnJvbShuYW1lKSwgQnVmZmVyLmZyb20oc3VidmFsdWUpKVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICByZXN1bHQucHVzaChCdWZmZXIuZnJvbShuYW1lKSwgQnVmZmVyLmZyb20odmFsdWUpKVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiByZXN1bHRcbn1cblxuYXN5bmMgZnVuY3Rpb24gY29ubmVjdEgyIChjbGllbnQsIHNvY2tldCkge1xuICBjbGllbnRba1NvY2tldF0gPSBzb2NrZXRcblxuICBpZiAoIWgyRXhwZXJpbWVudGFsV2FybmVkKSB7XG4gICAgaDJFeHBlcmltZW50YWxXYXJuZWQgPSB0cnVlXG4gICAgcHJvY2Vzcy5lbWl0V2FybmluZygnSDIgc3VwcG9ydCBpcyBleHBlcmltZW50YWwsIGV4cGVjdCB0aGVtIHRvIGNoYW5nZSBhdCBhbnkgdGltZS4nLCB7XG4gICAgICBjb2RlOiAnVU5ESUNJLUgyJ1xuICAgIH0pXG4gIH1cblxuICBjb25zdCBzZXNzaW9uID0gaHR0cDIuY29ubmVjdChjbGllbnRba1VybF0sIHtcbiAgICBjcmVhdGVDb25uZWN0aW9uOiAoKSA9PiBzb2NrZXQsXG4gICAgcGVlck1heENvbmN1cnJlbnRTdHJlYW1zOiBjbGllbnRba01heENvbmN1cnJlbnRTdHJlYW1zXVxuICB9KVxuXG4gIHNlc3Npb25ba09wZW5TdHJlYW1zXSA9IDBcbiAgc2Vzc2lvbltrQ2xpZW50XSA9IGNsaWVudFxuICBzZXNzaW9uW2tTb2NrZXRdID0gc29ja2V0XG5cbiAgdXRpbC5hZGRMaXN0ZW5lcihzZXNzaW9uLCAnZXJyb3InLCBvbkh0dHAyU2Vzc2lvbkVycm9yKVxuICB1dGlsLmFkZExpc3RlbmVyKHNlc3Npb24sICdmcmFtZUVycm9yJywgb25IdHRwMkZyYW1lRXJyb3IpXG4gIHV0aWwuYWRkTGlzdGVuZXIoc2Vzc2lvbiwgJ2VuZCcsIG9uSHR0cDJTZXNzaW9uRW5kKVxuICB1dGlsLmFkZExpc3RlbmVyKHNlc3Npb24sICdnb2F3YXknLCBvbkhUVFAyR29Bd2F5KVxuICB1dGlsLmFkZExpc3RlbmVyKHNlc3Npb24sICdjbG9zZScsIGZ1bmN0aW9uICgpIHtcbiAgICBjb25zdCB7IFtrQ2xpZW50XTogY2xpZW50IH0gPSB0aGlzXG4gICAgY29uc3QgeyBba1NvY2tldF06IHNvY2tldCB9ID0gY2xpZW50XG5cbiAgICBjb25zdCBlcnIgPSB0aGlzW2tTb2NrZXRdW2tFcnJvcl0gfHwgdGhpc1trRXJyb3JdIHx8IG5ldyBTb2NrZXRFcnJvcignY2xvc2VkJywgdXRpbC5nZXRTb2NrZXRJbmZvKHNvY2tldCkpXG5cbiAgICBjbGllbnRba0hUVFAyU2Vzc2lvbl0gPSBudWxsXG5cbiAgICBpZiAoY2xpZW50LmRlc3Ryb3llZCkge1xuICAgICAgYXNzZXJ0KGNsaWVudFtrUGVuZGluZ10gPT09IDApXG5cbiAgICAgIC8vIEZhaWwgZW50aXJlIHF1ZXVlLlxuICAgICAgY29uc3QgcmVxdWVzdHMgPSBjbGllbnRba1F1ZXVlXS5zcGxpY2UoY2xpZW50W2tSdW5uaW5nSWR4XSlcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcmVxdWVzdHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3QgcmVxdWVzdCA9IHJlcXVlc3RzW2ldXG4gICAgICAgIHV0aWwuZXJyb3JSZXF1ZXN0KGNsaWVudCwgcmVxdWVzdCwgZXJyKVxuICAgICAgfVxuICAgIH1cbiAgfSlcblxuICBzZXNzaW9uLnVucmVmKClcblxuICBjbGllbnRba0hUVFAyU2Vzc2lvbl0gPSBzZXNzaW9uXG4gIHNvY2tldFtrSFRUUDJTZXNzaW9uXSA9IHNlc3Npb25cblxuICB1dGlsLmFkZExpc3RlbmVyKHNvY2tldCwgJ2Vycm9yJywgZnVuY3Rpb24gKGVycikge1xuICAgIGFzc2VydChlcnIuY29kZSAhPT0gJ0VSUl9UTFNfQ0VSVF9BTFROQU1FX0lOVkFMSUQnKVxuXG4gICAgdGhpc1trRXJyb3JdID0gZXJyXG5cbiAgICB0aGlzW2tDbGllbnRdW2tPbkVycm9yXShlcnIpXG4gIH0pXG5cbiAgdXRpbC5hZGRMaXN0ZW5lcihzb2NrZXQsICdlbmQnLCBmdW5jdGlvbiAoKSB7XG4gICAgdXRpbC5kZXN0cm95KHRoaXMsIG5ldyBTb2NrZXRFcnJvcignb3RoZXIgc2lkZSBjbG9zZWQnLCB1dGlsLmdldFNvY2tldEluZm8odGhpcykpKVxuICB9KVxuXG4gIHV0aWwuYWRkTGlzdGVuZXIoc29ja2V0LCAnY2xvc2UnLCBmdW5jdGlvbiAoKSB7XG4gICAgY29uc3QgZXJyID0gdGhpc1trRXJyb3JdIHx8IG5ldyBTb2NrZXRFcnJvcignY2xvc2VkJywgdXRpbC5nZXRTb2NrZXRJbmZvKHRoaXMpKVxuXG4gICAgY2xpZW50W2tTb2NrZXRdID0gbnVsbFxuXG4gICAgaWYgKHRoaXNba0hUVFAyU2Vzc2lvbl0gIT0gbnVsbCkge1xuICAgICAgdGhpc1trSFRUUDJTZXNzaW9uXS5kZXN0cm95KGVycilcbiAgICB9XG5cbiAgICBjbGllbnRba1BlbmRpbmdJZHhdID0gY2xpZW50W2tSdW5uaW5nSWR4XVxuXG4gICAgYXNzZXJ0KGNsaWVudFtrUnVubmluZ10gPT09IDApXG5cbiAgICBjbGllbnQuZW1pdCgnZGlzY29ubmVjdCcsIGNsaWVudFtrVXJsXSwgW2NsaWVudF0sIGVycilcblxuICAgIGNsaWVudFtrUmVzdW1lXSgpXG4gIH0pXG5cbiAgbGV0IGNsb3NlZCA9IGZhbHNlXG4gIHNvY2tldC5vbignY2xvc2UnLCAoKSA9PiB7XG4gICAgY2xvc2VkID0gdHJ1ZVxuICB9KVxuXG4gIHJldHVybiB7XG4gICAgdmVyc2lvbjogJ2gyJyxcbiAgICBkZWZhdWx0UGlwZWxpbmluZzogSW5maW5pdHksXG4gICAgd3JpdGUgKC4uLmFyZ3MpIHtcbiAgICAgIHJldHVybiB3cml0ZUgyKGNsaWVudCwgLi4uYXJncylcbiAgICB9LFxuICAgIHJlc3VtZSAoKSB7XG4gICAgICByZXN1bWVIMihjbGllbnQpXG4gICAgfSxcbiAgICBkZXN0cm95IChlcnIsIGNhbGxiYWNrKSB7XG4gICAgICBpZiAoY2xvc2VkKSB7XG4gICAgICAgIHF1ZXVlTWljcm90YXNrKGNhbGxiYWNrKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gRGVzdHJveWluZyB0aGUgc29ja2V0IHdpbGwgdHJpZ2dlciB0aGUgc2Vzc2lvbiBjbG9zZVxuICAgICAgICBzb2NrZXQuZGVzdHJveShlcnIpLm9uKCdjbG9zZScsIGNhbGxiYWNrKVxuICAgICAgfVxuICAgIH0sXG4gICAgZ2V0IGRlc3Ryb3llZCAoKSB7XG4gICAgICByZXR1cm4gc29ja2V0LmRlc3Ryb3llZFxuICAgIH0sXG4gICAgYnVzeSAoKSB7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gcmVzdW1lSDIgKGNsaWVudCkge1xuICBjb25zdCBzb2NrZXQgPSBjbGllbnRba1NvY2tldF1cblxuICBpZiAoc29ja2V0Py5kZXN0cm95ZWQgPT09IGZhbHNlKSB7XG4gICAgaWYgKGNsaWVudFtrU2l6ZV0gPT09IDAgJiYgY2xpZW50W2tNYXhDb25jdXJyZW50U3RyZWFtc10gPT09IDApIHtcbiAgICAgIHNvY2tldC51bnJlZigpXG4gICAgICBjbGllbnRba0hUVFAyU2Vzc2lvbl0udW5yZWYoKVxuICAgIH0gZWxzZSB7XG4gICAgICBzb2NrZXQucmVmKClcbiAgICAgIGNsaWVudFtrSFRUUDJTZXNzaW9uXS5yZWYoKVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBvbkh0dHAyU2Vzc2lvbkVycm9yIChlcnIpIHtcbiAgYXNzZXJ0KGVyci5jb2RlICE9PSAnRVJSX1RMU19DRVJUX0FMVE5BTUVfSU5WQUxJRCcpXG5cbiAgdGhpc1trU29ja2V0XVtrRXJyb3JdID0gZXJyXG4gIHRoaXNba0NsaWVudF1ba09uRXJyb3JdKGVycilcbn1cblxuZnVuY3Rpb24gb25IdHRwMkZyYW1lRXJyb3IgKHR5cGUsIGNvZGUsIGlkKSB7XG4gIGlmIChpZCA9PT0gMCkge1xuICAgIGNvbnN0IGVyciA9IG5ldyBJbmZvcm1hdGlvbmFsRXJyb3IoYEhUVFAvMjogXCJmcmFtZUVycm9yXCIgcmVjZWl2ZWQgLSB0eXBlICR7dHlwZX0sIGNvZGUgJHtjb2RlfWApXG4gICAgdGhpc1trU29ja2V0XVtrRXJyb3JdID0gZXJyXG4gICAgdGhpc1trQ2xpZW50XVtrT25FcnJvcl0oZXJyKVxuICB9XG59XG5cbmZ1bmN0aW9uIG9uSHR0cDJTZXNzaW9uRW5kICgpIHtcbiAgY29uc3QgZXJyID0gbmV3IFNvY2tldEVycm9yKCdvdGhlciBzaWRlIGNsb3NlZCcsIHV0aWwuZ2V0U29ja2V0SW5mbyh0aGlzW2tTb2NrZXRdKSlcbiAgdGhpcy5kZXN0cm95KGVycilcbiAgdXRpbC5kZXN0cm95KHRoaXNba1NvY2tldF0sIGVycilcbn1cblxuLyoqXG4gKiBUaGlzIGlzIHRoZSByb290IGNhdXNlIG9mICMzMDExXG4gKiBXZSBuZWVkIHRvIGhhbmRsZSBHT0FXQVkgZnJhbWVzIHByb3Blcmx5LCBhbmQgdHJpZ2dlciB0aGUgc2Vzc2lvbiBjbG9zZVxuICogYWxvbmcgd2l0aCB0aGUgc29ja2V0IHJpZ2h0IGF3YXlcbiAqL1xuZnVuY3Rpb24gb25IVFRQMkdvQXdheSAoY29kZSkge1xuICAvLyBXZSBjYW5ub3QgcmVjb3Zlciwgc28gYmVzdCB0byBjbG9zZSB0aGUgc2Vzc2lvbiBhbmQgdGhlIHNvY2tldFxuICBjb25zdCBlcnIgPSB0aGlzW2tFcnJvcl0gfHwgbmV3IFNvY2tldEVycm9yKGBIVFRQLzI6IFwiR09BV0FZXCIgZnJhbWUgcmVjZWl2ZWQgd2l0aCBjb2RlICR7Y29kZX1gLCB1dGlsLmdldFNvY2tldEluZm8odGhpcykpXG4gIGNvbnN0IGNsaWVudCA9IHRoaXNba0NsaWVudF1cblxuICBjbGllbnRba1NvY2tldF0gPSBudWxsXG4gIGNsaWVudFtrSFRUUENvbnRleHRdID0gbnVsbFxuXG4gIGlmICh0aGlzW2tIVFRQMlNlc3Npb25dICE9IG51bGwpIHtcbiAgICB0aGlzW2tIVFRQMlNlc3Npb25dLmRlc3Ryb3koZXJyKVxuICAgIHRoaXNba0hUVFAyU2Vzc2lvbl0gPSBudWxsXG4gIH1cblxuICB1dGlsLmRlc3Ryb3kodGhpc1trU29ja2V0XSwgZXJyKVxuXG4gIC8vIEZhaWwgaGVhZCBvZiBwaXBlbGluZS5cbiAgaWYgKGNsaWVudFtrUnVubmluZ0lkeF0gPCBjbGllbnRba1F1ZXVlXS5sZW5ndGgpIHtcbiAgICBjb25zdCByZXF1ZXN0ID0gY2xpZW50W2tRdWV1ZV1bY2xpZW50W2tSdW5uaW5nSWR4XV1cbiAgICBjbGllbnRba1F1ZXVlXVtjbGllbnRba1J1bm5pbmdJZHhdKytdID0gbnVsbFxuICAgIHV0aWwuZXJyb3JSZXF1ZXN0KGNsaWVudCwgcmVxdWVzdCwgZXJyKVxuICAgIGNsaWVudFtrUGVuZGluZ0lkeF0gPSBjbGllbnRba1J1bm5pbmdJZHhdXG4gIH1cblxuICBhc3NlcnQoY2xpZW50W2tSdW5uaW5nXSA9PT0gMClcblxuICBjbGllbnQuZW1pdCgnZGlzY29ubmVjdCcsIGNsaWVudFtrVXJsXSwgW2NsaWVudF0sIGVycilcblxuICBjbGllbnRba1Jlc3VtZV0oKVxufVxuXG4vLyBodHRwczovL3d3dy5yZmMtZWRpdG9yLm9yZy9yZmMvcmZjNzIzMCNzZWN0aW9uLTMuMy4yXG5mdW5jdGlvbiBzaG91bGRTZW5kQ29udGVudExlbmd0aCAobWV0aG9kKSB7XG4gIHJldHVybiBtZXRob2QgIT09ICdHRVQnICYmIG1ldGhvZCAhPT0gJ0hFQUQnICYmIG1ldGhvZCAhPT0gJ09QVElPTlMnICYmIG1ldGhvZCAhPT0gJ1RSQUNFJyAmJiBtZXRob2QgIT09ICdDT05ORUNUJ1xufVxuXG5mdW5jdGlvbiB3cml0ZUgyIChjbGllbnQsIHJlcXVlc3QpIHtcbiAgY29uc3Qgc2Vzc2lvbiA9IGNsaWVudFtrSFRUUDJTZXNzaW9uXVxuICBjb25zdCB7IG1ldGhvZCwgcGF0aCwgaG9zdCwgdXBncmFkZSwgZXhwZWN0Q29udGludWUsIHNpZ25hbCwgaGVhZGVyczogcmVxSGVhZGVycyB9ID0gcmVxdWVzdFxuICBsZXQgeyBib2R5IH0gPSByZXF1ZXN0XG5cbiAgaWYgKHVwZ3JhZGUpIHtcbiAgICB1dGlsLmVycm9yUmVxdWVzdChjbGllbnQsIHJlcXVlc3QsIG5ldyBFcnJvcignVXBncmFkZSBub3Qgc3VwcG9ydGVkIGZvciBIMicpKVxuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgY29uc3QgaGVhZGVycyA9IHt9XG4gIGZvciAobGV0IG4gPSAwOyBuIDwgcmVxSGVhZGVycy5sZW5ndGg7IG4gKz0gMikge1xuICAgIGNvbnN0IGtleSA9IHJlcUhlYWRlcnNbbiArIDBdXG4gICAgY29uc3QgdmFsID0gcmVxSGVhZGVyc1tuICsgMV1cblxuICAgIGlmIChBcnJheS5pc0FycmF5KHZhbCkpIHtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdmFsLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmIChoZWFkZXJzW2tleV0pIHtcbiAgICAgICAgICBoZWFkZXJzW2tleV0gKz0gYCwke3ZhbFtpXX1gXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaGVhZGVyc1trZXldID0gdmFsW2ldXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaGVhZGVyc1trZXldID0gdmFsXG4gICAgfVxuICB9XG5cbiAgLyoqIEB0eXBlIHtpbXBvcnQoJ25vZGU6aHR0cDInKS5DbGllbnRIdHRwMlN0cmVhbX0gKi9cbiAgbGV0IHN0cmVhbVxuXG4gIGNvbnN0IHsgaG9zdG5hbWUsIHBvcnQgfSA9IGNsaWVudFtrVXJsXVxuXG4gIGhlYWRlcnNbSFRUUDJfSEVBREVSX0FVVEhPUklUWV0gPSBob3N0IHx8IGAke2hvc3RuYW1lfSR7cG9ydCA/IGA6JHtwb3J0fWAgOiAnJ31gXG4gIGhlYWRlcnNbSFRUUDJfSEVBREVSX01FVEhPRF0gPSBtZXRob2RcblxuICBjb25zdCBhYm9ydCA9IChlcnIpID0+IHtcbiAgICBpZiAocmVxdWVzdC5hYm9ydGVkIHx8IHJlcXVlc3QuY29tcGxldGVkKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBlcnIgPSBlcnIgfHwgbmV3IFJlcXVlc3RBYm9ydGVkRXJyb3IoKVxuXG4gICAgdXRpbC5lcnJvclJlcXVlc3QoY2xpZW50LCByZXF1ZXN0LCBlcnIpXG5cbiAgICBpZiAoc3RyZWFtICE9IG51bGwpIHtcbiAgICAgIHV0aWwuZGVzdHJveShzdHJlYW0sIGVycilcbiAgICB9XG5cbiAgICAvLyBXZSBkbyBub3QgZGVzdHJveSB0aGUgc29ja2V0IGFzIHdlIGNhbiBjb250aW51ZSB1c2luZyB0aGUgc2Vzc2lvblxuICAgIC8vIHRoZSBzdHJlYW0gZ2V0J3MgZGVzdHJveWVkIGFuZCB0aGUgc2Vzc2lvbiByZW1haW5zIHRvIGNyZWF0ZSBuZXcgc3RyZWFtc1xuICAgIHV0aWwuZGVzdHJveShib2R5LCBlcnIpXG4gICAgY2xpZW50W2tRdWV1ZV1bY2xpZW50W2tSdW5uaW5nSWR4XSsrXSA9IG51bGxcbiAgICBjbGllbnRba1Jlc3VtZV0oKVxuICB9XG5cbiAgdHJ5IHtcbiAgICAvLyBXZSBhcmUgYWxyZWFkeSBjb25uZWN0ZWQsIHN0cmVhbXMgYXJlIHBlbmRpbmcuXG4gICAgLy8gV2UgY2FuIGNhbGwgb24gY29ubmVjdCwgYW5kIHdhaXQgZm9yIGFib3J0XG4gICAgcmVxdWVzdC5vbkNvbm5lY3QoYWJvcnQpXG4gIH0gY2F0Y2ggKGVycikge1xuICAgIHV0aWwuZXJyb3JSZXF1ZXN0KGNsaWVudCwgcmVxdWVzdCwgZXJyKVxuICB9XG5cbiAgaWYgKHJlcXVlc3QuYWJvcnRlZCkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgaWYgKG1ldGhvZCA9PT0gJ0NPTk5FQ1QnKSB7XG4gICAgc2Vzc2lvbi5yZWYoKVxuICAgIC8vIFdlIGFyZSBhbHJlYWR5IGNvbm5lY3RlZCwgc3RyZWFtcyBhcmUgcGVuZGluZywgZmlyc3QgcmVxdWVzdFxuICAgIC8vIHdpbGwgY3JlYXRlIGEgbmV3IHN0cmVhbS4gV2UgdHJpZ2dlciBhIHJlcXVlc3QgdG8gY3JlYXRlIHRoZSBzdHJlYW0gYW5kIHdhaXQgdW50aWxcbiAgICAvLyBgcmVhZHlgIGV2ZW50IGlzIHRyaWdnZXJlZFxuICAgIC8vIFdlIGRpc2FibGVkIGVuZFN0cmVhbSB0byBhbGxvdyB0aGUgdXNlciB0byB3cml0ZSB0byB0aGUgc3RyZWFtXG4gICAgc3RyZWFtID0gc2Vzc2lvbi5yZXF1ZXN0KGhlYWRlcnMsIHsgZW5kU3RyZWFtOiBmYWxzZSwgc2lnbmFsIH0pXG5cbiAgICBpZiAoc3RyZWFtLmlkICYmICFzdHJlYW0ucGVuZGluZykge1xuICAgICAgcmVxdWVzdC5vblVwZ3JhZGUobnVsbCwgbnVsbCwgc3RyZWFtKVxuICAgICAgKytzZXNzaW9uW2tPcGVuU3RyZWFtc11cbiAgICAgIGNsaWVudFtrUXVldWVdW2NsaWVudFtrUnVubmluZ0lkeF0rK10gPSBudWxsXG4gICAgfSBlbHNlIHtcbiAgICAgIHN0cmVhbS5vbmNlKCdyZWFkeScsICgpID0+IHtcbiAgICAgICAgcmVxdWVzdC5vblVwZ3JhZGUobnVsbCwgbnVsbCwgc3RyZWFtKVxuICAgICAgICArK3Nlc3Npb25ba09wZW5TdHJlYW1zXVxuICAgICAgICBjbGllbnRba1F1ZXVlXVtjbGllbnRba1J1bm5pbmdJZHhdKytdID0gbnVsbFxuICAgICAgfSlcbiAgICB9XG5cbiAgICBzdHJlYW0ub25jZSgnY2xvc2UnLCAoKSA9PiB7XG4gICAgICBzZXNzaW9uW2tPcGVuU3RyZWFtc10gLT0gMVxuICAgICAgaWYgKHNlc3Npb25ba09wZW5TdHJlYW1zXSA9PT0gMCkgc2Vzc2lvbi51bnJlZigpXG4gICAgfSlcblxuICAgIHJldHVybiB0cnVlXG4gIH1cblxuICAvLyBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNzU0MCNzZWN0aW9uLTguM1xuICAvLyA6cGF0aCBhbmQgOnNjaGVtZSBoZWFkZXJzIG11c3QgYmUgb21pdHRlZCB3aGVuIHNlbmRpbmcgQ09OTkVDVFxuXG4gIGhlYWRlcnNbSFRUUDJfSEVBREVSX1BBVEhdID0gcGF0aFxuICBoZWFkZXJzW0hUVFAyX0hFQURFUl9TQ0hFTUVdID0gJ2h0dHBzJ1xuXG4gIC8vIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM3MjMxI3NlY3Rpb24tNC4zLjFcbiAgLy8gaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzcyMzEjc2VjdGlvbi00LjMuMlxuICAvLyBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNzIzMSNzZWN0aW9uLTQuMy41XG5cbiAgLy8gU2VuZGluZyBhIHBheWxvYWQgYm9keSBvbiBhIHJlcXVlc3QgdGhhdCBkb2VzIG5vdFxuICAvLyBleHBlY3QgaXQgY2FuIGNhdXNlIHVuZGVmaW5lZCBiZWhhdmlvciBvbiBzb21lXG4gIC8vIHNlcnZlcnMgYW5kIGNvcnJ1cHQgY29ubmVjdGlvbiBzdGF0ZS4gRG8gbm90XG4gIC8vIHJlLXVzZSB0aGUgY29ubmVjdGlvbiBmb3IgZnVydGhlciByZXF1ZXN0cy5cblxuICBjb25zdCBleHBlY3RzUGF5bG9hZCA9IChcbiAgICBtZXRob2QgPT09ICdQVVQnIHx8XG4gICAgbWV0aG9kID09PSAnUE9TVCcgfHxcbiAgICBtZXRob2QgPT09ICdQQVRDSCdcbiAgKVxuXG4gIGlmIChib2R5ICYmIHR5cGVvZiBib2R5LnJlYWQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAvLyBUcnkgdG8gcmVhZCBFT0YgaW4gb3JkZXIgdG8gZ2V0IGxlbmd0aC5cbiAgICBib2R5LnJlYWQoMClcbiAgfVxuXG4gIGxldCBjb250ZW50TGVuZ3RoID0gdXRpbC5ib2R5TGVuZ3RoKGJvZHkpXG5cbiAgaWYgKHV0aWwuaXNGb3JtRGF0YUxpa2UoYm9keSkpIHtcbiAgICBleHRyYWN0Qm9keSA/Pz0gcmVxdWlyZSgnLi4vd2ViL2ZldGNoL2JvZHkuanMnKS5leHRyYWN0Qm9keVxuXG4gICAgY29uc3QgW2JvZHlTdHJlYW0sIGNvbnRlbnRUeXBlXSA9IGV4dHJhY3RCb2R5KGJvZHkpXG4gICAgaGVhZGVyc1snY29udGVudC10eXBlJ10gPSBjb250ZW50VHlwZVxuXG4gICAgYm9keSA9IGJvZHlTdHJlYW0uc3RyZWFtXG4gICAgY29udGVudExlbmd0aCA9IGJvZHlTdHJlYW0ubGVuZ3RoXG4gIH1cblxuICBpZiAoY29udGVudExlbmd0aCA9PSBudWxsKSB7XG4gICAgY29udGVudExlbmd0aCA9IHJlcXVlc3QuY29udGVudExlbmd0aFxuICB9XG5cbiAgaWYgKGNvbnRlbnRMZW5ndGggPT09IDAgfHwgIWV4cGVjdHNQYXlsb2FkKSB7XG4gICAgLy8gaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzcyMzAjc2VjdGlvbi0zLjMuMlxuICAgIC8vIEEgdXNlciBhZ2VudCBTSE9VTEQgTk9UIHNlbmQgYSBDb250ZW50LUxlbmd0aCBoZWFkZXIgZmllbGQgd2hlblxuICAgIC8vIHRoZSByZXF1ZXN0IG1lc3NhZ2UgZG9lcyBub3QgY29udGFpbiBhIHBheWxvYWQgYm9keSBhbmQgdGhlIG1ldGhvZFxuICAgIC8vIHNlbWFudGljcyBkbyBub3QgYW50aWNpcGF0ZSBzdWNoIGEgYm9keS5cblxuICAgIGNvbnRlbnRMZW5ndGggPSBudWxsXG4gIH1cblxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vbm9kZWpzL3VuZGljaS9pc3N1ZXMvMjA0NlxuICAvLyBBIHVzZXIgYWdlbnQgbWF5IHNlbmQgYSBDb250ZW50LUxlbmd0aCBoZWFkZXIgd2l0aCAwIHZhbHVlLCB0aGlzIHNob3VsZCBiZSBhbGxvd2VkLlxuICBpZiAoc2hvdWxkU2VuZENvbnRlbnRMZW5ndGgobWV0aG9kKSAmJiBjb250ZW50TGVuZ3RoID4gMCAmJiByZXF1ZXN0LmNvbnRlbnRMZW5ndGggIT0gbnVsbCAmJiByZXF1ZXN0LmNvbnRlbnRMZW5ndGggIT09IGNvbnRlbnRMZW5ndGgpIHtcbiAgICBpZiAoY2xpZW50W2tTdHJpY3RDb250ZW50TGVuZ3RoXSkge1xuICAgICAgdXRpbC5lcnJvclJlcXVlc3QoY2xpZW50LCByZXF1ZXN0LCBuZXcgUmVxdWVzdENvbnRlbnRMZW5ndGhNaXNtYXRjaEVycm9yKCkpXG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG5cbiAgICBwcm9jZXNzLmVtaXRXYXJuaW5nKG5ldyBSZXF1ZXN0Q29udGVudExlbmd0aE1pc21hdGNoRXJyb3IoKSlcbiAgfVxuXG4gIGlmIChjb250ZW50TGVuZ3RoICE9IG51bGwpIHtcbiAgICBhc3NlcnQoYm9keSwgJ25vIGJvZHkgbXVzdCBub3QgaGF2ZSBjb250ZW50IGxlbmd0aCcpXG4gICAgaGVhZGVyc1tIVFRQMl9IRUFERVJfQ09OVEVOVF9MRU5HVEhdID0gYCR7Y29udGVudExlbmd0aH1gXG4gIH1cblxuICBzZXNzaW9uLnJlZigpXG5cbiAgY29uc3Qgc2hvdWxkRW5kU3RyZWFtID0gbWV0aG9kID09PSAnR0VUJyB8fCBtZXRob2QgPT09ICdIRUFEJyB8fCBib2R5ID09PSBudWxsXG4gIGlmIChleHBlY3RDb250aW51ZSkge1xuICAgIGhlYWRlcnNbSFRUUDJfSEVBREVSX0VYUEVDVF0gPSAnMTAwLWNvbnRpbnVlJ1xuICAgIHN0cmVhbSA9IHNlc3Npb24ucmVxdWVzdChoZWFkZXJzLCB7IGVuZFN0cmVhbTogc2hvdWxkRW5kU3RyZWFtLCBzaWduYWwgfSlcblxuICAgIHN0cmVhbS5vbmNlKCdjb250aW51ZScsIHdyaXRlQm9keUgyKVxuICB9IGVsc2Uge1xuICAgIHN0cmVhbSA9IHNlc3Npb24ucmVxdWVzdChoZWFkZXJzLCB7XG4gICAgICBlbmRTdHJlYW06IHNob3VsZEVuZFN0cmVhbSxcbiAgICAgIHNpZ25hbFxuICAgIH0pXG4gICAgd3JpdGVCb2R5SDIoKVxuICB9XG5cbiAgLy8gSW5jcmVtZW50IGNvdW50ZXIgYXMgd2UgaGF2ZSBuZXcgc3RyZWFtcyBvcGVuXG4gICsrc2Vzc2lvbltrT3BlblN0cmVhbXNdXG5cbiAgc3RyZWFtLm9uY2UoJ3Jlc3BvbnNlJywgaGVhZGVycyA9PiB7XG4gICAgY29uc3QgeyBbSFRUUDJfSEVBREVSX1NUQVRVU106IHN0YXR1c0NvZGUsIC4uLnJlYWxIZWFkZXJzIH0gPSBoZWFkZXJzXG4gICAgcmVxdWVzdC5vblJlc3BvbnNlU3RhcnRlZCgpXG5cbiAgICAvLyBEdWUgdG8gdGhlIHN0cmVhbSBuYXR1cmUsIGl0IGlzIHBvc3NpYmxlIHdlIGZhY2UgYSByYWNlIGNvbmRpdGlvblxuICAgIC8vIHdoZXJlIHRoZSBzdHJlYW0gaGFzIGJlZW4gYXNzaWduZWQsIGJ1dCB0aGUgcmVxdWVzdCBoYXMgYmVlbiBhYm9ydGVkXG4gICAgLy8gdGhlIHJlcXVlc3QgcmVtYWlucyBpbi1mbGlnaHQgYW5kIGhlYWRlcnMgaGFzbid0IGJlZW4gcmVjZWl2ZWQgeWV0XG4gICAgLy8gZm9yIHRob3NlIHNjZW5hcmlvcywgYmVzdCBlZmZvcnQgaXMgdG8gZGVzdHJveSB0aGUgc3RyZWFtIGltbWVkaWF0ZWx5XG4gICAgLy8gYXMgdGhlcmUncyBubyB2YWx1ZSB0byBrZWVwIGl0IG9wZW4uXG4gICAgaWYgKHJlcXVlc3QuYWJvcnRlZCkge1xuICAgICAgY29uc3QgZXJyID0gbmV3IFJlcXVlc3RBYm9ydGVkRXJyb3IoKVxuICAgICAgdXRpbC5lcnJvclJlcXVlc3QoY2xpZW50LCByZXF1ZXN0LCBlcnIpXG4gICAgICB1dGlsLmRlc3Ryb3koc3RyZWFtLCBlcnIpXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBpZiAocmVxdWVzdC5vbkhlYWRlcnMoTnVtYmVyKHN0YXR1c0NvZGUpLCBwYXJzZUgySGVhZGVycyhyZWFsSGVhZGVycyksIHN0cmVhbS5yZXN1bWUuYmluZChzdHJlYW0pLCAnJykgPT09IGZhbHNlKSB7XG4gICAgICBzdHJlYW0ucGF1c2UoKVxuICAgIH1cblxuICAgIHN0cmVhbS5vbignZGF0YScsIChjaHVuaykgPT4ge1xuICAgICAgaWYgKHJlcXVlc3Qub25EYXRhKGNodW5rKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgc3RyZWFtLnBhdXNlKClcbiAgICAgIH1cbiAgICB9KVxuICB9KVxuXG4gIHN0cmVhbS5vbmNlKCdlbmQnLCAoKSA9PiB7XG4gICAgLy8gV2hlbiBzdGF0ZSBpcyBudWxsLCBpdCBtZWFucyB3ZSBoYXZlbid0IGNvbnN1bWVkIGJvZHkgYW5kIHRoZSBzdHJlYW0gc3RpbGwgZG8gbm90IGhhdmVcbiAgICAvLyBhIHN0YXRlLlxuICAgIC8vIFByZXNlbnQgc3BlY2lhbGx5IHdoZW4gdXNpbmcgcGlwZWxpbmUgb3Igc3RyZWFtXG4gICAgaWYgKHN0cmVhbS5zdGF0ZT8uc3RhdGUgPT0gbnVsbCB8fCBzdHJlYW0uc3RhdGUuc3RhdGUgPCA2KSB7XG4gICAgICByZXF1ZXN0Lm9uQ29tcGxldGUoW10pXG4gICAgfVxuXG4gICAgaWYgKHNlc3Npb25ba09wZW5TdHJlYW1zXSA9PT0gMCkge1xuICAgICAgLy8gU3RyZWFtIGlzIGNsb3NlZCBvciBoYWxmLWNsb3NlZC1yZW1vdGUgKDYpLCBkZWNyZW1lbnQgY291bnRlciBhbmQgY2xlYW51cFxuICAgICAgLy8gSXQgZG9lcyBub3QgaGF2ZSBzZW5zZSB0byBjb250aW51ZSB3b3JraW5nIHdpdGggdGhlIHN0cmVhbSBhcyB3ZSBkbyBub3RcbiAgICAgIC8vIGhhdmUgeWV0IFJTVF9TVFJFQU0gc3VwcG9ydCBvbiBjbGllbnQtc2lkZVxuXG4gICAgICBzZXNzaW9uLnVucmVmKClcbiAgICB9XG5cbiAgICBhYm9ydChuZXcgSW5mb3JtYXRpb25hbEVycm9yKCdIVFRQLzI6IHN0cmVhbSBoYWxmLWNsb3NlZCAocmVtb3RlKScpKVxuICAgIGNsaWVudFtrUXVldWVdW2NsaWVudFtrUnVubmluZ0lkeF0rK10gPSBudWxsXG4gICAgY2xpZW50W2tQZW5kaW5nSWR4XSA9IGNsaWVudFtrUnVubmluZ0lkeF1cbiAgICBjbGllbnRba1Jlc3VtZV0oKVxuICB9KVxuXG4gIHN0cmVhbS5vbmNlKCdjbG9zZScsICgpID0+IHtcbiAgICBzZXNzaW9uW2tPcGVuU3RyZWFtc10gLT0gMVxuICAgIGlmIChzZXNzaW9uW2tPcGVuU3RyZWFtc10gPT09IDApIHtcbiAgICAgIHNlc3Npb24udW5yZWYoKVxuICAgIH1cbiAgfSlcblxuICBzdHJlYW0ub25jZSgnZXJyb3InLCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgYWJvcnQoZXJyKVxuICB9KVxuXG4gIHN0cmVhbS5vbmNlKCdmcmFtZUVycm9yJywgKHR5cGUsIGNvZGUpID0+IHtcbiAgICBhYm9ydChuZXcgSW5mb3JtYXRpb25hbEVycm9yKGBIVFRQLzI6IFwiZnJhbWVFcnJvclwiIHJlY2VpdmVkIC0gdHlwZSAke3R5cGV9LCBjb2RlICR7Y29kZX1gKSlcbiAgfSlcblxuICAvLyBzdHJlYW0ub24oJ2Fib3J0ZWQnLCAoKSA9PiB7XG4gIC8vICAgLy8gVE9ETyhIVFRQLzIpOiBTdXBwb3J0IGFib3J0ZWRcbiAgLy8gfSlcblxuICAvLyBzdHJlYW0ub24oJ3RpbWVvdXQnLCAoKSA9PiB7XG4gIC8vICAgLy8gVE9ETyhIVFRQLzIpOiBTdXBwb3J0IHRpbWVvdXRcbiAgLy8gfSlcblxuICAvLyBzdHJlYW0ub24oJ3B1c2gnLCBoZWFkZXJzID0+IHtcbiAgLy8gICAvLyBUT0RPKEhUVFAvMik6IFN1cHBvcnQgcHVzaFxuICAvLyB9KVxuXG4gIC8vIHN0cmVhbS5vbigndHJhaWxlcnMnLCBoZWFkZXJzID0+IHtcbiAgLy8gICAvLyBUT0RPKEhUVFAvMik6IFN1cHBvcnQgdHJhaWxlcnNcbiAgLy8gfSlcblxuICByZXR1cm4gdHJ1ZVxuXG4gIGZ1bmN0aW9uIHdyaXRlQm9keUgyICgpIHtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZTogYXNzZXJ0aW9uICovXG4gICAgaWYgKCFib2R5IHx8IGNvbnRlbnRMZW5ndGggPT09IDApIHtcbiAgICAgIHdyaXRlQnVmZmVyKFxuICAgICAgICBhYm9ydCxcbiAgICAgICAgc3RyZWFtLFxuICAgICAgICBudWxsLFxuICAgICAgICBjbGllbnQsXG4gICAgICAgIHJlcXVlc3QsXG4gICAgICAgIGNsaWVudFtrU29ja2V0XSxcbiAgICAgICAgY29udGVudExlbmd0aCxcbiAgICAgICAgZXhwZWN0c1BheWxvYWRcbiAgICAgIClcbiAgICB9IGVsc2UgaWYgKHV0aWwuaXNCdWZmZXIoYm9keSkpIHtcbiAgICAgIHdyaXRlQnVmZmVyKFxuICAgICAgICBhYm9ydCxcbiAgICAgICAgc3RyZWFtLFxuICAgICAgICBib2R5LFxuICAgICAgICBjbGllbnQsXG4gICAgICAgIHJlcXVlc3QsXG4gICAgICAgIGNsaWVudFtrU29ja2V0XSxcbiAgICAgICAgY29udGVudExlbmd0aCxcbiAgICAgICAgZXhwZWN0c1BheWxvYWRcbiAgICAgIClcbiAgICB9IGVsc2UgaWYgKHV0aWwuaXNCbG9iTGlrZShib2R5KSkge1xuICAgICAgaWYgKHR5cGVvZiBib2R5LnN0cmVhbSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB3cml0ZUl0ZXJhYmxlKFxuICAgICAgICAgIGFib3J0LFxuICAgICAgICAgIHN0cmVhbSxcbiAgICAgICAgICBib2R5LnN0cmVhbSgpLFxuICAgICAgICAgIGNsaWVudCxcbiAgICAgICAgICByZXF1ZXN0LFxuICAgICAgICAgIGNsaWVudFtrU29ja2V0XSxcbiAgICAgICAgICBjb250ZW50TGVuZ3RoLFxuICAgICAgICAgIGV4cGVjdHNQYXlsb2FkXG4gICAgICAgIClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHdyaXRlQmxvYihcbiAgICAgICAgICBhYm9ydCxcbiAgICAgICAgICBzdHJlYW0sXG4gICAgICAgICAgYm9keSxcbiAgICAgICAgICBjbGllbnQsXG4gICAgICAgICAgcmVxdWVzdCxcbiAgICAgICAgICBjbGllbnRba1NvY2tldF0sXG4gICAgICAgICAgY29udGVudExlbmd0aCxcbiAgICAgICAgICBleHBlY3RzUGF5bG9hZFxuICAgICAgICApXG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh1dGlsLmlzU3RyZWFtKGJvZHkpKSB7XG4gICAgICB3cml0ZVN0cmVhbShcbiAgICAgICAgYWJvcnQsXG4gICAgICAgIGNsaWVudFtrU29ja2V0XSxcbiAgICAgICAgZXhwZWN0c1BheWxvYWQsXG4gICAgICAgIHN0cmVhbSxcbiAgICAgICAgYm9keSxcbiAgICAgICAgY2xpZW50LFxuICAgICAgICByZXF1ZXN0LFxuICAgICAgICBjb250ZW50TGVuZ3RoXG4gICAgICApXG4gICAgfSBlbHNlIGlmICh1dGlsLmlzSXRlcmFibGUoYm9keSkpIHtcbiAgICAgIHdyaXRlSXRlcmFibGUoXG4gICAgICAgIGFib3J0LFxuICAgICAgICBzdHJlYW0sXG4gICAgICAgIGJvZHksXG4gICAgICAgIGNsaWVudCxcbiAgICAgICAgcmVxdWVzdCxcbiAgICAgICAgY2xpZW50W2tTb2NrZXRdLFxuICAgICAgICBjb250ZW50TGVuZ3RoLFxuICAgICAgICBleHBlY3RzUGF5bG9hZFxuICAgICAgKVxuICAgIH0gZWxzZSB7XG4gICAgICBhc3NlcnQoZmFsc2UpXG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHdyaXRlQnVmZmVyIChhYm9ydCwgaDJzdHJlYW0sIGJvZHksIGNsaWVudCwgcmVxdWVzdCwgc29ja2V0LCBjb250ZW50TGVuZ3RoLCBleHBlY3RzUGF5bG9hZCkge1xuICB0cnkge1xuICAgIGlmIChib2R5ICE9IG51bGwgJiYgdXRpbC5pc0J1ZmZlcihib2R5KSkge1xuICAgICAgYXNzZXJ0KGNvbnRlbnRMZW5ndGggPT09IGJvZHkuYnl0ZUxlbmd0aCwgJ2J1ZmZlciBib2R5IG11c3QgaGF2ZSBjb250ZW50IGxlbmd0aCcpXG4gICAgICBoMnN0cmVhbS5jb3JrKClcbiAgICAgIGgyc3RyZWFtLndyaXRlKGJvZHkpXG4gICAgICBoMnN0cmVhbS51bmNvcmsoKVxuICAgICAgaDJzdHJlYW0uZW5kKClcblxuICAgICAgcmVxdWVzdC5vbkJvZHlTZW50KGJvZHkpXG4gICAgfVxuXG4gICAgaWYgKCFleHBlY3RzUGF5bG9hZCkge1xuICAgICAgc29ja2V0W2tSZXNldF0gPSB0cnVlXG4gICAgfVxuXG4gICAgcmVxdWVzdC5vblJlcXVlc3RTZW50KClcbiAgICBjbGllbnRba1Jlc3VtZV0oKVxuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGFib3J0KGVycm9yKVxuICB9XG59XG5cbmZ1bmN0aW9uIHdyaXRlU3RyZWFtIChhYm9ydCwgc29ja2V0LCBleHBlY3RzUGF5bG9hZCwgaDJzdHJlYW0sIGJvZHksIGNsaWVudCwgcmVxdWVzdCwgY29udGVudExlbmd0aCkge1xuICBhc3NlcnQoY29udGVudExlbmd0aCAhPT0gMCB8fCBjbGllbnRba1J1bm5pbmddID09PSAwLCAnc3RyZWFtIGJvZHkgY2Fubm90IGJlIHBpcGVsaW5lZCcpXG5cbiAgLy8gRm9yIEhUVFAvMiwgaXMgZW5vdWdoIHRvIHBpcGUgdGhlIHN0cmVhbVxuICBjb25zdCBwaXBlID0gcGlwZWxpbmUoXG4gICAgYm9keSxcbiAgICBoMnN0cmVhbSxcbiAgICAoZXJyKSA9PiB7XG4gICAgICBpZiAoZXJyKSB7XG4gICAgICAgIHV0aWwuZGVzdHJveShwaXBlLCBlcnIpXG4gICAgICAgIGFib3J0KGVycilcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHV0aWwucmVtb3ZlQWxsTGlzdGVuZXJzKHBpcGUpXG4gICAgICAgIHJlcXVlc3Qub25SZXF1ZXN0U2VudCgpXG5cbiAgICAgICAgaWYgKCFleHBlY3RzUGF5bG9hZCkge1xuICAgICAgICAgIHNvY2tldFtrUmVzZXRdID0gdHJ1ZVxuICAgICAgICB9XG5cbiAgICAgICAgY2xpZW50W2tSZXN1bWVdKClcbiAgICAgIH1cbiAgICB9XG4gIClcblxuICB1dGlsLmFkZExpc3RlbmVyKHBpcGUsICdkYXRhJywgb25QaXBlRGF0YSlcblxuICBmdW5jdGlvbiBvblBpcGVEYXRhIChjaHVuaykge1xuICAgIHJlcXVlc3Qub25Cb2R5U2VudChjaHVuaylcbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiB3cml0ZUJsb2IgKGFib3J0LCBoMnN0cmVhbSwgYm9keSwgY2xpZW50LCByZXF1ZXN0LCBzb2NrZXQsIGNvbnRlbnRMZW5ndGgsIGV4cGVjdHNQYXlsb2FkKSB7XG4gIGFzc2VydChjb250ZW50TGVuZ3RoID09PSBib2R5LnNpemUsICdibG9iIGJvZHkgbXVzdCBoYXZlIGNvbnRlbnQgbGVuZ3RoJylcblxuICB0cnkge1xuICAgIGlmIChjb250ZW50TGVuZ3RoICE9IG51bGwgJiYgY29udGVudExlbmd0aCAhPT0gYm9keS5zaXplKSB7XG4gICAgICB0aHJvdyBuZXcgUmVxdWVzdENvbnRlbnRMZW5ndGhNaXNtYXRjaEVycm9yKClcbiAgICB9XG5cbiAgICBjb25zdCBidWZmZXIgPSBCdWZmZXIuZnJvbShhd2FpdCBib2R5LmFycmF5QnVmZmVyKCkpXG5cbiAgICBoMnN0cmVhbS5jb3JrKClcbiAgICBoMnN0cmVhbS53cml0ZShidWZmZXIpXG4gICAgaDJzdHJlYW0udW5jb3JrKClcbiAgICBoMnN0cmVhbS5lbmQoKVxuXG4gICAgcmVxdWVzdC5vbkJvZHlTZW50KGJ1ZmZlcilcbiAgICByZXF1ZXN0Lm9uUmVxdWVzdFNlbnQoKVxuXG4gICAgaWYgKCFleHBlY3RzUGF5bG9hZCkge1xuICAgICAgc29ja2V0W2tSZXNldF0gPSB0cnVlXG4gICAgfVxuXG4gICAgY2xpZW50W2tSZXN1bWVdKClcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgYWJvcnQoZXJyKVxuICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHdyaXRlSXRlcmFibGUgKGFib3J0LCBoMnN0cmVhbSwgYm9keSwgY2xpZW50LCByZXF1ZXN0LCBzb2NrZXQsIGNvbnRlbnRMZW5ndGgsIGV4cGVjdHNQYXlsb2FkKSB7XG4gIGFzc2VydChjb250ZW50TGVuZ3RoICE9PSAwIHx8IGNsaWVudFtrUnVubmluZ10gPT09IDAsICdpdGVyYXRvciBib2R5IGNhbm5vdCBiZSBwaXBlbGluZWQnKVxuXG4gIGxldCBjYWxsYmFjayA9IG51bGxcbiAgZnVuY3Rpb24gb25EcmFpbiAoKSB7XG4gICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICBjb25zdCBjYiA9IGNhbGxiYWNrXG4gICAgICBjYWxsYmFjayA9IG51bGxcbiAgICAgIGNiKClcbiAgICB9XG4gIH1cblxuICBjb25zdCB3YWl0Rm9yRHJhaW4gPSAoKSA9PiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgYXNzZXJ0KGNhbGxiYWNrID09PSBudWxsKVxuXG4gICAgaWYgKHNvY2tldFtrRXJyb3JdKSB7XG4gICAgICByZWplY3Qoc29ja2V0W2tFcnJvcl0pXG4gICAgfSBlbHNlIHtcbiAgICAgIGNhbGxiYWNrID0gcmVzb2x2ZVxuICAgIH1cbiAgfSlcblxuICBoMnN0cmVhbVxuICAgIC5vbignY2xvc2UnLCBvbkRyYWluKVxuICAgIC5vbignZHJhaW4nLCBvbkRyYWluKVxuXG4gIHRyeSB7XG4gICAgLy8gSXQncyB1cCB0byB0aGUgdXNlciB0byBzb21laG93IGFib3J0IHRoZSBhc3luYyBpdGVyYWJsZS5cbiAgICBmb3IgYXdhaXQgKGNvbnN0IGNodW5rIG9mIGJvZHkpIHtcbiAgICAgIGlmIChzb2NrZXRba0Vycm9yXSkge1xuICAgICAgICB0aHJvdyBzb2NrZXRba0Vycm9yXVxuICAgICAgfVxuXG4gICAgICBjb25zdCByZXMgPSBoMnN0cmVhbS53cml0ZShjaHVuaylcbiAgICAgIHJlcXVlc3Qub25Cb2R5U2VudChjaHVuaylcbiAgICAgIGlmICghcmVzKSB7XG4gICAgICAgIGF3YWl0IHdhaXRGb3JEcmFpbigpXG4gICAgICB9XG4gICAgfVxuXG4gICAgaDJzdHJlYW0uZW5kKClcblxuICAgIHJlcXVlc3Qub25SZXF1ZXN0U2VudCgpXG5cbiAgICBpZiAoIWV4cGVjdHNQYXlsb2FkKSB7XG4gICAgICBzb2NrZXRba1Jlc2V0XSA9IHRydWVcbiAgICB9XG5cbiAgICBjbGllbnRba1Jlc3VtZV0oKVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICBhYm9ydChlcnIpXG4gIH0gZmluYWxseSB7XG4gICAgaDJzdHJlYW1cbiAgICAgIC5vZmYoJ2Nsb3NlJywgb25EcmFpbilcbiAgICAgIC5vZmYoJ2RyYWluJywgb25EcmFpbilcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNvbm5lY3RIMlxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB1dGlsID0gcmVxdWlyZSgnLi4vY29yZS91dGlsJylcbmNvbnN0IHsga0JvZHlVc2VkIH0gPSByZXF1aXJlKCcuLi9jb3JlL3N5bWJvbHMnKVxuY29uc3QgYXNzZXJ0ID0gcmVxdWlyZSgnbm9kZTphc3NlcnQnKVxuY29uc3QgeyBJbnZhbGlkQXJndW1lbnRFcnJvciB9ID0gcmVxdWlyZSgnLi4vY29yZS9lcnJvcnMnKVxuY29uc3QgRUUgPSByZXF1aXJlKCdub2RlOmV2ZW50cycpXG5cbmNvbnN0IHJlZGlyZWN0YWJsZVN0YXR1c0NvZGVzID0gWzMwMCwgMzAxLCAzMDIsIDMwMywgMzA3LCAzMDhdXG5cbmNvbnN0IGtCb2R5ID0gU3ltYm9sKCdib2R5JylcblxuY2xhc3MgQm9keUFzeW5jSXRlcmFibGUge1xuICBjb25zdHJ1Y3RvciAoYm9keSkge1xuICAgIHRoaXNba0JvZHldID0gYm9keVxuICAgIHRoaXNba0JvZHlVc2VkXSA9IGZhbHNlXG4gIH1cblxuICBhc3luYyAqIFtTeW1ib2wuYXN5bmNJdGVyYXRvcl0gKCkge1xuICAgIGFzc2VydCghdGhpc1trQm9keVVzZWRdLCAnZGlzdHVyYmVkJylcbiAgICB0aGlzW2tCb2R5VXNlZF0gPSB0cnVlXG4gICAgeWllbGQgKiB0aGlzW2tCb2R5XVxuICB9XG59XG5cbmNsYXNzIFJlZGlyZWN0SGFuZGxlciB7XG4gIGNvbnN0cnVjdG9yIChkaXNwYXRjaCwgbWF4UmVkaXJlY3Rpb25zLCBvcHRzLCBoYW5kbGVyKSB7XG4gICAgaWYgKG1heFJlZGlyZWN0aW9ucyAhPSBudWxsICYmICghTnVtYmVyLmlzSW50ZWdlcihtYXhSZWRpcmVjdGlvbnMpIHx8IG1heFJlZGlyZWN0aW9ucyA8IDApKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ21heFJlZGlyZWN0aW9ucyBtdXN0IGJlIGEgcG9zaXRpdmUgbnVtYmVyJylcbiAgICB9XG5cbiAgICB1dGlsLnZhbGlkYXRlSGFuZGxlcihoYW5kbGVyLCBvcHRzLm1ldGhvZCwgb3B0cy51cGdyYWRlKVxuXG4gICAgdGhpcy5kaXNwYXRjaCA9IGRpc3BhdGNoXG4gICAgdGhpcy5sb2NhdGlvbiA9IG51bGxcbiAgICB0aGlzLmFib3J0ID0gbnVsbFxuICAgIHRoaXMub3B0cyA9IHsgLi4ub3B0cywgbWF4UmVkaXJlY3Rpb25zOiAwIH0gLy8gb3B0cyBtdXN0IGJlIGEgY29weVxuICAgIHRoaXMubWF4UmVkaXJlY3Rpb25zID0gbWF4UmVkaXJlY3Rpb25zXG4gICAgdGhpcy5oYW5kbGVyID0gaGFuZGxlclxuICAgIHRoaXMuaGlzdG9yeSA9IFtdXG4gICAgdGhpcy5yZWRpcmVjdGlvbkxpbWl0UmVhY2hlZCA9IGZhbHNlXG5cbiAgICBpZiAodXRpbC5pc1N0cmVhbSh0aGlzLm9wdHMuYm9keSkpIHtcbiAgICAgIC8vIFRPRE8gKGZpeCk6IFByb3ZpZGUgc29tZSB3YXkgZm9yIHRoZSB1c2VyIHRvIGNhY2hlIHRoZSBmaWxlIHRvIGUuZy4gL3RtcFxuICAgICAgLy8gc28gdGhhdCBpdCBjYW4gYmUgZGlzcGF0Y2hlZCBhZ2Fpbj9cbiAgICAgIC8vIFRPRE8gKGZpeCk6IERvIHdlIG5lZWQgMTAwLWV4cGVjdCBzdXBwb3J0IHRvIHByb3ZpZGUgYSB3YXkgdG8gZG8gdGhpcyBwcm9wZXJseT9cbiAgICAgIGlmICh1dGlsLmJvZHlMZW5ndGgodGhpcy5vcHRzLmJvZHkpID09PSAwKSB7XG4gICAgICAgIHRoaXMub3B0cy5ib2R5XG4gICAgICAgICAgLm9uKCdkYXRhJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgYXNzZXJ0KGZhbHNlKVxuICAgICAgICAgIH0pXG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2YgdGhpcy5vcHRzLmJvZHkucmVhZGFibGVEaWRSZWFkICE9PSAnYm9vbGVhbicpIHtcbiAgICAgICAgdGhpcy5vcHRzLmJvZHlba0JvZHlVc2VkXSA9IGZhbHNlXG4gICAgICAgIEVFLnByb3RvdHlwZS5vbi5jYWxsKHRoaXMub3B0cy5ib2R5LCAnZGF0YScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICB0aGlzW2tCb2R5VXNlZF0gPSB0cnVlXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh0aGlzLm9wdHMuYm9keSAmJiB0eXBlb2YgdGhpcy5vcHRzLmJvZHkucGlwZVRvID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAvLyBUT0RPIChmaXgpOiBXZSBjYW4ndCBhY2Nlc3MgUmVhZGFibGVTdHJlYW0gaW50ZXJuYWwgc3RhdGVcbiAgICAgIC8vIHRvIGRldGVybWluZSB3aGV0aGVyIG9yIG5vdCBpdCBoYXMgYmVlbiBkaXN0dXJiZWQuIFRoaXMgaXMganVzdFxuICAgICAgLy8gYSB3b3JrYXJvdW5kLlxuICAgICAgdGhpcy5vcHRzLmJvZHkgPSBuZXcgQm9keUFzeW5jSXRlcmFibGUodGhpcy5vcHRzLmJvZHkpXG4gICAgfSBlbHNlIGlmIChcbiAgICAgIHRoaXMub3B0cy5ib2R5ICYmXG4gICAgICB0eXBlb2YgdGhpcy5vcHRzLmJvZHkgIT09ICdzdHJpbmcnICYmXG4gICAgICAhQXJyYXlCdWZmZXIuaXNWaWV3KHRoaXMub3B0cy5ib2R5KSAmJlxuICAgICAgdXRpbC5pc0l0ZXJhYmxlKHRoaXMub3B0cy5ib2R5KVxuICAgICkge1xuICAgICAgLy8gVE9ETzogU2hvdWxkIHdlIGFsbG93IHJlLXVzaW5nIGl0ZXJhYmxlIGlmICF0aGlzLm9wdHMuaWRlbXBvdGVudFxuICAgICAgLy8gb3IgdGhyb3VnaCBzb21lIG90aGVyIGZsYWc/XG4gICAgICB0aGlzLm9wdHMuYm9keSA9IG5ldyBCb2R5QXN5bmNJdGVyYWJsZSh0aGlzLm9wdHMuYm9keSlcbiAgICB9XG4gIH1cblxuICBvbkNvbm5lY3QgKGFib3J0KSB7XG4gICAgdGhpcy5hYm9ydCA9IGFib3J0XG4gICAgdGhpcy5oYW5kbGVyLm9uQ29ubmVjdChhYm9ydCwgeyBoaXN0b3J5OiB0aGlzLmhpc3RvcnkgfSlcbiAgfVxuXG4gIG9uVXBncmFkZSAoc3RhdHVzQ29kZSwgaGVhZGVycywgc29ja2V0KSB7XG4gICAgdGhpcy5oYW5kbGVyLm9uVXBncmFkZShzdGF0dXNDb2RlLCBoZWFkZXJzLCBzb2NrZXQpXG4gIH1cblxuICBvbkVycm9yIChlcnJvcikge1xuICAgIHRoaXMuaGFuZGxlci5vbkVycm9yKGVycm9yKVxuICB9XG5cbiAgb25IZWFkZXJzIChzdGF0dXNDb2RlLCBoZWFkZXJzLCByZXN1bWUsIHN0YXR1c1RleHQpIHtcbiAgICB0aGlzLmxvY2F0aW9uID0gdGhpcy5oaXN0b3J5Lmxlbmd0aCA+PSB0aGlzLm1heFJlZGlyZWN0aW9ucyB8fCB1dGlsLmlzRGlzdHVyYmVkKHRoaXMub3B0cy5ib2R5KVxuICAgICAgPyBudWxsXG4gICAgICA6IHBhcnNlTG9jYXRpb24oc3RhdHVzQ29kZSwgaGVhZGVycylcblxuICAgIGlmICh0aGlzLm9wdHMudGhyb3dPbk1heFJlZGlyZWN0ICYmIHRoaXMuaGlzdG9yeS5sZW5ndGggPj0gdGhpcy5tYXhSZWRpcmVjdGlvbnMpIHtcbiAgICAgIGlmICh0aGlzLnJlcXVlc3QpIHtcbiAgICAgICAgdGhpcy5yZXF1ZXN0LmFib3J0KG5ldyBFcnJvcignbWF4IHJlZGlyZWN0cycpKVxuICAgICAgfVxuXG4gICAgICB0aGlzLnJlZGlyZWN0aW9uTGltaXRSZWFjaGVkID0gdHJ1ZVxuICAgICAgdGhpcy5hYm9ydChuZXcgRXJyb3IoJ21heCByZWRpcmVjdHMnKSlcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGlmICh0aGlzLm9wdHMub3JpZ2luKSB7XG4gICAgICB0aGlzLmhpc3RvcnkucHVzaChuZXcgVVJMKHRoaXMub3B0cy5wYXRoLCB0aGlzLm9wdHMub3JpZ2luKSlcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMubG9jYXRpb24pIHtcbiAgICAgIHJldHVybiB0aGlzLmhhbmRsZXIub25IZWFkZXJzKHN0YXR1c0NvZGUsIGhlYWRlcnMsIHJlc3VtZSwgc3RhdHVzVGV4dClcbiAgICB9XG5cbiAgICBjb25zdCB7IG9yaWdpbiwgcGF0aG5hbWUsIHNlYXJjaCB9ID0gdXRpbC5wYXJzZVVSTChuZXcgVVJMKHRoaXMubG9jYXRpb24sIHRoaXMub3B0cy5vcmlnaW4gJiYgbmV3IFVSTCh0aGlzLm9wdHMucGF0aCwgdGhpcy5vcHRzLm9yaWdpbikpKVxuICAgIGNvbnN0IHBhdGggPSBzZWFyY2ggPyBgJHtwYXRobmFtZX0ke3NlYXJjaH1gIDogcGF0aG5hbWVcblxuICAgIC8vIFJlbW92ZSBoZWFkZXJzIHJlZmVycmluZyB0byB0aGUgb3JpZ2luYWwgVVJMLlxuICAgIC8vIEJ5IGRlZmF1bHQgaXQgaXMgSG9zdCBvbmx5LCB1bmxlc3MgaXQncyBhIDMwMyAoc2VlIGJlbG93KSwgd2hpY2ggcmVtb3ZlcyBhbHNvIGFsbCBDb250ZW50LSogaGVhZGVycy5cbiAgICAvLyBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNzIzMSNzZWN0aW9uLTYuNFxuICAgIHRoaXMub3B0cy5oZWFkZXJzID0gY2xlYW5SZXF1ZXN0SGVhZGVycyh0aGlzLm9wdHMuaGVhZGVycywgc3RhdHVzQ29kZSA9PT0gMzAzLCB0aGlzLm9wdHMub3JpZ2luICE9PSBvcmlnaW4pXG4gICAgdGhpcy5vcHRzLnBhdGggPSBwYXRoXG4gICAgdGhpcy5vcHRzLm9yaWdpbiA9IG9yaWdpblxuICAgIHRoaXMub3B0cy5tYXhSZWRpcmVjdGlvbnMgPSAwXG4gICAgdGhpcy5vcHRzLnF1ZXJ5ID0gbnVsbFxuXG4gICAgLy8gaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzcyMzEjc2VjdGlvbi02LjQuNFxuICAgIC8vIEluIGNhc2Ugb2YgSFRUUCAzMDMsIGFsd2F5cyByZXBsYWNlIG1ldGhvZCB0byBiZSBlaXRoZXIgSEVBRCBvciBHRVRcbiAgICBpZiAoc3RhdHVzQ29kZSA9PT0gMzAzICYmIHRoaXMub3B0cy5tZXRob2QgIT09ICdIRUFEJykge1xuICAgICAgdGhpcy5vcHRzLm1ldGhvZCA9ICdHRVQnXG4gICAgICB0aGlzLm9wdHMuYm9keSA9IG51bGxcbiAgICB9XG4gIH1cblxuICBvbkRhdGEgKGNodW5rKSB7XG4gICAgaWYgKHRoaXMubG9jYXRpb24pIHtcbiAgICAgIC8qXG4gICAgICAgIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM3MjMxI3NlY3Rpb24tNi40XG5cbiAgICAgICAgVExEUjogdW5kaWNpIGFsd2F5cyBpZ25vcmVzIDN4eCByZXNwb25zZSBib2RpZXMuXG5cbiAgICAgICAgUmVkaXJlY3Rpb24gaXMgdXNlZCB0byBzZXJ2ZSB0aGUgcmVxdWVzdGVkIHJlc291cmNlIGZyb20gYW5vdGhlciBVUkwsIHNvIGl0IGlzIGFzc3VtZXMgdGhhdFxuICAgICAgICBubyBib2R5IGlzIGdlbmVyYXRlZCAoYW5kIHRodXMgY2FuIGJlIGlnbm9yZWQpLiBFdmVuIHRob3VnaCBnZW5lcmF0aW5nIGEgYm9keSBpcyBub3QgcHJvaGliaXRlZC5cblxuICAgICAgICBGb3Igc3RhdHVzIDMwMSwgMzAyLCAzMDMsIDMwNyBhbmQgMzA4ICh0aGUgbGF0dGVyIGZyb20gUkZDIDcyMzgpLCB0aGUgc3BlY3MgbWVudGlvbiB0aGF0IHRoZSBib2R5IHVzdWFsbHlcbiAgICAgICAgKHdoaWNoIG1lYW5zIGl0J3Mgb3B0aW9uYWwgYW5kIG5vdCBtYW5kYXRlZCkgY29udGFpbiBqdXN0IGFuIGh5cGVybGluayB0byB0aGUgdmFsdWUgb2ZcbiAgICAgICAgdGhlIExvY2F0aW9uIHJlc3BvbnNlIGhlYWRlciwgc28gdGhlIGJvZHkgY2FuIGJlIGlnbm9yZWQgc2FmZWx5LlxuXG4gICAgICAgIEZvciBzdGF0dXMgMzAwLCB3aGljaCBpcyBcIk11bHRpcGxlIENob2ljZXNcIiwgdGhlIHNwZWMgbWVudGlvbnMgYm90aCBnZW5lcmF0aW5nIGEgTG9jYXRpb25cbiAgICAgICAgcmVzcG9uc2UgaGVhZGVyIEFORCBhIHJlc3BvbnNlIGJvZHkgd2l0aCB0aGUgb3RoZXIgcG9zc2libGUgbG9jYXRpb24gdG8gZm9sbG93LlxuICAgICAgICBTaW5jZSB0aGUgc3BlYyBleHBsaWNpdGx5IGNob29zZXMgbm90IHRvIHNwZWNpZnkgYSBmb3JtYXQgZm9yIHN1Y2ggYm9keSBhbmQgbGVhdmUgaXQgdG9cbiAgICAgICAgc2VydmVycyBhbmQgYnJvd3NlcnMgaW1wbGVtZW50b3JzLCB3ZSBpZ25vcmUgdGhlIGJvZHkgYXMgdGhlcmUgaXMgbm8gc3BlY2lmaWVkIHdheSB0byBldmVudHVhbGx5IHBhcnNlIGl0LlxuICAgICAgKi9cbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRoaXMuaGFuZGxlci5vbkRhdGEoY2h1bmspXG4gICAgfVxuICB9XG5cbiAgb25Db21wbGV0ZSAodHJhaWxlcnMpIHtcbiAgICBpZiAodGhpcy5sb2NhdGlvbikge1xuICAgICAgLypcbiAgICAgICAgaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzcyMzEjc2VjdGlvbi02LjRcblxuICAgICAgICBUTERSOiB1bmRpY2kgYWx3YXlzIGlnbm9yZXMgM3h4IHJlc3BvbnNlIHRyYWlsZXJzIGFzIHRoZXkgYXJlIG5vdCBleHBlY3RlZCBpbiBjYXNlIG9mIHJlZGlyZWN0aW9uc1xuICAgICAgICBhbmQgbmVpdGhlciBhcmUgdXNlZnVsIGlmIHByZXNlbnQuXG5cbiAgICAgICAgU2VlIGNvbW1lbnQgb24gb25EYXRhIG1ldGhvZCBhYm92ZSBmb3IgbW9yZSBkZXRhaWxlZCBpbmZvcm1hdGlvbi5cbiAgICAgICovXG5cbiAgICAgIHRoaXMubG9jYXRpb24gPSBudWxsXG4gICAgICB0aGlzLmFib3J0ID0gbnVsbFxuXG4gICAgICB0aGlzLmRpc3BhdGNoKHRoaXMub3B0cywgdGhpcylcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5oYW5kbGVyLm9uQ29tcGxldGUodHJhaWxlcnMpXG4gICAgfVxuICB9XG5cbiAgb25Cb2R5U2VudCAoY2h1bmspIHtcbiAgICBpZiAodGhpcy5oYW5kbGVyLm9uQm9keVNlbnQpIHtcbiAgICAgIHRoaXMuaGFuZGxlci5vbkJvZHlTZW50KGNodW5rKVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBwYXJzZUxvY2F0aW9uIChzdGF0dXNDb2RlLCBoZWFkZXJzKSB7XG4gIGlmIChyZWRpcmVjdGFibGVTdGF0dXNDb2Rlcy5pbmRleE9mKHN0YXR1c0NvZGUpID09PSAtMSkge1xuICAgIHJldHVybiBudWxsXG4gIH1cblxuICBmb3IgKGxldCBpID0gMDsgaSA8IGhlYWRlcnMubGVuZ3RoOyBpICs9IDIpIHtcbiAgICBpZiAoaGVhZGVyc1tpXS5sZW5ndGggPT09IDggJiYgdXRpbC5oZWFkZXJOYW1lVG9TdHJpbmcoaGVhZGVyc1tpXSkgPT09ICdsb2NhdGlvbicpIHtcbiAgICAgIHJldHVybiBoZWFkZXJzW2kgKyAxXVxuICAgIH1cbiAgfVxufVxuXG4vLyBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNzIzMSNzZWN0aW9uLTYuNC40XG5mdW5jdGlvbiBzaG91bGRSZW1vdmVIZWFkZXIgKGhlYWRlciwgcmVtb3ZlQ29udGVudCwgdW5rbm93bk9yaWdpbikge1xuICBpZiAoaGVhZGVyLmxlbmd0aCA9PT0gNCkge1xuICAgIHJldHVybiB1dGlsLmhlYWRlck5hbWVUb1N0cmluZyhoZWFkZXIpID09PSAnaG9zdCdcbiAgfVxuICBpZiAocmVtb3ZlQ29udGVudCAmJiB1dGlsLmhlYWRlck5hbWVUb1N0cmluZyhoZWFkZXIpLnN0YXJ0c1dpdGgoJ2NvbnRlbnQtJykpIHtcbiAgICByZXR1cm4gdHJ1ZVxuICB9XG4gIGlmICh1bmtub3duT3JpZ2luICYmIChoZWFkZXIubGVuZ3RoID09PSAxMyB8fCBoZWFkZXIubGVuZ3RoID09PSA2IHx8IGhlYWRlci5sZW5ndGggPT09IDE5KSkge1xuICAgIGNvbnN0IG5hbWUgPSB1dGlsLmhlYWRlck5hbWVUb1N0cmluZyhoZWFkZXIpXG4gICAgcmV0dXJuIG5hbWUgPT09ICdhdXRob3JpemF0aW9uJyB8fCBuYW1lID09PSAnY29va2llJyB8fCBuYW1lID09PSAncHJveHktYXV0aG9yaXphdGlvbidcbiAgfVxuICByZXR1cm4gZmFsc2Vcbn1cblxuLy8gaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzcyMzEjc2VjdGlvbi02LjRcbmZ1bmN0aW9uIGNsZWFuUmVxdWVzdEhlYWRlcnMgKGhlYWRlcnMsIHJlbW92ZUNvbnRlbnQsIHVua25vd25PcmlnaW4pIHtcbiAgY29uc3QgcmV0ID0gW11cbiAgaWYgKEFycmF5LmlzQXJyYXkoaGVhZGVycykpIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGhlYWRlcnMubGVuZ3RoOyBpICs9IDIpIHtcbiAgICAgIGlmICghc2hvdWxkUmVtb3ZlSGVhZGVyKGhlYWRlcnNbaV0sIHJlbW92ZUNvbnRlbnQsIHVua25vd25PcmlnaW4pKSB7XG4gICAgICAgIHJldC5wdXNoKGhlYWRlcnNbaV0sIGhlYWRlcnNbaSArIDFdKVxuICAgICAgfVxuICAgIH1cbiAgfSBlbHNlIGlmIChoZWFkZXJzICYmIHR5cGVvZiBoZWFkZXJzID09PSAnb2JqZWN0Jykge1xuICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5rZXlzKGhlYWRlcnMpKSB7XG4gICAgICBpZiAoIXNob3VsZFJlbW92ZUhlYWRlcihrZXksIHJlbW92ZUNvbnRlbnQsIHVua25vd25PcmlnaW4pKSB7XG4gICAgICAgIHJldC5wdXNoKGtleSwgaGVhZGVyc1trZXldKVxuICAgICAgfVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBhc3NlcnQoaGVhZGVycyA9PSBudWxsLCAnaGVhZGVycyBtdXN0IGJlIGFuIG9iamVjdCBvciBhbiBhcnJheScpXG4gIH1cbiAgcmV0dXJuIHJldFxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IFJlZGlyZWN0SGFuZGxlclxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCBSZWRpcmVjdEhhbmRsZXIgPSByZXF1aXJlKCcuLi9oYW5kbGVyL3JlZGlyZWN0LWhhbmRsZXInKVxuXG5mdW5jdGlvbiBjcmVhdGVSZWRpcmVjdEludGVyY2VwdG9yICh7IG1heFJlZGlyZWN0aW9uczogZGVmYXVsdE1heFJlZGlyZWN0aW9ucyB9KSB7XG4gIHJldHVybiAoZGlzcGF0Y2gpID0+IHtcbiAgICByZXR1cm4gZnVuY3Rpb24gSW50ZXJjZXB0IChvcHRzLCBoYW5kbGVyKSB7XG4gICAgICBjb25zdCB7IG1heFJlZGlyZWN0aW9ucyA9IGRlZmF1bHRNYXhSZWRpcmVjdGlvbnMgfSA9IG9wdHNcblxuICAgICAgaWYgKCFtYXhSZWRpcmVjdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIGRpc3BhdGNoKG9wdHMsIGhhbmRsZXIpXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHJlZGlyZWN0SGFuZGxlciA9IG5ldyBSZWRpcmVjdEhhbmRsZXIoZGlzcGF0Y2gsIG1heFJlZGlyZWN0aW9ucywgb3B0cywgaGFuZGxlcilcbiAgICAgIG9wdHMgPSB7IC4uLm9wdHMsIG1heFJlZGlyZWN0aW9uczogMCB9IC8vIFN0b3Agc3ViIGRpc3BhdGNoZXIgZnJvbSBhbHNvIHJlZGlyZWN0aW5nLlxuICAgICAgcmV0dXJuIGRpc3BhdGNoKG9wdHMsIHJlZGlyZWN0SGFuZGxlcilcbiAgICB9XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjcmVhdGVSZWRpcmVjdEludGVyY2VwdG9yXG4iLCAiLy8gQHRzLWNoZWNrXG5cbid1c2Ugc3RyaWN0J1xuXG5jb25zdCBhc3NlcnQgPSByZXF1aXJlKCdub2RlOmFzc2VydCcpXG5jb25zdCBuZXQgPSByZXF1aXJlKCdub2RlOm5ldCcpXG5jb25zdCBodHRwID0gcmVxdWlyZSgnbm9kZTpodHRwJylcbmNvbnN0IHV0aWwgPSByZXF1aXJlKCcuLi9jb3JlL3V0aWwuanMnKVxuY29uc3QgeyBjaGFubmVscyB9ID0gcmVxdWlyZSgnLi4vY29yZS9kaWFnbm9zdGljcy5qcycpXG5jb25zdCBSZXF1ZXN0ID0gcmVxdWlyZSgnLi4vY29yZS9yZXF1ZXN0LmpzJylcbmNvbnN0IERpc3BhdGNoZXJCYXNlID0gcmVxdWlyZSgnLi9kaXNwYXRjaGVyLWJhc2UnKVxuY29uc3Qge1xuICBJbnZhbGlkQXJndW1lbnRFcnJvcixcbiAgSW5mb3JtYXRpb25hbEVycm9yLFxuICBDbGllbnREZXN0cm95ZWRFcnJvclxufSA9IHJlcXVpcmUoJy4uL2NvcmUvZXJyb3JzLmpzJylcbmNvbnN0IGJ1aWxkQ29ubmVjdG9yID0gcmVxdWlyZSgnLi4vY29yZS9jb25uZWN0LmpzJylcbmNvbnN0IHtcbiAga1VybCxcbiAga1NlcnZlck5hbWUsXG4gIGtDbGllbnQsXG4gIGtCdXN5LFxuICBrQ29ubmVjdCxcbiAga1Jlc3VtaW5nLFxuICBrUnVubmluZyxcbiAga1BlbmRpbmcsXG4gIGtTaXplLFxuICBrUXVldWUsXG4gIGtDb25uZWN0ZWQsXG4gIGtDb25uZWN0aW5nLFxuICBrTmVlZERyYWluLFxuICBrS2VlcEFsaXZlRGVmYXVsdFRpbWVvdXQsXG4gIGtIb3N0SGVhZGVyLFxuICBrUGVuZGluZ0lkeCxcbiAga1J1bm5pbmdJZHgsXG4gIGtFcnJvcixcbiAga1BpcGVsaW5pbmcsXG4gIGtLZWVwQWxpdmVUaW1lb3V0VmFsdWUsXG4gIGtNYXhIZWFkZXJzU2l6ZSxcbiAga0tlZXBBbGl2ZU1heFRpbWVvdXQsXG4gIGtLZWVwQWxpdmVUaW1lb3V0VGhyZXNob2xkLFxuICBrSGVhZGVyc1RpbWVvdXQsXG4gIGtCb2R5VGltZW91dCxcbiAga1N0cmljdENvbnRlbnRMZW5ndGgsXG4gIGtDb25uZWN0b3IsXG4gIGtNYXhSZWRpcmVjdGlvbnMsXG4gIGtNYXhSZXF1ZXN0cyxcbiAga0NvdW50ZXIsXG4gIGtDbG9zZSxcbiAga0Rlc3Ryb3ksXG4gIGtEaXNwYXRjaCxcbiAga0ludGVyY2VwdG9ycyxcbiAga0xvY2FsQWRkcmVzcyxcbiAga01heFJlc3BvbnNlU2l6ZSxcbiAga09uRXJyb3IsXG4gIGtIVFRQQ29udGV4dCxcbiAga01heENvbmN1cnJlbnRTdHJlYW1zLFxuICBrUmVzdW1lXG59ID0gcmVxdWlyZSgnLi4vY29yZS9zeW1ib2xzLmpzJylcbmNvbnN0IGNvbm5lY3RIMSA9IHJlcXVpcmUoJy4vY2xpZW50LWgxLmpzJylcbmNvbnN0IGNvbm5lY3RIMiA9IHJlcXVpcmUoJy4vY2xpZW50LWgyLmpzJylcbmxldCBkZXByZWNhdGVkSW50ZXJjZXB0b3JXYXJuZWQgPSBmYWxzZVxuXG5jb25zdCBrQ2xvc2VkUmVzb2x2ZSA9IFN5bWJvbCgna0Nsb3NlZFJlc29sdmUnKVxuXG5jb25zdCBub29wID0gKCkgPT4ge31cblxuZnVuY3Rpb24gZ2V0UGlwZWxpbmluZyAoY2xpZW50KSB7XG4gIHJldHVybiBjbGllbnRba1BpcGVsaW5pbmddID8/IGNsaWVudFtrSFRUUENvbnRleHRdPy5kZWZhdWx0UGlwZWxpbmluZyA/PyAxXG59XG5cbi8qKlxuICogQHR5cGUge2ltcG9ydCgnLi4vLi4vdHlwZXMvY2xpZW50LmpzJykuZGVmYXVsdH1cbiAqL1xuY2xhc3MgQ2xpZW50IGV4dGVuZHMgRGlzcGF0Y2hlckJhc2Uge1xuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd8VVJMfSB1cmxcbiAgICogQHBhcmFtIHtpbXBvcnQoJy4uLy4uL3R5cGVzL2NsaWVudC5qcycpLkNsaWVudC5PcHRpb25zfSBvcHRpb25zXG4gICAqL1xuICBjb25zdHJ1Y3RvciAodXJsLCB7XG4gICAgaW50ZXJjZXB0b3JzLFxuICAgIG1heEhlYWRlclNpemUsXG4gICAgaGVhZGVyc1RpbWVvdXQsXG4gICAgc29ja2V0VGltZW91dCxcbiAgICByZXF1ZXN0VGltZW91dCxcbiAgICBjb25uZWN0VGltZW91dCxcbiAgICBib2R5VGltZW91dCxcbiAgICBpZGxlVGltZW91dCxcbiAgICBrZWVwQWxpdmUsXG4gICAga2VlcEFsaXZlVGltZW91dCxcbiAgICBtYXhLZWVwQWxpdmVUaW1lb3V0LFxuICAgIGtlZXBBbGl2ZU1heFRpbWVvdXQsXG4gICAga2VlcEFsaXZlVGltZW91dFRocmVzaG9sZCxcbiAgICBzb2NrZXRQYXRoLFxuICAgIHBpcGVsaW5pbmcsXG4gICAgdGxzLFxuICAgIHN0cmljdENvbnRlbnRMZW5ndGgsXG4gICAgbWF4Q2FjaGVkU2Vzc2lvbnMsXG4gICAgbWF4UmVkaXJlY3Rpb25zLFxuICAgIGNvbm5lY3QsXG4gICAgbWF4UmVxdWVzdHNQZXJDbGllbnQsXG4gICAgbG9jYWxBZGRyZXNzLFxuICAgIG1heFJlc3BvbnNlU2l6ZSxcbiAgICBhdXRvU2VsZWN0RmFtaWx5LFxuICAgIGF1dG9TZWxlY3RGYW1pbHlBdHRlbXB0VGltZW91dCxcbiAgICAvLyBoMlxuICAgIG1heENvbmN1cnJlbnRTdHJlYW1zLFxuICAgIGFsbG93SDJcbiAgfSA9IHt9KSB7XG4gICAgc3VwZXIoKVxuXG4gICAgaWYgKGtlZXBBbGl2ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ3Vuc3VwcG9ydGVkIGtlZXBBbGl2ZSwgdXNlIHBpcGVsaW5pbmc9MCBpbnN0ZWFkJylcbiAgICB9XG5cbiAgICBpZiAoc29ja2V0VGltZW91dCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ3Vuc3VwcG9ydGVkIHNvY2tldFRpbWVvdXQsIHVzZSBoZWFkZXJzVGltZW91dCAmIGJvZHlUaW1lb3V0IGluc3RlYWQnKVxuICAgIH1cblxuICAgIGlmIChyZXF1ZXN0VGltZW91dCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ3Vuc3VwcG9ydGVkIHJlcXVlc3RUaW1lb3V0LCB1c2UgaGVhZGVyc1RpbWVvdXQgJiBib2R5VGltZW91dCBpbnN0ZWFkJylcbiAgICB9XG5cbiAgICBpZiAoaWRsZVRpbWVvdXQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCd1bnN1cHBvcnRlZCBpZGxlVGltZW91dCwgdXNlIGtlZXBBbGl2ZVRpbWVvdXQgaW5zdGVhZCcpXG4gICAgfVxuXG4gICAgaWYgKG1heEtlZXBBbGl2ZVRpbWVvdXQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCd1bnN1cHBvcnRlZCBtYXhLZWVwQWxpdmVUaW1lb3V0LCB1c2Uga2VlcEFsaXZlTWF4VGltZW91dCBpbnN0ZWFkJylcbiAgICB9XG5cbiAgICBpZiAobWF4SGVhZGVyU2l6ZSAhPSBudWxsICYmICFOdW1iZXIuaXNGaW5pdGUobWF4SGVhZGVyU2l6ZSkpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBtYXhIZWFkZXJTaXplJylcbiAgICB9XG5cbiAgICBpZiAoc29ja2V0UGF0aCAhPSBudWxsICYmIHR5cGVvZiBzb2NrZXRQYXRoICE9PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIHNvY2tldFBhdGgnKVxuICAgIH1cblxuICAgIGlmIChjb25uZWN0VGltZW91dCAhPSBudWxsICYmICghTnVtYmVyLmlzRmluaXRlKGNvbm5lY3RUaW1lb3V0KSB8fCBjb25uZWN0VGltZW91dCA8IDApKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgY29ubmVjdFRpbWVvdXQnKVxuICAgIH1cblxuICAgIGlmIChrZWVwQWxpdmVUaW1lb3V0ICE9IG51bGwgJiYgKCFOdW1iZXIuaXNGaW5pdGUoa2VlcEFsaXZlVGltZW91dCkgfHwga2VlcEFsaXZlVGltZW91dCA8PSAwKSkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIGtlZXBBbGl2ZVRpbWVvdXQnKVxuICAgIH1cblxuICAgIGlmIChrZWVwQWxpdmVNYXhUaW1lb3V0ICE9IG51bGwgJiYgKCFOdW1iZXIuaXNGaW5pdGUoa2VlcEFsaXZlTWF4VGltZW91dCkgfHwga2VlcEFsaXZlTWF4VGltZW91dCA8PSAwKSkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIGtlZXBBbGl2ZU1heFRpbWVvdXQnKVxuICAgIH1cblxuICAgIGlmIChrZWVwQWxpdmVUaW1lb3V0VGhyZXNob2xkICE9IG51bGwgJiYgIU51bWJlci5pc0Zpbml0ZShrZWVwQWxpdmVUaW1lb3V0VGhyZXNob2xkKSkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIGtlZXBBbGl2ZVRpbWVvdXRUaHJlc2hvbGQnKVxuICAgIH1cblxuICAgIGlmIChoZWFkZXJzVGltZW91dCAhPSBudWxsICYmICghTnVtYmVyLmlzSW50ZWdlcihoZWFkZXJzVGltZW91dCkgfHwgaGVhZGVyc1RpbWVvdXQgPCAwKSkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdoZWFkZXJzVGltZW91dCBtdXN0IGJlIGEgcG9zaXRpdmUgaW50ZWdlciBvciB6ZXJvJylcbiAgICB9XG5cbiAgICBpZiAoYm9keVRpbWVvdXQgIT0gbnVsbCAmJiAoIU51bWJlci5pc0ludGVnZXIoYm9keVRpbWVvdXQpIHx8IGJvZHlUaW1lb3V0IDwgMCkpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignYm9keVRpbWVvdXQgbXVzdCBiZSBhIHBvc2l0aXZlIGludGVnZXIgb3IgemVybycpXG4gICAgfVxuXG4gICAgaWYgKGNvbm5lY3QgIT0gbnVsbCAmJiB0eXBlb2YgY29ubmVjdCAhPT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgY29ubmVjdCAhPT0gJ29iamVjdCcpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignY29ubmVjdCBtdXN0IGJlIGEgZnVuY3Rpb24gb3IgYW4gb2JqZWN0JylcbiAgICB9XG5cbiAgICBpZiAobWF4UmVkaXJlY3Rpb25zICE9IG51bGwgJiYgKCFOdW1iZXIuaXNJbnRlZ2VyKG1heFJlZGlyZWN0aW9ucykgfHwgbWF4UmVkaXJlY3Rpb25zIDwgMCkpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignbWF4UmVkaXJlY3Rpb25zIG11c3QgYmUgYSBwb3NpdGl2ZSBudW1iZXInKVxuICAgIH1cblxuICAgIGlmIChtYXhSZXF1ZXN0c1BlckNsaWVudCAhPSBudWxsICYmICghTnVtYmVyLmlzSW50ZWdlcihtYXhSZXF1ZXN0c1BlckNsaWVudCkgfHwgbWF4UmVxdWVzdHNQZXJDbGllbnQgPCAwKSkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdtYXhSZXF1ZXN0c1BlckNsaWVudCBtdXN0IGJlIGEgcG9zaXRpdmUgbnVtYmVyJylcbiAgICB9XG5cbiAgICBpZiAobG9jYWxBZGRyZXNzICE9IG51bGwgJiYgKHR5cGVvZiBsb2NhbEFkZHJlc3MgIT09ICdzdHJpbmcnIHx8IG5ldC5pc0lQKGxvY2FsQWRkcmVzcykgPT09IDApKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2xvY2FsQWRkcmVzcyBtdXN0IGJlIHZhbGlkIHN0cmluZyBJUCBhZGRyZXNzJylcbiAgICB9XG5cbiAgICBpZiAobWF4UmVzcG9uc2VTaXplICE9IG51bGwgJiYgKCFOdW1iZXIuaXNJbnRlZ2VyKG1heFJlc3BvbnNlU2l6ZSkgfHwgbWF4UmVzcG9uc2VTaXplIDwgLTEpKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ21heFJlc3BvbnNlU2l6ZSBtdXN0IGJlIGEgcG9zaXRpdmUgbnVtYmVyJylcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICBhdXRvU2VsZWN0RmFtaWx5QXR0ZW1wdFRpbWVvdXQgIT0gbnVsbCAmJlxuICAgICAgKCFOdW1iZXIuaXNJbnRlZ2VyKGF1dG9TZWxlY3RGYW1pbHlBdHRlbXB0VGltZW91dCkgfHwgYXV0b1NlbGVjdEZhbWlseUF0dGVtcHRUaW1lb3V0IDwgLTEpXG4gICAgKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2F1dG9TZWxlY3RGYW1pbHlBdHRlbXB0VGltZW91dCBtdXN0IGJlIGEgcG9zaXRpdmUgbnVtYmVyJylcbiAgICB9XG5cbiAgICAvLyBoMlxuICAgIGlmIChhbGxvd0gyICE9IG51bGwgJiYgdHlwZW9mIGFsbG93SDIgIT09ICdib29sZWFuJykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdhbGxvd0gyIG11c3QgYmUgYSB2YWxpZCBib29sZWFuIHZhbHVlJylcbiAgICB9XG5cbiAgICBpZiAobWF4Q29uY3VycmVudFN0cmVhbXMgIT0gbnVsbCAmJiAodHlwZW9mIG1heENvbmN1cnJlbnRTdHJlYW1zICE9PSAnbnVtYmVyJyB8fCBtYXhDb25jdXJyZW50U3RyZWFtcyA8IDEpKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ21heENvbmN1cnJlbnRTdHJlYW1zIG11c3QgYmUgYSBwb3NpdGl2ZSBpbnRlZ2VyLCBncmVhdGVyIHRoYW4gMCcpXG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBjb25uZWN0ICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICBjb25uZWN0ID0gYnVpbGRDb25uZWN0b3Ioe1xuICAgICAgICAuLi50bHMsXG4gICAgICAgIG1heENhY2hlZFNlc3Npb25zLFxuICAgICAgICBhbGxvd0gyLFxuICAgICAgICBzb2NrZXRQYXRoLFxuICAgICAgICB0aW1lb3V0OiBjb25uZWN0VGltZW91dCxcbiAgICAgICAgLi4uKGF1dG9TZWxlY3RGYW1pbHkgPyB7IGF1dG9TZWxlY3RGYW1pbHksIGF1dG9TZWxlY3RGYW1pbHlBdHRlbXB0VGltZW91dCB9IDogdW5kZWZpbmVkKSxcbiAgICAgICAgLi4uY29ubmVjdFxuICAgICAgfSlcbiAgICB9XG5cbiAgICBpZiAoaW50ZXJjZXB0b3JzPy5DbGllbnQgJiYgQXJyYXkuaXNBcnJheShpbnRlcmNlcHRvcnMuQ2xpZW50KSkge1xuICAgICAgdGhpc1trSW50ZXJjZXB0b3JzXSA9IGludGVyY2VwdG9ycy5DbGllbnRcbiAgICAgIGlmICghZGVwcmVjYXRlZEludGVyY2VwdG9yV2FybmVkKSB7XG4gICAgICAgIGRlcHJlY2F0ZWRJbnRlcmNlcHRvcldhcm5lZCA9IHRydWVcbiAgICAgICAgcHJvY2Vzcy5lbWl0V2FybmluZygnQ2xpZW50Lk9wdGlvbnMjaW50ZXJjZXB0b3IgaXMgZGVwcmVjYXRlZC4gVXNlIERpc3BhdGNoZXIjY29tcG9zZSBpbnN0ZWFkLicsIHtcbiAgICAgICAgICBjb2RlOiAnVU5ESUNJLUNMSUVOVC1JTlRFUkNFUFRPUi1ERVBSRUNBVEVEJ1xuICAgICAgICB9KVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzW2tJbnRlcmNlcHRvcnNdID0gW2NyZWF0ZVJlZGlyZWN0SW50ZXJjZXB0b3IoeyBtYXhSZWRpcmVjdGlvbnMgfSldXG4gICAgfVxuXG4gICAgdGhpc1trVXJsXSA9IHV0aWwucGFyc2VPcmlnaW4odXJsKVxuICAgIHRoaXNba0Nvbm5lY3Rvcl0gPSBjb25uZWN0XG4gICAgdGhpc1trUGlwZWxpbmluZ10gPSBwaXBlbGluaW5nICE9IG51bGwgPyBwaXBlbGluaW5nIDogMVxuICAgIHRoaXNba01heEhlYWRlcnNTaXplXSA9IG1heEhlYWRlclNpemUgfHwgaHR0cC5tYXhIZWFkZXJTaXplXG4gICAgdGhpc1trS2VlcEFsaXZlRGVmYXVsdFRpbWVvdXRdID0ga2VlcEFsaXZlVGltZW91dCA9PSBudWxsID8gNGUzIDoga2VlcEFsaXZlVGltZW91dFxuICAgIHRoaXNba0tlZXBBbGl2ZU1heFRpbWVvdXRdID0ga2VlcEFsaXZlTWF4VGltZW91dCA9PSBudWxsID8gNjAwZTMgOiBrZWVwQWxpdmVNYXhUaW1lb3V0XG4gICAgdGhpc1trS2VlcEFsaXZlVGltZW91dFRocmVzaG9sZF0gPSBrZWVwQWxpdmVUaW1lb3V0VGhyZXNob2xkID09IG51bGwgPyAyZTMgOiBrZWVwQWxpdmVUaW1lb3V0VGhyZXNob2xkXG4gICAgdGhpc1trS2VlcEFsaXZlVGltZW91dFZhbHVlXSA9IHRoaXNba0tlZXBBbGl2ZURlZmF1bHRUaW1lb3V0XVxuICAgIHRoaXNba1NlcnZlck5hbWVdID0gbnVsbFxuICAgIHRoaXNba0xvY2FsQWRkcmVzc10gPSBsb2NhbEFkZHJlc3MgIT0gbnVsbCA/IGxvY2FsQWRkcmVzcyA6IG51bGxcbiAgICB0aGlzW2tSZXN1bWluZ10gPSAwIC8vIDAsIGlkbGUsIDEsIHNjaGVkdWxlZCwgMiByZXN1bWluZ1xuICAgIHRoaXNba05lZWREcmFpbl0gPSAwIC8vIDAsIGlkbGUsIDEsIHNjaGVkdWxlZCwgMiByZXN1bWluZ1xuICAgIHRoaXNba0hvc3RIZWFkZXJdID0gYGhvc3Q6ICR7dGhpc1trVXJsXS5ob3N0bmFtZX0ke3RoaXNba1VybF0ucG9ydCA/IGA6JHt0aGlzW2tVcmxdLnBvcnR9YCA6ICcnfVxcclxcbmBcbiAgICB0aGlzW2tCb2R5VGltZW91dF0gPSBib2R5VGltZW91dCAhPSBudWxsID8gYm9keVRpbWVvdXQgOiAzMDBlM1xuICAgIHRoaXNba0hlYWRlcnNUaW1lb3V0XSA9IGhlYWRlcnNUaW1lb3V0ICE9IG51bGwgPyBoZWFkZXJzVGltZW91dCA6IDMwMGUzXG4gICAgdGhpc1trU3RyaWN0Q29udGVudExlbmd0aF0gPSBzdHJpY3RDb250ZW50TGVuZ3RoID09IG51bGwgPyB0cnVlIDogc3RyaWN0Q29udGVudExlbmd0aFxuICAgIHRoaXNba01heFJlZGlyZWN0aW9uc10gPSBtYXhSZWRpcmVjdGlvbnNcbiAgICB0aGlzW2tNYXhSZXF1ZXN0c10gPSBtYXhSZXF1ZXN0c1BlckNsaWVudFxuICAgIHRoaXNba0Nsb3NlZFJlc29sdmVdID0gbnVsbFxuICAgIHRoaXNba01heFJlc3BvbnNlU2l6ZV0gPSBtYXhSZXNwb25zZVNpemUgPiAtMSA/IG1heFJlc3BvbnNlU2l6ZSA6IC0xXG4gICAgdGhpc1trTWF4Q29uY3VycmVudFN0cmVhbXNdID0gbWF4Q29uY3VycmVudFN0cmVhbXMgIT0gbnVsbCA/IG1heENvbmN1cnJlbnRTdHJlYW1zIDogMTAwIC8vIE1heCBwZWVyQ29uY3VycmVudFN0cmVhbXMgZm9yIGEgTm9kZSBoMiBzZXJ2ZXJcbiAgICB0aGlzW2tIVFRQQ29udGV4dF0gPSBudWxsXG5cbiAgICAvLyBrUXVldWUgaXMgYnVpbHQgdXAgb2YgMyBzZWN0aW9ucyBzZXBhcmF0ZWQgYnlcbiAgICAvLyB0aGUga1J1bm5pbmdJZHggYW5kIGtQZW5kaW5nSWR4IGluZGljZXMuXG4gICAgLy8gfCAgIGNvbXBsZXRlICAgfCAgIHJ1bm5pbmcgICB8ICAgcGVuZGluZyAgIHxcbiAgICAvLyAgICAgICAgICAgICAgICBeIGtSdW5uaW5nSWR4IF4ga1BlbmRpbmdJZHggXiBrUXVldWUubGVuZ3RoXG4gICAgLy8ga1J1bm5pbmdJZHggcG9pbnRzIHRvIHRoZSBmaXJzdCBydW5uaW5nIGVsZW1lbnQuXG4gICAgLy8ga1BlbmRpbmdJZHggcG9pbnRzIHRvIHRoZSBmaXJzdCBwZW5kaW5nIGVsZW1lbnQuXG4gICAgLy8gVGhpcyBpbXBsZW1lbnRzIGEgZmFzdCBxdWV1ZSB3aXRoIGFuIGFtb3J0aXplZFxuICAgIC8vIHRpbWUgb2YgTygxKS5cblxuICAgIHRoaXNba1F1ZXVlXSA9IFtdXG4gICAgdGhpc1trUnVubmluZ0lkeF0gPSAwXG4gICAgdGhpc1trUGVuZGluZ0lkeF0gPSAwXG5cbiAgICB0aGlzW2tSZXN1bWVdID0gKHN5bmMpID0+IHJlc3VtZSh0aGlzLCBzeW5jKVxuICAgIHRoaXNba09uRXJyb3JdID0gKGVycikgPT4gb25FcnJvcih0aGlzLCBlcnIpXG4gIH1cblxuICBnZXQgcGlwZWxpbmluZyAoKSB7XG4gICAgcmV0dXJuIHRoaXNba1BpcGVsaW5pbmddXG4gIH1cblxuICBzZXQgcGlwZWxpbmluZyAodmFsdWUpIHtcbiAgICB0aGlzW2tQaXBlbGluaW5nXSA9IHZhbHVlXG4gICAgdGhpc1trUmVzdW1lXSh0cnVlKVxuICB9XG5cbiAgZ2V0IFtrUGVuZGluZ10gKCkge1xuICAgIHJldHVybiB0aGlzW2tRdWV1ZV0ubGVuZ3RoIC0gdGhpc1trUGVuZGluZ0lkeF1cbiAgfVxuXG4gIGdldCBba1J1bm5pbmddICgpIHtcbiAgICByZXR1cm4gdGhpc1trUGVuZGluZ0lkeF0gLSB0aGlzW2tSdW5uaW5nSWR4XVxuICB9XG5cbiAgZ2V0IFtrU2l6ZV0gKCkge1xuICAgIHJldHVybiB0aGlzW2tRdWV1ZV0ubGVuZ3RoIC0gdGhpc1trUnVubmluZ0lkeF1cbiAgfVxuXG4gIGdldCBba0Nvbm5lY3RlZF0gKCkge1xuICAgIHJldHVybiAhIXRoaXNba0hUVFBDb250ZXh0XSAmJiAhdGhpc1trQ29ubmVjdGluZ10gJiYgIXRoaXNba0hUVFBDb250ZXh0XS5kZXN0cm95ZWRcbiAgfVxuXG4gIGdldCBba0J1c3ldICgpIHtcbiAgICByZXR1cm4gQm9vbGVhbihcbiAgICAgIHRoaXNba0hUVFBDb250ZXh0XT8uYnVzeShudWxsKSB8fFxuICAgICAgKHRoaXNba1NpemVdID49IChnZXRQaXBlbGluaW5nKHRoaXMpIHx8IDEpKSB8fFxuICAgICAgdGhpc1trUGVuZGluZ10gPiAwXG4gICAgKVxuICB9XG5cbiAgLyogaXN0YW5idWwgaWdub3JlOiBvbmx5IHVzZWQgZm9yIHRlc3QgKi9cbiAgW2tDb25uZWN0XSAoY2IpIHtcbiAgICBjb25uZWN0KHRoaXMpXG4gICAgdGhpcy5vbmNlKCdjb25uZWN0JywgY2IpXG4gIH1cblxuICBba0Rpc3BhdGNoXSAob3B0cywgaGFuZGxlcikge1xuICAgIGNvbnN0IG9yaWdpbiA9IG9wdHMub3JpZ2luIHx8IHRoaXNba1VybF0ub3JpZ2luXG4gICAgY29uc3QgcmVxdWVzdCA9IG5ldyBSZXF1ZXN0KG9yaWdpbiwgb3B0cywgaGFuZGxlcilcblxuICAgIHRoaXNba1F1ZXVlXS5wdXNoKHJlcXVlc3QpXG4gICAgaWYgKHRoaXNba1Jlc3VtaW5nXSkge1xuICAgICAgLy8gRG8gbm90aGluZy5cbiAgICB9IGVsc2UgaWYgKHV0aWwuYm9keUxlbmd0aChyZXF1ZXN0LmJvZHkpID09IG51bGwgJiYgdXRpbC5pc0l0ZXJhYmxlKHJlcXVlc3QuYm9keSkpIHtcbiAgICAgIC8vIFdhaXQgYSB0aWNrIGluIGNhc2Ugc3RyZWFtL2l0ZXJhdG9yIGlzIGVuZGVkIGluIHRoZSBzYW1lIHRpY2suXG4gICAgICB0aGlzW2tSZXN1bWluZ10gPSAxXG4gICAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiByZXN1bWUodGhpcykpXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXNba1Jlc3VtZV0odHJ1ZSlcbiAgICB9XG5cbiAgICBpZiAodGhpc1trUmVzdW1pbmddICYmIHRoaXNba05lZWREcmFpbl0gIT09IDIgJiYgdGhpc1trQnVzeV0pIHtcbiAgICAgIHRoaXNba05lZWREcmFpbl0gPSAyXG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXNba05lZWREcmFpbl0gPCAyXG4gIH1cblxuICBhc3luYyBba0Nsb3NlXSAoKSB7XG4gICAgLy8gVE9ETzogZm9yIEgyIHdlIG5lZWQgdG8gZ3JhY2VmdWxseSBmbHVzaCB0aGUgcmVtYWluaW5nIGVucXVldWVkXG4gICAgLy8gcmVxdWVzdCBhbmQgY2xvc2UgZWFjaCBzdHJlYW0uXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICBpZiAodGhpc1trU2l6ZV0pIHtcbiAgICAgICAgdGhpc1trQ2xvc2VkUmVzb2x2ZV0gPSByZXNvbHZlXG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXNvbHZlKG51bGwpXG4gICAgICB9XG4gICAgfSlcbiAgfVxuXG4gIGFzeW5jIFtrRGVzdHJveV0gKGVycikge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgICAgY29uc3QgcmVxdWVzdHMgPSB0aGlzW2tRdWV1ZV0uc3BsaWNlKHRoaXNba1BlbmRpbmdJZHhdKVxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCByZXF1ZXN0cy5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCByZXF1ZXN0ID0gcmVxdWVzdHNbaV1cbiAgICAgICAgdXRpbC5lcnJvclJlcXVlc3QodGhpcywgcmVxdWVzdCwgZXJyKVxuICAgICAgfVxuXG4gICAgICBjb25zdCBjYWxsYmFjayA9ICgpID0+IHtcbiAgICAgICAgaWYgKHRoaXNba0Nsb3NlZFJlc29sdmVdKSB7XG4gICAgICAgICAgLy8gVE9ETyAoZml4KTogU2hvdWxkIHdlIGVycm9yIGhlcmUgd2l0aCBDbGllbnREZXN0cm95ZWRFcnJvcj9cbiAgICAgICAgICB0aGlzW2tDbG9zZWRSZXNvbHZlXSgpXG4gICAgICAgICAgdGhpc1trQ2xvc2VkUmVzb2x2ZV0gPSBudWxsXG4gICAgICAgIH1cbiAgICAgICAgcmVzb2x2ZShudWxsKVxuICAgICAgfVxuXG4gICAgICBpZiAodGhpc1trSFRUUENvbnRleHRdKSB7XG4gICAgICAgIHRoaXNba0hUVFBDb250ZXh0XS5kZXN0cm95KGVyciwgY2FsbGJhY2spXG4gICAgICAgIHRoaXNba0hUVFBDb250ZXh0XSA9IG51bGxcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHF1ZXVlTWljcm90YXNrKGNhbGxiYWNrKVxuICAgICAgfVxuXG4gICAgICB0aGlzW2tSZXN1bWVdKClcbiAgICB9KVxuICB9XG59XG5cbmNvbnN0IGNyZWF0ZVJlZGlyZWN0SW50ZXJjZXB0b3IgPSByZXF1aXJlKCcuLi9pbnRlcmNlcHRvci9yZWRpcmVjdC1pbnRlcmNlcHRvci5qcycpXG5cbmZ1bmN0aW9uIG9uRXJyb3IgKGNsaWVudCwgZXJyKSB7XG4gIGlmIChcbiAgICBjbGllbnRba1J1bm5pbmddID09PSAwICYmXG4gICAgZXJyLmNvZGUgIT09ICdVTkRfRVJSX0lORk8nICYmXG4gICAgZXJyLmNvZGUgIT09ICdVTkRfRVJSX1NPQ0tFVCdcbiAgKSB7XG4gICAgLy8gRXJyb3IgaXMgbm90IGNhdXNlZCBieSBydW5uaW5nIHJlcXVlc3QgYW5kIG5vdCBhIHJlY292ZXJhYmxlXG4gICAgLy8gc29ja2V0IGVycm9yLlxuXG4gICAgYXNzZXJ0KGNsaWVudFtrUGVuZGluZ0lkeF0gPT09IGNsaWVudFtrUnVubmluZ0lkeF0pXG5cbiAgICBjb25zdCByZXF1ZXN0cyA9IGNsaWVudFtrUXVldWVdLnNwbGljZShjbGllbnRba1J1bm5pbmdJZHhdKVxuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCByZXF1ZXN0cy5sZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgcmVxdWVzdCA9IHJlcXVlc3RzW2ldXG4gICAgICB1dGlsLmVycm9yUmVxdWVzdChjbGllbnQsIHJlcXVlc3QsIGVycilcbiAgICB9XG4gICAgYXNzZXJ0KGNsaWVudFtrU2l6ZV0gPT09IDApXG4gIH1cbn1cblxuLyoqXG4gKiBAcGFyYW0ge0NsaWVudH0gY2xpZW50XG4gKiBAcmV0dXJuc1xuICovXG5hc3luYyBmdW5jdGlvbiBjb25uZWN0IChjbGllbnQpIHtcbiAgYXNzZXJ0KCFjbGllbnRba0Nvbm5lY3RpbmddKVxuICBhc3NlcnQoIWNsaWVudFtrSFRUUENvbnRleHRdKVxuXG4gIGxldCB7IGhvc3QsIGhvc3RuYW1lLCBwcm90b2NvbCwgcG9ydCB9ID0gY2xpZW50W2tVcmxdXG5cbiAgLy8gUmVzb2x2ZSBpcHY2XG4gIGlmIChob3N0bmFtZVswXSA9PT0gJ1snKSB7XG4gICAgY29uc3QgaWR4ID0gaG9zdG5hbWUuaW5kZXhPZignXScpXG5cbiAgICBhc3NlcnQoaWR4ICE9PSAtMSlcbiAgICBjb25zdCBpcCA9IGhvc3RuYW1lLnN1YnN0cmluZygxLCBpZHgpXG5cbiAgICBhc3NlcnQobmV0LmlzSVAoaXApKVxuICAgIGhvc3RuYW1lID0gaXBcbiAgfVxuXG4gIGNsaWVudFtrQ29ubmVjdGluZ10gPSB0cnVlXG5cbiAgaWYgKGNoYW5uZWxzLmJlZm9yZUNvbm5lY3QuaGFzU3Vic2NyaWJlcnMpIHtcbiAgICBjaGFubmVscy5iZWZvcmVDb25uZWN0LnB1Ymxpc2goe1xuICAgICAgY29ubmVjdFBhcmFtczoge1xuICAgICAgICBob3N0LFxuICAgICAgICBob3N0bmFtZSxcbiAgICAgICAgcHJvdG9jb2wsXG4gICAgICAgIHBvcnQsXG4gICAgICAgIHZlcnNpb246IGNsaWVudFtrSFRUUENvbnRleHRdPy52ZXJzaW9uLFxuICAgICAgICBzZXJ2ZXJuYW1lOiBjbGllbnRba1NlcnZlck5hbWVdLFxuICAgICAgICBsb2NhbEFkZHJlc3M6IGNsaWVudFtrTG9jYWxBZGRyZXNzXVxuICAgICAgfSxcbiAgICAgIGNvbm5lY3RvcjogY2xpZW50W2tDb25uZWN0b3JdXG4gICAgfSlcbiAgfVxuXG4gIHRyeSB7XG4gICAgY29uc3Qgc29ja2V0ID0gYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgY2xpZW50W2tDb25uZWN0b3JdKHtcbiAgICAgICAgaG9zdCxcbiAgICAgICAgaG9zdG5hbWUsXG4gICAgICAgIHByb3RvY29sLFxuICAgICAgICBwb3J0LFxuICAgICAgICBzZXJ2ZXJuYW1lOiBjbGllbnRba1NlcnZlck5hbWVdLFxuICAgICAgICBsb2NhbEFkZHJlc3M6IGNsaWVudFtrTG9jYWxBZGRyZXNzXVxuICAgICAgfSwgKGVyciwgc29ja2V0KSA9PiB7XG4gICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICByZWplY3QoZXJyKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlc29sdmUoc29ja2V0KVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH0pXG5cbiAgICBpZiAoY2xpZW50LmRlc3Ryb3llZCkge1xuICAgICAgdXRpbC5kZXN0cm95KHNvY2tldC5vbignZXJyb3InLCBub29wKSwgbmV3IENsaWVudERlc3Ryb3llZEVycm9yKCkpXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBhc3NlcnQoc29ja2V0KVxuXG4gICAgdHJ5IHtcbiAgICAgIGNsaWVudFtrSFRUUENvbnRleHRdID0gc29ja2V0LmFscG5Qcm90b2NvbCA9PT0gJ2gyJ1xuICAgICAgICA/IGF3YWl0IGNvbm5lY3RIMihjbGllbnQsIHNvY2tldClcbiAgICAgICAgOiBhd2FpdCBjb25uZWN0SDEoY2xpZW50LCBzb2NrZXQpXG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBzb2NrZXQuZGVzdHJveSgpLm9uKCdlcnJvcicsIG5vb3ApXG4gICAgICB0aHJvdyBlcnJcbiAgICB9XG5cbiAgICBjbGllbnRba0Nvbm5lY3RpbmddID0gZmFsc2VcblxuICAgIHNvY2tldFtrQ291bnRlcl0gPSAwXG4gICAgc29ja2V0W2tNYXhSZXF1ZXN0c10gPSBjbGllbnRba01heFJlcXVlc3RzXVxuICAgIHNvY2tldFtrQ2xpZW50XSA9IGNsaWVudFxuICAgIHNvY2tldFtrRXJyb3JdID0gbnVsbFxuXG4gICAgaWYgKGNoYW5uZWxzLmNvbm5lY3RlZC5oYXNTdWJzY3JpYmVycykge1xuICAgICAgY2hhbm5lbHMuY29ubmVjdGVkLnB1Ymxpc2goe1xuICAgICAgICBjb25uZWN0UGFyYW1zOiB7XG4gICAgICAgICAgaG9zdCxcbiAgICAgICAgICBob3N0bmFtZSxcbiAgICAgICAgICBwcm90b2NvbCxcbiAgICAgICAgICBwb3J0LFxuICAgICAgICAgIHZlcnNpb246IGNsaWVudFtrSFRUUENvbnRleHRdPy52ZXJzaW9uLFxuICAgICAgICAgIHNlcnZlcm5hbWU6IGNsaWVudFtrU2VydmVyTmFtZV0sXG4gICAgICAgICAgbG9jYWxBZGRyZXNzOiBjbGllbnRba0xvY2FsQWRkcmVzc11cbiAgICAgICAgfSxcbiAgICAgICAgY29ubmVjdG9yOiBjbGllbnRba0Nvbm5lY3Rvcl0sXG4gICAgICAgIHNvY2tldFxuICAgICAgfSlcbiAgICB9XG4gICAgY2xpZW50LmVtaXQoJ2Nvbm5lY3QnLCBjbGllbnRba1VybF0sIFtjbGllbnRdKVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICBpZiAoY2xpZW50LmRlc3Ryb3llZCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgY2xpZW50W2tDb25uZWN0aW5nXSA9IGZhbHNlXG5cbiAgICBpZiAoY2hhbm5lbHMuY29ubmVjdEVycm9yLmhhc1N1YnNjcmliZXJzKSB7XG4gICAgICBjaGFubmVscy5jb25uZWN0RXJyb3IucHVibGlzaCh7XG4gICAgICAgIGNvbm5lY3RQYXJhbXM6IHtcbiAgICAgICAgICBob3N0LFxuICAgICAgICAgIGhvc3RuYW1lLFxuICAgICAgICAgIHByb3RvY29sLFxuICAgICAgICAgIHBvcnQsXG4gICAgICAgICAgdmVyc2lvbjogY2xpZW50W2tIVFRQQ29udGV4dF0/LnZlcnNpb24sXG4gICAgICAgICAgc2VydmVybmFtZTogY2xpZW50W2tTZXJ2ZXJOYW1lXSxcbiAgICAgICAgICBsb2NhbEFkZHJlc3M6IGNsaWVudFtrTG9jYWxBZGRyZXNzXVxuICAgICAgICB9LFxuICAgICAgICBjb25uZWN0b3I6IGNsaWVudFtrQ29ubmVjdG9yXSxcbiAgICAgICAgZXJyb3I6IGVyclxuICAgICAgfSlcbiAgICB9XG5cbiAgICBpZiAoZXJyLmNvZGUgPT09ICdFUlJfVExTX0NFUlRfQUxUTkFNRV9JTlZBTElEJykge1xuICAgICAgYXNzZXJ0KGNsaWVudFtrUnVubmluZ10gPT09IDApXG4gICAgICB3aGlsZSAoY2xpZW50W2tQZW5kaW5nXSA+IDAgJiYgY2xpZW50W2tRdWV1ZV1bY2xpZW50W2tQZW5kaW5nSWR4XV0uc2VydmVybmFtZSA9PT0gY2xpZW50W2tTZXJ2ZXJOYW1lXSkge1xuICAgICAgICBjb25zdCByZXF1ZXN0ID0gY2xpZW50W2tRdWV1ZV1bY2xpZW50W2tQZW5kaW5nSWR4XSsrXVxuICAgICAgICB1dGlsLmVycm9yUmVxdWVzdChjbGllbnQsIHJlcXVlc3QsIGVycilcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgb25FcnJvcihjbGllbnQsIGVycilcbiAgICB9XG5cbiAgICBjbGllbnQuZW1pdCgnY29ubmVjdGlvbkVycm9yJywgY2xpZW50W2tVcmxdLCBbY2xpZW50XSwgZXJyKVxuICB9XG5cbiAgY2xpZW50W2tSZXN1bWVdKClcbn1cblxuZnVuY3Rpb24gZW1pdERyYWluIChjbGllbnQpIHtcbiAgY2xpZW50W2tOZWVkRHJhaW5dID0gMFxuICBjbGllbnQuZW1pdCgnZHJhaW4nLCBjbGllbnRba1VybF0sIFtjbGllbnRdKVxufVxuXG5mdW5jdGlvbiByZXN1bWUgKGNsaWVudCwgc3luYykge1xuICBpZiAoY2xpZW50W2tSZXN1bWluZ10gPT09IDIpIHtcbiAgICByZXR1cm5cbiAgfVxuXG4gIGNsaWVudFtrUmVzdW1pbmddID0gMlxuXG4gIF9yZXN1bWUoY2xpZW50LCBzeW5jKVxuICBjbGllbnRba1Jlc3VtaW5nXSA9IDBcblxuICBpZiAoY2xpZW50W2tSdW5uaW5nSWR4XSA+IDI1Nikge1xuICAgIGNsaWVudFtrUXVldWVdLnNwbGljZSgwLCBjbGllbnRba1J1bm5pbmdJZHhdKVxuICAgIGNsaWVudFtrUGVuZGluZ0lkeF0gLT0gY2xpZW50W2tSdW5uaW5nSWR4XVxuICAgIGNsaWVudFtrUnVubmluZ0lkeF0gPSAwXG4gIH1cbn1cblxuZnVuY3Rpb24gX3Jlc3VtZSAoY2xpZW50LCBzeW5jKSB7XG4gIHdoaWxlICh0cnVlKSB7XG4gICAgaWYgKGNsaWVudC5kZXN0cm95ZWQpIHtcbiAgICAgIGFzc2VydChjbGllbnRba1BlbmRpbmddID09PSAwKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgaWYgKGNsaWVudFtrQ2xvc2VkUmVzb2x2ZV0gJiYgIWNsaWVudFtrU2l6ZV0pIHtcbiAgICAgIGNsaWVudFtrQ2xvc2VkUmVzb2x2ZV0oKVxuICAgICAgY2xpZW50W2tDbG9zZWRSZXNvbHZlXSA9IG51bGxcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGlmIChjbGllbnRba0hUVFBDb250ZXh0XSkge1xuICAgICAgY2xpZW50W2tIVFRQQ29udGV4dF0ucmVzdW1lKClcbiAgICB9XG5cbiAgICBpZiAoY2xpZW50W2tCdXN5XSkge1xuICAgICAgY2xpZW50W2tOZWVkRHJhaW5dID0gMlxuICAgIH0gZWxzZSBpZiAoY2xpZW50W2tOZWVkRHJhaW5dID09PSAyKSB7XG4gICAgICBpZiAoc3luYykge1xuICAgICAgICBjbGllbnRba05lZWREcmFpbl0gPSAxXG4gICAgICAgIHF1ZXVlTWljcm90YXNrKCgpID0+IGVtaXREcmFpbihjbGllbnQpKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZW1pdERyYWluKGNsaWVudClcbiAgICAgIH1cbiAgICAgIGNvbnRpbnVlXG4gICAgfVxuXG4gICAgaWYgKGNsaWVudFtrUGVuZGluZ10gPT09IDApIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGlmIChjbGllbnRba1J1bm5pbmddID49IChnZXRQaXBlbGluaW5nKGNsaWVudCkgfHwgMSkpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGNvbnN0IHJlcXVlc3QgPSBjbGllbnRba1F1ZXVlXVtjbGllbnRba1BlbmRpbmdJZHhdXVxuXG4gICAgaWYgKGNsaWVudFtrVXJsXS5wcm90b2NvbCA9PT0gJ2h0dHBzOicgJiYgY2xpZW50W2tTZXJ2ZXJOYW1lXSAhPT0gcmVxdWVzdC5zZXJ2ZXJuYW1lKSB7XG4gICAgICBpZiAoY2xpZW50W2tSdW5uaW5nXSA+IDApIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGNsaWVudFtrU2VydmVyTmFtZV0gPSByZXF1ZXN0LnNlcnZlcm5hbWVcbiAgICAgIGNsaWVudFtrSFRUUENvbnRleHRdPy5kZXN0cm95KG5ldyBJbmZvcm1hdGlvbmFsRXJyb3IoJ3NlcnZlcm5hbWUgY2hhbmdlZCcpLCAoKSA9PiB7XG4gICAgICAgIGNsaWVudFtrSFRUUENvbnRleHRdID0gbnVsbFxuICAgICAgICByZXN1bWUoY2xpZW50KVxuICAgICAgfSlcbiAgICB9XG5cbiAgICBpZiAoY2xpZW50W2tDb25uZWN0aW5nXSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgaWYgKCFjbGllbnRba0hUVFBDb250ZXh0XSkge1xuICAgICAgY29ubmVjdChjbGllbnQpXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBpZiAoY2xpZW50W2tIVFRQQ29udGV4dF0uZGVzdHJveWVkKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBpZiAoY2xpZW50W2tIVFRQQ29udGV4dF0uYnVzeShyZXF1ZXN0KSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgaWYgKCFyZXF1ZXN0LmFib3J0ZWQgJiYgY2xpZW50W2tIVFRQQ29udGV4dF0ud3JpdGUocmVxdWVzdCkpIHtcbiAgICAgIGNsaWVudFtrUGVuZGluZ0lkeF0rK1xuICAgIH0gZWxzZSB7XG4gICAgICBjbGllbnRba1F1ZXVlXS5zcGxpY2UoY2xpZW50W2tQZW5kaW5nSWR4XSwgMSlcbiAgICB9XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBDbGllbnRcbiIsICIvKiBlc2xpbnQtZGlzYWJsZSAqL1xuXG4ndXNlIHN0cmljdCdcblxuLy8gRXh0cmFjdGVkIGZyb20gbm9kZS9saWIvaW50ZXJuYWwvZml4ZWRfcXVldWUuanNcblxuLy8gQ3VycmVudGx5IG9wdGltYWwgcXVldWUgc2l6ZSwgdGVzdGVkIG9uIFY4IDYuMCAtIDYuNi4gTXVzdCBiZSBwb3dlciBvZiB0d28uXG5jb25zdCBrU2l6ZSA9IDIwNDg7XG5jb25zdCBrTWFzayA9IGtTaXplIC0gMTtcblxuLy8gVGhlIEZpeGVkUXVldWUgaXMgaW1wbGVtZW50ZWQgYXMgYSBzaW5nbHktbGlua2VkIGxpc3Qgb2YgZml4ZWQtc2l6ZVxuLy8gY2lyY3VsYXIgYnVmZmVycy4gSXQgbG9va3Mgc29tZXRoaW5nIGxpa2UgdGhpczpcbi8vXG4vLyAgaGVhZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWlsXG4vLyAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHxcbi8vICAgIHYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdlxuLy8gKy0tLS0tLS0tLS0tKyA8LS0tLS1cXCAgICAgICArLS0tLS0tLS0tLS0rIDwtLS0tLS1cXCAgICAgICAgICstLS0tLS0tLS0tLStcbi8vIHwgIFtudWxsXSAgIHwgICAgICAgIFxcLS0tLS0gfCAgIG5leHQgICAgfCAgICAgICAgIFxcLS0tLS0tLSB8ICAgbmV4dCAgICB8XG4vLyArLS0tLS0tLS0tLS0rICAgICAgICAgICAgICAgKy0tLS0tLS0tLS0tKyAgICAgICAgICAgICAgICAgICstLS0tLS0tLS0tLStcbi8vIHwgICBpdGVtICAgIHwgPC0tIGJvdHRvbSAgICB8ICAgaXRlbSAgICB8IDwtLSBib3R0b20gICAgICAgfCAgW2VtcHR5XSAgfFxuLy8gfCAgIGl0ZW0gICAgfCAgICAgICAgICAgICAgIHwgICBpdGVtICAgIHwgICAgICAgICAgICAgICAgICB8ICBbZW1wdHldICB8XG4vLyB8ICAgaXRlbSAgICB8ICAgICAgICAgICAgICAgfCAgIGl0ZW0gICAgfCAgICAgICAgICAgICAgICAgIHwgIFtlbXB0eV0gIHxcbi8vIHwgICBpdGVtICAgIHwgICAgICAgICAgICAgICB8ICAgaXRlbSAgICB8ICAgICAgICAgICAgICAgICAgfCAgW2VtcHR5XSAgfFxuLy8gfCAgIGl0ZW0gICAgfCAgICAgICAgICAgICAgIHwgICBpdGVtICAgIHwgICAgICAgYm90dG9tIC0tPiB8ICAgaXRlbSAgICB8XG4vLyB8ICAgaXRlbSAgICB8ICAgICAgICAgICAgICAgfCAgIGl0ZW0gICAgfCAgICAgICAgICAgICAgICAgIHwgICBpdGVtICAgIHxcbi8vIHwgICAgLi4uICAgIHwgICAgICAgICAgICAgICB8ICAgIC4uLiAgICB8ICAgICAgICAgICAgICAgICAgfCAgICAuLi4gICAgfFxuLy8gfCAgIGl0ZW0gICAgfCAgICAgICAgICAgICAgIHwgICBpdGVtICAgIHwgICAgICAgICAgICAgICAgICB8ICAgaXRlbSAgICB8XG4vLyB8ICAgaXRlbSAgICB8ICAgICAgICAgICAgICAgfCAgIGl0ZW0gICAgfCAgICAgICAgICAgICAgICAgIHwgICBpdGVtICAgIHxcbi8vIHwgIFtlbXB0eV0gIHwgPC0tIHRvcCAgICAgICB8ICAgaXRlbSAgICB8ICAgICAgICAgICAgICAgICAgfCAgIGl0ZW0gICAgfFxuLy8gfCAgW2VtcHR5XSAgfCAgICAgICAgICAgICAgIHwgICBpdGVtICAgIHwgICAgICAgICAgICAgICAgICB8ICAgaXRlbSAgICB8XG4vLyB8ICBbZW1wdHldICB8ICAgICAgICAgICAgICAgfCAgW2VtcHR5XSAgfCA8LS0gdG9wICB0b3AgLS0+IHwgIFtlbXB0eV0gIHxcbi8vICstLS0tLS0tLS0tLSsgICAgICAgICAgICAgICArLS0tLS0tLS0tLS0rICAgICAgICAgICAgICAgICAgKy0tLS0tLS0tLS0tK1xuLy9cbi8vIE9yLCBpZiB0aGVyZSBpcyBvbmx5IG9uZSBjaXJjdWxhciBidWZmZXIsIGl0IGxvb2tzIHNvbWV0aGluZ1xuLy8gbGlrZSBlaXRoZXIgb2YgdGhlc2U6XG4vL1xuLy8gIGhlYWQgICB0YWlsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVhZCAgIHRhaWxcbi8vICAgIHwgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgfFxuLy8gICAgdiAgICAgdiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ICAgICB2XG4vLyArLS0tLS0tLS0tLS0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICstLS0tLS0tLS0tLStcbi8vIHwgIFtudWxsXSAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgW251bGxdICAgfFxuLy8gKy0tLS0tLS0tLS0tKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArLS0tLS0tLS0tLS0rXG4vLyB8ICBbZW1wdHldICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICBpdGVtICAgIHxcbi8vIHwgIFtlbXB0eV0gIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIGl0ZW0gICAgfFxuLy8gfCAgIGl0ZW0gICAgfCA8LS0gYm90dG9tICAgICAgICAgICAgdG9wIC0tPiB8ICBbZW1wdHldICB8XG4vLyB8ICAgaXRlbSAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIFtlbXB0eV0gIHxcbi8vIHwgIFtlbXB0eV0gIHwgPC0tIHRvcCAgICAgICAgICAgIGJvdHRvbSAtLT4gfCAgIGl0ZW0gICAgfFxuLy8gfCAgW2VtcHR5XSAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgaXRlbSAgICB8XG4vLyArLS0tLS0tLS0tLS0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICstLS0tLS0tLS0tLStcbi8vXG4vLyBBZGRpbmcgYSB2YWx1ZSBtZWFucyBtb3ZpbmcgYHRvcGAgZm9yd2FyZCBieSBvbmUsIHJlbW92aW5nIG1lYW5zXG4vLyBtb3ZpbmcgYGJvdHRvbWAgZm9yd2FyZCBieSBvbmUuIEFmdGVyIHJlYWNoaW5nIHRoZSBlbmQsIHRoZSBxdWV1ZVxuLy8gd3JhcHMgYXJvdW5kLlxuLy9cbi8vIFdoZW4gYHRvcCA9PT0gYm90dG9tYCB0aGUgY3VycmVudCBxdWV1ZSBpcyBlbXB0eSBhbmQgd2hlblxuLy8gYHRvcCArIDEgPT09IGJvdHRvbWAgaXQncyBmdWxsLiBUaGlzIHdhc3RlcyBhIHNpbmdsZSBzcGFjZSBvZiBzdG9yYWdlXG4vLyBidXQgYWxsb3dzIG11Y2ggcXVpY2tlciBjaGVja3MuXG5cbmNsYXNzIEZpeGVkQ2lyY3VsYXJCdWZmZXIge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLmJvdHRvbSA9IDA7XG4gICAgdGhpcy50b3AgPSAwO1xuICAgIHRoaXMubGlzdCA9IG5ldyBBcnJheShrU2l6ZSk7XG4gICAgdGhpcy5uZXh0ID0gbnVsbDtcbiAgfVxuXG4gIGlzRW1wdHkoKSB7XG4gICAgcmV0dXJuIHRoaXMudG9wID09PSB0aGlzLmJvdHRvbTtcbiAgfVxuXG4gIGlzRnVsbCgpIHtcbiAgICByZXR1cm4gKCh0aGlzLnRvcCArIDEpICYga01hc2spID09PSB0aGlzLmJvdHRvbTtcbiAgfVxuXG4gIHB1c2goZGF0YSkge1xuICAgIHRoaXMubGlzdFt0aGlzLnRvcF0gPSBkYXRhO1xuICAgIHRoaXMudG9wID0gKHRoaXMudG9wICsgMSkgJiBrTWFzaztcbiAgfVxuXG4gIHNoaWZ0KCkge1xuICAgIGNvbnN0IG5leHRJdGVtID0gdGhpcy5saXN0W3RoaXMuYm90dG9tXTtcbiAgICBpZiAobmV4dEl0ZW0gPT09IHVuZGVmaW5lZClcbiAgICAgIHJldHVybiBudWxsO1xuICAgIHRoaXMubGlzdFt0aGlzLmJvdHRvbV0gPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5ib3R0b20gPSAodGhpcy5ib3R0b20gKyAxKSAmIGtNYXNrO1xuICAgIHJldHVybiBuZXh0SXRlbTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNsYXNzIEZpeGVkUXVldWUge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLmhlYWQgPSB0aGlzLnRhaWwgPSBuZXcgRml4ZWRDaXJjdWxhckJ1ZmZlcigpO1xuICB9XG5cbiAgaXNFbXB0eSgpIHtcbiAgICByZXR1cm4gdGhpcy5oZWFkLmlzRW1wdHkoKTtcbiAgfVxuXG4gIHB1c2goZGF0YSkge1xuICAgIGlmICh0aGlzLmhlYWQuaXNGdWxsKCkpIHtcbiAgICAgIC8vIEhlYWQgaXMgZnVsbDogQ3JlYXRlcyBhIG5ldyBxdWV1ZSwgc2V0cyB0aGUgb2xkIHF1ZXVlJ3MgYC5uZXh0YCB0byBpdCxcbiAgICAgIC8vIGFuZCBzZXRzIGl0IGFzIHRoZSBuZXcgbWFpbiBxdWV1ZS5cbiAgICAgIHRoaXMuaGVhZCA9IHRoaXMuaGVhZC5uZXh0ID0gbmV3IEZpeGVkQ2lyY3VsYXJCdWZmZXIoKTtcbiAgICB9XG4gICAgdGhpcy5oZWFkLnB1c2goZGF0YSk7XG4gIH1cblxuICBzaGlmdCgpIHtcbiAgICBjb25zdCB0YWlsID0gdGhpcy50YWlsO1xuICAgIGNvbnN0IG5leHQgPSB0YWlsLnNoaWZ0KCk7XG4gICAgaWYgKHRhaWwuaXNFbXB0eSgpICYmIHRhaWwubmV4dCAhPT0gbnVsbCkge1xuICAgICAgLy8gSWYgdGhlcmUgaXMgYW5vdGhlciBxdWV1ZSwgaXQgZm9ybXMgdGhlIG5ldyB0YWlsLlxuICAgICAgdGhpcy50YWlsID0gdGFpbC5uZXh0O1xuICAgIH1cbiAgICByZXR1cm4gbmV4dDtcbiAgfVxufTtcbiIsICJjb25zdCB7IGtGcmVlLCBrQ29ubmVjdGVkLCBrUGVuZGluZywga1F1ZXVlZCwga1J1bm5pbmcsIGtTaXplIH0gPSByZXF1aXJlKCcuLi9jb3JlL3N5bWJvbHMnKVxuY29uc3Qga1Bvb2wgPSBTeW1ib2woJ3Bvb2wnKVxuXG5jbGFzcyBQb29sU3RhdHMge1xuICBjb25zdHJ1Y3RvciAocG9vbCkge1xuICAgIHRoaXNba1Bvb2xdID0gcG9vbFxuICB9XG5cbiAgZ2V0IGNvbm5lY3RlZCAoKSB7XG4gICAgcmV0dXJuIHRoaXNba1Bvb2xdW2tDb25uZWN0ZWRdXG4gIH1cblxuICBnZXQgZnJlZSAoKSB7XG4gICAgcmV0dXJuIHRoaXNba1Bvb2xdW2tGcmVlXVxuICB9XG5cbiAgZ2V0IHBlbmRpbmcgKCkge1xuICAgIHJldHVybiB0aGlzW2tQb29sXVtrUGVuZGluZ11cbiAgfVxuXG4gIGdldCBxdWV1ZWQgKCkge1xuICAgIHJldHVybiB0aGlzW2tQb29sXVtrUXVldWVkXVxuICB9XG5cbiAgZ2V0IHJ1bm5pbmcgKCkge1xuICAgIHJldHVybiB0aGlzW2tQb29sXVtrUnVubmluZ11cbiAgfVxuXG4gIGdldCBzaXplICgpIHtcbiAgICByZXR1cm4gdGhpc1trUG9vbF1ba1NpemVdXG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBQb29sU3RhdHNcbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgRGlzcGF0Y2hlckJhc2UgPSByZXF1aXJlKCcuL2Rpc3BhdGNoZXItYmFzZScpXG5jb25zdCBGaXhlZFF1ZXVlID0gcmVxdWlyZSgnLi9maXhlZC1xdWV1ZScpXG5jb25zdCB7IGtDb25uZWN0ZWQsIGtTaXplLCBrUnVubmluZywga1BlbmRpbmcsIGtRdWV1ZWQsIGtCdXN5LCBrRnJlZSwga1VybCwga0Nsb3NlLCBrRGVzdHJveSwga0Rpc3BhdGNoIH0gPSByZXF1aXJlKCcuLi9jb3JlL3N5bWJvbHMnKVxuY29uc3QgUG9vbFN0YXRzID0gcmVxdWlyZSgnLi9wb29sLXN0YXRzJylcblxuY29uc3Qga0NsaWVudHMgPSBTeW1ib2woJ2NsaWVudHMnKVxuY29uc3Qga05lZWREcmFpbiA9IFN5bWJvbCgnbmVlZERyYWluJylcbmNvbnN0IGtRdWV1ZSA9IFN5bWJvbCgncXVldWUnKVxuY29uc3Qga0Nsb3NlZFJlc29sdmUgPSBTeW1ib2woJ2Nsb3NlZCByZXNvbHZlJylcbmNvbnN0IGtPbkRyYWluID0gU3ltYm9sKCdvbkRyYWluJylcbmNvbnN0IGtPbkNvbm5lY3QgPSBTeW1ib2woJ29uQ29ubmVjdCcpXG5jb25zdCBrT25EaXNjb25uZWN0ID0gU3ltYm9sKCdvbkRpc2Nvbm5lY3QnKVxuY29uc3Qga09uQ29ubmVjdGlvbkVycm9yID0gU3ltYm9sKCdvbkNvbm5lY3Rpb25FcnJvcicpXG5jb25zdCBrR2V0RGlzcGF0Y2hlciA9IFN5bWJvbCgnZ2V0IGRpc3BhdGNoZXInKVxuY29uc3Qga0FkZENsaWVudCA9IFN5bWJvbCgnYWRkIGNsaWVudCcpXG5jb25zdCBrUmVtb3ZlQ2xpZW50ID0gU3ltYm9sKCdyZW1vdmUgY2xpZW50JylcbmNvbnN0IGtTdGF0cyA9IFN5bWJvbCgnc3RhdHMnKVxuXG5jbGFzcyBQb29sQmFzZSBleHRlbmRzIERpc3BhdGNoZXJCYXNlIHtcbiAgY29uc3RydWN0b3IgKCkge1xuICAgIHN1cGVyKClcblxuICAgIHRoaXNba1F1ZXVlXSA9IG5ldyBGaXhlZFF1ZXVlKClcbiAgICB0aGlzW2tDbGllbnRzXSA9IFtdXG4gICAgdGhpc1trUXVldWVkXSA9IDBcblxuICAgIGNvbnN0IHBvb2wgPSB0aGlzXG5cbiAgICB0aGlzW2tPbkRyYWluXSA9IGZ1bmN0aW9uIG9uRHJhaW4gKG9yaWdpbiwgdGFyZ2V0cykge1xuICAgICAgY29uc3QgcXVldWUgPSBwb29sW2tRdWV1ZV1cblxuICAgICAgbGV0IG5lZWREcmFpbiA9IGZhbHNlXG5cbiAgICAgIHdoaWxlICghbmVlZERyYWluKSB7XG4gICAgICAgIGNvbnN0IGl0ZW0gPSBxdWV1ZS5zaGlmdCgpXG4gICAgICAgIGlmICghaXRlbSkge1xuICAgICAgICAgIGJyZWFrXG4gICAgICAgIH1cbiAgICAgICAgcG9vbFtrUXVldWVkXS0tXG4gICAgICAgIG5lZWREcmFpbiA9ICF0aGlzLmRpc3BhdGNoKGl0ZW0ub3B0cywgaXRlbS5oYW5kbGVyKVxuICAgICAgfVxuXG4gICAgICB0aGlzW2tOZWVkRHJhaW5dID0gbmVlZERyYWluXG5cbiAgICAgIGlmICghdGhpc1trTmVlZERyYWluXSAmJiBwb29sW2tOZWVkRHJhaW5dKSB7XG4gICAgICAgIHBvb2xba05lZWREcmFpbl0gPSBmYWxzZVxuICAgICAgICBwb29sLmVtaXQoJ2RyYWluJywgb3JpZ2luLCBbcG9vbCwgLi4udGFyZ2V0c10pXG4gICAgICB9XG5cbiAgICAgIGlmIChwb29sW2tDbG9zZWRSZXNvbHZlXSAmJiBxdWV1ZS5pc0VtcHR5KCkpIHtcbiAgICAgICAgUHJvbWlzZVxuICAgICAgICAgIC5hbGwocG9vbFtrQ2xpZW50c10ubWFwKGMgPT4gYy5jbG9zZSgpKSlcbiAgICAgICAgICAudGhlbihwb29sW2tDbG9zZWRSZXNvbHZlXSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzW2tPbkNvbm5lY3RdID0gKG9yaWdpbiwgdGFyZ2V0cykgPT4ge1xuICAgICAgcG9vbC5lbWl0KCdjb25uZWN0Jywgb3JpZ2luLCBbcG9vbCwgLi4udGFyZ2V0c10pXG4gICAgfVxuXG4gICAgdGhpc1trT25EaXNjb25uZWN0XSA9IChvcmlnaW4sIHRhcmdldHMsIGVycikgPT4ge1xuICAgICAgcG9vbC5lbWl0KCdkaXNjb25uZWN0Jywgb3JpZ2luLCBbcG9vbCwgLi4udGFyZ2V0c10sIGVycilcbiAgICB9XG5cbiAgICB0aGlzW2tPbkNvbm5lY3Rpb25FcnJvcl0gPSAob3JpZ2luLCB0YXJnZXRzLCBlcnIpID0+IHtcbiAgICAgIHBvb2wuZW1pdCgnY29ubmVjdGlvbkVycm9yJywgb3JpZ2luLCBbcG9vbCwgLi4udGFyZ2V0c10sIGVycilcbiAgICB9XG5cbiAgICB0aGlzW2tTdGF0c10gPSBuZXcgUG9vbFN0YXRzKHRoaXMpXG4gIH1cblxuICBnZXQgW2tCdXN5XSAoKSB7XG4gICAgcmV0dXJuIHRoaXNba05lZWREcmFpbl1cbiAgfVxuXG4gIGdldCBba0Nvbm5lY3RlZF0gKCkge1xuICAgIHJldHVybiB0aGlzW2tDbGllbnRzXS5maWx0ZXIoY2xpZW50ID0+IGNsaWVudFtrQ29ubmVjdGVkXSkubGVuZ3RoXG4gIH1cblxuICBnZXQgW2tGcmVlXSAoKSB7XG4gICAgcmV0dXJuIHRoaXNba0NsaWVudHNdLmZpbHRlcihjbGllbnQgPT4gY2xpZW50W2tDb25uZWN0ZWRdICYmICFjbGllbnRba05lZWREcmFpbl0pLmxlbmd0aFxuICB9XG5cbiAgZ2V0IFtrUGVuZGluZ10gKCkge1xuICAgIGxldCByZXQgPSB0aGlzW2tRdWV1ZWRdXG4gICAgZm9yIChjb25zdCB7IFtrUGVuZGluZ106IHBlbmRpbmcgfSBvZiB0aGlzW2tDbGllbnRzXSkge1xuICAgICAgcmV0ICs9IHBlbmRpbmdcbiAgICB9XG4gICAgcmV0dXJuIHJldFxuICB9XG5cbiAgZ2V0IFtrUnVubmluZ10gKCkge1xuICAgIGxldCByZXQgPSAwXG4gICAgZm9yIChjb25zdCB7IFtrUnVubmluZ106IHJ1bm5pbmcgfSBvZiB0aGlzW2tDbGllbnRzXSkge1xuICAgICAgcmV0ICs9IHJ1bm5pbmdcbiAgICB9XG4gICAgcmV0dXJuIHJldFxuICB9XG5cbiAgZ2V0IFtrU2l6ZV0gKCkge1xuICAgIGxldCByZXQgPSB0aGlzW2tRdWV1ZWRdXG4gICAgZm9yIChjb25zdCB7IFtrU2l6ZV06IHNpemUgfSBvZiB0aGlzW2tDbGllbnRzXSkge1xuICAgICAgcmV0ICs9IHNpemVcbiAgICB9XG4gICAgcmV0dXJuIHJldFxuICB9XG5cbiAgZ2V0IHN0YXRzICgpIHtcbiAgICByZXR1cm4gdGhpc1trU3RhdHNdXG4gIH1cblxuICBhc3luYyBba0Nsb3NlXSAoKSB7XG4gICAgaWYgKHRoaXNba1F1ZXVlXS5pc0VtcHR5KCkpIHtcbiAgICAgIGF3YWl0IFByb21pc2UuYWxsKHRoaXNba0NsaWVudHNdLm1hcChjID0+IGMuY2xvc2UoKSkpXG4gICAgfSBlbHNlIHtcbiAgICAgIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICAgIHRoaXNba0Nsb3NlZFJlc29sdmVdID0gcmVzb2x2ZVxuICAgICAgfSlcbiAgICB9XG4gIH1cblxuICBhc3luYyBba0Rlc3Ryb3ldIChlcnIpIHtcbiAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgY29uc3QgaXRlbSA9IHRoaXNba1F1ZXVlXS5zaGlmdCgpXG4gICAgICBpZiAoIWl0ZW0pIHtcbiAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICAgIGl0ZW0uaGFuZGxlci5vbkVycm9yKGVycilcbiAgICB9XG5cbiAgICBhd2FpdCBQcm9taXNlLmFsbCh0aGlzW2tDbGllbnRzXS5tYXAoYyA9PiBjLmRlc3Ryb3koZXJyKSkpXG4gIH1cblxuICBba0Rpc3BhdGNoXSAob3B0cywgaGFuZGxlcikge1xuICAgIGNvbnN0IGRpc3BhdGNoZXIgPSB0aGlzW2tHZXREaXNwYXRjaGVyXSgpXG5cbiAgICBpZiAoIWRpc3BhdGNoZXIpIHtcbiAgICAgIHRoaXNba05lZWREcmFpbl0gPSB0cnVlXG4gICAgICB0aGlzW2tRdWV1ZV0ucHVzaCh7IG9wdHMsIGhhbmRsZXIgfSlcbiAgICAgIHRoaXNba1F1ZXVlZF0rK1xuICAgIH0gZWxzZSBpZiAoIWRpc3BhdGNoZXIuZGlzcGF0Y2gob3B0cywgaGFuZGxlcikpIHtcbiAgICAgIGRpc3BhdGNoZXJba05lZWREcmFpbl0gPSB0cnVlXG4gICAgICB0aGlzW2tOZWVkRHJhaW5dID0gIXRoaXNba0dldERpc3BhdGNoZXJdKClcbiAgICB9XG5cbiAgICByZXR1cm4gIXRoaXNba05lZWREcmFpbl1cbiAgfVxuXG4gIFtrQWRkQ2xpZW50XSAoY2xpZW50KSB7XG4gICAgY2xpZW50XG4gICAgICAub24oJ2RyYWluJywgdGhpc1trT25EcmFpbl0pXG4gICAgICAub24oJ2Nvbm5lY3QnLCB0aGlzW2tPbkNvbm5lY3RdKVxuICAgICAgLm9uKCdkaXNjb25uZWN0JywgdGhpc1trT25EaXNjb25uZWN0XSlcbiAgICAgIC5vbignY29ubmVjdGlvbkVycm9yJywgdGhpc1trT25Db25uZWN0aW9uRXJyb3JdKVxuXG4gICAgdGhpc1trQ2xpZW50c10ucHVzaChjbGllbnQpXG5cbiAgICBpZiAodGhpc1trTmVlZERyYWluXSkge1xuICAgICAgcXVldWVNaWNyb3Rhc2soKCkgPT4ge1xuICAgICAgICBpZiAodGhpc1trTmVlZERyYWluXSkge1xuICAgICAgICAgIHRoaXNba09uRHJhaW5dKGNsaWVudFtrVXJsXSwgW3RoaXMsIGNsaWVudF0pXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXNcbiAgfVxuXG4gIFtrUmVtb3ZlQ2xpZW50XSAoY2xpZW50KSB7XG4gICAgY2xpZW50LmNsb3NlKCgpID0+IHtcbiAgICAgIGNvbnN0IGlkeCA9IHRoaXNba0NsaWVudHNdLmluZGV4T2YoY2xpZW50KVxuICAgICAgaWYgKGlkeCAhPT0gLTEpIHtcbiAgICAgICAgdGhpc1trQ2xpZW50c10uc3BsaWNlKGlkeCwgMSlcbiAgICAgIH1cbiAgICB9KVxuXG4gICAgdGhpc1trTmVlZERyYWluXSA9IHRoaXNba0NsaWVudHNdLnNvbWUoZGlzcGF0Y2hlciA9PiAoXG4gICAgICAhZGlzcGF0Y2hlcltrTmVlZERyYWluXSAmJlxuICAgICAgZGlzcGF0Y2hlci5jbG9zZWQgIT09IHRydWUgJiZcbiAgICAgIGRpc3BhdGNoZXIuZGVzdHJveWVkICE9PSB0cnVlXG4gICAgKSlcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgUG9vbEJhc2UsXG4gIGtDbGllbnRzLFxuICBrTmVlZERyYWluLFxuICBrQWRkQ2xpZW50LFxuICBrUmVtb3ZlQ2xpZW50LFxuICBrR2V0RGlzcGF0Y2hlclxufVxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7XG4gIFBvb2xCYXNlLFxuICBrQ2xpZW50cyxcbiAga05lZWREcmFpbixcbiAga0FkZENsaWVudCxcbiAga0dldERpc3BhdGNoZXJcbn0gPSByZXF1aXJlKCcuL3Bvb2wtYmFzZScpXG5jb25zdCBDbGllbnQgPSByZXF1aXJlKCcuL2NsaWVudCcpXG5jb25zdCB7XG4gIEludmFsaWRBcmd1bWVudEVycm9yXG59ID0gcmVxdWlyZSgnLi4vY29yZS9lcnJvcnMnKVxuY29uc3QgdXRpbCA9IHJlcXVpcmUoJy4uL2NvcmUvdXRpbCcpXG5jb25zdCB7IGtVcmwsIGtJbnRlcmNlcHRvcnMgfSA9IHJlcXVpcmUoJy4uL2NvcmUvc3ltYm9scycpXG5jb25zdCBidWlsZENvbm5lY3RvciA9IHJlcXVpcmUoJy4uL2NvcmUvY29ubmVjdCcpXG5cbmNvbnN0IGtPcHRpb25zID0gU3ltYm9sKCdvcHRpb25zJylcbmNvbnN0IGtDb25uZWN0aW9ucyA9IFN5bWJvbCgnY29ubmVjdGlvbnMnKVxuY29uc3Qga0ZhY3RvcnkgPSBTeW1ib2woJ2ZhY3RvcnknKVxuXG5mdW5jdGlvbiBkZWZhdWx0RmFjdG9yeSAob3JpZ2luLCBvcHRzKSB7XG4gIHJldHVybiBuZXcgQ2xpZW50KG9yaWdpbiwgb3B0cylcbn1cblxuY2xhc3MgUG9vbCBleHRlbmRzIFBvb2xCYXNlIHtcbiAgY29uc3RydWN0b3IgKG9yaWdpbiwge1xuICAgIGNvbm5lY3Rpb25zLFxuICAgIGZhY3RvcnkgPSBkZWZhdWx0RmFjdG9yeSxcbiAgICBjb25uZWN0LFxuICAgIGNvbm5lY3RUaW1lb3V0LFxuICAgIHRscyxcbiAgICBtYXhDYWNoZWRTZXNzaW9ucyxcbiAgICBzb2NrZXRQYXRoLFxuICAgIGF1dG9TZWxlY3RGYW1pbHksXG4gICAgYXV0b1NlbGVjdEZhbWlseUF0dGVtcHRUaW1lb3V0LFxuICAgIGFsbG93SDIsXG4gICAgLi4ub3B0aW9uc1xuICB9ID0ge30pIHtcbiAgICBzdXBlcigpXG5cbiAgICBpZiAoY29ubmVjdGlvbnMgIT0gbnVsbCAmJiAoIU51bWJlci5pc0Zpbml0ZShjb25uZWN0aW9ucykgfHwgY29ubmVjdGlvbnMgPCAwKSkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIGNvbm5lY3Rpb25zJylcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGZhY3RvcnkgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignZmFjdG9yeSBtdXN0IGJlIGEgZnVuY3Rpb24uJylcbiAgICB9XG5cbiAgICBpZiAoY29ubmVjdCAhPSBudWxsICYmIHR5cGVvZiBjb25uZWN0ICE9PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBjb25uZWN0ICE9PSAnb2JqZWN0Jykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdjb25uZWN0IG11c3QgYmUgYSBmdW5jdGlvbiBvciBhbiBvYmplY3QnKVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgY29ubmVjdCAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgY29ubmVjdCA9IGJ1aWxkQ29ubmVjdG9yKHtcbiAgICAgICAgLi4udGxzLFxuICAgICAgICBtYXhDYWNoZWRTZXNzaW9ucyxcbiAgICAgICAgYWxsb3dIMixcbiAgICAgICAgc29ja2V0UGF0aCxcbiAgICAgICAgdGltZW91dDogY29ubmVjdFRpbWVvdXQsXG4gICAgICAgIC4uLihhdXRvU2VsZWN0RmFtaWx5ID8geyBhdXRvU2VsZWN0RmFtaWx5LCBhdXRvU2VsZWN0RmFtaWx5QXR0ZW1wdFRpbWVvdXQgfSA6IHVuZGVmaW5lZCksXG4gICAgICAgIC4uLmNvbm5lY3RcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgdGhpc1trSW50ZXJjZXB0b3JzXSA9IG9wdGlvbnMuaW50ZXJjZXB0b3JzPy5Qb29sICYmIEFycmF5LmlzQXJyYXkob3B0aW9ucy5pbnRlcmNlcHRvcnMuUG9vbClcbiAgICAgID8gb3B0aW9ucy5pbnRlcmNlcHRvcnMuUG9vbFxuICAgICAgOiBbXVxuICAgIHRoaXNba0Nvbm5lY3Rpb25zXSA9IGNvbm5lY3Rpb25zIHx8IG51bGxcbiAgICB0aGlzW2tVcmxdID0gdXRpbC5wYXJzZU9yaWdpbihvcmlnaW4pXG4gICAgdGhpc1trT3B0aW9uc10gPSB7IC4uLnV0aWwuZGVlcENsb25lKG9wdGlvbnMpLCBjb25uZWN0LCBhbGxvd0gyIH1cbiAgICB0aGlzW2tPcHRpb25zXS5pbnRlcmNlcHRvcnMgPSBvcHRpb25zLmludGVyY2VwdG9yc1xuICAgICAgPyB7IC4uLm9wdGlvbnMuaW50ZXJjZXB0b3JzIH1cbiAgICAgIDogdW5kZWZpbmVkXG4gICAgdGhpc1trRmFjdG9yeV0gPSBmYWN0b3J5XG5cbiAgICB0aGlzLm9uKCdjb25uZWN0aW9uRXJyb3InLCAob3JpZ2luLCB0YXJnZXRzLCBlcnJvcikgPT4ge1xuICAgICAgLy8gSWYgYSBjb25uZWN0aW9uIGVycm9yIG9jY3Vycywgd2UgcmVtb3ZlIHRoZSBjbGllbnQgZnJvbSB0aGUgcG9vbCxcbiAgICAgIC8vIGFuZCBlbWl0IGEgY29ubmVjdGlvbkVycm9yIGV2ZW50LiBUaGV5IHdpbGwgbm90IGJlIHJlLXVzZWQuXG4gICAgICAvLyBGaXhlcyBodHRwczovL2dpdGh1Yi5jb20vbm9kZWpzL3VuZGljaS9pc3N1ZXMvMzg5NVxuICAgICAgZm9yIChjb25zdCB0YXJnZXQgb2YgdGFyZ2V0cykge1xuICAgICAgICAvLyBEbyBub3QgdXNlIGtSZW1vdmVDbGllbnQgaGVyZSwgYXMgaXQgd2lsbCBjbG9zZSB0aGUgY2xpZW50LFxuICAgICAgICAvLyBidXQgdGhlIGNsaWVudCBjYW5ub3QgYmUgY2xvc2VkIGluIHRoaXMgc3RhdGUuXG4gICAgICAgIGNvbnN0IGlkeCA9IHRoaXNba0NsaWVudHNdLmluZGV4T2YodGFyZ2V0KVxuICAgICAgICBpZiAoaWR4ICE9PSAtMSkge1xuICAgICAgICAgIHRoaXNba0NsaWVudHNdLnNwbGljZShpZHgsIDEpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KVxuICB9XG5cbiAgW2tHZXREaXNwYXRjaGVyXSAoKSB7XG4gICAgZm9yIChjb25zdCBjbGllbnQgb2YgdGhpc1trQ2xpZW50c10pIHtcbiAgICAgIGlmICghY2xpZW50W2tOZWVkRHJhaW5dKSB7XG4gICAgICAgIHJldHVybiBjbGllbnRcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoIXRoaXNba0Nvbm5lY3Rpb25zXSB8fCB0aGlzW2tDbGllbnRzXS5sZW5ndGggPCB0aGlzW2tDb25uZWN0aW9uc10pIHtcbiAgICAgIGNvbnN0IGRpc3BhdGNoZXIgPSB0aGlzW2tGYWN0b3J5XSh0aGlzW2tVcmxdLCB0aGlzW2tPcHRpb25zXSlcbiAgICAgIHRoaXNba0FkZENsaWVudF0oZGlzcGF0Y2hlcilcbiAgICAgIHJldHVybiBkaXNwYXRjaGVyXG4gICAgfVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gUG9vbFxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7XG4gIEJhbGFuY2VkUG9vbE1pc3NpbmdVcHN0cmVhbUVycm9yLFxuICBJbnZhbGlkQXJndW1lbnRFcnJvclxufSA9IHJlcXVpcmUoJy4uL2NvcmUvZXJyb3JzJylcbmNvbnN0IHtcbiAgUG9vbEJhc2UsXG4gIGtDbGllbnRzLFxuICBrTmVlZERyYWluLFxuICBrQWRkQ2xpZW50LFxuICBrUmVtb3ZlQ2xpZW50LFxuICBrR2V0RGlzcGF0Y2hlclxufSA9IHJlcXVpcmUoJy4vcG9vbC1iYXNlJylcbmNvbnN0IFBvb2wgPSByZXF1aXJlKCcuL3Bvb2wnKVxuY29uc3QgeyBrVXJsLCBrSW50ZXJjZXB0b3JzIH0gPSByZXF1aXJlKCcuLi9jb3JlL3N5bWJvbHMnKVxuY29uc3QgeyBwYXJzZU9yaWdpbiB9ID0gcmVxdWlyZSgnLi4vY29yZS91dGlsJylcbmNvbnN0IGtGYWN0b3J5ID0gU3ltYm9sKCdmYWN0b3J5JylcblxuY29uc3Qga09wdGlvbnMgPSBTeW1ib2woJ29wdGlvbnMnKVxuY29uc3Qga0dyZWF0ZXN0Q29tbW9uRGl2aXNvciA9IFN5bWJvbCgna0dyZWF0ZXN0Q29tbW9uRGl2aXNvcicpXG5jb25zdCBrQ3VycmVudFdlaWdodCA9IFN5bWJvbCgna0N1cnJlbnRXZWlnaHQnKVxuY29uc3Qga0luZGV4ID0gU3ltYm9sKCdrSW5kZXgnKVxuY29uc3Qga1dlaWdodCA9IFN5bWJvbCgna1dlaWdodCcpXG5jb25zdCBrTWF4V2VpZ2h0UGVyU2VydmVyID0gU3ltYm9sKCdrTWF4V2VpZ2h0UGVyU2VydmVyJylcbmNvbnN0IGtFcnJvclBlbmFsdHkgPSBTeW1ib2woJ2tFcnJvclBlbmFsdHknKVxuXG4vKipcbiAqIENhbGN1bGF0ZSB0aGUgZ3JlYXRlc3QgY29tbW9uIGRpdmlzb3Igb2YgdHdvIG51bWJlcnMgYnlcbiAqIHVzaW5nIHRoZSBFdWNsaWRlYW4gYWxnb3JpdGhtLlxuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSBhXG4gKiBAcGFyYW0ge251bWJlcn0gYlxuICogQHJldHVybnMge251bWJlcn1cbiAqL1xuZnVuY3Rpb24gZ2V0R3JlYXRlc3RDb21tb25EaXZpc29yIChhLCBiKSB7XG4gIGlmIChhID09PSAwKSByZXR1cm4gYlxuXG4gIHdoaWxlIChiICE9PSAwKSB7XG4gICAgY29uc3QgdCA9IGJcbiAgICBiID0gYSAlIGJcbiAgICBhID0gdFxuICB9XG4gIHJldHVybiBhXG59XG5cbmZ1bmN0aW9uIGRlZmF1bHRGYWN0b3J5IChvcmlnaW4sIG9wdHMpIHtcbiAgcmV0dXJuIG5ldyBQb29sKG9yaWdpbiwgb3B0cylcbn1cblxuY2xhc3MgQmFsYW5jZWRQb29sIGV4dGVuZHMgUG9vbEJhc2Uge1xuICBjb25zdHJ1Y3RvciAodXBzdHJlYW1zID0gW10sIHsgZmFjdG9yeSA9IGRlZmF1bHRGYWN0b3J5LCAuLi5vcHRzIH0gPSB7fSkge1xuICAgIHN1cGVyKClcblxuICAgIHRoaXNba09wdGlvbnNdID0gb3B0c1xuICAgIHRoaXNba0luZGV4XSA9IC0xXG4gICAgdGhpc1trQ3VycmVudFdlaWdodF0gPSAwXG5cbiAgICB0aGlzW2tNYXhXZWlnaHRQZXJTZXJ2ZXJdID0gdGhpc1trT3B0aW9uc10ubWF4V2VpZ2h0UGVyU2VydmVyIHx8IDEwMFxuICAgIHRoaXNba0Vycm9yUGVuYWx0eV0gPSB0aGlzW2tPcHRpb25zXS5lcnJvclBlbmFsdHkgfHwgMTVcblxuICAgIGlmICghQXJyYXkuaXNBcnJheSh1cHN0cmVhbXMpKSB7XG4gICAgICB1cHN0cmVhbXMgPSBbdXBzdHJlYW1zXVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgZmFjdG9yeSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdmYWN0b3J5IG11c3QgYmUgYSBmdW5jdGlvbi4nKVxuICAgIH1cblxuICAgIHRoaXNba0ludGVyY2VwdG9yc10gPSBvcHRzLmludGVyY2VwdG9ycz8uQmFsYW5jZWRQb29sICYmIEFycmF5LmlzQXJyYXkob3B0cy5pbnRlcmNlcHRvcnMuQmFsYW5jZWRQb29sKVxuICAgICAgPyBvcHRzLmludGVyY2VwdG9ycy5CYWxhbmNlZFBvb2xcbiAgICAgIDogW11cbiAgICB0aGlzW2tGYWN0b3J5XSA9IGZhY3RvcnlcblxuICAgIGZvciAoY29uc3QgdXBzdHJlYW0gb2YgdXBzdHJlYW1zKSB7XG4gICAgICB0aGlzLmFkZFVwc3RyZWFtKHVwc3RyZWFtKVxuICAgIH1cbiAgICB0aGlzLl91cGRhdGVCYWxhbmNlZFBvb2xTdGF0cygpXG4gIH1cblxuICBhZGRVcHN0cmVhbSAodXBzdHJlYW0pIHtcbiAgICBjb25zdCB1cHN0cmVhbU9yaWdpbiA9IHBhcnNlT3JpZ2luKHVwc3RyZWFtKS5vcmlnaW5cblxuICAgIGlmICh0aGlzW2tDbGllbnRzXS5maW5kKChwb29sKSA9PiAoXG4gICAgICBwb29sW2tVcmxdLm9yaWdpbiA9PT0gdXBzdHJlYW1PcmlnaW4gJiZcbiAgICAgIHBvb2wuY2xvc2VkICE9PSB0cnVlICYmXG4gICAgICBwb29sLmRlc3Ryb3llZCAhPT0gdHJ1ZVxuICAgICkpKSB7XG4gICAgICByZXR1cm4gdGhpc1xuICAgIH1cbiAgICBjb25zdCBwb29sID0gdGhpc1trRmFjdG9yeV0odXBzdHJlYW1PcmlnaW4sIE9iamVjdC5hc3NpZ24oe30sIHRoaXNba09wdGlvbnNdKSlcblxuICAgIHRoaXNba0FkZENsaWVudF0ocG9vbClcbiAgICBwb29sLm9uKCdjb25uZWN0JywgKCkgPT4ge1xuICAgICAgcG9vbFtrV2VpZ2h0XSA9IE1hdGgubWluKHRoaXNba01heFdlaWdodFBlclNlcnZlcl0sIHBvb2xba1dlaWdodF0gKyB0aGlzW2tFcnJvclBlbmFsdHldKVxuICAgIH0pXG5cbiAgICBwb29sLm9uKCdjb25uZWN0aW9uRXJyb3InLCAoKSA9PiB7XG4gICAgICBwb29sW2tXZWlnaHRdID0gTWF0aC5tYXgoMSwgcG9vbFtrV2VpZ2h0XSAtIHRoaXNba0Vycm9yUGVuYWx0eV0pXG4gICAgICB0aGlzLl91cGRhdGVCYWxhbmNlZFBvb2xTdGF0cygpXG4gICAgfSlcblxuICAgIHBvb2wub24oJ2Rpc2Nvbm5lY3QnLCAoLi4uYXJncykgPT4ge1xuICAgICAgY29uc3QgZXJyID0gYXJnc1syXVxuICAgICAgaWYgKGVyciAmJiBlcnIuY29kZSA9PT0gJ1VORF9FUlJfU09DS0VUJykge1xuICAgICAgICAvLyBkZWNyZWFzZSB0aGUgd2VpZ2h0IG9mIHRoZSBwb29sLlxuICAgICAgICBwb29sW2tXZWlnaHRdID0gTWF0aC5tYXgoMSwgcG9vbFtrV2VpZ2h0XSAtIHRoaXNba0Vycm9yUGVuYWx0eV0pXG4gICAgICAgIHRoaXMuX3VwZGF0ZUJhbGFuY2VkUG9vbFN0YXRzKClcbiAgICAgIH1cbiAgICB9KVxuXG4gICAgZm9yIChjb25zdCBjbGllbnQgb2YgdGhpc1trQ2xpZW50c10pIHtcbiAgICAgIGNsaWVudFtrV2VpZ2h0XSA9IHRoaXNba01heFdlaWdodFBlclNlcnZlcl1cbiAgICB9XG5cbiAgICB0aGlzLl91cGRhdGVCYWxhbmNlZFBvb2xTdGF0cygpXG5cbiAgICByZXR1cm4gdGhpc1xuICB9XG5cbiAgX3VwZGF0ZUJhbGFuY2VkUG9vbFN0YXRzICgpIHtcbiAgICBsZXQgcmVzdWx0ID0gMFxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpc1trQ2xpZW50c10ubGVuZ3RoOyBpKyspIHtcbiAgICAgIHJlc3VsdCA9IGdldEdyZWF0ZXN0Q29tbW9uRGl2aXNvcih0aGlzW2tDbGllbnRzXVtpXVtrV2VpZ2h0XSwgcmVzdWx0KVxuICAgIH1cblxuICAgIHRoaXNba0dyZWF0ZXN0Q29tbW9uRGl2aXNvcl0gPSByZXN1bHRcbiAgfVxuXG4gIHJlbW92ZVVwc3RyZWFtICh1cHN0cmVhbSkge1xuICAgIGNvbnN0IHVwc3RyZWFtT3JpZ2luID0gcGFyc2VPcmlnaW4odXBzdHJlYW0pLm9yaWdpblxuXG4gICAgY29uc3QgcG9vbCA9IHRoaXNba0NsaWVudHNdLmZpbmQoKHBvb2wpID0+IChcbiAgICAgIHBvb2xba1VybF0ub3JpZ2luID09PSB1cHN0cmVhbU9yaWdpbiAmJlxuICAgICAgcG9vbC5jbG9zZWQgIT09IHRydWUgJiZcbiAgICAgIHBvb2wuZGVzdHJveWVkICE9PSB0cnVlXG4gICAgKSlcblxuICAgIGlmIChwb29sKSB7XG4gICAgICB0aGlzW2tSZW1vdmVDbGllbnRdKHBvb2wpXG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXNcbiAgfVxuXG4gIGdldCB1cHN0cmVhbXMgKCkge1xuICAgIHJldHVybiB0aGlzW2tDbGllbnRzXVxuICAgICAgLmZpbHRlcihkaXNwYXRjaGVyID0+IGRpc3BhdGNoZXIuY2xvc2VkICE9PSB0cnVlICYmIGRpc3BhdGNoZXIuZGVzdHJveWVkICE9PSB0cnVlKVxuICAgICAgLm1hcCgocCkgPT4gcFtrVXJsXS5vcmlnaW4pXG4gIH1cblxuICBba0dldERpc3BhdGNoZXJdICgpIHtcbiAgICAvLyBXZSB2YWxpZGF0ZSB0aGF0IHBvb2xzIGlzIGdyZWF0ZXIgdGhhbiAwLFxuICAgIC8vIG90aGVyd2lzZSB3ZSB3b3VsZCBoYXZlIHRvIHdhaXQgdW50aWwgYW4gdXBzdHJlYW1cbiAgICAvLyBpcyBhZGRlZCwgd2hpY2ggbWlnaHQgbmV2ZXIgaGFwcGVuLlxuICAgIGlmICh0aGlzW2tDbGllbnRzXS5sZW5ndGggPT09IDApIHtcbiAgICAgIHRocm93IG5ldyBCYWxhbmNlZFBvb2xNaXNzaW5nVXBzdHJlYW1FcnJvcigpXG4gICAgfVxuXG4gICAgY29uc3QgZGlzcGF0Y2hlciA9IHRoaXNba0NsaWVudHNdLmZpbmQoZGlzcGF0Y2hlciA9PiAoXG4gICAgICAhZGlzcGF0Y2hlcltrTmVlZERyYWluXSAmJlxuICAgICAgZGlzcGF0Y2hlci5jbG9zZWQgIT09IHRydWUgJiZcbiAgICAgIGRpc3BhdGNoZXIuZGVzdHJveWVkICE9PSB0cnVlXG4gICAgKSlcblxuICAgIGlmICghZGlzcGF0Y2hlcikge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgY29uc3QgYWxsQ2xpZW50c0J1c3kgPSB0aGlzW2tDbGllbnRzXS5tYXAocG9vbCA9PiBwb29sW2tOZWVkRHJhaW5dKS5yZWR1Y2UoKGEsIGIpID0+IGEgJiYgYiwgdHJ1ZSlcblxuICAgIGlmIChhbGxDbGllbnRzQnVzeSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgbGV0IGNvdW50ZXIgPSAwXG5cbiAgICBsZXQgbWF4V2VpZ2h0SW5kZXggPSB0aGlzW2tDbGllbnRzXS5maW5kSW5kZXgocG9vbCA9PiAhcG9vbFtrTmVlZERyYWluXSlcblxuICAgIHdoaWxlIChjb3VudGVyKysgPCB0aGlzW2tDbGllbnRzXS5sZW5ndGgpIHtcbiAgICAgIHRoaXNba0luZGV4XSA9ICh0aGlzW2tJbmRleF0gKyAxKSAlIHRoaXNba0NsaWVudHNdLmxlbmd0aFxuICAgICAgY29uc3QgcG9vbCA9IHRoaXNba0NsaWVudHNdW3RoaXNba0luZGV4XV1cblxuICAgICAgLy8gZmluZCBwb29sIGluZGV4IHdpdGggdGhlIGxhcmdlc3Qgd2VpZ2h0XG4gICAgICBpZiAocG9vbFtrV2VpZ2h0XSA+IHRoaXNba0NsaWVudHNdW21heFdlaWdodEluZGV4XVtrV2VpZ2h0XSAmJiAhcG9vbFtrTmVlZERyYWluXSkge1xuICAgICAgICBtYXhXZWlnaHRJbmRleCA9IHRoaXNba0luZGV4XVxuICAgICAgfVxuXG4gICAgICAvLyBkZWNyZWFzZSB0aGUgY3VycmVudCB3ZWlnaHQgZXZlcnkgYHRoaXNba0NsaWVudHNdLmxlbmd0aGAuXG4gICAgICBpZiAodGhpc1trSW5kZXhdID09PSAwKSB7XG4gICAgICAgIC8vIFNldCB0aGUgY3VycmVudCB3ZWlnaHQgdG8gdGhlIG5leHQgbG93ZXIgd2VpZ2h0LlxuICAgICAgICB0aGlzW2tDdXJyZW50V2VpZ2h0XSA9IHRoaXNba0N1cnJlbnRXZWlnaHRdIC0gdGhpc1trR3JlYXRlc3RDb21tb25EaXZpc29yXVxuXG4gICAgICAgIGlmICh0aGlzW2tDdXJyZW50V2VpZ2h0XSA8PSAwKSB7XG4gICAgICAgICAgdGhpc1trQ3VycmVudFdlaWdodF0gPSB0aGlzW2tNYXhXZWlnaHRQZXJTZXJ2ZXJdXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChwb29sW2tXZWlnaHRdID49IHRoaXNba0N1cnJlbnRXZWlnaHRdICYmICghcG9vbFtrTmVlZERyYWluXSkpIHtcbiAgICAgICAgcmV0dXJuIHBvb2xcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzW2tDdXJyZW50V2VpZ2h0XSA9IHRoaXNba0NsaWVudHNdW21heFdlaWdodEluZGV4XVtrV2VpZ2h0XVxuICAgIHRoaXNba0luZGV4XSA9IG1heFdlaWdodEluZGV4XG4gICAgcmV0dXJuIHRoaXNba0NsaWVudHNdW21heFdlaWdodEluZGV4XVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gQmFsYW5jZWRQb29sXG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHsgSW52YWxpZEFyZ3VtZW50RXJyb3IgfSA9IHJlcXVpcmUoJy4uL2NvcmUvZXJyb3JzJylcbmNvbnN0IHsga0NsaWVudHMsIGtSdW5uaW5nLCBrQ2xvc2UsIGtEZXN0cm95LCBrRGlzcGF0Y2gsIGtJbnRlcmNlcHRvcnMgfSA9IHJlcXVpcmUoJy4uL2NvcmUvc3ltYm9scycpXG5jb25zdCBEaXNwYXRjaGVyQmFzZSA9IHJlcXVpcmUoJy4vZGlzcGF0Y2hlci1iYXNlJylcbmNvbnN0IFBvb2wgPSByZXF1aXJlKCcuL3Bvb2wnKVxuY29uc3QgQ2xpZW50ID0gcmVxdWlyZSgnLi9jbGllbnQnKVxuY29uc3QgdXRpbCA9IHJlcXVpcmUoJy4uL2NvcmUvdXRpbCcpXG5jb25zdCBjcmVhdGVSZWRpcmVjdEludGVyY2VwdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJjZXB0b3IvcmVkaXJlY3QtaW50ZXJjZXB0b3InKVxuXG5jb25zdCBrT25Db25uZWN0ID0gU3ltYm9sKCdvbkNvbm5lY3QnKVxuY29uc3Qga09uRGlzY29ubmVjdCA9IFN5bWJvbCgnb25EaXNjb25uZWN0JylcbmNvbnN0IGtPbkNvbm5lY3Rpb25FcnJvciA9IFN5bWJvbCgnb25Db25uZWN0aW9uRXJyb3InKVxuY29uc3Qga01heFJlZGlyZWN0aW9ucyA9IFN5bWJvbCgnbWF4UmVkaXJlY3Rpb25zJylcbmNvbnN0IGtPbkRyYWluID0gU3ltYm9sKCdvbkRyYWluJylcbmNvbnN0IGtGYWN0b3J5ID0gU3ltYm9sKCdmYWN0b3J5JylcbmNvbnN0IGtPcHRpb25zID0gU3ltYm9sKCdvcHRpb25zJylcblxuZnVuY3Rpb24gZGVmYXVsdEZhY3RvcnkgKG9yaWdpbiwgb3B0cykge1xuICByZXR1cm4gb3B0cyAmJiBvcHRzLmNvbm5lY3Rpb25zID09PSAxXG4gICAgPyBuZXcgQ2xpZW50KG9yaWdpbiwgb3B0cylcbiAgICA6IG5ldyBQb29sKG9yaWdpbiwgb3B0cylcbn1cblxuY2xhc3MgQWdlbnQgZXh0ZW5kcyBEaXNwYXRjaGVyQmFzZSB7XG4gIGNvbnN0cnVjdG9yICh7IGZhY3RvcnkgPSBkZWZhdWx0RmFjdG9yeSwgbWF4UmVkaXJlY3Rpb25zID0gMCwgY29ubmVjdCwgLi4ub3B0aW9ucyB9ID0ge30pIHtcbiAgICBzdXBlcigpXG5cbiAgICBpZiAodHlwZW9mIGZhY3RvcnkgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignZmFjdG9yeSBtdXN0IGJlIGEgZnVuY3Rpb24uJylcbiAgICB9XG5cbiAgICBpZiAoY29ubmVjdCAhPSBudWxsICYmIHR5cGVvZiBjb25uZWN0ICE9PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBjb25uZWN0ICE9PSAnb2JqZWN0Jykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdjb25uZWN0IG11c3QgYmUgYSBmdW5jdGlvbiBvciBhbiBvYmplY3QnKVxuICAgIH1cblxuICAgIGlmICghTnVtYmVyLmlzSW50ZWdlcihtYXhSZWRpcmVjdGlvbnMpIHx8IG1heFJlZGlyZWN0aW9ucyA8IDApIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignbWF4UmVkaXJlY3Rpb25zIG11c3QgYmUgYSBwb3NpdGl2ZSBudW1iZXInKVxuICAgIH1cblxuICAgIGlmIChjb25uZWN0ICYmIHR5cGVvZiBjb25uZWN0ICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICBjb25uZWN0ID0geyAuLi5jb25uZWN0IH1cbiAgICB9XG5cbiAgICB0aGlzW2tJbnRlcmNlcHRvcnNdID0gb3B0aW9ucy5pbnRlcmNlcHRvcnM/LkFnZW50ICYmIEFycmF5LmlzQXJyYXkob3B0aW9ucy5pbnRlcmNlcHRvcnMuQWdlbnQpXG4gICAgICA/IG9wdGlvbnMuaW50ZXJjZXB0b3JzLkFnZW50XG4gICAgICA6IFtjcmVhdGVSZWRpcmVjdEludGVyY2VwdG9yKHsgbWF4UmVkaXJlY3Rpb25zIH0pXVxuXG4gICAgdGhpc1trT3B0aW9uc10gPSB7IC4uLnV0aWwuZGVlcENsb25lKG9wdGlvbnMpLCBjb25uZWN0IH1cbiAgICB0aGlzW2tPcHRpb25zXS5pbnRlcmNlcHRvcnMgPSBvcHRpb25zLmludGVyY2VwdG9yc1xuICAgICAgPyB7IC4uLm9wdGlvbnMuaW50ZXJjZXB0b3JzIH1cbiAgICAgIDogdW5kZWZpbmVkXG4gICAgdGhpc1trTWF4UmVkaXJlY3Rpb25zXSA9IG1heFJlZGlyZWN0aW9uc1xuICAgIHRoaXNba0ZhY3RvcnldID0gZmFjdG9yeVxuICAgIHRoaXNba0NsaWVudHNdID0gbmV3IE1hcCgpXG5cbiAgICB0aGlzW2tPbkRyYWluXSA9IChvcmlnaW4sIHRhcmdldHMpID0+IHtcbiAgICAgIHRoaXMuZW1pdCgnZHJhaW4nLCBvcmlnaW4sIFt0aGlzLCAuLi50YXJnZXRzXSlcbiAgICB9XG5cbiAgICB0aGlzW2tPbkNvbm5lY3RdID0gKG9yaWdpbiwgdGFyZ2V0cykgPT4ge1xuICAgICAgdGhpcy5lbWl0KCdjb25uZWN0Jywgb3JpZ2luLCBbdGhpcywgLi4udGFyZ2V0c10pXG4gICAgfVxuXG4gICAgdGhpc1trT25EaXNjb25uZWN0XSA9IChvcmlnaW4sIHRhcmdldHMsIGVycikgPT4ge1xuICAgICAgdGhpcy5lbWl0KCdkaXNjb25uZWN0Jywgb3JpZ2luLCBbdGhpcywgLi4udGFyZ2V0c10sIGVycilcbiAgICB9XG5cbiAgICB0aGlzW2tPbkNvbm5lY3Rpb25FcnJvcl0gPSAob3JpZ2luLCB0YXJnZXRzLCBlcnIpID0+IHtcbiAgICAgIHRoaXMuZW1pdCgnY29ubmVjdGlvbkVycm9yJywgb3JpZ2luLCBbdGhpcywgLi4udGFyZ2V0c10sIGVycilcbiAgICB9XG4gIH1cblxuICBnZXQgW2tSdW5uaW5nXSAoKSB7XG4gICAgbGV0IHJldCA9IDBcbiAgICBmb3IgKGNvbnN0IGNsaWVudCBvZiB0aGlzW2tDbGllbnRzXS52YWx1ZXMoKSkge1xuICAgICAgcmV0ICs9IGNsaWVudFtrUnVubmluZ11cbiAgICB9XG4gICAgcmV0dXJuIHJldFxuICB9XG5cbiAgW2tEaXNwYXRjaF0gKG9wdHMsIGhhbmRsZXIpIHtcbiAgICBsZXQga2V5XG4gICAgaWYgKG9wdHMub3JpZ2luICYmICh0eXBlb2Ygb3B0cy5vcmlnaW4gPT09ICdzdHJpbmcnIHx8IG9wdHMub3JpZ2luIGluc3RhbmNlb2YgVVJMKSkge1xuICAgICAga2V5ID0gU3RyaW5nKG9wdHMub3JpZ2luKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ29wdHMub3JpZ2luIG11c3QgYmUgYSBub24tZW1wdHkgc3RyaW5nIG9yIFVSTC4nKVxuICAgIH1cblxuICAgIGxldCBkaXNwYXRjaGVyID0gdGhpc1trQ2xpZW50c10uZ2V0KGtleSlcblxuICAgIGlmICghZGlzcGF0Y2hlcikge1xuICAgICAgZGlzcGF0Y2hlciA9IHRoaXNba0ZhY3RvcnldKG9wdHMub3JpZ2luLCB0aGlzW2tPcHRpb25zXSlcbiAgICAgICAgLm9uKCdkcmFpbicsIHRoaXNba09uRHJhaW5dKVxuICAgICAgICAub24oJ2Nvbm5lY3QnLCB0aGlzW2tPbkNvbm5lY3RdKVxuICAgICAgICAub24oJ2Rpc2Nvbm5lY3QnLCB0aGlzW2tPbkRpc2Nvbm5lY3RdKVxuICAgICAgICAub24oJ2Nvbm5lY3Rpb25FcnJvcicsIHRoaXNba09uQ29ubmVjdGlvbkVycm9yXSlcblxuICAgICAgLy8gVGhpcyBpbnRyb2R1Y2VzIGEgdGlueSBtZW1vcnkgbGVhaywgYXMgZGlzcGF0Y2hlcnMgYXJlIG5ldmVyIHJlbW92ZWQgZnJvbSB0aGUgbWFwLlxuICAgICAgLy8gVE9ETyhtY29sbGluYSk6IHJlbW92ZSB0ZSB0aW1lciB3aGVuIHRoZSBjbGllbnQvcG9vbCBkbyBub3QgaGF2ZSBhbnkgbW9yZVxuICAgICAgLy8gYWN0aXZlIGNvbm5lY3Rpb25zLlxuICAgICAgdGhpc1trQ2xpZW50c10uc2V0KGtleSwgZGlzcGF0Y2hlcilcbiAgICB9XG5cbiAgICByZXR1cm4gZGlzcGF0Y2hlci5kaXNwYXRjaChvcHRzLCBoYW5kbGVyKVxuICB9XG5cbiAgYXN5bmMgW2tDbG9zZV0gKCkge1xuICAgIGNvbnN0IGNsb3NlUHJvbWlzZXMgPSBbXVxuICAgIGZvciAoY29uc3QgY2xpZW50IG9mIHRoaXNba0NsaWVudHNdLnZhbHVlcygpKSB7XG4gICAgICBjbG9zZVByb21pc2VzLnB1c2goY2xpZW50LmNsb3NlKCkpXG4gICAgfVxuICAgIHRoaXNba0NsaWVudHNdLmNsZWFyKClcblxuICAgIGF3YWl0IFByb21pc2UuYWxsKGNsb3NlUHJvbWlzZXMpXG4gIH1cblxuICBhc3luYyBba0Rlc3Ryb3ldIChlcnIpIHtcbiAgICBjb25zdCBkZXN0cm95UHJvbWlzZXMgPSBbXVxuICAgIGZvciAoY29uc3QgY2xpZW50IG9mIHRoaXNba0NsaWVudHNdLnZhbHVlcygpKSB7XG4gICAgICBkZXN0cm95UHJvbWlzZXMucHVzaChjbGllbnQuZGVzdHJveShlcnIpKVxuICAgIH1cbiAgICB0aGlzW2tDbGllbnRzXS5jbGVhcigpXG5cbiAgICBhd2FpdCBQcm9taXNlLmFsbChkZXN0cm95UHJvbWlzZXMpXG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBBZ2VudFxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7IGtQcm94eSwga0Nsb3NlLCBrRGVzdHJveSwga0ludGVyY2VwdG9ycyB9ID0gcmVxdWlyZSgnLi4vY29yZS9zeW1ib2xzJylcbmNvbnN0IHsgVVJMIH0gPSByZXF1aXJlKCdub2RlOnVybCcpXG5jb25zdCBBZ2VudCA9IHJlcXVpcmUoJy4vYWdlbnQnKVxuY29uc3QgUG9vbCA9IHJlcXVpcmUoJy4vcG9vbCcpXG5jb25zdCBEaXNwYXRjaGVyQmFzZSA9IHJlcXVpcmUoJy4vZGlzcGF0Y2hlci1iYXNlJylcbmNvbnN0IHsgSW52YWxpZEFyZ3VtZW50RXJyb3IsIFJlcXVlc3RBYm9ydGVkRXJyb3IsIFNlY3VyZVByb3h5Q29ubmVjdGlvbkVycm9yIH0gPSByZXF1aXJlKCcuLi9jb3JlL2Vycm9ycycpXG5jb25zdCBidWlsZENvbm5lY3RvciA9IHJlcXVpcmUoJy4uL2NvcmUvY29ubmVjdCcpXG5cbmNvbnN0IGtBZ2VudCA9IFN5bWJvbCgncHJveHkgYWdlbnQnKVxuY29uc3Qga0NsaWVudCA9IFN5bWJvbCgncHJveHkgY2xpZW50JylcbmNvbnN0IGtQcm94eUhlYWRlcnMgPSBTeW1ib2woJ3Byb3h5IGhlYWRlcnMnKVxuY29uc3Qga1JlcXVlc3RUbHMgPSBTeW1ib2woJ3JlcXVlc3QgdGxzIHNldHRpbmdzJylcbmNvbnN0IGtQcm94eVRscyA9IFN5bWJvbCgncHJveHkgdGxzIHNldHRpbmdzJylcbmNvbnN0IGtDb25uZWN0RW5kcG9pbnQgPSBTeW1ib2woJ2Nvbm5lY3QgZW5kcG9pbnQgZnVuY3Rpb24nKVxuXG5mdW5jdGlvbiBkZWZhdWx0UHJvdG9jb2xQb3J0IChwcm90b2NvbCkge1xuICByZXR1cm4gcHJvdG9jb2wgPT09ICdodHRwczonID8gNDQzIDogODBcbn1cblxuZnVuY3Rpb24gZGVmYXVsdEZhY3RvcnkgKG9yaWdpbiwgb3B0cykge1xuICByZXR1cm4gbmV3IFBvb2wob3JpZ2luLCBvcHRzKVxufVxuXG5jb25zdCBub29wID0gKCkgPT4ge31cblxuY2xhc3MgUHJveHlBZ2VudCBleHRlbmRzIERpc3BhdGNoZXJCYXNlIHtcbiAgY29uc3RydWN0b3IgKG9wdHMpIHtcbiAgICBzdXBlcigpXG5cbiAgICBpZiAoIW9wdHMgfHwgKHR5cGVvZiBvcHRzID09PSAnb2JqZWN0JyAmJiAhKG9wdHMgaW5zdGFuY2VvZiBVUkwpICYmICFvcHRzLnVyaSkpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignUHJveHkgdXJpIGlzIG1hbmRhdG9yeScpXG4gICAgfVxuXG4gICAgY29uc3QgeyBjbGllbnRGYWN0b3J5ID0gZGVmYXVsdEZhY3RvcnkgfSA9IG9wdHNcbiAgICBpZiAodHlwZW9mIGNsaWVudEZhY3RvcnkgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignUHJveHkgb3B0cy5jbGllbnRGYWN0b3J5IG11c3QgYmUgYSBmdW5jdGlvbi4nKVxuICAgIH1cblxuICAgIGNvbnN0IHVybCA9IHRoaXMuI2dldFVybChvcHRzKVxuICAgIGNvbnN0IHsgaHJlZiwgb3JpZ2luLCBwb3J0LCBwcm90b2NvbCwgdXNlcm5hbWUsIHBhc3N3b3JkLCBob3N0bmFtZTogcHJveHlIb3N0bmFtZSB9ID0gdXJsXG5cbiAgICB0aGlzW2tQcm94eV0gPSB7IHVyaTogaHJlZiwgcHJvdG9jb2wgfVxuICAgIHRoaXNba0ludGVyY2VwdG9yc10gPSBvcHRzLmludGVyY2VwdG9ycz8uUHJveHlBZ2VudCAmJiBBcnJheS5pc0FycmF5KG9wdHMuaW50ZXJjZXB0b3JzLlByb3h5QWdlbnQpXG4gICAgICA/IG9wdHMuaW50ZXJjZXB0b3JzLlByb3h5QWdlbnRcbiAgICAgIDogW11cbiAgICB0aGlzW2tSZXF1ZXN0VGxzXSA9IG9wdHMucmVxdWVzdFRsc1xuICAgIHRoaXNba1Byb3h5VGxzXSA9IG9wdHMucHJveHlUbHNcbiAgICB0aGlzW2tQcm94eUhlYWRlcnNdID0gb3B0cy5oZWFkZXJzIHx8IHt9XG5cbiAgICBpZiAob3B0cy5hdXRoICYmIG9wdHMudG9rZW4pIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignb3B0cy5hdXRoIGNhbm5vdCBiZSB1c2VkIGluIGNvbWJpbmF0aW9uIHdpdGggb3B0cy50b2tlbicpXG4gICAgfSBlbHNlIGlmIChvcHRzLmF1dGgpIHtcbiAgICAgIC8qIEBkZXByZWNhdGVkIGluIGZhdm91ciBvZiBvcHRzLnRva2VuICovXG4gICAgICB0aGlzW2tQcm94eUhlYWRlcnNdWydwcm94eS1hdXRob3JpemF0aW9uJ10gPSBgQmFzaWMgJHtvcHRzLmF1dGh9YFxuICAgIH0gZWxzZSBpZiAob3B0cy50b2tlbikge1xuICAgICAgdGhpc1trUHJveHlIZWFkZXJzXVsncHJveHktYXV0aG9yaXphdGlvbiddID0gb3B0cy50b2tlblxuICAgIH0gZWxzZSBpZiAodXNlcm5hbWUgJiYgcGFzc3dvcmQpIHtcbiAgICAgIHRoaXNba1Byb3h5SGVhZGVyc11bJ3Byb3h5LWF1dGhvcml6YXRpb24nXSA9IGBCYXNpYyAke0J1ZmZlci5mcm9tKGAke2RlY29kZVVSSUNvbXBvbmVudCh1c2VybmFtZSl9OiR7ZGVjb2RlVVJJQ29tcG9uZW50KHBhc3N3b3JkKX1gKS50b1N0cmluZygnYmFzZTY0Jyl9YFxuICAgIH1cblxuICAgIGNvbnN0IGNvbm5lY3QgPSBidWlsZENvbm5lY3Rvcih7IC4uLm9wdHMucHJveHlUbHMgfSlcbiAgICB0aGlzW2tDb25uZWN0RW5kcG9pbnRdID0gYnVpbGRDb25uZWN0b3IoeyAuLi5vcHRzLnJlcXVlc3RUbHMgfSlcbiAgICB0aGlzW2tDbGllbnRdID0gY2xpZW50RmFjdG9yeSh1cmwsIHsgY29ubmVjdCB9KVxuICAgIHRoaXNba0FnZW50XSA9IG5ldyBBZ2VudCh7XG4gICAgICAuLi5vcHRzLFxuICAgICAgY29ubmVjdDogYXN5bmMgKG9wdHMsIGNhbGxiYWNrKSA9PiB7XG4gICAgICAgIGxldCByZXF1ZXN0ZWRQYXRoID0gb3B0cy5ob3N0XG4gICAgICAgIGlmICghb3B0cy5wb3J0KSB7XG4gICAgICAgICAgcmVxdWVzdGVkUGF0aCArPSBgOiR7ZGVmYXVsdFByb3RvY29sUG9ydChvcHRzLnByb3RvY29sKX1gXG4gICAgICAgIH1cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCB7IHNvY2tldCwgc3RhdHVzQ29kZSB9ID0gYXdhaXQgdGhpc1trQ2xpZW50XS5jb25uZWN0KHtcbiAgICAgICAgICAgIG9yaWdpbixcbiAgICAgICAgICAgIHBvcnQsXG4gICAgICAgICAgICBwYXRoOiByZXF1ZXN0ZWRQYXRoLFxuICAgICAgICAgICAgc2lnbmFsOiBvcHRzLnNpZ25hbCxcbiAgICAgICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAgICAgLi4udGhpc1trUHJveHlIZWFkZXJzXSxcbiAgICAgICAgICAgICAgaG9zdDogb3B0cy5ob3N0XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc2VydmVybmFtZTogdGhpc1trUHJveHlUbHNdPy5zZXJ2ZXJuYW1lIHx8IHByb3h5SG9zdG5hbWVcbiAgICAgICAgICB9KVxuICAgICAgICAgIGlmIChzdGF0dXNDb2RlICE9PSAyMDApIHtcbiAgICAgICAgICAgIHNvY2tldC5vbignZXJyb3InLCBub29wKS5kZXN0cm95KClcbiAgICAgICAgICAgIGNhbGxiYWNrKG5ldyBSZXF1ZXN0QWJvcnRlZEVycm9yKGBQcm94eSByZXNwb25zZSAoJHtzdGF0dXNDb2RlfSkgIT09IDIwMCB3aGVuIEhUVFAgVHVubmVsaW5nYCkpXG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChvcHRzLnByb3RvY29sICE9PSAnaHR0cHM6Jykge1xuICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwgc29ja2V0KVxuICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgfVxuICAgICAgICAgIGxldCBzZXJ2ZXJuYW1lXG4gICAgICAgICAgaWYgKHRoaXNba1JlcXVlc3RUbHNdKSB7XG4gICAgICAgICAgICBzZXJ2ZXJuYW1lID0gdGhpc1trUmVxdWVzdFRsc10uc2VydmVybmFtZVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzZXJ2ZXJuYW1lID0gb3B0cy5zZXJ2ZXJuYW1lXG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXNba0Nvbm5lY3RFbmRwb2ludF0oeyAuLi5vcHRzLCBzZXJ2ZXJuYW1lLCBodHRwU29ja2V0OiBzb2NrZXQgfSwgY2FsbGJhY2spXG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIGlmIChlcnIuY29kZSA9PT0gJ0VSUl9UTFNfQ0VSVF9BTFROQU1FX0lOVkFMSUQnKSB7XG4gICAgICAgICAgICAvLyBUaHJvdyBhIGN1c3RvbSBlcnJvciB0byBhdm9pZCBsb29wIGluIGNsaWVudC5qcyNjb25uZWN0XG4gICAgICAgICAgICBjYWxsYmFjayhuZXcgU2VjdXJlUHJveHlDb25uZWN0aW9uRXJyb3IoZXJyKSlcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY2FsbGJhY2soZXJyKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pXG4gIH1cblxuICBkaXNwYXRjaCAob3B0cywgaGFuZGxlcikge1xuICAgIGNvbnN0IGhlYWRlcnMgPSBidWlsZEhlYWRlcnMob3B0cy5oZWFkZXJzKVxuICAgIHRocm93SWZQcm94eUF1dGhJc1NlbnQoaGVhZGVycylcblxuICAgIGlmIChoZWFkZXJzICYmICEoJ2hvc3QnIGluIGhlYWRlcnMpICYmICEoJ0hvc3QnIGluIGhlYWRlcnMpKSB7XG4gICAgICBjb25zdCB7IGhvc3QgfSA9IG5ldyBVUkwob3B0cy5vcmlnaW4pXG4gICAgICBoZWFkZXJzLmhvc3QgPSBob3N0XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXNba0FnZW50XS5kaXNwYXRjaChcbiAgICAgIHtcbiAgICAgICAgLi4ub3B0cyxcbiAgICAgICAgaGVhZGVyc1xuICAgICAgfSxcbiAgICAgIGhhbmRsZXJcbiAgICApXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtpbXBvcnQoJy4uL3R5cGVzL3Byb3h5LWFnZW50JykuUHJveHlBZ2VudC5PcHRpb25zIHwgc3RyaW5nIHwgVVJMfSBvcHRzXG4gICAqIEByZXR1cm5zIHtVUkx9XG4gICAqL1xuICAjZ2V0VXJsIChvcHRzKSB7XG4gICAgaWYgKHR5cGVvZiBvcHRzID09PSAnc3RyaW5nJykge1xuICAgICAgcmV0dXJuIG5ldyBVUkwob3B0cylcbiAgICB9IGVsc2UgaWYgKG9wdHMgaW5zdGFuY2VvZiBVUkwpIHtcbiAgICAgIHJldHVybiBvcHRzXG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBuZXcgVVJMKG9wdHMudXJpKVxuICAgIH1cbiAgfVxuXG4gIGFzeW5jIFtrQ2xvc2VdICgpIHtcbiAgICBhd2FpdCB0aGlzW2tBZ2VudF0uY2xvc2UoKVxuICAgIGF3YWl0IHRoaXNba0NsaWVudF0uY2xvc2UoKVxuICB9XG5cbiAgYXN5bmMgW2tEZXN0cm95XSAoKSB7XG4gICAgYXdhaXQgdGhpc1trQWdlbnRdLmRlc3Ryb3koKVxuICAgIGF3YWl0IHRoaXNba0NsaWVudF0uZGVzdHJveSgpXG4gIH1cbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ1tdIHwgUmVjb3JkPHN0cmluZywgc3RyaW5nPn0gaGVhZGVyc1xuICogQHJldHVybnMge1JlY29yZDxzdHJpbmcsIHN0cmluZz59XG4gKi9cbmZ1bmN0aW9uIGJ1aWxkSGVhZGVycyAoaGVhZGVycykge1xuICAvLyBXaGVuIHVzaW5nIHVuZGljaS5mZXRjaCwgdGhlIGhlYWRlcnMgbGlzdCBpcyBzdG9yZWRcbiAgLy8gYXMgYW4gYXJyYXkuXG4gIGlmIChBcnJheS5pc0FycmF5KGhlYWRlcnMpKSB7XG4gICAgLyoqIEB0eXBlIHtSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+fSAqL1xuICAgIGNvbnN0IGhlYWRlcnNQYWlyID0ge31cblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaGVhZGVycy5sZW5ndGg7IGkgKz0gMikge1xuICAgICAgaGVhZGVyc1BhaXJbaGVhZGVyc1tpXV0gPSBoZWFkZXJzW2kgKyAxXVxuICAgIH1cblxuICAgIHJldHVybiBoZWFkZXJzUGFpclxuICB9XG5cbiAgcmV0dXJuIGhlYWRlcnNcbn1cblxuLyoqXG4gKiBAcGFyYW0ge1JlY29yZDxzdHJpbmcsIHN0cmluZz59IGhlYWRlcnNcbiAqXG4gKiBQcmV2aW91cyB2ZXJzaW9ucyBvZiBQcm94eUFnZW50IHN1Z2dlc3RzIHRoZSBQcm94eS1BdXRob3JpemF0aW9uIGluIHJlcXVlc3QgaGVhZGVyc1xuICogTmV2ZXJ0aGVsZXNzLCBpdCB3YXMgY2hhbmdlZCBhbmQgdG8gYXZvaWQgYSBzZWN1cml0eSB2dWxuZXJhYmlsaXR5IGJ5IGVuZCB1c2Vyc1xuICogdGhpcyBjaGVjayB3YXMgY3JlYXRlZC5cbiAqIEl0IHNob3VsZCBiZSByZW1vdmVkIGluIHRoZSBuZXh0IG1ham9yIHZlcnNpb24gZm9yIHBlcmZvcm1hbmNlIHJlYXNvbnNcbiAqL1xuZnVuY3Rpb24gdGhyb3dJZlByb3h5QXV0aElzU2VudCAoaGVhZGVycykge1xuICBjb25zdCBleGlzdFByb3h5QXV0aCA9IGhlYWRlcnMgJiYgT2JqZWN0LmtleXMoaGVhZGVycylcbiAgICAuZmluZCgoa2V5KSA9PiBrZXkudG9Mb3dlckNhc2UoKSA9PT0gJ3Byb3h5LWF1dGhvcml6YXRpb24nKVxuICBpZiAoZXhpc3RQcm94eUF1dGgpIHtcbiAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ1Byb3h5LUF1dGhvcml6YXRpb24gc2hvdWxkIGJlIHNlbnQgaW4gUHJveHlBZ2VudCBjb25zdHJ1Y3RvcicpXG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBQcm94eUFnZW50XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IERpc3BhdGNoZXJCYXNlID0gcmVxdWlyZSgnLi9kaXNwYXRjaGVyLWJhc2UnKVxuY29uc3QgeyBrQ2xvc2UsIGtEZXN0cm95LCBrQ2xvc2VkLCBrRGVzdHJveWVkLCBrRGlzcGF0Y2gsIGtOb1Byb3h5QWdlbnQsIGtIdHRwUHJveHlBZ2VudCwga0h0dHBzUHJveHlBZ2VudCB9ID0gcmVxdWlyZSgnLi4vY29yZS9zeW1ib2xzJylcbmNvbnN0IFByb3h5QWdlbnQgPSByZXF1aXJlKCcuL3Byb3h5LWFnZW50JylcbmNvbnN0IEFnZW50ID0gcmVxdWlyZSgnLi9hZ2VudCcpXG5cbmNvbnN0IERFRkFVTFRfUE9SVFMgPSB7XG4gICdodHRwOic6IDgwLFxuICAnaHR0cHM6JzogNDQzXG59XG5cbmxldCBleHBlcmltZW50YWxXYXJuZWQgPSBmYWxzZVxuXG5jbGFzcyBFbnZIdHRwUHJveHlBZ2VudCBleHRlbmRzIERpc3BhdGNoZXJCYXNlIHtcbiAgI25vUHJveHlWYWx1ZSA9IG51bGxcbiAgI25vUHJveHlFbnRyaWVzID0gbnVsbFxuICAjb3B0cyA9IG51bGxcblxuICBjb25zdHJ1Y3RvciAob3B0cyA9IHt9KSB7XG4gICAgc3VwZXIoKVxuICAgIHRoaXMuI29wdHMgPSBvcHRzXG5cbiAgICBpZiAoIWV4cGVyaW1lbnRhbFdhcm5lZCkge1xuICAgICAgZXhwZXJpbWVudGFsV2FybmVkID0gdHJ1ZVxuICAgICAgcHJvY2Vzcy5lbWl0V2FybmluZygnRW52SHR0cFByb3h5QWdlbnQgaXMgZXhwZXJpbWVudGFsLCBleHBlY3QgdGhlbSB0byBjaGFuZ2UgYXQgYW55IHRpbWUuJywge1xuICAgICAgICBjb2RlOiAnVU5ESUNJLUVIUEEnXG4gICAgICB9KVxuICAgIH1cblxuICAgIGNvbnN0IHsgaHR0cFByb3h5LCBodHRwc1Byb3h5LCBub1Byb3h5LCAuLi5hZ2VudE9wdHMgfSA9IG9wdHNcblxuICAgIHRoaXNba05vUHJveHlBZ2VudF0gPSBuZXcgQWdlbnQoYWdlbnRPcHRzKVxuXG4gICAgY29uc3QgSFRUUF9QUk9YWSA9IGh0dHBQcm94eSA/PyBwcm9jZXNzLmVudi5odHRwX3Byb3h5ID8/IHByb2Nlc3MuZW52LkhUVFBfUFJPWFlcbiAgICBpZiAoSFRUUF9QUk9YWSkge1xuICAgICAgdGhpc1trSHR0cFByb3h5QWdlbnRdID0gbmV3IFByb3h5QWdlbnQoeyAuLi5hZ2VudE9wdHMsIHVyaTogSFRUUF9QUk9YWSB9KVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzW2tIdHRwUHJveHlBZ2VudF0gPSB0aGlzW2tOb1Byb3h5QWdlbnRdXG4gICAgfVxuXG4gICAgY29uc3QgSFRUUFNfUFJPWFkgPSBodHRwc1Byb3h5ID8/IHByb2Nlc3MuZW52Lmh0dHBzX3Byb3h5ID8/IHByb2Nlc3MuZW52LkhUVFBTX1BST1hZXG4gICAgaWYgKEhUVFBTX1BST1hZKSB7XG4gICAgICB0aGlzW2tIdHRwc1Byb3h5QWdlbnRdID0gbmV3IFByb3h5QWdlbnQoeyAuLi5hZ2VudE9wdHMsIHVyaTogSFRUUFNfUFJPWFkgfSlcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpc1trSHR0cHNQcm94eUFnZW50XSA9IHRoaXNba0h0dHBQcm94eUFnZW50XVxuICAgIH1cblxuICAgIHRoaXMuI3BhcnNlTm9Qcm94eSgpXG4gIH1cblxuICBba0Rpc3BhdGNoXSAob3B0cywgaGFuZGxlcikge1xuICAgIGNvbnN0IHVybCA9IG5ldyBVUkwob3B0cy5vcmlnaW4pXG4gICAgY29uc3QgYWdlbnQgPSB0aGlzLiNnZXRQcm94eUFnZW50Rm9yVXJsKHVybClcbiAgICByZXR1cm4gYWdlbnQuZGlzcGF0Y2gob3B0cywgaGFuZGxlcilcbiAgfVxuXG4gIGFzeW5jIFtrQ2xvc2VdICgpIHtcbiAgICBhd2FpdCB0aGlzW2tOb1Byb3h5QWdlbnRdLmNsb3NlKClcbiAgICBpZiAoIXRoaXNba0h0dHBQcm94eUFnZW50XVtrQ2xvc2VkXSkge1xuICAgICAgYXdhaXQgdGhpc1trSHR0cFByb3h5QWdlbnRdLmNsb3NlKClcbiAgICB9XG4gICAgaWYgKCF0aGlzW2tIdHRwc1Byb3h5QWdlbnRdW2tDbG9zZWRdKSB7XG4gICAgICBhd2FpdCB0aGlzW2tIdHRwc1Byb3h5QWdlbnRdLmNsb3NlKClcbiAgICB9XG4gIH1cblxuICBhc3luYyBba0Rlc3Ryb3ldIChlcnIpIHtcbiAgICBhd2FpdCB0aGlzW2tOb1Byb3h5QWdlbnRdLmRlc3Ryb3koZXJyKVxuICAgIGlmICghdGhpc1trSHR0cFByb3h5QWdlbnRdW2tEZXN0cm95ZWRdKSB7XG4gICAgICBhd2FpdCB0aGlzW2tIdHRwUHJveHlBZ2VudF0uZGVzdHJveShlcnIpXG4gICAgfVxuICAgIGlmICghdGhpc1trSHR0cHNQcm94eUFnZW50XVtrRGVzdHJveWVkXSkge1xuICAgICAgYXdhaXQgdGhpc1trSHR0cHNQcm94eUFnZW50XS5kZXN0cm95KGVycilcbiAgICB9XG4gIH1cblxuICAjZ2V0UHJveHlBZ2VudEZvclVybCAodXJsKSB7XG4gICAgbGV0IHsgcHJvdG9jb2wsIGhvc3Q6IGhvc3RuYW1lLCBwb3J0IH0gPSB1cmxcblxuICAgIC8vIFN0cmlwcGluZyBwb3J0cyBpbiB0aGlzIHdheSBpbnN0ZWFkIG9mIHVzaW5nIHBhcnNlZFVybC5ob3N0bmFtZSB0byBtYWtlXG4gICAgLy8gc3VyZSB0aGF0IHRoZSBicmFja2V0cyBhcm91bmQgSVB2NiBhZGRyZXNzZXMgYXJlIGtlcHQuXG4gICAgaG9zdG5hbWUgPSBob3N0bmFtZS5yZXBsYWNlKC86XFxkKiQvLCAnJykudG9Mb3dlckNhc2UoKVxuICAgIHBvcnQgPSBOdW1iZXIucGFyc2VJbnQocG9ydCwgMTApIHx8IERFRkFVTFRfUE9SVFNbcHJvdG9jb2xdIHx8IDBcbiAgICBpZiAoIXRoaXMuI3Nob3VsZFByb3h5KGhvc3RuYW1lLCBwb3J0KSkge1xuICAgICAgcmV0dXJuIHRoaXNba05vUHJveHlBZ2VudF1cbiAgICB9XG4gICAgaWYgKHByb3RvY29sID09PSAnaHR0cHM6Jykge1xuICAgICAgcmV0dXJuIHRoaXNba0h0dHBzUHJveHlBZ2VudF1cbiAgICB9XG4gICAgcmV0dXJuIHRoaXNba0h0dHBQcm94eUFnZW50XVxuICB9XG5cbiAgI3Nob3VsZFByb3h5IChob3N0bmFtZSwgcG9ydCkge1xuICAgIGlmICh0aGlzLiNub1Byb3h5Q2hhbmdlZCkge1xuICAgICAgdGhpcy4jcGFyc2VOb1Byb3h5KClcbiAgICB9XG5cbiAgICBpZiAodGhpcy4jbm9Qcm94eUVudHJpZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gdHJ1ZSAvLyBBbHdheXMgcHJveHkgaWYgTk9fUFJPWFkgaXMgbm90IHNldCBvciBlbXB0eS5cbiAgICB9XG4gICAgaWYgKHRoaXMuI25vUHJveHlWYWx1ZSA9PT0gJyonKSB7XG4gICAgICByZXR1cm4gZmFsc2UgLy8gTmV2ZXIgcHJveHkgaWYgd2lsZGNhcmQgaXMgc2V0LlxuICAgIH1cblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy4jbm9Qcm94eUVudHJpZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IGVudHJ5ID0gdGhpcy4jbm9Qcm94eUVudHJpZXNbaV1cbiAgICAgIGlmIChlbnRyeS5wb3J0ICYmIGVudHJ5LnBvcnQgIT09IHBvcnQpIHtcbiAgICAgICAgY29udGludWUgLy8gU2tpcCBpZiBwb3J0cyBkb24ndCBtYXRjaC5cbiAgICAgIH1cbiAgICAgIGlmICghL15bLipdLy50ZXN0KGVudHJ5Lmhvc3RuYW1lKSkge1xuICAgICAgICAvLyBObyB3aWxkY2FyZHMsIHNvIGRvbid0IHByb3h5IG9ubHkgaWYgdGhlcmUgaXMgbm90IGFuIGV4YWN0IG1hdGNoLlxuICAgICAgICBpZiAoaG9zdG5hbWUgPT09IGVudHJ5Lmhvc3RuYW1lKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIERvbid0IHByb3h5IGlmIHRoZSBob3N0bmFtZSBlbmRzIHdpdGggdGhlIG5vX3Byb3h5IGhvc3QuXG4gICAgICAgIGlmIChob3N0bmFtZS5lbmRzV2l0aChlbnRyeS5ob3N0bmFtZS5yZXBsYWNlKC9eXFwqLywgJycpKSkge1xuICAgICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWVcbiAgfVxuXG4gICNwYXJzZU5vUHJveHkgKCkge1xuICAgIGNvbnN0IG5vUHJveHlWYWx1ZSA9IHRoaXMuI29wdHMubm9Qcm94eSA/PyB0aGlzLiNub1Byb3h5RW52XG4gICAgY29uc3Qgbm9Qcm94eVNwbGl0ID0gbm9Qcm94eVZhbHVlLnNwbGl0KC9bLFxcc10vKVxuICAgIGNvbnN0IG5vUHJveHlFbnRyaWVzID0gW11cblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbm9Qcm94eVNwbGl0Lmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCBlbnRyeSA9IG5vUHJveHlTcGxpdFtpXVxuICAgICAgaWYgKCFlbnRyeSkge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgICAgY29uc3QgcGFyc2VkID0gZW50cnkubWF0Y2goL14oLispOihcXGQrKSQvKVxuICAgICAgbm9Qcm94eUVudHJpZXMucHVzaCh7XG4gICAgICAgIGhvc3RuYW1lOiAocGFyc2VkID8gcGFyc2VkWzFdIDogZW50cnkpLnRvTG93ZXJDYXNlKCksXG4gICAgICAgIHBvcnQ6IHBhcnNlZCA/IE51bWJlci5wYXJzZUludChwYXJzZWRbMl0sIDEwKSA6IDBcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgdGhpcy4jbm9Qcm94eVZhbHVlID0gbm9Qcm94eVZhbHVlXG4gICAgdGhpcy4jbm9Qcm94eUVudHJpZXMgPSBub1Byb3h5RW50cmllc1xuICB9XG5cbiAgZ2V0ICNub1Byb3h5Q2hhbmdlZCAoKSB7XG4gICAgaWYgKHRoaXMuI29wdHMubm9Qcm94eSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuI25vUHJveHlWYWx1ZSAhPT0gdGhpcy4jbm9Qcm94eUVudlxuICB9XG5cbiAgZ2V0ICNub1Byb3h5RW52ICgpIHtcbiAgICByZXR1cm4gcHJvY2Vzcy5lbnYubm9fcHJveHkgPz8gcHJvY2Vzcy5lbnYuTk9fUFJPWFkgPz8gJydcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IEVudkh0dHBQcm94eUFnZW50XG4iLCAiJ3VzZSBzdHJpY3QnXG5jb25zdCBhc3NlcnQgPSByZXF1aXJlKCdub2RlOmFzc2VydCcpXG5cbmNvbnN0IHsga1JldHJ5SGFuZGxlckRlZmF1bHRSZXRyeSB9ID0gcmVxdWlyZSgnLi4vY29yZS9zeW1ib2xzJylcbmNvbnN0IHsgUmVxdWVzdFJldHJ5RXJyb3IgfSA9IHJlcXVpcmUoJy4uL2NvcmUvZXJyb3JzJylcbmNvbnN0IHtcbiAgaXNEaXN0dXJiZWQsXG4gIHBhcnNlSGVhZGVycyxcbiAgcGFyc2VSYW5nZUhlYWRlcixcbiAgd3JhcFJlcXVlc3RCb2R5XG59ID0gcmVxdWlyZSgnLi4vY29yZS91dGlsJylcblxuZnVuY3Rpb24gY2FsY3VsYXRlUmV0cnlBZnRlckhlYWRlciAocmV0cnlBZnRlcikge1xuICBjb25zdCBjdXJyZW50ID0gRGF0ZS5ub3coKVxuICByZXR1cm4gbmV3IERhdGUocmV0cnlBZnRlcikuZ2V0VGltZSgpIC0gY3VycmVudFxufVxuXG5jbGFzcyBSZXRyeUhhbmRsZXIge1xuICBjb25zdHJ1Y3RvciAob3B0cywgaGFuZGxlcnMpIHtcbiAgICBjb25zdCB7IHJldHJ5T3B0aW9ucywgLi4uZGlzcGF0Y2hPcHRzIH0gPSBvcHRzXG4gICAgY29uc3Qge1xuICAgICAgLy8gUmV0cnkgc2NvcGVkXG4gICAgICByZXRyeTogcmV0cnlGbixcbiAgICAgIG1heFJldHJpZXMsXG4gICAgICBtYXhUaW1lb3V0LFxuICAgICAgbWluVGltZW91dCxcbiAgICAgIHRpbWVvdXRGYWN0b3IsXG4gICAgICAvLyBSZXNwb25zZSBzY29wZWRcbiAgICAgIG1ldGhvZHMsXG4gICAgICBlcnJvckNvZGVzLFxuICAgICAgcmV0cnlBZnRlcixcbiAgICAgIHN0YXR1c0NvZGVzXG4gICAgfSA9IHJldHJ5T3B0aW9ucyA/PyB7fVxuXG4gICAgdGhpcy5kaXNwYXRjaCA9IGhhbmRsZXJzLmRpc3BhdGNoXG4gICAgdGhpcy5oYW5kbGVyID0gaGFuZGxlcnMuaGFuZGxlclxuICAgIHRoaXMub3B0cyA9IHsgLi4uZGlzcGF0Y2hPcHRzLCBib2R5OiB3cmFwUmVxdWVzdEJvZHkob3B0cy5ib2R5KSB9XG4gICAgdGhpcy5hYm9ydCA9IG51bGxcbiAgICB0aGlzLmFib3J0ZWQgPSBmYWxzZVxuICAgIHRoaXMucmV0cnlPcHRzID0ge1xuICAgICAgcmV0cnk6IHJldHJ5Rm4gPz8gUmV0cnlIYW5kbGVyW2tSZXRyeUhhbmRsZXJEZWZhdWx0UmV0cnldLFxuICAgICAgcmV0cnlBZnRlcjogcmV0cnlBZnRlciA/PyB0cnVlLFxuICAgICAgbWF4VGltZW91dDogbWF4VGltZW91dCA/PyAzMCAqIDEwMDAsIC8vIDMwcyxcbiAgICAgIG1pblRpbWVvdXQ6IG1pblRpbWVvdXQgPz8gNTAwLCAvLyAuNXNcbiAgICAgIHRpbWVvdXRGYWN0b3I6IHRpbWVvdXRGYWN0b3IgPz8gMixcbiAgICAgIG1heFJldHJpZXM6IG1heFJldHJpZXMgPz8gNSxcbiAgICAgIC8vIFdoYXQgZXJyb3JzIHdlIHNob3VsZCByZXRyeVxuICAgICAgbWV0aG9kczogbWV0aG9kcyA/PyBbJ0dFVCcsICdIRUFEJywgJ09QVElPTlMnLCAnUFVUJywgJ0RFTEVURScsICdUUkFDRSddLFxuICAgICAgLy8gSW5kaWNhdGVzIHdoaWNoIGVycm9ycyB0byByZXRyeVxuICAgICAgc3RhdHVzQ29kZXM6IHN0YXR1c0NvZGVzID8/IFs1MDAsIDUwMiwgNTAzLCA1MDQsIDQyOV0sXG4gICAgICAvLyBMaXN0IG9mIGVycm9ycyB0byByZXRyeVxuICAgICAgZXJyb3JDb2RlczogZXJyb3JDb2RlcyA/PyBbXG4gICAgICAgICdFQ09OTlJFU0VUJyxcbiAgICAgICAgJ0VDT05OUkVGVVNFRCcsXG4gICAgICAgICdFTk9URk9VTkQnLFxuICAgICAgICAnRU5FVERPV04nLFxuICAgICAgICAnRU5FVFVOUkVBQ0gnLFxuICAgICAgICAnRUhPU1RET1dOJyxcbiAgICAgICAgJ0VIT1NUVU5SRUFDSCcsXG4gICAgICAgICdFUElQRScsXG4gICAgICAgICdVTkRfRVJSX1NPQ0tFVCdcbiAgICAgIF1cbiAgICB9XG5cbiAgICB0aGlzLnJldHJ5Q291bnQgPSAwXG4gICAgdGhpcy5yZXRyeUNvdW50Q2hlY2twb2ludCA9IDBcbiAgICB0aGlzLnN0YXJ0ID0gMFxuICAgIHRoaXMuZW5kID0gbnVsbFxuICAgIHRoaXMuZXRhZyA9IG51bGxcbiAgICB0aGlzLnJlc3VtZSA9IG51bGxcblxuICAgIC8vIEhhbmRsZSBwb3NzaWJsZSBvbkNvbm5lY3QgZHVwbGljYXRpb25cbiAgICB0aGlzLmhhbmRsZXIub25Db25uZWN0KHJlYXNvbiA9PiB7XG4gICAgICB0aGlzLmFib3J0ZWQgPSB0cnVlXG4gICAgICBpZiAodGhpcy5hYm9ydCkge1xuICAgICAgICB0aGlzLmFib3J0KHJlYXNvbilcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMucmVhc29uID0gcmVhc29uXG4gICAgICB9XG4gICAgfSlcbiAgfVxuXG4gIG9uUmVxdWVzdFNlbnQgKCkge1xuICAgIGlmICh0aGlzLmhhbmRsZXIub25SZXF1ZXN0U2VudCkge1xuICAgICAgdGhpcy5oYW5kbGVyLm9uUmVxdWVzdFNlbnQoKVxuICAgIH1cbiAgfVxuXG4gIG9uVXBncmFkZSAoc3RhdHVzQ29kZSwgaGVhZGVycywgc29ja2V0KSB7XG4gICAgaWYgKHRoaXMuaGFuZGxlci5vblVwZ3JhZGUpIHtcbiAgICAgIHRoaXMuaGFuZGxlci5vblVwZ3JhZGUoc3RhdHVzQ29kZSwgaGVhZGVycywgc29ja2V0KVxuICAgIH1cbiAgfVxuXG4gIG9uQ29ubmVjdCAoYWJvcnQpIHtcbiAgICBpZiAodGhpcy5hYm9ydGVkKSB7XG4gICAgICBhYm9ydCh0aGlzLnJlYXNvbilcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5hYm9ydCA9IGFib3J0XG4gICAgfVxuICB9XG5cbiAgb25Cb2R5U2VudCAoY2h1bmspIHtcbiAgICBpZiAodGhpcy5oYW5kbGVyLm9uQm9keVNlbnQpIHJldHVybiB0aGlzLmhhbmRsZXIub25Cb2R5U2VudChjaHVuaylcbiAgfVxuXG4gIHN0YXRpYyBba1JldHJ5SGFuZGxlckRlZmF1bHRSZXRyeV0gKGVyciwgeyBzdGF0ZSwgb3B0cyB9LCBjYikge1xuICAgIGNvbnN0IHsgc3RhdHVzQ29kZSwgY29kZSwgaGVhZGVycyB9ID0gZXJyXG4gICAgY29uc3QgeyBtZXRob2QsIHJldHJ5T3B0aW9ucyB9ID0gb3B0c1xuICAgIGNvbnN0IHtcbiAgICAgIG1heFJldHJpZXMsXG4gICAgICBtaW5UaW1lb3V0LFxuICAgICAgbWF4VGltZW91dCxcbiAgICAgIHRpbWVvdXRGYWN0b3IsXG4gICAgICBzdGF0dXNDb2RlcyxcbiAgICAgIGVycm9yQ29kZXMsXG4gICAgICBtZXRob2RzXG4gICAgfSA9IHJldHJ5T3B0aW9uc1xuICAgIGNvbnN0IHsgY291bnRlciB9ID0gc3RhdGVcblxuICAgIC8vIEFueSBjb2RlIHRoYXQgaXMgbm90IGEgVW5kaWNpJ3Mgb3JpZ2luYXRlZCBhbmQgYWxsb3dlZCB0byByZXRyeVxuICAgIGlmIChjb2RlICYmIGNvZGUgIT09ICdVTkRfRVJSX1JFUV9SRVRSWScgJiYgIWVycm9yQ29kZXMuaW5jbHVkZXMoY29kZSkpIHtcbiAgICAgIGNiKGVycilcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIC8vIElmIGEgc2V0IG9mIG1ldGhvZCBhcmUgcHJvdmlkZWQgYW5kIHRoZSBjdXJyZW50IG1ldGhvZCBpcyBub3QgaW4gdGhlIGxpc3RcbiAgICBpZiAoQXJyYXkuaXNBcnJheShtZXRob2RzKSAmJiAhbWV0aG9kcy5pbmNsdWRlcyhtZXRob2QpKSB7XG4gICAgICBjYihlcnIpXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICAvLyBJZiBhIHNldCBvZiBzdGF0dXMgY29kZSBhcmUgcHJvdmlkZWQgYW5kIHRoZSBjdXJyZW50IHN0YXR1cyBjb2RlIGlzIG5vdCBpbiB0aGUgbGlzdFxuICAgIGlmIChcbiAgICAgIHN0YXR1c0NvZGUgIT0gbnVsbCAmJlxuICAgICAgQXJyYXkuaXNBcnJheShzdGF0dXNDb2RlcykgJiZcbiAgICAgICFzdGF0dXNDb2Rlcy5pbmNsdWRlcyhzdGF0dXNDb2RlKVxuICAgICkge1xuICAgICAgY2IoZXJyKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgLy8gSWYgd2UgcmVhY2hlZCB0aGUgbWF4IG51bWJlciBvZiByZXRyaWVzXG4gICAgaWYgKGNvdW50ZXIgPiBtYXhSZXRyaWVzKSB7XG4gICAgICBjYihlcnIpXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBsZXQgcmV0cnlBZnRlckhlYWRlciA9IGhlYWRlcnM/LlsncmV0cnktYWZ0ZXInXVxuICAgIGlmIChyZXRyeUFmdGVySGVhZGVyKSB7XG4gICAgICByZXRyeUFmdGVySGVhZGVyID0gTnVtYmVyKHJldHJ5QWZ0ZXJIZWFkZXIpXG4gICAgICByZXRyeUFmdGVySGVhZGVyID0gTnVtYmVyLmlzTmFOKHJldHJ5QWZ0ZXJIZWFkZXIpXG4gICAgICAgID8gY2FsY3VsYXRlUmV0cnlBZnRlckhlYWRlcihyZXRyeUFmdGVySGVhZGVyKVxuICAgICAgICA6IHJldHJ5QWZ0ZXJIZWFkZXIgKiAxZTMgLy8gUmV0cnktQWZ0ZXIgaXMgaW4gc2Vjb25kc1xuICAgIH1cblxuICAgIGNvbnN0IHJldHJ5VGltZW91dCA9XG4gICAgICByZXRyeUFmdGVySGVhZGVyID4gMFxuICAgICAgICA/IE1hdGgubWluKHJldHJ5QWZ0ZXJIZWFkZXIsIG1heFRpbWVvdXQpXG4gICAgICAgIDogTWF0aC5taW4obWluVGltZW91dCAqIHRpbWVvdXRGYWN0b3IgKiogKGNvdW50ZXIgLSAxKSwgbWF4VGltZW91dClcblxuICAgIHNldFRpbWVvdXQoKCkgPT4gY2IobnVsbCksIHJldHJ5VGltZW91dClcbiAgfVxuXG4gIG9uSGVhZGVycyAoc3RhdHVzQ29kZSwgcmF3SGVhZGVycywgcmVzdW1lLCBzdGF0dXNNZXNzYWdlKSB7XG4gICAgY29uc3QgaGVhZGVycyA9IHBhcnNlSGVhZGVycyhyYXdIZWFkZXJzKVxuXG4gICAgdGhpcy5yZXRyeUNvdW50ICs9IDFcblxuICAgIGlmIChzdGF0dXNDb2RlID49IDMwMCkge1xuICAgICAgaWYgKHRoaXMucmV0cnlPcHRzLnN0YXR1c0NvZGVzLmluY2x1ZGVzKHN0YXR1c0NvZGUpID09PSBmYWxzZSkge1xuICAgICAgICByZXR1cm4gdGhpcy5oYW5kbGVyLm9uSGVhZGVycyhcbiAgICAgICAgICBzdGF0dXNDb2RlLFxuICAgICAgICAgIHJhd0hlYWRlcnMsXG4gICAgICAgICAgcmVzdW1lLFxuICAgICAgICAgIHN0YXR1c01lc3NhZ2VcbiAgICAgICAgKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5hYm9ydChcbiAgICAgICAgICBuZXcgUmVxdWVzdFJldHJ5RXJyb3IoJ1JlcXVlc3QgZmFpbGVkJywgc3RhdHVzQ29kZSwge1xuICAgICAgICAgICAgaGVhZGVycyxcbiAgICAgICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgICAgY291bnQ6IHRoaXMucmV0cnlDb3VudFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gQ2hlY2twb2ludCBmb3IgcmVzdW1lIGZyb20gd2hlcmUgd2UgbGVmdCBpdFxuICAgIGlmICh0aGlzLnJlc3VtZSAhPSBudWxsKSB7XG4gICAgICB0aGlzLnJlc3VtZSA9IG51bGxcblxuICAgICAgLy8gT25seSBQYXJ0aWFsIENvbnRlbnQgMjA2IHN1cHBvc2VkIHRvIHByb3ZpZGUgQ29udGVudC1SYW5nZSxcbiAgICAgIC8vIGFueSBvdGhlciBzdGF0dXMgY29kZSB0aGF0IHBhcnRpYWxseSBjb25zdW1lZCB0aGUgcGF5bG9hZFxuICAgICAgLy8gc2hvdWxkIG5vdCBiZSByZXRyeSBiZWNhdXNlIGl0IHdvdWxkIHJlc3VsdCBpbiBkb3duc3RyZWFtXG4gICAgICAvLyB3cm9uZ2x5IGNvbmNhdGFuZXRlIG11bHRpcGxlIHJlc3BvbnNlcy5cbiAgICAgIGlmIChzdGF0dXNDb2RlICE9PSAyMDYgJiYgKHRoaXMuc3RhcnQgPiAwIHx8IHN0YXR1c0NvZGUgIT09IDIwMCkpIHtcbiAgICAgICAgdGhpcy5hYm9ydChcbiAgICAgICAgICBuZXcgUmVxdWVzdFJldHJ5RXJyb3IoJ3NlcnZlciBkb2VzIG5vdCBzdXBwb3J0IHRoZSByYW5nZSBoZWFkZXIgYW5kIHRoZSBwYXlsb2FkIHdhcyBwYXJ0aWFsbHkgY29uc3VtZWQnLCBzdGF0dXNDb2RlLCB7XG4gICAgICAgICAgICBoZWFkZXJzLFxuICAgICAgICAgICAgZGF0YTogeyBjb3VudDogdGhpcy5yZXRyeUNvdW50IH1cbiAgICAgICAgICB9KVxuICAgICAgICApXG4gICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgfVxuXG4gICAgICBjb25zdCBjb250ZW50UmFuZ2UgPSBwYXJzZVJhbmdlSGVhZGVyKGhlYWRlcnNbJ2NvbnRlbnQtcmFuZ2UnXSlcbiAgICAgIC8vIElmIG5vIGNvbnRlbnQgcmFuZ2VcbiAgICAgIGlmICghY29udGVudFJhbmdlKSB7XG4gICAgICAgIHRoaXMuYWJvcnQoXG4gICAgICAgICAgbmV3IFJlcXVlc3RSZXRyeUVycm9yKCdDb250ZW50LVJhbmdlIG1pc21hdGNoJywgc3RhdHVzQ29kZSwge1xuICAgICAgICAgICAgaGVhZGVycyxcbiAgICAgICAgICAgIGRhdGE6IHsgY291bnQ6IHRoaXMucmV0cnlDb3VudCB9XG4gICAgICAgICAgfSlcbiAgICAgICAgKVxuICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgIH1cblxuICAgICAgLy8gTGV0J3Mgc3RhcnQgd2l0aCBhIHdlYWsgZXRhZyBjaGVja1xuICAgICAgaWYgKHRoaXMuZXRhZyAhPSBudWxsICYmIHRoaXMuZXRhZyAhPT0gaGVhZGVycy5ldGFnKSB7XG4gICAgICAgIHRoaXMuYWJvcnQoXG4gICAgICAgICAgbmV3IFJlcXVlc3RSZXRyeUVycm9yKCdFVGFnIG1pc21hdGNoJywgc3RhdHVzQ29kZSwge1xuICAgICAgICAgICAgaGVhZGVycyxcbiAgICAgICAgICAgIGRhdGE6IHsgY291bnQ6IHRoaXMucmV0cnlDb3VudCB9XG4gICAgICAgICAgfSlcbiAgICAgICAgKVxuICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgIH1cblxuICAgICAgY29uc3QgeyBzdGFydCwgc2l6ZSwgZW5kID0gc2l6ZSAtIDEgfSA9IGNvbnRlbnRSYW5nZVxuXG4gICAgICBhc3NlcnQodGhpcy5zdGFydCA9PT0gc3RhcnQsICdjb250ZW50LXJhbmdlIG1pc21hdGNoJylcbiAgICAgIGFzc2VydCh0aGlzLmVuZCA9PSBudWxsIHx8IHRoaXMuZW5kID09PSBlbmQsICdjb250ZW50LXJhbmdlIG1pc21hdGNoJylcblxuICAgICAgdGhpcy5yZXN1bWUgPSByZXN1bWVcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZW5kID09IG51bGwpIHtcbiAgICAgIGlmIChzdGF0dXNDb2RlID09PSAyMDYpIHtcbiAgICAgICAgLy8gRmlyc3QgdGltZSB3ZSByZWNlaXZlIDIwNlxuICAgICAgICBjb25zdCByYW5nZSA9IHBhcnNlUmFuZ2VIZWFkZXIoaGVhZGVyc1snY29udGVudC1yYW5nZSddKVxuXG4gICAgICAgIGlmIChyYW5nZSA9PSBudWxsKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuaGFuZGxlci5vbkhlYWRlcnMoXG4gICAgICAgICAgICBzdGF0dXNDb2RlLFxuICAgICAgICAgICAgcmF3SGVhZGVycyxcbiAgICAgICAgICAgIHJlc3VtZSxcbiAgICAgICAgICAgIHN0YXR1c01lc3NhZ2VcbiAgICAgICAgICApXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB7IHN0YXJ0LCBzaXplLCBlbmQgPSBzaXplIC0gMSB9ID0gcmFuZ2VcbiAgICAgICAgYXNzZXJ0KFxuICAgICAgICAgIHN0YXJ0ICE9IG51bGwgJiYgTnVtYmVyLmlzRmluaXRlKHN0YXJ0KSxcbiAgICAgICAgICAnY29udGVudC1yYW5nZSBtaXNtYXRjaCdcbiAgICAgICAgKVxuICAgICAgICBhc3NlcnQoZW5kICE9IG51bGwgJiYgTnVtYmVyLmlzRmluaXRlKGVuZCksICdpbnZhbGlkIGNvbnRlbnQtbGVuZ3RoJylcblxuICAgICAgICB0aGlzLnN0YXJ0ID0gc3RhcnRcbiAgICAgICAgdGhpcy5lbmQgPSBlbmRcbiAgICAgIH1cblxuICAgICAgLy8gV2UgbWFrZSBvdXIgYmVzdCB0byBjaGVja3BvaW50IHRoZSBib2R5IGZvciBmdXJ0aGVyIHJhbmdlIGhlYWRlcnNcbiAgICAgIGlmICh0aGlzLmVuZCA9PSBudWxsKSB7XG4gICAgICAgIGNvbnN0IGNvbnRlbnRMZW5ndGggPSBoZWFkZXJzWydjb250ZW50LWxlbmd0aCddXG4gICAgICAgIHRoaXMuZW5kID0gY29udGVudExlbmd0aCAhPSBudWxsID8gTnVtYmVyKGNvbnRlbnRMZW5ndGgpIC0gMSA6IG51bGxcbiAgICAgIH1cblxuICAgICAgYXNzZXJ0KE51bWJlci5pc0Zpbml0ZSh0aGlzLnN0YXJ0KSlcbiAgICAgIGFzc2VydChcbiAgICAgICAgdGhpcy5lbmQgPT0gbnVsbCB8fCBOdW1iZXIuaXNGaW5pdGUodGhpcy5lbmQpLFxuICAgICAgICAnaW52YWxpZCBjb250ZW50LWxlbmd0aCdcbiAgICAgIClcblxuICAgICAgdGhpcy5yZXN1bWUgPSByZXN1bWVcbiAgICAgIHRoaXMuZXRhZyA9IGhlYWRlcnMuZXRhZyAhPSBudWxsID8gaGVhZGVycy5ldGFnIDogbnVsbFxuXG4gICAgICAvLyBXZWFrIGV0YWdzIGFyZSBub3QgdXNlZnVsIGZvciBjb21wYXJpc29uIG5vciBjYWNoZVxuICAgICAgLy8gZm9yIGluc3RhbmNlIG5vdCBzYWZlIHRvIGFzc3VtZSBpZiB0aGUgcmVzcG9uc2UgaXMgYnl0ZS1wZXItYnl0ZVxuICAgICAgLy8gZXF1YWxcbiAgICAgIGlmICh0aGlzLmV0YWcgIT0gbnVsbCAmJiB0aGlzLmV0YWcuc3RhcnRzV2l0aCgnVy8nKSkge1xuICAgICAgICB0aGlzLmV0YWcgPSBudWxsXG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0aGlzLmhhbmRsZXIub25IZWFkZXJzKFxuICAgICAgICBzdGF0dXNDb2RlLFxuICAgICAgICByYXdIZWFkZXJzLFxuICAgICAgICByZXN1bWUsXG4gICAgICAgIHN0YXR1c01lc3NhZ2VcbiAgICAgIClcbiAgICB9XG5cbiAgICBjb25zdCBlcnIgPSBuZXcgUmVxdWVzdFJldHJ5RXJyb3IoJ1JlcXVlc3QgZmFpbGVkJywgc3RhdHVzQ29kZSwge1xuICAgICAgaGVhZGVycyxcbiAgICAgIGRhdGE6IHsgY291bnQ6IHRoaXMucmV0cnlDb3VudCB9XG4gICAgfSlcblxuICAgIHRoaXMuYWJvcnQoZXJyKVxuXG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICBvbkRhdGEgKGNodW5rKSB7XG4gICAgdGhpcy5zdGFydCArPSBjaHVuay5sZW5ndGhcblxuICAgIHJldHVybiB0aGlzLmhhbmRsZXIub25EYXRhKGNodW5rKVxuICB9XG5cbiAgb25Db21wbGV0ZSAocmF3VHJhaWxlcnMpIHtcbiAgICB0aGlzLnJldHJ5Q291bnQgPSAwXG4gICAgcmV0dXJuIHRoaXMuaGFuZGxlci5vbkNvbXBsZXRlKHJhd1RyYWlsZXJzKVxuICB9XG5cbiAgb25FcnJvciAoZXJyKSB7XG4gICAgaWYgKHRoaXMuYWJvcnRlZCB8fCBpc0Rpc3R1cmJlZCh0aGlzLm9wdHMuYm9keSkpIHtcbiAgICAgIHJldHVybiB0aGlzLmhhbmRsZXIub25FcnJvcihlcnIpXG4gICAgfVxuXG4gICAgLy8gV2UgcmVjb25jaWxlIGluIGNhc2Ugb2YgYSBtaXggYmV0d2VlbiBuZXR3b3JrIGVycm9yc1xuICAgIC8vIGFuZCBzZXJ2ZXIgZXJyb3IgcmVzcG9uc2VcbiAgICBpZiAodGhpcy5yZXRyeUNvdW50IC0gdGhpcy5yZXRyeUNvdW50Q2hlY2twb2ludCA+IDApIHtcbiAgICAgIC8vIFdlIGNvdW50IHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIGxhc3QgY2hlY2twb2ludCBhbmQgdGhlIGN1cnJlbnQgcmV0cnkgY291bnRcbiAgICAgIHRoaXMucmV0cnlDb3VudCA9XG4gICAgICAgIHRoaXMucmV0cnlDb3VudENoZWNrcG9pbnQgK1xuICAgICAgICAodGhpcy5yZXRyeUNvdW50IC0gdGhpcy5yZXRyeUNvdW50Q2hlY2twb2ludClcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5yZXRyeUNvdW50ICs9IDFcbiAgICB9XG5cbiAgICB0aGlzLnJldHJ5T3B0cy5yZXRyeShcbiAgICAgIGVycixcbiAgICAgIHtcbiAgICAgICAgc3RhdGU6IHsgY291bnRlcjogdGhpcy5yZXRyeUNvdW50IH0sXG4gICAgICAgIG9wdHM6IHsgcmV0cnlPcHRpb25zOiB0aGlzLnJldHJ5T3B0cywgLi4udGhpcy5vcHRzIH1cbiAgICAgIH0sXG4gICAgICBvblJldHJ5LmJpbmQodGhpcylcbiAgICApXG5cbiAgICBmdW5jdGlvbiBvblJldHJ5IChlcnIpIHtcbiAgICAgIGlmIChlcnIgIT0gbnVsbCB8fCB0aGlzLmFib3J0ZWQgfHwgaXNEaXN0dXJiZWQodGhpcy5vcHRzLmJvZHkpKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmhhbmRsZXIub25FcnJvcihlcnIpXG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLnN0YXJ0ICE9PSAwKSB7XG4gICAgICAgIGNvbnN0IGhlYWRlcnMgPSB7IHJhbmdlOiBgYnl0ZXM9JHt0aGlzLnN0YXJ0fS0ke3RoaXMuZW5kID8/ICcnfWAgfVxuXG4gICAgICAgIC8vIFdlYWsgZXRhZyBjaGVjayAtIHdlYWsgZXRhZ3Mgd2lsbCBtYWtlIGNvbXBhcmlzb24gYWxnb3JpdGhtcyBuZXZlciBtYXRjaFxuICAgICAgICBpZiAodGhpcy5ldGFnICE9IG51bGwpIHtcbiAgICAgICAgICBoZWFkZXJzWydpZi1tYXRjaCddID0gdGhpcy5ldGFnXG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLm9wdHMgPSB7XG4gICAgICAgICAgLi4udGhpcy5vcHRzLFxuICAgICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAgIC4uLnRoaXMub3B0cy5oZWFkZXJzLFxuICAgICAgICAgICAgLi4uaGVhZGVyc1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB0cnkge1xuICAgICAgICB0aGlzLnJldHJ5Q291bnRDaGVja3BvaW50ID0gdGhpcy5yZXRyeUNvdW50XG4gICAgICAgIHRoaXMuZGlzcGF0Y2godGhpcy5vcHRzLCB0aGlzKVxuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIHRoaXMuaGFuZGxlci5vbkVycm9yKGVycilcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBSZXRyeUhhbmRsZXJcbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgRGlzcGF0Y2hlciA9IHJlcXVpcmUoJy4vZGlzcGF0Y2hlcicpXG5jb25zdCBSZXRyeUhhbmRsZXIgPSByZXF1aXJlKCcuLi9oYW5kbGVyL3JldHJ5LWhhbmRsZXInKVxuXG5jbGFzcyBSZXRyeUFnZW50IGV4dGVuZHMgRGlzcGF0Y2hlciB7XG4gICNhZ2VudCA9IG51bGxcbiAgI29wdGlvbnMgPSBudWxsXG4gIGNvbnN0cnVjdG9yIChhZ2VudCwgb3B0aW9ucyA9IHt9KSB7XG4gICAgc3VwZXIob3B0aW9ucylcbiAgICB0aGlzLiNhZ2VudCA9IGFnZW50XG4gICAgdGhpcy4jb3B0aW9ucyA9IG9wdGlvbnNcbiAgfVxuXG4gIGRpc3BhdGNoIChvcHRzLCBoYW5kbGVyKSB7XG4gICAgY29uc3QgcmV0cnkgPSBuZXcgUmV0cnlIYW5kbGVyKHtcbiAgICAgIC4uLm9wdHMsXG4gICAgICByZXRyeU9wdGlvbnM6IHRoaXMuI29wdGlvbnNcbiAgICB9LCB7XG4gICAgICBkaXNwYXRjaDogdGhpcy4jYWdlbnQuZGlzcGF0Y2guYmluZCh0aGlzLiNhZ2VudCksXG4gICAgICBoYW5kbGVyXG4gICAgfSlcbiAgICByZXR1cm4gdGhpcy4jYWdlbnQuZGlzcGF0Y2gob3B0cywgcmV0cnkpXG4gIH1cblxuICBjbG9zZSAoKSB7XG4gICAgcmV0dXJuIHRoaXMuI2FnZW50LmNsb3NlKClcbiAgfVxuXG4gIGRlc3Ryb3kgKCkge1xuICAgIHJldHVybiB0aGlzLiNhZ2VudC5kZXN0cm95KClcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IFJldHJ5QWdlbnRcbiIsICIvLyBQb3J0ZWQgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vbm9kZWpzL3VuZGljaS9wdWxsLzkwN1xuXG4ndXNlIHN0cmljdCdcblxuY29uc3QgYXNzZXJ0ID0gcmVxdWlyZSgnbm9kZTphc3NlcnQnKVxuY29uc3QgeyBSZWFkYWJsZSB9ID0gcmVxdWlyZSgnbm9kZTpzdHJlYW0nKVxuY29uc3QgeyBSZXF1ZXN0QWJvcnRlZEVycm9yLCBOb3RTdXBwb3J0ZWRFcnJvciwgSW52YWxpZEFyZ3VtZW50RXJyb3IsIEFib3J0RXJyb3IgfSA9IHJlcXVpcmUoJy4uL2NvcmUvZXJyb3JzJylcbmNvbnN0IHV0aWwgPSByZXF1aXJlKCcuLi9jb3JlL3V0aWwnKVxuY29uc3QgeyBSZWFkYWJsZVN0cmVhbUZyb20gfSA9IHJlcXVpcmUoJy4uL2NvcmUvdXRpbCcpXG5cbmNvbnN0IGtDb25zdW1lID0gU3ltYm9sKCdrQ29uc3VtZScpXG5jb25zdCBrUmVhZGluZyA9IFN5bWJvbCgna1JlYWRpbmcnKVxuY29uc3Qga0JvZHkgPSBTeW1ib2woJ2tCb2R5JylcbmNvbnN0IGtBYm9ydCA9IFN5bWJvbCgna0Fib3J0JylcbmNvbnN0IGtDb250ZW50VHlwZSA9IFN5bWJvbCgna0NvbnRlbnRUeXBlJylcbmNvbnN0IGtDb250ZW50TGVuZ3RoID0gU3ltYm9sKCdrQ29udGVudExlbmd0aCcpXG5cbmNvbnN0IG5vb3AgPSAoKSA9PiB7fVxuXG5jbGFzcyBCb2R5UmVhZGFibGUgZXh0ZW5kcyBSZWFkYWJsZSB7XG4gIGNvbnN0cnVjdG9yICh7XG4gICAgcmVzdW1lLFxuICAgIGFib3J0LFxuICAgIGNvbnRlbnRUeXBlID0gJycsXG4gICAgY29udGVudExlbmd0aCxcbiAgICBoaWdoV2F0ZXJNYXJrID0gNjQgKiAxMDI0IC8vIFNhbWUgYXMgbm9kZWpzIGZzIHN0cmVhbXMuXG4gIH0pIHtcbiAgICBzdXBlcih7XG4gICAgICBhdXRvRGVzdHJveTogdHJ1ZSxcbiAgICAgIHJlYWQ6IHJlc3VtZSxcbiAgICAgIGhpZ2hXYXRlck1hcmtcbiAgICB9KVxuXG4gICAgdGhpcy5fcmVhZGFibGVTdGF0ZS5kYXRhRW1pdHRlZCA9IGZhbHNlXG5cbiAgICB0aGlzW2tBYm9ydF0gPSBhYm9ydFxuICAgIHRoaXNba0NvbnN1bWVdID0gbnVsbFxuICAgIHRoaXNba0JvZHldID0gbnVsbFxuICAgIHRoaXNba0NvbnRlbnRUeXBlXSA9IGNvbnRlbnRUeXBlXG4gICAgdGhpc1trQ29udGVudExlbmd0aF0gPSBjb250ZW50TGVuZ3RoXG5cbiAgICAvLyBJcyBzdHJlYW0gYmVpbmcgY29uc3VtZWQgdGhyb3VnaCBSZWFkYWJsZSBBUEk/XG4gICAgLy8gVGhpcyBpcyBhbiBvcHRpbWl6YXRpb24gc28gdGhhdCB3ZSBhdm9pZCBjaGVja2luZ1xuICAgIC8vIGZvciAnZGF0YScgYW5kICdyZWFkYWJsZScgbGlzdGVuZXJzIGluIHRoZSBob3QgcGF0aFxuICAgIC8vIGluc2lkZSBwdXNoKCkuXG4gICAgdGhpc1trUmVhZGluZ10gPSBmYWxzZVxuICB9XG5cbiAgZGVzdHJveSAoZXJyKSB7XG4gICAgaWYgKCFlcnIgJiYgIXRoaXMuX3JlYWRhYmxlU3RhdGUuZW5kRW1pdHRlZCkge1xuICAgICAgZXJyID0gbmV3IFJlcXVlc3RBYm9ydGVkRXJyb3IoKVxuICAgIH1cblxuICAgIGlmIChlcnIpIHtcbiAgICAgIHRoaXNba0Fib3J0XSgpXG4gICAgfVxuXG4gICAgcmV0dXJuIHN1cGVyLmRlc3Ryb3koZXJyKVxuICB9XG5cbiAgX2Rlc3Ryb3kgKGVyciwgY2FsbGJhY2spIHtcbiAgICAvLyBXb3JrYXJvdW5kIGZvciBOb2RlIFwiYnVnXCIuIElmIHRoZSBzdHJlYW0gaXMgZGVzdHJveWVkIGluIHNhbWVcbiAgICAvLyB0aWNrIGFzIGl0IGlzIGNyZWF0ZWQsIHRoZW4gYSB1c2VyIHdobyBpcyB3YWl0aW5nIGZvciBhXG4gICAgLy8gcHJvbWlzZSAoaS5lIG1pY3JvIHRpY2spIGZvciBpbnN0YWxsaW5nIGEgJ2Vycm9yJyBsaXN0ZW5lciB3aWxsXG4gICAgLy8gbmV2ZXIgZ2V0IGEgY2hhbmNlIGFuZCB3aWxsIGFsd2F5cyBlbmNvdW50ZXIgYW4gdW5oYW5kbGVkIGV4Y2VwdGlvbi5cbiAgICBpZiAoIXRoaXNba1JlYWRpbmddKSB7XG4gICAgICBzZXRJbW1lZGlhdGUoKCkgPT4ge1xuICAgICAgICBjYWxsYmFjayhlcnIpXG4gICAgICB9KVxuICAgIH0gZWxzZSB7XG4gICAgICBjYWxsYmFjayhlcnIpXG4gICAgfVxuICB9XG5cbiAgb24gKGV2LCAuLi5hcmdzKSB7XG4gICAgaWYgKGV2ID09PSAnZGF0YScgfHwgZXYgPT09ICdyZWFkYWJsZScpIHtcbiAgICAgIHRoaXNba1JlYWRpbmddID0gdHJ1ZVxuICAgIH1cbiAgICByZXR1cm4gc3VwZXIub24oZXYsIC4uLmFyZ3MpXG4gIH1cblxuICBhZGRMaXN0ZW5lciAoZXYsIC4uLmFyZ3MpIHtcbiAgICByZXR1cm4gdGhpcy5vbihldiwgLi4uYXJncylcbiAgfVxuXG4gIG9mZiAoZXYsIC4uLmFyZ3MpIHtcbiAgICBjb25zdCByZXQgPSBzdXBlci5vZmYoZXYsIC4uLmFyZ3MpXG4gICAgaWYgKGV2ID09PSAnZGF0YScgfHwgZXYgPT09ICdyZWFkYWJsZScpIHtcbiAgICAgIHRoaXNba1JlYWRpbmddID0gKFxuICAgICAgICB0aGlzLmxpc3RlbmVyQ291bnQoJ2RhdGEnKSA+IDAgfHxcbiAgICAgICAgdGhpcy5saXN0ZW5lckNvdW50KCdyZWFkYWJsZScpID4gMFxuICAgICAgKVxuICAgIH1cbiAgICByZXR1cm4gcmV0XG4gIH1cblxuICByZW1vdmVMaXN0ZW5lciAoZXYsIC4uLmFyZ3MpIHtcbiAgICByZXR1cm4gdGhpcy5vZmYoZXYsIC4uLmFyZ3MpXG4gIH1cblxuICBwdXNoIChjaHVuaykge1xuICAgIGlmICh0aGlzW2tDb25zdW1lXSAmJiBjaHVuayAhPT0gbnVsbCkge1xuICAgICAgY29uc3VtZVB1c2godGhpc1trQ29uc3VtZV0sIGNodW5rKVxuICAgICAgcmV0dXJuIHRoaXNba1JlYWRpbmddID8gc3VwZXIucHVzaChjaHVuaykgOiB0cnVlXG4gICAgfVxuICAgIHJldHVybiBzdXBlci5wdXNoKGNodW5rKVxuICB9XG5cbiAgLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2RvbS1ib2R5LXRleHRcbiAgYXN5bmMgdGV4dCAoKSB7XG4gICAgcmV0dXJuIGNvbnN1bWUodGhpcywgJ3RleHQnKVxuICB9XG5cbiAgLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2RvbS1ib2R5LWpzb25cbiAgYXN5bmMganNvbiAoKSB7XG4gICAgcmV0dXJuIGNvbnN1bWUodGhpcywgJ2pzb24nKVxuICB9XG5cbiAgLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2RvbS1ib2R5LWJsb2JcbiAgYXN5bmMgYmxvYiAoKSB7XG4gICAgcmV0dXJuIGNvbnN1bWUodGhpcywgJ2Jsb2InKVxuICB9XG5cbiAgLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2RvbS1ib2R5LWJ5dGVzXG4gIGFzeW5jIGJ5dGVzICgpIHtcbiAgICByZXR1cm4gY29uc3VtZSh0aGlzLCAnYnl0ZXMnKVxuICB9XG5cbiAgLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2RvbS1ib2R5LWFycmF5YnVmZmVyXG4gIGFzeW5jIGFycmF5QnVmZmVyICgpIHtcbiAgICByZXR1cm4gY29uc3VtZSh0aGlzLCAnYXJyYXlCdWZmZXInKVxuICB9XG5cbiAgLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2RvbS1ib2R5LWZvcm1kYXRhXG4gIGFzeW5jIGZvcm1EYXRhICgpIHtcbiAgICAvLyBUT0RPOiBJbXBsZW1lbnQuXG4gICAgdGhyb3cgbmV3IE5vdFN1cHBvcnRlZEVycm9yKClcbiAgfVxuXG4gIC8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNkb20tYm9keS1ib2R5dXNlZFxuICBnZXQgYm9keVVzZWQgKCkge1xuICAgIHJldHVybiB1dGlsLmlzRGlzdHVyYmVkKHRoaXMpXG4gIH1cblxuICAvLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jZG9tLWJvZHktYm9keVxuICBnZXQgYm9keSAoKSB7XG4gICAgaWYgKCF0aGlzW2tCb2R5XSkge1xuICAgICAgdGhpc1trQm9keV0gPSBSZWFkYWJsZVN0cmVhbUZyb20odGhpcylcbiAgICAgIGlmICh0aGlzW2tDb25zdW1lXSkge1xuICAgICAgICAvLyBUT0RPOiBJcyB0aGlzIHRoZSBiZXN0IHdheSB0byBmb3JjZSBhIGxvY2s/XG4gICAgICAgIHRoaXNba0JvZHldLmdldFJlYWRlcigpIC8vIEVuc3VyZSBzdHJlYW0gaXMgbG9ja2VkLlxuICAgICAgICBhc3NlcnQodGhpc1trQm9keV0ubG9ja2VkKVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGhpc1trQm9keV1cbiAgfVxuXG4gIGFzeW5jIGR1bXAgKG9wdHMpIHtcbiAgICBsZXQgbGltaXQgPSBOdW1iZXIuaXNGaW5pdGUob3B0cz8ubGltaXQpID8gb3B0cy5saW1pdCA6IDEyOCAqIDEwMjRcbiAgICBjb25zdCBzaWduYWwgPSBvcHRzPy5zaWduYWxcblxuICAgIGlmIChzaWduYWwgIT0gbnVsbCAmJiAodHlwZW9mIHNpZ25hbCAhPT0gJ29iamVjdCcgfHwgISgnYWJvcnRlZCcgaW4gc2lnbmFsKSkpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignc2lnbmFsIG11c3QgYmUgYW4gQWJvcnRTaWduYWwnKVxuICAgIH1cblxuICAgIHNpZ25hbD8udGhyb3dJZkFib3J0ZWQoKVxuXG4gICAgaWYgKHRoaXMuX3JlYWRhYmxlU3RhdGUuY2xvc2VFbWl0dGVkKSB7XG4gICAgICByZXR1cm4gbnVsbFxuICAgIH1cblxuICAgIHJldHVybiBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBpZiAodGhpc1trQ29udGVudExlbmd0aF0gPiBsaW1pdCkge1xuICAgICAgICB0aGlzLmRlc3Ryb3kobmV3IEFib3J0RXJyb3IoKSlcbiAgICAgIH1cblxuICAgICAgY29uc3Qgb25BYm9ydCA9ICgpID0+IHtcbiAgICAgICAgdGhpcy5kZXN0cm95KHNpZ25hbC5yZWFzb24gPz8gbmV3IEFib3J0RXJyb3IoKSlcbiAgICAgIH1cbiAgICAgIHNpZ25hbD8uYWRkRXZlbnRMaXN0ZW5lcignYWJvcnQnLCBvbkFib3J0KVxuXG4gICAgICB0aGlzXG4gICAgICAgIC5vbignY2xvc2UnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgc2lnbmFsPy5yZW1vdmVFdmVudExpc3RlbmVyKCdhYm9ydCcsIG9uQWJvcnQpXG4gICAgICAgICAgaWYgKHNpZ25hbD8uYWJvcnRlZCkge1xuICAgICAgICAgICAgcmVqZWN0KHNpZ25hbC5yZWFzb24gPz8gbmV3IEFib3J0RXJyb3IoKSlcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVzb2x2ZShudWxsKVxuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgICAgLm9uKCdlcnJvcicsIG5vb3ApXG4gICAgICAgIC5vbignZGF0YScsIGZ1bmN0aW9uIChjaHVuaykge1xuICAgICAgICAgIGxpbWl0IC09IGNodW5rLmxlbmd0aFxuICAgICAgICAgIGlmIChsaW1pdCA8PSAwKSB7XG4gICAgICAgICAgICB0aGlzLmRlc3Ryb3koKVxuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgICAgLnJlc3VtZSgpXG4gICAgfSlcbiAgfVxufVxuXG4vLyBodHRwczovL3N0cmVhbXMuc3BlYy53aGF0d2cub3JnLyNyZWFkYWJsZXN0cmVhbS1sb2NrZWRcbmZ1bmN0aW9uIGlzTG9ja2VkIChzZWxmKSB7XG4gIC8vIENvbnN1bWUgaXMgYW4gaW1wbGljaXQgbG9jay5cbiAgcmV0dXJuIChzZWxmW2tCb2R5XSAmJiBzZWxmW2tCb2R5XS5sb2NrZWQgPT09IHRydWUpIHx8IHNlbGZba0NvbnN1bWVdXG59XG5cbi8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNib2R5LXVudXNhYmxlXG5mdW5jdGlvbiBpc1VudXNhYmxlIChzZWxmKSB7XG4gIHJldHVybiB1dGlsLmlzRGlzdHVyYmVkKHNlbGYpIHx8IGlzTG9ja2VkKHNlbGYpXG59XG5cbmFzeW5jIGZ1bmN0aW9uIGNvbnN1bWUgKHN0cmVhbSwgdHlwZSkge1xuICBhc3NlcnQoIXN0cmVhbVtrQ29uc3VtZV0pXG5cbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBpZiAoaXNVbnVzYWJsZShzdHJlYW0pKSB7XG4gICAgICBjb25zdCByU3RhdGUgPSBzdHJlYW0uX3JlYWRhYmxlU3RhdGVcbiAgICAgIGlmIChyU3RhdGUuZGVzdHJveWVkICYmIHJTdGF0ZS5jbG9zZUVtaXR0ZWQgPT09IGZhbHNlKSB7XG4gICAgICAgIHN0cmVhbVxuICAgICAgICAgIC5vbignZXJyb3InLCBlcnIgPT4ge1xuICAgICAgICAgICAgcmVqZWN0KGVycilcbiAgICAgICAgICB9KVxuICAgICAgICAgIC5vbignY2xvc2UnLCAoKSA9PiB7XG4gICAgICAgICAgICByZWplY3QobmV3IFR5cGVFcnJvcigndW51c2FibGUnKSlcbiAgICAgICAgICB9KVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVqZWN0KHJTdGF0ZS5lcnJvcmVkID8/IG5ldyBUeXBlRXJyb3IoJ3VudXNhYmxlJykpXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHF1ZXVlTWljcm90YXNrKCgpID0+IHtcbiAgICAgICAgc3RyZWFtW2tDb25zdW1lXSA9IHtcbiAgICAgICAgICB0eXBlLFxuICAgICAgICAgIHN0cmVhbSxcbiAgICAgICAgICByZXNvbHZlLFxuICAgICAgICAgIHJlamVjdCxcbiAgICAgICAgICBsZW5ndGg6IDAsXG4gICAgICAgICAgYm9keTogW11cbiAgICAgICAgfVxuXG4gICAgICAgIHN0cmVhbVxuICAgICAgICAgIC5vbignZXJyb3InLCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgICAgICBjb25zdW1lRmluaXNoKHRoaXNba0NvbnN1bWVdLCBlcnIpXG4gICAgICAgICAgfSlcbiAgICAgICAgICAub24oJ2Nsb3NlJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaWYgKHRoaXNba0NvbnN1bWVdLmJvZHkgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgY29uc3VtZUZpbmlzaCh0aGlzW2tDb25zdW1lXSwgbmV3IFJlcXVlc3RBYm9ydGVkRXJyb3IoKSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KVxuXG4gICAgICAgIGNvbnN1bWVTdGFydChzdHJlYW1ba0NvbnN1bWVdKVxuICAgICAgfSlcbiAgICB9XG4gIH0pXG59XG5cbmZ1bmN0aW9uIGNvbnN1bWVTdGFydCAoY29uc3VtZSkge1xuICBpZiAoY29uc3VtZS5ib2R5ID09PSBudWxsKSB7XG4gICAgcmV0dXJuXG4gIH1cblxuICBjb25zdCB7IF9yZWFkYWJsZVN0YXRlOiBzdGF0ZSB9ID0gY29uc3VtZS5zdHJlYW1cblxuICBpZiAoc3RhdGUuYnVmZmVySW5kZXgpIHtcbiAgICBjb25zdCBzdGFydCA9IHN0YXRlLmJ1ZmZlckluZGV4XG4gICAgY29uc3QgZW5kID0gc3RhdGUuYnVmZmVyLmxlbmd0aFxuICAgIGZvciAobGV0IG4gPSBzdGFydDsgbiA8IGVuZDsgbisrKSB7XG4gICAgICBjb25zdW1lUHVzaChjb25zdW1lLCBzdGF0ZS5idWZmZXJbbl0pXG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGZvciAoY29uc3QgY2h1bmsgb2Ygc3RhdGUuYnVmZmVyKSB7XG4gICAgICBjb25zdW1lUHVzaChjb25zdW1lLCBjaHVuaylcbiAgICB9XG4gIH1cblxuICBpZiAoc3RhdGUuZW5kRW1pdHRlZCkge1xuICAgIGNvbnN1bWVFbmQodGhpc1trQ29uc3VtZV0pXG4gIH0gZWxzZSB7XG4gICAgY29uc3VtZS5zdHJlYW0ub24oJ2VuZCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN1bWVFbmQodGhpc1trQ29uc3VtZV0pXG4gICAgfSlcbiAgfVxuXG4gIGNvbnN1bWUuc3RyZWFtLnJlc3VtZSgpXG5cbiAgd2hpbGUgKGNvbnN1bWUuc3RyZWFtLnJlYWQoKSAhPSBudWxsKSB7XG4gICAgLy8gTG9vcFxuICB9XG59XG5cbi8qKlxuICogQHBhcmFtIHtCdWZmZXJbXX0gY2h1bmtzXG4gKiBAcGFyYW0ge251bWJlcn0gbGVuZ3RoXG4gKi9cbmZ1bmN0aW9uIGNodW5rc0RlY29kZSAoY2h1bmtzLCBsZW5ndGgpIHtcbiAgaWYgKGNodW5rcy5sZW5ndGggPT09IDAgfHwgbGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuICcnXG4gIH1cbiAgY29uc3QgYnVmZmVyID0gY2h1bmtzLmxlbmd0aCA9PT0gMSA/IGNodW5rc1swXSA6IEJ1ZmZlci5jb25jYXQoY2h1bmtzLCBsZW5ndGgpXG4gIGNvbnN0IGJ1ZmZlckxlbmd0aCA9IGJ1ZmZlci5sZW5ndGhcblxuICAvLyBTa2lwIEJPTS5cbiAgY29uc3Qgc3RhcnQgPVxuICAgIGJ1ZmZlckxlbmd0aCA+IDIgJiZcbiAgICBidWZmZXJbMF0gPT09IDB4ZWYgJiZcbiAgICBidWZmZXJbMV0gPT09IDB4YmIgJiZcbiAgICBidWZmZXJbMl0gPT09IDB4YmZcbiAgICAgID8gM1xuICAgICAgOiAwXG4gIHJldHVybiBidWZmZXIudXRmOFNsaWNlKHN0YXJ0LCBidWZmZXJMZW5ndGgpXG59XG5cbi8qKlxuICogQHBhcmFtIHtCdWZmZXJbXX0gY2h1bmtzXG4gKiBAcGFyYW0ge251bWJlcn0gbGVuZ3RoXG4gKiBAcmV0dXJucyB7VWludDhBcnJheX1cbiAqL1xuZnVuY3Rpb24gY2h1bmtzQ29uY2F0IChjaHVua3MsIGxlbmd0aCkge1xuICBpZiAoY2h1bmtzLmxlbmd0aCA9PT0gMCB8fCBsZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gbmV3IFVpbnQ4QXJyYXkoMClcbiAgfVxuICBpZiAoY2h1bmtzLmxlbmd0aCA9PT0gMSkge1xuICAgIC8vIGZhc3QtcGF0aFxuICAgIHJldHVybiBuZXcgVWludDhBcnJheShjaHVua3NbMF0pXG4gIH1cbiAgY29uc3QgYnVmZmVyID0gbmV3IFVpbnQ4QXJyYXkoQnVmZmVyLmFsbG9jVW5zYWZlU2xvdyhsZW5ndGgpLmJ1ZmZlcilcblxuICBsZXQgb2Zmc2V0ID0gMFxuICBmb3IgKGxldCBpID0gMDsgaSA8IGNodW5rcy5sZW5ndGg7ICsraSkge1xuICAgIGNvbnN0IGNodW5rID0gY2h1bmtzW2ldXG4gICAgYnVmZmVyLnNldChjaHVuaywgb2Zmc2V0KVxuICAgIG9mZnNldCArPSBjaHVuay5sZW5ndGhcbiAgfVxuXG4gIHJldHVybiBidWZmZXJcbn1cblxuZnVuY3Rpb24gY29uc3VtZUVuZCAoY29uc3VtZSkge1xuICBjb25zdCB7IHR5cGUsIGJvZHksIHJlc29sdmUsIHN0cmVhbSwgbGVuZ3RoIH0gPSBjb25zdW1lXG5cbiAgdHJ5IHtcbiAgICBpZiAodHlwZSA9PT0gJ3RleHQnKSB7XG4gICAgICByZXNvbHZlKGNodW5rc0RlY29kZShib2R5LCBsZW5ndGgpKVxuICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ2pzb24nKSB7XG4gICAgICByZXNvbHZlKEpTT04ucGFyc2UoY2h1bmtzRGVjb2RlKGJvZHksIGxlbmd0aCkpKVxuICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ2FycmF5QnVmZmVyJykge1xuICAgICAgcmVzb2x2ZShjaHVua3NDb25jYXQoYm9keSwgbGVuZ3RoKS5idWZmZXIpXG4gICAgfSBlbHNlIGlmICh0eXBlID09PSAnYmxvYicpIHtcbiAgICAgIHJlc29sdmUobmV3IEJsb2IoYm9keSwgeyB0eXBlOiBzdHJlYW1ba0NvbnRlbnRUeXBlXSB9KSlcbiAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdieXRlcycpIHtcbiAgICAgIHJlc29sdmUoY2h1bmtzQ29uY2F0KGJvZHksIGxlbmd0aCkpXG4gICAgfVxuXG4gICAgY29uc3VtZUZpbmlzaChjb25zdW1lKVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICBzdHJlYW0uZGVzdHJveShlcnIpXG4gIH1cbn1cblxuZnVuY3Rpb24gY29uc3VtZVB1c2ggKGNvbnN1bWUsIGNodW5rKSB7XG4gIGNvbnN1bWUubGVuZ3RoICs9IGNodW5rLmxlbmd0aFxuICBjb25zdW1lLmJvZHkucHVzaChjaHVuaylcbn1cblxuZnVuY3Rpb24gY29uc3VtZUZpbmlzaCAoY29uc3VtZSwgZXJyKSB7XG4gIGlmIChjb25zdW1lLmJvZHkgPT09IG51bGwpIHtcbiAgICByZXR1cm5cbiAgfVxuXG4gIGlmIChlcnIpIHtcbiAgICBjb25zdW1lLnJlamVjdChlcnIpXG4gIH0gZWxzZSB7XG4gICAgY29uc3VtZS5yZXNvbHZlKClcbiAgfVxuXG4gIGNvbnN1bWUudHlwZSA9IG51bGxcbiAgY29uc3VtZS5zdHJlYW0gPSBudWxsXG4gIGNvbnN1bWUucmVzb2x2ZSA9IG51bGxcbiAgY29uc3VtZS5yZWplY3QgPSBudWxsXG4gIGNvbnN1bWUubGVuZ3RoID0gMFxuICBjb25zdW1lLmJvZHkgPSBudWxsXG59XG5cbm1vZHVsZS5leHBvcnRzID0geyBSZWFkYWJsZTogQm9keVJlYWRhYmxlLCBjaHVua3NEZWNvZGUgfVxuIiwgImNvbnN0IGFzc2VydCA9IHJlcXVpcmUoJ25vZGU6YXNzZXJ0JylcbmNvbnN0IHtcbiAgUmVzcG9uc2VTdGF0dXNDb2RlRXJyb3Jcbn0gPSByZXF1aXJlKCcuLi9jb3JlL2Vycm9ycycpXG5cbmNvbnN0IHsgY2h1bmtzRGVjb2RlIH0gPSByZXF1aXJlKCcuL3JlYWRhYmxlJylcbmNvbnN0IENIVU5LX0xJTUlUID0gMTI4ICogMTAyNFxuXG5hc3luYyBmdW5jdGlvbiBnZXRSZXNvbHZlRXJyb3JCb2R5Q2FsbGJhY2sgKHsgY2FsbGJhY2ssIGJvZHksIGNvbnRlbnRUeXBlLCBzdGF0dXNDb2RlLCBzdGF0dXNNZXNzYWdlLCBoZWFkZXJzIH0pIHtcbiAgYXNzZXJ0KGJvZHkpXG5cbiAgbGV0IGNodW5rcyA9IFtdXG4gIGxldCBsZW5ndGggPSAwXG5cbiAgdHJ5IHtcbiAgICBmb3IgYXdhaXQgKGNvbnN0IGNodW5rIG9mIGJvZHkpIHtcbiAgICAgIGNodW5rcy5wdXNoKGNodW5rKVxuICAgICAgbGVuZ3RoICs9IGNodW5rLmxlbmd0aFxuICAgICAgaWYgKGxlbmd0aCA+IENIVU5LX0xJTUlUKSB7XG4gICAgICAgIGNodW5rcyA9IFtdXG4gICAgICAgIGxlbmd0aCA9IDBcbiAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICB9XG4gIH0gY2F0Y2gge1xuICAgIGNodW5rcyA9IFtdXG4gICAgbGVuZ3RoID0gMFxuICAgIC8vIERvIG5vdGhpbmcuLi4uXG4gIH1cblxuICBjb25zdCBtZXNzYWdlID0gYFJlc3BvbnNlIHN0YXR1cyBjb2RlICR7c3RhdHVzQ29kZX0ke3N0YXR1c01lc3NhZ2UgPyBgOiAke3N0YXR1c01lc3NhZ2V9YCA6ICcnfWBcblxuICBpZiAoc3RhdHVzQ29kZSA9PT0gMjA0IHx8ICFjb250ZW50VHlwZSB8fCAhbGVuZ3RoKSB7XG4gICAgcXVldWVNaWNyb3Rhc2soKCkgPT4gY2FsbGJhY2sobmV3IFJlc3BvbnNlU3RhdHVzQ29kZUVycm9yKG1lc3NhZ2UsIHN0YXR1c0NvZGUsIGhlYWRlcnMpKSlcbiAgICByZXR1cm5cbiAgfVxuXG4gIGNvbnN0IHN0YWNrVHJhY2VMaW1pdCA9IEVycm9yLnN0YWNrVHJhY2VMaW1pdFxuICBFcnJvci5zdGFja1RyYWNlTGltaXQgPSAwXG4gIGxldCBwYXlsb2FkXG5cbiAgdHJ5IHtcbiAgICBpZiAoaXNDb250ZW50VHlwZUFwcGxpY2F0aW9uSnNvbihjb250ZW50VHlwZSkpIHtcbiAgICAgIHBheWxvYWQgPSBKU09OLnBhcnNlKGNodW5rc0RlY29kZShjaHVua3MsIGxlbmd0aCkpXG4gICAgfSBlbHNlIGlmIChpc0NvbnRlbnRUeXBlVGV4dChjb250ZW50VHlwZSkpIHtcbiAgICAgIHBheWxvYWQgPSBjaHVua3NEZWNvZGUoY2h1bmtzLCBsZW5ndGgpXG4gICAgfVxuICB9IGNhdGNoIHtcbiAgICAvLyBwcm9jZXNzIGluIGEgY2FsbGJhY2sgdG8gYXZvaWQgdGhyb3dpbmcgaW4gdGhlIG1pY3JvdGFzayBxdWV1ZVxuICB9IGZpbmFsbHkge1xuICAgIEVycm9yLnN0YWNrVHJhY2VMaW1pdCA9IHN0YWNrVHJhY2VMaW1pdFxuICB9XG4gIHF1ZXVlTWljcm90YXNrKCgpID0+IGNhbGxiYWNrKG5ldyBSZXNwb25zZVN0YXR1c0NvZGVFcnJvcihtZXNzYWdlLCBzdGF0dXNDb2RlLCBoZWFkZXJzLCBwYXlsb2FkKSkpXG59XG5cbmNvbnN0IGlzQ29udGVudFR5cGVBcHBsaWNhdGlvbkpzb24gPSAoY29udGVudFR5cGUpID0+IHtcbiAgcmV0dXJuIChcbiAgICBjb250ZW50VHlwZS5sZW5ndGggPiAxNSAmJlxuICAgIGNvbnRlbnRUeXBlWzExXSA9PT0gJy8nICYmXG4gICAgY29udGVudFR5cGVbMF0gPT09ICdhJyAmJlxuICAgIGNvbnRlbnRUeXBlWzFdID09PSAncCcgJiZcbiAgICBjb250ZW50VHlwZVsyXSA9PT0gJ3AnICYmXG4gICAgY29udGVudFR5cGVbM10gPT09ICdsJyAmJlxuICAgIGNvbnRlbnRUeXBlWzRdID09PSAnaScgJiZcbiAgICBjb250ZW50VHlwZVs1XSA9PT0gJ2MnICYmXG4gICAgY29udGVudFR5cGVbNl0gPT09ICdhJyAmJlxuICAgIGNvbnRlbnRUeXBlWzddID09PSAndCcgJiZcbiAgICBjb250ZW50VHlwZVs4XSA9PT0gJ2knICYmXG4gICAgY29udGVudFR5cGVbOV0gPT09ICdvJyAmJlxuICAgIGNvbnRlbnRUeXBlWzEwXSA9PT0gJ24nICYmXG4gICAgY29udGVudFR5cGVbMTJdID09PSAnaicgJiZcbiAgICBjb250ZW50VHlwZVsxM10gPT09ICdzJyAmJlxuICAgIGNvbnRlbnRUeXBlWzE0XSA9PT0gJ28nICYmXG4gICAgY29udGVudFR5cGVbMTVdID09PSAnbidcbiAgKVxufVxuXG5jb25zdCBpc0NvbnRlbnRUeXBlVGV4dCA9IChjb250ZW50VHlwZSkgPT4ge1xuICByZXR1cm4gKFxuICAgIGNvbnRlbnRUeXBlLmxlbmd0aCA+IDQgJiZcbiAgICBjb250ZW50VHlwZVs0XSA9PT0gJy8nICYmXG4gICAgY29udGVudFR5cGVbMF0gPT09ICd0JyAmJlxuICAgIGNvbnRlbnRUeXBlWzFdID09PSAnZScgJiZcbiAgICBjb250ZW50VHlwZVsyXSA9PT0gJ3gnICYmXG4gICAgY29udGVudFR5cGVbM10gPT09ICd0J1xuICApXG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBnZXRSZXNvbHZlRXJyb3JCb2R5Q2FsbGJhY2ssXG4gIGlzQ29udGVudFR5cGVBcHBsaWNhdGlvbkpzb24sXG4gIGlzQ29udGVudFR5cGVUZXh0XG59XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IGFzc2VydCA9IHJlcXVpcmUoJ25vZGU6YXNzZXJ0JylcbmNvbnN0IHsgUmVhZGFibGUgfSA9IHJlcXVpcmUoJy4vcmVhZGFibGUnKVxuY29uc3QgeyBJbnZhbGlkQXJndW1lbnRFcnJvciwgUmVxdWVzdEFib3J0ZWRFcnJvciB9ID0gcmVxdWlyZSgnLi4vY29yZS9lcnJvcnMnKVxuY29uc3QgdXRpbCA9IHJlcXVpcmUoJy4uL2NvcmUvdXRpbCcpXG5jb25zdCB7IGdldFJlc29sdmVFcnJvckJvZHlDYWxsYmFjayB9ID0gcmVxdWlyZSgnLi91dGlsJylcbmNvbnN0IHsgQXN5bmNSZXNvdXJjZSB9ID0gcmVxdWlyZSgnbm9kZTphc3luY19ob29rcycpXG5cbmNsYXNzIFJlcXVlc3RIYW5kbGVyIGV4dGVuZHMgQXN5bmNSZXNvdXJjZSB7XG4gIGNvbnN0cnVjdG9yIChvcHRzLCBjYWxsYmFjaykge1xuICAgIGlmICghb3B0cyB8fCB0eXBlb2Ygb3B0cyAhPT0gJ29iamVjdCcpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBvcHRzJylcbiAgICB9XG5cbiAgICBjb25zdCB7IHNpZ25hbCwgbWV0aG9kLCBvcGFxdWUsIGJvZHksIG9uSW5mbywgcmVzcG9uc2VIZWFkZXJzLCB0aHJvd09uRXJyb3IsIGhpZ2hXYXRlck1hcmsgfSA9IG9wdHNcblxuICAgIHRyeSB7XG4gICAgICBpZiAodHlwZW9mIGNhbGxiYWNrICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBjYWxsYmFjaycpXG4gICAgICB9XG5cbiAgICAgIGlmIChoaWdoV2F0ZXJNYXJrICYmICh0eXBlb2YgaGlnaFdhdGVyTWFyayAhPT0gJ251bWJlcicgfHwgaGlnaFdhdGVyTWFyayA8IDApKSB7XG4gICAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBoaWdoV2F0ZXJNYXJrJylcbiAgICAgIH1cblxuICAgICAgaWYgKHNpZ25hbCAmJiB0eXBlb2Ygc2lnbmFsLm9uICE9PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBzaWduYWwuYWRkRXZlbnRMaXN0ZW5lciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ3NpZ25hbCBtdXN0IGJlIGFuIEV2ZW50RW1pdHRlciBvciBFdmVudFRhcmdldCcpXG4gICAgICB9XG5cbiAgICAgIGlmIChtZXRob2QgPT09ICdDT05ORUNUJykge1xuICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgbWV0aG9kJylcbiAgICAgIH1cblxuICAgICAgaWYgKG9uSW5mbyAmJiB0eXBlb2Ygb25JbmZvICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBvbkluZm8gY2FsbGJhY2snKVxuICAgICAgfVxuXG4gICAgICBzdXBlcignVU5ESUNJX1JFUVVFU1QnKVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgaWYgKHV0aWwuaXNTdHJlYW0oYm9keSkpIHtcbiAgICAgICAgdXRpbC5kZXN0cm95KGJvZHkub24oJ2Vycm9yJywgdXRpbC5ub3ApLCBlcnIpXG4gICAgICB9XG4gICAgICB0aHJvdyBlcnJcbiAgICB9XG5cbiAgICB0aGlzLm1ldGhvZCA9IG1ldGhvZFxuICAgIHRoaXMucmVzcG9uc2VIZWFkZXJzID0gcmVzcG9uc2VIZWFkZXJzIHx8IG51bGxcbiAgICB0aGlzLm9wYXF1ZSA9IG9wYXF1ZSB8fCBudWxsXG4gICAgdGhpcy5jYWxsYmFjayA9IGNhbGxiYWNrXG4gICAgdGhpcy5yZXMgPSBudWxsXG4gICAgdGhpcy5hYm9ydCA9IG51bGxcbiAgICB0aGlzLmJvZHkgPSBib2R5XG4gICAgdGhpcy50cmFpbGVycyA9IHt9XG4gICAgdGhpcy5jb250ZXh0ID0gbnVsbFxuICAgIHRoaXMub25JbmZvID0gb25JbmZvIHx8IG51bGxcbiAgICB0aGlzLnRocm93T25FcnJvciA9IHRocm93T25FcnJvclxuICAgIHRoaXMuaGlnaFdhdGVyTWFyayA9IGhpZ2hXYXRlck1hcmtcbiAgICB0aGlzLnNpZ25hbCA9IHNpZ25hbFxuICAgIHRoaXMucmVhc29uID0gbnVsbFxuICAgIHRoaXMucmVtb3ZlQWJvcnRMaXN0ZW5lciA9IG51bGxcblxuICAgIGlmICh1dGlsLmlzU3RyZWFtKGJvZHkpKSB7XG4gICAgICBib2R5Lm9uKCdlcnJvcicsIChlcnIpID0+IHtcbiAgICAgICAgdGhpcy5vbkVycm9yKGVycilcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgaWYgKHRoaXMuc2lnbmFsKSB7XG4gICAgICBpZiAodGhpcy5zaWduYWwuYWJvcnRlZCkge1xuICAgICAgICB0aGlzLnJlYXNvbiA9IHRoaXMuc2lnbmFsLnJlYXNvbiA/PyBuZXcgUmVxdWVzdEFib3J0ZWRFcnJvcigpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnJlbW92ZUFib3J0TGlzdGVuZXIgPSB1dGlsLmFkZEFib3J0TGlzdGVuZXIodGhpcy5zaWduYWwsICgpID0+IHtcbiAgICAgICAgICB0aGlzLnJlYXNvbiA9IHRoaXMuc2lnbmFsLnJlYXNvbiA/PyBuZXcgUmVxdWVzdEFib3J0ZWRFcnJvcigpXG4gICAgICAgICAgaWYgKHRoaXMucmVzKSB7XG4gICAgICAgICAgICB1dGlsLmRlc3Ryb3kodGhpcy5yZXMub24oJ2Vycm9yJywgdXRpbC5ub3ApLCB0aGlzLnJlYXNvbilcbiAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuYWJvcnQpIHtcbiAgICAgICAgICAgIHRoaXMuYWJvcnQodGhpcy5yZWFzb24pXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHRoaXMucmVtb3ZlQWJvcnRMaXN0ZW5lcikge1xuICAgICAgICAgICAgdGhpcy5yZXM/Lm9mZignY2xvc2UnLCB0aGlzLnJlbW92ZUFib3J0TGlzdGVuZXIpXG4gICAgICAgICAgICB0aGlzLnJlbW92ZUFib3J0TGlzdGVuZXIoKVxuICAgICAgICAgICAgdGhpcy5yZW1vdmVBYm9ydExpc3RlbmVyID0gbnVsbFxuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBvbkNvbm5lY3QgKGFib3J0LCBjb250ZXh0KSB7XG4gICAgaWYgKHRoaXMucmVhc29uKSB7XG4gICAgICBhYm9ydCh0aGlzLnJlYXNvbilcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGFzc2VydCh0aGlzLmNhbGxiYWNrKVxuXG4gICAgdGhpcy5hYm9ydCA9IGFib3J0XG4gICAgdGhpcy5jb250ZXh0ID0gY29udGV4dFxuICB9XG5cbiAgb25IZWFkZXJzIChzdGF0dXNDb2RlLCByYXdIZWFkZXJzLCByZXN1bWUsIHN0YXR1c01lc3NhZ2UpIHtcbiAgICBjb25zdCB7IGNhbGxiYWNrLCBvcGFxdWUsIGFib3J0LCBjb250ZXh0LCByZXNwb25zZUhlYWRlcnMsIGhpZ2hXYXRlck1hcmsgfSA9IHRoaXNcblxuICAgIGNvbnN0IGhlYWRlcnMgPSByZXNwb25zZUhlYWRlcnMgPT09ICdyYXcnID8gdXRpbC5wYXJzZVJhd0hlYWRlcnMocmF3SGVhZGVycykgOiB1dGlsLnBhcnNlSGVhZGVycyhyYXdIZWFkZXJzKVxuXG4gICAgaWYgKHN0YXR1c0NvZGUgPCAyMDApIHtcbiAgICAgIGlmICh0aGlzLm9uSW5mbykge1xuICAgICAgICB0aGlzLm9uSW5mbyh7IHN0YXR1c0NvZGUsIGhlYWRlcnMgfSlcbiAgICAgIH1cbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGNvbnN0IHBhcnNlZEhlYWRlcnMgPSByZXNwb25zZUhlYWRlcnMgPT09ICdyYXcnID8gdXRpbC5wYXJzZUhlYWRlcnMocmF3SGVhZGVycykgOiBoZWFkZXJzXG4gICAgY29uc3QgY29udGVudFR5cGUgPSBwYXJzZWRIZWFkZXJzWydjb250ZW50LXR5cGUnXVxuICAgIGNvbnN0IGNvbnRlbnRMZW5ndGggPSBwYXJzZWRIZWFkZXJzWydjb250ZW50LWxlbmd0aCddXG4gICAgY29uc3QgcmVzID0gbmV3IFJlYWRhYmxlKHtcbiAgICAgIHJlc3VtZSxcbiAgICAgIGFib3J0LFxuICAgICAgY29udGVudFR5cGUsXG4gICAgICBjb250ZW50TGVuZ3RoOiB0aGlzLm1ldGhvZCAhPT0gJ0hFQUQnICYmIGNvbnRlbnRMZW5ndGhcbiAgICAgICAgPyBOdW1iZXIoY29udGVudExlbmd0aClcbiAgICAgICAgOiBudWxsLFxuICAgICAgaGlnaFdhdGVyTWFya1xuICAgIH0pXG5cbiAgICBpZiAodGhpcy5yZW1vdmVBYm9ydExpc3RlbmVyKSB7XG4gICAgICByZXMub24oJ2Nsb3NlJywgdGhpcy5yZW1vdmVBYm9ydExpc3RlbmVyKVxuICAgIH1cblxuICAgIHRoaXMuY2FsbGJhY2sgPSBudWxsXG4gICAgdGhpcy5yZXMgPSByZXNcbiAgICBpZiAoY2FsbGJhY2sgIT09IG51bGwpIHtcbiAgICAgIGlmICh0aGlzLnRocm93T25FcnJvciAmJiBzdGF0dXNDb2RlID49IDQwMCkge1xuICAgICAgICB0aGlzLnJ1bkluQXN5bmNTY29wZShnZXRSZXNvbHZlRXJyb3JCb2R5Q2FsbGJhY2ssIG51bGwsXG4gICAgICAgICAgeyBjYWxsYmFjaywgYm9keTogcmVzLCBjb250ZW50VHlwZSwgc3RhdHVzQ29kZSwgc3RhdHVzTWVzc2FnZSwgaGVhZGVycyB9XG4gICAgICAgIClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMucnVuSW5Bc3luY1Njb3BlKGNhbGxiYWNrLCBudWxsLCBudWxsLCB7XG4gICAgICAgICAgc3RhdHVzQ29kZSxcbiAgICAgICAgICBoZWFkZXJzLFxuICAgICAgICAgIHRyYWlsZXJzOiB0aGlzLnRyYWlsZXJzLFxuICAgICAgICAgIG9wYXF1ZSxcbiAgICAgICAgICBib2R5OiByZXMsXG4gICAgICAgICAgY29udGV4dFxuICAgICAgICB9KVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIG9uRGF0YSAoY2h1bmspIHtcbiAgICByZXR1cm4gdGhpcy5yZXMucHVzaChjaHVuaylcbiAgfVxuXG4gIG9uQ29tcGxldGUgKHRyYWlsZXJzKSB7XG4gICAgdXRpbC5wYXJzZUhlYWRlcnModHJhaWxlcnMsIHRoaXMudHJhaWxlcnMpXG4gICAgdGhpcy5yZXMucHVzaChudWxsKVxuICB9XG5cbiAgb25FcnJvciAoZXJyKSB7XG4gICAgY29uc3QgeyByZXMsIGNhbGxiYWNrLCBib2R5LCBvcGFxdWUgfSA9IHRoaXNcblxuICAgIGlmIChjYWxsYmFjaykge1xuICAgICAgLy8gVE9ETzogRG9lcyB0aGlzIG5lZWQgcXVldWVNaWNyb3Rhc2s/XG4gICAgICB0aGlzLmNhbGxiYWNrID0gbnVsbFxuICAgICAgcXVldWVNaWNyb3Rhc2soKCkgPT4ge1xuICAgICAgICB0aGlzLnJ1bkluQXN5bmNTY29wZShjYWxsYmFjaywgbnVsbCwgZXJyLCB7IG9wYXF1ZSB9KVxuICAgICAgfSlcbiAgICB9XG5cbiAgICBpZiAocmVzKSB7XG4gICAgICB0aGlzLnJlcyA9IG51bGxcbiAgICAgIC8vIEVuc3VyZSBhbGwgcXVldWVkIGhhbmRsZXJzIGFyZSBpbnZva2VkIGJlZm9yZSBkZXN0cm95aW5nIHJlcy5cbiAgICAgIHF1ZXVlTWljcm90YXNrKCgpID0+IHtcbiAgICAgICAgdXRpbC5kZXN0cm95KHJlcywgZXJyKVxuICAgICAgfSlcbiAgICB9XG5cbiAgICBpZiAoYm9keSkge1xuICAgICAgdGhpcy5ib2R5ID0gbnVsbFxuICAgICAgdXRpbC5kZXN0cm95KGJvZHksIGVycilcbiAgICB9XG5cbiAgICBpZiAodGhpcy5yZW1vdmVBYm9ydExpc3RlbmVyKSB7XG4gICAgICByZXM/Lm9mZignY2xvc2UnLCB0aGlzLnJlbW92ZUFib3J0TGlzdGVuZXIpXG4gICAgICB0aGlzLnJlbW92ZUFib3J0TGlzdGVuZXIoKVxuICAgICAgdGhpcy5yZW1vdmVBYm9ydExpc3RlbmVyID0gbnVsbFxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiByZXF1ZXN0IChvcHRzLCBjYWxsYmFjaykge1xuICBpZiAoY2FsbGJhY2sgPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICByZXF1ZXN0LmNhbGwodGhpcywgb3B0cywgKGVyciwgZGF0YSkgPT4ge1xuICAgICAgICByZXR1cm4gZXJyID8gcmVqZWN0KGVycikgOiByZXNvbHZlKGRhdGEpXG4gICAgICB9KVxuICAgIH0pXG4gIH1cblxuICB0cnkge1xuICAgIHRoaXMuZGlzcGF0Y2gob3B0cywgbmV3IFJlcXVlc3RIYW5kbGVyKG9wdHMsIGNhbGxiYWNrKSlcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgaWYgKHR5cGVvZiBjYWxsYmFjayAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgZXJyXG4gICAgfVxuICAgIGNvbnN0IG9wYXF1ZSA9IG9wdHM/Lm9wYXF1ZVxuICAgIHF1ZXVlTWljcm90YXNrKCgpID0+IGNhbGxiYWNrKGVyciwgeyBvcGFxdWUgfSkpXG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSByZXF1ZXN0XG5tb2R1bGUuZXhwb3J0cy5SZXF1ZXN0SGFuZGxlciA9IFJlcXVlc3RIYW5kbGVyXG4iLCAiY29uc3QgeyBhZGRBYm9ydExpc3RlbmVyIH0gPSByZXF1aXJlKCcuLi9jb3JlL3V0aWwnKVxuY29uc3QgeyBSZXF1ZXN0QWJvcnRlZEVycm9yIH0gPSByZXF1aXJlKCcuLi9jb3JlL2Vycm9ycycpXG5cbmNvbnN0IGtMaXN0ZW5lciA9IFN5bWJvbCgna0xpc3RlbmVyJylcbmNvbnN0IGtTaWduYWwgPSBTeW1ib2woJ2tTaWduYWwnKVxuXG5mdW5jdGlvbiBhYm9ydCAoc2VsZikge1xuICBpZiAoc2VsZi5hYm9ydCkge1xuICAgIHNlbGYuYWJvcnQoc2VsZltrU2lnbmFsXT8ucmVhc29uKVxuICB9IGVsc2Uge1xuICAgIHNlbGYucmVhc29uID0gc2VsZltrU2lnbmFsXT8ucmVhc29uID8/IG5ldyBSZXF1ZXN0QWJvcnRlZEVycm9yKClcbiAgfVxuICByZW1vdmVTaWduYWwoc2VsZilcbn1cblxuZnVuY3Rpb24gYWRkU2lnbmFsIChzZWxmLCBzaWduYWwpIHtcbiAgc2VsZi5yZWFzb24gPSBudWxsXG5cbiAgc2VsZltrU2lnbmFsXSA9IG51bGxcbiAgc2VsZltrTGlzdGVuZXJdID0gbnVsbFxuXG4gIGlmICghc2lnbmFsKSB7XG4gICAgcmV0dXJuXG4gIH1cblxuICBpZiAoc2lnbmFsLmFib3J0ZWQpIHtcbiAgICBhYm9ydChzZWxmKVxuICAgIHJldHVyblxuICB9XG5cbiAgc2VsZltrU2lnbmFsXSA9IHNpZ25hbFxuICBzZWxmW2tMaXN0ZW5lcl0gPSAoKSA9PiB7XG4gICAgYWJvcnQoc2VsZilcbiAgfVxuXG4gIGFkZEFib3J0TGlzdGVuZXIoc2VsZltrU2lnbmFsXSwgc2VsZltrTGlzdGVuZXJdKVxufVxuXG5mdW5jdGlvbiByZW1vdmVTaWduYWwgKHNlbGYpIHtcbiAgaWYgKCFzZWxmW2tTaWduYWxdKSB7XG4gICAgcmV0dXJuXG4gIH1cblxuICBpZiAoJ3JlbW92ZUV2ZW50TGlzdGVuZXInIGluIHNlbGZba1NpZ25hbF0pIHtcbiAgICBzZWxmW2tTaWduYWxdLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2Fib3J0Jywgc2VsZltrTGlzdGVuZXJdKVxuICB9IGVsc2Uge1xuICAgIHNlbGZba1NpZ25hbF0ucmVtb3ZlTGlzdGVuZXIoJ2Fib3J0Jywgc2VsZltrTGlzdGVuZXJdKVxuICB9XG5cbiAgc2VsZltrU2lnbmFsXSA9IG51bGxcbiAgc2VsZltrTGlzdGVuZXJdID0gbnVsbFxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgYWRkU2lnbmFsLFxuICByZW1vdmVTaWduYWxcbn1cbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgYXNzZXJ0ID0gcmVxdWlyZSgnbm9kZTphc3NlcnQnKVxuY29uc3QgeyBmaW5pc2hlZCwgUGFzc1Rocm91Z2ggfSA9IHJlcXVpcmUoJ25vZGU6c3RyZWFtJylcbmNvbnN0IHsgSW52YWxpZEFyZ3VtZW50RXJyb3IsIEludmFsaWRSZXR1cm5WYWx1ZUVycm9yIH0gPSByZXF1aXJlKCcuLi9jb3JlL2Vycm9ycycpXG5jb25zdCB1dGlsID0gcmVxdWlyZSgnLi4vY29yZS91dGlsJylcbmNvbnN0IHsgZ2V0UmVzb2x2ZUVycm9yQm9keUNhbGxiYWNrIH0gPSByZXF1aXJlKCcuL3V0aWwnKVxuY29uc3QgeyBBc3luY1Jlc291cmNlIH0gPSByZXF1aXJlKCdub2RlOmFzeW5jX2hvb2tzJylcbmNvbnN0IHsgYWRkU2lnbmFsLCByZW1vdmVTaWduYWwgfSA9IHJlcXVpcmUoJy4vYWJvcnQtc2lnbmFsJylcblxuY2xhc3MgU3RyZWFtSGFuZGxlciBleHRlbmRzIEFzeW5jUmVzb3VyY2Uge1xuICBjb25zdHJ1Y3RvciAob3B0cywgZmFjdG9yeSwgY2FsbGJhY2spIHtcbiAgICBpZiAoIW9wdHMgfHwgdHlwZW9mIG9wdHMgIT09ICdvYmplY3QnKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgb3B0cycpXG4gICAgfVxuXG4gICAgY29uc3QgeyBzaWduYWwsIG1ldGhvZCwgb3BhcXVlLCBib2R5LCBvbkluZm8sIHJlc3BvbnNlSGVhZGVycywgdGhyb3dPbkVycm9yIH0gPSBvcHRzXG5cbiAgICB0cnkge1xuICAgICAgaWYgKHR5cGVvZiBjYWxsYmFjayAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgY2FsbGJhY2snKVxuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIGZhY3RvcnkgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIGZhY3RvcnknKVxuICAgICAgfVxuXG4gICAgICBpZiAoc2lnbmFsICYmIHR5cGVvZiBzaWduYWwub24gIT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIHNpZ25hbC5hZGRFdmVudExpc3RlbmVyICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignc2lnbmFsIG11c3QgYmUgYW4gRXZlbnRFbWl0dGVyIG9yIEV2ZW50VGFyZ2V0JylcbiAgICAgIH1cblxuICAgICAgaWYgKG1ldGhvZCA9PT0gJ0NPTk5FQ1QnKSB7XG4gICAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBtZXRob2QnKVxuICAgICAgfVxuXG4gICAgICBpZiAob25JbmZvICYmIHR5cGVvZiBvbkluZm8gIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIG9uSW5mbyBjYWxsYmFjaycpXG4gICAgICB9XG5cbiAgICAgIHN1cGVyKCdVTkRJQ0lfU1RSRUFNJylcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGlmICh1dGlsLmlzU3RyZWFtKGJvZHkpKSB7XG4gICAgICAgIHV0aWwuZGVzdHJveShib2R5Lm9uKCdlcnJvcicsIHV0aWwubm9wKSwgZXJyKVxuICAgICAgfVxuICAgICAgdGhyb3cgZXJyXG4gICAgfVxuXG4gICAgdGhpcy5yZXNwb25zZUhlYWRlcnMgPSByZXNwb25zZUhlYWRlcnMgfHwgbnVsbFxuICAgIHRoaXMub3BhcXVlID0gb3BhcXVlIHx8IG51bGxcbiAgICB0aGlzLmZhY3RvcnkgPSBmYWN0b3J5XG4gICAgdGhpcy5jYWxsYmFjayA9IGNhbGxiYWNrXG4gICAgdGhpcy5yZXMgPSBudWxsXG4gICAgdGhpcy5hYm9ydCA9IG51bGxcbiAgICB0aGlzLmNvbnRleHQgPSBudWxsXG4gICAgdGhpcy50cmFpbGVycyA9IG51bGxcbiAgICB0aGlzLmJvZHkgPSBib2R5XG4gICAgdGhpcy5vbkluZm8gPSBvbkluZm8gfHwgbnVsbFxuICAgIHRoaXMudGhyb3dPbkVycm9yID0gdGhyb3dPbkVycm9yIHx8IGZhbHNlXG5cbiAgICBpZiAodXRpbC5pc1N0cmVhbShib2R5KSkge1xuICAgICAgYm9keS5vbignZXJyb3InLCAoZXJyKSA9PiB7XG4gICAgICAgIHRoaXMub25FcnJvcihlcnIpXG4gICAgICB9KVxuICAgIH1cblxuICAgIGFkZFNpZ25hbCh0aGlzLCBzaWduYWwpXG4gIH1cblxuICBvbkNvbm5lY3QgKGFib3J0LCBjb250ZXh0KSB7XG4gICAgaWYgKHRoaXMucmVhc29uKSB7XG4gICAgICBhYm9ydCh0aGlzLnJlYXNvbilcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGFzc2VydCh0aGlzLmNhbGxiYWNrKVxuXG4gICAgdGhpcy5hYm9ydCA9IGFib3J0XG4gICAgdGhpcy5jb250ZXh0ID0gY29udGV4dFxuICB9XG5cbiAgb25IZWFkZXJzIChzdGF0dXNDb2RlLCByYXdIZWFkZXJzLCByZXN1bWUsIHN0YXR1c01lc3NhZ2UpIHtcbiAgICBjb25zdCB7IGZhY3RvcnksIG9wYXF1ZSwgY29udGV4dCwgY2FsbGJhY2ssIHJlc3BvbnNlSGVhZGVycyB9ID0gdGhpc1xuXG4gICAgY29uc3QgaGVhZGVycyA9IHJlc3BvbnNlSGVhZGVycyA9PT0gJ3JhdycgPyB1dGlsLnBhcnNlUmF3SGVhZGVycyhyYXdIZWFkZXJzKSA6IHV0aWwucGFyc2VIZWFkZXJzKHJhd0hlYWRlcnMpXG5cbiAgICBpZiAoc3RhdHVzQ29kZSA8IDIwMCkge1xuICAgICAgaWYgKHRoaXMub25JbmZvKSB7XG4gICAgICAgIHRoaXMub25JbmZvKHsgc3RhdHVzQ29kZSwgaGVhZGVycyB9KVxuICAgICAgfVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgdGhpcy5mYWN0b3J5ID0gbnVsbFxuXG4gICAgbGV0IHJlc1xuXG4gICAgaWYgKHRoaXMudGhyb3dPbkVycm9yICYmIHN0YXR1c0NvZGUgPj0gNDAwKSB7XG4gICAgICBjb25zdCBwYXJzZWRIZWFkZXJzID0gcmVzcG9uc2VIZWFkZXJzID09PSAncmF3JyA/IHV0aWwucGFyc2VIZWFkZXJzKHJhd0hlYWRlcnMpIDogaGVhZGVyc1xuICAgICAgY29uc3QgY29udGVudFR5cGUgPSBwYXJzZWRIZWFkZXJzWydjb250ZW50LXR5cGUnXVxuICAgICAgcmVzID0gbmV3IFBhc3NUaHJvdWdoKClcblxuICAgICAgdGhpcy5jYWxsYmFjayA9IG51bGxcbiAgICAgIHRoaXMucnVuSW5Bc3luY1Njb3BlKGdldFJlc29sdmVFcnJvckJvZHlDYWxsYmFjaywgbnVsbCxcbiAgICAgICAgeyBjYWxsYmFjaywgYm9keTogcmVzLCBjb250ZW50VHlwZSwgc3RhdHVzQ29kZSwgc3RhdHVzTWVzc2FnZSwgaGVhZGVycyB9XG4gICAgICApXG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChmYWN0b3J5ID09PSBudWxsKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICByZXMgPSB0aGlzLnJ1bkluQXN5bmNTY29wZShmYWN0b3J5LCBudWxsLCB7XG4gICAgICAgIHN0YXR1c0NvZGUsXG4gICAgICAgIGhlYWRlcnMsXG4gICAgICAgIG9wYXF1ZSxcbiAgICAgICAgY29udGV4dFxuICAgICAgfSlcblxuICAgICAgaWYgKFxuICAgICAgICAhcmVzIHx8XG4gICAgICAgIHR5cGVvZiByZXMud3JpdGUgIT09ICdmdW5jdGlvbicgfHxcbiAgICAgICAgdHlwZW9mIHJlcy5lbmQgIT09ICdmdW5jdGlvbicgfHxcbiAgICAgICAgdHlwZW9mIHJlcy5vbiAhPT0gJ2Z1bmN0aW9uJ1xuICAgICAgKSB7XG4gICAgICAgIHRocm93IG5ldyBJbnZhbGlkUmV0dXJuVmFsdWVFcnJvcignZXhwZWN0ZWQgV3JpdGFibGUnKVxuICAgICAgfVxuXG4gICAgICAvLyBUT0RPOiBBdm9pZCBmaW5pc2hlZC4gSXQgcmVnaXN0ZXJzIGFuIHVubmVjZXNzYXJ5IGFtb3VudCBvZiBsaXN0ZW5lcnMuXG4gICAgICBmaW5pc2hlZChyZXMsIHsgcmVhZGFibGU6IGZhbHNlIH0sIChlcnIpID0+IHtcbiAgICAgICAgY29uc3QgeyBjYWxsYmFjaywgcmVzLCBvcGFxdWUsIHRyYWlsZXJzLCBhYm9ydCB9ID0gdGhpc1xuXG4gICAgICAgIHRoaXMucmVzID0gbnVsbFxuICAgICAgICBpZiAoZXJyIHx8ICFyZXMucmVhZGFibGUpIHtcbiAgICAgICAgICB1dGlsLmRlc3Ryb3kocmVzLCBlcnIpXG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmNhbGxiYWNrID0gbnVsbFxuICAgICAgICB0aGlzLnJ1bkluQXN5bmNTY29wZShjYWxsYmFjaywgbnVsbCwgZXJyIHx8IG51bGwsIHsgb3BhcXVlLCB0cmFpbGVycyB9KVxuXG4gICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICBhYm9ydCgpXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfVxuXG4gICAgcmVzLm9uKCdkcmFpbicsIHJlc3VtZSlcblxuICAgIHRoaXMucmVzID0gcmVzXG5cbiAgICBjb25zdCBuZWVkRHJhaW4gPSByZXMud3JpdGFibGVOZWVkRHJhaW4gIT09IHVuZGVmaW5lZFxuICAgICAgPyByZXMud3JpdGFibGVOZWVkRHJhaW5cbiAgICAgIDogcmVzLl93cml0YWJsZVN0YXRlPy5uZWVkRHJhaW5cblxuICAgIHJldHVybiBuZWVkRHJhaW4gIT09IHRydWVcbiAgfVxuXG4gIG9uRGF0YSAoY2h1bmspIHtcbiAgICBjb25zdCB7IHJlcyB9ID0gdGhpc1xuXG4gICAgcmV0dXJuIHJlcyA/IHJlcy53cml0ZShjaHVuaykgOiB0cnVlXG4gIH1cblxuICBvbkNvbXBsZXRlICh0cmFpbGVycykge1xuICAgIGNvbnN0IHsgcmVzIH0gPSB0aGlzXG5cbiAgICByZW1vdmVTaWduYWwodGhpcylcblxuICAgIGlmICghcmVzKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICB0aGlzLnRyYWlsZXJzID0gdXRpbC5wYXJzZUhlYWRlcnModHJhaWxlcnMpXG5cbiAgICByZXMuZW5kKClcbiAgfVxuXG4gIG9uRXJyb3IgKGVycikge1xuICAgIGNvbnN0IHsgcmVzLCBjYWxsYmFjaywgb3BhcXVlLCBib2R5IH0gPSB0aGlzXG5cbiAgICByZW1vdmVTaWduYWwodGhpcylcblxuICAgIHRoaXMuZmFjdG9yeSA9IG51bGxcblxuICAgIGlmIChyZXMpIHtcbiAgICAgIHRoaXMucmVzID0gbnVsbFxuICAgICAgdXRpbC5kZXN0cm95KHJlcywgZXJyKVxuICAgIH0gZWxzZSBpZiAoY2FsbGJhY2spIHtcbiAgICAgIHRoaXMuY2FsbGJhY2sgPSBudWxsXG4gICAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiB7XG4gICAgICAgIHRoaXMucnVuSW5Bc3luY1Njb3BlKGNhbGxiYWNrLCBudWxsLCBlcnIsIHsgb3BhcXVlIH0pXG4gICAgICB9KVxuICAgIH1cblxuICAgIGlmIChib2R5KSB7XG4gICAgICB0aGlzLmJvZHkgPSBudWxsXG4gICAgICB1dGlsLmRlc3Ryb3koYm9keSwgZXJyKVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBzdHJlYW0gKG9wdHMsIGZhY3RvcnksIGNhbGxiYWNrKSB7XG4gIGlmIChjYWxsYmFjayA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIHN0cmVhbS5jYWxsKHRoaXMsIG9wdHMsIGZhY3RvcnksIChlcnIsIGRhdGEpID0+IHtcbiAgICAgICAgcmV0dXJuIGVyciA/IHJlamVjdChlcnIpIDogcmVzb2x2ZShkYXRhKVxuICAgICAgfSlcbiAgICB9KVxuICB9XG5cbiAgdHJ5IHtcbiAgICB0aGlzLmRpc3BhdGNoKG9wdHMsIG5ldyBTdHJlYW1IYW5kbGVyKG9wdHMsIGZhY3RvcnksIGNhbGxiYWNrKSlcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgaWYgKHR5cGVvZiBjYWxsYmFjayAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgZXJyXG4gICAgfVxuICAgIGNvbnN0IG9wYXF1ZSA9IG9wdHM/Lm9wYXF1ZVxuICAgIHF1ZXVlTWljcm90YXNrKCgpID0+IGNhbGxiYWNrKGVyciwgeyBvcGFxdWUgfSkpXG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzdHJlYW1cbiIsICIndXNlIHN0cmljdCdcblxuY29uc3Qge1xuICBSZWFkYWJsZSxcbiAgRHVwbGV4LFxuICBQYXNzVGhyb3VnaFxufSA9IHJlcXVpcmUoJ25vZGU6c3RyZWFtJylcbmNvbnN0IHtcbiAgSW52YWxpZEFyZ3VtZW50RXJyb3IsXG4gIEludmFsaWRSZXR1cm5WYWx1ZUVycm9yLFxuICBSZXF1ZXN0QWJvcnRlZEVycm9yXG59ID0gcmVxdWlyZSgnLi4vY29yZS9lcnJvcnMnKVxuY29uc3QgdXRpbCA9IHJlcXVpcmUoJy4uL2NvcmUvdXRpbCcpXG5jb25zdCB7IEFzeW5jUmVzb3VyY2UgfSA9IHJlcXVpcmUoJ25vZGU6YXN5bmNfaG9va3MnKVxuY29uc3QgeyBhZGRTaWduYWwsIHJlbW92ZVNpZ25hbCB9ID0gcmVxdWlyZSgnLi9hYm9ydC1zaWduYWwnKVxuY29uc3QgYXNzZXJ0ID0gcmVxdWlyZSgnbm9kZTphc3NlcnQnKVxuXG5jb25zdCBrUmVzdW1lID0gU3ltYm9sKCdyZXN1bWUnKVxuXG5jbGFzcyBQaXBlbGluZVJlcXVlc3QgZXh0ZW5kcyBSZWFkYWJsZSB7XG4gIGNvbnN0cnVjdG9yICgpIHtcbiAgICBzdXBlcih7IGF1dG9EZXN0cm95OiB0cnVlIH0pXG5cbiAgICB0aGlzW2tSZXN1bWVdID0gbnVsbFxuICB9XG5cbiAgX3JlYWQgKCkge1xuICAgIGNvbnN0IHsgW2tSZXN1bWVdOiByZXN1bWUgfSA9IHRoaXNcblxuICAgIGlmIChyZXN1bWUpIHtcbiAgICAgIHRoaXNba1Jlc3VtZV0gPSBudWxsXG4gICAgICByZXN1bWUoKVxuICAgIH1cbiAgfVxuXG4gIF9kZXN0cm95IChlcnIsIGNhbGxiYWNrKSB7XG4gICAgdGhpcy5fcmVhZCgpXG5cbiAgICBjYWxsYmFjayhlcnIpXG4gIH1cbn1cblxuY2xhc3MgUGlwZWxpbmVSZXNwb25zZSBleHRlbmRzIFJlYWRhYmxlIHtcbiAgY29uc3RydWN0b3IgKHJlc3VtZSkge1xuICAgIHN1cGVyKHsgYXV0b0Rlc3Ryb3k6IHRydWUgfSlcbiAgICB0aGlzW2tSZXN1bWVdID0gcmVzdW1lXG4gIH1cblxuICBfcmVhZCAoKSB7XG4gICAgdGhpc1trUmVzdW1lXSgpXG4gIH1cblxuICBfZGVzdHJveSAoZXJyLCBjYWxsYmFjaykge1xuICAgIGlmICghZXJyICYmICF0aGlzLl9yZWFkYWJsZVN0YXRlLmVuZEVtaXR0ZWQpIHtcbiAgICAgIGVyciA9IG5ldyBSZXF1ZXN0QWJvcnRlZEVycm9yKClcbiAgICB9XG5cbiAgICBjYWxsYmFjayhlcnIpXG4gIH1cbn1cblxuY2xhc3MgUGlwZWxpbmVIYW5kbGVyIGV4dGVuZHMgQXN5bmNSZXNvdXJjZSB7XG4gIGNvbnN0cnVjdG9yIChvcHRzLCBoYW5kbGVyKSB7XG4gICAgaWYgKCFvcHRzIHx8IHR5cGVvZiBvcHRzICE9PSAnb2JqZWN0Jykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIG9wdHMnKVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgaGFuZGxlciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIGhhbmRsZXInKVxuICAgIH1cblxuICAgIGNvbnN0IHsgc2lnbmFsLCBtZXRob2QsIG9wYXF1ZSwgb25JbmZvLCByZXNwb25zZUhlYWRlcnMgfSA9IG9wdHNcblxuICAgIGlmIChzaWduYWwgJiYgdHlwZW9mIHNpZ25hbC5vbiAhPT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2Ygc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignc2lnbmFsIG11c3QgYmUgYW4gRXZlbnRFbWl0dGVyIG9yIEV2ZW50VGFyZ2V0JylcbiAgICB9XG5cbiAgICBpZiAobWV0aG9kID09PSAnQ09OTkVDVCcpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBtZXRob2QnKVxuICAgIH1cblxuICAgIGlmIChvbkluZm8gJiYgdHlwZW9mIG9uSW5mbyAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIG9uSW5mbyBjYWxsYmFjaycpXG4gICAgfVxuXG4gICAgc3VwZXIoJ1VORElDSV9QSVBFTElORScpXG5cbiAgICB0aGlzLm9wYXF1ZSA9IG9wYXF1ZSB8fCBudWxsXG4gICAgdGhpcy5yZXNwb25zZUhlYWRlcnMgPSByZXNwb25zZUhlYWRlcnMgfHwgbnVsbFxuICAgIHRoaXMuaGFuZGxlciA9IGhhbmRsZXJcbiAgICB0aGlzLmFib3J0ID0gbnVsbFxuICAgIHRoaXMuY29udGV4dCA9IG51bGxcbiAgICB0aGlzLm9uSW5mbyA9IG9uSW5mbyB8fCBudWxsXG5cbiAgICB0aGlzLnJlcSA9IG5ldyBQaXBlbGluZVJlcXVlc3QoKS5vbignZXJyb3InLCB1dGlsLm5vcClcblxuICAgIHRoaXMucmV0ID0gbmV3IER1cGxleCh7XG4gICAgICByZWFkYWJsZU9iamVjdE1vZGU6IG9wdHMub2JqZWN0TW9kZSxcbiAgICAgIGF1dG9EZXN0cm95OiB0cnVlLFxuICAgICAgcmVhZDogKCkgPT4ge1xuICAgICAgICBjb25zdCB7IGJvZHkgfSA9IHRoaXNcblxuICAgICAgICBpZiAoYm9keT8ucmVzdW1lKSB7XG4gICAgICAgICAgYm9keS5yZXN1bWUoKVxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgd3JpdGU6IChjaHVuaywgZW5jb2RpbmcsIGNhbGxiYWNrKSA9PiB7XG4gICAgICAgIGNvbnN0IHsgcmVxIH0gPSB0aGlzXG5cbiAgICAgICAgaWYgKHJlcS5wdXNoKGNodW5rLCBlbmNvZGluZykgfHwgcmVxLl9yZWFkYWJsZVN0YXRlLmRlc3Ryb3llZCkge1xuICAgICAgICAgIGNhbGxiYWNrKClcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXFba1Jlc3VtZV0gPSBjYWxsYmFja1xuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgZGVzdHJveTogKGVyciwgY2FsbGJhY2spID0+IHtcbiAgICAgICAgY29uc3QgeyBib2R5LCByZXEsIHJlcywgcmV0LCBhYm9ydCB9ID0gdGhpc1xuXG4gICAgICAgIGlmICghZXJyICYmICFyZXQuX3JlYWRhYmxlU3RhdGUuZW5kRW1pdHRlZCkge1xuICAgICAgICAgIGVyciA9IG5ldyBSZXF1ZXN0QWJvcnRlZEVycm9yKClcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChhYm9ydCAmJiBlcnIpIHtcbiAgICAgICAgICBhYm9ydCgpXG4gICAgICAgIH1cblxuICAgICAgICB1dGlsLmRlc3Ryb3koYm9keSwgZXJyKVxuICAgICAgICB1dGlsLmRlc3Ryb3kocmVxLCBlcnIpXG4gICAgICAgIHV0aWwuZGVzdHJveShyZXMsIGVycilcblxuICAgICAgICByZW1vdmVTaWduYWwodGhpcylcblxuICAgICAgICBjYWxsYmFjayhlcnIpXG4gICAgICB9XG4gICAgfSkub24oJ3ByZWZpbmlzaCcsICgpID0+IHtcbiAgICAgIGNvbnN0IHsgcmVxIH0gPSB0aGlzXG5cbiAgICAgIC8vIE5vZGUgPCAxNSBkb2VzIG5vdCBjYWxsIF9maW5hbCBpbiBzYW1lIHRpY2suXG4gICAgICByZXEucHVzaChudWxsKVxuICAgIH0pXG5cbiAgICB0aGlzLnJlcyA9IG51bGxcblxuICAgIGFkZFNpZ25hbCh0aGlzLCBzaWduYWwpXG4gIH1cblxuICBvbkNvbm5lY3QgKGFib3J0LCBjb250ZXh0KSB7XG4gICAgY29uc3QgeyByZXQsIHJlcyB9ID0gdGhpc1xuXG4gICAgaWYgKHRoaXMucmVhc29uKSB7XG4gICAgICBhYm9ydCh0aGlzLnJlYXNvbilcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGFzc2VydCghcmVzLCAncGlwZWxpbmUgY2Fubm90IGJlIHJldHJpZWQnKVxuICAgIGFzc2VydCghcmV0LmRlc3Ryb3llZClcblxuICAgIHRoaXMuYWJvcnQgPSBhYm9ydFxuICAgIHRoaXMuY29udGV4dCA9IGNvbnRleHRcbiAgfVxuXG4gIG9uSGVhZGVycyAoc3RhdHVzQ29kZSwgcmF3SGVhZGVycywgcmVzdW1lKSB7XG4gICAgY29uc3QgeyBvcGFxdWUsIGhhbmRsZXIsIGNvbnRleHQgfSA9IHRoaXNcblxuICAgIGlmIChzdGF0dXNDb2RlIDwgMjAwKSB7XG4gICAgICBpZiAodGhpcy5vbkluZm8pIHtcbiAgICAgICAgY29uc3QgaGVhZGVycyA9IHRoaXMucmVzcG9uc2VIZWFkZXJzID09PSAncmF3JyA/IHV0aWwucGFyc2VSYXdIZWFkZXJzKHJhd0hlYWRlcnMpIDogdXRpbC5wYXJzZUhlYWRlcnMocmF3SGVhZGVycylcbiAgICAgICAgdGhpcy5vbkluZm8oeyBzdGF0dXNDb2RlLCBoZWFkZXJzIH0pXG4gICAgICB9XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICB0aGlzLnJlcyA9IG5ldyBQaXBlbGluZVJlc3BvbnNlKHJlc3VtZSlcblxuICAgIGxldCBib2R5XG4gICAgdHJ5IHtcbiAgICAgIHRoaXMuaGFuZGxlciA9IG51bGxcbiAgICAgIGNvbnN0IGhlYWRlcnMgPSB0aGlzLnJlc3BvbnNlSGVhZGVycyA9PT0gJ3JhdycgPyB1dGlsLnBhcnNlUmF3SGVhZGVycyhyYXdIZWFkZXJzKSA6IHV0aWwucGFyc2VIZWFkZXJzKHJhd0hlYWRlcnMpXG4gICAgICBib2R5ID0gdGhpcy5ydW5JbkFzeW5jU2NvcGUoaGFuZGxlciwgbnVsbCwge1xuICAgICAgICBzdGF0dXNDb2RlLFxuICAgICAgICBoZWFkZXJzLFxuICAgICAgICBvcGFxdWUsXG4gICAgICAgIGJvZHk6IHRoaXMucmVzLFxuICAgICAgICBjb250ZXh0XG4gICAgICB9KVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgdGhpcy5yZXMub24oJ2Vycm9yJywgdXRpbC5ub3ApXG4gICAgICB0aHJvdyBlcnJcbiAgICB9XG5cbiAgICBpZiAoIWJvZHkgfHwgdHlwZW9mIGJvZHkub24gIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkUmV0dXJuVmFsdWVFcnJvcignZXhwZWN0ZWQgUmVhZGFibGUnKVxuICAgIH1cblxuICAgIGJvZHlcbiAgICAgIC5vbignZGF0YScsIChjaHVuaykgPT4ge1xuICAgICAgICBjb25zdCB7IHJldCwgYm9keSB9ID0gdGhpc1xuXG4gICAgICAgIGlmICghcmV0LnB1c2goY2h1bmspICYmIGJvZHkucGF1c2UpIHtcbiAgICAgICAgICBib2R5LnBhdXNlKClcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICAgIC5vbignZXJyb3InLCAoZXJyKSA9PiB7XG4gICAgICAgIGNvbnN0IHsgcmV0IH0gPSB0aGlzXG5cbiAgICAgICAgdXRpbC5kZXN0cm95KHJldCwgZXJyKVxuICAgICAgfSlcbiAgICAgIC5vbignZW5kJywgKCkgPT4ge1xuICAgICAgICBjb25zdCB7IHJldCB9ID0gdGhpc1xuXG4gICAgICAgIHJldC5wdXNoKG51bGwpXG4gICAgICB9KVxuICAgICAgLm9uKCdjbG9zZScsICgpID0+IHtcbiAgICAgICAgY29uc3QgeyByZXQgfSA9IHRoaXNcblxuICAgICAgICBpZiAoIXJldC5fcmVhZGFibGVTdGF0ZS5lbmRlZCkge1xuICAgICAgICAgIHV0aWwuZGVzdHJveShyZXQsIG5ldyBSZXF1ZXN0QWJvcnRlZEVycm9yKCkpXG4gICAgICAgIH1cbiAgICAgIH0pXG5cbiAgICB0aGlzLmJvZHkgPSBib2R5XG4gIH1cblxuICBvbkRhdGEgKGNodW5rKSB7XG4gICAgY29uc3QgeyByZXMgfSA9IHRoaXNcbiAgICByZXR1cm4gcmVzLnB1c2goY2h1bmspXG4gIH1cblxuICBvbkNvbXBsZXRlICh0cmFpbGVycykge1xuICAgIGNvbnN0IHsgcmVzIH0gPSB0aGlzXG4gICAgcmVzLnB1c2gobnVsbClcbiAgfVxuXG4gIG9uRXJyb3IgKGVycikge1xuICAgIGNvbnN0IHsgcmV0IH0gPSB0aGlzXG4gICAgdGhpcy5oYW5kbGVyID0gbnVsbFxuICAgIHV0aWwuZGVzdHJveShyZXQsIGVycilcbiAgfVxufVxuXG5mdW5jdGlvbiBwaXBlbGluZSAob3B0cywgaGFuZGxlcikge1xuICB0cnkge1xuICAgIGNvbnN0IHBpcGVsaW5lSGFuZGxlciA9IG5ldyBQaXBlbGluZUhhbmRsZXIob3B0cywgaGFuZGxlcilcbiAgICB0aGlzLmRpc3BhdGNoKHsgLi4ub3B0cywgYm9keTogcGlwZWxpbmVIYW5kbGVyLnJlcSB9LCBwaXBlbGluZUhhbmRsZXIpXG4gICAgcmV0dXJuIHBpcGVsaW5lSGFuZGxlci5yZXRcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgcmV0dXJuIG5ldyBQYXNzVGhyb3VnaCgpLmRlc3Ryb3koZXJyKVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gcGlwZWxpbmVcbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgeyBJbnZhbGlkQXJndW1lbnRFcnJvciwgU29ja2V0RXJyb3IgfSA9IHJlcXVpcmUoJy4uL2NvcmUvZXJyb3JzJylcbmNvbnN0IHsgQXN5bmNSZXNvdXJjZSB9ID0gcmVxdWlyZSgnbm9kZTphc3luY19ob29rcycpXG5jb25zdCB1dGlsID0gcmVxdWlyZSgnLi4vY29yZS91dGlsJylcbmNvbnN0IHsgYWRkU2lnbmFsLCByZW1vdmVTaWduYWwgfSA9IHJlcXVpcmUoJy4vYWJvcnQtc2lnbmFsJylcbmNvbnN0IGFzc2VydCA9IHJlcXVpcmUoJ25vZGU6YXNzZXJ0JylcblxuY2xhc3MgVXBncmFkZUhhbmRsZXIgZXh0ZW5kcyBBc3luY1Jlc291cmNlIHtcbiAgY29uc3RydWN0b3IgKG9wdHMsIGNhbGxiYWNrKSB7XG4gICAgaWYgKCFvcHRzIHx8IHR5cGVvZiBvcHRzICE9PSAnb2JqZWN0Jykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIG9wdHMnKVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBjYWxsYmFjaycpXG4gICAgfVxuXG4gICAgY29uc3QgeyBzaWduYWwsIG9wYXF1ZSwgcmVzcG9uc2VIZWFkZXJzIH0gPSBvcHRzXG5cbiAgICBpZiAoc2lnbmFsICYmIHR5cGVvZiBzaWduYWwub24gIT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIHNpZ25hbC5hZGRFdmVudExpc3RlbmVyICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ3NpZ25hbCBtdXN0IGJlIGFuIEV2ZW50RW1pdHRlciBvciBFdmVudFRhcmdldCcpXG4gICAgfVxuXG4gICAgc3VwZXIoJ1VORElDSV9VUEdSQURFJylcblxuICAgIHRoaXMucmVzcG9uc2VIZWFkZXJzID0gcmVzcG9uc2VIZWFkZXJzIHx8IG51bGxcbiAgICB0aGlzLm9wYXF1ZSA9IG9wYXF1ZSB8fCBudWxsXG4gICAgdGhpcy5jYWxsYmFjayA9IGNhbGxiYWNrXG4gICAgdGhpcy5hYm9ydCA9IG51bGxcbiAgICB0aGlzLmNvbnRleHQgPSBudWxsXG5cbiAgICBhZGRTaWduYWwodGhpcywgc2lnbmFsKVxuICB9XG5cbiAgb25Db25uZWN0IChhYm9ydCwgY29udGV4dCkge1xuICAgIGlmICh0aGlzLnJlYXNvbikge1xuICAgICAgYWJvcnQodGhpcy5yZWFzb24pXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBhc3NlcnQodGhpcy5jYWxsYmFjaylcblxuICAgIHRoaXMuYWJvcnQgPSBhYm9ydFxuICAgIHRoaXMuY29udGV4dCA9IG51bGxcbiAgfVxuXG4gIG9uSGVhZGVycyAoKSB7XG4gICAgdGhyb3cgbmV3IFNvY2tldEVycm9yKCdiYWQgdXBncmFkZScsIG51bGwpXG4gIH1cblxuICBvblVwZ3JhZGUgKHN0YXR1c0NvZGUsIHJhd0hlYWRlcnMsIHNvY2tldCkge1xuICAgIGFzc2VydChzdGF0dXNDb2RlID09PSAxMDEpXG5cbiAgICBjb25zdCB7IGNhbGxiYWNrLCBvcGFxdWUsIGNvbnRleHQgfSA9IHRoaXNcblxuICAgIHJlbW92ZVNpZ25hbCh0aGlzKVxuXG4gICAgdGhpcy5jYWxsYmFjayA9IG51bGxcbiAgICBjb25zdCBoZWFkZXJzID0gdGhpcy5yZXNwb25zZUhlYWRlcnMgPT09ICdyYXcnID8gdXRpbC5wYXJzZVJhd0hlYWRlcnMocmF3SGVhZGVycykgOiB1dGlsLnBhcnNlSGVhZGVycyhyYXdIZWFkZXJzKVxuICAgIHRoaXMucnVuSW5Bc3luY1Njb3BlKGNhbGxiYWNrLCBudWxsLCBudWxsLCB7XG4gICAgICBoZWFkZXJzLFxuICAgICAgc29ja2V0LFxuICAgICAgb3BhcXVlLFxuICAgICAgY29udGV4dFxuICAgIH0pXG4gIH1cblxuICBvbkVycm9yIChlcnIpIHtcbiAgICBjb25zdCB7IGNhbGxiYWNrLCBvcGFxdWUgfSA9IHRoaXNcblxuICAgIHJlbW92ZVNpZ25hbCh0aGlzKVxuXG4gICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICB0aGlzLmNhbGxiYWNrID0gbnVsbFxuICAgICAgcXVldWVNaWNyb3Rhc2soKCkgPT4ge1xuICAgICAgICB0aGlzLnJ1bkluQXN5bmNTY29wZShjYWxsYmFjaywgbnVsbCwgZXJyLCB7IG9wYXF1ZSB9KVxuICAgICAgfSlcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gdXBncmFkZSAob3B0cywgY2FsbGJhY2spIHtcbiAgaWYgKGNhbGxiYWNrID09PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgdXBncmFkZS5jYWxsKHRoaXMsIG9wdHMsIChlcnIsIGRhdGEpID0+IHtcbiAgICAgICAgcmV0dXJuIGVyciA/IHJlamVjdChlcnIpIDogcmVzb2x2ZShkYXRhKVxuICAgICAgfSlcbiAgICB9KVxuICB9XG5cbiAgdHJ5IHtcbiAgICBjb25zdCB1cGdyYWRlSGFuZGxlciA9IG5ldyBVcGdyYWRlSGFuZGxlcihvcHRzLCBjYWxsYmFjaylcbiAgICB0aGlzLmRpc3BhdGNoKHtcbiAgICAgIC4uLm9wdHMsXG4gICAgICBtZXRob2Q6IG9wdHMubWV0aG9kIHx8ICdHRVQnLFxuICAgICAgdXBncmFkZTogb3B0cy5wcm90b2NvbCB8fCAnV2Vic29ja2V0J1xuICAgIH0sIHVwZ3JhZGVIYW5kbGVyKVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICBpZiAodHlwZW9mIGNhbGxiYWNrICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyBlcnJcbiAgICB9XG4gICAgY29uc3Qgb3BhcXVlID0gb3B0cz8ub3BhcXVlXG4gICAgcXVldWVNaWNyb3Rhc2soKCkgPT4gY2FsbGJhY2soZXJyLCB7IG9wYXF1ZSB9KSlcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHVwZ3JhZGVcbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgYXNzZXJ0ID0gcmVxdWlyZSgnbm9kZTphc3NlcnQnKVxuY29uc3QgeyBBc3luY1Jlc291cmNlIH0gPSByZXF1aXJlKCdub2RlOmFzeW5jX2hvb2tzJylcbmNvbnN0IHsgSW52YWxpZEFyZ3VtZW50RXJyb3IsIFNvY2tldEVycm9yIH0gPSByZXF1aXJlKCcuLi9jb3JlL2Vycm9ycycpXG5jb25zdCB1dGlsID0gcmVxdWlyZSgnLi4vY29yZS91dGlsJylcbmNvbnN0IHsgYWRkU2lnbmFsLCByZW1vdmVTaWduYWwgfSA9IHJlcXVpcmUoJy4vYWJvcnQtc2lnbmFsJylcblxuY2xhc3MgQ29ubmVjdEhhbmRsZXIgZXh0ZW5kcyBBc3luY1Jlc291cmNlIHtcbiAgY29uc3RydWN0b3IgKG9wdHMsIGNhbGxiYWNrKSB7XG4gICAgaWYgKCFvcHRzIHx8IHR5cGVvZiBvcHRzICE9PSAnb2JqZWN0Jykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIG9wdHMnKVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBjYWxsYmFjaycpXG4gICAgfVxuXG4gICAgY29uc3QgeyBzaWduYWwsIG9wYXF1ZSwgcmVzcG9uc2VIZWFkZXJzIH0gPSBvcHRzXG5cbiAgICBpZiAoc2lnbmFsICYmIHR5cGVvZiBzaWduYWwub24gIT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIHNpZ25hbC5hZGRFdmVudExpc3RlbmVyICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ3NpZ25hbCBtdXN0IGJlIGFuIEV2ZW50RW1pdHRlciBvciBFdmVudFRhcmdldCcpXG4gICAgfVxuXG4gICAgc3VwZXIoJ1VORElDSV9DT05ORUNUJylcblxuICAgIHRoaXMub3BhcXVlID0gb3BhcXVlIHx8IG51bGxcbiAgICB0aGlzLnJlc3BvbnNlSGVhZGVycyA9IHJlc3BvbnNlSGVhZGVycyB8fCBudWxsXG4gICAgdGhpcy5jYWxsYmFjayA9IGNhbGxiYWNrXG4gICAgdGhpcy5hYm9ydCA9IG51bGxcblxuICAgIGFkZFNpZ25hbCh0aGlzLCBzaWduYWwpXG4gIH1cblxuICBvbkNvbm5lY3QgKGFib3J0LCBjb250ZXh0KSB7XG4gICAgaWYgKHRoaXMucmVhc29uKSB7XG4gICAgICBhYm9ydCh0aGlzLnJlYXNvbilcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGFzc2VydCh0aGlzLmNhbGxiYWNrKVxuXG4gICAgdGhpcy5hYm9ydCA9IGFib3J0XG4gICAgdGhpcy5jb250ZXh0ID0gY29udGV4dFxuICB9XG5cbiAgb25IZWFkZXJzICgpIHtcbiAgICB0aHJvdyBuZXcgU29ja2V0RXJyb3IoJ2JhZCBjb25uZWN0JywgbnVsbClcbiAgfVxuXG4gIG9uVXBncmFkZSAoc3RhdHVzQ29kZSwgcmF3SGVhZGVycywgc29ja2V0KSB7XG4gICAgY29uc3QgeyBjYWxsYmFjaywgb3BhcXVlLCBjb250ZXh0IH0gPSB0aGlzXG5cbiAgICByZW1vdmVTaWduYWwodGhpcylcblxuICAgIHRoaXMuY2FsbGJhY2sgPSBudWxsXG5cbiAgICBsZXQgaGVhZGVycyA9IHJhd0hlYWRlcnNcbiAgICAvLyBJbmRpY2F0ZXMgaXMgYW4gSFRUUDJTZXNzaW9uXG4gICAgaWYgKGhlYWRlcnMgIT0gbnVsbCkge1xuICAgICAgaGVhZGVycyA9IHRoaXMucmVzcG9uc2VIZWFkZXJzID09PSAncmF3JyA/IHV0aWwucGFyc2VSYXdIZWFkZXJzKHJhd0hlYWRlcnMpIDogdXRpbC5wYXJzZUhlYWRlcnMocmF3SGVhZGVycylcbiAgICB9XG5cbiAgICB0aGlzLnJ1bkluQXN5bmNTY29wZShjYWxsYmFjaywgbnVsbCwgbnVsbCwge1xuICAgICAgc3RhdHVzQ29kZSxcbiAgICAgIGhlYWRlcnMsXG4gICAgICBzb2NrZXQsXG4gICAgICBvcGFxdWUsXG4gICAgICBjb250ZXh0XG4gICAgfSlcbiAgfVxuXG4gIG9uRXJyb3IgKGVycikge1xuICAgIGNvbnN0IHsgY2FsbGJhY2ssIG9wYXF1ZSB9ID0gdGhpc1xuXG4gICAgcmVtb3ZlU2lnbmFsKHRoaXMpXG5cbiAgICBpZiAoY2FsbGJhY2spIHtcbiAgICAgIHRoaXMuY2FsbGJhY2sgPSBudWxsXG4gICAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiB7XG4gICAgICAgIHRoaXMucnVuSW5Bc3luY1Njb3BlKGNhbGxiYWNrLCBudWxsLCBlcnIsIHsgb3BhcXVlIH0pXG4gICAgICB9KVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBjb25uZWN0IChvcHRzLCBjYWxsYmFjaykge1xuICBpZiAoY2FsbGJhY2sgPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBjb25uZWN0LmNhbGwodGhpcywgb3B0cywgKGVyciwgZGF0YSkgPT4ge1xuICAgICAgICByZXR1cm4gZXJyID8gcmVqZWN0KGVycikgOiByZXNvbHZlKGRhdGEpXG4gICAgICB9KVxuICAgIH0pXG4gIH1cblxuICB0cnkge1xuICAgIGNvbnN0IGNvbm5lY3RIYW5kbGVyID0gbmV3IENvbm5lY3RIYW5kbGVyKG9wdHMsIGNhbGxiYWNrKVxuICAgIHRoaXMuZGlzcGF0Y2goeyAuLi5vcHRzLCBtZXRob2Q6ICdDT05ORUNUJyB9LCBjb25uZWN0SGFuZGxlcilcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgaWYgKHR5cGVvZiBjYWxsYmFjayAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgZXJyXG4gICAgfVxuICAgIGNvbnN0IG9wYXF1ZSA9IG9wdHM/Lm9wYXF1ZVxuICAgIHF1ZXVlTWljcm90YXNrKCgpID0+IGNhbGxiYWNrKGVyciwgeyBvcGFxdWUgfSkpXG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBjb25uZWN0XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbm1vZHVsZS5leHBvcnRzLnJlcXVlc3QgPSByZXF1aXJlKCcuL2FwaS1yZXF1ZXN0Jylcbm1vZHVsZS5leHBvcnRzLnN0cmVhbSA9IHJlcXVpcmUoJy4vYXBpLXN0cmVhbScpXG5tb2R1bGUuZXhwb3J0cy5waXBlbGluZSA9IHJlcXVpcmUoJy4vYXBpLXBpcGVsaW5lJylcbm1vZHVsZS5leHBvcnRzLnVwZ3JhZGUgPSByZXF1aXJlKCcuL2FwaS11cGdyYWRlJylcbm1vZHVsZS5leHBvcnRzLmNvbm5lY3QgPSByZXF1aXJlKCcuL2FwaS1jb25uZWN0JylcbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgeyBVbmRpY2lFcnJvciB9ID0gcmVxdWlyZSgnLi4vY29yZS9lcnJvcnMnKVxuXG5jbGFzcyBNb2NrTm90TWF0Y2hlZEVycm9yIGV4dGVuZHMgVW5kaWNpRXJyb3Ige1xuICBjb25zdHJ1Y3RvciAobWVzc2FnZSkge1xuICAgIHN1cGVyKG1lc3NhZ2UpXG4gICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgTW9ja05vdE1hdGNoZWRFcnJvcilcbiAgICB0aGlzLm5hbWUgPSAnTW9ja05vdE1hdGNoZWRFcnJvcidcbiAgICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlIHx8ICdUaGUgcmVxdWVzdCBkb2VzIG5vdCBtYXRjaCBhbnkgcmVnaXN0ZXJlZCBtb2NrIGRpc3BhdGNoZXMnXG4gICAgdGhpcy5jb2RlID0gJ1VORF9NT0NLX0VSUl9NT0NLX05PVF9NQVRDSEVEJ1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBNb2NrTm90TWF0Y2hlZEVycm9yXG59XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBrQWdlbnQ6IFN5bWJvbCgnYWdlbnQnKSxcbiAga09wdGlvbnM6IFN5bWJvbCgnb3B0aW9ucycpLFxuICBrRmFjdG9yeTogU3ltYm9sKCdmYWN0b3J5JyksXG4gIGtEaXNwYXRjaGVzOiBTeW1ib2woJ2Rpc3BhdGNoZXMnKSxcbiAga0Rpc3BhdGNoS2V5OiBTeW1ib2woJ2Rpc3BhdGNoIGtleScpLFxuICBrRGVmYXVsdEhlYWRlcnM6IFN5bWJvbCgnZGVmYXVsdCBoZWFkZXJzJyksXG4gIGtEZWZhdWx0VHJhaWxlcnM6IFN5bWJvbCgnZGVmYXVsdCB0cmFpbGVycycpLFxuICBrQ29udGVudExlbmd0aDogU3ltYm9sKCdjb250ZW50IGxlbmd0aCcpLFxuICBrTW9ja0FnZW50OiBTeW1ib2woJ21vY2sgYWdlbnQnKSxcbiAga01vY2tBZ2VudFNldDogU3ltYm9sKCdtb2NrIGFnZW50IHNldCcpLFxuICBrTW9ja0FnZW50R2V0OiBTeW1ib2woJ21vY2sgYWdlbnQgZ2V0JyksXG4gIGtNb2NrRGlzcGF0Y2g6IFN5bWJvbCgnbW9jayBkaXNwYXRjaCcpLFxuICBrQ2xvc2U6IFN5bWJvbCgnY2xvc2UnKSxcbiAga09yaWdpbmFsQ2xvc2U6IFN5bWJvbCgnb3JpZ2luYWwgYWdlbnQgY2xvc2UnKSxcbiAga09yaWdpbjogU3ltYm9sKCdvcmlnaW4nKSxcbiAga0lzTW9ja0FjdGl2ZTogU3ltYm9sKCdpcyBtb2NrIGFjdGl2ZScpLFxuICBrTmV0Q29ubmVjdDogU3ltYm9sKCduZXQgY29ubmVjdCcpLFxuICBrR2V0TmV0Q29ubmVjdDogU3ltYm9sKCdnZXQgbmV0IGNvbm5lY3QnKSxcbiAga0Nvbm5lY3RlZDogU3ltYm9sKCdjb25uZWN0ZWQnKVxufVxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7IE1vY2tOb3RNYXRjaGVkRXJyb3IgfSA9IHJlcXVpcmUoJy4vbW9jay1lcnJvcnMnKVxuY29uc3Qge1xuICBrRGlzcGF0Y2hlcyxcbiAga01vY2tBZ2VudCxcbiAga09yaWdpbmFsRGlzcGF0Y2gsXG4gIGtPcmlnaW4sXG4gIGtHZXROZXRDb25uZWN0XG59ID0gcmVxdWlyZSgnLi9tb2NrLXN5bWJvbHMnKVxuY29uc3QgeyBidWlsZFVSTCB9ID0gcmVxdWlyZSgnLi4vY29yZS91dGlsJylcbmNvbnN0IHsgU1RBVFVTX0NPREVTIH0gPSByZXF1aXJlKCdub2RlOmh0dHAnKVxuY29uc3Qge1xuICB0eXBlczoge1xuICAgIGlzUHJvbWlzZVxuICB9XG59ID0gcmVxdWlyZSgnbm9kZTp1dGlsJylcblxuZnVuY3Rpb24gbWF0Y2hWYWx1ZSAobWF0Y2gsIHZhbHVlKSB7XG4gIGlmICh0eXBlb2YgbWF0Y2ggPT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIG1hdGNoID09PSB2YWx1ZVxuICB9XG4gIGlmIChtYXRjaCBpbnN0YW5jZW9mIFJlZ0V4cCkge1xuICAgIHJldHVybiBtYXRjaC50ZXN0KHZhbHVlKVxuICB9XG4gIGlmICh0eXBlb2YgbWF0Y2ggPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gbWF0Y2godmFsdWUpID09PSB0cnVlXG4gIH1cbiAgcmV0dXJuIGZhbHNlXG59XG5cbmZ1bmN0aW9uIGxvd2VyQ2FzZUVudHJpZXMgKGhlYWRlcnMpIHtcbiAgcmV0dXJuIE9iamVjdC5mcm9tRW50cmllcyhcbiAgICBPYmplY3QuZW50cmllcyhoZWFkZXJzKS5tYXAoKFtoZWFkZXJOYW1lLCBoZWFkZXJWYWx1ZV0pID0+IHtcbiAgICAgIHJldHVybiBbaGVhZGVyTmFtZS50b0xvY2FsZUxvd2VyQ2FzZSgpLCBoZWFkZXJWYWx1ZV1cbiAgICB9KVxuICApXG59XG5cbi8qKlxuICogQHBhcmFtIHtpbXBvcnQoJy4uLy4uL2luZGV4JykuSGVhZGVyc3xzdHJpbmdbXXxSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+fSBoZWFkZXJzXG4gKiBAcGFyYW0ge3N0cmluZ30ga2V5XG4gKi9cbmZ1bmN0aW9uIGdldEhlYWRlckJ5TmFtZSAoaGVhZGVycywga2V5KSB7XG4gIGlmIChBcnJheS5pc0FycmF5KGhlYWRlcnMpKSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBoZWFkZXJzLmxlbmd0aDsgaSArPSAyKSB7XG4gICAgICBpZiAoaGVhZGVyc1tpXS50b0xvY2FsZUxvd2VyQ2FzZSgpID09PSBrZXkudG9Mb2NhbGVMb3dlckNhc2UoKSkge1xuICAgICAgICByZXR1cm4gaGVhZGVyc1tpICsgMV1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdW5kZWZpbmVkXG4gIH0gZWxzZSBpZiAodHlwZW9mIGhlYWRlcnMuZ2V0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIGhlYWRlcnMuZ2V0KGtleSlcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gbG93ZXJDYXNlRW50cmllcyhoZWFkZXJzKVtrZXkudG9Mb2NhbGVMb3dlckNhc2UoKV1cbiAgfVxufVxuXG4vKiogQHBhcmFtIHtzdHJpbmdbXX0gaGVhZGVycyAqL1xuZnVuY3Rpb24gYnVpbGRIZWFkZXJzRnJvbUFycmF5IChoZWFkZXJzKSB7IC8vIGZldGNoIEhlYWRlcnNMaXN0XG4gIGNvbnN0IGNsb25lID0gaGVhZGVycy5zbGljZSgpXG4gIGNvbnN0IGVudHJpZXMgPSBbXVxuICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgY2xvbmUubGVuZ3RoOyBpbmRleCArPSAyKSB7XG4gICAgZW50cmllcy5wdXNoKFtjbG9uZVtpbmRleF0sIGNsb25lW2luZGV4ICsgMV1dKVxuICB9XG4gIHJldHVybiBPYmplY3QuZnJvbUVudHJpZXMoZW50cmllcylcbn1cblxuZnVuY3Rpb24gbWF0Y2hIZWFkZXJzIChtb2NrRGlzcGF0Y2gsIGhlYWRlcnMpIHtcbiAgaWYgKHR5cGVvZiBtb2NrRGlzcGF0Y2guaGVhZGVycyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGlmIChBcnJheS5pc0FycmF5KGhlYWRlcnMpKSB7IC8vIGZldGNoIEhlYWRlcnNMaXN0XG4gICAgICBoZWFkZXJzID0gYnVpbGRIZWFkZXJzRnJvbUFycmF5KGhlYWRlcnMpXG4gICAgfVxuICAgIHJldHVybiBtb2NrRGlzcGF0Y2guaGVhZGVycyhoZWFkZXJzID8gbG93ZXJDYXNlRW50cmllcyhoZWFkZXJzKSA6IHt9KVxuICB9XG4gIGlmICh0eXBlb2YgbW9ja0Rpc3BhdGNoLmhlYWRlcnMgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgcmV0dXJuIHRydWVcbiAgfVxuICBpZiAodHlwZW9mIGhlYWRlcnMgIT09ICdvYmplY3QnIHx8IHR5cGVvZiBtb2NrRGlzcGF0Y2guaGVhZGVycyAhPT0gJ29iamVjdCcpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIGZvciAoY29uc3QgW21hdGNoSGVhZGVyTmFtZSwgbWF0Y2hIZWFkZXJWYWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMobW9ja0Rpc3BhdGNoLmhlYWRlcnMpKSB7XG4gICAgY29uc3QgaGVhZGVyVmFsdWUgPSBnZXRIZWFkZXJCeU5hbWUoaGVhZGVycywgbWF0Y2hIZWFkZXJOYW1lKVxuXG4gICAgaWYgKCFtYXRjaFZhbHVlKG1hdGNoSGVhZGVyVmFsdWUsIGhlYWRlclZhbHVlKSkge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuICB9XG4gIHJldHVybiB0cnVlXG59XG5cbmZ1bmN0aW9uIHNhZmVVcmwgKHBhdGgpIHtcbiAgaWYgKHR5cGVvZiBwYXRoICE9PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBwYXRoXG4gIH1cblxuICBjb25zdCBwYXRoU2VnbWVudHMgPSBwYXRoLnNwbGl0KCc/JylcblxuICBpZiAocGF0aFNlZ21lbnRzLmxlbmd0aCAhPT0gMikge1xuICAgIHJldHVybiBwYXRoXG4gIH1cblxuICBjb25zdCBxcCA9IG5ldyBVUkxTZWFyY2hQYXJhbXMocGF0aFNlZ21lbnRzLnBvcCgpKVxuICBxcC5zb3J0KClcbiAgcmV0dXJuIFsuLi5wYXRoU2VnbWVudHMsIHFwLnRvU3RyaW5nKCldLmpvaW4oJz8nKVxufVxuXG5mdW5jdGlvbiBtYXRjaEtleSAobW9ja0Rpc3BhdGNoLCB7IHBhdGgsIG1ldGhvZCwgYm9keSwgaGVhZGVycyB9KSB7XG4gIGNvbnN0IHBhdGhNYXRjaCA9IG1hdGNoVmFsdWUobW9ja0Rpc3BhdGNoLnBhdGgsIHBhdGgpXG4gIGNvbnN0IG1ldGhvZE1hdGNoID0gbWF0Y2hWYWx1ZShtb2NrRGlzcGF0Y2gubWV0aG9kLCBtZXRob2QpXG4gIGNvbnN0IGJvZHlNYXRjaCA9IHR5cGVvZiBtb2NrRGlzcGF0Y2guYm9keSAhPT0gJ3VuZGVmaW5lZCcgPyBtYXRjaFZhbHVlKG1vY2tEaXNwYXRjaC5ib2R5LCBib2R5KSA6IHRydWVcbiAgY29uc3QgaGVhZGVyc01hdGNoID0gbWF0Y2hIZWFkZXJzKG1vY2tEaXNwYXRjaCwgaGVhZGVycylcbiAgcmV0dXJuIHBhdGhNYXRjaCAmJiBtZXRob2RNYXRjaCAmJiBib2R5TWF0Y2ggJiYgaGVhZGVyc01hdGNoXG59XG5cbmZ1bmN0aW9uIGdldFJlc3BvbnNlRGF0YSAoZGF0YSkge1xuICBpZiAoQnVmZmVyLmlzQnVmZmVyKGRhdGEpKSB7XG4gICAgcmV0dXJuIGRhdGFcbiAgfSBlbHNlIGlmIChkYXRhIGluc3RhbmNlb2YgVWludDhBcnJheSkge1xuICAgIHJldHVybiBkYXRhXG4gIH0gZWxzZSBpZiAoZGF0YSBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKSB7XG4gICAgcmV0dXJuIGRhdGFcbiAgfSBlbHNlIGlmICh0eXBlb2YgZGF0YSA9PT0gJ29iamVjdCcpIHtcbiAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoZGF0YSlcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gZGF0YS50b1N0cmluZygpXG4gIH1cbn1cblxuZnVuY3Rpb24gZ2V0TW9ja0Rpc3BhdGNoIChtb2NrRGlzcGF0Y2hlcywga2V5KSB7XG4gIGNvbnN0IGJhc2VQYXRoID0ga2V5LnF1ZXJ5ID8gYnVpbGRVUkwoa2V5LnBhdGgsIGtleS5xdWVyeSkgOiBrZXkucGF0aFxuICBjb25zdCByZXNvbHZlZFBhdGggPSB0eXBlb2YgYmFzZVBhdGggPT09ICdzdHJpbmcnID8gc2FmZVVybChiYXNlUGF0aCkgOiBiYXNlUGF0aFxuXG4gIC8vIE1hdGNoIHBhdGhcbiAgbGV0IG1hdGNoZWRNb2NrRGlzcGF0Y2hlcyA9IG1vY2tEaXNwYXRjaGVzLmZpbHRlcigoeyBjb25zdW1lZCB9KSA9PiAhY29uc3VtZWQpLmZpbHRlcigoeyBwYXRoIH0pID0+IG1hdGNoVmFsdWUoc2FmZVVybChwYXRoKSwgcmVzb2x2ZWRQYXRoKSlcbiAgaWYgKG1hdGNoZWRNb2NrRGlzcGF0Y2hlcy5sZW5ndGggPT09IDApIHtcbiAgICB0aHJvdyBuZXcgTW9ja05vdE1hdGNoZWRFcnJvcihgTW9jayBkaXNwYXRjaCBub3QgbWF0Y2hlZCBmb3IgcGF0aCAnJHtyZXNvbHZlZFBhdGh9J2ApXG4gIH1cblxuICAvLyBNYXRjaCBtZXRob2RcbiAgbWF0Y2hlZE1vY2tEaXNwYXRjaGVzID0gbWF0Y2hlZE1vY2tEaXNwYXRjaGVzLmZpbHRlcigoeyBtZXRob2QgfSkgPT4gbWF0Y2hWYWx1ZShtZXRob2QsIGtleS5tZXRob2QpKVxuICBpZiAobWF0Y2hlZE1vY2tEaXNwYXRjaGVzLmxlbmd0aCA9PT0gMCkge1xuICAgIHRocm93IG5ldyBNb2NrTm90TWF0Y2hlZEVycm9yKGBNb2NrIGRpc3BhdGNoIG5vdCBtYXRjaGVkIGZvciBtZXRob2QgJyR7a2V5Lm1ldGhvZH0nIG9uIHBhdGggJyR7cmVzb2x2ZWRQYXRofSdgKVxuICB9XG5cbiAgLy8gTWF0Y2ggYm9keVxuICBtYXRjaGVkTW9ja0Rpc3BhdGNoZXMgPSBtYXRjaGVkTW9ja0Rpc3BhdGNoZXMuZmlsdGVyKCh7IGJvZHkgfSkgPT4gdHlwZW9mIGJvZHkgIT09ICd1bmRlZmluZWQnID8gbWF0Y2hWYWx1ZShib2R5LCBrZXkuYm9keSkgOiB0cnVlKVxuICBpZiAobWF0Y2hlZE1vY2tEaXNwYXRjaGVzLmxlbmd0aCA9PT0gMCkge1xuICAgIHRocm93IG5ldyBNb2NrTm90TWF0Y2hlZEVycm9yKGBNb2NrIGRpc3BhdGNoIG5vdCBtYXRjaGVkIGZvciBib2R5ICcke2tleS5ib2R5fScgb24gcGF0aCAnJHtyZXNvbHZlZFBhdGh9J2ApXG4gIH1cblxuICAvLyBNYXRjaCBoZWFkZXJzXG4gIG1hdGNoZWRNb2NrRGlzcGF0Y2hlcyA9IG1hdGNoZWRNb2NrRGlzcGF0Y2hlcy5maWx0ZXIoKG1vY2tEaXNwYXRjaCkgPT4gbWF0Y2hIZWFkZXJzKG1vY2tEaXNwYXRjaCwga2V5LmhlYWRlcnMpKVxuICBpZiAobWF0Y2hlZE1vY2tEaXNwYXRjaGVzLmxlbmd0aCA9PT0gMCkge1xuICAgIGNvbnN0IGhlYWRlcnMgPSB0eXBlb2Yga2V5LmhlYWRlcnMgPT09ICdvYmplY3QnID8gSlNPTi5zdHJpbmdpZnkoa2V5LmhlYWRlcnMpIDoga2V5LmhlYWRlcnNcbiAgICB0aHJvdyBuZXcgTW9ja05vdE1hdGNoZWRFcnJvcihgTW9jayBkaXNwYXRjaCBub3QgbWF0Y2hlZCBmb3IgaGVhZGVycyAnJHtoZWFkZXJzfScgb24gcGF0aCAnJHtyZXNvbHZlZFBhdGh9J2ApXG4gIH1cblxuICByZXR1cm4gbWF0Y2hlZE1vY2tEaXNwYXRjaGVzWzBdXG59XG5cbmZ1bmN0aW9uIGFkZE1vY2tEaXNwYXRjaCAobW9ja0Rpc3BhdGNoZXMsIGtleSwgZGF0YSkge1xuICBjb25zdCBiYXNlRGF0YSA9IHsgdGltZXNJbnZva2VkOiAwLCB0aW1lczogMSwgcGVyc2lzdDogZmFsc2UsIGNvbnN1bWVkOiBmYWxzZSB9XG4gIGNvbnN0IHJlcGx5RGF0YSA9IHR5cGVvZiBkYXRhID09PSAnZnVuY3Rpb24nID8geyBjYWxsYmFjazogZGF0YSB9IDogeyAuLi5kYXRhIH1cbiAgY29uc3QgbmV3TW9ja0Rpc3BhdGNoID0geyAuLi5iYXNlRGF0YSwgLi4ua2V5LCBwZW5kaW5nOiB0cnVlLCBkYXRhOiB7IGVycm9yOiBudWxsLCAuLi5yZXBseURhdGEgfSB9XG4gIG1vY2tEaXNwYXRjaGVzLnB1c2gobmV3TW9ja0Rpc3BhdGNoKVxuICByZXR1cm4gbmV3TW9ja0Rpc3BhdGNoXG59XG5cbmZ1bmN0aW9uIGRlbGV0ZU1vY2tEaXNwYXRjaCAobW9ja0Rpc3BhdGNoZXMsIGtleSkge1xuICBjb25zdCBpbmRleCA9IG1vY2tEaXNwYXRjaGVzLmZpbmRJbmRleChkaXNwYXRjaCA9PiB7XG4gICAgaWYgKCFkaXNwYXRjaC5jb25zdW1lZCkge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuICAgIHJldHVybiBtYXRjaEtleShkaXNwYXRjaCwga2V5KVxuICB9KVxuICBpZiAoaW5kZXggIT09IC0xKSB7XG4gICAgbW9ja0Rpc3BhdGNoZXMuc3BsaWNlKGluZGV4LCAxKVxuICB9XG59XG5cbmZ1bmN0aW9uIGJ1aWxkS2V5IChvcHRzKSB7XG4gIGNvbnN0IHsgcGF0aCwgbWV0aG9kLCBib2R5LCBoZWFkZXJzLCBxdWVyeSB9ID0gb3B0c1xuICByZXR1cm4ge1xuICAgIHBhdGgsXG4gICAgbWV0aG9kLFxuICAgIGJvZHksXG4gICAgaGVhZGVycyxcbiAgICBxdWVyeVxuICB9XG59XG5cbmZ1bmN0aW9uIGdlbmVyYXRlS2V5VmFsdWVzIChkYXRhKSB7XG4gIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhkYXRhKVxuICBjb25zdCByZXN1bHQgPSBbXVxuICBmb3IgKGxldCBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyArK2kpIHtcbiAgICBjb25zdCBrZXkgPSBrZXlzW2ldXG4gICAgY29uc3QgdmFsdWUgPSBkYXRhW2tleV1cbiAgICBjb25zdCBuYW1lID0gQnVmZmVyLmZyb20oYCR7a2V5fWApXG4gICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHZhbHVlLmxlbmd0aDsgKytqKSB7XG4gICAgICAgIHJlc3VsdC5wdXNoKG5hbWUsIEJ1ZmZlci5mcm9tKGAke3ZhbHVlW2pdfWApKVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICByZXN1bHQucHVzaChuYW1lLCBCdWZmZXIuZnJvbShgJHt2YWx1ZX1gKSlcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdFxufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRUUC9TdGF0dXNcbiAqIEBwYXJhbSB7bnVtYmVyfSBzdGF0dXNDb2RlXG4gKi9cbmZ1bmN0aW9uIGdldFN0YXR1c1RleHQgKHN0YXR1c0NvZGUpIHtcbiAgcmV0dXJuIFNUQVRVU19DT0RFU1tzdGF0dXNDb2RlXSB8fCAndW5rbm93bidcbn1cblxuYXN5bmMgZnVuY3Rpb24gZ2V0UmVzcG9uc2UgKGJvZHkpIHtcbiAgY29uc3QgYnVmZmVycyA9IFtdXG4gIGZvciBhd2FpdCAoY29uc3QgZGF0YSBvZiBib2R5KSB7XG4gICAgYnVmZmVycy5wdXNoKGRhdGEpXG4gIH1cbiAgcmV0dXJuIEJ1ZmZlci5jb25jYXQoYnVmZmVycykudG9TdHJpbmcoJ3V0ZjgnKVxufVxuXG4vKipcbiAqIE1vY2sgZGlzcGF0Y2ggZnVuY3Rpb24gdXNlZCB0byBzaW11bGF0ZSB1bmRpY2kgZGlzcGF0Y2hlc1xuICovXG5mdW5jdGlvbiBtb2NrRGlzcGF0Y2ggKG9wdHMsIGhhbmRsZXIpIHtcbiAgLy8gR2V0IG1vY2sgZGlzcGF0Y2ggZnJvbSBidWlsdCBrZXlcbiAgY29uc3Qga2V5ID0gYnVpbGRLZXkob3B0cylcbiAgY29uc3QgbW9ja0Rpc3BhdGNoID0gZ2V0TW9ja0Rpc3BhdGNoKHRoaXNba0Rpc3BhdGNoZXNdLCBrZXkpXG5cbiAgbW9ja0Rpc3BhdGNoLnRpbWVzSW52b2tlZCsrXG5cbiAgLy8gSGVyZSdzIHdoZXJlIHdlIHJlc29sdmUgYSBjYWxsYmFjayBpZiBhIGNhbGxiYWNrIGlzIHByZXNlbnQgZm9yIHRoZSBkaXNwYXRjaCBkYXRhLlxuICBpZiAobW9ja0Rpc3BhdGNoLmRhdGEuY2FsbGJhY2spIHtcbiAgICBtb2NrRGlzcGF0Y2guZGF0YSA9IHsgLi4ubW9ja0Rpc3BhdGNoLmRhdGEsIC4uLm1vY2tEaXNwYXRjaC5kYXRhLmNhbGxiYWNrKG9wdHMpIH1cbiAgfVxuXG4gIC8vIFBhcnNlIG1vY2tEaXNwYXRjaCBkYXRhXG4gIGNvbnN0IHsgZGF0YTogeyBzdGF0dXNDb2RlLCBkYXRhLCBoZWFkZXJzLCB0cmFpbGVycywgZXJyb3IgfSwgZGVsYXksIHBlcnNpc3QgfSA9IG1vY2tEaXNwYXRjaFxuICBjb25zdCB7IHRpbWVzSW52b2tlZCwgdGltZXMgfSA9IG1vY2tEaXNwYXRjaFxuXG4gIC8vIElmIGl0J3MgdXNlZCB1cCBhbmQgbm90IHBlcnNpc3RlbnQsIG1hcmsgYXMgY29uc3VtZWRcbiAgbW9ja0Rpc3BhdGNoLmNvbnN1bWVkID0gIXBlcnNpc3QgJiYgdGltZXNJbnZva2VkID49IHRpbWVzXG4gIG1vY2tEaXNwYXRjaC5wZW5kaW5nID0gdGltZXNJbnZva2VkIDwgdGltZXNcblxuICAvLyBJZiBzcGVjaWZpZWQsIHRyaWdnZXIgZGlzcGF0Y2ggZXJyb3JcbiAgaWYgKGVycm9yICE9PSBudWxsKSB7XG4gICAgZGVsZXRlTW9ja0Rpc3BhdGNoKHRoaXNba0Rpc3BhdGNoZXNdLCBrZXkpXG4gICAgaGFuZGxlci5vbkVycm9yKGVycm9yKVxuICAgIHJldHVybiB0cnVlXG4gIH1cblxuICAvLyBIYW5kbGUgdGhlIHJlcXVlc3Qgd2l0aCBhIGRlbGF5IGlmIG5lY2Vzc2FyeVxuICBpZiAodHlwZW9mIGRlbGF5ID09PSAnbnVtYmVyJyAmJiBkZWxheSA+IDApIHtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGhhbmRsZVJlcGx5KHRoaXNba0Rpc3BhdGNoZXNdKVxuICAgIH0sIGRlbGF5KVxuICB9IGVsc2Uge1xuICAgIGhhbmRsZVJlcGx5KHRoaXNba0Rpc3BhdGNoZXNdKVxuICB9XG5cbiAgZnVuY3Rpb24gaGFuZGxlUmVwbHkgKG1vY2tEaXNwYXRjaGVzLCBfZGF0YSA9IGRhdGEpIHtcbiAgICAvLyBmZXRjaCdzIEhlYWRlcnNMaXN0IGlzIGEgMUQgc3RyaW5nIGFycmF5XG4gICAgY29uc3Qgb3B0c0hlYWRlcnMgPSBBcnJheS5pc0FycmF5KG9wdHMuaGVhZGVycylcbiAgICAgID8gYnVpbGRIZWFkZXJzRnJvbUFycmF5KG9wdHMuaGVhZGVycylcbiAgICAgIDogb3B0cy5oZWFkZXJzXG4gICAgY29uc3QgYm9keSA9IHR5cGVvZiBfZGF0YSA9PT0gJ2Z1bmN0aW9uJ1xuICAgICAgPyBfZGF0YSh7IC4uLm9wdHMsIGhlYWRlcnM6IG9wdHNIZWFkZXJzIH0pXG4gICAgICA6IF9kYXRhXG5cbiAgICAvLyB1dGlsLnR5cGVzLmlzUHJvbWlzZSBpcyBsaWtlbHkgbmVlZGVkIGZvciBqZXN0LlxuICAgIGlmIChpc1Byb21pc2UoYm9keSkpIHtcbiAgICAgIC8vIElmIGhhbmRsZVJlcGx5IGlzIGFzeW5jaHJvbm91cywgdGhyb3dpbmcgYW4gZXJyb3JcbiAgICAgIC8vIGluIHRoZSBjYWxsYmFjayB3aWxsIHJlamVjdCB0aGUgcHJvbWlzZSwgcmF0aGVyIHRoYW5cbiAgICAgIC8vIHN5bmNocm9ub3VzbHkgdGhyb3cgdGhlIGVycm9yLCB3aGljaCBicmVha3Mgc29tZSB0ZXN0cy5cbiAgICAgIC8vIFJhdGhlciwgd2Ugd2FpdCBmb3IgdGhlIGNhbGxiYWNrIHRvIHJlc29sdmUgaWYgaXQgaXMgYVxuICAgICAgLy8gcHJvbWlzZSwgYW5kIHRoZW4gcmUtcnVuIGhhbmRsZVJlcGx5IHdpdGggdGhlIG5ldyBib2R5LlxuICAgICAgYm9keS50aGVuKChuZXdEYXRhKSA9PiBoYW5kbGVSZXBseShtb2NrRGlzcGF0Y2hlcywgbmV3RGF0YSkpXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjb25zdCByZXNwb25zZURhdGEgPSBnZXRSZXNwb25zZURhdGEoYm9keSlcbiAgICBjb25zdCByZXNwb25zZUhlYWRlcnMgPSBnZW5lcmF0ZUtleVZhbHVlcyhoZWFkZXJzKVxuICAgIGNvbnN0IHJlc3BvbnNlVHJhaWxlcnMgPSBnZW5lcmF0ZUtleVZhbHVlcyh0cmFpbGVycylcblxuICAgIGhhbmRsZXIub25Db25uZWN0Py4oZXJyID0+IGhhbmRsZXIub25FcnJvcihlcnIpLCBudWxsKVxuICAgIGhhbmRsZXIub25IZWFkZXJzPy4oc3RhdHVzQ29kZSwgcmVzcG9uc2VIZWFkZXJzLCByZXN1bWUsIGdldFN0YXR1c1RleHQoc3RhdHVzQ29kZSkpXG4gICAgaGFuZGxlci5vbkRhdGE/LihCdWZmZXIuZnJvbShyZXNwb25zZURhdGEpKVxuICAgIGhhbmRsZXIub25Db21wbGV0ZT8uKHJlc3BvbnNlVHJhaWxlcnMpXG4gICAgZGVsZXRlTW9ja0Rpc3BhdGNoKG1vY2tEaXNwYXRjaGVzLCBrZXkpXG4gIH1cblxuICBmdW5jdGlvbiByZXN1bWUgKCkge31cblxuICByZXR1cm4gdHJ1ZVxufVxuXG5mdW5jdGlvbiBidWlsZE1vY2tEaXNwYXRjaCAoKSB7XG4gIGNvbnN0IGFnZW50ID0gdGhpc1trTW9ja0FnZW50XVxuICBjb25zdCBvcmlnaW4gPSB0aGlzW2tPcmlnaW5dXG4gIGNvbnN0IG9yaWdpbmFsRGlzcGF0Y2ggPSB0aGlzW2tPcmlnaW5hbERpc3BhdGNoXVxuXG4gIHJldHVybiBmdW5jdGlvbiBkaXNwYXRjaCAob3B0cywgaGFuZGxlcikge1xuICAgIGlmIChhZ2VudC5pc01vY2tBY3RpdmUpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIG1vY2tEaXNwYXRjaC5jYWxsKHRoaXMsIG9wdHMsIGhhbmRsZXIpXG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBNb2NrTm90TWF0Y2hlZEVycm9yKSB7XG4gICAgICAgICAgY29uc3QgbmV0Q29ubmVjdCA9IGFnZW50W2tHZXROZXRDb25uZWN0XSgpXG4gICAgICAgICAgaWYgKG5ldENvbm5lY3QgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgTW9ja05vdE1hdGNoZWRFcnJvcihgJHtlcnJvci5tZXNzYWdlfTogc3Vic2VxdWVudCByZXF1ZXN0IHRvIG9yaWdpbiAke29yaWdpbn0gd2FzIG5vdCBhbGxvd2VkIChuZXQuY29ubmVjdCBkaXNhYmxlZClgKVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoY2hlY2tOZXRDb25uZWN0KG5ldENvbm5lY3QsIG9yaWdpbikpIHtcbiAgICAgICAgICAgIG9yaWdpbmFsRGlzcGF0Y2guY2FsbCh0aGlzLCBvcHRzLCBoYW5kbGVyKVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgTW9ja05vdE1hdGNoZWRFcnJvcihgJHtlcnJvci5tZXNzYWdlfTogc3Vic2VxdWVudCByZXF1ZXN0IHRvIG9yaWdpbiAke29yaWdpbn0gd2FzIG5vdCBhbGxvd2VkIChuZXQuY29ubmVjdCBpcyBub3QgZW5hYmxlZCBmb3IgdGhpcyBvcmlnaW4pYClcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhyb3cgZXJyb3JcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBvcmlnaW5hbERpc3BhdGNoLmNhbGwodGhpcywgb3B0cywgaGFuZGxlcilcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gY2hlY2tOZXRDb25uZWN0IChuZXRDb25uZWN0LCBvcmlnaW4pIHtcbiAgY29uc3QgdXJsID0gbmV3IFVSTChvcmlnaW4pXG4gIGlmIChuZXRDb25uZWN0ID09PSB0cnVlKSB7XG4gICAgcmV0dXJuIHRydWVcbiAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KG5ldENvbm5lY3QpICYmIG5ldENvbm5lY3Quc29tZSgobWF0Y2hlcikgPT4gbWF0Y2hWYWx1ZShtYXRjaGVyLCB1cmwuaG9zdCkpKSB7XG4gICAgcmV0dXJuIHRydWVcbiAgfVxuICByZXR1cm4gZmFsc2Vcbn1cblxuZnVuY3Rpb24gYnVpbGRNb2NrT3B0aW9ucyAob3B0cykge1xuICBpZiAob3B0cykge1xuICAgIGNvbnN0IHsgYWdlbnQsIC4uLm1vY2tPcHRpb25zIH0gPSBvcHRzXG4gICAgcmV0dXJuIG1vY2tPcHRpb25zXG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGdldFJlc3BvbnNlRGF0YSxcbiAgZ2V0TW9ja0Rpc3BhdGNoLFxuICBhZGRNb2NrRGlzcGF0Y2gsXG4gIGRlbGV0ZU1vY2tEaXNwYXRjaCxcbiAgYnVpbGRLZXksXG4gIGdlbmVyYXRlS2V5VmFsdWVzLFxuICBtYXRjaFZhbHVlLFxuICBnZXRSZXNwb25zZSxcbiAgZ2V0U3RhdHVzVGV4dCxcbiAgbW9ja0Rpc3BhdGNoLFxuICBidWlsZE1vY2tEaXNwYXRjaCxcbiAgY2hlY2tOZXRDb25uZWN0LFxuICBidWlsZE1vY2tPcHRpb25zLFxuICBnZXRIZWFkZXJCeU5hbWUsXG4gIGJ1aWxkSGVhZGVyc0Zyb21BcnJheVxufVxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7IGdldFJlc3BvbnNlRGF0YSwgYnVpbGRLZXksIGFkZE1vY2tEaXNwYXRjaCB9ID0gcmVxdWlyZSgnLi9tb2NrLXV0aWxzJylcbmNvbnN0IHtcbiAga0Rpc3BhdGNoZXMsXG4gIGtEaXNwYXRjaEtleSxcbiAga0RlZmF1bHRIZWFkZXJzLFxuICBrRGVmYXVsdFRyYWlsZXJzLFxuICBrQ29udGVudExlbmd0aCxcbiAga01vY2tEaXNwYXRjaFxufSA9IHJlcXVpcmUoJy4vbW9jay1zeW1ib2xzJylcbmNvbnN0IHsgSW52YWxpZEFyZ3VtZW50RXJyb3IgfSA9IHJlcXVpcmUoJy4uL2NvcmUvZXJyb3JzJylcbmNvbnN0IHsgYnVpbGRVUkwgfSA9IHJlcXVpcmUoJy4uL2NvcmUvdXRpbCcpXG5cbi8qKlxuICogRGVmaW5lcyB0aGUgc2NvcGUgQVBJIGZvciBhbiBpbnRlcmNlcHRvciByZXBseVxuICovXG5jbGFzcyBNb2NrU2NvcGUge1xuICBjb25zdHJ1Y3RvciAobW9ja0Rpc3BhdGNoKSB7XG4gICAgdGhpc1trTW9ja0Rpc3BhdGNoXSA9IG1vY2tEaXNwYXRjaFxuICB9XG5cbiAgLyoqXG4gICAqIERlbGF5IGEgcmVwbHkgYnkgYSBzZXQgYW1vdW50IGluIG1zLlxuICAgKi9cbiAgZGVsYXkgKHdhaXRJbk1zKSB7XG4gICAgaWYgKHR5cGVvZiB3YWl0SW5NcyAhPT0gJ251bWJlcicgfHwgIU51bWJlci5pc0ludGVnZXIod2FpdEluTXMpIHx8IHdhaXRJbk1zIDw9IDApIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignd2FpdEluTXMgbXVzdCBiZSBhIHZhbGlkIGludGVnZXIgPiAwJylcbiAgICB9XG5cbiAgICB0aGlzW2tNb2NrRGlzcGF0Y2hdLmRlbGF5ID0gd2FpdEluTXNcbiAgICByZXR1cm4gdGhpc1xuICB9XG5cbiAgLyoqXG4gICAqIEZvciBhIGRlZmluZWQgcmVwbHksIG5ldmVyIG1hcmsgYXMgY29uc3VtZWQuXG4gICAqL1xuICBwZXJzaXN0ICgpIHtcbiAgICB0aGlzW2tNb2NrRGlzcGF0Y2hdLnBlcnNpc3QgPSB0cnVlXG4gICAgcmV0dXJuIHRoaXNcbiAgfVxuXG4gIC8qKlxuICAgKiBBbGxvdyBvbmUgdG8gZGVmaW5lIGEgcmVwbHkgZm9yIGEgc2V0IGFtb3VudCBvZiBtYXRjaGluZyByZXF1ZXN0cy5cbiAgICovXG4gIHRpbWVzIChyZXBlYXRUaW1lcykge1xuICAgIGlmICh0eXBlb2YgcmVwZWF0VGltZXMgIT09ICdudW1iZXInIHx8ICFOdW1iZXIuaXNJbnRlZ2VyKHJlcGVhdFRpbWVzKSB8fCByZXBlYXRUaW1lcyA8PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ3JlcGVhdFRpbWVzIG11c3QgYmUgYSB2YWxpZCBpbnRlZ2VyID4gMCcpXG4gICAgfVxuXG4gICAgdGhpc1trTW9ja0Rpc3BhdGNoXS50aW1lcyA9IHJlcGVhdFRpbWVzXG4gICAgcmV0dXJuIHRoaXNcbiAgfVxufVxuXG4vKipcbiAqIERlZmluZXMgYW4gaW50ZXJjZXB0b3IgZm9yIGEgTW9ja1xuICovXG5jbGFzcyBNb2NrSW50ZXJjZXB0b3Ige1xuICBjb25zdHJ1Y3RvciAob3B0cywgbW9ja0Rpc3BhdGNoZXMpIHtcbiAgICBpZiAodHlwZW9mIG9wdHMgIT09ICdvYmplY3QnKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ29wdHMgbXVzdCBiZSBhbiBvYmplY3QnKVxuICAgIH1cbiAgICBpZiAodHlwZW9mIG9wdHMucGF0aCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignb3B0cy5wYXRoIG11c3QgYmUgZGVmaW5lZCcpXG4gICAgfVxuICAgIGlmICh0eXBlb2Ygb3B0cy5tZXRob2QgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBvcHRzLm1ldGhvZCA9ICdHRVQnXG4gICAgfVxuICAgIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vbm9kZWpzL3VuZGljaS9pc3N1ZXMvMTI0NVxuICAgIC8vIEFzIHBlciBSRkMgMzk4NiwgY2xpZW50cyBhcmUgbm90IHN1cHBvc2VkIHRvIHNlbmQgVVJJXG4gICAgLy8gZnJhZ21lbnRzIHRvIHNlcnZlcnMgd2hlbiB0aGV5IHJldHJpZXZlIGEgZG9jdW1lbnQsXG4gICAgaWYgKHR5cGVvZiBvcHRzLnBhdGggPT09ICdzdHJpbmcnKSB7XG4gICAgICBpZiAob3B0cy5xdWVyeSkge1xuICAgICAgICBvcHRzLnBhdGggPSBidWlsZFVSTChvcHRzLnBhdGgsIG9wdHMucXVlcnkpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBNYXRjaGVzIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvdW5kaWNpL2Jsb2IvbWFpbi9saWIvd2ViL2ZldGNoL2luZGV4LmpzI0wxODExXG4gICAgICAgIGNvbnN0IHBhcnNlZFVSTCA9IG5ldyBVUkwob3B0cy5wYXRoLCAnZGF0YTovLycpXG4gICAgICAgIG9wdHMucGF0aCA9IHBhcnNlZFVSTC5wYXRobmFtZSArIHBhcnNlZFVSTC5zZWFyY2hcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKHR5cGVvZiBvcHRzLm1ldGhvZCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIG9wdHMubWV0aG9kID0gb3B0cy5tZXRob2QudG9VcHBlckNhc2UoKVxuICAgIH1cblxuICAgIHRoaXNba0Rpc3BhdGNoS2V5XSA9IGJ1aWxkS2V5KG9wdHMpXG4gICAgdGhpc1trRGlzcGF0Y2hlc10gPSBtb2NrRGlzcGF0Y2hlc1xuICAgIHRoaXNba0RlZmF1bHRIZWFkZXJzXSA9IHt9XG4gICAgdGhpc1trRGVmYXVsdFRyYWlsZXJzXSA9IHt9XG4gICAgdGhpc1trQ29udGVudExlbmd0aF0gPSBmYWxzZVxuICB9XG5cbiAgY3JlYXRlTW9ja1Njb3BlRGlzcGF0Y2hEYXRhICh7IHN0YXR1c0NvZGUsIGRhdGEsIHJlc3BvbnNlT3B0aW9ucyB9KSB7XG4gICAgY29uc3QgcmVzcG9uc2VEYXRhID0gZ2V0UmVzcG9uc2VEYXRhKGRhdGEpXG4gICAgY29uc3QgY29udGVudExlbmd0aCA9IHRoaXNba0NvbnRlbnRMZW5ndGhdID8geyAnY29udGVudC1sZW5ndGgnOiByZXNwb25zZURhdGEubGVuZ3RoIH0gOiB7fVxuICAgIGNvbnN0IGhlYWRlcnMgPSB7IC4uLnRoaXNba0RlZmF1bHRIZWFkZXJzXSwgLi4uY29udGVudExlbmd0aCwgLi4ucmVzcG9uc2VPcHRpb25zLmhlYWRlcnMgfVxuICAgIGNvbnN0IHRyYWlsZXJzID0geyAuLi50aGlzW2tEZWZhdWx0VHJhaWxlcnNdLCAuLi5yZXNwb25zZU9wdGlvbnMudHJhaWxlcnMgfVxuXG4gICAgcmV0dXJuIHsgc3RhdHVzQ29kZSwgZGF0YSwgaGVhZGVycywgdHJhaWxlcnMgfVxuICB9XG5cbiAgdmFsaWRhdGVSZXBseVBhcmFtZXRlcnMgKHJlcGx5UGFyYW1ldGVycykge1xuICAgIGlmICh0eXBlb2YgcmVwbHlQYXJhbWV0ZXJzLnN0YXR1c0NvZGUgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ3N0YXR1c0NvZGUgbXVzdCBiZSBkZWZpbmVkJylcbiAgICB9XG4gICAgaWYgKHR5cGVvZiByZXBseVBhcmFtZXRlcnMucmVzcG9uc2VPcHRpb25zICE9PSAnb2JqZWN0JyB8fCByZXBseVBhcmFtZXRlcnMucmVzcG9uc2VPcHRpb25zID09PSBudWxsKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ3Jlc3BvbnNlT3B0aW9ucyBtdXN0IGJlIGFuIG9iamVjdCcpXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIE1vY2sgYW4gdW5kaWNpIHJlcXVlc3Qgd2l0aCBhIGRlZmluZWQgcmVwbHkuXG4gICAqL1xuICByZXBseSAocmVwbHlPcHRpb25zQ2FsbGJhY2tPclN0YXR1c0NvZGUpIHtcbiAgICAvLyBWYWx1ZXMgb2YgcmVwbHkgYXJlbid0IGF2YWlsYWJsZSByaWdodCBub3cgYXMgdGhleVxuICAgIC8vIGNhbiBvbmx5IGJlIGF2YWlsYWJsZSB3aGVuIHRoZSByZXBseSBjYWxsYmFjayBpcyBpbnZva2VkLlxuICAgIGlmICh0eXBlb2YgcmVwbHlPcHRpb25zQ2FsbGJhY2tPclN0YXR1c0NvZGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIC8vIFdlJ2xsIGZpcnN0IHdyYXAgdGhlIHByb3ZpZGVkIGNhbGxiYWNrIGluIGFub3RoZXIgZnVuY3Rpb24sXG4gICAgICAvLyB0aGlzIGZ1bmN0aW9uIHdpbGwgcHJvcGVybHkgcmVzb2x2ZSB0aGUgZGF0YSBmcm9tIHRoZSBjYWxsYmFja1xuICAgICAgLy8gd2hlbiBpbnZva2VkLlxuICAgICAgY29uc3Qgd3JhcHBlZERlZmF1bHRzQ2FsbGJhY2sgPSAob3B0cykgPT4ge1xuICAgICAgICAvLyBPdXIgcmVwbHkgb3B0aW9ucyBjYWxsYmFjayBjb250YWlucyB0aGUgcGFyYW1ldGVyIGZvciBzdGF0dXNDb2RlLCBkYXRhIGFuZCBvcHRpb25zLlxuICAgICAgICBjb25zdCByZXNvbHZlZERhdGEgPSByZXBseU9wdGlvbnNDYWxsYmFja09yU3RhdHVzQ29kZShvcHRzKVxuXG4gICAgICAgIC8vIENoZWNrIGlmIGl0IGlzIGluIHRoZSByaWdodCBmb3JtYXRcbiAgICAgICAgaWYgKHR5cGVvZiByZXNvbHZlZERhdGEgIT09ICdvYmplY3QnIHx8IHJlc29sdmVkRGF0YSA9PT0gbnVsbCkge1xuICAgICAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcigncmVwbHkgb3B0aW9ucyBjYWxsYmFjayBtdXN0IHJldHVybiBhbiBvYmplY3QnKVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcmVwbHlQYXJhbWV0ZXJzID0geyBkYXRhOiAnJywgcmVzcG9uc2VPcHRpb25zOiB7fSwgLi4ucmVzb2x2ZWREYXRhIH1cbiAgICAgICAgdGhpcy52YWxpZGF0ZVJlcGx5UGFyYW1ldGVycyhyZXBseVBhcmFtZXRlcnMpXG4gICAgICAgIC8vIFNpbmNlIHRoZSB2YWx1ZXMgY2FuIGJlIG9idGFpbmVkIGltbWVkaWF0ZWx5IHdlIHJldHVybiB0aGVtXG4gICAgICAgIC8vIGZyb20gdGhpcyBoaWdoZXIgb3JkZXIgZnVuY3Rpb24gdGhhdCB3aWxsIGJlIHJlc29sdmVkIGxhdGVyLlxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIC4uLnRoaXMuY3JlYXRlTW9ja1Njb3BlRGlzcGF0Y2hEYXRhKHJlcGx5UGFyYW1ldGVycylcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBBZGQgdXN1YWwgZGlzcGF0Y2ggZGF0YSwgYnV0IHRoaXMgdGltZSBzZXQgdGhlIGRhdGEgcGFyYW1ldGVyIHRvIGZ1bmN0aW9uIHRoYXQgd2lsbCBldmVudHVhbGx5IHByb3ZpZGUgZGF0YS5cbiAgICAgIGNvbnN0IG5ld01vY2tEaXNwYXRjaCA9IGFkZE1vY2tEaXNwYXRjaCh0aGlzW2tEaXNwYXRjaGVzXSwgdGhpc1trRGlzcGF0Y2hLZXldLCB3cmFwcGVkRGVmYXVsdHNDYWxsYmFjaylcbiAgICAgIHJldHVybiBuZXcgTW9ja1Njb3BlKG5ld01vY2tEaXNwYXRjaClcbiAgICB9XG5cbiAgICAvLyBXZSBjYW4gaGF2ZSBlaXRoZXIgb25lIG9yIHRocmVlIHBhcmFtZXRlcnMsIGlmIHdlIGdldCBoZXJlLFxuICAgIC8vIHdlIHNob3VsZCBoYXZlIDEtMyBwYXJhbWV0ZXJzLiBTbyB3ZSBzcHJlYWQgdGhlIGFyZ3VtZW50cyBvZlxuICAgIC8vIHRoaXMgZnVuY3Rpb24gdG8gb2J0YWluIHRoZSBwYXJhbWV0ZXJzLCBzaW5jZSByZXBseURhdGEgd2lsbCBhbHdheXNcbiAgICAvLyBqdXN0IGJlIHRoZSBzdGF0dXNDb2RlLlxuICAgIGNvbnN0IHJlcGx5UGFyYW1ldGVycyA9IHtcbiAgICAgIHN0YXR1c0NvZGU6IHJlcGx5T3B0aW9uc0NhbGxiYWNrT3JTdGF0dXNDb2RlLFxuICAgICAgZGF0YTogYXJndW1lbnRzWzFdID09PSB1bmRlZmluZWQgPyAnJyA6IGFyZ3VtZW50c1sxXSxcbiAgICAgIHJlc3BvbnNlT3B0aW9uczogYXJndW1lbnRzWzJdID09PSB1bmRlZmluZWQgPyB7fSA6IGFyZ3VtZW50c1syXVxuICAgIH1cbiAgICB0aGlzLnZhbGlkYXRlUmVwbHlQYXJhbWV0ZXJzKHJlcGx5UGFyYW1ldGVycylcblxuICAgIC8vIFNlbmQgaW4tYWxyZWFkeSBwcm92aWRlZCBkYXRhIGxpa2UgdXN1YWxcbiAgICBjb25zdCBkaXNwYXRjaERhdGEgPSB0aGlzLmNyZWF0ZU1vY2tTY29wZURpc3BhdGNoRGF0YShyZXBseVBhcmFtZXRlcnMpXG4gICAgY29uc3QgbmV3TW9ja0Rpc3BhdGNoID0gYWRkTW9ja0Rpc3BhdGNoKHRoaXNba0Rpc3BhdGNoZXNdLCB0aGlzW2tEaXNwYXRjaEtleV0sIGRpc3BhdGNoRGF0YSlcbiAgICByZXR1cm4gbmV3IE1vY2tTY29wZShuZXdNb2NrRGlzcGF0Y2gpXG4gIH1cblxuICAvKipcbiAgICogTW9jayBhbiB1bmRpY2kgcmVxdWVzdCB3aXRoIGEgZGVmaW5lZCBlcnJvci5cbiAgICovXG4gIHJlcGx5V2l0aEVycm9yIChlcnJvcikge1xuICAgIGlmICh0eXBlb2YgZXJyb3IgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2Vycm9yIG11c3QgYmUgZGVmaW5lZCcpXG4gICAgfVxuXG4gICAgY29uc3QgbmV3TW9ja0Rpc3BhdGNoID0gYWRkTW9ja0Rpc3BhdGNoKHRoaXNba0Rpc3BhdGNoZXNdLCB0aGlzW2tEaXNwYXRjaEtleV0sIHsgZXJyb3IgfSlcbiAgICByZXR1cm4gbmV3IE1vY2tTY29wZShuZXdNb2NrRGlzcGF0Y2gpXG4gIH1cblxuICAvKipcbiAgICogU2V0IGRlZmF1bHQgcmVwbHkgaGVhZGVycyBvbiB0aGUgaW50ZXJjZXB0b3IgZm9yIHN1YnNlcXVlbnQgcmVwbGllc1xuICAgKi9cbiAgZGVmYXVsdFJlcGx5SGVhZGVycyAoaGVhZGVycykge1xuICAgIGlmICh0eXBlb2YgaGVhZGVycyA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaGVhZGVycyBtdXN0IGJlIGRlZmluZWQnKVxuICAgIH1cblxuICAgIHRoaXNba0RlZmF1bHRIZWFkZXJzXSA9IGhlYWRlcnNcbiAgICByZXR1cm4gdGhpc1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCBkZWZhdWx0IHJlcGx5IHRyYWlsZXJzIG9uIHRoZSBpbnRlcmNlcHRvciBmb3Igc3Vic2VxdWVudCByZXBsaWVzXG4gICAqL1xuICBkZWZhdWx0UmVwbHlUcmFpbGVycyAodHJhaWxlcnMpIHtcbiAgICBpZiAodHlwZW9mIHRyYWlsZXJzID09PSAndW5kZWZpbmVkJykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCd0cmFpbGVycyBtdXN0IGJlIGRlZmluZWQnKVxuICAgIH1cblxuICAgIHRoaXNba0RlZmF1bHRUcmFpbGVyc10gPSB0cmFpbGVyc1xuICAgIHJldHVybiB0aGlzXG4gIH1cblxuICAvKipcbiAgICogU2V0IHJlcGx5IGNvbnRlbnQgbGVuZ3RoIGhlYWRlciBmb3IgcmVwbGllcyBvbiB0aGUgaW50ZXJjZXB0b3JcbiAgICovXG4gIHJlcGx5Q29udGVudExlbmd0aCAoKSB7XG4gICAgdGhpc1trQ29udGVudExlbmd0aF0gPSB0cnVlXG4gICAgcmV0dXJuIHRoaXNcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cy5Nb2NrSW50ZXJjZXB0b3IgPSBNb2NrSW50ZXJjZXB0b3Jcbm1vZHVsZS5leHBvcnRzLk1vY2tTY29wZSA9IE1vY2tTY29wZVxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7IHByb21pc2lmeSB9ID0gcmVxdWlyZSgnbm9kZTp1dGlsJylcbmNvbnN0IENsaWVudCA9IHJlcXVpcmUoJy4uL2Rpc3BhdGNoZXIvY2xpZW50JylcbmNvbnN0IHsgYnVpbGRNb2NrRGlzcGF0Y2ggfSA9IHJlcXVpcmUoJy4vbW9jay11dGlscycpXG5jb25zdCB7XG4gIGtEaXNwYXRjaGVzLFxuICBrTW9ja0FnZW50LFxuICBrQ2xvc2UsXG4gIGtPcmlnaW5hbENsb3NlLFxuICBrT3JpZ2luLFxuICBrT3JpZ2luYWxEaXNwYXRjaCxcbiAga0Nvbm5lY3RlZFxufSA9IHJlcXVpcmUoJy4vbW9jay1zeW1ib2xzJylcbmNvbnN0IHsgTW9ja0ludGVyY2VwdG9yIH0gPSByZXF1aXJlKCcuL21vY2staW50ZXJjZXB0b3InKVxuY29uc3QgU3ltYm9scyA9IHJlcXVpcmUoJy4uL2NvcmUvc3ltYm9scycpXG5jb25zdCB7IEludmFsaWRBcmd1bWVudEVycm9yIH0gPSByZXF1aXJlKCcuLi9jb3JlL2Vycm9ycycpXG5cbi8qKlxuICogTW9ja0NsaWVudCBwcm92aWRlcyBhbiBBUEkgdGhhdCBleHRlbmRzIHRoZSBDbGllbnQgdG8gaW5mbHVlbmNlIHRoZSBtb2NrRGlzcGF0Y2hlcy5cbiAqL1xuY2xhc3MgTW9ja0NsaWVudCBleHRlbmRzIENsaWVudCB7XG4gIGNvbnN0cnVjdG9yIChvcmlnaW4sIG9wdHMpIHtcbiAgICBzdXBlcihvcmlnaW4sIG9wdHMpXG5cbiAgICBpZiAoIW9wdHMgfHwgIW9wdHMuYWdlbnQgfHwgdHlwZW9mIG9wdHMuYWdlbnQuZGlzcGF0Y2ggIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignQXJndW1lbnQgb3B0cy5hZ2VudCBtdXN0IGltcGxlbWVudCBBZ2VudCcpXG4gICAgfVxuXG4gICAgdGhpc1trTW9ja0FnZW50XSA9IG9wdHMuYWdlbnRcbiAgICB0aGlzW2tPcmlnaW5dID0gb3JpZ2luXG4gICAgdGhpc1trRGlzcGF0Y2hlc10gPSBbXVxuICAgIHRoaXNba0Nvbm5lY3RlZF0gPSAxXG4gICAgdGhpc1trT3JpZ2luYWxEaXNwYXRjaF0gPSB0aGlzLmRpc3BhdGNoXG4gICAgdGhpc1trT3JpZ2luYWxDbG9zZV0gPSB0aGlzLmNsb3NlLmJpbmQodGhpcylcblxuICAgIHRoaXMuZGlzcGF0Y2ggPSBidWlsZE1vY2tEaXNwYXRjaC5jYWxsKHRoaXMpXG4gICAgdGhpcy5jbG9zZSA9IHRoaXNba0Nsb3NlXVxuICB9XG5cbiAgZ2V0IFtTeW1ib2xzLmtDb25uZWN0ZWRdICgpIHtcbiAgICByZXR1cm4gdGhpc1trQ29ubmVjdGVkXVxuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgdXAgdGhlIGJhc2UgaW50ZXJjZXB0b3IgZm9yIG1vY2tpbmcgcmVwbGllcyBmcm9tIHVuZGljaS5cbiAgICovXG4gIGludGVyY2VwdCAob3B0cykge1xuICAgIHJldHVybiBuZXcgTW9ja0ludGVyY2VwdG9yKG9wdHMsIHRoaXNba0Rpc3BhdGNoZXNdKVxuICB9XG5cbiAgYXN5bmMgW2tDbG9zZV0gKCkge1xuICAgIGF3YWl0IHByb21pc2lmeSh0aGlzW2tPcmlnaW5hbENsb3NlXSkoKVxuICAgIHRoaXNba0Nvbm5lY3RlZF0gPSAwXG4gICAgdGhpc1trTW9ja0FnZW50XVtTeW1ib2xzLmtDbGllbnRzXS5kZWxldGUodGhpc1trT3JpZ2luXSlcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IE1vY2tDbGllbnRcbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgeyBwcm9taXNpZnkgfSA9IHJlcXVpcmUoJ25vZGU6dXRpbCcpXG5jb25zdCBQb29sID0gcmVxdWlyZSgnLi4vZGlzcGF0Y2hlci9wb29sJylcbmNvbnN0IHsgYnVpbGRNb2NrRGlzcGF0Y2ggfSA9IHJlcXVpcmUoJy4vbW9jay11dGlscycpXG5jb25zdCB7XG4gIGtEaXNwYXRjaGVzLFxuICBrTW9ja0FnZW50LFxuICBrQ2xvc2UsXG4gIGtPcmlnaW5hbENsb3NlLFxuICBrT3JpZ2luLFxuICBrT3JpZ2luYWxEaXNwYXRjaCxcbiAga0Nvbm5lY3RlZFxufSA9IHJlcXVpcmUoJy4vbW9jay1zeW1ib2xzJylcbmNvbnN0IHsgTW9ja0ludGVyY2VwdG9yIH0gPSByZXF1aXJlKCcuL21vY2staW50ZXJjZXB0b3InKVxuY29uc3QgU3ltYm9scyA9IHJlcXVpcmUoJy4uL2NvcmUvc3ltYm9scycpXG5jb25zdCB7IEludmFsaWRBcmd1bWVudEVycm9yIH0gPSByZXF1aXJlKCcuLi9jb3JlL2Vycm9ycycpXG5cbi8qKlxuICogTW9ja1Bvb2wgcHJvdmlkZXMgYW4gQVBJIHRoYXQgZXh0ZW5kcyB0aGUgUG9vbCB0byBpbmZsdWVuY2UgdGhlIG1vY2tEaXNwYXRjaGVzLlxuICovXG5jbGFzcyBNb2NrUG9vbCBleHRlbmRzIFBvb2wge1xuICBjb25zdHJ1Y3RvciAob3JpZ2luLCBvcHRzKSB7XG4gICAgc3VwZXIob3JpZ2luLCBvcHRzKVxuXG4gICAgaWYgKCFvcHRzIHx8ICFvcHRzLmFnZW50IHx8IHR5cGVvZiBvcHRzLmFnZW50LmRpc3BhdGNoICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ0FyZ3VtZW50IG9wdHMuYWdlbnQgbXVzdCBpbXBsZW1lbnQgQWdlbnQnKVxuICAgIH1cblxuICAgIHRoaXNba01vY2tBZ2VudF0gPSBvcHRzLmFnZW50XG4gICAgdGhpc1trT3JpZ2luXSA9IG9yaWdpblxuICAgIHRoaXNba0Rpc3BhdGNoZXNdID0gW11cbiAgICB0aGlzW2tDb25uZWN0ZWRdID0gMVxuICAgIHRoaXNba09yaWdpbmFsRGlzcGF0Y2hdID0gdGhpcy5kaXNwYXRjaFxuICAgIHRoaXNba09yaWdpbmFsQ2xvc2VdID0gdGhpcy5jbG9zZS5iaW5kKHRoaXMpXG5cbiAgICB0aGlzLmRpc3BhdGNoID0gYnVpbGRNb2NrRGlzcGF0Y2guY2FsbCh0aGlzKVxuICAgIHRoaXMuY2xvc2UgPSB0aGlzW2tDbG9zZV1cbiAgfVxuXG4gIGdldCBbU3ltYm9scy5rQ29ubmVjdGVkXSAoKSB7XG4gICAgcmV0dXJuIHRoaXNba0Nvbm5lY3RlZF1cbiAgfVxuXG4gIC8qKlxuICAgKiBTZXRzIHVwIHRoZSBiYXNlIGludGVyY2VwdG9yIGZvciBtb2NraW5nIHJlcGxpZXMgZnJvbSB1bmRpY2kuXG4gICAqL1xuICBpbnRlcmNlcHQgKG9wdHMpIHtcbiAgICByZXR1cm4gbmV3IE1vY2tJbnRlcmNlcHRvcihvcHRzLCB0aGlzW2tEaXNwYXRjaGVzXSlcbiAgfVxuXG4gIGFzeW5jIFtrQ2xvc2VdICgpIHtcbiAgICBhd2FpdCBwcm9taXNpZnkodGhpc1trT3JpZ2luYWxDbG9zZV0pKClcbiAgICB0aGlzW2tDb25uZWN0ZWRdID0gMFxuICAgIHRoaXNba01vY2tBZ2VudF1bU3ltYm9scy5rQ2xpZW50c10uZGVsZXRlKHRoaXNba09yaWdpbl0pXG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBNb2NrUG9vbFxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCBzaW5ndWxhcnMgPSB7XG4gIHByb25vdW46ICdpdCcsXG4gIGlzOiAnaXMnLFxuICB3YXM6ICd3YXMnLFxuICB0aGlzOiAndGhpcydcbn1cblxuY29uc3QgcGx1cmFscyA9IHtcbiAgcHJvbm91bjogJ3RoZXknLFxuICBpczogJ2FyZScsXG4gIHdhczogJ3dlcmUnLFxuICB0aGlzOiAndGhlc2UnXG59XG5cbm1vZHVsZS5leHBvcnRzID0gY2xhc3MgUGx1cmFsaXplciB7XG4gIGNvbnN0cnVjdG9yIChzaW5ndWxhciwgcGx1cmFsKSB7XG4gICAgdGhpcy5zaW5ndWxhciA9IHNpbmd1bGFyXG4gICAgdGhpcy5wbHVyYWwgPSBwbHVyYWxcbiAgfVxuXG4gIHBsdXJhbGl6ZSAoY291bnQpIHtcbiAgICBjb25zdCBvbmUgPSBjb3VudCA9PT0gMVxuICAgIGNvbnN0IGtleXMgPSBvbmUgPyBzaW5ndWxhcnMgOiBwbHVyYWxzXG4gICAgY29uc3Qgbm91biA9IG9uZSA/IHRoaXMuc2luZ3VsYXIgOiB0aGlzLnBsdXJhbFxuICAgIHJldHVybiB7IC4uLmtleXMsIGNvdW50LCBub3VuIH1cbiAgfVxufVxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7IFRyYW5zZm9ybSB9ID0gcmVxdWlyZSgnbm9kZTpzdHJlYW0nKVxuY29uc3QgeyBDb25zb2xlIH0gPSByZXF1aXJlKCdub2RlOmNvbnNvbGUnKVxuXG5jb25zdCBQRVJTSVNURU5UID0gcHJvY2Vzcy52ZXJzaW9ucy5pY3UgPyAnXHUyNzA1JyA6ICdZICdcbmNvbnN0IE5PVF9QRVJTSVNURU5UID0gcHJvY2Vzcy52ZXJzaW9ucy5pY3UgPyAnXHUyNzRDJyA6ICdOICdcblxuLyoqXG4gKiBHZXRzIHRoZSBvdXRwdXQgb2YgYGNvbnNvbGUudGFibGUoXHUyMDI2KWAgYXMgYSBzdHJpbmcuXG4gKi9cbm1vZHVsZS5leHBvcnRzID0gY2xhc3MgUGVuZGluZ0ludGVyY2VwdG9yc0Zvcm1hdHRlciB7XG4gIGNvbnN0cnVjdG9yICh7IGRpc2FibGVDb2xvcnMgfSA9IHt9KSB7XG4gICAgdGhpcy50cmFuc2Zvcm0gPSBuZXcgVHJhbnNmb3JtKHtcbiAgICAgIHRyYW5zZm9ybSAoY2h1bmssIF9lbmMsIGNiKSB7XG4gICAgICAgIGNiKG51bGwsIGNodW5rKVxuICAgICAgfVxuICAgIH0pXG5cbiAgICB0aGlzLmxvZ2dlciA9IG5ldyBDb25zb2xlKHtcbiAgICAgIHN0ZG91dDogdGhpcy50cmFuc2Zvcm0sXG4gICAgICBpbnNwZWN0T3B0aW9uczoge1xuICAgICAgICBjb2xvcnM6ICFkaXNhYmxlQ29sb3JzICYmICFwcm9jZXNzLmVudi5DSVxuICAgICAgfVxuICAgIH0pXG4gIH1cblxuICBmb3JtYXQgKHBlbmRpbmdJbnRlcmNlcHRvcnMpIHtcbiAgICBjb25zdCB3aXRoUHJldHR5SGVhZGVycyA9IHBlbmRpbmdJbnRlcmNlcHRvcnMubWFwKFxuICAgICAgKHsgbWV0aG9kLCBwYXRoLCBkYXRhOiB7IHN0YXR1c0NvZGUgfSwgcGVyc2lzdCwgdGltZXMsIHRpbWVzSW52b2tlZCwgb3JpZ2luIH0pID0+ICh7XG4gICAgICAgIE1ldGhvZDogbWV0aG9kLFxuICAgICAgICBPcmlnaW46IG9yaWdpbixcbiAgICAgICAgUGF0aDogcGF0aCxcbiAgICAgICAgJ1N0YXR1cyBjb2RlJzogc3RhdHVzQ29kZSxcbiAgICAgICAgUGVyc2lzdGVudDogcGVyc2lzdCA/IFBFUlNJU1RFTlQgOiBOT1RfUEVSU0lTVEVOVCxcbiAgICAgICAgSW52b2NhdGlvbnM6IHRpbWVzSW52b2tlZCxcbiAgICAgICAgUmVtYWluaW5nOiBwZXJzaXN0ID8gSW5maW5pdHkgOiB0aW1lcyAtIHRpbWVzSW52b2tlZFxuICAgICAgfSkpXG5cbiAgICB0aGlzLmxvZ2dlci50YWJsZSh3aXRoUHJldHR5SGVhZGVycylcbiAgICByZXR1cm4gdGhpcy50cmFuc2Zvcm0ucmVhZCgpLnRvU3RyaW5nKClcbiAgfVxufVxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7IGtDbGllbnRzIH0gPSByZXF1aXJlKCcuLi9jb3JlL3N5bWJvbHMnKVxuY29uc3QgQWdlbnQgPSByZXF1aXJlKCcuLi9kaXNwYXRjaGVyL2FnZW50JylcbmNvbnN0IHtcbiAga0FnZW50LFxuICBrTW9ja0FnZW50U2V0LFxuICBrTW9ja0FnZW50R2V0LFxuICBrRGlzcGF0Y2hlcyxcbiAga0lzTW9ja0FjdGl2ZSxcbiAga05ldENvbm5lY3QsXG4gIGtHZXROZXRDb25uZWN0LFxuICBrT3B0aW9ucyxcbiAga0ZhY3Rvcnlcbn0gPSByZXF1aXJlKCcuL21vY2stc3ltYm9scycpXG5jb25zdCBNb2NrQ2xpZW50ID0gcmVxdWlyZSgnLi9tb2NrLWNsaWVudCcpXG5jb25zdCBNb2NrUG9vbCA9IHJlcXVpcmUoJy4vbW9jay1wb29sJylcbmNvbnN0IHsgbWF0Y2hWYWx1ZSwgYnVpbGRNb2NrT3B0aW9ucyB9ID0gcmVxdWlyZSgnLi9tb2NrLXV0aWxzJylcbmNvbnN0IHsgSW52YWxpZEFyZ3VtZW50RXJyb3IsIFVuZGljaUVycm9yIH0gPSByZXF1aXJlKCcuLi9jb3JlL2Vycm9ycycpXG5jb25zdCBEaXNwYXRjaGVyID0gcmVxdWlyZSgnLi4vZGlzcGF0Y2hlci9kaXNwYXRjaGVyJylcbmNvbnN0IFBsdXJhbGl6ZXIgPSByZXF1aXJlKCcuL3BsdXJhbGl6ZXInKVxuY29uc3QgUGVuZGluZ0ludGVyY2VwdG9yc0Zvcm1hdHRlciA9IHJlcXVpcmUoJy4vcGVuZGluZy1pbnRlcmNlcHRvcnMtZm9ybWF0dGVyJylcblxuY2xhc3MgTW9ja0FnZW50IGV4dGVuZHMgRGlzcGF0Y2hlciB7XG4gIGNvbnN0cnVjdG9yIChvcHRzKSB7XG4gICAgc3VwZXIob3B0cylcblxuICAgIHRoaXNba05ldENvbm5lY3RdID0gdHJ1ZVxuICAgIHRoaXNba0lzTW9ja0FjdGl2ZV0gPSB0cnVlXG5cbiAgICAvLyBJbnN0YW50aWF0ZSBBZ2VudCBhbmQgZW5jYXBzdWxhdGVcbiAgICBpZiAoKG9wdHM/LmFnZW50ICYmIHR5cGVvZiBvcHRzLmFnZW50LmRpc3BhdGNoICE9PSAnZnVuY3Rpb24nKSkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdBcmd1bWVudCBvcHRzLmFnZW50IG11c3QgaW1wbGVtZW50IEFnZW50JylcbiAgICB9XG4gICAgY29uc3QgYWdlbnQgPSBvcHRzPy5hZ2VudCA/IG9wdHMuYWdlbnQgOiBuZXcgQWdlbnQob3B0cylcbiAgICB0aGlzW2tBZ2VudF0gPSBhZ2VudFxuXG4gICAgdGhpc1trQ2xpZW50c10gPSBhZ2VudFtrQ2xpZW50c11cbiAgICB0aGlzW2tPcHRpb25zXSA9IGJ1aWxkTW9ja09wdGlvbnMob3B0cylcbiAgfVxuXG4gIGdldCAob3JpZ2luKSB7XG4gICAgbGV0IGRpc3BhdGNoZXIgPSB0aGlzW2tNb2NrQWdlbnRHZXRdKG9yaWdpbilcblxuICAgIGlmICghZGlzcGF0Y2hlcikge1xuICAgICAgZGlzcGF0Y2hlciA9IHRoaXNba0ZhY3RvcnldKG9yaWdpbilcbiAgICAgIHRoaXNba01vY2tBZ2VudFNldF0ob3JpZ2luLCBkaXNwYXRjaGVyKVxuICAgIH1cbiAgICByZXR1cm4gZGlzcGF0Y2hlclxuICB9XG5cbiAgZGlzcGF0Y2ggKG9wdHMsIGhhbmRsZXIpIHtcbiAgICAvLyBDYWxsIE1vY2tBZ2VudC5nZXQgdG8gcGVyZm9ybSBhZGRpdGlvbmFsIHNldHVwIGJlZm9yZSBkaXNwYXRjaGluZyBhcyBub3JtYWxcbiAgICB0aGlzLmdldChvcHRzLm9yaWdpbilcbiAgICByZXR1cm4gdGhpc1trQWdlbnRdLmRpc3BhdGNoKG9wdHMsIGhhbmRsZXIpXG4gIH1cblxuICBhc3luYyBjbG9zZSAoKSB7XG4gICAgYXdhaXQgdGhpc1trQWdlbnRdLmNsb3NlKClcbiAgICB0aGlzW2tDbGllbnRzXS5jbGVhcigpXG4gIH1cblxuICBkZWFjdGl2YXRlICgpIHtcbiAgICB0aGlzW2tJc01vY2tBY3RpdmVdID0gZmFsc2VcbiAgfVxuXG4gIGFjdGl2YXRlICgpIHtcbiAgICB0aGlzW2tJc01vY2tBY3RpdmVdID0gdHJ1ZVxuICB9XG5cbiAgZW5hYmxlTmV0Q29ubmVjdCAobWF0Y2hlcikge1xuICAgIGlmICh0eXBlb2YgbWF0Y2hlciA9PT0gJ3N0cmluZycgfHwgdHlwZW9mIG1hdGNoZXIgPT09ICdmdW5jdGlvbicgfHwgbWF0Y2hlciBpbnN0YW5jZW9mIFJlZ0V4cCkge1xuICAgICAgaWYgKEFycmF5LmlzQXJyYXkodGhpc1trTmV0Q29ubmVjdF0pKSB7XG4gICAgICAgIHRoaXNba05ldENvbm5lY3RdLnB1c2gobWF0Y2hlcilcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXNba05ldENvbm5lY3RdID0gW21hdGNoZXJdXG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh0eXBlb2YgbWF0Y2hlciA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHRoaXNba05ldENvbm5lY3RdID0gdHJ1ZVxuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ1Vuc3VwcG9ydGVkIG1hdGNoZXIuIE11c3QgYmUgb25lIG9mIFN0cmluZ3xGdW5jdGlvbnxSZWdFeHAuJylcbiAgICB9XG4gIH1cblxuICBkaXNhYmxlTmV0Q29ubmVjdCAoKSB7XG4gICAgdGhpc1trTmV0Q29ubmVjdF0gPSBmYWxzZVxuICB9XG5cbiAgLy8gVGhpcyBpcyByZXF1aXJlZCB0byBieXBhc3MgaXNzdWVzIGNhdXNlZCBieSB1c2luZyBnbG9iYWwgc3ltYm9scyAtIHNlZTpcbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy91bmRpY2kvaXNzdWVzLzE0NDdcbiAgZ2V0IGlzTW9ja0FjdGl2ZSAoKSB7XG4gICAgcmV0dXJuIHRoaXNba0lzTW9ja0FjdGl2ZV1cbiAgfVxuXG4gIFtrTW9ja0FnZW50U2V0XSAob3JpZ2luLCBkaXNwYXRjaGVyKSB7XG4gICAgdGhpc1trQ2xpZW50c10uc2V0KG9yaWdpbiwgZGlzcGF0Y2hlcilcbiAgfVxuXG4gIFtrRmFjdG9yeV0gKG9yaWdpbikge1xuICAgIGNvbnN0IG1vY2tPcHRpb25zID0gT2JqZWN0LmFzc2lnbih7IGFnZW50OiB0aGlzIH0sIHRoaXNba09wdGlvbnNdKVxuICAgIHJldHVybiB0aGlzW2tPcHRpb25zXSAmJiB0aGlzW2tPcHRpb25zXS5jb25uZWN0aW9ucyA9PT0gMVxuICAgICAgPyBuZXcgTW9ja0NsaWVudChvcmlnaW4sIG1vY2tPcHRpb25zKVxuICAgICAgOiBuZXcgTW9ja1Bvb2wob3JpZ2luLCBtb2NrT3B0aW9ucylcbiAgfVxuXG4gIFtrTW9ja0FnZW50R2V0XSAob3JpZ2luKSB7XG4gICAgLy8gRmlyc3QgY2hlY2sgaWYgd2UgY2FuIGltbWVkaWF0ZWx5IGZpbmQgaXRcbiAgICBjb25zdCBjbGllbnQgPSB0aGlzW2tDbGllbnRzXS5nZXQob3JpZ2luKVxuICAgIGlmIChjbGllbnQpIHtcbiAgICAgIHJldHVybiBjbGllbnRcbiAgICB9XG5cbiAgICAvLyBJZiB0aGUgb3JpZ2luIGlzIG5vdCBhIHN0cmluZyBjcmVhdGUgYSBkdW1teSBwYXJlbnQgcG9vbCBhbmQgcmV0dXJuIHRvIHVzZXJcbiAgICBpZiAodHlwZW9mIG9yaWdpbiAhPT0gJ3N0cmluZycpIHtcbiAgICAgIGNvbnN0IGRpc3BhdGNoZXIgPSB0aGlzW2tGYWN0b3J5XSgnaHR0cDovL2xvY2FsaG9zdDo5OTk5JylcbiAgICAgIHRoaXNba01vY2tBZ2VudFNldF0ob3JpZ2luLCBkaXNwYXRjaGVyKVxuICAgICAgcmV0dXJuIGRpc3BhdGNoZXJcbiAgICB9XG5cbiAgICAvLyBJZiB3ZSBtYXRjaCwgY3JlYXRlIGEgcG9vbCBhbmQgYXNzaWduIHRoZSBzYW1lIGRpc3BhdGNoZXNcbiAgICBmb3IgKGNvbnN0IFtrZXlNYXRjaGVyLCBub25FeHBsaWNpdERpc3BhdGNoZXJdIG9mIEFycmF5LmZyb20odGhpc1trQ2xpZW50c10pKSB7XG4gICAgICBpZiAobm9uRXhwbGljaXREaXNwYXRjaGVyICYmIHR5cGVvZiBrZXlNYXRjaGVyICE9PSAnc3RyaW5nJyAmJiBtYXRjaFZhbHVlKGtleU1hdGNoZXIsIG9yaWdpbikpIHtcbiAgICAgICAgY29uc3QgZGlzcGF0Y2hlciA9IHRoaXNba0ZhY3RvcnldKG9yaWdpbilcbiAgICAgICAgdGhpc1trTW9ja0FnZW50U2V0XShvcmlnaW4sIGRpc3BhdGNoZXIpXG4gICAgICAgIGRpc3BhdGNoZXJba0Rpc3BhdGNoZXNdID0gbm9uRXhwbGljaXREaXNwYXRjaGVyW2tEaXNwYXRjaGVzXVxuICAgICAgICByZXR1cm4gZGlzcGF0Y2hlclxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIFtrR2V0TmV0Q29ubmVjdF0gKCkge1xuICAgIHJldHVybiB0aGlzW2tOZXRDb25uZWN0XVxuICB9XG5cbiAgcGVuZGluZ0ludGVyY2VwdG9ycyAoKSB7XG4gICAgY29uc3QgbW9ja0FnZW50Q2xpZW50cyA9IHRoaXNba0NsaWVudHNdXG5cbiAgICByZXR1cm4gQXJyYXkuZnJvbShtb2NrQWdlbnRDbGllbnRzLmVudHJpZXMoKSlcbiAgICAgIC5mbGF0TWFwKChbb3JpZ2luLCBzY29wZV0pID0+IHNjb3BlW2tEaXNwYXRjaGVzXS5tYXAoZGlzcGF0Y2ggPT4gKHsgLi4uZGlzcGF0Y2gsIG9yaWdpbiB9KSkpXG4gICAgICAuZmlsdGVyKCh7IHBlbmRpbmcgfSkgPT4gcGVuZGluZylcbiAgfVxuXG4gIGFzc2VydE5vUGVuZGluZ0ludGVyY2VwdG9ycyAoeyBwZW5kaW5nSW50ZXJjZXB0b3JzRm9ybWF0dGVyID0gbmV3IFBlbmRpbmdJbnRlcmNlcHRvcnNGb3JtYXR0ZXIoKSB9ID0ge30pIHtcbiAgICBjb25zdCBwZW5kaW5nID0gdGhpcy5wZW5kaW5nSW50ZXJjZXB0b3JzKClcblxuICAgIGlmIChwZW5kaW5nLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgY29uc3QgcGx1cmFsaXplciA9IG5ldyBQbHVyYWxpemVyKCdpbnRlcmNlcHRvcicsICdpbnRlcmNlcHRvcnMnKS5wbHVyYWxpemUocGVuZGluZy5sZW5ndGgpXG5cbiAgICB0aHJvdyBuZXcgVW5kaWNpRXJyb3IoYFxuJHtwbHVyYWxpemVyLmNvdW50fSAke3BsdXJhbGl6ZXIubm91bn0gJHtwbHVyYWxpemVyLmlzfSBwZW5kaW5nOlxuXG4ke3BlbmRpbmdJbnRlcmNlcHRvcnNGb3JtYXR0ZXIuZm9ybWF0KHBlbmRpbmcpfVxuYC50cmltKCkpXG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBNb2NrQWdlbnRcbiIsICIndXNlIHN0cmljdCdcblxuLy8gV2UgaW5jbHVkZSBhIHZlcnNpb24gbnVtYmVyIGZvciB0aGUgRGlzcGF0Y2hlciBBUEkuIEluIGNhc2Ugb2YgYnJlYWtpbmcgY2hhbmdlcyxcbi8vIHRoaXMgdmVyc2lvbiBudW1iZXIgbXVzdCBiZSBpbmNyZWFzZWQgdG8gYXZvaWQgY29uZmxpY3RzLlxuY29uc3QgZ2xvYmFsRGlzcGF0Y2hlciA9IFN5bWJvbC5mb3IoJ3VuZGljaS5nbG9iYWxEaXNwYXRjaGVyLjEnKVxuY29uc3QgeyBJbnZhbGlkQXJndW1lbnRFcnJvciB9ID0gcmVxdWlyZSgnLi9jb3JlL2Vycm9ycycpXG5jb25zdCBBZ2VudCA9IHJlcXVpcmUoJy4vZGlzcGF0Y2hlci9hZ2VudCcpXG5cbmlmIChnZXRHbG9iYWxEaXNwYXRjaGVyKCkgPT09IHVuZGVmaW5lZCkge1xuICBzZXRHbG9iYWxEaXNwYXRjaGVyKG5ldyBBZ2VudCgpKVxufVxuXG5mdW5jdGlvbiBzZXRHbG9iYWxEaXNwYXRjaGVyIChhZ2VudCkge1xuICBpZiAoIWFnZW50IHx8IHR5cGVvZiBhZ2VudC5kaXNwYXRjaCAhPT0gJ2Z1bmN0aW9uJykge1xuICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignQXJndW1lbnQgYWdlbnQgbXVzdCBpbXBsZW1lbnQgQWdlbnQnKVxuICB9XG4gIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShnbG9iYWxUaGlzLCBnbG9iYWxEaXNwYXRjaGVyLCB7XG4gICAgdmFsdWU6IGFnZW50LFxuICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgIGNvbmZpZ3VyYWJsZTogZmFsc2VcbiAgfSlcbn1cblxuZnVuY3Rpb24gZ2V0R2xvYmFsRGlzcGF0Y2hlciAoKSB7XG4gIHJldHVybiBnbG9iYWxUaGlzW2dsb2JhbERpc3BhdGNoZXJdXG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBzZXRHbG9iYWxEaXNwYXRjaGVyLFxuICBnZXRHbG9iYWxEaXNwYXRjaGVyXG59XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbm1vZHVsZS5leHBvcnRzID0gY2xhc3MgRGVjb3JhdG9ySGFuZGxlciB7XG4gICNoYW5kbGVyXG5cbiAgY29uc3RydWN0b3IgKGhhbmRsZXIpIHtcbiAgICBpZiAodHlwZW9mIGhhbmRsZXIgIT09ICdvYmplY3QnIHx8IGhhbmRsZXIgPT09IG51bGwpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2hhbmRsZXIgbXVzdCBiZSBhbiBvYmplY3QnKVxuICAgIH1cbiAgICB0aGlzLiNoYW5kbGVyID0gaGFuZGxlclxuICB9XG5cbiAgb25Db25uZWN0ICguLi5hcmdzKSB7XG4gICAgcmV0dXJuIHRoaXMuI2hhbmRsZXIub25Db25uZWN0Py4oLi4uYXJncylcbiAgfVxuXG4gIG9uRXJyb3IgKC4uLmFyZ3MpIHtcbiAgICByZXR1cm4gdGhpcy4jaGFuZGxlci5vbkVycm9yPy4oLi4uYXJncylcbiAgfVxuXG4gIG9uVXBncmFkZSAoLi4uYXJncykge1xuICAgIHJldHVybiB0aGlzLiNoYW5kbGVyLm9uVXBncmFkZT8uKC4uLmFyZ3MpXG4gIH1cblxuICBvblJlc3BvbnNlU3RhcnRlZCAoLi4uYXJncykge1xuICAgIHJldHVybiB0aGlzLiNoYW5kbGVyLm9uUmVzcG9uc2VTdGFydGVkPy4oLi4uYXJncylcbiAgfVxuXG4gIG9uSGVhZGVycyAoLi4uYXJncykge1xuICAgIHJldHVybiB0aGlzLiNoYW5kbGVyLm9uSGVhZGVycz8uKC4uLmFyZ3MpXG4gIH1cblxuICBvbkRhdGEgKC4uLmFyZ3MpIHtcbiAgICByZXR1cm4gdGhpcy4jaGFuZGxlci5vbkRhdGE/LiguLi5hcmdzKVxuICB9XG5cbiAgb25Db21wbGV0ZSAoLi4uYXJncykge1xuICAgIHJldHVybiB0aGlzLiNoYW5kbGVyLm9uQ29tcGxldGU/LiguLi5hcmdzKVxuICB9XG5cbiAgb25Cb2R5U2VudCAoLi4uYXJncykge1xuICAgIHJldHVybiB0aGlzLiNoYW5kbGVyLm9uQm9keVNlbnQ/LiguLi5hcmdzKVxuICB9XG59XG4iLCAiJ3VzZSBzdHJpY3QnXG5jb25zdCBSZWRpcmVjdEhhbmRsZXIgPSByZXF1aXJlKCcuLi9oYW5kbGVyL3JlZGlyZWN0LWhhbmRsZXInKVxuXG5tb2R1bGUuZXhwb3J0cyA9IG9wdHMgPT4ge1xuICBjb25zdCBnbG9iYWxNYXhSZWRpcmVjdGlvbnMgPSBvcHRzPy5tYXhSZWRpcmVjdGlvbnNcbiAgcmV0dXJuIGRpc3BhdGNoID0+IHtcbiAgICByZXR1cm4gZnVuY3Rpb24gcmVkaXJlY3RJbnRlcmNlcHRvciAob3B0cywgaGFuZGxlcikge1xuICAgICAgY29uc3QgeyBtYXhSZWRpcmVjdGlvbnMgPSBnbG9iYWxNYXhSZWRpcmVjdGlvbnMsIC4uLmJhc2VPcHRzIH0gPSBvcHRzXG5cbiAgICAgIGlmICghbWF4UmVkaXJlY3Rpb25zKSB7XG4gICAgICAgIHJldHVybiBkaXNwYXRjaChvcHRzLCBoYW5kbGVyKVxuICAgICAgfVxuXG4gICAgICBjb25zdCByZWRpcmVjdEhhbmRsZXIgPSBuZXcgUmVkaXJlY3RIYW5kbGVyKFxuICAgICAgICBkaXNwYXRjaCxcbiAgICAgICAgbWF4UmVkaXJlY3Rpb25zLFxuICAgICAgICBvcHRzLFxuICAgICAgICBoYW5kbGVyXG4gICAgICApXG5cbiAgICAgIHJldHVybiBkaXNwYXRjaChiYXNlT3B0cywgcmVkaXJlY3RIYW5kbGVyKVxuICAgIH1cbiAgfVxufVxuIiwgIid1c2Ugc3RyaWN0J1xuY29uc3QgUmV0cnlIYW5kbGVyID0gcmVxdWlyZSgnLi4vaGFuZGxlci9yZXRyeS1oYW5kbGVyJylcblxubW9kdWxlLmV4cG9ydHMgPSBnbG9iYWxPcHRzID0+IHtcbiAgcmV0dXJuIGRpc3BhdGNoID0+IHtcbiAgICByZXR1cm4gZnVuY3Rpb24gcmV0cnlJbnRlcmNlcHRvciAob3B0cywgaGFuZGxlcikge1xuICAgICAgcmV0dXJuIGRpc3BhdGNoKFxuICAgICAgICBvcHRzLFxuICAgICAgICBuZXcgUmV0cnlIYW5kbGVyKFxuICAgICAgICAgIHsgLi4ub3B0cywgcmV0cnlPcHRpb25zOiB7IC4uLmdsb2JhbE9wdHMsIC4uLm9wdHMucmV0cnlPcHRpb25zIH0gfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBoYW5kbGVyLFxuICAgICAgICAgICAgZGlzcGF0Y2hcbiAgICAgICAgICB9XG4gICAgICAgIClcbiAgICAgIClcbiAgICB9XG4gIH1cbn1cbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgdXRpbCA9IHJlcXVpcmUoJy4uL2NvcmUvdXRpbCcpXG5jb25zdCB7IEludmFsaWRBcmd1bWVudEVycm9yLCBSZXF1ZXN0QWJvcnRlZEVycm9yIH0gPSByZXF1aXJlKCcuLi9jb3JlL2Vycm9ycycpXG5jb25zdCBEZWNvcmF0b3JIYW5kbGVyID0gcmVxdWlyZSgnLi4vaGFuZGxlci9kZWNvcmF0b3ItaGFuZGxlcicpXG5cbmNsYXNzIER1bXBIYW5kbGVyIGV4dGVuZHMgRGVjb3JhdG9ySGFuZGxlciB7XG4gICNtYXhTaXplID0gMTAyNCAqIDEwMjRcbiAgI2Fib3J0ID0gbnVsbFxuICAjZHVtcGVkID0gZmFsc2VcbiAgI2Fib3J0ZWQgPSBmYWxzZVxuICAjc2l6ZSA9IDBcbiAgI3JlYXNvbiA9IG51bGxcbiAgI2hhbmRsZXIgPSBudWxsXG5cbiAgY29uc3RydWN0b3IgKHsgbWF4U2l6ZSB9LCBoYW5kbGVyKSB7XG4gICAgc3VwZXIoaGFuZGxlcilcblxuICAgIGlmIChtYXhTaXplICE9IG51bGwgJiYgKCFOdW1iZXIuaXNGaW5pdGUobWF4U2l6ZSkgfHwgbWF4U2l6ZSA8IDEpKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ21heFNpemUgbXVzdCBiZSBhIG51bWJlciBncmVhdGVyIHRoYW4gMCcpXG4gICAgfVxuXG4gICAgdGhpcy4jbWF4U2l6ZSA9IG1heFNpemUgPz8gdGhpcy4jbWF4U2l6ZVxuICAgIHRoaXMuI2hhbmRsZXIgPSBoYW5kbGVyXG4gIH1cblxuICBvbkNvbm5lY3QgKGFib3J0KSB7XG4gICAgdGhpcy4jYWJvcnQgPSBhYm9ydFxuXG4gICAgdGhpcy4jaGFuZGxlci5vbkNvbm5lY3QodGhpcy4jY3VzdG9tQWJvcnQuYmluZCh0aGlzKSlcbiAgfVxuXG4gICNjdXN0b21BYm9ydCAocmVhc29uKSB7XG4gICAgdGhpcy4jYWJvcnRlZCA9IHRydWVcbiAgICB0aGlzLiNyZWFzb24gPSByZWFzb25cbiAgfVxuXG4gIC8vIFRPRE86IHdpbGwgcmVxdWlyZSBhZGp1c3RtZW50IGFmdGVyIG5ldyBob29rcyBhcmUgb3V0XG4gIG9uSGVhZGVycyAoc3RhdHVzQ29kZSwgcmF3SGVhZGVycywgcmVzdW1lLCBzdGF0dXNNZXNzYWdlKSB7XG4gICAgY29uc3QgaGVhZGVycyA9IHV0aWwucGFyc2VIZWFkZXJzKHJhd0hlYWRlcnMpXG4gICAgY29uc3QgY29udGVudExlbmd0aCA9IGhlYWRlcnNbJ2NvbnRlbnQtbGVuZ3RoJ11cblxuICAgIGlmIChjb250ZW50TGVuZ3RoICE9IG51bGwgJiYgY29udGVudExlbmd0aCA+IHRoaXMuI21heFNpemUpIHtcbiAgICAgIHRocm93IG5ldyBSZXF1ZXN0QWJvcnRlZEVycm9yKFxuICAgICAgICBgUmVzcG9uc2Ugc2l6ZSAoJHtjb250ZW50TGVuZ3RofSkgbGFyZ2VyIHRoYW4gbWF4U2l6ZSAoJHtcbiAgICAgICAgICB0aGlzLiNtYXhTaXplXG4gICAgICAgIH0pYFxuICAgICAgKVxuICAgIH1cblxuICAgIGlmICh0aGlzLiNhYm9ydGVkKSB7XG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cblxuICAgIHJldHVybiB0aGlzLiNoYW5kbGVyLm9uSGVhZGVycyhcbiAgICAgIHN0YXR1c0NvZGUsXG4gICAgICByYXdIZWFkZXJzLFxuICAgICAgcmVzdW1lLFxuICAgICAgc3RhdHVzTWVzc2FnZVxuICAgIClcbiAgfVxuXG4gIG9uRXJyb3IgKGVycikge1xuICAgIGlmICh0aGlzLiNkdW1wZWQpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGVyciA9IHRoaXMuI3JlYXNvbiA/PyBlcnJcblxuICAgIHRoaXMuI2hhbmRsZXIub25FcnJvcihlcnIpXG4gIH1cblxuICBvbkRhdGEgKGNodW5rKSB7XG4gICAgdGhpcy4jc2l6ZSA9IHRoaXMuI3NpemUgKyBjaHVuay5sZW5ndGhcblxuICAgIGlmICh0aGlzLiNzaXplID49IHRoaXMuI21heFNpemUpIHtcbiAgICAgIHRoaXMuI2R1bXBlZCA9IHRydWVcblxuICAgICAgaWYgKHRoaXMuI2Fib3J0ZWQpIHtcbiAgICAgICAgdGhpcy4jaGFuZGxlci5vbkVycm9yKHRoaXMuI3JlYXNvbilcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuI2hhbmRsZXIub25Db21wbGV0ZShbXSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZVxuICB9XG5cbiAgb25Db21wbGV0ZSAodHJhaWxlcnMpIHtcbiAgICBpZiAodGhpcy4jZHVtcGVkKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBpZiAodGhpcy4jYWJvcnRlZCkge1xuICAgICAgdGhpcy4jaGFuZGxlci5vbkVycm9yKHRoaXMucmVhc29uKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgdGhpcy4jaGFuZGxlci5vbkNvbXBsZXRlKHRyYWlsZXJzKVxuICB9XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUR1bXBJbnRlcmNlcHRvciAoXG4gIHsgbWF4U2l6ZTogZGVmYXVsdE1heFNpemUgfSA9IHtcbiAgICBtYXhTaXplOiAxMDI0ICogMTAyNFxuICB9XG4pIHtcbiAgcmV0dXJuIGRpc3BhdGNoID0+IHtcbiAgICByZXR1cm4gZnVuY3Rpb24gSW50ZXJjZXB0IChvcHRzLCBoYW5kbGVyKSB7XG4gICAgICBjb25zdCB7IGR1bXBNYXhTaXplID0gZGVmYXVsdE1heFNpemUgfSA9XG4gICAgICAgIG9wdHNcblxuICAgICAgY29uc3QgZHVtcEhhbmRsZXIgPSBuZXcgRHVtcEhhbmRsZXIoXG4gICAgICAgIHsgbWF4U2l6ZTogZHVtcE1heFNpemUgfSxcbiAgICAgICAgaGFuZGxlclxuICAgICAgKVxuXG4gICAgICByZXR1cm4gZGlzcGF0Y2gob3B0cywgZHVtcEhhbmRsZXIpXG4gICAgfVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY3JlYXRlRHVtcEludGVyY2VwdG9yXG4iLCAiJ3VzZSBzdHJpY3QnXG5jb25zdCB7IGlzSVAgfSA9IHJlcXVpcmUoJ25vZGU6bmV0JylcbmNvbnN0IHsgbG9va3VwIH0gPSByZXF1aXJlKCdub2RlOmRucycpXG5jb25zdCBEZWNvcmF0b3JIYW5kbGVyID0gcmVxdWlyZSgnLi4vaGFuZGxlci9kZWNvcmF0b3ItaGFuZGxlcicpXG5jb25zdCB7IEludmFsaWRBcmd1bWVudEVycm9yLCBJbmZvcm1hdGlvbmFsRXJyb3IgfSA9IHJlcXVpcmUoJy4uL2NvcmUvZXJyb3JzJylcbmNvbnN0IG1heEludCA9IE1hdGgucG93KDIsIDMxKSAtIDFcblxuY2xhc3MgRE5TSW5zdGFuY2Uge1xuICAjbWF4VFRMID0gMFxuICAjbWF4SXRlbXMgPSAwXG4gICNyZWNvcmRzID0gbmV3IE1hcCgpXG4gIGR1YWxTdGFjayA9IHRydWVcbiAgYWZmaW5pdHkgPSBudWxsXG4gIGxvb2t1cCA9IG51bGxcbiAgcGljayA9IG51bGxcblxuICBjb25zdHJ1Y3RvciAob3B0cykge1xuICAgIHRoaXMuI21heFRUTCA9IG9wdHMubWF4VFRMXG4gICAgdGhpcy4jbWF4SXRlbXMgPSBvcHRzLm1heEl0ZW1zXG4gICAgdGhpcy5kdWFsU3RhY2sgPSBvcHRzLmR1YWxTdGFja1xuICAgIHRoaXMuYWZmaW5pdHkgPSBvcHRzLmFmZmluaXR5XG4gICAgdGhpcy5sb29rdXAgPSBvcHRzLmxvb2t1cCA/PyB0aGlzLiNkZWZhdWx0TG9va3VwXG4gICAgdGhpcy5waWNrID0gb3B0cy5waWNrID8/IHRoaXMuI2RlZmF1bHRQaWNrXG4gIH1cblxuICBnZXQgZnVsbCAoKSB7XG4gICAgcmV0dXJuIHRoaXMuI3JlY29yZHMuc2l6ZSA9PT0gdGhpcy4jbWF4SXRlbXNcbiAgfVxuXG4gIHJ1bkxvb2t1cCAob3JpZ2luLCBvcHRzLCBjYikge1xuICAgIGNvbnN0IGlwcyA9IHRoaXMuI3JlY29yZHMuZ2V0KG9yaWdpbi5ob3N0bmFtZSlcblxuICAgIC8vIElmIGZ1bGwsIHdlIGp1c3QgcmV0dXJuIHRoZSBvcmlnaW5cbiAgICBpZiAoaXBzID09IG51bGwgJiYgdGhpcy5mdWxsKSB7XG4gICAgICBjYihudWxsLCBvcmlnaW4ub3JpZ2luKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgY29uc3QgbmV3T3B0cyA9IHtcbiAgICAgIGFmZmluaXR5OiB0aGlzLmFmZmluaXR5LFxuICAgICAgZHVhbFN0YWNrOiB0aGlzLmR1YWxTdGFjayxcbiAgICAgIGxvb2t1cDogdGhpcy5sb29rdXAsXG4gICAgICBwaWNrOiB0aGlzLnBpY2ssXG4gICAgICAuLi5vcHRzLmRucyxcbiAgICAgIG1heFRUTDogdGhpcy4jbWF4VFRMLFxuICAgICAgbWF4SXRlbXM6IHRoaXMuI21heEl0ZW1zXG4gICAgfVxuXG4gICAgLy8gSWYgbm8gSVBzIHdlIGxvb2t1cFxuICAgIGlmIChpcHMgPT0gbnVsbCkge1xuICAgICAgdGhpcy5sb29rdXAob3JpZ2luLCBuZXdPcHRzLCAoZXJyLCBhZGRyZXNzZXMpID0+IHtcbiAgICAgICAgaWYgKGVyciB8fCBhZGRyZXNzZXMgPT0gbnVsbCB8fCBhZGRyZXNzZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgY2IoZXJyID8/IG5ldyBJbmZvcm1hdGlvbmFsRXJyb3IoJ05vIEROUyBlbnRyaWVzIGZvdW5kJykpXG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnNldFJlY29yZHMob3JpZ2luLCBhZGRyZXNzZXMpXG4gICAgICAgIGNvbnN0IHJlY29yZHMgPSB0aGlzLiNyZWNvcmRzLmdldChvcmlnaW4uaG9zdG5hbWUpXG5cbiAgICAgICAgY29uc3QgaXAgPSB0aGlzLnBpY2soXG4gICAgICAgICAgb3JpZ2luLFxuICAgICAgICAgIHJlY29yZHMsXG4gICAgICAgICAgbmV3T3B0cy5hZmZpbml0eVxuICAgICAgICApXG5cbiAgICAgICAgbGV0IHBvcnRcbiAgICAgICAgaWYgKHR5cGVvZiBpcC5wb3J0ID09PSAnbnVtYmVyJykge1xuICAgICAgICAgIHBvcnQgPSBgOiR7aXAucG9ydH1gXG4gICAgICAgIH0gZWxzZSBpZiAob3JpZ2luLnBvcnQgIT09ICcnKSB7XG4gICAgICAgICAgcG9ydCA9IGA6JHtvcmlnaW4ucG9ydH1gXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcG9ydCA9ICcnXG4gICAgICAgIH1cblxuICAgICAgICBjYihcbiAgICAgICAgICBudWxsLFxuICAgICAgICAgIGAke29yaWdpbi5wcm90b2NvbH0vLyR7XG4gICAgICAgICAgICBpcC5mYW1pbHkgPT09IDYgPyBgWyR7aXAuYWRkcmVzc31dYCA6IGlwLmFkZHJlc3NcbiAgICAgICAgICB9JHtwb3J0fWBcbiAgICAgICAgKVxuICAgICAgfSlcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gSWYgdGhlcmUncyBJUHMgd2UgcGlja1xuICAgICAgY29uc3QgaXAgPSB0aGlzLnBpY2soXG4gICAgICAgIG9yaWdpbixcbiAgICAgICAgaXBzLFxuICAgICAgICBuZXdPcHRzLmFmZmluaXR5XG4gICAgICApXG5cbiAgICAgIC8vIElmIG5vIElQcyB3ZSBsb29rdXAgLSBkZWxldGluZyBvbGQgcmVjb3Jkc1xuICAgICAgaWYgKGlwID09IG51bGwpIHtcbiAgICAgICAgdGhpcy4jcmVjb3Jkcy5kZWxldGUob3JpZ2luLmhvc3RuYW1lKVxuICAgICAgICB0aGlzLnJ1bkxvb2t1cChvcmlnaW4sIG9wdHMsIGNiKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgbGV0IHBvcnRcbiAgICAgIGlmICh0eXBlb2YgaXAucG9ydCA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgcG9ydCA9IGA6JHtpcC5wb3J0fWBcbiAgICAgIH0gZWxzZSBpZiAob3JpZ2luLnBvcnQgIT09ICcnKSB7XG4gICAgICAgIHBvcnQgPSBgOiR7b3JpZ2luLnBvcnR9YFxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcG9ydCA9ICcnXG4gICAgICB9XG5cbiAgICAgIGNiKFxuICAgICAgICBudWxsLFxuICAgICAgICBgJHtvcmlnaW4ucHJvdG9jb2x9Ly8ke1xuICAgICAgICAgIGlwLmZhbWlseSA9PT0gNiA/IGBbJHtpcC5hZGRyZXNzfV1gIDogaXAuYWRkcmVzc1xuICAgICAgICB9JHtwb3J0fWBcbiAgICAgIClcbiAgICB9XG4gIH1cblxuICAjZGVmYXVsdExvb2t1cCAob3JpZ2luLCBvcHRzLCBjYikge1xuICAgIGxvb2t1cChcbiAgICAgIG9yaWdpbi5ob3N0bmFtZSxcbiAgICAgIHtcbiAgICAgICAgYWxsOiB0cnVlLFxuICAgICAgICBmYW1pbHk6IHRoaXMuZHVhbFN0YWNrID09PSBmYWxzZSA/IHRoaXMuYWZmaW5pdHkgOiAwLFxuICAgICAgICBvcmRlcjogJ2lwdjRmaXJzdCdcbiAgICAgIH0sXG4gICAgICAoZXJyLCBhZGRyZXNzZXMpID0+IHtcbiAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgIHJldHVybiBjYihlcnIpXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCByZXN1bHRzID0gbmV3IE1hcCgpXG5cbiAgICAgICAgZm9yIChjb25zdCBhZGRyIG9mIGFkZHJlc3Nlcykge1xuICAgICAgICAgIC8vIE9uIGxpbnV4IHdlIGZvdW5kIGR1cGxpY2F0ZXMsIHdlIGF0dGVtcHQgdG8gcmVtb3ZlIHRoZW0gd2l0aFxuICAgICAgICAgIC8vIHRoZSBsYXRlc3QgcmVjb3JkXG4gICAgICAgICAgcmVzdWx0cy5zZXQoYCR7YWRkci5hZGRyZXNzfToke2FkZHIuZmFtaWx5fWAsIGFkZHIpXG4gICAgICAgIH1cblxuICAgICAgICBjYihudWxsLCByZXN1bHRzLnZhbHVlcygpKVxuICAgICAgfVxuICAgIClcbiAgfVxuXG4gICNkZWZhdWx0UGljayAob3JpZ2luLCBob3N0bmFtZVJlY29yZHMsIGFmZmluaXR5KSB7XG4gICAgbGV0IGlwID0gbnVsbFxuICAgIGNvbnN0IHsgcmVjb3Jkcywgb2Zmc2V0IH0gPSBob3N0bmFtZVJlY29yZHNcblxuICAgIGxldCBmYW1pbHlcbiAgICBpZiAodGhpcy5kdWFsU3RhY2spIHtcbiAgICAgIGlmIChhZmZpbml0eSA9PSBudWxsKSB7XG4gICAgICAgIC8vIEJhbGFuY2UgYmV0d2VlbiBpcCBmYW1pbGllc1xuICAgICAgICBpZiAob2Zmc2V0ID09IG51bGwgfHwgb2Zmc2V0ID09PSBtYXhJbnQpIHtcbiAgICAgICAgICBob3N0bmFtZVJlY29yZHMub2Zmc2V0ID0gMFxuICAgICAgICAgIGFmZmluaXR5ID0gNFxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGhvc3RuYW1lUmVjb3Jkcy5vZmZzZXQrK1xuICAgICAgICAgIGFmZmluaXR5ID0gKGhvc3RuYW1lUmVjb3Jkcy5vZmZzZXQgJiAxKSA9PT0gMSA/IDYgOiA0XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKHJlY29yZHNbYWZmaW5pdHldICE9IG51bGwgJiYgcmVjb3Jkc1thZmZpbml0eV0uaXBzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgZmFtaWx5ID0gcmVjb3Jkc1thZmZpbml0eV1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZhbWlseSA9IHJlY29yZHNbYWZmaW5pdHkgPT09IDQgPyA2IDogNF1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgZmFtaWx5ID0gcmVjb3Jkc1thZmZpbml0eV1cbiAgICB9XG5cbiAgICAvLyBJZiBubyBJUHMgd2UgcmV0dXJuIG51bGxcbiAgICBpZiAoZmFtaWx5ID09IG51bGwgfHwgZmFtaWx5Lmlwcy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiBpcFxuICAgIH1cblxuICAgIGlmIChmYW1pbHkub2Zmc2V0ID09IG51bGwgfHwgZmFtaWx5Lm9mZnNldCA9PT0gbWF4SW50KSB7XG4gICAgICBmYW1pbHkub2Zmc2V0ID0gMFxuICAgIH0gZWxzZSB7XG4gICAgICBmYW1pbHkub2Zmc2V0KytcbiAgICB9XG5cbiAgICBjb25zdCBwb3NpdGlvbiA9IGZhbWlseS5vZmZzZXQgJSBmYW1pbHkuaXBzLmxlbmd0aFxuICAgIGlwID0gZmFtaWx5Lmlwc1twb3NpdGlvbl0gPz8gbnVsbFxuXG4gICAgaWYgKGlwID09IG51bGwpIHtcbiAgICAgIHJldHVybiBpcFxuICAgIH1cblxuICAgIGlmIChEYXRlLm5vdygpIC0gaXAudGltZXN0YW1wID4gaXAudHRsKSB7IC8vIHJlY29yZCBUVEwgaXMgYWxyZWFkeSBpbiBtc1xuICAgICAgLy8gV2UgZGVsZXRlIGV4cGlyZWQgcmVjb3Jkc1xuICAgICAgLy8gSXQgaXMgcG9zc2libGUgdGhhdCB0aGV5IGhhdmUgZGlmZmVyZW50IFRUTCwgc28gd2UgbWFuYWdlIHRoZW0gaW5kaXZpZHVhbGx5XG4gICAgICBmYW1pbHkuaXBzLnNwbGljZShwb3NpdGlvbiwgMSlcbiAgICAgIHJldHVybiB0aGlzLnBpY2sob3JpZ2luLCBob3N0bmFtZVJlY29yZHMsIGFmZmluaXR5KVxuICAgIH1cblxuICAgIHJldHVybiBpcFxuICB9XG5cbiAgc2V0UmVjb3JkcyAob3JpZ2luLCBhZGRyZXNzZXMpIHtcbiAgICBjb25zdCB0aW1lc3RhbXAgPSBEYXRlLm5vdygpXG4gICAgY29uc3QgcmVjb3JkcyA9IHsgcmVjb3JkczogeyA0OiBudWxsLCA2OiBudWxsIH0gfVxuICAgIGZvciAoY29uc3QgcmVjb3JkIG9mIGFkZHJlc3Nlcykge1xuICAgICAgcmVjb3JkLnRpbWVzdGFtcCA9IHRpbWVzdGFtcFxuICAgICAgaWYgKHR5cGVvZiByZWNvcmQudHRsID09PSAnbnVtYmVyJykge1xuICAgICAgICAvLyBUaGUgcmVjb3JkIFRUTCBpcyBleHBlY3RlZCB0byBiZSBpbiBtc1xuICAgICAgICByZWNvcmQudHRsID0gTWF0aC5taW4ocmVjb3JkLnR0bCwgdGhpcy4jbWF4VFRMKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVjb3JkLnR0bCA9IHRoaXMuI21heFRUTFxuICAgICAgfVxuXG4gICAgICBjb25zdCBmYW1pbHlSZWNvcmRzID0gcmVjb3Jkcy5yZWNvcmRzW3JlY29yZC5mYW1pbHldID8/IHsgaXBzOiBbXSB9XG5cbiAgICAgIGZhbWlseVJlY29yZHMuaXBzLnB1c2gocmVjb3JkKVxuICAgICAgcmVjb3Jkcy5yZWNvcmRzW3JlY29yZC5mYW1pbHldID0gZmFtaWx5UmVjb3Jkc1xuICAgIH1cblxuICAgIHRoaXMuI3JlY29yZHMuc2V0KG9yaWdpbi5ob3N0bmFtZSwgcmVjb3JkcylcbiAgfVxuXG4gIGdldEhhbmRsZXIgKG1ldGEsIG9wdHMpIHtcbiAgICByZXR1cm4gbmV3IEROU0Rpc3BhdGNoSGFuZGxlcih0aGlzLCBtZXRhLCBvcHRzKVxuICB9XG59XG5cbmNsYXNzIEROU0Rpc3BhdGNoSGFuZGxlciBleHRlbmRzIERlY29yYXRvckhhbmRsZXIge1xuICAjc3RhdGUgPSBudWxsXG4gICNvcHRzID0gbnVsbFxuICAjZGlzcGF0Y2ggPSBudWxsXG4gICNoYW5kbGVyID0gbnVsbFxuICAjb3JpZ2luID0gbnVsbFxuXG4gIGNvbnN0cnVjdG9yIChzdGF0ZSwgeyBvcmlnaW4sIGhhbmRsZXIsIGRpc3BhdGNoIH0sIG9wdHMpIHtcbiAgICBzdXBlcihoYW5kbGVyKVxuICAgIHRoaXMuI29yaWdpbiA9IG9yaWdpblxuICAgIHRoaXMuI2hhbmRsZXIgPSBoYW5kbGVyXG4gICAgdGhpcy4jb3B0cyA9IHsgLi4ub3B0cyB9XG4gICAgdGhpcy4jc3RhdGUgPSBzdGF0ZVxuICAgIHRoaXMuI2Rpc3BhdGNoID0gZGlzcGF0Y2hcbiAgfVxuXG4gIG9uRXJyb3IgKGVycikge1xuICAgIHN3aXRjaCAoZXJyLmNvZGUpIHtcbiAgICAgIGNhc2UgJ0VUSU1FRE9VVCc6XG4gICAgICBjYXNlICdFQ09OTlJFRlVTRUQnOiB7XG4gICAgICAgIGlmICh0aGlzLiNzdGF0ZS5kdWFsU3RhY2spIHtcbiAgICAgICAgICAvLyBXZSBkZWxldGUgdGhlIHJlY29yZCBhbmQgcmV0cnlcbiAgICAgICAgICB0aGlzLiNzdGF0ZS5ydW5Mb29rdXAodGhpcy4jb3JpZ2luLCB0aGlzLiNvcHRzLCAoZXJyLCBuZXdPcmlnaW4pID0+IHtcbiAgICAgICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuI2hhbmRsZXIub25FcnJvcihlcnIpXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGRpc3BhdGNoT3B0cyA9IHtcbiAgICAgICAgICAgICAgLi4udGhpcy4jb3B0cyxcbiAgICAgICAgICAgICAgb3JpZ2luOiBuZXdPcmlnaW5cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy4jZGlzcGF0Y2goZGlzcGF0Y2hPcHRzLCB0aGlzKVxuICAgICAgICAgIH0pXG5cbiAgICAgICAgICAvLyBpZiBkdWFsLXN0YWNrIGRpc2FibGVkLCB3ZSBlcnJvciBvdXRcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuI2hhbmRsZXIub25FcnJvcihlcnIpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgICAgY2FzZSAnRU5PVEZPVU5EJzpcbiAgICAgICAgdGhpcy4jc3RhdGUuZGVsZXRlUmVjb3JkKHRoaXMuI29yaWdpbilcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1mYWxsdGhyb3VnaFxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhpcy4jaGFuZGxlci5vbkVycm9yKGVycilcbiAgICAgICAgYnJlYWtcbiAgICB9XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBpbnRlcmNlcHRvck9wdHMgPT4ge1xuICBpZiAoXG4gICAgaW50ZXJjZXB0b3JPcHRzPy5tYXhUVEwgIT0gbnVsbCAmJlxuICAgICh0eXBlb2YgaW50ZXJjZXB0b3JPcHRzPy5tYXhUVEwgIT09ICdudW1iZXInIHx8IGludGVyY2VwdG9yT3B0cz8ubWF4VFRMIDwgMClcbiAgKSB7XG4gICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdJbnZhbGlkIG1heFRUTC4gTXVzdCBiZSBhIHBvc2l0aXZlIG51bWJlcicpXG4gIH1cblxuICBpZiAoXG4gICAgaW50ZXJjZXB0b3JPcHRzPy5tYXhJdGVtcyAhPSBudWxsICYmXG4gICAgKHR5cGVvZiBpbnRlcmNlcHRvck9wdHM/Lm1heEl0ZW1zICE9PSAnbnVtYmVyJyB8fFxuICAgICAgaW50ZXJjZXB0b3JPcHRzPy5tYXhJdGVtcyA8IDEpXG4gICkge1xuICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcihcbiAgICAgICdJbnZhbGlkIG1heEl0ZW1zLiBNdXN0IGJlIGEgcG9zaXRpdmUgbnVtYmVyIGFuZCBncmVhdGVyIHRoYW4gemVybydcbiAgICApXG4gIH1cblxuICBpZiAoXG4gICAgaW50ZXJjZXB0b3JPcHRzPy5hZmZpbml0eSAhPSBudWxsICYmXG4gICAgaW50ZXJjZXB0b3JPcHRzPy5hZmZpbml0eSAhPT0gNCAmJlxuICAgIGludGVyY2VwdG9yT3B0cz8uYWZmaW5pdHkgIT09IDZcbiAgKSB7XG4gICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdJbnZhbGlkIGFmZmluaXR5LiBNdXN0IGJlIGVpdGhlciA0IG9yIDYnKVxuICB9XG5cbiAgaWYgKFxuICAgIGludGVyY2VwdG9yT3B0cz8uZHVhbFN0YWNrICE9IG51bGwgJiZcbiAgICB0eXBlb2YgaW50ZXJjZXB0b3JPcHRzPy5kdWFsU3RhY2sgIT09ICdib29sZWFuJ1xuICApIHtcbiAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ0ludmFsaWQgZHVhbFN0YWNrLiBNdXN0IGJlIGEgYm9vbGVhbicpXG4gIH1cblxuICBpZiAoXG4gICAgaW50ZXJjZXB0b3JPcHRzPy5sb29rdXAgIT0gbnVsbCAmJlxuICAgIHR5cGVvZiBpbnRlcmNlcHRvck9wdHM/Lmxvb2t1cCAhPT0gJ2Z1bmN0aW9uJ1xuICApIHtcbiAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ0ludmFsaWQgbG9va3VwLiBNdXN0IGJlIGEgZnVuY3Rpb24nKVxuICB9XG5cbiAgaWYgKFxuICAgIGludGVyY2VwdG9yT3B0cz8ucGljayAhPSBudWxsICYmXG4gICAgdHlwZW9mIGludGVyY2VwdG9yT3B0cz8ucGljayAhPT0gJ2Z1bmN0aW9uJ1xuICApIHtcbiAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ0ludmFsaWQgcGljay4gTXVzdCBiZSBhIGZ1bmN0aW9uJylcbiAgfVxuXG4gIGNvbnN0IGR1YWxTdGFjayA9IGludGVyY2VwdG9yT3B0cz8uZHVhbFN0YWNrID8/IHRydWVcbiAgbGV0IGFmZmluaXR5XG4gIGlmIChkdWFsU3RhY2spIHtcbiAgICBhZmZpbml0eSA9IGludGVyY2VwdG9yT3B0cz8uYWZmaW5pdHkgPz8gbnVsbFxuICB9IGVsc2Uge1xuICAgIGFmZmluaXR5ID0gaW50ZXJjZXB0b3JPcHRzPy5hZmZpbml0eSA/PyA0XG4gIH1cblxuICBjb25zdCBvcHRzID0ge1xuICAgIG1heFRUTDogaW50ZXJjZXB0b3JPcHRzPy5tYXhUVEwgPz8gMTBlMywgLy8gRXhwcmVzc2VkIGluIG1zXG4gICAgbG9va3VwOiBpbnRlcmNlcHRvck9wdHM/Lmxvb2t1cCA/PyBudWxsLFxuICAgIHBpY2s6IGludGVyY2VwdG9yT3B0cz8ucGljayA/PyBudWxsLFxuICAgIGR1YWxTdGFjayxcbiAgICBhZmZpbml0eSxcbiAgICBtYXhJdGVtczogaW50ZXJjZXB0b3JPcHRzPy5tYXhJdGVtcyA/PyBJbmZpbml0eVxuICB9XG5cbiAgY29uc3QgaW5zdGFuY2UgPSBuZXcgRE5TSW5zdGFuY2Uob3B0cylcblxuICByZXR1cm4gZGlzcGF0Y2ggPT4ge1xuICAgIHJldHVybiBmdW5jdGlvbiBkbnNJbnRlcmNlcHRvciAob3JpZ0Rpc3BhdGNoT3B0cywgaGFuZGxlcikge1xuICAgICAgY29uc3Qgb3JpZ2luID1cbiAgICAgICAgb3JpZ0Rpc3BhdGNoT3B0cy5vcmlnaW4uY29uc3RydWN0b3IgPT09IFVSTFxuICAgICAgICAgID8gb3JpZ0Rpc3BhdGNoT3B0cy5vcmlnaW5cbiAgICAgICAgICA6IG5ldyBVUkwob3JpZ0Rpc3BhdGNoT3B0cy5vcmlnaW4pXG5cbiAgICAgIGlmIChpc0lQKG9yaWdpbi5ob3N0bmFtZSkgIT09IDApIHtcbiAgICAgICAgcmV0dXJuIGRpc3BhdGNoKG9yaWdEaXNwYXRjaE9wdHMsIGhhbmRsZXIpXG4gICAgICB9XG5cbiAgICAgIGluc3RhbmNlLnJ1bkxvb2t1cChvcmlnaW4sIG9yaWdEaXNwYXRjaE9wdHMsIChlcnIsIG5ld09yaWdpbikgPT4ge1xuICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgcmV0dXJuIGhhbmRsZXIub25FcnJvcihlcnIpXG4gICAgICAgIH1cblxuICAgICAgICBsZXQgZGlzcGF0Y2hPcHRzID0gbnVsbFxuICAgICAgICBkaXNwYXRjaE9wdHMgPSB7XG4gICAgICAgICAgLi4ub3JpZ0Rpc3BhdGNoT3B0cyxcbiAgICAgICAgICBzZXJ2ZXJuYW1lOiBvcmlnaW4uaG9zdG5hbWUsIC8vIEZvciBTTkkgb24gVExTXG4gICAgICAgICAgb3JpZ2luOiBuZXdPcmlnaW4sXG4gICAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgaG9zdDogb3JpZ2luLmhvc3RuYW1lLFxuICAgICAgICAgICAgLi4ub3JpZ0Rpc3BhdGNoT3B0cy5oZWFkZXJzXG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgZGlzcGF0Y2goXG4gICAgICAgICAgZGlzcGF0Y2hPcHRzLFxuICAgICAgICAgIGluc3RhbmNlLmdldEhhbmRsZXIoeyBvcmlnaW4sIGRpc3BhdGNoLCBoYW5kbGVyIH0sIG9yaWdEaXNwYXRjaE9wdHMpXG4gICAgICAgIClcbiAgICAgIH0pXG5cbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuICB9XG59XG4iLCAiLy8gaHR0cHM6Ly9naXRodWIuY29tL0V0aGFuLUFycm93b29kL3VuZGljaS1mZXRjaFxuXG4ndXNlIHN0cmljdCdcblxuY29uc3QgeyBrQ29uc3RydWN0IH0gPSByZXF1aXJlKCcuLi8uLi9jb3JlL3N5bWJvbHMnKVxuY29uc3QgeyBrRW51bWVyYWJsZVByb3BlcnR5IH0gPSByZXF1aXJlKCcuLi8uLi9jb3JlL3V0aWwnKVxuY29uc3Qge1xuICBpdGVyYXRvck1peGluLFxuICBpc1ZhbGlkSGVhZGVyTmFtZSxcbiAgaXNWYWxpZEhlYWRlclZhbHVlXG59ID0gcmVxdWlyZSgnLi91dGlsJylcbmNvbnN0IHsgd2ViaWRsIH0gPSByZXF1aXJlKCcuL3dlYmlkbCcpXG5jb25zdCBhc3NlcnQgPSByZXF1aXJlKCdub2RlOmFzc2VydCcpXG5jb25zdCB1dGlsID0gcmVxdWlyZSgnbm9kZTp1dGlsJylcblxuY29uc3Qga0hlYWRlcnNNYXAgPSBTeW1ib2woJ2hlYWRlcnMgbWFwJylcbmNvbnN0IGtIZWFkZXJzU29ydGVkTWFwID0gU3ltYm9sKCdoZWFkZXJzIG1hcCBzb3J0ZWQnKVxuXG4vKipcbiAqIEBwYXJhbSB7bnVtYmVyfSBjb2RlXG4gKi9cbmZ1bmN0aW9uIGlzSFRUUFdoaXRlU3BhY2VDaGFyQ29kZSAoY29kZSkge1xuICByZXR1cm4gY29kZSA9PT0gMHgwMGEgfHwgY29kZSA9PT0gMHgwMGQgfHwgY29kZSA9PT0gMHgwMDkgfHwgY29kZSA9PT0gMHgwMjBcbn1cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNjb25jZXB0LWhlYWRlci12YWx1ZS1ub3JtYWxpemVcbiAqIEBwYXJhbSB7c3RyaW5nfSBwb3RlbnRpYWxWYWx1ZVxuICovXG5mdW5jdGlvbiBoZWFkZXJWYWx1ZU5vcm1hbGl6ZSAocG90ZW50aWFsVmFsdWUpIHtcbiAgLy8gIFRvIG5vcm1hbGl6ZSBhIGJ5dGUgc2VxdWVuY2UgcG90ZW50aWFsVmFsdWUsIHJlbW92ZVxuICAvLyAgYW55IGxlYWRpbmcgYW5kIHRyYWlsaW5nIEhUVFAgd2hpdGVzcGFjZSBieXRlcyBmcm9tXG4gIC8vICBwb3RlbnRpYWxWYWx1ZS5cbiAgbGV0IGkgPSAwOyBsZXQgaiA9IHBvdGVudGlhbFZhbHVlLmxlbmd0aFxuXG4gIHdoaWxlIChqID4gaSAmJiBpc0hUVFBXaGl0ZVNwYWNlQ2hhckNvZGUocG90ZW50aWFsVmFsdWUuY2hhckNvZGVBdChqIC0gMSkpKSAtLWpcbiAgd2hpbGUgKGogPiBpICYmIGlzSFRUUFdoaXRlU3BhY2VDaGFyQ29kZShwb3RlbnRpYWxWYWx1ZS5jaGFyQ29kZUF0KGkpKSkgKytpXG5cbiAgcmV0dXJuIGkgPT09IDAgJiYgaiA9PT0gcG90ZW50aWFsVmFsdWUubGVuZ3RoID8gcG90ZW50aWFsVmFsdWUgOiBwb3RlbnRpYWxWYWx1ZS5zdWJzdHJpbmcoaSwgailcbn1cblxuZnVuY3Rpb24gZmlsbCAoaGVhZGVycywgb2JqZWN0KSB7XG4gIC8vIFRvIGZpbGwgYSBIZWFkZXJzIG9iamVjdCBoZWFkZXJzIHdpdGggYSBnaXZlbiBvYmplY3Qgb2JqZWN0LCBydW4gdGhlc2Ugc3RlcHM6XG5cbiAgLy8gMS4gSWYgb2JqZWN0IGlzIGEgc2VxdWVuY2UsIHRoZW4gZm9yIGVhY2ggaGVhZGVyIGluIG9iamVjdDpcbiAgLy8gTm90ZTogd2ViaWRsIGNvbnZlcnNpb24gdG8gYXJyYXkgaGFzIGFscmVhZHkgYmVlbiBkb25lLlxuICBpZiAoQXJyYXkuaXNBcnJheShvYmplY3QpKSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBvYmplY3QubGVuZ3RoOyArK2kpIHtcbiAgICAgIGNvbnN0IGhlYWRlciA9IG9iamVjdFtpXVxuICAgICAgLy8gMS4gSWYgaGVhZGVyIGRvZXMgbm90IGNvbnRhaW4gZXhhY3RseSB0d28gaXRlbXMsIHRoZW4gdGhyb3cgYSBUeXBlRXJyb3IuXG4gICAgICBpZiAoaGVhZGVyLmxlbmd0aCAhPT0gMikge1xuICAgICAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmV4Y2VwdGlvbih7XG4gICAgICAgICAgaGVhZGVyOiAnSGVhZGVycyBjb25zdHJ1Y3RvcicsXG4gICAgICAgICAgbWVzc2FnZTogYGV4cGVjdGVkIG5hbWUvdmFsdWUgcGFpciB0byBiZSBsZW5ndGggMiwgZm91bmQgJHtoZWFkZXIubGVuZ3RofS5gXG4gICAgICAgIH0pXG4gICAgICB9XG5cbiAgICAgIC8vIDIuIEFwcGVuZCAoaGVhZGVyXHUyMDE5cyBmaXJzdCBpdGVtLCBoZWFkZXJcdTIwMTlzIHNlY29uZCBpdGVtKSB0byBoZWFkZXJzLlxuICAgICAgYXBwZW5kSGVhZGVyKGhlYWRlcnMsIGhlYWRlclswXSwgaGVhZGVyWzFdKVxuICAgIH1cbiAgfSBlbHNlIGlmICh0eXBlb2Ygb2JqZWN0ID09PSAnb2JqZWN0JyAmJiBvYmplY3QgIT09IG51bGwpIHtcbiAgICAvLyBOb3RlOiBudWxsIHNob3VsZCB0aHJvd1xuXG4gICAgLy8gMi4gT3RoZXJ3aXNlLCBvYmplY3QgaXMgYSByZWNvcmQsIHRoZW4gZm9yIGVhY2gga2V5IFx1MjE5MiB2YWx1ZSBpbiBvYmplY3QsXG4gICAgLy8gICAgYXBwZW5kIChrZXksIHZhbHVlKSB0byBoZWFkZXJzXG4gICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKG9iamVjdClcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyArK2kpIHtcbiAgICAgIGFwcGVuZEhlYWRlcihoZWFkZXJzLCBrZXlzW2ldLCBvYmplY3Rba2V5c1tpXV0pXG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHRocm93IHdlYmlkbC5lcnJvcnMuY29udmVyc2lvbkZhaWxlZCh7XG4gICAgICBwcmVmaXg6ICdIZWFkZXJzIGNvbnN0cnVjdG9yJyxcbiAgICAgIGFyZ3VtZW50OiAnQXJndW1lbnQgMScsXG4gICAgICB0eXBlczogWydzZXF1ZW5jZTxzZXF1ZW5jZTxCeXRlU3RyaW5nPj4nLCAncmVjb3JkPEJ5dGVTdHJpbmcsIEJ5dGVTdHJpbmc+J11cbiAgICB9KVxuICB9XG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jY29uY2VwdC1oZWFkZXJzLWFwcGVuZFxuICovXG5mdW5jdGlvbiBhcHBlbmRIZWFkZXIgKGhlYWRlcnMsIG5hbWUsIHZhbHVlKSB7XG4gIC8vIDEuIE5vcm1hbGl6ZSB2YWx1ZS5cbiAgdmFsdWUgPSBoZWFkZXJWYWx1ZU5vcm1hbGl6ZSh2YWx1ZSlcblxuICAvLyAyLiBJZiBuYW1lIGlzIG5vdCBhIGhlYWRlciBuYW1lIG9yIHZhbHVlIGlzIG5vdCBhXG4gIC8vICAgIGhlYWRlciB2YWx1ZSwgdGhlbiB0aHJvdyBhIFR5cGVFcnJvci5cbiAgaWYgKCFpc1ZhbGlkSGVhZGVyTmFtZShuYW1lKSkge1xuICAgIHRocm93IHdlYmlkbC5lcnJvcnMuaW52YWxpZEFyZ3VtZW50KHtcbiAgICAgIHByZWZpeDogJ0hlYWRlcnMuYXBwZW5kJyxcbiAgICAgIHZhbHVlOiBuYW1lLFxuICAgICAgdHlwZTogJ2hlYWRlciBuYW1lJ1xuICAgIH0pXG4gIH0gZWxzZSBpZiAoIWlzVmFsaWRIZWFkZXJWYWx1ZSh2YWx1ZSkpIHtcbiAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmludmFsaWRBcmd1bWVudCh7XG4gICAgICBwcmVmaXg6ICdIZWFkZXJzLmFwcGVuZCcsXG4gICAgICB2YWx1ZSxcbiAgICAgIHR5cGU6ICdoZWFkZXIgdmFsdWUnXG4gICAgfSlcbiAgfVxuXG4gIC8vIDMuIElmIGhlYWRlcnNcdTIwMTlzIGd1YXJkIGlzIFwiaW1tdXRhYmxlXCIsIHRoZW4gdGhyb3cgYSBUeXBlRXJyb3IuXG4gIC8vIDQuIE90aGVyd2lzZSwgaWYgaGVhZGVyc1x1MjAxOXMgZ3VhcmQgaXMgXCJyZXF1ZXN0XCIgYW5kIG5hbWUgaXMgYVxuICAvLyAgICBmb3JiaWRkZW4gaGVhZGVyIG5hbWUsIHJldHVybi5cbiAgLy8gNS4gT3RoZXJ3aXNlLCBpZiBoZWFkZXJzXHUyMDE5cyBndWFyZCBpcyBcInJlcXVlc3Qtbm8tY29yc1wiOlxuICAvLyAgICBUT0RPXG4gIC8vIE5vdGU6IHVuZGljaSBkb2VzIG5vdCBpbXBsZW1lbnQgZm9yYmlkZGVuIGhlYWRlciBuYW1lc1xuICBpZiAoZ2V0SGVhZGVyc0d1YXJkKGhlYWRlcnMpID09PSAnaW1tdXRhYmxlJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2ltbXV0YWJsZScpXG4gIH1cblxuICAvLyA2LiBPdGhlcndpc2UsIGlmIGhlYWRlcnNcdTIwMTlzIGd1YXJkIGlzIFwicmVzcG9uc2VcIiBhbmQgbmFtZSBpcyBhXG4gIC8vICAgIGZvcmJpZGRlbiByZXNwb25zZS1oZWFkZXIgbmFtZSwgcmV0dXJuLlxuXG4gIC8vIDcuIEFwcGVuZCAobmFtZSwgdmFsdWUpIHRvIGhlYWRlcnNcdTIwMTlzIGhlYWRlciBsaXN0LlxuICByZXR1cm4gZ2V0SGVhZGVyc0xpc3QoaGVhZGVycykuYXBwZW5kKG5hbWUsIHZhbHVlLCBmYWxzZSlcblxuICAvLyA4LiBJZiBoZWFkZXJzXHUyMDE5cyBndWFyZCBpcyBcInJlcXVlc3Qtbm8tY29yc1wiLCB0aGVuIHJlbW92ZVxuICAvLyAgICBwcml2aWxlZ2VkIG5vLUNPUlMgcmVxdWVzdCBoZWFkZXJzIGZyb20gaGVhZGVyc1xufVxuXG5mdW5jdGlvbiBjb21wYXJlSGVhZGVyTmFtZSAoYSwgYikge1xuICByZXR1cm4gYVswXSA8IGJbMF0gPyAtMSA6IDFcbn1cblxuY2xhc3MgSGVhZGVyc0xpc3Qge1xuICAvKiogQHR5cGUge1tzdHJpbmcsIHN0cmluZ11bXXxudWxsfSAqL1xuICBjb29raWVzID0gbnVsbFxuXG4gIGNvbnN0cnVjdG9yIChpbml0KSB7XG4gICAgaWYgKGluaXQgaW5zdGFuY2VvZiBIZWFkZXJzTGlzdCkge1xuICAgICAgdGhpc1trSGVhZGVyc01hcF0gPSBuZXcgTWFwKGluaXRba0hlYWRlcnNNYXBdKVxuICAgICAgdGhpc1trSGVhZGVyc1NvcnRlZE1hcF0gPSBpbml0W2tIZWFkZXJzU29ydGVkTWFwXVxuICAgICAgdGhpcy5jb29raWVzID0gaW5pdC5jb29raWVzID09PSBudWxsID8gbnVsbCA6IFsuLi5pbml0LmNvb2tpZXNdXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXNba0hlYWRlcnNNYXBdID0gbmV3IE1hcChpbml0KVxuICAgICAgdGhpc1trSGVhZGVyc1NvcnRlZE1hcF0gPSBudWxsXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBzZWUgaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2hlYWRlci1saXN0LWNvbnRhaW5zXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gaXNMb3dlckNhc2VcbiAgICovXG4gIGNvbnRhaW5zIChuYW1lLCBpc0xvd2VyQ2FzZSkge1xuICAgIC8vIEEgaGVhZGVyIGxpc3QgbGlzdCBjb250YWlucyBhIGhlYWRlciBuYW1lIG5hbWUgaWYgbGlzdFxuICAgIC8vIGNvbnRhaW5zIGEgaGVhZGVyIHdob3NlIG5hbWUgaXMgYSBieXRlLWNhc2UtaW5zZW5zaXRpdmVcbiAgICAvLyBtYXRjaCBmb3IgbmFtZS5cblxuICAgIHJldHVybiB0aGlzW2tIZWFkZXJzTWFwXS5oYXMoaXNMb3dlckNhc2UgPyBuYW1lIDogbmFtZS50b0xvd2VyQ2FzZSgpKVxuICB9XG5cbiAgY2xlYXIgKCkge1xuICAgIHRoaXNba0hlYWRlcnNNYXBdLmNsZWFyKClcbiAgICB0aGlzW2tIZWFkZXJzU29ydGVkTWFwXSA9IG51bGxcbiAgICB0aGlzLmNvb2tpZXMgPSBudWxsXG4gIH1cblxuICAvKipcbiAgICogQHNlZSBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jY29uY2VwdC1oZWFkZXItbGlzdC1hcHBlbmRcbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcbiAgICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gaXNMb3dlckNhc2VcbiAgICovXG4gIGFwcGVuZCAobmFtZSwgdmFsdWUsIGlzTG93ZXJDYXNlKSB7XG4gICAgdGhpc1trSGVhZGVyc1NvcnRlZE1hcF0gPSBudWxsXG5cbiAgICAvLyAxLiBJZiBsaXN0IGNvbnRhaW5zIG5hbWUsIHRoZW4gc2V0IG5hbWUgdG8gdGhlIGZpcnN0IHN1Y2hcbiAgICAvLyAgICBoZWFkZXJcdTIwMTlzIG5hbWUuXG4gICAgY29uc3QgbG93ZXJjYXNlTmFtZSA9IGlzTG93ZXJDYXNlID8gbmFtZSA6IG5hbWUudG9Mb3dlckNhc2UoKVxuICAgIGNvbnN0IGV4aXN0cyA9IHRoaXNba0hlYWRlcnNNYXBdLmdldChsb3dlcmNhc2VOYW1lKVxuXG4gICAgLy8gMi4gQXBwZW5kIChuYW1lLCB2YWx1ZSkgdG8gbGlzdC5cbiAgICBpZiAoZXhpc3RzKSB7XG4gICAgICBjb25zdCBkZWxpbWl0ZXIgPSBsb3dlcmNhc2VOYW1lID09PSAnY29va2llJyA/ICc7ICcgOiAnLCAnXG4gICAgICB0aGlzW2tIZWFkZXJzTWFwXS5zZXQobG93ZXJjYXNlTmFtZSwge1xuICAgICAgICBuYW1lOiBleGlzdHMubmFtZSxcbiAgICAgICAgdmFsdWU6IGAke2V4aXN0cy52YWx1ZX0ke2RlbGltaXRlcn0ke3ZhbHVlfWBcbiAgICAgIH0pXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXNba0hlYWRlcnNNYXBdLnNldChsb3dlcmNhc2VOYW1lLCB7IG5hbWUsIHZhbHVlIH0pXG4gICAgfVxuXG4gICAgaWYgKGxvd2VyY2FzZU5hbWUgPT09ICdzZXQtY29va2llJykge1xuICAgICAgKHRoaXMuY29va2llcyA/Pz0gW10pLnB1c2godmFsdWUpXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBzZWUgaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2NvbmNlcHQtaGVhZGVyLWxpc3Qtc2V0XG4gICAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IGlzTG93ZXJDYXNlXG4gICAqL1xuICBzZXQgKG5hbWUsIHZhbHVlLCBpc0xvd2VyQ2FzZSkge1xuICAgIHRoaXNba0hlYWRlcnNTb3J0ZWRNYXBdID0gbnVsbFxuICAgIGNvbnN0IGxvd2VyY2FzZU5hbWUgPSBpc0xvd2VyQ2FzZSA/IG5hbWUgOiBuYW1lLnRvTG93ZXJDYXNlKClcblxuICAgIGlmIChsb3dlcmNhc2VOYW1lID09PSAnc2V0LWNvb2tpZScpIHtcbiAgICAgIHRoaXMuY29va2llcyA9IFt2YWx1ZV1cbiAgICB9XG5cbiAgICAvLyAxLiBJZiBsaXN0IGNvbnRhaW5zIG5hbWUsIHRoZW4gc2V0IHRoZSB2YWx1ZSBvZlxuICAgIC8vICAgIHRoZSBmaXJzdCBzdWNoIGhlYWRlciB0byB2YWx1ZSBhbmQgcmVtb3ZlIHRoZVxuICAgIC8vICAgIG90aGVycy5cbiAgICAvLyAyLiBPdGhlcndpc2UsIGFwcGVuZCBoZWFkZXIgKG5hbWUsIHZhbHVlKSB0byBsaXN0LlxuICAgIHRoaXNba0hlYWRlcnNNYXBdLnNldChsb3dlcmNhc2VOYW1lLCB7IG5hbWUsIHZhbHVlIH0pXG4gIH1cblxuICAvKipcbiAgICogQHNlZSBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jY29uY2VwdC1oZWFkZXItbGlzdC1kZWxldGVcbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcbiAgICogQHBhcmFtIHtib29sZWFufSBpc0xvd2VyQ2FzZVxuICAgKi9cbiAgZGVsZXRlIChuYW1lLCBpc0xvd2VyQ2FzZSkge1xuICAgIHRoaXNba0hlYWRlcnNTb3J0ZWRNYXBdID0gbnVsbFxuICAgIGlmICghaXNMb3dlckNhc2UpIG5hbWUgPSBuYW1lLnRvTG93ZXJDYXNlKClcblxuICAgIGlmIChuYW1lID09PSAnc2V0LWNvb2tpZScpIHtcbiAgICAgIHRoaXMuY29va2llcyA9IG51bGxcbiAgICB9XG5cbiAgICB0aGlzW2tIZWFkZXJzTWFwXS5kZWxldGUobmFtZSlcbiAgfVxuXG4gIC8qKlxuICAgKiBAc2VlIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNjb25jZXB0LWhlYWRlci1saXN0LWdldFxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IGlzTG93ZXJDYXNlXG4gICAqIEByZXR1cm5zIHtzdHJpbmcgfCBudWxsfVxuICAgKi9cbiAgZ2V0IChuYW1lLCBpc0xvd2VyQ2FzZSkge1xuICAgIC8vIDEuIElmIGxpc3QgZG9lcyBub3QgY29udGFpbiBuYW1lLCB0aGVuIHJldHVybiBudWxsLlxuICAgIC8vIDIuIFJldHVybiB0aGUgdmFsdWVzIG9mIGFsbCBoZWFkZXJzIGluIGxpc3Qgd2hvc2UgbmFtZVxuICAgIC8vICAgIGlzIGEgYnl0ZS1jYXNlLWluc2Vuc2l0aXZlIG1hdGNoIGZvciBuYW1lLFxuICAgIC8vICAgIHNlcGFyYXRlZCBmcm9tIGVhY2ggb3RoZXIgYnkgMHgyQyAweDIwLCBpbiBvcmRlci5cbiAgICByZXR1cm4gdGhpc1trSGVhZGVyc01hcF0uZ2V0KGlzTG93ZXJDYXNlID8gbmFtZSA6IG5hbWUudG9Mb3dlckNhc2UoKSk/LnZhbHVlID8/IG51bGxcbiAgfVxuXG4gICogW1N5bWJvbC5pdGVyYXRvcl0gKCkge1xuICAgIC8vIHVzZSB0aGUgbG93ZXJjYXNlZCBuYW1lXG4gICAgZm9yIChjb25zdCB7IDA6IG5hbWUsIDE6IHsgdmFsdWUgfSB9IG9mIHRoaXNba0hlYWRlcnNNYXBdKSB7XG4gICAgICB5aWVsZCBbbmFtZSwgdmFsdWVdXG4gICAgfVxuICB9XG5cbiAgZ2V0IGVudHJpZXMgKCkge1xuICAgIGNvbnN0IGhlYWRlcnMgPSB7fVxuXG4gICAgaWYgKHRoaXNba0hlYWRlcnNNYXBdLnNpemUgIT09IDApIHtcbiAgICAgIGZvciAoY29uc3QgeyBuYW1lLCB2YWx1ZSB9IG9mIHRoaXNba0hlYWRlcnNNYXBdLnZhbHVlcygpKSB7XG4gICAgICAgIGhlYWRlcnNbbmFtZV0gPSB2YWx1ZVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBoZWFkZXJzXG4gIH1cblxuICByYXdWYWx1ZXMgKCkge1xuICAgIHJldHVybiB0aGlzW2tIZWFkZXJzTWFwXS52YWx1ZXMoKVxuICB9XG5cbiAgZ2V0IGVudHJpZXNMaXN0ICgpIHtcbiAgICBjb25zdCBoZWFkZXJzID0gW11cblxuICAgIGlmICh0aGlzW2tIZWFkZXJzTWFwXS5zaXplICE9PSAwKSB7XG4gICAgICBmb3IgKGNvbnN0IHsgMDogbG93ZXJOYW1lLCAxOiB7IG5hbWUsIHZhbHVlIH0gfSBvZiB0aGlzW2tIZWFkZXJzTWFwXSkge1xuICAgICAgICBpZiAobG93ZXJOYW1lID09PSAnc2V0LWNvb2tpZScpIHtcbiAgICAgICAgICBmb3IgKGNvbnN0IGNvb2tpZSBvZiB0aGlzLmNvb2tpZXMpIHtcbiAgICAgICAgICAgIGhlYWRlcnMucHVzaChbbmFtZSwgY29va2llXSlcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaGVhZGVycy5wdXNoKFtuYW1lLCB2YWx1ZV0pXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gaGVhZGVyc1xuICB9XG5cbiAgLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2NvbnZlcnQtaGVhZGVyLW5hbWVzLXRvLWEtc29ydGVkLWxvd2VyY2FzZS1zZXRcbiAgdG9Tb3J0ZWRBcnJheSAoKSB7XG4gICAgY29uc3Qgc2l6ZSA9IHRoaXNba0hlYWRlcnNNYXBdLnNpemVcbiAgICBjb25zdCBhcnJheSA9IG5ldyBBcnJheShzaXplKVxuICAgIC8vIEluIG1vc3QgY2FzZXMsIHlvdSB3aWxsIHVzZSB0aGUgZmFzdC1wYXRoLlxuICAgIC8vIGZhc3QtcGF0aDogVXNlIGJpbmFyeSBpbnNlcnRpb24gc29ydCBmb3Igc21hbGwgYXJyYXlzLlxuICAgIGlmIChzaXplIDw9IDMyKSB7XG4gICAgICBpZiAoc2l6ZSA9PT0gMCkge1xuICAgICAgICAvLyBJZiBlbXB0eSwgaXQgaXMgYW4gZW1wdHkgYXJyYXkuIFRvIGF2b2lkIHRoZSBmaXJzdCBpbmRleCBhc3NpZ25tZW50LlxuICAgICAgICByZXR1cm4gYXJyYXlcbiAgICAgIH1cbiAgICAgIC8vIEltcHJvdmUgcGVyZm9ybWFuY2UgYnkgdW5yb2xsaW5nIGxvb3AgYW5kIGF2b2lkaW5nIGRvdWJsZS1sb29wLlxuICAgICAgLy8gRG91YmxlLWxvb3AtbGVzcyB2ZXJzaW9uIG9mIHRoZSBiaW5hcnkgaW5zZXJ0aW9uIHNvcnQuXG4gICAgICBjb25zdCBpdGVyYXRvciA9IHRoaXNba0hlYWRlcnNNYXBdW1N5bWJvbC5pdGVyYXRvcl0oKVxuICAgICAgY29uc3QgZmlyc3RWYWx1ZSA9IGl0ZXJhdG9yLm5leHQoKS52YWx1ZVxuICAgICAgLy8gc2V0IFtuYW1lLCB2YWx1ZV0gdG8gZmlyc3QgaW5kZXguXG4gICAgICBhcnJheVswXSA9IFtmaXJzdFZhbHVlWzBdLCBmaXJzdFZhbHVlWzFdLnZhbHVlXVxuICAgICAgLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2NvbmNlcHQtaGVhZGVyLWxpc3Qtc29ydC1hbmQtY29tYmluZVxuICAgICAgLy8gMy4yLjIuIEFzc2VydDogdmFsdWUgaXMgbm9uLW51bGwuXG4gICAgICBhc3NlcnQoZmlyc3RWYWx1ZVsxXS52YWx1ZSAhPT0gbnVsbClcbiAgICAgIGZvciAoXG4gICAgICAgIGxldCBpID0gMSwgaiA9IDAsIHJpZ2h0ID0gMCwgbGVmdCA9IDAsIHBpdm90ID0gMCwgeCwgdmFsdWU7XG4gICAgICAgIGkgPCBzaXplO1xuICAgICAgICArK2lcbiAgICAgICkge1xuICAgICAgICAvLyBnZXQgbmV4dCB2YWx1ZVxuICAgICAgICB2YWx1ZSA9IGl0ZXJhdG9yLm5leHQoKS52YWx1ZVxuICAgICAgICAvLyBzZXQgW25hbWUsIHZhbHVlXSB0byBjdXJyZW50IGluZGV4LlxuICAgICAgICB4ID0gYXJyYXlbaV0gPSBbdmFsdWVbMF0sIHZhbHVlWzFdLnZhbHVlXVxuICAgICAgICAvLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jY29uY2VwdC1oZWFkZXItbGlzdC1zb3J0LWFuZC1jb21iaW5lXG4gICAgICAgIC8vIDMuMi4yLiBBc3NlcnQ6IHZhbHVlIGlzIG5vbi1udWxsLlxuICAgICAgICBhc3NlcnQoeFsxXSAhPT0gbnVsbClcbiAgICAgICAgbGVmdCA9IDBcbiAgICAgICAgcmlnaHQgPSBpXG4gICAgICAgIC8vIGJpbmFyeSBzZWFyY2hcbiAgICAgICAgd2hpbGUgKGxlZnQgPCByaWdodCkge1xuICAgICAgICAgIC8vIG1pZGRsZSBpbmRleFxuICAgICAgICAgIHBpdm90ID0gbGVmdCArICgocmlnaHQgLSBsZWZ0KSA+PiAxKVxuICAgICAgICAgIC8vIGNvbXBhcmUgaGVhZGVyIG5hbWVcbiAgICAgICAgICBpZiAoYXJyYXlbcGl2b3RdWzBdIDw9IHhbMF0pIHtcbiAgICAgICAgICAgIGxlZnQgPSBwaXZvdCArIDFcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmlnaHQgPSBwaXZvdFxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoaSAhPT0gcGl2b3QpIHtcbiAgICAgICAgICBqID0gaVxuICAgICAgICAgIHdoaWxlIChqID4gbGVmdCkge1xuICAgICAgICAgICAgYXJyYXlbal0gPSBhcnJheVstLWpdXG4gICAgICAgICAgfVxuICAgICAgICAgIGFycmF5W2xlZnRdID0geFxuICAgICAgICB9XG4gICAgICB9XG4gICAgICAvKiBjOCBpZ25vcmUgbmV4dCA0ICovXG4gICAgICBpZiAoIWl0ZXJhdG9yLm5leHQoKS5kb25lKSB7XG4gICAgICAgIC8vIFRoaXMgaXMgZm9yIGRlYnVnZ2luZyBhbmQgd2lsbCBuZXZlciBiZSBjYWxsZWQuXG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1VucmVhY2hhYmxlJylcbiAgICAgIH1cbiAgICAgIHJldHVybiBhcnJheVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyBUaGlzIGNhc2Ugd291bGQgYmUgYSByYXJlIG9jY3VycmVuY2UuXG4gICAgICAvLyBzbG93LXBhdGg6IGZhbGxiYWNrXG4gICAgICBsZXQgaSA9IDBcbiAgICAgIGZvciAoY29uc3QgeyAwOiBuYW1lLCAxOiB7IHZhbHVlIH0gfSBvZiB0aGlzW2tIZWFkZXJzTWFwXSkge1xuICAgICAgICBhcnJheVtpKytdID0gW25hbWUsIHZhbHVlXVxuICAgICAgICAvLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jY29uY2VwdC1oZWFkZXItbGlzdC1zb3J0LWFuZC1jb21iaW5lXG4gICAgICAgIC8vIDMuMi4yLiBBc3NlcnQ6IHZhbHVlIGlzIG5vbi1udWxsLlxuICAgICAgICBhc3NlcnQodmFsdWUgIT09IG51bGwpXG4gICAgICB9XG4gICAgICByZXR1cm4gYXJyYXkuc29ydChjb21wYXJlSGVhZGVyTmFtZSlcbiAgICB9XG4gIH1cbn1cblxuLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2hlYWRlcnMtY2xhc3NcbmNsYXNzIEhlYWRlcnMge1xuICAjZ3VhcmRcbiAgI2hlYWRlcnNMaXN0XG5cbiAgY29uc3RydWN0b3IgKGluaXQgPSB1bmRlZmluZWQpIHtcbiAgICB3ZWJpZGwudXRpbC5tYXJrQXNVbmNsb25lYWJsZSh0aGlzKVxuXG4gICAgaWYgKGluaXQgPT09IGtDb25zdHJ1Y3QpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIHRoaXMuI2hlYWRlcnNMaXN0ID0gbmV3IEhlYWRlcnNMaXN0KClcblxuICAgIC8vIFRoZSBuZXcgSGVhZGVycyhpbml0KSBjb25zdHJ1Y3RvciBzdGVwcyBhcmU6XG5cbiAgICAvLyAxLiBTZXQgdGhpc1x1MjAxOXMgZ3VhcmQgdG8gXCJub25lXCIuXG4gICAgdGhpcy4jZ3VhcmQgPSAnbm9uZSdcblxuICAgIC8vIDIuIElmIGluaXQgaXMgZ2l2ZW4sIHRoZW4gZmlsbCB0aGlzIHdpdGggaW5pdC5cbiAgICBpZiAoaW5pdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBpbml0ID0gd2ViaWRsLmNvbnZlcnRlcnMuSGVhZGVyc0luaXQoaW5pdCwgJ0hlYWRlcnMgY29udHJ1Y3RvcicsICdpbml0JylcbiAgICAgIGZpbGwodGhpcywgaW5pdClcbiAgICB9XG4gIH1cblxuICAvLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jZG9tLWhlYWRlcnMtYXBwZW5kXG4gIGFwcGVuZCAobmFtZSwgdmFsdWUpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBIZWFkZXJzKVxuXG4gICAgd2ViaWRsLmFyZ3VtZW50TGVuZ3RoQ2hlY2soYXJndW1lbnRzLCAyLCAnSGVhZGVycy5hcHBlbmQnKVxuXG4gICAgY29uc3QgcHJlZml4ID0gJ0hlYWRlcnMuYXBwZW5kJ1xuICAgIG5hbWUgPSB3ZWJpZGwuY29udmVydGVycy5CeXRlU3RyaW5nKG5hbWUsIHByZWZpeCwgJ25hbWUnKVxuICAgIHZhbHVlID0gd2ViaWRsLmNvbnZlcnRlcnMuQnl0ZVN0cmluZyh2YWx1ZSwgcHJlZml4LCAndmFsdWUnKVxuXG4gICAgcmV0dXJuIGFwcGVuZEhlYWRlcih0aGlzLCBuYW1lLCB2YWx1ZSlcbiAgfVxuXG4gIC8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNkb20taGVhZGVycy1kZWxldGVcbiAgZGVsZXRlIChuYW1lKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgSGVhZGVycylcblxuICAgIHdlYmlkbC5hcmd1bWVudExlbmd0aENoZWNrKGFyZ3VtZW50cywgMSwgJ0hlYWRlcnMuZGVsZXRlJylcblxuICAgIGNvbnN0IHByZWZpeCA9ICdIZWFkZXJzLmRlbGV0ZSdcbiAgICBuYW1lID0gd2ViaWRsLmNvbnZlcnRlcnMuQnl0ZVN0cmluZyhuYW1lLCBwcmVmaXgsICduYW1lJylcblxuICAgIC8vIDEuIElmIG5hbWUgaXMgbm90IGEgaGVhZGVyIG5hbWUsIHRoZW4gdGhyb3cgYSBUeXBlRXJyb3IuXG4gICAgaWYgKCFpc1ZhbGlkSGVhZGVyTmFtZShuYW1lKSkge1xuICAgICAgdGhyb3cgd2ViaWRsLmVycm9ycy5pbnZhbGlkQXJndW1lbnQoe1xuICAgICAgICBwcmVmaXg6ICdIZWFkZXJzLmRlbGV0ZScsXG4gICAgICAgIHZhbHVlOiBuYW1lLFxuICAgICAgICB0eXBlOiAnaGVhZGVyIG5hbWUnXG4gICAgICB9KVxuICAgIH1cblxuICAgIC8vIDIuIElmIHRoaXNcdTIwMTlzIGd1YXJkIGlzIFwiaW1tdXRhYmxlXCIsIHRoZW4gdGhyb3cgYSBUeXBlRXJyb3IuXG4gICAgLy8gMy4gT3RoZXJ3aXNlLCBpZiB0aGlzXHUyMDE5cyBndWFyZCBpcyBcInJlcXVlc3RcIiBhbmQgbmFtZSBpcyBhXG4gICAgLy8gICAgZm9yYmlkZGVuIGhlYWRlciBuYW1lLCByZXR1cm4uXG4gICAgLy8gNC4gT3RoZXJ3aXNlLCBpZiB0aGlzXHUyMDE5cyBndWFyZCBpcyBcInJlcXVlc3Qtbm8tY29yc1wiLCBuYW1lXG4gICAgLy8gICAgaXMgbm90IGEgbm8tQ09SUy1zYWZlbGlzdGVkIHJlcXVlc3QtaGVhZGVyIG5hbWUsIGFuZFxuICAgIC8vICAgIG5hbWUgaXMgbm90IGEgcHJpdmlsZWdlZCBuby1DT1JTIHJlcXVlc3QtaGVhZGVyIG5hbWUsXG4gICAgLy8gICAgcmV0dXJuLlxuICAgIC8vIDUuIE90aGVyd2lzZSwgaWYgdGhpc1x1MjAxOXMgZ3VhcmQgaXMgXCJyZXNwb25zZVwiIGFuZCBuYW1lIGlzXG4gICAgLy8gICAgYSBmb3JiaWRkZW4gcmVzcG9uc2UtaGVhZGVyIG5hbWUsIHJldHVybi5cbiAgICAvLyBOb3RlOiB1bmRpY2kgZG9lcyBub3QgaW1wbGVtZW50IGZvcmJpZGRlbiBoZWFkZXIgbmFtZXNcbiAgICBpZiAodGhpcy4jZ3VhcmQgPT09ICdpbW11dGFibGUnKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdpbW11dGFibGUnKVxuICAgIH1cblxuICAgIC8vIDYuIElmIHRoaXNcdTIwMTlzIGhlYWRlciBsaXN0IGRvZXMgbm90IGNvbnRhaW4gbmFtZSwgdGhlblxuICAgIC8vICAgIHJldHVybi5cbiAgICBpZiAoIXRoaXMuI2hlYWRlcnNMaXN0LmNvbnRhaW5zKG5hbWUsIGZhbHNlKSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgLy8gNy4gRGVsZXRlIG5hbWUgZnJvbSB0aGlzXHUyMDE5cyBoZWFkZXIgbGlzdC5cbiAgICAvLyA4LiBJZiB0aGlzXHUyMDE5cyBndWFyZCBpcyBcInJlcXVlc3Qtbm8tY29yc1wiLCB0aGVuIHJlbW92ZVxuICAgIC8vICAgIHByaXZpbGVnZWQgbm8tQ09SUyByZXF1ZXN0IGhlYWRlcnMgZnJvbSB0aGlzLlxuICAgIHRoaXMuI2hlYWRlcnNMaXN0LmRlbGV0ZShuYW1lLCBmYWxzZSlcbiAgfVxuXG4gIC8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNkb20taGVhZGVycy1nZXRcbiAgZ2V0IChuYW1lKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgSGVhZGVycylcblxuICAgIHdlYmlkbC5hcmd1bWVudExlbmd0aENoZWNrKGFyZ3VtZW50cywgMSwgJ0hlYWRlcnMuZ2V0JylcblxuICAgIGNvbnN0IHByZWZpeCA9ICdIZWFkZXJzLmdldCdcbiAgICBuYW1lID0gd2ViaWRsLmNvbnZlcnRlcnMuQnl0ZVN0cmluZyhuYW1lLCBwcmVmaXgsICduYW1lJylcblxuICAgIC8vIDEuIElmIG5hbWUgaXMgbm90IGEgaGVhZGVyIG5hbWUsIHRoZW4gdGhyb3cgYSBUeXBlRXJyb3IuXG4gICAgaWYgKCFpc1ZhbGlkSGVhZGVyTmFtZShuYW1lKSkge1xuICAgICAgdGhyb3cgd2ViaWRsLmVycm9ycy5pbnZhbGlkQXJndW1lbnQoe1xuICAgICAgICBwcmVmaXgsXG4gICAgICAgIHZhbHVlOiBuYW1lLFxuICAgICAgICB0eXBlOiAnaGVhZGVyIG5hbWUnXG4gICAgICB9KVxuICAgIH1cblxuICAgIC8vIDIuIFJldHVybiB0aGUgcmVzdWx0IG9mIGdldHRpbmcgbmFtZSBmcm9tIHRoaXNcdTIwMTlzIGhlYWRlclxuICAgIC8vICAgIGxpc3QuXG4gICAgcmV0dXJuIHRoaXMuI2hlYWRlcnNMaXN0LmdldChuYW1lLCBmYWxzZSlcbiAgfVxuXG4gIC8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNkb20taGVhZGVycy1oYXNcbiAgaGFzIChuYW1lKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgSGVhZGVycylcblxuICAgIHdlYmlkbC5hcmd1bWVudExlbmd0aENoZWNrKGFyZ3VtZW50cywgMSwgJ0hlYWRlcnMuaGFzJylcblxuICAgIGNvbnN0IHByZWZpeCA9ICdIZWFkZXJzLmhhcydcbiAgICBuYW1lID0gd2ViaWRsLmNvbnZlcnRlcnMuQnl0ZVN0cmluZyhuYW1lLCBwcmVmaXgsICduYW1lJylcblxuICAgIC8vIDEuIElmIG5hbWUgaXMgbm90IGEgaGVhZGVyIG5hbWUsIHRoZW4gdGhyb3cgYSBUeXBlRXJyb3IuXG4gICAgaWYgKCFpc1ZhbGlkSGVhZGVyTmFtZShuYW1lKSkge1xuICAgICAgdGhyb3cgd2ViaWRsLmVycm9ycy5pbnZhbGlkQXJndW1lbnQoe1xuICAgICAgICBwcmVmaXgsXG4gICAgICAgIHZhbHVlOiBuYW1lLFxuICAgICAgICB0eXBlOiAnaGVhZGVyIG5hbWUnXG4gICAgICB9KVxuICAgIH1cblxuICAgIC8vIDIuIFJldHVybiB0cnVlIGlmIHRoaXNcdTIwMTlzIGhlYWRlciBsaXN0IGNvbnRhaW5zIG5hbWU7XG4gICAgLy8gICAgb3RoZXJ3aXNlIGZhbHNlLlxuICAgIHJldHVybiB0aGlzLiNoZWFkZXJzTGlzdC5jb250YWlucyhuYW1lLCBmYWxzZSlcbiAgfVxuXG4gIC8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNkb20taGVhZGVycy1zZXRcbiAgc2V0IChuYW1lLCB2YWx1ZSkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEhlYWRlcnMpXG5cbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDIsICdIZWFkZXJzLnNldCcpXG5cbiAgICBjb25zdCBwcmVmaXggPSAnSGVhZGVycy5zZXQnXG4gICAgbmFtZSA9IHdlYmlkbC5jb252ZXJ0ZXJzLkJ5dGVTdHJpbmcobmFtZSwgcHJlZml4LCAnbmFtZScpXG4gICAgdmFsdWUgPSB3ZWJpZGwuY29udmVydGVycy5CeXRlU3RyaW5nKHZhbHVlLCBwcmVmaXgsICd2YWx1ZScpXG5cbiAgICAvLyAxLiBOb3JtYWxpemUgdmFsdWUuXG4gICAgdmFsdWUgPSBoZWFkZXJWYWx1ZU5vcm1hbGl6ZSh2YWx1ZSlcblxuICAgIC8vIDIuIElmIG5hbWUgaXMgbm90IGEgaGVhZGVyIG5hbWUgb3IgdmFsdWUgaXMgbm90IGFcbiAgICAvLyAgICBoZWFkZXIgdmFsdWUsIHRoZW4gdGhyb3cgYSBUeXBlRXJyb3IuXG4gICAgaWYgKCFpc1ZhbGlkSGVhZGVyTmFtZShuYW1lKSkge1xuICAgICAgdGhyb3cgd2ViaWRsLmVycm9ycy5pbnZhbGlkQXJndW1lbnQoe1xuICAgICAgICBwcmVmaXgsXG4gICAgICAgIHZhbHVlOiBuYW1lLFxuICAgICAgICB0eXBlOiAnaGVhZGVyIG5hbWUnXG4gICAgICB9KVxuICAgIH0gZWxzZSBpZiAoIWlzVmFsaWRIZWFkZXJWYWx1ZSh2YWx1ZSkpIHtcbiAgICAgIHRocm93IHdlYmlkbC5lcnJvcnMuaW52YWxpZEFyZ3VtZW50KHtcbiAgICAgICAgcHJlZml4LFxuICAgICAgICB2YWx1ZSxcbiAgICAgICAgdHlwZTogJ2hlYWRlciB2YWx1ZSdcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgLy8gMy4gSWYgdGhpc1x1MjAxOXMgZ3VhcmQgaXMgXCJpbW11dGFibGVcIiwgdGhlbiB0aHJvdyBhIFR5cGVFcnJvci5cbiAgICAvLyA0LiBPdGhlcndpc2UsIGlmIHRoaXNcdTIwMTlzIGd1YXJkIGlzIFwicmVxdWVzdFwiIGFuZCBuYW1lIGlzIGFcbiAgICAvLyAgICBmb3JiaWRkZW4gaGVhZGVyIG5hbWUsIHJldHVybi5cbiAgICAvLyA1LiBPdGhlcndpc2UsIGlmIHRoaXNcdTIwMTlzIGd1YXJkIGlzIFwicmVxdWVzdC1uby1jb3JzXCIgYW5kXG4gICAgLy8gICAgbmFtZS92YWx1ZSBpcyBub3QgYSBuby1DT1JTLXNhZmVsaXN0ZWQgcmVxdWVzdC1oZWFkZXIsXG4gICAgLy8gICAgcmV0dXJuLlxuICAgIC8vIDYuIE90aGVyd2lzZSwgaWYgdGhpc1x1MjAxOXMgZ3VhcmQgaXMgXCJyZXNwb25zZVwiIGFuZCBuYW1lIGlzIGFcbiAgICAvLyAgICBmb3JiaWRkZW4gcmVzcG9uc2UtaGVhZGVyIG5hbWUsIHJldHVybi5cbiAgICAvLyBOb3RlOiB1bmRpY2kgZG9lcyBub3QgaW1wbGVtZW50IGZvcmJpZGRlbiBoZWFkZXIgbmFtZXNcbiAgICBpZiAodGhpcy4jZ3VhcmQgPT09ICdpbW11dGFibGUnKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdpbW11dGFibGUnKVxuICAgIH1cblxuICAgIC8vIDcuIFNldCAobmFtZSwgdmFsdWUpIGluIHRoaXNcdTIwMTlzIGhlYWRlciBsaXN0LlxuICAgIC8vIDguIElmIHRoaXNcdTIwMTlzIGd1YXJkIGlzIFwicmVxdWVzdC1uby1jb3JzXCIsIHRoZW4gcmVtb3ZlXG4gICAgLy8gICAgcHJpdmlsZWdlZCBuby1DT1JTIHJlcXVlc3QgaGVhZGVycyBmcm9tIHRoaXNcbiAgICB0aGlzLiNoZWFkZXJzTGlzdC5zZXQobmFtZSwgdmFsdWUsIGZhbHNlKVxuICB9XG5cbiAgLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2RvbS1oZWFkZXJzLWdldHNldGNvb2tpZVxuICBnZXRTZXRDb29raWUgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEhlYWRlcnMpXG5cbiAgICAvLyAxLiBJZiB0aGlzXHUyMDE5cyBoZWFkZXIgbGlzdCBkb2VzIG5vdCBjb250YWluIGBTZXQtQ29va2llYCwgdGhlbiByZXR1cm4gXHUwMEFCIFx1MDBCQi5cbiAgICAvLyAyLiBSZXR1cm4gdGhlIHZhbHVlcyBvZiBhbGwgaGVhZGVycyBpbiB0aGlzXHUyMDE5cyBoZWFkZXIgbGlzdCB3aG9zZSBuYW1lIGlzXG4gICAgLy8gICAgYSBieXRlLWNhc2UtaW5zZW5zaXRpdmUgbWF0Y2ggZm9yIGBTZXQtQ29va2llYCwgaW4gb3JkZXIuXG5cbiAgICBjb25zdCBsaXN0ID0gdGhpcy4jaGVhZGVyc0xpc3QuY29va2llc1xuXG4gICAgaWYgKGxpc3QpIHtcbiAgICAgIHJldHVybiBbLi4ubGlzdF1cbiAgICB9XG5cbiAgICByZXR1cm4gW11cbiAgfVxuXG4gIC8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNjb25jZXB0LWhlYWRlci1saXN0LXNvcnQtYW5kLWNvbWJpbmVcbiAgZ2V0IFtrSGVhZGVyc1NvcnRlZE1hcF0gKCkge1xuICAgIGlmICh0aGlzLiNoZWFkZXJzTGlzdFtrSGVhZGVyc1NvcnRlZE1hcF0pIHtcbiAgICAgIHJldHVybiB0aGlzLiNoZWFkZXJzTGlzdFtrSGVhZGVyc1NvcnRlZE1hcF1cbiAgICB9XG5cbiAgICAvLyAxLiBMZXQgaGVhZGVycyBiZSBhbiBlbXB0eSBsaXN0IG9mIGhlYWRlcnMgd2l0aCB0aGUga2V5IGJlaW5nIHRoZSBuYW1lXG4gICAgLy8gICAgYW5kIHZhbHVlIHRoZSB2YWx1ZS5cbiAgICBjb25zdCBoZWFkZXJzID0gW11cblxuICAgIC8vIDIuIExldCBuYW1lcyBiZSB0aGUgcmVzdWx0IG9mIGNvbnZlcnQgaGVhZGVyIG5hbWVzIHRvIGEgc29ydGVkLWxvd2VyY2FzZVxuICAgIC8vICAgIHNldCB3aXRoIGFsbCB0aGUgbmFtZXMgb2YgdGhlIGhlYWRlcnMgaW4gbGlzdC5cbiAgICBjb25zdCBuYW1lcyA9IHRoaXMuI2hlYWRlcnNMaXN0LnRvU29ydGVkQXJyYXkoKVxuXG4gICAgY29uc3QgY29va2llcyA9IHRoaXMuI2hlYWRlcnNMaXN0LmNvb2tpZXNcblxuICAgIC8vIGZhc3QtcGF0aFxuICAgIGlmIChjb29raWVzID09PSBudWxsIHx8IGNvb2tpZXMubGVuZ3RoID09PSAxKSB7XG4gICAgICAvLyBOb3RlOiBUaGUgbm9uLW51bGwgYXNzZXJ0aW9uIG9mIHZhbHVlIGhhcyBhbHJlYWR5IGJlZW4gZG9uZSBieSBgSGVhZGVyc0xpc3QjdG9Tb3J0ZWRBcnJheWBcbiAgICAgIHJldHVybiAodGhpcy4jaGVhZGVyc0xpc3Rba0hlYWRlcnNTb3J0ZWRNYXBdID0gbmFtZXMpXG4gICAgfVxuXG4gICAgLy8gMy4gRm9yIGVhY2ggbmFtZSBvZiBuYW1lczpcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5hbWVzLmxlbmd0aDsgKytpKSB7XG4gICAgICBjb25zdCB7IDA6IG5hbWUsIDE6IHZhbHVlIH0gPSBuYW1lc1tpXVxuICAgICAgLy8gMS4gSWYgbmFtZSBpcyBgc2V0LWNvb2tpZWAsIHRoZW46XG4gICAgICBpZiAobmFtZSA9PT0gJ3NldC1jb29raWUnKSB7XG4gICAgICAgIC8vIDEuIExldCB2YWx1ZXMgYmUgYSBsaXN0IG9mIGFsbCB2YWx1ZXMgb2YgaGVhZGVycyBpbiBsaXN0IHdob3NlIG5hbWVcbiAgICAgICAgLy8gICAgaXMgYSBieXRlLWNhc2UtaW5zZW5zaXRpdmUgbWF0Y2ggZm9yIG5hbWUsIGluIG9yZGVyLlxuXG4gICAgICAgIC8vIDIuIEZvciBlYWNoIHZhbHVlIG9mIHZhbHVlczpcbiAgICAgICAgLy8gMS4gQXBwZW5kIChuYW1lLCB2YWx1ZSkgdG8gaGVhZGVycy5cbiAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBjb29raWVzLmxlbmd0aDsgKytqKSB7XG4gICAgICAgICAgaGVhZGVycy5wdXNoKFtuYW1lLCBjb29raWVzW2pdXSlcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gMi4gT3RoZXJ3aXNlOlxuXG4gICAgICAgIC8vIDEuIExldCB2YWx1ZSBiZSB0aGUgcmVzdWx0IG9mIGdldHRpbmcgbmFtZSBmcm9tIGxpc3QuXG5cbiAgICAgICAgLy8gMi4gQXNzZXJ0OiB2YWx1ZSBpcyBub24tbnVsbC5cbiAgICAgICAgLy8gTm90ZTogVGhpcyBvcGVyYXRpb24gd2FzIGRvbmUgYnkgYEhlYWRlcnNMaXN0I3RvU29ydGVkQXJyYXlgLlxuXG4gICAgICAgIC8vIDMuIEFwcGVuZCAobmFtZSwgdmFsdWUpIHRvIGhlYWRlcnMuXG4gICAgICAgIGhlYWRlcnMucHVzaChbbmFtZSwgdmFsdWVdKVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIDQuIFJldHVybiBoZWFkZXJzLlxuICAgIHJldHVybiAodGhpcy4jaGVhZGVyc0xpc3Rba0hlYWRlcnNTb3J0ZWRNYXBdID0gaGVhZGVycylcbiAgfVxuXG4gIFt1dGlsLmluc3BlY3QuY3VzdG9tXSAoZGVwdGgsIG9wdGlvbnMpIHtcbiAgICBvcHRpb25zLmRlcHRoID8/PSBkZXB0aFxuXG4gICAgcmV0dXJuIGBIZWFkZXJzICR7dXRpbC5mb3JtYXRXaXRoT3B0aW9ucyhvcHRpb25zLCB0aGlzLiNoZWFkZXJzTGlzdC5lbnRyaWVzKX1gXG4gIH1cblxuICBzdGF0aWMgZ2V0SGVhZGVyc0d1YXJkIChvKSB7XG4gICAgcmV0dXJuIG8uI2d1YXJkXG4gIH1cblxuICBzdGF0aWMgc2V0SGVhZGVyc0d1YXJkIChvLCBndWFyZCkge1xuICAgIG8uI2d1YXJkID0gZ3VhcmRcbiAgfVxuXG4gIHN0YXRpYyBnZXRIZWFkZXJzTGlzdCAobykge1xuICAgIHJldHVybiBvLiNoZWFkZXJzTGlzdFxuICB9XG5cbiAgc3RhdGljIHNldEhlYWRlcnNMaXN0IChvLCBsaXN0KSB7XG4gICAgby4jaGVhZGVyc0xpc3QgPSBsaXN0XG4gIH1cbn1cblxuY29uc3QgeyBnZXRIZWFkZXJzR3VhcmQsIHNldEhlYWRlcnNHdWFyZCwgZ2V0SGVhZGVyc0xpc3QsIHNldEhlYWRlcnNMaXN0IH0gPSBIZWFkZXJzXG5SZWZsZWN0LmRlbGV0ZVByb3BlcnR5KEhlYWRlcnMsICdnZXRIZWFkZXJzR3VhcmQnKVxuUmVmbGVjdC5kZWxldGVQcm9wZXJ0eShIZWFkZXJzLCAnc2V0SGVhZGVyc0d1YXJkJylcblJlZmxlY3QuZGVsZXRlUHJvcGVydHkoSGVhZGVycywgJ2dldEhlYWRlcnNMaXN0JylcblJlZmxlY3QuZGVsZXRlUHJvcGVydHkoSGVhZGVycywgJ3NldEhlYWRlcnNMaXN0JylcblxuaXRlcmF0b3JNaXhpbignSGVhZGVycycsIEhlYWRlcnMsIGtIZWFkZXJzU29ydGVkTWFwLCAwLCAxKVxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhIZWFkZXJzLnByb3RvdHlwZSwge1xuICBhcHBlbmQ6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGRlbGV0ZToga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgZ2V0OiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBoYXM6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIHNldDoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgZ2V0U2V0Q29va2llOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBbU3ltYm9sLnRvU3RyaW5nVGFnXToge1xuICAgIHZhbHVlOiAnSGVhZGVycycsXG4gICAgY29uZmlndXJhYmxlOiB0cnVlXG4gIH0sXG4gIFt1dGlsLmluc3BlY3QuY3VzdG9tXToge1xuICAgIGVudW1lcmFibGU6IGZhbHNlXG4gIH1cbn0pXG5cbndlYmlkbC5jb252ZXJ0ZXJzLkhlYWRlcnNJbml0ID0gZnVuY3Rpb24gKFYsIHByZWZpeCwgYXJndW1lbnQpIHtcbiAgaWYgKHdlYmlkbC51dGlsLlR5cGUoVikgPT09ICdPYmplY3QnKSB7XG4gICAgY29uc3QgaXRlcmF0b3IgPSBSZWZsZWN0LmdldChWLCBTeW1ib2wuaXRlcmF0b3IpXG5cbiAgICAvLyBBIHdvcmstYXJvdW5kIHRvIGVuc3VyZSB3ZSBzZW5kIHRoZSBwcm9wZXJseS1jYXNlZCBIZWFkZXJzIHdoZW4gViBpcyBhIEhlYWRlcnMgb2JqZWN0LlxuICAgIC8vIFJlYWQgaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy91bmRpY2kvcHVsbC8zMTU5I2lzc3VlY29tbWVudC0yMDc1NTM3MjI2IGJlZm9yZSB0b3VjaGluZywgcGxlYXNlLlxuICAgIGlmICghdXRpbC50eXBlcy5pc1Byb3h5KFYpICYmIGl0ZXJhdG9yID09PSBIZWFkZXJzLnByb3RvdHlwZS5lbnRyaWVzKSB7IC8vIEhlYWRlcnMgb2JqZWN0XG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gZ2V0SGVhZGVyc0xpc3QoVikuZW50cmllc0xpc3RcbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICAvLyBmYWxsLXRocm91Z2hcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGl0ZXJhdG9yID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICByZXR1cm4gd2ViaWRsLmNvbnZlcnRlcnNbJ3NlcXVlbmNlPHNlcXVlbmNlPEJ5dGVTdHJpbmc+PiddKFYsIHByZWZpeCwgYXJndW1lbnQsIGl0ZXJhdG9yLmJpbmQoVikpXG4gICAgfVxuXG4gICAgcmV0dXJuIHdlYmlkbC5jb252ZXJ0ZXJzWydyZWNvcmQ8Qnl0ZVN0cmluZywgQnl0ZVN0cmluZz4nXShWLCBwcmVmaXgsIGFyZ3VtZW50KVxuICB9XG5cbiAgdGhyb3cgd2ViaWRsLmVycm9ycy5jb252ZXJzaW9uRmFpbGVkKHtcbiAgICBwcmVmaXg6ICdIZWFkZXJzIGNvbnN0cnVjdG9yJyxcbiAgICBhcmd1bWVudDogJ0FyZ3VtZW50IDEnLFxuICAgIHR5cGVzOiBbJ3NlcXVlbmNlPHNlcXVlbmNlPEJ5dGVTdHJpbmc+PicsICdyZWNvcmQ8Qnl0ZVN0cmluZywgQnl0ZVN0cmluZz4nXVxuICB9KVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgZmlsbCxcbiAgLy8gZm9yIHRlc3QuXG4gIGNvbXBhcmVIZWFkZXJOYW1lLFxuICBIZWFkZXJzLFxuICBIZWFkZXJzTGlzdCxcbiAgZ2V0SGVhZGVyc0d1YXJkLFxuICBzZXRIZWFkZXJzR3VhcmQsXG4gIHNldEhlYWRlcnNMaXN0LFxuICBnZXRIZWFkZXJzTGlzdFxufVxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7IEhlYWRlcnMsIEhlYWRlcnNMaXN0LCBmaWxsLCBnZXRIZWFkZXJzR3VhcmQsIHNldEhlYWRlcnNHdWFyZCwgc2V0SGVhZGVyc0xpc3QgfSA9IHJlcXVpcmUoJy4vaGVhZGVycycpXG5jb25zdCB7IGV4dHJhY3RCb2R5LCBjbG9uZUJvZHksIG1peGluQm9keSwgaGFzRmluYWxpemF0aW9uUmVnaXN0cnksIHN0cmVhbVJlZ2lzdHJ5LCBib2R5VW51c2FibGUgfSA9IHJlcXVpcmUoJy4vYm9keScpXG5jb25zdCB1dGlsID0gcmVxdWlyZSgnLi4vLi4vY29yZS91dGlsJylcbmNvbnN0IG5vZGVVdGlsID0gcmVxdWlyZSgnbm9kZTp1dGlsJylcbmNvbnN0IHsga0VudW1lcmFibGVQcm9wZXJ0eSB9ID0gdXRpbFxuY29uc3Qge1xuICBpc1ZhbGlkUmVhc29uUGhyYXNlLFxuICBpc0NhbmNlbGxlZCxcbiAgaXNBYm9ydGVkLFxuICBpc0Jsb2JMaWtlLFxuICBzZXJpYWxpemVKYXZhc2NyaXB0VmFsdWVUb0pTT05TdHJpbmcsXG4gIGlzRXJyb3JMaWtlLFxuICBpc29tb3JwaGljRW5jb2RlLFxuICBlbnZpcm9ubWVudFNldHRpbmdzT2JqZWN0OiByZWxldmFudFJlYWxtXG59ID0gcmVxdWlyZSgnLi91dGlsJylcbmNvbnN0IHtcbiAgcmVkaXJlY3RTdGF0dXNTZXQsXG4gIG51bGxCb2R5U3RhdHVzXG59ID0gcmVxdWlyZSgnLi9jb25zdGFudHMnKVxuY29uc3QgeyBrU3RhdGUsIGtIZWFkZXJzIH0gPSByZXF1aXJlKCcuL3N5bWJvbHMnKVxuY29uc3QgeyB3ZWJpZGwgfSA9IHJlcXVpcmUoJy4vd2ViaWRsJylcbmNvbnN0IHsgRm9ybURhdGEgfSA9IHJlcXVpcmUoJy4vZm9ybWRhdGEnKVxuY29uc3QgeyBVUkxTZXJpYWxpemVyIH0gPSByZXF1aXJlKCcuL2RhdGEtdXJsJylcbmNvbnN0IHsga0NvbnN0cnVjdCB9ID0gcmVxdWlyZSgnLi4vLi4vY29yZS9zeW1ib2xzJylcbmNvbnN0IGFzc2VydCA9IHJlcXVpcmUoJ25vZGU6YXNzZXJ0JylcbmNvbnN0IHsgdHlwZXMgfSA9IHJlcXVpcmUoJ25vZGU6dXRpbCcpXG5cbmNvbnN0IHRleHRFbmNvZGVyID0gbmV3IFRleHRFbmNvZGVyKCd1dGYtOCcpXG5cbi8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNyZXNwb25zZS1jbGFzc1xuY2xhc3MgUmVzcG9uc2Uge1xuICAvLyBDcmVhdGVzIG5ldHdvcmsgZXJyb3IgUmVzcG9uc2UuXG4gIHN0YXRpYyBlcnJvciAoKSB7XG4gICAgLy8gVGhlIHN0YXRpYyBlcnJvcigpIG1ldGhvZCBzdGVwcyBhcmUgdG8gcmV0dXJuIHRoZSByZXN1bHQgb2YgY3JlYXRpbmcgYVxuICAgIC8vIFJlc3BvbnNlIG9iamVjdCwgZ2l2ZW4gYSBuZXcgbmV0d29yayBlcnJvciwgXCJpbW11dGFibGVcIiwgYW5kIHRoaXNcdTIwMTlzXG4gICAgLy8gcmVsZXZhbnQgUmVhbG0uXG4gICAgY29uc3QgcmVzcG9uc2VPYmplY3QgPSBmcm9tSW5uZXJSZXNwb25zZShtYWtlTmV0d29ya0Vycm9yKCksICdpbW11dGFibGUnKVxuXG4gICAgcmV0dXJuIHJlc3BvbnNlT2JqZWN0XG4gIH1cblxuICAvLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jZG9tLXJlc3BvbnNlLWpzb25cbiAgc3RhdGljIGpzb24gKGRhdGEsIGluaXQgPSB7fSkge1xuICAgIHdlYmlkbC5hcmd1bWVudExlbmd0aENoZWNrKGFyZ3VtZW50cywgMSwgJ1Jlc3BvbnNlLmpzb24nKVxuXG4gICAgaWYgKGluaXQgIT09IG51bGwpIHtcbiAgICAgIGluaXQgPSB3ZWJpZGwuY29udmVydGVycy5SZXNwb25zZUluaXQoaW5pdClcbiAgICB9XG5cbiAgICAvLyAxLiBMZXQgYnl0ZXMgdGhlIHJlc3VsdCBvZiBydW5uaW5nIHNlcmlhbGl6ZSBhIEphdmFTY3JpcHQgdmFsdWUgdG8gSlNPTiBieXRlcyBvbiBkYXRhLlxuICAgIGNvbnN0IGJ5dGVzID0gdGV4dEVuY29kZXIuZW5jb2RlKFxuICAgICAgc2VyaWFsaXplSmF2YXNjcmlwdFZhbHVlVG9KU09OU3RyaW5nKGRhdGEpXG4gICAgKVxuXG4gICAgLy8gMi4gTGV0IGJvZHkgYmUgdGhlIHJlc3VsdCBvZiBleHRyYWN0aW5nIGJ5dGVzLlxuICAgIGNvbnN0IGJvZHkgPSBleHRyYWN0Qm9keShieXRlcylcblxuICAgIC8vIDMuIExldCByZXNwb25zZU9iamVjdCBiZSB0aGUgcmVzdWx0IG9mIGNyZWF0aW5nIGEgUmVzcG9uc2Ugb2JqZWN0LCBnaXZlbiBhIG5ldyByZXNwb25zZSxcbiAgICAvLyAgICBcInJlc3BvbnNlXCIsIGFuZCB0aGlzXHUyMDE5cyByZWxldmFudCBSZWFsbS5cbiAgICBjb25zdCByZXNwb25zZU9iamVjdCA9IGZyb21Jbm5lclJlc3BvbnNlKG1ha2VSZXNwb25zZSh7fSksICdyZXNwb25zZScpXG5cbiAgICAvLyA0LiBQZXJmb3JtIGluaXRpYWxpemUgYSByZXNwb25zZSBnaXZlbiByZXNwb25zZU9iamVjdCwgaW5pdCwgYW5kIChib2R5LCBcImFwcGxpY2F0aW9uL2pzb25cIikuXG4gICAgaW5pdGlhbGl6ZVJlc3BvbnNlKHJlc3BvbnNlT2JqZWN0LCBpbml0LCB7IGJvZHk6IGJvZHlbMF0sIHR5cGU6ICdhcHBsaWNhdGlvbi9qc29uJyB9KVxuXG4gICAgLy8gNS4gUmV0dXJuIHJlc3BvbnNlT2JqZWN0LlxuICAgIHJldHVybiByZXNwb25zZU9iamVjdFxuICB9XG5cbiAgLy8gQ3JlYXRlcyBhIHJlZGlyZWN0IFJlc3BvbnNlIHRoYXQgcmVkaXJlY3RzIHRvIHVybCB3aXRoIHN0YXR1cyBzdGF0dXMuXG4gIHN0YXRpYyByZWRpcmVjdCAodXJsLCBzdGF0dXMgPSAzMDIpIHtcbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDEsICdSZXNwb25zZS5yZWRpcmVjdCcpXG5cbiAgICB1cmwgPSB3ZWJpZGwuY29udmVydGVycy5VU1ZTdHJpbmcodXJsKVxuICAgIHN0YXR1cyA9IHdlYmlkbC5jb252ZXJ0ZXJzWyd1bnNpZ25lZCBzaG9ydCddKHN0YXR1cylcblxuICAgIC8vIDEuIExldCBwYXJzZWRVUkwgYmUgdGhlIHJlc3VsdCBvZiBwYXJzaW5nIHVybCB3aXRoIGN1cnJlbnQgc2V0dGluZ3NcbiAgICAvLyBvYmplY3RcdTIwMTlzIEFQSSBiYXNlIFVSTC5cbiAgICAvLyAyLiBJZiBwYXJzZWRVUkwgaXMgZmFpbHVyZSwgdGhlbiB0aHJvdyBhIFR5cGVFcnJvci5cbiAgICAvLyBUT0RPOiBiYXNlLVVSTD9cbiAgICBsZXQgcGFyc2VkVVJMXG4gICAgdHJ5IHtcbiAgICAgIHBhcnNlZFVSTCA9IG5ldyBVUkwodXJsLCByZWxldmFudFJlYWxtLnNldHRpbmdzT2JqZWN0LmJhc2VVcmwpXG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBGYWlsZWQgdG8gcGFyc2UgVVJMIGZyb20gJHt1cmx9YCwgeyBjYXVzZTogZXJyIH0pXG4gICAgfVxuXG4gICAgLy8gMy4gSWYgc3RhdHVzIGlzIG5vdCBhIHJlZGlyZWN0IHN0YXR1cywgdGhlbiB0aHJvdyBhIFJhbmdlRXJyb3IuXG4gICAgaWYgKCFyZWRpcmVjdFN0YXR1c1NldC5oYXMoc3RhdHVzKSkge1xuICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoYEludmFsaWQgc3RhdHVzIGNvZGUgJHtzdGF0dXN9YClcbiAgICB9XG5cbiAgICAvLyA0LiBMZXQgcmVzcG9uc2VPYmplY3QgYmUgdGhlIHJlc3VsdCBvZiBjcmVhdGluZyBhIFJlc3BvbnNlIG9iamVjdCxcbiAgICAvLyBnaXZlbiBhIG5ldyByZXNwb25zZSwgXCJpbW11dGFibGVcIiwgYW5kIHRoaXNcdTIwMTlzIHJlbGV2YW50IFJlYWxtLlxuICAgIGNvbnN0IHJlc3BvbnNlT2JqZWN0ID0gZnJvbUlubmVyUmVzcG9uc2UobWFrZVJlc3BvbnNlKHt9KSwgJ2ltbXV0YWJsZScpXG5cbiAgICAvLyA1LiBTZXQgcmVzcG9uc2VPYmplY3RcdTIwMTlzIHJlc3BvbnNlXHUyMDE5cyBzdGF0dXMgdG8gc3RhdHVzLlxuICAgIHJlc3BvbnNlT2JqZWN0W2tTdGF0ZV0uc3RhdHVzID0gc3RhdHVzXG5cbiAgICAvLyA2LiBMZXQgdmFsdWUgYmUgcGFyc2VkVVJMLCBzZXJpYWxpemVkIGFuZCBpc29tb3JwaGljIGVuY29kZWQuXG4gICAgY29uc3QgdmFsdWUgPSBpc29tb3JwaGljRW5jb2RlKFVSTFNlcmlhbGl6ZXIocGFyc2VkVVJMKSlcblxuICAgIC8vIDcuIEFwcGVuZCBgTG9jYXRpb25gL3ZhbHVlIHRvIHJlc3BvbnNlT2JqZWN0XHUyMDE5cyByZXNwb25zZVx1MjAxOXMgaGVhZGVyIGxpc3QuXG4gICAgcmVzcG9uc2VPYmplY3Rba1N0YXRlXS5oZWFkZXJzTGlzdC5hcHBlbmQoJ2xvY2F0aW9uJywgdmFsdWUsIHRydWUpXG5cbiAgICAvLyA4LiBSZXR1cm4gcmVzcG9uc2VPYmplY3QuXG4gICAgcmV0dXJuIHJlc3BvbnNlT2JqZWN0XG4gIH1cblxuICAvLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jZG9tLXJlc3BvbnNlXG4gIGNvbnN0cnVjdG9yIChib2R5ID0gbnVsbCwgaW5pdCA9IHt9KSB7XG4gICAgd2ViaWRsLnV0aWwubWFya0FzVW5jbG9uZWFibGUodGhpcylcbiAgICBpZiAoYm9keSA9PT0ga0NvbnN0cnVjdCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgaWYgKGJvZHkgIT09IG51bGwpIHtcbiAgICAgIGJvZHkgPSB3ZWJpZGwuY29udmVydGVycy5Cb2R5SW5pdChib2R5KVxuICAgIH1cblxuICAgIGluaXQgPSB3ZWJpZGwuY29udmVydGVycy5SZXNwb25zZUluaXQoaW5pdClcblxuICAgIC8vIDEuIFNldCB0aGlzXHUyMDE5cyByZXNwb25zZSB0byBhIG5ldyByZXNwb25zZS5cbiAgICB0aGlzW2tTdGF0ZV0gPSBtYWtlUmVzcG9uc2Uoe30pXG5cbiAgICAvLyAyLiBTZXQgdGhpc1x1MjAxOXMgaGVhZGVycyB0byBhIG5ldyBIZWFkZXJzIG9iamVjdCB3aXRoIHRoaXNcdTIwMTlzIHJlbGV2YW50XG4gICAgLy8gUmVhbG0sIHdob3NlIGhlYWRlciBsaXN0IGlzIHRoaXNcdTIwMTlzIHJlc3BvbnNlXHUyMDE5cyBoZWFkZXIgbGlzdCBhbmQgZ3VhcmRcbiAgICAvLyBpcyBcInJlc3BvbnNlXCIuXG4gICAgdGhpc1trSGVhZGVyc10gPSBuZXcgSGVhZGVycyhrQ29uc3RydWN0KVxuICAgIHNldEhlYWRlcnNHdWFyZCh0aGlzW2tIZWFkZXJzXSwgJ3Jlc3BvbnNlJylcbiAgICBzZXRIZWFkZXJzTGlzdCh0aGlzW2tIZWFkZXJzXSwgdGhpc1trU3RhdGVdLmhlYWRlcnNMaXN0KVxuXG4gICAgLy8gMy4gTGV0IGJvZHlXaXRoVHlwZSBiZSBudWxsLlxuICAgIGxldCBib2R5V2l0aFR5cGUgPSBudWxsXG5cbiAgICAvLyA0LiBJZiBib2R5IGlzIG5vbi1udWxsLCB0aGVuIHNldCBib2R5V2l0aFR5cGUgdG8gdGhlIHJlc3VsdCBvZiBleHRyYWN0aW5nIGJvZHkuXG4gICAgaWYgKGJvZHkgIT0gbnVsbCkge1xuICAgICAgY29uc3QgW2V4dHJhY3RlZEJvZHksIHR5cGVdID0gZXh0cmFjdEJvZHkoYm9keSlcbiAgICAgIGJvZHlXaXRoVHlwZSA9IHsgYm9keTogZXh0cmFjdGVkQm9keSwgdHlwZSB9XG4gICAgfVxuXG4gICAgLy8gNS4gUGVyZm9ybSBpbml0aWFsaXplIGEgcmVzcG9uc2UgZ2l2ZW4gdGhpcywgaW5pdCwgYW5kIGJvZHlXaXRoVHlwZS5cbiAgICBpbml0aWFsaXplUmVzcG9uc2UodGhpcywgaW5pdCwgYm9keVdpdGhUeXBlKVxuICB9XG5cbiAgLy8gUmV0dXJucyByZXNwb25zZVx1MjAxOXMgdHlwZSwgZS5nLiwgXCJjb3JzXCIuXG4gIGdldCB0eXBlICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBSZXNwb25zZSlcblxuICAgIC8vIFRoZSB0eXBlIGdldHRlciBzdGVwcyBhcmUgdG8gcmV0dXJuIHRoaXNcdTIwMTlzIHJlc3BvbnNlXHUyMDE5cyB0eXBlLlxuICAgIHJldHVybiB0aGlzW2tTdGF0ZV0udHlwZVxuICB9XG5cbiAgLy8gUmV0dXJucyByZXNwb25zZVx1MjAxOXMgVVJMLCBpZiBpdCBoYXMgb25lOyBvdGhlcndpc2UgdGhlIGVtcHR5IHN0cmluZy5cbiAgZ2V0IHVybCAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgUmVzcG9uc2UpXG5cbiAgICBjb25zdCB1cmxMaXN0ID0gdGhpc1trU3RhdGVdLnVybExpc3RcblxuICAgIC8vIFRoZSB1cmwgZ2V0dGVyIHN0ZXBzIGFyZSB0byByZXR1cm4gdGhlIGVtcHR5IHN0cmluZyBpZiB0aGlzXHUyMDE5c1xuICAgIC8vIHJlc3BvbnNlXHUyMDE5cyBVUkwgaXMgbnVsbDsgb3RoZXJ3aXNlIHRoaXNcdTIwMTlzIHJlc3BvbnNlXHUyMDE5cyBVUkwsXG4gICAgLy8gc2VyaWFsaXplZCB3aXRoIGV4Y2x1ZGUgZnJhZ21lbnQgc2V0IHRvIHRydWUuXG4gICAgY29uc3QgdXJsID0gdXJsTGlzdFt1cmxMaXN0Lmxlbmd0aCAtIDFdID8/IG51bGxcblxuICAgIGlmICh1cmwgPT09IG51bGwpIHtcbiAgICAgIHJldHVybiAnJ1xuICAgIH1cblxuICAgIHJldHVybiBVUkxTZXJpYWxpemVyKHVybCwgdHJ1ZSlcbiAgfVxuXG4gIC8vIFJldHVybnMgd2hldGhlciByZXNwb25zZSB3YXMgb2J0YWluZWQgdGhyb3VnaCBhIHJlZGlyZWN0LlxuICBnZXQgcmVkaXJlY3RlZCAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgUmVzcG9uc2UpXG5cbiAgICAvLyBUaGUgcmVkaXJlY3RlZCBnZXR0ZXIgc3RlcHMgYXJlIHRvIHJldHVybiB0cnVlIGlmIHRoaXNcdTIwMTlzIHJlc3BvbnNlXHUyMDE5cyBVUkxcbiAgICAvLyBsaXN0IGhhcyBtb3JlIHRoYW4gb25lIGl0ZW07IG90aGVyd2lzZSBmYWxzZS5cbiAgICByZXR1cm4gdGhpc1trU3RhdGVdLnVybExpc3QubGVuZ3RoID4gMVxuICB9XG5cbiAgLy8gUmV0dXJucyByZXNwb25zZVx1MjAxOXMgc3RhdHVzLlxuICBnZXQgc3RhdHVzICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBSZXNwb25zZSlcblxuICAgIC8vIFRoZSBzdGF0dXMgZ2V0dGVyIHN0ZXBzIGFyZSB0byByZXR1cm4gdGhpc1x1MjAxOXMgcmVzcG9uc2VcdTIwMTlzIHN0YXR1cy5cbiAgICByZXR1cm4gdGhpc1trU3RhdGVdLnN0YXR1c1xuICB9XG5cbiAgLy8gUmV0dXJucyB3aGV0aGVyIHJlc3BvbnNlXHUyMDE5cyBzdGF0dXMgaXMgYW4gb2sgc3RhdHVzLlxuICBnZXQgb2sgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFJlc3BvbnNlKVxuXG4gICAgLy8gVGhlIG9rIGdldHRlciBzdGVwcyBhcmUgdG8gcmV0dXJuIHRydWUgaWYgdGhpc1x1MjAxOXMgcmVzcG9uc2VcdTIwMTlzIHN0YXR1cyBpcyBhblxuICAgIC8vIG9rIHN0YXR1czsgb3RoZXJ3aXNlIGZhbHNlLlxuICAgIHJldHVybiB0aGlzW2tTdGF0ZV0uc3RhdHVzID49IDIwMCAmJiB0aGlzW2tTdGF0ZV0uc3RhdHVzIDw9IDI5OVxuICB9XG5cbiAgLy8gUmV0dXJucyByZXNwb25zZVx1MjAxOXMgc3RhdHVzIG1lc3NhZ2UuXG4gIGdldCBzdGF0dXNUZXh0ICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBSZXNwb25zZSlcblxuICAgIC8vIFRoZSBzdGF0dXNUZXh0IGdldHRlciBzdGVwcyBhcmUgdG8gcmV0dXJuIHRoaXNcdTIwMTlzIHJlc3BvbnNlXHUyMDE5cyBzdGF0dXNcbiAgICAvLyBtZXNzYWdlLlxuICAgIHJldHVybiB0aGlzW2tTdGF0ZV0uc3RhdHVzVGV4dFxuICB9XG5cbiAgLy8gUmV0dXJucyByZXNwb25zZVx1MjAxOXMgaGVhZGVycyBhcyBIZWFkZXJzLlxuICBnZXQgaGVhZGVycyAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgUmVzcG9uc2UpXG5cbiAgICAvLyBUaGUgaGVhZGVycyBnZXR0ZXIgc3RlcHMgYXJlIHRvIHJldHVybiB0aGlzXHUyMDE5cyBoZWFkZXJzLlxuICAgIHJldHVybiB0aGlzW2tIZWFkZXJzXVxuICB9XG5cbiAgZ2V0IGJvZHkgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFJlc3BvbnNlKVxuXG4gICAgcmV0dXJuIHRoaXNba1N0YXRlXS5ib2R5ID8gdGhpc1trU3RhdGVdLmJvZHkuc3RyZWFtIDogbnVsbFxuICB9XG5cbiAgZ2V0IGJvZHlVc2VkICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBSZXNwb25zZSlcblxuICAgIHJldHVybiAhIXRoaXNba1N0YXRlXS5ib2R5ICYmIHV0aWwuaXNEaXN0dXJiZWQodGhpc1trU3RhdGVdLmJvZHkuc3RyZWFtKVxuICB9XG5cbiAgLy8gUmV0dXJucyBhIGNsb25lIG9mIHJlc3BvbnNlLlxuICBjbG9uZSAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgUmVzcG9uc2UpXG5cbiAgICAvLyAxLiBJZiB0aGlzIGlzIHVudXNhYmxlLCB0aGVuIHRocm93IGEgVHlwZUVycm9yLlxuICAgIGlmIChib2R5VW51c2FibGUodGhpcykpIHtcbiAgICAgIHRocm93IHdlYmlkbC5lcnJvcnMuZXhjZXB0aW9uKHtcbiAgICAgICAgaGVhZGVyOiAnUmVzcG9uc2UuY2xvbmUnLFxuICAgICAgICBtZXNzYWdlOiAnQm9keSBoYXMgYWxyZWFkeSBiZWVuIGNvbnN1bWVkLidcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgLy8gMi4gTGV0IGNsb25lZFJlc3BvbnNlIGJlIHRoZSByZXN1bHQgb2YgY2xvbmluZyB0aGlzXHUyMDE5cyByZXNwb25zZS5cbiAgICBjb25zdCBjbG9uZWRSZXNwb25zZSA9IGNsb25lUmVzcG9uc2UodGhpc1trU3RhdGVdKVxuXG4gICAgLy8gMy4gUmV0dXJuIHRoZSByZXN1bHQgb2YgY3JlYXRpbmcgYSBSZXNwb25zZSBvYmplY3QsIGdpdmVuXG4gICAgLy8gY2xvbmVkUmVzcG9uc2UsIHRoaXNcdTIwMTlzIGhlYWRlcnNcdTIwMTlzIGd1YXJkLCBhbmQgdGhpc1x1MjAxOXMgcmVsZXZhbnQgUmVhbG0uXG4gICAgcmV0dXJuIGZyb21Jbm5lclJlc3BvbnNlKGNsb25lZFJlc3BvbnNlLCBnZXRIZWFkZXJzR3VhcmQodGhpc1trSGVhZGVyc10pKVxuICB9XG5cbiAgW25vZGVVdGlsLmluc3BlY3QuY3VzdG9tXSAoZGVwdGgsIG9wdGlvbnMpIHtcbiAgICBpZiAob3B0aW9ucy5kZXB0aCA9PT0gbnVsbCkge1xuICAgICAgb3B0aW9ucy5kZXB0aCA9IDJcbiAgICB9XG5cbiAgICBvcHRpb25zLmNvbG9ycyA/Pz0gdHJ1ZVxuXG4gICAgY29uc3QgcHJvcGVydGllcyA9IHtcbiAgICAgIHN0YXR1czogdGhpcy5zdGF0dXMsXG4gICAgICBzdGF0dXNUZXh0OiB0aGlzLnN0YXR1c1RleHQsXG4gICAgICBoZWFkZXJzOiB0aGlzLmhlYWRlcnMsXG4gICAgICBib2R5OiB0aGlzLmJvZHksXG4gICAgICBib2R5VXNlZDogdGhpcy5ib2R5VXNlZCxcbiAgICAgIG9rOiB0aGlzLm9rLFxuICAgICAgcmVkaXJlY3RlZDogdGhpcy5yZWRpcmVjdGVkLFxuICAgICAgdHlwZTogdGhpcy50eXBlLFxuICAgICAgdXJsOiB0aGlzLnVybFxuICAgIH1cblxuICAgIHJldHVybiBgUmVzcG9uc2UgJHtub2RlVXRpbC5mb3JtYXRXaXRoT3B0aW9ucyhvcHRpb25zLCBwcm9wZXJ0aWVzKX1gXG4gIH1cbn1cblxubWl4aW5Cb2R5KFJlc3BvbnNlKVxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhSZXNwb25zZS5wcm90b3R5cGUsIHtcbiAgdHlwZToga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgdXJsOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBzdGF0dXM6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIG9rOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICByZWRpcmVjdGVkOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBzdGF0dXNUZXh0OiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBoZWFkZXJzOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBjbG9uZToga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgYm9keToga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgYm9keVVzZWQ6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIFtTeW1ib2wudG9TdHJpbmdUYWddOiB7XG4gICAgdmFsdWU6ICdSZXNwb25zZScsXG4gICAgY29uZmlndXJhYmxlOiB0cnVlXG4gIH1cbn0pXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFJlc3BvbnNlLCB7XG4gIGpzb246IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIHJlZGlyZWN0OiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBlcnJvcjoga0VudW1lcmFibGVQcm9wZXJ0eVxufSlcblxuLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2NvbmNlcHQtcmVzcG9uc2UtY2xvbmVcbmZ1bmN0aW9uIGNsb25lUmVzcG9uc2UgKHJlc3BvbnNlKSB7XG4gIC8vIFRvIGNsb25lIGEgcmVzcG9uc2UgcmVzcG9uc2UsIHJ1biB0aGVzZSBzdGVwczpcblxuICAvLyAxLiBJZiByZXNwb25zZSBpcyBhIGZpbHRlcmVkIHJlc3BvbnNlLCB0aGVuIHJldHVybiBhIG5ldyBpZGVudGljYWxcbiAgLy8gZmlsdGVyZWQgcmVzcG9uc2Ugd2hvc2UgaW50ZXJuYWwgcmVzcG9uc2UgaXMgYSBjbG9uZSBvZiByZXNwb25zZVx1MjAxOXNcbiAgLy8gaW50ZXJuYWwgcmVzcG9uc2UuXG4gIGlmIChyZXNwb25zZS5pbnRlcm5hbFJlc3BvbnNlKSB7XG4gICAgcmV0dXJuIGZpbHRlclJlc3BvbnNlKFxuICAgICAgY2xvbmVSZXNwb25zZShyZXNwb25zZS5pbnRlcm5hbFJlc3BvbnNlKSxcbiAgICAgIHJlc3BvbnNlLnR5cGVcbiAgICApXG4gIH1cblxuICAvLyAyLiBMZXQgbmV3UmVzcG9uc2UgYmUgYSBjb3B5IG9mIHJlc3BvbnNlLCBleGNlcHQgZm9yIGl0cyBib2R5LlxuICBjb25zdCBuZXdSZXNwb25zZSA9IG1ha2VSZXNwb25zZSh7IC4uLnJlc3BvbnNlLCBib2R5OiBudWxsIH0pXG5cbiAgLy8gMy4gSWYgcmVzcG9uc2VcdTIwMTlzIGJvZHkgaXMgbm9uLW51bGwsIHRoZW4gc2V0IG5ld1Jlc3BvbnNlXHUyMDE5cyBib2R5IHRvIHRoZVxuICAvLyByZXN1bHQgb2YgY2xvbmluZyByZXNwb25zZVx1MjAxOXMgYm9keS5cbiAgaWYgKHJlc3BvbnNlLmJvZHkgIT0gbnVsbCkge1xuICAgIG5ld1Jlc3BvbnNlLmJvZHkgPSBjbG9uZUJvZHkobmV3UmVzcG9uc2UsIHJlc3BvbnNlLmJvZHkpXG4gIH1cblxuICAvLyA0LiBSZXR1cm4gbmV3UmVzcG9uc2UuXG4gIHJldHVybiBuZXdSZXNwb25zZVxufVxuXG5mdW5jdGlvbiBtYWtlUmVzcG9uc2UgKGluaXQpIHtcbiAgcmV0dXJuIHtcbiAgICBhYm9ydGVkOiBmYWxzZSxcbiAgICByYW5nZVJlcXVlc3RlZDogZmFsc2UsXG4gICAgdGltaW5nQWxsb3dQYXNzZWQ6IGZhbHNlLFxuICAgIHJlcXVlc3RJbmNsdWRlc0NyZWRlbnRpYWxzOiBmYWxzZSxcbiAgICB0eXBlOiAnZGVmYXVsdCcsXG4gICAgc3RhdHVzOiAyMDAsXG4gICAgdGltaW5nSW5mbzogbnVsbCxcbiAgICBjYWNoZVN0YXRlOiAnJyxcbiAgICBzdGF0dXNUZXh0OiAnJyxcbiAgICAuLi5pbml0LFxuICAgIGhlYWRlcnNMaXN0OiBpbml0Py5oZWFkZXJzTGlzdFxuICAgICAgPyBuZXcgSGVhZGVyc0xpc3QoaW5pdD8uaGVhZGVyc0xpc3QpXG4gICAgICA6IG5ldyBIZWFkZXJzTGlzdCgpLFxuICAgIHVybExpc3Q6IGluaXQ/LnVybExpc3QgPyBbLi4uaW5pdC51cmxMaXN0XSA6IFtdXG4gIH1cbn1cblxuZnVuY3Rpb24gbWFrZU5ldHdvcmtFcnJvciAocmVhc29uKSB7XG4gIGNvbnN0IGlzRXJyb3IgPSBpc0Vycm9yTGlrZShyZWFzb24pXG4gIHJldHVybiBtYWtlUmVzcG9uc2Uoe1xuICAgIHR5cGU6ICdlcnJvcicsXG4gICAgc3RhdHVzOiAwLFxuICAgIGVycm9yOiBpc0Vycm9yXG4gICAgICA/IHJlYXNvblxuICAgICAgOiBuZXcgRXJyb3IocmVhc29uID8gU3RyaW5nKHJlYXNvbikgOiByZWFzb24pLFxuICAgIGFib3J0ZWQ6IHJlYXNvbiAmJiByZWFzb24ubmFtZSA9PT0gJ0Fib3J0RXJyb3InXG4gIH0pXG59XG5cbi8vIEBzZWUgaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2NvbmNlcHQtbmV0d29yay1lcnJvclxuZnVuY3Rpb24gaXNOZXR3b3JrRXJyb3IgKHJlc3BvbnNlKSB7XG4gIHJldHVybiAoXG4gICAgLy8gQSBuZXR3b3JrIGVycm9yIGlzIGEgcmVzcG9uc2Ugd2hvc2UgdHlwZSBpcyBcImVycm9yXCIsXG4gICAgcmVzcG9uc2UudHlwZSA9PT0gJ2Vycm9yJyAmJlxuICAgIC8vIHN0YXR1cyBpcyAwXG4gICAgcmVzcG9uc2Uuc3RhdHVzID09PSAwXG4gIClcbn1cblxuZnVuY3Rpb24gbWFrZUZpbHRlcmVkUmVzcG9uc2UgKHJlc3BvbnNlLCBzdGF0ZSkge1xuICBzdGF0ZSA9IHtcbiAgICBpbnRlcm5hbFJlc3BvbnNlOiByZXNwb25zZSxcbiAgICAuLi5zdGF0ZVxuICB9XG5cbiAgcmV0dXJuIG5ldyBQcm94eShyZXNwb25zZSwge1xuICAgIGdldCAodGFyZ2V0LCBwKSB7XG4gICAgICByZXR1cm4gcCBpbiBzdGF0ZSA/IHN0YXRlW3BdIDogdGFyZ2V0W3BdXG4gICAgfSxcbiAgICBzZXQgKHRhcmdldCwgcCwgdmFsdWUpIHtcbiAgICAgIGFzc2VydCghKHAgaW4gc3RhdGUpKVxuICAgICAgdGFyZ2V0W3BdID0gdmFsdWVcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuICB9KVxufVxuXG4vLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jY29uY2VwdC1maWx0ZXJlZC1yZXNwb25zZVxuZnVuY3Rpb24gZmlsdGVyUmVzcG9uc2UgKHJlc3BvbnNlLCB0eXBlKSB7XG4gIC8vIFNldCByZXNwb25zZSB0byB0aGUgZm9sbG93aW5nIGZpbHRlcmVkIHJlc3BvbnNlIHdpdGggcmVzcG9uc2UgYXMgaXRzXG4gIC8vIGludGVybmFsIHJlc3BvbnNlLCBkZXBlbmRpbmcgb24gcmVxdWVzdFx1MjAxOXMgcmVzcG9uc2UgdGFpbnRpbmc6XG4gIGlmICh0eXBlID09PSAnYmFzaWMnKSB7XG4gICAgLy8gQSBiYXNpYyBmaWx0ZXJlZCByZXNwb25zZSBpcyBhIGZpbHRlcmVkIHJlc3BvbnNlIHdob3NlIHR5cGUgaXMgXCJiYXNpY1wiXG4gICAgLy8gYW5kIGhlYWRlciBsaXN0IGV4Y2x1ZGVzIGFueSBoZWFkZXJzIGluIGludGVybmFsIHJlc3BvbnNlXHUyMDE5cyBoZWFkZXIgbGlzdFxuICAgIC8vIHdob3NlIG5hbWUgaXMgYSBmb3JiaWRkZW4gcmVzcG9uc2UtaGVhZGVyIG5hbWUuXG5cbiAgICAvLyBOb3RlOiB1bmRpY2kgZG9lcyBub3QgaW1wbGVtZW50IGZvcmJpZGRlbiByZXNwb25zZS1oZWFkZXIgbmFtZXNcbiAgICByZXR1cm4gbWFrZUZpbHRlcmVkUmVzcG9uc2UocmVzcG9uc2UsIHtcbiAgICAgIHR5cGU6ICdiYXNpYycsXG4gICAgICBoZWFkZXJzTGlzdDogcmVzcG9uc2UuaGVhZGVyc0xpc3RcbiAgICB9KVxuICB9IGVsc2UgaWYgKHR5cGUgPT09ICdjb3JzJykge1xuICAgIC8vIEEgQ09SUyBmaWx0ZXJlZCByZXNwb25zZSBpcyBhIGZpbHRlcmVkIHJlc3BvbnNlIHdob3NlIHR5cGUgaXMgXCJjb3JzXCJcbiAgICAvLyBhbmQgaGVhZGVyIGxpc3QgZXhjbHVkZXMgYW55IGhlYWRlcnMgaW4gaW50ZXJuYWwgcmVzcG9uc2VcdTIwMTlzIGhlYWRlclxuICAgIC8vIGxpc3Qgd2hvc2UgbmFtZSBpcyBub3QgYSBDT1JTLXNhZmVsaXN0ZWQgcmVzcG9uc2UtaGVhZGVyIG5hbWUsIGdpdmVuXG4gICAgLy8gaW50ZXJuYWwgcmVzcG9uc2VcdTIwMTlzIENPUlMtZXhwb3NlZCBoZWFkZXItbmFtZSBsaXN0LlxuXG4gICAgLy8gTm90ZTogdW5kaWNpIGRvZXMgbm90IGltcGxlbWVudCBDT1JTLXNhZmVsaXN0ZWQgcmVzcG9uc2UtaGVhZGVyIG5hbWVzXG4gICAgcmV0dXJuIG1ha2VGaWx0ZXJlZFJlc3BvbnNlKHJlc3BvbnNlLCB7XG4gICAgICB0eXBlOiAnY29ycycsXG4gICAgICBoZWFkZXJzTGlzdDogcmVzcG9uc2UuaGVhZGVyc0xpc3RcbiAgICB9KVxuICB9IGVsc2UgaWYgKHR5cGUgPT09ICdvcGFxdWUnKSB7XG4gICAgLy8gQW4gb3BhcXVlIGZpbHRlcmVkIHJlc3BvbnNlIGlzIGEgZmlsdGVyZWQgcmVzcG9uc2Ugd2hvc2UgdHlwZSBpc1xuICAgIC8vIFwib3BhcXVlXCIsIFVSTCBsaXN0IGlzIHRoZSBlbXB0eSBsaXN0LCBzdGF0dXMgaXMgMCwgc3RhdHVzIG1lc3NhZ2VcbiAgICAvLyBpcyB0aGUgZW1wdHkgYnl0ZSBzZXF1ZW5jZSwgaGVhZGVyIGxpc3QgaXMgZW1wdHksIGFuZCBib2R5IGlzIG51bGwuXG5cbiAgICByZXR1cm4gbWFrZUZpbHRlcmVkUmVzcG9uc2UocmVzcG9uc2UsIHtcbiAgICAgIHR5cGU6ICdvcGFxdWUnLFxuICAgICAgdXJsTGlzdDogT2JqZWN0LmZyZWV6ZShbXSksXG4gICAgICBzdGF0dXM6IDAsXG4gICAgICBzdGF0dXNUZXh0OiAnJyxcbiAgICAgIGJvZHk6IG51bGxcbiAgICB9KVxuICB9IGVsc2UgaWYgKHR5cGUgPT09ICdvcGFxdWVyZWRpcmVjdCcpIHtcbiAgICAvLyBBbiBvcGFxdWUtcmVkaXJlY3QgZmlsdGVyZWQgcmVzcG9uc2UgaXMgYSBmaWx0ZXJlZCByZXNwb25zZSB3aG9zZSB0eXBlXG4gICAgLy8gaXMgXCJvcGFxdWVyZWRpcmVjdFwiLCBzdGF0dXMgaXMgMCwgc3RhdHVzIG1lc3NhZ2UgaXMgdGhlIGVtcHR5IGJ5dGVcbiAgICAvLyBzZXF1ZW5jZSwgaGVhZGVyIGxpc3QgaXMgZW1wdHksIGFuZCBib2R5IGlzIG51bGwuXG5cbiAgICByZXR1cm4gbWFrZUZpbHRlcmVkUmVzcG9uc2UocmVzcG9uc2UsIHtcbiAgICAgIHR5cGU6ICdvcGFxdWVyZWRpcmVjdCcsXG4gICAgICBzdGF0dXM6IDAsXG4gICAgICBzdGF0dXNUZXh0OiAnJyxcbiAgICAgIGhlYWRlcnNMaXN0OiBbXSxcbiAgICAgIGJvZHk6IG51bGxcbiAgICB9KVxuICB9IGVsc2Uge1xuICAgIGFzc2VydChmYWxzZSlcbiAgfVxufVxuXG4vLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jYXBwcm9wcmlhdGUtbmV0d29yay1lcnJvclxuZnVuY3Rpb24gbWFrZUFwcHJvcHJpYXRlTmV0d29ya0Vycm9yIChmZXRjaFBhcmFtcywgZXJyID0gbnVsbCkge1xuICAvLyAxLiBBc3NlcnQ6IGZldGNoUGFyYW1zIGlzIGNhbmNlbGVkLlxuICBhc3NlcnQoaXNDYW5jZWxsZWQoZmV0Y2hQYXJhbXMpKVxuXG4gIC8vIDIuIFJldHVybiBhbiBhYm9ydGVkIG5ldHdvcmsgZXJyb3IgaWYgZmV0Y2hQYXJhbXMgaXMgYWJvcnRlZDtcbiAgLy8gb3RoZXJ3aXNlIHJldHVybiBhIG5ldHdvcmsgZXJyb3IuXG4gIHJldHVybiBpc0Fib3J0ZWQoZmV0Y2hQYXJhbXMpXG4gICAgPyBtYWtlTmV0d29ya0Vycm9yKE9iamVjdC5hc3NpZ24obmV3IERPTUV4Y2VwdGlvbignVGhlIG9wZXJhdGlvbiB3YXMgYWJvcnRlZC4nLCAnQWJvcnRFcnJvcicpLCB7IGNhdXNlOiBlcnIgfSkpXG4gICAgOiBtYWtlTmV0d29ya0Vycm9yKE9iamVjdC5hc3NpZ24obmV3IERPTUV4Y2VwdGlvbignUmVxdWVzdCB3YXMgY2FuY2VsbGVkLicpLCB7IGNhdXNlOiBlcnIgfSkpXG59XG5cbi8vIGh0dHBzOi8vd2hhdHByLm9yZy9mZXRjaC8xMzkyLmh0bWwjaW5pdGlhbGl6ZS1hLXJlc3BvbnNlXG5mdW5jdGlvbiBpbml0aWFsaXplUmVzcG9uc2UgKHJlc3BvbnNlLCBpbml0LCBib2R5KSB7XG4gIC8vIDEuIElmIGluaXRbXCJzdGF0dXNcIl0gaXMgbm90IGluIHRoZSByYW5nZSAyMDAgdG8gNTk5LCBpbmNsdXNpdmUsIHRoZW5cbiAgLy8gICAgdGhyb3cgYSBSYW5nZUVycm9yLlxuICBpZiAoaW5pdC5zdGF0dXMgIT09IG51bGwgJiYgKGluaXQuc3RhdHVzIDwgMjAwIHx8IGluaXQuc3RhdHVzID4gNTk5KSkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdpbml0W1wic3RhdHVzXCJdIG11c3QgYmUgaW4gdGhlIHJhbmdlIG9mIDIwMCB0byA1OTksIGluY2x1c2l2ZS4nKVxuICB9XG5cbiAgLy8gMi4gSWYgaW5pdFtcInN0YXR1c1RleHRcIl0gZG9lcyBub3QgbWF0Y2ggdGhlIHJlYXNvbi1waHJhc2UgdG9rZW4gcHJvZHVjdGlvbixcbiAgLy8gICAgdGhlbiB0aHJvdyBhIFR5cGVFcnJvci5cbiAgaWYgKCdzdGF0dXNUZXh0JyBpbiBpbml0ICYmIGluaXQuc3RhdHVzVGV4dCAhPSBudWxsKSB7XG4gICAgLy8gU2VlLCBodHRwczovL2RhdGF0cmFja2VyLmlldGYub3JnL2RvYy9odG1sL3JmYzcyMzAjc2VjdGlvbi0zLjEuMjpcbiAgICAvLyAgIHJlYXNvbi1waHJhc2UgID0gKiggSFRBQiAvIFNQIC8gVkNIQVIgLyBvYnMtdGV4dCApXG4gICAgaWYgKCFpc1ZhbGlkUmVhc29uUGhyYXNlKFN0cmluZyhpbml0LnN0YXR1c1RleHQpKSkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignSW52YWxpZCBzdGF0dXNUZXh0JylcbiAgICB9XG4gIH1cblxuICAvLyAzLiBTZXQgcmVzcG9uc2VcdTIwMTlzIHJlc3BvbnNlXHUyMDE5cyBzdGF0dXMgdG8gaW5pdFtcInN0YXR1c1wiXS5cbiAgaWYgKCdzdGF0dXMnIGluIGluaXQgJiYgaW5pdC5zdGF0dXMgIT0gbnVsbCkge1xuICAgIHJlc3BvbnNlW2tTdGF0ZV0uc3RhdHVzID0gaW5pdC5zdGF0dXNcbiAgfVxuXG4gIC8vIDQuIFNldCByZXNwb25zZVx1MjAxOXMgcmVzcG9uc2VcdTIwMTlzIHN0YXR1cyBtZXNzYWdlIHRvIGluaXRbXCJzdGF0dXNUZXh0XCJdLlxuICBpZiAoJ3N0YXR1c1RleHQnIGluIGluaXQgJiYgaW5pdC5zdGF0dXNUZXh0ICE9IG51bGwpIHtcbiAgICByZXNwb25zZVtrU3RhdGVdLnN0YXR1c1RleHQgPSBpbml0LnN0YXR1c1RleHRcbiAgfVxuXG4gIC8vIDUuIElmIGluaXRbXCJoZWFkZXJzXCJdIGV4aXN0cywgdGhlbiBmaWxsIHJlc3BvbnNlXHUyMDE5cyBoZWFkZXJzIHdpdGggaW5pdFtcImhlYWRlcnNcIl0uXG4gIGlmICgnaGVhZGVycycgaW4gaW5pdCAmJiBpbml0LmhlYWRlcnMgIT0gbnVsbCkge1xuICAgIGZpbGwocmVzcG9uc2Vba0hlYWRlcnNdLCBpbml0LmhlYWRlcnMpXG4gIH1cblxuICAvLyA2LiBJZiBib2R5IHdhcyBnaXZlbiwgdGhlbjpcbiAgaWYgKGJvZHkpIHtcbiAgICAvLyAxLiBJZiByZXNwb25zZSdzIHN0YXR1cyBpcyBhIG51bGwgYm9keSBzdGF0dXMsIHRoZW4gdGhyb3cgYSBUeXBlRXJyb3IuXG4gICAgaWYgKG51bGxCb2R5U3RhdHVzLmluY2x1ZGVzKHJlc3BvbnNlLnN0YXR1cykpIHtcbiAgICAgIHRocm93IHdlYmlkbC5lcnJvcnMuZXhjZXB0aW9uKHtcbiAgICAgICAgaGVhZGVyOiAnUmVzcG9uc2UgY29uc3RydWN0b3InLFxuICAgICAgICBtZXNzYWdlOiBgSW52YWxpZCByZXNwb25zZSBzdGF0dXMgY29kZSAke3Jlc3BvbnNlLnN0YXR1c31gXG4gICAgICB9KVxuICAgIH1cblxuICAgIC8vIDIuIFNldCByZXNwb25zZSdzIGJvZHkgdG8gYm9keSdzIGJvZHkuXG4gICAgcmVzcG9uc2Vba1N0YXRlXS5ib2R5ID0gYm9keS5ib2R5XG5cbiAgICAvLyAzLiBJZiBib2R5J3MgdHlwZSBpcyBub24tbnVsbCBhbmQgcmVzcG9uc2UncyBoZWFkZXIgbGlzdCBkb2VzIG5vdCBjb250YWluXG4gICAgLy8gICAgYENvbnRlbnQtVHlwZWAsIHRoZW4gYXBwZW5kIChgQ29udGVudC1UeXBlYCwgYm9keSdzIHR5cGUpIHRvIHJlc3BvbnNlJ3MgaGVhZGVyIGxpc3QuXG4gICAgaWYgKGJvZHkudHlwZSAhPSBudWxsICYmICFyZXNwb25zZVtrU3RhdGVdLmhlYWRlcnNMaXN0LmNvbnRhaW5zKCdjb250ZW50LXR5cGUnLCB0cnVlKSkge1xuICAgICAgcmVzcG9uc2Vba1N0YXRlXS5oZWFkZXJzTGlzdC5hcHBlbmQoJ2NvbnRlbnQtdHlwZScsIGJvZHkudHlwZSwgdHJ1ZSlcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNyZXNwb25zZS1jcmVhdGVcbiAqIEBwYXJhbSB7YW55fSBpbm5lclJlc3BvbnNlXG4gKiBAcGFyYW0geydyZXF1ZXN0JyB8ICdpbW11dGFibGUnIHwgJ3JlcXVlc3Qtbm8tY29ycycgfCAncmVzcG9uc2UnIHwgJ25vbmUnfSBndWFyZFxuICogQHJldHVybnMge1Jlc3BvbnNlfVxuICovXG5mdW5jdGlvbiBmcm9tSW5uZXJSZXNwb25zZSAoaW5uZXJSZXNwb25zZSwgZ3VhcmQpIHtcbiAgY29uc3QgcmVzcG9uc2UgPSBuZXcgUmVzcG9uc2Uoa0NvbnN0cnVjdClcbiAgcmVzcG9uc2Vba1N0YXRlXSA9IGlubmVyUmVzcG9uc2VcbiAgcmVzcG9uc2Vba0hlYWRlcnNdID0gbmV3IEhlYWRlcnMoa0NvbnN0cnVjdClcbiAgc2V0SGVhZGVyc0xpc3QocmVzcG9uc2Vba0hlYWRlcnNdLCBpbm5lclJlc3BvbnNlLmhlYWRlcnNMaXN0KVxuICBzZXRIZWFkZXJzR3VhcmQocmVzcG9uc2Vba0hlYWRlcnNdLCBndWFyZClcblxuICBpZiAoaGFzRmluYWxpemF0aW9uUmVnaXN0cnkgJiYgaW5uZXJSZXNwb25zZS5ib2R5Py5zdHJlYW0pIHtcbiAgICAvLyBJZiB0aGUgdGFyZ2V0IChyZXNwb25zZSkgaXMgcmVjbGFpbWVkLCB0aGUgY2xlYW51cCBjYWxsYmFjayBtYXkgYmUgY2FsbGVkIGF0IHNvbWUgcG9pbnQgd2l0aFxuICAgIC8vIHRoZSBoZWxkIHZhbHVlIHByb3ZpZGVkIGZvciBpdCAoaW5uZXJSZXNwb25zZS5ib2R5LnN0cmVhbSkuIFRoZSBoZWxkIHZhbHVlIGNhbiBiZSBhbnkgdmFsdWU6XG4gICAgLy8gYSBwcmltaXRpdmUgb3IgYW4gb2JqZWN0LCBldmVuIHVuZGVmaW5lZC4gSWYgdGhlIGhlbGQgdmFsdWUgaXMgYW4gb2JqZWN0LCB0aGUgcmVnaXN0cnkga2VlcHNcbiAgICAvLyBhIHN0cm9uZyByZWZlcmVuY2UgdG8gaXQgKHNvIGl0IGNhbiBwYXNzIGl0IHRvIHRoZSBjbGVhbnVwIGNhbGxiYWNrIGxhdGVyKS4gUmV3b3JkZWQgZnJvbVxuICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL0ZpbmFsaXphdGlvblJlZ2lzdHJ5XG4gICAgc3RyZWFtUmVnaXN0cnkucmVnaXN0ZXIocmVzcG9uc2UsIG5ldyBXZWFrUmVmKGlubmVyUmVzcG9uc2UuYm9keS5zdHJlYW0pKVxuICB9XG5cbiAgcmV0dXJuIHJlc3BvbnNlXG59XG5cbndlYmlkbC5jb252ZXJ0ZXJzLlJlYWRhYmxlU3RyZWFtID0gd2ViaWRsLmludGVyZmFjZUNvbnZlcnRlcihcbiAgUmVhZGFibGVTdHJlYW1cbilcblxud2ViaWRsLmNvbnZlcnRlcnMuRm9ybURhdGEgPSB3ZWJpZGwuaW50ZXJmYWNlQ29udmVydGVyKFxuICBGb3JtRGF0YVxuKVxuXG53ZWJpZGwuY29udmVydGVycy5VUkxTZWFyY2hQYXJhbXMgPSB3ZWJpZGwuaW50ZXJmYWNlQ29udmVydGVyKFxuICBVUkxTZWFyY2hQYXJhbXNcbilcblxuLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI3R5cGVkZWZkZWYteG1saHR0cHJlcXVlc3Rib2R5aW5pdFxud2ViaWRsLmNvbnZlcnRlcnMuWE1MSHR0cFJlcXVlc3RCb2R5SW5pdCA9IGZ1bmN0aW9uIChWLCBwcmVmaXgsIG5hbWUpIHtcbiAgaWYgKHR5cGVvZiBWID09PSAnc3RyaW5nJykge1xuICAgIHJldHVybiB3ZWJpZGwuY29udmVydGVycy5VU1ZTdHJpbmcoViwgcHJlZml4LCBuYW1lKVxuICB9XG5cbiAgaWYgKGlzQmxvYkxpa2UoVikpIHtcbiAgICByZXR1cm4gd2ViaWRsLmNvbnZlcnRlcnMuQmxvYihWLCBwcmVmaXgsIG5hbWUsIHsgc3RyaWN0OiBmYWxzZSB9KVxuICB9XG5cbiAgaWYgKEFycmF5QnVmZmVyLmlzVmlldyhWKSB8fCB0eXBlcy5pc0FycmF5QnVmZmVyKFYpKSB7XG4gICAgcmV0dXJuIHdlYmlkbC5jb252ZXJ0ZXJzLkJ1ZmZlclNvdXJjZShWLCBwcmVmaXgsIG5hbWUpXG4gIH1cblxuICBpZiAodXRpbC5pc0Zvcm1EYXRhTGlrZShWKSkge1xuICAgIHJldHVybiB3ZWJpZGwuY29udmVydGVycy5Gb3JtRGF0YShWLCBwcmVmaXgsIG5hbWUsIHsgc3RyaWN0OiBmYWxzZSB9KVxuICB9XG5cbiAgaWYgKFYgaW5zdGFuY2VvZiBVUkxTZWFyY2hQYXJhbXMpIHtcbiAgICByZXR1cm4gd2ViaWRsLmNvbnZlcnRlcnMuVVJMU2VhcmNoUGFyYW1zKFYsIHByZWZpeCwgbmFtZSlcbiAgfVxuXG4gIHJldHVybiB3ZWJpZGwuY29udmVydGVycy5ET01TdHJpbmcoViwgcHJlZml4LCBuYW1lKVxufVxuXG4vLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jYm9keWluaXRcbndlYmlkbC5jb252ZXJ0ZXJzLkJvZHlJbml0ID0gZnVuY3Rpb24gKFYsIHByZWZpeCwgYXJndW1lbnQpIHtcbiAgaWYgKFYgaW5zdGFuY2VvZiBSZWFkYWJsZVN0cmVhbSkge1xuICAgIHJldHVybiB3ZWJpZGwuY29udmVydGVycy5SZWFkYWJsZVN0cmVhbShWLCBwcmVmaXgsIGFyZ3VtZW50KVxuICB9XG5cbiAgLy8gTm90ZTogdGhlIHNwZWMgZG9lc24ndCBpbmNsdWRlIGFzeW5jIGl0ZXJhYmxlcyxcbiAgLy8gdGhpcyBpcyBhbiB1bmRpY2kgZXh0ZW5zaW9uLlxuICBpZiAoVj8uW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSkge1xuICAgIHJldHVybiBWXG4gIH1cblxuICByZXR1cm4gd2ViaWRsLmNvbnZlcnRlcnMuWE1MSHR0cFJlcXVlc3RCb2R5SW5pdChWLCBwcmVmaXgsIGFyZ3VtZW50KVxufVxuXG53ZWJpZGwuY29udmVydGVycy5SZXNwb25zZUluaXQgPSB3ZWJpZGwuZGljdGlvbmFyeUNvbnZlcnRlcihbXG4gIHtcbiAgICBrZXk6ICdzdGF0dXMnLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnNbJ3Vuc2lnbmVkIHNob3J0J10sXG4gICAgZGVmYXVsdFZhbHVlOiAoKSA9PiAyMDBcbiAgfSxcbiAge1xuICAgIGtleTogJ3N0YXR1c1RleHQnLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnMuQnl0ZVN0cmluZyxcbiAgICBkZWZhdWx0VmFsdWU6ICgpID0+ICcnXG4gIH0sXG4gIHtcbiAgICBrZXk6ICdoZWFkZXJzJyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzLkhlYWRlcnNJbml0XG4gIH1cbl0pXG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBpc05ldHdvcmtFcnJvcixcbiAgbWFrZU5ldHdvcmtFcnJvcixcbiAgbWFrZVJlc3BvbnNlLFxuICBtYWtlQXBwcm9wcmlhdGVOZXR3b3JrRXJyb3IsXG4gIGZpbHRlclJlc3BvbnNlLFxuICBSZXNwb25zZSxcbiAgY2xvbmVSZXNwb25zZSxcbiAgZnJvbUlubmVyUmVzcG9uc2Vcbn1cbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgeyBrQ29ubmVjdGVkLCBrU2l6ZSB9ID0gcmVxdWlyZSgnLi4vLi4vY29yZS9zeW1ib2xzJylcblxuY2xhc3MgQ29tcGF0V2Vha1JlZiB7XG4gIGNvbnN0cnVjdG9yICh2YWx1ZSkge1xuICAgIHRoaXMudmFsdWUgPSB2YWx1ZVxuICB9XG5cbiAgZGVyZWYgKCkge1xuICAgIHJldHVybiB0aGlzLnZhbHVlW2tDb25uZWN0ZWRdID09PSAwICYmIHRoaXMudmFsdWVba1NpemVdID09PSAwXG4gICAgICA/IHVuZGVmaW5lZFxuICAgICAgOiB0aGlzLnZhbHVlXG4gIH1cbn1cblxuY2xhc3MgQ29tcGF0RmluYWxpemVyIHtcbiAgY29uc3RydWN0b3IgKGZpbmFsaXplcikge1xuICAgIHRoaXMuZmluYWxpemVyID0gZmluYWxpemVyXG4gIH1cblxuICByZWdpc3RlciAoZGlzcGF0Y2hlciwga2V5KSB7XG4gICAgaWYgKGRpc3BhdGNoZXIub24pIHtcbiAgICAgIGRpc3BhdGNoZXIub24oJ2Rpc2Nvbm5lY3QnLCAoKSA9PiB7XG4gICAgICAgIGlmIChkaXNwYXRjaGVyW2tDb25uZWN0ZWRdID09PSAwICYmIGRpc3BhdGNoZXJba1NpemVdID09PSAwKSB7XG4gICAgICAgICAgdGhpcy5maW5hbGl6ZXIoa2V5KVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH1cbiAgfVxuXG4gIHVucmVnaXN0ZXIgKGtleSkge31cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKSB7XG4gIC8vIEZJWE1FOiByZW1vdmUgd29ya2Fyb3VuZCB3aGVuIHRoZSBOb2RlIGJ1ZyBpcyBiYWNrcG9ydGVkIHRvIHYxOFxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vbm9kZWpzL25vZGUvaXNzdWVzLzQ5MzQ0I2lzc3VlY29tbWVudC0xNzQxNzc2MzA4XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX1Y4X0NPVkVSQUdFICYmIHByb2Nlc3MudmVyc2lvbi5zdGFydHNXaXRoKCd2MTgnKSkge1xuICAgIHByb2Nlc3MuX3Jhd0RlYnVnKCdVc2luZyBjb21wYXRpYmlsaXR5IFdlYWtSZWYgYW5kIEZpbmFsaXphdGlvblJlZ2lzdHJ5JylcbiAgICByZXR1cm4ge1xuICAgICAgV2Vha1JlZjogQ29tcGF0V2Vha1JlZixcbiAgICAgIEZpbmFsaXphdGlvblJlZ2lzdHJ5OiBDb21wYXRGaW5hbGl6ZXJcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHsgV2Vha1JlZiwgRmluYWxpemF0aW9uUmVnaXN0cnkgfVxufVxuIiwgIi8qIGdsb2JhbHMgQWJvcnRDb250cm9sbGVyICovXG5cbid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7IGV4dHJhY3RCb2R5LCBtaXhpbkJvZHksIGNsb25lQm9keSwgYm9keVVudXNhYmxlIH0gPSByZXF1aXJlKCcuL2JvZHknKVxuY29uc3QgeyBIZWFkZXJzLCBmaWxsOiBmaWxsSGVhZGVycywgSGVhZGVyc0xpc3QsIHNldEhlYWRlcnNHdWFyZCwgZ2V0SGVhZGVyc0d1YXJkLCBzZXRIZWFkZXJzTGlzdCwgZ2V0SGVhZGVyc0xpc3QgfSA9IHJlcXVpcmUoJy4vaGVhZGVycycpXG5jb25zdCB7IEZpbmFsaXphdGlvblJlZ2lzdHJ5IH0gPSByZXF1aXJlKCcuL2Rpc3BhdGNoZXItd2Vha3JlZicpKClcbmNvbnN0IHV0aWwgPSByZXF1aXJlKCcuLi8uLi9jb3JlL3V0aWwnKVxuY29uc3Qgbm9kZVV0aWwgPSByZXF1aXJlKCdub2RlOnV0aWwnKVxuY29uc3Qge1xuICBpc1ZhbGlkSFRUUFRva2VuLFxuICBzYW1lT3JpZ2luLFxuICBlbnZpcm9ubWVudFNldHRpbmdzT2JqZWN0XG59ID0gcmVxdWlyZSgnLi91dGlsJylcbmNvbnN0IHtcbiAgZm9yYmlkZGVuTWV0aG9kc1NldCxcbiAgY29yc1NhZmVMaXN0ZWRNZXRob2RzU2V0LFxuICByZWZlcnJlclBvbGljeSxcbiAgcmVxdWVzdFJlZGlyZWN0LFxuICByZXF1ZXN0TW9kZSxcbiAgcmVxdWVzdENyZWRlbnRpYWxzLFxuICByZXF1ZXN0Q2FjaGUsXG4gIHJlcXVlc3REdXBsZXhcbn0gPSByZXF1aXJlKCcuL2NvbnN0YW50cycpXG5jb25zdCB7IGtFbnVtZXJhYmxlUHJvcGVydHksIG5vcm1hbGl6ZWRNZXRob2RSZWNvcmRzQmFzZSwgbm9ybWFsaXplZE1ldGhvZFJlY29yZHMgfSA9IHV0aWxcbmNvbnN0IHsga0hlYWRlcnMsIGtTaWduYWwsIGtTdGF0ZSwga0Rpc3BhdGNoZXIgfSA9IHJlcXVpcmUoJy4vc3ltYm9scycpXG5jb25zdCB7IHdlYmlkbCB9ID0gcmVxdWlyZSgnLi93ZWJpZGwnKVxuY29uc3QgeyBVUkxTZXJpYWxpemVyIH0gPSByZXF1aXJlKCcuL2RhdGEtdXJsJylcbmNvbnN0IHsga0NvbnN0cnVjdCB9ID0gcmVxdWlyZSgnLi4vLi4vY29yZS9zeW1ib2xzJylcbmNvbnN0IGFzc2VydCA9IHJlcXVpcmUoJ25vZGU6YXNzZXJ0JylcbmNvbnN0IHsgZ2V0TWF4TGlzdGVuZXJzLCBzZXRNYXhMaXN0ZW5lcnMsIGdldEV2ZW50TGlzdGVuZXJzLCBkZWZhdWx0TWF4TGlzdGVuZXJzIH0gPSByZXF1aXJlKCdub2RlOmV2ZW50cycpXG5cbmNvbnN0IGtBYm9ydENvbnRyb2xsZXIgPSBTeW1ib2woJ2Fib3J0Q29udHJvbGxlcicpXG5cbmNvbnN0IHJlcXVlc3RGaW5hbGl6ZXIgPSBuZXcgRmluYWxpemF0aW9uUmVnaXN0cnkoKHsgc2lnbmFsLCBhYm9ydCB9KSA9PiB7XG4gIHNpZ25hbC5yZW1vdmVFdmVudExpc3RlbmVyKCdhYm9ydCcsIGFib3J0KVxufSlcblxuY29uc3QgZGVwZW5kZW50Q29udHJvbGxlck1hcCA9IG5ldyBXZWFrTWFwKClcblxuZnVuY3Rpb24gYnVpbGRBYm9ydCAoYWNSZWYpIHtcbiAgcmV0dXJuIGFib3J0XG5cbiAgZnVuY3Rpb24gYWJvcnQgKCkge1xuICAgIGNvbnN0IGFjID0gYWNSZWYuZGVyZWYoKVxuICAgIGlmIChhYyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyBDdXJyZW50bHksIHRoZXJlIGlzIGEgcHJvYmxlbSB3aXRoIEZpbmFsaXphdGlvblJlZ2lzdHJ5LlxuICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy9ub2RlL2lzc3Vlcy80OTM0NFxuICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy9ub2RlL2lzc3Vlcy80Nzc0OFxuICAgICAgLy8gSW4gdGhlIGNhc2Ugb2YgYWJvcnQsIHRoZSBmaXJzdCBzdGVwIGlzIHRvIHVucmVnaXN0ZXIgZnJvbSBpdC5cbiAgICAgIC8vIElmIHRoZSBjb250cm9sbGVyIGNhbiByZWZlciB0byBpdCwgaXQgaXMgc3RpbGwgcmVnaXN0ZXJlZC5cbiAgICAgIC8vIEl0IHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgZnV0dXJlLlxuICAgICAgcmVxdWVzdEZpbmFsaXplci51bnJlZ2lzdGVyKGFib3J0KVxuXG4gICAgICAvLyBVbnN1YnNjcmliZSBhIGxpc3RlbmVyLlxuICAgICAgLy8gRmluYWxpemF0aW9uUmVnaXN0cnkgd2lsbCBubyBsb25nZXIgYmUgY2FsbGVkLCBzbyB0aGlzIG11c3QgYmUgZG9uZS5cbiAgICAgIHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcignYWJvcnQnLCBhYm9ydClcblxuICAgICAgYWMuYWJvcnQodGhpcy5yZWFzb24pXG5cbiAgICAgIGNvbnN0IGNvbnRyb2xsZXJMaXN0ID0gZGVwZW5kZW50Q29udHJvbGxlck1hcC5nZXQoYWMuc2lnbmFsKVxuXG4gICAgICBpZiAoY29udHJvbGxlckxpc3QgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBpZiAoY29udHJvbGxlckxpc3Quc2l6ZSAhPT0gMCkge1xuICAgICAgICAgIGZvciAoY29uc3QgcmVmIG9mIGNvbnRyb2xsZXJMaXN0KSB7XG4gICAgICAgICAgICBjb25zdCBjdHJsID0gcmVmLmRlcmVmKClcbiAgICAgICAgICAgIGlmIChjdHJsICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgY3RybC5hYm9ydCh0aGlzLnJlYXNvbilcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgY29udHJvbGxlckxpc3QuY2xlYXIoKVxuICAgICAgICB9XG4gICAgICAgIGRlcGVuZGVudENvbnRyb2xsZXJNYXAuZGVsZXRlKGFjLnNpZ25hbClcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxubGV0IHBhdGNoTWV0aG9kV2FybmluZyA9IGZhbHNlXG5cbi8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNyZXF1ZXN0LWNsYXNzXG5jbGFzcyBSZXF1ZXN0IHtcbiAgLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2RvbS1yZXF1ZXN0XG4gIGNvbnN0cnVjdG9yIChpbnB1dCwgaW5pdCA9IHt9KSB7XG4gICAgd2ViaWRsLnV0aWwubWFya0FzVW5jbG9uZWFibGUodGhpcylcbiAgICBpZiAoaW5wdXQgPT09IGtDb25zdHJ1Y3QpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGNvbnN0IHByZWZpeCA9ICdSZXF1ZXN0IGNvbnN0cnVjdG9yJ1xuICAgIHdlYmlkbC5hcmd1bWVudExlbmd0aENoZWNrKGFyZ3VtZW50cywgMSwgcHJlZml4KVxuXG4gICAgaW5wdXQgPSB3ZWJpZGwuY29udmVydGVycy5SZXF1ZXN0SW5mbyhpbnB1dCwgcHJlZml4LCAnaW5wdXQnKVxuICAgIGluaXQgPSB3ZWJpZGwuY29udmVydGVycy5SZXF1ZXN0SW5pdChpbml0LCBwcmVmaXgsICdpbml0JylcblxuICAgIC8vIDEuIExldCByZXF1ZXN0IGJlIG51bGwuXG4gICAgbGV0IHJlcXVlc3QgPSBudWxsXG5cbiAgICAvLyAyLiBMZXQgZmFsbGJhY2tNb2RlIGJlIG51bGwuXG4gICAgbGV0IGZhbGxiYWNrTW9kZSA9IG51bGxcblxuICAgIC8vIDMuIExldCBiYXNlVVJMIGJlIHRoaXNcdTIwMTlzIHJlbGV2YW50IHNldHRpbmdzIG9iamVjdFx1MjAxOXMgQVBJIGJhc2UgVVJMLlxuICAgIGNvbnN0IGJhc2VVcmwgPSBlbnZpcm9ubWVudFNldHRpbmdzT2JqZWN0LnNldHRpbmdzT2JqZWN0LmJhc2VVcmxcblxuICAgIC8vIDQuIExldCBzaWduYWwgYmUgbnVsbC5cbiAgICBsZXQgc2lnbmFsID0gbnVsbFxuXG4gICAgLy8gNS4gSWYgaW5wdXQgaXMgYSBzdHJpbmcsIHRoZW46XG4gICAgaWYgKHR5cGVvZiBpbnB1dCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHRoaXNba0Rpc3BhdGNoZXJdID0gaW5pdC5kaXNwYXRjaGVyXG5cbiAgICAgIC8vIDEuIExldCBwYXJzZWRVUkwgYmUgdGhlIHJlc3VsdCBvZiBwYXJzaW5nIGlucHV0IHdpdGggYmFzZVVSTC5cbiAgICAgIC8vIDIuIElmIHBhcnNlZFVSTCBpcyBmYWlsdXJlLCB0aGVuIHRocm93IGEgVHlwZUVycm9yLlxuICAgICAgbGV0IHBhcnNlZFVSTFxuICAgICAgdHJ5IHtcbiAgICAgICAgcGFyc2VkVVJMID0gbmV3IFVSTChpbnB1dCwgYmFzZVVybClcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdGYWlsZWQgdG8gcGFyc2UgVVJMIGZyb20gJyArIGlucHV0LCB7IGNhdXNlOiBlcnIgfSlcbiAgICAgIH1cblxuICAgICAgLy8gMy4gSWYgcGFyc2VkVVJMIGluY2x1ZGVzIGNyZWRlbnRpYWxzLCB0aGVuIHRocm93IGEgVHlwZUVycm9yLlxuICAgICAgaWYgKHBhcnNlZFVSTC51c2VybmFtZSB8fCBwYXJzZWRVUkwucGFzc3dvcmQpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgICAgICAnUmVxdWVzdCBjYW5ub3QgYmUgY29uc3RydWN0ZWQgZnJvbSBhIFVSTCB0aGF0IGluY2x1ZGVzIGNyZWRlbnRpYWxzOiAnICtcbiAgICAgICAgICAgIGlucHV0XG4gICAgICAgIClcbiAgICAgIH1cblxuICAgICAgLy8gNC4gU2V0IHJlcXVlc3QgdG8gYSBuZXcgcmVxdWVzdCB3aG9zZSBVUkwgaXMgcGFyc2VkVVJMLlxuICAgICAgcmVxdWVzdCA9IG1ha2VSZXF1ZXN0KHsgdXJsTGlzdDogW3BhcnNlZFVSTF0gfSlcblxuICAgICAgLy8gNS4gU2V0IGZhbGxiYWNrTW9kZSB0byBcImNvcnNcIi5cbiAgICAgIGZhbGxiYWNrTW9kZSA9ICdjb3JzJ1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzW2tEaXNwYXRjaGVyXSA9IGluaXQuZGlzcGF0Y2hlciB8fCBpbnB1dFtrRGlzcGF0Y2hlcl1cblxuICAgICAgLy8gNi4gT3RoZXJ3aXNlOlxuXG4gICAgICAvLyA3LiBBc3NlcnQ6IGlucHV0IGlzIGEgUmVxdWVzdCBvYmplY3QuXG4gICAgICBhc3NlcnQoaW5wdXQgaW5zdGFuY2VvZiBSZXF1ZXN0KVxuXG4gICAgICAvLyA4LiBTZXQgcmVxdWVzdCB0byBpbnB1dFx1MjAxOXMgcmVxdWVzdC5cbiAgICAgIHJlcXVlc3QgPSBpbnB1dFtrU3RhdGVdXG5cbiAgICAgIC8vIDkuIFNldCBzaWduYWwgdG8gaW5wdXRcdTIwMTlzIHNpZ25hbC5cbiAgICAgIHNpZ25hbCA9IGlucHV0W2tTaWduYWxdXG4gICAgfVxuXG4gICAgLy8gNy4gTGV0IG9yaWdpbiBiZSB0aGlzXHUyMDE5cyByZWxldmFudCBzZXR0aW5ncyBvYmplY3RcdTIwMTlzIG9yaWdpbi5cbiAgICBjb25zdCBvcmlnaW4gPSBlbnZpcm9ubWVudFNldHRpbmdzT2JqZWN0LnNldHRpbmdzT2JqZWN0Lm9yaWdpblxuXG4gICAgLy8gOC4gTGV0IHdpbmRvdyBiZSBcImNsaWVudFwiLlxuICAgIGxldCB3aW5kb3cgPSAnY2xpZW50J1xuXG4gICAgLy8gOS4gSWYgcmVxdWVzdFx1MjAxOXMgd2luZG93IGlzIGFuIGVudmlyb25tZW50IHNldHRpbmdzIG9iamVjdCBhbmQgaXRzIG9yaWdpblxuICAgIC8vIGlzIHNhbWUgb3JpZ2luIHdpdGggb3JpZ2luLCB0aGVuIHNldCB3aW5kb3cgdG8gcmVxdWVzdFx1MjAxOXMgd2luZG93LlxuICAgIGlmIChcbiAgICAgIHJlcXVlc3Qud2luZG93Py5jb25zdHJ1Y3Rvcj8ubmFtZSA9PT0gJ0Vudmlyb25tZW50U2V0dGluZ3NPYmplY3QnICYmXG4gICAgICBzYW1lT3JpZ2luKHJlcXVlc3Qud2luZG93LCBvcmlnaW4pXG4gICAgKSB7XG4gICAgICB3aW5kb3cgPSByZXF1ZXN0LndpbmRvd1xuICAgIH1cblxuICAgIC8vIDEwLiBJZiBpbml0W1wid2luZG93XCJdIGV4aXN0cyBhbmQgaXMgbm9uLW51bGwsIHRoZW4gdGhyb3cgYSBUeXBlRXJyb3IuXG4gICAgaWYgKGluaXQud2luZG93ICE9IG51bGwpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYCd3aW5kb3cnIG9wdGlvbiAnJHt3aW5kb3d9JyBtdXN0IGJlIG51bGxgKVxuICAgIH1cblxuICAgIC8vIDExLiBJZiBpbml0W1wid2luZG93XCJdIGV4aXN0cywgdGhlbiBzZXQgd2luZG93IHRvIFwibm8td2luZG93XCIuXG4gICAgaWYgKCd3aW5kb3cnIGluIGluaXQpIHtcbiAgICAgIHdpbmRvdyA9ICduby13aW5kb3cnXG4gICAgfVxuXG4gICAgLy8gMTIuIFNldCByZXF1ZXN0IHRvIGEgbmV3IHJlcXVlc3Qgd2l0aCB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6XG4gICAgcmVxdWVzdCA9IG1ha2VSZXF1ZXN0KHtcbiAgICAgIC8vIFVSTCByZXF1ZXN0XHUyMDE5cyBVUkwuXG4gICAgICAvLyB1bmRpY2kgaW1wbGVtZW50YXRpb24gbm90ZTogdGhpcyBpcyBzZXQgYXMgdGhlIGZpcnN0IGl0ZW0gaW4gcmVxdWVzdCdzIHVybExpc3QgaW4gbWFrZVJlcXVlc3RcbiAgICAgIC8vIG1ldGhvZCByZXF1ZXN0XHUyMDE5cyBtZXRob2QuXG4gICAgICBtZXRob2Q6IHJlcXVlc3QubWV0aG9kLFxuICAgICAgLy8gaGVhZGVyIGxpc3QgQSBjb3B5IG9mIHJlcXVlc3RcdTIwMTlzIGhlYWRlciBsaXN0LlxuICAgICAgLy8gdW5kaWNpIGltcGxlbWVudGF0aW9uIG5vdGU6IGhlYWRlcnNMaXN0IGlzIGNsb25lZCBpbiBtYWtlUmVxdWVzdFxuICAgICAgaGVhZGVyc0xpc3Q6IHJlcXVlc3QuaGVhZGVyc0xpc3QsXG4gICAgICAvLyB1bnNhZmUtcmVxdWVzdCBmbGFnIFNldC5cbiAgICAgIHVuc2FmZVJlcXVlc3Q6IHJlcXVlc3QudW5zYWZlUmVxdWVzdCxcbiAgICAgIC8vIGNsaWVudCBUaGlzXHUyMDE5cyByZWxldmFudCBzZXR0aW5ncyBvYmplY3QuXG4gICAgICBjbGllbnQ6IGVudmlyb25tZW50U2V0dGluZ3NPYmplY3Quc2V0dGluZ3NPYmplY3QsXG4gICAgICAvLyB3aW5kb3cgd2luZG93LlxuICAgICAgd2luZG93LFxuICAgICAgLy8gcHJpb3JpdHkgcmVxdWVzdFx1MjAxOXMgcHJpb3JpdHkuXG4gICAgICBwcmlvcml0eTogcmVxdWVzdC5wcmlvcml0eSxcbiAgICAgIC8vIG9yaWdpbiByZXF1ZXN0XHUyMDE5cyBvcmlnaW4uIFRoZSBwcm9wYWdhdGlvbiBvZiB0aGUgb3JpZ2luIGlzIG9ubHkgc2lnbmlmaWNhbnQgZm9yIG5hdmlnYXRpb24gcmVxdWVzdHNcbiAgICAgIC8vIGJlaW5nIGhhbmRsZWQgYnkgYSBzZXJ2aWNlIHdvcmtlci4gSW4gdGhpcyBzY2VuYXJpbyBhIHJlcXVlc3QgY2FuIGhhdmUgYW4gb3JpZ2luIHRoYXQgaXMgZGlmZmVyZW50XG4gICAgICAvLyBmcm9tIHRoZSBjdXJyZW50IGNsaWVudC5cbiAgICAgIG9yaWdpbjogcmVxdWVzdC5vcmlnaW4sXG4gICAgICAvLyByZWZlcnJlciByZXF1ZXN0XHUyMDE5cyByZWZlcnJlci5cbiAgICAgIHJlZmVycmVyOiByZXF1ZXN0LnJlZmVycmVyLFxuICAgICAgLy8gcmVmZXJyZXIgcG9saWN5IHJlcXVlc3RcdTIwMTlzIHJlZmVycmVyIHBvbGljeS5cbiAgICAgIHJlZmVycmVyUG9saWN5OiByZXF1ZXN0LnJlZmVycmVyUG9saWN5LFxuICAgICAgLy8gbW9kZSByZXF1ZXN0XHUyMDE5cyBtb2RlLlxuICAgICAgbW9kZTogcmVxdWVzdC5tb2RlLFxuICAgICAgLy8gY3JlZGVudGlhbHMgbW9kZSByZXF1ZXN0XHUyMDE5cyBjcmVkZW50aWFscyBtb2RlLlxuICAgICAgY3JlZGVudGlhbHM6IHJlcXVlc3QuY3JlZGVudGlhbHMsXG4gICAgICAvLyBjYWNoZSBtb2RlIHJlcXVlc3RcdTIwMTlzIGNhY2hlIG1vZGUuXG4gICAgICBjYWNoZTogcmVxdWVzdC5jYWNoZSxcbiAgICAgIC8vIHJlZGlyZWN0IG1vZGUgcmVxdWVzdFx1MjAxOXMgcmVkaXJlY3QgbW9kZS5cbiAgICAgIHJlZGlyZWN0OiByZXF1ZXN0LnJlZGlyZWN0LFxuICAgICAgLy8gaW50ZWdyaXR5IG1ldGFkYXRhIHJlcXVlc3RcdTIwMTlzIGludGVncml0eSBtZXRhZGF0YS5cbiAgICAgIGludGVncml0eTogcmVxdWVzdC5pbnRlZ3JpdHksXG4gICAgICAvLyBrZWVwYWxpdmUgcmVxdWVzdFx1MjAxOXMga2VlcGFsaXZlLlxuICAgICAga2VlcGFsaXZlOiByZXF1ZXN0LmtlZXBhbGl2ZSxcbiAgICAgIC8vIHJlbG9hZC1uYXZpZ2F0aW9uIGZsYWcgcmVxdWVzdFx1MjAxOXMgcmVsb2FkLW5hdmlnYXRpb24gZmxhZy5cbiAgICAgIHJlbG9hZE5hdmlnYXRpb246IHJlcXVlc3QucmVsb2FkTmF2aWdhdGlvbixcbiAgICAgIC8vIGhpc3RvcnktbmF2aWdhdGlvbiBmbGFnIHJlcXVlc3RcdTIwMTlzIGhpc3RvcnktbmF2aWdhdGlvbiBmbGFnLlxuICAgICAgaGlzdG9yeU5hdmlnYXRpb246IHJlcXVlc3QuaGlzdG9yeU5hdmlnYXRpb24sXG4gICAgICAvLyBVUkwgbGlzdCBBIGNsb25lIG9mIHJlcXVlc3RcdTIwMTlzIFVSTCBsaXN0LlxuICAgICAgdXJsTGlzdDogWy4uLnJlcXVlc3QudXJsTGlzdF1cbiAgICB9KVxuXG4gICAgY29uc3QgaW5pdEhhc0tleSA9IE9iamVjdC5rZXlzKGluaXQpLmxlbmd0aCAhPT0gMFxuXG4gICAgLy8gMTMuIElmIGluaXQgaXMgbm90IGVtcHR5LCB0aGVuOlxuICAgIGlmIChpbml0SGFzS2V5KSB7XG4gICAgICAvLyAxLiBJZiByZXF1ZXN0XHUyMDE5cyBtb2RlIGlzIFwibmF2aWdhdGVcIiwgdGhlbiBzZXQgaXQgdG8gXCJzYW1lLW9yaWdpblwiLlxuICAgICAgaWYgKHJlcXVlc3QubW9kZSA9PT0gJ25hdmlnYXRlJykge1xuICAgICAgICByZXF1ZXN0Lm1vZGUgPSAnc2FtZS1vcmlnaW4nXG4gICAgICB9XG5cbiAgICAgIC8vIDIuIFVuc2V0IHJlcXVlc3RcdTIwMTlzIHJlbG9hZC1uYXZpZ2F0aW9uIGZsYWcuXG4gICAgICByZXF1ZXN0LnJlbG9hZE5hdmlnYXRpb24gPSBmYWxzZVxuXG4gICAgICAvLyAzLiBVbnNldCByZXF1ZXN0XHUyMDE5cyBoaXN0b3J5LW5hdmlnYXRpb24gZmxhZy5cbiAgICAgIHJlcXVlc3QuaGlzdG9yeU5hdmlnYXRpb24gPSBmYWxzZVxuXG4gICAgICAvLyA0LiBTZXQgcmVxdWVzdFx1MjAxOXMgb3JpZ2luIHRvIFwiY2xpZW50XCIuXG4gICAgICByZXF1ZXN0Lm9yaWdpbiA9ICdjbGllbnQnXG5cbiAgICAgIC8vIDUuIFNldCByZXF1ZXN0XHUyMDE5cyByZWZlcnJlciB0byBcImNsaWVudFwiXG4gICAgICByZXF1ZXN0LnJlZmVycmVyID0gJ2NsaWVudCdcblxuICAgICAgLy8gNi4gU2V0IHJlcXVlc3RcdTIwMTlzIHJlZmVycmVyIHBvbGljeSB0byB0aGUgZW1wdHkgc3RyaW5nLlxuICAgICAgcmVxdWVzdC5yZWZlcnJlclBvbGljeSA9ICcnXG5cbiAgICAgIC8vIDcuIFNldCByZXF1ZXN0XHUyMDE5cyBVUkwgdG8gcmVxdWVzdFx1MjAxOXMgY3VycmVudCBVUkwuXG4gICAgICByZXF1ZXN0LnVybCA9IHJlcXVlc3QudXJsTGlzdFtyZXF1ZXN0LnVybExpc3QubGVuZ3RoIC0gMV1cblxuICAgICAgLy8gOC4gU2V0IHJlcXVlc3RcdTIwMTlzIFVSTCBsaXN0IHRvIFx1MDBBQiByZXF1ZXN0XHUyMDE5cyBVUkwgXHUwMEJCLlxuICAgICAgcmVxdWVzdC51cmxMaXN0ID0gW3JlcXVlc3QudXJsXVxuICAgIH1cblxuICAgIC8vIDE0LiBJZiBpbml0W1wicmVmZXJyZXJcIl0gZXhpc3RzLCB0aGVuOlxuICAgIGlmIChpbml0LnJlZmVycmVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIDEuIExldCByZWZlcnJlciBiZSBpbml0W1wicmVmZXJyZXJcIl0uXG4gICAgICBjb25zdCByZWZlcnJlciA9IGluaXQucmVmZXJyZXJcblxuICAgICAgLy8gMi4gSWYgcmVmZXJyZXIgaXMgdGhlIGVtcHR5IHN0cmluZywgdGhlbiBzZXQgcmVxdWVzdFx1MjAxOXMgcmVmZXJyZXIgdG8gXCJuby1yZWZlcnJlclwiLlxuICAgICAgaWYgKHJlZmVycmVyID09PSAnJykge1xuICAgICAgICByZXF1ZXN0LnJlZmVycmVyID0gJ25vLXJlZmVycmVyJ1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gMS4gTGV0IHBhcnNlZFJlZmVycmVyIGJlIHRoZSByZXN1bHQgb2YgcGFyc2luZyByZWZlcnJlciB3aXRoXG4gICAgICAgIC8vIGJhc2VVUkwuXG4gICAgICAgIC8vIDIuIElmIHBhcnNlZFJlZmVycmVyIGlzIGZhaWx1cmUsIHRoZW4gdGhyb3cgYSBUeXBlRXJyb3IuXG4gICAgICAgIGxldCBwYXJzZWRSZWZlcnJlclxuICAgICAgICB0cnkge1xuICAgICAgICAgIHBhcnNlZFJlZmVycmVyID0gbmV3IFVSTChyZWZlcnJlciwgYmFzZVVybClcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgUmVmZXJyZXIgXCIke3JlZmVycmVyfVwiIGlzIG5vdCBhIHZhbGlkIFVSTC5gLCB7IGNhdXNlOiBlcnIgfSlcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIDMuIElmIG9uZSBvZiB0aGUgZm9sbG93aW5nIGlzIHRydWVcbiAgICAgICAgLy8gLSBwYXJzZWRSZWZlcnJlclx1MjAxOXMgc2NoZW1lIGlzIFwiYWJvdXRcIiBhbmQgcGF0aCBpcyB0aGUgc3RyaW5nIFwiY2xpZW50XCJcbiAgICAgICAgLy8gLSBwYXJzZWRSZWZlcnJlclx1MjAxOXMgb3JpZ2luIGlzIG5vdCBzYW1lIG9yaWdpbiB3aXRoIG9yaWdpblxuICAgICAgICAvLyB0aGVuIHNldCByZXF1ZXN0XHUyMDE5cyByZWZlcnJlciB0byBcImNsaWVudFwiLlxuICAgICAgICBpZiAoXG4gICAgICAgICAgKHBhcnNlZFJlZmVycmVyLnByb3RvY29sID09PSAnYWJvdXQ6JyAmJiBwYXJzZWRSZWZlcnJlci5ob3N0bmFtZSA9PT0gJ2NsaWVudCcpIHx8XG4gICAgICAgICAgKG9yaWdpbiAmJiAhc2FtZU9yaWdpbihwYXJzZWRSZWZlcnJlciwgZW52aXJvbm1lbnRTZXR0aW5nc09iamVjdC5zZXR0aW5nc09iamVjdC5iYXNlVXJsKSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgcmVxdWVzdC5yZWZlcnJlciA9ICdjbGllbnQnXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gNC4gT3RoZXJ3aXNlLCBzZXQgcmVxdWVzdFx1MjAxOXMgcmVmZXJyZXIgdG8gcGFyc2VkUmVmZXJyZXIuXG4gICAgICAgICAgcmVxdWVzdC5yZWZlcnJlciA9IHBhcnNlZFJlZmVycmVyXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyAxNS4gSWYgaW5pdFtcInJlZmVycmVyUG9saWN5XCJdIGV4aXN0cywgdGhlbiBzZXQgcmVxdWVzdFx1MjAxOXMgcmVmZXJyZXIgcG9saWN5XG4gICAgLy8gdG8gaXQuXG4gICAgaWYgKGluaXQucmVmZXJyZXJQb2xpY3kgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmVxdWVzdC5yZWZlcnJlclBvbGljeSA9IGluaXQucmVmZXJyZXJQb2xpY3lcbiAgICB9XG5cbiAgICAvLyAxNi4gTGV0IG1vZGUgYmUgaW5pdFtcIm1vZGVcIl0gaWYgaXQgZXhpc3RzLCBhbmQgZmFsbGJhY2tNb2RlIG90aGVyd2lzZS5cbiAgICBsZXQgbW9kZVxuICAgIGlmIChpbml0Lm1vZGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgbW9kZSA9IGluaXQubW9kZVxuICAgIH0gZWxzZSB7XG4gICAgICBtb2RlID0gZmFsbGJhY2tNb2RlXG4gICAgfVxuXG4gICAgLy8gMTcuIElmIG1vZGUgaXMgXCJuYXZpZ2F0ZVwiLCB0aGVuIHRocm93IGEgVHlwZUVycm9yLlxuICAgIGlmIChtb2RlID09PSAnbmF2aWdhdGUnKSB7XG4gICAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmV4Y2VwdGlvbih7XG4gICAgICAgIGhlYWRlcjogJ1JlcXVlc3QgY29uc3RydWN0b3InLFxuICAgICAgICBtZXNzYWdlOiAnaW52YWxpZCByZXF1ZXN0IG1vZGUgbmF2aWdhdGUuJ1xuICAgICAgfSlcbiAgICB9XG5cbiAgICAvLyAxOC4gSWYgbW9kZSBpcyBub24tbnVsbCwgc2V0IHJlcXVlc3RcdTIwMTlzIG1vZGUgdG8gbW9kZS5cbiAgICBpZiAobW9kZSAhPSBudWxsKSB7XG4gICAgICByZXF1ZXN0Lm1vZGUgPSBtb2RlXG4gICAgfVxuXG4gICAgLy8gMTkuIElmIGluaXRbXCJjcmVkZW50aWFsc1wiXSBleGlzdHMsIHRoZW4gc2V0IHJlcXVlc3RcdTIwMTlzIGNyZWRlbnRpYWxzIG1vZGVcbiAgICAvLyB0byBpdC5cbiAgICBpZiAoaW5pdC5jcmVkZW50aWFscyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXF1ZXN0LmNyZWRlbnRpYWxzID0gaW5pdC5jcmVkZW50aWFsc1xuICAgIH1cblxuICAgIC8vIDE4LiBJZiBpbml0W1wiY2FjaGVcIl0gZXhpc3RzLCB0aGVuIHNldCByZXF1ZXN0XHUyMDE5cyBjYWNoZSBtb2RlIHRvIGl0LlxuICAgIGlmIChpbml0LmNhY2hlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJlcXVlc3QuY2FjaGUgPSBpbml0LmNhY2hlXG4gICAgfVxuXG4gICAgLy8gMjEuIElmIHJlcXVlc3RcdTIwMTlzIGNhY2hlIG1vZGUgaXMgXCJvbmx5LWlmLWNhY2hlZFwiIGFuZCByZXF1ZXN0XHUyMDE5cyBtb2RlIGlzXG4gICAgLy8gbm90IFwic2FtZS1vcmlnaW5cIiwgdGhlbiB0aHJvdyBhIFR5cGVFcnJvci5cbiAgICBpZiAocmVxdWVzdC5jYWNoZSA9PT0gJ29ubHktaWYtY2FjaGVkJyAmJiByZXF1ZXN0Lm1vZGUgIT09ICdzYW1lLW9yaWdpbicpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAgIFwiJ29ubHktaWYtY2FjaGVkJyBjYW4gYmUgc2V0IG9ubHkgd2l0aCAnc2FtZS1vcmlnaW4nIG1vZGVcIlxuICAgICAgKVxuICAgIH1cblxuICAgIC8vIDIyLiBJZiBpbml0W1wicmVkaXJlY3RcIl0gZXhpc3RzLCB0aGVuIHNldCByZXF1ZXN0XHUyMDE5cyByZWRpcmVjdCBtb2RlIHRvIGl0LlxuICAgIGlmIChpbml0LnJlZGlyZWN0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJlcXVlc3QucmVkaXJlY3QgPSBpbml0LnJlZGlyZWN0XG4gICAgfVxuXG4gICAgLy8gMjMuIElmIGluaXRbXCJpbnRlZ3JpdHlcIl0gZXhpc3RzLCB0aGVuIHNldCByZXF1ZXN0XHUyMDE5cyBpbnRlZ3JpdHkgbWV0YWRhdGEgdG8gaXQuXG4gICAgaWYgKGluaXQuaW50ZWdyaXR5ICE9IG51bGwpIHtcbiAgICAgIHJlcXVlc3QuaW50ZWdyaXR5ID0gU3RyaW5nKGluaXQuaW50ZWdyaXR5KVxuICAgIH1cblxuICAgIC8vIDI0LiBJZiBpbml0W1wia2VlcGFsaXZlXCJdIGV4aXN0cywgdGhlbiBzZXQgcmVxdWVzdFx1MjAxOXMga2VlcGFsaXZlIHRvIGl0LlxuICAgIGlmIChpbml0LmtlZXBhbGl2ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXF1ZXN0LmtlZXBhbGl2ZSA9IEJvb2xlYW4oaW5pdC5rZWVwYWxpdmUpXG4gICAgfVxuXG4gICAgLy8gMjUuIElmIGluaXRbXCJtZXRob2RcIl0gZXhpc3RzLCB0aGVuOlxuICAgIGlmIChpbml0Lm1ldGhvZCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyAxLiBMZXQgbWV0aG9kIGJlIGluaXRbXCJtZXRob2RcIl0uXG4gICAgICBsZXQgbWV0aG9kID0gaW5pdC5tZXRob2RcblxuICAgICAgY29uc3QgbWF5QmVOb3JtYWxpemVkID0gbm9ybWFsaXplZE1ldGhvZFJlY29yZHNbbWV0aG9kXVxuXG4gICAgICBpZiAobWF5QmVOb3JtYWxpemVkICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgLy8gTm90ZTogQnlwYXNzIHZhbGlkYXRpb24gREVMRVRFLCBHRVQsIEhFQUQsIE9QVElPTlMsIFBPU1QsIFBVVCwgUEFUQ0ggYW5kIHRoZXNlIGxvd2VyY2FzZSBvbmVzXG4gICAgICAgIHJlcXVlc3QubWV0aG9kID0gbWF5QmVOb3JtYWxpemVkXG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyAyLiBJZiBtZXRob2QgaXMgbm90IGEgbWV0aG9kIG9yIG1ldGhvZCBpcyBhIGZvcmJpZGRlbiBtZXRob2QsIHRoZW5cbiAgICAgICAgLy8gdGhyb3cgYSBUeXBlRXJyb3IuXG4gICAgICAgIGlmICghaXNWYWxpZEhUVFBUb2tlbihtZXRob2QpKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgJyR7bWV0aG9kfScgaXMgbm90IGEgdmFsaWQgSFRUUCBtZXRob2QuYClcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHVwcGVyQ2FzZSA9IG1ldGhvZC50b1VwcGVyQ2FzZSgpXG5cbiAgICAgICAgaWYgKGZvcmJpZGRlbk1ldGhvZHNTZXQuaGFzKHVwcGVyQ2FzZSkpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGAnJHttZXRob2R9JyBIVFRQIG1ldGhvZCBpcyB1bnN1cHBvcnRlZC5gKVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gMy4gTm9ybWFsaXplIG1ldGhvZC5cbiAgICAgICAgLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2NvbmNlcHQtbWV0aG9kLW5vcm1hbGl6ZVxuICAgICAgICAvLyBOb3RlOiBtdXN0IGJlIGluIHVwcGVyY2FzZVxuICAgICAgICBtZXRob2QgPSBub3JtYWxpemVkTWV0aG9kUmVjb3Jkc0Jhc2VbdXBwZXJDYXNlXSA/PyBtZXRob2RcblxuICAgICAgICAvLyA0LiBTZXQgcmVxdWVzdFx1MjAxOXMgbWV0aG9kIHRvIG1ldGhvZC5cbiAgICAgICAgcmVxdWVzdC5tZXRob2QgPSBtZXRob2RcbiAgICAgIH1cblxuICAgICAgaWYgKCFwYXRjaE1ldGhvZFdhcm5pbmcgJiYgcmVxdWVzdC5tZXRob2QgPT09ICdwYXRjaCcpIHtcbiAgICAgICAgcHJvY2Vzcy5lbWl0V2FybmluZygnVXNpbmcgYHBhdGNoYCBpcyBoaWdobHkgbGlrZWx5IHRvIHJlc3VsdCBpbiBhIGA0MDUgTWV0aG9kIE5vdCBBbGxvd2VkYC4gYFBBVENIYCBpcyBtdWNoIG1vcmUgbGlrZWx5IHRvIHN1Y2NlZWQuJywge1xuICAgICAgICAgIGNvZGU6ICdVTkRJQ0ktRkVUQ0gtcGF0Y2gnXG4gICAgICAgIH0pXG5cbiAgICAgICAgcGF0Y2hNZXRob2RXYXJuaW5nID0gdHJ1ZVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIDI2LiBJZiBpbml0W1wic2lnbmFsXCJdIGV4aXN0cywgdGhlbiBzZXQgc2lnbmFsIHRvIGl0LlxuICAgIGlmIChpbml0LnNpZ25hbCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBzaWduYWwgPSBpbml0LnNpZ25hbFxuICAgIH1cblxuICAgIC8vIDI3LiBTZXQgdGhpc1x1MjAxOXMgcmVxdWVzdCB0byByZXF1ZXN0LlxuICAgIHRoaXNba1N0YXRlXSA9IHJlcXVlc3RcblxuICAgIC8vIDI4LiBTZXQgdGhpc1x1MjAxOXMgc2lnbmFsIHRvIGEgbmV3IEFib3J0U2lnbmFsIG9iamVjdCB3aXRoIHRoaXNcdTIwMTlzIHJlbGV2YW50XG4gICAgLy8gUmVhbG0uXG4gICAgLy8gVE9ETzogY291bGQgdGhpcyBiZSBzaW1wbGlmaWVkIHdpdGggQWJvcnRTaWduYWwuYW55XG4gICAgLy8gKGh0dHBzOi8vZG9tLnNwZWMud2hhdHdnLm9yZy8jZG9tLWFib3J0c2lnbmFsLWFueSlcbiAgICBjb25zdCBhYyA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKVxuICAgIHRoaXNba1NpZ25hbF0gPSBhYy5zaWduYWxcblxuICAgIC8vIDI5LiBJZiBzaWduYWwgaXMgbm90IG51bGwsIHRoZW4gbWFrZSB0aGlzXHUyMDE5cyBzaWduYWwgZm9sbG93IHNpZ25hbC5cbiAgICBpZiAoc2lnbmFsICE9IG51bGwpIHtcbiAgICAgIGlmIChcbiAgICAgICAgIXNpZ25hbCB8fFxuICAgICAgICB0eXBlb2Ygc2lnbmFsLmFib3J0ZWQgIT09ICdib29sZWFuJyB8fFxuICAgICAgICB0eXBlb2Ygc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIgIT09ICdmdW5jdGlvbidcbiAgICAgICkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICAgICAgIFwiRmFpbGVkIHRvIGNvbnN0cnVjdCAnUmVxdWVzdCc6IG1lbWJlciBzaWduYWwgaXMgbm90IG9mIHR5cGUgQWJvcnRTaWduYWwuXCJcbiAgICAgICAgKVxuICAgICAgfVxuXG4gICAgICBpZiAoc2lnbmFsLmFib3J0ZWQpIHtcbiAgICAgICAgYWMuYWJvcnQoc2lnbmFsLnJlYXNvbilcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIEtlZXAgYSBzdHJvbmcgcmVmIHRvIGFjIHdoaWxlIHJlcXVlc3Qgb2JqZWN0XG4gICAgICAgIC8vIGlzIGFsaXZlLiBUaGlzIGlzIG5lZWRlZCB0byBwcmV2ZW50IEFib3J0Q29udHJvbGxlclxuICAgICAgICAvLyBmcm9tIGJlaW5nIHByZW1hdHVyZWx5IGdhcmJhZ2UgY29sbGVjdGVkLlxuICAgICAgICAvLyBTZWUsIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvdW5kaWNpL2lzc3Vlcy8xOTI2LlxuICAgICAgICB0aGlzW2tBYm9ydENvbnRyb2xsZXJdID0gYWNcblxuICAgICAgICBjb25zdCBhY1JlZiA9IG5ldyBXZWFrUmVmKGFjKVxuICAgICAgICBjb25zdCBhYm9ydCA9IGJ1aWxkQWJvcnQoYWNSZWYpXG5cbiAgICAgICAgLy8gVGhpcmQtcGFydHkgQWJvcnRDb250cm9sbGVycyBtYXkgbm90IHdvcmsgd2l0aCB0aGVzZS5cbiAgICAgICAgLy8gU2VlLCBodHRwczovL2dpdGh1Yi5jb20vbm9kZWpzL3VuZGljaS9wdWxsLzE5MTAjaXNzdWVjb21tZW50LTE0NjQ0OTU2MTkuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgLy8gSWYgdGhlIG1heCBhbW91bnQgb2YgbGlzdGVuZXJzIGlzIGVxdWFsIHRvIHRoZSBkZWZhdWx0LCBpbmNyZWFzZSBpdFxuICAgICAgICAgIC8vIFRoaXMgaXMgb25seSBhdmFpbGFibGUgaW4gbm9kZSA+PSB2MTkuOS4wXG4gICAgICAgICAgaWYgKHR5cGVvZiBnZXRNYXhMaXN0ZW5lcnMgPT09ICdmdW5jdGlvbicgJiYgZ2V0TWF4TGlzdGVuZXJzKHNpZ25hbCkgPT09IGRlZmF1bHRNYXhMaXN0ZW5lcnMpIHtcbiAgICAgICAgICAgIHNldE1heExpc3RlbmVycygxNTAwLCBzaWduYWwpXG4gICAgICAgICAgfSBlbHNlIGlmIChnZXRFdmVudExpc3RlbmVycyhzaWduYWwsICdhYm9ydCcpLmxlbmd0aCA+PSBkZWZhdWx0TWF4TGlzdGVuZXJzKSB7XG4gICAgICAgICAgICBzZXRNYXhMaXN0ZW5lcnMoMTUwMCwgc2lnbmFsKVxuICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCB7fVxuXG4gICAgICAgIHV0aWwuYWRkQWJvcnRMaXN0ZW5lcihzaWduYWwsIGFib3J0KVxuICAgICAgICAvLyBUaGUgdGhpcmQgYXJndW1lbnQgbXVzdCBiZSBhIHJlZ2lzdHJ5IGtleSB0byBiZSB1bnJlZ2lzdGVyZWQuXG4gICAgICAgIC8vIFdpdGhvdXQgaXQsIHlvdSBjYW5ub3QgdW5yZWdpc3Rlci5cbiAgICAgICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvRmluYWxpemF0aW9uUmVnaXN0cnlcbiAgICAgICAgLy8gYWJvcnQgaXMgdXNlZCBhcyB0aGUgdW5yZWdpc3RlciBrZXkuIChiZWNhdXNlIGl0IGlzIHVuaXF1ZSlcbiAgICAgICAgcmVxdWVzdEZpbmFsaXplci5yZWdpc3RlcihhYywgeyBzaWduYWwsIGFib3J0IH0sIGFib3J0KVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIDMwLiBTZXQgdGhpc1x1MjAxOXMgaGVhZGVycyB0byBhIG5ldyBIZWFkZXJzIG9iamVjdCB3aXRoIHRoaXNcdTIwMTlzIHJlbGV2YW50XG4gICAgLy8gUmVhbG0sIHdob3NlIGhlYWRlciBsaXN0IGlzIHJlcXVlc3RcdTIwMTlzIGhlYWRlciBsaXN0IGFuZCBndWFyZCBpc1xuICAgIC8vIFwicmVxdWVzdFwiLlxuICAgIHRoaXNba0hlYWRlcnNdID0gbmV3IEhlYWRlcnMoa0NvbnN0cnVjdClcbiAgICBzZXRIZWFkZXJzTGlzdCh0aGlzW2tIZWFkZXJzXSwgcmVxdWVzdC5oZWFkZXJzTGlzdClcbiAgICBzZXRIZWFkZXJzR3VhcmQodGhpc1trSGVhZGVyc10sICdyZXF1ZXN0JylcblxuICAgIC8vIDMxLiBJZiB0aGlzXHUyMDE5cyByZXF1ZXN0XHUyMDE5cyBtb2RlIGlzIFwibm8tY29yc1wiLCB0aGVuOlxuICAgIGlmIChtb2RlID09PSAnbm8tY29ycycpIHtcbiAgICAgIC8vIDEuIElmIHRoaXNcdTIwMTlzIHJlcXVlc3RcdTIwMTlzIG1ldGhvZCBpcyBub3QgYSBDT1JTLXNhZmVsaXN0ZWQgbWV0aG9kLFxuICAgICAgLy8gdGhlbiB0aHJvdyBhIFR5cGVFcnJvci5cbiAgICAgIGlmICghY29yc1NhZmVMaXN0ZWRNZXRob2RzU2V0LmhhcyhyZXF1ZXN0Lm1ldGhvZCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgICAgICBgJyR7cmVxdWVzdC5tZXRob2R9IGlzIHVuc3VwcG9ydGVkIGluIG5vLWNvcnMgbW9kZS5gXG4gICAgICAgIClcbiAgICAgIH1cblxuICAgICAgLy8gMi4gU2V0IHRoaXNcdTIwMTlzIGhlYWRlcnNcdTIwMTlzIGd1YXJkIHRvIFwicmVxdWVzdC1uby1jb3JzXCIuXG4gICAgICBzZXRIZWFkZXJzR3VhcmQodGhpc1trSGVhZGVyc10sICdyZXF1ZXN0LW5vLWNvcnMnKVxuICAgIH1cblxuICAgIC8vIDMyLiBJZiBpbml0IGlzIG5vdCBlbXB0eSwgdGhlbjpcbiAgICBpZiAoaW5pdEhhc0tleSkge1xuICAgICAgLyoqIEB0eXBlIHtIZWFkZXJzTGlzdH0gKi9cbiAgICAgIGNvbnN0IGhlYWRlcnNMaXN0ID0gZ2V0SGVhZGVyc0xpc3QodGhpc1trSGVhZGVyc10pXG4gICAgICAvLyAxLiBMZXQgaGVhZGVycyBiZSBhIGNvcHkgb2YgdGhpc1x1MjAxOXMgaGVhZGVycyBhbmQgaXRzIGFzc29jaWF0ZWQgaGVhZGVyXG4gICAgICAvLyBsaXN0LlxuICAgICAgLy8gMi4gSWYgaW5pdFtcImhlYWRlcnNcIl0gZXhpc3RzLCB0aGVuIHNldCBoZWFkZXJzIHRvIGluaXRbXCJoZWFkZXJzXCJdLlxuICAgICAgY29uc3QgaGVhZGVycyA9IGluaXQuaGVhZGVycyAhPT0gdW5kZWZpbmVkID8gaW5pdC5oZWFkZXJzIDogbmV3IEhlYWRlcnNMaXN0KGhlYWRlcnNMaXN0KVxuXG4gICAgICAvLyAzLiBFbXB0eSB0aGlzXHUyMDE5cyBoZWFkZXJzXHUyMDE5cyBoZWFkZXIgbGlzdC5cbiAgICAgIGhlYWRlcnNMaXN0LmNsZWFyKClcblxuICAgICAgLy8gNC4gSWYgaGVhZGVycyBpcyBhIEhlYWRlcnMgb2JqZWN0LCB0aGVuIGZvciBlYWNoIGhlYWRlciBpbiBpdHMgaGVhZGVyXG4gICAgICAvLyBsaXN0LCBhcHBlbmQgaGVhZGVyXHUyMDE5cyBuYW1lL2hlYWRlclx1MjAxOXMgdmFsdWUgdG8gdGhpc1x1MjAxOXMgaGVhZGVycy5cbiAgICAgIGlmIChoZWFkZXJzIGluc3RhbmNlb2YgSGVhZGVyc0xpc3QpIHtcbiAgICAgICAgZm9yIChjb25zdCB7IG5hbWUsIHZhbHVlIH0gb2YgaGVhZGVycy5yYXdWYWx1ZXMoKSkge1xuICAgICAgICAgIGhlYWRlcnNMaXN0LmFwcGVuZChuYW1lLCB2YWx1ZSwgZmFsc2UpXG4gICAgICAgIH1cbiAgICAgICAgLy8gTm90ZTogQ29weSB0aGUgYHNldC1jb29raWVgIG1ldGEtZGF0YS5cbiAgICAgICAgaGVhZGVyc0xpc3QuY29va2llcyA9IGhlYWRlcnMuY29va2llc1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gNS4gT3RoZXJ3aXNlLCBmaWxsIHRoaXNcdTIwMTlzIGhlYWRlcnMgd2l0aCBoZWFkZXJzLlxuICAgICAgICBmaWxsSGVhZGVycyh0aGlzW2tIZWFkZXJzXSwgaGVhZGVycylcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyAzMy4gTGV0IGlucHV0Qm9keSBiZSBpbnB1dFx1MjAxOXMgcmVxdWVzdFx1MjAxOXMgYm9keSBpZiBpbnB1dCBpcyBhIFJlcXVlc3RcbiAgICAvLyBvYmplY3Q7IG90aGVyd2lzZSBudWxsLlxuICAgIGNvbnN0IGlucHV0Qm9keSA9IGlucHV0IGluc3RhbmNlb2YgUmVxdWVzdCA/IGlucHV0W2tTdGF0ZV0uYm9keSA6IG51bGxcblxuICAgIC8vIDM0LiBJZiBlaXRoZXIgaW5pdFtcImJvZHlcIl0gZXhpc3RzIGFuZCBpcyBub24tbnVsbCBvciBpbnB1dEJvZHkgaXNcbiAgICAvLyBub24tbnVsbCwgYW5kIHJlcXVlc3RcdTIwMTlzIG1ldGhvZCBpcyBgR0VUYCBvciBgSEVBRGAsIHRoZW4gdGhyb3cgYVxuICAgIC8vIFR5cGVFcnJvci5cbiAgICBpZiAoXG4gICAgICAoaW5pdC5ib2R5ICE9IG51bGwgfHwgaW5wdXRCb2R5ICE9IG51bGwpICYmXG4gICAgICAocmVxdWVzdC5tZXRob2QgPT09ICdHRVQnIHx8IHJlcXVlc3QubWV0aG9kID09PSAnSEVBRCcpXG4gICAgKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdSZXF1ZXN0IHdpdGggR0VUL0hFQUQgbWV0aG9kIGNhbm5vdCBoYXZlIGJvZHkuJylcbiAgICB9XG5cbiAgICAvLyAzNS4gTGV0IGluaXRCb2R5IGJlIG51bGwuXG4gICAgbGV0IGluaXRCb2R5ID0gbnVsbFxuXG4gICAgLy8gMzYuIElmIGluaXRbXCJib2R5XCJdIGV4aXN0cyBhbmQgaXMgbm9uLW51bGwsIHRoZW46XG4gICAgaWYgKGluaXQuYm9keSAhPSBudWxsKSB7XG4gICAgICAvLyAxLiBMZXQgQ29udGVudC1UeXBlIGJlIG51bGwuXG4gICAgICAvLyAyLiBTZXQgaW5pdEJvZHkgYW5kIENvbnRlbnQtVHlwZSB0byB0aGUgcmVzdWx0IG9mIGV4dHJhY3RpbmdcbiAgICAgIC8vIGluaXRbXCJib2R5XCJdLCB3aXRoIGtlZXBhbGl2ZSBzZXQgdG8gcmVxdWVzdFx1MjAxOXMga2VlcGFsaXZlLlxuICAgICAgY29uc3QgW2V4dHJhY3RlZEJvZHksIGNvbnRlbnRUeXBlXSA9IGV4dHJhY3RCb2R5KFxuICAgICAgICBpbml0LmJvZHksXG4gICAgICAgIHJlcXVlc3Qua2VlcGFsaXZlXG4gICAgICApXG4gICAgICBpbml0Qm9keSA9IGV4dHJhY3RlZEJvZHlcblxuICAgICAgLy8gMywgSWYgQ29udGVudC1UeXBlIGlzIG5vbi1udWxsIGFuZCB0aGlzXHUyMDE5cyBoZWFkZXJzXHUyMDE5cyBoZWFkZXIgbGlzdCBkb2VzXG4gICAgICAvLyBub3QgY29udGFpbiBgQ29udGVudC1UeXBlYCwgdGhlbiBhcHBlbmQgYENvbnRlbnQtVHlwZWAvQ29udGVudC1UeXBlIHRvXG4gICAgICAvLyB0aGlzXHUyMDE5cyBoZWFkZXJzLlxuICAgICAgaWYgKGNvbnRlbnRUeXBlICYmICFnZXRIZWFkZXJzTGlzdCh0aGlzW2tIZWFkZXJzXSkuY29udGFpbnMoJ2NvbnRlbnQtdHlwZScsIHRydWUpKSB7XG4gICAgICAgIHRoaXNba0hlYWRlcnNdLmFwcGVuZCgnY29udGVudC10eXBlJywgY29udGVudFR5cGUpXG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gMzcuIExldCBpbnB1dE9ySW5pdEJvZHkgYmUgaW5pdEJvZHkgaWYgaXQgaXMgbm9uLW51bGw7IG90aGVyd2lzZVxuICAgIC8vIGlucHV0Qm9keS5cbiAgICBjb25zdCBpbnB1dE9ySW5pdEJvZHkgPSBpbml0Qm9keSA/PyBpbnB1dEJvZHlcblxuICAgIC8vIDM4LiBJZiBpbnB1dE9ySW5pdEJvZHkgaXMgbm9uLW51bGwgYW5kIGlucHV0T3JJbml0Qm9keVx1MjAxOXMgc291cmNlIGlzXG4gICAgLy8gbnVsbCwgdGhlbjpcbiAgICBpZiAoaW5wdXRPckluaXRCb2R5ICE9IG51bGwgJiYgaW5wdXRPckluaXRCb2R5LnNvdXJjZSA9PSBudWxsKSB7XG4gICAgICAvLyAxLiBJZiBpbml0Qm9keSBpcyBub24tbnVsbCBhbmQgaW5pdFtcImR1cGxleFwiXSBkb2VzIG5vdCBleGlzdCxcbiAgICAgIC8vICAgIHRoZW4gdGhyb3cgYSBUeXBlRXJyb3IuXG4gICAgICBpZiAoaW5pdEJvZHkgIT0gbnVsbCAmJiBpbml0LmR1cGxleCA9PSBudWxsKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1JlcXVlc3RJbml0OiBkdXBsZXggb3B0aW9uIGlzIHJlcXVpcmVkIHdoZW4gc2VuZGluZyBhIGJvZHkuJylcbiAgICAgIH1cblxuICAgICAgLy8gMi4gSWYgdGhpc1x1MjAxOXMgcmVxdWVzdFx1MjAxOXMgbW9kZSBpcyBuZWl0aGVyIFwic2FtZS1vcmlnaW5cIiBub3IgXCJjb3JzXCIsXG4gICAgICAvLyB0aGVuIHRocm93IGEgVHlwZUVycm9yLlxuICAgICAgaWYgKHJlcXVlc3QubW9kZSAhPT0gJ3NhbWUtb3JpZ2luJyAmJiByZXF1ZXN0Lm1vZGUgIT09ICdjb3JzJykge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICAgICAgICdJZiByZXF1ZXN0IGlzIG1hZGUgZnJvbSBSZWFkYWJsZVN0cmVhbSwgbW9kZSBzaG91bGQgYmUgXCJzYW1lLW9yaWdpblwiIG9yIFwiY29yc1wiJ1xuICAgICAgICApXG4gICAgICB9XG5cbiAgICAgIC8vIDMuIFNldCB0aGlzXHUyMDE5cyByZXF1ZXN0XHUyMDE5cyB1c2UtQ09SUy1wcmVmbGlnaHQgZmxhZy5cbiAgICAgIHJlcXVlc3QudXNlQ09SU1ByZWZsaWdodEZsYWcgPSB0cnVlXG4gICAgfVxuXG4gICAgLy8gMzkuIExldCBmaW5hbEJvZHkgYmUgaW5wdXRPckluaXRCb2R5LlxuICAgIGxldCBmaW5hbEJvZHkgPSBpbnB1dE9ySW5pdEJvZHlcblxuICAgIC8vIDQwLiBJZiBpbml0Qm9keSBpcyBudWxsIGFuZCBpbnB1dEJvZHkgaXMgbm9uLW51bGwsIHRoZW46XG4gICAgaWYgKGluaXRCb2R5ID09IG51bGwgJiYgaW5wdXRCb2R5ICE9IG51bGwpIHtcbiAgICAgIC8vIDEuIElmIGlucHV0IGlzIHVudXNhYmxlLCB0aGVuIHRocm93IGEgVHlwZUVycm9yLlxuICAgICAgaWYgKGJvZHlVbnVzYWJsZShpbnB1dCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgICAgICAnQ2Fubm90IGNvbnN0cnVjdCBhIFJlcXVlc3Qgd2l0aCBhIFJlcXVlc3Qgb2JqZWN0IHRoYXQgaGFzIGFscmVhZHkgYmVlbiB1c2VkLidcbiAgICAgICAgKVxuICAgICAgfVxuXG4gICAgICAvLyAyLiBTZXQgZmluYWxCb2R5IHRvIHRoZSByZXN1bHQgb2YgY3JlYXRpbmcgYSBwcm94eSBmb3IgaW5wdXRCb2R5LlxuICAgICAgLy8gaHR0cHM6Ly9zdHJlYW1zLnNwZWMud2hhdHdnLm9yZy8jcmVhZGFibGVzdHJlYW0tY3JlYXRlLWEtcHJveHlcbiAgICAgIGNvbnN0IGlkZW50aXR5VHJhbnNmb3JtID0gbmV3IFRyYW5zZm9ybVN0cmVhbSgpXG4gICAgICBpbnB1dEJvZHkuc3RyZWFtLnBpcGVUaHJvdWdoKGlkZW50aXR5VHJhbnNmb3JtKVxuICAgICAgZmluYWxCb2R5ID0ge1xuICAgICAgICBzb3VyY2U6IGlucHV0Qm9keS5zb3VyY2UsXG4gICAgICAgIGxlbmd0aDogaW5wdXRCb2R5Lmxlbmd0aCxcbiAgICAgICAgc3RyZWFtOiBpZGVudGl0eVRyYW5zZm9ybS5yZWFkYWJsZVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIDQxLiBTZXQgdGhpc1x1MjAxOXMgcmVxdWVzdFx1MjAxOXMgYm9keSB0byBmaW5hbEJvZHkuXG4gICAgdGhpc1trU3RhdGVdLmJvZHkgPSBmaW5hbEJvZHlcbiAgfVxuXG4gIC8vIFJldHVybnMgcmVxdWVzdFx1MjAxOXMgSFRUUCBtZXRob2QsIHdoaWNoIGlzIFwiR0VUXCIgYnkgZGVmYXVsdC5cbiAgZ2V0IG1ldGhvZCAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgUmVxdWVzdClcblxuICAgIC8vIFRoZSBtZXRob2QgZ2V0dGVyIHN0ZXBzIGFyZSB0byByZXR1cm4gdGhpc1x1MjAxOXMgcmVxdWVzdFx1MjAxOXMgbWV0aG9kLlxuICAgIHJldHVybiB0aGlzW2tTdGF0ZV0ubWV0aG9kXG4gIH1cblxuICAvLyBSZXR1cm5zIHRoZSBVUkwgb2YgcmVxdWVzdCBhcyBhIHN0cmluZy5cbiAgZ2V0IHVybCAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgUmVxdWVzdClcblxuICAgIC8vIFRoZSB1cmwgZ2V0dGVyIHN0ZXBzIGFyZSB0byByZXR1cm4gdGhpc1x1MjAxOXMgcmVxdWVzdFx1MjAxOXMgVVJMLCBzZXJpYWxpemVkLlxuICAgIHJldHVybiBVUkxTZXJpYWxpemVyKHRoaXNba1N0YXRlXS51cmwpXG4gIH1cblxuICAvLyBSZXR1cm5zIGEgSGVhZGVycyBvYmplY3QgY29uc2lzdGluZyBvZiB0aGUgaGVhZGVycyBhc3NvY2lhdGVkIHdpdGggcmVxdWVzdC5cbiAgLy8gTm90ZSB0aGF0IGhlYWRlcnMgYWRkZWQgaW4gdGhlIG5ldHdvcmsgbGF5ZXIgYnkgdGhlIHVzZXIgYWdlbnQgd2lsbCBub3RcbiAgLy8gYmUgYWNjb3VudGVkIGZvciBpbiB0aGlzIG9iamVjdCwgZS5nLiwgdGhlIFwiSG9zdFwiIGhlYWRlci5cbiAgZ2V0IGhlYWRlcnMgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFJlcXVlc3QpXG5cbiAgICAvLyBUaGUgaGVhZGVycyBnZXR0ZXIgc3RlcHMgYXJlIHRvIHJldHVybiB0aGlzXHUyMDE5cyBoZWFkZXJzLlxuICAgIHJldHVybiB0aGlzW2tIZWFkZXJzXVxuICB9XG5cbiAgLy8gUmV0dXJucyB0aGUga2luZCBvZiByZXNvdXJjZSByZXF1ZXN0ZWQgYnkgcmVxdWVzdCwgZS5nLiwgXCJkb2N1bWVudFwiXG4gIC8vIG9yIFwic2NyaXB0XCIuXG4gIGdldCBkZXN0aW5hdGlvbiAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgUmVxdWVzdClcblxuICAgIC8vIFRoZSBkZXN0aW5hdGlvbiBnZXR0ZXIgYXJlIHRvIHJldHVybiB0aGlzXHUyMDE5cyByZXF1ZXN0XHUyMDE5cyBkZXN0aW5hdGlvbi5cbiAgICByZXR1cm4gdGhpc1trU3RhdGVdLmRlc3RpbmF0aW9uXG4gIH1cblxuICAvLyBSZXR1cm5zIHRoZSByZWZlcnJlciBvZiByZXF1ZXN0LiBJdHMgdmFsdWUgY2FuIGJlIGEgc2FtZS1vcmlnaW4gVVJMIGlmXG4gIC8vIGV4cGxpY2l0bHkgc2V0IGluIGluaXQsIHRoZSBlbXB0eSBzdHJpbmcgdG8gaW5kaWNhdGUgbm8gcmVmZXJyZXIsIGFuZFxuICAvLyBcImFib3V0OmNsaWVudFwiIHdoZW4gZGVmYXVsdGluZyB0byB0aGUgZ2xvYmFsXHUyMDE5cyBkZWZhdWx0LiBUaGlzIGlzIHVzZWRcbiAgLy8gZHVyaW5nIGZldGNoaW5nIHRvIGRldGVybWluZSB0aGUgdmFsdWUgb2YgdGhlIGBSZWZlcmVyYCBoZWFkZXIgb2YgdGhlXG4gIC8vIHJlcXVlc3QgYmVpbmcgbWFkZS5cbiAgZ2V0IHJlZmVycmVyICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBSZXF1ZXN0KVxuXG4gICAgLy8gMS4gSWYgdGhpc1x1MjAxOXMgcmVxdWVzdFx1MjAxOXMgcmVmZXJyZXIgaXMgXCJuby1yZWZlcnJlclwiLCB0aGVuIHJldHVybiB0aGVcbiAgICAvLyBlbXB0eSBzdHJpbmcuXG4gICAgaWYgKHRoaXNba1N0YXRlXS5yZWZlcnJlciA9PT0gJ25vLXJlZmVycmVyJykge1xuICAgICAgcmV0dXJuICcnXG4gICAgfVxuXG4gICAgLy8gMi4gSWYgdGhpc1x1MjAxOXMgcmVxdWVzdFx1MjAxOXMgcmVmZXJyZXIgaXMgXCJjbGllbnRcIiwgdGhlbiByZXR1cm5cbiAgICAvLyBcImFib3V0OmNsaWVudFwiLlxuICAgIGlmICh0aGlzW2tTdGF0ZV0ucmVmZXJyZXIgPT09ICdjbGllbnQnKSB7XG4gICAgICByZXR1cm4gJ2Fib3V0OmNsaWVudCdcbiAgICB9XG5cbiAgICAvLyBSZXR1cm4gdGhpc1x1MjAxOXMgcmVxdWVzdFx1MjAxOXMgcmVmZXJyZXIsIHNlcmlhbGl6ZWQuXG4gICAgcmV0dXJuIHRoaXNba1N0YXRlXS5yZWZlcnJlci50b1N0cmluZygpXG4gIH1cblxuICAvLyBSZXR1cm5zIHRoZSByZWZlcnJlciBwb2xpY3kgYXNzb2NpYXRlZCB3aXRoIHJlcXVlc3QuXG4gIC8vIFRoaXMgaXMgdXNlZCBkdXJpbmcgZmV0Y2hpbmcgdG8gY29tcHV0ZSB0aGUgdmFsdWUgb2YgdGhlIHJlcXVlc3RcdTIwMTlzXG4gIC8vIHJlZmVycmVyLlxuICBnZXQgcmVmZXJyZXJQb2xpY3kgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFJlcXVlc3QpXG5cbiAgICAvLyBUaGUgcmVmZXJyZXJQb2xpY3kgZ2V0dGVyIHN0ZXBzIGFyZSB0byByZXR1cm4gdGhpc1x1MjAxOXMgcmVxdWVzdFx1MjAxOXMgcmVmZXJyZXIgcG9saWN5LlxuICAgIHJldHVybiB0aGlzW2tTdGF0ZV0ucmVmZXJyZXJQb2xpY3lcbiAgfVxuXG4gIC8vIFJldHVybnMgdGhlIG1vZGUgYXNzb2NpYXRlZCB3aXRoIHJlcXVlc3QsIHdoaWNoIGlzIGEgc3RyaW5nIGluZGljYXRpbmdcbiAgLy8gd2hldGhlciB0aGUgcmVxdWVzdCB3aWxsIHVzZSBDT1JTLCBvciB3aWxsIGJlIHJlc3RyaWN0ZWQgdG8gc2FtZS1vcmlnaW5cbiAgLy8gVVJMcy5cbiAgZ2V0IG1vZGUgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFJlcXVlc3QpXG5cbiAgICAvLyBUaGUgbW9kZSBnZXR0ZXIgc3RlcHMgYXJlIHRvIHJldHVybiB0aGlzXHUyMDE5cyByZXF1ZXN0XHUyMDE5cyBtb2RlLlxuICAgIHJldHVybiB0aGlzW2tTdGF0ZV0ubW9kZVxuICB9XG5cbiAgLy8gUmV0dXJucyB0aGUgY3JlZGVudGlhbHMgbW9kZSBhc3NvY2lhdGVkIHdpdGggcmVxdWVzdCxcbiAgLy8gd2hpY2ggaXMgYSBzdHJpbmcgaW5kaWNhdGluZyB3aGV0aGVyIGNyZWRlbnRpYWxzIHdpbGwgYmUgc2VudCB3aXRoIHRoZVxuICAvLyByZXF1ZXN0IGFsd2F5cywgbmV2ZXIsIG9yIG9ubHkgd2hlbiBzZW50IHRvIGEgc2FtZS1vcmlnaW4gVVJMLlxuICBnZXQgY3JlZGVudGlhbHMgKCkge1xuICAgIC8vIFRoZSBjcmVkZW50aWFscyBnZXR0ZXIgc3RlcHMgYXJlIHRvIHJldHVybiB0aGlzXHUyMDE5cyByZXF1ZXN0XHUyMDE5cyBjcmVkZW50aWFscyBtb2RlLlxuICAgIHJldHVybiB0aGlzW2tTdGF0ZV0uY3JlZGVudGlhbHNcbiAgfVxuXG4gIC8vIFJldHVybnMgdGhlIGNhY2hlIG1vZGUgYXNzb2NpYXRlZCB3aXRoIHJlcXVlc3QsXG4gIC8vIHdoaWNoIGlzIGEgc3RyaW5nIGluZGljYXRpbmcgaG93IHRoZSByZXF1ZXN0IHdpbGxcbiAgLy8gaW50ZXJhY3Qgd2l0aCB0aGUgYnJvd3Nlclx1MjAxOXMgY2FjaGUgd2hlbiBmZXRjaGluZy5cbiAgZ2V0IGNhY2hlICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBSZXF1ZXN0KVxuXG4gICAgLy8gVGhlIGNhY2hlIGdldHRlciBzdGVwcyBhcmUgdG8gcmV0dXJuIHRoaXNcdTIwMTlzIHJlcXVlc3RcdTIwMTlzIGNhY2hlIG1vZGUuXG4gICAgcmV0dXJuIHRoaXNba1N0YXRlXS5jYWNoZVxuICB9XG5cbiAgLy8gUmV0dXJucyB0aGUgcmVkaXJlY3QgbW9kZSBhc3NvY2lhdGVkIHdpdGggcmVxdWVzdCxcbiAgLy8gd2hpY2ggaXMgYSBzdHJpbmcgaW5kaWNhdGluZyBob3cgcmVkaXJlY3RzIGZvciB0aGVcbiAgLy8gcmVxdWVzdCB3aWxsIGJlIGhhbmRsZWQgZHVyaW5nIGZldGNoaW5nLiBBIHJlcXVlc3RcbiAgLy8gd2lsbCBmb2xsb3cgcmVkaXJlY3RzIGJ5IGRlZmF1bHQuXG4gIGdldCByZWRpcmVjdCAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgUmVxdWVzdClcblxuICAgIC8vIFRoZSByZWRpcmVjdCBnZXR0ZXIgc3RlcHMgYXJlIHRvIHJldHVybiB0aGlzXHUyMDE5cyByZXF1ZXN0XHUyMDE5cyByZWRpcmVjdCBtb2RlLlxuICAgIHJldHVybiB0aGlzW2tTdGF0ZV0ucmVkaXJlY3RcbiAgfVxuXG4gIC8vIFJldHVybnMgcmVxdWVzdFx1MjAxOXMgc3VicmVzb3VyY2UgaW50ZWdyaXR5IG1ldGFkYXRhLCB3aGljaCBpcyBhXG4gIC8vIGNyeXB0b2dyYXBoaWMgaGFzaCBvZiB0aGUgcmVzb3VyY2UgYmVpbmcgZmV0Y2hlZC4gSXRzIHZhbHVlXG4gIC8vIGNvbnNpc3RzIG9mIG11bHRpcGxlIGhhc2hlcyBzZXBhcmF0ZWQgYnkgd2hpdGVzcGFjZS4gW1NSSV1cbiAgZ2V0IGludGVncml0eSAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgUmVxdWVzdClcblxuICAgIC8vIFRoZSBpbnRlZ3JpdHkgZ2V0dGVyIHN0ZXBzIGFyZSB0byByZXR1cm4gdGhpc1x1MjAxOXMgcmVxdWVzdFx1MjAxOXMgaW50ZWdyaXR5XG4gICAgLy8gbWV0YWRhdGEuXG4gICAgcmV0dXJuIHRoaXNba1N0YXRlXS5pbnRlZ3JpdHlcbiAgfVxuXG4gIC8vIFJldHVybnMgYSBib29sZWFuIGluZGljYXRpbmcgd2hldGhlciBvciBub3QgcmVxdWVzdCBjYW4gb3V0bGl2ZSB0aGVcbiAgLy8gZ2xvYmFsIGluIHdoaWNoIGl0IHdhcyBjcmVhdGVkLlxuICBnZXQga2VlcGFsaXZlICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBSZXF1ZXN0KVxuXG4gICAgLy8gVGhlIGtlZXBhbGl2ZSBnZXR0ZXIgc3RlcHMgYXJlIHRvIHJldHVybiB0aGlzXHUyMDE5cyByZXF1ZXN0XHUyMDE5cyBrZWVwYWxpdmUuXG4gICAgcmV0dXJuIHRoaXNba1N0YXRlXS5rZWVwYWxpdmVcbiAgfVxuXG4gIC8vIFJldHVybnMgYSBib29sZWFuIGluZGljYXRpbmcgd2hldGhlciBvciBub3QgcmVxdWVzdCBpcyBmb3IgYSByZWxvYWRcbiAgLy8gbmF2aWdhdGlvbi5cbiAgZ2V0IGlzUmVsb2FkTmF2aWdhdGlvbiAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgUmVxdWVzdClcblxuICAgIC8vIFRoZSBpc1JlbG9hZE5hdmlnYXRpb24gZ2V0dGVyIHN0ZXBzIGFyZSB0byByZXR1cm4gdHJ1ZSBpZiB0aGlzXHUyMDE5c1xuICAgIC8vIHJlcXVlc3RcdTIwMTlzIHJlbG9hZC1uYXZpZ2F0aW9uIGZsYWcgaXMgc2V0OyBvdGhlcndpc2UgZmFsc2UuXG4gICAgcmV0dXJuIHRoaXNba1N0YXRlXS5yZWxvYWROYXZpZ2F0aW9uXG4gIH1cblxuICAvLyBSZXR1cm5zIGEgYm9vbGVhbiBpbmRpY2F0aW5nIHdoZXRoZXIgb3Igbm90IHJlcXVlc3QgaXMgZm9yIGEgaGlzdG9yeVxuICAvLyBuYXZpZ2F0aW9uIChhLmsuYS4gYmFjay1mb3J3YXJkIG5hdmlnYXRpb24pLlxuICBnZXQgaXNIaXN0b3J5TmF2aWdhdGlvbiAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgUmVxdWVzdClcblxuICAgIC8vIFRoZSBpc0hpc3RvcnlOYXZpZ2F0aW9uIGdldHRlciBzdGVwcyBhcmUgdG8gcmV0dXJuIHRydWUgaWYgdGhpc1x1MjAxOXMgcmVxdWVzdFx1MjAxOXNcbiAgICAvLyBoaXN0b3J5LW5hdmlnYXRpb24gZmxhZyBpcyBzZXQ7IG90aGVyd2lzZSBmYWxzZS5cbiAgICByZXR1cm4gdGhpc1trU3RhdGVdLmhpc3RvcnlOYXZpZ2F0aW9uXG4gIH1cblxuICAvLyBSZXR1cm5zIHRoZSBzaWduYWwgYXNzb2NpYXRlZCB3aXRoIHJlcXVlc3QsIHdoaWNoIGlzIGFuIEFib3J0U2lnbmFsXG4gIC8vIG9iamVjdCBpbmRpY2F0aW5nIHdoZXRoZXIgb3Igbm90IHJlcXVlc3QgaGFzIGJlZW4gYWJvcnRlZCwgYW5kIGl0c1xuICAvLyBhYm9ydCBldmVudCBoYW5kbGVyLlxuICBnZXQgc2lnbmFsICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBSZXF1ZXN0KVxuXG4gICAgLy8gVGhlIHNpZ25hbCBnZXR0ZXIgc3RlcHMgYXJlIHRvIHJldHVybiB0aGlzXHUyMDE5cyBzaWduYWwuXG4gICAgcmV0dXJuIHRoaXNba1NpZ25hbF1cbiAgfVxuXG4gIGdldCBib2R5ICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBSZXF1ZXN0KVxuXG4gICAgcmV0dXJuIHRoaXNba1N0YXRlXS5ib2R5ID8gdGhpc1trU3RhdGVdLmJvZHkuc3RyZWFtIDogbnVsbFxuICB9XG5cbiAgZ2V0IGJvZHlVc2VkICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBSZXF1ZXN0KVxuXG4gICAgcmV0dXJuICEhdGhpc1trU3RhdGVdLmJvZHkgJiYgdXRpbC5pc0Rpc3R1cmJlZCh0aGlzW2tTdGF0ZV0uYm9keS5zdHJlYW0pXG4gIH1cblxuICBnZXQgZHVwbGV4ICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBSZXF1ZXN0KVxuXG4gICAgcmV0dXJuICdoYWxmJ1xuICB9XG5cbiAgLy8gUmV0dXJucyBhIGNsb25lIG9mIHJlcXVlc3QuXG4gIGNsb25lICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBSZXF1ZXN0KVxuXG4gICAgLy8gMS4gSWYgdGhpcyBpcyB1bnVzYWJsZSwgdGhlbiB0aHJvdyBhIFR5cGVFcnJvci5cbiAgICBpZiAoYm9keVVudXNhYmxlKHRoaXMpKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCd1bnVzYWJsZScpXG4gICAgfVxuXG4gICAgLy8gMi4gTGV0IGNsb25lZFJlcXVlc3QgYmUgdGhlIHJlc3VsdCBvZiBjbG9uaW5nIHRoaXNcdTIwMTlzIHJlcXVlc3QuXG4gICAgY29uc3QgY2xvbmVkUmVxdWVzdCA9IGNsb25lUmVxdWVzdCh0aGlzW2tTdGF0ZV0pXG5cbiAgICAvLyAzLiBMZXQgY2xvbmVkUmVxdWVzdE9iamVjdCBiZSB0aGUgcmVzdWx0IG9mIGNyZWF0aW5nIGEgUmVxdWVzdCBvYmplY3QsXG4gICAgLy8gZ2l2ZW4gY2xvbmVkUmVxdWVzdCwgdGhpc1x1MjAxOXMgaGVhZGVyc1x1MjAxOXMgZ3VhcmQsIGFuZCB0aGlzXHUyMDE5cyByZWxldmFudCBSZWFsbS5cbiAgICAvLyA0LiBNYWtlIGNsb25lZFJlcXVlc3RPYmplY3RcdTIwMTlzIHNpZ25hbCBmb2xsb3cgdGhpc1x1MjAxOXMgc2lnbmFsLlxuICAgIGNvbnN0IGFjID0gbmV3IEFib3J0Q29udHJvbGxlcigpXG4gICAgaWYgKHRoaXMuc2lnbmFsLmFib3J0ZWQpIHtcbiAgICAgIGFjLmFib3J0KHRoaXMuc2lnbmFsLnJlYXNvbilcbiAgICB9IGVsc2Uge1xuICAgICAgbGV0IGxpc3QgPSBkZXBlbmRlbnRDb250cm9sbGVyTWFwLmdldCh0aGlzLnNpZ25hbClcbiAgICAgIGlmIChsaXN0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgbGlzdCA9IG5ldyBTZXQoKVxuICAgICAgICBkZXBlbmRlbnRDb250cm9sbGVyTWFwLnNldCh0aGlzLnNpZ25hbCwgbGlzdClcbiAgICAgIH1cbiAgICAgIGNvbnN0IGFjUmVmID0gbmV3IFdlYWtSZWYoYWMpXG4gICAgICBsaXN0LmFkZChhY1JlZilcbiAgICAgIHV0aWwuYWRkQWJvcnRMaXN0ZW5lcihcbiAgICAgICAgYWMuc2lnbmFsLFxuICAgICAgICBidWlsZEFib3J0KGFjUmVmKVxuICAgICAgKVxuICAgIH1cblxuICAgIC8vIDQuIFJldHVybiBjbG9uZWRSZXF1ZXN0T2JqZWN0LlxuICAgIHJldHVybiBmcm9tSW5uZXJSZXF1ZXN0KGNsb25lZFJlcXVlc3QsIGFjLnNpZ25hbCwgZ2V0SGVhZGVyc0d1YXJkKHRoaXNba0hlYWRlcnNdKSlcbiAgfVxuXG4gIFtub2RlVXRpbC5pbnNwZWN0LmN1c3RvbV0gKGRlcHRoLCBvcHRpb25zKSB7XG4gICAgaWYgKG9wdGlvbnMuZGVwdGggPT09IG51bGwpIHtcbiAgICAgIG9wdGlvbnMuZGVwdGggPSAyXG4gICAgfVxuXG4gICAgb3B0aW9ucy5jb2xvcnMgPz89IHRydWVcblxuICAgIGNvbnN0IHByb3BlcnRpZXMgPSB7XG4gICAgICBtZXRob2Q6IHRoaXMubWV0aG9kLFxuICAgICAgdXJsOiB0aGlzLnVybCxcbiAgICAgIGhlYWRlcnM6IHRoaXMuaGVhZGVycyxcbiAgICAgIGRlc3RpbmF0aW9uOiB0aGlzLmRlc3RpbmF0aW9uLFxuICAgICAgcmVmZXJyZXI6IHRoaXMucmVmZXJyZXIsXG4gICAgICByZWZlcnJlclBvbGljeTogdGhpcy5yZWZlcnJlclBvbGljeSxcbiAgICAgIG1vZGU6IHRoaXMubW9kZSxcbiAgICAgIGNyZWRlbnRpYWxzOiB0aGlzLmNyZWRlbnRpYWxzLFxuICAgICAgY2FjaGU6IHRoaXMuY2FjaGUsXG4gICAgICByZWRpcmVjdDogdGhpcy5yZWRpcmVjdCxcbiAgICAgIGludGVncml0eTogdGhpcy5pbnRlZ3JpdHksXG4gICAgICBrZWVwYWxpdmU6IHRoaXMua2VlcGFsaXZlLFxuICAgICAgaXNSZWxvYWROYXZpZ2F0aW9uOiB0aGlzLmlzUmVsb2FkTmF2aWdhdGlvbixcbiAgICAgIGlzSGlzdG9yeU5hdmlnYXRpb246IHRoaXMuaXNIaXN0b3J5TmF2aWdhdGlvbixcbiAgICAgIHNpZ25hbDogdGhpcy5zaWduYWxcbiAgICB9XG5cbiAgICByZXR1cm4gYFJlcXVlc3QgJHtub2RlVXRpbC5mb3JtYXRXaXRoT3B0aW9ucyhvcHRpb25zLCBwcm9wZXJ0aWVzKX1gXG4gIH1cbn1cblxubWl4aW5Cb2R5KFJlcXVlc3QpXG5cbi8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNyZXF1ZXN0c1xuZnVuY3Rpb24gbWFrZVJlcXVlc3QgKGluaXQpIHtcbiAgcmV0dXJuIHtcbiAgICBtZXRob2Q6IGluaXQubWV0aG9kID8/ICdHRVQnLFxuICAgIGxvY2FsVVJMc09ubHk6IGluaXQubG9jYWxVUkxzT25seSA/PyBmYWxzZSxcbiAgICB1bnNhZmVSZXF1ZXN0OiBpbml0LnVuc2FmZVJlcXVlc3QgPz8gZmFsc2UsXG4gICAgYm9keTogaW5pdC5ib2R5ID8/IG51bGwsXG4gICAgY2xpZW50OiBpbml0LmNsaWVudCA/PyBudWxsLFxuICAgIHJlc2VydmVkQ2xpZW50OiBpbml0LnJlc2VydmVkQ2xpZW50ID8/IG51bGwsXG4gICAgcmVwbGFjZXNDbGllbnRJZDogaW5pdC5yZXBsYWNlc0NsaWVudElkID8/ICcnLFxuICAgIHdpbmRvdzogaW5pdC53aW5kb3cgPz8gJ2NsaWVudCcsXG4gICAga2VlcGFsaXZlOiBpbml0LmtlZXBhbGl2ZSA/PyBmYWxzZSxcbiAgICBzZXJ2aWNlV29ya2VyczogaW5pdC5zZXJ2aWNlV29ya2VycyA/PyAnYWxsJyxcbiAgICBpbml0aWF0b3I6IGluaXQuaW5pdGlhdG9yID8/ICcnLFxuICAgIGRlc3RpbmF0aW9uOiBpbml0LmRlc3RpbmF0aW9uID8/ICcnLFxuICAgIHByaW9yaXR5OiBpbml0LnByaW9yaXR5ID8/IG51bGwsXG4gICAgb3JpZ2luOiBpbml0Lm9yaWdpbiA/PyAnY2xpZW50JyxcbiAgICBwb2xpY3lDb250YWluZXI6IGluaXQucG9saWN5Q29udGFpbmVyID8/ICdjbGllbnQnLFxuICAgIHJlZmVycmVyOiBpbml0LnJlZmVycmVyID8/ICdjbGllbnQnLFxuICAgIHJlZmVycmVyUG9saWN5OiBpbml0LnJlZmVycmVyUG9saWN5ID8/ICcnLFxuICAgIG1vZGU6IGluaXQubW9kZSA/PyAnbm8tY29ycycsXG4gICAgdXNlQ09SU1ByZWZsaWdodEZsYWc6IGluaXQudXNlQ09SU1ByZWZsaWdodEZsYWcgPz8gZmFsc2UsXG4gICAgY3JlZGVudGlhbHM6IGluaXQuY3JlZGVudGlhbHMgPz8gJ3NhbWUtb3JpZ2luJyxcbiAgICB1c2VDcmVkZW50aWFsczogaW5pdC51c2VDcmVkZW50aWFscyA/PyBmYWxzZSxcbiAgICBjYWNoZTogaW5pdC5jYWNoZSA/PyAnZGVmYXVsdCcsXG4gICAgcmVkaXJlY3Q6IGluaXQucmVkaXJlY3QgPz8gJ2ZvbGxvdycsXG4gICAgaW50ZWdyaXR5OiBpbml0LmludGVncml0eSA/PyAnJyxcbiAgICBjcnlwdG9HcmFwaGljc05vbmNlTWV0YWRhdGE6IGluaXQuY3J5cHRvR3JhcGhpY3NOb25jZU1ldGFkYXRhID8/ICcnLFxuICAgIHBhcnNlck1ldGFkYXRhOiBpbml0LnBhcnNlck1ldGFkYXRhID8/ICcnLFxuICAgIHJlbG9hZE5hdmlnYXRpb246IGluaXQucmVsb2FkTmF2aWdhdGlvbiA/PyBmYWxzZSxcbiAgICBoaXN0b3J5TmF2aWdhdGlvbjogaW5pdC5oaXN0b3J5TmF2aWdhdGlvbiA/PyBmYWxzZSxcbiAgICB1c2VyQWN0aXZhdGlvbjogaW5pdC51c2VyQWN0aXZhdGlvbiA/PyBmYWxzZSxcbiAgICB0YWludGVkT3JpZ2luOiBpbml0LnRhaW50ZWRPcmlnaW4gPz8gZmFsc2UsXG4gICAgcmVkaXJlY3RDb3VudDogaW5pdC5yZWRpcmVjdENvdW50ID8/IDAsXG4gICAgcmVzcG9uc2VUYWludGluZzogaW5pdC5yZXNwb25zZVRhaW50aW5nID8/ICdiYXNpYycsXG4gICAgcHJldmVudE5vQ2FjaGVDYWNoZUNvbnRyb2xIZWFkZXJNb2RpZmljYXRpb246IGluaXQucHJldmVudE5vQ2FjaGVDYWNoZUNvbnRyb2xIZWFkZXJNb2RpZmljYXRpb24gPz8gZmFsc2UsXG4gICAgZG9uZTogaW5pdC5kb25lID8/IGZhbHNlLFxuICAgIHRpbWluZ0FsbG93RmFpbGVkOiBpbml0LnRpbWluZ0FsbG93RmFpbGVkID8/IGZhbHNlLFxuICAgIHVybExpc3Q6IGluaXQudXJsTGlzdCxcbiAgICB1cmw6IGluaXQudXJsTGlzdFswXSxcbiAgICBoZWFkZXJzTGlzdDogaW5pdC5oZWFkZXJzTGlzdFxuICAgICAgPyBuZXcgSGVhZGVyc0xpc3QoaW5pdC5oZWFkZXJzTGlzdClcbiAgICAgIDogbmV3IEhlYWRlcnNMaXN0KClcbiAgfVxufVxuXG4vLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jY29uY2VwdC1yZXF1ZXN0LWNsb25lXG5mdW5jdGlvbiBjbG9uZVJlcXVlc3QgKHJlcXVlc3QpIHtcbiAgLy8gVG8gY2xvbmUgYSByZXF1ZXN0IHJlcXVlc3QsIHJ1biB0aGVzZSBzdGVwczpcblxuICAvLyAxLiBMZXQgbmV3UmVxdWVzdCBiZSBhIGNvcHkgb2YgcmVxdWVzdCwgZXhjZXB0IGZvciBpdHMgYm9keS5cbiAgY29uc3QgbmV3UmVxdWVzdCA9IG1ha2VSZXF1ZXN0KHsgLi4ucmVxdWVzdCwgYm9keTogbnVsbCB9KVxuXG4gIC8vIDIuIElmIHJlcXVlc3RcdTIwMTlzIGJvZHkgaXMgbm9uLW51bGwsIHNldCBuZXdSZXF1ZXN0XHUyMDE5cyBib2R5IHRvIHRoZVxuICAvLyByZXN1bHQgb2YgY2xvbmluZyByZXF1ZXN0XHUyMDE5cyBib2R5LlxuICBpZiAocmVxdWVzdC5ib2R5ICE9IG51bGwpIHtcbiAgICBuZXdSZXF1ZXN0LmJvZHkgPSBjbG9uZUJvZHkobmV3UmVxdWVzdCwgcmVxdWVzdC5ib2R5KVxuICB9XG5cbiAgLy8gMy4gUmV0dXJuIG5ld1JlcXVlc3QuXG4gIHJldHVybiBuZXdSZXF1ZXN0XG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jcmVxdWVzdC1jcmVhdGVcbiAqIEBwYXJhbSB7YW55fSBpbm5lclJlcXVlc3RcbiAqIEBwYXJhbSB7QWJvcnRTaWduYWx9IHNpZ25hbFxuICogQHBhcmFtIHsncmVxdWVzdCcgfCAnaW1tdXRhYmxlJyB8ICdyZXF1ZXN0LW5vLWNvcnMnIHwgJ3Jlc3BvbnNlJyB8ICdub25lJ30gZ3VhcmRcbiAqIEByZXR1cm5zIHtSZXF1ZXN0fVxuICovXG5mdW5jdGlvbiBmcm9tSW5uZXJSZXF1ZXN0IChpbm5lclJlcXVlc3QsIHNpZ25hbCwgZ3VhcmQpIHtcbiAgY29uc3QgcmVxdWVzdCA9IG5ldyBSZXF1ZXN0KGtDb25zdHJ1Y3QpXG4gIHJlcXVlc3Rba1N0YXRlXSA9IGlubmVyUmVxdWVzdFxuICByZXF1ZXN0W2tTaWduYWxdID0gc2lnbmFsXG4gIHJlcXVlc3Rba0hlYWRlcnNdID0gbmV3IEhlYWRlcnMoa0NvbnN0cnVjdClcbiAgc2V0SGVhZGVyc0xpc3QocmVxdWVzdFtrSGVhZGVyc10sIGlubmVyUmVxdWVzdC5oZWFkZXJzTGlzdClcbiAgc2V0SGVhZGVyc0d1YXJkKHJlcXVlc3Rba0hlYWRlcnNdLCBndWFyZClcbiAgcmV0dXJuIHJlcXVlc3Rcbn1cblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoUmVxdWVzdC5wcm90b3R5cGUsIHtcbiAgbWV0aG9kOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICB1cmw6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGhlYWRlcnM6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIHJlZGlyZWN0OiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBjbG9uZToga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgc2lnbmFsOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBkdXBsZXg6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGRlc3RpbmF0aW9uOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBib2R5OiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBib2R5VXNlZDoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgaXNIaXN0b3J5TmF2aWdhdGlvbjoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgaXNSZWxvYWROYXZpZ2F0aW9uOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBrZWVwYWxpdmU6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGludGVncml0eToga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgY2FjaGU6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGNyZWRlbnRpYWxzOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBhdHRyaWJ1dGU6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIHJlZmVycmVyUG9saWN5OiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICByZWZlcnJlcjoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgbW9kZToga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgW1N5bWJvbC50b1N0cmluZ1RhZ106IHtcbiAgICB2YWx1ZTogJ1JlcXVlc3QnLFxuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICB9XG59KVxuXG53ZWJpZGwuY29udmVydGVycy5SZXF1ZXN0ID0gd2ViaWRsLmludGVyZmFjZUNvbnZlcnRlcihcbiAgUmVxdWVzdFxuKVxuXG4vLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jcmVxdWVzdGluZm9cbndlYmlkbC5jb252ZXJ0ZXJzLlJlcXVlc3RJbmZvID0gZnVuY3Rpb24gKFYsIHByZWZpeCwgYXJndW1lbnQpIHtcbiAgaWYgKHR5cGVvZiBWID09PSAnc3RyaW5nJykge1xuICAgIHJldHVybiB3ZWJpZGwuY29udmVydGVycy5VU1ZTdHJpbmcoViwgcHJlZml4LCBhcmd1bWVudClcbiAgfVxuXG4gIGlmIChWIGluc3RhbmNlb2YgUmVxdWVzdCkge1xuICAgIHJldHVybiB3ZWJpZGwuY29udmVydGVycy5SZXF1ZXN0KFYsIHByZWZpeCwgYXJndW1lbnQpXG4gIH1cblxuICByZXR1cm4gd2ViaWRsLmNvbnZlcnRlcnMuVVNWU3RyaW5nKFYsIHByZWZpeCwgYXJndW1lbnQpXG59XG5cbndlYmlkbC5jb252ZXJ0ZXJzLkFib3J0U2lnbmFsID0gd2ViaWRsLmludGVyZmFjZUNvbnZlcnRlcihcbiAgQWJvcnRTaWduYWxcbilcblxuLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI3JlcXVlc3Rpbml0XG53ZWJpZGwuY29udmVydGVycy5SZXF1ZXN0SW5pdCA9IHdlYmlkbC5kaWN0aW9uYXJ5Q29udmVydGVyKFtcbiAge1xuICAgIGtleTogJ21ldGhvZCcsXG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVycy5CeXRlU3RyaW5nXG4gIH0sXG4gIHtcbiAgICBrZXk6ICdoZWFkZXJzJyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzLkhlYWRlcnNJbml0XG4gIH0sXG4gIHtcbiAgICBrZXk6ICdib2R5JyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5udWxsYWJsZUNvbnZlcnRlcihcbiAgICAgIHdlYmlkbC5jb252ZXJ0ZXJzLkJvZHlJbml0XG4gICAgKVxuICB9LFxuICB7XG4gICAga2V5OiAncmVmZXJyZXInLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnMuVVNWU3RyaW5nXG4gIH0sXG4gIHtcbiAgICBrZXk6ICdyZWZlcnJlclBvbGljeScsXG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVycy5ET01TdHJpbmcsXG4gICAgLy8gaHR0cHM6Ly93M2MuZ2l0aHViLmlvL3dlYmFwcHNlYy1yZWZlcnJlci1wb2xpY3kvI3JlZmVycmVyLXBvbGljeVxuICAgIGFsbG93ZWRWYWx1ZXM6IHJlZmVycmVyUG9saWN5XG4gIH0sXG4gIHtcbiAgICBrZXk6ICdtb2RlJyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzLkRPTVN0cmluZyxcbiAgICAvLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jY29uY2VwdC1yZXF1ZXN0LW1vZGVcbiAgICBhbGxvd2VkVmFsdWVzOiByZXF1ZXN0TW9kZVxuICB9LFxuICB7XG4gICAga2V5OiAnY3JlZGVudGlhbHMnLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnMuRE9NU3RyaW5nLFxuICAgIC8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNyZXF1ZXN0Y3JlZGVudGlhbHNcbiAgICBhbGxvd2VkVmFsdWVzOiByZXF1ZXN0Q3JlZGVudGlhbHNcbiAgfSxcbiAge1xuICAgIGtleTogJ2NhY2hlJyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzLkRPTVN0cmluZyxcbiAgICAvLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jcmVxdWVzdGNhY2hlXG4gICAgYWxsb3dlZFZhbHVlczogcmVxdWVzdENhY2hlXG4gIH0sXG4gIHtcbiAgICBrZXk6ICdyZWRpcmVjdCcsXG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVycy5ET01TdHJpbmcsXG4gICAgLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI3JlcXVlc3RyZWRpcmVjdFxuICAgIGFsbG93ZWRWYWx1ZXM6IHJlcXVlc3RSZWRpcmVjdFxuICB9LFxuICB7XG4gICAga2V5OiAnaW50ZWdyaXR5JyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzLkRPTVN0cmluZ1xuICB9LFxuICB7XG4gICAga2V5OiAna2VlcGFsaXZlJyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzLmJvb2xlYW5cbiAgfSxcbiAge1xuICAgIGtleTogJ3NpZ25hbCcsXG4gICAgY29udmVydGVyOiB3ZWJpZGwubnVsbGFibGVDb252ZXJ0ZXIoXG4gICAgICAoc2lnbmFsKSA9PiB3ZWJpZGwuY29udmVydGVycy5BYm9ydFNpZ25hbChcbiAgICAgICAgc2lnbmFsLFxuICAgICAgICAnUmVxdWVzdEluaXQnLFxuICAgICAgICAnc2lnbmFsJyxcbiAgICAgICAgeyBzdHJpY3Q6IGZhbHNlIH1cbiAgICAgIClcbiAgICApXG4gIH0sXG4gIHtcbiAgICBrZXk6ICd3aW5kb3cnLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnMuYW55XG4gIH0sXG4gIHtcbiAgICBrZXk6ICdkdXBsZXgnLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnMuRE9NU3RyaW5nLFxuICAgIGFsbG93ZWRWYWx1ZXM6IHJlcXVlc3REdXBsZXhcbiAgfSxcbiAge1xuICAgIGtleTogJ2Rpc3BhdGNoZXInLCAvLyB1bmRpY2kgc3BlY2lmaWMgb3B0aW9uXG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVycy5hbnlcbiAgfVxuXSlcblxubW9kdWxlLmV4cG9ydHMgPSB7IFJlcXVlc3QsIG1ha2VSZXF1ZXN0LCBmcm9tSW5uZXJSZXF1ZXN0LCBjbG9uZVJlcXVlc3QgfVxuIiwgIi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9FdGhhbi1BcnJvd29vZC91bmRpY2ktZmV0Y2hcblxuJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHtcbiAgbWFrZU5ldHdvcmtFcnJvcixcbiAgbWFrZUFwcHJvcHJpYXRlTmV0d29ya0Vycm9yLFxuICBmaWx0ZXJSZXNwb25zZSxcbiAgbWFrZVJlc3BvbnNlLFxuICBmcm9tSW5uZXJSZXNwb25zZVxufSA9IHJlcXVpcmUoJy4vcmVzcG9uc2UnKVxuY29uc3QgeyBIZWFkZXJzTGlzdCB9ID0gcmVxdWlyZSgnLi9oZWFkZXJzJylcbmNvbnN0IHsgUmVxdWVzdCwgY2xvbmVSZXF1ZXN0IH0gPSByZXF1aXJlKCcuL3JlcXVlc3QnKVxuY29uc3QgemxpYiA9IHJlcXVpcmUoJ25vZGU6emxpYicpXG5jb25zdCB7XG4gIGJ5dGVzTWF0Y2gsXG4gIG1ha2VQb2xpY3lDb250YWluZXIsXG4gIGNsb25lUG9saWN5Q29udGFpbmVyLFxuICByZXF1ZXN0QmFkUG9ydCxcbiAgVEFPQ2hlY2ssXG4gIGFwcGVuZFJlcXVlc3RPcmlnaW5IZWFkZXIsXG4gIHJlc3BvbnNlTG9jYXRpb25VUkwsXG4gIHJlcXVlc3RDdXJyZW50VVJMLFxuICBzZXRSZXF1ZXN0UmVmZXJyZXJQb2xpY3lPblJlZGlyZWN0LFxuICB0cnlVcGdyYWRlUmVxdWVzdFRvQVBvdGVudGlhbGx5VHJ1c3R3b3J0aHlVUkwsXG4gIGNyZWF0ZU9wYXF1ZVRpbWluZ0luZm8sXG4gIGFwcGVuZEZldGNoTWV0YWRhdGEsXG4gIGNvcnNDaGVjayxcbiAgY3Jvc3NPcmlnaW5SZXNvdXJjZVBvbGljeUNoZWNrLFxuICBkZXRlcm1pbmVSZXF1ZXN0c1JlZmVycmVyLFxuICBjb2Fyc2VuZWRTaGFyZWRDdXJyZW50VGltZSxcbiAgY3JlYXRlRGVmZXJyZWRQcm9taXNlLFxuICBpc0Jsb2JMaWtlLFxuICBzYW1lT3JpZ2luLFxuICBpc0NhbmNlbGxlZCxcbiAgaXNBYm9ydGVkLFxuICBpc0Vycm9yTGlrZSxcbiAgZnVsbHlSZWFkQm9keSxcbiAgcmVhZGFibGVTdHJlYW1DbG9zZSxcbiAgaXNvbW9ycGhpY0VuY29kZSxcbiAgdXJsSXNMb2NhbCxcbiAgdXJsSXNIdHRwSHR0cHNTY2hlbWUsXG4gIHVybEhhc0h0dHBzU2NoZW1lLFxuICBjbGFtcEFuZENvYXJzZW5Db25uZWN0aW9uVGltaW5nSW5mbyxcbiAgc2ltcGxlUmFuZ2VIZWFkZXJWYWx1ZSxcbiAgYnVpbGRDb250ZW50UmFuZ2UsXG4gIGNyZWF0ZUluZmxhdGUsXG4gIGV4dHJhY3RNaW1lVHlwZVxufSA9IHJlcXVpcmUoJy4vdXRpbCcpXG5jb25zdCB7IGtTdGF0ZSwga0Rpc3BhdGNoZXIgfSA9IHJlcXVpcmUoJy4vc3ltYm9scycpXG5jb25zdCBhc3NlcnQgPSByZXF1aXJlKCdub2RlOmFzc2VydCcpXG5jb25zdCB7IHNhZmVseUV4dHJhY3RCb2R5LCBleHRyYWN0Qm9keSB9ID0gcmVxdWlyZSgnLi9ib2R5JylcbmNvbnN0IHtcbiAgcmVkaXJlY3RTdGF0dXNTZXQsXG4gIG51bGxCb2R5U3RhdHVzLFxuICBzYWZlTWV0aG9kc1NldCxcbiAgcmVxdWVzdEJvZHlIZWFkZXIsXG4gIHN1YnJlc291cmNlU2V0XG59ID0gcmVxdWlyZSgnLi9jb25zdGFudHMnKVxuY29uc3QgRUUgPSByZXF1aXJlKCdub2RlOmV2ZW50cycpXG5jb25zdCB7IFJlYWRhYmxlLCBwaXBlbGluZSwgZmluaXNoZWQgfSA9IHJlcXVpcmUoJ25vZGU6c3RyZWFtJylcbmNvbnN0IHsgYWRkQWJvcnRMaXN0ZW5lciwgaXNFcnJvcmVkLCBpc1JlYWRhYmxlLCBidWZmZXJUb0xvd2VyQ2FzZWRIZWFkZXJOYW1lIH0gPSByZXF1aXJlKCcuLi8uLi9jb3JlL3V0aWwnKVxuY29uc3QgeyBkYXRhVVJMUHJvY2Vzc29yLCBzZXJpYWxpemVBTWltZVR5cGUsIG1pbmltaXplU3VwcG9ydGVkTWltZVR5cGUgfSA9IHJlcXVpcmUoJy4vZGF0YS11cmwnKVxuY29uc3QgeyBnZXRHbG9iYWxEaXNwYXRjaGVyIH0gPSByZXF1aXJlKCcuLi8uLi9nbG9iYWwnKVxuY29uc3QgeyB3ZWJpZGwgfSA9IHJlcXVpcmUoJy4vd2ViaWRsJylcbmNvbnN0IHsgU1RBVFVTX0NPREVTIH0gPSByZXF1aXJlKCdub2RlOmh0dHAnKVxuY29uc3QgR0VUX09SX0hFQUQgPSBbJ0dFVCcsICdIRUFEJ11cblxuY29uc3QgZGVmYXVsdFVzZXJBZ2VudCA9IHR5cGVvZiBfX1VORElDSV9JU19OT0RFX18gIT09ICd1bmRlZmluZWQnIHx8IHR5cGVvZiBlc2J1aWxkRGV0ZWN0aW9uICE9PSAndW5kZWZpbmVkJ1xuICA/ICdub2RlJ1xuICA6ICd1bmRpY2knXG5cbi8qKiBAdHlwZSB7aW1wb3J0KCdidWZmZXInKS5yZXNvbHZlT2JqZWN0VVJMfSAqL1xubGV0IHJlc29sdmVPYmplY3RVUkxcblxuY2xhc3MgRmV0Y2ggZXh0ZW5kcyBFRSB7XG4gIGNvbnN0cnVjdG9yIChkaXNwYXRjaGVyKSB7XG4gICAgc3VwZXIoKVxuXG4gICAgdGhpcy5kaXNwYXRjaGVyID0gZGlzcGF0Y2hlclxuICAgIHRoaXMuY29ubmVjdGlvbiA9IG51bGxcbiAgICB0aGlzLmR1bXAgPSBmYWxzZVxuICAgIHRoaXMuc3RhdGUgPSAnb25nb2luZydcbiAgfVxuXG4gIHRlcm1pbmF0ZSAocmVhc29uKSB7XG4gICAgaWYgKHRoaXMuc3RhdGUgIT09ICdvbmdvaW5nJykge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgdGhpcy5zdGF0ZSA9ICd0ZXJtaW5hdGVkJ1xuICAgIHRoaXMuY29ubmVjdGlvbj8uZGVzdHJveShyZWFzb24pXG4gICAgdGhpcy5lbWl0KCd0ZXJtaW5hdGVkJywgcmVhc29uKVxuICB9XG5cbiAgLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2ZldGNoLWNvbnRyb2xsZXItYWJvcnRcbiAgYWJvcnQgKGVycm9yKSB7XG4gICAgaWYgKHRoaXMuc3RhdGUgIT09ICdvbmdvaW5nJykge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgLy8gMS4gU2V0IGNvbnRyb2xsZXJcdTIwMTlzIHN0YXRlIHRvIFwiYWJvcnRlZFwiLlxuICAgIHRoaXMuc3RhdGUgPSAnYWJvcnRlZCdcblxuICAgIC8vIDIuIExldCBmYWxsYmFja0Vycm9yIGJlIGFuIFwiQWJvcnRFcnJvclwiIERPTUV4Y2VwdGlvbi5cbiAgICAvLyAzLiBTZXQgZXJyb3IgdG8gZmFsbGJhY2tFcnJvciBpZiBpdCBpcyBub3QgZ2l2ZW4uXG4gICAgaWYgKCFlcnJvcikge1xuICAgICAgZXJyb3IgPSBuZXcgRE9NRXhjZXB0aW9uKCdUaGUgb3BlcmF0aW9uIHdhcyBhYm9ydGVkLicsICdBYm9ydEVycm9yJylcbiAgICB9XG5cbiAgICAvLyA0LiBMZXQgc2VyaWFsaXplZEVycm9yIGJlIFN0cnVjdHVyZWRTZXJpYWxpemUoZXJyb3IpLlxuICAgIC8vICAgIElmIHRoYXQgdGhyZXcgYW4gZXhjZXB0aW9uLCBjYXRjaCBpdCwgYW5kIGxldFxuICAgIC8vICAgIHNlcmlhbGl6ZWRFcnJvciBiZSBTdHJ1Y3R1cmVkU2VyaWFsaXplKGZhbGxiYWNrRXJyb3IpLlxuXG4gICAgLy8gNS4gU2V0IGNvbnRyb2xsZXJcdTIwMTlzIHNlcmlhbGl6ZWQgYWJvcnQgcmVhc29uIHRvIHNlcmlhbGl6ZWRFcnJvci5cbiAgICB0aGlzLnNlcmlhbGl6ZWRBYm9ydFJlYXNvbiA9IGVycm9yXG5cbiAgICB0aGlzLmNvbm5lY3Rpb24/LmRlc3Ryb3koZXJyb3IpXG4gICAgdGhpcy5lbWl0KCd0ZXJtaW5hdGVkJywgZXJyb3IpXG4gIH1cbn1cblxuZnVuY3Rpb24gaGFuZGxlRmV0Y2hEb25lIChyZXNwb25zZSkge1xuICBmaW5hbGl6ZUFuZFJlcG9ydFRpbWluZyhyZXNwb25zZSwgJ2ZldGNoJylcbn1cblxuLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2ZldGNoLW1ldGhvZFxuZnVuY3Rpb24gZmV0Y2ggKGlucHV0LCBpbml0ID0gdW5kZWZpbmVkKSB7XG4gIHdlYmlkbC5hcmd1bWVudExlbmd0aENoZWNrKGFyZ3VtZW50cywgMSwgJ2dsb2JhbFRoaXMuZmV0Y2gnKVxuXG4gIC8vIDEuIExldCBwIGJlIGEgbmV3IHByb21pc2UuXG4gIGxldCBwID0gY3JlYXRlRGVmZXJyZWRQcm9taXNlKClcblxuICAvLyAyLiBMZXQgcmVxdWVzdE9iamVjdCBiZSB0aGUgcmVzdWx0IG9mIGludm9raW5nIHRoZSBpbml0aWFsIHZhbHVlIG9mXG4gIC8vIFJlcXVlc3QgYXMgY29uc3RydWN0b3Igd2l0aCBpbnB1dCBhbmQgaW5pdCBhcyBhcmd1bWVudHMuIElmIHRoaXMgdGhyb3dzXG4gIC8vIGFuIGV4Y2VwdGlvbiwgcmVqZWN0IHAgd2l0aCBpdCBhbmQgcmV0dXJuIHAuXG4gIGxldCByZXF1ZXN0T2JqZWN0XG5cbiAgdHJ5IHtcbiAgICByZXF1ZXN0T2JqZWN0ID0gbmV3IFJlcXVlc3QoaW5wdXQsIGluaXQpXG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBwLnJlamVjdChlKVxuICAgIHJldHVybiBwLnByb21pc2VcbiAgfVxuXG4gIC8vIDMuIExldCByZXF1ZXN0IGJlIHJlcXVlc3RPYmplY3RcdTIwMTlzIHJlcXVlc3QuXG4gIGNvbnN0IHJlcXVlc3QgPSByZXF1ZXN0T2JqZWN0W2tTdGF0ZV1cblxuICAvLyA0LiBJZiByZXF1ZXN0T2JqZWN0XHUyMDE5cyBzaWduYWxcdTIwMTlzIGFib3J0ZWQgZmxhZyBpcyBzZXQsIHRoZW46XG4gIGlmIChyZXF1ZXN0T2JqZWN0LnNpZ25hbC5hYm9ydGVkKSB7XG4gICAgLy8gMS4gQWJvcnQgdGhlIGZldGNoKCkgY2FsbCB3aXRoIHAsIHJlcXVlc3QsIG51bGwsIGFuZFxuICAgIC8vICAgIHJlcXVlc3RPYmplY3RcdTIwMTlzIHNpZ25hbFx1MjAxOXMgYWJvcnQgcmVhc29uLlxuICAgIGFib3J0RmV0Y2gocCwgcmVxdWVzdCwgbnVsbCwgcmVxdWVzdE9iamVjdC5zaWduYWwucmVhc29uKVxuXG4gICAgLy8gMi4gUmV0dXJuIHAuXG4gICAgcmV0dXJuIHAucHJvbWlzZVxuICB9XG5cbiAgLy8gNS4gTGV0IGdsb2JhbE9iamVjdCBiZSByZXF1ZXN0XHUyMDE5cyBjbGllbnRcdTIwMTlzIGdsb2JhbCBvYmplY3QuXG4gIGNvbnN0IGdsb2JhbE9iamVjdCA9IHJlcXVlc3QuY2xpZW50Lmdsb2JhbE9iamVjdFxuXG4gIC8vIDYuIElmIGdsb2JhbE9iamVjdCBpcyBhIFNlcnZpY2VXb3JrZXJHbG9iYWxTY29wZSBvYmplY3QsIHRoZW4gc2V0XG4gIC8vIHJlcXVlc3RcdTIwMTlzIHNlcnZpY2Utd29ya2VycyBtb2RlIHRvIFwibm9uZVwiLlxuICBpZiAoZ2xvYmFsT2JqZWN0Py5jb25zdHJ1Y3Rvcj8ubmFtZSA9PT0gJ1NlcnZpY2VXb3JrZXJHbG9iYWxTY29wZScpIHtcbiAgICByZXF1ZXN0LnNlcnZpY2VXb3JrZXJzID0gJ25vbmUnXG4gIH1cblxuICAvLyA3LiBMZXQgcmVzcG9uc2VPYmplY3QgYmUgbnVsbC5cbiAgbGV0IHJlc3BvbnNlT2JqZWN0ID0gbnVsbFxuXG4gIC8vIDguIExldCByZWxldmFudFJlYWxtIGJlIHRoaXNcdTIwMTlzIHJlbGV2YW50IFJlYWxtLlxuXG4gIC8vIDkuIExldCBsb2NhbGx5QWJvcnRlZCBiZSBmYWxzZS5cbiAgbGV0IGxvY2FsbHlBYm9ydGVkID0gZmFsc2VcblxuICAvLyAxMC4gTGV0IGNvbnRyb2xsZXIgYmUgbnVsbC5cbiAgbGV0IGNvbnRyb2xsZXIgPSBudWxsXG5cbiAgLy8gMTEuIEFkZCB0aGUgZm9sbG93aW5nIGFib3J0IHN0ZXBzIHRvIHJlcXVlc3RPYmplY3RcdTIwMTlzIHNpZ25hbDpcbiAgYWRkQWJvcnRMaXN0ZW5lcihcbiAgICByZXF1ZXN0T2JqZWN0LnNpZ25hbCxcbiAgICAoKSA9PiB7XG4gICAgICAvLyAxLiBTZXQgbG9jYWxseUFib3J0ZWQgdG8gdHJ1ZS5cbiAgICAgIGxvY2FsbHlBYm9ydGVkID0gdHJ1ZVxuXG4gICAgICAvLyAyLiBBc3NlcnQ6IGNvbnRyb2xsZXIgaXMgbm9uLW51bGwuXG4gICAgICBhc3NlcnQoY29udHJvbGxlciAhPSBudWxsKVxuXG4gICAgICAvLyAzLiBBYm9ydCBjb250cm9sbGVyIHdpdGggcmVxdWVzdE9iamVjdFx1MjAxOXMgc2lnbmFsXHUyMDE5cyBhYm9ydCByZWFzb24uXG4gICAgICBjb250cm9sbGVyLmFib3J0KHJlcXVlc3RPYmplY3Quc2lnbmFsLnJlYXNvbilcblxuICAgICAgY29uc3QgcmVhbFJlc3BvbnNlID0gcmVzcG9uc2VPYmplY3Q/LmRlcmVmKClcblxuICAgICAgLy8gNC4gQWJvcnQgdGhlIGZldGNoKCkgY2FsbCB3aXRoIHAsIHJlcXVlc3QsIHJlc3BvbnNlT2JqZWN0LFxuICAgICAgLy8gICAgYW5kIHJlcXVlc3RPYmplY3RcdTIwMTlzIHNpZ25hbFx1MjAxOXMgYWJvcnQgcmVhc29uLlxuICAgICAgYWJvcnRGZXRjaChwLCByZXF1ZXN0LCByZWFsUmVzcG9uc2UsIHJlcXVlc3RPYmplY3Quc2lnbmFsLnJlYXNvbilcbiAgICB9XG4gIClcblxuICAvLyAxMi4gTGV0IGhhbmRsZUZldGNoRG9uZSBnaXZlbiByZXNwb25zZSByZXNwb25zZSBiZSB0byBmaW5hbGl6ZSBhbmRcbiAgLy8gcmVwb3J0IHRpbWluZyB3aXRoIHJlc3BvbnNlLCBnbG9iYWxPYmplY3QsIGFuZCBcImZldGNoXCIuXG4gIC8vIHNlZSBmdW5jdGlvbiBoYW5kbGVGZXRjaERvbmVcblxuICAvLyAxMy4gU2V0IGNvbnRyb2xsZXIgdG8gdGhlIHJlc3VsdCBvZiBjYWxsaW5nIGZldGNoIGdpdmVuIHJlcXVlc3QsXG4gIC8vIHdpdGggcHJvY2Vzc1Jlc3BvbnNlRW5kT2ZCb2R5IHNldCB0byBoYW5kbGVGZXRjaERvbmUsIGFuZCBwcm9jZXNzUmVzcG9uc2VcbiAgLy8gZ2l2ZW4gcmVzcG9uc2UgYmVpbmcgdGhlc2Ugc3Vic3RlcHM6XG5cbiAgY29uc3QgcHJvY2Vzc1Jlc3BvbnNlID0gKHJlc3BvbnNlKSA9PiB7XG4gICAgLy8gMS4gSWYgbG9jYWxseUFib3J0ZWQgaXMgdHJ1ZSwgdGVybWluYXRlIHRoZXNlIHN1YnN0ZXBzLlxuICAgIGlmIChsb2NhbGx5QWJvcnRlZCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgLy8gMi4gSWYgcmVzcG9uc2VcdTIwMTlzIGFib3J0ZWQgZmxhZyBpcyBzZXQsIHRoZW46XG4gICAgaWYgKHJlc3BvbnNlLmFib3J0ZWQpIHtcbiAgICAgIC8vIDEuIExldCBkZXNlcmlhbGl6ZWRFcnJvciBiZSB0aGUgcmVzdWx0IG9mIGRlc2VyaWFsaXplIGEgc2VyaWFsaXplZFxuICAgICAgLy8gICAgYWJvcnQgcmVhc29uIGdpdmVuIGNvbnRyb2xsZXJcdTIwMTlzIHNlcmlhbGl6ZWQgYWJvcnQgcmVhc29uIGFuZFxuICAgICAgLy8gICAgcmVsZXZhbnRSZWFsbS5cblxuICAgICAgLy8gMi4gQWJvcnQgdGhlIGZldGNoKCkgY2FsbCB3aXRoIHAsIHJlcXVlc3QsIHJlc3BvbnNlT2JqZWN0LCBhbmRcbiAgICAgIC8vICAgIGRlc2VyaWFsaXplZEVycm9yLlxuXG4gICAgICBhYm9ydEZldGNoKHAsIHJlcXVlc3QsIHJlc3BvbnNlT2JqZWN0LCBjb250cm9sbGVyLnNlcmlhbGl6ZWRBYm9ydFJlYXNvbilcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIC8vIDMuIElmIHJlc3BvbnNlIGlzIGEgbmV0d29yayBlcnJvciwgdGhlbiByZWplY3QgcCB3aXRoIGEgVHlwZUVycm9yXG4gICAgLy8gYW5kIHRlcm1pbmF0ZSB0aGVzZSBzdWJzdGVwcy5cbiAgICBpZiAocmVzcG9uc2UudHlwZSA9PT0gJ2Vycm9yJykge1xuICAgICAgcC5yZWplY3QobmV3IFR5cGVFcnJvcignZmV0Y2ggZmFpbGVkJywgeyBjYXVzZTogcmVzcG9uc2UuZXJyb3IgfSkpXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICAvLyA0LiBTZXQgcmVzcG9uc2VPYmplY3QgdG8gdGhlIHJlc3VsdCBvZiBjcmVhdGluZyBhIFJlc3BvbnNlIG9iamVjdCxcbiAgICAvLyBnaXZlbiByZXNwb25zZSwgXCJpbW11dGFibGVcIiwgYW5kIHJlbGV2YW50UmVhbG0uXG4gICAgcmVzcG9uc2VPYmplY3QgPSBuZXcgV2Vha1JlZihmcm9tSW5uZXJSZXNwb25zZShyZXNwb25zZSwgJ2ltbXV0YWJsZScpKVxuXG4gICAgLy8gNS4gUmVzb2x2ZSBwIHdpdGggcmVzcG9uc2VPYmplY3QuXG4gICAgcC5yZXNvbHZlKHJlc3BvbnNlT2JqZWN0LmRlcmVmKCkpXG4gICAgcCA9IG51bGxcbiAgfVxuXG4gIGNvbnRyb2xsZXIgPSBmZXRjaGluZyh7XG4gICAgcmVxdWVzdCxcbiAgICBwcm9jZXNzUmVzcG9uc2VFbmRPZkJvZHk6IGhhbmRsZUZldGNoRG9uZSxcbiAgICBwcm9jZXNzUmVzcG9uc2UsXG4gICAgZGlzcGF0Y2hlcjogcmVxdWVzdE9iamVjdFtrRGlzcGF0Y2hlcl0gLy8gdW5kaWNpXG4gIH0pXG5cbiAgLy8gMTQuIFJldHVybiBwLlxuICByZXR1cm4gcC5wcm9taXNlXG59XG5cbi8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNmaW5hbGl6ZS1hbmQtcmVwb3J0LXRpbWluZ1xuZnVuY3Rpb24gZmluYWxpemVBbmRSZXBvcnRUaW1pbmcgKHJlc3BvbnNlLCBpbml0aWF0b3JUeXBlID0gJ290aGVyJykge1xuICAvLyAxLiBJZiByZXNwb25zZSBpcyBhbiBhYm9ydGVkIG5ldHdvcmsgZXJyb3IsIHRoZW4gcmV0dXJuLlxuICBpZiAocmVzcG9uc2UudHlwZSA9PT0gJ2Vycm9yJyAmJiByZXNwb25zZS5hYm9ydGVkKSB7XG4gICAgcmV0dXJuXG4gIH1cblxuICAvLyAyLiBJZiByZXNwb25zZVx1MjAxOXMgVVJMIGxpc3QgaXMgbnVsbCBvciBlbXB0eSwgdGhlbiByZXR1cm4uXG4gIGlmICghcmVzcG9uc2UudXJsTGlzdD8ubGVuZ3RoKSB7XG4gICAgcmV0dXJuXG4gIH1cblxuICAvLyAzLiBMZXQgb3JpZ2luYWxVUkwgYmUgcmVzcG9uc2VcdTIwMTlzIFVSTCBsaXN0WzBdLlxuICBjb25zdCBvcmlnaW5hbFVSTCA9IHJlc3BvbnNlLnVybExpc3RbMF1cblxuICAvLyA0LiBMZXQgdGltaW5nSW5mbyBiZSByZXNwb25zZVx1MjAxOXMgdGltaW5nIGluZm8uXG4gIGxldCB0aW1pbmdJbmZvID0gcmVzcG9uc2UudGltaW5nSW5mb1xuXG4gIC8vIDUuIExldCBjYWNoZVN0YXRlIGJlIHJlc3BvbnNlXHUyMDE5cyBjYWNoZSBzdGF0ZS5cbiAgbGV0IGNhY2hlU3RhdGUgPSByZXNwb25zZS5jYWNoZVN0YXRlXG5cbiAgLy8gNi4gSWYgb3JpZ2luYWxVUkxcdTIwMTlzIHNjaGVtZSBpcyBub3QgYW4gSFRUUChTKSBzY2hlbWUsIHRoZW4gcmV0dXJuLlxuICBpZiAoIXVybElzSHR0cEh0dHBzU2NoZW1lKG9yaWdpbmFsVVJMKSkge1xuICAgIHJldHVyblxuICB9XG5cbiAgLy8gNy4gSWYgdGltaW5nSW5mbyBpcyBudWxsLCB0aGVuIHJldHVybi5cbiAgaWYgKHRpbWluZ0luZm8gPT09IG51bGwpIHtcbiAgICByZXR1cm5cbiAgfVxuXG4gIC8vIDguIElmIHJlc3BvbnNlXHUyMDE5cyB0aW1pbmcgYWxsb3cgcGFzc2VkIGZsYWcgaXMgbm90IHNldCwgdGhlbjpcbiAgaWYgKCFyZXNwb25zZS50aW1pbmdBbGxvd1Bhc3NlZCkge1xuICAgIC8vICAxLiBTZXQgdGltaW5nSW5mbyB0byBhIHRoZSByZXN1bHQgb2YgY3JlYXRpbmcgYW4gb3BhcXVlIHRpbWluZyBpbmZvIGZvciB0aW1pbmdJbmZvLlxuICAgIHRpbWluZ0luZm8gPSBjcmVhdGVPcGFxdWVUaW1pbmdJbmZvKHtcbiAgICAgIHN0YXJ0VGltZTogdGltaW5nSW5mby5zdGFydFRpbWVcbiAgICB9KVxuXG4gICAgLy8gIDIuIFNldCBjYWNoZVN0YXRlIHRvIHRoZSBlbXB0eSBzdHJpbmcuXG4gICAgY2FjaGVTdGF0ZSA9ICcnXG4gIH1cblxuICAvLyA5LiBTZXQgdGltaW5nSW5mb1x1MjAxOXMgZW5kIHRpbWUgdG8gdGhlIGNvYXJzZW5lZCBzaGFyZWQgY3VycmVudCB0aW1lXG4gIC8vIGdpdmVuIGdsb2JhbFx1MjAxOXMgcmVsZXZhbnQgc2V0dGluZ3Mgb2JqZWN0XHUyMDE5cyBjcm9zcy1vcmlnaW4gaXNvbGF0ZWRcbiAgLy8gY2FwYWJpbGl0eS5cbiAgLy8gVE9ETzogZ2l2ZW4gZ2xvYmFsXHUyMDE5cyByZWxldmFudCBzZXR0aW5ncyBvYmplY3RcdTIwMTlzIGNyb3NzLW9yaWdpbiBpc29sYXRlZFxuICAvLyBjYXBhYmlsaXR5P1xuICB0aW1pbmdJbmZvLmVuZFRpbWUgPSBjb2Fyc2VuZWRTaGFyZWRDdXJyZW50VGltZSgpXG5cbiAgLy8gMTAuIFNldCByZXNwb25zZVx1MjAxOXMgdGltaW5nIGluZm8gdG8gdGltaW5nSW5mby5cbiAgcmVzcG9uc2UudGltaW5nSW5mbyA9IHRpbWluZ0luZm9cblxuICAvLyAxMS4gTWFyayByZXNvdXJjZSB0aW1pbmcgZm9yIHRpbWluZ0luZm8sIG9yaWdpbmFsVVJMLCBpbml0aWF0b3JUeXBlLFxuICAvLyBnbG9iYWwsIGFuZCBjYWNoZVN0YXRlLlxuICBtYXJrUmVzb3VyY2VUaW1pbmcoXG4gICAgdGltaW5nSW5mbyxcbiAgICBvcmlnaW5hbFVSTC5ocmVmLFxuICAgIGluaXRpYXRvclR5cGUsXG4gICAgZ2xvYmFsVGhpcyxcbiAgICBjYWNoZVN0YXRlXG4gIClcbn1cblxuLy8gaHR0cHM6Ly93M2MuZ2l0aHViLmlvL3Jlc291cmNlLXRpbWluZy8jZGZuLW1hcmstcmVzb3VyY2UtdGltaW5nXG5jb25zdCBtYXJrUmVzb3VyY2VUaW1pbmcgPSBwZXJmb3JtYW5jZS5tYXJrUmVzb3VyY2VUaW1pbmdcblxuLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2Fib3J0LWZldGNoXG5mdW5jdGlvbiBhYm9ydEZldGNoIChwLCByZXF1ZXN0LCByZXNwb25zZU9iamVjdCwgZXJyb3IpIHtcbiAgLy8gMS4gUmVqZWN0IHByb21pc2Ugd2l0aCBlcnJvci5cbiAgaWYgKHApIHtcbiAgICAvLyBXZSBtaWdodCBoYXZlIGFscmVhZHkgcmVzb2x2ZWQgdGhlIHByb21pc2UgYXQgdGhpcyBzdGFnZVxuICAgIHAucmVqZWN0KGVycm9yKVxuICB9XG5cbiAgLy8gMi4gSWYgcmVxdWVzdFx1MjAxOXMgYm9keSBpcyBub3QgbnVsbCBhbmQgaXMgcmVhZGFibGUsIHRoZW4gY2FuY2VsIHJlcXVlc3RcdTIwMTlzXG4gIC8vIGJvZHkgd2l0aCBlcnJvci5cbiAgaWYgKHJlcXVlc3QuYm9keSAhPSBudWxsICYmIGlzUmVhZGFibGUocmVxdWVzdC5ib2R5Py5zdHJlYW0pKSB7XG4gICAgcmVxdWVzdC5ib2R5LnN0cmVhbS5jYW5jZWwoZXJyb3IpLmNhdGNoKChlcnIpID0+IHtcbiAgICAgIGlmIChlcnIuY29kZSA9PT0gJ0VSUl9JTlZBTElEX1NUQVRFJykge1xuICAgICAgICAvLyBOb2RlIGJ1Zz9cbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgICB0aHJvdyBlcnJcbiAgICB9KVxuICB9XG5cbiAgLy8gMy4gSWYgcmVzcG9uc2VPYmplY3QgaXMgbnVsbCwgdGhlbiByZXR1cm4uXG4gIGlmIChyZXNwb25zZU9iamVjdCA9PSBudWxsKSB7XG4gICAgcmV0dXJuXG4gIH1cblxuICAvLyA0LiBMZXQgcmVzcG9uc2UgYmUgcmVzcG9uc2VPYmplY3RcdTIwMTlzIHJlc3BvbnNlLlxuICBjb25zdCByZXNwb25zZSA9IHJlc3BvbnNlT2JqZWN0W2tTdGF0ZV1cblxuICAvLyA1LiBJZiByZXNwb25zZVx1MjAxOXMgYm9keSBpcyBub3QgbnVsbCBhbmQgaXMgcmVhZGFibGUsIHRoZW4gZXJyb3IgcmVzcG9uc2VcdTIwMTlzXG4gIC8vIGJvZHkgd2l0aCBlcnJvci5cbiAgaWYgKHJlc3BvbnNlLmJvZHkgIT0gbnVsbCAmJiBpc1JlYWRhYmxlKHJlc3BvbnNlLmJvZHk/LnN0cmVhbSkpIHtcbiAgICByZXNwb25zZS5ib2R5LnN0cmVhbS5jYW5jZWwoZXJyb3IpLmNhdGNoKChlcnIpID0+IHtcbiAgICAgIGlmIChlcnIuY29kZSA9PT0gJ0VSUl9JTlZBTElEX1NUQVRFJykge1xuICAgICAgICAvLyBOb2RlIGJ1Zz9cbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgICB0aHJvdyBlcnJcbiAgICB9KVxuICB9XG59XG5cbi8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNmZXRjaGluZ1xuZnVuY3Rpb24gZmV0Y2hpbmcgKHtcbiAgcmVxdWVzdCxcbiAgcHJvY2Vzc1JlcXVlc3RCb2R5Q2h1bmtMZW5ndGgsXG4gIHByb2Nlc3NSZXF1ZXN0RW5kT2ZCb2R5LFxuICBwcm9jZXNzUmVzcG9uc2UsXG4gIHByb2Nlc3NSZXNwb25zZUVuZE9mQm9keSxcbiAgcHJvY2Vzc1Jlc3BvbnNlQ29uc3VtZUJvZHksXG4gIHVzZVBhcmFsbGVsUXVldWUgPSBmYWxzZSxcbiAgZGlzcGF0Y2hlciA9IGdldEdsb2JhbERpc3BhdGNoZXIoKSAvLyB1bmRpY2lcbn0pIHtcbiAgLy8gRW5zdXJlIHRoYXQgdGhlIGRpc3BhdGNoZXIgaXMgc2V0IGFjY29yZGluZ2x5XG4gIGFzc2VydChkaXNwYXRjaGVyKVxuXG4gIC8vIDEuIExldCB0YXNrRGVzdGluYXRpb24gYmUgbnVsbC5cbiAgbGV0IHRhc2tEZXN0aW5hdGlvbiA9IG51bGxcblxuICAvLyAyLiBMZXQgY3Jvc3NPcmlnaW5Jc29sYXRlZENhcGFiaWxpdHkgYmUgZmFsc2UuXG4gIGxldCBjcm9zc09yaWdpbklzb2xhdGVkQ2FwYWJpbGl0eSA9IGZhbHNlXG5cbiAgLy8gMy4gSWYgcmVxdWVzdFx1MjAxOXMgY2xpZW50IGlzIG5vbi1udWxsLCB0aGVuOlxuICBpZiAocmVxdWVzdC5jbGllbnQgIT0gbnVsbCkge1xuICAgIC8vIDEuIFNldCB0YXNrRGVzdGluYXRpb24gdG8gcmVxdWVzdFx1MjAxOXMgY2xpZW50XHUyMDE5cyBnbG9iYWwgb2JqZWN0LlxuICAgIHRhc2tEZXN0aW5hdGlvbiA9IHJlcXVlc3QuY2xpZW50Lmdsb2JhbE9iamVjdFxuXG4gICAgLy8gMi4gU2V0IGNyb3NzT3JpZ2luSXNvbGF0ZWRDYXBhYmlsaXR5IHRvIHJlcXVlc3RcdTIwMTlzIGNsaWVudFx1MjAxOXMgY3Jvc3Mtb3JpZ2luXG4gICAgLy8gaXNvbGF0ZWQgY2FwYWJpbGl0eS5cbiAgICBjcm9zc09yaWdpbklzb2xhdGVkQ2FwYWJpbGl0eSA9XG4gICAgICByZXF1ZXN0LmNsaWVudC5jcm9zc09yaWdpbklzb2xhdGVkQ2FwYWJpbGl0eVxuICB9XG5cbiAgLy8gNC4gSWYgdXNlUGFyYWxsZWxRdWV1ZSBpcyB0cnVlLCB0aGVuIHNldCB0YXNrRGVzdGluYXRpb24gdG8gdGhlIHJlc3VsdCBvZlxuICAvLyBzdGFydGluZyBhIG5ldyBwYXJhbGxlbCBxdWV1ZS5cbiAgLy8gVE9ET1xuXG4gIC8vIDUuIExldCB0aW1pbmdJbmZvIGJlIGEgbmV3IGZldGNoIHRpbWluZyBpbmZvIHdob3NlIHN0YXJ0IHRpbWUgYW5kXG4gIC8vIHBvc3QtcmVkaXJlY3Qgc3RhcnQgdGltZSBhcmUgdGhlIGNvYXJzZW5lZCBzaGFyZWQgY3VycmVudCB0aW1lIGdpdmVuXG4gIC8vIGNyb3NzT3JpZ2luSXNvbGF0ZWRDYXBhYmlsaXR5LlxuICBjb25zdCBjdXJyZW50VGltZSA9IGNvYXJzZW5lZFNoYXJlZEN1cnJlbnRUaW1lKGNyb3NzT3JpZ2luSXNvbGF0ZWRDYXBhYmlsaXR5KVxuICBjb25zdCB0aW1pbmdJbmZvID0gY3JlYXRlT3BhcXVlVGltaW5nSW5mbyh7XG4gICAgc3RhcnRUaW1lOiBjdXJyZW50VGltZVxuICB9KVxuXG4gIC8vIDYuIExldCBmZXRjaFBhcmFtcyBiZSBhIG5ldyBmZXRjaCBwYXJhbXMgd2hvc2VcbiAgLy8gcmVxdWVzdCBpcyByZXF1ZXN0LFxuICAvLyB0aW1pbmcgaW5mbyBpcyB0aW1pbmdJbmZvLFxuICAvLyBwcm9jZXNzIHJlcXVlc3QgYm9keSBjaHVuayBsZW5ndGggaXMgcHJvY2Vzc1JlcXVlc3RCb2R5Q2h1bmtMZW5ndGgsXG4gIC8vIHByb2Nlc3MgcmVxdWVzdCBlbmQtb2YtYm9keSBpcyBwcm9jZXNzUmVxdWVzdEVuZE9mQm9keSxcbiAgLy8gcHJvY2VzcyByZXNwb25zZSBpcyBwcm9jZXNzUmVzcG9uc2UsXG4gIC8vIHByb2Nlc3MgcmVzcG9uc2UgY29uc3VtZSBib2R5IGlzIHByb2Nlc3NSZXNwb25zZUNvbnN1bWVCb2R5LFxuICAvLyBwcm9jZXNzIHJlc3BvbnNlIGVuZC1vZi1ib2R5IGlzIHByb2Nlc3NSZXNwb25zZUVuZE9mQm9keSxcbiAgLy8gdGFzayBkZXN0aW5hdGlvbiBpcyB0YXNrRGVzdGluYXRpb24sXG4gIC8vIGFuZCBjcm9zcy1vcmlnaW4gaXNvbGF0ZWQgY2FwYWJpbGl0eSBpcyBjcm9zc09yaWdpbklzb2xhdGVkQ2FwYWJpbGl0eS5cbiAgY29uc3QgZmV0Y2hQYXJhbXMgPSB7XG4gICAgY29udHJvbGxlcjogbmV3IEZldGNoKGRpc3BhdGNoZXIpLFxuICAgIHJlcXVlc3QsXG4gICAgdGltaW5nSW5mbyxcbiAgICBwcm9jZXNzUmVxdWVzdEJvZHlDaHVua0xlbmd0aCxcbiAgICBwcm9jZXNzUmVxdWVzdEVuZE9mQm9keSxcbiAgICBwcm9jZXNzUmVzcG9uc2UsXG4gICAgcHJvY2Vzc1Jlc3BvbnNlQ29uc3VtZUJvZHksXG4gICAgcHJvY2Vzc1Jlc3BvbnNlRW5kT2ZCb2R5LFxuICAgIHRhc2tEZXN0aW5hdGlvbixcbiAgICBjcm9zc09yaWdpbklzb2xhdGVkQ2FwYWJpbGl0eVxuICB9XG5cbiAgLy8gNy4gSWYgcmVxdWVzdFx1MjAxOXMgYm9keSBpcyBhIGJ5dGUgc2VxdWVuY2UsIHRoZW4gc2V0IHJlcXVlc3RcdTIwMTlzIGJvZHkgdG9cbiAgLy8gICAgcmVxdWVzdFx1MjAxOXMgYm9keSBhcyBhIGJvZHkuXG4gIC8vIE5PVEU6IFNpbmNlIGZldGNoaW5nIGlzIG9ubHkgY2FsbGVkIGZyb20gZmV0Y2gsIGJvZHkgc2hvdWxkIGFscmVhZHkgYmVcbiAgLy8gZXh0cmFjdGVkLlxuICBhc3NlcnQoIXJlcXVlc3QuYm9keSB8fCByZXF1ZXN0LmJvZHkuc3RyZWFtKVxuXG4gIC8vIDguIElmIHJlcXVlc3RcdTIwMTlzIHdpbmRvdyBpcyBcImNsaWVudFwiLCB0aGVuIHNldCByZXF1ZXN0XHUyMDE5cyB3aW5kb3cgdG8gcmVxdWVzdFx1MjAxOXNcbiAgLy8gY2xpZW50LCBpZiByZXF1ZXN0XHUyMDE5cyBjbGllbnRcdTIwMTlzIGdsb2JhbCBvYmplY3QgaXMgYSBXaW5kb3cgb2JqZWN0OyBvdGhlcndpc2VcbiAgLy8gXCJuby13aW5kb3dcIi5cbiAgaWYgKHJlcXVlc3Qud2luZG93ID09PSAnY2xpZW50Jykge1xuICAgIC8vIFRPRE86IFdoYXQgaWYgcmVxdWVzdC5jbGllbnQgaXMgbnVsbD9cbiAgICByZXF1ZXN0LndpbmRvdyA9XG4gICAgICByZXF1ZXN0LmNsaWVudD8uZ2xvYmFsT2JqZWN0Py5jb25zdHJ1Y3Rvcj8ubmFtZSA9PT0gJ1dpbmRvdydcbiAgICAgICAgPyByZXF1ZXN0LmNsaWVudFxuICAgICAgICA6ICduby13aW5kb3cnXG4gIH1cblxuICAvLyA5LiBJZiByZXF1ZXN0XHUyMDE5cyBvcmlnaW4gaXMgXCJjbGllbnRcIiwgdGhlbiBzZXQgcmVxdWVzdFx1MjAxOXMgb3JpZ2luIHRvIHJlcXVlc3RcdTIwMTlzXG4gIC8vIGNsaWVudFx1MjAxOXMgb3JpZ2luLlxuICBpZiAocmVxdWVzdC5vcmlnaW4gPT09ICdjbGllbnQnKSB7XG4gICAgcmVxdWVzdC5vcmlnaW4gPSByZXF1ZXN0LmNsaWVudC5vcmlnaW5cbiAgfVxuXG4gIC8vIDEwLiBJZiBhbGwgb2YgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSB0cnVlOlxuICAvLyBUT0RPXG5cbiAgLy8gMTEuIElmIHJlcXVlc3RcdTIwMTlzIHBvbGljeSBjb250YWluZXIgaXMgXCJjbGllbnRcIiwgdGhlbjpcbiAgaWYgKHJlcXVlc3QucG9saWN5Q29udGFpbmVyID09PSAnY2xpZW50Jykge1xuICAgIC8vIDEuIElmIHJlcXVlc3RcdTIwMTlzIGNsaWVudCBpcyBub24tbnVsbCwgdGhlbiBzZXQgcmVxdWVzdFx1MjAxOXMgcG9saWN5XG4gICAgLy8gY29udGFpbmVyIHRvIGEgY2xvbmUgb2YgcmVxdWVzdFx1MjAxOXMgY2xpZW50XHUyMDE5cyBwb2xpY3kgY29udGFpbmVyLiBbSFRNTF1cbiAgICBpZiAocmVxdWVzdC5jbGllbnQgIT0gbnVsbCkge1xuICAgICAgcmVxdWVzdC5wb2xpY3lDb250YWluZXIgPSBjbG9uZVBvbGljeUNvbnRhaW5lcihcbiAgICAgICAgcmVxdWVzdC5jbGllbnQucG9saWN5Q29udGFpbmVyXG4gICAgICApXG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIDIuIE90aGVyd2lzZSwgc2V0IHJlcXVlc3RcdTIwMTlzIHBvbGljeSBjb250YWluZXIgdG8gYSBuZXcgcG9saWN5XG4gICAgICAvLyBjb250YWluZXIuXG4gICAgICByZXF1ZXN0LnBvbGljeUNvbnRhaW5lciA9IG1ha2VQb2xpY3lDb250YWluZXIoKVxuICAgIH1cbiAgfVxuXG4gIC8vIDEyLiBJZiByZXF1ZXN0XHUyMDE5cyBoZWFkZXIgbGlzdCBkb2VzIG5vdCBjb250YWluIGBBY2NlcHRgLCB0aGVuOlxuICBpZiAoIXJlcXVlc3QuaGVhZGVyc0xpc3QuY29udGFpbnMoJ2FjY2VwdCcsIHRydWUpKSB7XG4gICAgLy8gMS4gTGV0IHZhbHVlIGJlIGAqLypgLlxuICAgIGNvbnN0IHZhbHVlID0gJyovKidcblxuICAgIC8vIDIuIEEgdXNlciBhZ2VudCBzaG91bGQgc2V0IHZhbHVlIHRvIHRoZSBmaXJzdCBtYXRjaGluZyBzdGF0ZW1lbnQsIGlmXG4gICAgLy8gYW55LCBzd2l0Y2hpbmcgb24gcmVxdWVzdFx1MjAxOXMgZGVzdGluYXRpb246XG4gICAgLy8gXCJkb2N1bWVudFwiXG4gICAgLy8gXCJmcmFtZVwiXG4gICAgLy8gXCJpZnJhbWVcIlxuICAgIC8vIGB0ZXh0L2h0bWwsYXBwbGljYXRpb24veGh0bWwreG1sLGFwcGxpY2F0aW9uL3htbDtxPTAuOSwqLyo7cT0wLjhgXG4gICAgLy8gXCJpbWFnZVwiXG4gICAgLy8gYGltYWdlL3BuZyxpbWFnZS9zdmcreG1sLGltYWdlLyo7cT0wLjgsKi8qO3E9MC41YFxuICAgIC8vIFwic3R5bGVcIlxuICAgIC8vIGB0ZXh0L2NzcywqLyo7cT0wLjFgXG4gICAgLy8gVE9ET1xuXG4gICAgLy8gMy4gQXBwZW5kIGBBY2NlcHRgL3ZhbHVlIHRvIHJlcXVlc3RcdTIwMTlzIGhlYWRlciBsaXN0LlxuICAgIHJlcXVlc3QuaGVhZGVyc0xpc3QuYXBwZW5kKCdhY2NlcHQnLCB2YWx1ZSwgdHJ1ZSlcbiAgfVxuXG4gIC8vIDEzLiBJZiByZXF1ZXN0XHUyMDE5cyBoZWFkZXIgbGlzdCBkb2VzIG5vdCBjb250YWluIGBBY2NlcHQtTGFuZ3VhZ2VgLCB0aGVuXG4gIC8vIHVzZXIgYWdlbnRzIHNob3VsZCBhcHBlbmQgYEFjY2VwdC1MYW5ndWFnZWAvYW4gYXBwcm9wcmlhdGUgdmFsdWUgdG9cbiAgLy8gcmVxdWVzdFx1MjAxOXMgaGVhZGVyIGxpc3QuXG4gIGlmICghcmVxdWVzdC5oZWFkZXJzTGlzdC5jb250YWlucygnYWNjZXB0LWxhbmd1YWdlJywgdHJ1ZSkpIHtcbiAgICByZXF1ZXN0LmhlYWRlcnNMaXN0LmFwcGVuZCgnYWNjZXB0LWxhbmd1YWdlJywgJyonLCB0cnVlKVxuICB9XG5cbiAgLy8gMTQuIElmIHJlcXVlc3RcdTIwMTlzIHByaW9yaXR5IGlzIG51bGwsIHRoZW4gdXNlIHJlcXVlc3RcdTIwMTlzIGluaXRpYXRvciBhbmRcbiAgLy8gZGVzdGluYXRpb24gYXBwcm9wcmlhdGVseSBpbiBzZXR0aW5nIHJlcXVlc3RcdTIwMTlzIHByaW9yaXR5IHRvIGFcbiAgLy8gdXNlci1hZ2VudC1kZWZpbmVkIG9iamVjdC5cbiAgaWYgKHJlcXVlc3QucHJpb3JpdHkgPT09IG51bGwpIHtcbiAgICAvLyBUT0RPXG4gIH1cblxuICAvLyAxNS4gSWYgcmVxdWVzdCBpcyBhIHN1YnJlc291cmNlIHJlcXVlc3QsIHRoZW46XG4gIGlmIChzdWJyZXNvdXJjZVNldC5oYXMocmVxdWVzdC5kZXN0aW5hdGlvbikpIHtcbiAgICAvLyBUT0RPXG4gIH1cblxuICAvLyAxNi4gUnVuIG1haW4gZmV0Y2ggZ2l2ZW4gZmV0Y2hQYXJhbXMuXG4gIG1haW5GZXRjaChmZXRjaFBhcmFtcylcbiAgICAuY2F0Y2goZXJyID0+IHtcbiAgICAgIGZldGNoUGFyYW1zLmNvbnRyb2xsZXIudGVybWluYXRlKGVycilcbiAgICB9KVxuXG4gIC8vIDE3LiBSZXR1cm4gZmV0Y2hQYXJhbSdzIGNvbnRyb2xsZXJcbiAgcmV0dXJuIGZldGNoUGFyYW1zLmNvbnRyb2xsZXJcbn1cblxuLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2NvbmNlcHQtbWFpbi1mZXRjaFxuYXN5bmMgZnVuY3Rpb24gbWFpbkZldGNoIChmZXRjaFBhcmFtcywgcmVjdXJzaXZlID0gZmFsc2UpIHtcbiAgLy8gMS4gTGV0IHJlcXVlc3QgYmUgZmV0Y2hQYXJhbXNcdTIwMTlzIHJlcXVlc3QuXG4gIGNvbnN0IHJlcXVlc3QgPSBmZXRjaFBhcmFtcy5yZXF1ZXN0XG5cbiAgLy8gMi4gTGV0IHJlc3BvbnNlIGJlIG51bGwuXG4gIGxldCByZXNwb25zZSA9IG51bGxcblxuICAvLyAzLiBJZiByZXF1ZXN0XHUyMDE5cyBsb2NhbC1VUkxzLW9ubHkgZmxhZyBpcyBzZXQgYW5kIHJlcXVlc3RcdTIwMTlzIGN1cnJlbnQgVVJMIGlzXG4gIC8vIG5vdCBsb2NhbCwgdGhlbiBzZXQgcmVzcG9uc2UgdG8gYSBuZXR3b3JrIGVycm9yLlxuICBpZiAocmVxdWVzdC5sb2NhbFVSTHNPbmx5ICYmICF1cmxJc0xvY2FsKHJlcXVlc3RDdXJyZW50VVJMKHJlcXVlc3QpKSkge1xuICAgIHJlc3BvbnNlID0gbWFrZU5ldHdvcmtFcnJvcignbG9jYWwgVVJMcyBvbmx5JylcbiAgfVxuXG4gIC8vIDQuIFJ1biByZXBvcnQgQ29udGVudCBTZWN1cml0eSBQb2xpY3kgdmlvbGF0aW9ucyBmb3IgcmVxdWVzdC5cbiAgLy8gVE9ET1xuXG4gIC8vIDUuIFVwZ3JhZGUgcmVxdWVzdCB0byBhIHBvdGVudGlhbGx5IHRydXN0d29ydGh5IFVSTCwgaWYgYXBwcm9wcmlhdGUuXG4gIHRyeVVwZ3JhZGVSZXF1ZXN0VG9BUG90ZW50aWFsbHlUcnVzdHdvcnRoeVVSTChyZXF1ZXN0KVxuXG4gIC8vIDYuIElmIHNob3VsZCByZXF1ZXN0IGJlIGJsb2NrZWQgZHVlIHRvIGEgYmFkIHBvcnQsIHNob3VsZCBmZXRjaGluZyByZXF1ZXN0XG4gIC8vIGJlIGJsb2NrZWQgYXMgbWl4ZWQgY29udGVudCwgb3Igc2hvdWxkIHJlcXVlc3QgYmUgYmxvY2tlZCBieSBDb250ZW50XG4gIC8vIFNlY3VyaXR5IFBvbGljeSByZXR1cm5zIGJsb2NrZWQsIHRoZW4gc2V0IHJlc3BvbnNlIHRvIGEgbmV0d29yayBlcnJvci5cbiAgaWYgKHJlcXVlc3RCYWRQb3J0KHJlcXVlc3QpID09PSAnYmxvY2tlZCcpIHtcbiAgICByZXNwb25zZSA9IG1ha2VOZXR3b3JrRXJyb3IoJ2JhZCBwb3J0JylcbiAgfVxuICAvLyBUT0RPOiBzaG91bGQgZmV0Y2hpbmcgcmVxdWVzdCBiZSBibG9ja2VkIGFzIG1peGVkIGNvbnRlbnQ/XG4gIC8vIFRPRE86IHNob3VsZCByZXF1ZXN0IGJlIGJsb2NrZWQgYnkgQ29udGVudCBTZWN1cml0eSBQb2xpY3k/XG5cbiAgLy8gNy4gSWYgcmVxdWVzdFx1MjAxOXMgcmVmZXJyZXIgcG9saWN5IGlzIHRoZSBlbXB0eSBzdHJpbmcsIHRoZW4gc2V0IHJlcXVlc3RcdTIwMTlzXG4gIC8vIHJlZmVycmVyIHBvbGljeSB0byByZXF1ZXN0XHUyMDE5cyBwb2xpY3kgY29udGFpbmVyXHUyMDE5cyByZWZlcnJlciBwb2xpY3kuXG4gIGlmIChyZXF1ZXN0LnJlZmVycmVyUG9saWN5ID09PSAnJykge1xuICAgIHJlcXVlc3QucmVmZXJyZXJQb2xpY3kgPSByZXF1ZXN0LnBvbGljeUNvbnRhaW5lci5yZWZlcnJlclBvbGljeVxuICB9XG5cbiAgLy8gOC4gSWYgcmVxdWVzdFx1MjAxOXMgcmVmZXJyZXIgaXMgbm90IFwibm8tcmVmZXJyZXJcIiwgdGhlbiBzZXQgcmVxdWVzdFx1MjAxOXNcbiAgLy8gcmVmZXJyZXIgdG8gdGhlIHJlc3VsdCBvZiBpbnZva2luZyBkZXRlcm1pbmUgcmVxdWVzdFx1MjAxOXMgcmVmZXJyZXIuXG4gIGlmIChyZXF1ZXN0LnJlZmVycmVyICE9PSAnbm8tcmVmZXJyZXInKSB7XG4gICAgcmVxdWVzdC5yZWZlcnJlciA9IGRldGVybWluZVJlcXVlc3RzUmVmZXJyZXIocmVxdWVzdClcbiAgfVxuXG4gIC8vIDkuIFNldCByZXF1ZXN0XHUyMDE5cyBjdXJyZW50IFVSTFx1MjAxOXMgc2NoZW1lIHRvIFwiaHR0cHNcIiBpZiBhbGwgb2YgdGhlIGZvbGxvd2luZ1xuICAvLyBjb25kaXRpb25zIGFyZSB0cnVlOlxuICAvLyAtIHJlcXVlc3RcdTIwMTlzIGN1cnJlbnQgVVJMXHUyMDE5cyBzY2hlbWUgaXMgXCJodHRwXCJcbiAgLy8gLSByZXF1ZXN0XHUyMDE5cyBjdXJyZW50IFVSTFx1MjAxOXMgaG9zdCBpcyBhIGRvbWFpblxuICAvLyAtIE1hdGNoaW5nIHJlcXVlc3RcdTIwMTlzIGN1cnJlbnQgVVJMXHUyMDE5cyBob3N0IHBlciBLbm93biBIU1RTIEhvc3QgRG9tYWluIE5hbWVcbiAgLy8gICBNYXRjaGluZyByZXN1bHRzIGluIGVpdGhlciBhIHN1cGVyZG9tYWluIG1hdGNoIHdpdGggYW4gYXNzZXJ0ZWRcbiAgLy8gICBpbmNsdWRlU3ViRG9tYWlucyBkaXJlY3RpdmUgb3IgYSBjb25ncnVlbnQgbWF0Y2ggKHdpdGggb3Igd2l0aG91dCBhblxuICAvLyAgIGFzc2VydGVkIGluY2x1ZGVTdWJEb21haW5zIGRpcmVjdGl2ZSkuIFtIU1RTXVxuICAvLyBUT0RPXG5cbiAgLy8gMTAuIElmIHJlY3Vyc2l2ZSBpcyBmYWxzZSwgdGhlbiBydW4gdGhlIHJlbWFpbmluZyBzdGVwcyBpbiBwYXJhbGxlbC5cbiAgLy8gVE9ET1xuXG4gIC8vIDExLiBJZiByZXNwb25zZSBpcyBudWxsLCB0aGVuIHNldCByZXNwb25zZSB0byB0aGUgcmVzdWx0IG9mIHJ1bm5pbmdcbiAgLy8gdGhlIHN0ZXBzIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGZpcnN0IG1hdGNoaW5nIHN0YXRlbWVudDpcbiAgaWYgKHJlc3BvbnNlID09PSBudWxsKSB7XG4gICAgcmVzcG9uc2UgPSBhd2FpdCAoYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgY3VycmVudFVSTCA9IHJlcXVlc3RDdXJyZW50VVJMKHJlcXVlc3QpXG5cbiAgICAgIGlmIChcbiAgICAgICAgLy8gLSByZXF1ZXN0XHUyMDE5cyBjdXJyZW50IFVSTFx1MjAxOXMgb3JpZ2luIGlzIHNhbWUgb3JpZ2luIHdpdGggcmVxdWVzdFx1MjAxOXMgb3JpZ2luLFxuICAgICAgICAvLyAgIGFuZCByZXF1ZXN0XHUyMDE5cyByZXNwb25zZSB0YWludGluZyBpcyBcImJhc2ljXCJcbiAgICAgICAgKHNhbWVPcmlnaW4oY3VycmVudFVSTCwgcmVxdWVzdC51cmwpICYmIHJlcXVlc3QucmVzcG9uc2VUYWludGluZyA9PT0gJ2Jhc2ljJykgfHxcbiAgICAgICAgLy8gcmVxdWVzdFx1MjAxOXMgY3VycmVudCBVUkxcdTIwMTlzIHNjaGVtZSBpcyBcImRhdGFcIlxuICAgICAgICAoY3VycmVudFVSTC5wcm90b2NvbCA9PT0gJ2RhdGE6JykgfHxcbiAgICAgICAgLy8gLSByZXF1ZXN0XHUyMDE5cyBtb2RlIGlzIFwibmF2aWdhdGVcIiBvciBcIndlYnNvY2tldFwiXG4gICAgICAgIChyZXF1ZXN0Lm1vZGUgPT09ICduYXZpZ2F0ZScgfHwgcmVxdWVzdC5tb2RlID09PSAnd2Vic29ja2V0JylcbiAgICAgICkge1xuICAgICAgICAvLyAxLiBTZXQgcmVxdWVzdFx1MjAxOXMgcmVzcG9uc2UgdGFpbnRpbmcgdG8gXCJiYXNpY1wiLlxuICAgICAgICByZXF1ZXN0LnJlc3BvbnNlVGFpbnRpbmcgPSAnYmFzaWMnXG5cbiAgICAgICAgLy8gMi4gUmV0dXJuIHRoZSByZXN1bHQgb2YgcnVubmluZyBzY2hlbWUgZmV0Y2ggZ2l2ZW4gZmV0Y2hQYXJhbXMuXG4gICAgICAgIHJldHVybiBhd2FpdCBzY2hlbWVGZXRjaChmZXRjaFBhcmFtcylcbiAgICAgIH1cblxuICAgICAgLy8gcmVxdWVzdFx1MjAxOXMgbW9kZSBpcyBcInNhbWUtb3JpZ2luXCJcbiAgICAgIGlmIChyZXF1ZXN0Lm1vZGUgPT09ICdzYW1lLW9yaWdpbicpIHtcbiAgICAgICAgLy8gMS4gUmV0dXJuIGEgbmV0d29yayBlcnJvci5cbiAgICAgICAgcmV0dXJuIG1ha2VOZXR3b3JrRXJyb3IoJ3JlcXVlc3QgbW9kZSBjYW5ub3QgYmUgXCJzYW1lLW9yaWdpblwiJylcbiAgICAgIH1cblxuICAgICAgLy8gcmVxdWVzdFx1MjAxOXMgbW9kZSBpcyBcIm5vLWNvcnNcIlxuICAgICAgaWYgKHJlcXVlc3QubW9kZSA9PT0gJ25vLWNvcnMnKSB7XG4gICAgICAgIC8vIDEuIElmIHJlcXVlc3RcdTIwMTlzIHJlZGlyZWN0IG1vZGUgaXMgbm90IFwiZm9sbG93XCIsIHRoZW4gcmV0dXJuIGEgbmV0d29ya1xuICAgICAgICAvLyBlcnJvci5cbiAgICAgICAgaWYgKHJlcXVlc3QucmVkaXJlY3QgIT09ICdmb2xsb3cnKSB7XG4gICAgICAgICAgcmV0dXJuIG1ha2VOZXR3b3JrRXJyb3IoXG4gICAgICAgICAgICAncmVkaXJlY3QgbW9kZSBjYW5ub3QgYmUgXCJmb2xsb3dcIiBmb3IgXCJuby1jb3JzXCIgcmVxdWVzdCdcbiAgICAgICAgICApXG4gICAgICAgIH1cblxuICAgICAgICAvLyAyLiBTZXQgcmVxdWVzdFx1MjAxOXMgcmVzcG9uc2UgdGFpbnRpbmcgdG8gXCJvcGFxdWVcIi5cbiAgICAgICAgcmVxdWVzdC5yZXNwb25zZVRhaW50aW5nID0gJ29wYXF1ZSdcblxuICAgICAgICAvLyAzLiBSZXR1cm4gdGhlIHJlc3VsdCBvZiBydW5uaW5nIHNjaGVtZSBmZXRjaCBnaXZlbiBmZXRjaFBhcmFtcy5cbiAgICAgICAgcmV0dXJuIGF3YWl0IHNjaGVtZUZldGNoKGZldGNoUGFyYW1zKVxuICAgICAgfVxuXG4gICAgICAvLyByZXF1ZXN0XHUyMDE5cyBjdXJyZW50IFVSTFx1MjAxOXMgc2NoZW1lIGlzIG5vdCBhbiBIVFRQKFMpIHNjaGVtZVxuICAgICAgaWYgKCF1cmxJc0h0dHBIdHRwc1NjaGVtZShyZXF1ZXN0Q3VycmVudFVSTChyZXF1ZXN0KSkpIHtcbiAgICAgICAgLy8gUmV0dXJuIGEgbmV0d29yayBlcnJvci5cbiAgICAgICAgcmV0dXJuIG1ha2VOZXR3b3JrRXJyb3IoJ1VSTCBzY2hlbWUgbXVzdCBiZSBhIEhUVFAoUykgc2NoZW1lJylcbiAgICAgIH1cblxuICAgICAgLy8gLSByZXF1ZXN0XHUyMDE5cyB1c2UtQ09SUy1wcmVmbGlnaHQgZmxhZyBpcyBzZXRcbiAgICAgIC8vIC0gcmVxdWVzdFx1MjAxOXMgdW5zYWZlLXJlcXVlc3QgZmxhZyBpcyBzZXQgYW5kIGVpdGhlciByZXF1ZXN0XHUyMDE5cyBtZXRob2QgaXNcbiAgICAgIC8vICAgbm90IGEgQ09SUy1zYWZlbGlzdGVkIG1ldGhvZCBvciBDT1JTLXVuc2FmZSByZXF1ZXN0LWhlYWRlciBuYW1lcyB3aXRoXG4gICAgICAvLyAgIHJlcXVlc3RcdTIwMTlzIGhlYWRlciBsaXN0IGlzIG5vdCBlbXB0eVxuICAgICAgLy8gICAgMS4gU2V0IHJlcXVlc3RcdTIwMTlzIHJlc3BvbnNlIHRhaW50aW5nIHRvIFwiY29yc1wiLlxuICAgICAgLy8gICAgMi4gTGV0IGNvcnNXaXRoUHJlZmxpZ2h0UmVzcG9uc2UgYmUgdGhlIHJlc3VsdCBvZiBydW5uaW5nIEhUVFAgZmV0Y2hcbiAgICAgIC8vICAgIGdpdmVuIGZldGNoUGFyYW1zIGFuZCB0cnVlLlxuICAgICAgLy8gICAgMy4gSWYgY29yc1dpdGhQcmVmbGlnaHRSZXNwb25zZSBpcyBhIG5ldHdvcmsgZXJyb3IsIHRoZW4gY2xlYXIgY2FjaGVcbiAgICAgIC8vICAgIGVudHJpZXMgdXNpbmcgcmVxdWVzdC5cbiAgICAgIC8vICAgIDQuIFJldHVybiBjb3JzV2l0aFByZWZsaWdodFJlc3BvbnNlLlxuICAgICAgLy8gVE9ET1xuXG4gICAgICAvLyBPdGhlcndpc2VcbiAgICAgIC8vICAgIDEuIFNldCByZXF1ZXN0XHUyMDE5cyByZXNwb25zZSB0YWludGluZyB0byBcImNvcnNcIi5cbiAgICAgIHJlcXVlc3QucmVzcG9uc2VUYWludGluZyA9ICdjb3JzJ1xuXG4gICAgICAvLyAgICAyLiBSZXR1cm4gdGhlIHJlc3VsdCBvZiBydW5uaW5nIEhUVFAgZmV0Y2ggZ2l2ZW4gZmV0Y2hQYXJhbXMuXG4gICAgICByZXR1cm4gYXdhaXQgaHR0cEZldGNoKGZldGNoUGFyYW1zKVxuICAgIH0pKClcbiAgfVxuXG4gIC8vIDEyLiBJZiByZWN1cnNpdmUgaXMgdHJ1ZSwgdGhlbiByZXR1cm4gcmVzcG9uc2UuXG4gIGlmIChyZWN1cnNpdmUpIHtcbiAgICByZXR1cm4gcmVzcG9uc2VcbiAgfVxuXG4gIC8vIDEzLiBJZiByZXNwb25zZSBpcyBub3QgYSBuZXR3b3JrIGVycm9yIGFuZCByZXNwb25zZSBpcyBub3QgYSBmaWx0ZXJlZFxuICAvLyByZXNwb25zZSwgdGhlbjpcbiAgaWYgKHJlc3BvbnNlLnN0YXR1cyAhPT0gMCAmJiAhcmVzcG9uc2UuaW50ZXJuYWxSZXNwb25zZSkge1xuICAgIC8vIElmIHJlcXVlc3RcdTIwMTlzIHJlc3BvbnNlIHRhaW50aW5nIGlzIFwiY29yc1wiLCB0aGVuOlxuICAgIGlmIChyZXF1ZXN0LnJlc3BvbnNlVGFpbnRpbmcgPT09ICdjb3JzJykge1xuICAgICAgLy8gMS4gTGV0IGhlYWRlck5hbWVzIGJlIHRoZSByZXN1bHQgb2YgZXh0cmFjdGluZyBoZWFkZXIgbGlzdCB2YWx1ZXNcbiAgICAgIC8vIGdpdmVuIGBBY2Nlc3MtQ29udHJvbC1FeHBvc2UtSGVhZGVyc2AgYW5kIHJlc3BvbnNlXHUyMDE5cyBoZWFkZXIgbGlzdC5cbiAgICAgIC8vIFRPRE9cbiAgICAgIC8vIDIuIElmIHJlcXVlc3RcdTIwMTlzIGNyZWRlbnRpYWxzIG1vZGUgaXMgbm90IFwiaW5jbHVkZVwiIGFuZCBoZWFkZXJOYW1lc1xuICAgICAgLy8gY29udGFpbnMgYCpgLCB0aGVuIHNldCByZXNwb25zZVx1MjAxOXMgQ09SUy1leHBvc2VkIGhlYWRlci1uYW1lIGxpc3QgdG9cbiAgICAgIC8vIGFsbCB1bmlxdWUgaGVhZGVyIG5hbWVzIGluIHJlc3BvbnNlXHUyMDE5cyBoZWFkZXIgbGlzdC5cbiAgICAgIC8vIFRPRE9cbiAgICAgIC8vIDMuIE90aGVyd2lzZSwgaWYgaGVhZGVyTmFtZXMgaXMgbm90IG51bGwgb3IgZmFpbHVyZSwgdGhlbiBzZXRcbiAgICAgIC8vIHJlc3BvbnNlXHUyMDE5cyBDT1JTLWV4cG9zZWQgaGVhZGVyLW5hbWUgbGlzdCB0byBoZWFkZXJOYW1lcy5cbiAgICAgIC8vIFRPRE9cbiAgICB9XG5cbiAgICAvLyBTZXQgcmVzcG9uc2UgdG8gdGhlIGZvbGxvd2luZyBmaWx0ZXJlZCByZXNwb25zZSB3aXRoIHJlc3BvbnNlIGFzIGl0c1xuICAgIC8vIGludGVybmFsIHJlc3BvbnNlLCBkZXBlbmRpbmcgb24gcmVxdWVzdFx1MjAxOXMgcmVzcG9uc2UgdGFpbnRpbmc6XG4gICAgaWYgKHJlcXVlc3QucmVzcG9uc2VUYWludGluZyA9PT0gJ2Jhc2ljJykge1xuICAgICAgcmVzcG9uc2UgPSBmaWx0ZXJSZXNwb25zZShyZXNwb25zZSwgJ2Jhc2ljJylcbiAgICB9IGVsc2UgaWYgKHJlcXVlc3QucmVzcG9uc2VUYWludGluZyA9PT0gJ2NvcnMnKSB7XG4gICAgICByZXNwb25zZSA9IGZpbHRlclJlc3BvbnNlKHJlc3BvbnNlLCAnY29ycycpXG4gICAgfSBlbHNlIGlmIChyZXF1ZXN0LnJlc3BvbnNlVGFpbnRpbmcgPT09ICdvcGFxdWUnKSB7XG4gICAgICByZXNwb25zZSA9IGZpbHRlclJlc3BvbnNlKHJlc3BvbnNlLCAnb3BhcXVlJylcbiAgICB9IGVsc2Uge1xuICAgICAgYXNzZXJ0KGZhbHNlKVxuICAgIH1cbiAgfVxuXG4gIC8vIDE0LiBMZXQgaW50ZXJuYWxSZXNwb25zZSBiZSByZXNwb25zZSwgaWYgcmVzcG9uc2UgaXMgYSBuZXR3b3JrIGVycm9yLFxuICAvLyBhbmQgcmVzcG9uc2VcdTIwMTlzIGludGVybmFsIHJlc3BvbnNlIG90aGVyd2lzZS5cbiAgbGV0IGludGVybmFsUmVzcG9uc2UgPVxuICAgIHJlc3BvbnNlLnN0YXR1cyA9PT0gMCA/IHJlc3BvbnNlIDogcmVzcG9uc2UuaW50ZXJuYWxSZXNwb25zZVxuXG4gIC8vIDE1LiBJZiBpbnRlcm5hbFJlc3BvbnNlXHUyMDE5cyBVUkwgbGlzdCBpcyBlbXB0eSwgdGhlbiBzZXQgaXQgdG8gYSBjbG9uZSBvZlxuICAvLyByZXF1ZXN0XHUyMDE5cyBVUkwgbGlzdC5cbiAgaWYgKGludGVybmFsUmVzcG9uc2UudXJsTGlzdC5sZW5ndGggPT09IDApIHtcbiAgICBpbnRlcm5hbFJlc3BvbnNlLnVybExpc3QucHVzaCguLi5yZXF1ZXN0LnVybExpc3QpXG4gIH1cblxuICAvLyAxNi4gSWYgcmVxdWVzdFx1MjAxOXMgdGltaW5nIGFsbG93IGZhaWxlZCBmbGFnIGlzIHVuc2V0LCB0aGVuIHNldFxuICAvLyBpbnRlcm5hbFJlc3BvbnNlXHUyMDE5cyB0aW1pbmcgYWxsb3cgcGFzc2VkIGZsYWcuXG4gIGlmICghcmVxdWVzdC50aW1pbmdBbGxvd0ZhaWxlZCkge1xuICAgIHJlc3BvbnNlLnRpbWluZ0FsbG93UGFzc2VkID0gdHJ1ZVxuICB9XG5cbiAgLy8gMTcuIElmIHJlc3BvbnNlIGlzIG5vdCBhIG5ldHdvcmsgZXJyb3IgYW5kIGFueSBvZiB0aGUgZm9sbG93aW5nIHJldHVybnNcbiAgLy8gYmxvY2tlZFxuICAvLyAtIHNob3VsZCBpbnRlcm5hbFJlc3BvbnNlIHRvIHJlcXVlc3QgYmUgYmxvY2tlZCBhcyBtaXhlZCBjb250ZW50XG4gIC8vIC0gc2hvdWxkIGludGVybmFsUmVzcG9uc2UgdG8gcmVxdWVzdCBiZSBibG9ja2VkIGJ5IENvbnRlbnQgU2VjdXJpdHkgUG9saWN5XG4gIC8vIC0gc2hvdWxkIGludGVybmFsUmVzcG9uc2UgdG8gcmVxdWVzdCBiZSBibG9ja2VkIGR1ZSB0byBpdHMgTUlNRSB0eXBlXG4gIC8vIC0gc2hvdWxkIGludGVybmFsUmVzcG9uc2UgdG8gcmVxdWVzdCBiZSBibG9ja2VkIGR1ZSB0byBub3NuaWZmXG4gIC8vIFRPRE9cblxuICAvLyAxOC4gSWYgcmVzcG9uc2VcdTIwMTlzIHR5cGUgaXMgXCJvcGFxdWVcIiwgaW50ZXJuYWxSZXNwb25zZVx1MjAxOXMgc3RhdHVzIGlzIDIwNixcbiAgLy8gaW50ZXJuYWxSZXNwb25zZVx1MjAxOXMgcmFuZ2UtcmVxdWVzdGVkIGZsYWcgaXMgc2V0LCBhbmQgcmVxdWVzdFx1MjAxOXMgaGVhZGVyXG4gIC8vIGxpc3QgZG9lcyBub3QgY29udGFpbiBgUmFuZ2VgLCB0aGVuIHNldCByZXNwb25zZSBhbmQgaW50ZXJuYWxSZXNwb25zZVxuICAvLyB0byBhIG5ldHdvcmsgZXJyb3IuXG4gIGlmIChcbiAgICByZXNwb25zZS50eXBlID09PSAnb3BhcXVlJyAmJlxuICAgIGludGVybmFsUmVzcG9uc2Uuc3RhdHVzID09PSAyMDYgJiZcbiAgICBpbnRlcm5hbFJlc3BvbnNlLnJhbmdlUmVxdWVzdGVkICYmXG4gICAgIXJlcXVlc3QuaGVhZGVycy5jb250YWlucygncmFuZ2UnLCB0cnVlKVxuICApIHtcbiAgICByZXNwb25zZSA9IGludGVybmFsUmVzcG9uc2UgPSBtYWtlTmV0d29ya0Vycm9yKClcbiAgfVxuXG4gIC8vIDE5LiBJZiByZXNwb25zZSBpcyBub3QgYSBuZXR3b3JrIGVycm9yIGFuZCBlaXRoZXIgcmVxdWVzdFx1MjAxOXMgbWV0aG9kIGlzXG4gIC8vIGBIRUFEYCBvciBgQ09OTkVDVGAsIG9yIGludGVybmFsUmVzcG9uc2VcdTIwMTlzIHN0YXR1cyBpcyBhIG51bGwgYm9keSBzdGF0dXMsXG4gIC8vIHNldCBpbnRlcm5hbFJlc3BvbnNlXHUyMDE5cyBib2R5IHRvIG51bGwgYW5kIGRpc3JlZ2FyZCBhbnkgZW5xdWV1aW5nIHRvd2FyZFxuICAvLyBpdCAoaWYgYW55KS5cbiAgaWYgKFxuICAgIHJlc3BvbnNlLnN0YXR1cyAhPT0gMCAmJlxuICAgIChyZXF1ZXN0Lm1ldGhvZCA9PT0gJ0hFQUQnIHx8XG4gICAgICByZXF1ZXN0Lm1ldGhvZCA9PT0gJ0NPTk5FQ1QnIHx8XG4gICAgICBudWxsQm9keVN0YXR1cy5pbmNsdWRlcyhpbnRlcm5hbFJlc3BvbnNlLnN0YXR1cykpXG4gICkge1xuICAgIGludGVybmFsUmVzcG9uc2UuYm9keSA9IG51bGxcbiAgICBmZXRjaFBhcmFtcy5jb250cm9sbGVyLmR1bXAgPSB0cnVlXG4gIH1cblxuICAvLyAyMC4gSWYgcmVxdWVzdFx1MjAxOXMgaW50ZWdyaXR5IG1ldGFkYXRhIGlzIG5vdCB0aGUgZW1wdHkgc3RyaW5nLCB0aGVuOlxuICBpZiAocmVxdWVzdC5pbnRlZ3JpdHkpIHtcbiAgICAvLyAxLiBMZXQgcHJvY2Vzc0JvZHlFcnJvciBiZSB0aGlzIHN0ZXA6IHJ1biBmZXRjaCBmaW5hbGUgZ2l2ZW4gZmV0Y2hQYXJhbXNcbiAgICAvLyBhbmQgYSBuZXR3b3JrIGVycm9yLlxuICAgIGNvbnN0IHByb2Nlc3NCb2R5RXJyb3IgPSAocmVhc29uKSA9PlxuICAgICAgZmV0Y2hGaW5hbGUoZmV0Y2hQYXJhbXMsIG1ha2VOZXR3b3JrRXJyb3IocmVhc29uKSlcblxuICAgIC8vIDIuIElmIHJlcXVlc3RcdTIwMTlzIHJlc3BvbnNlIHRhaW50aW5nIGlzIFwib3BhcXVlXCIsIG9yIHJlc3BvbnNlXHUyMDE5cyBib2R5IGlzIG51bGwsXG4gICAgLy8gdGhlbiBydW4gcHJvY2Vzc0JvZHlFcnJvciBhbmQgYWJvcnQgdGhlc2Ugc3RlcHMuXG4gICAgaWYgKHJlcXVlc3QucmVzcG9uc2VUYWludGluZyA9PT0gJ29wYXF1ZScgfHwgcmVzcG9uc2UuYm9keSA9PSBudWxsKSB7XG4gICAgICBwcm9jZXNzQm9keUVycm9yKHJlc3BvbnNlLmVycm9yKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgLy8gMy4gTGV0IHByb2Nlc3NCb2R5IGdpdmVuIGJ5dGVzIGJlIHRoZXNlIHN0ZXBzOlxuICAgIGNvbnN0IHByb2Nlc3NCb2R5ID0gKGJ5dGVzKSA9PiB7XG4gICAgICAvLyAxLiBJZiBieXRlcyBkbyBub3QgbWF0Y2ggcmVxdWVzdFx1MjAxOXMgaW50ZWdyaXR5IG1ldGFkYXRhLFxuICAgICAgLy8gdGhlbiBydW4gcHJvY2Vzc0JvZHlFcnJvciBhbmQgYWJvcnQgdGhlc2Ugc3RlcHMuIFtTUkldXG4gICAgICBpZiAoIWJ5dGVzTWF0Y2goYnl0ZXMsIHJlcXVlc3QuaW50ZWdyaXR5KSkge1xuICAgICAgICBwcm9jZXNzQm9keUVycm9yKCdpbnRlZ3JpdHkgbWlzbWF0Y2gnKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgLy8gMi4gU2V0IHJlc3BvbnNlXHUyMDE5cyBib2R5IHRvIGJ5dGVzIGFzIGEgYm9keS5cbiAgICAgIHJlc3BvbnNlLmJvZHkgPSBzYWZlbHlFeHRyYWN0Qm9keShieXRlcylbMF1cblxuICAgICAgLy8gMy4gUnVuIGZldGNoIGZpbmFsZSBnaXZlbiBmZXRjaFBhcmFtcyBhbmQgcmVzcG9uc2UuXG4gICAgICBmZXRjaEZpbmFsZShmZXRjaFBhcmFtcywgcmVzcG9uc2UpXG4gICAgfVxuXG4gICAgLy8gNC4gRnVsbHkgcmVhZCByZXNwb25zZVx1MjAxOXMgYm9keSBnaXZlbiBwcm9jZXNzQm9keSBhbmQgcHJvY2Vzc0JvZHlFcnJvci5cbiAgICBhd2FpdCBmdWxseVJlYWRCb2R5KHJlc3BvbnNlLmJvZHksIHByb2Nlc3NCb2R5LCBwcm9jZXNzQm9keUVycm9yKVxuICB9IGVsc2Uge1xuICAgIC8vIDIxLiBPdGhlcndpc2UsIHJ1biBmZXRjaCBmaW5hbGUgZ2l2ZW4gZmV0Y2hQYXJhbXMgYW5kIHJlc3BvbnNlLlxuICAgIGZldGNoRmluYWxlKGZldGNoUGFyYW1zLCByZXNwb25zZSlcbiAgfVxufVxuXG4vLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jY29uY2VwdC1zY2hlbWUtZmV0Y2hcbi8vIGdpdmVuIGEgZmV0Y2ggcGFyYW1zIGZldGNoUGFyYW1zXG5mdW5jdGlvbiBzY2hlbWVGZXRjaCAoZmV0Y2hQYXJhbXMpIHtcbiAgLy8gTm90ZTogc2luY2UgdGhlIGNvbm5lY3Rpb24gaXMgZGVzdHJveWVkIG9uIHJlZGlyZWN0LCB3aGljaCBzZXRzIGZldGNoUGFyYW1zIHRvIGFcbiAgLy8gY2FuY2VsbGVkIHN0YXRlLCB3ZSBkbyBub3Qgd2FudCB0aGlzIGNvbmRpdGlvbiB0byB0cmlnZ2VyICp1bmxlc3MqIHRoZXJlIGhhdmUgYmVlblxuICAvLyBubyByZWRpcmVjdHMuIFNlZSBodHRwczovL2dpdGh1Yi5jb20vbm9kZWpzL3VuZGljaS9pc3N1ZXMvMTc3NlxuICAvLyAxLiBJZiBmZXRjaFBhcmFtcyBpcyBjYW5jZWxlZCwgdGhlbiByZXR1cm4gdGhlIGFwcHJvcHJpYXRlIG5ldHdvcmsgZXJyb3IgZm9yIGZldGNoUGFyYW1zLlxuICBpZiAoaXNDYW5jZWxsZWQoZmV0Y2hQYXJhbXMpICYmIGZldGNoUGFyYW1zLnJlcXVlc3QucmVkaXJlY3RDb3VudCA9PT0gMCkge1xuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUobWFrZUFwcHJvcHJpYXRlTmV0d29ya0Vycm9yKGZldGNoUGFyYW1zKSlcbiAgfVxuXG4gIC8vIDIuIExldCByZXF1ZXN0IGJlIGZldGNoUGFyYW1zXHUyMDE5cyByZXF1ZXN0LlxuICBjb25zdCB7IHJlcXVlc3QgfSA9IGZldGNoUGFyYW1zXG5cbiAgY29uc3QgeyBwcm90b2NvbDogc2NoZW1lIH0gPSByZXF1ZXN0Q3VycmVudFVSTChyZXF1ZXN0KVxuXG4gIC8vIDMuIFN3aXRjaCBvbiByZXF1ZXN0XHUyMDE5cyBjdXJyZW50IFVSTFx1MjAxOXMgc2NoZW1lIGFuZCBydW4gdGhlIGFzc29jaWF0ZWQgc3RlcHM6XG4gIHN3aXRjaCAoc2NoZW1lKSB7XG4gICAgY2FzZSAnYWJvdXQ6Jzoge1xuICAgICAgLy8gSWYgcmVxdWVzdFx1MjAxOXMgY3VycmVudCBVUkxcdTIwMTlzIHBhdGggaXMgdGhlIHN0cmluZyBcImJsYW5rXCIsIHRoZW4gcmV0dXJuIGEgbmV3IHJlc3BvbnNlXG4gICAgICAvLyB3aG9zZSBzdGF0dXMgbWVzc2FnZSBpcyBgT0tgLCBoZWFkZXIgbGlzdCBpcyBcdTAwQUIgKGBDb250ZW50LVR5cGVgLCBgdGV4dC9odG1sO2NoYXJzZXQ9dXRmLThgKSBcdTAwQkIsXG4gICAgICAvLyBhbmQgYm9keSBpcyB0aGUgZW1wdHkgYnl0ZSBzZXF1ZW5jZSBhcyBhIGJvZHkuXG5cbiAgICAgIC8vIE90aGVyd2lzZSwgcmV0dXJuIGEgbmV0d29yayBlcnJvci5cbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUobWFrZU5ldHdvcmtFcnJvcignYWJvdXQgc2NoZW1lIGlzIG5vdCBzdXBwb3J0ZWQnKSlcbiAgICB9XG4gICAgY2FzZSAnYmxvYjonOiB7XG4gICAgICBpZiAoIXJlc29sdmVPYmplY3RVUkwpIHtcbiAgICAgICAgcmVzb2x2ZU9iamVjdFVSTCA9IHJlcXVpcmUoJ25vZGU6YnVmZmVyJykucmVzb2x2ZU9iamVjdFVSTFxuICAgICAgfVxuXG4gICAgICAvLyAxLiBMZXQgYmxvYlVSTEVudHJ5IGJlIHJlcXVlc3RcdTIwMTlzIGN1cnJlbnQgVVJMXHUyMDE5cyBibG9iIFVSTCBlbnRyeS5cbiAgICAgIGNvbnN0IGJsb2JVUkxFbnRyeSA9IHJlcXVlc3RDdXJyZW50VVJMKHJlcXVlc3QpXG5cbiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS93ZWItcGxhdGZvcm0tdGVzdHMvd3B0L2Jsb2IvN2IwZWJhY2NjNjJiNTY2YTE5NjUzOTZlNWJlN2JiMmJjMDZmODQxZi9GaWxlQVBJL3VybC9yZXNvdXJjZXMvZmV0Y2gtdGVzdHMuanMjTDUyLUw1NlxuICAgICAgLy8gQnVmZmVyLnJlc29sdmVPYmplY3RVUkwgZG9lcyBub3QgaWdub3JlIFVSTCBxdWVyaWVzLlxuICAgICAgaWYgKGJsb2JVUkxFbnRyeS5zZWFyY2gubGVuZ3RoICE9PSAwKSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUobWFrZU5ldHdvcmtFcnJvcignTmV0d29ya0Vycm9yIHdoZW4gYXR0ZW1wdGluZyB0byBmZXRjaCByZXNvdXJjZS4nKSlcbiAgICAgIH1cblxuICAgICAgY29uc3QgYmxvYiA9IHJlc29sdmVPYmplY3RVUkwoYmxvYlVSTEVudHJ5LnRvU3RyaW5nKCkpXG5cbiAgICAgIC8vIDIuIElmIHJlcXVlc3RcdTIwMTlzIG1ldGhvZCBpcyBub3QgYEdFVGAsIGJsb2JVUkxFbnRyeSBpcyBudWxsLCBvciBibG9iVVJMRW50cnlcdTIwMTlzXG4gICAgICAvLyAgICBvYmplY3QgaXMgbm90IGEgQmxvYiBvYmplY3QsIHRoZW4gcmV0dXJuIGEgbmV0d29yayBlcnJvci5cbiAgICAgIGlmIChyZXF1ZXN0Lm1ldGhvZCAhPT0gJ0dFVCcgfHwgIWlzQmxvYkxpa2UoYmxvYikpIHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShtYWtlTmV0d29ya0Vycm9yKCdpbnZhbGlkIG1ldGhvZCcpKVxuICAgICAgfVxuXG4gICAgICAvLyAzLiBMZXQgYmxvYiBiZSBibG9iVVJMRW50cnlcdTIwMTlzIG9iamVjdC5cbiAgICAgIC8vIE5vdGU6IGRvbmUgYWJvdmVcblxuICAgICAgLy8gNC4gTGV0IHJlc3BvbnNlIGJlIGEgbmV3IHJlc3BvbnNlLlxuICAgICAgY29uc3QgcmVzcG9uc2UgPSBtYWtlUmVzcG9uc2UoKVxuXG4gICAgICAvLyA1LiBMZXQgZnVsbExlbmd0aCBiZSBibG9iXHUyMDE5cyBzaXplLlxuICAgICAgY29uc3QgZnVsbExlbmd0aCA9IGJsb2Iuc2l6ZVxuXG4gICAgICAvLyA2LiBMZXQgc2VyaWFsaXplZEZ1bGxMZW5ndGggYmUgZnVsbExlbmd0aCwgc2VyaWFsaXplZCBhbmQgaXNvbW9ycGhpYyBlbmNvZGVkLlxuICAgICAgY29uc3Qgc2VyaWFsaXplZEZ1bGxMZW5ndGggPSBpc29tb3JwaGljRW5jb2RlKGAke2Z1bGxMZW5ndGh9YClcblxuICAgICAgLy8gNy4gTGV0IHR5cGUgYmUgYmxvYlx1MjAxOXMgdHlwZS5cbiAgICAgIGNvbnN0IHR5cGUgPSBibG9iLnR5cGVcblxuICAgICAgLy8gOC4gSWYgcmVxdWVzdFx1MjAxOXMgaGVhZGVyIGxpc3QgZG9lcyBub3QgY29udGFpbiBgUmFuZ2VgOlxuICAgICAgLy8gOS4gT3RoZXJ3aXNlOlxuICAgICAgaWYgKCFyZXF1ZXN0LmhlYWRlcnNMaXN0LmNvbnRhaW5zKCdyYW5nZScsIHRydWUpKSB7XG4gICAgICAgIC8vIDEuIExldCBib2R5V2l0aFR5cGUgYmUgdGhlIHJlc3VsdCBvZiBzYWZlbHkgZXh0cmFjdGluZyBibG9iLlxuICAgICAgICAvLyBOb3RlOiBpbiB0aGUgRmlsZUFQSSBhIGJsb2IgXCJvYmplY3RcIiBpcyBhIEJsb2IgKm9yKiBhIE1lZGlhU291cmNlLlxuICAgICAgICAvLyBJbiBub2RlLCB0aGlzIGNhbiBvbmx5IGV2ZXIgYmUgYSBCbG9iLiBUaGVyZWZvcmUgd2UgY2FuIHNhZmVseVxuICAgICAgICAvLyB1c2UgZXh0cmFjdEJvZHkgZGlyZWN0bHkuXG4gICAgICAgIGNvbnN0IGJvZHlXaXRoVHlwZSA9IGV4dHJhY3RCb2R5KGJsb2IpXG5cbiAgICAgICAgLy8gMi4gU2V0IHJlc3BvbnNlXHUyMDE5cyBzdGF0dXMgbWVzc2FnZSB0byBgT0tgLlxuICAgICAgICByZXNwb25zZS5zdGF0dXNUZXh0ID0gJ09LJ1xuXG4gICAgICAgIC8vIDMuIFNldCByZXNwb25zZVx1MjAxOXMgYm9keSB0byBib2R5V2l0aFR5cGVcdTIwMTlzIGJvZHkuXG4gICAgICAgIHJlc3BvbnNlLmJvZHkgPSBib2R5V2l0aFR5cGVbMF1cblxuICAgICAgICAvLyA0LiBTZXQgcmVzcG9uc2VcdTIwMTlzIGhlYWRlciBsaXN0IHRvIFx1MDBBQiAoYENvbnRlbnQtTGVuZ3RoYCwgc2VyaWFsaXplZEZ1bGxMZW5ndGgpLCAoYENvbnRlbnQtVHlwZWAsIHR5cGUpIFx1MDBCQi5cbiAgICAgICAgcmVzcG9uc2UuaGVhZGVyc0xpc3Quc2V0KCdjb250ZW50LWxlbmd0aCcsIHNlcmlhbGl6ZWRGdWxsTGVuZ3RoLCB0cnVlKVxuICAgICAgICByZXNwb25zZS5oZWFkZXJzTGlzdC5zZXQoJ2NvbnRlbnQtdHlwZScsIHR5cGUsIHRydWUpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyAxLiBTZXQgcmVzcG9uc2VcdTIwMTlzIHJhbmdlLXJlcXVlc3RlZCBmbGFnLlxuICAgICAgICByZXNwb25zZS5yYW5nZVJlcXVlc3RlZCA9IHRydWVcblxuICAgICAgICAvLyAyLiBMZXQgcmFuZ2VIZWFkZXIgYmUgdGhlIHJlc3VsdCBvZiBnZXR0aW5nIGBSYW5nZWAgZnJvbSByZXF1ZXN0XHUyMDE5cyBoZWFkZXIgbGlzdC5cbiAgICAgICAgY29uc3QgcmFuZ2VIZWFkZXIgPSByZXF1ZXN0LmhlYWRlcnNMaXN0LmdldCgncmFuZ2UnLCB0cnVlKVxuXG4gICAgICAgIC8vIDMuIExldCByYW5nZVZhbHVlIGJlIHRoZSByZXN1bHQgb2YgcGFyc2luZyBhIHNpbmdsZSByYW5nZSBoZWFkZXIgdmFsdWUgZ2l2ZW4gcmFuZ2VIZWFkZXIgYW5kIHRydWUuXG4gICAgICAgIGNvbnN0IHJhbmdlVmFsdWUgPSBzaW1wbGVSYW5nZUhlYWRlclZhbHVlKHJhbmdlSGVhZGVyLCB0cnVlKVxuXG4gICAgICAgIC8vIDQuIElmIHJhbmdlVmFsdWUgaXMgZmFpbHVyZSwgdGhlbiByZXR1cm4gYSBuZXR3b3JrIGVycm9yLlxuICAgICAgICBpZiAocmFuZ2VWYWx1ZSA9PT0gJ2ZhaWx1cmUnKSB7XG4gICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShtYWtlTmV0d29ya0Vycm9yKCdmYWlsZWQgdG8gZmV0Y2ggdGhlIGRhdGEgVVJMJykpXG4gICAgICAgIH1cblxuICAgICAgICAvLyA1LiBMZXQgKHJhbmdlU3RhcnQsIHJhbmdlRW5kKSBiZSByYW5nZVZhbHVlLlxuICAgICAgICBsZXQgeyByYW5nZVN0YXJ0VmFsdWU6IHJhbmdlU3RhcnQsIHJhbmdlRW5kVmFsdWU6IHJhbmdlRW5kIH0gPSByYW5nZVZhbHVlXG5cbiAgICAgICAgLy8gNi4gSWYgcmFuZ2VTdGFydCBpcyBudWxsOlxuICAgICAgICAvLyA3LiBPdGhlcndpc2U6XG4gICAgICAgIGlmIChyYW5nZVN0YXJ0ID09PSBudWxsKSB7XG4gICAgICAgICAgLy8gMS4gU2V0IHJhbmdlU3RhcnQgdG8gZnVsbExlbmd0aCBcdTIyMTIgcmFuZ2VFbmQuXG4gICAgICAgICAgcmFuZ2VTdGFydCA9IGZ1bGxMZW5ndGggLSByYW5nZUVuZFxuXG4gICAgICAgICAgLy8gMi4gU2V0IHJhbmdlRW5kIHRvIHJhbmdlU3RhcnQgKyByYW5nZUVuZCBcdTIyMTIgMS5cbiAgICAgICAgICByYW5nZUVuZCA9IHJhbmdlU3RhcnQgKyByYW5nZUVuZCAtIDFcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyAxLiBJZiByYW5nZVN0YXJ0IGlzIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byBmdWxsTGVuZ3RoLCB0aGVuIHJldHVybiBhIG5ldHdvcmsgZXJyb3IuXG4gICAgICAgICAgaWYgKHJhbmdlU3RhcnQgPj0gZnVsbExlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShtYWtlTmV0d29ya0Vycm9yKCdSYW5nZSBzdGFydCBpcyBncmVhdGVyIHRoYW4gdGhlIGJsb2JcXCdzIHNpemUuJykpXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gMi4gSWYgcmFuZ2VFbmQgaXMgbnVsbCBvciByYW5nZUVuZCBpcyBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gZnVsbExlbmd0aCwgdGhlbiBzZXRcbiAgICAgICAgICAvLyAgICByYW5nZUVuZCB0byBmdWxsTGVuZ3RoIFx1MjIxMiAxLlxuICAgICAgICAgIGlmIChyYW5nZUVuZCA9PT0gbnVsbCB8fCByYW5nZUVuZCA+PSBmdWxsTGVuZ3RoKSB7XG4gICAgICAgICAgICByYW5nZUVuZCA9IGZ1bGxMZW5ndGggLSAxXG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gOC4gTGV0IHNsaWNlZEJsb2IgYmUgdGhlIHJlc3VsdCBvZiBpbnZva2luZyBzbGljZSBibG9iIGdpdmVuIGJsb2IsIHJhbmdlU3RhcnQsXG4gICAgICAgIC8vICAgIHJhbmdlRW5kICsgMSwgYW5kIHR5cGUuXG4gICAgICAgIGNvbnN0IHNsaWNlZEJsb2IgPSBibG9iLnNsaWNlKHJhbmdlU3RhcnQsIHJhbmdlRW5kLCB0eXBlKVxuXG4gICAgICAgIC8vIDkuIExldCBzbGljZWRCb2R5V2l0aFR5cGUgYmUgdGhlIHJlc3VsdCBvZiBzYWZlbHkgZXh0cmFjdGluZyBzbGljZWRCbG9iLlxuICAgICAgICAvLyBOb3RlOiBzYW1lIHJlYXNvbiBhcyBtZW50aW9uZWQgYWJvdmUgYXMgdG8gd2h5IHdlIHVzZSBleHRyYWN0Qm9keVxuICAgICAgICBjb25zdCBzbGljZWRCb2R5V2l0aFR5cGUgPSBleHRyYWN0Qm9keShzbGljZWRCbG9iKVxuXG4gICAgICAgIC8vIDEwLiBTZXQgcmVzcG9uc2VcdTIwMTlzIGJvZHkgdG8gc2xpY2VkQm9keVdpdGhUeXBlXHUyMDE5cyBib2R5LlxuICAgICAgICByZXNwb25zZS5ib2R5ID0gc2xpY2VkQm9keVdpdGhUeXBlWzBdXG5cbiAgICAgICAgLy8gMTEuIExldCBzZXJpYWxpemVkU2xpY2VkTGVuZ3RoIGJlIHNsaWNlZEJsb2JcdTIwMTlzIHNpemUsIHNlcmlhbGl6ZWQgYW5kIGlzb21vcnBoaWMgZW5jb2RlZC5cbiAgICAgICAgY29uc3Qgc2VyaWFsaXplZFNsaWNlZExlbmd0aCA9IGlzb21vcnBoaWNFbmNvZGUoYCR7c2xpY2VkQmxvYi5zaXplfWApXG5cbiAgICAgICAgLy8gMTIuIExldCBjb250ZW50UmFuZ2UgYmUgdGhlIHJlc3VsdCBvZiBpbnZva2luZyBidWlsZCBhIGNvbnRlbnQgcmFuZ2UgZ2l2ZW4gcmFuZ2VTdGFydCxcbiAgICAgICAgLy8gICAgIHJhbmdlRW5kLCBhbmQgZnVsbExlbmd0aC5cbiAgICAgICAgY29uc3QgY29udGVudFJhbmdlID0gYnVpbGRDb250ZW50UmFuZ2UocmFuZ2VTdGFydCwgcmFuZ2VFbmQsIGZ1bGxMZW5ndGgpXG5cbiAgICAgICAgLy8gMTMuIFNldCByZXNwb25zZVx1MjAxOXMgc3RhdHVzIHRvIDIwNi5cbiAgICAgICAgcmVzcG9uc2Uuc3RhdHVzID0gMjA2XG5cbiAgICAgICAgLy8gMTQuIFNldCByZXNwb25zZVx1MjAxOXMgc3RhdHVzIG1lc3NhZ2UgdG8gYFBhcnRpYWwgQ29udGVudGAuXG4gICAgICAgIHJlc3BvbnNlLnN0YXR1c1RleHQgPSAnUGFydGlhbCBDb250ZW50J1xuXG4gICAgICAgIC8vIDE1LiBTZXQgcmVzcG9uc2VcdTIwMTlzIGhlYWRlciBsaXN0IHRvIFx1MDBBQiAoYENvbnRlbnQtTGVuZ3RoYCwgc2VyaWFsaXplZFNsaWNlZExlbmd0aCksXG4gICAgICAgIC8vICAgICAoYENvbnRlbnQtVHlwZWAsIHR5cGUpLCAoYENvbnRlbnQtUmFuZ2VgLCBjb250ZW50UmFuZ2UpIFx1MDBCQi5cbiAgICAgICAgcmVzcG9uc2UuaGVhZGVyc0xpc3Quc2V0KCdjb250ZW50LWxlbmd0aCcsIHNlcmlhbGl6ZWRTbGljZWRMZW5ndGgsIHRydWUpXG4gICAgICAgIHJlc3BvbnNlLmhlYWRlcnNMaXN0LnNldCgnY29udGVudC10eXBlJywgdHlwZSwgdHJ1ZSlcbiAgICAgICAgcmVzcG9uc2UuaGVhZGVyc0xpc3Quc2V0KCdjb250ZW50LXJhbmdlJywgY29udGVudFJhbmdlLCB0cnVlKVxuICAgICAgfVxuXG4gICAgICAvLyAxMC4gUmV0dXJuIHJlc3BvbnNlLlxuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShyZXNwb25zZSlcbiAgICB9XG4gICAgY2FzZSAnZGF0YTonOiB7XG4gICAgICAvLyAxLiBMZXQgZGF0YVVSTFN0cnVjdCBiZSB0aGUgcmVzdWx0IG9mIHJ1bm5pbmcgdGhlXG4gICAgICAvLyAgICBkYXRhOiBVUkwgcHJvY2Vzc29yIG9uIHJlcXVlc3RcdTIwMTlzIGN1cnJlbnQgVVJMLlxuICAgICAgY29uc3QgY3VycmVudFVSTCA9IHJlcXVlc3RDdXJyZW50VVJMKHJlcXVlc3QpXG4gICAgICBjb25zdCBkYXRhVVJMU3RydWN0ID0gZGF0YVVSTFByb2Nlc3NvcihjdXJyZW50VVJMKVxuXG4gICAgICAvLyAyLiBJZiBkYXRhVVJMU3RydWN0IGlzIGZhaWx1cmUsIHRoZW4gcmV0dXJuIGFcbiAgICAgIC8vICAgIG5ldHdvcmsgZXJyb3IuXG4gICAgICBpZiAoZGF0YVVSTFN0cnVjdCA9PT0gJ2ZhaWx1cmUnKSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUobWFrZU5ldHdvcmtFcnJvcignZmFpbGVkIHRvIGZldGNoIHRoZSBkYXRhIFVSTCcpKVxuICAgICAgfVxuXG4gICAgICAvLyAzLiBMZXQgbWltZVR5cGUgYmUgZGF0YVVSTFN0cnVjdFx1MjAxOXMgTUlNRSB0eXBlLCBzZXJpYWxpemVkLlxuICAgICAgY29uc3QgbWltZVR5cGUgPSBzZXJpYWxpemVBTWltZVR5cGUoZGF0YVVSTFN0cnVjdC5taW1lVHlwZSlcblxuICAgICAgLy8gNC4gUmV0dXJuIGEgcmVzcG9uc2Ugd2hvc2Ugc3RhdHVzIG1lc3NhZ2UgaXMgYE9LYCxcbiAgICAgIC8vICAgIGhlYWRlciBsaXN0IGlzIFx1MDBBQiAoYENvbnRlbnQtVHlwZWAsIG1pbWVUeXBlKSBcdTAwQkIsXG4gICAgICAvLyAgICBhbmQgYm9keSBpcyBkYXRhVVJMU3RydWN0XHUyMDE5cyBib2R5IGFzIGEgYm9keS5cbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUobWFrZVJlc3BvbnNlKHtcbiAgICAgICAgc3RhdHVzVGV4dDogJ09LJyxcbiAgICAgICAgaGVhZGVyc0xpc3Q6IFtcbiAgICAgICAgICBbJ2NvbnRlbnQtdHlwZScsIHsgbmFtZTogJ0NvbnRlbnQtVHlwZScsIHZhbHVlOiBtaW1lVHlwZSB9XVxuICAgICAgICBdLFxuICAgICAgICBib2R5OiBzYWZlbHlFeHRyYWN0Qm9keShkYXRhVVJMU3RydWN0LmJvZHkpWzBdXG4gICAgICB9KSlcbiAgICB9XG4gICAgY2FzZSAnZmlsZTonOiB7XG4gICAgICAvLyBGb3Igbm93LCB1bmZvcnR1bmF0ZSBhcyBpdCBpcywgZmlsZSBVUkxzIGFyZSBsZWZ0IGFzIGFuIGV4ZXJjaXNlIGZvciB0aGUgcmVhZGVyLlxuICAgICAgLy8gV2hlbiBpbiBkb3VidCwgcmV0dXJuIGEgbmV0d29yayBlcnJvci5cbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUobWFrZU5ldHdvcmtFcnJvcignbm90IGltcGxlbWVudGVkLi4uIHlldC4uLicpKVxuICAgIH1cbiAgICBjYXNlICdodHRwOic6XG4gICAgY2FzZSAnaHR0cHM6Jzoge1xuICAgICAgLy8gUmV0dXJuIHRoZSByZXN1bHQgb2YgcnVubmluZyBIVFRQIGZldGNoIGdpdmVuIGZldGNoUGFyYW1zLlxuXG4gICAgICByZXR1cm4gaHR0cEZldGNoKGZldGNoUGFyYW1zKVxuICAgICAgICAuY2F0Y2goKGVycikgPT4gbWFrZU5ldHdvcmtFcnJvcihlcnIpKVxuICAgIH1cbiAgICBkZWZhdWx0OiB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG1ha2VOZXR3b3JrRXJyb3IoJ3Vua25vd24gc2NoZW1lJykpXG4gICAgfVxuICB9XG59XG5cbi8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNmaW5hbGl6ZS1yZXNwb25zZVxuZnVuY3Rpb24gZmluYWxpemVSZXNwb25zZSAoZmV0Y2hQYXJhbXMsIHJlc3BvbnNlKSB7XG4gIC8vIDEuIFNldCBmZXRjaFBhcmFtc1x1MjAxOXMgcmVxdWVzdFx1MjAxOXMgZG9uZSBmbGFnLlxuICBmZXRjaFBhcmFtcy5yZXF1ZXN0LmRvbmUgPSB0cnVlXG5cbiAgLy8gMiwgSWYgZmV0Y2hQYXJhbXNcdTIwMTlzIHByb2Nlc3MgcmVzcG9uc2UgZG9uZSBpcyBub3QgbnVsbCwgdGhlbiBxdWV1ZSBhIGZldGNoXG4gIC8vIHRhc2sgdG8gcnVuIGZldGNoUGFyYW1zXHUyMDE5cyBwcm9jZXNzIHJlc3BvbnNlIGRvbmUgZ2l2ZW4gcmVzcG9uc2UsIHdpdGhcbiAgLy8gZmV0Y2hQYXJhbXNcdTIwMTlzIHRhc2sgZGVzdGluYXRpb24uXG4gIGlmIChmZXRjaFBhcmFtcy5wcm9jZXNzUmVzcG9uc2VEb25lICE9IG51bGwpIHtcbiAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiBmZXRjaFBhcmFtcy5wcm9jZXNzUmVzcG9uc2VEb25lKHJlc3BvbnNlKSlcbiAgfVxufVxuXG4vLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jZmV0Y2gtZmluYWxlXG5mdW5jdGlvbiBmZXRjaEZpbmFsZSAoZmV0Y2hQYXJhbXMsIHJlc3BvbnNlKSB7XG4gIC8vIDEuIExldCB0aW1pbmdJbmZvIGJlIGZldGNoUGFyYW1zXHUyMDE5cyB0aW1pbmcgaW5mby5cbiAgbGV0IHRpbWluZ0luZm8gPSBmZXRjaFBhcmFtcy50aW1pbmdJbmZvXG5cbiAgLy8gMi4gSWYgcmVzcG9uc2UgaXMgbm90IGEgbmV0d29yayBlcnJvciBhbmQgZmV0Y2hQYXJhbXNcdTIwMTlzIHJlcXVlc3RcdTIwMTlzIGNsaWVudCBpcyBhIHNlY3VyZSBjb250ZXh0LFxuICAvLyAgICB0aGVuIHNldCB0aW1pbmdJbmZvXHUyMDE5cyBzZXJ2ZXItdGltaW5nIGhlYWRlcnMgdG8gdGhlIHJlc3VsdCBvZiBnZXR0aW5nLCBkZWNvZGluZywgYW5kIHNwbGl0dGluZ1xuICAvLyAgICBgU2VydmVyLVRpbWluZ2AgZnJvbSByZXNwb25zZVx1MjAxOXMgaW50ZXJuYWwgcmVzcG9uc2VcdTIwMTlzIGhlYWRlciBsaXN0LlxuICAvLyBUT0RPXG5cbiAgLy8gMy4gTGV0IHByb2Nlc3NSZXNwb25zZUVuZE9mQm9keSBiZSB0aGUgZm9sbG93aW5nIHN0ZXBzOlxuICBjb25zdCBwcm9jZXNzUmVzcG9uc2VFbmRPZkJvZHkgPSAoKSA9PiB7XG4gICAgLy8gMS4gTGV0IHVuc2FmZUVuZFRpbWUgYmUgdGhlIHVuc2FmZSBzaGFyZWQgY3VycmVudCB0aW1lLlxuICAgIGNvbnN0IHVuc2FmZUVuZFRpbWUgPSBEYXRlLm5vdygpIC8vID9cblxuICAgIC8vIDIuIElmIGZldGNoUGFyYW1zXHUyMDE5cyByZXF1ZXN0XHUyMDE5cyBkZXN0aW5hdGlvbiBpcyBcImRvY3VtZW50XCIsIHRoZW4gc2V0IGZldGNoUGFyYW1zXHUyMDE5cyBjb250cm9sbGVyXHUyMDE5c1xuICAgIC8vICAgIGZ1bGwgdGltaW5nIGluZm8gdG8gZmV0Y2hQYXJhbXNcdTIwMTlzIHRpbWluZyBpbmZvLlxuICAgIGlmIChmZXRjaFBhcmFtcy5yZXF1ZXN0LmRlc3RpbmF0aW9uID09PSAnZG9jdW1lbnQnKSB7XG4gICAgICBmZXRjaFBhcmFtcy5jb250cm9sbGVyLmZ1bGxUaW1pbmdJbmZvID0gdGltaW5nSW5mb1xuICAgIH1cblxuICAgIC8vIDMuIFNldCBmZXRjaFBhcmFtc1x1MjAxOXMgY29udHJvbGxlclx1MjAxOXMgcmVwb3J0IHRpbWluZyBzdGVwcyB0byB0aGUgZm9sbG93aW5nIHN0ZXBzIGdpdmVuIGEgZ2xvYmFsIG9iamVjdCBnbG9iYWw6XG4gICAgZmV0Y2hQYXJhbXMuY29udHJvbGxlci5yZXBvcnRUaW1pbmdTdGVwcyA9ICgpID0+IHtcbiAgICAgIC8vIDEuIElmIGZldGNoUGFyYW1zXHUyMDE5cyByZXF1ZXN0XHUyMDE5cyBVUkxcdTIwMTlzIHNjaGVtZSBpcyBub3QgYW4gSFRUUChTKSBzY2hlbWUsIHRoZW4gcmV0dXJuLlxuICAgICAgaWYgKGZldGNoUGFyYW1zLnJlcXVlc3QudXJsLnByb3RvY29sICE9PSAnaHR0cHM6Jykge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgLy8gMi4gU2V0IHRpbWluZ0luZm9cdTIwMTlzIGVuZCB0aW1lIHRvIHRoZSByZWxhdGl2ZSBoaWdoIHJlc29sdXRpb24gdGltZSBnaXZlbiB1bnNhZmVFbmRUaW1lIGFuZCBnbG9iYWwuXG4gICAgICB0aW1pbmdJbmZvLmVuZFRpbWUgPSB1bnNhZmVFbmRUaW1lXG5cbiAgICAgIC8vIDMuIExldCBjYWNoZVN0YXRlIGJlIHJlc3BvbnNlXHUyMDE5cyBjYWNoZSBzdGF0ZS5cbiAgICAgIGxldCBjYWNoZVN0YXRlID0gcmVzcG9uc2UuY2FjaGVTdGF0ZVxuXG4gICAgICAvLyA0LiBMZXQgYm9keUluZm8gYmUgcmVzcG9uc2VcdTIwMTlzIGJvZHkgaW5mby5cbiAgICAgIGNvbnN0IGJvZHlJbmZvID0gcmVzcG9uc2UuYm9keUluZm9cblxuICAgICAgLy8gNS4gSWYgcmVzcG9uc2VcdTIwMTlzIHRpbWluZyBhbGxvdyBwYXNzZWQgZmxhZyBpcyBub3Qgc2V0LCB0aGVuIHNldCB0aW1pbmdJbmZvIHRvIHRoZSByZXN1bHQgb2YgY3JlYXRpbmcgYW5cbiAgICAgIC8vICAgIG9wYXF1ZSB0aW1pbmcgaW5mbyBmb3IgdGltaW5nSW5mbyBhbmQgc2V0IGNhY2hlU3RhdGUgdG8gdGhlIGVtcHR5IHN0cmluZy5cbiAgICAgIGlmICghcmVzcG9uc2UudGltaW5nQWxsb3dQYXNzZWQpIHtcbiAgICAgICAgdGltaW5nSW5mbyA9IGNyZWF0ZU9wYXF1ZVRpbWluZ0luZm8odGltaW5nSW5mbylcblxuICAgICAgICBjYWNoZVN0YXRlID0gJydcbiAgICAgIH1cblxuICAgICAgLy8gNi4gTGV0IHJlc3BvbnNlU3RhdHVzIGJlIDAuXG4gICAgICBsZXQgcmVzcG9uc2VTdGF0dXMgPSAwXG5cbiAgICAgIC8vIDcuIElmIGZldGNoUGFyYW1zXHUyMDE5cyByZXF1ZXN0XHUyMDE5cyBtb2RlIGlzIG5vdCBcIm5hdmlnYXRlXCIgb3IgcmVzcG9uc2VcdTIwMTlzIGhhcy1jcm9zcy1vcmlnaW4tcmVkaXJlY3RzIGlzIGZhbHNlOlxuICAgICAgaWYgKGZldGNoUGFyYW1zLnJlcXVlc3QubW9kZSAhPT0gJ25hdmlnYXRvcicgfHwgIXJlc3BvbnNlLmhhc0Nyb3NzT3JpZ2luUmVkaXJlY3RzKSB7XG4gICAgICAgIC8vIDEuIFNldCByZXNwb25zZVN0YXR1cyB0byByZXNwb25zZVx1MjAxOXMgc3RhdHVzLlxuICAgICAgICByZXNwb25zZVN0YXR1cyA9IHJlc3BvbnNlLnN0YXR1c1xuXG4gICAgICAgIC8vIDIuIExldCBtaW1lVHlwZSBiZSB0aGUgcmVzdWx0IG9mIGV4dHJhY3RpbmcgYSBNSU1FIHR5cGUgZnJvbSByZXNwb25zZVx1MjAxOXMgaGVhZGVyIGxpc3QuXG4gICAgICAgIGNvbnN0IG1pbWVUeXBlID0gZXh0cmFjdE1pbWVUeXBlKHJlc3BvbnNlLmhlYWRlcnNMaXN0KVxuXG4gICAgICAgIC8vIDMuIElmIG1pbWVUeXBlIGlzIG5vdCBmYWlsdXJlLCB0aGVuIHNldCBib2R5SW5mb1x1MjAxOXMgY29udGVudCB0eXBlIHRvIHRoZSByZXN1bHQgb2YgbWluaW1pemluZyBhIHN1cHBvcnRlZCBNSU1FIHR5cGUgZ2l2ZW4gbWltZVR5cGUuXG4gICAgICAgIGlmIChtaW1lVHlwZSAhPT0gJ2ZhaWx1cmUnKSB7XG4gICAgICAgICAgYm9keUluZm8uY29udGVudFR5cGUgPSBtaW5pbWl6ZVN1cHBvcnRlZE1pbWVUeXBlKG1pbWVUeXBlKVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIDguIElmIGZldGNoUGFyYW1zXHUyMDE5cyByZXF1ZXN0XHUyMDE5cyBpbml0aWF0b3IgdHlwZSBpcyBub24tbnVsbCwgdGhlbiBtYXJrIHJlc291cmNlIHRpbWluZyBnaXZlbiB0aW1pbmdJbmZvLFxuICAgICAgLy8gICAgZmV0Y2hQYXJhbXNcdTIwMTlzIHJlcXVlc3RcdTIwMTlzIFVSTCwgZmV0Y2hQYXJhbXNcdTIwMTlzIHJlcXVlc3RcdTIwMTlzIGluaXRpYXRvciB0eXBlLCBnbG9iYWwsIGNhY2hlU3RhdGUsIGJvZHlJbmZvLFxuICAgICAgLy8gICAgYW5kIHJlc3BvbnNlU3RhdHVzLlxuICAgICAgaWYgKGZldGNoUGFyYW1zLnJlcXVlc3QuaW5pdGlhdG9yVHlwZSAhPSBudWxsKSB7XG4gICAgICAgIC8vIFRPRE86IHVwZGF0ZSBtYXJrcmVzb3VyY2V0aW1pbmdcbiAgICAgICAgbWFya1Jlc291cmNlVGltaW5nKHRpbWluZ0luZm8sIGZldGNoUGFyYW1zLnJlcXVlc3QudXJsLmhyZWYsIGZldGNoUGFyYW1zLnJlcXVlc3QuaW5pdGlhdG9yVHlwZSwgZ2xvYmFsVGhpcywgY2FjaGVTdGF0ZSwgYm9keUluZm8sIHJlc3BvbnNlU3RhdHVzKVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIDQuIExldCBwcm9jZXNzUmVzcG9uc2VFbmRPZkJvZHlUYXNrIGJlIHRoZSBmb2xsb3dpbmcgc3RlcHM6XG4gICAgY29uc3QgcHJvY2Vzc1Jlc3BvbnNlRW5kT2ZCb2R5VGFzayA9ICgpID0+IHtcbiAgICAgIC8vIDEuIFNldCBmZXRjaFBhcmFtc1x1MjAxOXMgcmVxdWVzdFx1MjAxOXMgZG9uZSBmbGFnLlxuICAgICAgZmV0Y2hQYXJhbXMucmVxdWVzdC5kb25lID0gdHJ1ZVxuXG4gICAgICAvLyAyLiBJZiBmZXRjaFBhcmFtc1x1MjAxOXMgcHJvY2VzcyByZXNwb25zZSBlbmQtb2YtYm9keSBpcyBub24tbnVsbCwgdGhlbiBydW4gZmV0Y2hQYXJhbXNcdTIwMTlzIHByb2Nlc3NcbiAgICAgIC8vICAgIHJlc3BvbnNlIGVuZC1vZi1ib2R5IGdpdmVuIHJlc3BvbnNlLlxuICAgICAgaWYgKGZldGNoUGFyYW1zLnByb2Nlc3NSZXNwb25zZUVuZE9mQm9keSAhPSBudWxsKSB7XG4gICAgICAgIHF1ZXVlTWljcm90YXNrKCgpID0+IGZldGNoUGFyYW1zLnByb2Nlc3NSZXNwb25zZUVuZE9mQm9keShyZXNwb25zZSkpXG4gICAgICB9XG5cbiAgICAgIC8vIDMuIElmIGZldGNoUGFyYW1zXHUyMDE5cyByZXF1ZXN0XHUyMDE5cyBpbml0aWF0b3IgdHlwZSBpcyBub24tbnVsbCBhbmQgZmV0Y2hQYXJhbXNcdTIwMTlzIHJlcXVlc3RcdTIwMTlzIGNsaWVudFx1MjAxOXNcbiAgICAgIC8vICAgIGdsb2JhbCBvYmplY3QgaXMgZmV0Y2hQYXJhbXNcdTIwMTlzIHRhc2sgZGVzdGluYXRpb24sIHRoZW4gcnVuIGZldGNoUGFyYW1zXHUyMDE5cyBjb250cm9sbGVyXHUyMDE5cyByZXBvcnRcbiAgICAgIC8vICAgIHRpbWluZyBzdGVwcyBnaXZlbiBmZXRjaFBhcmFtc1x1MjAxOXMgcmVxdWVzdFx1MjAxOXMgY2xpZW50XHUyMDE5cyBnbG9iYWwgb2JqZWN0LlxuICAgICAgaWYgKGZldGNoUGFyYW1zLnJlcXVlc3QuaW5pdGlhdG9yVHlwZSAhPSBudWxsKSB7XG4gICAgICAgIGZldGNoUGFyYW1zLmNvbnRyb2xsZXIucmVwb3J0VGltaW5nU3RlcHMoKVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIDUuIFF1ZXVlIGEgZmV0Y2ggdGFzayB0byBydW4gcHJvY2Vzc1Jlc3BvbnNlRW5kT2ZCb2R5VGFzayB3aXRoIGZldGNoUGFyYW1zXHUyMDE5cyB0YXNrIGRlc3RpbmF0aW9uXG4gICAgcXVldWVNaWNyb3Rhc2soKCkgPT4gcHJvY2Vzc1Jlc3BvbnNlRW5kT2ZCb2R5VGFzaygpKVxuICB9XG5cbiAgLy8gNC4gSWYgZmV0Y2hQYXJhbXNcdTIwMTlzIHByb2Nlc3MgcmVzcG9uc2UgaXMgbm9uLW51bGwsIHRoZW4gcXVldWUgYSBmZXRjaCB0YXNrIHRvIHJ1biBmZXRjaFBhcmFtc1x1MjAxOXNcbiAgLy8gICAgcHJvY2VzcyByZXNwb25zZSBnaXZlbiByZXNwb25zZSwgd2l0aCBmZXRjaFBhcmFtc1x1MjAxOXMgdGFzayBkZXN0aW5hdGlvbi5cbiAgaWYgKGZldGNoUGFyYW1zLnByb2Nlc3NSZXNwb25zZSAhPSBudWxsKSB7XG4gICAgcXVldWVNaWNyb3Rhc2soKCkgPT4ge1xuICAgICAgZmV0Y2hQYXJhbXMucHJvY2Vzc1Jlc3BvbnNlKHJlc3BvbnNlKVxuICAgICAgZmV0Y2hQYXJhbXMucHJvY2Vzc1Jlc3BvbnNlID0gbnVsbFxuICAgIH0pXG4gIH1cblxuICAvLyA1LiBMZXQgaW50ZXJuYWxSZXNwb25zZSBiZSByZXNwb25zZSwgaWYgcmVzcG9uc2UgaXMgYSBuZXR3b3JrIGVycm9yOyBvdGhlcndpc2UgcmVzcG9uc2VcdTIwMTlzIGludGVybmFsIHJlc3BvbnNlLlxuICBjb25zdCBpbnRlcm5hbFJlc3BvbnNlID0gcmVzcG9uc2UudHlwZSA9PT0gJ2Vycm9yJyA/IHJlc3BvbnNlIDogKHJlc3BvbnNlLmludGVybmFsUmVzcG9uc2UgPz8gcmVzcG9uc2UpXG5cbiAgLy8gNi4gSWYgaW50ZXJuYWxSZXNwb25zZVx1MjAxOXMgYm9keSBpcyBudWxsLCB0aGVuIHJ1biBwcm9jZXNzUmVzcG9uc2VFbmRPZkJvZHkuXG4gIC8vIDcuIE90aGVyd2lzZTpcbiAgaWYgKGludGVybmFsUmVzcG9uc2UuYm9keSA9PSBudWxsKSB7XG4gICAgcHJvY2Vzc1Jlc3BvbnNlRW5kT2ZCb2R5KClcbiAgfSBlbHNlIHtcbiAgICAvLyBtY29sbGluYTogYWxsIHRoZSBmb2xsb3dpbmcgc3RlcHMgb2YgdGhlIHNwZWNzIGFyZSBza2lwcGVkLlxuICAgIC8vIFRoZSBpbnRlcm5hbCB0cmFuc2Zvcm0gc3RyZWFtIGlzIG5vdCBuZWVkZWQuXG4gICAgLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvdW5kaWNpL3B1bGwvMzA5MyNpc3N1ZWNvbW1lbnQtMjA1MDE5ODU0MVxuXG4gICAgLy8gMS4gTGV0IHRyYW5zZm9ybVN0cmVhbSBiZSBhIG5ldyBUcmFuc2Zvcm1TdHJlYW0uXG4gICAgLy8gMi4gTGV0IGlkZW50aXR5VHJhbnNmb3JtQWxnb3JpdGhtIGJlIGFuIGFsZ29yaXRobSB3aGljaCwgZ2l2ZW4gY2h1bmssIGVucXVldWVzIGNodW5rIGluIHRyYW5zZm9ybVN0cmVhbS5cbiAgICAvLyAzLiBTZXQgdXAgdHJhbnNmb3JtU3RyZWFtIHdpdGggdHJhbnNmb3JtQWxnb3JpdGhtIHNldCB0byBpZGVudGl0eVRyYW5zZm9ybUFsZ29yaXRobSBhbmQgZmx1c2hBbGdvcml0aG1cbiAgICAvLyAgICBzZXQgdG8gcHJvY2Vzc1Jlc3BvbnNlRW5kT2ZCb2R5LlxuICAgIC8vIDQuIFNldCBpbnRlcm5hbFJlc3BvbnNlXHUyMDE5cyBib2R5XHUyMDE5cyBzdHJlYW0gdG8gdGhlIHJlc3VsdCBvZiBpbnRlcm5hbFJlc3BvbnNlXHUyMDE5cyBib2R5XHUyMDE5cyBzdHJlYW0gcGlwZWQgdGhyb3VnaCB0cmFuc2Zvcm1TdHJlYW0uXG5cbiAgICBmaW5pc2hlZChpbnRlcm5hbFJlc3BvbnNlLmJvZHkuc3RyZWFtLCAoKSA9PiB7XG4gICAgICBwcm9jZXNzUmVzcG9uc2VFbmRPZkJvZHkoKVxuICAgIH0pXG4gIH1cbn1cblxuLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2h0dHAtZmV0Y2hcbmFzeW5jIGZ1bmN0aW9uIGh0dHBGZXRjaCAoZmV0Y2hQYXJhbXMpIHtcbiAgLy8gMS4gTGV0IHJlcXVlc3QgYmUgZmV0Y2hQYXJhbXNcdTIwMTlzIHJlcXVlc3QuXG4gIGNvbnN0IHJlcXVlc3QgPSBmZXRjaFBhcmFtcy5yZXF1ZXN0XG5cbiAgLy8gMi4gTGV0IHJlc3BvbnNlIGJlIG51bGwuXG4gIGxldCByZXNwb25zZSA9IG51bGxcblxuICAvLyAzLiBMZXQgYWN0dWFsUmVzcG9uc2UgYmUgbnVsbC5cbiAgbGV0IGFjdHVhbFJlc3BvbnNlID0gbnVsbFxuXG4gIC8vIDQuIExldCB0aW1pbmdJbmZvIGJlIGZldGNoUGFyYW1zXHUyMDE5cyB0aW1pbmcgaW5mby5cbiAgY29uc3QgdGltaW5nSW5mbyA9IGZldGNoUGFyYW1zLnRpbWluZ0luZm9cblxuICAvLyA1LiBJZiByZXF1ZXN0XHUyMDE5cyBzZXJ2aWNlLXdvcmtlcnMgbW9kZSBpcyBcImFsbFwiLCB0aGVuOlxuICBpZiAocmVxdWVzdC5zZXJ2aWNlV29ya2VycyA9PT0gJ2FsbCcpIHtcbiAgICAvLyBUT0RPXG4gIH1cblxuICAvLyA2LiBJZiByZXNwb25zZSBpcyBudWxsLCB0aGVuOlxuICBpZiAocmVzcG9uc2UgPT09IG51bGwpIHtcbiAgICAvLyAxLiBJZiBtYWtlQ09SU1ByZWZsaWdodCBpcyB0cnVlIGFuZCBvbmUgb2YgdGhlc2UgY29uZGl0aW9ucyBpcyB0cnVlOlxuICAgIC8vIFRPRE9cblxuICAgIC8vIDIuIElmIHJlcXVlc3RcdTIwMTlzIHJlZGlyZWN0IG1vZGUgaXMgXCJmb2xsb3dcIiwgdGhlbiBzZXQgcmVxdWVzdFx1MjAxOXNcbiAgICAvLyBzZXJ2aWNlLXdvcmtlcnMgbW9kZSB0byBcIm5vbmVcIi5cbiAgICBpZiAocmVxdWVzdC5yZWRpcmVjdCA9PT0gJ2ZvbGxvdycpIHtcbiAgICAgIHJlcXVlc3Quc2VydmljZVdvcmtlcnMgPSAnbm9uZSdcbiAgICB9XG5cbiAgICAvLyAzLiBTZXQgcmVzcG9uc2UgYW5kIGFjdHVhbFJlc3BvbnNlIHRvIHRoZSByZXN1bHQgb2YgcnVubmluZ1xuICAgIC8vIEhUVFAtbmV0d29yay1vci1jYWNoZSBmZXRjaCBnaXZlbiBmZXRjaFBhcmFtcy5cbiAgICBhY3R1YWxSZXNwb25zZSA9IHJlc3BvbnNlID0gYXdhaXQgaHR0cE5ldHdvcmtPckNhY2hlRmV0Y2goZmV0Y2hQYXJhbXMpXG5cbiAgICAvLyA0LiBJZiByZXF1ZXN0XHUyMDE5cyByZXNwb25zZSB0YWludGluZyBpcyBcImNvcnNcIiBhbmQgYSBDT1JTIGNoZWNrXG4gICAgLy8gZm9yIHJlcXVlc3QgYW5kIHJlc3BvbnNlIHJldHVybnMgZmFpbHVyZSwgdGhlbiByZXR1cm4gYSBuZXR3b3JrIGVycm9yLlxuICAgIGlmIChcbiAgICAgIHJlcXVlc3QucmVzcG9uc2VUYWludGluZyA9PT0gJ2NvcnMnICYmXG4gICAgICBjb3JzQ2hlY2socmVxdWVzdCwgcmVzcG9uc2UpID09PSAnZmFpbHVyZSdcbiAgICApIHtcbiAgICAgIHJldHVybiBtYWtlTmV0d29ya0Vycm9yKCdjb3JzIGZhaWx1cmUnKVxuICAgIH1cblxuICAgIC8vIDUuIElmIHRoZSBUQU8gY2hlY2sgZm9yIHJlcXVlc3QgYW5kIHJlc3BvbnNlIHJldHVybnMgZmFpbHVyZSwgdGhlbiBzZXRcbiAgICAvLyByZXF1ZXN0XHUyMDE5cyB0aW1pbmcgYWxsb3cgZmFpbGVkIGZsYWcuXG4gICAgaWYgKFRBT0NoZWNrKHJlcXVlc3QsIHJlc3BvbnNlKSA9PT0gJ2ZhaWx1cmUnKSB7XG4gICAgICByZXF1ZXN0LnRpbWluZ0FsbG93RmFpbGVkID0gdHJ1ZVxuICAgIH1cbiAgfVxuXG4gIC8vIDcuIElmIGVpdGhlciByZXF1ZXN0XHUyMDE5cyByZXNwb25zZSB0YWludGluZyBvciByZXNwb25zZVx1MjAxOXMgdHlwZVxuICAvLyBpcyBcIm9wYXF1ZVwiLCBhbmQgdGhlIGNyb3NzLW9yaWdpbiByZXNvdXJjZSBwb2xpY3kgY2hlY2sgd2l0aFxuICAvLyByZXF1ZXN0XHUyMDE5cyBvcmlnaW4sIHJlcXVlc3RcdTIwMTlzIGNsaWVudCwgcmVxdWVzdFx1MjAxOXMgZGVzdGluYXRpb24sXG4gIC8vIGFuZCBhY3R1YWxSZXNwb25zZSByZXR1cm5zIGJsb2NrZWQsIHRoZW4gcmV0dXJuIGEgbmV0d29yayBlcnJvci5cbiAgaWYgKFxuICAgIChyZXF1ZXN0LnJlc3BvbnNlVGFpbnRpbmcgPT09ICdvcGFxdWUnIHx8IHJlc3BvbnNlLnR5cGUgPT09ICdvcGFxdWUnKSAmJlxuICAgIGNyb3NzT3JpZ2luUmVzb3VyY2VQb2xpY3lDaGVjayhcbiAgICAgIHJlcXVlc3Qub3JpZ2luLFxuICAgICAgcmVxdWVzdC5jbGllbnQsXG4gICAgICByZXF1ZXN0LmRlc3RpbmF0aW9uLFxuICAgICAgYWN0dWFsUmVzcG9uc2VcbiAgICApID09PSAnYmxvY2tlZCdcbiAgKSB7XG4gICAgcmV0dXJuIG1ha2VOZXR3b3JrRXJyb3IoJ2Jsb2NrZWQnKVxuICB9XG5cbiAgLy8gOC4gSWYgYWN0dWFsUmVzcG9uc2VcdTIwMTlzIHN0YXR1cyBpcyBhIHJlZGlyZWN0IHN0YXR1cywgdGhlbjpcbiAgaWYgKHJlZGlyZWN0U3RhdHVzU2V0LmhhcyhhY3R1YWxSZXNwb25zZS5zdGF0dXMpKSB7XG4gICAgLy8gMS4gSWYgYWN0dWFsUmVzcG9uc2VcdTIwMTlzIHN0YXR1cyBpcyBub3QgMzAzLCByZXF1ZXN0XHUyMDE5cyBib2R5IGlzIG5vdCBudWxsLFxuICAgIC8vIGFuZCB0aGUgY29ubmVjdGlvbiB1c2VzIEhUVFAvMiwgdGhlbiB1c2VyIGFnZW50cyBtYXksIGFuZCBhcmUgZXZlblxuICAgIC8vIGVuY291cmFnZWQgdG8sIHRyYW5zbWl0IGFuIFJTVF9TVFJFQU0gZnJhbWUuXG4gICAgLy8gU2VlLCBodHRwczovL2dpdGh1Yi5jb20vd2hhdHdnL2ZldGNoL2lzc3Vlcy8xMjg4XG4gICAgaWYgKHJlcXVlc3QucmVkaXJlY3QgIT09ICdtYW51YWwnKSB7XG4gICAgICBmZXRjaFBhcmFtcy5jb250cm9sbGVyLmNvbm5lY3Rpb24uZGVzdHJveSh1bmRlZmluZWQsIGZhbHNlKVxuICAgIH1cblxuICAgIC8vIDIuIFN3aXRjaCBvbiByZXF1ZXN0XHUyMDE5cyByZWRpcmVjdCBtb2RlOlxuICAgIGlmIChyZXF1ZXN0LnJlZGlyZWN0ID09PSAnZXJyb3InKSB7XG4gICAgICAvLyBTZXQgcmVzcG9uc2UgdG8gYSBuZXR3b3JrIGVycm9yLlxuICAgICAgcmVzcG9uc2UgPSBtYWtlTmV0d29ya0Vycm9yKCd1bmV4cGVjdGVkIHJlZGlyZWN0JylcbiAgICB9IGVsc2UgaWYgKHJlcXVlc3QucmVkaXJlY3QgPT09ICdtYW51YWwnKSB7XG4gICAgICAvLyBTZXQgcmVzcG9uc2UgdG8gYW4gb3BhcXVlLXJlZGlyZWN0IGZpbHRlcmVkIHJlc3BvbnNlIHdob3NlIGludGVybmFsXG4gICAgICAvLyByZXNwb25zZSBpcyBhY3R1YWxSZXNwb25zZS5cbiAgICAgIC8vIE5PVEUoc3BlYyk6IE9uIHRoZSB3ZWIgdGhpcyB3b3VsZCByZXR1cm4gYW4gYG9wYXF1ZXJlZGlyZWN0YCByZXNwb25zZSxcbiAgICAgIC8vIGJ1dCB0aGF0IGRvZXNuJ3QgbWFrZSBzZW5zZSBzZXJ2ZXIgc2lkZS5cbiAgICAgIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vbm9kZWpzL3VuZGljaS9pc3N1ZXMvMTE5My5cbiAgICAgIHJlc3BvbnNlID0gYWN0dWFsUmVzcG9uc2VcbiAgICB9IGVsc2UgaWYgKHJlcXVlc3QucmVkaXJlY3QgPT09ICdmb2xsb3cnKSB7XG4gICAgICAvLyBTZXQgcmVzcG9uc2UgdG8gdGhlIHJlc3VsdCBvZiBydW5uaW5nIEhUVFAtcmVkaXJlY3QgZmV0Y2ggZ2l2ZW5cbiAgICAgIC8vIGZldGNoUGFyYW1zIGFuZCByZXNwb25zZS5cbiAgICAgIHJlc3BvbnNlID0gYXdhaXQgaHR0cFJlZGlyZWN0RmV0Y2goZmV0Y2hQYXJhbXMsIHJlc3BvbnNlKVxuICAgIH0gZWxzZSB7XG4gICAgICBhc3NlcnQoZmFsc2UpXG4gICAgfVxuICB9XG5cbiAgLy8gOS4gU2V0IHJlc3BvbnNlXHUyMDE5cyB0aW1pbmcgaW5mbyB0byB0aW1pbmdJbmZvLlxuICByZXNwb25zZS50aW1pbmdJbmZvID0gdGltaW5nSW5mb1xuXG4gIC8vIDEwLiBSZXR1cm4gcmVzcG9uc2UuXG4gIHJldHVybiByZXNwb25zZVxufVxuXG4vLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jaHR0cC1yZWRpcmVjdC1mZXRjaFxuZnVuY3Rpb24gaHR0cFJlZGlyZWN0RmV0Y2ggKGZldGNoUGFyYW1zLCByZXNwb25zZSkge1xuICAvLyAxLiBMZXQgcmVxdWVzdCBiZSBmZXRjaFBhcmFtc1x1MjAxOXMgcmVxdWVzdC5cbiAgY29uc3QgcmVxdWVzdCA9IGZldGNoUGFyYW1zLnJlcXVlc3RcblxuICAvLyAyLiBMZXQgYWN0dWFsUmVzcG9uc2UgYmUgcmVzcG9uc2UsIGlmIHJlc3BvbnNlIGlzIG5vdCBhIGZpbHRlcmVkIHJlc3BvbnNlLFxuICAvLyBhbmQgcmVzcG9uc2VcdTIwMTlzIGludGVybmFsIHJlc3BvbnNlIG90aGVyd2lzZS5cbiAgY29uc3QgYWN0dWFsUmVzcG9uc2UgPSByZXNwb25zZS5pbnRlcm5hbFJlc3BvbnNlXG4gICAgPyByZXNwb25zZS5pbnRlcm5hbFJlc3BvbnNlXG4gICAgOiByZXNwb25zZVxuXG4gIC8vIDMuIExldCBsb2NhdGlvblVSTCBiZSBhY3R1YWxSZXNwb25zZVx1MjAxOXMgbG9jYXRpb24gVVJMIGdpdmVuIHJlcXVlc3RcdTIwMTlzIGN1cnJlbnRcbiAgLy8gVVJMXHUyMDE5cyBmcmFnbWVudC5cbiAgbGV0IGxvY2F0aW9uVVJMXG5cbiAgdHJ5IHtcbiAgICBsb2NhdGlvblVSTCA9IHJlc3BvbnNlTG9jYXRpb25VUkwoXG4gICAgICBhY3R1YWxSZXNwb25zZSxcbiAgICAgIHJlcXVlc3RDdXJyZW50VVJMKHJlcXVlc3QpLmhhc2hcbiAgICApXG5cbiAgICAvLyA0LiBJZiBsb2NhdGlvblVSTCBpcyBudWxsLCB0aGVuIHJldHVybiByZXNwb25zZS5cbiAgICBpZiAobG9jYXRpb25VUkwgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIHJlc3BvbnNlXG4gICAgfVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICAvLyA1LiBJZiBsb2NhdGlvblVSTCBpcyBmYWlsdXJlLCB0aGVuIHJldHVybiBhIG5ldHdvcmsgZXJyb3IuXG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShtYWtlTmV0d29ya0Vycm9yKGVycikpXG4gIH1cblxuICAvLyA2LiBJZiBsb2NhdGlvblVSTFx1MjAxOXMgc2NoZW1lIGlzIG5vdCBhbiBIVFRQKFMpIHNjaGVtZSwgdGhlbiByZXR1cm4gYSBuZXR3b3JrXG4gIC8vIGVycm9yLlxuICBpZiAoIXVybElzSHR0cEh0dHBzU2NoZW1lKGxvY2F0aW9uVVJMKSkge1xuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUobWFrZU5ldHdvcmtFcnJvcignVVJMIHNjaGVtZSBtdXN0IGJlIGEgSFRUUChTKSBzY2hlbWUnKSlcbiAgfVxuXG4gIC8vIDcuIElmIHJlcXVlc3RcdTIwMTlzIHJlZGlyZWN0IGNvdW50IGlzIDIwLCB0aGVuIHJldHVybiBhIG5ldHdvcmsgZXJyb3IuXG4gIGlmIChyZXF1ZXN0LnJlZGlyZWN0Q291bnQgPT09IDIwKSB7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShtYWtlTmV0d29ya0Vycm9yKCdyZWRpcmVjdCBjb3VudCBleGNlZWRlZCcpKVxuICB9XG5cbiAgLy8gOC4gSW5jcmVhc2UgcmVxdWVzdFx1MjAxOXMgcmVkaXJlY3QgY291bnQgYnkgMS5cbiAgcmVxdWVzdC5yZWRpcmVjdENvdW50ICs9IDFcblxuICAvLyA5LiBJZiByZXF1ZXN0XHUyMDE5cyBtb2RlIGlzIFwiY29yc1wiLCBsb2NhdGlvblVSTCBpbmNsdWRlcyBjcmVkZW50aWFscywgYW5kXG4gIC8vIHJlcXVlc3RcdTIwMTlzIG9yaWdpbiBpcyBub3Qgc2FtZSBvcmlnaW4gd2l0aCBsb2NhdGlvblVSTFx1MjAxOXMgb3JpZ2luLCB0aGVuIHJldHVyblxuICAvLyAgYSBuZXR3b3JrIGVycm9yLlxuICBpZiAoXG4gICAgcmVxdWVzdC5tb2RlID09PSAnY29ycycgJiZcbiAgICAobG9jYXRpb25VUkwudXNlcm5hbWUgfHwgbG9jYXRpb25VUkwucGFzc3dvcmQpICYmXG4gICAgIXNhbWVPcmlnaW4ocmVxdWVzdCwgbG9jYXRpb25VUkwpXG4gICkge1xuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUobWFrZU5ldHdvcmtFcnJvcignY3Jvc3Mgb3JpZ2luIG5vdCBhbGxvd2VkIGZvciByZXF1ZXN0IG1vZGUgXCJjb3JzXCInKSlcbiAgfVxuXG4gIC8vIDEwLiBJZiByZXF1ZXN0XHUyMDE5cyByZXNwb25zZSB0YWludGluZyBpcyBcImNvcnNcIiBhbmQgbG9jYXRpb25VUkwgaW5jbHVkZXNcbiAgLy8gY3JlZGVudGlhbHMsIHRoZW4gcmV0dXJuIGEgbmV0d29yayBlcnJvci5cbiAgaWYgKFxuICAgIHJlcXVlc3QucmVzcG9uc2VUYWludGluZyA9PT0gJ2NvcnMnICYmXG4gICAgKGxvY2F0aW9uVVJMLnVzZXJuYW1lIHx8IGxvY2F0aW9uVVJMLnBhc3N3b3JkKVxuICApIHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG1ha2VOZXR3b3JrRXJyb3IoXG4gICAgICAnVVJMIGNhbm5vdCBjb250YWluIGNyZWRlbnRpYWxzIGZvciByZXF1ZXN0IG1vZGUgXCJjb3JzXCInXG4gICAgKSlcbiAgfVxuXG4gIC8vIDExLiBJZiBhY3R1YWxSZXNwb25zZVx1MjAxOXMgc3RhdHVzIGlzIG5vdCAzMDMsIHJlcXVlc3RcdTIwMTlzIGJvZHkgaXMgbm9uLW51bGwsXG4gIC8vIGFuZCByZXF1ZXN0XHUyMDE5cyBib2R5XHUyMDE5cyBzb3VyY2UgaXMgbnVsbCwgdGhlbiByZXR1cm4gYSBuZXR3b3JrIGVycm9yLlxuICBpZiAoXG4gICAgYWN0dWFsUmVzcG9uc2Uuc3RhdHVzICE9PSAzMDMgJiZcbiAgICByZXF1ZXN0LmJvZHkgIT0gbnVsbCAmJlxuICAgIHJlcXVlc3QuYm9keS5zb3VyY2UgPT0gbnVsbFxuICApIHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG1ha2VOZXR3b3JrRXJyb3IoKSlcbiAgfVxuXG4gIC8vIDEyLiBJZiBvbmUgb2YgdGhlIGZvbGxvd2luZyBpcyB0cnVlXG4gIC8vIC0gYWN0dWFsUmVzcG9uc2VcdTIwMTlzIHN0YXR1cyBpcyAzMDEgb3IgMzAyIGFuZCByZXF1ZXN0XHUyMDE5cyBtZXRob2QgaXMgYFBPU1RgXG4gIC8vIC0gYWN0dWFsUmVzcG9uc2VcdTIwMTlzIHN0YXR1cyBpcyAzMDMgYW5kIHJlcXVlc3RcdTIwMTlzIG1ldGhvZCBpcyBub3QgYEdFVGAgb3IgYEhFQURgXG4gIGlmIChcbiAgICAoWzMwMSwgMzAyXS5pbmNsdWRlcyhhY3R1YWxSZXNwb25zZS5zdGF0dXMpICYmIHJlcXVlc3QubWV0aG9kID09PSAnUE9TVCcpIHx8XG4gICAgKGFjdHVhbFJlc3BvbnNlLnN0YXR1cyA9PT0gMzAzICYmXG4gICAgICAhR0VUX09SX0hFQUQuaW5jbHVkZXMocmVxdWVzdC5tZXRob2QpKVxuICApIHtcbiAgICAvLyB0aGVuOlxuICAgIC8vIDEuIFNldCByZXF1ZXN0XHUyMDE5cyBtZXRob2QgdG8gYEdFVGAgYW5kIHJlcXVlc3RcdTIwMTlzIGJvZHkgdG8gbnVsbC5cbiAgICByZXF1ZXN0Lm1ldGhvZCA9ICdHRVQnXG4gICAgcmVxdWVzdC5ib2R5ID0gbnVsbFxuXG4gICAgLy8gMi4gRm9yIGVhY2ggaGVhZGVyTmFtZSBvZiByZXF1ZXN0LWJvZHktaGVhZGVyIG5hbWUsIGRlbGV0ZSBoZWFkZXJOYW1lIGZyb21cbiAgICAvLyByZXF1ZXN0XHUyMDE5cyBoZWFkZXIgbGlzdC5cbiAgICBmb3IgKGNvbnN0IGhlYWRlck5hbWUgb2YgcmVxdWVzdEJvZHlIZWFkZXIpIHtcbiAgICAgIHJlcXVlc3QuaGVhZGVyc0xpc3QuZGVsZXRlKGhlYWRlck5hbWUpXG4gICAgfVxuICB9XG5cbiAgLy8gMTMuIElmIHJlcXVlc3RcdTIwMTlzIGN1cnJlbnQgVVJMXHUyMDE5cyBvcmlnaW4gaXMgbm90IHNhbWUgb3JpZ2luIHdpdGggbG9jYXRpb25VUkxcdTIwMTlzXG4gIC8vICAgICBvcmlnaW4sIHRoZW4gZm9yIGVhY2ggaGVhZGVyTmFtZSBvZiBDT1JTIG5vbi13aWxkY2FyZCByZXF1ZXN0LWhlYWRlciBuYW1lLFxuICAvLyAgICAgZGVsZXRlIGhlYWRlck5hbWUgZnJvbSByZXF1ZXN0XHUyMDE5cyBoZWFkZXIgbGlzdC5cbiAgaWYgKCFzYW1lT3JpZ2luKHJlcXVlc3RDdXJyZW50VVJMKHJlcXVlc3QpLCBsb2NhdGlvblVSTCkpIHtcbiAgICAvLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jY29ycy1ub24td2lsZGNhcmQtcmVxdWVzdC1oZWFkZXItbmFtZVxuICAgIHJlcXVlc3QuaGVhZGVyc0xpc3QuZGVsZXRlKCdhdXRob3JpemF0aW9uJywgdHJ1ZSlcblxuICAgIC8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNhdXRoZW50aWNhdGlvbi1lbnRyaWVzXG4gICAgcmVxdWVzdC5oZWFkZXJzTGlzdC5kZWxldGUoJ3Byb3h5LWF1dGhvcml6YXRpb24nLCB0cnVlKVxuXG4gICAgLy8gXCJDb29raWVcIiBhbmQgXCJIb3N0XCIgYXJlIGZvcmJpZGRlbiByZXF1ZXN0LWhlYWRlcnMsIHdoaWNoIHVuZGljaSBkb2Vzbid0IGltcGxlbWVudC5cbiAgICByZXF1ZXN0LmhlYWRlcnNMaXN0LmRlbGV0ZSgnY29va2llJywgdHJ1ZSlcbiAgICByZXF1ZXN0LmhlYWRlcnNMaXN0LmRlbGV0ZSgnaG9zdCcsIHRydWUpXG4gIH1cblxuICAvLyAxNC4gSWYgcmVxdWVzdFx1MjAxOXMgYm9keSBpcyBub24tbnVsbCwgdGhlbiBzZXQgcmVxdWVzdFx1MjAxOXMgYm9keSB0byB0aGUgZmlyc3QgcmV0dXJuXG4gIC8vIHZhbHVlIG9mIHNhZmVseSBleHRyYWN0aW5nIHJlcXVlc3RcdTIwMTlzIGJvZHlcdTIwMTlzIHNvdXJjZS5cbiAgaWYgKHJlcXVlc3QuYm9keSAhPSBudWxsKSB7XG4gICAgYXNzZXJ0KHJlcXVlc3QuYm9keS5zb3VyY2UgIT0gbnVsbClcbiAgICByZXF1ZXN0LmJvZHkgPSBzYWZlbHlFeHRyYWN0Qm9keShyZXF1ZXN0LmJvZHkuc291cmNlKVswXVxuICB9XG5cbiAgLy8gMTUuIExldCB0aW1pbmdJbmZvIGJlIGZldGNoUGFyYW1zXHUyMDE5cyB0aW1pbmcgaW5mby5cbiAgY29uc3QgdGltaW5nSW5mbyA9IGZldGNoUGFyYW1zLnRpbWluZ0luZm9cblxuICAvLyAxNi4gU2V0IHRpbWluZ0luZm9cdTIwMTlzIHJlZGlyZWN0IGVuZCB0aW1lIGFuZCBwb3N0LXJlZGlyZWN0IHN0YXJ0IHRpbWUgdG8gdGhlXG4gIC8vIGNvYXJzZW5lZCBzaGFyZWQgY3VycmVudCB0aW1lIGdpdmVuIGZldGNoUGFyYW1zXHUyMDE5cyBjcm9zcy1vcmlnaW4gaXNvbGF0ZWRcbiAgLy8gY2FwYWJpbGl0eS5cbiAgdGltaW5nSW5mby5yZWRpcmVjdEVuZFRpbWUgPSB0aW1pbmdJbmZvLnBvc3RSZWRpcmVjdFN0YXJ0VGltZSA9XG4gICAgY29hcnNlbmVkU2hhcmVkQ3VycmVudFRpbWUoZmV0Y2hQYXJhbXMuY3Jvc3NPcmlnaW5Jc29sYXRlZENhcGFiaWxpdHkpXG5cbiAgLy8gMTcuIElmIHRpbWluZ0luZm9cdTIwMTlzIHJlZGlyZWN0IHN0YXJ0IHRpbWUgaXMgMCwgdGhlbiBzZXQgdGltaW5nSW5mb1x1MjAxOXNcbiAgLy8gIHJlZGlyZWN0IHN0YXJ0IHRpbWUgdG8gdGltaW5nSW5mb1x1MjAxOXMgc3RhcnQgdGltZS5cbiAgaWYgKHRpbWluZ0luZm8ucmVkaXJlY3RTdGFydFRpbWUgPT09IDApIHtcbiAgICB0aW1pbmdJbmZvLnJlZGlyZWN0U3RhcnRUaW1lID0gdGltaW5nSW5mby5zdGFydFRpbWVcbiAgfVxuXG4gIC8vIDE4LiBBcHBlbmQgbG9jYXRpb25VUkwgdG8gcmVxdWVzdFx1MjAxOXMgVVJMIGxpc3QuXG4gIHJlcXVlc3QudXJsTGlzdC5wdXNoKGxvY2F0aW9uVVJMKVxuXG4gIC8vIDE5LiBJbnZva2Ugc2V0IHJlcXVlc3RcdTIwMTlzIHJlZmVycmVyIHBvbGljeSBvbiByZWRpcmVjdCBvbiByZXF1ZXN0IGFuZFxuICAvLyBhY3R1YWxSZXNwb25zZS5cbiAgc2V0UmVxdWVzdFJlZmVycmVyUG9saWN5T25SZWRpcmVjdChyZXF1ZXN0LCBhY3R1YWxSZXNwb25zZSlcblxuICAvLyAyMC4gUmV0dXJuIHRoZSByZXN1bHQgb2YgcnVubmluZyBtYWluIGZldGNoIGdpdmVuIGZldGNoUGFyYW1zIGFuZCB0cnVlLlxuICByZXR1cm4gbWFpbkZldGNoKGZldGNoUGFyYW1zLCB0cnVlKVxufVxuXG4vLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jaHR0cC1uZXR3b3JrLW9yLWNhY2hlLWZldGNoXG5hc3luYyBmdW5jdGlvbiBodHRwTmV0d29ya09yQ2FjaGVGZXRjaCAoXG4gIGZldGNoUGFyYW1zLFxuICBpc0F1dGhlbnRpY2F0aW9uRmV0Y2ggPSBmYWxzZSxcbiAgaXNOZXdDb25uZWN0aW9uRmV0Y2ggPSBmYWxzZVxuKSB7XG4gIC8vIDEuIExldCByZXF1ZXN0IGJlIGZldGNoUGFyYW1zXHUyMDE5cyByZXF1ZXN0LlxuICBjb25zdCByZXF1ZXN0ID0gZmV0Y2hQYXJhbXMucmVxdWVzdFxuXG4gIC8vIDIuIExldCBodHRwRmV0Y2hQYXJhbXMgYmUgbnVsbC5cbiAgbGV0IGh0dHBGZXRjaFBhcmFtcyA9IG51bGxcblxuICAvLyAzLiBMZXQgaHR0cFJlcXVlc3QgYmUgbnVsbC5cbiAgbGV0IGh0dHBSZXF1ZXN0ID0gbnVsbFxuXG4gIC8vIDQuIExldCByZXNwb25zZSBiZSBudWxsLlxuICBsZXQgcmVzcG9uc2UgPSBudWxsXG5cbiAgLy8gNS4gTGV0IHN0b3JlZFJlc3BvbnNlIGJlIG51bGwuXG4gIC8vIFRPRE86IGNhY2hlXG5cbiAgLy8gNi4gTGV0IGh0dHBDYWNoZSBiZSBudWxsLlxuICBjb25zdCBodHRwQ2FjaGUgPSBudWxsXG5cbiAgLy8gNy4gTGV0IHRoZSByZXZhbGlkYXRpbmdGbGFnIGJlIHVuc2V0LlxuICBjb25zdCByZXZhbGlkYXRpbmdGbGFnID0gZmFsc2VcblxuICAvLyA4LiBSdW4gdGhlc2Ugc3RlcHMsIGJ1dCBhYm9ydCB3aGVuIHRoZSBvbmdvaW5nIGZldGNoIGlzIHRlcm1pbmF0ZWQ6XG5cbiAgLy8gICAgMS4gSWYgcmVxdWVzdFx1MjAxOXMgd2luZG93IGlzIFwibm8td2luZG93XCIgYW5kIHJlcXVlc3RcdTIwMTlzIHJlZGlyZWN0IG1vZGUgaXNcbiAgLy8gICAgXCJlcnJvclwiLCB0aGVuIHNldCBodHRwRmV0Y2hQYXJhbXMgdG8gZmV0Y2hQYXJhbXMgYW5kIGh0dHBSZXF1ZXN0IHRvXG4gIC8vICAgIHJlcXVlc3QuXG4gIGlmIChyZXF1ZXN0LndpbmRvdyA9PT0gJ25vLXdpbmRvdycgJiYgcmVxdWVzdC5yZWRpcmVjdCA9PT0gJ2Vycm9yJykge1xuICAgIGh0dHBGZXRjaFBhcmFtcyA9IGZldGNoUGFyYW1zXG4gICAgaHR0cFJlcXVlc3QgPSByZXF1ZXN0XG4gIH0gZWxzZSB7XG4gICAgLy8gT3RoZXJ3aXNlOlxuXG4gICAgLy8gMS4gU2V0IGh0dHBSZXF1ZXN0IHRvIGEgY2xvbmUgb2YgcmVxdWVzdC5cbiAgICBodHRwUmVxdWVzdCA9IGNsb25lUmVxdWVzdChyZXF1ZXN0KVxuXG4gICAgLy8gMi4gU2V0IGh0dHBGZXRjaFBhcmFtcyB0byBhIGNvcHkgb2YgZmV0Y2hQYXJhbXMuXG4gICAgaHR0cEZldGNoUGFyYW1zID0geyAuLi5mZXRjaFBhcmFtcyB9XG5cbiAgICAvLyAzLiBTZXQgaHR0cEZldGNoUGFyYW1zXHUyMDE5cyByZXF1ZXN0IHRvIGh0dHBSZXF1ZXN0LlxuICAgIGh0dHBGZXRjaFBhcmFtcy5yZXF1ZXN0ID0gaHR0cFJlcXVlc3RcbiAgfVxuXG4gIC8vICAgIDMuIExldCBpbmNsdWRlQ3JlZGVudGlhbHMgYmUgdHJ1ZSBpZiBvbmUgb2ZcbiAgY29uc3QgaW5jbHVkZUNyZWRlbnRpYWxzID1cbiAgICByZXF1ZXN0LmNyZWRlbnRpYWxzID09PSAnaW5jbHVkZScgfHxcbiAgICAocmVxdWVzdC5jcmVkZW50aWFscyA9PT0gJ3NhbWUtb3JpZ2luJyAmJlxuICAgICAgcmVxdWVzdC5yZXNwb25zZVRhaW50aW5nID09PSAnYmFzaWMnKVxuXG4gIC8vICAgIDQuIExldCBjb250ZW50TGVuZ3RoIGJlIGh0dHBSZXF1ZXN0XHUyMDE5cyBib2R5XHUyMDE5cyBsZW5ndGgsIGlmIGh0dHBSZXF1ZXN0XHUyMDE5c1xuICAvLyAgICBib2R5IGlzIG5vbi1udWxsOyBvdGhlcndpc2UgbnVsbC5cbiAgY29uc3QgY29udGVudExlbmd0aCA9IGh0dHBSZXF1ZXN0LmJvZHkgPyBodHRwUmVxdWVzdC5ib2R5Lmxlbmd0aCA6IG51bGxcblxuICAvLyAgICA1LiBMZXQgY29udGVudExlbmd0aEhlYWRlclZhbHVlIGJlIG51bGwuXG4gIGxldCBjb250ZW50TGVuZ3RoSGVhZGVyVmFsdWUgPSBudWxsXG5cbiAgLy8gICAgNi4gSWYgaHR0cFJlcXVlc3RcdTIwMTlzIGJvZHkgaXMgbnVsbCBhbmQgaHR0cFJlcXVlc3RcdTIwMTlzIG1ldGhvZCBpcyBgUE9TVGAgb3JcbiAgLy8gICAgYFBVVGAsIHRoZW4gc2V0IGNvbnRlbnRMZW5ndGhIZWFkZXJWYWx1ZSB0byBgMGAuXG4gIGlmIChcbiAgICBodHRwUmVxdWVzdC5ib2R5ID09IG51bGwgJiZcbiAgICBbJ1BPU1QnLCAnUFVUJ10uaW5jbHVkZXMoaHR0cFJlcXVlc3QubWV0aG9kKVxuICApIHtcbiAgICBjb250ZW50TGVuZ3RoSGVhZGVyVmFsdWUgPSAnMCdcbiAgfVxuXG4gIC8vICAgIDcuIElmIGNvbnRlbnRMZW5ndGggaXMgbm9uLW51bGwsIHRoZW4gc2V0IGNvbnRlbnRMZW5ndGhIZWFkZXJWYWx1ZSB0b1xuICAvLyAgICBjb250ZW50TGVuZ3RoLCBzZXJpYWxpemVkIGFuZCBpc29tb3JwaGljIGVuY29kZWQuXG4gIGlmIChjb250ZW50TGVuZ3RoICE9IG51bGwpIHtcbiAgICBjb250ZW50TGVuZ3RoSGVhZGVyVmFsdWUgPSBpc29tb3JwaGljRW5jb2RlKGAke2NvbnRlbnRMZW5ndGh9YClcbiAgfVxuXG4gIC8vICAgIDguIElmIGNvbnRlbnRMZW5ndGhIZWFkZXJWYWx1ZSBpcyBub24tbnVsbCwgdGhlbiBhcHBlbmRcbiAgLy8gICAgYENvbnRlbnQtTGVuZ3RoYC9jb250ZW50TGVuZ3RoSGVhZGVyVmFsdWUgdG8gaHR0cFJlcXVlc3RcdTIwMTlzIGhlYWRlclxuICAvLyAgICBsaXN0LlxuICBpZiAoY29udGVudExlbmd0aEhlYWRlclZhbHVlICE9IG51bGwpIHtcbiAgICBodHRwUmVxdWVzdC5oZWFkZXJzTGlzdC5hcHBlbmQoJ2NvbnRlbnQtbGVuZ3RoJywgY29udGVudExlbmd0aEhlYWRlclZhbHVlLCB0cnVlKVxuICB9XG5cbiAgLy8gICAgOS4gSWYgY29udGVudExlbmd0aEhlYWRlclZhbHVlIGlzIG5vbi1udWxsLCB0aGVuIGFwcGVuZCAoYENvbnRlbnQtTGVuZ3RoYCxcbiAgLy8gICAgY29udGVudExlbmd0aEhlYWRlclZhbHVlKSB0byBodHRwUmVxdWVzdFx1MjAxOXMgaGVhZGVyIGxpc3QuXG5cbiAgLy8gICAgMTAuIElmIGNvbnRlbnRMZW5ndGggaXMgbm9uLW51bGwgYW5kIGh0dHBSZXF1ZXN0XHUyMDE5cyBrZWVwYWxpdmUgaXMgdHJ1ZSxcbiAgLy8gICAgdGhlbjpcbiAgaWYgKGNvbnRlbnRMZW5ndGggIT0gbnVsbCAmJiBodHRwUmVxdWVzdC5rZWVwYWxpdmUpIHtcbiAgICAvLyBOT1RFOiBrZWVwYWxpdmUgaXMgYSBub29wIG91dHNpZGUgb2YgYnJvd3NlciBjb250ZXh0LlxuICB9XG5cbiAgLy8gICAgMTEuIElmIGh0dHBSZXF1ZXN0XHUyMDE5cyByZWZlcnJlciBpcyBhIFVSTCwgdGhlbiBhcHBlbmRcbiAgLy8gICAgYFJlZmVyZXJgL2h0dHBSZXF1ZXN0XHUyMDE5cyByZWZlcnJlciwgc2VyaWFsaXplZCBhbmQgaXNvbW9ycGhpYyBlbmNvZGVkLFxuICAvLyAgICAgdG8gaHR0cFJlcXVlc3RcdTIwMTlzIGhlYWRlciBsaXN0LlxuICBpZiAoaHR0cFJlcXVlc3QucmVmZXJyZXIgaW5zdGFuY2VvZiBVUkwpIHtcbiAgICBodHRwUmVxdWVzdC5oZWFkZXJzTGlzdC5hcHBlbmQoJ3JlZmVyZXInLCBpc29tb3JwaGljRW5jb2RlKGh0dHBSZXF1ZXN0LnJlZmVycmVyLmhyZWYpLCB0cnVlKVxuICB9XG5cbiAgLy8gICAgMTIuIEFwcGVuZCBhIHJlcXVlc3QgYE9yaWdpbmAgaGVhZGVyIGZvciBodHRwUmVxdWVzdC5cbiAgYXBwZW5kUmVxdWVzdE9yaWdpbkhlYWRlcihodHRwUmVxdWVzdClcblxuICAvLyAgICAxMy4gQXBwZW5kIHRoZSBGZXRjaCBtZXRhZGF0YSBoZWFkZXJzIGZvciBodHRwUmVxdWVzdC4gW0ZFVENILU1FVEFEQVRBXVxuICBhcHBlbmRGZXRjaE1ldGFkYXRhKGh0dHBSZXF1ZXN0KVxuXG4gIC8vICAgIDE0LiBJZiBodHRwUmVxdWVzdFx1MjAxOXMgaGVhZGVyIGxpc3QgZG9lcyBub3QgY29udGFpbiBgVXNlci1BZ2VudGAsIHRoZW5cbiAgLy8gICAgdXNlciBhZ2VudHMgc2hvdWxkIGFwcGVuZCBgVXNlci1BZ2VudGAvZGVmYXVsdCBgVXNlci1BZ2VudGAgdmFsdWUgdG9cbiAgLy8gICAgaHR0cFJlcXVlc3RcdTIwMTlzIGhlYWRlciBsaXN0LlxuICBpZiAoIWh0dHBSZXF1ZXN0LmhlYWRlcnNMaXN0LmNvbnRhaW5zKCd1c2VyLWFnZW50JywgdHJ1ZSkpIHtcbiAgICBodHRwUmVxdWVzdC5oZWFkZXJzTGlzdC5hcHBlbmQoJ3VzZXItYWdlbnQnLCBkZWZhdWx0VXNlckFnZW50KVxuICB9XG5cbiAgLy8gICAgMTUuIElmIGh0dHBSZXF1ZXN0XHUyMDE5cyBjYWNoZSBtb2RlIGlzIFwiZGVmYXVsdFwiIGFuZCBodHRwUmVxdWVzdFx1MjAxOXMgaGVhZGVyXG4gIC8vICAgIGxpc3QgY29udGFpbnMgYElmLU1vZGlmaWVkLVNpbmNlYCwgYElmLU5vbmUtTWF0Y2hgLFxuICAvLyAgICBgSWYtVW5tb2RpZmllZC1TaW5jZWAsIGBJZi1NYXRjaGAsIG9yIGBJZi1SYW5nZWAsIHRoZW4gc2V0XG4gIC8vICAgIGh0dHBSZXF1ZXN0XHUyMDE5cyBjYWNoZSBtb2RlIHRvIFwibm8tc3RvcmVcIi5cbiAgaWYgKFxuICAgIGh0dHBSZXF1ZXN0LmNhY2hlID09PSAnZGVmYXVsdCcgJiZcbiAgICAoaHR0cFJlcXVlc3QuaGVhZGVyc0xpc3QuY29udGFpbnMoJ2lmLW1vZGlmaWVkLXNpbmNlJywgdHJ1ZSkgfHxcbiAgICAgIGh0dHBSZXF1ZXN0LmhlYWRlcnNMaXN0LmNvbnRhaW5zKCdpZi1ub25lLW1hdGNoJywgdHJ1ZSkgfHxcbiAgICAgIGh0dHBSZXF1ZXN0LmhlYWRlcnNMaXN0LmNvbnRhaW5zKCdpZi11bm1vZGlmaWVkLXNpbmNlJywgdHJ1ZSkgfHxcbiAgICAgIGh0dHBSZXF1ZXN0LmhlYWRlcnNMaXN0LmNvbnRhaW5zKCdpZi1tYXRjaCcsIHRydWUpIHx8XG4gICAgICBodHRwUmVxdWVzdC5oZWFkZXJzTGlzdC5jb250YWlucygnaWYtcmFuZ2UnLCB0cnVlKSlcbiAgKSB7XG4gICAgaHR0cFJlcXVlc3QuY2FjaGUgPSAnbm8tc3RvcmUnXG4gIH1cblxuICAvLyAgICAxNi4gSWYgaHR0cFJlcXVlc3RcdTIwMTlzIGNhY2hlIG1vZGUgaXMgXCJuby1jYWNoZVwiLCBodHRwUmVxdWVzdFx1MjAxOXMgcHJldmVudFxuICAvLyAgICBuby1jYWNoZSBjYWNoZS1jb250cm9sIGhlYWRlciBtb2RpZmljYXRpb24gZmxhZyBpcyB1bnNldCwgYW5kXG4gIC8vICAgIGh0dHBSZXF1ZXN0XHUyMDE5cyBoZWFkZXIgbGlzdCBkb2VzIG5vdCBjb250YWluIGBDYWNoZS1Db250cm9sYCwgdGhlbiBhcHBlbmRcbiAgLy8gICAgYENhY2hlLUNvbnRyb2xgL2BtYXgtYWdlPTBgIHRvIGh0dHBSZXF1ZXN0XHUyMDE5cyBoZWFkZXIgbGlzdC5cbiAgaWYgKFxuICAgIGh0dHBSZXF1ZXN0LmNhY2hlID09PSAnbm8tY2FjaGUnICYmXG4gICAgIWh0dHBSZXF1ZXN0LnByZXZlbnROb0NhY2hlQ2FjaGVDb250cm9sSGVhZGVyTW9kaWZpY2F0aW9uICYmXG4gICAgIWh0dHBSZXF1ZXN0LmhlYWRlcnNMaXN0LmNvbnRhaW5zKCdjYWNoZS1jb250cm9sJywgdHJ1ZSlcbiAgKSB7XG4gICAgaHR0cFJlcXVlc3QuaGVhZGVyc0xpc3QuYXBwZW5kKCdjYWNoZS1jb250cm9sJywgJ21heC1hZ2U9MCcsIHRydWUpXG4gIH1cblxuICAvLyAgICAxNy4gSWYgaHR0cFJlcXVlc3RcdTIwMTlzIGNhY2hlIG1vZGUgaXMgXCJuby1zdG9yZVwiIG9yIFwicmVsb2FkXCIsIHRoZW46XG4gIGlmIChodHRwUmVxdWVzdC5jYWNoZSA9PT0gJ25vLXN0b3JlJyB8fCBodHRwUmVxdWVzdC5jYWNoZSA9PT0gJ3JlbG9hZCcpIHtcbiAgICAvLyAxLiBJZiBodHRwUmVxdWVzdFx1MjAxOXMgaGVhZGVyIGxpc3QgZG9lcyBub3QgY29udGFpbiBgUHJhZ21hYCwgdGhlbiBhcHBlbmRcbiAgICAvLyBgUHJhZ21hYC9gbm8tY2FjaGVgIHRvIGh0dHBSZXF1ZXN0XHUyMDE5cyBoZWFkZXIgbGlzdC5cbiAgICBpZiAoIWh0dHBSZXF1ZXN0LmhlYWRlcnNMaXN0LmNvbnRhaW5zKCdwcmFnbWEnLCB0cnVlKSkge1xuICAgICAgaHR0cFJlcXVlc3QuaGVhZGVyc0xpc3QuYXBwZW5kKCdwcmFnbWEnLCAnbm8tY2FjaGUnLCB0cnVlKVxuICAgIH1cblxuICAgIC8vIDIuIElmIGh0dHBSZXF1ZXN0XHUyMDE5cyBoZWFkZXIgbGlzdCBkb2VzIG5vdCBjb250YWluIGBDYWNoZS1Db250cm9sYCxcbiAgICAvLyB0aGVuIGFwcGVuZCBgQ2FjaGUtQ29udHJvbGAvYG5vLWNhY2hlYCB0byBodHRwUmVxdWVzdFx1MjAxOXMgaGVhZGVyIGxpc3QuXG4gICAgaWYgKCFodHRwUmVxdWVzdC5oZWFkZXJzTGlzdC5jb250YWlucygnY2FjaGUtY29udHJvbCcsIHRydWUpKSB7XG4gICAgICBodHRwUmVxdWVzdC5oZWFkZXJzTGlzdC5hcHBlbmQoJ2NhY2hlLWNvbnRyb2wnLCAnbm8tY2FjaGUnLCB0cnVlKVxuICAgIH1cbiAgfVxuXG4gIC8vICAgIDE4LiBJZiBodHRwUmVxdWVzdFx1MjAxOXMgaGVhZGVyIGxpc3QgY29udGFpbnMgYFJhbmdlYCwgdGhlbiBhcHBlbmRcbiAgLy8gICAgYEFjY2VwdC1FbmNvZGluZ2AvYGlkZW50aXR5YCB0byBodHRwUmVxdWVzdFx1MjAxOXMgaGVhZGVyIGxpc3QuXG4gIGlmIChodHRwUmVxdWVzdC5oZWFkZXJzTGlzdC5jb250YWlucygncmFuZ2UnLCB0cnVlKSkge1xuICAgIGh0dHBSZXF1ZXN0LmhlYWRlcnNMaXN0LmFwcGVuZCgnYWNjZXB0LWVuY29kaW5nJywgJ2lkZW50aXR5JywgdHJ1ZSlcbiAgfVxuXG4gIC8vICAgIDE5LiBNb2RpZnkgaHR0cFJlcXVlc3RcdTIwMTlzIGhlYWRlciBsaXN0IHBlciBIVFRQLiBEbyBub3QgYXBwZW5kIGEgZ2l2ZW5cbiAgLy8gICAgaGVhZGVyIGlmIGh0dHBSZXF1ZXN0XHUyMDE5cyBoZWFkZXIgbGlzdCBjb250YWlucyB0aGF0IGhlYWRlclx1MjAxOXMgbmFtZS5cbiAgLy8gICAgVE9ETzogaHR0cHM6Ly9naXRodWIuY29tL3doYXR3Zy9mZXRjaC9pc3N1ZXMvMTI4NSNpc3N1ZWNvbW1lbnQtODk2NTYwMTI5XG4gIGlmICghaHR0cFJlcXVlc3QuaGVhZGVyc0xpc3QuY29udGFpbnMoJ2FjY2VwdC1lbmNvZGluZycsIHRydWUpKSB7XG4gICAgaWYgKHVybEhhc0h0dHBzU2NoZW1lKHJlcXVlc3RDdXJyZW50VVJMKGh0dHBSZXF1ZXN0KSkpIHtcbiAgICAgIGh0dHBSZXF1ZXN0LmhlYWRlcnNMaXN0LmFwcGVuZCgnYWNjZXB0LWVuY29kaW5nJywgJ2JyLCBnemlwLCBkZWZsYXRlJywgdHJ1ZSlcbiAgICB9IGVsc2Uge1xuICAgICAgaHR0cFJlcXVlc3QuaGVhZGVyc0xpc3QuYXBwZW5kKCdhY2NlcHQtZW5jb2RpbmcnLCAnZ3ppcCwgZGVmbGF0ZScsIHRydWUpXG4gICAgfVxuICB9XG5cbiAgaHR0cFJlcXVlc3QuaGVhZGVyc0xpc3QuZGVsZXRlKCdob3N0JywgdHJ1ZSlcblxuICAvLyAgICAyMC4gSWYgaW5jbHVkZUNyZWRlbnRpYWxzIGlzIHRydWUsIHRoZW46XG4gIGlmIChpbmNsdWRlQ3JlZGVudGlhbHMpIHtcbiAgICAvLyAxLiBJZiB0aGUgdXNlciBhZ2VudCBpcyBub3QgY29uZmlndXJlZCB0byBibG9jayBjb29raWVzIGZvciBodHRwUmVxdWVzdFxuICAgIC8vIChzZWUgc2VjdGlvbiA3IG9mIFtDT09LSUVTXSksIHRoZW46XG4gICAgLy8gVE9ETzogY3JlZGVudGlhbHNcbiAgICAvLyAyLiBJZiBodHRwUmVxdWVzdFx1MjAxOXMgaGVhZGVyIGxpc3QgZG9lcyBub3QgY29udGFpbiBgQXV0aG9yaXphdGlvbmAsIHRoZW46XG4gICAgLy8gVE9ETzogY3JlZGVudGlhbHNcbiAgfVxuXG4gIC8vICAgIDIxLiBJZiB0aGVyZVx1MjAxOXMgYSBwcm94eS1hdXRoZW50aWNhdGlvbiBlbnRyeSwgdXNlIGl0IGFzIGFwcHJvcHJpYXRlLlxuICAvLyAgICBUT0RPOiBwcm94eS1hdXRoZW50aWNhdGlvblxuXG4gIC8vICAgIDIyLiBTZXQgaHR0cENhY2hlIHRvIHRoZSByZXN1bHQgb2YgZGV0ZXJtaW5pbmcgdGhlIEhUVFAgY2FjaGVcbiAgLy8gICAgcGFydGl0aW9uLCBnaXZlbiBodHRwUmVxdWVzdC5cbiAgLy8gICAgVE9ETzogY2FjaGVcblxuICAvLyAgICAyMy4gSWYgaHR0cENhY2hlIGlzIG51bGwsIHRoZW4gc2V0IGh0dHBSZXF1ZXN0XHUyMDE5cyBjYWNoZSBtb2RlIHRvXG4gIC8vICAgIFwibm8tc3RvcmVcIi5cbiAgaWYgKGh0dHBDYWNoZSA9PSBudWxsKSB7XG4gICAgaHR0cFJlcXVlc3QuY2FjaGUgPSAnbm8tc3RvcmUnXG4gIH1cblxuICAvLyAgICAyNC4gSWYgaHR0cFJlcXVlc3RcdTIwMTlzIGNhY2hlIG1vZGUgaXMgbmVpdGhlciBcIm5vLXN0b3JlXCIgbm9yIFwicmVsb2FkXCIsXG4gIC8vICAgIHRoZW46XG4gIGlmIChodHRwUmVxdWVzdC5jYWNoZSAhPT0gJ25vLXN0b3JlJyAmJiBodHRwUmVxdWVzdC5jYWNoZSAhPT0gJ3JlbG9hZCcpIHtcbiAgICAvLyBUT0RPOiBjYWNoZVxuICB9XG5cbiAgLy8gOS4gSWYgYWJvcnRlZCwgdGhlbiByZXR1cm4gdGhlIGFwcHJvcHJpYXRlIG5ldHdvcmsgZXJyb3IgZm9yIGZldGNoUGFyYW1zLlxuICAvLyBUT0RPXG5cbiAgLy8gMTAuIElmIHJlc3BvbnNlIGlzIG51bGwsIHRoZW46XG4gIGlmIChyZXNwb25zZSA9PSBudWxsKSB7XG4gICAgLy8gMS4gSWYgaHR0cFJlcXVlc3RcdTIwMTlzIGNhY2hlIG1vZGUgaXMgXCJvbmx5LWlmLWNhY2hlZFwiLCB0aGVuIHJldHVybiBhXG4gICAgLy8gbmV0d29yayBlcnJvci5cbiAgICBpZiAoaHR0cFJlcXVlc3QuY2FjaGUgPT09ICdvbmx5LWlmLWNhY2hlZCcpIHtcbiAgICAgIHJldHVybiBtYWtlTmV0d29ya0Vycm9yKCdvbmx5IGlmIGNhY2hlZCcpXG4gICAgfVxuXG4gICAgLy8gMi4gTGV0IGZvcndhcmRSZXNwb25zZSBiZSB0aGUgcmVzdWx0IG9mIHJ1bm5pbmcgSFRUUC1uZXR3b3JrIGZldGNoXG4gICAgLy8gZ2l2ZW4gaHR0cEZldGNoUGFyYW1zLCBpbmNsdWRlQ3JlZGVudGlhbHMsIGFuZCBpc05ld0Nvbm5lY3Rpb25GZXRjaC5cbiAgICBjb25zdCBmb3J3YXJkUmVzcG9uc2UgPSBhd2FpdCBodHRwTmV0d29ya0ZldGNoKFxuICAgICAgaHR0cEZldGNoUGFyYW1zLFxuICAgICAgaW5jbHVkZUNyZWRlbnRpYWxzLFxuICAgICAgaXNOZXdDb25uZWN0aW9uRmV0Y2hcbiAgICApXG5cbiAgICAvLyAzLiBJZiBodHRwUmVxdWVzdFx1MjAxOXMgbWV0aG9kIGlzIHVuc2FmZSBhbmQgZm9yd2FyZFJlc3BvbnNlXHUyMDE5cyBzdGF0dXMgaXNcbiAgICAvLyBpbiB0aGUgcmFuZ2UgMjAwIHRvIDM5OSwgaW5jbHVzaXZlLCBpbnZhbGlkYXRlIGFwcHJvcHJpYXRlIHN0b3JlZFxuICAgIC8vIHJlc3BvbnNlcyBpbiBodHRwQ2FjaGUsIGFzIHBlciB0aGUgXCJJbnZhbGlkYXRpb25cIiBjaGFwdGVyIG9mIEhUVFBcbiAgICAvLyBDYWNoaW5nLCBhbmQgc2V0IHN0b3JlZFJlc3BvbnNlIHRvIG51bGwuIFtIVFRQLUNBQ0hJTkddXG4gICAgaWYgKFxuICAgICAgIXNhZmVNZXRob2RzU2V0LmhhcyhodHRwUmVxdWVzdC5tZXRob2QpICYmXG4gICAgICBmb3J3YXJkUmVzcG9uc2Uuc3RhdHVzID49IDIwMCAmJlxuICAgICAgZm9yd2FyZFJlc3BvbnNlLnN0YXR1cyA8PSAzOTlcbiAgICApIHtcbiAgICAgIC8vIFRPRE86IGNhY2hlXG4gICAgfVxuXG4gICAgLy8gNC4gSWYgdGhlIHJldmFsaWRhdGluZ0ZsYWcgaXMgc2V0IGFuZCBmb3J3YXJkUmVzcG9uc2VcdTIwMTlzIHN0YXR1cyBpcyAzMDQsXG4gICAgLy8gdGhlbjpcbiAgICBpZiAocmV2YWxpZGF0aW5nRmxhZyAmJiBmb3J3YXJkUmVzcG9uc2Uuc3RhdHVzID09PSAzMDQpIHtcbiAgICAgIC8vIFRPRE86IGNhY2hlXG4gICAgfVxuXG4gICAgLy8gNS4gSWYgcmVzcG9uc2UgaXMgbnVsbCwgdGhlbjpcbiAgICBpZiAocmVzcG9uc2UgPT0gbnVsbCkge1xuICAgICAgLy8gMS4gU2V0IHJlc3BvbnNlIHRvIGZvcndhcmRSZXNwb25zZS5cbiAgICAgIHJlc3BvbnNlID0gZm9yd2FyZFJlc3BvbnNlXG5cbiAgICAgIC8vIDIuIFN0b3JlIGh0dHBSZXF1ZXN0IGFuZCBmb3J3YXJkUmVzcG9uc2UgaW4gaHR0cENhY2hlLCBhcyBwZXIgdGhlXG4gICAgICAvLyBcIlN0b3JpbmcgUmVzcG9uc2VzIGluIENhY2hlc1wiIGNoYXB0ZXIgb2YgSFRUUCBDYWNoaW5nLiBbSFRUUC1DQUNISU5HXVxuICAgICAgLy8gVE9ETzogY2FjaGVcbiAgICB9XG4gIH1cblxuICAvLyAxMS4gU2V0IHJlc3BvbnNlXHUyMDE5cyBVUkwgbGlzdCB0byBhIGNsb25lIG9mIGh0dHBSZXF1ZXN0XHUyMDE5cyBVUkwgbGlzdC5cbiAgcmVzcG9uc2UudXJsTGlzdCA9IFsuLi5odHRwUmVxdWVzdC51cmxMaXN0XVxuXG4gIC8vIDEyLiBJZiBodHRwUmVxdWVzdFx1MjAxOXMgaGVhZGVyIGxpc3QgY29udGFpbnMgYFJhbmdlYCwgdGhlbiBzZXQgcmVzcG9uc2VcdTIwMTlzXG4gIC8vIHJhbmdlLXJlcXVlc3RlZCBmbGFnLlxuICBpZiAoaHR0cFJlcXVlc3QuaGVhZGVyc0xpc3QuY29udGFpbnMoJ3JhbmdlJywgdHJ1ZSkpIHtcbiAgICByZXNwb25zZS5yYW5nZVJlcXVlc3RlZCA9IHRydWVcbiAgfVxuXG4gIC8vIDEzLiBTZXQgcmVzcG9uc2VcdTIwMTlzIHJlcXVlc3QtaW5jbHVkZXMtY3JlZGVudGlhbHMgdG8gaW5jbHVkZUNyZWRlbnRpYWxzLlxuICByZXNwb25zZS5yZXF1ZXN0SW5jbHVkZXNDcmVkZW50aWFscyA9IGluY2x1ZGVDcmVkZW50aWFsc1xuXG4gIC8vIDE0LiBJZiByZXNwb25zZVx1MjAxOXMgc3RhdHVzIGlzIDQwMSwgaHR0cFJlcXVlc3RcdTIwMTlzIHJlc3BvbnNlIHRhaW50aW5nIGlzIG5vdFxuICAvLyBcImNvcnNcIiwgaW5jbHVkZUNyZWRlbnRpYWxzIGlzIHRydWUsIGFuZCByZXF1ZXN0XHUyMDE5cyB3aW5kb3cgaXMgYW4gZW52aXJvbm1lbnRcbiAgLy8gc2V0dGluZ3Mgb2JqZWN0LCB0aGVuOlxuICAvLyBUT0RPXG5cbiAgLy8gMTUuIElmIHJlc3BvbnNlXHUyMDE5cyBzdGF0dXMgaXMgNDA3LCB0aGVuOlxuICBpZiAocmVzcG9uc2Uuc3RhdHVzID09PSA0MDcpIHtcbiAgICAvLyAxLiBJZiByZXF1ZXN0XHUyMDE5cyB3aW5kb3cgaXMgXCJuby13aW5kb3dcIiwgdGhlbiByZXR1cm4gYSBuZXR3b3JrIGVycm9yLlxuICAgIGlmIChyZXF1ZXN0LndpbmRvdyA9PT0gJ25vLXdpbmRvdycpIHtcbiAgICAgIHJldHVybiBtYWtlTmV0d29ya0Vycm9yKClcbiAgICB9XG5cbiAgICAvLyAyLiA/Pz9cblxuICAgIC8vIDMuIElmIGZldGNoUGFyYW1zIGlzIGNhbmNlbGVkLCB0aGVuIHJldHVybiB0aGUgYXBwcm9wcmlhdGUgbmV0d29yayBlcnJvciBmb3IgZmV0Y2hQYXJhbXMuXG4gICAgaWYgKGlzQ2FuY2VsbGVkKGZldGNoUGFyYW1zKSkge1xuICAgICAgcmV0dXJuIG1ha2VBcHByb3ByaWF0ZU5ldHdvcmtFcnJvcihmZXRjaFBhcmFtcylcbiAgICB9XG5cbiAgICAvLyA0LiBQcm9tcHQgdGhlIGVuZCB1c2VyIGFzIGFwcHJvcHJpYXRlIGluIHJlcXVlc3RcdTIwMTlzIHdpbmRvdyBhbmQgc3RvcmVcbiAgICAvLyB0aGUgcmVzdWx0IGFzIGEgcHJveHktYXV0aGVudGljYXRpb24gZW50cnkuIFtIVFRQLUFVVEhdXG4gICAgLy8gVE9ETzogSW52b2tlIHNvbWUga2luZCBvZiBjYWxsYmFjaz9cblxuICAgIC8vIDUuIFNldCByZXNwb25zZSB0byB0aGUgcmVzdWx0IG9mIHJ1bm5pbmcgSFRUUC1uZXR3b3JrLW9yLWNhY2hlIGZldGNoIGdpdmVuXG4gICAgLy8gZmV0Y2hQYXJhbXMuXG4gICAgLy8gVE9ET1xuICAgIHJldHVybiBtYWtlTmV0d29ya0Vycm9yKCdwcm94eSBhdXRoZW50aWNhdGlvbiByZXF1aXJlZCcpXG4gIH1cblxuICAvLyAxNi4gSWYgYWxsIG9mIHRoZSBmb2xsb3dpbmcgYXJlIHRydWVcbiAgaWYgKFxuICAgIC8vIHJlc3BvbnNlXHUyMDE5cyBzdGF0dXMgaXMgNDIxXG4gICAgcmVzcG9uc2Uuc3RhdHVzID09PSA0MjEgJiZcbiAgICAvLyBpc05ld0Nvbm5lY3Rpb25GZXRjaCBpcyBmYWxzZVxuICAgICFpc05ld0Nvbm5lY3Rpb25GZXRjaCAmJlxuICAgIC8vIHJlcXVlc3RcdTIwMTlzIGJvZHkgaXMgbnVsbCwgb3IgcmVxdWVzdFx1MjAxOXMgYm9keSBpcyBub24tbnVsbCBhbmQgcmVxdWVzdFx1MjAxOXMgYm9keVx1MjAxOXMgc291cmNlIGlzIG5vbi1udWxsXG4gICAgKHJlcXVlc3QuYm9keSA9PSBudWxsIHx8IHJlcXVlc3QuYm9keS5zb3VyY2UgIT0gbnVsbClcbiAgKSB7XG4gICAgLy8gdGhlbjpcblxuICAgIC8vIDEuIElmIGZldGNoUGFyYW1zIGlzIGNhbmNlbGVkLCB0aGVuIHJldHVybiB0aGUgYXBwcm9wcmlhdGUgbmV0d29yayBlcnJvciBmb3IgZmV0Y2hQYXJhbXMuXG4gICAgaWYgKGlzQ2FuY2VsbGVkKGZldGNoUGFyYW1zKSkge1xuICAgICAgcmV0dXJuIG1ha2VBcHByb3ByaWF0ZU5ldHdvcmtFcnJvcihmZXRjaFBhcmFtcylcbiAgICB9XG5cbiAgICAvLyAyLiBTZXQgcmVzcG9uc2UgdG8gdGhlIHJlc3VsdCBvZiBydW5uaW5nIEhUVFAtbmV0d29yay1vci1jYWNoZVxuICAgIC8vIGZldGNoIGdpdmVuIGZldGNoUGFyYW1zLCBpc0F1dGhlbnRpY2F0aW9uRmV0Y2gsIGFuZCB0cnVlLlxuXG4gICAgLy8gVE9ETyAoc3BlYyk6IFRoZSBzcGVjIGRvZXNuJ3Qgc3BlY2lmeSB0aGlzIGJ1dCB3ZSBuZWVkIHRvIGNhbmNlbFxuICAgIC8vIHRoZSBhY3RpdmUgcmVzcG9uc2UgYmVmb3JlIHdlIGNhbiBzdGFydCBhIG5ldyBvbmUuXG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3doYXR3Zy9mZXRjaC9pc3N1ZXMvMTI5M1xuICAgIGZldGNoUGFyYW1zLmNvbnRyb2xsZXIuY29ubmVjdGlvbi5kZXN0cm95KClcblxuICAgIHJlc3BvbnNlID0gYXdhaXQgaHR0cE5ldHdvcmtPckNhY2hlRmV0Y2goXG4gICAgICBmZXRjaFBhcmFtcyxcbiAgICAgIGlzQXV0aGVudGljYXRpb25GZXRjaCxcbiAgICAgIHRydWVcbiAgICApXG4gIH1cblxuICAvLyAxNy4gSWYgaXNBdXRoZW50aWNhdGlvbkZldGNoIGlzIHRydWUsIHRoZW4gY3JlYXRlIGFuIGF1dGhlbnRpY2F0aW9uIGVudHJ5XG4gIGlmIChpc0F1dGhlbnRpY2F0aW9uRmV0Y2gpIHtcbiAgICAvLyBUT0RPXG4gIH1cblxuICAvLyAxOC4gUmV0dXJuIHJlc3BvbnNlLlxuICByZXR1cm4gcmVzcG9uc2Vcbn1cblxuLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2h0dHAtbmV0d29yay1mZXRjaFxuYXN5bmMgZnVuY3Rpb24gaHR0cE5ldHdvcmtGZXRjaCAoXG4gIGZldGNoUGFyYW1zLFxuICBpbmNsdWRlQ3JlZGVudGlhbHMgPSBmYWxzZSxcbiAgZm9yY2VOZXdDb25uZWN0aW9uID0gZmFsc2Vcbikge1xuICBhc3NlcnQoIWZldGNoUGFyYW1zLmNvbnRyb2xsZXIuY29ubmVjdGlvbiB8fCBmZXRjaFBhcmFtcy5jb250cm9sbGVyLmNvbm5lY3Rpb24uZGVzdHJveWVkKVxuXG4gIGZldGNoUGFyYW1zLmNvbnRyb2xsZXIuY29ubmVjdGlvbiA9IHtcbiAgICBhYm9ydDogbnVsbCxcbiAgICBkZXN0cm95ZWQ6IGZhbHNlLFxuICAgIGRlc3Ryb3kgKGVyciwgYWJvcnQgPSB0cnVlKSB7XG4gICAgICBpZiAoIXRoaXMuZGVzdHJveWVkKSB7XG4gICAgICAgIHRoaXMuZGVzdHJveWVkID0gdHJ1ZVxuICAgICAgICBpZiAoYWJvcnQpIHtcbiAgICAgICAgICB0aGlzLmFib3J0Py4oZXJyID8/IG5ldyBET01FeGNlcHRpb24oJ1RoZSBvcGVyYXRpb24gd2FzIGFib3J0ZWQuJywgJ0Fib3J0RXJyb3InKSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIDEuIExldCByZXF1ZXN0IGJlIGZldGNoUGFyYW1zXHUyMDE5cyByZXF1ZXN0LlxuICBjb25zdCByZXF1ZXN0ID0gZmV0Y2hQYXJhbXMucmVxdWVzdFxuXG4gIC8vIDIuIExldCByZXNwb25zZSBiZSBudWxsLlxuICBsZXQgcmVzcG9uc2UgPSBudWxsXG5cbiAgLy8gMy4gTGV0IHRpbWluZ0luZm8gYmUgZmV0Y2hQYXJhbXNcdTIwMTlzIHRpbWluZyBpbmZvLlxuICBjb25zdCB0aW1pbmdJbmZvID0gZmV0Y2hQYXJhbXMudGltaW5nSW5mb1xuXG4gIC8vIDQuIExldCBodHRwQ2FjaGUgYmUgdGhlIHJlc3VsdCBvZiBkZXRlcm1pbmluZyB0aGUgSFRUUCBjYWNoZSBwYXJ0aXRpb24sXG4gIC8vIGdpdmVuIHJlcXVlc3QuXG4gIC8vIFRPRE86IGNhY2hlXG4gIGNvbnN0IGh0dHBDYWNoZSA9IG51bGxcblxuICAvLyA1LiBJZiBodHRwQ2FjaGUgaXMgbnVsbCwgdGhlbiBzZXQgcmVxdWVzdFx1MjAxOXMgY2FjaGUgbW9kZSB0byBcIm5vLXN0b3JlXCIuXG4gIGlmIChodHRwQ2FjaGUgPT0gbnVsbCkge1xuICAgIHJlcXVlc3QuY2FjaGUgPSAnbm8tc3RvcmUnXG4gIH1cblxuICAvLyA2LiBMZXQgbmV0d29ya1BhcnRpdGlvbktleSBiZSB0aGUgcmVzdWx0IG9mIGRldGVybWluaW5nIHRoZSBuZXR3b3JrXG4gIC8vIHBhcnRpdGlvbiBrZXkgZ2l2ZW4gcmVxdWVzdC5cbiAgLy8gVE9ET1xuXG4gIC8vIDcuIExldCBuZXdDb25uZWN0aW9uIGJlIFwieWVzXCIgaWYgZm9yY2VOZXdDb25uZWN0aW9uIGlzIHRydWU7IG90aGVyd2lzZVxuICAvLyBcIm5vXCIuXG4gIGNvbnN0IG5ld0Nvbm5lY3Rpb24gPSBmb3JjZU5ld0Nvbm5lY3Rpb24gPyAneWVzJyA6ICdubycgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bnVzZWQtdmFyc1xuXG4gIC8vIDguIFN3aXRjaCBvbiByZXF1ZXN0XHUyMDE5cyBtb2RlOlxuICBpZiAocmVxdWVzdC5tb2RlID09PSAnd2Vic29ja2V0Jykge1xuICAgIC8vIExldCBjb25uZWN0aW9uIGJlIHRoZSByZXN1bHQgb2Ygb2J0YWluaW5nIGEgV2ViU29ja2V0IGNvbm5lY3Rpb24sXG4gICAgLy8gZ2l2ZW4gcmVxdWVzdFx1MjAxOXMgY3VycmVudCBVUkwuXG4gICAgLy8gVE9ET1xuICB9IGVsc2Uge1xuICAgIC8vIExldCBjb25uZWN0aW9uIGJlIHRoZSByZXN1bHQgb2Ygb2J0YWluaW5nIGEgY29ubmVjdGlvbiwgZ2l2ZW5cbiAgICAvLyBuZXR3b3JrUGFydGl0aW9uS2V5LCByZXF1ZXN0XHUyMDE5cyBjdXJyZW50IFVSTFx1MjAxOXMgb3JpZ2luLFxuICAgIC8vIGluY2x1ZGVDcmVkZW50aWFscywgYW5kIGZvcmNlTmV3Q29ubmVjdGlvbi5cbiAgICAvLyBUT0RPXG4gIH1cblxuICAvLyA5LiBSdW4gdGhlc2Ugc3RlcHMsIGJ1dCBhYm9ydCB3aGVuIHRoZSBvbmdvaW5nIGZldGNoIGlzIHRlcm1pbmF0ZWQ6XG5cbiAgLy8gICAgMS4gSWYgY29ubmVjdGlvbiBpcyBmYWlsdXJlLCB0aGVuIHJldHVybiBhIG5ldHdvcmsgZXJyb3IuXG5cbiAgLy8gICAgMi4gU2V0IHRpbWluZ0luZm9cdTIwMTlzIGZpbmFsIGNvbm5lY3Rpb24gdGltaW5nIGluZm8gdG8gdGhlIHJlc3VsdCBvZlxuICAvLyAgICBjYWxsaW5nIGNsYW1wIGFuZCBjb2Fyc2VuIGNvbm5lY3Rpb24gdGltaW5nIGluZm8gd2l0aCBjb25uZWN0aW9uXHUyMDE5c1xuICAvLyAgICB0aW1pbmcgaW5mbywgdGltaW5nSW5mb1x1MjAxOXMgcG9zdC1yZWRpcmVjdCBzdGFydCB0aW1lLCBhbmQgZmV0Y2hQYXJhbXNcdTIwMTlzXG4gIC8vICAgIGNyb3NzLW9yaWdpbiBpc29sYXRlZCBjYXBhYmlsaXR5LlxuXG4gIC8vICAgIDMuIElmIGNvbm5lY3Rpb24gaXMgbm90IGFuIEhUVFAvMiBjb25uZWN0aW9uLCByZXF1ZXN0XHUyMDE5cyBib2R5IGlzIG5vbi1udWxsLFxuICAvLyAgICBhbmQgcmVxdWVzdFx1MjAxOXMgYm9keVx1MjAxOXMgc291cmNlIGlzIG51bGwsIHRoZW4gYXBwZW5kIChgVHJhbnNmZXItRW5jb2RpbmdgLFxuICAvLyAgICBgY2h1bmtlZGApIHRvIHJlcXVlc3RcdTIwMTlzIGhlYWRlciBsaXN0LlxuXG4gIC8vICAgIDQuIFNldCB0aW1pbmdJbmZvXHUyMDE5cyBmaW5hbCBuZXR3b3JrLXJlcXVlc3Qgc3RhcnQgdGltZSB0byB0aGUgY29hcnNlbmVkXG4gIC8vICAgIHNoYXJlZCBjdXJyZW50IHRpbWUgZ2l2ZW4gZmV0Y2hQYXJhbXNcdTIwMTlzIGNyb3NzLW9yaWdpbiBpc29sYXRlZFxuICAvLyAgICBjYXBhYmlsaXR5LlxuXG4gIC8vICAgIDUuIFNldCByZXNwb25zZSB0byB0aGUgcmVzdWx0IG9mIG1ha2luZyBhbiBIVFRQIHJlcXVlc3Qgb3ZlciBjb25uZWN0aW9uXG4gIC8vICAgIHVzaW5nIHJlcXVlc3Qgd2l0aCB0aGUgZm9sbG93aW5nIGNhdmVhdHM6XG5cbiAgLy8gICAgICAgIC0gRm9sbG93IHRoZSByZWxldmFudCByZXF1aXJlbWVudHMgZnJvbSBIVFRQLiBbSFRUUF0gW0hUVFAtU0VNQU5USUNTXVxuICAvLyAgICAgICAgW0hUVFAtQ09ORF0gW0hUVFAtQ0FDSElOR10gW0hUVFAtQVVUSF1cblxuICAvLyAgICAgICAgLSBJZiByZXF1ZXN0XHUyMDE5cyBib2R5IGlzIG5vbi1udWxsLCBhbmQgcmVxdWVzdFx1MjAxOXMgYm9keVx1MjAxOXMgc291cmNlIGlzIG51bGwsXG4gIC8vICAgICAgICB0aGVuIHRoZSB1c2VyIGFnZW50IG1heSBoYXZlIGEgYnVmZmVyIG9mIHVwIHRvIDY0IGtpYmlieXRlcyBhbmQgc3RvcmVcbiAgLy8gICAgICAgIGEgcGFydCBvZiByZXF1ZXN0XHUyMDE5cyBib2R5IGluIHRoYXQgYnVmZmVyLiBJZiB0aGUgdXNlciBhZ2VudCByZWFkcyBmcm9tXG4gIC8vICAgICAgICByZXF1ZXN0XHUyMDE5cyBib2R5IGJleW9uZCB0aGF0IGJ1ZmZlclx1MjAxOXMgc2l6ZSBhbmQgdGhlIHVzZXIgYWdlbnQgbmVlZHMgdG9cbiAgLy8gICAgICAgIHJlc2VuZCByZXF1ZXN0LCB0aGVuIGluc3RlYWQgcmV0dXJuIGEgbmV0d29yayBlcnJvci5cblxuICAvLyAgICAgICAgLSBTZXQgdGltaW5nSW5mb1x1MjAxOXMgZmluYWwgbmV0d29yay1yZXNwb25zZSBzdGFydCB0aW1lIHRvIHRoZSBjb2Fyc2VuZWRcbiAgLy8gICAgICAgIHNoYXJlZCBjdXJyZW50IHRpbWUgZ2l2ZW4gZmV0Y2hQYXJhbXNcdTIwMTlzIGNyb3NzLW9yaWdpbiBpc29sYXRlZCBjYXBhYmlsaXR5LFxuICAvLyAgICAgICAgaW1tZWRpYXRlbHkgYWZ0ZXIgdGhlIHVzZXIgYWdlbnRcdTIwMTlzIEhUVFAgcGFyc2VyIHJlY2VpdmVzIHRoZSBmaXJzdCBieXRlXG4gIC8vICAgICAgICBvZiB0aGUgcmVzcG9uc2UgKGUuZy4sIGZyYW1lIGhlYWRlciBieXRlcyBmb3IgSFRUUC8yIG9yIHJlc3BvbnNlIHN0YXR1c1xuICAvLyAgICAgICAgbGluZSBmb3IgSFRUUC8xLngpLlxuXG4gIC8vICAgICAgICAtIFdhaXQgdW50aWwgYWxsIHRoZSBoZWFkZXJzIGFyZSB0cmFuc21pdHRlZC5cblxuICAvLyAgICAgICAgLSBBbnkgcmVzcG9uc2VzIHdob3NlIHN0YXR1cyBpcyBpbiB0aGUgcmFuZ2UgMTAwIHRvIDE5OSwgaW5jbHVzaXZlLFxuICAvLyAgICAgICAgYW5kIGlzIG5vdCAxMDEsIGFyZSB0byBiZSBpZ25vcmVkLCBleGNlcHQgZm9yIHRoZSBwdXJwb3NlcyBvZiBzZXR0aW5nXG4gIC8vICAgICAgICB0aW1pbmdJbmZvXHUyMDE5cyBmaW5hbCBuZXR3b3JrLXJlc3BvbnNlIHN0YXJ0IHRpbWUgYWJvdmUuXG5cbiAgLy8gICAgLSBJZiByZXF1ZXN0XHUyMDE5cyBoZWFkZXIgbGlzdCBjb250YWlucyBgVHJhbnNmZXItRW5jb2RpbmdgL2BjaHVua2VkYCBhbmRcbiAgLy8gICAgcmVzcG9uc2UgaXMgdHJhbnNmZXJyZWQgdmlhIEhUVFAvMS4wIG9yIG9sZGVyLCB0aGVuIHJldHVybiBhIG5ldHdvcmtcbiAgLy8gICAgZXJyb3IuXG5cbiAgLy8gICAgLSBJZiB0aGUgSFRUUCByZXF1ZXN0IHJlc3VsdHMgaW4gYSBUTFMgY2xpZW50IGNlcnRpZmljYXRlIGRpYWxvZywgdGhlbjpcblxuICAvLyAgICAgICAgMS4gSWYgcmVxdWVzdFx1MjAxOXMgd2luZG93IGlzIGFuIGVudmlyb25tZW50IHNldHRpbmdzIG9iamVjdCwgbWFrZSB0aGVcbiAgLy8gICAgICAgIGRpYWxvZyBhdmFpbGFibGUgaW4gcmVxdWVzdFx1MjAxOXMgd2luZG93LlxuXG4gIC8vICAgICAgICAyLiBPdGhlcndpc2UsIHJldHVybiBhIG5ldHdvcmsgZXJyb3IuXG5cbiAgLy8gVG8gdHJhbnNtaXQgcmVxdWVzdFx1MjAxOXMgYm9keSBib2R5LCBydW4gdGhlc2Ugc3RlcHM6XG4gIGxldCByZXF1ZXN0Qm9keSA9IG51bGxcbiAgLy8gMS4gSWYgYm9keSBpcyBudWxsIGFuZCBmZXRjaFBhcmFtc1x1MjAxOXMgcHJvY2VzcyByZXF1ZXN0IGVuZC1vZi1ib2R5IGlzXG4gIC8vIG5vbi1udWxsLCB0aGVuIHF1ZXVlIGEgZmV0Y2ggdGFzayBnaXZlbiBmZXRjaFBhcmFtc1x1MjAxOXMgcHJvY2VzcyByZXF1ZXN0XG4gIC8vIGVuZC1vZi1ib2R5IGFuZCBmZXRjaFBhcmFtc1x1MjAxOXMgdGFzayBkZXN0aW5hdGlvbi5cbiAgaWYgKHJlcXVlc3QuYm9keSA9PSBudWxsICYmIGZldGNoUGFyYW1zLnByb2Nlc3NSZXF1ZXN0RW5kT2ZCb2R5KSB7XG4gICAgcXVldWVNaWNyb3Rhc2soKCkgPT4gZmV0Y2hQYXJhbXMucHJvY2Vzc1JlcXVlc3RFbmRPZkJvZHkoKSlcbiAgfSBlbHNlIGlmIChyZXF1ZXN0LmJvZHkgIT0gbnVsbCkge1xuICAgIC8vIDIuIE90aGVyd2lzZSwgaWYgYm9keSBpcyBub24tbnVsbDpcblxuICAgIC8vICAgIDEuIExldCBwcm9jZXNzQm9keUNodW5rIGdpdmVuIGJ5dGVzIGJlIHRoZXNlIHN0ZXBzOlxuICAgIGNvbnN0IHByb2Nlc3NCb2R5Q2h1bmsgPSBhc3luYyBmdW5jdGlvbiAqIChieXRlcykge1xuICAgICAgLy8gMS4gSWYgdGhlIG9uZ29pbmcgZmV0Y2ggaXMgdGVybWluYXRlZCwgdGhlbiBhYm9ydCB0aGVzZSBzdGVwcy5cbiAgICAgIGlmIChpc0NhbmNlbGxlZChmZXRjaFBhcmFtcykpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIC8vIDIuIFJ1biB0aGlzIHN0ZXAgaW4gcGFyYWxsZWw6IHRyYW5zbWl0IGJ5dGVzLlxuICAgICAgeWllbGQgYnl0ZXNcblxuICAgICAgLy8gMy4gSWYgZmV0Y2hQYXJhbXNcdTIwMTlzIHByb2Nlc3MgcmVxdWVzdCBib2R5IGlzIG5vbi1udWxsLCB0aGVuIHJ1blxuICAgICAgLy8gZmV0Y2hQYXJhbXNcdTIwMTlzIHByb2Nlc3MgcmVxdWVzdCBib2R5IGdpdmVuIGJ5dGVzXHUyMDE5cyBsZW5ndGguXG4gICAgICBmZXRjaFBhcmFtcy5wcm9jZXNzUmVxdWVzdEJvZHlDaHVua0xlbmd0aD8uKGJ5dGVzLmJ5dGVMZW5ndGgpXG4gICAgfVxuXG4gICAgLy8gMi4gTGV0IHByb2Nlc3NFbmRPZkJvZHkgYmUgdGhlc2Ugc3RlcHM6XG4gICAgY29uc3QgcHJvY2Vzc0VuZE9mQm9keSA9ICgpID0+IHtcbiAgICAgIC8vIDEuIElmIGZldGNoUGFyYW1zIGlzIGNhbmNlbGVkLCB0aGVuIGFib3J0IHRoZXNlIHN0ZXBzLlxuICAgICAgaWYgKGlzQ2FuY2VsbGVkKGZldGNoUGFyYW1zKSkge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgLy8gMi4gSWYgZmV0Y2hQYXJhbXNcdTIwMTlzIHByb2Nlc3MgcmVxdWVzdCBlbmQtb2YtYm9keSBpcyBub24tbnVsbCxcbiAgICAgIC8vIHRoZW4gcnVuIGZldGNoUGFyYW1zXHUyMDE5cyBwcm9jZXNzIHJlcXVlc3QgZW5kLW9mLWJvZHkuXG4gICAgICBpZiAoZmV0Y2hQYXJhbXMucHJvY2Vzc1JlcXVlc3RFbmRPZkJvZHkpIHtcbiAgICAgICAgZmV0Y2hQYXJhbXMucHJvY2Vzc1JlcXVlc3RFbmRPZkJvZHkoKVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIDMuIExldCBwcm9jZXNzQm9keUVycm9yIGdpdmVuIGUgYmUgdGhlc2Ugc3RlcHM6XG4gICAgY29uc3QgcHJvY2Vzc0JvZHlFcnJvciA9IChlKSA9PiB7XG4gICAgICAvLyAxLiBJZiBmZXRjaFBhcmFtcyBpcyBjYW5jZWxlZCwgdGhlbiBhYm9ydCB0aGVzZSBzdGVwcy5cbiAgICAgIGlmIChpc0NhbmNlbGxlZChmZXRjaFBhcmFtcykpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIC8vIDIuIElmIGUgaXMgYW4gXCJBYm9ydEVycm9yXCIgRE9NRXhjZXB0aW9uLCB0aGVuIGFib3J0IGZldGNoUGFyYW1zXHUyMDE5cyBjb250cm9sbGVyLlxuICAgICAgaWYgKGUubmFtZSA9PT0gJ0Fib3J0RXJyb3InKSB7XG4gICAgICAgIGZldGNoUGFyYW1zLmNvbnRyb2xsZXIuYWJvcnQoKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZmV0Y2hQYXJhbXMuY29udHJvbGxlci50ZXJtaW5hdGUoZSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyA0LiBJbmNyZW1lbnRhbGx5IHJlYWQgcmVxdWVzdFx1MjAxOXMgYm9keSBnaXZlbiBwcm9jZXNzQm9keUNodW5rLCBwcm9jZXNzRW5kT2ZCb2R5LFxuICAgIC8vIHByb2Nlc3NCb2R5RXJyb3IsIGFuZCBmZXRjaFBhcmFtc1x1MjAxOXMgdGFzayBkZXN0aW5hdGlvbi5cbiAgICByZXF1ZXN0Qm9keSA9IChhc3luYyBmdW5jdGlvbiAqICgpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGZvciBhd2FpdCAoY29uc3QgYnl0ZXMgb2YgcmVxdWVzdC5ib2R5LnN0cmVhbSkge1xuICAgICAgICAgIHlpZWxkICogcHJvY2Vzc0JvZHlDaHVuayhieXRlcylcbiAgICAgICAgfVxuICAgICAgICBwcm9jZXNzRW5kT2ZCb2R5KClcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBwcm9jZXNzQm9keUVycm9yKGVycilcbiAgICAgIH1cbiAgICB9KSgpXG4gIH1cblxuICB0cnkge1xuICAgIC8vIHNvY2tldCBpcyBvbmx5IHByb3ZpZGVkIGZvciB3ZWJzb2NrZXRzXG4gICAgY29uc3QgeyBib2R5LCBzdGF0dXMsIHN0YXR1c1RleHQsIGhlYWRlcnNMaXN0LCBzb2NrZXQgfSA9IGF3YWl0IGRpc3BhdGNoKHsgYm9keTogcmVxdWVzdEJvZHkgfSlcblxuICAgIGlmIChzb2NrZXQpIHtcbiAgICAgIHJlc3BvbnNlID0gbWFrZVJlc3BvbnNlKHsgc3RhdHVzLCBzdGF0dXNUZXh0LCBoZWFkZXJzTGlzdCwgc29ja2V0IH0pXG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGl0ZXJhdG9yID0gYm9keVtTeW1ib2wuYXN5bmNJdGVyYXRvcl0oKVxuICAgICAgZmV0Y2hQYXJhbXMuY29udHJvbGxlci5uZXh0ID0gKCkgPT4gaXRlcmF0b3IubmV4dCgpXG5cbiAgICAgIHJlc3BvbnNlID0gbWFrZVJlc3BvbnNlKHsgc3RhdHVzLCBzdGF0dXNUZXh0LCBoZWFkZXJzTGlzdCB9KVxuICAgIH1cbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgLy8gMTAuIElmIGFib3J0ZWQsIHRoZW46XG4gICAgaWYgKGVyci5uYW1lID09PSAnQWJvcnRFcnJvcicpIHtcbiAgICAgIC8vIDEuIElmIGNvbm5lY3Rpb24gdXNlcyBIVFRQLzIsIHRoZW4gdHJhbnNtaXQgYW4gUlNUX1NUUkVBTSBmcmFtZS5cbiAgICAgIGZldGNoUGFyYW1zLmNvbnRyb2xsZXIuY29ubmVjdGlvbi5kZXN0cm95KClcblxuICAgICAgLy8gMi4gUmV0dXJuIHRoZSBhcHByb3ByaWF0ZSBuZXR3b3JrIGVycm9yIGZvciBmZXRjaFBhcmFtcy5cbiAgICAgIHJldHVybiBtYWtlQXBwcm9wcmlhdGVOZXR3b3JrRXJyb3IoZmV0Y2hQYXJhbXMsIGVycilcbiAgICB9XG5cbiAgICByZXR1cm4gbWFrZU5ldHdvcmtFcnJvcihlcnIpXG4gIH1cblxuICAvLyAxMS4gTGV0IHB1bGxBbGdvcml0aG0gYmUgYW4gYWN0aW9uIHRoYXQgcmVzdW1lcyB0aGUgb25nb2luZyBmZXRjaFxuICAvLyBpZiBpdCBpcyBzdXNwZW5kZWQuXG4gIGNvbnN0IHB1bGxBbGdvcml0aG0gPSBhc3luYyAoKSA9PiB7XG4gICAgYXdhaXQgZmV0Y2hQYXJhbXMuY29udHJvbGxlci5yZXN1bWUoKVxuICB9XG5cbiAgLy8gMTIuIExldCBjYW5jZWxBbGdvcml0aG0gYmUgYW4gYWxnb3JpdGhtIHRoYXQgYWJvcnRzIGZldGNoUGFyYW1zXHUyMDE5c1xuICAvLyBjb250cm9sbGVyIHdpdGggcmVhc29uLCBnaXZlbiByZWFzb24uXG4gIGNvbnN0IGNhbmNlbEFsZ29yaXRobSA9IChyZWFzb24pID0+IHtcbiAgICAvLyBJZiB0aGUgYWJvcnRlZCBmZXRjaCB3YXMgYWxyZWFkeSB0ZXJtaW5hdGVkLCB0aGVuIHdlIGRvIG5vdFxuICAgIC8vIG5lZWQgdG8gZG8gYW55dGhpbmcuXG4gICAgaWYgKCFpc0NhbmNlbGxlZChmZXRjaFBhcmFtcykpIHtcbiAgICAgIGZldGNoUGFyYW1zLmNvbnRyb2xsZXIuYWJvcnQocmVhc29uKVxuICAgIH1cbiAgfVxuXG4gIC8vIDEzLiBMZXQgaGlnaFdhdGVyTWFyayBiZSBhIG5vbi1uZWdhdGl2ZSwgbm9uLU5hTiBudW1iZXIsIGNob3NlbiBieVxuICAvLyB0aGUgdXNlciBhZ2VudC5cbiAgLy8gVE9ET1xuXG4gIC8vIDE0LiBMZXQgc2l6ZUFsZ29yaXRobSBiZSBhbiBhbGdvcml0aG0gdGhhdCBhY2NlcHRzIGEgY2h1bmsgb2JqZWN0XG4gIC8vIGFuZCByZXR1cm5zIGEgbm9uLW5lZ2F0aXZlLCBub24tTmFOLCBub24taW5maW5pdGUgbnVtYmVyLCBjaG9zZW4gYnkgdGhlIHVzZXIgYWdlbnQuXG4gIC8vIFRPRE9cblxuICAvLyAxNS4gTGV0IHN0cmVhbSBiZSBhIG5ldyBSZWFkYWJsZVN0cmVhbS5cbiAgLy8gMTYuIFNldCB1cCBzdHJlYW0gd2l0aCBieXRlIHJlYWRpbmcgc3VwcG9ydCB3aXRoIHB1bGxBbGdvcml0aG0gc2V0IHRvIHB1bGxBbGdvcml0aG0sXG4gIC8vICAgICBjYW5jZWxBbGdvcml0aG0gc2V0IHRvIGNhbmNlbEFsZ29yaXRobS5cbiAgY29uc3Qgc3RyZWFtID0gbmV3IFJlYWRhYmxlU3RyZWFtKFxuICAgIHtcbiAgICAgIGFzeW5jIHN0YXJ0IChjb250cm9sbGVyKSB7XG4gICAgICAgIGZldGNoUGFyYW1zLmNvbnRyb2xsZXIuY29udHJvbGxlciA9IGNvbnRyb2xsZXJcbiAgICAgIH0sXG4gICAgICBhc3luYyBwdWxsIChjb250cm9sbGVyKSB7XG4gICAgICAgIGF3YWl0IHB1bGxBbGdvcml0aG0oY29udHJvbGxlcilcbiAgICAgIH0sXG4gICAgICBhc3luYyBjYW5jZWwgKHJlYXNvbikge1xuICAgICAgICBhd2FpdCBjYW5jZWxBbGdvcml0aG0ocmVhc29uKVxuICAgICAgfSxcbiAgICAgIHR5cGU6ICdieXRlcydcbiAgICB9XG4gIClcblxuICAvLyAxNy4gUnVuIHRoZXNlIHN0ZXBzLCBidXQgYWJvcnQgd2hlbiB0aGUgb25nb2luZyBmZXRjaCBpcyB0ZXJtaW5hdGVkOlxuXG4gIC8vICAgIDEuIFNldCByZXNwb25zZVx1MjAxOXMgYm9keSB0byBhIG5ldyBib2R5IHdob3NlIHN0cmVhbSBpcyBzdHJlYW0uXG4gIHJlc3BvbnNlLmJvZHkgPSB7IHN0cmVhbSwgc291cmNlOiBudWxsLCBsZW5ndGg6IG51bGwgfVxuXG4gIC8vICAgIDIuIElmIHJlc3BvbnNlIGlzIG5vdCBhIG5ldHdvcmsgZXJyb3IgYW5kIHJlcXVlc3RcdTIwMTlzIGNhY2hlIG1vZGUgaXNcbiAgLy8gICAgbm90IFwibm8tc3RvcmVcIiwgdGhlbiB1cGRhdGUgcmVzcG9uc2UgaW4gaHR0cENhY2hlIGZvciByZXF1ZXN0LlxuICAvLyAgICBUT0RPXG5cbiAgLy8gICAgMy4gSWYgaW5jbHVkZUNyZWRlbnRpYWxzIGlzIHRydWUgYW5kIHRoZSB1c2VyIGFnZW50IGlzIG5vdCBjb25maWd1cmVkXG4gIC8vICAgIHRvIGJsb2NrIGNvb2tpZXMgZm9yIHJlcXVlc3QgKHNlZSBzZWN0aW9uIDcgb2YgW0NPT0tJRVNdKSwgdGhlbiBydW4gdGhlXG4gIC8vICAgIFwic2V0LWNvb2tpZS1zdHJpbmdcIiBwYXJzaW5nIGFsZ29yaXRobSAoc2VlIHNlY3Rpb24gNS4yIG9mIFtDT09LSUVTXSkgb25cbiAgLy8gICAgdGhlIHZhbHVlIG9mIGVhY2ggaGVhZGVyIHdob3NlIG5hbWUgaXMgYSBieXRlLWNhc2UtaW5zZW5zaXRpdmUgbWF0Y2ggZm9yXG4gIC8vICAgIGBTZXQtQ29va2llYCBpbiByZXNwb25zZVx1MjAxOXMgaGVhZGVyIGxpc3QsIGlmIGFueSwgYW5kIHJlcXVlc3RcdTIwMTlzIGN1cnJlbnQgVVJMLlxuICAvLyAgICBUT0RPXG5cbiAgLy8gMTguIElmIGFib3J0ZWQsIHRoZW46XG4gIC8vIFRPRE9cblxuICAvLyAxOS4gUnVuIHRoZXNlIHN0ZXBzIGluIHBhcmFsbGVsOlxuXG4gIC8vICAgIDEuIFJ1biB0aGVzZSBzdGVwcywgYnV0IGFib3J0IHdoZW4gZmV0Y2hQYXJhbXMgaXMgY2FuY2VsZWQ6XG4gIGZldGNoUGFyYW1zLmNvbnRyb2xsZXIub25BYm9ydGVkID0gb25BYm9ydGVkXG4gIGZldGNoUGFyYW1zLmNvbnRyb2xsZXIub24oJ3Rlcm1pbmF0ZWQnLCBvbkFib3J0ZWQpXG4gIGZldGNoUGFyYW1zLmNvbnRyb2xsZXIucmVzdW1lID0gYXN5bmMgKCkgPT4ge1xuICAgIC8vIDEuIFdoaWxlIHRydWVcbiAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgLy8gMS0zLiBTZWUgb25EYXRhLi4uXG5cbiAgICAgIC8vIDQuIFNldCBieXRlcyB0byB0aGUgcmVzdWx0IG9mIGhhbmRsaW5nIGNvbnRlbnQgY29kaW5ncyBnaXZlblxuICAgICAgLy8gY29kaW5ncyBhbmQgYnl0ZXMuXG4gICAgICBsZXQgYnl0ZXNcbiAgICAgIGxldCBpc0ZhaWx1cmVcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHsgZG9uZSwgdmFsdWUgfSA9IGF3YWl0IGZldGNoUGFyYW1zLmNvbnRyb2xsZXIubmV4dCgpXG5cbiAgICAgICAgaWYgKGlzQWJvcnRlZChmZXRjaFBhcmFtcykpIHtcbiAgICAgICAgICBicmVha1xuICAgICAgICB9XG5cbiAgICAgICAgYnl0ZXMgPSBkb25lID8gdW5kZWZpbmVkIDogdmFsdWVcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBpZiAoZmV0Y2hQYXJhbXMuY29udHJvbGxlci5lbmRlZCAmJiAhdGltaW5nSW5mby5lbmNvZGVkQm9keVNpemUpIHtcbiAgICAgICAgICAvLyB6bGliIGRvZXNuJ3QgbGlrZSBlbXB0eSBzdHJlYW1zLlxuICAgICAgICAgIGJ5dGVzID0gdW5kZWZpbmVkXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYnl0ZXMgPSBlcnJcblxuICAgICAgICAgIC8vIGVyciBtYXkgYmUgcHJvcGFnYXRlZCBmcm9tIHRoZSByZXN1bHQgb2YgY2FsbGluZyByZWFkYWJsZXN0cmVhbS5jYW5jZWwsXG4gICAgICAgICAgLy8gd2hpY2ggbWlnaHQgbm90IGJlIGFuIGVycm9yLiBodHRwczovL2dpdGh1Yi5jb20vbm9kZWpzL3VuZGljaS9pc3N1ZXMvMjAwOVxuICAgICAgICAgIGlzRmFpbHVyZSA9IHRydWVcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoYnl0ZXMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAvLyAyLiBPdGhlcndpc2UsIGlmIHRoZSBieXRlcyB0cmFuc21pc3Npb24gZm9yIHJlc3BvbnNlXHUyMDE5cyBtZXNzYWdlXG4gICAgICAgIC8vIGJvZHkgaXMgZG9uZSBub3JtYWxseSBhbmQgc3RyZWFtIGlzIHJlYWRhYmxlLCB0aGVuIGNsb3NlXG4gICAgICAgIC8vIHN0cmVhbSwgZmluYWxpemUgcmVzcG9uc2UgZm9yIGZldGNoUGFyYW1zIGFuZCByZXNwb25zZSwgYW5kXG4gICAgICAgIC8vIGFib3J0IHRoZXNlIGluLXBhcmFsbGVsIHN0ZXBzLlxuICAgICAgICByZWFkYWJsZVN0cmVhbUNsb3NlKGZldGNoUGFyYW1zLmNvbnRyb2xsZXIuY29udHJvbGxlcilcblxuICAgICAgICBmaW5hbGl6ZVJlc3BvbnNlKGZldGNoUGFyYW1zLCByZXNwb25zZSlcblxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgLy8gNS4gSW5jcmVhc2UgdGltaW5nSW5mb1x1MjAxOXMgZGVjb2RlZCBib2R5IHNpemUgYnkgYnl0ZXNcdTIwMTlzIGxlbmd0aC5cbiAgICAgIHRpbWluZ0luZm8uZGVjb2RlZEJvZHlTaXplICs9IGJ5dGVzPy5ieXRlTGVuZ3RoID8/IDBcblxuICAgICAgLy8gNi4gSWYgYnl0ZXMgaXMgZmFpbHVyZSwgdGhlbiB0ZXJtaW5hdGUgZmV0Y2hQYXJhbXNcdTIwMTlzIGNvbnRyb2xsZXIuXG4gICAgICBpZiAoaXNGYWlsdXJlKSB7XG4gICAgICAgIGZldGNoUGFyYW1zLmNvbnRyb2xsZXIudGVybWluYXRlKGJ5dGVzKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgLy8gNy4gRW5xdWV1ZSBhIFVpbnQ4QXJyYXkgd3JhcHBpbmcgYW4gQXJyYXlCdWZmZXIgY29udGFpbmluZyBieXRlc1xuICAgICAgLy8gaW50byBzdHJlYW0uXG4gICAgICBjb25zdCBidWZmZXIgPSBuZXcgVWludDhBcnJheShieXRlcylcbiAgICAgIGlmIChidWZmZXIuYnl0ZUxlbmd0aCkge1xuICAgICAgICBmZXRjaFBhcmFtcy5jb250cm9sbGVyLmNvbnRyb2xsZXIuZW5xdWV1ZShidWZmZXIpXG4gICAgICB9XG5cbiAgICAgIC8vIDguIElmIHN0cmVhbSBpcyBlcnJvcmVkLCB0aGVuIHRlcm1pbmF0ZSB0aGUgb25nb2luZyBmZXRjaC5cbiAgICAgIGlmIChpc0Vycm9yZWQoc3RyZWFtKSkge1xuICAgICAgICBmZXRjaFBhcmFtcy5jb250cm9sbGVyLnRlcm1pbmF0ZSgpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICAvLyA5LiBJZiBzdHJlYW0gZG9lc25cdTIwMTl0IG5lZWQgbW9yZSBkYXRhIGFzayB0aGUgdXNlciBhZ2VudCB0byBzdXNwZW5kXG4gICAgICAvLyB0aGUgb25nb2luZyBmZXRjaC5cbiAgICAgIGlmIChmZXRjaFBhcmFtcy5jb250cm9sbGVyLmNvbnRyb2xsZXIuZGVzaXJlZFNpemUgPD0gMCkge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyAgICAyLiBJZiBhYm9ydGVkLCB0aGVuOlxuICBmdW5jdGlvbiBvbkFib3J0ZWQgKHJlYXNvbikge1xuICAgIC8vIDIuIElmIGZldGNoUGFyYW1zIGlzIGFib3J0ZWQsIHRoZW46XG4gICAgaWYgKGlzQWJvcnRlZChmZXRjaFBhcmFtcykpIHtcbiAgICAgIC8vIDEuIFNldCByZXNwb25zZVx1MjAxOXMgYWJvcnRlZCBmbGFnLlxuICAgICAgcmVzcG9uc2UuYWJvcnRlZCA9IHRydWVcblxuICAgICAgLy8gMi4gSWYgc3RyZWFtIGlzIHJlYWRhYmxlLCB0aGVuIGVycm9yIHN0cmVhbSB3aXRoIHRoZSByZXN1bHQgb2ZcbiAgICAgIC8vICAgIGRlc2VyaWFsaXplIGEgc2VyaWFsaXplZCBhYm9ydCByZWFzb24gZ2l2ZW4gZmV0Y2hQYXJhbXNcdTIwMTlzXG4gICAgICAvLyAgICBjb250cm9sbGVyXHUyMDE5cyBzZXJpYWxpemVkIGFib3J0IHJlYXNvbiBhbmQgYW5cbiAgICAgIC8vICAgIGltcGxlbWVudGF0aW9uLWRlZmluZWQgcmVhbG0uXG4gICAgICBpZiAoaXNSZWFkYWJsZShzdHJlYW0pKSB7XG4gICAgICAgIGZldGNoUGFyYW1zLmNvbnRyb2xsZXIuY29udHJvbGxlci5lcnJvcihcbiAgICAgICAgICBmZXRjaFBhcmFtcy5jb250cm9sbGVyLnNlcmlhbGl6ZWRBYm9ydFJlYXNvblxuICAgICAgICApXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIDMuIE90aGVyd2lzZSwgaWYgc3RyZWFtIGlzIHJlYWRhYmxlLCBlcnJvciBzdHJlYW0gd2l0aCBhIFR5cGVFcnJvci5cbiAgICAgIGlmIChpc1JlYWRhYmxlKHN0cmVhbSkpIHtcbiAgICAgICAgZmV0Y2hQYXJhbXMuY29udHJvbGxlci5jb250cm9sbGVyLmVycm9yKG5ldyBUeXBlRXJyb3IoJ3Rlcm1pbmF0ZWQnLCB7XG4gICAgICAgICAgY2F1c2U6IGlzRXJyb3JMaWtlKHJlYXNvbikgPyByZWFzb24gOiB1bmRlZmluZWRcbiAgICAgICAgfSkpXG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gNC4gSWYgY29ubmVjdGlvbiB1c2VzIEhUVFAvMiwgdGhlbiB0cmFuc21pdCBhbiBSU1RfU1RSRUFNIGZyYW1lLlxuICAgIC8vIDUuIE90aGVyd2lzZSwgdGhlIHVzZXIgYWdlbnQgc2hvdWxkIGNsb3NlIGNvbm5lY3Rpb24gdW5sZXNzIGl0IHdvdWxkIGJlIGJhZCBmb3IgcGVyZm9ybWFuY2UgdG8gZG8gc28uXG4gICAgZmV0Y2hQYXJhbXMuY29udHJvbGxlci5jb25uZWN0aW9uLmRlc3Ryb3koKVxuICB9XG5cbiAgLy8gMjAuIFJldHVybiByZXNwb25zZS5cbiAgcmV0dXJuIHJlc3BvbnNlXG5cbiAgZnVuY3Rpb24gZGlzcGF0Y2ggKHsgYm9keSB9KSB7XG4gICAgY29uc3QgdXJsID0gcmVxdWVzdEN1cnJlbnRVUkwocmVxdWVzdClcbiAgICAvKiogQHR5cGUge2ltcG9ydCgnLi4vLi4nKS5BZ2VudH0gKi9cbiAgICBjb25zdCBhZ2VudCA9IGZldGNoUGFyYW1zLmNvbnRyb2xsZXIuZGlzcGF0Y2hlclxuXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IGFnZW50LmRpc3BhdGNoKFxuICAgICAge1xuICAgICAgICBwYXRoOiB1cmwucGF0aG5hbWUgKyB1cmwuc2VhcmNoLFxuICAgICAgICBvcmlnaW46IHVybC5vcmlnaW4sXG4gICAgICAgIG1ldGhvZDogcmVxdWVzdC5tZXRob2QsXG4gICAgICAgIGJvZHk6IGFnZW50LmlzTW9ja0FjdGl2ZSA/IHJlcXVlc3QuYm9keSAmJiAocmVxdWVzdC5ib2R5LnNvdXJjZSB8fCByZXF1ZXN0LmJvZHkuc3RyZWFtKSA6IGJvZHksXG4gICAgICAgIGhlYWRlcnM6IHJlcXVlc3QuaGVhZGVyc0xpc3QuZW50cmllcyxcbiAgICAgICAgbWF4UmVkaXJlY3Rpb25zOiAwLFxuICAgICAgICB1cGdyYWRlOiByZXF1ZXN0Lm1vZGUgPT09ICd3ZWJzb2NrZXQnID8gJ3dlYnNvY2tldCcgOiB1bmRlZmluZWRcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJvZHk6IG51bGwsXG4gICAgICAgIGFib3J0OiBudWxsLFxuXG4gICAgICAgIG9uQ29ubmVjdCAoYWJvcnQpIHtcbiAgICAgICAgICAvLyBUT0RPIChmaXgpOiBEbyB3ZSBuZWVkIGNvbm5lY3Rpb24gaGVyZT9cbiAgICAgICAgICBjb25zdCB7IGNvbm5lY3Rpb24gfSA9IGZldGNoUGFyYW1zLmNvbnRyb2xsZXJcblxuICAgICAgICAgIC8vIFNldCB0aW1pbmdJbmZvXHUyMDE5cyBmaW5hbCBjb25uZWN0aW9uIHRpbWluZyBpbmZvIHRvIHRoZSByZXN1bHQgb2YgY2FsbGluZyBjbGFtcCBhbmQgY29hcnNlblxuICAgICAgICAgIC8vIGNvbm5lY3Rpb24gdGltaW5nIGluZm8gd2l0aCBjb25uZWN0aW9uXHUyMDE5cyB0aW1pbmcgaW5mbywgdGltaW5nSW5mb1x1MjAxOXMgcG9zdC1yZWRpcmVjdCBzdGFydFxuICAgICAgICAgIC8vIHRpbWUsIGFuZCBmZXRjaFBhcmFtc1x1MjAxOXMgY3Jvc3Mtb3JpZ2luIGlzb2xhdGVkIGNhcGFiaWxpdHkuXG4gICAgICAgICAgLy8gVE9ETzogaW1wbGVtZW50IGNvbm5lY3Rpb24gdGltaW5nXG4gICAgICAgICAgdGltaW5nSW5mby5maW5hbENvbm5lY3Rpb25UaW1pbmdJbmZvID0gY2xhbXBBbmRDb2Fyc2VuQ29ubmVjdGlvblRpbWluZ0luZm8odW5kZWZpbmVkLCB0aW1pbmdJbmZvLnBvc3RSZWRpcmVjdFN0YXJ0VGltZSwgZmV0Y2hQYXJhbXMuY3Jvc3NPcmlnaW5Jc29sYXRlZENhcGFiaWxpdHkpXG5cbiAgICAgICAgICBpZiAoY29ubmVjdGlvbi5kZXN0cm95ZWQpIHtcbiAgICAgICAgICAgIGFib3J0KG5ldyBET01FeGNlcHRpb24oJ1RoZSBvcGVyYXRpb24gd2FzIGFib3J0ZWQuJywgJ0Fib3J0RXJyb3InKSlcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgZmV0Y2hQYXJhbXMuY29udHJvbGxlci5vbigndGVybWluYXRlZCcsIGFib3J0KVxuICAgICAgICAgICAgdGhpcy5hYm9ydCA9IGNvbm5lY3Rpb24uYWJvcnQgPSBhYm9ydFxuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIFNldCB0aW1pbmdJbmZvXHUyMDE5cyBmaW5hbCBuZXR3b3JrLXJlcXVlc3Qgc3RhcnQgdGltZSB0byB0aGUgY29hcnNlbmVkIHNoYXJlZCBjdXJyZW50IHRpbWUgZ2l2ZW5cbiAgICAgICAgICAvLyBmZXRjaFBhcmFtc1x1MjAxOXMgY3Jvc3Mtb3JpZ2luIGlzb2xhdGVkIGNhcGFiaWxpdHkuXG4gICAgICAgICAgdGltaW5nSW5mby5maW5hbE5ldHdvcmtSZXF1ZXN0U3RhcnRUaW1lID0gY29hcnNlbmVkU2hhcmVkQ3VycmVudFRpbWUoZmV0Y2hQYXJhbXMuY3Jvc3NPcmlnaW5Jc29sYXRlZENhcGFiaWxpdHkpXG4gICAgICAgIH0sXG5cbiAgICAgICAgb25SZXNwb25zZVN0YXJ0ZWQgKCkge1xuICAgICAgICAgIC8vIFNldCB0aW1pbmdJbmZvXHUyMDE5cyBmaW5hbCBuZXR3b3JrLXJlc3BvbnNlIHN0YXJ0IHRpbWUgdG8gdGhlIGNvYXJzZW5lZCBzaGFyZWQgY3VycmVudFxuICAgICAgICAgIC8vIHRpbWUgZ2l2ZW4gZmV0Y2hQYXJhbXNcdTIwMTlzIGNyb3NzLW9yaWdpbiBpc29sYXRlZCBjYXBhYmlsaXR5LCBpbW1lZGlhdGVseSBhZnRlciB0aGVcbiAgICAgICAgICAvLyB1c2VyIGFnZW50XHUyMDE5cyBIVFRQIHBhcnNlciByZWNlaXZlcyB0aGUgZmlyc3QgYnl0ZSBvZiB0aGUgcmVzcG9uc2UgKGUuZy4sIGZyYW1lIGhlYWRlclxuICAgICAgICAgIC8vIGJ5dGVzIGZvciBIVFRQLzIgb3IgcmVzcG9uc2Ugc3RhdHVzIGxpbmUgZm9yIEhUVFAvMS54KS5cbiAgICAgICAgICB0aW1pbmdJbmZvLmZpbmFsTmV0d29ya1Jlc3BvbnNlU3RhcnRUaW1lID0gY29hcnNlbmVkU2hhcmVkQ3VycmVudFRpbWUoZmV0Y2hQYXJhbXMuY3Jvc3NPcmlnaW5Jc29sYXRlZENhcGFiaWxpdHkpXG4gICAgICAgIH0sXG5cbiAgICAgICAgb25IZWFkZXJzIChzdGF0dXMsIHJhd0hlYWRlcnMsIHJlc3VtZSwgc3RhdHVzVGV4dCkge1xuICAgICAgICAgIGlmIChzdGF0dXMgPCAyMDApIHtcbiAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgIH1cblxuICAgICAgICAgIC8qKiBAdHlwZSB7c3RyaW5nW119ICovXG4gICAgICAgICAgbGV0IGNvZGluZ3MgPSBbXVxuICAgICAgICAgIGxldCBsb2NhdGlvbiA9ICcnXG5cbiAgICAgICAgICBjb25zdCBoZWFkZXJzTGlzdCA9IG5ldyBIZWFkZXJzTGlzdCgpXG5cbiAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJhd0hlYWRlcnMubGVuZ3RoOyBpICs9IDIpIHtcbiAgICAgICAgICAgIGhlYWRlcnNMaXN0LmFwcGVuZChidWZmZXJUb0xvd2VyQ2FzZWRIZWFkZXJOYW1lKHJhd0hlYWRlcnNbaV0pLCByYXdIZWFkZXJzW2kgKyAxXS50b1N0cmluZygnbGF0aW4xJyksIHRydWUpXG4gICAgICAgICAgfVxuICAgICAgICAgIGNvbnN0IGNvbnRlbnRFbmNvZGluZyA9IGhlYWRlcnNMaXN0LmdldCgnY29udGVudC1lbmNvZGluZycsIHRydWUpXG4gICAgICAgICAgaWYgKGNvbnRlbnRFbmNvZGluZykge1xuICAgICAgICAgICAgLy8gaHR0cHM6Ly93d3cucmZjLWVkaXRvci5vcmcvcmZjL3JmYzcyMzEjc2VjdGlvbi0zLjEuMi4xXG4gICAgICAgICAgICAvLyBcIkFsbCBjb250ZW50LWNvZGluZyB2YWx1ZXMgYXJlIGNhc2UtaW5zZW5zaXRpdmUuLi5cIlxuICAgICAgICAgICAgY29kaW5ncyA9IGNvbnRlbnRFbmNvZGluZy50b0xvd2VyQ2FzZSgpLnNwbGl0KCcsJykubWFwKCh4KSA9PiB4LnRyaW0oKSlcbiAgICAgICAgICB9XG4gICAgICAgICAgbG9jYXRpb24gPSBoZWFkZXJzTGlzdC5nZXQoJ2xvY2F0aW9uJywgdHJ1ZSlcblxuICAgICAgICAgIHRoaXMuYm9keSA9IG5ldyBSZWFkYWJsZSh7IHJlYWQ6IHJlc3VtZSB9KVxuXG4gICAgICAgICAgY29uc3QgZGVjb2RlcnMgPSBbXVxuXG4gICAgICAgICAgY29uc3Qgd2lsbEZvbGxvdyA9IGxvY2F0aW9uICYmIHJlcXVlc3QucmVkaXJlY3QgPT09ICdmb2xsb3cnICYmXG4gICAgICAgICAgICByZWRpcmVjdFN0YXR1c1NldC5oYXMoc3RhdHVzKVxuXG4gICAgICAgICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRUUC9IZWFkZXJzL0NvbnRlbnQtRW5jb2RpbmdcbiAgICAgICAgICBpZiAoY29kaW5ncy5sZW5ndGggIT09IDAgJiYgcmVxdWVzdC5tZXRob2QgIT09ICdIRUFEJyAmJiByZXF1ZXN0Lm1ldGhvZCAhPT0gJ0NPTk5FQ1QnICYmICFudWxsQm9keVN0YXR1cy5pbmNsdWRlcyhzdGF0dXMpICYmICF3aWxsRm9sbG93KSB7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gY29kaW5ncy5sZW5ndGggLSAxOyBpID49IDA7IC0taSkge1xuICAgICAgICAgICAgICBjb25zdCBjb2RpbmcgPSBjb2RpbmdzW2ldXG4gICAgICAgICAgICAgIC8vIGh0dHBzOi8vd3d3LnJmYy1lZGl0b3Iub3JnL3JmYy9yZmM5MTEyLmh0bWwjc2VjdGlvbi03LjJcbiAgICAgICAgICAgICAgaWYgKGNvZGluZyA9PT0gJ3gtZ3ppcCcgfHwgY29kaW5nID09PSAnZ3ppcCcpIHtcbiAgICAgICAgICAgICAgICBkZWNvZGVycy5wdXNoKHpsaWIuY3JlYXRlR3VuemlwKHtcbiAgICAgICAgICAgICAgICAgIC8vIEJlIGxlc3Mgc3RyaWN0IHdoZW4gZGVjb2RpbmcgY29tcHJlc3NlZCByZXNwb25zZXMsIHNpbmNlIHNvbWV0aW1lc1xuICAgICAgICAgICAgICAgICAgLy8gc2VydmVycyBzZW5kIHNsaWdodGx5IGludmFsaWQgcmVzcG9uc2VzIHRoYXQgYXJlIHN0aWxsIGFjY2VwdGVkXG4gICAgICAgICAgICAgICAgICAvLyBieSBjb21tb24gYnJvd3NlcnMuXG4gICAgICAgICAgICAgICAgICAvLyBBbHdheXMgdXNpbmcgWl9TWU5DX0ZMVVNIIGlzIHdoYXQgY1VSTCBkb2VzLlxuICAgICAgICAgICAgICAgICAgZmx1c2g6IHpsaWIuY29uc3RhbnRzLlpfU1lOQ19GTFVTSCxcbiAgICAgICAgICAgICAgICAgIGZpbmlzaEZsdXNoOiB6bGliLmNvbnN0YW50cy5aX1NZTkNfRkxVU0hcbiAgICAgICAgICAgICAgICB9KSlcbiAgICAgICAgICAgICAgfSBlbHNlIGlmIChjb2RpbmcgPT09ICdkZWZsYXRlJykge1xuICAgICAgICAgICAgICAgIGRlY29kZXJzLnB1c2goY3JlYXRlSW5mbGF0ZSh7XG4gICAgICAgICAgICAgICAgICBmbHVzaDogemxpYi5jb25zdGFudHMuWl9TWU5DX0ZMVVNILFxuICAgICAgICAgICAgICAgICAgZmluaXNoRmx1c2g6IHpsaWIuY29uc3RhbnRzLlpfU1lOQ19GTFVTSFxuICAgICAgICAgICAgICAgIH0pKVxuICAgICAgICAgICAgICB9IGVsc2UgaWYgKGNvZGluZyA9PT0gJ2JyJykge1xuICAgICAgICAgICAgICAgIGRlY29kZXJzLnB1c2goemxpYi5jcmVhdGVCcm90bGlEZWNvbXByZXNzKHtcbiAgICAgICAgICAgICAgICAgIGZsdXNoOiB6bGliLmNvbnN0YW50cy5CUk9UTElfT1BFUkFUSU9OX0ZMVVNILFxuICAgICAgICAgICAgICAgICAgZmluaXNoRmx1c2g6IHpsaWIuY29uc3RhbnRzLkJST1RMSV9PUEVSQVRJT05fRkxVU0hcbiAgICAgICAgICAgICAgICB9KSlcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBkZWNvZGVycy5sZW5ndGggPSAwXG4gICAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IG9uRXJyb3IgPSB0aGlzLm9uRXJyb3IuYmluZCh0aGlzKVxuXG4gICAgICAgICAgcmVzb2x2ZSh7XG4gICAgICAgICAgICBzdGF0dXMsXG4gICAgICAgICAgICBzdGF0dXNUZXh0LFxuICAgICAgICAgICAgaGVhZGVyc0xpc3QsXG4gICAgICAgICAgICBib2R5OiBkZWNvZGVycy5sZW5ndGhcbiAgICAgICAgICAgICAgPyBwaXBlbGluZSh0aGlzLmJvZHksIC4uLmRlY29kZXJzLCAoZXJyKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICAgICAgdGhpcy5vbkVycm9yKGVycilcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pLm9uKCdlcnJvcicsIG9uRXJyb3IpXG4gICAgICAgICAgICAgIDogdGhpcy5ib2R5Lm9uKCdlcnJvcicsIG9uRXJyb3IpXG4gICAgICAgICAgfSlcblxuICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgICAgIH0sXG5cbiAgICAgICAgb25EYXRhIChjaHVuaykge1xuICAgICAgICAgIGlmIChmZXRjaFBhcmFtcy5jb250cm9sbGVyLmR1bXApIHtcbiAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIDEuIElmIG9uZSBvciBtb3JlIGJ5dGVzIGhhdmUgYmVlbiB0cmFuc21pdHRlZCBmcm9tIHJlc3BvbnNlXHUyMDE5c1xuICAgICAgICAgIC8vIG1lc3NhZ2UgYm9keSwgdGhlbjpcblxuICAgICAgICAgIC8vICAxLiBMZXQgYnl0ZXMgYmUgdGhlIHRyYW5zbWl0dGVkIGJ5dGVzLlxuICAgICAgICAgIGNvbnN0IGJ5dGVzID0gY2h1bmtcblxuICAgICAgICAgIC8vICAyLiBMZXQgY29kaW5ncyBiZSB0aGUgcmVzdWx0IG9mIGV4dHJhY3RpbmcgaGVhZGVyIGxpc3QgdmFsdWVzXG4gICAgICAgICAgLy8gIGdpdmVuIGBDb250ZW50LUVuY29kaW5nYCBhbmQgcmVzcG9uc2VcdTIwMTlzIGhlYWRlciBsaXN0LlxuICAgICAgICAgIC8vICBTZWUgcHVsbEFsZ29yaXRobS5cblxuICAgICAgICAgIC8vICAzLiBJbmNyZWFzZSB0aW1pbmdJbmZvXHUyMDE5cyBlbmNvZGVkIGJvZHkgc2l6ZSBieSBieXRlc1x1MjAxOXMgbGVuZ3RoLlxuICAgICAgICAgIHRpbWluZ0luZm8uZW5jb2RlZEJvZHlTaXplICs9IGJ5dGVzLmJ5dGVMZW5ndGhcblxuICAgICAgICAgIC8vICA0LiBTZWUgcHVsbEFsZ29yaXRobS4uLlxuXG4gICAgICAgICAgcmV0dXJuIHRoaXMuYm9keS5wdXNoKGJ5dGVzKVxuICAgICAgICB9LFxuXG4gICAgICAgIG9uQ29tcGxldGUgKCkge1xuICAgICAgICAgIGlmICh0aGlzLmFib3J0KSB7XG4gICAgICAgICAgICBmZXRjaFBhcmFtcy5jb250cm9sbGVyLm9mZigndGVybWluYXRlZCcsIHRoaXMuYWJvcnQpXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKGZldGNoUGFyYW1zLmNvbnRyb2xsZXIub25BYm9ydGVkKSB7XG4gICAgICAgICAgICBmZXRjaFBhcmFtcy5jb250cm9sbGVyLm9mZigndGVybWluYXRlZCcsIGZldGNoUGFyYW1zLmNvbnRyb2xsZXIub25BYm9ydGVkKVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGZldGNoUGFyYW1zLmNvbnRyb2xsZXIuZW5kZWQgPSB0cnVlXG5cbiAgICAgICAgICB0aGlzLmJvZHkucHVzaChudWxsKVxuICAgICAgICB9LFxuXG4gICAgICAgIG9uRXJyb3IgKGVycm9yKSB7XG4gICAgICAgICAgaWYgKHRoaXMuYWJvcnQpIHtcbiAgICAgICAgICAgIGZldGNoUGFyYW1zLmNvbnRyb2xsZXIub2ZmKCd0ZXJtaW5hdGVkJywgdGhpcy5hYm9ydClcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB0aGlzLmJvZHk/LmRlc3Ryb3koZXJyb3IpXG5cbiAgICAgICAgICBmZXRjaFBhcmFtcy5jb250cm9sbGVyLnRlcm1pbmF0ZShlcnJvcilcblxuICAgICAgICAgIHJlamVjdChlcnJvcilcbiAgICAgICAgfSxcblxuICAgICAgICBvblVwZ3JhZGUgKHN0YXR1cywgcmF3SGVhZGVycywgc29ja2V0KSB7XG4gICAgICAgICAgaWYgKHN0YXR1cyAhPT0gMTAxKSB7XG4gICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCBoZWFkZXJzTGlzdCA9IG5ldyBIZWFkZXJzTGlzdCgpXG5cbiAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJhd0hlYWRlcnMubGVuZ3RoOyBpICs9IDIpIHtcbiAgICAgICAgICAgIGhlYWRlcnNMaXN0LmFwcGVuZChidWZmZXJUb0xvd2VyQ2FzZWRIZWFkZXJOYW1lKHJhd0hlYWRlcnNbaV0pLCByYXdIZWFkZXJzW2kgKyAxXS50b1N0cmluZygnbGF0aW4xJyksIHRydWUpXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmVzb2x2ZSh7XG4gICAgICAgICAgICBzdGF0dXMsXG4gICAgICAgICAgICBzdGF0dXNUZXh0OiBTVEFUVVNfQ09ERVNbc3RhdHVzXSxcbiAgICAgICAgICAgIGhlYWRlcnNMaXN0LFxuICAgICAgICAgICAgc29ja2V0XG4gICAgICAgICAgfSlcblxuICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICApKVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBmZXRjaCxcbiAgRmV0Y2gsXG4gIGZldGNoaW5nLFxuICBmaW5hbGl6ZUFuZFJlcG9ydFRpbWluZ1xufVxuIiwgIid1c2Ugc3RyaWN0J1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAga1N0YXRlOiBTeW1ib2woJ0ZpbGVSZWFkZXIgc3RhdGUnKSxcbiAga1Jlc3VsdDogU3ltYm9sKCdGaWxlUmVhZGVyIHJlc3VsdCcpLFxuICBrRXJyb3I6IFN5bWJvbCgnRmlsZVJlYWRlciBlcnJvcicpLFxuICBrTGFzdFByb2dyZXNzRXZlbnRGaXJlZDogU3ltYm9sKCdGaWxlUmVhZGVyIGxhc3QgcHJvZ3Jlc3MgZXZlbnQgZmlyZWQgdGltZXN0YW1wJyksXG4gIGtFdmVudHM6IFN5bWJvbCgnRmlsZVJlYWRlciBldmVudHMnKSxcbiAga0Fib3J0ZWQ6IFN5bWJvbCgnRmlsZVJlYWRlciBhYm9ydGVkJylcbn1cbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgeyB3ZWJpZGwgfSA9IHJlcXVpcmUoJy4uL2ZldGNoL3dlYmlkbCcpXG5cbmNvbnN0IGtTdGF0ZSA9IFN5bWJvbCgnUHJvZ3Jlc3NFdmVudCBzdGF0ZScpXG5cbi8qKlxuICogQHNlZSBodHRwczovL3hoci5zcGVjLndoYXR3Zy5vcmcvI3Byb2dyZXNzZXZlbnRcbiAqL1xuY2xhc3MgUHJvZ3Jlc3NFdmVudCBleHRlbmRzIEV2ZW50IHtcbiAgY29uc3RydWN0b3IgKHR5cGUsIGV2ZW50SW5pdERpY3QgPSB7fSkge1xuICAgIHR5cGUgPSB3ZWJpZGwuY29udmVydGVycy5ET01TdHJpbmcodHlwZSwgJ1Byb2dyZXNzRXZlbnQgY29uc3RydWN0b3InLCAndHlwZScpXG4gICAgZXZlbnRJbml0RGljdCA9IHdlYmlkbC5jb252ZXJ0ZXJzLlByb2dyZXNzRXZlbnRJbml0KGV2ZW50SW5pdERpY3QgPz8ge30pXG5cbiAgICBzdXBlcih0eXBlLCBldmVudEluaXREaWN0KVxuXG4gICAgdGhpc1trU3RhdGVdID0ge1xuICAgICAgbGVuZ3RoQ29tcHV0YWJsZTogZXZlbnRJbml0RGljdC5sZW5ndGhDb21wdXRhYmxlLFxuICAgICAgbG9hZGVkOiBldmVudEluaXREaWN0LmxvYWRlZCxcbiAgICAgIHRvdGFsOiBldmVudEluaXREaWN0LnRvdGFsXG4gICAgfVxuICB9XG5cbiAgZ2V0IGxlbmd0aENvbXB1dGFibGUgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFByb2dyZXNzRXZlbnQpXG5cbiAgICByZXR1cm4gdGhpc1trU3RhdGVdLmxlbmd0aENvbXB1dGFibGVcbiAgfVxuXG4gIGdldCBsb2FkZWQgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFByb2dyZXNzRXZlbnQpXG5cbiAgICByZXR1cm4gdGhpc1trU3RhdGVdLmxvYWRlZFxuICB9XG5cbiAgZ2V0IHRvdGFsICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBQcm9ncmVzc0V2ZW50KVxuXG4gICAgcmV0dXJuIHRoaXNba1N0YXRlXS50b3RhbFxuICB9XG59XG5cbndlYmlkbC5jb252ZXJ0ZXJzLlByb2dyZXNzRXZlbnRJbml0ID0gd2ViaWRsLmRpY3Rpb25hcnlDb252ZXJ0ZXIoW1xuICB7XG4gICAga2V5OiAnbGVuZ3RoQ29tcHV0YWJsZScsXG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVycy5ib29sZWFuLFxuICAgIGRlZmF1bHRWYWx1ZTogKCkgPT4gZmFsc2VcbiAgfSxcbiAge1xuICAgIGtleTogJ2xvYWRlZCcsXG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVyc1sndW5zaWduZWQgbG9uZyBsb25nJ10sXG4gICAgZGVmYXVsdFZhbHVlOiAoKSA9PiAwXG4gIH0sXG4gIHtcbiAgICBrZXk6ICd0b3RhbCcsXG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVyc1sndW5zaWduZWQgbG9uZyBsb25nJ10sXG4gICAgZGVmYXVsdFZhbHVlOiAoKSA9PiAwXG4gIH0sXG4gIHtcbiAgICBrZXk6ICdidWJibGVzJyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzLmJvb2xlYW4sXG4gICAgZGVmYXVsdFZhbHVlOiAoKSA9PiBmYWxzZVxuICB9LFxuICB7XG4gICAga2V5OiAnY2FuY2VsYWJsZScsXG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVycy5ib29sZWFuLFxuICAgIGRlZmF1bHRWYWx1ZTogKCkgPT4gZmFsc2VcbiAgfSxcbiAge1xuICAgIGtleTogJ2NvbXBvc2VkJyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzLmJvb2xlYW4sXG4gICAgZGVmYXVsdFZhbHVlOiAoKSA9PiBmYWxzZVxuICB9XG5dKVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgUHJvZ3Jlc3NFdmVudFxufVxuIiwgIid1c2Ugc3RyaWN0J1xuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly9lbmNvZGluZy5zcGVjLndoYXR3Zy5vcmcvI2NvbmNlcHQtZW5jb2RpbmctZ2V0XG4gKiBAcGFyYW0ge3N0cmluZ3x1bmRlZmluZWR9IGxhYmVsXG4gKi9cbmZ1bmN0aW9uIGdldEVuY29kaW5nIChsYWJlbCkge1xuICBpZiAoIWxhYmVsKSB7XG4gICAgcmV0dXJuICdmYWlsdXJlJ1xuICB9XG5cbiAgLy8gMS4gUmVtb3ZlIGFueSBsZWFkaW5nIGFuZCB0cmFpbGluZyBBU0NJSSB3aGl0ZXNwYWNlIGZyb20gbGFiZWwuXG4gIC8vIDIuIElmIGxhYmVsIGlzIGFuIEFTQ0lJIGNhc2UtaW5zZW5zaXRpdmUgbWF0Y2ggZm9yIGFueSBvZiB0aGVcbiAgLy8gICAgbGFiZWxzIGxpc3RlZCBpbiB0aGUgdGFibGUgYmVsb3csIHRoZW4gcmV0dXJuIHRoZVxuICAvLyAgICBjb3JyZXNwb25kaW5nIGVuY29kaW5nOyBvdGhlcndpc2UgcmV0dXJuIGZhaWx1cmUuXG4gIHN3aXRjaCAobGFiZWwudHJpbSgpLnRvTG93ZXJDYXNlKCkpIHtcbiAgICBjYXNlICd1bmljb2RlLTEtMS11dGYtOCc6XG4gICAgY2FzZSAndW5pY29kZTExdXRmOCc6XG4gICAgY2FzZSAndW5pY29kZTIwdXRmOCc6XG4gICAgY2FzZSAndXRmLTgnOlxuICAgIGNhc2UgJ3V0ZjgnOlxuICAgIGNhc2UgJ3gtdW5pY29kZTIwdXRmOCc6XG4gICAgICByZXR1cm4gJ1VURi04J1xuICAgIGNhc2UgJzg2Nic6XG4gICAgY2FzZSAnY3A4NjYnOlxuICAgIGNhc2UgJ2NzaWJtODY2JzpcbiAgICBjYXNlICdpYm04NjYnOlxuICAgICAgcmV0dXJuICdJQk04NjYnXG4gICAgY2FzZSAnY3Npc29sYXRpbjInOlxuICAgIGNhc2UgJ2lzby04ODU5LTInOlxuICAgIGNhc2UgJ2lzby1pci0xMDEnOlxuICAgIGNhc2UgJ2lzbzg4NTktMic6XG4gICAgY2FzZSAnaXNvODg1OTInOlxuICAgIGNhc2UgJ2lzb184ODU5LTInOlxuICAgIGNhc2UgJ2lzb184ODU5LTI6MTk4Nyc6XG4gICAgY2FzZSAnbDInOlxuICAgIGNhc2UgJ2xhdGluMic6XG4gICAgICByZXR1cm4gJ0lTTy04ODU5LTInXG4gICAgY2FzZSAnY3Npc29sYXRpbjMnOlxuICAgIGNhc2UgJ2lzby04ODU5LTMnOlxuICAgIGNhc2UgJ2lzby1pci0xMDknOlxuICAgIGNhc2UgJ2lzbzg4NTktMyc6XG4gICAgY2FzZSAnaXNvODg1OTMnOlxuICAgIGNhc2UgJ2lzb184ODU5LTMnOlxuICAgIGNhc2UgJ2lzb184ODU5LTM6MTk4OCc6XG4gICAgY2FzZSAnbDMnOlxuICAgIGNhc2UgJ2xhdGluMyc6XG4gICAgICByZXR1cm4gJ0lTTy04ODU5LTMnXG4gICAgY2FzZSAnY3Npc29sYXRpbjQnOlxuICAgIGNhc2UgJ2lzby04ODU5LTQnOlxuICAgIGNhc2UgJ2lzby1pci0xMTAnOlxuICAgIGNhc2UgJ2lzbzg4NTktNCc6XG4gICAgY2FzZSAnaXNvODg1OTQnOlxuICAgIGNhc2UgJ2lzb184ODU5LTQnOlxuICAgIGNhc2UgJ2lzb184ODU5LTQ6MTk4OCc6XG4gICAgY2FzZSAnbDQnOlxuICAgIGNhc2UgJ2xhdGluNCc6XG4gICAgICByZXR1cm4gJ0lTTy04ODU5LTQnXG4gICAgY2FzZSAnY3Npc29sYXRpbmN5cmlsbGljJzpcbiAgICBjYXNlICdjeXJpbGxpYyc6XG4gICAgY2FzZSAnaXNvLTg4NTktNSc6XG4gICAgY2FzZSAnaXNvLWlyLTE0NCc6XG4gICAgY2FzZSAnaXNvODg1OS01JzpcbiAgICBjYXNlICdpc284ODU5NSc6XG4gICAgY2FzZSAnaXNvXzg4NTktNSc6XG4gICAgY2FzZSAnaXNvXzg4NTktNToxOTg4JzpcbiAgICAgIHJldHVybiAnSVNPLTg4NTktNSdcbiAgICBjYXNlICdhcmFiaWMnOlxuICAgIGNhc2UgJ2FzbW8tNzA4JzpcbiAgICBjYXNlICdjc2lzbzg4NTk2ZSc6XG4gICAgY2FzZSAnY3Npc284ODU5NmknOlxuICAgIGNhc2UgJ2NzaXNvbGF0aW5hcmFiaWMnOlxuICAgIGNhc2UgJ2VjbWEtMTE0JzpcbiAgICBjYXNlICdpc28tODg1OS02JzpcbiAgICBjYXNlICdpc28tODg1OS02LWUnOlxuICAgIGNhc2UgJ2lzby04ODU5LTYtaSc6XG4gICAgY2FzZSAnaXNvLWlyLTEyNyc6XG4gICAgY2FzZSAnaXNvODg1OS02JzpcbiAgICBjYXNlICdpc284ODU5Nic6XG4gICAgY2FzZSAnaXNvXzg4NTktNic6XG4gICAgY2FzZSAnaXNvXzg4NTktNjoxOTg3JzpcbiAgICAgIHJldHVybiAnSVNPLTg4NTktNidcbiAgICBjYXNlICdjc2lzb2xhdGluZ3JlZWsnOlxuICAgIGNhc2UgJ2VjbWEtMTE4JzpcbiAgICBjYXNlICdlbG90XzkyOCc6XG4gICAgY2FzZSAnZ3JlZWsnOlxuICAgIGNhc2UgJ2dyZWVrOCc6XG4gICAgY2FzZSAnaXNvLTg4NTktNyc6XG4gICAgY2FzZSAnaXNvLWlyLTEyNic6XG4gICAgY2FzZSAnaXNvODg1OS03JzpcbiAgICBjYXNlICdpc284ODU5Nyc6XG4gICAgY2FzZSAnaXNvXzg4NTktNyc6XG4gICAgY2FzZSAnaXNvXzg4NTktNzoxOTg3JzpcbiAgICBjYXNlICdzdW5fZXVfZ3JlZWsnOlxuICAgICAgcmV0dXJuICdJU08tODg1OS03J1xuICAgIGNhc2UgJ2NzaXNvODg1OThlJzpcbiAgICBjYXNlICdjc2lzb2xhdGluaGVicmV3JzpcbiAgICBjYXNlICdoZWJyZXcnOlxuICAgIGNhc2UgJ2lzby04ODU5LTgnOlxuICAgIGNhc2UgJ2lzby04ODU5LTgtZSc6XG4gICAgY2FzZSAnaXNvLWlyLTEzOCc6XG4gICAgY2FzZSAnaXNvODg1OS04JzpcbiAgICBjYXNlICdpc284ODU5OCc6XG4gICAgY2FzZSAnaXNvXzg4NTktOCc6XG4gICAgY2FzZSAnaXNvXzg4NTktODoxOTg4JzpcbiAgICBjYXNlICd2aXN1YWwnOlxuICAgICAgcmV0dXJuICdJU08tODg1OS04J1xuICAgIGNhc2UgJ2NzaXNvODg1OThpJzpcbiAgICBjYXNlICdpc28tODg1OS04LWknOlxuICAgIGNhc2UgJ2xvZ2ljYWwnOlxuICAgICAgcmV0dXJuICdJU08tODg1OS04LUknXG4gICAgY2FzZSAnY3Npc29sYXRpbjYnOlxuICAgIGNhc2UgJ2lzby04ODU5LTEwJzpcbiAgICBjYXNlICdpc28taXItMTU3JzpcbiAgICBjYXNlICdpc284ODU5LTEwJzpcbiAgICBjYXNlICdpc284ODU5MTAnOlxuICAgIGNhc2UgJ2w2JzpcbiAgICBjYXNlICdsYXRpbjYnOlxuICAgICAgcmV0dXJuICdJU08tODg1OS0xMCdcbiAgICBjYXNlICdpc28tODg1OS0xMyc6XG4gICAgY2FzZSAnaXNvODg1OS0xMyc6XG4gICAgY2FzZSAnaXNvODg1OTEzJzpcbiAgICAgIHJldHVybiAnSVNPLTg4NTktMTMnXG4gICAgY2FzZSAnaXNvLTg4NTktMTQnOlxuICAgIGNhc2UgJ2lzbzg4NTktMTQnOlxuICAgIGNhc2UgJ2lzbzg4NTkxNCc6XG4gICAgICByZXR1cm4gJ0lTTy04ODU5LTE0J1xuICAgIGNhc2UgJ2NzaXNvbGF0aW45JzpcbiAgICBjYXNlICdpc28tODg1OS0xNSc6XG4gICAgY2FzZSAnaXNvODg1OS0xNSc6XG4gICAgY2FzZSAnaXNvODg1OTE1JzpcbiAgICBjYXNlICdpc29fODg1OS0xNSc6XG4gICAgY2FzZSAnbDknOlxuICAgICAgcmV0dXJuICdJU08tODg1OS0xNSdcbiAgICBjYXNlICdpc28tODg1OS0xNic6XG4gICAgICByZXR1cm4gJ0lTTy04ODU5LTE2J1xuICAgIGNhc2UgJ2Nza29pOHInOlxuICAgIGNhc2UgJ2tvaSc6XG4gICAgY2FzZSAna29pOCc6XG4gICAgY2FzZSAna29pOC1yJzpcbiAgICBjYXNlICdrb2k4X3InOlxuICAgICAgcmV0dXJuICdLT0k4LVInXG4gICAgY2FzZSAna29pOC1ydSc6XG4gICAgY2FzZSAna29pOC11JzpcbiAgICAgIHJldHVybiAnS09JOC1VJ1xuICAgIGNhc2UgJ2NzbWFjaW50b3NoJzpcbiAgICBjYXNlICdtYWMnOlxuICAgIGNhc2UgJ21hY2ludG9zaCc6XG4gICAgY2FzZSAneC1tYWMtcm9tYW4nOlxuICAgICAgcmV0dXJuICdtYWNpbnRvc2gnXG4gICAgY2FzZSAnaXNvLTg4NTktMTEnOlxuICAgIGNhc2UgJ2lzbzg4NTktMTEnOlxuICAgIGNhc2UgJ2lzbzg4NTkxMSc6XG4gICAgY2FzZSAndGlzLTYyMCc6XG4gICAgY2FzZSAnd2luZG93cy04NzQnOlxuICAgICAgcmV0dXJuICd3aW5kb3dzLTg3NCdcbiAgICBjYXNlICdjcDEyNTAnOlxuICAgIGNhc2UgJ3dpbmRvd3MtMTI1MCc6XG4gICAgY2FzZSAneC1jcDEyNTAnOlxuICAgICAgcmV0dXJuICd3aW5kb3dzLTEyNTAnXG4gICAgY2FzZSAnY3AxMjUxJzpcbiAgICBjYXNlICd3aW5kb3dzLTEyNTEnOlxuICAgIGNhc2UgJ3gtY3AxMjUxJzpcbiAgICAgIHJldHVybiAnd2luZG93cy0xMjUxJ1xuICAgIGNhc2UgJ2Fuc2lfeDMuNC0xOTY4JzpcbiAgICBjYXNlICdhc2NpaSc6XG4gICAgY2FzZSAnY3AxMjUyJzpcbiAgICBjYXNlICdjcDgxOSc6XG4gICAgY2FzZSAnY3Npc29sYXRpbjEnOlxuICAgIGNhc2UgJ2libTgxOSc6XG4gICAgY2FzZSAnaXNvLTg4NTktMSc6XG4gICAgY2FzZSAnaXNvLWlyLTEwMCc6XG4gICAgY2FzZSAnaXNvODg1OS0xJzpcbiAgICBjYXNlICdpc284ODU5MSc6XG4gICAgY2FzZSAnaXNvXzg4NTktMSc6XG4gICAgY2FzZSAnaXNvXzg4NTktMToxOTg3JzpcbiAgICBjYXNlICdsMSc6XG4gICAgY2FzZSAnbGF0aW4xJzpcbiAgICBjYXNlICd1cy1hc2NpaSc6XG4gICAgY2FzZSAnd2luZG93cy0xMjUyJzpcbiAgICBjYXNlICd4LWNwMTI1Mic6XG4gICAgICByZXR1cm4gJ3dpbmRvd3MtMTI1MidcbiAgICBjYXNlICdjcDEyNTMnOlxuICAgIGNhc2UgJ3dpbmRvd3MtMTI1Myc6XG4gICAgY2FzZSAneC1jcDEyNTMnOlxuICAgICAgcmV0dXJuICd3aW5kb3dzLTEyNTMnXG4gICAgY2FzZSAnY3AxMjU0JzpcbiAgICBjYXNlICdjc2lzb2xhdGluNSc6XG4gICAgY2FzZSAnaXNvLTg4NTktOSc6XG4gICAgY2FzZSAnaXNvLWlyLTE0OCc6XG4gICAgY2FzZSAnaXNvODg1OS05JzpcbiAgICBjYXNlICdpc284ODU5OSc6XG4gICAgY2FzZSAnaXNvXzg4NTktOSc6XG4gICAgY2FzZSAnaXNvXzg4NTktOToxOTg5JzpcbiAgICBjYXNlICdsNSc6XG4gICAgY2FzZSAnbGF0aW41JzpcbiAgICBjYXNlICd3aW5kb3dzLTEyNTQnOlxuICAgIGNhc2UgJ3gtY3AxMjU0JzpcbiAgICAgIHJldHVybiAnd2luZG93cy0xMjU0J1xuICAgIGNhc2UgJ2NwMTI1NSc6XG4gICAgY2FzZSAnd2luZG93cy0xMjU1JzpcbiAgICBjYXNlICd4LWNwMTI1NSc6XG4gICAgICByZXR1cm4gJ3dpbmRvd3MtMTI1NSdcbiAgICBjYXNlICdjcDEyNTYnOlxuICAgIGNhc2UgJ3dpbmRvd3MtMTI1Nic6XG4gICAgY2FzZSAneC1jcDEyNTYnOlxuICAgICAgcmV0dXJuICd3aW5kb3dzLTEyNTYnXG4gICAgY2FzZSAnY3AxMjU3JzpcbiAgICBjYXNlICd3aW5kb3dzLTEyNTcnOlxuICAgIGNhc2UgJ3gtY3AxMjU3JzpcbiAgICAgIHJldHVybiAnd2luZG93cy0xMjU3J1xuICAgIGNhc2UgJ2NwMTI1OCc6XG4gICAgY2FzZSAnd2luZG93cy0xMjU4JzpcbiAgICBjYXNlICd4LWNwMTI1OCc6XG4gICAgICByZXR1cm4gJ3dpbmRvd3MtMTI1OCdcbiAgICBjYXNlICd4LW1hYy1jeXJpbGxpYyc6XG4gICAgY2FzZSAneC1tYWMtdWtyYWluaWFuJzpcbiAgICAgIHJldHVybiAneC1tYWMtY3lyaWxsaWMnXG4gICAgY2FzZSAnY2hpbmVzZSc6XG4gICAgY2FzZSAnY3NnYjIzMTInOlxuICAgIGNhc2UgJ2NzaXNvNThnYjIzMTI4MCc6XG4gICAgY2FzZSAnZ2IyMzEyJzpcbiAgICBjYXNlICdnYl8yMzEyJzpcbiAgICBjYXNlICdnYl8yMzEyLTgwJzpcbiAgICBjYXNlICdnYmsnOlxuICAgIGNhc2UgJ2lzby1pci01OCc6XG4gICAgY2FzZSAneC1nYmsnOlxuICAgICAgcmV0dXJuICdHQksnXG4gICAgY2FzZSAnZ2IxODAzMCc6XG4gICAgICByZXR1cm4gJ2diMTgwMzAnXG4gICAgY2FzZSAnYmlnNSc6XG4gICAgY2FzZSAnYmlnNS1oa3Njcyc6XG4gICAgY2FzZSAnY24tYmlnNSc6XG4gICAgY2FzZSAnY3NiaWc1JzpcbiAgICBjYXNlICd4LXgtYmlnNSc6XG4gICAgICByZXR1cm4gJ0JpZzUnXG4gICAgY2FzZSAnY3NldWNwa2RmbXRqYXBhbmVzZSc6XG4gICAgY2FzZSAnZXVjLWpwJzpcbiAgICBjYXNlICd4LWV1Yy1qcCc6XG4gICAgICByZXR1cm4gJ0VVQy1KUCdcbiAgICBjYXNlICdjc2lzbzIwMjJqcCc6XG4gICAgY2FzZSAnaXNvLTIwMjItanAnOlxuICAgICAgcmV0dXJuICdJU08tMjAyMi1KUCdcbiAgICBjYXNlICdjc3NoaWZ0amlzJzpcbiAgICBjYXNlICdtczkzMic6XG4gICAgY2FzZSAnbXNfa2FuamknOlxuICAgIGNhc2UgJ3NoaWZ0LWppcyc6XG4gICAgY2FzZSAnc2hpZnRfamlzJzpcbiAgICBjYXNlICdzamlzJzpcbiAgICBjYXNlICd3aW5kb3dzLTMxaic6XG4gICAgY2FzZSAneC1zamlzJzpcbiAgICAgIHJldHVybiAnU2hpZnRfSklTJ1xuICAgIGNhc2UgJ2NzZXVja3InOlxuICAgIGNhc2UgJ2Nza3NjNTYwMTE5ODcnOlxuICAgIGNhc2UgJ2V1Yy1rcic6XG4gICAgY2FzZSAnaXNvLWlyLTE0OSc6XG4gICAgY2FzZSAna29yZWFuJzpcbiAgICBjYXNlICdrc19jXzU2MDEtMTk4Nyc6XG4gICAgY2FzZSAna3NfY181NjAxLTE5ODknOlxuICAgIGNhc2UgJ2tzYzU2MDEnOlxuICAgIGNhc2UgJ2tzY181NjAxJzpcbiAgICBjYXNlICd3aW5kb3dzLTk0OSc6XG4gICAgICByZXR1cm4gJ0VVQy1LUidcbiAgICBjYXNlICdjc2lzbzIwMjJrcic6XG4gICAgY2FzZSAnaHotZ2ItMjMxMic6XG4gICAgY2FzZSAnaXNvLTIwMjItY24nOlxuICAgIGNhc2UgJ2lzby0yMDIyLWNuLWV4dCc6XG4gICAgY2FzZSAnaXNvLTIwMjIta3InOlxuICAgIGNhc2UgJ3JlcGxhY2VtZW50JzpcbiAgICAgIHJldHVybiAncmVwbGFjZW1lbnQnXG4gICAgY2FzZSAndW5pY29kZWZmZmUnOlxuICAgIGNhc2UgJ3V0Zi0xNmJlJzpcbiAgICAgIHJldHVybiAnVVRGLTE2QkUnXG4gICAgY2FzZSAnY3N1bmljb2RlJzpcbiAgICBjYXNlICdpc28tMTA2NDYtdWNzLTInOlxuICAgIGNhc2UgJ3Vjcy0yJzpcbiAgICBjYXNlICd1bmljb2RlJzpcbiAgICBjYXNlICd1bmljb2RlZmVmZic6XG4gICAgY2FzZSAndXRmLTE2JzpcbiAgICBjYXNlICd1dGYtMTZsZSc6XG4gICAgICByZXR1cm4gJ1VURi0xNkxFJ1xuICAgIGNhc2UgJ3gtdXNlci1kZWZpbmVkJzpcbiAgICAgIHJldHVybiAneC11c2VyLWRlZmluZWQnXG4gICAgZGVmYXVsdDogcmV0dXJuICdmYWlsdXJlJ1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBnZXRFbmNvZGluZ1xufVxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7XG4gIGtTdGF0ZSxcbiAga0Vycm9yLFxuICBrUmVzdWx0LFxuICBrQWJvcnRlZCxcbiAga0xhc3RQcm9ncmVzc0V2ZW50RmlyZWRcbn0gPSByZXF1aXJlKCcuL3N5bWJvbHMnKVxuY29uc3QgeyBQcm9ncmVzc0V2ZW50IH0gPSByZXF1aXJlKCcuL3Byb2dyZXNzZXZlbnQnKVxuY29uc3QgeyBnZXRFbmNvZGluZyB9ID0gcmVxdWlyZSgnLi9lbmNvZGluZycpXG5jb25zdCB7IHNlcmlhbGl6ZUFNaW1lVHlwZSwgcGFyc2VNSU1FVHlwZSB9ID0gcmVxdWlyZSgnLi4vZmV0Y2gvZGF0YS11cmwnKVxuY29uc3QgeyB0eXBlcyB9ID0gcmVxdWlyZSgnbm9kZTp1dGlsJylcbmNvbnN0IHsgU3RyaW5nRGVjb2RlciB9ID0gcmVxdWlyZSgnc3RyaW5nX2RlY29kZXInKVxuY29uc3QgeyBidG9hIH0gPSByZXF1aXJlKCdub2RlOmJ1ZmZlcicpXG5cbi8qKiBAdHlwZSB7UHJvcGVydHlEZXNjcmlwdG9yfSAqL1xuY29uc3Qgc3RhdGljUHJvcGVydHlEZXNjcmlwdG9ycyA9IHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgd3JpdGFibGU6IGZhbHNlLFxuICBjb25maWd1cmFibGU6IGZhbHNlXG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL3czYy5naXRodWIuaW8vRmlsZUFQSS8jcmVhZE9wZXJhdGlvblxuICogQHBhcmFtIHtpbXBvcnQoJy4vZmlsZXJlYWRlcicpLkZpbGVSZWFkZXJ9IGZyXG4gKiBAcGFyYW0ge2ltcG9ydCgnYnVmZmVyJykuQmxvYn0gYmxvYlxuICogQHBhcmFtIHtzdHJpbmd9IHR5cGVcbiAqIEBwYXJhbSB7c3RyaW5nP30gZW5jb2RpbmdOYW1lXG4gKi9cbmZ1bmN0aW9uIHJlYWRPcGVyYXRpb24gKGZyLCBibG9iLCB0eXBlLCBlbmNvZGluZ05hbWUpIHtcbiAgLy8gMS4gSWYgZnJcdTIwMTlzIHN0YXRlIGlzIFwibG9hZGluZ1wiLCB0aHJvdyBhbiBJbnZhbGlkU3RhdGVFcnJvclxuICAvLyAgICBET01FeGNlcHRpb24uXG4gIGlmIChmcltrU3RhdGVdID09PSAnbG9hZGluZycpIHtcbiAgICB0aHJvdyBuZXcgRE9NRXhjZXB0aW9uKCdJbnZhbGlkIHN0YXRlJywgJ0ludmFsaWRTdGF0ZUVycm9yJylcbiAgfVxuXG4gIC8vIDIuIFNldCBmclx1MjAxOXMgc3RhdGUgdG8gXCJsb2FkaW5nXCIuXG4gIGZyW2tTdGF0ZV0gPSAnbG9hZGluZydcblxuICAvLyAzLiBTZXQgZnJcdTIwMTlzIHJlc3VsdCB0byBudWxsLlxuICBmcltrUmVzdWx0XSA9IG51bGxcblxuICAvLyA0LiBTZXQgZnJcdTIwMTlzIGVycm9yIHRvIG51bGwuXG4gIGZyW2tFcnJvcl0gPSBudWxsXG5cbiAgLy8gNS4gTGV0IHN0cmVhbSBiZSB0aGUgcmVzdWx0IG9mIGNhbGxpbmcgZ2V0IHN0cmVhbSBvbiBibG9iLlxuICAvKiogQHR5cGUge2ltcG9ydCgnc3RyZWFtL3dlYicpLlJlYWRhYmxlU3RyZWFtfSAqL1xuICBjb25zdCBzdHJlYW0gPSBibG9iLnN0cmVhbSgpXG5cbiAgLy8gNi4gTGV0IHJlYWRlciBiZSB0aGUgcmVzdWx0IG9mIGdldHRpbmcgYSByZWFkZXIgZnJvbSBzdHJlYW0uXG4gIGNvbnN0IHJlYWRlciA9IHN0cmVhbS5nZXRSZWFkZXIoKVxuXG4gIC8vIDcuIExldCBieXRlcyBiZSBhbiBlbXB0eSBieXRlIHNlcXVlbmNlLlxuICAvKiogQHR5cGUge1VpbnQ4QXJyYXlbXX0gKi9cbiAgY29uc3QgYnl0ZXMgPSBbXVxuXG4gIC8vIDguIExldCBjaHVua1Byb21pc2UgYmUgdGhlIHJlc3VsdCBvZiByZWFkaW5nIGEgY2h1bmsgZnJvbVxuICAvLyAgICBzdHJlYW0gd2l0aCByZWFkZXIuXG4gIGxldCBjaHVua1Byb21pc2UgPSByZWFkZXIucmVhZCgpXG5cbiAgLy8gOS4gTGV0IGlzRmlyc3RDaHVuayBiZSB0cnVlLlxuICBsZXQgaXNGaXJzdENodW5rID0gdHJ1ZVxuXG4gIC8vIDEwLiBJbiBwYXJhbGxlbCwgd2hpbGUgdHJ1ZTpcbiAgLy8gTm90ZTogXCJJbiBwYXJhbGxlbFwiIGp1c3QgbWVhbnMgbm9uLWJsb2NraW5nXG4gIC8vIE5vdGUgMjogcmVhZE9wZXJhdGlvbiBpdHNlbGYgY2Fubm90IGJlIGFzeW5jIGFzIGRvdWJsZVxuICAvLyByZWFkaW5nIHRoZSBib2R5IHdvdWxkIHRoZW4gcmVqZWN0IHRoZSBwcm9taXNlLCBpbnN0ZWFkXG4gIC8vIG9mIHRocm93aW5nIGFuIGVycm9yLlxuICA7KGFzeW5jICgpID0+IHtcbiAgICB3aGlsZSAoIWZyW2tBYm9ydGVkXSkge1xuICAgICAgLy8gMS4gV2FpdCBmb3IgY2h1bmtQcm9taXNlIHRvIGJlIGZ1bGZpbGxlZCBvciByZWplY3RlZC5cbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHsgZG9uZSwgdmFsdWUgfSA9IGF3YWl0IGNodW5rUHJvbWlzZVxuXG4gICAgICAgIC8vIDIuIElmIGNodW5rUHJvbWlzZSBpcyBmdWxmaWxsZWQsIGFuZCBpc0ZpcnN0Q2h1bmsgaXNcbiAgICAgICAgLy8gICAgdHJ1ZSwgcXVldWUgYSB0YXNrIHRvIGZpcmUgYSBwcm9ncmVzcyBldmVudCBjYWxsZWRcbiAgICAgICAgLy8gICAgbG9hZHN0YXJ0IGF0IGZyLlxuICAgICAgICBpZiAoaXNGaXJzdENodW5rICYmICFmcltrQWJvcnRlZF0pIHtcbiAgICAgICAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiB7XG4gICAgICAgICAgICBmaXJlQVByb2dyZXNzRXZlbnQoJ2xvYWRzdGFydCcsIGZyKVxuICAgICAgICAgIH0pXG4gICAgICAgIH1cblxuICAgICAgICAvLyAzLiBTZXQgaXNGaXJzdENodW5rIHRvIGZhbHNlLlxuICAgICAgICBpc0ZpcnN0Q2h1bmsgPSBmYWxzZVxuXG4gICAgICAgIC8vIDQuIElmIGNodW5rUHJvbWlzZSBpcyBmdWxmaWxsZWQgd2l0aCBhbiBvYmplY3Qgd2hvc2VcbiAgICAgICAgLy8gICAgZG9uZSBwcm9wZXJ0eSBpcyBmYWxzZSBhbmQgd2hvc2UgdmFsdWUgcHJvcGVydHkgaXNcbiAgICAgICAgLy8gICAgYSBVaW50OEFycmF5IG9iamVjdCwgcnVuIHRoZXNlIHN0ZXBzOlxuICAgICAgICBpZiAoIWRvbmUgJiYgdHlwZXMuaXNVaW50OEFycmF5KHZhbHVlKSkge1xuICAgICAgICAgIC8vIDEuIExldCBicyBiZSB0aGUgYnl0ZSBzZXF1ZW5jZSByZXByZXNlbnRlZCBieSB0aGVcbiAgICAgICAgICAvLyAgICBVaW50OEFycmF5IG9iamVjdC5cblxuICAgICAgICAgIC8vIDIuIEFwcGVuZCBicyB0byBieXRlcy5cbiAgICAgICAgICBieXRlcy5wdXNoKHZhbHVlKVxuXG4gICAgICAgICAgLy8gMy4gSWYgcm91Z2hseSA1MG1zIGhhdmUgcGFzc2VkIHNpbmNlIHRoZXNlIHN0ZXBzXG4gICAgICAgICAgLy8gICAgd2VyZSBsYXN0IGludm9rZWQsIHF1ZXVlIGEgdGFzayB0byBmaXJlIGFcbiAgICAgICAgICAvLyAgICBwcm9ncmVzcyBldmVudCBjYWxsZWQgcHJvZ3Jlc3MgYXQgZnIuXG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgKFxuICAgICAgICAgICAgICBmcltrTGFzdFByb2dyZXNzRXZlbnRGaXJlZF0gPT09IHVuZGVmaW5lZCB8fFxuICAgICAgICAgICAgICBEYXRlLm5vdygpIC0gZnJba0xhc3RQcm9ncmVzc0V2ZW50RmlyZWRdID49IDUwXG4gICAgICAgICAgICApICYmXG4gICAgICAgICAgICAhZnJba0Fib3J0ZWRdXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICBmcltrTGFzdFByb2dyZXNzRXZlbnRGaXJlZF0gPSBEYXRlLm5vdygpXG4gICAgICAgICAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiB7XG4gICAgICAgICAgICAgIGZpcmVBUHJvZ3Jlc3NFdmVudCgncHJvZ3Jlc3MnLCBmcilcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gNC4gU2V0IGNodW5rUHJvbWlzZSB0byB0aGUgcmVzdWx0IG9mIHJlYWRpbmcgYVxuICAgICAgICAgIC8vICAgIGNodW5rIGZyb20gc3RyZWFtIHdpdGggcmVhZGVyLlxuICAgICAgICAgIGNodW5rUHJvbWlzZSA9IHJlYWRlci5yZWFkKClcbiAgICAgICAgfSBlbHNlIGlmIChkb25lKSB7XG4gICAgICAgICAgLy8gNS4gT3RoZXJ3aXNlLCBpZiBjaHVua1Byb21pc2UgaXMgZnVsZmlsbGVkIHdpdGggYW5cbiAgICAgICAgICAvLyAgICBvYmplY3Qgd2hvc2UgZG9uZSBwcm9wZXJ0eSBpcyB0cnVlLCBxdWV1ZSBhIHRhc2tcbiAgICAgICAgICAvLyAgICB0byBydW4gdGhlIGZvbGxvd2luZyBzdGVwcyBhbmQgYWJvcnQgdGhpcyBhbGdvcml0aG06XG4gICAgICAgICAgcXVldWVNaWNyb3Rhc2soKCkgPT4ge1xuICAgICAgICAgICAgLy8gMS4gU2V0IGZyXHUyMDE5cyBzdGF0ZSB0byBcImRvbmVcIi5cbiAgICAgICAgICAgIGZyW2tTdGF0ZV0gPSAnZG9uZSdcblxuICAgICAgICAgICAgLy8gMi4gTGV0IHJlc3VsdCBiZSB0aGUgcmVzdWx0IG9mIHBhY2thZ2UgZGF0YSBnaXZlblxuICAgICAgICAgICAgLy8gICAgYnl0ZXMsIHR5cGUsIGJsb2JcdTIwMTlzIHR5cGUsIGFuZCBlbmNvZGluZ05hbWUuXG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSBwYWNrYWdlRGF0YShieXRlcywgdHlwZSwgYmxvYi50eXBlLCBlbmNvZGluZ05hbWUpXG5cbiAgICAgICAgICAgICAgLy8gNC4gRWxzZTpcblxuICAgICAgICAgICAgICBpZiAoZnJba0Fib3J0ZWRdKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAvLyAxLiBTZXQgZnJcdTIwMTlzIHJlc3VsdCB0byByZXN1bHQuXG4gICAgICAgICAgICAgIGZyW2tSZXN1bHRdID0gcmVzdWx0XG5cbiAgICAgICAgICAgICAgLy8gMi4gRmlyZSBhIHByb2dyZXNzIGV2ZW50IGNhbGxlZCBsb2FkIGF0IHRoZSBmci5cbiAgICAgICAgICAgICAgZmlyZUFQcm9ncmVzc0V2ZW50KCdsb2FkJywgZnIpXG4gICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICAvLyAzLiBJZiBwYWNrYWdlIGRhdGEgdGhyZXcgYW4gZXhjZXB0aW9uIGVycm9yOlxuXG4gICAgICAgICAgICAgIC8vIDEuIFNldCBmclx1MjAxOXMgZXJyb3IgdG8gZXJyb3IuXG4gICAgICAgICAgICAgIGZyW2tFcnJvcl0gPSBlcnJvclxuXG4gICAgICAgICAgICAgIC8vIDIuIEZpcmUgYSBwcm9ncmVzcyBldmVudCBjYWxsZWQgZXJyb3IgYXQgZnIuXG4gICAgICAgICAgICAgIGZpcmVBUHJvZ3Jlc3NFdmVudCgnZXJyb3InLCBmcilcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gNS4gSWYgZnJcdTIwMTlzIHN0YXRlIGlzIG5vdCBcImxvYWRpbmdcIiwgZmlyZSBhIHByb2dyZXNzXG4gICAgICAgICAgICAvLyAgICBldmVudCBjYWxsZWQgbG9hZGVuZCBhdCB0aGUgZnIuXG4gICAgICAgICAgICBpZiAoZnJba1N0YXRlXSAhPT0gJ2xvYWRpbmcnKSB7XG4gICAgICAgICAgICAgIGZpcmVBUHJvZ3Jlc3NFdmVudCgnbG9hZGVuZCcsIGZyKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG5cbiAgICAgICAgICBicmVha1xuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBpZiAoZnJba0Fib3J0ZWRdKSB7XG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cblxuICAgICAgICAvLyA2LiBPdGhlcndpc2UsIGlmIGNodW5rUHJvbWlzZSBpcyByZWplY3RlZCB3aXRoIGFuXG4gICAgICAgIC8vICAgIGVycm9yIGVycm9yLCBxdWV1ZSBhIHRhc2sgdG8gcnVuIHRoZSBmb2xsb3dpbmdcbiAgICAgICAgLy8gICAgc3RlcHMgYW5kIGFib3J0IHRoaXMgYWxnb3JpdGhtOlxuICAgICAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiB7XG4gICAgICAgICAgLy8gMS4gU2V0IGZyXHUyMDE5cyBzdGF0ZSB0byBcImRvbmVcIi5cbiAgICAgICAgICBmcltrU3RhdGVdID0gJ2RvbmUnXG5cbiAgICAgICAgICAvLyAyLiBTZXQgZnJcdTIwMTlzIGVycm9yIHRvIGVycm9yLlxuICAgICAgICAgIGZyW2tFcnJvcl0gPSBlcnJvclxuXG4gICAgICAgICAgLy8gMy4gRmlyZSBhIHByb2dyZXNzIGV2ZW50IGNhbGxlZCBlcnJvciBhdCBmci5cbiAgICAgICAgICBmaXJlQVByb2dyZXNzRXZlbnQoJ2Vycm9yJywgZnIpXG5cbiAgICAgICAgICAvLyA0LiBJZiBmclx1MjAxOXMgc3RhdGUgaXMgbm90IFwibG9hZGluZ1wiLCBmaXJlIGEgcHJvZ3Jlc3NcbiAgICAgICAgICAvLyAgICBldmVudCBjYWxsZWQgbG9hZGVuZCBhdCBmci5cbiAgICAgICAgICBpZiAoZnJba1N0YXRlXSAhPT0gJ2xvYWRpbmcnKSB7XG4gICAgICAgICAgICBmaXJlQVByb2dyZXNzRXZlbnQoJ2xvYWRlbmQnLCBmcilcbiAgICAgICAgICB9XG4gICAgICAgIH0pXG5cbiAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICB9XG4gIH0pKClcbn1cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby9GaWxlQVBJLyNmaXJlLWEtcHJvZ3Jlc3MtZXZlbnRcbiAqIEBzZWUgaHR0cHM6Ly9kb20uc3BlYy53aGF0d2cub3JnLyNjb25jZXB0LWV2ZW50LWZpcmVcbiAqIEBwYXJhbSB7c3RyaW5nfSBlIFRoZSBuYW1lIG9mIHRoZSBldmVudFxuICogQHBhcmFtIHtpbXBvcnQoJy4vZmlsZXJlYWRlcicpLkZpbGVSZWFkZXJ9IHJlYWRlclxuICovXG5mdW5jdGlvbiBmaXJlQVByb2dyZXNzRXZlbnQgKGUsIHJlYWRlcikge1xuICAvLyBUaGUgcHJvZ3Jlc3MgZXZlbnQgZSBkb2VzIG5vdCBidWJibGUuIGUuYnViYmxlcyBtdXN0IGJlIGZhbHNlXG4gIC8vIFRoZSBwcm9ncmVzcyBldmVudCBlIGlzIE5PVCBjYW5jZWxhYmxlLiBlLmNhbmNlbGFibGUgbXVzdCBiZSBmYWxzZVxuICBjb25zdCBldmVudCA9IG5ldyBQcm9ncmVzc0V2ZW50KGUsIHtcbiAgICBidWJibGVzOiBmYWxzZSxcbiAgICBjYW5jZWxhYmxlOiBmYWxzZVxuICB9KVxuXG4gIHJlYWRlci5kaXNwYXRjaEV2ZW50KGV2ZW50KVxufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly93M2MuZ2l0aHViLmlvL0ZpbGVBUEkvI2Jsb2ItcGFja2FnZS1kYXRhXG4gKiBAcGFyYW0ge1VpbnQ4QXJyYXlbXX0gYnl0ZXNcbiAqIEBwYXJhbSB7c3RyaW5nfSB0eXBlXG4gKiBAcGFyYW0ge3N0cmluZz99IG1pbWVUeXBlXG4gKiBAcGFyYW0ge3N0cmluZz99IGVuY29kaW5nTmFtZVxuICovXG5mdW5jdGlvbiBwYWNrYWdlRGF0YSAoYnl0ZXMsIHR5cGUsIG1pbWVUeXBlLCBlbmNvZGluZ05hbWUpIHtcbiAgLy8gMS4gQSBCbG9iIGhhcyBhbiBhc3NvY2lhdGVkIHBhY2thZ2UgZGF0YSBhbGdvcml0aG0sIGdpdmVuXG4gIC8vICAgIGJ5dGVzLCBhIHR5cGUsIGEgb3B0aW9uYWwgbWltZVR5cGUsIGFuZCBhIG9wdGlvbmFsXG4gIC8vICAgIGVuY29kaW5nTmFtZSwgd2hpY2ggc3dpdGNoZXMgb24gdHlwZSBhbmQgcnVucyB0aGVcbiAgLy8gICAgYXNzb2NpYXRlZCBzdGVwczpcblxuICBzd2l0Y2ggKHR5cGUpIHtcbiAgICBjYXNlICdEYXRhVVJMJzoge1xuICAgICAgLy8gMS4gUmV0dXJuIGJ5dGVzIGFzIGEgRGF0YVVSTCBbUkZDMjM5N10gc3ViamVjdCB0b1xuICAgICAgLy8gICAgdGhlIGNvbnNpZGVyYXRpb25zIGJlbG93OlxuICAgICAgLy8gICogVXNlIG1pbWVUeXBlIGFzIHBhcnQgb2YgdGhlIERhdGEgVVJMIGlmIGl0IGlzXG4gICAgICAvLyAgICBhdmFpbGFibGUgaW4ga2VlcGluZyB3aXRoIHRoZSBEYXRhIFVSTFxuICAgICAgLy8gICAgc3BlY2lmaWNhdGlvbiBbUkZDMjM5N10uXG4gICAgICAvLyAgKiBJZiBtaW1lVHlwZSBpcyBub3QgYXZhaWxhYmxlIHJldHVybiBhIERhdGEgVVJMXG4gICAgICAvLyAgICB3aXRob3V0IGEgbWVkaWEtdHlwZS4gW1JGQzIzOTddLlxuXG4gICAgICAvLyBodHRwczovL2RhdGF0cmFja2VyLmlldGYub3JnL2RvYy9odG1sL3JmYzIzOTcjc2VjdGlvbi0zXG4gICAgICAvLyBkYXRhdXJsICAgIDo9IFwiZGF0YTpcIiBbIG1lZGlhdHlwZSBdIFsgXCI7YmFzZTY0XCIgXSBcIixcIiBkYXRhXG4gICAgICAvLyBtZWRpYXR5cGUgIDo9IFsgdHlwZSBcIi9cIiBzdWJ0eXBlIF0gKiggXCI7XCIgcGFyYW1ldGVyIClcbiAgICAgIC8vIGRhdGEgICAgICAgOj0gKnVybGNoYXJcbiAgICAgIC8vIHBhcmFtZXRlciAgOj0gYXR0cmlidXRlIFwiPVwiIHZhbHVlXG4gICAgICBsZXQgZGF0YVVSTCA9ICdkYXRhOidcblxuICAgICAgY29uc3QgcGFyc2VkID0gcGFyc2VNSU1FVHlwZShtaW1lVHlwZSB8fCAnYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtJylcblxuICAgICAgaWYgKHBhcnNlZCAhPT0gJ2ZhaWx1cmUnKSB7XG4gICAgICAgIGRhdGFVUkwgKz0gc2VyaWFsaXplQU1pbWVUeXBlKHBhcnNlZClcbiAgICAgIH1cblxuICAgICAgZGF0YVVSTCArPSAnO2Jhc2U2NCwnXG5cbiAgICAgIGNvbnN0IGRlY29kZXIgPSBuZXcgU3RyaW5nRGVjb2RlcignbGF0aW4xJylcblxuICAgICAgZm9yIChjb25zdCBjaHVuayBvZiBieXRlcykge1xuICAgICAgICBkYXRhVVJMICs9IGJ0b2EoZGVjb2Rlci53cml0ZShjaHVuaykpXG4gICAgICB9XG5cbiAgICAgIGRhdGFVUkwgKz0gYnRvYShkZWNvZGVyLmVuZCgpKVxuXG4gICAgICByZXR1cm4gZGF0YVVSTFxuICAgIH1cbiAgICBjYXNlICdUZXh0Jzoge1xuICAgICAgLy8gMS4gTGV0IGVuY29kaW5nIGJlIGZhaWx1cmVcbiAgICAgIGxldCBlbmNvZGluZyA9ICdmYWlsdXJlJ1xuXG4gICAgICAvLyAyLiBJZiB0aGUgZW5jb2RpbmdOYW1lIGlzIHByZXNlbnQsIHNldCBlbmNvZGluZyB0byB0aGVcbiAgICAgIC8vICAgIHJlc3VsdCBvZiBnZXR0aW5nIGFuIGVuY29kaW5nIGZyb20gZW5jb2RpbmdOYW1lLlxuICAgICAgaWYgKGVuY29kaW5nTmFtZSkge1xuICAgICAgICBlbmNvZGluZyA9IGdldEVuY29kaW5nKGVuY29kaW5nTmFtZSlcbiAgICAgIH1cblxuICAgICAgLy8gMy4gSWYgZW5jb2RpbmcgaXMgZmFpbHVyZSwgYW5kIG1pbWVUeXBlIGlzIHByZXNlbnQ6XG4gICAgICBpZiAoZW5jb2RpbmcgPT09ICdmYWlsdXJlJyAmJiBtaW1lVHlwZSkge1xuICAgICAgICAvLyAxLiBMZXQgdHlwZSBiZSB0aGUgcmVzdWx0IG9mIHBhcnNlIGEgTUlNRSB0eXBlXG4gICAgICAgIC8vICAgIGdpdmVuIG1pbWVUeXBlLlxuICAgICAgICBjb25zdCB0eXBlID0gcGFyc2VNSU1FVHlwZShtaW1lVHlwZSlcblxuICAgICAgICAvLyAyLiBJZiB0eXBlIGlzIG5vdCBmYWlsdXJlLCBzZXQgZW5jb2RpbmcgdG8gdGhlIHJlc3VsdFxuICAgICAgICAvLyAgICBvZiBnZXR0aW5nIGFuIGVuY29kaW5nIGZyb20gdHlwZVx1MjAxOXMgcGFyYW1ldGVyc1tcImNoYXJzZXRcIl0uXG4gICAgICAgIGlmICh0eXBlICE9PSAnZmFpbHVyZScpIHtcbiAgICAgICAgICBlbmNvZGluZyA9IGdldEVuY29kaW5nKHR5cGUucGFyYW1ldGVycy5nZXQoJ2NoYXJzZXQnKSlcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyA0LiBJZiBlbmNvZGluZyBpcyBmYWlsdXJlLCB0aGVuIHNldCBlbmNvZGluZyB0byBVVEYtOC5cbiAgICAgIGlmIChlbmNvZGluZyA9PT0gJ2ZhaWx1cmUnKSB7XG4gICAgICAgIGVuY29kaW5nID0gJ1VURi04J1xuICAgICAgfVxuXG4gICAgICAvLyA1LiBEZWNvZGUgYnl0ZXMgdXNpbmcgZmFsbGJhY2sgZW5jb2RpbmcgZW5jb2RpbmcsIGFuZFxuICAgICAgLy8gICAgcmV0dXJuIHRoZSByZXN1bHQuXG4gICAgICByZXR1cm4gZGVjb2RlKGJ5dGVzLCBlbmNvZGluZylcbiAgICB9XG4gICAgY2FzZSAnQXJyYXlCdWZmZXInOiB7XG4gICAgICAvLyBSZXR1cm4gYSBuZXcgQXJyYXlCdWZmZXIgd2hvc2UgY29udGVudHMgYXJlIGJ5dGVzLlxuICAgICAgY29uc3Qgc2VxdWVuY2UgPSBjb21iaW5lQnl0ZVNlcXVlbmNlcyhieXRlcylcblxuICAgICAgcmV0dXJuIHNlcXVlbmNlLmJ1ZmZlclxuICAgIH1cbiAgICBjYXNlICdCaW5hcnlTdHJpbmcnOiB7XG4gICAgICAvLyBSZXR1cm4gYnl0ZXMgYXMgYSBiaW5hcnkgc3RyaW5nLCBpbiB3aGljaCBldmVyeSBieXRlXG4gICAgICAvLyAgaXMgcmVwcmVzZW50ZWQgYnkgYSBjb2RlIHVuaXQgb2YgZXF1YWwgdmFsdWUgWzAuLjI1NV0uXG4gICAgICBsZXQgYmluYXJ5U3RyaW5nID0gJydcblxuICAgICAgY29uc3QgZGVjb2RlciA9IG5ldyBTdHJpbmdEZWNvZGVyKCdsYXRpbjEnKVxuXG4gICAgICBmb3IgKGNvbnN0IGNodW5rIG9mIGJ5dGVzKSB7XG4gICAgICAgIGJpbmFyeVN0cmluZyArPSBkZWNvZGVyLndyaXRlKGNodW5rKVxuICAgICAgfVxuXG4gICAgICBiaW5hcnlTdHJpbmcgKz0gZGVjb2Rlci5lbmQoKVxuXG4gICAgICByZXR1cm4gYmluYXJ5U3RyaW5nXG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL2VuY29kaW5nLnNwZWMud2hhdHdnLm9yZy8jZGVjb2RlXG4gKiBAcGFyYW0ge1VpbnQ4QXJyYXlbXX0gaW9RdWV1ZVxuICogQHBhcmFtIHtzdHJpbmd9IGVuY29kaW5nXG4gKi9cbmZ1bmN0aW9uIGRlY29kZSAoaW9RdWV1ZSwgZW5jb2RpbmcpIHtcbiAgY29uc3QgYnl0ZXMgPSBjb21iaW5lQnl0ZVNlcXVlbmNlcyhpb1F1ZXVlKVxuXG4gIC8vIDEuIExldCBCT01FbmNvZGluZyBiZSB0aGUgcmVzdWx0IG9mIEJPTSBzbmlmZmluZyBpb1F1ZXVlLlxuICBjb25zdCBCT01FbmNvZGluZyA9IEJPTVNuaWZmaW5nKGJ5dGVzKVxuXG4gIGxldCBzbGljZSA9IDBcblxuICAvLyAyLiBJZiBCT01FbmNvZGluZyBpcyBub24tbnVsbDpcbiAgaWYgKEJPTUVuY29kaW5nICE9PSBudWxsKSB7XG4gICAgLy8gMS4gU2V0IGVuY29kaW5nIHRvIEJPTUVuY29kaW5nLlxuICAgIGVuY29kaW5nID0gQk9NRW5jb2RpbmdcblxuICAgIC8vIDIuIFJlYWQgdGhyZWUgYnl0ZXMgZnJvbSBpb1F1ZXVlLCBpZiBCT01FbmNvZGluZyBpc1xuICAgIC8vICAgIFVURi04OyBvdGhlcndpc2UgcmVhZCB0d28gYnl0ZXMuXG4gICAgLy8gICAgKERvIG5vdGhpbmcgd2l0aCB0aG9zZSBieXRlcy4pXG4gICAgc2xpY2UgPSBCT01FbmNvZGluZyA9PT0gJ1VURi04JyA/IDMgOiAyXG4gIH1cblxuICAvLyAzLiBQcm9jZXNzIGEgcXVldWUgd2l0aCBhbiBpbnN0YW5jZSBvZiBlbmNvZGluZ1x1MjAxOXNcbiAgLy8gICAgZGVjb2RlciwgaW9RdWV1ZSwgb3V0cHV0LCBhbmQgXCJyZXBsYWNlbWVudFwiLlxuXG4gIC8vIDQuIFJldHVybiBvdXRwdXQuXG5cbiAgY29uc3Qgc2xpY2VkID0gYnl0ZXMuc2xpY2Uoc2xpY2UpXG4gIHJldHVybiBuZXcgVGV4dERlY29kZXIoZW5jb2RpbmcpLmRlY29kZShzbGljZWQpXG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL2VuY29kaW5nLnNwZWMud2hhdHdnLm9yZy8jYm9tLXNuaWZmXG4gKiBAcGFyYW0ge1VpbnQ4QXJyYXl9IGlvUXVldWVcbiAqL1xuZnVuY3Rpb24gQk9NU25pZmZpbmcgKGlvUXVldWUpIHtcbiAgLy8gMS4gTGV0IEJPTSBiZSB0aGUgcmVzdWx0IG9mIHBlZWtpbmcgMyBieXRlcyBmcm9tIGlvUXVldWUsXG4gIC8vICAgIGNvbnZlcnRlZCB0byBhIGJ5dGUgc2VxdWVuY2UuXG4gIGNvbnN0IFthLCBiLCBjXSA9IGlvUXVldWVcblxuICAvLyAyLiBGb3IgZWFjaCBvZiB0aGUgcm93cyBpbiB0aGUgdGFibGUgYmVsb3csIHN0YXJ0aW5nIHdpdGhcbiAgLy8gICAgdGhlIGZpcnN0IG9uZSBhbmQgZ29pbmcgZG93biwgaWYgQk9NIHN0YXJ0cyB3aXRoIHRoZVxuICAvLyAgICBieXRlcyBnaXZlbiBpbiB0aGUgZmlyc3QgY29sdW1uLCB0aGVuIHJldHVybiB0aGVcbiAgLy8gICAgZW5jb2RpbmcgZ2l2ZW4gaW4gdGhlIGNlbGwgaW4gdGhlIHNlY29uZCBjb2x1bW4gb2YgdGhhdFxuICAvLyAgICByb3cuIE90aGVyd2lzZSwgcmV0dXJuIG51bGwuXG4gIGlmIChhID09PSAweEVGICYmIGIgPT09IDB4QkIgJiYgYyA9PT0gMHhCRikge1xuICAgIHJldHVybiAnVVRGLTgnXG4gIH0gZWxzZSBpZiAoYSA9PT0gMHhGRSAmJiBiID09PSAweEZGKSB7XG4gICAgcmV0dXJuICdVVEYtMTZCRSdcbiAgfSBlbHNlIGlmIChhID09PSAweEZGICYmIGIgPT09IDB4RkUpIHtcbiAgICByZXR1cm4gJ1VURi0xNkxFJ1xuICB9XG5cbiAgcmV0dXJuIG51bGxcbn1cblxuLyoqXG4gKiBAcGFyYW0ge1VpbnQ4QXJyYXlbXX0gc2VxdWVuY2VzXG4gKi9cbmZ1bmN0aW9uIGNvbWJpbmVCeXRlU2VxdWVuY2VzIChzZXF1ZW5jZXMpIHtcbiAgY29uc3Qgc2l6ZSA9IHNlcXVlbmNlcy5yZWR1Y2UoKGEsIGIpID0+IHtcbiAgICByZXR1cm4gYSArIGIuYnl0ZUxlbmd0aFxuICB9LCAwKVxuXG4gIGxldCBvZmZzZXQgPSAwXG5cbiAgcmV0dXJuIHNlcXVlbmNlcy5yZWR1Y2UoKGEsIGIpID0+IHtcbiAgICBhLnNldChiLCBvZmZzZXQpXG4gICAgb2Zmc2V0ICs9IGIuYnl0ZUxlbmd0aFxuICAgIHJldHVybiBhXG4gIH0sIG5ldyBVaW50OEFycmF5KHNpemUpKVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgc3RhdGljUHJvcGVydHlEZXNjcmlwdG9ycyxcbiAgcmVhZE9wZXJhdGlvbixcbiAgZmlyZUFQcm9ncmVzc0V2ZW50XG59XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHtcbiAgc3RhdGljUHJvcGVydHlEZXNjcmlwdG9ycyxcbiAgcmVhZE9wZXJhdGlvbixcbiAgZmlyZUFQcm9ncmVzc0V2ZW50XG59ID0gcmVxdWlyZSgnLi91dGlsJylcbmNvbnN0IHtcbiAga1N0YXRlLFxuICBrRXJyb3IsXG4gIGtSZXN1bHQsXG4gIGtFdmVudHMsXG4gIGtBYm9ydGVkXG59ID0gcmVxdWlyZSgnLi9zeW1ib2xzJylcbmNvbnN0IHsgd2ViaWRsIH0gPSByZXF1aXJlKCcuLi9mZXRjaC93ZWJpZGwnKVxuY29uc3QgeyBrRW51bWVyYWJsZVByb3BlcnR5IH0gPSByZXF1aXJlKCcuLi8uLi9jb3JlL3V0aWwnKVxuXG5jbGFzcyBGaWxlUmVhZGVyIGV4dGVuZHMgRXZlbnRUYXJnZXQge1xuICBjb25zdHJ1Y3RvciAoKSB7XG4gICAgc3VwZXIoKVxuXG4gICAgdGhpc1trU3RhdGVdID0gJ2VtcHR5J1xuICAgIHRoaXNba1Jlc3VsdF0gPSBudWxsXG4gICAgdGhpc1trRXJyb3JdID0gbnVsbFxuICAgIHRoaXNba0V2ZW50c10gPSB7XG4gICAgICBsb2FkZW5kOiBudWxsLFxuICAgICAgZXJyb3I6IG51bGwsXG4gICAgICBhYm9ydDogbnVsbCxcbiAgICAgIGxvYWQ6IG51bGwsXG4gICAgICBwcm9ncmVzczogbnVsbCxcbiAgICAgIGxvYWRzdGFydDogbnVsbFxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAc2VlIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby9GaWxlQVBJLyNkZm4tcmVhZEFzQXJyYXlCdWZmZXJcbiAgICogQHBhcmFtIHtpbXBvcnQoJ2J1ZmZlcicpLkJsb2J9IGJsb2JcbiAgICovXG4gIHJlYWRBc0FycmF5QnVmZmVyIChibG9iKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRmlsZVJlYWRlcilcblxuICAgIHdlYmlkbC5hcmd1bWVudExlbmd0aENoZWNrKGFyZ3VtZW50cywgMSwgJ0ZpbGVSZWFkZXIucmVhZEFzQXJyYXlCdWZmZXInKVxuXG4gICAgYmxvYiA9IHdlYmlkbC5jb252ZXJ0ZXJzLkJsb2IoYmxvYiwgeyBzdHJpY3Q6IGZhbHNlIH0pXG5cbiAgICAvLyBUaGUgcmVhZEFzQXJyYXlCdWZmZXIoYmxvYikgbWV0aG9kLCB3aGVuIGludm9rZWQsXG4gICAgLy8gbXVzdCBpbml0aWF0ZSBhIHJlYWQgb3BlcmF0aW9uIGZvciBibG9iIHdpdGggQXJyYXlCdWZmZXIuXG4gICAgcmVhZE9wZXJhdGlvbih0aGlzLCBibG9iLCAnQXJyYXlCdWZmZXInKVxuICB9XG5cbiAgLyoqXG4gICAqIEBzZWUgaHR0cHM6Ly93M2MuZ2l0aHViLmlvL0ZpbGVBUEkvI3JlYWRBc0JpbmFyeVN0cmluZ1xuICAgKiBAcGFyYW0ge2ltcG9ydCgnYnVmZmVyJykuQmxvYn0gYmxvYlxuICAgKi9cbiAgcmVhZEFzQmluYXJ5U3RyaW5nIChibG9iKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRmlsZVJlYWRlcilcblxuICAgIHdlYmlkbC5hcmd1bWVudExlbmd0aENoZWNrKGFyZ3VtZW50cywgMSwgJ0ZpbGVSZWFkZXIucmVhZEFzQmluYXJ5U3RyaW5nJylcblxuICAgIGJsb2IgPSB3ZWJpZGwuY29udmVydGVycy5CbG9iKGJsb2IsIHsgc3RyaWN0OiBmYWxzZSB9KVxuXG4gICAgLy8gVGhlIHJlYWRBc0JpbmFyeVN0cmluZyhibG9iKSBtZXRob2QsIHdoZW4gaW52b2tlZCxcbiAgICAvLyBtdXN0IGluaXRpYXRlIGEgcmVhZCBvcGVyYXRpb24gZm9yIGJsb2Igd2l0aCBCaW5hcnlTdHJpbmcuXG4gICAgcmVhZE9wZXJhdGlvbih0aGlzLCBibG9iLCAnQmluYXJ5U3RyaW5nJylcbiAgfVxuXG4gIC8qKlxuICAgKiBAc2VlIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby9GaWxlQVBJLyNyZWFkQXNEYXRhVGV4dFxuICAgKiBAcGFyYW0ge2ltcG9ydCgnYnVmZmVyJykuQmxvYn0gYmxvYlxuICAgKiBAcGFyYW0ge3N0cmluZz99IGVuY29kaW5nXG4gICAqL1xuICByZWFkQXNUZXh0IChibG9iLCBlbmNvZGluZyA9IHVuZGVmaW5lZCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEZpbGVSZWFkZXIpXG5cbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDEsICdGaWxlUmVhZGVyLnJlYWRBc1RleHQnKVxuXG4gICAgYmxvYiA9IHdlYmlkbC5jb252ZXJ0ZXJzLkJsb2IoYmxvYiwgeyBzdHJpY3Q6IGZhbHNlIH0pXG5cbiAgICBpZiAoZW5jb2RpbmcgIT09IHVuZGVmaW5lZCkge1xuICAgICAgZW5jb2RpbmcgPSB3ZWJpZGwuY29udmVydGVycy5ET01TdHJpbmcoZW5jb2RpbmcsICdGaWxlUmVhZGVyLnJlYWRBc1RleHQnLCAnZW5jb2RpbmcnKVxuICAgIH1cblxuICAgIC8vIFRoZSByZWFkQXNUZXh0KGJsb2IsIGVuY29kaW5nKSBtZXRob2QsIHdoZW4gaW52b2tlZCxcbiAgICAvLyBtdXN0IGluaXRpYXRlIGEgcmVhZCBvcGVyYXRpb24gZm9yIGJsb2Igd2l0aCBUZXh0IGFuZCBlbmNvZGluZy5cbiAgICByZWFkT3BlcmF0aW9uKHRoaXMsIGJsb2IsICdUZXh0JywgZW5jb2RpbmcpXG4gIH1cblxuICAvKipcbiAgICogQHNlZSBodHRwczovL3czYy5naXRodWIuaW8vRmlsZUFQSS8jZGZuLXJlYWRBc0RhdGFVUkxcbiAgICogQHBhcmFtIHtpbXBvcnQoJ2J1ZmZlcicpLkJsb2J9IGJsb2JcbiAgICovXG4gIHJlYWRBc0RhdGFVUkwgKGJsb2IpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBGaWxlUmVhZGVyKVxuXG4gICAgd2ViaWRsLmFyZ3VtZW50TGVuZ3RoQ2hlY2soYXJndW1lbnRzLCAxLCAnRmlsZVJlYWRlci5yZWFkQXNEYXRhVVJMJylcblxuICAgIGJsb2IgPSB3ZWJpZGwuY29udmVydGVycy5CbG9iKGJsb2IsIHsgc3RyaWN0OiBmYWxzZSB9KVxuXG4gICAgLy8gVGhlIHJlYWRBc0RhdGFVUkwoYmxvYikgbWV0aG9kLCB3aGVuIGludm9rZWQsIG11c3RcbiAgICAvLyBpbml0aWF0ZSBhIHJlYWQgb3BlcmF0aW9uIGZvciBibG9iIHdpdGggRGF0YVVSTC5cbiAgICByZWFkT3BlcmF0aW9uKHRoaXMsIGJsb2IsICdEYXRhVVJMJylcbiAgfVxuXG4gIC8qKlxuICAgKiBAc2VlIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby9GaWxlQVBJLyNkZm4tYWJvcnRcbiAgICovXG4gIGFib3J0ICgpIHtcbiAgICAvLyAxLiBJZiB0aGlzJ3Mgc3RhdGUgaXMgXCJlbXB0eVwiIG9yIGlmIHRoaXMncyBzdGF0ZSBpc1xuICAgIC8vICAgIFwiZG9uZVwiIHNldCB0aGlzJ3MgcmVzdWx0IHRvIG51bGwgYW5kIHRlcm1pbmF0ZVxuICAgIC8vICAgIHRoaXMgYWxnb3JpdGhtLlxuICAgIGlmICh0aGlzW2tTdGF0ZV0gPT09ICdlbXB0eScgfHwgdGhpc1trU3RhdGVdID09PSAnZG9uZScpIHtcbiAgICAgIHRoaXNba1Jlc3VsdF0gPSBudWxsXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICAvLyAyLiBJZiB0aGlzJ3Mgc3RhdGUgaXMgXCJsb2FkaW5nXCIgc2V0IHRoaXMncyBzdGF0ZSB0b1xuICAgIC8vICAgIFwiZG9uZVwiIGFuZCBzZXQgdGhpcydzIHJlc3VsdCB0byBudWxsLlxuICAgIGlmICh0aGlzW2tTdGF0ZV0gPT09ICdsb2FkaW5nJykge1xuICAgICAgdGhpc1trU3RhdGVdID0gJ2RvbmUnXG4gICAgICB0aGlzW2tSZXN1bHRdID0gbnVsbFxuICAgIH1cblxuICAgIC8vIDMuIElmIHRoZXJlIGFyZSBhbnkgdGFza3MgZnJvbSB0aGlzIG9uIHRoZSBmaWxlIHJlYWRpbmdcbiAgICAvLyAgICB0YXNrIHNvdXJjZSBpbiBhbiBhZmZpbGlhdGVkIHRhc2sgcXVldWUsIHRoZW4gcmVtb3ZlXG4gICAgLy8gICAgdGhvc2UgdGFza3MgZnJvbSB0aGF0IHRhc2sgcXVldWUuXG4gICAgdGhpc1trQWJvcnRlZF0gPSB0cnVlXG5cbiAgICAvLyA0LiBUZXJtaW5hdGUgdGhlIGFsZ29yaXRobSBmb3IgdGhlIHJlYWQgbWV0aG9kIGJlaW5nIHByb2Nlc3NlZC5cbiAgICAvLyBUT0RPXG5cbiAgICAvLyA1LiBGaXJlIGEgcHJvZ3Jlc3MgZXZlbnQgY2FsbGVkIGFib3J0IGF0IHRoaXMuXG4gICAgZmlyZUFQcm9ncmVzc0V2ZW50KCdhYm9ydCcsIHRoaXMpXG5cbiAgICAvLyA2LiBJZiB0aGlzJ3Mgc3RhdGUgaXMgbm90IFwibG9hZGluZ1wiLCBmaXJlIGEgcHJvZ3Jlc3NcbiAgICAvLyAgICBldmVudCBjYWxsZWQgbG9hZGVuZCBhdCB0aGlzLlxuICAgIGlmICh0aGlzW2tTdGF0ZV0gIT09ICdsb2FkaW5nJykge1xuICAgICAgZmlyZUFQcm9ncmVzc0V2ZW50KCdsb2FkZW5kJywgdGhpcylcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQHNlZSBodHRwczovL3czYy5naXRodWIuaW8vRmlsZUFQSS8jZG9tLWZpbGVyZWFkZXItcmVhZHlzdGF0ZVxuICAgKi9cbiAgZ2V0IHJlYWR5U3RhdGUgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEZpbGVSZWFkZXIpXG5cbiAgICBzd2l0Y2ggKHRoaXNba1N0YXRlXSkge1xuICAgICAgY2FzZSAnZW1wdHknOiByZXR1cm4gdGhpcy5FTVBUWVxuICAgICAgY2FzZSAnbG9hZGluZyc6IHJldHVybiB0aGlzLkxPQURJTkdcbiAgICAgIGNhc2UgJ2RvbmUnOiByZXR1cm4gdGhpcy5ET05FXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBzZWUgaHR0cHM6Ly93M2MuZ2l0aHViLmlvL0ZpbGVBUEkvI2RvbS1maWxlcmVhZGVyLXJlc3VsdFxuICAgKi9cbiAgZ2V0IHJlc3VsdCAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRmlsZVJlYWRlcilcblxuICAgIC8vIFRoZSByZXN1bHQgYXR0cmlidXRlXHUyMDE5cyBnZXR0ZXIsIHdoZW4gaW52b2tlZCwgbXVzdCByZXR1cm5cbiAgICAvLyB0aGlzJ3MgcmVzdWx0LlxuICAgIHJldHVybiB0aGlzW2tSZXN1bHRdXG4gIH1cblxuICAvKipcbiAgICogQHNlZSBodHRwczovL3czYy5naXRodWIuaW8vRmlsZUFQSS8jZG9tLWZpbGVyZWFkZXItZXJyb3JcbiAgICovXG4gIGdldCBlcnJvciAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRmlsZVJlYWRlcilcblxuICAgIC8vIFRoZSBlcnJvciBhdHRyaWJ1dGVcdTIwMTlzIGdldHRlciwgd2hlbiBpbnZva2VkLCBtdXN0IHJldHVyblxuICAgIC8vIHRoaXMncyBlcnJvci5cbiAgICByZXR1cm4gdGhpc1trRXJyb3JdXG4gIH1cblxuICBnZXQgb25sb2FkZW5kICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBGaWxlUmVhZGVyKVxuXG4gICAgcmV0dXJuIHRoaXNba0V2ZW50c10ubG9hZGVuZFxuICB9XG5cbiAgc2V0IG9ubG9hZGVuZCAoZm4pIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBGaWxlUmVhZGVyKVxuXG4gICAgaWYgKHRoaXNba0V2ZW50c10ubG9hZGVuZCkge1xuICAgICAgdGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKCdsb2FkZW5kJywgdGhpc1trRXZlbnRzXS5sb2FkZW5kKVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgZm4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRoaXNba0V2ZW50c10ubG9hZGVuZCA9IGZuXG4gICAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWRlbmQnLCBmbilcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpc1trRXZlbnRzXS5sb2FkZW5kID0gbnVsbFxuICAgIH1cbiAgfVxuXG4gIGdldCBvbmVycm9yICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBGaWxlUmVhZGVyKVxuXG4gICAgcmV0dXJuIHRoaXNba0V2ZW50c10uZXJyb3JcbiAgfVxuXG4gIHNldCBvbmVycm9yIChmbikge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEZpbGVSZWFkZXIpXG5cbiAgICBpZiAodGhpc1trRXZlbnRzXS5lcnJvcikge1xuICAgICAgdGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKCdlcnJvcicsIHRoaXNba0V2ZW50c10uZXJyb3IpXG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBmbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhpc1trRXZlbnRzXS5lcnJvciA9IGZuXG4gICAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoJ2Vycm9yJywgZm4pXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXNba0V2ZW50c10uZXJyb3IgPSBudWxsXG4gICAgfVxuICB9XG5cbiAgZ2V0IG9ubG9hZHN0YXJ0ICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBGaWxlUmVhZGVyKVxuXG4gICAgcmV0dXJuIHRoaXNba0V2ZW50c10ubG9hZHN0YXJ0XG4gIH1cblxuICBzZXQgb25sb2Fkc3RhcnQgKGZuKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRmlsZVJlYWRlcilcblxuICAgIGlmICh0aGlzW2tFdmVudHNdLmxvYWRzdGFydCkge1xuICAgICAgdGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKCdsb2Fkc3RhcnQnLCB0aGlzW2tFdmVudHNdLmxvYWRzdGFydClcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGZuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aGlzW2tFdmVudHNdLmxvYWRzdGFydCA9IGZuXG4gICAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWRzdGFydCcsIGZuKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzW2tFdmVudHNdLmxvYWRzdGFydCA9IG51bGxcbiAgICB9XG4gIH1cblxuICBnZXQgb25wcm9ncmVzcyAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRmlsZVJlYWRlcilcblxuICAgIHJldHVybiB0aGlzW2tFdmVudHNdLnByb2dyZXNzXG4gIH1cblxuICBzZXQgb25wcm9ncmVzcyAoZm4pIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBGaWxlUmVhZGVyKVxuXG4gICAgaWYgKHRoaXNba0V2ZW50c10ucHJvZ3Jlc3MpIHtcbiAgICAgIHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcigncHJvZ3Jlc3MnLCB0aGlzW2tFdmVudHNdLnByb2dyZXNzKVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgZm4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRoaXNba0V2ZW50c10ucHJvZ3Jlc3MgPSBmblxuICAgICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKCdwcm9ncmVzcycsIGZuKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzW2tFdmVudHNdLnByb2dyZXNzID0gbnVsbFxuICAgIH1cbiAgfVxuXG4gIGdldCBvbmxvYWQgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEZpbGVSZWFkZXIpXG5cbiAgICByZXR1cm4gdGhpc1trRXZlbnRzXS5sb2FkXG4gIH1cblxuICBzZXQgb25sb2FkIChmbikge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEZpbGVSZWFkZXIpXG5cbiAgICBpZiAodGhpc1trRXZlbnRzXS5sb2FkKSB7XG4gICAgICB0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2xvYWQnLCB0aGlzW2tFdmVudHNdLmxvYWQpXG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBmbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhpc1trRXZlbnRzXS5sb2FkID0gZm5cbiAgICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcignbG9hZCcsIGZuKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzW2tFdmVudHNdLmxvYWQgPSBudWxsXG4gICAgfVxuICB9XG5cbiAgZ2V0IG9uYWJvcnQgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEZpbGVSZWFkZXIpXG5cbiAgICByZXR1cm4gdGhpc1trRXZlbnRzXS5hYm9ydFxuICB9XG5cbiAgc2V0IG9uYWJvcnQgKGZuKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRmlsZVJlYWRlcilcblxuICAgIGlmICh0aGlzW2tFdmVudHNdLmFib3J0KSB7XG4gICAgICB0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2Fib3J0JywgdGhpc1trRXZlbnRzXS5hYm9ydClcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGZuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aGlzW2tFdmVudHNdLmFib3J0ID0gZm5cbiAgICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcignYWJvcnQnLCBmbilcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpc1trRXZlbnRzXS5hYm9ydCA9IG51bGxcbiAgICB9XG4gIH1cbn1cblxuLy8gaHR0cHM6Ly93M2MuZ2l0aHViLmlvL0ZpbGVBUEkvI2RvbS1maWxlcmVhZGVyLWVtcHR5XG5GaWxlUmVhZGVyLkVNUFRZID0gRmlsZVJlYWRlci5wcm90b3R5cGUuRU1QVFkgPSAwXG4vLyBodHRwczovL3czYy5naXRodWIuaW8vRmlsZUFQSS8jZG9tLWZpbGVyZWFkZXItbG9hZGluZ1xuRmlsZVJlYWRlci5MT0FESU5HID0gRmlsZVJlYWRlci5wcm90b3R5cGUuTE9BRElORyA9IDFcbi8vIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby9GaWxlQVBJLyNkb20tZmlsZXJlYWRlci1kb25lXG5GaWxlUmVhZGVyLkRPTkUgPSBGaWxlUmVhZGVyLnByb3RvdHlwZS5ET05FID0gMlxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhGaWxlUmVhZGVyLnByb3RvdHlwZSwge1xuICBFTVBUWTogc3RhdGljUHJvcGVydHlEZXNjcmlwdG9ycyxcbiAgTE9BRElORzogc3RhdGljUHJvcGVydHlEZXNjcmlwdG9ycyxcbiAgRE9ORTogc3RhdGljUHJvcGVydHlEZXNjcmlwdG9ycyxcbiAgcmVhZEFzQXJyYXlCdWZmZXI6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIHJlYWRBc0JpbmFyeVN0cmluZzoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgcmVhZEFzVGV4dDoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgcmVhZEFzRGF0YVVSTDoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgYWJvcnQ6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIHJlYWR5U3RhdGU6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIHJlc3VsdDoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgZXJyb3I6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIG9ubG9hZHN0YXJ0OiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBvbnByb2dyZXNzOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBvbmxvYWQ6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIG9uYWJvcnQ6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIG9uZXJyb3I6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIG9ubG9hZGVuZDoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgW1N5bWJvbC50b1N0cmluZ1RhZ106IHtcbiAgICB2YWx1ZTogJ0ZpbGVSZWFkZXInLFxuICAgIHdyaXRhYmxlOiBmYWxzZSxcbiAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICBjb25maWd1cmFibGU6IHRydWVcbiAgfVxufSlcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoRmlsZVJlYWRlciwge1xuICBFTVBUWTogc3RhdGljUHJvcGVydHlEZXNjcmlwdG9ycyxcbiAgTE9BRElORzogc3RhdGljUHJvcGVydHlEZXNjcmlwdG9ycyxcbiAgRE9ORTogc3RhdGljUHJvcGVydHlEZXNjcmlwdG9yc1xufSlcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIEZpbGVSZWFkZXJcbn1cbiIsICIndXNlIHN0cmljdCdcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGtDb25zdHJ1Y3Q6IHJlcXVpcmUoJy4uLy4uL2NvcmUvc3ltYm9scycpLmtDb25zdHJ1Y3Rcbn1cbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgYXNzZXJ0ID0gcmVxdWlyZSgnbm9kZTphc3NlcnQnKVxuY29uc3QgeyBVUkxTZXJpYWxpemVyIH0gPSByZXF1aXJlKCcuLi9mZXRjaC9kYXRhLXVybCcpXG5jb25zdCB7IGlzVmFsaWRIZWFkZXJOYW1lIH0gPSByZXF1aXJlKCcuLi9mZXRjaC91dGlsJylcblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vdXJsLnNwZWMud2hhdHdnLm9yZy8jY29uY2VwdC11cmwtZXF1YWxzXG4gKiBAcGFyYW0ge1VSTH0gQVxuICogQHBhcmFtIHtVUkx9IEJcbiAqIEBwYXJhbSB7Ym9vbGVhbiB8IHVuZGVmaW5lZH0gZXhjbHVkZUZyYWdtZW50XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuZnVuY3Rpb24gdXJsRXF1YWxzIChBLCBCLCBleGNsdWRlRnJhZ21lbnQgPSBmYWxzZSkge1xuICBjb25zdCBzZXJpYWxpemVkQSA9IFVSTFNlcmlhbGl6ZXIoQSwgZXhjbHVkZUZyYWdtZW50KVxuXG4gIGNvbnN0IHNlcmlhbGl6ZWRCID0gVVJMU2VyaWFsaXplcihCLCBleGNsdWRlRnJhZ21lbnQpXG5cbiAgcmV0dXJuIHNlcmlhbGl6ZWRBID09PSBzZXJpYWxpemVkQlxufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL2Nocm9taXVtL2Nocm9taXVtL2Jsb2IvNjk0ZDIwZDEzNGNiNTUzZDhkODllNTUwMGI5MTQ4MDEyYjFiYTI5OS9jb250ZW50L2Jyb3dzZXIvY2FjaGVfc3RvcmFnZS9jYWNoZV9zdG9yYWdlX2NhY2hlLmNjI0wyNjAtTDI2MlxuICogQHBhcmFtIHtzdHJpbmd9IGhlYWRlclxuICovXG5mdW5jdGlvbiBnZXRGaWVsZFZhbHVlcyAoaGVhZGVyKSB7XG4gIGFzc2VydChoZWFkZXIgIT09IG51bGwpXG5cbiAgY29uc3QgdmFsdWVzID0gW11cblxuICBmb3IgKGxldCB2YWx1ZSBvZiBoZWFkZXIuc3BsaXQoJywnKSkge1xuICAgIHZhbHVlID0gdmFsdWUudHJpbSgpXG5cbiAgICBpZiAoaXNWYWxpZEhlYWRlck5hbWUodmFsdWUpKSB7XG4gICAgICB2YWx1ZXMucHVzaCh2YWx1ZSlcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdmFsdWVzXG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICB1cmxFcXVhbHMsXG4gIGdldEZpZWxkVmFsdWVzXG59XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHsga0NvbnN0cnVjdCB9ID0gcmVxdWlyZSgnLi9zeW1ib2xzJylcbmNvbnN0IHsgdXJsRXF1YWxzLCBnZXRGaWVsZFZhbHVlcyB9ID0gcmVxdWlyZSgnLi91dGlsJylcbmNvbnN0IHsga0VudW1lcmFibGVQcm9wZXJ0eSwgaXNEaXN0dXJiZWQgfSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUvdXRpbCcpXG5jb25zdCB7IHdlYmlkbCB9ID0gcmVxdWlyZSgnLi4vZmV0Y2gvd2ViaWRsJylcbmNvbnN0IHsgUmVzcG9uc2UsIGNsb25lUmVzcG9uc2UsIGZyb21Jbm5lclJlc3BvbnNlIH0gPSByZXF1aXJlKCcuLi9mZXRjaC9yZXNwb25zZScpXG5jb25zdCB7IFJlcXVlc3QsIGZyb21Jbm5lclJlcXVlc3QgfSA9IHJlcXVpcmUoJy4uL2ZldGNoL3JlcXVlc3QnKVxuY29uc3QgeyBrU3RhdGUgfSA9IHJlcXVpcmUoJy4uL2ZldGNoL3N5bWJvbHMnKVxuY29uc3QgeyBmZXRjaGluZyB9ID0gcmVxdWlyZSgnLi4vZmV0Y2gvaW5kZXgnKVxuY29uc3QgeyB1cmxJc0h0dHBIdHRwc1NjaGVtZSwgY3JlYXRlRGVmZXJyZWRQcm9taXNlLCByZWFkQWxsQnl0ZXMgfSA9IHJlcXVpcmUoJy4uL2ZldGNoL3V0aWwnKVxuY29uc3QgYXNzZXJ0ID0gcmVxdWlyZSgnbm9kZTphc3NlcnQnKVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly93M2MuZ2l0aHViLmlvL1NlcnZpY2VXb3JrZXIvI2Rmbi1jYWNoZS1iYXRjaC1vcGVyYXRpb25cbiAqIEB0eXBlZGVmIHtPYmplY3R9IENhY2hlQmF0Y2hPcGVyYXRpb25cbiAqIEBwcm9wZXJ0eSB7J2RlbGV0ZScgfCAncHV0J30gdHlwZVxuICogQHByb3BlcnR5IHthbnl9IHJlcXVlc3RcbiAqIEBwcm9wZXJ0eSB7YW55fSByZXNwb25zZVxuICogQHByb3BlcnR5IHtpbXBvcnQoJy4uLy4uL3R5cGVzL2NhY2hlJykuQ2FjaGVRdWVyeU9wdGlvbnN9IG9wdGlvbnNcbiAqL1xuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly93M2MuZ2l0aHViLmlvL1NlcnZpY2VXb3JrZXIvI2Rmbi1yZXF1ZXN0LXJlc3BvbnNlLWxpc3RcbiAqIEB0eXBlZGVmIHtbYW55LCBhbnldW119IHJlcXVlc3RSZXNwb25zZUxpc3RcbiAqL1xuXG5jbGFzcyBDYWNoZSB7XG4gIC8qKlxuICAgKiBAc2VlIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby9TZXJ2aWNlV29ya2VyLyNkZm4tcmVsZXZhbnQtcmVxdWVzdC1yZXNwb25zZS1saXN0XG4gICAqIEB0eXBlIHtyZXF1ZXN0UmVzcG9uc2VMaXN0fVxuICAgKi9cbiAgI3JlbGV2YW50UmVxdWVzdFJlc3BvbnNlTGlzdFxuXG4gIGNvbnN0cnVjdG9yICgpIHtcbiAgICBpZiAoYXJndW1lbnRzWzBdICE9PSBrQ29uc3RydWN0KSB7XG4gICAgICB3ZWJpZGwuaWxsZWdhbENvbnN0cnVjdG9yKClcbiAgICB9XG5cbiAgICB3ZWJpZGwudXRpbC5tYXJrQXNVbmNsb25lYWJsZSh0aGlzKVxuICAgIHRoaXMuI3JlbGV2YW50UmVxdWVzdFJlc3BvbnNlTGlzdCA9IGFyZ3VtZW50c1sxXVxuICB9XG5cbiAgYXN5bmMgbWF0Y2ggKHJlcXVlc3QsIG9wdGlvbnMgPSB7fSkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIENhY2hlKVxuXG4gICAgY29uc3QgcHJlZml4ID0gJ0NhY2hlLm1hdGNoJ1xuICAgIHdlYmlkbC5hcmd1bWVudExlbmd0aENoZWNrKGFyZ3VtZW50cywgMSwgcHJlZml4KVxuXG4gICAgcmVxdWVzdCA9IHdlYmlkbC5jb252ZXJ0ZXJzLlJlcXVlc3RJbmZvKHJlcXVlc3QsIHByZWZpeCwgJ3JlcXVlc3QnKVxuICAgIG9wdGlvbnMgPSB3ZWJpZGwuY29udmVydGVycy5DYWNoZVF1ZXJ5T3B0aW9ucyhvcHRpb25zLCBwcmVmaXgsICdvcHRpb25zJylcblxuICAgIGNvbnN0IHAgPSB0aGlzLiNpbnRlcm5hbE1hdGNoQWxsKHJlcXVlc3QsIG9wdGlvbnMsIDEpXG5cbiAgICBpZiAocC5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIHJldHVybiBwWzBdXG4gIH1cblxuICBhc3luYyBtYXRjaEFsbCAocmVxdWVzdCA9IHVuZGVmaW5lZCwgb3B0aW9ucyA9IHt9KSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgQ2FjaGUpXG5cbiAgICBjb25zdCBwcmVmaXggPSAnQ2FjaGUubWF0Y2hBbGwnXG4gICAgaWYgKHJlcXVlc3QgIT09IHVuZGVmaW5lZCkgcmVxdWVzdCA9IHdlYmlkbC5jb252ZXJ0ZXJzLlJlcXVlc3RJbmZvKHJlcXVlc3QsIHByZWZpeCwgJ3JlcXVlc3QnKVxuICAgIG9wdGlvbnMgPSB3ZWJpZGwuY29udmVydGVycy5DYWNoZVF1ZXJ5T3B0aW9ucyhvcHRpb25zLCBwcmVmaXgsICdvcHRpb25zJylcblxuICAgIHJldHVybiB0aGlzLiNpbnRlcm5hbE1hdGNoQWxsKHJlcXVlc3QsIG9wdGlvbnMpXG4gIH1cblxuICBhc3luYyBhZGQgKHJlcXVlc3QpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBDYWNoZSlcblxuICAgIGNvbnN0IHByZWZpeCA9ICdDYWNoZS5hZGQnXG4gICAgd2ViaWRsLmFyZ3VtZW50TGVuZ3RoQ2hlY2soYXJndW1lbnRzLCAxLCBwcmVmaXgpXG5cbiAgICByZXF1ZXN0ID0gd2ViaWRsLmNvbnZlcnRlcnMuUmVxdWVzdEluZm8ocmVxdWVzdCwgcHJlZml4LCAncmVxdWVzdCcpXG5cbiAgICAvLyAxLlxuICAgIGNvbnN0IHJlcXVlc3RzID0gW3JlcXVlc3RdXG5cbiAgICAvLyAyLlxuICAgIGNvbnN0IHJlc3BvbnNlQXJyYXlQcm9taXNlID0gdGhpcy5hZGRBbGwocmVxdWVzdHMpXG5cbiAgICAvLyAzLlxuICAgIHJldHVybiBhd2FpdCByZXNwb25zZUFycmF5UHJvbWlzZVxuICB9XG5cbiAgYXN5bmMgYWRkQWxsIChyZXF1ZXN0cykge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIENhY2hlKVxuXG4gICAgY29uc3QgcHJlZml4ID0gJ0NhY2hlLmFkZEFsbCdcbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDEsIHByZWZpeClcblxuICAgIC8vIDEuXG4gICAgY29uc3QgcmVzcG9uc2VQcm9taXNlcyA9IFtdXG5cbiAgICAvLyAyLlxuICAgIGNvbnN0IHJlcXVlc3RMaXN0ID0gW11cblxuICAgIC8vIDMuXG4gICAgZm9yIChsZXQgcmVxdWVzdCBvZiByZXF1ZXN0cykge1xuICAgICAgaWYgKHJlcXVlc3QgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmNvbnZlcnNpb25GYWlsZWQoe1xuICAgICAgICAgIHByZWZpeCxcbiAgICAgICAgICBhcmd1bWVudDogJ0FyZ3VtZW50IDEnLFxuICAgICAgICAgIHR5cGVzOiBbJ3VuZGVmaW5lZCBpcyBub3QgYWxsb3dlZCddXG4gICAgICAgIH0pXG4gICAgICB9XG5cbiAgICAgIHJlcXVlc3QgPSB3ZWJpZGwuY29udmVydGVycy5SZXF1ZXN0SW5mbyhyZXF1ZXN0KVxuXG4gICAgICBpZiAodHlwZW9mIHJlcXVlc3QgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG5cbiAgICAgIC8vIDMuMVxuICAgICAgY29uc3QgciA9IHJlcXVlc3Rba1N0YXRlXVxuXG4gICAgICAvLyAzLjJcbiAgICAgIGlmICghdXJsSXNIdHRwSHR0cHNTY2hlbWUoci51cmwpIHx8IHIubWV0aG9kICE9PSAnR0VUJykge1xuICAgICAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmV4Y2VwdGlvbih7XG4gICAgICAgICAgaGVhZGVyOiBwcmVmaXgsXG4gICAgICAgICAgbWVzc2FnZTogJ0V4cGVjdGVkIGh0dHAvcyBzY2hlbWUgd2hlbiBtZXRob2QgaXMgbm90IEdFVC4nXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gNC5cbiAgICAvKiogQHR5cGUge1JldHVyblR5cGU8dHlwZW9mIGZldGNoaW5nPltdfSAqL1xuICAgIGNvbnN0IGZldGNoQ29udHJvbGxlcnMgPSBbXVxuXG4gICAgLy8gNS5cbiAgICBmb3IgKGNvbnN0IHJlcXVlc3Qgb2YgcmVxdWVzdHMpIHtcbiAgICAgIC8vIDUuMVxuICAgICAgY29uc3QgciA9IG5ldyBSZXF1ZXN0KHJlcXVlc3QpW2tTdGF0ZV1cblxuICAgICAgLy8gNS4yXG4gICAgICBpZiAoIXVybElzSHR0cEh0dHBzU2NoZW1lKHIudXJsKSkge1xuICAgICAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmV4Y2VwdGlvbih7XG4gICAgICAgICAgaGVhZGVyOiBwcmVmaXgsXG4gICAgICAgICAgbWVzc2FnZTogJ0V4cGVjdGVkIGh0dHAvcyBzY2hlbWUuJ1xuICAgICAgICB9KVxuICAgICAgfVxuXG4gICAgICAvLyA1LjRcbiAgICAgIHIuaW5pdGlhdG9yID0gJ2ZldGNoJ1xuICAgICAgci5kZXN0aW5hdGlvbiA9ICdzdWJyZXNvdXJjZSdcblxuICAgICAgLy8gNS41XG4gICAgICByZXF1ZXN0TGlzdC5wdXNoKHIpXG5cbiAgICAgIC8vIDUuNlxuICAgICAgY29uc3QgcmVzcG9uc2VQcm9taXNlID0gY3JlYXRlRGVmZXJyZWRQcm9taXNlKClcblxuICAgICAgLy8gNS43XG4gICAgICBmZXRjaENvbnRyb2xsZXJzLnB1c2goZmV0Y2hpbmcoe1xuICAgICAgICByZXF1ZXN0OiByLFxuICAgICAgICBwcm9jZXNzUmVzcG9uc2UgKHJlc3BvbnNlKSB7XG4gICAgICAgICAgLy8gMS5cbiAgICAgICAgICBpZiAocmVzcG9uc2UudHlwZSA9PT0gJ2Vycm9yJyB8fCByZXNwb25zZS5zdGF0dXMgPT09IDIwNiB8fCByZXNwb25zZS5zdGF0dXMgPCAyMDAgfHwgcmVzcG9uc2Uuc3RhdHVzID4gMjk5KSB7XG4gICAgICAgICAgICByZXNwb25zZVByb21pc2UucmVqZWN0KHdlYmlkbC5lcnJvcnMuZXhjZXB0aW9uKHtcbiAgICAgICAgICAgICAgaGVhZGVyOiAnQ2FjaGUuYWRkQWxsJyxcbiAgICAgICAgICAgICAgbWVzc2FnZTogJ1JlY2VpdmVkIGFuIGludmFsaWQgc3RhdHVzIGNvZGUgb3IgdGhlIHJlcXVlc3QgZmFpbGVkLidcbiAgICAgICAgICAgIH0pKVxuICAgICAgICAgIH0gZWxzZSBpZiAocmVzcG9uc2UuaGVhZGVyc0xpc3QuY29udGFpbnMoJ3ZhcnknKSkgeyAvLyAyLlxuICAgICAgICAgICAgLy8gMi4xXG4gICAgICAgICAgICBjb25zdCBmaWVsZFZhbHVlcyA9IGdldEZpZWxkVmFsdWVzKHJlc3BvbnNlLmhlYWRlcnNMaXN0LmdldCgndmFyeScpKVxuXG4gICAgICAgICAgICAvLyAyLjJcbiAgICAgICAgICAgIGZvciAoY29uc3QgZmllbGRWYWx1ZSBvZiBmaWVsZFZhbHVlcykge1xuICAgICAgICAgICAgICAvLyAyLjIuMVxuICAgICAgICAgICAgICBpZiAoZmllbGRWYWx1ZSA9PT0gJyonKSB7XG4gICAgICAgICAgICAgICAgcmVzcG9uc2VQcm9taXNlLnJlamVjdCh3ZWJpZGwuZXJyb3JzLmV4Y2VwdGlvbih7XG4gICAgICAgICAgICAgICAgICBoZWFkZXI6ICdDYWNoZS5hZGRBbGwnLFxuICAgICAgICAgICAgICAgICAgbWVzc2FnZTogJ2ludmFsaWQgdmFyeSBmaWVsZCB2YWx1ZSdcbiAgICAgICAgICAgICAgICB9KSlcblxuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgY29udHJvbGxlciBvZiBmZXRjaENvbnRyb2xsZXJzKSB7XG4gICAgICAgICAgICAgICAgICBjb250cm9sbGVyLmFib3J0KClcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgcHJvY2Vzc1Jlc3BvbnNlRW5kT2ZCb2R5IChyZXNwb25zZSkge1xuICAgICAgICAgIC8vIDEuXG4gICAgICAgICAgaWYgKHJlc3BvbnNlLmFib3J0ZWQpIHtcbiAgICAgICAgICAgIHJlc3BvbnNlUHJvbWlzZS5yZWplY3QobmV3IERPTUV4Y2VwdGlvbignYWJvcnRlZCcsICdBYm9ydEVycm9yJykpXG4gICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyAyLlxuICAgICAgICAgIHJlc3BvbnNlUHJvbWlzZS5yZXNvbHZlKHJlc3BvbnNlKVxuICAgICAgICB9XG4gICAgICB9KSlcblxuICAgICAgLy8gNS44XG4gICAgICByZXNwb25zZVByb21pc2VzLnB1c2gocmVzcG9uc2VQcm9taXNlLnByb21pc2UpXG4gICAgfVxuXG4gICAgLy8gNi5cbiAgICBjb25zdCBwID0gUHJvbWlzZS5hbGwocmVzcG9uc2VQcm9taXNlcylcblxuICAgIC8vIDcuXG4gICAgY29uc3QgcmVzcG9uc2VzID0gYXdhaXQgcFxuXG4gICAgLy8gNy4xXG4gICAgY29uc3Qgb3BlcmF0aW9ucyA9IFtdXG5cbiAgICAvLyA3LjJcbiAgICBsZXQgaW5kZXggPSAwXG5cbiAgICAvLyA3LjNcbiAgICBmb3IgKGNvbnN0IHJlc3BvbnNlIG9mIHJlc3BvbnNlcykge1xuICAgICAgLy8gNy4zLjFcbiAgICAgIC8qKiBAdHlwZSB7Q2FjaGVCYXRjaE9wZXJhdGlvbn0gKi9cbiAgICAgIGNvbnN0IG9wZXJhdGlvbiA9IHtcbiAgICAgICAgdHlwZTogJ3B1dCcsIC8vIDcuMy4yXG4gICAgICAgIHJlcXVlc3Q6IHJlcXVlc3RMaXN0W2luZGV4XSwgLy8gNy4zLjNcbiAgICAgICAgcmVzcG9uc2UgLy8gNy4zLjRcbiAgICAgIH1cblxuICAgICAgb3BlcmF0aW9ucy5wdXNoKG9wZXJhdGlvbikgLy8gNy4zLjVcblxuICAgICAgaW5kZXgrKyAvLyA3LjMuNlxuICAgIH1cblxuICAgIC8vIDcuNVxuICAgIGNvbnN0IGNhY2hlSm9iUHJvbWlzZSA9IGNyZWF0ZURlZmVycmVkUHJvbWlzZSgpXG5cbiAgICAvLyA3LjYuMVxuICAgIGxldCBlcnJvckRhdGEgPSBudWxsXG5cbiAgICAvLyA3LjYuMlxuICAgIHRyeSB7XG4gICAgICB0aGlzLiNiYXRjaENhY2hlT3BlcmF0aW9ucyhvcGVyYXRpb25zKVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGVycm9yRGF0YSA9IGVcbiAgICB9XG5cbiAgICAvLyA3LjYuM1xuICAgIHF1ZXVlTWljcm90YXNrKCgpID0+IHtcbiAgICAgIC8vIDcuNi4zLjFcbiAgICAgIGlmIChlcnJvckRhdGEgPT09IG51bGwpIHtcbiAgICAgICAgY2FjaGVKb2JQcm9taXNlLnJlc29sdmUodW5kZWZpbmVkKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gNy42LjMuMlxuICAgICAgICBjYWNoZUpvYlByb21pc2UucmVqZWN0KGVycm9yRGF0YSlcbiAgICAgIH1cbiAgICB9KVxuXG4gICAgLy8gNy43XG4gICAgcmV0dXJuIGNhY2hlSm9iUHJvbWlzZS5wcm9taXNlXG4gIH1cblxuICBhc3luYyBwdXQgKHJlcXVlc3QsIHJlc3BvbnNlKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgQ2FjaGUpXG5cbiAgICBjb25zdCBwcmVmaXggPSAnQ2FjaGUucHV0J1xuICAgIHdlYmlkbC5hcmd1bWVudExlbmd0aENoZWNrKGFyZ3VtZW50cywgMiwgcHJlZml4KVxuXG4gICAgcmVxdWVzdCA9IHdlYmlkbC5jb252ZXJ0ZXJzLlJlcXVlc3RJbmZvKHJlcXVlc3QsIHByZWZpeCwgJ3JlcXVlc3QnKVxuICAgIHJlc3BvbnNlID0gd2ViaWRsLmNvbnZlcnRlcnMuUmVzcG9uc2UocmVzcG9uc2UsIHByZWZpeCwgJ3Jlc3BvbnNlJylcblxuICAgIC8vIDEuXG4gICAgbGV0IGlubmVyUmVxdWVzdCA9IG51bGxcblxuICAgIC8vIDIuXG4gICAgaWYgKHJlcXVlc3QgaW5zdGFuY2VvZiBSZXF1ZXN0KSB7XG4gICAgICBpbm5lclJlcXVlc3QgPSByZXF1ZXN0W2tTdGF0ZV1cbiAgICB9IGVsc2UgeyAvLyAzLlxuICAgICAgaW5uZXJSZXF1ZXN0ID0gbmV3IFJlcXVlc3QocmVxdWVzdClba1N0YXRlXVxuICAgIH1cblxuICAgIC8vIDQuXG4gICAgaWYgKCF1cmxJc0h0dHBIdHRwc1NjaGVtZShpbm5lclJlcXVlc3QudXJsKSB8fCBpbm5lclJlcXVlc3QubWV0aG9kICE9PSAnR0VUJykge1xuICAgICAgdGhyb3cgd2ViaWRsLmVycm9ycy5leGNlcHRpb24oe1xuICAgICAgICBoZWFkZXI6IHByZWZpeCxcbiAgICAgICAgbWVzc2FnZTogJ0V4cGVjdGVkIGFuIGh0dHAvcyBzY2hlbWUgd2hlbiBtZXRob2QgaXMgbm90IEdFVCdcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgLy8gNS5cbiAgICBjb25zdCBpbm5lclJlc3BvbnNlID0gcmVzcG9uc2Vba1N0YXRlXVxuXG4gICAgLy8gNi5cbiAgICBpZiAoaW5uZXJSZXNwb25zZS5zdGF0dXMgPT09IDIwNikge1xuICAgICAgdGhyb3cgd2ViaWRsLmVycm9ycy5leGNlcHRpb24oe1xuICAgICAgICBoZWFkZXI6IHByZWZpeCxcbiAgICAgICAgbWVzc2FnZTogJ0dvdCAyMDYgc3RhdHVzJ1xuICAgICAgfSlcbiAgICB9XG5cbiAgICAvLyA3LlxuICAgIGlmIChpbm5lclJlc3BvbnNlLmhlYWRlcnNMaXN0LmNvbnRhaW5zKCd2YXJ5JykpIHtcbiAgICAgIC8vIDcuMS5cbiAgICAgIGNvbnN0IGZpZWxkVmFsdWVzID0gZ2V0RmllbGRWYWx1ZXMoaW5uZXJSZXNwb25zZS5oZWFkZXJzTGlzdC5nZXQoJ3ZhcnknKSlcblxuICAgICAgLy8gNy4yLlxuICAgICAgZm9yIChjb25zdCBmaWVsZFZhbHVlIG9mIGZpZWxkVmFsdWVzKSB7XG4gICAgICAgIC8vIDcuMi4xXG4gICAgICAgIGlmIChmaWVsZFZhbHVlID09PSAnKicpIHtcbiAgICAgICAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmV4Y2VwdGlvbih7XG4gICAgICAgICAgICBoZWFkZXI6IHByZWZpeCxcbiAgICAgICAgICAgIG1lc3NhZ2U6ICdHb3QgKiB2YXJ5IGZpZWxkIHZhbHVlJ1xuICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyA4LlxuICAgIGlmIChpbm5lclJlc3BvbnNlLmJvZHkgJiYgKGlzRGlzdHVyYmVkKGlubmVyUmVzcG9uc2UuYm9keS5zdHJlYW0pIHx8IGlubmVyUmVzcG9uc2UuYm9keS5zdHJlYW0ubG9ja2VkKSkge1xuICAgICAgdGhyb3cgd2ViaWRsLmVycm9ycy5leGNlcHRpb24oe1xuICAgICAgICBoZWFkZXI6IHByZWZpeCxcbiAgICAgICAgbWVzc2FnZTogJ1Jlc3BvbnNlIGJvZHkgaXMgbG9ja2VkIG9yIGRpc3R1cmJlZCdcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgLy8gOS5cbiAgICBjb25zdCBjbG9uZWRSZXNwb25zZSA9IGNsb25lUmVzcG9uc2UoaW5uZXJSZXNwb25zZSlcblxuICAgIC8vIDEwLlxuICAgIGNvbnN0IGJvZHlSZWFkUHJvbWlzZSA9IGNyZWF0ZURlZmVycmVkUHJvbWlzZSgpXG5cbiAgICAvLyAxMS5cbiAgICBpZiAoaW5uZXJSZXNwb25zZS5ib2R5ICE9IG51bGwpIHtcbiAgICAgIC8vIDExLjFcbiAgICAgIGNvbnN0IHN0cmVhbSA9IGlubmVyUmVzcG9uc2UuYm9keS5zdHJlYW1cblxuICAgICAgLy8gMTEuMlxuICAgICAgY29uc3QgcmVhZGVyID0gc3RyZWFtLmdldFJlYWRlcigpXG5cbiAgICAgIC8vIDExLjNcbiAgICAgIHJlYWRBbGxCeXRlcyhyZWFkZXIpLnRoZW4oYm9keVJlYWRQcm9taXNlLnJlc29sdmUsIGJvZHlSZWFkUHJvbWlzZS5yZWplY3QpXG4gICAgfSBlbHNlIHtcbiAgICAgIGJvZHlSZWFkUHJvbWlzZS5yZXNvbHZlKHVuZGVmaW5lZClcbiAgICB9XG5cbiAgICAvLyAxMi5cbiAgICAvKiogQHR5cGUge0NhY2hlQmF0Y2hPcGVyYXRpb25bXX0gKi9cbiAgICBjb25zdCBvcGVyYXRpb25zID0gW11cblxuICAgIC8vIDEzLlxuICAgIC8qKiBAdHlwZSB7Q2FjaGVCYXRjaE9wZXJhdGlvbn0gKi9cbiAgICBjb25zdCBvcGVyYXRpb24gPSB7XG4gICAgICB0eXBlOiAncHV0JywgLy8gMTQuXG4gICAgICByZXF1ZXN0OiBpbm5lclJlcXVlc3QsIC8vIDE1LlxuICAgICAgcmVzcG9uc2U6IGNsb25lZFJlc3BvbnNlIC8vIDE2LlxuICAgIH1cblxuICAgIC8vIDE3LlxuICAgIG9wZXJhdGlvbnMucHVzaChvcGVyYXRpb24pXG5cbiAgICAvLyAxOS5cbiAgICBjb25zdCBieXRlcyA9IGF3YWl0IGJvZHlSZWFkUHJvbWlzZS5wcm9taXNlXG5cbiAgICBpZiAoY2xvbmVkUmVzcG9uc2UuYm9keSAhPSBudWxsKSB7XG4gICAgICBjbG9uZWRSZXNwb25zZS5ib2R5LnNvdXJjZSA9IGJ5dGVzXG4gICAgfVxuXG4gICAgLy8gMTkuMVxuICAgIGNvbnN0IGNhY2hlSm9iUHJvbWlzZSA9IGNyZWF0ZURlZmVycmVkUHJvbWlzZSgpXG5cbiAgICAvLyAxOS4yLjFcbiAgICBsZXQgZXJyb3JEYXRhID0gbnVsbFxuXG4gICAgLy8gMTkuMi4yXG4gICAgdHJ5IHtcbiAgICAgIHRoaXMuI2JhdGNoQ2FjaGVPcGVyYXRpb25zKG9wZXJhdGlvbnMpXG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgZXJyb3JEYXRhID0gZVxuICAgIH1cblxuICAgIC8vIDE5LjIuM1xuICAgIHF1ZXVlTWljcm90YXNrKCgpID0+IHtcbiAgICAgIC8vIDE5LjIuMy4xXG4gICAgICBpZiAoZXJyb3JEYXRhID09PSBudWxsKSB7XG4gICAgICAgIGNhY2hlSm9iUHJvbWlzZS5yZXNvbHZlKClcbiAgICAgIH0gZWxzZSB7IC8vIDE5LjIuMy4yXG4gICAgICAgIGNhY2hlSm9iUHJvbWlzZS5yZWplY3QoZXJyb3JEYXRhKVxuICAgICAgfVxuICAgIH0pXG5cbiAgICByZXR1cm4gY2FjaGVKb2JQcm9taXNlLnByb21pc2VcbiAgfVxuXG4gIGFzeW5jIGRlbGV0ZSAocmVxdWVzdCwgb3B0aW9ucyA9IHt9KSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgQ2FjaGUpXG5cbiAgICBjb25zdCBwcmVmaXggPSAnQ2FjaGUuZGVsZXRlJ1xuICAgIHdlYmlkbC5hcmd1bWVudExlbmd0aENoZWNrKGFyZ3VtZW50cywgMSwgcHJlZml4KVxuXG4gICAgcmVxdWVzdCA9IHdlYmlkbC5jb252ZXJ0ZXJzLlJlcXVlc3RJbmZvKHJlcXVlc3QsIHByZWZpeCwgJ3JlcXVlc3QnKVxuICAgIG9wdGlvbnMgPSB3ZWJpZGwuY29udmVydGVycy5DYWNoZVF1ZXJ5T3B0aW9ucyhvcHRpb25zLCBwcmVmaXgsICdvcHRpb25zJylcblxuICAgIC8qKlxuICAgICAqIEB0eXBlIHtSZXF1ZXN0fVxuICAgICAqL1xuICAgIGxldCByID0gbnVsbFxuXG4gICAgaWYgKHJlcXVlc3QgaW5zdGFuY2VvZiBSZXF1ZXN0KSB7XG4gICAgICByID0gcmVxdWVzdFtrU3RhdGVdXG5cbiAgICAgIGlmIChyLm1ldGhvZCAhPT0gJ0dFVCcgJiYgIW9wdGlvbnMuaWdub3JlTWV0aG9kKSB7XG4gICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBhc3NlcnQodHlwZW9mIHJlcXVlc3QgPT09ICdzdHJpbmcnKVxuXG4gICAgICByID0gbmV3IFJlcXVlc3QocmVxdWVzdClba1N0YXRlXVxuICAgIH1cblxuICAgIC8qKiBAdHlwZSB7Q2FjaGVCYXRjaE9wZXJhdGlvbltdfSAqL1xuICAgIGNvbnN0IG9wZXJhdGlvbnMgPSBbXVxuXG4gICAgLyoqIEB0eXBlIHtDYWNoZUJhdGNoT3BlcmF0aW9ufSAqL1xuICAgIGNvbnN0IG9wZXJhdGlvbiA9IHtcbiAgICAgIHR5cGU6ICdkZWxldGUnLFxuICAgICAgcmVxdWVzdDogcixcbiAgICAgIG9wdGlvbnNcbiAgICB9XG5cbiAgICBvcGVyYXRpb25zLnB1c2gob3BlcmF0aW9uKVxuXG4gICAgY29uc3QgY2FjaGVKb2JQcm9taXNlID0gY3JlYXRlRGVmZXJyZWRQcm9taXNlKClcblxuICAgIGxldCBlcnJvckRhdGEgPSBudWxsXG4gICAgbGV0IHJlcXVlc3RSZXNwb25zZXNcblxuICAgIHRyeSB7XG4gICAgICByZXF1ZXN0UmVzcG9uc2VzID0gdGhpcy4jYmF0Y2hDYWNoZU9wZXJhdGlvbnMob3BlcmF0aW9ucylcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBlcnJvckRhdGEgPSBlXG4gICAgfVxuXG4gICAgcXVldWVNaWNyb3Rhc2soKCkgPT4ge1xuICAgICAgaWYgKGVycm9yRGF0YSA9PT0gbnVsbCkge1xuICAgICAgICBjYWNoZUpvYlByb21pc2UucmVzb2x2ZSghIXJlcXVlc3RSZXNwb25zZXM/Lmxlbmd0aClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNhY2hlSm9iUHJvbWlzZS5yZWplY3QoZXJyb3JEYXRhKVxuICAgICAgfVxuICAgIH0pXG5cbiAgICByZXR1cm4gY2FjaGVKb2JQcm9taXNlLnByb21pc2VcbiAgfVxuXG4gIC8qKlxuICAgKiBAc2VlIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby9TZXJ2aWNlV29ya2VyLyNkb20tY2FjaGUta2V5c1xuICAgKiBAcGFyYW0ge2FueX0gcmVxdWVzdFxuICAgKiBAcGFyYW0ge2ltcG9ydCgnLi4vLi4vdHlwZXMvY2FjaGUnKS5DYWNoZVF1ZXJ5T3B0aW9uc30gb3B0aW9uc1xuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxyZWFkb25seSBSZXF1ZXN0W10+fVxuICAgKi9cbiAgYXN5bmMga2V5cyAocmVxdWVzdCA9IHVuZGVmaW5lZCwgb3B0aW9ucyA9IHt9KSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgQ2FjaGUpXG5cbiAgICBjb25zdCBwcmVmaXggPSAnQ2FjaGUua2V5cydcblxuICAgIGlmIChyZXF1ZXN0ICE9PSB1bmRlZmluZWQpIHJlcXVlc3QgPSB3ZWJpZGwuY29udmVydGVycy5SZXF1ZXN0SW5mbyhyZXF1ZXN0LCBwcmVmaXgsICdyZXF1ZXN0JylcbiAgICBvcHRpb25zID0gd2ViaWRsLmNvbnZlcnRlcnMuQ2FjaGVRdWVyeU9wdGlvbnMob3B0aW9ucywgcHJlZml4LCAnb3B0aW9ucycpXG5cbiAgICAvLyAxLlxuICAgIGxldCByID0gbnVsbFxuXG4gICAgLy8gMi5cbiAgICBpZiAocmVxdWVzdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyAyLjFcbiAgICAgIGlmIChyZXF1ZXN0IGluc3RhbmNlb2YgUmVxdWVzdCkge1xuICAgICAgICAvLyAyLjEuMVxuICAgICAgICByID0gcmVxdWVzdFtrU3RhdGVdXG5cbiAgICAgICAgLy8gMi4xLjJcbiAgICAgICAgaWYgKHIubWV0aG9kICE9PSAnR0VUJyAmJiAhb3B0aW9ucy5pZ25vcmVNZXRob2QpIHtcbiAgICAgICAgICByZXR1cm4gW11cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICh0eXBlb2YgcmVxdWVzdCA9PT0gJ3N0cmluZycpIHsgLy8gMi4yXG4gICAgICAgIHIgPSBuZXcgUmVxdWVzdChyZXF1ZXN0KVtrU3RhdGVdXG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gNC5cbiAgICBjb25zdCBwcm9taXNlID0gY3JlYXRlRGVmZXJyZWRQcm9taXNlKClcblxuICAgIC8vIDUuXG4gICAgLy8gNS4xXG4gICAgY29uc3QgcmVxdWVzdHMgPSBbXVxuXG4gICAgLy8gNS4yXG4gICAgaWYgKHJlcXVlc3QgPT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gNS4yLjFcbiAgICAgIGZvciAoY29uc3QgcmVxdWVzdFJlc3BvbnNlIG9mIHRoaXMuI3JlbGV2YW50UmVxdWVzdFJlc3BvbnNlTGlzdCkge1xuICAgICAgICAvLyA1LjIuMS4xXG4gICAgICAgIHJlcXVlc3RzLnB1c2gocmVxdWVzdFJlc3BvbnNlWzBdKVxuICAgICAgfVxuICAgIH0gZWxzZSB7IC8vIDUuM1xuICAgICAgLy8gNS4zLjFcbiAgICAgIGNvbnN0IHJlcXVlc3RSZXNwb25zZXMgPSB0aGlzLiNxdWVyeUNhY2hlKHIsIG9wdGlvbnMpXG5cbiAgICAgIC8vIDUuMy4yXG4gICAgICBmb3IgKGNvbnN0IHJlcXVlc3RSZXNwb25zZSBvZiByZXF1ZXN0UmVzcG9uc2VzKSB7XG4gICAgICAgIC8vIDUuMy4yLjFcbiAgICAgICAgcmVxdWVzdHMucHVzaChyZXF1ZXN0UmVzcG9uc2VbMF0pXG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gNS40XG4gICAgcXVldWVNaWNyb3Rhc2soKCkgPT4ge1xuICAgICAgLy8gNS40LjFcbiAgICAgIGNvbnN0IHJlcXVlc3RMaXN0ID0gW11cblxuICAgICAgLy8gNS40LjJcbiAgICAgIGZvciAoY29uc3QgcmVxdWVzdCBvZiByZXF1ZXN0cykge1xuICAgICAgICBjb25zdCByZXF1ZXN0T2JqZWN0ID0gZnJvbUlubmVyUmVxdWVzdChcbiAgICAgICAgICByZXF1ZXN0LFxuICAgICAgICAgIG5ldyBBYm9ydENvbnRyb2xsZXIoKS5zaWduYWwsXG4gICAgICAgICAgJ2ltbXV0YWJsZSdcbiAgICAgICAgKVxuICAgICAgICAvLyA1LjQuMi4xXG4gICAgICAgIHJlcXVlc3RMaXN0LnB1c2gocmVxdWVzdE9iamVjdClcbiAgICAgIH1cblxuICAgICAgLy8gNS40LjNcbiAgICAgIHByb21pc2UucmVzb2x2ZShPYmplY3QuZnJlZXplKHJlcXVlc3RMaXN0KSlcbiAgICB9KVxuXG4gICAgcmV0dXJuIHByb21pc2UucHJvbWlzZVxuICB9XG5cbiAgLyoqXG4gICAqIEBzZWUgaHR0cHM6Ly93M2MuZ2l0aHViLmlvL1NlcnZpY2VXb3JrZXIvI2JhdGNoLWNhY2hlLW9wZXJhdGlvbnMtYWxnb3JpdGhtXG4gICAqIEBwYXJhbSB7Q2FjaGVCYXRjaE9wZXJhdGlvbltdfSBvcGVyYXRpb25zXG4gICAqIEByZXR1cm5zIHtyZXF1ZXN0UmVzcG9uc2VMaXN0fVxuICAgKi9cbiAgI2JhdGNoQ2FjaGVPcGVyYXRpb25zIChvcGVyYXRpb25zKSB7XG4gICAgLy8gMS5cbiAgICBjb25zdCBjYWNoZSA9IHRoaXMuI3JlbGV2YW50UmVxdWVzdFJlc3BvbnNlTGlzdFxuXG4gICAgLy8gMi5cbiAgICBjb25zdCBiYWNrdXBDYWNoZSA9IFsuLi5jYWNoZV1cblxuICAgIC8vIDMuXG4gICAgY29uc3QgYWRkZWRJdGVtcyA9IFtdXG5cbiAgICAvLyA0LjFcbiAgICBjb25zdCByZXN1bHRMaXN0ID0gW11cblxuICAgIHRyeSB7XG4gICAgICAvLyA0LjJcbiAgICAgIGZvciAoY29uc3Qgb3BlcmF0aW9uIG9mIG9wZXJhdGlvbnMpIHtcbiAgICAgICAgLy8gNC4yLjFcbiAgICAgICAgaWYgKG9wZXJhdGlvbi50eXBlICE9PSAnZGVsZXRlJyAmJiBvcGVyYXRpb24udHlwZSAhPT0gJ3B1dCcpIHtcbiAgICAgICAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmV4Y2VwdGlvbih7XG4gICAgICAgICAgICBoZWFkZXI6ICdDYWNoZS4jYmF0Y2hDYWNoZU9wZXJhdGlvbnMnLFxuICAgICAgICAgICAgbWVzc2FnZTogJ29wZXJhdGlvbiB0eXBlIGRvZXMgbm90IG1hdGNoIFwiZGVsZXRlXCIgb3IgXCJwdXRcIidcbiAgICAgICAgICB9KVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gNC4yLjJcbiAgICAgICAgaWYgKG9wZXJhdGlvbi50eXBlID09PSAnZGVsZXRlJyAmJiBvcGVyYXRpb24ucmVzcG9uc2UgIT0gbnVsbCkge1xuICAgICAgICAgIHRocm93IHdlYmlkbC5lcnJvcnMuZXhjZXB0aW9uKHtcbiAgICAgICAgICAgIGhlYWRlcjogJ0NhY2hlLiNiYXRjaENhY2hlT3BlcmF0aW9ucycsXG4gICAgICAgICAgICBtZXNzYWdlOiAnZGVsZXRlIG9wZXJhdGlvbiBzaG91bGQgbm90IGhhdmUgYW4gYXNzb2NpYXRlZCByZXNwb25zZSdcbiAgICAgICAgICB9KVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gNC4yLjNcbiAgICAgICAgaWYgKHRoaXMuI3F1ZXJ5Q2FjaGUob3BlcmF0aW9uLnJlcXVlc3QsIG9wZXJhdGlvbi5vcHRpb25zLCBhZGRlZEl0ZW1zKS5sZW5ndGgpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRE9NRXhjZXB0aW9uKCc/Pz8nLCAnSW52YWxpZFN0YXRlRXJyb3InKVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gNC4yLjRcbiAgICAgICAgbGV0IHJlcXVlc3RSZXNwb25zZXNcblxuICAgICAgICAvLyA0LjIuNVxuICAgICAgICBpZiAob3BlcmF0aW9uLnR5cGUgPT09ICdkZWxldGUnKSB7XG4gICAgICAgICAgLy8gNC4yLjUuMVxuICAgICAgICAgIHJlcXVlc3RSZXNwb25zZXMgPSB0aGlzLiNxdWVyeUNhY2hlKG9wZXJhdGlvbi5yZXF1ZXN0LCBvcGVyYXRpb24ub3B0aW9ucylcblxuICAgICAgICAgIC8vIFRPRE86IHRoZSBzcGVjIGlzIHdyb25nLCB0aGlzIGlzIG5lZWRlZCB0byBwYXNzIFdQVHNcbiAgICAgICAgICBpZiAocmVxdWVzdFJlc3BvbnNlcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiBbXVxuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIDQuMi41LjJcbiAgICAgICAgICBmb3IgKGNvbnN0IHJlcXVlc3RSZXNwb25zZSBvZiByZXF1ZXN0UmVzcG9uc2VzKSB7XG4gICAgICAgICAgICBjb25zdCBpZHggPSBjYWNoZS5pbmRleE9mKHJlcXVlc3RSZXNwb25zZSlcbiAgICAgICAgICAgIGFzc2VydChpZHggIT09IC0xKVxuXG4gICAgICAgICAgICAvLyA0LjIuNS4yLjFcbiAgICAgICAgICAgIGNhY2hlLnNwbGljZShpZHgsIDEpXG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKG9wZXJhdGlvbi50eXBlID09PSAncHV0JykgeyAvLyA0LjIuNlxuICAgICAgICAgIC8vIDQuMi42LjFcbiAgICAgICAgICBpZiAob3BlcmF0aW9uLnJlc3BvbnNlID09IG51bGwpIHtcbiAgICAgICAgICAgIHRocm93IHdlYmlkbC5lcnJvcnMuZXhjZXB0aW9uKHtcbiAgICAgICAgICAgICAgaGVhZGVyOiAnQ2FjaGUuI2JhdGNoQ2FjaGVPcGVyYXRpb25zJyxcbiAgICAgICAgICAgICAgbWVzc2FnZTogJ3B1dCBvcGVyYXRpb24gc2hvdWxkIGhhdmUgYW4gYXNzb2NpYXRlZCByZXNwb25zZSdcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gNC4yLjYuMlxuICAgICAgICAgIGNvbnN0IHIgPSBvcGVyYXRpb24ucmVxdWVzdFxuXG4gICAgICAgICAgLy8gNC4yLjYuM1xuICAgICAgICAgIGlmICghdXJsSXNIdHRwSHR0cHNTY2hlbWUoci51cmwpKSB7XG4gICAgICAgICAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmV4Y2VwdGlvbih7XG4gICAgICAgICAgICAgIGhlYWRlcjogJ0NhY2hlLiNiYXRjaENhY2hlT3BlcmF0aW9ucycsXG4gICAgICAgICAgICAgIG1lc3NhZ2U6ICdleHBlY3RlZCBodHRwIG9yIGh0dHBzIHNjaGVtZSdcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gNC4yLjYuNFxuICAgICAgICAgIGlmIChyLm1ldGhvZCAhPT0gJ0dFVCcpIHtcbiAgICAgICAgICAgIHRocm93IHdlYmlkbC5lcnJvcnMuZXhjZXB0aW9uKHtcbiAgICAgICAgICAgICAgaGVhZGVyOiAnQ2FjaGUuI2JhdGNoQ2FjaGVPcGVyYXRpb25zJyxcbiAgICAgICAgICAgICAgbWVzc2FnZTogJ25vdCBnZXQgbWV0aG9kJ1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyA0LjIuNi41XG4gICAgICAgICAgaWYgKG9wZXJhdGlvbi5vcHRpb25zICE9IG51bGwpIHtcbiAgICAgICAgICAgIHRocm93IHdlYmlkbC5lcnJvcnMuZXhjZXB0aW9uKHtcbiAgICAgICAgICAgICAgaGVhZGVyOiAnQ2FjaGUuI2JhdGNoQ2FjaGVPcGVyYXRpb25zJyxcbiAgICAgICAgICAgICAgbWVzc2FnZTogJ29wdGlvbnMgbXVzdCBub3QgYmUgZGVmaW5lZCdcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gNC4yLjYuNlxuICAgICAgICAgIHJlcXVlc3RSZXNwb25zZXMgPSB0aGlzLiNxdWVyeUNhY2hlKG9wZXJhdGlvbi5yZXF1ZXN0KVxuXG4gICAgICAgICAgLy8gNC4yLjYuN1xuICAgICAgICAgIGZvciAoY29uc3QgcmVxdWVzdFJlc3BvbnNlIG9mIHJlcXVlc3RSZXNwb25zZXMpIHtcbiAgICAgICAgICAgIGNvbnN0IGlkeCA9IGNhY2hlLmluZGV4T2YocmVxdWVzdFJlc3BvbnNlKVxuICAgICAgICAgICAgYXNzZXJ0KGlkeCAhPT0gLTEpXG5cbiAgICAgICAgICAgIC8vIDQuMi42LjcuMVxuICAgICAgICAgICAgY2FjaGUuc3BsaWNlKGlkeCwgMSlcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyA0LjIuNi44XG4gICAgICAgICAgY2FjaGUucHVzaChbb3BlcmF0aW9uLnJlcXVlc3QsIG9wZXJhdGlvbi5yZXNwb25zZV0pXG5cbiAgICAgICAgICAvLyA0LjIuNi4xMFxuICAgICAgICAgIGFkZGVkSXRlbXMucHVzaChbb3BlcmF0aW9uLnJlcXVlc3QsIG9wZXJhdGlvbi5yZXNwb25zZV0pXG4gICAgICAgIH1cblxuICAgICAgICAvLyA0LjIuN1xuICAgICAgICByZXN1bHRMaXN0LnB1c2goW29wZXJhdGlvbi5yZXF1ZXN0LCBvcGVyYXRpb24ucmVzcG9uc2VdKVxuICAgICAgfVxuXG4gICAgICAvLyA0LjNcbiAgICAgIHJldHVybiByZXN1bHRMaXN0XG4gICAgfSBjYXRjaCAoZSkgeyAvLyA1LlxuICAgICAgLy8gNS4xXG4gICAgICB0aGlzLiNyZWxldmFudFJlcXVlc3RSZXNwb25zZUxpc3QubGVuZ3RoID0gMFxuXG4gICAgICAvLyA1LjJcbiAgICAgIHRoaXMuI3JlbGV2YW50UmVxdWVzdFJlc3BvbnNlTGlzdCA9IGJhY2t1cENhY2hlXG5cbiAgICAgIC8vIDUuM1xuICAgICAgdGhyb3cgZVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAc2VlIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby9TZXJ2aWNlV29ya2VyLyNxdWVyeS1jYWNoZVxuICAgKiBAcGFyYW0ge2FueX0gcmVxdWVzdFF1ZXJ5XG4gICAqIEBwYXJhbSB7aW1wb3J0KCcuLi8uLi90eXBlcy9jYWNoZScpLkNhY2hlUXVlcnlPcHRpb25zfSBvcHRpb25zXG4gICAqIEBwYXJhbSB7cmVxdWVzdFJlc3BvbnNlTGlzdH0gdGFyZ2V0U3RvcmFnZVxuICAgKiBAcmV0dXJucyB7cmVxdWVzdFJlc3BvbnNlTGlzdH1cbiAgICovXG4gICNxdWVyeUNhY2hlIChyZXF1ZXN0UXVlcnksIG9wdGlvbnMsIHRhcmdldFN0b3JhZ2UpIHtcbiAgICAvKiogQHR5cGUge3JlcXVlc3RSZXNwb25zZUxpc3R9ICovXG4gICAgY29uc3QgcmVzdWx0TGlzdCA9IFtdXG5cbiAgICBjb25zdCBzdG9yYWdlID0gdGFyZ2V0U3RvcmFnZSA/PyB0aGlzLiNyZWxldmFudFJlcXVlc3RSZXNwb25zZUxpc3RcblxuICAgIGZvciAoY29uc3QgcmVxdWVzdFJlc3BvbnNlIG9mIHN0b3JhZ2UpIHtcbiAgICAgIGNvbnN0IFtjYWNoZWRSZXF1ZXN0LCBjYWNoZWRSZXNwb25zZV0gPSByZXF1ZXN0UmVzcG9uc2VcbiAgICAgIGlmICh0aGlzLiNyZXF1ZXN0TWF0Y2hlc0NhY2hlZEl0ZW0ocmVxdWVzdFF1ZXJ5LCBjYWNoZWRSZXF1ZXN0LCBjYWNoZWRSZXNwb25zZSwgb3B0aW9ucykpIHtcbiAgICAgICAgcmVzdWx0TGlzdC5wdXNoKHJlcXVlc3RSZXNwb25zZSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0TGlzdFxuICB9XG5cbiAgLyoqXG4gICAqIEBzZWUgaHR0cHM6Ly93M2MuZ2l0aHViLmlvL1NlcnZpY2VXb3JrZXIvI3JlcXVlc3QtbWF0Y2hlcy1jYWNoZWQtaXRlbS1hbGdvcml0aG1cbiAgICogQHBhcmFtIHthbnl9IHJlcXVlc3RRdWVyeVxuICAgKiBAcGFyYW0ge2FueX0gcmVxdWVzdFxuICAgKiBAcGFyYW0ge2FueSB8IG51bGx9IHJlc3BvbnNlXG4gICAqIEBwYXJhbSB7aW1wb3J0KCcuLi8uLi90eXBlcy9jYWNoZScpLkNhY2hlUXVlcnlPcHRpb25zIHwgdW5kZWZpbmVkfSBvcHRpb25zXG4gICAqIEByZXR1cm5zIHtib29sZWFufVxuICAgKi9cbiAgI3JlcXVlc3RNYXRjaGVzQ2FjaGVkSXRlbSAocmVxdWVzdFF1ZXJ5LCByZXF1ZXN0LCByZXNwb25zZSA9IG51bGwsIG9wdGlvbnMpIHtcbiAgICAvLyBpZiAob3B0aW9ucz8uaWdub3JlTWV0aG9kID09PSBmYWxzZSAmJiByZXF1ZXN0Lm1ldGhvZCA9PT0gJ0dFVCcpIHtcbiAgICAvLyAgIHJldHVybiBmYWxzZVxuICAgIC8vIH1cblxuICAgIGNvbnN0IHF1ZXJ5VVJMID0gbmV3IFVSTChyZXF1ZXN0UXVlcnkudXJsKVxuXG4gICAgY29uc3QgY2FjaGVkVVJMID0gbmV3IFVSTChyZXF1ZXN0LnVybClcblxuICAgIGlmIChvcHRpb25zPy5pZ25vcmVTZWFyY2gpIHtcbiAgICAgIGNhY2hlZFVSTC5zZWFyY2ggPSAnJ1xuXG4gICAgICBxdWVyeVVSTC5zZWFyY2ggPSAnJ1xuICAgIH1cblxuICAgIGlmICghdXJsRXF1YWxzKHF1ZXJ5VVJMLCBjYWNoZWRVUkwsIHRydWUpKSB7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICByZXNwb25zZSA9PSBudWxsIHx8XG4gICAgICBvcHRpb25zPy5pZ25vcmVWYXJ5IHx8XG4gICAgICAhcmVzcG9uc2UuaGVhZGVyc0xpc3QuY29udGFpbnMoJ3ZhcnknKVxuICAgICkge1xuICAgICAgcmV0dXJuIHRydWVcbiAgICB9XG5cbiAgICBjb25zdCBmaWVsZFZhbHVlcyA9IGdldEZpZWxkVmFsdWVzKHJlc3BvbnNlLmhlYWRlcnNMaXN0LmdldCgndmFyeScpKVxuXG4gICAgZm9yIChjb25zdCBmaWVsZFZhbHVlIG9mIGZpZWxkVmFsdWVzKSB7XG4gICAgICBpZiAoZmllbGRWYWx1ZSA9PT0gJyonKSB7XG4gICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgfVxuXG4gICAgICBjb25zdCByZXF1ZXN0VmFsdWUgPSByZXF1ZXN0LmhlYWRlcnNMaXN0LmdldChmaWVsZFZhbHVlKVxuICAgICAgY29uc3QgcXVlcnlWYWx1ZSA9IHJlcXVlc3RRdWVyeS5oZWFkZXJzTGlzdC5nZXQoZmllbGRWYWx1ZSlcblxuICAgICAgLy8gSWYgb25lIGhhcyB0aGUgaGVhZGVyIGFuZCB0aGUgb3RoZXIgZG9lc24ndCwgb3Igb25lIGhhc1xuICAgICAgLy8gYSBkaWZmZXJlbnQgdmFsdWUgdGhhbiB0aGUgb3RoZXIsIHJldHVybiBmYWxzZVxuICAgICAgaWYgKHJlcXVlc3RWYWx1ZSAhPT0gcXVlcnlWYWx1ZSkge1xuICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZVxuICB9XG5cbiAgI2ludGVybmFsTWF0Y2hBbGwgKHJlcXVlc3QsIG9wdGlvbnMsIG1heFJlc3BvbnNlcyA9IEluZmluaXR5KSB7XG4gICAgLy8gMS5cbiAgICBsZXQgciA9IG51bGxcblxuICAgIC8vIDIuXG4gICAgaWYgKHJlcXVlc3QgIT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKHJlcXVlc3QgaW5zdGFuY2VvZiBSZXF1ZXN0KSB7XG4gICAgICAgIC8vIDIuMS4xXG4gICAgICAgIHIgPSByZXF1ZXN0W2tTdGF0ZV1cblxuICAgICAgICAvLyAyLjEuMlxuICAgICAgICBpZiAoci5tZXRob2QgIT09ICdHRVQnICYmICFvcHRpb25zLmlnbm9yZU1ldGhvZCkge1xuICAgICAgICAgIHJldHVybiBbXVxuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiByZXF1ZXN0ID09PSAnc3RyaW5nJykge1xuICAgICAgICAvLyAyLjIuMVxuICAgICAgICByID0gbmV3IFJlcXVlc3QocmVxdWVzdClba1N0YXRlXVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIDUuXG4gICAgLy8gNS4xXG4gICAgY29uc3QgcmVzcG9uc2VzID0gW11cblxuICAgIC8vIDUuMlxuICAgIGlmIChyZXF1ZXN0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIDUuMi4xXG4gICAgICBmb3IgKGNvbnN0IHJlcXVlc3RSZXNwb25zZSBvZiB0aGlzLiNyZWxldmFudFJlcXVlc3RSZXNwb25zZUxpc3QpIHtcbiAgICAgICAgcmVzcG9uc2VzLnB1c2gocmVxdWVzdFJlc3BvbnNlWzFdKVxuICAgICAgfVxuICAgIH0gZWxzZSB7IC8vIDUuM1xuICAgICAgLy8gNS4zLjFcbiAgICAgIGNvbnN0IHJlcXVlc3RSZXNwb25zZXMgPSB0aGlzLiNxdWVyeUNhY2hlKHIsIG9wdGlvbnMpXG5cbiAgICAgIC8vIDUuMy4yXG4gICAgICBmb3IgKGNvbnN0IHJlcXVlc3RSZXNwb25zZSBvZiByZXF1ZXN0UmVzcG9uc2VzKSB7XG4gICAgICAgIHJlc3BvbnNlcy5wdXNoKHJlcXVlc3RSZXNwb25zZVsxXSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyA1LjRcbiAgICAvLyBXZSBkb24ndCBpbXBsZW1lbnQgQ09ScyBzbyB3ZSBkb24ndCBuZWVkIHRvIGxvb3Agb3ZlciB0aGUgcmVzcG9uc2VzLCB5YXkhXG5cbiAgICAvLyA1LjUuMVxuICAgIGNvbnN0IHJlc3BvbnNlTGlzdCA9IFtdXG5cbiAgICAvLyA1LjUuMlxuICAgIGZvciAoY29uc3QgcmVzcG9uc2Ugb2YgcmVzcG9uc2VzKSB7XG4gICAgICAvLyA1LjUuMi4xXG4gICAgICBjb25zdCByZXNwb25zZU9iamVjdCA9IGZyb21Jbm5lclJlc3BvbnNlKHJlc3BvbnNlLCAnaW1tdXRhYmxlJylcblxuICAgICAgcmVzcG9uc2VMaXN0LnB1c2gocmVzcG9uc2VPYmplY3QuY2xvbmUoKSlcblxuICAgICAgaWYgKHJlc3BvbnNlTGlzdC5sZW5ndGggPj0gbWF4UmVzcG9uc2VzKSB7XG4gICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gNi5cbiAgICByZXR1cm4gT2JqZWN0LmZyZWV6ZShyZXNwb25zZUxpc3QpXG4gIH1cbn1cblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQ2FjaGUucHJvdG90eXBlLCB7XG4gIFtTeW1ib2wudG9TdHJpbmdUYWddOiB7XG4gICAgdmFsdWU6ICdDYWNoZScsXG4gICAgY29uZmlndXJhYmxlOiB0cnVlXG4gIH0sXG4gIG1hdGNoOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBtYXRjaEFsbDoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgYWRkOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBhZGRBbGw6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIHB1dDoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgZGVsZXRlOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBrZXlzOiBrRW51bWVyYWJsZVByb3BlcnR5XG59KVxuXG5jb25zdCBjYWNoZVF1ZXJ5T3B0aW9uQ29udmVydGVycyA9IFtcbiAge1xuICAgIGtleTogJ2lnbm9yZVNlYXJjaCcsXG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVycy5ib29sZWFuLFxuICAgIGRlZmF1bHRWYWx1ZTogKCkgPT4gZmFsc2VcbiAgfSxcbiAge1xuICAgIGtleTogJ2lnbm9yZU1ldGhvZCcsXG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVycy5ib29sZWFuLFxuICAgIGRlZmF1bHRWYWx1ZTogKCkgPT4gZmFsc2VcbiAgfSxcbiAge1xuICAgIGtleTogJ2lnbm9yZVZhcnknLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnMuYm9vbGVhbixcbiAgICBkZWZhdWx0VmFsdWU6ICgpID0+IGZhbHNlXG4gIH1cbl1cblxud2ViaWRsLmNvbnZlcnRlcnMuQ2FjaGVRdWVyeU9wdGlvbnMgPSB3ZWJpZGwuZGljdGlvbmFyeUNvbnZlcnRlcihjYWNoZVF1ZXJ5T3B0aW9uQ29udmVydGVycylcblxud2ViaWRsLmNvbnZlcnRlcnMuTXVsdGlDYWNoZVF1ZXJ5T3B0aW9ucyA9IHdlYmlkbC5kaWN0aW9uYXJ5Q29udmVydGVyKFtcbiAgLi4uY2FjaGVRdWVyeU9wdGlvbkNvbnZlcnRlcnMsXG4gIHtcbiAgICBrZXk6ICdjYWNoZU5hbWUnLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnMuRE9NU3RyaW5nXG4gIH1cbl0pXG5cbndlYmlkbC5jb252ZXJ0ZXJzLlJlc3BvbnNlID0gd2ViaWRsLmludGVyZmFjZUNvbnZlcnRlcihSZXNwb25zZSlcblxud2ViaWRsLmNvbnZlcnRlcnNbJ3NlcXVlbmNlPFJlcXVlc3RJbmZvPiddID0gd2ViaWRsLnNlcXVlbmNlQ29udmVydGVyKFxuICB3ZWJpZGwuY29udmVydGVycy5SZXF1ZXN0SW5mb1xuKVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgQ2FjaGVcbn1cbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgeyBrQ29uc3RydWN0IH0gPSByZXF1aXJlKCcuL3N5bWJvbHMnKVxuY29uc3QgeyBDYWNoZSB9ID0gcmVxdWlyZSgnLi9jYWNoZScpXG5jb25zdCB7IHdlYmlkbCB9ID0gcmVxdWlyZSgnLi4vZmV0Y2gvd2ViaWRsJylcbmNvbnN0IHsga0VudW1lcmFibGVQcm9wZXJ0eSB9ID0gcmVxdWlyZSgnLi4vLi4vY29yZS91dGlsJylcblxuY2xhc3MgQ2FjaGVTdG9yYWdlIHtcbiAgLyoqXG4gICAqIEBzZWUgaHR0cHM6Ly93M2MuZ2l0aHViLmlvL1NlcnZpY2VXb3JrZXIvI2Rmbi1yZWxldmFudC1uYW1lLXRvLWNhY2hlLW1hcFxuICAgKiBAdHlwZSB7TWFwPHN0cmluZywgaW1wb3J0KCcuL2NhY2hlJykucmVxdWVzdFJlc3BvbnNlTGlzdH1cbiAgICovXG4gICNjYWNoZXMgPSBuZXcgTWFwKClcblxuICBjb25zdHJ1Y3RvciAoKSB7XG4gICAgaWYgKGFyZ3VtZW50c1swXSAhPT0ga0NvbnN0cnVjdCkge1xuICAgICAgd2ViaWRsLmlsbGVnYWxDb25zdHJ1Y3RvcigpXG4gICAgfVxuXG4gICAgd2ViaWRsLnV0aWwubWFya0FzVW5jbG9uZWFibGUodGhpcylcbiAgfVxuXG4gIGFzeW5jIG1hdGNoIChyZXF1ZXN0LCBvcHRpb25zID0ge30pIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBDYWNoZVN0b3JhZ2UpXG4gICAgd2ViaWRsLmFyZ3VtZW50TGVuZ3RoQ2hlY2soYXJndW1lbnRzLCAxLCAnQ2FjaGVTdG9yYWdlLm1hdGNoJylcblxuICAgIHJlcXVlc3QgPSB3ZWJpZGwuY29udmVydGVycy5SZXF1ZXN0SW5mbyhyZXF1ZXN0KVxuICAgIG9wdGlvbnMgPSB3ZWJpZGwuY29udmVydGVycy5NdWx0aUNhY2hlUXVlcnlPcHRpb25zKG9wdGlvbnMpXG5cbiAgICAvLyAxLlxuICAgIGlmIChvcHRpb25zLmNhY2hlTmFtZSAhPSBudWxsKSB7XG4gICAgICAvLyAxLjEuMS4xXG4gICAgICBpZiAodGhpcy4jY2FjaGVzLmhhcyhvcHRpb25zLmNhY2hlTmFtZSkpIHtcbiAgICAgICAgLy8gMS4xLjEuMS4xXG4gICAgICAgIGNvbnN0IGNhY2hlTGlzdCA9IHRoaXMuI2NhY2hlcy5nZXQob3B0aW9ucy5jYWNoZU5hbWUpXG4gICAgICAgIGNvbnN0IGNhY2hlID0gbmV3IENhY2hlKGtDb25zdHJ1Y3QsIGNhY2hlTGlzdClcblxuICAgICAgICByZXR1cm4gYXdhaXQgY2FjaGUubWF0Y2gocmVxdWVzdCwgb3B0aW9ucylcbiAgICAgIH1cbiAgICB9IGVsc2UgeyAvLyAyLlxuICAgICAgLy8gMi4yXG4gICAgICBmb3IgKGNvbnN0IGNhY2hlTGlzdCBvZiB0aGlzLiNjYWNoZXMudmFsdWVzKCkpIHtcbiAgICAgICAgY29uc3QgY2FjaGUgPSBuZXcgQ2FjaGUoa0NvbnN0cnVjdCwgY2FjaGVMaXN0KVxuXG4gICAgICAgIC8vIDIuMi4xLjJcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBjYWNoZS5tYXRjaChyZXF1ZXN0LCBvcHRpb25zKVxuXG4gICAgICAgIGlmIChyZXNwb25zZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgcmV0dXJuIHJlc3BvbnNlXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQHNlZSBodHRwczovL3czYy5naXRodWIuaW8vU2VydmljZVdvcmtlci8jY2FjaGUtc3RvcmFnZS1oYXNcbiAgICogQHBhcmFtIHtzdHJpbmd9IGNhY2hlTmFtZVxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTxib29sZWFuPn1cbiAgICovXG4gIGFzeW5jIGhhcyAoY2FjaGVOYW1lKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgQ2FjaGVTdG9yYWdlKVxuXG4gICAgY29uc3QgcHJlZml4ID0gJ0NhY2hlU3RvcmFnZS5oYXMnXG4gICAgd2ViaWRsLmFyZ3VtZW50TGVuZ3RoQ2hlY2soYXJndW1lbnRzLCAxLCBwcmVmaXgpXG5cbiAgICBjYWNoZU5hbWUgPSB3ZWJpZGwuY29udmVydGVycy5ET01TdHJpbmcoY2FjaGVOYW1lLCBwcmVmaXgsICdjYWNoZU5hbWUnKVxuXG4gICAgLy8gMi4xLjFcbiAgICAvLyAyLjJcbiAgICByZXR1cm4gdGhpcy4jY2FjaGVzLmhhcyhjYWNoZU5hbWUpXG4gIH1cblxuICAvKipcbiAgICogQHNlZSBodHRwczovL3czYy5naXRodWIuaW8vU2VydmljZVdvcmtlci8jZG9tLWNhY2hlc3RvcmFnZS1vcGVuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjYWNoZU5hbWVcbiAgICogQHJldHVybnMge1Byb21pc2U8Q2FjaGU+fVxuICAgKi9cbiAgYXN5bmMgb3BlbiAoY2FjaGVOYW1lKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgQ2FjaGVTdG9yYWdlKVxuXG4gICAgY29uc3QgcHJlZml4ID0gJ0NhY2hlU3RvcmFnZS5vcGVuJ1xuICAgIHdlYmlkbC5hcmd1bWVudExlbmd0aENoZWNrKGFyZ3VtZW50cywgMSwgcHJlZml4KVxuXG4gICAgY2FjaGVOYW1lID0gd2ViaWRsLmNvbnZlcnRlcnMuRE9NU3RyaW5nKGNhY2hlTmFtZSwgcHJlZml4LCAnY2FjaGVOYW1lJylcblxuICAgIC8vIDIuMVxuICAgIGlmICh0aGlzLiNjYWNoZXMuaGFzKGNhY2hlTmFtZSkpIHtcbiAgICAgIC8vIGF3YWl0IGNhY2hlcy5vcGVuKCd2MScpICE9PSBhd2FpdCBjYWNoZXMub3BlbigndjEnKVxuXG4gICAgICAvLyAyLjEuMVxuICAgICAgY29uc3QgY2FjaGUgPSB0aGlzLiNjYWNoZXMuZ2V0KGNhY2hlTmFtZSlcblxuICAgICAgLy8gMi4xLjEuMVxuICAgICAgcmV0dXJuIG5ldyBDYWNoZShrQ29uc3RydWN0LCBjYWNoZSlcbiAgICB9XG5cbiAgICAvLyAyLjJcbiAgICBjb25zdCBjYWNoZSA9IFtdXG5cbiAgICAvLyAyLjNcbiAgICB0aGlzLiNjYWNoZXMuc2V0KGNhY2hlTmFtZSwgY2FjaGUpXG5cbiAgICAvLyAyLjRcbiAgICByZXR1cm4gbmV3IENhY2hlKGtDb25zdHJ1Y3QsIGNhY2hlKVxuICB9XG5cbiAgLyoqXG4gICAqIEBzZWUgaHR0cHM6Ly93M2MuZ2l0aHViLmlvL1NlcnZpY2VXb3JrZXIvI2NhY2hlLXN0b3JhZ2UtZGVsZXRlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjYWNoZU5hbWVcbiAgICogQHJldHVybnMge1Byb21pc2U8Ym9vbGVhbj59XG4gICAqL1xuICBhc3luYyBkZWxldGUgKGNhY2hlTmFtZSkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIENhY2hlU3RvcmFnZSlcblxuICAgIGNvbnN0IHByZWZpeCA9ICdDYWNoZVN0b3JhZ2UuZGVsZXRlJ1xuICAgIHdlYmlkbC5hcmd1bWVudExlbmd0aENoZWNrKGFyZ3VtZW50cywgMSwgcHJlZml4KVxuXG4gICAgY2FjaGVOYW1lID0gd2ViaWRsLmNvbnZlcnRlcnMuRE9NU3RyaW5nKGNhY2hlTmFtZSwgcHJlZml4LCAnY2FjaGVOYW1lJylcblxuICAgIHJldHVybiB0aGlzLiNjYWNoZXMuZGVsZXRlKGNhY2hlTmFtZSlcbiAgfVxuXG4gIC8qKlxuICAgKiBAc2VlIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby9TZXJ2aWNlV29ya2VyLyNjYWNoZS1zdG9yYWdlLWtleXNcbiAgICogQHJldHVybnMge1Byb21pc2U8c3RyaW5nW10+fVxuICAgKi9cbiAgYXN5bmMga2V5cyAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgQ2FjaGVTdG9yYWdlKVxuXG4gICAgLy8gMi4xXG4gICAgY29uc3Qga2V5cyA9IHRoaXMuI2NhY2hlcy5rZXlzKClcblxuICAgIC8vIDIuMlxuICAgIHJldHVybiBbLi4ua2V5c11cbiAgfVxufVxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhDYWNoZVN0b3JhZ2UucHJvdG90eXBlLCB7XG4gIFtTeW1ib2wudG9TdHJpbmdUYWddOiB7XG4gICAgdmFsdWU6ICdDYWNoZVN0b3JhZ2UnLFxuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICB9LFxuICBtYXRjaDoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgaGFzOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBvcGVuOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBkZWxldGU6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGtleXM6IGtFbnVtZXJhYmxlUHJvcGVydHlcbn0pXG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBDYWNoZVN0b3JhZ2Vcbn1cbiIsICIndXNlIHN0cmljdCdcblxuLy8gaHR0cHM6Ly93aWNnLmdpdGh1Yi5pby9jb29raWUtc3RvcmUvI2Nvb2tpZS1tYXhpbXVtLWF0dHJpYnV0ZS12YWx1ZS1zaXplXG5jb25zdCBtYXhBdHRyaWJ1dGVWYWx1ZVNpemUgPSAxMDI0XG5cbi8vIGh0dHBzOi8vd2ljZy5naXRodWIuaW8vY29va2llLXN0b3JlLyNjb29raWUtbWF4aW11bS1uYW1lLXZhbHVlLXBhaXItc2l6ZVxuY29uc3QgbWF4TmFtZVZhbHVlUGFpclNpemUgPSA0MDk2XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBtYXhBdHRyaWJ1dGVWYWx1ZVNpemUsXG4gIG1heE5hbWVWYWx1ZVBhaXJTaXplXG59XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuZnVuY3Rpb24gaXNDVExFeGNsdWRpbmdIdGFiICh2YWx1ZSkge1xuICBmb3IgKGxldCBpID0gMDsgaSA8IHZhbHVlLmxlbmd0aDsgKytpKSB7XG4gICAgY29uc3QgY29kZSA9IHZhbHVlLmNoYXJDb2RlQXQoaSlcblxuICAgIGlmIChcbiAgICAgIChjb2RlID49IDB4MDAgJiYgY29kZSA8PSAweDA4KSB8fFxuICAgICAgKGNvZGUgPj0gMHgwQSAmJiBjb2RlIDw9IDB4MUYpIHx8XG4gICAgICBjb2RlID09PSAweDdGXG4gICAgKSB7XG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cbiAgfVxuICByZXR1cm4gZmFsc2Vcbn1cblxuLyoqXG4gQ0hBUiAgICAgICAgICAgPSA8YW55IFVTLUFTQ0lJIGNoYXJhY3RlciAob2N0ZXRzIDAgLSAxMjcpPlxuIHRva2VuICAgICAgICAgID0gMSo8YW55IENIQVIgZXhjZXB0IENUTHMgb3Igc2VwYXJhdG9ycz5cbiBzZXBhcmF0b3JzICAgICA9IFwiKFwiIHwgXCIpXCIgfCBcIjxcIiB8IFwiPlwiIHwgXCJAXCJcbiAgICAgICAgICAgICAgICB8IFwiLFwiIHwgXCI7XCIgfCBcIjpcIiB8IFwiXFxcIiB8IDxcIj5cbiAgICAgICAgICAgICAgICB8IFwiL1wiIHwgXCJbXCIgfCBcIl1cIiB8IFwiP1wiIHwgXCI9XCJcbiAgICAgICAgICAgICAgICB8IFwie1wiIHwgXCJ9XCIgfCBTUCB8IEhUXG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxuICovXG5mdW5jdGlvbiB2YWxpZGF0ZUNvb2tpZU5hbWUgKG5hbWUpIHtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBuYW1lLmxlbmd0aDsgKytpKSB7XG4gICAgY29uc3QgY29kZSA9IG5hbWUuY2hhckNvZGVBdChpKVxuXG4gICAgaWYgKFxuICAgICAgY29kZSA8IDB4MjEgfHwgLy8gZXhjbHVkZSBDVExzICgwLTMxKSwgU1AgYW5kIEhUXG4gICAgICBjb2RlID4gMHg3RSB8fCAvLyBleGNsdWRlIG5vbi1hc2NpaSBhbmQgREVMXG4gICAgICBjb2RlID09PSAweDIyIHx8IC8vIFwiXG4gICAgICBjb2RlID09PSAweDI4IHx8IC8vIChcbiAgICAgIGNvZGUgPT09IDB4MjkgfHwgLy8gKVxuICAgICAgY29kZSA9PT0gMHgzQyB8fCAvLyA8XG4gICAgICBjb2RlID09PSAweDNFIHx8IC8vID5cbiAgICAgIGNvZGUgPT09IDB4NDAgfHwgLy8gQFxuICAgICAgY29kZSA9PT0gMHgyQyB8fCAvLyAsXG4gICAgICBjb2RlID09PSAweDNCIHx8IC8vIDtcbiAgICAgIGNvZGUgPT09IDB4M0EgfHwgLy8gOlxuICAgICAgY29kZSA9PT0gMHg1QyB8fCAvLyBcXFxuICAgICAgY29kZSA9PT0gMHgyRiB8fCAvLyAvXG4gICAgICBjb2RlID09PSAweDVCIHx8IC8vIFtcbiAgICAgIGNvZGUgPT09IDB4NUQgfHwgLy8gXVxuICAgICAgY29kZSA9PT0gMHgzRiB8fCAvLyA/XG4gICAgICBjb2RlID09PSAweDNEIHx8IC8vID1cbiAgICAgIGNvZGUgPT09IDB4N0IgfHwgLy8ge1xuICAgICAgY29kZSA9PT0gMHg3RCAvLyB9XG4gICAgKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgY29va2llIG5hbWUnKVxuICAgIH1cbiAgfVxufVxuXG4vKipcbiBjb29raWUtdmFsdWUgICAgICA9ICpjb29raWUtb2N0ZXQgLyAoIERRVU9URSAqY29va2llLW9jdGV0IERRVU9URSApXG4gY29va2llLW9jdGV0ICAgICAgPSAleDIxIC8gJXgyMy0yQiAvICV4MkQtM0EgLyAleDNDLTVCIC8gJXg1RC03RVxuICAgICAgICAgICAgICAgICAgICAgICA7IFVTLUFTQ0lJIGNoYXJhY3RlcnMgZXhjbHVkaW5nIENUTHMsXG4gICAgICAgICAgICAgICAgICAgICAgIDsgd2hpdGVzcGFjZSBEUVVPVEUsIGNvbW1hLCBzZW1pY29sb24sXG4gICAgICAgICAgICAgICAgICAgICAgIDsgYW5kIGJhY2tzbGFzaFxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKi9cbmZ1bmN0aW9uIHZhbGlkYXRlQ29va2llVmFsdWUgKHZhbHVlKSB7XG4gIGxldCBsZW4gPSB2YWx1ZS5sZW5ndGhcbiAgbGV0IGkgPSAwXG5cbiAgLy8gaWYgdGhlIHZhbHVlIGlzIHdyYXBwZWQgaW4gRFFVT1RFXG4gIGlmICh2YWx1ZVswXSA9PT0gJ1wiJykge1xuICAgIGlmIChsZW4gPT09IDEgfHwgdmFsdWVbbGVuIC0gMV0gIT09ICdcIicpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBjb29raWUgdmFsdWUnKVxuICAgIH1cbiAgICAtLWxlblxuICAgICsraVxuICB9XG5cbiAgd2hpbGUgKGkgPCBsZW4pIHtcbiAgICBjb25zdCBjb2RlID0gdmFsdWUuY2hhckNvZGVBdChpKyspXG5cbiAgICBpZiAoXG4gICAgICBjb2RlIDwgMHgyMSB8fCAvLyBleGNsdWRlIENUTHMgKDAtMzEpXG4gICAgICBjb2RlID4gMHg3RSB8fCAvLyBub24tYXNjaWkgYW5kIERFTCAoMTI3KVxuICAgICAgY29kZSA9PT0gMHgyMiB8fCAvLyBcIlxuICAgICAgY29kZSA9PT0gMHgyQyB8fCAvLyAsXG4gICAgICBjb2RlID09PSAweDNCIHx8IC8vIDtcbiAgICAgIGNvZGUgPT09IDB4NUMgLy8gXFxcbiAgICApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBjb29raWUgdmFsdWUnKVxuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIHBhdGgtdmFsdWUgICAgICAgID0gPGFueSBDSEFSIGV4Y2VwdCBDVExzIG9yIFwiO1wiPlxuICogQHBhcmFtIHtzdHJpbmd9IHBhdGhcbiAqL1xuZnVuY3Rpb24gdmFsaWRhdGVDb29raWVQYXRoIChwYXRoKSB7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgcGF0aC5sZW5ndGg7ICsraSkge1xuICAgIGNvbnN0IGNvZGUgPSBwYXRoLmNoYXJDb2RlQXQoaSlcblxuICAgIGlmIChcbiAgICAgIGNvZGUgPCAweDIwIHx8IC8vIGV4Y2x1ZGUgQ1RMcyAoMC0zMSlcbiAgICAgIGNvZGUgPT09IDB4N0YgfHwgLy8gREVMXG4gICAgICBjb2RlID09PSAweDNCIC8vIDtcbiAgICApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBjb29raWUgcGF0aCcpXG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogSSBoYXZlIG5vIGlkZWEgd2h5IHRoZXNlIHZhbHVlcyBhcmVuJ3QgYWxsb3dlZCB0byBiZSBob25lc3QsXG4gKiBidXQgRGVubyB0ZXN0cyB0aGVzZS4gLSBLaGFmcmFcbiAqIEBwYXJhbSB7c3RyaW5nfSBkb21haW5cbiAqL1xuZnVuY3Rpb24gdmFsaWRhdGVDb29raWVEb21haW4gKGRvbWFpbikge1xuICBpZiAoXG4gICAgZG9tYWluLnN0YXJ0c1dpdGgoJy0nKSB8fFxuICAgIGRvbWFpbi5lbmRzV2l0aCgnLicpIHx8XG4gICAgZG9tYWluLmVuZHNXaXRoKCctJylcbiAgKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGNvb2tpZSBkb21haW4nKVxuICB9XG59XG5cbmNvbnN0IElNRkRheXMgPSBbXG4gICdTdW4nLCAnTW9uJywgJ1R1ZScsICdXZWQnLFxuICAnVGh1JywgJ0ZyaScsICdTYXQnXG5dXG5cbmNvbnN0IElNRk1vbnRocyA9IFtcbiAgJ0phbicsICdGZWInLCAnTWFyJywgJ0FwcicsICdNYXknLCAnSnVuJyxcbiAgJ0p1bCcsICdBdWcnLCAnU2VwJywgJ09jdCcsICdOb3YnLCAnRGVjJ1xuXVxuXG5jb25zdCBJTUZQYWRkZWROdW1iZXJzID0gQXJyYXkoNjEpLmZpbGwoMCkubWFwKChfLCBpKSA9PiBpLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgJzAnKSlcblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vd3d3LnJmYy1lZGl0b3Iub3JnL3JmYy9yZmM3MjMxI3NlY3Rpb24tNy4xLjEuMVxuICogQHBhcmFtIHtudW1iZXJ8RGF0ZX0gZGF0ZVxuICBJTUYtZml4ZGF0ZSAgPSBkYXktbmFtZSBcIixcIiBTUCBkYXRlMSBTUCB0aW1lLW9mLWRheSBTUCBHTVRcbiAgOyBmaXhlZCBsZW5ndGgvem9uZS9jYXBpdGFsaXphdGlvbiBzdWJzZXQgb2YgdGhlIGZvcm1hdFxuICA7IHNlZSBTZWN0aW9uIDMuMyBvZiBbUkZDNTMyMl1cblxuICBkYXktbmFtZSAgICAgPSAleDRELjZGLjZFIDsgXCJNb25cIiwgY2FzZS1zZW5zaXRpdmVcbiAgICAgICAgICAgICAgLyAleDU0Ljc1LjY1IDsgXCJUdWVcIiwgY2FzZS1zZW5zaXRpdmVcbiAgICAgICAgICAgICAgLyAleDU3LjY1LjY0IDsgXCJXZWRcIiwgY2FzZS1zZW5zaXRpdmVcbiAgICAgICAgICAgICAgLyAleDU0LjY4Ljc1IDsgXCJUaHVcIiwgY2FzZS1zZW5zaXRpdmVcbiAgICAgICAgICAgICAgLyAleDQ2LjcyLjY5IDsgXCJGcmlcIiwgY2FzZS1zZW5zaXRpdmVcbiAgICAgICAgICAgICAgLyAleDUzLjYxLjc0IDsgXCJTYXRcIiwgY2FzZS1zZW5zaXRpdmVcbiAgICAgICAgICAgICAgLyAleDUzLjc1LjZFIDsgXCJTdW5cIiwgY2FzZS1zZW5zaXRpdmVcbiAgZGF0ZTEgICAgICAgID0gZGF5IFNQIG1vbnRoIFNQIHllYXJcbiAgICAgICAgICAgICAgICAgIDsgZS5nLiwgMDIgSnVuIDE5ODJcblxuICBkYXkgICAgICAgICAgPSAyRElHSVRcbiAgbW9udGggICAgICAgID0gJXg0QS42MS42RSA7IFwiSmFuXCIsIGNhc2Utc2Vuc2l0aXZlXG4gICAgICAgICAgICAgIC8gJXg0Ni42NS42MiA7IFwiRmViXCIsIGNhc2Utc2Vuc2l0aXZlXG4gICAgICAgICAgICAgIC8gJXg0RC42MS43MiA7IFwiTWFyXCIsIGNhc2Utc2Vuc2l0aXZlXG4gICAgICAgICAgICAgIC8gJXg0MS43MC43MiA7IFwiQXByXCIsIGNhc2Utc2Vuc2l0aXZlXG4gICAgICAgICAgICAgIC8gJXg0RC42MS43OSA7IFwiTWF5XCIsIGNhc2Utc2Vuc2l0aXZlXG4gICAgICAgICAgICAgIC8gJXg0QS43NS42RSA7IFwiSnVuXCIsIGNhc2Utc2Vuc2l0aXZlXG4gICAgICAgICAgICAgIC8gJXg0QS43NS42QyA7IFwiSnVsXCIsIGNhc2Utc2Vuc2l0aXZlXG4gICAgICAgICAgICAgIC8gJXg0MS43NS42NyA7IFwiQXVnXCIsIGNhc2Utc2Vuc2l0aXZlXG4gICAgICAgICAgICAgIC8gJXg1My42NS43MCA7IFwiU2VwXCIsIGNhc2Utc2Vuc2l0aXZlXG4gICAgICAgICAgICAgIC8gJXg0Ri42My43NCA7IFwiT2N0XCIsIGNhc2Utc2Vuc2l0aXZlXG4gICAgICAgICAgICAgIC8gJXg0RS42Ri43NiA7IFwiTm92XCIsIGNhc2Utc2Vuc2l0aXZlXG4gICAgICAgICAgICAgIC8gJXg0NC42NS42MyA7IFwiRGVjXCIsIGNhc2Utc2Vuc2l0aXZlXG4gIHllYXIgICAgICAgICA9IDRESUdJVFxuXG4gIEdNVCAgICAgICAgICA9ICV4NDcuNEQuNTQgOyBcIkdNVFwiLCBjYXNlLXNlbnNpdGl2ZVxuXG4gIHRpbWUtb2YtZGF5ICA9IGhvdXIgXCI6XCIgbWludXRlIFwiOlwiIHNlY29uZFxuICAgICAgICAgICAgICA7IDAwOjAwOjAwIC0gMjM6NTk6NjAgKGxlYXAgc2Vjb25kKVxuXG4gIGhvdXIgICAgICAgICA9IDJESUdJVFxuICBtaW51dGUgICAgICAgPSAyRElHSVRcbiAgc2Vjb25kICAgICAgID0gMkRJR0lUXG4gKi9cbmZ1bmN0aW9uIHRvSU1GRGF0ZSAoZGF0ZSkge1xuICBpZiAodHlwZW9mIGRhdGUgPT09ICdudW1iZXInKSB7XG4gICAgZGF0ZSA9IG5ldyBEYXRlKGRhdGUpXG4gIH1cblxuICByZXR1cm4gYCR7SU1GRGF5c1tkYXRlLmdldFVUQ0RheSgpXX0sICR7SU1GUGFkZGVkTnVtYmVyc1tkYXRlLmdldFVUQ0RhdGUoKV19ICR7SU1GTW9udGhzW2RhdGUuZ2V0VVRDTW9udGgoKV19ICR7ZGF0ZS5nZXRVVENGdWxsWWVhcigpfSAke0lNRlBhZGRlZE51bWJlcnNbZGF0ZS5nZXRVVENIb3VycygpXX06JHtJTUZQYWRkZWROdW1iZXJzW2RhdGUuZ2V0VVRDTWludXRlcygpXX06JHtJTUZQYWRkZWROdW1iZXJzW2RhdGUuZ2V0VVRDU2Vjb25kcygpXX0gR01UYFxufVxuXG4vKipcbiBtYXgtYWdlLWF2ICAgICAgICA9IFwiTWF4LUFnZT1cIiBub24temVyby1kaWdpdCAqRElHSVRcbiAgICAgICAgICAgICAgICAgICAgICAgOyBJbiBwcmFjdGljZSwgYm90aCBleHBpcmVzLWF2IGFuZCBtYXgtYWdlLWF2XG4gICAgICAgICAgICAgICAgICAgICAgIDsgYXJlIGxpbWl0ZWQgdG8gZGF0ZXMgcmVwcmVzZW50YWJsZSBieSB0aGVcbiAgICAgICAgICAgICAgICAgICAgICAgOyB1c2VyIGFnZW50LlxuICogQHBhcmFtIHtudW1iZXJ9IG1heEFnZVxuICovXG5mdW5jdGlvbiB2YWxpZGF0ZUNvb2tpZU1heEFnZSAobWF4QWdlKSB7XG4gIGlmIChtYXhBZ2UgPCAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGNvb2tpZSBtYXgtYWdlJylcbiAgfVxufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly93d3cucmZjLWVkaXRvci5vcmcvcmZjL3JmYzYyNjUjc2VjdGlvbi00LjEuMVxuICogQHBhcmFtIHtpbXBvcnQoJy4vaW5kZXgnKS5Db29raWV9IGNvb2tpZVxuICovXG5mdW5jdGlvbiBzdHJpbmdpZnkgKGNvb2tpZSkge1xuICBpZiAoY29va2llLm5hbWUubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIG51bGxcbiAgfVxuXG4gIHZhbGlkYXRlQ29va2llTmFtZShjb29raWUubmFtZSlcbiAgdmFsaWRhdGVDb29raWVWYWx1ZShjb29raWUudmFsdWUpXG5cbiAgY29uc3Qgb3V0ID0gW2Ake2Nvb2tpZS5uYW1lfT0ke2Nvb2tpZS52YWx1ZX1gXVxuXG4gIC8vIGh0dHBzOi8vZGF0YXRyYWNrZXIuaWV0Zi5vcmcvZG9jL2h0bWwvZHJhZnQtaWV0Zi1odHRwYmlzLWNvb2tpZS1wcmVmaXhlcy0wMCNzZWN0aW9uLTMuMVxuICAvLyBodHRwczovL2RhdGF0cmFja2VyLmlldGYub3JnL2RvYy9odG1sL2RyYWZ0LWlldGYtaHR0cGJpcy1jb29raWUtcHJlZml4ZXMtMDAjc2VjdGlvbi0zLjJcbiAgaWYgKGNvb2tpZS5uYW1lLnN0YXJ0c1dpdGgoJ19fU2VjdXJlLScpKSB7XG4gICAgY29va2llLnNlY3VyZSA9IHRydWVcbiAgfVxuXG4gIGlmIChjb29raWUubmFtZS5zdGFydHNXaXRoKCdfX0hvc3QtJykpIHtcbiAgICBjb29raWUuc2VjdXJlID0gdHJ1ZVxuICAgIGNvb2tpZS5kb21haW4gPSBudWxsXG4gICAgY29va2llLnBhdGggPSAnLydcbiAgfVxuXG4gIGlmIChjb29raWUuc2VjdXJlKSB7XG4gICAgb3V0LnB1c2goJ1NlY3VyZScpXG4gIH1cblxuICBpZiAoY29va2llLmh0dHBPbmx5KSB7XG4gICAgb3V0LnB1c2goJ0h0dHBPbmx5JylcbiAgfVxuXG4gIGlmICh0eXBlb2YgY29va2llLm1heEFnZSA9PT0gJ251bWJlcicpIHtcbiAgICB2YWxpZGF0ZUNvb2tpZU1heEFnZShjb29raWUubWF4QWdlKVxuICAgIG91dC5wdXNoKGBNYXgtQWdlPSR7Y29va2llLm1heEFnZX1gKVxuICB9XG5cbiAgaWYgKGNvb2tpZS5kb21haW4pIHtcbiAgICB2YWxpZGF0ZUNvb2tpZURvbWFpbihjb29raWUuZG9tYWluKVxuICAgIG91dC5wdXNoKGBEb21haW49JHtjb29raWUuZG9tYWlufWApXG4gIH1cblxuICBpZiAoY29va2llLnBhdGgpIHtcbiAgICB2YWxpZGF0ZUNvb2tpZVBhdGgoY29va2llLnBhdGgpXG4gICAgb3V0LnB1c2goYFBhdGg9JHtjb29raWUucGF0aH1gKVxuICB9XG5cbiAgaWYgKGNvb2tpZS5leHBpcmVzICYmIGNvb2tpZS5leHBpcmVzLnRvU3RyaW5nKCkgIT09ICdJbnZhbGlkIERhdGUnKSB7XG4gICAgb3V0LnB1c2goYEV4cGlyZXM9JHt0b0lNRkRhdGUoY29va2llLmV4cGlyZXMpfWApXG4gIH1cblxuICBpZiAoY29va2llLnNhbWVTaXRlKSB7XG4gICAgb3V0LnB1c2goYFNhbWVTaXRlPSR7Y29va2llLnNhbWVTaXRlfWApXG4gIH1cblxuICBmb3IgKGNvbnN0IHBhcnQgb2YgY29va2llLnVucGFyc2VkKSB7XG4gICAgaWYgKCFwYXJ0LmluY2x1ZGVzKCc9JykpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCB1bnBhcnNlZCcpXG4gICAgfVxuXG4gICAgY29uc3QgW2tleSwgLi4udmFsdWVdID0gcGFydC5zcGxpdCgnPScpXG5cbiAgICBvdXQucHVzaChgJHtrZXkudHJpbSgpfT0ke3ZhbHVlLmpvaW4oJz0nKX1gKVxuICB9XG5cbiAgcmV0dXJuIG91dC5qb2luKCc7ICcpXG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBpc0NUTEV4Y2x1ZGluZ0h0YWIsXG4gIHZhbGlkYXRlQ29va2llTmFtZSxcbiAgdmFsaWRhdGVDb29raWVQYXRoLFxuICB2YWxpZGF0ZUNvb2tpZVZhbHVlLFxuICB0b0lNRkRhdGUsXG4gIHN0cmluZ2lmeVxufVxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7IG1heE5hbWVWYWx1ZVBhaXJTaXplLCBtYXhBdHRyaWJ1dGVWYWx1ZVNpemUgfSA9IHJlcXVpcmUoJy4vY29uc3RhbnRzJylcbmNvbnN0IHsgaXNDVExFeGNsdWRpbmdIdGFiIH0gPSByZXF1aXJlKCcuL3V0aWwnKVxuY29uc3QgeyBjb2xsZWN0QVNlcXVlbmNlT2ZDb2RlUG9pbnRzRmFzdCB9ID0gcmVxdWlyZSgnLi4vZmV0Y2gvZGF0YS11cmwnKVxuY29uc3QgYXNzZXJ0ID0gcmVxdWlyZSgnbm9kZTphc3NlcnQnKVxuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBQYXJzZXMgdGhlIGZpZWxkLXZhbHVlIGF0dHJpYnV0ZXMgb2YgYSBzZXQtY29va2llIGhlYWRlciBzdHJpbmcuXG4gKiBAc2VlIGh0dHBzOi8vZGF0YXRyYWNrZXIuaWV0Zi5vcmcvZG9jL2h0bWwvZHJhZnQtaWV0Zi1odHRwYmlzLXJmYzYyNjViaXMjc2VjdGlvbi01LjRcbiAqIEBwYXJhbSB7c3RyaW5nfSBoZWFkZXJcbiAqIEByZXR1cm5zIGlmIHRoZSBoZWFkZXIgaXMgaW52YWxpZCwgbnVsbCB3aWxsIGJlIHJldHVybmVkXG4gKi9cbmZ1bmN0aW9uIHBhcnNlU2V0Q29va2llIChoZWFkZXIpIHtcbiAgLy8gMS4gSWYgdGhlIHNldC1jb29raWUtc3RyaW5nIGNvbnRhaW5zIGEgJXgwMC0wOCAvICV4MEEtMUYgLyAleDdGXG4gIC8vICAgIGNoYXJhY3RlciAoQ1RMIGNoYXJhY3RlcnMgZXhjbHVkaW5nIEhUQUIpOiBBYm9ydCB0aGVzZSBzdGVwcyBhbmRcbiAgLy8gICAgaWdub3JlIHRoZSBzZXQtY29va2llLXN0cmluZyBlbnRpcmVseS5cbiAgaWYgKGlzQ1RMRXhjbHVkaW5nSHRhYihoZWFkZXIpKSB7XG4gICAgcmV0dXJuIG51bGxcbiAgfVxuXG4gIGxldCBuYW1lVmFsdWVQYWlyID0gJydcbiAgbGV0IHVucGFyc2VkQXR0cmlidXRlcyA9ICcnXG4gIGxldCBuYW1lID0gJydcbiAgbGV0IHZhbHVlID0gJydcblxuICAvLyAyLiBJZiB0aGUgc2V0LWNvb2tpZS1zdHJpbmcgY29udGFpbnMgYSAleDNCIChcIjtcIikgY2hhcmFjdGVyOlxuICBpZiAoaGVhZGVyLmluY2x1ZGVzKCc7JykpIHtcbiAgICAvLyAxLiBUaGUgbmFtZS12YWx1ZS1wYWlyIHN0cmluZyBjb25zaXN0cyBvZiB0aGUgY2hhcmFjdGVycyB1cCB0byxcbiAgICAvLyAgICBidXQgbm90IGluY2x1ZGluZywgdGhlIGZpcnN0ICV4M0IgKFwiO1wiKSwgYW5kIHRoZSB1bnBhcnNlZC1cbiAgICAvLyAgICBhdHRyaWJ1dGVzIGNvbnNpc3Qgb2YgdGhlIHJlbWFpbmRlciBvZiB0aGUgc2V0LWNvb2tpZS1zdHJpbmdcbiAgICAvLyAgICAoaW5jbHVkaW5nIHRoZSAleDNCIChcIjtcIikgaW4gcXVlc3Rpb24pLlxuICAgIGNvbnN0IHBvc2l0aW9uID0geyBwb3NpdGlvbjogMCB9XG5cbiAgICBuYW1lVmFsdWVQYWlyID0gY29sbGVjdEFTZXF1ZW5jZU9mQ29kZVBvaW50c0Zhc3QoJzsnLCBoZWFkZXIsIHBvc2l0aW9uKVxuICAgIHVucGFyc2VkQXR0cmlidXRlcyA9IGhlYWRlci5zbGljZShwb3NpdGlvbi5wb3NpdGlvbilcbiAgfSBlbHNlIHtcbiAgICAvLyBPdGhlcndpc2U6XG5cbiAgICAvLyAxLiBUaGUgbmFtZS12YWx1ZS1wYWlyIHN0cmluZyBjb25zaXN0cyBvZiBhbGwgdGhlIGNoYXJhY3RlcnNcbiAgICAvLyAgICBjb250YWluZWQgaW4gdGhlIHNldC1jb29raWUtc3RyaW5nLCBhbmQgdGhlIHVucGFyc2VkLVxuICAgIC8vICAgIGF0dHJpYnV0ZXMgaXMgdGhlIGVtcHR5IHN0cmluZy5cbiAgICBuYW1lVmFsdWVQYWlyID0gaGVhZGVyXG4gIH1cblxuICAvLyAzLiBJZiB0aGUgbmFtZS12YWx1ZS1wYWlyIHN0cmluZyBsYWNrcyBhICV4M0QgKFwiPVwiKSBjaGFyYWN0ZXIsIHRoZW5cbiAgLy8gICAgdGhlIG5hbWUgc3RyaW5nIGlzIGVtcHR5LCBhbmQgdGhlIHZhbHVlIHN0cmluZyBpcyB0aGUgdmFsdWUgb2ZcbiAgLy8gICAgbmFtZS12YWx1ZS1wYWlyLlxuICBpZiAoIW5hbWVWYWx1ZVBhaXIuaW5jbHVkZXMoJz0nKSkge1xuICAgIHZhbHVlID0gbmFtZVZhbHVlUGFpclxuICB9IGVsc2Uge1xuICAgIC8vICAgIE90aGVyd2lzZSwgdGhlIG5hbWUgc3RyaW5nIGNvbnNpc3RzIG9mIHRoZSBjaGFyYWN0ZXJzIHVwIHRvLCBidXRcbiAgICAvLyAgICBub3QgaW5jbHVkaW5nLCB0aGUgZmlyc3QgJXgzRCAoXCI9XCIpIGNoYXJhY3RlciwgYW5kIHRoZSAocG9zc2libHlcbiAgICAvLyAgICBlbXB0eSkgdmFsdWUgc3RyaW5nIGNvbnNpc3RzIG9mIHRoZSBjaGFyYWN0ZXJzIGFmdGVyIHRoZSBmaXJzdFxuICAgIC8vICAgICV4M0QgKFwiPVwiKSBjaGFyYWN0ZXIuXG4gICAgY29uc3QgcG9zaXRpb24gPSB7IHBvc2l0aW9uOiAwIH1cbiAgICBuYW1lID0gY29sbGVjdEFTZXF1ZW5jZU9mQ29kZVBvaW50c0Zhc3QoXG4gICAgICAnPScsXG4gICAgICBuYW1lVmFsdWVQYWlyLFxuICAgICAgcG9zaXRpb25cbiAgICApXG4gICAgdmFsdWUgPSBuYW1lVmFsdWVQYWlyLnNsaWNlKHBvc2l0aW9uLnBvc2l0aW9uICsgMSlcbiAgfVxuXG4gIC8vIDQuIFJlbW92ZSBhbnkgbGVhZGluZyBvciB0cmFpbGluZyBXU1AgY2hhcmFjdGVycyBmcm9tIHRoZSBuYW1lXG4gIC8vICAgIHN0cmluZyBhbmQgdGhlIHZhbHVlIHN0cmluZy5cbiAgbmFtZSA9IG5hbWUudHJpbSgpXG4gIHZhbHVlID0gdmFsdWUudHJpbSgpXG5cbiAgLy8gNS4gSWYgdGhlIHN1bSBvZiB0aGUgbGVuZ3RocyBvZiB0aGUgbmFtZSBzdHJpbmcgYW5kIHRoZSB2YWx1ZSBzdHJpbmdcbiAgLy8gICAgaXMgbW9yZSB0aGFuIDQwOTYgb2N0ZXRzLCBhYm9ydCB0aGVzZSBzdGVwcyBhbmQgaWdub3JlIHRoZSBzZXQtXG4gIC8vICAgIGNvb2tpZS1zdHJpbmcgZW50aXJlbHkuXG4gIGlmIChuYW1lLmxlbmd0aCArIHZhbHVlLmxlbmd0aCA+IG1heE5hbWVWYWx1ZVBhaXJTaXplKSB7XG4gICAgcmV0dXJuIG51bGxcbiAgfVxuXG4gIC8vIDYuIFRoZSBjb29raWUtbmFtZSBpcyB0aGUgbmFtZSBzdHJpbmcsIGFuZCB0aGUgY29va2llLXZhbHVlIGlzIHRoZVxuICAvLyAgICB2YWx1ZSBzdHJpbmcuXG4gIHJldHVybiB7XG4gICAgbmFtZSwgdmFsdWUsIC4uLnBhcnNlVW5wYXJzZWRBdHRyaWJ1dGVzKHVucGFyc2VkQXR0cmlidXRlcylcbiAgfVxufVxuXG4vKipcbiAqIFBhcnNlcyB0aGUgcmVtYWluaW5nIGF0dHJpYnV0ZXMgb2YgYSBzZXQtY29va2llIGhlYWRlclxuICogQHNlZSBodHRwczovL2RhdGF0cmFja2VyLmlldGYub3JnL2RvYy9odG1sL2RyYWZ0LWlldGYtaHR0cGJpcy1yZmM2MjY1YmlzI3NlY3Rpb24tNS40XG4gKiBAcGFyYW0ge3N0cmluZ30gdW5wYXJzZWRBdHRyaWJ1dGVzXG4gKiBAcGFyYW0ge1tPYmplY3QuPHN0cmluZywgdW5rbm93bj5dPXt9fSBjb29raWVBdHRyaWJ1dGVMaXN0XG4gKi9cbmZ1bmN0aW9uIHBhcnNlVW5wYXJzZWRBdHRyaWJ1dGVzICh1bnBhcnNlZEF0dHJpYnV0ZXMsIGNvb2tpZUF0dHJpYnV0ZUxpc3QgPSB7fSkge1xuICAvLyAxLiBJZiB0aGUgdW5wYXJzZWQtYXR0cmlidXRlcyBzdHJpbmcgaXMgZW1wdHksIHNraXAgdGhlIHJlc3Qgb2ZcbiAgLy8gICAgdGhlc2Ugc3RlcHMuXG4gIGlmICh1bnBhcnNlZEF0dHJpYnV0ZXMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIGNvb2tpZUF0dHJpYnV0ZUxpc3RcbiAgfVxuXG4gIC8vIDIuIERpc2NhcmQgdGhlIGZpcnN0IGNoYXJhY3RlciBvZiB0aGUgdW5wYXJzZWQtYXR0cmlidXRlcyAod2hpY2hcbiAgLy8gICAgd2lsbCBiZSBhICV4M0IgKFwiO1wiKSBjaGFyYWN0ZXIpLlxuICBhc3NlcnQodW5wYXJzZWRBdHRyaWJ1dGVzWzBdID09PSAnOycpXG4gIHVucGFyc2VkQXR0cmlidXRlcyA9IHVucGFyc2VkQXR0cmlidXRlcy5zbGljZSgxKVxuXG4gIGxldCBjb29raWVBdiA9ICcnXG5cbiAgLy8gMy4gSWYgdGhlIHJlbWFpbmluZyB1bnBhcnNlZC1hdHRyaWJ1dGVzIGNvbnRhaW5zIGEgJXgzQiAoXCI7XCIpXG4gIC8vICAgIGNoYXJhY3RlcjpcbiAgaWYgKHVucGFyc2VkQXR0cmlidXRlcy5pbmNsdWRlcygnOycpKSB7XG4gICAgLy8gMS4gQ29uc3VtZSB0aGUgY2hhcmFjdGVycyBvZiB0aGUgdW5wYXJzZWQtYXR0cmlidXRlcyB1cCB0bywgYnV0XG4gICAgLy8gICAgbm90IGluY2x1ZGluZywgdGhlIGZpcnN0ICV4M0IgKFwiO1wiKSBjaGFyYWN0ZXIuXG4gICAgY29va2llQXYgPSBjb2xsZWN0QVNlcXVlbmNlT2ZDb2RlUG9pbnRzRmFzdChcbiAgICAgICc7JyxcbiAgICAgIHVucGFyc2VkQXR0cmlidXRlcyxcbiAgICAgIHsgcG9zaXRpb246IDAgfVxuICAgIClcbiAgICB1bnBhcnNlZEF0dHJpYnV0ZXMgPSB1bnBhcnNlZEF0dHJpYnV0ZXMuc2xpY2UoY29va2llQXYubGVuZ3RoKVxuICB9IGVsc2Uge1xuICAgIC8vIE90aGVyd2lzZTpcblxuICAgIC8vIDEuIENvbnN1bWUgdGhlIHJlbWFpbmRlciBvZiB0aGUgdW5wYXJzZWQtYXR0cmlidXRlcy5cbiAgICBjb29raWVBdiA9IHVucGFyc2VkQXR0cmlidXRlc1xuICAgIHVucGFyc2VkQXR0cmlidXRlcyA9ICcnXG4gIH1cblxuICAvLyBMZXQgdGhlIGNvb2tpZS1hdiBzdHJpbmcgYmUgdGhlIGNoYXJhY3RlcnMgY29uc3VtZWQgaW4gdGhpcyBzdGVwLlxuXG4gIGxldCBhdHRyaWJ1dGVOYW1lID0gJydcbiAgbGV0IGF0dHJpYnV0ZVZhbHVlID0gJydcblxuICAvLyA0LiBJZiB0aGUgY29va2llLWF2IHN0cmluZyBjb250YWlucyBhICV4M0QgKFwiPVwiKSBjaGFyYWN0ZXI6XG4gIGlmIChjb29raWVBdi5pbmNsdWRlcygnPScpKSB7XG4gICAgLy8gMS4gVGhlIChwb3NzaWJseSBlbXB0eSkgYXR0cmlidXRlLW5hbWUgc3RyaW5nIGNvbnNpc3RzIG9mIHRoZVxuICAgIC8vICAgIGNoYXJhY3RlcnMgdXAgdG8sIGJ1dCBub3QgaW5jbHVkaW5nLCB0aGUgZmlyc3QgJXgzRCAoXCI9XCIpXG4gICAgLy8gICAgY2hhcmFjdGVyLCBhbmQgdGhlIChwb3NzaWJseSBlbXB0eSkgYXR0cmlidXRlLXZhbHVlIHN0cmluZ1xuICAgIC8vICAgIGNvbnNpc3RzIG9mIHRoZSBjaGFyYWN0ZXJzIGFmdGVyIHRoZSBmaXJzdCAleDNEIChcIj1cIilcbiAgICAvLyAgICBjaGFyYWN0ZXIuXG4gICAgY29uc3QgcG9zaXRpb24gPSB7IHBvc2l0aW9uOiAwIH1cblxuICAgIGF0dHJpYnV0ZU5hbWUgPSBjb2xsZWN0QVNlcXVlbmNlT2ZDb2RlUG9pbnRzRmFzdChcbiAgICAgICc9JyxcbiAgICAgIGNvb2tpZUF2LFxuICAgICAgcG9zaXRpb25cbiAgICApXG4gICAgYXR0cmlidXRlVmFsdWUgPSBjb29raWVBdi5zbGljZShwb3NpdGlvbi5wb3NpdGlvbiArIDEpXG4gIH0gZWxzZSB7XG4gICAgLy8gT3RoZXJ3aXNlOlxuXG4gICAgLy8gMS4gVGhlIGF0dHJpYnV0ZS1uYW1lIHN0cmluZyBjb25zaXN0cyBvZiB0aGUgZW50aXJlIGNvb2tpZS1hdlxuICAgIC8vICAgIHN0cmluZywgYW5kIHRoZSBhdHRyaWJ1dGUtdmFsdWUgc3RyaW5nIGlzIGVtcHR5LlxuICAgIGF0dHJpYnV0ZU5hbWUgPSBjb29raWVBdlxuICB9XG5cbiAgLy8gNS4gUmVtb3ZlIGFueSBsZWFkaW5nIG9yIHRyYWlsaW5nIFdTUCBjaGFyYWN0ZXJzIGZyb20gdGhlIGF0dHJpYnV0ZS1cbiAgLy8gICAgbmFtZSBzdHJpbmcgYW5kIHRoZSBhdHRyaWJ1dGUtdmFsdWUgc3RyaW5nLlxuICBhdHRyaWJ1dGVOYW1lID0gYXR0cmlidXRlTmFtZS50cmltKClcbiAgYXR0cmlidXRlVmFsdWUgPSBhdHRyaWJ1dGVWYWx1ZS50cmltKClcblxuICAvLyA2LiBJZiB0aGUgYXR0cmlidXRlLXZhbHVlIGlzIGxvbmdlciB0aGFuIDEwMjQgb2N0ZXRzLCBpZ25vcmUgdGhlXG4gIC8vICAgIGNvb2tpZS1hdiBzdHJpbmcgYW5kIHJldHVybiB0byBTdGVwIDEgb2YgdGhpcyBhbGdvcml0aG0uXG4gIGlmIChhdHRyaWJ1dGVWYWx1ZS5sZW5ndGggPiBtYXhBdHRyaWJ1dGVWYWx1ZVNpemUpIHtcbiAgICByZXR1cm4gcGFyc2VVbnBhcnNlZEF0dHJpYnV0ZXModW5wYXJzZWRBdHRyaWJ1dGVzLCBjb29raWVBdHRyaWJ1dGVMaXN0KVxuICB9XG5cbiAgLy8gNy4gUHJvY2VzcyB0aGUgYXR0cmlidXRlLW5hbWUgYW5kIGF0dHJpYnV0ZS12YWx1ZSBhY2NvcmRpbmcgdG8gdGhlXG4gIC8vICAgIHJlcXVpcmVtZW50cyBpbiB0aGUgZm9sbG93aW5nIHN1YnNlY3Rpb25zLiAgKE5vdGljZSB0aGF0XG4gIC8vICAgIGF0dHJpYnV0ZXMgd2l0aCB1bnJlY29nbml6ZWQgYXR0cmlidXRlLW5hbWVzIGFyZSBpZ25vcmVkLilcbiAgY29uc3QgYXR0cmlidXRlTmFtZUxvd2VyY2FzZSA9IGF0dHJpYnV0ZU5hbWUudG9Mb3dlckNhc2UoKVxuXG4gIC8vIGh0dHBzOi8vZGF0YXRyYWNrZXIuaWV0Zi5vcmcvZG9jL2h0bWwvZHJhZnQtaWV0Zi1odHRwYmlzLXJmYzYyNjViaXMjc2VjdGlvbi01LjQuMVxuICAvLyBJZiB0aGUgYXR0cmlidXRlLW5hbWUgY2FzZS1pbnNlbnNpdGl2ZWx5IG1hdGNoZXMgdGhlIHN0cmluZ1xuICAvLyBcIkV4cGlyZXNcIiwgdGhlIHVzZXIgYWdlbnQgTVVTVCBwcm9jZXNzIHRoZSBjb29raWUtYXYgYXMgZm9sbG93cy5cbiAgaWYgKGF0dHJpYnV0ZU5hbWVMb3dlcmNhc2UgPT09ICdleHBpcmVzJykge1xuICAgIC8vIDEuIExldCB0aGUgZXhwaXJ5LXRpbWUgYmUgdGhlIHJlc3VsdCBvZiBwYXJzaW5nIHRoZSBhdHRyaWJ1dGUtdmFsdWVcbiAgICAvLyAgICBhcyBjb29raWUtZGF0ZSAoc2VlIFNlY3Rpb24gNS4xLjEpLlxuICAgIGNvbnN0IGV4cGlyeVRpbWUgPSBuZXcgRGF0ZShhdHRyaWJ1dGVWYWx1ZSlcblxuICAgIC8vIDIuIElmIHRoZSBhdHRyaWJ1dGUtdmFsdWUgZmFpbGVkIHRvIHBhcnNlIGFzIGEgY29va2llIGRhdGUsIGlnbm9yZVxuICAgIC8vICAgIHRoZSBjb29raWUtYXYuXG5cbiAgICBjb29raWVBdHRyaWJ1dGVMaXN0LmV4cGlyZXMgPSBleHBpcnlUaW1lXG4gIH0gZWxzZSBpZiAoYXR0cmlidXRlTmFtZUxvd2VyY2FzZSA9PT0gJ21heC1hZ2UnKSB7XG4gICAgLy8gaHR0cHM6Ly9kYXRhdHJhY2tlci5pZXRmLm9yZy9kb2MvaHRtbC9kcmFmdC1pZXRmLWh0dHBiaXMtcmZjNjI2NWJpcyNzZWN0aW9uLTUuNC4yXG4gICAgLy8gSWYgdGhlIGF0dHJpYnV0ZS1uYW1lIGNhc2UtaW5zZW5zaXRpdmVseSBtYXRjaGVzIHRoZSBzdHJpbmcgXCJNYXgtXG4gICAgLy8gQWdlXCIsIHRoZSB1c2VyIGFnZW50IE1VU1QgcHJvY2VzcyB0aGUgY29va2llLWF2IGFzIGZvbGxvd3MuXG5cbiAgICAvLyAxLiBJZiB0aGUgZmlyc3QgY2hhcmFjdGVyIG9mIHRoZSBhdHRyaWJ1dGUtdmFsdWUgaXMgbm90IGEgRElHSVQgb3IgYVxuICAgIC8vICAgIFwiLVwiIGNoYXJhY3RlciwgaWdub3JlIHRoZSBjb29raWUtYXYuXG4gICAgY29uc3QgY2hhckNvZGUgPSBhdHRyaWJ1dGVWYWx1ZS5jaGFyQ29kZUF0KDApXG5cbiAgICBpZiAoKGNoYXJDb2RlIDwgNDggfHwgY2hhckNvZGUgPiA1NykgJiYgYXR0cmlidXRlVmFsdWVbMF0gIT09ICctJykge1xuICAgICAgcmV0dXJuIHBhcnNlVW5wYXJzZWRBdHRyaWJ1dGVzKHVucGFyc2VkQXR0cmlidXRlcywgY29va2llQXR0cmlidXRlTGlzdClcbiAgICB9XG5cbiAgICAvLyAyLiBJZiB0aGUgcmVtYWluZGVyIG9mIGF0dHJpYnV0ZS12YWx1ZSBjb250YWlucyBhIG5vbi1ESUdJVFxuICAgIC8vICAgIGNoYXJhY3RlciwgaWdub3JlIHRoZSBjb29raWUtYXYuXG4gICAgaWYgKCEvXlxcZCskLy50ZXN0KGF0dHJpYnV0ZVZhbHVlKSkge1xuICAgICAgcmV0dXJuIHBhcnNlVW5wYXJzZWRBdHRyaWJ1dGVzKHVucGFyc2VkQXR0cmlidXRlcywgY29va2llQXR0cmlidXRlTGlzdClcbiAgICB9XG5cbiAgICAvLyAzLiBMZXQgZGVsdGEtc2Vjb25kcyBiZSB0aGUgYXR0cmlidXRlLXZhbHVlIGNvbnZlcnRlZCB0byBhbiBpbnRlZ2VyLlxuICAgIGNvbnN0IGRlbHRhU2Vjb25kcyA9IE51bWJlcihhdHRyaWJ1dGVWYWx1ZSlcblxuICAgIC8vIDQuIExldCBjb29raWUtYWdlLWxpbWl0IGJlIHRoZSBtYXhpbXVtIGFnZSBvZiB0aGUgY29va2llICh3aGljaFxuICAgIC8vICAgIFNIT1VMRCBiZSA0MDAgZGF5cyBvciBsZXNzLCBzZWUgU2VjdGlvbiA0LjEuMi4yKS5cblxuICAgIC8vIDUuIFNldCBkZWx0YS1zZWNvbmRzIHRvIHRoZSBzbWFsbGVyIG9mIGl0cyBwcmVzZW50IHZhbHVlIGFuZCBjb29raWUtXG4gICAgLy8gICAgYWdlLWxpbWl0LlxuICAgIC8vIGRlbHRhU2Vjb25kcyA9IE1hdGgubWluKGRlbHRhU2Vjb25kcyAqIDEwMDAsIG1heEV4cGlyZXNNcylcblxuICAgIC8vIDYuIElmIGRlbHRhLXNlY29uZHMgaXMgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIHplcm8gKDApLCBsZXQgZXhwaXJ5LVxuICAgIC8vICAgIHRpbWUgYmUgdGhlIGVhcmxpZXN0IHJlcHJlc2VudGFibGUgZGF0ZSBhbmQgdGltZS4gIE90aGVyd2lzZSwgbGV0XG4gICAgLy8gICAgdGhlIGV4cGlyeS10aW1lIGJlIHRoZSBjdXJyZW50IGRhdGUgYW5kIHRpbWUgcGx1cyBkZWx0YS1zZWNvbmRzXG4gICAgLy8gICAgc2Vjb25kcy5cbiAgICAvLyBjb25zdCBleHBpcnlUaW1lID0gZGVsdGFTZWNvbmRzIDw9IDAgPyBEYXRlLm5vdygpIDogRGF0ZS5ub3coKSArIGRlbHRhU2Vjb25kc1xuXG4gICAgLy8gNy4gQXBwZW5kIGFuIGF0dHJpYnV0ZSB0byB0aGUgY29va2llLWF0dHJpYnV0ZS1saXN0IHdpdGggYW5cbiAgICAvLyAgICBhdHRyaWJ1dGUtbmFtZSBvZiBNYXgtQWdlIGFuZCBhbiBhdHRyaWJ1dGUtdmFsdWUgb2YgZXhwaXJ5LXRpbWUuXG4gICAgY29va2llQXR0cmlidXRlTGlzdC5tYXhBZ2UgPSBkZWx0YVNlY29uZHNcbiAgfSBlbHNlIGlmIChhdHRyaWJ1dGVOYW1lTG93ZXJjYXNlID09PSAnZG9tYWluJykge1xuICAgIC8vIGh0dHBzOi8vZGF0YXRyYWNrZXIuaWV0Zi5vcmcvZG9jL2h0bWwvZHJhZnQtaWV0Zi1odHRwYmlzLXJmYzYyNjViaXMjc2VjdGlvbi01LjQuM1xuICAgIC8vIElmIHRoZSBhdHRyaWJ1dGUtbmFtZSBjYXNlLWluc2Vuc2l0aXZlbHkgbWF0Y2hlcyB0aGUgc3RyaW5nIFwiRG9tYWluXCIsXG4gICAgLy8gdGhlIHVzZXIgYWdlbnQgTVVTVCBwcm9jZXNzIHRoZSBjb29raWUtYXYgYXMgZm9sbG93cy5cblxuICAgIC8vIDEuIExldCBjb29raWUtZG9tYWluIGJlIHRoZSBhdHRyaWJ1dGUtdmFsdWUuXG4gICAgbGV0IGNvb2tpZURvbWFpbiA9IGF0dHJpYnV0ZVZhbHVlXG5cbiAgICAvLyAyLiBJZiBjb29raWUtZG9tYWluIHN0YXJ0cyB3aXRoICV4MkUgKFwiLlwiKSwgbGV0IGNvb2tpZS1kb21haW4gYmVcbiAgICAvLyAgICBjb29raWUtZG9tYWluIHdpdGhvdXQgaXRzIGxlYWRpbmcgJXgyRSAoXCIuXCIpLlxuICAgIGlmIChjb29raWVEb21haW5bMF0gPT09ICcuJykge1xuICAgICAgY29va2llRG9tYWluID0gY29va2llRG9tYWluLnNsaWNlKDEpXG4gICAgfVxuXG4gICAgLy8gMy4gQ29udmVydCB0aGUgY29va2llLWRvbWFpbiB0byBsb3dlciBjYXNlLlxuICAgIGNvb2tpZURvbWFpbiA9IGNvb2tpZURvbWFpbi50b0xvd2VyQ2FzZSgpXG5cbiAgICAvLyA0LiBBcHBlbmQgYW4gYXR0cmlidXRlIHRvIHRoZSBjb29raWUtYXR0cmlidXRlLWxpc3Qgd2l0aCBhblxuICAgIC8vICAgIGF0dHJpYnV0ZS1uYW1lIG9mIERvbWFpbiBhbmQgYW4gYXR0cmlidXRlLXZhbHVlIG9mIGNvb2tpZS1kb21haW4uXG4gICAgY29va2llQXR0cmlidXRlTGlzdC5kb21haW4gPSBjb29raWVEb21haW5cbiAgfSBlbHNlIGlmIChhdHRyaWJ1dGVOYW1lTG93ZXJjYXNlID09PSAncGF0aCcpIHtcbiAgICAvLyBodHRwczovL2RhdGF0cmFja2VyLmlldGYub3JnL2RvYy9odG1sL2RyYWZ0LWlldGYtaHR0cGJpcy1yZmM2MjY1YmlzI3NlY3Rpb24tNS40LjRcbiAgICAvLyBJZiB0aGUgYXR0cmlidXRlLW5hbWUgY2FzZS1pbnNlbnNpdGl2ZWx5IG1hdGNoZXMgdGhlIHN0cmluZyBcIlBhdGhcIixcbiAgICAvLyB0aGUgdXNlciBhZ2VudCBNVVNUIHByb2Nlc3MgdGhlIGNvb2tpZS1hdiBhcyBmb2xsb3dzLlxuXG4gICAgLy8gMS4gSWYgdGhlIGF0dHJpYnV0ZS12YWx1ZSBpcyBlbXB0eSBvciBpZiB0aGUgZmlyc3QgY2hhcmFjdGVyIG9mIHRoZVxuICAgIC8vICAgIGF0dHJpYnV0ZS12YWx1ZSBpcyBub3QgJXgyRiAoXCIvXCIpOlxuICAgIGxldCBjb29raWVQYXRoID0gJydcbiAgICBpZiAoYXR0cmlidXRlVmFsdWUubGVuZ3RoID09PSAwIHx8IGF0dHJpYnV0ZVZhbHVlWzBdICE9PSAnLycpIHtcbiAgICAgIC8vIDEuIExldCBjb29raWUtcGF0aCBiZSB0aGUgZGVmYXVsdC1wYXRoLlxuICAgICAgY29va2llUGF0aCA9ICcvJ1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBPdGhlcndpc2U6XG5cbiAgICAgIC8vIDEuIExldCBjb29raWUtcGF0aCBiZSB0aGUgYXR0cmlidXRlLXZhbHVlLlxuICAgICAgY29va2llUGF0aCA9IGF0dHJpYnV0ZVZhbHVlXG4gICAgfVxuXG4gICAgLy8gMi4gQXBwZW5kIGFuIGF0dHJpYnV0ZSB0byB0aGUgY29va2llLWF0dHJpYnV0ZS1saXN0IHdpdGggYW5cbiAgICAvLyAgICBhdHRyaWJ1dGUtbmFtZSBvZiBQYXRoIGFuZCBhbiBhdHRyaWJ1dGUtdmFsdWUgb2YgY29va2llLXBhdGguXG4gICAgY29va2llQXR0cmlidXRlTGlzdC5wYXRoID0gY29va2llUGF0aFxuICB9IGVsc2UgaWYgKGF0dHJpYnV0ZU5hbWVMb3dlcmNhc2UgPT09ICdzZWN1cmUnKSB7XG4gICAgLy8gaHR0cHM6Ly9kYXRhdHJhY2tlci5pZXRmLm9yZy9kb2MvaHRtbC9kcmFmdC1pZXRmLWh0dHBiaXMtcmZjNjI2NWJpcyNzZWN0aW9uLTUuNC41XG4gICAgLy8gSWYgdGhlIGF0dHJpYnV0ZS1uYW1lIGNhc2UtaW5zZW5zaXRpdmVseSBtYXRjaGVzIHRoZSBzdHJpbmcgXCJTZWN1cmVcIixcbiAgICAvLyB0aGUgdXNlciBhZ2VudCBNVVNUIGFwcGVuZCBhbiBhdHRyaWJ1dGUgdG8gdGhlIGNvb2tpZS1hdHRyaWJ1dGUtbGlzdFxuICAgIC8vIHdpdGggYW4gYXR0cmlidXRlLW5hbWUgb2YgU2VjdXJlIGFuZCBhbiBlbXB0eSBhdHRyaWJ1dGUtdmFsdWUuXG5cbiAgICBjb29raWVBdHRyaWJ1dGVMaXN0LnNlY3VyZSA9IHRydWVcbiAgfSBlbHNlIGlmIChhdHRyaWJ1dGVOYW1lTG93ZXJjYXNlID09PSAnaHR0cG9ubHknKSB7XG4gICAgLy8gaHR0cHM6Ly9kYXRhdHJhY2tlci5pZXRmLm9yZy9kb2MvaHRtbC9kcmFmdC1pZXRmLWh0dHBiaXMtcmZjNjI2NWJpcyNzZWN0aW9uLTUuNC42XG4gICAgLy8gSWYgdGhlIGF0dHJpYnV0ZS1uYW1lIGNhc2UtaW5zZW5zaXRpdmVseSBtYXRjaGVzIHRoZSBzdHJpbmdcbiAgICAvLyBcIkh0dHBPbmx5XCIsIHRoZSB1c2VyIGFnZW50IE1VU1QgYXBwZW5kIGFuIGF0dHJpYnV0ZSB0byB0aGUgY29va2llLVxuICAgIC8vIGF0dHJpYnV0ZS1saXN0IHdpdGggYW4gYXR0cmlidXRlLW5hbWUgb2YgSHR0cE9ubHkgYW5kIGFuIGVtcHR5XG4gICAgLy8gYXR0cmlidXRlLXZhbHVlLlxuXG4gICAgY29va2llQXR0cmlidXRlTGlzdC5odHRwT25seSA9IHRydWVcbiAgfSBlbHNlIGlmIChhdHRyaWJ1dGVOYW1lTG93ZXJjYXNlID09PSAnc2FtZXNpdGUnKSB7XG4gICAgLy8gaHR0cHM6Ly9kYXRhdHJhY2tlci5pZXRmLm9yZy9kb2MvaHRtbC9kcmFmdC1pZXRmLWh0dHBiaXMtcmZjNjI2NWJpcyNzZWN0aW9uLTUuNC43XG4gICAgLy8gSWYgdGhlIGF0dHJpYnV0ZS1uYW1lIGNhc2UtaW5zZW5zaXRpdmVseSBtYXRjaGVzIHRoZSBzdHJpbmdcbiAgICAvLyBcIlNhbWVTaXRlXCIsIHRoZSB1c2VyIGFnZW50IE1VU1QgcHJvY2VzcyB0aGUgY29va2llLWF2IGFzIGZvbGxvd3M6XG5cbiAgICAvLyAxLiBMZXQgZW5mb3JjZW1lbnQgYmUgXCJEZWZhdWx0XCIuXG4gICAgbGV0IGVuZm9yY2VtZW50ID0gJ0RlZmF1bHQnXG5cbiAgICBjb25zdCBhdHRyaWJ1dGVWYWx1ZUxvd2VyY2FzZSA9IGF0dHJpYnV0ZVZhbHVlLnRvTG93ZXJDYXNlKClcbiAgICAvLyAyLiBJZiBjb29raWUtYXYncyBhdHRyaWJ1dGUtdmFsdWUgaXMgYSBjYXNlLWluc2Vuc2l0aXZlIG1hdGNoIGZvclxuICAgIC8vICAgIFwiTm9uZVwiLCBzZXQgZW5mb3JjZW1lbnQgdG8gXCJOb25lXCIuXG4gICAgaWYgKGF0dHJpYnV0ZVZhbHVlTG93ZXJjYXNlLmluY2x1ZGVzKCdub25lJykpIHtcbiAgICAgIGVuZm9yY2VtZW50ID0gJ05vbmUnXG4gICAgfVxuXG4gICAgLy8gMy4gSWYgY29va2llLWF2J3MgYXR0cmlidXRlLXZhbHVlIGlzIGEgY2FzZS1pbnNlbnNpdGl2ZSBtYXRjaCBmb3JcbiAgICAvLyAgICBcIlN0cmljdFwiLCBzZXQgZW5mb3JjZW1lbnQgdG8gXCJTdHJpY3RcIi5cbiAgICBpZiAoYXR0cmlidXRlVmFsdWVMb3dlcmNhc2UuaW5jbHVkZXMoJ3N0cmljdCcpKSB7XG4gICAgICBlbmZvcmNlbWVudCA9ICdTdHJpY3QnXG4gICAgfVxuXG4gICAgLy8gNC4gSWYgY29va2llLWF2J3MgYXR0cmlidXRlLXZhbHVlIGlzIGEgY2FzZS1pbnNlbnNpdGl2ZSBtYXRjaCBmb3JcbiAgICAvLyAgICBcIkxheFwiLCBzZXQgZW5mb3JjZW1lbnQgdG8gXCJMYXhcIi5cbiAgICBpZiAoYXR0cmlidXRlVmFsdWVMb3dlcmNhc2UuaW5jbHVkZXMoJ2xheCcpKSB7XG4gICAgICBlbmZvcmNlbWVudCA9ICdMYXgnXG4gICAgfVxuXG4gICAgLy8gNS4gQXBwZW5kIGFuIGF0dHJpYnV0ZSB0byB0aGUgY29va2llLWF0dHJpYnV0ZS1saXN0IHdpdGggYW5cbiAgICAvLyAgICBhdHRyaWJ1dGUtbmFtZSBvZiBcIlNhbWVTaXRlXCIgYW5kIGFuIGF0dHJpYnV0ZS12YWx1ZSBvZlxuICAgIC8vICAgIGVuZm9yY2VtZW50LlxuICAgIGNvb2tpZUF0dHJpYnV0ZUxpc3Quc2FtZVNpdGUgPSBlbmZvcmNlbWVudFxuICB9IGVsc2Uge1xuICAgIGNvb2tpZUF0dHJpYnV0ZUxpc3QudW5wYXJzZWQgPz89IFtdXG5cbiAgICBjb29raWVBdHRyaWJ1dGVMaXN0LnVucGFyc2VkLnB1c2goYCR7YXR0cmlidXRlTmFtZX09JHthdHRyaWJ1dGVWYWx1ZX1gKVxuICB9XG5cbiAgLy8gOC4gUmV0dXJuIHRvIFN0ZXAgMSBvZiB0aGlzIGFsZ29yaXRobS5cbiAgcmV0dXJuIHBhcnNlVW5wYXJzZWRBdHRyaWJ1dGVzKHVucGFyc2VkQXR0cmlidXRlcywgY29va2llQXR0cmlidXRlTGlzdClcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIHBhcnNlU2V0Q29va2llLFxuICBwYXJzZVVucGFyc2VkQXR0cmlidXRlc1xufVxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7IHBhcnNlU2V0Q29va2llIH0gPSByZXF1aXJlKCcuL3BhcnNlJylcbmNvbnN0IHsgc3RyaW5naWZ5IH0gPSByZXF1aXJlKCcuL3V0aWwnKVxuY29uc3QgeyB3ZWJpZGwgfSA9IHJlcXVpcmUoJy4uL2ZldGNoL3dlYmlkbCcpXG5jb25zdCB7IEhlYWRlcnMgfSA9IHJlcXVpcmUoJy4uL2ZldGNoL2hlYWRlcnMnKVxuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IENvb2tpZVxuICogQHByb3BlcnR5IHtzdHJpbmd9IG5hbWVcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB2YWx1ZVxuICogQHByb3BlcnR5IHtEYXRlfG51bWJlcnx1bmRlZmluZWR9IGV4cGlyZXNcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfHVuZGVmaW5lZH0gbWF4QWdlXG4gKiBAcHJvcGVydHkge3N0cmluZ3x1bmRlZmluZWR9IGRvbWFpblxuICogQHByb3BlcnR5IHtzdHJpbmd8dW5kZWZpbmVkfSBwYXRoXG4gKiBAcHJvcGVydHkge2Jvb2xlYW58dW5kZWZpbmVkfSBzZWN1cmVcbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbnx1bmRlZmluZWR9IGh0dHBPbmx5XG4gKiBAcHJvcGVydHkgeydTdHJpY3QnfCdMYXgnfCdOb25lJ30gc2FtZVNpdGVcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nW119IHVucGFyc2VkXG4gKi9cblxuLyoqXG4gKiBAcGFyYW0ge0hlYWRlcnN9IGhlYWRlcnNcbiAqIEByZXR1cm5zIHtSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+fVxuICovXG5mdW5jdGlvbiBnZXRDb29raWVzIChoZWFkZXJzKSB7XG4gIHdlYmlkbC5hcmd1bWVudExlbmd0aENoZWNrKGFyZ3VtZW50cywgMSwgJ2dldENvb2tpZXMnKVxuXG4gIHdlYmlkbC5icmFuZENoZWNrKGhlYWRlcnMsIEhlYWRlcnMsIHsgc3RyaWN0OiBmYWxzZSB9KVxuXG4gIGNvbnN0IGNvb2tpZSA9IGhlYWRlcnMuZ2V0KCdjb29raWUnKVxuICBjb25zdCBvdXQgPSB7fVxuXG4gIGlmICghY29va2llKSB7XG4gICAgcmV0dXJuIG91dFxuICB9XG5cbiAgZm9yIChjb25zdCBwaWVjZSBvZiBjb29raWUuc3BsaXQoJzsnKSkge1xuICAgIGNvbnN0IFtuYW1lLCAuLi52YWx1ZV0gPSBwaWVjZS5zcGxpdCgnPScpXG5cbiAgICBvdXRbbmFtZS50cmltKCldID0gdmFsdWUuam9pbignPScpXG4gIH1cblxuICByZXR1cm4gb3V0XG59XG5cbi8qKlxuICogQHBhcmFtIHtIZWFkZXJzfSBoZWFkZXJzXG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxuICogQHBhcmFtIHt7IHBhdGg/OiBzdHJpbmcsIGRvbWFpbj86IHN0cmluZyB9fHVuZGVmaW5lZH0gYXR0cmlidXRlc1xuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmZ1bmN0aW9uIGRlbGV0ZUNvb2tpZSAoaGVhZGVycywgbmFtZSwgYXR0cmlidXRlcykge1xuICB3ZWJpZGwuYnJhbmRDaGVjayhoZWFkZXJzLCBIZWFkZXJzLCB7IHN0cmljdDogZmFsc2UgfSlcblxuICBjb25zdCBwcmVmaXggPSAnZGVsZXRlQ29va2llJ1xuICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDIsIHByZWZpeClcblxuICBuYW1lID0gd2ViaWRsLmNvbnZlcnRlcnMuRE9NU3RyaW5nKG5hbWUsIHByZWZpeCwgJ25hbWUnKVxuICBhdHRyaWJ1dGVzID0gd2ViaWRsLmNvbnZlcnRlcnMuRGVsZXRlQ29va2llQXR0cmlidXRlcyhhdHRyaWJ1dGVzKVxuXG4gIC8vIE1hdGNoZXMgYmVoYXZpb3Igb2ZcbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2Rlbm9sYW5kL2Rlbm9fc3RkL2Jsb2IvNjM4MjdiMTYzMzBiODI0ODlhMDQ2MTQwMjdjMzNiNzkwNGUwOGJlNS9odHRwL2Nvb2tpZS50cyNMMjc4XG4gIHNldENvb2tpZShoZWFkZXJzLCB7XG4gICAgbmFtZSxcbiAgICB2YWx1ZTogJycsXG4gICAgZXhwaXJlczogbmV3IERhdGUoMCksXG4gICAgLi4uYXR0cmlidXRlc1xuICB9KVxufVxuXG4vKipcbiAqIEBwYXJhbSB7SGVhZGVyc30gaGVhZGVyc1xuICogQHJldHVybnMge0Nvb2tpZVtdfVxuICovXG5mdW5jdGlvbiBnZXRTZXRDb29raWVzIChoZWFkZXJzKSB7XG4gIHdlYmlkbC5hcmd1bWVudExlbmd0aENoZWNrKGFyZ3VtZW50cywgMSwgJ2dldFNldENvb2tpZXMnKVxuXG4gIHdlYmlkbC5icmFuZENoZWNrKGhlYWRlcnMsIEhlYWRlcnMsIHsgc3RyaWN0OiBmYWxzZSB9KVxuXG4gIGNvbnN0IGNvb2tpZXMgPSBoZWFkZXJzLmdldFNldENvb2tpZSgpXG5cbiAgaWYgKCFjb29raWVzKSB7XG4gICAgcmV0dXJuIFtdXG4gIH1cblxuICByZXR1cm4gY29va2llcy5tYXAoKHBhaXIpID0+IHBhcnNlU2V0Q29va2llKHBhaXIpKVxufVxuXG4vKipcbiAqIEBwYXJhbSB7SGVhZGVyc30gaGVhZGVyc1xuICogQHBhcmFtIHtDb29raWV9IGNvb2tpZVxuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmZ1bmN0aW9uIHNldENvb2tpZSAoaGVhZGVycywgY29va2llKSB7XG4gIHdlYmlkbC5hcmd1bWVudExlbmd0aENoZWNrKGFyZ3VtZW50cywgMiwgJ3NldENvb2tpZScpXG5cbiAgd2ViaWRsLmJyYW5kQ2hlY2soaGVhZGVycywgSGVhZGVycywgeyBzdHJpY3Q6IGZhbHNlIH0pXG5cbiAgY29va2llID0gd2ViaWRsLmNvbnZlcnRlcnMuQ29va2llKGNvb2tpZSlcblxuICBjb25zdCBzdHIgPSBzdHJpbmdpZnkoY29va2llKVxuXG4gIGlmIChzdHIpIHtcbiAgICBoZWFkZXJzLmFwcGVuZCgnU2V0LUNvb2tpZScsIHN0cilcbiAgfVxufVxuXG53ZWJpZGwuY29udmVydGVycy5EZWxldGVDb29raWVBdHRyaWJ1dGVzID0gd2ViaWRsLmRpY3Rpb25hcnlDb252ZXJ0ZXIoW1xuICB7XG4gICAgY29udmVydGVyOiB3ZWJpZGwubnVsbGFibGVDb252ZXJ0ZXIod2ViaWRsLmNvbnZlcnRlcnMuRE9NU3RyaW5nKSxcbiAgICBrZXk6ICdwYXRoJyxcbiAgICBkZWZhdWx0VmFsdWU6ICgpID0+IG51bGxcbiAgfSxcbiAge1xuICAgIGNvbnZlcnRlcjogd2ViaWRsLm51bGxhYmxlQ29udmVydGVyKHdlYmlkbC5jb252ZXJ0ZXJzLkRPTVN0cmluZyksXG4gICAga2V5OiAnZG9tYWluJyxcbiAgICBkZWZhdWx0VmFsdWU6ICgpID0+IG51bGxcbiAgfVxuXSlcblxud2ViaWRsLmNvbnZlcnRlcnMuQ29va2llID0gd2ViaWRsLmRpY3Rpb25hcnlDb252ZXJ0ZXIoW1xuICB7XG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVycy5ET01TdHJpbmcsXG4gICAga2V5OiAnbmFtZSdcbiAgfSxcbiAge1xuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnMuRE9NU3RyaW5nLFxuICAgIGtleTogJ3ZhbHVlJ1xuICB9LFxuICB7XG4gICAgY29udmVydGVyOiB3ZWJpZGwubnVsbGFibGVDb252ZXJ0ZXIoKHZhbHVlKSA9PiB7XG4gICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJykge1xuICAgICAgICByZXR1cm4gd2ViaWRsLmNvbnZlcnRlcnNbJ3Vuc2lnbmVkIGxvbmcgbG9uZyddKHZhbHVlKVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gbmV3IERhdGUodmFsdWUpXG4gICAgfSksXG4gICAga2V5OiAnZXhwaXJlcycsXG4gICAgZGVmYXVsdFZhbHVlOiAoKSA9PiBudWxsXG4gIH0sXG4gIHtcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5udWxsYWJsZUNvbnZlcnRlcih3ZWJpZGwuY29udmVydGVyc1snbG9uZyBsb25nJ10pLFxuICAgIGtleTogJ21heEFnZScsXG4gICAgZGVmYXVsdFZhbHVlOiAoKSA9PiBudWxsXG4gIH0sXG4gIHtcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5udWxsYWJsZUNvbnZlcnRlcih3ZWJpZGwuY29udmVydGVycy5ET01TdHJpbmcpLFxuICAgIGtleTogJ2RvbWFpbicsXG4gICAgZGVmYXVsdFZhbHVlOiAoKSA9PiBudWxsXG4gIH0sXG4gIHtcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5udWxsYWJsZUNvbnZlcnRlcih3ZWJpZGwuY29udmVydGVycy5ET01TdHJpbmcpLFxuICAgIGtleTogJ3BhdGgnLFxuICAgIGRlZmF1bHRWYWx1ZTogKCkgPT4gbnVsbFxuICB9LFxuICB7XG4gICAgY29udmVydGVyOiB3ZWJpZGwubnVsbGFibGVDb252ZXJ0ZXIod2ViaWRsLmNvbnZlcnRlcnMuYm9vbGVhbiksXG4gICAga2V5OiAnc2VjdXJlJyxcbiAgICBkZWZhdWx0VmFsdWU6ICgpID0+IG51bGxcbiAgfSxcbiAge1xuICAgIGNvbnZlcnRlcjogd2ViaWRsLm51bGxhYmxlQ29udmVydGVyKHdlYmlkbC5jb252ZXJ0ZXJzLmJvb2xlYW4pLFxuICAgIGtleTogJ2h0dHBPbmx5JyxcbiAgICBkZWZhdWx0VmFsdWU6ICgpID0+IG51bGxcbiAgfSxcbiAge1xuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnMuVVNWU3RyaW5nLFxuICAgIGtleTogJ3NhbWVTaXRlJyxcbiAgICBhbGxvd2VkVmFsdWVzOiBbJ1N0cmljdCcsICdMYXgnLCAnTm9uZSddXG4gIH0sXG4gIHtcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5zZXF1ZW5jZUNvbnZlcnRlcih3ZWJpZGwuY29udmVydGVycy5ET01TdHJpbmcpLFxuICAgIGtleTogJ3VucGFyc2VkJyxcbiAgICBkZWZhdWx0VmFsdWU6ICgpID0+IG5ldyBBcnJheSgwKVxuICB9XG5dKVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgZ2V0Q29va2llcyxcbiAgZGVsZXRlQ29va2llLFxuICBnZXRTZXRDb29raWVzLFxuICBzZXRDb29raWVcbn1cbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgeyB3ZWJpZGwgfSA9IHJlcXVpcmUoJy4uL2ZldGNoL3dlYmlkbCcpXG5jb25zdCB7IGtFbnVtZXJhYmxlUHJvcGVydHkgfSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUvdXRpbCcpXG5jb25zdCB7IGtDb25zdHJ1Y3QgfSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUvc3ltYm9scycpXG5jb25zdCB7IE1lc3NhZ2VQb3J0IH0gPSByZXF1aXJlKCdub2RlOndvcmtlcl90aHJlYWRzJylcblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL2NvbW1zLmh0bWwjbWVzc2FnZWV2ZW50XG4gKi9cbmNsYXNzIE1lc3NhZ2VFdmVudCBleHRlbmRzIEV2ZW50IHtcbiAgI2V2ZW50SW5pdFxuXG4gIGNvbnN0cnVjdG9yICh0eXBlLCBldmVudEluaXREaWN0ID0ge30pIHtcbiAgICBpZiAodHlwZSA9PT0ga0NvbnN0cnVjdCkge1xuICAgICAgc3VwZXIoYXJndW1lbnRzWzFdLCBhcmd1bWVudHNbMl0pXG4gICAgICB3ZWJpZGwudXRpbC5tYXJrQXNVbmNsb25lYWJsZSh0aGlzKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgY29uc3QgcHJlZml4ID0gJ01lc3NhZ2VFdmVudCBjb25zdHJ1Y3RvcidcbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDEsIHByZWZpeClcblxuICAgIHR5cGUgPSB3ZWJpZGwuY29udmVydGVycy5ET01TdHJpbmcodHlwZSwgcHJlZml4LCAndHlwZScpXG4gICAgZXZlbnRJbml0RGljdCA9IHdlYmlkbC5jb252ZXJ0ZXJzLk1lc3NhZ2VFdmVudEluaXQoZXZlbnRJbml0RGljdCwgcHJlZml4LCAnZXZlbnRJbml0RGljdCcpXG5cbiAgICBzdXBlcih0eXBlLCBldmVudEluaXREaWN0KVxuXG4gICAgdGhpcy4jZXZlbnRJbml0ID0gZXZlbnRJbml0RGljdFxuICAgIHdlYmlkbC51dGlsLm1hcmtBc1VuY2xvbmVhYmxlKHRoaXMpXG4gIH1cblxuICBnZXQgZGF0YSAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgTWVzc2FnZUV2ZW50KVxuXG4gICAgcmV0dXJuIHRoaXMuI2V2ZW50SW5pdC5kYXRhXG4gIH1cblxuICBnZXQgb3JpZ2luICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBNZXNzYWdlRXZlbnQpXG5cbiAgICByZXR1cm4gdGhpcy4jZXZlbnRJbml0Lm9yaWdpblxuICB9XG5cbiAgZ2V0IGxhc3RFdmVudElkICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBNZXNzYWdlRXZlbnQpXG5cbiAgICByZXR1cm4gdGhpcy4jZXZlbnRJbml0Lmxhc3RFdmVudElkXG4gIH1cblxuICBnZXQgc291cmNlICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBNZXNzYWdlRXZlbnQpXG5cbiAgICByZXR1cm4gdGhpcy4jZXZlbnRJbml0LnNvdXJjZVxuICB9XG5cbiAgZ2V0IHBvcnRzICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBNZXNzYWdlRXZlbnQpXG5cbiAgICBpZiAoIU9iamVjdC5pc0Zyb3plbih0aGlzLiNldmVudEluaXQucG9ydHMpKSB7XG4gICAgICBPYmplY3QuZnJlZXplKHRoaXMuI2V2ZW50SW5pdC5wb3J0cylcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy4jZXZlbnRJbml0LnBvcnRzXG4gIH1cblxuICBpbml0TWVzc2FnZUV2ZW50IChcbiAgICB0eXBlLFxuICAgIGJ1YmJsZXMgPSBmYWxzZSxcbiAgICBjYW5jZWxhYmxlID0gZmFsc2UsXG4gICAgZGF0YSA9IG51bGwsXG4gICAgb3JpZ2luID0gJycsXG4gICAgbGFzdEV2ZW50SWQgPSAnJyxcbiAgICBzb3VyY2UgPSBudWxsLFxuICAgIHBvcnRzID0gW11cbiAgKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgTWVzc2FnZUV2ZW50KVxuXG4gICAgd2ViaWRsLmFyZ3VtZW50TGVuZ3RoQ2hlY2soYXJndW1lbnRzLCAxLCAnTWVzc2FnZUV2ZW50LmluaXRNZXNzYWdlRXZlbnQnKVxuXG4gICAgcmV0dXJuIG5ldyBNZXNzYWdlRXZlbnQodHlwZSwge1xuICAgICAgYnViYmxlcywgY2FuY2VsYWJsZSwgZGF0YSwgb3JpZ2luLCBsYXN0RXZlbnRJZCwgc291cmNlLCBwb3J0c1xuICAgIH0pXG4gIH1cblxuICBzdGF0aWMgY3JlYXRlRmFzdE1lc3NhZ2VFdmVudCAodHlwZSwgaW5pdCkge1xuICAgIGNvbnN0IG1lc3NhZ2VFdmVudCA9IG5ldyBNZXNzYWdlRXZlbnQoa0NvbnN0cnVjdCwgdHlwZSwgaW5pdClcbiAgICBtZXNzYWdlRXZlbnQuI2V2ZW50SW5pdCA9IGluaXRcbiAgICBtZXNzYWdlRXZlbnQuI2V2ZW50SW5pdC5kYXRhID8/PSBudWxsXG4gICAgbWVzc2FnZUV2ZW50LiNldmVudEluaXQub3JpZ2luID8/PSAnJ1xuICAgIG1lc3NhZ2VFdmVudC4jZXZlbnRJbml0Lmxhc3RFdmVudElkID8/PSAnJ1xuICAgIG1lc3NhZ2VFdmVudC4jZXZlbnRJbml0LnNvdXJjZSA/Pz0gbnVsbFxuICAgIG1lc3NhZ2VFdmVudC4jZXZlbnRJbml0LnBvcnRzID8/PSBbXVxuICAgIHJldHVybiBtZXNzYWdlRXZlbnRcbiAgfVxufVxuXG5jb25zdCB7IGNyZWF0ZUZhc3RNZXNzYWdlRXZlbnQgfSA9IE1lc3NhZ2VFdmVudFxuZGVsZXRlIE1lc3NhZ2VFdmVudC5jcmVhdGVGYXN0TWVzc2FnZUV2ZW50XG5cbi8qKlxuICogQHNlZSBodHRwczovL3dlYnNvY2tldHMuc3BlYy53aGF0d2cub3JnLyN0aGUtY2xvc2VldmVudC1pbnRlcmZhY2VcbiAqL1xuY2xhc3MgQ2xvc2VFdmVudCBleHRlbmRzIEV2ZW50IHtcbiAgI2V2ZW50SW5pdFxuXG4gIGNvbnN0cnVjdG9yICh0eXBlLCBldmVudEluaXREaWN0ID0ge30pIHtcbiAgICBjb25zdCBwcmVmaXggPSAnQ2xvc2VFdmVudCBjb25zdHJ1Y3RvcidcbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDEsIHByZWZpeClcblxuICAgIHR5cGUgPSB3ZWJpZGwuY29udmVydGVycy5ET01TdHJpbmcodHlwZSwgcHJlZml4LCAndHlwZScpXG4gICAgZXZlbnRJbml0RGljdCA9IHdlYmlkbC5jb252ZXJ0ZXJzLkNsb3NlRXZlbnRJbml0KGV2ZW50SW5pdERpY3QpXG5cbiAgICBzdXBlcih0eXBlLCBldmVudEluaXREaWN0KVxuXG4gICAgdGhpcy4jZXZlbnRJbml0ID0gZXZlbnRJbml0RGljdFxuICAgIHdlYmlkbC51dGlsLm1hcmtBc1VuY2xvbmVhYmxlKHRoaXMpXG4gIH1cblxuICBnZXQgd2FzQ2xlYW4gKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIENsb3NlRXZlbnQpXG5cbiAgICByZXR1cm4gdGhpcy4jZXZlbnRJbml0Lndhc0NsZWFuXG4gIH1cblxuICBnZXQgY29kZSAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgQ2xvc2VFdmVudClcblxuICAgIHJldHVybiB0aGlzLiNldmVudEluaXQuY29kZVxuICB9XG5cbiAgZ2V0IHJlYXNvbiAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgQ2xvc2VFdmVudClcblxuICAgIHJldHVybiB0aGlzLiNldmVudEluaXQucmVhc29uXG4gIH1cbn1cblxuLy8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2Uvd2ViYXBwYXBpcy5odG1sI3RoZS1lcnJvcmV2ZW50LWludGVyZmFjZVxuY2xhc3MgRXJyb3JFdmVudCBleHRlbmRzIEV2ZW50IHtcbiAgI2V2ZW50SW5pdFxuXG4gIGNvbnN0cnVjdG9yICh0eXBlLCBldmVudEluaXREaWN0KSB7XG4gICAgY29uc3QgcHJlZml4ID0gJ0Vycm9yRXZlbnQgY29uc3RydWN0b3InXG4gICAgd2ViaWRsLmFyZ3VtZW50TGVuZ3RoQ2hlY2soYXJndW1lbnRzLCAxLCBwcmVmaXgpXG5cbiAgICBzdXBlcih0eXBlLCBldmVudEluaXREaWN0KVxuICAgIHdlYmlkbC51dGlsLm1hcmtBc1VuY2xvbmVhYmxlKHRoaXMpXG5cbiAgICB0eXBlID0gd2ViaWRsLmNvbnZlcnRlcnMuRE9NU3RyaW5nKHR5cGUsIHByZWZpeCwgJ3R5cGUnKVxuICAgIGV2ZW50SW5pdERpY3QgPSB3ZWJpZGwuY29udmVydGVycy5FcnJvckV2ZW50SW5pdChldmVudEluaXREaWN0ID8/IHt9KVxuXG4gICAgdGhpcy4jZXZlbnRJbml0ID0gZXZlbnRJbml0RGljdFxuICB9XG5cbiAgZ2V0IG1lc3NhZ2UgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEVycm9yRXZlbnQpXG5cbiAgICByZXR1cm4gdGhpcy4jZXZlbnRJbml0Lm1lc3NhZ2VcbiAgfVxuXG4gIGdldCBmaWxlbmFtZSAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRXJyb3JFdmVudClcblxuICAgIHJldHVybiB0aGlzLiNldmVudEluaXQuZmlsZW5hbWVcbiAgfVxuXG4gIGdldCBsaW5lbm8gKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEVycm9yRXZlbnQpXG5cbiAgICByZXR1cm4gdGhpcy4jZXZlbnRJbml0LmxpbmVub1xuICB9XG5cbiAgZ2V0IGNvbG5vICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBFcnJvckV2ZW50KVxuXG4gICAgcmV0dXJuIHRoaXMuI2V2ZW50SW5pdC5jb2xub1xuICB9XG5cbiAgZ2V0IGVycm9yICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBFcnJvckV2ZW50KVxuXG4gICAgcmV0dXJuIHRoaXMuI2V2ZW50SW5pdC5lcnJvclxuICB9XG59XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKE1lc3NhZ2VFdmVudC5wcm90b3R5cGUsIHtcbiAgW1N5bWJvbC50b1N0cmluZ1RhZ106IHtcbiAgICB2YWx1ZTogJ01lc3NhZ2VFdmVudCcsXG4gICAgY29uZmlndXJhYmxlOiB0cnVlXG4gIH0sXG4gIGRhdGE6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIG9yaWdpbjoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgbGFzdEV2ZW50SWQ6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIHNvdXJjZToga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgcG9ydHM6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGluaXRNZXNzYWdlRXZlbnQ6IGtFbnVtZXJhYmxlUHJvcGVydHlcbn0pXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKENsb3NlRXZlbnQucHJvdG90eXBlLCB7XG4gIFtTeW1ib2wudG9TdHJpbmdUYWddOiB7XG4gICAgdmFsdWU6ICdDbG9zZUV2ZW50JyxcbiAgICBjb25maWd1cmFibGU6IHRydWVcbiAgfSxcbiAgcmVhc29uOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBjb2RlOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICB3YXNDbGVhbjoga0VudW1lcmFibGVQcm9wZXJ0eVxufSlcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoRXJyb3JFdmVudC5wcm90b3R5cGUsIHtcbiAgW1N5bWJvbC50b1N0cmluZ1RhZ106IHtcbiAgICB2YWx1ZTogJ0Vycm9yRXZlbnQnLFxuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICB9LFxuICBtZXNzYWdlOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBmaWxlbmFtZToga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgbGluZW5vOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBjb2xubzoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgZXJyb3I6IGtFbnVtZXJhYmxlUHJvcGVydHlcbn0pXG5cbndlYmlkbC5jb252ZXJ0ZXJzLk1lc3NhZ2VQb3J0ID0gd2ViaWRsLmludGVyZmFjZUNvbnZlcnRlcihNZXNzYWdlUG9ydClcblxud2ViaWRsLmNvbnZlcnRlcnNbJ3NlcXVlbmNlPE1lc3NhZ2VQb3J0PiddID0gd2ViaWRsLnNlcXVlbmNlQ29udmVydGVyKFxuICB3ZWJpZGwuY29udmVydGVycy5NZXNzYWdlUG9ydFxuKVxuXG5jb25zdCBldmVudEluaXQgPSBbXG4gIHtcbiAgICBrZXk6ICdidWJibGVzJyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzLmJvb2xlYW4sXG4gICAgZGVmYXVsdFZhbHVlOiAoKSA9PiBmYWxzZVxuICB9LFxuICB7XG4gICAga2V5OiAnY2FuY2VsYWJsZScsXG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVycy5ib29sZWFuLFxuICAgIGRlZmF1bHRWYWx1ZTogKCkgPT4gZmFsc2VcbiAgfSxcbiAge1xuICAgIGtleTogJ2NvbXBvc2VkJyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzLmJvb2xlYW4sXG4gICAgZGVmYXVsdFZhbHVlOiAoKSA9PiBmYWxzZVxuICB9XG5dXG5cbndlYmlkbC5jb252ZXJ0ZXJzLk1lc3NhZ2VFdmVudEluaXQgPSB3ZWJpZGwuZGljdGlvbmFyeUNvbnZlcnRlcihbXG4gIC4uLmV2ZW50SW5pdCxcbiAge1xuICAgIGtleTogJ2RhdGEnLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnMuYW55LFxuICAgIGRlZmF1bHRWYWx1ZTogKCkgPT4gbnVsbFxuICB9LFxuICB7XG4gICAga2V5OiAnb3JpZ2luJyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzLlVTVlN0cmluZyxcbiAgICBkZWZhdWx0VmFsdWU6ICgpID0+ICcnXG4gIH0sXG4gIHtcbiAgICBrZXk6ICdsYXN0RXZlbnRJZCcsXG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVycy5ET01TdHJpbmcsXG4gICAgZGVmYXVsdFZhbHVlOiAoKSA9PiAnJ1xuICB9LFxuICB7XG4gICAga2V5OiAnc291cmNlJyxcbiAgICAvLyBOb2RlIGRvZXNuJ3QgaW1wbGVtZW50IFdpbmRvd1Byb3h5IG9yIFNlcnZpY2VXb3JrZXIsIHNvIHRoZSBvbmx5XG4gICAgLy8gdmFsaWQgdmFsdWUgZm9yIHNvdXJjZSBpcyBhIE1lc3NhZ2VQb3J0LlxuICAgIGNvbnZlcnRlcjogd2ViaWRsLm51bGxhYmxlQ29udmVydGVyKHdlYmlkbC5jb252ZXJ0ZXJzLk1lc3NhZ2VQb3J0KSxcbiAgICBkZWZhdWx0VmFsdWU6ICgpID0+IG51bGxcbiAgfSxcbiAge1xuICAgIGtleTogJ3BvcnRzJyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzWydzZXF1ZW5jZTxNZXNzYWdlUG9ydD4nXSxcbiAgICBkZWZhdWx0VmFsdWU6ICgpID0+IG5ldyBBcnJheSgwKVxuICB9XG5dKVxuXG53ZWJpZGwuY29udmVydGVycy5DbG9zZUV2ZW50SW5pdCA9IHdlYmlkbC5kaWN0aW9uYXJ5Q29udmVydGVyKFtcbiAgLi4uZXZlbnRJbml0LFxuICB7XG4gICAga2V5OiAnd2FzQ2xlYW4nLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnMuYm9vbGVhbixcbiAgICBkZWZhdWx0VmFsdWU6ICgpID0+IGZhbHNlXG4gIH0sXG4gIHtcbiAgICBrZXk6ICdjb2RlJyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzWyd1bnNpZ25lZCBzaG9ydCddLFxuICAgIGRlZmF1bHRWYWx1ZTogKCkgPT4gMFxuICB9LFxuICB7XG4gICAga2V5OiAncmVhc29uJyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzLlVTVlN0cmluZyxcbiAgICBkZWZhdWx0VmFsdWU6ICgpID0+ICcnXG4gIH1cbl0pXG5cbndlYmlkbC5jb252ZXJ0ZXJzLkVycm9yRXZlbnRJbml0ID0gd2ViaWRsLmRpY3Rpb25hcnlDb252ZXJ0ZXIoW1xuICAuLi5ldmVudEluaXQsXG4gIHtcbiAgICBrZXk6ICdtZXNzYWdlJyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzLkRPTVN0cmluZyxcbiAgICBkZWZhdWx0VmFsdWU6ICgpID0+ICcnXG4gIH0sXG4gIHtcbiAgICBrZXk6ICdmaWxlbmFtZScsXG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVycy5VU1ZTdHJpbmcsXG4gICAgZGVmYXVsdFZhbHVlOiAoKSA9PiAnJ1xuICB9LFxuICB7XG4gICAga2V5OiAnbGluZW5vJyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzWyd1bnNpZ25lZCBsb25nJ10sXG4gICAgZGVmYXVsdFZhbHVlOiAoKSA9PiAwXG4gIH0sXG4gIHtcbiAgICBrZXk6ICdjb2xubycsXG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVyc1sndW5zaWduZWQgbG9uZyddLFxuICAgIGRlZmF1bHRWYWx1ZTogKCkgPT4gMFxuICB9LFxuICB7XG4gICAga2V5OiAnZXJyb3InLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnMuYW55XG4gIH1cbl0pXG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBNZXNzYWdlRXZlbnQsXG4gIENsb3NlRXZlbnQsXG4gIEVycm9yRXZlbnQsXG4gIGNyZWF0ZUZhc3RNZXNzYWdlRXZlbnRcbn1cbiIsICIndXNlIHN0cmljdCdcblxuLy8gVGhpcyBpcyBhIEdsb2JhbGx5IFVuaXF1ZSBJZGVudGlmaWVyIHVuaXF1ZSB1c2VkXG4vLyB0byB2YWxpZGF0ZSB0aGF0IHRoZSBlbmRwb2ludCBhY2NlcHRzIHdlYnNvY2tldFxuLy8gY29ubmVjdGlvbnMuXG4vLyBTZWUgaHR0cHM6Ly93d3cucmZjLWVkaXRvci5vcmcvcmZjL3JmYzY0NTUuaHRtbCNzZWN0aW9uLTEuM1xuY29uc3QgdWlkID0gJzI1OEVBRkE1LUU5MTQtNDdEQS05NUNBLUM1QUIwREM4NUIxMSdcblxuLyoqIEB0eXBlIHtQcm9wZXJ0eURlc2NyaXB0b3J9ICovXG5jb25zdCBzdGF0aWNQcm9wZXJ0eURlc2NyaXB0b3JzID0ge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICB3cml0YWJsZTogZmFsc2UsXG4gIGNvbmZpZ3VyYWJsZTogZmFsc2Vcbn1cblxuY29uc3Qgc3RhdGVzID0ge1xuICBDT05ORUNUSU5HOiAwLFxuICBPUEVOOiAxLFxuICBDTE9TSU5HOiAyLFxuICBDTE9TRUQ6IDNcbn1cblxuY29uc3Qgc2VudENsb3NlRnJhbWVTdGF0ZSA9IHtcbiAgTk9UX1NFTlQ6IDAsXG4gIFBST0NFU1NJTkc6IDEsXG4gIFNFTlQ6IDJcbn1cblxuY29uc3Qgb3Bjb2RlcyA9IHtcbiAgQ09OVElOVUFUSU9OOiAweDAsXG4gIFRFWFQ6IDB4MSxcbiAgQklOQVJZOiAweDIsXG4gIENMT1NFOiAweDgsXG4gIFBJTkc6IDB4OSxcbiAgUE9ORzogMHhBXG59XG5cbmNvbnN0IG1heFVuc2lnbmVkMTZCaXQgPSAyICoqIDE2IC0gMSAvLyA2NTUzNVxuXG5jb25zdCBwYXJzZXJTdGF0ZXMgPSB7XG4gIElORk86IDAsXG4gIFBBWUxPQURMRU5HVEhfMTY6IDIsXG4gIFBBWUxPQURMRU5HVEhfNjQ6IDMsXG4gIFJFQURfREFUQTogNFxufVxuXG5jb25zdCBlbXB0eUJ1ZmZlciA9IEJ1ZmZlci5hbGxvY1Vuc2FmZSgwKVxuXG5jb25zdCBzZW5kSGludHMgPSB7XG4gIHN0cmluZzogMSxcbiAgdHlwZWRBcnJheTogMixcbiAgYXJyYXlCdWZmZXI6IDMsXG4gIGJsb2I6IDRcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIHVpZCxcbiAgc2VudENsb3NlRnJhbWVTdGF0ZSxcbiAgc3RhdGljUHJvcGVydHlEZXNjcmlwdG9ycyxcbiAgc3RhdGVzLFxuICBvcGNvZGVzLFxuICBtYXhVbnNpZ25lZDE2Qml0LFxuICBwYXJzZXJTdGF0ZXMsXG4gIGVtcHR5QnVmZmVyLFxuICBzZW5kSGludHNcbn1cbiIsICIndXNlIHN0cmljdCdcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGtXZWJTb2NrZXRVUkw6IFN5bWJvbCgndXJsJyksXG4gIGtSZWFkeVN0YXRlOiBTeW1ib2woJ3JlYWR5IHN0YXRlJyksXG4gIGtDb250cm9sbGVyOiBTeW1ib2woJ2NvbnRyb2xsZXInKSxcbiAga1Jlc3BvbnNlOiBTeW1ib2woJ3Jlc3BvbnNlJyksXG4gIGtCaW5hcnlUeXBlOiBTeW1ib2woJ2JpbmFyeSB0eXBlJyksXG4gIGtTZW50Q2xvc2U6IFN5bWJvbCgnc2VudCBjbG9zZScpLFxuICBrUmVjZWl2ZWRDbG9zZTogU3ltYm9sKCdyZWNlaXZlZCBjbG9zZScpLFxuICBrQnl0ZVBhcnNlcjogU3ltYm9sKCdieXRlIHBhcnNlcicpXG59XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHsga1JlYWR5U3RhdGUsIGtDb250cm9sbGVyLCBrUmVzcG9uc2UsIGtCaW5hcnlUeXBlLCBrV2ViU29ja2V0VVJMIH0gPSByZXF1aXJlKCcuL3N5bWJvbHMnKVxuY29uc3QgeyBzdGF0ZXMsIG9wY29kZXMgfSA9IHJlcXVpcmUoJy4vY29uc3RhbnRzJylcbmNvbnN0IHsgRXJyb3JFdmVudCwgY3JlYXRlRmFzdE1lc3NhZ2VFdmVudCB9ID0gcmVxdWlyZSgnLi9ldmVudHMnKVxuY29uc3QgeyBpc1V0ZjggfSA9IHJlcXVpcmUoJ25vZGU6YnVmZmVyJylcbmNvbnN0IHsgY29sbGVjdEFTZXF1ZW5jZU9mQ29kZVBvaW50c0Zhc3QsIHJlbW92ZUhUVFBXaGl0ZXNwYWNlIH0gPSByZXF1aXJlKCcuLi9mZXRjaC9kYXRhLXVybCcpXG5cbi8qIGdsb2JhbHMgQmxvYiAqL1xuXG4vKipcbiAqIEBwYXJhbSB7aW1wb3J0KCcuL3dlYnNvY2tldCcpLldlYlNvY2tldH0gd3NcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5mdW5jdGlvbiBpc0Nvbm5lY3RpbmcgKHdzKSB7XG4gIC8vIElmIHRoZSBXZWJTb2NrZXQgY29ubmVjdGlvbiBpcyBub3QgeWV0IGVzdGFibGlzaGVkLCBhbmQgdGhlIGNvbm5lY3Rpb25cbiAgLy8gaXMgbm90IHlldCBjbG9zZWQsIHRoZW4gdGhlIFdlYlNvY2tldCBjb25uZWN0aW9uIGlzIGluIHRoZSBDT05ORUNUSU5HIHN0YXRlLlxuICByZXR1cm4gd3Nba1JlYWR5U3RhdGVdID09PSBzdGF0ZXMuQ09OTkVDVElOR1xufVxuXG4vKipcbiAqIEBwYXJhbSB7aW1wb3J0KCcuL3dlYnNvY2tldCcpLldlYlNvY2tldH0gd3NcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5mdW5jdGlvbiBpc0VzdGFibGlzaGVkICh3cykge1xuICAvLyBJZiB0aGUgc2VydmVyJ3MgcmVzcG9uc2UgaXMgdmFsaWRhdGVkIGFzIHByb3ZpZGVkIGZvciBhYm92ZSwgaXQgaXNcbiAgLy8gc2FpZCB0aGF0IF9UaGUgV2ViU29ja2V0IENvbm5lY3Rpb24gaXMgRXN0YWJsaXNoZWRfIGFuZCB0aGF0IHRoZVxuICAvLyBXZWJTb2NrZXQgQ29ubmVjdGlvbiBpcyBpbiB0aGUgT1BFTiBzdGF0ZS5cbiAgcmV0dXJuIHdzW2tSZWFkeVN0YXRlXSA9PT0gc3RhdGVzLk9QRU5cbn1cblxuLyoqXG4gKiBAcGFyYW0ge2ltcG9ydCgnLi93ZWJzb2NrZXQnKS5XZWJTb2NrZXR9IHdzXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuZnVuY3Rpb24gaXNDbG9zaW5nICh3cykge1xuICAvLyBVcG9uIGVpdGhlciBzZW5kaW5nIG9yIHJlY2VpdmluZyBhIENsb3NlIGNvbnRyb2wgZnJhbWUsIGl0IGlzIHNhaWRcbiAgLy8gdGhhdCBfVGhlIFdlYlNvY2tldCBDbG9zaW5nIEhhbmRzaGFrZSBpcyBTdGFydGVkXyBhbmQgdGhhdCB0aGVcbiAgLy8gV2ViU29ja2V0IGNvbm5lY3Rpb24gaXMgaW4gdGhlIENMT1NJTkcgc3RhdGUuXG4gIHJldHVybiB3c1trUmVhZHlTdGF0ZV0gPT09IHN0YXRlcy5DTE9TSU5HXG59XG5cbi8qKlxuICogQHBhcmFtIHtpbXBvcnQoJy4vd2Vic29ja2V0JykuV2ViU29ja2V0fSB3c1xuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIGlzQ2xvc2VkICh3cykge1xuICByZXR1cm4gd3Nba1JlYWR5U3RhdGVdID09PSBzdGF0ZXMuQ0xPU0VEXG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL2RvbS5zcGVjLndoYXR3Zy5vcmcvI2NvbmNlcHQtZXZlbnQtZmlyZVxuICogQHBhcmFtIHtzdHJpbmd9IGVcbiAqIEBwYXJhbSB7RXZlbnRUYXJnZXR9IHRhcmdldFxuICogQHBhcmFtIHsoLi4uYXJnczogQ29uc3RydWN0b3JQYXJhbWV0ZXJzPHR5cGVvZiBFdmVudD4pID0+IEV2ZW50fSBldmVudEZhY3RvcnlcbiAqIEBwYXJhbSB7RXZlbnRJbml0IHwgdW5kZWZpbmVkfSBldmVudEluaXREaWN0XG4gKi9cbmZ1bmN0aW9uIGZpcmVFdmVudCAoZSwgdGFyZ2V0LCBldmVudEZhY3RvcnkgPSAodHlwZSwgaW5pdCkgPT4gbmV3IEV2ZW50KHR5cGUsIGluaXQpLCBldmVudEluaXREaWN0ID0ge30pIHtcbiAgLy8gMS4gSWYgZXZlbnRDb25zdHJ1Y3RvciBpcyBub3QgZ2l2ZW4sIHRoZW4gbGV0IGV2ZW50Q29uc3RydWN0b3IgYmUgRXZlbnQuXG5cbiAgLy8gMi4gTGV0IGV2ZW50IGJlIHRoZSByZXN1bHQgb2YgY3JlYXRpbmcgYW4gZXZlbnQgZ2l2ZW4gZXZlbnRDb25zdHJ1Y3RvcixcbiAgLy8gICAgaW4gdGhlIHJlbGV2YW50IHJlYWxtIG9mIHRhcmdldC5cbiAgLy8gMy4gSW5pdGlhbGl6ZSBldmVudFx1MjAxOXMgdHlwZSBhdHRyaWJ1dGUgdG8gZS5cbiAgY29uc3QgZXZlbnQgPSBldmVudEZhY3RvcnkoZSwgZXZlbnRJbml0RGljdClcblxuICAvLyA0LiBJbml0aWFsaXplIGFueSBvdGhlciBJREwgYXR0cmlidXRlcyBvZiBldmVudCBhcyBkZXNjcmliZWQgaW4gdGhlXG4gIC8vICAgIGludm9jYXRpb24gb2YgdGhpcyBhbGdvcml0aG0uXG5cbiAgLy8gNS4gUmV0dXJuIHRoZSByZXN1bHQgb2YgZGlzcGF0Y2hpbmcgZXZlbnQgYXQgdGFyZ2V0LCB3aXRoIGxlZ2FjeSB0YXJnZXRcbiAgLy8gICAgb3ZlcnJpZGUgZmxhZyBzZXQgaWYgc2V0LlxuICB0YXJnZXQuZGlzcGF0Y2hFdmVudChldmVudClcbn1cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vd2Vic29ja2V0cy5zcGVjLndoYXR3Zy5vcmcvI2ZlZWRiYWNrLWZyb20tdGhlLXByb3RvY29sXG4gKiBAcGFyYW0ge2ltcG9ydCgnLi93ZWJzb2NrZXQnKS5XZWJTb2NrZXR9IHdzXG4gKiBAcGFyYW0ge251bWJlcn0gdHlwZSBPcGNvZGVcbiAqIEBwYXJhbSB7QnVmZmVyfSBkYXRhIGFwcGxpY2F0aW9uIGRhdGFcbiAqL1xuZnVuY3Rpb24gd2Vic29ja2V0TWVzc2FnZVJlY2VpdmVkICh3cywgdHlwZSwgZGF0YSkge1xuICAvLyAxLiBJZiByZWFkeSBzdGF0ZSBpcyBub3QgT1BFTiAoMSksIHRoZW4gcmV0dXJuLlxuICBpZiAod3Nba1JlYWR5U3RhdGVdICE9PSBzdGF0ZXMuT1BFTikge1xuICAgIHJldHVyblxuICB9XG5cbiAgLy8gMi4gTGV0IGRhdGFGb3JFdmVudCBiZSBkZXRlcm1pbmVkIGJ5IHN3aXRjaGluZyBvbiB0eXBlIGFuZCBiaW5hcnkgdHlwZTpcbiAgbGV0IGRhdGFGb3JFdmVudFxuXG4gIGlmICh0eXBlID09PSBvcGNvZGVzLlRFWFQpIHtcbiAgICAvLyAtPiB0eXBlIGluZGljYXRlcyB0aGF0IHRoZSBkYXRhIGlzIFRleHRcbiAgICAvLyAgICAgIGEgbmV3IERPTVN0cmluZyBjb250YWluaW5nIGRhdGFcbiAgICB0cnkge1xuICAgICAgZGF0YUZvckV2ZW50ID0gdXRmOERlY29kZShkYXRhKVxuICAgIH0gY2F0Y2gge1xuICAgICAgZmFpbFdlYnNvY2tldENvbm5lY3Rpb24od3MsICdSZWNlaXZlZCBpbnZhbGlkIFVURi04IGluIHRleHQgZnJhbWUuJylcbiAgICAgIHJldHVyblxuICAgIH1cbiAgfSBlbHNlIGlmICh0eXBlID09PSBvcGNvZGVzLkJJTkFSWSkge1xuICAgIGlmICh3c1trQmluYXJ5VHlwZV0gPT09ICdibG9iJykge1xuICAgICAgLy8gLT4gdHlwZSBpbmRpY2F0ZXMgdGhhdCB0aGUgZGF0YSBpcyBCaW5hcnkgYW5kIGJpbmFyeSB0eXBlIGlzIFwiYmxvYlwiXG4gICAgICAvLyAgICAgIGEgbmV3IEJsb2Igb2JqZWN0LCBjcmVhdGVkIGluIHRoZSByZWxldmFudCBSZWFsbSBvZiB0aGUgV2ViU29ja2V0XG4gICAgICAvLyAgICAgIG9iamVjdCwgdGhhdCByZXByZXNlbnRzIGRhdGEgYXMgaXRzIHJhdyBkYXRhXG4gICAgICBkYXRhRm9yRXZlbnQgPSBuZXcgQmxvYihbZGF0YV0pXG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIC0+IHR5cGUgaW5kaWNhdGVzIHRoYXQgdGhlIGRhdGEgaXMgQmluYXJ5IGFuZCBiaW5hcnkgdHlwZSBpcyBcImFycmF5YnVmZmVyXCJcbiAgICAgIC8vICAgICAgYSBuZXcgQXJyYXlCdWZmZXIgb2JqZWN0LCBjcmVhdGVkIGluIHRoZSByZWxldmFudCBSZWFsbSBvZiB0aGVcbiAgICAgIC8vICAgICAgV2ViU29ja2V0IG9iamVjdCwgd2hvc2UgY29udGVudHMgYXJlIGRhdGFcbiAgICAgIGRhdGFGb3JFdmVudCA9IHRvQXJyYXlCdWZmZXIoZGF0YSlcbiAgICB9XG4gIH1cblxuICAvLyAzLiBGaXJlIGFuIGV2ZW50IG5hbWVkIG1lc3NhZ2UgYXQgdGhlIFdlYlNvY2tldCBvYmplY3QsIHVzaW5nIE1lc3NhZ2VFdmVudCxcbiAgLy8gICAgd2l0aCB0aGUgb3JpZ2luIGF0dHJpYnV0ZSBpbml0aWFsaXplZCB0byB0aGUgc2VyaWFsaXphdGlvbiBvZiB0aGUgV2ViU29ja2V0XG4gIC8vICAgIG9iamVjdFx1MjAxOXMgdXJsJ3Mgb3JpZ2luLCBhbmQgdGhlIGRhdGEgYXR0cmlidXRlIGluaXRpYWxpemVkIHRvIGRhdGFGb3JFdmVudC5cbiAgZmlyZUV2ZW50KCdtZXNzYWdlJywgd3MsIGNyZWF0ZUZhc3RNZXNzYWdlRXZlbnQsIHtcbiAgICBvcmlnaW46IHdzW2tXZWJTb2NrZXRVUkxdLm9yaWdpbixcbiAgICBkYXRhOiBkYXRhRm9yRXZlbnRcbiAgfSlcbn1cblxuZnVuY3Rpb24gdG9BcnJheUJ1ZmZlciAoYnVmZmVyKSB7XG4gIGlmIChidWZmZXIuYnl0ZUxlbmd0aCA9PT0gYnVmZmVyLmJ1ZmZlci5ieXRlTGVuZ3RoKSB7XG4gICAgcmV0dXJuIGJ1ZmZlci5idWZmZXJcbiAgfVxuICByZXR1cm4gYnVmZmVyLmJ1ZmZlci5zbGljZShidWZmZXIuYnl0ZU9mZnNldCwgYnVmZmVyLmJ5dGVPZmZzZXQgKyBidWZmZXIuYnl0ZUxlbmd0aClcbn1cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vZGF0YXRyYWNrZXIuaWV0Zi5vcmcvZG9jL2h0bWwvcmZjNjQ1NVxuICogQHNlZSBodHRwczovL2RhdGF0cmFja2VyLmlldGYub3JnL2RvYy9odG1sL3JmYzI2MTZcbiAqIEBzZWUgaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL2Nocm9taXVtL2lzc3Vlcy9kZXRhaWw/aWQ9Mzk4NDA3XG4gKiBAcGFyYW0ge3N0cmluZ30gcHJvdG9jb2xcbiAqL1xuZnVuY3Rpb24gaXNWYWxpZFN1YnByb3RvY29sIChwcm90b2NvbCkge1xuICAvLyBJZiBwcmVzZW50LCB0aGlzIHZhbHVlIGluZGljYXRlcyBvbmVcbiAgLy8gb3IgbW9yZSBjb21tYS1zZXBhcmF0ZWQgc3VicHJvdG9jb2wgdGhlIGNsaWVudCB3aXNoZXMgdG8gc3BlYWssXG4gIC8vIG9yZGVyZWQgYnkgcHJlZmVyZW5jZS4gIFRoZSBlbGVtZW50cyB0aGF0IGNvbXByaXNlIHRoaXMgdmFsdWVcbiAgLy8gTVVTVCBiZSBub24tZW1wdHkgc3RyaW5ncyB3aXRoIGNoYXJhY3RlcnMgaW4gdGhlIHJhbmdlIFUrMDAyMSB0b1xuICAvLyBVKzAwN0Ugbm90IGluY2x1ZGluZyBzZXBhcmF0b3IgY2hhcmFjdGVycyBhcyBkZWZpbmVkIGluXG4gIC8vIFtSRkMyNjE2XSBhbmQgTVVTVCBhbGwgYmUgdW5pcXVlIHN0cmluZ3MuXG4gIGlmIChwcm90b2NvbC5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgcHJvdG9jb2wubGVuZ3RoOyArK2kpIHtcbiAgICBjb25zdCBjb2RlID0gcHJvdG9jb2wuY2hhckNvZGVBdChpKVxuXG4gICAgaWYgKFxuICAgICAgY29kZSA8IDB4MjEgfHwgLy8gQ1RMLCBjb250YWlucyBTUCAoMHgyMCkgYW5kIEhUICgweDA5KVxuICAgICAgY29kZSA+IDB4N0UgfHxcbiAgICAgIGNvZGUgPT09IDB4MjIgfHwgLy8gXCJcbiAgICAgIGNvZGUgPT09IDB4MjggfHwgLy8gKFxuICAgICAgY29kZSA9PT0gMHgyOSB8fCAvLyApXG4gICAgICBjb2RlID09PSAweDJDIHx8IC8vICxcbiAgICAgIGNvZGUgPT09IDB4MkYgfHwgLy8gL1xuICAgICAgY29kZSA9PT0gMHgzQSB8fCAvLyA6XG4gICAgICBjb2RlID09PSAweDNCIHx8IC8vIDtcbiAgICAgIGNvZGUgPT09IDB4M0MgfHwgLy8gPFxuICAgICAgY29kZSA9PT0gMHgzRCB8fCAvLyA9XG4gICAgICBjb2RlID09PSAweDNFIHx8IC8vID5cbiAgICAgIGNvZGUgPT09IDB4M0YgfHwgLy8gP1xuICAgICAgY29kZSA9PT0gMHg0MCB8fCAvLyBAXG4gICAgICBjb2RlID09PSAweDVCIHx8IC8vIFtcbiAgICAgIGNvZGUgPT09IDB4NUMgfHwgLy8gXFxcbiAgICAgIGNvZGUgPT09IDB4NUQgfHwgLy8gXVxuICAgICAgY29kZSA9PT0gMHg3QiB8fCAvLyB7XG4gICAgICBjb2RlID09PSAweDdEIC8vIH1cbiAgICApIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0cnVlXG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL2RhdGF0cmFja2VyLmlldGYub3JnL2RvYy9odG1sL3JmYzY0NTUjc2VjdGlvbi03LTRcbiAqIEBwYXJhbSB7bnVtYmVyfSBjb2RlXG4gKi9cbmZ1bmN0aW9uIGlzVmFsaWRTdGF0dXNDb2RlIChjb2RlKSB7XG4gIGlmIChjb2RlID49IDEwMDAgJiYgY29kZSA8IDEwMTUpIHtcbiAgICByZXR1cm4gKFxuICAgICAgY29kZSAhPT0gMTAwNCAmJiAvLyByZXNlcnZlZFxuICAgICAgY29kZSAhPT0gMTAwNSAmJiAvLyBcIk1VU1QgTk9UIGJlIHNldCBhcyBhIHN0YXR1cyBjb2RlXCJcbiAgICAgIGNvZGUgIT09IDEwMDYgLy8gXCJNVVNUIE5PVCBiZSBzZXQgYXMgYSBzdGF0dXMgY29kZVwiXG4gICAgKVxuICB9XG5cbiAgcmV0dXJuIGNvZGUgPj0gMzAwMCAmJiBjb2RlIDw9IDQ5OTlcbn1cblxuLyoqXG4gKiBAcGFyYW0ge2ltcG9ydCgnLi93ZWJzb2NrZXQnKS5XZWJTb2NrZXR9IHdzXG4gKiBAcGFyYW0ge3N0cmluZ3x1bmRlZmluZWR9IHJlYXNvblxuICovXG5mdW5jdGlvbiBmYWlsV2Vic29ja2V0Q29ubmVjdGlvbiAod3MsIHJlYXNvbikge1xuICBjb25zdCB7IFtrQ29udHJvbGxlcl06IGNvbnRyb2xsZXIsIFtrUmVzcG9uc2VdOiByZXNwb25zZSB9ID0gd3NcblxuICBjb250cm9sbGVyLmFib3J0KClcblxuICBpZiAocmVzcG9uc2U/LnNvY2tldCAmJiAhcmVzcG9uc2Uuc29ja2V0LmRlc3Ryb3llZCkge1xuICAgIHJlc3BvbnNlLnNvY2tldC5kZXN0cm95KClcbiAgfVxuXG4gIGlmIChyZWFzb24pIHtcbiAgICAvLyBUT0RPOiBwcm9jZXNzLm5leHRUaWNrXG4gICAgZmlyZUV2ZW50KCdlcnJvcicsIHdzLCAodHlwZSwgaW5pdCkgPT4gbmV3IEVycm9yRXZlbnQodHlwZSwgaW5pdCksIHtcbiAgICAgIGVycm9yOiBuZXcgRXJyb3IocmVhc29uKSxcbiAgICAgIG1lc3NhZ2U6IHJlYXNvblxuICAgIH0pXG4gIH1cbn1cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vZGF0YXRyYWNrZXIuaWV0Zi5vcmcvZG9jL2h0bWwvcmZjNjQ1NSNzZWN0aW9uLTUuNVxuICogQHBhcmFtIHtudW1iZXJ9IG9wY29kZVxuICovXG5mdW5jdGlvbiBpc0NvbnRyb2xGcmFtZSAob3Bjb2RlKSB7XG4gIHJldHVybiAoXG4gICAgb3Bjb2RlID09PSBvcGNvZGVzLkNMT1NFIHx8XG4gICAgb3Bjb2RlID09PSBvcGNvZGVzLlBJTkcgfHxcbiAgICBvcGNvZGUgPT09IG9wY29kZXMuUE9OR1xuICApXG59XG5cbmZ1bmN0aW9uIGlzQ29udGludWF0aW9uRnJhbWUgKG9wY29kZSkge1xuICByZXR1cm4gb3Bjb2RlID09PSBvcGNvZGVzLkNPTlRJTlVBVElPTlxufVxuXG5mdW5jdGlvbiBpc1RleHRCaW5hcnlGcmFtZSAob3Bjb2RlKSB7XG4gIHJldHVybiBvcGNvZGUgPT09IG9wY29kZXMuVEVYVCB8fCBvcGNvZGUgPT09IG9wY29kZXMuQklOQVJZXG59XG5cbmZ1bmN0aW9uIGlzVmFsaWRPcGNvZGUgKG9wY29kZSkge1xuICByZXR1cm4gaXNUZXh0QmluYXJ5RnJhbWUob3Bjb2RlKSB8fCBpc0NvbnRpbnVhdGlvbkZyYW1lKG9wY29kZSkgfHwgaXNDb250cm9sRnJhbWUob3Bjb2RlKVxufVxuXG4vKipcbiAqIFBhcnNlcyBhIFNlYy1XZWJTb2NrZXQtRXh0ZW5zaW9ucyBoZWFkZXIgdmFsdWUuXG4gKiBAcGFyYW0ge3N0cmluZ30gZXh0ZW5zaW9uc1xuICogQHJldHVybnMge01hcDxzdHJpbmcsIHN0cmluZz59XG4gKi9cbi8vIFRPRE8oQFV6bG9wYWssIEBLaGFmcmFEZXYpOiBtYWtlIGNvbXBsaWFudCBodHRwczovL2RhdGF0cmFja2VyLmlldGYub3JnL2RvYy9odG1sL3JmYzY0NTUjc2VjdGlvbi05LjFcbmZ1bmN0aW9uIHBhcnNlRXh0ZW5zaW9ucyAoZXh0ZW5zaW9ucykge1xuICBjb25zdCBwb3NpdGlvbiA9IHsgcG9zaXRpb246IDAgfVxuICBjb25zdCBleHRlbnNpb25MaXN0ID0gbmV3IE1hcCgpXG5cbiAgd2hpbGUgKHBvc2l0aW9uLnBvc2l0aW9uIDwgZXh0ZW5zaW9ucy5sZW5ndGgpIHtcbiAgICBjb25zdCBwYWlyID0gY29sbGVjdEFTZXF1ZW5jZU9mQ29kZVBvaW50c0Zhc3QoJzsnLCBleHRlbnNpb25zLCBwb3NpdGlvbilcbiAgICBjb25zdCBbbmFtZSwgdmFsdWUgPSAnJ10gPSBwYWlyLnNwbGl0KCc9JylcblxuICAgIGV4dGVuc2lvbkxpc3Quc2V0KFxuICAgICAgcmVtb3ZlSFRUUFdoaXRlc3BhY2UobmFtZSwgdHJ1ZSwgZmFsc2UpLFxuICAgICAgcmVtb3ZlSFRUUFdoaXRlc3BhY2UodmFsdWUsIGZhbHNlLCB0cnVlKVxuICAgIClcblxuICAgIHBvc2l0aW9uLnBvc2l0aW9uKytcbiAgfVxuXG4gIHJldHVybiBleHRlbnNpb25MaXN0XG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL3d3dy5yZmMtZWRpdG9yLm9yZy9yZmMvcmZjNzY5MiNzZWN0aW9uLTcuMS4yLjJcbiAqIEBkZXNjcmlwdGlvbiBcImNsaWVudC1tYXgtd2luZG93LWJpdHMgPSAxKkRJR0lUXCJcbiAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICovXG5mdW5jdGlvbiBpc1ZhbGlkQ2xpZW50V2luZG93Qml0cyAodmFsdWUpIHtcbiAgZm9yIChsZXQgaSA9IDA7IGkgPCB2YWx1ZS5sZW5ndGg7IGkrKykge1xuICAgIGNvbnN0IGJ5dGUgPSB2YWx1ZS5jaGFyQ29kZUF0KGkpXG5cbiAgICBpZiAoYnl0ZSA8IDB4MzAgfHwgYnl0ZSA+IDB4MzkpIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0cnVlXG59XG5cbi8vIGh0dHBzOi8vbm9kZWpzLm9yZy9hcGkvaW50bC5odG1sI2RldGVjdGluZy1pbnRlcm5hdGlvbmFsaXphdGlvbi1zdXBwb3J0XG5jb25zdCBoYXNJbnRsID0gdHlwZW9mIHByb2Nlc3MudmVyc2lvbnMuaWN1ID09PSAnc3RyaW5nJ1xuY29uc3QgZmF0YWxEZWNvZGVyID0gaGFzSW50bCA/IG5ldyBUZXh0RGVjb2RlcigndXRmLTgnLCB7IGZhdGFsOiB0cnVlIH0pIDogdW5kZWZpbmVkXG5cbi8qKlxuICogQ29udmVydHMgYSBCdWZmZXIgdG8gdXRmLTgsIGV2ZW4gb24gcGxhdGZvcm1zIHdpdGhvdXQgaWN1LlxuICogQHBhcmFtIHtCdWZmZXJ9IGJ1ZmZlclxuICovXG5jb25zdCB1dGY4RGVjb2RlID0gaGFzSW50bFxuICA/IGZhdGFsRGVjb2Rlci5kZWNvZGUuYmluZChmYXRhbERlY29kZXIpXG4gIDogZnVuY3Rpb24gKGJ1ZmZlcikge1xuICAgIGlmIChpc1V0ZjgoYnVmZmVyKSkge1xuICAgICAgcmV0dXJuIGJ1ZmZlci50b1N0cmluZygndXRmLTgnKVxuICAgIH1cbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdJbnZhbGlkIHV0Zi04IHJlY2VpdmVkLicpXG4gIH1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGlzQ29ubmVjdGluZyxcbiAgaXNFc3RhYmxpc2hlZCxcbiAgaXNDbG9zaW5nLFxuICBpc0Nsb3NlZCxcbiAgZmlyZUV2ZW50LFxuICBpc1ZhbGlkU3VicHJvdG9jb2wsXG4gIGlzVmFsaWRTdGF0dXNDb2RlLFxuICBmYWlsV2Vic29ja2V0Q29ubmVjdGlvbixcbiAgd2Vic29ja2V0TWVzc2FnZVJlY2VpdmVkLFxuICB1dGY4RGVjb2RlLFxuICBpc0NvbnRyb2xGcmFtZSxcbiAgaXNDb250aW51YXRpb25GcmFtZSxcbiAgaXNUZXh0QmluYXJ5RnJhbWUsXG4gIGlzVmFsaWRPcGNvZGUsXG4gIHBhcnNlRXh0ZW5zaW9ucyxcbiAgaXNWYWxpZENsaWVudFdpbmRvd0JpdHNcbn1cbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgeyBtYXhVbnNpZ25lZDE2Qml0IH0gPSByZXF1aXJlKCcuL2NvbnN0YW50cycpXG5cbmNvbnN0IEJVRkZFUl9TSVpFID0gMTYzODZcblxuLyoqIEB0eXBlIHtpbXBvcnQoJ2NyeXB0bycpfSAqL1xubGV0IGNyeXB0b1xubGV0IGJ1ZmZlciA9IG51bGxcbmxldCBidWZJZHggPSBCVUZGRVJfU0laRVxuXG50cnkge1xuICBjcnlwdG8gPSByZXF1aXJlKCdub2RlOmNyeXB0bycpXG4vKiBjOCBpZ25vcmUgbmV4dCAzICovXG59IGNhdGNoIHtcbiAgY3J5cHRvID0ge1xuICAgIC8vIG5vdCBmdWxsIGNvbXBhdGliaWxpdHksIGJ1dCBtaW5pbXVtLlxuICAgIHJhbmRvbUZpbGxTeW5jOiBmdW5jdGlvbiByYW5kb21GaWxsU3luYyAoYnVmZmVyLCBfb2Zmc2V0LCBfc2l6ZSkge1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBidWZmZXIubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgYnVmZmVyW2ldID0gTWF0aC5yYW5kb20oKSAqIDI1NSB8IDBcbiAgICAgIH1cbiAgICAgIHJldHVybiBidWZmZXJcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gZ2VuZXJhdGVNYXNrICgpIHtcbiAgaWYgKGJ1ZklkeCA9PT0gQlVGRkVSX1NJWkUpIHtcbiAgICBidWZJZHggPSAwXG4gICAgY3J5cHRvLnJhbmRvbUZpbGxTeW5jKChidWZmZXIgPz89IEJ1ZmZlci5hbGxvY1Vuc2FmZShCVUZGRVJfU0laRSkpLCAwLCBCVUZGRVJfU0laRSlcbiAgfVxuICByZXR1cm4gW2J1ZmZlcltidWZJZHgrK10sIGJ1ZmZlcltidWZJZHgrK10sIGJ1ZmZlcltidWZJZHgrK10sIGJ1ZmZlcltidWZJZHgrK11dXG59XG5cbmNsYXNzIFdlYnNvY2tldEZyYW1lU2VuZCB7XG4gIC8qKlxuICAgKiBAcGFyYW0ge0J1ZmZlcnx1bmRlZmluZWR9IGRhdGFcbiAgICovXG4gIGNvbnN0cnVjdG9yIChkYXRhKSB7XG4gICAgdGhpcy5mcmFtZURhdGEgPSBkYXRhXG4gIH1cblxuICBjcmVhdGVGcmFtZSAob3Bjb2RlKSB7XG4gICAgY29uc3QgZnJhbWVEYXRhID0gdGhpcy5mcmFtZURhdGFcbiAgICBjb25zdCBtYXNrS2V5ID0gZ2VuZXJhdGVNYXNrKClcbiAgICBjb25zdCBib2R5TGVuZ3RoID0gZnJhbWVEYXRhPy5ieXRlTGVuZ3RoID8/IDBcblxuICAgIC8qKiBAdHlwZSB7bnVtYmVyfSAqL1xuICAgIGxldCBwYXlsb2FkTGVuZ3RoID0gYm9keUxlbmd0aCAvLyAwLTEyNVxuICAgIGxldCBvZmZzZXQgPSA2XG5cbiAgICBpZiAoYm9keUxlbmd0aCA+IG1heFVuc2lnbmVkMTZCaXQpIHtcbiAgICAgIG9mZnNldCArPSA4IC8vIHBheWxvYWQgbGVuZ3RoIGlzIG5leHQgOCBieXRlc1xuICAgICAgcGF5bG9hZExlbmd0aCA9IDEyN1xuICAgIH0gZWxzZSBpZiAoYm9keUxlbmd0aCA+IDEyNSkge1xuICAgICAgb2Zmc2V0ICs9IDIgLy8gcGF5bG9hZCBsZW5ndGggaXMgbmV4dCAyIGJ5dGVzXG4gICAgICBwYXlsb2FkTGVuZ3RoID0gMTI2XG4gICAgfVxuXG4gICAgY29uc3QgYnVmZmVyID0gQnVmZmVyLmFsbG9jVW5zYWZlKGJvZHlMZW5ndGggKyBvZmZzZXQpXG5cbiAgICAvLyBDbGVhciBmaXJzdCAyIGJ5dGVzLCBldmVyeXRoaW5nIGVsc2UgaXMgb3ZlcndyaXR0ZW5cbiAgICBidWZmZXJbMF0gPSBidWZmZXJbMV0gPSAwXG4gICAgYnVmZmVyWzBdIHw9IDB4ODAgLy8gRklOXG4gICAgYnVmZmVyWzBdID0gKGJ1ZmZlclswXSAmIDB4RjApICsgb3Bjb2RlIC8vIG9wY29kZVxuXG4gICAgLyohIHdzLiBNSVQgTGljZW5zZS4gRWluYXIgT3R0byBTdGFuZ3ZpayA8ZWluYXJvc0BnbWFpbC5jb20+ICovXG4gICAgYnVmZmVyW29mZnNldCAtIDRdID0gbWFza0tleVswXVxuICAgIGJ1ZmZlcltvZmZzZXQgLSAzXSA9IG1hc2tLZXlbMV1cbiAgICBidWZmZXJbb2Zmc2V0IC0gMl0gPSBtYXNrS2V5WzJdXG4gICAgYnVmZmVyW29mZnNldCAtIDFdID0gbWFza0tleVszXVxuXG4gICAgYnVmZmVyWzFdID0gcGF5bG9hZExlbmd0aFxuXG4gICAgaWYgKHBheWxvYWRMZW5ndGggPT09IDEyNikge1xuICAgICAgYnVmZmVyLndyaXRlVUludDE2QkUoYm9keUxlbmd0aCwgMilcbiAgICB9IGVsc2UgaWYgKHBheWxvYWRMZW5ndGggPT09IDEyNykge1xuICAgICAgLy8gQ2xlYXIgZXh0ZW5kZWQgcGF5bG9hZCBsZW5ndGhcbiAgICAgIGJ1ZmZlclsyXSA9IGJ1ZmZlclszXSA9IDBcbiAgICAgIGJ1ZmZlci53cml0ZVVJbnRCRShib2R5TGVuZ3RoLCA0LCA2KVxuICAgIH1cblxuICAgIGJ1ZmZlclsxXSB8PSAweDgwIC8vIE1BU0tcblxuICAgIC8vIG1hc2sgYm9keVxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYm9keUxlbmd0aDsgKytpKSB7XG4gICAgICBidWZmZXJbb2Zmc2V0ICsgaV0gPSBmcmFtZURhdGFbaV0gXiBtYXNrS2V5W2kgJiAzXVxuICAgIH1cblxuICAgIHJldHVybiBidWZmZXJcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgV2Vic29ja2V0RnJhbWVTZW5kXG59XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHsgdWlkLCBzdGF0ZXMsIHNlbnRDbG9zZUZyYW1lU3RhdGUsIGVtcHR5QnVmZmVyLCBvcGNvZGVzIH0gPSByZXF1aXJlKCcuL2NvbnN0YW50cycpXG5jb25zdCB7XG4gIGtSZWFkeVN0YXRlLFxuICBrU2VudENsb3NlLFxuICBrQnl0ZVBhcnNlcixcbiAga1JlY2VpdmVkQ2xvc2UsXG4gIGtSZXNwb25zZVxufSA9IHJlcXVpcmUoJy4vc3ltYm9scycpXG5jb25zdCB7IGZpcmVFdmVudCwgZmFpbFdlYnNvY2tldENvbm5lY3Rpb24sIGlzQ2xvc2luZywgaXNDbG9zZWQsIGlzRXN0YWJsaXNoZWQsIHBhcnNlRXh0ZW5zaW9ucyB9ID0gcmVxdWlyZSgnLi91dGlsJylcbmNvbnN0IHsgY2hhbm5lbHMgfSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUvZGlhZ25vc3RpY3MnKVxuY29uc3QgeyBDbG9zZUV2ZW50IH0gPSByZXF1aXJlKCcuL2V2ZW50cycpXG5jb25zdCB7IG1ha2VSZXF1ZXN0IH0gPSByZXF1aXJlKCcuLi9mZXRjaC9yZXF1ZXN0JylcbmNvbnN0IHsgZmV0Y2hpbmcgfSA9IHJlcXVpcmUoJy4uL2ZldGNoL2luZGV4JylcbmNvbnN0IHsgSGVhZGVycywgZ2V0SGVhZGVyc0xpc3QgfSA9IHJlcXVpcmUoJy4uL2ZldGNoL2hlYWRlcnMnKVxuY29uc3QgeyBnZXREZWNvZGVTcGxpdCB9ID0gcmVxdWlyZSgnLi4vZmV0Y2gvdXRpbCcpXG5jb25zdCB7IFdlYnNvY2tldEZyYW1lU2VuZCB9ID0gcmVxdWlyZSgnLi9mcmFtZScpXG5cbi8qKiBAdHlwZSB7aW1wb3J0KCdjcnlwdG8nKX0gKi9cbmxldCBjcnlwdG9cbnRyeSB7XG4gIGNyeXB0byA9IHJlcXVpcmUoJ25vZGU6Y3J5cHRvJylcbi8qIGM4IGlnbm9yZSBuZXh0IDMgKi9cbn0gY2F0Y2gge1xuXG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL3dlYnNvY2tldHMuc3BlYy53aGF0d2cub3JnLyNjb25jZXB0LXdlYnNvY2tldC1lc3RhYmxpc2hcbiAqIEBwYXJhbSB7VVJMfSB1cmxcbiAqIEBwYXJhbSB7c3RyaW5nfHN0cmluZ1tdfSBwcm90b2NvbHNcbiAqIEBwYXJhbSB7aW1wb3J0KCcuL3dlYnNvY2tldCcpLldlYlNvY2tldH0gd3NcbiAqIEBwYXJhbSB7KHJlc3BvbnNlOiBhbnksIGV4dGVuc2lvbnM6IHN0cmluZ1tdIHwgdW5kZWZpbmVkKSA9PiB2b2lkfSBvbkVzdGFibGlzaFxuICogQHBhcmFtIHtQYXJ0aWFsPGltcG9ydCgnLi4vLi4vdHlwZXMvd2Vic29ja2V0JykuV2ViU29ja2V0SW5pdD59IG9wdGlvbnNcbiAqL1xuZnVuY3Rpb24gZXN0YWJsaXNoV2ViU29ja2V0Q29ubmVjdGlvbiAodXJsLCBwcm90b2NvbHMsIGNsaWVudCwgd3MsIG9uRXN0YWJsaXNoLCBvcHRpb25zKSB7XG4gIC8vIDEuIExldCByZXF1ZXN0VVJMIGJlIGEgY29weSBvZiB1cmwsIHdpdGggaXRzIHNjaGVtZSBzZXQgdG8gXCJodHRwXCIsIGlmIHVybFx1MjAxOXNcbiAgLy8gICAgc2NoZW1lIGlzIFwid3NcIiwgYW5kIHRvIFwiaHR0cHNcIiBvdGhlcndpc2UuXG4gIGNvbnN0IHJlcXVlc3RVUkwgPSB1cmxcblxuICByZXF1ZXN0VVJMLnByb3RvY29sID0gdXJsLnByb3RvY29sID09PSAnd3M6JyA/ICdodHRwOicgOiAnaHR0cHM6J1xuXG4gIC8vIDIuIExldCByZXF1ZXN0IGJlIGEgbmV3IHJlcXVlc3QsIHdob3NlIFVSTCBpcyByZXF1ZXN0VVJMLCBjbGllbnQgaXMgY2xpZW50LFxuICAvLyAgICBzZXJ2aWNlLXdvcmtlcnMgbW9kZSBpcyBcIm5vbmVcIiwgcmVmZXJyZXIgaXMgXCJuby1yZWZlcnJlclwiLCBtb2RlIGlzXG4gIC8vICAgIFwid2Vic29ja2V0XCIsIGNyZWRlbnRpYWxzIG1vZGUgaXMgXCJpbmNsdWRlXCIsIGNhY2hlIG1vZGUgaXMgXCJuby1zdG9yZVwiICxcbiAgLy8gICAgYW5kIHJlZGlyZWN0IG1vZGUgaXMgXCJlcnJvclwiLlxuICBjb25zdCByZXF1ZXN0ID0gbWFrZVJlcXVlc3Qoe1xuICAgIHVybExpc3Q6IFtyZXF1ZXN0VVJMXSxcbiAgICBjbGllbnQsXG4gICAgc2VydmljZVdvcmtlcnM6ICdub25lJyxcbiAgICByZWZlcnJlcjogJ25vLXJlZmVycmVyJyxcbiAgICBtb2RlOiAnd2Vic29ja2V0JyxcbiAgICBjcmVkZW50aWFsczogJ2luY2x1ZGUnLFxuICAgIGNhY2hlOiAnbm8tc3RvcmUnLFxuICAgIHJlZGlyZWN0OiAnZXJyb3InXG4gIH0pXG5cbiAgLy8gTm90ZTogdW5kaWNpIGV4dGVuc2lvbiwgYWxsb3cgc2V0dGluZyBjdXN0b20gaGVhZGVycy5cbiAgaWYgKG9wdGlvbnMuaGVhZGVycykge1xuICAgIGNvbnN0IGhlYWRlcnNMaXN0ID0gZ2V0SGVhZGVyc0xpc3QobmV3IEhlYWRlcnMob3B0aW9ucy5oZWFkZXJzKSlcblxuICAgIHJlcXVlc3QuaGVhZGVyc0xpc3QgPSBoZWFkZXJzTGlzdFxuICB9XG5cbiAgLy8gMy4gQXBwZW5kIChgVXBncmFkZWAsIGB3ZWJzb2NrZXRgKSB0byByZXF1ZXN0XHUyMDE5cyBoZWFkZXIgbGlzdC5cbiAgLy8gNC4gQXBwZW5kIChgQ29ubmVjdGlvbmAsIGBVcGdyYWRlYCkgdG8gcmVxdWVzdFx1MjAxOXMgaGVhZGVyIGxpc3QuXG4gIC8vIE5vdGU6IGJvdGggb2YgdGhlc2UgYXJlIGhhbmRsZWQgYnkgdW5kaWNpIGN1cnJlbnRseS5cbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy91bmRpY2kvYmxvYi82OGMyNjljNDE0NGM0NDZmM2YxMjIwOTUxMzM4ZGFlZjRhNmI1ZWM0L2xpYi9jbGllbnQuanMjTDEzOTdcblxuICAvLyA1LiBMZXQga2V5VmFsdWUgYmUgYSBub25jZSBjb25zaXN0aW5nIG9mIGEgcmFuZG9tbHkgc2VsZWN0ZWRcbiAgLy8gICAgMTYtYnl0ZSB2YWx1ZSB0aGF0IGhhcyBiZWVuIGZvcmdpdmluZy1iYXNlNjQtZW5jb2RlZCBhbmRcbiAgLy8gICAgaXNvbW9ycGhpYyBlbmNvZGVkLlxuICBjb25zdCBrZXlWYWx1ZSA9IGNyeXB0by5yYW5kb21CeXRlcygxNikudG9TdHJpbmcoJ2Jhc2U2NCcpXG5cbiAgLy8gNi4gQXBwZW5kIChgU2VjLVdlYlNvY2tldC1LZXlgLCBrZXlWYWx1ZSkgdG8gcmVxdWVzdFx1MjAxOXNcbiAgLy8gICAgaGVhZGVyIGxpc3QuXG4gIHJlcXVlc3QuaGVhZGVyc0xpc3QuYXBwZW5kKCdzZWMtd2Vic29ja2V0LWtleScsIGtleVZhbHVlKVxuXG4gIC8vIDcuIEFwcGVuZCAoYFNlYy1XZWJTb2NrZXQtVmVyc2lvbmAsIGAxM2ApIHRvIHJlcXVlc3RcdTIwMTlzXG4gIC8vICAgIGhlYWRlciBsaXN0LlxuICByZXF1ZXN0LmhlYWRlcnNMaXN0LmFwcGVuZCgnc2VjLXdlYnNvY2tldC12ZXJzaW9uJywgJzEzJylcblxuICAvLyA4LiBGb3IgZWFjaCBwcm90b2NvbCBpbiBwcm90b2NvbHMsIGNvbWJpbmVcbiAgLy8gICAgKGBTZWMtV2ViU29ja2V0LVByb3RvY29sYCwgcHJvdG9jb2wpIGluIHJlcXVlc3RcdTIwMTlzIGhlYWRlclxuICAvLyAgICBsaXN0LlxuICBmb3IgKGNvbnN0IHByb3RvY29sIG9mIHByb3RvY29scykge1xuICAgIHJlcXVlc3QuaGVhZGVyc0xpc3QuYXBwZW5kKCdzZWMtd2Vic29ja2V0LXByb3RvY29sJywgcHJvdG9jb2wpXG4gIH1cblxuICAvLyA5LiBMZXQgcGVybWVzc2FnZURlZmxhdGUgYmUgYSB1c2VyLWFnZW50IGRlZmluZWRcbiAgLy8gICAgXCJwZXJtZXNzYWdlLWRlZmxhdGVcIiBleHRlbnNpb24gaGVhZGVyIHZhbHVlLlxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vbW96aWxsYS9nZWNrby1kZXYvYmxvYi9jZTc4MjM0ZjVlNjUzYTVkMzkxNjgxM2ZmOTkwZjA1MzUxMDIyN2JjL25ldHdlcmsvcHJvdG9jb2wvd2Vic29ja2V0L1dlYlNvY2tldENoYW5uZWwuY3BwI0wyNjczXG4gIGNvbnN0IHBlcm1lc3NhZ2VEZWZsYXRlID0gJ3Blcm1lc3NhZ2UtZGVmbGF0ZTsgY2xpZW50X21heF93aW5kb3dfYml0cydcblxuICAvLyAxMC4gQXBwZW5kIChgU2VjLVdlYlNvY2tldC1FeHRlbnNpb25zYCwgcGVybWVzc2FnZURlZmxhdGUpIHRvXG4gIC8vICAgICByZXF1ZXN0XHUyMDE5cyBoZWFkZXIgbGlzdC5cbiAgcmVxdWVzdC5oZWFkZXJzTGlzdC5hcHBlbmQoJ3NlYy13ZWJzb2NrZXQtZXh0ZW5zaW9ucycsIHBlcm1lc3NhZ2VEZWZsYXRlKVxuXG4gIC8vIDExLiBGZXRjaCByZXF1ZXN0IHdpdGggdXNlUGFyYWxsZWxRdWV1ZSBzZXQgdG8gdHJ1ZSwgYW5kXG4gIC8vICAgICBwcm9jZXNzUmVzcG9uc2UgZ2l2ZW4gcmVzcG9uc2UgYmVpbmcgdGhlc2Ugc3RlcHM6XG4gIGNvbnN0IGNvbnRyb2xsZXIgPSBmZXRjaGluZyh7XG4gICAgcmVxdWVzdCxcbiAgICB1c2VQYXJhbGxlbFF1ZXVlOiB0cnVlLFxuICAgIGRpc3BhdGNoZXI6IG9wdGlvbnMuZGlzcGF0Y2hlcixcbiAgICBwcm9jZXNzUmVzcG9uc2UgKHJlc3BvbnNlKSB7XG4gICAgICAvLyAxLiBJZiByZXNwb25zZSBpcyBhIG5ldHdvcmsgZXJyb3Igb3IgaXRzIHN0YXR1cyBpcyBub3QgMTAxLFxuICAgICAgLy8gICAgZmFpbCB0aGUgV2ViU29ja2V0IGNvbm5lY3Rpb24uXG4gICAgICBpZiAocmVzcG9uc2UudHlwZSA9PT0gJ2Vycm9yJyB8fCByZXNwb25zZS5zdGF0dXMgIT09IDEwMSkge1xuICAgICAgICBmYWlsV2Vic29ja2V0Q29ubmVjdGlvbih3cywgJ1JlY2VpdmVkIG5ldHdvcmsgZXJyb3Igb3Igbm9uLTEwMSBzdGF0dXMgY29kZS4nKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgLy8gMi4gSWYgcHJvdG9jb2xzIGlzIG5vdCB0aGUgZW1wdHkgbGlzdCBhbmQgZXh0cmFjdGluZyBoZWFkZXJcbiAgICAgIC8vICAgIGxpc3QgdmFsdWVzIGdpdmVuIGBTZWMtV2ViU29ja2V0LVByb3RvY29sYCBhbmQgcmVzcG9uc2VcdTIwMTlzXG4gICAgICAvLyAgICBoZWFkZXIgbGlzdCByZXN1bHRzIGluIG51bGwsIGZhaWx1cmUsIG9yIHRoZSBlbXB0eSBieXRlXG4gICAgICAvLyAgICBzZXF1ZW5jZSwgdGhlbiBmYWlsIHRoZSBXZWJTb2NrZXQgY29ubmVjdGlvbi5cbiAgICAgIGlmIChwcm90b2NvbHMubGVuZ3RoICE9PSAwICYmICFyZXNwb25zZS5oZWFkZXJzTGlzdC5nZXQoJ1NlYy1XZWJTb2NrZXQtUHJvdG9jb2wnKSkge1xuICAgICAgICBmYWlsV2Vic29ja2V0Q29ubmVjdGlvbih3cywgJ1NlcnZlciBkaWQgbm90IHJlc3BvbmQgd2l0aCBzZW50IHByb3RvY29scy4nKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgLy8gMy4gRm9sbG93IHRoZSByZXF1aXJlbWVudHMgc3RhdGVkIHN0ZXAgMiB0byBzdGVwIDYsIGluY2x1c2l2ZSxcbiAgICAgIC8vICAgIG9mIHRoZSBsYXN0IHNldCBvZiBzdGVwcyBpbiBzZWN0aW9uIDQuMSBvZiBUaGUgV2ViU29ja2V0XG4gICAgICAvLyAgICBQcm90b2NvbCB0byB2YWxpZGF0ZSByZXNwb25zZS4gVGhpcyBlaXRoZXIgcmVzdWx0cyBpbiBmYWlsXG4gICAgICAvLyAgICB0aGUgV2ViU29ja2V0IGNvbm5lY3Rpb24gb3IgdGhlIFdlYlNvY2tldCBjb25uZWN0aW9uIGlzXG4gICAgICAvLyAgICBlc3RhYmxpc2hlZC5cblxuICAgICAgLy8gMi4gSWYgdGhlIHJlc3BvbnNlIGxhY2tzIGFuIHxVcGdyYWRlfCBoZWFkZXIgZmllbGQgb3IgdGhlIHxVcGdyYWRlfFxuICAgICAgLy8gICAgaGVhZGVyIGZpZWxkIGNvbnRhaW5zIGEgdmFsdWUgdGhhdCBpcyBub3QgYW4gQVNDSUkgY2FzZS1cbiAgICAgIC8vICAgIGluc2Vuc2l0aXZlIG1hdGNoIGZvciB0aGUgdmFsdWUgXCJ3ZWJzb2NrZXRcIiwgdGhlIGNsaWVudCBNVVNUXG4gICAgICAvLyAgICBfRmFpbCB0aGUgV2ViU29ja2V0IENvbm5lY3Rpb25fLlxuICAgICAgaWYgKHJlc3BvbnNlLmhlYWRlcnNMaXN0LmdldCgnVXBncmFkZScpPy50b0xvd2VyQ2FzZSgpICE9PSAnd2Vic29ja2V0Jykge1xuICAgICAgICBmYWlsV2Vic29ja2V0Q29ubmVjdGlvbih3cywgJ1NlcnZlciBkaWQgbm90IHNldCBVcGdyYWRlIGhlYWRlciB0byBcIndlYnNvY2tldFwiLicpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICAvLyAzLiBJZiB0aGUgcmVzcG9uc2UgbGFja3MgYSB8Q29ubmVjdGlvbnwgaGVhZGVyIGZpZWxkIG9yIHRoZVxuICAgICAgLy8gICAgfENvbm5lY3Rpb258IGhlYWRlciBmaWVsZCBkb2Vzbid0IGNvbnRhaW4gYSB0b2tlbiB0aGF0IGlzIGFuXG4gICAgICAvLyAgICBBU0NJSSBjYXNlLWluc2Vuc2l0aXZlIG1hdGNoIGZvciB0aGUgdmFsdWUgXCJVcGdyYWRlXCIsIHRoZSBjbGllbnRcbiAgICAgIC8vICAgIE1VU1QgX0ZhaWwgdGhlIFdlYlNvY2tldCBDb25uZWN0aW9uXy5cbiAgICAgIGlmIChyZXNwb25zZS5oZWFkZXJzTGlzdC5nZXQoJ0Nvbm5lY3Rpb24nKT8udG9Mb3dlckNhc2UoKSAhPT0gJ3VwZ3JhZGUnKSB7XG4gICAgICAgIGZhaWxXZWJzb2NrZXRDb25uZWN0aW9uKHdzLCAnU2VydmVyIGRpZCBub3Qgc2V0IENvbm5lY3Rpb24gaGVhZGVyIHRvIFwidXBncmFkZVwiLicpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICAvLyA0LiBJZiB0aGUgcmVzcG9uc2UgbGFja3MgYSB8U2VjLVdlYlNvY2tldC1BY2NlcHR8IGhlYWRlciBmaWVsZCBvclxuICAgICAgLy8gICAgdGhlIHxTZWMtV2ViU29ja2V0LUFjY2VwdHwgY29udGFpbnMgYSB2YWx1ZSBvdGhlciB0aGFuIHRoZVxuICAgICAgLy8gICAgYmFzZTY0LWVuY29kZWQgU0hBLTEgb2YgdGhlIGNvbmNhdGVuYXRpb24gb2YgdGhlIHxTZWMtV2ViU29ja2V0LVxuICAgICAgLy8gICAgS2V5fCAoYXMgYSBzdHJpbmcsIG5vdCBiYXNlNjQtZGVjb2RlZCkgd2l0aCB0aGUgc3RyaW5nIFwiMjU4RUFGQTUtXG4gICAgICAvLyAgICBFOTE0LTQ3REEtOTVDQS1DNUFCMERDODVCMTFcIiBidXQgaWdub3JpbmcgYW55IGxlYWRpbmcgYW5kXG4gICAgICAvLyAgICB0cmFpbGluZyB3aGl0ZXNwYWNlLCB0aGUgY2xpZW50IE1VU1QgX0ZhaWwgdGhlIFdlYlNvY2tldFxuICAgICAgLy8gICAgQ29ubmVjdGlvbl8uXG4gICAgICBjb25zdCBzZWNXU0FjY2VwdCA9IHJlc3BvbnNlLmhlYWRlcnNMaXN0LmdldCgnU2VjLVdlYlNvY2tldC1BY2NlcHQnKVxuICAgICAgY29uc3QgZGlnZXN0ID0gY3J5cHRvLmNyZWF0ZUhhc2goJ3NoYTEnKS51cGRhdGUoa2V5VmFsdWUgKyB1aWQpLmRpZ2VzdCgnYmFzZTY0JylcbiAgICAgIGlmIChzZWNXU0FjY2VwdCAhPT0gZGlnZXN0KSB7XG4gICAgICAgIGZhaWxXZWJzb2NrZXRDb25uZWN0aW9uKHdzLCAnSW5jb3JyZWN0IGhhc2ggcmVjZWl2ZWQgaW4gU2VjLVdlYlNvY2tldC1BY2NlcHQgaGVhZGVyLicpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICAvLyA1LiBJZiB0aGUgcmVzcG9uc2UgaW5jbHVkZXMgYSB8U2VjLVdlYlNvY2tldC1FeHRlbnNpb25zfCBoZWFkZXJcbiAgICAgIC8vICAgIGZpZWxkIGFuZCB0aGlzIGhlYWRlciBmaWVsZCBpbmRpY2F0ZXMgdGhlIHVzZSBvZiBhbiBleHRlbnNpb25cbiAgICAgIC8vICAgIHRoYXQgd2FzIG5vdCBwcmVzZW50IGluIHRoZSBjbGllbnQncyBoYW5kc2hha2UgKHRoZSBzZXJ2ZXIgaGFzXG4gICAgICAvLyAgICBpbmRpY2F0ZWQgYW4gZXh0ZW5zaW9uIG5vdCByZXF1ZXN0ZWQgYnkgdGhlIGNsaWVudCksIHRoZSBjbGllbnRcbiAgICAgIC8vICAgIE1VU1QgX0ZhaWwgdGhlIFdlYlNvY2tldCBDb25uZWN0aW9uXy4gIChUaGUgcGFyc2luZyBvZiB0aGlzXG4gICAgICAvLyAgICBoZWFkZXIgZmllbGQgdG8gZGV0ZXJtaW5lIHdoaWNoIGV4dGVuc2lvbnMgYXJlIHJlcXVlc3RlZCBpc1xuICAgICAgLy8gICAgZGlzY3Vzc2VkIGluIFNlY3Rpb24gOS4xLilcbiAgICAgIGNvbnN0IHNlY0V4dGVuc2lvbiA9IHJlc3BvbnNlLmhlYWRlcnNMaXN0LmdldCgnU2VjLVdlYlNvY2tldC1FeHRlbnNpb25zJylcbiAgICAgIGxldCBleHRlbnNpb25zXG5cbiAgICAgIGlmIChzZWNFeHRlbnNpb24gIT09IG51bGwpIHtcbiAgICAgICAgZXh0ZW5zaW9ucyA9IHBhcnNlRXh0ZW5zaW9ucyhzZWNFeHRlbnNpb24pXG5cbiAgICAgICAgaWYgKCFleHRlbnNpb25zLmhhcygncGVybWVzc2FnZS1kZWZsYXRlJykpIHtcbiAgICAgICAgICBmYWlsV2Vic29ja2V0Q29ubmVjdGlvbih3cywgJ1NlYy1XZWJTb2NrZXQtRXh0ZW5zaW9ucyBoZWFkZXIgZG9lcyBub3QgbWF0Y2guJylcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyA2LiBJZiB0aGUgcmVzcG9uc2UgaW5jbHVkZXMgYSB8U2VjLVdlYlNvY2tldC1Qcm90b2NvbHwgaGVhZGVyIGZpZWxkXG4gICAgICAvLyAgICBhbmQgdGhpcyBoZWFkZXIgZmllbGQgaW5kaWNhdGVzIHRoZSB1c2Ugb2YgYSBzdWJwcm90b2NvbCB0aGF0IHdhc1xuICAgICAgLy8gICAgbm90IHByZXNlbnQgaW4gdGhlIGNsaWVudCdzIGhhbmRzaGFrZSAodGhlIHNlcnZlciBoYXMgaW5kaWNhdGVkIGFcbiAgICAgIC8vICAgIHN1YnByb3RvY29sIG5vdCByZXF1ZXN0ZWQgYnkgdGhlIGNsaWVudCksIHRoZSBjbGllbnQgTVVTVCBfRmFpbFxuICAgICAgLy8gICAgdGhlIFdlYlNvY2tldCBDb25uZWN0aW9uXy5cbiAgICAgIGNvbnN0IHNlY1Byb3RvY29sID0gcmVzcG9uc2UuaGVhZGVyc0xpc3QuZ2V0KCdTZWMtV2ViU29ja2V0LVByb3RvY29sJylcblxuICAgICAgaWYgKHNlY1Byb3RvY29sICE9PSBudWxsKSB7XG4gICAgICAgIGNvbnN0IHJlcXVlc3RQcm90b2NvbHMgPSBnZXREZWNvZGVTcGxpdCgnc2VjLXdlYnNvY2tldC1wcm90b2NvbCcsIHJlcXVlc3QuaGVhZGVyc0xpc3QpXG5cbiAgICAgICAgLy8gVGhlIGNsaWVudCBjYW4gcmVxdWVzdCB0aGF0IHRoZSBzZXJ2ZXIgdXNlIGEgc3BlY2lmaWMgc3VicHJvdG9jb2wgYnlcbiAgICAgICAgLy8gaW5jbHVkaW5nIHRoZSB8U2VjLVdlYlNvY2tldC1Qcm90b2NvbHwgZmllbGQgaW4gaXRzIGhhbmRzaGFrZS4gIElmIGl0XG4gICAgICAgIC8vIGlzIHNwZWNpZmllZCwgdGhlIHNlcnZlciBuZWVkcyB0byBpbmNsdWRlIHRoZSBzYW1lIGZpZWxkIGFuZCBvbmUgb2ZcbiAgICAgICAgLy8gdGhlIHNlbGVjdGVkIHN1YnByb3RvY29sIHZhbHVlcyBpbiBpdHMgcmVzcG9uc2UgZm9yIHRoZSBjb25uZWN0aW9uIHRvXG4gICAgICAgIC8vIGJlIGVzdGFibGlzaGVkLlxuICAgICAgICBpZiAoIXJlcXVlc3RQcm90b2NvbHMuaW5jbHVkZXMoc2VjUHJvdG9jb2wpKSB7XG4gICAgICAgICAgZmFpbFdlYnNvY2tldENvbm5lY3Rpb24od3MsICdQcm90b2NvbCB3YXMgbm90IHNldCBpbiB0aGUgb3BlbmluZyBoYW5kc2hha2UuJylcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXNwb25zZS5zb2NrZXQub24oJ2RhdGEnLCBvblNvY2tldERhdGEpXG4gICAgICByZXNwb25zZS5zb2NrZXQub24oJ2Nsb3NlJywgb25Tb2NrZXRDbG9zZSlcbiAgICAgIHJlc3BvbnNlLnNvY2tldC5vbignZXJyb3InLCBvblNvY2tldEVycm9yKVxuXG4gICAgICBpZiAoY2hhbm5lbHMub3Blbi5oYXNTdWJzY3JpYmVycykge1xuICAgICAgICBjaGFubmVscy5vcGVuLnB1Ymxpc2goe1xuICAgICAgICAgIGFkZHJlc3M6IHJlc3BvbnNlLnNvY2tldC5hZGRyZXNzKCksXG4gICAgICAgICAgcHJvdG9jb2w6IHNlY1Byb3RvY29sLFxuICAgICAgICAgIGV4dGVuc2lvbnM6IHNlY0V4dGVuc2lvblxuICAgICAgICB9KVxuICAgICAgfVxuXG4gICAgICBvbkVzdGFibGlzaChyZXNwb25zZSwgZXh0ZW5zaW9ucylcbiAgICB9XG4gIH0pXG5cbiAgcmV0dXJuIGNvbnRyb2xsZXJcbn1cblxuZnVuY3Rpb24gY2xvc2VXZWJTb2NrZXRDb25uZWN0aW9uICh3cywgY29kZSwgcmVhc29uLCByZWFzb25CeXRlTGVuZ3RoKSB7XG4gIGlmIChpc0Nsb3Npbmcod3MpIHx8IGlzQ2xvc2VkKHdzKSkge1xuICAgIC8vIElmIHRoaXMncyByZWFkeSBzdGF0ZSBpcyBDTE9TSU5HICgyKSBvciBDTE9TRUQgKDMpXG4gICAgLy8gRG8gbm90aGluZy5cbiAgfSBlbHNlIGlmICghaXNFc3RhYmxpc2hlZCh3cykpIHtcbiAgICAvLyBJZiB0aGUgV2ViU29ja2V0IGNvbm5lY3Rpb24gaXMgbm90IHlldCBlc3RhYmxpc2hlZFxuICAgIC8vIEZhaWwgdGhlIFdlYlNvY2tldCBjb25uZWN0aW9uIGFuZCBzZXQgdGhpcydzIHJlYWR5IHN0YXRlXG4gICAgLy8gdG8gQ0xPU0lORyAoMikuXG4gICAgZmFpbFdlYnNvY2tldENvbm5lY3Rpb24od3MsICdDb25uZWN0aW9uIHdhcyBjbG9zZWQgYmVmb3JlIGl0IHdhcyBlc3RhYmxpc2hlZC4nKVxuICAgIHdzW2tSZWFkeVN0YXRlXSA9IHN0YXRlcy5DTE9TSU5HXG4gIH0gZWxzZSBpZiAod3Nba1NlbnRDbG9zZV0gPT09IHNlbnRDbG9zZUZyYW1lU3RhdGUuTk9UX1NFTlQpIHtcbiAgICAvLyBJZiB0aGUgV2ViU29ja2V0IGNsb3NpbmcgaGFuZHNoYWtlIGhhcyBub3QgeWV0IGJlZW4gc3RhcnRlZFxuICAgIC8vIFN0YXJ0IHRoZSBXZWJTb2NrZXQgY2xvc2luZyBoYW5kc2hha2UgYW5kIHNldCB0aGlzJ3MgcmVhZHlcbiAgICAvLyBzdGF0ZSB0byBDTE9TSU5HICgyKS5cbiAgICAvLyAtIElmIG5laXRoZXIgY29kZSBub3IgcmVhc29uIGlzIHByZXNlbnQsIHRoZSBXZWJTb2NrZXQgQ2xvc2VcbiAgICAvLyAgIG1lc3NhZ2UgbXVzdCBub3QgaGF2ZSBhIGJvZHkuXG4gICAgLy8gLSBJZiBjb2RlIGlzIHByZXNlbnQsIHRoZW4gdGhlIHN0YXR1cyBjb2RlIHRvIHVzZSBpbiB0aGVcbiAgICAvLyAgIFdlYlNvY2tldCBDbG9zZSBtZXNzYWdlIG11c3QgYmUgdGhlIGludGVnZXIgZ2l2ZW4gYnkgY29kZS5cbiAgICAvLyAtIElmIHJlYXNvbiBpcyBhbHNvIHByZXNlbnQsIHRoZW4gcmVhc29uQnl0ZXMgbXVzdCBiZVxuICAgIC8vICAgcHJvdmlkZWQgaW4gdGhlIENsb3NlIG1lc3NhZ2UgYWZ0ZXIgdGhlIHN0YXR1cyBjb2RlLlxuXG4gICAgd3Nba1NlbnRDbG9zZV0gPSBzZW50Q2xvc2VGcmFtZVN0YXRlLlBST0NFU1NJTkdcblxuICAgIGNvbnN0IGZyYW1lID0gbmV3IFdlYnNvY2tldEZyYW1lU2VuZCgpXG5cbiAgICAvLyBJZiBuZWl0aGVyIGNvZGUgbm9yIHJlYXNvbiBpcyBwcmVzZW50LCB0aGUgV2ViU29ja2V0IENsb3NlXG4gICAgLy8gbWVzc2FnZSBtdXN0IG5vdCBoYXZlIGEgYm9keS5cblxuICAgIC8vIElmIGNvZGUgaXMgcHJlc2VudCwgdGhlbiB0aGUgc3RhdHVzIGNvZGUgdG8gdXNlIGluIHRoZVxuICAgIC8vIFdlYlNvY2tldCBDbG9zZSBtZXNzYWdlIG11c3QgYmUgdGhlIGludGVnZXIgZ2l2ZW4gYnkgY29kZS5cbiAgICBpZiAoY29kZSAhPT0gdW5kZWZpbmVkICYmIHJlYXNvbiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBmcmFtZS5mcmFtZURhdGEgPSBCdWZmZXIuYWxsb2NVbnNhZmUoMilcbiAgICAgIGZyYW1lLmZyYW1lRGF0YS53cml0ZVVJbnQxNkJFKGNvZGUsIDApXG4gICAgfSBlbHNlIGlmIChjb2RlICE9PSB1bmRlZmluZWQgJiYgcmVhc29uICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIElmIHJlYXNvbiBpcyBhbHNvIHByZXNlbnQsIHRoZW4gcmVhc29uQnl0ZXMgbXVzdCBiZVxuICAgICAgLy8gcHJvdmlkZWQgaW4gdGhlIENsb3NlIG1lc3NhZ2UgYWZ0ZXIgdGhlIHN0YXR1cyBjb2RlLlxuICAgICAgZnJhbWUuZnJhbWVEYXRhID0gQnVmZmVyLmFsbG9jVW5zYWZlKDIgKyByZWFzb25CeXRlTGVuZ3RoKVxuICAgICAgZnJhbWUuZnJhbWVEYXRhLndyaXRlVUludDE2QkUoY29kZSwgMClcbiAgICAgIC8vIHRoZSBib2R5IE1BWSBjb250YWluIFVURi04LWVuY29kZWQgZGF0YSB3aXRoIHZhbHVlIC9yZWFzb24vXG4gICAgICBmcmFtZS5mcmFtZURhdGEud3JpdGUocmVhc29uLCAyLCAndXRmLTgnKVxuICAgIH0gZWxzZSB7XG4gICAgICBmcmFtZS5mcmFtZURhdGEgPSBlbXB0eUJ1ZmZlclxuICAgIH1cblxuICAgIC8qKiBAdHlwZSB7aW1wb3J0KCdzdHJlYW0nKS5EdXBsZXh9ICovXG4gICAgY29uc3Qgc29ja2V0ID0gd3Nba1Jlc3BvbnNlXS5zb2NrZXRcblxuICAgIHNvY2tldC53cml0ZShmcmFtZS5jcmVhdGVGcmFtZShvcGNvZGVzLkNMT1NFKSlcblxuICAgIHdzW2tTZW50Q2xvc2VdID0gc2VudENsb3NlRnJhbWVTdGF0ZS5TRU5UXG5cbiAgICAvLyBVcG9uIGVpdGhlciBzZW5kaW5nIG9yIHJlY2VpdmluZyBhIENsb3NlIGNvbnRyb2wgZnJhbWUsIGl0IGlzIHNhaWRcbiAgICAvLyB0aGF0IF9UaGUgV2ViU29ja2V0IENsb3NpbmcgSGFuZHNoYWtlIGlzIFN0YXJ0ZWRfIGFuZCB0aGF0IHRoZVxuICAgIC8vIFdlYlNvY2tldCBjb25uZWN0aW9uIGlzIGluIHRoZSBDTE9TSU5HIHN0YXRlLlxuICAgIHdzW2tSZWFkeVN0YXRlXSA9IHN0YXRlcy5DTE9TSU5HXG4gIH0gZWxzZSB7XG4gICAgLy8gT3RoZXJ3aXNlXG4gICAgLy8gU2V0IHRoaXMncyByZWFkeSBzdGF0ZSB0byBDTE9TSU5HICgyKS5cbiAgICB3c1trUmVhZHlTdGF0ZV0gPSBzdGF0ZXMuQ0xPU0lOR1xuICB9XG59XG5cbi8qKlxuICogQHBhcmFtIHtCdWZmZXJ9IGNodW5rXG4gKi9cbmZ1bmN0aW9uIG9uU29ja2V0RGF0YSAoY2h1bmspIHtcbiAgaWYgKCF0aGlzLndzW2tCeXRlUGFyc2VyXS53cml0ZShjaHVuaykpIHtcbiAgICB0aGlzLnBhdXNlKClcbiAgfVxufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly93ZWJzb2NrZXRzLnNwZWMud2hhdHdnLm9yZy8jZmVlZGJhY2stZnJvbS10aGUtcHJvdG9jb2xcbiAqIEBzZWUgaHR0cHM6Ly9kYXRhdHJhY2tlci5pZXRmLm9yZy9kb2MvaHRtbC9yZmM2NDU1I3NlY3Rpb24tNy4xLjRcbiAqL1xuZnVuY3Rpb24gb25Tb2NrZXRDbG9zZSAoKSB7XG4gIGNvbnN0IHsgd3MgfSA9IHRoaXNcbiAgY29uc3QgeyBba1Jlc3BvbnNlXTogcmVzcG9uc2UgfSA9IHdzXG5cbiAgcmVzcG9uc2Uuc29ja2V0Lm9mZignZGF0YScsIG9uU29ja2V0RGF0YSlcbiAgcmVzcG9uc2Uuc29ja2V0Lm9mZignY2xvc2UnLCBvblNvY2tldENsb3NlKVxuICByZXNwb25zZS5zb2NrZXQub2ZmKCdlcnJvcicsIG9uU29ja2V0RXJyb3IpXG5cbiAgLy8gSWYgdGhlIFRDUCBjb25uZWN0aW9uIHdhcyBjbG9zZWQgYWZ0ZXIgdGhlXG4gIC8vIFdlYlNvY2tldCBjbG9zaW5nIGhhbmRzaGFrZSB3YXMgY29tcGxldGVkLCB0aGUgV2ViU29ja2V0IGNvbm5lY3Rpb25cbiAgLy8gaXMgc2FpZCB0byBoYXZlIGJlZW4gY2xvc2VkIF9jbGVhbmx5Xy5cbiAgY29uc3Qgd2FzQ2xlYW4gPSB3c1trU2VudENsb3NlXSA9PT0gc2VudENsb3NlRnJhbWVTdGF0ZS5TRU5UICYmIHdzW2tSZWNlaXZlZENsb3NlXVxuXG4gIGxldCBjb2RlID0gMTAwNVxuICBsZXQgcmVhc29uID0gJydcblxuICBjb25zdCByZXN1bHQgPSB3c1trQnl0ZVBhcnNlcl0uY2xvc2luZ0luZm9cblxuICBpZiAocmVzdWx0ICYmICFyZXN1bHQuZXJyb3IpIHtcbiAgICBjb2RlID0gcmVzdWx0LmNvZGUgPz8gMTAwNVxuICAgIHJlYXNvbiA9IHJlc3VsdC5yZWFzb25cbiAgfSBlbHNlIGlmICghd3Nba1JlY2VpdmVkQ2xvc2VdKSB7XG4gICAgLy8gSWYgX1RoZSBXZWJTb2NrZXRcbiAgICAvLyBDb25uZWN0aW9uIGlzIENsb3NlZF8gYW5kIG5vIENsb3NlIGNvbnRyb2wgZnJhbWUgd2FzIHJlY2VpdmVkIGJ5IHRoZVxuICAgIC8vIGVuZHBvaW50IChzdWNoIGFzIGNvdWxkIG9jY3VyIGlmIHRoZSB1bmRlcmx5aW5nIHRyYW5zcG9ydCBjb25uZWN0aW9uXG4gICAgLy8gaXMgbG9zdCksIF9UaGUgV2ViU29ja2V0IENvbm5lY3Rpb24gQ2xvc2UgQ29kZV8gaXMgY29uc2lkZXJlZCB0byBiZVxuICAgIC8vIDEwMDYuXG4gICAgY29kZSA9IDEwMDZcbiAgfVxuXG4gIC8vIDEuIENoYW5nZSB0aGUgcmVhZHkgc3RhdGUgdG8gQ0xPU0VEICgzKS5cbiAgd3Nba1JlYWR5U3RhdGVdID0gc3RhdGVzLkNMT1NFRFxuXG4gIC8vIDIuIElmIHRoZSB1c2VyIGFnZW50IHdhcyByZXF1aXJlZCB0byBmYWlsIHRoZSBXZWJTb2NrZXRcbiAgLy8gICAgY29ubmVjdGlvbiwgb3IgaWYgdGhlIFdlYlNvY2tldCBjb25uZWN0aW9uIHdhcyBjbG9zZWRcbiAgLy8gICAgYWZ0ZXIgYmVpbmcgZmxhZ2dlZCBhcyBmdWxsLCBmaXJlIGFuIGV2ZW50IG5hbWVkIGVycm9yXG4gIC8vICAgIGF0IHRoZSBXZWJTb2NrZXQgb2JqZWN0LlxuICAvLyBUT0RPXG5cbiAgLy8gMy4gRmlyZSBhbiBldmVudCBuYW1lZCBjbG9zZSBhdCB0aGUgV2ViU29ja2V0IG9iamVjdCxcbiAgLy8gICAgdXNpbmcgQ2xvc2VFdmVudCwgd2l0aCB0aGUgd2FzQ2xlYW4gYXR0cmlidXRlXG4gIC8vICAgIGluaXRpYWxpemVkIHRvIHRydWUgaWYgdGhlIGNvbm5lY3Rpb24gY2xvc2VkIGNsZWFubHlcbiAgLy8gICAgYW5kIGZhbHNlIG90aGVyd2lzZSwgdGhlIGNvZGUgYXR0cmlidXRlIGluaXRpYWxpemVkIHRvXG4gIC8vICAgIHRoZSBXZWJTb2NrZXQgY29ubmVjdGlvbiBjbG9zZSBjb2RlLCBhbmQgdGhlIHJlYXNvblxuICAvLyAgICBhdHRyaWJ1dGUgaW5pdGlhbGl6ZWQgdG8gdGhlIHJlc3VsdCBvZiBhcHBseWluZyBVVEYtOFxuICAvLyAgICBkZWNvZGUgd2l0aG91dCBCT00gdG8gdGhlIFdlYlNvY2tldCBjb25uZWN0aW9uIGNsb3NlXG4gIC8vICAgIHJlYXNvbi5cbiAgLy8gVE9ETzogcHJvY2Vzcy5uZXh0VGlja1xuICBmaXJlRXZlbnQoJ2Nsb3NlJywgd3MsICh0eXBlLCBpbml0KSA9PiBuZXcgQ2xvc2VFdmVudCh0eXBlLCBpbml0KSwge1xuICAgIHdhc0NsZWFuLCBjb2RlLCByZWFzb25cbiAgfSlcblxuICBpZiAoY2hhbm5lbHMuY2xvc2UuaGFzU3Vic2NyaWJlcnMpIHtcbiAgICBjaGFubmVscy5jbG9zZS5wdWJsaXNoKHtcbiAgICAgIHdlYnNvY2tldDogd3MsXG4gICAgICBjb2RlLFxuICAgICAgcmVhc29uXG4gICAgfSlcbiAgfVxufVxuXG5mdW5jdGlvbiBvblNvY2tldEVycm9yIChlcnJvcikge1xuICBjb25zdCB7IHdzIH0gPSB0aGlzXG5cbiAgd3Nba1JlYWR5U3RhdGVdID0gc3RhdGVzLkNMT1NJTkdcblxuICBpZiAoY2hhbm5lbHMuc29ja2V0RXJyb3IuaGFzU3Vic2NyaWJlcnMpIHtcbiAgICBjaGFubmVscy5zb2NrZXRFcnJvci5wdWJsaXNoKGVycm9yKVxuICB9XG5cbiAgdGhpcy5kZXN0cm95KClcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGVzdGFibGlzaFdlYlNvY2tldENvbm5lY3Rpb24sXG4gIGNsb3NlV2ViU29ja2V0Q29ubmVjdGlvblxufVxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7IGNyZWF0ZUluZmxhdGVSYXcsIFpfREVGQVVMVF9XSU5ET1dCSVRTIH0gPSByZXF1aXJlKCdub2RlOnpsaWInKVxuY29uc3QgeyBpc1ZhbGlkQ2xpZW50V2luZG93Qml0cyB9ID0gcmVxdWlyZSgnLi91dGlsJylcblxuY29uc3QgdGFpbCA9IEJ1ZmZlci5mcm9tKFsweDAwLCAweDAwLCAweGZmLCAweGZmXSlcbmNvbnN0IGtCdWZmZXIgPSBTeW1ib2woJ2tCdWZmZXInKVxuY29uc3Qga0xlbmd0aCA9IFN5bWJvbCgna0xlbmd0aCcpXG5cbmNsYXNzIFBlck1lc3NhZ2VEZWZsYXRlIHtcbiAgLyoqIEB0eXBlIHtpbXBvcnQoJ25vZGU6emxpYicpLkluZmxhdGVSYXd9ICovXG4gICNpbmZsYXRlXG5cbiAgI29wdGlvbnMgPSB7fVxuXG4gIGNvbnN0cnVjdG9yIChleHRlbnNpb25zKSB7XG4gICAgdGhpcy4jb3B0aW9ucy5zZXJ2ZXJOb0NvbnRleHRUYWtlb3ZlciA9IGV4dGVuc2lvbnMuaGFzKCdzZXJ2ZXJfbm9fY29udGV4dF90YWtlb3ZlcicpXG4gICAgdGhpcy4jb3B0aW9ucy5zZXJ2ZXJNYXhXaW5kb3dCaXRzID0gZXh0ZW5zaW9ucy5nZXQoJ3NlcnZlcl9tYXhfd2luZG93X2JpdHMnKVxuICB9XG5cbiAgZGVjb21wcmVzcyAoY2h1bmssIGZpbiwgY2FsbGJhY2spIHtcbiAgICAvLyBBbiBlbmRwb2ludCB1c2VzIHRoZSBmb2xsb3dpbmcgYWxnb3JpdGhtIHRvIGRlY29tcHJlc3MgYSBtZXNzYWdlLlxuICAgIC8vIDEuICBBcHBlbmQgNCBvY3RldHMgb2YgMHgwMCAweDAwIDB4ZmYgMHhmZiB0byB0aGUgdGFpbCBlbmQgb2YgdGhlXG4gICAgLy8gICAgIHBheWxvYWQgb2YgdGhlIG1lc3NhZ2UuXG4gICAgLy8gMi4gIERlY29tcHJlc3MgdGhlIHJlc3VsdGluZyBkYXRhIHVzaW5nIERFRkxBVEUuXG5cbiAgICBpZiAoIXRoaXMuI2luZmxhdGUpIHtcbiAgICAgIGxldCB3aW5kb3dCaXRzID0gWl9ERUZBVUxUX1dJTkRPV0JJVFNcblxuICAgICAgaWYgKHRoaXMuI29wdGlvbnMuc2VydmVyTWF4V2luZG93Qml0cykgeyAvLyBlbXB0eSB2YWx1ZXMgZGVmYXVsdCB0byBaX0RFRkFVTFRfV0lORE9XQklUU1xuICAgICAgICBpZiAoIWlzVmFsaWRDbGllbnRXaW5kb3dCaXRzKHRoaXMuI29wdGlvbnMuc2VydmVyTWF4V2luZG93Qml0cykpIHtcbiAgICAgICAgICBjYWxsYmFjayhuZXcgRXJyb3IoJ0ludmFsaWQgc2VydmVyX21heF93aW5kb3dfYml0cycpKVxuICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG5cbiAgICAgICAgd2luZG93Qml0cyA9IE51bWJlci5wYXJzZUludCh0aGlzLiNvcHRpb25zLnNlcnZlck1heFdpbmRvd0JpdHMpXG4gICAgICB9XG5cbiAgICAgIHRoaXMuI2luZmxhdGUgPSBjcmVhdGVJbmZsYXRlUmF3KHsgd2luZG93Qml0cyB9KVxuICAgICAgdGhpcy4jaW5mbGF0ZVtrQnVmZmVyXSA9IFtdXG4gICAgICB0aGlzLiNpbmZsYXRlW2tMZW5ndGhdID0gMFxuXG4gICAgICB0aGlzLiNpbmZsYXRlLm9uKCdkYXRhJywgKGRhdGEpID0+IHtcbiAgICAgICAgdGhpcy4jaW5mbGF0ZVtrQnVmZmVyXS5wdXNoKGRhdGEpXG4gICAgICAgIHRoaXMuI2luZmxhdGVba0xlbmd0aF0gKz0gZGF0YS5sZW5ndGhcbiAgICAgIH0pXG5cbiAgICAgIHRoaXMuI2luZmxhdGUub24oJ2Vycm9yJywgKGVycikgPT4ge1xuICAgICAgICB0aGlzLiNpbmZsYXRlID0gbnVsbFxuICAgICAgICBjYWxsYmFjayhlcnIpXG4gICAgICB9KVxuICAgIH1cblxuICAgIHRoaXMuI2luZmxhdGUud3JpdGUoY2h1bmspXG4gICAgaWYgKGZpbikge1xuICAgICAgdGhpcy4jaW5mbGF0ZS53cml0ZSh0YWlsKVxuICAgIH1cblxuICAgIHRoaXMuI2luZmxhdGUuZmx1c2goKCkgPT4ge1xuICAgICAgY29uc3QgZnVsbCA9IEJ1ZmZlci5jb25jYXQodGhpcy4jaW5mbGF0ZVtrQnVmZmVyXSwgdGhpcy4jaW5mbGF0ZVtrTGVuZ3RoXSlcblxuICAgICAgdGhpcy4jaW5mbGF0ZVtrQnVmZmVyXS5sZW5ndGggPSAwXG4gICAgICB0aGlzLiNpbmZsYXRlW2tMZW5ndGhdID0gMFxuXG4gICAgICBjYWxsYmFjayhudWxsLCBmdWxsKVxuICAgIH0pXG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7IFBlck1lc3NhZ2VEZWZsYXRlIH1cbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgeyBXcml0YWJsZSB9ID0gcmVxdWlyZSgnbm9kZTpzdHJlYW0nKVxuY29uc3QgYXNzZXJ0ID0gcmVxdWlyZSgnbm9kZTphc3NlcnQnKVxuY29uc3QgeyBwYXJzZXJTdGF0ZXMsIG9wY29kZXMsIHN0YXRlcywgZW1wdHlCdWZmZXIsIHNlbnRDbG9zZUZyYW1lU3RhdGUgfSA9IHJlcXVpcmUoJy4vY29uc3RhbnRzJylcbmNvbnN0IHsga1JlYWR5U3RhdGUsIGtTZW50Q2xvc2UsIGtSZXNwb25zZSwga1JlY2VpdmVkQ2xvc2UgfSA9IHJlcXVpcmUoJy4vc3ltYm9scycpXG5jb25zdCB7IGNoYW5uZWxzIH0gPSByZXF1aXJlKCcuLi8uLi9jb3JlL2RpYWdub3N0aWNzJylcbmNvbnN0IHtcbiAgaXNWYWxpZFN0YXR1c0NvZGUsXG4gIGlzVmFsaWRPcGNvZGUsXG4gIGZhaWxXZWJzb2NrZXRDb25uZWN0aW9uLFxuICB3ZWJzb2NrZXRNZXNzYWdlUmVjZWl2ZWQsXG4gIHV0ZjhEZWNvZGUsXG4gIGlzQ29udHJvbEZyYW1lLFxuICBpc1RleHRCaW5hcnlGcmFtZSxcbiAgaXNDb250aW51YXRpb25GcmFtZVxufSA9IHJlcXVpcmUoJy4vdXRpbCcpXG5jb25zdCB7IFdlYnNvY2tldEZyYW1lU2VuZCB9ID0gcmVxdWlyZSgnLi9mcmFtZScpXG5jb25zdCB7IGNsb3NlV2ViU29ja2V0Q29ubmVjdGlvbiB9ID0gcmVxdWlyZSgnLi9jb25uZWN0aW9uJylcbmNvbnN0IHsgUGVyTWVzc2FnZURlZmxhdGUgfSA9IHJlcXVpcmUoJy4vcGVybWVzc2FnZS1kZWZsYXRlJylcblxuLy8gVGhpcyBjb2RlIHdhcyBpbmZsdWVuY2VkIGJ5IHdzIHJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZS5cbi8vIENvcHlyaWdodCAoYykgMjAxMSBFaW5hciBPdHRvIFN0YW5ndmlrIDxlaW5hcm9zQGdtYWlsLmNvbT5cbi8vIENvcHlyaWdodCAoYykgMjAxMyBBcm5vdXQgS2F6ZW1pZXIgYW5kIGNvbnRyaWJ1dG9yc1xuLy8gQ29weXJpZ2h0IChjKSAyMDE2IEx1aWdpIFBpbmNhIGFuZCBjb250cmlidXRvcnNcblxuY2xhc3MgQnl0ZVBhcnNlciBleHRlbmRzIFdyaXRhYmxlIHtcbiAgI2J1ZmZlcnMgPSBbXVxuICAjYnl0ZU9mZnNldCA9IDBcbiAgI2xvb3AgPSBmYWxzZVxuXG4gICNzdGF0ZSA9IHBhcnNlclN0YXRlcy5JTkZPXG5cbiAgI2luZm8gPSB7fVxuICAjZnJhZ21lbnRzID0gW11cblxuICAvKiogQHR5cGUge01hcDxzdHJpbmcsIFBlck1lc3NhZ2VEZWZsYXRlPn0gKi9cbiAgI2V4dGVuc2lvbnNcblxuICBjb25zdHJ1Y3RvciAod3MsIGV4dGVuc2lvbnMpIHtcbiAgICBzdXBlcigpXG5cbiAgICB0aGlzLndzID0gd3NcbiAgICB0aGlzLiNleHRlbnNpb25zID0gZXh0ZW5zaW9ucyA9PSBudWxsID8gbmV3IE1hcCgpIDogZXh0ZW5zaW9uc1xuXG4gICAgaWYgKHRoaXMuI2V4dGVuc2lvbnMuaGFzKCdwZXJtZXNzYWdlLWRlZmxhdGUnKSkge1xuICAgICAgdGhpcy4jZXh0ZW5zaW9ucy5zZXQoJ3Blcm1lc3NhZ2UtZGVmbGF0ZScsIG5ldyBQZXJNZXNzYWdlRGVmbGF0ZShleHRlbnNpb25zKSlcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtCdWZmZXJ9IGNodW5rXG4gICAqIEBwYXJhbSB7KCkgPT4gdm9pZH0gY2FsbGJhY2tcbiAgICovXG4gIF93cml0ZSAoY2h1bmssIF8sIGNhbGxiYWNrKSB7XG4gICAgdGhpcy4jYnVmZmVycy5wdXNoKGNodW5rKVxuICAgIHRoaXMuI2J5dGVPZmZzZXQgKz0gY2h1bmsubGVuZ3RoXG4gICAgdGhpcy4jbG9vcCA9IHRydWVcblxuICAgIHRoaXMucnVuKGNhbGxiYWNrKVxuICB9XG5cbiAgLyoqXG4gICAqIFJ1bnMgd2hlbmV2ZXIgYSBuZXcgY2h1bmsgaXMgcmVjZWl2ZWQuXG4gICAqIENhbGxiYWNrIGlzIGNhbGxlZCB3aGVuZXZlciB0aGVyZSBhcmUgbm8gbW9yZSBjaHVua3MgYnVmZmVyaW5nLFxuICAgKiBvciBub3QgZW5vdWdoIGJ5dGVzIGFyZSBidWZmZXJlZCB0byBwYXJzZS5cbiAgICovXG4gIHJ1biAoY2FsbGJhY2spIHtcbiAgICB3aGlsZSAodGhpcy4jbG9vcCkge1xuICAgICAgaWYgKHRoaXMuI3N0YXRlID09PSBwYXJzZXJTdGF0ZXMuSU5GTykge1xuICAgICAgICAvLyBJZiB0aGVyZSBhcmVuJ3QgZW5vdWdoIGJ5dGVzIHRvIHBhcnNlIHRoZSBwYXlsb2FkIGxlbmd0aCwgZXRjLlxuICAgICAgICBpZiAodGhpcy4jYnl0ZU9mZnNldCA8IDIpIHtcbiAgICAgICAgICByZXR1cm4gY2FsbGJhY2soKVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgYnVmZmVyID0gdGhpcy5jb25zdW1lKDIpXG4gICAgICAgIGNvbnN0IGZpbiA9IChidWZmZXJbMF0gJiAweDgwKSAhPT0gMFxuICAgICAgICBjb25zdCBvcGNvZGUgPSBidWZmZXJbMF0gJiAweDBGXG4gICAgICAgIGNvbnN0IG1hc2tlZCA9IChidWZmZXJbMV0gJiAweDgwKSA9PT0gMHg4MFxuXG4gICAgICAgIGNvbnN0IGZyYWdtZW50ZWQgPSAhZmluICYmIG9wY29kZSAhPT0gb3Bjb2Rlcy5DT05USU5VQVRJT05cbiAgICAgICAgY29uc3QgcGF5bG9hZExlbmd0aCA9IGJ1ZmZlclsxXSAmIDB4N0ZcblxuICAgICAgICBjb25zdCByc3YxID0gYnVmZmVyWzBdICYgMHg0MFxuICAgICAgICBjb25zdCByc3YyID0gYnVmZmVyWzBdICYgMHgyMFxuICAgICAgICBjb25zdCByc3YzID0gYnVmZmVyWzBdICYgMHgxMFxuXG4gICAgICAgIGlmICghaXNWYWxpZE9wY29kZShvcGNvZGUpKSB7XG4gICAgICAgICAgZmFpbFdlYnNvY2tldENvbm5lY3Rpb24odGhpcy53cywgJ0ludmFsaWQgb3Bjb2RlIHJlY2VpdmVkJylcbiAgICAgICAgICByZXR1cm4gY2FsbGJhY2soKVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG1hc2tlZCkge1xuICAgICAgICAgIGZhaWxXZWJzb2NrZXRDb25uZWN0aW9uKHRoaXMud3MsICdGcmFtZSBjYW5ub3QgYmUgbWFza2VkJylcbiAgICAgICAgICByZXR1cm4gY2FsbGJhY2soKVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gTVVTVCBiZSAwIHVubGVzcyBhbiBleHRlbnNpb24gaXMgbmVnb3RpYXRlZCB0aGF0IGRlZmluZXMgbWVhbmluZ3NcbiAgICAgICAgLy8gZm9yIG5vbi16ZXJvIHZhbHVlcy4gIElmIGEgbm9uemVybyB2YWx1ZSBpcyByZWNlaXZlZCBhbmQgbm9uZSBvZlxuICAgICAgICAvLyB0aGUgbmVnb3RpYXRlZCBleHRlbnNpb25zIGRlZmluZXMgdGhlIG1lYW5pbmcgb2Ygc3VjaCBhIG5vbnplcm9cbiAgICAgICAgLy8gdmFsdWUsIHRoZSByZWNlaXZpbmcgZW5kcG9pbnQgTVVTVCBfRmFpbCB0aGUgV2ViU29ja2V0XG4gICAgICAgIC8vIENvbm5lY3Rpb25fLlxuICAgICAgICAvLyBUaGlzIGRvY3VtZW50IGFsbG9jYXRlcyB0aGUgUlNWMSBiaXQgb2YgdGhlIFdlYlNvY2tldCBoZWFkZXIgZm9yXG4gICAgICAgIC8vIFBNQ0VzIGFuZCBjYWxscyB0aGUgYml0IHRoZSBcIlBlci1NZXNzYWdlIENvbXByZXNzZWRcIiBiaXQuICBPbiBhXG4gICAgICAgIC8vIFdlYlNvY2tldCBjb25uZWN0aW9uIHdoZXJlIGEgUE1DRSBpcyBpbiB1c2UsIHRoaXMgYml0IGluZGljYXRlc1xuICAgICAgICAvLyB3aGV0aGVyIGEgbWVzc2FnZSBpcyBjb21wcmVzc2VkIG9yIG5vdC5cbiAgICAgICAgaWYgKHJzdjEgIT09IDAgJiYgIXRoaXMuI2V4dGVuc2lvbnMuaGFzKCdwZXJtZXNzYWdlLWRlZmxhdGUnKSkge1xuICAgICAgICAgIGZhaWxXZWJzb2NrZXRDb25uZWN0aW9uKHRoaXMud3MsICdFeHBlY3RlZCBSU1YxIHRvIGJlIGNsZWFyLicpXG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cblxuICAgICAgICBpZiAocnN2MiAhPT0gMCB8fCByc3YzICE9PSAwKSB7XG4gICAgICAgICAgZmFpbFdlYnNvY2tldENvbm5lY3Rpb24odGhpcy53cywgJ1JTVjEsIFJTVjIsIFJTVjMgbXVzdCBiZSBjbGVhcicpXG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZnJhZ21lbnRlZCAmJiAhaXNUZXh0QmluYXJ5RnJhbWUob3Bjb2RlKSkge1xuICAgICAgICAgIC8vIE9ubHkgdGV4dCBhbmQgYmluYXJ5IGZyYW1lcyBjYW4gYmUgZnJhZ21lbnRlZFxuICAgICAgICAgIGZhaWxXZWJzb2NrZXRDb25uZWN0aW9uKHRoaXMud3MsICdJbnZhbGlkIGZyYW1lIHR5cGUgd2FzIGZyYWdtZW50ZWQuJylcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIElmIHdlIGFyZSBhbHJlYWR5IHBhcnNpbmcgYSB0ZXh0L2JpbmFyeSBmcmFtZSBhbmQgZG8gbm90IHJlY2VpdmUgZWl0aGVyXG4gICAgICAgIC8vIGEgY29udGludWF0aW9uIGZyYW1lIG9yIGNsb3NlIGZyYW1lLCBmYWlsIHRoZSBjb25uZWN0aW9uLlxuICAgICAgICBpZiAoaXNUZXh0QmluYXJ5RnJhbWUob3Bjb2RlKSAmJiB0aGlzLiNmcmFnbWVudHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgIGZhaWxXZWJzb2NrZXRDb25uZWN0aW9uKHRoaXMud3MsICdFeHBlY3RlZCBjb250aW51YXRpb24gZnJhbWUnKVxuICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuI2luZm8uZnJhZ21lbnRlZCAmJiBmcmFnbWVudGVkKSB7XG4gICAgICAgICAgLy8gQSBmcmFnbWVudGVkIGZyYW1lIGNhbid0IGJlIGZyYWdtZW50ZWQgaXRzZWxmXG4gICAgICAgICAgZmFpbFdlYnNvY2tldENvbm5lY3Rpb24odGhpcy53cywgJ0ZyYWdtZW50ZWQgZnJhbWUgZXhjZWVkZWQgMTI1IGJ5dGVzLicpXG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cblxuICAgICAgICAvLyBcIkFsbCBjb250cm9sIGZyYW1lcyBNVVNUIGhhdmUgYSBwYXlsb2FkIGxlbmd0aCBvZiAxMjUgYnl0ZXMgb3IgbGVzc1xuICAgICAgICAvLyBhbmQgTVVTVCBOT1QgYmUgZnJhZ21lbnRlZC5cIlxuICAgICAgICBpZiAoKHBheWxvYWRMZW5ndGggPiAxMjUgfHwgZnJhZ21lbnRlZCkgJiYgaXNDb250cm9sRnJhbWUob3Bjb2RlKSkge1xuICAgICAgICAgIGZhaWxXZWJzb2NrZXRDb25uZWN0aW9uKHRoaXMud3MsICdDb250cm9sIGZyYW1lIGVpdGhlciB0b28gbGFyZ2Ugb3IgZnJhZ21lbnRlZCcpXG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cblxuICAgICAgICBpZiAoaXNDb250aW51YXRpb25GcmFtZShvcGNvZGUpICYmIHRoaXMuI2ZyYWdtZW50cy5sZW5ndGggPT09IDAgJiYgIXRoaXMuI2luZm8uY29tcHJlc3NlZCkge1xuICAgICAgICAgIGZhaWxXZWJzb2NrZXRDb25uZWN0aW9uKHRoaXMud3MsICdVbmV4cGVjdGVkIGNvbnRpbnVhdGlvbiBmcmFtZScpXG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cblxuICAgICAgICBpZiAocGF5bG9hZExlbmd0aCA8PSAxMjUpIHtcbiAgICAgICAgICB0aGlzLiNpbmZvLnBheWxvYWRMZW5ndGggPSBwYXlsb2FkTGVuZ3RoXG4gICAgICAgICAgdGhpcy4jc3RhdGUgPSBwYXJzZXJTdGF0ZXMuUkVBRF9EQVRBXG4gICAgICAgIH0gZWxzZSBpZiAocGF5bG9hZExlbmd0aCA9PT0gMTI2KSB7XG4gICAgICAgICAgdGhpcy4jc3RhdGUgPSBwYXJzZXJTdGF0ZXMuUEFZTE9BRExFTkdUSF8xNlxuICAgICAgICB9IGVsc2UgaWYgKHBheWxvYWRMZW5ndGggPT09IDEyNykge1xuICAgICAgICAgIHRoaXMuI3N0YXRlID0gcGFyc2VyU3RhdGVzLlBBWUxPQURMRU5HVEhfNjRcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChpc1RleHRCaW5hcnlGcmFtZShvcGNvZGUpKSB7XG4gICAgICAgICAgdGhpcy4jaW5mby5iaW5hcnlUeXBlID0gb3Bjb2RlXG4gICAgICAgICAgdGhpcy4jaW5mby5jb21wcmVzc2VkID0gcnN2MSAhPT0gMFxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy4jaW5mby5vcGNvZGUgPSBvcGNvZGVcbiAgICAgICAgdGhpcy4jaW5mby5tYXNrZWQgPSBtYXNrZWRcbiAgICAgICAgdGhpcy4jaW5mby5maW4gPSBmaW5cbiAgICAgICAgdGhpcy4jaW5mby5mcmFnbWVudGVkID0gZnJhZ21lbnRlZFxuICAgICAgfSBlbHNlIGlmICh0aGlzLiNzdGF0ZSA9PT0gcGFyc2VyU3RhdGVzLlBBWUxPQURMRU5HVEhfMTYpIHtcbiAgICAgICAgaWYgKHRoaXMuI2J5dGVPZmZzZXQgPCAyKSB7XG4gICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKClcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGJ1ZmZlciA9IHRoaXMuY29uc3VtZSgyKVxuXG4gICAgICAgIHRoaXMuI2luZm8ucGF5bG9hZExlbmd0aCA9IGJ1ZmZlci5yZWFkVUludDE2QkUoMClcbiAgICAgICAgdGhpcy4jc3RhdGUgPSBwYXJzZXJTdGF0ZXMuUkVBRF9EQVRBXG4gICAgICB9IGVsc2UgaWYgKHRoaXMuI3N0YXRlID09PSBwYXJzZXJTdGF0ZXMuUEFZTE9BRExFTkdUSF82NCkge1xuICAgICAgICBpZiAodGhpcy4jYnl0ZU9mZnNldCA8IDgpIHtcbiAgICAgICAgICByZXR1cm4gY2FsbGJhY2soKVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgYnVmZmVyID0gdGhpcy5jb25zdW1lKDgpXG4gICAgICAgIGNvbnN0IHVwcGVyID0gYnVmZmVyLnJlYWRVSW50MzJCRSgwKVxuXG4gICAgICAgIC8vIDJeMzEgaXMgdGhlIG1heGltdW0gYnl0ZXMgYW4gYXJyYXlidWZmZXIgY2FuIGNvbnRhaW5cbiAgICAgICAgLy8gb24gMzItYml0IHN5c3RlbXMuIEFsdGhvdWdoLCBvbiA2NC1iaXQgc3lzdGVtcywgdGhpcyBpc1xuICAgICAgICAvLyAyXjUzLTEgYnl0ZXMuXG4gICAgICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0Vycm9ycy9JbnZhbGlkX2FycmF5X2xlbmd0aFxuICAgICAgICAvLyBodHRwczovL3NvdXJjZS5jaHJvbWl1bS5vcmcvY2hyb21pdW0vY2hyb21pdW0vc3JjLysvbWFpbjp2OC9zcmMvY29tbW9uL2dsb2JhbHMuaDtkcmM9MTk0NjIxMmFjMDEwMDY2OGYxNGViOWUyODQzYmRkODQ2ZTUxMGExZTticHY9MTticHQ9MTtsPTEyNzVcbiAgICAgICAgLy8gaHR0cHM6Ly9zb3VyY2UuY2hyb21pdW0ub3JnL2Nocm9taXVtL2Nocm9taXVtL3NyYy8rL21haW46djgvc3JjL29iamVjdHMvanMtYXJyYXktYnVmZmVyLmg7bD0zNDtkcmM9MTk0NjIxMmFjMDEwMDY2OGYxNGViOWUyODQzYmRkODQ2ZTUxMGExZVxuICAgICAgICBpZiAodXBwZXIgPiAyICoqIDMxIC0gMSkge1xuICAgICAgICAgIGZhaWxXZWJzb2NrZXRDb25uZWN0aW9uKHRoaXMud3MsICdSZWNlaXZlZCBwYXlsb2FkIGxlbmd0aCA+IDJeMzEgYnl0ZXMuJylcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGxvd2VyID0gYnVmZmVyLnJlYWRVSW50MzJCRSg0KVxuXG4gICAgICAgIHRoaXMuI2luZm8ucGF5bG9hZExlbmd0aCA9ICh1cHBlciA8PCA4KSArIGxvd2VyXG4gICAgICAgIHRoaXMuI3N0YXRlID0gcGFyc2VyU3RhdGVzLlJFQURfREFUQVxuICAgICAgfSBlbHNlIGlmICh0aGlzLiNzdGF0ZSA9PT0gcGFyc2VyU3RhdGVzLlJFQURfREFUQSkge1xuICAgICAgICBpZiAodGhpcy4jYnl0ZU9mZnNldCA8IHRoaXMuI2luZm8ucGF5bG9hZExlbmd0aCkge1xuICAgICAgICAgIHJldHVybiBjYWxsYmFjaygpXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBib2R5ID0gdGhpcy5jb25zdW1lKHRoaXMuI2luZm8ucGF5bG9hZExlbmd0aClcblxuICAgICAgICBpZiAoaXNDb250cm9sRnJhbWUodGhpcy4jaW5mby5vcGNvZGUpKSB7XG4gICAgICAgICAgdGhpcy4jbG9vcCA9IHRoaXMucGFyc2VDb250cm9sRnJhbWUoYm9keSlcbiAgICAgICAgICB0aGlzLiNzdGF0ZSA9IHBhcnNlclN0YXRlcy5JTkZPXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaWYgKCF0aGlzLiNpbmZvLmNvbXByZXNzZWQpIHtcbiAgICAgICAgICAgIHRoaXMuI2ZyYWdtZW50cy5wdXNoKGJvZHkpXG5cbiAgICAgICAgICAgIC8vIElmIHRoZSBmcmFtZSBpcyBub3QgZnJhZ21lbnRlZCwgYSBtZXNzYWdlIGhhcyBiZWVuIHJlY2VpdmVkLlxuICAgICAgICAgICAgLy8gSWYgdGhlIGZyYW1lIGlzIGZyYWdtZW50ZWQsIGl0IHdpbGwgdGVybWluYXRlIHdpdGggYSBmaW4gYml0IHNldFxuICAgICAgICAgICAgLy8gYW5kIGFuIG9wY29kZSBvZiAwIChjb250aW51YXRpb24pLCB0aGVyZWZvcmUgd2UgaGFuZGxlIHRoYXQgd2hlblxuICAgICAgICAgICAgLy8gcGFyc2luZyBjb250aW51YXRpb24gZnJhbWVzLCBub3QgaGVyZS5cbiAgICAgICAgICAgIGlmICghdGhpcy4jaW5mby5mcmFnbWVudGVkICYmIHRoaXMuI2luZm8uZmluKSB7XG4gICAgICAgICAgICAgIGNvbnN0IGZ1bGxNZXNzYWdlID0gQnVmZmVyLmNvbmNhdCh0aGlzLiNmcmFnbWVudHMpXG4gICAgICAgICAgICAgIHdlYnNvY2tldE1lc3NhZ2VSZWNlaXZlZCh0aGlzLndzLCB0aGlzLiNpbmZvLmJpbmFyeVR5cGUsIGZ1bGxNZXNzYWdlKVxuICAgICAgICAgICAgICB0aGlzLiNmcmFnbWVudHMubGVuZ3RoID0gMFxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLiNzdGF0ZSA9IHBhcnNlclN0YXRlcy5JTkZPXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuI2V4dGVuc2lvbnMuZ2V0KCdwZXJtZXNzYWdlLWRlZmxhdGUnKS5kZWNvbXByZXNzKGJvZHksIHRoaXMuI2luZm8uZmluLCAoZXJyb3IsIGRhdGEpID0+IHtcbiAgICAgICAgICAgICAgaWYgKGVycm9yKSB7XG4gICAgICAgICAgICAgICAgY2xvc2VXZWJTb2NrZXRDb25uZWN0aW9uKHRoaXMud3MsIDEwMDcsIGVycm9yLm1lc3NhZ2UsIGVycm9yLm1lc3NhZ2UubGVuZ3RoKVxuICAgICAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgdGhpcy4jZnJhZ21lbnRzLnB1c2goZGF0YSlcblxuICAgICAgICAgICAgICBpZiAoIXRoaXMuI2luZm8uZmluKSB7XG4gICAgICAgICAgICAgICAgdGhpcy4jc3RhdGUgPSBwYXJzZXJTdGF0ZXMuSU5GT1xuICAgICAgICAgICAgICAgIHRoaXMuI2xvb3AgPSB0cnVlXG4gICAgICAgICAgICAgICAgdGhpcy5ydW4oY2FsbGJhY2spXG4gICAgICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICB3ZWJzb2NrZXRNZXNzYWdlUmVjZWl2ZWQodGhpcy53cywgdGhpcy4jaW5mby5iaW5hcnlUeXBlLCBCdWZmZXIuY29uY2F0KHRoaXMuI2ZyYWdtZW50cykpXG5cbiAgICAgICAgICAgICAgdGhpcy4jbG9vcCA9IHRydWVcbiAgICAgICAgICAgICAgdGhpcy4jc3RhdGUgPSBwYXJzZXJTdGF0ZXMuSU5GT1xuICAgICAgICAgICAgICB0aGlzLiNmcmFnbWVudHMubGVuZ3RoID0gMFxuICAgICAgICAgICAgICB0aGlzLnJ1bihjYWxsYmFjaylcbiAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICAgIHRoaXMuI2xvb3AgPSBmYWxzZVxuICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVGFrZSBuIGJ5dGVzIGZyb20gdGhlIGJ1ZmZlcmVkIEJ1ZmZlcnNcbiAgICogQHBhcmFtIHtudW1iZXJ9IG5cbiAgICogQHJldHVybnMge0J1ZmZlcn1cbiAgICovXG4gIGNvbnN1bWUgKG4pIHtcbiAgICBpZiAobiA+IHRoaXMuI2J5dGVPZmZzZXQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignQ2FsbGVkIGNvbnN1bWUoKSBiZWZvcmUgYnVmZmVycyBzYXRpYXRlZC4nKVxuICAgIH0gZWxzZSBpZiAobiA9PT0gMCkge1xuICAgICAgcmV0dXJuIGVtcHR5QnVmZmVyXG4gICAgfVxuXG4gICAgaWYgKHRoaXMuI2J1ZmZlcnNbMF0ubGVuZ3RoID09PSBuKSB7XG4gICAgICB0aGlzLiNieXRlT2Zmc2V0IC09IHRoaXMuI2J1ZmZlcnNbMF0ubGVuZ3RoXG4gICAgICByZXR1cm4gdGhpcy4jYnVmZmVycy5zaGlmdCgpXG4gICAgfVxuXG4gICAgY29uc3QgYnVmZmVyID0gQnVmZmVyLmFsbG9jVW5zYWZlKG4pXG4gICAgbGV0IG9mZnNldCA9IDBcblxuICAgIHdoaWxlIChvZmZzZXQgIT09IG4pIHtcbiAgICAgIGNvbnN0IG5leHQgPSB0aGlzLiNidWZmZXJzWzBdXG4gICAgICBjb25zdCB7IGxlbmd0aCB9ID0gbmV4dFxuXG4gICAgICBpZiAobGVuZ3RoICsgb2Zmc2V0ID09PSBuKSB7XG4gICAgICAgIGJ1ZmZlci5zZXQodGhpcy4jYnVmZmVycy5zaGlmdCgpLCBvZmZzZXQpXG4gICAgICAgIGJyZWFrXG4gICAgICB9IGVsc2UgaWYgKGxlbmd0aCArIG9mZnNldCA+IG4pIHtcbiAgICAgICAgYnVmZmVyLnNldChuZXh0LnN1YmFycmF5KDAsIG4gLSBvZmZzZXQpLCBvZmZzZXQpXG4gICAgICAgIHRoaXMuI2J1ZmZlcnNbMF0gPSBuZXh0LnN1YmFycmF5KG4gLSBvZmZzZXQpXG4gICAgICAgIGJyZWFrXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBidWZmZXIuc2V0KHRoaXMuI2J1ZmZlcnMuc2hpZnQoKSwgb2Zmc2V0KVxuICAgICAgICBvZmZzZXQgKz0gbmV4dC5sZW5ndGhcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLiNieXRlT2Zmc2V0IC09IG5cblxuICAgIHJldHVybiBidWZmZXJcbiAgfVxuXG4gIHBhcnNlQ2xvc2VCb2R5IChkYXRhKSB7XG4gICAgYXNzZXJ0KGRhdGEubGVuZ3RoICE9PSAxKVxuXG4gICAgLy8gaHR0cHM6Ly9kYXRhdHJhY2tlci5pZXRmLm9yZy9kb2MvaHRtbC9yZmM2NDU1I3NlY3Rpb24tNy4xLjVcbiAgICAvKiogQHR5cGUge251bWJlcnx1bmRlZmluZWR9ICovXG4gICAgbGV0IGNvZGVcblxuICAgIGlmIChkYXRhLmxlbmd0aCA+PSAyKSB7XG4gICAgICAvLyBfVGhlIFdlYlNvY2tldCBDb25uZWN0aW9uIENsb3NlIENvZGVfIGlzXG4gICAgICAvLyBkZWZpbmVkIGFzIHRoZSBzdGF0dXMgY29kZSAoU2VjdGlvbiA3LjQpIGNvbnRhaW5lZCBpbiB0aGUgZmlyc3QgQ2xvc2VcbiAgICAgIC8vIGNvbnRyb2wgZnJhbWUgcmVjZWl2ZWQgYnkgdGhlIGFwcGxpY2F0aW9uXG4gICAgICBjb2RlID0gZGF0YS5yZWFkVUludDE2QkUoMClcbiAgICB9XG5cbiAgICBpZiAoY29kZSAhPT0gdW5kZWZpbmVkICYmICFpc1ZhbGlkU3RhdHVzQ29kZShjb2RlKSkge1xuICAgICAgcmV0dXJuIHsgY29kZTogMTAwMiwgcmVhc29uOiAnSW52YWxpZCBzdGF0dXMgY29kZScsIGVycm9yOiB0cnVlIH1cbiAgICB9XG5cbiAgICAvLyBodHRwczovL2RhdGF0cmFja2VyLmlldGYub3JnL2RvYy9odG1sL3JmYzY0NTUjc2VjdGlvbi03LjEuNlxuICAgIC8qKiBAdHlwZSB7QnVmZmVyfSAqL1xuICAgIGxldCByZWFzb24gPSBkYXRhLnN1YmFycmF5KDIpXG5cbiAgICAvLyBSZW1vdmUgQk9NXG4gICAgaWYgKHJlYXNvblswXSA9PT0gMHhFRiAmJiByZWFzb25bMV0gPT09IDB4QkIgJiYgcmVhc29uWzJdID09PSAweEJGKSB7XG4gICAgICByZWFzb24gPSByZWFzb24uc3ViYXJyYXkoMylcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgcmVhc29uID0gdXRmOERlY29kZShyZWFzb24pXG4gICAgfSBjYXRjaCB7XG4gICAgICByZXR1cm4geyBjb2RlOiAxMDA3LCByZWFzb246ICdJbnZhbGlkIFVURi04JywgZXJyb3I6IHRydWUgfVxuICAgIH1cblxuICAgIHJldHVybiB7IGNvZGUsIHJlYXNvbiwgZXJyb3I6IGZhbHNlIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBQYXJzZXMgY29udHJvbCBmcmFtZXMuXG4gICAqIEBwYXJhbSB7QnVmZmVyfSBib2R5XG4gICAqL1xuICBwYXJzZUNvbnRyb2xGcmFtZSAoYm9keSkge1xuICAgIGNvbnN0IHsgb3Bjb2RlLCBwYXlsb2FkTGVuZ3RoIH0gPSB0aGlzLiNpbmZvXG5cbiAgICBpZiAob3Bjb2RlID09PSBvcGNvZGVzLkNMT1NFKSB7XG4gICAgICBpZiAocGF5bG9hZExlbmd0aCA9PT0gMSkge1xuICAgICAgICBmYWlsV2Vic29ja2V0Q29ubmVjdGlvbih0aGlzLndzLCAnUmVjZWl2ZWQgY2xvc2UgZnJhbWUgd2l0aCBhIDEtYnl0ZSBib2R5LicpXG4gICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgfVxuXG4gICAgICB0aGlzLiNpbmZvLmNsb3NlSW5mbyA9IHRoaXMucGFyc2VDbG9zZUJvZHkoYm9keSlcblxuICAgICAgaWYgKHRoaXMuI2luZm8uY2xvc2VJbmZvLmVycm9yKSB7XG4gICAgICAgIGNvbnN0IHsgY29kZSwgcmVhc29uIH0gPSB0aGlzLiNpbmZvLmNsb3NlSW5mb1xuXG4gICAgICAgIGNsb3NlV2ViU29ja2V0Q29ubmVjdGlvbih0aGlzLndzLCBjb2RlLCByZWFzb24sIHJlYXNvbi5sZW5ndGgpXG4gICAgICAgIGZhaWxXZWJzb2NrZXRDb25uZWN0aW9uKHRoaXMud3MsIHJlYXNvbilcbiAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLndzW2tTZW50Q2xvc2VdICE9PSBzZW50Q2xvc2VGcmFtZVN0YXRlLlNFTlQpIHtcbiAgICAgICAgLy8gSWYgYW4gZW5kcG9pbnQgcmVjZWl2ZXMgYSBDbG9zZSBmcmFtZSBhbmQgZGlkIG5vdCBwcmV2aW91c2x5IHNlbmQgYVxuICAgICAgICAvLyBDbG9zZSBmcmFtZSwgdGhlIGVuZHBvaW50IE1VU1Qgc2VuZCBhIENsb3NlIGZyYW1lIGluIHJlc3BvbnNlLiAgKFdoZW5cbiAgICAgICAgLy8gc2VuZGluZyBhIENsb3NlIGZyYW1lIGluIHJlc3BvbnNlLCB0aGUgZW5kcG9pbnQgdHlwaWNhbGx5IGVjaG9zIHRoZVxuICAgICAgICAvLyBzdGF0dXMgY29kZSBpdCByZWNlaXZlZC4pXG4gICAgICAgIGxldCBib2R5ID0gZW1wdHlCdWZmZXJcbiAgICAgICAgaWYgKHRoaXMuI2luZm8uY2xvc2VJbmZvLmNvZGUpIHtcbiAgICAgICAgICBib2R5ID0gQnVmZmVyLmFsbG9jVW5zYWZlKDIpXG4gICAgICAgICAgYm9keS53cml0ZVVJbnQxNkJFKHRoaXMuI2luZm8uY2xvc2VJbmZvLmNvZGUsIDApXG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgY2xvc2VGcmFtZSA9IG5ldyBXZWJzb2NrZXRGcmFtZVNlbmQoYm9keSlcblxuICAgICAgICB0aGlzLndzW2tSZXNwb25zZV0uc29ja2V0LndyaXRlKFxuICAgICAgICAgIGNsb3NlRnJhbWUuY3JlYXRlRnJhbWUob3Bjb2Rlcy5DTE9TRSksXG4gICAgICAgICAgKGVycikgPT4ge1xuICAgICAgICAgICAgaWYgKCFlcnIpIHtcbiAgICAgICAgICAgICAgdGhpcy53c1trU2VudENsb3NlXSA9IHNlbnRDbG9zZUZyYW1lU3RhdGUuU0VOVFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgKVxuICAgICAgfVxuXG4gICAgICAvLyBVcG9uIGVpdGhlciBzZW5kaW5nIG9yIHJlY2VpdmluZyBhIENsb3NlIGNvbnRyb2wgZnJhbWUsIGl0IGlzIHNhaWRcbiAgICAgIC8vIHRoYXQgX1RoZSBXZWJTb2NrZXQgQ2xvc2luZyBIYW5kc2hha2UgaXMgU3RhcnRlZF8gYW5kIHRoYXQgdGhlXG4gICAgICAvLyBXZWJTb2NrZXQgY29ubmVjdGlvbiBpcyBpbiB0aGUgQ0xPU0lORyBzdGF0ZS5cbiAgICAgIHRoaXMud3Nba1JlYWR5U3RhdGVdID0gc3RhdGVzLkNMT1NJTkdcbiAgICAgIHRoaXMud3Nba1JlY2VpdmVkQ2xvc2VdID0gdHJ1ZVxuXG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9IGVsc2UgaWYgKG9wY29kZSA9PT0gb3Bjb2Rlcy5QSU5HKSB7XG4gICAgICAvLyBVcG9uIHJlY2VpcHQgb2YgYSBQaW5nIGZyYW1lLCBhbiBlbmRwb2ludCBNVVNUIHNlbmQgYSBQb25nIGZyYW1lIGluXG4gICAgICAvLyByZXNwb25zZSwgdW5sZXNzIGl0IGFscmVhZHkgcmVjZWl2ZWQgYSBDbG9zZSBmcmFtZS5cbiAgICAgIC8vIEEgUG9uZyBmcmFtZSBzZW50IGluIHJlc3BvbnNlIHRvIGEgUGluZyBmcmFtZSBtdXN0IGhhdmUgaWRlbnRpY2FsXG4gICAgICAvLyBcIkFwcGxpY2F0aW9uIGRhdGFcIlxuXG4gICAgICBpZiAoIXRoaXMud3Nba1JlY2VpdmVkQ2xvc2VdKSB7XG4gICAgICAgIGNvbnN0IGZyYW1lID0gbmV3IFdlYnNvY2tldEZyYW1lU2VuZChib2R5KVxuXG4gICAgICAgIHRoaXMud3Nba1Jlc3BvbnNlXS5zb2NrZXQud3JpdGUoZnJhbWUuY3JlYXRlRnJhbWUob3Bjb2Rlcy5QT05HKSlcblxuICAgICAgICBpZiAoY2hhbm5lbHMucGluZy5oYXNTdWJzY3JpYmVycykge1xuICAgICAgICAgIGNoYW5uZWxzLnBpbmcucHVibGlzaCh7XG4gICAgICAgICAgICBwYXlsb2FkOiBib2R5XG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAob3Bjb2RlID09PSBvcGNvZGVzLlBPTkcpIHtcbiAgICAgIC8vIEEgUG9uZyBmcmFtZSBNQVkgYmUgc2VudCB1bnNvbGljaXRlZC4gIFRoaXMgc2VydmVzIGFzIGFcbiAgICAgIC8vIHVuaWRpcmVjdGlvbmFsIGhlYXJ0YmVhdC4gIEEgcmVzcG9uc2UgdG8gYW4gdW5zb2xpY2l0ZWQgUG9uZyBmcmFtZSBpc1xuICAgICAgLy8gbm90IGV4cGVjdGVkLlxuXG4gICAgICBpZiAoY2hhbm5lbHMucG9uZy5oYXNTdWJzY3JpYmVycykge1xuICAgICAgICBjaGFubmVscy5wb25nLnB1Ymxpc2goe1xuICAgICAgICAgIHBheWxvYWQ6IGJvZHlcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZVxuICB9XG5cbiAgZ2V0IGNsb3NpbmdJbmZvICgpIHtcbiAgICByZXR1cm4gdGhpcy4jaW5mby5jbG9zZUluZm9cbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgQnl0ZVBhcnNlclxufVxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7IFdlYnNvY2tldEZyYW1lU2VuZCB9ID0gcmVxdWlyZSgnLi9mcmFtZScpXG5jb25zdCB7IG9wY29kZXMsIHNlbmRIaW50cyB9ID0gcmVxdWlyZSgnLi9jb25zdGFudHMnKVxuY29uc3QgRml4ZWRRdWV1ZSA9IHJlcXVpcmUoJy4uLy4uL2Rpc3BhdGNoZXIvZml4ZWQtcXVldWUnKVxuXG4vKiogQHR5cGUge3R5cGVvZiBVaW50OEFycmF5fSAqL1xuY29uc3QgRmFzdEJ1ZmZlciA9IEJ1ZmZlcltTeW1ib2wuc3BlY2llc11cblxuLyoqXG4gKiBAdHlwZWRlZiB7b2JqZWN0fSBTZW5kUXVldWVOb2RlXG4gKiBAcHJvcGVydHkge1Byb21pc2U8dm9pZD4gfCBudWxsfSBwcm9taXNlXG4gKiBAcHJvcGVydHkgeygoLi4uYXJnczogYW55W10pID0+IGFueSl9IGNhbGxiYWNrXG4gKiBAcHJvcGVydHkge0J1ZmZlciB8IG51bGx9IGZyYW1lXG4gKi9cblxuY2xhc3MgU2VuZFF1ZXVlIHtcbiAgLyoqXG4gICAqIEB0eXBlIHtGaXhlZFF1ZXVlfVxuICAgKi9cbiAgI3F1ZXVlID0gbmV3IEZpeGVkUXVldWUoKVxuXG4gIC8qKlxuICAgKiBAdHlwZSB7Ym9vbGVhbn1cbiAgICovXG4gICNydW5uaW5nID0gZmFsc2VcblxuICAvKiogQHR5cGUge2ltcG9ydCgnbm9kZTpuZXQnKS5Tb2NrZXR9ICovXG4gICNzb2NrZXRcblxuICBjb25zdHJ1Y3RvciAoc29ja2V0KSB7XG4gICAgdGhpcy4jc29ja2V0ID0gc29ja2V0XG4gIH1cblxuICBhZGQgKGl0ZW0sIGNiLCBoaW50KSB7XG4gICAgaWYgKGhpbnQgIT09IHNlbmRIaW50cy5ibG9iKSB7XG4gICAgICBjb25zdCBmcmFtZSA9IGNyZWF0ZUZyYW1lKGl0ZW0sIGhpbnQpXG4gICAgICBpZiAoIXRoaXMuI3J1bm5pbmcpIHtcbiAgICAgICAgLy8gZmFzdC1wYXRoXG4gICAgICAgIHRoaXMuI3NvY2tldC53cml0ZShmcmFtZSwgY2IpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvKiogQHR5cGUge1NlbmRRdWV1ZU5vZGV9ICovXG4gICAgICAgIGNvbnN0IG5vZGUgPSB7XG4gICAgICAgICAgcHJvbWlzZTogbnVsbCxcbiAgICAgICAgICBjYWxsYmFjazogY2IsXG4gICAgICAgICAgZnJhbWVcbiAgICAgICAgfVxuICAgICAgICB0aGlzLiNxdWV1ZS5wdXNoKG5vZGUpXG4gICAgICB9XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICAvKiogQHR5cGUge1NlbmRRdWV1ZU5vZGV9ICovXG4gICAgY29uc3Qgbm9kZSA9IHtcbiAgICAgIHByb21pc2U6IGl0ZW0uYXJyYXlCdWZmZXIoKS50aGVuKChhYikgPT4ge1xuICAgICAgICBub2RlLnByb21pc2UgPSBudWxsXG4gICAgICAgIG5vZGUuZnJhbWUgPSBjcmVhdGVGcmFtZShhYiwgaGludClcbiAgICAgIH0pLFxuICAgICAgY2FsbGJhY2s6IGNiLFxuICAgICAgZnJhbWU6IG51bGxcbiAgICB9XG5cbiAgICB0aGlzLiNxdWV1ZS5wdXNoKG5vZGUpXG5cbiAgICBpZiAoIXRoaXMuI3J1bm5pbmcpIHtcbiAgICAgIHRoaXMuI3J1bigpXG4gICAgfVxuICB9XG5cbiAgYXN5bmMgI3J1biAoKSB7XG4gICAgdGhpcy4jcnVubmluZyA9IHRydWVcbiAgICBjb25zdCBxdWV1ZSA9IHRoaXMuI3F1ZXVlXG4gICAgd2hpbGUgKCFxdWV1ZS5pc0VtcHR5KCkpIHtcbiAgICAgIGNvbnN0IG5vZGUgPSBxdWV1ZS5zaGlmdCgpXG4gICAgICAvLyB3YWl0IHBlbmRpbmcgcHJvbWlzZVxuICAgICAgaWYgKG5vZGUucHJvbWlzZSAhPT0gbnVsbCkge1xuICAgICAgICBhd2FpdCBub2RlLnByb21pc2VcbiAgICAgIH1cbiAgICAgIC8vIHdyaXRlXG4gICAgICB0aGlzLiNzb2NrZXQud3JpdGUobm9kZS5mcmFtZSwgbm9kZS5jYWxsYmFjaylcbiAgICAgIC8vIGNsZWFudXBcbiAgICAgIG5vZGUuY2FsbGJhY2sgPSBub2RlLmZyYW1lID0gbnVsbFxuICAgIH1cbiAgICB0aGlzLiNydW5uaW5nID0gZmFsc2VcbiAgfVxufVxuXG5mdW5jdGlvbiBjcmVhdGVGcmFtZSAoZGF0YSwgaGludCkge1xuICByZXR1cm4gbmV3IFdlYnNvY2tldEZyYW1lU2VuZCh0b0J1ZmZlcihkYXRhLCBoaW50KSkuY3JlYXRlRnJhbWUoaGludCA9PT0gc2VuZEhpbnRzLnN0cmluZyA/IG9wY29kZXMuVEVYVCA6IG9wY29kZXMuQklOQVJZKVxufVxuXG5mdW5jdGlvbiB0b0J1ZmZlciAoZGF0YSwgaGludCkge1xuICBzd2l0Y2ggKGhpbnQpIHtcbiAgICBjYXNlIHNlbmRIaW50cy5zdHJpbmc6XG4gICAgICByZXR1cm4gQnVmZmVyLmZyb20oZGF0YSlcbiAgICBjYXNlIHNlbmRIaW50cy5hcnJheUJ1ZmZlcjpcbiAgICBjYXNlIHNlbmRIaW50cy5ibG9iOlxuICAgICAgcmV0dXJuIG5ldyBGYXN0QnVmZmVyKGRhdGEpXG4gICAgY2FzZSBzZW5kSGludHMudHlwZWRBcnJheTpcbiAgICAgIHJldHVybiBuZXcgRmFzdEJ1ZmZlcihkYXRhLmJ1ZmZlciwgZGF0YS5ieXRlT2Zmc2V0LCBkYXRhLmJ5dGVMZW5ndGgpXG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7IFNlbmRRdWV1ZSB9XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHsgd2ViaWRsIH0gPSByZXF1aXJlKCcuLi9mZXRjaC93ZWJpZGwnKVxuY29uc3QgeyBVUkxTZXJpYWxpemVyIH0gPSByZXF1aXJlKCcuLi9mZXRjaC9kYXRhLXVybCcpXG5jb25zdCB7IGVudmlyb25tZW50U2V0dGluZ3NPYmplY3QgfSA9IHJlcXVpcmUoJy4uL2ZldGNoL3V0aWwnKVxuY29uc3QgeyBzdGF0aWNQcm9wZXJ0eURlc2NyaXB0b3JzLCBzdGF0ZXMsIHNlbnRDbG9zZUZyYW1lU3RhdGUsIHNlbmRIaW50cyB9ID0gcmVxdWlyZSgnLi9jb25zdGFudHMnKVxuY29uc3Qge1xuICBrV2ViU29ja2V0VVJMLFxuICBrUmVhZHlTdGF0ZSxcbiAga0NvbnRyb2xsZXIsXG4gIGtCaW5hcnlUeXBlLFxuICBrUmVzcG9uc2UsXG4gIGtTZW50Q2xvc2UsXG4gIGtCeXRlUGFyc2VyXG59ID0gcmVxdWlyZSgnLi9zeW1ib2xzJylcbmNvbnN0IHtcbiAgaXNDb25uZWN0aW5nLFxuICBpc0VzdGFibGlzaGVkLFxuICBpc0Nsb3NpbmcsXG4gIGlzVmFsaWRTdWJwcm90b2NvbCxcbiAgZmlyZUV2ZW50XG59ID0gcmVxdWlyZSgnLi91dGlsJylcbmNvbnN0IHsgZXN0YWJsaXNoV2ViU29ja2V0Q29ubmVjdGlvbiwgY2xvc2VXZWJTb2NrZXRDb25uZWN0aW9uIH0gPSByZXF1aXJlKCcuL2Nvbm5lY3Rpb24nKVxuY29uc3QgeyBCeXRlUGFyc2VyIH0gPSByZXF1aXJlKCcuL3JlY2VpdmVyJylcbmNvbnN0IHsga0VudW1lcmFibGVQcm9wZXJ0eSwgaXNCbG9iTGlrZSB9ID0gcmVxdWlyZSgnLi4vLi4vY29yZS91dGlsJylcbmNvbnN0IHsgZ2V0R2xvYmFsRGlzcGF0Y2hlciB9ID0gcmVxdWlyZSgnLi4vLi4vZ2xvYmFsJylcbmNvbnN0IHsgdHlwZXMgfSA9IHJlcXVpcmUoJ25vZGU6dXRpbCcpXG5jb25zdCB7IEVycm9yRXZlbnQsIENsb3NlRXZlbnQgfSA9IHJlcXVpcmUoJy4vZXZlbnRzJylcbmNvbnN0IHsgU2VuZFF1ZXVlIH0gPSByZXF1aXJlKCcuL3NlbmRlcicpXG5cbi8vIGh0dHBzOi8vd2Vic29ja2V0cy5zcGVjLndoYXR3Zy5vcmcvI2ludGVyZmFjZS1kZWZpbml0aW9uXG5jbGFzcyBXZWJTb2NrZXQgZXh0ZW5kcyBFdmVudFRhcmdldCB7XG4gICNldmVudHMgPSB7XG4gICAgb3BlbjogbnVsbCxcbiAgICBlcnJvcjogbnVsbCxcbiAgICBjbG9zZTogbnVsbCxcbiAgICBtZXNzYWdlOiBudWxsXG4gIH1cblxuICAjYnVmZmVyZWRBbW91bnQgPSAwXG4gICNwcm90b2NvbCA9ICcnXG4gICNleHRlbnNpb25zID0gJydcblxuICAvKiogQHR5cGUge1NlbmRRdWV1ZX0gKi9cbiAgI3NlbmRRdWV1ZVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gdXJsXG4gICAqIEBwYXJhbSB7c3RyaW5nfHN0cmluZ1tdfSBwcm90b2NvbHNcbiAgICovXG4gIGNvbnN0cnVjdG9yICh1cmwsIHByb3RvY29scyA9IFtdKSB7XG4gICAgc3VwZXIoKVxuXG4gICAgd2ViaWRsLnV0aWwubWFya0FzVW5jbG9uZWFibGUodGhpcylcblxuICAgIGNvbnN0IHByZWZpeCA9ICdXZWJTb2NrZXQgY29uc3RydWN0b3InXG4gICAgd2ViaWRsLmFyZ3VtZW50TGVuZ3RoQ2hlY2soYXJndW1lbnRzLCAxLCBwcmVmaXgpXG5cbiAgICBjb25zdCBvcHRpb25zID0gd2ViaWRsLmNvbnZlcnRlcnNbJ0RPTVN0cmluZyBvciBzZXF1ZW5jZTxET01TdHJpbmc+IG9yIFdlYlNvY2tldEluaXQnXShwcm90b2NvbHMsIHByZWZpeCwgJ29wdGlvbnMnKVxuXG4gICAgdXJsID0gd2ViaWRsLmNvbnZlcnRlcnMuVVNWU3RyaW5nKHVybCwgcHJlZml4LCAndXJsJylcbiAgICBwcm90b2NvbHMgPSBvcHRpb25zLnByb3RvY29sc1xuXG4gICAgLy8gMS4gTGV0IGJhc2VVUkwgYmUgdGhpcydzIHJlbGV2YW50IHNldHRpbmdzIG9iamVjdCdzIEFQSSBiYXNlIFVSTC5cbiAgICBjb25zdCBiYXNlVVJMID0gZW52aXJvbm1lbnRTZXR0aW5nc09iamVjdC5zZXR0aW5nc09iamVjdC5iYXNlVXJsXG5cbiAgICAvLyAxLiBMZXQgdXJsUmVjb3JkIGJlIHRoZSByZXN1bHQgb2YgYXBwbHlpbmcgdGhlIFVSTCBwYXJzZXIgdG8gdXJsIHdpdGggYmFzZVVSTC5cbiAgICBsZXQgdXJsUmVjb3JkXG5cbiAgICB0cnkge1xuICAgICAgdXJsUmVjb3JkID0gbmV3IFVSTCh1cmwsIGJhc2VVUkwpXG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgLy8gMy4gSWYgdXJsUmVjb3JkIGlzIGZhaWx1cmUsIHRoZW4gdGhyb3cgYSBcIlN5bnRheEVycm9yXCIgRE9NRXhjZXB0aW9uLlxuICAgICAgdGhyb3cgbmV3IERPTUV4Y2VwdGlvbihlLCAnU3ludGF4RXJyb3InKVxuICAgIH1cblxuICAgIC8vIDQuIElmIHVybFJlY29yZFx1MjAxOXMgc2NoZW1lIGlzIFwiaHR0cFwiLCB0aGVuIHNldCB1cmxSZWNvcmRcdTIwMTlzIHNjaGVtZSB0byBcIndzXCIuXG4gICAgaWYgKHVybFJlY29yZC5wcm90b2NvbCA9PT0gJ2h0dHA6Jykge1xuICAgICAgdXJsUmVjb3JkLnByb3RvY29sID0gJ3dzOidcbiAgICB9IGVsc2UgaWYgKHVybFJlY29yZC5wcm90b2NvbCA9PT0gJ2h0dHBzOicpIHtcbiAgICAgIC8vIDUuIE90aGVyd2lzZSwgaWYgdXJsUmVjb3JkXHUyMDE5cyBzY2hlbWUgaXMgXCJodHRwc1wiLCBzZXQgdXJsUmVjb3JkXHUyMDE5cyBzY2hlbWUgdG8gXCJ3c3NcIi5cbiAgICAgIHVybFJlY29yZC5wcm90b2NvbCA9ICd3c3M6J1xuICAgIH1cblxuICAgIC8vIDYuIElmIHVybFJlY29yZFx1MjAxOXMgc2NoZW1lIGlzIG5vdCBcIndzXCIgb3IgXCJ3c3NcIiwgdGhlbiB0aHJvdyBhIFwiU3ludGF4RXJyb3JcIiBET01FeGNlcHRpb24uXG4gICAgaWYgKHVybFJlY29yZC5wcm90b2NvbCAhPT0gJ3dzOicgJiYgdXJsUmVjb3JkLnByb3RvY29sICE9PSAnd3NzOicpIHtcbiAgICAgIHRocm93IG5ldyBET01FeGNlcHRpb24oXG4gICAgICAgIGBFeHBlY3RlZCBhIHdzOiBvciB3c3M6IHByb3RvY29sLCBnb3QgJHt1cmxSZWNvcmQucHJvdG9jb2x9YCxcbiAgICAgICAgJ1N5bnRheEVycm9yJ1xuICAgICAgKVxuICAgIH1cblxuICAgIC8vIDcuIElmIHVybFJlY29yZFx1MjAxOXMgZnJhZ21lbnQgaXMgbm9uLW51bGwsIHRoZW4gdGhyb3cgYSBcIlN5bnRheEVycm9yXCJcbiAgICAvLyAgICBET01FeGNlcHRpb24uXG4gICAgaWYgKHVybFJlY29yZC5oYXNoIHx8IHVybFJlY29yZC5ocmVmLmVuZHNXaXRoKCcjJykpIHtcbiAgICAgIHRocm93IG5ldyBET01FeGNlcHRpb24oJ0dvdCBmcmFnbWVudCcsICdTeW50YXhFcnJvcicpXG4gICAgfVxuXG4gICAgLy8gOC4gSWYgcHJvdG9jb2xzIGlzIGEgc3RyaW5nLCBzZXQgcHJvdG9jb2xzIHRvIGEgc2VxdWVuY2UgY29uc2lzdGluZ1xuICAgIC8vICAgIG9mIGp1c3QgdGhhdCBzdHJpbmcuXG4gICAgaWYgKHR5cGVvZiBwcm90b2NvbHMgPT09ICdzdHJpbmcnKSB7XG4gICAgICBwcm90b2NvbHMgPSBbcHJvdG9jb2xzXVxuICAgIH1cblxuICAgIC8vIDkuIElmIGFueSBvZiB0aGUgdmFsdWVzIGluIHByb3RvY29scyBvY2N1ciBtb3JlIHRoYW4gb25jZSBvciBvdGhlcndpc2VcbiAgICAvLyAgICBmYWlsIHRvIG1hdGNoIHRoZSByZXF1aXJlbWVudHMgZm9yIGVsZW1lbnRzIHRoYXQgY29tcHJpc2UgdGhlIHZhbHVlXG4gICAgLy8gICAgb2YgYFNlYy1XZWJTb2NrZXQtUHJvdG9jb2xgIGZpZWxkcyBhcyBkZWZpbmVkIGJ5IFRoZSBXZWJTb2NrZXRcbiAgICAvLyAgICBwcm90b2NvbCwgdGhlbiB0aHJvdyBhIFwiU3ludGF4RXJyb3JcIiBET01FeGNlcHRpb24uXG4gICAgaWYgKHByb3RvY29scy5sZW5ndGggIT09IG5ldyBTZXQocHJvdG9jb2xzLm1hcChwID0+IHAudG9Mb3dlckNhc2UoKSkpLnNpemUpIHtcbiAgICAgIHRocm93IG5ldyBET01FeGNlcHRpb24oJ0ludmFsaWQgU2VjLVdlYlNvY2tldC1Qcm90b2NvbCB2YWx1ZScsICdTeW50YXhFcnJvcicpXG4gICAgfVxuXG4gICAgaWYgKHByb3RvY29scy5sZW5ndGggPiAwICYmICFwcm90b2NvbHMuZXZlcnkocCA9PiBpc1ZhbGlkU3VicHJvdG9jb2wocCkpKSB7XG4gICAgICB0aHJvdyBuZXcgRE9NRXhjZXB0aW9uKCdJbnZhbGlkIFNlYy1XZWJTb2NrZXQtUHJvdG9jb2wgdmFsdWUnLCAnU3ludGF4RXJyb3InKVxuICAgIH1cblxuICAgIC8vIDEwLiBTZXQgdGhpcydzIHVybCB0byB1cmxSZWNvcmQuXG4gICAgdGhpc1trV2ViU29ja2V0VVJMXSA9IG5ldyBVUkwodXJsUmVjb3JkLmhyZWYpXG5cbiAgICAvLyAxMS4gTGV0IGNsaWVudCBiZSB0aGlzJ3MgcmVsZXZhbnQgc2V0dGluZ3Mgb2JqZWN0LlxuICAgIGNvbnN0IGNsaWVudCA9IGVudmlyb25tZW50U2V0dGluZ3NPYmplY3Quc2V0dGluZ3NPYmplY3RcblxuICAgIC8vIDEyLiBSdW4gdGhpcyBzdGVwIGluIHBhcmFsbGVsOlxuXG4gICAgLy8gICAgMS4gRXN0YWJsaXNoIGEgV2ViU29ja2V0IGNvbm5lY3Rpb24gZ2l2ZW4gdXJsUmVjb3JkLCBwcm90b2NvbHMsXG4gICAgLy8gICAgICAgYW5kIGNsaWVudC5cbiAgICB0aGlzW2tDb250cm9sbGVyXSA9IGVzdGFibGlzaFdlYlNvY2tldENvbm5lY3Rpb24oXG4gICAgICB1cmxSZWNvcmQsXG4gICAgICBwcm90b2NvbHMsXG4gICAgICBjbGllbnQsXG4gICAgICB0aGlzLFxuICAgICAgKHJlc3BvbnNlLCBleHRlbnNpb25zKSA9PiB0aGlzLiNvbkNvbm5lY3Rpb25Fc3RhYmxpc2hlZChyZXNwb25zZSwgZXh0ZW5zaW9ucyksXG4gICAgICBvcHRpb25zXG4gICAgKVxuXG4gICAgLy8gRWFjaCBXZWJTb2NrZXQgb2JqZWN0IGhhcyBhbiBhc3NvY2lhdGVkIHJlYWR5IHN0YXRlLCB3aGljaCBpcyBhXG4gICAgLy8gbnVtYmVyIHJlcHJlc2VudGluZyB0aGUgc3RhdGUgb2YgdGhlIGNvbm5lY3Rpb24uIEluaXRpYWxseSBpdCBtdXN0XG4gICAgLy8gYmUgQ09OTkVDVElORyAoMCkuXG4gICAgdGhpc1trUmVhZHlTdGF0ZV0gPSBXZWJTb2NrZXQuQ09OTkVDVElOR1xuXG4gICAgdGhpc1trU2VudENsb3NlXSA9IHNlbnRDbG9zZUZyYW1lU3RhdGUuTk9UX1NFTlRcblxuICAgIC8vIFRoZSBleHRlbnNpb25zIGF0dHJpYnV0ZSBtdXN0IGluaXRpYWxseSByZXR1cm4gdGhlIGVtcHR5IHN0cmluZy5cblxuICAgIC8vIFRoZSBwcm90b2NvbCBhdHRyaWJ1dGUgbXVzdCBpbml0aWFsbHkgcmV0dXJuIHRoZSBlbXB0eSBzdHJpbmcuXG5cbiAgICAvLyBFYWNoIFdlYlNvY2tldCBvYmplY3QgaGFzIGFuIGFzc29jaWF0ZWQgYmluYXJ5IHR5cGUsIHdoaWNoIGlzIGFcbiAgICAvLyBCaW5hcnlUeXBlLiBJbml0aWFsbHkgaXQgbXVzdCBiZSBcImJsb2JcIi5cbiAgICB0aGlzW2tCaW5hcnlUeXBlXSA9ICdibG9iJ1xuICB9XG5cbiAgLyoqXG4gICAqIEBzZWUgaHR0cHM6Ly93ZWJzb2NrZXRzLnNwZWMud2hhdHdnLm9yZy8jZG9tLXdlYnNvY2tldC1jbG9zZVxuICAgKiBAcGFyYW0ge251bWJlcnx1bmRlZmluZWR9IGNvZGVcbiAgICogQHBhcmFtIHtzdHJpbmd8dW5kZWZpbmVkfSByZWFzb25cbiAgICovXG4gIGNsb3NlIChjb2RlID0gdW5kZWZpbmVkLCByZWFzb24gPSB1bmRlZmluZWQpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBXZWJTb2NrZXQpXG5cbiAgICBjb25zdCBwcmVmaXggPSAnV2ViU29ja2V0LmNsb3NlJ1xuXG4gICAgaWYgKGNvZGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgY29kZSA9IHdlYmlkbC5jb252ZXJ0ZXJzWyd1bnNpZ25lZCBzaG9ydCddKGNvZGUsIHByZWZpeCwgJ2NvZGUnLCB7IGNsYW1wOiB0cnVlIH0pXG4gICAgfVxuXG4gICAgaWYgKHJlYXNvbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZWFzb24gPSB3ZWJpZGwuY29udmVydGVycy5VU1ZTdHJpbmcocmVhc29uLCBwcmVmaXgsICdyZWFzb24nKVxuICAgIH1cblxuICAgIC8vIDEuIElmIGNvZGUgaXMgcHJlc2VudCwgYnV0IGlzIG5laXRoZXIgYW4gaW50ZWdlciBlcXVhbCB0byAxMDAwIG5vciBhblxuICAgIC8vICAgIGludGVnZXIgaW4gdGhlIHJhbmdlIDMwMDAgdG8gNDk5OSwgaW5jbHVzaXZlLCB0aHJvdyBhblxuICAgIC8vICAgIFwiSW52YWxpZEFjY2Vzc0Vycm9yXCIgRE9NRXhjZXB0aW9uLlxuICAgIGlmIChjb2RlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmIChjb2RlICE9PSAxMDAwICYmIChjb2RlIDwgMzAwMCB8fCBjb2RlID4gNDk5OSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IERPTUV4Y2VwdGlvbignaW52YWxpZCBjb2RlJywgJ0ludmFsaWRBY2Nlc3NFcnJvcicpXG4gICAgICB9XG4gICAgfVxuXG4gICAgbGV0IHJlYXNvbkJ5dGVMZW5ndGggPSAwXG5cbiAgICAvLyAyLiBJZiByZWFzb24gaXMgcHJlc2VudCwgdGhlbiBydW4gdGhlc2Ugc3Vic3RlcHM6XG4gICAgaWYgKHJlYXNvbiAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyAxLiBMZXQgcmVhc29uQnl0ZXMgYmUgdGhlIHJlc3VsdCBvZiBlbmNvZGluZyByZWFzb24uXG4gICAgICAvLyAyLiBJZiByZWFzb25CeXRlcyBpcyBsb25nZXIgdGhhbiAxMjMgYnl0ZXMsIHRoZW4gdGhyb3cgYVxuICAgICAgLy8gICAgXCJTeW50YXhFcnJvclwiIERPTUV4Y2VwdGlvbi5cbiAgICAgIHJlYXNvbkJ5dGVMZW5ndGggPSBCdWZmZXIuYnl0ZUxlbmd0aChyZWFzb24pXG5cbiAgICAgIGlmIChyZWFzb25CeXRlTGVuZ3RoID4gMTIzKSB7XG4gICAgICAgIHRocm93IG5ldyBET01FeGNlcHRpb24oXG4gICAgICAgICAgYFJlYXNvbiBtdXN0IGJlIGxlc3MgdGhhbiAxMjMgYnl0ZXM7IHJlY2VpdmVkICR7cmVhc29uQnl0ZUxlbmd0aH1gLFxuICAgICAgICAgICdTeW50YXhFcnJvcidcbiAgICAgICAgKVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIDMuIFJ1biB0aGUgZmlyc3QgbWF0Y2hpbmcgc3RlcHMgZnJvbSB0aGUgZm9sbG93aW5nIGxpc3Q6XG4gICAgY2xvc2VXZWJTb2NrZXRDb25uZWN0aW9uKHRoaXMsIGNvZGUsIHJlYXNvbiwgcmVhc29uQnl0ZUxlbmd0aClcbiAgfVxuXG4gIC8qKlxuICAgKiBAc2VlIGh0dHBzOi8vd2Vic29ja2V0cy5zcGVjLndoYXR3Zy5vcmcvI2RvbS13ZWJzb2NrZXQtc2VuZFxuICAgKiBAcGFyYW0ge05vZGVKUy5UeXBlZEFycmF5fEFycmF5QnVmZmVyfEJsb2J8c3RyaW5nfSBkYXRhXG4gICAqL1xuICBzZW5kIChkYXRhKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgV2ViU29ja2V0KVxuXG4gICAgY29uc3QgcHJlZml4ID0gJ1dlYlNvY2tldC5zZW5kJ1xuICAgIHdlYmlkbC5hcmd1bWVudExlbmd0aENoZWNrKGFyZ3VtZW50cywgMSwgcHJlZml4KVxuXG4gICAgZGF0YSA9IHdlYmlkbC5jb252ZXJ0ZXJzLldlYlNvY2tldFNlbmREYXRhKGRhdGEsIHByZWZpeCwgJ2RhdGEnKVxuXG4gICAgLy8gMS4gSWYgdGhpcydzIHJlYWR5IHN0YXRlIGlzIENPTk5FQ1RJTkcsIHRoZW4gdGhyb3cgYW5cbiAgICAvLyAgICBcIkludmFsaWRTdGF0ZUVycm9yXCIgRE9NRXhjZXB0aW9uLlxuICAgIGlmIChpc0Nvbm5lY3RpbmcodGhpcykpIHtcbiAgICAgIHRocm93IG5ldyBET01FeGNlcHRpb24oJ1NlbnQgYmVmb3JlIGNvbm5lY3RlZC4nLCAnSW52YWxpZFN0YXRlRXJyb3InKVxuICAgIH1cblxuICAgIC8vIDIuIFJ1biB0aGUgYXBwcm9wcmlhdGUgc2V0IG9mIHN0ZXBzIGZyb20gdGhlIGZvbGxvd2luZyBsaXN0OlxuICAgIC8vIGh0dHBzOi8vZGF0YXRyYWNrZXIuaWV0Zi5vcmcvZG9jL2h0bWwvcmZjNjQ1NSNzZWN0aW9uLTYuMVxuICAgIC8vIGh0dHBzOi8vZGF0YXRyYWNrZXIuaWV0Zi5vcmcvZG9jL2h0bWwvcmZjNjQ1NSNzZWN0aW9uLTUuMlxuXG4gICAgaWYgKCFpc0VzdGFibGlzaGVkKHRoaXMpIHx8IGlzQ2xvc2luZyh0aGlzKSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgLy8gSWYgZGF0YSBpcyBhIHN0cmluZ1xuICAgIGlmICh0eXBlb2YgZGF0YSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIC8vIElmIHRoZSBXZWJTb2NrZXQgY29ubmVjdGlvbiBpcyBlc3RhYmxpc2hlZCBhbmQgdGhlIFdlYlNvY2tldFxuICAgICAgLy8gY2xvc2luZyBoYW5kc2hha2UgaGFzIG5vdCB5ZXQgc3RhcnRlZCwgdGhlbiB0aGUgdXNlciBhZ2VudFxuICAgICAgLy8gbXVzdCBzZW5kIGEgV2ViU29ja2V0IE1lc3NhZ2UgY29tcHJpc2VkIG9mIHRoZSBkYXRhIGFyZ3VtZW50XG4gICAgICAvLyB1c2luZyBhIHRleHQgZnJhbWUgb3Bjb2RlOyBpZiB0aGUgZGF0YSBjYW5ub3QgYmUgc2VudCwgZS5nLlxuICAgICAgLy8gYmVjYXVzZSBpdCB3b3VsZCBuZWVkIHRvIGJlIGJ1ZmZlcmVkIGJ1dCB0aGUgYnVmZmVyIGlzIGZ1bGwsXG4gICAgICAvLyB0aGUgdXNlciBhZ2VudCBtdXN0IGZsYWcgdGhlIFdlYlNvY2tldCBhcyBmdWxsIGFuZCB0aGVuIGNsb3NlXG4gICAgICAvLyB0aGUgV2ViU29ja2V0IGNvbm5lY3Rpb24uIEFueSBpbnZvY2F0aW9uIG9mIHRoaXMgbWV0aG9kIHdpdGggYVxuICAgICAgLy8gc3RyaW5nIGFyZ3VtZW50IHRoYXQgZG9lcyBub3QgdGhyb3cgYW4gZXhjZXB0aW9uIG11c3QgaW5jcmVhc2VcbiAgICAgIC8vIHRoZSBidWZmZXJlZEFtb3VudCBhdHRyaWJ1dGUgYnkgdGhlIG51bWJlciBvZiBieXRlcyBuZWVkZWQgdG9cbiAgICAgIC8vIGV4cHJlc3MgdGhlIGFyZ3VtZW50IGFzIFVURi04LlxuXG4gICAgICBjb25zdCBsZW5ndGggPSBCdWZmZXIuYnl0ZUxlbmd0aChkYXRhKVxuXG4gICAgICB0aGlzLiNidWZmZXJlZEFtb3VudCArPSBsZW5ndGhcbiAgICAgIHRoaXMuI3NlbmRRdWV1ZS5hZGQoZGF0YSwgKCkgPT4ge1xuICAgICAgICB0aGlzLiNidWZmZXJlZEFtb3VudCAtPSBsZW5ndGhcbiAgICAgIH0sIHNlbmRIaW50cy5zdHJpbmcpXG4gICAgfSBlbHNlIGlmICh0eXBlcy5pc0FycmF5QnVmZmVyKGRhdGEpKSB7XG4gICAgICAvLyBJZiB0aGUgV2ViU29ja2V0IGNvbm5lY3Rpb24gaXMgZXN0YWJsaXNoZWQsIGFuZCB0aGUgV2ViU29ja2V0XG4gICAgICAvLyBjbG9zaW5nIGhhbmRzaGFrZSBoYXMgbm90IHlldCBzdGFydGVkLCB0aGVuIHRoZSB1c2VyIGFnZW50IG11c3RcbiAgICAgIC8vIHNlbmQgYSBXZWJTb2NrZXQgTWVzc2FnZSBjb21wcmlzZWQgb2YgZGF0YSB1c2luZyBhIGJpbmFyeSBmcmFtZVxuICAgICAgLy8gb3Bjb2RlOyBpZiB0aGUgZGF0YSBjYW5ub3QgYmUgc2VudCwgZS5nLiBiZWNhdXNlIGl0IHdvdWxkIG5lZWRcbiAgICAgIC8vIHRvIGJlIGJ1ZmZlcmVkIGJ1dCB0aGUgYnVmZmVyIGlzIGZ1bGwsIHRoZSB1c2VyIGFnZW50IG11c3QgZmxhZ1xuICAgICAgLy8gdGhlIFdlYlNvY2tldCBhcyBmdWxsIGFuZCB0aGVuIGNsb3NlIHRoZSBXZWJTb2NrZXQgY29ubmVjdGlvbi5cbiAgICAgIC8vIFRoZSBkYXRhIHRvIGJlIHNlbnQgaXMgdGhlIGRhdGEgc3RvcmVkIGluIHRoZSBidWZmZXIgZGVzY3JpYmVkXG4gICAgICAvLyBieSB0aGUgQXJyYXlCdWZmZXIgb2JqZWN0LiBBbnkgaW52b2NhdGlvbiBvZiB0aGlzIG1ldGhvZCB3aXRoIGFuXG4gICAgICAvLyBBcnJheUJ1ZmZlciBhcmd1bWVudCB0aGF0IGRvZXMgbm90IHRocm93IGFuIGV4Y2VwdGlvbiBtdXN0XG4gICAgICAvLyBpbmNyZWFzZSB0aGUgYnVmZmVyZWRBbW91bnQgYXR0cmlidXRlIGJ5IHRoZSBsZW5ndGggb2YgdGhlXG4gICAgICAvLyBBcnJheUJ1ZmZlciBpbiBieXRlcy5cblxuICAgICAgdGhpcy4jYnVmZmVyZWRBbW91bnQgKz0gZGF0YS5ieXRlTGVuZ3RoXG4gICAgICB0aGlzLiNzZW5kUXVldWUuYWRkKGRhdGEsICgpID0+IHtcbiAgICAgICAgdGhpcy4jYnVmZmVyZWRBbW91bnQgLT0gZGF0YS5ieXRlTGVuZ3RoXG4gICAgICB9LCBzZW5kSGludHMuYXJyYXlCdWZmZXIpXG4gICAgfSBlbHNlIGlmIChBcnJheUJ1ZmZlci5pc1ZpZXcoZGF0YSkpIHtcbiAgICAgIC8vIElmIHRoZSBXZWJTb2NrZXQgY29ubmVjdGlvbiBpcyBlc3RhYmxpc2hlZCwgYW5kIHRoZSBXZWJTb2NrZXRcbiAgICAgIC8vIGNsb3NpbmcgaGFuZHNoYWtlIGhhcyBub3QgeWV0IHN0YXJ0ZWQsIHRoZW4gdGhlIHVzZXIgYWdlbnQgbXVzdFxuICAgICAgLy8gc2VuZCBhIFdlYlNvY2tldCBNZXNzYWdlIGNvbXByaXNlZCBvZiBkYXRhIHVzaW5nIGEgYmluYXJ5IGZyYW1lXG4gICAgICAvLyBvcGNvZGU7IGlmIHRoZSBkYXRhIGNhbm5vdCBiZSBzZW50LCBlLmcuIGJlY2F1c2UgaXQgd291bGQgbmVlZCB0b1xuICAgICAgLy8gYmUgYnVmZmVyZWQgYnV0IHRoZSBidWZmZXIgaXMgZnVsbCwgdGhlIHVzZXIgYWdlbnQgbXVzdCBmbGFnIHRoZVxuICAgICAgLy8gV2ViU29ja2V0IGFzIGZ1bGwgYW5kIHRoZW4gY2xvc2UgdGhlIFdlYlNvY2tldCBjb25uZWN0aW9uLiBUaGVcbiAgICAgIC8vIGRhdGEgdG8gYmUgc2VudCBpcyB0aGUgZGF0YSBzdG9yZWQgaW4gdGhlIHNlY3Rpb24gb2YgdGhlIGJ1ZmZlclxuICAgICAgLy8gZGVzY3JpYmVkIGJ5IHRoZSBBcnJheUJ1ZmZlciBvYmplY3QgdGhhdCBkYXRhIHJlZmVyZW5jZXMuIEFueVxuICAgICAgLy8gaW52b2NhdGlvbiBvZiB0aGlzIG1ldGhvZCB3aXRoIHRoaXMga2luZCBvZiBhcmd1bWVudCB0aGF0IGRvZXNcbiAgICAgIC8vIG5vdCB0aHJvdyBhbiBleGNlcHRpb24gbXVzdCBpbmNyZWFzZSB0aGUgYnVmZmVyZWRBbW91bnQgYXR0cmlidXRlXG4gICAgICAvLyBieSB0aGUgbGVuZ3RoIG9mIGRhdGFcdTIwMTlzIGJ1ZmZlciBpbiBieXRlcy5cblxuICAgICAgdGhpcy4jYnVmZmVyZWRBbW91bnQgKz0gZGF0YS5ieXRlTGVuZ3RoXG4gICAgICB0aGlzLiNzZW5kUXVldWUuYWRkKGRhdGEsICgpID0+IHtcbiAgICAgICAgdGhpcy4jYnVmZmVyZWRBbW91bnQgLT0gZGF0YS5ieXRlTGVuZ3RoXG4gICAgICB9LCBzZW5kSGludHMudHlwZWRBcnJheSlcbiAgICB9IGVsc2UgaWYgKGlzQmxvYkxpa2UoZGF0YSkpIHtcbiAgICAgIC8vIElmIHRoZSBXZWJTb2NrZXQgY29ubmVjdGlvbiBpcyBlc3RhYmxpc2hlZCwgYW5kIHRoZSBXZWJTb2NrZXRcbiAgICAgIC8vIGNsb3NpbmcgaGFuZHNoYWtlIGhhcyBub3QgeWV0IHN0YXJ0ZWQsIHRoZW4gdGhlIHVzZXIgYWdlbnQgbXVzdFxuICAgICAgLy8gc2VuZCBhIFdlYlNvY2tldCBNZXNzYWdlIGNvbXByaXNlZCBvZiBkYXRhIHVzaW5nIGEgYmluYXJ5IGZyYW1lXG4gICAgICAvLyBvcGNvZGU7IGlmIHRoZSBkYXRhIGNhbm5vdCBiZSBzZW50LCBlLmcuIGJlY2F1c2UgaXQgd291bGQgbmVlZCB0b1xuICAgICAgLy8gYmUgYnVmZmVyZWQgYnV0IHRoZSBidWZmZXIgaXMgZnVsbCwgdGhlIHVzZXIgYWdlbnQgbXVzdCBmbGFnIHRoZVxuICAgICAgLy8gV2ViU29ja2V0IGFzIGZ1bGwgYW5kIHRoZW4gY2xvc2UgdGhlIFdlYlNvY2tldCBjb25uZWN0aW9uLiBUaGUgZGF0YVxuICAgICAgLy8gdG8gYmUgc2VudCBpcyB0aGUgcmF3IGRhdGEgcmVwcmVzZW50ZWQgYnkgdGhlIEJsb2Igb2JqZWN0LiBBbnlcbiAgICAgIC8vIGludm9jYXRpb24gb2YgdGhpcyBtZXRob2Qgd2l0aCBhIEJsb2IgYXJndW1lbnQgdGhhdCBkb2VzIG5vdCB0aHJvd1xuICAgICAgLy8gYW4gZXhjZXB0aW9uIG11c3QgaW5jcmVhc2UgdGhlIGJ1ZmZlcmVkQW1vdW50IGF0dHJpYnV0ZSBieSB0aGUgc2l6ZVxuICAgICAgLy8gb2YgdGhlIEJsb2Igb2JqZWN0XHUyMDE5cyByYXcgZGF0YSwgaW4gYnl0ZXMuXG5cbiAgICAgIHRoaXMuI2J1ZmZlcmVkQW1vdW50ICs9IGRhdGEuc2l6ZVxuICAgICAgdGhpcy4jc2VuZFF1ZXVlLmFkZChkYXRhLCAoKSA9PiB7XG4gICAgICAgIHRoaXMuI2J1ZmZlcmVkQW1vdW50IC09IGRhdGEuc2l6ZVxuICAgICAgfSwgc2VuZEhpbnRzLmJsb2IpXG4gICAgfVxuICB9XG5cbiAgZ2V0IHJlYWR5U3RhdGUgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFdlYlNvY2tldClcblxuICAgIC8vIFRoZSByZWFkeVN0YXRlIGdldHRlciBzdGVwcyBhcmUgdG8gcmV0dXJuIHRoaXMncyByZWFkeSBzdGF0ZS5cbiAgICByZXR1cm4gdGhpc1trUmVhZHlTdGF0ZV1cbiAgfVxuXG4gIGdldCBidWZmZXJlZEFtb3VudCAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgV2ViU29ja2V0KVxuXG4gICAgcmV0dXJuIHRoaXMuI2J1ZmZlcmVkQW1vdW50XG4gIH1cblxuICBnZXQgdXJsICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBXZWJTb2NrZXQpXG5cbiAgICAvLyBUaGUgdXJsIGdldHRlciBzdGVwcyBhcmUgdG8gcmV0dXJuIHRoaXMncyB1cmwsIHNlcmlhbGl6ZWQuXG4gICAgcmV0dXJuIFVSTFNlcmlhbGl6ZXIodGhpc1trV2ViU29ja2V0VVJMXSlcbiAgfVxuXG4gIGdldCBleHRlbnNpb25zICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBXZWJTb2NrZXQpXG5cbiAgICByZXR1cm4gdGhpcy4jZXh0ZW5zaW9uc1xuICB9XG5cbiAgZ2V0IHByb3RvY29sICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBXZWJTb2NrZXQpXG5cbiAgICByZXR1cm4gdGhpcy4jcHJvdG9jb2xcbiAgfVxuXG4gIGdldCBvbm9wZW4gKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFdlYlNvY2tldClcblxuICAgIHJldHVybiB0aGlzLiNldmVudHMub3BlblxuICB9XG5cbiAgc2V0IG9ub3BlbiAoZm4pIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBXZWJTb2NrZXQpXG5cbiAgICBpZiAodGhpcy4jZXZlbnRzLm9wZW4pIHtcbiAgICAgIHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcignb3BlbicsIHRoaXMuI2V2ZW50cy5vcGVuKVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgZm4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRoaXMuI2V2ZW50cy5vcGVuID0gZm5cbiAgICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcignb3BlbicsIGZuKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLiNldmVudHMub3BlbiA9IG51bGxcbiAgICB9XG4gIH1cblxuICBnZXQgb25lcnJvciAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgV2ViU29ja2V0KVxuXG4gICAgcmV0dXJuIHRoaXMuI2V2ZW50cy5lcnJvclxuICB9XG5cbiAgc2V0IG9uZXJyb3IgKGZuKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgV2ViU29ja2V0KVxuXG4gICAgaWYgKHRoaXMuI2V2ZW50cy5lcnJvcikge1xuICAgICAgdGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKCdlcnJvcicsIHRoaXMuI2V2ZW50cy5lcnJvcilcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGZuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aGlzLiNldmVudHMuZXJyb3IgPSBmblxuICAgICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKCdlcnJvcicsIGZuKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLiNldmVudHMuZXJyb3IgPSBudWxsXG4gICAgfVxuICB9XG5cbiAgZ2V0IG9uY2xvc2UgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFdlYlNvY2tldClcblxuICAgIHJldHVybiB0aGlzLiNldmVudHMuY2xvc2VcbiAgfVxuXG4gIHNldCBvbmNsb3NlIChmbikge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFdlYlNvY2tldClcblxuICAgIGlmICh0aGlzLiNldmVudHMuY2xvc2UpIHtcbiAgICAgIHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcignY2xvc2UnLCB0aGlzLiNldmVudHMuY2xvc2UpXG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBmbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhpcy4jZXZlbnRzLmNsb3NlID0gZm5cbiAgICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcignY2xvc2UnLCBmbilcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy4jZXZlbnRzLmNsb3NlID0gbnVsbFxuICAgIH1cbiAgfVxuXG4gIGdldCBvbm1lc3NhZ2UgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFdlYlNvY2tldClcblxuICAgIHJldHVybiB0aGlzLiNldmVudHMubWVzc2FnZVxuICB9XG5cbiAgc2V0IG9ubWVzc2FnZSAoZm4pIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBXZWJTb2NrZXQpXG5cbiAgICBpZiAodGhpcy4jZXZlbnRzLm1lc3NhZ2UpIHtcbiAgICAgIHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcignbWVzc2FnZScsIHRoaXMuI2V2ZW50cy5tZXNzYWdlKVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgZm4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRoaXMuI2V2ZW50cy5tZXNzYWdlID0gZm5cbiAgICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcignbWVzc2FnZScsIGZuKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLiNldmVudHMubWVzc2FnZSA9IG51bGxcbiAgICB9XG4gIH1cblxuICBnZXQgYmluYXJ5VHlwZSAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgV2ViU29ja2V0KVxuXG4gICAgcmV0dXJuIHRoaXNba0JpbmFyeVR5cGVdXG4gIH1cblxuICBzZXQgYmluYXJ5VHlwZSAodHlwZSkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFdlYlNvY2tldClcblxuICAgIGlmICh0eXBlICE9PSAnYmxvYicgJiYgdHlwZSAhPT0gJ2FycmF5YnVmZmVyJykge1xuICAgICAgdGhpc1trQmluYXJ5VHlwZV0gPSAnYmxvYidcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpc1trQmluYXJ5VHlwZV0gPSB0eXBlXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBzZWUgaHR0cHM6Ly93ZWJzb2NrZXRzLnNwZWMud2hhdHdnLm9yZy8jZmVlZGJhY2stZnJvbS10aGUtcHJvdG9jb2xcbiAgICovXG4gICNvbkNvbm5lY3Rpb25Fc3RhYmxpc2hlZCAocmVzcG9uc2UsIHBhcnNlZEV4dGVuc2lvbnMpIHtcbiAgICAvLyBwcm9jZXNzUmVzcG9uc2UgaXMgY2FsbGVkIHdoZW4gdGhlIFwicmVzcG9uc2VcdTIwMTlzIGhlYWRlciBsaXN0IGhhcyBiZWVuIHJlY2VpdmVkIGFuZCBpbml0aWFsaXplZC5cIlxuICAgIC8vIG9uY2UgdGhpcyBoYXBwZW5zLCB0aGUgY29ubmVjdGlvbiBpcyBvcGVuXG4gICAgdGhpc1trUmVzcG9uc2VdID0gcmVzcG9uc2VcblxuICAgIGNvbnN0IHBhcnNlciA9IG5ldyBCeXRlUGFyc2VyKHRoaXMsIHBhcnNlZEV4dGVuc2lvbnMpXG4gICAgcGFyc2VyLm9uKCdkcmFpbicsIG9uUGFyc2VyRHJhaW4pXG4gICAgcGFyc2VyLm9uKCdlcnJvcicsIG9uUGFyc2VyRXJyb3IuYmluZCh0aGlzKSlcblxuICAgIHJlc3BvbnNlLnNvY2tldC53cyA9IHRoaXNcbiAgICB0aGlzW2tCeXRlUGFyc2VyXSA9IHBhcnNlclxuXG4gICAgdGhpcy4jc2VuZFF1ZXVlID0gbmV3IFNlbmRRdWV1ZShyZXNwb25zZS5zb2NrZXQpXG5cbiAgICAvLyAxLiBDaGFuZ2UgdGhlIHJlYWR5IHN0YXRlIHRvIE9QRU4gKDEpLlxuICAgIHRoaXNba1JlYWR5U3RhdGVdID0gc3RhdGVzLk9QRU5cblxuICAgIC8vIDIuIENoYW5nZSB0aGUgZXh0ZW5zaW9ucyBhdHRyaWJ1dGVcdTIwMTlzIHZhbHVlIHRvIHRoZSBleHRlbnNpb25zIGluIHVzZSwgaWZcbiAgICAvLyAgICBpdCBpcyBub3QgdGhlIG51bGwgdmFsdWUuXG4gICAgLy8gaHR0cHM6Ly9kYXRhdHJhY2tlci5pZXRmLm9yZy9kb2MvaHRtbC9yZmM2NDU1I3NlY3Rpb24tOS4xXG4gICAgY29uc3QgZXh0ZW5zaW9ucyA9IHJlc3BvbnNlLmhlYWRlcnNMaXN0LmdldCgnc2VjLXdlYnNvY2tldC1leHRlbnNpb25zJylcblxuICAgIGlmIChleHRlbnNpb25zICE9PSBudWxsKSB7XG4gICAgICB0aGlzLiNleHRlbnNpb25zID0gZXh0ZW5zaW9uc1xuICAgIH1cblxuICAgIC8vIDMuIENoYW5nZSB0aGUgcHJvdG9jb2wgYXR0cmlidXRlXHUyMDE5cyB2YWx1ZSB0byB0aGUgc3VicHJvdG9jb2wgaW4gdXNlLCBpZlxuICAgIC8vICAgIGl0IGlzIG5vdCB0aGUgbnVsbCB2YWx1ZS5cbiAgICAvLyBodHRwczovL2RhdGF0cmFja2VyLmlldGYub3JnL2RvYy9odG1sL3JmYzY0NTUjc2VjdGlvbi0xLjlcbiAgICBjb25zdCBwcm90b2NvbCA9IHJlc3BvbnNlLmhlYWRlcnNMaXN0LmdldCgnc2VjLXdlYnNvY2tldC1wcm90b2NvbCcpXG5cbiAgICBpZiAocHJvdG9jb2wgIT09IG51bGwpIHtcbiAgICAgIHRoaXMuI3Byb3RvY29sID0gcHJvdG9jb2xcbiAgICB9XG5cbiAgICAvLyA0LiBGaXJlIGFuIGV2ZW50IG5hbWVkIG9wZW4gYXQgdGhlIFdlYlNvY2tldCBvYmplY3QuXG4gICAgZmlyZUV2ZW50KCdvcGVuJywgdGhpcylcbiAgfVxufVxuXG4vLyBodHRwczovL3dlYnNvY2tldHMuc3BlYy53aGF0d2cub3JnLyNkb20td2Vic29ja2V0LWNvbm5lY3RpbmdcbldlYlNvY2tldC5DT05ORUNUSU5HID0gV2ViU29ja2V0LnByb3RvdHlwZS5DT05ORUNUSU5HID0gc3RhdGVzLkNPTk5FQ1RJTkdcbi8vIGh0dHBzOi8vd2Vic29ja2V0cy5zcGVjLndoYXR3Zy5vcmcvI2RvbS13ZWJzb2NrZXQtb3BlblxuV2ViU29ja2V0Lk9QRU4gPSBXZWJTb2NrZXQucHJvdG90eXBlLk9QRU4gPSBzdGF0ZXMuT1BFTlxuLy8gaHR0cHM6Ly93ZWJzb2NrZXRzLnNwZWMud2hhdHdnLm9yZy8jZG9tLXdlYnNvY2tldC1jbG9zaW5nXG5XZWJTb2NrZXQuQ0xPU0lORyA9IFdlYlNvY2tldC5wcm90b3R5cGUuQ0xPU0lORyA9IHN0YXRlcy5DTE9TSU5HXG4vLyBodHRwczovL3dlYnNvY2tldHMuc3BlYy53aGF0d2cub3JnLyNkb20td2Vic29ja2V0LWNsb3NlZFxuV2ViU29ja2V0LkNMT1NFRCA9IFdlYlNvY2tldC5wcm90b3R5cGUuQ0xPU0VEID0gc3RhdGVzLkNMT1NFRFxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhXZWJTb2NrZXQucHJvdG90eXBlLCB7XG4gIENPTk5FQ1RJTkc6IHN0YXRpY1Byb3BlcnR5RGVzY3JpcHRvcnMsXG4gIE9QRU46IHN0YXRpY1Byb3BlcnR5RGVzY3JpcHRvcnMsXG4gIENMT1NJTkc6IHN0YXRpY1Byb3BlcnR5RGVzY3JpcHRvcnMsXG4gIENMT1NFRDogc3RhdGljUHJvcGVydHlEZXNjcmlwdG9ycyxcbiAgdXJsOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICByZWFkeVN0YXRlOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBidWZmZXJlZEFtb3VudDoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgb25vcGVuOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBvbmVycm9yOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBvbmNsb3NlOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBjbG9zZToga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgb25tZXNzYWdlOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBiaW5hcnlUeXBlOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBzZW5kOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBleHRlbnNpb25zOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBwcm90b2NvbDoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgW1N5bWJvbC50b1N0cmluZ1RhZ106IHtcbiAgICB2YWx1ZTogJ1dlYlNvY2tldCcsXG4gICAgd3JpdGFibGU6IGZhbHNlLFxuICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICB9XG59KVxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhXZWJTb2NrZXQsIHtcbiAgQ09OTkVDVElORzogc3RhdGljUHJvcGVydHlEZXNjcmlwdG9ycyxcbiAgT1BFTjogc3RhdGljUHJvcGVydHlEZXNjcmlwdG9ycyxcbiAgQ0xPU0lORzogc3RhdGljUHJvcGVydHlEZXNjcmlwdG9ycyxcbiAgQ0xPU0VEOiBzdGF0aWNQcm9wZXJ0eURlc2NyaXB0b3JzXG59KVxuXG53ZWJpZGwuY29udmVydGVyc1snc2VxdWVuY2U8RE9NU3RyaW5nPiddID0gd2ViaWRsLnNlcXVlbmNlQ29udmVydGVyKFxuICB3ZWJpZGwuY29udmVydGVycy5ET01TdHJpbmdcbilcblxud2ViaWRsLmNvbnZlcnRlcnNbJ0RPTVN0cmluZyBvciBzZXF1ZW5jZTxET01TdHJpbmc+J10gPSBmdW5jdGlvbiAoViwgcHJlZml4LCBhcmd1bWVudCkge1xuICBpZiAod2ViaWRsLnV0aWwuVHlwZShWKSA9PT0gJ09iamVjdCcgJiYgU3ltYm9sLml0ZXJhdG9yIGluIFYpIHtcbiAgICByZXR1cm4gd2ViaWRsLmNvbnZlcnRlcnNbJ3NlcXVlbmNlPERPTVN0cmluZz4nXShWKVxuICB9XG5cbiAgcmV0dXJuIHdlYmlkbC5jb252ZXJ0ZXJzLkRPTVN0cmluZyhWLCBwcmVmaXgsIGFyZ3VtZW50KVxufVxuXG4vLyBUaGlzIGltcGxlbWVudHMgdGhlIHByb3Bvc2FsIG1hZGUgaW4gaHR0cHM6Ly9naXRodWIuY29tL3doYXR3Zy93ZWJzb2NrZXRzL2lzc3Vlcy80Mlxud2ViaWRsLmNvbnZlcnRlcnMuV2ViU29ja2V0SW5pdCA9IHdlYmlkbC5kaWN0aW9uYXJ5Q29udmVydGVyKFtcbiAge1xuICAgIGtleTogJ3Byb3RvY29scycsXG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVyc1snRE9NU3RyaW5nIG9yIHNlcXVlbmNlPERPTVN0cmluZz4nXSxcbiAgICBkZWZhdWx0VmFsdWU6ICgpID0+IG5ldyBBcnJheSgwKVxuICB9LFxuICB7XG4gICAga2V5OiAnZGlzcGF0Y2hlcicsXG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVycy5hbnksXG4gICAgZGVmYXVsdFZhbHVlOiAoKSA9PiBnZXRHbG9iYWxEaXNwYXRjaGVyKClcbiAgfSxcbiAge1xuICAgIGtleTogJ2hlYWRlcnMnLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLm51bGxhYmxlQ29udmVydGVyKHdlYmlkbC5jb252ZXJ0ZXJzLkhlYWRlcnNJbml0KVxuICB9XG5dKVxuXG53ZWJpZGwuY29udmVydGVyc1snRE9NU3RyaW5nIG9yIHNlcXVlbmNlPERPTVN0cmluZz4gb3IgV2ViU29ja2V0SW5pdCddID0gZnVuY3Rpb24gKFYpIHtcbiAgaWYgKHdlYmlkbC51dGlsLlR5cGUoVikgPT09ICdPYmplY3QnICYmICEoU3ltYm9sLml0ZXJhdG9yIGluIFYpKSB7XG4gICAgcmV0dXJuIHdlYmlkbC5jb252ZXJ0ZXJzLldlYlNvY2tldEluaXQoVilcbiAgfVxuXG4gIHJldHVybiB7IHByb3RvY29sczogd2ViaWRsLmNvbnZlcnRlcnNbJ0RPTVN0cmluZyBvciBzZXF1ZW5jZTxET01TdHJpbmc+J10oVikgfVxufVxuXG53ZWJpZGwuY29udmVydGVycy5XZWJTb2NrZXRTZW5kRGF0YSA9IGZ1bmN0aW9uIChWKSB7XG4gIGlmICh3ZWJpZGwudXRpbC5UeXBlKFYpID09PSAnT2JqZWN0Jykge1xuICAgIGlmIChpc0Jsb2JMaWtlKFYpKSB7XG4gICAgICByZXR1cm4gd2ViaWRsLmNvbnZlcnRlcnMuQmxvYihWLCB7IHN0cmljdDogZmFsc2UgfSlcbiAgICB9XG5cbiAgICBpZiAoQXJyYXlCdWZmZXIuaXNWaWV3KFYpIHx8IHR5cGVzLmlzQXJyYXlCdWZmZXIoVikpIHtcbiAgICAgIHJldHVybiB3ZWJpZGwuY29udmVydGVycy5CdWZmZXJTb3VyY2UoVilcbiAgICB9XG4gIH1cblxuICByZXR1cm4gd2ViaWRsLmNvbnZlcnRlcnMuVVNWU3RyaW5nKFYpXG59XG5cbmZ1bmN0aW9uIG9uUGFyc2VyRHJhaW4gKCkge1xuICB0aGlzLndzW2tSZXNwb25zZV0uc29ja2V0LnJlc3VtZSgpXG59XG5cbmZ1bmN0aW9uIG9uUGFyc2VyRXJyb3IgKGVycikge1xuICBsZXQgbWVzc2FnZVxuICBsZXQgY29kZVxuXG4gIGlmIChlcnIgaW5zdGFuY2VvZiBDbG9zZUV2ZW50KSB7XG4gICAgbWVzc2FnZSA9IGVyci5yZWFzb25cbiAgICBjb2RlID0gZXJyLmNvZGVcbiAgfSBlbHNlIHtcbiAgICBtZXNzYWdlID0gZXJyLm1lc3NhZ2VcbiAgfVxuXG4gIGZpcmVFdmVudCgnZXJyb3InLCB0aGlzLCAoKSA9PiBuZXcgRXJyb3JFdmVudCgnZXJyb3InLCB7IGVycm9yOiBlcnIsIG1lc3NhZ2UgfSkpXG5cbiAgY2xvc2VXZWJTb2NrZXRDb25uZWN0aW9uKHRoaXMsIGNvZGUpXG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBXZWJTb2NrZXRcbn1cbiIsICIndXNlIHN0cmljdCdcblxuLyoqXG4gKiBDaGVja3MgaWYgdGhlIGdpdmVuIHZhbHVlIGlzIGEgdmFsaWQgTGFzdEV2ZW50SWQuXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5mdW5jdGlvbiBpc1ZhbGlkTGFzdEV2ZW50SWQgKHZhbHVlKSB7XG4gIC8vIExhc3RFdmVudElkIHNob3VsZCBub3QgY29udGFpbiBVKzAwMDAgTlVMTFxuICByZXR1cm4gdmFsdWUuaW5kZXhPZignXFx1MDAwMCcpID09PSAtMVxufVxuXG4vKipcbiAqIENoZWNrcyBpZiB0aGUgZ2l2ZW4gdmFsdWUgaXMgYSBiYXNlIDEwIGRpZ2l0LlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAqL1xuZnVuY3Rpb24gaXNBU0NJSU51bWJlciAodmFsdWUpIHtcbiAgaWYgKHZhbHVlLmxlbmd0aCA9PT0gMCkgcmV0dXJuIGZhbHNlXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgdmFsdWUubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAodmFsdWUuY2hhckNvZGVBdChpKSA8IDB4MzAgfHwgdmFsdWUuY2hhckNvZGVBdChpKSA+IDB4MzkpIHJldHVybiBmYWxzZVxuICB9XG4gIHJldHVybiB0cnVlXG59XG5cbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvdW5kaWNpL2lzc3Vlcy8yNjY0XG5mdW5jdGlvbiBkZWxheSAobXMpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgc2V0VGltZW91dChyZXNvbHZlLCBtcykudW5yZWYoKVxuICB9KVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgaXNWYWxpZExhc3RFdmVudElkLFxuICBpc0FTQ0lJTnVtYmVyLFxuICBkZWxheVxufVxuIiwgIid1c2Ugc3RyaWN0J1xuY29uc3QgeyBUcmFuc2Zvcm0gfSA9IHJlcXVpcmUoJ25vZGU6c3RyZWFtJylcbmNvbnN0IHsgaXNBU0NJSU51bWJlciwgaXNWYWxpZExhc3RFdmVudElkIH0gPSByZXF1aXJlKCcuL3V0aWwnKVxuXG4vKipcbiAqIEB0eXBlIHtudW1iZXJbXX0gQk9NXG4gKi9cbmNvbnN0IEJPTSA9IFsweEVGLCAweEJCLCAweEJGXVxuLyoqXG4gKiBAdHlwZSB7MTB9IExGXG4gKi9cbmNvbnN0IExGID0gMHgwQVxuLyoqXG4gKiBAdHlwZSB7MTN9IENSXG4gKi9cbmNvbnN0IENSID0gMHgwRFxuLyoqXG4gKiBAdHlwZSB7NTh9IENPTE9OXG4gKi9cbmNvbnN0IENPTE9OID0gMHgzQVxuLyoqXG4gKiBAdHlwZSB7MzJ9IFNQQUNFXG4gKi9cbmNvbnN0IFNQQUNFID0gMHgyMFxuXG4vKipcbiAqIEB0eXBlZGVmIHtvYmplY3R9IEV2ZW50U291cmNlU3RyZWFtRXZlbnRcbiAqIEB0eXBlIHtvYmplY3R9XG4gKiBAcHJvcGVydHkge3N0cmluZ30gW2V2ZW50XSBUaGUgZXZlbnQgdHlwZS5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBbZGF0YV0gVGhlIGRhdGEgb2YgdGhlIG1lc3NhZ2UuXG4gKiBAcHJvcGVydHkge3N0cmluZ30gW2lkXSBBIHVuaXF1ZSBJRCBmb3IgdGhlIGV2ZW50LlxuICogQHByb3BlcnR5IHtzdHJpbmd9IFtyZXRyeV0gVGhlIHJlY29ubmVjdGlvbiB0aW1lLCBpbiBtaWxsaXNlY29uZHMuXG4gKi9cblxuLyoqXG4gKiBAdHlwZWRlZiBldmVudFNvdXJjZVNldHRpbmdzXG4gKiBAdHlwZSB7b2JqZWN0fVxuICogQHByb3BlcnR5IHtzdHJpbmd9IGxhc3RFdmVudElkIFRoZSBsYXN0IGV2ZW50IElEIHJlY2VpdmVkIGZyb20gdGhlIHNlcnZlci5cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBvcmlnaW4gVGhlIG9yaWdpbiBvZiB0aGUgZXZlbnQgc291cmNlLlxuICogQHByb3BlcnR5IHtudW1iZXJ9IHJlY29ubmVjdGlvblRpbWUgVGhlIHJlY29ubmVjdGlvbiB0aW1lLCBpbiBtaWxsaXNlY29uZHMuXG4gKi9cblxuY2xhc3MgRXZlbnRTb3VyY2VTdHJlYW0gZXh0ZW5kcyBUcmFuc2Zvcm0ge1xuICAvKipcbiAgICogQHR5cGUge2V2ZW50U291cmNlU2V0dGluZ3N9XG4gICAqL1xuICBzdGF0ZSA9IG51bGxcblxuICAvKipcbiAgICogTGVhZGluZyBieXRlLW9yZGVyLW1hcmsgY2hlY2suXG4gICAqIEB0eXBlIHtib29sZWFufVxuICAgKi9cbiAgY2hlY2tCT00gPSB0cnVlXG5cbiAgLyoqXG4gICAqIEB0eXBlIHtib29sZWFufVxuICAgKi9cbiAgY3JsZkNoZWNrID0gZmFsc2VcblxuICAvKipcbiAgICogQHR5cGUge2Jvb2xlYW59XG4gICAqL1xuICBldmVudEVuZENoZWNrID0gZmFsc2VcblxuICAvKipcbiAgICogQHR5cGUge0J1ZmZlcn1cbiAgICovXG4gIGJ1ZmZlciA9IG51bGxcblxuICBwb3MgPSAwXG5cbiAgZXZlbnQgPSB7XG4gICAgZGF0YTogdW5kZWZpbmVkLFxuICAgIGV2ZW50OiB1bmRlZmluZWQsXG4gICAgaWQ6IHVuZGVmaW5lZCxcbiAgICByZXRyeTogdW5kZWZpbmVkXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnNcbiAgICogQHBhcmFtIHtldmVudFNvdXJjZVNldHRpbmdzfSBvcHRpb25zLmV2ZW50U291cmNlU2V0dGluZ3NcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gW29wdGlvbnMucHVzaF1cbiAgICovXG4gIGNvbnN0cnVjdG9yIChvcHRpb25zID0ge30pIHtcbiAgICAvLyBFbmFibGUgb2JqZWN0IG1vZGUgYXMgRXZlbnRTb3VyY2VTdHJlYW0gZW1pdHMgb2JqZWN0cyBvZiBzaGFwZVxuICAgIC8vIEV2ZW50U291cmNlU3RyZWFtRXZlbnRcbiAgICBvcHRpb25zLnJlYWRhYmxlT2JqZWN0TW9kZSA9IHRydWVcblxuICAgIHN1cGVyKG9wdGlvbnMpXG5cbiAgICB0aGlzLnN0YXRlID0gb3B0aW9ucy5ldmVudFNvdXJjZVNldHRpbmdzIHx8IHt9XG4gICAgaWYgKG9wdGlvbnMucHVzaCkge1xuICAgICAgdGhpcy5wdXNoID0gb3B0aW9ucy5wdXNoXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7QnVmZmVyfSBjaHVua1xuICAgKiBAcGFyYW0ge3N0cmluZ30gX2VuY29kaW5nXG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrXG4gICAqIEByZXR1cm5zIHt2b2lkfVxuICAgKi9cbiAgX3RyYW5zZm9ybSAoY2h1bmssIF9lbmNvZGluZywgY2FsbGJhY2spIHtcbiAgICBpZiAoY2h1bmsubGVuZ3RoID09PSAwKSB7XG4gICAgICBjYWxsYmFjaygpXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICAvLyBDYWNoZSB0aGUgY2h1bmsgaW4gdGhlIGJ1ZmZlciwgYXMgdGhlIGRhdGEgbWlnaHQgbm90IGJlIGNvbXBsZXRlIHdoaWxlXG4gICAgLy8gcHJvY2Vzc2luZyBpdFxuICAgIC8vIFRPRE86IEludmVzdGlnYXRlIGlmIHRoZXJlIGlzIGEgbW9yZSBwZXJmb3JtYW50IHdheSB0byBoYW5kbGVcbiAgICAvLyBpbmNvbWluZyBjaHVua3NcbiAgICAvLyBzZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvdW5kaWNpL2lzc3Vlcy8yNjMwXG4gICAgaWYgKHRoaXMuYnVmZmVyKSB7XG4gICAgICB0aGlzLmJ1ZmZlciA9IEJ1ZmZlci5jb25jYXQoW3RoaXMuYnVmZmVyLCBjaHVua10pXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuYnVmZmVyID0gY2h1bmtcbiAgICB9XG5cbiAgICAvLyBTdHJpcCBsZWFkaW5nIGJ5dGUtb3JkZXItbWFyayBpZiB3ZSBvcGVuZWQgdGhlIHN0cmVhbSBhbmQgc3RhcnRlZFxuICAgIC8vIHRoZSBwcm9jZXNzaW5nIG9mIHRoZSBpbmNvbWluZyBkYXRhXG4gICAgaWYgKHRoaXMuY2hlY2tCT00pIHtcbiAgICAgIHN3aXRjaCAodGhpcy5idWZmZXIubGVuZ3RoKSB7XG4gICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAvLyBDaGVjayBpZiB0aGUgZmlyc3QgYnl0ZSBpcyB0aGUgc2FtZSBhcyB0aGUgZmlyc3QgYnl0ZSBvZiB0aGUgQk9NXG4gICAgICAgICAgaWYgKHRoaXMuYnVmZmVyWzBdID09PSBCT01bMF0pIHtcbiAgICAgICAgICAgIC8vIElmIGl0IGlzLCB3ZSBuZWVkIHRvIHdhaXQgZm9yIG1vcmUgZGF0YVxuICAgICAgICAgICAgY2FsbGJhY2soKVxuICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIFNldCB0aGUgY2hlY2tCT00gZmxhZyB0byBmYWxzZSBhcyB3ZSBkb24ndCBuZWVkIHRvIGNoZWNrIGZvciB0aGVcbiAgICAgICAgICAvLyBCT00gYW55bW9yZVxuICAgICAgICAgIHRoaXMuY2hlY2tCT00gPSBmYWxzZVxuXG4gICAgICAgICAgLy8gVGhlIGJ1ZmZlciBvbmx5IGNvbnRhaW5zIG9uZSBieXRlIHNvIHdlIG5lZWQgdG8gd2FpdCBmb3IgbW9yZSBkYXRhXG4gICAgICAgICAgY2FsbGJhY2soKVxuICAgICAgICAgIHJldHVyblxuICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgLy8gQ2hlY2sgaWYgdGhlIGZpcnN0IHR3byBieXRlcyBhcmUgdGhlIHNhbWUgYXMgdGhlIGZpcnN0IHR3byBieXRlc1xuICAgICAgICAgIC8vIG9mIHRoZSBCT01cbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICB0aGlzLmJ1ZmZlclswXSA9PT0gQk9NWzBdICYmXG4gICAgICAgICAgICB0aGlzLmJ1ZmZlclsxXSA9PT0gQk9NWzFdXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICAvLyBJZiBpdCBpcywgd2UgbmVlZCB0byB3YWl0IGZvciBtb3JlIGRhdGEsIGJlY2F1c2UgdGhlIHRoaXJkIGJ5dGVcbiAgICAgICAgICAgIC8vIGlzIG5lZWRlZCB0byBkZXRlcm1pbmUgaWYgaXQgaXMgdGhlIEJPTSBvciBub3RcbiAgICAgICAgICAgIGNhbGxiYWNrKClcbiAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIFNldCB0aGUgY2hlY2tCT00gZmxhZyB0byBmYWxzZSBhcyB3ZSBkb24ndCBuZWVkIHRvIGNoZWNrIGZvciB0aGVcbiAgICAgICAgICAvLyBCT00gYW55bW9yZVxuICAgICAgICAgIHRoaXMuY2hlY2tCT00gPSBmYWxzZVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIGNhc2UgMzpcbiAgICAgICAgICAvLyBDaGVjayBpZiB0aGUgZmlyc3QgdGhyZWUgYnl0ZXMgYXJlIHRoZSBzYW1lIGFzIHRoZSBmaXJzdCB0aHJlZVxuICAgICAgICAgIC8vIGJ5dGVzIG9mIHRoZSBCT01cbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICB0aGlzLmJ1ZmZlclswXSA9PT0gQk9NWzBdICYmXG4gICAgICAgICAgICB0aGlzLmJ1ZmZlclsxXSA9PT0gQk9NWzFdICYmXG4gICAgICAgICAgICB0aGlzLmJ1ZmZlclsyXSA9PT0gQk9NWzJdXG4gICAgICAgICAgKSB7XG4gICAgICAgICAgICAvLyBJZiBpdCBpcywgd2UgY2FuIGRyb3AgdGhlIGJ1ZmZlcmVkIGRhdGEsIGFzIGl0IGlzIG9ubHkgdGhlIEJPTVxuICAgICAgICAgICAgdGhpcy5idWZmZXIgPSBCdWZmZXIuYWxsb2MoMClcbiAgICAgICAgICAgIC8vIFNldCB0aGUgY2hlY2tCT00gZmxhZyB0byBmYWxzZSBhcyB3ZSBkb24ndCBuZWVkIHRvIGNoZWNrIGZvciB0aGVcbiAgICAgICAgICAgIC8vIEJPTSBhbnltb3JlXG4gICAgICAgICAgICB0aGlzLmNoZWNrQk9NID0gZmFsc2VcblxuICAgICAgICAgICAgLy8gQXdhaXQgbW9yZSBkYXRhXG4gICAgICAgICAgICBjYWxsYmFjaygpXG4gICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gSWYgaXQgaXMgbm90IHRoZSBCT00sIHdlIGNhbiBzdGFydCBwcm9jZXNzaW5nIHRoZSBkYXRhXG4gICAgICAgICAgdGhpcy5jaGVja0JPTSA9IGZhbHNlXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAvLyBUaGUgYnVmZmVyIGlzIGxvbmdlciB0aGFuIDMgYnl0ZXMsIHNvIHdlIGNhbiBkcm9wIHRoZSBCT00gaWYgaXQgaXNcbiAgICAgICAgICAvLyBwcmVzZW50XG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgdGhpcy5idWZmZXJbMF0gPT09IEJPTVswXSAmJlxuICAgICAgICAgICAgdGhpcy5idWZmZXJbMV0gPT09IEJPTVsxXSAmJlxuICAgICAgICAgICAgdGhpcy5idWZmZXJbMl0gPT09IEJPTVsyXVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgLy8gUmVtb3ZlIHRoZSBCT00gZnJvbSB0aGUgYnVmZmVyXG4gICAgICAgICAgICB0aGlzLmJ1ZmZlciA9IHRoaXMuYnVmZmVyLnN1YmFycmF5KDMpXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gU2V0IHRoZSBjaGVja0JPTSBmbGFnIHRvIGZhbHNlIGFzIHdlIGRvbid0IG5lZWQgdG8gY2hlY2sgZm9yIHRoZVxuICAgICAgICAgIHRoaXMuY2hlY2tCT00gPSBmYWxzZVxuICAgICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgfVxuXG4gICAgd2hpbGUgKHRoaXMucG9zIDwgdGhpcy5idWZmZXIubGVuZ3RoKSB7XG4gICAgICAvLyBJZiB0aGUgcHJldmlvdXMgbGluZSBlbmRlZCB3aXRoIGFuIGVuZC1vZi1saW5lLCB3ZSBuZWVkIHRvIGNoZWNrXG4gICAgICAvLyBpZiB0aGUgbmV4dCBjaGFyYWN0ZXIgaXMgYWxzbyBhbiBlbmQtb2YtbGluZS5cbiAgICAgIGlmICh0aGlzLmV2ZW50RW5kQ2hlY2spIHtcbiAgICAgICAgLy8gSWYgdGhlIHRoZSBjdXJyZW50IGNoYXJhY3RlciBpcyBhbiBlbmQtb2YtbGluZSwgdGhlbiB0aGUgZXZlbnRcbiAgICAgICAgLy8gaXMgZmluaXNoZWQgYW5kIHdlIGNhbiBwcm9jZXNzIGl0XG5cbiAgICAgICAgLy8gSWYgdGhlIHByZXZpb3VzIGxpbmUgZW5kZWQgd2l0aCBhIGNhcnJpYWdlIHJldHVybiwgd2UgbmVlZCB0b1xuICAgICAgICAvLyBjaGVjayBpZiB0aGUgY3VycmVudCBjaGFyYWN0ZXIgaXMgYSBsaW5lIGZlZWQgYW5kIHJlbW92ZSBpdFxuICAgICAgICAvLyBmcm9tIHRoZSBidWZmZXIuXG4gICAgICAgIGlmICh0aGlzLmNybGZDaGVjaykge1xuICAgICAgICAgIC8vIElmIHRoZSBjdXJyZW50IGNoYXJhY3RlciBpcyBhIGxpbmUgZmVlZCwgd2UgY2FuIHJlbW92ZSBpdFxuICAgICAgICAgIC8vIGZyb20gdGhlIGJ1ZmZlciBhbmQgcmVzZXQgdGhlIGNybGZDaGVjayBmbGFnXG4gICAgICAgICAgaWYgKHRoaXMuYnVmZmVyW3RoaXMucG9zXSA9PT0gTEYpIHtcbiAgICAgICAgICAgIHRoaXMuYnVmZmVyID0gdGhpcy5idWZmZXIuc3ViYXJyYXkodGhpcy5wb3MgKyAxKVxuICAgICAgICAgICAgdGhpcy5wb3MgPSAwXG4gICAgICAgICAgICB0aGlzLmNybGZDaGVjayA9IGZhbHNlXG5cbiAgICAgICAgICAgIC8vIEl0IGlzIHBvc3NpYmxlIHRoYXQgdGhlIGxpbmUgZmVlZCBpcyBub3QgdGhlIGVuZCBvZiB0aGVcbiAgICAgICAgICAgIC8vIGV2ZW50LiBXZSBuZWVkIHRvIGNoZWNrIGlmIHRoZSBuZXh0IGNoYXJhY3RlciBpcyBhblxuICAgICAgICAgICAgLy8gZW5kLW9mLWxpbmUgY2hhcmFjdGVyIHRvIGRldGVybWluZSBpZiB0aGUgZXZlbnQgaXNcbiAgICAgICAgICAgIC8vIGZpbmlzaGVkLiBXZSBzaW1wbHkgY29udGludWUgdGhlIGxvb3AgdG8gY2hlY2sgdGhlIG5leHRcbiAgICAgICAgICAgIC8vIGNoYXJhY3Rlci5cblxuICAgICAgICAgICAgLy8gQXMgd2UgcmVtb3ZlZCB0aGUgbGluZSBmZWVkIGZyb20gdGhlIGJ1ZmZlciBhbmQgc2V0IHRoZVxuICAgICAgICAgICAgLy8gY3JsZkNoZWNrIGZsYWcgdG8gZmFsc2UsIHdlIGJhc2ljYWxseSBkb24ndCBtYWtlIGFueVxuICAgICAgICAgICAgLy8gZGlzdGluY3Rpb24gYmV0d2VlbiBhIGxpbmUgZmVlZCBhbmQgYSBjYXJyaWFnZSByZXR1cm4uXG4gICAgICAgICAgICBjb250aW51ZVxuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLmNybGZDaGVjayA9IGZhbHNlXG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5idWZmZXJbdGhpcy5wb3NdID09PSBMRiB8fCB0aGlzLmJ1ZmZlclt0aGlzLnBvc10gPT09IENSKSB7XG4gICAgICAgICAgLy8gSWYgdGhlIGN1cnJlbnQgY2hhcmFjdGVyIGlzIGEgY2FycmlhZ2UgcmV0dXJuLCB3ZSBuZWVkIHRvXG4gICAgICAgICAgLy8gc2V0IHRoZSBjcmxmQ2hlY2sgZmxhZyB0byB0cnVlLCBhcyB3ZSBuZWVkIHRvIGNoZWNrIGlmIHRoZVxuICAgICAgICAgIC8vIG5leHQgY2hhcmFjdGVyIGlzIGEgbGluZSBmZWVkIHNvIHdlIGNhbiByZW1vdmUgaXQgZnJvbSB0aGVcbiAgICAgICAgICAvLyBidWZmZXJcbiAgICAgICAgICBpZiAodGhpcy5idWZmZXJbdGhpcy5wb3NdID09PSBDUikge1xuICAgICAgICAgICAgdGhpcy5jcmxmQ2hlY2sgPSB0cnVlXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdGhpcy5idWZmZXIgPSB0aGlzLmJ1ZmZlci5zdWJhcnJheSh0aGlzLnBvcyArIDEpXG4gICAgICAgICAgdGhpcy5wb3MgPSAwXG4gICAgICAgICAgaWYgKFxuICAgICAgICAgICAgdGhpcy5ldmVudC5kYXRhICE9PSB1bmRlZmluZWQgfHwgdGhpcy5ldmVudC5ldmVudCB8fCB0aGlzLmV2ZW50LmlkIHx8IHRoaXMuZXZlbnQucmV0cnkpIHtcbiAgICAgICAgICAgIHRoaXMucHJvY2Vzc0V2ZW50KHRoaXMuZXZlbnQpXG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMuY2xlYXJFdmVudCgpXG4gICAgICAgICAgY29udGludWVcbiAgICAgICAgfVxuICAgICAgICAvLyBJZiB0aGUgY3VycmVudCBjaGFyYWN0ZXIgaXMgbm90IGFuIGVuZC1vZi1saW5lLCB0aGVuIHRoZSBldmVudFxuICAgICAgICAvLyBpcyBub3QgZmluaXNoZWQgYW5kIHdlIGhhdmUgdG8gcmVzZXQgdGhlIGV2ZW50RW5kQ2hlY2sgZmxhZ1xuICAgICAgICB0aGlzLmV2ZW50RW5kQ2hlY2sgPSBmYWxzZVxuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuXG4gICAgICAvLyBJZiB0aGUgY3VycmVudCBjaGFyYWN0ZXIgaXMgYW4gZW5kLW9mLWxpbmUsIHdlIGNhbiBwcm9jZXNzIHRoZVxuICAgICAgLy8gbGluZVxuICAgICAgaWYgKHRoaXMuYnVmZmVyW3RoaXMucG9zXSA9PT0gTEYgfHwgdGhpcy5idWZmZXJbdGhpcy5wb3NdID09PSBDUikge1xuICAgICAgICAvLyBJZiB0aGUgY3VycmVudCBjaGFyYWN0ZXIgaXMgYSBjYXJyaWFnZSByZXR1cm4sIHdlIG5lZWQgdG9cbiAgICAgICAgLy8gc2V0IHRoZSBjcmxmQ2hlY2sgZmxhZyB0byB0cnVlLCBhcyB3ZSBuZWVkIHRvIGNoZWNrIGlmIHRoZVxuICAgICAgICAvLyBuZXh0IGNoYXJhY3RlciBpcyBhIGxpbmUgZmVlZFxuICAgICAgICBpZiAodGhpcy5idWZmZXJbdGhpcy5wb3NdID09PSBDUikge1xuICAgICAgICAgIHRoaXMuY3JsZkNoZWNrID0gdHJ1ZVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gSW4gYW55IGNhc2UsIHdlIGNhbiBwcm9jZXNzIHRoZSBsaW5lIGFzIHdlIHJlYWNoZWQgYW5cbiAgICAgICAgLy8gZW5kLW9mLWxpbmUgY2hhcmFjdGVyXG4gICAgICAgIHRoaXMucGFyc2VMaW5lKHRoaXMuYnVmZmVyLnN1YmFycmF5KDAsIHRoaXMucG9zKSwgdGhpcy5ldmVudClcblxuICAgICAgICAvLyBSZW1vdmUgdGhlIHByb2Nlc3NlZCBsaW5lIGZyb20gdGhlIGJ1ZmZlclxuICAgICAgICB0aGlzLmJ1ZmZlciA9IHRoaXMuYnVmZmVyLnN1YmFycmF5KHRoaXMucG9zICsgMSlcbiAgICAgICAgLy8gUmVzZXQgdGhlIHBvc2l0aW9uIGFzIHdlIHJlbW92ZWQgdGhlIHByb2Nlc3NlZCBsaW5lIGZyb20gdGhlIGJ1ZmZlclxuICAgICAgICB0aGlzLnBvcyA9IDBcbiAgICAgICAgLy8gQSBsaW5lIHdhcyBwcm9jZXNzZWQgYW5kIHRoaXMgY291bGQgYmUgdGhlIGVuZCBvZiB0aGUgZXZlbnQuIFdlIG5lZWRcbiAgICAgICAgLy8gdG8gY2hlY2sgaWYgdGhlIG5leHQgbGluZSBpcyBlbXB0eSB0byBkZXRlcm1pbmUgaWYgdGhlIGV2ZW50IGlzXG4gICAgICAgIC8vIGZpbmlzaGVkLlxuICAgICAgICB0aGlzLmV2ZW50RW5kQ2hlY2sgPSB0cnVlXG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG5cbiAgICAgIHRoaXMucG9zKytcbiAgICB9XG5cbiAgICBjYWxsYmFjaygpXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtCdWZmZXJ9IGxpbmVcbiAgICogQHBhcmFtIHtFdmVudFN0cmVhbUV2ZW50fSBldmVudFxuICAgKi9cbiAgcGFyc2VMaW5lIChsaW5lLCBldmVudCkge1xuICAgIC8vIElmIHRoZSBsaW5lIGlzIGVtcHR5IChhIGJsYW5rIGxpbmUpXG4gICAgLy8gRGlzcGF0Y2ggdGhlIGV2ZW50LCBhcyBkZWZpbmVkIGJlbG93LlxuICAgIC8vIFRoaXMgd2lsbCBiZSBoYW5kbGVkIGluIHRoZSBfdHJhbnNmb3JtIG1ldGhvZFxuICAgIGlmIChsaW5lLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgLy8gSWYgdGhlIGxpbmUgc3RhcnRzIHdpdGggYSBVKzAwM0EgQ09MT04gY2hhcmFjdGVyICg6KVxuICAgIC8vIElnbm9yZSB0aGUgbGluZS5cbiAgICBjb25zdCBjb2xvblBvc2l0aW9uID0gbGluZS5pbmRleE9mKENPTE9OKVxuICAgIGlmIChjb2xvblBvc2l0aW9uID09PSAwKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBsZXQgZmllbGQgPSAnJ1xuICAgIGxldCB2YWx1ZSA9ICcnXG5cbiAgICAvLyBJZiB0aGUgbGluZSBjb250YWlucyBhIFUrMDAzQSBDT0xPTiBjaGFyYWN0ZXIgKDopXG4gICAgaWYgKGNvbG9uUG9zaXRpb24gIT09IC0xKSB7XG4gICAgICAvLyBDb2xsZWN0IHRoZSBjaGFyYWN0ZXJzIG9uIHRoZSBsaW5lIGJlZm9yZSB0aGUgZmlyc3QgVSswMDNBIENPTE9OXG4gICAgICAvLyBjaGFyYWN0ZXIgKDopLCBhbmQgbGV0IGZpZWxkIGJlIHRoYXQgc3RyaW5nLlxuICAgICAgLy8gVE9ETzogSW52ZXN0aWdhdGUgaWYgdGhlcmUgaXMgYSBtb3JlIHBlcmZvcm1hbnQgd2F5IHRvIGV4dHJhY3QgdGhlXG4gICAgICAvLyBmaWVsZFxuICAgICAgLy8gc2VlOiBodHRwczovL2dpdGh1Yi5jb20vbm9kZWpzL3VuZGljaS9pc3N1ZXMvMjYzMFxuICAgICAgZmllbGQgPSBsaW5lLnN1YmFycmF5KDAsIGNvbG9uUG9zaXRpb24pLnRvU3RyaW5nKCd1dGY4JylcblxuICAgICAgLy8gQ29sbGVjdCB0aGUgY2hhcmFjdGVycyBvbiB0aGUgbGluZSBhZnRlciB0aGUgZmlyc3QgVSswMDNBIENPTE9OXG4gICAgICAvLyBjaGFyYWN0ZXIgKDopLCBhbmQgbGV0IHZhbHVlIGJlIHRoYXQgc3RyaW5nLlxuICAgICAgLy8gSWYgdmFsdWUgc3RhcnRzIHdpdGggYSBVKzAwMjAgU1BBQ0UgY2hhcmFjdGVyLCByZW1vdmUgaXQgZnJvbSB2YWx1ZS5cbiAgICAgIGxldCB2YWx1ZVN0YXJ0ID0gY29sb25Qb3NpdGlvbiArIDFcbiAgICAgIGlmIChsaW5lW3ZhbHVlU3RhcnRdID09PSBTUEFDRSkge1xuICAgICAgICArK3ZhbHVlU3RhcnRcbiAgICAgIH1cbiAgICAgIC8vIFRPRE86IEludmVzdGlnYXRlIGlmIHRoZXJlIGlzIGEgbW9yZSBwZXJmb3JtYW50IHdheSB0byBleHRyYWN0IHRoZVxuICAgICAgLy8gdmFsdWVcbiAgICAgIC8vIHNlZTogaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy91bmRpY2kvaXNzdWVzLzI2MzBcbiAgICAgIHZhbHVlID0gbGluZS5zdWJhcnJheSh2YWx1ZVN0YXJ0KS50b1N0cmluZygndXRmOCcpXG5cbiAgICAgIC8vIE90aGVyd2lzZSwgdGhlIHN0cmluZyBpcyBub3QgZW1wdHkgYnV0IGRvZXMgbm90IGNvbnRhaW4gYSBVKzAwM0EgQ09MT05cbiAgICAgIC8vIGNoYXJhY3RlciAoOilcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gUHJvY2VzcyB0aGUgZmllbGQgdXNpbmcgdGhlIHN0ZXBzIGRlc2NyaWJlZCBiZWxvdywgdXNpbmcgdGhlIHdob2xlXG4gICAgICAvLyBsaW5lIGFzIHRoZSBmaWVsZCBuYW1lLCBhbmQgdGhlIGVtcHR5IHN0cmluZyBhcyB0aGUgZmllbGQgdmFsdWUuXG4gICAgICBmaWVsZCA9IGxpbmUudG9TdHJpbmcoJ3V0ZjgnKVxuICAgICAgdmFsdWUgPSAnJ1xuICAgIH1cblxuICAgIC8vIE1vZGlmeSB0aGUgZXZlbnQgd2l0aCB0aGUgZmllbGQgbmFtZSBhbmQgdmFsdWUuIFRoZSB2YWx1ZSBpcyBhbHNvXG4gICAgLy8gZGVjb2RlZCBhcyBVVEYtOFxuICAgIHN3aXRjaCAoZmllbGQpIHtcbiAgICAgIGNhc2UgJ2RhdGEnOlxuICAgICAgICBpZiAoZXZlbnRbZmllbGRdID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBldmVudFtmaWVsZF0gPSB2YWx1ZVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGV2ZW50W2ZpZWxkXSArPSBgXFxuJHt2YWx1ZX1gXG4gICAgICAgIH1cbiAgICAgICAgYnJlYWtcbiAgICAgIGNhc2UgJ3JldHJ5JzpcbiAgICAgICAgaWYgKGlzQVNDSUlOdW1iZXIodmFsdWUpKSB7XG4gICAgICAgICAgZXZlbnRbZmllbGRdID0gdmFsdWVcbiAgICAgICAgfVxuICAgICAgICBicmVha1xuICAgICAgY2FzZSAnaWQnOlxuICAgICAgICBpZiAoaXNWYWxpZExhc3RFdmVudElkKHZhbHVlKSkge1xuICAgICAgICAgIGV2ZW50W2ZpZWxkXSA9IHZhbHVlXG4gICAgICAgIH1cbiAgICAgICAgYnJlYWtcbiAgICAgIGNhc2UgJ2V2ZW50JzpcbiAgICAgICAgaWYgKHZhbHVlLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICBldmVudFtmaWVsZF0gPSB2YWx1ZVxuICAgICAgICB9XG4gICAgICAgIGJyZWFrXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7RXZlbnRTb3VyY2VTdHJlYW1FdmVudH0gZXZlbnRcbiAgICovXG4gIHByb2Nlc3NFdmVudCAoZXZlbnQpIHtcbiAgICBpZiAoZXZlbnQucmV0cnkgJiYgaXNBU0NJSU51bWJlcihldmVudC5yZXRyeSkpIHtcbiAgICAgIHRoaXMuc3RhdGUucmVjb25uZWN0aW9uVGltZSA9IHBhcnNlSW50KGV2ZW50LnJldHJ5LCAxMClcbiAgICB9XG5cbiAgICBpZiAoZXZlbnQuaWQgJiYgaXNWYWxpZExhc3RFdmVudElkKGV2ZW50LmlkKSkge1xuICAgICAgdGhpcy5zdGF0ZS5sYXN0RXZlbnRJZCA9IGV2ZW50LmlkXG4gICAgfVxuXG4gICAgLy8gb25seSBkaXNwYXRjaCBldmVudCwgd2hlbiBkYXRhIGlzIHByb3ZpZGVkXG4gICAgaWYgKGV2ZW50LmRhdGEgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhpcy5wdXNoKHtcbiAgICAgICAgdHlwZTogZXZlbnQuZXZlbnQgfHwgJ21lc3NhZ2UnLFxuICAgICAgICBvcHRpb25zOiB7XG4gICAgICAgICAgZGF0YTogZXZlbnQuZGF0YSxcbiAgICAgICAgICBsYXN0RXZlbnRJZDogdGhpcy5zdGF0ZS5sYXN0RXZlbnRJZCxcbiAgICAgICAgICBvcmlnaW46IHRoaXMuc3RhdGUub3JpZ2luXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfVxuICB9XG5cbiAgY2xlYXJFdmVudCAoKSB7XG4gICAgdGhpcy5ldmVudCA9IHtcbiAgICAgIGRhdGE6IHVuZGVmaW5lZCxcbiAgICAgIGV2ZW50OiB1bmRlZmluZWQsXG4gICAgICBpZDogdW5kZWZpbmVkLFxuICAgICAgcmV0cnk6IHVuZGVmaW5lZFxuICAgIH1cbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgRXZlbnRTb3VyY2VTdHJlYW1cbn1cbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgeyBwaXBlbGluZSB9ID0gcmVxdWlyZSgnbm9kZTpzdHJlYW0nKVxuY29uc3QgeyBmZXRjaGluZyB9ID0gcmVxdWlyZSgnLi4vZmV0Y2gnKVxuY29uc3QgeyBtYWtlUmVxdWVzdCB9ID0gcmVxdWlyZSgnLi4vZmV0Y2gvcmVxdWVzdCcpXG5jb25zdCB7IHdlYmlkbCB9ID0gcmVxdWlyZSgnLi4vZmV0Y2gvd2ViaWRsJylcbmNvbnN0IHsgRXZlbnRTb3VyY2VTdHJlYW0gfSA9IHJlcXVpcmUoJy4vZXZlbnRzb3VyY2Utc3RyZWFtJylcbmNvbnN0IHsgcGFyc2VNSU1FVHlwZSB9ID0gcmVxdWlyZSgnLi4vZmV0Y2gvZGF0YS11cmwnKVxuY29uc3QgeyBjcmVhdGVGYXN0TWVzc2FnZUV2ZW50IH0gPSByZXF1aXJlKCcuLi93ZWJzb2NrZXQvZXZlbnRzJylcbmNvbnN0IHsgaXNOZXR3b3JrRXJyb3IgfSA9IHJlcXVpcmUoJy4uL2ZldGNoL3Jlc3BvbnNlJylcbmNvbnN0IHsgZGVsYXkgfSA9IHJlcXVpcmUoJy4vdXRpbCcpXG5jb25zdCB7IGtFbnVtZXJhYmxlUHJvcGVydHkgfSA9IHJlcXVpcmUoJy4uLy4uL2NvcmUvdXRpbCcpXG5jb25zdCB7IGVudmlyb25tZW50U2V0dGluZ3NPYmplY3QgfSA9IHJlcXVpcmUoJy4uL2ZldGNoL3V0aWwnKVxuXG5sZXQgZXhwZXJpbWVudGFsV2FybmVkID0gZmFsc2VcblxuLyoqXG4gKiBBIHJlY29ubmVjdGlvbiB0aW1lLCBpbiBtaWxsaXNlY29uZHMuIFRoaXMgbXVzdCBpbml0aWFsbHkgYmUgYW4gaW1wbGVtZW50YXRpb24tZGVmaW5lZCB2YWx1ZSxcbiAqIHByb2JhYmx5IGluIHRoZSByZWdpb24gb2YgYSBmZXcgc2Vjb25kcy5cbiAqXG4gKiBJbiBDb21wYXJpc29uOlxuICogLSBDaHJvbWUgdXNlcyAzMDAwbXMuXG4gKiAtIERlbm8gdXNlcyA1MDAwbXMuXG4gKlxuICogQHR5cGUgezMwMDB9XG4gKi9cbmNvbnN0IGRlZmF1bHRSZWNvbm5lY3Rpb25UaW1lID0gMzAwMFxuXG4vKipcbiAqIFRoZSByZWFkeVN0YXRlIGF0dHJpYnV0ZSByZXByZXNlbnRzIHRoZSBzdGF0ZSBvZiB0aGUgY29ubmVjdGlvbi5cbiAqIEBlbnVtXG4gKiBAcmVhZG9ubHlcbiAqIEBzZWUgaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2Uvc2VydmVyLXNlbnQtZXZlbnRzLmh0bWwjZG9tLWV2ZW50c291cmNlLXJlYWR5c3RhdGUtZGV2XG4gKi9cblxuLyoqXG4gKiBUaGUgY29ubmVjdGlvbiBoYXMgbm90IHlldCBiZWVuIGVzdGFibGlzaGVkLCBvciBpdCB3YXMgY2xvc2VkIGFuZCB0aGUgdXNlclxuICogYWdlbnQgaXMgcmVjb25uZWN0aW5nLlxuICogQHR5cGUgezB9XG4gKi9cbmNvbnN0IENPTk5FQ1RJTkcgPSAwXG5cbi8qKlxuICogVGhlIHVzZXIgYWdlbnQgaGFzIGFuIG9wZW4gY29ubmVjdGlvbiBhbmQgaXMgZGlzcGF0Y2hpbmcgZXZlbnRzIGFzIGl0XG4gKiByZWNlaXZlcyB0aGVtLlxuICogQHR5cGUgezF9XG4gKi9cbmNvbnN0IE9QRU4gPSAxXG5cbi8qKlxuICogVGhlIGNvbm5lY3Rpb24gaXMgbm90IG9wZW4sIGFuZCB0aGUgdXNlciBhZ2VudCBpcyBub3QgdHJ5aW5nIHRvIHJlY29ubmVjdC5cbiAqIEB0eXBlIHsyfVxuICovXG5jb25zdCBDTE9TRUQgPSAyXG5cbi8qKlxuICogUmVxdWVzdHMgZm9yIHRoZSBlbGVtZW50IHdpbGwgaGF2ZSB0aGVpciBtb2RlIHNldCB0byBcImNvcnNcIiBhbmQgdGhlaXIgY3JlZGVudGlhbHMgbW9kZSBzZXQgdG8gXCJzYW1lLW9yaWdpblwiLlxuICogQHR5cGUgeydhbm9ueW1vdXMnfVxuICovXG5jb25zdCBBTk9OWU1PVVMgPSAnYW5vbnltb3VzJ1xuXG4vKipcbiAqIFJlcXVlc3RzIGZvciB0aGUgZWxlbWVudCB3aWxsIGhhdmUgdGhlaXIgbW9kZSBzZXQgdG8gXCJjb3JzXCIgYW5kIHRoZWlyIGNyZWRlbnRpYWxzIG1vZGUgc2V0IHRvIFwiaW5jbHVkZVwiLlxuICogQHR5cGUgeyd1c2UtY3JlZGVudGlhbHMnfVxuICovXG5jb25zdCBVU0VfQ1JFREVOVElBTFMgPSAndXNlLWNyZWRlbnRpYWxzJ1xuXG4vKipcbiAqIFRoZSBFdmVudFNvdXJjZSBpbnRlcmZhY2UgaXMgdXNlZCB0byByZWNlaXZlIHNlcnZlci1zZW50IGV2ZW50cy4gSXRcbiAqIGNvbm5lY3RzIHRvIGEgc2VydmVyIG92ZXIgSFRUUCBhbmQgcmVjZWl2ZXMgZXZlbnRzIGluIHRleHQvZXZlbnQtc3RyZWFtXG4gKiBmb3JtYXQgd2l0aG91dCBjbG9zaW5nIHRoZSBjb25uZWN0aW9uLlxuICogQGV4dGVuZHMge0V2ZW50VGFyZ2V0fVxuICogQHNlZSBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9zZXJ2ZXItc2VudC1ldmVudHMuaHRtbCNzZXJ2ZXItc2VudC1ldmVudHNcbiAqIEBhcGkgcHVibGljXG4gKi9cbmNsYXNzIEV2ZW50U291cmNlIGV4dGVuZHMgRXZlbnRUYXJnZXQge1xuICAjZXZlbnRzID0ge1xuICAgIG9wZW46IG51bGwsXG4gICAgZXJyb3I6IG51bGwsXG4gICAgbWVzc2FnZTogbnVsbFxuICB9XG5cbiAgI3VybCA9IG51bGxcbiAgI3dpdGhDcmVkZW50aWFscyA9IGZhbHNlXG5cbiAgI3JlYWR5U3RhdGUgPSBDT05ORUNUSU5HXG5cbiAgI3JlcXVlc3QgPSBudWxsXG4gICNjb250cm9sbGVyID0gbnVsbFxuXG4gICNkaXNwYXRjaGVyXG5cbiAgLyoqXG4gICAqIEB0eXBlIHtpbXBvcnQoJy4vZXZlbnRzb3VyY2Utc3RyZWFtJykuZXZlbnRTb3VyY2VTZXR0aW5nc31cbiAgICovXG4gICNzdGF0ZVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIGEgbmV3IEV2ZW50U291cmNlIG9iamVjdC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IHVybFxuICAgKiBAcGFyYW0ge0V2ZW50U291cmNlSW5pdH0gW2V2ZW50U291cmNlSW5pdERpY3RdXG4gICAqIEBzZWUgaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2Uvc2VydmVyLXNlbnQtZXZlbnRzLmh0bWwjdGhlLWV2ZW50c291cmNlLWludGVyZmFjZVxuICAgKi9cbiAgY29uc3RydWN0b3IgKHVybCwgZXZlbnRTb3VyY2VJbml0RGljdCA9IHt9KSB7XG4gICAgLy8gMS4gTGV0IGV2IGJlIGEgbmV3IEV2ZW50U291cmNlIG9iamVjdC5cbiAgICBzdXBlcigpXG5cbiAgICB3ZWJpZGwudXRpbC5tYXJrQXNVbmNsb25lYWJsZSh0aGlzKVxuXG4gICAgY29uc3QgcHJlZml4ID0gJ0V2ZW50U291cmNlIGNvbnN0cnVjdG9yJ1xuICAgIHdlYmlkbC5hcmd1bWVudExlbmd0aENoZWNrKGFyZ3VtZW50cywgMSwgcHJlZml4KVxuXG4gICAgaWYgKCFleHBlcmltZW50YWxXYXJuZWQpIHtcbiAgICAgIGV4cGVyaW1lbnRhbFdhcm5lZCA9IHRydWVcbiAgICAgIHByb2Nlc3MuZW1pdFdhcm5pbmcoJ0V2ZW50U291cmNlIGlzIGV4cGVyaW1lbnRhbCwgZXhwZWN0IHRoZW0gdG8gY2hhbmdlIGF0IGFueSB0aW1lLicsIHtcbiAgICAgICAgY29kZTogJ1VORElDSS1FUydcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgdXJsID0gd2ViaWRsLmNvbnZlcnRlcnMuVVNWU3RyaW5nKHVybCwgcHJlZml4LCAndXJsJylcbiAgICBldmVudFNvdXJjZUluaXREaWN0ID0gd2ViaWRsLmNvbnZlcnRlcnMuRXZlbnRTb3VyY2VJbml0RGljdChldmVudFNvdXJjZUluaXREaWN0LCBwcmVmaXgsICdldmVudFNvdXJjZUluaXREaWN0JylcblxuICAgIHRoaXMuI2Rpc3BhdGNoZXIgPSBldmVudFNvdXJjZUluaXREaWN0LmRpc3BhdGNoZXJcbiAgICB0aGlzLiNzdGF0ZSA9IHtcbiAgICAgIGxhc3RFdmVudElkOiAnJyxcbiAgICAgIHJlY29ubmVjdGlvblRpbWU6IGRlZmF1bHRSZWNvbm5lY3Rpb25UaW1lXG4gICAgfVxuXG4gICAgLy8gMi4gTGV0IHNldHRpbmdzIGJlIGV2J3MgcmVsZXZhbnQgc2V0dGluZ3Mgb2JqZWN0LlxuICAgIC8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL3dlYmFwcGFwaXMuaHRtbCNlbnZpcm9ubWVudC1zZXR0aW5ncy1vYmplY3RcbiAgICBjb25zdCBzZXR0aW5ncyA9IGVudmlyb25tZW50U2V0dGluZ3NPYmplY3RcblxuICAgIGxldCB1cmxSZWNvcmRcblxuICAgIHRyeSB7XG4gICAgICAvLyAzLiBMZXQgdXJsUmVjb3JkIGJlIHRoZSByZXN1bHQgb2YgZW5jb2RpbmctcGFyc2luZyBhIFVSTCBnaXZlbiB1cmwsIHJlbGF0aXZlIHRvIHNldHRpbmdzLlxuICAgICAgdXJsUmVjb3JkID0gbmV3IFVSTCh1cmwsIHNldHRpbmdzLnNldHRpbmdzT2JqZWN0LmJhc2VVcmwpXG4gICAgICB0aGlzLiNzdGF0ZS5vcmlnaW4gPSB1cmxSZWNvcmQub3JpZ2luXG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgLy8gNC4gSWYgdXJsUmVjb3JkIGlzIGZhaWx1cmUsIHRoZW4gdGhyb3cgYSBcIlN5bnRheEVycm9yXCIgRE9NRXhjZXB0aW9uLlxuICAgICAgdGhyb3cgbmV3IERPTUV4Y2VwdGlvbihlLCAnU3ludGF4RXJyb3InKVxuICAgIH1cblxuICAgIC8vIDUuIFNldCBldidzIHVybCB0byB1cmxSZWNvcmQuXG4gICAgdGhpcy4jdXJsID0gdXJsUmVjb3JkLmhyZWZcblxuICAgIC8vIDYuIExldCBjb3JzQXR0cmlidXRlU3RhdGUgYmUgQW5vbnltb3VzLlxuICAgIGxldCBjb3JzQXR0cmlidXRlU3RhdGUgPSBBTk9OWU1PVVNcblxuICAgIC8vIDcuIElmIHRoZSB2YWx1ZSBvZiBldmVudFNvdXJjZUluaXREaWN0J3Mgd2l0aENyZWRlbnRpYWxzIG1lbWJlciBpcyB0cnVlLFxuICAgIC8vIHRoZW4gc2V0IGNvcnNBdHRyaWJ1dGVTdGF0ZSB0byBVc2UgQ3JlZGVudGlhbHMgYW5kIHNldCBldidzXG4gICAgLy8gd2l0aENyZWRlbnRpYWxzIGF0dHJpYnV0ZSB0byB0cnVlLlxuICAgIGlmIChldmVudFNvdXJjZUluaXREaWN0LndpdGhDcmVkZW50aWFscykge1xuICAgICAgY29yc0F0dHJpYnV0ZVN0YXRlID0gVVNFX0NSRURFTlRJQUxTXG4gICAgICB0aGlzLiN3aXRoQ3JlZGVudGlhbHMgPSB0cnVlXG4gICAgfVxuXG4gICAgLy8gOC4gTGV0IHJlcXVlc3QgYmUgdGhlIHJlc3VsdCBvZiBjcmVhdGluZyBhIHBvdGVudGlhbC1DT1JTIHJlcXVlc3QgZ2l2ZW5cbiAgICAvLyB1cmxSZWNvcmQsIHRoZSBlbXB0eSBzdHJpbmcsIGFuZCBjb3JzQXR0cmlidXRlU3RhdGUuXG4gICAgY29uc3QgaW5pdFJlcXVlc3QgPSB7XG4gICAgICByZWRpcmVjdDogJ2ZvbGxvdycsXG4gICAgICBrZWVwYWxpdmU6IHRydWUsXG4gICAgICAvLyBAc2VlIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL3VybHMtYW5kLWZldGNoaW5nLmh0bWwjY29ycy1zZXR0aW5ncy1hdHRyaWJ1dGVzXG4gICAgICBtb2RlOiAnY29ycycsXG4gICAgICBjcmVkZW50aWFsczogY29yc0F0dHJpYnV0ZVN0YXRlID09PSAnYW5vbnltb3VzJ1xuICAgICAgICA/ICdzYW1lLW9yaWdpbidcbiAgICAgICAgOiAnb21pdCcsXG4gICAgICByZWZlcnJlcjogJ25vLXJlZmVycmVyJ1xuICAgIH1cblxuICAgIC8vIDkuIFNldCByZXF1ZXN0J3MgY2xpZW50IHRvIHNldHRpbmdzLlxuICAgIGluaXRSZXF1ZXN0LmNsaWVudCA9IGVudmlyb25tZW50U2V0dGluZ3NPYmplY3Quc2V0dGluZ3NPYmplY3RcblxuICAgIC8vIDEwLiBVc2VyIGFnZW50cyBtYXkgc2V0IChgQWNjZXB0YCwgYHRleHQvZXZlbnQtc3RyZWFtYCkgaW4gcmVxdWVzdCdzIGhlYWRlciBsaXN0LlxuICAgIGluaXRSZXF1ZXN0LmhlYWRlcnNMaXN0ID0gW1snYWNjZXB0JywgeyBuYW1lOiAnYWNjZXB0JywgdmFsdWU6ICd0ZXh0L2V2ZW50LXN0cmVhbScgfV1dXG5cbiAgICAvLyAxMS4gU2V0IHJlcXVlc3QncyBjYWNoZSBtb2RlIHRvIFwibm8tc3RvcmVcIi5cbiAgICBpbml0UmVxdWVzdC5jYWNoZSA9ICduby1zdG9yZSdcblxuICAgIC8vIDEyLiBTZXQgcmVxdWVzdCdzIGluaXRpYXRvciB0eXBlIHRvIFwib3RoZXJcIi5cbiAgICBpbml0UmVxdWVzdC5pbml0aWF0b3IgPSAnb3RoZXInXG5cbiAgICBpbml0UmVxdWVzdC51cmxMaXN0ID0gW25ldyBVUkwodGhpcy4jdXJsKV1cblxuICAgIC8vIDEzLiBTZXQgZXYncyByZXF1ZXN0IHRvIHJlcXVlc3QuXG4gICAgdGhpcy4jcmVxdWVzdCA9IG1ha2VSZXF1ZXN0KGluaXRSZXF1ZXN0KVxuXG4gICAgdGhpcy4jY29ubmVjdCgpXG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgc3RhdGUgb2YgdGhpcyBFdmVudFNvdXJjZSBvYmplY3QncyBjb25uZWN0aW9uLiBJdCBjYW4gaGF2ZSB0aGVcbiAgICogdmFsdWVzIGRlc2NyaWJlZCBiZWxvdy5cbiAgICogQHJldHVybnMgezB8MXwyfVxuICAgKiBAcmVhZG9ubHlcbiAgICovXG4gIGdldCByZWFkeVN0YXRlICgpIHtcbiAgICByZXR1cm4gdGhpcy4jcmVhZHlTdGF0ZVxuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIFVSTCBwcm92aWRpbmcgdGhlIGV2ZW50IHN0cmVhbS5cbiAgICogQHJlYWRvbmx5XG4gICAqIEByZXR1cm5zIHtzdHJpbmd9XG4gICAqL1xuICBnZXQgdXJsICgpIHtcbiAgICByZXR1cm4gdGhpcy4jdXJsXG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyBhIGJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIHRoZSBFdmVudFNvdXJjZSBvYmplY3Qgd2FzXG4gICAqIGluc3RhbnRpYXRlZCB3aXRoIENPUlMgY3JlZGVudGlhbHMgc2V0ICh0cnVlKSwgb3Igbm90IChmYWxzZSwgdGhlIGRlZmF1bHQpLlxuICAgKi9cbiAgZ2V0IHdpdGhDcmVkZW50aWFscyAoKSB7XG4gICAgcmV0dXJuIHRoaXMuI3dpdGhDcmVkZW50aWFsc1xuICB9XG5cbiAgI2Nvbm5lY3QgKCkge1xuICAgIGlmICh0aGlzLiNyZWFkeVN0YXRlID09PSBDTE9TRUQpIHJldHVyblxuXG4gICAgdGhpcy4jcmVhZHlTdGF0ZSA9IENPTk5FQ1RJTkdcblxuICAgIGNvbnN0IGZldGNoUGFyYW1zID0ge1xuICAgICAgcmVxdWVzdDogdGhpcy4jcmVxdWVzdCxcbiAgICAgIGRpc3BhdGNoZXI6IHRoaXMuI2Rpc3BhdGNoZXJcbiAgICB9XG5cbiAgICAvLyAxNC4gTGV0IHByb2Nlc3NFdmVudFNvdXJjZUVuZE9mQm9keSBnaXZlbiByZXNwb25zZSByZXMgYmUgdGhlIGZvbGxvd2luZyBzdGVwOiBpZiByZXMgaXMgbm90IGEgbmV0d29yayBlcnJvciwgdGhlbiByZWVzdGFibGlzaCB0aGUgY29ubmVjdGlvbi5cbiAgICBjb25zdCBwcm9jZXNzRXZlbnRTb3VyY2VFbmRPZkJvZHkgPSAocmVzcG9uc2UpID0+IHtcbiAgICAgIGlmIChpc05ldHdvcmtFcnJvcihyZXNwb25zZSkpIHtcbiAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBFdmVudCgnZXJyb3InKSlcbiAgICAgICAgdGhpcy5jbG9zZSgpXG4gICAgICB9XG5cbiAgICAgIHRoaXMuI3JlY29ubmVjdCgpXG4gICAgfVxuXG4gICAgLy8gMTUuIEZldGNoIHJlcXVlc3QsIHdpdGggcHJvY2Vzc1Jlc3BvbnNlRW5kT2ZCb2R5IHNldCB0byBwcm9jZXNzRXZlbnRTb3VyY2VFbmRPZkJvZHkuLi5cbiAgICBmZXRjaFBhcmFtcy5wcm9jZXNzUmVzcG9uc2VFbmRPZkJvZHkgPSBwcm9jZXNzRXZlbnRTb3VyY2VFbmRPZkJvZHlcblxuICAgIC8vIGFuZCBwcm9jZXNzUmVzcG9uc2Ugc2V0IHRvIHRoZSBmb2xsb3dpbmcgc3RlcHMgZ2l2ZW4gcmVzcG9uc2UgcmVzOlxuICAgIGZldGNoUGFyYW1zLnByb2Nlc3NSZXNwb25zZSA9IChyZXNwb25zZSkgPT4ge1xuICAgICAgLy8gMS4gSWYgcmVzIGlzIGFuIGFib3J0ZWQgbmV0d29yayBlcnJvciwgdGhlbiBmYWlsIHRoZSBjb25uZWN0aW9uLlxuXG4gICAgICBpZiAoaXNOZXR3b3JrRXJyb3IocmVzcG9uc2UpKSB7XG4gICAgICAgIC8vIDEuIFdoZW4gYSB1c2VyIGFnZW50IGlzIHRvIGZhaWwgdGhlIGNvbm5lY3Rpb24sIHRoZSB1c2VyIGFnZW50XG4gICAgICAgIC8vIG11c3QgcXVldWUgYSB0YXNrIHdoaWNoLCBpZiB0aGUgcmVhZHlTdGF0ZSBhdHRyaWJ1dGUgaXMgc2V0IHRvIGFcbiAgICAgICAgLy8gdmFsdWUgb3RoZXIgdGhhbiBDTE9TRUQsIHNldHMgdGhlIHJlYWR5U3RhdGUgYXR0cmlidXRlIHRvIENMT1NFRFxuICAgICAgICAvLyBhbmQgZmlyZXMgYW4gZXZlbnQgbmFtZWQgZXJyb3IgYXQgdGhlIEV2ZW50U291cmNlIG9iamVjdC4gT25jZSB0aGVcbiAgICAgICAgLy8gdXNlciBhZ2VudCBoYXMgZmFpbGVkIHRoZSBjb25uZWN0aW9uLCBpdCBkb2VzIG5vdCBhdHRlbXB0IHRvXG4gICAgICAgIC8vIHJlY29ubmVjdC5cbiAgICAgICAgaWYgKHJlc3BvbnNlLmFib3J0ZWQpIHtcbiAgICAgICAgICB0aGlzLmNsb3NlKClcbiAgICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KCdlcnJvcicpKVxuICAgICAgICAgIHJldHVyblxuICAgICAgICAgIC8vIDIuIE90aGVyd2lzZSwgaWYgcmVzIGlzIGEgbmV0d29yayBlcnJvciwgdGhlbiByZWVzdGFibGlzaCB0aGVcbiAgICAgICAgICAvLyBjb25uZWN0aW9uLCB1bmxlc3MgdGhlIHVzZXIgYWdlbnQga25vd3MgdGhhdCB0byBiZSBmdXRpbGUsIGluXG4gICAgICAgICAgLy8gd2hpY2ggY2FzZSB0aGUgdXNlciBhZ2VudCBtYXkgZmFpbCB0aGUgY29ubmVjdGlvbi5cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLiNyZWNvbm5lY3QoKVxuICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIDMuIE90aGVyd2lzZSwgaWYgcmVzJ3Mgc3RhdHVzIGlzIG5vdCAyMDAsIG9yIGlmIHJlcydzIGBDb250ZW50LVR5cGVgXG4gICAgICAvLyBpcyBub3QgYHRleHQvZXZlbnQtc3RyZWFtYCwgdGhlbiBmYWlsIHRoZSBjb25uZWN0aW9uLlxuICAgICAgY29uc3QgY29udGVudFR5cGUgPSByZXNwb25zZS5oZWFkZXJzTGlzdC5nZXQoJ2NvbnRlbnQtdHlwZScsIHRydWUpXG4gICAgICBjb25zdCBtaW1lVHlwZSA9IGNvbnRlbnRUeXBlICE9PSBudWxsID8gcGFyc2VNSU1FVHlwZShjb250ZW50VHlwZSkgOiAnZmFpbHVyZSdcbiAgICAgIGNvbnN0IGNvbnRlbnRUeXBlVmFsaWQgPSBtaW1lVHlwZSAhPT0gJ2ZhaWx1cmUnICYmIG1pbWVUeXBlLmVzc2VuY2UgPT09ICd0ZXh0L2V2ZW50LXN0cmVhbSdcbiAgICAgIGlmIChcbiAgICAgICAgcmVzcG9uc2Uuc3RhdHVzICE9PSAyMDAgfHxcbiAgICAgICAgY29udGVudFR5cGVWYWxpZCA9PT0gZmFsc2VcbiAgICAgICkge1xuICAgICAgICB0aGlzLmNsb3NlKClcbiAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBFdmVudCgnZXJyb3InKSlcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIC8vIDQuIE90aGVyd2lzZSwgYW5ub3VuY2UgdGhlIGNvbm5lY3Rpb24gYW5kIGludGVycHJldCByZXMncyBib2R5XG4gICAgICAvLyBsaW5lIGJ5IGxpbmUuXG5cbiAgICAgIC8vIFdoZW4gYSB1c2VyIGFnZW50IGlzIHRvIGFubm91bmNlIHRoZSBjb25uZWN0aW9uLCB0aGUgdXNlciBhZ2VudFxuICAgICAgLy8gbXVzdCBxdWV1ZSBhIHRhc2sgd2hpY2gsIGlmIHRoZSByZWFkeVN0YXRlIGF0dHJpYnV0ZSBpcyBzZXQgdG8gYVxuICAgICAgLy8gdmFsdWUgb3RoZXIgdGhhbiBDTE9TRUQsIHNldHMgdGhlIHJlYWR5U3RhdGUgYXR0cmlidXRlIHRvIE9QRU5cbiAgICAgIC8vIGFuZCBmaXJlcyBhbiBldmVudCBuYW1lZCBvcGVuIGF0IHRoZSBFdmVudFNvdXJjZSBvYmplY3QuXG4gICAgICAvLyBAc2VlIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL3NlcnZlci1zZW50LWV2ZW50cy5odG1sI3NzZS1wcm9jZXNzaW5nLW1vZGVsXG4gICAgICB0aGlzLiNyZWFkeVN0YXRlID0gT1BFTlxuICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBFdmVudCgnb3BlbicpKVxuXG4gICAgICAvLyBJZiByZWRpcmVjdGVkIHRvIGEgZGlmZmVyZW50IG9yaWdpbiwgc2V0IHRoZSBvcmlnaW4gdG8gdGhlIG5ldyBvcmlnaW4uXG4gICAgICB0aGlzLiNzdGF0ZS5vcmlnaW4gPSByZXNwb25zZS51cmxMaXN0W3Jlc3BvbnNlLnVybExpc3QubGVuZ3RoIC0gMV0ub3JpZ2luXG5cbiAgICAgIGNvbnN0IGV2ZW50U291cmNlU3RyZWFtID0gbmV3IEV2ZW50U291cmNlU3RyZWFtKHtcbiAgICAgICAgZXZlbnRTb3VyY2VTZXR0aW5nczogdGhpcy4jc3RhdGUsXG4gICAgICAgIHB1c2g6IChldmVudCkgPT4ge1xuICAgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudChjcmVhdGVGYXN0TWVzc2FnZUV2ZW50KFxuICAgICAgICAgICAgZXZlbnQudHlwZSxcbiAgICAgICAgICAgIGV2ZW50Lm9wdGlvbnNcbiAgICAgICAgICApKVxuICAgICAgICB9XG4gICAgICB9KVxuXG4gICAgICBwaXBlbGluZShyZXNwb25zZS5ib2R5LnN0cmVhbSxcbiAgICAgICAgZXZlbnRTb3VyY2VTdHJlYW0sXG4gICAgICAgIChlcnJvcikgPT4ge1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIGVycm9yPy5hYm9ydGVkID09PSBmYWxzZVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgdGhpcy5jbG9zZSgpXG4gICAgICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KCdlcnJvcicpKVxuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICB9XG5cbiAgICB0aGlzLiNjb250cm9sbGVyID0gZmV0Y2hpbmcoZmV0Y2hQYXJhbXMpXG4gIH1cblxuICAvKipcbiAgICogQHNlZSBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9zZXJ2ZXItc2VudC1ldmVudHMuaHRtbCNzc2UtcHJvY2Vzc2luZy1tb2RlbFxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn1cbiAgICovXG4gIGFzeW5jICNyZWNvbm5lY3QgKCkge1xuICAgIC8vIFdoZW4gYSB1c2VyIGFnZW50IGlzIHRvIHJlZXN0YWJsaXNoIHRoZSBjb25uZWN0aW9uLCB0aGUgdXNlciBhZ2VudCBtdXN0XG4gICAgLy8gcnVuIHRoZSBmb2xsb3dpbmcgc3RlcHMuIFRoZXNlIHN0ZXBzIGFyZSBydW4gaW4gcGFyYWxsZWwsIG5vdCBhcyBwYXJ0IG9mXG4gICAgLy8gYSB0YXNrLiAoVGhlIHRhc2tzIHRoYXQgaXQgcXVldWVzLCBvZiBjb3Vyc2UsIGFyZSBydW4gbGlrZSBub3JtYWwgdGFza3NcbiAgICAvLyBhbmQgbm90IHRoZW1zZWx2ZXMgaW4gcGFyYWxsZWwuKVxuXG4gICAgLy8gMS4gUXVldWUgYSB0YXNrIHRvIHJ1biB0aGUgZm9sbG93aW5nIHN0ZXBzOlxuXG4gICAgLy8gICAxLiBJZiB0aGUgcmVhZHlTdGF0ZSBhdHRyaWJ1dGUgaXMgc2V0IHRvIENMT1NFRCwgYWJvcnQgdGhlIHRhc2suXG4gICAgaWYgKHRoaXMuI3JlYWR5U3RhdGUgPT09IENMT1NFRCkgcmV0dXJuXG5cbiAgICAvLyAgIDIuIFNldCB0aGUgcmVhZHlTdGF0ZSBhdHRyaWJ1dGUgdG8gQ09OTkVDVElORy5cbiAgICB0aGlzLiNyZWFkeVN0YXRlID0gQ09OTkVDVElOR1xuXG4gICAgLy8gICAzLiBGaXJlIGFuIGV2ZW50IG5hbWVkIGVycm9yIGF0IHRoZSBFdmVudFNvdXJjZSBvYmplY3QuXG4gICAgdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBFdmVudCgnZXJyb3InKSlcblxuICAgIC8vIDIuIFdhaXQgYSBkZWxheSBlcXVhbCB0byB0aGUgcmVjb25uZWN0aW9uIHRpbWUgb2YgdGhlIGV2ZW50IHNvdXJjZS5cbiAgICBhd2FpdCBkZWxheSh0aGlzLiNzdGF0ZS5yZWNvbm5lY3Rpb25UaW1lKVxuXG4gICAgLy8gNS4gUXVldWUgYSB0YXNrIHRvIHJ1biB0aGUgZm9sbG93aW5nIHN0ZXBzOlxuXG4gICAgLy8gICAxLiBJZiB0aGUgRXZlbnRTb3VyY2Ugb2JqZWN0J3MgcmVhZHlTdGF0ZSBhdHRyaWJ1dGUgaXMgbm90IHNldCB0b1xuICAgIC8vICAgICAgQ09OTkVDVElORywgdGhlbiByZXR1cm4uXG4gICAgaWYgKHRoaXMuI3JlYWR5U3RhdGUgIT09IENPTk5FQ1RJTkcpIHJldHVyblxuXG4gICAgLy8gICAyLiBMZXQgcmVxdWVzdCBiZSB0aGUgRXZlbnRTb3VyY2Ugb2JqZWN0J3MgcmVxdWVzdC5cbiAgICAvLyAgIDMuIElmIHRoZSBFdmVudFNvdXJjZSBvYmplY3QncyBsYXN0IGV2ZW50IElEIHN0cmluZyBpcyBub3QgdGhlIGVtcHR5XG4gICAgLy8gICAgICBzdHJpbmcsIHRoZW46XG4gICAgLy8gICAgICAxLiBMZXQgbGFzdEV2ZW50SURWYWx1ZSBiZSB0aGUgRXZlbnRTb3VyY2Ugb2JqZWN0J3MgbGFzdCBldmVudCBJRFxuICAgIC8vICAgICAgICAgc3RyaW5nLCBlbmNvZGVkIGFzIFVURi04LlxuICAgIC8vICAgICAgMi4gU2V0IChgTGFzdC1FdmVudC1JRGAsIGxhc3RFdmVudElEVmFsdWUpIGluIHJlcXVlc3QncyBoZWFkZXJcbiAgICAvLyAgICAgICAgIGxpc3QuXG4gICAgaWYgKHRoaXMuI3N0YXRlLmxhc3RFdmVudElkLmxlbmd0aCkge1xuICAgICAgdGhpcy4jcmVxdWVzdC5oZWFkZXJzTGlzdC5zZXQoJ2xhc3QtZXZlbnQtaWQnLCB0aGlzLiNzdGF0ZS5sYXN0RXZlbnRJZCwgdHJ1ZSlcbiAgICB9XG5cbiAgICAvLyAgIDQuIEZldGNoIHJlcXVlc3QgYW5kIHByb2Nlc3MgdGhlIHJlc3BvbnNlIG9idGFpbmVkIGluIHRoaXMgZmFzaGlvbiwgaWYgYW55LCBhcyBkZXNjcmliZWQgZWFybGllciBpbiB0aGlzIHNlY3Rpb24uXG4gICAgdGhpcy4jY29ubmVjdCgpXG4gIH1cblxuICAvKipcbiAgICogQ2xvc2VzIHRoZSBjb25uZWN0aW9uLCBpZiBhbnksIGFuZCBzZXRzIHRoZSByZWFkeVN0YXRlIGF0dHJpYnV0ZSB0b1xuICAgKiBDTE9TRUQuXG4gICAqL1xuICBjbG9zZSAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRXZlbnRTb3VyY2UpXG5cbiAgICBpZiAodGhpcy4jcmVhZHlTdGF0ZSA9PT0gQ0xPU0VEKSByZXR1cm5cbiAgICB0aGlzLiNyZWFkeVN0YXRlID0gQ0xPU0VEXG4gICAgdGhpcy4jY29udHJvbGxlci5hYm9ydCgpXG4gICAgdGhpcy4jcmVxdWVzdCA9IG51bGxcbiAgfVxuXG4gIGdldCBvbm9wZW4gKCkge1xuICAgIHJldHVybiB0aGlzLiNldmVudHMub3BlblxuICB9XG5cbiAgc2V0IG9ub3BlbiAoZm4pIHtcbiAgICBpZiAodGhpcy4jZXZlbnRzLm9wZW4pIHtcbiAgICAgIHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcignb3BlbicsIHRoaXMuI2V2ZW50cy5vcGVuKVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgZm4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRoaXMuI2V2ZW50cy5vcGVuID0gZm5cbiAgICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcignb3BlbicsIGZuKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLiNldmVudHMub3BlbiA9IG51bGxcbiAgICB9XG4gIH1cblxuICBnZXQgb25tZXNzYWdlICgpIHtcbiAgICByZXR1cm4gdGhpcy4jZXZlbnRzLm1lc3NhZ2VcbiAgfVxuXG4gIHNldCBvbm1lc3NhZ2UgKGZuKSB7XG4gICAgaWYgKHRoaXMuI2V2ZW50cy5tZXNzYWdlKSB7XG4gICAgICB0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21lc3NhZ2UnLCB0aGlzLiNldmVudHMubWVzc2FnZSlcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGZuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aGlzLiNldmVudHMubWVzc2FnZSA9IGZuXG4gICAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoJ21lc3NhZ2UnLCBmbilcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy4jZXZlbnRzLm1lc3NhZ2UgPSBudWxsXG4gICAgfVxuICB9XG5cbiAgZ2V0IG9uZXJyb3IgKCkge1xuICAgIHJldHVybiB0aGlzLiNldmVudHMuZXJyb3JcbiAgfVxuXG4gIHNldCBvbmVycm9yIChmbikge1xuICAgIGlmICh0aGlzLiNldmVudHMuZXJyb3IpIHtcbiAgICAgIHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcignZXJyb3InLCB0aGlzLiNldmVudHMuZXJyb3IpXG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBmbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhpcy4jZXZlbnRzLmVycm9yID0gZm5cbiAgICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcignZXJyb3InLCBmbilcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy4jZXZlbnRzLmVycm9yID0gbnVsbFxuICAgIH1cbiAgfVxufVxuXG5jb25zdCBjb25zdGFudHNQcm9wZXJ0eURlc2NyaXB0b3JzID0ge1xuICBDT05ORUNUSU5HOiB7XG4gICAgX19wcm90b19fOiBudWxsLFxuICAgIGNvbmZpZ3VyYWJsZTogZmFsc2UsXG4gICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICB2YWx1ZTogQ09OTkVDVElORyxcbiAgICB3cml0YWJsZTogZmFsc2VcbiAgfSxcbiAgT1BFTjoge1xuICAgIF9fcHJvdG9fXzogbnVsbCxcbiAgICBjb25maWd1cmFibGU6IGZhbHNlLFxuICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgdmFsdWU6IE9QRU4sXG4gICAgd3JpdGFibGU6IGZhbHNlXG4gIH0sXG4gIENMT1NFRDoge1xuICAgIF9fcHJvdG9fXzogbnVsbCxcbiAgICBjb25maWd1cmFibGU6IGZhbHNlLFxuICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgdmFsdWU6IENMT1NFRCxcbiAgICB3cml0YWJsZTogZmFsc2VcbiAgfVxufVxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhFdmVudFNvdXJjZSwgY29uc3RhbnRzUHJvcGVydHlEZXNjcmlwdG9ycylcbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEV2ZW50U291cmNlLnByb3RvdHlwZSwgY29uc3RhbnRzUHJvcGVydHlEZXNjcmlwdG9ycylcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoRXZlbnRTb3VyY2UucHJvdG90eXBlLCB7XG4gIGNsb3NlOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBvbmVycm9yOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBvbm1lc3NhZ2U6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIG9ub3Blbjoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgcmVhZHlTdGF0ZToga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgdXJsOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICB3aXRoQ3JlZGVudGlhbHM6IGtFbnVtZXJhYmxlUHJvcGVydHlcbn0pXG5cbndlYmlkbC5jb252ZXJ0ZXJzLkV2ZW50U291cmNlSW5pdERpY3QgPSB3ZWJpZGwuZGljdGlvbmFyeUNvbnZlcnRlcihbXG4gIHtcbiAgICBrZXk6ICd3aXRoQ3JlZGVudGlhbHMnLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnMuYm9vbGVhbixcbiAgICBkZWZhdWx0VmFsdWU6ICgpID0+IGZhbHNlXG4gIH0sXG4gIHtcbiAgICBrZXk6ICdkaXNwYXRjaGVyJywgLy8gdW5kaWNpIG9ubHlcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzLmFueVxuICB9XG5dKVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgRXZlbnRTb3VyY2UsXG4gIGRlZmF1bHRSZWNvbm5lY3Rpb25UaW1lXG59XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IENsaWVudCA9IHJlcXVpcmUoJy4vbGliL2Rpc3BhdGNoZXIvY2xpZW50JylcbmNvbnN0IERpc3BhdGNoZXIgPSByZXF1aXJlKCcuL2xpYi9kaXNwYXRjaGVyL2Rpc3BhdGNoZXInKVxuY29uc3QgUG9vbCA9IHJlcXVpcmUoJy4vbGliL2Rpc3BhdGNoZXIvcG9vbCcpXG5jb25zdCBCYWxhbmNlZFBvb2wgPSByZXF1aXJlKCcuL2xpYi9kaXNwYXRjaGVyL2JhbGFuY2VkLXBvb2wnKVxuY29uc3QgQWdlbnQgPSByZXF1aXJlKCcuL2xpYi9kaXNwYXRjaGVyL2FnZW50JylcbmNvbnN0IFByb3h5QWdlbnQgPSByZXF1aXJlKCcuL2xpYi9kaXNwYXRjaGVyL3Byb3h5LWFnZW50JylcbmNvbnN0IEVudkh0dHBQcm94eUFnZW50ID0gcmVxdWlyZSgnLi9saWIvZGlzcGF0Y2hlci9lbnYtaHR0cC1wcm94eS1hZ2VudCcpXG5jb25zdCBSZXRyeUFnZW50ID0gcmVxdWlyZSgnLi9saWIvZGlzcGF0Y2hlci9yZXRyeS1hZ2VudCcpXG5jb25zdCBlcnJvcnMgPSByZXF1aXJlKCcuL2xpYi9jb3JlL2Vycm9ycycpXG5jb25zdCB1dGlsID0gcmVxdWlyZSgnLi9saWIvY29yZS91dGlsJylcbmNvbnN0IHsgSW52YWxpZEFyZ3VtZW50RXJyb3IgfSA9IGVycm9yc1xuY29uc3QgYXBpID0gcmVxdWlyZSgnLi9saWIvYXBpJylcbmNvbnN0IGJ1aWxkQ29ubmVjdG9yID0gcmVxdWlyZSgnLi9saWIvY29yZS9jb25uZWN0JylcbmNvbnN0IE1vY2tDbGllbnQgPSByZXF1aXJlKCcuL2xpYi9tb2NrL21vY2stY2xpZW50JylcbmNvbnN0IE1vY2tBZ2VudCA9IHJlcXVpcmUoJy4vbGliL21vY2svbW9jay1hZ2VudCcpXG5jb25zdCBNb2NrUG9vbCA9IHJlcXVpcmUoJy4vbGliL21vY2svbW9jay1wb29sJylcbmNvbnN0IG1vY2tFcnJvcnMgPSByZXF1aXJlKCcuL2xpYi9tb2NrL21vY2stZXJyb3JzJylcbmNvbnN0IFJldHJ5SGFuZGxlciA9IHJlcXVpcmUoJy4vbGliL2hhbmRsZXIvcmV0cnktaGFuZGxlcicpXG5jb25zdCB7IGdldEdsb2JhbERpc3BhdGNoZXIsIHNldEdsb2JhbERpc3BhdGNoZXIgfSA9IHJlcXVpcmUoJy4vbGliL2dsb2JhbCcpXG5jb25zdCBEZWNvcmF0b3JIYW5kbGVyID0gcmVxdWlyZSgnLi9saWIvaGFuZGxlci9kZWNvcmF0b3ItaGFuZGxlcicpXG5jb25zdCBSZWRpcmVjdEhhbmRsZXIgPSByZXF1aXJlKCcuL2xpYi9oYW5kbGVyL3JlZGlyZWN0LWhhbmRsZXInKVxuY29uc3QgY3JlYXRlUmVkaXJlY3RJbnRlcmNlcHRvciA9IHJlcXVpcmUoJy4vbGliL2ludGVyY2VwdG9yL3JlZGlyZWN0LWludGVyY2VwdG9yJylcblxuT2JqZWN0LmFzc2lnbihEaXNwYXRjaGVyLnByb3RvdHlwZSwgYXBpKVxuXG5tb2R1bGUuZXhwb3J0cy5EaXNwYXRjaGVyID0gRGlzcGF0Y2hlclxubW9kdWxlLmV4cG9ydHMuQ2xpZW50ID0gQ2xpZW50XG5tb2R1bGUuZXhwb3J0cy5Qb29sID0gUG9vbFxubW9kdWxlLmV4cG9ydHMuQmFsYW5jZWRQb29sID0gQmFsYW5jZWRQb29sXG5tb2R1bGUuZXhwb3J0cy5BZ2VudCA9IEFnZW50XG5tb2R1bGUuZXhwb3J0cy5Qcm94eUFnZW50ID0gUHJveHlBZ2VudFxubW9kdWxlLmV4cG9ydHMuRW52SHR0cFByb3h5QWdlbnQgPSBFbnZIdHRwUHJveHlBZ2VudFxubW9kdWxlLmV4cG9ydHMuUmV0cnlBZ2VudCA9IFJldHJ5QWdlbnRcbm1vZHVsZS5leHBvcnRzLlJldHJ5SGFuZGxlciA9IFJldHJ5SGFuZGxlclxuXG5tb2R1bGUuZXhwb3J0cy5EZWNvcmF0b3JIYW5kbGVyID0gRGVjb3JhdG9ySGFuZGxlclxubW9kdWxlLmV4cG9ydHMuUmVkaXJlY3RIYW5kbGVyID0gUmVkaXJlY3RIYW5kbGVyXG5tb2R1bGUuZXhwb3J0cy5jcmVhdGVSZWRpcmVjdEludGVyY2VwdG9yID0gY3JlYXRlUmVkaXJlY3RJbnRlcmNlcHRvclxubW9kdWxlLmV4cG9ydHMuaW50ZXJjZXB0b3JzID0ge1xuICByZWRpcmVjdDogcmVxdWlyZSgnLi9saWIvaW50ZXJjZXB0b3IvcmVkaXJlY3QnKSxcbiAgcmV0cnk6IHJlcXVpcmUoJy4vbGliL2ludGVyY2VwdG9yL3JldHJ5JyksXG4gIGR1bXA6IHJlcXVpcmUoJy4vbGliL2ludGVyY2VwdG9yL2R1bXAnKSxcbiAgZG5zOiByZXF1aXJlKCcuL2xpYi9pbnRlcmNlcHRvci9kbnMnKVxufVxuXG5tb2R1bGUuZXhwb3J0cy5idWlsZENvbm5lY3RvciA9IGJ1aWxkQ29ubmVjdG9yXG5tb2R1bGUuZXhwb3J0cy5lcnJvcnMgPSBlcnJvcnNcbm1vZHVsZS5leHBvcnRzLnV0aWwgPSB7XG4gIHBhcnNlSGVhZGVyczogdXRpbC5wYXJzZUhlYWRlcnMsXG4gIGhlYWRlck5hbWVUb1N0cmluZzogdXRpbC5oZWFkZXJOYW1lVG9TdHJpbmdcbn1cblxuZnVuY3Rpb24gbWFrZURpc3BhdGNoZXIgKGZuKSB7XG4gIHJldHVybiAodXJsLCBvcHRzLCBoYW5kbGVyKSA9PiB7XG4gICAgaWYgKHR5cGVvZiBvcHRzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBoYW5kbGVyID0gb3B0c1xuICAgICAgb3B0cyA9IG51bGxcbiAgICB9XG5cbiAgICBpZiAoIXVybCB8fCAodHlwZW9mIHVybCAhPT0gJ3N0cmluZycgJiYgdHlwZW9mIHVybCAhPT0gJ29iamVjdCcgJiYgISh1cmwgaW5zdGFuY2VvZiBVUkwpKSkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIHVybCcpXG4gICAgfVxuXG4gICAgaWYgKG9wdHMgIT0gbnVsbCAmJiB0eXBlb2Ygb3B0cyAhPT0gJ29iamVjdCcpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBvcHRzJylcbiAgICB9XG5cbiAgICBpZiAob3B0cyAmJiBvcHRzLnBhdGggIT0gbnVsbCkge1xuICAgICAgaWYgKHR5cGVvZiBvcHRzLnBhdGggIT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBvcHRzLnBhdGgnKVxuICAgICAgfVxuXG4gICAgICBsZXQgcGF0aCA9IG9wdHMucGF0aFxuICAgICAgaWYgKCFvcHRzLnBhdGguc3RhcnRzV2l0aCgnLycpKSB7XG4gICAgICAgIHBhdGggPSBgLyR7cGF0aH1gXG4gICAgICB9XG5cbiAgICAgIHVybCA9IG5ldyBVUkwodXRpbC5wYXJzZU9yaWdpbih1cmwpLm9yaWdpbiArIHBhdGgpXG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICghb3B0cykge1xuICAgICAgICBvcHRzID0gdHlwZW9mIHVybCA9PT0gJ29iamVjdCcgPyB1cmwgOiB7fVxuICAgICAgfVxuXG4gICAgICB1cmwgPSB1dGlsLnBhcnNlVVJMKHVybClcbiAgICB9XG5cbiAgICBjb25zdCB7IGFnZW50LCBkaXNwYXRjaGVyID0gZ2V0R2xvYmFsRGlzcGF0Y2hlcigpIH0gPSBvcHRzXG5cbiAgICBpZiAoYWdlbnQpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcigndW5zdXBwb3J0ZWQgb3B0cy5hZ2VudC4gRGlkIHlvdSBtZWFuIG9wdHMuY2xpZW50PycpXG4gICAgfVxuXG4gICAgcmV0dXJuIGZuLmNhbGwoZGlzcGF0Y2hlciwge1xuICAgICAgLi4ub3B0cyxcbiAgICAgIG9yaWdpbjogdXJsLm9yaWdpbixcbiAgICAgIHBhdGg6IHVybC5zZWFyY2ggPyBgJHt1cmwucGF0aG5hbWV9JHt1cmwuc2VhcmNofWAgOiB1cmwucGF0aG5hbWUsXG4gICAgICBtZXRob2Q6IG9wdHMubWV0aG9kIHx8IChvcHRzLmJvZHkgPyAnUFVUJyA6ICdHRVQnKVxuICAgIH0sIGhhbmRsZXIpXG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMuc2V0R2xvYmFsRGlzcGF0Y2hlciA9IHNldEdsb2JhbERpc3BhdGNoZXJcbm1vZHVsZS5leHBvcnRzLmdldEdsb2JhbERpc3BhdGNoZXIgPSBnZXRHbG9iYWxEaXNwYXRjaGVyXG5cbmNvbnN0IGZldGNoSW1wbCA9IHJlcXVpcmUoJy4vbGliL3dlYi9mZXRjaCcpLmZldGNoXG5tb2R1bGUuZXhwb3J0cy5mZXRjaCA9IGFzeW5jIGZ1bmN0aW9uIGZldGNoIChpbml0LCBvcHRpb25zID0gdW5kZWZpbmVkKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGF3YWl0IGZldGNoSW1wbChpbml0LCBvcHRpb25zKVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICBpZiAoZXJyICYmIHR5cGVvZiBlcnIgPT09ICdvYmplY3QnKSB7XG4gICAgICBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZShlcnIpXG4gICAgfVxuXG4gICAgdGhyb3cgZXJyXG4gIH1cbn1cbm1vZHVsZS5leHBvcnRzLkhlYWRlcnMgPSByZXF1aXJlKCcuL2xpYi93ZWIvZmV0Y2gvaGVhZGVycycpLkhlYWRlcnNcbm1vZHVsZS5leHBvcnRzLlJlc3BvbnNlID0gcmVxdWlyZSgnLi9saWIvd2ViL2ZldGNoL3Jlc3BvbnNlJykuUmVzcG9uc2Vcbm1vZHVsZS5leHBvcnRzLlJlcXVlc3QgPSByZXF1aXJlKCcuL2xpYi93ZWIvZmV0Y2gvcmVxdWVzdCcpLlJlcXVlc3Rcbm1vZHVsZS5leHBvcnRzLkZvcm1EYXRhID0gcmVxdWlyZSgnLi9saWIvd2ViL2ZldGNoL2Zvcm1kYXRhJykuRm9ybURhdGFcbm1vZHVsZS5leHBvcnRzLkZpbGUgPSBnbG9iYWxUaGlzLkZpbGUgPz8gcmVxdWlyZSgnbm9kZTpidWZmZXInKS5GaWxlXG5tb2R1bGUuZXhwb3J0cy5GaWxlUmVhZGVyID0gcmVxdWlyZSgnLi9saWIvd2ViL2ZpbGVhcGkvZmlsZXJlYWRlcicpLkZpbGVSZWFkZXJcblxuY29uc3QgeyBzZXRHbG9iYWxPcmlnaW4sIGdldEdsb2JhbE9yaWdpbiB9ID0gcmVxdWlyZSgnLi9saWIvd2ViL2ZldGNoL2dsb2JhbCcpXG5cbm1vZHVsZS5leHBvcnRzLnNldEdsb2JhbE9yaWdpbiA9IHNldEdsb2JhbE9yaWdpblxubW9kdWxlLmV4cG9ydHMuZ2V0R2xvYmFsT3JpZ2luID0gZ2V0R2xvYmFsT3JpZ2luXG5cbmNvbnN0IHsgQ2FjaGVTdG9yYWdlIH0gPSByZXF1aXJlKCcuL2xpYi93ZWIvY2FjaGUvY2FjaGVzdG9yYWdlJylcbmNvbnN0IHsga0NvbnN0cnVjdCB9ID0gcmVxdWlyZSgnLi9saWIvd2ViL2NhY2hlL3N5bWJvbHMnKVxuXG4vLyBDYWNoZSAmIENhY2hlU3RvcmFnZSBhcmUgdGlnaHRseSBjb3VwbGVkIHdpdGggZmV0Y2guIEV2ZW4gaWYgaXQgbWF5IHJ1blxuLy8gaW4gYW4gb2xkZXIgdmVyc2lvbiBvZiBOb2RlLCBpdCBkb2Vzbid0IGhhdmUgYW55IHVzZSB3aXRob3V0IGZldGNoLlxubW9kdWxlLmV4cG9ydHMuY2FjaGVzID0gbmV3IENhY2hlU3RvcmFnZShrQ29uc3RydWN0KVxuXG5jb25zdCB7IGRlbGV0ZUNvb2tpZSwgZ2V0Q29va2llcywgZ2V0U2V0Q29va2llcywgc2V0Q29va2llIH0gPSByZXF1aXJlKCcuL2xpYi93ZWIvY29va2llcycpXG5cbm1vZHVsZS5leHBvcnRzLmRlbGV0ZUNvb2tpZSA9IGRlbGV0ZUNvb2tpZVxubW9kdWxlLmV4cG9ydHMuZ2V0Q29va2llcyA9IGdldENvb2tpZXNcbm1vZHVsZS5leHBvcnRzLmdldFNldENvb2tpZXMgPSBnZXRTZXRDb29raWVzXG5tb2R1bGUuZXhwb3J0cy5zZXRDb29raWUgPSBzZXRDb29raWVcblxuY29uc3QgeyBwYXJzZU1JTUVUeXBlLCBzZXJpYWxpemVBTWltZVR5cGUgfSA9IHJlcXVpcmUoJy4vbGliL3dlYi9mZXRjaC9kYXRhLXVybCcpXG5cbm1vZHVsZS5leHBvcnRzLnBhcnNlTUlNRVR5cGUgPSBwYXJzZU1JTUVUeXBlXG5tb2R1bGUuZXhwb3J0cy5zZXJpYWxpemVBTWltZVR5cGUgPSBzZXJpYWxpemVBTWltZVR5cGVcblxuY29uc3QgeyBDbG9zZUV2ZW50LCBFcnJvckV2ZW50LCBNZXNzYWdlRXZlbnQgfSA9IHJlcXVpcmUoJy4vbGliL3dlYi93ZWJzb2NrZXQvZXZlbnRzJylcbm1vZHVsZS5leHBvcnRzLldlYlNvY2tldCA9IHJlcXVpcmUoJy4vbGliL3dlYi93ZWJzb2NrZXQvd2Vic29ja2V0JykuV2ViU29ja2V0XG5tb2R1bGUuZXhwb3J0cy5DbG9zZUV2ZW50ID0gQ2xvc2VFdmVudFxubW9kdWxlLmV4cG9ydHMuRXJyb3JFdmVudCA9IEVycm9yRXZlbnRcbm1vZHVsZS5leHBvcnRzLk1lc3NhZ2VFdmVudCA9IE1lc3NhZ2VFdmVudFxuXG5tb2R1bGUuZXhwb3J0cy5yZXF1ZXN0ID0gbWFrZURpc3BhdGNoZXIoYXBpLnJlcXVlc3QpXG5tb2R1bGUuZXhwb3J0cy5zdHJlYW0gPSBtYWtlRGlzcGF0Y2hlcihhcGkuc3RyZWFtKVxubW9kdWxlLmV4cG9ydHMucGlwZWxpbmUgPSBtYWtlRGlzcGF0Y2hlcihhcGkucGlwZWxpbmUpXG5tb2R1bGUuZXhwb3J0cy5jb25uZWN0ID0gbWFrZURpc3BhdGNoZXIoYXBpLmNvbm5lY3QpXG5tb2R1bGUuZXhwb3J0cy51cGdyYWRlID0gbWFrZURpc3BhdGNoZXIoYXBpLnVwZ3JhZGUpXG5cbm1vZHVsZS5leHBvcnRzLk1vY2tDbGllbnQgPSBNb2NrQ2xpZW50XG5tb2R1bGUuZXhwb3J0cy5Nb2NrUG9vbCA9IE1vY2tQb29sXG5tb2R1bGUuZXhwb3J0cy5Nb2NrQWdlbnQgPSBNb2NrQWdlbnRcbm1vZHVsZS5leHBvcnRzLm1vY2tFcnJvcnMgPSBtb2NrRXJyb3JzXG5cbmNvbnN0IHsgRXZlbnRTb3VyY2UgfSA9IHJlcXVpcmUoJy4vbGliL3dlYi9ldmVudHNvdXJjZS9ldmVudHNvdXJjZScpXG5cbm1vZHVsZS5leHBvcnRzLkV2ZW50U291cmNlID0gRXZlbnRTb3VyY2VcbiIsICJcInVzZSBzdHJpY3RcIjtcblxuZXhwb3J0cy5yZW1vdmVMZWFkaW5nQW5kVHJhaWxpbmdIVFRQV2hpdGVzcGFjZSA9IHN0cmluZyA9PiB7XG4gIHJldHVybiBzdHJpbmcucmVwbGFjZSgvXlsgXFx0XFxuXFxyXSsvdSwgXCJcIikucmVwbGFjZSgvWyBcXHRcXG5cXHJdKyQvdSwgXCJcIik7XG59O1xuXG5leHBvcnRzLnJlbW92ZVRyYWlsaW5nSFRUUFdoaXRlc3BhY2UgPSBzdHJpbmcgPT4ge1xuICByZXR1cm4gc3RyaW5nLnJlcGxhY2UoL1sgXFx0XFxuXFxyXSskL3UsIFwiXCIpO1xufTtcblxuZXhwb3J0cy5pc0hUVFBXaGl0ZXNwYWNlQ2hhciA9IGNoYXIgPT4ge1xuICByZXR1cm4gY2hhciA9PT0gXCIgXCIgfHwgY2hhciA9PT0gXCJcXHRcIiB8fCBjaGFyID09PSBcIlxcblwiIHx8IGNoYXIgPT09IFwiXFxyXCI7XG59O1xuXG5leHBvcnRzLnNvbGVseUNvbnRhaW5zSFRUUFRva2VuQ29kZVBvaW50cyA9IHN0cmluZyA9PiB7XG4gIHJldHVybiAvXlstISMkJSYnKisuXl9gfH5BLVphLXowLTldKiQvdS50ZXN0KHN0cmluZyk7XG59O1xuXG5leHBvcnRzLnNvbGV5Q29udGFpbnNIVFRQUXVvdGVkU3RyaW5nVG9rZW5Db2RlUG9pbnRzID0gc3RyaW5nID0+IHtcbiAgcmV0dXJuIC9eW1xcdFxcdTAwMjAtXFx1MDA3RVxcdTAwODAtXFx1MDBGRl0qJC91LnRlc3Qoc3RyaW5nKTtcbn07XG5cbmV4cG9ydHMuYXNjaWlMb3dlcmNhc2UgPSBzdHJpbmcgPT4ge1xuICByZXR1cm4gc3RyaW5nLnJlcGxhY2UoL1tBLVpdL3VnLCBsID0+IGwudG9Mb3dlckNhc2UoKSk7XG59O1xuXG4vLyBUaGlzIHZhcmlhbnQgb25seSBpbXBsZW1lbnRzIGl0IHdpdGggdGhlIGV4dHJhY3QtdmFsdWUgZmxhZyBzZXQuXG5leHBvcnRzLmNvbGxlY3RBbkhUVFBRdW90ZWRTdHJpbmcgPSAoaW5wdXQsIHBvc2l0aW9uKSA9PiB7XG4gIGxldCB2YWx1ZSA9IFwiXCI7XG5cbiAgcG9zaXRpb24rKztcblxuICB3aGlsZSAodHJ1ZSkge1xuICAgIHdoaWxlIChwb3NpdGlvbiA8IGlucHV0Lmxlbmd0aCAmJiBpbnB1dFtwb3NpdGlvbl0gIT09IFwiXFxcIlwiICYmIGlucHV0W3Bvc2l0aW9uXSAhPT0gXCJcXFxcXCIpIHtcbiAgICAgIHZhbHVlICs9IGlucHV0W3Bvc2l0aW9uXTtcbiAgICAgICsrcG9zaXRpb247XG4gICAgfVxuXG4gICAgaWYgKHBvc2l0aW9uID49IGlucHV0Lmxlbmd0aCkge1xuICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgY29uc3QgcXVvdGVPckJhY2tzbGFzaCA9IGlucHV0W3Bvc2l0aW9uXTtcbiAgICArK3Bvc2l0aW9uO1xuXG4gICAgaWYgKHF1b3RlT3JCYWNrc2xhc2ggPT09IFwiXFxcXFwiKSB7XG4gICAgICBpZiAocG9zaXRpb24gPj0gaW5wdXQubGVuZ3RoKSB7XG4gICAgICAgIHZhbHVlICs9IFwiXFxcXFwiO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgdmFsdWUgKz0gaW5wdXRbcG9zaXRpb25dO1xuICAgICAgKytwb3NpdGlvbjtcbiAgICB9IGVsc2Uge1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIFt2YWx1ZSwgcG9zaXRpb25dO1xufTtcbiIsICJcInVzZSBzdHJpY3RcIjtcbmNvbnN0IHtcbiAgYXNjaWlMb3dlcmNhc2UsXG4gIHNvbGVseUNvbnRhaW5zSFRUUFRva2VuQ29kZVBvaW50cyxcbiAgc29sZXlDb250YWluc0hUVFBRdW90ZWRTdHJpbmdUb2tlbkNvZGVQb2ludHNcbn0gPSByZXF1aXJlKFwiLi91dGlscy5qc1wiKTtcblxubW9kdWxlLmV4cG9ydHMgPSBjbGFzcyBNSU1FVHlwZVBhcmFtZXRlcnMge1xuICBjb25zdHJ1Y3RvcihtYXApIHtcbiAgICB0aGlzLl9tYXAgPSBtYXA7XG4gIH1cblxuICBnZXQgc2l6ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5fbWFwLnNpemU7XG4gIH1cblxuICBnZXQobmFtZSkge1xuICAgIG5hbWUgPSBhc2NpaUxvd2VyY2FzZShTdHJpbmcobmFtZSkpO1xuICAgIHJldHVybiB0aGlzLl9tYXAuZ2V0KG5hbWUpO1xuICB9XG5cbiAgaGFzKG5hbWUpIHtcbiAgICBuYW1lID0gYXNjaWlMb3dlcmNhc2UoU3RyaW5nKG5hbWUpKTtcbiAgICByZXR1cm4gdGhpcy5fbWFwLmhhcyhuYW1lKTtcbiAgfVxuXG4gIHNldChuYW1lLCB2YWx1ZSkge1xuICAgIG5hbWUgPSBhc2NpaUxvd2VyY2FzZShTdHJpbmcobmFtZSkpO1xuICAgIHZhbHVlID0gU3RyaW5nKHZhbHVlKTtcblxuICAgIGlmICghc29sZWx5Q29udGFpbnNIVFRQVG9rZW5Db2RlUG9pbnRzKG5hbWUpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgTUlNRSB0eXBlIHBhcmFtZXRlciBuYW1lIFwiJHtuYW1lfVwiOiBvbmx5IEhUVFAgdG9rZW4gY29kZSBwb2ludHMgYXJlIHZhbGlkLmApO1xuICAgIH1cbiAgICBpZiAoIXNvbGV5Q29udGFpbnNIVFRQUXVvdGVkU3RyaW5nVG9rZW5Db2RlUG9pbnRzKHZhbHVlKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIE1JTUUgdHlwZSBwYXJhbWV0ZXIgdmFsdWUgXCIke3ZhbHVlfVwiOiBvbmx5IEhUVFAgcXVvdGVkLXN0cmluZyB0b2tlbiBjb2RlIHBvaW50cyBhcmUgYCArXG4gICAgICAgICAgICAgICAgICAgICAgYHZhbGlkLmApO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9tYXAuc2V0KG5hbWUsIHZhbHVlKTtcbiAgfVxuXG4gIGNsZWFyKCkge1xuICAgIHRoaXMuX21hcC5jbGVhcigpO1xuICB9XG5cbiAgZGVsZXRlKG5hbWUpIHtcbiAgICBuYW1lID0gYXNjaWlMb3dlcmNhc2UoU3RyaW5nKG5hbWUpKTtcbiAgICByZXR1cm4gdGhpcy5fbWFwLmRlbGV0ZShuYW1lKTtcbiAgfVxuXG4gIGZvckVhY2goY2FsbGJhY2tGbiwgdGhpc0FyZykge1xuICAgIHRoaXMuX21hcC5mb3JFYWNoKGNhbGxiYWNrRm4sIHRoaXNBcmcpO1xuICB9XG5cbiAga2V5cygpIHtcbiAgICByZXR1cm4gdGhpcy5fbWFwLmtleXMoKTtcbiAgfVxuXG4gIHZhbHVlcygpIHtcbiAgICByZXR1cm4gdGhpcy5fbWFwLnZhbHVlcygpO1xuICB9XG5cbiAgZW50cmllcygpIHtcbiAgICByZXR1cm4gdGhpcy5fbWFwLmVudHJpZXMoKTtcbiAgfVxuXG4gIFtTeW1ib2wuaXRlcmF0b3JdKCkge1xuICAgIHJldHVybiB0aGlzLl9tYXBbU3ltYm9sLml0ZXJhdG9yXSgpO1xuICB9XG59O1xuIiwgIlwidXNlIHN0cmljdFwiO1xuY29uc3Qge1xuICByZW1vdmVMZWFkaW5nQW5kVHJhaWxpbmdIVFRQV2hpdGVzcGFjZSxcbiAgcmVtb3ZlVHJhaWxpbmdIVFRQV2hpdGVzcGFjZSxcbiAgaXNIVFRQV2hpdGVzcGFjZUNoYXIsXG4gIHNvbGVseUNvbnRhaW5zSFRUUFRva2VuQ29kZVBvaW50cyxcbiAgc29sZXlDb250YWluc0hUVFBRdW90ZWRTdHJpbmdUb2tlbkNvZGVQb2ludHMsXG4gIGFzY2lpTG93ZXJjYXNlLFxuICBjb2xsZWN0QW5IVFRQUXVvdGVkU3RyaW5nXG59ID0gcmVxdWlyZShcIi4vdXRpbHMuanNcIik7XG5cbm1vZHVsZS5leHBvcnRzID0gaW5wdXQgPT4ge1xuICBpbnB1dCA9IHJlbW92ZUxlYWRpbmdBbmRUcmFpbGluZ0hUVFBXaGl0ZXNwYWNlKGlucHV0KTtcblxuICBsZXQgcG9zaXRpb24gPSAwO1xuICBsZXQgdHlwZSA9IFwiXCI7XG4gIHdoaWxlIChwb3NpdGlvbiA8IGlucHV0Lmxlbmd0aCAmJiBpbnB1dFtwb3NpdGlvbl0gIT09IFwiL1wiKSB7XG4gICAgdHlwZSArPSBpbnB1dFtwb3NpdGlvbl07XG4gICAgKytwb3NpdGlvbjtcbiAgfVxuXG4gIGlmICh0eXBlLmxlbmd0aCA9PT0gMCB8fCAhc29sZWx5Q29udGFpbnNIVFRQVG9rZW5Db2RlUG9pbnRzKHR5cGUpKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBpZiAocG9zaXRpb24gPj0gaW5wdXQubGVuZ3RoKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICAvLyBTa2lwcyBwYXN0IFwiL1wiXG4gICsrcG9zaXRpb247XG5cbiAgbGV0IHN1YnR5cGUgPSBcIlwiO1xuICB3aGlsZSAocG9zaXRpb24gPCBpbnB1dC5sZW5ndGggJiYgaW5wdXRbcG9zaXRpb25dICE9PSBcIjtcIikge1xuICAgIHN1YnR5cGUgKz0gaW5wdXRbcG9zaXRpb25dO1xuICAgICsrcG9zaXRpb247XG4gIH1cblxuICBzdWJ0eXBlID0gcmVtb3ZlVHJhaWxpbmdIVFRQV2hpdGVzcGFjZShzdWJ0eXBlKTtcblxuICBpZiAoc3VidHlwZS5sZW5ndGggPT09IDAgfHwgIXNvbGVseUNvbnRhaW5zSFRUUFRva2VuQ29kZVBvaW50cyhzdWJ0eXBlKSkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgY29uc3QgbWltZVR5cGUgPSB7XG4gICAgdHlwZTogYXNjaWlMb3dlcmNhc2UodHlwZSksXG4gICAgc3VidHlwZTogYXNjaWlMb3dlcmNhc2Uoc3VidHlwZSksXG4gICAgcGFyYW1ldGVyczogbmV3IE1hcCgpXG4gIH07XG5cbiAgd2hpbGUgKHBvc2l0aW9uIDwgaW5wdXQubGVuZ3RoKSB7XG4gICAgLy8gU2tpcCBwYXN0IFwiO1wiXG4gICAgKytwb3NpdGlvbjtcblxuICAgIHdoaWxlIChpc0hUVFBXaGl0ZXNwYWNlQ2hhcihpbnB1dFtwb3NpdGlvbl0pKSB7XG4gICAgICArK3Bvc2l0aW9uO1xuICAgIH1cblxuICAgIGxldCBwYXJhbWV0ZXJOYW1lID0gXCJcIjtcbiAgICB3aGlsZSAocG9zaXRpb24gPCBpbnB1dC5sZW5ndGggJiYgaW5wdXRbcG9zaXRpb25dICE9PSBcIjtcIiAmJiBpbnB1dFtwb3NpdGlvbl0gIT09IFwiPVwiKSB7XG4gICAgICBwYXJhbWV0ZXJOYW1lICs9IGlucHV0W3Bvc2l0aW9uXTtcbiAgICAgICsrcG9zaXRpb247XG4gICAgfVxuICAgIHBhcmFtZXRlck5hbWUgPSBhc2NpaUxvd2VyY2FzZShwYXJhbWV0ZXJOYW1lKTtcblxuICAgIGlmIChwb3NpdGlvbiA8IGlucHV0Lmxlbmd0aCkge1xuICAgICAgaWYgKGlucHV0W3Bvc2l0aW9uXSA9PT0gXCI7XCIpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIC8vIFNraXAgcGFzdCBcIj1cIlxuICAgICAgKytwb3NpdGlvbjtcbiAgICB9XG5cbiAgICBsZXQgcGFyYW1ldGVyVmFsdWUgPSBudWxsO1xuICAgIGlmIChpbnB1dFtwb3NpdGlvbl0gPT09IFwiXFxcIlwiKSB7XG4gICAgICBbcGFyYW1ldGVyVmFsdWUsIHBvc2l0aW9uXSA9IGNvbGxlY3RBbkhUVFBRdW90ZWRTdHJpbmcoaW5wdXQsIHBvc2l0aW9uKTtcblxuICAgICAgd2hpbGUgKHBvc2l0aW9uIDwgaW5wdXQubGVuZ3RoICYmIGlucHV0W3Bvc2l0aW9uXSAhPT0gXCI7XCIpIHtcbiAgICAgICAgKytwb3NpdGlvbjtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgcGFyYW1ldGVyVmFsdWUgPSBcIlwiO1xuICAgICAgd2hpbGUgKHBvc2l0aW9uIDwgaW5wdXQubGVuZ3RoICYmIGlucHV0W3Bvc2l0aW9uXSAhPT0gXCI7XCIpIHtcbiAgICAgICAgcGFyYW1ldGVyVmFsdWUgKz0gaW5wdXRbcG9zaXRpb25dO1xuICAgICAgICArK3Bvc2l0aW9uO1xuICAgICAgfVxuXG4gICAgICBwYXJhbWV0ZXJWYWx1ZSA9IHJlbW92ZVRyYWlsaW5nSFRUUFdoaXRlc3BhY2UocGFyYW1ldGVyVmFsdWUpO1xuXG4gICAgICBpZiAocGFyYW1ldGVyVmFsdWUgPT09IFwiXCIpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHBhcmFtZXRlck5hbWUubGVuZ3RoID4gMCAmJlxuICAgICAgICBzb2xlbHlDb250YWluc0hUVFBUb2tlbkNvZGVQb2ludHMocGFyYW1ldGVyTmFtZSkgJiZcbiAgICAgICAgc29sZXlDb250YWluc0hUVFBRdW90ZWRTdHJpbmdUb2tlbkNvZGVQb2ludHMocGFyYW1ldGVyVmFsdWUpICYmXG4gICAgICAgICFtaW1lVHlwZS5wYXJhbWV0ZXJzLmhhcyhwYXJhbWV0ZXJOYW1lKSkge1xuICAgICAgbWltZVR5cGUucGFyYW1ldGVycy5zZXQocGFyYW1ldGVyTmFtZSwgcGFyYW1ldGVyVmFsdWUpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBtaW1lVHlwZTtcbn07XG4iLCAiXCJ1c2Ugc3RyaWN0XCI7XG5jb25zdCB7IHNvbGVseUNvbnRhaW5zSFRUUFRva2VuQ29kZVBvaW50cyB9ID0gcmVxdWlyZShcIi4vdXRpbHMuanNcIik7XG5cbm1vZHVsZS5leHBvcnRzID0gbWltZVR5cGUgPT4ge1xuICBsZXQgc2VyaWFsaXphdGlvbiA9IGAke21pbWVUeXBlLnR5cGV9LyR7bWltZVR5cGUuc3VidHlwZX1gO1xuXG4gIGlmIChtaW1lVHlwZS5wYXJhbWV0ZXJzLnNpemUgPT09IDApIHtcbiAgICByZXR1cm4gc2VyaWFsaXphdGlvbjtcbiAgfVxuXG4gIGZvciAobGV0IFtuYW1lLCB2YWx1ZV0gb2YgbWltZVR5cGUucGFyYW1ldGVycykge1xuICAgIHNlcmlhbGl6YXRpb24gKz0gXCI7XCI7XG4gICAgc2VyaWFsaXphdGlvbiArPSBuYW1lO1xuICAgIHNlcmlhbGl6YXRpb24gKz0gXCI9XCI7XG5cbiAgICBpZiAoIXNvbGVseUNvbnRhaW5zSFRUUFRva2VuQ29kZVBvaW50cyh2YWx1ZSkgfHwgdmFsdWUubGVuZ3RoID09PSAwKSB7XG4gICAgICB2YWx1ZSA9IHZhbHVlLnJlcGxhY2UoLyhbXCJcXFxcXSkvdWcsIFwiXFxcXCQxXCIpO1xuICAgICAgdmFsdWUgPSBgXCIke3ZhbHVlfVwiYDtcbiAgICB9XG5cbiAgICBzZXJpYWxpemF0aW9uICs9IHZhbHVlO1xuICB9XG5cbiAgcmV0dXJuIHNlcmlhbGl6YXRpb247XG59O1xuIiwgIlwidXNlIHN0cmljdFwiO1xuY29uc3QgTUlNRVR5cGVQYXJhbWV0ZXJzID0gcmVxdWlyZShcIi4vbWltZS10eXBlLXBhcmFtZXRlcnMuanNcIik7XG5jb25zdCBwYXJzZSA9IHJlcXVpcmUoXCIuL3BhcnNlci5qc1wiKTtcbmNvbnN0IHNlcmlhbGl6ZSA9IHJlcXVpcmUoXCIuL3NlcmlhbGl6ZXIuanNcIik7XG5jb25zdCB7XG4gIGFzY2lpTG93ZXJjYXNlLFxuICBzb2xlbHlDb250YWluc0hUVFBUb2tlbkNvZGVQb2ludHNcbn0gPSByZXF1aXJlKFwiLi91dGlscy5qc1wiKTtcblxubW9kdWxlLmV4cG9ydHMgPSBjbGFzcyBNSU1FVHlwZSB7XG4gIGNvbnN0cnVjdG9yKHN0cmluZykge1xuICAgIHN0cmluZyA9IFN0cmluZyhzdHJpbmcpO1xuICAgIGNvbnN0IHJlc3VsdCA9IHBhcnNlKHN0cmluZyk7XG4gICAgaWYgKHJlc3VsdCA9PT0gbnVsbCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBDb3VsZCBub3QgcGFyc2UgTUlNRSB0eXBlIHN0cmluZyBcIiR7c3RyaW5nfVwiYCk7XG4gICAgfVxuXG4gICAgdGhpcy5fdHlwZSA9IHJlc3VsdC50eXBlO1xuICAgIHRoaXMuX3N1YnR5cGUgPSByZXN1bHQuc3VidHlwZTtcbiAgICB0aGlzLl9wYXJhbWV0ZXJzID0gbmV3IE1JTUVUeXBlUGFyYW1ldGVycyhyZXN1bHQucGFyYW1ldGVycyk7XG4gIH1cblxuICBzdGF0aWMgcGFyc2Uoc3RyaW5nKSB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBuZXcgdGhpcyhzdHJpbmcpO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxuXG4gIGdldCBlc3NlbmNlKCkge1xuICAgIHJldHVybiBgJHt0aGlzLnR5cGV9LyR7dGhpcy5zdWJ0eXBlfWA7XG4gIH1cblxuICBnZXQgdHlwZSgpIHtcbiAgICByZXR1cm4gdGhpcy5fdHlwZTtcbiAgfVxuXG4gIHNldCB0eXBlKHZhbHVlKSB7XG4gICAgdmFsdWUgPSBhc2NpaUxvd2VyY2FzZShTdHJpbmcodmFsdWUpKTtcblxuICAgIGlmICh2YWx1ZS5sZW5ndGggPT09IDApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgdHlwZTogbXVzdCBiZSBhIG5vbi1lbXB0eSBzdHJpbmdcIik7XG4gICAgfVxuICAgIGlmICghc29sZWx5Q29udGFpbnNIVFRQVG9rZW5Db2RlUG9pbnRzKHZhbHVlKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHR5cGUgJHt2YWx1ZX06IG11c3QgY29udGFpbiBvbmx5IEhUVFAgdG9rZW4gY29kZSBwb2ludHNgKTtcbiAgICB9XG5cbiAgICB0aGlzLl90eXBlID0gdmFsdWU7XG4gIH1cblxuICBnZXQgc3VidHlwZSgpIHtcbiAgICByZXR1cm4gdGhpcy5fc3VidHlwZTtcbiAgfVxuXG4gIHNldCBzdWJ0eXBlKHZhbHVlKSB7XG4gICAgdmFsdWUgPSBhc2NpaUxvd2VyY2FzZShTdHJpbmcodmFsdWUpKTtcblxuICAgIGlmICh2YWx1ZS5sZW5ndGggPT09IDApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcIkludmFsaWQgc3VidHlwZTogbXVzdCBiZSBhIG5vbi1lbXB0eSBzdHJpbmdcIik7XG4gICAgfVxuICAgIGlmICghc29sZWx5Q29udGFpbnNIVFRQVG9rZW5Db2RlUG9pbnRzKHZhbHVlKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIHN1YnR5cGUgJHt2YWx1ZX06IG11c3QgY29udGFpbiBvbmx5IEhUVFAgdG9rZW4gY29kZSBwb2ludHNgKTtcbiAgICB9XG5cbiAgICB0aGlzLl9zdWJ0eXBlID0gdmFsdWU7XG4gIH1cblxuICBnZXQgcGFyYW1ldGVycygpIHtcbiAgICByZXR1cm4gdGhpcy5fcGFyYW1ldGVycztcbiAgfVxuXG4gIHRvU3RyaW5nKCkge1xuICAgIC8vIFRoZSBzZXJpYWxpemUgZnVuY3Rpb24gd29ya3Mgb24gYm90aCBcIk1JTUUgdHlwZSByZWNvcmRzXCIgKGkuZS4gdGhlIHJlc3VsdHMgb2YgcGFyc2UpIGFuZCBvbiB0aGlzIGNsYXNzLCBzaW5jZVxuICAgIC8vIHRoaXMgY2xhc3MncyBpbnRlcmZhY2UgaXMgaWRlbnRpY2FsLlxuICAgIHJldHVybiBzZXJpYWxpemUodGhpcyk7XG4gIH1cblxuICBpc0phdmFTY3JpcHQoeyBwcm9oaWJpdFBhcmFtZXRlcnMgPSBmYWxzZSB9ID0ge30pIHtcbiAgICBzd2l0Y2ggKHRoaXMuX3R5cGUpIHtcbiAgICAgIGNhc2UgXCJ0ZXh0XCI6IHtcbiAgICAgICAgc3dpdGNoICh0aGlzLl9zdWJ0eXBlKSB7XG4gICAgICAgICAgY2FzZSBcImVjbWFzY3JpcHRcIjpcbiAgICAgICAgICBjYXNlIFwiamF2YXNjcmlwdFwiOlxuICAgICAgICAgIGNhc2UgXCJqYXZhc2NyaXB0MS4wXCI6XG4gICAgICAgICAgY2FzZSBcImphdmFzY3JpcHQxLjFcIjpcbiAgICAgICAgICBjYXNlIFwiamF2YXNjcmlwdDEuMlwiOlxuICAgICAgICAgIGNhc2UgXCJqYXZhc2NyaXB0MS4zXCI6XG4gICAgICAgICAgY2FzZSBcImphdmFzY3JpcHQxLjRcIjpcbiAgICAgICAgICBjYXNlIFwiamF2YXNjcmlwdDEuNVwiOlxuICAgICAgICAgIGNhc2UgXCJqc2NyaXB0XCI6XG4gICAgICAgICAgY2FzZSBcImxpdmVzY3JpcHRcIjpcbiAgICAgICAgICBjYXNlIFwieC1lY21hc2NyaXB0XCI6XG4gICAgICAgICAgY2FzZSBcIngtamF2YXNjcmlwdFwiOiB7XG4gICAgICAgICAgICByZXR1cm4gIXByb2hpYml0UGFyYW1ldGVycyB8fCB0aGlzLl9wYXJhbWV0ZXJzLnNpemUgPT09IDA7XG4gICAgICAgICAgfVxuICAgICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGNhc2UgXCJhcHBsaWNhdGlvblwiOiB7XG4gICAgICAgIHN3aXRjaCAodGhpcy5fc3VidHlwZSkge1xuICAgICAgICAgIGNhc2UgXCJlY21hc2NyaXB0XCI6XG4gICAgICAgICAgY2FzZSBcImphdmFzY3JpcHRcIjpcbiAgICAgICAgICBjYXNlIFwieC1lY21hc2NyaXB0XCI6XG4gICAgICAgICAgY2FzZSBcIngtamF2YXNjcmlwdFwiOiB7XG4gICAgICAgICAgICByZXR1cm4gIXByb2hpYml0UGFyYW1ldGVycyB8fCB0aGlzLl9wYXJhbWV0ZXJzLnNpemUgPT09IDA7XG4gICAgICAgICAgfVxuICAgICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBpc1hNTCgpIHtcbiAgICByZXR1cm4gKHRoaXMuX3N1YnR5cGUgPT09IFwieG1sXCIgJiYgKHRoaXMuX3R5cGUgPT09IFwidGV4dFwiIHx8IHRoaXMuX3R5cGUgPT09IFwiYXBwbGljYXRpb25cIikpIHx8XG4gICAgICAgICAgIHRoaXMuX3N1YnR5cGUuZW5kc1dpdGgoXCIreG1sXCIpO1xuICB9XG4gIGlzSFRNTCgpIHtcbiAgICByZXR1cm4gdGhpcy5fc3VidHlwZSA9PT0gXCJodG1sXCIgJiYgdGhpcy5fdHlwZSA9PT0gXCJ0ZXh0XCI7XG4gIH1cbn07XG4iLCAiLyoqXG4gKiBAZmlsZSBCYXR0ZXJpZXMtaW5jbHVkZWQgdmVyc2lvbiBvZiBDaGVlcmlvLiBUaGlzIG1vZHVsZSBpbmNsdWRlcyBzZXZlcmFsXG4gKiAgIGNvbnZlbmllbmNlIG1ldGhvZHMgZm9yIGxvYWRpbmcgZG9jdW1lbnRzIGZyb20gdmFyaW91cyBzb3VyY2VzLlxuICovXG5cbmV4cG9ydCAqIGZyb20gJy4vbG9hZC1wYXJzZS5qcyc7XG5leHBvcnQgeyBjb250YWlucywgbWVyZ2UgfSBmcm9tICcuL3N0YXRpYy5qcyc7XG5leHBvcnQgdHlwZSAqIGZyb20gJy4vdHlwZXMuanMnO1xuZXhwb3J0IHR5cGUge1xuICBDaGVlcmlvLFxuICBDaGVlcmlvQVBJLFxuICBDaGVlcmlvT3B0aW9ucyxcbiAgSFRNTFBhcnNlcjJPcHRpb25zLFxufSBmcm9tICcuL3NsaW0uanMnO1xuXG5pbXBvcnQgeyBhZGFwdGVyIGFzIGh0bWxwYXJzZXIyQWRhcHRlciB9IGZyb20gJ3BhcnNlNS1odG1scGFyc2VyMi10cmVlLWFkYXB0ZXInO1xuaW1wb3J0ICogYXMgaHRtbHBhcnNlcjIgZnJvbSAnaHRtbHBhcnNlcjInO1xuaW1wb3J0IHsgUGFyc2VyU3RyZWFtIGFzIFBhcnNlNVN0cmVhbSB9IGZyb20gJ3BhcnNlNS1wYXJzZXItc3RyZWFtJztcbmltcG9ydCB7XG4gIGRlY29kZUJ1ZmZlcixcbiAgRGVjb2RlU3RyZWFtLFxuICB0eXBlIFNuaWZmZXJPcHRpb25zLFxufSBmcm9tICdlbmNvZGluZy1zbmlmZmVyJztcbmltcG9ydCAqIGFzIHVuZGljaSBmcm9tICd1bmRpY2knO1xuaW1wb3J0IE1JTUVUeXBlIGZyb20gJ3doYXR3Zy1taW1ldHlwZSc7XG5pbXBvcnQgeyBXcml0YWJsZSwgZmluaXNoZWQgfSBmcm9tICdub2RlOnN0cmVhbSc7XG5pbXBvcnQgdHlwZSB7IENoZWVyaW9BUEkgfSBmcm9tICcuL2xvYWQuanMnO1xuaW1wb3J0IHtcbiAgZmxhdHRlbk9wdGlvbnMsXG4gIHR5cGUgSW50ZXJuYWxPcHRpb25zLFxuICB0eXBlIENoZWVyaW9PcHRpb25zLFxufSBmcm9tICcuL29wdGlvbnMuanMnO1xuaW1wb3J0IHsgbG9hZCB9IGZyb20gJy4vbG9hZC1wYXJzZS5qcyc7XG5cbi8qKlxuICogU25pZmZzIHRoZSBlbmNvZGluZyBvZiBhIGJ1ZmZlciwgdGhlbiBjcmVhdGVzIGEgcXVlcnlpbmcgZnVuY3Rpb24gYm91bmQgdG8gYVxuICogZG9jdW1lbnQgY3JlYXRlZCBmcm9tIHRoZSBidWZmZXIuXG4gKlxuICogQGNhdGVnb3J5IExvYWRpbmdcbiAqIEBleGFtcGxlXG4gKlxuICogYGBganNcbiAqIGltcG9ydCAqIGFzIGNoZWVyaW8gZnJvbSAnY2hlZXJpbyc7XG4gKlxuICogY29uc3QgYnVmZmVyID0gZnMucmVhZEZpbGVTeW5jKCdpbmRleC5odG1sJyk7XG4gKiBjb25zdCAkID0gY2hlZXJpby5mcm9tQnVmZmVyKGJ1ZmZlcik7XG4gKiBgYGBcbiAqXG4gKiBAcGFyYW0gYnVmZmVyIC0gVGhlIGJ1ZmZlciB0byBzbmlmZiB0aGUgZW5jb2Rpbmcgb2YuXG4gKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBvcHRpb25zIHRvIHBhc3MgdG8gQ2hlZXJpby5cbiAqIEByZXR1cm5zIFRoZSBsb2FkZWQgZG9jdW1lbnQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBsb2FkQnVmZmVyKFxuICBidWZmZXI6IEJ1ZmZlcixcbiAgb3B0aW9uczogRGVjb2RlU3RyZWFtT3B0aW9ucyA9IHt9LFxuKTogQ2hlZXJpb0FQSSB7XG4gIGNvbnN0IG9wdHMgPSBmbGF0dGVuT3B0aW9ucyhvcHRpb25zKTtcbiAgY29uc3Qgc3RyID0gZGVjb2RlQnVmZmVyKGJ1ZmZlciwge1xuICAgIGRlZmF1bHRFbmNvZGluZzogb3B0cz8ueG1sTW9kZSA/ICd1dGY4JyA6ICd3aW5kb3dzLTEyNTInLFxuICAgIC4uLm9wdGlvbnMuZW5jb2RpbmcsXG4gIH0pO1xuXG4gIHJldHVybiBsb2FkKHN0ciwgb3B0cyk7XG59XG5cbmZ1bmN0aW9uIF9zdHJpbmdTdHJlYW0oXG4gIG9wdGlvbnM6IEludGVybmFsT3B0aW9ucyB8IHVuZGVmaW5lZCxcbiAgY2I6IChlcnI6IEVycm9yIHwgbnVsbCB8IHVuZGVmaW5lZCwgJDogQ2hlZXJpb0FQSSkgPT4gdm9pZCxcbik6IFdyaXRhYmxlIHtcbiAgaWYgKG9wdGlvbnM/Ll91c2VIdG1sUGFyc2VyMikge1xuICAgIGNvbnN0IHBhcnNlciA9IGh0bWxwYXJzZXIyLmNyZWF0ZURvY3VtZW50U3RyZWFtKFxuICAgICAgKGVyciwgZG9jdW1lbnQpID0+IGNiKGVyciwgbG9hZChkb2N1bWVudCkpLFxuICAgICAgb3B0aW9ucyxcbiAgICApO1xuXG4gICAgcmV0dXJuIG5ldyBXcml0YWJsZSh7XG4gICAgICBkZWNvZGVTdHJpbmdzOiBmYWxzZSxcbiAgICAgIHdyaXRlKGNodW5rLCBfZW5jb2RpbmcsIGNhbGxiYWNrKSB7XG4gICAgICAgIGlmICh0eXBlb2YgY2h1bmsgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignRXhwZWN0ZWQgYSBzdHJpbmcnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHBhcnNlci53cml0ZShjaHVuayk7XG4gICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICB9LFxuICAgICAgZmluYWwoY2FsbGJhY2spIHtcbiAgICAgICAgcGFyc2VyLmVuZCgpO1xuICAgICAgICBjYWxsYmFjaygpO1xuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIG9wdGlvbnMgPz89IHt9O1xuICBvcHRpb25zLnRyZWVBZGFwdGVyID8/PSBodG1scGFyc2VyMkFkYXB0ZXI7XG5cbiAgaWYgKG9wdGlvbnMuc2NyaXB0aW5nRW5hYmxlZCAhPT0gZmFsc2UpIHtcbiAgICBvcHRpb25zLnNjcmlwdGluZ0VuYWJsZWQgPSB0cnVlO1xuICB9XG5cbiAgY29uc3Qgc3RyZWFtID0gbmV3IFBhcnNlNVN0cmVhbShvcHRpb25zKTtcblxuICBmaW5pc2hlZChzdHJlYW0sIChlcnIpID0+IGNiKGVyciwgbG9hZChzdHJlYW0uZG9jdW1lbnQpKSk7XG5cbiAgcmV0dXJuIHN0cmVhbTtcbn1cblxuLyoqXG4gKiBDcmVhdGVzIGEgc3RyZWFtIHRoYXQgcGFyc2VzIGEgc2VxdWVuY2Ugb2Ygc3RyaW5ncyBpbnRvIGEgZG9jdW1lbnQuXG4gKlxuICogVGhlIHN0cmVhbSBpcyBhIGBXcml0YWJsZWAgc3RyZWFtIHRoYXQgYWNjZXB0cyBzdHJpbmdzLiBXaGVuIHRoZSBzdHJlYW0gaXNcbiAqIGZpbmlzaGVkLCB0aGUgY2FsbGJhY2sgaXMgY2FsbGVkIHdpdGggdGhlIGxvYWRlZCBkb2N1bWVudC5cbiAqXG4gKiBAY2F0ZWdvcnkgTG9hZGluZ1xuICogQGV4YW1wbGVcbiAqXG4gKiBgYGBqc1xuICogaW1wb3J0ICogYXMgY2hlZXJpbyBmcm9tICdjaGVlcmlvJztcbiAqIGltcG9ydCAqIGFzIGZzIGZyb20gJ2ZzJztcbiAqXG4gKiBjb25zdCB3cml0ZVN0cmVhbSA9IGNoZWVyaW8uc3RyaW5nU3RyZWFtKHt9LCAoZXJyLCAkKSA9PiB7XG4gKiAgIGlmIChlcnIpIHtcbiAqICAgICAvLyBIYW5kbGUgZXJyb3JcbiAqICAgfVxuICpcbiAqICAgY29uc29sZS5sb2coJCgnaDEnKS50ZXh0KCkpO1xuICogICAvLyBPdXRwdXQ6IEhlbGxvLCB3b3JsZCFcbiAqIH0pO1xuICpcbiAqIGZzLmNyZWF0ZVJlYWRTdHJlYW0oJ215LWRvY3VtZW50Lmh0bWwnLCB7IGVuY29kaW5nOiAndXRmOCcgfSkucGlwZShcbiAqICAgd3JpdGVTdHJlYW0sXG4gKiApO1xuICogYGBgXG4gKlxuICogQHBhcmFtIG9wdGlvbnMgLSBUaGUgb3B0aW9ucyB0byBwYXNzIHRvIENoZWVyaW8uXG4gKiBAcGFyYW0gY2IgLSBUaGUgY2FsbGJhY2sgdG8gY2FsbCB3aGVuIHRoZSBzdHJlYW0gaXMgZmluaXNoZWQuXG4gKiBAcmV0dXJucyBUaGUgd3JpdGFibGUgc3RyZWFtLlxuICovXG5leHBvcnQgZnVuY3Rpb24gc3RyaW5nU3RyZWFtKFxuICBvcHRpb25zOiBDaGVlcmlvT3B0aW9ucyxcbiAgY2I6IChlcnI6IEVycm9yIHwgbnVsbCB8IHVuZGVmaW5lZCwgJDogQ2hlZXJpb0FQSSkgPT4gdm9pZCxcbik6IFdyaXRhYmxlIHtcbiAgcmV0dXJuIF9zdHJpbmdTdHJlYW0oZmxhdHRlbk9wdGlvbnMob3B0aW9ucyksIGNiKTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBEZWNvZGVTdHJlYW1PcHRpb25zIGV4dGVuZHMgQ2hlZXJpb09wdGlvbnMge1xuICBlbmNvZGluZz86IFNuaWZmZXJPcHRpb25zO1xufVxuXG4vKipcbiAqIFBhcnNlcyBhIHN0cmVhbSBvZiBidWZmZXJzIGludG8gYSBkb2N1bWVudC5cbiAqXG4gKiBUaGUgc3RyZWFtIGlzIGEgYFdyaXRhYmxlYCBzdHJlYW0gdGhhdCBhY2NlcHRzIGJ1ZmZlcnMuIFdoZW4gdGhlIHN0cmVhbSBpc1xuICogZmluaXNoZWQsIHRoZSBjYWxsYmFjayBpcyBjYWxsZWQgd2l0aCB0aGUgbG9hZGVkIGRvY3VtZW50LlxuICpcbiAqIEBjYXRlZ29yeSBMb2FkaW5nXG4gKiBAcGFyYW0gb3B0aW9ucyAtIFRoZSBvcHRpb25zIHRvIHBhc3MgdG8gQ2hlZXJpby5cbiAqIEBwYXJhbSBjYiAtIFRoZSBjYWxsYmFjayB0byBjYWxsIHdoZW4gdGhlIHN0cmVhbSBpcyBmaW5pc2hlZC5cbiAqIEByZXR1cm5zIFRoZSB3cml0YWJsZSBzdHJlYW0uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBkZWNvZGVTdHJlYW0oXG4gIG9wdGlvbnM6IERlY29kZVN0cmVhbU9wdGlvbnMsXG4gIGNiOiAoZXJyOiBFcnJvciB8IG51bGwgfCB1bmRlZmluZWQsICQ6IENoZWVyaW9BUEkpID0+IHZvaWQsXG4pOiBXcml0YWJsZSB7XG4gIGNvbnN0IHsgZW5jb2RpbmcgPSB7fSwgLi4uY2hlZXJpb09wdGlvbnMgfSA9IG9wdGlvbnM7XG4gIGNvbnN0IG9wdHMgPSBmbGF0dGVuT3B0aW9ucyhjaGVlcmlvT3B0aW9ucyk7XG5cbiAgLy8gU2V0IHRoZSBkZWZhdWx0IGVuY29kaW5nIHRvIFVURi04IGZvciBYTUwgbW9kZVxuICBlbmNvZGluZy5kZWZhdWx0RW5jb2RpbmcgPz89IG9wdHM/LnhtbE1vZGUgPyAndXRmOCcgOiAnd2luZG93cy0xMjUyJztcblxuICBjb25zdCBkZWNvZGVTdHJlYW0gPSBuZXcgRGVjb2RlU3RyZWFtKGVuY29kaW5nKTtcbiAgY29uc3QgbG9hZFN0cmVhbSA9IF9zdHJpbmdTdHJlYW0ob3B0cywgY2IpO1xuXG4gIGRlY29kZVN0cmVhbS5waXBlKGxvYWRTdHJlYW0pO1xuXG4gIHJldHVybiBkZWNvZGVTdHJlYW07XG59XG5cbnR5cGUgVW5kaWNpU3RyZWFtT3B0aW9ucyA9IFBhcmFtZXRlcnM8dHlwZW9mIHVuZGljaS5zdHJlYW0+WzFdO1xuXG5leHBvcnQgaW50ZXJmYWNlIENoZWVyaW9SZXF1ZXN0T3B0aW9ucyBleHRlbmRzIERlY29kZVN0cmVhbU9wdGlvbnMge1xuICAvKiogVGhlIG9wdGlvbnMgcGFzc2VkIHRvIGB1bmRpY2lgJ3MgYHN0cmVhbWAgbWV0aG9kLiAqL1xuICByZXF1ZXN0T3B0aW9ucz86IFVuZGljaVN0cmVhbU9wdGlvbnM7XG59XG5cbmNvbnN0IGRlZmF1bHRSZXF1ZXN0T3B0aW9uczogVW5kaWNpU3RyZWFtT3B0aW9ucyA9IHtcbiAgbWV0aG9kOiAnR0VUJyxcbiAgLy8gQWxsb3cgcmVkaXJlY3RzIGJ5IGRlZmF1bHRcbiAgbWF4UmVkaXJlY3Rpb25zOiA1LFxuICAvLyBOT1RFOiBgdGhyb3dPbkVycm9yYCBjdXJyZW50bHkgZG9lc24ndCB3b3JrIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvdW5kaWNpL2lzc3Vlcy8xNzUzXG4gIHRocm93T25FcnJvcjogdHJ1ZSxcbiAgLy8gU2V0IGFuIEFjY2VwdCBoZWFkZXJcbiAgaGVhZGVyczoge1xuICAgIGFjY2VwdDogJ3RleHQvaHRtbCxhcHBsaWNhdGlvbi94aHRtbCt4bWwsYXBwbGljYXRpb24veG1sO3E9MC45LCovKjtxPTAuOCcsXG4gIH0sXG59O1xuXG4vKipcbiAqIGBmcm9tVVJMYCBsb2FkcyBhIGRvY3VtZW50IGZyb20gYSBVUkwuXG4gKlxuICogQnkgZGVmYXVsdCwgcmVkaXJlY3RzIGFyZSBhbGxvd2VkIGFuZCBub24tMnh4IHJlc3BvbnNlcyBhcmUgcmVqZWN0ZWQuXG4gKlxuICogQGNhdGVnb3J5IExvYWRpbmdcbiAqIEBleGFtcGxlXG4gKlxuICogYGBganNcbiAqIGltcG9ydCAqIGFzIGNoZWVyaW8gZnJvbSAnY2hlZXJpbyc7XG4gKlxuICogY29uc3QgJCA9IGF3YWl0IGNoZWVyaW8uZnJvbVVSTCgnaHR0cHM6Ly9leGFtcGxlLmNvbScpO1xuICogYGBgXG4gKlxuICogQHBhcmFtIHVybCAtIFRoZSBVUkwgdG8gbG9hZCB0aGUgZG9jdW1lbnQgZnJvbS5cbiAqIEBwYXJhbSBvcHRpb25zIC0gVGhlIG9wdGlvbnMgdG8gcGFzcyB0byBDaGVlcmlvLlxuICogQHJldHVybnMgVGhlIGxvYWRlZCBkb2N1bWVudC5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGZyb21VUkwoXG4gIHVybDogc3RyaW5nIHwgVVJMLFxuICBvcHRpb25zOiBDaGVlcmlvUmVxdWVzdE9wdGlvbnMgPSB7fSxcbik6IFByb21pc2U8Q2hlZXJpb0FQST4ge1xuICBjb25zdCB7XG4gICAgcmVxdWVzdE9wdGlvbnMgPSBkZWZhdWx0UmVxdWVzdE9wdGlvbnMsXG4gICAgZW5jb2RpbmcgPSB7fSxcbiAgICAuLi5jaGVlcmlvT3B0aW9uc1xuICB9ID0gb3B0aW9ucztcbiAgbGV0IHVuZGljaVN0cmVhbTogUHJvbWlzZTx1bmRpY2kuRGlzcGF0Y2hlci5TdHJlYW1EYXRhPiB8IHVuZGVmaW5lZDtcblxuICAvLyBBZGQgaGVhZGVycyBpZiBub25lIHdlcmUgc3VwcGxpZWQuXG4gIHJlcXVlc3RPcHRpb25zLmhlYWRlcnMgPz89IGRlZmF1bHRSZXF1ZXN0T3B0aW9ucy5oZWFkZXJzO1xuXG4gIGNvbnN0IHByb21pc2UgPSBuZXcgUHJvbWlzZTxDaGVlcmlvQVBJPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgdW5kaWNpU3RyZWFtID0gdW5kaWNpLnN0cmVhbSh1cmwsIHJlcXVlc3RPcHRpb25zLCAocmVzKSA9PiB7XG4gICAgICBjb25zdCBjb250ZW50VHlwZSA9IHJlcy5oZWFkZXJzWydjb250ZW50LXR5cGUnXSA/PyAndGV4dC9odG1sJztcbiAgICAgIGNvbnN0IG1pbWVUeXBlID0gbmV3IE1JTUVUeXBlKFxuICAgICAgICBBcnJheS5pc0FycmF5KGNvbnRlbnRUeXBlKSA/IGNvbnRlbnRUeXBlWzBdIDogY29udGVudFR5cGUsXG4gICAgICApO1xuXG4gICAgICBpZiAoIW1pbWVUeXBlLmlzSFRNTCgpICYmICFtaW1lVHlwZS5pc1hNTCgpKSB7XG4gICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKFxuICAgICAgICAgIGBUaGUgY29udGVudC10eXBlIFwiJHtjb250ZW50VHlwZX1cIiBpcyBuZWl0aGVyIEhUTUwgbm9yIFhNTC5gLFxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICAvLyBGb3J3YXJkIHRoZSBjaGFyc2V0IGZyb20gdGhlIGhlYWRlciB0byB0aGUgZGVjb2RlU3RyZWFtLlxuICAgICAgZW5jb2RpbmcudHJhbnNwb3J0TGF5ZXJFbmNvZGluZ0xhYmVsID0gbWltZVR5cGUucGFyYW1ldGVycy5nZXQoJ2NoYXJzZXQnKTtcblxuICAgICAgLypcbiAgICAgICAqIElmIHdlIGFsbG93IHJlZGlyZWN0cywgd2Ugd2lsbCBoYXZlIGVudHJpZXMgaW4gdGhlIGhpc3RvcnkuXG4gICAgICAgKiBUaGUgbGFzdCBlbnRyeSB3aWxsIGJlIHRoZSBmaW5hbCBVUkwuXG4gICAgICAgKi9cbiAgICAgIGNvbnN0IGhpc3RvcnkgPSAoXG4gICAgICAgIHJlcy5jb250ZXh0IGFzXG4gICAgICAgICAgfCB7XG4gICAgICAgICAgICAgIGhpc3Rvcnk/OiBVUkxbXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB8IHVuZGVmaW5lZFxuICAgICAgKT8uaGlzdG9yeTtcblxuICAgICAgY29uc3Qgb3B0cyA9IHtcbiAgICAgICAgZW5jb2RpbmcsXG4gICAgICAgIC8vIFNldCBYTUwgbW9kZSBiYXNlZCBvbiB0aGUgTUlNRSB0eXBlLlxuICAgICAgICB4bWxNb2RlOiBtaW1lVHlwZS5pc1hNTCgpLFxuICAgICAgICAvLyBTZXQgdGhlIGBiYXNlVVJMYCB0byB0aGUgZmluYWwgVVJMLlxuICAgICAgICBiYXNlVVJMOiBoaXN0b3J5ID8gaGlzdG9yeVtoaXN0b3J5Lmxlbmd0aCAtIDFdIDogdXJsLFxuICAgICAgICAuLi5jaGVlcmlvT3B0aW9ucyxcbiAgICAgIH07XG5cbiAgICAgIHJldHVybiBkZWNvZGVTdHJlYW0ob3B0cywgKGVyciwgJCkgPT4gKGVyciA/IHJlamVjdChlcnIpIDogcmVzb2x2ZSgkKSkpO1xuICAgIH0pO1xuICB9KTtcblxuICAvLyBMZXQncyBtYWtlIHN1cmUgdGhlIHJlcXVlc3QgaXMgY29tcGxldGVkIGJlZm9yZSByZXR1cm5pbmcgdGhlIHByb21pc2UuXG4gIGF3YWl0IHVuZGljaVN0cmVhbTtcblxuICByZXR1cm4gcHJvbWlzZTtcbn1cbiIsICJpbXBvcnQgYXhpb3MgZnJvbSAnYXhpb3MnO1xuaW1wb3J0ICogYXMgY2hlZXJpbyBmcm9tICdjaGVlcmlvJztcbmltcG9ydCBodHRwcyBmcm9tICdodHRwcyc7XG5cbi8vIENvbnN0YW50c1xuY29uc3QgUkVTVUxUU19QRVJfUEFHRSA9IDEwO1xuY29uc3QgTUFYX0NBQ0hFX1BBR0VTID0gNTtcblxuLy8gUm90YXRpbmcgVXNlciBBZ2VudHNcbmNvbnN0IFVTRVJfQUdFTlRTID0gW1xuICAnTW96aWxsYS81LjAgKFdpbmRvd3MgTlQgMTAuMDsgV2luNjQ7IHg2NCkgQXBwbGVXZWJLaXQvNTM3LjM2IChLSFRNTCwgbGlrZSBHZWNrbykgQ2hyb21lLzEyMC4wLjAuMCBTYWZhcmkvNTM3LjM2JyxcbiAgJ01vemlsbGEvNS4wIChXaW5kb3dzIE5UIDEwLjA7IFdpbjY0OyB4NjQpIEVkZ2UvMTIwLjAuMC4wJyxcbiAgJ01vemlsbGEvNS4wIChNYWNpbnRvc2g7IEludGVsIE1hYyBPUyBYIDEwXzE1XzcpIEFwcGxlV2ViS2l0LzYwNS4xLjE1IChLSFRNTCwgbGlrZSBHZWNrbykgVmVyc2lvbi8xNy4yLjEgU2FmYXJpLzYwNS4xLjE1JyxcbiAgJ01vemlsbGEvNS4wIChXaW5kb3dzIE5UIDEwLjA7IFdpbjY0OyB4NjQ7IHJ2OjEyMi4wKSBHZWNrby8yMDEwMDEwMSBGaXJlZm94LzEyMi4wJyxcbiAgJ01vemlsbGEvNS4wIChYMTE7IExpbnV4IHg4Nl82NCkgQXBwbGVXZWJLaXQvNTM3LjM2IChLSFRNTCwgbGlrZSBHZWNrbykgQ2hyb21lLzEyMC4wLjAuMCBTYWZhcmkvNTM3LjM2J1xuXTtcblxuLy8gQ2FjaGUgcmVzdWx0cyB0byBhdm9pZCByZXBlYXRlZCByZXF1ZXN0c1xuY29uc3QgcmVzdWx0c0NhY2hlID0gbmV3IE1hcCgpO1xuY29uc3QgQ0FDSEVfRFVSQVRJT04gPSA1ICogNjAgKiAxMDAwOyAvLyA1IG1pbnV0ZXNcblxuLy8gSFRUUFMgYWdlbnQgY29uZmlndXJhdGlvbiB0byBoYW5kbGUgY2VydGlmaWNhdGUgY2hhaW4gaXNzdWVzXG5jb25zdCBodHRwc0FnZW50ID0gbmV3IGh0dHBzLkFnZW50KHtcbiAgcmVqZWN0VW5hdXRob3JpemVkOiB0cnVlLCAvLyBLZWVwIHNlY3VyaXR5IGVuYWJsZWRcbiAga2VlcEFsaXZlOiB0cnVlLFxuICB0aW1lb3V0OiAxMDAwMCxcbiAgLy8gUHJvdmlkZSBmYWxsYmFjayBmb3IgY2VydGlmaWNhdGUgaXNzdWVzIHdoaWxlIG1haW50YWluaW5nIHNlY3VyaXR5XG4gIHNlY3VyZVByb3RvY29sOiAnVExTdjFfMl9tZXRob2QnXG59KTtcblxuLyoqXG4gKiBHZXQgYSByYW5kb20gdXNlciBhZ2VudCBmcm9tIHRoZSBsaXN0XG4gKiBAcmV0dXJucyB7c3RyaW5nfSBBIHJhbmRvbSB1c2VyIGFnZW50IHN0cmluZ1xuICovXG5mdW5jdGlvbiBnZXRSYW5kb21Vc2VyQWdlbnQoKSB7XG4gIHJldHVybiBVU0VSX0FHRU5UU1tNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiBVU0VSX0FHRU5UUy5sZW5ndGgpXTtcbn1cblxuLyoqXG4gKiBHZW5lcmF0ZSBhIGNhY2hlIGtleSBmb3IgYSBzZWFyY2ggcXVlcnkgYW5kIHBhZ2VcbiAqIEBwYXJhbSB7c3RyaW5nfSBxdWVyeSAtIFRoZSBzZWFyY2ggcXVlcnlcbiAqIEBwYXJhbSB7bnVtYmVyfSBwYWdlIC0gVGhlIHBhZ2UgbnVtYmVyXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgY2FjaGUga2V5XG4gKi9cbmZ1bmN0aW9uIGdldENhY2hlS2V5KHF1ZXJ5LCBwYWdlKSB7XG4gIHJldHVybiBgJHtxdWVyeX0tJHtwYWdlfWA7XG59XG5cbi8qKlxuICogQ2xlYXIgb2xkIGVudHJpZXMgZnJvbSB0aGUgY2FjaGVcbiAqL1xuZnVuY3Rpb24gY2xlYXJPbGRDYWNoZSgpIHtcbiAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgcmVzdWx0c0NhY2hlLmVudHJpZXMoKSkge1xuICAgIGlmIChub3cgLSB2YWx1ZS50aW1lc3RhbXAgPiBDQUNIRV9EVVJBVElPTikge1xuICAgICAgcmVzdWx0c0NhY2hlLmRlbGV0ZShrZXkpO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIEV4dHJhY3QgdGhlIGRpcmVjdCBVUkwgZnJvbSBhIER1Y2tEdWNrR28gcmVkaXJlY3QgVVJMXG4gKiBAcGFyYW0ge3N0cmluZ30gZHVja2R1Y2tnb1VybCAtIFRoZSBEdWNrRHVja0dvIFVSTCB0byBleHRyYWN0IGZyb21cbiAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBkaXJlY3QgVVJMXG4gKi9cbmZ1bmN0aW9uIGV4dHJhY3REaXJlY3RVcmwoZHVja2R1Y2tnb1VybCkge1xuICB0cnkge1xuICAgIC8vIEhhbmRsZSByZWxhdGl2ZSBVUkxzIGZyb20gRHVja0R1Y2tHb1xuICAgIGlmIChkdWNrZHVja2dvVXJsLnN0YXJ0c1dpdGgoJy8vJykpIHtcbiAgICAgIGR1Y2tkdWNrZ29VcmwgPSAnaHR0cHM6JyArIGR1Y2tkdWNrZ29Vcmw7XG4gICAgfSBlbHNlIGlmIChkdWNrZHVja2dvVXJsLnN0YXJ0c1dpdGgoJy8nKSkge1xuICAgICAgZHVja2R1Y2tnb1VybCA9ICdodHRwczovL2R1Y2tkdWNrZ28uY29tJyArIGR1Y2tkdWNrZ29Vcmw7XG4gICAgfVxuXG4gICAgY29uc3QgdXJsID0gbmV3IFVSTChkdWNrZHVja2dvVXJsKTtcblxuICAgIC8vIEV4dHJhY3QgZGlyZWN0IFVSTCBmcm9tIER1Y2tEdWNrR28gcmVkaXJlY3RcbiAgICBpZiAodXJsLmhvc3RuYW1lID09PSAnZHVja2R1Y2tnby5jb20nICYmIHVybC5wYXRobmFtZSA9PT0gJy9sLycpIHtcbiAgICAgIGNvbnN0IHVkZGcgPSB1cmwuc2VhcmNoUGFyYW1zLmdldCgndWRkZycpO1xuICAgICAgaWYgKHVkZGcpIHtcbiAgICAgICAgcmV0dXJuIGRlY29kZVVSSUNvbXBvbmVudCh1ZGRnKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBIYW5kbGUgYWQgcmVkaXJlY3RzXG4gICAgaWYgKHVybC5ob3N0bmFtZSA9PT0gJ2R1Y2tkdWNrZ28uY29tJyAmJiB1cmwucGF0aG5hbWUgPT09ICcveS5qcycpIHtcbiAgICAgIGNvbnN0IHUzID0gdXJsLnNlYXJjaFBhcmFtcy5nZXQoJ3UzJyk7XG4gICAgICBpZiAodTMpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCBkZWNvZGVkVTMgPSBkZWNvZGVVUklDb21wb25lbnQodTMpO1xuICAgICAgICAgIGNvbnN0IHUzVXJsID0gbmV3IFVSTChkZWNvZGVkVTMpO1xuICAgICAgICAgIGNvbnN0IGNsaWNrVXJsID0gdTNVcmwuc2VhcmNoUGFyYW1zLmdldCgnbGQnKTtcbiAgICAgICAgICBpZiAoY2xpY2tVcmwpIHtcbiAgICAgICAgICAgIHJldHVybiBkZWNvZGVVUklDb21wb25lbnQoY2xpY2tVcmwpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gZGVjb2RlZFUzO1xuICAgICAgICB9IGNhdGNoIHtcbiAgICAgICAgICByZXR1cm4gZHVja2R1Y2tnb1VybDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBkdWNrZHVja2dvVXJsO1xuICB9IGNhdGNoIHtcbiAgICAvLyBJZiBVUkwgcGFyc2luZyBmYWlscywgdHJ5IHRvIGV4dHJhY3QgVVJMIGZyb20gYSBiYXNpYyBzdHJpbmcgbWF0Y2hcbiAgICBjb25zdCB1cmxNYXRjaCA9IGR1Y2tkdWNrZ29VcmwubWF0Y2goL2h0dHBzPzpcXC9cXC9bXlxcczw+XCJdKy8pO1xuICAgIGlmICh1cmxNYXRjaCkge1xuICAgICAgcmV0dXJuIHVybE1hdGNoWzBdO1xuICAgIH1cbiAgICByZXR1cm4gZHVja2R1Y2tnb1VybDtcbiAgfVxufVxuXG4vKipcbiAqIEdldCBhIGZhdmljb24gVVJMIGZvciBhIGdpdmVuIHdlYnNpdGUgVVJMXG4gKiBAcGFyYW0ge3N0cmluZ30gdXJsIC0gVGhlIHdlYnNpdGUgVVJMXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgZmF2aWNvbiBVUkxcbiAqL1xuZnVuY3Rpb24gZ2V0RmF2aWNvblVybCh1cmwpIHtcbiAgdHJ5IHtcbiAgICBjb25zdCB1cmxPYmogPSBuZXcgVVJMKHVybCk7XG4gICAgcmV0dXJuIGBodHRwczovL3d3dy5nb29nbGUuY29tL3MyL2Zhdmljb25zP2RvbWFpbj0ke3VybE9iai5ob3N0bmFtZX0mc3o9MzJgO1xuICB9IGNhdGNoIHtcbiAgICByZXR1cm4gJyc7IC8vIFJldHVybiBlbXB0eSBzdHJpbmcgaWYgVVJMIGlzIGludmFsaWRcbiAgfVxufVxuXG4vKipcbiAqIFNjcmFwZXMgc2VhcmNoIHJlc3VsdHMgZnJvbSBEdWNrRHVja0dvIEhUTUxcbiAqIEBwYXJhbSB7c3RyaW5nfSBxdWVyeSAtIFRoZSBzZWFyY2ggcXVlcnlcbiAqIEBwYXJhbSB7bnVtYmVyfSBwYWdlIC0gVGhlIHBhZ2UgbnVtYmVyIChkZWZhdWx0OiAxKVxuICogQHBhcmFtIHtudW1iZXJ9IG51bVJlc3VsdHMgLSBOdW1iZXIgb2YgcmVzdWx0cyB0byByZXR1cm4gKGRlZmF1bHQ6IDEwKVxuICogQHJldHVybnMge1Byb21pc2U8QXJyYXk+fSAtIEFycmF5IG9mIHNlYXJjaCByZXN1bHRzXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHNlYXJjaER1Y2tEdWNrR28ocXVlcnksIHBhZ2UgPSAxLCBudW1SZXN1bHRzID0gMTApIHtcbiAgdHJ5IHtcbiAgICAvLyBDbGVhciBvbGQgY2FjaGUgZW50cmllc1xuICAgIGNsZWFyT2xkQ2FjaGUoKTtcblxuICAgIC8vIENhbGN1bGF0ZSBzdGFydCBpbmRleCBmb3IgcGFnaW5hdGlvblxuICAgIGNvbnN0IHN0YXJ0SW5kZXggPSAocGFnZSAtIDEpICogUkVTVUxUU19QRVJfUEFHRTtcblxuICAgIC8vIENoZWNrIGNhY2hlIGZpcnN0XG4gICAgY29uc3QgY2FjaGVLZXkgPSBnZXRDYWNoZUtleShxdWVyeSwgcGFnZSk7XG4gICAgY29uc3QgY2FjaGVkUmVzdWx0cyA9IHJlc3VsdHNDYWNoZS5nZXQoY2FjaGVLZXkpO1xuXG4gICAgaWYgKGNhY2hlZFJlc3VsdHMgJiYgRGF0ZS5ub3coKSAtIGNhY2hlZFJlc3VsdHMudGltZXN0YW1wIDwgQ0FDSEVfRFVSQVRJT04pIHtcbiAgICAgIHJldHVybiBjYWNoZWRSZXN1bHRzLnJlc3VsdHMuc2xpY2UoMCwgbnVtUmVzdWx0cyk7XG4gICAgfVxuXG4gICAgLy8gR2V0IGEgcmFuZG9tIHVzZXIgYWdlbnRcbiAgICBjb25zdCB1c2VyQWdlbnQgPSBnZXRSYW5kb21Vc2VyQWdlbnQoKTtcblxuICAgIC8vIEZldGNoIHJlc3VsdHNcbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGF4aW9zLmdldChcbiAgICAgIGBodHRwczovL2R1Y2tkdWNrZ28uY29tL2h0bWwvP3E9JHtlbmNvZGVVUklDb21wb25lbnQocXVlcnkpfSZzPSR7c3RhcnRJbmRleH1gLFxuICAgICAge1xuICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgJ1VzZXItQWdlbnQnOiB1c2VyQWdlbnRcbiAgICAgICAgfSxcbiAgICAgICAgaHR0cHNBZ2VudDogaHR0cHNBZ2VudFxuICAgICAgfVxuICAgICk7XG5cbiAgICBpZiAocmVzcG9uc2Uuc3RhdHVzICE9PSAyMDApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignRmFpbGVkIHRvIGZldGNoIHNlYXJjaCByZXN1bHRzJyk7XG4gICAgfVxuXG4gICAgY29uc3QgaHRtbCA9IHJlc3BvbnNlLmRhdGE7XG5cbiAgICAvLyBQYXJzZSByZXN1bHRzIHVzaW5nIGNoZWVyaW9cbiAgICBjb25zdCAkID0gY2hlZXJpby5sb2FkKGh0bWwpO1xuXG4gICAgY29uc3QgcmVzdWx0cyA9IFtdO1xuICAgICQoJy5yZXN1bHQnKS5lYWNoKChpLCByZXN1bHQpID0+IHtcbiAgICAgIGNvbnN0ICRyZXN1bHQgPSAkKHJlc3VsdCk7XG4gICAgICBjb25zdCB0aXRsZUVsID0gJHJlc3VsdC5maW5kKCcucmVzdWx0X190aXRsZSBhJyk7XG4gICAgICBjb25zdCBsaW5rRWwgPSAkcmVzdWx0LmZpbmQoJy5yZXN1bHRfX3VybCcpO1xuICAgICAgY29uc3Qgc25pcHBldEVsID0gJHJlc3VsdC5maW5kKCcucmVzdWx0X19zbmlwcGV0Jyk7XG5cbiAgICAgIGNvbnN0IHRpdGxlID0gdGl0bGVFbC50ZXh0KCk/LnRyaW0oKTtcbiAgICAgIGNvbnN0IHJhd0xpbmsgPSB0aXRsZUVsLmF0dHIoJ2hyZWYnKTtcbiAgICAgIGNvbnN0IGRlc2NyaXB0aW9uID0gc25pcHBldEVsLnRleHQoKT8udHJpbSgpO1xuICAgICAgY29uc3QgZGlzcGxheVVybCA9IGxpbmtFbC50ZXh0KCk/LnRyaW0oKTtcblxuICAgICAgY29uc3QgZGlyZWN0TGluayA9IGV4dHJhY3REaXJlY3RVcmwocmF3TGluayB8fCAnJyk7XG4gICAgICBjb25zdCBmYXZpY29uID0gZ2V0RmF2aWNvblVybChkaXJlY3RMaW5rKTtcblxuICAgICAgaWYgKHRpdGxlICYmIGRpcmVjdExpbmspIHtcbiAgICAgICAgcmVzdWx0cy5wdXNoKHtcbiAgICAgICAgICB0aXRsZSxcbiAgICAgICAgICB1cmw6IGRpcmVjdExpbmssXG4gICAgICAgICAgc25pcHBldDogZGVzY3JpcHRpb24gfHwgJycsXG4gICAgICAgICAgZmF2aWNvbjogZmF2aWNvbixcbiAgICAgICAgICBkaXNwbGF5VXJsOiBkaXNwbGF5VXJsIHx8ICcnXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgLy8gR2V0IHBhZ2luYXRlZCByZXN1bHRzXG4gICAgY29uc3QgcGFnaW5hdGVkUmVzdWx0cyA9IHJlc3VsdHMuc2xpY2UoMCwgbnVtUmVzdWx0cyk7XG5cbiAgICAvLyBDYWNoZSB0aGUgcmVzdWx0c1xuICAgIHJlc3VsdHNDYWNoZS5zZXQoY2FjaGVLZXksIHtcbiAgICAgIHJlc3VsdHM6IHBhZ2luYXRlZFJlc3VsdHMsXG4gICAgICB0aW1lc3RhbXA6IERhdGUubm93KClcbiAgICB9KTtcblxuICAgIC8vIElmIGNhY2hlIGlzIHRvbyBiaWcsIHJlbW92ZSBvbGRlc3QgZW50cmllc1xuICAgIGlmIChyZXN1bHRzQ2FjaGUuc2l6ZSA+IE1BWF9DQUNIRV9QQUdFUykge1xuICAgICAgY29uc3Qgb2xkZXN0S2V5ID0gQXJyYXkuZnJvbShyZXN1bHRzQ2FjaGUua2V5cygpKVswXTtcbiAgICAgIHJlc3VsdHNDYWNoZS5kZWxldGUob2xkZXN0S2V5KTtcbiAgICB9XG5cbiAgICByZXR1cm4gcGFnaW5hdGVkUmVzdWx0cztcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBjb25zb2xlLmVycm9yKCdFcnJvciBzZWFyY2hpbmcgRHVja0R1Y2tHbzonLCBlcnJvci5tZXNzYWdlKTtcbiAgICB0aHJvdyBlcnJvcjtcbiAgfVxufVxuXG4vKipcbiAqIEZldGNoZXMgdGhlIGNvbnRlbnQgb2YgYSBVUkwgYW5kIHJldHVybnMgaXQgYXMgdGV4dFxuICogQHBhcmFtIHtzdHJpbmd9IHVybCAtIFRoZSBVUkwgdG8gZmV0Y2hcbiAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zIC0gT3B0aW9ucyBmb3IgY29udGVudCBleHRyYWN0aW9uXG4gKiBAcGFyYW0ge2Jvb2xlYW59IG9wdGlvbnMuZXh0cmFjdE1haW5Db250ZW50IC0gV2hldGhlciB0byBhdHRlbXB0IHRvIGV4dHJhY3QgbWFpbiBjb250ZW50IChkZWZhdWx0OiB0cnVlKVxuICogQHBhcmFtIHtib29sZWFufSBvcHRpb25zLmluY2x1ZGVMaW5rcyAtIFdoZXRoZXIgdG8gaW5jbHVkZSBsaW5rIHRleHQgKGRlZmF1bHQ6IHRydWUpXG4gKiBAcGFyYW0ge2Jvb2xlYW59IG9wdGlvbnMuaW5jbHVkZUltYWdlcyAtIFdoZXRoZXIgdG8gaW5jbHVkZSBpbWFnZSBhbHQgdGV4dCAoZGVmYXVsdDogdHJ1ZSlcbiAqIEBwYXJhbSB7c3RyaW5nW119IG9wdGlvbnMuZXhjbHVkZVRhZ3MgLSBUYWdzIHRvIGV4Y2x1ZGUgZnJvbSBleHRyYWN0aW9uXG4gKiBAcmV0dXJucyB7UHJvbWlzZTxzdHJpbmc+fSAtIFRoZSBjb250ZW50IG9mIHRoZSBVUkxcbiAqL1xuYXN5bmMgZnVuY3Rpb24gZmV0Y2hVcmxDb250ZW50KHVybCwgb3B0aW9ucyA9IHt9KSB7XG4gIHRyeSB7XG4gICAgLy8gRGVmYXVsdCBvcHRpb25zXG4gICAgY29uc3Qge1xuICAgICAgZXh0cmFjdE1haW5Db250ZW50ID0gdHJ1ZSxcbiAgICAgIGluY2x1ZGVMaW5rcyA9IHRydWUsXG4gICAgICBpbmNsdWRlSW1hZ2VzID0gdHJ1ZSxcbiAgICAgIGV4Y2x1ZGVUYWdzID0gWydzY3JpcHQnLCAnc3R5bGUnLCAnbm9zY3JpcHQnLCAnaWZyYW1lJywgJ3N2ZycsICduYXYnLCAnZm9vdGVyJywgJ2hlYWRlcicsICdhc2lkZSddXG4gICAgfSA9IG9wdGlvbnM7XG5cbiAgICAvLyBHZXQgYSByYW5kb20gdXNlciBhZ2VudFxuICAgIGNvbnN0IHVzZXJBZ2VudCA9IGdldFJhbmRvbVVzZXJBZ2VudCgpO1xuXG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBheGlvcy5nZXQodXJsLCB7XG4gICAgICBoZWFkZXJzOiB7XG4gICAgICAgICdVc2VyLUFnZW50JzogdXNlckFnZW50XG4gICAgICB9LFxuICAgICAgdGltZW91dDogMTAwMDAsIC8vIDEwIHNlY29uZCB0aW1lb3V0XG4gICAgICBodHRwc0FnZW50OiBodHRwc0FnZW50XG4gICAgfSk7XG5cbiAgICBpZiAocmVzcG9uc2Uuc3RhdHVzICE9PSAyMDApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgRmFpbGVkIHRvIGZldGNoIFVSTDogJHt1cmx9YCk7XG4gICAgfVxuXG4gICAgLy8gSWYgdGhlIGNvbnRlbnQgaXMgSFRNTCwgZXh0cmFjdCB0aGUgdGV4dCBjb250ZW50XG4gICAgY29uc3QgY29udGVudFR5cGUgPSByZXNwb25zZS5oZWFkZXJzWydjb250ZW50LXR5cGUnXSB8fCAnJztcbiAgICBpZiAoY29udGVudFR5cGUuaW5jbHVkZXMoJ3RleHQvaHRtbCcpKSB7XG4gICAgICBjb25zdCAkID0gY2hlZXJpby5sb2FkKHJlc3BvbnNlLmRhdGEpO1xuXG4gICAgICAvLyBSZW1vdmUgdW53YW50ZWQgZWxlbWVudHNcbiAgICAgIGV4Y2x1ZGVUYWdzLmZvckVhY2godGFnID0+IHtcbiAgICAgICAgJCh0YWcpLnJlbW92ZSgpO1xuICAgICAgfSk7XG5cbiAgICAgIC8vIFJlbW92ZSBhZHMgYW5kIG90aGVyIGNvbW1vbiB1bndhbnRlZCBlbGVtZW50c1xuICAgICAgY29uc3QgdW53YW50ZWRTZWxlY3RvcnMgPSBbXG4gICAgICAgICdbaWQqPVwiYWRcIl0nLCAnW2NsYXNzKj1cImFkXCJdJywgJ1tpZCo9XCJiYW5uZXJcIl0nLCAnW2NsYXNzKj1cImJhbm5lclwiXScsXG4gICAgICAgICdbaWQqPVwicG9wdXBcIl0nLCAnW2NsYXNzKj1cInBvcHVwXCJdJywgJ1tjbGFzcyo9XCJjb29raWVcIl0nLFxuICAgICAgICAnW2lkKj1cImNvb2tpZVwiXScsICdbY2xhc3MqPVwibmV3c2xldHRlclwiXScsICdbaWQqPVwibmV3c2xldHRlclwiXScsXG4gICAgICAgICdbY2xhc3MqPVwic29jaWFsXCJdJywgJ1tpZCo9XCJzb2NpYWxcIl0nLCAnW2NsYXNzKj1cInNoYXJlXCJdJywgJ1tpZCo9XCJzaGFyZVwiXSdcbiAgICAgIF07XG5cbiAgICAgIHVud2FudGVkU2VsZWN0b3JzLmZvckVhY2goc2VsZWN0b3IgPT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICQoc2VsZWN0b3IpLnJlbW92ZSgpO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgLy8gSWdub3JlIGludmFsaWQgc2VsZWN0b3JzXG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICAvLyBIYW5kbGUgbGlua3MgYW5kIGltYWdlc1xuICAgICAgaWYgKCFpbmNsdWRlTGlua3MpIHtcbiAgICAgICAgJCgnYScpLmVhY2goKGksIGxpbmspID0+IHtcbiAgICAgICAgICAkKGxpbmspLnJlcGxhY2VXaXRoKCQobGluaykudGV4dCgpKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIGlmICghaW5jbHVkZUltYWdlcykge1xuICAgICAgICAkKCdpbWcnKS5yZW1vdmUoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFJlcGxhY2UgaW1hZ2VzIHdpdGggdGhlaXIgYWx0IHRleHRcbiAgICAgICAgJCgnaW1nJykuZWFjaCgoaSwgaW1nKSA9PiB7XG4gICAgICAgICAgY29uc3QgYWx0ID0gJChpbWcpLmF0dHIoJ2FsdCcpO1xuICAgICAgICAgIGlmIChhbHQpIHtcbiAgICAgICAgICAgICQoaW1nKS5yZXBsYWNlV2l0aChgW0ltYWdlOiAke2FsdH1dYCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICQoaW1nKS5yZW1vdmUoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICAvLyBUcnkgdG8gZXh0cmFjdCBtYWluIGNvbnRlbnQgaWYgcmVxdWVzdGVkXG4gICAgICBpZiAoZXh0cmFjdE1haW5Db250ZW50KSB7XG4gICAgICAgIC8vIENvbW1vbiBjb250ZW50IHNlbGVjdG9ycyBpbiBvcmRlciBvZiBwcmlvcml0eVxuICAgICAgICBjb25zdCBjb250ZW50U2VsZWN0b3JzID0gW1xuICAgICAgICAgICdhcnRpY2xlJywgJ21haW4nLCAnW3JvbGU9XCJtYWluXCJdJywgJy5wb3N0LWNvbnRlbnQnLCAnLmFydGljbGUtY29udGVudCcsXG4gICAgICAgICAgJy5jb250ZW50JywgJyNjb250ZW50JywgJy5wb3N0JywgJy5hcnRpY2xlJywgJy5lbnRyeS1jb250ZW50JyxcbiAgICAgICAgICAnLnBhZ2UtY29udGVudCcsICcucG9zdC1ib2R5JywgJy5wb3N0LXRleHQnLCAnLnN0b3J5LWJvZHknXG4gICAgICAgIF07XG5cbiAgICAgICAgZm9yIChjb25zdCBzZWxlY3RvciBvZiBjb250ZW50U2VsZWN0b3JzKSB7XG4gICAgICAgICAgY29uc3QgbWFpbkNvbnRlbnQgPSAkKHNlbGVjdG9yKS5maXJzdCgpO1xuICAgICAgICAgIGlmIChtYWluQ29udGVudC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAvLyBDbGVhbiB1cCB0aGUgY29udGVudFxuICAgICAgICAgICAgcmV0dXJuIGNsZWFuVGV4dChtYWluQ29udGVudC50ZXh0KCkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBJZiBubyBtYWluIGNvbnRlbnQgZm91bmQgb3Igbm90IHJlcXVlc3RlZCwgdXNlIHRoZSBib2R5XG4gICAgICByZXR1cm4gY2xlYW5UZXh0KCQoJ2JvZHknKS50ZXh0KCkpO1xuICAgIH1cblxuICAgIC8vIEZvciBub24tSFRNTCBjb250ZW50LCByZXR1cm4gYXMgaXNcbiAgICByZXR1cm4gcmVzcG9uc2UuZGF0YS50b1N0cmluZygpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGZldGNoaW5nIFVSTCBjb250ZW50OicsIGVycm9yLm1lc3NhZ2UpO1xuICAgIHRocm93IGVycm9yO1xuICB9XG59XG5cbi8qKlxuICogQ2xlYW5zIHVwIHRleHQgYnkgcmVtb3ZpbmcgZXhjZXNzaXZlIHdoaXRlc3BhY2UgYW5kIG5vcm1hbGl6aW5nIGxpbmUgYnJlYWtzXG4gKiBAcGFyYW0ge3N0cmluZ30gdGV4dCAtIFRoZSB0ZXh0IHRvIGNsZWFuXG4gKiBAcmV0dXJucyB7c3RyaW5nfSAtIFRoZSBjbGVhbmVkIHRleHRcbiAqL1xuZnVuY3Rpb24gY2xlYW5UZXh0KHRleHQpIHtcbiAgcmV0dXJuIHRleHRcbiAgICAucmVwbGFjZSgvXFxzKy9nLCAnICcpICAvLyBSZXBsYWNlIG11bHRpcGxlIHdoaXRlc3BhY2Ugd2l0aCBzaW5nbGUgc3BhY2VcbiAgICAucmVwbGFjZSgvXFxuXFxzKlxcbi9nLCAnXFxuXFxuJykgIC8vIE5vcm1hbGl6ZSBtdWx0aXBsZSBsaW5lIGJyZWFrc1xuICAgIC5yZXBsYWNlKC9eXFxzK3xcXHMrJC9nLCAnJykgIC8vIFRyaW0gc3RhcnQgYW5kIGVuZFxuICAgIC50cmltKCk7XG59XG5cbi8qKlxuICogRXh0cmFjdHMgbWV0YWRhdGEgZnJvbSBhIFVSTCAodGl0bGUsIGRlc2NyaXB0aW9uLCBldGMuKVxuICogQHBhcmFtIHtzdHJpbmd9IHVybCAtIFRoZSBVUkwgdG8gZXh0cmFjdCBtZXRhZGF0YSBmcm9tXG4gKiBAcmV0dXJucyB7UHJvbWlzZTxPYmplY3Q+fSAtIFRoZSBtZXRhZGF0YVxuICovXG5hc3luYyBmdW5jdGlvbiBleHRyYWN0VXJsTWV0YWRhdGEodXJsKSB7XG4gIHRyeSB7XG4gICAgLy8gR2V0IGEgcmFuZG9tIHVzZXIgYWdlbnRcbiAgICBjb25zdCB1c2VyQWdlbnQgPSBnZXRSYW5kb21Vc2VyQWdlbnQoKTtcblxuICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgYXhpb3MuZ2V0KHVybCwge1xuICAgICAgaGVhZGVyczoge1xuICAgICAgICAnVXNlci1BZ2VudCc6IHVzZXJBZ2VudFxuICAgICAgfSxcbiAgICAgIGh0dHBzQWdlbnQ6IGh0dHBzQWdlbnRcbiAgICB9KTtcblxuICAgIGlmIChyZXNwb25zZS5zdGF0dXMgIT09IDIwMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBGYWlsZWQgdG8gZmV0Y2ggVVJMOiAke3VybH1gKTtcbiAgICB9XG5cbiAgICBjb25zdCAkID0gY2hlZXJpby5sb2FkKHJlc3BvbnNlLmRhdGEpO1xuXG4gICAgLy8gRXh0cmFjdCBtZXRhZGF0YVxuICAgIGNvbnN0IHRpdGxlID0gJCgndGl0bGUnKS50ZXh0KCkgfHwgJyc7XG4gICAgY29uc3QgZGVzY3JpcHRpb24gPSAkKCdtZXRhW25hbWU9XCJkZXNjcmlwdGlvblwiXScpLmF0dHIoJ2NvbnRlbnQnKSB8fFxuICAgICAgICAgICAgICAgICAgICAgICAkKCdtZXRhW3Byb3BlcnR5PVwib2c6ZGVzY3JpcHRpb25cIl0nKS5hdHRyKCdjb250ZW50JykgfHwgJyc7XG4gICAgY29uc3Qgb2dJbWFnZSA9ICQoJ21ldGFbcHJvcGVydHk9XCJvZzppbWFnZVwiXScpLmF0dHIoJ2NvbnRlbnQnKSB8fCAnJztcbiAgICBjb25zdCBmYXZpY29uID0gJCgnbGlua1tyZWw9XCJpY29uXCJdJykuYXR0cignaHJlZicpIHx8XG4gICAgICAgICAgICAgICAgICAkKCdsaW5rW3JlbD1cInNob3J0Y3V0IGljb25cIl0nKS5hdHRyKCdocmVmJykgfHwgJyc7XG5cbiAgICAvLyBSZXNvbHZlIHJlbGF0aXZlIFVSTHNcbiAgICBjb25zdCByZXNvbHZlZEZhdmljb24gPSBmYXZpY29uID8gbmV3IFVSTChmYXZpY29uLCB1cmwpLmhyZWYgOiBnZXRGYXZpY29uVXJsKHVybCk7XG4gICAgY29uc3QgcmVzb2x2ZWRPZ0ltYWdlID0gb2dJbWFnZSA/IG5ldyBVUkwob2dJbWFnZSwgdXJsKS5ocmVmIDogJyc7XG5cbiAgICByZXR1cm4ge1xuICAgICAgdGl0bGUsXG4gICAgICBkZXNjcmlwdGlvbixcbiAgICAgIG9nSW1hZ2U6IHJlc29sdmVkT2dJbWFnZSxcbiAgICAgIGZhdmljb246IHJlc29sdmVkRmF2aWNvbixcbiAgICAgIHVybFxuICAgIH07XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgY29uc29sZS5lcnJvcignRXJyb3IgZXh0cmFjdGluZyBVUkwgbWV0YWRhdGE6JywgZXJyb3IubWVzc2FnZSk7XG4gICAgdGhyb3cgZXJyb3I7XG4gIH1cbn1cblxuZXhwb3J0IHtcbiAgc2VhcmNoRHVja0R1Y2tHbyxcbiAgZmV0Y2hVcmxDb250ZW50LFxuICBleHRyYWN0VXJsTWV0YWRhdGEsXG4gIGV4dHJhY3REaXJlY3RVcmwsXG4gIGdldEZhdmljb25Vcmxcbn07XG4iLCAiaW1wb3J0IHsgc2VhcmNoRHVja0R1Y2tHbyB9IGZyb20gJy4uL3V0aWxzL3NlYXJjaC5qcyc7XG5cbi8qKlxuICogV2ViIHNlYXJjaCB0b29sIGRlZmluaXRpb25cbiAqL1xuZXhwb3J0IGNvbnN0IHNlYXJjaFRvb2xEZWZpbml0aW9uID0ge1xuICBuYW1lOiAnd2ViLXNlYXJjaCcsXG4gIHRpdGxlOiAnV2ViIFNlYXJjaCcsXG4gIGRlc2NyaXB0aW9uOiAnU2VhcmNoIHRoZSB3ZWIgdXNpbmcgRHVja0R1Y2tHbyBhbmQgcmV0dXJuIGNvbXByZWhlbnNpdmUgcmVzdWx0cyB3aXRoIHRpdGxlcywgVVJMcywgYW5kIHNuaXBwZXRzJyxcbiAgaW5wdXRTY2hlbWE6IHtcbiAgICB0eXBlOiAnb2JqZWN0JyxcbiAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICBxdWVyeToge1xuICAgICAgICB0eXBlOiAnc3RyaW5nJyxcbiAgICAgICAgZGVzY3JpcHRpb246ICdUaGUgc2VhcmNoIHF1ZXJ5IHRvIGZpbmQgcmVsZXZhbnQgd2ViIHBhZ2VzJ1xuICAgICAgfSxcbiAgICAgIHBhZ2U6IHtcbiAgICAgICAgdHlwZTogJ2ludGVnZXInLFxuICAgICAgICBkZXNjcmlwdGlvbjogJ1BhZ2UgbnVtYmVyIGZvciBwYWdpbmF0aW9uIChkZWZhdWx0OiAxKScsXG4gICAgICAgIGRlZmF1bHQ6IDEsXG4gICAgICAgIG1pbmltdW06IDFcbiAgICAgIH0sXG4gICAgICBudW1SZXN1bHRzOiB7XG4gICAgICAgIHR5cGU6ICdpbnRlZ2VyJyxcbiAgICAgICAgZGVzY3JpcHRpb246ICdOdW1iZXIgb2YgcmVzdWx0cyB0byByZXR1cm4gcGVyIHBhZ2UgKGRlZmF1bHQ6IDEwLCBtYXg6IDIwKScsXG4gICAgICAgIGRlZmF1bHQ6IDEwLFxuICAgICAgICBtaW5pbXVtOiAxLFxuICAgICAgICBtYXhpbXVtOiAyMFxuICAgICAgfVxuICAgIH0sXG4gICAgcmVxdWlyZWQ6IFsncXVlcnknXVxuICB9XG59O1xuXG4vKipcbiAqIFdlYiBzZWFyY2ggdG9vbCBoYW5kbGVyXG4gKiBAcGFyYW0ge09iamVjdH0gcGFyYW1zIC0gVGhlIHRvb2wgcGFyYW1ldGVyc1xuICogQHJldHVybnMge1Byb21pc2U8T2JqZWN0Pn0gLSBUaGUgdG9vbCByZXN1bHRcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHNlYXJjaFRvb2xIYW5kbGVyKHBhcmFtcykge1xuICBjb25zdCB7IHF1ZXJ5LCBwYWdlID0gMSwgbnVtUmVzdWx0cyA9IDEwIH0gPSBwYXJhbXM7XG4gIGNvbnNvbGUubG9nKGBTZWFyY2hpbmcgZm9yOiAke3F1ZXJ5fSAocGFnZSAke3BhZ2V9LCAke251bVJlc3VsdHN9IHJlc3VsdHMpYCk7XG4gIFxuICBjb25zdCByZXN1bHRzID0gYXdhaXQgc2VhcmNoRHVja0R1Y2tHbyhxdWVyeSwgcGFnZSwgbnVtUmVzdWx0cyk7XG4gIGNvbnNvbGUubG9nKGBGb3VuZCAke3Jlc3VsdHMubGVuZ3RofSByZXN1bHRzYCk7XG4gIFxuICAvLyBGb3JtYXQgdGhlIHJlc3VsdHMgZm9yIGRpc3BsYXlcbiAgY29uc3QgZm9ybWF0dGVkUmVzdWx0cyA9IHJlc3VsdHMubWFwKChyZXN1bHQsIGluZGV4KSA9PiBcbiAgICBgJHtpbmRleCArIDF9LiBbJHtyZXN1bHQudGl0bGV9XSgke3Jlc3VsdC51cmx9KVxcbiAgICR7cmVzdWx0LnNuaXBwZXR9YFxuICApLmpvaW4oJ1xcblxcbicpO1xuICBcbiAgcmV0dXJuIHtcbiAgICBjb250ZW50OiBbXG4gICAgICB7XG4gICAgICAgIHR5cGU6ICd0ZXh0JyxcbiAgICAgICAgdGV4dDogZm9ybWF0dGVkUmVzdWx0cyB8fCAnTm8gcmVzdWx0cyBmb3VuZC4nXG4gICAgICB9XG4gICAgXVxuICB9O1xufVxuIiwgImltcG9ydCB7IGZldGNoVXJsQ29udGVudCB9IGZyb20gJy4uL3V0aWxzL3NlYXJjaC5qcyc7XG5cbi8qKlxuICogRmV0Y2ggVVJMIHRvb2wgZGVmaW5pdGlvblxuICovXG5leHBvcnQgY29uc3QgZmV0Y2hVcmxUb29sRGVmaW5pdGlvbiA9IHtcbiAgbmFtZTogJ2ZldGNoLXVybCcsXG4gIHRpdGxlOiAnRmV0Y2ggVVJMIENvbnRlbnQnLFxuICBkZXNjcmlwdGlvbjogJ0ZldGNoIGFuZCBleHRyYWN0IHRoZSBtYWluIGNvbnRlbnQgZnJvbSBhbnkgVVJMLCB3aXRoIGN1c3RvbWl6YWJsZSBleHRyYWN0aW9uIG9wdGlvbnMgZm9yIHRleHQsIGxpbmtzLCBhbmQgaW1hZ2VzJyxcbiAgaW5wdXRTY2hlbWE6IHtcbiAgICB0eXBlOiAnb2JqZWN0JyxcbiAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICB1cmw6IHtcbiAgICAgICAgdHlwZTogJ3N0cmluZycsXG4gICAgICAgIGRlc2NyaXB0aW9uOiAnVGhlIFVSTCB0byBmZXRjaCBjb250ZW50IGZyb20gKG11c3QgYmUgYSB2YWxpZCBIVFRQL0hUVFBTIFVSTCknXG4gICAgICB9LFxuICAgICAgbWF4TGVuZ3RoOiB7XG4gICAgICAgIHR5cGU6ICdpbnRlZ2VyJyxcbiAgICAgICAgZGVzY3JpcHRpb246ICdNYXhpbXVtIGxlbmd0aCBvZiBjb250ZW50IHRvIHJldHVybiBpbiBjaGFyYWN0ZXJzIChkZWZhdWx0OiAxMDAwMCknLFxuICAgICAgICBkZWZhdWx0OiAxMDAwMCxcbiAgICAgICAgbWluaW11bTogMTAwMCxcbiAgICAgICAgbWF4aW11bTogNTAwMDBcbiAgICAgIH0sXG4gICAgICBleHRyYWN0TWFpbkNvbnRlbnQ6IHtcbiAgICAgICAgdHlwZTogJ2Jvb2xlYW4nLFxuICAgICAgICBkZXNjcmlwdGlvbjogJ1doZXRoZXIgdG8gYXR0ZW1wdCB0byBleHRyYWN0IG1haW4gY29udGVudCBvbmx5LCBmaWx0ZXJpbmcgb3V0IG5hdmlnYXRpb24gYW5kIGFkcyAoZGVmYXVsdDogdHJ1ZSknLFxuICAgICAgICBkZWZhdWx0OiB0cnVlXG4gICAgICB9LFxuICAgICAgaW5jbHVkZUxpbmtzOiB7XG4gICAgICAgIHR5cGU6ICdib29sZWFuJyxcbiAgICAgICAgZGVzY3JpcHRpb246ICdXaGV0aGVyIHRvIGluY2x1ZGUgbGluayB0ZXh0IGluIHRoZSBleHRyYWN0ZWQgY29udGVudCAoZGVmYXVsdDogdHJ1ZSknLFxuICAgICAgICBkZWZhdWx0OiB0cnVlXG4gICAgICB9LFxuICAgICAgaW5jbHVkZUltYWdlczoge1xuICAgICAgICB0eXBlOiAnYm9vbGVhbicsXG4gICAgICAgIGRlc2NyaXB0aW9uOiAnV2hldGhlciB0byBpbmNsdWRlIGltYWdlIGFsdCB0ZXh0IGluIHRoZSBleHRyYWN0ZWQgY29udGVudCAoZGVmYXVsdDogdHJ1ZSknLFxuICAgICAgICBkZWZhdWx0OiB0cnVlXG4gICAgICB9LFxuICAgICAgZXhjbHVkZVRhZ3M6IHtcbiAgICAgICAgdHlwZTogJ2FycmF5JyxcbiAgICAgICAgZGVzY3JpcHRpb246ICdIVE1MIHRhZ3MgdG8gZXhjbHVkZSBmcm9tIGV4dHJhY3Rpb24gKGRlZmF1bHQ6IHNjcmlwdCwgc3R5bGUsIGV0Yy4pJyxcbiAgICAgICAgaXRlbXM6IHtcbiAgICAgICAgICB0eXBlOiAnc3RyaW5nJ1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcbiAgICByZXF1aXJlZDogWyd1cmwnXVxuICB9XG59O1xuXG4vKipcbiAqIEZldGNoIFVSTCB0b29sIGhhbmRsZXJcbiAqIEBwYXJhbSB7T2JqZWN0fSBwYXJhbXMgLSBUaGUgdG9vbCBwYXJhbWV0ZXJzXG4gKiBAcmV0dXJucyB7UHJvbWlzZTxPYmplY3Q+fSAtIFRoZSB0b29sIHJlc3VsdFxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZmV0Y2hVcmxUb29sSGFuZGxlcihwYXJhbXMpIHtcbiAgY29uc3Qge1xuICAgIHVybCxcbiAgICBtYXhMZW5ndGggPSAxMDAwMCxcbiAgICBleHRyYWN0TWFpbkNvbnRlbnQgPSB0cnVlLFxuICAgIGluY2x1ZGVMaW5rcyA9IHRydWUsXG4gICAgaW5jbHVkZUltYWdlcyA9IHRydWUsXG4gICAgZXhjbHVkZVRhZ3MgPSBbJ3NjcmlwdCcsICdzdHlsZScsICdub3NjcmlwdCcsICdpZnJhbWUnLCAnc3ZnJywgJ25hdicsICdmb290ZXInLCAnaGVhZGVyJywgJ2FzaWRlJ11cbiAgfSA9IHBhcmFtcztcblxuICBjb25zb2xlLmxvZyhgRmV0Y2hpbmcgY29udGVudCBmcm9tIFVSTDogJHt1cmx9IChtYXhMZW5ndGg6ICR7bWF4TGVuZ3RofSlgKTtcblxuICB0cnkge1xuICAgIC8vIEZldGNoIGNvbnRlbnQgd2l0aCBzcGVjaWZpZWQgb3B0aW9uc1xuICAgIGNvbnN0IGNvbnRlbnQgPSBhd2FpdCBmZXRjaFVybENvbnRlbnQodXJsLCB7XG4gICAgICBleHRyYWN0TWFpbkNvbnRlbnQsXG4gICAgICBpbmNsdWRlTGlua3MsXG4gICAgICBpbmNsdWRlSW1hZ2VzLFxuICAgICAgZXhjbHVkZVRhZ3NcbiAgICB9KTtcblxuICAgIC8vIFRydW5jYXRlIGNvbnRlbnQgaWYgaXQncyB0b28gbG9uZ1xuICAgIGNvbnN0IHRydW5jYXRlZENvbnRlbnQgPSBjb250ZW50Lmxlbmd0aCA+IG1heExlbmd0aFxuICAgICAgPyBjb250ZW50LnN1YnN0cmluZygwLCBtYXhMZW5ndGgpICsgJy4uLiBbQ29udGVudCB0cnVuY2F0ZWQgZHVlIHRvIGxlbmd0aF0nXG4gICAgICA6IGNvbnRlbnQ7XG5cbiAgICAvLyBBZGQgbWV0YWRhdGEgYWJvdXQgdGhlIGV4dHJhY3Rpb25cbiAgICBjb25zdCBtZXRhZGF0YSA9IGBcbi0tLVxuRXh0cmFjdGlvbiBzZXR0aW5nczpcbi0gVVJMOiAke3VybH1cbi0gTWFpbiBjb250ZW50IGV4dHJhY3Rpb246ICR7ZXh0cmFjdE1haW5Db250ZW50ID8gJ0VuYWJsZWQnIDogJ0Rpc2FibGVkJ31cbi0gTGlua3MgaW5jbHVkZWQ6ICR7aW5jbHVkZUxpbmtzID8gJ1llcycgOiAnTm8nfVxuLSBJbWFnZXMgaW5jbHVkZWQ6ICR7aW5jbHVkZUltYWdlcyA/ICdZZXMgKGFzIGFsdCB0ZXh0KScgOiAnTm8nfVxuLSBDb250ZW50IGxlbmd0aDogJHtjb250ZW50Lmxlbmd0aH0gY2hhcmFjdGVycyR7Y29udGVudC5sZW5ndGggPiBtYXhMZW5ndGggPyBgICh0cnVuY2F0ZWQgdG8gJHttYXhMZW5ndGh9KWAgOiAnJ31cbi0tLVxuYDtcblxuICAgIHJldHVybiB7XG4gICAgICBjb250ZW50OiBbXG4gICAgICAgIHtcbiAgICAgICAgICB0eXBlOiAndGV4dCcsXG4gICAgICAgICAgdGV4dDogdHJ1bmNhdGVkQ29udGVudCArIG1ldGFkYXRhXG4gICAgICAgIH1cbiAgICAgIF1cbiAgICB9O1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGNvbnNvbGUuZXJyb3IoYEVycm9yIGZldGNoaW5nIFVSTCAke3VybH06YCwgZXJyb3IpO1xuICAgIHJldHVybiB7XG4gICAgICBpc0Vycm9yOiB0cnVlLFxuICAgICAgY29udGVudDogW1xuICAgICAgICB7XG4gICAgICAgICAgdHlwZTogJ3RleHQnLFxuICAgICAgICAgIHRleHQ6IGBFcnJvciBmZXRjaGluZyBVUkw6ICR7ZXJyb3IubWVzc2FnZX1gXG4gICAgICAgIH1cbiAgICAgIF1cbiAgICB9O1xuICB9XG59XG4iLCAiaW1wb3J0IHsgZXh0cmFjdFVybE1ldGFkYXRhIH0gZnJvbSAnLi4vdXRpbHMvc2VhcmNoLmpzJztcblxuLyoqXG4gKiBVUkwgbWV0YWRhdGEgdG9vbCBkZWZpbml0aW9uXG4gKi9cbmV4cG9ydCBjb25zdCBtZXRhZGF0YVRvb2xEZWZpbml0aW9uID0ge1xuICBuYW1lOiAndXJsLW1ldGFkYXRhJyxcbiAgdGl0bGU6ICdVUkwgTWV0YWRhdGEgRXh0cmFjdG9yJyxcbiAgZGVzY3JpcHRpb246ICdFeHRyYWN0IG1ldGFkYXRhIGZyb20gYSBVUkwgaW5jbHVkaW5nIHRpdGxlLCBkZXNjcmlwdGlvbiwgT3BlbiBHcmFwaCBkYXRhLCBhbmQgZmF2aWNvbiBpbmZvcm1hdGlvbicsXG4gIGlucHV0U2NoZW1hOiB7XG4gICAgdHlwZTogJ29iamVjdCcsXG4gICAgcHJvcGVydGllczoge1xuICAgICAgdXJsOiB7XG4gICAgICAgIHR5cGU6ICdzdHJpbmcnLFxuICAgICAgICBkZXNjcmlwdGlvbjogJ1RoZSBVUkwgdG8gZXh0cmFjdCBtZXRhZGF0YSBmcm9tIChtdXN0IGJlIGEgdmFsaWQgSFRUUC9IVFRQUyBVUkwpJ1xuICAgICAgfVxuICAgIH0sXG4gICAgcmVxdWlyZWQ6IFsndXJsJ11cbiAgfVxufTtcblxuLyoqXG4gKiBVUkwgbWV0YWRhdGEgdG9vbCBoYW5kbGVyXG4gKiBAcGFyYW0ge09iamVjdH0gcGFyYW1zIC0gVGhlIHRvb2wgcGFyYW1ldGVyc1xuICogQHJldHVybnMge1Byb21pc2U8T2JqZWN0Pn0gLSBUaGUgdG9vbCByZXN1bHRcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIG1ldGFkYXRhVG9vbEhhbmRsZXIocGFyYW1zKSB7XG4gIGNvbnN0IHsgdXJsIH0gPSBwYXJhbXM7XG4gIGNvbnNvbGUubG9nKGBFeHRyYWN0aW5nIG1ldGFkYXRhIGZyb20gVVJMOiAke3VybH1gKTtcbiAgXG4gIGNvbnN0IG1ldGFkYXRhID0gYXdhaXQgZXh0cmFjdFVybE1ldGFkYXRhKHVybCk7XG4gIFxuICAvLyBGb3JtYXQgdGhlIG1ldGFkYXRhIGZvciBkaXNwbGF5XG4gIGNvbnN0IGZvcm1hdHRlZE1ldGFkYXRhID0gYFxuIyMgVVJMIE1ldGFkYXRhIGZvciAke3VybH1cblxuKipUaXRsZToqKiAke21ldGFkYXRhLnRpdGxlfVxuXG4qKkRlc2NyaXB0aW9uOioqICR7bWV0YWRhdGEuZGVzY3JpcHRpb259XG5cbioqSW1hZ2U6KiogJHttZXRhZGF0YS5vZ0ltYWdlIHx8ICdOb25lJ31cblxuKipGYXZpY29uOioqICR7bWV0YWRhdGEuZmF2aWNvbiB8fCAnTm9uZSd9XG4gIGAudHJpbSgpO1xuICBcbiAgcmV0dXJuIHtcbiAgICBjb250ZW50OiBbXG4gICAgICB7XG4gICAgICAgIHR5cGU6ICd0ZXh0JyxcbiAgICAgICAgdGV4dDogZm9ybWF0dGVkTWV0YWRhdGFcbiAgICAgIH1cbiAgICBdXG4gIH07XG59XG4iLCAiaW1wb3J0IGNyeXB0byBmcm9tICdjcnlwdG8nO1xuY29uc3Qgcm5kczhQb29sID0gbmV3IFVpbnQ4QXJyYXkoMjU2KTsgLy8gIyBvZiByYW5kb20gdmFsdWVzIHRvIHByZS1hbGxvY2F0ZVxuXG5sZXQgcG9vbFB0ciA9IHJuZHM4UG9vbC5sZW5ndGg7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBybmcoKSB7XG4gIGlmIChwb29sUHRyID4gcm5kczhQb29sLmxlbmd0aCAtIDE2KSB7XG4gICAgY3J5cHRvLnJhbmRvbUZpbGxTeW5jKHJuZHM4UG9vbCk7XG4gICAgcG9vbFB0ciA9IDA7XG4gIH1cblxuICByZXR1cm4gcm5kczhQb29sLnNsaWNlKHBvb2xQdHIsIHBvb2xQdHIgKz0gMTYpO1xufSIsICJpbXBvcnQgdmFsaWRhdGUgZnJvbSAnLi92YWxpZGF0ZS5qcyc7XG4vKipcbiAqIENvbnZlcnQgYXJyYXkgb2YgMTYgYnl0ZSB2YWx1ZXMgdG8gVVVJRCBzdHJpbmcgZm9ybWF0IG9mIHRoZSBmb3JtOlxuICogWFhYWFhYWFgtWFhYWC1YWFhYLVhYWFgtWFhYWFhYWFhYWFhYXG4gKi9cblxuY29uc3QgYnl0ZVRvSGV4ID0gW107XG5cbmZvciAobGV0IGkgPSAwOyBpIDwgMjU2OyArK2kpIHtcbiAgYnl0ZVRvSGV4LnB1c2goKGkgKyAweDEwMCkudG9TdHJpbmcoMTYpLnNsaWNlKDEpKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHVuc2FmZVN0cmluZ2lmeShhcnIsIG9mZnNldCA9IDApIHtcbiAgLy8gTm90ZTogQmUgY2FyZWZ1bCBlZGl0aW5nIHRoaXMgY29kZSEgIEl0J3MgYmVlbiB0dW5lZCBmb3IgcGVyZm9ybWFuY2VcbiAgLy8gYW5kIHdvcmtzIGluIHdheXMgeW91IG1heSBub3QgZXhwZWN0LiBTZWUgaHR0cHM6Ly9naXRodWIuY29tL3V1aWRqcy91dWlkL3B1bGwvNDM0XG4gIHJldHVybiBieXRlVG9IZXhbYXJyW29mZnNldCArIDBdXSArIGJ5dGVUb0hleFthcnJbb2Zmc2V0ICsgMV1dICsgYnl0ZVRvSGV4W2FycltvZmZzZXQgKyAyXV0gKyBieXRlVG9IZXhbYXJyW29mZnNldCArIDNdXSArICctJyArIGJ5dGVUb0hleFthcnJbb2Zmc2V0ICsgNF1dICsgYnl0ZVRvSGV4W2FycltvZmZzZXQgKyA1XV0gKyAnLScgKyBieXRlVG9IZXhbYXJyW29mZnNldCArIDZdXSArIGJ5dGVUb0hleFthcnJbb2Zmc2V0ICsgN11dICsgJy0nICsgYnl0ZVRvSGV4W2FycltvZmZzZXQgKyA4XV0gKyBieXRlVG9IZXhbYXJyW29mZnNldCArIDldXSArICctJyArIGJ5dGVUb0hleFthcnJbb2Zmc2V0ICsgMTBdXSArIGJ5dGVUb0hleFthcnJbb2Zmc2V0ICsgMTFdXSArIGJ5dGVUb0hleFthcnJbb2Zmc2V0ICsgMTJdXSArIGJ5dGVUb0hleFthcnJbb2Zmc2V0ICsgMTNdXSArIGJ5dGVUb0hleFthcnJbb2Zmc2V0ICsgMTRdXSArIGJ5dGVUb0hleFthcnJbb2Zmc2V0ICsgMTVdXTtcbn1cblxuZnVuY3Rpb24gc3RyaW5naWZ5KGFyciwgb2Zmc2V0ID0gMCkge1xuICBjb25zdCB1dWlkID0gdW5zYWZlU3RyaW5naWZ5KGFyciwgb2Zmc2V0KTsgLy8gQ29uc2lzdGVuY3kgY2hlY2sgZm9yIHZhbGlkIFVVSUQuICBJZiB0aGlzIHRocm93cywgaXQncyBsaWtlbHkgZHVlIHRvIG9uZVxuICAvLyBvZiB0aGUgZm9sbG93aW5nOlxuICAvLyAtIE9uZSBvciBtb3JlIGlucHV0IGFycmF5IHZhbHVlcyBkb24ndCBtYXAgdG8gYSBoZXggb2N0ZXQgKGxlYWRpbmcgdG9cbiAgLy8gXCJ1bmRlZmluZWRcIiBpbiB0aGUgdXVpZClcbiAgLy8gLSBJbnZhbGlkIGlucHV0IHZhbHVlcyBmb3IgdGhlIFJGQyBgdmVyc2lvbmAgb3IgYHZhcmlhbnRgIGZpZWxkc1xuXG4gIGlmICghdmFsaWRhdGUodXVpZCkpIHtcbiAgICB0aHJvdyBUeXBlRXJyb3IoJ1N0cmluZ2lmaWVkIFVVSUQgaXMgaW52YWxpZCcpO1xuICB9XG5cbiAgcmV0dXJuIHV1aWQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IHN0cmluZ2lmeTsiLCAiaW1wb3J0IGNyeXB0byBmcm9tICdjcnlwdG8nO1xuZXhwb3J0IGRlZmF1bHQge1xuICByYW5kb21VVUlEOiBjcnlwdG8ucmFuZG9tVVVJRFxufTsiLCAiaW1wb3J0IG5hdGl2ZSBmcm9tICcuL25hdGl2ZS5qcyc7XG5pbXBvcnQgcm5nIGZyb20gJy4vcm5nLmpzJztcbmltcG9ydCB7IHVuc2FmZVN0cmluZ2lmeSB9IGZyb20gJy4vc3RyaW5naWZ5LmpzJztcblxuZnVuY3Rpb24gdjQob3B0aW9ucywgYnVmLCBvZmZzZXQpIHtcbiAgaWYgKG5hdGl2ZS5yYW5kb21VVUlEICYmICFidWYgJiYgIW9wdGlvbnMpIHtcbiAgICByZXR1cm4gbmF0aXZlLnJhbmRvbVVVSUQoKTtcbiAgfVxuXG4gIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICBjb25zdCBybmRzID0gb3B0aW9ucy5yYW5kb20gfHwgKG9wdGlvbnMucm5nIHx8IHJuZykoKTsgLy8gUGVyIDQuNCwgc2V0IGJpdHMgZm9yIHZlcnNpb24gYW5kIGBjbG9ja19zZXFfaGlfYW5kX3Jlc2VydmVkYFxuXG4gIHJuZHNbNl0gPSBybmRzWzZdICYgMHgwZiB8IDB4NDA7XG4gIHJuZHNbOF0gPSBybmRzWzhdICYgMHgzZiB8IDB4ODA7IC8vIENvcHkgYnl0ZXMgdG8gYnVmZmVyLCBpZiBwcm92aWRlZFxuXG4gIGlmIChidWYpIHtcbiAgICBvZmZzZXQgPSBvZmZzZXQgfHwgMDtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMTY7ICsraSkge1xuICAgICAgYnVmW29mZnNldCArIGldID0gcm5kc1tpXTtcbiAgICB9XG5cbiAgICByZXR1cm4gYnVmO1xuICB9XG5cbiAgcmV0dXJuIHVuc2FmZVN0cmluZ2lmeShybmRzKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgdjQ7IiwgImV4cG9ydCB7IGRlZmF1bHQgYXMgdjEgfSBmcm9tICcuL3YxLmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgdjMgfSBmcm9tICcuL3YzLmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgdjQgfSBmcm9tICcuL3Y0LmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgdjUgfSBmcm9tICcuL3Y1LmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgTklMIH0gZnJvbSAnLi9uaWwuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyB2ZXJzaW9uIH0gZnJvbSAnLi92ZXJzaW9uLmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgdmFsaWRhdGUgfSBmcm9tICcuL3ZhbGlkYXRlLmpzJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgc3RyaW5naWZ5IH0gZnJvbSAnLi9zdHJpbmdpZnkuanMnO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBwYXJzZSB9IGZyb20gJy4vcGFyc2UuanMnOyIsICJpbXBvcnQgYXhpb3MgZnJvbSAnYXhpb3MnO1xuaW1wb3J0IHsgdjQgYXMgdXVpZHY0IH0gZnJvbSAndXVpZCc7XG5pbXBvcnQgaHR0cHMgZnJvbSAnaHR0cHMnO1xuXG4vLyBSb3RhdGluZyBVc2VyIEFnZW50c1xuY29uc3QgVVNFUl9BR0VOVFMgPSBbXG4gICdNb3ppbGxhLzUuMCAoV2luZG93cyBOVCAxMC4wOyBXaW42NDsgeDY0KSBBcHBsZVdlYktpdC81MzcuMzYgKEtIVE1MLCBsaWtlIEdlY2tvKSBDaHJvbWUvMTIwLjAuMC4wIFNhZmFyaS81MzcuMzYnLFxuICAnTW96aWxsYS81LjAgKFdpbmRvd3MgTlQgMTAuMDsgV2luNjQ7IHg2NCkgRWRnZS8xMjAuMC4wLjAnLFxuICAnTW96aWxsYS81LjAgKE1hY2ludG9zaDsgSW50ZWwgTWFjIE9TIFggMTBfMTVfNykgQXBwbGVXZWJLaXQvNjA1LjEuMTUgKEtIVE1MLCBsaWtlIEdlY2tvKSBWZXJzaW9uLzE3LjIuMSBTYWZhcmkvNjA1LjEuMTUnLFxuICAnTW96aWxsYS81LjAgKFdpbmRvd3MgTlQgMTAuMDsgV2luNjQ7IHg2NDsgcnY6MTIyLjApIEdlY2tvLzIwMTAwMTAxIEZpcmVmb3gvMTIyLjAnLFxuICAnTW96aWxsYS81LjAgKFgxMTsgTGludXggeDg2XzY0KSBBcHBsZVdlYktpdC81MzcuMzYgKEtIVE1MLCBsaWtlIEdlY2tvKSBDaHJvbWUvMTIwLjAuMC4wIFNhZmFyaS81MzcuMzYnXG5dO1xuXG4vLyBDYWNoZSByZXN1bHRzIHRvIGF2b2lkIHJlcGVhdGVkIHJlcXVlc3RzXG5jb25zdCByZXN1bHRzQ2FjaGUgPSBuZXcgTWFwKCk7XG5jb25zdCBDQUNIRV9EVVJBVElPTiA9IDUgKiA2MCAqIDEwMDA7IC8vIDUgbWludXRlc1xuXG4vLyBIVFRQUyBhZ2VudCBjb25maWd1cmF0aW9uIHRvIGhhbmRsZSBjZXJ0aWZpY2F0ZSBjaGFpbiBpc3N1ZXNcbmNvbnN0IGh0dHBzQWdlbnQgPSBuZXcgaHR0cHMuQWdlbnQoe1xuICByZWplY3RVbmF1dGhvcml6ZWQ6IHRydWUsIC8vIEtlZXAgc2VjdXJpdHkgZW5hYmxlZFxuICBrZWVwQWxpdmU6IHRydWUsXG4gIHRpbWVvdXQ6IDMwMDAwLFxuICAvLyBQcm92aWRlIGZhbGxiYWNrIGZvciBjZXJ0aWZpY2F0ZSBpc3N1ZXMgd2hpbGUgbWFpbnRhaW5pbmcgc2VjdXJpdHlcbiAgc2VjdXJlUHJvdG9jb2w6ICdUTFN2MV8yX21ldGhvZCdcbn0pO1xuXG4vLyBDcmVhdGUgYSBwZXJzaXN0ZW50IGF4aW9zIGluc3RhbmNlIHRvIG1haW50YWluIHNlc3Npb24gc3RhdGVcbmNvbnN0IGZlbG9TZXNzaW9uID0gYXhpb3MuY3JlYXRlKHtcbiAgdGltZW91dDogMzAwMDAsXG4gIGh0dHBzQWdlbnQ6IGh0dHBzQWdlbnQsXG4gIGhlYWRlcnM6IHtcbiAgICAnYWNjZXB0JzogJyovKicsXG4gICAgJ2FjY2VwdC1lbmNvZGluZyc6ICdnemlwLCBkZWZsYXRlLCBiciwgenN0ZCcsXG4gICAgJ2FjY2VwdC1sYW5ndWFnZSc6ICdlbi1VUyxlbjtxPTAuOSxlbi1JTjtxPTAuOCcsXG4gICAgJ2NvbnRlbnQtdHlwZSc6ICdhcHBsaWNhdGlvbi9qc29uJyxcbiAgICAnZG50JzogJzEnLFxuICAgICdvcmlnaW4nOiAnaHR0cHM6Ly9mZWxvLmFpJyxcbiAgICAncmVmZXJlcic6ICdodHRwczovL2ZlbG8uYWkvJyxcbiAgICAnc2VjLWNoLXVhJzogJ1wiTm90KUE7QnJhbmRcIjt2PVwiOTlcIiwgXCJNaWNyb3NvZnQgRWRnZVwiO3Y9XCIxMjdcIiwgXCJDaHJvbWl1bVwiO3Y9XCIxMjdcIicsXG4gICAgJ3NlYy1jaC11YS1tb2JpbGUnOiAnPzAnLFxuICAgICdzZWMtY2gtdWEtcGxhdGZvcm0nOiAnXCJXaW5kb3dzXCInLFxuICAgICdzZWMtZmV0Y2gtZGVzdCc6ICdlbXB0eScsXG4gICAgJ3NlYy1mZXRjaC1tb2RlJzogJ2NvcnMnLFxuICAgICdzZWMtZmV0Y2gtc2l0ZSc6ICdzYW1lLXNpdGUnLFxuICAgICd1c2VyLWFnZW50JzogZ2V0UmFuZG9tVXNlckFnZW50KClcbiAgfVxufSk7XG5cbi8qKlxuICogUmVzcG9uc2UgY2xhc3MgZm9yIEZlbG8gQVBJIHJlc3BvbnNlc1xuICovXG5jbGFzcyBSZXNwb25zZSB7XG4gIC8qKlxuICAgKiBDcmVhdGUgYSBuZXcgUmVzcG9uc2VcbiAgICogQHBhcmFtIHtzdHJpbmd9IHRleHQgLSBUaGUgdGV4dCBjb250ZW50IG9mIHRoZSByZXNwb25zZVxuICAgKi9cbiAgY29uc3RydWN0b3IodGV4dCkge1xuICAgIHRoaXMudGV4dCA9IHRleHQ7XG4gIH1cblxuICAvKipcbiAgICogU3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSByZXNwb25zZVxuICAgKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgdGV4dCBjb250ZW50XG4gICAqL1xuICB0b1N0cmluZygpIHtcbiAgICByZXR1cm4gdGhpcy50ZXh0O1xuICB9XG59XG5cbi8qKlxuICogR2V0IGEgcmFuZG9tIHVzZXIgYWdlbnQgZnJvbSB0aGUgbGlzdFxuICogQHJldHVybnMge3N0cmluZ30gQSByYW5kb20gdXNlciBhZ2VudCBzdHJpbmdcbiAqL1xuZnVuY3Rpb24gZ2V0UmFuZG9tVXNlckFnZW50KCkge1xuICByZXR1cm4gVVNFUl9BR0VOVFNbTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogVVNFUl9BR0VOVFMubGVuZ3RoKV07XG59XG5cbi8qKlxuICogR2VuZXJhdGUgYSBjYWNoZSBrZXkgZm9yIGEgc2VhcmNoIHF1ZXJ5XG4gKiBAcGFyYW0ge3N0cmluZ30gcXVlcnkgLSBUaGUgc2VhcmNoIHF1ZXJ5XG4gKiBAcmV0dXJucyB7c3RyaW5nfSBUaGUgY2FjaGUga2V5XG4gKi9cbmZ1bmN0aW9uIGdldENhY2hlS2V5KHF1ZXJ5KSB7XG4gIHJldHVybiBgZmVsby0ke3F1ZXJ5fWA7XG59XG5cbi8qKlxuICogQ2xlYXIgb2xkIGVudHJpZXMgZnJvbSB0aGUgY2FjaGVcbiAqL1xuZnVuY3Rpb24gY2xlYXJPbGRDYWNoZSgpIHtcbiAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgcmVzdWx0c0NhY2hlLmVudHJpZXMoKSkge1xuICAgIGlmIChub3cgLSB2YWx1ZS50aW1lc3RhbXAgPiBDQUNIRV9EVVJBVElPTikge1xuICAgICAgcmVzdWx0c0NhY2hlLmRlbGV0ZShrZXkpO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIFNlYXJjaCB1c2luZyB0aGUgRmVsbyBBSSBBUElcbiAqIEBwYXJhbSB7c3RyaW5nfSBwcm9tcHQgLSBUaGUgc2VhcmNoIHF1ZXJ5IG9yIHByb21wdFxuICogQHBhcmFtIHtib29sZWFufSBzdHJlYW0gLSBJZiB0cnVlLCB5aWVsZHMgcmVzcG9uc2UgY2h1bmtzIGFzIHRoZXkgYXJyaXZlXG4gKiBAcGFyYW0ge2Jvb2xlYW59IHJhdyAtIElmIHRydWUsIHJldHVybnMgcmF3IHJlc3BvbnNlIGRpY3Rpb25hcmllc1xuICogQHJldHVybnMge1Byb21pc2U8c3RyaW5nfEFzeW5jR2VuZXJhdG9yPHN0cmluZz4+fSBUaGUgc2VhcmNoIHJlc3VsdHNcbiAqL1xuYXN5bmMgZnVuY3Rpb24gc2VhcmNoRmVsbyhwcm9tcHQsIHN0cmVhbSA9IGZhbHNlLCByYXcgPSBmYWxzZSkge1xuICAvLyBDbGVhciBvbGQgY2FjaGUgZW50cmllc1xuICBjbGVhck9sZENhY2hlKCk7XG5cbiAgLy8gQ2hlY2sgY2FjaGUgZmlyc3QgaWYgbm90IHN0cmVhbWluZ1xuICBpZiAoIXN0cmVhbSkge1xuICAgIGNvbnN0IGNhY2hlS2V5ID0gZ2V0Q2FjaGVLZXkocHJvbXB0KTtcbiAgICBjb25zdCBjYWNoZWRSZXN1bHRzID0gcmVzdWx0c0NhY2hlLmdldChjYWNoZUtleSk7XG5cbiAgICBpZiAoY2FjaGVkUmVzdWx0cyAmJiBEYXRlLm5vdygpIC0gY2FjaGVkUmVzdWx0cy50aW1lc3RhbXAgPCBDQUNIRV9EVVJBVElPTikge1xuICAgICAgcmV0dXJuIGNhY2hlZFJlc3VsdHMucmVzdWx0cztcbiAgICB9XG4gIH1cblxuICAvLyBDcmVhdGUgcGF5bG9hZCBmb3IgRmVsbyBBUEkgd2l0aCBwcm9wZXIgc3RydWN0dXJlIGZyb20gcmVmZXJlbmNlXG4gIGNvbnN0IHBheWxvYWQgPSB7XG4gICAgcXVlcnk6IHByb21wdCxcbiAgICBzZWFyY2hfdXVpZDogdXVpZHY0KCkucmVwbGFjZSgvLS9nLCAnJyksIC8vIFJlbW92ZSBkYXNoZXMgbGlrZSBpbiByZWZlcmVuY2VcbiAgICBsYW5nOiBcIlwiLFxuICAgIGFnZW50X2xhbmc6IFwiZW5cIixcbiAgICBzZWFyY2hfb3B0aW9uczoge1xuICAgICAgbGFuZ2NvZGU6IFwiZW4tVVNcIixcbiAgICAgIHNlYXJjaF9pbWFnZTogdHJ1ZSxcbiAgICAgIHNlYXJjaF92aWRlbzogdHJ1ZVxuICAgIH0sXG4gICAgc2VhcmNoX3ZpZGVvOiB0cnVlLFxuICAgIG1vZGVsOiBcIlwiLFxuICAgIGNvbnRleHRzX2Zyb206IFwiZ29vZ2xlXCIsXG4gICAgYXV0b19yb3V0aW5nOiB0cnVlXG4gIH07XG5cbiAgLy8gVXBkYXRlIHVzZXIgYWdlbnQgZm9yIHRoaXMgcmVxdWVzdFxuICBmZWxvU2Vzc2lvbi5kZWZhdWx0cy5oZWFkZXJzWyd1c2VyLWFnZW50J10gPSBnZXRSYW5kb21Vc2VyQWdlbnQoKTtcblxuICAvLyBEZWZpbmUgdGhlIHN0cmVhbWluZyBmdW5jdGlvblxuICBhc3luYyBmdW5jdGlvbiogc3RyZWFtRnVuY3Rpb24oKSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmVsb1Nlc3Npb24ucG9zdCgnaHR0cHM6Ly9hcGkuZmVsby5haS9zZWFyY2gvdGhyZWFkcycsIHBheWxvYWQsIHtcbiAgICAgICAgcmVzcG9uc2VUeXBlOiAnc3RyZWFtJ1xuICAgICAgfSk7XG5cbiAgICAgIC8vIENoZWNrIGZvciBIVFRQIGVycm9yc1xuICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyAhPT0gMjAwKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgRmFpbGVkIHRvIGdlbmVyYXRlIHJlc3BvbnNlIC0gKCR7cmVzcG9uc2Uuc3RhdHVzfSwgJHtyZXNwb25zZS5zdGF0dXNUZXh0fSkgLSAke3Jlc3BvbnNlLmRhdGF9YCk7XG4gICAgICB9XG5cbiAgICAgIGxldCBzdHJlYW1pbmdUZXh0ID0gJyc7XG4gICAgICBsZXQgYnVmZmVyID0gJyc7XG5cbiAgICAgIC8vIFByb2Nlc3MgdGhlIHN0cmVhbSBhcyBpdCBjb21lcyBpblxuICAgICAgZm9yIGF3YWl0IChjb25zdCBjaHVuayBvZiByZXNwb25zZS5kYXRhKSB7XG4gICAgICAgIGJ1ZmZlciArPSBjaHVuay50b1N0cmluZygpO1xuICAgICAgICBcbiAgICAgICAgY29uc3QgbGluZXMgPSBidWZmZXIuc3BsaXQoJ1xcbicpO1xuICAgICAgICBidWZmZXIgPSBsaW5lcy5wb3AoKSB8fCAnJzsgLy8gS2VlcCB0aGUgbGFzdCAocG90ZW50aWFsbHkgaW5jb21wbGV0ZSkgbGluZSBpbiB0aGUgYnVmZmVyXG4gICAgICAgIFxuICAgICAgICBmb3IgKGNvbnN0IGxpbmUgb2YgbGluZXMpIHtcbiAgICAgICAgICBpZiAobGluZS5zdGFydHNXaXRoKCdkYXRhOicpKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBjb25zdCBkYXRhU3RyID0gbGluZS5zdWJzdHJpbmcoNSkudHJpbSgpO1xuICAgICAgICAgICAgICBpZiAoZGF0YVN0cikge1xuICAgICAgICAgICAgICAgIGNvbnN0IGRhdGEgPSBKU09OLnBhcnNlKGRhdGFTdHIpO1xuICAgICAgICAgICAgICAgIGlmIChkYXRhLnR5cGUgPT09ICdhbnN3ZXInICYmICd0ZXh0JyBpbiBkYXRhLmRhdGEpIHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IG5ld1RleHQgPSBkYXRhLmRhdGEudGV4dDtcbiAgICAgICAgICAgICAgICAgIGlmIChuZXdUZXh0Lmxlbmd0aCA+IHN0cmVhbWluZ1RleHQubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGRlbHRhID0gbmV3VGV4dC5zdWJzdHJpbmcoc3RyZWFtaW5nVGV4dC5sZW5ndGgpO1xuICAgICAgICAgICAgICAgICAgICBzdHJlYW1pbmdUZXh0ID0gbmV3VGV4dDtcbiAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAgIGlmIChyYXcpIHtcbiAgICAgICAgICAgICAgICAgICAgICB5aWVsZCB7IHRleHQ6IGRlbHRhIH07XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgeWllbGQgbmV3IFJlc3BvbnNlKGRlbHRhKS50b1N0cmluZygpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICAvLyBJZ25vcmUgSlNPTiBwYXJzZSBlcnJvcnMgYW5kIGNvbnRpbnVlXG4gICAgICAgICAgICAgIGNvbnNvbGUuZGVidWcoJ0pTT04gcGFyc2UgZXJyb3I6JywgZXJyb3IubWVzc2FnZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICBcbiAgICAgIC8vIENhY2hlIHRoZSBjb21wbGV0ZSByZXNwb25zZVxuICAgICAgaWYgKHN0cmVhbWluZ1RleHQpIHtcbiAgICAgICAgcmVzdWx0c0NhY2hlLnNldChnZXRDYWNoZUtleShwcm9tcHQpLCB7XG4gICAgICAgICAgcmVzdWx0czogc3RyZWFtaW5nVGV4dCxcbiAgICAgICAgICB0aW1lc3RhbXA6IERhdGUubm93KClcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcignRXJyb3Igc2VhcmNoaW5nIEZlbG86JywgZXJyb3IubWVzc2FnZSk7XG4gICAgICBcbiAgICAgIC8vIEhhbmRsZSBzcGVjaWZpYyBBUEkgZXJyb3JzXG4gICAgICBpZiAoZXJyb3IucmVzcG9uc2UpIHtcbiAgICAgICAgY29uc3Qgc3RhdHVzID0gZXJyb3IucmVzcG9uc2Uuc3RhdHVzO1xuICAgICAgICBjb25zdCBzdGF0dXNUZXh0ID0gZXJyb3IucmVzcG9uc2Uuc3RhdHVzVGV4dDtcbiAgICAgICAgY29uc3QgZGF0YSA9IGVycm9yLnJlc3BvbnNlLmRhdGE7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgRmVsbyBBUEkgZXJyb3I6ICR7c3RhdHVzfSAke3N0YXR1c1RleHR9IC0gJHtkYXRhfWApO1xuICAgICAgfVxuICAgICAgXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYEZhaWxlZCB0byBzZWFyY2ggRmVsbzogJHtlcnJvci5tZXNzYWdlfWApO1xuICAgIH1cbiAgfVxuXG4gIC8vIElmIHN0cmVhbWluZyBpcyByZXF1ZXN0ZWQsIHJldHVybiB0aGUgZ2VuZXJhdG9yXG4gIGlmIChzdHJlYW0pIHtcbiAgICByZXR1cm4gc3RyZWFtRnVuY3Rpb24oKTtcbiAgfVxuICBcbiAgLy8gRm9yIG5vbi1zdHJlYW1pbmcsIGNvbGxlY3QgYWxsIGNodW5rcyBhbmQgcmV0dXJuIGFzIGEgc2luZ2xlIHN0cmluZ1xuICBsZXQgZnVsbFJlc3BvbnNlID0gJyc7XG4gIFxuICB0cnkge1xuICAgIGZvciBhd2FpdCAoY29uc3QgY2h1bmsgb2Ygc3RyZWFtRnVuY3Rpb24oKSkge1xuICAgICAgaWYgKHJhdykge1xuICAgICAgICBmdWxsUmVzcG9uc2UgKz0gY2h1bmsudGV4dDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZ1bGxSZXNwb25zZSArPSBjaHVuaztcbiAgICAgIH1cbiAgICB9XG4gICAgXG4gICAgcmV0dXJuIGZ1bGxSZXNwb25zZTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBjb25zb2xlLmVycm9yKCdFcnJvciBpbiBub24tc3RyZWFtaW5nIEZlbG8gc2VhcmNoOicsIGVycm9yLm1lc3NhZ2UpO1xuICAgIHRocm93IGVycm9yO1xuICB9XG59XG5cbmV4cG9ydCB7IHNlYXJjaEZlbG8gfTtcbiIsICJpbXBvcnQgeyBzZWFyY2hGZWxvIH0gZnJvbSAnLi4vdXRpbHMvc2VhcmNoX2ZlbG8uanMnO1xuXG4vKipcbiAqIEZlbG8gQUkgc2VhcmNoIHRvb2wgZGVmaW5pdGlvblxuICovXG5leHBvcnQgY29uc3QgZmVsb1Rvb2xEZWZpbml0aW9uID0ge1xuICBuYW1lOiAnZmVsby1zZWFyY2gnLFxuICB0aXRsZTogJ0ZlbG8gQUkgQWR2YW5jZWQgU2VhcmNoJyxcbiAgZGVzY3JpcHRpb246ICdBZHZhbmNlZCBBSS1wb3dlcmVkIHdlYiBzZWFyY2ggZm9yIHRlY2huaWNhbCBpbnRlbGxpZ2VuY2UuIFJldHJpZXZlcyB1cC10by1kYXRlIGluZm9ybWF0aW9uIGluY2x1ZGluZyBzb2Z0d2FyZSByZWxlYXNlcywgc2VjdXJpdHkgYWR2aXNvcmllcywgbWlncmF0aW9uIGd1aWRlcywgYmVuY2htYXJrcywgZGV2ZWxvcGVyIGRvY3VtZW50YXRpb24sIGFuZCBjb21tdW5pdHkgaW5zaWdodHMuIFN1cHBvcnRzIGJvdGggc3RhbmRhcmQgYW5kIHN0cmVhbWluZyByZXNwb25zZXMuJyxcbiAgaW5wdXRTY2hlbWE6IHtcbiAgICB0eXBlOiAnb2JqZWN0JyxcbiAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICBxdWVyeToge1xuICAgICAgICB0eXBlOiAnc3RyaW5nJyxcbiAgICAgICAgZGVzY3JpcHRpb246ICdBIGRldGFpbGVkIHNlYXJjaCBxdWVyeSBvciBwcm9tcHQgZGVzY3JpYmluZyB0aGUgdGVjaG5pY2FsIGluZm9ybWF0aW9uIG5lZWRlZC4gU3VwcG9ydHMgbmF0dXJhbCBsYW5ndWFnZSBhbmQga2V5d29yZC1iYXNlZCBxdWVyaWVzIGZvciBwcmVjaXNlIHJlc3VsdHMuJ1xuICAgICAgfSxcbiAgICAgIHN0cmVhbToge1xuICAgICAgICB0eXBlOiAnYm9vbGVhbicsXG4gICAgICAgIGRlc2NyaXB0aW9uOiAnRW5hYmxlIHN0cmVhbWluZyBtb2RlIHRvIHJlY2VpdmUgaW5jcmVtZW50YWwsIHJlYWwtdGltZSBzZWFyY2ggcmVzdWx0cyBhcyB0aGV5IGFyZSBkaXNjb3ZlcmVkLiBVc2VmdWwgZm9yIG1vbml0b3JpbmcgbGl2ZSB1cGRhdGVzIG9yIGxhcmdlIHJlc3VsdCBzZXRzLiBEZWZhdWx0IGlzIGZhbHNlIChyZXR1cm5zIGZ1bGwgcmVzdWx0IGF0IG9uY2UpLicsXG4gICAgICAgIGRlZmF1bHQ6IGZhbHNlXG4gICAgICB9XG4gICAgfSxcbiAgICByZXF1aXJlZDogWydxdWVyeSddXG4gIH0sXG4gIGFubm90YXRpb25zOiB7XG4gICAgcmVhZE9ubHlIaW50OiB0cnVlLFxuICAgIG9wZW5Xb3JsZEhpbnQ6IGZhbHNlXG4gIH1cbn07XG5cbi8qKlxuICogRmVsbyBBSSBzZWFyY2ggdG9vbCBoYW5kbGVyXG4gKiBAcGFyYW0ge09iamVjdH0gcGFyYW1zIC0gVGhlIHRvb2wgcGFyYW1ldGVyc1xuICogQHJldHVybnMge1Byb21pc2U8T2JqZWN0Pn0gLSBUaGUgdG9vbCByZXN1bHRcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGZlbG9Ub29sSGFuZGxlcihwYXJhbXMpIHtcbiAgY29uc3QgeyBxdWVyeSwgc3RyZWFtID0gZmFsc2UgfSA9IHBhcmFtcztcbiAgY29uc29sZS5sb2coYFNlYXJjaGluZyBGZWxvIEFJIGZvcjogXCIke3F1ZXJ5fVwiIChzdHJlYW06ICR7c3RyZWFtfSlgKTtcbiAgXG4gIHRyeSB7XG4gICAgaWYgKHN0cmVhbSkge1xuICAgICAgLy8gRm9yIHN0cmVhbWluZyByZXNwb25zZXMsIHdlIG5lZWQgdG8gY29sbGVjdCB0aGVtIGFuZCB0aGVuIHJldHVyblxuICAgICAgbGV0IGZ1bGxSZXNwb25zZSA9ICcnO1xuICAgICAgY29uc3QgY2h1bmtzID0gW107XG4gICAgICBcbiAgICAgIGZvciBhd2FpdCAoY29uc3QgY2h1bmsgb2YgYXdhaXQgc2VhcmNoRmVsbyhxdWVyeSwgdHJ1ZSkpIHtcbiAgICAgICAgY2h1bmtzLnB1c2goY2h1bmspO1xuICAgICAgICBmdWxsUmVzcG9uc2UgKz0gY2h1bms7XG4gICAgICB9XG4gICAgICBcbiAgICAgIC8vIEZvcm1hdCB0aGUgcmVzcG9uc2VcbiAgICAgIHJldHVybiB7XG4gICAgICAgIGNvbnRlbnQ6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICB0eXBlOiAndGV4dCcsXG4gICAgICAgICAgICB0ZXh0OiBmdWxsUmVzcG9uc2UgfHwgJ05vIHJlc3VsdHMgZm91bmQuJ1xuICAgICAgICAgIH1cbiAgICAgICAgXVxuICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gRm9yIG5vbi1zdHJlYW1pbmcgcmVzcG9uc2VzXG4gICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHNlYXJjaEZlbG8ocXVlcnksIGZhbHNlKTtcbiAgICAgIFxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY29udGVudDogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIHR5cGU6ICd0ZXh0JyxcbiAgICAgICAgICAgIHRleHQ6IHJlc3BvbnNlIHx8ICdObyByZXN1bHRzIGZvdW5kLidcbiAgICAgICAgICB9XG4gICAgICAgIF1cbiAgICAgIH07XG4gICAgfVxuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGNvbnNvbGUuZXJyb3IoYEVycm9yIGluIEZlbG8gc2VhcmNoOiAke2Vycm9yLm1lc3NhZ2V9YCk7XG4gICAgcmV0dXJuIHtcbiAgICAgIGlzRXJyb3I6IHRydWUsXG4gICAgICBjb250ZW50OiBbXG4gICAgICAgIHtcbiAgICAgICAgICB0eXBlOiAndGV4dCcsXG4gICAgICAgICAgdGV4dDogYEVycm9yIHNlYXJjaGluZyBGZWxvOiAke2Vycm9yLm1lc3NhZ2V9YFxuICAgICAgICB9XG4gICAgICBdXG4gICAgfTtcbiAgfVxufVxuIiwgImltcG9ydCB7IFNlcnZlciB9IGZyb20gJ0Btb2RlbGNvbnRleHRwcm90b2NvbC9zZGsvc2VydmVyL2luZGV4LmpzJztcbmltcG9ydCB7IENhbGxUb29sUmVxdWVzdFNjaGVtYSwgTGlzdFRvb2xzUmVxdWVzdFNjaGVtYSB9IGZyb20gJ0Btb2RlbGNvbnRleHRwcm90b2NvbC9zZGsvdHlwZXMuanMnO1xuXG4vLyBJbXBvcnQgdG9vbCBkZWZpbml0aW9ucyBhbmQgaGFuZGxlcnNcbmltcG9ydCB7IHNlYXJjaFRvb2xEZWZpbml0aW9uLCBzZWFyY2hUb29sSGFuZGxlciB9IGZyb20gJy4vdG9vbHMvc2VhcmNoVG9vbC5qcyc7XG5pbXBvcnQgeyBmZXRjaFVybFRvb2xEZWZpbml0aW9uLCBmZXRjaFVybFRvb2xIYW5kbGVyIH0gZnJvbSAnLi90b29scy9mZXRjaFVybFRvb2wuanMnO1xuaW1wb3J0IHsgbWV0YWRhdGFUb29sRGVmaW5pdGlvbiwgbWV0YWRhdGFUb29sSGFuZGxlciB9IGZyb20gJy4vdG9vbHMvbWV0YWRhdGFUb29sLmpzJztcbmltcG9ydCB7IGZlbG9Ub29sRGVmaW5pdGlvbiwgZmVsb1Rvb2xIYW5kbGVyIH0gZnJvbSAnLi90b29scy9mZWxvVG9vbC5qcyc7XG5cbi8vIFJlcXVpcmVkOiBFeHBvcnQgZGVmYXVsdCBjcmVhdGVTZXJ2ZXIgZnVuY3Rpb24gZm9yIFNtaXRoZXJ5XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBjcmVhdGVTZXJ2ZXIoeyBjb25maWcgfTogeyBjb25maWc/OiBhbnkgfSA9IHt9KSB7XG4gIGNvbnNvbGUubG9nKCdDcmVhdGluZyBNQ1Agc2VydmVyIHdpdGggbGF0ZXN0IFNESy4uLicpO1xuICBcbiAgLy8gR2xvYmFsIHZhcmlhYmxlIHRvIHRyYWNrIGF2YWlsYWJsZSB0b29sc1xuICBjb25zdCBhdmFpbGFibGVUb29scyA9IFtcbiAgICBzZWFyY2hUb29sRGVmaW5pdGlvbixcbiAgICBmZXRjaFVybFRvb2xEZWZpbml0aW9uLFxuICAgIG1ldGFkYXRhVG9vbERlZmluaXRpb24sXG4gICAgZmVsb1Rvb2xEZWZpbml0aW9uXG4gIF07XG4gIFxuICBjb25zb2xlLmxvZygnQXZhaWxhYmxlIHRvb2xzOicsIGF2YWlsYWJsZVRvb2xzLm1hcCh0ID0+IHQubmFtZSkpO1xuXG4gIC8vIENyZWF0ZSB0aGUgTUNQIHNlcnZlciB1c2luZyB0aGUgU2VydmVyIGNsYXNzXG4gIGNvbnN0IHNlcnZlciA9IG5ldyBTZXJ2ZXIoe1xuICAgIG5hbWU6ICdkZGctc2VhcmNoLW1jcCcsXG4gICAgdmVyc2lvbjogJzEuMS4yJ1xuICB9LCB7XG4gICAgY2FwYWJpbGl0aWVzOiB7XG4gICAgICB0b29sczoge1xuICAgICAgICBsaXN0Q2hhbmdlZDogdHJ1ZVxuICAgICAgfVxuICAgIH1cbiAgfSk7XG5cbiAgLy8gRGVmaW5lIGF2YWlsYWJsZSB0b29sc1xuICBzZXJ2ZXIuc2V0UmVxdWVzdEhhbmRsZXIoTGlzdFRvb2xzUmVxdWVzdFNjaGVtYSwgYXN5bmMgKCkgPT4ge1xuICAgIGNvbnNvbGUubG9nKCdUb29scyBsaXN0IHJlcXVlc3RlZCwgcmV0dXJuaW5nOicsIGF2YWlsYWJsZVRvb2xzLmxlbmd0aCwgJ3Rvb2xzJyk7XG4gICAgcmV0dXJuIHtcbiAgICAgIHRvb2xzOiBhdmFpbGFibGVUb29sc1xuICAgIH07XG4gIH0pO1xuXG4gIC8vIEhhbmRsZSB0b29sIGV4ZWN1dGlvblxuICBzZXJ2ZXIuc2V0UmVxdWVzdEhhbmRsZXIoQ2FsbFRvb2xSZXF1ZXN0U2NoZW1hLCBhc3luYyAocmVxdWVzdCkgPT4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCB7IG5hbWUsIGFyZ3VtZW50czogYXJncyB9ID0gcmVxdWVzdC5wYXJhbXM7XG4gICAgICBjb25zb2xlLmxvZyhgVG9vbCBjYWxsIHJlY2VpdmVkOiAke25hbWV9IHdpdGggYXJnczpgLCBhcmdzKTtcbiAgICAgIFxuICAgICAgLy8gUm91dGUgdG8gdGhlIGFwcHJvcHJpYXRlIHRvb2wgaGFuZGxlclxuICAgICAgc3dpdGNoIChuYW1lKSB7XG4gICAgICAgIGNhc2UgJ3dlYi1zZWFyY2gnOlxuICAgICAgICAgIHJldHVybiBhd2FpdCBzZWFyY2hUb29sSGFuZGxlcihhcmdzKTtcbiAgICAgICAgXG4gICAgICAgIGNhc2UgJ2ZldGNoLXVybCc6XG4gICAgICAgICAgcmV0dXJuIGF3YWl0IGZldGNoVXJsVG9vbEhhbmRsZXIoYXJncyk7XG4gICAgICAgIFxuICAgICAgICBjYXNlICd1cmwtbWV0YWRhdGEnOlxuICAgICAgICAgIHJldHVybiBhd2FpdCBtZXRhZGF0YVRvb2xIYW5kbGVyKGFyZ3MpO1xuICAgICAgICBcbiAgICAgICAgY2FzZSAnZmVsby1zZWFyY2gnOlxuICAgICAgICAgIHJldHVybiBhd2FpdCBmZWxvVG9vbEhhbmRsZXIoYXJncyk7XG4gICAgICAgIFxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgVG9vbCBub3QgZm91bmQ6ICR7bmFtZX1gKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgICBjb25zb2xlLmVycm9yKGBFcnJvciBoYW5kbGluZyAke3JlcXVlc3QucGFyYW1zLm5hbWV9IHRvb2wgY2FsbDpgLCBlcnJvcik7XG4gICAgICBcbiAgICAgIC8vIFJldHVybiBwcm9wZXIgdG9vbCBleGVjdXRpb24gZXJyb3IgZm9ybWF0XG4gICAgICByZXR1cm4ge1xuICAgICAgICBpc0Vycm9yOiB0cnVlLFxuICAgICAgICBjb250ZW50OiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgdHlwZTogJ3RleHQnLFxuICAgICAgICAgICAgdGV4dDogYEVycm9yIGV4ZWN1dGluZyB0b29sICcke3JlcXVlc3QucGFyYW1zLm5hbWV9JzogJHtlcnJvci5tZXNzYWdlfWBcbiAgICAgICAgICB9XG4gICAgICAgIF1cbiAgICAgIH07XG4gICAgfVxuICB9KTtcblxuICBjb25zb2xlLmxvZygnTUNQIHNlcnZlciBjcmVhdGVkIHN1Y2Nlc3NmdWxseScpO1xuICBcbiAgLy8gUmV0dXJuIHRoZSBzZXJ2ZXIgaW5zdGFuY2UgKHJlcXVpcmVkIGZvciBTbWl0aGVyeSlcbiAgcmV0dXJuIHNlcnZlcjtcbn1cblxuLy8gT3B0aW9uYWw6IE5vIGNvbmZpZ3VyYXRpb24gc2NoZW1hIG5lZWRlZCBmb3IgdGhpcyBzZXJ2ZXJcbi8vIGV4cG9ydCBjb25zdCBjb25maWdTY2hlbWEgPSB6Lm9iamVjdCh7fSk7IiwgIlwidXNlIHN0cmljdFwiO1xudmFyIF9fY3JlYXRlID0gT2JqZWN0LmNyZWF0ZTtcbnZhciBfX2RlZlByb3AgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG52YXIgX19nZXRPd25Qcm9wRGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG52YXIgX19nZXRPd25Qcm9wTmFtZXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcztcbnZhciBfX2dldFByb3RvT2YgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2Y7XG52YXIgX19oYXNPd25Qcm9wID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtcbnZhciBfX2NvbW1vbkpTID0gKGNiLCBtb2QpID0+IGZ1bmN0aW9uIF9fcmVxdWlyZSgpIHtcbiAgcmV0dXJuIG1vZCB8fCAoMCwgY2JbX19nZXRPd25Qcm9wTmFtZXMoY2IpWzBdXSkoKG1vZCA9IHsgZXhwb3J0czoge30gfSkuZXhwb3J0cywgbW9kKSwgbW9kLmV4cG9ydHM7XG59O1xudmFyIF9fY29weVByb3BzID0gKHRvLCBmcm9tLCBleGNlcHQsIGRlc2MpID0+IHtcbiAgaWYgKGZyb20gJiYgdHlwZW9mIGZyb20gPT09IFwib2JqZWN0XCIgfHwgdHlwZW9mIGZyb20gPT09IFwiZnVuY3Rpb25cIikge1xuICAgIGZvciAobGV0IGtleSBvZiBfX2dldE93blByb3BOYW1lcyhmcm9tKSlcbiAgICAgIGlmICghX19oYXNPd25Qcm9wLmNhbGwodG8sIGtleSkgJiYga2V5ICE9PSBleGNlcHQpXG4gICAgICAgIF9fZGVmUHJvcCh0bywga2V5LCB7IGdldDogKCkgPT4gZnJvbVtrZXldLCBlbnVtZXJhYmxlOiAhKGRlc2MgPSBfX2dldE93blByb3BEZXNjKGZyb20sIGtleSkpIHx8IGRlc2MuZW51bWVyYWJsZSB9KTtcbiAgfVxuICByZXR1cm4gdG87XG59O1xudmFyIF9fdG9FU00gPSAobW9kLCBpc05vZGVNb2RlLCB0YXJnZXQpID0+ICh0YXJnZXQgPSBtb2QgIT0gbnVsbCA/IF9fY3JlYXRlKF9fZ2V0UHJvdG9PZihtb2QpKSA6IHt9LCBfX2NvcHlQcm9wcyhcbiAgLy8gSWYgdGhlIGltcG9ydGVyIGlzIGluIG5vZGUgY29tcGF0aWJpbGl0eSBtb2RlIG9yIHRoaXMgaXMgbm90IGFuIEVTTVxuICAvLyBmaWxlIHRoYXQgaGFzIGJlZW4gY29udmVydGVkIHRvIGEgQ29tbW9uSlMgZmlsZSB1c2luZyBhIEJhYmVsLVxuICAvLyBjb21wYXRpYmxlIHRyYW5zZm9ybSAoaS5lLiBcIl9fZXNNb2R1bGVcIiBoYXMgbm90IGJlZW4gc2V0KSwgdGhlbiBzZXRcbiAgLy8gXCJkZWZhdWx0XCIgdG8gdGhlIENvbW1vbkpTIFwibW9kdWxlLmV4cG9ydHNcIiBmb3Igbm9kZSBjb21wYXRpYmlsaXR5LlxuICBpc05vZGVNb2RlIHx8ICFtb2QgfHwgIW1vZC5fX2VzTW9kdWxlID8gX19kZWZQcm9wKHRhcmdldCwgXCJkZWZhdWx0XCIsIHsgdmFsdWU6IG1vZCwgZW51bWVyYWJsZTogdHJ1ZSB9KSA6IHRhcmdldCxcbiAgbW9kXG4pKTtcblxuLy8gbm9kZV9tb2R1bGVzL2J5dGVzL2luZGV4LmpzXG52YXIgcmVxdWlyZV9ieXRlcyA9IF9fY29tbW9uSlMoe1xuICBcIm5vZGVfbW9kdWxlcy9ieXRlcy9pbmRleC5qc1wiKGV4cG9ydHMyLCBtb2R1bGUyKSB7XG4gICAgXCJ1c2Ugc3RyaWN0XCI7XG4gICAgbW9kdWxlMi5leHBvcnRzID0gYnl0ZXM7XG4gICAgbW9kdWxlMi5leHBvcnRzLmZvcm1hdCA9IGZvcm1hdDtcbiAgICBtb2R1bGUyLmV4cG9ydHMucGFyc2UgPSBwYXJzZTtcbiAgICB2YXIgZm9ybWF0VGhvdXNhbmRzUmVnRXhwID0gL1xcQig/PShcXGR7M30pKyg/IVxcZCkpL2c7XG4gICAgdmFyIGZvcm1hdERlY2ltYWxzUmVnRXhwID0gLyg/OlxcLjAqfChcXC5bXjBdKykwKykkLztcbiAgICB2YXIgbWFwID0ge1xuICAgICAgYjogMSxcbiAgICAgIGtiOiAxIDw8IDEwLFxuICAgICAgbWI6IDEgPDwgMjAsXG4gICAgICBnYjogMSA8PCAzMCxcbiAgICAgIHRiOiBNYXRoLnBvdygxMDI0LCA0KSxcbiAgICAgIHBiOiBNYXRoLnBvdygxMDI0LCA1KVxuICAgIH07XG4gICAgdmFyIHBhcnNlUmVnRXhwID0gL14oKC18XFwrKT8oXFxkKyg/OlxcLlxcZCspPykpICooa2J8bWJ8Z2J8dGJ8cGIpJC9pO1xuICAgIGZ1bmN0aW9uIGJ5dGVzKHZhbHVlLCBvcHRpb25zKSB7XG4gICAgICBpZiAodHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgIHJldHVybiBwYXJzZSh2YWx1ZSk7XG4gICAgICB9XG4gICAgICBpZiAodHlwZW9mIHZhbHVlID09PSBcIm51bWJlclwiKSB7XG4gICAgICAgIHJldHVybiBmb3JtYXQodmFsdWUsIG9wdGlvbnMpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGZvcm1hdCh2YWx1ZSwgb3B0aW9ucykge1xuICAgICAgaWYgKCFOdW1iZXIuaXNGaW5pdGUodmFsdWUpKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgICAgdmFyIG1hZyA9IE1hdGguYWJzKHZhbHVlKTtcbiAgICAgIHZhciB0aG91c2FuZHNTZXBhcmF0b3IgPSBvcHRpb25zICYmIG9wdGlvbnMudGhvdXNhbmRzU2VwYXJhdG9yIHx8IFwiXCI7XG4gICAgICB2YXIgdW5pdFNlcGFyYXRvciA9IG9wdGlvbnMgJiYgb3B0aW9ucy51bml0U2VwYXJhdG9yIHx8IFwiXCI7XG4gICAgICB2YXIgZGVjaW1hbFBsYWNlcyA9IG9wdGlvbnMgJiYgb3B0aW9ucy5kZWNpbWFsUGxhY2VzICE9PSB2b2lkIDAgPyBvcHRpb25zLmRlY2ltYWxQbGFjZXMgOiAyO1xuICAgICAgdmFyIGZpeGVkRGVjaW1hbHMgPSBCb29sZWFuKG9wdGlvbnMgJiYgb3B0aW9ucy5maXhlZERlY2ltYWxzKTtcbiAgICAgIHZhciB1bml0ID0gb3B0aW9ucyAmJiBvcHRpb25zLnVuaXQgfHwgXCJcIjtcbiAgICAgIGlmICghdW5pdCB8fCAhbWFwW3VuaXQudG9Mb3dlckNhc2UoKV0pIHtcbiAgICAgICAgaWYgKG1hZyA+PSBtYXAucGIpIHtcbiAgICAgICAgICB1bml0ID0gXCJQQlwiO1xuICAgICAgICB9IGVsc2UgaWYgKG1hZyA+PSBtYXAudGIpIHtcbiAgICAgICAgICB1bml0ID0gXCJUQlwiO1xuICAgICAgICB9IGVsc2UgaWYgKG1hZyA+PSBtYXAuZ2IpIHtcbiAgICAgICAgICB1bml0ID0gXCJHQlwiO1xuICAgICAgICB9IGVsc2UgaWYgKG1hZyA+PSBtYXAubWIpIHtcbiAgICAgICAgICB1bml0ID0gXCJNQlwiO1xuICAgICAgICB9IGVsc2UgaWYgKG1hZyA+PSBtYXAua2IpIHtcbiAgICAgICAgICB1bml0ID0gXCJLQlwiO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHVuaXQgPSBcIkJcIjtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdmFyIHZhbCA9IHZhbHVlIC8gbWFwW3VuaXQudG9Mb3dlckNhc2UoKV07XG4gICAgICB2YXIgc3RyID0gdmFsLnRvRml4ZWQoZGVjaW1hbFBsYWNlcyk7XG4gICAgICBpZiAoIWZpeGVkRGVjaW1hbHMpIHtcbiAgICAgICAgc3RyID0gc3RyLnJlcGxhY2UoZm9ybWF0RGVjaW1hbHNSZWdFeHAsIFwiJDFcIik7XG4gICAgICB9XG4gICAgICBpZiAodGhvdXNhbmRzU2VwYXJhdG9yKSB7XG4gICAgICAgIHN0ciA9IHN0ci5zcGxpdChcIi5cIikubWFwKGZ1bmN0aW9uKHMsIGkpIHtcbiAgICAgICAgICByZXR1cm4gaSA9PT0gMCA/IHMucmVwbGFjZShmb3JtYXRUaG91c2FuZHNSZWdFeHAsIHRob3VzYW5kc1NlcGFyYXRvcikgOiBzO1xuICAgICAgICB9KS5qb2luKFwiLlwiKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBzdHIgKyB1bml0U2VwYXJhdG9yICsgdW5pdDtcbiAgICB9XG4gICAgZnVuY3Rpb24gcGFyc2UodmFsKSB7XG4gICAgICBpZiAodHlwZW9mIHZhbCA9PT0gXCJudW1iZXJcIiAmJiAhaXNOYU4odmFsKSkge1xuICAgICAgICByZXR1cm4gdmFsO1xuICAgICAgfVxuICAgICAgaWYgKHR5cGVvZiB2YWwgIT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICB9XG4gICAgICB2YXIgcmVzdWx0cyA9IHBhcnNlUmVnRXhwLmV4ZWModmFsKTtcbiAgICAgIHZhciBmbG9hdFZhbHVlO1xuICAgICAgdmFyIHVuaXQgPSBcImJcIjtcbiAgICAgIGlmICghcmVzdWx0cykge1xuICAgICAgICBmbG9hdFZhbHVlID0gcGFyc2VJbnQodmFsLCAxMCk7XG4gICAgICAgIHVuaXQgPSBcImJcIjtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGZsb2F0VmFsdWUgPSBwYXJzZUZsb2F0KHJlc3VsdHNbMV0pO1xuICAgICAgICB1bml0ID0gcmVzdWx0c1s0XS50b0xvd2VyQ2FzZSgpO1xuICAgICAgfVxuICAgICAgaWYgKGlzTmFOKGZsb2F0VmFsdWUpKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgICAgcmV0dXJuIE1hdGguZmxvb3IobWFwW3VuaXRdICogZmxvYXRWYWx1ZSk7XG4gICAgfVxuICB9XG59KTtcblxuLy8gbm9kZV9tb2R1bGVzL2RlcGQvaW5kZXguanNcbnZhciByZXF1aXJlX2RlcGQgPSBfX2NvbW1vbkpTKHtcbiAgXCJub2RlX21vZHVsZXMvZGVwZC9pbmRleC5qc1wiKGV4cG9ydHMyLCBtb2R1bGUyKSB7XG4gICAgdmFyIHJlbGF0aXZlID0gcmVxdWlyZShcInBhdGhcIikucmVsYXRpdmU7XG4gICAgbW9kdWxlMi5leHBvcnRzID0gZGVwZDtcbiAgICB2YXIgYmFzZVBhdGggPSBwcm9jZXNzLmN3ZCgpO1xuICAgIGZ1bmN0aW9uIGNvbnRhaW5zTmFtZXNwYWNlKHN0ciwgbmFtZXNwYWNlKSB7XG4gICAgICB2YXIgdmFscyA9IHN0ci5zcGxpdCgvWyAsXSsvKTtcbiAgICAgIHZhciBucyA9IFN0cmluZyhuYW1lc3BhY2UpLnRvTG93ZXJDYXNlKCk7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZhbHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIHZhbCA9IHZhbHNbaV07XG4gICAgICAgIGlmICh2YWwgJiYgKHZhbCA9PT0gXCIqXCIgfHwgdmFsLnRvTG93ZXJDYXNlKCkgPT09IG5zKSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNvbnZlcnREYXRhRGVzY3JpcHRvclRvQWNjZXNzb3Iob2JqLCBwcm9wLCBtZXNzYWdlKSB7XG4gICAgICB2YXIgZGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqLCBwcm9wKTtcbiAgICAgIHZhciB2YWx1ZSA9IGRlc2NyaXB0b3IudmFsdWU7XG4gICAgICBkZXNjcmlwdG9yLmdldCA9IGZ1bmN0aW9uIGdldHRlcigpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgfTtcbiAgICAgIGlmIChkZXNjcmlwdG9yLndyaXRhYmxlKSB7XG4gICAgICAgIGRlc2NyaXB0b3Iuc2V0ID0gZnVuY3Rpb24gc2V0dGVyKHZhbCkge1xuICAgICAgICAgIHJldHVybiB2YWx1ZSA9IHZhbDtcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIGRlbGV0ZSBkZXNjcmlwdG9yLnZhbHVlO1xuICAgICAgZGVsZXRlIGRlc2NyaXB0b3Iud3JpdGFibGU7XG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBwcm9wLCBkZXNjcmlwdG9yKTtcbiAgICAgIHJldHVybiBkZXNjcmlwdG9yO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjcmVhdGVBcmd1bWVudHNTdHJpbmcoYXJpdHkpIHtcbiAgICAgIHZhciBzdHIgPSBcIlwiO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcml0eTsgaSsrKSB7XG4gICAgICAgIHN0ciArPSBcIiwgYXJnXCIgKyBpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHN0ci5zdWJzdHIoMik7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNyZWF0ZVN0YWNrU3RyaW5nKHN0YWNrKSB7XG4gICAgICB2YXIgc3RyID0gdGhpcy5uYW1lICsgXCI6IFwiICsgdGhpcy5uYW1lc3BhY2U7XG4gICAgICBpZiAodGhpcy5tZXNzYWdlKSB7XG4gICAgICAgIHN0ciArPSBcIiBkZXByZWNhdGVkIFwiICsgdGhpcy5tZXNzYWdlO1xuICAgICAgfVxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdGFjay5sZW5ndGg7IGkrKykge1xuICAgICAgICBzdHIgKz0gXCJcXG4gICAgYXQgXCIgKyBzdGFja1tpXS50b1N0cmluZygpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHN0cjtcbiAgICB9XG4gICAgZnVuY3Rpb24gZGVwZChuYW1lc3BhY2UpIHtcbiAgICAgIGlmICghbmFtZXNwYWNlKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJhcmd1bWVudCBuYW1lc3BhY2UgaXMgcmVxdWlyZWRcIik7XG4gICAgICB9XG4gICAgICB2YXIgc3RhY2sgPSBnZXRTdGFjaygpO1xuICAgICAgdmFyIHNpdGUgPSBjYWxsU2l0ZUxvY2F0aW9uKHN0YWNrWzFdKTtcbiAgICAgIHZhciBmaWxlID0gc2l0ZVswXTtcbiAgICAgIGZ1bmN0aW9uIGRlcHJlY2F0ZShtZXNzYWdlKSB7XG4gICAgICAgIGxvZy5jYWxsKGRlcHJlY2F0ZSwgbWVzc2FnZSk7XG4gICAgICB9XG4gICAgICBkZXByZWNhdGUuX2ZpbGUgPSBmaWxlO1xuICAgICAgZGVwcmVjYXRlLl9pZ25vcmVkID0gaXNpZ25vcmVkKG5hbWVzcGFjZSk7XG4gICAgICBkZXByZWNhdGUuX25hbWVzcGFjZSA9IG5hbWVzcGFjZTtcbiAgICAgIGRlcHJlY2F0ZS5fdHJhY2VkID0gaXN0cmFjZWQobmFtZXNwYWNlKTtcbiAgICAgIGRlcHJlY2F0ZS5fd2FybmVkID0gLyogQF9fUFVSRV9fICovIE9iamVjdC5jcmVhdGUobnVsbCk7XG4gICAgICBkZXByZWNhdGUuZnVuY3Rpb24gPSB3cmFwZnVuY3Rpb247XG4gICAgICBkZXByZWNhdGUucHJvcGVydHkgPSB3cmFwcHJvcGVydHk7XG4gICAgICByZXR1cm4gZGVwcmVjYXRlO1xuICAgIH1cbiAgICBmdW5jdGlvbiBlZWhhc2xpc3RlbmVycyhlbWl0dGVyLCB0eXBlKSB7XG4gICAgICB2YXIgY291bnQgPSB0eXBlb2YgZW1pdHRlci5saXN0ZW5lckNvdW50ICE9PSBcImZ1bmN0aW9uXCIgPyBlbWl0dGVyLmxpc3RlbmVycyh0eXBlKS5sZW5ndGggOiBlbWl0dGVyLmxpc3RlbmVyQ291bnQodHlwZSk7XG4gICAgICByZXR1cm4gY291bnQgPiAwO1xuICAgIH1cbiAgICBmdW5jdGlvbiBpc2lnbm9yZWQobmFtZXNwYWNlKSB7XG4gICAgICBpZiAocHJvY2Vzcy5ub0RlcHJlY2F0aW9uKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgdmFyIHN0ciA9IHByb2Nlc3MuZW52Lk5PX0RFUFJFQ0FUSU9OIHx8IFwiXCI7XG4gICAgICByZXR1cm4gY29udGFpbnNOYW1lc3BhY2Uoc3RyLCBuYW1lc3BhY2UpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBpc3RyYWNlZChuYW1lc3BhY2UpIHtcbiAgICAgIGlmIChwcm9jZXNzLnRyYWNlRGVwcmVjYXRpb24pIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgICB2YXIgc3RyID0gcHJvY2Vzcy5lbnYuVFJBQ0VfREVQUkVDQVRJT04gfHwgXCJcIjtcbiAgICAgIHJldHVybiBjb250YWluc05hbWVzcGFjZShzdHIsIG5hbWVzcGFjZSk7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGxvZyhtZXNzYWdlLCBzaXRlKSB7XG4gICAgICB2YXIgaGFzbGlzdGVuZXJzID0gZWVoYXNsaXN0ZW5lcnMocHJvY2VzcywgXCJkZXByZWNhdGlvblwiKTtcbiAgICAgIGlmICghaGFzbGlzdGVuZXJzICYmIHRoaXMuX2lnbm9yZWQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdmFyIGNhbGxlcjtcbiAgICAgIHZhciBjYWxsRmlsZTtcbiAgICAgIHZhciBjYWxsU2l0ZTtcbiAgICAgIHZhciBkZXBTaXRlO1xuICAgICAgdmFyIGkgPSAwO1xuICAgICAgdmFyIHNlZW4gPSBmYWxzZTtcbiAgICAgIHZhciBzdGFjayA9IGdldFN0YWNrKCk7XG4gICAgICB2YXIgZmlsZSA9IHRoaXMuX2ZpbGU7XG4gICAgICBpZiAoc2l0ZSkge1xuICAgICAgICBkZXBTaXRlID0gc2l0ZTtcbiAgICAgICAgY2FsbFNpdGUgPSBjYWxsU2l0ZUxvY2F0aW9uKHN0YWNrWzFdKTtcbiAgICAgICAgY2FsbFNpdGUubmFtZSA9IGRlcFNpdGUubmFtZTtcbiAgICAgICAgZmlsZSA9IGNhbGxTaXRlWzBdO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaSA9IDI7XG4gICAgICAgIGRlcFNpdGUgPSBjYWxsU2l0ZUxvY2F0aW9uKHN0YWNrW2ldKTtcbiAgICAgICAgY2FsbFNpdGUgPSBkZXBTaXRlO1xuICAgICAgfVxuICAgICAgZm9yICg7IGkgPCBzdGFjay5sZW5ndGg7IGkrKykge1xuICAgICAgICBjYWxsZXIgPSBjYWxsU2l0ZUxvY2F0aW9uKHN0YWNrW2ldKTtcbiAgICAgICAgY2FsbEZpbGUgPSBjYWxsZXJbMF07XG4gICAgICAgIGlmIChjYWxsRmlsZSA9PT0gZmlsZSkge1xuICAgICAgICAgIHNlZW4gPSB0cnVlO1xuICAgICAgICB9IGVsc2UgaWYgKGNhbGxGaWxlID09PSB0aGlzLl9maWxlKSB7XG4gICAgICAgICAgZmlsZSA9IHRoaXMuX2ZpbGU7XG4gICAgICAgIH0gZWxzZSBpZiAoc2Vlbikge1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICB2YXIga2V5ID0gY2FsbGVyID8gZGVwU2l0ZS5qb2luKFwiOlwiKSArIFwiX19cIiArIGNhbGxlci5qb2luKFwiOlwiKSA6IHZvaWQgMDtcbiAgICAgIGlmIChrZXkgIT09IHZvaWQgMCAmJiBrZXkgaW4gdGhpcy5fd2FybmVkKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRoaXMuX3dhcm5lZFtrZXldID0gdHJ1ZTtcbiAgICAgIHZhciBtc2cgPSBtZXNzYWdlO1xuICAgICAgaWYgKCFtc2cpIHtcbiAgICAgICAgbXNnID0gY2FsbFNpdGUgPT09IGRlcFNpdGUgfHwgIWNhbGxTaXRlLm5hbWUgPyBkZWZhdWx0TWVzc2FnZShkZXBTaXRlKSA6IGRlZmF1bHRNZXNzYWdlKGNhbGxTaXRlKTtcbiAgICAgIH1cbiAgICAgIGlmIChoYXNsaXN0ZW5lcnMpIHtcbiAgICAgICAgdmFyIGVycjIgPSBEZXByZWNhdGlvbkVycm9yKHRoaXMuX25hbWVzcGFjZSwgbXNnLCBzdGFjay5zbGljZShpKSk7XG4gICAgICAgIHByb2Nlc3MuZW1pdChcImRlcHJlY2F0aW9uXCIsIGVycjIpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICB2YXIgZm9ybWF0ID0gcHJvY2Vzcy5zdGRlcnIuaXNUVFkgPyBmb3JtYXRDb2xvciA6IGZvcm1hdFBsYWluO1xuICAgICAgdmFyIG91dHB1dCA9IGZvcm1hdC5jYWxsKHRoaXMsIG1zZywgY2FsbGVyLCBzdGFjay5zbGljZShpKSk7XG4gICAgICBwcm9jZXNzLnN0ZGVyci53cml0ZShvdXRwdXQgKyBcIlxcblwiLCBcInV0ZjhcIik7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNhbGxTaXRlTG9jYXRpb24oY2FsbFNpdGUpIHtcbiAgICAgIHZhciBmaWxlID0gY2FsbFNpdGUuZ2V0RmlsZU5hbWUoKSB8fCBcIjxhbm9ueW1vdXM+XCI7XG4gICAgICB2YXIgbGluZSA9IGNhbGxTaXRlLmdldExpbmVOdW1iZXIoKTtcbiAgICAgIHZhciBjb2xtID0gY2FsbFNpdGUuZ2V0Q29sdW1uTnVtYmVyKCk7XG4gICAgICBpZiAoY2FsbFNpdGUuaXNFdmFsKCkpIHtcbiAgICAgICAgZmlsZSA9IGNhbGxTaXRlLmdldEV2YWxPcmlnaW4oKSArIFwiLCBcIiArIGZpbGU7XG4gICAgICB9XG4gICAgICB2YXIgc2l0ZSA9IFtmaWxlLCBsaW5lLCBjb2xtXTtcbiAgICAgIHNpdGUuY2FsbFNpdGUgPSBjYWxsU2l0ZTtcbiAgICAgIHNpdGUubmFtZSA9IGNhbGxTaXRlLmdldEZ1bmN0aW9uTmFtZSgpO1xuICAgICAgcmV0dXJuIHNpdGU7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGRlZmF1bHRNZXNzYWdlKHNpdGUpIHtcbiAgICAgIHZhciBjYWxsU2l0ZSA9IHNpdGUuY2FsbFNpdGU7XG4gICAgICB2YXIgZnVuY05hbWUgPSBzaXRlLm5hbWU7XG4gICAgICBpZiAoIWZ1bmNOYW1lKSB7XG4gICAgICAgIGZ1bmNOYW1lID0gXCI8YW5vbnltb3VzQFwiICsgZm9ybWF0TG9jYXRpb24oc2l0ZSkgKyBcIj5cIjtcbiAgICAgIH1cbiAgICAgIHZhciBjb250ZXh0ID0gY2FsbFNpdGUuZ2V0VGhpcygpO1xuICAgICAgdmFyIHR5cGVOYW1lID0gY29udGV4dCAmJiBjYWxsU2l0ZS5nZXRUeXBlTmFtZSgpO1xuICAgICAgaWYgKHR5cGVOYW1lID09PSBcIk9iamVjdFwiKSB7XG4gICAgICAgIHR5cGVOYW1lID0gdm9pZCAwO1xuICAgICAgfVxuICAgICAgaWYgKHR5cGVOYW1lID09PSBcIkZ1bmN0aW9uXCIpIHtcbiAgICAgICAgdHlwZU5hbWUgPSBjb250ZXh0Lm5hbWUgfHwgdHlwZU5hbWU7XG4gICAgICB9XG4gICAgICByZXR1cm4gdHlwZU5hbWUgJiYgY2FsbFNpdGUuZ2V0TWV0aG9kTmFtZSgpID8gdHlwZU5hbWUgKyBcIi5cIiArIGZ1bmNOYW1lIDogZnVuY05hbWU7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGZvcm1hdFBsYWluKG1zZywgY2FsbGVyLCBzdGFjaykge1xuICAgICAgdmFyIHRpbWVzdGFtcCA9ICgvKiBAX19QVVJFX18gKi8gbmV3IERhdGUoKSkudG9VVENTdHJpbmcoKTtcbiAgICAgIHZhciBmb3JtYXR0ZWQgPSB0aW1lc3RhbXAgKyBcIiBcIiArIHRoaXMuX25hbWVzcGFjZSArIFwiIGRlcHJlY2F0ZWQgXCIgKyBtc2c7XG4gICAgICBpZiAodGhpcy5fdHJhY2VkKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc3RhY2subGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBmb3JtYXR0ZWQgKz0gXCJcXG4gICAgYXQgXCIgKyBzdGFja1tpXS50b1N0cmluZygpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmb3JtYXR0ZWQ7XG4gICAgICB9XG4gICAgICBpZiAoY2FsbGVyKSB7XG4gICAgICAgIGZvcm1hdHRlZCArPSBcIiBhdCBcIiArIGZvcm1hdExvY2F0aW9uKGNhbGxlcik7XG4gICAgICB9XG4gICAgICByZXR1cm4gZm9ybWF0dGVkO1xuICAgIH1cbiAgICBmdW5jdGlvbiBmb3JtYXRDb2xvcihtc2csIGNhbGxlciwgc3RhY2spIHtcbiAgICAgIHZhciBmb3JtYXR0ZWQgPSBcIlxceDFCWzM2OzFtXCIgKyB0aGlzLl9uYW1lc3BhY2UgKyBcIlxceDFCWzIyOzM5bSBcXHgxQlszMzsxbWRlcHJlY2F0ZWRcXHgxQlsyMjszOW0gXFx4MUJbMG1cIiArIG1zZyArIFwiXFx4MUJbMzltXCI7XG4gICAgICBpZiAodGhpcy5fdHJhY2VkKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc3RhY2subGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICBmb3JtYXR0ZWQgKz0gXCJcXG4gICAgXFx4MUJbMzZtYXQgXCIgKyBzdGFja1tpXS50b1N0cmluZygpICsgXCJcXHgxQlszOW1cIjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZm9ybWF0dGVkO1xuICAgICAgfVxuICAgICAgaWYgKGNhbGxlcikge1xuICAgICAgICBmb3JtYXR0ZWQgKz0gXCIgXFx4MUJbMzZtXCIgKyBmb3JtYXRMb2NhdGlvbihjYWxsZXIpICsgXCJcXHgxQlszOW1cIjtcbiAgICAgIH1cbiAgICAgIHJldHVybiBmb3JtYXR0ZWQ7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGZvcm1hdExvY2F0aW9uKGNhbGxTaXRlKSB7XG4gICAgICByZXR1cm4gcmVsYXRpdmUoYmFzZVBhdGgsIGNhbGxTaXRlWzBdKSArIFwiOlwiICsgY2FsbFNpdGVbMV0gKyBcIjpcIiArIGNhbGxTaXRlWzJdO1xuICAgIH1cbiAgICBmdW5jdGlvbiBnZXRTdGFjaygpIHtcbiAgICAgIHZhciBsaW1pdCA9IEVycm9yLnN0YWNrVHJhY2VMaW1pdDtcbiAgICAgIHZhciBvYmogPSB7fTtcbiAgICAgIHZhciBwcmVwID0gRXJyb3IucHJlcGFyZVN0YWNrVHJhY2U7XG4gICAgICBFcnJvci5wcmVwYXJlU3RhY2tUcmFjZSA9IHByZXBhcmVPYmplY3RTdGFja1RyYWNlO1xuICAgICAgRXJyb3Iuc3RhY2tUcmFjZUxpbWl0ID0gTWF0aC5tYXgoMTAsIGxpbWl0KTtcbiAgICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKG9iaik7XG4gICAgICB2YXIgc3RhY2sgPSBvYmouc3RhY2suc2xpY2UoMSk7XG4gICAgICBFcnJvci5wcmVwYXJlU3RhY2tUcmFjZSA9IHByZXA7XG4gICAgICBFcnJvci5zdGFja1RyYWNlTGltaXQgPSBsaW1pdDtcbiAgICAgIHJldHVybiBzdGFjaztcbiAgICB9XG4gICAgZnVuY3Rpb24gcHJlcGFyZU9iamVjdFN0YWNrVHJhY2Uob2JqLCBzdGFjaykge1xuICAgICAgcmV0dXJuIHN0YWNrO1xuICAgIH1cbiAgICBmdW5jdGlvbiB3cmFwZnVuY3Rpb24oZm4sIG1lc3NhZ2UpIHtcbiAgICAgIGlmICh0eXBlb2YgZm4gIT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiYXJndW1lbnQgZm4gbXVzdCBiZSBhIGZ1bmN0aW9uXCIpO1xuICAgICAgfVxuICAgICAgdmFyIGFyZ3MgPSBjcmVhdGVBcmd1bWVudHNTdHJpbmcoZm4ubGVuZ3RoKTtcbiAgICAgIHZhciBzdGFjayA9IGdldFN0YWNrKCk7XG4gICAgICB2YXIgc2l0ZSA9IGNhbGxTaXRlTG9jYXRpb24oc3RhY2tbMV0pO1xuICAgICAgc2l0ZS5uYW1lID0gZm4ubmFtZTtcbiAgICAgIHZhciBkZXByZWNhdGVkZm4gPSBuZXcgRnVuY3Rpb24oXG4gICAgICAgIFwiZm5cIixcbiAgICAgICAgXCJsb2dcIixcbiAgICAgICAgXCJkZXByZWNhdGVcIixcbiAgICAgICAgXCJtZXNzYWdlXCIsXG4gICAgICAgIFwic2l0ZVwiLFxuICAgICAgICAnXCJ1c2Ugc3RyaWN0XCJcXG5yZXR1cm4gZnVuY3Rpb24gKCcgKyBhcmdzICsgXCIpIHtsb2cuY2FsbChkZXByZWNhdGUsIG1lc3NhZ2UsIHNpdGUpXFxucmV0dXJuIGZuLmFwcGx5KHRoaXMsIGFyZ3VtZW50cylcXG59XCJcbiAgICAgICkoZm4sIGxvZywgdGhpcywgbWVzc2FnZSwgc2l0ZSk7XG4gICAgICByZXR1cm4gZGVwcmVjYXRlZGZuO1xuICAgIH1cbiAgICBmdW5jdGlvbiB3cmFwcHJvcGVydHkob2JqLCBwcm9wLCBtZXNzYWdlKSB7XG4gICAgICBpZiAoIW9iaiB8fCB0eXBlb2Ygb2JqICE9PSBcIm9iamVjdFwiICYmIHR5cGVvZiBvYmogIT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiYXJndW1lbnQgb2JqIG11c3QgYmUgb2JqZWN0XCIpO1xuICAgICAgfVxuICAgICAgdmFyIGRlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iaiwgcHJvcCk7XG4gICAgICBpZiAoIWRlc2NyaXB0b3IpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIm11c3QgY2FsbCBwcm9wZXJ0eSBvbiBvd25lciBvYmplY3RcIik7XG4gICAgICB9XG4gICAgICBpZiAoIWRlc2NyaXB0b3IuY29uZmlndXJhYmxlKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJwcm9wZXJ0eSBtdXN0IGJlIGNvbmZpZ3VyYWJsZVwiKTtcbiAgICAgIH1cbiAgICAgIHZhciBkZXByZWNhdGUgPSB0aGlzO1xuICAgICAgdmFyIHN0YWNrID0gZ2V0U3RhY2soKTtcbiAgICAgIHZhciBzaXRlID0gY2FsbFNpdGVMb2NhdGlvbihzdGFja1sxXSk7XG4gICAgICBzaXRlLm5hbWUgPSBwcm9wO1xuICAgICAgaWYgKFwidmFsdWVcIiBpbiBkZXNjcmlwdG9yKSB7XG4gICAgICAgIGRlc2NyaXB0b3IgPSBjb252ZXJ0RGF0YURlc2NyaXB0b3JUb0FjY2Vzc29yKG9iaiwgcHJvcCwgbWVzc2FnZSk7XG4gICAgICB9XG4gICAgICB2YXIgZ2V0ID0gZGVzY3JpcHRvci5nZXQ7XG4gICAgICB2YXIgc2V0ID0gZGVzY3JpcHRvci5zZXQ7XG4gICAgICBpZiAodHlwZW9mIGdldCA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIGRlc2NyaXB0b3IuZ2V0ID0gZnVuY3Rpb24gZ2V0dGVyKCkge1xuICAgICAgICAgIGxvZy5jYWxsKGRlcHJlY2F0ZSwgbWVzc2FnZSwgc2l0ZSk7XG4gICAgICAgICAgcmV0dXJuIGdldC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgaWYgKHR5cGVvZiBzZXQgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICBkZXNjcmlwdG9yLnNldCA9IGZ1bmN0aW9uIHNldHRlcigpIHtcbiAgICAgICAgICBsb2cuY2FsbChkZXByZWNhdGUsIG1lc3NhZ2UsIHNpdGUpO1xuICAgICAgICAgIHJldHVybiBzZXQuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmosIHByb3AsIGRlc2NyaXB0b3IpO1xuICAgIH1cbiAgICBmdW5jdGlvbiBEZXByZWNhdGlvbkVycm9yKG5hbWVzcGFjZSwgbWVzc2FnZSwgc3RhY2spIHtcbiAgICAgIHZhciBlcnJvciA9IG5ldyBFcnJvcigpO1xuICAgICAgdmFyIHN0YWNrU3RyaW5nO1xuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGVycm9yLCBcImNvbnN0cnVjdG9yXCIsIHtcbiAgICAgICAgdmFsdWU6IERlcHJlY2F0aW9uRXJyb3JcbiAgICAgIH0pO1xuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGVycm9yLCBcIm1lc3NhZ2VcIiwge1xuICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICB2YWx1ZTogbWVzc2FnZSxcbiAgICAgICAgd3JpdGFibGU6IHRydWVcbiAgICAgIH0pO1xuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGVycm9yLCBcIm5hbWVcIiwge1xuICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICB2YWx1ZTogXCJEZXByZWNhdGlvbkVycm9yXCIsXG4gICAgICAgIHdyaXRhYmxlOiB0cnVlXG4gICAgICB9KTtcbiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlcnJvciwgXCJuYW1lc3BhY2VcIiwge1xuICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICB2YWx1ZTogbmFtZXNwYWNlLFxuICAgICAgICB3cml0YWJsZTogdHJ1ZVxuICAgICAgfSk7XG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZXJyb3IsIFwic3RhY2tcIiwge1xuICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICBnZXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgIGlmIChzdGFja1N0cmluZyAhPT0gdm9pZCAwKSB7XG4gICAgICAgICAgICByZXR1cm4gc3RhY2tTdHJpbmc7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBzdGFja1N0cmluZyA9IGNyZWF0ZVN0YWNrU3RyaW5nLmNhbGwodGhpcywgc3RhY2spO1xuICAgICAgICB9LFxuICAgICAgICBzZXQ6IGZ1bmN0aW9uIHNldHRlcih2YWwpIHtcbiAgICAgICAgICBzdGFja1N0cmluZyA9IHZhbDtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICByZXR1cm4gZXJyb3I7XG4gICAgfVxuICB9XG59KTtcblxuLy8gbm9kZV9tb2R1bGVzL3NldHByb3RvdHlwZW9mL2luZGV4LmpzXG52YXIgcmVxdWlyZV9zZXRwcm90b3R5cGVvZiA9IF9fY29tbW9uSlMoe1xuICBcIm5vZGVfbW9kdWxlcy9zZXRwcm90b3R5cGVvZi9pbmRleC5qc1wiKGV4cG9ydHMyLCBtb2R1bGUyKSB7XG4gICAgXCJ1c2Ugc3RyaWN0XCI7XG4gICAgbW9kdWxlMi5leHBvcnRzID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8ICh7IF9fcHJvdG9fXzogW10gfSBpbnN0YW5jZW9mIEFycmF5ID8gc2V0UHJvdG9PZiA6IG1peGluUHJvcGVydGllcyk7XG4gICAgZnVuY3Rpb24gc2V0UHJvdG9PZihvYmosIHByb3RvKSB7XG4gICAgICBvYmouX19wcm90b19fID0gcHJvdG87XG4gICAgICByZXR1cm4gb2JqO1xuICAgIH1cbiAgICBmdW5jdGlvbiBtaXhpblByb3BlcnRpZXMob2JqLCBwcm90bykge1xuICAgICAgZm9yICh2YXIgcHJvcCBpbiBwcm90bykge1xuICAgICAgICBpZiAoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIHByb3ApKSB7XG4gICAgICAgICAgb2JqW3Byb3BdID0gcHJvdG9bcHJvcF07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBvYmo7XG4gICAgfVxuICB9XG59KTtcblxuLy8gbm9kZV9tb2R1bGVzL3N0YXR1c2VzL2NvZGVzLmpzb25cbnZhciByZXF1aXJlX2NvZGVzID0gX19jb21tb25KUyh7XG4gIFwibm9kZV9tb2R1bGVzL3N0YXR1c2VzL2NvZGVzLmpzb25cIihleHBvcnRzMiwgbW9kdWxlMikge1xuICAgIG1vZHVsZTIuZXhwb3J0cyA9IHtcbiAgICAgIFwiMTAwXCI6IFwiQ29udGludWVcIixcbiAgICAgIFwiMTAxXCI6IFwiU3dpdGNoaW5nIFByb3RvY29sc1wiLFxuICAgICAgXCIxMDJcIjogXCJQcm9jZXNzaW5nXCIsXG4gICAgICBcIjEwM1wiOiBcIkVhcmx5IEhpbnRzXCIsXG4gICAgICBcIjIwMFwiOiBcIk9LXCIsXG4gICAgICBcIjIwMVwiOiBcIkNyZWF0ZWRcIixcbiAgICAgIFwiMjAyXCI6IFwiQWNjZXB0ZWRcIixcbiAgICAgIFwiMjAzXCI6IFwiTm9uLUF1dGhvcml0YXRpdmUgSW5mb3JtYXRpb25cIixcbiAgICAgIFwiMjA0XCI6IFwiTm8gQ29udGVudFwiLFxuICAgICAgXCIyMDVcIjogXCJSZXNldCBDb250ZW50XCIsXG4gICAgICBcIjIwNlwiOiBcIlBhcnRpYWwgQ29udGVudFwiLFxuICAgICAgXCIyMDdcIjogXCJNdWx0aS1TdGF0dXNcIixcbiAgICAgIFwiMjA4XCI6IFwiQWxyZWFkeSBSZXBvcnRlZFwiLFxuICAgICAgXCIyMjZcIjogXCJJTSBVc2VkXCIsXG4gICAgICBcIjMwMFwiOiBcIk11bHRpcGxlIENob2ljZXNcIixcbiAgICAgIFwiMzAxXCI6IFwiTW92ZWQgUGVybWFuZW50bHlcIixcbiAgICAgIFwiMzAyXCI6IFwiRm91bmRcIixcbiAgICAgIFwiMzAzXCI6IFwiU2VlIE90aGVyXCIsXG4gICAgICBcIjMwNFwiOiBcIk5vdCBNb2RpZmllZFwiLFxuICAgICAgXCIzMDVcIjogXCJVc2UgUHJveHlcIixcbiAgICAgIFwiMzA3XCI6IFwiVGVtcG9yYXJ5IFJlZGlyZWN0XCIsXG4gICAgICBcIjMwOFwiOiBcIlBlcm1hbmVudCBSZWRpcmVjdFwiLFxuICAgICAgXCI0MDBcIjogXCJCYWQgUmVxdWVzdFwiLFxuICAgICAgXCI0MDFcIjogXCJVbmF1dGhvcml6ZWRcIixcbiAgICAgIFwiNDAyXCI6IFwiUGF5bWVudCBSZXF1aXJlZFwiLFxuICAgICAgXCI0MDNcIjogXCJGb3JiaWRkZW5cIixcbiAgICAgIFwiNDA0XCI6IFwiTm90IEZvdW5kXCIsXG4gICAgICBcIjQwNVwiOiBcIk1ldGhvZCBOb3QgQWxsb3dlZFwiLFxuICAgICAgXCI0MDZcIjogXCJOb3QgQWNjZXB0YWJsZVwiLFxuICAgICAgXCI0MDdcIjogXCJQcm94eSBBdXRoZW50aWNhdGlvbiBSZXF1aXJlZFwiLFxuICAgICAgXCI0MDhcIjogXCJSZXF1ZXN0IFRpbWVvdXRcIixcbiAgICAgIFwiNDA5XCI6IFwiQ29uZmxpY3RcIixcbiAgICAgIFwiNDEwXCI6IFwiR29uZVwiLFxuICAgICAgXCI0MTFcIjogXCJMZW5ndGggUmVxdWlyZWRcIixcbiAgICAgIFwiNDEyXCI6IFwiUHJlY29uZGl0aW9uIEZhaWxlZFwiLFxuICAgICAgXCI0MTNcIjogXCJQYXlsb2FkIFRvbyBMYXJnZVwiLFxuICAgICAgXCI0MTRcIjogXCJVUkkgVG9vIExvbmdcIixcbiAgICAgIFwiNDE1XCI6IFwiVW5zdXBwb3J0ZWQgTWVkaWEgVHlwZVwiLFxuICAgICAgXCI0MTZcIjogXCJSYW5nZSBOb3QgU2F0aXNmaWFibGVcIixcbiAgICAgIFwiNDE3XCI6IFwiRXhwZWN0YXRpb24gRmFpbGVkXCIsXG4gICAgICBcIjQxOFwiOiBcIkknbSBhIFRlYXBvdFwiLFxuICAgICAgXCI0MjFcIjogXCJNaXNkaXJlY3RlZCBSZXF1ZXN0XCIsXG4gICAgICBcIjQyMlwiOiBcIlVucHJvY2Vzc2FibGUgRW50aXR5XCIsXG4gICAgICBcIjQyM1wiOiBcIkxvY2tlZFwiLFxuICAgICAgXCI0MjRcIjogXCJGYWlsZWQgRGVwZW5kZW5jeVwiLFxuICAgICAgXCI0MjVcIjogXCJUb28gRWFybHlcIixcbiAgICAgIFwiNDI2XCI6IFwiVXBncmFkZSBSZXF1aXJlZFwiLFxuICAgICAgXCI0MjhcIjogXCJQcmVjb25kaXRpb24gUmVxdWlyZWRcIixcbiAgICAgIFwiNDI5XCI6IFwiVG9vIE1hbnkgUmVxdWVzdHNcIixcbiAgICAgIFwiNDMxXCI6IFwiUmVxdWVzdCBIZWFkZXIgRmllbGRzIFRvbyBMYXJnZVwiLFxuICAgICAgXCI0NTFcIjogXCJVbmF2YWlsYWJsZSBGb3IgTGVnYWwgUmVhc29uc1wiLFxuICAgICAgXCI1MDBcIjogXCJJbnRlcm5hbCBTZXJ2ZXIgRXJyb3JcIixcbiAgICAgIFwiNTAxXCI6IFwiTm90IEltcGxlbWVudGVkXCIsXG4gICAgICBcIjUwMlwiOiBcIkJhZCBHYXRld2F5XCIsXG4gICAgICBcIjUwM1wiOiBcIlNlcnZpY2UgVW5hdmFpbGFibGVcIixcbiAgICAgIFwiNTA0XCI6IFwiR2F0ZXdheSBUaW1lb3V0XCIsXG4gICAgICBcIjUwNVwiOiBcIkhUVFAgVmVyc2lvbiBOb3QgU3VwcG9ydGVkXCIsXG4gICAgICBcIjUwNlwiOiBcIlZhcmlhbnQgQWxzbyBOZWdvdGlhdGVzXCIsXG4gICAgICBcIjUwN1wiOiBcIkluc3VmZmljaWVudCBTdG9yYWdlXCIsXG4gICAgICBcIjUwOFwiOiBcIkxvb3AgRGV0ZWN0ZWRcIixcbiAgICAgIFwiNTA5XCI6IFwiQmFuZHdpZHRoIExpbWl0IEV4Y2VlZGVkXCIsXG4gICAgICBcIjUxMFwiOiBcIk5vdCBFeHRlbmRlZFwiLFxuICAgICAgXCI1MTFcIjogXCJOZXR3b3JrIEF1dGhlbnRpY2F0aW9uIFJlcXVpcmVkXCJcbiAgICB9O1xuICB9XG59KTtcblxuLy8gbm9kZV9tb2R1bGVzL3N0YXR1c2VzL2luZGV4LmpzXG52YXIgcmVxdWlyZV9zdGF0dXNlcyA9IF9fY29tbW9uSlMoe1xuICBcIm5vZGVfbW9kdWxlcy9zdGF0dXNlcy9pbmRleC5qc1wiKGV4cG9ydHMyLCBtb2R1bGUyKSB7XG4gICAgXCJ1c2Ugc3RyaWN0XCI7XG4gICAgdmFyIGNvZGVzID0gcmVxdWlyZV9jb2RlcygpO1xuICAgIG1vZHVsZTIuZXhwb3J0cyA9IHN0YXR1cztcbiAgICBzdGF0dXMubWVzc2FnZSA9IGNvZGVzO1xuICAgIHN0YXR1cy5jb2RlID0gY3JlYXRlTWVzc2FnZVRvU3RhdHVzQ29kZU1hcChjb2Rlcyk7XG4gICAgc3RhdHVzLmNvZGVzID0gY3JlYXRlU3RhdHVzQ29kZUxpc3QoY29kZXMpO1xuICAgIHN0YXR1cy5yZWRpcmVjdCA9IHtcbiAgICAgIDMwMDogdHJ1ZSxcbiAgICAgIDMwMTogdHJ1ZSxcbiAgICAgIDMwMjogdHJ1ZSxcbiAgICAgIDMwMzogdHJ1ZSxcbiAgICAgIDMwNTogdHJ1ZSxcbiAgICAgIDMwNzogdHJ1ZSxcbiAgICAgIDMwODogdHJ1ZVxuICAgIH07XG4gICAgc3RhdHVzLmVtcHR5ID0ge1xuICAgICAgMjA0OiB0cnVlLFxuICAgICAgMjA1OiB0cnVlLFxuICAgICAgMzA0OiB0cnVlXG4gICAgfTtcbiAgICBzdGF0dXMucmV0cnkgPSB7XG4gICAgICA1MDI6IHRydWUsXG4gICAgICA1MDM6IHRydWUsXG4gICAgICA1MDQ6IHRydWVcbiAgICB9O1xuICAgIGZ1bmN0aW9uIGNyZWF0ZU1lc3NhZ2VUb1N0YXR1c0NvZGVNYXAoY29kZXMyKSB7XG4gICAgICB2YXIgbWFwID0ge307XG4gICAgICBPYmplY3Qua2V5cyhjb2RlczIpLmZvckVhY2goZnVuY3Rpb24gZm9yRWFjaENvZGUoY29kZSkge1xuICAgICAgICB2YXIgbWVzc2FnZSA9IGNvZGVzMltjb2RlXTtcbiAgICAgICAgdmFyIHN0YXR1czIgPSBOdW1iZXIoY29kZSk7XG4gICAgICAgIG1hcFttZXNzYWdlLnRvTG93ZXJDYXNlKCldID0gc3RhdHVzMjtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIG1hcDtcbiAgICB9XG4gICAgZnVuY3Rpb24gY3JlYXRlU3RhdHVzQ29kZUxpc3QoY29kZXMyKSB7XG4gICAgICByZXR1cm4gT2JqZWN0LmtleXMoY29kZXMyKS5tYXAoZnVuY3Rpb24gbWFwQ29kZShjb2RlKSB7XG4gICAgICAgIHJldHVybiBOdW1iZXIoY29kZSk7XG4gICAgICB9KTtcbiAgICB9XG4gICAgZnVuY3Rpb24gZ2V0U3RhdHVzQ29kZShtZXNzYWdlKSB7XG4gICAgICB2YXIgbXNnID0gbWVzc2FnZS50b0xvd2VyQ2FzZSgpO1xuICAgICAgaWYgKCFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc3RhdHVzLmNvZGUsIG1zZykpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdpbnZhbGlkIHN0YXR1cyBtZXNzYWdlOiBcIicgKyBtZXNzYWdlICsgJ1wiJyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gc3RhdHVzLmNvZGVbbXNnXTtcbiAgICB9XG4gICAgZnVuY3Rpb24gZ2V0U3RhdHVzTWVzc2FnZShjb2RlKSB7XG4gICAgICBpZiAoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzdGF0dXMubWVzc2FnZSwgY29kZSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiaW52YWxpZCBzdGF0dXMgY29kZTogXCIgKyBjb2RlKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBzdGF0dXMubWVzc2FnZVtjb2RlXTtcbiAgICB9XG4gICAgZnVuY3Rpb24gc3RhdHVzKGNvZGUpIHtcbiAgICAgIGlmICh0eXBlb2YgY29kZSA9PT0gXCJudW1iZXJcIikge1xuICAgICAgICByZXR1cm4gZ2V0U3RhdHVzTWVzc2FnZShjb2RlKTtcbiAgICAgIH1cbiAgICAgIGlmICh0eXBlb2YgY29kZSAhPT0gXCJzdHJpbmdcIikge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiY29kZSBtdXN0IGJlIGEgbnVtYmVyIG9yIHN0cmluZ1wiKTtcbiAgICAgIH1cbiAgICAgIHZhciBuID0gcGFyc2VJbnQoY29kZSwgMTApO1xuICAgICAgaWYgKCFpc05hTihuKSkge1xuICAgICAgICByZXR1cm4gZ2V0U3RhdHVzTWVzc2FnZShuKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBnZXRTdGF0dXNDb2RlKGNvZGUpO1xuICAgIH1cbiAgfVxufSk7XG5cbi8vIG5vZGVfbW9kdWxlcy9pbmhlcml0cy9pbmhlcml0c19icm93c2VyLmpzXG52YXIgcmVxdWlyZV9pbmhlcml0c19icm93c2VyID0gX19jb21tb25KUyh7XG4gIFwibm9kZV9tb2R1bGVzL2luaGVyaXRzL2luaGVyaXRzX2Jyb3dzZXIuanNcIihleHBvcnRzMiwgbW9kdWxlMikge1xuICAgIGlmICh0eXBlb2YgT2JqZWN0LmNyZWF0ZSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICBtb2R1bGUyLmV4cG9ydHMgPSBmdW5jdGlvbiBpbmhlcml0cyhjdG9yLCBzdXBlckN0b3IpIHtcbiAgICAgICAgaWYgKHN1cGVyQ3Rvcikge1xuICAgICAgICAgIGN0b3Iuc3VwZXJfID0gc3VwZXJDdG9yO1xuICAgICAgICAgIGN0b3IucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShzdXBlckN0b3IucHJvdG90eXBlLCB7XG4gICAgICAgICAgICBjb25zdHJ1Y3Rvcjoge1xuICAgICAgICAgICAgICB2YWx1ZTogY3RvcixcbiAgICAgICAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICAgICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9IGVsc2Uge1xuICAgICAgbW9kdWxlMi5leHBvcnRzID0gZnVuY3Rpb24gaW5oZXJpdHMoY3Rvciwgc3VwZXJDdG9yKSB7XG4gICAgICAgIGlmIChzdXBlckN0b3IpIHtcbiAgICAgICAgICBjdG9yLnN1cGVyXyA9IHN1cGVyQ3RvcjtcbiAgICAgICAgICB2YXIgVGVtcEN0b3IgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICB9O1xuICAgICAgICAgIFRlbXBDdG9yLnByb3RvdHlwZSA9IHN1cGVyQ3Rvci5wcm90b3R5cGU7XG4gICAgICAgICAgY3Rvci5wcm90b3R5cGUgPSBuZXcgVGVtcEN0b3IoKTtcbiAgICAgICAgICBjdG9yLnByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IGN0b3I7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfVxuICB9XG59KTtcblxuLy8gbm9kZV9tb2R1bGVzL2luaGVyaXRzL2luaGVyaXRzLmpzXG52YXIgcmVxdWlyZV9pbmhlcml0cyA9IF9fY29tbW9uSlMoe1xuICBcIm5vZGVfbW9kdWxlcy9pbmhlcml0cy9pbmhlcml0cy5qc1wiKGV4cG9ydHMyLCBtb2R1bGUyKSB7XG4gICAgdHJ5IHtcbiAgICAgIHV0aWwyID0gcmVxdWlyZShcInV0aWxcIik7XG4gICAgICBpZiAodHlwZW9mIHV0aWwyLmluaGVyaXRzICE9PSBcImZ1bmN0aW9uXCIpIHRocm93IFwiXCI7XG4gICAgICBtb2R1bGUyLmV4cG9ydHMgPSB1dGlsMi5pbmhlcml0cztcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBtb2R1bGUyLmV4cG9ydHMgPSByZXF1aXJlX2luaGVyaXRzX2Jyb3dzZXIoKTtcbiAgICB9XG4gICAgdmFyIHV0aWwyO1xuICB9XG59KTtcblxuLy8gbm9kZV9tb2R1bGVzL3RvaWRlbnRpZmllci9pbmRleC5qc1xudmFyIHJlcXVpcmVfdG9pZGVudGlmaWVyID0gX19jb21tb25KUyh7XG4gIFwibm9kZV9tb2R1bGVzL3RvaWRlbnRpZmllci9pbmRleC5qc1wiKGV4cG9ydHMyLCBtb2R1bGUyKSB7XG4gICAgXCJ1c2Ugc3RyaWN0XCI7XG4gICAgbW9kdWxlMi5leHBvcnRzID0gdG9JZGVudGlmaWVyO1xuICAgIGZ1bmN0aW9uIHRvSWRlbnRpZmllcihzdHIpIHtcbiAgICAgIHJldHVybiBzdHIuc3BsaXQoXCIgXCIpLm1hcChmdW5jdGlvbih0b2tlbikge1xuICAgICAgICByZXR1cm4gdG9rZW4uc2xpY2UoMCwgMSkudG9VcHBlckNhc2UoKSArIHRva2VuLnNsaWNlKDEpO1xuICAgICAgfSkuam9pbihcIlwiKS5yZXBsYWNlKC9bXiBfMC05YS16XS9naSwgXCJcIik7XG4gICAgfVxuICB9XG59KTtcblxuLy8gbm9kZV9tb2R1bGVzL2h0dHAtZXJyb3JzL2luZGV4LmpzXG52YXIgcmVxdWlyZV9odHRwX2Vycm9ycyA9IF9fY29tbW9uSlMoe1xuICBcIm5vZGVfbW9kdWxlcy9odHRwLWVycm9ycy9pbmRleC5qc1wiKGV4cG9ydHMyLCBtb2R1bGUyKSB7XG4gICAgXCJ1c2Ugc3RyaWN0XCI7XG4gICAgdmFyIGRlcHJlY2F0ZSA9IHJlcXVpcmVfZGVwZCgpKFwiaHR0cC1lcnJvcnNcIik7XG4gICAgdmFyIHNldFByb3RvdHlwZU9mID0gcmVxdWlyZV9zZXRwcm90b3R5cGVvZigpO1xuICAgIHZhciBzdGF0dXNlcyA9IHJlcXVpcmVfc3RhdHVzZXMoKTtcbiAgICB2YXIgaW5oZXJpdHMgPSByZXF1aXJlX2luaGVyaXRzKCk7XG4gICAgdmFyIHRvSWRlbnRpZmllciA9IHJlcXVpcmVfdG9pZGVudGlmaWVyKCk7XG4gICAgbW9kdWxlMi5leHBvcnRzID0gY3JlYXRlRXJyb3I7XG4gICAgbW9kdWxlMi5leHBvcnRzLkh0dHBFcnJvciA9IGNyZWF0ZUh0dHBFcnJvckNvbnN0cnVjdG9yKCk7XG4gICAgbW9kdWxlMi5leHBvcnRzLmlzSHR0cEVycm9yID0gY3JlYXRlSXNIdHRwRXJyb3JGdW5jdGlvbihtb2R1bGUyLmV4cG9ydHMuSHR0cEVycm9yKTtcbiAgICBwb3B1bGF0ZUNvbnN0cnVjdG9yRXhwb3J0cyhtb2R1bGUyLmV4cG9ydHMsIHN0YXR1c2VzLmNvZGVzLCBtb2R1bGUyLmV4cG9ydHMuSHR0cEVycm9yKTtcbiAgICBmdW5jdGlvbiBjb2RlQ2xhc3Moc3RhdHVzKSB7XG4gICAgICByZXR1cm4gTnVtYmVyKFN0cmluZyhzdGF0dXMpLmNoYXJBdCgwKSArIFwiMDBcIik7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNyZWF0ZUVycm9yKCkge1xuICAgICAgdmFyIGVycjI7XG4gICAgICB2YXIgbXNnO1xuICAgICAgdmFyIHN0YXR1cyA9IDUwMDtcbiAgICAgIHZhciBwcm9wcyA9IHt9O1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIGFyZyA9IGFyZ3VtZW50c1tpXTtcbiAgICAgICAgdmFyIHR5cGUgPSB0eXBlb2YgYXJnO1xuICAgICAgICBpZiAodHlwZSA9PT0gXCJvYmplY3RcIiAmJiBhcmcgaW5zdGFuY2VvZiBFcnJvcikge1xuICAgICAgICAgIGVycjIgPSBhcmc7XG4gICAgICAgICAgc3RhdHVzID0gZXJyMi5zdGF0dXMgfHwgZXJyMi5zdGF0dXNDb2RlIHx8IHN0YXR1cztcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlID09PSBcIm51bWJlclwiICYmIGkgPT09IDApIHtcbiAgICAgICAgICBzdGF0dXMgPSBhcmc7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgIG1zZyA9IGFyZztcbiAgICAgICAgfSBlbHNlIGlmICh0eXBlID09PSBcIm9iamVjdFwiKSB7XG4gICAgICAgICAgcHJvcHMgPSBhcmc7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcImFyZ3VtZW50ICNcIiArIChpICsgMSkgKyBcIiB1bnN1cHBvcnRlZCB0eXBlIFwiICsgdHlwZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmICh0eXBlb2Ygc3RhdHVzID09PSBcIm51bWJlclwiICYmIChzdGF0dXMgPCA0MDAgfHwgc3RhdHVzID49IDYwMCkpIHtcbiAgICAgICAgZGVwcmVjYXRlKFwibm9uLWVycm9yIHN0YXR1cyBjb2RlOyB1c2Ugb25seSA0eHggb3IgNXh4IHN0YXR1cyBjb2Rlc1wiKTtcbiAgICAgIH1cbiAgICAgIGlmICh0eXBlb2Ygc3RhdHVzICE9PSBcIm51bWJlclwiIHx8ICFzdGF0dXNlcy5tZXNzYWdlW3N0YXR1c10gJiYgKHN0YXR1cyA8IDQwMCB8fCBzdGF0dXMgPj0gNjAwKSkge1xuICAgICAgICBzdGF0dXMgPSA1MDA7XG4gICAgICB9XG4gICAgICB2YXIgSHR0cEVycm9yID0gY3JlYXRlRXJyb3Jbc3RhdHVzXSB8fCBjcmVhdGVFcnJvcltjb2RlQ2xhc3Moc3RhdHVzKV07XG4gICAgICBpZiAoIWVycjIpIHtcbiAgICAgICAgZXJyMiA9IEh0dHBFcnJvciA/IG5ldyBIdHRwRXJyb3IobXNnKSA6IG5ldyBFcnJvcihtc2cgfHwgc3RhdHVzZXMubWVzc2FnZVtzdGF0dXNdKTtcbiAgICAgICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UoZXJyMiwgY3JlYXRlRXJyb3IpO1xuICAgICAgfVxuICAgICAgaWYgKCFIdHRwRXJyb3IgfHwgIShlcnIyIGluc3RhbmNlb2YgSHR0cEVycm9yKSB8fCBlcnIyLnN0YXR1cyAhPT0gc3RhdHVzKSB7XG4gICAgICAgIGVycjIuZXhwb3NlID0gc3RhdHVzIDwgNTAwO1xuICAgICAgICBlcnIyLnN0YXR1cyA9IGVycjIuc3RhdHVzQ29kZSA9IHN0YXR1cztcbiAgICAgIH1cbiAgICAgIGZvciAodmFyIGtleSBpbiBwcm9wcykge1xuICAgICAgICBpZiAoa2V5ICE9PSBcInN0YXR1c1wiICYmIGtleSAhPT0gXCJzdGF0dXNDb2RlXCIpIHtcbiAgICAgICAgICBlcnIyW2tleV0gPSBwcm9wc1trZXldO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gZXJyMjtcbiAgICB9XG4gICAgZnVuY3Rpb24gY3JlYXRlSHR0cEVycm9yQ29uc3RydWN0b3IoKSB7XG4gICAgICBmdW5jdGlvbiBIdHRwRXJyb3IoKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJjYW5ub3QgY29uc3RydWN0IGFic3RyYWN0IGNsYXNzXCIpO1xuICAgICAgfVxuICAgICAgaW5oZXJpdHMoSHR0cEVycm9yLCBFcnJvcik7XG4gICAgICByZXR1cm4gSHR0cEVycm9yO1xuICAgIH1cbiAgICBmdW5jdGlvbiBjcmVhdGVDbGllbnRFcnJvckNvbnN0cnVjdG9yKEh0dHBFcnJvciwgbmFtZSwgY29kZSkge1xuICAgICAgdmFyIGNsYXNzTmFtZSA9IHRvQ2xhc3NOYW1lKG5hbWUpO1xuICAgICAgZnVuY3Rpb24gQ2xpZW50RXJyb3IobWVzc2FnZSkge1xuICAgICAgICB2YXIgbXNnID0gbWVzc2FnZSAhPSBudWxsID8gbWVzc2FnZSA6IHN0YXR1c2VzLm1lc3NhZ2VbY29kZV07XG4gICAgICAgIHZhciBlcnIyID0gbmV3IEVycm9yKG1zZyk7XG4gICAgICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKGVycjIsIENsaWVudEVycm9yKTtcbiAgICAgICAgc2V0UHJvdG90eXBlT2YoZXJyMiwgQ2xpZW50RXJyb3IucHJvdG90eXBlKTtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGVycjIsIFwibWVzc2FnZVwiLCB7XG4gICAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICAgICAgdmFsdWU6IG1zZyxcbiAgICAgICAgICB3cml0YWJsZTogdHJ1ZVxuICAgICAgICB9KTtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGVycjIsIFwibmFtZVwiLCB7XG4gICAgICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICAgIHZhbHVlOiBjbGFzc05hbWUsXG4gICAgICAgICAgd3JpdGFibGU6IHRydWVcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBlcnIyO1xuICAgICAgfVxuICAgICAgaW5oZXJpdHMoQ2xpZW50RXJyb3IsIEh0dHBFcnJvcik7XG4gICAgICBuYW1lRnVuYyhDbGllbnRFcnJvciwgY2xhc3NOYW1lKTtcbiAgICAgIENsaWVudEVycm9yLnByb3RvdHlwZS5zdGF0dXMgPSBjb2RlO1xuICAgICAgQ2xpZW50RXJyb3IucHJvdG90eXBlLnN0YXR1c0NvZGUgPSBjb2RlO1xuICAgICAgQ2xpZW50RXJyb3IucHJvdG90eXBlLmV4cG9zZSA9IHRydWU7XG4gICAgICByZXR1cm4gQ2xpZW50RXJyb3I7XG4gICAgfVxuICAgIGZ1bmN0aW9uIGNyZWF0ZUlzSHR0cEVycm9yRnVuY3Rpb24oSHR0cEVycm9yKSB7XG4gICAgICByZXR1cm4gZnVuY3Rpb24gaXNIdHRwRXJyb3IodmFsKSB7XG4gICAgICAgIGlmICghdmFsIHx8IHR5cGVvZiB2YWwgIT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHZhbCBpbnN0YW5jZW9mIEh0dHBFcnJvcikge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2YWwgaW5zdGFuY2VvZiBFcnJvciAmJiB0eXBlb2YgdmFsLmV4cG9zZSA9PT0gXCJib29sZWFuXCIgJiYgdHlwZW9mIHZhbC5zdGF0dXNDb2RlID09PSBcIm51bWJlclwiICYmIHZhbC5zdGF0dXMgPT09IHZhbC5zdGF0dXNDb2RlO1xuICAgICAgfTtcbiAgICB9XG4gICAgZnVuY3Rpb24gY3JlYXRlU2VydmVyRXJyb3JDb25zdHJ1Y3RvcihIdHRwRXJyb3IsIG5hbWUsIGNvZGUpIHtcbiAgICAgIHZhciBjbGFzc05hbWUgPSB0b0NsYXNzTmFtZShuYW1lKTtcbiAgICAgIGZ1bmN0aW9uIFNlcnZlckVycm9yKG1lc3NhZ2UpIHtcbiAgICAgICAgdmFyIG1zZyA9IG1lc3NhZ2UgIT0gbnVsbCA/IG1lc3NhZ2UgOiBzdGF0dXNlcy5tZXNzYWdlW2NvZGVdO1xuICAgICAgICB2YXIgZXJyMiA9IG5ldyBFcnJvcihtc2cpO1xuICAgICAgICBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZShlcnIyLCBTZXJ2ZXJFcnJvcik7XG4gICAgICAgIHNldFByb3RvdHlwZU9mKGVycjIsIFNlcnZlckVycm9yLnByb3RvdHlwZSk7XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlcnIyLCBcIm1lc3NhZ2VcIiwge1xuICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgICAgIHZhbHVlOiBtc2csXG4gICAgICAgICAgd3JpdGFibGU6IHRydWVcbiAgICAgICAgfSk7XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlcnIyLCBcIm5hbWVcIiwge1xuICAgICAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICAgICAgICB2YWx1ZTogY2xhc3NOYW1lLFxuICAgICAgICAgIHdyaXRhYmxlOiB0cnVlXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gZXJyMjtcbiAgICAgIH1cbiAgICAgIGluaGVyaXRzKFNlcnZlckVycm9yLCBIdHRwRXJyb3IpO1xuICAgICAgbmFtZUZ1bmMoU2VydmVyRXJyb3IsIGNsYXNzTmFtZSk7XG4gICAgICBTZXJ2ZXJFcnJvci5wcm90b3R5cGUuc3RhdHVzID0gY29kZTtcbiAgICAgIFNlcnZlckVycm9yLnByb3RvdHlwZS5zdGF0dXNDb2RlID0gY29kZTtcbiAgICAgIFNlcnZlckVycm9yLnByb3RvdHlwZS5leHBvc2UgPSBmYWxzZTtcbiAgICAgIHJldHVybiBTZXJ2ZXJFcnJvcjtcbiAgICB9XG4gICAgZnVuY3Rpb24gbmFtZUZ1bmMoZnVuYywgbmFtZSkge1xuICAgICAgdmFyIGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGZ1bmMsIFwibmFtZVwiKTtcbiAgICAgIGlmIChkZXNjICYmIGRlc2MuY29uZmlndXJhYmxlKSB7XG4gICAgICAgIGRlc2MudmFsdWUgPSBuYW1lO1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZnVuYywgXCJuYW1lXCIsIGRlc2MpO1xuICAgICAgfVxuICAgIH1cbiAgICBmdW5jdGlvbiBwb3B1bGF0ZUNvbnN0cnVjdG9yRXhwb3J0cyhleHBvcnRzMywgY29kZXMsIEh0dHBFcnJvcikge1xuICAgICAgY29kZXMuZm9yRWFjaChmdW5jdGlvbiBmb3JFYWNoQ29kZShjb2RlKSB7XG4gICAgICAgIHZhciBDb2RlRXJyb3I7XG4gICAgICAgIHZhciBuYW1lID0gdG9JZGVudGlmaWVyKHN0YXR1c2VzLm1lc3NhZ2VbY29kZV0pO1xuICAgICAgICBzd2l0Y2ggKGNvZGVDbGFzcyhjb2RlKSkge1xuICAgICAgICAgIGNhc2UgNDAwOlxuICAgICAgICAgICAgQ29kZUVycm9yID0gY3JlYXRlQ2xpZW50RXJyb3JDb25zdHJ1Y3RvcihIdHRwRXJyb3IsIG5hbWUsIGNvZGUpO1xuICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgY2FzZSA1MDA6XG4gICAgICAgICAgICBDb2RlRXJyb3IgPSBjcmVhdGVTZXJ2ZXJFcnJvckNvbnN0cnVjdG9yKEh0dHBFcnJvciwgbmFtZSwgY29kZSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgICBpZiAoQ29kZUVycm9yKSB7XG4gICAgICAgICAgZXhwb3J0czNbY29kZV0gPSBDb2RlRXJyb3I7XG4gICAgICAgICAgZXhwb3J0czNbbmFtZV0gPSBDb2RlRXJyb3I7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgICBmdW5jdGlvbiB0b0NsYXNzTmFtZShuYW1lKSB7XG4gICAgICByZXR1cm4gbmFtZS5zdWJzdHIoLTUpICE9PSBcIkVycm9yXCIgPyBuYW1lICsgXCJFcnJvclwiIDogbmFtZTtcbiAgICB9XG4gIH1cbn0pO1xuXG4vLyBub2RlX21vZHVsZXMvc2FmZXItYnVmZmVyL3NhZmVyLmpzXG52YXIgcmVxdWlyZV9zYWZlciA9IF9fY29tbW9uSlMoe1xuICBcIm5vZGVfbW9kdWxlcy9zYWZlci1idWZmZXIvc2FmZXIuanNcIihleHBvcnRzMiwgbW9kdWxlMikge1xuICAgIFwidXNlIHN0cmljdFwiO1xuICAgIHZhciBidWZmZXIgPSByZXF1aXJlKFwiYnVmZmVyXCIpO1xuICAgIHZhciBCdWZmZXIyID0gYnVmZmVyLkJ1ZmZlcjtcbiAgICB2YXIgc2FmZXIgPSB7fTtcbiAgICB2YXIga2V5O1xuICAgIGZvciAoa2V5IGluIGJ1ZmZlcikge1xuICAgICAgaWYgKCFidWZmZXIuaGFzT3duUHJvcGVydHkoa2V5KSkgY29udGludWU7XG4gICAgICBpZiAoa2V5ID09PSBcIlNsb3dCdWZmZXJcIiB8fCBrZXkgPT09IFwiQnVmZmVyXCIpIGNvbnRpbnVlO1xuICAgICAgc2FmZXJba2V5XSA9IGJ1ZmZlcltrZXldO1xuICAgIH1cbiAgICB2YXIgU2FmZXIgPSBzYWZlci5CdWZmZXIgPSB7fTtcbiAgICBmb3IgKGtleSBpbiBCdWZmZXIyKSB7XG4gICAgICBpZiAoIUJ1ZmZlcjIuaGFzT3duUHJvcGVydHkoa2V5KSkgY29udGludWU7XG4gICAgICBpZiAoa2V5ID09PSBcImFsbG9jVW5zYWZlXCIgfHwga2V5ID09PSBcImFsbG9jVW5zYWZlU2xvd1wiKSBjb250aW51ZTtcbiAgICAgIFNhZmVyW2tleV0gPSBCdWZmZXIyW2tleV07XG4gICAgfVxuICAgIHNhZmVyLkJ1ZmZlci5wcm90b3R5cGUgPSBCdWZmZXIyLnByb3RvdHlwZTtcbiAgICBpZiAoIVNhZmVyLmZyb20gfHwgU2FmZXIuZnJvbSA9PT0gVWludDhBcnJheS5mcm9tKSB7XG4gICAgICBTYWZlci5mcm9tID0gZnVuY3Rpb24odmFsdWUsIGVuY29kaW5nT3JPZmZzZXQsIGxlbmd0aCkge1xuICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSBcIm51bWJlclwiKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVGhlIFwidmFsdWVcIiBhcmd1bWVudCBtdXN0IG5vdCBiZSBvZiB0eXBlIG51bWJlci4gUmVjZWl2ZWQgdHlwZSAnICsgdHlwZW9mIHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodmFsdWUgJiYgdHlwZW9mIHZhbHVlLmxlbmd0aCA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJUaGUgZmlyc3QgYXJndW1lbnQgbXVzdCBiZSBvbmUgb2YgdHlwZSBzdHJpbmcsIEJ1ZmZlciwgQXJyYXlCdWZmZXIsIEFycmF5LCBvciBBcnJheS1saWtlIE9iamVjdC4gUmVjZWl2ZWQgdHlwZSBcIiArIHR5cGVvZiB2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIEJ1ZmZlcjIodmFsdWUsIGVuY29kaW5nT3JPZmZzZXQsIGxlbmd0aCk7XG4gICAgICB9O1xuICAgIH1cbiAgICBpZiAoIVNhZmVyLmFsbG9jKSB7XG4gICAgICBTYWZlci5hbGxvYyA9IGZ1bmN0aW9uKHNpemUsIGZpbGwsIGVuY29kaW5nKSB7XG4gICAgICAgIGlmICh0eXBlb2Ygc2l6ZSAhPT0gXCJudW1iZXJcIikge1xuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSBcInNpemVcIiBhcmd1bWVudCBtdXN0IGJlIG9mIHR5cGUgbnVtYmVyLiBSZWNlaXZlZCB0eXBlICcgKyB0eXBlb2Ygc2l6ZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHNpemUgPCAwIHx8IHNpemUgPj0gMiAqICgxIDw8IDMwKSkge1xuICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdUaGUgdmFsdWUgXCInICsgc2l6ZSArICdcIiBpcyBpbnZhbGlkIGZvciBvcHRpb24gXCJzaXplXCInKTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgYnVmID0gQnVmZmVyMihzaXplKTtcbiAgICAgICAgaWYgKCFmaWxsIHx8IGZpbGwubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgYnVmLmZpbGwoMCk7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGVuY29kaW5nID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgYnVmLmZpbGwoZmlsbCwgZW5jb2RpbmcpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGJ1Zi5maWxsKGZpbGwpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBidWY7XG4gICAgICB9O1xuICAgIH1cbiAgICBpZiAoIXNhZmVyLmtTdHJpbmdNYXhMZW5ndGgpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHNhZmVyLmtTdHJpbmdNYXhMZW5ndGggPSBwcm9jZXNzLmJpbmRpbmcoXCJidWZmZXJcIikua1N0cmluZ01heExlbmd0aDtcbiAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKCFzYWZlci5jb25zdGFudHMpIHtcbiAgICAgIHNhZmVyLmNvbnN0YW50cyA9IHtcbiAgICAgICAgTUFYX0xFTkdUSDogc2FmZXIua01heExlbmd0aFxuICAgICAgfTtcbiAgICAgIGlmIChzYWZlci5rU3RyaW5nTWF4TGVuZ3RoKSB7XG4gICAgICAgIHNhZmVyLmNvbnN0YW50cy5NQVhfU1RSSU5HX0xFTkdUSCA9IHNhZmVyLmtTdHJpbmdNYXhMZW5ndGg7XG4gICAgICB9XG4gICAgfVxuICAgIG1vZHVsZTIuZXhwb3J0cyA9IHNhZmVyO1xuICB9XG59KTtcblxuLy8gbm9kZV9tb2R1bGVzL3Jhdy1ib2R5L25vZGVfbW9kdWxlcy9pY29udi1saXRlL2xpYi9ib20taGFuZGxpbmcuanNcbnZhciByZXF1aXJlX2JvbV9oYW5kbGluZyA9IF9fY29tbW9uSlMoe1xuICBcIm5vZGVfbW9kdWxlcy9yYXctYm9keS9ub2RlX21vZHVsZXMvaWNvbnYtbGl0ZS9saWIvYm9tLWhhbmRsaW5nLmpzXCIoZXhwb3J0czIpIHtcbiAgICBcInVzZSBzdHJpY3RcIjtcbiAgICB2YXIgQk9NQ2hhciA9IFwiXFx1RkVGRlwiO1xuICAgIGV4cG9ydHMyLlByZXBlbmRCT00gPSBQcmVwZW5kQk9NV3JhcHBlcjtcbiAgICBmdW5jdGlvbiBQcmVwZW5kQk9NV3JhcHBlcihlbmNvZGVyLCBvcHRpb25zKSB7XG4gICAgICB0aGlzLmVuY29kZXIgPSBlbmNvZGVyO1xuICAgICAgdGhpcy5hZGRCT00gPSB0cnVlO1xuICAgIH1cbiAgICBQcmVwZW5kQk9NV3JhcHBlci5wcm90b3R5cGUud3JpdGUgPSBmdW5jdGlvbihzdHIpIHtcbiAgICAgIGlmICh0aGlzLmFkZEJPTSkge1xuICAgICAgICBzdHIgPSBCT01DaGFyICsgc3RyO1xuICAgICAgICB0aGlzLmFkZEJPTSA9IGZhbHNlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXMuZW5jb2Rlci53cml0ZShzdHIpO1xuICAgIH07XG4gICAgUHJlcGVuZEJPTVdyYXBwZXIucHJvdG90eXBlLmVuZCA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZW5jb2Rlci5lbmQoKTtcbiAgICB9O1xuICAgIGV4cG9ydHMyLlN0cmlwQk9NID0gU3RyaXBCT01XcmFwcGVyO1xuICAgIGZ1bmN0aW9uIFN0cmlwQk9NV3JhcHBlcihkZWNvZGVyLCBvcHRpb25zKSB7XG4gICAgICB0aGlzLmRlY29kZXIgPSBkZWNvZGVyO1xuICAgICAgdGhpcy5wYXNzID0gZmFsc2U7XG4gICAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICAgIH1cbiAgICBTdHJpcEJPTVdyYXBwZXIucHJvdG90eXBlLndyaXRlID0gZnVuY3Rpb24oYnVmKSB7XG4gICAgICB2YXIgcmVzID0gdGhpcy5kZWNvZGVyLndyaXRlKGJ1Zik7XG4gICAgICBpZiAodGhpcy5wYXNzIHx8ICFyZXMpXG4gICAgICAgIHJldHVybiByZXM7XG4gICAgICBpZiAocmVzWzBdID09PSBCT01DaGFyKSB7XG4gICAgICAgIHJlcyA9IHJlcy5zbGljZSgxKTtcbiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLm9wdGlvbnMuc3RyaXBCT00gPT09IFwiZnVuY3Rpb25cIilcbiAgICAgICAgICB0aGlzLm9wdGlvbnMuc3RyaXBCT00oKTtcbiAgICAgIH1cbiAgICAgIHRoaXMucGFzcyA9IHRydWU7XG4gICAgICByZXR1cm4gcmVzO1xuICAgIH07XG4gICAgU3RyaXBCT01XcmFwcGVyLnByb3RvdHlwZS5lbmQgPSBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiB0aGlzLmRlY29kZXIuZW5kKCk7XG4gICAgfTtcbiAgfVxufSk7XG5cbi8vIG5vZGVfbW9kdWxlcy9yYXctYm9keS9ub2RlX21vZHVsZXMvaWNvbnYtbGl0ZS9lbmNvZGluZ3MvaW50ZXJuYWwuanNcbnZhciByZXF1aXJlX2ludGVybmFsID0gX19jb21tb25KUyh7XG4gIFwibm9kZV9tb2R1bGVzL3Jhdy1ib2R5L25vZGVfbW9kdWxlcy9pY29udi1saXRlL2VuY29kaW5ncy9pbnRlcm5hbC5qc1wiKGV4cG9ydHMyLCBtb2R1bGUyKSB7XG4gICAgXCJ1c2Ugc3RyaWN0XCI7XG4gICAgdmFyIEJ1ZmZlcjIgPSByZXF1aXJlX3NhZmVyKCkuQnVmZmVyO1xuICAgIG1vZHVsZTIuZXhwb3J0cyA9IHtcbiAgICAgIC8vIEVuY29kaW5nc1xuICAgICAgdXRmODogeyB0eXBlOiBcIl9pbnRlcm5hbFwiLCBib21Bd2FyZTogdHJ1ZSB9LFxuICAgICAgY2VzdTg6IHsgdHlwZTogXCJfaW50ZXJuYWxcIiwgYm9tQXdhcmU6IHRydWUgfSxcbiAgICAgIHVuaWNvZGUxMXV0Zjg6IFwidXRmOFwiLFxuICAgICAgdWNzMjogeyB0eXBlOiBcIl9pbnRlcm5hbFwiLCBib21Bd2FyZTogdHJ1ZSB9LFxuICAgICAgdXRmMTZsZTogXCJ1Y3MyXCIsXG4gICAgICBiaW5hcnk6IHsgdHlwZTogXCJfaW50ZXJuYWxcIiB9LFxuICAgICAgYmFzZTY0OiB7IHR5cGU6IFwiX2ludGVybmFsXCIgfSxcbiAgICAgIGhleDogeyB0eXBlOiBcIl9pbnRlcm5hbFwiIH0sXG4gICAgICAvLyBDb2RlYy5cbiAgICAgIF9pbnRlcm5hbDogSW50ZXJuYWxDb2RlY1xuICAgIH07XG4gICAgZnVuY3Rpb24gSW50ZXJuYWxDb2RlYyhjb2RlY09wdGlvbnMsIGljb252KSB7XG4gICAgICB0aGlzLmVuYyA9IGNvZGVjT3B0aW9ucy5lbmNvZGluZ05hbWU7XG4gICAgICB0aGlzLmJvbUF3YXJlID0gY29kZWNPcHRpb25zLmJvbUF3YXJlO1xuICAgICAgaWYgKHRoaXMuZW5jID09PSBcImJhc2U2NFwiKVxuICAgICAgICB0aGlzLmVuY29kZXIgPSBJbnRlcm5hbEVuY29kZXJCYXNlNjQ7XG4gICAgICBlbHNlIGlmICh0aGlzLmVuYyA9PT0gXCJjZXN1OFwiKSB7XG4gICAgICAgIHRoaXMuZW5jID0gXCJ1dGY4XCI7XG4gICAgICAgIHRoaXMuZW5jb2RlciA9IEludGVybmFsRW5jb2RlckNlc3U4O1xuICAgICAgICBpZiAoQnVmZmVyMi5mcm9tKFwiZWRhMGJkZWRiMmE5XCIsIFwiaGV4XCIpLnRvU3RyaW5nKCkgIT09IFwiXFx1ezFGNEE5fVwiKSB7XG4gICAgICAgICAgdGhpcy5kZWNvZGVyID0gSW50ZXJuYWxEZWNvZGVyQ2VzdTg7XG4gICAgICAgICAgdGhpcy5kZWZhdWx0Q2hhclVuaWNvZGUgPSBpY29udi5kZWZhdWx0Q2hhclVuaWNvZGU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgSW50ZXJuYWxDb2RlYy5wcm90b3R5cGUuZW5jb2RlciA9IEludGVybmFsRW5jb2RlcjtcbiAgICBJbnRlcm5hbENvZGVjLnByb3RvdHlwZS5kZWNvZGVyID0gSW50ZXJuYWxEZWNvZGVyO1xuICAgIHZhciBTdHJpbmdEZWNvZGVyID0gcmVxdWlyZShcInN0cmluZ19kZWNvZGVyXCIpLlN0cmluZ0RlY29kZXI7XG4gICAgaWYgKCFTdHJpbmdEZWNvZGVyLnByb3RvdHlwZS5lbmQpXG4gICAgICBTdHJpbmdEZWNvZGVyLnByb3RvdHlwZS5lbmQgPSBmdW5jdGlvbigpIHtcbiAgICAgIH07XG4gICAgZnVuY3Rpb24gSW50ZXJuYWxEZWNvZGVyKG9wdGlvbnMsIGNvZGVjKSB7XG4gICAgICB0aGlzLmRlY29kZXIgPSBuZXcgU3RyaW5nRGVjb2Rlcihjb2RlYy5lbmMpO1xuICAgIH1cbiAgICBJbnRlcm5hbERlY29kZXIucHJvdG90eXBlLndyaXRlID0gZnVuY3Rpb24oYnVmKSB7XG4gICAgICBpZiAoIUJ1ZmZlcjIuaXNCdWZmZXIoYnVmKSkge1xuICAgICAgICBidWYgPSBCdWZmZXIyLmZyb20oYnVmKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzLmRlY29kZXIud3JpdGUoYnVmKTtcbiAgICB9O1xuICAgIEludGVybmFsRGVjb2Rlci5wcm90b3R5cGUuZW5kID0gZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gdGhpcy5kZWNvZGVyLmVuZCgpO1xuICAgIH07XG4gICAgZnVuY3Rpb24gSW50ZXJuYWxFbmNvZGVyKG9wdGlvbnMsIGNvZGVjKSB7XG4gICAgICB0aGlzLmVuYyA9IGNvZGVjLmVuYztcbiAgICB9XG4gICAgSW50ZXJuYWxFbmNvZGVyLnByb3RvdHlwZS53cml0ZSA9IGZ1bmN0aW9uKHN0cikge1xuICAgICAgcmV0dXJuIEJ1ZmZlcjIuZnJvbShzdHIsIHRoaXMuZW5jKTtcbiAgICB9O1xuICAgIEludGVybmFsRW5jb2Rlci5wcm90b3R5cGUuZW5kID0gZnVuY3Rpb24oKSB7XG4gICAgfTtcbiAgICBmdW5jdGlvbiBJbnRlcm5hbEVuY29kZXJCYXNlNjQob3B0aW9ucywgY29kZWMpIHtcbiAgICAgIHRoaXMucHJldlN0ciA9IFwiXCI7XG4gICAgfVxuICAgIEludGVybmFsRW5jb2RlckJhc2U2NC5wcm90b3R5cGUud3JpdGUgPSBmdW5jdGlvbihzdHIpIHtcbiAgICAgIHN0ciA9IHRoaXMucHJldlN0ciArIHN0cjtcbiAgICAgIHZhciBjb21wbGV0ZVF1YWRzID0gc3RyLmxlbmd0aCAtIHN0ci5sZW5ndGggJSA0O1xuICAgICAgdGhpcy5wcmV2U3RyID0gc3RyLnNsaWNlKGNvbXBsZXRlUXVhZHMpO1xuICAgICAgc3RyID0gc3RyLnNsaWNlKDAsIGNvbXBsZXRlUXVhZHMpO1xuICAgICAgcmV0dXJuIEJ1ZmZlcjIuZnJvbShzdHIsIFwiYmFzZTY0XCIpO1xuICAgIH07XG4gICAgSW50ZXJuYWxFbmNvZGVyQmFzZTY0LnByb3RvdHlwZS5lbmQgPSBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiBCdWZmZXIyLmZyb20odGhpcy5wcmV2U3RyLCBcImJhc2U2NFwiKTtcbiAgICB9O1xuICAgIGZ1bmN0aW9uIEludGVybmFsRW5jb2RlckNlc3U4KG9wdGlvbnMsIGNvZGVjKSB7XG4gICAgfVxuICAgIEludGVybmFsRW5jb2RlckNlc3U4LnByb3RvdHlwZS53cml0ZSA9IGZ1bmN0aW9uKHN0cikge1xuICAgICAgdmFyIGJ1ZiA9IEJ1ZmZlcjIuYWxsb2Moc3RyLmxlbmd0aCAqIDMpLCBidWZJZHggPSAwO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdHIubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIGNoYXJDb2RlID0gc3RyLmNoYXJDb2RlQXQoaSk7XG4gICAgICAgIGlmIChjaGFyQ29kZSA8IDEyOClcbiAgICAgICAgICBidWZbYnVmSWR4KytdID0gY2hhckNvZGU7XG4gICAgICAgIGVsc2UgaWYgKGNoYXJDb2RlIDwgMjA0OCkge1xuICAgICAgICAgIGJ1ZltidWZJZHgrK10gPSAxOTIgKyAoY2hhckNvZGUgPj4+IDYpO1xuICAgICAgICAgIGJ1ZltidWZJZHgrK10gPSAxMjggKyAoY2hhckNvZGUgJiA2Myk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYnVmW2J1ZklkeCsrXSA9IDIyNCArIChjaGFyQ29kZSA+Pj4gMTIpO1xuICAgICAgICAgIGJ1ZltidWZJZHgrK10gPSAxMjggKyAoY2hhckNvZGUgPj4+IDYgJiA2Myk7XG4gICAgICAgICAgYnVmW2J1ZklkeCsrXSA9IDEyOCArIChjaGFyQ29kZSAmIDYzKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGJ1Zi5zbGljZSgwLCBidWZJZHgpO1xuICAgIH07XG4gICAgSW50ZXJuYWxFbmNvZGVyQ2VzdTgucHJvdG90eXBlLmVuZCA9IGZ1bmN0aW9uKCkge1xuICAgIH07XG4gICAgZnVuY3Rpb24gSW50ZXJuYWxEZWNvZGVyQ2VzdTgob3B0aW9ucywgY29kZWMpIHtcbiAgICAgIHRoaXMuYWNjID0gMDtcbiAgICAgIHRoaXMuY29udEJ5dGVzID0gMDtcbiAgICAgIHRoaXMuYWNjQnl0ZXMgPSAwO1xuICAgICAgdGhpcy5kZWZhdWx0Q2hhclVuaWNvZGUgPSBjb2RlYy5kZWZhdWx0Q2hhclVuaWNvZGU7XG4gICAgfVxuICAgIEludGVybmFsRGVjb2RlckNlc3U4LnByb3RvdHlwZS53cml0ZSA9IGZ1bmN0aW9uKGJ1Zikge1xuICAgICAgdmFyIGFjYyA9IHRoaXMuYWNjLCBjb250Qnl0ZXMgPSB0aGlzLmNvbnRCeXRlcywgYWNjQnl0ZXMgPSB0aGlzLmFjY0J5dGVzLCByZXMgPSBcIlwiO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBidWYubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgdmFyIGN1ckJ5dGUgPSBidWZbaV07XG4gICAgICAgIGlmICgoY3VyQnl0ZSAmIDE5MikgIT09IDEyOCkge1xuICAgICAgICAgIGlmIChjb250Qnl0ZXMgPiAwKSB7XG4gICAgICAgICAgICByZXMgKz0gdGhpcy5kZWZhdWx0Q2hhclVuaWNvZGU7XG4gICAgICAgICAgICBjb250Qnl0ZXMgPSAwO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoY3VyQnl0ZSA8IDEyOCkge1xuICAgICAgICAgICAgcmVzICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoY3VyQnl0ZSk7XG4gICAgICAgICAgfSBlbHNlIGlmIChjdXJCeXRlIDwgMjI0KSB7XG4gICAgICAgICAgICBhY2MgPSBjdXJCeXRlICYgMzE7XG4gICAgICAgICAgICBjb250Qnl0ZXMgPSAxO1xuICAgICAgICAgICAgYWNjQnl0ZXMgPSAxO1xuICAgICAgICAgIH0gZWxzZSBpZiAoY3VyQnl0ZSA8IDI0MCkge1xuICAgICAgICAgICAgYWNjID0gY3VyQnl0ZSAmIDE1O1xuICAgICAgICAgICAgY29udEJ5dGVzID0gMjtcbiAgICAgICAgICAgIGFjY0J5dGVzID0gMTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVzICs9IHRoaXMuZGVmYXVsdENoYXJVbmljb2RlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAoY29udEJ5dGVzID4gMCkge1xuICAgICAgICAgICAgYWNjID0gYWNjIDw8IDYgfCBjdXJCeXRlICYgNjM7XG4gICAgICAgICAgICBjb250Qnl0ZXMtLTtcbiAgICAgICAgICAgIGFjY0J5dGVzKys7XG4gICAgICAgICAgICBpZiAoY29udEJ5dGVzID09PSAwKSB7XG4gICAgICAgICAgICAgIGlmIChhY2NCeXRlcyA9PT0gMiAmJiBhY2MgPCAxMjggJiYgYWNjID4gMClcbiAgICAgICAgICAgICAgICByZXMgKz0gdGhpcy5kZWZhdWx0Q2hhclVuaWNvZGU7XG4gICAgICAgICAgICAgIGVsc2UgaWYgKGFjY0J5dGVzID09PSAzICYmIGFjYyA8IDIwNDgpXG4gICAgICAgICAgICAgICAgcmVzICs9IHRoaXMuZGVmYXVsdENoYXJVbmljb2RlO1xuICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgcmVzICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoYWNjKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVzICs9IHRoaXMuZGVmYXVsdENoYXJVbmljb2RlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdGhpcy5hY2MgPSBhY2M7XG4gICAgICB0aGlzLmNvbnRCeXRlcyA9IGNvbnRCeXRlcztcbiAgICAgIHRoaXMuYWNjQnl0ZXMgPSBhY2NCeXRlcztcbiAgICAgIHJldHVybiByZXM7XG4gICAgfTtcbiAgICBJbnRlcm5hbERlY29kZXJDZXN1OC5wcm90b3R5cGUuZW5kID0gZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgcmVzID0gMDtcbiAgICAgIGlmICh0aGlzLmNvbnRCeXRlcyA+IDApXG4gICAgICAgIHJlcyArPSB0aGlzLmRlZmF1bHRDaGFyVW5pY29kZTtcbiAgICAgIHJldHVybiByZXM7XG4gICAgfTtcbiAgfVxufSk7XG5cbi8vIG5vZGVfbW9kdWxlcy9yYXctYm9keS9ub2RlX21vZHVsZXMvaWNvbnYtbGl0ZS9lbmNvZGluZ3MvdXRmMzIuanNcbnZhciByZXF1aXJlX3V0ZjMyID0gX19jb21tb25KUyh7XG4gIFwibm9kZV9tb2R1bGVzL3Jhdy1ib2R5L25vZGVfbW9kdWxlcy9pY29udi1saXRlL2VuY29kaW5ncy91dGYzMi5qc1wiKGV4cG9ydHMyKSB7XG4gICAgXCJ1c2Ugc3RyaWN0XCI7XG4gICAgdmFyIEJ1ZmZlcjIgPSByZXF1aXJlX3NhZmVyKCkuQnVmZmVyO1xuICAgIGV4cG9ydHMyLl91dGYzMiA9IFV0ZjMyQ29kZWM7XG4gICAgZnVuY3Rpb24gVXRmMzJDb2RlYyhjb2RlY09wdGlvbnMsIGljb252KSB7XG4gICAgICB0aGlzLmljb252ID0gaWNvbnY7XG4gICAgICB0aGlzLmJvbUF3YXJlID0gdHJ1ZTtcbiAgICAgIHRoaXMuaXNMRSA9IGNvZGVjT3B0aW9ucy5pc0xFO1xuICAgIH1cbiAgICBleHBvcnRzMi51dGYzMmxlID0geyB0eXBlOiBcIl91dGYzMlwiLCBpc0xFOiB0cnVlIH07XG4gICAgZXhwb3J0czIudXRmMzJiZSA9IHsgdHlwZTogXCJfdXRmMzJcIiwgaXNMRTogZmFsc2UgfTtcbiAgICBleHBvcnRzMi51Y3M0bGUgPSBcInV0ZjMybGVcIjtcbiAgICBleHBvcnRzMi51Y3M0YmUgPSBcInV0ZjMyYmVcIjtcbiAgICBVdGYzMkNvZGVjLnByb3RvdHlwZS5lbmNvZGVyID0gVXRmMzJFbmNvZGVyO1xuICAgIFV0ZjMyQ29kZWMucHJvdG90eXBlLmRlY29kZXIgPSBVdGYzMkRlY29kZXI7XG4gICAgZnVuY3Rpb24gVXRmMzJFbmNvZGVyKG9wdGlvbnMsIGNvZGVjKSB7XG4gICAgICB0aGlzLmlzTEUgPSBjb2RlYy5pc0xFO1xuICAgICAgdGhpcy5oaWdoU3Vycm9nYXRlID0gMDtcbiAgICB9XG4gICAgVXRmMzJFbmNvZGVyLnByb3RvdHlwZS53cml0ZSA9IGZ1bmN0aW9uKHN0cikge1xuICAgICAgdmFyIHNyYyA9IEJ1ZmZlcjIuZnJvbShzdHIsIFwidWNzMlwiKTtcbiAgICAgIHZhciBkc3QgPSBCdWZmZXIyLmFsbG9jKHNyYy5sZW5ndGggKiAyKTtcbiAgICAgIHZhciB3cml0ZTMyID0gdGhpcy5pc0xFID8gZHN0LndyaXRlVUludDMyTEUgOiBkc3Qud3JpdGVVSW50MzJCRTtcbiAgICAgIHZhciBvZmZzZXQgPSAwO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzcmMubGVuZ3RoOyBpICs9IDIpIHtcbiAgICAgICAgdmFyIGNvZGUgPSBzcmMucmVhZFVJbnQxNkxFKGkpO1xuICAgICAgICB2YXIgaXNIaWdoU3Vycm9nYXRlID0gNTUyOTYgPD0gY29kZSAmJiBjb2RlIDwgNTYzMjA7XG4gICAgICAgIHZhciBpc0xvd1N1cnJvZ2F0ZSA9IDU2MzIwIDw9IGNvZGUgJiYgY29kZSA8IDU3MzQ0O1xuICAgICAgICBpZiAodGhpcy5oaWdoU3Vycm9nYXRlKSB7XG4gICAgICAgICAgaWYgKGlzSGlnaFN1cnJvZ2F0ZSB8fCAhaXNMb3dTdXJyb2dhdGUpIHtcbiAgICAgICAgICAgIHdyaXRlMzIuY2FsbChkc3QsIHRoaXMuaGlnaFN1cnJvZ2F0ZSwgb2Zmc2V0KTtcbiAgICAgICAgICAgIG9mZnNldCArPSA0O1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB2YXIgY29kZXBvaW50ID0gKHRoaXMuaGlnaFN1cnJvZ2F0ZSAtIDU1Mjk2IDw8IDEwIHwgY29kZSAtIDU2MzIwKSArIDY1NTM2O1xuICAgICAgICAgICAgd3JpdGUzMi5jYWxsKGRzdCwgY29kZXBvaW50LCBvZmZzZXQpO1xuICAgICAgICAgICAgb2Zmc2V0ICs9IDQ7XG4gICAgICAgICAgICB0aGlzLmhpZ2hTdXJyb2dhdGUgPSAwO1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChpc0hpZ2hTdXJyb2dhdGUpXG4gICAgICAgICAgdGhpcy5oaWdoU3Vycm9nYXRlID0gY29kZTtcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgd3JpdGUzMi5jYWxsKGRzdCwgY29kZSwgb2Zmc2V0KTtcbiAgICAgICAgICBvZmZzZXQgKz0gNDtcbiAgICAgICAgICB0aGlzLmhpZ2hTdXJyb2dhdGUgPSAwO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAob2Zmc2V0IDwgZHN0Lmxlbmd0aClcbiAgICAgICAgZHN0ID0gZHN0LnNsaWNlKDAsIG9mZnNldCk7XG4gICAgICByZXR1cm4gZHN0O1xuICAgIH07XG4gICAgVXRmMzJFbmNvZGVyLnByb3RvdHlwZS5lbmQgPSBmdW5jdGlvbigpIHtcbiAgICAgIGlmICghdGhpcy5oaWdoU3Vycm9nYXRlKVxuICAgICAgICByZXR1cm47XG4gICAgICB2YXIgYnVmID0gQnVmZmVyMi5hbGxvYyg0KTtcbiAgICAgIGlmICh0aGlzLmlzTEUpXG4gICAgICAgIGJ1Zi53cml0ZVVJbnQzMkxFKHRoaXMuaGlnaFN1cnJvZ2F0ZSwgMCk7XG4gICAgICBlbHNlXG4gICAgICAgIGJ1Zi53cml0ZVVJbnQzMkJFKHRoaXMuaGlnaFN1cnJvZ2F0ZSwgMCk7XG4gICAgICB0aGlzLmhpZ2hTdXJyb2dhdGUgPSAwO1xuICAgICAgcmV0dXJuIGJ1ZjtcbiAgICB9O1xuICAgIGZ1bmN0aW9uIFV0ZjMyRGVjb2RlcihvcHRpb25zLCBjb2RlYykge1xuICAgICAgdGhpcy5pc0xFID0gY29kZWMuaXNMRTtcbiAgICAgIHRoaXMuYmFkQ2hhciA9IGNvZGVjLmljb252LmRlZmF1bHRDaGFyVW5pY29kZS5jaGFyQ29kZUF0KDApO1xuICAgICAgdGhpcy5vdmVyZmxvdyA9IFtdO1xuICAgIH1cbiAgICBVdGYzMkRlY29kZXIucHJvdG90eXBlLndyaXRlID0gZnVuY3Rpb24oc3JjKSB7XG4gICAgICBpZiAoc3JjLmxlbmd0aCA9PT0gMClcbiAgICAgICAgcmV0dXJuIFwiXCI7XG4gICAgICB2YXIgaSA9IDA7XG4gICAgICB2YXIgY29kZXBvaW50ID0gMDtcbiAgICAgIHZhciBkc3QgPSBCdWZmZXIyLmFsbG9jKHNyYy5sZW5ndGggKyA0KTtcbiAgICAgIHZhciBvZmZzZXQgPSAwO1xuICAgICAgdmFyIGlzTEUgPSB0aGlzLmlzTEU7XG4gICAgICB2YXIgb3ZlcmZsb3cgPSB0aGlzLm92ZXJmbG93O1xuICAgICAgdmFyIGJhZENoYXIgPSB0aGlzLmJhZENoYXI7XG4gICAgICBpZiAob3ZlcmZsb3cubGVuZ3RoID4gMCkge1xuICAgICAgICBmb3IgKDsgaSA8IHNyYy5sZW5ndGggJiYgb3ZlcmZsb3cubGVuZ3RoIDwgNDsgaSsrKVxuICAgICAgICAgIG92ZXJmbG93LnB1c2goc3JjW2ldKTtcbiAgICAgICAgaWYgKG92ZXJmbG93Lmxlbmd0aCA9PT0gNCkge1xuICAgICAgICAgIGlmIChpc0xFKSB7XG4gICAgICAgICAgICBjb2RlcG9pbnQgPSBvdmVyZmxvd1tpXSB8IG92ZXJmbG93W2kgKyAxXSA8PCA4IHwgb3ZlcmZsb3dbaSArIDJdIDw8IDE2IHwgb3ZlcmZsb3dbaSArIDNdIDw8IDI0O1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb2RlcG9pbnQgPSBvdmVyZmxvd1tpICsgM10gfCBvdmVyZmxvd1tpICsgMl0gPDwgOCB8IG92ZXJmbG93W2kgKyAxXSA8PCAxNiB8IG92ZXJmbG93W2ldIDw8IDI0O1xuICAgICAgICAgIH1cbiAgICAgICAgICBvdmVyZmxvdy5sZW5ndGggPSAwO1xuICAgICAgICAgIG9mZnNldCA9IF93cml0ZUNvZGVwb2ludChkc3QsIG9mZnNldCwgY29kZXBvaW50LCBiYWRDaGFyKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZm9yICg7IGkgPCBzcmMubGVuZ3RoIC0gMzsgaSArPSA0KSB7XG4gICAgICAgIGlmIChpc0xFKSB7XG4gICAgICAgICAgY29kZXBvaW50ID0gc3JjW2ldIHwgc3JjW2kgKyAxXSA8PCA4IHwgc3JjW2kgKyAyXSA8PCAxNiB8IHNyY1tpICsgM10gPDwgMjQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29kZXBvaW50ID0gc3JjW2kgKyAzXSB8IHNyY1tpICsgMl0gPDwgOCB8IHNyY1tpICsgMV0gPDwgMTYgfCBzcmNbaV0gPDwgMjQ7XG4gICAgICAgIH1cbiAgICAgICAgb2Zmc2V0ID0gX3dyaXRlQ29kZXBvaW50KGRzdCwgb2Zmc2V0LCBjb2RlcG9pbnQsIGJhZENoYXIpO1xuICAgICAgfVxuICAgICAgZm9yICg7IGkgPCBzcmMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgb3ZlcmZsb3cucHVzaChzcmNbaV0pO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGRzdC5zbGljZSgwLCBvZmZzZXQpLnRvU3RyaW5nKFwidWNzMlwiKTtcbiAgICB9O1xuICAgIGZ1bmN0aW9uIF93cml0ZUNvZGVwb2ludChkc3QsIG9mZnNldCwgY29kZXBvaW50LCBiYWRDaGFyKSB7XG4gICAgICBpZiAoY29kZXBvaW50IDwgMCB8fCBjb2RlcG9pbnQgPiAxMTE0MTExKSB7XG4gICAgICAgIGNvZGVwb2ludCA9IGJhZENoYXI7XG4gICAgICB9XG4gICAgICBpZiAoY29kZXBvaW50ID49IDY1NTM2KSB7XG4gICAgICAgIGNvZGVwb2ludCAtPSA2NTUzNjtcbiAgICAgICAgdmFyIGhpZ2ggPSA1NTI5NiB8IGNvZGVwb2ludCA+PiAxMDtcbiAgICAgICAgZHN0W29mZnNldCsrXSA9IGhpZ2ggJiAyNTU7XG4gICAgICAgIGRzdFtvZmZzZXQrK10gPSBoaWdoID4+IDg7XG4gICAgICAgIHZhciBjb2RlcG9pbnQgPSA1NjMyMCB8IGNvZGVwb2ludCAmIDEwMjM7XG4gICAgICB9XG4gICAgICBkc3Rbb2Zmc2V0KytdID0gY29kZXBvaW50ICYgMjU1O1xuICAgICAgZHN0W29mZnNldCsrXSA9IGNvZGVwb2ludCA+PiA4O1xuICAgICAgcmV0dXJuIG9mZnNldDtcbiAgICB9XG4gICAgVXRmMzJEZWNvZGVyLnByb3RvdHlwZS5lbmQgPSBmdW5jdGlvbigpIHtcbiAgICAgIHRoaXMub3ZlcmZsb3cubGVuZ3RoID0gMDtcbiAgICB9O1xuICAgIGV4cG9ydHMyLnV0ZjMyID0gVXRmMzJBdXRvQ29kZWM7XG4gICAgZXhwb3J0czIudWNzNCA9IFwidXRmMzJcIjtcbiAgICBmdW5jdGlvbiBVdGYzMkF1dG9Db2RlYyhvcHRpb25zLCBpY29udikge1xuICAgICAgdGhpcy5pY29udiA9IGljb252O1xuICAgIH1cbiAgICBVdGYzMkF1dG9Db2RlYy5wcm90b3R5cGUuZW5jb2RlciA9IFV0ZjMyQXV0b0VuY29kZXI7XG4gICAgVXRmMzJBdXRvQ29kZWMucHJvdG90eXBlLmRlY29kZXIgPSBVdGYzMkF1dG9EZWNvZGVyO1xuICAgIGZ1bmN0aW9uIFV0ZjMyQXV0b0VuY29kZXIob3B0aW9ucywgY29kZWMpIHtcbiAgICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICAgICAgaWYgKG9wdGlvbnMuYWRkQk9NID09PSB2b2lkIDApXG4gICAgICAgIG9wdGlvbnMuYWRkQk9NID0gdHJ1ZTtcbiAgICAgIHRoaXMuZW5jb2RlciA9IGNvZGVjLmljb252LmdldEVuY29kZXIob3B0aW9ucy5kZWZhdWx0RW5jb2RpbmcgfHwgXCJ1dGYtMzJsZVwiLCBvcHRpb25zKTtcbiAgICB9XG4gICAgVXRmMzJBdXRvRW5jb2Rlci5wcm90b3R5cGUud3JpdGUgPSBmdW5jdGlvbihzdHIpIHtcbiAgICAgIHJldHVybiB0aGlzLmVuY29kZXIud3JpdGUoc3RyKTtcbiAgICB9O1xuICAgIFV0ZjMyQXV0b0VuY29kZXIucHJvdG90eXBlLmVuZCA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIHRoaXMuZW5jb2Rlci5lbmQoKTtcbiAgICB9O1xuICAgIGZ1bmN0aW9uIFV0ZjMyQXV0b0RlY29kZXIob3B0aW9ucywgY29kZWMpIHtcbiAgICAgIHRoaXMuZGVjb2RlciA9IG51bGw7XG4gICAgICB0aGlzLmluaXRpYWxCdWZzID0gW107XG4gICAgICB0aGlzLmluaXRpYWxCdWZzTGVuID0gMDtcbiAgICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gICAgICB0aGlzLmljb252ID0gY29kZWMuaWNvbnY7XG4gICAgfVxuICAgIFV0ZjMyQXV0b0RlY29kZXIucHJvdG90eXBlLndyaXRlID0gZnVuY3Rpb24oYnVmKSB7XG4gICAgICBpZiAoIXRoaXMuZGVjb2Rlcikge1xuICAgICAgICB0aGlzLmluaXRpYWxCdWZzLnB1c2goYnVmKTtcbiAgICAgICAgdGhpcy5pbml0aWFsQnVmc0xlbiArPSBidWYubGVuZ3RoO1xuICAgICAgICBpZiAodGhpcy5pbml0aWFsQnVmc0xlbiA8IDMyKVxuICAgICAgICAgIHJldHVybiBcIlwiO1xuICAgICAgICB2YXIgZW5jb2RpbmcgPSBkZXRlY3RFbmNvZGluZyh0aGlzLmluaXRpYWxCdWZzLCB0aGlzLm9wdGlvbnMuZGVmYXVsdEVuY29kaW5nKTtcbiAgICAgICAgdGhpcy5kZWNvZGVyID0gdGhpcy5pY29udi5nZXREZWNvZGVyKGVuY29kaW5nLCB0aGlzLm9wdGlvbnMpO1xuICAgICAgICB2YXIgcmVzU3RyID0gXCJcIjtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmluaXRpYWxCdWZzLmxlbmd0aDsgaSsrKVxuICAgICAgICAgIHJlc1N0ciArPSB0aGlzLmRlY29kZXIud3JpdGUodGhpcy5pbml0aWFsQnVmc1tpXSk7XG4gICAgICAgIHRoaXMuaW5pdGlhbEJ1ZnMubGVuZ3RoID0gdGhpcy5pbml0aWFsQnVmc0xlbiA9IDA7XG4gICAgICAgIHJldHVybiByZXNTdHI7XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcy5kZWNvZGVyLndyaXRlKGJ1Zik7XG4gICAgfTtcbiAgICBVdGYzMkF1dG9EZWNvZGVyLnByb3RvdHlwZS5lbmQgPSBmdW5jdGlvbigpIHtcbiAgICAgIGlmICghdGhpcy5kZWNvZGVyKSB7XG4gICAgICAgIHZhciBlbmNvZGluZyA9IGRldGVjdEVuY29kaW5nKHRoaXMuaW5pdGlhbEJ1ZnMsIHRoaXMub3B0aW9ucy5kZWZhdWx0RW5jb2RpbmcpO1xuICAgICAgICB0aGlzLmRlY29kZXIgPSB0aGlzLmljb252LmdldERlY29kZXIoZW5jb2RpbmcsIHRoaXMub3B0aW9ucyk7XG4gICAgICAgIHZhciByZXNTdHIgPSBcIlwiO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuaW5pdGlhbEJ1ZnMubGVuZ3RoOyBpKyspXG4gICAgICAgICAgcmVzU3RyICs9IHRoaXMuZGVjb2Rlci53cml0ZSh0aGlzLmluaXRpYWxCdWZzW2ldKTtcbiAgICAgICAgdmFyIHRyYWlsID0gdGhpcy5kZWNvZGVyLmVuZCgpO1xuICAgICAgICBpZiAodHJhaWwpXG4gICAgICAgICAgcmVzU3RyICs9IHRyYWlsO1xuICAgICAgICB0aGlzLmluaXRpYWxCdWZzLmxlbmd0aCA9IHRoaXMuaW5pdGlhbEJ1ZnNMZW4gPSAwO1xuICAgICAgICByZXR1cm4gcmVzU3RyO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXMuZGVjb2Rlci5lbmQoKTtcbiAgICB9O1xuICAgIGZ1bmN0aW9uIGRldGVjdEVuY29kaW5nKGJ1ZnMsIGRlZmF1bHRFbmNvZGluZykge1xuICAgICAgdmFyIGIgPSBbXTtcbiAgICAgIHZhciBjaGFyc1Byb2Nlc3NlZCA9IDA7XG4gICAgICB2YXIgaW52YWxpZExFID0gMCwgaW52YWxpZEJFID0gMDtcbiAgICAgIHZhciBibXBDaGFyc0xFID0gMCwgYm1wQ2hhcnNCRSA9IDA7XG4gICAgICBvdXRlcl9sb29wOlxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGJ1ZnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICB2YXIgYnVmID0gYnVmc1tpXTtcbiAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGJ1Zi5sZW5ndGg7IGorKykge1xuICAgICAgICAgICAgYi5wdXNoKGJ1ZltqXSk7XG4gICAgICAgICAgICBpZiAoYi5sZW5ndGggPT09IDQpIHtcbiAgICAgICAgICAgICAgaWYgKGNoYXJzUHJvY2Vzc2VkID09PSAwKSB7XG4gICAgICAgICAgICAgICAgaWYgKGJbMF0gPT09IDI1NSAmJiBiWzFdID09PSAyNTQgJiYgYlsyXSA9PT0gMCAmJiBiWzNdID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gXCJ1dGYtMzJsZVwiO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoYlswXSA9PT0gMCAmJiBiWzFdID09PSAwICYmIGJbMl0gPT09IDI1NCAmJiBiWzNdID09PSAyNTUpIHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBcInV0Zi0zMmJlXCI7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIGlmIChiWzBdICE9PSAwIHx8IGJbMV0gPiAxNikgaW52YWxpZEJFKys7XG4gICAgICAgICAgICAgIGlmIChiWzNdICE9PSAwIHx8IGJbMl0gPiAxNikgaW52YWxpZExFKys7XG4gICAgICAgICAgICAgIGlmIChiWzBdID09PSAwICYmIGJbMV0gPT09IDAgJiYgKGJbMl0gIT09IDAgfHwgYlszXSAhPT0gMCkpIGJtcENoYXJzQkUrKztcbiAgICAgICAgICAgICAgaWYgKChiWzBdICE9PSAwIHx8IGJbMV0gIT09IDApICYmIGJbMl0gPT09IDAgJiYgYlszXSA9PT0gMCkgYm1wQ2hhcnNMRSsrO1xuICAgICAgICAgICAgICBiLmxlbmd0aCA9IDA7XG4gICAgICAgICAgICAgIGNoYXJzUHJvY2Vzc2VkKys7XG4gICAgICAgICAgICAgIGlmIChjaGFyc1Byb2Nlc3NlZCA+PSAxMDApIHtcbiAgICAgICAgICAgICAgICBicmVhayBvdXRlcl9sb29wO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICBpZiAoYm1wQ2hhcnNCRSAtIGludmFsaWRCRSA+IGJtcENoYXJzTEUgLSBpbnZhbGlkTEUpIHJldHVybiBcInV0Zi0zMmJlXCI7XG4gICAgICBpZiAoYm1wQ2hhcnNCRSAtIGludmFsaWRCRSA8IGJtcENoYXJzTEUgLSBpbnZhbGlkTEUpIHJldHVybiBcInV0Zi0zMmxlXCI7XG4gICAgICByZXR1cm4gZGVmYXVsdEVuY29kaW5nIHx8IFwidXRmLTMybGVcIjtcbiAgICB9XG4gIH1cbn0pO1xuXG4vLyBub2RlX21vZHVsZXMvcmF3LWJvZHkvbm9kZV9tb2R1bGVzL2ljb252LWxpdGUvZW5jb2RpbmdzL3V0ZjE2LmpzXG52YXIgcmVxdWlyZV91dGYxNiA9IF9fY29tbW9uSlMoe1xuICBcIm5vZGVfbW9kdWxlcy9yYXctYm9keS9ub2RlX21vZHVsZXMvaWNvbnYtbGl0ZS9lbmNvZGluZ3MvdXRmMTYuanNcIihleHBvcnRzMikge1xuICAgIFwidXNlIHN0cmljdFwiO1xuICAgIHZhciBCdWZmZXIyID0gcmVxdWlyZV9zYWZlcigpLkJ1ZmZlcjtcbiAgICBleHBvcnRzMi51dGYxNmJlID0gVXRmMTZCRUNvZGVjO1xuICAgIGZ1bmN0aW9uIFV0ZjE2QkVDb2RlYygpIHtcbiAgICB9XG4gICAgVXRmMTZCRUNvZGVjLnByb3RvdHlwZS5lbmNvZGVyID0gVXRmMTZCRUVuY29kZXI7XG4gICAgVXRmMTZCRUNvZGVjLnByb3RvdHlwZS5kZWNvZGVyID0gVXRmMTZCRURlY29kZXI7XG4gICAgVXRmMTZCRUNvZGVjLnByb3RvdHlwZS5ib21Bd2FyZSA9IHRydWU7XG4gICAgZnVuY3Rpb24gVXRmMTZCRUVuY29kZXIoKSB7XG4gICAgfVxuICAgIFV0ZjE2QkVFbmNvZGVyLnByb3RvdHlwZS53cml0ZSA9IGZ1bmN0aW9uKHN0cikge1xuICAgICAgdmFyIGJ1ZiA9IEJ1ZmZlcjIuZnJvbShzdHIsIFwidWNzMlwiKTtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYnVmLmxlbmd0aDsgaSArPSAyKSB7XG4gICAgICAgIHZhciB0bXAgPSBidWZbaV07XG4gICAgICAgIGJ1ZltpXSA9IGJ1ZltpICsgMV07XG4gICAgICAgIGJ1ZltpICsgMV0gPSB0bXA7XG4gICAgICB9XG4gICAgICByZXR1cm4gYnVmO1xuICAgIH07XG4gICAgVXRmMTZCRUVuY29kZXIucHJvdG90eXBlLmVuZCA9IGZ1bmN0aW9uKCkge1xuICAgIH07XG4gICAgZnVuY3Rpb24gVXRmMTZCRURlY29kZXIoKSB7XG4gICAgICB0aGlzLm92ZXJmbG93Qnl0ZSA9IC0xO1xuICAgIH1cbiAgICBVdGYxNkJFRGVjb2Rlci5wcm90b3R5cGUud3JpdGUgPSBmdW5jdGlvbihidWYpIHtcbiAgICAgIGlmIChidWYubGVuZ3RoID09IDApXG4gICAgICAgIHJldHVybiBcIlwiO1xuICAgICAgdmFyIGJ1ZjIgPSBCdWZmZXIyLmFsbG9jKGJ1Zi5sZW5ndGggKyAxKSwgaSA9IDAsIGogPSAwO1xuICAgICAgaWYgKHRoaXMub3ZlcmZsb3dCeXRlICE9PSAtMSkge1xuICAgICAgICBidWYyWzBdID0gYnVmWzBdO1xuICAgICAgICBidWYyWzFdID0gdGhpcy5vdmVyZmxvd0J5dGU7XG4gICAgICAgIGkgPSAxO1xuICAgICAgICBqID0gMjtcbiAgICAgIH1cbiAgICAgIGZvciAoOyBpIDwgYnVmLmxlbmd0aCAtIDE7IGkgKz0gMiwgaiArPSAyKSB7XG4gICAgICAgIGJ1ZjJbal0gPSBidWZbaSArIDFdO1xuICAgICAgICBidWYyW2ogKyAxXSA9IGJ1ZltpXTtcbiAgICAgIH1cbiAgICAgIHRoaXMub3ZlcmZsb3dCeXRlID0gaSA9PSBidWYubGVuZ3RoIC0gMSA/IGJ1ZltidWYubGVuZ3RoIC0gMV0gOiAtMTtcbiAgICAgIHJldHVybiBidWYyLnNsaWNlKDAsIGopLnRvU3RyaW5nKFwidWNzMlwiKTtcbiAgICB9O1xuICAgIFV0ZjE2QkVEZWNvZGVyLnByb3RvdHlwZS5lbmQgPSBmdW5jdGlvbigpIHtcbiAgICAgIHRoaXMub3ZlcmZsb3dCeXRlID0gLTE7XG4gICAgfTtcbiAgICBleHBvcnRzMi51dGYxNiA9IFV0ZjE2Q29kZWM7XG4gICAgZnVuY3Rpb24gVXRmMTZDb2RlYyhjb2RlY09wdGlvbnMsIGljb252KSB7XG4gICAgICB0aGlzLmljb252ID0gaWNvbnY7XG4gICAgfVxuICAgIFV0ZjE2Q29kZWMucHJvdG90eXBlLmVuY29kZXIgPSBVdGYxNkVuY29kZXI7XG4gICAgVXRmMTZDb2RlYy5wcm90b3R5cGUuZGVjb2RlciA9IFV0ZjE2RGVjb2RlcjtcbiAgICBmdW5jdGlvbiBVdGYxNkVuY29kZXIob3B0aW9ucywgY29kZWMpIHtcbiAgICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICAgICAgaWYgKG9wdGlvbnMuYWRkQk9NID09PSB2b2lkIDApXG4gICAgICAgIG9wdGlvbnMuYWRkQk9NID0gdHJ1ZTtcbiAgICAgIHRoaXMuZW5jb2RlciA9IGNvZGVjLmljb252LmdldEVuY29kZXIoXCJ1dGYtMTZsZVwiLCBvcHRpb25zKTtcbiAgICB9XG4gICAgVXRmMTZFbmNvZGVyLnByb3RvdHlwZS53cml0ZSA9IGZ1bmN0aW9uKHN0cikge1xuICAgICAgcmV0dXJuIHRoaXMuZW5jb2Rlci53cml0ZShzdHIpO1xuICAgIH07XG4gICAgVXRmMTZFbmNvZGVyLnByb3RvdHlwZS5lbmQgPSBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiB0aGlzLmVuY29kZXIuZW5kKCk7XG4gICAgfTtcbiAgICBmdW5jdGlvbiBVdGYxNkRlY29kZXIob3B0aW9ucywgY29kZWMpIHtcbiAgICAgIHRoaXMuZGVjb2RlciA9IG51bGw7XG4gICAgICB0aGlzLmluaXRpYWxCdWZzID0gW107XG4gICAgICB0aGlzLmluaXRpYWxCdWZzTGVuID0gMDtcbiAgICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gICAgICB0aGlzLmljb252ID0gY29kZWMuaWNvbnY7XG4gICAgfVxuICAgIFV0ZjE2RGVjb2Rlci5wcm90b3R5cGUud3JpdGUgPSBmdW5jdGlvbihidWYpIHtcbiAgICAgIGlmICghdGhpcy5kZWNvZGVyKSB7XG4gICAgICAgIHRoaXMuaW5pdGlhbEJ1ZnMucHVzaChidWYpO1xuICAgICAgICB0aGlzLmluaXRpYWxCdWZzTGVuICs9IGJ1Zi5sZW5ndGg7XG4gICAgICAgIGlmICh0aGlzLmluaXRpYWxCdWZzTGVuIDwgMTYpXG4gICAgICAgICAgcmV0dXJuIFwiXCI7XG4gICAgICAgIHZhciBlbmNvZGluZyA9IGRldGVjdEVuY29kaW5nKHRoaXMuaW5pdGlhbEJ1ZnMsIHRoaXMub3B0aW9ucy5kZWZhdWx0RW5jb2RpbmcpO1xuICAgICAgICB0aGlzLmRlY29kZXIgPSB0aGlzLmljb252LmdldERlY29kZXIoZW5jb2RpbmcsIHRoaXMub3B0aW9ucyk7XG4gICAgICAgIHZhciByZXNTdHIgPSBcIlwiO1xuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuaW5pdGlhbEJ1ZnMubGVuZ3RoOyBpKyspXG4gICAgICAgICAgcmVzU3RyICs9IHRoaXMuZGVjb2Rlci53cml0ZSh0aGlzLmluaXRpYWxCdWZzW2ldKTtcbiAgICAgICAgdGhpcy5pbml0aWFsQnVmcy5sZW5ndGggPSB0aGlzLmluaXRpYWxCdWZzTGVuID0gMDtcbiAgICAgICAgcmV0dXJuIHJlc1N0cjtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzLmRlY29kZXIud3JpdGUoYnVmKTtcbiAgICB9O1xuICAgIFV0ZjE2RGVjb2Rlci5wcm90b3R5cGUuZW5kID0gZnVuY3Rpb24oKSB7XG4gICAgICBpZiAoIXRoaXMuZGVjb2Rlcikge1xuICAgICAgICB2YXIgZW5jb2RpbmcgPSBkZXRlY3RFbmNvZGluZyh0aGlzLmluaXRpYWxCdWZzLCB0aGlzLm9wdGlvbnMuZGVmYXVsdEVuY29kaW5nKTtcbiAgICAgICAgdGhpcy5kZWNvZGVyID0gdGhpcy5pY29udi5nZXREZWNvZGVyKGVuY29kaW5nLCB0aGlzLm9wdGlvbnMpO1xuICAgICAgICB2YXIgcmVzU3RyID0gXCJcIjtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLmluaXRpYWxCdWZzLmxlbmd0aDsgaSsrKVxuICAgICAgICAgIHJlc1N0ciArPSB0aGlzLmRlY29kZXIud3JpdGUodGhpcy5pbml0aWFsQnVmc1tpXSk7XG4gICAgICAgIHZhciB0cmFpbCA9IHRoaXMuZGVjb2Rlci5lbmQoKTtcbiAgICAgICAgaWYgKHRyYWlsKVxuICAgICAgICAgIHJlc1N0ciArPSB0cmFpbDtcbiAgICAgICAgdGhpcy5pbml0aWFsQnVmcy5sZW5ndGggPSB0aGlzLmluaXRpYWxCdWZzTGVuID0gMDtcbiAgICAgICAgcmV0dXJuIHJlc1N0cjtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzLmRlY29kZXIuZW5kKCk7XG4gICAgfTtcbiAgICBmdW5jdGlvbiBkZXRlY3RFbmNvZGluZyhidWZzLCBkZWZhdWx0RW5jb2RpbmcpIHtcbiAgICAgIHZhciBiID0gW107XG4gICAgICB2YXIgY2hhcnNQcm9jZXNzZWQgPSAwO1xuICAgICAgdmFyIGFzY2lpQ2hhcnNMRSA9IDAsIGFzY2lpQ2hhcnNCRSA9IDA7XG4gICAgICBvdXRlcl9sb29wOlxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGJ1ZnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICB2YXIgYnVmID0gYnVmc1tpXTtcbiAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGJ1Zi5sZW5ndGg7IGorKykge1xuICAgICAgICAgICAgYi5wdXNoKGJ1ZltqXSk7XG4gICAgICAgICAgICBpZiAoYi5sZW5ndGggPT09IDIpIHtcbiAgICAgICAgICAgICAgaWYgKGNoYXJzUHJvY2Vzc2VkID09PSAwKSB7XG4gICAgICAgICAgICAgICAgaWYgKGJbMF0gPT09IDI1NSAmJiBiWzFdID09PSAyNTQpIHJldHVybiBcInV0Zi0xNmxlXCI7XG4gICAgICAgICAgICAgICAgaWYgKGJbMF0gPT09IDI1NCAmJiBiWzFdID09PSAyNTUpIHJldHVybiBcInV0Zi0xNmJlXCI7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgaWYgKGJbMF0gPT09IDAgJiYgYlsxXSAhPT0gMCkgYXNjaWlDaGFyc0JFKys7XG4gICAgICAgICAgICAgIGlmIChiWzBdICE9PSAwICYmIGJbMV0gPT09IDApIGFzY2lpQ2hhcnNMRSsrO1xuICAgICAgICAgICAgICBiLmxlbmd0aCA9IDA7XG4gICAgICAgICAgICAgIGNoYXJzUHJvY2Vzc2VkKys7XG4gICAgICAgICAgICAgIGlmIChjaGFyc1Byb2Nlc3NlZCA+PSAxMDApIHtcbiAgICAgICAgICAgICAgICBicmVhayBvdXRlcl9sb29wO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICBpZiAoYXNjaWlDaGFyc0JFID4gYXNjaWlDaGFyc0xFKSByZXR1cm4gXCJ1dGYtMTZiZVwiO1xuICAgICAgaWYgKGFzY2lpQ2hhcnNCRSA8IGFzY2lpQ2hhcnNMRSkgcmV0dXJuIFwidXRmLTE2bGVcIjtcbiAgICAgIHJldHVybiBkZWZhdWx0RW5jb2RpbmcgfHwgXCJ1dGYtMTZsZVwiO1xuICAgIH1cbiAgfVxufSk7XG5cbi8vIG5vZGVfbW9kdWxlcy9yYXctYm9keS9ub2RlX21vZHVsZXMvaWNvbnYtbGl0ZS9lbmNvZGluZ3MvdXRmNy5qc1xudmFyIHJlcXVpcmVfdXRmNyA9IF9fY29tbW9uSlMoe1xuICBcIm5vZGVfbW9kdWxlcy9yYXctYm9keS9ub2RlX21vZHVsZXMvaWNvbnYtbGl0ZS9lbmNvZGluZ3MvdXRmNy5qc1wiKGV4cG9ydHMyKSB7XG4gICAgXCJ1c2Ugc3RyaWN0XCI7XG4gICAgdmFyIEJ1ZmZlcjIgPSByZXF1aXJlX3NhZmVyKCkuQnVmZmVyO1xuICAgIGV4cG9ydHMyLnV0ZjcgPSBVdGY3Q29kZWM7XG4gICAgZXhwb3J0czIudW5pY29kZTExdXRmNyA9IFwidXRmN1wiO1xuICAgIGZ1bmN0aW9uIFV0ZjdDb2RlYyhjb2RlY09wdGlvbnMsIGljb252KSB7XG4gICAgICB0aGlzLmljb252ID0gaWNvbnY7XG4gICAgfVxuICAgIFV0ZjdDb2RlYy5wcm90b3R5cGUuZW5jb2RlciA9IFV0ZjdFbmNvZGVyO1xuICAgIFV0ZjdDb2RlYy5wcm90b3R5cGUuZGVjb2RlciA9IFV0ZjdEZWNvZGVyO1xuICAgIFV0ZjdDb2RlYy5wcm90b3R5cGUuYm9tQXdhcmUgPSB0cnVlO1xuICAgIHZhciBub25EaXJlY3RDaGFycyA9IC9bXkEtWmEtejAtOSdcXChcXCksLVxcLlxcLzpcXD8gXFxuXFxyXFx0XSsvZztcbiAgICBmdW5jdGlvbiBVdGY3RW5jb2RlcihvcHRpb25zLCBjb2RlYykge1xuICAgICAgdGhpcy5pY29udiA9IGNvZGVjLmljb252O1xuICAgIH1cbiAgICBVdGY3RW5jb2Rlci5wcm90b3R5cGUud3JpdGUgPSBmdW5jdGlvbihzdHIpIHtcbiAgICAgIHJldHVybiBCdWZmZXIyLmZyb20oc3RyLnJlcGxhY2Uobm9uRGlyZWN0Q2hhcnMsIGZ1bmN0aW9uKGNodW5rKSB7XG4gICAgICAgIHJldHVybiBcIitcIiArIChjaHVuayA9PT0gXCIrXCIgPyBcIlwiIDogdGhpcy5pY29udi5lbmNvZGUoY2h1bmssIFwidXRmMTYtYmVcIikudG9TdHJpbmcoXCJiYXNlNjRcIikucmVwbGFjZSgvPSskLywgXCJcIikpICsgXCItXCI7XG4gICAgICB9LmJpbmQodGhpcykpKTtcbiAgICB9O1xuICAgIFV0ZjdFbmNvZGVyLnByb3RvdHlwZS5lbmQgPSBmdW5jdGlvbigpIHtcbiAgICB9O1xuICAgIGZ1bmN0aW9uIFV0ZjdEZWNvZGVyKG9wdGlvbnMsIGNvZGVjKSB7XG4gICAgICB0aGlzLmljb252ID0gY29kZWMuaWNvbnY7XG4gICAgICB0aGlzLmluQmFzZTY0ID0gZmFsc2U7XG4gICAgICB0aGlzLmJhc2U2NEFjY3VtID0gXCJcIjtcbiAgICB9XG4gICAgdmFyIGJhc2U2NFJlZ2V4MiA9IC9bQS1aYS16MC05XFwvK10vO1xuICAgIHZhciBiYXNlNjRDaGFycyA9IFtdO1xuICAgIGZvciAoaSA9IDA7IGkgPCAyNTY7IGkrKylcbiAgICAgIGJhc2U2NENoYXJzW2ldID0gYmFzZTY0UmVnZXgyLnRlc3QoU3RyaW5nLmZyb21DaGFyQ29kZShpKSk7XG4gICAgdmFyIGk7XG4gICAgdmFyIHBsdXNDaGFyID0gXCIrXCIuY2hhckNvZGVBdCgwKTtcbiAgICB2YXIgbWludXNDaGFyID0gXCItXCIuY2hhckNvZGVBdCgwKTtcbiAgICB2YXIgYW5kQ2hhciA9IFwiJlwiLmNoYXJDb2RlQXQoMCk7XG4gICAgVXRmN0RlY29kZXIucHJvdG90eXBlLndyaXRlID0gZnVuY3Rpb24oYnVmKSB7XG4gICAgICB2YXIgcmVzID0gXCJcIiwgbGFzdEkgPSAwLCBpbkJhc2U2NCA9IHRoaXMuaW5CYXNlNjQsIGJhc2U2NEFjY3VtID0gdGhpcy5iYXNlNjRBY2N1bTtcbiAgICAgIGZvciAodmFyIGkyID0gMDsgaTIgPCBidWYubGVuZ3RoOyBpMisrKSB7XG4gICAgICAgIGlmICghaW5CYXNlNjQpIHtcbiAgICAgICAgICBpZiAoYnVmW2kyXSA9PSBwbHVzQ2hhcikge1xuICAgICAgICAgICAgcmVzICs9IHRoaXMuaWNvbnYuZGVjb2RlKGJ1Zi5zbGljZShsYXN0SSwgaTIpLCBcImFzY2lpXCIpO1xuICAgICAgICAgICAgbGFzdEkgPSBpMiArIDE7XG4gICAgICAgICAgICBpbkJhc2U2NCA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmICghYmFzZTY0Q2hhcnNbYnVmW2kyXV0pIHtcbiAgICAgICAgICAgIGlmIChpMiA9PSBsYXN0SSAmJiBidWZbaTJdID09IG1pbnVzQ2hhcikge1xuICAgICAgICAgICAgICByZXMgKz0gXCIrXCI7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICB2YXIgYjY0c3RyID0gYmFzZTY0QWNjdW0gKyB0aGlzLmljb252LmRlY29kZShidWYuc2xpY2UobGFzdEksIGkyKSwgXCJhc2NpaVwiKTtcbiAgICAgICAgICAgICAgcmVzICs9IHRoaXMuaWNvbnYuZGVjb2RlKEJ1ZmZlcjIuZnJvbShiNjRzdHIsIFwiYmFzZTY0XCIpLCBcInV0ZjE2LWJlXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGJ1ZltpMl0gIT0gbWludXNDaGFyKVxuICAgICAgICAgICAgICBpMi0tO1xuICAgICAgICAgICAgbGFzdEkgPSBpMiArIDE7XG4gICAgICAgICAgICBpbkJhc2U2NCA9IGZhbHNlO1xuICAgICAgICAgICAgYmFzZTY0QWNjdW0gPSBcIlwiO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKCFpbkJhc2U2NCkge1xuICAgICAgICByZXMgKz0gdGhpcy5pY29udi5kZWNvZGUoYnVmLnNsaWNlKGxhc3RJKSwgXCJhc2NpaVwiKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhciBiNjRzdHIgPSBiYXNlNjRBY2N1bSArIHRoaXMuaWNvbnYuZGVjb2RlKGJ1Zi5zbGljZShsYXN0SSksIFwiYXNjaWlcIik7XG4gICAgICAgIHZhciBjYW5CZURlY29kZWQgPSBiNjRzdHIubGVuZ3RoIC0gYjY0c3RyLmxlbmd0aCAlIDg7XG4gICAgICAgIGJhc2U2NEFjY3VtID0gYjY0c3RyLnNsaWNlKGNhbkJlRGVjb2RlZCk7XG4gICAgICAgIGI2NHN0ciA9IGI2NHN0ci5zbGljZSgwLCBjYW5CZURlY29kZWQpO1xuICAgICAgICByZXMgKz0gdGhpcy5pY29udi5kZWNvZGUoQnVmZmVyMi5mcm9tKGI2NHN0ciwgXCJiYXNlNjRcIiksIFwidXRmMTYtYmVcIik7XG4gICAgICB9XG4gICAgICB0aGlzLmluQmFzZTY0ID0gaW5CYXNlNjQ7XG4gICAgICB0aGlzLmJhc2U2NEFjY3VtID0gYmFzZTY0QWNjdW07XG4gICAgICByZXR1cm4gcmVzO1xuICAgIH07XG4gICAgVXRmN0RlY29kZXIucHJvdG90eXBlLmVuZCA9IGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIHJlcyA9IFwiXCI7XG4gICAgICBpZiAodGhpcy5pbkJhc2U2NCAmJiB0aGlzLmJhc2U2NEFjY3VtLmxlbmd0aCA+IDApXG4gICAgICAgIHJlcyA9IHRoaXMuaWNvbnYuZGVjb2RlKEJ1ZmZlcjIuZnJvbSh0aGlzLmJhc2U2NEFjY3VtLCBcImJhc2U2NFwiKSwgXCJ1dGYxNi1iZVwiKTtcbiAgICAgIHRoaXMuaW5CYXNlNjQgPSBmYWxzZTtcbiAgICAgIHRoaXMuYmFzZTY0QWNjdW0gPSBcIlwiO1xuICAgICAgcmV0dXJuIHJlcztcbiAgICB9O1xuICAgIGV4cG9ydHMyLnV0ZjdpbWFwID0gVXRmN0lNQVBDb2RlYztcbiAgICBmdW5jdGlvbiBVdGY3SU1BUENvZGVjKGNvZGVjT3B0aW9ucywgaWNvbnYpIHtcbiAgICAgIHRoaXMuaWNvbnYgPSBpY29udjtcbiAgICB9XG4gICAgVXRmN0lNQVBDb2RlYy5wcm90b3R5cGUuZW5jb2RlciA9IFV0ZjdJTUFQRW5jb2RlcjtcbiAgICBVdGY3SU1BUENvZGVjLnByb3RvdHlwZS5kZWNvZGVyID0gVXRmN0lNQVBEZWNvZGVyO1xuICAgIFV0ZjdJTUFQQ29kZWMucHJvdG90eXBlLmJvbUF3YXJlID0gdHJ1ZTtcbiAgICBmdW5jdGlvbiBVdGY3SU1BUEVuY29kZXIob3B0aW9ucywgY29kZWMpIHtcbiAgICAgIHRoaXMuaWNvbnYgPSBjb2RlYy5pY29udjtcbiAgICAgIHRoaXMuaW5CYXNlNjQgPSBmYWxzZTtcbiAgICAgIHRoaXMuYmFzZTY0QWNjdW0gPSBCdWZmZXIyLmFsbG9jKDYpO1xuICAgICAgdGhpcy5iYXNlNjRBY2N1bUlkeCA9IDA7XG4gICAgfVxuICAgIFV0ZjdJTUFQRW5jb2Rlci5wcm90b3R5cGUud3JpdGUgPSBmdW5jdGlvbihzdHIpIHtcbiAgICAgIHZhciBpbkJhc2U2NCA9IHRoaXMuaW5CYXNlNjQsIGJhc2U2NEFjY3VtID0gdGhpcy5iYXNlNjRBY2N1bSwgYmFzZTY0QWNjdW1JZHggPSB0aGlzLmJhc2U2NEFjY3VtSWR4LCBidWYgPSBCdWZmZXIyLmFsbG9jKHN0ci5sZW5ndGggKiA1ICsgMTApLCBidWZJZHggPSAwO1xuICAgICAgZm9yICh2YXIgaTIgPSAwOyBpMiA8IHN0ci5sZW5ndGg7IGkyKyspIHtcbiAgICAgICAgdmFyIHVDaGFyID0gc3RyLmNoYXJDb2RlQXQoaTIpO1xuICAgICAgICBpZiAoMzIgPD0gdUNoYXIgJiYgdUNoYXIgPD0gMTI2KSB7XG4gICAgICAgICAgaWYgKGluQmFzZTY0KSB7XG4gICAgICAgICAgICBpZiAoYmFzZTY0QWNjdW1JZHggPiAwKSB7XG4gICAgICAgICAgICAgIGJ1ZklkeCArPSBidWYud3JpdGUoYmFzZTY0QWNjdW0uc2xpY2UoMCwgYmFzZTY0QWNjdW1JZHgpLnRvU3RyaW5nKFwiYmFzZTY0XCIpLnJlcGxhY2UoL1xcLy9nLCBcIixcIikucmVwbGFjZSgvPSskLywgXCJcIiksIGJ1ZklkeCk7XG4gICAgICAgICAgICAgIGJhc2U2NEFjY3VtSWR4ID0gMDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJ1ZltidWZJZHgrK10gPSBtaW51c0NoYXI7XG4gICAgICAgICAgICBpbkJhc2U2NCA9IGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoIWluQmFzZTY0KSB7XG4gICAgICAgICAgICBidWZbYnVmSWR4KytdID0gdUNoYXI7XG4gICAgICAgICAgICBpZiAodUNoYXIgPT09IGFuZENoYXIpXG4gICAgICAgICAgICAgIGJ1ZltidWZJZHgrK10gPSBtaW51c0NoYXI7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmICghaW5CYXNlNjQpIHtcbiAgICAgICAgICAgIGJ1ZltidWZJZHgrK10gPSBhbmRDaGFyO1xuICAgICAgICAgICAgaW5CYXNlNjQgPSB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoaW5CYXNlNjQpIHtcbiAgICAgICAgICAgIGJhc2U2NEFjY3VtW2Jhc2U2NEFjY3VtSWR4KytdID0gdUNoYXIgPj4gODtcbiAgICAgICAgICAgIGJhc2U2NEFjY3VtW2Jhc2U2NEFjY3VtSWR4KytdID0gdUNoYXIgJiAyNTU7XG4gICAgICAgICAgICBpZiAoYmFzZTY0QWNjdW1JZHggPT0gYmFzZTY0QWNjdW0ubGVuZ3RoKSB7XG4gICAgICAgICAgICAgIGJ1ZklkeCArPSBidWYud3JpdGUoYmFzZTY0QWNjdW0udG9TdHJpbmcoXCJiYXNlNjRcIikucmVwbGFjZSgvXFwvL2csIFwiLFwiKSwgYnVmSWR4KTtcbiAgICAgICAgICAgICAgYmFzZTY0QWNjdW1JZHggPSAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdGhpcy5pbkJhc2U2NCA9IGluQmFzZTY0O1xuICAgICAgdGhpcy5iYXNlNjRBY2N1bUlkeCA9IGJhc2U2NEFjY3VtSWR4O1xuICAgICAgcmV0dXJuIGJ1Zi5zbGljZSgwLCBidWZJZHgpO1xuICAgIH07XG4gICAgVXRmN0lNQVBFbmNvZGVyLnByb3RvdHlwZS5lbmQgPSBmdW5jdGlvbigpIHtcbiAgICAgIHZhciBidWYgPSBCdWZmZXIyLmFsbG9jKDEwKSwgYnVmSWR4ID0gMDtcbiAgICAgIGlmICh0aGlzLmluQmFzZTY0KSB7XG4gICAgICAgIGlmICh0aGlzLmJhc2U2NEFjY3VtSWR4ID4gMCkge1xuICAgICAgICAgIGJ1ZklkeCArPSBidWYud3JpdGUodGhpcy5iYXNlNjRBY2N1bS5zbGljZSgwLCB0aGlzLmJhc2U2NEFjY3VtSWR4KS50b1N0cmluZyhcImJhc2U2NFwiKS5yZXBsYWNlKC9cXC8vZywgXCIsXCIpLnJlcGxhY2UoLz0rJC8sIFwiXCIpLCBidWZJZHgpO1xuICAgICAgICAgIHRoaXMuYmFzZTY0QWNjdW1JZHggPSAwO1xuICAgICAgICB9XG4gICAgICAgIGJ1ZltidWZJZHgrK10gPSBtaW51c0NoYXI7XG4gICAgICAgIHRoaXMuaW5CYXNlNjQgPSBmYWxzZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBidWYuc2xpY2UoMCwgYnVmSWR4KTtcbiAgICB9O1xuICAgIGZ1bmN0aW9uIFV0ZjdJTUFQRGVjb2RlcihvcHRpb25zLCBjb2RlYykge1xuICAgICAgdGhpcy5pY29udiA9IGNvZGVjLmljb252O1xuICAgICAgdGhpcy5pbkJhc2U2NCA9IGZhbHNlO1xuICAgICAgdGhpcy5iYXNlNjRBY2N1bSA9IFwiXCI7XG4gICAgfVxuICAgIHZhciBiYXNlNjRJTUFQQ2hhcnMgPSBiYXNlNjRDaGFycy5zbGljZSgpO1xuICAgIGJhc2U2NElNQVBDaGFyc1tcIixcIi5jaGFyQ29kZUF0KDApXSA9IHRydWU7XG4gICAgVXRmN0lNQVBEZWNvZGVyLnByb3RvdHlwZS53cml0ZSA9IGZ1bmN0aW9uKGJ1Zikge1xuICAgICAgdmFyIHJlcyA9IFwiXCIsIGxhc3RJID0gMCwgaW5CYXNlNjQgPSB0aGlzLmluQmFzZTY0LCBiYXNlNjRBY2N1bSA9IHRoaXMuYmFzZTY0QWNjdW07XG4gICAgICBmb3IgKHZhciBpMiA9IDA7IGkyIDwgYnVmLmxlbmd0aDsgaTIrKykge1xuICAgICAgICBpZiAoIWluQmFzZTY0KSB7XG4gICAgICAgICAgaWYgKGJ1ZltpMl0gPT0gYW5kQ2hhcikge1xuICAgICAgICAgICAgcmVzICs9IHRoaXMuaWNvbnYuZGVjb2RlKGJ1Zi5zbGljZShsYXN0SSwgaTIpLCBcImFzY2lpXCIpO1xuICAgICAgICAgICAgbGFzdEkgPSBpMiArIDE7XG4gICAgICAgICAgICBpbkJhc2U2NCA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmICghYmFzZTY0SU1BUENoYXJzW2J1ZltpMl1dKSB7XG4gICAgICAgICAgICBpZiAoaTIgPT0gbGFzdEkgJiYgYnVmW2kyXSA9PSBtaW51c0NoYXIpIHtcbiAgICAgICAgICAgICAgcmVzICs9IFwiJlwiO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgdmFyIGI2NHN0ciA9IGJhc2U2NEFjY3VtICsgdGhpcy5pY29udi5kZWNvZGUoYnVmLnNsaWNlKGxhc3RJLCBpMiksIFwiYXNjaWlcIikucmVwbGFjZSgvLC9nLCBcIi9cIik7XG4gICAgICAgICAgICAgIHJlcyArPSB0aGlzLmljb252LmRlY29kZShCdWZmZXIyLmZyb20oYjY0c3RyLCBcImJhc2U2NFwiKSwgXCJ1dGYxNi1iZVwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChidWZbaTJdICE9IG1pbnVzQ2hhcilcbiAgICAgICAgICAgICAgaTItLTtcbiAgICAgICAgICAgIGxhc3RJID0gaTIgKyAxO1xuICAgICAgICAgICAgaW5CYXNlNjQgPSBmYWxzZTtcbiAgICAgICAgICAgIGJhc2U2NEFjY3VtID0gXCJcIjtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmICghaW5CYXNlNjQpIHtcbiAgICAgICAgcmVzICs9IHRoaXMuaWNvbnYuZGVjb2RlKGJ1Zi5zbGljZShsYXN0SSksIFwiYXNjaWlcIik7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgYjY0c3RyID0gYmFzZTY0QWNjdW0gKyB0aGlzLmljb252LmRlY29kZShidWYuc2xpY2UobGFzdEkpLCBcImFzY2lpXCIpLnJlcGxhY2UoLywvZywgXCIvXCIpO1xuICAgICAgICB2YXIgY2FuQmVEZWNvZGVkID0gYjY0c3RyLmxlbmd0aCAtIGI2NHN0ci5sZW5ndGggJSA4O1xuICAgICAgICBiYXNlNjRBY2N1bSA9IGI2NHN0ci5zbGljZShjYW5CZURlY29kZWQpO1xuICAgICAgICBiNjRzdHIgPSBiNjRzdHIuc2xpY2UoMCwgY2FuQmVEZWNvZGVkKTtcbiAgICAgICAgcmVzICs9IHRoaXMuaWNvbnYuZGVjb2RlKEJ1ZmZlcjIuZnJvbShiNjRzdHIsIFwiYmFzZTY0XCIpLCBcInV0ZjE2LWJlXCIpO1xuICAgICAgfVxuICAgICAgdGhpcy5pbkJhc2U2NCA9IGluQmFzZTY0O1xuICAgICAgdGhpcy5iYXNlNjRBY2N1bSA9IGJhc2U2NEFjY3VtO1xuICAgICAgcmV0dXJuIHJlcztcbiAgICB9O1xuICAgIFV0ZjdJTUFQRGVjb2Rlci5wcm90b3R5cGUuZW5kID0gZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgcmVzID0gXCJcIjtcbiAgICAgIGlmICh0aGlzLmluQmFzZTY0ICYmIHRoaXMuYmFzZTY0QWNjdW0ubGVuZ3RoID4gMClcbiAgICAgICAgcmVzID0gdGhpcy5pY29udi5kZWNvZGUoQnVmZmVyMi5mcm9tKHRoaXMuYmFzZTY0QWNjdW0sIFwiYmFzZTY0XCIpLCBcInV0ZjE2LWJlXCIpO1xuICAgICAgdGhpcy5pbkJhc2U2NCA9IGZhbHNlO1xuICAgICAgdGhpcy5iYXNlNjRBY2N1bSA9IFwiXCI7XG4gICAgICByZXR1cm4gcmVzO1xuICAgIH07XG4gIH1cbn0pO1xuXG4vLyBub2RlX21vZHVsZXMvcmF3LWJvZHkvbm9kZV9tb2R1bGVzL2ljb252LWxpdGUvZW5jb2RpbmdzL3NiY3MtY29kZWMuanNcbnZhciByZXF1aXJlX3NiY3NfY29kZWMgPSBfX2NvbW1vbkpTKHtcbiAgXCJub2RlX21vZHVsZXMvcmF3LWJvZHkvbm9kZV9tb2R1bGVzL2ljb252LWxpdGUvZW5jb2RpbmdzL3NiY3MtY29kZWMuanNcIihleHBvcnRzMikge1xuICAgIFwidXNlIHN0cmljdFwiO1xuICAgIHZhciBCdWZmZXIyID0gcmVxdWlyZV9zYWZlcigpLkJ1ZmZlcjtcbiAgICBleHBvcnRzMi5fc2JjcyA9IFNCQ1NDb2RlYztcbiAgICBmdW5jdGlvbiBTQkNTQ29kZWMoY29kZWNPcHRpb25zLCBpY29udikge1xuICAgICAgaWYgKCFjb2RlY09wdGlvbnMpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcIlNCQ1MgY29kZWMgaXMgY2FsbGVkIHdpdGhvdXQgdGhlIGRhdGEuXCIpO1xuICAgICAgaWYgKCFjb2RlY09wdGlvbnMuY2hhcnMgfHwgY29kZWNPcHRpb25zLmNoYXJzLmxlbmd0aCAhPT0gMTI4ICYmIGNvZGVjT3B0aW9ucy5jaGFycy5sZW5ndGggIT09IDI1NilcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRW5jb2RpbmcgJ1wiICsgY29kZWNPcHRpb25zLnR5cGUgKyBcIicgaGFzIGluY29ycmVjdCAnY2hhcnMnIChtdXN0IGJlIG9mIGxlbiAxMjggb3IgMjU2KVwiKTtcbiAgICAgIGlmIChjb2RlY09wdGlvbnMuY2hhcnMubGVuZ3RoID09PSAxMjgpIHtcbiAgICAgICAgdmFyIGFzY2lpU3RyaW5nID0gXCJcIjtcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAxMjg7IGkrKylcbiAgICAgICAgICBhc2NpaVN0cmluZyArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGkpO1xuICAgICAgICBjb2RlY09wdGlvbnMuY2hhcnMgPSBhc2NpaVN0cmluZyArIGNvZGVjT3B0aW9ucy5jaGFycztcbiAgICAgIH1cbiAgICAgIHRoaXMuZGVjb2RlQnVmID0gQnVmZmVyMi5mcm9tKGNvZGVjT3B0aW9ucy5jaGFycywgXCJ1Y3MyXCIpO1xuICAgICAgdmFyIGVuY29kZUJ1ZiA9IEJ1ZmZlcjIuYWxsb2MoNjU1MzYsIGljb252LmRlZmF1bHRDaGFyU2luZ2xlQnl0ZS5jaGFyQ29kZUF0KDApKTtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY29kZWNPcHRpb25zLmNoYXJzLmxlbmd0aDsgaSsrKVxuICAgICAgICBlbmNvZGVCdWZbY29kZWNPcHRpb25zLmNoYXJzLmNoYXJDb2RlQXQoaSldID0gaTtcbiAgICAgIHRoaXMuZW5jb2RlQnVmID0gZW5jb2RlQnVmO1xuICAgIH1cbiAgICBTQkNTQ29kZWMucHJvdG90eXBlLmVuY29kZXIgPSBTQkNTRW5jb2RlcjtcbiAgICBTQkNTQ29kZWMucHJvdG90eXBlLmRlY29kZXIgPSBTQkNTRGVjb2RlcjtcbiAgICBmdW5jdGlvbiBTQkNTRW5jb2RlcihvcHRpb25zLCBjb2RlYykge1xuICAgICAgdGhpcy5lbmNvZGVCdWYgPSBjb2RlYy5lbmNvZGVCdWY7XG4gICAgfVxuICAgIFNCQ1NFbmNvZGVyLnByb3RvdHlwZS53cml0ZSA9IGZ1bmN0aW9uKHN0cikge1xuICAgICAgdmFyIGJ1ZiA9IEJ1ZmZlcjIuYWxsb2Moc3RyLmxlbmd0aCk7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHN0ci5sZW5ndGg7IGkrKylcbiAgICAgICAgYnVmW2ldID0gdGhpcy5lbmNvZGVCdWZbc3RyLmNoYXJDb2RlQXQoaSldO1xuICAgICAgcmV0dXJuIGJ1ZjtcbiAgICB9O1xuICAgIFNCQ1NFbmNvZGVyLnByb3RvdHlwZS5lbmQgPSBmdW5jdGlvbigpIHtcbiAgICB9O1xuICAgIGZ1bmN0aW9uIFNCQ1NEZWNvZGVyKG9wdGlvbnMsIGNvZGVjKSB7XG4gICAgICB0aGlzLmRlY29kZUJ1ZiA9IGNvZGVjLmRlY29kZUJ1ZjtcbiAgICB9XG4gICAgU0JDU0RlY29kZXIucHJvdG90eXBlLndyaXRlID0gZnVuY3Rpb24oYnVmKSB7XG4gICAgICB2YXIgZGVjb2RlQnVmID0gdGhpcy5kZWNvZGVCdWY7XG4gICAgICB2YXIgbmV3QnVmID0gQnVmZmVyMi5hbGxvYyhidWYubGVuZ3RoICogMik7XG4gICAgICB2YXIgaWR4MSA9IDAsIGlkeDIgPSAwO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBidWYubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWR4MSA9IGJ1ZltpXSAqIDI7XG4gICAgICAgIGlkeDIgPSBpICogMjtcbiAgICAgICAgbmV3QnVmW2lkeDJdID0gZGVjb2RlQnVmW2lkeDFdO1xuICAgICAgICBuZXdCdWZbaWR4MiArIDFdID0gZGVjb2RlQnVmW2lkeDEgKyAxXTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBuZXdCdWYudG9TdHJpbmcoXCJ1Y3MyXCIpO1xuICAgIH07XG4gICAgU0JDU0RlY29kZXIucHJvdG90eXBlLmVuZCA9IGZ1bmN0aW9uKCkge1xuICAgIH07XG4gIH1cbn0pO1xuXG4vLyBub2RlX21vZHVsZXMvcmF3LWJvZHkvbm9kZV9tb2R1bGVzL2ljb252LWxpdGUvZW5jb2RpbmdzL3NiY3MtZGF0YS5qc1xudmFyIHJlcXVpcmVfc2Jjc19kYXRhID0gX19jb21tb25KUyh7XG4gIFwibm9kZV9tb2R1bGVzL3Jhdy1ib2R5L25vZGVfbW9kdWxlcy9pY29udi1saXRlL2VuY29kaW5ncy9zYmNzLWRhdGEuanNcIihleHBvcnRzMiwgbW9kdWxlMikge1xuICAgIFwidXNlIHN0cmljdFwiO1xuICAgIG1vZHVsZTIuZXhwb3J0cyA9IHtcbiAgICAgIC8vIE5vdCBzdXBwb3J0ZWQgYnkgaWNvbnYsIG5vdCBzdXJlIHdoeS5cbiAgICAgIFwiMTAwMjlcIjogXCJtYWNjZW50ZXVyb1wiLFxuICAgICAgXCJtYWNjZW50ZXVyb1wiOiB7XG4gICAgICAgIFwidHlwZVwiOiBcIl9zYmNzXCIsXG4gICAgICAgIFwiY2hhcnNcIjogXCJcXHhDNFxcdTAxMDBcXHUwMTAxXFx4QzlcXHUwMTA0XFx4RDZcXHhEQ1xceEUxXFx1MDEwNVxcdTAxMENcXHhFNFxcdTAxMERcXHUwMTA2XFx1MDEwN1xceEU5XFx1MDE3OVxcdTAxN0FcXHUwMTBFXFx4RURcXHUwMTBGXFx1MDExMlxcdTAxMTNcXHUwMTE2XFx4RjNcXHUwMTE3XFx4RjRcXHhGNlxceEY1XFx4RkFcXHUwMTFBXFx1MDExQlxceEZDXFx1MjAyMFxceEIwXFx1MDExOFxceEEzXFx4QTdcXHUyMDIyXFx4QjZcXHhERlxceEFFXFx4QTlcXHUyMTIyXFx1MDExOVxceEE4XFx1MjI2MFxcdTAxMjNcXHUwMTJFXFx1MDEyRlxcdTAxMkFcXHUyMjY0XFx1MjI2NVxcdTAxMkJcXHUwMTM2XFx1MjIwMlxcdTIyMTFcXHUwMTQyXFx1MDEzQlxcdTAxM0NcXHUwMTNEXFx1MDEzRVxcdTAxMzlcXHUwMTNBXFx1MDE0NVxcdTAxNDZcXHUwMTQzXFx4QUNcXHUyMjFBXFx1MDE0NFxcdTAxNDdcXHUyMjA2XFx4QUJcXHhCQlxcdTIwMjZcXHhBMFxcdTAxNDhcXHUwMTUwXFx4RDVcXHUwMTUxXFx1MDE0Q1xcdTIwMTNcXHUyMDE0XFx1MjAxQ1xcdTIwMURcXHUyMDE4XFx1MjAxOVxceEY3XFx1MjVDQVxcdTAxNERcXHUwMTU0XFx1MDE1NVxcdTAxNThcXHUyMDM5XFx1MjAzQVxcdTAxNTlcXHUwMTU2XFx1MDE1N1xcdTAxNjBcXHUyMDFBXFx1MjAxRVxcdTAxNjFcXHUwMTVBXFx1MDE1QlxceEMxXFx1MDE2NFxcdTAxNjVcXHhDRFxcdTAxN0RcXHUwMTdFXFx1MDE2QVxceEQzXFx4RDRcXHUwMTZCXFx1MDE2RVxceERBXFx1MDE2RlxcdTAxNzBcXHUwMTcxXFx1MDE3MlxcdTAxNzNcXHhERFxceEZEXFx1MDEzN1xcdTAxN0JcXHUwMTQxXFx1MDE3Q1xcdTAxMjJcXHUwMkM3XCJcbiAgICAgIH0sXG4gICAgICBcIjgwOFwiOiBcImNwODA4XCIsXG4gICAgICBcImlibTgwOFwiOiBcImNwODA4XCIsXG4gICAgICBcImNwODA4XCI6IHtcbiAgICAgICAgXCJ0eXBlXCI6IFwiX3NiY3NcIixcbiAgICAgICAgXCJjaGFyc1wiOiBcIlxcdTA0MTBcXHUwNDExXFx1MDQxMlxcdTA0MTNcXHUwNDE0XFx1MDQxNVxcdTA0MTZcXHUwNDE3XFx1MDQxOFxcdTA0MTlcXHUwNDFBXFx1MDQxQlxcdTA0MUNcXHUwNDFEXFx1MDQxRVxcdTA0MUZcXHUwNDIwXFx1MDQyMVxcdTA0MjJcXHUwNDIzXFx1MDQyNFxcdTA0MjVcXHUwNDI2XFx1MDQyN1xcdTA0MjhcXHUwNDI5XFx1MDQyQVxcdTA0MkJcXHUwNDJDXFx1MDQyRFxcdTA0MkVcXHUwNDJGXFx1MDQzMFxcdTA0MzFcXHUwNDMyXFx1MDQzM1xcdTA0MzRcXHUwNDM1XFx1MDQzNlxcdTA0MzdcXHUwNDM4XFx1MDQzOVxcdTA0M0FcXHUwNDNCXFx1MDQzQ1xcdTA0M0RcXHUwNDNFXFx1MDQzRlxcdTI1OTFcXHUyNTkyXFx1MjU5M1xcdTI1MDJcXHUyNTI0XFx1MjU2MVxcdTI1NjJcXHUyNTU2XFx1MjU1NVxcdTI1NjNcXHUyNTUxXFx1MjU1N1xcdTI1NURcXHUyNTVDXFx1MjU1QlxcdTI1MTBcXHUyNTE0XFx1MjUzNFxcdTI1MkNcXHUyNTFDXFx1MjUwMFxcdTI1M0NcXHUyNTVFXFx1MjU1RlxcdTI1NUFcXHUyNTU0XFx1MjU2OVxcdTI1NjZcXHUyNTYwXFx1MjU1MFxcdTI1NkNcXHUyNTY3XFx1MjU2OFxcdTI1NjRcXHUyNTY1XFx1MjU1OVxcdTI1NThcXHUyNTUyXFx1MjU1M1xcdTI1NkJcXHUyNTZBXFx1MjUxOFxcdTI1MENcXHUyNTg4XFx1MjU4NFxcdTI1OENcXHUyNTkwXFx1MjU4MFxcdTA0NDBcXHUwNDQxXFx1MDQ0MlxcdTA0NDNcXHUwNDQ0XFx1MDQ0NVxcdTA0NDZcXHUwNDQ3XFx1MDQ0OFxcdTA0NDlcXHUwNDRBXFx1MDQ0QlxcdTA0NENcXHUwNDREXFx1MDQ0RVxcdTA0NEZcXHUwNDAxXFx1MDQ1MVxcdTA0MDRcXHUwNDU0XFx1MDQwN1xcdTA0NTdcXHUwNDBFXFx1MDQ1RVxceEIwXFx1MjIxOVxceEI3XFx1MjIxQVxcdTIxMTZcXHUyMEFDXFx1MjVBMFxceEEwXCJcbiAgICAgIH0sXG4gICAgICBcIm1pa1wiOiB7XG4gICAgICAgIFwidHlwZVwiOiBcIl9zYmNzXCIsXG4gICAgICAgIFwiY2hhcnNcIjogXCJcXHUwNDEwXFx1MDQxMVxcdTA0MTJcXHUwNDEzXFx1MDQxNFxcdTA0MTVcXHUwNDE2XFx1MDQxN1xcdTA0MThcXHUwNDE5XFx1MDQxQVxcdTA0MUJcXHUwNDFDXFx1MDQxRFxcdTA0MUVcXHUwNDFGXFx1MDQyMFxcdTA0MjFcXHUwNDIyXFx1MDQyM1xcdTA0MjRcXHUwNDI1XFx1MDQyNlxcdTA0MjdcXHUwNDI4XFx1MDQyOVxcdTA0MkFcXHUwNDJCXFx1MDQyQ1xcdTA0MkRcXHUwNDJFXFx1MDQyRlxcdTA0MzBcXHUwNDMxXFx1MDQzMlxcdTA0MzNcXHUwNDM0XFx1MDQzNVxcdTA0MzZcXHUwNDM3XFx1MDQzOFxcdTA0MzlcXHUwNDNBXFx1MDQzQlxcdTA0M0NcXHUwNDNEXFx1MDQzRVxcdTA0M0ZcXHUwNDQwXFx1MDQ0MVxcdTA0NDJcXHUwNDQzXFx1MDQ0NFxcdTA0NDVcXHUwNDQ2XFx1MDQ0N1xcdTA0NDhcXHUwNDQ5XFx1MDQ0QVxcdTA0NEJcXHUwNDRDXFx1MDQ0RFxcdTA0NEVcXHUwNDRGXFx1MjUxNFxcdTI1MzRcXHUyNTJDXFx1MjUxQ1xcdTI1MDBcXHUyNTNDXFx1MjU2M1xcdTI1NTFcXHUyNTVBXFx1MjU1NFxcdTI1NjlcXHUyNTY2XFx1MjU2MFxcdTI1NTBcXHUyNTZDXFx1MjUxMFxcdTI1OTFcXHUyNTkyXFx1MjU5M1xcdTI1MDJcXHUyNTI0XFx1MjExNlxceEE3XFx1MjU1N1xcdTI1NURcXHUyNTE4XFx1MjUwQ1xcdTI1ODhcXHUyNTg0XFx1MjU4Q1xcdTI1OTBcXHUyNTgwXFx1MDNCMVxceERGXFx1MDM5M1xcdTAzQzBcXHUwM0EzXFx1MDNDM1xceEI1XFx1MDNDNFxcdTAzQTZcXHUwMzk4XFx1MDNBOVxcdTAzQjRcXHUyMjFFXFx1MDNDNlxcdTAzQjVcXHUyMjI5XFx1MjI2MVxceEIxXFx1MjI2NVxcdTIyNjRcXHUyMzIwXFx1MjMyMVxceEY3XFx1MjI0OFxceEIwXFx1MjIxOVxceEI3XFx1MjIxQVxcdTIwN0ZcXHhCMlxcdTI1QTBcXHhBMFwiXG4gICAgICB9LFxuICAgICAgXCJjcDcyMFwiOiB7XG4gICAgICAgIFwidHlwZVwiOiBcIl9zYmNzXCIsXG4gICAgICAgIFwiY2hhcnNcIjogXCJcXHg4MFxceDgxXFx4RTlcXHhFMlxceDg0XFx4RTBcXHg4NlxceEU3XFx4RUFcXHhFQlxceEU4XFx4RUZcXHhFRVxceDhEXFx4OEVcXHg4RlxceDkwXFx1MDY1MVxcdTA2NTJcXHhGNFxceEE0XFx1MDY0MFxceEZCXFx4RjlcXHUwNjIxXFx1MDYyMlxcdTA2MjNcXHUwNjI0XFx4QTNcXHUwNjI1XFx1MDYyNlxcdTA2MjdcXHUwNjI4XFx1MDYyOVxcdTA2MkFcXHUwNjJCXFx1MDYyQ1xcdTA2MkRcXHUwNjJFXFx1MDYyRlxcdTA2MzBcXHUwNjMxXFx1MDYzMlxcdTA2MzNcXHUwNjM0XFx1MDYzNVxceEFCXFx4QkJcXHUyNTkxXFx1MjU5MlxcdTI1OTNcXHUyNTAyXFx1MjUyNFxcdTI1NjFcXHUyNTYyXFx1MjU1NlxcdTI1NTVcXHUyNTYzXFx1MjU1MVxcdTI1NTdcXHUyNTVEXFx1MjU1Q1xcdTI1NUJcXHUyNTEwXFx1MjUxNFxcdTI1MzRcXHUyNTJDXFx1MjUxQ1xcdTI1MDBcXHUyNTNDXFx1MjU1RVxcdTI1NUZcXHUyNTVBXFx1MjU1NFxcdTI1NjlcXHUyNTY2XFx1MjU2MFxcdTI1NTBcXHUyNTZDXFx1MjU2N1xcdTI1NjhcXHUyNTY0XFx1MjU2NVxcdTI1NTlcXHUyNTU4XFx1MjU1MlxcdTI1NTNcXHUyNTZCXFx1MjU2QVxcdTI1MThcXHUyNTBDXFx1MjU4OFxcdTI1ODRcXHUyNThDXFx1MjU5MFxcdTI1ODBcXHUwNjM2XFx1MDYzN1xcdTA2MzhcXHUwNjM5XFx1MDYzQVxcdTA2NDFcXHhCNVxcdTA2NDJcXHUwNjQzXFx1MDY0NFxcdTA2NDVcXHUwNjQ2XFx1MDY0N1xcdTA2NDhcXHUwNjQ5XFx1MDY0QVxcdTIyNjFcXHUwNjRCXFx1MDY0Q1xcdTA2NERcXHUwNjRFXFx1MDY0RlxcdTA2NTBcXHUyMjQ4XFx4QjBcXHUyMjE5XFx4QjdcXHUyMjFBXFx1MjA3RlxceEIyXFx1MjVBMFxceEEwXCJcbiAgICAgIH0sXG4gICAgICAvLyBBbGlhc2VzIG9mIGdlbmVyYXRlZCBlbmNvZGluZ3MuXG4gICAgICBcImFzY2lpOGJpdFwiOiBcImFzY2lpXCIsXG4gICAgICBcInVzYXNjaWlcIjogXCJhc2NpaVwiLFxuICAgICAgXCJhbnNpeDM0XCI6IFwiYXNjaWlcIixcbiAgICAgIFwiYW5zaXgzNDE5NjhcIjogXCJhc2NpaVwiLFxuICAgICAgXCJhbnNpeDM0MTk4NlwiOiBcImFzY2lpXCIsXG4gICAgICBcImNzYXNjaWlcIjogXCJhc2NpaVwiLFxuICAgICAgXCJjcDM2N1wiOiBcImFzY2lpXCIsXG4gICAgICBcImlibTM2N1wiOiBcImFzY2lpXCIsXG4gICAgICBcImlzb2lyNlwiOiBcImFzY2lpXCIsXG4gICAgICBcImlzbzY0NnVzXCI6IFwiYXNjaWlcIixcbiAgICAgIFwiaXNvNjQ2aXJ2XCI6IFwiYXNjaWlcIixcbiAgICAgIFwidXNcIjogXCJhc2NpaVwiLFxuICAgICAgXCJsYXRpbjFcIjogXCJpc284ODU5MVwiLFxuICAgICAgXCJsYXRpbjJcIjogXCJpc284ODU5MlwiLFxuICAgICAgXCJsYXRpbjNcIjogXCJpc284ODU5M1wiLFxuICAgICAgXCJsYXRpbjRcIjogXCJpc284ODU5NFwiLFxuICAgICAgXCJsYXRpbjVcIjogXCJpc284ODU5OVwiLFxuICAgICAgXCJsYXRpbjZcIjogXCJpc284ODU5MTBcIixcbiAgICAgIFwibGF0aW43XCI6IFwiaXNvODg1OTEzXCIsXG4gICAgICBcImxhdGluOFwiOiBcImlzbzg4NTkxNFwiLFxuICAgICAgXCJsYXRpbjlcIjogXCJpc284ODU5MTVcIixcbiAgICAgIFwibGF0aW4xMFwiOiBcImlzbzg4NTkxNlwiLFxuICAgICAgXCJjc2lzb2xhdGluMVwiOiBcImlzbzg4NTkxXCIsXG4gICAgICBcImNzaXNvbGF0aW4yXCI6IFwiaXNvODg1OTJcIixcbiAgICAgIFwiY3Npc29sYXRpbjNcIjogXCJpc284ODU5M1wiLFxuICAgICAgXCJjc2lzb2xhdGluNFwiOiBcImlzbzg4NTk0XCIsXG4gICAgICBcImNzaXNvbGF0aW5jeXJpbGxpY1wiOiBcImlzbzg4NTk1XCIsXG4gICAgICBcImNzaXNvbGF0aW5hcmFiaWNcIjogXCJpc284ODU5NlwiLFxuICAgICAgXCJjc2lzb2xhdGluZ3JlZWtcIjogXCJpc284ODU5N1wiLFxuICAgICAgXCJjc2lzb2xhdGluaGVicmV3XCI6IFwiaXNvODg1OThcIixcbiAgICAgIFwiY3Npc29sYXRpbjVcIjogXCJpc284ODU5OVwiLFxuICAgICAgXCJjc2lzb2xhdGluNlwiOiBcImlzbzg4NTkxMFwiLFxuICAgICAgXCJsMVwiOiBcImlzbzg4NTkxXCIsXG4gICAgICBcImwyXCI6IFwiaXNvODg1OTJcIixcbiAgICAgIFwibDNcIjogXCJpc284ODU5M1wiLFxuICAgICAgXCJsNFwiOiBcImlzbzg4NTk0XCIsXG4gICAgICBcImw1XCI6IFwiaXNvODg1OTlcIixcbiAgICAgIFwibDZcIjogXCJpc284ODU5MTBcIixcbiAgICAgIFwibDdcIjogXCJpc284ODU5MTNcIixcbiAgICAgIFwibDhcIjogXCJpc284ODU5MTRcIixcbiAgICAgIFwibDlcIjogXCJpc284ODU5MTVcIixcbiAgICAgIFwibDEwXCI6IFwiaXNvODg1OTE2XCIsXG4gICAgICBcImlzb2lyMTRcIjogXCJpc282NDZqcFwiLFxuICAgICAgXCJpc29pcjU3XCI6IFwiaXNvNjQ2Y25cIixcbiAgICAgIFwiaXNvaXIxMDBcIjogXCJpc284ODU5MVwiLFxuICAgICAgXCJpc29pcjEwMVwiOiBcImlzbzg4NTkyXCIsXG4gICAgICBcImlzb2lyMTA5XCI6IFwiaXNvODg1OTNcIixcbiAgICAgIFwiaXNvaXIxMTBcIjogXCJpc284ODU5NFwiLFxuICAgICAgXCJpc29pcjE0NFwiOiBcImlzbzg4NTk1XCIsXG4gICAgICBcImlzb2lyMTI3XCI6IFwiaXNvODg1OTZcIixcbiAgICAgIFwiaXNvaXIxMjZcIjogXCJpc284ODU5N1wiLFxuICAgICAgXCJpc29pcjEzOFwiOiBcImlzbzg4NTk4XCIsXG4gICAgICBcImlzb2lyMTQ4XCI6IFwiaXNvODg1OTlcIixcbiAgICAgIFwiaXNvaXIxNTdcIjogXCJpc284ODU5MTBcIixcbiAgICAgIFwiaXNvaXIxNjZcIjogXCJ0aXM2MjBcIixcbiAgICAgIFwiaXNvaXIxNzlcIjogXCJpc284ODU5MTNcIixcbiAgICAgIFwiaXNvaXIxOTlcIjogXCJpc284ODU5MTRcIixcbiAgICAgIFwiaXNvaXIyMDNcIjogXCJpc284ODU5MTVcIixcbiAgICAgIFwiaXNvaXIyMjZcIjogXCJpc284ODU5MTZcIixcbiAgICAgIFwiY3A4MTlcIjogXCJpc284ODU5MVwiLFxuICAgICAgXCJpYm04MTlcIjogXCJpc284ODU5MVwiLFxuICAgICAgXCJjeXJpbGxpY1wiOiBcImlzbzg4NTk1XCIsXG4gICAgICBcImFyYWJpY1wiOiBcImlzbzg4NTk2XCIsXG4gICAgICBcImFyYWJpYzhcIjogXCJpc284ODU5NlwiLFxuICAgICAgXCJlY21hMTE0XCI6IFwiaXNvODg1OTZcIixcbiAgICAgIFwiYXNtbzcwOFwiOiBcImlzbzg4NTk2XCIsXG4gICAgICBcImdyZWVrXCI6IFwiaXNvODg1OTdcIixcbiAgICAgIFwiZ3JlZWs4XCI6IFwiaXNvODg1OTdcIixcbiAgICAgIFwiZWNtYTExOFwiOiBcImlzbzg4NTk3XCIsXG4gICAgICBcImVsb3Q5MjhcIjogXCJpc284ODU5N1wiLFxuICAgICAgXCJoZWJyZXdcIjogXCJpc284ODU5OFwiLFxuICAgICAgXCJoZWJyZXc4XCI6IFwiaXNvODg1OThcIixcbiAgICAgIFwidHVya2lzaFwiOiBcImlzbzg4NTk5XCIsXG4gICAgICBcInR1cmtpc2g4XCI6IFwiaXNvODg1OTlcIixcbiAgICAgIFwidGhhaVwiOiBcImlzbzg4NTkxMVwiLFxuICAgICAgXCJ0aGFpOFwiOiBcImlzbzg4NTkxMVwiLFxuICAgICAgXCJjZWx0aWNcIjogXCJpc284ODU5MTRcIixcbiAgICAgIFwiY2VsdGljOFwiOiBcImlzbzg4NTkxNFwiLFxuICAgICAgXCJpc29jZWx0aWNcIjogXCJpc284ODU5MTRcIixcbiAgICAgIFwidGlzNjIwMFwiOiBcInRpczYyMFwiLFxuICAgICAgXCJ0aXM2MjAyNTI5MVwiOiBcInRpczYyMFwiLFxuICAgICAgXCJ0aXM2MjAyNTMzMFwiOiBcInRpczYyMFwiLFxuICAgICAgXCIxMDAwMFwiOiBcIm1hY3JvbWFuXCIsXG4gICAgICBcIjEwMDA2XCI6IFwibWFjZ3JlZWtcIixcbiAgICAgIFwiMTAwMDdcIjogXCJtYWNjeXJpbGxpY1wiLFxuICAgICAgXCIxMDA3OVwiOiBcIm1hY2ljZWxhbmRcIixcbiAgICAgIFwiMTAwODFcIjogXCJtYWN0dXJraXNoXCIsXG4gICAgICBcImNzcGM4Y29kZXBhZ2U0MzdcIjogXCJjcDQzN1wiLFxuICAgICAgXCJjc3BjNzc1YmFsdGljXCI6IFwiY3A3NzVcIixcbiAgICAgIFwiY3NwYzg1MG11bHRpbGluZ3VhbFwiOiBcImNwODUwXCIsXG4gICAgICBcImNzcGNwODUyXCI6IFwiY3A4NTJcIixcbiAgICAgIFwiY3NwYzg2MmxhdGluaGVicmV3XCI6IFwiY3A4NjJcIixcbiAgICAgIFwiY3BnclwiOiBcImNwODY5XCIsXG4gICAgICBcIm1zZWVcIjogXCJjcDEyNTBcIixcbiAgICAgIFwibXNjeXJsXCI6IFwiY3AxMjUxXCIsXG4gICAgICBcIm1zYW5zaVwiOiBcImNwMTI1MlwiLFxuICAgICAgXCJtc2dyZWVrXCI6IFwiY3AxMjUzXCIsXG4gICAgICBcIm1zdHVya1wiOiBcImNwMTI1NFwiLFxuICAgICAgXCJtc2hlYnJcIjogXCJjcDEyNTVcIixcbiAgICAgIFwibXNhcmFiXCI6IFwiY3AxMjU2XCIsXG4gICAgICBcIndpbmJhbHRyaW1cIjogXCJjcDEyNTdcIixcbiAgICAgIFwiY3AyMDg2NlwiOiBcImtvaThyXCIsXG4gICAgICBcIjIwODY2XCI6IFwia29pOHJcIixcbiAgICAgIFwiaWJtODc4XCI6IFwia29pOHJcIixcbiAgICAgIFwiY3Nrb2k4clwiOiBcImtvaThyXCIsXG4gICAgICBcImNwMjE4NjZcIjogXCJrb2k4dVwiLFxuICAgICAgXCIyMTg2NlwiOiBcImtvaTh1XCIsXG4gICAgICBcImlibTExNjhcIjogXCJrb2k4dVwiLFxuICAgICAgXCJzdHJrMTA0ODIwMDJcIjogXCJyazEwNDhcIixcbiAgICAgIFwidGN2bjU3MTJcIjogXCJ0Y3ZuXCIsXG4gICAgICBcInRjdm41NzEyMVwiOiBcInRjdm5cIixcbiAgICAgIFwiZ2IxOTg4ODBcIjogXCJpc282NDZjblwiLFxuICAgICAgXCJjblwiOiBcImlzbzY0NmNuXCIsXG4gICAgICBcImNzaXNvMTRqaXNjNjIyMHJvXCI6IFwiaXNvNjQ2anBcIixcbiAgICAgIFwiamlzYzYyMjAxOTY5cm9cIjogXCJpc282NDZqcFwiLFxuICAgICAgXCJqcFwiOiBcImlzbzY0NmpwXCIsXG4gICAgICBcImNzaHByb21hbjhcIjogXCJocHJvbWFuOFwiLFxuICAgICAgXCJyOFwiOiBcImhwcm9tYW44XCIsXG4gICAgICBcInJvbWFuOFwiOiBcImhwcm9tYW44XCIsXG4gICAgICBcInhyb21hbjhcIjogXCJocHJvbWFuOFwiLFxuICAgICAgXCJpYm0xMDUxXCI6IFwiaHByb21hbjhcIixcbiAgICAgIFwibWFjXCI6IFwibWFjaW50b3NoXCIsXG4gICAgICBcImNzbWFjaW50b3NoXCI6IFwibWFjaW50b3NoXCJcbiAgICB9O1xuICB9XG59KTtcblxuLy8gbm9kZV9tb2R1bGVzL3Jhdy1ib2R5L25vZGVfbW9kdWxlcy9pY29udi1saXRlL2VuY29kaW5ncy9zYmNzLWRhdGEtZ2VuZXJhdGVkLmpzXG52YXIgcmVxdWlyZV9zYmNzX2RhdGFfZ2VuZXJhdGVkID0gX19jb21tb25KUyh7XG4gIFwibm9kZV9tb2R1bGVzL3Jhdy1ib2R5L25vZGVfbW9kdWxlcy9pY29udi1saXRlL2VuY29kaW5ncy9zYmNzLWRhdGEtZ2VuZXJhdGVkLmpzXCIoZXhwb3J0czIsIG1vZHVsZTIpIHtcbiAgICBcInVzZSBzdHJpY3RcIjtcbiAgICBtb2R1bGUyLmV4cG9ydHMgPSB7XG4gICAgICBcIjQzN1wiOiBcImNwNDM3XCIsXG4gICAgICBcIjczN1wiOiBcImNwNzM3XCIsXG4gICAgICBcIjc3NVwiOiBcImNwNzc1XCIsXG4gICAgICBcIjg1MFwiOiBcImNwODUwXCIsXG4gICAgICBcIjg1MlwiOiBcImNwODUyXCIsXG4gICAgICBcIjg1NVwiOiBcImNwODU1XCIsXG4gICAgICBcIjg1NlwiOiBcImNwODU2XCIsXG4gICAgICBcIjg1N1wiOiBcImNwODU3XCIsXG4gICAgICBcIjg1OFwiOiBcImNwODU4XCIsXG4gICAgICBcIjg2MFwiOiBcImNwODYwXCIsXG4gICAgICBcIjg2MVwiOiBcImNwODYxXCIsXG4gICAgICBcIjg2MlwiOiBcImNwODYyXCIsXG4gICAgICBcIjg2M1wiOiBcImNwODYzXCIsXG4gICAgICBcIjg2NFwiOiBcImNwODY0XCIsXG4gICAgICBcIjg2NVwiOiBcImNwODY1XCIsXG4gICAgICBcIjg2NlwiOiBcImNwODY2XCIsXG4gICAgICBcIjg2OVwiOiBcImNwODY5XCIsXG4gICAgICBcIjg3NFwiOiBcIndpbmRvd3M4NzRcIixcbiAgICAgIFwiOTIyXCI6IFwiY3A5MjJcIixcbiAgICAgIFwiMTA0NlwiOiBcImNwMTA0NlwiLFxuICAgICAgXCIxMTI0XCI6IFwiY3AxMTI0XCIsXG4gICAgICBcIjExMjVcIjogXCJjcDExMjVcIixcbiAgICAgIFwiMTEyOVwiOiBcImNwMTEyOVwiLFxuICAgICAgXCIxMTMzXCI6IFwiY3AxMTMzXCIsXG4gICAgICBcIjExNjFcIjogXCJjcDExNjFcIixcbiAgICAgIFwiMTE2MlwiOiBcImNwMTE2MlwiLFxuICAgICAgXCIxMTYzXCI6IFwiY3AxMTYzXCIsXG4gICAgICBcIjEyNTBcIjogXCJ3aW5kb3dzMTI1MFwiLFxuICAgICAgXCIxMjUxXCI6IFwid2luZG93czEyNTFcIixcbiAgICAgIFwiMTI1MlwiOiBcIndpbmRvd3MxMjUyXCIsXG4gICAgICBcIjEyNTNcIjogXCJ3aW5kb3dzMTI1M1wiLFxuICAgICAgXCIxMjU0XCI6IFwid2luZG93czEyNTRcIixcbiAgICAgIFwiMTI1NVwiOiBcIndpbmRvd3MxMjU1XCIsXG4gICAgICBcIjEyNTZcIjogXCJ3aW5kb3dzMTI1NlwiLFxuICAgICAgXCIxMjU3XCI6IFwid2luZG93czEyNTdcIixcbiAgICAgIFwiMTI1OFwiOiBcIndpbmRvd3MxMjU4XCIsXG4gICAgICBcIjI4NTkxXCI6IFwiaXNvODg1OTFcIixcbiAgICAgIFwiMjg1OTJcIjogXCJpc284ODU5MlwiLFxuICAgICAgXCIyODU5M1wiOiBcImlzbzg4NTkzXCIsXG4gICAgICBcIjI4NTk0XCI6IFwiaXNvODg1OTRcIixcbiAgICAgIFwiMjg1OTVcIjogXCJpc284ODU5NVwiLFxuICAgICAgXCIyODU5NlwiOiBcImlzbzg4NTk2XCIsXG4gICAgICBcIjI4NTk3XCI6IFwiaXNvODg1OTdcIixcbiAgICAgIFwiMjg1OThcIjogXCJpc284ODU5OFwiLFxuICAgICAgXCIyODU5OVwiOiBcImlzbzg4NTk5XCIsXG4gICAgICBcIjI4NjAwXCI6IFwiaXNvODg1OTEwXCIsXG4gICAgICBcIjI4NjAxXCI6IFwiaXNvODg1OTExXCIsXG4gICAgICBcIjI4NjAzXCI6IFwiaXNvODg1OTEzXCIsXG4gICAgICBcIjI4NjA0XCI6IFwiaXNvODg1OTE0XCIsXG4gICAgICBcIjI4NjA1XCI6IFwiaXNvODg1OTE1XCIsXG4gICAgICBcIjI4NjA2XCI6IFwiaXNvODg1OTE2XCIsXG4gICAgICBcIndpbmRvd3M4NzRcIjoge1xuICAgICAgICBcInR5cGVcIjogXCJfc2Jjc1wiLFxuICAgICAgICBcImNoYXJzXCI6IFwiXFx1MjBBQ1xcdUZGRkRcXHVGRkZEXFx1RkZGRFxcdUZGRkRcXHUyMDI2XFx1RkZGRFxcdUZGRkRcXHVGRkZEXFx1RkZGRFxcdUZGRkRcXHVGRkZEXFx1RkZGRFxcdUZGRkRcXHVGRkZEXFx1RkZGRFxcdUZGRkRcXHUyMDE4XFx1MjAxOVxcdTIwMUNcXHUyMDFEXFx1MjAyMlxcdTIwMTNcXHUyMDE0XFx1RkZGRFxcdUZGRkRcXHVGRkZEXFx1RkZGRFxcdUZGRkRcXHVGRkZEXFx1RkZGRFxcdUZGRkRcXHhBMFxcdTBFMDFcXHUwRTAyXFx1MEUwM1xcdTBFMDRcXHUwRTA1XFx1MEUwNlxcdTBFMDdcXHUwRTA4XFx1MEUwOVxcdTBFMEFcXHUwRTBCXFx1MEUwQ1xcdTBFMERcXHUwRTBFXFx1MEUwRlxcdTBFMTBcXHUwRTExXFx1MEUxMlxcdTBFMTNcXHUwRTE0XFx1MEUxNVxcdTBFMTZcXHUwRTE3XFx1MEUxOFxcdTBFMTlcXHUwRTFBXFx1MEUxQlxcdTBFMUNcXHUwRTFEXFx1MEUxRVxcdTBFMUZcXHUwRTIwXFx1MEUyMVxcdTBFMjJcXHUwRTIzXFx1MEUyNFxcdTBFMjVcXHUwRTI2XFx1MEUyN1xcdTBFMjhcXHUwRTI5XFx1MEUyQVxcdTBFMkJcXHUwRTJDXFx1MEUyRFxcdTBFMkVcXHUwRTJGXFx1MEUzMFxcdTBFMzFcXHUwRTMyXFx1MEUzM1xcdTBFMzRcXHUwRTM1XFx1MEUzNlxcdTBFMzdcXHUwRTM4XFx1MEUzOVxcdTBFM0FcXHVGRkZEXFx1RkZGRFxcdUZGRkRcXHVGRkZEXFx1MEUzRlxcdTBFNDBcXHUwRTQxXFx1MEU0MlxcdTBFNDNcXHUwRTQ0XFx1MEU0NVxcdTBFNDZcXHUwRTQ3XFx1MEU0OFxcdTBFNDlcXHUwRTRBXFx1MEU0QlxcdTBFNENcXHUwRTREXFx1MEU0RVxcdTBFNEZcXHUwRTUwXFx1MEU1MVxcdTBFNTJcXHUwRTUzXFx1MEU1NFxcdTBFNTVcXHUwRTU2XFx1MEU1N1xcdTBFNThcXHUwRTU5XFx1MEU1QVxcdTBFNUJcXHVGRkZEXFx1RkZGRFxcdUZGRkRcXHVGRkZEXCJcbiAgICAgIH0sXG4gICAgICBcIndpbjg3NFwiOiBcIndpbmRvd3M4NzRcIixcbiAgICAgIFwiY3A4NzRcIjogXCJ3aW5kb3dzODc0XCIsXG4gICAgICBcIndpbmRvd3MxMjUwXCI6IHtcbiAgICAgICAgXCJ0eXBlXCI6IFwiX3NiY3NcIixcbiAgICAgICAgXCJjaGFyc1wiOiBcIlxcdTIwQUNcXHVGRkZEXFx1MjAxQVxcdUZGRkRcXHUyMDFFXFx1MjAyNlxcdTIwMjBcXHUyMDIxXFx1RkZGRFxcdTIwMzBcXHUwMTYwXFx1MjAzOVxcdTAxNUFcXHUwMTY0XFx1MDE3RFxcdTAxNzlcXHVGRkZEXFx1MjAxOFxcdTIwMTlcXHUyMDFDXFx1MjAxRFxcdTIwMjJcXHUyMDEzXFx1MjAxNFxcdUZGRkRcXHUyMTIyXFx1MDE2MVxcdTIwM0FcXHUwMTVCXFx1MDE2NVxcdTAxN0VcXHUwMTdBXFx4QTBcXHUwMkM3XFx1MDJEOFxcdTAxNDFcXHhBNFxcdTAxMDRcXHhBNlxceEE3XFx4QThcXHhBOVxcdTAxNUVcXHhBQlxceEFDXFx4QURcXHhBRVxcdTAxN0JcXHhCMFxceEIxXFx1MDJEQlxcdTAxNDJcXHhCNFxceEI1XFx4QjZcXHhCN1xceEI4XFx1MDEwNVxcdTAxNUZcXHhCQlxcdTAxM0RcXHUwMkREXFx1MDEzRVxcdTAxN0NcXHUwMTU0XFx4QzFcXHhDMlxcdTAxMDJcXHhDNFxcdTAxMzlcXHUwMTA2XFx4QzdcXHUwMTBDXFx4QzlcXHUwMTE4XFx4Q0JcXHUwMTFBXFx4Q0RcXHhDRVxcdTAxMEVcXHUwMTEwXFx1MDE0M1xcdTAxNDdcXHhEM1xceEQ0XFx1MDE1MFxceEQ2XFx4RDdcXHUwMTU4XFx1MDE2RVxceERBXFx1MDE3MFxceERDXFx4RERcXHUwMTYyXFx4REZcXHUwMTU1XFx4RTFcXHhFMlxcdTAxMDNcXHhFNFxcdTAxM0FcXHUwMTA3XFx4RTdcXHUwMTBEXFx4RTlcXHUwMTE5XFx4RUJcXHUwMTFCXFx4RURcXHhFRVxcdTAxMEZcXHUwMTExXFx1MDE0NFxcdTAxNDhcXHhGM1xceEY0XFx1MDE1MVxceEY2XFx4RjdcXHUwMTU5XFx1MDE2RlxceEZBXFx1MDE3MVxceEZDXFx4RkRcXHUwMTYzXFx1MDJEOVwiXG4gICAgICB9LFxuICAgICAgXCJ3aW4xMjUwXCI6IFwid2luZG93czEyNTBcIixcbiAgICAgIFwiY3AxMjUwXCI6IFwid2luZG93czEyNTBcIixcbiAgICAgIFwid2luZG93czEyNTFcIjoge1xuICAgICAgICBcInR5cGVcIjogXCJfc2Jjc1wiLFxuICAgICAgICBcImNoYXJzXCI6IFwiXFx1MDQwMlxcdTA0MDNcXHUyMDFBXFx1MDQ1M1xcdTIwMUVcXHUyMDI2XFx1MjAyMFxcdTIwMjFcXHUyMEFDXFx1MjAzMFxcdTA0MDlcXHUyMDM5XFx1MDQwQVxcdTA0MENcXHUwNDBCXFx1MDQwRlxcdTA0NTJcXHUyMDE4XFx1MjAxOVxcdTIwMUNcXHUyMDFEXFx1MjAyMlxcdTIwMTNcXHUyMDE0XFx1RkZGRFxcdTIxMjJcXHUwNDU5XFx1MjAzQVxcdTA0NUFcXHUwNDVDXFx1MDQ1QlxcdTA0NUZcXHhBMFxcdTA0MEVcXHUwNDVFXFx1MDQwOFxceEE0XFx1MDQ5MFxceEE2XFx4QTdcXHUwNDAxXFx4QTlcXHUwNDA0XFx4QUJcXHhBQ1xceEFEXFx4QUVcXHUwNDA3XFx4QjBcXHhCMVxcdTA0MDZcXHUwNDU2XFx1MDQ5MVxceEI1XFx4QjZcXHhCN1xcdTA0NTFcXHUyMTE2XFx1MDQ1NFxceEJCXFx1MDQ1OFxcdTA0MDVcXHUwNDU1XFx1MDQ1N1xcdTA0MTBcXHUwNDExXFx1MDQxMlxcdTA0MTNcXHUwNDE0XFx1MDQxNVxcdTA0MTZcXHUwNDE3XFx1MDQxOFxcdTA0MTlcXHUwNDFBXFx1MDQxQlxcdTA0MUNcXHUwNDFEXFx1MDQxRVxcdTA0MUZcXHUwNDIwXFx1MDQyMVxcdTA0MjJcXHUwNDIzXFx1MDQyNFxcdTA0MjVcXHUwNDI2XFx1MDQyN1xcdTA0MjhcXHUwNDI5XFx1MDQyQVxcdTA0MkJcXHUwNDJDXFx1MDQyRFxcdTA0MkVcXHUwNDJGXFx1MDQzMFxcdTA0MzFcXHUwNDMyXFx1MDQzM1xcdTA0MzRcXHUwNDM1XFx1MDQzNlxcdTA0MzdcXHUwNDM4XFx1MDQzOVxcdTA0M0FcXHUwNDNCXFx1MDQzQ1xcdTA0M0RcXHUwNDNFXFx1MDQzRlxcdTA0NDBcXHUwNDQxXFx1MDQ0MlxcdTA0NDNcXHUwNDQ0XFx1MDQ0NVxcdTA0NDZcXHUwNDQ3XFx1MDQ0OFxcdTA0NDlcXHUwNDRBXFx1MDQ0QlxcdTA0NENcXHUwNDREXFx1MDQ0RVxcdTA0NEZcIlxuICAgICAgfSxcbiAgICAgIFwid2luMTI1MVwiOiBcIndpbmRvd3MxMjUxXCIsXG4gICAgICBcImNwMTI1MVwiOiBcIndpbmRvd3MxMjUxXCIsXG4gICAgICBcIndpbmRvd3MxMjUyXCI6IHtcbiAgICAgICAgXCJ0eXBlXCI6IFwiX3NiY3NcIixcbiAgICAgICAgXCJjaGFyc1wiOiBcIlxcdTIwQUNcXHVGRkZEXFx1MjAxQVxcdTAxOTJcXHUyMDFFXFx1MjAyNlxcdTIwMjBcXHUyMDIxXFx1MDJDNlxcdTIwMzBcXHUwMTYwXFx1MjAzOVxcdTAxNTJcXHVGRkZEXFx1MDE3RFxcdUZGRkRcXHVGRkZEXFx1MjAxOFxcdTIwMTlcXHUyMDFDXFx1MjAxRFxcdTIwMjJcXHUyMDEzXFx1MjAxNFxcdTAyRENcXHUyMTIyXFx1MDE2MVxcdTIwM0FcXHUwMTUzXFx1RkZGRFxcdTAxN0VcXHUwMTc4XFx4QTBcXHhBMVxceEEyXFx4QTNcXHhBNFxceEE1XFx4QTZcXHhBN1xceEE4XFx4QTlcXHhBQVxceEFCXFx4QUNcXHhBRFxceEFFXFx4QUZcXHhCMFxceEIxXFx4QjJcXHhCM1xceEI0XFx4QjVcXHhCNlxceEI3XFx4QjhcXHhCOVxceEJBXFx4QkJcXHhCQ1xceEJEXFx4QkVcXHhCRlxceEMwXFx4QzFcXHhDMlxceEMzXFx4QzRcXHhDNVxceEM2XFx4QzdcXHhDOFxceEM5XFx4Q0FcXHhDQlxceENDXFx4Q0RcXHhDRVxceENGXFx4RDBcXHhEMVxceEQyXFx4RDNcXHhENFxceEQ1XFx4RDZcXHhEN1xceEQ4XFx4RDlcXHhEQVxceERCXFx4RENcXHhERFxceERFXFx4REZcXHhFMFxceEUxXFx4RTJcXHhFM1xceEU0XFx4RTVcXHhFNlxceEU3XFx4RThcXHhFOVxceEVBXFx4RUJcXHhFQ1xceEVEXFx4RUVcXHhFRlxceEYwXFx4RjFcXHhGMlxceEYzXFx4RjRcXHhGNVxceEY2XFx4RjdcXHhGOFxceEY5XFx4RkFcXHhGQlxceEZDXFx4RkRcXHhGRVxceEZGXCJcbiAgICAgIH0sXG4gICAgICBcIndpbjEyNTJcIjogXCJ3aW5kb3dzMTI1MlwiLFxuICAgICAgXCJjcDEyNTJcIjogXCJ3aW5kb3dzMTI1MlwiLFxuICAgICAgXCJ3aW5kb3dzMTI1M1wiOiB7XG4gICAgICAgIFwidHlwZVwiOiBcIl9zYmNzXCIsXG4gICAgICAgIFwiY2hhcnNcIjogXCJcXHUyMEFDXFx1RkZGRFxcdTIwMUFcXHUwMTkyXFx1MjAxRVxcdTIwMjZcXHUyMDIwXFx1MjAyMVxcdUZGRkRcXHUyMDMwXFx1RkZGRFxcdTIwMzlcXHVGRkZEXFx1RkZGRFxcdUZGRkRcXHVGRkZEXFx1RkZGRFxcdTIwMThcXHUyMDE5XFx1MjAxQ1xcdTIwMURcXHUyMDIyXFx1MjAxM1xcdTIwMTRcXHVGRkZEXFx1MjEyMlxcdUZGRkRcXHUyMDNBXFx1RkZGRFxcdUZGRkRcXHVGRkZEXFx1RkZGRFxceEEwXFx1MDM4NVxcdTAzODZcXHhBM1xceEE0XFx4QTVcXHhBNlxceEE3XFx4QThcXHhBOVxcdUZGRkRcXHhBQlxceEFDXFx4QURcXHhBRVxcdTIwMTVcXHhCMFxceEIxXFx4QjJcXHhCM1xcdTAzODRcXHhCNVxceEI2XFx4QjdcXHUwMzg4XFx1MDM4OVxcdTAzOEFcXHhCQlxcdTAzOENcXHhCRFxcdTAzOEVcXHUwMzhGXFx1MDM5MFxcdTAzOTFcXHUwMzkyXFx1MDM5M1xcdTAzOTRcXHUwMzk1XFx1MDM5NlxcdTAzOTdcXHUwMzk4XFx1MDM5OVxcdTAzOUFcXHUwMzlCXFx1MDM5Q1xcdTAzOURcXHUwMzlFXFx1MDM5RlxcdTAzQTBcXHUwM0ExXFx1RkZGRFxcdTAzQTNcXHUwM0E0XFx1MDNBNVxcdTAzQTZcXHUwM0E3XFx1MDNBOFxcdTAzQTlcXHUwM0FBXFx1MDNBQlxcdTAzQUNcXHUwM0FEXFx1MDNBRVxcdTAzQUZcXHUwM0IwXFx1MDNCMVxcdTAzQjJcXHUwM0IzXFx1MDNCNFxcdTAzQjVcXHUwM0I2XFx1MDNCN1xcdTAzQjhcXHUwM0I5XFx1MDNCQVxcdTAzQkJcXHUwM0JDXFx1MDNCRFxcdTAzQkVcXHUwM0JGXFx1MDNDMFxcdTAzQzFcXHUwM0MyXFx1MDNDM1xcdTAzQzRcXHUwM0M1XFx1MDNDNlxcdTAzQzdcXHUwM0M4XFx1MDNDOVxcdTAzQ0FcXHUwM0NCXFx1MDNDQ1xcdTAzQ0RcXHUwM0NFXFx1RkZGRFwiXG4gICAgICB9LFxuICAgICAgXCJ3aW4xMjUzXCI6IFwid2luZG93czEyNTNcIixcbiAgICAgIFwiY3AxMjUzXCI6IFwid2luZG93czEyNTNcIixcbiAgICAgIFwid2luZG93czEyNTRcIjoge1xuICAgICAgICBcInR5cGVcIjogXCJfc2Jjc1wiLFxuICAgICAgICBcImNoYXJzXCI6IFwiXFx1MjBBQ1xcdUZGRkRcXHUyMDFBXFx1MDE5MlxcdTIwMUVcXHUyMDI2XFx1MjAyMFxcdTIwMjFcXHUwMkM2XFx1MjAzMFxcdTAxNjBcXHUyMDM5XFx1MDE1MlxcdUZGRkRcXHVGRkZEXFx1RkZGRFxcdUZGRkRcXHUyMDE4XFx1MjAxOVxcdTIwMUNcXHUyMDFEXFx1MjAyMlxcdTIwMTNcXHUyMDE0XFx1MDJEQ1xcdTIxMjJcXHUwMTYxXFx1MjAzQVxcdTAxNTNcXHVGRkZEXFx1RkZGRFxcdTAxNzhcXHhBMFxceEExXFx4QTJcXHhBM1xceEE0XFx4QTVcXHhBNlxceEE3XFx4QThcXHhBOVxceEFBXFx4QUJcXHhBQ1xceEFEXFx4QUVcXHhBRlxceEIwXFx4QjFcXHhCMlxceEIzXFx4QjRcXHhCNVxceEI2XFx4QjdcXHhCOFxceEI5XFx4QkFcXHhCQlxceEJDXFx4QkRcXHhCRVxceEJGXFx4QzBcXHhDMVxceEMyXFx4QzNcXHhDNFxceEM1XFx4QzZcXHhDN1xceEM4XFx4QzlcXHhDQVxceENCXFx4Q0NcXHhDRFxceENFXFx4Q0ZcXHUwMTFFXFx4RDFcXHhEMlxceEQzXFx4RDRcXHhENVxceEQ2XFx4RDdcXHhEOFxceEQ5XFx4REFcXHhEQlxceERDXFx1MDEzMFxcdTAxNUVcXHhERlxceEUwXFx4RTFcXHhFMlxceEUzXFx4RTRcXHhFNVxceEU2XFx4RTdcXHhFOFxceEU5XFx4RUFcXHhFQlxceEVDXFx4RURcXHhFRVxceEVGXFx1MDExRlxceEYxXFx4RjJcXHhGM1xceEY0XFx4RjVcXHhGNlxceEY3XFx4RjhcXHhGOVxceEZBXFx4RkJcXHhGQ1xcdTAxMzFcXHUwMTVGXFx4RkZcIlxuICAgICAgfSxcbiAgICAgIFwid2luMTI1NFwiOiBcIndpbmRvd3MxMjU0XCIsXG4gICAgICBcImNwMTI1NFwiOiBcIndpbmRvd3MxMjU0XCIsXG4gICAgICBcIndpbmRvd3MxMjU1XCI6IHtcbiAgICAgICAgXCJ0eXBlXCI6IFwiX3NiY3NcIixcbiAgICAgICAgXCJjaGFyc1wiOiBcIlxcdTIwQUNcXHVGRkZEXFx1MjAxQVxcdTAxOTJcXHUyMDFFXFx1MjAyNlxcdTIwMjBcXHUyMDIxXFx1MDJDNlxcdTIwMzBcXHVGRkZEXFx1MjAzOVxcdUZGRkRcXHVGRkZEXFx1RkZGRFxcdUZGRkRcXHVGRkZEXFx1MjAxOFxcdTIwMTlcXHUyMDFDXFx1MjAxRFxcdTIwMjJcXHUyMDEzXFx1MjAxNFxcdTAyRENcXHUyMTIyXFx1RkZGRFxcdTIwM0FcXHVGRkZEXFx1RkZGRFxcdUZGRkRcXHVGRkZEXFx4QTBcXHhBMVxceEEyXFx4QTNcXHUyMEFBXFx4QTVcXHhBNlxceEE3XFx4QThcXHhBOVxceEQ3XFx4QUJcXHhBQ1xceEFEXFx4QUVcXHhBRlxceEIwXFx4QjFcXHhCMlxceEIzXFx4QjRcXHhCNVxceEI2XFx4QjdcXHhCOFxceEI5XFx4RjdcXHhCQlxceEJDXFx4QkRcXHhCRVxceEJGXFx1MDVCMFxcdTA1QjFcXHUwNUIyXFx1MDVCM1xcdTA1QjRcXHUwNUI1XFx1MDVCNlxcdTA1QjdcXHUwNUI4XFx1MDVCOVxcdTA1QkFcXHUwNUJCXFx1MDVCQ1xcdTA1QkRcXHUwNUJFXFx1MDVCRlxcdTA1QzBcXHUwNUMxXFx1MDVDMlxcdTA1QzNcXHUwNUYwXFx1MDVGMVxcdTA1RjJcXHUwNUYzXFx1MDVGNFxcdUZGRkRcXHVGRkZEXFx1RkZGRFxcdUZGRkRcXHVGRkZEXFx1RkZGRFxcdUZGRkRcXHUwNUQwXFx1MDVEMVxcdTA1RDJcXHUwNUQzXFx1MDVENFxcdTA1RDVcXHUwNUQ2XFx1MDVEN1xcdTA1RDhcXHUwNUQ5XFx1MDVEQVxcdTA1REJcXHUwNURDXFx1MDVERFxcdTA1REVcXHUwNURGXFx1MDVFMFxcdTA1RTFcXHUwNUUyXFx1MDVFM1xcdTA1RTRcXHUwNUU1XFx1MDVFNlxcdTA1RTdcXHUwNUU4XFx1MDVFOVxcdTA1RUFcXHVGRkZEXFx1RkZGRFxcdTIwMEVcXHUyMDBGXFx1RkZGRFwiXG4gICAgICB9LFxuICAgICAgXCJ3aW4xMjU1XCI6IFwid2luZG93czEyNTVcIixcbiAgICAgIFwiY3AxMjU1XCI6IFwid2luZG93czEyNTVcIixcbiAgICAgIFwid2luZG93czEyNTZcIjoge1xuICAgICAgICBcInR5cGVcIjogXCJfc2Jjc1wiLFxuICAgICAgICBcImNoYXJzXCI6IFwiXFx1MjBBQ1xcdTA2N0VcXHUyMDFBXFx1MDE5MlxcdTIwMUVcXHUyMDI2XFx1MjAyMFxcdTIwMjFcXHUwMkM2XFx1MjAzMFxcdTA2NzlcXHUyMDM5XFx1MDE1MlxcdTA2ODZcXHUwNjk4XFx1MDY4OFxcdTA2QUZcXHUyMDE4XFx1MjAxOVxcdTIwMUNcXHUyMDFEXFx1MjAyMlxcdTIwMTNcXHUyMDE0XFx1MDZBOVxcdTIxMjJcXHUwNjkxXFx1MjAzQVxcdTAxNTNcXHUyMDBDXFx1MjAwRFxcdTA2QkFcXHhBMFxcdTA2MENcXHhBMlxceEEzXFx4QTRcXHhBNVxceEE2XFx4QTdcXHhBOFxceEE5XFx1MDZCRVxceEFCXFx4QUNcXHhBRFxceEFFXFx4QUZcXHhCMFxceEIxXFx4QjJcXHhCM1xceEI0XFx4QjVcXHhCNlxceEI3XFx4QjhcXHhCOVxcdTA2MUJcXHhCQlxceEJDXFx4QkRcXHhCRVxcdTA2MUZcXHUwNkMxXFx1MDYyMVxcdTA2MjJcXHUwNjIzXFx1MDYyNFxcdTA2MjVcXHUwNjI2XFx1MDYyN1xcdTA2MjhcXHUwNjI5XFx1MDYyQVxcdTA2MkJcXHUwNjJDXFx1MDYyRFxcdTA2MkVcXHUwNjJGXFx1MDYzMFxcdTA2MzFcXHUwNjMyXFx1MDYzM1xcdTA2MzRcXHUwNjM1XFx1MDYzNlxceEQ3XFx1MDYzN1xcdTA2MzhcXHUwNjM5XFx1MDYzQVxcdTA2NDBcXHUwNjQxXFx1MDY0MlxcdTA2NDNcXHhFMFxcdTA2NDRcXHhFMlxcdTA2NDVcXHUwNjQ2XFx1MDY0N1xcdTA2NDhcXHhFN1xceEU4XFx4RTlcXHhFQVxceEVCXFx1MDY0OVxcdTA2NEFcXHhFRVxceEVGXFx1MDY0QlxcdTA2NENcXHUwNjREXFx1MDY0RVxceEY0XFx1MDY0RlxcdTA2NTBcXHhGN1xcdTA2NTFcXHhGOVxcdTA2NTJcXHhGQlxceEZDXFx1MjAwRVxcdTIwMEZcXHUwNkQyXCJcbiAgICAgIH0sXG4gICAgICBcIndpbjEyNTZcIjogXCJ3aW5kb3dzMTI1NlwiLFxuICAgICAgXCJjcDEyNTZcIjogXCJ3aW5kb3dzMTI1NlwiLFxuICAgICAgXCJ3aW5kb3dzMTI1N1wiOiB7XG4gICAgICAgIFwidHlwZVwiOiBcIl9zYmNzXCIsXG4gICAgICAgIFwiY2hhcnNcIjogXCJcXHUyMEFDXFx1RkZGRFxcdTIwMUFcXHVGRkZEXFx1MjAxRVxcdTIwMjZcXHUyMDIwXFx1MjAyMVxcdUZGRkRcXHUyMDMwXFx1RkZGRFxcdTIwMzlcXHVGRkZEXFx4QThcXHUwMkM3XFx4QjhcXHVGRkZEXFx1MjAxOFxcdTIwMTlcXHUyMDFDXFx1MjAxRFxcdTIwMjJcXHUyMDEzXFx1MjAxNFxcdUZGRkRcXHUyMTIyXFx1RkZGRFxcdTIwM0FcXHVGRkZEXFx4QUZcXHUwMkRCXFx1RkZGRFxceEEwXFx1RkZGRFxceEEyXFx4QTNcXHhBNFxcdUZGRkRcXHhBNlxceEE3XFx4RDhcXHhBOVxcdTAxNTZcXHhBQlxceEFDXFx4QURcXHhBRVxceEM2XFx4QjBcXHhCMVxceEIyXFx4QjNcXHhCNFxceEI1XFx4QjZcXHhCN1xceEY4XFx4QjlcXHUwMTU3XFx4QkJcXHhCQ1xceEJEXFx4QkVcXHhFNlxcdTAxMDRcXHUwMTJFXFx1MDEwMFxcdTAxMDZcXHhDNFxceEM1XFx1MDExOFxcdTAxMTJcXHUwMTBDXFx4QzlcXHUwMTc5XFx1MDExNlxcdTAxMjJcXHUwMTM2XFx1MDEyQVxcdTAxM0JcXHUwMTYwXFx1MDE0M1xcdTAxNDVcXHhEM1xcdTAxNENcXHhENVxceEQ2XFx4RDdcXHUwMTcyXFx1MDE0MVxcdTAxNUFcXHUwMTZBXFx4RENcXHUwMTdCXFx1MDE3RFxceERGXFx1MDEwNVxcdTAxMkZcXHUwMTAxXFx1MDEwN1xceEU0XFx4RTVcXHUwMTE5XFx1MDExM1xcdTAxMERcXHhFOVxcdTAxN0FcXHUwMTE3XFx1MDEyM1xcdTAxMzdcXHUwMTJCXFx1MDEzQ1xcdTAxNjFcXHUwMTQ0XFx1MDE0NlxceEYzXFx1MDE0RFxceEY1XFx4RjZcXHhGN1xcdTAxNzNcXHUwMTQyXFx1MDE1QlxcdTAxNkJcXHhGQ1xcdTAxN0NcXHUwMTdFXFx1MDJEOVwiXG4gICAgICB9LFxuICAgICAgXCJ3aW4xMjU3XCI6IFwid2luZG93czEyNTdcIixcbiAgICAgIFwiY3AxMjU3XCI6IFwid2luZG93czEyNTdcIixcbiAgICAgIFwid2luZG93czEyNThcIjoge1xuICAgICAgICBcInR5cGVcIjogXCJfc2Jjc1wiLFxuICAgICAgICBcImNoYXJzXCI6IFwiXFx1MjBBQ1xcdUZGRkRcXHUyMDFBXFx1MDE5MlxcdTIwMUVcXHUyMDI2XFx1MjAyMFxcdTIwMjFcXHUwMkM2XFx1MjAzMFxcdUZGRkRcXHUyMDM5XFx1MDE1MlxcdUZGRkRcXHVGRkZEXFx1RkZGRFxcdUZGRkRcXHUyMDE4XFx1MjAxOVxcdTIwMUNcXHUyMDFEXFx1MjAyMlxcdTIwMTNcXHUyMDE0XFx1MDJEQ1xcdTIxMjJcXHVGRkZEXFx1MjAzQVxcdTAxNTNcXHVGRkZEXFx1RkZGRFxcdTAxNzhcXHhBMFxceEExXFx4QTJcXHhBM1xceEE0XFx4QTVcXHhBNlxceEE3XFx4QThcXHhBOVxceEFBXFx4QUJcXHhBQ1xceEFEXFx4QUVcXHhBRlxceEIwXFx4QjFcXHhCMlxceEIzXFx4QjRcXHhCNVxceEI2XFx4QjdcXHhCOFxceEI5XFx4QkFcXHhCQlxceEJDXFx4QkRcXHhCRVxceEJGXFx4QzBcXHhDMVxceEMyXFx1MDEwMlxceEM0XFx4QzVcXHhDNlxceEM3XFx4QzhcXHhDOVxceENBXFx4Q0JcXHUwMzAwXFx4Q0RcXHhDRVxceENGXFx1MDExMFxceEQxXFx1MDMwOVxceEQzXFx4RDRcXHUwMUEwXFx4RDZcXHhEN1xceEQ4XFx4RDlcXHhEQVxceERCXFx4RENcXHUwMUFGXFx1MDMwM1xceERGXFx4RTBcXHhFMVxceEUyXFx1MDEwM1xceEU0XFx4RTVcXHhFNlxceEU3XFx4RThcXHhFOVxceEVBXFx4RUJcXHUwMzAxXFx4RURcXHhFRVxceEVGXFx1MDExMVxceEYxXFx1MDMyM1xceEYzXFx4RjRcXHUwMUExXFx4RjZcXHhGN1xceEY4XFx4RjlcXHhGQVxceEZCXFx4RkNcXHUwMUIwXFx1MjBBQlxceEZGXCJcbiAgICAgIH0sXG4gICAgICBcIndpbjEyNThcIjogXCJ3aW5kb3dzMTI1OFwiLFxuICAgICAgXCJjcDEyNThcIjogXCJ3aW5kb3dzMTI1OFwiLFxuICAgICAgXCJpc284ODU5MVwiOiB7XG4gICAgICAgIFwidHlwZVwiOiBcIl9zYmNzXCIsXG4gICAgICAgIFwiY2hhcnNcIjogXCJcXHg4MFxceDgxXFx4ODJcXHg4M1xceDg0XFx4ODVcXHg4NlxceDg3XFx4ODhcXHg4OVxceDhBXFx4OEJcXHg4Q1xceDhEXFx4OEVcXHg4RlxceDkwXFx4OTFcXHg5MlxceDkzXFx4OTRcXHg5NVxceDk2XFx4OTdcXHg5OFxceDk5XFx4OUFcXHg5QlxceDlDXFx4OURcXHg5RVxceDlGXFx4QTBcXHhBMVxceEEyXFx4QTNcXHhBNFxceEE1XFx4QTZcXHhBN1xceEE4XFx4QTlcXHhBQVxceEFCXFx4QUNcXHhBRFxceEFFXFx4QUZcXHhCMFxceEIxXFx4QjJcXHhCM1xceEI0XFx4QjVcXHhCNlxceEI3XFx4QjhcXHhCOVxceEJBXFx4QkJcXHhCQ1xceEJEXFx4QkVcXHhCRlxceEMwXFx4QzFcXHhDMlxceEMzXFx4QzRcXHhDNVxceEM2XFx4QzdcXHhDOFxceEM5XFx4Q0FcXHhDQlxceENDXFx4Q0RcXHhDRVxceENGXFx4RDBcXHhEMVxceEQyXFx4RDNcXHhENFxceEQ1XFx4RDZcXHhEN1xceEQ4XFx4RDlcXHhEQVxceERCXFx4RENcXHhERFxceERFXFx4REZcXHhFMFxceEUxXFx4RTJcXHhFM1xceEU0XFx4RTVcXHhFNlxceEU3XFx4RThcXHhFOVxceEVBXFx4RUJcXHhFQ1xceEVEXFx4RUVcXHhFRlxceEYwXFx4RjFcXHhGMlxceEYzXFx4RjRcXHhGNVxceEY2XFx4RjdcXHhGOFxceEY5XFx4RkFcXHhGQlxceEZDXFx4RkRcXHhGRVxceEZGXCJcbiAgICAgIH0sXG4gICAgICBcImNwMjg1OTFcIjogXCJpc284ODU5MVwiLFxuICAgICAgXCJpc284ODU5MlwiOiB7XG4gICAgICAgIFwidHlwZVwiOiBcIl9zYmNzXCIsXG4gICAgICAgIFwiY2hhcnNcIjogXCJcXHg4MFxceDgxXFx4ODJcXHg4M1xceDg0XFx4ODVcXHg4NlxceDg3XFx4ODhcXHg4OVxceDhBXFx4OEJcXHg4Q1xceDhEXFx4OEVcXHg4RlxceDkwXFx4OTFcXHg5MlxceDkzXFx4OTRcXHg5NVxceDk2XFx4OTdcXHg5OFxceDk5XFx4OUFcXHg5QlxceDlDXFx4OURcXHg5RVxceDlGXFx4QTBcXHUwMTA0XFx1MDJEOFxcdTAxNDFcXHhBNFxcdTAxM0RcXHUwMTVBXFx4QTdcXHhBOFxcdTAxNjBcXHUwMTVFXFx1MDE2NFxcdTAxNzlcXHhBRFxcdTAxN0RcXHUwMTdCXFx4QjBcXHUwMTA1XFx1MDJEQlxcdTAxNDJcXHhCNFxcdTAxM0VcXHUwMTVCXFx1MDJDN1xceEI4XFx1MDE2MVxcdTAxNUZcXHUwMTY1XFx1MDE3QVxcdTAyRERcXHUwMTdFXFx1MDE3Q1xcdTAxNTRcXHhDMVxceEMyXFx1MDEwMlxceEM0XFx1MDEzOVxcdTAxMDZcXHhDN1xcdTAxMENcXHhDOVxcdTAxMThcXHhDQlxcdTAxMUFcXHhDRFxceENFXFx1MDEwRVxcdTAxMTBcXHUwMTQzXFx1MDE0N1xceEQzXFx4RDRcXHUwMTUwXFx4RDZcXHhEN1xcdTAxNThcXHUwMTZFXFx4REFcXHUwMTcwXFx4RENcXHhERFxcdTAxNjJcXHhERlxcdTAxNTVcXHhFMVxceEUyXFx1MDEwM1xceEU0XFx1MDEzQVxcdTAxMDdcXHhFN1xcdTAxMERcXHhFOVxcdTAxMTlcXHhFQlxcdTAxMUJcXHhFRFxceEVFXFx1MDEwRlxcdTAxMTFcXHUwMTQ0XFx1MDE0OFxceEYzXFx4RjRcXHUwMTUxXFx4RjZcXHhGN1xcdTAxNTlcXHUwMTZGXFx4RkFcXHUwMTcxXFx4RkNcXHhGRFxcdTAxNjNcXHUwMkQ5XCJcbiAgICAgIH0sXG4gICAgICBcImNwMjg1OTJcIjogXCJpc284ODU5MlwiLFxuICAgICAgXCJpc284ODU5M1wiOiB7XG4gICAgICAgIFwidHlwZVwiOiBcIl9zYmNzXCIsXG4gICAgICAgIFwiY2hhcnNcIjogXCJcXHg4MFxceDgxXFx4ODJcXHg4M1xceDg0XFx4ODVcXHg4NlxceDg3XFx4ODhcXHg4OVxceDhBXFx4OEJcXHg4Q1xceDhEXFx4OEVcXHg4RlxceDkwXFx4OTFcXHg5MlxceDkzXFx4OTRcXHg5NVxceDk2XFx4OTdcXHg5OFxceDk5XFx4OUFcXHg5QlxceDlDXFx4OURcXHg5RVxceDlGXFx4QTBcXHUwMTI2XFx1MDJEOFxceEEzXFx4QTRcXHVGRkZEXFx1MDEyNFxceEE3XFx4QThcXHUwMTMwXFx1MDE1RVxcdTAxMUVcXHUwMTM0XFx4QURcXHVGRkZEXFx1MDE3QlxceEIwXFx1MDEyN1xceEIyXFx4QjNcXHhCNFxceEI1XFx1MDEyNVxceEI3XFx4QjhcXHUwMTMxXFx1MDE1RlxcdTAxMUZcXHUwMTM1XFx4QkRcXHVGRkZEXFx1MDE3Q1xceEMwXFx4QzFcXHhDMlxcdUZGRkRcXHhDNFxcdTAxMEFcXHUwMTA4XFx4QzdcXHhDOFxceEM5XFx4Q0FcXHhDQlxceENDXFx4Q0RcXHhDRVxceENGXFx1RkZGRFxceEQxXFx4RDJcXHhEM1xceEQ0XFx1MDEyMFxceEQ2XFx4RDdcXHUwMTFDXFx4RDlcXHhEQVxceERCXFx4RENcXHUwMTZDXFx1MDE1Q1xceERGXFx4RTBcXHhFMVxceEUyXFx1RkZGRFxceEU0XFx1MDEwQlxcdTAxMDlcXHhFN1xceEU4XFx4RTlcXHhFQVxceEVCXFx4RUNcXHhFRFxceEVFXFx4RUZcXHVGRkZEXFx4RjFcXHhGMlxceEYzXFx4RjRcXHUwMTIxXFx4RjZcXHhGN1xcdTAxMURcXHhGOVxceEZBXFx4RkJcXHhGQ1xcdTAxNkRcXHUwMTVEXFx1MDJEOVwiXG4gICAgICB9LFxuICAgICAgXCJjcDI4NTkzXCI6IFwiaXNvODg1OTNcIixcbiAgICAgIFwiaXNvODg1OTRcIjoge1xuICAgICAgICBcInR5cGVcIjogXCJfc2Jjc1wiLFxuICAgICAgICBcImNoYXJzXCI6IFwiXFx4ODBcXHg4MVxceDgyXFx4ODNcXHg4NFxceDg1XFx4ODZcXHg4N1xceDg4XFx4ODlcXHg4QVxceDhCXFx4OENcXHg4RFxceDhFXFx4OEZcXHg5MFxceDkxXFx4OTJcXHg5M1xceDk0XFx4OTVcXHg5NlxceDk3XFx4OThcXHg5OVxceDlBXFx4OUJcXHg5Q1xceDlEXFx4OUVcXHg5RlxceEEwXFx1MDEwNFxcdTAxMzhcXHUwMTU2XFx4QTRcXHUwMTI4XFx1MDEzQlxceEE3XFx4QThcXHUwMTYwXFx1MDExMlxcdTAxMjJcXHUwMTY2XFx4QURcXHUwMTdEXFx4QUZcXHhCMFxcdTAxMDVcXHUwMkRCXFx1MDE1N1xceEI0XFx1MDEyOVxcdTAxM0NcXHUwMkM3XFx4QjhcXHUwMTYxXFx1MDExM1xcdTAxMjNcXHUwMTY3XFx1MDE0QVxcdTAxN0VcXHUwMTRCXFx1MDEwMFxceEMxXFx4QzJcXHhDM1xceEM0XFx4QzVcXHhDNlxcdTAxMkVcXHUwMTBDXFx4QzlcXHUwMTE4XFx4Q0JcXHUwMTE2XFx4Q0RcXHhDRVxcdTAxMkFcXHUwMTEwXFx1MDE0NVxcdTAxNENcXHUwMTM2XFx4RDRcXHhENVxceEQ2XFx4RDdcXHhEOFxcdTAxNzJcXHhEQVxceERCXFx4RENcXHUwMTY4XFx1MDE2QVxceERGXFx1MDEwMVxceEUxXFx4RTJcXHhFM1xceEU0XFx4RTVcXHhFNlxcdTAxMkZcXHUwMTBEXFx4RTlcXHUwMTE5XFx4RUJcXHUwMTE3XFx4RURcXHhFRVxcdTAxMkJcXHUwMTExXFx1MDE0NlxcdTAxNERcXHUwMTM3XFx4RjRcXHhGNVxceEY2XFx4RjdcXHhGOFxcdTAxNzNcXHhGQVxceEZCXFx4RkNcXHUwMTY5XFx1MDE2QlxcdTAyRDlcIlxuICAgICAgfSxcbiAgICAgIFwiY3AyODU5NFwiOiBcImlzbzg4NTk0XCIsXG4gICAgICBcImlzbzg4NTk1XCI6IHtcbiAgICAgICAgXCJ0eXBlXCI6IFwiX3NiY3NcIixcbiAgICAgICAgXCJjaGFyc1wiOiBcIlxceDgwXFx4ODFcXHg4MlxceDgzXFx4ODRcXHg4NVxceDg2XFx4ODdcXHg4OFxceDg5XFx4OEFcXHg4QlxceDhDXFx4OERcXHg4RVxceDhGXFx4OTBcXHg5MVxceDkyXFx4OTNcXHg5NFxceDk1XFx4OTZcXHg5N1xceDk4XFx4OTlcXHg5QVxceDlCXFx4OUNcXHg5RFxceDlFXFx4OUZcXHhBMFxcdTA0MDFcXHUwNDAyXFx1MDQwM1xcdTA0MDRcXHUwNDA1XFx1MDQwNlxcdTA0MDdcXHUwNDA4XFx1MDQwOVxcdTA0MEFcXHUwNDBCXFx1MDQwQ1xceEFEXFx1MDQwRVxcdTA0MEZcXHUwNDEwXFx1MDQxMVxcdTA0MTJcXHUwNDEzXFx1MDQxNFxcdTA0MTVcXHUwNDE2XFx1MDQxN1xcdTA0MThcXHUwNDE5XFx1MDQxQVxcdTA0MUJcXHUwNDFDXFx1MDQxRFxcdTA0MUVcXHUwNDFGXFx1MDQyMFxcdTA0MjFcXHUwNDIyXFx1MDQyM1xcdTA0MjRcXHUwNDI1XFx1MDQyNlxcdTA0MjdcXHUwNDI4XFx1MDQyOVxcdTA0MkFcXHUwNDJCXFx1MDQyQ1xcdTA0MkRcXHUwNDJFXFx1MDQyRlxcdTA0MzBcXHUwNDMxXFx1MDQzMlxcdTA0MzNcXHUwNDM0XFx1MDQzNVxcdTA0MzZcXHUwNDM3XFx1MDQzOFxcdTA0MzlcXHUwNDNBXFx1MDQzQlxcdTA0M0NcXHUwNDNEXFx1MDQzRVxcdTA0M0ZcXHUwNDQwXFx1MDQ0MVxcdTA0NDJcXHUwNDQzXFx1MDQ0NFxcdTA0NDVcXHUwNDQ2XFx1MDQ0N1xcdTA0NDhcXHUwNDQ5XFx1MDQ0QVxcdTA0NEJcXHUwNDRDXFx1MDQ0RFxcdTA0NEVcXHUwNDRGXFx1MjExNlxcdTA0NTFcXHUwNDUyXFx1MDQ1M1xcdTA0NTRcXHUwNDU1XFx1MDQ1NlxcdTA0NTdcXHUwNDU4XFx1MDQ1OVxcdTA0NUFcXHUwNDVCXFx1MDQ1Q1xceEE3XFx1MDQ1RVxcdTA0NUZcIlxuICAgICAgfSxcbiAgICAgIFwiY3AyODU5NVwiOiBcImlzbzg4NTk1XCIsXG4gICAgICBcImlzbzg4NTk2XCI6IHtcbiAgICAgICAgXCJ0eXBlXCI6IFwiX3NiY3NcIixcbiAgICAgICAgXCJjaGFyc1wiOiBcIlxceDgwXFx4ODFcXHg4MlxceDgzXFx4ODRcXHg4NVxceDg2XFx4ODdcXHg4OFxceDg5XFx4OEFcXHg4QlxceDhDXFx4OERcXHg4RVxceDhGXFx4OTBcXHg5MVxceDkyXFx4OTNcXHg5NFxceDk1XFx4OTZcXHg5N1xceDk4XFx4OTlcXHg5QVxceDlCXFx4OUNcXHg5RFxceDlFXFx4OUZcXHhBMFxcdUZGRkRcXHVGRkZEXFx1RkZGRFxceEE0XFx1RkZGRFxcdUZGRkRcXHVGRkZEXFx1RkZGRFxcdUZGRkRcXHVGRkZEXFx1RkZGRFxcdTA2MENcXHhBRFxcdUZGRkRcXHVGRkZEXFx1RkZGRFxcdUZGRkRcXHVGRkZEXFx1RkZGRFxcdUZGRkRcXHVGRkZEXFx1RkZGRFxcdUZGRkRcXHVGRkZEXFx1RkZGRFxcdUZGRkRcXHUwNjFCXFx1RkZGRFxcdUZGRkRcXHVGRkZEXFx1MDYxRlxcdUZGRkRcXHUwNjIxXFx1MDYyMlxcdTA2MjNcXHUwNjI0XFx1MDYyNVxcdTA2MjZcXHUwNjI3XFx1MDYyOFxcdTA2MjlcXHUwNjJBXFx1MDYyQlxcdTA2MkNcXHUwNjJEXFx1MDYyRVxcdTA2MkZcXHUwNjMwXFx1MDYzMVxcdTA2MzJcXHUwNjMzXFx1MDYzNFxcdTA2MzVcXHUwNjM2XFx1MDYzN1xcdTA2MzhcXHUwNjM5XFx1MDYzQVxcdUZGRkRcXHVGRkZEXFx1RkZGRFxcdUZGRkRcXHVGRkZEXFx1MDY0MFxcdTA2NDFcXHUwNjQyXFx1MDY0M1xcdTA2NDRcXHUwNjQ1XFx1MDY0NlxcdTA2NDdcXHUwNjQ4XFx1MDY0OVxcdTA2NEFcXHUwNjRCXFx1MDY0Q1xcdTA2NERcXHUwNjRFXFx1MDY0RlxcdTA2NTBcXHUwNjUxXFx1MDY1MlxcdUZGRkRcXHVGRkZEXFx1RkZGRFxcdUZGRkRcXHVGRkZEXFx1RkZGRFxcdUZGRkRcXHVGRkZEXFx1RkZGRFxcdUZGRkRcXHVGRkZEXFx1RkZGRFxcdUZGRkRcIlxuICAgICAgfSxcbiAgICAgIFwiY3AyODU5NlwiOiBcImlzbzg4NTk2XCIsXG4gICAgICBcImlzbzg4NTk3XCI6IHtcbiAgICAgICAgXCJ0eXBlXCI6IFwiX3NiY3NcIixcbiAgICAgICAgXCJjaGFyc1wiOiBcIlxceDgwXFx4ODFcXHg4MlxceDgzXFx4ODRcXHg4NVxceDg2XFx4ODdcXHg4OFxceDg5XFx4OEFcXHg4QlxceDhDXFx4OERcXHg4RVxceDhGXFx4OTBcXHg5MVxceDkyXFx4OTNcXHg5NFxceDk1XFx4OTZcXHg5N1xceDk4XFx4OTlcXHg5QVxceDlCXFx4OUNcXHg5RFxceDlFXFx4OUZcXHhBMFxcdTIwMThcXHUyMDE5XFx4QTNcXHUyMEFDXFx1MjBBRlxceEE2XFx4QTdcXHhBOFxceEE5XFx1MDM3QVxceEFCXFx4QUNcXHhBRFxcdUZGRkRcXHUyMDE1XFx4QjBcXHhCMVxceEIyXFx4QjNcXHUwMzg0XFx1MDM4NVxcdTAzODZcXHhCN1xcdTAzODhcXHUwMzg5XFx1MDM4QVxceEJCXFx1MDM4Q1xceEJEXFx1MDM4RVxcdTAzOEZcXHUwMzkwXFx1MDM5MVxcdTAzOTJcXHUwMzkzXFx1MDM5NFxcdTAzOTVcXHUwMzk2XFx1MDM5N1xcdTAzOThcXHUwMzk5XFx1MDM5QVxcdTAzOUJcXHUwMzlDXFx1MDM5RFxcdTAzOUVcXHUwMzlGXFx1MDNBMFxcdTAzQTFcXHVGRkZEXFx1MDNBM1xcdTAzQTRcXHUwM0E1XFx1MDNBNlxcdTAzQTdcXHUwM0E4XFx1MDNBOVxcdTAzQUFcXHUwM0FCXFx1MDNBQ1xcdTAzQURcXHUwM0FFXFx1MDNBRlxcdTAzQjBcXHUwM0IxXFx1MDNCMlxcdTAzQjNcXHUwM0I0XFx1MDNCNVxcdTAzQjZcXHUwM0I3XFx1MDNCOFxcdTAzQjlcXHUwM0JBXFx1MDNCQlxcdTAzQkNcXHUwM0JEXFx1MDNCRVxcdTAzQkZcXHUwM0MwXFx1MDNDMVxcdTAzQzJcXHUwM0MzXFx1MDNDNFxcdTAzQzVcXHUwM0M2XFx1MDNDN1xcdTAzQzhcXHUwM0M5XFx1MDNDQVxcdTAzQ0JcXHUwM0NDXFx1MDNDRFxcdTAzQ0VcXHVGRkZEXCJcbiAgICAgIH0sXG4gICAgICBcImNwMjg1OTdcIjogXCJpc284ODU5N1wiLFxuICAgICAgXCJpc284ODU5OFwiOiB7XG4gICAgICAgIFwidHlwZVwiOiBcIl9zYmNzXCIsXG4gICAgICAgIFwiY2hhcnNcIjogXCJcXHg4MFxceDgxXFx4ODJcXHg4M1xceDg0XFx4ODVcXHg4NlxceDg3XFx4ODhcXHg4OVxceDhBXFx4OEJcXHg4Q1xceDhEXFx4OEVcXHg4RlxceDkwXFx4OTFcXHg5MlxceDkzXFx4OTRcXHg5NVxceDk2XFx4OTdcXHg5OFxceDk5XFx4OUFcXHg5QlxceDlDXFx4OURcXHg5RVxceDlGXFx4QTBcXHVGRkZEXFx4QTJcXHhBM1xceEE0XFx4QTVcXHhBNlxceEE3XFx4QThcXHhBOVxceEQ3XFx4QUJcXHhBQ1xceEFEXFx4QUVcXHhBRlxceEIwXFx4QjFcXHhCMlxceEIzXFx4QjRcXHhCNVxceEI2XFx4QjdcXHhCOFxceEI5XFx4RjdcXHhCQlxceEJDXFx4QkRcXHhCRVxcdUZGRkRcXHVGRkZEXFx1RkZGRFxcdUZGRkRcXHVGRkZEXFx1RkZGRFxcdUZGRkRcXHVGRkZEXFx1RkZGRFxcdUZGRkRcXHVGRkZEXFx1RkZGRFxcdUZGRkRcXHVGRkZEXFx1RkZGRFxcdUZGRkRcXHVGRkZEXFx1RkZGRFxcdUZGRkRcXHVGRkZEXFx1RkZGRFxcdUZGRkRcXHVGRkZEXFx1RkZGRFxcdUZGRkRcXHVGRkZEXFx1RkZGRFxcdUZGRkRcXHVGRkZEXFx1RkZGRFxcdUZGRkRcXHVGRkZEXFx1MjAxN1xcdTA1RDBcXHUwNUQxXFx1MDVEMlxcdTA1RDNcXHUwNUQ0XFx1MDVENVxcdTA1RDZcXHUwNUQ3XFx1MDVEOFxcdTA1RDlcXHUwNURBXFx1MDVEQlxcdTA1RENcXHUwNUREXFx1MDVERVxcdTA1REZcXHUwNUUwXFx1MDVFMVxcdTA1RTJcXHUwNUUzXFx1MDVFNFxcdTA1RTVcXHUwNUU2XFx1MDVFN1xcdTA1RThcXHUwNUU5XFx1MDVFQVxcdUZGRkRcXHVGRkZEXFx1MjAwRVxcdTIwMEZcXHVGRkZEXCJcbiAgICAgIH0sXG4gICAgICBcImNwMjg1OThcIjogXCJpc284ODU5OFwiLFxuICAgICAgXCJpc284ODU5OVwiOiB7XG4gICAgICAgIFwidHlwZVwiOiBcIl9zYmNzXCIsXG4gICAgICAgIFwiY2hhcnNcIjogXCJcXHg4MFxceDgxXFx4ODJcXHg4M1xceDg0XFx4ODVcXHg4NlxceDg3XFx4ODhcXHg4OVxceDhBXFx4OEJcXHg4Q1xceDhEXFx4OEVcXHg4RlxceDkwXFx4OTFcXHg5MlxceDkzXFx4OTRcXHg5NVxceDk2XFx4OTdcXHg5OFxceDk5XFx4OUFcXHg5QlxceDlDXFx4OURcXHg5RVxceDlGXFx4QTBcXHhBMVxceEEyXFx4QTNcXHhBNFxceEE1XFx4QTZcXHhBN1xceEE4XFx4QTlcXHhBQVxceEFCXFx4QUNcXHhBRFxceEFFXFx4QUZcXHhCMFxceEIxXFx4QjJcXHhCM1xceEI0XFx4QjVcXHhCNlxceEI3XFx4QjhcXHhCOVxceEJBXFx4QkJcXHhCQ1xceEJEXFx4QkVcXHhCRlxceEMwXFx4QzFcXHhDMlxceEMzXFx4QzRcXHhDNVxceEM2XFx4QzdcXHhDOFxceEM5XFx4Q0FcXHhDQlxceENDXFx4Q0RcXHhDRVxceENGXFx1MDExRVxceEQxXFx4RDJcXHhEM1xceEQ0XFx4RDVcXHhENlxceEQ3XFx4RDhcXHhEOVxceERBXFx4REJcXHhEQ1xcdTAxMzBcXHUwMTVFXFx4REZcXHhFMFxceEUxXFx4RTJcXHhFM1xceEU0XFx4RTVcXHhFNlxceEU3XFx4RThcXHhFOVxceEVBXFx4RUJcXHhFQ1xceEVEXFx4RUVcXHhFRlxcdTAxMUZcXHhGMVxceEYyXFx4RjNcXHhGNFxceEY1XFx4RjZcXHhGN1xceEY4XFx4RjlcXHhGQVxceEZCXFx4RkNcXHUwMTMxXFx1MDE1RlxceEZGXCJcbiAgICAgIH0sXG4gICAgICBcImNwMjg1OTlcIjogXCJpc284ODU5OVwiLFxuICAgICAgXCJpc284ODU5MTBcIjoge1xuICAgICAgICBcInR5cGVcIjogXCJfc2Jjc1wiLFxuICAgICAgICBcImNoYXJzXCI6IFwiXFx4ODBcXHg4MVxceDgyXFx4ODNcXHg4NFxceDg1XFx4ODZcXHg4N1xceDg4XFx4ODlcXHg4QVxceDhCXFx4OENcXHg4RFxceDhFXFx4OEZcXHg5MFxceDkxXFx4OTJcXHg5M1xceDk0XFx4OTVcXHg5NlxceDk3XFx4OThcXHg5OVxceDlBXFx4OUJcXHg5Q1xceDlEXFx4OUVcXHg5RlxceEEwXFx1MDEwNFxcdTAxMTJcXHUwMTIyXFx1MDEyQVxcdTAxMjhcXHUwMTM2XFx4QTdcXHUwMTNCXFx1MDExMFxcdTAxNjBcXHUwMTY2XFx1MDE3RFxceEFEXFx1MDE2QVxcdTAxNEFcXHhCMFxcdTAxMDVcXHUwMTEzXFx1MDEyM1xcdTAxMkJcXHUwMTI5XFx1MDEzN1xceEI3XFx1MDEzQ1xcdTAxMTFcXHUwMTYxXFx1MDE2N1xcdTAxN0VcXHUyMDE1XFx1MDE2QlxcdTAxNEJcXHUwMTAwXFx4QzFcXHhDMlxceEMzXFx4QzRcXHhDNVxceEM2XFx1MDEyRVxcdTAxMENcXHhDOVxcdTAxMThcXHhDQlxcdTAxMTZcXHhDRFxceENFXFx4Q0ZcXHhEMFxcdTAxNDVcXHUwMTRDXFx4RDNcXHhENFxceEQ1XFx4RDZcXHUwMTY4XFx4RDhcXHUwMTcyXFx4REFcXHhEQlxceERDXFx4RERcXHhERVxceERGXFx1MDEwMVxceEUxXFx4RTJcXHhFM1xceEU0XFx4RTVcXHhFNlxcdTAxMkZcXHUwMTBEXFx4RTlcXHUwMTE5XFx4RUJcXHUwMTE3XFx4RURcXHhFRVxceEVGXFx4RjBcXHUwMTQ2XFx1MDE0RFxceEYzXFx4RjRcXHhGNVxceEY2XFx1MDE2OVxceEY4XFx1MDE3M1xceEZBXFx4RkJcXHhGQ1xceEZEXFx4RkVcXHUwMTM4XCJcbiAgICAgIH0sXG4gICAgICBcImNwMjg2MDBcIjogXCJpc284ODU5MTBcIixcbiAgICAgIFwiaXNvODg1OTExXCI6IHtcbiAgICAgICAgXCJ0eXBlXCI6IFwiX3NiY3NcIixcbiAgICAgICAgXCJjaGFyc1wiOiBcIlxceDgwXFx4ODFcXHg4MlxceDgzXFx4ODRcXHg4NVxceDg2XFx4ODdcXHg4OFxceDg5XFx4OEFcXHg4QlxceDhDXFx4OERcXHg4RVxceDhGXFx4OTBcXHg5MVxceDkyXFx4OTNcXHg5NFxceDk1XFx4OTZcXHg5N1xceDk4XFx4OTlcXHg5QVxceDlCXFx4OUNcXHg5RFxceDlFXFx4OUZcXHhBMFxcdTBFMDFcXHUwRTAyXFx1MEUwM1xcdTBFMDRcXHUwRTA1XFx1MEUwNlxcdTBFMDdcXHUwRTA4XFx1MEUwOVxcdTBFMEFcXHUwRTBCXFx1MEUwQ1xcdTBFMERcXHUwRTBFXFx1MEUwRlxcdTBFMTBcXHUwRTExXFx1MEUxMlxcdTBFMTNcXHUwRTE0XFx1MEUxNVxcdTBFMTZcXHUwRTE3XFx1MEUxOFxcdTBFMTlcXHUwRTFBXFx1MEUxQlxcdTBFMUNcXHUwRTFEXFx1MEUxRVxcdTBFMUZcXHUwRTIwXFx1MEUyMVxcdTBFMjJcXHUwRTIzXFx1MEUyNFxcdTBFMjVcXHUwRTI2XFx1MEUyN1xcdTBFMjhcXHUwRTI5XFx1MEUyQVxcdTBFMkJcXHUwRTJDXFx1MEUyRFxcdTBFMkVcXHUwRTJGXFx1MEUzMFxcdTBFMzFcXHUwRTMyXFx1MEUzM1xcdTBFMzRcXHUwRTM1XFx1MEUzNlxcdTBFMzdcXHUwRTM4XFx1MEUzOVxcdTBFM0FcXHVGRkZEXFx1RkZGRFxcdUZGRkRcXHVGRkZEXFx1MEUzRlxcdTBFNDBcXHUwRTQxXFx1MEU0MlxcdTBFNDNcXHUwRTQ0XFx1MEU0NVxcdTBFNDZcXHUwRTQ3XFx1MEU0OFxcdTBFNDlcXHUwRTRBXFx1MEU0QlxcdTBFNENcXHUwRTREXFx1MEU0RVxcdTBFNEZcXHUwRTUwXFx1MEU1MVxcdTBFNTJcXHUwRTUzXFx1MEU1NFxcdTBFNTVcXHUwRTU2XFx1MEU1N1xcdTBFNThcXHUwRTU5XFx1MEU1QVxcdTBFNUJcXHVGRkZEXFx1RkZGRFxcdUZGRkRcXHVGRkZEXCJcbiAgICAgIH0sXG4gICAgICBcImNwMjg2MDFcIjogXCJpc284ODU5MTFcIixcbiAgICAgIFwiaXNvODg1OTEzXCI6IHtcbiAgICAgICAgXCJ0eXBlXCI6IFwiX3NiY3NcIixcbiAgICAgICAgXCJjaGFyc1wiOiBcIlxceDgwXFx4ODFcXHg4MlxceDgzXFx4ODRcXHg4NVxceDg2XFx4ODdcXHg4OFxceDg5XFx4OEFcXHg4QlxceDhDXFx4OERcXHg4RVxceDhGXFx4OTBcXHg5MVxceDkyXFx4OTNcXHg5NFxceDk1XFx4OTZcXHg5N1xceDk4XFx4OTlcXHg5QVxceDlCXFx4OUNcXHg5RFxceDlFXFx4OUZcXHhBMFxcdTIwMURcXHhBMlxceEEzXFx4QTRcXHUyMDFFXFx4QTZcXHhBN1xceEQ4XFx4QTlcXHUwMTU2XFx4QUJcXHhBQ1xceEFEXFx4QUVcXHhDNlxceEIwXFx4QjFcXHhCMlxceEIzXFx1MjAxQ1xceEI1XFx4QjZcXHhCN1xceEY4XFx4QjlcXHUwMTU3XFx4QkJcXHhCQ1xceEJEXFx4QkVcXHhFNlxcdTAxMDRcXHUwMTJFXFx1MDEwMFxcdTAxMDZcXHhDNFxceEM1XFx1MDExOFxcdTAxMTJcXHUwMTBDXFx4QzlcXHUwMTc5XFx1MDExNlxcdTAxMjJcXHUwMTM2XFx1MDEyQVxcdTAxM0JcXHUwMTYwXFx1MDE0M1xcdTAxNDVcXHhEM1xcdTAxNENcXHhENVxceEQ2XFx4RDdcXHUwMTcyXFx1MDE0MVxcdTAxNUFcXHUwMTZBXFx4RENcXHUwMTdCXFx1MDE3RFxceERGXFx1MDEwNVxcdTAxMkZcXHUwMTAxXFx1MDEwN1xceEU0XFx4RTVcXHUwMTE5XFx1MDExM1xcdTAxMERcXHhFOVxcdTAxN0FcXHUwMTE3XFx1MDEyM1xcdTAxMzdcXHUwMTJCXFx1MDEzQ1xcdTAxNjFcXHUwMTQ0XFx1MDE0NlxceEYzXFx1MDE0RFxceEY1XFx4RjZcXHhGN1xcdTAxNzNcXHUwMTQyXFx1MDE1QlxcdTAxNkJcXHhGQ1xcdTAxN0NcXHUwMTdFXFx1MjAxOVwiXG4gICAgICB9LFxuICAgICAgXCJjcDI4NjAzXCI6IFwiaXNvODg1OTEzXCIsXG4gICAgICBcImlzbzg4NTkxNFwiOiB7XG4gICAgICAgIFwidHlwZVwiOiBcIl9zYmNzXCIsXG4gICAgICAgIFwiY2hhcnNcIjogXCJcXHg4MFxceDgxXFx4ODJcXHg4M1xceDg0XFx4ODVcXHg4NlxceDg3XFx4ODhcXHg4OVxceDhBXFx4OEJcXHg4Q1xceDhEXFx4OEVcXHg4RlxceDkwXFx4OTFcXHg5MlxceDkzXFx4OTRcXHg5NVxceDk2XFx4OTdcXHg5OFxceDk5XFx4OUFcXHg5QlxceDlDXFx4OURcXHg5RVxceDlGXFx4QTBcXHUxRTAyXFx1MUUwM1xceEEzXFx1MDEwQVxcdTAxMEJcXHUxRTBBXFx4QTdcXHUxRTgwXFx4QTlcXHUxRTgyXFx1MUUwQlxcdTFFRjJcXHhBRFxceEFFXFx1MDE3OFxcdTFFMUVcXHUxRTFGXFx1MDEyMFxcdTAxMjFcXHUxRTQwXFx1MUU0MVxceEI2XFx1MUU1NlxcdTFFODFcXHUxRTU3XFx1MUU4M1xcdTFFNjBcXHUxRUYzXFx1MUU4NFxcdTFFODVcXHUxRTYxXFx4QzBcXHhDMVxceEMyXFx4QzNcXHhDNFxceEM1XFx4QzZcXHhDN1xceEM4XFx4QzlcXHhDQVxceENCXFx4Q0NcXHhDRFxceENFXFx4Q0ZcXHUwMTc0XFx4RDFcXHhEMlxceEQzXFx4RDRcXHhENVxceEQ2XFx1MUU2QVxceEQ4XFx4RDlcXHhEQVxceERCXFx4RENcXHhERFxcdTAxNzZcXHhERlxceEUwXFx4RTFcXHhFMlxceEUzXFx4RTRcXHhFNVxceEU2XFx4RTdcXHhFOFxceEU5XFx4RUFcXHhFQlxceEVDXFx4RURcXHhFRVxceEVGXFx1MDE3NVxceEYxXFx4RjJcXHhGM1xceEY0XFx4RjVcXHhGNlxcdTFFNkJcXHhGOFxceEY5XFx4RkFcXHhGQlxceEZDXFx4RkRcXHUwMTc3XFx4RkZcIlxuICAgICAgfSxcbiAgICAgIFwiY3AyODYwNFwiOiBcImlzbzg4NTkxNFwiLFxuICAgICAgXCJpc284ODU5MTVcIjoge1xuICAgICAgICBcInR5cGVcIjogXCJfc2Jjc1wiLFxuICAgICAgICBcImNoYXJzXCI6IFwiXFx4ODBcXHg4MVxceDgyXFx4ODNcXHg4NFxceDg1XFx4ODZcXHg4N1xceDg4XFx4ODlcXHg4QVxceDhCXFx4OENcXHg4RFxceDhFXFx4OEZcXHg5MFxceDkxXFx4OTJcXHg5M1xceDk0XFx4OTVcXHg5NlxceDk3XFx4OThcXHg5OVxceDlBXFx4OUJcXHg5Q1xceDlEXFx4OUVcXHg5RlxceEEwXFx4QTFcXHhBMlxceEEzXFx1MjBBQ1xceEE1XFx1MDE2MFxceEE3XFx1MDE2MVxceEE5XFx4QUFcXHhBQlxceEFDXFx4QURcXHhBRVxceEFGXFx4QjBcXHhCMVxceEIyXFx4QjNcXHUwMTdEXFx4QjVcXHhCNlxceEI3XFx1MDE3RVxceEI5XFx4QkFcXHhCQlxcdTAxNTJcXHUwMTUzXFx1MDE3OFxceEJGXFx4QzBcXHhDMVxceEMyXFx4QzNcXHhDNFxceEM1XFx4QzZcXHhDN1xceEM4XFx4QzlcXHhDQVxceENCXFx4Q0NcXHhDRFxceENFXFx4Q0ZcXHhEMFxceEQxXFx4RDJcXHhEM1xceEQ0XFx4RDVcXHhENlxceEQ3XFx4RDhcXHhEOVxceERBXFx4REJcXHhEQ1xceEREXFx4REVcXHhERlxceEUwXFx4RTFcXHhFMlxceEUzXFx4RTRcXHhFNVxceEU2XFx4RTdcXHhFOFxceEU5XFx4RUFcXHhFQlxceEVDXFx4RURcXHhFRVxceEVGXFx4RjBcXHhGMVxceEYyXFx4RjNcXHhGNFxceEY1XFx4RjZcXHhGN1xceEY4XFx4RjlcXHhGQVxceEZCXFx4RkNcXHhGRFxceEZFXFx4RkZcIlxuICAgICAgfSxcbiAgICAgIFwiY3AyODYwNVwiOiBcImlzbzg4NTkxNVwiLFxuICAgICAgXCJpc284ODU5MTZcIjoge1xuICAgICAgICBcInR5cGVcIjogXCJfc2Jjc1wiLFxuICAgICAgICBcImNoYXJzXCI6IFwiXFx4ODBcXHg4MVxceDgyXFx4ODNcXHg4NFxceDg1XFx4ODZcXHg4N1xceDg4XFx4ODlcXHg4QVxceDhCXFx4OENcXHg4RFxceDhFXFx4OEZcXHg5MFxceDkxXFx4OTJcXHg5M1xceDk0XFx4OTVcXHg5NlxceDk3XFx4OThcXHg5OVxceDlBXFx4OUJcXHg5Q1xceDlEXFx4OUVcXHg5RlxceEEwXFx1MDEwNFxcdTAxMDVcXHUwMTQxXFx1MjBBQ1xcdTIwMUVcXHUwMTYwXFx4QTdcXHUwMTYxXFx4QTlcXHUwMjE4XFx4QUJcXHUwMTc5XFx4QURcXHUwMTdBXFx1MDE3QlxceEIwXFx4QjFcXHUwMTBDXFx1MDE0MlxcdTAxN0RcXHUyMDFEXFx4QjZcXHhCN1xcdTAxN0VcXHUwMTBEXFx1MDIxOVxceEJCXFx1MDE1MlxcdTAxNTNcXHUwMTc4XFx1MDE3Q1xceEMwXFx4QzFcXHhDMlxcdTAxMDJcXHhDNFxcdTAxMDZcXHhDNlxceEM3XFx4QzhcXHhDOVxceENBXFx4Q0JcXHhDQ1xceENEXFx4Q0VcXHhDRlxcdTAxMTBcXHUwMTQzXFx4RDJcXHhEM1xceEQ0XFx1MDE1MFxceEQ2XFx1MDE1QVxcdTAxNzBcXHhEOVxceERBXFx4REJcXHhEQ1xcdTAxMThcXHUwMjFBXFx4REZcXHhFMFxceEUxXFx4RTJcXHUwMTAzXFx4RTRcXHUwMTA3XFx4RTZcXHhFN1xceEU4XFx4RTlcXHhFQVxceEVCXFx4RUNcXHhFRFxceEVFXFx4RUZcXHUwMTExXFx1MDE0NFxceEYyXFx4RjNcXHhGNFxcdTAxNTFcXHhGNlxcdTAxNUJcXHUwMTcxXFx4RjlcXHhGQVxceEZCXFx4RkNcXHUwMTE5XFx1MDIxQlxceEZGXCJcbiAgICAgIH0sXG4gICAgICBcImNwMjg2MDZcIjogXCJpc284ODU5MTZcIixcbiAgICAgIFwiY3A0MzdcIjoge1xuICAgICAgICBcInR5cGVcIjogXCJfc2Jjc1wiLFxuICAgICAgICBcImNoYXJzXCI6IFwiXFx4QzdcXHhGQ1xceEU5XFx4RTJcXHhFNFxceEUwXFx4RTVcXHhFN1xceEVBXFx4RUJcXHhFOFxceEVGXFx4RUVcXHhFQ1xceEM0XFx4QzVcXHhDOVxceEU2XFx4QzZcXHhGNFxceEY2XFx4RjJcXHhGQlxceEY5XFx4RkZcXHhENlxceERDXFx4QTJcXHhBM1xceEE1XFx1MjBBN1xcdTAxOTJcXHhFMVxceEVEXFx4RjNcXHhGQVxceEYxXFx4RDFcXHhBQVxceEJBXFx4QkZcXHUyMzEwXFx4QUNcXHhCRFxceEJDXFx4QTFcXHhBQlxceEJCXFx1MjU5MVxcdTI1OTJcXHUyNTkzXFx1MjUwMlxcdTI1MjRcXHUyNTYxXFx1MjU2MlxcdTI1NTZcXHUyNTU1XFx1MjU2M1xcdTI1NTFcXHUyNTU3XFx1MjU1RFxcdTI1NUNcXHUyNTVCXFx1MjUxMFxcdTI1MTRcXHUyNTM0XFx1MjUyQ1xcdTI1MUNcXHUyNTAwXFx1MjUzQ1xcdTI1NUVcXHUyNTVGXFx1MjU1QVxcdTI1NTRcXHUyNTY5XFx1MjU2NlxcdTI1NjBcXHUyNTUwXFx1MjU2Q1xcdTI1NjdcXHUyNTY4XFx1MjU2NFxcdTI1NjVcXHUyNTU5XFx1MjU1OFxcdTI1NTJcXHUyNTUzXFx1MjU2QlxcdTI1NkFcXHUyNTE4XFx1MjUwQ1xcdTI1ODhcXHUyNTg0XFx1MjU4Q1xcdTI1OTBcXHUyNTgwXFx1MDNCMVxceERGXFx1MDM5M1xcdTAzQzBcXHUwM0EzXFx1MDNDM1xceEI1XFx1MDNDNFxcdTAzQTZcXHUwMzk4XFx1MDNBOVxcdTAzQjRcXHUyMjFFXFx1MDNDNlxcdTAzQjVcXHUyMjI5XFx1MjI2MVxceEIxXFx1MjI2NVxcdTIyNjRcXHUyMzIwXFx1MjMyMVxceEY3XFx1MjI0OFxceEIwXFx1MjIxOVxceEI3XFx1MjIxQVxcdTIwN0ZcXHhCMlxcdTI1QTBcXHhBMFwiXG4gICAgICB9LFxuICAgICAgXCJpYm00MzdcIjogXCJjcDQzN1wiLFxuICAgICAgXCJjc2libTQzN1wiOiBcImNwNDM3XCIsXG4gICAgICBcImNwNzM3XCI6IHtcbiAgICAgICAgXCJ0eXBlXCI6IFwiX3NiY3NcIixcbiAgICAgICAgXCJjaGFyc1wiOiBcIlxcdTAzOTFcXHUwMzkyXFx1MDM5M1xcdTAzOTRcXHUwMzk1XFx1MDM5NlxcdTAzOTdcXHUwMzk4XFx1MDM5OVxcdTAzOUFcXHUwMzlCXFx1MDM5Q1xcdTAzOURcXHUwMzlFXFx1MDM5RlxcdTAzQTBcXHUwM0ExXFx1MDNBM1xcdTAzQTRcXHUwM0E1XFx1MDNBNlxcdTAzQTdcXHUwM0E4XFx1MDNBOVxcdTAzQjFcXHUwM0IyXFx1MDNCM1xcdTAzQjRcXHUwM0I1XFx1MDNCNlxcdTAzQjdcXHUwM0I4XFx1MDNCOVxcdTAzQkFcXHUwM0JCXFx1MDNCQ1xcdTAzQkRcXHUwM0JFXFx1MDNCRlxcdTAzQzBcXHUwM0MxXFx1MDNDM1xcdTAzQzJcXHUwM0M0XFx1MDNDNVxcdTAzQzZcXHUwM0M3XFx1MDNDOFxcdTI1OTFcXHUyNTkyXFx1MjU5M1xcdTI1MDJcXHUyNTI0XFx1MjU2MVxcdTI1NjJcXHUyNTU2XFx1MjU1NVxcdTI1NjNcXHUyNTUxXFx1MjU1N1xcdTI1NURcXHUyNTVDXFx1MjU1QlxcdTI1MTBcXHUyNTE0XFx1MjUzNFxcdTI1MkNcXHUyNTFDXFx1MjUwMFxcdTI1M0NcXHUyNTVFXFx1MjU1RlxcdTI1NUFcXHUyNTU0XFx1MjU2OVxcdTI1NjZcXHUyNTYwXFx1MjU1MFxcdTI1NkNcXHUyNTY3XFx1MjU2OFxcdTI1NjRcXHUyNTY1XFx1MjU1OVxcdTI1NThcXHUyNTUyXFx1MjU1M1xcdTI1NkJcXHUyNTZBXFx1MjUxOFxcdTI1MENcXHUyNTg4XFx1MjU4NFxcdTI1OENcXHUyNTkwXFx1MjU4MFxcdTAzQzlcXHUwM0FDXFx1MDNBRFxcdTAzQUVcXHUwM0NBXFx1MDNBRlxcdTAzQ0NcXHUwM0NEXFx1MDNDQlxcdTAzQ0VcXHUwMzg2XFx1MDM4OFxcdTAzODlcXHUwMzhBXFx1MDM4Q1xcdTAzOEVcXHUwMzhGXFx4QjFcXHUyMjY1XFx1MjI2NFxcdTAzQUFcXHUwM0FCXFx4RjdcXHUyMjQ4XFx4QjBcXHUyMjE5XFx4QjdcXHUyMjFBXFx1MjA3RlxceEIyXFx1MjVBMFxceEEwXCJcbiAgICAgIH0sXG4gICAgICBcImlibTczN1wiOiBcImNwNzM3XCIsXG4gICAgICBcImNzaWJtNzM3XCI6IFwiY3A3MzdcIixcbiAgICAgIFwiY3A3NzVcIjoge1xuICAgICAgICBcInR5cGVcIjogXCJfc2Jjc1wiLFxuICAgICAgICBcImNoYXJzXCI6IFwiXFx1MDEwNlxceEZDXFx4RTlcXHUwMTAxXFx4RTRcXHUwMTIzXFx4RTVcXHUwMTA3XFx1MDE0MlxcdTAxMTNcXHUwMTU2XFx1MDE1N1xcdTAxMkJcXHUwMTc5XFx4QzRcXHhDNVxceEM5XFx4RTZcXHhDNlxcdTAxNERcXHhGNlxcdTAxMjJcXHhBMlxcdTAxNUFcXHUwMTVCXFx4RDZcXHhEQ1xceEY4XFx4QTNcXHhEOFxceEQ3XFx4QTRcXHUwMTAwXFx1MDEyQVxceEYzXFx1MDE3QlxcdTAxN0NcXHUwMTdBXFx1MjAxRFxceEE2XFx4QTlcXHhBRVxceEFDXFx4QkRcXHhCQ1xcdTAxNDFcXHhBQlxceEJCXFx1MjU5MVxcdTI1OTJcXHUyNTkzXFx1MjUwMlxcdTI1MjRcXHUwMTA0XFx1MDEwQ1xcdTAxMThcXHUwMTE2XFx1MjU2M1xcdTI1NTFcXHUyNTU3XFx1MjU1RFxcdTAxMkVcXHUwMTYwXFx1MjUxMFxcdTI1MTRcXHUyNTM0XFx1MjUyQ1xcdTI1MUNcXHUyNTAwXFx1MjUzQ1xcdTAxNzJcXHUwMTZBXFx1MjU1QVxcdTI1NTRcXHUyNTY5XFx1MjU2NlxcdTI1NjBcXHUyNTUwXFx1MjU2Q1xcdTAxN0RcXHUwMTA1XFx1MDEwRFxcdTAxMTlcXHUwMTE3XFx1MDEyRlxcdTAxNjFcXHUwMTczXFx1MDE2QlxcdTAxN0VcXHUyNTE4XFx1MjUwQ1xcdTI1ODhcXHUyNTg0XFx1MjU4Q1xcdTI1OTBcXHUyNTgwXFx4RDNcXHhERlxcdTAxNENcXHUwMTQzXFx4RjVcXHhENVxceEI1XFx1MDE0NFxcdTAxMzZcXHUwMTM3XFx1MDEzQlxcdTAxM0NcXHUwMTQ2XFx1MDExMlxcdTAxNDVcXHUyMDE5XFx4QURcXHhCMVxcdTIwMUNcXHhCRVxceEI2XFx4QTdcXHhGN1xcdTIwMUVcXHhCMFxcdTIyMTlcXHhCN1xceEI5XFx4QjNcXHhCMlxcdTI1QTBcXHhBMFwiXG4gICAgICB9LFxuICAgICAgXCJpYm03NzVcIjogXCJjcDc3NVwiLFxuICAgICAgXCJjc2libTc3NVwiOiBcImNwNzc1XCIsXG4gICAgICBcImNwODUwXCI6IHtcbiAgICAgICAgXCJ0eXBlXCI6IFwiX3NiY3NcIixcbiAgICAgICAgXCJjaGFyc1wiOiBcIlxceEM3XFx4RkNcXHhFOVxceEUyXFx4RTRcXHhFMFxceEU1XFx4RTdcXHhFQVxceEVCXFx4RThcXHhFRlxceEVFXFx4RUNcXHhDNFxceEM1XFx4QzlcXHhFNlxceEM2XFx4RjRcXHhGNlxceEYyXFx4RkJcXHhGOVxceEZGXFx4RDZcXHhEQ1xceEY4XFx4QTNcXHhEOFxceEQ3XFx1MDE5MlxceEUxXFx4RURcXHhGM1xceEZBXFx4RjFcXHhEMVxceEFBXFx4QkFcXHhCRlxceEFFXFx4QUNcXHhCRFxceEJDXFx4QTFcXHhBQlxceEJCXFx1MjU5MVxcdTI1OTJcXHUyNTkzXFx1MjUwMlxcdTI1MjRcXHhDMVxceEMyXFx4QzBcXHhBOVxcdTI1NjNcXHUyNTUxXFx1MjU1N1xcdTI1NURcXHhBMlxceEE1XFx1MjUxMFxcdTI1MTRcXHUyNTM0XFx1MjUyQ1xcdTI1MUNcXHUyNTAwXFx1MjUzQ1xceEUzXFx4QzNcXHUyNTVBXFx1MjU1NFxcdTI1NjlcXHUyNTY2XFx1MjU2MFxcdTI1NTBcXHUyNTZDXFx4QTRcXHhGMFxceEQwXFx4Q0FcXHhDQlxceEM4XFx1MDEzMVxceENEXFx4Q0VcXHhDRlxcdTI1MThcXHUyNTBDXFx1MjU4OFxcdTI1ODRcXHhBNlxceENDXFx1MjU4MFxceEQzXFx4REZcXHhENFxceEQyXFx4RjVcXHhENVxceEI1XFx4RkVcXHhERVxceERBXFx4REJcXHhEOVxceEZEXFx4RERcXHhBRlxceEI0XFx4QURcXHhCMVxcdTIwMTdcXHhCRVxceEI2XFx4QTdcXHhGN1xceEI4XFx4QjBcXHhBOFxceEI3XFx4QjlcXHhCM1xceEIyXFx1MjVBMFxceEEwXCJcbiAgICAgIH0sXG4gICAgICBcImlibTg1MFwiOiBcImNwODUwXCIsXG4gICAgICBcImNzaWJtODUwXCI6IFwiY3A4NTBcIixcbiAgICAgIFwiY3A4NTJcIjoge1xuICAgICAgICBcInR5cGVcIjogXCJfc2Jjc1wiLFxuICAgICAgICBcImNoYXJzXCI6IFwiXFx4QzdcXHhGQ1xceEU5XFx4RTJcXHhFNFxcdTAxNkZcXHUwMTA3XFx4RTdcXHUwMTQyXFx4RUJcXHUwMTUwXFx1MDE1MVxceEVFXFx1MDE3OVxceEM0XFx1MDEwNlxceEM5XFx1MDEzOVxcdTAxM0FcXHhGNFxceEY2XFx1MDEzRFxcdTAxM0VcXHUwMTVBXFx1MDE1QlxceEQ2XFx4RENcXHUwMTY0XFx1MDE2NVxcdTAxNDFcXHhEN1xcdTAxMERcXHhFMVxceEVEXFx4RjNcXHhGQVxcdTAxMDRcXHUwMTA1XFx1MDE3RFxcdTAxN0VcXHUwMTE4XFx1MDExOVxceEFDXFx1MDE3QVxcdTAxMENcXHUwMTVGXFx4QUJcXHhCQlxcdTI1OTFcXHUyNTkyXFx1MjU5M1xcdTI1MDJcXHUyNTI0XFx4QzFcXHhDMlxcdTAxMUFcXHUwMTVFXFx1MjU2M1xcdTI1NTFcXHUyNTU3XFx1MjU1RFxcdTAxN0JcXHUwMTdDXFx1MjUxMFxcdTI1MTRcXHUyNTM0XFx1MjUyQ1xcdTI1MUNcXHUyNTAwXFx1MjUzQ1xcdTAxMDJcXHUwMTAzXFx1MjU1QVxcdTI1NTRcXHUyNTY5XFx1MjU2NlxcdTI1NjBcXHUyNTUwXFx1MjU2Q1xceEE0XFx1MDExMVxcdTAxMTBcXHUwMTBFXFx4Q0JcXHUwMTBGXFx1MDE0N1xceENEXFx4Q0VcXHUwMTFCXFx1MjUxOFxcdTI1MENcXHUyNTg4XFx1MjU4NFxcdTAxNjJcXHUwMTZFXFx1MjU4MFxceEQzXFx4REZcXHhENFxcdTAxNDNcXHUwMTQ0XFx1MDE0OFxcdTAxNjBcXHUwMTYxXFx1MDE1NFxceERBXFx1MDE1NVxcdTAxNzBcXHhGRFxceEREXFx1MDE2M1xceEI0XFx4QURcXHUwMkREXFx1MDJEQlxcdTAyQzdcXHUwMkQ4XFx4QTdcXHhGN1xceEI4XFx4QjBcXHhBOFxcdTAyRDlcXHUwMTcxXFx1MDE1OFxcdTAxNTlcXHUyNUEwXFx4QTBcIlxuICAgICAgfSxcbiAgICAgIFwiaWJtODUyXCI6IFwiY3A4NTJcIixcbiAgICAgIFwiY3NpYm04NTJcIjogXCJjcDg1MlwiLFxuICAgICAgXCJjcDg1NVwiOiB7XG4gICAgICAgIFwidHlwZVwiOiBcIl9zYmNzXCIsXG4gICAgICAgIFwiY2hhcnNcIjogXCJcXHUwNDUyXFx1MDQwMlxcdTA0NTNcXHUwNDAzXFx1MDQ1MVxcdTA0MDFcXHUwNDU0XFx1MDQwNFxcdTA0NTVcXHUwNDA1XFx1MDQ1NlxcdTA0MDZcXHUwNDU3XFx1MDQwN1xcdTA0NThcXHUwNDA4XFx1MDQ1OVxcdTA0MDlcXHUwNDVBXFx1MDQwQVxcdTA0NUJcXHUwNDBCXFx1MDQ1Q1xcdTA0MENcXHUwNDVFXFx1MDQwRVxcdTA0NUZcXHUwNDBGXFx1MDQ0RVxcdTA0MkVcXHUwNDRBXFx1MDQyQVxcdTA0MzBcXHUwNDEwXFx1MDQzMVxcdTA0MTFcXHUwNDQ2XFx1MDQyNlxcdTA0MzRcXHUwNDE0XFx1MDQzNVxcdTA0MTVcXHUwNDQ0XFx1MDQyNFxcdTA0MzNcXHUwNDEzXFx4QUJcXHhCQlxcdTI1OTFcXHUyNTkyXFx1MjU5M1xcdTI1MDJcXHUyNTI0XFx1MDQ0NVxcdTA0MjVcXHUwNDM4XFx1MDQxOFxcdTI1NjNcXHUyNTUxXFx1MjU1N1xcdTI1NURcXHUwNDM5XFx1MDQxOVxcdTI1MTBcXHUyNTE0XFx1MjUzNFxcdTI1MkNcXHUyNTFDXFx1MjUwMFxcdTI1M0NcXHUwNDNBXFx1MDQxQVxcdTI1NUFcXHUyNTU0XFx1MjU2OVxcdTI1NjZcXHUyNTYwXFx1MjU1MFxcdTI1NkNcXHhBNFxcdTA0M0JcXHUwNDFCXFx1MDQzQ1xcdTA0MUNcXHUwNDNEXFx1MDQxRFxcdTA0M0VcXHUwNDFFXFx1MDQzRlxcdTI1MThcXHUyNTBDXFx1MjU4OFxcdTI1ODRcXHUwNDFGXFx1MDQ0RlxcdTI1ODBcXHUwNDJGXFx1MDQ0MFxcdTA0MjBcXHUwNDQxXFx1MDQyMVxcdTA0NDJcXHUwNDIyXFx1MDQ0M1xcdTA0MjNcXHUwNDM2XFx1MDQxNlxcdTA0MzJcXHUwNDEyXFx1MDQ0Q1xcdTA0MkNcXHUyMTE2XFx4QURcXHUwNDRCXFx1MDQyQlxcdTA0MzdcXHUwNDE3XFx1MDQ0OFxcdTA0MjhcXHUwNDREXFx1MDQyRFxcdTA0NDlcXHUwNDI5XFx1MDQ0N1xcdTA0MjdcXHhBN1xcdTI1QTBcXHhBMFwiXG4gICAgICB9LFxuICAgICAgXCJpYm04NTVcIjogXCJjcDg1NVwiLFxuICAgICAgXCJjc2libTg1NVwiOiBcImNwODU1XCIsXG4gICAgICBcImNwODU2XCI6IHtcbiAgICAgICAgXCJ0eXBlXCI6IFwiX3NiY3NcIixcbiAgICAgICAgXCJjaGFyc1wiOiBcIlxcdTA1RDBcXHUwNUQxXFx1MDVEMlxcdTA1RDNcXHUwNUQ0XFx1MDVENVxcdTA1RDZcXHUwNUQ3XFx1MDVEOFxcdTA1RDlcXHUwNURBXFx1MDVEQlxcdTA1RENcXHUwNUREXFx1MDVERVxcdTA1REZcXHUwNUUwXFx1MDVFMVxcdTA1RTJcXHUwNUUzXFx1MDVFNFxcdTA1RTVcXHUwNUU2XFx1MDVFN1xcdTA1RThcXHUwNUU5XFx1MDVFQVxcdUZGRkRcXHhBM1xcdUZGRkRcXHhEN1xcdUZGRkRcXHVGRkZEXFx1RkZGRFxcdUZGRkRcXHVGRkZEXFx1RkZGRFxcdUZGRkRcXHVGRkZEXFx1RkZGRFxcdUZGRkRcXHhBRVxceEFDXFx4QkRcXHhCQ1xcdUZGRkRcXHhBQlxceEJCXFx1MjU5MVxcdTI1OTJcXHUyNTkzXFx1MjUwMlxcdTI1MjRcXHVGRkZEXFx1RkZGRFxcdUZGRkRcXHhBOVxcdTI1NjNcXHUyNTUxXFx1MjU1N1xcdTI1NURcXHhBMlxceEE1XFx1MjUxMFxcdTI1MTRcXHUyNTM0XFx1MjUyQ1xcdTI1MUNcXHUyNTAwXFx1MjUzQ1xcdUZGRkRcXHVGRkZEXFx1MjU1QVxcdTI1NTRcXHUyNTY5XFx1MjU2NlxcdTI1NjBcXHUyNTUwXFx1MjU2Q1xceEE0XFx1RkZGRFxcdUZGRkRcXHVGRkZEXFx1RkZGRFxcdUZGRkRcXHVGRkZEXFx1RkZGRFxcdUZGRkRcXHVGRkZEXFx1MjUxOFxcdTI1MENcXHUyNTg4XFx1MjU4NFxceEE2XFx1RkZGRFxcdTI1ODBcXHVGRkZEXFx1RkZGRFxcdUZGRkRcXHVGRkZEXFx1RkZGRFxcdUZGRkRcXHhCNVxcdUZGRkRcXHVGRkZEXFx1RkZGRFxcdUZGRkRcXHVGRkZEXFx1RkZGRFxcdUZGRkRcXHhBRlxceEI0XFx4QURcXHhCMVxcdTIwMTdcXHhCRVxceEI2XFx4QTdcXHhGN1xceEI4XFx4QjBcXHhBOFxceEI3XFx4QjlcXHhCM1xceEIyXFx1MjVBMFxceEEwXCJcbiAgICAgIH0sXG4gICAgICBcImlibTg1NlwiOiBcImNwODU2XCIsXG4gICAgICBcImNzaWJtODU2XCI6IFwiY3A4NTZcIixcbiAgICAgIFwiY3A4NTdcIjoge1xuICAgICAgICBcInR5cGVcIjogXCJfc2Jjc1wiLFxuICAgICAgICBcImNoYXJzXCI6IFwiXFx4QzdcXHhGQ1xceEU5XFx4RTJcXHhFNFxceEUwXFx4RTVcXHhFN1xceEVBXFx4RUJcXHhFOFxceEVGXFx4RUVcXHUwMTMxXFx4QzRcXHhDNVxceEM5XFx4RTZcXHhDNlxceEY0XFx4RjZcXHhGMlxceEZCXFx4RjlcXHUwMTMwXFx4RDZcXHhEQ1xceEY4XFx4QTNcXHhEOFxcdTAxNUVcXHUwMTVGXFx4RTFcXHhFRFxceEYzXFx4RkFcXHhGMVxceEQxXFx1MDExRVxcdTAxMUZcXHhCRlxceEFFXFx4QUNcXHhCRFxceEJDXFx4QTFcXHhBQlxceEJCXFx1MjU5MVxcdTI1OTJcXHUyNTkzXFx1MjUwMlxcdTI1MjRcXHhDMVxceEMyXFx4QzBcXHhBOVxcdTI1NjNcXHUyNTUxXFx1MjU1N1xcdTI1NURcXHhBMlxceEE1XFx1MjUxMFxcdTI1MTRcXHUyNTM0XFx1MjUyQ1xcdTI1MUNcXHUyNTAwXFx1MjUzQ1xceEUzXFx4QzNcXHUyNTVBXFx1MjU1NFxcdTI1NjlcXHUyNTY2XFx1MjU2MFxcdTI1NTBcXHUyNTZDXFx4QTRcXHhCQVxceEFBXFx4Q0FcXHhDQlxceEM4XFx1RkZGRFxceENEXFx4Q0VcXHhDRlxcdTI1MThcXHUyNTBDXFx1MjU4OFxcdTI1ODRcXHhBNlxceENDXFx1MjU4MFxceEQzXFx4REZcXHhENFxceEQyXFx4RjVcXHhENVxceEI1XFx1RkZGRFxceEQ3XFx4REFcXHhEQlxceEQ5XFx4RUNcXHhGRlxceEFGXFx4QjRcXHhBRFxceEIxXFx1RkZGRFxceEJFXFx4QjZcXHhBN1xceEY3XFx4QjhcXHhCMFxceEE4XFx4QjdcXHhCOVxceEIzXFx4QjJcXHUyNUEwXFx4QTBcIlxuICAgICAgfSxcbiAgICAgIFwiaWJtODU3XCI6IFwiY3A4NTdcIixcbiAgICAgIFwiY3NpYm04NTdcIjogXCJjcDg1N1wiLFxuICAgICAgXCJjcDg1OFwiOiB7XG4gICAgICAgIFwidHlwZVwiOiBcIl9zYmNzXCIsXG4gICAgICAgIFwiY2hhcnNcIjogXCJcXHhDN1xceEZDXFx4RTlcXHhFMlxceEU0XFx4RTBcXHhFNVxceEU3XFx4RUFcXHhFQlxceEU4XFx4RUZcXHhFRVxceEVDXFx4QzRcXHhDNVxceEM5XFx4RTZcXHhDNlxceEY0XFx4RjZcXHhGMlxceEZCXFx4RjlcXHhGRlxceEQ2XFx4RENcXHhGOFxceEEzXFx4RDhcXHhEN1xcdTAxOTJcXHhFMVxceEVEXFx4RjNcXHhGQVxceEYxXFx4RDFcXHhBQVxceEJBXFx4QkZcXHhBRVxceEFDXFx4QkRcXHhCQ1xceEExXFx4QUJcXHhCQlxcdTI1OTFcXHUyNTkyXFx1MjU5M1xcdTI1MDJcXHUyNTI0XFx4QzFcXHhDMlxceEMwXFx4QTlcXHUyNTYzXFx1MjU1MVxcdTI1NTdcXHUyNTVEXFx4QTJcXHhBNVxcdTI1MTBcXHUyNTE0XFx1MjUzNFxcdTI1MkNcXHUyNTFDXFx1MjUwMFxcdTI1M0NcXHhFM1xceEMzXFx1MjU1QVxcdTI1NTRcXHUyNTY5XFx1MjU2NlxcdTI1NjBcXHUyNTUwXFx1MjU2Q1xceEE0XFx4RjBcXHhEMFxceENBXFx4Q0JcXHhDOFxcdTIwQUNcXHhDRFxceENFXFx4Q0ZcXHUyNTE4XFx1MjUwQ1xcdTI1ODhcXHUyNTg0XFx4QTZcXHhDQ1xcdTI1ODBcXHhEM1xceERGXFx4RDRcXHhEMlxceEY1XFx4RDVcXHhCNVxceEZFXFx4REVcXHhEQVxceERCXFx4RDlcXHhGRFxceEREXFx4QUZcXHhCNFxceEFEXFx4QjFcXHUyMDE3XFx4QkVcXHhCNlxceEE3XFx4RjdcXHhCOFxceEIwXFx4QThcXHhCN1xceEI5XFx4QjNcXHhCMlxcdTI1QTBcXHhBMFwiXG4gICAgICB9LFxuICAgICAgXCJpYm04NThcIjogXCJjcDg1OFwiLFxuICAgICAgXCJjc2libTg1OFwiOiBcImNwODU4XCIsXG4gICAgICBcImNwODYwXCI6IHtcbiAgICAgICAgXCJ0eXBlXCI6IFwiX3NiY3NcIixcbiAgICAgICAgXCJjaGFyc1wiOiBcIlxceEM3XFx4RkNcXHhFOVxceEUyXFx4RTNcXHhFMFxceEMxXFx4RTdcXHhFQVxceENBXFx4RThcXHhDRFxceEQ0XFx4RUNcXHhDM1xceEMyXFx4QzlcXHhDMFxceEM4XFx4RjRcXHhGNVxceEYyXFx4REFcXHhGOVxceENDXFx4RDVcXHhEQ1xceEEyXFx4QTNcXHhEOVxcdTIwQTdcXHhEM1xceEUxXFx4RURcXHhGM1xceEZBXFx4RjFcXHhEMVxceEFBXFx4QkFcXHhCRlxceEQyXFx4QUNcXHhCRFxceEJDXFx4QTFcXHhBQlxceEJCXFx1MjU5MVxcdTI1OTJcXHUyNTkzXFx1MjUwMlxcdTI1MjRcXHUyNTYxXFx1MjU2MlxcdTI1NTZcXHUyNTU1XFx1MjU2M1xcdTI1NTFcXHUyNTU3XFx1MjU1RFxcdTI1NUNcXHUyNTVCXFx1MjUxMFxcdTI1MTRcXHUyNTM0XFx1MjUyQ1xcdTI1MUNcXHUyNTAwXFx1MjUzQ1xcdTI1NUVcXHUyNTVGXFx1MjU1QVxcdTI1NTRcXHUyNTY5XFx1MjU2NlxcdTI1NjBcXHUyNTUwXFx1MjU2Q1xcdTI1NjdcXHUyNTY4XFx1MjU2NFxcdTI1NjVcXHUyNTU5XFx1MjU1OFxcdTI1NTJcXHUyNTUzXFx1MjU2QlxcdTI1NkFcXHUyNTE4XFx1MjUwQ1xcdTI1ODhcXHUyNTg0XFx1MjU4Q1xcdTI1OTBcXHUyNTgwXFx1MDNCMVxceERGXFx1MDM5M1xcdTAzQzBcXHUwM0EzXFx1MDNDM1xceEI1XFx1MDNDNFxcdTAzQTZcXHUwMzk4XFx1MDNBOVxcdTAzQjRcXHUyMjFFXFx1MDNDNlxcdTAzQjVcXHUyMjI5XFx1MjI2MVxceEIxXFx1MjI2NVxcdTIyNjRcXHUyMzIwXFx1MjMyMVxceEY3XFx1MjI0OFxceEIwXFx1MjIxOVxceEI3XFx1MjIxQVxcdTIwN0ZcXHhCMlxcdTI1QTBcXHhBMFwiXG4gICAgICB9LFxuICAgICAgXCJpYm04NjBcIjogXCJjcDg2MFwiLFxuICAgICAgXCJjc2libTg2MFwiOiBcImNwODYwXCIsXG4gICAgICBcImNwODYxXCI6IHtcbiAgICAgICAgXCJ0eXBlXCI6IFwiX3NiY3NcIixcbiAgICAgICAgXCJjaGFyc1wiOiBcIlxceEM3XFx4RkNcXHhFOVxceEUyXFx4RTRcXHhFMFxceEU1XFx4RTdcXHhFQVxceEVCXFx4RThcXHhEMFxceEYwXFx4REVcXHhDNFxceEM1XFx4QzlcXHhFNlxceEM2XFx4RjRcXHhGNlxceEZFXFx4RkJcXHhERFxceEZEXFx4RDZcXHhEQ1xceEY4XFx4QTNcXHhEOFxcdTIwQTdcXHUwMTkyXFx4RTFcXHhFRFxceEYzXFx4RkFcXHhDMVxceENEXFx4RDNcXHhEQVxceEJGXFx1MjMxMFxceEFDXFx4QkRcXHhCQ1xceEExXFx4QUJcXHhCQlxcdTI1OTFcXHUyNTkyXFx1MjU5M1xcdTI1MDJcXHUyNTI0XFx1MjU2MVxcdTI1NjJcXHUyNTU2XFx1MjU1NVxcdTI1NjNcXHUyNTUxXFx1MjU1N1xcdTI1NURcXHUyNTVDXFx1MjU1QlxcdTI1MTBcXHUyNTE0XFx1MjUzNFxcdTI1MkNcXHUyNTFDXFx1MjUwMFxcdTI1M0NcXHUyNTVFXFx1MjU1RlxcdTI1NUFcXHUyNTU0XFx1MjU2OVxcdTI1NjZcXHUyNTYwXFx1MjU1MFxcdTI1NkNcXHUyNTY3XFx1MjU2OFxcdTI1NjRcXHUyNTY1XFx1MjU1OVxcdTI1NThcXHUyNTUyXFx1MjU1M1xcdTI1NkJcXHUyNTZBXFx1MjUxOFxcdTI1MENcXHUyNTg4XFx1MjU4NFxcdTI1OENcXHUyNTkwXFx1MjU4MFxcdTAzQjFcXHhERlxcdTAzOTNcXHUwM0MwXFx1MDNBM1xcdTAzQzNcXHhCNVxcdTAzQzRcXHUwM0E2XFx1MDM5OFxcdTAzQTlcXHUwM0I0XFx1MjIxRVxcdTAzQzZcXHUwM0I1XFx1MjIyOVxcdTIyNjFcXHhCMVxcdTIyNjVcXHUyMjY0XFx1MjMyMFxcdTIzMjFcXHhGN1xcdTIyNDhcXHhCMFxcdTIyMTlcXHhCN1xcdTIyMUFcXHUyMDdGXFx4QjJcXHUyNUEwXFx4QTBcIlxuICAgICAgfSxcbiAgICAgIFwiaWJtODYxXCI6IFwiY3A4NjFcIixcbiAgICAgIFwiY3NpYm04NjFcIjogXCJjcDg2MVwiLFxuICAgICAgXCJjcDg2MlwiOiB7XG4gICAgICAgIFwidHlwZVwiOiBcIl9zYmNzXCIsXG4gICAgICAgIFwiY2hhcnNcIjogXCJcXHUwNUQwXFx1MDVEMVxcdTA1RDJcXHUwNUQzXFx1MDVENFxcdTA1RDVcXHUwNUQ2XFx1MDVEN1xcdTA1RDhcXHUwNUQ5XFx1MDVEQVxcdTA1REJcXHUwNURDXFx1MDVERFxcdTA1REVcXHUwNURGXFx1MDVFMFxcdTA1RTFcXHUwNUUyXFx1MDVFM1xcdTA1RTRcXHUwNUU1XFx1MDVFNlxcdTA1RTdcXHUwNUU4XFx1MDVFOVxcdTA1RUFcXHhBMlxceEEzXFx4QTVcXHUyMEE3XFx1MDE5MlxceEUxXFx4RURcXHhGM1xceEZBXFx4RjFcXHhEMVxceEFBXFx4QkFcXHhCRlxcdTIzMTBcXHhBQ1xceEJEXFx4QkNcXHhBMVxceEFCXFx4QkJcXHUyNTkxXFx1MjU5MlxcdTI1OTNcXHUyNTAyXFx1MjUyNFxcdTI1NjFcXHUyNTYyXFx1MjU1NlxcdTI1NTVcXHUyNTYzXFx1MjU1MVxcdTI1NTdcXHUyNTVEXFx1MjU1Q1xcdTI1NUJcXHUyNTEwXFx1MjUxNFxcdTI1MzRcXHUyNTJDXFx1MjUxQ1xcdTI1MDBcXHUyNTNDXFx1MjU1RVxcdTI1NUZcXHUyNTVBXFx1MjU1NFxcdTI1NjlcXHUyNTY2XFx1MjU2MFxcdTI1NTBcXHUyNTZDXFx1MjU2N1xcdTI1NjhcXHUyNTY0XFx1MjU2NVxcdTI1NTlcXHUyNTU4XFx1MjU1MlxcdTI1NTNcXHUyNTZCXFx1MjU2QVxcdTI1MThcXHUyNTBDXFx1MjU4OFxcdTI1ODRcXHUyNThDXFx1MjU5MFxcdTI1ODBcXHUwM0IxXFx4REZcXHUwMzkzXFx1MDNDMFxcdTAzQTNcXHUwM0MzXFx4QjVcXHUwM0M0XFx1MDNBNlxcdTAzOThcXHUwM0E5XFx1MDNCNFxcdTIyMUVcXHUwM0M2XFx1MDNCNVxcdTIyMjlcXHUyMjYxXFx4QjFcXHUyMjY1XFx1MjI2NFxcdTIzMjBcXHUyMzIxXFx4RjdcXHUyMjQ4XFx4QjBcXHUyMjE5XFx4QjdcXHUyMjFBXFx1MjA3RlxceEIyXFx1MjVBMFxceEEwXCJcbiAgICAgIH0sXG4gICAgICBcImlibTg2MlwiOiBcImNwODYyXCIsXG4gICAgICBcImNzaWJtODYyXCI6IFwiY3A4NjJcIixcbiAgICAgIFwiY3A4NjNcIjoge1xuICAgICAgICBcInR5cGVcIjogXCJfc2Jjc1wiLFxuICAgICAgICBcImNoYXJzXCI6IFwiXFx4QzdcXHhGQ1xceEU5XFx4RTJcXHhDMlxceEUwXFx4QjZcXHhFN1xceEVBXFx4RUJcXHhFOFxceEVGXFx4RUVcXHUyMDE3XFx4QzBcXHhBN1xceEM5XFx4QzhcXHhDQVxceEY0XFx4Q0JcXHhDRlxceEZCXFx4RjlcXHhBNFxceEQ0XFx4RENcXHhBMlxceEEzXFx4RDlcXHhEQlxcdTAxOTJcXHhBNlxceEI0XFx4RjNcXHhGQVxceEE4XFx4QjhcXHhCM1xceEFGXFx4Q0VcXHUyMzEwXFx4QUNcXHhCRFxceEJDXFx4QkVcXHhBQlxceEJCXFx1MjU5MVxcdTI1OTJcXHUyNTkzXFx1MjUwMlxcdTI1MjRcXHUyNTYxXFx1MjU2MlxcdTI1NTZcXHUyNTU1XFx1MjU2M1xcdTI1NTFcXHUyNTU3XFx1MjU1RFxcdTI1NUNcXHUyNTVCXFx1MjUxMFxcdTI1MTRcXHUyNTM0XFx1MjUyQ1xcdTI1MUNcXHUyNTAwXFx1MjUzQ1xcdTI1NUVcXHUyNTVGXFx1MjU1QVxcdTI1NTRcXHUyNTY5XFx1MjU2NlxcdTI1NjBcXHUyNTUwXFx1MjU2Q1xcdTI1NjdcXHUyNTY4XFx1MjU2NFxcdTI1NjVcXHUyNTU5XFx1MjU1OFxcdTI1NTJcXHUyNTUzXFx1MjU2QlxcdTI1NkFcXHUyNTE4XFx1MjUwQ1xcdTI1ODhcXHUyNTg0XFx1MjU4Q1xcdTI1OTBcXHUyNTgwXFx1MDNCMVxceERGXFx1MDM5M1xcdTAzQzBcXHUwM0EzXFx1MDNDM1xceEI1XFx1MDNDNFxcdTAzQTZcXHUwMzk4XFx1MDNBOVxcdTAzQjRcXHUyMjFFXFx1MDNDNlxcdTAzQjVcXHUyMjI5XFx1MjI2MVxceEIxXFx1MjI2NVxcdTIyNjRcXHUyMzIwXFx1MjMyMVxceEY3XFx1MjI0OFxceEIwXFx1MjIxOVxceEI3XFx1MjIxQVxcdTIwN0ZcXHhCMlxcdTI1QTBcXHhBMFwiXG4gICAgICB9LFxuICAgICAgXCJpYm04NjNcIjogXCJjcDg2M1wiLFxuICAgICAgXCJjc2libTg2M1wiOiBcImNwODYzXCIsXG4gICAgICBcImNwODY0XCI6IHtcbiAgICAgICAgXCJ0eXBlXCI6IFwiX3NiY3NcIixcbiAgICAgICAgXCJjaGFyc1wiOiBcIlxcMFx1MDAwMVx1MDAwMlx1MDAwM1x1MDAwNFx1MDAwNVx1MDAwNlxceDA3XFxiXHRcXG5cXHZcXGZcXHJcdTAwMEVcdTAwMEZcdTAwMTBcdTAwMTFcdTAwMTJcdTAwMTNcdTAwMTRcdTAwMTVcdTAwMTZcdTAwMTdcdTAwMThcdTAwMTlcdTAwMUFcXHgxQlx1MDAxQ1x1MDAxRFx1MDAxRVx1MDAxRiAhXFxcIiMkXFx1MDY2QSYnKCkqKywtLi8wMTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaW1xcXFxdXl9gYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXp7fH1+XFx4N0ZcXHhCMFxceEI3XFx1MjIxOVxcdTIyMUFcXHUyNTkyXFx1MjUwMFxcdTI1MDJcXHUyNTNDXFx1MjUyNFxcdTI1MkNcXHUyNTFDXFx1MjUzNFxcdTI1MTBcXHUyNTBDXFx1MjUxNFxcdTI1MThcXHUwM0IyXFx1MjIxRVxcdTAzQzZcXHhCMVxceEJEXFx4QkNcXHUyMjQ4XFx4QUJcXHhCQlxcdUZFRjdcXHVGRUY4XFx1RkZGRFxcdUZGRkRcXHVGRUZCXFx1RkVGQ1xcdUZGRkRcXHhBMFxceEFEXFx1RkU4MlxceEEzXFx4QTRcXHVGRTg0XFx1RkZGRFxcdUZGRkRcXHVGRThFXFx1RkU4RlxcdUZFOTVcXHVGRTk5XFx1MDYwQ1xcdUZFOURcXHVGRUExXFx1RkVBNVxcdTA2NjBcXHUwNjYxXFx1MDY2MlxcdTA2NjNcXHUwNjY0XFx1MDY2NVxcdTA2NjZcXHUwNjY3XFx1MDY2OFxcdTA2NjlcXHVGRUQxXFx1MDYxQlxcdUZFQjFcXHVGRUI1XFx1RkVCOVxcdTA2MUZcXHhBMlxcdUZFODBcXHVGRTgxXFx1RkU4M1xcdUZFODVcXHVGRUNBXFx1RkU4QlxcdUZFOERcXHVGRTkxXFx1RkU5M1xcdUZFOTdcXHVGRTlCXFx1RkU5RlxcdUZFQTNcXHVGRUE3XFx1RkVBOVxcdUZFQUJcXHVGRUFEXFx1RkVBRlxcdUZFQjNcXHVGRUI3XFx1RkVCQlxcdUZFQkZcXHVGRUMxXFx1RkVDNVxcdUZFQ0JcXHVGRUNGXFx4QTZcXHhBQ1xceEY3XFx4RDdcXHVGRUM5XFx1MDY0MFxcdUZFRDNcXHVGRUQ3XFx1RkVEQlxcdUZFREZcXHVGRUUzXFx1RkVFN1xcdUZFRUJcXHVGRUVEXFx1RkVFRlxcdUZFRjNcXHVGRUJEXFx1RkVDQ1xcdUZFQ0VcXHVGRUNEXFx1RkVFMVxcdUZFN0RcXHUwNjUxXFx1RkVFNVxcdUZFRTlcXHVGRUVDXFx1RkVGMFxcdUZFRjJcXHVGRUQwXFx1RkVENVxcdUZFRjVcXHVGRUY2XFx1RkVERFxcdUZFRDlcXHVGRUYxXFx1MjVBMFxcdUZGRkRcIlxuICAgICAgfSxcbiAgICAgIFwiaWJtODY0XCI6IFwiY3A4NjRcIixcbiAgICAgIFwiY3NpYm04NjRcIjogXCJjcDg2NFwiLFxuICAgICAgXCJjcDg2NVwiOiB7XG4gICAgICAgIFwidHlwZVwiOiBcIl9zYmNzXCIsXG4gICAgICAgIFwiY2hhcnNcIjogXCJcXHhDN1xceEZDXFx4RTlcXHhFMlxceEU0XFx4RTBcXHhFNVxceEU3XFx4RUFcXHhFQlxceEU4XFx4RUZcXHhFRVxceEVDXFx4QzRcXHhDNVxceEM5XFx4RTZcXHhDNlxceEY0XFx4RjZcXHhGMlxceEZCXFx4RjlcXHhGRlxceEQ2XFx4RENcXHhGOFxceEEzXFx4RDhcXHUyMEE3XFx1MDE5MlxceEUxXFx4RURcXHhGM1xceEZBXFx4RjFcXHhEMVxceEFBXFx4QkFcXHhCRlxcdTIzMTBcXHhBQ1xceEJEXFx4QkNcXHhBMVxceEFCXFx4QTRcXHUyNTkxXFx1MjU5MlxcdTI1OTNcXHUyNTAyXFx1MjUyNFxcdTI1NjFcXHUyNTYyXFx1MjU1NlxcdTI1NTVcXHUyNTYzXFx1MjU1MVxcdTI1NTdcXHUyNTVEXFx1MjU1Q1xcdTI1NUJcXHUyNTEwXFx1MjUxNFxcdTI1MzRcXHUyNTJDXFx1MjUxQ1xcdTI1MDBcXHUyNTNDXFx1MjU1RVxcdTI1NUZcXHUyNTVBXFx1MjU1NFxcdTI1NjlcXHUyNTY2XFx1MjU2MFxcdTI1NTBcXHUyNTZDXFx1MjU2N1xcdTI1NjhcXHUyNTY0XFx1MjU2NVxcdTI1NTlcXHUyNTU4XFx1MjU1MlxcdTI1NTNcXHUyNTZCXFx1MjU2QVxcdTI1MThcXHUyNTBDXFx1MjU4OFxcdTI1ODRcXHUyNThDXFx1MjU5MFxcdTI1ODBcXHUwM0IxXFx4REZcXHUwMzkzXFx1MDNDMFxcdTAzQTNcXHUwM0MzXFx4QjVcXHUwM0M0XFx1MDNBNlxcdTAzOThcXHUwM0E5XFx1MDNCNFxcdTIyMUVcXHUwM0M2XFx1MDNCNVxcdTIyMjlcXHUyMjYxXFx4QjFcXHUyMjY1XFx1MjI2NFxcdTIzMjBcXHUyMzIxXFx4RjdcXHUyMjQ4XFx4QjBcXHUyMjE5XFx4QjdcXHUyMjFBXFx1MjA3RlxceEIyXFx1MjVBMFxceEEwXCJcbiAgICAgIH0sXG4gICAgICBcImlibTg2NVwiOiBcImNwODY1XCIsXG4gICAgICBcImNzaWJtODY1XCI6IFwiY3A4NjVcIixcbiAgICAgIFwiY3A4NjZcIjoge1xuICAgICAgICBcInR5cGVcIjogXCJfc2Jjc1wiLFxuICAgICAgICBcImNoYXJzXCI6IFwiXFx1MDQxMFxcdTA0MTFcXHUwNDEyXFx1MDQxM1xcdTA0MTRcXHUwNDE1XFx1MDQxNlxcdTA0MTdcXHUwNDE4XFx1MDQxOVxcdTA0MUFcXHUwNDFCXFx1MDQxQ1xcdTA0MURcXHUwNDFFXFx1MDQxRlxcdTA0MjBcXHUwNDIxXFx1MDQyMlxcdTA0MjNcXHUwNDI0XFx1MDQyNVxcdTA0MjZcXHUwNDI3XFx1MDQyOFxcdTA0MjlcXHUwNDJBXFx1MDQyQlxcdTA0MkNcXHUwNDJEXFx1MDQyRVxcdTA0MkZcXHUwNDMwXFx1MDQzMVxcdTA0MzJcXHUwNDMzXFx1MDQzNFxcdTA0MzVcXHUwNDM2XFx1MDQzN1xcdTA0MzhcXHUwNDM5XFx1MDQzQVxcdTA0M0JcXHUwNDNDXFx1MDQzRFxcdTA0M0VcXHUwNDNGXFx1MjU5MVxcdTI1OTJcXHUyNTkzXFx1MjUwMlxcdTI1MjRcXHUyNTYxXFx1MjU2MlxcdTI1NTZcXHUyNTU1XFx1MjU2M1xcdTI1NTFcXHUyNTU3XFx1MjU1RFxcdTI1NUNcXHUyNTVCXFx1MjUxMFxcdTI1MTRcXHUyNTM0XFx1MjUyQ1xcdTI1MUNcXHUyNTAwXFx1MjUzQ1xcdTI1NUVcXHUyNTVGXFx1MjU1QVxcdTI1NTRcXHUyNTY5XFx1MjU2NlxcdTI1NjBcXHUyNTUwXFx1MjU2Q1xcdTI1NjdcXHUyNTY4XFx1MjU2NFxcdTI1NjVcXHUyNTU5XFx1MjU1OFxcdTI1NTJcXHUyNTUzXFx1MjU2QlxcdTI1NkFcXHUyNTE4XFx1MjUwQ1xcdTI1ODhcXHUyNTg0XFx1MjU4Q1xcdTI1OTBcXHUyNTgwXFx1MDQ0MFxcdTA0NDFcXHUwNDQyXFx1MDQ0M1xcdTA0NDRcXHUwNDQ1XFx1MDQ0NlxcdTA0NDdcXHUwNDQ4XFx1MDQ0OVxcdTA0NEFcXHUwNDRCXFx1MDQ0Q1xcdTA0NERcXHUwNDRFXFx1MDQ0RlxcdTA0MDFcXHUwNDUxXFx1MDQwNFxcdTA0NTRcXHUwNDA3XFx1MDQ1N1xcdTA0MEVcXHUwNDVFXFx4QjBcXHUyMjE5XFx4QjdcXHUyMjFBXFx1MjExNlxceEE0XFx1MjVBMFxceEEwXCJcbiAgICAgIH0sXG4gICAgICBcImlibTg2NlwiOiBcImNwODY2XCIsXG4gICAgICBcImNzaWJtODY2XCI6IFwiY3A4NjZcIixcbiAgICAgIFwiY3A4NjlcIjoge1xuICAgICAgICBcInR5cGVcIjogXCJfc2Jjc1wiLFxuICAgICAgICBcImNoYXJzXCI6IFwiXFx1RkZGRFxcdUZGRkRcXHVGRkZEXFx1RkZGRFxcdUZGRkRcXHVGRkZEXFx1MDM4NlxcdUZGRkRcXHhCN1xceEFDXFx4QTZcXHUyMDE4XFx1MjAxOVxcdTAzODhcXHUyMDE1XFx1MDM4OVxcdTAzOEFcXHUwM0FBXFx1MDM4Q1xcdUZGRkRcXHVGRkZEXFx1MDM4RVxcdTAzQUJcXHhBOVxcdTAzOEZcXHhCMlxceEIzXFx1MDNBQ1xceEEzXFx1MDNBRFxcdTAzQUVcXHUwM0FGXFx1MDNDQVxcdTAzOTBcXHUwM0NDXFx1MDNDRFxcdTAzOTFcXHUwMzkyXFx1MDM5M1xcdTAzOTRcXHUwMzk1XFx1MDM5NlxcdTAzOTdcXHhCRFxcdTAzOThcXHUwMzk5XFx4QUJcXHhCQlxcdTI1OTFcXHUyNTkyXFx1MjU5M1xcdTI1MDJcXHUyNTI0XFx1MDM5QVxcdTAzOUJcXHUwMzlDXFx1MDM5RFxcdTI1NjNcXHUyNTUxXFx1MjU1N1xcdTI1NURcXHUwMzlFXFx1MDM5RlxcdTI1MTBcXHUyNTE0XFx1MjUzNFxcdTI1MkNcXHUyNTFDXFx1MjUwMFxcdTI1M0NcXHUwM0EwXFx1MDNBMVxcdTI1NUFcXHUyNTU0XFx1MjU2OVxcdTI1NjZcXHUyNTYwXFx1MjU1MFxcdTI1NkNcXHUwM0EzXFx1MDNBNFxcdTAzQTVcXHUwM0E2XFx1MDNBN1xcdTAzQThcXHUwM0E5XFx1MDNCMVxcdTAzQjJcXHUwM0IzXFx1MjUxOFxcdTI1MENcXHUyNTg4XFx1MjU4NFxcdTAzQjRcXHUwM0I1XFx1MjU4MFxcdTAzQjZcXHUwM0I3XFx1MDNCOFxcdTAzQjlcXHUwM0JBXFx1MDNCQlxcdTAzQkNcXHUwM0JEXFx1MDNCRVxcdTAzQkZcXHUwM0MwXFx1MDNDMVxcdTAzQzNcXHUwM0MyXFx1MDNDNFxcdTAzODRcXHhBRFxceEIxXFx1MDNDNVxcdTAzQzZcXHUwM0M3XFx4QTdcXHUwM0M4XFx1MDM4NVxceEIwXFx4QThcXHUwM0M5XFx1MDNDQlxcdTAzQjBcXHUwM0NFXFx1MjVBMFxceEEwXCJcbiAgICAgIH0sXG4gICAgICBcImlibTg2OVwiOiBcImNwODY5XCIsXG4gICAgICBcImNzaWJtODY5XCI6IFwiY3A4NjlcIixcbiAgICAgIFwiY3A5MjJcIjoge1xuICAgICAgICBcInR5cGVcIjogXCJfc2Jjc1wiLFxuICAgICAgICBcImNoYXJzXCI6IFwiXFx4ODBcXHg4MVxceDgyXFx4ODNcXHg4NFxceDg1XFx4ODZcXHg4N1xceDg4XFx4ODlcXHg4QVxceDhCXFx4OENcXHg4RFxceDhFXFx4OEZcXHg5MFxceDkxXFx4OTJcXHg5M1xceDk0XFx4OTVcXHg5NlxceDk3XFx4OThcXHg5OVxceDlBXFx4OUJcXHg5Q1xceDlEXFx4OUVcXHg5RlxceEEwXFx4QTFcXHhBMlxceEEzXFx4QTRcXHhBNVxceEE2XFx4QTdcXHhBOFxceEE5XFx4QUFcXHhBQlxceEFDXFx4QURcXHhBRVxcdTIwM0VcXHhCMFxceEIxXFx4QjJcXHhCM1xceEI0XFx4QjVcXHhCNlxceEI3XFx4QjhcXHhCOVxceEJBXFx4QkJcXHhCQ1xceEJEXFx4QkVcXHhCRlxceEMwXFx4QzFcXHhDMlxceEMzXFx4QzRcXHhDNVxceEM2XFx4QzdcXHhDOFxceEM5XFx4Q0FcXHhDQlxceENDXFx4Q0RcXHhDRVxceENGXFx1MDE2MFxceEQxXFx4RDJcXHhEM1xceEQ0XFx4RDVcXHhENlxceEQ3XFx4RDhcXHhEOVxceERBXFx4REJcXHhEQ1xceEREXFx1MDE3RFxceERGXFx4RTBcXHhFMVxceEUyXFx4RTNcXHhFNFxceEU1XFx4RTZcXHhFN1xceEU4XFx4RTlcXHhFQVxceEVCXFx4RUNcXHhFRFxceEVFXFx4RUZcXHUwMTYxXFx4RjFcXHhGMlxceEYzXFx4RjRcXHhGNVxceEY2XFx4RjdcXHhGOFxceEY5XFx4RkFcXHhGQlxceEZDXFx4RkRcXHUwMTdFXFx4RkZcIlxuICAgICAgfSxcbiAgICAgIFwiaWJtOTIyXCI6IFwiY3A5MjJcIixcbiAgICAgIFwiY3NpYm05MjJcIjogXCJjcDkyMlwiLFxuICAgICAgXCJjcDEwNDZcIjoge1xuICAgICAgICBcInR5cGVcIjogXCJfc2Jjc1wiLFxuICAgICAgICBcImNoYXJzXCI6IFwiXFx1RkU4OFxceEQ3XFx4RjdcXHVGOEY2XFx1RjhGNVxcdUY4RjRcXHVGOEY3XFx1RkU3MVxceDg4XFx1MjVBMFxcdTI1MDJcXHUyNTAwXFx1MjUxMFxcdTI1MENcXHUyNTE0XFx1MjUxOFxcdUZFNzlcXHVGRTdCXFx1RkU3RFxcdUZFN0ZcXHVGRTc3XFx1RkU4QVxcdUZFRjBcXHVGRUYzXFx1RkVGMlxcdUZFQ0VcXHVGRUNGXFx1RkVEMFxcdUZFRjZcXHVGRUY4XFx1RkVGQVxcdUZFRkNcXHhBMFxcdUY4RkFcXHVGOEY5XFx1RjhGOFxceEE0XFx1RjhGQlxcdUZFOEJcXHVGRTkxXFx1RkU5N1xcdUZFOUJcXHVGRTlGXFx1RkVBM1xcdTA2MENcXHhBRFxcdUZFQTdcXHVGRUIzXFx1MDY2MFxcdTA2NjFcXHUwNjYyXFx1MDY2M1xcdTA2NjRcXHUwNjY1XFx1MDY2NlxcdTA2NjdcXHUwNjY4XFx1MDY2OVxcdUZFQjdcXHUwNjFCXFx1RkVCQlxcdUZFQkZcXHVGRUNBXFx1MDYxRlxcdUZFQ0JcXHUwNjIxXFx1MDYyMlxcdTA2MjNcXHUwNjI0XFx1MDYyNVxcdTA2MjZcXHUwNjI3XFx1MDYyOFxcdTA2MjlcXHUwNjJBXFx1MDYyQlxcdTA2MkNcXHUwNjJEXFx1MDYyRVxcdTA2MkZcXHUwNjMwXFx1MDYzMVxcdTA2MzJcXHUwNjMzXFx1MDYzNFxcdTA2MzVcXHUwNjM2XFx1MDYzN1xcdUZFQzdcXHUwNjM5XFx1MDYzQVxcdUZFQ0NcXHVGRTgyXFx1RkU4NFxcdUZFOEVcXHVGRUQzXFx1MDY0MFxcdTA2NDFcXHUwNjQyXFx1MDY0M1xcdTA2NDRcXHUwNjQ1XFx1MDY0NlxcdTA2NDdcXHUwNjQ4XFx1MDY0OVxcdTA2NEFcXHUwNjRCXFx1MDY0Q1xcdTA2NERcXHUwNjRFXFx1MDY0RlxcdTA2NTBcXHUwNjUxXFx1MDY1MlxcdUZFRDdcXHVGRURCXFx1RkVERlxcdUY4RkNcXHVGRUY1XFx1RkVGN1xcdUZFRjlcXHVGRUZCXFx1RkVFM1xcdUZFRTdcXHVGRUVDXFx1RkVFOVxcdUZGRkRcIlxuICAgICAgfSxcbiAgICAgIFwiaWJtMTA0NlwiOiBcImNwMTA0NlwiLFxuICAgICAgXCJjc2libTEwNDZcIjogXCJjcDEwNDZcIixcbiAgICAgIFwiY3AxMTI0XCI6IHtcbiAgICAgICAgXCJ0eXBlXCI6IFwiX3NiY3NcIixcbiAgICAgICAgXCJjaGFyc1wiOiBcIlxceDgwXFx4ODFcXHg4MlxceDgzXFx4ODRcXHg4NVxceDg2XFx4ODdcXHg4OFxceDg5XFx4OEFcXHg4QlxceDhDXFx4OERcXHg4RVxceDhGXFx4OTBcXHg5MVxceDkyXFx4OTNcXHg5NFxceDk1XFx4OTZcXHg5N1xceDk4XFx4OTlcXHg5QVxceDlCXFx4OUNcXHg5RFxceDlFXFx4OUZcXHhBMFxcdTA0MDFcXHUwNDAyXFx1MDQ5MFxcdTA0MDRcXHUwNDA1XFx1MDQwNlxcdTA0MDdcXHUwNDA4XFx1MDQwOVxcdTA0MEFcXHUwNDBCXFx1MDQwQ1xceEFEXFx1MDQwRVxcdTA0MEZcXHUwNDEwXFx1MDQxMVxcdTA0MTJcXHUwNDEzXFx1MDQxNFxcdTA0MTVcXHUwNDE2XFx1MDQxN1xcdTA0MThcXHUwNDE5XFx1MDQxQVxcdTA0MUJcXHUwNDFDXFx1MDQxRFxcdTA0MUVcXHUwNDFGXFx1MDQyMFxcdTA0MjFcXHUwNDIyXFx1MDQyM1xcdTA0MjRcXHUwNDI1XFx1MDQyNlxcdTA0MjdcXHUwNDI4XFx1MDQyOVxcdTA0MkFcXHUwNDJCXFx1MDQyQ1xcdTA0MkRcXHUwNDJFXFx1MDQyRlxcdTA0MzBcXHUwNDMxXFx1MDQzMlxcdTA0MzNcXHUwNDM0XFx1MDQzNVxcdTA0MzZcXHUwNDM3XFx1MDQzOFxcdTA0MzlcXHUwNDNBXFx1MDQzQlxcdTA0M0NcXHUwNDNEXFx1MDQzRVxcdTA0M0ZcXHUwNDQwXFx1MDQ0MVxcdTA0NDJcXHUwNDQzXFx1MDQ0NFxcdTA0NDVcXHUwNDQ2XFx1MDQ0N1xcdTA0NDhcXHUwNDQ5XFx1MDQ0QVxcdTA0NEJcXHUwNDRDXFx1MDQ0RFxcdTA0NEVcXHUwNDRGXFx1MjExNlxcdTA0NTFcXHUwNDUyXFx1MDQ5MVxcdTA0NTRcXHUwNDU1XFx1MDQ1NlxcdTA0NTdcXHUwNDU4XFx1MDQ1OVxcdTA0NUFcXHUwNDVCXFx1MDQ1Q1xceEE3XFx1MDQ1RVxcdTA0NUZcIlxuICAgICAgfSxcbiAgICAgIFwiaWJtMTEyNFwiOiBcImNwMTEyNFwiLFxuICAgICAgXCJjc2libTExMjRcIjogXCJjcDExMjRcIixcbiAgICAgIFwiY3AxMTI1XCI6IHtcbiAgICAgICAgXCJ0eXBlXCI6IFwiX3NiY3NcIixcbiAgICAgICAgXCJjaGFyc1wiOiBcIlxcdTA0MTBcXHUwNDExXFx1MDQxMlxcdTA0MTNcXHUwNDE0XFx1MDQxNVxcdTA0MTZcXHUwNDE3XFx1MDQxOFxcdTA0MTlcXHUwNDFBXFx1MDQxQlxcdTA0MUNcXHUwNDFEXFx1MDQxRVxcdTA0MUZcXHUwNDIwXFx1MDQyMVxcdTA0MjJcXHUwNDIzXFx1MDQyNFxcdTA0MjVcXHUwNDI2XFx1MDQyN1xcdTA0MjhcXHUwNDI5XFx1MDQyQVxcdTA0MkJcXHUwNDJDXFx1MDQyRFxcdTA0MkVcXHUwNDJGXFx1MDQzMFxcdTA0MzFcXHUwNDMyXFx1MDQzM1xcdTA0MzRcXHUwNDM1XFx1MDQzNlxcdTA0MzdcXHUwNDM4XFx1MDQzOVxcdTA0M0FcXHUwNDNCXFx1MDQzQ1xcdTA0M0RcXHUwNDNFXFx1MDQzRlxcdTI1OTFcXHUyNTkyXFx1MjU5M1xcdTI1MDJcXHUyNTI0XFx1MjU2MVxcdTI1NjJcXHUyNTU2XFx1MjU1NVxcdTI1NjNcXHUyNTUxXFx1MjU1N1xcdTI1NURcXHUyNTVDXFx1MjU1QlxcdTI1MTBcXHUyNTE0XFx1MjUzNFxcdTI1MkNcXHUyNTFDXFx1MjUwMFxcdTI1M0NcXHUyNTVFXFx1MjU1RlxcdTI1NUFcXHUyNTU0XFx1MjU2OVxcdTI1NjZcXHUyNTYwXFx1MjU1MFxcdTI1NkNcXHUyNTY3XFx1MjU2OFxcdTI1NjRcXHUyNTY1XFx1MjU1OVxcdTI1NThcXHUyNTUyXFx1MjU1M1xcdTI1NkJcXHUyNTZBXFx1MjUxOFxcdTI1MENcXHUyNTg4XFx1MjU4NFxcdTI1OENcXHUyNTkwXFx1MjU4MFxcdTA0NDBcXHUwNDQxXFx1MDQ0MlxcdTA0NDNcXHUwNDQ0XFx1MDQ0NVxcdTA0NDZcXHUwNDQ3XFx1MDQ0OFxcdTA0NDlcXHUwNDRBXFx1MDQ0QlxcdTA0NENcXHUwNDREXFx1MDQ0RVxcdTA0NEZcXHUwNDAxXFx1MDQ1MVxcdTA0OTBcXHUwNDkxXFx1MDQwNFxcdTA0NTRcXHUwNDA2XFx1MDQ1NlxcdTA0MDdcXHUwNDU3XFx4QjdcXHUyMjFBXFx1MjExNlxceEE0XFx1MjVBMFxceEEwXCJcbiAgICAgIH0sXG4gICAgICBcImlibTExMjVcIjogXCJjcDExMjVcIixcbiAgICAgIFwiY3NpYm0xMTI1XCI6IFwiY3AxMTI1XCIsXG4gICAgICBcImNwMTEyOVwiOiB7XG4gICAgICAgIFwidHlwZVwiOiBcIl9zYmNzXCIsXG4gICAgICAgIFwiY2hhcnNcIjogXCJcXHg4MFxceDgxXFx4ODJcXHg4M1xceDg0XFx4ODVcXHg4NlxceDg3XFx4ODhcXHg4OVxceDhBXFx4OEJcXHg4Q1xceDhEXFx4OEVcXHg4RlxceDkwXFx4OTFcXHg5MlxceDkzXFx4OTRcXHg5NVxceDk2XFx4OTdcXHg5OFxceDk5XFx4OUFcXHg5QlxceDlDXFx4OURcXHg5RVxceDlGXFx4QTBcXHhBMVxceEEyXFx4QTNcXHhBNFxceEE1XFx4QTZcXHhBN1xcdTAxNTNcXHhBOVxceEFBXFx4QUJcXHhBQ1xceEFEXFx4QUVcXHhBRlxceEIwXFx4QjFcXHhCMlxceEIzXFx1MDE3OFxceEI1XFx4QjZcXHhCN1xcdTAxNTJcXHhCOVxceEJBXFx4QkJcXHhCQ1xceEJEXFx4QkVcXHhCRlxceEMwXFx4QzFcXHhDMlxcdTAxMDJcXHhDNFxceEM1XFx4QzZcXHhDN1xceEM4XFx4QzlcXHhDQVxceENCXFx1MDMwMFxceENEXFx4Q0VcXHhDRlxcdTAxMTBcXHhEMVxcdTAzMDlcXHhEM1xceEQ0XFx1MDFBMFxceEQ2XFx4RDdcXHhEOFxceEQ5XFx4REFcXHhEQlxceERDXFx1MDFBRlxcdTAzMDNcXHhERlxceEUwXFx4RTFcXHhFMlxcdTAxMDNcXHhFNFxceEU1XFx4RTZcXHhFN1xceEU4XFx4RTlcXHhFQVxceEVCXFx1MDMwMVxceEVEXFx4RUVcXHhFRlxcdTAxMTFcXHhGMVxcdTAzMjNcXHhGM1xceEY0XFx1MDFBMVxceEY2XFx4RjdcXHhGOFxceEY5XFx4RkFcXHhGQlxceEZDXFx1MDFCMFxcdTIwQUJcXHhGRlwiXG4gICAgICB9LFxuICAgICAgXCJpYm0xMTI5XCI6IFwiY3AxMTI5XCIsXG4gICAgICBcImNzaWJtMTEyOVwiOiBcImNwMTEyOVwiLFxuICAgICAgXCJjcDExMzNcIjoge1xuICAgICAgICBcInR5cGVcIjogXCJfc2Jjc1wiLFxuICAgICAgICBcImNoYXJzXCI6IFwiXFx4ODBcXHg4MVxceDgyXFx4ODNcXHg4NFxceDg1XFx4ODZcXHg4N1xceDg4XFx4ODlcXHg4QVxceDhCXFx4OENcXHg4RFxceDhFXFx4OEZcXHg5MFxceDkxXFx4OTJcXHg5M1xceDk0XFx4OTVcXHg5NlxceDk3XFx4OThcXHg5OVxceDlBXFx4OUJcXHg5Q1xceDlEXFx4OUVcXHg5RlxceEEwXFx1MEU4MVxcdTBFODJcXHUwRTg0XFx1MEU4N1xcdTBFODhcXHUwRUFBXFx1MEU4QVxcdTBFOERcXHUwRTk0XFx1MEU5NVxcdTBFOTZcXHUwRTk3XFx1MEU5OVxcdTBFOUFcXHUwRTlCXFx1MEU5Q1xcdTBFOURcXHUwRTlFXFx1MEU5RlxcdTBFQTFcXHUwRUEyXFx1MEVBM1xcdTBFQTVcXHUwRUE3XFx1MEVBQlxcdTBFQURcXHUwRUFFXFx1RkZGRFxcdUZGRkRcXHVGRkZEXFx1MEVBRlxcdTBFQjBcXHUwRUIyXFx1MEVCM1xcdTBFQjRcXHUwRUI1XFx1MEVCNlxcdTBFQjdcXHUwRUI4XFx1MEVCOVxcdTBFQkNcXHUwRUIxXFx1MEVCQlxcdTBFQkRcXHVGRkZEXFx1RkZGRFxcdUZGRkRcXHUwRUMwXFx1MEVDMVxcdTBFQzJcXHUwRUMzXFx1MEVDNFxcdTBFQzhcXHUwRUM5XFx1MEVDQVxcdTBFQ0JcXHUwRUNDXFx1MEVDRFxcdTBFQzZcXHVGRkZEXFx1MEVEQ1xcdTBFRERcXHUyMEFEXFx1RkZGRFxcdUZGRkRcXHVGRkZEXFx1RkZGRFxcdUZGRkRcXHVGRkZEXFx1RkZGRFxcdUZGRkRcXHVGRkZEXFx1RkZGRFxcdUZGRkRcXHVGRkZEXFx1RkZGRFxcdUZGRkRcXHVGRkZEXFx1RkZGRFxcdTBFRDBcXHUwRUQxXFx1MEVEMlxcdTBFRDNcXHUwRUQ0XFx1MEVENVxcdTBFRDZcXHUwRUQ3XFx1MEVEOFxcdTBFRDlcXHVGRkZEXFx1RkZGRFxceEEyXFx4QUNcXHhBNlxcdUZGRkRcIlxuICAgICAgfSxcbiAgICAgIFwiaWJtMTEzM1wiOiBcImNwMTEzM1wiLFxuICAgICAgXCJjc2libTExMzNcIjogXCJjcDExMzNcIixcbiAgICAgIFwiY3AxMTYxXCI6IHtcbiAgICAgICAgXCJ0eXBlXCI6IFwiX3NiY3NcIixcbiAgICAgICAgXCJjaGFyc1wiOiBcIlxcdUZGRkRcXHVGRkZEXFx1RkZGRFxcdUZGRkRcXHVGRkZEXFx1RkZGRFxcdUZGRkRcXHVGRkZEXFx1RkZGRFxcdUZGRkRcXHVGRkZEXFx1RkZGRFxcdUZGRkRcXHVGRkZEXFx1RkZGRFxcdUZGRkRcXHVGRkZEXFx1RkZGRFxcdUZGRkRcXHVGRkZEXFx1RkZGRFxcdUZGRkRcXHVGRkZEXFx1RkZGRFxcdUZGRkRcXHVGRkZEXFx1RkZGRFxcdUZGRkRcXHVGRkZEXFx1RkZGRFxcdUZGRkRcXHVGRkZEXFx1MEU0OFxcdTBFMDFcXHUwRTAyXFx1MEUwM1xcdTBFMDRcXHUwRTA1XFx1MEUwNlxcdTBFMDdcXHUwRTA4XFx1MEUwOVxcdTBFMEFcXHUwRTBCXFx1MEUwQ1xcdTBFMERcXHUwRTBFXFx1MEUwRlxcdTBFMTBcXHUwRTExXFx1MEUxMlxcdTBFMTNcXHUwRTE0XFx1MEUxNVxcdTBFMTZcXHUwRTE3XFx1MEUxOFxcdTBFMTlcXHUwRTFBXFx1MEUxQlxcdTBFMUNcXHUwRTFEXFx1MEUxRVxcdTBFMUZcXHUwRTIwXFx1MEUyMVxcdTBFMjJcXHUwRTIzXFx1MEUyNFxcdTBFMjVcXHUwRTI2XFx1MEUyN1xcdTBFMjhcXHUwRTI5XFx1MEUyQVxcdTBFMkJcXHUwRTJDXFx1MEUyRFxcdTBFMkVcXHUwRTJGXFx1MEUzMFxcdTBFMzFcXHUwRTMyXFx1MEUzM1xcdTBFMzRcXHUwRTM1XFx1MEUzNlxcdTBFMzdcXHUwRTM4XFx1MEUzOVxcdTBFM0FcXHUwRTQ5XFx1MEU0QVxcdTBFNEJcXHUyMEFDXFx1MEUzRlxcdTBFNDBcXHUwRTQxXFx1MEU0MlxcdTBFNDNcXHUwRTQ0XFx1MEU0NVxcdTBFNDZcXHUwRTQ3XFx1MEU0OFxcdTBFNDlcXHUwRTRBXFx1MEU0QlxcdTBFNENcXHUwRTREXFx1MEU0RVxcdTBFNEZcXHUwRTUwXFx1MEU1MVxcdTBFNTJcXHUwRTUzXFx1MEU1NFxcdTBFNTVcXHUwRTU2XFx1MEU1N1xcdTBFNThcXHUwRTU5XFx1MEU1QVxcdTBFNUJcXHhBMlxceEFDXFx4QTZcXHhBMFwiXG4gICAgICB9LFxuICAgICAgXCJpYm0xMTYxXCI6IFwiY3AxMTYxXCIsXG4gICAgICBcImNzaWJtMTE2MVwiOiBcImNwMTE2MVwiLFxuICAgICAgXCJjcDExNjJcIjoge1xuICAgICAgICBcInR5cGVcIjogXCJfc2Jjc1wiLFxuICAgICAgICBcImNoYXJzXCI6IFwiXFx1MjBBQ1xceDgxXFx4ODJcXHg4M1xceDg0XFx1MjAyNlxceDg2XFx4ODdcXHg4OFxceDg5XFx4OEFcXHg4QlxceDhDXFx4OERcXHg4RVxceDhGXFx4OTBcXHUyMDE4XFx1MjAxOVxcdTIwMUNcXHUyMDFEXFx1MjAyMlxcdTIwMTNcXHUyMDE0XFx4OThcXHg5OVxceDlBXFx4OUJcXHg5Q1xceDlEXFx4OUVcXHg5RlxceEEwXFx1MEUwMVxcdTBFMDJcXHUwRTAzXFx1MEUwNFxcdTBFMDVcXHUwRTA2XFx1MEUwN1xcdTBFMDhcXHUwRTA5XFx1MEUwQVxcdTBFMEJcXHUwRTBDXFx1MEUwRFxcdTBFMEVcXHUwRTBGXFx1MEUxMFxcdTBFMTFcXHUwRTEyXFx1MEUxM1xcdTBFMTRcXHUwRTE1XFx1MEUxNlxcdTBFMTdcXHUwRTE4XFx1MEUxOVxcdTBFMUFcXHUwRTFCXFx1MEUxQ1xcdTBFMURcXHUwRTFFXFx1MEUxRlxcdTBFMjBcXHUwRTIxXFx1MEUyMlxcdTBFMjNcXHUwRTI0XFx1MEUyNVxcdTBFMjZcXHUwRTI3XFx1MEUyOFxcdTBFMjlcXHUwRTJBXFx1MEUyQlxcdTBFMkNcXHUwRTJEXFx1MEUyRVxcdTBFMkZcXHUwRTMwXFx1MEUzMVxcdTBFMzJcXHUwRTMzXFx1MEUzNFxcdTBFMzVcXHUwRTM2XFx1MEUzN1xcdTBFMzhcXHUwRTM5XFx1MEUzQVxcdUZGRkRcXHVGRkZEXFx1RkZGRFxcdUZGRkRcXHUwRTNGXFx1MEU0MFxcdTBFNDFcXHUwRTQyXFx1MEU0M1xcdTBFNDRcXHUwRTQ1XFx1MEU0NlxcdTBFNDdcXHUwRTQ4XFx1MEU0OVxcdTBFNEFcXHUwRTRCXFx1MEU0Q1xcdTBFNERcXHUwRTRFXFx1MEU0RlxcdTBFNTBcXHUwRTUxXFx1MEU1MlxcdTBFNTNcXHUwRTU0XFx1MEU1NVxcdTBFNTZcXHUwRTU3XFx1MEU1OFxcdTBFNTlcXHUwRTVBXFx1MEU1QlxcdUZGRkRcXHVGRkZEXFx1RkZGRFxcdUZGRkRcIlxuICAgICAgfSxcbiAgICAgIFwiaWJtMTE2MlwiOiBcImNwMTE2MlwiLFxuICAgICAgXCJjc2libTExNjJcIjogXCJjcDExNjJcIixcbiAgICAgIFwiY3AxMTYzXCI6IHtcbiAgICAgICAgXCJ0eXBlXCI6IFwiX3NiY3NcIixcbiAgICAgICAgXCJjaGFyc1wiOiBcIlxceDgwXFx4ODFcXHg4MlxceDgzXFx4ODRcXHg4NVxceDg2XFx4ODdcXHg4OFxceDg5XFx4OEFcXHg4QlxceDhDXFx4OERcXHg4RVxceDhGXFx4OTBcXHg5MVxceDkyXFx4OTNcXHg5NFxceDk1XFx4OTZcXHg5N1xceDk4XFx4OTlcXHg5QVxceDlCXFx4OUNcXHg5RFxceDlFXFx4OUZcXHhBMFxceEExXFx4QTJcXHhBM1xcdTIwQUNcXHhBNVxceEE2XFx4QTdcXHUwMTUzXFx4QTlcXHhBQVxceEFCXFx4QUNcXHhBRFxceEFFXFx4QUZcXHhCMFxceEIxXFx4QjJcXHhCM1xcdTAxNzhcXHhCNVxceEI2XFx4QjdcXHUwMTUyXFx4QjlcXHhCQVxceEJCXFx4QkNcXHhCRFxceEJFXFx4QkZcXHhDMFxceEMxXFx4QzJcXHUwMTAyXFx4QzRcXHhDNVxceEM2XFx4QzdcXHhDOFxceEM5XFx4Q0FcXHhDQlxcdTAzMDBcXHhDRFxceENFXFx4Q0ZcXHUwMTEwXFx4RDFcXHUwMzA5XFx4RDNcXHhENFxcdTAxQTBcXHhENlxceEQ3XFx4RDhcXHhEOVxceERBXFx4REJcXHhEQ1xcdTAxQUZcXHUwMzAzXFx4REZcXHhFMFxceEUxXFx4RTJcXHUwMTAzXFx4RTRcXHhFNVxceEU2XFx4RTdcXHhFOFxceEU5XFx4RUFcXHhFQlxcdTAzMDFcXHhFRFxceEVFXFx4RUZcXHUwMTExXFx4RjFcXHUwMzIzXFx4RjNcXHhGNFxcdTAxQTFcXHhGNlxceEY3XFx4RjhcXHhGOVxceEZBXFx4RkJcXHhGQ1xcdTAxQjBcXHUyMEFCXFx4RkZcIlxuICAgICAgfSxcbiAgICAgIFwiaWJtMTE2M1wiOiBcImNwMTE2M1wiLFxuICAgICAgXCJjc2libTExNjNcIjogXCJjcDExNjNcIixcbiAgICAgIFwibWFjY3JvYXRpYW5cIjoge1xuICAgICAgICBcInR5cGVcIjogXCJfc2Jjc1wiLFxuICAgICAgICBcImNoYXJzXCI6IFwiXFx4QzRcXHhDNVxceEM3XFx4QzlcXHhEMVxceEQ2XFx4RENcXHhFMVxceEUwXFx4RTJcXHhFNFxceEUzXFx4RTVcXHhFN1xceEU5XFx4RThcXHhFQVxceEVCXFx4RURcXHhFQ1xceEVFXFx4RUZcXHhGMVxceEYzXFx4RjJcXHhGNFxceEY2XFx4RjVcXHhGQVxceEY5XFx4RkJcXHhGQ1xcdTIwMjBcXHhCMFxceEEyXFx4QTNcXHhBN1xcdTIwMjJcXHhCNlxceERGXFx4QUVcXHUwMTYwXFx1MjEyMlxceEI0XFx4QThcXHUyMjYwXFx1MDE3RFxceEQ4XFx1MjIxRVxceEIxXFx1MjI2NFxcdTIyNjVcXHUyMjA2XFx4QjVcXHUyMjAyXFx1MjIxMVxcdTIyMEZcXHUwMTYxXFx1MjIyQlxceEFBXFx4QkFcXHUyMTI2XFx1MDE3RVxceEY4XFx4QkZcXHhBMVxceEFDXFx1MjIxQVxcdTAxOTJcXHUyMjQ4XFx1MDEwNlxceEFCXFx1MDEwQ1xcdTIwMjZcXHhBMFxceEMwXFx4QzNcXHhENVxcdTAxNTJcXHUwMTUzXFx1MDExMFxcdTIwMTRcXHUyMDFDXFx1MjAxRFxcdTIwMThcXHUyMDE5XFx4RjdcXHUyNUNBXFx1RkZGRFxceEE5XFx1MjA0NFxceEE0XFx1MjAzOVxcdTIwM0FcXHhDNlxceEJCXFx1MjAxM1xceEI3XFx1MjAxQVxcdTIwMUVcXHUyMDMwXFx4QzJcXHUwMTA3XFx4QzFcXHUwMTBEXFx4QzhcXHhDRFxceENFXFx4Q0ZcXHhDQ1xceEQzXFx4RDRcXHUwMTExXFx4RDJcXHhEQVxceERCXFx4RDlcXHUwMTMxXFx1MDJDNlxcdTAyRENcXHhBRlxcdTAzQzBcXHhDQlxcdTAyREFcXHhCOFxceENBXFx4RTZcXHUwMkM3XCJcbiAgICAgIH0sXG4gICAgICBcIm1hY2N5cmlsbGljXCI6IHtcbiAgICAgICAgXCJ0eXBlXCI6IFwiX3NiY3NcIixcbiAgICAgICAgXCJjaGFyc1wiOiBcIlxcdTA0MTBcXHUwNDExXFx1MDQxMlxcdTA0MTNcXHUwNDE0XFx1MDQxNVxcdTA0MTZcXHUwNDE3XFx1MDQxOFxcdTA0MTlcXHUwNDFBXFx1MDQxQlxcdTA0MUNcXHUwNDFEXFx1MDQxRVxcdTA0MUZcXHUwNDIwXFx1MDQyMVxcdTA0MjJcXHUwNDIzXFx1MDQyNFxcdTA0MjVcXHUwNDI2XFx1MDQyN1xcdTA0MjhcXHUwNDI5XFx1MDQyQVxcdTA0MkJcXHUwNDJDXFx1MDQyRFxcdTA0MkVcXHUwNDJGXFx1MjAyMFxceEIwXFx4QTJcXHhBM1xceEE3XFx1MjAyMlxceEI2XFx1MDQwNlxceEFFXFx4QTlcXHUyMTIyXFx1MDQwMlxcdTA0NTJcXHUyMjYwXFx1MDQwM1xcdTA0NTNcXHUyMjFFXFx4QjFcXHUyMjY0XFx1MjI2NVxcdTA0NTZcXHhCNVxcdTIyMDJcXHUwNDA4XFx1MDQwNFxcdTA0NTRcXHUwNDA3XFx1MDQ1N1xcdTA0MDlcXHUwNDU5XFx1MDQwQVxcdTA0NUFcXHUwNDU4XFx1MDQwNVxceEFDXFx1MjIxQVxcdTAxOTJcXHUyMjQ4XFx1MjIwNlxceEFCXFx4QkJcXHUyMDI2XFx4QTBcXHUwNDBCXFx1MDQ1QlxcdTA0MENcXHUwNDVDXFx1MDQ1NVxcdTIwMTNcXHUyMDE0XFx1MjAxQ1xcdTIwMURcXHUyMDE4XFx1MjAxOVxceEY3XFx1MjAxRVxcdTA0MEVcXHUwNDVFXFx1MDQwRlxcdTA0NUZcXHUyMTE2XFx1MDQwMVxcdTA0NTFcXHUwNDRGXFx1MDQzMFxcdTA0MzFcXHUwNDMyXFx1MDQzM1xcdTA0MzRcXHUwNDM1XFx1MDQzNlxcdTA0MzdcXHUwNDM4XFx1MDQzOVxcdTA0M0FcXHUwNDNCXFx1MDQzQ1xcdTA0M0RcXHUwNDNFXFx1MDQzRlxcdTA0NDBcXHUwNDQxXFx1MDQ0MlxcdTA0NDNcXHUwNDQ0XFx1MDQ0NVxcdTA0NDZcXHUwNDQ3XFx1MDQ0OFxcdTA0NDlcXHUwNDRBXFx1MDQ0QlxcdTA0NENcXHUwNDREXFx1MDQ0RVxceEE0XCJcbiAgICAgIH0sXG4gICAgICBcIm1hY2dyZWVrXCI6IHtcbiAgICAgICAgXCJ0eXBlXCI6IFwiX3NiY3NcIixcbiAgICAgICAgXCJjaGFyc1wiOiBcIlxceEM0XFx4QjlcXHhCMlxceEM5XFx4QjNcXHhENlxceERDXFx1MDM4NVxceEUwXFx4RTJcXHhFNFxcdTAzODRcXHhBOFxceEU3XFx4RTlcXHhFOFxceEVBXFx4RUJcXHhBM1xcdTIxMjJcXHhFRVxceEVGXFx1MjAyMlxceEJEXFx1MjAzMFxceEY0XFx4RjZcXHhBNlxceEFEXFx4RjlcXHhGQlxceEZDXFx1MjAyMFxcdTAzOTNcXHUwMzk0XFx1MDM5OFxcdTAzOUJcXHUwMzlFXFx1MDNBMFxceERGXFx4QUVcXHhBOVxcdTAzQTNcXHUwM0FBXFx4QTdcXHUyMjYwXFx4QjBcXHUwMzg3XFx1MDM5MVxceEIxXFx1MjI2NFxcdTIyNjVcXHhBNVxcdTAzOTJcXHUwMzk1XFx1MDM5NlxcdTAzOTdcXHUwMzk5XFx1MDM5QVxcdTAzOUNcXHUwM0E2XFx1MDNBQlxcdTAzQThcXHUwM0E5XFx1MDNBQ1xcdTAzOURcXHhBQ1xcdTAzOUZcXHUwM0ExXFx1MjI0OFxcdTAzQTRcXHhBQlxceEJCXFx1MjAyNlxceEEwXFx1MDNBNVxcdTAzQTdcXHUwMzg2XFx1MDM4OFxcdTAxNTNcXHUyMDEzXFx1MjAxNVxcdTIwMUNcXHUyMDFEXFx1MjAxOFxcdTIwMTlcXHhGN1xcdTAzODlcXHUwMzhBXFx1MDM4Q1xcdTAzOEVcXHUwM0FEXFx1MDNBRVxcdTAzQUZcXHUwM0NDXFx1MDM4RlxcdTAzQ0RcXHUwM0IxXFx1MDNCMlxcdTAzQzhcXHUwM0I0XFx1MDNCNVxcdTAzQzZcXHUwM0IzXFx1MDNCN1xcdTAzQjlcXHUwM0JFXFx1MDNCQVxcdTAzQkJcXHUwM0JDXFx1MDNCRFxcdTAzQkZcXHUwM0MwXFx1MDNDRVxcdTAzQzFcXHUwM0MzXFx1MDNDNFxcdTAzQjhcXHUwM0M5XFx1MDNDMlxcdTAzQzdcXHUwM0M1XFx1MDNCNlxcdTAzQ0FcXHUwM0NCXFx1MDM5MFxcdTAzQjBcXHVGRkZEXCJcbiAgICAgIH0sXG4gICAgICBcIm1hY2ljZWxhbmRcIjoge1xuICAgICAgICBcInR5cGVcIjogXCJfc2Jjc1wiLFxuICAgICAgICBcImNoYXJzXCI6IFwiXFx4QzRcXHhDNVxceEM3XFx4QzlcXHhEMVxceEQ2XFx4RENcXHhFMVxceEUwXFx4RTJcXHhFNFxceEUzXFx4RTVcXHhFN1xceEU5XFx4RThcXHhFQVxceEVCXFx4RURcXHhFQ1xceEVFXFx4RUZcXHhGMVxceEYzXFx4RjJcXHhGNFxceEY2XFx4RjVcXHhGQVxceEY5XFx4RkJcXHhGQ1xceEREXFx4QjBcXHhBMlxceEEzXFx4QTdcXHUyMDIyXFx4QjZcXHhERlxceEFFXFx4QTlcXHUyMTIyXFx4QjRcXHhBOFxcdTIyNjBcXHhDNlxceEQ4XFx1MjIxRVxceEIxXFx1MjI2NFxcdTIyNjVcXHhBNVxceEI1XFx1MjIwMlxcdTIyMTFcXHUyMjBGXFx1MDNDMFxcdTIyMkJcXHhBQVxceEJBXFx1MjEyNlxceEU2XFx4RjhcXHhCRlxceEExXFx4QUNcXHUyMjFBXFx1MDE5MlxcdTIyNDhcXHUyMjA2XFx4QUJcXHhCQlxcdTIwMjZcXHhBMFxceEMwXFx4QzNcXHhENVxcdTAxNTJcXHUwMTUzXFx1MjAxM1xcdTIwMTRcXHUyMDFDXFx1MjAxRFxcdTIwMThcXHUyMDE5XFx4RjdcXHUyNUNBXFx4RkZcXHUwMTc4XFx1MjA0NFxceEE0XFx4RDBcXHhGMFxceERFXFx4RkVcXHhGRFxceEI3XFx1MjAxQVxcdTIwMUVcXHUyMDMwXFx4QzJcXHhDQVxceEMxXFx4Q0JcXHhDOFxceENEXFx4Q0VcXHhDRlxceENDXFx4RDNcXHhENFxcdUZGRkRcXHhEMlxceERBXFx4REJcXHhEOVxcdTAxMzFcXHUwMkM2XFx1MDJEQ1xceEFGXFx1MDJEOFxcdTAyRDlcXHUwMkRBXFx4QjhcXHUwMkREXFx1MDJEQlxcdTAyQzdcIlxuICAgICAgfSxcbiAgICAgIFwibWFjcm9tYW5cIjoge1xuICAgICAgICBcInR5cGVcIjogXCJfc2Jjc1wiLFxuICAgICAgICBcImNoYXJzXCI6IFwiXFx4QzRcXHhDNVxceEM3XFx4QzlcXHhEMVxceEQ2XFx4RENcXHhFMVxceEUwXFx4RTJcXHhFNFxceEUzXFx4RTVcXHhFN1xceEU5XFx4RThcXHhFQVxceEVCXFx4RURcXHhFQ1xceEVFXFx4RUZcXHhGMVxceEYzXFx4RjJcXHhGNFxceEY2XFx4RjVcXHhGQVxceEY5XFx4RkJcXHhGQ1xcdTIwMjBcXHhCMFxceEEyXFx4QTNcXHhBN1xcdTIwMjJcXHhCNlxceERGXFx4QUVcXHhBOVxcdTIxMjJcXHhCNFxceEE4XFx1MjI2MFxceEM2XFx4RDhcXHUyMjFFXFx4QjFcXHUyMjY0XFx1MjI2NVxceEE1XFx4QjVcXHUyMjAyXFx1MjIxMVxcdTIyMEZcXHUwM0MwXFx1MjIyQlxceEFBXFx4QkFcXHUyMTI2XFx4RTZcXHhGOFxceEJGXFx4QTFcXHhBQ1xcdTIyMUFcXHUwMTkyXFx1MjI0OFxcdTIyMDZcXHhBQlxceEJCXFx1MjAyNlxceEEwXFx4QzBcXHhDM1xceEQ1XFx1MDE1MlxcdTAxNTNcXHUyMDEzXFx1MjAxNFxcdTIwMUNcXHUyMDFEXFx1MjAxOFxcdTIwMTlcXHhGN1xcdTI1Q0FcXHhGRlxcdTAxNzhcXHUyMDQ0XFx4QTRcXHUyMDM5XFx1MjAzQVxcdUZCMDFcXHVGQjAyXFx1MjAyMVxceEI3XFx1MjAxQVxcdTIwMUVcXHUyMDMwXFx4QzJcXHhDQVxceEMxXFx4Q0JcXHhDOFxceENEXFx4Q0VcXHhDRlxceENDXFx4RDNcXHhENFxcdUZGRkRcXHhEMlxceERBXFx4REJcXHhEOVxcdTAxMzFcXHUwMkM2XFx1MDJEQ1xceEFGXFx1MDJEOFxcdTAyRDlcXHUwMkRBXFx4QjhcXHUwMkREXFx1MDJEQlxcdTAyQzdcIlxuICAgICAgfSxcbiAgICAgIFwibWFjcm9tYW5pYVwiOiB7XG4gICAgICAgIFwidHlwZVwiOiBcIl9zYmNzXCIsXG4gICAgICAgIFwiY2hhcnNcIjogXCJcXHhDNFxceEM1XFx4QzdcXHhDOVxceEQxXFx4RDZcXHhEQ1xceEUxXFx4RTBcXHhFMlxceEU0XFx4RTNcXHhFNVxceEU3XFx4RTlcXHhFOFxceEVBXFx4RUJcXHhFRFxceEVDXFx4RUVcXHhFRlxceEYxXFx4RjNcXHhGMlxceEY0XFx4RjZcXHhGNVxceEZBXFx4RjlcXHhGQlxceEZDXFx1MjAyMFxceEIwXFx4QTJcXHhBM1xceEE3XFx1MjAyMlxceEI2XFx4REZcXHhBRVxceEE5XFx1MjEyMlxceEI0XFx4QThcXHUyMjYwXFx1MDEwMlxcdTAxNUVcXHUyMjFFXFx4QjFcXHUyMjY0XFx1MjI2NVxceEE1XFx4QjVcXHUyMjAyXFx1MjIxMVxcdTIyMEZcXHUwM0MwXFx1MjIyQlxceEFBXFx4QkFcXHUyMTI2XFx1MDEwM1xcdTAxNUZcXHhCRlxceEExXFx4QUNcXHUyMjFBXFx1MDE5MlxcdTIyNDhcXHUyMjA2XFx4QUJcXHhCQlxcdTIwMjZcXHhBMFxceEMwXFx4QzNcXHhENVxcdTAxNTJcXHUwMTUzXFx1MjAxM1xcdTIwMTRcXHUyMDFDXFx1MjAxRFxcdTIwMThcXHUyMDE5XFx4RjdcXHUyNUNBXFx4RkZcXHUwMTc4XFx1MjA0NFxceEE0XFx1MjAzOVxcdTIwM0FcXHUwMTYyXFx1MDE2M1xcdTIwMjFcXHhCN1xcdTIwMUFcXHUyMDFFXFx1MjAzMFxceEMyXFx4Q0FcXHhDMVxceENCXFx4QzhcXHhDRFxceENFXFx4Q0ZcXHhDQ1xceEQzXFx4RDRcXHVGRkZEXFx4RDJcXHhEQVxceERCXFx4RDlcXHUwMTMxXFx1MDJDNlxcdTAyRENcXHhBRlxcdTAyRDhcXHUwMkQ5XFx1MDJEQVxceEI4XFx1MDJERFxcdTAyREJcXHUwMkM3XCJcbiAgICAgIH0sXG4gICAgICBcIm1hY3RoYWlcIjoge1xuICAgICAgICBcInR5cGVcIjogXCJfc2Jjc1wiLFxuICAgICAgICBcImNoYXJzXCI6IFwiXFx4QUJcXHhCQlxcdTIwMjZcXHVGODhDXFx1Rjg4RlxcdUY4OTJcXHVGODk1XFx1Rjg5OFxcdUY4OEJcXHVGODhFXFx1Rjg5MVxcdUY4OTRcXHVGODk3XFx1MjAxQ1xcdTIwMURcXHVGODk5XFx1RkZGRFxcdTIwMjJcXHVGODg0XFx1Rjg4OVxcdUY4ODVcXHVGODg2XFx1Rjg4N1xcdUY4ODhcXHVGODhBXFx1Rjg4RFxcdUY4OTBcXHVGODkzXFx1Rjg5NlxcdTIwMThcXHUyMDE5XFx1RkZGRFxceEEwXFx1MEUwMVxcdTBFMDJcXHUwRTAzXFx1MEUwNFxcdTBFMDVcXHUwRTA2XFx1MEUwN1xcdTBFMDhcXHUwRTA5XFx1MEUwQVxcdTBFMEJcXHUwRTBDXFx1MEUwRFxcdTBFMEVcXHUwRTBGXFx1MEUxMFxcdTBFMTFcXHUwRTEyXFx1MEUxM1xcdTBFMTRcXHUwRTE1XFx1MEUxNlxcdTBFMTdcXHUwRTE4XFx1MEUxOVxcdTBFMUFcXHUwRTFCXFx1MEUxQ1xcdTBFMURcXHUwRTFFXFx1MEUxRlxcdTBFMjBcXHUwRTIxXFx1MEUyMlxcdTBFMjNcXHUwRTI0XFx1MEUyNVxcdTBFMjZcXHUwRTI3XFx1MEUyOFxcdTBFMjlcXHUwRTJBXFx1MEUyQlxcdTBFMkNcXHUwRTJEXFx1MEUyRVxcdTBFMkZcXHUwRTMwXFx1MEUzMVxcdTBFMzJcXHUwRTMzXFx1MEUzNFxcdTBFMzVcXHUwRTM2XFx1MEUzN1xcdTBFMzhcXHUwRTM5XFx1MEUzQVxcdUZFRkZcXHUyMDBCXFx1MjAxM1xcdTIwMTRcXHUwRTNGXFx1MEU0MFxcdTBFNDFcXHUwRTQyXFx1MEU0M1xcdTBFNDRcXHUwRTQ1XFx1MEU0NlxcdTBFNDdcXHUwRTQ4XFx1MEU0OVxcdTBFNEFcXHUwRTRCXFx1MEU0Q1xcdTBFNERcXHUyMTIyXFx1MEU0RlxcdTBFNTBcXHUwRTUxXFx1MEU1MlxcdTBFNTNcXHUwRTU0XFx1MEU1NVxcdTBFNTZcXHUwRTU3XFx1MEU1OFxcdTBFNTlcXHhBRVxceEE5XFx1RkZGRFxcdUZGRkRcXHVGRkZEXFx1RkZGRFwiXG4gICAgICB9LFxuICAgICAgXCJtYWN0dXJraXNoXCI6IHtcbiAgICAgICAgXCJ0eXBlXCI6IFwiX3NiY3NcIixcbiAgICAgICAgXCJjaGFyc1wiOiBcIlxceEM0XFx4QzVcXHhDN1xceEM5XFx4RDFcXHhENlxceERDXFx4RTFcXHhFMFxceEUyXFx4RTRcXHhFM1xceEU1XFx4RTdcXHhFOVxceEU4XFx4RUFcXHhFQlxceEVEXFx4RUNcXHhFRVxceEVGXFx4RjFcXHhGM1xceEYyXFx4RjRcXHhGNlxceEY1XFx4RkFcXHhGOVxceEZCXFx4RkNcXHUyMDIwXFx4QjBcXHhBMlxceEEzXFx4QTdcXHUyMDIyXFx4QjZcXHhERlxceEFFXFx4QTlcXHUyMTIyXFx4QjRcXHhBOFxcdTIyNjBcXHhDNlxceEQ4XFx1MjIxRVxceEIxXFx1MjI2NFxcdTIyNjVcXHhBNVxceEI1XFx1MjIwMlxcdTIyMTFcXHUyMjBGXFx1MDNDMFxcdTIyMkJcXHhBQVxceEJBXFx1MjEyNlxceEU2XFx4RjhcXHhCRlxceEExXFx4QUNcXHUyMjFBXFx1MDE5MlxcdTIyNDhcXHUyMjA2XFx4QUJcXHhCQlxcdTIwMjZcXHhBMFxceEMwXFx4QzNcXHhENVxcdTAxNTJcXHUwMTUzXFx1MjAxM1xcdTIwMTRcXHUyMDFDXFx1MjAxRFxcdTIwMThcXHUyMDE5XFx4RjdcXHUyNUNBXFx4RkZcXHUwMTc4XFx1MDExRVxcdTAxMUZcXHUwMTMwXFx1MDEzMVxcdTAxNUVcXHUwMTVGXFx1MjAyMVxceEI3XFx1MjAxQVxcdTIwMUVcXHUyMDMwXFx4QzJcXHhDQVxceEMxXFx4Q0JcXHhDOFxceENEXFx4Q0VcXHhDRlxceENDXFx4RDNcXHhENFxcdUZGRkRcXHhEMlxceERBXFx4REJcXHhEOVxcdUZGRkRcXHUwMkM2XFx1MDJEQ1xceEFGXFx1MDJEOFxcdTAyRDlcXHUwMkRBXFx4QjhcXHUwMkREXFx1MDJEQlxcdTAyQzdcIlxuICAgICAgfSxcbiAgICAgIFwibWFjdWtyYWluZVwiOiB7XG4gICAgICAgIFwidHlwZVwiOiBcIl9zYmNzXCIsXG4gICAgICAgIFwiY2hhcnNcIjogXCJcXHUwNDEwXFx1MDQxMVxcdTA0MTJcXHUwNDEzXFx1MDQxNFxcdTA0MTVcXHUwNDE2XFx1MDQxN1xcdTA0MThcXHUwNDE5XFx1MDQxQVxcdTA0MUJcXHUwNDFDXFx1MDQxRFxcdTA0MUVcXHUwNDFGXFx1MDQyMFxcdTA0MjFcXHUwNDIyXFx1MDQyM1xcdTA0MjRcXHUwNDI1XFx1MDQyNlxcdTA0MjdcXHUwNDI4XFx1MDQyOVxcdTA0MkFcXHUwNDJCXFx1MDQyQ1xcdTA0MkRcXHUwNDJFXFx1MDQyRlxcdTIwMjBcXHhCMFxcdTA0OTBcXHhBM1xceEE3XFx1MjAyMlxceEI2XFx1MDQwNlxceEFFXFx4QTlcXHUyMTIyXFx1MDQwMlxcdTA0NTJcXHUyMjYwXFx1MDQwM1xcdTA0NTNcXHUyMjFFXFx4QjFcXHUyMjY0XFx1MjI2NVxcdTA0NTZcXHhCNVxcdTA0OTFcXHUwNDA4XFx1MDQwNFxcdTA0NTRcXHUwNDA3XFx1MDQ1N1xcdTA0MDlcXHUwNDU5XFx1MDQwQVxcdTA0NUFcXHUwNDU4XFx1MDQwNVxceEFDXFx1MjIxQVxcdTAxOTJcXHUyMjQ4XFx1MjIwNlxceEFCXFx4QkJcXHUyMDI2XFx4QTBcXHUwNDBCXFx1MDQ1QlxcdTA0MENcXHUwNDVDXFx1MDQ1NVxcdTIwMTNcXHUyMDE0XFx1MjAxQ1xcdTIwMURcXHUyMDE4XFx1MjAxOVxceEY3XFx1MjAxRVxcdTA0MEVcXHUwNDVFXFx1MDQwRlxcdTA0NUZcXHUyMTE2XFx1MDQwMVxcdTA0NTFcXHUwNDRGXFx1MDQzMFxcdTA0MzFcXHUwNDMyXFx1MDQzM1xcdTA0MzRcXHUwNDM1XFx1MDQzNlxcdTA0MzdcXHUwNDM4XFx1MDQzOVxcdTA0M0FcXHUwNDNCXFx1MDQzQ1xcdTA0M0RcXHUwNDNFXFx1MDQzRlxcdTA0NDBcXHUwNDQxXFx1MDQ0MlxcdTA0NDNcXHUwNDQ0XFx1MDQ0NVxcdTA0NDZcXHUwNDQ3XFx1MDQ0OFxcdTA0NDlcXHUwNDRBXFx1MDQ0QlxcdTA0NENcXHUwNDREXFx1MDQ0RVxceEE0XCJcbiAgICAgIH0sXG4gICAgICBcImtvaThyXCI6IHtcbiAgICAgICAgXCJ0eXBlXCI6IFwiX3NiY3NcIixcbiAgICAgICAgXCJjaGFyc1wiOiBcIlxcdTI1MDBcXHUyNTAyXFx1MjUwQ1xcdTI1MTBcXHUyNTE0XFx1MjUxOFxcdTI1MUNcXHUyNTI0XFx1MjUyQ1xcdTI1MzRcXHUyNTNDXFx1MjU4MFxcdTI1ODRcXHUyNTg4XFx1MjU4Q1xcdTI1OTBcXHUyNTkxXFx1MjU5MlxcdTI1OTNcXHUyMzIwXFx1MjVBMFxcdTIyMTlcXHUyMjFBXFx1MjI0OFxcdTIyNjRcXHUyMjY1XFx4QTBcXHUyMzIxXFx4QjBcXHhCMlxceEI3XFx4RjdcXHUyNTUwXFx1MjU1MVxcdTI1NTJcXHUwNDUxXFx1MjU1M1xcdTI1NTRcXHUyNTU1XFx1MjU1NlxcdTI1NTdcXHUyNTU4XFx1MjU1OVxcdTI1NUFcXHUyNTVCXFx1MjU1Q1xcdTI1NURcXHUyNTVFXFx1MjU1RlxcdTI1NjBcXHUyNTYxXFx1MDQwMVxcdTI1NjJcXHUyNTYzXFx1MjU2NFxcdTI1NjVcXHUyNTY2XFx1MjU2N1xcdTI1NjhcXHUyNTY5XFx1MjU2QVxcdTI1NkJcXHUyNTZDXFx4QTlcXHUwNDRFXFx1MDQzMFxcdTA0MzFcXHUwNDQ2XFx1MDQzNFxcdTA0MzVcXHUwNDQ0XFx1MDQzM1xcdTA0NDVcXHUwNDM4XFx1MDQzOVxcdTA0M0FcXHUwNDNCXFx1MDQzQ1xcdTA0M0RcXHUwNDNFXFx1MDQzRlxcdTA0NEZcXHUwNDQwXFx1MDQ0MVxcdTA0NDJcXHUwNDQzXFx1MDQzNlxcdTA0MzJcXHUwNDRDXFx1MDQ0QlxcdTA0MzdcXHUwNDQ4XFx1MDQ0RFxcdTA0NDlcXHUwNDQ3XFx1MDQ0QVxcdTA0MkVcXHUwNDEwXFx1MDQxMVxcdTA0MjZcXHUwNDE0XFx1MDQxNVxcdTA0MjRcXHUwNDEzXFx1MDQyNVxcdTA0MThcXHUwNDE5XFx1MDQxQVxcdTA0MUJcXHUwNDFDXFx1MDQxRFxcdTA0MUVcXHUwNDFGXFx1MDQyRlxcdTA0MjBcXHUwNDIxXFx1MDQyMlxcdTA0MjNcXHUwNDE2XFx1MDQxMlxcdTA0MkNcXHUwNDJCXFx1MDQxN1xcdTA0MjhcXHUwNDJEXFx1MDQyOVxcdTA0MjdcXHUwNDJBXCJcbiAgICAgIH0sXG4gICAgICBcImtvaTh1XCI6IHtcbiAgICAgICAgXCJ0eXBlXCI6IFwiX3NiY3NcIixcbiAgICAgICAgXCJjaGFyc1wiOiBcIlxcdTI1MDBcXHUyNTAyXFx1MjUwQ1xcdTI1MTBcXHUyNTE0XFx1MjUxOFxcdTI1MUNcXHUyNTI0XFx1MjUyQ1xcdTI1MzRcXHUyNTNDXFx1MjU4MFxcdTI1ODRcXHUyNTg4XFx1MjU4Q1xcdTI1OTBcXHUyNTkxXFx1MjU5MlxcdTI1OTNcXHUyMzIwXFx1MjVBMFxcdTIyMTlcXHUyMjFBXFx1MjI0OFxcdTIyNjRcXHUyMjY1XFx4QTBcXHUyMzIxXFx4QjBcXHhCMlxceEI3XFx4RjdcXHUyNTUwXFx1MjU1MVxcdTI1NTJcXHUwNDUxXFx1MDQ1NFxcdTI1NTRcXHUwNDU2XFx1MDQ1N1xcdTI1NTdcXHUyNTU4XFx1MjU1OVxcdTI1NUFcXHUyNTVCXFx1MDQ5MVxcdTI1NURcXHUyNTVFXFx1MjU1RlxcdTI1NjBcXHUyNTYxXFx1MDQwMVxcdTA0MDRcXHUyNTYzXFx1MDQwNlxcdTA0MDdcXHUyNTY2XFx1MjU2N1xcdTI1NjhcXHUyNTY5XFx1MjU2QVxcdTA0OTBcXHUyNTZDXFx4QTlcXHUwNDRFXFx1MDQzMFxcdTA0MzFcXHUwNDQ2XFx1MDQzNFxcdTA0MzVcXHUwNDQ0XFx1MDQzM1xcdTA0NDVcXHUwNDM4XFx1MDQzOVxcdTA0M0FcXHUwNDNCXFx1MDQzQ1xcdTA0M0RcXHUwNDNFXFx1MDQzRlxcdTA0NEZcXHUwNDQwXFx1MDQ0MVxcdTA0NDJcXHUwNDQzXFx1MDQzNlxcdTA0MzJcXHUwNDRDXFx1MDQ0QlxcdTA0MzdcXHUwNDQ4XFx1MDQ0RFxcdTA0NDlcXHUwNDQ3XFx1MDQ0QVxcdTA0MkVcXHUwNDEwXFx1MDQxMVxcdTA0MjZcXHUwNDE0XFx1MDQxNVxcdTA0MjRcXHUwNDEzXFx1MDQyNVxcdTA0MThcXHUwNDE5XFx1MDQxQVxcdTA0MUJcXHUwNDFDXFx1MDQxRFxcdTA0MUVcXHUwNDFGXFx1MDQyRlxcdTA0MjBcXHUwNDIxXFx1MDQyMlxcdTA0MjNcXHUwNDE2XFx1MDQxMlxcdTA0MkNcXHUwNDJCXFx1MDQxN1xcdTA0MjhcXHUwNDJEXFx1MDQyOVxcdTA0MjdcXHUwNDJBXCJcbiAgICAgIH0sXG4gICAgICBcImtvaThydVwiOiB7XG4gICAgICAgIFwidHlwZVwiOiBcIl9zYmNzXCIsXG4gICAgICAgIFwiY2hhcnNcIjogXCJcXHUyNTAwXFx1MjUwMlxcdTI1MENcXHUyNTEwXFx1MjUxNFxcdTI1MThcXHUyNTFDXFx1MjUyNFxcdTI1MkNcXHUyNTM0XFx1MjUzQ1xcdTI1ODBcXHUyNTg0XFx1MjU4OFxcdTI1OENcXHUyNTkwXFx1MjU5MVxcdTI1OTJcXHUyNTkzXFx1MjMyMFxcdTI1QTBcXHUyMjE5XFx1MjIxQVxcdTIyNDhcXHUyMjY0XFx1MjI2NVxceEEwXFx1MjMyMVxceEIwXFx4QjJcXHhCN1xceEY3XFx1MjU1MFxcdTI1NTFcXHUyNTUyXFx1MDQ1MVxcdTA0NTRcXHUyNTU0XFx1MDQ1NlxcdTA0NTdcXHUyNTU3XFx1MjU1OFxcdTI1NTlcXHUyNTVBXFx1MjU1QlxcdTA0OTFcXHUwNDVFXFx1MjU1RVxcdTI1NUZcXHUyNTYwXFx1MjU2MVxcdTA0MDFcXHUwNDA0XFx1MjU2M1xcdTA0MDZcXHUwNDA3XFx1MjU2NlxcdTI1NjdcXHUyNTY4XFx1MjU2OVxcdTI1NkFcXHUwNDkwXFx1MDQwRVxceEE5XFx1MDQ0RVxcdTA0MzBcXHUwNDMxXFx1MDQ0NlxcdTA0MzRcXHUwNDM1XFx1MDQ0NFxcdTA0MzNcXHUwNDQ1XFx1MDQzOFxcdTA0MzlcXHUwNDNBXFx1MDQzQlxcdTA0M0NcXHUwNDNEXFx1MDQzRVxcdTA0M0ZcXHUwNDRGXFx1MDQ0MFxcdTA0NDFcXHUwNDQyXFx1MDQ0M1xcdTA0MzZcXHUwNDMyXFx1MDQ0Q1xcdTA0NEJcXHUwNDM3XFx1MDQ0OFxcdTA0NERcXHUwNDQ5XFx1MDQ0N1xcdTA0NEFcXHUwNDJFXFx1MDQxMFxcdTA0MTFcXHUwNDI2XFx1MDQxNFxcdTA0MTVcXHUwNDI0XFx1MDQxM1xcdTA0MjVcXHUwNDE4XFx1MDQxOVxcdTA0MUFcXHUwNDFCXFx1MDQxQ1xcdTA0MURcXHUwNDFFXFx1MDQxRlxcdTA0MkZcXHUwNDIwXFx1MDQyMVxcdTA0MjJcXHUwNDIzXFx1MDQxNlxcdTA0MTJcXHUwNDJDXFx1MDQyQlxcdTA0MTdcXHUwNDI4XFx1MDQyRFxcdTA0MjlcXHUwNDI3XFx1MDQyQVwiXG4gICAgICB9LFxuICAgICAgXCJrb2k4dFwiOiB7XG4gICAgICAgIFwidHlwZVwiOiBcIl9zYmNzXCIsXG4gICAgICAgIFwiY2hhcnNcIjogXCJcXHUwNDlCXFx1MDQ5M1xcdTIwMUFcXHUwNDkyXFx1MjAxRVxcdTIwMjZcXHUyMDIwXFx1MjAyMVxcdUZGRkRcXHUyMDMwXFx1MDRCM1xcdTIwMzlcXHUwNEIyXFx1MDRCN1xcdTA0QjZcXHVGRkZEXFx1MDQ5QVxcdTIwMThcXHUyMDE5XFx1MjAxQ1xcdTIwMURcXHUyMDIyXFx1MjAxM1xcdTIwMTRcXHVGRkZEXFx1MjEyMlxcdUZGRkRcXHUyMDNBXFx1RkZGRFxcdUZGRkRcXHVGRkZEXFx1RkZGRFxcdUZGRkRcXHUwNEVGXFx1MDRFRVxcdTA0NTFcXHhBNFxcdTA0RTNcXHhBNlxceEE3XFx1RkZGRFxcdUZGRkRcXHVGRkZEXFx4QUJcXHhBQ1xceEFEXFx4QUVcXHVGRkZEXFx4QjBcXHhCMVxceEIyXFx1MDQwMVxcdUZGRkRcXHUwNEUyXFx4QjZcXHhCN1xcdUZGRkRcXHUyMTE2XFx1RkZGRFxceEJCXFx1RkZGRFxcdUZGRkRcXHVGRkZEXFx4QTlcXHUwNDRFXFx1MDQzMFxcdTA0MzFcXHUwNDQ2XFx1MDQzNFxcdTA0MzVcXHUwNDQ0XFx1MDQzM1xcdTA0NDVcXHUwNDM4XFx1MDQzOVxcdTA0M0FcXHUwNDNCXFx1MDQzQ1xcdTA0M0RcXHUwNDNFXFx1MDQzRlxcdTA0NEZcXHUwNDQwXFx1MDQ0MVxcdTA0NDJcXHUwNDQzXFx1MDQzNlxcdTA0MzJcXHUwNDRDXFx1MDQ0QlxcdTA0MzdcXHUwNDQ4XFx1MDQ0RFxcdTA0NDlcXHUwNDQ3XFx1MDQ0QVxcdTA0MkVcXHUwNDEwXFx1MDQxMVxcdTA0MjZcXHUwNDE0XFx1MDQxNVxcdTA0MjRcXHUwNDEzXFx1MDQyNVxcdTA0MThcXHUwNDE5XFx1MDQxQVxcdTA0MUJcXHUwNDFDXFx1MDQxRFxcdTA0MUVcXHUwNDFGXFx1MDQyRlxcdTA0MjBcXHUwNDIxXFx1MDQyMlxcdTA0MjNcXHUwNDE2XFx1MDQxMlxcdTA0MkNcXHUwNDJCXFx1MDQxN1xcdTA0MjhcXHUwNDJEXFx1MDQyOVxcdTA0MjdcXHUwNDJBXCJcbiAgICAgIH0sXG4gICAgICBcImFybXNjaWk4XCI6IHtcbiAgICAgICAgXCJ0eXBlXCI6IFwiX3NiY3NcIixcbiAgICAgICAgXCJjaGFyc1wiOiBcIlxceDgwXFx4ODFcXHg4MlxceDgzXFx4ODRcXHg4NVxceDg2XFx4ODdcXHg4OFxceDg5XFx4OEFcXHg4QlxceDhDXFx4OERcXHg4RVxceDhGXFx4OTBcXHg5MVxceDkyXFx4OTNcXHg5NFxceDk1XFx4OTZcXHg5N1xceDk4XFx4OTlcXHg5QVxceDlCXFx4OUNcXHg5RFxceDlFXFx4OUZcXHhBMFxcdUZGRkRcXHUwNTg3XFx1MDU4OSkoXFx4QkJcXHhBQlxcdTIwMTQuXFx1MDU1RCwtXFx1MDU4QVxcdTIwMjZcXHUwNTVDXFx1MDU1QlxcdTA1NUVcXHUwNTMxXFx1MDU2MVxcdTA1MzJcXHUwNTYyXFx1MDUzM1xcdTA1NjNcXHUwNTM0XFx1MDU2NFxcdTA1MzVcXHUwNTY1XFx1MDUzNlxcdTA1NjZcXHUwNTM3XFx1MDU2N1xcdTA1MzhcXHUwNTY4XFx1MDUzOVxcdTA1NjlcXHUwNTNBXFx1MDU2QVxcdTA1M0JcXHUwNTZCXFx1MDUzQ1xcdTA1NkNcXHUwNTNEXFx1MDU2RFxcdTA1M0VcXHUwNTZFXFx1MDUzRlxcdTA1NkZcXHUwNTQwXFx1MDU3MFxcdTA1NDFcXHUwNTcxXFx1MDU0MlxcdTA1NzJcXHUwNTQzXFx1MDU3M1xcdTA1NDRcXHUwNTc0XFx1MDU0NVxcdTA1NzVcXHUwNTQ2XFx1MDU3NlxcdTA1NDdcXHUwNTc3XFx1MDU0OFxcdTA1NzhcXHUwNTQ5XFx1MDU3OVxcdTA1NEFcXHUwNTdBXFx1MDU0QlxcdTA1N0JcXHUwNTRDXFx1MDU3Q1xcdTA1NERcXHUwNTdEXFx1MDU0RVxcdTA1N0VcXHUwNTRGXFx1MDU3RlxcdTA1NTBcXHUwNTgwXFx1MDU1MVxcdTA1ODFcXHUwNTUyXFx1MDU4MlxcdTA1NTNcXHUwNTgzXFx1MDU1NFxcdTA1ODRcXHUwNTU1XFx1MDU4NVxcdTA1NTZcXHUwNTg2XFx1MDU1QVxcdUZGRkRcIlxuICAgICAgfSxcbiAgICAgIFwicmsxMDQ4XCI6IHtcbiAgICAgICAgXCJ0eXBlXCI6IFwiX3NiY3NcIixcbiAgICAgICAgXCJjaGFyc1wiOiBcIlxcdTA0MDJcXHUwNDAzXFx1MjAxQVxcdTA0NTNcXHUyMDFFXFx1MjAyNlxcdTIwMjBcXHUyMDIxXFx1MjBBQ1xcdTIwMzBcXHUwNDA5XFx1MjAzOVxcdTA0MEFcXHUwNDlBXFx1MDRCQVxcdTA0MEZcXHUwNDUyXFx1MjAxOFxcdTIwMTlcXHUyMDFDXFx1MjAxRFxcdTIwMjJcXHUyMDEzXFx1MjAxNFxcdUZGRkRcXHUyMTIyXFx1MDQ1OVxcdTIwM0FcXHUwNDVBXFx1MDQ5QlxcdTA0QkJcXHUwNDVGXFx4QTBcXHUwNEIwXFx1MDRCMVxcdTA0RDhcXHhBNFxcdTA0RThcXHhBNlxceEE3XFx1MDQwMVxceEE5XFx1MDQ5MlxceEFCXFx4QUNcXHhBRFxceEFFXFx1MDRBRVxceEIwXFx4QjFcXHUwNDA2XFx1MDQ1NlxcdTA0RTlcXHhCNVxceEI2XFx4QjdcXHUwNDUxXFx1MjExNlxcdTA0OTNcXHhCQlxcdTA0RDlcXHUwNEEyXFx1MDRBM1xcdTA0QUZcXHUwNDEwXFx1MDQxMVxcdTA0MTJcXHUwNDEzXFx1MDQxNFxcdTA0MTVcXHUwNDE2XFx1MDQxN1xcdTA0MThcXHUwNDE5XFx1MDQxQVxcdTA0MUJcXHUwNDFDXFx1MDQxRFxcdTA0MUVcXHUwNDFGXFx1MDQyMFxcdTA0MjFcXHUwNDIyXFx1MDQyM1xcdTA0MjRcXHUwNDI1XFx1MDQyNlxcdTA0MjdcXHUwNDI4XFx1MDQyOVxcdTA0MkFcXHUwNDJCXFx1MDQyQ1xcdTA0MkRcXHUwNDJFXFx1MDQyRlxcdTA0MzBcXHUwNDMxXFx1MDQzMlxcdTA0MzNcXHUwNDM0XFx1MDQzNVxcdTA0MzZcXHUwNDM3XFx1MDQzOFxcdTA0MzlcXHUwNDNBXFx1MDQzQlxcdTA0M0NcXHUwNDNEXFx1MDQzRVxcdTA0M0ZcXHUwNDQwXFx1MDQ0MVxcdTA0NDJcXHUwNDQzXFx1MDQ0NFxcdTA0NDVcXHUwNDQ2XFx1MDQ0N1xcdTA0NDhcXHUwNDQ5XFx1MDQ0QVxcdTA0NEJcXHUwNDRDXFx1MDQ0RFxcdTA0NEVcXHUwNDRGXCJcbiAgICAgIH0sXG4gICAgICBcInRjdm5cIjoge1xuICAgICAgICBcInR5cGVcIjogXCJfc2Jjc1wiLFxuICAgICAgICBcImNoYXJzXCI6IFwiXFwwXFx4REFcXHUxRUU0XHUwMDAzXFx1MUVFQVxcdTFFRUNcXHUxRUVFXFx4MDdcXGJcdFxcblxcdlxcZlxcclx1MDAwRVx1MDAwRlx1MDAxMFxcdTFFRThcXHUxRUYwXFx1MUVGMlxcdTFFRjZcXHUxRUY4XFx4RERcXHUxRUY0XHUwMDE4XHUwMDE5XHUwMDFBXFx4MUJcdTAwMUNcdTAwMURcdTAwMUVcdTAwMUYgIVxcXCIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXFxcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9flxceDdGXFx4QzBcXHUxRUEyXFx4QzNcXHhDMVxcdTFFQTBcXHUxRUI2XFx1MUVBQ1xceEM4XFx1MUVCQVxcdTFFQkNcXHhDOVxcdTFFQjhcXHUxRUM2XFx4Q0NcXHUxRUM4XFx1MDEyOFxceENEXFx1MUVDQVxceEQyXFx1MUVDRVxceEQ1XFx4RDNcXHUxRUNDXFx1MUVEOFxcdTFFRENcXHUxRURFXFx1MUVFMFxcdTFFREFcXHUxRUUyXFx4RDlcXHUxRUU2XFx1MDE2OFxceEEwXFx1MDEwMlxceEMyXFx4Q0FcXHhENFxcdTAxQTBcXHUwMUFGXFx1MDExMFxcdTAxMDNcXHhFMlxceEVBXFx4RjRcXHUwMUExXFx1MDFCMFxcdTAxMTFcXHUxRUIwXFx1MDMwMFxcdTAzMDlcXHUwMzAzXFx1MDMwMVxcdTAzMjNcXHhFMFxcdTFFQTNcXHhFM1xceEUxXFx1MUVBMVxcdTFFQjJcXHUxRUIxXFx1MUVCM1xcdTFFQjVcXHUxRUFGXFx1MUVCNFxcdTFFQUVcXHUxRUE2XFx1MUVBOFxcdTFFQUFcXHUxRUE0XFx1MUVDMFxcdTFFQjdcXHUxRUE3XFx1MUVBOVxcdTFFQUJcXHUxRUE1XFx1MUVBRFxceEU4XFx1MUVDMlxcdTFFQkJcXHUxRUJEXFx4RTlcXHUxRUI5XFx1MUVDMVxcdTFFQzNcXHUxRUM1XFx1MUVCRlxcdTFFQzdcXHhFQ1xcdTFFQzlcXHUxRUM0XFx1MUVCRVxcdTFFRDJcXHUwMTI5XFx4RURcXHUxRUNCXFx4RjJcXHUxRUQ0XFx1MUVDRlxceEY1XFx4RjNcXHUxRUNEXFx1MUVEM1xcdTFFRDVcXHUxRUQ3XFx1MUVEMVxcdTFFRDlcXHUxRUREXFx1MUVERlxcdTFFRTFcXHUxRURCXFx1MUVFM1xceEY5XFx1MUVENlxcdTFFRTdcXHUwMTY5XFx4RkFcXHUxRUU1XFx1MUVFQlxcdTFFRURcXHUxRUVGXFx1MUVFOVxcdTFFRjFcXHUxRUYzXFx1MUVGN1xcdTFFRjlcXHhGRFxcdTFFRjVcXHUxRUQwXCJcbiAgICAgIH0sXG4gICAgICBcImdlb3JnaWFuYWNhZGVteVwiOiB7XG4gICAgICAgIFwidHlwZVwiOiBcIl9zYmNzXCIsXG4gICAgICAgIFwiY2hhcnNcIjogXCJcXHg4MFxceDgxXFx1MjAxQVxcdTAxOTJcXHUyMDFFXFx1MjAyNlxcdTIwMjBcXHUyMDIxXFx1MDJDNlxcdTIwMzBcXHUwMTYwXFx1MjAzOVxcdTAxNTJcXHg4RFxceDhFXFx4OEZcXHg5MFxcdTIwMThcXHUyMDE5XFx1MjAxQ1xcdTIwMURcXHUyMDIyXFx1MjAxM1xcdTIwMTRcXHUwMkRDXFx1MjEyMlxcdTAxNjFcXHUyMDNBXFx1MDE1M1xceDlEXFx4OUVcXHUwMTc4XFx4QTBcXHhBMVxceEEyXFx4QTNcXHhBNFxceEE1XFx4QTZcXHhBN1xceEE4XFx4QTlcXHhBQVxceEFCXFx4QUNcXHhBRFxceEFFXFx4QUZcXHhCMFxceEIxXFx4QjJcXHhCM1xceEI0XFx4QjVcXHhCNlxceEI3XFx4QjhcXHhCOVxceEJBXFx4QkJcXHhCQ1xceEJEXFx4QkVcXHhCRlxcdTEwRDBcXHUxMEQxXFx1MTBEMlxcdTEwRDNcXHUxMEQ0XFx1MTBENVxcdTEwRDZcXHUxMEQ3XFx1MTBEOFxcdTEwRDlcXHUxMERBXFx1MTBEQlxcdTEwRENcXHUxMEREXFx1MTBERVxcdTEwREZcXHUxMEUwXFx1MTBFMVxcdTEwRTJcXHUxMEUzXFx1MTBFNFxcdTEwRTVcXHUxMEU2XFx1MTBFN1xcdTEwRThcXHUxMEU5XFx1MTBFQVxcdTEwRUJcXHUxMEVDXFx1MTBFRFxcdTEwRUVcXHUxMEVGXFx1MTBGMFxcdTEwRjFcXHUxMEYyXFx1MTBGM1xcdTEwRjRcXHUxMEY1XFx1MTBGNlxceEU3XFx4RThcXHhFOVxceEVBXFx4RUJcXHhFQ1xceEVEXFx4RUVcXHhFRlxceEYwXFx4RjFcXHhGMlxceEYzXFx4RjRcXHhGNVxceEY2XFx4RjdcXHhGOFxceEY5XFx4RkFcXHhGQlxceEZDXFx4RkRcXHhGRVxceEZGXCJcbiAgICAgIH0sXG4gICAgICBcImdlb3JnaWFucHNcIjoge1xuICAgICAgICBcInR5cGVcIjogXCJfc2Jjc1wiLFxuICAgICAgICBcImNoYXJzXCI6IFwiXFx4ODBcXHg4MVxcdTIwMUFcXHUwMTkyXFx1MjAxRVxcdTIwMjZcXHUyMDIwXFx1MjAyMVxcdTAyQzZcXHUyMDMwXFx1MDE2MFxcdTIwMzlcXHUwMTUyXFx4OERcXHg4RVxceDhGXFx4OTBcXHUyMDE4XFx1MjAxOVxcdTIwMUNcXHUyMDFEXFx1MjAyMlxcdTIwMTNcXHUyMDE0XFx1MDJEQ1xcdTIxMjJcXHUwMTYxXFx1MjAzQVxcdTAxNTNcXHg5RFxceDlFXFx1MDE3OFxceEEwXFx4QTFcXHhBMlxceEEzXFx4QTRcXHhBNVxceEE2XFx4QTdcXHhBOFxceEE5XFx4QUFcXHhBQlxceEFDXFx4QURcXHhBRVxceEFGXFx4QjBcXHhCMVxceEIyXFx4QjNcXHhCNFxceEI1XFx4QjZcXHhCN1xceEI4XFx4QjlcXHhCQVxceEJCXFx4QkNcXHhCRFxceEJFXFx4QkZcXHUxMEQwXFx1MTBEMVxcdTEwRDJcXHUxMEQzXFx1MTBENFxcdTEwRDVcXHUxMEQ2XFx1MTBGMVxcdTEwRDdcXHUxMEQ4XFx1MTBEOVxcdTEwREFcXHUxMERCXFx1MTBEQ1xcdTEwRjJcXHUxMEREXFx1MTBERVxcdTEwREZcXHUxMEUwXFx1MTBFMVxcdTEwRTJcXHUxMEYzXFx1MTBFM1xcdTEwRTRcXHUxMEU1XFx1MTBFNlxcdTEwRTdcXHUxMEU4XFx1MTBFOVxcdTEwRUFcXHUxMEVCXFx1MTBFQ1xcdTEwRURcXHUxMEVFXFx1MTBGNFxcdTEwRUZcXHUxMEYwXFx1MTBGNVxceEU2XFx4RTdcXHhFOFxceEU5XFx4RUFcXHhFQlxceEVDXFx4RURcXHhFRVxceEVGXFx4RjBcXHhGMVxceEYyXFx4RjNcXHhGNFxceEY1XFx4RjZcXHhGN1xceEY4XFx4RjlcXHhGQVxceEZCXFx4RkNcXHhGRFxceEZFXFx4RkZcIlxuICAgICAgfSxcbiAgICAgIFwicHQxNTRcIjoge1xuICAgICAgICBcInR5cGVcIjogXCJfc2Jjc1wiLFxuICAgICAgICBcImNoYXJzXCI6IFwiXFx1MDQ5NlxcdTA0OTJcXHUwNEVFXFx1MDQ5M1xcdTIwMUVcXHUyMDI2XFx1MDRCNlxcdTA0QUVcXHUwNEIyXFx1MDRBRlxcdTA0QTBcXHUwNEUyXFx1MDRBMlxcdTA0OUFcXHUwNEJBXFx1MDRCOFxcdTA0OTdcXHUyMDE4XFx1MjAxOVxcdTIwMUNcXHUyMDFEXFx1MjAyMlxcdTIwMTNcXHUyMDE0XFx1MDRCM1xcdTA0QjdcXHUwNEExXFx1MDRFM1xcdTA0QTNcXHUwNDlCXFx1MDRCQlxcdTA0QjlcXHhBMFxcdTA0MEVcXHUwNDVFXFx1MDQwOFxcdTA0RThcXHUwNDk4XFx1MDRCMFxceEE3XFx1MDQwMVxceEE5XFx1MDREOFxceEFCXFx4QUNcXHUwNEVGXFx4QUVcXHUwNDlDXFx4QjBcXHUwNEIxXFx1MDQwNlxcdTA0NTZcXHUwNDk5XFx1MDRFOVxceEI2XFx4QjdcXHUwNDUxXFx1MjExNlxcdTA0RDlcXHhCQlxcdTA0NThcXHUwNEFBXFx1MDRBQlxcdTA0OURcXHUwNDEwXFx1MDQxMVxcdTA0MTJcXHUwNDEzXFx1MDQxNFxcdTA0MTVcXHUwNDE2XFx1MDQxN1xcdTA0MThcXHUwNDE5XFx1MDQxQVxcdTA0MUJcXHUwNDFDXFx1MDQxRFxcdTA0MUVcXHUwNDFGXFx1MDQyMFxcdTA0MjFcXHUwNDIyXFx1MDQyM1xcdTA0MjRcXHUwNDI1XFx1MDQyNlxcdTA0MjdcXHUwNDI4XFx1MDQyOVxcdTA0MkFcXHUwNDJCXFx1MDQyQ1xcdTA0MkRcXHUwNDJFXFx1MDQyRlxcdTA0MzBcXHUwNDMxXFx1MDQzMlxcdTA0MzNcXHUwNDM0XFx1MDQzNVxcdTA0MzZcXHUwNDM3XFx1MDQzOFxcdTA0MzlcXHUwNDNBXFx1MDQzQlxcdTA0M0NcXHUwNDNEXFx1MDQzRVxcdTA0M0ZcXHUwNDQwXFx1MDQ0MVxcdTA0NDJcXHUwNDQzXFx1MDQ0NFxcdTA0NDVcXHUwNDQ2XFx1MDQ0N1xcdTA0NDhcXHUwNDQ5XFx1MDQ0QVxcdTA0NEJcXHUwNDRDXFx1MDQ0RFxcdTA0NEVcXHUwNDRGXCJcbiAgICAgIH0sXG4gICAgICBcInZpc2NpaVwiOiB7XG4gICAgICAgIFwidHlwZVwiOiBcIl9zYmNzXCIsXG4gICAgICAgIFwiY2hhcnNcIjogXCJcXDBcdTAwMDFcXHUxRUIyXHUwMDAzXHUwMDA0XFx1MUVCNFxcdTFFQUFcXHgwN1xcYlx0XFxuXFx2XFxmXFxyXHUwMDBFXHUwMDBGXHUwMDEwXHUwMDExXHUwMDEyXHUwMDEzXFx1MUVGNlx1MDAxNVx1MDAxNlx1MDAxN1x1MDAxOFxcdTFFRjhcdTAwMUFcXHgxQlx1MDAxQ1x1MDAxRFxcdTFFRjRcdTAwMUYgIVxcXCIjJCUmJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXFxcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9flxceDdGXFx1MUVBMFxcdTFFQUVcXHUxRUIwXFx1MUVCNlxcdTFFQTRcXHUxRUE2XFx1MUVBOFxcdTFFQUNcXHUxRUJDXFx1MUVCOFxcdTFFQkVcXHUxRUMwXFx1MUVDMlxcdTFFQzRcXHUxRUM2XFx1MUVEMFxcdTFFRDJcXHUxRUQ0XFx1MUVENlxcdTFFRDhcXHUxRUUyXFx1MUVEQVxcdTFFRENcXHUxRURFXFx1MUVDQVxcdTFFQ0VcXHUxRUNDXFx1MUVDOFxcdTFFRTZcXHUwMTY4XFx1MUVFNFxcdTFFRjJcXHhENVxcdTFFQUZcXHUxRUIxXFx1MUVCN1xcdTFFQTVcXHUxRUE3XFx1MUVBOVxcdTFFQURcXHUxRUJEXFx1MUVCOVxcdTFFQkZcXHUxRUMxXFx1MUVDM1xcdTFFQzVcXHUxRUM3XFx1MUVEMVxcdTFFRDNcXHUxRUQ1XFx1MUVEN1xcdTFFRTBcXHUwMUEwXFx1MUVEOVxcdTFFRERcXHUxRURGXFx1MUVDQlxcdTFFRjBcXHUxRUU4XFx1MUVFQVxcdTFFRUNcXHUwMUExXFx1MUVEQlxcdTAxQUZcXHhDMFxceEMxXFx4QzJcXHhDM1xcdTFFQTJcXHUwMTAyXFx1MUVCM1xcdTFFQjVcXHhDOFxceEM5XFx4Q0FcXHUxRUJBXFx4Q0NcXHhDRFxcdTAxMjhcXHUxRUYzXFx1MDExMFxcdTFFRTlcXHhEMlxceEQzXFx4RDRcXHUxRUExXFx1MUVGN1xcdTFFRUJcXHUxRUVEXFx4RDlcXHhEQVxcdTFFRjlcXHUxRUY1XFx4RERcXHUxRUUxXFx1MDFCMFxceEUwXFx4RTFcXHhFMlxceEUzXFx1MUVBM1xcdTAxMDNcXHUxRUVGXFx1MUVBQlxceEU4XFx4RTlcXHhFQVxcdTFFQkJcXHhFQ1xceEVEXFx1MDEyOVxcdTFFQzlcXHUwMTExXFx1MUVGMVxceEYyXFx4RjNcXHhGNFxceEY1XFx1MUVDRlxcdTFFQ0RcXHUxRUU1XFx4RjlcXHhGQVxcdTAxNjlcXHUxRUU3XFx4RkRcXHUxRUUzXFx1MUVFRVwiXG4gICAgICB9LFxuICAgICAgXCJpc282NDZjblwiOiB7XG4gICAgICAgIFwidHlwZVwiOiBcIl9zYmNzXCIsXG4gICAgICAgIFwiY2hhcnNcIjogXCJcXDBcdTAwMDFcdTAwMDJcdTAwMDNcdTAwMDRcdTAwMDVcdTAwMDZcXHgwN1xcYlx0XFxuXFx2XFxmXFxyXHUwMDBFXHUwMDBGXHUwMDEwXHUwMDExXHUwMDEyXHUwMDEzXHUwMDE0XHUwMDE1XHUwMDE2XHUwMDE3XHUwMDE4XHUwMDE5XHUwMDFBXFx4MUJcdTAwMUNcdTAwMURcdTAwMUVcdTAwMUYgIVxcXCIjXFx4QTUlJicoKSorLC0uLzAxMjM0NTY3ODk6Ozw9Pj9AQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpbXFxcXF1eX2BhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ent8fVxcdTIwM0VcXHg3RlxcdUZGRkRcXHVGRkZEXFx1RkZGRFxcdUZGRkRcXHVGRkZEXFx1RkZGRFxcdUZGRkRcXHVGRkZEXFx1RkZGRFxcdUZGRkRcXHVGRkZEXFx1RkZGRFxcdUZGRkRcXHVGRkZEXFx1RkZGRFxcdUZGRkRcXHVGRkZEXFx1RkZGRFxcdUZGRkRcXHVGRkZEXFx1RkZGRFxcdUZGRkRcXHVGRkZEXFx1RkZGRFxcdUZGRkRcXHVGRkZEXFx1RkZGRFxcdUZGRkRcXHVGRkZEXFx1RkZGRFxcdUZGRkRcXHVGRkZEXFx1RkZGRFxcdUZGRkRcXHVGRkZEXFx1RkZGRFxcdUZGRkRcXHVGRkZEXFx1RkZGRFxcdUZGRkRcXHVGRkZEXFx1RkZGRFxcdUZGRkRcXHVGRkZEXFx1RkZGRFxcdUZGRkRcXHVGRkZEXFx1RkZGRFxcdUZGRkRcXHVGRkZEXFx1RkZGRFxcdUZGRkRcXHVGRkZEXFx1RkZGRFxcdUZGRkRcXHVGRkZEXFx1RkZGRFxcdUZGRkRcXHVGRkZEXFx1RkZGRFxcdUZGRkRcXHVGRkZEXFx1RkZGRFxcdUZGRkRcXHVGRkZEXFx1RkZGRFxcdUZGRkRcXHVGRkZEXFx1RkZGRFxcdUZGRkRcXHVGRkZEXFx1RkZGRFxcdUZGRkRcXHVGRkZEXFx1RkZGRFxcdUZGRkRcXHVGRkZEXFx1RkZGRFxcdUZGRkRcXHVGRkZEXFx1RkZGRFxcdUZGRkRcXHVGRkZEXFx1RkZGRFxcdUZGRkRcXHVGRkZEXFx1RkZGRFxcdUZGRkRcXHVGRkZEXFx1RkZGRFxcdUZGRkRcXHVGRkZEXFx1RkZGRFxcdUZGRkRcXHVGRkZEXFx1RkZGRFxcdUZGRkRcXHVGRkZEXFx1RkZGRFxcdUZGRkRcXHVGRkZEXFx1RkZGRFxcdUZGRkRcXHVGRkZEXFx1RkZGRFxcdUZGRkRcXHVGRkZEXFx1RkZGRFxcdUZGRkRcXHVGRkZEXFx1RkZGRFxcdUZGRkRcXHVGRkZEXFx1RkZGRFxcdUZGRkRcXHVGRkZEXFx1RkZGRFxcdUZGRkRcXHVGRkZEXFx1RkZGRFxcdUZGRkRcXHVGRkZEXFx1RkZGRFxcdUZGRkRcXHVGRkZEXFx1RkZGRFxcdUZGRkRcXHVGRkZEXCJcbiAgICAgIH0sXG4gICAgICBcImlzbzY0NmpwXCI6IHtcbiAgICAgICAgXCJ0eXBlXCI6IFwiX3NiY3NcIixcbiAgICAgICAgXCJjaGFyc1wiOiBcIlxcMFx1MDAwMVx1MDAwMlx1MDAwM1x1MDAwNFx1MDAwNVx1MDAwNlxceDA3XFxiXHRcXG5cXHZcXGZcXHJcdTAwMEVcdTAwMEZcdTAwMTBcdTAwMTFcdTAwMTJcdTAwMTNcdTAwMTRcdTAwMTVcdTAwMTZcdTAwMTdcdTAwMThcdTAwMTlcdTAwMUFcXHgxQlx1MDAxQ1x1MDAxRFx1MDAxRVx1MDAxRiAhXFxcIiMkJSYnKCkqKywtLi8wMTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaW1xceEE1XV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9XFx1MjAzRVxceDdGXFx1RkZGRFxcdUZGRkRcXHVGRkZEXFx1RkZGRFxcdUZGRkRcXHVGRkZEXFx1RkZGRFxcdUZGRkRcXHVGRkZEXFx1RkZGRFxcdUZGRkRcXHVGRkZEXFx1RkZGRFxcdUZGRkRcXHVGRkZEXFx1RkZGRFxcdUZGRkRcXHVGRkZEXFx1RkZGRFxcdUZGRkRcXHVGRkZEXFx1RkZGRFxcdUZGRkRcXHVGRkZEXFx1RkZGRFxcdUZGRkRcXHVGRkZEXFx1RkZGRFxcdUZGRkRcXHVGRkZEXFx1RkZGRFxcdUZGRkRcXHVGRkZEXFx1RkZGRFxcdUZGRkRcXHVGRkZEXFx1RkZGRFxcdUZGRkRcXHVGRkZEXFx1RkZGRFxcdUZGRkRcXHVGRkZEXFx1RkZGRFxcdUZGRkRcXHVGRkZEXFx1RkZGRFxcdUZGRkRcXHVGRkZEXFx1RkZGRFxcdUZGRkRcXHVGRkZEXFx1RkZGRFxcdUZGRkRcXHVGRkZEXFx1RkZGRFxcdUZGRkRcXHVGRkZEXFx1RkZGRFxcdUZGRkRcXHVGRkZEXFx1RkZGRFxcdUZGRkRcXHVGRkZEXFx1RkZGRFxcdUZGRkRcXHVGRkZEXFx1RkZGRFxcdUZGRkRcXHVGRkZEXFx1RkZGRFxcdUZGRkRcXHVGRkZEXFx1RkZGRFxcdUZGRkRcXHVGRkZEXFx1RkZGRFxcdUZGRkRcXHVGRkZEXFx1RkZGRFxcdUZGRkRcXHVGRkZEXFx1RkZGRFxcdUZGRkRcXHVGRkZEXFx1RkZGRFxcdUZGRkRcXHVGRkZEXFx1RkZGRFxcdUZGRkRcXHVGRkZEXFx1RkZGRFxcdUZGRkRcXHVGRkZEXFx1RkZGRFxcdUZGRkRcXHVGRkZEXFx1RkZGRFxcdUZGRkRcXHVGRkZEXFx1RkZGRFxcdUZGRkRcXHVGRkZEXFx1RkZGRFxcdUZGRkRcXHVGRkZEXFx1RkZGRFxcdUZGRkRcXHVGRkZEXFx1RkZGRFxcdUZGRkRcXHVGRkZEXFx1RkZGRFxcdUZGRkRcXHVGRkZEXFx1RkZGRFxcdUZGRkRcXHVGRkZEXFx1RkZGRFxcdUZGRkRcXHVGRkZEXFx1RkZGRFxcdUZGRkRcXHVGRkZEXFx1RkZGRFxcdUZGRkRcXHVGRkZEXFx1RkZGRFxcdUZGRkRcIlxuICAgICAgfSxcbiAgICAgIFwiaHByb21hbjhcIjoge1xuICAgICAgICBcInR5cGVcIjogXCJfc2Jjc1wiLFxuICAgICAgICBcImNoYXJzXCI6IFwiXFx4ODBcXHg4MVxceDgyXFx4ODNcXHg4NFxceDg1XFx4ODZcXHg4N1xceDg4XFx4ODlcXHg4QVxceDhCXFx4OENcXHg4RFxceDhFXFx4OEZcXHg5MFxceDkxXFx4OTJcXHg5M1xceDk0XFx4OTVcXHg5NlxceDk3XFx4OThcXHg5OVxceDlBXFx4OUJcXHg5Q1xceDlEXFx4OUVcXHg5RlxceEEwXFx4QzBcXHhDMlxceEM4XFx4Q0FcXHhDQlxceENFXFx4Q0ZcXHhCNFxcdTAyQ0JcXHUwMkM2XFx4QThcXHUwMkRDXFx4RDlcXHhEQlxcdTIwQTRcXHhBRlxceEREXFx4RkRcXHhCMFxceEM3XFx4RTdcXHhEMVxceEYxXFx4QTFcXHhCRlxceEE0XFx4QTNcXHhBNVxceEE3XFx1MDE5MlxceEEyXFx4RTJcXHhFQVxceEY0XFx4RkJcXHhFMVxceEU5XFx4RjNcXHhGQVxceEUwXFx4RThcXHhGMlxceEY5XFx4RTRcXHhFQlxceEY2XFx4RkNcXHhDNVxceEVFXFx4RDhcXHhDNlxceEU1XFx4RURcXHhGOFxceEU2XFx4QzRcXHhFQ1xceEQ2XFx4RENcXHhDOVxceEVGXFx4REZcXHhENFxceEMxXFx4QzNcXHhFM1xceEQwXFx4RjBcXHhDRFxceENDXFx4RDNcXHhEMlxceEQ1XFx4RjVcXHUwMTYwXFx1MDE2MVxceERBXFx1MDE3OFxceEZGXFx4REVcXHhGRVxceEI3XFx4QjVcXHhCNlxceEJFXFx1MjAxNFxceEJDXFx4QkRcXHhBQVxceEJBXFx4QUJcXHUyNUEwXFx4QkJcXHhCMVxcdUZGRkRcIlxuICAgICAgfSxcbiAgICAgIFwibWFjaW50b3NoXCI6IHtcbiAgICAgICAgXCJ0eXBlXCI6IFwiX3NiY3NcIixcbiAgICAgICAgXCJjaGFyc1wiOiBcIlxceEM0XFx4QzVcXHhDN1xceEM5XFx4RDFcXHhENlxceERDXFx4RTFcXHhFMFxceEUyXFx4RTRcXHhFM1xceEU1XFx4RTdcXHhFOVxceEU4XFx4RUFcXHhFQlxceEVEXFx4RUNcXHhFRVxceEVGXFx4RjFcXHhGM1xceEYyXFx4RjRcXHhGNlxceEY1XFx4RkFcXHhGOVxceEZCXFx4RkNcXHUyMDIwXFx4QjBcXHhBMlxceEEzXFx4QTdcXHUyMDIyXFx4QjZcXHhERlxceEFFXFx4QTlcXHUyMTIyXFx4QjRcXHhBOFxcdTIyNjBcXHhDNlxceEQ4XFx1MjIxRVxceEIxXFx1MjI2NFxcdTIyNjVcXHhBNVxceEI1XFx1MjIwMlxcdTIyMTFcXHUyMjBGXFx1MDNDMFxcdTIyMkJcXHhBQVxceEJBXFx1MjEyNlxceEU2XFx4RjhcXHhCRlxceEExXFx4QUNcXHUyMjFBXFx1MDE5MlxcdTIyNDhcXHUyMjA2XFx4QUJcXHhCQlxcdTIwMjZcXHhBMFxceEMwXFx4QzNcXHhENVxcdTAxNTJcXHUwMTUzXFx1MjAxM1xcdTIwMTRcXHUyMDFDXFx1MjAxRFxcdTIwMThcXHUyMDE5XFx4RjdcXHUyNUNBXFx4RkZcXHUwMTc4XFx1MjA0NFxceEE0XFx1MjAzOVxcdTIwM0FcXHVGQjAxXFx1RkIwMlxcdTIwMjFcXHhCN1xcdTIwMUFcXHUyMDFFXFx1MjAzMFxceEMyXFx4Q0FcXHhDMVxceENCXFx4QzhcXHhDRFxceENFXFx4Q0ZcXHhDQ1xceEQzXFx4RDRcXHVGRkZEXFx4RDJcXHhEQVxceERCXFx4RDlcXHUwMTMxXFx1MDJDNlxcdTAyRENcXHhBRlxcdTAyRDhcXHUwMkQ5XFx1MDJEQVxceEI4XFx1MDJERFxcdTAyREJcXHUwMkM3XCJcbiAgICAgIH0sXG4gICAgICBcImFzY2lpXCI6IHtcbiAgICAgICAgXCJ0eXBlXCI6IFwiX3NiY3NcIixcbiAgICAgICAgXCJjaGFyc1wiOiBcIlxcdUZGRkRcXHVGRkZEXFx1RkZGRFxcdUZGRkRcXHVGRkZEXFx1RkZGRFxcdUZGRkRcXHVGRkZEXFx1RkZGRFxcdUZGRkRcXHVGRkZEXFx1RkZGRFxcdUZGRkRcXHVGRkZEXFx1RkZGRFxcdUZGRkRcXHVGRkZEXFx1RkZGRFxcdUZGRkRcXHVGRkZEXFx1RkZGRFxcdUZGRkRcXHVGRkZEXFx1RkZGRFxcdUZGRkRcXHVGRkZEXFx1RkZGRFxcdUZGRkRcXHVGRkZEXFx1RkZGRFxcdUZGRkRcXHVGRkZEXFx1RkZGRFxcdUZGRkRcXHVGRkZEXFx1RkZGRFxcdUZGRkRcXHVGRkZEXFx1RkZGRFxcdUZGRkRcXHVGRkZEXFx1RkZGRFxcdUZGRkRcXHVGRkZEXFx1RkZGRFxcdUZGRkRcXHVGRkZEXFx1RkZGRFxcdUZGRkRcXHVGRkZEXFx1RkZGRFxcdUZGRkRcXHVGRkZEXFx1RkZGRFxcdUZGRkRcXHVGRkZEXFx1RkZGRFxcdUZGRkRcXHVGRkZEXFx1RkZGRFxcdUZGRkRcXHVGRkZEXFx1RkZGRFxcdUZGRkRcXHVGRkZEXFx1RkZGRFxcdUZGRkRcXHVGRkZEXFx1RkZGRFxcdUZGRkRcXHVGRkZEXFx1RkZGRFxcdUZGRkRcXHVGRkZEXFx1RkZGRFxcdUZGRkRcXHVGRkZEXFx1RkZGRFxcdUZGRkRcXHVGRkZEXFx1RkZGRFxcdUZGRkRcXHVGRkZEXFx1RkZGRFxcdUZGRkRcXHVGRkZEXFx1RkZGRFxcdUZGRkRcXHVGRkZEXFx1RkZGRFxcdUZGRkRcXHVGRkZEXFx1RkZGRFxcdUZGRkRcXHVGRkZEXFx1RkZGRFxcdUZGRkRcXHVGRkZEXFx1RkZGRFxcdUZGRkRcXHVGRkZEXFx1RkZGRFxcdUZGRkRcXHVGRkZEXFx1RkZGRFxcdUZGRkRcXHVGRkZEXFx1RkZGRFxcdUZGRkRcXHVGRkZEXFx1RkZGRFxcdUZGRkRcXHVGRkZEXFx1RkZGRFxcdUZGRkRcXHVGRkZEXFx1RkZGRFxcdUZGRkRcXHVGRkZEXFx1RkZGRFxcdUZGRkRcXHVGRkZEXFx1RkZGRFxcdUZGRkRcXHVGRkZEXFx1RkZGRFxcdUZGRkRcXHVGRkZEXCJcbiAgICAgIH0sXG4gICAgICBcInRpczYyMFwiOiB7XG4gICAgICAgIFwidHlwZVwiOiBcIl9zYmNzXCIsXG4gICAgICAgIFwiY2hhcnNcIjogXCJcXHVGRkZEXFx1RkZGRFxcdUZGRkRcXHVGRkZEXFx1RkZGRFxcdUZGRkRcXHVGRkZEXFx1RkZGRFxcdUZGRkRcXHVGRkZEXFx1RkZGRFxcdUZGRkRcXHVGRkZEXFx1RkZGRFxcdUZGRkRcXHVGRkZEXFx1RkZGRFxcdUZGRkRcXHVGRkZEXFx1RkZGRFxcdUZGRkRcXHVGRkZEXFx1RkZGRFxcdUZGRkRcXHVGRkZEXFx1RkZGRFxcdUZGRkRcXHVGRkZEXFx1RkZGRFxcdUZGRkRcXHVGRkZEXFx1RkZGRFxcdUZGRkRcXHUwRTAxXFx1MEUwMlxcdTBFMDNcXHUwRTA0XFx1MEUwNVxcdTBFMDZcXHUwRTA3XFx1MEUwOFxcdTBFMDlcXHUwRTBBXFx1MEUwQlxcdTBFMENcXHUwRTBEXFx1MEUwRVxcdTBFMEZcXHUwRTEwXFx1MEUxMVxcdTBFMTJcXHUwRTEzXFx1MEUxNFxcdTBFMTVcXHUwRTE2XFx1MEUxN1xcdTBFMThcXHUwRTE5XFx1MEUxQVxcdTBFMUJcXHUwRTFDXFx1MEUxRFxcdTBFMUVcXHUwRTFGXFx1MEUyMFxcdTBFMjFcXHUwRTIyXFx1MEUyM1xcdTBFMjRcXHUwRTI1XFx1MEUyNlxcdTBFMjdcXHUwRTI4XFx1MEUyOVxcdTBFMkFcXHUwRTJCXFx1MEUyQ1xcdTBFMkRcXHUwRTJFXFx1MEUyRlxcdTBFMzBcXHUwRTMxXFx1MEUzMlxcdTBFMzNcXHUwRTM0XFx1MEUzNVxcdTBFMzZcXHUwRTM3XFx1MEUzOFxcdTBFMzlcXHUwRTNBXFx1RkZGRFxcdUZGRkRcXHVGRkZEXFx1RkZGRFxcdTBFM0ZcXHUwRTQwXFx1MEU0MVxcdTBFNDJcXHUwRTQzXFx1MEU0NFxcdTBFNDVcXHUwRTQ2XFx1MEU0N1xcdTBFNDhcXHUwRTQ5XFx1MEU0QVxcdTBFNEJcXHUwRTRDXFx1MEU0RFxcdTBFNEVcXHUwRTRGXFx1MEU1MFxcdTBFNTFcXHUwRTUyXFx1MEU1M1xcdTBFNTRcXHUwRTU1XFx1MEU1NlxcdTBFNTdcXHUwRTU4XFx1MEU1OVxcdTBFNUFcXHUwRTVCXFx1RkZGRFxcdUZGRkRcXHVGRkZEXFx1RkZGRFwiXG4gICAgICB9XG4gICAgfTtcbiAgfVxufSk7XG5cbi8vIG5vZGVfbW9kdWxlcy9yYXctYm9keS9ub2RlX21vZHVsZXMvaWNvbnYtbGl0ZS9lbmNvZGluZ3MvZGJjcy1jb2RlYy5qc1xudmFyIHJlcXVpcmVfZGJjc19jb2RlYyA9IF9fY29tbW9uSlMoe1xuICBcIm5vZGVfbW9kdWxlcy9yYXctYm9keS9ub2RlX21vZHVsZXMvaWNvbnYtbGl0ZS9lbmNvZGluZ3MvZGJjcy1jb2RlYy5qc1wiKGV4cG9ydHMyKSB7XG4gICAgXCJ1c2Ugc3RyaWN0XCI7XG4gICAgdmFyIEJ1ZmZlcjIgPSByZXF1aXJlX3NhZmVyKCkuQnVmZmVyO1xuICAgIGV4cG9ydHMyLl9kYmNzID0gREJDU0NvZGVjO1xuICAgIHZhciBVTkFTU0lHTkVEID0gLTE7XG4gICAgdmFyIEdCMTgwMzBfQ09ERSA9IC0yO1xuICAgIHZhciBTRVFfU1RBUlQgPSAtMTA7XG4gICAgdmFyIE5PREVfU1RBUlQgPSAtMWUzO1xuICAgIHZhciBVTkFTU0lHTkVEX05PREUgPSBuZXcgQXJyYXkoMjU2KTtcbiAgICB2YXIgREVGX0NIQVIgPSAtMTtcbiAgICBmb3IgKGkgPSAwOyBpIDwgMjU2OyBpKyspXG4gICAgICBVTkFTU0lHTkVEX05PREVbaV0gPSBVTkFTU0lHTkVEO1xuICAgIHZhciBpO1xuICAgIGZ1bmN0aW9uIERCQ1NDb2RlYyhjb2RlY09wdGlvbnMsIGljb252KSB7XG4gICAgICB0aGlzLmVuY29kaW5nTmFtZSA9IGNvZGVjT3B0aW9ucy5lbmNvZGluZ05hbWU7XG4gICAgICBpZiAoIWNvZGVjT3B0aW9ucylcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiREJDUyBjb2RlYyBpcyBjYWxsZWQgd2l0aG91dCB0aGUgZGF0YS5cIik7XG4gICAgICBpZiAoIWNvZGVjT3B0aW9ucy50YWJsZSlcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiRW5jb2RpbmcgJ1wiICsgdGhpcy5lbmNvZGluZ05hbWUgKyBcIicgaGFzIG5vIGRhdGEuXCIpO1xuICAgICAgdmFyIG1hcHBpbmdUYWJsZSA9IGNvZGVjT3B0aW9ucy50YWJsZSgpO1xuICAgICAgdGhpcy5kZWNvZGVUYWJsZXMgPSBbXTtcbiAgICAgIHRoaXMuZGVjb2RlVGFibGVzWzBdID0gVU5BU1NJR05FRF9OT0RFLnNsaWNlKDApO1xuICAgICAgdGhpcy5kZWNvZGVUYWJsZVNlcSA9IFtdO1xuICAgICAgZm9yICh2YXIgaTIgPSAwOyBpMiA8IG1hcHBpbmdUYWJsZS5sZW5ndGg7IGkyKyspXG4gICAgICAgIHRoaXMuX2FkZERlY29kZUNodW5rKG1hcHBpbmdUYWJsZVtpMl0pO1xuICAgICAgaWYgKHR5cGVvZiBjb2RlY09wdGlvbnMuZ2IxODAzMCA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIHRoaXMuZ2IxODAzMCA9IGNvZGVjT3B0aW9ucy5nYjE4MDMwKCk7XG4gICAgICAgIHZhciBjb21tb25UaGlyZEJ5dGVOb2RlSWR4ID0gdGhpcy5kZWNvZGVUYWJsZXMubGVuZ3RoO1xuICAgICAgICB0aGlzLmRlY29kZVRhYmxlcy5wdXNoKFVOQVNTSUdORURfTk9ERS5zbGljZSgwKSk7XG4gICAgICAgIHZhciBjb21tb25Gb3VydGhCeXRlTm9kZUlkeCA9IHRoaXMuZGVjb2RlVGFibGVzLmxlbmd0aDtcbiAgICAgICAgdGhpcy5kZWNvZGVUYWJsZXMucHVzaChVTkFTU0lHTkVEX05PREUuc2xpY2UoMCkpO1xuICAgICAgICB2YXIgZmlyc3RCeXRlTm9kZSA9IHRoaXMuZGVjb2RlVGFibGVzWzBdO1xuICAgICAgICBmb3IgKHZhciBpMiA9IDEyOTsgaTIgPD0gMjU0OyBpMisrKSB7XG4gICAgICAgICAgdmFyIHNlY29uZEJ5dGVOb2RlID0gdGhpcy5kZWNvZGVUYWJsZXNbTk9ERV9TVEFSVCAtIGZpcnN0Qnl0ZU5vZGVbaTJdXTtcbiAgICAgICAgICBmb3IgKHZhciBqID0gNDg7IGogPD0gNTc7IGorKykge1xuICAgICAgICAgICAgaWYgKHNlY29uZEJ5dGVOb2RlW2pdID09PSBVTkFTU0lHTkVEKSB7XG4gICAgICAgICAgICAgIHNlY29uZEJ5dGVOb2RlW2pdID0gTk9ERV9TVEFSVCAtIGNvbW1vblRoaXJkQnl0ZU5vZGVJZHg7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHNlY29uZEJ5dGVOb2RlW2pdID4gTk9ERV9TVEFSVCkge1xuICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJnYjE4MDMwIGRlY29kZSB0YWJsZXMgY29uZmxpY3QgYXQgYnl0ZSAyXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdmFyIHRoaXJkQnl0ZU5vZGUgPSB0aGlzLmRlY29kZVRhYmxlc1tOT0RFX1NUQVJUIC0gc2Vjb25kQnl0ZU5vZGVbal1dO1xuICAgICAgICAgICAgZm9yICh2YXIgayA9IDEyOTsgayA8PSAyNTQ7IGsrKykge1xuICAgICAgICAgICAgICBpZiAodGhpcmRCeXRlTm9kZVtrXSA9PT0gVU5BU1NJR05FRCkge1xuICAgICAgICAgICAgICAgIHRoaXJkQnl0ZU5vZGVba10gPSBOT0RFX1NUQVJUIC0gY29tbW9uRm91cnRoQnl0ZU5vZGVJZHg7XG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcmRCeXRlTm9kZVtrXSA9PT0gTk9ERV9TVEFSVCAtIGNvbW1vbkZvdXJ0aEJ5dGVOb2RlSWR4KSB7XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcmRCeXRlTm9kZVtrXSA+IE5PREVfU1RBUlQpIHtcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJnYjE4MDMwIGRlY29kZSB0YWJsZXMgY29uZmxpY3QgYXQgYnl0ZSAzXCIpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHZhciBmb3VydGhCeXRlTm9kZSA9IHRoaXMuZGVjb2RlVGFibGVzW05PREVfU1RBUlQgLSB0aGlyZEJ5dGVOb2RlW2tdXTtcbiAgICAgICAgICAgICAgZm9yICh2YXIgbCA9IDQ4OyBsIDw9IDU3OyBsKyspIHtcbiAgICAgICAgICAgICAgICBpZiAoZm91cnRoQnl0ZU5vZGVbbF0gPT09IFVOQVNTSUdORUQpXG4gICAgICAgICAgICAgICAgICBmb3VydGhCeXRlTm9kZVtsXSA9IEdCMTgwMzBfQ09ERTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgdGhpcy5kZWZhdWx0Q2hhclVuaWNvZGUgPSBpY29udi5kZWZhdWx0Q2hhclVuaWNvZGU7XG4gICAgICB0aGlzLmVuY29kZVRhYmxlID0gW107XG4gICAgICB0aGlzLmVuY29kZVRhYmxlU2VxID0gW107XG4gICAgICB2YXIgc2tpcEVuY29kZUNoYXJzID0ge307XG4gICAgICBpZiAoY29kZWNPcHRpb25zLmVuY29kZVNraXBWYWxzKVxuICAgICAgICBmb3IgKHZhciBpMiA9IDA7IGkyIDwgY29kZWNPcHRpb25zLmVuY29kZVNraXBWYWxzLmxlbmd0aDsgaTIrKykge1xuICAgICAgICAgIHZhciB2YWwgPSBjb2RlY09wdGlvbnMuZW5jb2RlU2tpcFZhbHNbaTJdO1xuICAgICAgICAgIGlmICh0eXBlb2YgdmFsID09PSBcIm51bWJlclwiKVxuICAgICAgICAgICAgc2tpcEVuY29kZUNoYXJzW3ZhbF0gPSB0cnVlO1xuICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgIGZvciAodmFyIGogPSB2YWwuZnJvbTsgaiA8PSB2YWwudG87IGorKylcbiAgICAgICAgICAgICAgc2tpcEVuY29kZUNoYXJzW2pdID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgdGhpcy5fZmlsbEVuY29kZVRhYmxlKDAsIDAsIHNraXBFbmNvZGVDaGFycyk7XG4gICAgICBpZiAoY29kZWNPcHRpb25zLmVuY29kZUFkZCkge1xuICAgICAgICBmb3IgKHZhciB1Q2hhciBpbiBjb2RlY09wdGlvbnMuZW5jb2RlQWRkKVxuICAgICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoY29kZWNPcHRpb25zLmVuY29kZUFkZCwgdUNoYXIpKVxuICAgICAgICAgICAgdGhpcy5fc2V0RW5jb2RlQ2hhcih1Q2hhci5jaGFyQ29kZUF0KDApLCBjb2RlY09wdGlvbnMuZW5jb2RlQWRkW3VDaGFyXSk7XG4gICAgICB9XG4gICAgICB0aGlzLmRlZkNoYXJTQiA9IHRoaXMuZW5jb2RlVGFibGVbMF1baWNvbnYuZGVmYXVsdENoYXJTaW5nbGVCeXRlLmNoYXJDb2RlQXQoMCldO1xuICAgICAgaWYgKHRoaXMuZGVmQ2hhclNCID09PSBVTkFTU0lHTkVEKSB0aGlzLmRlZkNoYXJTQiA9IHRoaXMuZW5jb2RlVGFibGVbMF1bXCI/XCJdO1xuICAgICAgaWYgKHRoaXMuZGVmQ2hhclNCID09PSBVTkFTU0lHTkVEKSB0aGlzLmRlZkNoYXJTQiA9IFwiP1wiLmNoYXJDb2RlQXQoMCk7XG4gICAgfVxuICAgIERCQ1NDb2RlYy5wcm90b3R5cGUuZW5jb2RlciA9IERCQ1NFbmNvZGVyO1xuICAgIERCQ1NDb2RlYy5wcm90b3R5cGUuZGVjb2RlciA9IERCQ1NEZWNvZGVyO1xuICAgIERCQ1NDb2RlYy5wcm90b3R5cGUuX2dldERlY29kZVRyaWVOb2RlID0gZnVuY3Rpb24oYWRkcikge1xuICAgICAgdmFyIGJ5dGVzID0gW107XG4gICAgICBmb3IgKDsgYWRkciA+IDA7IGFkZHIgPj4+PSA4KVxuICAgICAgICBieXRlcy5wdXNoKGFkZHIgJiAyNTUpO1xuICAgICAgaWYgKGJ5dGVzLmxlbmd0aCA9PSAwKVxuICAgICAgICBieXRlcy5wdXNoKDApO1xuICAgICAgdmFyIG5vZGUgPSB0aGlzLmRlY29kZVRhYmxlc1swXTtcbiAgICAgIGZvciAodmFyIGkyID0gYnl0ZXMubGVuZ3RoIC0gMTsgaTIgPiAwOyBpMi0tKSB7XG4gICAgICAgIHZhciB2YWwgPSBub2RlW2J5dGVzW2kyXV07XG4gICAgICAgIGlmICh2YWwgPT0gVU5BU1NJR05FRCkge1xuICAgICAgICAgIG5vZGVbYnl0ZXNbaTJdXSA9IE5PREVfU1RBUlQgLSB0aGlzLmRlY29kZVRhYmxlcy5sZW5ndGg7XG4gICAgICAgICAgdGhpcy5kZWNvZGVUYWJsZXMucHVzaChub2RlID0gVU5BU1NJR05FRF9OT0RFLnNsaWNlKDApKTtcbiAgICAgICAgfSBlbHNlIGlmICh2YWwgPD0gTk9ERV9TVEFSVCkge1xuICAgICAgICAgIG5vZGUgPSB0aGlzLmRlY29kZVRhYmxlc1tOT0RFX1NUQVJUIC0gdmFsXTtcbiAgICAgICAgfSBlbHNlXG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiT3ZlcndyaXRlIGJ5dGUgaW4gXCIgKyB0aGlzLmVuY29kaW5nTmFtZSArIFwiLCBhZGRyOiBcIiArIGFkZHIudG9TdHJpbmcoMTYpKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBub2RlO1xuICAgIH07XG4gICAgREJDU0NvZGVjLnByb3RvdHlwZS5fYWRkRGVjb2RlQ2h1bmsgPSBmdW5jdGlvbihjaHVuaykge1xuICAgICAgdmFyIGN1ckFkZHIgPSBwYXJzZUludChjaHVua1swXSwgMTYpO1xuICAgICAgdmFyIHdyaXRlVGFibGUgPSB0aGlzLl9nZXREZWNvZGVUcmllTm9kZShjdXJBZGRyKTtcbiAgICAgIGN1ckFkZHIgPSBjdXJBZGRyICYgMjU1O1xuICAgICAgZm9yICh2YXIgayA9IDE7IGsgPCBjaHVuay5sZW5ndGg7IGsrKykge1xuICAgICAgICB2YXIgcGFydCA9IGNodW5rW2tdO1xuICAgICAgICBpZiAodHlwZW9mIHBhcnQgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICBmb3IgKHZhciBsID0gMDsgbCA8IHBhcnQubGVuZ3RoOyApIHtcbiAgICAgICAgICAgIHZhciBjb2RlID0gcGFydC5jaGFyQ29kZUF0KGwrKyk7XG4gICAgICAgICAgICBpZiAoNTUyOTYgPD0gY29kZSAmJiBjb2RlIDwgNTYzMjApIHtcbiAgICAgICAgICAgICAgdmFyIGNvZGVUcmFpbCA9IHBhcnQuY2hhckNvZGVBdChsKyspO1xuICAgICAgICAgICAgICBpZiAoNTYzMjAgPD0gY29kZVRyYWlsICYmIGNvZGVUcmFpbCA8IDU3MzQ0KVxuICAgICAgICAgICAgICAgIHdyaXRlVGFibGVbY3VyQWRkcisrXSA9IDY1NTM2ICsgKGNvZGUgLSA1NTI5NikgKiAxMDI0ICsgKGNvZGVUcmFpbCAtIDU2MzIwKTtcbiAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkluY29ycmVjdCBzdXJyb2dhdGUgcGFpciBpbiBcIiArIHRoaXMuZW5jb2RpbmdOYW1lICsgXCIgYXQgY2h1bmsgXCIgKyBjaHVua1swXSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKDQwODAgPCBjb2RlICYmIGNvZGUgPD0gNDA5NSkge1xuICAgICAgICAgICAgICB2YXIgbGVuID0gNDA5NSAtIGNvZGUgKyAyO1xuICAgICAgICAgICAgICB2YXIgc2VxID0gW107XG4gICAgICAgICAgICAgIGZvciAodmFyIG0gPSAwOyBtIDwgbGVuOyBtKyspXG4gICAgICAgICAgICAgICAgc2VxLnB1c2gocGFydC5jaGFyQ29kZUF0KGwrKykpO1xuICAgICAgICAgICAgICB3cml0ZVRhYmxlW2N1ckFkZHIrK10gPSBTRVFfU1RBUlQgLSB0aGlzLmRlY29kZVRhYmxlU2VxLmxlbmd0aDtcbiAgICAgICAgICAgICAgdGhpcy5kZWNvZGVUYWJsZVNlcS5wdXNoKHNlcSk7XG4gICAgICAgICAgICB9IGVsc2VcbiAgICAgICAgICAgICAgd3JpdGVUYWJsZVtjdXJBZGRyKytdID0gY29kZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHBhcnQgPT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgICB2YXIgY2hhckNvZGUgPSB3cml0ZVRhYmxlW2N1ckFkZHIgLSAxXSArIDE7XG4gICAgICAgICAgZm9yICh2YXIgbCA9IDA7IGwgPCBwYXJ0OyBsKyspXG4gICAgICAgICAgICB3cml0ZVRhYmxlW2N1ckFkZHIrK10gPSBjaGFyQ29kZSsrO1xuICAgICAgICB9IGVsc2VcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJJbmNvcnJlY3QgdHlwZSAnXCIgKyB0eXBlb2YgcGFydCArIFwiJyBnaXZlbiBpbiBcIiArIHRoaXMuZW5jb2RpbmdOYW1lICsgXCIgYXQgY2h1bmsgXCIgKyBjaHVua1swXSk7XG4gICAgICB9XG4gICAgICBpZiAoY3VyQWRkciA+IDI1NSlcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSW5jb3JyZWN0IGNodW5rIGluIFwiICsgdGhpcy5lbmNvZGluZ05hbWUgKyBcIiBhdCBhZGRyIFwiICsgY2h1bmtbMF0gKyBcIjogdG9vIGxvbmdcIiArIGN1ckFkZHIpO1xuICAgIH07XG4gICAgREJDU0NvZGVjLnByb3RvdHlwZS5fZ2V0RW5jb2RlQnVja2V0ID0gZnVuY3Rpb24odUNvZGUpIHtcbiAgICAgIHZhciBoaWdoID0gdUNvZGUgPj4gODtcbiAgICAgIGlmICh0aGlzLmVuY29kZVRhYmxlW2hpZ2hdID09PSB2b2lkIDApXG4gICAgICAgIHRoaXMuZW5jb2RlVGFibGVbaGlnaF0gPSBVTkFTU0lHTkVEX05PREUuc2xpY2UoMCk7XG4gICAgICByZXR1cm4gdGhpcy5lbmNvZGVUYWJsZVtoaWdoXTtcbiAgICB9O1xuICAgIERCQ1NDb2RlYy5wcm90b3R5cGUuX3NldEVuY29kZUNoYXIgPSBmdW5jdGlvbih1Q29kZSwgZGJjc0NvZGUpIHtcbiAgICAgIHZhciBidWNrZXQgPSB0aGlzLl9nZXRFbmNvZGVCdWNrZXQodUNvZGUpO1xuICAgICAgdmFyIGxvdyA9IHVDb2RlICYgMjU1O1xuICAgICAgaWYgKGJ1Y2tldFtsb3ddIDw9IFNFUV9TVEFSVClcbiAgICAgICAgdGhpcy5lbmNvZGVUYWJsZVNlcVtTRVFfU1RBUlQgLSBidWNrZXRbbG93XV1bREVGX0NIQVJdID0gZGJjc0NvZGU7XG4gICAgICBlbHNlIGlmIChidWNrZXRbbG93XSA9PSBVTkFTU0lHTkVEKVxuICAgICAgICBidWNrZXRbbG93XSA9IGRiY3NDb2RlO1xuICAgIH07XG4gICAgREJDU0NvZGVjLnByb3RvdHlwZS5fc2V0RW5jb2RlU2VxdWVuY2UgPSBmdW5jdGlvbihzZXEsIGRiY3NDb2RlKSB7XG4gICAgICB2YXIgdUNvZGUgPSBzZXFbMF07XG4gICAgICB2YXIgYnVja2V0ID0gdGhpcy5fZ2V0RW5jb2RlQnVja2V0KHVDb2RlKTtcbiAgICAgIHZhciBsb3cgPSB1Q29kZSAmIDI1NTtcbiAgICAgIHZhciBub2RlO1xuICAgICAgaWYgKGJ1Y2tldFtsb3ddIDw9IFNFUV9TVEFSVCkge1xuICAgICAgICBub2RlID0gdGhpcy5lbmNvZGVUYWJsZVNlcVtTRVFfU1RBUlQgLSBidWNrZXRbbG93XV07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBub2RlID0ge307XG4gICAgICAgIGlmIChidWNrZXRbbG93XSAhPT0gVU5BU1NJR05FRCkgbm9kZVtERUZfQ0hBUl0gPSBidWNrZXRbbG93XTtcbiAgICAgICAgYnVja2V0W2xvd10gPSBTRVFfU1RBUlQgLSB0aGlzLmVuY29kZVRhYmxlU2VxLmxlbmd0aDtcbiAgICAgICAgdGhpcy5lbmNvZGVUYWJsZVNlcS5wdXNoKG5vZGUpO1xuICAgICAgfVxuICAgICAgZm9yICh2YXIgaiA9IDE7IGogPCBzZXEubGVuZ3RoIC0gMTsgaisrKSB7XG4gICAgICAgIHZhciBvbGRWYWwgPSBub2RlW3VDb2RlXTtcbiAgICAgICAgaWYgKHR5cGVvZiBvbGRWYWwgPT09IFwib2JqZWN0XCIpXG4gICAgICAgICAgbm9kZSA9IG9sZFZhbDtcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgbm9kZSA9IG5vZGVbdUNvZGVdID0ge307XG4gICAgICAgICAgaWYgKG9sZFZhbCAhPT0gdm9pZCAwKVxuICAgICAgICAgICAgbm9kZVtERUZfQ0hBUl0gPSBvbGRWYWw7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHVDb2RlID0gc2VxW3NlcS5sZW5ndGggLSAxXTtcbiAgICAgIG5vZGVbdUNvZGVdID0gZGJjc0NvZGU7XG4gICAgfTtcbiAgICBEQkNTQ29kZWMucHJvdG90eXBlLl9maWxsRW5jb2RlVGFibGUgPSBmdW5jdGlvbihub2RlSWR4LCBwcmVmaXgsIHNraXBFbmNvZGVDaGFycykge1xuICAgICAgdmFyIG5vZGUgPSB0aGlzLmRlY29kZVRhYmxlc1tub2RlSWR4XTtcbiAgICAgIHZhciBoYXNWYWx1ZXMgPSBmYWxzZTtcbiAgICAgIHZhciBzdWJOb2RlRW1wdHkgPSB7fTtcbiAgICAgIGZvciAodmFyIGkyID0gMDsgaTIgPCAyNTY7IGkyKyspIHtcbiAgICAgICAgdmFyIHVDb2RlID0gbm9kZVtpMl07XG4gICAgICAgIHZhciBtYkNvZGUgPSBwcmVmaXggKyBpMjtcbiAgICAgICAgaWYgKHNraXBFbmNvZGVDaGFyc1ttYkNvZGVdKVxuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICBpZiAodUNvZGUgPj0gMCkge1xuICAgICAgICAgIHRoaXMuX3NldEVuY29kZUNoYXIodUNvZGUsIG1iQ29kZSk7XG4gICAgICAgICAgaGFzVmFsdWVzID0gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIGlmICh1Q29kZSA8PSBOT0RFX1NUQVJUKSB7XG4gICAgICAgICAgdmFyIHN1Yk5vZGVJZHggPSBOT0RFX1NUQVJUIC0gdUNvZGU7XG4gICAgICAgICAgaWYgKCFzdWJOb2RlRW1wdHlbc3ViTm9kZUlkeF0pIHtcbiAgICAgICAgICAgIHZhciBuZXdQcmVmaXggPSBtYkNvZGUgPDwgOCA+Pj4gMDtcbiAgICAgICAgICAgIGlmICh0aGlzLl9maWxsRW5jb2RlVGFibGUoc3ViTm9kZUlkeCwgbmV3UHJlZml4LCBza2lwRW5jb2RlQ2hhcnMpKVxuICAgICAgICAgICAgICBoYXNWYWx1ZXMgPSB0cnVlO1xuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICBzdWJOb2RlRW1wdHlbc3ViTm9kZUlkeF0gPSB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmICh1Q29kZSA8PSBTRVFfU1RBUlQpIHtcbiAgICAgICAgICB0aGlzLl9zZXRFbmNvZGVTZXF1ZW5jZSh0aGlzLmRlY29kZVRhYmxlU2VxW1NFUV9TVEFSVCAtIHVDb2RlXSwgbWJDb2RlKTtcbiAgICAgICAgICBoYXNWYWx1ZXMgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gaGFzVmFsdWVzO1xuICAgIH07XG4gICAgZnVuY3Rpb24gREJDU0VuY29kZXIob3B0aW9ucywgY29kZWMpIHtcbiAgICAgIHRoaXMubGVhZFN1cnJvZ2F0ZSA9IC0xO1xuICAgICAgdGhpcy5zZXFPYmogPSB2b2lkIDA7XG4gICAgICB0aGlzLmVuY29kZVRhYmxlID0gY29kZWMuZW5jb2RlVGFibGU7XG4gICAgICB0aGlzLmVuY29kZVRhYmxlU2VxID0gY29kZWMuZW5jb2RlVGFibGVTZXE7XG4gICAgICB0aGlzLmRlZmF1bHRDaGFyU2luZ2xlQnl0ZSA9IGNvZGVjLmRlZkNoYXJTQjtcbiAgICAgIHRoaXMuZ2IxODAzMCA9IGNvZGVjLmdiMTgwMzA7XG4gICAgfVxuICAgIERCQ1NFbmNvZGVyLnByb3RvdHlwZS53cml0ZSA9IGZ1bmN0aW9uKHN0cikge1xuICAgICAgdmFyIG5ld0J1ZiA9IEJ1ZmZlcjIuYWxsb2Moc3RyLmxlbmd0aCAqICh0aGlzLmdiMTgwMzAgPyA0IDogMykpLCBsZWFkU3Vycm9nYXRlID0gdGhpcy5sZWFkU3Vycm9nYXRlLCBzZXFPYmogPSB0aGlzLnNlcU9iaiwgbmV4dENoYXIgPSAtMSwgaTIgPSAwLCBqID0gMDtcbiAgICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAgIGlmIChuZXh0Q2hhciA9PT0gLTEpIHtcbiAgICAgICAgICBpZiAoaTIgPT0gc3RyLmxlbmd0aCkgYnJlYWs7XG4gICAgICAgICAgdmFyIHVDb2RlID0gc3RyLmNoYXJDb2RlQXQoaTIrKyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdmFyIHVDb2RlID0gbmV4dENoYXI7XG4gICAgICAgICAgbmV4dENoYXIgPSAtMTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoNTUyOTYgPD0gdUNvZGUgJiYgdUNvZGUgPCA1NzM0NCkge1xuICAgICAgICAgIGlmICh1Q29kZSA8IDU2MzIwKSB7XG4gICAgICAgICAgICBpZiAobGVhZFN1cnJvZ2F0ZSA9PT0gLTEpIHtcbiAgICAgICAgICAgICAgbGVhZFN1cnJvZ2F0ZSA9IHVDb2RlO1xuICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGxlYWRTdXJyb2dhdGUgPSB1Q29kZTtcbiAgICAgICAgICAgICAgdUNvZGUgPSBVTkFTU0lHTkVEO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAobGVhZFN1cnJvZ2F0ZSAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgdUNvZGUgPSA2NTUzNiArIChsZWFkU3Vycm9nYXRlIC0gNTUyOTYpICogMTAyNCArICh1Q29kZSAtIDU2MzIwKTtcbiAgICAgICAgICAgICAgbGVhZFN1cnJvZ2F0ZSA9IC0xO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgdUNvZGUgPSBVTkFTU0lHTkVEO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmIChsZWFkU3Vycm9nYXRlICE9PSAtMSkge1xuICAgICAgICAgIG5leHRDaGFyID0gdUNvZGU7XG4gICAgICAgICAgdUNvZGUgPSBVTkFTU0lHTkVEO1xuICAgICAgICAgIGxlYWRTdXJyb2dhdGUgPSAtMTtcbiAgICAgICAgfVxuICAgICAgICB2YXIgZGJjc0NvZGUgPSBVTkFTU0lHTkVEO1xuICAgICAgICBpZiAoc2VxT2JqICE9PSB2b2lkIDAgJiYgdUNvZGUgIT0gVU5BU1NJR05FRCkge1xuICAgICAgICAgIHZhciByZXNDb2RlID0gc2VxT2JqW3VDb2RlXTtcbiAgICAgICAgICBpZiAodHlwZW9mIHJlc0NvZGUgPT09IFwib2JqZWN0XCIpIHtcbiAgICAgICAgICAgIHNlcU9iaiA9IHJlc0NvZGU7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiByZXNDb2RlID09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgICAgIGRiY3NDb2RlID0gcmVzQ29kZTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHJlc0NvZGUgPT0gdm9pZCAwKSB7XG4gICAgICAgICAgICByZXNDb2RlID0gc2VxT2JqW0RFRl9DSEFSXTtcbiAgICAgICAgICAgIGlmIChyZXNDb2RlICE9PSB2b2lkIDApIHtcbiAgICAgICAgICAgICAgZGJjc0NvZGUgPSByZXNDb2RlO1xuICAgICAgICAgICAgICBuZXh0Q2hhciA9IHVDb2RlO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgc2VxT2JqID0gdm9pZCAwO1xuICAgICAgICB9IGVsc2UgaWYgKHVDb2RlID49IDApIHtcbiAgICAgICAgICB2YXIgc3VidGFibGUgPSB0aGlzLmVuY29kZVRhYmxlW3VDb2RlID4+IDhdO1xuICAgICAgICAgIGlmIChzdWJ0YWJsZSAhPT0gdm9pZCAwKVxuICAgICAgICAgICAgZGJjc0NvZGUgPSBzdWJ0YWJsZVt1Q29kZSAmIDI1NV07XG4gICAgICAgICAgaWYgKGRiY3NDb2RlIDw9IFNFUV9TVEFSVCkge1xuICAgICAgICAgICAgc2VxT2JqID0gdGhpcy5lbmNvZGVUYWJsZVNlcVtTRVFfU1RBUlQgLSBkYmNzQ29kZV07XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGRiY3NDb2RlID09IFVOQVNTSUdORUQgJiYgdGhpcy5nYjE4MDMwKSB7XG4gICAgICAgICAgICB2YXIgaWR4ID0gZmluZElkeCh0aGlzLmdiMTgwMzAudUNoYXJzLCB1Q29kZSk7XG4gICAgICAgICAgICBpZiAoaWR4ICE9IC0xKSB7XG4gICAgICAgICAgICAgIHZhciBkYmNzQ29kZSA9IHRoaXMuZ2IxODAzMC5nYkNoYXJzW2lkeF0gKyAodUNvZGUgLSB0aGlzLmdiMTgwMzAudUNoYXJzW2lkeF0pO1xuICAgICAgICAgICAgICBuZXdCdWZbaisrXSA9IDEyOSArIE1hdGguZmxvb3IoZGJjc0NvZGUgLyAxMjYwMCk7XG4gICAgICAgICAgICAgIGRiY3NDb2RlID0gZGJjc0NvZGUgJSAxMjYwMDtcbiAgICAgICAgICAgICAgbmV3QnVmW2orK10gPSA0OCArIE1hdGguZmxvb3IoZGJjc0NvZGUgLyAxMjYwKTtcbiAgICAgICAgICAgICAgZGJjc0NvZGUgPSBkYmNzQ29kZSAlIDEyNjA7XG4gICAgICAgICAgICAgIG5ld0J1ZltqKytdID0gMTI5ICsgTWF0aC5mbG9vcihkYmNzQ29kZSAvIDEwKTtcbiAgICAgICAgICAgICAgZGJjc0NvZGUgPSBkYmNzQ29kZSAlIDEwO1xuICAgICAgICAgICAgICBuZXdCdWZbaisrXSA9IDQ4ICsgZGJjc0NvZGU7XG4gICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoZGJjc0NvZGUgPT09IFVOQVNTSUdORUQpXG4gICAgICAgICAgZGJjc0NvZGUgPSB0aGlzLmRlZmF1bHRDaGFyU2luZ2xlQnl0ZTtcbiAgICAgICAgaWYgKGRiY3NDb2RlIDwgMjU2KSB7XG4gICAgICAgICAgbmV3QnVmW2orK10gPSBkYmNzQ29kZTtcbiAgICAgICAgfSBlbHNlIGlmIChkYmNzQ29kZSA8IDY1NTM2KSB7XG4gICAgICAgICAgbmV3QnVmW2orK10gPSBkYmNzQ29kZSA+PiA4O1xuICAgICAgICAgIG5ld0J1ZltqKytdID0gZGJjc0NvZGUgJiAyNTU7XG4gICAgICAgIH0gZWxzZSBpZiAoZGJjc0NvZGUgPCAxNjc3NzIxNikge1xuICAgICAgICAgIG5ld0J1ZltqKytdID0gZGJjc0NvZGUgPj4gMTY7XG4gICAgICAgICAgbmV3QnVmW2orK10gPSBkYmNzQ29kZSA+PiA4ICYgMjU1O1xuICAgICAgICAgIG5ld0J1ZltqKytdID0gZGJjc0NvZGUgJiAyNTU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgbmV3QnVmW2orK10gPSBkYmNzQ29kZSA+Pj4gMjQ7XG4gICAgICAgICAgbmV3QnVmW2orK10gPSBkYmNzQ29kZSA+Pj4gMTYgJiAyNTU7XG4gICAgICAgICAgbmV3QnVmW2orK10gPSBkYmNzQ29kZSA+Pj4gOCAmIDI1NTtcbiAgICAgICAgICBuZXdCdWZbaisrXSA9IGRiY3NDb2RlICYgMjU1O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICB0aGlzLnNlcU9iaiA9IHNlcU9iajtcbiAgICAgIHRoaXMubGVhZFN1cnJvZ2F0ZSA9IGxlYWRTdXJyb2dhdGU7XG4gICAgICByZXR1cm4gbmV3QnVmLnNsaWNlKDAsIGopO1xuICAgIH07XG4gICAgREJDU0VuY29kZXIucHJvdG90eXBlLmVuZCA9IGZ1bmN0aW9uKCkge1xuICAgICAgaWYgKHRoaXMubGVhZFN1cnJvZ2F0ZSA9PT0gLTEgJiYgdGhpcy5zZXFPYmogPT09IHZvaWQgMClcbiAgICAgICAgcmV0dXJuO1xuICAgICAgdmFyIG5ld0J1ZiA9IEJ1ZmZlcjIuYWxsb2MoMTApLCBqID0gMDtcbiAgICAgIGlmICh0aGlzLnNlcU9iaikge1xuICAgICAgICB2YXIgZGJjc0NvZGUgPSB0aGlzLnNlcU9ialtERUZfQ0hBUl07XG4gICAgICAgIGlmIChkYmNzQ29kZSAhPT0gdm9pZCAwKSB7XG4gICAgICAgICAgaWYgKGRiY3NDb2RlIDwgMjU2KSB7XG4gICAgICAgICAgICBuZXdCdWZbaisrXSA9IGRiY3NDb2RlO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBuZXdCdWZbaisrXSA9IGRiY3NDb2RlID4+IDg7XG4gICAgICAgICAgICBuZXdCdWZbaisrXSA9IGRiY3NDb2RlICYgMjU1O1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNlcU9iaiA9IHZvaWQgMDtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLmxlYWRTdXJyb2dhdGUgIT09IC0xKSB7XG4gICAgICAgIG5ld0J1ZltqKytdID0gdGhpcy5kZWZhdWx0Q2hhclNpbmdsZUJ5dGU7XG4gICAgICAgIHRoaXMubGVhZFN1cnJvZ2F0ZSA9IC0xO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG5ld0J1Zi5zbGljZSgwLCBqKTtcbiAgICB9O1xuICAgIERCQ1NFbmNvZGVyLnByb3RvdHlwZS5maW5kSWR4ID0gZmluZElkeDtcbiAgICBmdW5jdGlvbiBEQkNTRGVjb2RlcihvcHRpb25zLCBjb2RlYykge1xuICAgICAgdGhpcy5ub2RlSWR4ID0gMDtcbiAgICAgIHRoaXMucHJldkJ5dGVzID0gW107XG4gICAgICB0aGlzLmRlY29kZVRhYmxlcyA9IGNvZGVjLmRlY29kZVRhYmxlcztcbiAgICAgIHRoaXMuZGVjb2RlVGFibGVTZXEgPSBjb2RlYy5kZWNvZGVUYWJsZVNlcTtcbiAgICAgIHRoaXMuZGVmYXVsdENoYXJVbmljb2RlID0gY29kZWMuZGVmYXVsdENoYXJVbmljb2RlO1xuICAgICAgdGhpcy5nYjE4MDMwID0gY29kZWMuZ2IxODAzMDtcbiAgICB9XG4gICAgREJDU0RlY29kZXIucHJvdG90eXBlLndyaXRlID0gZnVuY3Rpb24oYnVmKSB7XG4gICAgICB2YXIgbmV3QnVmID0gQnVmZmVyMi5hbGxvYyhidWYubGVuZ3RoICogMiksIG5vZGVJZHggPSB0aGlzLm5vZGVJZHgsIHByZXZCeXRlcyA9IHRoaXMucHJldkJ5dGVzLCBwcmV2T2Zmc2V0ID0gdGhpcy5wcmV2Qnl0ZXMubGVuZ3RoLCBzZXFTdGFydCA9IC10aGlzLnByZXZCeXRlcy5sZW5ndGgsIHVDb2RlO1xuICAgICAgZm9yICh2YXIgaTIgPSAwLCBqID0gMDsgaTIgPCBidWYubGVuZ3RoOyBpMisrKSB7XG4gICAgICAgIHZhciBjdXJCeXRlID0gaTIgPj0gMCA/IGJ1ZltpMl0gOiBwcmV2Qnl0ZXNbaTIgKyBwcmV2T2Zmc2V0XTtcbiAgICAgICAgdmFyIHVDb2RlID0gdGhpcy5kZWNvZGVUYWJsZXNbbm9kZUlkeF1bY3VyQnl0ZV07XG4gICAgICAgIGlmICh1Q29kZSA+PSAwKSB7XG4gICAgICAgIH0gZWxzZSBpZiAodUNvZGUgPT09IFVOQVNTSUdORUQpIHtcbiAgICAgICAgICB1Q29kZSA9IHRoaXMuZGVmYXVsdENoYXJVbmljb2RlLmNoYXJDb2RlQXQoMCk7XG4gICAgICAgICAgaTIgPSBzZXFTdGFydDtcbiAgICAgICAgfSBlbHNlIGlmICh1Q29kZSA9PT0gR0IxODAzMF9DT0RFKSB7XG4gICAgICAgICAgaWYgKGkyID49IDMpIHtcbiAgICAgICAgICAgIHZhciBwdHIgPSAoYnVmW2kyIC0gM10gLSAxMjkpICogMTI2MDAgKyAoYnVmW2kyIC0gMl0gLSA0OCkgKiAxMjYwICsgKGJ1ZltpMiAtIDFdIC0gMTI5KSAqIDEwICsgKGN1ckJ5dGUgLSA0OCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHZhciBwdHIgPSAocHJldkJ5dGVzW2kyIC0gMyArIHByZXZPZmZzZXRdIC0gMTI5KSAqIDEyNjAwICsgKChpMiAtIDIgPj0gMCA/IGJ1ZltpMiAtIDJdIDogcHJldkJ5dGVzW2kyIC0gMiArIHByZXZPZmZzZXRdKSAtIDQ4KSAqIDEyNjAgKyAoKGkyIC0gMSA+PSAwID8gYnVmW2kyIC0gMV0gOiBwcmV2Qnl0ZXNbaTIgLSAxICsgcHJldk9mZnNldF0pIC0gMTI5KSAqIDEwICsgKGN1ckJ5dGUgLSA0OCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHZhciBpZHggPSBmaW5kSWR4KHRoaXMuZ2IxODAzMC5nYkNoYXJzLCBwdHIpO1xuICAgICAgICAgIHVDb2RlID0gdGhpcy5nYjE4MDMwLnVDaGFyc1tpZHhdICsgcHRyIC0gdGhpcy5nYjE4MDMwLmdiQ2hhcnNbaWR4XTtcbiAgICAgICAgfSBlbHNlIGlmICh1Q29kZSA8PSBOT0RFX1NUQVJUKSB7XG4gICAgICAgICAgbm9kZUlkeCA9IE5PREVfU1RBUlQgLSB1Q29kZTtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfSBlbHNlIGlmICh1Q29kZSA8PSBTRVFfU1RBUlQpIHtcbiAgICAgICAgICB2YXIgc2VxID0gdGhpcy5kZWNvZGVUYWJsZVNlcVtTRVFfU1RBUlQgLSB1Q29kZV07XG4gICAgICAgICAgZm9yICh2YXIgayA9IDA7IGsgPCBzZXEubGVuZ3RoIC0gMTsgaysrKSB7XG4gICAgICAgICAgICB1Q29kZSA9IHNlcVtrXTtcbiAgICAgICAgICAgIG5ld0J1ZltqKytdID0gdUNvZGUgJiAyNTU7XG4gICAgICAgICAgICBuZXdCdWZbaisrXSA9IHVDb2RlID4+IDg7XG4gICAgICAgICAgfVxuICAgICAgICAgIHVDb2RlID0gc2VxW3NlcS5sZW5ndGggLSAxXTtcbiAgICAgICAgfSBlbHNlXG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiaWNvbnYtbGl0ZSBpbnRlcm5hbCBlcnJvcjogaW52YWxpZCBkZWNvZGluZyB0YWJsZSB2YWx1ZSBcIiArIHVDb2RlICsgXCIgYXQgXCIgKyBub2RlSWR4ICsgXCIvXCIgKyBjdXJCeXRlKTtcbiAgICAgICAgaWYgKHVDb2RlID49IDY1NTM2KSB7XG4gICAgICAgICAgdUNvZGUgLT0gNjU1MzY7XG4gICAgICAgICAgdmFyIHVDb2RlTGVhZCA9IDU1Mjk2IHwgdUNvZGUgPj4gMTA7XG4gICAgICAgICAgbmV3QnVmW2orK10gPSB1Q29kZUxlYWQgJiAyNTU7XG4gICAgICAgICAgbmV3QnVmW2orK10gPSB1Q29kZUxlYWQgPj4gODtcbiAgICAgICAgICB1Q29kZSA9IDU2MzIwIHwgdUNvZGUgJiAxMDIzO1xuICAgICAgICB9XG4gICAgICAgIG5ld0J1ZltqKytdID0gdUNvZGUgJiAyNTU7XG4gICAgICAgIG5ld0J1ZltqKytdID0gdUNvZGUgPj4gODtcbiAgICAgICAgbm9kZUlkeCA9IDA7XG4gICAgICAgIHNlcVN0YXJ0ID0gaTIgKyAxO1xuICAgICAgfVxuICAgICAgdGhpcy5ub2RlSWR4ID0gbm9kZUlkeDtcbiAgICAgIHRoaXMucHJldkJ5dGVzID0gc2VxU3RhcnQgPj0gMCA/IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGJ1Ziwgc2VxU3RhcnQpIDogcHJldkJ5dGVzLnNsaWNlKHNlcVN0YXJ0ICsgcHJldk9mZnNldCkuY29uY2F0KEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGJ1ZikpO1xuICAgICAgcmV0dXJuIG5ld0J1Zi5zbGljZSgwLCBqKS50b1N0cmluZyhcInVjczJcIik7XG4gICAgfTtcbiAgICBEQkNTRGVjb2Rlci5wcm90b3R5cGUuZW5kID0gZnVuY3Rpb24oKSB7XG4gICAgICB2YXIgcmV0ID0gXCJcIjtcbiAgICAgIHdoaWxlICh0aGlzLnByZXZCeXRlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHJldCArPSB0aGlzLmRlZmF1bHRDaGFyVW5pY29kZTtcbiAgICAgICAgdmFyIGJ5dGVzQXJyID0gdGhpcy5wcmV2Qnl0ZXMuc2xpY2UoMSk7XG4gICAgICAgIHRoaXMucHJldkJ5dGVzID0gW107XG4gICAgICAgIHRoaXMubm9kZUlkeCA9IDA7XG4gICAgICAgIGlmIChieXRlc0Fyci5sZW5ndGggPiAwKVxuICAgICAgICAgIHJldCArPSB0aGlzLndyaXRlKGJ5dGVzQXJyKTtcbiAgICAgIH1cbiAgICAgIHRoaXMucHJldkJ5dGVzID0gW107XG4gICAgICB0aGlzLm5vZGVJZHggPSAwO1xuICAgICAgcmV0dXJuIHJldDtcbiAgICB9O1xuICAgIGZ1bmN0aW9uIGZpbmRJZHgodGFibGUsIHZhbCkge1xuICAgICAgaWYgKHRhYmxlWzBdID4gdmFsKVxuICAgICAgICByZXR1cm4gLTE7XG4gICAgICB2YXIgbCA9IDAsIHIgPSB0YWJsZS5sZW5ndGg7XG4gICAgICB3aGlsZSAobCA8IHIgLSAxKSB7XG4gICAgICAgIHZhciBtaWQgPSBsICsgKHIgLSBsICsgMSA+PiAxKTtcbiAgICAgICAgaWYgKHRhYmxlW21pZF0gPD0gdmFsKVxuICAgICAgICAgIGwgPSBtaWQ7XG4gICAgICAgIGVsc2VcbiAgICAgICAgICByID0gbWlkO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGw7XG4gICAgfVxuICB9XG59KTtcblxuLy8gbm9kZV9tb2R1bGVzL3Jhdy1ib2R5L25vZGVfbW9kdWxlcy9pY29udi1saXRlL2VuY29kaW5ncy90YWJsZXMvc2hpZnRqaXMuanNvblxudmFyIHJlcXVpcmVfc2hpZnRqaXMgPSBfX2NvbW1vbkpTKHtcbiAgXCJub2RlX21vZHVsZXMvcmF3LWJvZHkvbm9kZV9tb2R1bGVzL2ljb252LWxpdGUvZW5jb2RpbmdzL3RhYmxlcy9zaGlmdGppcy5qc29uXCIoZXhwb3J0czIsIG1vZHVsZTIpIHtcbiAgICBtb2R1bGUyLmV4cG9ydHMgPSBbXG4gICAgICBbXCIwXCIsIFwiXFwwXCIsIDEyOF0sXG4gICAgICBbXCJhMVwiLCBcIlxcdUZGNjFcIiwgNjJdLFxuICAgICAgW1wiODE0MFwiLCBcIlxcdTMwMDBcXHUzMDAxXFx1MzAwMlxcdUZGMENcXHVGRjBFXFx1MzBGQlxcdUZGMUFcXHVGRjFCXFx1RkYxRlxcdUZGMDFcXHUzMDlCXFx1MzA5Q1xceEI0XFx1RkY0MFxceEE4XFx1RkYzRVxcdUZGRTNcXHVGRjNGXFx1MzBGRFxcdTMwRkVcXHUzMDlEXFx1MzA5RVxcdTMwMDNcXHU0RUREXFx1MzAwNVxcdTMwMDZcXHUzMDA3XFx1MzBGQ1xcdTIwMTVcXHUyMDEwXFx1RkYwRlxcdUZGM0NcXHVGRjVFXFx1MjIyNVxcdUZGNUNcXHUyMDI2XFx1MjAyNVxcdTIwMThcXHUyMDE5XFx1MjAxQ1xcdTIwMURcXHVGRjA4XFx1RkYwOVxcdTMwMTRcXHUzMDE1XFx1RkYzQlxcdUZGM0RcXHVGRjVCXFx1RkY1RFxcdTMwMDhcIiwgOSwgXCJcXHVGRjBCXFx1RkYwRFxceEIxXFx4RDdcIl0sXG4gICAgICBbXCI4MTgwXCIsIFwiXFx4RjdcXHVGRjFEXFx1MjI2MFxcdUZGMUNcXHVGRjFFXFx1MjI2NlxcdTIyNjdcXHUyMjFFXFx1MjIzNFxcdTI2NDJcXHUyNjQwXFx4QjBcXHUyMDMyXFx1MjAzM1xcdTIxMDNcXHVGRkU1XFx1RkYwNFxcdUZGRTBcXHVGRkUxXFx1RkYwNVxcdUZGMDNcXHVGRjA2XFx1RkYwQVxcdUZGMjBcXHhBN1xcdTI2MDZcXHUyNjA1XFx1MjVDQlxcdTI1Q0ZcXHUyNUNFXFx1MjVDN1xcdTI1QzZcXHUyNUExXFx1MjVBMFxcdTI1QjNcXHUyNUIyXFx1MjVCRFxcdTI1QkNcXHUyMDNCXFx1MzAxMlxcdTIxOTJcXHUyMTkwXFx1MjE5MVxcdTIxOTNcXHUzMDEzXCJdLFxuICAgICAgW1wiODFiOFwiLCBcIlxcdTIyMDhcXHUyMjBCXFx1MjI4NlxcdTIyODdcXHUyMjgyXFx1MjI4M1xcdTIyMkFcXHUyMjI5XCJdLFxuICAgICAgW1wiODFjOFwiLCBcIlxcdTIyMjdcXHUyMjI4XFx1RkZFMlxcdTIxRDJcXHUyMUQ0XFx1MjIwMFxcdTIyMDNcIl0sXG4gICAgICBbXCI4MWRhXCIsIFwiXFx1MjIyMFxcdTIyQTVcXHUyMzEyXFx1MjIwMlxcdTIyMDdcXHUyMjYxXFx1MjI1MlxcdTIyNkFcXHUyMjZCXFx1MjIxQVxcdTIyM0RcXHUyMjFEXFx1MjIzNVxcdTIyMkJcXHUyMjJDXCJdLFxuICAgICAgW1wiODFmMFwiLCBcIlxcdTIxMkJcXHUyMDMwXFx1MjY2RlxcdTI2NkRcXHUyNjZBXFx1MjAyMFxcdTIwMjFcXHhCNlwiXSxcbiAgICAgIFtcIjgxZmNcIiwgXCJcXHUyNUVGXCJdLFxuICAgICAgW1wiODI0ZlwiLCBcIlxcdUZGMTBcIiwgOV0sXG4gICAgICBbXCI4MjYwXCIsIFwiXFx1RkYyMVwiLCAyNV0sXG4gICAgICBbXCI4MjgxXCIsIFwiXFx1RkY0MVwiLCAyNV0sXG4gICAgICBbXCI4MjlmXCIsIFwiXFx1MzA0MVwiLCA4Ml0sXG4gICAgICBbXCI4MzQwXCIsIFwiXFx1MzBBMVwiLCA2Ml0sXG4gICAgICBbXCI4MzgwXCIsIFwiXFx1MzBFMFwiLCAyMl0sXG4gICAgICBbXCI4MzlmXCIsIFwiXFx1MDM5MVwiLCAxNiwgXCJcXHUwM0EzXCIsIDZdLFxuICAgICAgW1wiODNiZlwiLCBcIlxcdTAzQjFcIiwgMTYsIFwiXFx1MDNDM1wiLCA2XSxcbiAgICAgIFtcIjg0NDBcIiwgXCJcXHUwNDEwXCIsIDUsIFwiXFx1MDQwMVxcdTA0MTZcIiwgMjVdLFxuICAgICAgW1wiODQ3MFwiLCBcIlxcdTA0MzBcIiwgNSwgXCJcXHUwNDUxXFx1MDQzNlwiLCA3XSxcbiAgICAgIFtcIjg0ODBcIiwgXCJcXHUwNDNFXCIsIDE3XSxcbiAgICAgIFtcIjg0OWZcIiwgXCJcXHUyNTAwXFx1MjUwMlxcdTI1MENcXHUyNTEwXFx1MjUxOFxcdTI1MTRcXHUyNTFDXFx1MjUyQ1xcdTI1MjRcXHUyNTM0XFx1MjUzQ1xcdTI1MDFcXHUyNTAzXFx1MjUwRlxcdTI1MTNcXHUyNTFCXFx1MjUxN1xcdTI1MjNcXHUyNTMzXFx1MjUyQlxcdTI1M0JcXHUyNTRCXFx1MjUyMFxcdTI1MkZcXHUyNTI4XFx1MjUzN1xcdTI1M0ZcXHUyNTFEXFx1MjUzMFxcdTI1MjVcXHUyNTM4XFx1MjU0MlwiXSxcbiAgICAgIFtcIjg3NDBcIiwgXCJcXHUyNDYwXCIsIDE5LCBcIlxcdTIxNjBcIiwgOV0sXG4gICAgICBbXCI4NzVmXCIsIFwiXFx1MzM0OVxcdTMzMTRcXHUzMzIyXFx1MzM0RFxcdTMzMThcXHUzMzI3XFx1MzMwM1xcdTMzMzZcXHUzMzUxXFx1MzM1N1xcdTMzMERcXHUzMzI2XFx1MzMyM1xcdTMzMkJcXHUzMzRBXFx1MzMzQlxcdTMzOUNcXHUzMzlEXFx1MzM5RVxcdTMzOEVcXHUzMzhGXFx1MzNDNFxcdTMzQTFcIl0sXG4gICAgICBbXCI4NzdlXCIsIFwiXFx1MzM3QlwiXSxcbiAgICAgIFtcIjg3ODBcIiwgXCJcXHUzMDFEXFx1MzAxRlxcdTIxMTZcXHUzM0NEXFx1MjEyMVxcdTMyQTRcIiwgNCwgXCJcXHUzMjMxXFx1MzIzMlxcdTMyMzlcXHUzMzdFXFx1MzM3RFxcdTMzN0NcXHUyMjUyXFx1MjI2MVxcdTIyMkJcXHUyMjJFXFx1MjIxMVxcdTIyMUFcXHUyMkE1XFx1MjIyMFxcdTIyMUZcXHUyMkJGXFx1MjIzNVxcdTIyMjlcXHUyMjJBXCJdLFxuICAgICAgW1wiODg5ZlwiLCBcIlxcdTRFOUNcXHU1NTE2XFx1NUEwM1xcdTk2M0ZcXHU1NEMwXFx1NjExQlxcdTYzMjhcXHU1OUY2XFx1OTAyMlxcdTg0NzVcXHU4MzFDXFx1N0E1MFxcdTYwQUFcXHU2M0UxXFx1NkUyNVxcdTY1RURcXHU4NDY2XFx1ODJBNlxcdTlCRjVcXHU2ODkzXFx1NTcyN1xcdTY1QTFcXHU2MjcxXFx1NUI5QlxcdTU5RDBcXHU4NjdCXFx1OThGNFxcdTdENjJcXHU3REJFXFx1OUI4RVxcdTYyMTZcXHU3QzlGXFx1ODhCN1xcdTVCODlcXHU1RUI1XFx1NjMwOVxcdTY2OTdcXHU2ODQ4XFx1OTVDN1xcdTk3OERcXHU2NzRGXFx1NEVFNVxcdTRGMEFcXHU0RjREXFx1NEY5RFxcdTUwNDlcXHU1NkYyXFx1NTkzN1xcdTU5RDRcXHU1QTAxXFx1NUMwOVxcdTYwREZcXHU2MTBGXFx1NjE3MFxcdTY2MTNcXHU2OTA1XFx1NzBCQVxcdTc1NEZcXHU3NTcwXFx1NzlGQlxcdTdEQURcXHU3REVGXFx1ODBDM1xcdTg0MEVcXHU4ODYzXFx1OEIwMlxcdTkwNTVcXHU5MDdBXFx1NTMzQlxcdTRFOTVcXHU0RUE1XFx1NTdERlxcdTgwQjJcXHU5MEMxXFx1NzhFRlxcdTRFMDBcXHU1OEYxXFx1NkVBMlxcdTkwMzhcXHU3QTMyXFx1ODMyOFxcdTgyOEJcXHU5QzJGXFx1NTE0MVxcdTUzNzBcXHU1NEJEXFx1NTRFMVxcdTU2RTBcXHU1OUZCXFx1NUYxNVxcdTk4RjJcXHU2REVCXFx1ODBFNFxcdTg1MkRcIl0sXG4gICAgICBbXCI4OTQwXCIsIFwiXFx1OTY2MlxcdTk2NzBcXHU5NkEwXFx1OTdGQlxcdTU0MEJcXHU1M0YzXFx1NUI4N1xcdTcwQ0ZcXHU3RkJEXFx1OEZDMlxcdTk2RThcXHU1MzZGXFx1OUQ1Q1xcdTdBQkFcXHU0RTExXFx1Nzg5M1xcdTgxRkNcXHU2RTI2XFx1NTYxOFxcdTU1MDRcXHU2QjFEXFx1ODUxQVxcdTlDM0JcXHU1OUU1XFx1NTNBOVxcdTZENjZcXHU3NERDXFx1OTU4RlxcdTU2NDJcXHU0RTkxXFx1OTA0QlxcdTk2RjJcXHU4MzRGXFx1OTkwQ1xcdTUzRTFcXHU1NUI2XFx1NUIzMFxcdTVGNzFcXHU2NjIwXFx1NjZGM1xcdTY4MDRcXHU2QzM4XFx1NkNGM1xcdTZEMjlcXHU3NDVCXFx1NzZDOFxcdTdBNEVcXHU5ODM0XFx1ODJGMVxcdTg4NUJcXHU4QTYwXFx1OTJFRFxcdTZEQjJcXHU3NUFCXFx1NzZDQVxcdTk5QzVcXHU2MEE2XFx1OEIwMVxcdThEOEFcXHU5NUIyXFx1Njk4RVxcdTUzQURcXHU1MTg2XCJdLFxuICAgICAgW1wiODk4MFwiLCBcIlxcdTU3MTJcXHU1ODMwXFx1NTk0NFxcdTVCQjRcXHU1RUY2XFx1NjAyOFxcdTYzQTlcXHU2M0Y0XFx1NkNCRlxcdTZGMTRcXHU3MDhFXFx1NzExNFxcdTcxNTlcXHU3MUQ1XFx1NzMzRlxcdTdFMDFcXHU4Mjc2XFx1ODJEMVxcdTg1OTdcXHU5MDYwXFx1OTI1QlxcdTlEMUJcXHU1ODY5XFx1NjVCQ1xcdTZDNUFcXHU3NTI1XFx1NTFGOVxcdTU5MkVcXHU1OTY1XFx1NUY4MFxcdTVGRENcXHU2MkJDXFx1NjVGQVxcdTZBMkFcXHU2QjI3XFx1NkJCNFxcdTczOEJcXHU3RkMxXFx1ODk1NlxcdTlEMkNcXHU5RDBFXFx1OUVDNFxcdTVDQTFcXHU2Qzk2XFx1ODM3QlxcdTUxMDRcXHU1QzRCXFx1NjFCNlxcdTgxQzZcXHU2ODc2XFx1NzI2MVxcdTRFNTlcXHU0RkZBXFx1NTM3OFxcdTYwNjlcXHU2RTI5XFx1N0E0RlxcdTk3RjNcXHU0RTBCXFx1NTMxNlxcdTRFRUVcXHU0RjU1XFx1NEYzRFxcdTRGQTFcXHU0RjczXFx1NTJBMFxcdTUzRUZcXHU1NjA5XFx1NTkwRlxcdTVBQzFcXHU1QkI2XFx1NUJFMVxcdTc5RDFcXHU2Njg3XFx1Njc5Q1xcdTY3QjZcXHU2QjRDXFx1NkNCM1xcdTcwNkJcXHU3M0MyXFx1Nzk4RFxcdTc5QkVcXHU3QTNDXFx1N0I4N1xcdTgyQjFcXHU4MkRCXFx1ODMwNFxcdTgzNzdcXHU4M0VGXFx1ODNEM1xcdTg3NjZcXHU4QUIyXFx1NTYyOVxcdThDQThcXHU4RkU2XFx1OTA0RVxcdTk3MUVcXHU4NjhBXFx1NEZDNFxcdTVDRThcXHU2MjExXFx1NzI1OVxcdTc1M0JcXHU4MUU1XFx1ODJCRFxcdTg2RkVcXHU4Q0MwXFx1OTZDNVxcdTk5MTNcXHU5OUQ1XFx1NEVDQlxcdTRGMUFcXHU4OUUzXFx1NTZERVxcdTU4NEFcXHU1OENBXFx1NUVGQlxcdTVGRUJcXHU2MDJBXFx1NjA5NFxcdTYwNjJcXHU2MUQwXFx1NjIxMlxcdTYyRDBcXHU2NTM5XCJdLFxuICAgICAgW1wiOGE0MFwiLCBcIlxcdTlCNDFcXHU2NjY2XFx1NjhCMFxcdTZENzdcXHU3MDcwXFx1NzU0Q1xcdTc2ODZcXHU3RDc1XFx1ODJBNVxcdTg3RjlcXHU5NThCXFx1OTY4RVxcdThDOURcXHU1MUYxXFx1NTJCRVxcdTU5MTZcXHU1NEIzXFx1NUJCM1xcdTVEMTZcXHU2MTY4XFx1Njk4MlxcdTZEQUZcXHU3ODhEXFx1ODRDQlxcdTg4NTdcXHU4QTcyXFx1OTNBN1xcdTlBQjhcXHU2RDZDXFx1OTlBOFxcdTg2RDlcXHU1N0EzXFx1NjdGRlxcdTg2Q0VcXHU5MjBFXFx1NTI4M1xcdTU2ODdcXHU1NDA0XFx1NUVEM1xcdTYyRTFcXHU2NEI5XFx1NjgzQ1xcdTY4MzhcXHU2QkJCXFx1NzM3MlxcdTc4QkFcXHU3QTZCXFx1ODk5QVxcdTg5RDJcXHU4RDZCXFx1OEYwM1xcdTkwRURcXHU5NUEzXFx1OTY5NFxcdTk3NjlcXHU1QjY2XFx1NUNCM1xcdTY5N0RcXHU5ODREXFx1OTg0RVxcdTYzOUJcXHU3QjIwXFx1NkEyQlwiXSxcbiAgICAgIFtcIjhhODBcIiwgXCJcXHU2QTdGXFx1NjhCNlxcdTlDMERcXHU2RjVGXFx1NTI3MlxcdTU1OURcXHU2MDcwXFx1NjJFQ1xcdTZEM0JcXHU2RTA3XFx1NkVEMVxcdTg0NUJcXHU4OTEwXFx1OEY0NFxcdTRFMTRcXHU5QzM5XFx1NTNGNlxcdTY5MUJcXHU2QTNBXFx1OTc4NFxcdTY4MkFcXHU1MTVDXFx1N0FDM1xcdTg0QjJcXHU5MURDXFx1OTM4Q1xcdTU2NUJcXHU5RDI4XFx1NjgyMlxcdTgzMDVcXHU4NDMxXFx1N0NBNVxcdTUyMDhcXHU4MkM1XFx1NzRFNlxcdTRFN0VcXHU0RjgzXFx1NTFBMFxcdTVCRDJcXHU1MjBBXFx1NTJEOFxcdTUyRTdcXHU1REZCXFx1NTU5QVxcdTU4MkFcXHU1OUU2XFx1NUI4Q1xcdTVCOThcXHU1QkRCXFx1NUU3MlxcdTVFNzlcXHU2MEEzXFx1NjExRlxcdTYxNjNcXHU2MUJFXFx1NjNEQlxcdTY1NjJcXHU2N0QxXFx1Njg1M1xcdTY4RkFcXHU2QjNFXFx1NkI1M1xcdTZDNTdcXHU2RjIyXFx1NkY5N1xcdTZGNDVcXHU3NEIwXFx1NzUxOFxcdTc2RTNcXHU3NzBCXFx1N0FGRlxcdTdCQTFcXHU3QzIxXFx1N0RFOVxcdTdGMzZcXHU3RkYwXFx1ODA5RFxcdTgyNjZcXHU4MzlFXFx1ODlCM1xcdThBQ0NcXHU4Q0FCXFx1OTA4NFxcdTk0NTFcXHU5NTkzXFx1OTU5MVxcdTk1QTJcXHU5NjY1XFx1OTdEM1xcdTk5MjhcXHU4MjE4XFx1NEUzOFxcdTU0MkJcXHU1Q0I4XFx1NURDQ1xcdTczQTlcXHU3NjRDXFx1NzczQ1xcdTVDQTlcXHU3RkVCXFx1OEQwQlxcdTk2QzFcXHU5ODExXFx1OTg1NFxcdTk4NThcXHU0RjAxXFx1NEYwRVxcdTUzNzFcXHU1NTlDXFx1NTY2OFxcdTU3RkFcXHU1OTQ3XFx1NUIwOVxcdTVCQzRcXHU1QzkwXFx1NUUwQ1xcdTVFN0VcXHU1RkNDXFx1NjNFRVxcdTY3M0FcXHU2NUQ3XFx1NjVFMlxcdTY3MUZcXHU2OENCXFx1NjhDNFwiXSxcbiAgICAgIFtcIjhiNDBcIiwgXCJcXHU2QTVGXFx1NUUzMFxcdTZCQzVcXHU2QzE3XFx1NkM3RFxcdTc1N0ZcXHU3OTQ4XFx1NUI2M1xcdTdBMDBcXHU3RDAwXFx1NUZCRFxcdTg5OEZcXHU4QTE4XFx1OENCNFxcdThENzdcXHU4RUNDXFx1OEYxRFxcdTk4RTJcXHU5QTBFXFx1OUIzQ1xcdTRFODBcXHU1MDdEXFx1NTEwMFxcdTU5OTNcXHU1QjlDXFx1NjIyRlxcdTYyODBcXHU2NEVDXFx1NkIzQVxcdTcyQTBcXHU3NTkxXFx1Nzk0N1xcdTdGQTlcXHU4N0ZCXFx1OEFCQ1xcdThCNzBcXHU2M0FDXFx1ODNDQVxcdTk3QTBcXHU1NDA5XFx1NTQwM1xcdTU1QUJcXHU2ODU0XFx1NkE1OFxcdThBNzBcXHU3ODI3XFx1Njc3NVxcdTlFQ0RcXHU1Mzc0XFx1NUJBMlxcdTgxMUFcXHU4NjUwXFx1OTAwNlxcdTRFMThcXHU0RTQ1XFx1NEVDN1xcdTRGMTFcXHU1M0NBXFx1NTQzOFxcdTVCQUVcXHU1RjEzXFx1NjAyNVxcdTY1NTFcIl0sXG4gICAgICBbXCI4YjgwXCIsIFwiXFx1NjczRFxcdTZDNDJcXHU2QzcyXFx1NkNFM1xcdTcwNzhcXHU3NDAzXFx1N0E3NlxcdTdBQUVcXHU3QjA4XFx1N0QxQVxcdTdDRkVcXHU3RDY2XFx1NjVFN1xcdTcyNUJcXHU1M0JCXFx1NUM0NVxcdTVERThcXHU2MkQyXFx1NjJFMFxcdTYzMTlcXHU2RTIwXFx1ODY1QVxcdThBMzFcXHU4REREXFx1OTJGOFxcdTZGMDFcXHU3OUE2XFx1OUI1QVxcdTRFQThcXHU0RUFCXFx1NEVBQ1xcdTRGOUJcXHU0RkEwXFx1NTBEMVxcdTUxNDdcXHU3QUY2XFx1NTE3MVxcdTUxRjZcXHU1MzU0XFx1NTMyMVxcdTUzN0ZcXHU1M0VCXFx1NTVBQ1xcdTU4ODNcXHU1Q0UxXFx1NUYzN1xcdTVGNEFcXHU2MDJGXFx1NjA1MFxcdTYwNkRcXHU2MzFGXFx1NjU1OVxcdTZBNEJcXHU2Q0MxXFx1NzJDMlxcdTcyRURcXHU3N0VGXFx1ODBGOFxcdTgxMDVcXHU4MjA4XFx1ODU0RVxcdTkwRjdcXHU5M0UxXFx1OTdGRlxcdTk5NTdcXHU5QTVBXFx1NEVGMFxcdTUxRERcXHU1QzJEXFx1NjY4MVxcdTY5NkRcXHU1QzQwXFx1NjZGMlxcdTY5NzVcXHU3Mzg5XFx1Njg1MFxcdTdDODFcXHU1MEM1XFx1NTJFNFxcdTU3NDdcXHU1REZFXFx1OTMyNlxcdTY1QTRcXHU2QjIzXFx1NkIzRFxcdTc0MzRcXHU3OTgxXFx1NzlCRFxcdTdCNEJcXHU3RENBXFx1ODJCOVxcdTgzQ0NcXHU4ODdGXFx1ODk1RlxcdThCMzlcXHU4RkQxXFx1OTFEMVxcdTU0MUZcXHU5MjgwXFx1NEU1RFxcdTUwMzZcXHU1M0U1XFx1NTMzQVxcdTcyRDdcXHU3Mzk2XFx1NzdFOVxcdTgyRTZcXHU4RUFGXFx1OTlDNlxcdTk5QzhcXHU5OUQyXFx1NTE3N1xcdTYxMUFcXHU4NjVFXFx1NTVCMFxcdTdBN0FcXHU1MDc2XFx1NUJEM1xcdTkwNDdcXHU5Njg1XFx1NEUzMlxcdTZBREJcXHU5MUU3XFx1NUM1MVxcdTVDNDhcIl0sXG4gICAgICBbXCI4YzQwXCIsIFwiXFx1NjM5OFxcdTdBOUZcXHU2QzkzXFx1OTc3NFxcdThGNjFcXHU3QUFBXFx1NzE4QVxcdTk2ODhcXHU3QzgyXFx1NjgxN1xcdTdFNzBcXHU2ODUxXFx1OTM2Q1xcdTUyRjJcXHU1NDFCXFx1ODVBQlxcdThBMTNcXHU3RkE0XFx1OEVDRFxcdTkwRTFcXHU1MzY2XFx1ODg4OFxcdTc5NDFcXHU0RkMyXFx1NTBCRVxcdTUyMTFcXHU1MTQ0XFx1NTU1M1xcdTU3MkRcXHU3M0VBXFx1NTc4QlxcdTU5NTFcXHU1RjYyXFx1NUY4NFxcdTYwNzVcXHU2MTc2XFx1NjE2N1xcdTYxQTlcXHU2M0IyXFx1NjQzQVxcdTY1NkNcXHU2NjZGXFx1Njg0MlxcdTZFMTNcXHU3NTY2XFx1N0EzRFxcdTdDRkJcXHU3RDRDXFx1N0Q5OVxcdTdFNEJcXHU3RjZCXFx1ODMwRVxcdTgzNEFcXHU4NkNEXFx1OEEwOFxcdThBNjNcXHU4QjY2XFx1OEVGRFxcdTk4MUFcXHU5RDhGXFx1ODJCOFxcdThGQ0VcXHU5QkU4XCJdLFxuICAgICAgW1wiOGM4MFwiLCBcIlxcdTUyODdcXHU2MjFGXFx1NjQ4M1xcdTZGQzBcXHU5Njk5XFx1Njg0MVxcdTUwOTFcXHU2QjIwXFx1NkM3QVxcdTZGNTRcXHU3QTc0XFx1N0Q1MFxcdTg4NDBcXHU4QTIzXFx1NjcwOFxcdTRFRjZcXHU1MDM5XFx1NTAyNlxcdTUwNjVcXHU1MTdDXFx1NTIzOFxcdTUyNjNcXHU1NUE3XFx1NTcwRlxcdTU4MDVcXHU1QUNDXFx1NUVGQVxcdTYxQjJcXHU2MUY4XFx1NjJGM1xcdTYzNzJcXHU2OTFDXFx1NkEyOVxcdTcyN0RcXHU3MkFDXFx1NzMyRVxcdTc4MTRcXHU3ODZGXFx1N0Q3OVxcdTc3MENcXHU4MEE5XFx1ODk4QlxcdThCMTlcXHU4Q0UyXFx1OEVEMlxcdTkwNjNcXHU5Mzc1XFx1OTY3QVxcdTk4NTVcXHU5QTEzXFx1OUU3OFxcdTUxNDNcXHU1MzlGXFx1NTNCM1xcdTVFN0JcXHU1RjI2XFx1NkUxQlxcdTZFOTBcXHU3Mzg0XFx1NzNGRVxcdTdENDNcXHU4MjM3XFx1OEEwMFxcdThBRkFcXHU5NjUwXFx1NEU0RVxcdTUwMEJcXHU1M0U0XFx1NTQ3Q1xcdTU2RkFcXHU1OUQxXFx1NUI2NFxcdTVERjFcXHU1RUFCXFx1NUYyN1xcdTYyMzhcXHU2NTQ1XFx1NjdBRlxcdTZFNTZcXHU3MkQwXFx1N0NDQVxcdTg4QjRcXHU4MEExXFx1ODBFMVxcdTgzRjBcXHU4NjRFXFx1OEE4N1xcdThERThcXHU5MjM3XFx1OTZDN1xcdTk4NjdcXHU5RjEzXFx1NEU5NFxcdTRFOTJcXHU0RjBEXFx1NTM0OFxcdTU0NDlcXHU1NDNFXFx1NUEyRlxcdTVGOENcXHU1RkExXFx1NjA5RlxcdTY4QTdcXHU2QThFXFx1NzQ1QVxcdTc4ODFcXHU4QTlFXFx1OEFBNFxcdThCNzdcXHU5MTkwXFx1NEU1RVxcdTlCQzlcXHU0RUE0XFx1NEY3Q1xcdTRGQUZcXHU1MDE5XFx1NTAxNlxcdTUxNDlcXHU1MTZDXFx1NTI5RlxcdTUyQjlcXHU1MkZFXFx1NTM5QVxcdTUzRTNcXHU1NDExXCJdLFxuICAgICAgW1wiOGQ0MFwiLCBcIlxcdTU0MEVcXHU1NTg5XFx1NTc1MVxcdTU3QTJcXHU1OTdEXFx1NUI1NFxcdTVCNURcXHU1QjhGXFx1NURFNVxcdTVERTdcXHU1REY3XFx1NUU3OFxcdTVFODNcXHU1RTlBXFx1NUVCN1xcdTVGMThcXHU2MDUyXFx1NjE0Q1xcdTYyOTdcXHU2MkQ4XFx1NjNBN1xcdTY1M0JcXHU2NjAyXFx1NjY0M1xcdTY2RjRcXHU2NzZEXFx1NjgyMVxcdTY4OTdcXHU2OUNCXFx1NkM1RlxcdTZEMkFcXHU2RDY5XFx1NkUyRlxcdTZFOURcXHU3NTMyXFx1NzY4N1xcdTc4NkNcXHU3QTNGXFx1N0NFMFxcdTdEMDVcXHU3RDE4XFx1N0Q1RVxcdTdEQjFcXHU4MDE1XFx1ODAwM1xcdTgwQUZcXHU4MEIxXFx1ODE1NFxcdTgxOEZcXHU4MjJBXFx1ODM1MlxcdTg4NENcXHU4ODYxXFx1OEIxQlxcdThDQTJcXHU4Q0ZDXFx1OTBDQVxcdTkxNzVcXHU5MjcxXFx1NzgzRlxcdTkyRkNcXHU5NUE0XFx1OTY0RFwiXSxcbiAgICAgIFtcIjhkODBcIiwgXCJcXHU5ODA1XFx1OTk5OVxcdTlBRDhcXHU5RDNCXFx1NTI1QlxcdTUyQUJcXHU1M0Y3XFx1NTQwOFxcdTU4RDVcXHU2MkY3XFx1NkZFMFxcdThDNkFcXHU4RjVGXFx1OUVCOVxcdTUxNEJcXHU1MjNCXFx1NTQ0QVxcdTU2RkRcXHU3QTQwXFx1OTE3N1xcdTlENjBcXHU5RUQyXFx1NzM0NFxcdTZGMDlcXHU4MTcwXFx1NzUxMVxcdTVGRkRcXHU2MERBXFx1OUFBOFxcdTcyREJcXHU4RkJDXFx1NkI2NFxcdTk4MDNcXHU0RUNBXFx1NTZGMFxcdTU3NjRcXHU1OEJFXFx1NUE1QVxcdTYwNjhcXHU2MUM3XFx1NjYwRlxcdTY2MDZcXHU2ODM5XFx1NjhCMVxcdTZERjdcXHU3NUQ1XFx1N0QzQVxcdTgyNkVcXHU5QjQyXFx1NEU5QlxcdTRGNTBcXHU1M0M5XFx1NTUwNlxcdTVENkZcXHU1REU2XFx1NURFRVxcdTY3RkJcXHU2Qzk5XFx1NzQ3M1xcdTc4MDJcXHU4QTUwXFx1OTM5NlxcdTg4REZcXHU1NzUwXFx1NUVBN1xcdTYzMkJcXHU1MEI1XFx1NTBBQ1xcdTUxOERcXHU2NzAwXFx1NTRDOVxcdTU4NUVcXHU1OUJCXFx1NUJCMFxcdTVGNjlcXHU2MjREXFx1NjNBMVxcdTY4M0RcXHU2QjczXFx1NkUwOFxcdTcwN0RcXHU5MUM3XFx1NzI4MFxcdTc4MTVcXHU3ODI2XFx1Nzk2RFxcdTY1OEVcXHU3RDMwXFx1ODNEQ1xcdTg4QzFcXHU4RjA5XFx1OTY5QlxcdTUyNjRcXHU1NzI4XFx1Njc1MFxcdTdGNkFcXHU4Q0ExXFx1NTFCNFxcdTU3NDJcXHU5NjJBXFx1NTgzQVxcdTY5OEFcXHU4MEI0XFx1NTRCMlxcdTVEMEVcXHU1N0ZDXFx1Nzg5NVxcdTlERkFcXHU0RjVDXFx1NTI0QVxcdTU0OEJcXHU2NDNFXFx1NjYyOFxcdTY3MTRcXHU2N0Y1XFx1N0E4NFxcdTdCNTZcXHU3RDIyXFx1OTMyRlxcdTY4NUNcXHU5QkFEXFx1N0IzOVxcdTUzMTlcXHU1MThBXFx1NTIzN1wiXSxcbiAgICAgIFtcIjhlNDBcIiwgXCJcXHU1QkRGXFx1NjJGNlxcdTY0QUVcXHU2NEU2XFx1NjcyRFxcdTZCQkFcXHU4NUE5XFx1OTZEMVxcdTc2OTBcXHU5QkQ2XFx1NjM0Q1xcdTkzMDZcXHU5QkFCXFx1NzZCRlxcdTY2NTJcXHU0RTA5XFx1NTA5OFxcdTUzQzJcXHU1QzcxXFx1NjBFOFxcdTY0OTJcXHU2NTYzXFx1Njg1RlxcdTcxRTZcXHU3M0NBXFx1NzUyM1xcdTdCOTdcXHU3RTgyXFx1ODY5NVxcdThCODNcXHU4Q0RCXFx1OTE3OFxcdTk5MTBcXHU2NUFDXFx1NjZBQlxcdTZCOEJcXHU0RUQ1XFx1NEVENFxcdTRGM0FcXHU0RjdGXFx1NTIzQVxcdTUzRjhcXHU1M0YyXFx1NTVFM1xcdTU2REJcXHU1OEVCXFx1NTlDQlxcdTU5QzlcXHU1OUZGXFx1NUI1MFxcdTVDNERcXHU1RTAyXFx1NUUyQlxcdTVGRDdcXHU2MDFEXFx1NjMwN1xcdTY1MkZcXHU1QjVDXFx1NjVBRlxcdTY1QkRcXHU2NUU4XFx1Njc5RFxcdTZCNjJcIl0sXG4gICAgICBbXCI4ZTgwXCIsIFwiXFx1NkI3QlxcdTZDMEZcXHU3MzQ1XFx1Nzk0OVxcdTc5QzFcXHU3Q0Y4XFx1N0QxOVxcdTdEMkJcXHU4MEEyXFx1ODEwMlxcdTgxRjNcXHU4OTk2XFx1OEE1RVxcdThBNjlcXHU4QTY2XFx1OEE4Q1xcdThBRUVcXHU4Q0M3XFx1OENEQ1xcdTk2Q0NcXHU5OEZDXFx1NkI2RlxcdTRFOEJcXHU0RjNDXFx1NEY4RFxcdTUxNTBcXHU1QjU3XFx1NUJGQVxcdTYxNDhcXHU2MzAxXFx1NjY0MlxcdTZCMjFcXHU2RUNCXFx1NkNCQlxcdTcyM0VcXHU3NEJEXFx1NzVENFxcdTc4QzFcXHU3OTNBXFx1ODAwQ1xcdTgwMzNcXHU4MUVBXFx1ODQ5NFxcdThGOUVcXHU2QzUwXFx1OUU3RlxcdTVGMEZcXHU4QjU4XFx1OUQyQlxcdTdBRkFcXHU4RUY4XFx1NUI4RFxcdTk2RUJcXHU0RTAzXFx1NTNGMVxcdTU3RjdcXHU1OTMxXFx1NUFDOVxcdTVCQTRcXHU2MDg5XFx1NkU3RlxcdTZGMDZcXHU3NUJFXFx1OENFQVxcdTVCOUZcXHU4NTAwXFx1N0JFMFxcdTUwNzJcXHU2N0Y0XFx1ODI5RFxcdTVDNjFcXHU4NTRBXFx1N0UxRVxcdTgyMEVcXHU1MTk5XFx1NUMwNFxcdTYzNjhcXHU4RDY2XFx1NjU5Q1xcdTcxNkVcXHU3OTNFXFx1N0QxN1xcdTgwMDVcXHU4QjFEXFx1OEVDQVxcdTkwNkVcXHU4NkM3XFx1OTBBQVxcdTUwMUZcXHU1MkZBXFx1NUMzQVxcdTY3NTNcXHU3MDdDXFx1NzIzNVxcdTkxNENcXHU5MUM4XFx1OTMyQlxcdTgyRTVcXHU1QkMyXFx1NUYzMVxcdTYwRjlcXHU0RTNCXFx1NTNENlxcdTVCODhcXHU2MjRCXFx1NjczMVxcdTZCOEFcXHU3MkU5XFx1NzNFMFxcdTdBMkVcXHU4MTZCXFx1OERBM1xcdTkxNTJcXHU5OTk2XFx1NTExMlxcdTUzRDdcXHU1NDZBXFx1NUJGRlxcdTYzODhcXHU2QTM5XFx1N0RBQ1xcdTk3MDBcXHU1NkRBXFx1NTNDRVxcdTU0NjhcIl0sXG4gICAgICBbXCI4ZjQwXCIsIFwiXFx1NUI5N1xcdTVDMzFcXHU1RERFXFx1NEZFRVxcdTYxMDFcXHU2MkZFXFx1NkQzMlxcdTc5QzBcXHU3OUNCXFx1N0Q0MlxcdTdFNERcXHU3RkQyXFx1ODFFRFxcdTgyMUZcXHU4NDkwXFx1ODg0NlxcdTg5NzJcXHU4QjkwXFx1OEU3NFxcdThGMkZcXHU5MDMxXFx1OTE0QlxcdTkxNkNcXHU5NkM2XFx1OTE5Q1xcdTRFQzBcXHU0RjRGXFx1NTE0NVxcdTUzNDFcXHU1RjkzXFx1NjIwRVxcdTY3RDRcXHU2QzQxXFx1NkUwQlxcdTczNjNcXHU3RTI2XFx1OTFDRFxcdTkyODNcXHU1M0Q0XFx1NTkxOVxcdTVCQkZcXHU2REQxXFx1Nzk1RFxcdTdFMkVcXHU3QzlCXFx1NTg3RVxcdTcxOUZcXHU1MUZBXFx1ODg1M1xcdThGRjBcXHU0RkNBXFx1NUNGQlxcdTY2MjVcXHU3N0FDXFx1N0FFM1xcdTgyMUNcXHU5OUZGXFx1NTFDNlxcdTVGQUFcXHU2NUVDXFx1Njk2RlxcdTZCODlcXHU2REYzXCJdLFxuICAgICAgW1wiOGY4MFwiLCBcIlxcdTZFOTZcXHU2RjY0XFx1NzZGRVxcdTdEMTRcXHU1REUxXFx1OTA3NVxcdTkxODdcXHU5ODA2XFx1NTFFNlxcdTUyMURcXHU2MjQwXFx1NjY5MVxcdTY2RDlcXHU2RTFBXFx1NUVCNlxcdTdERDJcXHU3RjcyXFx1NjZGOFxcdTg1QUZcXHU4NUY3XFx1OEFGOFxcdTUyQTlcXHU1M0Q5XFx1NTk3M1xcdTVFOEZcXHU1RjkwXFx1NjA1NVxcdTkyRTRcXHU5NjY0XFx1NTBCN1xcdTUxMUZcXHU1MkREXFx1NTMyMFxcdTUzNDdcXHU1M0VDXFx1NTRFOFxcdTU1NDZcXHU1NTMxXFx1NTYxN1xcdTU5NjhcXHU1OUJFXFx1NUEzQ1xcdTVCQjVcXHU1QzA2XFx1NUMwRlxcdTVDMTFcXHU1QzFBXFx1NUU4NFxcdTVFOEFcXHU1RUUwXFx1NUY3MFxcdTYyN0ZcXHU2Mjg0XFx1NjJEQlxcdTYzOENcXHU2Mzc3XFx1NjYwN1xcdTY2MENcXHU2NjJEXFx1NjY3NlxcdTY3N0VcXHU2OEEyXFx1NkExRlxcdTZBMzVcXHU2Q0JDXFx1NkQ4OFxcdTZFMDlcXHU2RTU4XFx1NzEzQ1xcdTcxMjZcXHU3MTY3XFx1NzVDN1xcdTc3MDFcXHU3ODVEXFx1NzkwMVxcdTc5NjVcXHU3OUYwXFx1N0FFMFxcdTdCMTFcXHU3Q0E3XFx1N0QzOVxcdTgwOTZcXHU4M0Q2XFx1ODQ4QlxcdTg1NDlcXHU4ODVEXFx1ODhGM1xcdThBMUZcXHU4QTNDXFx1OEE1NFxcdThBNzNcXHU4QzYxXFx1OENERVxcdTkxQTRcXHU5MjY2XFx1OTM3RVxcdTk0MThcXHU5NjlDXFx1OTc5OFxcdTRFMEFcXHU0RTA4XFx1NEUxRVxcdTRFNTdcXHU1MTk3XFx1NTI3MFxcdTU3Q0VcXHU1ODM0XFx1NThDQ1xcdTVCMjJcXHU1RTM4XFx1NjBDNVxcdTY0RkVcXHU2NzYxXFx1Njc1NlxcdTZENDRcXHU3MkI2XFx1NzU3M1xcdTdBNjNcXHU4NEI4XFx1OEI3MlxcdTkxQjhcXHU5MzIwXFx1NTYzMVxcdTU3RjRcXHU5OEZFXCJdLFxuICAgICAgW1wiOTA0MFwiLCBcIlxcdTYyRURcXHU2OTBEXFx1NkI5NlxcdTcxRURcXHU3RTU0XFx1ODA3N1xcdTgyNzJcXHU4OUU2XFx1OThERlxcdTg3NTVcXHU4RkIxXFx1NUMzQlxcdTRGMzhcXHU0RkUxXFx1NEZCNVxcdTU1MDdcXHU1QTIwXFx1NUJERFxcdTVCRTlcXHU1RkMzXFx1NjE0RVxcdTYzMkZcXHU2NUIwXFx1NjY0QlxcdTY4RUVcXHU2OTlCXFx1NkQ3OFxcdTZERjFcXHU3NTMzXFx1NzVCOVxcdTc3MUZcXHU3OTVFXFx1NzlFNlxcdTdEMzNcXHU4MUUzXFx1ODJBRlxcdTg1QUFcXHU4OUFBXFx1OEEzQVxcdThFQUJcXHU4RjlCXFx1OTAzMlxcdTkxRERcXHU5NzA3XFx1NEVCQVxcdTRFQzFcXHU1MjAzXFx1NTg3NVxcdTU4RUNcXHU1QzBCXFx1NzUxQVxcdTVDM0RcXHU4MTRFXFx1OEEwQVxcdThGQzVcXHU5NjYzXFx1OTc2RFxcdTdCMjVcXHU4QUNGXFx1OTgwOFxcdTkxNjJcXHU1NkYzXFx1NTNBOFwiXSxcbiAgICAgIFtcIjkwODBcIiwgXCJcXHU5MDE3XFx1NTQzOVxcdTU3ODJcXHU1RTI1XFx1NjNBOFxcdTZDMzRcXHU3MDhBXFx1Nzc2MVxcdTdDOEJcXHU3RkUwXFx1ODg3MFxcdTkwNDJcXHU5MTU0XFx1OTMxMFxcdTkzMThcXHU5NjhGXFx1NzQ1RVxcdTlBQzRcXHU1RDA3XFx1NUQ2OVxcdTY1NzBcXHU2N0EyXFx1OERBOFxcdTk2REJcXHU2MzZFXFx1Njc0OVxcdTY5MTlcXHU4M0M1XFx1OTgxN1xcdTk2QzBcXHU4OEZFXFx1NkY4NFxcdTY0N0FcXHU1QkY4XFx1NEUxNlxcdTcwMkNcXHU3NTVEXFx1NjYyRlxcdTUxQzRcXHU1MjM2XFx1NTJFMlxcdTU5RDNcXHU1RjgxXFx1NjAyN1xcdTYyMTBcXHU2NTNGXFx1NjU3NFxcdTY2MUZcXHU2Njc0XFx1NjhGMlxcdTY4MTZcXHU2QjYzXFx1NkUwNVxcdTcyNzJcXHU3NTFGXFx1NzZEQlxcdTdDQkVcXHU4MDU2XFx1NThGMFxcdTg4RkRcXHU4OTdGXFx1OEFBMFxcdThBOTNcXHU4QUNCXFx1OTAxRFxcdTkxOTJcXHU5NzUyXFx1OTc1OVxcdTY1ODlcXHU3QTBFXFx1ODEwNlxcdTk2QkJcXHU1RTJEXFx1NjBEQ1xcdTYyMUFcXHU2NUE1XFx1NjYxNFxcdTY3OTBcXHU3N0YzXFx1N0E0RFxcdTdDNERcXHU3RTNFXFx1ODEwQVxcdThDQUNcXHU4RDY0XFx1OERFMVxcdThFNUZcXHU3OEE5XFx1NTIwN1xcdTYyRDlcXHU2M0E1XFx1NjQ0MlxcdTYyOThcXHU4QTJEXFx1N0E4M1xcdTdCQzBcXHU4QUFDXFx1OTZFQVxcdTdENzZcXHU4MjBDXFx1ODc0OVxcdTRFRDlcXHU1MTQ4XFx1NTM0M1xcdTUzNjBcXHU1QkEzXFx1NUMwMlxcdTVDMTZcXHU1REREXFx1NjIyNlxcdTYyNDdcXHU2NEIwXFx1NjgxM1xcdTY4MzRcXHU2Q0M5XFx1NkQ0NVxcdTZEMTdcXHU2N0QzXFx1NkY1Q1xcdTcxNEVcXHU3MTdEXFx1NjVDQlxcdTdBN0ZcXHU3QkFEXFx1N0REQVwiXSxcbiAgICAgIFtcIjkxNDBcIiwgXCJcXHU3RTRBXFx1N0ZBOFxcdTgxN0FcXHU4MjFCXFx1ODIzOVxcdTg1QTZcXHU4QTZFXFx1OENDRVxcdThERjVcXHU5MDc4XFx1OTA3N1xcdTkyQURcXHU5MjkxXFx1OTU4M1xcdTlCQUVcXHU1MjREXFx1NTU4NFxcdTZGMzhcXHU3MTM2XFx1NTE2OFxcdTc5ODVcXHU3RTU1XFx1ODFCM1xcdTdDQ0VcXHU1NjRDXFx1NTg1MVxcdTVDQThcXHU2M0FBXFx1NjZGRVxcdTY2RkRcXHU2OTVBXFx1NzJEOVxcdTc1OEZcXHU3NThFXFx1NzkwRVxcdTc5NTZcXHU3OURGXFx1N0M5N1xcdTdEMjBcXHU3RDQ0XFx1ODYwN1xcdThBMzRcXHU5NjNCXFx1OTA2MVxcdTlGMjBcXHU1MEU3XFx1NTI3NVxcdTUzQ0NcXHU1M0UyXFx1NTAwOVxcdTU1QUFcXHU1OEVFXFx1NTk0RlxcdTcyM0RcXHU1QjhCXFx1NUM2NFxcdTUzMURcXHU2MEUzXFx1NjBGM1xcdTYzNUNcXHU2MzgzXFx1NjMzRlxcdTYzQkJcIl0sXG4gICAgICBbXCI5MTgwXCIsIFwiXFx1NjRDRFxcdTY1RTlcXHU2NkY5XFx1NURFM1xcdTY5Q0RcXHU2OUZEXFx1NkYxNVxcdTcxRTVcXHU0RTg5XFx1NzVFOVxcdTc2RjhcXHU3QTkzXFx1N0NERlxcdTdEQ0ZcXHU3RDlDXFx1ODA2MVxcdTgzNDlcXHU4MzU4XFx1ODQ2Q1xcdTg0QkNcXHU4NUZCXFx1ODhDNVxcdThENzBcXHU5MDAxXFx1OTA2RFxcdTkzOTdcXHU5NzFDXFx1OUExMlxcdTUwQ0ZcXHU1ODk3XFx1NjE4RVxcdTgxRDNcXHU4NTM1XFx1OEQwOFxcdTkwMjBcXHU0RkMzXFx1NTA3NFxcdTUyNDdcXHU1MzczXFx1NjA2RlxcdTYzNDlcXHU2NzVGXFx1NkUyQ1xcdThEQjNcXHU5MDFGXFx1NEZEN1xcdTVDNUVcXHU4Q0NBXFx1NjVDRlxcdTdEOUFcXHU1MzUyXFx1ODg5NlxcdTUxNzZcXHU2M0MzXFx1NUI1OFxcdTVCNkJcXHU1QzBBXFx1NjQwRFxcdTY3NTFcXHU5MDVDXFx1NEVENlxcdTU5MUFcXHU1OTJBXFx1NkM3MFxcdThBNTFcXHU1NTNFXFx1NTgxNVxcdTU5QTVcXHU2MEYwXFx1NjI1M1xcdTY3QzFcXHU4MjM1XFx1Njk1NVxcdTk2NDBcXHU5OUM0XFx1OUEyOFxcdTRGNTNcXHU1ODA2XFx1NUJGRVxcdTgwMTBcXHU1Q0IxXFx1NUUyRlxcdTVGODVcXHU2MDIwXFx1NjE0QlxcdTYyMzRcXHU2NkZGXFx1NkNGMFxcdTZFREVcXHU4MENFXFx1ODE3RlxcdTgyRDRcXHU4ODhCXFx1OENCOFxcdTkwMDBcXHU5MDJFXFx1OTY4QVxcdTlFREJcXHU5QkRCXFx1NEVFM1xcdTUzRjBcXHU1OTI3XFx1N0IyQ1xcdTkxOERcXHU5ODRDXFx1OURGOVxcdTZFRERcXHU3MDI3XFx1NTM1M1xcdTU1NDRcXHU1Qjg1XFx1NjI1OFxcdTYyOUVcXHU2MkQzXFx1NkNBMlxcdTZGRUZcXHU3NDIyXFx1OEExN1xcdTk0MzhcXHU2RkMxXFx1OEFGRVxcdTgzMzhcXHU1MUU3XFx1ODZGOFxcdTUzRUFcIl0sXG4gICAgICBbXCI5MjQwXCIsIFwiXFx1NTNFOVxcdTRGNDZcXHU5MDU0XFx1OEZCMFxcdTU5NkFcXHU4MTMxXFx1NURGRFxcdTdBRUFcXHU4RkJGXFx1NjhEQVxcdThDMzdcXHU3MkY4XFx1OUM0OFxcdTZBM0RcXHU4QUIwXFx1NEUzOVxcdTUzNThcXHU1NjA2XFx1NTc2NlxcdTYyQzVcXHU2M0EyXFx1NjVFNlxcdTZCNEVcXHU2REUxXFx1NkU1QlxcdTcwQURcXHU3N0VEXFx1N0FFRlxcdTdCQUFcXHU3REJCXFx1ODAzRFxcdTgwQzZcXHU4NkNCXFx1OEE5NVxcdTkzNUJcXHU1NkUzXFx1NThDN1xcdTVGM0VcXHU2NUFEXFx1NjY5NlxcdTZBODBcXHU2QkI1XFx1NzUzN1xcdThBQzdcXHU1MDI0XFx1NzdFNVxcdTU3MzBcXHU1RjFCXFx1NjA2NVxcdTY2N0FcXHU2QzYwXFx1NzVGNFxcdTdBMUFcXHU3RjZFXFx1ODFGNFxcdTg3MThcXHU5MDQ1XFx1OTlCM1xcdTdCQzlcXHU3NTVDXFx1N0FGOVxcdTdCNTFcXHU4NEM0XCJdLFxuICAgICAgW1wiOTI4MFwiLCBcIlxcdTkwMTBcXHU3OUU5XFx1N0E5MlxcdTgzMzZcXHU1QUUxXFx1Nzc0MFxcdTRFMkRcXHU0RUYyXFx1NUI5OVxcdTVGRTBcXHU2MkJEXFx1NjYzQ1xcdTY3RjFcXHU2Q0U4XFx1ODY2QlxcdTg4NzdcXHU4QTNCXFx1OTE0RVxcdTkyRjNcXHU5OUQwXFx1NkExN1xcdTcwMjZcXHU3MzJBXFx1ODJFN1xcdTg0NTdcXHU4Q0FGXFx1NEUwMVxcdTUxNDZcXHU1MUNCXFx1NTU4QlxcdTVCRjVcXHU1RTE2XFx1NUUzM1xcdTVFODFcXHU1RjE0XFx1NUYzNVxcdTVGNkJcXHU1RkI0XFx1NjFGMlxcdTYzMTFcXHU2NkEyXFx1NjcxRFxcdTZGNkVcXHU3MjUyXFx1NzUzQVxcdTc3M0FcXHU4MDc0XFx1ODEzOVxcdTgxNzhcXHU4Nzc2XFx1OEFCRlxcdThBRENcXHU4RDg1XFx1OERGM1xcdTkyOUFcXHU5NTc3XFx1OTgwMlxcdTlDRTVcXHU1MkM1XFx1NjM1N1xcdTc2RjRcXHU2NzE1XFx1NkM4OFxcdTczQ0RcXHU4Q0MzXFx1OTNBRVxcdTk2NzNcXHU2RDI1XFx1NTg5Q1xcdTY5MEVcXHU2OUNDXFx1OEZGRFxcdTkzOUFcXHU3NURCXFx1OTAxQVxcdTU4NUFcXHU2ODAyXFx1NjNCNFxcdTY5RkJcXHU0RjQzXFx1NkYyQ1xcdTY3RDhcXHU4RkJCXFx1ODUyNlxcdTdEQjRcXHU5MzU0XFx1NjkzRlxcdTZGNzBcXHU1NzZBXFx1NThGN1xcdTVCMkNcXHU3RDJDXFx1NzIyQVxcdTU0MEFcXHU5MUUzXFx1OURCNFxcdTRFQURcXHU0RjRFXFx1NTA1Q1xcdTUwNzVcXHU1MjQzXFx1OEM5RVxcdTU0NDhcXHU1ODI0XFx1NUI5QVxcdTVFMURcXHU1RTk1XFx1NUVBRFxcdTVFRjdcXHU1RjFGXFx1NjA4Q1xcdTYyQjVcXHU2MzNBXFx1NjNEMFxcdTY4QUZcXHU2QzQwXFx1Nzg4N1xcdTc5OEVcXHU3QTBCXFx1N0RFMFxcdTgyNDdcXHU4QTAyXFx1OEFFNlxcdThFNDRcXHU5MDEzXCJdLFxuICAgICAgW1wiOTM0MFwiLCBcIlxcdTkwQjhcXHU5MTJEXFx1OTFEOFxcdTlGMEVcXHU2Q0U1XFx1NjQ1OFxcdTY0RTJcXHU2NTc1XFx1NkVGNFxcdTc2ODRcXHU3QjFCXFx1OTA2OVxcdTkzRDFcXHU2RUJBXFx1NTRGMlxcdTVGQjlcXHU2NEE0XFx1OEY0RFxcdThGRURcXHU5MjQ0XFx1NTE3OFxcdTU4NkJcXHU1OTI5XFx1NUM1NVxcdTVFOTdcXHU2REZCXFx1N0U4RlxcdTc1MUNcXHU4Q0JDXFx1OEVFMlxcdTk4NUJcXHU3MEI5XFx1NEYxRFxcdTZCQkZcXHU2RkIxXFx1NzUzMFxcdTk2RkJcXHU1MTRFXFx1NTQxMFxcdTU4MzVcXHU1ODU3XFx1NTlBQ1xcdTVDNjBcXHU1RjkyXFx1NjU5N1xcdTY3NUNcXHU2RTIxXFx1NzY3QlxcdTgzREZcXHU4Q0VEXFx1OTAxNFxcdTkwRkRcXHU5MzREXFx1NzgyNVxcdTc4M0FcXHU1MkFBXFx1NUVBNlxcdTU3MUZcXHU1OTc0XFx1NjAxMlxcdTUwMTJcXHU1MTVBXFx1NTFBQ1wiXSxcbiAgICAgIFtcIjkzODBcIiwgXCJcXHU1MUNEXFx1NTIwMFxcdTU1MTBcXHU1ODU0XFx1NTg1OFxcdTU5NTdcXHU1Qjk1XFx1NUNGNlxcdTVEOEJcXHU2MEJDXFx1NjI5NVxcdTY0MkRcXHU2NzcxXFx1Njg0M1xcdTY4QkNcXHU2OERGXFx1NzZEN1xcdTZERDhcXHU2RTZGXFx1NkQ5QlxcdTcwNkZcXHU3MUM4XFx1NUY1M1xcdTc1RDhcXHU3OTc3XFx1N0I0OVxcdTdCNTRcXHU3QjUyXFx1N0NENlxcdTdENzFcXHU1MjMwXFx1ODQ2M1xcdTg1NjlcXHU4NUU0XFx1OEEwRVxcdThCMDRcXHU4QzQ2XFx1OEUwRlxcdTkwMDNcXHU5MDBGXFx1OTQxOVxcdTk2NzZcXHU5ODJEXFx1OUEzMFxcdTk1RDhcXHU1MENEXFx1NTJENVxcdTU0MENcXHU1ODAyXFx1NUMwRVxcdTYxQTdcXHU2NDlFXFx1NkQxRVxcdTc3QjNcXHU3QUU1XFx1ODBGNFxcdTg0MDRcXHU5MDUzXFx1OTI4NVxcdTVDRTBcXHU5RDA3XFx1NTMzRlxcdTVGOTdcXHU1RkIzXFx1NkQ5Q1xcdTcyNzlcXHU3NzYzXFx1NzlCRlxcdTdCRTRcXHU2QkQyXFx1NzJFQ1xcdThBQURcXHU2ODAzXFx1NkE2MVxcdTUxRjhcXHU3QTgxXFx1NjkzNFxcdTVDNEFcXHU5Q0Y2XFx1ODJFQlxcdTVCQzVcXHU5MTQ5XFx1NzAxRVxcdTU2NzhcXHU1QzZGXFx1NjBDN1xcdTY1NjZcXHU2QzhDXFx1OEM1QVxcdTkwNDFcXHU5ODEzXFx1NTQ1MVxcdTY2QzdcXHU5MjBEXFx1NTk0OFxcdTkwQTNcXHU1MTg1XFx1NEU0RFxcdTUxRUFcXHU4NTk5XFx1OEIwRVxcdTcwNThcXHU2MzdBXFx1OTM0QlxcdTY5NjJcXHU5OUI0XFx1N0UwNFxcdTc1NzdcXHU1MzU3XFx1Njk2MFxcdThFREZcXHU5NkUzXFx1NkM1RFxcdTRFOENcXHU1QzNDXFx1NUYxMFxcdThGRTlcXHU1MzAyXFx1OENEMVxcdTgwODlcXHU4Njc5XFx1NUVGRlxcdTY1RTVcXHU0RTczXFx1NTE2NVwiXSxcbiAgICAgIFtcIjk0NDBcIiwgXCJcXHU1OTgyXFx1NUMzRlxcdTk3RUVcXHU0RUZCXFx1NTk4QVxcdTVGQ0RcXHU4QThEXFx1NkZFMVxcdTc5QjBcXHU3OTYyXFx1NUJFN1xcdTg0NzFcXHU3MzJCXFx1NzFCMVxcdTVFNzRcXHU1RkY1XFx1NjM3QlxcdTY0OUFcXHU3MUMzXFx1N0M5OFxcdTRFNDNcXHU1RUZDXFx1NEU0QlxcdTU3RENcXHU1NkEyXFx1NjBBOVxcdTZGQzNcXHU3RDBEXFx1ODBGRFxcdTgxMzNcXHU4MUJGXFx1OEZCMlxcdTg5OTdcXHU4NkE0XFx1NURGNFxcdTYyOEFcXHU2NEFEXFx1ODk4N1xcdTY3NzdcXHU2Q0UyXFx1NkQzRVxcdTc0MzZcXHU3ODM0XFx1NUE0NlxcdTdGNzVcXHU4MkFEXFx1OTlBQ1xcdTRGRjNcXHU1RUMzXFx1NjJERFxcdTYzOTJcXHU2NTU3XFx1Njc2RlxcdTc2QzNcXHU3MjRDXFx1ODBDQ1xcdTgwQkFcXHU4RjI5XFx1OTE0RFxcdTUwMERcXHU1N0Y5XFx1NUE5MlxcdTY4ODVcIl0sXG4gICAgICBbXCI5NDgwXCIsIFwiXFx1Njk3M1xcdTcxNjRcXHU3MkZEXFx1OENCN1xcdTU4RjJcXHU4Q0UwXFx1OTY2QVxcdTkwMTlcXHU4NzdGXFx1NzlFNFxcdTc3RTdcXHU4NDI5XFx1NEYyRlxcdTUyNjVcXHU1MzVBXFx1NjJDRFxcdTY3Q0ZcXHU2Q0NBXFx1NzY3RFxcdTdCOTRcXHU3Qzk1XFx1ODIzNlxcdTg1ODRcXHU4RkVCXFx1NjZERFxcdTZGMjBcXHU3MjA2XFx1N0UxQlxcdTgzQUJcXHU5OUMxXFx1OUVBNlxcdTUxRkRcXHU3QkIxXFx1Nzg3MlxcdTdCQjhcXHU4MDg3XFx1N0I0OFxcdTZBRThcXHU1RTYxXFx1ODA4Q1xcdTc1NTFcXHU3NTYwXFx1NTE2QlxcdTkyNjJcXHU2RThDXFx1NzY3QVxcdTkxOTdcXHU5QUVBXFx1NEYxMFxcdTdGNzBcXHU2MjlDXFx1N0I0RlxcdTk1QTVcXHU5Q0U5XFx1NTY3QVxcdTU4NTlcXHU4NkU0XFx1OTZCQ1xcdTRGMzRcXHU1MjI0XFx1NTM0QVxcdTUzQ0RcXHU1M0RCXFx1NUUwNlxcdTY0MkNcXHU2NTkxXFx1Njc3RlxcdTZDM0VcXHU2QzRFXFx1NzI0OFxcdTcyQUZcXHU3M0VEXFx1NzU1NFxcdTdFNDFcXHU4MjJDXFx1ODVFOVxcdThDQTlcXHU3QkM0XFx1OTFDNlxcdTcxNjlcXHU5ODEyXFx1OThFRlxcdTYzM0RcXHU2NjY5XFx1NzU2QVxcdTc2RTRcXHU3OEQwXFx1ODU0M1xcdTg2RUVcXHU1MzJBXFx1NTM1MVxcdTU0MjZcXHU1OTgzXFx1NUU4N1xcdTVGN0NcXHU2MEIyXFx1NjI0OVxcdTYyNzlcXHU2MkFCXFx1NjU5MFxcdTZCRDRcXHU2Q0NDXFx1NzVCMlxcdTc2QUVcXHU3ODkxXFx1NzlEOFxcdTdEQ0JcXHU3Rjc3XFx1ODBBNVxcdTg4QUJcXHU4QUI5XFx1OENCQlxcdTkwN0ZcXHU5NzVFXFx1OThEQlxcdTZBMEJcXHU3QzM4XFx1NTA5OVxcdTVDM0VcXHU1RkFFXFx1Njc4N1xcdTZCRDhcXHU3NDM1XFx1NzcwOVxcdTdGOEVcIl0sXG4gICAgICBbXCI5NTQwXCIsIFwiXFx1OUYzQlxcdTY3Q0FcXHU3QTE3XFx1NTMzOVxcdTc1OEJcXHU5QUVEXFx1NUY2NlxcdTgxOURcXHU4M0YxXFx1ODA5OFxcdTVGM0NcXHU1RkM1XFx1NzU2MlxcdTdCNDZcXHU5MDNDXFx1Njg2N1xcdTU5RUJcXHU1QTlCXFx1N0QxMFxcdTc2N0VcXHU4QjJDXFx1NEZGNVxcdTVGNkFcXHU2QTE5XFx1NkMzN1xcdTZGMDJcXHU3NEUyXFx1Nzk2OFxcdTg4NjhcXHU4QTU1XFx1OEM3OVxcdTVFREZcXHU2M0NGXFx1NzVDNVxcdTc5RDJcXHU4MkQ3XFx1OTMyOFxcdTkyRjJcXHU4NDlDXFx1ODZFRFxcdTlDMkRcXHU1NEMxXFx1NUY2Q1xcdTY1OENcXHU2RDVDXFx1NzAxNVxcdThDQTdcXHU4Q0QzXFx1OTgzQlxcdTY1NEZcXHU3NEY2XFx1NEUwRFxcdTRFRDhcXHU1N0UwXFx1NTkyQlxcdTVBNjZcXHU1QkNDXFx1NTFBOFxcdTVFMDNcXHU1RTlDXFx1NjAxNlxcdTYyNzZcXHU2NTc3XCJdLFxuICAgICAgW1wiOTU4MFwiLCBcIlxcdTY1QTdcXHU2NjZFXFx1NkQ2RVxcdTcyMzZcXHU3QjI2XFx1ODE1MFxcdTgxOUFcXHU4Mjk5XFx1OEI1Q1xcdThDQTBcXHU4Q0U2XFx1OEQ3NFxcdTk2MUNcXHU5NjQ0XFx1NEZBRVxcdTY0QUJcXHU2QjY2XFx1ODIxRVxcdTg0NjFcXHU4NTZBXFx1OTBFOFxcdTVDMDFcXHU2OTUzXFx1OThBOFxcdTg0N0FcXHU4NTU3XFx1NEYwRlxcdTUyNkZcXHU1RkE5XFx1NUU0NVxcdTY3MERcXHU3OThGXFx1ODE3OVxcdTg5MDdcXHU4OTg2XFx1NkRGNVxcdTVGMTdcXHU2MjU1XFx1NkNCOFxcdTRFQ0ZcXHU3MjY5XFx1OUI5MlxcdTUyMDZcXHU1NDNCXFx1NTY3NFxcdTU4QjNcXHU2MUE0XFx1NjI2RVxcdTcxMUFcXHU1OTZFXFx1N0M4OVxcdTdDREVcXHU3RDFCXFx1OTZGMFxcdTY1ODdcXHU4MDVFXFx1NEUxOVxcdTRGNzVcXHU1MTc1XFx1NTg0MFxcdTVFNjNcXHU1RTczXFx1NUYwQVxcdTY3QzRcXHU0RTI2XFx1ODUzRFxcdTk1ODlcXHU5NjVCXFx1N0M3M1xcdTk4MDFcXHU1MEZCXFx1NThDMVxcdTc2NTZcXHU3OEE3XFx1NTIyNVxcdTc3QTVcXHU4NTExXFx1N0I4NlxcdTUwNEZcXHU1OTA5XFx1NzI0N1xcdTdCQzdcXHU3REU4XFx1OEZCQVxcdThGRDRcXHU5MDREXFx1NEZCRlxcdTUyQzlcXHU1QTI5XFx1NUYwMVxcdTk3QURcXHU0RkREXFx1ODIxN1xcdTkyRUFcXHU1NzAzXFx1NjM1NVxcdTZCNjlcXHU3NTJCXFx1ODhEQ1xcdThGMTRcXHU3QTQyXFx1NTJERlxcdTU4OTNcXHU2MTU1XFx1NjIwQVxcdTY2QUVcXHU2QkNEXFx1N0MzRlxcdTgzRTlcXHU1MDIzXFx1NEZGOFxcdTUzMDVcXHU1NDQ2XFx1NTgzMVxcdTU5NDlcXHU1QjlEXFx1NUNGMFxcdTVDRUZcXHU1RDI5XFx1NUU5NlxcdTYyQjFcXHU2MzY3XFx1NjUzRVxcdTY1QjlcXHU2NzBCXCJdLFxuICAgICAgW1wiOTY0MFwiLCBcIlxcdTZDRDVcXHU2Q0UxXFx1NzBGOVxcdTc4MzJcXHU3RTJCXFx1ODBERVxcdTgyQjNcXHU4NDBDXFx1ODRFQ1xcdTg3MDJcXHU4OTEyXFx1OEEyQVxcdThDNEFcXHU5MEE2XFx1OTJEMlxcdTk4RkRcXHU5Q0YzXFx1OUQ2Q1xcdTRFNEZcXHU0RUExXFx1NTA4RFxcdTUyNTZcXHU1NzRBXFx1NTlBOFxcdTVFM0RcXHU1RkQ4XFx1NUZEOVxcdTYyM0ZcXHU2NkI0XFx1NjcxQlxcdTY3RDBcXHU2OEQyXFx1NTE5MlxcdTdEMjFcXHU4MEFBXFx1ODFBOFxcdThCMDBcXHU4QzhDXFx1OENCRlxcdTkyN0VcXHU5NjMyXFx1NTQyMFxcdTk4MkNcXHU1MzE3XFx1NTBENVxcdTUzNUNcXHU1OEE4XFx1NjRCMlxcdTY3MzRcXHU3MjY3XFx1Nzc2NlxcdTdBNDZcXHU5MUU2XFx1NTJDM1xcdTZDQTFcXHU2Qjg2XFx1NTgwMFxcdTVFNENcXHU1OTU0XFx1NjcyQ1xcdTdGRkJcXHU1MUUxXFx1NzZDNlwiXSxcbiAgICAgIFtcIjk2ODBcIiwgXCJcXHU2NDY5XFx1NzhFOFxcdTlCNTRcXHU5RUJCXFx1NTdDQlxcdTU5QjlcXHU2NjI3XFx1Njc5QVxcdTZCQ0VcXHU1NEU5XFx1NjlEOVxcdTVFNTVcXHU4MTlDXFx1Njc5NVxcdTlCQUFcXHU2N0ZFXFx1OUM1MlxcdTY4NURcXHU0RUE2XFx1NEZFM1xcdTUzQzhcXHU2MkI5XFx1NjcyQlxcdTZDQUJcXHU4RkM0XFx1NEZBRFxcdTdFNkRcXHU5RUJGXFx1NEUwN1xcdTYxNjJcXHU2RTgwXFx1NkYyQlxcdTg1MTNcXHU1NDczXFx1NjcyQVxcdTlCNDVcXHU1REYzXFx1N0I5NVxcdTVDQUNcXHU1QkM2XFx1ODcxQ1xcdTZFNEFcXHU4NEQxXFx1N0ExNFxcdTgxMDhcXHU1OTk5XFx1N0M4RFxcdTZDMTFcXHU3NzIwXFx1NTJEOVxcdTU5MjJcXHU3MTIxXFx1NzI1RlxcdTc3REJcXHU5NzI3XFx1OUQ2MVxcdTY5MEJcXHU1QTdGXFx1NUExOFxcdTUxQTVcXHU1NDBEXFx1NTQ3RFxcdTY2MEVcXHU3NkRGXFx1OEZGN1xcdTkyOThcXHU5Q0Y0XFx1NTlFQVxcdTcyNURcXHU2RUM1XFx1NTE0RFxcdTY4QzlcXHU3REJGXFx1N0RFQ1xcdTk3NjJcXHU5RUJBXFx1NjQ3OFxcdTZBMjFcXHU4MzAyXFx1NTk4NFxcdTVCNUZcXHU2QkRCXFx1NzMxQlxcdTc2RjJcXHU3REIyXFx1ODAxN1xcdTg0OTlcXHU1MTMyXFx1NjcyOFxcdTlFRDlcXHU3NkVFXFx1Njc2MlxcdTUyRkZcXHU5OTA1XFx1NUMyNFxcdTYyM0JcXHU3QzdFXFx1OENCMFxcdTU1NEZcXHU2MEI2XFx1N0QwQlxcdTk1ODBcXHU1MzAxXFx1NEU1RlxcdTUxQjZcXHU1OTFDXFx1NzIzQVxcdTgwMzZcXHU5MUNFXFx1NUYyNVxcdTc3RTJcXHU1Mzg0XFx1NUY3OVxcdTdEMDRcXHU4NUFDXFx1OEEzM1xcdThFOERcXHU5NzU2XFx1NjdGM1xcdTg1QUVcXHU5NDUzXFx1NjEwOVxcdTYxMDhcXHU2Q0I5XFx1NzY1MlwiXSxcbiAgICAgIFtcIjk3NDBcIiwgXCJcXHU4QUVEXFx1OEYzOFxcdTU1MkZcXHU0RjUxXFx1NTEyQVxcdTUyQzdcXHU1M0NCXFx1NUJBNVxcdTVFN0RcXHU2MEEwXFx1NjE4MlxcdTYzRDZcXHU2NzA5XFx1NjdEQVxcdTZFNjdcXHU2RDhDXFx1NzMzNlxcdTczMzdcXHU3NTMxXFx1Nzk1MFxcdTg4RDVcXHU4QTk4XFx1OTA0QVxcdTkwOTFcXHU5MEY1XFx1OTZDNFxcdTg3OERcXHU1OTE1XFx1NEU4OFxcdTRGNTlcXHU0RTBFXFx1OEE4OVxcdThGM0ZcXHU5ODEwXFx1NTBBRFxcdTVFN0NcXHU1OTk2XFx1NUJCOVxcdTVFQjhcXHU2M0RBXFx1NjNGQVxcdTY0QzFcXHU2NkRDXFx1Njk0QVxcdTY5RDhcXHU2RDBCXFx1NkVCNlxcdTcxOTRcXHU3NTI4XFx1N0FBRlxcdTdGOEFcXHU4MDAwXFx1ODQ0OVxcdTg0QzlcXHU4OTgxXFx1OEIyMVxcdThFMEFcXHU5MDY1XFx1OTY3RFxcdTk5MEFcXHU2MTdFXFx1NjI5MVxcdTZCMzJcIl0sXG4gICAgICBbXCI5NzgwXCIsIFwiXFx1NkM4M1xcdTZENzRcXHU3RkNDXFx1N0ZGQ1xcdTZEQzBcXHU3Rjg1XFx1ODdCQVxcdTg4RjhcXHU2NzY1XFx1ODNCMVxcdTk4M0NcXHU5NkY3XFx1NkQxQlxcdTdENjFcXHU4NDNEXFx1OTE2QVxcdTRFNzFcXHU1Mzc1XFx1NUQ1MFxcdTZCMDRcXHU2RkVCXFx1ODVDRFxcdTg2MkRcXHU4OUE3XFx1NTIyOVxcdTU0MEZcXHU1QzY1XFx1Njc0RVxcdTY4QThcXHU3NDA2XFx1NzQ4M1xcdTc1RTJcXHU4OENGXFx1ODhFMVxcdTkxQ0NcXHU5NkUyXFx1OTY3OFxcdTVGOEJcXHU3Mzg3XFx1N0FDQlxcdTg0NEVcXHU2M0EwXFx1NzU2NVxcdTUyODlcXHU2RDQxXFx1NkU5Q1xcdTc0MDlcXHU3NTU5XFx1Nzg2QlxcdTdDOTJcXHU5Njg2XFx1N0FEQ1xcdTlGOERcXHU0RkI2XFx1NjE2RVxcdTY1QzVcXHU4NjVDXFx1NEU4NlxcdTRFQUVcXHU1MERBXFx1NEUyMVxcdTUxQ0NcXHU1QkVFXFx1NjU5OVxcdTY4ODFcXHU2REJDXFx1NzMxRlxcdTc2NDJcXHU3N0FEXFx1N0ExQ1xcdTdDRTdcXHU4MjZGXFx1OEFEMlxcdTkwN0NcXHU5MUNGXFx1OTY3NVxcdTk4MThcXHU1MjlCXFx1N0REMVxcdTUwMkJcXHU1Mzk4XFx1Njc5N1xcdTZEQ0JcXHU3MUQwXFx1NzQzM1xcdTgxRThcXHU4RjJBXFx1OTZBM1xcdTlDNTdcXHU5RTlGXFx1NzQ2MFxcdTU4NDFcXHU2RDk5XFx1N0QyRlxcdTk4NUVcXHU0RUU0XFx1NEYzNlxcdTRGOEJcXHU1MUI3XFx1NTJCMVxcdTVEQkFcXHU2MDFDXFx1NzNCMlxcdTc5M0NcXHU4MkQzXFx1OTIzNFxcdTk2QjdcXHU5NkY2XFx1OTcwQVxcdTlFOTdcXHU5RjYyXFx1NjZBNlxcdTZCNzRcXHU1MjE3XFx1NTJBM1xcdTcwQzhcXHU4OEMyXFx1NUVDOVxcdTYwNEJcXHU2MTkwXFx1NkYyM1xcdTcxNDlcXHU3QzNFXFx1N0RGNFxcdTgwNkZcIl0sXG4gICAgICBbXCI5ODQwXCIsIFwiXFx1ODRFRVxcdTkwMjNcXHU5MzJDXFx1NTQ0MlxcdTlCNkZcXHU2QUQzXFx1NzA4OVxcdThDQzJcXHU4REVGXFx1OTczMlxcdTUyQjRcXHU1QTQxXFx1NUVDQVxcdTVGMDRcXHU2NzE3XFx1Njk3Q1xcdTY5OTRcXHU2RDZBXFx1NkYwRlxcdTcyNjJcXHU3MkZDXFx1N0JFRFxcdTgwMDFcXHU4MDdFXFx1ODc0QlxcdTkwQ0VcXHU1MTZEXFx1OUU5M1xcdTc5ODRcXHU4MDhCXFx1OTMzMlxcdThBRDZcXHU1MDJEXFx1NTQ4Q1xcdThBNzFcXHU2QjZBXFx1OENDNFxcdTgxMDdcXHU2MEQxXFx1NjdBMFxcdTlERjJcXHU0RTk5XFx1NEU5OFxcdTlDMTBcXHU4QTZCXFx1ODVDMVxcdTg1NjhcXHU2OTAwXFx1NkU3RVxcdTc4OTdcXHU4MTU1XCJdLFxuICAgICAgW1wiOTg5ZlwiLCBcIlxcdTVGMENcXHU0RTEwXFx1NEUxNVxcdTRFMkFcXHU0RTMxXFx1NEUzNlxcdTRFM0NcXHU0RTNGXFx1NEU0MlxcdTRFNTZcXHU0RTU4XFx1NEU4MlxcdTRFODVcXHU4QzZCXFx1NEU4QVxcdTgyMTJcXHU1RjBEXFx1NEU4RVxcdTRFOUVcXHU0RTlGXFx1NEVBMFxcdTRFQTJcXHU0RUIwXFx1NEVCM1xcdTRFQjZcXHU0RUNFXFx1NEVDRFxcdTRFQzRcXHU0RUM2XFx1NEVDMlxcdTRFRDdcXHU0RURFXFx1NEVFRFxcdTRFREZcXHU0RUY3XFx1NEYwOVxcdTRGNUFcXHU0RjMwXFx1NEY1QlxcdTRGNURcXHU0RjU3XFx1NEY0N1xcdTRGNzZcXHU0Rjg4XFx1NEY4RlxcdTRGOThcXHU0RjdCXFx1NEY2OVxcdTRGNzBcXHU0RjkxXFx1NEY2RlxcdTRGODZcXHU0Rjk2XFx1NTExOFxcdTRGRDRcXHU0RkRGXFx1NEZDRVxcdTRGRDhcXHU0RkRCXFx1NEZEMVxcdTRGREFcXHU0RkQwXFx1NEZFNFxcdTRGRTVcXHU1MDFBXFx1NTAyOFxcdTUwMTRcXHU1MDJBXFx1NTAyNVxcdTUwMDVcXHU0RjFDXFx1NEZGNlxcdTUwMjFcXHU1MDI5XFx1NTAyQ1xcdTRGRkVcXHU0RkVGXFx1NTAxMVxcdTUwMDZcXHU1MDQzXFx1NTA0N1xcdTY3MDNcXHU1MDU1XFx1NTA1MFxcdTUwNDhcXHU1MDVBXFx1NTA1NlxcdTUwNkNcXHU1MDc4XFx1NTA4MFxcdTUwOUFcXHU1MDg1XFx1NTBCNFxcdTUwQjJcIl0sXG4gICAgICBbXCI5OTQwXCIsIFwiXFx1NTBDOVxcdTUwQ0FcXHU1MEIzXFx1NTBDMlxcdTUwRDZcXHU1MERFXFx1NTBFNVxcdTUwRURcXHU1MEUzXFx1NTBFRVxcdTUwRjlcXHU1MEY1XFx1NTEwOVxcdTUxMDFcXHU1MTAyXFx1NTExNlxcdTUxMTVcXHU1MTE0XFx1NTExQVxcdTUxMjFcXHU1MTNBXFx1NTEzN1xcdTUxM0NcXHU1MTNCXFx1NTEzRlxcdTUxNDBcXHU1MTUyXFx1NTE0Q1xcdTUxNTRcXHU1MTYyXFx1N0FGOFxcdTUxNjlcXHU1MTZBXFx1NTE2RVxcdTUxODBcXHU1MTgyXFx1NTZEOFxcdTUxOENcXHU1MTg5XFx1NTE4RlxcdTUxOTFcXHU1MTkzXFx1NTE5NVxcdTUxOTZcXHU1MUE0XFx1NTFBNlxcdTUxQTJcXHU1MUE5XFx1NTFBQVxcdTUxQUJcXHU1MUIzXFx1NTFCMVxcdTUxQjJcXHU1MUIwXFx1NTFCNVxcdTUxQkRcXHU1MUM1XFx1NTFDOVxcdTUxREJcXHU1MUUwXFx1ODY1NVxcdTUxRTlcXHU1MUVEXCJdLFxuICAgICAgW1wiOTk4MFwiLCBcIlxcdTUxRjBcXHU1MUY1XFx1NTFGRVxcdTUyMDRcXHU1MjBCXFx1NTIxNFxcdTUyMEVcXHU1MjI3XFx1NTIyQVxcdTUyMkVcXHU1MjMzXFx1NTIzOVxcdTUyNEZcXHU1MjQ0XFx1NTI0QlxcdTUyNENcXHU1MjVFXFx1NTI1NFxcdTUyNkFcXHU1Mjc0XFx1NTI2OVxcdTUyNzNcXHU1MjdGXFx1NTI3RFxcdTUyOERcXHU1Mjk0XFx1NTI5MlxcdTUyNzFcXHU1Mjg4XFx1NTI5MVxcdThGQThcXHU4RkE3XFx1NTJBQ1xcdTUyQURcXHU1MkJDXFx1NTJCNVxcdTUyQzFcXHU1MkNEXFx1NTJEN1xcdTUyREVcXHU1MkUzXFx1NTJFNlxcdTk4RURcXHU1MkUwXFx1NTJGM1xcdTUyRjVcXHU1MkY4XFx1NTJGOVxcdTUzMDZcXHU1MzA4XFx1NzUzOFxcdTUzMERcXHU1MzEwXFx1NTMwRlxcdTUzMTVcXHU1MzFBXFx1NTMyM1xcdTUzMkZcXHU1MzMxXFx1NTMzM1xcdTUzMzhcXHU1MzQwXFx1NTM0NlxcdTUzNDVcXHU0RTE3XFx1NTM0OVxcdTUzNERcXHU1MUQ2XFx1NTM1RVxcdTUzNjlcXHU1MzZFXFx1NTkxOFxcdTUzN0JcXHU1Mzc3XFx1NTM4MlxcdTUzOTZcXHU1M0EwXFx1NTNBNlxcdTUzQTVcXHU1M0FFXFx1NTNCMFxcdTUzQjZcXHU1M0MzXFx1N0MxMlxcdTk2RDlcXHU1M0RGXFx1NjZGQ1xcdTcxRUVcXHU1M0VFXFx1NTNFOFxcdTUzRURcXHU1M0ZBXFx1NTQwMVxcdTU0M0RcXHU1NDQwXFx1NTQyQ1xcdTU0MkRcXHU1NDNDXFx1NTQyRVxcdTU0MzZcXHU1NDI5XFx1NTQxRFxcdTU0NEVcXHU1NDhGXFx1NTQ3NVxcdTU0OEVcXHU1NDVGXFx1NTQ3MVxcdTU0NzdcXHU1NDcwXFx1NTQ5MlxcdTU0N0JcXHU1NDgwXFx1NTQ3NlxcdTU0ODRcXHU1NDkwXFx1NTQ4NlxcdTU0QzdcXHU1NEEyXFx1NTRCOFxcdTU0QTVcXHU1NEFDXFx1NTRDNFxcdTU0QzhcXHU1NEE4XCJdLFxuICAgICAgW1wiOWE0MFwiLCBcIlxcdTU0QUJcXHU1NEMyXFx1NTRBNFxcdTU0QkVcXHU1NEJDXFx1NTREOFxcdTU0RTVcXHU1NEU2XFx1NTUwRlxcdTU1MTRcXHU1NEZEXFx1NTRFRVxcdTU0RURcXHU1NEZBXFx1NTRFMlxcdTU1MzlcXHU1NTQwXFx1NTU2M1xcdTU1NENcXHU1NTJFXFx1NTU1Q1xcdTU1NDVcXHU1NTU2XFx1NTU1N1xcdTU1MzhcXHU1NTMzXFx1NTU1RFxcdTU1OTlcXHU1NTgwXFx1NTRBRlxcdTU1OEFcXHU1NTlGXFx1NTU3QlxcdTU1N0VcXHU1NTk4XFx1NTU5RVxcdTU1QUVcXHU1NTdDXFx1NTU4M1xcdTU1QTlcXHU1NTg3XFx1NTVBOFxcdTU1REFcXHU1NUM1XFx1NTVERlxcdTU1QzRcXHU1NURDXFx1NTVFNFxcdTU1RDRcXHU1NjE0XFx1NTVGN1xcdTU2MTZcXHU1NUZFXFx1NTVGRFxcdTU2MUJcXHU1NUY5XFx1NTY0RVxcdTU2NTBcXHU3MURGXFx1NTYzNFxcdTU2MzZcXHU1NjMyXFx1NTYzOFwiXSxcbiAgICAgIFtcIjlhODBcIiwgXCJcXHU1NjZCXFx1NTY2NFxcdTU2MkZcXHU1NjZDXFx1NTY2QVxcdTU2ODZcXHU1NjgwXFx1NTY4QVxcdTU2QTBcXHU1Njk0XFx1NTY4RlxcdTU2QTVcXHU1NkFFXFx1NTZCNlxcdTU2QjRcXHU1NkMyXFx1NTZCQ1xcdTU2QzFcXHU1NkMzXFx1NTZDMFxcdTU2QzhcXHU1NkNFXFx1NTZEMVxcdTU2RDNcXHU1NkQ3XFx1NTZFRVxcdTU2RjlcXHU1NzAwXFx1NTZGRlxcdTU3MDRcXHU1NzA5XFx1NTcwOFxcdTU3MEJcXHU1NzBEXFx1NTcxM1xcdTU3MThcXHU1NzE2XFx1NTVDN1xcdTU3MUNcXHU1NzI2XFx1NTczN1xcdTU3MzhcXHU1NzRFXFx1NTczQlxcdTU3NDBcXHU1NzRGXFx1NTc2OVxcdTU3QzBcXHU1Nzg4XFx1NTc2MVxcdTU3N0ZcXHU1Nzg5XFx1NTc5M1xcdTU3QTBcXHU1N0IzXFx1NTdBNFxcdTU3QUFcXHU1N0IwXFx1NTdDM1xcdTU3QzZcXHU1N0Q0XFx1NTdEMlxcdTU3RDNcXHU1ODBBXFx1NTdENlxcdTU3RTNcXHU1ODBCXFx1NTgxOVxcdTU4MURcXHU1ODcyXFx1NTgyMVxcdTU4NjJcXHU1ODRCXFx1NTg3MFxcdTZCQzBcXHU1ODUyXFx1NTgzRFxcdTU4NzlcXHU1ODg1XFx1NThCOVxcdTU4OUZcXHU1OEFCXFx1NThCQVxcdTU4REVcXHU1OEJCXFx1NThCOFxcdTU4QUVcXHU1OEM1XFx1NThEM1xcdTU4RDFcXHU1OEQ3XFx1NThEOVxcdTU4RDhcXHU1OEU1XFx1NThEQ1xcdTU4RTRcXHU1OERGXFx1NThFRlxcdTU4RkFcXHU1OEY5XFx1NThGQlxcdTU4RkNcXHU1OEZEXFx1NTkwMlxcdTU5MEFcXHU1OTEwXFx1NTkxQlxcdTY4QTZcXHU1OTI1XFx1NTkyQ1xcdTU5MkRcXHU1OTMyXFx1NTkzOFxcdTU5M0VcXHU3QUQyXFx1NTk1NVxcdTU5NTBcXHU1OTRFXFx1NTk1QVxcdTU5NThcXHU1OTYyXFx1NTk2MFxcdTU5NjdcXHU1OTZDXFx1NTk2OVwiXSxcbiAgICAgIFtcIjliNDBcIiwgXCJcXHU1OTc4XFx1NTk4MVxcdTU5OURcXHU0RjVFXFx1NEZBQlxcdTU5QTNcXHU1OUIyXFx1NTlDNlxcdTU5RThcXHU1OURDXFx1NTk4RFxcdTU5RDlcXHU1OURBXFx1NUEyNVxcdTVBMUZcXHU1QTExXFx1NUExQ1xcdTVBMDlcXHU1QTFBXFx1NUE0MFxcdTVBNkNcXHU1QTQ5XFx1NUEzNVxcdTVBMzZcXHU1QTYyXFx1NUE2QVxcdTVBOUFcXHU1QUJDXFx1NUFCRVxcdTVBQ0JcXHU1QUMyXFx1NUFCRFxcdTVBRTNcXHU1QUQ3XFx1NUFFNlxcdTVBRTlcXHU1QUQ2XFx1NUFGQVxcdTVBRkJcXHU1QjBDXFx1NUIwQlxcdTVCMTZcXHU1QjMyXFx1NUFEMFxcdTVCMkFcXHU1QjM2XFx1NUIzRVxcdTVCNDNcXHU1QjQ1XFx1NUI0MFxcdTVCNTFcXHU1QjU1XFx1NUI1QVxcdTVCNUJcXHU1QjY1XFx1NUI2OVxcdTVCNzBcXHU1QjczXFx1NUI3NVxcdTVCNzhcXHU2NTg4XFx1NUI3QVxcdTVCODBcIl0sXG4gICAgICBbXCI5YjgwXCIsIFwiXFx1NUI4M1xcdTVCQTZcXHU1QkI4XFx1NUJDM1xcdTVCQzdcXHU1QkM5XFx1NUJENFxcdTVCRDBcXHU1QkU0XFx1NUJFNlxcdTVCRTJcXHU1QkRFXFx1NUJFNVxcdTVCRUJcXHU1QkYwXFx1NUJGNlxcdTVCRjNcXHU1QzA1XFx1NUMwN1xcdTVDMDhcXHU1QzBEXFx1NUMxM1xcdTVDMjBcXHU1QzIyXFx1NUMyOFxcdTVDMzhcXHU1QzM5XFx1NUM0MVxcdTVDNDZcXHU1QzRFXFx1NUM1M1xcdTVDNTBcXHU1QzRGXFx1NUI3MVxcdTVDNkNcXHU1QzZFXFx1NEU2MlxcdTVDNzZcXHU1Qzc5XFx1NUM4Q1xcdTVDOTFcXHU1Qzk0XFx1NTk5QlxcdTVDQUJcXHU1Q0JCXFx1NUNCNlxcdTVDQkNcXHU1Q0I3XFx1NUNDNVxcdTVDQkVcXHU1Q0M3XFx1NUNEOVxcdTVDRTlcXHU1Q0ZEXFx1NUNGQVxcdTVDRURcXHU1RDhDXFx1NUNFQVxcdTVEMEJcXHU1RDE1XFx1NUQxN1xcdTVENUNcXHU1RDFGXFx1NUQxQlxcdTVEMTFcXHU1RDE0XFx1NUQyMlxcdTVEMUFcXHU1RDE5XFx1NUQxOFxcdTVENENcXHU1RDUyXFx1NUQ0RVxcdTVENEJcXHU1RDZDXFx1NUQ3M1xcdTVENzZcXHU1RDg3XFx1NUQ4NFxcdTVEODJcXHU1REEyXFx1NUQ5RFxcdTVEQUNcXHU1REFFXFx1NURCRFxcdTVEOTBcXHU1REI3XFx1NURCQ1xcdTVEQzlcXHU1RENEXFx1NUREM1xcdTVERDJcXHU1REQ2XFx1NUREQlxcdTVERUJcXHU1REYyXFx1NURGNVxcdTVFMEJcXHU1RTFBXFx1NUUxOVxcdTVFMTFcXHU1RTFCXFx1NUUzNlxcdTVFMzdcXHU1RTQ0XFx1NUU0M1xcdTVFNDBcXHU1RTRFXFx1NUU1N1xcdTVFNTRcXHU1RTVGXFx1NUU2MlxcdTVFNjRcXHU1RTQ3XFx1NUU3NVxcdTVFNzZcXHU1RTdBXFx1OUVCQ1xcdTVFN0ZcXHU1RUEwXFx1NUVDMVxcdTVFQzJcXHU1RUM4XFx1NUVEMFxcdTVFQ0ZcIl0sXG4gICAgICBbXCI5YzQwXCIsIFwiXFx1NUVENlxcdTVFRTNcXHU1RUREXFx1NUVEQVxcdTVFREJcXHU1RUUyXFx1NUVFMVxcdTVFRThcXHU1RUU5XFx1NUVFQ1xcdTVFRjFcXHU1RUYzXFx1NUVGMFxcdTVFRjRcXHU1RUY4XFx1NUVGRVxcdTVGMDNcXHU1RjA5XFx1NUY1RFxcdTVGNUNcXHU1RjBCXFx1NUYxMVxcdTVGMTZcXHU1RjI5XFx1NUYyRFxcdTVGMzhcXHU1RjQxXFx1NUY0OFxcdTVGNENcXHU1RjRFXFx1NUYyRlxcdTVGNTFcXHU1RjU2XFx1NUY1N1xcdTVGNTlcXHU1RjYxXFx1NUY2RFxcdTVGNzNcXHU1Rjc3XFx1NUY4M1xcdTVGODJcXHU1RjdGXFx1NUY4QVxcdTVGODhcXHU1RjkxXFx1NUY4N1xcdTVGOUVcXHU1Rjk5XFx1NUY5OFxcdTVGQTBcXHU1RkE4XFx1NUZBRFxcdTVGQkNcXHU1RkQ2XFx1NUZGQlxcdTVGRTRcXHU1RkY4XFx1NUZGMVxcdTVGRERcXHU2MEIzXFx1NUZGRlxcdTYwMjFcXHU2MDYwXCJdLFxuICAgICAgW1wiOWM4MFwiLCBcIlxcdTYwMTlcXHU2MDEwXFx1NjAyOVxcdTYwMEVcXHU2MDMxXFx1NjAxQlxcdTYwMTVcXHU2MDJCXFx1NjAyNlxcdTYwMEZcXHU2MDNBXFx1NjA1QVxcdTYwNDFcXHU2MDZBXFx1NjA3N1xcdTYwNUZcXHU2MDRBXFx1NjA0NlxcdTYwNERcXHU2MDYzXFx1NjA0M1xcdTYwNjRcXHU2MDQyXFx1NjA2Q1xcdTYwNkJcXHU2MDU5XFx1NjA4MVxcdTYwOERcXHU2MEU3XFx1NjA4M1xcdTYwOUFcXHU2MDg0XFx1NjA5QlxcdTYwOTZcXHU2MDk3XFx1NjA5MlxcdTYwQTdcXHU2MDhCXFx1NjBFMVxcdTYwQjhcXHU2MEUwXFx1NjBEM1xcdTYwQjRcXHU1RkYwXFx1NjBCRFxcdTYwQzZcXHU2MEI1XFx1NjBEOFxcdTYxNERcXHU2MTE1XFx1NjEwNlxcdTYwRjZcXHU2MEY3XFx1NjEwMFxcdTYwRjRcXHU2MEZBXFx1NjEwM1xcdTYxMjFcXHU2MEZCXFx1NjBGMVxcdTYxMERcXHU2MTBFXFx1NjE0N1xcdTYxM0VcXHU2MTI4XFx1NjEyN1xcdTYxNEFcXHU2MTNGXFx1NjEzQ1xcdTYxMkNcXHU2MTM0XFx1NjEzRFxcdTYxNDJcXHU2MTQ0XFx1NjE3M1xcdTYxNzdcXHU2MTU4XFx1NjE1OVxcdTYxNUFcXHU2MTZCXFx1NjE3NFxcdTYxNkZcXHU2MTY1XFx1NjE3MVxcdTYxNUZcXHU2MTVEXFx1NjE1M1xcdTYxNzVcXHU2MTk5XFx1NjE5NlxcdTYxODdcXHU2MUFDXFx1NjE5NFxcdTYxOUFcXHU2MThBXFx1NjE5MVxcdTYxQUJcXHU2MUFFXFx1NjFDQ1xcdTYxQ0FcXHU2MUM5XFx1NjFGN1xcdTYxQzhcXHU2MUMzXFx1NjFDNlxcdTYxQkFcXHU2MUNCXFx1N0Y3OVxcdTYxQ0RcXHU2MUU2XFx1NjFFM1xcdTYxRjZcXHU2MUZBXFx1NjFGNFxcdTYxRkZcXHU2MUZEXFx1NjFGQ1xcdTYxRkVcXHU2MjAwXFx1NjIwOFxcdTYyMDlcXHU2MjBEXFx1NjIwQ1xcdTYyMTRcXHU2MjFCXCJdLFxuICAgICAgW1wiOWQ0MFwiLCBcIlxcdTYyMUVcXHU2MjIxXFx1NjIyQVxcdTYyMkVcXHU2MjMwXFx1NjIzMlxcdTYyMzNcXHU2MjQxXFx1NjI0RVxcdTYyNUVcXHU2MjYzXFx1NjI1QlxcdTYyNjBcXHU2MjY4XFx1NjI3Q1xcdTYyODJcXHU2Mjg5XFx1NjI3RVxcdTYyOTJcXHU2MjkzXFx1NjI5NlxcdTYyRDRcXHU2MjgzXFx1NjI5NFxcdTYyRDdcXHU2MkQxXFx1NjJCQlxcdTYyQ0ZcXHU2MkZGXFx1NjJDNlxcdTY0RDRcXHU2MkM4XFx1NjJEQ1xcdTYyQ0NcXHU2MkNBXFx1NjJDMlxcdTYyQzdcXHU2MjlCXFx1NjJDOVxcdTYzMENcXHU2MkVFXFx1NjJGMVxcdTYzMjdcXHU2MzAyXFx1NjMwOFxcdTYyRUZcXHU2MkY1XFx1NjM1MFxcdTYzM0VcXHU2MzREXFx1NjQxQ1xcdTYzNEZcXHU2Mzk2XFx1NjM4RVxcdTYzODBcXHU2M0FCXFx1NjM3NlxcdTYzQTNcXHU2MzhGXFx1NjM4OVxcdTYzOUZcXHU2M0I1XFx1NjM2QlwiXSxcbiAgICAgIFtcIjlkODBcIiwgXCJcXHU2MzY5XFx1NjNCRVxcdTYzRTlcXHU2M0MwXFx1NjNDNlxcdTYzRTNcXHU2M0M5XFx1NjNEMlxcdTYzRjZcXHU2M0M0XFx1NjQxNlxcdTY0MzRcXHU2NDA2XFx1NjQxM1xcdTY0MjZcXHU2NDM2XFx1NjUxRFxcdTY0MTdcXHU2NDI4XFx1NjQwRlxcdTY0NjdcXHU2NDZGXFx1NjQ3NlxcdTY0NEVcXHU2NTJBXFx1NjQ5NVxcdTY0OTNcXHU2NEE1XFx1NjRBOVxcdTY0ODhcXHU2NEJDXFx1NjREQVxcdTY0RDJcXHU2NEM1XFx1NjRDN1xcdTY0QkJcXHU2NEQ4XFx1NjRDMlxcdTY0RjFcXHU2NEU3XFx1ODIwOVxcdTY0RTBcXHU2NEUxXFx1NjJBQ1xcdTY0RTNcXHU2NEVGXFx1NjUyQ1xcdTY0RjZcXHU2NEY0XFx1NjRGMlxcdTY0RkFcXHU2NTAwXFx1NjRGRFxcdTY1MThcXHU2NTFDXFx1NjUwNVxcdTY1MjRcXHU2NTIzXFx1NjUyQlxcdTY1MzRcXHU2NTM1XFx1NjUzN1xcdTY1MzZcXHU2NTM4XFx1NzU0QlxcdTY1NDhcXHU2NTU2XFx1NjU1NVxcdTY1NERcXHU2NTU4XFx1NjU1RVxcdTY1NURcXHU2NTcyXFx1NjU3OFxcdTY1ODJcXHU2NTgzXFx1OEI4QVxcdTY1OUJcXHU2NTlGXFx1NjVBQlxcdTY1QjdcXHU2NUMzXFx1NjVDNlxcdTY1QzFcXHU2NUM0XFx1NjVDQ1xcdTY1RDJcXHU2NURCXFx1NjVEOVxcdTY1RTBcXHU2NUUxXFx1NjVGMVxcdTY3NzJcXHU2NjBBXFx1NjYwM1xcdTY1RkJcXHU2NzczXFx1NjYzNVxcdTY2MzZcXHU2NjM0XFx1NjYxQ1xcdTY2NEZcXHU2NjQ0XFx1NjY0OVxcdTY2NDFcXHU2NjVFXFx1NjY1RFxcdTY2NjRcXHU2NjY3XFx1NjY2OFxcdTY2NUZcXHU2NjYyXFx1NjY3MFxcdTY2ODNcXHU2Njg4XFx1NjY4RVxcdTY2ODlcXHU2Njg0XFx1NjY5OFxcdTY2OURcXHU2NkMxXFx1NjZCOVxcdTY2QzlcXHU2NkJFXFx1NjZCQ1wiXSxcbiAgICAgIFtcIjllNDBcIiwgXCJcXHU2NkM0XFx1NjZCOFxcdTY2RDZcXHU2NkRBXFx1NjZFMFxcdTY2M0ZcXHU2NkU2XFx1NjZFOVxcdTY2RjBcXHU2NkY1XFx1NjZGN1xcdTY3MEZcXHU2NzE2XFx1NjcxRVxcdTY3MjZcXHU2NzI3XFx1OTczOFxcdTY3MkVcXHU2NzNGXFx1NjczNlxcdTY3NDFcXHU2NzM4XFx1NjczN1xcdTY3NDZcXHU2NzVFXFx1Njc2MFxcdTY3NTlcXHU2NzYzXFx1Njc2NFxcdTY3ODlcXHU2NzcwXFx1NjdBOVxcdTY3N0NcXHU2NzZBXFx1Njc4Q1xcdTY3OEJcXHU2N0E2XFx1NjdBMVxcdTY3ODVcXHU2N0I3XFx1NjdFRlxcdTY3QjRcXHU2N0VDXFx1NjdCM1xcdTY3RTlcXHU2N0I4XFx1NjdFNFxcdTY3REVcXHU2N0REXFx1NjdFMlxcdTY3RUVcXHU2N0I5XFx1NjdDRVxcdTY3QzZcXHU2N0U3XFx1NkE5Q1xcdTY4MUVcXHU2ODQ2XFx1NjgyOVxcdTY4NDBcXHU2ODREXFx1NjgzMlxcdTY4NEVcIl0sXG4gICAgICBbXCI5ZTgwXCIsIFwiXFx1NjhCM1xcdTY4MkJcXHU2ODU5XFx1Njg2M1xcdTY4NzdcXHU2ODdGXFx1Njg5RlxcdTY4OEZcXHU2OEFEXFx1Njg5NFxcdTY4OURcXHU2ODlCXFx1Njg4M1xcdTZBQUVcXHU2OEI5XFx1Njg3NFxcdTY4QjVcXHU2OEEwXFx1NjhCQVxcdTY5MEZcXHU2ODhEXFx1Njg3RVxcdTY5MDFcXHU2OENBXFx1NjkwOFxcdTY4RDhcXHU2OTIyXFx1NjkyNlxcdTY4RTFcXHU2OTBDXFx1NjhDRFxcdTY4RDRcXHU2OEU3XFx1NjhENVxcdTY5MzZcXHU2OTEyXFx1NjkwNFxcdTY4RDdcXHU2OEUzXFx1NjkyNVxcdTY4RjlcXHU2OEUwXFx1NjhFRlxcdTY5MjhcXHU2OTJBXFx1NjkxQVxcdTY5MjNcXHU2OTIxXFx1NjhDNlxcdTY5NzlcXHU2OTc3XFx1Njk1Q1xcdTY5NzhcXHU2OTZCXFx1Njk1NFxcdTY5N0VcXHU2OTZFXFx1NjkzOVxcdTY5NzRcXHU2OTNEXFx1Njk1OVxcdTY5MzBcXHU2OTYxXFx1Njk1RVxcdTY5NURcXHU2OTgxXFx1Njk2QVxcdTY5QjJcXHU2OUFFXFx1NjlEMFxcdTY5QkZcXHU2OUMxXFx1NjlEM1xcdTY5QkVcXHU2OUNFXFx1NUJFOFxcdTY5Q0FcXHU2OUREXFx1NjlCQlxcdTY5QzNcXHU2OUE3XFx1NkEyRVxcdTY5OTFcXHU2OUEwXFx1Njk5Q1xcdTY5OTVcXHU2OUI0XFx1NjlERVxcdTY5RThcXHU2QTAyXFx1NkExQlxcdTY5RkZcXHU2QjBBXFx1NjlGOVxcdTY5RjJcXHU2OUU3XFx1NkEwNVxcdTY5QjFcXHU2QTFFXFx1NjlFRFxcdTZBMTRcXHU2OUVCXFx1NkEwQVxcdTZBMTJcXHU2QUMxXFx1NkEyM1xcdTZBMTNcXHU2QTQ0XFx1NkEwQ1xcdTZBNzJcXHU2QTM2XFx1NkE3OFxcdTZBNDdcXHU2QTYyXFx1NkE1OVxcdTZBNjZcXHU2QTQ4XFx1NkEzOFxcdTZBMjJcXHU2QTkwXFx1NkE4RFxcdTZBQTBcXHU2QTg0XFx1NkFBMlxcdTZBQTNcIl0sXG4gICAgICBbXCI5ZjQwXCIsIFwiXFx1NkE5N1xcdTg2MTdcXHU2QUJCXFx1NkFDM1xcdTZBQzJcXHU2QUI4XFx1NkFCM1xcdTZBQUNcXHU2QURFXFx1NkFEMVxcdTZBREZcXHU2QUFBXFx1NkFEQVxcdTZBRUFcXHU2QUZCXFx1NkIwNVxcdTg2MTZcXHU2QUZBXFx1NkIxMlxcdTZCMTZcXHU5QjMxXFx1NkIxRlxcdTZCMzhcXHU2QjM3XFx1NzZEQ1xcdTZCMzlcXHU5OEVFXFx1NkI0N1xcdTZCNDNcXHU2QjQ5XFx1NkI1MFxcdTZCNTlcXHU2QjU0XFx1NkI1QlxcdTZCNUZcXHU2QjYxXFx1NkI3OFxcdTZCNzlcXHU2QjdGXFx1NkI4MFxcdTZCODRcXHU2QjgzXFx1NkI4RFxcdTZCOThcXHU2Qjk1XFx1NkI5RVxcdTZCQTRcXHU2QkFBXFx1NkJBQlxcdTZCQUZcXHU2QkIyXFx1NkJCMVxcdTZCQjNcXHU2QkI3XFx1NkJCQ1xcdTZCQzZcXHU2QkNCXFx1NkJEM1xcdTZCREZcXHU2QkVDXFx1NkJFQlxcdTZCRjNcXHU2QkVGXCJdLFxuICAgICAgW1wiOWY4MFwiLCBcIlxcdTlFQkVcXHU2QzA4XFx1NkMxM1xcdTZDMTRcXHU2QzFCXFx1NkMyNFxcdTZDMjNcXHU2QzVFXFx1NkM1NVxcdTZDNjJcXHU2QzZBXFx1NkM4MlxcdTZDOERcXHU2QzlBXFx1NkM4MVxcdTZDOUJcXHU2QzdFXFx1NkM2OFxcdTZDNzNcXHU2QzkyXFx1NkM5MFxcdTZDQzRcXHU2Q0YxXFx1NkNEM1xcdTZDQkRcXHU2Q0Q3XFx1NkNDNVxcdTZDRERcXHU2Q0FFXFx1NkNCMVxcdTZDQkVcXHU2Q0JBXFx1NkNEQlxcdTZDRUZcXHU2Q0Q5XFx1NkNFQVxcdTZEMUZcXHU4ODREXFx1NkQzNlxcdTZEMkJcXHU2RDNEXFx1NkQzOFxcdTZEMTlcXHU2RDM1XFx1NkQzM1xcdTZEMTJcXHU2RDBDXFx1NkQ2M1xcdTZEOTNcXHU2RDY0XFx1NkQ1QVxcdTZENzlcXHU2RDU5XFx1NkQ4RVxcdTZEOTVcXHU2RkU0XFx1NkQ4NVxcdTZERjlcXHU2RTE1XFx1NkUwQVxcdTZEQjVcXHU2REM3XFx1NkRFNlxcdTZEQjhcXHU2REM2XFx1NkRFQ1xcdTZEREVcXHU2RENDXFx1NkRFOFxcdTZERDJcXHU2REM1XFx1NkRGQVxcdTZERDlcXHU2REU0XFx1NkRENVxcdTZERUFcXHU2REVFXFx1NkUyRFxcdTZFNkVcXHU2RTJFXFx1NkUxOVxcdTZFNzJcXHU2RTVGXFx1NkUzRVxcdTZFMjNcXHU2RTZCXFx1NkUyQlxcdTZFNzZcXHU2RTREXFx1NkUxRlxcdTZFNDNcXHU2RTNBXFx1NkU0RVxcdTZFMjRcXHU2RUZGXFx1NkUxRFxcdTZFMzhcXHU2RTgyXFx1NkVBQVxcdTZFOThcXHU2RUM5XFx1NkVCN1xcdTZFRDNcXHU2RUJEXFx1NkVBRlxcdTZFQzRcXHU2RUIyXFx1NkVENFxcdTZFRDVcXHU2RThGXFx1NkVBNVxcdTZFQzJcXHU2RTlGXFx1NkY0MVxcdTZGMTFcXHU3MDRDXFx1NkVFQ1xcdTZFRjhcXHU2RUZFXFx1NkYzRlxcdTZFRjJcXHU2RjMxXFx1NkVFRlxcdTZGMzJcXHU2RUNDXCJdLFxuICAgICAgW1wiZTA0MFwiLCBcIlxcdTZGM0VcXHU2RjEzXFx1NkVGN1xcdTZGODZcXHU2RjdBXFx1NkY3OFxcdTZGODFcXHU2RjgwXFx1NkY2RlxcdTZGNUJcXHU2RkYzXFx1NkY2RFxcdTZGODJcXHU2RjdDXFx1NkY1OFxcdTZGOEVcXHU2RjkxXFx1NkZDMlxcdTZGNjZcXHU2RkIzXFx1NkZBM1xcdTZGQTFcXHU2RkE0XFx1NkZCOVxcdTZGQzZcXHU2RkFBXFx1NkZERlxcdTZGRDVcXHU2RkVDXFx1NkZENFxcdTZGRDhcXHU2RkYxXFx1NkZFRVxcdTZGREJcXHU3MDA5XFx1NzAwQlxcdTZGRkFcXHU3MDExXFx1NzAwMVxcdTcwMEZcXHU2RkZFXFx1NzAxQlxcdTcwMUFcXHU2Rjc0XFx1NzAxRFxcdTcwMThcXHU3MDFGXFx1NzAzMFxcdTcwM0VcXHU3MDMyXFx1NzA1MVxcdTcwNjNcXHU3MDk5XFx1NzA5MlxcdTcwQUZcXHU3MEYxXFx1NzBBQ1xcdTcwQjhcXHU3MEIzXFx1NzBBRVxcdTcwREZcXHU3MENCXFx1NzBERFwiXSxcbiAgICAgIFtcImUwODBcIiwgXCJcXHU3MEQ5XFx1NzEwOVxcdTcwRkRcXHU3MTFDXFx1NzExOVxcdTcxNjVcXHU3MTU1XFx1NzE4OFxcdTcxNjZcXHU3MTYyXFx1NzE0Q1xcdTcxNTZcXHU3MTZDXFx1NzE4RlxcdTcxRkJcXHU3MTg0XFx1NzE5NVxcdTcxQThcXHU3MUFDXFx1NzFEN1xcdTcxQjlcXHU3MUJFXFx1NzFEMlxcdTcxQzlcXHU3MUQ0XFx1NzFDRVxcdTcxRTBcXHU3MUVDXFx1NzFFN1xcdTcxRjVcXHU3MUZDXFx1NzFGOVxcdTcxRkZcXHU3MjBEXFx1NzIxMFxcdTcyMUJcXHU3MjI4XFx1NzIyRFxcdTcyMkNcXHU3MjMwXFx1NzIzMlxcdTcyM0JcXHU3MjNDXFx1NzIzRlxcdTcyNDBcXHU3MjQ2XFx1NzI0QlxcdTcyNThcXHU3Mjc0XFx1NzI3RVxcdTcyODJcXHU3MjgxXFx1NzI4N1xcdTcyOTJcXHU3Mjk2XFx1NzJBMlxcdTcyQTdcXHU3MkI5XFx1NzJCMlxcdTcyQzNcXHU3MkM2XFx1NzJDNFxcdTcyQ0VcXHU3MkQyXFx1NzJFMlxcdTcyRTBcXHU3MkUxXFx1NzJGOVxcdTcyRjdcXHU1MDBGXFx1NzMxN1xcdTczMEFcXHU3MzFDXFx1NzMxNlxcdTczMURcXHU3MzM0XFx1NzMyRlxcdTczMjlcXHU3MzI1XFx1NzMzRVxcdTczNEVcXHU3MzRGXFx1OUVEOFxcdTczNTdcXHU3MzZBXFx1NzM2OFxcdTczNzBcXHU3Mzc4XFx1NzM3NVxcdTczN0JcXHU3MzdBXFx1NzNDOFxcdTczQjNcXHU3M0NFXFx1NzNCQlxcdTczQzBcXHU3M0U1XFx1NzNFRVxcdTczREVcXHU3NEEyXFx1NzQwNVxcdTc0NkZcXHU3NDI1XFx1NzNGOFxcdTc0MzJcXHU3NDNBXFx1NzQ1NVxcdTc0M0ZcXHU3NDVGXFx1NzQ1OVxcdTc0NDFcXHU3NDVDXFx1NzQ2OVxcdTc0NzBcXHU3NDYzXFx1NzQ2QVxcdTc0NzZcXHU3NDdFXFx1NzQ4QlxcdTc0OUVcXHU3NEE3XFx1NzRDQVxcdTc0Q0ZcXHU3NEQ0XFx1NzNGMVwiXSxcbiAgICAgIFtcImUxNDBcIiwgXCJcXHU3NEUwXFx1NzRFM1xcdTc0RTdcXHU3NEU5XFx1NzRFRVxcdTc0RjJcXHU3NEYwXFx1NzRGMVxcdTc0RjhcXHU3NEY3XFx1NzUwNFxcdTc1MDNcXHU3NTA1XFx1NzUwQ1xcdTc1MEVcXHU3NTBEXFx1NzUxNVxcdTc1MTNcXHU3NTFFXFx1NzUyNlxcdTc1MkNcXHU3NTNDXFx1NzU0NFxcdTc1NERcXHU3NTRBXFx1NzU0OVxcdTc1NUJcXHU3NTQ2XFx1NzU1QVxcdTc1NjlcXHU3NTY0XFx1NzU2N1xcdTc1NkJcXHU3NTZEXFx1NzU3OFxcdTc1NzZcXHU3NTg2XFx1NzU4N1xcdTc1NzRcXHU3NThBXFx1NzU4OVxcdTc1ODJcXHU3NTk0XFx1NzU5QVxcdTc1OURcXHU3NUE1XFx1NzVBM1xcdTc1QzJcXHU3NUIzXFx1NzVDM1xcdTc1QjVcXHU3NUJEXFx1NzVCOFxcdTc1QkNcXHU3NUIxXFx1NzVDRFxcdTc1Q0FcXHU3NUQyXFx1NzVEOVxcdTc1RTNcXHU3NURFXFx1NzVGRVxcdTc1RkZcIl0sXG4gICAgICBbXCJlMTgwXCIsIFwiXFx1NzVGQ1xcdTc2MDFcXHU3NUYwXFx1NzVGQVxcdTc1RjJcXHU3NUYzXFx1NzYwQlxcdTc2MERcXHU3NjA5XFx1NzYxRlxcdTc2MjdcXHU3NjIwXFx1NzYyMVxcdTc2MjJcXHU3NjI0XFx1NzYzNFxcdTc2MzBcXHU3NjNCXFx1NzY0N1xcdTc2NDhcXHU3NjQ2XFx1NzY1Q1xcdTc2NThcXHU3NjYxXFx1NzY2MlxcdTc2NjhcXHU3NjY5XFx1NzY2QVxcdTc2NjdcXHU3NjZDXFx1NzY3MFxcdTc2NzJcXHU3Njc2XFx1NzY3OFxcdTc2N0NcXHU3NjgwXFx1NzY4M1xcdTc2ODhcXHU3NjhCXFx1NzY4RVxcdTc2OTZcXHU3NjkzXFx1NzY5OVxcdTc2OUFcXHU3NkIwXFx1NzZCNFxcdTc2QjhcXHU3NkI5XFx1NzZCQVxcdTc2QzJcXHU3NkNEXFx1NzZENlxcdTc2RDJcXHU3NkRFXFx1NzZFMVxcdTc2RTVcXHU3NkU3XFx1NzZFQVxcdTg2MkZcXHU3NkZCXFx1NzcwOFxcdTc3MDdcXHU3NzA0XFx1NzcyOVxcdTc3MjRcXHU3NzFFXFx1NzcyNVxcdTc3MjZcXHU3NzFCXFx1NzczN1xcdTc3MzhcXHU3NzQ3XFx1Nzc1QVxcdTc3NjhcXHU3NzZCXFx1Nzc1QlxcdTc3NjVcXHU3NzdGXFx1Nzc3RVxcdTc3NzlcXHU3NzhFXFx1Nzc4QlxcdTc3OTFcXHU3N0EwXFx1Nzc5RVxcdTc3QjBcXHU3N0I2XFx1NzdCOVxcdTc3QkZcXHU3N0JDXFx1NzdCRFxcdTc3QkJcXHU3N0M3XFx1NzdDRFxcdTc3RDdcXHU3N0RBXFx1NzdEQ1xcdTc3RTNcXHU3N0VFXFx1NzdGQ1xcdTc4MENcXHU3ODEyXFx1NzkyNlxcdTc4MjBcXHU3OTJBXFx1Nzg0NVxcdTc4OEVcXHU3ODc0XFx1Nzg4NlxcdTc4N0NcXHU3ODlBXFx1Nzg4Q1xcdTc4QTNcXHU3OEI1XFx1NzhBQVxcdTc4QUZcXHU3OEQxXFx1NzhDNlxcdTc4Q0JcXHU3OEQ0XFx1NzhCRVxcdTc4QkNcXHU3OEM1XFx1NzhDQVxcdTc4RUNcIl0sXG4gICAgICBbXCJlMjQwXCIsIFwiXFx1NzhFN1xcdTc4REFcXHU3OEZEXFx1NzhGNFxcdTc5MDdcXHU3OTEyXFx1NzkxMVxcdTc5MTlcXHU3OTJDXFx1NzkyQlxcdTc5NDBcXHU3OTYwXFx1Nzk1N1xcdTc5NUZcXHU3OTVBXFx1Nzk1NVxcdTc5NTNcXHU3OTdBXFx1Nzk3RlxcdTc5OEFcXHU3OTlEXFx1NzlBN1xcdTlGNEJcXHU3OUFBXFx1NzlBRVxcdTc5QjNcXHU3OUI5XFx1NzlCQVxcdTc5QzlcXHU3OUQ1XFx1NzlFN1xcdTc5RUNcXHU3OUUxXFx1NzlFM1xcdTdBMDhcXHU3QTBEXFx1N0ExOFxcdTdBMTlcXHU3QTIwXFx1N0ExRlxcdTc5ODBcXHU3QTMxXFx1N0EzQlxcdTdBM0VcXHU3QTM3XFx1N0E0M1xcdTdBNTdcXHU3QTQ5XFx1N0E2MVxcdTdBNjJcXHU3QTY5XFx1OUY5RFxcdTdBNzBcXHU3QTc5XFx1N0E3RFxcdTdBODhcXHU3QTk3XFx1N0E5NVxcdTdBOThcXHU3QTk2XFx1N0FBOVxcdTdBQzhcXHU3QUIwXCJdLFxuICAgICAgW1wiZTI4MFwiLCBcIlxcdTdBQjZcXHU3QUM1XFx1N0FDNFxcdTdBQkZcXHU5MDgzXFx1N0FDN1xcdTdBQ0FcXHU3QUNEXFx1N0FDRlxcdTdBRDVcXHU3QUQzXFx1N0FEOVxcdTdBREFcXHU3QUREXFx1N0FFMVxcdTdBRTJcXHU3QUU2XFx1N0FFRFxcdTdBRjBcXHU3QjAyXFx1N0IwRlxcdTdCMEFcXHU3QjA2XFx1N0IzM1xcdTdCMThcXHU3QjE5XFx1N0IxRVxcdTdCMzVcXHU3QjI4XFx1N0IzNlxcdTdCNTBcXHU3QjdBXFx1N0IwNFxcdTdCNERcXHU3QjBCXFx1N0I0Q1xcdTdCNDVcXHU3Qjc1XFx1N0I2NVxcdTdCNzRcXHU3QjY3XFx1N0I3MFxcdTdCNzFcXHU3QjZDXFx1N0I2RVxcdTdCOURcXHU3Qjk4XFx1N0I5RlxcdTdCOERcXHU3QjlDXFx1N0I5QVxcdTdCOEJcXHU3QjkyXFx1N0I4RlxcdTdCNURcXHU3Qjk5XFx1N0JDQlxcdTdCQzFcXHU3QkNDXFx1N0JDRlxcdTdCQjRcXHU3QkM2XFx1N0JERFxcdTdCRTlcXHU3QzExXFx1N0MxNFxcdTdCRTZcXHU3QkU1XFx1N0M2MFxcdTdDMDBcXHU3QzA3XFx1N0MxM1xcdTdCRjNcXHU3QkY3XFx1N0MxN1xcdTdDMERcXHU3QkY2XFx1N0MyM1xcdTdDMjdcXHU3QzJBXFx1N0MxRlxcdTdDMzdcXHU3QzJCXFx1N0MzRFxcdTdDNENcXHU3QzQzXFx1N0M1NFxcdTdDNEZcXHU3QzQwXFx1N0M1MFxcdTdDNThcXHU3QzVGXFx1N0M2NFxcdTdDNTZcXHU3QzY1XFx1N0M2Q1xcdTdDNzVcXHU3QzgzXFx1N0M5MFxcdTdDQTRcXHU3Q0FEXFx1N0NBMlxcdTdDQUJcXHU3Q0ExXFx1N0NBOFxcdTdDQjNcXHU3Q0IyXFx1N0NCMVxcdTdDQUVcXHU3Q0I5XFx1N0NCRFxcdTdDQzBcXHU3Q0M1XFx1N0NDMlxcdTdDRDhcXHU3Q0QyXFx1N0NEQ1xcdTdDRTJcXHU5QjNCXFx1N0NFRlxcdTdDRjJcXHU3Q0Y0XFx1N0NGNlxcdTdDRkFcXHU3RDA2XCJdLFxuICAgICAgW1wiZTM0MFwiLCBcIlxcdTdEMDJcXHU3RDFDXFx1N0QxNVxcdTdEMEFcXHU3RDQ1XFx1N0Q0QlxcdTdEMkVcXHU3RDMyXFx1N0QzRlxcdTdEMzVcXHU3RDQ2XFx1N0Q3M1xcdTdENTZcXHU3RDRFXFx1N0Q3MlxcdTdENjhcXHU3RDZFXFx1N0Q0RlxcdTdENjNcXHU3RDkzXFx1N0Q4OVxcdTdENUJcXHU3RDhGXFx1N0Q3RFxcdTdEOUJcXHU3REJBXFx1N0RBRVxcdTdEQTNcXHU3REI1XFx1N0RDN1xcdTdEQkRcXHU3REFCXFx1N0UzRFxcdTdEQTJcXHU3REFGXFx1N0REQ1xcdTdEQjhcXHU3RDlGXFx1N0RCMFxcdTdERDhcXHU3REREXFx1N0RFNFxcdTdEREVcXHU3REZCXFx1N0RGMlxcdTdERTFcXHU3RTA1XFx1N0UwQVxcdTdFMjNcXHU3RTIxXFx1N0UxMlxcdTdFMzFcXHU3RTFGXFx1N0UwOVxcdTdFMEJcXHU3RTIyXFx1N0U0NlxcdTdFNjZcXHU3RTNCXFx1N0UzNVxcdTdFMzlcXHU3RTQzXFx1N0UzN1wiXSxcbiAgICAgIFtcImUzODBcIiwgXCJcXHU3RTMyXFx1N0UzQVxcdTdFNjdcXHU3RTVEXFx1N0U1NlxcdTdFNUVcXHU3RTU5XFx1N0U1QVxcdTdFNzlcXHU3RTZBXFx1N0U2OVxcdTdFN0NcXHU3RTdCXFx1N0U4M1xcdTdERDVcXHU3RTdEXFx1OEZBRVxcdTdFN0ZcXHU3RTg4XFx1N0U4OVxcdTdFOENcXHU3RTkyXFx1N0U5MFxcdTdFOTNcXHU3RTk0XFx1N0U5NlxcdTdFOEVcXHU3RTlCXFx1N0U5Q1xcdTdGMzhcXHU3RjNBXFx1N0Y0NVxcdTdGNENcXHU3RjREXFx1N0Y0RVxcdTdGNTBcXHU3RjUxXFx1N0Y1NVxcdTdGNTRcXHU3RjU4XFx1N0Y1RlxcdTdGNjBcXHU3RjY4XFx1N0Y2OVxcdTdGNjdcXHU3Rjc4XFx1N0Y4MlxcdTdGODZcXHU3RjgzXFx1N0Y4OFxcdTdGODdcXHU3RjhDXFx1N0Y5NFxcdTdGOUVcXHU3RjlEXFx1N0Y5QVxcdTdGQTNcXHU3RkFGXFx1N0ZCMlxcdTdGQjlcXHU3RkFFXFx1N0ZCNlxcdTdGQjhcXHU4QjcxXFx1N0ZDNVxcdTdGQzZcXHU3RkNBXFx1N0ZENVxcdTdGRDRcXHU3RkUxXFx1N0ZFNlxcdTdGRTlcXHU3RkYzXFx1N0ZGOVxcdTk4RENcXHU4MDA2XFx1ODAwNFxcdTgwMEJcXHU4MDEyXFx1ODAxOFxcdTgwMTlcXHU4MDFDXFx1ODAyMVxcdTgwMjhcXHU4MDNGXFx1ODAzQlxcdTgwNEFcXHU4MDQ2XFx1ODA1MlxcdTgwNThcXHU4MDVBXFx1ODA1RlxcdTgwNjJcXHU4MDY4XFx1ODA3M1xcdTgwNzJcXHU4MDcwXFx1ODA3NlxcdTgwNzlcXHU4MDdEXFx1ODA3RlxcdTgwODRcXHU4MDg2XFx1ODA4NVxcdTgwOUJcXHU4MDkzXFx1ODA5QVxcdTgwQURcXHU1MTkwXFx1ODBBQ1xcdTgwREJcXHU4MEU1XFx1ODBEOVxcdTgwRERcXHU4MEM0XFx1ODBEQVxcdTgwRDZcXHU4MTA5XFx1ODBFRlxcdTgwRjFcXHU4MTFCXFx1ODEyOVxcdTgxMjNcXHU4MTJGXFx1ODE0QlwiXSxcbiAgICAgIFtcImU0NDBcIiwgXCJcXHU5NjhCXFx1ODE0NlxcdTgxM0VcXHU4MTUzXFx1ODE1MVxcdTgwRkNcXHU4MTcxXFx1ODE2RVxcdTgxNjVcXHU4MTY2XFx1ODE3NFxcdTgxODNcXHU4MTg4XFx1ODE4QVxcdTgxODBcXHU4MTgyXFx1ODFBMFxcdTgxOTVcXHU4MUE0XFx1ODFBM1xcdTgxNUZcXHU4MTkzXFx1ODFBOVxcdTgxQjBcXHU4MUI1XFx1ODFCRVxcdTgxQjhcXHU4MUJEXFx1ODFDMFxcdTgxQzJcXHU4MUJBXFx1ODFDOVxcdTgxQ0RcXHU4MUQxXFx1ODFEOVxcdTgxRDhcXHU4MUM4XFx1ODFEQVxcdTgxREZcXHU4MUUwXFx1ODFFN1xcdTgxRkFcXHU4MUZCXFx1ODFGRVxcdTgyMDFcXHU4MjAyXFx1ODIwNVxcdTgyMDdcXHU4MjBBXFx1ODIwRFxcdTgyMTBcXHU4MjE2XFx1ODIyOVxcdTgyMkJcXHU4MjM4XFx1ODIzM1xcdTgyNDBcXHU4MjU5XFx1ODI1OFxcdTgyNURcXHU4MjVBXFx1ODI1RlxcdTgyNjRcIl0sXG4gICAgICBbXCJlNDgwXCIsIFwiXFx1ODI2MlxcdTgyNjhcXHU4MjZBXFx1ODI2QlxcdTgyMkVcXHU4MjcxXFx1ODI3N1xcdTgyNzhcXHU4MjdFXFx1ODI4RFxcdTgyOTJcXHU4MkFCXFx1ODI5RlxcdTgyQkJcXHU4MkFDXFx1ODJFMVxcdTgyRTNcXHU4MkRGXFx1ODJEMlxcdTgyRjRcXHU4MkYzXFx1ODJGQVxcdTgzOTNcXHU4MzAzXFx1ODJGQlxcdTgyRjlcXHU4MkRFXFx1ODMwNlxcdTgyRENcXHU4MzA5XFx1ODJEOVxcdTgzMzVcXHU4MzM0XFx1ODMxNlxcdTgzMzJcXHU4MzMxXFx1ODM0MFxcdTgzMzlcXHU4MzUwXFx1ODM0NVxcdTgzMkZcXHU4MzJCXFx1ODMxN1xcdTgzMThcXHU4Mzg1XFx1ODM5QVxcdTgzQUFcXHU4MzlGXFx1ODNBMlxcdTgzOTZcXHU4MzIzXFx1ODM4RVxcdTgzODdcXHU4MzhBXFx1ODM3Q1xcdTgzQjVcXHU4MzczXFx1ODM3NVxcdTgzQTBcXHU4Mzg5XFx1ODNBOFxcdTgzRjRcXHU4NDEzXFx1ODNFQlxcdTgzQ0VcXHU4M0ZEXFx1ODQwM1xcdTgzRDhcXHU4NDBCXFx1ODNDMVxcdTgzRjdcXHU4NDA3XFx1ODNFMFxcdTgzRjJcXHU4NDBEXFx1ODQyMlxcdTg0MjBcXHU4M0JEXFx1ODQzOFxcdTg1MDZcXHU4M0ZCXFx1ODQ2RFxcdTg0MkFcXHU4NDNDXFx1ODU1QVxcdTg0ODRcXHU4NDc3XFx1ODQ2QlxcdTg0QURcXHU4NDZFXFx1ODQ4MlxcdTg0NjlcXHU4NDQ2XFx1ODQyQ1xcdTg0NkZcXHU4NDc5XFx1ODQzNVxcdTg0Q0FcXHU4NDYyXFx1ODRCOVxcdTg0QkZcXHU4NDlGXFx1ODREOVxcdTg0Q0RcXHU4NEJCXFx1ODREQVxcdTg0RDBcXHU4NEMxXFx1ODRDNlxcdTg0RDZcXHU4NEExXFx1ODUyMVxcdTg0RkZcXHU4NEY0XFx1ODUxN1xcdTg1MThcXHU4NTJDXFx1ODUxRlxcdTg1MTVcXHU4NTE0XFx1ODRGQ1xcdTg1NDBcXHU4NTYzXFx1ODU1OFxcdTg1NDhcIl0sXG4gICAgICBbXCJlNTQwXCIsIFwiXFx1ODU0MVxcdTg2MDJcXHU4NTRCXFx1ODU1NVxcdTg1ODBcXHU4NUE0XFx1ODU4OFxcdTg1OTFcXHU4NThBXFx1ODVBOFxcdTg1NkRcXHU4NTk0XFx1ODU5QlxcdTg1RUFcXHU4NTg3XFx1ODU5Q1xcdTg1NzdcXHU4NTdFXFx1ODU5MFxcdTg1QzlcXHU4NUJBXFx1ODVDRlxcdTg1QjlcXHU4NUQwXFx1ODVENVxcdTg1RERcXHU4NUU1XFx1ODVEQ1xcdTg1RjlcXHU4NjBBXFx1ODYxM1xcdTg2MEJcXHU4NUZFXFx1ODVGQVxcdTg2MDZcXHU4NjIyXFx1ODYxQVxcdTg2MzBcXHU4NjNGXFx1ODY0RFxcdTRFNTVcXHU4NjU0XFx1ODY1RlxcdTg2NjdcXHU4NjcxXFx1ODY5M1xcdTg2QTNcXHU4NkE5XFx1ODZBQVxcdTg2OEJcXHU4NjhDXFx1ODZCNlxcdTg2QUZcXHU4NkM0XFx1ODZDNlxcdTg2QjBcXHU4NkM5XFx1ODgyM1xcdTg2QUJcXHU4NkQ0XFx1ODZERVxcdTg2RTlcXHU4NkVDXCJdLFxuICAgICAgW1wiZTU4MFwiLCBcIlxcdTg2REZcXHU4NkRCXFx1ODZFRlxcdTg3MTJcXHU4NzA2XFx1ODcwOFxcdTg3MDBcXHU4NzAzXFx1ODZGQlxcdTg3MTFcXHU4NzA5XFx1ODcwRFxcdTg2RjlcXHU4NzBBXFx1ODczNFxcdTg3M0ZcXHU4NzM3XFx1ODczQlxcdTg3MjVcXHU4NzI5XFx1ODcxQVxcdTg3NjBcXHU4NzVGXFx1ODc3OFxcdTg3NENcXHU4NzRFXFx1ODc3NFxcdTg3NTdcXHU4NzY4XFx1ODc2RVxcdTg3NTlcXHU4NzUzXFx1ODc2M1xcdTg3NkFcXHU4ODA1XFx1ODdBMlxcdTg3OUZcXHU4NzgyXFx1ODdBRlxcdTg3Q0JcXHU4N0JEXFx1ODdDMFxcdTg3RDBcXHU5NkQ2XFx1ODdBQlxcdTg3QzRcXHU4N0IzXFx1ODdDN1xcdTg3QzZcXHU4N0JCXFx1ODdFRlxcdTg3RjJcXHU4N0UwXFx1ODgwRlxcdTg4MERcXHU4N0ZFXFx1ODdGNlxcdTg3RjdcXHU4ODBFXFx1ODdEMlxcdTg4MTFcXHU4ODE2XFx1ODgxNVxcdTg4MjJcXHU4ODIxXFx1ODgzMVxcdTg4MzZcXHU4ODM5XFx1ODgyN1xcdTg4M0JcXHU4ODQ0XFx1ODg0MlxcdTg4NTJcXHU4ODU5XFx1ODg1RVxcdTg4NjJcXHU4ODZCXFx1ODg4MVxcdTg4N0VcXHU4ODlFXFx1ODg3NVxcdTg4N0RcXHU4OEI1XFx1ODg3MlxcdTg4ODJcXHU4ODk3XFx1ODg5MlxcdTg4QUVcXHU4ODk5XFx1ODhBMlxcdTg4OERcXHU4OEE0XFx1ODhCMFxcdTg4QkZcXHU4OEIxXFx1ODhDM1xcdTg4QzRcXHU4OEQ0XFx1ODhEOFxcdTg4RDlcXHU4OEREXFx1ODhGOVxcdTg5MDJcXHU4OEZDXFx1ODhGNFxcdTg4RThcXHU4OEYyXFx1ODkwNFxcdTg5MENcXHU4OTBBXFx1ODkxM1xcdTg5NDNcXHU4OTFFXFx1ODkyNVxcdTg5MkFcXHU4OTJCXFx1ODk0MVxcdTg5NDRcXHU4OTNCXFx1ODkzNlxcdTg5MzhcXHU4OTRDXFx1ODkxRFxcdTg5NjBcXHU4OTVFXCJdLFxuICAgICAgW1wiZTY0MFwiLCBcIlxcdTg5NjZcXHU4OTY0XFx1ODk2RFxcdTg5NkFcXHU4OTZGXFx1ODk3NFxcdTg5NzdcXHU4OTdFXFx1ODk4M1xcdTg5ODhcXHU4OThBXFx1ODk5M1xcdTg5OThcXHU4OUExXFx1ODlBOVxcdTg5QTZcXHU4OUFDXFx1ODlBRlxcdTg5QjJcXHU4OUJBXFx1ODlCRFxcdTg5QkZcXHU4OUMwXFx1ODlEQVxcdTg5RENcXHU4OUREXFx1ODlFN1xcdTg5RjRcXHU4OUY4XFx1OEEwM1xcdThBMTZcXHU4QTEwXFx1OEEwQ1xcdThBMUJcXHU4QTFEXFx1OEEyNVxcdThBMzZcXHU4QTQxXFx1OEE1QlxcdThBNTJcXHU4QTQ2XFx1OEE0OFxcdThBN0NcXHU4QTZEXFx1OEE2Q1xcdThBNjJcXHU4QTg1XFx1OEE4MlxcdThBODRcXHU4QUE4XFx1OEFBMVxcdThBOTFcXHU4QUE1XFx1OEFBNlxcdThBOUFcXHU4QUEzXFx1OEFDNFxcdThBQ0RcXHU4QUMyXFx1OEFEQVxcdThBRUJcXHU4QUYzXFx1OEFFN1wiXSxcbiAgICAgIFtcImU2ODBcIiwgXCJcXHU4QUU0XFx1OEFGMVxcdThCMTRcXHU4QUUwXFx1OEFFMlxcdThBRjdcXHU4QURFXFx1OEFEQlxcdThCMENcXHU4QjA3XFx1OEIxQVxcdThBRTFcXHU4QjE2XFx1OEIxMFxcdThCMTdcXHU4QjIwXFx1OEIzM1xcdTk3QUJcXHU4QjI2XFx1OEIyQlxcdThCM0VcXHU4QjI4XFx1OEI0MVxcdThCNENcXHU4QjRGXFx1OEI0RVxcdThCNDlcXHU4QjU2XFx1OEI1QlxcdThCNUFcXHU4QjZCXFx1OEI1RlxcdThCNkNcXHU4QjZGXFx1OEI3NFxcdThCN0RcXHU4QjgwXFx1OEI4Q1xcdThCOEVcXHU4QjkyXFx1OEI5M1xcdThCOTZcXHU4Qjk5XFx1OEI5QVxcdThDM0FcXHU4QzQxXFx1OEMzRlxcdThDNDhcXHU4QzRDXFx1OEM0RVxcdThDNTBcXHU4QzU1XFx1OEM2MlxcdThDNkNcXHU4Qzc4XFx1OEM3QVxcdThDODJcXHU4Qzg5XFx1OEM4NVxcdThDOEFcXHU4QzhEXFx1OEM4RVxcdThDOTRcXHU4QzdDXFx1OEM5OFxcdTYyMURcXHU4Q0FEXFx1OENBQVxcdThDQkRcXHU4Q0IyXFx1OENCM1xcdThDQUVcXHU4Q0I2XFx1OENDOFxcdThDQzFcXHU4Q0U0XFx1OENFM1xcdThDREFcXHU4Q0ZEXFx1OENGQVxcdThDRkJcXHU4RDA0XFx1OEQwNVxcdThEMEFcXHU4RDA3XFx1OEQwRlxcdThEMERcXHU4RDEwXFx1OUY0RVxcdThEMTNcXHU4Q0NEXFx1OEQxNFxcdThEMTZcXHU4RDY3XFx1OEQ2RFxcdThENzFcXHU4RDczXFx1OEQ4MVxcdThEOTlcXHU4REMyXFx1OERCRVxcdThEQkFcXHU4RENGXFx1OEREQVxcdThERDZcXHU4RENDXFx1OEREQlxcdThEQ0JcXHU4REVBXFx1OERFQlxcdThEREZcXHU4REUzXFx1OERGQ1xcdThFMDhcXHU4RTA5XFx1OERGRlxcdThFMURcXHU4RTFFXFx1OEUxMFxcdThFMUZcXHU4RTQyXFx1OEUzNVxcdThFMzBcXHU4RTM0XFx1OEU0QVwiXSxcbiAgICAgIFtcImU3NDBcIiwgXCJcXHU4RTQ3XFx1OEU0OVxcdThFNENcXHU4RTUwXFx1OEU0OFxcdThFNTlcXHU4RTY0XFx1OEU2MFxcdThFMkFcXHU4RTYzXFx1OEU1NVxcdThFNzZcXHU4RTcyXFx1OEU3Q1xcdThFODFcXHU4RTg3XFx1OEU4NVxcdThFODRcXHU4RThCXFx1OEU4QVxcdThFOTNcXHU4RTkxXFx1OEU5NFxcdThFOTlcXHU4RUFBXFx1OEVBMVxcdThFQUNcXHU4RUIwXFx1OEVDNlxcdThFQjFcXHU4RUJFXFx1OEVDNVxcdThFQzhcXHU4RUNCXFx1OEVEQlxcdThFRTNcXHU4RUZDXFx1OEVGQlxcdThFRUJcXHU4RUZFXFx1OEYwQVxcdThGMDVcXHU4RjE1XFx1OEYxMlxcdThGMTlcXHU4RjEzXFx1OEYxQ1xcdThGMUZcXHU4RjFCXFx1OEYwQ1xcdThGMjZcXHU4RjMzXFx1OEYzQlxcdThGMzlcXHU4RjQ1XFx1OEY0MlxcdThGM0VcXHU4RjRDXFx1OEY0OVxcdThGNDZcXHU4RjRFXFx1OEY1N1xcdThGNUNcIl0sXG4gICAgICBbXCJlNzgwXCIsIFwiXFx1OEY2MlxcdThGNjNcXHU4RjY0XFx1OEY5Q1xcdThGOUZcXHU4RkEzXFx1OEZBRFxcdThGQUZcXHU4RkI3XFx1OEZEQVxcdThGRTVcXHU4RkUyXFx1OEZFQVxcdThGRUZcXHU5MDg3XFx1OEZGNFxcdTkwMDVcXHU4RkY5XFx1OEZGQVxcdTkwMTFcXHU5MDE1XFx1OTAyMVxcdTkwMERcXHU5MDFFXFx1OTAxNlxcdTkwMEJcXHU5MDI3XFx1OTAzNlxcdTkwMzVcXHU5MDM5XFx1OEZGOFxcdTkwNEZcXHU5MDUwXFx1OTA1MVxcdTkwNTJcXHU5MDBFXFx1OTA0OVxcdTkwM0VcXHU5MDU2XFx1OTA1OFxcdTkwNUVcXHU5MDY4XFx1OTA2RlxcdTkwNzZcXHU5NkE4XFx1OTA3MlxcdTkwODJcXHU5MDdEXFx1OTA4MVxcdTkwODBcXHU5MDhBXFx1OTA4OVxcdTkwOEZcXHU5MEE4XFx1OTBBRlxcdTkwQjFcXHU5MEI1XFx1OTBFMlxcdTkwRTRcXHU2MjQ4XFx1OTBEQlxcdTkxMDJcXHU5MTEyXFx1OTExOVxcdTkxMzJcXHU5MTMwXFx1OTE0QVxcdTkxNTZcXHU5MTU4XFx1OTE2M1xcdTkxNjVcXHU5MTY5XFx1OTE3M1xcdTkxNzJcXHU5MThCXFx1OTE4OVxcdTkxODJcXHU5MUEyXFx1OTFBQlxcdTkxQUZcXHU5MUFBXFx1OTFCNVxcdTkxQjRcXHU5MUJBXFx1OTFDMFxcdTkxQzFcXHU5MUM5XFx1OTFDQlxcdTkxRDBcXHU5MUQ2XFx1OTFERlxcdTkxRTFcXHU5MURCXFx1OTFGQ1xcdTkxRjVcXHU5MUY2XFx1OTIxRVxcdTkxRkZcXHU5MjE0XFx1OTIyQ1xcdTkyMTVcXHU5MjExXFx1OTI1RVxcdTkyNTdcXHU5MjQ1XFx1OTI0OVxcdTkyNjRcXHU5MjQ4XFx1OTI5NVxcdTkyM0ZcXHU5MjRCXFx1OTI1MFxcdTkyOUNcXHU5Mjk2XFx1OTI5M1xcdTkyOUJcXHU5MjVBXFx1OTJDRlxcdTkyQjlcXHU5MkI3XFx1OTJFOVxcdTkzMEZcXHU5MkZBXFx1OTM0NFxcdTkzMkVcIl0sXG4gICAgICBbXCJlODQwXCIsIFwiXFx1OTMxOVxcdTkzMjJcXHU5MzFBXFx1OTMyM1xcdTkzM0FcXHU5MzM1XFx1OTMzQlxcdTkzNUNcXHU5MzYwXFx1OTM3Q1xcdTkzNkVcXHU5MzU2XFx1OTNCMFxcdTkzQUNcXHU5M0FEXFx1OTM5NFxcdTkzQjlcXHU5M0Q2XFx1OTNEN1xcdTkzRThcXHU5M0U1XFx1OTNEOFxcdTkzQzNcXHU5M0REXFx1OTNEMFxcdTkzQzhcXHU5M0U0XFx1OTQxQVxcdTk0MTRcXHU5NDEzXFx1OTQwM1xcdTk0MDdcXHU5NDEwXFx1OTQzNlxcdTk0MkJcXHU5NDM1XFx1OTQyMVxcdTk0M0FcXHU5NDQxXFx1OTQ1MlxcdTk0NDRcXHU5NDVCXFx1OTQ2MFxcdTk0NjJcXHU5NDVFXFx1OTQ2QVxcdTkyMjlcXHU5NDcwXFx1OTQ3NVxcdTk0NzdcXHU5NDdEXFx1OTQ1QVxcdTk0N0NcXHU5NDdFXFx1OTQ4MVxcdTk0N0ZcXHU5NTgyXFx1OTU4N1xcdTk1OEFcXHU5NTk0XFx1OTU5NlxcdTk1OThcXHU5NTk5XCJdLFxuICAgICAgW1wiZTg4MFwiLCBcIlxcdTk1QTBcXHU5NUE4XFx1OTVBN1xcdTk1QURcXHU5NUJDXFx1OTVCQlxcdTk1QjlcXHU5NUJFXFx1OTVDQVxcdTZGRjZcXHU5NUMzXFx1OTVDRFxcdTk1Q0NcXHU5NUQ1XFx1OTVENFxcdTk1RDZcXHU5NURDXFx1OTVFMVxcdTk1RTVcXHU5NUUyXFx1OTYyMVxcdTk2MjhcXHU5NjJFXFx1OTYyRlxcdTk2NDJcXHU5NjRDXFx1OTY0RlxcdTk2NEJcXHU5Njc3XFx1OTY1Q1xcdTk2NUVcXHU5NjVEXFx1OTY1RlxcdTk2NjZcXHU5NjcyXFx1OTY2Q1xcdTk2OERcXHU5Njk4XFx1OTY5NVxcdTk2OTdcXHU5NkFBXFx1OTZBN1xcdTk2QjFcXHU5NkIyXFx1OTZCMFxcdTk2QjRcXHU5NkI2XFx1OTZCOFxcdTk2QjlcXHU5NkNFXFx1OTZDQlxcdTk2QzlcXHU5NkNEXFx1ODk0RFxcdTk2RENcXHU5NzBEXFx1OTZENVxcdTk2RjlcXHU5NzA0XFx1OTcwNlxcdTk3MDhcXHU5NzEzXFx1OTcwRVxcdTk3MTFcXHU5NzBGXFx1OTcxNlxcdTk3MTlcXHU5NzI0XFx1OTcyQVxcdTk3MzBcXHU5NzM5XFx1OTczRFxcdTk3M0VcXHU5NzQ0XFx1OTc0NlxcdTk3NDhcXHU5NzQyXFx1OTc0OVxcdTk3NUNcXHU5NzYwXFx1OTc2NFxcdTk3NjZcXHU5NzY4XFx1NTJEMlxcdTk3NkJcXHU5NzcxXFx1OTc3OVxcdTk3ODVcXHU5NzdDXFx1OTc4MVxcdTk3N0FcXHU5Nzg2XFx1OTc4QlxcdTk3OEZcXHU5NzkwXFx1OTc5Q1xcdTk3QThcXHU5N0E2XFx1OTdBM1xcdTk3QjNcXHU5N0I0XFx1OTdDM1xcdTk3QzZcXHU5N0M4XFx1OTdDQlxcdTk3RENcXHU5N0VEXFx1OUY0RlxcdTk3RjJcXHU3QURGXFx1OTdGNlxcdTk3RjVcXHU5ODBGXFx1OTgwQ1xcdTk4MzhcXHU5ODI0XFx1OTgyMVxcdTk4MzdcXHU5ODNEXFx1OTg0NlxcdTk4NEZcXHU5ODRCXFx1OTg2QlxcdTk4NkZcXHU5ODcwXCJdLFxuICAgICAgW1wiZTk0MFwiLCBcIlxcdTk4NzFcXHU5ODc0XFx1OTg3M1xcdTk4QUFcXHU5OEFGXFx1OThCMVxcdTk4QjZcXHU5OEM0XFx1OThDM1xcdTk4QzZcXHU5OEU5XFx1OThFQlxcdTk5MDNcXHU5OTA5XFx1OTkxMlxcdTk5MTRcXHU5OTE4XFx1OTkyMVxcdTk5MURcXHU5OTFFXFx1OTkyNFxcdTk5MjBcXHU5OTJDXFx1OTkyRVxcdTk5M0RcXHU5OTNFXFx1OTk0MlxcdTk5NDlcXHU5OTQ1XFx1OTk1MFxcdTk5NEJcXHU5OTUxXFx1OTk1MlxcdTk5NENcXHU5OTU1XFx1OTk5N1xcdTk5OThcXHU5OUE1XFx1OTlBRFxcdTk5QUVcXHU5OUJDXFx1OTlERlxcdTk5REJcXHU5OUREXFx1OTlEOFxcdTk5RDFcXHU5OUVEXFx1OTlFRVxcdTk5RjFcXHU5OUYyXFx1OTlGQlxcdTk5RjhcXHU5QTAxXFx1OUEwRlxcdTlBMDVcXHU5OUUyXFx1OUExOVxcdTlBMkJcXHU5QTM3XFx1OUE0NVxcdTlBNDJcXHU5QTQwXFx1OUE0M1wiXSxcbiAgICAgIFtcImU5ODBcIiwgXCJcXHU5QTNFXFx1OUE1NVxcdTlBNERcXHU5QTVCXFx1OUE1N1xcdTlBNUZcXHU5QTYyXFx1OUE2NVxcdTlBNjRcXHU5QTY5XFx1OUE2QlxcdTlBNkFcXHU5QUFEXFx1OUFCMFxcdTlBQkNcXHU5QUMwXFx1OUFDRlxcdTlBRDFcXHU5QUQzXFx1OUFENFxcdTlBREVcXHU5QURGXFx1OUFFMlxcdTlBRTNcXHU5QUU2XFx1OUFFRlxcdTlBRUJcXHU5QUVFXFx1OUFGNFxcdTlBRjFcXHU5QUY3XFx1OUFGQlxcdTlCMDZcXHU5QjE4XFx1OUIxQVxcdTlCMUZcXHU5QjIyXFx1OUIyM1xcdTlCMjVcXHU5QjI3XFx1OUIyOFxcdTlCMjlcXHU5QjJBXFx1OUIyRVxcdTlCMkZcXHU5QjMyXFx1OUI0NFxcdTlCNDNcXHU5QjRGXFx1OUI0RFxcdTlCNEVcXHU5QjUxXFx1OUI1OFxcdTlCNzRcXHU5QjkzXFx1OUI4M1xcdTlCOTFcXHU5Qjk2XFx1OUI5N1xcdTlCOUZcXHU5QkEwXFx1OUJBOFxcdTlCQjRcXHU5QkMwXFx1OUJDQVxcdTlCQjlcXHU5QkM2XFx1OUJDRlxcdTlCRDFcXHU5QkQyXFx1OUJFM1xcdTlCRTJcXHU5QkU0XFx1OUJENFxcdTlCRTFcXHU5QzNBXFx1OUJGMlxcdTlCRjFcXHU5QkYwXFx1OUMxNVxcdTlDMTRcXHU5QzA5XFx1OUMxM1xcdTlDMENcXHU5QzA2XFx1OUMwOFxcdTlDMTJcXHU5QzBBXFx1OUMwNFxcdTlDMkVcXHU5QzFCXFx1OUMyNVxcdTlDMjRcXHU5QzIxXFx1OUMzMFxcdTlDNDdcXHU5QzMyXFx1OUM0NlxcdTlDM0VcXHU5QzVBXFx1OUM2MFxcdTlDNjdcXHU5Qzc2XFx1OUM3OFxcdTlDRTdcXHU5Q0VDXFx1OUNGMFxcdTlEMDlcXHU5RDA4XFx1OUNFQlxcdTlEMDNcXHU5RDA2XFx1OUQyQVxcdTlEMjZcXHU5REFGXFx1OUQyM1xcdTlEMUZcXHU5RDQ0XFx1OUQxNVxcdTlEMTJcXHU5RDQxXFx1OUQzRlxcdTlEM0VcXHU5RDQ2XFx1OUQ0OFwiXSxcbiAgICAgIFtcImVhNDBcIiwgXCJcXHU5RDVEXFx1OUQ1RVxcdTlENjRcXHU5RDUxXFx1OUQ1MFxcdTlENTlcXHU5RDcyXFx1OUQ4OVxcdTlEODdcXHU5REFCXFx1OUQ2RlxcdTlEN0FcXHU5RDlBXFx1OURBNFxcdTlEQTlcXHU5REIyXFx1OURDNFxcdTlEQzFcXHU5REJCXFx1OURCOFxcdTlEQkFcXHU5REM2XFx1OURDRlxcdTlEQzJcXHU5REQ5XFx1OUREM1xcdTlERjhcXHU5REU2XFx1OURFRFxcdTlERUZcXHU5REZEXFx1OUUxQVxcdTlFMUJcXHU5RTFFXFx1OUU3NVxcdTlFNzlcXHU5RTdEXFx1OUU4MVxcdTlFODhcXHU5RThCXFx1OUU4Q1xcdTlFOTJcXHU5RTk1XFx1OUU5MVxcdTlFOURcXHU5RUE1XFx1OUVBOVxcdTlFQjhcXHU5RUFBXFx1OUVBRFxcdTk3NjFcXHU5RUNDXFx1OUVDRVxcdTlFQ0ZcXHU5RUQwXFx1OUVENFxcdTlFRENcXHU5RURFXFx1OUVERFxcdTlFRTBcXHU5RUU1XFx1OUVFOFxcdTlFRUZcIl0sXG4gICAgICBbXCJlYTgwXCIsIFwiXFx1OUVGNFxcdTlFRjZcXHU5RUY3XFx1OUVGOVxcdTlFRkJcXHU5RUZDXFx1OUVGRFxcdTlGMDdcXHU5RjA4XFx1NzZCN1xcdTlGMTVcXHU5RjIxXFx1OUYyQ1xcdTlGM0VcXHU5RjRBXFx1OUY1MlxcdTlGNTRcXHU5RjYzXFx1OUY1RlxcdTlGNjBcXHU5RjYxXFx1OUY2NlxcdTlGNjdcXHU5RjZDXFx1OUY2QVxcdTlGNzdcXHU5RjcyXFx1OUY3NlxcdTlGOTVcXHU5RjlDXFx1OUZBMFxcdTU4MkZcXHU2OUM3XFx1OTA1OVxcdTc0NjRcXHU1MURDXFx1NzE5OVwiXSxcbiAgICAgIFtcImVkNDBcIiwgXCJcXHU3RThBXFx1ODkxQ1xcdTkzNDhcXHU5Mjg4XFx1ODREQ1xcdTRGQzlcXHU3MEJCXFx1NjYzMVxcdTY4QzhcXHU5MkY5XFx1NjZGQlxcdTVGNDVcXHU0RTI4XFx1NEVFMVxcdTRFRkNcXHU0RjAwXFx1NEYwM1xcdTRGMzlcXHU0RjU2XFx1NEY5MlxcdTRGOEFcXHU0RjlBXFx1NEY5NFxcdTRGQ0RcXHU1MDQwXFx1NTAyMlxcdTRGRkZcXHU1MDFFXFx1NTA0NlxcdTUwNzBcXHU1MDQyXFx1NTA5NFxcdTUwRjRcXHU1MEQ4XFx1NTE0QVxcdTUxNjRcXHU1MTlEXFx1NTFCRVxcdTUxRUNcXHU1MjE1XFx1NTI5Q1xcdTUyQTZcXHU1MkMwXFx1NTJEQlxcdTUzMDBcXHU1MzA3XFx1NTMyNFxcdTUzNzJcXHU1MzkzXFx1NTNCMlxcdTUzRERcXHVGQTBFXFx1NTQ5Q1xcdTU0OEFcXHU1NEE5XFx1NTRGRlxcdTU1ODZcXHU1NzU5XFx1NTc2NVxcdTU3QUNcXHU1N0M4XFx1NTdDN1xcdUZBMEZcIl0sXG4gICAgICBbXCJlZDgwXCIsIFwiXFx1RkExMFxcdTU4OUVcXHU1OEIyXFx1NTkwQlxcdTU5NTNcXHU1OTVCXFx1NTk1RFxcdTU5NjNcXHU1OUE0XFx1NTlCQVxcdTVCNTZcXHU1QkMwXFx1NzUyRlxcdTVCRDhcXHU1QkVDXFx1NUMxRVxcdTVDQTZcXHU1Q0JBXFx1NUNGNVxcdTVEMjdcXHU1RDUzXFx1RkExMVxcdTVENDJcXHU1RDZEXFx1NURCOFxcdTVEQjlcXHU1REQwXFx1NUYyMVxcdTVGMzRcXHU1RjY3XFx1NUZCN1xcdTVGREVcXHU2MDVEXFx1NjA4NVxcdTYwOEFcXHU2MERFXFx1NjBENVxcdTYxMjBcXHU2MEYyXFx1NjExMVxcdTYxMzdcXHU2MTMwXFx1NjE5OFxcdTYyMTNcXHU2MkE2XFx1NjNGNVxcdTY0NjBcXHU2NDlEXFx1NjRDRVxcdTY1NEVcXHU2NjAwXFx1NjYxNVxcdTY2M0JcXHU2NjA5XFx1NjYyRVxcdTY2MUVcXHU2NjI0XFx1NjY2NVxcdTY2NTdcXHU2NjU5XFx1RkExMlxcdTY2NzNcXHU2Njk5XFx1NjZBMFxcdTY2QjJcXHU2NkJGXFx1NjZGQVxcdTY3MEVcXHVGOTI5XFx1Njc2NlxcdTY3QkJcXHU2ODUyXFx1NjdDMFxcdTY4MDFcXHU2ODQ0XFx1NjhDRlxcdUZBMTNcXHU2OTY4XFx1RkExNFxcdTY5OThcXHU2OUUyXFx1NkEzMFxcdTZBNkJcXHU2QTQ2XFx1NkE3M1xcdTZBN0VcXHU2QUUyXFx1NkFFNFxcdTZCRDZcXHU2QzNGXFx1NkM1Q1xcdTZDODZcXHU2QzZGXFx1NkNEQVxcdTZEMDRcXHU2RDg3XFx1NkQ2RlxcdTZEOTZcXHU2REFDXFx1NkRDRlxcdTZERjhcXHU2REYyXFx1NkRGQ1xcdTZFMzlcXHU2RTVDXFx1NkUyN1xcdTZFM0NcXHU2RUJGXFx1NkY4OFxcdTZGQjVcXHU2RkY1XFx1NzAwNVxcdTcwMDdcXHU3MDI4XFx1NzA4NVxcdTcwQUJcXHU3MTBGXFx1NzEwNFxcdTcxNUNcXHU3MTQ2XFx1NzE0N1xcdUZBMTVcXHU3MUMxXFx1NzFGRVxcdTcyQjFcIl0sXG4gICAgICBbXCJlZTQwXCIsIFwiXFx1NzJCRVxcdTczMjRcXHVGQTE2XFx1NzM3N1xcdTczQkRcXHU3M0M5XFx1NzNENlxcdTczRTNcXHU3M0QyXFx1NzQwN1xcdTczRjVcXHU3NDI2XFx1NzQyQVxcdTc0MjlcXHU3NDJFXFx1NzQ2MlxcdTc0ODlcXHU3NDlGXFx1NzUwMVxcdTc1NkZcXHU3NjgyXFx1NzY5Q1xcdTc2OUVcXHU3NjlCXFx1NzZBNlxcdUZBMTdcXHU3NzQ2XFx1NTJBRlxcdTc4MjFcXHU3ODRFXFx1Nzg2NFxcdTc4N0FcXHU3OTMwXFx1RkExOFxcdUZBMTlcXHVGQTFBXFx1Nzk5NFxcdUZBMUJcXHU3OTlCXFx1N0FEMVxcdTdBRTdcXHVGQTFDXFx1N0FFQlxcdTdCOUVcXHVGQTFEXFx1N0Q0OFxcdTdENUNcXHU3REI3XFx1N0RBMFxcdTdERDZcXHU3RTUyXFx1N0Y0N1xcdTdGQTFcXHVGQTFFXFx1ODMwMVxcdTgzNjJcXHU4MzdGXFx1ODNDN1xcdTgzRjZcXHU4NDQ4XFx1ODRCNFxcdTg1NTNcXHU4NTU5XCJdLFxuICAgICAgW1wiZWU4MFwiLCBcIlxcdTg1NkJcXHVGQTFGXFx1ODVCMFxcdUZBMjBcXHVGQTIxXFx1ODgwN1xcdTg4RjVcXHU4QTEyXFx1OEEzN1xcdThBNzlcXHU4QUE3XFx1OEFCRVxcdThBREZcXHVGQTIyXFx1OEFGNlxcdThCNTNcXHU4QjdGXFx1OENGMFxcdThDRjRcXHU4RDEyXFx1OEQ3NlxcdUZBMjNcXHU4RUNGXFx1RkEyNFxcdUZBMjVcXHU5MDY3XFx1OTBERVxcdUZBMjZcXHU5MTE1XFx1OTEyN1xcdTkxREFcXHU5MUQ3XFx1OTFERVxcdTkxRURcXHU5MUVFXFx1OTFFNFxcdTkxRTVcXHU5MjA2XFx1OTIxMFxcdTkyMEFcXHU5MjNBXFx1OTI0MFxcdTkyM0NcXHU5MjRFXFx1OTI1OVxcdTkyNTFcXHU5MjM5XFx1OTI2N1xcdTkyQTdcXHU5Mjc3XFx1OTI3OFxcdTkyRTdcXHU5MkQ3XFx1OTJEOVxcdTkyRDBcXHVGQTI3XFx1OTJENVxcdTkyRTBcXHU5MkQzXFx1OTMyNVxcdTkzMjFcXHU5MkZCXFx1RkEyOFxcdTkzMUVcXHU5MkZGXFx1OTMxRFxcdTkzMDJcXHU5MzcwXFx1OTM1N1xcdTkzQTRcXHU5M0M2XFx1OTNERVxcdTkzRjhcXHU5NDMxXFx1OTQ0NVxcdTk0NDhcXHU5NTkyXFx1RjlEQ1xcdUZBMjlcXHU5NjlEXFx1OTZBRlxcdTk3MzNcXHU5NzNCXFx1OTc0M1xcdTk3NERcXHU5NzRGXFx1OTc1MVxcdTk3NTVcXHU5ODU3XFx1OTg2NVxcdUZBMkFcXHVGQTJCXFx1OTkyN1xcdUZBMkNcXHU5OTlFXFx1OUE0RVxcdTlBRDlcXHU5QURDXFx1OUI3NVxcdTlCNzJcXHU5QjhGXFx1OUJCMVxcdTlCQkJcXHU5QzAwXFx1OUQ3MFxcdTlENkJcXHVGQTJEXFx1OUUxOVxcdTlFRDFcIl0sXG4gICAgICBbXCJlZWVmXCIsIFwiXFx1MjE3MFwiLCA5LCBcIlxcdUZGRTJcXHVGRkU0XFx1RkYwN1xcdUZGMDJcIl0sXG4gICAgICBbXCJmMDQwXCIsIFwiXFx1RTAwMFwiLCA2Ml0sXG4gICAgICBbXCJmMDgwXCIsIFwiXFx1RTAzRlwiLCAxMjRdLFxuICAgICAgW1wiZjE0MFwiLCBcIlxcdUUwQkNcIiwgNjJdLFxuICAgICAgW1wiZjE4MFwiLCBcIlxcdUUwRkJcIiwgMTI0XSxcbiAgICAgIFtcImYyNDBcIiwgXCJcXHVFMTc4XCIsIDYyXSxcbiAgICAgIFtcImYyODBcIiwgXCJcXHVFMUI3XCIsIDEyNF0sXG4gICAgICBbXCJmMzQwXCIsIFwiXFx1RTIzNFwiLCA2Ml0sXG4gICAgICBbXCJmMzgwXCIsIFwiXFx1RTI3M1wiLCAxMjRdLFxuICAgICAgW1wiZjQ0MFwiLCBcIlxcdUUyRjBcIiwgNjJdLFxuICAgICAgW1wiZjQ4MFwiLCBcIlxcdUUzMkZcIiwgMTI0XSxcbiAgICAgIFtcImY1NDBcIiwgXCJcXHVFM0FDXCIsIDYyXSxcbiAgICAgIFtcImY1ODBcIiwgXCJcXHVFM0VCXCIsIDEyNF0sXG4gICAgICBbXCJmNjQwXCIsIFwiXFx1RTQ2OFwiLCA2Ml0sXG4gICAgICBbXCJmNjgwXCIsIFwiXFx1RTRBN1wiLCAxMjRdLFxuICAgICAgW1wiZjc0MFwiLCBcIlxcdUU1MjRcIiwgNjJdLFxuICAgICAgW1wiZjc4MFwiLCBcIlxcdUU1NjNcIiwgMTI0XSxcbiAgICAgIFtcImY4NDBcIiwgXCJcXHVFNUUwXCIsIDYyXSxcbiAgICAgIFtcImY4ODBcIiwgXCJcXHVFNjFGXCIsIDEyNF0sXG4gICAgICBbXCJmOTQwXCIsIFwiXFx1RTY5Q1wiXSxcbiAgICAgIFtcImZhNDBcIiwgXCJcXHUyMTcwXCIsIDksIFwiXFx1MjE2MFwiLCA5LCBcIlxcdUZGRTJcXHVGRkU0XFx1RkYwN1xcdUZGMDJcXHUzMjMxXFx1MjExNlxcdTIxMjFcXHUyMjM1XFx1N0U4QVxcdTg5MUNcXHU5MzQ4XFx1OTI4OFxcdTg0RENcXHU0RkM5XFx1NzBCQlxcdTY2MzFcXHU2OEM4XFx1OTJGOVxcdTY2RkJcXHU1RjQ1XFx1NEUyOFxcdTRFRTFcXHU0RUZDXFx1NEYwMFxcdTRGMDNcXHU0RjM5XFx1NEY1NlxcdTRGOTJcXHU0RjhBXFx1NEY5QVxcdTRGOTRcXHU0RkNEXFx1NTA0MFxcdTUwMjJcXHU0RkZGXFx1NTAxRVxcdTUwNDZcXHU1MDcwXFx1NTA0MlxcdTUwOTRcXHU1MEY0XFx1NTBEOFxcdTUxNEFcIl0sXG4gICAgICBbXCJmYTgwXCIsIFwiXFx1NTE2NFxcdTUxOURcXHU1MUJFXFx1NTFFQ1xcdTUyMTVcXHU1MjlDXFx1NTJBNlxcdTUyQzBcXHU1MkRCXFx1NTMwMFxcdTUzMDdcXHU1MzI0XFx1NTM3MlxcdTUzOTNcXHU1M0IyXFx1NTNERFxcdUZBMEVcXHU1NDlDXFx1NTQ4QVxcdTU0QTlcXHU1NEZGXFx1NTU4NlxcdTU3NTlcXHU1NzY1XFx1NTdBQ1xcdTU3QzhcXHU1N0M3XFx1RkEwRlxcdUZBMTBcXHU1ODlFXFx1NThCMlxcdTU5MEJcXHU1OTUzXFx1NTk1QlxcdTU5NURcXHU1OTYzXFx1NTlBNFxcdTU5QkFcXHU1QjU2XFx1NUJDMFxcdTc1MkZcXHU1QkQ4XFx1NUJFQ1xcdTVDMUVcXHU1Q0E2XFx1NUNCQVxcdTVDRjVcXHU1RDI3XFx1NUQ1M1xcdUZBMTFcXHU1RDQyXFx1NUQ2RFxcdTVEQjhcXHU1REI5XFx1NUREMFxcdTVGMjFcXHU1RjM0XFx1NUY2N1xcdTVGQjdcXHU1RkRFXFx1NjA1RFxcdTYwODVcXHU2MDhBXFx1NjBERVxcdTYwRDVcXHU2MTIwXFx1NjBGMlxcdTYxMTFcXHU2MTM3XFx1NjEzMFxcdTYxOThcXHU2MjEzXFx1NjJBNlxcdTYzRjVcXHU2NDYwXFx1NjQ5RFxcdTY0Q0VcXHU2NTRFXFx1NjYwMFxcdTY2MTVcXHU2NjNCXFx1NjYwOVxcdTY2MkVcXHU2NjFFXFx1NjYyNFxcdTY2NjVcXHU2NjU3XFx1NjY1OVxcdUZBMTJcXHU2NjczXFx1NjY5OVxcdTY2QTBcXHU2NkIyXFx1NjZCRlxcdTY2RkFcXHU2NzBFXFx1RjkyOVxcdTY3NjZcXHU2N0JCXFx1Njg1MlxcdTY3QzBcXHU2ODAxXFx1Njg0NFxcdTY4Q0ZcXHVGQTEzXFx1Njk2OFxcdUZBMTRcXHU2OTk4XFx1NjlFMlxcdTZBMzBcXHU2QTZCXFx1NkE0NlxcdTZBNzNcXHU2QTdFXFx1NkFFMlxcdTZBRTRcXHU2QkQ2XFx1NkMzRlxcdTZDNUNcXHU2Qzg2XFx1NkM2RlxcdTZDREFcXHU2RDA0XFx1NkQ4N1xcdTZENkZcIl0sXG4gICAgICBbXCJmYjQwXCIsIFwiXFx1NkQ5NlxcdTZEQUNcXHU2RENGXFx1NkRGOFxcdTZERjJcXHU2REZDXFx1NkUzOVxcdTZFNUNcXHU2RTI3XFx1NkUzQ1xcdTZFQkZcXHU2Rjg4XFx1NkZCNVxcdTZGRjVcXHU3MDA1XFx1NzAwN1xcdTcwMjhcXHU3MDg1XFx1NzBBQlxcdTcxMEZcXHU3MTA0XFx1NzE1Q1xcdTcxNDZcXHU3MTQ3XFx1RkExNVxcdTcxQzFcXHU3MUZFXFx1NzJCMVxcdTcyQkVcXHU3MzI0XFx1RkExNlxcdTczNzdcXHU3M0JEXFx1NzNDOVxcdTczRDZcXHU3M0UzXFx1NzNEMlxcdTc0MDdcXHU3M0Y1XFx1NzQyNlxcdTc0MkFcXHU3NDI5XFx1NzQyRVxcdTc0NjJcXHU3NDg5XFx1NzQ5RlxcdTc1MDFcXHU3NTZGXFx1NzY4MlxcdTc2OUNcXHU3NjlFXFx1NzY5QlxcdTc2QTZcXHVGQTE3XFx1Nzc0NlxcdTUyQUZcXHU3ODIxXFx1Nzg0RVxcdTc4NjRcXHU3ODdBXFx1NzkzMFxcdUZBMThcXHVGQTE5XCJdLFxuICAgICAgW1wiZmI4MFwiLCBcIlxcdUZBMUFcXHU3OTk0XFx1RkExQlxcdTc5OUJcXHU3QUQxXFx1N0FFN1xcdUZBMUNcXHU3QUVCXFx1N0I5RVxcdUZBMURcXHU3RDQ4XFx1N0Q1Q1xcdTdEQjdcXHU3REEwXFx1N0RENlxcdTdFNTJcXHU3RjQ3XFx1N0ZBMVxcdUZBMUVcXHU4MzAxXFx1ODM2MlxcdTgzN0ZcXHU4M0M3XFx1ODNGNlxcdTg0NDhcXHU4NEI0XFx1ODU1M1xcdTg1NTlcXHU4NTZCXFx1RkExRlxcdTg1QjBcXHVGQTIwXFx1RkEyMVxcdTg4MDdcXHU4OEY1XFx1OEExMlxcdThBMzdcXHU4QTc5XFx1OEFBN1xcdThBQkVcXHU4QURGXFx1RkEyMlxcdThBRjZcXHU4QjUzXFx1OEI3RlxcdThDRjBcXHU4Q0Y0XFx1OEQxMlxcdThENzZcXHVGQTIzXFx1OEVDRlxcdUZBMjRcXHVGQTI1XFx1OTA2N1xcdTkwREVcXHVGQTI2XFx1OTExNVxcdTkxMjdcXHU5MURBXFx1OTFEN1xcdTkxREVcXHU5MUVEXFx1OTFFRVxcdTkxRTRcXHU5MUU1XFx1OTIwNlxcdTkyMTBcXHU5MjBBXFx1OTIzQVxcdTkyNDBcXHU5MjNDXFx1OTI0RVxcdTkyNTlcXHU5MjUxXFx1OTIzOVxcdTkyNjdcXHU5MkE3XFx1OTI3N1xcdTkyNzhcXHU5MkU3XFx1OTJEN1xcdTkyRDlcXHU5MkQwXFx1RkEyN1xcdTkyRDVcXHU5MkUwXFx1OTJEM1xcdTkzMjVcXHU5MzIxXFx1OTJGQlxcdUZBMjhcXHU5MzFFXFx1OTJGRlxcdTkzMURcXHU5MzAyXFx1OTM3MFxcdTkzNTdcXHU5M0E0XFx1OTNDNlxcdTkzREVcXHU5M0Y4XFx1OTQzMVxcdTk0NDVcXHU5NDQ4XFx1OTU5MlxcdUY5RENcXHVGQTI5XFx1OTY5RFxcdTk2QUZcXHU5NzMzXFx1OTczQlxcdTk3NDNcXHU5NzREXFx1OTc0RlxcdTk3NTFcXHU5NzU1XFx1OTg1N1xcdTk4NjVcXHVGQTJBXFx1RkEyQlxcdTk5MjdcXHVGQTJDXFx1OTk5RVxcdTlBNEVcXHU5QUQ5XCJdLFxuICAgICAgW1wiZmM0MFwiLCBcIlxcdTlBRENcXHU5Qjc1XFx1OUI3MlxcdTlCOEZcXHU5QkIxXFx1OUJCQlxcdTlDMDBcXHU5RDcwXFx1OUQ2QlxcdUZBMkRcXHU5RTE5XFx1OUVEMVwiXVxuICAgIF07XG4gIH1cbn0pO1xuXG4vLyBub2RlX21vZHVsZXMvcmF3LWJvZHkvbm9kZV9tb2R1bGVzL2ljb252LWxpdGUvZW5jb2RpbmdzL3RhYmxlcy9ldWNqcC5qc29uXG52YXIgcmVxdWlyZV9ldWNqcCA9IF9fY29tbW9uSlMoe1xuICBcIm5vZGVfbW9kdWxlcy9yYXctYm9keS9ub2RlX21vZHVsZXMvaWNvbnYtbGl0ZS9lbmNvZGluZ3MvdGFibGVzL2V1Y2pwLmpzb25cIihleHBvcnRzMiwgbW9kdWxlMikge1xuICAgIG1vZHVsZTIuZXhwb3J0cyA9IFtcbiAgICAgIFtcIjBcIiwgXCJcXDBcIiwgMTI3XSxcbiAgICAgIFtcIjhlYTFcIiwgXCJcXHVGRjYxXCIsIDYyXSxcbiAgICAgIFtcImExYTFcIiwgXCJcXHUzMDAwXFx1MzAwMVxcdTMwMDJcXHVGRjBDXFx1RkYwRVxcdTMwRkJcXHVGRjFBXFx1RkYxQlxcdUZGMUZcXHVGRjAxXFx1MzA5QlxcdTMwOUNcXHhCNFxcdUZGNDBcXHhBOFxcdUZGM0VcXHVGRkUzXFx1RkYzRlxcdTMwRkRcXHUzMEZFXFx1MzA5RFxcdTMwOUVcXHUzMDAzXFx1NEVERFxcdTMwMDVcXHUzMDA2XFx1MzAwN1xcdTMwRkNcXHUyMDE1XFx1MjAxMFxcdUZGMEZcXHVGRjNDXFx1RkY1RVxcdTIyMjVcXHVGRjVDXFx1MjAyNlxcdTIwMjVcXHUyMDE4XFx1MjAxOVxcdTIwMUNcXHUyMDFEXFx1RkYwOFxcdUZGMDlcXHUzMDE0XFx1MzAxNVxcdUZGM0JcXHVGRjNEXFx1RkY1QlxcdUZGNURcXHUzMDA4XCIsIDksIFwiXFx1RkYwQlxcdUZGMERcXHhCMVxceEQ3XFx4RjdcXHVGRjFEXFx1MjI2MFxcdUZGMUNcXHVGRjFFXFx1MjI2NlxcdTIyNjdcXHUyMjFFXFx1MjIzNFxcdTI2NDJcXHUyNjQwXFx4QjBcXHUyMDMyXFx1MjAzM1xcdTIxMDNcXHVGRkU1XFx1RkYwNFxcdUZGRTBcXHVGRkUxXFx1RkYwNVxcdUZGMDNcXHVGRjA2XFx1RkYwQVxcdUZGMjBcXHhBN1xcdTI2MDZcXHUyNjA1XFx1MjVDQlxcdTI1Q0ZcXHUyNUNFXFx1MjVDN1wiXSxcbiAgICAgIFtcImEyYTFcIiwgXCJcXHUyNUM2XFx1MjVBMVxcdTI1QTBcXHUyNUIzXFx1MjVCMlxcdTI1QkRcXHUyNUJDXFx1MjAzQlxcdTMwMTJcXHUyMTkyXFx1MjE5MFxcdTIxOTFcXHUyMTkzXFx1MzAxM1wiXSxcbiAgICAgIFtcImEyYmFcIiwgXCJcXHUyMjA4XFx1MjIwQlxcdTIyODZcXHUyMjg3XFx1MjI4MlxcdTIyODNcXHUyMjJBXFx1MjIyOVwiXSxcbiAgICAgIFtcImEyY2FcIiwgXCJcXHUyMjI3XFx1MjIyOFxcdUZGRTJcXHUyMUQyXFx1MjFENFxcdTIyMDBcXHUyMjAzXCJdLFxuICAgICAgW1wiYTJkY1wiLCBcIlxcdTIyMjBcXHUyMkE1XFx1MjMxMlxcdTIyMDJcXHUyMjA3XFx1MjI2MVxcdTIyNTJcXHUyMjZBXFx1MjI2QlxcdTIyMUFcXHUyMjNEXFx1MjIxRFxcdTIyMzVcXHUyMjJCXFx1MjIyQ1wiXSxcbiAgICAgIFtcImEyZjJcIiwgXCJcXHUyMTJCXFx1MjAzMFxcdTI2NkZcXHUyNjZEXFx1MjY2QVxcdTIwMjBcXHUyMDIxXFx4QjZcIl0sXG4gICAgICBbXCJhMmZlXCIsIFwiXFx1MjVFRlwiXSxcbiAgICAgIFtcImEzYjBcIiwgXCJcXHVGRjEwXCIsIDldLFxuICAgICAgW1wiYTNjMVwiLCBcIlxcdUZGMjFcIiwgMjVdLFxuICAgICAgW1wiYTNlMVwiLCBcIlxcdUZGNDFcIiwgMjVdLFxuICAgICAgW1wiYTRhMVwiLCBcIlxcdTMwNDFcIiwgODJdLFxuICAgICAgW1wiYTVhMVwiLCBcIlxcdTMwQTFcIiwgODVdLFxuICAgICAgW1wiYTZhMVwiLCBcIlxcdTAzOTFcIiwgMTYsIFwiXFx1MDNBM1wiLCA2XSxcbiAgICAgIFtcImE2YzFcIiwgXCJcXHUwM0IxXCIsIDE2LCBcIlxcdTAzQzNcIiwgNl0sXG4gICAgICBbXCJhN2ExXCIsIFwiXFx1MDQxMFwiLCA1LCBcIlxcdTA0MDFcXHUwNDE2XCIsIDI1XSxcbiAgICAgIFtcImE3ZDFcIiwgXCJcXHUwNDMwXCIsIDUsIFwiXFx1MDQ1MVxcdTA0MzZcIiwgMjVdLFxuICAgICAgW1wiYThhMVwiLCBcIlxcdTI1MDBcXHUyNTAyXFx1MjUwQ1xcdTI1MTBcXHUyNTE4XFx1MjUxNFxcdTI1MUNcXHUyNTJDXFx1MjUyNFxcdTI1MzRcXHUyNTNDXFx1MjUwMVxcdTI1MDNcXHUyNTBGXFx1MjUxM1xcdTI1MUJcXHUyNTE3XFx1MjUyM1xcdTI1MzNcXHUyNTJCXFx1MjUzQlxcdTI1NEJcXHUyNTIwXFx1MjUyRlxcdTI1MjhcXHUyNTM3XFx1MjUzRlxcdTI1MURcXHUyNTMwXFx1MjUyNVxcdTI1MzhcXHUyNTQyXCJdLFxuICAgICAgW1wiYWRhMVwiLCBcIlxcdTI0NjBcIiwgMTksIFwiXFx1MjE2MFwiLCA5XSxcbiAgICAgIFtcImFkYzBcIiwgXCJcXHUzMzQ5XFx1MzMxNFxcdTMzMjJcXHUzMzREXFx1MzMxOFxcdTMzMjdcXHUzMzAzXFx1MzMzNlxcdTMzNTFcXHUzMzU3XFx1MzMwRFxcdTMzMjZcXHUzMzIzXFx1MzMyQlxcdTMzNEFcXHUzMzNCXFx1MzM5Q1xcdTMzOURcXHUzMzlFXFx1MzM4RVxcdTMzOEZcXHUzM0M0XFx1MzNBMVwiXSxcbiAgICAgIFtcImFkZGZcIiwgXCJcXHUzMzdCXFx1MzAxRFxcdTMwMUZcXHUyMTE2XFx1MzNDRFxcdTIxMjFcXHUzMkE0XCIsIDQsIFwiXFx1MzIzMVxcdTMyMzJcXHUzMjM5XFx1MzM3RVxcdTMzN0RcXHUzMzdDXFx1MjI1MlxcdTIyNjFcXHUyMjJCXFx1MjIyRVxcdTIyMTFcXHUyMjFBXFx1MjJBNVxcdTIyMjBcXHUyMjFGXFx1MjJCRlxcdTIyMzVcXHUyMjI5XFx1MjIyQVwiXSxcbiAgICAgIFtcImIwYTFcIiwgXCJcXHU0RTlDXFx1NTUxNlxcdTVBMDNcXHU5NjNGXFx1NTRDMFxcdTYxMUJcXHU2MzI4XFx1NTlGNlxcdTkwMjJcXHU4NDc1XFx1ODMxQ1xcdTdBNTBcXHU2MEFBXFx1NjNFMVxcdTZFMjVcXHU2NUVEXFx1ODQ2NlxcdTgyQTZcXHU5QkY1XFx1Njg5M1xcdTU3MjdcXHU2NUExXFx1NjI3MVxcdTVCOUJcXHU1OUQwXFx1ODY3QlxcdTk4RjRcXHU3RDYyXFx1N0RCRVxcdTlCOEVcXHU2MjE2XFx1N0M5RlxcdTg4QjdcXHU1Qjg5XFx1NUVCNVxcdTYzMDlcXHU2Njk3XFx1Njg0OFxcdTk1QzdcXHU5NzhEXFx1Njc0RlxcdTRFRTVcXHU0RjBBXFx1NEY0RFxcdTRGOURcXHU1MDQ5XFx1NTZGMlxcdTU5MzdcXHU1OUQ0XFx1NUEwMVxcdTVDMDlcXHU2MERGXFx1NjEwRlxcdTYxNzBcXHU2NjEzXFx1NjkwNVxcdTcwQkFcXHU3NTRGXFx1NzU3MFxcdTc5RkJcXHU3REFEXFx1N0RFRlxcdTgwQzNcXHU4NDBFXFx1ODg2M1xcdThCMDJcXHU5MDU1XFx1OTA3QVxcdTUzM0JcXHU0RTk1XFx1NEVBNVxcdTU3REZcXHU4MEIyXFx1OTBDMVxcdTc4RUZcXHU0RTAwXFx1NThGMVxcdTZFQTJcXHU5MDM4XFx1N0EzMlxcdTgzMjhcXHU4MjhCXFx1OUMyRlxcdTUxNDFcXHU1MzcwXFx1NTRCRFxcdTU0RTFcXHU1NkUwXFx1NTlGQlxcdTVGMTVcXHU5OEYyXFx1NkRFQlxcdTgwRTRcXHU4NTJEXCJdLFxuICAgICAgW1wiYjFhMVwiLCBcIlxcdTk2NjJcXHU5NjcwXFx1OTZBMFxcdTk3RkJcXHU1NDBCXFx1NTNGM1xcdTVCODdcXHU3MENGXFx1N0ZCRFxcdThGQzJcXHU5NkU4XFx1NTM2RlxcdTlENUNcXHU3QUJBXFx1NEUxMVxcdTc4OTNcXHU4MUZDXFx1NkUyNlxcdTU2MThcXHU1NTA0XFx1NkIxRFxcdTg1MUFcXHU5QzNCXFx1NTlFNVxcdTUzQTlcXHU2RDY2XFx1NzREQ1xcdTk1OEZcXHU1NjQyXFx1NEU5MVxcdTkwNEJcXHU5NkYyXFx1ODM0RlxcdTk5MENcXHU1M0UxXFx1NTVCNlxcdTVCMzBcXHU1RjcxXFx1NjYyMFxcdTY2RjNcXHU2ODA0XFx1NkMzOFxcdTZDRjNcXHU2RDI5XFx1NzQ1QlxcdTc2QzhcXHU3QTRFXFx1OTgzNFxcdTgyRjFcXHU4ODVCXFx1OEE2MFxcdTkyRURcXHU2REIyXFx1NzVBQlxcdTc2Q0FcXHU5OUM1XFx1NjBBNlxcdThCMDFcXHU4RDhBXFx1OTVCMlxcdTY5OEVcXHU1M0FEXFx1NTE4NlxcdTU3MTJcXHU1ODMwXFx1NTk0NFxcdTVCQjRcXHU1RUY2XFx1NjAyOFxcdTYzQTlcXHU2M0Y0XFx1NkNCRlxcdTZGMTRcXHU3MDhFXFx1NzExNFxcdTcxNTlcXHU3MUQ1XFx1NzMzRlxcdTdFMDFcXHU4Mjc2XFx1ODJEMVxcdTg1OTdcXHU5MDYwXFx1OTI1QlxcdTlEMUJcXHU1ODY5XFx1NjVCQ1xcdTZDNUFcXHU3NTI1XFx1NTFGOVxcdTU5MkVcXHU1OTY1XFx1NUY4MFxcdTVGRENcIl0sXG4gICAgICBbXCJiMmExXCIsIFwiXFx1NjJCQ1xcdTY1RkFcXHU2QTJBXFx1NkIyN1xcdTZCQjRcXHU3MzhCXFx1N0ZDMVxcdTg5NTZcXHU5RDJDXFx1OUQwRVxcdTlFQzRcXHU1Q0ExXFx1NkM5NlxcdTgzN0JcXHU1MTA0XFx1NUM0QlxcdTYxQjZcXHU4MUM2XFx1Njg3NlxcdTcyNjFcXHU0RTU5XFx1NEZGQVxcdTUzNzhcXHU2MDY5XFx1NkUyOVxcdTdBNEZcXHU5N0YzXFx1NEUwQlxcdTUzMTZcXHU0RUVFXFx1NEY1NVxcdTRGM0RcXHU0RkExXFx1NEY3M1xcdTUyQTBcXHU1M0VGXFx1NTYwOVxcdTU5MEZcXHU1QUMxXFx1NUJCNlxcdTVCRTFcXHU3OUQxXFx1NjY4N1xcdTY3OUNcXHU2N0I2XFx1NkI0Q1xcdTZDQjNcXHU3MDZCXFx1NzNDMlxcdTc5OERcXHU3OUJFXFx1N0EzQ1xcdTdCODdcXHU4MkIxXFx1ODJEQlxcdTgzMDRcXHU4Mzc3XFx1ODNFRlxcdTgzRDNcXHU4NzY2XFx1OEFCMlxcdTU2MjlcXHU4Q0E4XFx1OEZFNlxcdTkwNEVcXHU5NzFFXFx1ODY4QVxcdTRGQzRcXHU1Q0U4XFx1NjIxMVxcdTcyNTlcXHU3NTNCXFx1ODFFNVxcdTgyQkRcXHU4NkZFXFx1OENDMFxcdTk2QzVcXHU5OTEzXFx1OTlENVxcdTRFQ0JcXHU0RjFBXFx1ODlFM1xcdTU2REVcXHU1ODRBXFx1NThDQVxcdTVFRkJcXHU1RkVCXFx1NjAyQVxcdTYwOTRcXHU2MDYyXFx1NjFEMFxcdTYyMTJcXHU2MkQwXFx1NjUzOVwiXSxcbiAgICAgIFtcImIzYTFcIiwgXCJcXHU5QjQxXFx1NjY2NlxcdTY4QjBcXHU2RDc3XFx1NzA3MFxcdTc1NENcXHU3Njg2XFx1N0Q3NVxcdTgyQTVcXHU4N0Y5XFx1OTU4QlxcdTk2OEVcXHU4QzlEXFx1NTFGMVxcdTUyQkVcXHU1OTE2XFx1NTRCM1xcdTVCQjNcXHU1RDE2XFx1NjE2OFxcdTY5ODJcXHU2REFGXFx1Nzg4RFxcdTg0Q0JcXHU4ODU3XFx1OEE3MlxcdTkzQTdcXHU5QUI4XFx1NkQ2Q1xcdTk5QThcXHU4NkQ5XFx1NTdBM1xcdTY3RkZcXHU4NkNFXFx1OTIwRVxcdTUyODNcXHU1Njg3XFx1NTQwNFxcdTVFRDNcXHU2MkUxXFx1NjRCOVxcdTY4M0NcXHU2ODM4XFx1NkJCQlxcdTczNzJcXHU3OEJBXFx1N0E2QlxcdTg5OUFcXHU4OUQyXFx1OEQ2QlxcdThGMDNcXHU5MEVEXFx1OTVBM1xcdTk2OTRcXHU5NzY5XFx1NUI2NlxcdTVDQjNcXHU2OTdEXFx1OTg0RFxcdTk4NEVcXHU2MzlCXFx1N0IyMFxcdTZBMkJcXHU2QTdGXFx1NjhCNlxcdTlDMERcXHU2RjVGXFx1NTI3MlxcdTU1OURcXHU2MDcwXFx1NjJFQ1xcdTZEM0JcXHU2RTA3XFx1NkVEMVxcdTg0NUJcXHU4OTEwXFx1OEY0NFxcdTRFMTRcXHU5QzM5XFx1NTNGNlxcdTY5MUJcXHU2QTNBXFx1OTc4NFxcdTY4MkFcXHU1MTVDXFx1N0FDM1xcdTg0QjJcXHU5MURDXFx1OTM4Q1xcdTU2NUJcXHU5RDI4XFx1NjgyMlxcdTgzMDVcXHU4NDMxXCJdLFxuICAgICAgW1wiYjRhMVwiLCBcIlxcdTdDQTVcXHU1MjA4XFx1ODJDNVxcdTc0RTZcXHU0RTdFXFx1NEY4M1xcdTUxQTBcXHU1QkQyXFx1NTIwQVxcdTUyRDhcXHU1MkU3XFx1NURGQlxcdTU1OUFcXHU1ODJBXFx1NTlFNlxcdTVCOENcXHU1Qjk4XFx1NUJEQlxcdTVFNzJcXHU1RTc5XFx1NjBBM1xcdTYxMUZcXHU2MTYzXFx1NjFCRVxcdTYzREJcXHU2NTYyXFx1NjdEMVxcdTY4NTNcXHU2OEZBXFx1NkIzRVxcdTZCNTNcXHU2QzU3XFx1NkYyMlxcdTZGOTdcXHU2RjQ1XFx1NzRCMFxcdTc1MThcXHU3NkUzXFx1NzcwQlxcdTdBRkZcXHU3QkExXFx1N0MyMVxcdTdERTlcXHU3RjM2XFx1N0ZGMFxcdTgwOURcXHU4MjY2XFx1ODM5RVxcdTg5QjNcXHU4QUNDXFx1OENBQlxcdTkwODRcXHU5NDUxXFx1OTU5M1xcdTk1OTFcXHU5NUEyXFx1OTY2NVxcdTk3RDNcXHU5OTI4XFx1ODIxOFxcdTRFMzhcXHU1NDJCXFx1NUNCOFxcdTVEQ0NcXHU3M0E5XFx1NzY0Q1xcdTc3M0NcXHU1Q0E5XFx1N0ZFQlxcdThEMEJcXHU5NkMxXFx1OTgxMVxcdTk4NTRcXHU5ODU4XFx1NEYwMVxcdTRGMEVcXHU1MzcxXFx1NTU5Q1xcdTU2NjhcXHU1N0ZBXFx1NTk0N1xcdTVCMDlcXHU1QkM0XFx1NUM5MFxcdTVFMENcXHU1RTdFXFx1NUZDQ1xcdTYzRUVcXHU2NzNBXFx1NjVEN1xcdTY1RTJcXHU2NzFGXFx1NjhDQlxcdTY4QzRcIl0sXG4gICAgICBbXCJiNWExXCIsIFwiXFx1NkE1RlxcdTVFMzBcXHU2QkM1XFx1NkMxN1xcdTZDN0RcXHU3NTdGXFx1Nzk0OFxcdTVCNjNcXHU3QTAwXFx1N0QwMFxcdTVGQkRcXHU4OThGXFx1OEExOFxcdThDQjRcXHU4RDc3XFx1OEVDQ1xcdThGMURcXHU5OEUyXFx1OUEwRVxcdTlCM0NcXHU0RTgwXFx1NTA3RFxcdTUxMDBcXHU1OTkzXFx1NUI5Q1xcdTYyMkZcXHU2MjgwXFx1NjRFQ1xcdTZCM0FcXHU3MkEwXFx1NzU5MVxcdTc5NDdcXHU3RkE5XFx1ODdGQlxcdThBQkNcXHU4QjcwXFx1NjNBQ1xcdTgzQ0FcXHU5N0EwXFx1NTQwOVxcdTU0MDNcXHU1NUFCXFx1Njg1NFxcdTZBNThcXHU4QTcwXFx1NzgyN1xcdTY3NzVcXHU5RUNEXFx1NTM3NFxcdTVCQTJcXHU4MTFBXFx1ODY1MFxcdTkwMDZcXHU0RTE4XFx1NEU0NVxcdTRFQzdcXHU0RjExXFx1NTNDQVxcdTU0MzhcXHU1QkFFXFx1NUYxM1xcdTYwMjVcXHU2NTUxXFx1NjczRFxcdTZDNDJcXHU2QzcyXFx1NkNFM1xcdTcwNzhcXHU3NDAzXFx1N0E3NlxcdTdBQUVcXHU3QjA4XFx1N0QxQVxcdTdDRkVcXHU3RDY2XFx1NjVFN1xcdTcyNUJcXHU1M0JCXFx1NUM0NVxcdTVERThcXHU2MkQyXFx1NjJFMFxcdTYzMTlcXHU2RTIwXFx1ODY1QVxcdThBMzFcXHU4REREXFx1OTJGOFxcdTZGMDFcXHU3OUE2XFx1OUI1QVxcdTRFQThcXHU0RUFCXFx1NEVBQ1wiXSxcbiAgICAgIFtcImI2YTFcIiwgXCJcXHU0RjlCXFx1NEZBMFxcdTUwRDFcXHU1MTQ3XFx1N0FGNlxcdTUxNzFcXHU1MUY2XFx1NTM1NFxcdTUzMjFcXHU1MzdGXFx1NTNFQlxcdTU1QUNcXHU1ODgzXFx1NUNFMVxcdTVGMzdcXHU1RjRBXFx1NjAyRlxcdTYwNTBcXHU2MDZEXFx1NjMxRlxcdTY1NTlcXHU2QTRCXFx1NkNDMVxcdTcyQzJcXHU3MkVEXFx1NzdFRlxcdTgwRjhcXHU4MTA1XFx1ODIwOFxcdTg1NEVcXHU5MEY3XFx1OTNFMVxcdTk3RkZcXHU5OTU3XFx1OUE1QVxcdTRFRjBcXHU1MUREXFx1NUMyRFxcdTY2ODFcXHU2OTZEXFx1NUM0MFxcdTY2RjJcXHU2OTc1XFx1NzM4OVxcdTY4NTBcXHU3QzgxXFx1NTBDNVxcdTUyRTRcXHU1NzQ3XFx1NURGRVxcdTkzMjZcXHU2NUE0XFx1NkIyM1xcdTZCM0RcXHU3NDM0XFx1Nzk4MVxcdTc5QkRcXHU3QjRCXFx1N0RDQVxcdTgyQjlcXHU4M0NDXFx1ODg3RlxcdTg5NUZcXHU4QjM5XFx1OEZEMVxcdTkxRDFcXHU1NDFGXFx1OTI4MFxcdTRFNURcXHU1MDM2XFx1NTNFNVxcdTUzM0FcXHU3MkQ3XFx1NzM5NlxcdTc3RTlcXHU4MkU2XFx1OEVBRlxcdTk5QzZcXHU5OUM4XFx1OTlEMlxcdTUxNzdcXHU2MTFBXFx1ODY1RVxcdTU1QjBcXHU3QTdBXFx1NTA3NlxcdTVCRDNcXHU5MDQ3XFx1OTY4NVxcdTRFMzJcXHU2QURCXFx1OTFFN1xcdTVDNTFcXHU1QzQ4XCJdLFxuICAgICAgW1wiYjdhMVwiLCBcIlxcdTYzOThcXHU3QTlGXFx1NkM5M1xcdTk3NzRcXHU4RjYxXFx1N0FBQVxcdTcxOEFcXHU5Njg4XFx1N0M4MlxcdTY4MTdcXHU3RTcwXFx1Njg1MVxcdTkzNkNcXHU1MkYyXFx1NTQxQlxcdTg1QUJcXHU4QTEzXFx1N0ZBNFxcdThFQ0RcXHU5MEUxXFx1NTM2NlxcdTg4ODhcXHU3OTQxXFx1NEZDMlxcdTUwQkVcXHU1MjExXFx1NTE0NFxcdTU1NTNcXHU1NzJEXFx1NzNFQVxcdTU3OEJcXHU1OTUxXFx1NUY2MlxcdTVGODRcXHU2MDc1XFx1NjE3NlxcdTYxNjdcXHU2MUE5XFx1NjNCMlxcdTY0M0FcXHU2NTZDXFx1NjY2RlxcdTY4NDJcXHU2RTEzXFx1NzU2NlxcdTdBM0RcXHU3Q0ZCXFx1N0Q0Q1xcdTdEOTlcXHU3RTRCXFx1N0Y2QlxcdTgzMEVcXHU4MzRBXFx1ODZDRFxcdThBMDhcXHU4QTYzXFx1OEI2NlxcdThFRkRcXHU5ODFBXFx1OUQ4RlxcdTgyQjhcXHU4RkNFXFx1OUJFOFxcdTUyODdcXHU2MjFGXFx1NjQ4M1xcdTZGQzBcXHU5Njk5XFx1Njg0MVxcdTUwOTFcXHU2QjIwXFx1NkM3QVxcdTZGNTRcXHU3QTc0XFx1N0Q1MFxcdTg4NDBcXHU4QTIzXFx1NjcwOFxcdTRFRjZcXHU1MDM5XFx1NTAyNlxcdTUwNjVcXHU1MTdDXFx1NTIzOFxcdTUyNjNcXHU1NUE3XFx1NTcwRlxcdTU4MDVcXHU1QUNDXFx1NUVGQVxcdTYxQjJcXHU2MUY4XFx1NjJGM1xcdTYzNzJcIl0sXG4gICAgICBbXCJiOGExXCIsIFwiXFx1NjkxQ1xcdTZBMjlcXHU3MjdEXFx1NzJBQ1xcdTczMkVcXHU3ODE0XFx1Nzg2RlxcdTdENzlcXHU3NzBDXFx1ODBBOVxcdTg5OEJcXHU4QjE5XFx1OENFMlxcdThFRDJcXHU5MDYzXFx1OTM3NVxcdTk2N0FcXHU5ODU1XFx1OUExM1xcdTlFNzhcXHU1MTQzXFx1NTM5RlxcdTUzQjNcXHU1RTdCXFx1NUYyNlxcdTZFMUJcXHU2RTkwXFx1NzM4NFxcdTczRkVcXHU3RDQzXFx1ODIzN1xcdThBMDBcXHU4QUZBXFx1OTY1MFxcdTRFNEVcXHU1MDBCXFx1NTNFNFxcdTU0N0NcXHU1NkZBXFx1NTlEMVxcdTVCNjRcXHU1REYxXFx1NUVBQlxcdTVGMjdcXHU2MjM4XFx1NjU0NVxcdTY3QUZcXHU2RTU2XFx1NzJEMFxcdTdDQ0FcXHU4OEI0XFx1ODBBMVxcdTgwRTFcXHU4M0YwXFx1ODY0RVxcdThBODdcXHU4REU4XFx1OTIzN1xcdTk2QzdcXHU5ODY3XFx1OUYxM1xcdTRFOTRcXHU0RTkyXFx1NEYwRFxcdTUzNDhcXHU1NDQ5XFx1NTQzRVxcdTVBMkZcXHU1RjhDXFx1NUZBMVxcdTYwOUZcXHU2OEE3XFx1NkE4RVxcdTc0NUFcXHU3ODgxXFx1OEE5RVxcdThBQTRcXHU4Qjc3XFx1OTE5MFxcdTRFNUVcXHU5QkM5XFx1NEVBNFxcdTRGN0NcXHU0RkFGXFx1NTAxOVxcdTUwMTZcXHU1MTQ5XFx1NTE2Q1xcdTUyOUZcXHU1MkI5XFx1NTJGRVxcdTUzOUFcXHU1M0UzXFx1NTQxMVwiXSxcbiAgICAgIFtcImI5YTFcIiwgXCJcXHU1NDBFXFx1NTU4OVxcdTU3NTFcXHU1N0EyXFx1NTk3RFxcdTVCNTRcXHU1QjVEXFx1NUI4RlxcdTVERTVcXHU1REU3XFx1NURGN1xcdTVFNzhcXHU1RTgzXFx1NUU5QVxcdTVFQjdcXHU1RjE4XFx1NjA1MlxcdTYxNENcXHU2Mjk3XFx1NjJEOFxcdTYzQTdcXHU2NTNCXFx1NjYwMlxcdTY2NDNcXHU2NkY0XFx1Njc2RFxcdTY4MjFcXHU2ODk3XFx1NjlDQlxcdTZDNUZcXHU2RDJBXFx1NkQ2OVxcdTZFMkZcXHU2RTlEXFx1NzUzMlxcdTc2ODdcXHU3ODZDXFx1N0EzRlxcdTdDRTBcXHU3RDA1XFx1N0QxOFxcdTdENUVcXHU3REIxXFx1ODAxNVxcdTgwMDNcXHU4MEFGXFx1ODBCMVxcdTgxNTRcXHU4MThGXFx1ODIyQVxcdTgzNTJcXHU4ODRDXFx1ODg2MVxcdThCMUJcXHU4Q0EyXFx1OENGQ1xcdTkwQ0FcXHU5MTc1XFx1OTI3MVxcdTc4M0ZcXHU5MkZDXFx1OTVBNFxcdTk2NERcXHU5ODA1XFx1OTk5OVxcdTlBRDhcXHU5RDNCXFx1NTI1QlxcdTUyQUJcXHU1M0Y3XFx1NTQwOFxcdTU4RDVcXHU2MkY3XFx1NkZFMFxcdThDNkFcXHU4RjVGXFx1OUVCOVxcdTUxNEJcXHU1MjNCXFx1NTQ0QVxcdTU2RkRcXHU3QTQwXFx1OTE3N1xcdTlENjBcXHU5RUQyXFx1NzM0NFxcdTZGMDlcXHU4MTcwXFx1NzUxMVxcdTVGRkRcXHU2MERBXFx1OUFBOFxcdTcyREJcXHU4RkJDXCJdLFxuICAgICAgW1wiYmFhMVwiLCBcIlxcdTZCNjRcXHU5ODAzXFx1NEVDQVxcdTU2RjBcXHU1NzY0XFx1NThCRVxcdTVBNUFcXHU2MDY4XFx1NjFDN1xcdTY2MEZcXHU2NjA2XFx1NjgzOVxcdTY4QjFcXHU2REY3XFx1NzVENVxcdTdEM0FcXHU4MjZFXFx1OUI0MlxcdTRFOUJcXHU0RjUwXFx1NTNDOVxcdTU1MDZcXHU1RDZGXFx1NURFNlxcdTVERUVcXHU2N0ZCXFx1NkM5OVxcdTc0NzNcXHU3ODAyXFx1OEE1MFxcdTkzOTZcXHU4OERGXFx1NTc1MFxcdTVFQTdcXHU2MzJCXFx1NTBCNVxcdTUwQUNcXHU1MThEXFx1NjcwMFxcdTU0QzlcXHU1ODVFXFx1NTlCQlxcdTVCQjBcXHU1RjY5XFx1NjI0RFxcdTYzQTFcXHU2ODNEXFx1NkI3M1xcdTZFMDhcXHU3MDdEXFx1OTFDN1xcdTcyODBcXHU3ODE1XFx1NzgyNlxcdTc5NkRcXHU2NThFXFx1N0QzMFxcdTgzRENcXHU4OEMxXFx1OEYwOVxcdTk2OUJcXHU1MjY0XFx1NTcyOFxcdTY3NTBcXHU3RjZBXFx1OENBMVxcdTUxQjRcXHU1NzQyXFx1OTYyQVxcdTU4M0FcXHU2OThBXFx1ODBCNFxcdTU0QjJcXHU1RDBFXFx1NTdGQ1xcdTc4OTVcXHU5REZBXFx1NEY1Q1xcdTUyNEFcXHU1NDhCXFx1NjQzRVxcdTY2MjhcXHU2NzE0XFx1NjdGNVxcdTdBODRcXHU3QjU2XFx1N0QyMlxcdTkzMkZcXHU2ODVDXFx1OUJBRFxcdTdCMzlcXHU1MzE5XFx1NTE4QVxcdTUyMzdcIl0sXG4gICAgICBbXCJiYmExXCIsIFwiXFx1NUJERlxcdTYyRjZcXHU2NEFFXFx1NjRFNlxcdTY3MkRcXHU2QkJBXFx1ODVBOVxcdTk2RDFcXHU3NjkwXFx1OUJENlxcdTYzNENcXHU5MzA2XFx1OUJBQlxcdTc2QkZcXHU2NjUyXFx1NEUwOVxcdTUwOThcXHU1M0MyXFx1NUM3MVxcdTYwRThcXHU2NDkyXFx1NjU2M1xcdTY4NUZcXHU3MUU2XFx1NzNDQVxcdTc1MjNcXHU3Qjk3XFx1N0U4MlxcdTg2OTVcXHU4QjgzXFx1OENEQlxcdTkxNzhcXHU5OTEwXFx1NjVBQ1xcdTY2QUJcXHU2QjhCXFx1NEVENVxcdTRFRDRcXHU0RjNBXFx1NEY3RlxcdTUyM0FcXHU1M0Y4XFx1NTNGMlxcdTU1RTNcXHU1NkRCXFx1NThFQlxcdTU5Q0JcXHU1OUM5XFx1NTlGRlxcdTVCNTBcXHU1QzREXFx1NUUwMlxcdTVFMkJcXHU1RkQ3XFx1NjAxRFxcdTYzMDdcXHU2NTJGXFx1NUI1Q1xcdTY1QUZcXHU2NUJEXFx1NjVFOFxcdTY3OURcXHU2QjYyXFx1NkI3QlxcdTZDMEZcXHU3MzQ1XFx1Nzk0OVxcdTc5QzFcXHU3Q0Y4XFx1N0QxOVxcdTdEMkJcXHU4MEEyXFx1ODEwMlxcdTgxRjNcXHU4OTk2XFx1OEE1RVxcdThBNjlcXHU4QTY2XFx1OEE4Q1xcdThBRUVcXHU4Q0M3XFx1OENEQ1xcdTk2Q0NcXHU5OEZDXFx1NkI2RlxcdTRFOEJcXHU0RjNDXFx1NEY4RFxcdTUxNTBcXHU1QjU3XFx1NUJGQVxcdTYxNDhcXHU2MzAxXFx1NjY0MlwiXSxcbiAgICAgIFtcImJjYTFcIiwgXCJcXHU2QjIxXFx1NkVDQlxcdTZDQkJcXHU3MjNFXFx1NzRCRFxcdTc1RDRcXHU3OEMxXFx1NzkzQVxcdTgwMENcXHU4MDMzXFx1ODFFQVxcdTg0OTRcXHU4Rjl